ZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGNmZmMwMwotLS0gL2Rldi9udWxsCisrKyBiL01ha2VmaWxlCkBAIC0wLDAgKzEsMTMzIEBACisjCisjICAgIENvcHlyaWdodCAoYykgMjAxMiBOZXN0IExhYnMsIEluYy4KKyMgICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgICAgVGhpcyBkb2N1bWVudCBpcyB0aGUgcHJvcGVydHkgb2YgTmVzdC4gSXQgaXMgY29uc2lkZXJlZAorIyAgICBjb25maWRlbnRpYWwgYW5kIHByb3ByaWV0YXJ5IGluZm9ybWF0aW9uLgorIworIyAgICBUaGlzIGRvY3VtZW50IG1heSBub3QgYmUgcmVwcm9kdWNlZCBvciB0cmFuc21pdHRlZCBpbiBhbnkgZm9ybSwKKyMgICAgaW4gd2hvbGUgb3IgaW4gcGFydCwgd2l0aG91dCB0aGUgZXhwcmVzcyB3cml0dGVuIHBlcm1pc3Npb24gb2YKKyMgICAgTmVzdC4KKyMKKyMgICAgRGVzY3JpcHRpb246CisjICAgICAgVGhpcyBmaWxlIGlzIHRoZSBtYWtlIGZpbGUgZm9yIG9wcm9maWxlLCBhIHBlcmZvcm1hbmNlCisjICAgICAgcHJvZmlsaW5nIHRvb2wgZm9yIExpbnV4IHN5c3RlbXMsIGNhcGFibGUgb2YgcHJvZmlsaW5nIGFsbAorIyAgICAgIHJ1bm5pbmcgY29kZSBhdCBsb3cgb3ZlcmhlYWQuCisjCisKK0J1aWxkQ29uZmlnU3BlY2lhbGl6ZWQJOj0gTm8KK0J1aWxkUHJvZHVjdFNwZWNpYWxpemVkCTo9IE5vCisKK2luY2x1ZGUgcHJlLm1haworCitQYWNrYWdlTmFtZQkJOj0gb3Byb2ZpbGUKKworUGFja2FnZUV4dGVuc2lvbgk6PSB0YXIuZ3oKK1BhY2thZ2VTZXBhcmF0b3IJOj0gLQorCitQYWNrYWdlUGF0Y2hBcmdzCTo9IC1wMQorCitQYWNrYWdlQXJjaGl2ZQkJOj0gJChQYWNrYWdlTmFtZSkuJChQYWNrYWdlRXh0ZW5zaW9uKQorUGFja2FnZVNvdXJjZURpcgk6PSAkKFBhY2thZ2VOYW1lKSQoUGFja2FnZVNlcGFyYXRvcikkKFBhY2thZ2VWZXJzaW9uKQorCitQYWNrYWdlQnVpbGRNYWtlZmlsZQk9ICQoY2FsbCBHZW5lcmF0ZUJ1aWxkUGF0aHMsTWFrZWZpbGUpCisKK0xpY2Vuc2VTb3VyY2VGaWxlCTo9ICQoUGFja2FnZVNvdXJjZURpcikvQ09QWUlORworCitDbGVhblBhdGhzCQkrPSAkKFBhY2thZ2VMaWNlbnNlRmlsZSkKKworQmludXRpbHNEaXIJCTo9IHN3L3Rwcy9iaW51dGlscworQmludXRpbHNJbmNEaXIJCTo9ICQoY2FsbCBHZW5lcmF0ZVJlc3VsdFBhdGhzLCQoQmludXRpbHNEaXIpLHVzci9pbmNsdWRlKQorQmludXRpbHNMaWJEaXIJCTo9ICQoY2FsbCBHZW5lcmF0ZVJlc3VsdFBhdGhzLCQoQmludXRpbHNEaXIpLHVzci9saWIpCisKK0xpbnV4RGlyCQk6PSBzdy90cHMvbGludXgKK0xpbnV4SW5jRGlyCQk6PSAkKGNhbGwgR2VuZXJhdGVSZXN1bHRQYXRocywkKExpbnV4RGlyKSxpbmNsdWRlKQorCitQb3B0RGlyCQkJOj0gc3cvdHBzL3BvcHQKK1BvcHRJbmNEaXIJCTo9ICQoY2FsbCBHZW5lcmF0ZVJlc3VsdFBhdGhzLCQoUG9wdERpciksdXNyL2luY2x1ZGUpCitQb3B0TGliRGlyCQk6PSAkKGNhbGwgR2VuZXJhdGVSZXN1bHRQYXRocywkKFBvcHREaXIpLHVzci9saWIpCisKK1psaWJEaXIJCQk6PSBzdy90cHMvemxpYgorWmxpYkluY0RpciAgICAgIAk6PSAkKGNhbGwgR2VuZXJhdGVSZXN1bHRQYXRocywkKFpsaWJEaXIpLHVzci9pbmNsdWRlKQorWmxpYkxpYkRpciAgICAgIAk6PSAkKGNhbGwgR2VuZXJhdGVSZXN1bHRQYXRocywkKFpsaWJEaXIpLHVzci9saWIpCisKK2FsbDogJChQYWNrYWdlRGVmYXVsdEdvYWwpCisKKyMgR2VuZXJhdGUgdGhlIHBhY2thZ2UgbGljZW5zZSBjb250ZW50cy4KKworJChMaWNlbnNlU291cmNlRmlsZSk6IHNvdXJjZQorCiskKFBhY2thZ2VMaWNlbnNlRmlsZSk6ICQoTGljZW5zZVNvdXJjZUZpbGUpCisJJChjb3B5LXJlc3VsdCkKKworIyBFeHRyYWN0IHRoZSBzb3VyY2UgZnJvbSB0aGUgYXJjaGl2ZSBhbmQgYXBwbHkgcGF0Y2hlcywgaWYgYW55LgorCiskKFBhY2thZ2VTb3VyY2VEaXIpOiAkKFBhY2thZ2VBcmNoaXZlKSAkKFBhY2thZ2VQYXRjaFBhdGhzKQorCSQoZXhwYW5kLWFuZC1wYXRjaC1wYWNrYWdlKQorCisjIFByZXBhcmUgdGhlIHNvdXJjZXMuCisKKy5QSE9OWTogc291cmNlCitzb3VyY2U6IHwgJChQYWNrYWdlU291cmNlRGlyKQorCisjIFBhdGNoIHRoZSBzb3VyY2VzLCBpZiBuZWNlc3NhcnkuCisKKy5QSE9OWTogcGF0Y2gKK3BhdGNoOiBzb3VyY2UKKworIyBHZW5lcmF0ZSB0aGUgcGFja2FnZSBidWlsZCBtYWtlZmlsZS4KKworJChQYWNrYWdlQnVpbGRNYWtlZmlsZSk6IHwgJChQYWNrYWdlU291cmNlRGlyKSAkKEJ1aWxkRGlyZWN0b3J5KSAkKFJlc3VsdERpcmVjdG9yeSkKKwkkKFZlcmJvc2UpY2QgJChCdWlsZERpcmVjdG9yeSkgJiYgXAorCSQoQ1VSRElSKS8kKFBhY2thZ2VTb3VyY2VEaXIpL2NvbmZpZ3VyZSBcCisJQ0M9IiQoQ0MpIiBDWFg9IiQoQ1hYKSIgQVI9JChBUikgTk09JChOTSkgUkFOTElCPSQoUkFOTElCKSBTVFJJUD0kKFNUUklQKSBcCisJQ1BQRkxBR1M9IiQoY2FsbCBUb29sR2VuZXJhdGVJbmNsdWRlQXJndW1lbnQsJChCaW51dGlsc0luY0RpcikpIFwKKwkkKGNhbGwgVG9vbEdlbmVyYXRlSW5jbHVkZUFyZ3VtZW50LCQoTGludXhJbmNEaXIpKSBcCisJJChjYWxsIFRvb2xHZW5lcmF0ZUluY2x1ZGVBcmd1bWVudCwkKFBvcHRJbmNEaXIpKSBcCisJJChjYWxsIFRvb2xHZW5lcmF0ZUluY2x1ZGVBcmd1bWVudCwkKFpsaWJJbmNEaXIpKSBcCisJJChPcHJvZmlsZUNGbGFncykiIFwKKwlMREZMQUdTPSIkKGNhbGwgVG9vbEdlbmVyYXRlTGlicmFyeVBhdGhBcmd1bWVudCwkKEJpbnV0aWxzTGliRGlyKSkgXAorCSQoY2FsbCBUb29sR2VuZXJhdGVMaWJyYXJ5UGF0aEFyZ3VtZW50LCQoUG9wdExpYkRpcikpIFwKKwkkKGNhbGwgVG9vbEdlbmVyYXRlTGlicmFyeVBhdGhBcmd1bWVudCwkKFpsaWJMaWJEaXIpKSIgXAorCUlOU1RBTEw9IiQoSU5TVEFMTCkgJChJTlNUQUxMRkxBR1MpIiBcCisJLS1idWlsZD0kKEhvc3RUdXBsZSkgXAorCS0taG9zdD0kKFRhcmdldFR1cGxlKSBcCisJLS1wcmVmaXg9L3VzciBcCisJLS1zeXNjb25mZGlyPS9ldGMgXAorCS0tbG9jYWxzdGF0ZWRpcj0vdmFyIFwKKwktLWRpc2FibGUtZ3VpIFwKKwktLXdpdGgta2VybmVsLXN1cHBvcnQgXAorCS0td2l0aG91dC14CisKKyMgQ29uZmlndXJlIHRoZSBzb3VyY2UgZm9yIGJ1aWxkaW5nLgorCisuUEhPTlk6IGNvbmZpZ3VyZQorY29uZmlndXJlOiBzb3VyY2UgJChQYWNrYWdlQnVpbGRNYWtlZmlsZSkKKworIyBCdWlsZCB0aGUgc291cmNlLgorIworIyBXZSBoYXZlIHRvIHVuc2V0IE1BS0VGTEFHUyBzaW5jZSB0aGV5IGNvbmZ1c2UgdGhlIHBhY2thZ2UgYnVpbGQgb3RoZXJ3aXNlLgorCisuUEhPTlk6IGJ1aWxkCitidWlsZDogY29uZmlndXJlCisJJChWZXJib3NlKXVuc2V0IE1BS0VGTEFHUyAmJiBcCisJJChNQUtFKSAkKEpPQlNGTEFHKSAtQyAkKEJ1aWxkRGlyZWN0b3J5KSBcCisJYWxsCisKKyMgU3RhZ2UgdGhlIGJ1aWxkIHRvIGEgdGVtcG9yYXJ5IGluc3RhbGxhdGlvbiBhcmVhLgorIworIyBXZSBoYXZlIHRvIHVuc2V0IE1BS0VGTEFHUyBzaW5jZSB0aGV5IGNvbmZ1c2UgdGhlIHBhY2thZ2UgYnVpbGQgb3RoZXJ3aXNlLgorCisuUEhPTlk6IHN0YWdlCitzdGFnZTogYnVpbGQgfCAkKFJlc3VsdERpcmVjdG9yeSkKKwkkKFZlcmJvc2UpdW5zZXQgTUFLRUZMQUdTICYmIFwKKwkkKE1BS0UpICQoSk9CU0ZMQUcpIC1DICQoQnVpbGREaXJlY3RvcnkpIFwKKwlERVNURElSPSQoUmVzdWx0RGlyZWN0b3J5KSBcCisJaW5zdGFsbAorCitjbGVhbjoKKwkkKFZlcmJvc2UpJChSTSkgJChSTUZMQUdTKSAtciAkKFBhY2thZ2VTb3VyY2VEaXIpCisJJChWZXJib3NlKSQoUk0pICQoUk1GTEFHUykgLXIgJChCdWlsZERpcmVjdG9yeSkKKwkkKFZlcmJvc2UpJChSTSkgJChSTUZMQUdTKSAtciAkKFJlc3VsdERpcmVjdG9yeSkKKworaW5jbHVkZSBwb3N0Lm1hawpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvQ09QWUlORyBiL29wcm9maWxlLTAuOS43L0NPUFlJTkcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDYwYzMxYQotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L0NPUFlJTkcKQEAgLTAsMCArMSwzNDAgQEAKKwkJICAgIEdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisJCSAgICAgICBWZXJzaW9uIDIsIEp1bmUgMTk5MQorCisgQ29weXJpZ2h0IChDKSAxOTg5LCAxOTkxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgICA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCisgb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCisKKwkJCSAgICBQcmVhbWJsZQorCisgIFRoZSBsaWNlbnNlcyBmb3IgbW9zdCBzb2Z0d2FyZSBhcmUgZGVzaWduZWQgdG8gdGFrZSBhd2F5IHlvdXIKK2ZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBpdC4gIEJ5IGNvbnRyYXN0LCB0aGUgR05VIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIGlzIGludGVuZGVkIHRvIGd1YXJhbnRlZSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBmcmVlCitzb2Z0d2FyZS0tdG8gbWFrZSBzdXJlIHRoZSBzb2Z0d2FyZSBpcyBmcmVlIGZvciBhbGwgaXRzIHVzZXJzLiAgVGhpcworR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcHBsaWVzIHRvIG1vc3Qgb2YgdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24ncyBzb2Z0d2FyZSBhbmQgdG8gYW55IG90aGVyIHByb2dyYW0gd2hvc2UgYXV0aG9ycyBjb21taXQgdG8KK3VzaW5nIGl0LiAgKFNvbWUgb3RoZXIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHNvZnR3YXJlIGlzIGNvdmVyZWQgYnkKK3RoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGluc3RlYWQuKSAgWW91IGNhbiBhcHBseSBpdCB0bworeW91ciBwcm9ncmFtcywgdG9vLgorCisgIFdoZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tLCBub3QKK3ByaWNlLiAgT3VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VzIGFyZSBkZXNpZ25lZCB0byBtYWtlIHN1cmUgdGhhdCB5b3UKK2hhdmUgdGhlIGZyZWVkb20gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgZnJlZSBzb2Z0d2FyZSAoYW5kIGNoYXJnZSBmb3IKK3RoaXMgc2VydmljZSBpZiB5b3Ugd2lzaCksIHRoYXQgeW91IHJlY2VpdmUgc291cmNlIGNvZGUgb3IgY2FuIGdldCBpdAoraWYgeW91IHdhbnQgaXQsIHRoYXQgeW91IGNhbiBjaGFuZ2UgdGhlIHNvZnR3YXJlIG9yIHVzZSBwaWVjZXMgb2YgaXQKK2luIG5ldyBmcmVlIHByb2dyYW1zOyBhbmQgdGhhdCB5b3Uga25vdyB5b3UgY2FuIGRvIHRoZXNlIHRoaW5ncy4KKworICBUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIG1ha2UgcmVzdHJpY3Rpb25zIHRoYXQgZm9yYmlkCithbnlvbmUgdG8gZGVueSB5b3UgdGhlc2UgcmlnaHRzIG9yIHRvIGFzayB5b3UgdG8gc3VycmVuZGVyIHRoZSByaWdodHMuCitUaGVzZSByZXN0cmljdGlvbnMgdHJhbnNsYXRlIHRvIGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBmb3IgeW91IGlmIHlvdQorZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIHNvZnR3YXJlLCBvciBpZiB5b3UgbW9kaWZ5IGl0LgorCisgIEZvciBleGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2Ygc3VjaCBhIHByb2dyYW0sIHdoZXRoZXIKK2dyYXRpcyBvciBmb3IgYSBmZWUsIHlvdSBtdXN0IGdpdmUgdGhlIHJlY2lwaWVudHMgYWxsIHRoZSByaWdodHMgdGhhdAoreW91IGhhdmUuICBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUKK3NvdXJjZSBjb2RlLiAgQW5kIHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXIKK3JpZ2h0cy4KKworICBXZSBwcm90ZWN0IHlvdXIgcmlnaHRzIHdpdGggdHdvIHN0ZXBzOiAoMSkgY29weXJpZ2h0IHRoZSBzb2Z0d2FyZSwgYW5kCisoMikgb2ZmZXIgeW91IHRoaXMgbGljZW5zZSB3aGljaCBnaXZlcyB5b3UgbGVnYWwgcGVybWlzc2lvbiB0byBjb3B5LAorZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoZSBzb2Z0d2FyZS4KKworICBBbHNvLCBmb3IgZWFjaCBhdXRob3IncyBwcm90ZWN0aW9uIGFuZCBvdXJzLCB3ZSB3YW50IHRvIG1ha2UgY2VydGFpbgordGhhdCBldmVyeW9uZSB1bmRlcnN0YW5kcyB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGlzIGZyZWUKK3NvZnR3YXJlLiAgSWYgdGhlIHNvZnR3YXJlIGlzIG1vZGlmaWVkIGJ5IHNvbWVvbmUgZWxzZSBhbmQgcGFzc2VkIG9uLCB3ZQord2FudCBpdHMgcmVjaXBpZW50cyB0byBrbm93IHRoYXQgd2hhdCB0aGV5IGhhdmUgaXMgbm90IHRoZSBvcmlnaW5hbCwgc28KK3RoYXQgYW55IHByb2JsZW1zIGludHJvZHVjZWQgYnkgb3RoZXJzIHdpbGwgbm90IHJlZmxlY3Qgb24gdGhlIG9yaWdpbmFsCithdXRob3JzJyByZXB1dGF0aW9ucy4KKworICBGaW5hbGx5LCBhbnkgZnJlZSBwcm9ncmFtIGlzIHRocmVhdGVuZWQgY29uc3RhbnRseSBieSBzb2Z0d2FyZQorcGF0ZW50cy4gIFdlIHdpc2ggdG8gYXZvaWQgdGhlIGRhbmdlciB0aGF0IHJlZGlzdHJpYnV0b3JzIG9mIGEgZnJlZQorcHJvZ3JhbSB3aWxsIGluZGl2aWR1YWxseSBvYnRhaW4gcGF0ZW50IGxpY2Vuc2VzLCBpbiBlZmZlY3QgbWFraW5nIHRoZQorcHJvZ3JhbSBwcm9wcmlldGFyeS4gIFRvIHByZXZlbnQgdGhpcywgd2UgaGF2ZSBtYWRlIGl0IGNsZWFyIHRoYXQgYW55CitwYXRlbnQgbXVzdCBiZSBsaWNlbnNlZCBmb3IgZXZlcnlvbmUncyBmcmVlIHVzZSBvciBub3QgbGljZW5zZWQgYXQgYWxsLgorCisgIFRoZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kCittb2RpZmljYXRpb24gZm9sbG93LgorDAorCQkgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKyAgIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBDT1BZSU5HLCBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElPTgorCisgIDAuIFRoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGFueSBwcm9ncmFtIG9yIG90aGVyIHdvcmsgd2hpY2ggY29udGFpbnMKK2Egbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBzYXlpbmcgaXQgbWF5IGJlIGRpc3RyaWJ1dGVkCit1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhlICJQcm9ncmFtIiwgYmVsb3csCityZWZlcnMgdG8gYW55IHN1Y2ggcHJvZ3JhbSBvciB3b3JrLCBhbmQgYSAid29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSIKK21lYW5zIGVpdGhlciB0aGUgUHJvZ3JhbSBvciBhbnkgZGVyaXZhdGl2ZSB3b3JrIHVuZGVyIGNvcHlyaWdodCBsYXc6Cit0aGF0IGlzIHRvIHNheSwgYSB3b3JrIGNvbnRhaW5pbmcgdGhlIFByb2dyYW0gb3IgYSBwb3J0aW9uIG9mIGl0LAorZWl0aGVyIHZlcmJhdGltIG9yIHdpdGggbW9kaWZpY2F0aW9ucyBhbmQvb3IgdHJhbnNsYXRlZCBpbnRvIGFub3RoZXIKK2xhbmd1YWdlLiAgKEhlcmVpbmFmdGVyLCB0cmFuc2xhdGlvbiBpcyBpbmNsdWRlZCB3aXRob3V0IGxpbWl0YXRpb24gaW4KK3RoZSB0ZXJtICJtb2RpZmljYXRpb24iLikgIEVhY2ggbGljZW5zZWUgaXMgYWRkcmVzc2VkIGFzICJ5b3UiLgorCitBY3Rpdml0aWVzIG90aGVyIHRoYW4gY29weWluZywgZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24gYXJlIG5vdAorY292ZXJlZCBieSB0aGlzIExpY2Vuc2U7IHRoZXkgYXJlIG91dHNpZGUgaXRzIHNjb3BlLiAgVGhlIGFjdCBvZgorcnVubmluZyB0aGUgUHJvZ3JhbSBpcyBub3QgcmVzdHJpY3RlZCwgYW5kIHRoZSBvdXRwdXQgZnJvbSB0aGUgUHJvZ3JhbQoraXMgY292ZXJlZCBvbmx5IGlmIGl0cyBjb250ZW50cyBjb25zdGl0dXRlIGEgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0gKGluZGVwZW5kZW50IG9mIGhhdmluZyBiZWVuIG1hZGUgYnkgcnVubmluZyB0aGUgUHJvZ3JhbSkuCitXaGV0aGVyIHRoYXQgaXMgdHJ1ZSBkZXBlbmRzIG9uIHdoYXQgdGhlIFByb2dyYW0gZG9lcy4KKworICAxLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBQcm9ncmFtJ3MKK3NvdXJjZSBjb2RlIGFzIHlvdSByZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0IHlvdQorY29uc3BpY3VvdXNseSBhbmQgYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbiBhcHByb3ByaWF0ZQorY29weXJpZ2h0IG5vdGljZSBhbmQgZGlzY2xhaW1lciBvZiB3YXJyYW50eTsga2VlcCBpbnRhY3QgYWxsIHRoZQorbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGFic2VuY2Ugb2YgYW55IHdhcnJhbnR5OworYW5kIGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFByb2dyYW0gYSBjb3B5IG9mIHRoaXMgTGljZW5zZQorYWxvbmcgd2l0aCB0aGUgUHJvZ3JhbS4KKworWW91IG1heSBjaGFyZ2UgYSBmZWUgZm9yIHRoZSBwaHlzaWNhbCBhY3Qgb2YgdHJhbnNmZXJyaW5nIGEgY29weSwgYW5kCit5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIG9mZmVyIHdhcnJhbnR5IHByb3RlY3Rpb24gaW4gZXhjaGFuZ2UgZm9yIGEgZmVlLgorCisgIDIuIFlvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMgb2YgdGhlIFByb2dyYW0gb3IgYW55IHBvcnRpb24KK29mIGl0LCB0aHVzIGZvcm1pbmcgYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtLCBhbmQgY29weSBhbmQKK2Rpc3RyaWJ1dGUgc3VjaCBtb2RpZmljYXRpb25zIG9yIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gMQorYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczoKKworICAgIGEpIFlvdSBtdXN0IGNhdXNlIHRoZSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcworICAgIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuCisKKyAgICBiKSBZb3UgbXVzdCBjYXVzZSBhbnkgd29yayB0aGF0IHlvdSBkaXN0cmlidXRlIG9yIHB1Ymxpc2gsIHRoYXQgaW4KKyAgICB3aG9sZSBvciBpbiBwYXJ0IGNvbnRhaW5zIG9yIGlzIGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSBvciBhbnkKKyAgICBwYXJ0IHRoZXJlb2YsIHRvIGJlIGxpY2Vuc2VkIGFzIGEgd2hvbGUgYXQgbm8gY2hhcmdlIHRvIGFsbCB0aGlyZAorICAgIHBhcnRpZXMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworICAgIGMpIElmIHRoZSBtb2RpZmllZCBwcm9ncmFtIG5vcm1hbGx5IHJlYWRzIGNvbW1hbmRzIGludGVyYWN0aXZlbHkKKyAgICB3aGVuIHJ1biwgeW91IG11c3QgY2F1c2UgaXQsIHdoZW4gc3RhcnRlZCBydW5uaW5nIGZvciBzdWNoCisgICAgaW50ZXJhY3RpdmUgdXNlIGluIHRoZSBtb3N0IG9yZGluYXJ5IHdheSwgdG8gcHJpbnQgb3IgZGlzcGxheSBhbgorICAgIGFubm91bmNlbWVudCBpbmNsdWRpbmcgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSBhbmQgYQorICAgIG5vdGljZSB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IChvciBlbHNlLCBzYXlpbmcgdGhhdCB5b3UgcHJvdmlkZQorICAgIGEgd2FycmFudHkpIGFuZCB0aGF0IHVzZXJzIG1heSByZWRpc3RyaWJ1dGUgdGhlIHByb2dyYW0gdW5kZXIKKyAgICB0aGVzZSBjb25kaXRpb25zLCBhbmQgdGVsbGluZyB0aGUgdXNlciBob3cgdG8gdmlldyBhIGNvcHkgb2YgdGhpcworICAgIExpY2Vuc2UuICAoRXhjZXB0aW9uOiBpZiB0aGUgUHJvZ3JhbSBpdHNlbGYgaXMgaW50ZXJhY3RpdmUgYnV0CisgICAgZG9lcyBub3Qgbm9ybWFsbHkgcHJpbnQgc3VjaCBhbiBhbm5vdW5jZW1lbnQsIHlvdXIgd29yayBiYXNlZCBvbgorICAgIHRoZSBQcm9ncmFtIGlzIG5vdCByZXF1aXJlZCB0byBwcmludCBhbiBhbm5vdW5jZW1lbnQuKQorDAorVGhlc2UgcmVxdWlyZW1lbnRzIGFwcGx5IHRvIHRoZSBtb2RpZmllZCB3b3JrIGFzIGEgd2hvbGUuICBJZgoraWRlbnRpZmlhYmxlIHNlY3Rpb25zIG9mIHRoYXQgd29yayBhcmUgbm90IGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSwKK2FuZCBjYW4gYmUgcmVhc29uYWJseSBjb25zaWRlcmVkIGluZGVwZW5kZW50IGFuZCBzZXBhcmF0ZSB3b3JrcyBpbgordGhlbXNlbHZlcywgdGhlbiB0aGlzIExpY2Vuc2UsIGFuZCBpdHMgdGVybXMsIGRvIG5vdCBhcHBseSB0byB0aG9zZQorc2VjdGlvbnMgd2hlbiB5b3UgZGlzdHJpYnV0ZSB0aGVtIGFzIHNlcGFyYXRlIHdvcmtzLiAgQnV0IHdoZW4geW91CitkaXN0cmlidXRlIHRoZSBzYW1lIHNlY3Rpb25zIGFzIHBhcnQgb2YgYSB3aG9sZSB3aGljaCBpcyBhIHdvcmsgYmFzZWQKK29uIHRoZSBQcm9ncmFtLCB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3aG9sZSBtdXN0IGJlIG9uIHRoZSB0ZXJtcyBvZgordGhpcyBMaWNlbnNlLCB3aG9zZSBwZXJtaXNzaW9ucyBmb3Igb3RoZXIgbGljZW5zZWVzIGV4dGVuZCB0byB0aGUKK2VudGlyZSB3aG9sZSwgYW5kIHRodXMgdG8gZWFjaCBhbmQgZXZlcnkgcGFydCByZWdhcmRsZXNzIG9mIHdobyB3cm90ZSBpdC4KKworVGh1cywgaXQgaXMgbm90IHRoZSBpbnRlbnQgb2YgdGhpcyBzZWN0aW9uIHRvIGNsYWltIHJpZ2h0cyBvciBjb250ZXN0Cit5b3VyIHJpZ2h0cyB0byB3b3JrIHdyaXR0ZW4gZW50aXJlbHkgYnkgeW91OyByYXRoZXIsIHRoZSBpbnRlbnQgaXMgdG8KK2V4ZXJjaXNlIHRoZSByaWdodCB0byBjb250cm9sIHRoZSBkaXN0cmlidXRpb24gb2YgZGVyaXZhdGl2ZSBvcgorY29sbGVjdGl2ZSB3b3JrcyBiYXNlZCBvbiB0aGUgUHJvZ3JhbS4KKworSW4gYWRkaXRpb24sIG1lcmUgYWdncmVnYXRpb24gb2YgYW5vdGhlciB3b3JrIG5vdCBiYXNlZCBvbiB0aGUgUHJvZ3JhbQord2l0aCB0aGUgUHJvZ3JhbSAob3Igd2l0aCBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0pIG9uIGEgdm9sdW1lIG9mCithIHN0b3JhZ2Ugb3IgZGlzdHJpYnV0aW9uIG1lZGl1bSBkb2VzIG5vdCBicmluZyB0aGUgb3RoZXIgd29yayB1bmRlcgordGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4KKworICAzLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGEgd29yayBiYXNlZCBvbiBpdCwKK3VuZGVyIFNlY3Rpb24gMikgaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZgorU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIGRvIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorCisgICAgYSkgQWNjb21wYW55IGl0IHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZQorICAgIHNvdXJjZSBjb2RlLCB3aGljaCBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucworICAgIDEgYW5kIDIgYWJvdmUgb24gYSBtZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2U7IG9yLAorCisgICAgYikgQWNjb21wYW55IGl0IHdpdGggYSB3cml0dGVuIG9mZmVyLCB2YWxpZCBmb3IgYXQgbGVhc3QgdGhyZWUKKyAgICB5ZWFycywgdG8gZ2l2ZSBhbnkgdGhpcmQgcGFydHksIGZvciBhIGNoYXJnZSBubyBtb3JlIHRoYW4geW91cgorICAgIGNvc3Qgb2YgcGh5c2ljYWxseSBwZXJmb3JtaW5nIHNvdXJjZSBkaXN0cmlidXRpb24sIGEgY29tcGxldGUKKyAgICBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUsIHRvIGJlCisgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgb24gYSBtZWRpdW0KKyAgICBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCisKKyAgICBjKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgaW5mb3JtYXRpb24geW91IHJlY2VpdmVkIGFzIHRvIHRoZSBvZmZlcgorICAgIHRvIGRpc3RyaWJ1dGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZS4gIChUaGlzIGFsdGVybmF0aXZlIGlzCisgICAgYWxsb3dlZCBvbmx5IGZvciBub25jb21tZXJjaWFsIGRpc3RyaWJ1dGlvbiBhbmQgb25seSBpZiB5b3UKKyAgICByZWNlaXZlZCB0aGUgcHJvZ3JhbSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gd2l0aCBzdWNoCisgICAgYW4gb2ZmZXIsIGluIGFjY29yZCB3aXRoIFN1YnNlY3Rpb24gYiBhYm92ZS4pCisKK1RoZSBzb3VyY2UgY29kZSBmb3IgYSB3b3JrIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgd29yayBmb3IKK21ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiAgRm9yIGFuIGV4ZWN1dGFibGUgd29yaywgY29tcGxldGUgc291cmNlCitjb2RlIG1lYW5zIGFsbCB0aGUgc291cmNlIGNvZGUgZm9yIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueQorYXNzb2NpYXRlZCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgcGx1cyB0aGUgc2NyaXB0cyB1c2VkIHRvCitjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgdGhlIGV4ZWN1dGFibGUuICBIb3dldmVyLCBhcyBhCitzcGVjaWFsIGV4Y2VwdGlvbiwgdGhlIHNvdXJjZSBjb2RlIGRpc3RyaWJ1dGVkIG5lZWQgbm90IGluY2x1ZGUKK2FueXRoaW5nIHRoYXQgaXMgbm9ybWFsbHkgZGlzdHJpYnV0ZWQgKGluIGVpdGhlciBzb3VyY2Ugb3IgYmluYXJ5Citmb3JtKSB3aXRoIHRoZSBtYWpvciBjb21wb25lbnRzIChjb21waWxlciwga2VybmVsLCBhbmQgc28gb24pIG9mIHRoZQorb3BlcmF0aW5nIHN5c3RlbSBvbiB3aGljaCB0aGUgZXhlY3V0YWJsZSBydW5zLCB1bmxlc3MgdGhhdCBjb21wb25lbnQKK2l0c2VsZiBhY2NvbXBhbmllcyB0aGUgZXhlY3V0YWJsZS4KKworSWYgZGlzdHJpYnV0aW9uIG9mIGV4ZWN1dGFibGUgb3Igb2JqZWN0IGNvZGUgaXMgbWFkZSBieSBvZmZlcmluZworYWNjZXNzIHRvIGNvcHkgZnJvbSBhIGRlc2lnbmF0ZWQgcGxhY2UsIHRoZW4gb2ZmZXJpbmcgZXF1aXZhbGVudAorYWNjZXNzIHRvIGNvcHkgdGhlIHNvdXJjZSBjb2RlIGZyb20gdGhlIHNhbWUgcGxhY2UgY291bnRzIGFzCitkaXN0cmlidXRpb24gb2YgdGhlIHNvdXJjZSBjb2RlLCBldmVuIHRob3VnaCB0aGlyZCBwYXJ0aWVzIGFyZSBub3QKK2NvbXBlbGxlZCB0byBjb3B5IHRoZSBzb3VyY2UgYWxvbmcgd2l0aCB0aGUgb2JqZWN0IGNvZGUuCisMCisgIDQuIFlvdSBtYXkgbm90IGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbQorZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBBbnkgYXR0ZW1wdAorb3RoZXJ3aXNlIHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGlzCit2b2lkLCBhbmQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuCitIb3dldmVyLCBwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkIGNvcGllcywgb3IgcmlnaHRzLCBmcm9tIHlvdSB1bmRlcgordGhpcyBMaWNlbnNlIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBzbyBsb25nIGFzIHN1Y2gKK3BhcnRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZS4KKworICA1LiBZb3UgYXJlIG5vdCByZXF1aXJlZCB0byBhY2NlcHQgdGhpcyBMaWNlbnNlLCBzaW5jZSB5b3UgaGF2ZSBub3QKK3NpZ25lZCBpdC4gIEhvd2V2ZXIsIG5vdGhpbmcgZWxzZSBncmFudHMgeW91IHBlcm1pc3Npb24gdG8gbW9kaWZ5IG9yCitkaXN0cmlidXRlIHRoZSBQcm9ncmFtIG9yIGl0cyBkZXJpdmF0aXZlIHdvcmtzLiAgVGhlc2UgYWN0aW9ucyBhcmUKK3Byb2hpYml0ZWQgYnkgbGF3IGlmIHlvdSBkbyBub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gIFRoZXJlZm9yZSwgYnkKK21vZGlmeWluZyBvciBkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSksIHlvdSBpbmRpY2F0ZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIHRvIGRvIHNvLCBhbmQKK2FsbCBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGluZyBvciBtb2RpZnlpbmcKK3RoZSBQcm9ncmFtIG9yIHdvcmtzIGJhc2VkIG9uIGl0LgorCisgIDYuIEVhY2ggdGltZSB5b3UgcmVkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0pLCB0aGUgcmVjaXBpZW50IGF1dG9tYXRpY2FsbHkgcmVjZWl2ZXMgYSBsaWNlbnNlIGZyb20gdGhlCitvcmlnaW5hbCBsaWNlbnNvciB0byBjb3B5LCBkaXN0cmlidXRlIG9yIG1vZGlmeSB0aGUgUHJvZ3JhbSBzdWJqZWN0IHRvCit0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZnVydGhlcgorcmVzdHJpY3Rpb25zIG9uIHRoZSByZWNpcGllbnRzJyBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZWluLgorWW91IGFyZSBub3QgcmVzcG9uc2libGUgZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgdG8KK3RoaXMgTGljZW5zZS4KKworICA3LiBJZiwgYXMgYSBjb25zZXF1ZW5jZSBvZiBhIGNvdXJ0IGp1ZGdtZW50IG9yIGFsbGVnYXRpb24gb2YgcGF0ZW50CitpbmZyaW5nZW1lbnQgb3IgZm9yIGFueSBvdGhlciByZWFzb24gKG5vdCBsaW1pdGVkIHRvIHBhdGVudCBpc3N1ZXMpLAorY29uZGl0aW9ucyBhcmUgaW1wb3NlZCBvbiB5b3UgKHdoZXRoZXIgYnkgY291cnQgb3JkZXIsIGFncmVlbWVudCBvcgorb3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGV5IGRvIG5vdAorZXhjdXNlIHlvdSBmcm9tIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZS4gIElmIHlvdSBjYW5ub3QKK2Rpc3RyaWJ1dGUgc28gYXMgdG8gc2F0aXNmeSBzaW11bHRhbmVvdXNseSB5b3VyIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMKK0xpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UKK21heSBub3QgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBhdCBhbGwuICBGb3IgZXhhbXBsZSwgaWYgYSBwYXRlbnQKK2xpY2Vuc2Ugd291bGQgbm90IHBlcm1pdCByb3lhbHR5LWZyZWUgcmVkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYnkKK2FsbCB0aG9zZSB3aG8gcmVjZWl2ZSBjb3BpZXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0aHJvdWdoIHlvdSwgdGhlbgordGhlIG9ubHkgd2F5IHlvdSBjb3VsZCBzYXRpc2Z5IGJvdGggaXQgYW5kIHRoaXMgTGljZW5zZSB3b3VsZCBiZSB0bworcmVmcmFpbiBlbnRpcmVseSBmcm9tIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbS4KKworSWYgYW55IHBvcnRpb24gb2YgdGhpcyBzZWN0aW9uIGlzIGhlbGQgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyCithbnkgcGFydGljdWxhciBjaXJjdW1zdGFuY2UsIHRoZSBiYWxhbmNlIG9mIHRoZSBzZWN0aW9uIGlzIGludGVuZGVkIHRvCithcHBseSBhbmQgdGhlIHNlY3Rpb24gYXMgYSB3aG9sZSBpcyBpbnRlbmRlZCB0byBhcHBseSBpbiBvdGhlcgorY2lyY3Vtc3RhbmNlcy4KKworSXQgaXMgbm90IHRoZSBwdXJwb3NlIG9mIHRoaXMgc2VjdGlvbiB0byBpbmR1Y2UgeW91IHRvIGluZnJpbmdlIGFueQorcGF0ZW50cyBvciBvdGhlciBwcm9wZXJ0eSByaWdodCBjbGFpbXMgb3IgdG8gY29udGVzdCB2YWxpZGl0eSBvZiBhbnkKK3N1Y2ggY2xhaW1zOyB0aGlzIHNlY3Rpb24gaGFzIHRoZSBzb2xlIHB1cnBvc2Ugb2YgcHJvdGVjdGluZyB0aGUKK2ludGVncml0eSBvZiB0aGUgZnJlZSBzb2Z0d2FyZSBkaXN0cmlidXRpb24gc3lzdGVtLCB3aGljaCBpcworaW1wbGVtZW50ZWQgYnkgcHVibGljIGxpY2Vuc2UgcHJhY3RpY2VzLiAgTWFueSBwZW9wbGUgaGF2ZSBtYWRlCitnZW5lcm91cyBjb250cmlidXRpb25zIHRvIHRoZSB3aWRlIHJhbmdlIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkCit0aHJvdWdoIHRoYXQgc3lzdGVtIGluIHJlbGlhbmNlIG9uIGNvbnNpc3RlbnQgYXBwbGljYXRpb24gb2YgdGhhdAorc3lzdGVtOyBpdCBpcyB1cCB0byB0aGUgYXV0aG9yL2Rvbm9yIHRvIGRlY2lkZSBpZiBoZSBvciBzaGUgaXMgd2lsbGluZwordG8gZGlzdHJpYnV0ZSBzb2Z0d2FyZSB0aHJvdWdoIGFueSBvdGhlciBzeXN0ZW0gYW5kIGEgbGljZW5zZWUgY2Fubm90CitpbXBvc2UgdGhhdCBjaG9pY2UuCisKK1RoaXMgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBtYWtlIHRob3JvdWdobHkgY2xlYXIgd2hhdCBpcyBiZWxpZXZlZCB0bworYmUgYSBjb25zZXF1ZW5jZSBvZiB0aGUgcmVzdCBvZiB0aGlzIExpY2Vuc2UuCisMCisgIDguIElmIHRoZSBkaXN0cmlidXRpb24gYW5kL29yIHVzZSBvZiB0aGUgUHJvZ3JhbSBpcyByZXN0cmljdGVkIGluCitjZXJ0YWluIGNvdW50cmllcyBlaXRoZXIgYnkgcGF0ZW50cyBvciBieSBjb3B5cmlnaHRlZCBpbnRlcmZhY2VzLCB0aGUKK29yaWdpbmFsIGNvcHlyaWdodCBob2xkZXIgd2hvIHBsYWNlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIExpY2Vuc2UKK21heSBhZGQgYW4gZXhwbGljaXQgZ2VvZ3JhcGhpY2FsIGRpc3RyaWJ1dGlvbiBsaW1pdGF0aW9uIGV4Y2x1ZGluZwordGhvc2UgY291bnRyaWVzLCBzbyB0aGF0IGRpc3RyaWJ1dGlvbiBpcyBwZXJtaXR0ZWQgb25seSBpbiBvciBhbW9uZworY291bnRyaWVzIG5vdCB0aHVzIGV4Y2x1ZGVkLiAgSW4gc3VjaCBjYXNlLCB0aGlzIExpY2Vuc2UgaW5jb3Jwb3JhdGVzCit0aGUgbGltaXRhdGlvbiBhcyBpZiB3cml0dGVuIGluIHRoZSBib2R5IG9mIHRoaXMgTGljZW5zZS4KKworICA5LiBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucworb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuICBTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsCitiZSBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGUgcHJlc2VudCB2ZXJzaW9uLCBidXQgbWF5IGRpZmZlciBpbiBkZXRhaWwgdG8KK2FkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLgorCitFYWNoIHZlcnNpb24gaXMgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gIElmIHRoZSBQcm9ncmFtCitzcGVjaWZpZXMgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIExpY2Vuc2Ugd2hpY2ggYXBwbGllcyB0byBpdCBhbmQgImFueQorbGF0ZXIgdmVyc2lvbiIsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucworZWl0aGVyIG9mIHRoYXQgdmVyc2lvbiBvciBvZiBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb24uICBJZiB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBzcGVjaWZ5IGEgdmVyc2lvbiBudW1iZXIgb2YKK3RoaXMgTGljZW5zZSwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24uCisKKyAgMTAuIElmIHlvdSB3aXNoIHRvIGluY29ycG9yYXRlIHBhcnRzIG9mIHRoZSBQcm9ncmFtIGludG8gb3RoZXIgZnJlZQorcHJvZ3JhbXMgd2hvc2UgZGlzdHJpYnV0aW9uIGNvbmRpdGlvbnMgYXJlIGRpZmZlcmVudCwgd3JpdGUgdG8gdGhlIGF1dGhvcgordG8gYXNrIGZvciBwZXJtaXNzaW9uLiAgRm9yIHNvZnR3YXJlIHdoaWNoIGlzIGNvcHlyaWdodGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3ZSBzb21ldGltZXMKK21ha2UgZXhjZXB0aW9ucyBmb3IgdGhpcy4gIE91ciBkZWNpc2lvbiB3aWxsIGJlIGd1aWRlZCBieSB0aGUgdHdvIGdvYWxzCitvZiBwcmVzZXJ2aW5nIHRoZSBmcmVlIHN0YXR1cyBvZiBhbGwgZGVyaXZhdGl2ZXMgb2Ygb3VyIGZyZWUgc29mdHdhcmUgYW5kCitvZiBwcm9tb3RpbmcgdGhlIHNoYXJpbmcgYW5kIHJldXNlIG9mIHNvZnR3YXJlIGdlbmVyYWxseS4KKworCQkJICAgIE5PIFdBUlJBTlRZCisKKyAgMTEuIEJFQ0FVU0UgVEhFIFBST0dSQU0gSVMgTElDRU5TRUQgRlJFRSBPRiBDSEFSR0UsIFRIRVJFIElTIE5PIFdBUlJBTlRZCitGT1IgVEhFIFBST0dSQU0sIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUgTEFXLiAgRVhDRVBUIFdIRU4KK09USEVSV0lTRSBTVEFURUQgSU4gV1JJVElORyBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EL09SIE9USEVSIFBBUlRJRVMKK1BST1ZJREUgVEhFIFBST0dSQU0gIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VECitPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFRIRSBFTlRJUkUgUklTSyBBUworVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBQUk9HUkFNIElTIFdJVEggWU9VLiAgU0hPVUxEIFRIRQorUFJPR1JBTSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsCitSRVBBSVIgT1IgQ09SUkVDVElPTi4KKworICAxMi4gSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTiBXUklUSU5HCitXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1BWSBNT0RJRlkgQU5EL09SCitSRURJU1RSSUJVVEUgVEhFIFBST0dSQU0gQVMgUEVSTUlUVEVEIEFCT1ZFLCBCRSBMSUFCTEUgVE8gWU9VIEZPUiBEQU1BR0VTLAorSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HCitPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBQUk9HUkFNIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVECitUTyBMT1NTIE9GIERBVEEgT1IgREFUQSBCRUlORyBSRU5ERVJFRCBJTkFDQ1VSQVRFIE9SIExPU1NFUyBTVVNUQUlORUQgQlkKK1lPVSBPUiBUSElSRCBQQVJUSUVTIE9SIEEgRkFJTFVSRSBPRiBUSEUgUFJPR1JBTSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSCitQUk9HUkFNUyksIEVWRU4gSUYgU1VDSCBIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUKK1BPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworCQkgICAgIEVORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OUworDAorCSAgICBIb3cgdG8gQXBwbHkgVGhlc2UgVGVybXMgdG8gWW91ciBOZXcgUHJvZ3JhbXMKKworICBJZiB5b3UgZGV2ZWxvcCBhIG5ldyBwcm9ncmFtLCBhbmQgeW91IHdhbnQgaXQgdG8gYmUgb2YgdGhlIGdyZWF0ZXN0Citwb3NzaWJsZSB1c2UgdG8gdGhlIHB1YmxpYywgdGhlIGJlc3Qgd2F5IHRvIGFjaGlldmUgdGhpcyBpcyB0byBtYWtlIGl0CitmcmVlIHNvZnR3YXJlIHdoaWNoIGV2ZXJ5b25lIGNhbiByZWRpc3RyaWJ1dGUgYW5kIGNoYW5nZSB1bmRlciB0aGVzZSB0ZXJtcy4KKworICBUbyBkbyBzbywgYXR0YWNoIHRoZSBmb2xsb3dpbmcgbm90aWNlcyB0byB0aGUgcHJvZ3JhbS4gIEl0IGlzIHNhZmVzdAordG8gYXR0YWNoIHRoZW0gdG8gdGhlIHN0YXJ0IG9mIGVhY2ggc291cmNlIGZpbGUgdG8gbW9zdCBlZmZlY3RpdmVseQorY29udmV5IHRoZSBleGNsdXNpb24gb2Ygd2FycmFudHk7IGFuZCBlYWNoIGZpbGUgc2hvdWxkIGhhdmUgYXQgbGVhc3QKK3RoZSAiY29weXJpZ2h0IiBsaW5lIGFuZCBhIHBvaW50ZXIgdG8gd2hlcmUgdGhlIGZ1bGwgbm90aWNlIGlzIGZvdW5kLgorCisgICAgPG9uZSBsaW5lIHRvIGdpdmUgdGhlIHByb2dyYW0ncyBuYW1lIGFuZCBhIGJyaWVmIGlkZWEgb2Ygd2hhdCBpdCBkb2VzLj4KKyAgICBDb3B5cmlnaHQgKEMpIDx5ZWFyPiAgPG5hbWUgb2YgYXV0aG9yPgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorCisKK0Fsc28gYWRkIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjb250YWN0IHlvdSBieSBlbGVjdHJvbmljIGFuZCBwYXBlciBtYWlsLgorCitJZiB0aGUgcHJvZ3JhbSBpcyBpbnRlcmFjdGl2ZSwgbWFrZSBpdCBvdXRwdXQgYSBzaG9ydCBub3RpY2UgbGlrZSB0aGlzCit3aGVuIGl0IHN0YXJ0cyBpbiBhbiBpbnRlcmFjdGl2ZSBtb2RlOgorCisgICAgR25vbW92aXNpb24gdmVyc2lvbiA2OSwgQ29weXJpZ2h0IChDKSB5ZWFyICBuYW1lIG9mIGF1dGhvcgorICAgIEdub21vdmlzaW9uIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWTsgZm9yIGRldGFpbHMgdHlwZSBgc2hvdyB3Jy4KKyAgICBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIGFuZCB5b3UgYXJlIHdlbGNvbWUgdG8gcmVkaXN0cmlidXRlIGl0CisgICAgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zOyB0eXBlIGBzaG93IGMnIGZvciBkZXRhaWxzLgorCitUaGUgaHlwb3RoZXRpY2FsIGNvbW1hbmRzIGBzaG93IHcnIGFuZCBgc2hvdyBjJyBzaG91bGQgc2hvdyB0aGUgYXBwcm9wcmlhdGUKK3BhcnRzIG9mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgT2YgY291cnNlLCB0aGUgY29tbWFuZHMgeW91IHVzZSBtYXkKK2JlIGNhbGxlZCBzb21ldGhpbmcgb3RoZXIgdGhhbiBgc2hvdyB3JyBhbmQgYHNob3cgYyc7IHRoZXkgY291bGQgZXZlbiBiZQorbW91c2UtY2xpY2tzIG9yIG1lbnUgaXRlbXMtLXdoYXRldmVyIHN1aXRzIHlvdXIgcHJvZ3JhbS4KKworWW91IHNob3VsZCBhbHNvIGdldCB5b3VyIGVtcGxveWVyIChpZiB5b3Ugd29yayBhcyBhIHByb2dyYW1tZXIpIG9yIHlvdXIKK3NjaG9vbCwgaWYgYW55LCB0byBzaWduIGEgImNvcHlyaWdodCBkaXNjbGFpbWVyIiBmb3IgdGhlIHByb2dyYW0sIGlmCituZWNlc3NhcnkuICBIZXJlIGlzIGEgc2FtcGxlOyBhbHRlciB0aGUgbmFtZXM6CisKKyAgWW95b2R5bmUsIEluYy4sIGhlcmVieSBkaXNjbGFpbXMgYWxsIGNvcHlyaWdodCBpbnRlcmVzdCBpbiB0aGUgcHJvZ3JhbQorICBgR25vbW92aXNpb24nICh3aGljaCBtYWtlcyBwYXNzZXMgYXQgY29tcGlsZXJzKSB3cml0dGVuIGJ5IEphbWVzIEhhY2tlci4KKworICA8c2lnbmF0dXJlIG9mIFR5IENvb24+LCAxIEFwcmlsIDE5ODkKKyAgVHkgQ29vbiwgUHJlc2lkZW50IG9mIFZpY2UKKworVGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGRvZXMgbm90IHBlcm1pdCBpbmNvcnBvcmF0aW5nIHlvdXIgcHJvZ3JhbSBpbnRvCitwcm9wcmlldGFyeSBwcm9ncmFtcy4gIElmIHlvdXIgcHJvZ3JhbSBpcyBhIHN1YnJvdXRpbmUgbGlicmFyeSwgeW91IG1heQorY29uc2lkZXIgaXQgbW9yZSB1c2VmdWwgdG8gcGVybWl0IGxpbmtpbmcgcHJvcHJpZXRhcnkgYXBwbGljYXRpb25zIHdpdGggdGhlCitsaWJyYXJ5LiAgSWYgdGhpcyBpcyB3aGF0IHlvdSB3YW50IHRvIGRvLCB1c2UgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwKK1B1YmxpYyBMaWNlbnNlIGluc3RlYWQgb2YgdGhpcyBMaWNlbnNlLgpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvQ2hhbmdlTG9nLTIwMDEgYi9vcHJvZmlsZS0wLjkuNy9DaGFuZ2VMb2ctMjAwMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hY2M1YmU0Ci0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvQ2hhbmdlTG9nLTIwMDEKQEAgLTAsMCArMSwyMzI3IEBACisyMDAxLTEyLTMxICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgorCisJKiBtb2R1bGUvb3BfaW5pdC5jOgorCSogbW9kdWxlL29wcm9maWxlLmM6IGV4cG9ydCBjcHUgdHlwZSBwcmVwYXJpbmcgZm9yIHVzZXIgc3BhY2UKKwkgIGNwdSBkZXRlY3Rpb24gY2hhbmdlCisJKiBtb2R1bGUvb3Byb2ZpbGUuaDogcHJlcGFyYXRvcnkgd29yayB0byBhZGQgc3VwcG9ydCBmb3IKKwkgIHByZWVtcHQgcGF0Y2gKKworCSogcHAvb3Byb2ZwcC5jcHA6IGNsZWFudXAgI2lmIDAgLi4uICNlbHNlIC4uLiAjZW5kaWYKKwkqIHBwL29yb2ZwcF91dGlsLmNwcDogYWxsb3cgdG8gZGVkdWNlIGltYWdlIG5hbWUgZnJvbQorCSAgc2hhcmVkIGxpYiBzYW1wbGVzIGZpbGVzIG5hbWUgcHJvZHVjZWQgd2l0aAorCSAgLS1zZXBhcmF0ZS1zYW1wbGVzCisKKwkqIGd1aS9vcHJvZl9zdGFydC5jcHA6IG1pbm9yIGZpeAorCisyMDAxLTEyLTMxICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgorCisJKiB2YXJpb3VzIGZpbGVzOiB1c2Ugb3BfY3B1IGVudW0gZm9yIGNwdSB0eXBlCisgCisJKiBhbGwgLmN2c2lnbm9yZToKKwkqIFJ1bGVzLm1ha2UuaW46CisJKiBhbGwgTWFrZWZpbGUuaW46IGhpZGUgLmQgZmlsZXMgaW4gLmRlcHMgZGlyZWN0b3JpZXMKKworMjAwMS0xMi0zMSAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogTWFrZWZpbGUuaW46IG1vdmUgY29uZmlnLmguaW4gdG8gbWFpbnRhaW5lcmNsZWFuIC0gaXQgaXMgaW5jbHVkZWQKKwlpbiBhIHRhcmJhbGwgc28gYSBkaXN0Y2xlYW4gc2hvdWxkbid0IHJlbW92ZSBpdAorIAorMjAwMS0xMi0zMSAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogVE9ETzogdXBkYXRlCisgCisJKiBndWkvdWkvb3Byb2Zfc3RhcnQuYmFzZS51aToKKwkqIGRvYy9vcHJvZmlsZS5zZ21sOgorCSogZG9jL29wcm9maWxlLjEuaW46IHNtYWxsIHVwZGF0ZXMKKyAKKwkqIG9wcm9maWxlLmM6IG1vcmUgZGV0YWlsIG9uIGxvY2tpbmcgcmVxdWlyZW1lbnRzIGZvciB3YWtlX3VwCisgCisyMDAxLTEyLTMxICBNaWNoZWwgRGFnZW5haXMgIDxtaWNoZWwuZGFnZW5haXNAcG9seW10bC5jYT4KKworCSogZ3VpL29wcm9mX3N0YXJ0LmNwcDoKKwkqIGd1aS9vcHJvZl9zdGFydC5oOiBzaG93IHRvdGFsIHNhbXBsZXMgc28gZmFyCisgCisyMDAxLTEyLTI5ICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgorCisJKiBkYWUvb3Byb2ZpbGVkLmM6CisJKiBkYWUvb3Bfc3RhcnQ6IC0tc2VwYXJhdGUtc2FtcGxlcyBpcyB3b3JraW5nCisKKwkqIGd1aS9vcHJvZl9zdGFydC5jcHA6CisJKiBndWkvb3Byb2Zfc3RhcnRfY29uZmlnLmNwcDoKKwkqIGd1aS9vcHJvZl9zdGFydF9jb25maWcuaDoKKwkqIGd1aS91aS9vcHJvZl9zdGFydC5iYXNlLnVpOiBoYW5kbGUgc2VwYXJhdGluZyBmb3IKKwkgIHNoYXJlZCBsaWJzLCBvZmYgYnkgZGVmYXVsdC4KKworCSogZG9jL29wcm9maWxlLnNnbWw6CisJKiBkb2Mvb3Byb2ZpbGUuMS5pbjogZG9jdW1lbnQgLS1zaG93LXNoYXJlZC1saWJzCisKKwkqIHBwL29wZl9maWx0ZXIuaDoKKwkqIHBwL29wZl9jb250YWluZXIuY3BwOiBuZXcgY2xhc3Mgc2FtcGxlc19maWxlc190CisJICB0byBlYXNpZXIgYWNjZXNzIHRvIHN1YnNldCBvZiBzeW1ib2xzL3NhbXBsZXMgb3IKKwkgIHNvdXJjZSBmaWxlbmFtZSBmcm9tIG11bHRpcGxlIGltYWdlCisKKwkqIHBwL01ha2VmaWxlLmluOgorCSogcHAvb3BfdGltZS5jcHA6CisJKiBwcC9vcGZfZmlsdGVyLmNwcDoKKwkqIHBwL29wcm9mcHAuY3BwOgorCSogcHAvb3Byb2ZwcC5oOgorCSogcHAvb3Byb2ZwcF91dGlsLmNwcDogaW1wbGVtZW50IC0tc2hvdy1zaGFyZWQtbGlicyBleGNlcHQKKwkgIGZvciBvcGZfZmlsdGVyCisKKwkqIHV0aWwvZmlsZV9tYW5pcC5oOgorCSogdXRpbC9maWxlX21hbmlwLmNwcDogbmV3IGZ1bmN0aW9uIHRvIG1hbmlwdWxhdGUgc2FtcGxlCisJICBmaWxlIG5hbWUgYW5kIGxpc3Qgb2Ygc2FtcGxlIGZpbGUgbmFtZS4KKworMjAwMS0xMi0yNyAgUGhpbGlwcGUgRWxpZSAgPHBoX2VAY2x1Yi1pbnRlcm5ldC5mcj4KKworCSogZGFlL29wX3N0b3A6IGFsd2F5cyBkbyBhbiBvcF9kdW1wIGJlZm9yZSBzdG9wcGluZworCSogZ3VpL29wcm9mX3N0YXJ0LmNwcDogb3BfZHVtcCBiZWZvcmUgb3Bfc3RvcAorCSAgbm8gbG9uZ2VyIHJlcXVpcmVkCisKKzIwMDEtMTItMjYgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+CisKKwkqIHBwL29wZl9maWx0ZXIuY3BwOgorCSogcHAvb3BmX2ZpbHRlci5oOgorCSogcHAvb3Byb2ZwcC5oOgorCSogcHAvb3BmX2ZpbHRlci5jcHA6CQorCSogcHAvb3Byb2ZwcF91dGlsLmNwcDoKKwkqIHBwL29wcm9mcHAuY3BwOgorCSogcHAvb3BfdGltZS5jOiByZW1vdmUgc29tZSB1c2Ugb2YgZ2xvYmFsIHZhcgorCSAgc2FtcGxlZmlsZSBhbmQgaW1hZ2VmaWxlCisKKwkqIHBwL29wcm9mcHAuY3BwOiBkb19kdW1wX2dwcm9mKCkgZnJlZSBtZW1vcnkKKwkgIHRvbyBzb29uLiAod2FzIGJ1Z2dlZCBmcm9tIDIwMDEtMTItMDUpCisKKwkqIGRvYy9vcHJvZmlsZS5zZ21sOiByZW1vdmUgbWVudGlvbiBhYm91dCBvcHJvZi10aHJlYWQKKworMjAwMS0xMi0yMyAgUGhpbGlwcGUgRWxpZSAgPHBoX2VAY2x1Yi1pbnRlcm5ldC5mcj4KKworCSogdXRpbC9zdHJpbmdfbWFuaXAuaDoKKwkqIHV0aWwvc3RyaW5nX21hbmlwLmNwcDogc2VwYXJhdGVfdG9rZW4oKSBuZXcgZnVuY3Rpb24KKworCSogcHAvb3BmX2ZpbHRlci5jcHA6CisJKiBwcC9vcHJvZnBwLmNwcDoKKwkqIHBwL29wcm9mcHAuaDoKKwkqIHBwL29wcm9mcHBfdXRpbC5jcHA6CisJKiBkb2Mvb3Byb2ZpbC4xLmluOgorCSogZG9jL29wcm9maWxlLnNnbWw6IGFkZCBzdXBwb3J0IGZvciAtLWV4Y2x1ZGUtc3ltYm9sCisKKwkqIFRPRE86IHVwZGF0ZQorCisyMDAxLTEyLTIyICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgorCisJKiBkYWUvb3Bfc3RhcnQ6IGFkZCAtLXNlcGFyYXRlLXNhbXBsZXMKKwkqIGRhZS9vcHJvZmlsZWQuYzogZGl0dG8KKwkqIGRhZS9vcGRfcHJvYy5jOgorCSogZGFlL29wZF91dGlsLmg6CisJKiBkYWUvb3BkX3V0aWwuYzoKKwkqIGRhZS9vcHJvZmlsZWQuaDogaW1wbGVtZW50YXRpb24gb2YgYWJvdmUKKwkqIHBwL29wX3RpbWUuY3BwOiAKKwkqIGRvYy9vcHJvZmlsZS4xLmluOgorCSogZG9jL29wcmZpbGUuc2dtbDogaGFuZGxlIGFuZCBkb2N1bWVudCBhYm92ZQorCSogcHAvb3Byb2ZwcF91dGlsLmNwcDogbWlub3IgY2hhbmdlIHJlbGF0ZWQKKworCSogZGFlL29wcm9maWxlZC5jOiBidWcgZml4IHdoaWxlIGJsb2NraW5nIHNpZ25hbAorCisJKiBkb2MvTWFrZWZpbGUuaW46IGF2b2lkIHVuZWNlc3NhcnkgYnVpbGQgb2YgaHRtbCBkb2MKKworMjAwMS0xMi0yMiAgRGF2ZSBKb25lcyA8ZGF2ZWpAc3VzZS5kZT4KKworCSogY29uZmlnLmguaW46IFJlYWRkIHRvIENWUy4KKworMjAwMS0xMi0xOCAgRGF2ZSBKb25lcyA8ZGF2ZWpAc3VzZS5kZT4KKworCSogTWFrZWZpbGUuaW46IE1ha2UgZG9jdW1lbnRhdGlvbiBidWlsZCBhZ2Fpbi4KKworMjAwMS0xMi0xNCAgUGhpbGlwcGUgRWxpZSAgPHBoX2VAY2x1Yi1pbnRlcm5ldC5mcj4KKworCSogZGFlL29wZF9wcm9jLmM6IG1lbW9yeSBsZWFrIGZpeCBpbiBvcGRfaW5pdF9pbWFnZXMoKQorCisyMDAxLTEyLTEyICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgorCisJKiBtb2R1bGUvb3Byb2ZpbGUuaDogY2hhbmdlIHNsaWdodGx5IG9wX2hhc2goKQorCisJKiB1dGlsL2ZpbGVfbWFuaXAuaDoKKwkqIHV0aWwvZmlsZV9tYW5pcC5jcHA6CisJKiB1dGlsL3N0cmluZ19tYW5pcC5oOgorCSogdXRpbC9zdHJpbmdfbWFuaXAuY3BwOgorCSogdXRpbC9jaGlsZF9yZWFkZXIuaDoKKwkqIHV0aWwvY2hpbGRfcmVhZGVyLmNwcDogY2xlYW51cCBKb2huJ3MgRklYTUUKKworCSogZGFlL29wZF91dGlsLmg6CisJKiBkYWUvb3BkX3V0aWwuYzogbW92ZSBsaWJpYmVydHkgdGhpbmdzIHRvIC4uLgorCSogdXRpbC9taXNjLmg6CisJKiB1dGlsL21pc2MuYzogaGVyZQorCSogdXRpbC9NYWtlZmlsZS5pbjogdXBkYXRlCisJKiBkYWUvTWFrZWZpbGUuaW46CisJKiBwcC9NYWtlZmlsZS5pbjoKKworCSogZG9jL01ha2VmaWxlLmluOiBpbnN0YWxsIHRoZSBodG1sIGRvYworCisyMDAxLTEyLTEwICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgorCisJKiBkYWUvb3Byb2ZpbGVkLmM6IGZpeCBzaWdwcm9jbWFzaygpIGJsb29wZXIKKyAKKzIwMDEtMTItMDkgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIFRPRE86IHVwZGF0ZSBhZ2FpbgorIAorCSogdXRpbC9jaGlsZF9yZWFkZXIuaDoKKwkqIHV0aWwvY2hpbGRfcmVhZGVyLmNwcDogCisJKiB1dGlsL2ZpbGVfbWFuaXAuY3BwOgorCSogdXRpbC9zdHJpbmdfbWFuaXAuY3BwOiBwZWRhbnRpYyBjbGVhbnVwICsgRklYTUVzCisKKzIwMDEtMTItMDkgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIGNvbmZpZ3VyZS5pbjogYWRkIEZJWE1FIGNvbW1lbnQKKworCSogdXRpbC9maWxlX21hbmlwLmg6IGFkZCBGSVhNRSBjb21tZW50LCAKKwkgIGF2b2lkIHdhcm5pbmcgd2l0aCAvLworIAorMjAwMS0xMi0wOSAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogVE9ETzogdXBkYXRlCisKKzIwMDEtMTItMDkgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+CisKKwkqIGRhZS9vcGRfcHJvYy5jOiB2ZXJicHJpbnRmKCkgd2hhdCBjYXVzZSB0aGUKKwkgIGRlbGV0aW9uIG9mIGEgc2FtcGxlIGZpbGUgKyBtaW5vciBjbGVhbnVwCisJKiBkb2Mvb3Byb2ZpbGUuc2dtbDogZG9jdW1lbnQgc2FtcGxlcyBmaWxlcyBiYWNrdXAKKworMjAwMS0xMi0wNyAgUGhpbGlwcGUgRWxpZSAgPHBoX2VAY2x1Yi1pbnRlcm5ldC5mcj4KKworCSogZGFlL29wcm9maWxlZC5oOgorCSogZGFlL29wZF9wcm9jLmM6IGhhbmRsZSBhbiBhY2Nlc3NlZCBmaWVsZCBvZgorCSAgZGVsZXRlZCBvZiBkZWxldGVkIHByb2NzIHRvIGRlZmVyIGRlbGV0aW5nCisJICB0aGUgcHJvY3MuIFRoaXMgZ3JlYXRseSByZWR1Y2UgdGhlIE5yIG9mIGxvc3QKKwkgIHNhbXBsZXMgZHVlIHRvIG5vIHByb2MgaW5mb3JtYXRpb24uCisKKzIwMDEtMTItMDYgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+CisKKwkqIGRhZS9vcHJvZmlsZWQuaDoKKwkqIGRhZS9vcGRfcHJvYy5jOiBzZXBhcmF0ZSBzdGF0cyBmb3Iga2VybmVsCisJICBhbmQgbW9kdWxlcyBhZGRyZXNzIHNwYWNlIGFuZCBtaW5vciBjbGVhbnVwCisKKzIwMDEtMTItMDUgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+CisKKwkqIFJ1bGVzLm1ha2UuaW46CisJKiBkYWUvTWFrZWZpbGUuaW46CisJKiBldmVudHMvTWFrZWZpbGUuaW46CisJKiBwcC9NYWtlZmlsZS5pbjogCisJKiB1dGlsL01ha2VmaWxlLmluOiB0aWR5CisJKiBtb2R1bGUvTWFrZWZpbGUuaW46CisJKiBndWkvTWFrZWZpbGUuaW46IHVzZSBhdXRvLWRlcHMKKworCSogdXRpbC9jaGlsZF9yZWFkZXIuaDogYWxsb3cgdG8gY29tcGlsZSB3aXRoIC1hbnNpCisJKiB1dGlsL2NoaWxkX3JlYWRlci5jcHA6IGZpeCBtZW1vcnkgbGVhayBmaXgKKwkqIHBwL29wcm9mcHAuY3BwOiBmaXggbWVtb3J5IGxlYWsKKworCSogVE9ETzogdXBkYXRlCisKKzIwMDEtMTItMDUgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+CisKKwkqIGF1dG9nZW4uc2g6IHVzZSBhdXRvaGVhZGVyIHRvIGNyZWF0ZSBjb25maWcuaAorCSogY29uZmlndXJlLmluOiBoYW5kbGUgbWlzc2luZyBsaWJpYmVydHkuaCBhbmQKKwkgIG1pc3NpbmcgeGNhbGxvYyBpbiBsaWJpYmVydHkuYQorCSogZGFlL29wZF91dGlsLmNwcDoKKwkqIGRhZS9vcGRfcHJvYy5jOiAKKwkqIGRhZS9vcGRfdXRpbC5oOgorCSogZGFlL29wcm9maWxlZC5jOgorCSogZXZldHMvTWFrZWZpbGUuaW4KKwkqIHBwL29wcm9mX2NvbnZlcnQuYzoKKwkqIHBwL29wcm9mcHAuY3BwOgorCSogcHAvb3Byb2ZwcF91dGlsLmNwcDogcmVwbGFjZSBvcGRfbWFsbG9jKCkgYW5kIHJlbGF0ZWQKKwkgIGJ5IHhtYWxsb2MuCisJKiB1dGlsL29wX3BvcHQuYzogYWRkIGNhbGwgdG8geG1hbGxvY19zZXRfcHJvZ3JhbV9uYW1lKCkKKwkqIC4vY3ZzaWdub3JlOiBhZGQgY29uZmlnLmgsIGNvbmZpZy5oLmluCisKKzIwMDEtMTItMDQgIERhdmUgSm9uZXMgPGRhdmVqQHN1c2UuZGU+CisKKwkqIGV2ZW50cy9vcF9ldmVudHNfZGVzYy5jOgorCSAgQWRkIHJlY29nbml0aW9uIGZvciBhbHRlcm5hdGl2ZSBQSUlJIHN0cmluZy4KKwkgIFJlcG9ydGVkIGJ5IExldiBJc2Vyb3ZpY2ggPGxldkBjaXByaWNvLmNvbT4KKwkKKzIwMDEtMTItMDQgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+CisKKwkqIGRhZS9vcGRfdXRpbC5jOgorCSogZGFlL29wZF91dGlsLmM6IG1vdmUgY29tbW9uIGZ1Y3Rpb25uYWxpdHkgdG8gLi4uCisJKiB1dGlsL2ZpbGVfbWFuaXAuaAorCSogdXRpbC9maWxlX21hbmlwLmM6IGhlcmUKKwkqIHBwL29wcm9mX2NvbnZlcnQuYzogcmVmbGVjdCBhYm92ZSBjaGFuZ2UKKwkqIHBwL29wcm9mX2NvbnZlcnQuYzoKKwkqIHBwL29wZl9maWx0ZXIuY3BwOiBkaXR0byArIG1pbm9yIGNsZWFudXAKKwkqIGd1aS9NYWtlZmlsZS5pbjoKKwkqIHBwL01ha2VmaWxlLmluOiByZWZsZWN0IGFib3ZlIGNoYW5nZQorCisyMDAxLTEyLTAyICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgorCisJKiBwcC9vcHJvZnBwLmg6CisJKiBwcC9vcHJvZnBwLmNwcDoKKwkqIHBwL29wcm9mcHBfdXRpbC5jcHA6CisJKiBwcC9vcGZfZmlsdGVyLmNwcDogc21hbGwgdGlkaWVzCisKKzIwMDEtMTItMDEgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+CisKKwkqIE1ha2VmaWxlLmluOiBidWlsZCB1dGlsIHN1Yi1kaXIgZmlyc3QKKworCSogZGFlL29wZF91dGlsLmg6CisJKiBkYWUvb3BkX3V0aWwuYzogbW92ZSBvcGRfR2V0Q29udGV4dCgpIC4uLgorCSogdXRpbC9vcGRfcG9wdC5oOgorCSogdXRpbC9vcGRfcG9wdC5jOiBpbiB0aGVzZSBuZXcgZmlsZXMKKworCSogcHAvb3Byb2ZwcC5jcHA6CisJKiBwcC9vcGZfZmlsdGVyLmNwcDoKKwkqIHBwL29wX3RpbWUuY3BwOgorCSogZGFlL29wcm9maWxlZC5jOiBmcmVlIHRoZSBwb3B0Q29udGV4dCArIGNsZWFudXAgcG9wdAorCisJKiBldmVudHMvb3BfaGVscC5jOgorCSogZXZlbnRzL01ha2VmaWxlLmluOiB1c2UgdGhlIHBvcHQgbGlicmFyeQorCisJKiBwcC9vcHJvZnBwLmNwcDogYWxsb3cgdG8gdXNlIC0tb3V0cHV0LWxpbmVuci1pbmZvIHdpdGgKKwkgIC0tbGlzdC1zeW1ib2xzLgorCSogZG9jL29wcm9maWxlLjEuaW46CisJKiBkb2Mvb3Byb2ZpbGUuc2dtbDogcmVmbGVjdCBpdAorCisyMDAxLTEyLTAxICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgorCisJKiBkYWUvb3BkX3Byb2MuYzoKKwkqIGRhZS9vcGRfdXRpbC5jOgorCSogZGFlL29wZF91dGlsLmg6CisJKiBkYWUvb3Byb2ZpbGVkLmM6IGJhY2t1cCBpZiBuZWVkZWQgb2xkIHNhbXBsZXMgZmlsZXMKKwkgIGluIGEgc2VwYXJhdGUgZGlyZWN0b3J5CisKKwkqIHBwL29wcm9mcHAuaDoKKwkqIHBwL29wcm9mcHBfdXRpbC5jcHA6IGNsZWFudXAgKyBtaW5vciBidWdsZXQgZml4CisKKwkqIHV0aWwvZmlsZV9tYW5pcC5oOgorCSogdXRpbC9maWxlX21hbmlwLmNwcDogY3JlYXRlX2ZpbGVfbGlzdCgpIG5ldyB0byBjcmVhdGUKKwkgIGEgbGlzdCBvZiBhbGwgdGhlIGZpbGUgaW4gYSBkaXJlY3RvcnkKKworCSogcHAvb3BfdGltZS5jcHA6IG5ldyB1dGlsaXR5CisJKiBwcC9NYWtlZmlsZS5pbjogaGFuZGxlIG9wX3RpbWUKKworCSogZG9jL29wcm9maWxlLnNnbWw6IAorCSogZG9jL29wcm9maWxlLjEuaW46IERvY3VtZW50IG9wX3RpbWUKKworMjAwMS0xMS0zMCAgUGhpbGlwcGUgRWxpZSAgPHBoX2VAY2x1Yi1pbnRlcm5ldC5mcj4KKworCSogY29uZmlndXJlLmluOiBjdnMgYWRkIFJ1bGVzLm1ha2UuaW4uCisKKzIwMDEtMTEtMzAgIERhdmUgSm9uZXMgPGRhdmVqQHN1c2UuZGU+CisKKwkqIGNvbmZpZ3VyZS5pbjogc3VwcHJlc3MgcmVmZXJlbmNlIHRvIGFuIGluZXhpc3RhbnQKKwkgIFJ1bGVzLm1ha2UuaW4KKworMjAwMS0xMS0yOSAgUGhpbGlwcGUgRWxpZSAgPHBoX2VAY2x1Yi1pbnRlcm5ldC5mcj4KKworCSogcHAvb3Byb2ZwcF91dGlsLmNwcDogZG8gbm90IHJlbW92ZSBsZWFkaW5nIHVuZGVyc2NvcmUgdG8KKwkgIGF2b2lkIEMrKyBkZW1hbmdsaW5nIGZhaWx1cmUKKworMjAwMS0xMS0yNyAgUGhpbGlwcGUgRWxpZSAgPHBoX2VAY2x1Yi1pbnRlcm5ldC5mcj4KKworCSogY29uZmlndXJlLmluOgorCSogcHAvTWFrZWZpbGUuaW46IHdvcmstYXJvdW5kIGZvciBnY2MgMy4wIGFuZCBiZmQgcHJlLTE5OTgKKworCSogZG9jL29wcm9maWxlLnNnbWw6IHR5cG8KKworMjAwMS0xMS0yNiAgUGhpbGlwcGUgRWxpZSAgPHBoX2VAY2x1Yi1pbnRlcm5ldC5mcj4KKworCSogUnVsZXMubWFrZS5pbjogbmV3IHRvIGFkZCBhdXRvZGVwcyBhbmQgc2hhcmUgY29tbW9ucworCSAgZGVmaW5pdGlvbnMKKwkqIGFsbCBNYWtlZmlsZS5pbiBleGNlcHQgbW9kdWxlLCBndWk6IHVzZSBhdXRvZGVwcworCisJKiBkb2Mvb3Byb2ZpbGUuMS5pbjogdHlwbworCisJKiB1dGlsL2ZpbGVtYW5pcC5oOiBtaXNzaW5nIHN0ZDo6CisKKzIwMDEtMTEtMjUgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+CisKKwkqIG9wcm9maWxlLXRlc3RzL3VuZGVyc3RhbmRpbmcvcGVyc2lzdGVudC5jcHA6IG5ldworCSogdXRpbC9wZXJzaXN0ZW50Lmg6IG5ldy4gQW4gYXR0ZW1wdCB0byBwcm92aWRlIGEgYmV0dGVyCisJICBjb25maWd1cmF0aW9uIHNhdmluZy9yZXN0b3JpbmcgbGlicmFyeS4gTm90IHlldCBsaW5rZWQgdG8KKwkgIG9wcm9mX3N0YXJ0LgorCisyMDAxLTExLTIyICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgorCisJKiBwcC9vcHJvZnBwX3V0aWwuY3BwOiB0YWtlIGNhcmUgdGhhbiBnZXRfbGluZW5yKCkgZ2V0CisJICBsaW5lIG5yIGFuZCBmaWxlbmFtZSBpbmZvIGZyb20gYmZkIGZvciB0aGUgcmlnaHQgc3ltYm9sCisJICBhbmQgbm90IGZvciB0aGUgbmVhcmVzdCBzeW1ib2wgd2l0aCBkZWJ1ZyBpbmZvICgjNDg0NjYwKQorCisyMDAxLTExLTE1ICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgorCisJKiBtb2R1bGUvb3Byb2ZpbGUuaDogd29yayBhcm91bmQgYWdhaW5zdCBhIGdjYworCSAgMi45MS42NiBjb2RlIGdlbmVyYXRpb24gYnVnIGluIG9wcm9mX2V4aXQoKQorCisyMDAxLTExLTE0ICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgorCisJKiBkYWUvb3Bfc3RhcnQ6IGRvIG5vdCBwYXNzIGJ1ZnNpemUsIG5vdGVfYnVmc2l6ZSBhbmQKKwkgIGtlcm5lbF9vbmx5IGFzIG9wdGlvbiB0byB0aGUgZGFlbW9uIGJ1dCAuLi4KKwkqIGRhZS9vcHJvZmlsZWQuYzogcmVhZCB0aGVtIGZyb20gc3lzY3RsCisKKwkqIGRhZS9vcGRfcHJvYy5jOiBpbiBvcGRfaGFuZGxlX29sZF9zYW1wbGVfZmlsZSgpIGRvIG5vdAorCSAgZGVsZXRlIHNhbXBsZSBmaWxlIGlmIG10aW1lIGRpZmZlciBidXQgYmFja3VwIGl0LgorCisJKiBkb2Mvb3Byb2ZpbGUuc2dtbDoKKwkqIHBwL29wcm9mX2NvbnZlcnQuYzoKKwkqIHBwL29wcm9mcHBfdXRpbC5jcHA6IHJlcGxhY2Ugc2Vzc2lvbiBudW1iZXIgYnkKKwkgIGJhY2t1cCBudW1iZXIKKworCSogdXRpbC9zdHJpbmdfbWFuaXAuY3BwOiBmaXggc3R1cGlkIGJ1ZyBpbiBydHJpbSgpCisKKzIwMDEtMTEtMTMgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+CisKKwkqIGd1aS9vcHJvZl9zdGFydC5oOgorCSogZ3VpL29wcm9mX3N0YXJ0LmNwcDoKKwkqIGRhZS9vcGRfdXRpbC5oOgorCSogZGFlL29wZF91dGlsLmNwcDogc21hbGwgY2xlYW51cAorCisJKiBtb2R1bGUvb3Byb2ZpbGUuYzogc2ltcGxpZnkgYSBsaXR0bGUgd2hhdCB0aGUKKwkgIG5taSBoYW5kbGVyCisKKwkqIGRvYy9vcHJvZmlsZS5zZ21sOiBjbGFyaWZ5IG9wX3RvX3NvdXJjZSBvcHRpb25zCisKKwkqIHBwL2NoaWxkX3JlYWRlci5jcHA6CisJKiBwcC9jaGlsZF9yZWFkZXIuaDogbW92ZSB0aGVzZSAuLi4KKwkqIHV0aWwvY2hpbGRfcmVhZGVyLmNwcDoKKwkqIHV0aWwvY2hpbGRfcmVhZGVyLmg6IGhlcmUKKwkqIHV0aWwvZmlsZV9tYW5pcC5oOgorCSogdXRpbC9maWxlX21hbmlwLmNwcDogbmV3CisJKiBndWkvTWFrZWZpbGUuaW46CisJKiBndWkvb3Byb2Zfc3RhcnRfdXRpbC5oOgorCSogZ3VpL29wcm9mX3N0YXJ0X3V0aWwuY3BwOgorCSogcHAvTWFrZWZpbGUuaW46CisJKiBwcC9vcGZfZmlsdGVyLmNwcDogdXNlIGNoaWxkX3JlYWRlciBhbmQgZmlsZV9tYW5pcAorCisJKiBwcC9vcHJvZnBwX3V0aWwuY3BwOiBjaGFuZ2Ugb3JkZXJpbmcgb2Ygb3BlbmluZyBpbgorCSAgb3BwX2JmZCBjdHIgdG8gYXZvaWQgY3J5cHRpYyBlcnJvciBtZXNzYWdlCisKKwkqIFRPRE86IHVwZGF0ZQorCisyMDAxLTExLTEyICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgorCisJKiBldmVudHM6IG5ldyBkaXJlY3RvcnkKKworCSogZXZlbnRzL01ha2VmaWxlLmluOgorCSogZXZlbnRzL29wX2V2ZW50cy5jOgorCSogZXZlbnRzL29wX2V2ZW50c19kZXNjLmM6CisJKiBldmVudHMvb3BfaGVscC5jOiBuZXcsIHNwbGl0dGVkIGZyb20gb3BfZXZlbnRzLmMKKworCSogcHAvb3Byb2ZwcF91dGlsLmNwcDogbmV3LCBzcGxpdHRlZCBmcm9tIG9wcm9mcHAuY3BwCisKKwkqIHBwL29wcm9mcHAuaDoKKwkqIHBwL29wcm9mcHAuYzoKKwkqIG9wX3VzZXIuaDoKKwkqIGFsbCBNYWtlZmlsZS5pbjogdXBkYXRlCisJKiBvcF9ldmVudHMuYzogcmVtb3ZlCisKKzIwMDEtMTEtMTIgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+CisKKwkqIG9wX2V2ZW50cy5jOiBsYXN0IGNvbW1pdCB3YXMgYmFkCisJCisJKiBwcC9vcHJvZnBwLmM6IHVzZSBzc3RyZWFtCisKKzIwMDEtMTEtMTIgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+CisKKwkqIHV0aWw6IG5ldyBkaXJlY3RvcnkKKwkqIHV0aWwvc3RyaW5nX21hbmlwLmNwcDoKKwkqIHV0aWwvc3RyaW5nX21hbmlwLmg6IG5ldworCSogTWFrZWZpbGUuaW46IGhhbmRsZSB1dGlsIGRpcmVjdG9yeQorCSogcHAvTWFrZWZpbGUuaW46CisJKiBwcC9vcGZfZmlsdGVyLmg6CisJKiBwcC9vcGZfZmlsdGVyLmNwcDoKKwkqIGd1aS9NYWtlZmlsZS5pbjoKKwkqIGd1aS9vcHJvZl9zdGFydF91dGlsLmNwcDoKKwkqIGd1aS9vcHJvZl9zdGFydF91dGlsLmg6IHVwZGF0ZSB0byB1c2Ugc3RyaW5nX21hbmlwLmNwcAorCisJKiBvcF9ldmVudHMuYzoKKwkqIG9wX3VzZXIuaDoKKwkqIHBwL29wZl9maWx0ZXIuaDoKKwkqIHBwL29wZl9maWx0ZXIuY3BwOgorCSogcHAvb3BmX2NvbnRhaW5lci5jcHA6IHJlbW92ZSBkZWFkIGNvZGUKKworMjAwMS0xMS0xMSAgRGF2ZSBKb25lcyA8ZGF2ZWpAc3VzZS5kZT4KKworCSogbW9kdWxlL29wcm9maWxlLltjfGhdOiBDaGFuZ2UgTVNSIGRlZmluZXMgZnJvbQorCSAgTVNSX0lBMzJfeHh4IGZyb20gTVNSX1A2X3h4eCwgYmFzZWQgb24gaW5mbyBvbgorCSAgTGludXgga2VybmVsIGZyb20gTWlrYWVsIFBldHRlcnNzb24gdGhhdCB0aGVzZSBNU1JzCisJICBkb24ndCBleGlzdCBvbiBQZW50aXVtIDQuCisKKzIwMDEtMTEtMTEgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+CisKKwkqIGd1aS9vcHJvZl9zdGFydC5jcHA6IGZpeCByZWNvcmRfY29uZmlnKCkKKworCSogb3BfdXNlci5oOiBmaXggb25lIGNvbW1lbnQKKworMjAwMS0xMS0xMCAgQm9iIE1vbnRnb21lcnkgIDxib2JfbW9udGdvbWVyeUBocC5jb20+CisKKwkqIG1vZHVsZS9vcHJvZmlsZS5jOiBmaXggcGlkL3BncnAgZmlsdGVyIHRvIHJlc2V0IGNvdW50ZXIgCisKKzIwMDEtMTEtMDggIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIFRPRE86IHVwZGF0ZQorCisJKiBjb25maWd1cmUuaW46IGJ1bXAgdG8gMC4wLjhjdnMKKyAKKzIwMDEtMTEtMDcgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIGFjaW5jbHVkZS5tNDoKKwkqIGNvbmZpZ3VyZS5pbjogZml4ZXMgZm9yIGNvbmZpZ3VyYXRpb24gd2hlbiBRdDIgbm90IGZvdW5kCisKKwkqIGNoaWxkX3JlYWRlci5oOgorCSogY2hpbGRfcmVhZGVyLmNwcDogY29tcGlsZSB3aXRoIGdjYyAzLjAKKyAKKzIwMDEtMTEtMDcgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIGNvbmZpZ3VyZS5pbjogYnVtcCB0byAwLjAuNworIAorMjAwMS0xMS0wNyAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogY29uZmlndXJlLmluOgorCSogbW9kdWxlL29wcm9maWxlLmg6CisJKiBtb2R1bGUvb3Byb2ZpbGUuYzogZmFpbCBpZiBoYXJkX2dldF9jdXJyZW50KCkgZXhpc3RzCisJICAtIHRoaXMgd29uJ3Qgd29yaworIAorMjAwMS0xMS0wNiAgUGhpbGlwcGUgRWxpZSAgPHBoX2VAY2x1Yi1pbnRlcm5ldC5mcj4KKworCSogZG9jL29wcm9maWxlLjEuaW46IHJlZm9ybWF0IG9wdGlvbnMKKwkqIGRvYy9vcHJvZmlsZS5zZ21sOiBjbGFyaWZ5IG9wdGlvbnMgdGhhdCByZXF1aXJlIGFyZ3VtZW50LgorCSAgRG9jdW1lbnQgc2hvcnQgb3B0aW9uCisKKwkqIGd1aS9vcHJvZl9zdGFydF91dGlsLmNwcDogZml4IGJhc2VuYW1lKCkKKworCSogcHAvb3Byb2ZwcC5jcHA6CisJKiBwcC9vcHJvZnBwLmg6CisJKiBwcC9vcGZfZmlsdGVyLmNwcDogYmV0dGVyIG9wdGlvbnMgaGFuZGxpbmcKKworCSogbW9kdWxlL29wcm9maWxlLmM6IHVwZGF0ZSBvbmUgY29tbWVudAorCisJKiBUT0RPOiB1cGRhdGUKKworMjAwMS0xMS0wNiAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogY29uZmlndXJlLmluOgorCSogbW9kdWxlL29wcm9maWxlLmg6CisJKiBtb2R1bGUvb3Byb2ZpbGUuYzogc3VwcG9ydCBmb3IgaGFyZF9nZXRfY3VycmVudCgpCisgCisyMDAxLTExLTA2ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgorCisJKiBtb2R1bGUvb3Byb2ZpbGUuaDoKKwkqIG1vZHVsZS9vcHJvZmlsZS5jOiBtYWtlIGFsbG93X3VubG9hZCBleGlzdCBmb3IgVVAKKwkgIHRvbyAoZGVmYXVsdCB0byAxKQorIAorMjAwMS0xMS0wNSAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogVE9ETzogdXBkYXRlCisKKwkqIG1vZHVsZS9vcHJvZmlsZS5jOiBmaXggbnJfaW50ZXJydXB0cyBzeXNjdGwKKworMjAwMS0xMS0wNCAgUGhpbGlwcGUgRWxpZSAgPHBoX2VAY2x1Yi1pbnRlcm5ldC5mcj4KKworCSogZGFlL29wX3N0YXJ0OgorCSogZ3VpL29wcm9mX3N0YXJ0LmNwcDoKKwkqIGd1aS9vcHJvZl9zdGFydF9jb25maWcuY3BwOgorCSogZ3VpL29wcm9mX3N0YXJ0X2NvbmZpZy5oOgorCSogZ3VpL3VpL29wcm9mX3N0YXJ0LmJhc2UudWk6IGhhbmRsZSBub3RlIHRhYmxlIHNpemUgc3lzY3RsCisKKwkqIG1vZHVsZS9vcF9zeXNjYWxscy5jOiBoYW5kbGUgZG5hbWUgaGFzaCBjb2RpbmcgY29sbGlzaW9uIHdpdGgKKwkgIGEgbGluZWFyIHNlYXJjaC4KKworCSogbW9kdWxlL29wcm9maWxlLmM6CisJKiBtb2R1bGUvb3Byb2ZpbGUuaDoKKwkqIG1vZHVsZS9vcF9zeXNjYWxscy5jOiBVc2UgYSBzdHJ1Y3QgdG8gaG9sZCB0aGUgd2hvbGUKKwkgIHN5c2N0bCBzZXR0YWJsZSB0aGluZ3MgcmF0aGVyIGdsb2JhbCB2YXIuCisKKzIwMDEtMTEtMDMgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+CisKKwkqIG1vZHVsZXMvb3Byb2ZpbGUuaDogYWRkIGEgc3lzY3RsIHN0cnVjdCB0byBob2xkCisJICBhbGwgc3lzY3RsIHNldC1hYmxlIHZhcmlhYmxlCisJCisJKiBtb2R1bGVzL29wcm9maWxlLmM6IHR3byBidWdzIGZpeGVzLgorCisyMDAxLTExLTAyICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgorCisJKiBtb2R1bGVzL29wcm9maWxlLmg6IG1pbm9yIGNsZWFudXAKKwkqIG1vZHVsZXMvb3Byb2ZpbGUuYzogYmV0dGVyIGhhbmRsaW5nIG9mIGlycSBzdGF0aXN0aWNzCisKKzIwMDEtMTAtMzEgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIG1vZHVsZS9vcHJvZmlsZS5jOiBhZGQgY29tbWVudCBhYm91dCB1bmZpeGFibGUKKwkgIHJhY2VzLgorIAorMjAwMS0xMC0zMCAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogTW92ZSBtb2R1bGUgY29kZSBpbnRvIG1vZHVsZS8gc3ViZGlyLiBCeWUKKwkgIGJ5ZSBDVlMgaGlzdG9yeSA6LworIAorMjAwMS0xMC0zMCAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogb3BfeDg2LmM6IGNvbXBsYWluIHByb3Blcmx5IGFib3V0IGxBUElDLWxlc3MKKwkgIG1hY2hpbmVzCisgCisyMDAxLTEwLTI2ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgorCisJKiBUT0RPOiB1cGRhdGUKKyAKKzIwMDEtMTAtMjYgIEguIEouIEx1IDxoamxAdXNlcnMuc2YubmV0PgorCisJKiBNYWtlZmlsZS5pbjogdXNlICQoTEQpIG5vdCBsZAorIAorMjAwMS0xMC0yNSAgUGhpbGlwcGUgRWxpZSAgPHBoX2VAY2x1Yi1pbnRlcm5ldC5mcj4KKworCSogY29uZmlndXJlLmluOiBmaXggdmVyc2lvbi5oIGNoZWNraW5nIGZvciBnY2MgMi45MS42NgorCisyMDAxLTEwLTI1ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgorCisJKiBNYWtlZmlsZS5pbjoKKwkqIGRvYy9NYWtlZmlsZS5pbjoKKwkqIGRhZS9NYWtlZmlsZS5pbjoKKwkqIHBwL01ha2VmaWxlLmluOgorCSogZ3VpL01ha2VmaWxlLmluOiBhZGQgJERFU1RESVIgdG8gcHJlZml4IChwYXJ0IGZyb20KKwkgIEguSi4gTHUpCisKKzIwMDEtMTAtMjUgIEguIEouIEx1ICA8aGpsQHVzZXJzLnNmLm5ldD4KKworCSogY29uZmlndXJlLmluOiBiZXR0ZXIgdmVyc2lvbi5oIHdvcmthcm91bmQKKworCSogZG9jLyouMToKKwkqIGRvYy9NYWtlZmlsZS5pbjogYmV0dGVyIC5zbyBtYW5wYWdlIGluc3RhbGwKKworMjAwMS0xMC0yNSAgUGhpbGlwcGUgRWxpZSAgPHBoX2VAY2x1Yi1pbnRlcm5ldC5mcj4KKworCSogZG9jL29wcm9maWxlLnNnbWw6IG1pbm9yIGNoYW5nZS4KKwkqIHBwL29wZl9maWx0ZXIuY3BwOiByZXBhaXIgc2hvcnQgb3B0aW9uIC1hIGFuZCAtcworCisyMDAxLTEwLTI0ICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgorCisJKiBwcC9vcF90b19zb3VyY2U6IHJlbW92ZSBmcm9tIGN2cworCSogcHAvTWFrZWZpbGUuaW46IG9wZl9maWx0ZXIgYXBwbGljYXRpb24gcmVuYW1lZCB0byBvcF90b19zb3VyY2UKKwkqIHBwL2NoaWxkX3JlYWRlci5oOiBuZXcKKwkqIHBwL2NoaWxkX3JlYWRlci5jcHA6IG5ldywgYWxsb3cgdG8gZm9yayBhIGNoaWxkIGFuZCByZWFkCisJICBpdHMgc3Rkb3V0L3N0ZGVycgorCSogcHAvb3BmX2ZpbHRlci5oOgorCSogcHAvb3BmX2ZpbHRlci5jcHA6IHVzZSBjaGlsZF9yZWFkZXIgdG8gbGF1bmNoIG9iamR1bXAuCisJICBvcF90b19zb3VyY2UgLWEgYW5kIC1zIG11c3QgYmUgc3BlY2lmaWVkIHdpdGggbG9uZworCSAgZm9ybSAtLWFzc2VtYmx5IGFuZCAtLXNvdXJjZS13aXRoLWFzc2VtYmx5LiBUaGlzIGFsc28KKwkgIHNwZWVkLXVwIGFzc2VtYmx5IG91dHB1dC4gRG9jIG5vdCB1cGRhdGVkLgorCisyMDAxLTEwLTE4ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgorCisJKiBjb25maWd1cmUuaW46IHdvcmthcm91bmQgIzIsIGhvcGVmdWxseSBmaXhpbmcKKwkgIE1hbmRyYWtlIChidWcgIzQ3MTQ0OCkKKyAKKzIwMDEtMTAtMTcgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIG9wcm9maWxlLmM6IGRvbid0IG1hc2sgd2hlbiByZXN0b3JpbmcgTVNSIHZhbHVlcworIAorCSogZG9jL01ha2VmaWxlLmluOiBkb24ndCB1c2UgbWFuIHN5bWxpbmtzCisgCisyMDAxLTEwLTE3ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgorCisJKiBvcHJvZmlsZS5jOiBzYXZlIG9yaWdpbmFsIGNvdW50ZXIgc2V0dXAKKwkgIGFuZCByZXN0b3JlIG9uIHVubG9hZCAoYnVnICM0NjQwOTQpCisKKzIwMDEtMTAtMTYgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIGNvbmZpZ3VyZS5pbjoKKwkqIG9wcm9maWxlLmg6IHdvcmthcm91bmQgZm9yIE1hbmRyYWtlIHJhbmRvbWx5CisJICBiYWNrLXBvcnRpbmcgdGhpbmdzLgorIAorMjAwMS0xMC0xNiAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogZGFlL29wZF9wcm9jLmM6CisJKiBndWkvb3Byb2Zfc3RhcnQuY3BwOgorCSogZ3VpL29wcm9mX3N0YXJ0X2NvbmZpZy5jcHA6CisJKiBndWkvb3Byb2Zfc3RhcnRfY29uZmlnLmg6CisJKiBndWkvb3Byb2Zfc3RhcnRfdXRpbC5jcHA6CisJKiBwcC9vcGZfY29udGFpbmVyLmNwcDoKKwkqIHBwL29wZl9maWx0ZXIuaDoKKwkqIHBwL29wZl9maWx0ZXIuY3BwOgorCSogcHAvb3Byb2ZfY29udmVydC5jcHA6IGFkZCBub3RlIGRldmljZSB0byBndWksCisJICBnZW5lcmFsIGNsZWFudXAKKwkgCisyMDAxLTEwLTE2ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgorCisJKiBvcHJvZmlsZS5oOiBmaXggbGlrZWx5KCkgbWFjcm8KKyAKKzIwMDEtMTAtMTQgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIFRPRE86IHVwZGF0ZQorIAorCSogb3Bfc3lzY2FsbHMuYzoKKwkqIG9wX3VzZXIuaDoKKwkqIG9wcm9maWxlLmg6CisJKiBvcHJvZmlsZS5jOgorCSogZGFlL29wX3N0YXJ0OgorCSogZGFlL29wZF9wcm9jLmM6CisJKiBkYWUvb3Byb2ZpbGVkLmg6CisJKiBkYWUvb3Byb2ZpbGVkLmM6IHVzZSBhIHNlcGFyYXRlIG1hcCBidWZmZXIuCisgCisyMDAxLTEwLTE0ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgorCisJKiBhY2luY2x1ZGUubTQ6IGRvbid0IGdpdmUgdXAgaWYgd2UgY2FuJ3QgZmluZCBtb2MKKyAKKzIwMDEtMTAtMTQgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIG9wcm9maWxlLmM6IG1lcmdlIG5vLXRocmVhZCBjb2RlCisgCisyMDAxLTEwLTE0ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgorCisJKiBkYWUvb3BkX3Byb2MuYzoKKwkqIGRhZS9vcHJvZmlsZWQuYzoKKwkqIG9wX3VzZXIuaDoKKwkqIG9wcm9maWxlLmg6CisJKiBvcF9zeXNjYWxscy5jOiB1c2Ugc3RyaW5nIHBvb2wuIFByaW1lIGhhc2ggdGFibGUKKwkgIHdpdGggY29tbW9uIGVudHJpZXMuIENvbnNpZGVyIHBhcmVudCBpbiBuYW1lX2hhc2guCisgCisyMDAxLTEwLTEzICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgorCisJKiBkb2Mvb3Byb2ZpbGUuc2dtbDogbWlub3IgY2hhbmdlCisJKiBwcC9vcGZfZmlsdGVyLmNwcDogYmV0dGVyIHdhcm5pbmcKKworMjAwMS0xMC0xMyAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogY29uZmlndXJlLmluOiAwLjAuNiBoYXMgYmVlbiByZWxlYXNlZCAtPiAwLjAuN2N2cworIAorMjAwMS0xMC0xMiAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogVE9ETzogdXBkYXRlCisKKwkqIGRvYy9vcHJvZmlsZS5zZ21sOiBuZXcgZG9jcyBmb3IgYW5ub3RhdGlvbiBmaWx0ZXIKKyAKKzIwMDEtMTAtMTIgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIHBwL29wZl9maWx0ZXIuY3BwOiBtYWtlIG91dHB1dCBmaWx0ZXJzIG1vcmUgbGlrZSBkaWZmIChuZWVkcyBkb2MpLAorCSAgYnJpZWZlciBpbmZvIG1lc3NhZ2UKKyAKKzIwMDEtMTAtMTIgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIGRvYy9NYWtlZmlsZS5pbjogYWRkIEZJWE1FCisKKwkqIGd1aS9vcHJvZl9zdGFydC5jcHA6IGZpeCBzdGQ6OgorCisJKiBhY2luY2x1ZGUubTQ6IG1vcmUgZml4ZXMKKyAKKzIwMDEtMTAtMTIgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+CisKKwkqIGd1aS9vcHJvZl9zdGFydF91dGlsLmNwcDogdXNlIHNlbGVjdCgpIHJhdGhlciBub24tYmxvY2tpbmcKKwkgIG1vZGUgdG8gcmVhZCBvdXRwdXQgZnJvbSB0aGUgY2hpbGQgcHJvY2VzcworCisyMDAxLTEwLTExICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgorCisJKiBkb2Mvb3Byb2ZpbGUuc2dtbDoKKwkqIGRvYy9vcHJvZmlsZS4xLmluOgorCSogcHAvb3BmX2ZpbHRlcjogbWFrZSAtLW91dHB1dCBhbmQgLS1uby1vdXRwdXQgbW9yZSBpbnR1aXRpdmUKKworMjAwMS0xMC0wOSAgUGhpbGlwcGUgRWxpZSAgPHBoX2VAY2x1Yi1pbnRlcm5ldC5mcj4KKworCSogZG9jL29wcm9maWxlLnNnbWw6CisJKiBkb2Mvb3Byb2ZpbGUuMS5pbjogY2xhcmlmeSBkb2MKKwkqIHBwL29wZl9maWx0ZXIuY3BwOiBjb3JuZXIgY2FzZSBmaXggaW4gLS1vdXRwdXQtZGlyIGFuZAorCSAgLS1zb3VyY2UtZGlyIGhhbmRsaW5nLgorCisyMDAxLTEwLTA4ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgorCisJKiBhY2luY2x1ZGUubTQ6CisJKiBjb25maWd1cmUuaW46CisJKiBndWkvTWFrZWZpbGUuaW46IGZpeCBpZGlvdCBjb25maWcgYnVnIG9mIG1pbmUKKyAKKzIwMDEtMTAtMDYgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+CisKKwkqIHBwL29wZl9maWx0ZXIuY3BwOgorCSogcHAvb3BfdG9fc291cmNlOiBzbWFsbCBjbGVhbnVwCisKKzIwMDEtMTAtMDUgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+CisKKwkqIGRvYy9vcHJvZmlsZS4xLmluOgorCSogZG9jL29wcm9maWxlLnNnbWw6CisJKiBwcC9vcF90b19zb3VyY2U6CisJKiBwcC9vcGZfZmlsdGVyLmNwcDogaW1wbGVtZW50IC0tb3V0cHV0IGFuZCAtLW5vLW91dHB1dCB0bworIAkgIGFsbG93IG91dHB1dCBmaWxlIGdlbmVyYXRpb24gZmlsdGVyaW5nCisKKzIwMDEtMTAtMDQgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIFRPRE86IHVwZGF0ZQorIAorMjAwMS0xMC0wMyAgUGhpbGlwcGUgRWxpZSAgPHBoX2VAY2x1Yi1pbnRlcm5ldC5mcj4KKworCSogZG9jL29wcm9maWxlLjEuaW46CisJKiBkb2Mvb3Byb2ZpbGUuc2dtbDoKKwkqIHBwL29wX3RvX3NvdXJjZToKKwkqIHBwL29wZl9maWx0ZXIuY3BwOiBpbXBsZW1lbnQgLS1zb3VyY2UtZGlyIGFuZCAtLW91dHB1dC1kaXIKKwkgIHRvIGdlbmVyYXRlZCBzZXBhcmF0ZWQgYW5ub3RlZCBzb3VyY2UgZmlsZS4KKworMjAwMS0xMC0wMyAgUGhpbGlwcGUgRWxpZSAgPHBoX2VAY2x1Yi1pbnRlcm5ldC5mcj4KKworCSogcHAvb3Byb2ZwcC5jcHAKKwkqIHBwL29wcm9mcHAuaAorCSogcHAvb3BmX2ZpbHRlci5jcHA6IG1pbm9yIGNsZWFudXAKKworMjAwMS0xMC0wMyAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogVE9ETzogdXBkYXRlCisKKwkqIE1ha2VmaWxlLmluOiByZW1vdmUgZ2VuZXJhdGVkIGZpbGVzIG9uIG1ha2UgZGlzdGNsZWFuCisKKwkqIGFjaW5jbHVkZS5tNDogdXBkYXRlIGZyb20gc291cmNlCisgCisyMDAxLTEwLTAyICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgorCisJKiBwcC9vcHJvZnBwLmNwcDogZml4IGEgc2lsbHkgYnVnIGluIGRvX2xpc3Rfc3ltYm9scyAob3Byb2ZwcCAtbCkKKworMjAwMS0xMC0wMiAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogZG9jL29wcm9maWxlLnNnbWw6IGZpeAorCisJKiBNYWtlZmlsZS5pbjogZGlzdCBmaXgKKyAKKzIwMDEtMTAtMDIgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIFRPRE86IHVwZGF0ZQorCisJKiBjb25maWd1cmUuaW46IC0+IDAuMC41IGZvciByZWxlYXNlCisgCisyMDAxLTEwLTAxICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgorCisJKiBwcC9vcGZfY29udGFpbmVyLmNwcDoKKwkqIHBwL29wZl9maWx0ZXIuaDogY29tbWVudAorCSogcHAvb3BmX2ZpbHRlci5jcHA6IHNwZWVkLXVwCisKKzIwMDEtMDktMzAgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+CisKKwkqIHBwL29wZl9jb250YWluZXIuY3BwOgorCSogcHAvb3BmX2ZpbHRlci5jcHA6CisJKiBwcC9vcHJvZnBwLmNwcDoKKwkqIHBwL29wcm9mcHAuaDogY2xlYW51cAorCisyMDAxLTA5LTMwICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgorCisJKiBndWkvb3Byb2Zfc3RhcnQuY3BwOgorCSogZ3VpL29wcm9mX3N0YXJ0Lmg6CisJKiBndWkvdWkvb3Byb2Zfc3RhcnQuYmFzZS51aTogY2xlYW51cAorCisyMDAxLTA5LTI5ICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgorCisJKiBwcC9vcGZfZmlsdGVyLmNwcDogY2hlY2sgaWYgd2UgbmVlZCBkZWJ1ZyBpbmZvIHRvIHdvcmsuCisKKwkqIGd1aS9vcHJvZl9zdGFydC5jcHA6IHVzZSBvbmUgY29uZmlnIGZpbGUgYnkgY291bnRlci4gU3RvcmUKKwkgIHNlbGVjdGVkIGNvdW50ZXIgaW4gb3Byb2Zfc3RhcnRfY29uZmlnCisKKwkqIGd1aS9vcHJvZl9zdGFydC5jcHA6CisJKiBndWkvcGVyc2lzdGVudF9jb25maWcuaDogcmVtb3ZlIGRpcnR5IGZsYWcgaW4gCisJICBwZXJzaXN0ZW50X2NvbmZpZ190IHRlbXBsYXRlIGNsYXNzCisKKzIwMDEtMDktMjkgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIFRPRE86IHVwZGF0ZQorIAorCSogZ3VpL29wcm9mX3N0YXJ0LmNwcDoKKwkqIGd1aS91aS9vcHJvZl9zdGFydF9iYXNlLnVpOgorCSogZ3VpL29wcm9mX3N0YXJ0X2NvbmZpZy5oOgorCSogZ3VpL29wcm9mX3N0YXJ0X2NvbmZpZy5jcHA6IGFkZCB2ZXJib3NlIG9wdGlvbgorIAorCSogcHAvb3BmX2NvbnRhaW5lci5jcHA6CisJKiBwcC9vcGZfZmlsdGVyLmNwcDogc29tZSBGSVhNRXMgYW5kIGxpdHRsZSBjbGVhbnVwcworIAorMjAwMS0wOS0yOSAgUGhpbGlwcGUgRWxpZSAgPHBoX2VAY2x1Yi1pbnRlcm5ldC5mcj4KKworCSogcHAvb3Byb2ZwcC5jcHA6IGJ1ZyBmaXggd2hlbiBjYWxsaW5nIHRoZSBiZmQgbGliLgorCisyMDAxLTA5LTI5ICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgorCisJKiBndWkvb3Byb2Zfc3RhcnQuY3BwOiB0d28gbWlub3IgZml4ZXMuCisKKzIwMDEtMDktMjggIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIHZhcmlvdXMgZmlsZXM6IHRoZSBmb290ZXIgaXMgbm93IGEgaGVhZGVyICEKKworCSogZGFlL29wZF9zdGFydC5jOiBmaXggbXN5bmMgISEKKworCSogZ3VpL29wcm9mX3N0YXJ0LmNwcDoKKwkqIGd1aS9vcHJvZl9zdGFydF91dGlsLmg6CisJKiBndWkvb3Byb2Zfc3RhcnRfdXRpbC5jcHA6IGJldHRlciBkZWZhdWx0IGV2ZW50IGNvdW50CisJICB2YWx1ZS4gU2F2ZSBDUFUgdHlwZSB0byBvcHJvZmlsZSBmaWxlLgorCisyMDAxLTA5LTI4ICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgorCisJKiBwcC9vcGZfZmlsdGVyLmM6IGZpeCBvcF90b19zb3VyY2UgWy1hXSBbLXNdCisKKzIwMDEtMDktMjggIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+CisKKwkqIGRvYy9vcHJvZmlsZS5zZ21sOiBvb3BzLCBjb3JyZWN0IGJhZCBtZXJnaW5nIHdpdGgKKyAJICBKb2huJ3MgbGFzdCB1cGRhdGUuCisKKzIwMDEtMDktMjcgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+CisKKwkqIGRvYy9vcHJvZmlsZS4xLmluOiBtaW5vciBjaGFuZ2UKKwkqIG9wX2V2ZW50cy5jOiByZW1vdmUgLS1ndWktZGVzY3JpcHRpb24gc3R1ZmYKKwkqIHBwL29wZl9maWx0ZXIuY3BwOiByZW1vdmUgdXNlIG9mIHRlbXBvcmFyeSBhcnJheSB0bworCSAgcGFzcyBhcmd1bWVudCB0byB0aGUgcG9wdCBsaWJyYXJ5CisKKzIwMDEtMDktMjcgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIGRvYy9vcHJvZmlsZS5zZ21sOiB1cGRhdGVzCisKKwkqIGd1aS9vcHJvZl9zdGFydF91dGlsLmNwcDogZml4IGNvbXBpbGUsIHJldmVydAorCSAgZysrIGV4dGVuc2lvbiAoZGlmZmVyZW50IG9uIGcrKyAzLjApIAorCisyMDAxLTA5LTI3ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgorCisJKiBndWkvb3Byb2Zfc3RhcnRfdXRpbC5jcHA6IHVzZSBnKysgZXh0ZW5zaW9uIHRvCisJICBhdm9pZCB1c2luZyB0ZW1wb3JhcnkgZmlsZXMKKyAKKzIwMDEtMDktMjcgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIGd1aS9vcHJvZl9zdGFydF91dGlsLmNwcDogZml4IGNyYXNoZXIgYnVnCisgCisyMDAxLTA5LTI3ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgorCisJKiBndWkvb3Byb2Zfc3RhcnQuaDoKKwkqIGd1aS9vcHJvZl9zdGFydC5jcHA6IGdldCBwZXItY291bnRlciBjb25maWcgd29ya2luZworIAorMjAwMS0wOS0yNyAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogcHAvTWFrZWZpbGUuaW46CisJKiBwcC9vcHJvZnBwLmM6CisJKiBwcC9vcHJvZnBwLmNwcDogcmVuYW1lIGZpbGUKKyAKKzIwMDEtMDktMjcgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIHBwL29wZl9jb250YWluZXIuY3BwOgorCSogcHAvb3Byb2ZwcC5oOgorCSogcHAvb3Byb2ZwcC5jOiBzcGVlZCBpbXByb3ZlbWVudHMKKyAKKzIwMDEtMDktMjYgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+CisKKwkqIGNvbmZpZ3VyZS5pbjogdHlwbworCisJKiBwcC9vcHJvZnBwLmM6IGZpeCBvcHJvZnBwIC1zLgorCSAgVXNlIHN0ZDo6c3RyaW5nICh3b3JrIG5vdCB5ZXQgZmluaXNoKQorCSogcHAvb3Byb2ZwcC5oOglkaXR0bworCSogcHAvb3BmX2ZpbHRlci5jcHA6IGRpdHRvCisKKzIwMDEtMDktMjYgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIG9wcm9maWxlLmM6IGFkZCBucl9pbnRlcnJ1cHRzCisgCisJKiBndWkvb3Byb2Zfc3RhcnQuaDoKKwkqIGd1aS9vcHJvZl9zdGFydC5jcHA6CisJKiBndWkvb3Byb2Zfc3RhcnRfdXRpbC5oOgorCSogZ3VpL29wcm9mX3N0YXJ0X3V0aWwuY3BwOgorCSogZ3VpL29wcm9mX3N0YXJ0X2NvbmZpZy5oOgorCSogZ3VpL29wcm9mX3N0YXJ0X2NvbmZpZy5jcHA6CisJKiBndWkvdWkvb3Byb2Zfc3RhcnRfYmFzZS51aTogYWRkIGRhZW1vbiBzdGF0dXMKKwkgIGRpc3BsYXksIGZpeCBiYXNlbmFtZSgpCisJIAorMjAwMS0wOS0yNiAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogY29uZmlndXJlLmluOiByZW1vdmUgYnJva2VuIGJpdAorCisJKiBwcC9NYWtlZmlsZS5pbjogZml4IG9wdGlvbnMKKyAKKwkqIGRvYy9vcHJvZmlsZS5zZ21sOiBtaW5vciBjaGFuZ2VzCisgCisyMDAxLTA5LTI2ICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgorCisJKiBwcC9NYWtlZmlsZS5pbjogaW5jcmVhc2UgbGV2ZWwgb2Ygd2FybmluZworCSogcHAvb3Byb2ZfY29udmVydC5jOiBtaW5vciBmaXggdG8gYXZvaWQgd2FybmluZworCSogZGFlL29wZF91dGlsLmM6IGRpdHRvCisJKiBwcC9vcHJvZnBwLmM6IGdldF9saW5lbnIoKSBuZXZlciByZXR1cm4gbnVsbCBpbgorCSAgZmlsZW5hbWUgIChmaXggYnVnICM0NjQ0ODIpLiBzeW1jb21wKCkgZW5zdXJlCisJICBjb3JyZWN0IHZtYSBjb21wYXJpc29uIChmaXggIzQ2NDA5MykKKwkqIGRhZS9vcGRfdXRpbC5jOiBtaW5vciBmaXhlIGluIG9wX3BvcHRHZXRDb250ZXh0KCkKKwkqIGd1aS9vcHJvZl9zdGFydC5jcHA6IG1pbm9yIGNsZWFudXAKKworMjAwMS0wOS0yNSAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogZGFlL29wX3N0b3A6CisJKiBndWkvb3Byb2Zfc3RhcnRfY29uZmlnLmNwcDogdXNlIHBpZG9mIGluc3RlYWQKKworMjAwMS0wOS0yNSAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogZ3VpL29wcm9mX3N0YXJ0X2NvbmZpZy5jcHA6IGZpeCBpc19wcm9maWxlcl9zdGFydGVkKCkgdG9vIAorIAorMjAwMS0wOS0yNSAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogZGFlL29wX3N0b3A6IGZpeCB0ZXJyaWJseSBzdHVwaWQgZXJyb3IKKyAKKzIwMDEtMDktMjUgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIG9wX2V2ZW50LmM6IHdob29vcHMKKyAKKzIwMDEtMDktMjUgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIGd1aS9vcHJvZl9zdGFydC5jcHA6IHN0ZDo6IGZpeAorIAorCSogZGFlL29wX3N0YXJ0OgorCSogb3BfZXZlbnRzLmM6IHJvYnVzdG5lc3MgZml4CisKKzIwMDEtMDktMjUgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIGd1aS9vcHJvZl9zdGFydC5jcHA6IGZpeCBzaWxseSBidWcKKyAKKzIwMDEtMDktMjQgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIHBwL29wZl9maWx0ZXIuY3BwOiAiZml4IiBjb21waWxlIGVycm9yCisgCisyMDAxLTA5LTI0ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgorCisJKiBndWkvb3Byb2ZpbGU6CisJKiBndWkvTWFrZWZpbGUuaW46IHJlbW92ZSBvbGQgZ3VpCisgCisyMDAxLTA5LTI0ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgorCisJKiBkYWUvb3Bfc3RhcnQ6IG1ha2UgYSBsaXR0bGUgbW9yZSByb2J1c3QKKyAKKzIwMDEtMDktMjQgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIGluY2x1ZGUvc3N0cmVhbToKKwkqIE1ha2VmaWxlLmluOgorCSogY29uZmlndXJlLmluOgorCSogcHAvTWFrZWZpbGUuaW46CisJKiBndWkvTWFrZWZpbGUuaW46IGNvbmZpZ3VyZS9tYWtlIGZpeGVzCisKKwkqIG9wX2V2ZW50cy5jOiByZS1vcmRlciBmb3IgQXRobG9uIAorCSAKKzIwMDEtMDktMjMgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIHBwL29wcm9mcHAuYzogc21hbGwgY2xlYW51cAorIAorMjAwMS0wOS0yMyAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogb3Byb2ZpbGUuaDoKKwkqIG9wX3g4Ni5jOiBzdXBwb3J0IGZvciAyLjQuMTAKKyAKKzIwMDEtMDktMjMgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIGd1aS9vcHJvZl9zdGFydC5oOgorCSogZ3VpL29wcm9mX3N0YXJ0LmNwcDogcmV3b3JrIHZhbGlkYXRvciBzdHVmZiBhIGJpdAorIAorMjAwMS0wOS0yMyAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogZ3VpL29wcm9mX3N0YXJ0LmNwcDogdXNlIHN0ZDo6ZmluZF9pZgorIAorCSogZ3VpL29wcm9mX3N0YXJ0X2NvbmZpZy5jcHA6CisJKiBndWkvb3Byb2Zfc3RhcnRfdXRpbC5jcHA6IG1pbm9yIHRpZGllcworIAorMjAwMS0wOS0yMyAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogZGFlL29wX2R1bXA6CisJKiBkYWUvb3Bfc3RhcnQ6IGVjaG8gZXJyb3JzIHRvIHN0ZGVycgorIAorCSogZ3VpL29wcm9mX3N0YXJ0X3V0aWwuaDoKKwkqIGd1aS9vcHJvZl9zdGFydF91dGlsLmNwcDoKKwkqIGd1aS9vcHJvZl9zdGFydC5jcHA6IHVzZSBmb3JrL2V4ZWMgdG8gc3Bhd24gY2hpbGRyZW4KKworMjAwMS0wOS0yMyAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogVE9ETzogdXBkYXRlCisKKwkqIGd1aS9NYWtlZmlsZS5pbjoKKwkqIGd1aS9vcHJvZl9zdGFydF9jb25maWcuaDogCisJKiBndWkvb3Byb2Zfc3RhcnRfY29uZmlnLmNwcDogCisJKiBndWkvb3Byb2Zfc3RhcnRfdXRpbC5oOiAKKwkqIGd1aS9vcHJvZl9zdGFydF91dGlsLmNwcDogCisJKiBndWkvb3Byb2Zfc3RhcnQuaDogCisJKiBndWkvb3Byb2Zfc3RhcnQuY3BwOiBuZXcgZmlsZSBmb3IgdXRpbCBmdW5jdGlvbnMKKyAKKzIwMDEtMDktMjMgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIGRhZS9vcGRfdXRpbC5jOgorCSogZGFlL29wZF91dGlsLmg6CisJKiBkYWUvb3Byb2ZpbGVkLmM6IAorCSogcHAvb3Byb2ZwcC5jOiAKKwkqIHBwL29wZl9maWx0ZXIuY3BwOiAKKwkqIGNvbmZpZ3VyZS5pbjogZW5hYmxlIF9fYnVpbHRpbl9leHBlY3QsIGZpeCBwb3B0IHByb2JsZW0KKworCSogcHAvb3Byb2ZfY29udmVydC5jOiBzbWFsbCBmaXhlcworIAorCSogb3BfZXZlbnRzLmM6IHNob3J0ZW4gZXZlbnQgZGVzY3JpcHRpb25zIGZvciBHVUkgCisKKwkqIGd1aS8qOiBtYW55IG1vcmUgdXBkYXRlcworIAorCSogcHAvTWFrZWZpbGUuaW46IGZpeAorIAorMjAwMS0wOS0yMSAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogZGFlL29wZF9wcm9jLmM6IHJlbW92ZWQgb3Zlci12ZXJib3NlIGxpbmUKKworCSogY29uZmlndXJlLmluOgorCSogb3Byb2ZpbGUuaDoKKwkqIG9wcm9maWxlLmM6IGFkZCBsaWtlbHkvdW5saWtlbHksIHRha2Ugbm90ZSBsb2NrIG9uIGR1bXAKKyAKKzIwMDEtMDktMjEgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+CisKKwkqIHBwL29wZl9maWx0ZXIuaDogbW92ZSBkZWNsYXJhdGlvbiBvZiBjb3VudGVyX2FycmF5X3QgdG8KKwkqIHBwL29wcm9mcHAuaDogaGVyZQorCSogcHAvb3Byb2ZwcC5jOiBkZWZpbmUgYW5kIHVzZSBjb3VudGVyX2FycmF5X3QgKyBtaW5vciBjbGVhbnVwCisJKiBwcC9vcGZfZmlsdGVyLmNwcDogcmVtb3ZlIGRlZmluaXRpb24gb2YgY291bnRlcl9hcnJheV90CisKKzIwMDEtMDktMjEgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+CisKKwkqIE1ha2VmaWxlLmluOiByZW1vdmUgYWNsb2NhbC5tNCBpbiBkaXN0Y2xlYW4KKwkqIHBwL01ha2VmaWxlLmluOiB1c2UgJChDWFgpIGFuZCAkKENYWEZMQUdTKQorCisJKiBwcC9vcGZfY29udGFpbmVyLmNwcDoKKwkqIHBwL29wZl9maWx0ZXIuY3BwOgorCSogcHAvb3BmX2ZpbHRlci5oOgorCSogcHAvb3Byb2ZwcC5jOgorCSogcHAvb3Byb2ZwcC5oOiBjbGVhbnVwCisKKzIwMDEtMDktMjAgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+CisKKwkqIE1ha2VmaWxlLmluOiBtaW5vciBjaGFuZ2UgaW4gbW9kdWxlIGJ1aWxkaW5nCisJKiBwcC9NYWtlZmlsZS5pbjogbGluayBvcHJvZnBwIHdpdGggb3BmX2ZpbHRlcgorCSogcHAvb3BfdG9fc291cmNlOiBhdm9pZCBwaXBlIGZyb20gb3Byb2ZwcCB0byBvcGZfZmlsdGVyCisJKiBwcC9vcGZfZmlsdGVyLmg6IHJlbW92ZSBhIGZldyBtZW1iZXIgZnVuY3Rpb24KKwkqIHBwL29wZl9jb250YWluZXIuY3BwOiBkaXR0byArIG1pbm9yIGNsZWFudXAKKwkqIHBwL29wZl9maWx0ZXIuY3BwOiBvcHJvZnBwIGlzIG5vIGxvbmdlciBwaXBlZCB0byBvcGZfZmlsdGVyCisJICBidXQgbGlua2VkIHdpdGggaXQuIE1hbnkgY2hhbmdlLCBuZWVkcyBhZGRpdGlvbmFsIGNsZWFudXAKKwkqIHBwL29wcm9mcHAuYzogZ3JvdXAgYWxsIHN0dWZmIGluIHR3byBjbGFzcy4gUmF0aGVyIGEKKwkgIGEgQyB3aXRoIGNsYXNzIHRoYW4gYSBmdWxsIEMrKyBmaWxlIGZvciBub3cuIEZpeCBhIGJ1ZworCSAgaW4gZmlsZW5hbWUgaGFuZGxpbmcuCisJKiBwcC9vcHJvZnBwLmg6IGFkZCBvcHBfYmZkIGFuZCBvcHBfc2FtcGxlc19maWxlcyBjbGFzcy4KKwkKKwkqIGRhZS9vcGRfdXRpbC5jOiBhZGQgYSBmZXcgZXhwbGljaXQgY2FzdCBmb3IgQysrIGNvbXBpbGUKKwkqIGRhZS9vcGRfdXRpbC5oOiB3cmFwIGZ1bmN0aW9uIGRlY2xhcmF0aW8gd2l0aCBleHRlcm4gIkMiCisKKzIwMDEtMDktMTkgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIG9wcm9maWxlLmM6IGZpeCBzaWxseSByZWFkIHZhbGlkIGJ1ZworIAorMjAwMS0wOS0xOSAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogTWFrZWZpbGUuaW46IHdob29wcywgbWlzc2VkIG9wX3V0aWwubyBmcm9tIGJ1aWxkCisgCisyMDAxLTA5LTE5ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgorCisJKiBkYWUvb3Byb2ZpbGVkLmM6IGZpeCBsaXR0bGUgYnVnLCB0aWR5IGEgYml0CisKKwkqIFRPRE86IHVwZGF0ZQorIAorMjAwMS0wOS0xOCAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogTWFrZWZpbGUuaW46CisJKiBvcF9zeXNjYWxscy5jOgorCSogb3BfdXRpbC5jOgorCSogb3Byb2ZpbGUuaDogbW92ZSBzb21lIGNvZGUgYXJvdW5kCisKKwkqIG9wcm9maWxlLmM6IGZpeCBhIHRpbnkgYnVnCisKKzIwMDEtMDktMTggIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIGRhZS9vcGRfcHJvYy5jOgorCSogZGFlL29wcm9maWxlZC5oOiBpbXBsZW1lbnQgaGFzaGluZyBvZiBpbWFnZXMKKworCSogZG9jL29wcm9maWxlLnNnbWw6IGZpeCAtLSBpc3N1ZSBhbmQgdXNlIDxzY3JlZW4+CisgCisyMDAxLTA5LTE4ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgorCisJKiAuY3ZzaWdub3JlOgorCSogUkVBRE1FOiB1cGRhdGUKKyAKKwkqIGNvbmZpZ3VyZS5pbjogc21hbGwgY2xlYW51cAorIAorCSogb3BfaW5pdC5jOiBhZGQgY29tbWVudAorCisJKiBvcHJvZmlsZS5oOiAKKwkqIG9wX3N5c2NhbGxzLmM6CisJKiBvcF94ODYuYzogbW92ZSBmaXhtYXAgc3R1ZmYsIHJlbW92ZSBkaXNhYmxlIEFQSUMKKworCSogb3Byb2ZpbGUuYzogaW5pdCBmYWlsdXJlIGZpeCAKKyAKKwkqIGRvYy9vcHJvZmlsZS5zZ21sOgorCSogZGFlL29wZF9wcm9jLmM6IGZpeCBoYW5kbGVfb2xkX3NhbXBsZV9maWxlcygpIGJ1ZywKKwkgIGNoZWNrIG10aW1lIGhhc24ndCBjaGFuZ2VkIG9uIGEgbmV3IG1hcAorIAorMjAwMS0wOS0xNiAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogYWNpbmNsdWRlLm00OgorCSogYXV0b2dlbi5zaDoKKwkqIGNvbmZpZ3VyZS5pbjoKKwkqIGd1aS9NYWtlZmlsZS5pbjoKKwkqIGd1aS91aS9NYWtlZmlsZS5pbjoKKwkqIGd1aS91aS9vcHJvZl9zdGFydC5iYXNlLnVpOgorCSogZ3VpL29wcm9mX3N0YXJ0Lmg6IGF1dG9jb25maXNjYXRpb24gZm9yIFF0MgorCisJKiBndWkvb3Byb2Zfc3RhcnRfY29uZmlnLmNwcDogYWRkIGNvbW1lbnRzCisgCisyMDAxLTA5LTE2ICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgorCisJKiBwcC9vcGZfZmlsdGVyLmNwcDogZml4IHVucmVjb2duaXplZCBpbnB1dAorCSogcHAvb3BmX2NvbnRhaW5lci5jcHA6IGJldHRlciBlcnJvciBtZXNzYWdlcy4gcHV0CisJICBvcF9ucl9jb3VudGVycyBpbiB0aGUgZ2xvYmFsIG5hbWVzcGFjZSAoZ2NjIDIuOTEKKwkgIHdvcmsgYXJvdW5kKQorCisyMDAxLTA5LTE2ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgorCisJKiBwcC9vcHJvZnBwLmNwcDogc21hbGwgdGlkeQorIAorMjAwMS0wOS0xNiAgUGhpbGlwcGUgRWxpZSAgPHBoX2VAY2x1Yi1pbnRlcm5ldC5mcj4KKworCSogcHAvb3BmX2ZpbHRlci5jcHA6IG1pbm9yIHRpZHkKKworCSogZ3VpL29wcm9mX3N0YXJ0LmJhc2UudWk6IG5ldyBvcHJvZl9zdGFydCBndWkKKwkqIGd1aS9vcHJvZl9zdGFydC5jcHA6IG5ldywgZGVyaXZlZCBjbGFzcyBvZiBvcHJvZl9zdGFydF9iYXNlCisJKiBndWkvb3Byb2Zfc3RhcnQuaDogZGl0dG8KKwkqIGd1aS9vcHJvZl9zdGFydF9pbXBsLmNwcDogaW1wbGVtZW50YXRpb24gb2Ygb3Byb2Zfc3RhcnQgY2xhc3MKKwkqIGd1aS9vcHJvZl9zdGFydF9jb25maWcuY3BwOiB1dGlsaXRpZXMgZnVuY3Rpb24gZm9yIG9wcm9mX3N0YXJ0CisJKiBndWkvb3Byb2Zfc3RhcnRfY29uZmlnLmg6IGRpdHRvCisJKiBndWkvcGVyc2lzdGVudF9jb25maWcuaDogdXRpbGl0eSB0ZW1wbGF0ZQorCSogZ3VpL29wcm9mX3N0YXJ0X21haW4uY3BwOiBtYWluKCkgZm9yIG9wcm9mX3N0YXJ0CisJKiBndWkvTWFrZWZpbGUuaW46IGhhbmRsZSB0aGlzIHN0dWZmCisKKzIwMDEtMDktMTUgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIHBwL29wcm9mcHAuYzogc29tZSBjbGVhbnVwCisKKzIwMDEtMDktMTUgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIHBwL29wcm9mcHAuYzogYWxsb3cgbm9uLW1hdGNoaW5nIG10aW1lcyBpbiBvcmRlcgorCSAgdG8gYWxsb3cgcHAgb24gZGlmZmVyZW50IG1hY2hpbmVzLiBNYWtlIGNvbmZsaWN0aW5nCisJICBjb3VudGVyIHNwZWNpZmljYXRpb25zIGEgZmF0YWwgZXJyb3IKKworMjAwMS0wOS0xNSAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogYWxsIE1ha2VmaWxlLmluOiBpbnN0YWxsIHNob3VsZCBkZXBlbmQgb24gYWxsCisKKwkqIHBwL29wcm9mcHAuYzogZml4ZXMgZm9yIEF0aGxvbiA0IGNvdW50ZXJzLiBFbmFibGUgZGVidWcgaW5mbworCSAgZm9yIGxpc3Qtc3ltYm9sLiBTb21lIHN0cmljdGVyIGNoZWNraW5nCisKKzIwMDEtMDktMTUgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+CisKKwkqIG9wX2V2ZW50cy5jOiBzb21lIHN0YXRpYyB2YXJpYWJsZSB0byBnbG9iYWwKKwkqIG9wX3VzZXIuaDogZXhwb3J0IHRoZXNlCisKKwkqIG9wcm9maWxlLmM6IHR5cG8gaW4gY29tbWVudAorCisJKiBkYWUvb3BkX3Byb2MuYzogZml4IHNpemUgb2Ygc2FtcGxlcyBmaWxlcworCisyMDAxLTA5LTEzICBEYXZlIEpvbmVzICA8ZGF2ZWpAc3VzZS5kZT4KKworCSogZG9jL29wcm9maWxlLjEuaW46CisJICBVcGRhdGUgc28gaXQgZG9lc24ndCBzYXkgJ0ludGVsIG9ubHknCisJKiBkYWUvb3Bfc3RhcnQ6CisJICBGaXggb3V0cHV0IHNvIHRoYXQgaXQgcHJpbnRzIFswLTNdIGluc3RlYWQgb2YgWzAtNFsKKworMjAwMS0wOS0xMiAgUGhpbGlwcGUgRWxpZSAgPHBoX2VAY2x1Yi1pbnRlcm5ldC5mcj4KKworCSogcHAvb3Byb2ZwcC5jOiBmaXggY3B1IHR5cGUgb3V0cHV0IGZvciBvcGZfZmlsdGVyCisKKwkqIGRhZS9vcF9zdG9wOiByZXR1cm4gZXJyb3IgY29kZSBwcm9wZXJseQorCisyMDAxLTA5LTEyICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgorCisJKiBwcC9vcHJvZnBwLmM6IHByaW50IG5hbWUgb2YgY3B1IHR5cGUKKyAKKwkqIGRhZS9vcF9zdG9wOgorCSogZGFlL29wX3N0YXJ0OiByZS1vcmdhbmlzZSwgdGlkeQorIAorMjAwMS0wOS0xMiAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogb3Byb2ZpbGUuYzogZml4IHNtYWxsIGJ1dCB0cmlnZ2VyYWJsZQorCSAgU01QIGR1bXAgcmFjZQorIAorMjAwMS0wOS0xMiAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogb3Byb2ZpbGUuaDoKKwkqIG9wcm9maWxlLmM6CisJKiBvcF94ODYuYzogbW92ZSBzb21lIGNvZGUgYWJvdXQKKyAKKwkqIG9wX3N5c2NhbGxzLmM6IGFkZCBjb21tZW50CisgCisyMDAxLTA5LTEyICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgorCisJKiBjb25maWd1cmUuaW46IHJlbW92ZSB3YXJuaW5nCisgCisJKiBvcF91c2VyLmg6IAorCSogb3BfZXZlbnRzLmM6IGZpeCBhbmQgY2xlYW4gdXAgY3B1IHR5cGUgZGV0ZWN0aW9uCisgCisJKiBvcF9pbml0LmM6IGZpeCBlbWFpbAorIAorCSogb3Byb2ZpbGUuYzogYWRkIElSUSBzdGF0cy4gTm90IHN1cmUgd2hldGhlciB0byBrZWVwLi4uCisgCisyMDAxLTA5LTEyICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgorCisJKiBvcHJvZmlsZS5oOgorCSogb3Byb2ZpbGUuYzogdXNlIGNwdV9udW1iZXJfbWFwIChwZWRhbnRyeSB0aGluZykKKyAKKzIwMDEtMDktMDcgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+CisKKwkqIG9wcm9maWxlLmM6IHJlbW92ZSAvcHJvYy8uLi4vY3B1X3R5cGUuIENoZWNrIGlmIHVzZXIKKwkgIG1vZGUgY3B1IHR5cGUgZGV0ZWN0aW9uIGlzIGlkZW50aWNhbCB0byBtb2R1bGUgY3B1IHR5cGUKKwkqIG9wX2V2ZW50cy5oOgorCSogb3BfZXZlbnRzLmM6IGFkZCBvcF9nZXRfY3B1X3R5cGUoKS4gc2NyaXB0IGNhbiBnZXQgY3B1X3R5cGUKKwkgIGJ5IG9wX2hlbHAgLS1nZXQtY3B1LXR5cGUKKwkqIGd1aS9vcHJvZmlsZTogdXNlIGl0CQorCSogZGFlL29wcm9maWxlZC5jOiBkaXR0bworCSogZGFlL29wX3N0YXJ0OiBkaXR0bywgcGFzcyBleHBlY3RlZF9jcHVfdHlwZSB0byBtb2R1bGUKKwkqIGRvYy9vcHJvZmlsZS5zZ21sOiB1cGRhdGUKKwkqIGRvYy9vcHJvZmlsZS4xLmluOiB1cGRhdGUKKwkqIHBwL29wcm9mcHAuYzogZ2V0IGNwdV90eXBlIGZyb20gc2FtcGxlcyBmaWxlCisJKiBwcC9vcGZfZmlsdGVyLmNwcDogZ2V0IGNwdSB0eXBlIGZyb20gc3RkaW4KKworMjAwMS0wOS0wNiAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogZGFlL29wZF9wcm9jLmM6IHVzZSBqIG5vdCBpIGluIG1zeW5jICEKKyAKKzIwMDEtMDktMDYgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIGRhZS9vcF9zdGFydDogbW9yZSBzYW5pdHkgY2hlY2tpbmcgb2Ygb3B0aW9ucworIAorMjAwMS0wOS0wNiAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogZG9jL29wcm9maWxlLnNnbWw6IHVwZGF0ZSBhIGJpdAorIAorMjAwMS0wOS0wNiAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogPG1vc3QgZmlsZXM+OiBtYWtlIG9wX25yX2NvdW50ZXJzIGEgdmFyIChubyBwcCBzdXBwb3J0IGZvciA+IDIgeWV0KQorCSAKKwkqIGRhZS9vcHJvZmlsZWQuYzogZG9uJ3QgcHJpbnQgaGVscCB3aGVuIGNvdW50ZXIgZXZlbnQgZXRjLiBhcmUgd3JvbmcKKyAKKzIwMDEtMDktMDYgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIG9wcm9maWxlLmg6CisJKiBvcHJvZmlsZS5jOiB1c2UgTU9EVUxFX0xJQ0VOU0UKKyAKKzIwMDEtMDktMDYgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIG9wX3VzZXIuaDogYWRkIG1pc3NpbmcgcHJvdG90eXBlCisKKwkqIGRhZS9vcF9zdGFydDogZml4IGNvdW50ZXIgZXh0cmFjdGlvbgorIAorMjAwMS0wOS0wNSAgUGhpbGlwcGUgRWxpZSAgPHBoX2VAY2x1Yi1pbnRlcm5ldC5mcj4KKworCSogcHAvb3Byb2ZwcC5jOiBmaXggYSBmZXcgY29ybmVyIGNhc2UsIGNsZWFudXAuCisJKiBkYWUvb3BkX3Byb2M6IGRpdHRvLgkKKworCSogZGFlL29wX3N0YXJ0OiBiZXR0ZXIgaGFuZGxpbmcgb2YgY291bnRlciBudW1iZXIKKworCSogZGFlL29wZF9wcm9jOiBtaW5vciBjaGFuZ2UuCisKKwkqIG9wX3VzZXIuaDogZW5hYmxlIHN1cHBvcnQgZm9yIGZvdXIgY291bnRlcnMKKwkqIG9wcm9maWxlLmM6IGRpdHRvLiBTcGxpdCBmdW5jdGlvbnMKKworCSogb3BfZXZlbnRzLmM6IGV4cG9zZSBvcF9nZXRfY3B1X3R5cGVfc3RyKGludCkgdG8gd29ybGQuCisKKzIwMDEtMDktMDQgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIG9wcm9maWxlLmg6CisJKiBvcHJvZmlsZS5jOiBkb24ndCByZXN0b3JlIGRlbGl2ZXJ5IG1vZGUgdG8gTFZUUEMgKGNhdXNlcworCUFQSUMgZXJyb3Igb24gU01QKS4gRml4IGZvciBzaWxseSBzZW0gaGFuZyB3aXRoIGRvX2R1bXAKKyAKKzIwMDEtMDktMDQgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIGRhZS9vcF9zdGFydDogZml4IHR5cG8gYnVnCisgCisyMDAxLTA5LTA0ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgorCisJKiBkb2Mvb3Byb2ZpbGUuc2dtbDogc29tZSBzbWFsbCB0aWRpZXMKKyAKKzIwMDEtMDktMDQgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIG9wcm9maWxlLmM6IGNoYW5nZSBsdnRwY19hcGljX3Jlc3RvcmUgdG8gYmUgbW9yZSBjYXJlZnVsICEKKyAKKzIwMDEtMDktMDIgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIG9wcm9maWxlLmM6IGRvbid0IGFsbG93IHVubG9hZCBvbiBTTVAgdW5sZXNzIGFsbG93X3VubG9hZAorCSAgaXMgc2V0LiBTdGlsbCBuZWVkcyBkb2NzIChubyBwb2ludCB0aWxsIFNNUCB3b3JrcykuCisgCisyMDAxLTA5LTAyICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgorCisJKiBkYWUvb3BfZHVtcDogY29tcGxhaW4gaWYgbm90IHJvb3QgbW9yZSBjbGVhcmx5LgorIAorMjAwMS0wOS0wMiAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogb3Byb2ZpbGUuYzogcmVtb3ZlIGJvZ3VzIHNldHRpbmcgZm9yIE5NSSBvb3BzZXIuCisJICBzbXBfYXBpY19yZXN0b3JlKCkgLT4gbHZ0cGNfYXBpY19yZXN0b3JlKCkKKworMjAwMS0wOS0wMSAgUGhpbGlwcGUgRWxpZSAgPHBoX2VAY2x1Yi1pbnRlcm5ldC5mcj4KKworCSogb3Byb2ZpbGUuYzogZml4IHBtY19zZXR1cCgpCisKKwkqIHBwL01ha2VmaWxlLmluOgorCSogZGFlL01ha2VmaWxlLmluOiBmaXggdW5pbnN0YWxsIHByb2JsZW0KKworMjAwMS0wOC0zMSAgUGhpbGlwcGUgRWxpZSAgPHBoX2VAY2x1Yi1pbnRlcm5ldC5mcj4KKworCSogb3Byb2ZpbGUuaDoKKwkqIGRhZS9vcHJvZmlsZWQuaDoKKwkqIG9wX3VzZXIuaDoKKwkqIG9wcm9mcHAuaDoKKwkqIGRhZS9vcGRfdXRpbC5oOiBzaGFyZSBjb21tbW9uIGRlY2xhcmF0aW9ucywgcHV0IGl0IGluCisJICBvcF91c2VyLmgsIGluY2x1ZGUgb3BfdXNlci5oIGluIG90aGVyIC5oIHdoZW4gbmVjZXNzYXJ5LgorCSogb3BfZXZlbnRzLmM6CisJKiBhbGwgTWFrZWZpbGUuaW46IHVwZGF0ZSBkZXBlbmRhbmNpZXMuCisgCisyMDAxLTA4LTMwICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgorCisJKiBvcHJvZmlsZS5jOiB1c2UgbG9vcCBpbnN0ZWFkIG9mIGZpeGVkIGNvdW50ZXIgbnVtYmVyCisgCisyMDAxLTA4LTI2ICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgorCisJKiBvcF9ldmVudHMuYzogYWRkIG9wdGlvbiB0byBvcF9oZWxwIGZvciB0aGUgZ3VpCisJKiBndWkvb3Byb2ZpbGU6IHVzZSBvcF9oZWxwIHRvIGJ1aWxkIGRlc2NyaXB0aW9uCisJICBvZiBldmVudHMsIGFjY2VwdCBBdGhsb24gKG9ubHkgMiBjb3VudGVycykKKyAKKzIwMDEtMDgtMjUgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+CisKKwkqIHBwL29wcm9mcHAuYzoKKwkqIGRhZS9vcF9zdGFydDogdXNlIGxvb3AgaW5zdGVhZCBvZiBmaXhlZCBudW1iZXIgb2YgY291bnRlci4KKyAKKzIwMDEtMDgtMjQgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+CisKKwkqIHBwL29wcm9mX2NvbnZlcnQuYzogYWRkIHY0IC0tPiB2NSBjb252ZXJzaW9uCisgCisyMDAxLTA4LTIzICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgorCisJKiBvcHJvZmlsZS5jOiBjb3JyZWN0IHNvbWUgY29tbWVudC4KKyAKKzIwMDEtMDgtMjIgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+CisKKwkqIG9wX3VzZXIuaDoKKwkqIGRhZS9vcGRfcHJvYy5jOgorCSogZGFlL29wZF91dGlsLmM6CisJKiBkYWUvb3BkX3V0aWwuaDoKKwkqIGRhZS9vcHJvZmlsZWQuaDoKKwkqIGRhZS9vcHJvZmlsZWQuYzoKKwkqIGRhZS9vcHJvZmlsZWQuYzogcm93IHRvIGNvbHVtbiBmaWxlIGZvcm1hdCwgbG90IG9mIGNoYW5nZXMuCisgCisyMDAxLTA4LTIxICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgorCisJKiBvcF9ldmVudHMuYzogQWRkIEF0aGxvbiBzdHJpbmcvdW5pdCBtYWtzIGRlc2NyaXB0aW9uCisgCisyMDAxLTA4LTIwICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgorCisJKiBvcF9ldmVudHMuYzogY2hhbmdlIGluIGhhbmRsaW5nIG9mIHNlYXJjaC9jaGVjayBldmVudHMKKwkqIGRhZS9vcHJvZmlsZWQuYzoKKwkqIGRhZS9vcHJvZmlsZWQuaDoKKwkqIG9wcm9maWxlLmM6CisJKiBvcHJvZmlsZS5oOgorCSogcHAvb3Byb2ZwcC5jOgorCSogcHAvb3Byb2ZwcC5oOglyZWZsZWN0cyBjYWxsZXIvcHJvdG90eXBlLCBsb3Qgb2YgY2hhbmdlcy4KKworMjAwMS0wOC0zMSAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKyAgCisJKiBNYWtlZmlsZS5pbjoKKwkqIG9wX3g4Ni5jOgorCSogb3Byb2ZpbGUuaDoKKwkqIG9wcm9maWxlLmM6IGEgcHJvdG90eXBlIGRldGVjdG9yIGZvciBTTVAgaGFyZHdhcmUsCisJICBzb21lIHNtYWxsIGNsZWFudXAKKyAKKzIwMDEtMDgtMjAgIERhdmUgSm9uZXMgIDxkYXZlakBzdXNlLmRlPgorCisJKiBkb2Mvb3Byb2ZpbGUuc2dtbDoKKwkgIFVwZGF0ZWQgdG8gcmVmbGVjdCBuZXcgQXRobG9uL0R1cm9uIGNhcGFiaWxpdGllcy4KKwkqIHBwL29wcm9mX2NvbnZlcnQuYzoKKwkqIHBwL29wcm9mcHAuYzogdXNlIEVYSVRfRkFJTFVSRSB8IEVYSVRfU1VDQ0VTUworCSAgaW4gZXhpdCgpIGNhbGxzLgorCSogb3Byb2ZpbGUuYzogTWFrZSBub24tZXhwb3J0ZWQgZnVuY3Rpb25zIHN0YXRpYworCSAgYW5kIHJlbW92ZSBkdXBsaWNhdGUgZGVmaW5pdGlvbnMuCisKKzIwMDEtMDgtMTkgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIGRhZS9vcF9zdGFydDogaGFuZGxlIGNlbGVyaWVzIGluIGNwdSB0eXBlCisKKzIwMDEtMDgtMTkgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIG9wX2luaXQuYzoKKwkqIG9wcm9maWxlLmg6CisJKiBvcHJvZmlsZS5jOiBzbWFsbCB0aWRpZXMgb2YgdGhlIEF0aGxvbiBzdXBwb3J0CisKKzIwMDEtMDgtMTkgIERhdmUgSm9uZXMgIDxkYXZlakBzdXNlLmRlPgorCisJKiBvcF9ldmVudHMuYzoKKwkqIG9wX2luaXQuYzogCisJKiBvcHJvZmlsZS5oOgorCSogb3Byb2ZpbGUuYzoKKwkqIGRhZS9vcF9zdGFydDoKKwkqIGRhZS9vcHJvZmlsZWQuaDoKKwkqIGRhZS9vcHJvZmlsZWQuYzogaW5pdGlhbCBBdGhsb24gc3VwcG9ydAorCisyMDAxLTA4LTE5ICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgorCisJKiBvcHJvZmlsZS5jOiB1c2Ugc3ltYm9saWMgY29uc3RhbnQgZm9yIGFsbCBhcGljIHNldHVwLCBubyBnZW5lcmF0ZWQKKwkgIGNvZGUgY2hhbmdlCisKKzIwMDEtMDgtMTggIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+CisgCisJKiBNYWtlZmlsZS5pbjoKKwkqIGRhZS9NYWtlZmlsZS5pbjoKKwkqIHBwL01ha2VmaWxlLmluOgorCSogZG9jL01ha2VmaWxlLmluOgorCSogZ3VpL01ha2VmaWxlLmluOiBhZGQgdW5pbnN0YWxsIHRhcmdldAorIAorMjAwMS0wOC0xOCAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogZGFlL29wZF9wcm9jLmM6IHRpbnkgY2xlYW51cAorIAorMjAwMS0wOC0xNyAgUGhpbGlwcGUgRWxpZSAgPHBoX2VAY2x1Yi1pbnRlcm5ldC5mcj4KKworCSogZGFlL29wZF9wcm9jLmM6CisJKiBUT0RPOiBtaW5vciBjbGVhbnVwLgorCisyMDAxLTA4LTE2ICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgorCisJKiBndWkvb3Byb2ZpbGU6CisJKiBkYWUvb3Bfc3RhcnQ6CisJKiBkb2Mvb3Byb2ZpbGUuMS5pbjogZG9jdW1lbnQgYW5kIHVzZSBvcF9kdW1wCisKKzIwMDEtMDgtMTYgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIGNvbmZpZ3VyZS5pbjogYnVtcCB2ZXJzaW9uIHRvIDAuMC41Y3ZzCisgCisyMDAxLTA4LTE2ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgorCisJKiBhbGwgTWFrZWZpbGUuaW46IG1rZGlyIGluc3RhbGwgZmlsZXMKKworMjAwMS0wOC0xNSAgUGhpbGlwcGUgRWxpZSAgPHBoX2VAY2x1Yi1pbnRlcm5ldC5mcj4KKworCSogZGFlL29wZF9wcm9jLmM6IGZpeCBhIEZJTEUqIGxlYWsgaW4gb3BkX2dldF9hc2NpaV9tYXBzKCkKKworMjAwMS0wOC0xNCAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogb3Bfc3lzY2FsbHMuYzogZG9uJ3QgcmV0dXJuIG5lZ2F0aXZlIGhhc2hlcyAhCisJICByZXZlcnQgZG5hbWUgbGVuICJmaXgiCisJICB1c2UgYSBtdWNoIGJldHRlciBoYXNoIGZ1bmN0aW9uCisKKwkqIGRhZS9vcGRfcHJvYy5jOiBwcm90ZWN0IGFnYWluc3QgbmVnYXRpdmUgaGFzaGVzCisgCisyMDAxLTA4LTE0ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgorCisJKiBvcF9zeXNjYWxscy5jOiBzb21lIHNtYWxsIGZpeGVzCisKKwkqIG9wcm9maWxlLmM6IGFkZCBiYWNrIHVubWFza2luZyBjb2RlIGR1cmluZyBzZXRfZ2F0ZSwgYnV0IG9ubHkKKwkgIExWVFBDCisgCisyMDAxLTA4LTExICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgorCisJKiBvcHJvZmlsZS5oOiAyLjQuOCBkb2Vzbid0IGVpdGhlci4gKnNpZ2gqLiBsb29rcyBsaWtlIHdlIG5lZWQKKwkgIHNvbWUgYXV0b2NvbmZlcnkgOigKKyAKKzIwMDEtMDgtMTEgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIG9wcm9maWxlLmg6IDIuNC43LWxpbnVzIGRvZXNuJ3QgaW5jbHVkZSB0aGUgQW5kcmV3IE1vcnRvbgorCSAgY29tcGxldGVfYW5kX2V4aXQoKS4gSG9wZWZ1bGx5IHRoaXMgd2lsbCBtYWtlIGl0IGludG8gMi40LjgsCisJICBJJ20gYmFua2luZyBvbiB0aGlzLgorCisyMDAxLTA4LTExICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgorCisJKiBkYWUvb3BfZHVtcDoKKwkqIGRvYy9vcHJvZmlsZS5zZ21sOgorCSogZGFlL01ha2VmaWxlLmluOiBhIGxpdHRsZSB1dGlsaXR5IGZvciBkdW1waW5nCisKKzIwMDEtMDgtMTEgIERhdmUgSm9uZXMgIDxkYXZlakBzdXNlLmRlPgorCisJKiBvcHJvZmlsZS5oOgorCSogb3Byb2ZpbGUuYzogYmFjay1jb21wYXQgY29kZSBhbmQgdXNlIG9mIG5ldyBzdHJ1Y3QgY29tcGxldGlvbgorCSAgZm9yIHRoZSB0aHJlYWQKKworMjAwMS0wOC0xMSAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogb3Byb2ZpbGUuYzogY29ybmVyIGNhc2Ugd2hlcmUgYW4gYSBtaXNzIGFnYWluc3QgYSBmdWxsIGNvdW50LAorCSAgd2Ugd2VyZSBhdHRyaWJ1dGluZyB3cm9uZyAocmVwb3J0ZWQgYnkgQm9iIE1vbnRnb21lcnkpCisKKzIwMDEtMDgtMTEgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIG9wcm9maWxlLmM6IHVzZSBhIHNpbXBsZSBjbGkvc3RpIHdoZW4gaW5zdGFsbGluZyB0aGUgTk1JCisJICBoYW5kbGVyLiBJdCBzaG91bGQgd29yayBhbmQgYXZvaWRzIHRoZSB1bm1hc2tpbmcgcHJvYmxlbS4KKworMjAwMS0wOC0xMCAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogZGFlL29wcm9maWxlZC5oOiBmaXggaGVhZGVyIGluY2x1ZGUgKGZyb20gRGF2ZSBKb25lcykKKworCSogb3Bfc3lzY2FsbHMuYzoKKwkqIG9wcm9maWxlLmM6IGZpeCB1bmRlZmluZWQgc3ltYm9sIChmcm9tIERhdmUgSm9uZXMpCisKKzIwMDEtMDgtMTAgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIG9wcm9maWxlLmM6IHNtYWxsIHRpZHkgaW4gYXBpYyBzZXR1cAorIAorMjAwMS0wOC0wMiAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogb3Byb2ZpbGUuYzogZml4IG1vZCB1bmxvYWQgcmFjZSwgc21hbGwgZml4ZXMKKyAKKwkqIGRhZS9vcF9zdGFydDogbWFrZSBzeXNjdGwgZXJyb3IgYWN0dWFsbHkgYXBwZWFyCisgCisJKiBkb2Mvb3Byb2ZpbGUuc2dtbDogZG9jdW1lbnQgbmVlZCBmb3IgbW9kdXRpbHMgMi40LjYKKworCSogb3Bfc3lzY2FsbHMuYzogZml4IHN0dXBpZCBtb2QgdXNlIGNvdW50IHByb2JsZW0KKyAKKzIwMDEtMDctMjggIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIGRhZS9vcGRfcHJvYy5jOiBkJ29oLCBmYXQtZmluZ2VyZWQgYSBzbG93IG1lbWxlYWsgaW4gdGhlCisJICBhLWtzeW1vb3BzIG1vZHVsZXMgZml4CisgCisyMDAxLTA3LTI3ICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgorCisJKiBwcC9vcHJvZl9jb252ZXJ0LmM6IGZpeCBidWcgd2hlbiBjb252ZXJzaW9uIHNraXAgbW9yZSB0aGFuIG9uZQorCSAgdmVyc2lvbi4KKworMjAwMS0wNy0yNyAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogZG9jL01ha2VmaWxlLmluOiBsbiAtcyAtPiBsbiAtc2YKKworCSogZGFlL29wZF91dGlsLmM6IGFjdHVhbGx5IGluY2x1ZGUgdGhlIHJpZ2h0IGhlYWRlcgorIAorCSogZGFlL29wZF91dGlsLmg6IGNvbXBpbGUgZnJlZXN0YW5kaW5nIGZyb20gb3Byb2ZpbGVkLmgKKworMjAwMS0wNy0yNiAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogb3Byb2ZpbGUuYzogZml4IGNvbW1lbnQKKyAKKwkqIGRvYy9vcHJvZmlsZS5zZ21sOiBkb2N1bWVudCBzeW1ib2xsZXNzIG1vZHVsZXMgbm90IHdvcmtpbmcKKworCSogZGFlL01ha2VmaWxlLmluOgorCSogZGFlL29wZF9wcm9jLmM6CisJKiBkYWUvb3Byb2ZpbGVkLmg6IGNhdGNoIG1vZHVsZXMgd2l0aCBubyBzeW1ib2xzIHZpYSBxdWVyeV9tb2R1bGUoKQorCSAgYW5kIGlnbm9yZSBzYW1wbGVzIGZvciB0aGVtIHF1aWNrbHkKKyAKKzIwMDEtMDctMjUgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+CisKKwkqIGRhZS9vcF9zdGFydDogYmVhdXRpZnkgdGhlIG91dHB1dCBvZiBvcF9zdGFydCAtLWhlbHAKKwkqIHBwL29wX3RvX3NvdXJjZTogZGl0dG8uIGJldHRlciBhcmd1bWVudCBjaGVja2luZy4KKworCSogcHAvb3Byb2ZfY29udmVydC5jOgorCSogcHAvb3Byb2ZwcC5oOgorCSogZGFlL29wcm9maWxlZC5oOiBmaXggcHJvYmxlbSB3aXRoIG9wZF9mb290ZXIsIGRvbid0IGJ1bXAgCisJICBvcGRfZm9vdGVyIHZlcnNpb24gbnVtYmVyICEKKworMjAwMS0wNy0yNSAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogcHAvTWFrZWZpbGUuaW46CisJKiBwcC9vcHJvZl9jb252ZXJ0LmM6IGNvbnZlcnQgdG8gdjQKKyAKKwkqIHBwL29wcm9mcHAuYzogdXNlIG9wZF9zdHJkdXAKKwkgCisyMDAxLTA3LTI1ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgorCisJKiBkYWUvb3BkX3V0aWwuYzogc21hbGwgdGlkeQorIAorMjAwMS0wNy0yNCAgUGhpbGlwcGUgRWxpZSAgPHBoX2VAY2x1Yi1pbnRlcm5ldC5mcj4KKworCSogZGFlL29wZF91dGlsLmM6CisJKiBkYWUvb3BkX3V0aWwuaDogYWRkIHJlbGF0aXZlIHBhdGggbmFtZSB0byBhYnNvbHV0ZSBwYXRoIG5hbWUgc3R1ZmYKKwkqIHBwL29wcm9mcHAuYzogdXNlIGl0LgorCSogcHAvb3BfdG9fc291cmNlOiBzaW1wbGlmeSBjb2RlIHRvIHJlZmxlY3QgYWJvdmUgY2hhbmdlLgorCisyMDAxLTA3LTI1ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgorCisJKiBkYWUvb3BkX3Byb2MuYzogZml4IHVuaW5pdGlhbGlzZWQgcG9pbnRlciBhY2Nlc3MgKHJlcG9ydGVkIGJ5CisJPGJvYm1AZmMuaHAuY29tPikgdGhhdCBjb3VsZCBzZWdmYXVsdCBvcHJvZmlsZSBpbiBjYXNlIG9mCisJbW9kdWxlIGxvYWQvdW5sb2FkIGFjdGl2aXR5CisKKwkqIE1ha2VmaWxlLmluOgorCSogZGFlL29wZF9wcm9jLmM6CisJKiBkYWUvb3BkX3V0aWwuYzoKKwkqIGRhZS9vcGRfdXRpbC5oOgorCSogZGFlL29wcm9maWxlZC5jOgorCSogZGFlL29wcm9maWxlZC5oOgorCSogcHAvTWFrZWZpbGUuaW46CisJKiBwcC9vcHJvZnBwLmM6CisJKiBwcC9vcHJvZnBwLmg6IHVzZSBtdGltZSgpIGluc3RlYWQgb2YgbWQ1c3VtKCkuIFN0aWxsIGRvZXNuJ3QgaGFuZGxlCisJICAiLi9hOyBnY2MgLW8gYSBhLmM7IC4vYSIKKyAKKzIwMDEtMDctMjIgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+CisKKwkqIGRvYy9vcHJvZmlsZS4xLmluOgorCSogZG9jL29wcm9maWxlLnNnbWw6CisJKiBwcC9vcGZfZmlsdGVyLmg6CisJKiBwcC9vcGZfZmlsdGVyLmNwcDoKKwkqIHBwL29wZl9jb250YWluZXIuY3BwOiBpbXBsZW1lbnQgYW5kIGRvY3VtZW50IGZpbHRlcmluZyBmb3IgYXNzZW1ibHkKKwkgIG91dHB1dC4KKworMjAwMS0wNy0yMSAgUGhpbGlwcGUgRWxpZSAgPHBoX2VAY2x1Yi1pbnRlcm5ldC5mcj4KKyAKKwkqIGRvYy9vcHJvZmlsZS5zZ21sOgorCSogZ3VpL29wcm9maWxlOgorCSogb3Byb2ZpbGUuYzogcmVtb3ZlIGVkZ2VfZGV0ZWN0IHN1cHBvcnQuCisgCisJKiBwcC9vcHJvZnBwLmM6IGNoZWNrIGNvdW50ZXIgcmFuZ2UgZm9yIGVhY2ggZXZlbnQgdHlwZS4KKwkqIG9wcm9maWxlLmM6IGRpdHRvLgorCSogZ3VpL29wcm9maWxlOiBkaXR0byBhbmQgc2F2ZSBzZXR1cCBmb3IgZWFjaCBldmVudCB0eXBlLgorCSogb3Byb2ZpbGUuaDogb3BfY2hlY2tfcmFuZ2UoKSA6IGRpc3BsYXkgdGhlIGFsbG93ZWQgcmFuZ2UuCisKKzIwMDEtMDctMTggIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+CisgCisJKiBkYWUvb3Bfc3RhcnQ6IGRpc2FibGUgYWxsIGNvdW50ZXJzIGJlZm9yZSBzdGFydGluZyB0aGUgc2V0dXAuCisKKzIwMDEtMDctMTggIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIGRvYy9vcHJvZmlsZS5zZ21sOiBhZGQgaW4gYml0IEkgZm9yZ290IGFib3V0IG5vdCBwcm9maWxpbmcgcmluZyAwIAorIAorMjAwMS0wNy0xOCAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogZG9jL29wcm9maWxlLnNnbWw6IGFkZGVkIGEgd2FybmluZyBhYm91dCB2ZXJ5IGxvdyBjb3VudGVyIHZhbHVlcworCSAgKGZyb20gUGhpbGlwcGUsIG1vZGlmaWVkKQorIAorMjAwMS0wNy0xNSAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogb3Byb2ZpbGUuYzoKKwkqIG9wcm9maWxlLmg6CisJKiBkYWUvb3Bfc3RhcnQ6CisJKiBkYWUvb3Byb2ZpbGVkLmM6CisJKiBkb2Mvb3Byb2ZpbGUuc2dtbDogcmVtb3ZlIGFiaWxpdHkgdG8gc2V0IGRpZmZlcmVudCB2YWx1ZXMgb24KKwkgIGRpZmZlcmVudCBDUFVzCisgCisyMDAxLTA3LTE1ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgorCisJKiBUT0RPOiByZW1vdmUgZG9uZSB0aGluZworIAorMjAwMS0wNy0xNSAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogZGFlL29wZF9wcm9jLmM6IGJhY2t1cCBvbGQgc2FtcGxlIGZpbGVzIGlmIHRoZSBwcm9maWxpbmcKKwkgIGRldGFpbHMgKGNvdW50LCB1bml0IG1hc2sgZXRjLikgZGlzYWdyZWUuIEZpeGVzICM0MzUyNDUKKyAKKzIwMDEtMDctMTUgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+CisKKwkqIGRhZS9vcHJvZmlsZWQuYzogZml4IG9wcm9maWxlZCAtLXZlcnNpb24gdG8gd29yayBldmVuIGlmIHRoZQorCSAgcHJvZmlsZXIgaXMgbm90IGFscmVhZHkgc3RhcnRlZC4KKworCSogZ3VpL29wcm9maWxlOiBtYW55IGNsZWFudXAuIEZpeCBidWcgdHJhY2sgIzQzNTI0OC4gTWFrZSB0aGUgZ3VpIG1vcmUKKwkgIGluZGVwZW5kYW50IG9uIHRoZSBudW1iZXIgb2YgY291bnRlci4KKworCSogcHAvb3BfdG9fc291cmNlOiBmaXggYnVnIGluIGNvbW1hbmQgbGluZSBhcmd1bWVudHMgaGFuZGxpbmcuCisJCisJKiBwcC9vcGZfZmlsdGVyLmg6CisJKiBwcC9vcGZfZmlsdGVyLmNwcDoKKwkqIHBwL29wZl9jb250YWluZXIuY3BwOiBBcHBseSBzb21lIGNsZWFudXAgc3VnZ2VzdGVkIGJ5IEpvaG4sIHByaW5jaXBhbGx5CisJICBjaGFuZ2UgZmV3IGluaGVyaXRhbmNlIHRvIGNvbXBvc2l0aW9uLgorCisJKiBwcC9vcHJvZl9jb252ZXJ0LmM6IGZpeCAtLXZlcnNpb24uCisKKzIwMDEtMDctMTQgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+CisKKwkqIGRvYy9vcHJvZmlsZS5zZ21sOgorCSogZG9jL29wcm9maWxlLjEuaW46IG1pbm9yIGRvYyBmaXguCisKKzIwMDEtMDctMTQgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIGRvYy9vcHJvZmlsZS5zZ21sOiBzbWFsbCB0aWRpZXMKKyAKKzIwMDEtMDctMDEgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+CisKKwkqIGRvYy9vcHJvZmlsZS4xLmluOgorCSogZG9jL29wcm9maWxlLnNnbWw6IGRvY3VtZW50IG9wX3RvX3NvdXJjZSwgb3Byb2ZfY29udmVydCBhbmQgdGhlCisJICBvcHJvZmlsZSBndWkKKworCSogZ3VpL29wcm9maWxlOiBvblN0YXJ0UHJvZmlsaW5nKCkgY2hlY2sgdGhhdCBjb3VudCBpcyBpbiB0aGUgYWxsb3dlZAorCSAgcmFuZ2UuIG9uU3RvcFByb2ZpbGluZygpIGZsdXNoIHRoZSBzYW1wbGVzCisgCisyMDAxLTA3LTE0ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgorCisJKiBNYWtlZmlsZS5pbjogZGlzdCBmaXgKKworMjAwMS0wNy0xNCAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogZG9jL29wcm9maWxlLnNnbWw6IG1ha2UgaXQgY2xlYXIgd2Ugd2FudCB2bWxpbnV4IG5vdCB2bWxpbnV6CisKKwkqIGRvYy9odG1sLzogcmVtb3ZlIGdlbmVyYXRlZCBmaWxlcyBmcm9tIENWUworCisJKiBNYWtlZmlsZS5pbjogY2hhbmdlcyB0byBjcmVhdGUgSFRNTCBmaWxlcyBvbiBkaXN0IAorIAorMjAwMS0wNi0zMCAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogcHAvTWFrZWZpbGUuaW46IGZpeCB0aGUgZml4CisKKwkqIHBwL29wZl9maWx0ZXIuaDogdmVyeSBtaW5vciBjaGFuZ2VzCisgCisyMDAxLTA2LTI5ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgorCisJKiBwcC9NYWtlZmlsZS5pbjogZml4IHVwIGZvciBvcGZfZmlsdGVyCisKKwkqIGNvbmZpZ3VyZS5pbjogYWRkIEFDX1BST0dfQ1hYCisKKzIwMDEtMDYtMjkgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+CisKKwkqIHBwL29wZl9maWx0ZXIuY3BwOgorCSogcHAvb3BmX2NvbnRhaW5lci5jcHA6CisJKiBwcC9vcGZfZmlsdGVyLmg6CisJKiBwcC9vcF90b19zb3VyY2U6IG5ldyBmaWxlIHdoaWNoIHByb3ZpZGUgYSBzb3VyY2UgYW5ub3RhdGlvbiB1dGlsaXR5LgorCSogcHAvTWFrZWZpbGUuaW46IGJ1aWxkIGFuZCBpbnN0YWxsIG9wZl9maWx0ZXIgLyBvcF90b19zb3VyY2UKKworMjAwMS0wNi0yOSAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogY29uZmlndXJlLmluOgorCSogZGFlL29wZF91dGlsLmg6IGhpZGUgX19hdHRyaWJ1dGVfXygobWFsbG9jKSkgd2FybmluZ3MKKwkgIHdoZW4gbmVjZXNzYXJ5LiBEb2N1bWVudCAtLXdpdGgtY2MgYnVnLgorIAorMjAwMS0wNi0yOSAgUGhpbGlwcGUgRWxpZSAgPHBoX2VAY2x1Yi1pbnRlcm5ldC5mcj4KKworCSogZ3VpL29wcm9maWxlOiBtb3JlIHNhdmluZyBvZiB0aGUgdXNlciBzZXR1cC4KKworMjAwMS0wNi0yNyAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogZGFlL29wZF91dGlsLmM6IGRvY3VtZW50IGdldF9saW5lKCkgcmVzdHJpY3Rpb24KKyAKKzIwMDEtMDYtMjcgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+CisKKwkqIGRhZS9vcHJvZmlsZWQuYzogZml4IGNwdV9zcGVlZF9zdHIvY3B1X3NwZWVkIHZhcmlhYmxlIHNldHVwIGxvZ2ljLgorCisJKiBndWkvb3Byb2ZpbGU6IHNhdmUgYWR2YW5jZWQgc2V0dXAgZm9ybSB0byBwZXJzaXN0ZW50IHN0b3JhZ2UuCisJICBBZGQgbWFueSB2YWxpZGF0aW9uLgorCisyMDAxLTA2LTI1ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgorCisJKiBvcF9ldmVudHMuYzoKKwkqIHBwL29wcm9mX2NvbnZlcnQuYzogYWRkIG1pc3NpbmcgaGVhZGVycywgcmVtb3ZlIENWUyBibGlwCisgCisJKiBkYWUvb3BkX3V0aWwuaDogc3BlY2lmeSBtYWxsb2MgYXR0cmlidXRlLiBnaXZlcyB3YXJuaW5ncyBvbgorCSAgb2xkZXIgY29tcGlsZXJzLCB3aG8gY2FyZXMuIEkgZG91YnQgdGhpcyB3aWxsIGhlbHAgYnV0IGl0IGNhbid0CisJICBoYXJtCisgCisyMDAxLTA2LTI1ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgorCisJKiBwcC9vcHJvZl9jb252ZXJ0LmM6IGNvbnRpbnVlIGlmIGFuIGVycm9yIHdpdGggb25lIGZpbGUgb2NjdXJzCisgCisJKiBkYWUvb3Bfc3RvcDogcmVtb3ZlIHJtbW9kIGFnYWluIC0gaXQgaXMgdXNlcidzIGNob2ljZSBvbiB3aGVuL3doZXRoZXIKKwkgIHRvIHVubG9hZAorIAorMjAwMS0wNi0yMyAgUGhpbGlwcGUgRWxpZSAgPHBoX2VAY2x1Yi1pbnRlcm5ldC5mcj4KKworCSogcHAvb3Bfc3RhcnQ6IGFkZCBtaXNzaW5nIHN1cHBvcnQgZm9yIHNwZWNpZnlpbmcgdGhlIGxvZyBmaWxlbmFtZS4KKwkgIEdldCBjb3JyZWN0IGNwdSBzcGVlZCBpbmZvcm1hdGlvbiBmb3Igc21wIGFzIHN1Z2dlc3RlZCBieSBKb2huLgorCisJKiBkYWUvb3Byb2ZpbGVkLmM6IENvcnJlY3QgYSB3YXJuaW5nIHdpdGggc29tZSBvbGRlciB2ZXJzaW9uIG9mIHRoZQorCSAgcG9wdCBsaWJyYXJ5LgorCSogcHAvb3Byb2ZwcDogYXMgYWJvdmUuCisKKwkqIGd1aS9vcHJvZmlsZTogYWR2YW5jZWQgc2V0dXAgZm9ybSBhZGRlZC4KKworCSogcHAvb3Byb2ZfY29udmVydC5jOiB2ZXJzaW9uIGFuZCBoZWxwIG9wdGlvbiBzdXBwb3J0LgorCisyMDAxLTA2LTIzICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgorCisJKiBwcC8uY3ZzaWdub3JlOiBhZGQgb3Byb2ZfY29udmVydAorIAorMjAwMS0wNi0yMyAgUGhpbGlwcGUgRWxpZSAgPHBoX2VAY2x1Yi1pbnRlcm5ldC5mcj4KKworCSogcHAvb3Byb2ZfY29udmVydC5jOiBuZXcgdXRpbGl0eSB0byBjb252ZXJ0IHNhbXBsZXMgZmlsZXMgd2hlbiB0aGUgb3BkX2Zvb3RlcgorCSAgc3RydWN0IGlzIGNoYW5nZWQuCisJKiBwcC9NYWtlZmlsZS5pbjogcmVmbGVjdCB0aGUgYWJvdmUgY2hhbmdlLiBUaWR5IHNvbWUgdW5uZWNlc3NhcnkgYmxhbmsuCisJKiBNYWtlZmlsZS5pbjogVGlkeSBzb21lIHVubmVjZXNzYXJ5IGJsYW5rL3RhYnVsYXRpb24uCisKKzIwMDEtMDYtMjMgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIFJFQURNRTogdXBkYXRlCisgCisyMDAxLTA2LTIyICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgorCisJKiBvcHJvZmlsZS5jOiBhbHdheXMgaGF2ZSBzbXBfYXBpY19yZXN0b3JlKCkKKyAKKzIwMDEtMDYtMjIgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIHZhcmlvdXM6IG1hZGUgc3BhY2luZyBtb3JlIGNvbnNpc3RlbnQgaW4gQyBzb3VyY2UsCisJICByZW1vdmVkIHVudXNlZCB1dGlsaXR5IGZ1bmN0aW9ucy4KKyAKKzIwMDEtMDYtMjIgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIG9wcm9maWxlLmM6IGFjdHVhbGx5IGNhbGwgc21wX2FwaWNfcmVzdG9yZSgpIG9uIFVQCisKKwkqIGRhZS9vcF9zdGFydDogZG9uJ3QgcmVtb3ZlIHRoZSBtb2R1bGUgaW1tZWRpYXRlbHkgYWZ0ZXIKKwkgIGluc2VydGluZyBpdCAhCisgCisyMDAxLTA2LTIyICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgorCisJKiBkYWUvb3Byb2ZpbGVkLmgsIHBwL29wcm9mcHAuaDogY2hhbmdlIHRoZSBvcGRfZm9vdGVyIHN0cnVjdC4KKwkgIEJ1bXAgT1BEX1ZFUlNJT04gdG8gcmVmbGVjdCB0aGUgZmlsZSBmb3JtYXQgY2hhbmdlLgorCSogcHAvb3Byb2ZwcC5jOiByZWZsZWN0IHRoZSBhYm92ZSBjaGFuZ2UKKwkqIGRhZS9vcHJvZmlsZWQuYzogcmVmbGVjdCB0aGUgYWJvdmUgY2hhbmdlLCBtYW55IG9wdGlvbnMgc3VwcmVzc2VkCisJICBiZWNhdXNlIHNldHVwIGlzIHJlYWQgZnJvbSB0aGUgL3Byb2Mvc3lzL2Rldi9vcHJvZmlsZSBmaWxlcy4KKwkqIGRhZS9vcGRfcHJvYzogc3VwcHJlc3Mgc29tZSAiZXh0ZXJuIHZhcmlhYmxlIiB3aGljaCBubyBsb25nZXIgZXhpc3QuCisJKiBkYWUvb3Bfc3RhcnQ6IHJlZmxlY3QgdGhlIGFib3ZlIGNoYW5nZQorCisyMDAxLTA2LTIyICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgorCisJKiBkYWUvb3Bfc3RhcnQ6IGFkZCAtLWN0clswfDFdLWVkZ2UtZGV0ZWN0CisJKiBndWkvb3Byb2ZpbGU6IGFkZCBlZGdlIGRldGVjdCBzdHVmZgorCSogb3Byb2ZpbGUuYzogYWRkIGVkZ2UtZGV0ZWN0IHN0dWZmLCB0aGUgZWRnZS1kZXRlY3QgaXMgYW4KKwkgIGV4cGVyaW1lbnRhbCBmZWF0dXJlIHdoaWNoIGRvIG5vdCB3b3JrIGFjdHVhbGx5IChubyBlZmZlY3QgZm9yIG5vdykuCisJICBCZWNhdXNlIHRoaXMgaXMgZXhwZXJpbWVudGFsIG5vIGRvY3VtZW50YXRpb24gYXJlIHByb3ZpZGVkIG9uIHRoaXMKKwkgIG9wdGlvbi4KKworMjAwMS0wNi0yMiAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogY29uZmlndXJlLmluOgorCSogZGFlL29wX3N0b3A6CisJKiBkb2Mvb3Byb2ZpbGUuc2dtbDoKKwkqIG9wX2luaXQuYzoKKwkqIG9wX3N5c2NhbGxzLmM6CisJKiBvcHJvZmlsZS5oOgorCSogb3Byb2ZpbGUuYzogYWRkIGFuZCBkb2N1bWVudCB0aGUgYWJpbGl0eSAKKwkgIHRvIG1ha2UgdGhlIG1vZHVsZSB1bmxvYWRhYmxlLiBOb3Qgd2VsbCB0ZXN0ZWQKKwkgIChidXQgc2VlbXMgdG8gd29yaykuCisgCisJKiBkb2Mvb3Byb2ZpbGUuc2dtbDogZG9jdW1lbnQgY29tcGlsZS10aW1lIG9wdGlvbnMKKwkgIGJldHRlciwgdGhhbmsgUGhpbGlwcGUKKyAKKzIwMDEtMDYtMjEgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIG9wcm9maWxlLmM6IHJlbW92ZSBzdGFsZSBjb21tZW50cy4gZml4IHRoZW9yZXRpY2FsCisJICBtZW1vcnkgbGVha3Mgd2hlbiBzZXR0aW5nIHVwIHRoZSBzeXNjdGxzIGZhaWxzLCBzbWFsbCB0aWR5CisgCisyMDAxLTA2LTE5ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgorCisJKiBSRUFETUU6IAorCSogZG9jL29wcm9maWxlLnNnbWw6CisJKiBkb2MvaHRtbC86IHMvc291cmNlZm9yZ2Uvc2YvCisgCisyMDAxLTA2LTE2ICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgorCisJKiBvcF9ldmVudHMuYzogb3BfY2hlY2tfZXZlbnRzKCkgZml4IHR3byBiYWQgdXNlIG9mIAorCSAgb3BfY2hlY2tfdW5pdF9tYXNrKCkuIG9wX2dldF91bV9kZXNjKCkgZml4IGEgdHlwby4KKworMjAwMS0wNi0xNCAgUGhpbGlwcGUgRWxpZSAgPHBoX2VAY2x1Yi1pbnRlcm5ldC5mcj4KKworCSogb3BfZXZlbnRzLmM6IHN0cnVjdCBvcF91bml0X21hc2ssIHN0cnVjdCBvcF91bml0X2Rlc2MgYWxsb3cgdXAgdG8KKwkgIHNldmVuIHVuaXQgbWFza3MuIFJlZmxlY3QgdGhpcyBjaGFuZ2UgaW4gZGF0YSwgb3BfY2hlY2tfdW5pdF9tYXNrKCkKKwkgIGFuZCBjYWxsZXJzIG9mIG9wX2NoZWNrX3VuaXRfbWFzaygpLgorCisyMDAxLTA2LTEyICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgorCisJKiByZXN1bHRzL2ludHJvOiB0aWR5IHVwCisKKwkqIHJlc3VsdHMva2VybmVsLWNvbXBpbGUvdGltZS1hdmVzLnBsOiBmaXggcmVnZXhwcworIAorCSogcmVzdWx0cy9sYXRleC86IHJlc3VsdHMgZnJvbSB0aGUgTGFUZVggcnVucworIAorMjAwMS0wNi0wOSAgUGhpbGlwcGUgRWxpZSAgPHBoX2VAY2x1Yi1pbnRlcm5ldC5mcj4KKworCSogZGFlL29wX3N0YXJ0OiBhdm9pZCBjaG1vZCB0byBhIG5vbiBleGlzdGluZyBkaXJlY3RvcnkgYW5kIHNldHVwIGFjY2VzcworCSAgbW9kZSBmcm9tIDcwMCB0byA3NTUuIFJlcGxhY2UgdXNlIG9mIHRoZSBzeXNjdGwgdXRpbGl0eSBieSBhCisJICBkb19zeXNjdGwoKSBmdW5jdGlvbi4KKworCSogZ3VpL29wcm9maWxlOiBzb21lIGNsZWFudXAgYW5kIGJ1Z2ZpeC4KKworCSogcHAvb3Byb2ZwcC5jOiBhZGQgbmV3IG91dHB1dCBvcHRpb25zIC0tbGlzdC1hbGwtc3ltYm9scy1kZXRhaWxzLAorCSAgLS1vdXRwdXQtbGluZW5yLWluZm8KKworCSogZG9jL29wcm9maWxlLjEuaW46CisJKiBkb2Mvb3Byb2ZpbGUuc2dtbDogdXBkYXRlIGRvY3VtZW50YXRpb24gYWJvdXQgdGhlIG5ldyBvcHJvZnBwCisJICBvcHRpb24KKworMjAwMS0wNi0wOSAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogY29uZmlndXJlLmluOiBmaXggYnVpbGQgd2l0aCBDT05GSUdfTU9EVkVSU0lPTlMKKwkgIGVuYWJsZWQuCisgCisyMDAxLTA2LTA0ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgorCisJKiBkYWUvb3Byb2ZpbGVkLmM6IG1vdmUgbG9nZmlsZSBtZXNzYWdlIHRvCisJICBiZWZvcmUgY2xvc2UoMSkgdG8gbm90IG5lZWQgdG8gdXNlIHN0ZGVycgorIAorMjAwMS0wNi0wMyAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogZ3VpLzogbmV3IGRpcmVjdG9yeQorCisJKiBNYWtlZmlsZS5pbjoKKwkqIGNvbmZpZ3VyZS5pbjoKKwkqIGd1aS8uY3ZzaWdub3JlOgorCSogZ3VpL01ha2VmaWxlLmluOgorCSogZ3VpL29wcm9maWxlOiBQaGlsaXBwZSdzIHByb3RvdHlwZSB0Y2wvdGsgc3RhcnR1cAorCSAgc2NyaXB0LiBSZXF1aXJlcyBtb3JlIHdvcmsuCisgCisyMDAxLTA2LTAzICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgorCisJKiBwcC9vcHJvZnBwLmg6IHJlbW92ZSBsaWJpYmVydHkgaGVhZGVyIHRoYXQgd2FzCisJICBhcHBhcmVudGx5IGJyZWFraW5nIGluc3RhbGwgb24gc2xhY2t3YXJlCisgCisyMDAxLTA2LTAzICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgorCisJKiBSRUFETUU6IHVwZGF0ZQorIAorMjAwMS0wNi0wMyAgUGhpbGlwcGUgRWxpZSAgPHBoX2VAY2x1Yi1pbnRlcm5ldC5mcj4KKworCSogb3BfZXZlbnRzLmM6IGFsbG93IHVuaXQgbWFzayBvcHRpb24gdG8gYmUgYml0IG1hc2sKKworMjAwMS0wNi0wMSAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogZGFlL29wZF9wcm9jLmM6IGFjdHVhbGx5IHVzZSBvcGRfZ2V0X2NvdW50IC0KKwkgIGZpeCBidWcgd2l0aCBjb3VudGVyIDEgcmVwb3J0ZWQgcmVzdWx0cworCisJKiBkYWUvb3Bfc3RhcnQ6IGZpeCBicm9rZW4gc2hlbGwgc2NyaXB0aW5nCisKKwkqIGRhZS9vcHJvZnBwLmM6IGZpeCBsaXN0LXN5bWJvbHMgb3V0cHV0CisKKzIwMDEtMDQtMzAgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIGRhZS9vcF9zdGFydDogYmV0dGVyIGVycm9yIHJlcG9ydGluZworCisJKiBkYWUvb3BkX3Byb2MuYzogZml4IGluZGVudGF0aW9uCisgCisyMDAxLTA0LTA4ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgorCisJKiBjb25maWd1cmUuaW46IDAuMC4zIGhhcyBiZWVuIHJlbGVhc2VkLiBCdW1wIGN2cyB2ZXJzaW9uCisJICB0byAwLjAuNAorCisyMDAxLTA0LTA1ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgorCisJKiBkYWUvb3BkX3Byb2MuYzogcmVtb3ZlIGZvcmNlZCBkdW1waW5nLiBJdCB3YXMKKwljYXVzaW5nIG92ZXJoZWFkIHNwaWtlcworCisJKiBkb2MvaHRtbC9yZXN1bHRzLmh0bWw6CisJKiBkb2Mvb3Byb2ZpbGUuc2dtbDoKKwkqIGRhZS9vcF9zdGFydDogSG9wZWZ1bGx5IGRvY3VtZW50IGR1bXAgY2xlYXJseSBlbm91Z2gKKworMjAwMS0wNC0wNSAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogb3Byb2ZpbGUuaDoKKwkqIG9wX3N5c2NhbGxzLmM6IDIuNC4zIGFuZCBhYm92ZSBoYXZlIGEgcncgbW1hcF9zZW0KKworMjAwMS0wNC0wNSAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogZG9jL2h0bWwvOiBhZGRlZCBtaXNzaW5nIGZpbGVzCisKKzIwMDEtMDQtMDUgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIGRvYy9vcHJvZmlsZS5zZ21sOgorCSogZG9jL2h0bWwvcmVzb3VyY2VzLmh0bWw6IGFkZCBVUkxzCisKKzIwMDEtMDQtMDUgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIHBwL29wcm9mcHAuYzogZml4IGdwcm9mIG91dHB1dCBidWcuIEl0IHdvcmtzIE9LIG5vdywKKwkgIGJ1dCBNVUxUSVBMSUVSID09IDEgd2lsbCBicmVhayBmb3Igc29tZSByZWFzb24KKworMjAwMS0wNC0wNSAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogZG9jL29wcm9maWxlLnNnbWw6CisJKiBkb2MvaHRtbC86IGZpbmlzaCBTR01MIGRvY3VtZW50YXRpb24gKGZvciBub3cpCisKKzIwMDEtMDQtMDQgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIGRvYy9NYWtlZmlsZS5pbjoKKwkqIGRvYy9vcHJvZmlsZS5zZ21sOgorCSogZG9jL29wcm9maWxlOiBzdGFydCBTR01MIGRvY3VtZW50YXRpb24KKworMjAwMS0wNC0wNCAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogY29uZmlndXJlLmluOgorCSogTWFrZWZpbGUuaW46CisJKiBkb2MvTWFrZWZpbGUuaW46CisJKiBkb2Mvb3Byb2ZpbGUuMS5pbjogYWRkIGEgbWFucGFnZQorIAorMjAwMS0wNC0wNCAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogcHAvb3Byb2ZwcC5jOiBnZXQgc29tZSBzb3J0IG9mIGhhbGYtd29ya2luZyBvdXRwdXQKKwlpbiBncHJvZiBmb3JtYXQuIEN1cnJlbnRseSB0aGUgbnVtYmVycyBhcmUgc2NyZXdlZCB1cCwKKwluZWVkIGEgbWFqb3IgdHJhd2wgdGhyb3VnaCBncHJvZiBzb3VyY2UgdG8gc2VlIHdoYXQncworCWdvaW5nIG9uLiAKKworMjAwMS0wNC0wNCAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogZGFlL01ha2VmaWxlLmluOgorCSogZGFlL21kNS5jOgorCSogZGFlL21kNS5oOgorCSogZGFlL29wZF9wcm9jLmM6CisJKiBkYWUvb3Byb2ZpbGVkLmg6CisJKiBwcC9NYWtlZmlsZS5pbjoKKwkqIHBwL29wcm9mcHAuYzoKKwkqIHBwL29wcm9mcHAuaDogdXNlIG1kNXN1bXMgdG8gdmVyaWZ5IHNhbXBsZSBmaWxlCisJICBpbnRlZ3JpdHkuIFN0b3JlZCBpbiBlYWNoIHNhbXBsZSBmaWxlIGZvb3RlciBhcmUKKwkgIG1kNXN1bXMgb2YgdGhlIGJpbmFyeS4gVGhlc2UgYXJlIGNoZWNrZWQgYnkgdGhlIGRhZW1vbgorCSAgd2hlbiByZS11c2luZyBhbiBvbGQgZmlsZSwgYW5kIGJ5IHRoZSBwb3N0LXByb2Nlc3Nvci4KKwkgIEJ1bXAgT1BEX1ZFUlNJT04gdG8gcmVmbGVjdCB0aGUgZmlsZSBmb3JtYXQgY2hhbmdlLgorCisJKiBkYWUvb3Byb2ZpbGVkLmM6IG1ha2Ugc3RhcnQgdXAgbW9yZSBmcmllbmRseSAKKwkKKwkqIGRhZS9vcF9zdGFydDogbWFrZSBzY3JpcHQgbW9yZSBmcmllbmRseQorCisyMDAxLTAzLTEwICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgorCisJKiBkYWUvb3BkX3Byb2MuYzogZml4ZWQgc29tZSBlcnJvciBtZXNzYWdlcworCisJKiByZXN1bHRzL2tlcm5lbC1jb21waWxlL3Jhdy9jY3UuZ251cGxvdDogYWRkCisgCisyMDAxLTAyLTA1ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgorCisJKiBUT0RPOiB1cGRhdGUKKworCSogcmVzdWx0cy9pbnRybzogdXBkYXRlCisKKwkqIHJlc3VsdHMva2VybmVsLWNvbXBpbGUvOiB1cGRhdGUsIGFkZCBGSUcgZmlsZXMKKworCSogcmVzdWx0cy9sbWJlbmNoOiBsbWJlbmNoIHJlc3VsdHMKKworCSogcmVzdWx0cy9vdXRwdXQva2VybmVsLWFjMTItb3V0cHV0OiBhZGQgcmVhZHByb2ZpbGUgb3V0cHV0CisKKzIwMDEtMDItMDQgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIFRPRE86IHVwZGF0ZQorCisJKiBvcF9zeXNjYWxscy5jOiBzbWFsbCByZS1vcmcsIHNvbWUgbWljcm8tb3B0aW1pc2F0aW9ucworCSAgdG8gZG9faGFzaCgpCisKKwkqIHBwL29wcm9mcHAuYzogY2xlYW4gdXAgLS1saXN0LXN5bWJvbCBvdXRwdXQgYSBsaXR0bGUKKworCSogcmVzdWx0cy9rZXJuZWwtY29tcGlsZS9vdmVyaGVhZDogdXBkYXRlIHdpdGggcmVzdWx0cworCisJKiByZXN1bHRzL2tlcm5lbC1jb21waWxlL3RpbWUtYXZlcy5wbDogYWRkIGdudXBsb3Qgb3V0cHV0CisKKwkqIHJlc3VsdHMva2VybmVsLWNvbXBpbGUvcmF3LyA6IHJhdyBvdXRwdXQgZmlsZXMKKworCSogcmVzdWx0cy9vdXRwdXQvIDogbmV3IGRpciBmb3IgZXhhbXBsZSBvdXRwdXQKKworCSogcmVzdWx0cy9vdXRwdXQvbGliYy0yLjEuOTIuc286IG91dHB1dCBmcm9tIGxpYmMgcHJvZmlsZQorCisJKiByZXN1bHRzL291dHB1dC9rZXJuZWwtYWMxMi1vdXRwdXQ6IG91dHB1dCBmcm9tIGtlcm5lbCBwcm9maWxlCisKKwkqIHJlc3VsdHMvb3V0cHV0L2RvX2Fub255bW91c19wYWdlOiBkZXRhaWxlZCBzeW1ib2wgcHJvZmlsZQorCisJKiByZXN1bHRzL291dHB1dC9vcHJvZmlsZS5tb2R1bGU6IG91dHB1dCBmb3Igb3Byb2ZpbGUgbW9kdWxlCisKKzIwMDEtMDItMDMgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIFRPRE86IHVwZGF0ZQorCisJKiBvcHJvZmlsZS5oOgorCSogb3Bfc3lzY2FsbHMuYzogbWFrZSBkb19oYXNoKCkgbm9uLXJlY3Vyc2l2ZQorCisJKiBvcHJvZmlsZS5jOiBtYWtlIHRocmVhZCB3YWtlIHVwIGhhbGYgYXMgb2Z0ZW4KKworCSogZGFlL29wZF9wcm9jLmM6IHF1aWVzY2UgZHVtcCBzeXNjdGwKKwkgIG1ha2UgcmVzaWxpZW50IGFnYWluc3QgYnJva2VuIHNhbXBsZSAoZG9uJ3QgZXhjZWVkIG1tYXApCisKKwkqIHBwL29wcm9mcHAuYzogLS1nY2MtZGVtYW5nbGUgLT4gLS1kZW1hbmdsZSwganVzdCB0b28KKwkgIGFubm95aW5nIHRvIGxpdmUKKyAKKzIwMDEtMDItMDEgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIG9wcm9maWxlLmg6IGFkZCBvcF9zYXZlX3N5c2NhbGxzKCkKKworCSogb3Byb2ZpbGUuYzogbGV0IGludGVycnVwdF9zbGVlcF9vbigpIGRpZQorCSAgYWRkIGtlcm5lbF9vbmx5IG9wdGlvbgorCSAgc3lzY3RsIGR1bXBzIGV2ZXJ5dGhpbmcgaXQgY2FuIG5vdworIAorCSogb3Bfc3lzY2FsbHMuYzogYWRkIG9wX3NhdmVfc3lzY2FsbHMoKSAKKworCSogZGFlL29wZF9wcm9jLmM6CisJKiBkYWUvb3Byb2ZpbGVkLmM6CisJKiBkYWUvb3Bfc3RhcnQ6IGFkZCAtLWtlcm5lbC1vbmx5CisgCisJKiBkb2MvZ3VpZGUubHl4OiBtZW50aW9uIC0ta2VybmVsLW9ubHkKKyAKKwkqIFRPRE86IHVwZGF0ZQorIAorMjAwMS0wMi0wMSAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogTWFrZWZpbGUuaW46IHNwbGl0IG91dCBvcF9pbml0LmMKKworCSogYXV0b2dlbi5zaDogbmV3IGZpbGUKKworCSogY29uZmlndXJlLmluOiBmaXggLS13aXRoLWNjLiBTcGxpdCBvdXQgb3BfaW5pdC5jCisJCisJKiBvcF9pbml0LmM6IG5ldyBmaWxlLCB0byBhbGxvdyByZXN0IC1tYXJjaD1pNjg2CisKKwkqIG9wcm9maWxlLmM6IGN1dCBvdXQgaW5pdCBzdHVmZiB0byBvcF9pbml0LmMgCisKKwkqIG9wZF9wcm9jLmM6IG1vcmUgdmVyYm9zZQorCisJKiByZXN1bHRzL2tlcm5lbC1jb21waWxlL3RpbWUtYXZlcy5wbDogd29yayB3aXRoIG90aGVyCisJICB0aW1lIGZvcm1hdCB0b28gCisJIAorMjAwMS0wMS0yNSAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogY29uZmlndXJlLmluOiBhZGQgLS13aXRoLWNjIG9wdGlvbgorCisJKiBwcC9vcHJvZnBwLmM6IGZpeCBjb25zdCBkaXNjYXJkIHdhcm5pbmdzCisKKzIwMDEtMDEtMjUgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIGNvbmZpZ3VyZS5pbjogbXVzdCBjaGVjayBmb3IgbGliZXJ0eSAqYWZ0ZXIqCisJICBsaWJkbAorCisyMDAxLTAxLTI0ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgorCisJKiBvcHJvZmlsZS5jOiB3ZSdyZSBub3QgdXNpbmcgb3BfY2hlY2tfY3RyKCkKKwkJcmV0dXJuIHZhbHVlLCBzbyBkb24ndCBoYXZlIG9uZQorCisyMDAxLTAxLTIzICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgorCisJKiBjb25maWd1cmUuaW46CisJKiBvcF9zeXNjYWxscy5jOgorCSogb3Byb2ZpbGUuYzoKKwkqIG9wcm9maWxlLmg6IHN0cmlwcGVkIHRoZSBOTUkgZXJyb3IgaGFuZGxpbmcgc3R1ZmYKKworCSogb3BfZXZlbnRzLmM6IGZpeGVkIHNpbGx5IGJ1ZyBpbiB0aGUgb3RoZXIgcGxhY2UgdG9vIDpQCisJCisJKiBkYWUvb3Byb2ZpbGVkLmM6IGltcHJvdmVkIGVycm9yIG1lc3NhZ2VzCisKKzIwMDEtMDEtMjIgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIG9wX2V2ZW50cy5jOiBmaXggc2lsbHkgYnVnIHNvIHlvdSBjYW4gc2V0IGJvdGgKKwkJY291bnRlcnMgYXQgb25jZQorCisJKiBvcHJvZmlsZS5jOiBkb24ndCBkaXNhYmxlL2VuYWJsZSBjb3VudGVycyBpbgorCQl0aGUgaW50ZXJydXB0IGhhbmRsZXIuIEl0J3MgZXhwZW5zaXZlIGFuZAorCQlkb2Vzbid0IHJlYWxseSBidXkgYW55dGhpbmcuCisJCUZpeCBhIHNpbGx5IEVCVVNZIGJ1ZyB3aGVuIG9wZW4gZmFpbHMgb25jZS4KKworCSogZGFlL29wX3N0YXJ0OiBkb24ndCByZW1vdmUgb2xkIHNhbXBsZSBmaWxlcworCQlwYXNzIGNvcnJlY3QgZXZlbnQgdG8gZGFlbW9uIGZvciBjdHIxCisKKzIwMDEtMDEtMjIgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIG9wX3N5c2NhbGxzLmM6ZG9faGFzaCgpOiB1c2Ugc3RyY3B5IG5vdCBzdHJuY3B5LiAKKwkJSXQncyBwcm9iYWJseSBmYXN0ZXIsIGFuZCBpZiBkX25hbWUubGVuIGlzIGNvcnJ1cHRlZAorCQl0aGUga2VybmVsIGhhcyBiaWdnZXIgdGhpbmdzIHRvIHdvcnJ5IGFib3V0LgorCisyMDAxLTAxLTIyICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgorCisJKiBkYWUvZ3VpZGUubHl4OgorCSogZGFlL2d1aWRlLmh0bWw6IHVwZGF0ZSBkb2NzIGEgbGl0dGxlCisKKzIwMDEtMDEtMjIgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIGRhZS9vcF9zdGFydDoKKwkqIG9wX3VzZXIuaDogYnVtcCB1cCBoYXNoIHRhYmxlIHNpemUKKworCSogcmVzdWx0cy9rZXJuZWwtY29tcGlsZS9vdmVyaGVhZDogaW50cm8gdG8ga2VybmVsCisJCWNvbXBpbGUgdGVzdHMKKworCSogcmVzdWx0cy9rZXJuZWwtY29tcGlsZS90aW1lLWF2ZXMucGw6IHNjcmlwdAorCQl0byBnZW5lcmF0ZSBhdmVyYWdlcyArIG92ZXJoZWFkcworCisJKiBvcF9zeXNjYWxscy5jOiB0aHJlZSBmaXhlcyB0byBkb19oYXNoKCkuIEl0J3MKKwkJZ29pbmcgdG8gYmUgYSBwYWluIHRvIG1ha2UgaXRlcmF0aXZlIDooCisKKzIwMDEtMDEtMjEgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIHJlc3VsdHMvOiBTdGFydGVkIGEgY29sbGVjdGlvbiBvZiByZXN1bHRzCisKKzIwMDEtMDEtMjAgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIFRPRE86IHVwZGF0ZQorCisJKiBjb25maWd1cmUuaW46IGFkZCBjb21tZW50CisKKwkqIE1ha2VmaWxlLmluOiBtb3ZlZCBvcHJvZmlsZV9rLmMgdG8gb3Bfc3lzY2FsbHMuYywgb3BfdXNlci5oIGFkZGVkCisKKwkqIG9wX3N5c2NhbGxzLmM6IHJlbmFtZSBvZiBvcHJvZmlsZV9rLmMKKwkJbWFwIGJ1ZmZlciBpcyBkZWFkIG5vdworCQl1c2Ugdm1hbGxvYygpIGFuZCBmcmllbmRzIGZvciBoYXNoIG1hcAorCQlSZXdvcmtpbmcgb2YgaGFzaF9tYXAgc3R1ZmYgaW50byBhYmIncyBsaW5rZWQKKwkJaGFzaCBtYXAgc3RydWN0dXJlCisKKwkqIG9wX3VzZXIuaDogbmV3IGZpbGUgcmVwcmVzZW50aW5nIHNoYXJlZCBzdHJ1Y3RzIGV0Yy4KKwkJYmV0d2VlbiBkYWVtb24gYW5kIGtlcm5lbCBtb2R1bGUKKwkJUmV3b3JrZWQgT1BfIGZsYWdzIGluIGNvdW50LgorCQlSZXdvcmtlZCBoYXNoIG1hcCBzdHJ1Y3R1cmUKKworCSogb3Byb2ZpbGUuYzogZ2V0IGFsb25nIHdpdGggdGhlIG5ldyBVUCBBUElDIHN0dWZmIGluIDIuNC4wYWM5CisJCXJlbW92ZSBleHRyYW5lb3VzIGxvY2tfa2VybmVsKCkKKwkJZGVmYXVsdCBidWZmZXIgc2l6ZSBhZGRlZAorCQltYXAgYnVmZmVyIGRpZWQKKwkJVXNlIHVwX2FuZF9leGl0KCkgaW4ga2VybmVsIHRocmVhZCB0byBmaXggem9tYmllcyA6UAorCQlTZXQgZGlldGhyZWFkZGllID0gMCBpbiBzdGFydF90aHJlYWQoKQorCQlvcHJvZl9wdXRfbWFwcGluZygpIGFkZGVkCisJCXdlIHdlcmVuJ3QgdHVybmluZyBPRkYga2VybmVsL3VzZXIgY291bnRpbmcgd2hlbiBhc2tlZCB0bworCisJKiBvcHJvZmlsZS5oOiBtb3ZlIHNoYXJlZCBzdHVmZiB0byBvcF91c2VyLmgKKwkJaW5jcmVhc2UgdGhlIHdhdGVybWFyayB0byBhIG11Y2ggc2FmZXIgNzY4CisKKwkqIGRhZS9NYWtlZmlsZS5pbjogZGVwZW5kZW5jaWVzIG9uIG9wX3VzZXIuaCBhbmQgdmVyc2lvbi5oIAorCisJKiBkYWUvb3Bfc3RhcnQ6IGhpZGUgY29uZnVzaW5nIG91dHB1dCBvZiBvcF9zdG9wCisJCS0tdmVyYm9zZSBvcHRpb24KKwkJbWFwIGJ1ZmZlciBkaWVkCisKKwkqIGRhZS9vcGRfcHJvYy5jOiAtLXZlcmJvc2Ugb3B0aW9uCisJCWRvbid0IGluc2lzdCBvbiBuZXcgc2FtcGxlIGZpbGVzCisJCVJld29yayBtYXBwaW5nIGNvZGUKKwkJQmUgYSBsaXR0bGUgbW9yZSBmb3JnaXZpbmcgd2l0aCB1bnN0YXR0YWJsZSBpbWFnZXMgCisKKwkqIGRhZS9vcGRfdXRpbC5oOgorCSogZGFlL29wZF91dGlsLmM6IGFkZCBmYXRhbCBmbGFnIHRvIG9wZF9nZXRfZnNpemUoKS4KKworCSogZGFlL29wcm9maWxlZC5oOiAtLXZlcmJvc2Ugb3B0aW9uCisJCW1vdmUgY29tbW9uIGNvZGUgdG8gb3BfdXNlci5oCisKKwkqIGRhZS9vcHJvZmlsZWQuYzogYWRkIC0tdmVyYm9zZSBvcHRpb24gKHZlcnkgdmVyYm9zZSAhKQorCQltYXAgYnVmZmVyIGRpZWQKKwkJQWRkIGNvZGUgZm9yIHVucGFja2luZyBtYXBwaW5nIG5vdGlmaWNhdGlvbnMsIHJld29yaworCQltYXBwaW5nIHJlY29nbml0aW9uCisKKwkqIGRvYy9ndWlkZS5odG1sOgorCSogZG9jL2d1aWRlLmx5eDogc29tZSBzbWFsbCB1cGRhdGVzCisKKwkqIHBwL29wcm9mcHAuYzogZml4IHNlZ2ZhdWx0IG9uIGZhaWx1cmUgdG8gb3BlbiBiaW5hcnkuCisJCWFkZCAtLXZlcmJvc2Ugb3B0aW9uCisKKwkqIHBwL29wcm9mcHAuaDogYWRkIC0tdmVyYm9zZSBvcHRpb24KKworMjAwMC0wMS0xMiAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogb3Byb2ZpbGUuYzogdXNlIHN0YW5kYXJkIGtlcm5lbCBuYW1lcyBmb3IgTVNScy4KKwkJRG9uJ3QgcmUtZG8gZml4bWFwIGlmIFVQIG9vcHNlciBwYXRjaCBpcyBpbnN0YWxsZWQuCisJCUFsbG93IFVQIG9vcHNlciB0byB3b3JrIGlmIHBhdGNoZXMgZW5hYmxlZCwgZGlzYWJsZQorCQlvdGhlcndpc2UKKworCSogb3Byb2ZpbGUuaDogdXNlIHN0YW5kYXJkIGtlcm5lbCBuYW1lcyBmb3IgTVNScy4KKworCSogb3Byb2ZpbGVfay5jOiBvbmx5IGluY2x1ZGUgZml4bWFwIGNvZGUgaWYgbmVjZXNzYXJ5CisKKwkqIGNvbmZpZ3VyZS5pbjogYnVtcCBtaW5vciB2ZXJzaW9uCisKKzIwMDAtMTItMTUgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIGNvbmZpZ3VyZS5pbjogZGVmYXVsdCB0byAvbGliL21vZHVsZXMvYHVuYW1lIC1yYC9idWlsZAorCQlhcyBrZXJuZWwgc291cmNlIGRpcmVjdG9yeQorCisJKiBkb2MvZ3VpZGUubHl4OgorCSogZG9jL2d1aWRlLmh0bWw6IHVwZGF0ZSBkb2N1bWVudGF0aW9uCisKKzIwMDAtMTItMTMgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIGNvbmZpZ3VyZS5pbjogYnVtcCBtaW5vciB2ZXJzaW9uCisKKwkqIG9wcm9maWxlLmM6IGFkZGVkIEtFUk5fPHdoYXRldmVyPiB3aGVyZSBuZWVkZWQsCisJCWV4Y2x1ZGUgdGhlIFBlbnRpdW0gSVYJCisKKwkqIHBwL29wcm9mcHAuYzogYWxsb3cgIm9wcm9mcHAgLWwgL2Jpbi9tdiIgYW5kIGZyaWVuZHMsCisJCXNvbWUgbWlub3IgZml4ZXMKKworMjAwMC0xMi0xMiAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogTWFrZWZpbGUuaW46CisJKiBjb25maWd1cmUuaW46IGFwcHJveGltYXRlIHdvcmtpbmcgbW9kdmVyc2lvbnMKKwkJYSBsaXR0bGUgbW9yZQorCisJKiBvcF9ldmVudHMuYzogb3BfaGVscCBJTlNUX1JFVElSRUQgd2lsbCBwcmludCBvdXQKKwkJdGhlIHZhbHVlIG5vdworCisJKiBvcF9pb2N0bC5oOgorCSogb3Byb2ZpbGUuYzoKKwkqIG9wcm9maWxlLmg6CisJKiBvcHJvZmlsZV9rLmM6CisJKiBkYWUvTWFrZWZpbGUuaW46CisJKiBkYWUvb3Bfc3RhcnQ6CisJKiBkYWUvb3Bfc3RvcDoKKwkqIGRhZS9vcGRfcHJvYy5jOgorCSogZGFlL29wcm9mY3RsLmM6CisJKiBkYWUvb3Byb2ZjdGwuaDoKKwkqIGRhZS9vcHJvZmlsZWQuaDogaW9jdGwoKSBkaWRuJ3QgbGFzdCBsb25nLiBSZXBsYWNlZCB3aXRoCisJCXN5c2N0bHMuIFRoaXMgaGFzIGhhZCBhIGtub2NrLW9uIGVmZmVjdCBvZiBtb3ZpbmcgdGhlCisJCXN0YXJ0L3N0b3AgbWVjaGFuaXNtIGludG8gdGhlIGRyaXZlciBvcGVuL2Nsb3NlIHJvdXRpbmVzCisJIAorCSogZGFlL29wcm9maWxlZC5jOiBtdXN0IG9wZW4gZGV2aWNlcyBpbiAicmV2ZXJzZSIgb3JkZXIgbm93CisJIAorCSogb3Byb2ZpbGVfay5jOiBmaXggWDg2X0ZFQVRVUkVfUEdFIHRlc3RpbmcKKwkgCisJKiBvcHJvZmlsZS5jOiB1c2UgZGFlbW9uaXplKCkKKwkKKwkqIHBwL29wcm9mcHAuYzogZml4IHdvcmtpbmcgb24gY29uc3RhbnQgYXJndgorCisyMDAwLTExLTA0ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgorCisJKiBvcHJvZmlsZS5jOiB3aGF0IGlmIHNpZ25hbCBoYXBwZW5zIGxhdGVyID8KKwkqIGRhZS9vcGRfdXRpbC5jOiBjbGFyaWZ5IG9wZF9yZWFkX2RldmljZSgpIEFQSQorCisyMDAwLTExLTA0ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgorCisJKiBDaGFuZ2VMb2c6IHN0YXJ0ZWQgQ2hhbmdlTG9nIChjdWUgZ2Mga29hbikKKwkqIG9wX2lvY3RsLmg6IGFkZGVkIEZJWE1FIGNvbW1lbnQKKwkqIG9wcm9maWxlLmM6IHNsaWdodCBjbGVhbnVwIAorCSogb3Byb2ZpbGUuaDogY2xlYW51cHMsIHVzZSB1MTYgZm9yIGRhdGEtPmN0cnMsCisJCWRhdGEtPm5leHQKKwkKKwkqIHBwL29wcm9mcHAuYzogYWRkZWQgY29tbWVudHMKKwkqIHBwL29wcm9mcHAuaDogZml4ZWQgI2RlZmluZXMKZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L0NoYW5nZUxvZy0yMDAyIGIvb3Byb2ZpbGUtMC45LjcvQ2hhbmdlTG9nLTIwMDIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWRiMjBlYQotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L0NoYW5nZUxvZy0yMDAyCkBAIC0wLDAgKzEsNDQxNiBAQAorMjAwMi0xMi0yMSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBNYWtlZmlsZS5hbTogbGlzdCBtb2R1bGUgZmlsZXMgZXhwbGljaXRseSwgbmVlZGVkCisJICBmb3IgbWFrZSBkaXN0IGZyb20gc2VwYXJhdGUgb2JqZGlyCisKKwkqIGNvbmZpZ3VyZS5pbjogbWFrZSBib3RoIHg4Ni8gYW5kIGlhNjQvIGNoYW5nZWxvZ3MKKworMjAwMi0xMi0yMSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBtb2R1bGUvTWFrZWZpbGUuYW06CisJKiBjb25maWd1cmUuaW46IHJlbW92ZSB0aGUgbG4gLXMgYXJjaCBpbiBmYXZvdXIgb2YKKwkgIHVzaW5nIC1JIGFuZCBBQ19TVUJTVAorCisJKiBtb2R1bGUvaWE2NC9hcmNoLmg6CisJKiBtb2R1bGUveDg2L2FyY2guaDogcmVuYW1lIHRvIG9wX2FyY2guaAorCisJKiB1dGlscy9NYWtlZmlsZS5hbTogZml4IG1ha2UgdW5pbnN0YWxsCisKKzIwMDItMTItMjEgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogdXRpbHMvTWFrZWZpbGUuYW06IGZpeCBiYWNrLWNvbXBhdCBzY3JpcHRzIGluc3RhbGwKKwkgIGZvciAyLjUga2VybmVsCisKKzIwMDItMTItMTkgIFdpbGwgQ29oZW4gIDx3Y29oZW5AcmVkaGF0LmNvbT4KKworCSogdXRpbHMvb3Bjb250cm9sOiBSZXZpc2Uga2VybmVsIHJhbmdlIGNvbXB1dGF0aW9uLgorCQorMjAwMi0xMi0xOSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogcHAvb3BfdGltZS5jcHA6IG1pbm9yIGZvcm1hdGluZyBmaXgKKwkqIHBwL29wcm9mcHAuY3BwOiBmaXggIzY1NjEyMyBjb3JuZXIgY2FzZSB3aXRoIC0tc2VwYXJhdGUtc2FtcGxlCisKKzIwMDItMTItMTcgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogY29uZmlndXJlLmluOiByZW1vdmUgb3Byb2ZfcmVwb3J0IC0gYnJlYWtzIG1ha2UgZGlzdAorCisyMDAyLTEyLTE3ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBsaWJkYi8qLmMgKi5oOgorCSogbGlidXRpbC9vcF9maWxlaW8uYzoKKwkqIGRhZS9vcGRfcHJvYy5jOiBkb3h5Z2VuIGNvbW1lbnQgZml4CisKKzIwMDItMTItMTYgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIG1vZHVsZS9pYTY0L29wX3N5c2NhbGxzLmM6CisJKiBtb2R1bGUveDg2L2hhbW1lcl9vcF9zeXNjYWxscy5jOgorCSogbW9kdWxlL3g4Ni9vcF9zeXNjYWxscy5jOiB1MTYgcGlkIHRvIHUzMiwgdGVzdGVkL2NvbXBpbGVkIG9ubHkgd2l0aAorCSAgMzIgYml0cyB4ODYKKworMjAwMi0xMi0xNSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogbGlidXRpbCsrL3N0cmluZ19tYW5pcC5jcHA6IG1pbm9yIGZpeAorCSogcHAvZGVyaXZlX2ZpbGVzLmNwcDogY29tbWVudAorCisyMDAyLTEyLTE0ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBwcC9mb3JtYXRfb3V0cHV0LmNwcDoKKwkqIHBwL2Zvcm1hdF9vdXRwdXQuaDoKKwkqIHBwL291dHN5bWJmbGFnLmg6CisJKiBwcC9vcHBfc3ltYm9sLmg6IGFkZCBhbiBhcHBfbmFtZSBmaWVsZCBpbiBmaWxlX2xvY2F0aW9uIGFuZAorCSAgZm9ybWF0ZXIgb3B0aW9ucyBmb3IgdGhpcyBmaWVsZC4KKworCSogcHAvcHJvZmlsZV9jb250YWluZXIuY3BwOgorCSogcHAvcHJvZmlsZV9jb250YWluZXIuaDogYWRkX3NhbXBsZXMoKSBhZGQgYXBwX25hbWUgcGFyYW1ldGVyCisKKwkqIHBwL29wcm9mcHAuY3BwOgorCSogcHAvb3BfdG9fc291cmNlLmNwcDoKKwkqIHBwL29wX3RpbWUuY3BwOgorCSogcHAvb3BfdGltZV9vcHRpb25zLmNwcDoKKwkqIHBwL29wX3RpbWVfb3B0aW9ucy5oOiBob25vciBhcHBfbmFtZSBwYXJhbWV0ZXIuIE5vIHVzZXIgdmlzaWJsZQorCSAgY2hhbmdlIGV4Y2VwdCBmb3Igb3BfdGltZSAtbCB3aGVuIHByb2ZpbGluZyB3aXRoIC0tc2VwYXJhdGUtc2FtcGxlcworCisJKiBkb2Mvb3Byb2ZpbGUuMS5pbjoKKwkqIGRvYy9vcHJvZmlsZS54bWw6IHVwZGF0ZSBkb2MKKworMjAwMi0xMi0xMyAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBkb2Mvb3Byb2ZpbGUueG1sOiBsb3RzIG9mIGZpeGVzLiBSZW1vdmUgc3lzY3RsIGRvY3VtZW50YXRpb24KKwkgIGFzIGl0cyByZWFsbHkgYW4gaW50ZXJuYWwgZmVhdHVyZSBhbmQgd2FzIGNsdXR0ZXJpbmcgdXAKKwkgIHRoZSB1c2VyIG1hbnVhbC4KKyAKKzIwMDItMTItMTMgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogZG9jL29wcm9maWxlLnhtbDogc29tZSBjbGFyaWZpY2F0aW9ucyBvbiB0aW1lciBpbnRlcnJ1cHQgCisgCisyMDAyLTEyLTEyICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIG9wY29udHJvbDogc2V0IG9uZV9lbmFibGVkIGlmIHRpbWVyIGludGVycnVwdC4gTm8KKwkgIGJlaGF2aW91ciBjaGFuZ2UsIGJ1dCAic2FmZXIiCisgCisyMDAyLTEyLTExICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIHBwL2Rlcml2ZV9maWxlcy5oOgorCSogcHAvb3BfdGltZS5jcHA6CisJKiBwcC9vcF90aW1lX29wdGlvbnMuY3BwOgorCSogcHAvb3BfdG9fc291cmNlLmNwcDoKKwkqIHBwL29wcF9zeW1ib2wuaDoKKwkqIHBwL3Byb2ZpbGUuaDoKKwkqIHBwL3Byb2ZpbGVfY29udGFpbmVyLmg6CisJKiB1dGlscy9NYWtlZmlsZS5hbTogc21hbGwgcGVkYW50cmllcworIAorMjAwMi0xMi0xMCAgV2lsbCBDb2hlbiAgPHdjb2hlbkByZWRoYXQuY29tPgorCisJKiB1dGlscy9vcF9kdW1wXzI1OiAKKwkqIHV0aWxzL29wY29udHJvbCAoZG9fZHVtcCk6IENvcnJlY3QgVE1QRklMRS4KKworMjAwMi0xMi0xMCAgV2lsbCBDb2hlbiAgPHdjb2hlbkByZWRoYXQuY29tPgorCisJKiBkYWVtb24vb3BkX2ltYWdlLmMgKGNvbXBsZXRlX2R1bXApOiBOZXcuCisJKiBsaWJvcC9vcF9jb25maWcuaCAoT1BfRFVNUF9TVEFUVVMpOiBOZXcuCisJKiB1dGlscy9vcF9kdW1wXzI1OiBOZXcgZmlsZS4KKwkqIHV0aWxzL01ha2VmaWxlLmFtOiBBZGQgb3BfZHVtcF8yNS4KKwkqIHV0aWxzL29wY29udHJvbCAoZG9fZHVtcCk6IFJldmlzZSBob3cgZHVtcCBwZXJmb3JtZWQuCisKKzIwMDItMTItMTAgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIHBwL3Byb2ZpbGUuY3BwIDogb3Byb2ZwcCByZXBvcnRlZCBpbmNvcnJlY3RseSBjb3VudGVyIHNldHRpbmcgd2hlbgorCSAgdXNpbmcgbXVsdGlwbGUgY291bnRlci4gRml4ICM2NTExODMKKworMjAwMi0xMi0xMCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogcHAvb3BfdGltZS5jcHA6IGhvbm9yIC0tZXhjdWRlLXN5bWJvbHMuIEZpeCAjNjUxMTY1CisKKzIwMDItMTItMDkgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGxpYnV0aWwrKy9vcF9iZmQuY3BwOiBzdHVwaWQgc2VnZmF1bHQgd2hlbiBmaWx0ZXJpbmcgaW5jbHVkZWQgc3ltYm9scworCisyMDAyLTEyLTA5ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBsaWJ1dGlsKysvb3BfYmZkLmg6CisJKiBsaWJ1dGlsKysvb3BfYmZkLmNwcDogcmVwbGFjZSBhIDAoTrIpIGJ5IGEgMChOKSBiZWhhdmlvcgorCisJKiBwcC9vdXRwdXRfZm9ybWF0LmNwcDogYWN0dWFsaXplIGNvbW1lbnQKKworMjAwMi0xMi0wOCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogcHAvcHJvZmlsZS5jcHA6IHVzZSBzY29wZWRfcHRyPGNvdW50ZXJfcHJvZmlsZV90PgorCisJKiBsaWJvcHQrKy9wb3B0X29wdGlvbnMuaDoKKwkqIHBwL2NvdW50ZXJfcHJvZmlsZS5jcHA6IG1pbm9yIGNsZWFudXAKKworMjAwMi0xMi0wOCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogcHAvY291bnRlcl9wcm9maWxlLmNwcDoKKwkqIHBwL2NvdW50ZXJfcHJvZmlsZS5oOiB1c2Ugc2NvcGVkX3B0cgorCisyMDAyLTEyLTA4ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBwcC9jb3VudGVyX3Byb2ZpbGUuaDoKKwkqIHBwL2NvdW50ZXJfcHJvZmlsZS5jcHA6IHJlbGF4IHNhbXBsZXNfZGJfdCBzb29uZXIKKworMjAwMi0xMi0wOCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogcHAvb3BwX3NhbXBsZXNfZmlsZXMuY3BwOgorCSogcHAvb3BwX3NhbXBsZXNfZmlsZXMuaDoKKwkqIHBwL3NhbXBsZXNfY29udGFpbmVyLmNwcDoKKwkqIHBwL3NhbXBsZXNfY29udGFpbmVyLmg6CisJKiBwcC9zYW1wbGVzX2ZpbGUuY3BwOgorCSogcHAvc2FtcGxlc19maWxlLmg6IHJlbmFtZSBjbGFzcyBzYW1wbGVzX2ZpbGVfdCB0byBjb3VudGVyX3Byb2ZpbGVfdAorCSAgcmVuYW1lIGNsYXNzIG9wcF9zYW1wbGVzX2ZpbGVzIHRvIHByb2ZpbGVfdAorCSAgcmVuYW1lIGNsYXNzIHNhbXBsZXNfY29udGFpbmVyX3QgdG8gcHJvZmlsZV9jb250YWluZXJfdAorCSAgcmVuYW1lIGZpbGUgdXNpbmcgdGhlIG5ldyBjbGFzcyBuYW1lIGFzIGZpbGVuYW1lIHcvbyBfdCBzdWZmaXgKKworCSogcHAvZm9ybWF0X291dHB1dC5jcHA6CisJKiBwcC9mb3JtYXRfb3V0cHV0Lmg6CisJKiBwcC9vcF9tZXJnZS5jcHA6CisJKiBwcC9vcF90aW1lLmNwcDoKKwkqIHBwL29wX3RvX3NvdXJjZS5jcHA6CisJKiBwcC9vcHJvZnBwLmNwcDoKKwkqIHBwL3N5bWJvbF9jb250YWluZXJfaW1wLmNwcDoKKwkqIHBwL3N5bWJvbF9jb250YWluZXJfaW1wLmg6CisJKiBwcC9NYWtlZmlsZS5hbTogcmVmbGVjdCBhYm92ZSBjbGFzcy9maWxlIG5hbWUgY2hhbmdlCisKKzIwMDItMTItMDYgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGxpYmRiL2RiX21hbmFnZS5jOgorCSogbGliZGIvZGJfaGFzaC5oOiBkYl9pbml0KCkgbmV3IHRvIHByb3Blcmx5IGluaXRpYWxpemUgYSBzYW1wbGVzX2RiX3QKKworCSogZGFlL29wZF9pbWFnZS5jOgorCSogZGFlbW9uL29wZF9pbWdlLmM6IGVhcmxpZXIgaW5pdCBhIHNhbXBsZXNfZGJfdCBvYmplY3QgdXNpbmcKKwkgIGRiX2luaXQoKSByYXRoZXIgYSBtZW1zZXQuIFRoaXMgZml4IGEgcG90ZW50aWFsIGJvZ29zaXR5IGNhdXNlIHdlCisJICBjbG9zZWQgYSBsb3Qgb2YgdGltZSBmaWxlIGRlc2NyaXB0b3IgMAorCisyMDAyLTEyLTA2ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBkYWUvb3BkX2ltYWdlLmM6CisJKiBkYWUvb3BkX2ltYWdlLmg6CisJKiBkYWUvb3BkX2tlcm5lbC5jOiB1c2UgaGFzaCB0YWJsZSBlbnRyeSAwIGZvciBrZXJuZWwgYW5kIG1vZHVsZSBpbWFnZQorCisyMDAyLTEyLTA0ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIHBwL29wcF9zeW1ib2wuaDoKKwkqIHBwL29wcF9zeW1ib2wuY3BwOgorCSogcHAvZm9ybWF0X291dHB1dC5oOgorCSogcHAvZm9ybWF0X291dHB1dC5jcHA6CisJKiBvdGhlcnMgZnJvbSBhYm92ZTogY3JlYXRlIGZvcm1hdF9vdXRwdXQgbmFtZXNwYWNlLCBzb21lCisJICBjbGVhbiB1cAorIAorMjAwMi0xMi0wNCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogZGFlbW9uL29wZF9pbWFnZS5jOiByZXZlcnQgbGFzdCBjaGFuZ2UsIGl0IGJyZWFrIGRhZW1vbi4uLgorCQorMjAwMi0xMi0wNCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogZGFlbW9uL29wZF9pbWFnZS5jOiByZS1lbmFibGUgb3BkX2NoZWNrX2ltYWdlX210aW1lKCkgaXQncyBub3QKKwkgIHBlcmZlY3QgYnV0IGJldHRlciB0aGFuIG5vdGhpbmcKKworCSogbGlidXRpbCsrL2N2ZXJiLmNwcDogY29tbWVudCBmaXgKKworMjAwMi0xMi0wNCAgV2lsbCBDb2hlbiAgPHdjb2hlbkByZWRoYXQuY29tPgorCisJKiB1dGlscy9vcGNvbnRyb2w6IFJldmlzZWQgY2hlY2tpbmcgdG8gZGV0ZXJtaW5lIGtlcm5lbAorCSAgaW50ZXJmYWNlLgorCisKKzIwMDItMTItMDQgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGxpYmRiL2RiX3Rlc3QuYzogbWVhc3VyZSBzeXN0ZW0gKyB1c2VyIHRpbWUKKworCSogZGFlL29wcm9maWxlZC5jOiBiZXR0ZXIgZXJyb3IgbWVzc2FnZQorCSogZGFlbW9uL29wcm9maWxlZC5jOiB3cml0ZV9hYmkoKSBpcyBzdGF0aWMKKworMjAwMi0xMi0wMyAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogbGliZGIvZGJfc3RhdC5jOgorCSogbGliZGIvZGJfZGVidWcuYzogQWxleCB3aGlzcCBtZSB0aGFuIGEgZmV3IGNvZGUgd2FzIG5vdCA2NCBiaXRzCisJICBzaXplX3Qgc2FmZS4KKworMjAwMi0xMi0wMyAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBkb2Mvb3Byb2ZpbGUueG1sOgorCSogZG9jL29wcm9maWxlLjEuaW46CisJKiBkb2MvTWFrZWZpbGUuYW06IHJlbW92ZSByZWZlcmVuY2VzIHRvIGRlcHJlY2F0ZWQgc3R1ZmYKKyAKKzIwMDItMTItMDMgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogdXRpbHMvb3Bjb250cm9sOiBhZGQgLS12ZXJzaW9uCisgCisyMDAyLTEyLTAzICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIHV0aWxzL29wX3N0YXJ0OgorCSogdXRpbHMvb3Bfc3RhcnRfMjU6CisJKiB1dGlscy9vcF9zdG9wXzI1OgorCSogdXRpbHMvb3Bfc3RvcDogcHJpbnQgZGVwcmVjYXRpb24gbm90aWNlCisgCisyMDAyLTEyLTAzICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIHV0aWxzL29wX3Nlc3Npb24uYzoKKwkqIHV0aWxzL29wX2R1bXA6IHByaW50IGRlcHJlY2F0aW9uIG5vdGljZQorIAorMjAwMi0xMi0wMyAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiB1dGlscy9vcGNvbnRyb2w6IGRvIG5vdCBzaHV0ZG93biBvbiAtLXJlc2V0LiBTZW5kCisJICBzaWduYWwgb24gLS1yZXNldC8tLXNhdmUgbGlrZSBvcF9zZXNzaW9uLiBUcnkgdG8gZHVtcAorCSAgbGlrZSBvcF9zZXNzaW9uIHRvIGhhY2sgcmFjZSAiZml4IgorIAorMjAwMi0xMi0wMyAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiB1dGlscy9vcGNvbnRyb2w6IGNvbXBsYWluIG9uIG9wY29udHJvbCAtLXNhdmUgCisgCisyMDAyLTEyLTAzICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBkYWVtb24vb3BkX2tlcm5lbC5jOgorCSogZGFlbW9uL29wZF9rZXJuZWwuaDogbWlub3IgY2xlYW51cAorCisJKiBsaWJhYmkvYWJpLmNwcDoKKwkqIGxpYmFiaS9hYmlfdGVzdC5jcHA6CisJKiBsaWJhYmkvb3BfaW1wb3J0LmNwcDogZml4IGJhZCBpbmNsdWRlIGZpbGVuYW1lLgorCisyMDAyLTEyLTAzICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBsaWJkYi8uY3ZzaWdub3JlOgorCSogbGliZGIvTWFrZWZpbGUuYW06CisJKiBsaWJkYi8qLmMgLS0+IGRiLWhhc2gtbmFtZS5jIHRvIGRiX25hbWUuYworCisJKiBkYWUvb3BkX2ltYWdlLmg6CisJKiBkYWVtb24vb3BkX2ltYWdlLmg6CisJKiBwcC9zYW1wbGVzX2ZpbGUuaDogaW5jbHVkZSBkYl9oYXNoLmgKKworMjAwMi0xMi0wMyAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogZ3VpL29wcm9mX3N0YXJ0X2NvbmZpZy5jcHA6IGFsbG93IGRlZmF1bHQgdmFsdWUgY2hhbmdlIHcvbworCSAgYnJlYWtpbmcgYWN0dWFsIHVzZXIuCisKKzIwMDItMTItMDMgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIFRPRE86IHVwZGF0ZQorCisJKiBkYWUvb3BkX2ltYWdlLmg6CisJKiBkYWUvb3BkX2tlcm5lbC5jOgorCSogZGFlL29wZF9rZXJuZWwuaDoKKwkqIGRhZS9vcGRfcGFyc2VfcHJvYy5jOgorCSogZGFlL29wZF9wcm9jLmM6CisJKiBkYWUvb3BkX3Byb2MuaDoKKwkqIGRhZS9vcGRfc2FtcGxlX2ZpbGVzLmM6CisJKiBkYWUvb3Byb2ZpbGVkLmM6CisJKiBkYWVtb24vb3BkX2ltYWdlLmg6CisJKiBwcC9vcF9tZXJnZS5jcHA6CisJKiBwcC9zYW1wbGVzX2ZpbGUuaDoKKwkqIHBwL3NhbXBsZXNfZmlsZS5jcHA6CisJKiBwcC9NYWtlZmlsZS5hbToKKwkqIGxpYmFiaS9NYWtlZmlsZS5hbToKKwkqIGxpYmFiaS9hYmkuY3BwOgorCSogbGliYWJpL2FiaV90ZXN0LmNwcDoKKwkqIGxpYmFiaS9vcF9pbXBvcnQuY3BwOiB1c2UgaGFzaCB0YWJsZSBpbXBsZW1lbnRhdGlvbiBvZiBsaWJkYgorCisJKiBndWkvb3Byb2Zfc3RhcnQuY3BwOgorCSogZ3VpL29wcm9mX3N0YXJ0X2NvbmZpZy5jcHA6CisJKiBndWkvb3Byb2Zfc3RhcnRfY29uZmlnLmg6CisJKiBndWkvdWkvb3Byb2Zfc3RhcnQuYmFzZS51aToKKwkqIHV0aWxzL29wX3N0YXJ0OgorCSogZG9jL29wcm9maWxlLjEuaW46CisJKiBkb2Mvb3Byb2ZpbGUueG1sOiByZW1vdmUgbW9kdWxlIGhhc2ggdGFibGUgc2l6ZQorCisJKiBsaWJkYi8uY3ZzaWdub3JlOiB1cGRhdGUKKwkqIGxpYmRiL01ha2VmaWxlLmFtOiBidWlsZCBsaWJkYi1oYXNoLmEKKwkqIGxpYmRiL2RiLWhhc2guaDoKKwkqIGxpYmRiL2RiLWhhc2gtZGVidWcuYzoKKwkqIGxpYmRiL2RiLWhhc2gtbWFuYWdlLmM6CisJKiBsaWJkYi9kYi1oYXNoLXRlc3QuYzoKKwkqIGxpYmRiL2RiLWhhc2gtaW5zZXJ0LmM6CisJKiBsaWJkYi9kYi1oYXNoLXN0YXQuYzoKKwkqIGxpYmRiL2RiLWhhc2gtdHJhdmVsLmM6IG5ldyBmaWxlcyBpbXBsZW1lbnRpbmcgYSBncm93YWJsZSBoYXNoIHRhYmxlCisJKiBsaWJkYi9NYWtlZmlsZS5hbTogdXBkYXRlCisKKwkqIGxpYm9wL29wX2NvbmZpZ18yNC5oOiByZW1vdmUgbW9kdWxlIGhhc2ggdGFibGUuIEluY3JlYXNlCisJICBPUF9QUkVfV0FURVJNQVJLLCBPUF9ERUZBVUxUX0JVRl9TSVpFLgorCSogbGlib3Avb3BfaW50ZXJmYWNlLmg6IHN0cnVjdCBvcF9zYW1wbGUgdXBkYXRlLgorCisJKiBtb2R1bGUvb3Byb2ZpbGUuaDoKKwkqIG1vZHVsZS9vcHJvZmlsZS5jOiByZW1vdmUgaGFzaCB0YWJsZQorCisyMDAyLTEyLTAyICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGNvbmZpZ3VyZS5pbjogcmVtb3ZlIGFubm95aW5nIEFDX1JFVklTSU9OKCkKKyAKKzIwMDItMTItMDIgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogdXRpbHMvb3Bjb250cm9sOiBjb3VwbGUgb2YgbWlub3IgY2xlYW51cHMKKyAKKzIwMDItMTItMDIgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogdXRpbHMvb3Bjb250cm9sOiBmaXggLS1kZWluaXQsIGNvbXBsYWluIG9uIG1pc3NpbmcKKwkgIGFyZ3VtZW50CisgCisyMDAyLTEyLTAyICBXaWxsIENvaGVuICA8d2NvaGVuQHJlZGhhdC5jb20+CisKKwkqIGRvYy9NYWtlZmlsZS5hbTogR2VuZXJhdGUgb3Bjb250cm9sLgorCSogZG9jL29wcm9maWxlLjEuaW46IEFkZCBvcGNvbnRyb2wgaW5mb3JtYXRpb24uCisJKiBkb2Mvb3Byb2ZpbGUueG1sOiBBZGQgb3Bjb250cm9sIGluZm9ybWF0aW9uLgorCisyMDAyLTEyLTAxICBXaWxsIENvaGVuICA8d2NvaGVuQHJlZGhhdC5jb20+CisKKwkqIHV0aWxzL01ha2VmaWxlLmFtOiBBZGQgb3Bjb250cm9sLgorCSogdXRpbHMvb3Bjb250cm9sOiBOZXcuCisKKzIwMDItMTItMDEgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogdmFyaW91cyBmaWxlczogZG9uJ3QgdXNlIGRiX3RyZWUgbmFtZSBvdXRzaWRlIG9mIGxpYmRiLAorCSAgaXQncyBpbXBsZW1lbnRhdGlvbiBkZXRhaWwgZm9yIG1vc3QgY2FzZQorIAorMjAwMi0xMS0yOSAgR3JheWRvbiBIb2FyZSAgPGdyYXlkb25AcmVkaGF0LmNvbT4KKworCSogbW9kdWxlL3g4Ni9vcF9tb2RlbF9wNC5jOiBmaXggZHJvcHBlZCBvdmVyZmxvd3MuCisKKzIwMDItMTEtMjYgIEdyYXlkb24gSG9hcmUgIDxncmF5ZG9uQHJlZGhhdC5jb20+CisKKwkqIG1vZHVsZS94ODYvb3BfbW9kZWxfcDQuYzogZml4IENDQ1ItY2xlYXJpbmcgbG9naWMuCisJKiBtb2R1bGUveDg2L2NwdV90eXBlLmM6IHJlLWVuYWJsZSBQZW50aXVtIElWLgorCisyMDAyLTExLTI1ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIG1vZHVsZS94ODYvY3B1X3R5cGUuYzogZGlzYWJsZSBQZW50aXVtIElWIHRpbGwgaXQgd29ya3MKKyAKKzIwMDItMTEtMjMgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGRvYy9vcHJvZmlsZS54bWw6IHN0YXJ0IGEgRkFRLiBDbGFyaWZ5IGRlYnVnIGluZm9ybWF0aW9uIHZzCisJICBzeW1ib2wgaW5mb3JtYXRpb24uIEV4cGxhaW4gd2h5IHdlIGRvbid0IHVzZSBkeW5hbWljIHN5bWJvbAorCisyMDAyLTExLTIwICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGRhZW1vbi9vcHJvZmlsZWQuYzoKKwkqIHV0aWxzL29wX3N0YXJ0XzI1OiBrZXJuZWxfb25seSBpcyBhIG5vLW9wIG9uIDIuNSwgbm8gcG9pbnQKKwkgIGluIGl0IGV4aXN0aW5nCisgCisyMDAyLTExLTE5ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBkYWVtb24vb3Byb2ZpbGVkLmM6IC9kZXYvb3Byb2ZpbGUva2VybmVsX29ubHkgZG9lc24ndCBleGlzdHMKKwkgIGluIHRpbWVyIGludCBtb2RlIChzZWNvbmQgcGFzcyB0byBmaXggIzYzNzgwNCAuLi4pCisKKzIwMDItMTEtMTcgIEdyYXlkb24gSG9hcmUgIDxncmF5ZG9uQHJlZGhhdC5jb20+CisKKwkqIG1vZHVsZS94ODYvb3BfYXBpYy5oOgorCSogbW9kdWxlL3g4Ni9vcF9hcGljLmM6IHJldmVydCwgdXNlIGNvcHkgb2Yga2VybmVsIGNvZGUuCisKKzIwMDItMTEtMTYgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGRhZS9vcGRfa2VybmVsLmM6CisJKiBkYWUvb3BkX21hcHBpbmcuYzoKKwkqIGRhZS9vcGRfcHJvYy5jOgorCSogZGFlbW9uL29wZF9pbWFnZS5jOgorCSogZGFlbW9uL29wZF9rZXJuZWwuYzoKKwkqIGxpYm9wKysvb3BfbWFuZ2xpbmcuaDoKKwkqIGxpYnV0aWwrKy9jdmVyYi5oOgorCSogcHAvb3BwX3NhbXBsZXNfZmlsZXMuY3BwOgorCSogcHAvc2FtcGxlc19maWxlLmNwcDogZG94eWdlbiBmaXgKKwkqIGRvYy9zcmNkb2MvRG94eWZpbGU6IGJ1bXAgdG8gMC41IGN2cworCisyMDAyLTExLTE0ICBXaWxsIENvaGVuICA8d2NvaGVuQHJlZGhhdC5jb20+CisKKwkqIGd1aS9NYWtlZmlsZS5hbTogVXNlICQoYmluZGlyKS4KKwkqIG9wcm9mX3JlcG9ydC9NYWtlZmlsZS5hbTogVXNlICQoYmluZGlyKS4KKworMjAwMi0xMS0xNSAgRGF2ZSBKb25lcyA8ZGF2ZWpAc3VzZS5kZT4KKworCSogbW9kdWxlL3g4Ni9jcHV0eXBlLmM6IE1ha2UgdGhlIEFNRCBjYXNlIGEgYml0IHNpbXBsZXIuCisKKzIwMDItMTEtMTQgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogZGFlL01ha2VmaWxlLmFtOgorCSogZGFlbW9uL01ha2VmaWxlLmFtOiBwcm9wZXIgZml4IGZvciBjKysgbGluaworCSAgYXMgc3VnZ2VzdGVkIGJ5IEFsZXhhbmRyZSBEdXJldC1MdXR6CisgCisyMDAyLTExLTE0ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBNYWtlZmlsZS5hbTogd2UgaW5zdGFsbGVkIG1vZHVsZSBpbiB0aGUgd3JvbmcgZGlyZWN0b3J5LgorCisyMDAyLTExLTE0ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBsaWJ1dGlsL29wX2ZpbGUuYzogb3Bfc2ltcGxpZnlfcGF0aF9uYW1lKCk6IHN0cmlwIGxlYWRpbmcgJy8nCisJKiBkYWVtb24vb3Byb2ZpbGVkLmM6CisJKiBkYWUvb3Byb2ZpbGVkLmM6IGZpeCBpbmNvcnJlY3Qgc3BlY2lmaWNhdGlvbiBvZiB2bWxpbnV4IGZpbGUKKwkgIHRocm91Z2ggLS12bWxpbnV4PS9mb28vL2JhciBmaXhpbmcgIzYzNzgwNQorCisyMDAyLTExLTE0ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiB1dGlscy9vcF9zdGFydF8yNTogL2Rldi9vcHJvZmlsZS9rZXJuZWxfb25seSBkb2Vzbid0IGV4aXN0cworCSAgaW4gdGltZXIgaW50IG1vZGUuIGZpeCAjNjM3ODA0CisKKzIwMDItMTEtMTQgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogZGFlLyo6CisJKiBkYWVtb24vKjoKKwkqIGxpYnV0aWwrKy9vcF9iZmQuaDoKKwkqIHBwL3NhbXBsZXNfY29udGFpbmVyLmNwcDoKKwkqIHBwL3NhbXBsZXNfY29udGFpbmVyLmg6IGRveHlnZW4gYW5hbGl0eQorIAorMjAwMi0xMS0xNCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBsaWJvcHQrKy9wb3B0X29wdGlvbnMuaDoKKwkqIGxpYm9wdCsrL3BvcHRfb3B0aW9ucy5jcHA6IHBsYWNlIGluIHBvcHQKKwluYW1lc3BhY2UgdG8gYXZvaWQgY2xhc2ggd2l0aCBnZXRvcHQuaAorCisJKiBsaWJhYmkvYWJpX3Rlc3QuY3BwOgorCSogbGliYWJpL29wX2ltcG9ydC5jcHA6CisJKiBwcC9vcF9tZXJnZS5jcHA6CisJKiBwcC9vcF90aW1lX29wdGlvbnMuY3BwOgorCSogcHAvb3BfdG9fc291cmNlX29wdGlvbnMuY3BwOgorCSogcHAvb3Byb2ZwcF9vcHRpb25zLmNwcDoKKwkqIHBwL3Nlc3Npb24uY3BwOiBmaXggZm9yIGFib3ZlCisgCisJKiBsaWJhYmkvYWJpLmNwcDoKKwkqIGxpYmFiaS9hYmkuaDogZysrIDMuMiBmaXhlcworCisJKiBsaWJhYmkvb3BfaW1wb3J0LmNwcDogdW5pbmxpbmUgZXh0cmFjdAorCisJKiBkYWUvTWFrZWZpbGUuYW06CisJKiBkYWVtb24vTWFrZWZpbGUuYW06IGZpeCBjKysgbGluayBoYWNrIGZvciAtV2Vycm9yCisgCisyMDAyLTExLTEzICBHcmF5ZG9uIEhvYXJlICA8Z3JheWRvbkByZWRoYXQuY29tPgorCisJKCB0aGlzIGNoYW5nZXNldCBpcyBtb3N0bHkgRGF2ZSBKb25lcycgd29yayApCisKKwkqIFJFQURNRToKKwkqIFRPRE86CisJKiBjb25maWd1cmUuaW46CisJKiBkb2Mvb3Byb2ZpbGUueG1sOgorCSogbGlib3Avb3BfY3B1X3R5cGUuYzoKKwkqIGxpYm9wL29wX2NwdV90eXBlLmg6CisJKiBsaWJvcC9vcF9ldmVudHMuYzoKKwkqIHV0aWxzL29wX2hlbHAuYzoKKwkqIG1vZHVsZS9jb21wYXQuaDoKKwkqIG1vZHVsZS9jb21wYXQyNC5oOgorCSogbW9kdWxlL29wX3V0aWwuYzoKKwkqIG1vZHVsZS94ODYvTWFrZWZpbGUuaW46CisJKiBtb2R1bGUveDg2L2FwaWNfY29tcGF0Lmg6CisJKiBtb2R1bGUveDg2L2FyY2guaDoKKwkqIG1vZHVsZS94ODYvY3B1X3R5cGUuYzoKKwkqIG1vZHVsZS94ODYvb3BfZml4bWFwLmM6CisJKiBtb2R1bGUveDg2L29wX25taS5jOiBtaW5vciBhZGRpdGlvbnMgZm9yIGhhbW1lciBzdXBwb3J0LgorCisJKiBtb2R1bGUveDg2L29wX2FwaWMuYzoKKwkqIG1vZHVsZS94ODYvb3BfYXBpYy5oOiBtYWpvciBjbGVhbnVwOyBhZGQgaGFtbWVyIHN1cHBvcnQuCisJCisJKiBtb2R1bGUveDg2L2hhbW1lcl9lbnRyeS5TOgorCSogbW9kdWxlL3g4Ni9oYW1tZXJfaWEzMmVudHJ5LlM6CisJKiBtb2R1bGUveDg2L2hhbW1lcl9vcF9zeXNjYWxscy5jOgorCSogbW9kdWxlL3g4Ni9oYW1tZXJfb3Byb2ZpbGVfbm1pLlM6IG5ldyBoYW1tZXIgc3VwcG9ydCBmaWxlcy4KKworMjAwMi0xMS0xNCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBjb25maWd1cmUuaW46IGhhY2sgYXJvdW5kIGNhc2Ugd2hlcmUgY2xlYW4gY2hlY2tvdXQKKwkgIHRoZW4gLi9jb25maWd1cmUgLS13aXRoLWtlcm5lbC1zdXBwb3J0CisgCisyMDAyLTExLTEyICBHcmF5ZG9uIEhvYXJlICA8Z3JheWRvbkByZWRoYXQuY29tPgorCisJKiBhdXRvZ2VuLnNoOiBzdXBwb3J0IG92ZXJyaWRpbmcgYXV0b3Rvb2wgYmluYXJ5IG5hbWVzLgorCisyMDAyLTExLTExICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBjb25maWd1cmUuaW46IGhvbm9yIC0td2l0aC1leHRyYS1saWJzCisKKzIwMDItMTEtMTEgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGNvbmZpZ3VyZS5pbjogYWRkIC1XIC1XYWxsIGFuZCBvcHRpb25uYWx5IC1XZXJyb3IgdG8gdXNlciBzcGFjZQorCSAgY29tcGlsYXRpb24KKworMjAwMi0xMS0xMSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBkYWUvTWFrZWZpbGUuYW06CisJKiBkYWVtb24vTWFrZWZpbGUuYW06IGRvbid0IGRpc3QgZHVtbXkuY3BwCisgCisyMDAyLTExLTExICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGRhZS9NYWtlZmlsZS5hbToKKwkqIGRhZW1vbi9NYWtlZmlsZS5hbTogaGFjayB0byBmaXggLS1lbmFibGUtYWJpCisgCisyMDAyLTExLTEwICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGNvbmZpZ3VyZS5pbjoKKwkqIGd1aS9NYWtlZmlsZS5hbToKKwkqIG9wcm9mX3JlcG9ydC9NYWtlZmlsZS5hbTogb25seSB1c2UgWCBsaWJzIHdoZXJlCisJICB0aGV5J3JlIGFjdHVhbGx5IHdhbnRlZAorIAorMjAwMi0xMS0xMCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBjb25maWd1cmUuaW46IG1ha2UgaW5jbHVkZWQgc3N0cmVhbSB3b3JrIGFnYWluCisgCisyMDAyLTExLTA4ICBXaWxsIENvaGVuICA8d2NvaGVuQHJlZGhhdC5jb20+CisKKwkqIGRvYy9vcHJvZmlsZS54bWw6IFVwZGF0ZSB3aXRoIElBNjQgaW5mb3JtYXRpb24uCisKKzIwMDItMTEtMTAgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogTWFrZWZpbGUuYW06IHJlbW92ZSBvcHJvZl9yZXBvcnQgZnJvbSBTVUJESVJTIHRvCisJICBhdm9pZCBzZXBhcmF0ZSBvYmpkaXIgcHJvYmxlbQorIAorMjAwMi0xMS0xMCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBtb3N0IE1ha2VmaWxlLmFtOiBkbyB0aGUgZGlzdF9zb3VyY2VzIHRyaWNrCisJICBwcm9wZXJseQorIAorMjAwMi0xMS0xMCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBNYWtlZmlsZS5hbToKKwkqIGNvbmZpZ3VyZS5pbjoKKwkqIGRhZS9NYWtlZmlsZS5hbToKKwkqIGRhZW1vbi9NYWtlZmlsZS5hbToKKwkqIHV0aWxzL01ha2VmaWxlLmFtOiBzL1dJVEhfS0VSTkVMX1NVUFBPUlQva2VybmVsX3N1cHBvcnQKKworCSogY29uZmlndXJlLmluOgorCSogZGFlL01ha2VmaWxlLmFtOgorCSogZGFlL29wcm9maWxlZC5jOgorCSogZGFlbW9uL01ha2VmaWxlLmFtOgorCSogZGFlbW9uL29wcm9maWxlZC5jOgorCSogbGliYWJpL01ha2VmaWxlLmFtOiBhcHByb3hpbWF0ZSB3b3JraW5nIC0tZW5hYmxlLWFiaSBtb3JlCisKKzIwMDItMTEtMTAgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogZGFlL29wcm9maWxlZC5jOgorCSogZGFlbW9uL29wcm9maWxlZC5jOiBhYmkgdGlkeQorIAorMjAwMi0xMS0xMCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBhdXRvZ2VuLnNoOiBiZSB2ZXJib3NlCisgCisJKiBndWkvTWFrZWZpbGUuYW06CisJKiBndWkvdWkvTWFrZWZpbGUuYW06CisJKiBvcHJvZl9yZXBvcnQvTWFrZWZpbGUuYW06CisJKiBvcHJvZl9yZXBvcnQvdWkvTWFrZWZpbGUuYW06IHJlbW92ZSBkdXBsaWNhdGUKKwkgIHNldCBNT0MvVUlDCisgCisyMDAyLTExLTEwICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIE1ha2VmaWxlLmFtOiBhZGQgY29tbWVudAorCisJKiBjb25maWd1cmUuaW46IG5vIG5lZWQgdG8gc3Vic3QgT1BST0ZJTEVfMjUKKyAKKzIwMDItMTEtMDkgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogVE9ETzogdXBkYXRlCisgCisJKiBjb25maWd1cmUuaW46CisJKiBtb3N0IE1ha2VmaWxlLmFtOiBtYWtlIHNlcGFyYXRlIG9iamRpciB3b3JrLAorCSAgZXhjZXB0IGZvciBtb2R1bGUgKGltcG9zc2libGUgSSBzdXBwb3NlKQorCisyMDAyLTExLTA5ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGF1dG9nZW4uc2g6IHVzZSAtLWZvcmVpZ24KKyAKKzIwMDItMTEtMDkgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogY29uZmlndXJlLmluOiBmaXggLS13aXRoLWtlcm5lbC1zdXBwb3J0CisgCisJKiBkb2MvLmN2c2lnbm9yZTogYWRkICouMQorCisJKiBsaWJhYmkvTWFrZWZpbGUuYW06IGRvbid0IGluc3RhbGwgYWJpX3Rlc3QKKyAKKzIwMDItMTEtMDkgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogYWxsIGN2c2lnbm9yZTogYWRkIE1ha2VmaWxlLmluCisgCisJKiBndWkvTWFrZWZpbGUuYW06IG1vdmUgRVhUUkFfRElTVCBvdXQgb2YgcXQgY2hlY2sKKworCSogZ3VpL3VpL01ha2VmaWxlLmFtOgorCSogb3Byb2ZfcmVwb3J0L3VpL01ha2VmaWxlLmFtOiBmaXggQU1fQ1BQRkxBR1MgdHlwbworIAorMjAwMi0xMS0wOSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBhbGwgYnVpbGQgZmlsZXM6IHVzZSBhdXRvbWFrZSwgd3JpdHRlbiBieSBQaGlsCisgCisyMDAyLTExLTA5ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBwcC9zYW1wbGVzX2ZpbGUuY3BwOiBjaGVjayB0aGFuIHNhbXBsZXMgZmlsZXMgdmVyc2lvbgorCSAgbWF0Y2ggZXhwZWN0ZWQgdmVyc2lvbiBmaXhpbmcgIzYzNTc1OQorCisyMDAyLTExLTA3ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGNvbmZpZ3VyZS5pbjoKKwkqIG1vZHVsZS9jb21wYXQuaDogCisJKiBtb2R1bGUvY29tcGF0MjQuaDoKKwkqIG1vZHVsZS9vcF9kbmFtZS5jOiAKKwkqIG1vZHVsZS9vcHJvZmlsZS5jOiAKKwkqIG1vZHVsZS94ODYvb3BfZml4bWFwLmM6IAorCSogbW9kdWxlL3g4Ni9vcF9ubWkuYzogcmVtb3ZlIDIuNSBzdXBwb3J0IGZyb20gb2xkCisJICBtb2R1bGUgY29kZQorIAorMjAwMi0xMS0wNiAgV2lsbCBDb2hlbiAgPHdjb2hlbkByZWRoYXQuY29tPgorCisJKiBjb25maWd1cmUuaW46IFRlc3RzIGZvciBpYTY0IGFyY2hpdGVjdHVyZS4KKwkqIGRhZS9vcGRfbWFwcGluZy5jOiBBZGRlZCBpbmNsdWRlcy4KKwkqIG9wcm9maWxlL2RhZS9vcHJvZmlsZWQuYyAob3BkX2RvX3NhbXBsZXMpOiBUeXBlY2FzdC4KKwkqIGxpYm9wL29wX2NwdV90eXBlLmMgKGNwdV9uYW1lcywgY3B1X25yX2NvdW50ZXJzKTogQWRkIElBNjQgaW5mby4KKwkqIGxpYm9wL29wX2NwdV90eXBlLmggKG9wX2NwdSk6IEFkZCBJQTY0IGVudW1zLgorCSogbGlib3Avb3BfZXZlbnRzLmM6IEFkZCBkZWZpbmVzIGZvciBJQTY0IGFuZCBJQTY0IGV2ZW50cy4KKwkqIGxpYm9wKysvb3BfcHJpbnRfZXZlbnQuY3BwOiBDaGFuZ2UgaW5jbHVkZSBvcmRlciB0byB3b3JrIG9uIElBNjQuCisJKiBtb2R1bGUvb3Byb2ZpbGUuYzogSW5jbHVkZSAiYXJjaC5oIiBmaWxlLgorCShldmljdF9vcF9lbnRyeSk6IFVzZSBJUlFfRU5BQkxFRCBtYWNyby4KKwkob3BfZG9fcHJvZmlsZSk6IFVzZSBJTlNUX1BUUiBhbmQgU1RBVFVTIG1hY3Jvcy4KKwkob3Byb2ZfaW5pdF9kYXRhKTogRmFjdG9yIG91dCBjb21wdXRhdGlvbi4KKwkqIG1vZHVsZS9vcF91dGlsLmMgKHJ2bWFsbG9jLCBydmZyZWUpOiBUeXBlY2FzdHMuCisJKiBtb2R1bGUveDg2L2FyY2guaDogTmV3LgorCSogUkVBRE1FOiBVcGRhdGUuCisJKiB1dGlscy9vcF9oZWxwLmMgKG1haW4pOiBBZGQgSUE2NCBpbmZvcm1hdGlvbi4KKworCSogbW9kdWxlL2lhNjQvYXJjaC5oOgorCSogbW9kdWxlL2lhNjQvY3B1X3R5cGUuYzoKKwkqIG1vZHVsZS9pYTY0L0lBNjRlbnRyeS5oOgorCSogbW9kdWxlL2lhNjQvSUE2NG1pbnN0YXRlLmg6CisJKiBtb2R1bGUvaWE2NC9JQTY0c3lzY2FsbHN0dWIuaDoKKwkqIG1vZHVsZS9pYTY0L01ha2VmaWxlLmluOgorCSogbW9kdWxlL2lhNjQvb3BfaWE2NF9tb2RlbC5oOiAKKwkqIG1vZHVsZS9pYTY0L29wX3BtdS5jOgorCSogbW9kdWxlL2lhNjQvb3Byb2ZpbGVfc3R1YnMuUzoKKwkqIG1vZHVsZS9pYTY0L29wX3N5c2NhbGxzLmM6IE5ldy4KKworMjAwMi0xMS0wNiAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorIAorCSogY29uZmlndXJlLmluOiAwLjVjdnMKKworCSogTWFrZWZpbGUuaW46IG1lbnRpb24gZG94eWZpbGUgaW4gcmVsZWFzZSBzdGVwcworIAorMjAwMi0xMS0wNiAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogcHAvb3BfdG9fc291cmNlLmNwcDogb3BfdG9fc291cmNlIC0tc291cmNlLXdpdGgtYXNzZW1ibHk6IGF2b2lkCisJICB0byBiZSBjb25mdXNlZCBieSBzb3VyY2UgbGluZSB3aGljaCBsb29rIGxpa2UgYW4gYXNtIGxpbmUgYW5kCisJICBzdG9wIGluY29ycmVjdGx5IHRoZSBvdXRwdXQuIFRoaXMgY2hhbmdlIGdvIGluIDAuNCByZWxlYXNlCisKKzIwMDItMTEtMDYgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogY29uZmlndXJlLmluOiBidW1wIHRvIDAuNCBpbiBwcmVwIGZvciByZWxlYXNlCisKKzIwMDItMTEtMDYgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogbW9kdWxlL3g4Ni9jcHVfdHlwZS5jOiBkZXRlY3QgaWYgd2UgYWN0dWFsbHkgYXJlCisJICB1c2luZyBIVCAoZnJvbSBBbGV4IFQpCisgCisyMDAyLTExLTA1ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGRvYy9vcHJvZmlsZS54bWw6IG1hbnVhbCBmaXhlcyBmcm9tIFdpbGwgQ29oZW4KKyAKKzIwMDItMTEtMDEgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogZGFlbW9uL29wZF9pbWFnZS5jOiBmaXggbG9va3VwX2Rjb29raWUgdXNhZ2UKKyAKKwkqIGxpYmFiaS8uY3ZzaWdub3JlOiBhZGQKKyAKKzIwMDItMTEtMDEgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIG1vZHVsZS94ODYvb3BfYXBpYy5jOiByZXN0b3JlIGNvcnJlY3RseSB0aGUgbHZ0cGMgcmVnaXN0ZXIKKworMjAwMi0xMS0wMSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogbGlib3Avb3BfaHdfY29uZmlnLmg6IGRlZmluZSBEQ09PS0lFX1NISUZUCisJKiBkYWVtb24vb3BkX2ltYWdlLmM6IHVzZSBpdAorCisyMDAyLTExLTAxICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBwcC9NYWtlZmlsZS5pbjogY2xlYW51cCwgYnVpbGQgYW5kIHVzZSBsaWJwcC5hCisKKzIwMDItMTAtMzEgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogcHAvY291bnRlcl9hcnJheS5jcHA6IHVzaW5nIG5hbWVzcGFjZSBzdGQKKyAKKzIwMDItMTAtMzEgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGRhZS8uY3ZzaWdub3JlOgorCSogZGFlL29wZF9pbWFnZS5jOgorCSogZGFlL29wZF9rZXJuZWwuYzoKKwkqIGRhZS9vcGRfc2FtcGxlX2ZpbGVzLmM6CisJKiBkYWUvb3BkX3N0YXRzLmM6CisJKiBkYWUvb3Byb2ZpbGVkLmM6CisJKiBkYWVtb24vb3BkX2ltYWdlLmM6CisJKiBkYWVtb24vb3BkX3NhbXBsZV9maWxlcy5jOgorCSogbGlib3Avb3BfY29uZmlnXzI0Lmg6IGNsZWFudXAsIGluY2x1ZGluZyBzb21lIGxpdHRsZSBtZXJnaW5nCisJICBmcm9tIGRhZW1vbiB0byBkYWUKKworCSogZGFlbW9uL29wZF9pbWFnZS5jOiBjaGFuZ2UgZGNvb2tpZSBoYXNoaW5nIGZ1bmN0aW9uCisJCisJKiBkb2Mvb3Byb2ZpbGUueG1sOiB0eXBvCisKKzIwMDItMTAtMjYgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGxpYnV0aWwrKy9maWxlX21hbmlwLmNwcDoKKwkqIGxpYnV0aWwrKy9vcF9iZmQuaDoKKwkqIGxpYnV0aWwrKy9vcF9iZmQuY3BwOiBjbGVhbnVwCisKKwkqIHBwL2NvdW50ZXJfYXJyYXkuaDoKKwkqIHBwL2NvdW50ZXJfYXJyYXkuY3BwOiBhZGQgYSBib29sIGVtcHR5KCkgbWVtYmVyIHRvIGNvdW50ZXJfYXJyYXlfdAorCSogcHAvc2FtcGxlX2NvbnRhaW5lcl9pbXAuY3BwOiB1c2UgaXQKKworMjAwMi0xMC0yNiAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogY29uZmlndXJlLmluOiBtaW5vciBjbGVhbnVwLiBVc2UgY29uZmlnLmggcmF0aGVyIHRoYW4gZ2NjIC1EIG9wdGlvbgorCisJKiBsaWJ1dGlsL29wX2xpYmliZXJ0eS5oOgorCSogbGlidXRpbCsrL29wX2JmZC5oOgorCSogcHAvb3BwX3N5bWJvbC5oOiAjaW5jbHVkZSA8Y29uZmlnLmg+CisKKwkqIGxpYnV0aWwvTWFrZWZpbGUuaW46CisJKiBwcC9NYWtlZmlsZS5pbjogcmVtb3ZlIEJGRF9DWFhGTEFHUworCisyMDAyLTEwLTI0ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBsaWJ1dGlsKysvb3BfYmZkLmNwcDoKKwkqIGxpYnV0aWwrKy9vcF9iZmQuaDogYWxsb3cgdG8gc3BlY2lmeSBleHBsaWNldGx5IG9uIHdoaWNoIHN5bWJvbCB3ZQorCSAgd2FudCB0byB3b3JrLgorCisJKiBwcC9vcF90b19zb3VyY2Vfb3B0aW9ucy5oOgorCSogcHAvb3BfdG9fc291cmNlX29wdGlvbnMuY3BwOgorCSogcHAvb3BfdG9fc291cmNlLmNwcDogaGFuZGxlIC0taW5jbHVkZS1zeW1ib2wsIGZvciBhc20gb3V0cHV0IG9ubHkKKwkgIG91dHB1dCBmb3Igc3ltYm9scyB3aXRoIHNhbXBsZWxzIG9yIHNlbGVjdGVkIHN5bWJvbHMuCisKKwkqIHBwL29wcm9mcC5jcHA6CisJKiBwcC9zYW1wbGVzY19vbnRhaW5lci5jcHA6IG1pbm9yIGNoYW5nZSB0byByZWZsZWN0IG9wX2JmZCBhcGkgY2hhbmdlCisKKzIwMDItMTAtMjQgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGRhZW1vbi9vcGRfaW1hZ2UuYzogcmV2ZXJ0IDY0IGJpdCBkY29va2llIHBhdGNoIGNvbW1pdGVkCisJICBhY2NpZGVudGFsbHkgd2l0aCAyMDAyLTEwLTE4IGFiaSBwYXRjaC4KKworMjAwMi0xMC0yMSAgR3JheWRvbiBIb2FyZSAgPGdyYXlkb25AcmVkaGF0LmNvbT4KKworCSogZG9jL29wcm9maWxlLnhtbDogRGVzY3JpYmUgb3BfaW1wb3J0IGFuZCAtLWVuYWJsZS1hYmkuCisKKzIwMDItMTAtMjAgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIHBwL01ha2VmaWxlLmluOgorCSogcHAvc2Vzc2lvbi5jcHA6CisJKiBwcC9zZXNzaW9uLmg6CisJKiBwcC9vcF90aW1lX29wdGlvbnMuY3BwOgorCSogcHAvb3BfdG9fc291cmNlLmNwcDoKKwkqIHBwL29wcm9mcHAuY3BwOgorCSogZG9jL29wcm9maWxlLjEuaW46CisJKiBkb2Mvb3Byb2ZpbGUueG1sOiBoYW5kbGUgLS1zZXNzaW9uIG9wdGlvbnMKKworMjAwMi0xMC0xOSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBjb25maWd1cmUuaW46IEFDX0hFTFBfU1RSSU5HIGlzIHRvbyBuZXcgZm9yIG15IGF1dG9jb25mCisgCisyMDAyLTEwLTE4ICBHcmF5ZG9uIEhvYXJlICA8Z3JheWRvbkByZWRoYXQuY29tPgorCisJKiBsaWJhYmkvKjogQWRkIHN1cHBvcnQgZm9yIGFiaSBkZXNjcmlwdGlvbnMsIGZvciBwb3J0YWJpbGl0eS4KKwkqIGRhZW1vbi9vcHJvZmlsZWQuYzoKKwkqIGRhZS9vcHJvZmlsZWQuYzogRW1pdCBhYmkgZGVzY3JpcHRpb24gb24gc3RhcnR1cC4KKwkqIGNvbmZpZ3VyZS5pbjogQWRkIC0tZW5hYmxlLWFiaSBvcHRpb24uCisJKiBtYWtlLmNvbW1vbi5pbjoKKwkqIE1ha2VmaWxlLmluOiBTdXBwb3J0IGJ1aWxkaW5nIGxpYmFiaS8KKyAKKzIwMDItMTAtMTkgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKyAKKwkqIHV0aWxzL29wX3N0YXJ0XzI1OiBncmVwIC1vIGRvZXMgbm90IGV4aXN0IG9uIGFueSBvZgorCSAgbXkgc3lzdGVtcyAtIGZpeAorIAorMjAwMi0xMC0xOSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogbGlidXRpbCsrL29wX2JmZC5jcHA6IGNhbGN1bGF0ZSBzeW1ib2wgc2l6ZSBhZnRlciByZW1vdmluZyBkdXBsaWNhdGUKKwkgIHN5bWJvbC4gRml4ICM2MjU2NzgKKworMjAwMi0xMC0xOSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogcHAvb3BfdG9fc291cmNlLmNwcDoKKwkqIHBwL29wX3RvX3NvdXJjZV9vcHRpb25zLmNwcDoKKwkqIHBwL29wX3RvX3NvdXJjZV9vcHRpb25zLmg6CisJKiBkb2Mvb3Byb2ZpbGUuMS5pbjoKKwkqIGRvYy9vcHJvZmlsZS54bWw6ICBhbGxvdyB0byBwYXNzIG11bHRpcGxlIG9wdGlvbnMgdG8gb2JqZHVtcAorCisJKiBwcC9vcHBfc3ltYm9sLmg6CisJKiBwcC9zYW1wbGVzX2NvbnRhaW5lci5jcHA6IHN0b3JlIHN5bWJvbCBzaXplIGluIHN5bWJvbF9lbnRyeSBvYmplY3QuCisKKzIwMDItMTAtMTkgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGxpYnV0aWwrKy9jaGlsZF9yZWFkZXIuY3BwOiBJbiBzb21lIHBhdGhvbG9naWNhbCBjYXNlIGdldGxpbmUoKQorCSAgZmluaXNoZWQgdG9vIGVhcmx5IHdoZW4gY2hpbGQgcHJvY2VzcyB3cml0ZSBvbiBzdGRlcnIuCisKKzIwMDItMTAtMTggIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGxpYnV0aWxsKysvY2hpbGRfcmVhZGVyLmNwcDogcmVhZF9ibG9jaygpIDogY3VtdWxhdGUgc3RkZXJyCisJICBvdXRwdXQgcmF0aGVyIHRvIG92ZXJ3cml0ZSBhbHdheXMgdGhlIHNhbWUgYnVmZmVyIHNwYWNlIC4uLgorCisyMDAyLTEwLTE2ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIHV0aWxzL29wX3N0YXJ0XzI1OiBjaGVjayBpZiBtb3VudGVkLCBmcm9tIFdpbGwgQ29oZW4KKwlBbHNvIG1rZGlyIHRoZSBtb3VudHBvaW50IAorIAorMjAwMi0xMC0xNiAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogY29uZmlndXJlLmluOiBnZXQgbGludXggaW5jbHVkZSBwYXRoIGVhcmxpZXIKKworMjAwMi0xMC0xNSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogZGFlL29wcm9maWxlZC5jOgorCSogZGFlbW9uL29wcm9maWxlZDogc3RyZXJybm8gLS0+IHN0cmVycm9yCisKKzIwMDItMTAtMTQgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGxpYm9wL29wX2V2ZW50cy5jOiB0eXBvIGluIEwyX0RCVVNfQlVTWV9SRCBQUHJvIGV2ZW50IG5hbWUKKworMjAwMi0xMC0xMyAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogUkVBRE1FOiB1cGRhdGUgY29udHJpYgorCSogVE9ETzogdXBkYXRlCisKKwkqIGd1aS9vcHJvZl9zdGFydC5jcHA6IGJldHRlciBlcnJvciBtZXNzYWdlLCBmaXhtZSByZW1vdmFsCisKKwkqIGxpYmRiL2RiLWluc2VydC5jOiBmaXggc2FtcGxlcyBjb3VudCBvdmVyZmxvdy4KKworCSogbGliZGIvZGIuaDoKKwkqIGxpYmRiL2RiLW1hbmFnZS5jOgorCSogbGliZGIvZGItZGVidWcuYzogZG9uJ3QgdXNlIHBhZ2UgemVybywgdXNlIHRoaXMgdmFsdWUgYXMgbmlsIHBhZ2UKKwkgIG51bWJlciwgYXZvaWQgdG8gdG91Y2ggbW1hcGVkIG1lbW9yeSB3aGVuIGdyb3dpbmcgdGhlIHNhbXBsZXMgZmlsZS4KKwkqIGxpYm9wL29wX2NvbmZpZy5oOiBidW1wIE9QRF9WRVJTSU9OCisKKzIwMDItMTAtMTIgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIHBwL3NhbXBsZXNfZmlsZS5oOgorCSogcHAvc2FtcGxlc19maWxlLmNwcDogbW92ZSBjbGFzcyBvcHBfc2FtcGxlc19maWxlcyAuLi4KKwkqIHBwL29wcF9zYW1wbGVzX2ZpbGVzLmg6CisJKiBwcC9vcHBfc2FtcGxlc19maWxlcy5jcHA6IHRvIHRoZXNlIG5ldyBmaWxlcworCisJKiBwcC9NYWtlZmlsZS5pbjoKKwkqIHBwL29wX3RvX3NvdXJjZS5jcHA6CisJKiBwcC9vcHJvZnBwLmNwcDogcmVmbGVjdCBhYm92ZSBjaGFuZ2UKKworMjAwMi0xMC0xMiAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogZGFlL29wZF9zYW1wbGVfZmlsZXMuYzogZml4bWUgcmVtb3ZlCisJKiBkYWUvb3Byb2ZpbGVkLmM6CisJKiBkYWVtb24vb3Byb2ZpbGVkLmM6IG1pbm9yIGVycm9yIG1lc3NhZ2UgaW1wcm92ZW1lbnQKKworCSogcHAvb3BfdGltZS5jcHA6CisJKiBwcC9zeW1ib2xfY29udGFpbmVyLmNwcDogZml4bWUgcmVtb3ZlCisJCisJKiBwcC9zYW1wbGVzX2ZpbGUuY3BwOgorCSogcHAvc2FtcGxlX2ZpbGUuaDogcHJpdmF0aXplIG1vcmUgZGF0YSBtZW1iZXJzCisKKzIwMDItMTAtMTIgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGxpYnV0aWwrKy91dGlsaXR5Lmg6IG9wX3JhdGlvKCkgbmV3CisJKiBwcC9vcF90aW1lLmNwcDoKKwkqIHBwL29wX3RvX3NvdXJjZS5jcHA6CisJKiBwcC9vcHBfc3ltYm9sLmNwcDoKKwkqIHBwL3NhbXBsZXNfY29udGFpbmVyLmNwcDogdXNlIG9wX3JhdGlvKCkKKworMjAwMi0xMC0xMSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogbGlidXRpbCsrL2ZpbGVfbWFuaXAuY3BwOgorCSogbGlidXRpbCsrL2ZpbGVuYW1lX21hdGNoLmNwcDoKKwkqIGxpYnV0aWwrKy9zdHJpbmdfbWFuaXAuY3BwOgorCSogbGlidXRpbCsrL3N0cmluZ19tYW5pcC5oOiBmaXggZGlybmFtZSgpLCBiYXNlbmFtZSgpLCByZW1vdmUgcnRyaW0oKQorCisyMDAyLTEwLTA3ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGRhZW1vbi9vcGRfaW1hZ2UuaDoKKwkqIGRhZW1vbi9vcGRfaW1hZ2UuYzoKKwkqIGRhZW1vbi9vcHJvZmlsZWQuYzoKKwkqIGxpYm9wL29wX2ludGVyZmFjZV8yNS5oOiB1cGRhdGUgdG8gbGF0ZXN0IGludGVyZmFjZQorCisyMDAyLTEwLTA2ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBkYWUvb3BkX2ltYWdlLmM6IGFsbG93IHRvIGZyZWUoaW1hZ2UtPmFwcF9uYW1lKQorCisyMDAyLTEwLTA1ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBkYWVtb24vb3BkX2ltYWdlLmM6CisJKiBkYWUvb3BkX2ltYWdlLmM6IHNwYWNpbmcKKworCSogZGFlL29wZF9tYXBwaW5nLmM6CisJKiBkYWUvb3BkX21hcHBpbmcuaDoga2lsbCBvcF9ncm93X21hcHMoKSBzaW1wbGlmeSBhZGRpbmcgbWFwIHBhdGgKKwkqIGRhZS9vcGRfcGFyc2VfcHJvYy5jOiB1c2Ugb3BkX2FkZF9tYXBwaW5nKCkKKworMjAwMi0xMC0wNSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogVE9ETzogdXBkYXRlCisKKwkqIGRvYy9vcHJvZmlsZS54bWw6IG1vcmUgZG9jIGluIGludGVycHJldGluZyByZXN1bHRzCisKKzIwMDItMTAtMDQgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIHBwL29wcF9zeW1ib2xzLmNwcDoKKwkqIHBwL29wcF9zeW1ib2xzLmg6CisJKiBwcC9vdXRzeW1iZmxhZy5oOiBpbXBsZW1lbnQgJ3EnICdRJyBmb3JtYXQgZmxhZ3MuIEZpeCAjNjE4MTY1CisJKiBwcC9vcF90aW1lX29wdGlvbnMuY3BwOiByZWplY3QgdGhlc2UgZm9ybWF0cyBmb3Igb3BfdGltZQorCSogZG9jL29wcm9maWxlLjEuaW46CisJKiBkb2Mvb3Byb2ZpbGUueG1sOiBkb2N1bWVudCB0aGVtCisKKzIwMDItMTAtMDIgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogTWFrZWZpbGUuaW46IHVzZSAtUCB0byBzdHJpcCBkZWFkIGRpcnMgb24gZGlzdAorIAorCSogZGFlL29wZF9wYXJzZV9wcm9jLmM6IHNwYWNpbmcKKworMjAwMi0xMC0wMiAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogbGliZGIvZGItKi5jLyouaDogdHlwZWRlZiB0d2Vha2luZyBmb3IgNjQgYml0cyBhcmNoIChzaWduYWxlZAorCSAgYnkgRGF2ZSBKb25lcykKKworCSogcmVtb3ZlIGxpYmRiL0NoYW5nZUxvZywgb2xkIGVudHJpZXMgYXJlOgorCisJMjAwMi0wNC0yMCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKwkqIGRiLWluc2VydC5jOiBjaGVjayBmb3IgY291bnQgb3ZlcmZsb3cKKworCTIwMDItMDQtMjAgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisJKiBkYi1tYW5hZ2UuYzogcHJvcGVybHkgaGFuZGxlIGFscmVhZHkgZXhpc3RpbmcgZGIgZmlsZQorCSogZGIuaDogZXh0ZXJuICJDIiB3cmFwcGVyCisKKwkyMDAyLTA0LTE5ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCSogKi5jOyouaDogbWFrZSBwbHVnaW4gZGIgaW4gb3Byb2ZpbGUgbW9yZSBlYXN5LgorCisJMjAwMi0wNC0xOCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKwkqICouYzsqLmg6IHByZWZpeCBhbGwgcHVibGljIGlkZW50aWZpZXIgd2l0aCBkYl8uCisJICBVc2UgdHlwZWRlZiBhcyBtdWNoIEkgY2FuIHJhdGhlciB0aGFuIHBsYWluIHVuc2lnbmVkIGludC4KKworCTIwMDItMDQtMTcgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisJKiBkYi1kZWJ1Zy5jOgorCSogZGItaW5zZXJ0LmM6CisJKiBkYi1tYW5hZ2UuYzoKKwkqIGRidGVzdC5jOgorCSogZGItdHJhdmVsLmM6CisJKiBkYi5oOiBhZGQgZmlsZSBsb2NraW5nIGFuZCBuZWNlc3Nhcnkgc3R1ZmYgdG8gYWxsb3cKKwkgIHBsdWdnaW5nIGRiIGluIGFuIGltYmVkZGVkIGZpbGUgZm9ybWF0IGxpa2Ugb3Byb2ZpbGUKKwkgIHNhbXBsZXMgZmlsZXMuCisKKwkyMDAyLTA0LTE2ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCSogZGItbWFuYWdlLmM6IHNpbGx5IGJ1ZyBmaXgsIGRiIHdvcmtzIG5vdyB3aXRoCisJICBtYWxsb2MvcmVhbGxvYyBvciBtbWFwL21yZW1hcCBtZW1vcnkgYWxsb2NhdGlvbgorCSAgc2VsZWN0ZWQgYXQgY29tcGlsZSB0aW1lLgorCisJMjAwMi0wNC0xNCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKwkqIGZpcnN0IGltcG9ydCBzdGFuZGFsb25lIGNvZGUgdG8gdGVzdCBidHJlZSBzYW1wbGVzIGZpbGVzCisKKzIwMDItMTAtMDIgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIG1vZHVsZS94ODYvb3BfbXNyLmg6IEh5cGVyIHRocmVhZGluZyAjZGVmaW5lCisJKiBtb2R1bGUveDg2L2NwdV90eXBlLmM6IGluY2x1ZGUgb3BfbXNyLmgKKworMjAwMi0xMC0wMiAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogKi8qLmNwcDogdXNpbmcgc3RkOjp4eHg7IC0tPiB1c2luZyBuYW1lc3BhY2Ugc3RkOworCisyMDAyLTEwLTAxICBXaWxsIENvaGVuICA8d2NvaGVuQHJlZGhhdC5jb20+CisgCisJKiBtb2R1bGUveDg2L2NwdV90eXBlLmMgKHA0X3RocmVhZHMpOiBOZXcuCisJICAoZ2V0X2NwdV90eXBlKTogVXNlIHA0X3RocmVhZHMoKS4KKwkqIGRvYy9vcHJvZmlsZS54bWw6IEFkZCBjb21tZW50IGFib3V0IFA0IEhUIHN1cHBvcnQuCisKKzIwMDItMTAtMDEgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogZGFlbW9uL29wZF9pbWFnZS5jOiBmaXggbm9uIC0tc2VwYXJhdGUtc2FtcGxlcy4gU3RpbGwgYnJva2UuCisgCisyMDAyLTEwLTAxICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGxpYm9wL29wX2NwdV90eXBlLmg6CisJKiBsaWJvcC9vcF9jcHVfdHlwZS5jOiBtYWtlIHRoaXMgd29yayBvbiAyLjUvbm9ybWFsIGJvdGguCisJICBEb2VzIG5vdCByZXNwZWN0IGRpZmZlcmVudCBtb3VudGVkIG9wcm9maWxlZnMgKHlldCkKKyAKKzIwMDItMTAtMDEgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogZGFlbW9uLy5jdnNpZ25vcmU6IGFkZAorIAorCSogbGlib3Avb3BfaW50ZXJmYWNlXzI1Lmg6IAorCSogZGFlbW9uL29wZF9pbWFnZS5oOgorCSogZGFlbW9uL29wZF9pbWFnZS5jOgorCSogZGFlbW9uL29wcm9maWxlZC5jOiBmaXh1cHMgZm9yIG5ldyBlbmNvZGVkIGludGVyZmFjZS4gRml4CisJICAtLXNlcGFyYXRlLXNhbXBsZXMKKworCSogdXRpbHMvb3Bfc3RhcnRfMjU6IHN0YXJ0dXAgZml4ZXMKKyAKKzIwMDItMDktMjYgIFdpbGwgQ29oZW4gIDx3Y29oZW5AcmVkaGF0LmNvbT4KKworCSogbW9kdWxlL3g4Ni9vcF9tb2RlbF9wNC5jOiBDb3JyZWN0IFRDX0RFTElWRVJfTU9ERSBjY2NyIHNlbGVjdC4KKyAKKzIwMDItMDktMjMgIEdyYXlkb24gSG9hcmUgIDxncmF5ZG9uQHJlZGhhdC5jb20+CisKKwkqIGRhZS9vcHJvZmlsZWQuYzoKKwkqIGRhZW1vbi9vcF9zYW1wbGVfZmlsZXMuYzoKKwkqIGRhZW1vbi9vcHJvZmlsZWQuYzoKKwkqIHBwL29wX3RvX3NvdXJjZS5jOgorCSogdXRpbHMvb3BfaGVscC5jOiB1OCB1bml0IG1hc2sgLT4gdTE2IHVuaXQtbWFzay4gSSdtIG5vdCBzdXJlIHRoaXMKKwkgIGNhdGNoZXMgKmFsbCogdGhlIGluc3RhbmNlcywgYnV0IGl0IGRvZXMgYXBwZWFyIHRvIGJlIGFuIGltcHJvdmVtZW50CisKKzIwMDItMDktMzAgIFdpbGxpYW0gQ29oZW4gIDx3Y29oZW5AcmVkaGF0LmNvbT4KKworCSogbGlidXRpbCsrL3N0cmluZ19tYW5pcC5jcHAgKHNhbXBsZV9maWxlbmFtZSk6IENvcnJlY3QgZGVjbGFyYXRpb24uCisJKiBwcC9zYW1wbGVzX2NvbnRhaW5lci5oOiBDb3JyZWN0IGFkZF9zYW1wbGVzKCkgZGVjbGFyYXRpb24uIAorCisyMDAyLTA5LTI5ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBsaWJ1dGlsKysvc3RyaW5nX21hbmlwLmNwcDoKKwkqIGxpYnV0aWwrKy9zdHJpbmdfbWFuaXAuaDogc2FtcGxlX2ZpbGVuYW1lKCkgbmV3CisJCisJKiBwcC9zYW1wbGVzX2NvbnRhaW5lci5jcHA6CisJKiBwcC9zYW1wbGVzX2NvbnRhaW5lci5oOiBhZGRfc2FtcGxlcygpIG5ldworCQorCSogcHAvb3BfbWVyZ2UuY3BwOgorCSogcHAvb3BfdGltZS5jcHA6CisJKiBwcC9vcHJvZnBwLmNwcDoKKwkqIHBwL3NhbXBsZXNfZmlsZS5jcHA6IHVzZSB0aGVtICsgbWlub3IgY2xlYW51cAorCisyMDAyLTA5LTI4ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBsaWJvcHQrKy9wb3B0X29wdGlvbnMuY3BwOiBmaXggIzYxNTc2MCwgaW4gcmFyZSBjYXNlCisJICBvcHJvZnBwIGNhbGxlZCB3aXRoIGxvdCBvZiBpbnZhbGlkIGFyZ3VtZW50cyBzZWdmYXVsdAorCSAgZHVyaW5nIHRoZSBoZWxwIHByaW50aW5nLiBBbGwgcG9zdC1wcm9maWxlIHRvb2xzIGFyZQorCSAgY29uY2VybmVkIGJ5IHRoaXMgZml4LgorCisJKiBkb2Mvb3Byb2ZpbGUueG1sOiBzbWFsbCBpbXByb3ZlbWVudHMKKworCSogbGlidXRpbCsrL29wX2JmZC5jcHA6IGltcHJvdmUgZXJyb3IgbWVzc2FnZSB3aGVuIGJmZF9vcGVucigpIGZhaWxzLgorCQorCSogVE9ETzogdXBkYXRlCisKKzIwMDItMDktMjggIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGRhZS9vcGRfaW1hZ2UuYzoKKwkqIGRhZS9vcGRfa2VybmVsLmM6CisJKiBkYWUvb3BkX3BhcnNlX3Byb2MuYzoKKwkqIGRhZS9vcGRfcGFyc2VfcGFyc2UuaDoKKwkqIGRhZS9vcGRfcHJvYy5jOgorCSogZGFlL29wZF9zYW1wbGVfZmlsZXMuYzoKKwkqIGRhZW1vbi9vcGRfaW1hZ2UuYzoKKwkqIGRhZW1vbi9vcGRfa2VybmVsLmM6CisJKiBkYWVtb24vb3BkX3NhbXBsZV9maWxlcy5jOgorCSogbGlib3Avb3BfY3B1X3R5cGUuYzoKKwkqIGxpYm9wL29wX2V2ZW50cy5jOgorCSogbGlib3Avb3BfZXZlbnRzX2Rlc2MuYzoKKwkqIGxpYm9wdCsrL3BvcHRfb3B0aW9ucy5jcHA6CisJKiBsaWJ1dGlsL29wX2RldmljZWlvLmM6CisJKiBsaWJ1dGlsL29wX2ZpbGUuYzoKKwkqIGxpYnV0aWwrKy9maWxlX21hbmlwLmNwcDoKKwkqIGxpYnV0aWwrKy9maWxlX21hbmlwLmg6CisJKiBsaWJ1dGlsKysvc3RyaW5nX21hbmlwLmg6CisJKiBwcC9vcF90b19zb3VyY2UuY3BwOiBkb3h5Z2VuIGZpeAorCisyMDAyLTA5LTI3ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGNvbmZpZ3VyZS5pbjogYWRkIC0td2l0aC1rZXJuZWwtc3VwcG9ydCBmb3IgMi41CisgCisJKiBkYWVtb24vb3Byb2ZpbGVkLmM6IGZpeCBjb21tZW50LCBnaXZlIGV4aXQgbWVzc2FnZSBvbiBzaWcKKworCSogdXRpbHMvTWFrZWZpbGUuaW46CisJKiB1dGlscy9vcF9zdG9wXzI1OiBhZGQgMi41IG9wX3N0b3AsIG5vIDIuNSBvcF9kdW1wCisKKwkqIHV0aWxzL29wX3N0YXJ0XzI1OiB1c2UgZW5hYmxlCisgCisyMDAyLTA5LTI1ICBCb2IgTW9udGdvbWVyeSAgPGJvYm1AZmMuaHAuY29tPgorCisJKiBtb2R1bGUvb3Byb2ZpbGUuYzogYXZvaWQgdG8gZHVtcCB6ZXJvIHNhbXBsZXMgY291bnQsIGZpeCAjNjE1MDg3CisKKzIwMDItMDktMjUgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGRhZS9vcGRfaW1hZ2UuYzogZml4ICM2MTUxNjYsIGVuc3VyZSB3ZSByZWNvZ25pemUgYW4KKwkgIGV4aXN0aW5nIGltYWdlIHN0cnVjdCBzbyB3ZSBkb24ndCB0cnkgdG8gY3JlYXRlIGRiX3RyZWVfdAorCSAgb2JqZWN0IGZvciB0aGUgc2FtZSBzYW1wbGVzIGZpbGVzLgorCSogZGIvZGItZGVidWcuYzogZGlzcGxheSBwYWdlIGluZGV4IHdoZW4gc29tZXRoaW5nIGdvZXMgd3JvbmcKKwkqIGRiL2RiLWluc2VydC5jOiBiZSBtb3JlIHN0cmljdCBvbiBhc3NlcnRpb24KKworMjAwMi0wOS0yNSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogZG9jL01ha2VmaWxlLmluOiByZW1vdmUgZGVwZW5kZW5jaWVzIGZvciBkb2MvaHRtbC54c2wKKworMjAwMi0wOS0yNSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogZG9jL3hzbC8uY3ZzaWdub3JlOiBuZXcKKwkqIGRvYy9vcHJvZmlsZS54bWw6IGRvY3VtZW50IHdhdGNoZG9nIHByb2JsZW0KKworMjAwMi0wOS0yNSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBtb2R1bGUveDg2L29wX25taS5jOiBPUF9NQVhfQ1BVUyBpcyBub3QgbmVjZXNzYXJpbHkKKwkgIHN0YXRpYyBzbyB1c2UgTlJfQ1BVUyBmb3IgYXJyYXkgaW5zdGVhZC4gRml4IGEgcHJvdG90eXBlLgorIAorMjAwMi0wOS0yMyAgR3JheWRvbiBIb2FyZSAgPGdyYXlkb25AcmVkaGF0LmNvbT4KKyAKKwkqIGRvYy9vcHJvZmlsZS54bWw6IEFkZCBzb21lIFA0IGRvY3VtZW50YXRpb24uCisJKiBjb25maWd1cmUuaW46IEFkZCBkZXRlY3Rpb24gb2YgZGlmZmVyZW50IHN0eWxlc2hlZXQgcGF0aHMuCisJKiBkb2MveHNsL3hodG1sLnhzbC5pbjogUGFyYW1ldGVyaXplIGJ5IGNvbmZpZ3VyZSdzIHJlc3VsdC4KKwkqIGRvYy94c2wveGh0bWwueHNsOiBSZW1vdmUuCisJKiBkYWUvb3BkX3NhbXBsZV9maWxlcy5jOiBDaGFuZ2UgdW5pdCBtYXNrIGZyb20gOCB0byAxNiBiaXRzLgorCSogZ3VpL29wcm9mX3N0YXJ0LmNwcDogQ2hhbmdlIG51bWJlciBvZiB1bml0IG1hc2tzIGZyb20gNyB0byAxNi4KKwkqIGd1aS91aS9vcHJvZl9zdGFydC5iYXNlLnVpOiBMaWtld2lzZS4KKwkqIGxpYm9wL29wX2NwdV90eXBlLmM6IEFkZCBQNCBDUFUgdHlwZS4KKwkqIGxpYm9wL29wX2V2ZW50cy5oOiBDaGFuZ2UgdW5pdCBtYXNrIGJpdCB3aWR0aCwgbnVtYmVyLgorCSogbGlib3Avb3BfZXZlbnRzLmM6IEFkZCBQNCBldmVudHMsIHVuaXQgbWFza3MuCisJKiBsaWJvcF9vcF9od19jb25maWcuaDogU2V0IE9QX01BWF9DT1VOVEVSUyB0byA4LgorCSogbGlib3ArKy9vcF9wcmludF9ldmVudC5jcHA6IENoYW5nZSB1bml0IG1hc2sgYml0IHdpZHRoLgorCSogbGlib3ArKy9vcF9wcmludF9ldmVudC5oOiBMaWtld2lzZS4KKwkqIG1vZHVsZS9vcHJvZmlsZS5jOiBBZGQgZXh0cmEgc3lzY3RscyBmb3IgY291bnRlcnMgNS04LgorCSogbW9kdWxlL3g4Ni9NYWtlZmlsZS5pbjogQWRkIG9wX21vZGVsX3A0Lm8gdG8gb2JqIGxpc3QuCisJKiBtb2R1bGUveDg2L2NwdV90eXBlLmM6IENoYW5nZSBDUFUgaWRlbnRpZmljYXRpb24gdG8gaGFuZGxlIFA0LgorCSogbW9kdWxlL3g4Ni9vcF9hcGljLmM6IChlbmFibGVfYXBpYyk6IEFQSUNfTUFYTFZUIDwgNCwgbm90ICE9IDQuCisJKGNoZWNrX2NwdV9vayk6IEFjY2VwdCBDUFVfUDQuCisJKiBtb2R1bGUveDg2L29wX21vZGVsX3A0LmM6IE5ldyBmaWxlLgorCSogbW9kdWxlL3g4Ni9vcF9ubWkuYzogKGdldF9tb2RlbCk6IEhhbmRsZSBDUFVfUDQuCisJQWRkIHN5c2N0bCBuYW1lcyBmb3IgY291bnRlcnMgNS04LgorCSogbW9kdWxlL3g4Ni9vcF94ODZfbW9kZWwuaDogRGVjbGFyZSBleHRlcm4gb3BfcDRfc3BlYy4KKworMjAwMi0wOS0yNCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogZGFlL29wZF9pbWFnZS5jOgorCSogZGFlL29wZF9pbWFnZS5oOgorCSogZGFlL29wZF9rZXJuZWwuYzoKKwkqIGRhZS9vcHJvZmlsZWQuYzoKKwkqIGRhZS9wX21vZHVsZS5oOgorCSogZGFlL29wZF9pbWFnZS5jOgorCSogZGFlL29wZF9rZXJuZWwuYzoKKwkqIGRhZS9vcHJvZmlsZWQuYzoKKwkqIGRhZS9wX21vZHVsZS5oOiBzbWFsbCBibGFuay9jb21tZW50IGNoYW5nZSB0byBtaW5pbWl6ZQorCSAgZGlmZiBiZXR3ZWVuIGRhZW1vbiBhbmQgZGFlIGRpci4KKworMjAwMi0wOS0yMyAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBjb25maWd1cmUuaW46IGZpeCBmb3IgMi41IHBhdGNoIHRvIGJ1aWxkCisgCisyMDAyLTA5LTIzICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIHV0aWxzL01ha2VmaWxlLmluOgorCSogdXRpbHMvb3Bfc3RhcnRfMjU6IDIuNSBwYXRjaCBzdGFydCBzY3JpcHQKKyAKKzIwMDItMDktMjMgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKyAgCisgIAkqIGRhZS9vcGRfaW1hZ2UuYzoKKworCSogbGlib3Avb3BfY3B1X3R5cGUuYzogZml4IGFycmF5cworIAorMjAwMi0wOS0yMyAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiB1dGlscy9vcF9zdGFydDogdXNlIHJpZ2h0IHZhbHVlIGZvciBSVEMgQ1BVCisgCisyMDAyLTA5LTIzICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGxpYm9wL29wX2NvbmZpZy5oOgorCSogbGlib3Avb3BfY29uZmlnXzI0Lmg6CisJKiBsaWJvcC9vcF9jb25maWdfMjUuaDogc3BsaXQgY29uZmlnIGZpbGUgdXAKKyAKKwkqIGRhZW1vbi9vcGRfa2VybmVsLmM6CisJKiBkYWVtb24vb3Byb2ZpbGVkLmM6IGluY2x1ZGUgb3BfY29uZmlnXzI1LmgKKworCSogZGFlL29wcm9maWxlZC5jOgorCSogZGFlL29wZF9pbWFnZS5jOgorCSogZGFlL29wZF9rZXJuZWwuYzoKKwkqIGRhZS9vcGRfbWFwcGluZy5jOiBpbmNsdWRlIG9wX2NvbmZpZ18yNC5oCisKKwkqIG1vZHVsZS9vcHJvZmlsZS5oOiBpbmNsdWRlIG9wX2NvbmZpZ18yNC5oCisgCisJKiBndWkvb3Byb2Zfc3RhcnQuY3BwOgorCSogZ3VpL29wcm9mX3N0YXJ0X2NvbmZpZy5jcHA6IGZpeCBmcm9tIGFib3ZlCisJICAob2xkIHN1cHBvcnQgb25seSByaWdodCBub3cpCisKKwkqIGxpYm9wL29wX2NwdV90eXBlLmg6IGludHJvZHVjZSAyLjUtcGF0Y2ggQ1BVX1RJTUVSX0lOVAorCisyMDAyLTA5LTIzICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGxpYm9wL29wX2ludGVyZmFjZV8yNS5oOiAyLjUgaW50ZXJmYWNlCisKKwkqIGRhZW1vbi9vcGRfaW1hZ2UuYzoKKwkqIGRhZW1vbi9vcGRfc2FtcGxlX2ZpbGVzLmM6CisJKiBkYWVtb24vb3Byb2ZpbGVkLmM6CisKKwkqIGxpYm9wKysvb3BfcHJpbnRfZXZlbnQuaDogZml4IGhlYWRlcgorCisJKiBwcC9vcF90b19zb3VyY2UuY3BwOiBjaGFuZ2UgZnJvbSBhYm92ZQorCisyMDAyLTA5LTIzICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGRhZW1vbi86IG5ldyAyLjUgcGF0Y2ggZGFlbW9uIGNvZGUuIFdJUAorCisJKiBjb25maWd1cmUuaW46CisJKiBNYWtlZmlsZS5pbjogZGV0ZWN0IDIuNSBwYXRjaCBhbmQgYnVpbGQgYXBwcm9wcmlhdGVseQorIAorMjAwMi0wOS0yMyAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBtb2R1bGUveDg2L29wX21zci5oOiBtYXRjaCBrZXJuZWwgbmFtaW5nCisKKwkqIG1vZHVsZS94ODYvb3BfbW9kZWxfYXRobG9uLmM6IGZyb20gYWJvdmUKKyAKKzIwMDItMDktMjIgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGxpYmRiL2RiLWluc2VydC5jOiBiYWQgY3V0JnBhc3RlLiBTaGFtZSBvbiBtZSwgSSBicm9rZSB0aGUgYnVpbGQuLi4KKworMjAwMi0wOS0yMiAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogbGliZGIvZGItaW5zZXJ0LmM6IGhhbmRsZSBzYW1wbGVzIGNvdW50IG92ZXJmbG93LgorCQorCSogbGliZGIvTWFrZWZpbGUuaW46IGRiLXRlc3QgbmV3IHRhcmdldCBub3QgYnVpbHQgYnkgZGVmYXVsdC4KKwkqIGxpYmRiL2RiLWRlYnVnLmM6IG1vcmUgc3RyaWN0IGNoZWNraW5nCisJKiBsaWJkYi9kYi10ZXN0LmM6IGFsbG93IGRiLXRlc3QgdG8gYmUgdXNlZCBhcyAiZGItdGVzdCBzYW1wbGVzX2Rpci8qIgorCisyMDAyLTA5LTIyICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGRhZS9vcGRfc3RhdHMuYzogbmljaWZ5CisgCisJKiBtb2R1bGUveDg2L29wX21vZGVsX3Bwcm9jLmM6CisJKiBtb2R1bGUveDg2L29wX21vZGVsX2F0aGxvbi5jOiBkcm9wIG1hY3JvIHByZWZpeGVzLCB3cyBmaXhlcworCisJKiBtb2R1bGUveDg2L29wX25taS5jOiBmaXggc2F2ZS9yZXN0b3JlIHBvc3NpYmxlIGNyYXNoLCBpbml0CisJICBwb3NzaWJsZSBsZWFrCisgCisyMDAyLTA5LTIyICBQaGlsaXBwZSBFbGllIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIG1vZHVsZS94ODYvb3BfbW9kZWxfcHByb2MuYzogZml4IHA2X3N0YXJ0KCkKKwkqIG1vZHVsZS94ODYvb3BfbW9kZWxfYXRobG9uLmM6IGZpeCBhdGhsb25fc3RhcnQoKQorCSogbW9kdWxlL3g4Ni9vcF9ubWkuYzogcG1jX3NhdmVfcmVnaXN0ZXJzKCkgdHlwbyB3aGVuIGNoZWNraW5nCisJICBudWxsIGZvciBrbWFsbG9jIHJldHVybiB2YWx1ZQorIAorMjAwMi0wOS0yMCAgR3JheWRvbiBIb2FyZSAgPGdyYXlkb25AcmVkaGF0LmNvbT4KKworCSogbW9kdWxlL3g4Ni9vcF94ODZfbW9kZWwuaDogTmV3IGludGVyZmFjZSBmb3IgTVNScy4KKwkqIG1vZHVsZS94ODYvb3Bfbm1pLmM6IFVzZSBpbnRlcmZhY2UuCisJKiBtb2R1bGUveDg2L29wX21vZGVsX3Bwcm8uYzogTmV3LCBjb2RlIGZyb20gb3Bfbm1pLmMuCisJKiBtb2R1bGUveDg2L29wX21vZGVsX2F0aGxvbi5jOiBOZXcsIGNvZGUgZnJvbSBvcF9ubWkuYy4KKwkqIG1vZHVsZS94ODYvTWFrZWZpbGUuaW46IFJlZmxlY3QgbmV3IGZpbGVzLgorCisyMDAyLTA5LTIwICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGxpYnV0aWwrKy9vcF9iZmQuY3BwOiBmaXggYSBidWcgd2hlcmUgd2UgYnJva2UKKwkgIHdpdGggbXVsdGlwbGUgZXhlY3V0YWJsZSBzZWN0aW9ucyBkdWUgdG8gc29ydGluZworCSAgdGhlIHN5bWJvbHMgd3JvbmdseS4gRml4ICM2MTcyODggYW5kIHRoZSBkdXBsaWNhdGVkCisJICAjNjE3MjY0CisKKwkqIGxpYnV0aWwrKy9vcF9iZmQuaDogZml4IGFuIG91dGRhdGVkIGNvbW1lbnQKKworCSogZGFlL29wZF9pbWFnZS5jOiBmaXggY29tbWVudAorIAorMjAwMi0wOS0xOSAgR3JheWRvbiBIb2FyZSAgPGdyYXlkb25AcmVkaGF0LmNvbT4KKworCSogbGlib3Avb3BfZXZlbnRzLmg6CisJKiBsaWJvcC9vcF9ldmVudHNfZGVzYy5jOiBNb3ZlIGRlc2NyaXB0aW9ucyBmcm9tIGhlcmUuCisJKiBsaWJvcC9vcF9ldmVudHNfZGVzYy5oOgorCSogbGlib3Avb3BfZXZlbnRzLmM6IFRvIGhlcmUuCisJKHVtXyopOiBBZGQgbmV3IHN0YXRpYyB1bml0IG1hc2tzLgorCShvcF9ldmVudHMpOiBVc2UgcG9pbnRlcnMgdG8gc3RhdGljIHVuaXQgbWFza3MuCQorCSogbGlib3ArKy9vcF9wcmludF9ldmVudC5oOgorCSogbGlib3ArKy9vcF9wcmludF9ldmVudC5jcHA6CisJKiBndWkvb3Byb2Zfc3RhcnQuaDoKKwkqIGd1aS9vcHJvZl9zdGFydC5jcHA6IAorCSogdXRpbHMvb3BfaGVscC5jOiBNYWtlIGNvbXBhdGlibGUgd2l0aCBzdHJ1Y3QgY2hhbmdlcy4KKworMjAwMi0wOS0xOCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiB1dGlscy9vcF9zdGFydDogZ2l2ZSBhbiBleGFtcGxlIGZvciB1bml0IG1hc2suCisgCisyMDAyLTA5LTE4ICBXaWxsIENvaGVuICA8d2NvaGVuQHJlZGhhdC5jb20+CisKKwkqIGxpYm9wL29wX21hbmdsZS5jOiAob3BfbWFuZ2xlX2ZpbGVuYW1lKTogQ29ycmVjdCBsb2dpYyBmb3IKKwkgIGdlbmVyYXRpbmcgbWFuZ2xlZCBuYW1lLiBGaXggIzYxMTEwNworCQorMjAwMi0wOS0xNSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBsaWJvcC9vcF9ldmVudC5jOiBmaXggY29tbWVudAorIAorMjAwMi0wOS0xNSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogbW9kdWxlL3g4Ni9jcHVfdHlwZS5jOiBhbGxvdyB0byBmb3JjZSBSVEMgbW9kZS4KKwkqIGRhZS9vcHJvZmlsZWQuYzogY2hlY2tpbmcgd2hlbiB3ZSBuZWVkIHRvIGJhY2t1cCBzYW1wbGVzCisJICBkaXIgaW4gUlRDIG1vZGUgd2FzIGJyb2tlbi4KKworMjAwMi0wOS0xNCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogbGlib3Avb3BfY29uZmlnLmg6IHJlbW92ZSBPUF9NSU4vTUFYX1BJRCwgT1BfTUlOL01BWF9QR1JQCisJKiBndWkvb3Byb2Zfc3RhcnQuY3BwOiBwaWRfZmlsdGVyL3BncnBfZmlsdGVyIGFjY2VwdCBhbGwgaW50ZWdlcgorCisyMDAyLTA5LTEzICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGFjaW5jbHVkZS5tNDogYW5vdGhlciB0d2VhaworIAorMjAwMi0wOS0xMyAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogTWFrZWZpbGUuaW46IG5ldmVyIHJlbW92ZSBkb2Mvb3Byb2ZpbGUuaHRtbC4KKwkqIGFjaW5jbHVkZS5tNDogc21hbGwgd29yay1hcm91bmQgZm9yIHNlZC1yZWxhdGVkIHByb2JsZW0KKworMjAwMi0wOS0xMiAgV2lsbCBDb2hlbiAgPHdjb2hlbkByZWRoYXQuY29tPgorCisJKiBNYWtlZmlsZS5pbjogU2VwYXJhdGUga2VybmVsIGFuZCB1c2VyIGNvZGUgYnVpbGQgcnVsZXMuCisKKzIwMDItMDktMTIgIFdpbGwgQ29oZW4gIDx3Y29oZW5AcmVkaGF0LmNvbT4KKyAKKwkqIGxpYnV0aWwrKy9jaGlsZF9yZWFkZXIuaCAoY2hpbGRfcmVhZGVyKTogQWRkIG1pc3NpbmcgInN0ZDo6Ii4KKwkqIGxpYnV0aWwrKy9jaGlsZF9yZWFkZXIuY3BwIChlcnJvcl9zdHIpOiBEaXR0by4KKyAKKzIwMDItMDktMTIgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogYWNpbmNsdWRlLm00OiB1cGRhdGUgZnJvbSB1cHN0cmVhbQorIAorMjAwMi0wOS0xMiAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBhY2luY2x1ZGUubTQ6IGZpeCBtb2MyL21vYyBjb25mbGljdCwgY2FjaGUgdmFsCisgCisyMDAyLTA5LTEyICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBsaWJ1dGlsKysvY2hpbGRfcmVhZGVyLmNwcDoKKwkqIGxpYnV0aWwrKy9jaGlsZF9yZWFkZXIuaDogZml4IGZvciBjaGlsZCB0ZXJtaW5hdGVkIGJ5IGEgc2lnbmFsCisJKiBndWkvb3Byb2Zfc3RhcnRfdXRpbC5jcHA6CisJKiBwcC9vcF90b19zb3VyY2UuY3BwOiB1c2UgdGhlIHRoZSBuZXcgY2hpbGRfcmVhZGVyIGludGVyZmFjZQorCisyMDAyLTA5LTExICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGFjaW5jbHVkZS5tNDoKKwkqIGNvbmZpZ3VyZS5pbjoKKwkqIGd1aS9NYWtlZmlsZS5pbjogcmVwbGFjZSB3aXRoIG5ldyBRdCBjb25maWd1cmUgc2NyaXB0CisgCisyMDAyLTA5LTExICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBhY2luY2x1ZGUubTQ6IGZpeCBxdDMgZGV0ZWN0aW9uIGluIHNvbWUgY29ybmVyIGNhc2UuCisKKzIwMDItMDktMTEgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIHBwL3NhbXBsZXNfY29udGFpbmVyLmNwcDoKKwkqIHBwL3NhbXBsZXNfY29udGFpbmVyLmg6IENoZWNrIGF0IHJ1biB0aW1lIHdlIGRvbid0IHRyeSB0byB1c2UgYW4KKwkgIHVuaXRpYWxpemVkIHNhbXBsZXNfY29udGFpbmVyX3QuCisKKzIwMDItMDktMTEgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIHBwL29wX3RpbWUuY3BwOiBleGl0IHNvb25lciB3aGVuIG5vIHNhbXBsZXMgZmlsZXMgYXJlIGF2YWlsYWJsZS4KKworMjAwMi0wOS0wOSAgV2lsbCBDb2hlbiAgPHdjb2hlbkByZWRoYXQuY29tPgorCisJKiBkYWUvb3BkX2tlcm5lbC5jIChzdHJ1Y3Qgb3BkX21vZHVsZSk6IAorCSAgKGtlcm5lbF9zdGFydCwga2VybmVsX2VuZCk6CisJICAob3BkX3BhcnNlX2tlcm5lbF9yYW5nZSk6CisJICAob3BkX2Ryb3BfbW9kdWxlX3NhbXBsZSk6CisJICAob3BkX2ZpbmRfbW9kdWxlX2J5X2VpcCk6CisJICAob3BkX2hhbmRsZV9tb2R1bGVfc2FtcGxlKToKKwkgIChvcGRfaGFuZGxlX2tlcm5lbF9zYW1wbGUpOgorCSAgKG9wZF9laXBfaXNfa2VybmVsKToKKwkqIGRhZS9vcGRfa2VybmVsLmggKG9wZF9oYW5kbGVfa2VybmVsX3NhbXBsZSk6CisJICAob3BkX2VpcF9pc19rZXJuZWwpOgorCSogZGFlL29wZF9tYXBwaW5nLmMgKG9wZF9wdXRfbWFwcGluZyk6CisJKiBkYWUvb3BkX21hcHBpbmcuaCAoc3RydWN0IG9wZF9tYXApOgorCSAgKG9wZF9pc19pbl9tYXApOgorCSAgKG9wZF9tYXBfb2Zmc2V0KToKKwkqIGRhZS9vcGRfcGFyc2VfcHJvYy5jIChvcGRfYWRkX2FzY2lpX21hcCk6CisJKiBkYWUvb3BkX3Byb2MuYyh2ZXJiX3Nob3dfc2FtcGxlKToKKwkgIChvcGRfcHV0X2ltYWdlX3NhbXBsZSk6CisJKiBkYWUvb3BkX3Byb2MuaCAob3BkX3B1dF9pbWFnZV9zYW1wbGUpOiBDaGFuZ2UgdGhpbmdzIHJlZmVycmluZworCSAgdG8gYWRkcmVzc2VzIHRvIHVuc2lnbmVkIGxvbmcgZm9yIG9wZXJhdGlvbiBvbiA2NC1iaXQgbWFjaGluZXMuCisgCisyMDAyLTA5LTA3ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBhbGwgc291cmNlIGZpbGUgOiByZW1vdmUgZW1haWwgYWRkcmVzcyBmcm9tIEBhdXRob3IKKworMjAwMi0wOS0wNSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogbGlib3Avb3BfaW50ZXJmYWNlLmg6IChvcF9zYW1wbGUsIG9wX25vdGUpOiBNYWtlIGNvbXBhdGlibGUgd2l0aAorCSAgNjQtYml0IHRhcmdldHMuCisJKiBkYWUvb3BkX3Byb2MuYzogKG9wZF9wdXRfc2FtcGxlKTogQWRqdXN0IHZlcmJwcmludGYgYXJndW1lbnRzLgorCSAgKG9wZF9oYW5kbGVfZm9yayk6IERpdHRvLgorCSogZGFlL29wcm9maWxlZC5jOiAob3BkX2RvX3NhbXBsZXMpOiBEaXR0by4KKworMjAwMi0wOS0wNCAgICBXaWxsIENvaGVuICA8d2NvaGVuQHJlZGhhdC5jb20+CisKKwkqIG1vZHVsZS9vcF9ydGMuYzogbW92ZSB0byAuLi4KKwkqIG1vZHVsZS94ODYvb3BfcnRjLmM6IGhlcmUKKwkqIG1vZHVsZS9NYWtlZmlsZS5pbjoKKwkqIG1vZHVsZS94ODYvTWFrZWZpbGUuaW46IHJlZmxlY3QgZmlsZSBtb3ZlCisKKzIwMDItMDktMDMgIFdpbGwgQ29oZW4gIDx3Y29oZW5AcmVkaGF0LmNvbT4KKworCSogbW9kdWxlL29wcm9maWxlLmg6IChyZWdwYXJtMyk6IHJlbW92ZSwgdXNlIEZBU1RDQUxMIGluc3RlYWQuCisJKiBtb2R1bGUvb3Byb2ZpbGUuYzogKG9wX2RvX3Byb2ZpbGUpOiBFbGltaW5hdGUgcmVncGFybTMuCisKKzIwMDItMDktMDMgIFdpbGwgQ29oZW4gIDx3Y29oZW5AcmVkaGF0LmNvbT4KKworCSogbW9kdWxlL29wcm9maWxlLmM6IChvcHJvZl9yZWFkLCBvcHJvZl9ub3RlX3JlYWQpOiBSZXR1cm4gc3NpemVfdC4KKworMjAwMi0wOC0zMCAgV2lsbCBDb2hlbiA8d2NvaGVuQG5jLnJyLmNvbT4KKworCSogTWFrZWZpbGUuaW46CisJKiBtYWtlLmNvbW1vbi5pbjogbW9yZSBERVNURElSIGNoYW5nZQorCisyMDAyLTA5LTAyICBEYXZlIEpvbmVzIDxkYXZlakBzdXNlLmRlPgorCisJKiBtb2R1bGUveDg2L2NwdV90eXBlLmM6IHN1cHBvcnQgaGFtbWVyIGluIGlhMzIgbW9kZQorCisyMDAyLTA5LTAyICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGRvYy9vcHJvZmlsZS54bWw6IG1lbnRpb24gUXQgMworIAorMjAwMi0wOC0zMCAgV2lsbCBDb2hlbiA8d2NvaGVuQG5jLnJyLmNvbT4KKworCSogZG9jL01ha2VmaWxlLmluOiBTZXQgTUFORElSIGFuZCBDQVRESVIgYmFzZWQgb24gREVTVERJUi4KKworMjAwMi0wOC0xNiAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogZGFlL29wZF9rZXJuZWwuYzoKKwkqIGRhZS9vcGRfa2VybmVsLmg6CisJKiBkYWUvb3BkX3Byb2MuYzoKKwkqIGRhZS9vcGRfcHJvYy5oOgorCSogZGFlL29wcm9maWxlZC5jOgorCSogbGlib3Avb3BfaHdfY29uZmlnLmg6CisJKiBsaWJvcC9vcF9pbnRlcmZhY2UuaDoKKwkqIG1vZHVsZS9vcHJvZmlsZS5jOgorCSogbW9kdWxlL29wcm9maWxlLmg6IGNoYW5nZSB0aGUgbGF5b3V0IG9mIGRhdGEgdXNlZCBiZXR3ZWVuCisJICBkYWVtb24vbW9kdWxlICgzMiBiaXRzIHBpZCBmaXggZm9yIDIuNS4zMSkKKworCSogZ3VpL29wcm9mX3N0YXJ0X2NvbmZpZy5oOiB1c2UgcGlkX3QKKworCSogbGlidXRpbC9vcF9maWxlaW8uYzogb3BfcmVhZF9maWxlKCksIG9wX3dyaXRlX2ZpbGUoKSwgdXNlICVsdQorCSAgYW5kIGNhc3QsIHVnbGllciBzb2x1dGlvbiBidXQgbW9yZSBwb3J0YWJsZSB0aGFuIGxhc3QgZml4CisKKwkqIHV0aWxzL29wX3N0YXJ0OiB0eXBvCisKKzIwMDItMDgtMTQgIFdpbGxpYW0gQ29oZW4gIDx3Y29oZW5AbmMucnIuY29tPgorIAorCSogbGlidXRpbC9vcF9maWxlaW8uYyAob3BfcmVhZF9maWxlKTogQ2hhbmdlIGZwcmludGYgc3BlY2lmaWVyLgorCShvcF93cml0ZV9maWxlKTogRGl0dG8uCisKKzIwMDItMDgtMDggIFdpbGwgQ29oZW4gIDx3Y29oZW5AbmMucnIuY29tPgorCisJKiB1dGlscy9vcF9zdGFydDogRG8gbm90IGNvbXB1dGUgcXVhbnRpdHkgb2YgY291bnRlcnMgZnJvbQorCSAgQ1BVVFlQRS4gR2V0IGNvdW50ZXIgbmFtZXMgZGlyZWN0bHkgZnJvbSAvcHJvYy9zeXMvZGV2L29wcm9maWxlLgorCisyMDAyLTA4LTA2ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBNYWtlZmlsZS5pbjoKKwkqIGRvYy9NYWtlZmlsZS5pbjogZGVsZXRlIGdlbmVyYXRlZCBkb2Mgb25seSBvbiBhIG1ha2UgbWFpbnRhaW5lcmNsZWFuCisKKwkqIHBwL29wcF9zeW1ib2wuY3BwOiBzbWFsbCBjbGVhbnVwCisKKzIwMDItMDgtMDYgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGRhZS9vcGRfcGFyc2UuYzoKKwkqIGRhZS9vcGRfcHJvYy5jOgorCSogZGFlL29wZF9wcm9jLmg6IGZpeCAjNTkxMjc1IHdoaWNoIGlzIGEgcmUtaGFzaCBvZiAjNTg0NzIzIHdlIGNhbgorCSAgbm93IHNhZmVseSBhc3N1bWUgdGhhbiBwcm9jLT5tYXBzWzBdIGlzIHRoZSBwcmltYXJ5IGltYWdlLgorCSAgUHJvYmxlbSByZXBvcnRlZCBieSBXaWxsaWFtIGNvaGVuCisKKzIwMDItMDgtMDMgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGxpYnV0aWwrKy9zdHJpbmdfbWFuaXAuaDoKKwkqIGxpYnV0aWwrKy9zdHJpbmdfbWFuaXAuY3BwOiBzZXBhcmF0ZV90b2tlbigpIHRyZWF0IGVzY2FwZSBzZXF1ZW5jZQorCisyMDAyLTA3LTMwICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBndWkvb3Byb2Zfc3RhcnQuY3BwOiBhcHBseSBtaXNzc2luZyBwYXJ0IGZyb20gdGhpcyBwYXRjaAorCSAgMjAwMi0wNy0yNyAgV2lsbCBDb2hlbiAgPHdjb2hlbkBuYy5yci5jb20+CisKKwkqIGRhZS9vcHJvZmlsZWQuYzoKKwkqIGRvYy9vcHJvZmlsZS4xLmluOgorCSogdXRpbC9vcHJvZl9zdGFydDoKKwkqIGRvYy9vcHJvZmlsZS54bWw6IGNsYXJpZnkgdGhhbiBwZ3JwIGZpbHRlciBpcyB0aGUgdHR5IHByb2dyYW0KKwkgIGdyb3VwIGlkCisKKzIwMDItMDctMjggIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGxpYm9wL29wX2NwdV90eXBlLmM6CisJKiBsaWJvcC9vcF9jcHVfdHlwZS5oOgorCSogbGlib3Avb3BfZXZlbnRzLmg6CisJKiBwcC9zYW1wbGVzX2ZpbGUuY3BwOiBvcF9nZXRfY3B1X25yX2NvdW50ZXJzKCkgLyBvcF9nZXRfbnJfY291bnRlcnMoKQorCSAgbWVyZ2UKKworCSogbW9kdWxlL2NvbXBhdDIyLmg6CisJKiBtb2R1bGUveDY4L29wX2FwaWMuYzogX19jbGkoKS9fX3N0aSgpIHJlbW92YWwsIHRoaXMgZml4IGJ1aWxkIHVwCisJICB0byAyLjUuMjkKKworCSogbW9kdWxlL29wX2ZpeG1hcC5jOiBmaXggdGVzdF9iaXQoKSB3YXJuaW5nCisKKzIwMDItMDctMjcgIFdpbGwgQ29oZW4gIDx3Y29oZW5AbmMucnIuY29tPgorIAorCSogZ3VpL29wcm9mX3N0YXJ0X2NvbmZpZy5jcHA6IGNvbmZpZ19zZXR0aW5nOjpjb25maWdfc2V0dGluZygpCisJICB1c2VzIHVuYW1lIHRvIGd1ZXNzIHBhdGggdG8gdm1saW51eC4gCisKKzIwMDItMDctMjcgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogZGFlL29wZF9zdGF0cy5oOgorCSogZGFlL29wZF9zdGF0cy5jOiAKKwkqIGRhZS9vcGRfcHJvYy5jOiBsb2cgdW5pcXVlIHNhbXBsZXMgdnMuIHNhbXBsZSBlbnRyaWVzCisgCisyMDAyLTA3LTI3ICBXaWxsIENvaGVuICA8d2NvaGVuQG5jLnJyLmNvbT4KKyAKKwkqIGRhZS9vcHJvZmlsZWQuYzoKKwkqIGd1aS9vcHJvZl9zdGFydC5jcHA6CisJKiBsaWJvcC9vcF9jcHVfdHlwZS5oOgorCSogbGlib3Avb3BfY3B1X3R5cGUuYzogb3BfZ2V0X25yX2NvdW50ZXIoKSBuZXcsIGxvY2FsaXplCisJICBvcF9ucl9jb3VudGVyIGNvbXB1dGF0aW9ucy4KKworMjAwMi0wNy0yNiAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogVE9ETzogdXBkYXRlCisKKwkqIHV0aWxzL29wX3N0YXJ0OiBmaXggIzU4NzA5Mywgc29tZSBvcHRpb24gb2Ygb3Bfc3RhcnQKKwkgIHdhcyBpbmNvcnJlY3RseSBjaGVja2VkCisKKzIwMDItMDctMjYgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIHBwL29wX3RpbWVfb3B0aW9ucy5jcHA6CisJKiBwcC9vcHJvZnBwX29wdGlvbnMuY3BwOiBvdXRwdXQgZm9ybWF0IGhlYWRlciBvciBkZXRhaWxzIGFyZSBpbGxlZ2FsCisJICBpZiBub3QgY29tYmluZWQgd2l0aCBvdGhlciBvdXRwdXQgZm9ybWF0IGZsYWcKKworCSogcHAvb3BwX3N5bWJvbC5jcHA6CisJKiBwcC9vcHBfc3ltYm9sLmg6CisJKiBwcC9vcHJvZnBwLmNwcDoKKwkqIHBwL291dHN5bWJmbGFnLmg6IG1pbm9yIGNsZWFudXAKKworMjAwMi0wNy0yNSAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogY29uZmlndXJlLmluOiBidW1wIHRvIDAuNGN2cworIAorMjAwMi0wNy0yNCAgS2V2aW4gUHVldHogIDxwdWV0emtAaWFzdGF0ZS5lZHU+CisKKwkqIGd1aS91aS9vcHJvZl9zdGFydC5iYXNlLnVpOiBmaXggcmVzaXplCisgCisyMDAyLTA3LTIyICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBsaWJ1dGlsL29wX2ZpbGVpby5jOgorCSogbGlidXRpbC9vcF9maWxlaW8uaDogb3BkX2dldF9saW5rKCkgbmV3LCByZWFkIGEgc3ltbGluayBmaWxlbmFtZQorCSogbGlidXRpbCsrL2ZpbGVfbWFuaXAuY3BwOgorCSogbGlidXRpbCsrL2ZpbGVfbWFuaXAuaDogb3BkX3JlYWRfbGluaygpIHVzZSB0aGUgYWJvdmUgZnVuY3Rpb24KKworCSogZGFlL29wZF9pbWFnZS5jOgorCSogZGFlL29wZF9wYXJzZV9wcm9jLmM6IGZpeCAjNTg0NzIzIHdlIGNhbiBub3QgYXNzdW1lIHRoYW4gdGhlIGZpcnN0CisJICBtYXAgaW4gL3Byb2MvcGlkL21hcHMgaXMgdGhlIHRoZSBtYXAgZm9yIHRoZSBiaW5hcnkgaW1hZ2UKKworMjAwMi0wNy0yMSAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogY29uZmlndXJlLmluOiBidW1wIHRvIDAuMworIAorMjAwMi0wNy0xNyAgV2lsbGlhbSBDb2hlbiAgPHdjb2hlbkBuYy5yci5jb20+CisgCisJKiBndWkvb3Byb2Zfc3RhcnRfdXRpbC5jcHA6IGdldCBIWiBmcm9tIHN5c2NvbmYKKworMjAwMi0wNy0xNyAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogZ3VpL29wcm9mX3N0YXJ0LmJhc2UudWk6IHJldmVydCBwYXRjaCAyMDAyLTA3LTEzLCByZWFwcGx5CisJICB0aGUgc2FtZSBtb2RpZmljYXRpb24gd2l0aCBRVDIgZGVzaWduZXIgcmF0aGVyIFFUMyBkZXNpZ25lcgorCisyMDAyLTA3LTE0ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgorCisJKiBNYWtlZmlsZS5pbjogc2V0IEtWRVJTIHByb3Blcmx5CisgCisJKiBkYWUvb3Byb2ZpbGVkLmM6IHJlbW92ZSBlaXAgPT0gMCBjaGVja2luZworIAorCSogbW9kdWxlL29wcm9maWxlLmM6IGRvIGNoZWNrIGluIGV2aWN0X29wX2VudHJ5KCkgaW5zdGVhZCwKKwkgIGFzIHN1Z2dlc3RlZCBieSBQaGlsaXBwZQorIAorMjAwMi0wNy0xMyAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogVE9ETzogdXBkYXRlCisKKwkqIG1ha2UuZGVwczoKKwkqIGd1aS9NYWtlZmlsZS5pbjogZml4IGluY2x1ZGUgc2VhcmNoIHBhdGggZm9yIGRlcGVuZGVuY2llcyBnZW5lcmF0aW9uCisKKzIwMDItMDctMTMgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIGRhZS9vcHJvZmlsZWQuYzogZG9uJ3QgdGhyb3cgYXdheSBsYXN0IHNhbXBsZXMgb24gc2h1dGRvd24KKwkgIG5vdGlmaWNhdGlvbgorIAorMjAwMi0wNy0xMyAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogVE9ETzogdXBkYXRlCisKKwkqIGRvYy9vcHJvZmlsZS4xLmluOgorCSogZG9jL29wcm9maWxlLnhtbDoKKwkqIGd1aS9vcHJvZl9zdGFydC5jcHA6CisJKiBndWkvb3Byb2Zfc3RhcnRfY29uZmlnLmNwcDoKKwkqIGd1aS9vcHJvZl9zdGFydF9jb25maWcuaDoKKwkqIGd1aS9vcHJvZl9zdGFydC5iYXNlLnVpOiByZW1vdmUga2VybmVsLXJhbmdlIHNwZWNpZmljYXRpb24gVUkKKworMjAwMi0wNy0xMiAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogVE9ETzogdXBkYXRlCisgCisJKiBkYWUvb3Byb2ZpbGVkLmM6CisJKiBsaWJvcC9vcF9pbnRlcmZhY2UuaDogCisJKiBtb2R1bGUvb3Byb2ZpbGUuYzogCisJKiBtb2R1bGUvb3Byb2ZpbGUuaDoKKwkqIG1vZHVsZS94ODYvb3Bfbm1pLmM6IAorCSogbW9kdWxlL3g4Ni9vcF9zeXNjYWxscy5jOiByZXBsYWNlIHBhcnRpYWxfc3RvcCxxdWl0dGluZyxwcm9mX29uCisJICB3aXRoIHNpbmdsZSBzdGF0ZSB2YXJpYWJsZSwgYW5kIGNsZWFuIHVwIGhvdyBzaHV0ZG93biBpcyB0cmlnZ2VyZWQuCisgCisJKiBtb2R1bGUvb3Byb2ZpbGUuYzogYWx3YXlzIGluaXQgZGF0YS0+ZW50cmllcyBldGMuIGZvciBldmVyeSBDUFUKKyAKKzIwMDItMDctMTIgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIE1ha2VmaWxlLmluOiB0eXBvIGluIGNsZWFuIHRhcmdldAorCisJKiBtb2R1bGUvY29tcGF0Lmg6CisJKiBtb2R1bGUvY29tcGF0MjQuaDoKKwkqIG1vZHVsZS9vcHJvZmlsZS5jOgorCSogbW9kdWxlL3g4Ni9vcF9ubWkuYzogc3VwcG9ydCBmb3Igb25saW5lL29mZmxpbmUgY3B1IGZvciAyLjUuMjMrCisKKzIwMDItMDctMTEgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIE1ha2VmaWxlLmluOgorCSogbW9kdWxlL01ha2VmaWxlLmluOgorCSogbW9kdWxlL3g4Ni9NYWtlZmlsZS5pbjogbW92ZSBhbGwgZ29hbCB0byB0aGUgdG9wZGlyIE1ha2VmaWxlCisKKzIwMDItMDctMTAgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIFRPRE86IHVwZGF0ZQorCisJKiBwcC9vcF90aW1lLmNwcDogIGVycm5vIGZvciBmaWxlIHBlcm1pc3Npb24gcHJvYmxlbSBpcworCSAgRUFDQ0VTIG5vdCBFUEVSTSAuLi4KKworCSogbW9kdWxlL3g4Ni9vcF9hcGljLmM6CisJKiBtb2R1bGUveDg2L29wX2ZpeG1hcC5jOgorCSogbW9kdWxlL3g4Ni9vcF9ubWkuYzogcmV2ZXJ0IHBhcnRpYWxseSB0aGUgMjAwMi0wNi0yNiBwYXRjaCwgcHJlZW1wdAorCSAgbmVlZCByYXRoZXIgdG8gYmUgZml4ZWQgYmVmb3JlL2FmdGVyIGNhbGxpbmcgdGhlCisJICBvcF9pbnRfb3BlcmF0aW9uIGZ1bmN0aW9ucyBwb2ludGVyLgorCisyMDAyLTA3LTA5ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBndWkvb3Byb2Zfc3RhcnQuY3BwOiB1c2UgPGN0aW1lPiBub3QgPHRpbWUuaD4KKwkqIGxpYnV0aWwvb3BfbGliaWJlcnR5LmM6IGRvbid0IGFzc3VtZSB0aGFuIHN0cmluZy5oIGlzIGluY2x1ZGVkCisJICAgYnkgbGliaWJlcnR5LmggYXMgaW4gb2xkIGdjYyByZWxlYXNlCisKKzIwMDItMDctMDggIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGxpYnV0aWwrKy9vcF9iZmQuaDoKKwkqIGxpYnV0aWwrKy9vcF9iZmQuY3BwOiBwYXNzIHZlY3RvciBieSBjb25zdCByZWZlcmVuY2UgcmF0aGVyCisJICB0aGFuIGJ5IHZhbHVlCisKKwkqIHBwL29wX3RvX3NvdXJjZS5jcHA6IGFsd2F5cyBvdXRwdXQgZmlsZSBldmVuIGlmIHRoZSBjb3JyZXNwb25kaW5nCisJICBzb3VyY2UgZmlsZSBkb2VzIG5vdCBleGlzdAorCisyMDAyLTA3LTA2ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBsaWJvcHQrKy9wb3B0X29wdGlvbnMuY3BwOiBwcm92aWRlIGEgZHRvciBpbiBkZXJpdmVkIGNsYXNzCisKKwkqIGRvYy9vcHJvZmlsZS4xLmluOgorCSogcHAvb3BfdG9fc291cmNlLmNwcDogLS1vdXRwdXQgLS1uby1vdXRwdXQgYXJlIG1lYW5pbmdmdWxsCisJICBpbiBhbGwgY2FzZS4KKworMjAwMi0wNy0wNiAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogZ3VpL29wcm9mX3N0YXJ0LmNwcDoKKwkqIHBwL3NhbXBsZV9jb250YWluZXJfaW1wLmNwcDoKKwkqIHBwL3N5bWJvbF9jb250YWluZXJfaW1wLmNwcDoKKwkqIHBwL29wX3RvX3NvdXJjZS5jcHA6IGZpeCBhbiBJU08gY29ybmVyIGNhc2UgKDMuNC4yICMyKQorCisyMDAyLTA3LTA1ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBsaWJ1dGlsKysvZmlsZW5hbWVfbWF0Y2guaDoKKwkqIGxpYnV0aWwrKy9maWxlbmFtZV9tYXRjaC5jcHA6IGNvbnN0aWZ5CisKKwkqIG1vZHVsZS9NYWtlZmlsZS5pbjogc21hbGwgdHlwbworCSogTWFrZWZpbGUuaW46IGRvIG5vdCBtYWtlIHVuaW5zdGFsbCBpbiBtb2R1bGUvYXJjaAorCisJKiBwcC9vcF90b19zb3VyY2Vfb3B0aW9ucy5oOgorCSogcHAvb3BfdG9fc291cmNlX29wdGlvbnMuY3BwOgorCSogcHAvb3BfdG9fc291cmNlLmNwcDogZ2VuZXJhbCBjbGVhbnVwLCByZW1vdmUgdGhlIG91dHB1dCBjbGFzcyBhbmQKKwkgIHVzZSBmcmVlIGZ1bmN0aW9uIGluc3RlYWQsIGRveHlnZW4naXplIHRoZW0uCisKKzIwMDItMDctMDQgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGxpYm9wL29wX2V2ZW50cy5jcHA6CisJKiBsaWJvcC9vcF9ldmVudHMuaDoKKwkqIG1vZHVsZS94ODYvb3Bfbm1pLmM6CisJKiBkYWUvb3Byb2ZpbGVkLmM6IG9wX2NoZWNrX2V2ZW50cygpIG5vIGxvbmdlciBhY2NlcHQgMCBhcyB2YWxpZCBldmVudHMKKworCSogcHAvb3BwX3N5bWJvbC5jcHA6IHNtYWxsIGRlYWQgY29kZSByZW1vdmFsCisJKiBwcC9vcHBfc3ltYm9sLmg6IGRveHlnZW4gY29tbWVudCBmaXgKKworCSogY29uZmlndXJlLmluOiBkbyBub3QgdXNlIEFDX0NIRUNLX0ZJTEU6IHRoaXMgbWFjcm8gZ2VuZXJhdGUKKwkgIHNwdXJpb3VzIHdhcm5pbmcgd2l0aCBhdXRvY29uZiAyLjIuMTMKKworCSogcHAvb3BfdG9fc291cmNlX29wdGlvbnMuaDoKKwkqIHBwL29wX3RvX3NvdXJjZV9vcHRpb25zLmNwcDoKKwkqIHBwL29wX3RvX3NvdXJjZS5jcHA6CisJKiBkb2Mvb3Byb2ZpbGUuMS5pbjoKKwkqIGRvYy9vcHJvZmlsZS54bWw6IGltcGxlbWVudCAtLW9iamR1bXAtcGFyYW1zPSdwYXJhbXNfc3RyaW5ncycKKwkgIGFsbG93aW5nIHRvIHBhc3MgYWRkaXRpb25hbCBwYXJhbWV0ZXJzIHRvIG9iamR1bXAuCisKKzIwMDItMDctMDMgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGxpYnV0aWwvb3BfZmlsZWlvLmM6IHJlbW92ZSBhIEZJWE1FLCBpdCdzIG5vdCB3b3J0aHdoaWxlIHRvIHRyeSB0bworCSAgdXNlIEdOVSBnZXRsaW5lKCkgaW5zdGVhZCBvZiBvcF9nZXRfbGluZSgpCisKKwkqIHBwL29wX3RpbWUuY3BwOgorCSogcHAvb3BfdGltZV9vcHRpb25zLmNwcDoKKwkqIHBwL29wX3RpbWVfb3B0aW9ucy5oOgorCSogcHAvb3Byb2ZwcC5jcHA6IHJlbW92ZSBtaW5vciBGSVhNRQorCisJKiBwcC9vcHBfc3ltYm9sLmg6IGNsYXNzIG91dHV0X3N5bWJvbDogY2xhcmlmeSB3aHksIHdpdGggdGhlIGN1cnJlbnQKKwkgIGRlc2lnbiwgc29tZSBmdW5jdGlvbiBhcmUgcHVibGljIG1lbWJlciByYXRoZXIgcHJpdmF0ZS4KKworMjAwMi0wNy0wMSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogY29uZmlndXJlLmluOgorCSogbW9kdWxlL2NvbXBhdC5oOiBmaXggY29tcGlsZSBlcnJvciB3aXRoIGtlcm5lbCA8PSAyLjIuMTcKKworMjAwMi0wNy0wMSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogVE9ETzogbWlub3IgdXBhZHRlCisKKwkqIGNvbmZpZ3VyZS5pbjogc3VwcG9ydCAyLjUuMjAKKworCSogZGFlL29wZF9pbWFnZS5jOgorCSogZGFlL29wZF9wcm9jLmM6CisJKiBsaWJvcCsrL29wX3ByaW50X2V2ZW50Lmg6CisJKiBsaWJ1dGlsL29wX3BvcHQuYzoKKwkqIHBwL29wX21lcmdlLmNwcDoKKwkqIHBwL3NhbXBsZXNfY29udGFpbmVyLmNwcDoKKwkqIHBwL3N5bWJvbF9jb250YWluZXJfaW1wLmNwcDoKKwkqIHBwL3N5bWJvbF9mdW5jdG9ycy5oOiBtaW5vciAjaW5jbHVkZSB0d2VhaworCisyMDAyLTA2LTMwICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBsaWJkYi9kYi5oOgorCSogbGliZGIvZGItbWFuYWdlLmM6IGNvbnN0aWZ5IGRiX3N5bmMoKSBwYXJhbWV0ZXIuCisKKwkqIGRhZS9vcGRfaW1hZ2UuYzogZml4ICM1NzQ0NTkgInZtbGludXggc2FtcGxlcyBmaWxlIG5vdCBiYWNrZWQgdXAKKwkgIGJ5IG9wX3Nlc3Npb24iLiBTbWFsbCBjbGVhbnVwIGJ5IGFkZGluZyBvcGRfZm9yX2VhY2hfaW1hZ2UoKQorCisyMDAyLTA2LTI5ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBUT0RPOiB1cGRhdGUKKworCSogbGlidXRpbCsrL2ZpbGVuYW1lX21hdGNoLmNwcDoKKwkqIGxpYnV0aWwrKy9maWxlbmFtZV9tYXRjaC5oOiBhZGQgYSBjb252ZW5pZW5jZSBjdG9yLgorCisJKiBkb2Mvb3Byb2ZpbGUuMS5pbjoKKwkqIGRvYy9vcHJvZmlsZS54bWw6CisJKiBvcF90aW1lLmNwcDogYmV0dGVyIGVycm9yIG1lc3NhZ2UgZm9yIEVQRVJNIHByb2JsZW0KKwkqIG9wX3RpbWVfb3B0aW9ucy5oOgorCSogb3BfdGltZV9vcHRpb25zLmNwcDogYWxsb3cgdGhlIHVzZXIgdG8gc3BlY2lmeSBleHBsaWNpdGVseSBvbiB3aGljaAorCSAgZmlsZW5hbWUgaGUgd2FudCB0byB3b3JrCisKKzIwMDItMDYtMjkgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIFRPRE86IHVwZGF0ZQorCisJKiBhY2luY2x1ZGUubTQ6CisJKiBjb25maWd1cmUuaW46CisJKiBtYWtlLmNvbW1vbi5pbjoKKwkqIGd1aS9NYWtlZmlsZS5pbjoKKwkqIGd1aS91aS9NYWtlZmlsZS5pbjogYmV0dGVyIHF0MyBoYW5kbGluZworCisJKiBkb2Mvb3Byb2ZpbGUuMS5pbjoKKwkqIGRvYy9vcHJvZmlsZS54bWw6IGZpeCBvcHJvZl9zdGFydCAtLW9wdGlvbj1ibGFoCisKKzIwMDItMDYtMjggIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIC5jdnNpZ25vcmU6IG1pbm9yIGZpeAorCisJKiBjb25maWd1cmUuaW46CisJKiBhY2luY2x1ZGUubTQ6IHVnbHkgdGVtcG9yYXJ5IGhhY2sgdG8gY29tcGlsZSB3aXRoIGtkZTMvcXQzCisJKiBvcHJvZl9zdGFydC5jcHA6CisJKiBvcHJvZl9zdGFydF9jb25maWcuY3BwOiBnY2MtMy4xIGFuZCBxdDMgZml4IChxdDMgaGF2ZSBhbgorCSAgaGV4KCkgc29tZXdoZXJlIC4uLikKKworCSogbW9kdWxlL3g4Ni9vcF9maXhtYXAuYzogbWlub3IgY29tbWVudCBmaXgKKworMjAwMi0wNi0yNiAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogVE9ETzogdXBkYXRlCisKKwkqIG1vZHVsZS9jb21wYXQuaDoKKwkqIG1vZHVsZS94ODYvb3BfYXBpYy5jOgorCSogbW9kdWxlL3g4Ni9vcF9maXhtYXAuYzoKKwkqIG1vZHVsZS94ODYvb3Bfbm1pLmM6IHByZWVtcHRpYmxlIGtlcm5lbCBzdXBwb3J0LiBUaGlzIGZpeCBwb2ludAorCSAgIzIgb2Yga2VybmVsX3NyYy9Eb2N1bWVudGF0aW9uL3ByZWVtcHQtbG9ja2luZy50eHQKKworMjAwMi0wNi0yNSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogVE9ETzogdXBkYXRlCisKKwkqIGRvYy9vcHJvZmlsZS4xLmluOgorCSogZG9jL29wcm9maWxlLnhtbDogZG9jdW1lbnQgb3Bfc3RhcnQgLS1rZXJuZWwtcmFuZ2Ugb3B0aW9uCisJKiBndWkvb3ByZl9zdGFydC5jcHA6CisJKiBndWkvb3Byb2Zfc3RhcnQuaDoKKwkqIGd1aS9vcHJvZl9zdGFydF9jb25maWcuY3BwOgorCSogZ3VpL29wcm9mX3N0YXJ0X2NvbmZpZy5oOiAKKwkqIGd1aS91aS9vcHJvZl9zdGFydF9iYXNlLnVpOgorCSogdXRpbHMvb3Bfc3RhcnQ6IGltcGxlbWVudCAtLWtlcm5lbC1yYW5nZQorCisJKiBndWkvTWFrZWZpbGUuaW46IGZvcmNlIHVpIHN1Yi1kaXIgYnVpbGQKKwkKKzIwMDItMDYtMjUgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIFRPRE86IHVwZGF0ZQorCisJKiBjb25maWd1cmUuaW46IG5ldyBBWF9LRVJORUxfVkVSU0lPTigpICB0byBhbGxvdyBrZXJuZWwgdmVyc2lvbiBjaGVjaywKKwkgIHVzZSBpdCB0byBjaGVjayBtaW5pbWFsIGtlcm5lbCB2ZXJzaW9uIGFuZCBmaXggMi41LjE5IGJyZWFrYWdlCisJKiBtb2R1bGUvLmN2c2lnbm9yZToKKwkqIG1vZHVsZS94ODYvLmN2c2lnbm9yZTogYWRkIC4qLmNtZAorCSogbW9kdWxlL01ha2VmaWxlLmluOgorCSogbW9kdWxlL3g4Ni9NYWtlZmlsZS5pbjogZml4IDIuNS4xOSBtYWtlIHRocm91Z2ggRVhUUkFfQ0ZMQUdTX01PRFVMRQorCSogbW9kdWxlL2NvbXBhdDIyLmg6IGZpeCBtaXNzaW5nIEJVRygpIGRlZmluaXRpb24gaW4gMi4yIGtlcm5lbAorCSogbW9kdWxlL3g4Ni9vcHJvZmlsZV9ubWkuUzogZml4IG1pbm9yIDIuMiBjb21waWxlIHByb2JsZW0KKworCSogcHAvb3BfdG9fc291cmNlLmNwcDogbWlub3IgY29tbWVudCBmaXgKKworMjAwMi0wNi0xOCAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogdXRpbHMvb3Bfc3RhcnQ6CisJKiBwcC9zYW1wbGVzX2ZpbGUuaDoKKwkqIGxpYm9wL29wX2NvbmZpZy5oOgorCSogZG9jL29wcm9maWxlLjEuaW46CisJKiBkb2Mvb3Byb2ZpbGUueG1sOgorCSogZGFlL29wcm9maWxlZC5jOgorCSogZGFlL29wZF9rZXJuZWwuaDoKKwkqIGRhZS9vcGRfa2VybmVsLmM6IGRvbid0IHBhcnNlIFN5c3RlbS5tYXAgYW55IG1vcmUsCisJICBub3cgd2Ugd29yayBiYXNlZCBvZmYgdm1saW51eCBhbG9uZQorCSAKKwkqIGRhZS9vcGRfcHJvYy5jOiBtb3ZlIGVpcF9pc19rZXJuZWwoKSBpbnRvIG9wZF9rZXJuZWwuYworIAorMjAwMi0wNi0xOCAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogUkVBRE1FOgorCSogZG9jL29wcm9maWxlLnhtbDogdXBkYXRlIGNyZWRpdHMKKyAKKzIwMDItMDYtMTYgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIHBwL29wX3RpbWVfb3B0aW9ucy5oOgorCSogcHAvb3BfdGltZV9vcHRpb25zLmNwcDogbW92ZSBwcml2YXRlIHN0dWZmIG91dCBvZgorCSAgb3B0aW9ucyBuYW1lc3BhY2UKKyAKKzIwMDItMDYtMTYgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIHBwL2NvdW50ZXJfdXRpbC5jcHA6IHN0b3Agd2hlbiB3ZSByZWFjaCB0aGUgZmlyc3QKKwkgIGF2YWlsYWJsZSBjb3VudGVyIGZvciBzb3J0aW5nCisKKwkqIHBwL29wX3RvX3NvdXJjZS5jcHA6IHVzZSBhYnNvbHV0ZSBzYW1wbGUgZmlsZSBuYW1lIAorCisJKiBwcC9zYW1wbGVzX2ZpbGUuY3BwOiBiZXR0ZXIgZXJyb3IgbWVzc2FnZQorCisyMDAyLTA2LTE2ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgorCisJKiB2YXJpb3VzOiByZW1vdmUgc3B1cmlvdXMgPT0gZmFsc2UsID09IHRydWUKKyAKKzIwMDItMDYtMTUgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIGRhZS9vcHJvZmlsZWQuYzoKKwkqIGxpYm9wL29wX2ludGVyZmFjZS5oOgorCSogbGlib3ArKy9vcF9wcmludF9ldmVudC5oOgorCSogbW9kdWxlL29wcm9maWxlLmM6IGRlZmluZSBhIGJ1ZmZlciBoZWFkIGZvciB0aGUgbW9kdWxlCisJICBidWZmZXIgaW50ZXJmYWNlLCBhbmQgdXNlIGl0CisgCisJKiBtb2R1bGUvTWFrZWZpbGUuaW46IG9vcHMsIGluc3RhbGwgdGhlIG1vZHVsZSBwcm9wZXJseQorIAorMjAwMi0wNi0xNSAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogbGlib3AvTWFrZWZpbGUuaW46CisJKiBsaWJvcC9vcF9jcHVfdHlwZS5oOgorCSogbGlib3Avb3BfY3B1X3R5cGUuYzogbmV3IGZpbGVzIHNwbGl0IG91dCwgZGVmaW5lcworCSAgY2hhbmdlZAorCisJKiBkYWUvb3BkX3Byb2MuYzoKKwkqIGRhZS9vcGRfc2FtcGxlX2ZpbGVzLmM6CisJKiBkYWUvb3Byb2ZpbGVkLmM6CisJKiBndWkvb3Byb2Zfc3RhcnQuY3BwOgorCSogbGlib3Avb3BfZXZlbnRzLmg6IAorCSogbGlib3Avb3BfZXZlbnRzLmM6IAorCSogbGlib3Avb3BfZXZlbnRzX2Rlc2MuaDoKKwkqIGxpYm9wL29wX2V2ZW50c19kZXNjLmM6IAorCSogbGlib3Avb3BfaW50ZXJmYWNlLmg6CisJKiBsaWJvcCsrL29wX3ByaW50X2V2ZW50Lmg6IAorCSogbW9kdWxlL29wcm9maWxlLmg6CisJKiBtb2R1bGUveDg2L29wX25taS5jOiBjaGFuZ2VzIGZyb20gYWJvdmUKKyAKKzIwMDItMDYtMTUgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIE1ha2VmaWxlLmluOiBjb21waWxlIG1vZHVsZSBlYXJseSBhcyBpdCdzIG1vc3QKKwkgIGxpa2VseSB0byBmYWlsCisgCisJKiBUT0RPOiB1cGRhdGUKKyAKKwkqIGRvYy9vcHJvZmlsZS54bWw6CisJKiBjb25maWd1cmUuaW46IHJlbW92ZSB1bm5lZWRlZCAtLXdpdGgtY2MKKyAKKwkqIG1vZHVsZS94ODYvTWFrZWZpbGUuaW46IHVzZSBVU0VfU1RBTkRBUkRfQVNfUlVMRQorIAorCSogbW9kdWxlL3g4Ni9vcF9ubWkuYzogYWRkIHByZWVtcHRpb24gZXhjbHVzaW9uCisKKzIwMDItMDYtMTUgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIGRhZS9vcGRfcGFyc2VfcHJvYy5jOiByZW1vdmUgRklYTUUuIFdlIGFyZSBmaW5lIHRvCisJICBhc3N1bWUgZmlyc3QgZW50cnkgaW4gbWFwcyBpcyB0aGUgZXhlY3V0YWJsZSwgYmVjYXVzZQorCSAgdGhpcyBpcyBleGFjdGx5IHdoYXQgdGhlIGtlcm5lbCBkb2VzIChzZWUgL3Byb2MvcGlkL2V4ZSkKKyAKKzIwMDItMDYtMTUgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIHBwL29wcm9mcHAuY3BwOiBjYWxsIGNoZWNrX210aW1lKCkgY29ycmVjdGx5CisJICBmb3Igc2hhcmVkIGxpYnJhcmllcworIAorMjAwMi0wNi0xNCAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogbGlib3Avb3BfZXZlbnRzLmM6IGFkZCB3YXJuaW5nCisgCisJKiBtb2R1bGUvTWFrZWZpbGUuaW46IGxpbmsgYWdhaW5zdCBsaWJvcC5hIGxpa2UgSSBtZWFudCB0bworIAorCSogbW9kdWxlL29wcm9maWxlLmg6CisJKiBtb2R1bGUvb3Byb2ZpbGUuYzogcmVhZGFiaWxpdHkgY2xlYW51cAorIAorMjAwMi0wNi0xMSAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogbW9kdWxlL2NvbXBhdC5oOgorCSogbW9kdWxlL3g4Ni9hcmNoX2NvbXBhdC5oOiByZW1vdmUgYXJjaF9jb21wYXQuaCwKKwkgIGFkZCBCVUdfT04oKQorCisJKiBtb2R1bGUvb3BfdXRpbC5jOiByZXR1cm4gLUVJTlZBTCBub3QgMSBmcm9tIGNoZWNrX3JhbmdlKCkgCisKKwkqIG1vZHVsZS9vcHJvZmlsZS5jOiB1c2UgQlVHX09OKCkgaW4gcmVsZWFzZSBmdW5jdGlvbnMsCisJICBmaXggdXNlIG9mIGNoZWNrX3JhbmdlLCByZW1vdmUgc3B1cmlvdXMgY2hlY2sgZm9yIG1hbGxvYworCSAgZmFpbHVyZSAoYWxyZWFkeSBjaGVja2VkKQorCisJKiBtb2R1bGUvb3Byb2ZpbGUuaDogY2xhcmlmeSBBUEkgCisKKwkqIG1vZHVsZS94ODYvb3BfbXNyLmg6IG5ldyBmaWxlLCBNU1IgYmFjay1jb21wYXQKKworCSogbW9kdWxlL3g4Ni9vcF9ubWkuYzoKKwkqIG1vZHVsZS94ODYvb3BfYXBpYy5jOiB1c2UgaXQKKyAKKzIwMDItMDYtMTAgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIFRPRE86IHVwZGF0ZQorIAorCSogY29uZmlndXJlLmluOiByZW1vdmUgb2xkIGNoZWNrcyB3ZSBkb24ndCBuZWVkLgorCSAgQWRkIHRvIEVYVFJBX0NGTEFHUyBub3QgS0NGTEFHUyAKKworCSogbW9kdWxlL01ha2VmaWxlLmluOiB1cGRhdGUgdG8gdXNlIFJ1bGVzLm1ha2UgYW5kCisJICBrZXJuZWwgcnVsZXMuCisgCisJKiBtb2R1bGUvb3BfaW5pdC5jOiBtYWtlIHRoaXMgb25lIGluY2x1ZGUga2VybmVsIG1vZHZlcnNpb24KKwkgIHN0dWZmIGZvciAyLjIKKyAKKwkqIG1vZHVsZS9vcHJvZmlsZS5oOiByZW1vdmUgX19jYWNoZWxpbmVfYWxpZ25lZCBpbiB3cm9uZyBwbGFjZQorCisJKiBtb2R1bGUveDg2L01ha2VmaWxlLmluOiB1c2UgUnVsZXMubWFrZSAoaGFja3kpCisKKwkqIG1vZHVsZS94ODYvYXJjaC5tYWs6IHJlbW92ZQorIAorCSogbW9kdWxlL3g4Ni9vcF9maXhtYXAuYzogYWRkIG1pc3NpbmcgaGVhZGVyCisgCisJKiBtb2R1bGUveDg2L29wX3N5c2NhbGxzLmM6IG15X3N5c19leGl0IGlzIG5vdCBzdGF0aWMKKyAKKzIwMDItMDYtMDkgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGxpYnV0aWwrKy9jdmVyYi5oOgorCSogbGlidXRpbCsrL2N2ZXJiLmNwcDogY3ZlcmIgb3N0cmVhbSBpbml0aWFsaXphdGlvbnMKKwkqIHBwL29wX21lcmdlLmNwcDoKKwkqIHBwL29wX3RpbWVfb3B0aW9ucy5jcHA6CisJKiBwcC9vcF90b19zb3VyY2Vfb3B0aW9ucy5jcHA6CisJKiBwcC9vcHJvZnBwX29wdGlvbnMuY3BwOiB1c2UgaXQKKworCSogdXRpbHMvTWFrZWZpbGUuaW46IGZpeCBhIHR5cG8gaW4gbGliIGRlcGVuZGVuY2llcworCisyMDAyLTA2LTA3ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBUT0RPOiB1cGRhdGUKKworCSogcHAvc2FtcGxlc19jb250YWluZXIuY3BwOgorCSogcHAvc2FtcGxlc19jb250YWluZXIuaDogYWRkIGFuIGhpbnQgcGFyYW1ldGVyIHRvIGFkZCgpCisJICB1c2VkIHRvIGF2b2lkIHJlY29yZGluZyBhbGwgc2FtcGxlcy4KKwkqIHBwL29wcm9mcHAuY3BwOiB1c2UgaXQgZm9yIHRoZSAtcyBvcHRpb24uIFRoaXMgY2hhbmdlCisJICBzbGlnaHRseSBiZWhhdmlvciBvZiBvcHJvZnBwIC1zLCBub3cgcGVyY2VudCBhcmUgcmVsYXRpdmUKKwkgIHRvIHRoZSBzZWxlY3RlZCBzeW1ib2wsIG5vdCB0byB0aGUgd2hvbGUgc2FtcGxlcyBmaWxlLgorCSAgUGVyZm9ybWFuY2Ugb2Ygb3Byb2ZwcCAtcyBhcmUgaW1wcm92ZWQgYSBsb3QgKDQwIHRpbWVzIG9uIHZtbGludXgpCisKKwkqIHV0aWxzL01ha2VmaWxlLmluOiBtaXNzaW5nIGxpYnMgZGVwZW5kZW5jaWVzCisKKzIwMDItMDYtMDcgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIHBwL01ha2VmaWxlLmluOgorCSogZGFlL01ha2VmaWxlLmluOgorCSogZ3VpL01ha2VmaWxlLmluOiB1cGRhdGUgZGVwZW5kZW5jaWVzIGZvciBsaWJyYXJ5CisKKzIwMDItMDYtMDcgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGxpYm9wdCsrL3BvcHRfb3B0aW9ucy5jcHA6CisJKiBsaWJvcHQrKy9wb3B0X29wdGlvbnMuaDogbWVtb3J5IGxlYWsgZml4CisKKzIwMDItMDYtMDcgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGxpYnV0aWwrKy9NYWtlZmlsZS5pbjogZml4IGJmZCBjb21waWxhdGlvbiBwcm9ibGVtCisJICB3aXRoIGdjYyA+PSAzLjAgYW5kIG9sZCBiZmQuaAorCSogbW9kdWxlL01ha2VmaWxlLmluOgorCSogbW9kdWxlL3g4Ni9NYWtlZmlsZS5pbjogZml4IC1XZXJyb3IgdHlwbworCSogcHAvb3BfbWVyZ2UuY3BwOgorCSogcHAvb3BfdGltZV9vcHRpb25zLmNwcDoKKwkqIHBwL29wX3RvX3NvdXJjZV9vcHRpb25zLmNwcDoKKwkqIHBwL29wcm9mcHBfb3B0aW9ucy5jcHA6IHdvcmsgYXJvdW5kIGZvciBjdmVyYgorCSAgaW5pdGlhbGlzYXRpb25zIGFuZCBnY2MgMi45MS4KKwkqIHBwL29wX3RvX3NvdXJjZS5jcHA6IHVzZSB0aGUgcmlnaHQgY29tYW5kIGxpbmUgYXJndW1lbnQuCisKKzIwMDItMDYtMDcgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIFRPRE86IHVwZGF0ZQorCisJKiBsaWJ1dGlsKysvdXRpbGl0eS5oOiBmaXggc3R1cGlkIGJ1ZywgYWRkIHNjb3BlZF9hcnJheQorCisJKiBsaWJ1dGlsKysvb3BfYmZkLmg6CisJKiBsaWJ1dGlsKysvb3BfYmZkLmNwcDogdXNlIGl0CisKKzIwMDItMDYtMDcgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIGxpYnV0aWwrKy91dGlsaXR5Lmg6IGFkZCBhIHNjb3BlZF9wdHIKKworCSogcHAvb3BfdG9fc291cmNlLmNwcDoKKwkqIHBwL3NhbXBsZXNfY29udGFpbmVyLmg6CisJKiBwcC9zYW1wbGVzX2NvbnRhaW5lci5jcHA6IHVzZSBpdAorCisyMDAyLTA2LTA3ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgorCisJKiBkYWUvb3BkX2tlcm5lbC5jOiByZW1vdmUgc29tZSBkdXBsaWNhdGUgY29kZQorIAorMjAwMi0wNi0wNyAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogcHAvb3BwX3N5bWJvbC5jcHA6IGtpbGwgbGFzdCBvZiB0aGUgYWNjdXJzZWQgY2hhcgorCSAgYXJyYXlzCisKKzIwMDItMDYtMDcgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIGxpYnV0aWwrKy9vcF9iZmQuY3BwOgorCSogbGlidXRpbCsrL29wX2JmZC5oOgorCSogbGlidXRpbCsrL3ZlcmJvc2Vfb3N0cmVhbS5oOgorCSogcHAvb3BfbWVyZ2UuY3BwOgorCSogcHAvb3BfdGltZV9vcHRpb25zLmNwcDoKKwkqIHBwL29wcm9mcHBfb3B0aW9ucy5jcHA6CisJKiBwcC9vcF90b19zb3VyY2Vfb3B0aW9ucy5jcHA6IHJlbW92ZSB2ZXJib3NlX29zdHJlYW0KKwkgIGluIGZhdm91ciBvZiBhIG11Y2ggc2ltcGxlciBzb2x1dGlvbgorIAorCSogbW9kdWxlL29wcm9maWxlLmg6IHJlbW92ZSBkZWFkIHByb3RvdHlwZQorIAorMjAwMi0wNi0wNiAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogbW9kdWxlL3g4Ni9NYWtlZmlsZS5pbjoKKwkqIG1vZHVsZS9NYWtlZmlsZS5pbjogcmVtb3ZlIDIuOTEgY2hlY2ssIGFkZCAyLjUgY2hlY2sKKyAKKwkqIG1vZHVsZS9jb21wYXQyMi5oOgorCSogbW9kdWxlL2NvbXBhdDI0Lmg6CisJKiBtb2R1bGUvYXBpY191cF9jb21wYXQuaDogbW92ZSB0byAuLi4KKworCSogbW9kdWxlL3g4Ni9vcF9hcGljLmg6CisJKiBtb2R1bGUveDg2L2FwaWNfY29tcGF0Lmg6IC4uLiBoZXJlCisgCisJKiBtb2R1bGUvY29tcGF0Lmg6IG1vdmUgYXJjaCBzdHVmZiB0byAuLi4KKworCSogbW9kdWxlL3g4Ni9hcmNoX2NvbXBhdC5oOiAuLi4gaGVyZQorIAorMjAwMi0wNi0wNiAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogY29uZmlndXJlLmluOiByZW1vdmUgZ2NjIDIuOTEgY2hlY2sKKwkqIG1ha2UuY29tbW9uLmluOiB1c2UgLVdlcnJvciBldmVuIGZvciBnY2MgMi45MQorCSogZ3VpL29wcm9mX3N0YXJ0LmNwcDoKKwkqIGxpYnV0aWwrKy9vcF9iZmQuY3BwOgorCSogcHAvZGVyaXZlX2ZpbGVzLmNwcDoKKwkqIHBwL29wX3RvX3NvdXJjZS5jcHA6IHNtYWxsIHR3ZWFrIGZvciBnY2MgMi45MSBhbmQgLVdlcnJvcgorCisyMDAyLTA2LTA2ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgorCisJKiBtb2R1bGUvb3BfcnRjLmM6IHVzZSBjaGVja19yYW5nZQorIAorMjAwMi0wNi0wNiAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogY29uZmlndXJlLmluOiBmaXggdHlwbyBzbyBub24tMi45MSBpcyBkZXRlY3RlZAorIAorCSogbW9kdWxlL01ha2VmaWxlLmluOgorCSogbW9kdWxlL3g4Ni9NYWtlZmlsZS5pbjogZW5hYmxlIC1XZXJyb3IKKworCSogbW9kdWxlL29wX2RuYW1lLmM6CisJKiBtb2R1bGUvb3Byb2ZpbGUuaDoKKwkqIG1vZHVsZS9vcHJvZmlsZS5jOgorCSogbW9kdWxlL29wX3V0aWwuaDoKKwkqIG1vZHVsZS9vcF91dGlsLmM6CisJKiBtb2R1bGUveDg2L29wX25taS5jOiBhZGQgb3BfdXRpbC5oLCBtYWtlCisJICBvcF9jaGVja19yYW5nZSBhIGZ1bmN0aW9uIGNoZWNrX3JhbmdlCisgCisyMDAyLTA2LTA2ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgorCisJKiBtb2R1bGUvTWFrZWZpbGUuaW46IHVzZSBAQ0NALCBhZGQgY2xlYW4gZm9yIHg4NgorCisJKiBtb2R1bGUvY29tcGF0MjQuaDogYWRkIHBhdGhfaGFzaCBwcm90b3R5cGUgCisgCisJKiBtb2R1bGUveDg2L01ha2VmaWxlLmluOiB1c2UgQENDQCwgbWFrZSBzdXJlCisJICBvcHRpb25zIGdldCBwaWNrZWQgdXAKKyAKKzIwMDItMDYtMDYgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIGxpYnV0aWwvb3BfZ2V0X3RpbWUuYzogcmV0dXJuICIiIG5vdCBOVUxMCisJICBvbiBmYWlsdXJlLCBzbyB3ZSBkb24ndCB0cnkgdG8gcHJpbnRmIE5VTEwKKyAKKwkqIG1vZHVsZS9vcF9kbmFtZS5jOiBkb19wYXRoX2hhc2hfMl80IHNob3VsZCBub3QgYmUgc3RhdGljIG5vdyAKKworCSogbW9kdWxlL29wcm9maWxlLmM6IGFkZCBjb25zdAorIAorMjAwMi0wNi0wNiAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogbW9kdWxlL3g4NjogbmV3IGRpcmVjdG9yeSwgZm9yIG5vdyBzb21lIHNtYWxsIHBvcnRpb24KKwkgIG9mIHg4NiBkZXBlbmRhbnQgY29kZSByZW1haW5zIGluIG1vZHVsZS8qIG1haW5seSBpbgorCSAgb3Byb2ZpbGUuW2NoXS4gVGhpcyBwYXRjaCBhbHNvIGRvbid0IHRha2UgY2FyZSBhYm91dAorCSAgbGlib3AvKiB3aGljaCBhcmUgYXJjaGl0ZWN0dXJlIGRlcGVuZGFudAorCisJKiBtb2R1bGUvb3BfYXBpYy5jOgorCSogbW9kdWxlL29wX25taS5jOgorCSogbW9kdWxlL29wX3N5c2NhbGxzLmM6CisJKiBtb2R1bGUvb3Byb2ZpbGVfbm1pLlM6CisJKiBtb2R1bGUvb3BfZml4bWFwLmM6IG1vdmUgdGhpcyBmaWxlIHRvIC4uLgorCSogbW9kdWxlL3g4Ni9vcF9hcGljLmM6CisJKiBtb2R1bGUveDg2L29wX25taS5jOgorCSogbW9kdWxlL3g4Ni9vcF9zeXNjYWxscy5jOgorCSogbW9kdWxlL3g4Ni9vcHJvZmlsZV9ubWkuUzoKKwkqIG1vZHVsZS94ODYvb3BfZml4bWFwLmM6IHRoZXNlIG5ldyBmaWxlcworCSogbW9kdWxlL3g4Ni9vcF9hcGljLmM6IHg4NiBzdHVmZgorCSogbW9kdWxlL3g4Ni9hcmNoLm1hazogc3BlY2lmaWMgYXJjaCBtYWtlZmlsZSBmcmFnbWVudAorCSogbW9kdWxlL29wX2luaXQuYzogbW92ZSBjcHUgZGV0ZWN0aW9uIGNvZGUgLi4uCisJKiBtb2R1bGUveDg2L2NwdV90eXBlLmM6IGhlcmUKKwkqIG1vZHVsZS9NYWtlZmlsZTogaGFuZGxlIGFyY2ggc3ViLWRpcgorCSogbW9kdWxlL3g4Ni8uY3ZzaWdub3JlOiBuZXcKKwkqIG1vZHVsZS9vcHJvZmlsZS5oOiBkZWNsYXJlIHRoZSBpbnRlcmZhY2UgdG8gdGhlCisJICBhcmNoaXRlY3R1cmUgZGVwZW5kYW50IGNvZGUKKworCSogTWFrZWZpbGUuaW46CisJKiBjb25maWd1cmUuaW46IGhhbmRsZSBtb2R1bGUvYXJjaAorCSogbWFrZS5jb21tb24uaW46IGF2b2lkIC1XZXJyb3Igd2l0aCBnY2MgMi45MQorCSogbWFrZS5kZXBzOiBzbWFsbCB0d2VhayBhbGxvd2luZyB0byB1c2UgaXQgaW4gbW9kdWxlCisKKzIwMDItMDYtMDYgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIGNvbmZpZ3VyZS5pbjogdXNlIENYWElOQ0xVREVTIG5vdCBDWFhGTEFHUworCWZvciBpbmNsdWRpbmcgc3N0cmVhbQorIAorCSogbWFrZS5jb21tb24uaW46IHJlbW92ZSBkdXBsaWNhdGUgLWcgLU8yCisgCisJKiBpbmNsdWRlL3NzdHJlYW06IGZpeCBjb21waWxlciB3YXJuaW5nIHRvCisJICBhbGxvdyAtV2Vycm9yCisgCisJKiBsaWJ1dGlsL29wX2ZpbGUuYzoKKwkqIGxpYnV0aWwvb3BfZmlsZWlvLmg6CisJKiBsaWJ1dGlsL29wX2ZpbGVpby5jOiBtb3JlIEFQSSBmaXhhZ2UKKworCSogbGlidXRpbCsrL2ZpbGVfbWFuaXAuY3BwOiBhZGQgbWlzc2luZyBoZWFkZXIKKyAKKzIwMDItMDYtMDYgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIG1ha2UuY29tbW9uLmluOiBlbmFibGUgLVdlcnJvciBmb3IgQ1ZTIGJ1aWxkcworCShub3QgaW4gbW9kdWxlLykKKyAKKwkqIGRhZS9vcGRfaW1hZ2UuYzoKKwkqIGRhZS9vcHJvZmlsZWQuYzoKKwkqIGxpYnV0aWwvb3BfZGV2aWNlaW8uaDoKKwkqIGxpYnV0aWwvb3BfZGV2aWNlaW8uYzogQVBJIGZpeGVzCisKKwkqIGxpYnV0aWwrKy9maWxlX21hbmlwLmg6CisJKiBsaWJ1dGlsKysvZmlsZV9tYW5pcC5jcHA6IAorCSogbGlidXRpbCsrL29wX2JmZC5oOgorCSogbGlidXRpbCsrL29wX2JmZC5jcHA6CisJKiBwcC9vcF90aW1lLmNwcDoKKwkqIHBwL29wcm9mcHAuY3BwOiAKKwkqIGxpYnV0aWwvb3BfbG9ja2ZpbGUuYzogCisJKiBsaWJ1dGlsL29wX2ZpbGUuaDoKKwkqIGxpYnV0aWwvb3BfZmlsZS5jOiBhZGQgb3BfZmlsZV9yZWFkYWJsZSgpLAorCSAgQVBJIGZpeGVzIAorIAorMjAwMi0wNi0wNiAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogdXRpbHMvb3Bfc3RvcDogZmFpbCBlYXJseSBpZiAhIHJvb3QKKyAKKzIwMDItMDYtMDUgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIHBwLyo6IHMvT3V0cHV0U3ltYm9sL291dHB1dF9zeW1ib2wvLAorCSAgcy9PdXRTeW1iRmxhZy9vdXRzeW1iZmxhZy8KKyAKKzIwMDItMDYtMDUgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIHBwL29wX3RpbWVfb3B0aW9ucy5jcHA6CisJKiBwcC9vcF90aW1lX29wdGlvbnMuaDoKKwkqIHBwL29wX3RvX3NvdXJjZV9vcHRpb25zLmg6CisJKiBwcC9vcHJvZnBwX29wdGlvbnMuaDogZG9jdW1lbnQKKworMjAwMi0wNi0wNSAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogcHAvTWFrZWZpbGUuaW46CisJKiBwcC9jb3VudGVyX3V0aWwuaDoKKwkqIHBwL2NvdW50ZXJfdXRpbC5jcHA6IG1vdmUgZnJvbSAuLi4KKworCSogcHAvb3Byb2ZwcC5oOgorCSogcHAvb3Byb2ZwcF91dGlsLmNwcDogLi4uIGhlcmUgKHJlbW92ZWQpCisKKwkqIHBwL29wX3RpbWUuY3BwOgorCSogcHAvb3BfdGltZV9vcHRpb25zLmNwcDogCisJKiBwcC9vcF90b19zb3VyY2UuY3BwOiAKKwkqIHBwL29wcF9zeW1ib2wuaDogCisJKiBwcC9vcHJvZnBwLmNwcDoKKwkqIHBwL29wcm9mcHBfb3B0aW9ucy5oOiAKKwkqIHBwL29wcm9mcHBfb3B0aW9ucy5jcHA6IAorCSogcHAvc2FtcGxlc19jb250YWluZXIuaDogCisJKiBwcC9zYW1wbGVzX2NvbnRhaW5lci5jcHA6IAorCSogcHAvc2FtcGxlc19maWxlLmg6CisJKiBwcC9zYW1wbGVzX2ZpbGUuY3BwOiBjaGFuZ2VzIGZyb20gYWJvdmUKKworMjAwMi0wNi0wNSAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogbGlidXRpbCsrL2ZpbGVfbWFuaXAuaDoKKwkqIGxpYnV0aWwrKy9maWxlX21hbmlwLmNwcDogbW92ZSBvcHJvZmlsZSBzcGVjaWZpYyBzdHVmZgorCSAgdG8gLi4uCisgCisJKiBsaWJvcCsrL29wX21hbmdsaW5nLmg6CisJKiBsaWJvcCsrL29wX21hbmdsaW5nLmNwcDogLi4uIGhlcmUKKworCSogcHAvTWFrZWZpbGUuaW46CisJKiBwcC9vcF9iZmQuaDoKKwkqIHBwL29wX2JmZC5jcHA6IG1vdmUgdG8gLi4uCisgCisJKiBsaWJ1dGlsKysvTWFrZWZpbGUuaW46CisJKiBsaWJ1dGlsKysvb3BfYmZkLmg6CisJKiBsaWJ1dGlsKysvb3BfYmZkLmNwcDogLi4uIGhlcmUgCisgCisJKiBsaWJ1dGlsKysvdmVyYm9zZV9vc3RyZWFtLmg6IGFkZAorIAorCSogcHAvb3BfbWVyZ2UuY3BwOgorCSogcHAvb3BfdGltZS5jcHA6IAorCSogcHAvb3BfdGltZV9vcHRpb25zLmg6CisJKiBwcC9vcF90aW1lX29wdGlvbnMuY3BwOgorCSogcHAvb3BfdG9fc291cmNlLmNwcDogCisJKiBwcC9vcF90b19zb3VyY2Vfb3B0aW9ucy5oOgorCSogcHAvb3BfdG9fc291cmNlX29wdGlvbnMuY3BwOgorCSogcHAvb3Byb2ZwcC5oOiAKKwkqIHBwL29wcm9mcHAuY3BwOiAKKwkqIHBwL29wcm9mcHBfb3B0aW9ucy5oOgorCSogcHAvb3Byb2ZwcF9vcHRpb25zLmNwcDoKKwkqIHBwL29wcm9mcHBfdXRpbC5jcHA6CisJKiBwcC9zYW1wbGVzX2ZpbGUuaDogdmFyaW91cyBjaGFuZ2VzIGFuZAorCSAgY2xlYW51cHMgZnJvbSBhYm92ZQorIAorCSogcHAvZGVyaXZlX2ZpbGVzLmNwcDogcmVtb3ZlIG5vdyBkdXBsaWNhdGUgY29kZQorIAorMjAwMi0wNi0wNSAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogbGlidXRpbCsrL2ZpbGVfbWFuaXAuaDoKKwkqIGxpYnV0aWwrKy9maWxlX21hbmlwLmNwcDogc2ltcGxpZnkgYnV0IGRvbid0CisJICBicmVhayBhbHJlYWR5IGFic29sdXRlIHBhdGhzLCByZW1vdmUgZGVhZCBjb2RlCisgCisJKiBwcC9vcF90aW1lX29wdGlvbnMuaDoKKwkqIHBwL29wX3RpbWVfb3B0aW9ucy5jcHA6CisJKiBwcC9vcF90aW1lLmNwcDogcmVtb3ZlIGRlYWQgY29kZQorIAorCSogcHAvb3BfdG9fc291cmNlX29wdGlvbnMuaDogCisJKiBwcC9vcF90b19zb3VyY2Vfb3B0aW9ucy5jcHA6CisJKiBwcC9vcHJvZnBwX29wdGlvbnMuaDoKKwkqIHBwL29wcm9mcHBfb3B0aW9ucy5jcHA6IHZhcmlhYmxlIG5hbWUgdHdlYWtzCisKKwkqIHBwL01ha2VmaWxlLmluOgorCSogcHAvb3BfdG9fc291cmNlLmNwcDogCisJKiBwcC9vcHJvZnBwLmNwcDoKKwkqIHBwL29wcm9mcHAuaDoKKwkqIHBwL29wcm9mcHBfdXRpbC5jcHA6CisJKiBwcC9kZXJpdmVfZmlsZXMuaDoKKwkqIHBwL2Rlcml2ZV9maWxlcy5jcHA6IGZhY3RvciBjb21tYW5kLWxpbmUgZmlsZQorCSAgZGVyaXZhdGlvbiBndWVzc2luZyBvdXQKKyAKKzIwMDItMDYtMDQgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIGxpYm9wKysvb3BfcHJpbnRfZXZlbnQuY3BwOgorCSogcHAvb3BfYmZkLmg6IAorCSogcHAvb3BfdGltZV9vcHRpb25zLmNwcDogCisJKiBwcC9vcF90b19zb3VyY2Vfb3B0aW9ucy5jcHA6IAorCSogcHAvb3Byb2ZwcF9vcHRpb25zLmNwcDogZml4ZXMgZm9yIHN0ZAorIAorCSogcHAvTWFrZWZpbGUuaW46CisJKiBwcC9vcHJvZnBwLmg6CisJKiBwcC9vcHJvZnBwX3V0aWwuY3BwOgorCSogcHAvc2FtcGxlc19maWxlLmNwcDoKKwkqIHBwL29wcF9zeW1ib2wuaDoKKwkqIHBwL2NvdW50ZXJfYXJyYXkuaDoKKwkqIHBwL2NvdW50ZXJfYXJyYXkuY3BwOiBmYWN0b3Igb3V0IGNvdW50ZXJfYXJyYXkKKyAKKzIwMDItMDYtMDQgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIHBwL29wcm9mcHAuaDoKKwkqIHBwL3NhbXBsZXNfZmlsZS5jcHA6CisJKiBwcC9vcHJvZnBwX3V0aWwuY3BwOiByZW1vdmUgYSBzYW5pdHkgY2hlY2sKKwkgIHRoYXQgd2Fzbid0IHBhcnRpY3VsYXJseSB1c2VmdWwKKyAKKzIwMDItMDYtMDQgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIGxpYm9wKysvTWFrZWZpbGUuaW46CisJKiBsaWJvcCsrL29wX21hbmdsaW5nLmg6CisJKiBsaWJvcCsrL29wX21hbmdsaW5nLmNwcDoKKwkqIHBwL29wX21lcmdlLmNwcDoKKwkqIHBwL29wX3RpbWUuY3BwOgorCSogcHAvb3Byb2ZwcC5jcHA6IAorCSogcHAvb3Byb2ZwcC5oOiAKKwkqIHBwL29wcm9mcHBfdXRpbC5jcHA6IG1vdmUgbWFuZ2xlL3VubWFuZ2xlIHRvIGxpYm9wKysKKyAKKzIwMDItMDYtMDQgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIHBwL01ha2VmaWxlLmluOgorCSogcHAvb3BfdG9fc291cmNlLmNwcDoKKwkqIHBwL29wcF9zeW1ib2wuY3BwOgorCSogcHAvZGVtYW5nbGVfc3ltYm9sLmg6CisJKiBwcC9kZW1hbmdsZV9zeW1ib2wuY3BwOiBtb3ZlIHRoaXMgLi4uCisgCisJKiBsaWJ1dGlsKysvTWFrZWZpbGUuaW46CisJKiBsaWJ1dGlsKysvZGVtYW5nbGVfc3ltYm9sLmg6CisJKiBsaWJ1dGlsKysvZGVtYW5nbGVfc3ltYm9sLmNwcDogLi4uIHRvIGhlcmUKKworMjAwMi0wNi0wNCAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogbWFrZS5jb21tb24uaW46IAorCSogbWFrZS5kZXBzOiBzcGxpdCBvdXQgQ1hYSU5DTFVERVMKKyAKKwkqIE1ha2VmaWxlLmluOgorCSogY29uZmlndXJlLmluOgkKKwkqIGxpYm9wKysvTWFrZWZpbGUuaW46CisJKiBsaWJvcCsrL29wX3ByaW50X2V2ZW50Lmg6CisJKiBsaWJvcCsrL29wX3ByaW50X2V2ZW50LmNwcDoKKwkqIHBwL01ha2VmaWxlLmluOgorCSogcHAvb3Byb2ZwcC5oOgorCSogcHAvb3Byb2ZwcF91dGlsLmNwcDoKKwkqIHBwL3NhbXBsZXNfZmlsZS5jcHA6IHN0YXJ0IGxpYm9wKysgbGlicmFyeSwKKwkgIG1vdmUgb3BfcHJpbnRfZXZlbnQgdGhlcmUKKworCSogcHAvb3BfYmZkLmg6CisJKiBwcC9vcF9iZmQuY3BwOiAKKwkqIHBwL29wX3RpbWUuY3BwOiAKKwkqIHBwL29wX3RvX3NvdXJjZS5jcHA6IAorCSogcHAvb3Byb2ZwcC5jcHA6IAorCSogcHAvc2FtcGxlc19maWxlLmg6CisJKiBwcC9zYW1wbGVzX2ZpbGUuY3BwOiByZW1vdmUgYWxsIGtub3dsZWRnZSBvZgorCSAgaXNfa2VybmVsIGZyb20gb3BfYmZkLCBzb21lIG1pbm9yIGNsZWFudXBzCisgCisyMDAyLTA2LTA0ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgorCisJKiBwcC9vcF9iZmQuaDoKKwkqIHBwL29wX2JmZC5jcHA6CisJKiBwcC9zYW1wbGVzX2NvbnRhaW5lci5jcHA6IGtpbGwgYW5vdGhlciBjaGFyKgorIAorCSogcHAvb3V0c3ltYmZsYWcuaDogcmVkdWNlIGZha2UgZGVwZW5kZW5jaWVzIHdpdGgKKwkgIG5ldyBmaWxlLCBsaXR0bGUgY2xlYW51cAorCisJKiBwcC9NYWtlZmlsZS5pbjoKKwkqIHBwL2RlbWFuZ2xlX3N5bWJvbC5jcHA6CisJKiBwcC9vcF9tZXJnZS5jcHA6CisJKiBwcC9vcF90aW1lLmNwcDoKKwkqIHBwL29wX3RpbWVfb3B0aW9ucy5oOgorCSogcHAvb3BfdGltZV9vcHRpb25zLmNwcDoKKwkqIHBwL29wX3RvX3NvdXJjZS5jcHA6CisJKiBwcC9vcF90b19zb3VyY2Vfb3B0aW9ucy5oOgorCSogcHAvb3BfdG9fc291cmNlX29wdGlvbnMuY3BwOgorCSogcHAvb3BwX3N5bWJvbC5oOgorCSogcHAvb3Byb2ZwcC5oOgorCSogcHAvb3Byb2ZwcC5jcHA6CisJKiBwcC9vcHJvZnBwX29wdGlvbnMuaDoKKwkqIHBwL29wcm9mcHBfb3B0aW9ucy5jcHA6CisJKiBwcC9vcHJvZnBwX3V0aWwuY3BwOiBTb21lIG1vcmUgcmVmYWN0b3JpbmcuIE1vcmUgd29yaworCSAgbmVlZGVkLi4uCisgCisyMDAyLTA2LTAxICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgorCisJKiBkb2MvTWFrZWZpbGUuaW46IGZpeCBET0NESVIgKGZyb20gQWwgU3RvbmUpCisgCisyMDAyLTA2LTAxICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgorCisJKiBsaWJ1dGlsKysvZmlsZV9tYW5pcC5oOgorCSogbGlidXRpbCsrL2ZpbGVfbWFuaXAuY3BwOiBjbGFyaWZ5IEFQSQorIAorCSogcHAvb3Byb2ZwcC5jcHA6IGZpeCBidWcgNTYzMzI0IHJlc3VsdGluZyBmcm9tIGFib3ZlCisKKzIwMDItMDYtMDEgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIG1ha2UuY29tbW9uLmluOiBtYWtlIC0td2l0aC1leHRyYS1saWIgd29yayBhZ2FpbgorCisJKiBkYWUvb3BkX2ltYWdlLmg6CisJKiBkYWUvb3BkX2ltYWdlLmM6IGNvbW1lbnQgdHlwb3MKKworCSogZG9jL3NyY2RvYy9Eb3h5ZmlsZTogZ2VuZXJhdGUgUE5HIG5vdCBHSUYgCisgCisyMDAyLTA1LTIzICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBkb2Mvc3JjZG9jL0RveHlmaWxlOgorCSogbGlib3B0KysvcG9wdF9vcHRpb25zLmNwcDoKKwkqIGxpYm9wdCsrL3BvcHRfb3B0aW9ucy5oOgorCSogcHAvc3ltYm9sX2NvbnRhaW5lcl9pbXBsLmg6IHNtYWxsIGRveHlnZW4gdHdlYWsuCisKKzIwMDItMDUtMjMgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGRhZS9vcHJvZmlsZWQuYzogbWlub3IgYnVnIHdoZW4gYmFja2luZyB1cCBzYW1wbGVzIGRpcgorCisJKiBsaWJvcHQrKy9wb3B0X29wdGlvbnMuaDoKKwkqIGxpYm9wdCsrL3BvcHRfb3B0aW9ucy5jcHA6IGF2b2lkIHRvIGZvcmNlIGNsaWVudCBjb2RlIHRvCisJICBleHBsaWNpdGx5IHNlbGVjdCB0aGUgb3B0aW9uIHRlbXBsYXRlIHNwZWNpYWxpemF0aW9ucy4KKworCSogcHAvb3BfbWVyZ2UuY3BwOgorCSogcHAvb3BfdGltZS5jcHA6CisJKiBwcC9vcF90b19zb3VyY2UucHA6CisJKiBwcC9vcHJvZnBwLmNwcDogd2Ugbm8gbG9uZ2VyIG5lZWQgZXhwbGljaXQgdGVtcGxhdGUKKwkgIGluc3RhbnRpYXRpb25zIGZvciBvcHRpb25zCisKKzIwMDItMDUtMjIgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIHBwL29wcm9mcHAuY3BwOiBmaXggYSBtaXNzaW5nIFNBTVBMRVNfRElSIHByZXBlbmQKKworMjAwMi0wNS0yMiAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogbGliL3V0aWwvb3BfZmlsZS5jOgorCSogdXRpbHMvb3Bfc2Vzc2lvbi5jOiByZXN0b3JlIGFjY2lkZW50YWxseSBsb3N0CisJICBjb21taXRzIDoKKworCTIwMDItMDUtMDUgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkJKiBkYWUvb3Bfc2Vzc2lvbi5jOiB0d2VhayBlcnJvciBtZXNzYWdlIHdoZW4gc2Vzc2lvbiBhbHJlYWR5CisJCSAgZXhpc3QuIEF2b2lkIHRvIG9wX2R1bXAgd2hlbiBwcm9maWxlciBpcyBub3Qgc3RhcnRlZC4KKworCTIwMDItMDUtMDUgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkJKiBkYWUvb3Bfc2Vzc2lvbi5jOiBkbyBub3QgY3JlYXRlIGVtcHR5IHNlc3Npb24gZGlyZWN0b3J5CisJCSAgYW5kIGJhY2t1cCBvcHJvZmlsZWcubG9nIHRvbworCQkqIGRhZS9vcGRfdXRpbC5jOgorCQkqIG9wX3VzZXIuaDogbWlub3IgcmVsYXRlZCBjaGFuZ2UKKworMjAwMi0wNS0yMiAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogZGFlLyo6IGNvbXBsZXRlIHJlLW9yZ2FuaXNhdGlvbiBvZiBmaWxlcworIAorCSogbGlib3Avb3BfY29uZmlnLmg6IGFkZCBWTUFfT0ZGU0VUIGFuZCBNQVhfTU9EVUxFUworCSAgdHVuYWJsZXMKKyAKKzIwMDItMDUtMjIgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGd1aToKKwkqIGxpYmRiOgorCSogbGlib3B0Kys6CisJKiBsaWJ1dGlsOgorCSogbGlidXRpbCsrOgorCSogb3Byb2ZfcmVwb3J0OgorCSogcHA6IGFsbCBDL2MrKyBzb3VyY2UvaGVhZGVyIGZpbGUsIGZpeCBhIGZldyBkb3h5Z2VuIHdhcm5pbmcsCisJICBtYW55IGNvbnN0IHR5cGUgdG8gIHR5cGUgY29uc3QgKyBvdGhlciBtaW5vciBjb21lc3RpYyBjaGFuZ2UuCisKKzIwMDItMDUtMjIgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIGxpYm9wdCsrL3BvcHRfb3B0aW9ucy5jcHA6IG15IHVzdWFsIGJvcmluZyBzaGl0CisgCisJKiBsaWJvcHQrKy9wb3B0X29wdGlvbnMuaDogZG9jdW1lbnQKKworCSogbGlidXRpbC9vcF9wb3B0Lmg6IFBPUFRfVEFCTEVFTkQgbWlzc2luZyBpbiBzb21lIHBvcHQuaAorIAorCSogVE9ETzogdXBkYXRlCisgCisJKiBkb2Mvb3Byb2ZpbGUueG1sOiBhZGQgc29tZSB0byBhY2suaHRtbAorIAorCSogbGlib3Avb3BfZXZlbnRzX2Rlc2MuYzogZml4IGxvbmctc3RhbmRpbmcgdHlwbworIAorMjAwMi0wNS0yMiAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogY29uZmlndXJlLmluOgorCSogTWFrZWZpbGUuaW46CisJKiBsaWJvcHQrKy8qOiBuZXcgZGlyZWN0b3J5LCBjb21tYW5kIGxpbmUgb3B0aW9ucyBoYW5kbGluZworCQorCSogbWFrZS5jb21tb24uaW46CisJKiBwcC9NYWtlZmlsZS5pbjoKKwkqIHBwL29wX21lcmdlLmNwcDoKKwkqIHBwL29wX3RpbWUuY3BwOgorCSogcHAvb3BfdG9fc291cmNlLmNwcDoKKwkqIHBwL29wcm9mcHAuY3BwOgorCSogcHAvb3Byb2ZwcC5oOgorCSogcHAvb3Byb2ZwcF91dGlsLmNwcDogdXNlIGxpYnBvcHQrKworCisyMDAyLTA1LTE5ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBUT0RPOiB1cGRhdGUKKworMjAwMi0wNS0xOSAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogcHAvb3BfYmZkLmNwcDogZml4IGJ1ZyBjb21pbmcgZnJvbSBtaXMtcGxhY2VkCisJc3RybGVuKCkgYnJhY2tldHMKKyAKKwkqIHBwL29wX2JmZC5oOgorCSogcHAvb3BfYmZkLmNwcDoga2lsbCBzb21lIG1vcmUgY2hhcltdcyB0byBhdm9pZCBzaWxseQorCSAgYnVncyBsaWtlIHRoZSBhYm92ZQorIAorCSogUkVBRE1FOiBzb21lIG1pbm9yIGNoYW5nZQorIAorMjAwMi0wNS0xOCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogbW9kdWxlL2NvbXBhdC5oOgorCSogbW9kdWxlL29wX2ZpeG1hcC5jOgorCSogbW9kdWxlL29wX3N5c2NhbGxzLmM6CisJKiBtb2R1bGUvb3Byb2ZpbGUuYzoKKwkqIG1vZHVsZS9vcHJvZmlsZS5oOgorCSogbW9kdWxlL29wcm9maWxlX25taS5TOiBmaXggbW9kdWxlIHVwIHRvIGtlcm5lbCAyLjUuMTUKKworCSogbW9kdWxlL2NvbXBhdDIyLmg6IHNtYWxsIGZpeCBmb3IgMi4yCisKKzIwMDItMDUtMTcgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIG1vZHVsZS9vcF9maXhtYXAuYzogcmV2ZXJ0IG15IGxhc3QgY2hhbmdlIDovLiBTb21ldGhpbmcgaXMKKwkgIHdyb25nIHdpdGggb3Byb2ZpZWwgYW5kIDIuNS4xNSBidXQgZWxzZXdoZXJlCisKKzIwMDItMDUtMTcgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIG1vZHVsZS9vcF9maXhtYXAuYzogZml4IGEgbG9uZyB0aW1lIG91dHN0YW5kaW5nIGJ1ZywKKwkgIHdlIHRlc3RlZCBiaXQgaW4gdGhlIGFkZHJlc3Mgb2YgeDg2X2NhcGFiaWxpdHkKKwkgIHJhdGhlciB0aGUgY2FwYWJpbGl0eSBpdHNlbGYuCisKKzIwMDItMDUtMTcgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGRhZS9vcGRfcHJvYy5jOiBmcm9tIGEgdHlwbyBpbiBvcGRfcHV0X2ltYWdlX3NhbXBsZXMgZmlyc3QKKwkgIGluY29taW5nIHNhbXBsZXMgZm9yIGVhY2ggaW1hZ2Ugd2FzIGFsd2F5cyBpZ25vcmVkLiBBcworCSAgYSBzaWRlIGVmZmVjdCBpZiBvcGRfb3Blbl9zYW1wbGVfZmlsZSgpIGZhaWwgdGhlIGRhZW1vbgorCSAgd2lsbCBkaWUgd2l0aCBhIHNlZyBmYXVsdC4gVGhpcyBiZWhhdmlvciBpcyBpbiAwLjIgcmVsZWFzZS4KKwkgIGZpeCAjNTU2OTE4CisKKzIwMDItMDUtMTcgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIHV0aWxzL29wX3N0YXJ0OiB0eXBvIGluIGRldGVjdCBzdGFsZSBsb2NrIGZpbGUKKworMjAwMi0wNS0xNyAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogcHAvKjogZ2NjIDMuMSBjb21waWxhdGlvbi4KKworMjAwMi0wNS0xNiAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogZGFlL29wZF9wcm9jLmM6IGNsb3NlIHNhbXBsZXMgZmlsZXMgYXQgY2xlYW51cAorCisJKiBsaWJkYi9kYi1pbnNlcnQuY3BwOiBpZiB3ZSBkb24ndCBsb2NrIHRoZSBmaWxlIHdoZW4gY3JlYXRpbmcKKwkgIHRoZSByb290IHdlIG11c3QgZW5zdXJlIHRoYW4gaW5pdGlhbGl6YXRpb24gaXMgYXRvbWljCisKKwkqIHBwL29wX2JmZC5jcHA6CisJKiBwcC9vcF9iZmQuaDoKKwkqIHBwL29wX3RpbWUuY3BwOgorCSogcHAvb3BfdG9fc291cmNlLmNwcDoKKwkqIHBwL29wcm9mcHAuY3BwOgorCSogcHAvb3Byb2ZwcC5oOgorCSogcHAvb3Byb2ZwcF91dGlsLmNwcDoKKwkqIHBwL3NhbXBsZXNfZmlsZS5jcHA6CisJKiBwcC9zYW1wbGVzX2ZpbGUuaDogbW92ZSBhbGwgY29oZXJlbmN5IGNoZWNrIGJldHdlZW4gYSBvcF9iZmQgYW5kCisJICBpdCdzIHJlbGF0ZWQgb3BwX3NhbXBsZXNfZmlsZXMgb3V0c2lkZSB0aGVzZSBjbGFzcworCisJKiBwcC9zYW1wbGVzX2NvbnRhaW5lci5jcHA6IHNtYWxsIG1vZGlmaWNhdGlvbiBhbGxvd2luZyB0byBwcml2YXRpemUKKwkgIG9wX2JmZDo6aWJmZCBwb2ludGVyLgorCisyMDAyLTA1LTE2ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgorCisJKiBsaWJ1dGlsL29wX2xvY2tmaWxlLmM6IGRldGVjdCBhbmQgcmVtb3ZlIHN0YWxlCisJICBsb2NrIGZpbGVzCisKKwkqIHV0aWxzL29wX3N0YXJ0OiBkZXRlY3Qgc3RhbGUgbG9jayBmaWxlCisgCisyMDAyLTA1LTE1ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgorCisJKiBwcC9NYWtlZmlsZS5pbjoKKwkqIHBwL29wX3RpbWUuY3BwOgorCSogcHAvb3BfdG9fc291cmNlLmNwcDoKKwkqIHBwL29wcm9mcHAuY3BwOgorCSogcHAvc2FtcGxlc19jb250YWluZXIuaDoKKwkqIHBwL3NhbXBsZXNfY29udGFpbmVyLmNwcDoKKwkqIHBwL3NhbXBsZV9jb250YWluZXJfaW1wLmg6CisJKiBwcC9zYW1wbGVfY29udGFpbmVyX2ltcC5jcHA6CisJKiBwcC9zeW1ib2xfY29udGFpbmVyX2ltcC5oOgorCSogcHAvc3ltYm9sX2NvbnRhaW5lcl9pbXAuY3BwOgorCSogcHAvc3ltYm9sX2Z1bmN0b3JzLmg6IHNvbWUgbW9yZSBmaWxlLXJlZmFjdG9yaW5nLCBhbmQgc29tZQorCSAgbWlub3IgY2hhbmdlcworIAorMjAwMi0wNS0xNSAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogcHAvb3Byb2ZwcC5jcHA6IG9ubHkgYWxsb3cgLXIgd2l0aCAtbAorCSogZG9jL29wcm9maWxlLjEuaW46IGRvY3VtZW50IC1yIGZvciBvcHJvZnBwCisgCisyMDAyLTA1LTE1ICBXaWxsaWFtIENvaGVuICA8d2NvaGVuQG5jLnJyLmNvbT4KKyAKKwkqIHBwL29wcm9mcHAuY3BwOiBBZGRlZCAiLXIiIHJldmVyc2Ugc29ydCBvcHRpb24uCisKKzIwMDItMDUtMTUgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGxpYnV0aWwrKy91dGlsaXR5Lmg6IGZpeCBhIGNvcHlyaWdodCBwcm9ibGVtLCB3b3JrLWFyb3VuZAorCSAgYSAocHJvYmFibGUpIGdjYyAyLjkxIGJ1Zy4KKworCSogcHAvb3BfYmZkLmNwcDogdmFsZ3JpbmQgZXhwb3NlZCBhIGRlbGV0ZSBwcm9ibGVtLgorCisJKiBwcC9vcF90aW1lLmNwcDoKKwkqIHBwL29wX3RvX3NvdXJjZS5jcHA6CisJKiBwcC9vcHJvZnBwLmNwcDoKKwkqIHBwL3NhbXBsZXNfY29udGFpbmVyLmNwcDoKKwkqIHBwL3NhbXBsZXNfY29udGFpbmVyLmg6CisJKiBwcC9zYW1wbGVzX2NvbnRhaW5lci5jcHA6CisJKiBwcC9zYW1wbGVzX2NvbnRhaW5lci5oOiBjaGFuZ2UgdGhlIGhhbmRsaW5nIG9mIHNoYXJlZCBsaWIsCisJICB3ZSBubyBsb25nZXIgYWxsb3cgc2FtcGxlc19jb250YWluZXJfdCB0byBhdXRvIGxvYWQgcmVsYXRlZAorCSAgc2FtcGxlcyBmaWxlcyBiZWxvbmdpbmcgdG8gYSBzaGFyZWQgbGliIGJ1dCB3ZSBjcmVhdGUgYXQgYSBoaWdoZXIKKwkgIGxldmVsIGFuIGV4cGxpY2l0IGxpc3Qgb2Ygc2FtcGxlcyBmaWxlcyA6IGZpeCAjNTU1Mjc2CisKKwkqIHBwL29wX3RvX3NvdXJjZS5jcHA6CisJKiBwcC9zYW1wbGVfY29udGFpbmVyLmNwcDoKKwkqIHBwL29wcF9zeW1ib2wuY3BwOiBkZW1hbmdsZSBzeW1ib2wgb25seSB3aGVuIHdlIG91dHB1dAorCSAgc3ltYm9sIG5hbWUsIG5vdCB3aGVuIHdlIHN0b3JlIHN5bWJvbCBuYW1lIGluIGludGVybmFsCisJICByZXByZXNlbnRhdGlvbiBvZiBzeW1ib2wuCisKKzIwMDItMDUtMTQgIENsaWZmIFdvb2xsZXkgIDxqd29vbGxleUBhcGFjaGUub3JnPgorCisJKiBndWkvb3Byb2Zfc3RhcnQuY3BwOiBhbGxvdyBRdDMgY29tcGlsYXRpb24KKworMjAwMi0wNS0xMyAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogZG9jL29wcm9maWxlLnhtbDogY2xhcmlmeSBSVEMgdXNlLCBmaXggIzU1NTMwMgorCisJKiBndWkvb3Byb2Zfc3RhcnRfdXRpbC5jcHA6IG1pc3NpbmcgY2xvc2VkaXIoKS4gRml4ICM1NTUyNjgKKwkgIFRoYW5rcyB0byBXaWxsaWFtIENvaGVuIGZvciBoaXMgcHJlY2lzZSByZXBvcnQuCisKKwkqIG1vZHVsZS9NYWtlZmlsZS5pbjogZml4ICM1NTUzMDQsIGEgbm9uLW5hdGl2ZSBjb21waWxlciBjYW4KKwkgIGZhaWwgdG8gY29tcGlsZSBvcHJvZmlsZQorCisJKiBsaWJ1dGlsKysvdXRpbGl0eS5oOiBjbGFzcyBub25jb3B5YWJsZQorCSogcHAvc2FtcGxlc19maWxlLmg6IHVzZSBpdAorCisyMDAyLTA1LTEyICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBsaWJvcC9vcF9ldmVudHNfZGVzYy5jOgorCSogbGlib3Avb3BfZXZlbnRzX2Rlc2MuaDoKKworCSogcHAvb3BfYmZkLmg6CisJKiBwcC9vcF9iZmQuY3BwOgorCSogcHAvb3BfdG9fc291cmNlLmNwcDoKKwkqIHBwL29wcm9mcHAuaDoKKwkqIHBwL29wcm9mcHAuY3BwOgorCSogcHAvb3Byb2ZwcF91dGlsLmNwcDoKKwkqIHBwL3NhbXBsZXNfZmlsZS5jcHA6CisJKiBwcC9zYW1wbGVzX2ZpbGUuaDoKKwkqIHBwL3NhbXBsZXNmaWxlLmg6IGZpeCBzb21lIEZJWE1FCisKKzIwMDItMDUtMTIgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIGRhZS9vcHJvZmlsZWQuYzogZGVsZXRlIGxvY2tmaWxlIG9uIFNJR1RFUk0KKyAKKwkqIHBwL3NhbXBsZXNfZmlsZS5oOgorCSogcHAvc2FtcGxlc19maWxlLmNwcDogbWlub3IgY2hhbmdlcworCisyMDAyLTA1LTExICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBwcC9vcF9iZmQuY3BwOgorCSogcHAvb3BfYmZkLmg6IGVoYW5jZSBvcF9iZmRfc3ltYm9sIC4uLgorCSogcHAvb3Byb2ZwcC5jcHA6CisJKiBwcC9zYW1wbGVzX2NvbnRhaW5lci5jcHA6IG1vdmUgaGFuZGxpbmcgb2YgaW1hZ2Ugdy9vIHN5bWJvbAorCSAgaW4gb3BfYmZkCisKKwkqIHBwL3NhbXBsZXNfZmlsZS5oOiBlaGFuY2UgY29tbWVudCAoSm9obidzIHdvcmspCisKKzIwMDItMDUtMTEgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIHBwL29wX2JmZC5jcHA6CisJKiBwcC9vcF9iZmQuaDoKKwkqIHBwL29wcm9mcHAuY3BwOgorCSogcHAvb3Byb2ZwcC5oOgorCSogcHAvc2FtcGxlc19maWxlcy5jcHA6IG1pbm9yIGNsZWFudXAKKworMjAwMi0wNS0xMCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogcHAvb3BfYmZkLmg6CisJKiBwcC9vcF9iZmQuY3BwOgorCSogcHAvb3BwX3N5bWJvbC5oOgorCSogcHAvb3BwX3N5bWJvbC5jcHA6CisJKiBwcC9vcHJvZnBwLmNwcDoKKwkqIHBwL3NhbXBsZXNfY29udGFpbmVyLmg6CisJKiBwcC9zYW1wbGVzX2NvbnRhaW5lci5jcHA6IG1vcmUgdHlwZWRlZiBmb3IgaW5kZXhlZCB0aGluZ3MKKworMjAwMi0wNS0xMCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogcHAvKjogc3BsaXQgb3Byb2ZwcF91dGlsLmNwcCwgb3Byb2ZwcC5oIHRvIHRoZXNlIC4uCisJKiBwcC9zYW1wbGVzX2ZpbGUuY3BwOiBuZXcgZmlsZQorCSogcHAvc2FtcGxlc19maWxlLmg6IG5ldyBmaWxlCisJKiBwcC9vcF9iZmQuY3BwOiBuZXcgZmlsZQorCSogcHAvb3BiZmQuaDogbmV3IGZpbGUKKworCSogcHAvKjogYWRkIGEgc3ltYm9sX2luZGV4X3QgdHlwZWRlZgorCisyMDAyLTA1LTEwICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBkb2Mvc3JjZG9jL01ha2VmaWxlOiBhbHdheXMgY2xlYW4gYmVmb3JlIGJ1aWxkaW5nCisJKiBkb2Mvc3JjZG9jL0RveHlmaWxlOiBlaGFuY2UgZmlsZSBmaWx0ZXJpbmcKKworCSogcHAvb3Byb2ZwcC5oOiBzbWFsbCB0eXBvIGZpeAorCisyMDAyLTA1LTEwICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgkKKworCSogcHAvb3Byb2ZwcC5oOgorCSogcHAvb3Byb2ZwcC5jcHA6CisJKiBwcC9vcHJvZnBwX3V0aWwuY3BwOgorCSogcHAvc2FtcGxlc19jb250YWluZXIuY3BwOiBnZW5lcmFsaXplIGluZnJhc3R1Y3R1cmUgZm9yIHN5bWJvbAorCSAgdm1hL3NpemUKKworCSogcHAvb3BfdGltZS5jcHA6IGFsbG93IHRvIGV4Y2x1ZGUgc3ltYm9sIHdpdGggb3BfdGltZSAtbAorCisyMDAyLTA1LTA5ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgorCisJKiBkb2MveGh0bWwtY2h1bmsueHNsOgorCSogZG9jL3hodG1sLWNvbW1vbi54c2w6CisJKiBkb2MveGh0bWwueHNsOgorCSogZG9jL01ha2VmaWxlLmluOiBzb21lIHNtYWxsIGltcHJvdmVtZW50cworIAorCSogZG9jL3NyYy9kb2MvRG95eGZpbGU6IGFkZCBGSVhNRQorCisJKiBndWkvb3Byb2Zfc3RhcnQuY3BwOgorCSogbGlib3Avb3BfZXZlbnRzX2Rlc2MuaDoKKwkqIGxpYm9wL29wX2V2ZW50c19kZXNjLmM6CisJKiBsaWJ1dGlsL2ZpbGVuYW1lX21hdGNoLmg6IAorCSogb3Byb2ZfcmVwb3J0L29wcm9mcHBfdmlldy5oOiAKKwkqIHBwL29wX3RpbWUuY3BwOiAKKwkqIHBwL29wcF9zeW1ib2wuaDoKKwkqIHBwL29wcm9mcHAuaDoKKwkqIHBwL29wcm9mcHBfdXRpbC5jcHA6CisJKiBwcC9zYW1wbGVzX2NvbnRhaW5lci5jcHA6IAorCSogcHAvc2FtcGxlc19jb250YWluZXIuaDogbW9yZSBkb3h5Z2VuIGV0Yy4gZml4ZXMKKyAKKzIwMDItMDUtMDggIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIFRPRE86IHVwZGF0ZQorCisJKiBwcC9vcF9zeW1ib2wuY3BwOiBiZXR0ZXIgY29sdW1uIGhhbmRsaW5nIHdpdGggb3Byb2ZwcCAtTAorCisyMDAyLTA1LTA4ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBkYWUvTWFrZWZpbGUuaW46CisJKiBndWkvTWFrZWZpbGUuaW46CisJKiBwcC9NYWtlZmlsZS5pbjoKKwkqIHV0aWxzL01ha2VmaWxlLmluOiBmaXggbWFrZSB1bmluc3RhbGwKKworMjAwMi0wNS0wOCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKwkKKwkqIHBwL29wZl9maWx0ZXIuY3BwOiBtb3ZlIHRvIC4uLgorCSogcHAvb3BfdG9fc291cmNlLmNwcDoKKwkqIHBwL29wZl9jb250YWluZXIuY3BwOiBtb3ZlIHRvIC4uCisJKiBwcC9zYW1wbGVzX2NvbnRhaW5lci5jcHA6CisJKiBwcC9vcGZfZmlsdGVyLmg6IG1vdmUgdG8gLi4uCisJKiBwcC9zYW1wbGVzX2NvbnRhaW5lci5oOgorCSogcHAvTWFrZWZpbGUuaW46CisJKiBwcC8uY3ZzaWdub3JlOiB1cGRhdGUKKworCSogb3Byb2ZfcmVwb3J0L2hvdHNwb3R2aWV3LmNwcDoKKwkqIG9wcm9mX3JlcG9ydC9ob3RzcG90dmlldy5oOgorCSogb3Byb2ZfcmVwb3J0L29wX3ZpZXcuaDoKKwkqIG9wcm9mX3JlcG9ydC9vcHJvZl9yZXBvcnQuY3BwOgorCSogb3Byb2ZfcmVwb3J0L29wcm9mX3JlcG9ydC5oOgorCSogb3Byb2ZfcmVwb3J0L29wcm9mX3ZpZXcuY3BwOgorCSogb3Byb2ZfcmVwb3J0L29wcm9mX3ZpZXcuaDoKKwkqIHBwL29wX3RpbWUuY3BwOgorCSogcHAvb3BmX2NvbnRhaW5lci5jcHA6CisJKiBwcC9vcGZfZmlsdGVyLmNwcDoKKwkqIHBwL29wZl9maWx0ZXIuaDoKKwkqIHBwL29wcF9zeW1ib2wuY3BwOgorCSogcHAvb3BwX3N5bWJvbC5oOgorCSogcHAvb3Byb2ZwcC5jcHA6CisJKiBwcC9vcHJvZnBwLmg6IHNhbXBsZXNfZmlsZXNfdCAtPiBzYW1wbGVzX2NvbnRhaW5lcl90CisKKwkqIHVpLy5jdnNpZ25vcmU6IHVwZGF0ZQorCisJKiBwcC9vcGZfZmlsdGVyLmNwcDogbW92ZSBmaWxlbmFtZV9tYXRjaCAuLi4KKwkqIGxpYnV0aWwrKy9maWxlbmFtZV9tYXRjaC5jcHA6IGhlcmUKKwkqIGxpYnV0aWwrKy9maWxlbmFtZV9tYXRjaC5jcHA6CisJKiBsaWJ1dGlsKysvTWFrZWZpbGUuaW46CisKKwkqIHBwL01ha2VmaWxlLmluOiBmaXggdHlwbyB0aGF0IHByZXZlbnQgb3BfdG9fc291cmNlCisJICB0byBiZSByZWNvbXBpbGVkCisKKzIwMDItMDUtMDggIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIFRPRE86IHVwZGF0ZQorCisJKiBkb2MvTWFrZWZpbGUuaW46IG1ha2UgY2xlYW4gZGVsZXRlICouaHRtbAorIAorCSogbGliZGIvZGItZGVidWcuYzogcGVkYW50cnkKKyAKKwkqIGxpYnV0aWwvb3BfZmlsZWlvLmg6CisJKiBsaWJ1dGlsL29wX2ZpbGVpby5jOgorCSogcHAvb3Byb2ZwcC5jcHA6IHJlbW92ZSB1bnVzZWQgY29kZSBhbmQgY2hhbmdlCisJICBmdW5jdGlvbiBuYW1lcworIAorMjAwMi0wNS0wOCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogbGlidXRpbC9vcF9saWJpYmVydHkuaDogZml4IGNvbXBpbGUgZXJyb3IgKG1pc3NpbmcKKwkgIHNpemVfdCBkZWZpbml0aW9uKQorCisyMDAyLTA1LTA4ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgorCisJKiBNYWtlZmlsZS5pbjogbWlzc2luZyBiYWNrc2xhc2gKKyAKKzIwMDItMDUtMDcgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIDx2YXJpb3VzPjogT0sgSSBsaWVkLiBGaXggc29tZSBkb3h5Z2VuIHdhcm5pbmdzLAorCSAgYW5kIHNvbWUgY2hhciBjb25zdCAqYSAtPiBjb25zdCBjaGFyICogYQorIAorCSogZG9jL3NyY2RvYy9NYWtlZmlsZTogYWRkCisgCisyMDAyLTA1LTA3ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgorCisJKiA8YWxsPjogb2ssIGZpeCB0aGUgaGVhZGVycyBwcm9wZXJseS4gTGFzdCB0ZWRpb3VzCisJICBwYXRjaCwgSSBwcm9taXNlLgorIAorCSogZGFlL29wZF91dGlsLmg6IGZpbmFsbHkgcmVtb3ZlICEKKyAKKzIwMDItMDUtMDYgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIDx2YXJpb3VzPjogbW92ZSB0byBuZXcgaGVhZGVyIHN0eWxlLCBkb3h5Z2VuCisJICBzaG91bGQgdXNlIEBwYXJhbSBibGFoIG5vdCBAYmxhaDogb3IgXHBhcmFtIGJsYWggCisKKwkqIGRvYy9zcmNkb2MvRG94eWZpbGU6IG5ldyBmaWxlIGZvciBhcGkgZG9jcworCisJKiBzY3JpcHRzL0RveHlmaWxlOgorCSogc2NyaXB0cy9kb2RvYzogcmVtb3ZlCisgCisyMDAyLTA1LTA2ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgorCisJKiBjb25maWd1cmUuaW46IGRvbid0IGFkZCBLSU5DIHRvIEJLQ0ZMQUdTIGRpcmVjdGx5CisgCisJKiBtb2R1bGUvTWFrZWZpbGUuaW46IHJlLXdyaXRlCisgCisJKiBUT0RPOiB1cGRhdGUKKyAKKzIwMDItMDUtMDYgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwlNYXNzaXZlIHJlLW9yZ2FuaXNhdGlvbiBvZiBjb2RlICsgYnVpbGQuIE1vc3QKKwlmaWxlcyBoYXZlIGJlZW4gY2hhbmdlZC4gU29tZSBzbWFsbCBjb3NtZXRpYworCWNoYW5nZXMuCisgCisJKiBsaWJ1dGlsLzoKKwkqIGxpYnV0aWwrKy86IGdlbmVyYWwtcHVycG9zZSB1dGlsaXR5IGxpYnMKKworCSogbGlib3AvOiBvcHJvZmlsZS1zcGVjaWZpYyB1dGlsaXR5IGxpYgorCisJKiB1dGlscy86IG1vdmVkIG9wX3N0YXJ0IGV0IGFsIHRvIHRoaXMgZGlyCisKKwkqIGV2ZW50cy86CisJKiB1dGlsLzogcmVtb3ZlZAorCisJKiBsaWJ1dGlsKysvY2hpbGRfcmVhZGVyLmNwcDogbWFrZSBzdXJlIHRvIHNldAorCSAgbWVtYmVyICJwaWQiLCBub3QgbG9jYWwgdmFyaWFibGUKKworMjAwMi0wNS0wNSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogZGFlL29wX3Nlc3Npb24uYzogdHdlYWsgZXJyb3IgbWVzc2FnZSB3aGVuIHNlc3Npb24gYWxyZWFkeQorCSAgZXhpc3QuIEF2b2lkIHRvIG9wX2R1bXAgd2hlbiBwcm9maWxlciBpcyBub3Qgc3RhcnRlZC4KKworMjAwMi0wNS0wNSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogVE9ETzogdXBkYXRlOgorCisJKiBkYWUvb3Bfc2Vzc2lvbi5jOiBkbyBub3QgY3JlYXRlIGVtcHR5IHNlc3Npb24gZGlyZWN0b3J5CisJICBhbmQgYmFja3VwIG9wcm9maWxlZy5sb2cgdG9vCisJKiBkYWUvb3BkX3V0aWwuYzoKKwkqIG9wX3VzZXIuaDogbWlub3IgcmVsYXRlZCBjaGFuZ2UKKworMjAwMi0wNS0wNSAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogZG9jL29wcm9maWxlLnhtbDogdXBkYXRlIGNvcHlyaWdodCBmb3IgMjAwMgorCisJKiBkb2MveHNsL3hodG1sLWNodW5rLnhzbDogaW5kZW50PXllcworIAorMjAwMi0wNS0wNSAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogVE9ETzogdXBkYXRlCisJCisJKiBNYWtlZmlsZS5pbjogdXBkYXRlIG15IHJlbGVhc2Ugc3RlcHMKKyAKKzIwMDItMDUtMDUgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIGNvbmZpZ3VyZS5pbjogLT4wLjNjdnMKKworCSogcmVzdWx0cy86IGhtbSwgcmVtb3ZlIC9hbGwvIHRoZSBmaWxlcyAKKyAKKzIwMDItMDUtMDQgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIGNvbmZpZ3VyZS5pbjogYnVtcCB0byAwLjIKKyAKKzIwMDItMDUtMDQgIFdpbGxpYW0gQ29oZW4gIDx3Y29oZW5AbmMucnIuY29tPgorCisJKiBkb2Mvb3Byb2ZpbGUueG1sOiBhZGQgbm90ZSBvbiBwb3dlciBtYW5hZ2VtZW50CisgCisyMDAyLTA1LTAzICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgorCisJKiBkb2MvTWFrZWZpbGUuaW46CisJKiBkb2MveHNsL3hodG1sLWNvbW1vbi54c2w6CisJKiBkb2MveHNsL3hodG1sLnhzbDoKKwkqIGRvYy94c2wveGh0bWwtY2h1bmsueHNsOiB1c2Ugc29tZSB4c2wgdG8gZml4CisJICBzb21lIG9mIHRoZSBwcm9ibGVtcyAobm90IGFsbCA6KCkKKyAKKzIwMDItMDUtMDIgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIFRPRE86IHVwZGF0ZQorIAorMjAwMi0wNS0wMiAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogZGFlL29wX3Nlc3Npb24uYzogY291cGxlIG9mIGltcHJvdmVtZW50cworIAorCSogZGFlL29wZF91dGlsLmM6IGZpeCB3YXJuaW5nCisKKwkqIGRvYy9vcHJvZmlsZS54bWw6IHNvbWUgZG9jcyBvbiBvcF9zZXNzaW9uCisKKwkqIHBwL29wX3RpbWUuY3BwOiBpbnRyb2R1Y2UgLXMgcGFyYW1ldGVyIChzaG91bGQgYmUKKwkgIGluIGFsbCB1dGlscykKKyAKKzIwMDItMDUtMDIgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIG9wcm9mX3JlcG9ydC9NYWtlZmlsZS5pbjogZGlzYWJsZSBmb3IgcmVsZWFzZQorIAorMjAwMi0wNS0wMiAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogcmVzdWx0cy86IG51a2UgdGhpcyBpbiBmYXZvdXIgb2Ygb3Byb2ZpbGUtdGVzdHMKKwkgIG1vZHVsZQorIAorMjAwMi0wNS0wMiAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogVE9ETzogdXBkYXRlCisgCisJKiBvcF91c2VyLmg6CisJKiBkYWUvb3Bfc3RhcnQ6IAorCSogZGFlL29wX3N0b3A6IAorCSogZGFlL29wZF91dGlsLmg6CisJKiBkYWUvb3BkX3V0aWwuYzogCisJKiBkYWUvb3Byb2ZpbGVkLmM6IAorCSogZGFlL29wcm9maWxlZC5oOiAKKwkqIGRvYy9vcHJvZmlsZS4xLmluOgorCSogZG9jL29wcm9maWxlLnhtbDogCisJKiBndWkvb3Byb2Zfc3RhcnQuaDoKKwkqIGd1aS9vcHJvZl9zdGFydC5jcHA6CisJKiBndWkvb3Byb2Zfc3RhcnRfY29uZmlnLmg6CisJKiBndWkvb3Byb2Zfc3RhcnRfY29uZmlnLmNwcDoKKwkqIGd1aS91aS9vcHJvZl9zdGFydF9iYXNlLnVpOiAKKwkqIG9wcm9mX3JlcG9ydC9vcHJvZl9yZXBvcnQuY3BwOiAKKwkqIHBwL29wX21lcmdlLmNwcDogCisJKiBwcC9vcF90aW1lLmNwcDogCisJKiBwcC9vcGZfZmlsdGVyLmNwcDogCisJKiBwcC9vcHJvZnBwLmNwcDogCisJKiBwcC9vcHJvZnBwLmg6IAorCSogcHAvb3Byb2ZwcF91dGlsLmNwcDogcmVtb3ZlIHVzZWxlc3MgY29tbWFuZCBsaW5lCisJICBvcHRpb25zIGluIGFudGljaXBhdGlvbiBvZiB0aGUgbmV3IHNwZWMKKwkgCisJKiBsaWJkYi9kYi1tYW5hZ2UuYzogcmVzZXQgYmFzZV9tZW1vcnkgYW5kIGZkCisJICBvbiBjbG9zZQorIAorCSogZGFlLy5jdnNpZ25vcmU6IAorCSogZGFlL01ha2VmaWxlLmluOgorCSogZGFlL29wX3Nlc3Npb24uYzoKKwkqIGRhZS9vcGRfcHJvYy5jOiAKKwkqIGRhZS9vcGRfcHJvYy5oOgorCSogZGFlL29wcm9maWxlZC5oOgorCSogZGFlL29wcm9maWxlZC5jOiB1c2UgbG9jayBmaWxlIGZvciBkYWVtb24uCisJICBJbXBsZW1lbnQgbmFtZWQgc2Vzc2lvbnMKKyAKKzIwMDItMDUtMDIgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIHBwL29wcm9mcHAuY3BwOgorCSogcHAvb3BfdGltZS5jcHA6CisJKiBwcC9vcGZfY29udGFpbmVyLmNwcDoKKwkqIHBwL29wZl9maWx0ZXIuY3BwOgorCSogcHAvb3Byb2ZwcC5jcHA6CisJKiBwcC9vcHJvZnBwLmg6CisJKiBwcC9vcHJvZnBwX3V0aWwuY3BwOiBmaXggc2VjdF9vZmZzZXQgcHJvYmxlbS4gbm93IGFsbAorCSAgY2xhc3Mgd29yayBvbiB2bWEgZXhjZXB0IHNhbXBsZXNfZmlsZV90IHdoaWNoIG9mZnNldCB2bWEKKwkgIHRvIHNhbXBsZXMgZmlsZXMgb2Zmc2V0CisKKzIwMDItMDUtMDEgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIGRhZS9vcGRfcHJvYy5jOgorCSogbGliZGIvZGItbWFuYWdlLmM6CisJKiBsaWJkYi9kYi10ZXN0LmM6CisJKiBsaWJkYi9kYi5oOgorCSogcHAvb3BfbWVyZ2UuY3BwOgorCSogcHAvb3BfdGltZS5jcHA6CisJKiBwcC9vcHJvZnBwX3V0aWwuY3BwOiBhbGxvdyByZWFkLW9ubHkgc2FtcGxlCisJICBmaWxlIHJlYWRpbmcKKwkKKwkqIG9wcm9mX3JlcG9ydC9ob3RzcG90X3ZpZXcuY3BwOiBmaXggd2FybmluZworIAorMjAwMi0wNS0wMSAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogZGFlL29wX3N0YXJ0OgorCSogZGFlL29wcm9maWxlZC5jOgorCSogZG9jL29wcm9maWxlLjEuaW46IAorCSogZG9jL29wcm9maWxlLnhtbDogCisJKiBndWkvb3Byb2Zfc3RhcnQuY3BwOiAKKwkqIG1vZHVsZS9vcF9ubWkuYzoKKwkqIG1vZHVsZS9vcF9ydGMuYzoKKwkqIG1vZHVsZS9vcF9zeXNjYWxscy5jOiAKKwkqIG1vZHVsZS9vcHJvZmlsZS5oOgorCSogbW9kdWxlL29wcm9maWxlLmM6IG1vdmUgcGlkL3BncnAgZmlsdGVyIGludG8KKwkgIHVzZXJzcGFjZSBvbmx5LiBSZW1vdmUgLS1pZ25vcmUtbXlzZWxmCisgCisyMDAyLTA0LTMwICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgorCisJKiBvcF91c2VyLmg6CisJKiBkYWUvb3BkX3Byb2MuYzoKKwkqIHBwL29wcm9mcHBfdXRpbC5jcHA6IGZpcnN0IHBhcnQgb2YgcmVtb3ZpbmcKKwkgIE9QRF9LRVJORUxfT0ZGU0VUCisKKzIwMDItMDQtMzAgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIG1vZHVsZS9vcF9ubWkuYzogYWxzbyBhbGxvdyB1c2VyIHRvIHNlZSAwLyAxLyBjb250ZW50cworIAorMjAwMi0wNC0zMCAgV2lsbGlhbSBDb2hlbiAgPHdjb2hlbkBuYy5yci5jb20+CisKKwkqIG1vZHVsZS9vcHJvZmlsZS5jOiBBbGxvdyBub24tcm9vdCBleGFtaW5hdGlvbiBvZgorCSAgL3Byb2Mvc3lzL2Rldi9vcHJvZmlsZSBhbmQgaW5pdGlhdGlvbiBvZiBkdW1wLiAKKworCSogZGFlL29wX2R1bXA6IG1vZGlmeSBtZXNzYWdlIGZvciBhYm92ZQorCisyMDAyLTA0LTMwICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgorCisJKiBUT0RPOiB1cGRhdGUKKyAKKwkqIGxpYmRiL01ha2VmaWxlOiByZW1vdmUgZnJvbSBDVlMKKyAKKwkqIGRhZS9vcHJvZmlsZWQuYzoKKwkqIG1vZHVsZS9vcHJvZmlsZS5jOiAKKwkqIG1vZHVsZS9vcHJvZmlsZS5oOiB1c2UgYmV0dGVyIGhhc2ggZnVuY3Rpb24uCisJICBGb2xkIHVudXNlZC9mdWxsIGVudHJ5IGNhc2UgaW50byBldmljdGlvbiBjYXNlCisJICBmb3IgZmFzdGVyIGNvbW1vbiBwYXRoCisgCisyMDAyLTA0LTI3ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgorCisJKiBjb25maWd1cmUuaW46IGZpeCBsaXR0bGUgYmxvb3BlciB0aGF0IHNob3dzIHVwCisJICB3aGVuIENPTkZJR19NMzg2IGlzIGNob3NlbgorIAorMjAwMi0wNC0yMyAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogcHAvb3Byb2ZwcC5jcHA6CisJKiBwcC9vcHJvZnBwX3V0aWwuY3BwOiB5ZXQgYW5vdGhlciBidWcgZml4IGZvciAtLXNvcnQ9CisJICBhbmQgY291bnRlciBuciBjb21tYW5kIGxpbmUgc3BlY2lmaWNhdGlvbiAuLi4KKworMjAwMi0wNC0yMiAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogZGFlL29wZF9wcm9jLmM6IG9wZF9hbGFybSgpIGZsdXNoIHByb3Blcmx5IHNhbXBsZXMgZmlsZXMKKworCSogb3Byb2ZfcmVwb3J0L29wcm9mX3JlcG9ydC5jcHA6IHVzZSB0aGUgcmlnaHQgZmlsZW5hbWUKKwkgIHdoZW4gc2VsZWN0aW5nIGEgc2hhcmVkIGxpYiBwcm9maWxlZCB3aXRoIC0tc2VwYXJhdGUtc2FtcGxlcworCisyMDAyLTA0LTIyICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBwcC9vcF9tZXJnZS5jOiBpbXBsZW1lbnQgbWVyZ2luZyBvZiB0aGUgbmV3IGZpbGUgZm9ybWF0IGZpbGVzLgorCisyMDAyLTA0LTIxICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBvcHJvZl9yZXBvcnQvTWFrZWZpbGUuaW46CisJKiBvcHJvZl9yZXBvcnQvb3Byb2ZfcmVwb3J0LmNwcDogdXNlIGRiCisKKzIwMDItMDQtMjAgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGRhZS9vcGRfcHJvYy5jOiBPUERfS0VSTkVMX09GRlNFVCB0aGluZworCSogcHAvb3Byb2ZwcF91dGlsLmNwcDoKKworMjAwMi0wNC0yMCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogZGFlL29wZF9wcm9jLmM6IG1pbm9yIHdhcm5pbmcgc3VwcHJlc3Npb24KKworCSogcHAvTWFrZWZpbGUuaW46CisJKiBwcC9vcHJvZnBwLmNwcDoKKwkqIHBwL29wX3RpbWUuY3BwOgorCSogcHAvb3BmX2NvbnRhaW5lci5jcHA6CisJKiBwcC9vcGZfZmlsdGVyLmNwcDoKKwkqIHBwL29wcm9mcHAuaDogaGFuZGxlIHRoZSBuZXcgZGIgZmlsZSBmb3JtYXQsIHRoaXMgc3R1ZmYgaXMKKwkgIG5vdCB5ZXQgZXh0ZW5zaXZlbHkgdGVzdGVkCisKKwkqIHBwL29wX21lcmdlLmM6IG5vdCBhbHJlYWR5IHVwZGF0ZWQsIGV4aXQgYXQgcnVuIHRpbWUKKwkgIHdpdGggYW4gZXJyb3IgbWVzc2FnZQorCisyMDAyLTA0LTE5ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBkYWUvb3BkX3Byb2MuaDoKKwkqIGRhZS9vcHJvZmlsZWQuaDogZW5hYmxlIGRiIHNhbXBsZXMgZmlsZSBmb3JtYXQKKworMjAwMi0wNC0xOSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogbGliZGIvKjogaW5pdGlhbCBpbXBvcnQgZnJvbSBvcHJvZmlsZS10ZXN0cyBtb2R1bGUKKwkgIG5vdGUgdGhhbiB0aGlzIGRpcmVjcm90eSBoYXZlIGl0J3Mgb3duIENoYW5nZUxvZyBmaWxlCisJKiBkYWUvTWFrZWZpbGUuaW46IHVzZSBsaWJkYi5hCisJKiBkYWUvb3BkX3V0aWwuaDogdXNlIGRiLmguIFRoZXNlIGNoYW5nZSBkbyBub3QgeWV0IGVuYWJsZQorCSAgdGhlIGRiIHNhbXBsZXMgZmlsZXMgZm9ybWF0LgorCisyMDAyLTA0LTE2ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgorCisJKiBUT0RPOgorCSogZG9jL29wcm9maWxlLnhtbDoKKwkqIHBwL29wcm9mX2NvbnZlcnQuYzoKKwkqIHV0aWwvbWlzYy5oOgorCSogdXRpbC9taXNjLmM6CisJKiB1dGlsL2ZpbGVfbWFuaXAuaDoKKwkqIHBwL01ha2VmaWxlLmluOiBraWxsIG9wcm9mX2NvbnZlcnQKKwkgCisyMDAyLTA0LTE2ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgorCisJKiBwcC9vcGZfY29udGFpbmVyLmNwcDoKKwkqIHBwL29wcm9mcHAuaDoKKwkqIHBwL2RlbWFuZ2xlX3N5bWJvbC5oOgorCSogcHAvZGVtYW5nbGVfc3ltYm9sLmNwcDoKKwkqIHBwL01ha2VmaWxlLmluOiBtb3ZlIGRlbWFuZ2xlX3N5bWJvbCBpbnRvIG93bgorCSAgZmlsZQorIAorCSogVE9ETzogdXBkYXRlIHNvbWUuLi4KKyAKKzIwMDItMDQtMTEgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIHBwL29wZl9maWx0ZXIuY3BwOiBmaXggYSBtZW1vcnkgbGVhayB1bmNvdmVyZWQKKwkgIGJ5IHZhbGdyaW5kIDxodHRwOi8vZGV2ZWxvcGVyLmtkZS5vcmcvfnNld2FyZGo+CisKKzIwMDItMDQtMDkgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGRhZS9vcHJvZmlsZWQuaDogbW92ZSBkZWZpbml0aW9uIG9mIGxpbmtlZCBsaXN0IHRvIC4uLgorCSogZGFlL29wZF9saXN0Lmg6IHRoaXMgbmV3IGZpbGUKKwkKKwkqIGRhZS9vcGRfcHJvYy5jOiBpdGVyYXRlIG9uIG9wZW5lZCBzYW1wbGUgZmlsZQorCSAgcmF0aGVyIG9uIGltYWdlIGxpc3QgdG8gc3luYyBtbWFwJ2VkIGZpbGUKKworMjAwMi0wNC0wNyAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogcHAvb3Byb2ZwcC5oOgorCSogb3Byb2ZfcmVwb3J0L29wcm9mX3JlcG9ydC5jcHA6CisJKiBwcC9vcF90aW1lLmNwcDoKKwkqIHBwL29wZl9jb250YWluZXIuY3BwOgorCSogcHAvb3BmX2ZpbHRlci5jcHA6CisJKiBwcC9vcHJvZnBwX3V0aWwuY3BwOgorCSogcHAvb3Byb2ZwcC5jcHA6IHVzZSBzYW1wbGVzX2ZpbGVfdCBhcyBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvbgorCSAgb2Ygb3BwX3NhbXBsZXNfZmlsZXMuIE5vdyBhbGwgc2FtcGxlcyBmaWxlcyByZWFkIGFyZSBtYWRlCisJICB0aHJvdWdoIHNhbXBsZXNfZmlsZV90IG9iamVjdC4KKworMjAwMi0wNC0wNCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogZGFlL29wX3N0YXJ0OiBmaXggYmFzaDEgZGV0ZWN0aW9uCisKKwkqIGRvYy9NYWtlZmlsZS5pbjogZml4IGluc3RhbGwgdGFyZ2V0CisKKzIwMDItMDMtMjUgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIGNvbmZpZ3VyZS5pbjogc29tZSBwcmVsaW1pbmFyeSBzdHVmZiBmb3IgTkdQVAorCisJKiBUT0RPOiB1cGRhdGUKKworCSogZG9jL01ha2VmaWxlLmluOgorCSogZG9jL29wcm9maWxlLnNnbWw6CisJKiBkb2Mvb3Byb2ZpbGUueG1sOiBtb3ZlIHRvIERvY0Jvb2svWE1MCisKKwkqIGRvYy9vcHJvZmlsZS54bWw6IGRvY3VtZW50IEJhc2ggMiBkZXBlbmRlbmN5CisgCisJKiBkYWUvb3Bfc3RhcnQ6IGZpeCBmb3IgL2Jpbi9iYXNoIGJlaW5nIGJhc2ggdjEgLSB1bnRlc3RlZAorIAorMjAwMi0wNC0wMiAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogcHAvb3Byb2ZwcC5jcHA6CisJKiBwcC9vcHJvZnBfdXRpbC5jcHA6IGRlYnVnIGFuZCB1c2Ugb3BwX2JmZDo6c3ltYm9sX3NpemUoKQorCisyMDAyLTAzLTMwICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBDaGFuZ2VMb2c6IGNoYW5nZSBteSBlbWFpbCBhZGRyZXNzCisKKzIwMDItMDMtMjIgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+CisKKwkqIGRhZS9vcF9zdGFydDogZGVmYXVsdCBidWZmZXIgc2l6ZSB0byB6ZXJvIGFuZCBsZXQgbW9kdWxlCisJICBvdmVycmlkZSB0aGUgZGVmYXVsdC4KKworCSogbW9kdWxlL29wX3J0Yy5jOgorCSogbW9kdWxlL29wcm9maWxlLmg6CisJKiBvcF91c2VyLmg6CisJKiBndWkvb3Byb2Zfc3RhcnQuY3BwOgorCSogZ3VpL29wcm9mX3N0YXJ0X2NvbmZpZy5jcHA6CisJKiBndWkvb3Byb2Zfc3RhcnRfY29uZmlnLmg6IGFuIGFub3RoZXIgY29oZXJlbmN5IGZpeCwgdW5ob3BlZnVsbHkKKwkgIHRoaXMgYnVnIGZpeCBkb2VzIG5vdCBmaXggdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSAoc2VlICMgKQorCisJKiBwcC9vcHJvZnBwLmNwcDogZm9yIGdwcm9mIGR1bXAgZG8gbm90IHByaW50IGV2ZW50cyBzZXR0aW5ncworCisJKiBwcC9vcHJvZnBwLmg6CisJKiBwcC9vcHJvZnBwX3V0aWwuY3BwOiBwcmVwYXJlIHVzaW5nIHN5bWJvbCBzaXplCisKKzIwMDItMDMtMjEgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+CisKKwkqIHBwL29wZl9maWx0ZXIuY3BwOgorCSogcHAvb3Byb2ZwcC5jcHA6CisJKiBwcC9vcHJvZnBwX3V0aWwuY3BwOiBmYWN0b3JpemUgZXZlbnQgc2V0dGluZ3Mgb3V0cHV0CisJKiBwcC9vcHJvZnBwLmg6IGRpdHRvICsgZG9fbGlzdF94eHgvZG9fZHVtcF9ncHJvZiA6IHN0YXRpYworCSAgZnJlZSBmdW5jdGlvbiByYXRoZXIgdGhhbiBtZW1iZXIgZnVuY3Rpb24uCisKKzIwMDItMDMtMjEgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+CisKKwkqIG9wX3VzZXIuaDoKKwkqIHBwL29wcm9mcHAuaDogbW9yZSBkb3h5Z2VuIGNvbW1lbnRzCisKKwkqIGRhZS9vcGRfa2VybmVsLmM6CisJKiBkYWUvb3BkX3Byb2MuYzoKKwkqIGRhZS9vcGRfdXRpbC5jOgorCSogZGFlL29wcm9maWxlZC5jOgorCSogZ3VpL29wcm9mX3N0YXJ0LmNwcDoKKwkqIGd1aS9vcHJvZl9zdGFydF91dGlsLmNwcDogZXhpdCgpOiB1c2Uge0VYSVRfRkFJTFVSRXxFWElUX1NVQ0NFU1N9CisKKzIwMDItMDMtMjAgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+CisKKwkqIHBwL29wZl9maWx0ZXIuaDogc2ltcGxpZnkgc2xpZ2h0bHkgaW50ZXJmYWNlIG9mIHNhbXBsZXNfZmlsZXNfdAorCSogb3Byb2ZfcmVwb3J0L29wcm9mX3JlcG9ydC5jcHA6CisJKiBwcC9vcF90aW1lLmNwcDoKKwkqIHBwL29wZl9jb250YWluZXIuY3BwOgorCSogcHAvb3BmX2ZpbHRlci5jcHA6CisJKiBwcC9vcHJvZnAuY3BwOiByZWZsZWN0IHRoZSBuZXcgaW50ZXJmYWNlLgorCisJKiBwcC9vcHBfc3ltYm9sLmNwcDogUGFyc2VPdXRwdXRPcHRpb24gLS0+IHN0YXRpYyBtZW1iZXIgb2YKKwkgIE91dHB1dFN5bWJvbCAuLi4KKworCSogcHAvb3BwX3N5bWJvbC5oOgorCSogdXRpbC9maWxlX21hbmlwLmg6CisJKiB1dGlsL3N0cmluZ19tYW5pcC5oOiBkb3h5Z2VuIGNvbW1lbnRzCisKKzIwMDItMDMtMTkgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+CisKKwkqIHNjcmlwdHMvRG94eWZpbGU6IHNtYWxsIHR3ZWFrCisJKiBvcF91c2VyLmg6CisJKiBwcC9vcHBfc3ltYm9sLmg6CisJKiBwcC9vcHJvZnBwLmg6CisJKiB1dGlsL2NoaWxkX3JlYWRlci5oOiBkb3h5Z2VuIGNvbW1lbnRzLgorCisyMDAyLTAzLTE5ICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgorCisJKiBwcC9vcGZfZmlsdGVyLmg6CisJKiBwcC9vcGZfY29udGFpbmVyLmNwcDogcmVtb3ZlIGRlbGVnYXRpb24KKwkgIHtzeW1ib2x8c2FtcGxlc31fY29udGFpbmVyX3QgLT4geHh4X2ltcGwsIG5vIGZ1bmN0aW9ubmFsIGNoYW5nZQorCisJKiBwcC8qOiBzdGFydCBhIG1vcmUgc2VyaW91cyBkb3h5Z2VuaXphdGlvbi4gZmlyc3Qgc3RlcAorCSAgaW5jbHVkZSBmaXhpbmcgcHJvdG90eXBlIGFuZCBhIGNsaWVudCBkb2N1bWVudGF0aW9uIGZvcgorIAkgIG9wcF9iZmQKKwkqIHNjcmlwdC9Eb3h5ZmlsZTogZG94eWdlbiBzY3JpcHQgZm9yIHBwLyouaCwgdXRpbC8qLmgKKwkKKzIwMDItMDMtMTkgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIG1vZHVsZS9vcF9maXhtYXAuYzogaW5jbHVkZSBwYWdlbWFwLmgsIHNvCisJd2UgcGljayB1cCBoaWdobWVtLmgsIHdoaWNoIGlzIG5lZWRlZCB3aXRoCisJc29tZSBrZXJuZWxzIChtaXNzaW5nIGttYXBfcGFnZXRhYmxlIGRlZmluZQorCXZpYSBwdGVfb2Zmc2V0KQorCisyMDAyLTAzLTE4ICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgorCisJKiBwcC9vcF90aW1lLmNwcDoKKwkqIGRvYy9vcHJvZmlsZTEuMS5pbjoKKwkqIGRvYy9vcHJvZmlsZS5zZ21sOiBhbGxvdyByZXZlcnNlIHNvcnQgaW4gYWxsIGNhc2UKKworCSogcHAvb3BwX3N5bWJvbC5oOgorCSogcHAvb3BwX3N5bWJvbC5jcHA6IHJlbW92ZSB1bm5lY2Vzc2FyeSBjYXN0CisKKwkqIG9wcm9mX3JlcG9ydC9vcHJvZl9yZXBvcnQuY3BwOgorCSogb3Byb2ZfcmVwb3J0L29wcm9mX3JlcG9ydC5oOgorCSogb3Byb2ZfcmVwb3J0Lypfdmlldy4qOiByZXZlcnQgcGFydGlhbGx5IDIwMDItMDMtMTcgcGF0Y2gsCisJICBtYWtpbmcgYWdhaW4gZGF0YSBjaGFuZ2Ugbm90aWZpY2F0aW9uIGluIHR3byBzdGVwLgorCisyMDAyLTAzLTE3ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgorCisJKiBwcC9vcHJvZnBwX3V0aWwuY3BwOiBjbGFyaWZ5IGJpbnV0aWxzIGJ1ZyB3b3JrYXJvdW5kCisgCisyMDAyLTAzLTE3ICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgorCisJKiBvcHJvZl9yZXBvcnQvb3Bfdmlldy5oOgorCSogb3Byb2ZfcmVwb3J0L2hvc3Rwb3N0X3ZpZXcuY3BwOgorCSogb3Byb2ZfcmVwb3J0L2hvc3Rwb3N0X3ZpZXcuaDoKKwkqIG9wcm9mX3JlcG9ydC9vcHJvZl9yZXBvcnQuY3BwOgorCSogb3Byb2ZfcmVwb3J0L29wcm9mX3JlcG9ydC5oOgorCSogb3Byb2ZfcmVwb3J0L29wcm9mX3ZpZXcuY3BwOgorCSogb3Byb2ZfcmVwb3J0L29wcm9mX3ZpZXcuaDogc2ltcGxpZnkgdmlydHVhbCBpbnRlcmZhY2UgKworCSAgbWlub3IgZ3JhcGhpYyBidWcgZml4CisKKzIwMDItMDMtMTYgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+CisKKwkqIFRPRE86IHVwZGF0ZQorCisJKiBvcHJvZl9yZXBvcnQvaG90c3BvdF92aWV3LmNwcDogbmV3CisJKiBvcHJvZl9yZXBvcnQvaG90c3BvdF92aWV3Lmg6IG5ldyBIb3RzcG90VmlldyBjbGFzcworCSogb3Byb2ZfcmVwb3J0L29wcm9mX3JlcG9ydC5jcHA6CisJKiBvcHJvZl9yZXBvcnQvb3Byb2ZfcmVwb3J0Lmg6ICB1c2UgSG90c3BvdFZpZXcKKwkqIG9wcm9mX3JlcG9ydC9NYWtlZmlsZS5pbjogcmVmbGVjdCBhYm92ZQorCisJKiBwcC9vcF90aW1lLmNwcDogc21hbGwgdGlkeQorCisyMDAyLTAzLTE1ICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgorCisJKiBUT0RPOiB1cGRhdGUKKworCSogZGFlL29wcm9maWxlZC5jOiBmaXggLS12ZXJzaW9uIHdoZW4gbW9kdWxlIGlzIG5vdCBsb2FkZWQKKworCSogcHAvb3BwX3N5bWJvbC5jcHA6CisJKiBwcC9vcHBfc3ltYm9sLmg6IGF2b2lkIHRvIHBhZGQgdGhlIGxhc3QgZmllbGQsIHVzZSBhIHBvc2l0aXZlCisJICBmb3JtIGZvciBvc2ZfaGVhZGVyCisKKwkqIHBwL29wcm9mcHAuaDoKKwkqIHBwL29wcm9mcHAuY3BwOgorCSogcHAvb3BmX2ZpbHRlci5jcHA6CisJKiBwcC9vcHByb2ZwcF91dGlsLmNwcDoKKwkqIHBwL29wX3RpbWUuY3BwOiBmaXggLS1zb3J0IG9wdGlvbgorCisyMDAyLTAzLTE0ICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgorCisJKiBUT0RPOiB1cGRhdGUKKworCSogcHAvb3BfdGltZS5jcHA6CisJKiBwcC9vcGZfZmlsdGVyLmNwcDoKKwkqIHBwL29wcF9zeW1ib2wuY3BwOgorCSogcHAvb3Byb2ZwcF8uY3BwOgorCSogcHAvb3Byb2ZwcC5oOgorCSogcHAvb3Byb2ZwcF91dGlsLmNwcDogaGFuZGxlIC1jMCwxIGFuZCAtLXNvcnQgI25yX2N0cgorCSAgZm9yIGFsbCBwb3N0LXByb2ZpbGUgdG9vbHMgYWxsb3dpbmcgYSBtb3JlIHByZWNpc2Ugd2F5CisJICB0byBzcGVjaWZ5IG9uIHdoaWNoIGNvdW50ZXJzIHRvb2xzIG11c3Qgd29yaworCisyMDAyLTAzLTEzICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgorCisJKiBwcC9vcHJvZnBwX3V0aWwuY3BwOiBnZXRfbGluZW5yKCkgYmV0dGVyIGhhbmRsaW5nCisJICBvZiBiZmRfZmluZF9uZWFyZXN0X2xpbmUuIEZpeCAjNTI5NjIyCisKKwkqIHBwL29wZl9jb250YWluZXIuY3BwOiBzaW1wbGlmeSBzeW1ib2xfY29udGFpbmVyX2ltcGwKKworCSogcHAvb3BwX3N5bWJvbC5jcHA6IHVzZSBvc3RyaW5nc3RyZWFtIG9ubHkgd2hlbiBuZWNlc3NhcnkKKworMjAwMi0wMy0wOSAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogZG9jL29wcm9maWxlLnNnbWw6IHNvbWUgbGFwdG9wcyBoYXZlIGEgdXNhYmxlIGxvY2FsIEFQSUMKKyAKKzIwMDItMDMtMDkgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+CisKKwkqIG9wcm9mX3JlcG9ydDogbmV3IGRpcmVjdG9yeSwgb3Byb2ZwcC9vcF90aW1lIGxpa2UgR1VJCisJKiBvcHJvZl9yZXBvcnQvb3Bfdmlldy5oOiBiYXNlIGNsYXNzIGZvciB2aWV3CisJKiBvcHJvZl9yZXBvcnQvb3Byb2ZfcmVwb3J0X21haW4uY3BwOgorCSogb3Byb2ZfcmVwb3J0L29wcm9mX3JlcG9ydC5oOgorCSogb3Byb2ZfcmVwb3J0L29wcm9mX3JlcG9ydC5jcHA6IG1haW4gY2xhc3MKKwkqIG9wcm9mX3JlcG9ydC9vcHJvZnBwX3ZpZXcuaDoKKwkqIG9wcm9mX3JlcG9ydC9vcHJvZnBwX3ZpZXcuY3BwOiBvcHJvZmZwIGxpa2UgdmlldworCSogb3Byb2ZfcmVwb3J0L01ha2VmaWxlLmluOgorCSogb3Byb2ZfcmVwb3J0L3VpL29wcm9mX3JlcG9ydC5iYXNlLnVpOiBvcHJvZl9yZXBvcnQgVUkKKwkqIG9wcm9mX3JlcG9ydC91aS9NYWtlZmlsZS5pbjoKKworCSogTWFrZWZpbGUuaW46CisJKiBjb25maWd1cmUuaW46IGhhbmRsZSBvcHJvZl9yZXBvcnQKKworCSogdWkvTWFrZWZpbGUuaW46IGNsYXJpZnkgaG93IGRlcGVuZGVuY2llcyB3b3JrCisKKzIwMDItMDMtMDggIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIGNvbmZpZ3VyZS5pbjogYnVtcCB0byAwLjJjdnMKKworCSogVE9ETzogdXBkYXRlCisgCisyMDAyLTAzLTA3ICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgorCisJKiBwcC9vcGZfY29udGFpbmVyLmNwcDogaGFuZGxlIG9zZl9zaG9ydF9saW5yX2luZm8KKwkqIHBwL29wcF9zeW1ib2wuY3BwOiB0d2VhayBvdXRwdXQgb3V0cHV0IHdoZW4KKwkgIGxpbmVuci9maWxlbmFtZSBpcyBub3QgYXZhaWxhYmxlCisKKzIwMDItMDMtMDcgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIHV0aWwvTWFrZWZpbGUuaW46IHJlbW92ZSAtcGVkYW50aWMgKFBoaWwgZG9uJ3QgeW91CisJICByZWFkIGNvbW1lbnRzID8gOykKKyAKKzIwMDItMDMtMDcgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIFRPRE86IHVwZGF0ZQorCisJKiBwcC86IHVzZSAiaW52YWxpZCIgbm90ICJpbGxlZ2FsIgorIAorMjAwMi0wMy0wNiAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogVE9ETzogdXBkYXRlCisgCisyMDAyLTAzLTA2ICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgorCisJKiBwcC9vcGZyb3BwX3V0aWwuY3BwOiBtb3JlIHNwZWNpZmljIGVycm9yIG1lc3NhZ2VzCisKKwkqIGRvYy9vcHJvZmlsZS5zZ21sOiBjbGFyaWZ5IHByb2JsZW0gYWJvdXQgc3BhcnNlCisJICBzYW1wbGVzIGZpbGVzIGFuZCBmaWxlc3lzdGVtLgorCisJKiB1dGlsL2ZpbGVfbWFuaXAuaDoKKwkqIHV0aWwvZmlsZV9tYW5pcC5jcHA6IGNyZWF0ZV9maWxlX2xpc3QoKSBhbGxvdyByZWN1cnNpdmUKKwkgIGZpbGUgbGlzdCBjcmVhdGlvbi4KKwkqIHBwL29wX3RpbWUuY3BwOiBhZGQgb3B0aW9uIC1wLy1QIHRvIGFsbG93IHNwZWNpZnlpbmcKKwkgIGFsdGVybmF0ZSBwYXRoIG5hbWUgd2hlcmUgdG8gc2VhcmNoIGZvciBpbWFnZSBuYW1lCisJKiBkb2Mvb3Byb2ZpbGUuMS5pbjoKKwkqIGRvYy9vcHJvZmlsZS5zZ21sOiB1cGRhdGUgb3B0aW9uIGZvciBvcF90aW1lCisKKzIwMDItMDMtMDUgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+CisKKwkqIHBwL29wcm9mcHBfdXRpbC5jcHA6IHJlbW92ZSBtdWx0aXBsZSBzeW1ib2xzIGJlbG9uZ2luZworCSAgdG8gdGhlIHNhbWUgdm1hIChGaXggIzUyNjA5OCkKKwkgIEFjY2VwdCBhbHNvIGFsbCBzeW1ib2wgdHlwZXMsIHdlIGZpbHRlciB0aGVtIGJ5IG5hbWUuCisKKzIwMDItMDMtMDQgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+CisKKwkqIHV0aWwvbWlzYy5oOiBtaW5vciBjb21tZW50IGZpeAorCisJKiBwcC9vcHJvZnBwX3V0aWwuY3BwOiB0d2VhayB0aGUgbGFzdCBjb21taXQKKworMjAwMi0wMy0wNCAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogcHAvb3Byb2ZwcF91dGlsLmNwcDogd2VsY29tZSBpbiB0aGUgbG9jYWwgc3ltYm9scyAuLi4KKyAKKzIwMDItMDMtMDMgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+CisKKwkqIHBwL29wZl9maWx0ZXIuaDoKKwkqIHBwL29wZl9jb250YWluZXIuY3BwOiBzYW1wbGVzX2ZpbGVzX3Q6OmFkZCgpIGFkZCBhbiBoaW50CisJICBwYXJhbWV0ZXIgb24gd2hhdCBpbmZvcm1hdGlvbiB3aWxsIG5lZWRlZC4KKwkqIHBwL29wX3RpbWUuY3BwOgorCSogcHAvb3Byb2ZwcC5jcHA6CisJKiBwcC9vcGZfZmlsdGVyLmNwcDogdXNlIGl0CisJCisJKiBwcC9vcF90aW1lLmNwcDogd2hlbiBhIHNhbXBsZXMgZmlsZXMgZm9yIG9uZSBjb3VudGVyCisJICBkb2VzIG5vdCBleGlzdCBhdm9pZCB0byBsb2FkIGl0IChvcF90aW1lIC1sKSBmaXggIzUyNTIzNworCisyMDAyLTAzLTAyICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgorCisJKiBwcC9NYWtlZmlsZS5pbjogYWRkIC1wZWRhbnRpYyB0byBDWFhGTEFHUworCSogcHAvb3Byb2ZwcC5oOiByZXBsYWNlIG1hY3JvIHZlcnBicmludGYgd2l0aCBhIGZ1bmN0aW9uCisJKiBwcC9vcHJvZnBwX3V0aWwuY3BwOiBpbXBsZW1lbnQgaXQKKwkqIHBwL29wcF9zeW1ib2wuaDoKKwkqIHBwL29wX3RpbWUuY3BwOiBmaXggcGVkYW50aWMgd2FybmluZworCisJKiBwcC9vcGV2ZW50cy5jcHA6CisJKiBvcF91c2VyLmg6IG9wX2dldF9jcHVfbnJfY291bnRlcnMoKSBuZXcKKworCSogcHAvb3BfdGltZS5jcHA6CisJKiBwcC9vcGZfY29udGFpbmVyLmNwcDoKKwkqIHBwL29wZl9maWx0ZXIuY3BwOgorCSogcHAvb3BmX2ZpbHRlci5oOgorCSogcHAvb3BwX3N5bWJvbC5jcHA6CisJKiBwcC9vcHJvZnBwLmNwcDoKKwkqIHBwL29wcm9mcHBfdXRpbC5jcHA6IHJlbW92ZSBnbG9iYWwgdmFyIG9wX25yX2NvdW50ZXJzCisKKzIwMDItMDMtMDIgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+CisKKwkqIG1vZHVsZS9vcF9zeXNjYWxscy5jOiBkbyBub3QgcHJlLWFsbG9jYXRlIHNvbWUgZG5hbWUKKwkgIGhhc2ggbWFwIGVudHJ5IGZvciBjb21tb24gcGF0aG5hbWUgYnV0IHByZSBhbGxvYyBlbnRyeQorCSAgemVybyB0byByZXNlcnZlIGl0CisKKwkqIHBwL29wX3RpbWUuY3BwOiBhZGQgaW1hZ2UgbmFtZSB0byB0aGUgZGVmYXVsdCBvdXRwdXQgZm9ybWF0CisKKwkqIG1vZHVsZS9jb21wYXQyMi5oOiBtb3ZlIGNhY2hlbGluZV9hbGlnbmVkIG1hY3JvIHRvIC4uLgorCSogbW9kdWxlL29wX2NhY2hlLmg6IHRoaXMgbmV3IGZpbGUKKwkqIG1vZHVsZS9jb21wYXQuaDogdXNlIGl0CisJKiBtb2R1bGUvY29tcGF0MjIuaDoKKwkqIG1vZHVsZS9vcHJvZmlsZS5jOiByZXBsYWNlIHNvbWUgX19jYWNoZWxpbmVfYWxpZ25lZCBieQorCSAgX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXAKKworMjAwMi0wMy0wMSAgUGhpbGlwcGUgRWxpZSAgPHBoX2VAY2x1Yi1pbnRlcm5ldC5mcj4KKworCSogZGFlL29wZF9rZXJuZWwuYzoKKwkqIGRhZS9vcGRfcHJvYy5jOiBzaW1wbGlmeSBoYW5kbGluZyBvZiBrZXJuZWwgc2FtcGxlcworCisJKiBwcC9vcHRfdGltZS5jcHA6CisJKiBwcC9vcHBfc3ltYm9sLmNwcDoKKwkqIHBwL29wcF9zeW1ib2wuaDoKKwkqIHBwL29wcm9mcHAuY3BwOgorCSogcHAvb3Byb2ZwcC5oOiB0aWR5LCBnaXZlcyBhIG5lZ2F0aXZlIGZvcm0gdG8gaGVhZGVyIG91dHB1dAorCSAgZm9ybWF0CisKKwkqIHZlcnNpb24uaC5pbjogbmV3IG1hY3JvIHNob3dfdmVyc2lvbigpIHRvIG91dHB1dCB2ZXJzaW9uCisJKiBkb2Mvb3Byb2ZpbGUuc2dtbDogZG9jdW1lbnQgaXQKKwkqIGRhZS9vcHJvZmlsZWQuYzoKKwkqIGV2ZW50cy9vcF9oZWxwLmM6CisJKiBwcC9vcF9tZXJnZS5jcHA6CisJKiBwcC9vcF90aW1lLmNwcDoKKwkqIHBwL29wZl9maWx0ZXIuY3BwOgorCSogcHAvb3Byb2ZwcC5jcHA6IHVzZSBpdAorCisyMDAyLTAzLTAxICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgorCisJKiBUT0RPOiB1cGRhdGUKKworCSogbW9kdWxlL29wcm9maWxlLmM6CisJKiBtb2R1bGUvb3Bfc3lzY2FsbHMuYzogbWVyZ2Ugbm90ZS9tYXAgbG9jayAKKyAKKzIwMDItMDItMjcgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+CisKKwkqIFRPRE86IHVwYWR0ZQorCisJKiBkb2Mvb3Byb2ZpbGUuMS5pbjoKKwkqIGRvYy9vcHJvZmlsZS5zZ21sOgorCSogcHAvb3BwX3N5bWJvbC5oOgorCSogcHAvb3BwX3N5bWJvbC5jcHA6CisJKiBwcC9vcHJvZnBwLmNwcDogdXNlIGNvbHVtbmVkIG91dHB1dCBmb3Igb3Byb2ZwcCAtTCwgLXMKKworCSogcHAvb3Byb2ZwcC5jcHA6IGNvbW1hbmQtbGluZSBjb3VudGVyIHNwZWNpZmljYXRpb24KKwkgIHdhcyBicm9rZW4gYnkgbXkgbGFzdCBwYXRjaAorCSogcHAvb3BmX2ZpbHRlci5jcHA6IGRpdHRvIGJ1dCBidWcgY29tZXMgZnJvbSB0aGUgZmFyIHBhc3QKKworMjAwMi0wMi0yNiAgUGhpbGlwcGUgRWxpZSAgPHBoX2VAY2x1Yi1pbnRlcm5ldC5mcj4KKworCSogcHAvb3BfbWVyZ2UuY3BwOiBzbWFsbCB0aWR5CisKKwkqIHBwL29wX3RpbWUuY3BwOgorCSogcHAvb3BmX2NvbnRhaW5lci5jcHA6CisJKiBwcC9vcGZfZmlsdGVyLmg6CisJKiBwcC9vcGZfZmlsdGVyLmNwcDoKKwkqIHBwL29wcm9mcHAuY3BwOgorCSogcHAvb3Byb2ZwcC5oOgorCSogcHAvb3Byb2ZwcF91dGlsLmNwcDogcmVtb3ZlIHRoZSBuYXN0eSBnbG9iYWwgdmFyIGludCBjdHI7CisJICBwYXNzIGl0IGFzIHBhcmFtZXRlciB0byBlYWNoIHJlbGV2YW50IGZ1bmN0aW9uIHVzaW5nIGl0LgorCisJKiBtb2R1bGUvY29tcGF0Lmg6IHN1cHBvcnQgZm9yIDIuNS41LiAyLjQuMTggYWxzbyB0ZXN0ZWQKKworCSogcHAvb3BwX3N5bWJvbC5oOgorCSogcHAvb3BwX3N5bWJvbC5jcHA6IG5ldywgbWFpbmx5IGZvciBpbXBsZW1lbnRpbmcgLS1vdXRwdXQtZm9ybWF0CisJKiBwcC9vcF90aW1lLmNwcDoKKwkqIHBwL29wcm9mcHAuY3BwOiB1c2Ugb3V0cHV0IGZvcm1hdCBzdHVmZgorCSogcHAvTWFrZWZpbGUuaW46IHJlZmxlY3QgYWJvdmUgY2hhbmdlCisJKiBkb2Mvb3Byb2ZpbGUuMS5pbjoKKwkqIGRvYy9vcHJvZmlsZS5zZ21sOiBkb2N1bWVudCAtLW91dHB1dC1mb3JtYXQKKworMjAwMi0wMi0xMyAgUGhpbGlwcGUgRWxpZSAgPHBoX2VAY2x1Yi1pbnRlcm5ldC5mcj4KKworCSogVE9ETzogdXBkYXRlCisKKwkqIG1vZHVsZS9jb21wYXQyMi5oOgorCSogbW9kdWxlL2NvbXBhdDI0Lmg6CisJKiBtb2R1bGUvb3Byb2ZpbGVfbm1pLlM6IHNtYWxsIHRpZHkKKworCSogbW9kdWxlL29wX2FwaWMuYzoKKwkqIG1vZHVsZS9vcF9maXhtYXAuYzoKKwkqIG1vZHVsZS9vcF9ubWkuYzoKKwkqIG1vZHVsZS9vcHJvZmlsZS5oOiBhdm9pZCBtZW1vcnkgbGVhayBvZiBhcGljIG1hcHBpbmcKKworMjAwMi0wMi0xMiAgUGhpbGlwcGUgRWxpZSAgPHBoX2VAY2x1Yi1pbnRlcm5ldC5mcj4KKworCSogVE9ETzogdXBkYXRlCisKKwkqIHBwL29wcm9mcHBfdXRpbC5jcHA6IHVzZSBzdGFibGUgc29ydCBhbmQgY29ycmVjdCB0aGUgY29tcGFyaXNvbgorCSAgZnVuY3Rpb24gb24gc3ltYm9sIHZtYQorCSogcHAvb3BmX2ZpbHRlci5jcHA6IHJlbW92ZSBhIGJvcmluZyBuZXcgbGluZSBpbiBvdXRwdXQKKworCSogbW9kdWxlL21ha2VmaWxlLmluOiBvcHRpbWl6ZSBmb3IgNjg2IGJ1dCBkbyBub3QgdXNlIGFueSBzcGVjaWZpYworCSAgNjg2IGluc24uCisKKwkqIGNvbmZpZ3VyZS5pbjogY2hlY2sgYWdhaW5zdCBDT05GSUdfUFJFRU1QVAorCisyMDAyLTAyLTEwICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgorCisJKiBldmVudHMvb3BfZXZlbnRzX2Rlc2MuYzogcmVtb3ZlIGRlYWQgY29kZQorIAorCSogbW9kdWxlL2NvbXBhdC5oOiBSZWRIYXQgYmFja3BvcnRlZCBNT0RVTEVfTElDRU5TRSgpCisgCisJKiBtb2R1bGUvb3Bfc3lzY2FsbHMuYzoKKwkqIG1vZHVsZS9vcF91dGlsLmM6IHJlbW92ZSBGSVhNRXMKKyAKKzIwMDItMDItMDkgIEJvYiBNb250Z29tZXJ5ICA8Ym9ibUBmYy5ocC5jb20+CisKKwkqIG1vZHVsZS9vcF9ydGMuYzogcmlnaHQgYWN0dWFsIFJUQyB2YWx1ZSBiYWNrCisKKwkqIGRvYy9vcHJvZmlsZS5zZ21sOiBkb2N1bWVudCB0aGF0CisKKzIwMDItMDItMDkgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIG1vZHVsZS9vcF9pbml0LmM6IHNldCBydGMgY3B1IHR5cGUgZGlyZWN0bHkKKyAKKzIwMDItMDItMDggIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+CisKKwkqIFRPRE86IHVwZGF0ZQorCisJKiBtb2R1bGUvb3Byb2ZpbGVfbm1pLlM6IGN1dCBhbmQgY29weSBmcm9tIG9wcm9maWxlX25taTI0LnMKKwkqIG1vZHVsZS9vcHJvZmlsZV9ubWkyMi5TOiByZW1vdmUKKwkqIG1vZHVsZS9vcHJvZmlsZV9ubWkyMi5TOiByZW1vdmUKKwkqIG1vZHVsZS9NYWtlZmlsZS5pbjogcmVmbGVjdCB0aGVtCisKKwkqIHBwL29wZl9maWx0ZXIuY3BwOiBkbyBub3QgcHJpbnQgdW5pdCBtYXNrIGZvciBSVEMgY3B1IHR5cGUKKworCSogZG9jL29wcm9maWxlLnNnbWw6IGRvY3VtZW50IHBvc3QtcHJvZmlsZSB0b29scyBjb21tb25zIG9wdGlvbnMKKworMjAwMi0wMi0wNSAgUGhpbGlwcGUgRWxpZSAgPHBoX2VAY2x1Yi1pbnRlcm5ldC5mcj4KKworCSogVE9ETzogdXBkYXRlIG1haW5seSBieSBtb3ZpbmcgdGhpbmdzIHRvIDAuMQorCisJKiBwcC9vcGZfZmlsdGVyLmg6CisJKiBwcC9vcGZfY29udGFpbmVyLmNwcDogc21hbGwgY2xlYW51cCArIG1pbm9yIHR3ZWFrIHRvIGdldAorCSAgbW9yZSByZWxpYWJsZSBzb3J0IG9yZGVyIG9uIGZpbGVuYW1lLgorCisyMDAyLTAyLTA1ICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgorCisJKiBwcC9vcGZfZmlsdGVyLmg6IGRlY2xhcmUgY3JlYXRlX2FydGlmaWNpYWxfc3ltYm9sKCkKKwkqIHBwL29wcm9mcHBfdXRpbC5jcHA6IHNob3cgaG93IGVsZiBzeW1ib2xzIHNpemUgY291bGQKKwkgIGJlIGhhbmRsZWQuCisKKwkqIHBwL29wcm9mcHBfdXRpbC5jcHA6IGFkZCBCU0ZfR0xPQkFMIHN5bWJvbHMgdG8KKwkgIHN5bWJvbHMgb2YgaW50ZXJlc3QuCisKKzIwMDItMDItMDQgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIG1vZHVsZS9vcHJvZmlsZS5jOiBhZGQgW3VuXWxvY2tfc3lzY3RsCisgCisyMDAyLTAyLTA0ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgorCisJKiBkYWUvb3Byb2ZpbGVkLmg6CisJKiBkYWUvb3Byb2ZpbGVkLmM6CisJKiBkYWUvb3BkX3Byb2MuYzogZnJlZSBzdHVmZiBvbiBzaHV0ZG93biAodG8KKwkgIGNsZWFuIGRtYWxsb2MgcmVwb3J0cykKKyAKKzIwMDItMDItMDMgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIGNvbmZpZ3VyZS5pbjogYnVtcCB0byAwLjEKKworCSogVE9ETzogdXBkYXRlCisgCisyMDAyLTAyLTAyICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgorCisJKiBjb25maWd1cmUuaW46IGJ1bXAgdG8gMC4wLjkKKyAKKzIwMDItMDItMDIgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIG1vZHVsZS9vcF9ubWkuYzogZml4IHN0dXBpZCBidWcgc3BvdHRlZCBieSBCb2IKKwkgIE1vbnRnb21lcnkKKyAKKzIwMDItMDItMDEgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+CisKKwkqIG1vZHVsZS9jb21wYXQuaDogZGVmaW5lIFJFTUFQX1BBR0VfUkFOR0UKKwkqIG1vZHVsZS9vcF9zeXNjYWxscy5jOiB1c2UgaXQgKDIuNS4zIHN1cHBvcnQpCisKKzIwMDItMDEtMzAgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+CisKKwkqIG1vZHVsZS9jb21wYXQuaDoKKwkqIG1vZHVsZS9vcF9ubWkuYzogcmUtYWRkIGV4cGxpY2l0IGNvbnN0YW50IGZvciBhbGwgTVNSXworCSAgY29uc3RhbnRzLgorCisyMDAyLTAxLTMwICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgorCisJKiBjb25maWd1cmUuaW46CisJKiBkb2Mvb3Byb2ZpbGUuc2dtbDoKKwkqIG1vZHVsZS9jb21wYXQyMi5oOiByZW1vdmUgc3VwcG9ydCBmb3Iga2VybmVsIHZlcnNpb24KKwkgIHByaW9yIHRvIDIuMi4xMQorCisJKiBtb2R1bGUvb3BfZml4bWFwLmM6CisJKiBtb2R1bGUvY29tcGF0Lmg6IHNtYWxsIGNsZWFudXAKKworCSogbW9kdWxlL29wcm9maWxlLmM6IGF2b2lkIG11bHRpLWxpbmUgbGl0ZXJhbCBzdHJpbmcKKworCSogcHAvb3Byb2ZwcF91dGlsLmNwcDogYmV0dGVyIHRvIGdldF9zeW1ib2xzKCkgOykKKworMjAwMi0wMS0yOSAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogbW9kdWxlL29wX2ZpeG1hcC5jOiByZW1hcCBmYWtlIG1hcHBpbmcgb24gMi4yIGFzIHdlbGwKKwkgIHdoZW4gbmVjZXNzYXJ5CisgCisyMDAyLTAxLTI3ICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgorCisJKiBtb2R1bGUvTWFrZWZpbGUuaW46IHNvcnJ5LCAtV2Vycm9yIGlzIG9ubHkgdXNlZnVsbAorCSAgZm9yIHRlc3QuCisKKwkqIGRvYy9vcHJvZmlsZS4xLmluOiBhIGZldyB3b3JkcyBhYm91dCBvcF9zdG9wCisKKwkqIG1vZHVsZS9jb21wYXQuaDoKKwkqIG1vZHVsZS9jb21wYXQyMi5oOgorCSogbW9kdWxlL2NvbXBhdDI0Lmg6IGNoYW5nZSBwdGVfcGFnZV9hZGRyZXNzIGRlZmluaXRpb24KKwkgIGZvciAyLjIuMjAKKworCSogcHAvb3BmX2NvbnRhaW5lci5jcHA6IG5vIHdhcm5pbmcgd2hlbiBjcmVhdGluZyBhcnRpZmljaWFsIHN5bWJvbHMKKwkqIHBwL29wcm9mcHBfdHVpbC5jcHA6IG5vIHdhcm5pbmcgZm9yIGltYWdlIHdpdGhvdXQgc3ltYm9scworCisyMDAyLTAxLTI3ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgorCisJKiBndWkvb3Byb2Zfc3RhcnQuY3BwOgorCSogcHAvb3BfbWVyZ2UuY3BwOgorCSogcHAvb3BfdGltZS5jcHA6CisJKiBwcC9vcGZfY29udGFpbmVyLmNwcDogc3RkIG5hbWVzcGFjZSBmaXhlcy4KKyAKKzIwMDItMDEtMjcgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIHBwL29wX3RpbWUuY3BwOiBzbWFsbCBoYWNreSBvdXRwdXQgY2xlYW51cAorIAorMjAwMi0wMS0yNyAgUGhpbGlwcGUgRWxpZSAgPHBoX2VAY2x1Yi1pbnRlcm5ldC5mcj4KKworCSogVE9ETzogdXBkYXRlCisKKwkqIGRhZS9vcGRfcHJvYy5jOiBzbWFsbCBjbGVhbnVwCisKKwkqIGRvYy9vcGZfY29udGFpbmVyLmNwcDogaGFuZGxlIGltYWdlIHdpdGhvdXQgc3ltYm9scworCisJKiBkb2Mvb3Byb2ZpbGUuMS5pbjoKKwkqIGRvYy9vcHJvZmlsZS5zZ21sOgorCSogZG9jL29wX3RpbWUuY3BwOiBpbXBsZW1lbnQgYW5kIGRvY3VtZW50IC0tZGVtYW5nbGUKKwkgIGFuZCAtLXNob3ctaW1hZ2UtbmFtZQorCisJKiBwcC9vcHJvZnBwX3V0aWwuY3BwOiBhZGQgdXNpbmcgZWxmIHN5bWJvbHMgc2l6ZSBidXQKKwkgIGRpc2FibGUgaXQKKworMjAwMi0wMS0yNiAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogVE9ETzogdXBkYXRlCisKKwkqIGRhZS9vcGRfcHJvYy5jOiB0aW55IGNsZWFuCisKKwkqIGRvYy9vcHJvZmlsZS5zZ21sOiBzcGVsbCBmaXgKKyAKKzIwMDItMDEtMjYgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+CisKKwkqIFRPRE86IHVwZGF0ZQorCisJKiBwcC9vcF9tZXJnZS5jOiByZW1vdmUgRklYTUUKKwkqIHBwL29wX3RpbWUuY3BwOiBtaW5vciBmaXgKKwkKKwkqIHBwL29wZl9maWx0ZXIuaDoKKwkqIHBwL29wZl9maWx0ZXIuY3BwOgorCSogcHAvb3Byb2ZwcC5jcHA6CisJKiBwcC9vcGZfY29udGFpbmVyLmNwcDogU2hvdyBtb3JlIGNsZWFybHkgdGhhbgorCSAgc2FtcGxlc19maWxlc190IHN1cHBvcnQgYWRkaW5nIGFueSBudW1iZXIgb2Ygc2FtcGxlcworCSAgZmlsZXMgdG8gdGhlIHVuZGVybGluZWQgY29udGFpbmVyLgorCisyMDAyLTAxLTI2ICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgorCisJKiBwcC9vcHJvZnBwX3V0aWwuY3BwOiBhbGxvdyB0byBsb2FkIGltYWdlIHdpdGhvdXQgc3ltYm9scworCisJKiBwcC9NYWtlZmlsZS5pbjoKKwkqIHBwL29wX3RpbWU6IGltcGxlbWVudCAtbCBvcHRpb24gdGhhdCBzaG93IHN5bWJvbHMgZGV0YWlscy4KKwkgIEN1cnJlbnRseSB3aXRoIHNlcGFyYXRlLXNhbXBsZXMgZmlsZXMgc3ltYm9scyBhcmUgc2hvd2VkCisJICBtb3JlIHRoYW4gb25lIHRpbWUuIFRoaXMgaXMgYSBidWcgcmF0aGVyIGEgZmVhdHVyZS4KKwkqIGRvYy9vcHJvZmlsZS4xLmluOgorCSogZG9jL29wcm9maWxlLnNnbWw6IGRvY3VtZW50IG9wX3RpbWUgLWwKKworCSogZGFlL29wZF9wcm9jLmM6IGJ1ZyBmaXggZnJvbSBsYXN0IGNoYW5nZQorCisyMDAyLTAxLTI1ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgorCisJKiBUT0RPOgorCSogZGFlL29wZF9wcm9jLmM6IHNlYXJjaCBtYXBzIGluIHJldmVyc2Ugb3JkZXIgc28gd2UgcHJlZmVyCisJICBuZXdlciBtYXBwaW5ncy4KKyAKKzIwMDItMDEtMjUgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+CisKKwkqIHBwL29wX21lcmdlLmNwcDogbWlub3IgZml4ICsgY29tbWVudAorCSogcHAvb3BfdGltZS5jcHA6IGNvbW1lbnQsIHVzZSBzYW1wbGVzX2ZpbGVfdAorCSogcHAvb3Byb2ZwcC5oOgorCSogcHAvb3Byb2ZwcF91dGlsLmNwcDogbWlub3IgY2hhbmdlCisKKzIwMDItMDEtMjQgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIGRhZS9vcGRfcHJvYy5jOiByZW1vdmUgc3RhbGUgY29tbWVudAorCisJKiBUT0RPOiB1cGRhdGUKKworCSogbW9kdWxlL2NvbXBhdC5oOgorCSogbW9kdWxlL2NvbXBhdDIyLmg6CisJKiBtb2R1bGUvY29tcGF0MjQuaDogZml4IGZvciBwdGVfcGFnZSBvbiAyLjIuMjArCisgCisyMDAyLTAxLTI0ICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgorCisJKiBvcF9tZXJnZS5jcHA6CisJKiBvcHJvZnBwLmg6CisJKiBvcHJvZnBwX3V0aWwuY3BwOiBjb2RlIG1vdmUgKyBjbGVhbnVwCisKKzIwMDItMDEtMjMgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+CisKKwkqIHV0aWwvc2hhcmVkX3B0ci5oOiBhIHRlbXBsYXRpemVkIHNoYXJlZCBwb2ludGVyLgorCisJKiBwcC9vcF9tZXJnZS5jOiBuZXcgdG8gbWVyZ2Ugc2FtcGxlcyBmaWxlcworCSogcHAvTWFrZWZpbGUuaW46CisJKiBwcC9vcGZfZmlsdGVyLmNwcDoKKwkqIHBwL29wZl9maWx0ZXIuaDoKKwkqIHBwL29wcm9mcHAuaDoKKwkqIHBwL29wcm9mcHBfdXRpbC5jcHA6IG1pbm9yIGNoYW5nZSB0byBhZGQgb3BfbWVyZ2Ugc3VwcG9ydAorCisJKiBkb2MvTWFrZWZpbGUuaW46CisJKiBkb2Mvb3Byb2ZpbGUuMS5pbjoKKwkqIGRvYy9vcHJvZmxlLnNtZ2w6IGRvY3VtZW50IG9wX21lcmdlCisKKzIwMDItMDEtMjIgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIG1vZHVsZS9NYWtlZmlsZS5pbjogY2FuIG9ubHkgZGVwbW9kIGlmIHdlIHJ1biB0aGF0IGtlcm5lbAorIAorCSogbW9kdWxlL29wX2ZpeG1hcC5jOiBkZWFsIHdpdGggbm8gQVBJQyBjb25maWcgZm9yCisJICAyLjQuMTArCisgCisyMDAyLTAxLTIyICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgorCisJKiBtb2R1bGUvTWFrZWZpbGUuaW46CisJKiBtb2R1bGUvb3Byb2ZpbGUuaDoKKwkqIG1vZHVsZS9vcHJvZmlsZS5jOgorCSogbW9kdWxlL29wX3g4Ni5jOgorCSogbW9kdWxlL29wX2FwaWMuYzoKKwkqIG1vZHVsZS9vcF9maXhtYXAuYzogc3BsaXQgb3BfeDg2LmMuIFZhcmlvdXMgY2hhbmdlcyB0bworCSAgb25seSBlbmFibGUgdGhlIEFQSUMgaWYgaXQncyBub3QsIGFuZCB0byByZW1hcCAvIG1hcCB0aGUgQVBJQworCSAgYXMgaXMgbmVjZXNzYXJ5LgorCisJKiBtb2R1bGUvYXBpY191cF9jb21wYXQuaDogCisJKiBtb2R1bGUvY29tcGF0Lmg6CisJKiBtb2R1bGUvY29tcGF0MjIuaDogY2xlYW4gdXAgVl8qKCkgbWFjcm9zCisKKwkqIG1vZHVsZS9vcF9pbml0LmM6IHJlbW92ZSBGT1JDRV9SVEMKKyAKKzIwMDItMDEtMjIgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+CisKKwkqIFRPRE86IHVwZGF0ZQorCisJKiBkYWUvb3BkX3Byb2MuYzogdXNlIHJlbW92ZSBub3QgdW5saW5rCisJKiBndWkvb3Byb2Zfc3RhcnQuY3BwOiB1c2UgcmVtb3ZlIG5vdCBzeXN0ZW0oInJtIHh4eCIpCisKKwkqIGRvYy9NYWtlZmlsZS5pbjogc2xpZ2h0bHkgaW1wcm92bWVudAorCSogZG9jL29wcm9maWxlLjEuaW46IG1vdmUgLS1oZWxwIC0tdmVyc2lvbiB0byBhIGNvbW1vbiBzZWN0aW9uCisKKzIwMDItMDEtMjEgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIG1vZHVsZS9jb21wYXQyMi5oOiBmaXggbWlzc2luZyBjbGkoKQorIAorMjAwMi0wMS0yMSAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogbW9kdWxlL29wcm9maWxlLmM6IAorCSogbW9kdWxlL2NvbXBhdDIyLmg6CisJKiBtb2R1bGUvY29tcGF0MjQuaDogZml4IE5NSSB3YWtlLXVwIGZvciAyLjIgU01QCisgCisJKiBtb2R1bGUvb3BfZGNhY2hlLmg6IGFkZCBLRVJOX0VSUgorIAorCSogbW9kdWxlL29wX3g4Ni5jOiBjbGVhbnVwIGEgbGl0dGxlCisgCisyMDAyLTAxLTIxICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgorCisJKiBUT0RPOiB1cGRhdGUKKworCSogZG9jL29wcm9maWxlLjEuaW46CisJKiBkb2Mvb3Byb2ZpbGUuc2dtbDogbWlub3IgY2hhbmdlCisKKwkqIG1vZHVsZS9NYWtlZmlsZS5pbjogYXV0by1kZXBlbmRlbmNpZXMgZm9yIGNvbXBhdC5jCisKKwkqIG1vZHVsZS9jb21wYXQuYzoKKwkqIG1vZHVsZS9jb21wYXQyMi5oOiBGSVhNRSByZW1vdmUgZm9yIHZtYWxsb2NfMzIKKworMjAwMi0wMS0yMCAgUGhpbGlwcGUgRWxpZSAgPHBoX2VAY2x1Yi1pbnRlcm5ldC5mcj4KKworCSogZ3VpL29wcm9mX3N0YXJ0LmNwcDogZml4IGNvbmZpZ3VyYXRpb24gc2F2aW5nIHdoZW4KKwkgIHN3aXRjaGluZyBvZiBjcHVfdHlwZS4KKworCSogbW9kdWxlL01ha2VmaWxlLmluOgorCSogbW9kdWxlL2NvbXBhdC5jOiBtaW5vciBjaGFuZ2UKKworCSogY29tcGF0Lmg6IGFkZCBtaW5vciBtYWNybworCSogb3Byb2ZpbGUuYzogdXNlIG1pbm9yIGluc3RlYWQgTUlOT1IgKDIuNS4yIHN1cHBvcnQpCisKKwkqIG9wX3g4Ni5jOiBjaGVjayBTUElWIChtaXNzaW5nIGZyb20gYSBwcmV2aW91cyBwYXRjaCkKKworMjAwMi0wMS0yMCAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogVE9ETzogcHVudCBzb21lIHRoaW5ncyB0byBuZXh0IHJlbGVhc2UKKworCSogZGFlL29wZF9wcm9jLmM6IGZpeCBwcmludGYgb2YgbnVsbAorIAorMjAwMi0wMS0yMCAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogVE9ETzogdXBkYXRlCisgCisJKiBtb2R1bGUvb3Byb2ZpbGUuYzogYWRkIGNvbW1lbnQKKyAKKwkqIG1vZHVsZS9jb21wYXQyMi5oOgorCSogbW9kdWxlL2NvbXBhdDI0Lmg6CisJKiBtb2R1bGUvb3Bfc3lzY2FsbHMuYzogZml4IGxvY2tpbmcgZm9yIG91dF9tbWFwCisgCisyMDAyLTAxLTIwICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgorCisJKiBtb2R1bGUvb3BfeDg2LmM6IGNoZWNrIE1TUiArIFNQSVYgZm9yIGVuYWJsaW5nIEFQSUMKKyAKKwkqIG1vZHVsZS9jb21wYXQuYzogZG9uJ3QgYXR0ZW1wdCB0byBnZXQgcm9vdAorCisJKiBtb2R1bGUvY29tcGF0Lmg6IE5FRURfRklYTUFQIGZpeGVzCisgCisyMDAyLTAxLTE4ICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgorCisJKiBUT0RPOiB1cGRhdGUKKworCSogbW9kdWxlL2NvbXBhdC5oOgorCSogbW9kdWxlL2NvbXBhdDI0Lmg6IG1vdmUgdGhpbmdzIG5lZWRlZCBmb3IgMi4yLzIuNCBpbiBjb21wYXQuaAorCisyMDAyLTAxLTE4ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgorCisJKiBtb2R1bGUvY29tcGF0MjIuaDogbmV2ZXIgd2FrZSB1cCBmcm9tIE5NSQorCSAgb24gMi4yIFNNUCBmb3Igbm93IDooCisgCisyMDAyLTAxLTE4ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgorCisJKiBtb2R1bGUvY29tcGF0Lmg6CisJKiBtb2R1bGUvY29tcGF0MjIuaDogCisJKiBtb2R1bGUvY29tcGF0MjQuaDogcy9WQVRMRUFTVC9WX0FUX0xFQVNULworIAorCSogbW9kdWxlL29wcm9maWxlLmM6IHJlbW92ZSBkZWFkIGNvZGUKKyAKKzIwMDItMDEtMTcgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIG1vZHVsZS9jb21wYXQuYzogZG9uJ3QgbmVlZCB0byByZS10YWtlIEJLTCBmb3IKKwkgIGRfcGF0aCBvbiAyLjIKKyAKKzIwMDItMDEtMTcgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIG1vZHVsZS9jb21wYXQyMi5oOgorCSogbW9kdWxlL2NvbXBhdDI0Lmg6CisJKiBtb2R1bGUvb3Bfc3lzY2FsbHMuYzogd2UgbXVzdG4ndCB0YWtlIHRoZSBtbWFwIHNlbQorCSAgdW5kZXIgMi4yCisgCisyMDAyLTAxLTE3ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgorCisJKiBtb2R1bGUvY29tcGF0MjIuaDoKKwkqIG1vZHVsZS9jb21wYXQyNC5oOgorCSogbW9kdWxlL29wX3N5c2NhbGxzLmM6IHdob29wcywgaGFuZHkgdG8gbG9jayB0aGUKKwkgIEJLTCB3aGVuIGl0IGlzIG5lY2Vzc2FyeS4KKyAKKwkqIGRhZS9vcHJvZmlsZWQuYzogZml4IHdhcm5pbmcKKworMjAwMi0wMS0xNyAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogb3BfdXNlci5oOgorCSogZGFlL29wX3N0YXJ0OgorCSogZ3VpL29wcm9mX3N0YXJ0X2NvbmZpZy5oOgorCSogbW9kdWxlL29wcm9maWxlLmg6IGJ1bXAgbm90ZSBzaXplIGFuZCB3YXRlcm1hcmssCisJICBJIHdhcyBnZXR0aW5nIHByb2JsZW1zIG9uIG15IGR1YWwgU01QIGJveCBpbiBrZXJuZWwgY29tcGlsZXMKKyAKKzIwMDItMDEtMTcgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIG1vZHVsZS9NYWtlZmlsZS5pbjoKKwkqIG1vZHVsZS9vcHJvZmlsZV9ubWkuUzoKKwkqIG1vZHVsZS9vcHJvZmlsZV9ubWkyMi5TOgorCSogbW9kdWxlL29wcm9maWxlX25taTI0LlM6IHNwbGl0IGFzc2VtYmx5IGZvciAyLjIvNCAKKworCSogbW9kdWxlL2NvbXBhdC5oOgorCSogbW9kdWxlL2NvbXBhdDIyLmg6CisJKiBtb2R1bGUvY29tcGF0MjQuaDogcy9BRlRFUi9BVExFQVNULworIAorMjAwMi0wMS0xNyAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogbW9kdWxlL2NvbXBhdDI0Lmg6IGRlZmluZSB0byBoYXZlIC0+b3duZXIKKyAKKzIwMDItMDEtMTcgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+CisKKwkqIGd1aS9vcHJvZl9zdGFydC5oOgorCSogZ3VpL29wcm9mX3N0YXJ0X2NvbmZpZy5oOgorCSogZ3VpL29wcm9mX3N0YXJ0LmNwcDogdmFsaWRhdGUgdGhlIFJUQyBtYXggY291bnQKKworMjAwMi0wMS0xNyAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogVE9ETzogdXBkYXRlCisKKwkqIG9wcm9maWxlLmM6CisJKiBtb2R1bGUvY29tcGF0MjQuaDogCisJKiBtb2R1bGUvY29tcGF0MjIuaDogZml4IGNvbXBpbGUsIG5taSB3YWtlIHVwIGNoZWNrCisJIAorCSogbW9kdWxlL29wX3J0Yy5jOiB1c2VyL2tlcm5lbCBwcm9maWxpbmcgZmVhdHVyZQorIAorMjAwMi0wMS0xNyAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogZG9jL29wcm9maWxlLnNnbWw6IGNsYXJpZmljYXRpb24KKyAKKwkqIG1vZHVsZS9jb21wYXQyMi5oOgorCSogbW9kdWxlL2NvbXBhdDI0Lmg6CisJKiBtb2R1bGUvb3Byb2ZpbGUuYzogLT5vd25lciBmaXhlcworIAorMjAwMi0wMS0xNyAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogbW9kdWxlL29wcm9maWxlLmg6IGNsZWFuIHVwCisgCisJKiBtb2R1bGUvY29tcGF0Lmg6CisJKiBtb2R1bGUvY29tcGF0MjIuaDoKKwkqIG1vZHVsZS9jb21wYXQyNC5oOiBzcGxpdCBoZWFkZXIgZmlsZXMgdXAKKwkgIGZvciByZWFkYWJpbGl0eQorIAorMjAwMi0wMS0xNyAgUGhpbGlwcGUgRWxpZSAgPHBoX2VAY2x1Yi1pbnRlcm5ldC5mcj4KKworCSogVE9ETzogdXBkYXRlCisKKwkqIGRvYy9vcHJvZmlsZS5zZ21sOiBzcGVhY2ggYWJvdXQgYXNzZW1ibGVyCisKKwkqIG1vZHVsZS9jb21wYXQuaDogc21hbGwgdHdlYWsgZm9yIDIuMiwgbm8gaW1wYWN0IG9uIDIuNAorCisyMDAyLTAxLTE2ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgorCisJKiBjb25maWd1cmUuaW46IGxvb2sgZm9yIHJ0Y19sb2NrCisgCisJKiBtb2R1bGUvY29tcGF0Lmg6IHVzZSBydGNfbG9jayBpZiB0aGVyZQorCisyMDAyLTAxLTE2ICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgorCisJKiBtb2R1bGUvY29tcGF0Lmg6CisJKiBtb2R1bGUvYXBpY191cF9jb21wYXQuaDogY2xlYW51cCArIGFsbG93IGNvbXBpbGUKKwkgICFDT05GSUdfWDg2X0xPQ0FMX0FQSUMgb24gMi40LzIuNS4gKG9ubHkgY29tcGlsZQorCSAgdGVzdGVkKQorCisyMDAyLTAxLTE1ICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgorCisJKiBldmVudHMvb3BfZXZlbnRzLmM6IGF2b2lkIGd1aSBjcmFzaDogZXZlbnQgbmFtZSBtdXN0CisJICBjb250YWluIG9ubHkgb25lIHdvcmQuIElmIHlvdSB0ZXN0IFJUQyBwYXRjaCBkZXN0cm95CisJICB+Ly5vcHJvZmlsZS9vcHJvZl9zdGFydF9ldmVudCMwCisKKzIwMDItMDEtMTUgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIG1vZHVsZS9jb21wYXQuaDoKKwkqIG1vZHVsZS9jb21wYXQuYzoKKwkqIG1vZHVsZS9vcF9ydGMuYzogMi4yIG1vZHZlcnNpb25zIGZpeAorIAorMjAwMi0wMS0xNSAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogVE9ETzogdXBkYXRlCisKKwkqIG1vZHVsZS9jb21wYXQuaDoKKwkqIG1vZHVsZS9jb21wYXQuYzoKKwkqIG1vZHVsZS9vcF9ydGMuYzogZml4IDIuMiBjb21waWxlCisKKzIwMDItMDEtMTUgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIG1vZHVsZS9NYWtlZmlsZS5pbjogd2hvb3BzLCBmb3Jnb3QgdG8gY29tbWl0IHRoaXMKKyAKKzIwMDItMDEtMTUgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIGd1aS9vcHJvZl9zdGFydC5jcHA6IHNvbWUgaW1wcm92ZW1lbnRzIGZvciBSVEMKKyAKKzIwMDItMDEtMTUgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIGRhZS9vcF9zdG9wOiBmaXggIm9wX3N0YXJ0ICYmIG9wX3N0b3AiIGJ1ZyB1c2luZyBtdWx0aXBsZQorCSAgZHVtcF9zdG9wIHdyaXRlcy4KKworMjAwMi0wMS0xNCAgRGF2ZSBKb25lcyA8ZGF2ZWpAc3VzZS5kZT4KKworCSogcHAvb3BfdGltZS5jcHA6IGZpeCBmb3IgcHJpbnRpbmcgKE5hTiUpIGluIHRoZSB6ZXJvIHNhbXBsZSBjYXNlLgorCisyMDAyLTAxLTE0ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgorCisJKiBtb2R1bGUvb3BfcnRjLmM6IHJlbW92ZSB1bm5lZWRlZCBjaGVjaworCisyMDAyLTAxLTE0ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgorCisJKiBkYWUvb3Bfc3RhcnQ6IGZpeCBmb3IgUE1DIGNhc2UKKyAKKzIwMDItMDEtMTQgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIFRPRE86IHVwZGF0ZQorCisJKiBkYWUvb3Bfc3RhcnQ6IHRha2UgLS1ydGMtdmFsdWUKKworCSogZGFlL29wcm9maWxlZC5jOiBzZXQgaGVhZGVycyBzZW5zaWJseSBmb3IgUlRDCisKKwkqIGRvYy9vcHJvZmlsZS4xLmluOiB1cGRhdGUKKworCSogZG9jL29wcm9maWxlLnNnbWw6IFJUQyB1cGRhdGUKKworCSogZXZlbnRzL29wX2V2ZW50c19kZXNjci5jOiAKKwkqIGV2ZW50cy9vcF9ldmVudHMuYzogZ29vZCBuYW1lIGZvciBSVEMgZXZlbnQgCisKKwkqIGd1aS9vcHJvZl9zdGFydC5jcHA6IGJhc2ljIHN1cHBvcnQgZm9yIFJUQworCisJKiBtb2R1bGUvb3BfcnRjLmM6IGltcGxlbWVudCBhbmQgdXNlIHJ0Y192YWx1ZQorCisyMDAyLTAxLTE0ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgorCisJKiBUT0RPOiB1cGRhdGUKKworCSogZGFlL29wX3N0YXJ0OiBsb2FkIG1vZHVsZSBhdCBzdGFydC4gSGFuZGxlIENQVV9SVEMuCisJICBBdm9pZCBzeXNjdGwgZm9yIG5vdyBvbiBSVEMgY2FzZS4KKworCSogZGFlL29wcm9maWxlZC5jOiBvbmx5IHJlYWQgc3lzY3RscyBpZiBQTUMuIE5lZWRzIGNsZWFuLgorCisJKiBldmVudHMvb3BfZXZlbnRzLmM6IGFkZCBSVEMgZXZlbnQuCisKKwkqIGV2ZW50cy9vcF9ldmVudHNfZGVzYy5jOiBnZXQgQ1BVIHR5cGUgZnJvbSBtb2R1bGUuIAorCisJKiBtb2R1bGUvb3BfaW5pdC5jOiBkZXRlY3QgQ1BVX1JUQy4KKworCSogbW9kdWxlL29wX25taS5jOiBzZXR1cCBjb2RlIG1vdmVkIGZyb20gb3BfaW5pdC5jCisKKwkqIG1vZHVsZS9vcF9ydGMuYzogZW5hYmxlIGludGVycnVwdCwgZml4ZWQgYXQgMTI4IGZvciBub3cuCisKKwkqIG1vZHVsZS9vcF94ODYuYzogYWRkIEF0aGxvbiB0byBuZWVkc19hcGljX3NldHVwIGNoZWNrcworCisJKiBtb2R1bGUvb3Byb2ZpbGUuYzogdXNlIGNvcnJlY3QgaW50ZXJydXB0IGhhbmRsZXIgYmFzZWQgb24KKwkgIENQVSB0eXBlCisKKzIwMDItMDEtMTQgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIFRPRE86IHVwZGF0ZQorCisJKiBvcF91c2VyLmg6IGFkZCBDUFVfUlRDCisKKwkqIG9wX2luaXQuYzogYWRkIEZJWE1FcworCisJKiBvcF9ubWkuYzoKKwkqIG9wX3J0Yy5jOgorCSogb3Byb2ZpbGUuaDoKKwkqIG9wcm9maWxlLmM6IGltcGxlbWVudCBhYnN0cmFjdCBpbnRlcnJ1cHQgaGFuZGxlciBjb2RlCisKKzIwMDItMDEtMTQgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIGd1aS9vcHJvZl9zdGFydF9jb25maWcuY3BwOiBmaXggdm1saW51eC9zeXN0ZW0ubWFwIGRlZmF1bHRzCisgCisyMDAyLTAxLTEzICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgorCisJKiBjb25maWd1cmUuaW46IHJlamVjdCB1bnN1cHBvcnRlZCBrZXJuZWwgdmVyc2lvbgorCSogbW9kdWxlL2FwaWNfdXBfY29tcGF0Lmg6CisJKiBtb2R1bGUvY29tcGF0Lmg6IHNtYWxsIGNsZWFudXAKKwkqIG1vZHVsZS9vcF94ODYuYzogZGl0dG8sIGFsd2F5cyBwdXQgYXBpYyBtZW1vcnkgcGFnZSBhcworCSAgbm9uIGNhY2hhYmxlCisKKzIwMDItMDEtMTIgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIGd1aS9vcHJvZl9zdGFydF91dGlsLmg6CisJKiBndWkvb3Byb2Zfc3RhcnRfdXRpbC5jcHA6IGltcGxlbWVudCB3aGl0ZWxpc3QgZm9yIGFyZ3VtZW50cworCSAgdG8gb3Bfc3RhcnQKKyAKKwkqIFRPRE86IHVwZGF0ZQorCisyMDAyLTAxLTEzICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgorCisJKiBtb2R1bGUvY29tcGF0Lmg6CisJKiBtb2R1bGUvYXBpY191cF9jb21wYXQuaDoKKwkqIG1vZHVsZS9vcF94ODYuYzogYWxsb3cgdG8gcnVuIG9wcm9maWxlIHdoZW4KKwkgICFDT05GSUdfWDg2X0xPQ0FMX0FQSUMgb24gMi4yLngga2VybmVsCisKKzIwMDItMDEtMTIgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+CisKKwkqIG1vZHVsZS9jb21wYXQuaDogZml4IHNvbWUgRklYTUUKKwkqIG1vZHVsZS9vcF94ODYuYzogZG8gbm90IGhhbmcgU01QIGtlcm5lbCBVUCBib3ggd2l0aCAyLjIueAorCisyMDAyLTAxLTExICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgorCisJKiBtb2R1bGUvY29tcGF0Lmg6IHN1cHBvcnQgZm9yIFVQIGZyb20gMi4yLjAsIGZvciBTTVAKKwkgIGZyb20gMi4yLjguIEl0IGlzIHdvcnRod2hpbGUgdG8gdHJ5IG1vcmUgc3VwcG9ydC4KKwkgICFDT05GSUdfWDg2X0xPQ0FMX0FQSUMgbm90IHlldCBzdXBwb3J0ZWQuCisKKzIwMDItMDEtMTEgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIFRPRE86IHVwZGF0ZQorCisJKiBkYWUvb3BkX3Byb2MuYzoKKwkqIGRvYy9vcHJvZmlsZS5zZ21sOgorCSogcHAvb3BfdGltZS5jcHA6IGFkZCBGSVhNRXMKKyAKKzIwMDItMDEtMTEgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIG1vZHVsZS9vcHJvZmlsZS5jOiBuZXZlciByZXR1cm4gMCB1bmxlc3Mgd2UncmUKKwkgIHJlYWxseSBjbG9zaW5nIGRvd24KKyAKKzIwMDItMDEtMTEgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIFRPRE86IHVwZGF0ZQorIAorCSogZ3VpL01ha2VmaWxlLmluOgorCSogZ3VpL29wcm9mX3N0YXJ0LmNwcDogdXNlIGFic29sdXRlIHBhdGhzCisgCisyMDAyLTAxLTExICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgorCisJKiBkb2Mvb3Byb2ZpbGUuc2dtbDogYWRkIG5vdGUgYWJvdXQgLS13aXRoLWxpbnV4CisgCisyMDAyLTAxLTExICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgorCisJKiBSdWxlcy5tYWtlLmluOgorCSogZ3VpL01ha2VmaWxlLmluOgorCSogZ3VpL29wcm9mX3N0YXJ0X2NvbmZpZy5oOgorCSogZ3VpL29wcm9mX3N0YXJ0X2NvbmZpZy5jcHA6IHJlbW92ZSBrZXJuZWwgaGVhZGVycworCSAgZnJvbSB1c2VybGFuZCAhCisKKzIwMDItMDEtMTEgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIGNvbmZpZ3VyZS5pbjogcmVtb3ZlIGRlYWQgY2hlY2tzLiBjb21tZW50IG91dCBBUElDIGNoZWNrLAorCSAgaGlkZSBncmVwIG91dHB1dAorCisJKiBtb2R1bGUvTWFrZWZpbGUuaW46IGFkZCBjb21wYXQuYworCisJKiBhcGljX3VwX2NvbXBhdC5oOiBVUCAyLjIgbWlzc2luZyBkZWZpbmVzLiBOZWVkIHRvIGludmVzdGlnYXRlCisJICBmaXhtYXAgc2l0dWF0aW9uLiAKKworCSogY29tcGF0LmM6IG1vdmUgMi4yIGRjYWNoZSBjb2RlIGhlcmUKKworCSogY29tcGF0Lmg6IGRjYWNoZSBjb21wYXQgc3VwcG9ydC4gY2hlY2sgZm9yIHdoZXRoZXIgd2UKKwkgIHNob3VsZCBjaGVjayBmb3IgbXB0YWJsZS4gRG9uJ3QgZG8gZml4bWFwIGhhY2sgb24gMi4yIAorCisJKiBvcF9kY2FjaGUuaDogc2hhcmVkIGRjYWNoZSBpbmxpbmUgZnVuY3Rpb25zCisKKwkqIG9wX3N5c2NhbGxzLmM6IGNsZWFuIHVwIGRjYWNoZSBjb2RlIGZvciAyLjIvMi40IAorCisJKiBvcF94ODYuYzogdXBkYXRlIGFwaWNfbmVlZF9zZXR1cCBmb3IgMi4yIGFuZCB0aGUgcG9zc2liaWxpdHkKKwkgIG9mIG5vdCBlbmFibGluZyBBUElDIHN1cHBvcnQgb24gMi40IHRvby4gTmVlZHMgY2hlY2tpbmcgISBBbHNvCisJICBkb24ndCBkbyBtcHRhYmxlIGNoZWNrIG9uIDIuMgorCisJKiBvcHJvZmlsZS5oOiBhZGQgbWlzc2luZyBpbmNsdWRlIGd1YXJkIDspCisgCisyMDAyLTAxLTExICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgorCisJKiBtb2R1bGUvY29tcGF0Lmg6IG1pbm9yIGZpeGVzCisgCisyMDAyLTAxLTExICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgorCisJKiBtb2R1bGUvY29tcGF0Lmg6IG1hbnkgY2hhbmdlLCBjYW4gYmUgdXNlZCBkb3duIHRvIDIuMi44CisJKiBtb2R1bGUvb3Byb2ZpbGUuaDogbW92ZSAjaWZkZWYgb24ga2VybmVsIHZlcnNpb24gdG8gY29tcGF0LmgKKwkqIG1vZHVsZS9vcF91dGlsLmM6CisJKiBtb2R1bGUvb3Bfc3lzY2FsbHMuYzogbWlub3IgY2hhbmdlCisJKiBjb25maWd1cmUuaW46IGNvbW1lbnQgdW5uZWNlc3Nhcnkgc3R1Zi4KKworCSogbW9kdWxlL01ha2VmaWxlLmluOiBtaXNzaW5nIGluY2x1ZGUgcGF0aCBmb3Igb3Byb2ZpbGUucworCisyMDAyLTAxLTEwICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgorCisJKiBNYWtlZmlsZS5pbjogdXBkYXRlIGNoZWNrbGlzdCBmb3IgZGlzdAorCisJKiBtb2R1bGUvb3Byb2ZpbGUuaDogYWRkIGFwcGFyZW50bHkgbmVlZGVkIHZlcnNpb24uaAorIAorMjAwMi0wMS0xMCAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogY29uZmlndXJlLmluOiBmaXggYWNjaWRlbnRhbCB0cmFzaGluZyBvZiBCS0NGTEFHUworCisJKiBtb2R1bGUvb3BfdXRpbC5jOiBpbmNsdWRlIHJpZ2h0IGhlYWRlcgorCisJKiBtb2R1bGUvY29tcGF0Lmg6IHVzZSBjb3JyZWN0IHNtcF9jYWxsX2Z1bmN0aW9uCisgCisyMDAyLTAxLTEwICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgorCisJKiBtb2R1bGUvY29tcGF0Lmg6IG5ldyBmaWxlIGluY2x1ZGUgYmFja3dhcmQgY29tcGF0aWJpbGl0eQorCSAgc3R1ZmYKKworMjAwMi0wMS0wOSAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogZG9jL29wcm9maWxlLnNnbWw6IHVwZGF0ZSBpbmZvZHJhZ29uJ3MgZW1haWwKKwkgIGFkZHJlc3MKKyAKKwkqIGNvbmZpZ3VyZS5pbjogYnVtcCB0byAwLjAuOWN2cworCisyMDAyLTAxLTA4ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgorCisJKiBUT0RPOiB1cGRhdGUKKworCSogY29uZmlndXJlLmluOiBmaXggY2FzZSB3aGVuIFggaXNuJ3QgaW5zdGFsbGVkLiBCdW1wIHRvIDAuMC44CisgCisyMDAyLTAxLTA3ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgorCisJKiB1dGlsL01ha2VmaWxlLmluOiAiZml4IiBsYXN0IGcrKyAzLjAgcHJvYmxlbQorCSAgd2l0aCBsaWJpYmVydHkuaCBhbmQgc3RyaW5nLmggY2xhc2hpbmcgcHJvdG90eXBlcworCSAgYnkgZGlzYWJsaW5nIC1wZWRhbnRpYyBmb3IgdGhpcyBkaXJlY3RvcnkKKyAKKzIwMDItMDEtMDcgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIHBwL29wZl9jb250YWluZXIuY3BwOgorCSogcHAvb3BmX2ZpbHRlci5oOgorCSogcHAvb3Byb2ZwcC5jcHA6IAorCSogcHAvb3Byb2ZwcC5oOiAKKwkqIHBwL29wcm9mcHBfdXRpbC5jcHA6IAorCSogdXRpbC9maWxlX21hbmlwLmg6CisJKiB1dGlsL2ZpbGVfbWFuaXAuY3BwOiAKKwkqIHV0aWwvc3RyaW5nX21hbmlwLmg6IGZpeCBtb3N0IGcrKyAzLjAgcHJvYmxlbXMKKworMjAwMi0wMS0wNyAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogVE9ETzogdXBkYXRlCisgCisyMDAyLTAxLTA1ICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgorCisJKiBkb2Mvb3Byb2ZpbGUuc2dtbDogQXZvaWQgdG8gdXNlIC0tIGluc2lkZQorCSAgc2dtbCBjb21tZW50CisKKzIwMDItMDEtMDUgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIGRhZS9vcF9zdGFydDoKKwkqIGRhZS9vcF9zdG9wOiAodmVyeSkgaGFja3kgbG9vcCB0byB3YWl0IGZvcgorCWRhZW1vbiBzdGFydCBhbmQgc3RvcAorIAorMjAwMi0wMS0wNSAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogbW9kdWxlL29wcm9maWxlLmM6IHJldmVydCBteSBicm9rZW4gc3RvcCBmaXgsCisJICBhbmQgZml4IHRoZSBvbGQgKG5ldykgb25lCisgCisyMDAyLTAxLTA1ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgorCisJKiBkYWUvb3BkX2tlcm5lbC5jOgorCSogZGFlL29wZF9wcm9jLmM6CisJKiBkYWUvb3BkX3Byb2MuaDoKKwkqIGRhZS9vcGRfdXRpbC5jOgorCSogZGFlL29wcm9maWxlZC5jOiAKKwkqIGRhZS9vcHJvZmlsZWQuaDogZnVydGhlciBtaW5vciBjbGVhbnVwcworCisyMDAyLTAxLTA0ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgorCisJKiBtb2R1bGUvb3Byb2ZpbGUuYzogY2hhbmdlIGxhc3QgY2hhbmdlIHRvIGhhdmUgYW4KKwkgIGV4cGxpY2l0IGNoZWNrIGluIHRoZSBzeXNjdGwgZHVtcCwgcmF0aGVyIHRoYW4gZ2VuZXJhbGlzZWQKKwkgIGNvZGUuCisKKzIwMDItMDEtMDQgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+CisKKwkqIG1vZHVsZS9vcHJvZmlsZS5jOiBkbyBub3QgcmUtZW5hYmxlIGNvdW50ZXIgZHVyaW5nCisJICBzaHV0ZG93bgorCisJKiBkYWUvTWFrZWZpbGUuaW46IGZpeCBvcGRfa2VybmVsLmMgZGVwZW5kYW5jeQorCisyMDAyLTAxLTA0ICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgorCisJKiBkYWUvTWFrZWZpbGUuaW46CisJKiBkYWUvb3BkX3Byb2MuYzoKKwkqIGRhZS9vcGRfa2VybmVsLmM6IG1vdmUga2VybmVsL21vZHVsZSBzdHVmZiBpbnRvCisJICBuZXcgZmlsZS4gU29tZSBtaW5vciBjaGFuZ2VzLgorIAorMjAwMi0wMS0wNCAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogZGFlL29wcm9maWxlZC5jOiByZW1vdmUgZXh0cmEgZHVtcAorIAorMjAwMi0wMS0wNCAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogZGFlL29wZF9wcm9jLmM6IG1pbm9yIGNyYXAKKyAKKzIwMDItMDEtMDQgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIFRPRE86IHVwZGF0ZQorCisJKiBkYWUvb3Byb2ZpbGVkLmM6CisJKiBkYWUvb3Byb2ZpbGVkLmg6CisJKiBkYWUvb3BkX3Byb2MuYzogcHJpbnQgc3RhdHMgb24gc2h1dGRvd24gdG9vCisKKwkqIG1vZHVsZS9vcHJvZmlsZS5jOiBhZGRpdGlvbmFsIGNoZWNrIGFnYWluc3QgZGFlbW9uIGhhbmdpbmcgb24gc2h1dGRvd24gOigKKyAKKzIwMDItMDEtMDQgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIGRhZS9vcF9zdG9wOgorCSogZGFlL29wcm9maWxlZC5jOgorCSogZG9jL29wcm9maWxlLnNnbWw6CisJKiBtb2R1bGUvb3Byb2ZpbGUuaDoKKwkqIG1vZHVsZS9vcHJvZmlsZS5jOiBpbXBsZW1lbnQgbmV3IGNsZWFuIHNodXRkb3duIHZpYQorCSAgc3lzY3RsIGR1bXBfc3RvcAorCisyMDAyLTAxLTA0ICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgorCisJKiBtb2R1bGUvb3Byb2ZpbGUuYzogYWRkIGEgd2FybmluZyB3aGVuIG5vdGUgYnVmZiBvdmVyZmxvdy4KKworMjAwMi0wMS0wNCAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogbW9kdWxlL29wcm9maWxlLmM6IHBpbiBub3RlIGF0IHRoZSBlbmQgb24gb3ZlcmZsb3cKKyAKKzIwMDItMDEtMDMgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+CisKKwkqIGRhZS9vcGRfcHJvYy5jOiBBcG9sb2dpZXM6IHN0dXBpZCBidWcuIE5ldmVyIGZvcmdldAorCSAgdGhhbiBMUlUgbGlzdCBvZiBzYW1wbGVzIGZpbGVzIG11c3Qgbm90IGNvbnRhaW4gYWxyZWFkeQorICAJICB1bm1hcGVkIGZpbGVzCisKKwkqIG1vZHVsZS9vcHJvZmlsZS5jOiBhbm90aGVyIHNpbGx5IGJ1ZywgZGV0ZWN0ZWQgY3B1IHdhcworCSAgb3ZlcndyaXR0ZW4uLi4KKworMjAwMi0wMS0wMyAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogZG9jL29wcm9maWxlLnNnbWw6IHNvbWUgZml4ZXMsIGNvbW1lbnRzCisKKzIwMDItMDEtMDMgIFBoaWxpcHBlIEVsaWUgIDxwaF9lQGNsdWItaW50ZXJuZXQuZnI+CisKKwkqIGRvYy9vcHJvZmlsZS5zZ21sOiBpbXByb3ZlIGRvY3VtZW50YXRpb24sIGNvcnJlY3RlZAorCSAgYnkgSm9obiBMZXZvbgorCisyMDAyLTAxLTAzICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgorCisJKiBndWkvb3Byb2Zfc3RhcnQuaDoKKwkqIGd1aS9vcHJvZl9zdGFydC5jcHA6CisJKiBndWkvdWkvb3Byb2Zfc3RhcnQuYmFzZS51aTogcmVtb3ZlIHRoZSBjb25maWcgYnV0dG9ucworCSAgYW5kIHNhdmUgb24gYSBoaWRlIGZyb20gdGhlIFdNCisgCisyMDAyLTAxLTAzICBKb2huIExldm9uICA8bW96QGNvbXBzb2MubWFuLmFjLnVrPgorCisJKiBtb2R1bGUvb3Byb2ZpbGUuYzogbWFrZSBzdXJlIG5vdGVfcG9zIG5ldmVyIGdvZXMKKwkgIHBhc3QgdGhlIGJ1ZmZlciA6UAorIAorMjAwMi0wMS0wMyAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogZGFlL29wZF91dGlsLmM6IGFsbG93IEVBR0FJTnMgdGhyb3VnaCBhcyB3ZWxsCisgCisyMDAyLTAxLTAyICBQaGlsaXBwZSBFbGllICA8cGhfZUBjbHViLWludGVybmV0LmZyPgorCisJKiBwcC9vcGZfY29udGFpbmVyLmNwcDoKKwkqIHBwL29wZl9maWx0ZXIuY3BwOiBtaW5vciBjaGFuZ2UKKworMjAwMi0wMS0wMiAgSm9obiBMZXZvbiAgPG1vekBjb21wc29jLm1hbi5hYy51az4KKworCSogZG9jL29wcm9maWxlLnNnbWw6IHZhcmlvdXMgZG9jcyBpbXByb3ZlbWVudHMKKyAKKzIwMDItMDEtMDIgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIGRhZS9vcHJvZmlsZWQuYzogYmV0dGVyIGVuYWJsZSB0aGUgYWN0dWFsCisJICBwcm9maWxpbmcgYWdhaW4gOlAKKyAKKzIwMDItMDEtMDIgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIGNvbmZpZy5oLmluOiByZW1vdmUgdGhpcyBhZ2FpbiBmcm9tIENWUy4KKyAKKzIwMDItMDEtMDIgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIGRhZS9vcF9zdG9wOiBzZW5kIFNJR1VTUjEgdG8gc3RvcCBwcm9maWxlcgorIAorCSogZGFlL29wZF9wcm9jLmM6IHJlZm9ybWF0IGEgbGl0dGxlCisgCisJKiBkYWUvb3BkX3V0aWwuaDoKKwkqIGRhZS9vcGRfdXRpbC5jOiBjaGFuZ2Ugb3BkX3JlYWRfZGV2aWNlIHNlbWFudGljcworIAorCSogZGFlL29wcm9maWxlZC5jOiBjbGVhbiBzaHV0ZG93biBmcm9tIFNJR1VTUjEKKyAKKwkqIG1vZHVsZS9vcHJvZmlsZS5jOiBoYW5kbGUgbm9uLWJsb2NraW5nIHJlYWRzCisgCisJKiBwcC9vcGZfZmlsdGVyLmg6CisJKiBwcC9vcGZfZmlsdGVyLmNwcDogc2xpZ2h0IGNsZWFudXBzCisgCisJKiBUT0RPOiB1cGRhdGUKKyAKKzIwMDItMDEtMDEgIEpvaG4gTGV2b24gIDxtb3pAY29tcHNvYy5tYW4uYWMudWs+CisKKwkqIG9wcm9maWxlLnNnbWw6IGNsYXJpZnkgdGhhdCAtZyBpcyBub3QgbmVjZXNzYXJ5IGZvcgorCSAgYmFzaWMgcHJvZmlsaW5nIChyZXBvcnRlZCBieSBKZWZmIEVwbGVyIDxqZXBsZXJAaW5ldG5lYnIuY29tPikKKworU2VlIENoYW5nZUxvZy0yMDAxIGZvciBlYXJsaWVyIGNoYW5nZWxvZ3MuCmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9DaGFuZ2VMb2ctMjAwMyBiL29wcm9maWxlLTAuOS43L0NoYW5nZUxvZy0yMDAzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzNTZhYmUKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9DaGFuZ2VMb2ctMjAwMwpAQCAtMCwwICsxLDYyNTEgQEAKKzIwMDMtMTItMjkgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGNvbmZpZ3VyZS5pbjogbXlfb3BfcHJlZml4IGlzIG5vdCBuZWNlc3NhcmlseSBzdWZmaXhlZCBieSBhICcvJworCisyMDAzLTEyLTI5ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGNvbmZpZ3VyZS5pbjoKKwkqIGRvYy8qLjEuaW46IGFkZCBIVE1MIGRvY3MgdG8gU0VFIEFMU08KKworMjAwMy0xMi0yOSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBkb2Mvb3Bjb250cm9sLjEuaW46CisJKiBkb2Mvb3Byb2ZpbGUueG1sOiBtaW5vciBsYW5ndWFnZSBjbGVhbnVwcworCisJKiB1dGlscy9vcGNvbnRyb2w6IG9ubHkgYWxsb3cgLS12ZXJib3NlIHdoZW4gaXQgbWFrZXMgc2Vuc2UKKworMjAwMy0xMi0yOCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogbGlidXRpbCsrL3Rlc3RzL2ZpbGVfbWFuaXBfdGVzdHMuY3BwOiBlbnN1cmUgZmlsZW5hbWUgcGFzc2VkIHRvCisJICBvcF9yZWFscGF0aCgpIGV4aXN0cworCisyMDAzLTEyLTI4ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGRvYy9pbnRlcm5hbHMueG1sOgorCSogbGlidXRpbCsrL2ZpbGVfbWFuaXAuaDogZml4IHR5cG9zCisKKzIwMDMtMTItMTYgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIHV0aWxzL29wY29udHJvbDogZXJyb3IgbWVzc2FnZSByZXdvcmRpbmcKKworMjAwMy0xMi0xNiAgQ2FybG8gV29vZCAgPGNhcmxvQGFsaW5vZS5jb20+CisKKwkqIGxpYnJlZ2V4L3Rlc3RzL01ha2VmaWxlLmFtOiBhdm9pZCB0byBpbnN0YWxsIG1hbmdsZWQtbmFtZSB0ZXN0IGZpbGUKKworMjAwMy0xMS0yMCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBsaWJyZWdleC9vcF9yZWdleC5jcHA6IG1vdmUgZ2xvYmFsIGN0b3Igb3V0IG9mIG5hbWVzcGFjZQorCWFub24gKGJ1ZyAjODQ1NjE2KQorCisyMDAzLTExLTE5ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBsaWJwcC9hcnJhbmdlX3Byb2ZpbGVzLmNwcDogbWVyZ2UgYWxsIHVuaXQgbWFzayBiZWZvcmUgZ2VuZXJhdGluZworCSAgZXZlbnQgZGVzY3JpcHRpb24gc3RyaW5nCisKKzIwMDMtMTEtMTcgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGxpYnBwL2FycmFuZ2VfcHJvZmlsZXMuY3BwOiBwdXQgdW5pdG1hc2sgaW4gdGhlIHNhbWUgYXhpcyBhcworCSAgZXZlbnQ6Y291bnQsIG1lYW5pbmcgdGhhbiB1bml0bWFzayBpcyBub3cgYSBwYXJ0IG9mIHRoZSBldmVudAorCSAgc3BlY2lmaWNhdGlvbi4KKworMjAwMy0xMi0xOSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogZGFlbW9uL29wZF9zZmlsZS5jOiB3ZSByZXZlcnNlZCB0by9mcm9tIHBjIGluIGNhbGwgZ3JhcGggc2FtcGxlCisKKzIwMDMtMTEtMjMgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGxpYnBwL3Byb2ZpbGUuaDoKKwkqIHBwL29wZ3Byb2YuY3BwOiBvb3BzIGEgc2ltcGxpZnkgYSBiaXQgdG9vIGNnIGhhbmRsaW5nIGluIG15IGxhc3QKKwkgIHBhdGNoLCBpdCB3YXMgc2VnZmF1bHRpbmcgZWFjaCB0aW1lIG5vIGNnIGZpbGUgd2FzIGZvdW5kLi4uCisKKzIwMDMtMTEtMTUgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIHBwL29wZ3Byb2YuY3BwOiBzaW1wbGlmeSBhIGJpdCBjZyBoYW5kbGluZywgd2UgZG9uJ3QgbmVlZCB0byBrbm93CisJICBpZiB3ZSByZXRyaWV2ZWQgc29tZSBjZyBmaWxlcyBzaW5jZSB0aGUgcHJvZmlsZV90IHdpbGwgYmUgZW1wdHkKKwkgIGluIHRoaXMgY2FzZQorCisyMDAzLTExLTE1ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBsaWJwcC9wcm9maWxlLmg6IGl0ZXJhdG9yOjp2bWEoKSBtdXN0IHJldHVybiB0aGUgZnVsbCBrZXkgbm90IG9ubHkKKwkgIGFuIHVuc2lnbmVkIGludC4KKwkqIHBwL29wZ3Byb2YuY3BwOiBpbXBsZW1lbnQgbWVyZ2luZyBvZiBjZyBmaWxlcy4KKworMjAwMy0xMS0xNSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogbGlicHAvcHJvZmlsZV9zcGVjLmNwcDoKKwkqIGxpYnBwL3Byb2ZpbGVfc3BlYy5oOgorCSogcHAvb3Bhbm5vdGF0ZV9vcHRpb25zLmNwcDoKKwkqIHBwL29wZ3Byb2Zfb3B0aW9ucy5jcHA6CisJKiBwcC9vcHJlcG9ydF9vcHRpb25zLmNwcDogZmlsdGVyIGNhbGwgZ3JhcGggc2FtcGxlcyBmaWxlcworCisyMDAzLTExLTE0ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBkYWVtb24vb3BkX21hbmdsaW5nLmM6IG9vcHMsIGl0J3MgYmV0dGVyIHRvIHJlYWxseSBvcGVuIHRoZSBjZyBmaWxlCisKKwkqIGRhZW1vbi9vcGRfc2ZpbGUuYzoKKwkqIGRhZW1vbi9vcGRfc3RhdHMuYzoKKwkqIGRhZW1vbi9vcGRfc3RhdHMuaDoKKwkqIGRhZW1vbi9saWJsZWdhY3kvb3BkXzI0X3N0YXRzLmM6CisJKiBkYWVtb24vbGlibGVnYWN5L29wZF8yNF9zdGF0cy5oOgorCSogZGFlbW9uL2xpYmxlZ2FjeS9vcGRfcHJvYy5jOiBsb2cgc2FtcGxlIGxvc3QgZHVlIHRvIHNhbXBsZSBmaWxlIG9wZW4KKwkgIGZhaWx1cmUKKworMjAwMy0xMS0xNSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogZGFlbW9uL2xpYmxlZ2FjeS9vcGRfcGFyc2VfcHJvYy5jOiBhbHdheXMgcHJvdmlkZSBhbiBpbWFnZSBuYW1lCisJICBmb3IgcGFyc2VkIHByb2Nlc3MgaW4gL3Byb2MKKworMjAwMy0xMS0xNSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogZG9jL29wcm9maWxlLnhtbDoKKwkqIGxpYm9wL29wX2NwdV90eXBlLmM6IHMvaGFtbWVyL0FNRDY0IHByb2Nlc3NvcnMvIGZvciB1c2VyIHZpc2libGUKKwkgIG5hbWUuCisKKzIwMDMtMTEtMTMgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogbGlidXRpbC9vcF9maWxlLmg6CisJKiBsaWJ1dGlsL29wX2ZpbGUuYzogcmVtb3ZlIG9wX2NfZGlybmFtZSgpLAorCW9wX3JlbGF0aXZlX3RvX2Fic29sdXRlX3BhdGgoKSwgb3BfaXNfZGlyZWN0b3J5KCksCisJb3BfZm9sbG93X2xpbmsoKSwgaW4gZmF2b3VyIG9mIHVzaW5nIHJlYWxwYXRoKDMpCisKKwkqIGxpYnV0aWwvdGVzdHMvZmlsZV90ZXN0cy5jOiBmaXhlcyBmb3IgYWJvdmUgY2hhbmdlcworCisJKiBsaWJ1dGlsKysvZmlsZV9tYW5pcC5oOgorCSogbGlidXRpbCsrL2ZpbGVfbWFuaXAuY3BwOiBjaGFuZ2VzIGZyb20gYWJvdmUuIEFkZAorCW9wX3JlYWxwYXRoKCkuCisKKwkqIGxpYnV0aWwrKy90ZXN0cy9maWxlX21hbmlwX3Rlc3RzLmNwcDogY2hhbmdlcyBmcm9tIAorCWFib3ZlLgorCisJKiBkYWVtb24vb3Byb2ZpbGVkLmM6CisJKiBkYWVtb24vbGlibGVnYWN5L29wZF9wYXJzZV9wcm9jLmM6CisJKiBndWkvb3Byb2Zfc3RhcnRfdXRpbC5jcHA6CisJKiBsaWJwcC9sb2NhdGVfaW1hZ2VzLmNwcDoKKwkqIGxpYnBwL3Byb2ZpbGVfc3BlYy5jcHA6CisJKiBwcC9vcGFubm90YXRlLmNwcDogY2hhbmdlcyBmcm9tIGFib3ZlCisKKzIwMDMtMTEtMTIgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogY29uZmlndXJlLmluOiBidW1wIHRvIDAuOGN2cworCisyMDAzLTExLTExICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGNvbmZpZ3VyZS5pbjogYnVtcCB0byAwLjcuMQorCisyMDAzLTExLTExICBKb3NlcGggVmFuQW5kZWwgIDx1bmtub3duQHVua25vd24ub3JnPgorCisJKiBkYWVtb24vbGlibGVnYWN5L2luaXQuYzogZml4ICM4NDAwNDYgKHNlZ2ZhdWx0IHdoZW4gc3RhcnRpbmcgcHJvZmlsZXIKKwkgd2l0aCAtLW5vLXZtbGludXggc2V0dXApLCB0aGlzIGJ1ZyB3YXMgcHJlc2VudCBpbiAwLjcuMC4KKworMjAwMy0xMS0xMSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogbGlicHAvcHJvZmlsZV9zcGVjLmNwcDogbW9yZSBwcmVjaXNlIGVycm9yIG1lc3NhZ2UKKwkqIGxpYnV0aWwrKy90ZXN0cy9maWxlX21hbmlwX3Rlc3RzLmNwcDogY29ybmVyIGNhc2UgdGVzdCBhZGRlZAorCSAgZm9yIGRpcm5hbWUKKworMjAwMy0xMS0xMSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogbGlicHAvYXJyYW5nZV9wcm9maWxlcy5jcHA6IHJlcG9ydF9lcnJvcigpIHNob3dzIG9ubHkgZGlzdGluY3QKKwkgIGNvbmZsaWN0aW5nIG5hbWUuCisKKzIwMDMtMTEtMTAgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGRvYy9vcGNvbnRyb2wuMS5pbjogcmV2ZXJzZSBrZXJuZWw6dXNlciBpbiBldmVudCBzZXR0aW5nIGRlc2NyaXB0aW9uLgorCSAgRml4ICM4Mzg5NjgKKworMjAwMy0xMS0wOSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogZGFlbW9uL2luaXQuYzoKKwkqIGRhZW1vbi9saWJsZWdhY3kvaW5pdC5jOiBtb3ZlIG9wZF9yZWFkX2ZzX2ludCAuLi4KKwkqIGRhZW1vbi9vcHJvZmlsZWQuaDoKKwkqIGRhZW1vbi9vcHJvZmlsZWQuYzogaGVyZQorCSogZGFlbW9uL2xpYmxlZ2FjeS9vcGRfMjRfc3RhdHMuYzogZHVtcCBrZXJuZWwgbm90ZSBidWZmZXIgb3ZlcmZsb3cgYW5kCisJICBidWZmZXIgb3ZlcmxvdworCisyMDAzLTExLTA5ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiB1dGlscy9vcF9oZWxwLmM6IGRvIG5vdCB1c2UgT1BfTUFYX0NPVU5URVJTIGJ1dCBnZXQgY291bnRlciBudW1iZXIKKwkgIGF0IHJ1bnRpbWUKKworMjAwMy0xMS0wOSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogbGlidXRpbCsrL3Rlc3RzL3N0cmluZ19tYW5pcF90ZXN0cy5jcHA6IHJ0cmltL2x0cmltL3RyaW0gdGVzdHMKKworMjAwMy0xMS0wOCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogbGlib3AvdGVzdHMvTWFrZWZpbGUuYW06CisJKiBsaWJvcC90ZXN0cy9tYW5nbGVfdGVzdHMuYzogbmV3IHRlc3RzOiBzYW1wbGUgZmlsZW5hbWUgbWFuZ2xpbmcKKworMjAwMy0xMS0wOCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogbW9kdWxlL3g4Ni9vcF9zeXNjYWxscy5jOiBmaXggYnVpbGQgd2l0aCAyLjIga2VybmVsCisKKzIwMDMtMTEtMDYgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIE1ha2VmaWxlLmFtOiB1c2UgLlBIT05ZIGZvciBtb2R1bGUgZ29hbCB0byBub3Qgc3RhdGlzZnkgdGhpcyBnb2FsCisJICB3aXRoIHRoZSBzdWJkaXIgbmFtZWQgbW9kdWxlCisJKiBtNC9maW5ka2VybmVsLm00OiBtaW5vciBmaXguCisKKzIwMDMtMTEtMDYgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogTWFrZWZpbGUuYW06IG1pbm9yIGNsZWFudXAKKworMjAwMy0xMS0wNiAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBndWkvTWFrZWZpbGUuYW06IHJlbW92ZSB1bnVzZWQgLURLVkVSU0lPTgorCisyMDAzLTExLTA2ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGNvbmZpZ3VyZS5pbjogYWRkIC0tZGlzYWJsZS13ZXJyb3IgYW5kIC0tZGlzYWJsZS1vcHRpbWl6YXRpb24KKworCSogZG9jL29wcm9maWxlLnhtbDogZG9jdW1lbnQgYWJvdmUuIFJlbW92ZSBkb2NzIGZvcgorCSogLS1lbmFibGUtZ2NvdiAob25seSB1c2VmdWwgdG8gZGV2ZWxvcGVycykKKworMjAwMy0xMS0wNiAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogZGFlbW9uL29wZF9rZXJuZWwuYzoKKwkqIGRhZW1vbi9saWJsZWdhY3kvb3BkX2tlcm5lbC5jOiBiZSBsZXNzIHBhcmFub2lkIGFib3V0IGtlcm5lbCByYW5nZSwKKwkgIHRoaXMgaXMgc2xpZ2h0bHkgZGlmZmVyZW50IHRoYW4gdGhlIHBhdGNoIFRob21hcyBTcGF0emllciB0ZXN0ZWQgYnV0CisJICBpdCBjYW4ndCBodXJ0IChmYW1vdXMgbGFzdCB3b3JkcyAuLi4pLiBUaGlzIGZpeGVzIHMzOTB4IHdoZXJlIGtlcm5lbAorCSAgc3RhcnQgY2FuIGJlIHplcm8gYW5kIHdhcyByZWplY3RlZC4KKworMjAwMy0xMS0wNiAgVGhvbWFzIFNwYXR6aWVyICA8dHNwYXRAZGUuaWJtLmNvbT4KKworCSogZGFlbW9uL29wZF9jb29raWUuYzogY2hhbmdlZCBhbiAjaWYgZGVmaW5lZCBmb3Igc2VsZWN0aW5nIHJpZ2h0CisJICBzeXN0ZW0gY2FsbCBmb3IgSUJNIHMzOTAgb3IgczM5MHgsIHJlc3BlY3RpdmVseQorCSAgCisyMDAzLTExLTA0ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBsaWJ1dGlsKysvcGF0aF9maWx0ZXIuY3BwOiByZW1vdmUgMiBpZGVudGljYWwgRklYTUUKKwkqIGxpYnV0aWwrKy90ZXN0cy9maWxlX21hbmlwX3Rlc3RzLmNwcDoKKwkqIGxpYnV0aWwrKy90ZXN0cy9wYXRoX2ZpbHRlcl90ZXN0cy5jcHA6IHJlZmxlY3QgdGhlIGJlaGF2aW9yIGJ5CisJICBuZXcgdGVzdHMKKworMjAwMy0xMS0wNCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogbGliZGIvZGJfbWFuYWdlLmM6CisJKiBsaWJvcC9vcF9ldmVudHMuaDogLXBlZGFudGljIGZpeAorCisyMDAzLTExLTA0ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBkYWVtb24vb3BkX3NmaWxlLmM6CisJKiBkYWVtb24vbGlibGVnYWN5L29wZF9rZXJuZWwuYzoKKwkqIGxpYnV0aWwvb3BfY3B1ZnJlcS5jOgorCSogbGlidXRpbC9vcF9maWxlLmM6IGEgZmV3IHMvZ290by9icmVhay8KKwkqIGxpYnBwL2Zvcm1hdF9vdXRwdXQuY3BwOiBwYWRkaW5nIG5ldmVyIHVzZWQgYWZ0ZXIgaW5pdGlhbGl6YXRpb24KKworMjAwMy0xMS0wNCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogbGlidXRpbCsrL2NvbW1hX2xpc3QuaDogZG9uJ3QgYWNjZXB0IGN1bXVsYXRpdmUgYmVoYXZpb3IKKwkqIGxpYnV0aWwrKy9zdHJpbmdfbWFuaXAuY3BwOiBzZXBhcmF0ZV90b2tlbigpIHJldHVybiBieSB2YWx1ZQorCSogZ3VpL29wcm9mX3N0YXJ0LmNwcDoKKwkqIGxpYm9wdCsrL3BvcHRfb3B0aW9ucy5jcHA6CisJKiBsaWJwcC9wYXJzZV9maWxlbmFtZS5jcHA6CisJKiBsaWJwcC9wcm9maWxlX3NwZWMuY3BwOgorCSogbGlidXRpbCsrL2NvbW1hX2xpc3QuaDoKKwkqIGxpYnV0aWwrKy9zdHJpbmdfZmlsdGVyLmNwcDoKKwkqIGxpYnV0aWwrKy9zdHJpbmdfbWFuaXAuY3BwOgorCSogbGlidXRpbCsrL3N0cmluZ19tYW5pcC5oOgorCSogbGlidXRpbCsrL3Rlc3RzL2NvbW1hX2xpc3RfdGVzdHMuY3BwOgorCSogbGlidXRpbCsrL3Rlc3RzL3N0cmluZ19tYW5pcF90ZXN0cy5jcHA6IHVwZGF0ZSBhY2NvcmRpbmcKKwkqIGxpYnBwL3Byb2ZpbGVfc3BlYy5jcHA6IHJlbW92ZSBhbGwgdHJhY2Ugb2YgZGVmdW5jdCBvcF9hbGlhcworCisyMDAzLTExLTA0ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBkYWVtb24vbGlibGVnYWN5L29wZF9pbWFnZS5jOgorCSogZGFlbW9uL2xpYmxlZ2FjeS9vcGRfaW1hZ2UuaDoKKwkqIGRhZW1vbi9saWJsZWdhY3kvb3BkX21hcHBpbmcuYzoKKwkqIGRhZW1vbi9saWJsZWdhY3kvb3BkX21hcHBpbmcuaDoKKwkqIGRhZW1vbi9saWJsZWdhY3kvb3BkX3Byb2MuYzoKKwkqIGd1aS9vcHJvZl9zdGFydC5jcHA6CisJKiBndWkvb3Byb2Zfc3RhcnQuaDoKKwkqIGd1aS9vcHJvZl9zdGFydF9jb25maWcuY3BwOgorCSogZ3VpL29wcm9mX3N0YXJ0X3V0aWwuY3BwOgorCSogbGlib3Avb3BfY29uZmlnXzI0Lmg6CisJKiBsaWJwcC9mb3JtYXRfb3V0cHV0LmNwcDoKKwkqIGxpYnBwL29wX2hlYWRlci5jcHA6CisJKiBsaWJwcC9wcm9maWxlLmg6CisJKiBsaWJwcC9wcm9maWxlX2NvbnRhaW5lci5jcHA6CisJKiBsaWJwcC9wcm9maWxlX3NwZWMuY3BwOgorCSogbGlicHAvcHJvZmlsZV9zcGVjLmg6CisJKiBsaWJwcC9zeW1ib2wuaDoKKwkqIGxpYnBwL3N5bWJvbF9zb3J0LmNwcDoKKwkqIGxpYnV0aWwrKy9zdHJlYW1fdXRpbC5jcHA6CisJKiBsaWJ1dGlsKysvc3RyZWFtX3V0aWwuaDoKKwkqIGxpYnV0aWwrKy91dGlsaXR5Lmg6CisJKiBwcC9jb21tb25fb3B0aW9uLmNwcDoKKwkqIHBwL2NvbW1vbl9vcHRpb24uaDoKKwkqIHBwL29wYW5ub3RhdGVfb3B0aW9ucy5oOgorCSogcHAvb3BncHJvZi5jcHA6CisJKiBwcC9vcGdwcm9mX29wdGlvbnMuY3BwOgorCSogcHAvb3BncHJvZl9vcHRpb25zLmg6CisJKiBwcC9vcHJlcG9ydF9vcHRpb25zLmNwcDoKKwkqIHBwL29wcmVwb3J0X29wdGlvbnMuaDoKKwkqIHBwL3BvcHVsYXRlLmNwcDogcmVtb3ZlIHNvbWUgLmggZGVwZW5kZW5jaWVzCisKKzIwMDMtMTEtMDMgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGxpYnV0aWwrKy90ZXN0cy9NYWtlZmlsZS5hbToKKwkqIGxpYnV0aWwrKy90ZXN0cy91dGlsaXR5X3Rlc3RzLmNwcDogbmV3IHRlc3QgZmlsZXMgY29udmVyaW5nIG1vc3Qgb2YKKwkgIHV0aWxpdHkuaCBhbmQgb3BfZXhjZXB0aW9uLmgKKworMjAwMy0xMS0wMiAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogbGlicHAvcGFyc2VfZmlsZW5hbWUuY3BwOiBhdm9pZCByZXBldGl0aXZlIHZlY3Rvcjo6ZXJhc2Uodi5iZWdpbigpKQorCSogbGlicmVnZXgvc3RsLnBhdC5pbjoKKwkqIGxpYnJlZ2V4L3Rlc3RzL21hbmdsZWQtbmFtZS5pbjogYWRkIChpfG8pc3RyZWFtIG9wZXJhdG9yKD4+fDw8KQorCisyMDAzLTExLTAyICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBkYWVtb24vbGlibGVnYWN5L29wZF9pbWFnZS5oOgorCSogZGFlbW9uL2xpYmxlZ2FjeS9vcGRfaW1hZ2UuYzoKKwkqIGRhZW1vbi9saWJsZWdhY3kvb3BkX3Byb2MuYzoKKwkqIGRhZW1vbi9saWJsZWdhY3kvb3BkX3NhbXBsZV9maWxlcy5jOiBzcGFyc2Ugc2FtcGxlIGZpbGUgYXJyYXkKKwkgIGFsbG9jYXRlZCBieSBsaW5lLgorCisyMDAzLTExLTAyICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBsaWJ1dGlsKysvZ2xvYl9maWx0ZXIuaDoKKwkqIGxpYnV0aWwrKy9wYXRoX2ZpbHRlci5oOgorCSogbGlidXRpbCsrL3N0cmluZ19maWx0ZXIuaDogY29tbWVudCBmaXggdG8gbWF0Y2ggaW1wbGVtZW50YXRpb24KKwkqIGxpYnV0aWwrKy90ZXN0cy9wYXRoX2ZpbHRlcl90ZXN0cy5jcHA6IG5ldyBmaWxlIHRlc3QKKwkqIGxpYnV0aWwrKy90ZXN0cy9NYWtlZmlsZS5hbTogdXBhdGUgYnVpbGQKKwkqIGxpYnV0aWwrKy90ZXN0cy9zdHJpbmdfZmlsdGVyX3Rlc3RzLmNwcDogdGVzdCB3aGl0ZSBzcGFjZSBhdCBzdGFydAorCSAgb2YgcGF0dGVybgorCisyMDAzLTExLTAyICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBsaWJ1dGlsKysvc3RyaW5nX21hbmlwLmNwcDogZm9ybWF0X2RvdWJsZSBjYW4gb25seSBmb3JtYXQgcGVyY2VudAorCSogbGlidXRpbCsrL3N0cmluZ19tYW5pcC5oOgorCSogbGlicHAvZm9ybWF0X291dHB1dC5jcHA6CisJKiBsaWJ1dGlsKysvdGVzdHMvc3RyaW5nX21hbmlwX3Rlc3RzLmNwcDoKKwkqIHBwL29wYW5ub3RhdGUuY3BwOgorCSogcHAvb3ByZXBvcnQuY3BwOiBzL2Zvcm1hdF9kb3VibGUvZm9ybWF0X3BlcmNlbnQvCisKKzIwMDMtMTEtMDIgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGxpYnV0aWwrKy9nbG9iX2ZpbHRlci5oOgorCSogbGlidXRpbCsrL3N0cmluZ19maWx0ZXIuaDoKKwkqIGxpYnV0aWwrKy90ZXN0cy9zdHJpbmdfZmlsdGVyX3Rlc3RzLmNwcDogbWlub3IgdGlkeQorCisJKiBsaWJ1dGlsKysvdGVzdHMvZ2xvYl9maWx0ZXJfdGVzdHMuY3BwOiBuZXcgZmlsZQorCSogbGlidXRpbCsrL3Rlc3RzL01ha2VmaWxlLmFtOiB1cGRhdGUgYnVpbGQKKworMjAwMy0xMS0wMSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogbGlicHAvYXJyYW5nZV9wcm9maWxlcy5jcHA6IHR5cG8KKwkqIGxpYnV0aWwrKy9nZW5lcmljX3NwZWMuY3BwOiByZW1vdmVkIGZpbGUKKwkqIGxpYnV0aWwrKy9NYWtlZmlsZS5hbTogdXBkYXRlIGFjY29yZGluZworCSogbGlidXRpbCsrL2dlbmVyaWNfc3BlYy5oOiBlbnN1cmUgZ2VuZXJpY19zcGVjPHN0cmluZz4gd2lsbCBub3QgbGluaworCSogbGlidXRpbCsrL3BhdGhfZmlsdGVyLmNwcDogbWlub3IgdGlkeQorCisyMDAzLTExLTAxICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBsaWJ1dGlsKysvdGVzdHMvc3RyaW5nX21hbmlwX3Rlc3RzLmNwcDogZWhhbmNlIG91dHB1dCBvbiBmYWlsdXJlCisJKiBtb2R1bGUvb3Byb2ZpbGUuaDoKKwkqIG1vZHVsZS9vcHJvZmlsZS5jOiB0d28gbmV3IHJlYWQtb25seSBzeXNjdGw6IG5yX2J1ZmZlcl9vdmVyZmxvdyBhbmQKKwkgIG5yX25vdGVfYnVmZmVyX292ZXJmbG93CisKKzIwMDMtMTEtMDEgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGxpYnV0aWwrKy90ZXN0cy9NYWtlZmlsZS5hbToKKwkqIGxpYnV0aWwrKy90ZXN0cy9maWxlX21hbmlwX3Rlc3RzLmNwcDogZG9uJ3QgdXNlIGdldGN3ZCBub3IgX19GSUxFX18KKwkgIGJ1dCAke3RvcGRpcn0gYW5kIGhhcmQgY29kZWQgZmlsZW5hbWUKKworMjAwMy0xMS0wMSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBkYWVtb24vbGlibGVnYWN5L29wZF9wYXJzZV9wcm9jLmM6IHVzZSBvcF9mb2xsb3dfbGluaworCisJKiBsaWJ1dGlsL29wX2ZpbGUuYzoKKwkqIGxpYnV0aWwvb3BfZmlsZS5oOiBtYWtlIG9wX2dldF9saW5rKCkgc3RhdGljLCByZW5hbWUKKwlvcF9iYXNlbmFtZSB0byBvcF9jX2Jhc2VuYW1lCisKKwkqIGxpYnV0aWwrKy9maWxlX21hbmlwLmNwcDoKKwkqIGxpYnV0aWwrKy9maWxlX21hbmlwLmg6IHJlbmFtZSB0byBvcF9iYXNlbmFtZSgpL29wX2Rpcm5hbWUoKS4KKwlVc2Ugb3BfZm9sbG93X2xpbmsoKSBmb3IgZm9sbG93X2xpbmsoKS4KKworCSogbGlidXRpbCsrL3Rlc3RzL2ZpbGVfbWFuaXBfdGVzdHMuY3BwOgorCSogZ3VpL29wcm9mX3N0YXJ0X3V0aWwuY3BwOgorCSogbGlicHAvbG9jYXRlX2ltYWdlcy5jcHA6CisJKiBsaWJwcC9uYW1lX3N0b3JhZ2UuY3BwOgorCSogbGlidXRpbCsrL3BhdGhfZmlsdGVyLmNwcDoKKwkqIHBwL29wYW5ub3RhdGUuY3BwOgorCSogcHAvb3ByZXBvcnQuY3BwOiBmaXh1cCBmcm9tIGFib3ZlIGNoYW5nZXMKKworMjAwMy0xMS0wMSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogbGlidXRpbCsrL29wX2JmZC5oOiBoYXNfZGVidWdfaW5mbygpIG5ldyBtZW1iZXIKKwkqIHBwL3BvcHVsYXRlLmg6CisJKiBwcC9wb3B1bGF0ZS5jcHA6IAorCSogcHAvb3Bhbm5vdGF0ZS5jcHA6IHVzZSBpdCB0byBlcnJvciBvdXQgd2hlbiAtLWFzc2VtYmx5IGlzIG5vdAorCSAgcmVxdWVzdGVkIGFuZCBubyBkZWJ1ZyBpbmZvcm1hdGlvbiBleGlzdHMKKworMjAwMy0xMC0zMSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogcHAvY29tbW9uX29wdGlvbi5jcHA6IGRvbid0IGV4aXQoKSBpZiBtZXJnZV9ieS5saWIgaXMgc2V0IHRocm91Z2gKKwkgICFhbGxvd19saWIKKworMjAwMy0xMC0zMSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogcHAvb3ByZXBvcnRfb3B0aW9ucy5jcHA6IG1vdmUgaGFuZGxlX21lcmdlX29wdGlvbigpIC4uLgorCSogcHAvY29tbW9uX29wdGlvbi5oOiAKKwkqIHBwL2NvbW1vbl9vcHRpb24uY3BwOiBoZXJlCisJKiBwcC9vcGFubm90YXRlX29wdGlvbnMuY3BwOiB1c2UgaXQgYnV0IGRpc2FsbG93IC0tbWVyZ2U9bGliCisKKzIwMDMtMTAtMzEgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGxpYnV0aWwvb3BfZmlsZS5jOgorCSogbGlidXRpbC9vcF9maWxlLmg6IGltcGxlbWVudCBkaXJuYW1lKCksIGlzX2RpcmVjdG9yeSgpIGFuZAorCSAgb3BfZm9sbG93X2xpbmsoKQorCSogZGFlbW9uL29wcm9maWxlZC5jOiBmb2xsb3cgc3ltbGluayBmb3IgaW1hZ2UgZmlsdGVyCisJKiBsaWJ1dGlsKysvZmlsZV9tYW5pcC5jcHA6CisJKiBsaWJ1dGlsKysvZmlsZV9tYW5pcC5oOgorCSogZ3VpL29wcm9mX3N0YXJ0X3V0aWwuY3BwOgorCSogbGlicHAvcHJvZmlsZV9zcGVjLmNwcDogIHJlbmFtZSBvcF9mb2xsb3dfbGluaygpIHRvIGZvbGxvd19saW5rKCkKKworMjAwMy0xMC0zMSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogbGlidXRpbC90ZXN0cy9maWxlX3Rlc3RzLmM6ICIvL3VzciIgLS0+ICIvL3VzciIKKwkqIGxpYnV0aWwrKy90ZXN0cy8uY3ZzaWdub3JlOgorCSogbGlidXRpbCsrL3Rlc3RzL01ha2VmaWxlLmFtOgorCSogbGlidXRpbCsrL3Rlc3RzL2ZpbGVfbWFuaXBfdGVzdHMuY3BwOiBuZXcgdGVzdHMgZmlsZS4KKworMjAwMy0xMC0zMSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBkYWVtb24vb3BkX3BlcmZtb24uYzogZml4IGNvbXBpbGF0aW9uCisKKzIwMDMtMTAtMzAgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogbGlicHAvcHJvZmlsZV9zcGVjLmNwcDogaW50cm9kdWNlIGEgaGVscGVyIGZ1bmN0aW9uCisJdG8gbWFrZSB0aGUgY29tbWFfbGlzdCBtYXRjaGluZyBjbGVhcgorCisyMDAzLTEwLTMwICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBsaWJ1dGlsKysvY29tbWFfbGlzdC5oOiBpc19zZXQoKSBuZXcgbWVtYmVyCisJKiBsaWJwcC9wcm9maWxlX3NwZWMuY3BwOiBmaXggbWF0Y2hpbmcgbG9naWMgZm9yIGNwdS90aWQvdGdpZAorCisyMDAzLTEwLTMwICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGxpYnV0aWwrKy9nZW5lcmljX3NwZWMuaDogYWRkIHZhbHVlKCkgYW5kCisJaXNfc2V0KCksIHJlbW92ZSBib29sIHBhcmFtZXRlciBmcm9tIFQgdmFsdWUKKwltYXRjaCgpIChpdCB3YXMgbmV2ZXIgc2V0IHRvIHRydWUpCisKKwkqIGxpYnV0aWwrKy9jb21tYV9saXN0Lmg6IGRvIG5vdCBhY2NlcHQKKwlnZW5lcmljX3NwZWMsIHRoZSBiZWhhdmlvdXIgd2FzIHRvIGltcGxpY2l0bHkKKwlub3QgbWF0Y2ggYW4gImFsbCIgZ2VuZXJpY19zcGVjLiBJbnN0ZWFkOgorCisJKiBsaWJwcC9wcm9maWxlX3NwZWMuY3BwOiBlbmNvZGUgdGhlIG1hdGNoaW5nCisJYmVoYXZpb3VyIGV4cGxpY2l0bHksIGFuZCBhZGQgYSBjb21tZW50LgorCisJKiBsaWJ1dGlsKysvdGVzdHMvY29tbWFfbGlzdF90ZXN0cy5jcHA6IGZpeCB0bworCW1hdGNoIHRoZSBhYm92ZQorCisyMDAzLTEwLTMwICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIE1ha2VmaWxlLmFtOiByZS1vcmRlciBidWlsZCBzdWJkaXJzCisKKwkqIGxpYmFiaS9NYWtlZmlsZS5hbTogb25seSBidWlsZCBhYml0ZXN0IG9uCisJbWFrZSBjaGVjaworCisJKiBwcC9NYWtlZmlsZS5hbTogcHBfY29tbW9uIG5vdCBwcF9jb21tb25zCisKKzIwMDMtMTAtMzAgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogbGlidXRpbCsrL3Rlc3RzL01ha2VmaWxlLmFtOgorCSogbGlidXRpbCsrL3Rlc3RzL2NvbW1hX2xpc3RfdGVzdHMuY3BwOiBBZGQuCisKKzIwMDMtMTAtMzAgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogZG9jL01ha2VmaWxlLmFtOiBpbXByb3ZlIGNodW5rIHJ1bGVzCisKKzIwMDMtMTAtMzAgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogbGlidXRpbCsrL3Rlc3RzL01ha2VmaWxlLmFtOgorCSogbGlidXRpbCsrL3Rlc3RzL3N0cmluZ19maWx0ZXJfdGVzdHMuY3BwOiBBZGQuCisKKwkqIGxpYnV0aWwrKy90ZXN0cy9zdHJpbmdfbWFuaXBfdGVzdHMuY3BwOiBmaXggaGVhZGVyIGluY2x1ZGUKKworMjAwMy0xMC0zMCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBsaWJ1dGlsKysvdGVzdHMvc3RyaW5nX21hbmlwX3Rlc3RzLmNwcDogZml4IHRvYm9vbCB0ZXN0CisJKCIzMyIgaXMgbm90IGNhc3RhYmxlIHRvIGJvb2wpCisKKzIwMDMtMTAtMzAgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGxpYnV0aWwrKy9zdHJpbmdfbWFuaXAuY3BwOgorCSogbGlidXRpbCsrL3N0cmluZ19tYW5pcC5oOiByZW1vdmUgdG9zdHIoKS90b2Jvb2wvdG91aW50KCksIHJlbmFtZQorCSAgbGV4aWNhbF9jYXN0X25vX3dzPD4gdG8gb3BfbGV4aWNhbF9jYXN0PD4KKworCSogZ3VpL29wcm9mX3N0YXJ0LmNwcDoKKwkqIGd1aS9vcHJvZl9zdGFydF9jb25maWcuY3BwOgorCSogbGlicHAvYXJyYW5nZV9wcm9maWxlcy5jcHA6CisJKiBsaWJwcC9maWxlbmFtZV9zcGVjLmNwcDoKKwkqIGxpYnBwL29wX2hlYWRlci5jcHA6CisJKiBsaWJ1dGlsKysvY29tbWFfbGlzdC5oOgorCSogbGlidXRpbCsrL2dlbmVyaWNfc3BlYy5oOgorCSogbGlidXRpbCsrL3Rlc3RzL3N0cmluZ19tYW5pcF90ZXN0cy5jcHA6IHVzZSBvcF9sZXhpY2FsX2Nhc3Q8PgorCisyMDAzLTEwLTI5ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIHBwL2NvbW1vbl9vcHRpb24uaDogdXNlIHN0ZCBuYW1lc3BhY2UKKworMjAwMy0xMC0yOCAgSmFzb24gTHVueiAgPGx1bnpAZmFsb29sZXkub3JnPgorCisJKiBkb2Mvb3Byb2ZpbGUuMS5pbjogZG9jdW1lbnQgY3B1LHRpZCx0Z2lkIGluIHByb2ZpbGUKKwlzcGVjCisKKzIwMDMtMTAtMjkgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGxpYnBwL3Byb2ZpbGVfc3BlYy5jcHA6IGVycm9yIG91dCBmb3IgYWxsIHRhZzp2YWx1ZSBzcGVjaWZpZWQKKwkgIG1vcmUgdGhhbiBvbmNlLgorCisyMDAzLTEwLTI5ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBkb2Mvb3Bhbm5vdGF0ZS4xLmluOgorCSogZG9jL29wcmVwb3J0LjEuaW46CisJKiBkb2Mvb3Byb2ZpbGUueG1sOgorCSogbGlicmVnZXgvZGVtYW5nbGVfc3ltYm9sLmNwcDoKKwkqIGxpYnJlZ2V4L2RlbWFuZ2xlX3N5bWJvbC5oOgorCSogcHAvY29tbW9uX29wdGlvbi5jcHA6CisJKiBwcC9jb21tb25fb3B0aW9uLmg6CisJKiBwcC9vcGFubm90YXRlX29wdGlvbnMuY3BwOgorCSogcHAvb3Bhbm5vdGF0ZV9vcHRpb25zLmg6CisJKiBwcC9vcHJlcG9ydF9vcHRpb25zLmNwcDoKKwkqIHBwL29wcmVwb3J0X29wdGlvbnMuaDogcmVtb3ZlIC0tbm8tZGVtYW5nbGUsIC0tc21hcnQtZGVtYW5nbGUgYW5kCisJICAtLWRlbWFuZ2xlLCByZXBsYWNlIHRoZW0gd2l0aCAtLWRlbWFuZ2xlPW5vbmV8c21hcnR8bm9ybWFsCisKKzIwMDMtMTAtMjkgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGxpYnV0aWwrKy90ZXN0czogbmV3IGRpcmVjdG9yeQorCSogbGlidXRpbCsrL3Rlc3RzL3N0cmluZ19tYW5pcF90ZXN0cy5jcHA6IG5ldyB0ZXN0cyBmaWxlCisJKiBjb25maWd1cmUuaW46CisJKiBsaWJ1dGlsKysvTWFrZWZpbGUuYW06CisJKiBsaWJ1dGlsKysvdGVzdHMvLmN2c2lnbm9yZToKKwkqIGxpYnV0aWwrKy90ZXN0cy9NYWtlZmlsZS5hbTogaGFuZGxlIG5ldyB0ZXN0CisKKwkqIGxpYnV0aWwrKy9zdHJpbmdfbWFuaXAuaDoKKwkqIGxpYnV0aWwrKy9zdHJpbmdfbWFuaXAuY3BwOiBjb3JyZWN0IGltcGxlbWVudGF0aW9uIG9mIHNlcGFyYXRlX3Rva2VuCisJICB0byBtYXRjaCB0aGUgZG9jdW1lbnRhdGlvbgorCSogZGFlbW9uL2xpYmxlZ2FjeS9vcGRfaW1hZ2UuYzogZml4IGNvbW1lbnQKKworMjAwMy0xMC0yOCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogbGlicHAvY291bnRfYXJyYXkuY3BwOgorCSogbGlicHAvY291bnRfYXJyYXkuaDoKKwkqIGxpYnBwL2xvY2F0ZV9pbWFnZXMuaDoKKwkqIGxpYnBwL3BhcnNlX2ZpbGVuYW1lLmNwcDoKKwkqIGxpYnBwL3Byb2ZpbGUuY3BwOgorCSogbGlicHAvcHJvZmlsZS5oOgorCSogbGlicHAvcHJvZmlsZV9zcGVjLmNwcDoKKwkqIGxpYnBwL3N5bWJvbF9zb3J0LmNwcDogbWlub3IgdGlkeQorCisyMDAzLTEwLTI4ICBKYXNvbiBMdW56ICA8bHVuekBmYWxvb2xleS5vcmc+CisKKwkqIGRvYy9vcGNvbnRyb2wuMS5pbjogYmV0dGVyIHdvcmRpbmcgZm9yIC0tc2VwYXJhdGU9CisJKiBkb2Mvb3Byb2ZpbGUuMS5pbjogdHlwbworCisyMDAzLTEwLTI4ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBkYWVtb24vbGlibGVnYWN5L2luaXQuYzoKKwkqIGRhZW1vbi9saWJsZWdhY3kvb3BkXzI0X3N0YXRzLmM6CisJKiBkYWVtb24vbGlibGVnYWN5L29wZF8yNF9zdGF0cy5oOgorCSogZGFlbW9uL2xpYmxlZ2FjeS9vcGRfaW1hZ2UuYzoKKwkqIGRhZW1vbi9saWJsZWdhY3kvb3BkX2ltYWdlLmg6CisJKiBkYWVtb24vbGlibGVnYWN5L29wZF9rZXJuZWwuYzoKKwkqIGRhZW1vbi9saWJsZWdhY3kvb3BkX2tlcm5lbC5oOgorCSogZGFlbW9uL2xpYmxlZ2FjeS9vcGRfbWFwcGluZy5jOgorCSogZGFlbW9uL2xpYmxlZ2FjeS9vcGRfbWFwcGluZy5oOgorCSogZGFlbW9uL2xpYmxlZ2FjeS9vcGRfcGFyc2VfcHJvYy5jOgorCSogZGFlbW9uL2xpYmxlZ2FjeS9vcGRfcGFyc2VfcHJvYy5oOgorCSogZGFlbW9uL2xpYmxlZ2FjeS9vcGRfcHJvYy5jOgorCSogZGFlbW9uL2xpYmxlZ2FjeS9vcGRfcHJvYy5oOgorCSogZGFlbW9uL2xpYmxlZ2FjeS9vcGRfc2FtcGxlX2ZpbGVzLmM6CisJKiBkYWVtb24vbGlibGVnYWN5L29wZF9zYW1wbGVfZmlsZXMuaDogbW92ZSBkb3lnZW4gY29tbWVudCBmcm9tICouYyB0bworCSAgKi5oLiBBZGQgc29tZSBkb3h5Z2VuIGNvbW1lbnQuCisKKzIwMDMtMTAtMjcgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGRhZW1vbi9saWJsZWdhY3kvb3BkXzI0X3N0YXRzLmM6CisJKiBkYWVtb24vbGlibGVnYWN5L29wZF9pbWFnZS5oOgorCSogZGFlbW9uL2xpYmxlZ2FjeS9vcGRfaW1hZ2UuaDogbnJfaW1hZ2VzIHN0YXRpYworCisyMDAzLTEwLTI3ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGRvYy9vcGNvbnRyb2wuMS5pbjogZG9jdW1lbnQgLS1pbWFnZT0KKworCSogZG9jL29wcm9maWxlLnhtbDoKKwkqIHV0aWxzL29wY29udHJvbDogbWFrZSB1c2VyIHNwZWNpZnkgIi0taW1hZ2U9YWxsIgorCXRvIHJlc2V0LiBDbGVhbiB1cCBoZWxwIG1lc3NhZ2UuIEVuc3VyZSBub3RlIHRhYmxlCisJc2l6ZSBpcyBnaXZlbiBhIHZhbHVlLiBBZGQgJy10JyBmb3IgJy0tc3RvcCcsIGFuZAorCSctaScgZm9yICctLWltYWdlJy4KKworMjAwMy0xMC0yNyAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBkb2Mvb3Byb2ZpbGUueG1sOiBkb2N1bWVudCBvcGNvbnRyb2wgLS1pbWFnZT0KKworMjAwMy0xMC0yNyAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBkYWVtb24vb3BkX2V2ZW50cy5oOgorCSogZGFlbW9uL29wZF9ldmVudHMuYzogbW92ZSBjb2RlIGZvciBoYW5kbGluZworCWV2ZW50IGRlc2NyaXB0aW9ucyBoZXJlLCBhbmQgc2hhcmUgZmluZF9jb3VudGVyX2V2ZW50KCksCisJcGx1cyBmaWxsX2hlYWRlcigpCisKKwkqIGRhZW1vbi9vcGRfbWFuZ2xpbmcuYzoKKwkqIGRhZW1vbi9vcGRfcGVyZm1vbi5jOgorCSogZGFlbW9uL29wcm9maWxlZC5jOgorCSogZGFlbW9uL29wcm9maWxlZC5oOgorCSogZGFlbW9uL2xpYmxlZ2FjeS9vcGRfcHJvYy5jOgorCSogZGFlbW9uL2xpYmxlZ2FjeS9vcGRfc2FtcGxlX2ZpbGVzLmM6IGNoYW5nZXMgZnJvbQorCWFib3ZlCisKKzIwMDMtMTAtMjcgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogZGFlbW9uL29wcm9maWxlZC5jOiBmaXggaGVscCB0ZXh0CisKKwkqIGRhZW1vbi9saWJsZWdhY3kvaW5pdC5jOgorCSogZGFlbW9uL2xpYmxlZ2FjeS9vcGRfcHJvYy5oOgorCSogZGFlbW9uL2xpYmxlZ2FjeS9vcGRfcHJvYy5jOiBjbGVhbiB1cCBoZWFkZXJzCisJYSBiaXQKKworMjAwMy0xMC0yNyAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogZ3VpL29wcm9mX3N0YXJ0LmNwcDogY2hlY2sgd2UgY2FuIGdldCBrZXJuZWwgaW50ZXJmYWNlCisKKzIwMDMtMTAtMjcgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogZGFlbW9uL2xpYmxlZ2FjeS9NYWtlZmlsZS5hbTogcmVtb3ZlIHVubmVlZGVkCisJLUkgZm9yIGFiaQorCisyMDAzLTEwLTI3ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGRhZW1vbi9pbml0LmM6CisJKiBkYWVtb24vb3BkX3BlcmZtb24uYzogbW92ZSB0aW1lciBpbnRlcnJ1cHQgY2hlY2tzCisJaW50byBwZXJmbW9uCisKKzIwMDMtMTAtMjcgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogZGFlbW9uL29wcm9maWxlZC5jOiB1c2Ugb3BfZ2V0X2ludGVyZmFjZSgpCisKKwkqIGxpYm9wL29wX2dldF9pbnRlcmZhY2UuYzogc2ltcGxpZnkKKworMjAwMy0xMC0yNiAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogZ3VpL3VpL29wcm9mX3N0YXJ0LmJhc2UudWk6CisJKiBndWkvb3Byb2Zfc3RhcnQuY3BwOgorCSogZ3VpL29wcm9mX3N0YXJ0Lmg6IGNoZWNrIHNlcGFyYXRlX2xpYiBjaGVja2JveCB3aGVuCisJICBzZXBhcmF0ZV9rZXJuZWxfY2IgaXMgY2hlY2tlZAorCisyMDAzLTEwLTI2ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiB1dGlscy9vcGNvbnRyb2w6IGFsbG93IHRvIHJlc2V0IC0taW1hZ2UgdGhyb3VnaCBlbXB0eSAtLWltYWdlPQorCSAgb3IgLS1pbWFnZQorCisyMDAzLTEwLTI2ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGRhZW1vbi9vcGRfY29va2llLmM6IHJlZHVjZSB0aGUgaGFzaCB0YWJsZSBzaXplIHNvbWV3aGF0CisKKwkqIHZhcmlvdXM6IGZpeGVzIGZvciBkb3h5Z2VuCisKKzIwMDMtMTAtMjYgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogSEFDS0lORzoKKwkqIGNvbmZpZ3VyZS5pbjoKKwkqIE1ha2VmaWxlLmFtOgorCSogZGFlLzogbW92ZSBhbGwgb2YgMi40IGRhZW1vbiBjb2RlIHRvIC4uLgorCisJKiBkYWVtb24vbGlibGVnYWN5LzogaGVyZQorCisJKiBkYWVtb24vTWFrZWZpbGUuYW06CisJKiBkYWVtb24vb3BkX3V0aWwuaDoKKwkqIGRhZW1vbi9vcGRfdXRpbC5jOiBtb3ZlIHRvIC4uLgorCisJKiBkYWVtb24vb3Byb2ZpbGVkLmg6CisJKiBkYWVtb24vb3Byb2ZpbGVkLmM6IGhlcmUsIGFuZCBjYWxsIHRoZSByaWdodCBvcGVyYXRpb25zCisJZGVwZW5kaW5nIHVwb24gb3Byb2ZpbGUga2VybmVsIHZlcnNpb24uCisKKwkqIGRhZW1vbi9pbml0LmM6CisJKiBkYWVtb24vbGlibGVnYWN5L2luaXQuYzogaW5pdCBhbmQgcnVubmluZyBmb3IgZWFjaCB2ZXJzaW9uCisKKzIwMDMtMTAtMjYgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogZGFlbW9uL29wZF9jb29raWUuYzogbWFrZSBzdXJlIHRvIGNyZWF0ZSB0aGUKKwljb29raWUgZm9yIHRoZSBpZ25vcmUgdmFsdWUgaWYgaXQncyBub3QgZm91bmQKKworCSogZGFlbW9uL29wZF9zZmlsZS5jOiBzaW1wbGlmeSBpZ25vcmVkIGxvZ2ljCisKKzIwMDMtMTAtMjYgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogZG9jL2ludGVybmFscy54bWw6CisJKiBkb2MvYnVmZmVycy5wbmc6IGFkZCBhIGRpYWdyYW0KKworMjAwMy0xMC0yNiAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCWltcGxlbWVudCBpbWFnZSBmaWx0ZXJpbmc6CisKKwkqIGRhZS9vcGRfaW1hZ2UuaDogYWRkIGEgZmllbGQgZmlsdGVyZWQKKwkqIGRhZS9vcGRfaW1hZ2UuYzogc2V0IGl0IGF0IGltYWdlIGNyZWF0aW9uCisJKiBkYWUvb3BkX3Byb2MuYzogZG9uJ3QgcmVjb3JkIHNhbXBsZSB3aGVuICFpbWFnZS0+ZmlsdGVyZWQKKworCSogZGFlbW9uL29wZF9jb29raWUuaDogYWRkIGEgZmllbGQgZmlsdGVyZWQKKwkqIGRhZW1vbi9vcGRfY29va2llLmM6IHNldCBpdCBhIGNvb2tpZV9lbnRyeSBjcmVhdGlvbi4KKwkqIGRhZW1vbi9vcGRfc2ZpbGUuaDogYWRkIGEgZmllbGQgZmlsdGVyZWQKKwkqIGRhZW1vbi9vcGRfZmlsZS5jOiBzZXQgaXQgYSBvcGRfc2ZpbGUgc3RydWN0IGNyZWF0aW9uCisJKiBkYWVtb24vb3BkX3RyYW5zLmM6IHJlY29yZCBzYW1wbGUgaWYgZmlsdGVyZWQKKworCSogZGFlbW9uL29wZF91dGlsLmg6IGV4cG9ydCBvcGRfaGFzaF9uYW1lKCksIGlzX2ltYWdlX2ZpbHRlcmVkKCkKKwkqIGRhZW1vbi9vcGRfdXRpbC5jOiBpbXBsZW1lbnQgLS1pbWFnZT14eHgKKworCSogb3Byb2ZpbGVkLmM6ICNpbmNsdWRlICJjb25maWcuaCIgbm90IDw+CisKKwkqIHV0aWxzL29wY29udHJvbDogaGFuZGxlIC0taW1hZ2UKKworMjAwMy0xMC0yNiAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBkb2Mvb3Byb2ZpbGUueG1sOiByZW1vdmUgc29tZSBvdXRkYXRlZCBzdHVmZgorCisyMDAzLTEwLTI1ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGRvYy9pbnRlcm5hbHMueG1sOiBtb3JlIGRvY3MKKworMjAwMy0xMC0yNSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBkYWVtb24vb3BkX3BlcmZtb24uYzogY2xlYW51cHMKKworMjAwMy0xMC0yNCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBkb2MvaW50ZXJuYWxzLnhtbDogd3JpdGUgc29tZSBtb3JlCisKKzIwMDMtMTAtMjMgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogY29uZmlndXJlLmluOiBidW1wIHRvIDAuNy4xY3ZzCisKKzIwMDMtMTAtMjIgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogbGlib3AvdGVzdHMvTWFrZWZpbGUuYW06CisJKiBsaWJvcC90ZXN0cy9sb2FkX2V2ZW50c19maWxlc190ZXN0cy5jOgorCSogbGlib3AvdGVzdHMvYWxsb2NfY291bnRlcl90ZXN0cy5jOiBmaXgKKwltYWtlIGRpc3RjaGVjaworCisJKiBjb25maWd1cmUuaW46IGJ1bXAgdG8gMC43CisgCisyMDAzLTEwLTIyICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGRhZW1vbi9NYWtlZmlsZS5hbToKKwkqIGRhZW1vbi9vcGRfcGVyZm1vbi5oOgorCSogZGFlbW9uL29wZF9wZXJmbW9uLmM6IHJlLWVuYWJsZS4gV2FpdCBmb3IgY2hpbGRyZW4uCisJTW9yZSBzYWZldHkgY2hlY2tpbmcuCisKKwkqIGRhZW1vbi9vcHJvZmlsZWQuYzogb25seSB1c2UgcGVyZm1vbiBpZiAhdGltZXIKKworMjAwMy0xMC0yMCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogZG9jL29wcm9maWxlLnhtbDoKKwkqIGRvYy9vcHJvZmlsZS4xLmluOiBzL3BoeXNpY2FsIENQVS9DUFUvCisKKzIwMDMtMTAtMjAgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogZGFlbW9uL01ha2VmaWxlLmFtOgorCSogZGFlbW9uL29wZF9wZXJmbW9uLmg6IGRpc2FibGUgcGVyZm1vbiBuaWNlbHkKKworCSogZ3VpL29wcm9mX3N0YXJ0LmNwcDoKKwkqIGd1aS9vcHJvZl9zdGFydF9jb25maWcuaDoKKwkqIGd1aS9vcHJvZl9zdGFydF9jb25maWcuY3BwOgorCSogZ3VpL3VpL29wcm9mX3N0YXJ0LmJhc2UudWk6IEZpeCByZWFkaW5nIG9mIHNlcGFyYXRlCisJcGFyYW1ldGVycy4gQWRkIENQVSBhbmQgdGhyZWFkIHNlcGFyYXRpb24KKworMjAwMy0xMC0yMCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogbGlicHAvcHJvZmlsZV9zcGVjLmNwcDogcmVsYXRpdmUgcGF0aCBhcmUgcmVsYXRpdmUgdG8gY3VycmVudCBkaXIKKwkgIG5vdCBmaWxlbmFtZS4KKworMjAwMy0xMC0yMCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBkb2Mvb3Byb2ZpbGUueG1sOgorCSogZG9jL29wcmVwb3J0LjEuaW46IGZpeCAtLW1lcmdlIGRvY3MgYW5kIHByb2ZpbGUgc3BlY3MKKworMjAwMy0xMC0yMCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBkYWUvb3BkX3NhbXBsZV9maWxlcy5jOgorCSogZGFlbW9uL29wZF9tYW5nbGluZy5jOgorCSogbGliYWJpL2FiaS5jcHA6CisJKiBsaWJhYmkvYWJpX3Rlc3QuY3BwOgorCSogbGliYWJpL29wX2ltcG9ydC5jcHA6CisJKiBsaWJvcC9vcF9jb25maWcuaDoKKwkqIGxpYm9wL29wX3NhbXBsZV9maWxlLmg6CisJKiBsaWJwcC9vcF9oZWFkZXIuY3BwOiByZW1vdmUgY3RyIGFuZCBzZXBhcmF0ZV8qIGZyb20KKwloZWFkZXIuIFJlLWFycmFuZ2UgaXQgYSBsaXR0bGUsIGFuZCBtYWtlIGl0IDY0IGJ5dGVzCisJb24gSUxQMzIuIEJ1bXAgdGhlIHZlcnNpb24uCisKKzIwMDMtMTAtMjAgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogbGlicHAvYXJyYW5nZV9wcm9maWxlcy5jcHA6IHJld29yayB0aGUgY2xhc2hpbmctYXhlcworCWVycm9yIG1lc3NhZ2UgdG8gYmUgbmljZXIgdG8gdGhlIHVzZXIKKworMjAwMy0xMC0yMCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBsaWJwcC9hcnJhbmdlX3Byb2ZpbGVzLmNwcDogaWYgdGlkID09IHRnaWQgZm9yCisJZXZlcnkgcHJvZmlsZSBjbGFzcywgYWxsb3cgYXhlcyBvZiBib3RoIFRJRCBhbmQgVEdJRAorCS0gdGhlcmUgaXMgbm8gYWN0dWFsIGRpZmZlcmVuY2UsIG9ubHkgdGhlb3JldGljYWwKKworMjAwMy0xMC0yMCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogZGFlL29wcm9maWxlZC5jOiBjb3JyZWN0IGFuIGVycm9yIG1lc3NhZ2UKKwkqIGxpYm9wL29wX2FsbG9jX2NvdW50ZXIuaDogcmVtb3ZlIGJvZ3VzIEZJWE1FCisJKiBsaWJ1dGlsKysvY2hpbGRfcmVhZGVyLmNwcDogYXZvaWQgcXVhZHJhdGljIGJlaGF2aW91ciBpZiBjaGlsZCBkb2VzIGEKKwkgIGxvdCBvZiBvdXRwdXQgaW4gc3RkZXJyCisJKiBsaWJwcC9vcGdwcm9mLmNwcDogZml4IGNvbW1lbnQKKworMjAwMy0xMC0xOSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogZ3VpL29wcm9mX3N0YXJ0LmNwcDogcmVkdW5kYW50IHJldHVybgorCisyMDAzLTEwLTE5ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGxpYm9wL29wX2V2ZW50cy5jOiBtb3ZlIHRvIGEgZml4ZWQgdmFsdWUgZm9yIHRoZSBkZWZhdWx0CisJZXZlbnQgY291bnQgdmFsdWUKKworMjAwMy0xMC0xOSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCXJlbW92ZSBzb21lIEZJWE1FOgorCSogbGlicHAvZm9ybWF0X291dHB1dC5oOiByZW1vdmUgZmlyc3Rfb3V0cHV0IGJvb2wgbWVtYmVyCisJKiBsaWJwcC9mb3JtYXRfb3V0cHV0LmNwcDogY2FsbCBvdXRwdXRfaGVhZGVyIGZyb20gdGhlIHJpZ2h0IHBsYWNlCisJKiBsaWJwcC9vcF9oZWFkZXIuaDogcmVtb3ZlIGJvZ3VzIEZJWE1FCisKKwkqIGxpYnJlZ2V4L3Rlc3RzL01ha2VmaWxlLmFtOiBmaXggZGVwZW5kZW5jaWVzIG9uIG1hbmdsZWQtbmFtZSBmaWxlLAorCSAgZml4IG1ha2UgZGlzdAorCSogbGlicmVnZXgvdGVzdHMvbWFuZ2xlZC1uYW1lLmluOiBzaW1wbGlmeSBhIGJpdCBhbmQgcmVtb3ZlIGEgYm9ndXMKKwkgIEZJWE1FCisJKiBsaWJyZWdleC90ZXN0cy9yZWdleF90ZXN0LmNwcDogZml4IGNvbW1lbnQKKworCSogbW9kdWxlL2lhNjQvb3Bfc3lzY2FsbHMuYzoKKwkqIG1vZHVsZS94ODYvaGFtbWVyX29wX3N5c2NhbGxzLmM6CisJKiBtb2R1bGUveDg2L29wX3N5c2NhbGxzLmM6IHJlbW92ZSBzb21lIEZJWE1FCisKKzIwMDMtMTAtMTcgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGxpYnBwL2FycmFuZ2VfcHJvZmlsZXMuY3BwOiBjbGFyaWZ5IHN1Z2dlc3Rpb24uCisJKiBwcC9vcHJlcG9ydF9vcHRpb25zLmNwcDogdXBkYXRlIG9wdGlvbnMgaGVscCBzdHJpbmcgZm9yIC0tbWVyZ2UuCisKKwkqIGxpYnBwL3Byb2ZpbGVfY29udGFpbmVyLmNwcDoKKwkqIGxpYnBwL3Byb2ZpbGVfc3BlYy5jcHA6CisJKiBwcC9jb21tb25fb3B0aW9uLmNwcDoKKwkqIHBwL3BvcHVsYXRlLmNwcDogJzsnIGFyZSBub3QgbmVjZXNzYXJ5IHRvIGVuZCBuYW1lc3BhY2UKKworMjAwMy0xMC0xNyAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogbGlicHAvYXJyYW5nZV9wcm9maWxlcy5jcHA6IHVzZSBhIHNldDxwcm9maWxlX2NsYXNzZXM+IGluc3RlYWQKKwkgIG9mIGEgdmVjdG9yPC4uLj4gdG8gcmVwbGFjZSBhIE8oTipNKSBieSBhIE8oTipsb2coTSkpIGJlaGF2aW9yLgorCSAgKE4gbnVtYmVyIG9mIHNhbXBsZXMgZmlsZXMsIE0gbnVtYmVyIG9mIGNsYXNzKS4KKworMjAwMy0xMC0xNyAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogbGlidXRpbCsrL29wX2JmZC5jcHA6IHNob3cgZmlsZW5hbWUgd2hlbiB3YXJuaW5nIGFib3V0IG5vIGRlYnVnCisJICBpbmZvcm1hdGlvbiBhdmFpbGFibGUuIGdldF9saW5lbnIoKTogcy9maWxlbmFtZS9zb3VyY2VfZmlsZW5hbWUvCisKKzIwMDMtMTAtMTYgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGV2ZW50cy9pYTY0L2l0YW5pdW0vZXZlbnRzOiBjb3VudGVyIDAsMSBub3QgMiwzIGZvciBJQTY0X0lOU1RfUkVUSVJFRAorCisJKiBkYWVtb24vb3BkX3V0aWwuYzogb3BkX3BhcnNlX2V2ZW50cygpIGZpeCB1c2UgYWZ0ZXIgZnJlZS4KKworMjAwMy0xMC0xNiAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBkYWVtb24vb3BkX3BlcmZtb24uYzogZGlzYWJsZSB0aGUgY29kZQorCisyMDAzLTEwLTE1ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGRhZW1vbi9vcGRfcGVyZm1vbi5jOiBmZmx1c2hlcyB0byBpbXByb3ZlCisJb3JkZXIgb2YgZGVidWcgbG9nCisKKzIwMDMtMTAtMTUgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogZGFlbW9uL29wZF9wZXJmbW9uLmM6IGZpeCBkdW1iIGFsbG9jYXRpb24gdHlwbzsKKwloYW5kbGUgc2lnbmFscyBjb3JyZWN0bHk7IHdhaXQgZm9yIGNoaWxkcmVuIHRvCisJY29tZSB1cCBiZWZvcmUgcmV0dXJuaW5nCisKKzIwMDMtMTAtMTUgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGRhZS9vcGRfc2FtcGxlX2ZpbGVzLmM6CisJKiBkYWVtb24vb3BkX21hbmdsaW5nLmM6CisJKiBkYWVtb24vb3BkX3BlcmZtb24uYzoKKwkqIGRhZW1vbi9vcGRfdXRpbC5jOiBjaGVjayB3ZSBub3Qgb3ZlcmZsb3cgb3BfbnJfY291bnRlcnMKKworMjAwMy0xMC0xNSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogZXZlbnRzL2lhNjQvaXRhbml1bS9ldmVudHM6IGNvcnJlY3QgY291bnRlciBhdmFpbGFibGUgYWNjb3JkaW5nCisJICB0byBpbnRlbCBkb2MuCisKKzIwMDMtMTAtMTUgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogZGFlL29wZF9pbWFnZS5jOgorCSogZGFlL29wZF9rZXJuZWwuYzoKKwkqIGRhZS9vcGRfcHJvYy5jOgorCSogZGFlL29wZF9zYW1wbGVfZmlsZXMuYzoKKwkqIGRhZS9vcHJvZmlsZWQuYzoKKwkqIGRhZW1vbi9vcGRfa2VybmVsLmM6CisJKiBkYWVtb24vb3BkX21hbmdsaW5nLmM6CisJKiBkYWVtb24vb3BkX3NmaWxlLmM6CisJKiBkYWVtb24vb3BkX3RyYW5zLmM6CisJKiBkYWVtb24vb3BkX3V0aWwuYzoKKwkqIGRhZW1vbi9vcGRfdXRpbC5oOgorCSogZGFlbW9uL29wcm9maWxlZC5jOiBtZXJnZSB0aGUgb3B0aW9ucyBoYW5kbGluZworCWZvciBkYWUgYW5kIGRhZW1vbgorCisyMDAzLTEwLTE1ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBkYWVtb24vb3BkX3BlcmZtb24uYzoKKwkqIG1vZHVsZS9pYTY0L29wX3BtdS5jOiBiaXQgbWFzayBmb3IgZXZlbnQgc2VsZWN0IGZpZWxkIGlzIDggYml0cyBub3QgNworCisyMDAzLTEwLTE0ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGNvbmZpZ3VyZS5pbjoKKwkqIG00L2ZpbmRrZXJuZWwubTQ6CisJKiB1dGlscy9vcGNvbnRyb2w6IDIuNSByZWZzIC0+IDIuNgorCisyMDAzLTEwLTE0ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIHV0aWxzL29wY29udHJvbDogbWVyZ2Ugc29tZSAyLjQvNiBjb2RlCisKKzIwMDMtMTAtMTQgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogZGFlL29wZF9pbWFnZS5jOgorCSogZGFlL29wZF9zYW1wbGVfZmlsZXMuYzoKKwkqIGRhZS9vcHJvZmlsZWQuYzoKKwkqIHV0aWxzL29wY29udHJvbDogdXNlIC0tZXZlbnRzIGZvciAyLjQgZGFlbW9uCisJdG9vCisKKwkqIGRhZW1vbi9vcGRfcGVyZm1vbi5jOgorCSogZGFlbW9uL29wZF9tYW5nbGluZy5jOiBmaXggY291bnRlciBudW1iZXJpbmcKKwlvbiAhcGVyZm1vbgorCisyMDAzLTEwLTE0ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGNvbmZpZ3VyZS5pbjogeG1lbWR1cCBub3QgeG1lbWR1bXAKKworMjAwMy0xMC0xNCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBkYWVtb24vb3BkX3BlcmZtb24uYzogcHJvcGFnYXRlIGEgU0lHVEVSTQorCXVwIHRvIHRoZSBwYXJlbnQuCisKKzIwMDMtMTAtMTQgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogbTQvcGVyZm1vbi5tNDoKKwkqIGNvbmZpZ3VyZS5pbjogcmVtb3ZlIHBmbWxpYiBjaGVja3MKKworCSogZGFlbW9uL29wZF91dGlsLmg6CisJKiBkYWVtb24vb3BkX3V0aWwuYzoKKwkqIGRhZW1vbi9vcGRfbWFuZ2xpbmcuYzoKKwkqIGRhZW1vbi9vcHJvZmlsZWQuYzogcGFyc2UgbW9yZSBkZXRhaWxlZCBldmVudHMKKwlwYXNzZWQgb24gY29tbWFuZCBsaW5lCisKKwkqIGRhZW1vbi9vcGRfcGVyZm1vbi5oOgorCSogZGFlbW9uL29wZF9wZXJmbW9uLmM6IGRvbid0IHVzZSBsaWJwZm0gYXQgYWxsLAorCWRvIGl0IG91cnNlbHZlcy4KKworCSogdXRpbHMvb3Bjb250cm9sOiBwYXNzIG1vcmUgb2YgdGhlIGV2ZW50cyBpbmZvIHRvCisJdGhlIGRhZW1vbgorCisyMDAzLTEwLTE0ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIG00L3BlcmZtb24ubTQ6CisJKiBjb25maWd1cmUuaW46IGxvb2sgZm9yIHBmbWxpYiAzCisKKwkqIGRhZW1vbi9NYWtlZmlsZS5hbToKKwkqIGRhZW1vbi9vcGRfcGVyZm1vbi5oOgorCSogZGFlbW9uL29wZF9wZXJmbW9uLmM6IGludGVyZmFjZSB0byBwZXJmbW9uIG9uIDIuNiBJQTY0CisKKwkqIGRhZW1vbi9vcGRfbWFuZ2xpbmcuYzoKKwkqIGRhZW1vbi9vcHJvZmlsZWQuYzogcmVhZCBldmVudCBkZXNjcmlwdGlvbnMgZnJvbSBjb21tYW5kCisJbGluZSBub3Qgb3Byb2ZpbGVmcworCisJKiBkYWVtb24vb3BkX3V0aWwuaDoKKwkqIGRhZW1vbi9vcGRfdXRpbC5jOiByZWNlaXZlIFNJR1VTUjEvMiBmb3IgcGVyZm1vbgorCisJKiB1dGlscy9vcGNvbnRyb2w6IGhhbmRsZSBtdWx0aXBsZSBvcHJvZmlsZWRzLiBTZW5kIFNJR1VTUjEvMgorCW9uIHN0YXJ0L3N0b3AuIFBhc3MgaW4gZXZlbnRzIGxpc3QgdG8gb3Byb2ZpbGVkIG9uIDIuNi4gRG9uJ3QKKwlhdHRlbXB0IHRvIGZpbGwgaW4gb3Byb2ZpbGVmcyB3aXRoIGV2ZW50IGluZm8gaWYgdXNpbmcgcGVyZm1vbi4KKworMjAwMy0xMC0xNCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogZGFlbW9uL29wZF9tYW5nbGluZy5jOgorCSogZGFlbW9uL29wZF9zZmlsZS5jOgorCSogZGFlbW9uL29wZF9zZmlsZS5oOiBwcm90ZWN0IHRoZSBzZmlsZSB3ZSBhcmUgYWN0aW5nIG9uIHRvIGJlIGZyZWVkCisJICBieSBzZmlsZV9scnVfY2xlYXIoKQorCisJKiBsaWJkYi9kYl9tYW5hZ2UuYzoKKwkqIGxpYmRiL29kYl9oYXNoLmg6IERvIG5vdCBwdXQgaGFzaC0+ZGVzY3IgaW4gYW4gaW5jb25zaXN0ZW50IHN0YXRlCisJICB3aGVuIGEgZmFpbHVyZSBvY2N1ci4KKworMjAwMy0xMC0xMyAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogbW9kdWxlL29wcm9maWxlLmM6IGRvbid0IHJlc3RvcmUgc3lzY2FsbCBhbmQgc3RvcCBjb3VudGVyIHR3aWNlCisKKzIwMDMtMTAtMTMgIFdpbGwgQ29oZW4gIDx3Y29oZW5AcmVkaGF0LmNvbT4KKworCSogbGlib3Avb3BfcGFyc2VfZXZlbnQuYyhwYXJzZV9ldmVudHMpOiBDb3JyZWN0IGZwcmludGYuCisKKzIwMDMtMTAtMTMgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIG1vZHVsZS94ODYvaGFtbWVyX29wX3N5c2NhbGxzLmM6IHBhc3MgdGdpZCB0byBkYWVtb24uIE5vdCB0ZXN0ZWQhCisKKzIwMDMtMTAtMTIgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogdXRpbHMvb3Bjb250cm9sOiBzaGFyZSAtLXNlcGFyYXRlLWNwdS90aHJlYWQgY29kZSBub3cKKworMjAwMy0xMC0xMiAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogY29uZmlndXJlLmluOiBhZGQgbGlicmVnZXgvdGVzdHMvbWFuZ2xlZC1uYW1lLmluCisJKiBsaWJyZWdleC90ZXN0cy9tYW5nbGVkLW5hbWUudHh0OiBtb3ZlIC4uLgorCSogbGlicmVnZXgvdGVzdHMvbWFuZ2xlZC1uYW1lLmluOiBoZXJlLCB0dW5lIHRvIHN1cHBvcnQgZGlmZmVyZW50IGFyY2gKKwkqIGxpYnJlZ2V4L3Rlc3RzL01ha2VmaWxlLmFtOiBzL21hbmdsZWQtbmFtZS50eHQvbWFuZ2xlZC1uYW1lLmluCisJKiBsaWJyZWdleC9zdGwucGF0LmluOiBmaXggaXRlcmF0b3I8Li4uIHB0cmRpZmZfdD4KKwkqIGxpYnJlZ2V4L3Rlc3RzL01ha2VmaWxlLmFtOiB1cGRhdGUgYWNjb3JkaW5nIHRvIGZpbGVuYW1lIGNoYW5nZQorCisJKiBsaWJyZWdleC90ZXN0cy9yZWdleF90ZXN0LmNwcDogcmVhbGx5IGZhaWxzIG9uIGV4Y2VwdGlvbi4KKworMjAwMy0xMC0xMiAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogZGFlL29wcm9maWxlZC5jOiBkb24ndCBzZXQgY3B1X251bWJlciB3aGVuICEtLXNlcGFyYXRlPWNwdQorCQorCSogbGlib3AvdGVzdHMvYWxsb2NfY291bnRlcl90ZXN0cy5jOiBwcmludGYgZm9ybWF0IGZvciA2NCBiaXRzIGFyY2gKKwkqIGxpYm9wL3Rlc3RzL2NwdV90eXBlX3Rlc3RzLmM6ICNpbmNsdWRlIDxzdHJpbmcuaD4KKwkqIGxpYm9wL3Rlc3RzL3BhcnNlX2V2ZW50X3Rlc3RzLmM6ICNpbmNsdWRlIDxzdHJpbmcuaD4KKworMjAwMy0xMC0xMSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogbGlib3Avb3BfaW50ZXJmYWNlLmg6IHN0cnVjdCBvcF9zYW1wbGU6IHJlbW92ZSBwYWNrZWQgYXR0cmlidXRlCisKKzIwMDMtMTAtMTEgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGRhZS9vcGRfaW1hZ2UuYzoKKwkqIGRhZS9vcGRfaW1hZ2UuaDogcmVmZXJlbmNlIGNvdW50IG9wZF9pbWFnZS4gUmVtb3ZlIG1vZGlmaWNhdGlvbiB0aW1lCisJICBjaGVja2luZy4gUmVtb3ZlIGhhc2ggZmllbGQuIFRpZHkKKwkqIGRhZS9vcGRfa2VybmVsLmM6IHBhc3MgdGlkLCB0Z2lkIHRvIG9wX2dldF9rZXJuZWxfaW1hZ2UoKQorCSogZGFlL29wZF9tYXBwaW5nLmM6CisJKiBkYWUvb3BkX21hcHBpbmcuaDogdXNlIG1vZHVsZSBoYXNoIGNvZGUgZm9yIGltYWdlIG5hbWUgdG8gaW5kZXgKKwkgIGEgY2FjaGUgb2YgbmFtZSwgdGhpcyBoYXNoIGNvZGUgaXMgbm8gbG9uZ2VyIHVzZWQgZWxzZXdoZXJlLiBXaGVuCisJICBraWxsaW5nIG1hcCBkZWxldGUgYXNzb2NpYXRlZCBpbWFnZSwgcmVmZXJlbmNlIGNvdW50IG9mIGltYWdlCisJICB3aWxsIGNoZWNrIGZvciBhIHJlYWwgZGVsZXRlLgorCSogZGFlL29wZF9wYXJzZV9wcm9jLmM6IGdldCB0Z2lkIGZyb20gL3Byb2MvcGlkL3N0YXR1cworCSogZGFlL29wZF9wcm9jLmM6IGNyZWF0ZSBhbiBvcGRfcHJvYyBieSBwcm9jZXNzIHdoZW4KKwkgIHNlcGFyYXRlX3RocmVhZCA9PSB0cnVlLiBUaWR5IGJ5IGFkZGluZyBhbiBvcGRfZm9yX2VhY2hfcHJvYygpCisJKiBkYWUvb3BkX3Byb2MuaDogYWRkIHRpZC90Z2lkIHRvIG9wZF9wcm9jIHN0cnVjdAorCSogZGFlL29wZF9zYW1wbGVfZmlsZXMuYzoKKwkqIGRhZS9vcGRfc2FtcGxlX2ZpbGVzLmg6IGxydSBhbGwgc2FtcGxlcyBmaWxlcywgYWxsb3dpbmcgdG8gY2xlYW51cAorCSAgYSBwYXJ0IG9mIHRoZSBscnUgaWYgd2UgZ28gb3V0IG9mIHJlc291cmNlLiBSZW1vdmUKKwkgIG9wZF9oYW5kbGVfb2xkX3NhbXBsZV9maWxlcygpIHNpbmNlIHdlIG5vIGxvbmdlciBjaGVjayBmb3IgaW1hZ2UKKwkgIG1vZGlmaWNhdGlvbiB0aW1lLgorCSogZGFlL29wZF9zdGF0cy5jOgorCSogZGFlL29wZF9zdGF0cy5oOiBzdGF0aXN0aWNzIGZvciBvcGRfaW1hZ2Ugc3RydWN0IGRlcHRoIHNlYXJjaAorCSogZGFlL29wcm9maWxlZC5jOiBhZGQgLS1zZXBhcmF0ZS1jcHUgYW5kIC0tc2VwYXJhdGUtdGhyZWFkCisJKiBsaWJvcC9vcF9pbnRlcmZhY2UuaDogYWRkIHRnaWQgdG8gc2FtcGxlcyBzdHJ1Y3QgcGFzc2VkIGZyb20gbW9kdWxlCisJICB0byBkYWVtb24uCisJKiBtb2R1bGUvY29tcGF0MjIuaDoKKwkqIG1vZHVsZS9jb21wYXQyNC5oOiBvcF9nZXRfdGdpZCgpIHJldHVybiB0Z2lkLCBmYWxsIGJhY2sgdG8gcmV0dXJuCisJICB0aWQgb24gMi4yIGtlcm5lbC4KKwkqIG1vZHVsZS9vcHJvZmlsZS5jOgorCSogbW9kdWxlL2lhNjQvb3Bfc3lzY2FsbHMuYzogcGFzcyB0Z2lkIHRvIGRhZW1vbi4gTk9UIFRFU1RFRCBidXQgSQorCSAgdGhpbmsgaXQncyBvay4gTm90ZSB0aGFuIGV2ZW4gaWYgaXQncyBicm9rZW4gaWE2NCBzaG91bGQgd29yayB3L28KKwkgIC0tc2VwYXJhdGU9dGhyZWFkCisJKiBtb2R1bGUveDg2L29wX3N5c2NhbGxzLmM6IHBhc3MgdGdpZCB0byBkYWVtb24uCisJKiB1dGlscy9vcGNvbnRyb2w6IGVuYWJsZSAyLjQgdGhyZWFkL2NwdSBzZXBhcmF0aW9uCisKKwkqIGxpYmRiL3Rlc3RzL2RiX3Rlc3QuYzogdmVyYm9zZSBvbiB3aGVuIHdlIHByb3ZpZGUgZmlsZW5hbWUgb2YgZGIgZmlsZQorCSAgdG8gdGVzdCBvbiBjb21tYW5kIGxpbmUuCisKKzIwMDMtMTAtMTEgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGxpYm9wL29wX2NwdV90eXBlLmg6CisJKiBsaWJvcC9vcF9jcHVfdHlwZS5jOiBjb25zdGlmaWNhdGlvbgorCSogdXRpbHMvb3BfaGVscC5jOiBjaGVjayBvbmx5IGlmIENQVV9OT19HT09EIG5vdCByYW5nZQorCisJKiBsaWJ1dGlsL3Rlc3RzL01ha2VmaWxlLmFtOgorCSogbGlicmVnZXgvdGVzdHMvTWFrZWZpbGUuYW06CisJKiBsaWJkYi90ZXN0cy9NYWtlZmlsZS5hbTogcy9URVNUID0gKC4qKS9URVNUUyA9ICR7Y2hlY2tfUFJPR1JBTVN9LworCisJKiBsaWJvcC90ZXN0cy9hbGxvY19jb3VudGVyX3Rlc3RzLmM6IGNvbW1lbnQgZml4CisKKwkqIGxpYm9wL3Rlc3RzL01ha2VmaWxlLmFtOgorCSogbGlib3AvdGVzdHMvY3B1X3R5cGVfdGVzdHMuYzogbmV3IGZpbGUsIHRlc3QgbGlib3Avb3BfY3B1X3R5cGUuYworCisyMDAzLTEwLTEwICBXaWxsIENvaGVuICA8d2NvaGVuQHJlZGhhdC5jb20+CisKKwkqIGxpYm9wL29wX2NwdV90eXBlLmggKG9wX2dldF9jcHVfbnVtYmVyKTogQ2xhcmlmeSBjb21tZW50LgorCSogbGlib3Avb3BfY3B1X3R5cGUuYyAob3BfZ2V0X2NwdV9udW1iZXIpOiBDaGVjayBudW1iZXIuCisJKiB1dGlscy9vcF9oZWxwLmMgKG1haW4pOiBNYWtlIGNoZWNrIHdpdGggQ1BVX05PX0dPT0QuCisKKzIwMDMtMTAtMTAgIFdpbGwgQ29oZW4gIDx3Y29oZW5AcmVkaGF0LmNvbT4KKworCSogbGlib3Avb3BfY3B1X3R5cGUuaCAob3BfZ2V0X2NwdV9udW1iZXIpOiBEZWNsYXJlLgorCSogbGlib3Avb3BfY3B1X3R5cGUuYyAob3BfZ2V0X2NwdV9udW1iZXIpOiBOZXcuCisJICAob3BfZ2V0X2NwdV90eXBlKTogVXNlIG9wX2dldF9jcHVfbnVtYmVyLgorCSogdXRpbHMvb3BfaGVscC5jIChtYWluKTogVXNlIG9wX2dldF9jcHVfbnVtYmVyLgorCisyMDAzLTEwLTEwICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGxpYm9wL29wX3BhcnNlX2V2ZW50LmM6IGZpeCBjb21waWxlIGZvciBJQTY0CisKKzIwMDMtMTAtMDkgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogZG9jL29wcm9maWxlLnhtbDogZG9jdW1lbnQgIm5vIHJlc3VsdHMiIGFuZAorCWhvdyB0byBmaXggaXQKKworMjAwMy0xMC0wOCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiB1dGlscy9vcF9oZWxwLmM6IHN0YW5kYXJkaXNlIG5hbWUKKworCSogZ3VpL29wcm9mX3N0YXJ0LmNwcDogUXQgMi4zLjEgY29tcGlsZSBmaXgKKwkoYnVnIDgxOTk0MykKKworMjAwMy0xMC0wNyAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogZGFlL29wZF9rZXJuZWwuYzogbWVtb3J5IGxlYWsKKworCSogZGFlL29wZF9tYXBwaW5nLmM6CisJKiBkYWUvb3BkX21hcHBpbmcuaDoKKwkqIGRhZS9vcGRfcGFyc2VfcHJvYy5jOgorCSogZGFlL29wZF9wcm9jLmM6IAorCSogZGFlL29wZF9wcm9jLmg6IHVzZSBhIGxpc3Qgb2Ygc3RydWN0IG9wZF9tYXAgaW5zdGVhZCBvZiBhbiBhcnJheSwKKwkgIHJlbW92ZSBsYXN0X21hcCBvcHRpbWl6YXRpb24uCisKKwkqIGRhZS9vcHJvZmlsZWQuYzogbWVtb3J5IGxlYWsKKwkKKwkqIGxpYnV0aWwvb3BfY3B1ZnJlcS5jOiBtZW1vcnkgbGVhaywgRklMRSogbGVhaworCSogbGlidXRpbC9vcF9saXN0Lmg6IGZpeCBAYXV0aG9yCisKKzIwMDMtMTAtMDYgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGRhZS9vcHJvZmlsZWQuYzoKKwkqIGRhZS9vcGRfcHJvYy5oOgorCSogZGFlL29wZF9wcm9jLmM6IHVzZSBzdHJ1Y3QgbGlzdF9oZWFkIHRvIGNoYWluIG9wZF9wcm9jIHN0cnVjdCBpbiBoYXNoCisJICB0YWJsZQorCisJKiB1dGlscy9vcF9oZWxwLmM6IGNvbW1lbnQgZml4CisKKzIwMDMtMTAtMDYgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogdXRpbHMvb3Bjb250cm9sOiB3b3JrIGFyb3VuZCAyLjYgZGFlbW9uJ3Mgc2lnbmFsCisJaGFuZGxpbmcgcmFjZSB0aGF0IGNvdWxkIGNhdXNlIGl0IHRvIGhhbmcgZHVyaW5nCisJYSAtLXNodXRkb3duCisKKzIwMDMtMTAtMDUgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGV2ZW50cy9pMzg2L3A0L2V2ZW50czoKKwkqIGV2ZW50cy9pMzg2L3A0LWh0L2V2ZW50czogcHV0IEdMT0JBTF9QT1dFUl9FVkVOVFMgb24gdG9wCisKKwkqIGV2ZW50cy9pMzg2L3BpaS91bml0X21hc2tzOgorCSogZXZlbnRzL2kzODYvcGlpaS91bml0X21hc2tzOiB0eXBvIGluIGhlbHAgc3RyaW5nCisKKwkqIHV0aWxzL29wX2hlbHAuYzogc2hvdyAiY291bnRlcjogYWxsIiBpbnN0ZWFkIGFuIGVudW1lcmF0aW9uIG9mIGFsbAorCSAgY291bnRlcgorCisyMDAzLTEwLTAyICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBldmVudHMvKi5ldmVudHMgKi51bml0X21hc2tzOiBtb3ZlIHRoZXNlIGZpbGVzIHRvIHN1YmRpciBuYW1lZAorCSAgYXJjaC9wcm9jZXNzb3JfbmFtZS9ldmVudHMgYW5kIGFyY2gvcHJvY2Vzc29yX25hbWUvdW5pdF9tYXNrcworCSogZXZlbnRzL01ha2VmaWxlLmFtOiB1cGRhdGUgYWNjb3JkaW5nCisJCisJKiBsaWJvcC9vcF9ldmVudHMuYzogbm93IGl0J3Mgc2FmZSB0byBhbGxvdyBsb2FkaW5nIGV2ZW50cyBmaWxlIGZyb20gYQorCSAgZGlyZWN0b3J5IHByb3ZpZGVkIHRocm91Z2ggZW52aXJvbm1lbnQgdmFyIE9QUk9GSUxFX0VWRU5UU19GSUxFX0RJUgorCSogbGlib3AvdGVzdHMvYWxsb2NfY291bnRlcl90ZXN0cy5jOiB1c2UgaXQKKwkqIGxpYm9wL3Rlc3RzL2xvYWRfZXZlbnRzX2ZpbGVzX3Rlc3RzLmM6IHVzZSBpdAorCisyMDAzLTEwLTAyICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBsaWJvcC9vcF9ldmVudHMuYzogcmV2ZXJ0IGxhc3QgY29tbWl0IChhbGxvd2VkIHRvIGZpbmQgZXZlbnRzIGZpbGVzCisJICBkZXNjcmlwdGlvbiBkaXJlY3RvcnkgaW4gYWx0ZXJuYXRlIGRpcmVjdG9yeSkKKworCSogbGlib3AvdGVzdHMvTWFrZWZpbGUuYW06CisJKiBsaWJvcC90ZXN0cy9sb2FkX2V2ZW50c19maWxlc190ZXN0cy5jOiBuZXcgZmlsZXMuIFZhbGlkYXRlIGV2ZW50cworCSAgZGVzY3JpcHRpb24gZmlsZSBieSBsb2FkaW5nIHRoZW0uCisKKwkqIGxpYnV0aWwvb3BfY3B1ZnJlcS5jOiBjb21tZW50IHdoeSB3ZSBkb24ndCBoYXZlIGFueSBjb2RlIGhhbmRsaW5nCisJICBzMzkwCisKKzIwMDMtMTAtMDEgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGNvbmZpZ3VyZS5pbjoKKwkqIGxpYm9wL01ha2VmaWxlLmFtOiBuZXcgc3ViZGlyCisJKiBsaWJvcC9vcF9ldmVudHMuYzogYWxsb3cgdG8gcmV0cmlldmUgZXZlbnRzIGZpbGUgZGlyIHRocm91Z2gKKwkgIGVudmlyb25tZW50IHZhcmlhYmxlCisJKiB1dGlscy9vcF9oZWxwLmM6IG1vdmUgcGFyc2VfZXZlbnRzKCkgYW5kIHBhcnNlZF9ldmVudCBzdHJ1Y3QgdG8gLi4uCisJKiBsaWJvcC9vcF9wYXJzZV9ldmVudC5oOgorCSogbGlib3Avb3BfcGFyc2VfZXZlbnQuYzogdGhlc2UgbmV3IGZpbGVzCisKKwkqIGxpYm9wL3Rlc3RzL01ha2VmaWxlLmFtOiBuZXcgdGVzdHMgc3ViZGlyCisJKiBsaWJvcC90ZXN0cy9hbGxvY19jb3VudGVyX3Rlc3RzLmM6IGV2ZW50cyBtYXBwaW5nIHRvIGNvdW50ZXIgbnIgdGVzdHMKKwkqIGxpYm9wL3Rlc3RzL3BhcnNlX2V2ZW50X3Rlc3RzLmM6IGV2ZW50IHBhcnNpbmcgdGVzdHMKKworMjAwMy0xMC0wMSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogbGlib3Avb3BfYWxsb2NfY291bnRlci5jOiBhZGQgZm9yd2FyZCBkZWNsYXJhdGlvbgorCSogbGlib3Avb3BfYWxsb2NfY291bnRlci5jOiBhbGxvYyBjb3VudGVyIGluIGluY3JlYXNpbmcgbnVtYmVyIG9yZGVyLAorCSAgaXQncyBsZXNzIHN1cnByaXNpbmcuCisKKzIwMDMtMTAtMDEgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGxpYmRiL3Rlc3RzL2RiX3Rlc3QuYzogaWYgcHJldmlvdXMgdGVzdHMgZmFpbHMgYSBjb3JydXB0ZWQgc2FtcGxlcworCSAgZmlsZSBjYW4gZXhpc3QgaW4gdGVzdCBkaXIgYW5kIHdpbGwgYmUgcmUtdXNlZCwgcmVtb3ZlKCkgaXQuCisKKzIwMDMtMTAtMDEgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogZGFlbW9uL29wZF9zZmlsZS5jOgorCSogbGliYWJpL29wX2ltcG9ydC5jcHA6CisJKiBsaWJvcC9vcF9pbnRlcmZhY2UuaDoKKwkqIGxpYnBwL2xvY2F0ZV9pbWFnZXMuaDogc21hbGwgY2xlYW51cHMKKworCSogcHAvb3ByZXBvcnRfb3B0aW9ucy5jcHA6IGRvbid0IGNvbXBsYWluIGFib3V0CisJIi14IC1tIGFsbCIKKworMjAwMy0wOS0yOCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogbGlidXRpbC9vcF9maWxlLmM6CisJKiBsaWJ1dGlsL3Rlc3RzL2ZpbGVfdGVzdHMuYzogaG9ub3IgcG9zaXggIi8vIiBmaWxlbmFtZSBuYW1lc3BhY2UKKworMjAwMy0wOS0yOCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogbGlib3Avb3BfYWxsb2NfY291bnRlci5oOgorCSogbGlib3Avb3BfYWxsb2NfY291bnRlci5jOiBjaGFuZ2UgYWxsb2NhdG9yIGJ5IGEgYmFja3RyYWNraW5nCisJICBhbGdvcml0aG0gd2Fsa2luZyBvbmx5IHRocm91Z2ggcG9zc2libGUgc29sdXRpb24uCisKKzIwMDMtMDktMjYgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGxpYmRiL3Rlc3RzL2RiX3Rlc3QuYzogc3VjY2VzcyBtdXN0IGJlIHNpbGVudAorCSogZGFlL29wcm9maWxlZC5jOgorCSogZGFlbW9uL29wcm9maWxlZC5jOgorCSogbGlidXRpbC9vcF9kZXZpY2Vpby5jOgorCSogbGlidXRpbC9vcF9kZXZpY2Vpby5oOiBvcF9vcGVuX2RldmljZSgpOiByZW1vdmUgdW51c2VkIHBhcmFtZXRlcgorCSAgZmF0YWwKKworMjAwMy0wOS0yNiAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogbGlidXRpbC90ZXN0cy9maWxlX3Rlc3RzLmM6IEZpeCBzb21lIHRlc3Q6IGluIHNvbWUgY2FzZSB0aGUgcGF0aG5hbWUKKwkgIGNvbXBvbmVudCBtdXN0IGJlIHZhbGlkIHNpbmNlIHdlIGxzdGF0KCkgdGhlbS4gRml4IGEgc2VnZmF1bHQgZHVlCisJICB0byBtaXNzaW5nICcsJyAKKworMjAwMy0wOS0yNiAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBsaWJkYi90ZXN0cy9NYWtlZmlsZS5hbToKKwkqIGxpYnJlZ2V4L3Rlc3RzL01ha2VmaWxlLmFtOgorCSogbGlidXRpbC90ZXN0cy9NYWtlZmlsZS5hbTogZG9uJ3QgYnVpbGQgdGVzdHMKKwl1bmxlc3MgIm1ha2UgY2hlY2siCisKKzIwMDMtMDktMjYgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogbGlidXRpbC9vcF9maWxlLmM6IGRvbid0IHRlc3QgZm9yIE5VTEwgcGF0aAorCXBhc3NlZCBpbiwgd2Ugd2FudCB0byBjcmFzaCBoZXJlIGluc3RlYWQgb2YKKwlpbiB4c3RyZHVwCisKKwkqIGNvbmZpZ3VyZS5pbjoKKwkqIGxpYnV0aWwvTWFrZWZpbGUuYW06CisJKiBsaWJ1dGlsL3Rlc3RzL01ha2VmaWxlLmFtOgorCSogbGlidXRpbC90ZXN0cy9maWxlX3Rlc3RzLmM6CisJKiBsaWJ1dGlsL3Rlc3RzL3N0cmluZ190ZXN0cy5jOiBhZGQgc29tZSB1bml0IHRlc3RzCisJZm9yIGxpYnV0aWwgc3RyaW5nIGFuZCBwYXRoIGhhbmRsaW5nCisKKzIwMDMtMDktMjYgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGxpYmRiL2RiX2RlYnVnLmM6IHJlbW92ZSB1c2VsZXNzIGRpc3BsYXkgaW50ZXJmYWNlCisJKiBsaWJkYi9kYl9kYl90cmF2ZWwuYzogcmVtb3ZlIGNhbGxiYWNrIGludGVyZmFjZQorCSogbGliZGIvb2RiX2hhc2guaDogcmVtb3ZlIGRpc3BsYXkvY2FsbGJhY2sgaW50ZXJmYWNlCisJKiBsaWJkYi9kYl90ZXN0LmNwcDogbW92ZSB0byB0ZXN0cyBzdWJkaXIKKwkqIGxpYmRiL01ha2VmaWxlLmFtOiB1cGRhdGUgYWNjb3JkaW5nCisJKiBsaWJkYi90ZXN0czogbmV3IGRpcgorCSogbGliZGIvdGVzdHMvLmN2c2lnbm9yZToKKwkqIGxpYmRiL3Rlc3RzL01ha2VmaWxlLmFtOiBuZXcgZmlsZXMKKwkqIGxpYmRiL3Rlc3RzL2RiX3Rlc3QuY3BwOiBzaG9ydGVyIHRlc3RzCisKKwkqIGxpYnJlZ2V4L21hbmdsZWQtbmFtZS50eHQ6CisJKiBsaWJyZWdleC9yZWdleF90ZXN0Yy5jcHA6IG1vdmUgdG8gLi4uCisJKiBsaWJyZWdleC90ZXN0czogbmV3IGRpcmVjdG9yeQorCSogbGliZGIvTWFrZWZpbGUuYW06IHVwZGF0ZSBhY2NvcmRpbmcKKwkqIGxpYnJlZ2V4L3Rlc3RzLy5jdnNpZ25vcmU6CisJKiBsaWJyZWdleC90ZXN0cy9NYWtlZmlsZS5hbTogbmV3IGZpbGVzCisKKzIwMDMtMDktMjYgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogbGliYWJpL2FiaV90ZXN0LmNwcDoKKwkqIGxpYmFiaS9vcF9pbXBvcnQuY3BwOiBzbWFsbCBjbGVhbnVwcworCisyMDAzLTA5LTI1ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGRhZW1vbi9vcGRfY29va2llLmM6CisJKiBkYWVtb24vb3BkX2tlcm5lbC5jOgorCSogZGFlbW9uL29wZF9zZmlsZS5jOgorCSogZGFlbW9uL29wZF90cmFucy5jOgorCSogZGFlbW9uL29wcm9maWxlZC5jOiB0cml2aWFsIGNsZWFudXBzCisKKzIwMDMtMDktMjUgIE1hcmMgSGVyYmVydCAgPG1hcmMuaGVyYmVydEBlbnMtbHlvbi5mcj4KKworCSogY29uZmlndXJlLmluOiBmaXggcHJlZml4IHN0dWZmIHRvIGFsbG93IHN0b3cKKwl0byB3b3JrCisKKzIwMDMtMDktMjUgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIHBjaC1jKysuaDogcmVtb3ZlCisJKiBNYWtlZmlsZS5hbTogdXBkYXRlIGFjY29yZGluZworCSogY29uZmlndXJlLmluOiBubyBsb25nZXIgbmVlZCBmb3IgY29uZGl0aW9uYWwgZW5hYmxlX3BjaAorCSogbTQvcHJlY29tcGlsZWRoZWFkZXIubTQ6IGRvbid0IHVzZSAtV2ludmFsaWQtcGNoCisKKzIwMDMtMDktMjUgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGRhZW1vbi9vcGRfc2ZpbGUuYzogc2ZpbGVfbHJ1X2NsZWFyKCkgcmV0dXJuIDAgaWYgbHJ1IGlzIGVtcHR5CisJKiBkYWVtb24vb3BkX21hbmdsaW5nLmM6IGFib3J0KCkgaWYgbHJ1IHdhcyBlbXB0eSAobm90IHRlc3RlZCkKKwkqIGRhZW1vbi9vcHJvZmlsZWQuYzogbGlrZXdpc2U7IG9wZF9hbGFybSgpOiBkb24ndCBzZmlsZV9scnVfY2xlYXIoKQorCisJKiB1dGlscy9vcF9oZWxwLmM6CisJKiBkYWVtb24vb3BkX3NmaWxlLmg6CisJKiBkYWVtb24vb3BkX2Nvb2tpZS5oOiBzLygpLyh2b2lkKS8gaW4gc29tZSBmdW5jdGlvbiBwcm90b3R5cGUgYW5kCisJICBkZWZpbml0aW9uCisKKwkqIGRhZW1vbi9vcGRfY29va2llLmM6IHMvIm5vdCBsb29rZWQgdXAiLyJub3QgaGFzaGVkIi8KKworMjAwMy0wOS0yNSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBkYWVtb24vb3Byb2ZpbGVkLmM6IHB1c2ggcmxpbWl0IGRvd24gYmFjayB0byAyMDQ4LgorCVRoaXMgZ2l2ZXMgYSBydW5uaW5nIFJTUyBvZiBhYm91dCAxME1iIHdoZW4gdGhyZWFkCisJcHJvZmlsaW5nIG9uIG15IGJveCwgd2hpY2ggc2VlbXMgcmVhc29uYWJsZSAoYXQgODE5MgorCWl0IHdhcyBoaXR0aW5nIDQwTWIpCisKKzIwMDMtMDktMjUgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGRvYy9vcHJvZmlsZS54bWw6IGNsYXJpZnkgd2hhdCBtZWFucyBhIGNvbmZpZ3VyZWQga2VybmVsLgorCisyMDAzLTA5LTI1ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGRhZW1vbi9vcGRfc2ZpbGUuYzogYnVtcCBMUlVfQU1PVU5UIHRvIDEwMDAKKworMjAwMy0wOS0yNCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBkb2Mvb3Bjb250cm9sLjEuaW46CisJKiBkb2Mvb3Byb2ZpbGUueG1sOiBkb2N1bWVudCB0aHJlYWQgYW5kIGNwdQorCXByb2ZpbGluZyBhIGJpdAorCisJKiBkYWVtb24vb3BkX21hbmdsaW5nLmM6CisJKiBkYWVtb24vb3BkX3NmaWxlLmM6CisJKiBkYWVtb24vb3Byb2ZpbGVkLmM6CisJKiB1dGlscy9vcGNvbnRyb2w6IGltcGxlbWVudCBwZXItQ1BVIHByb2ZpbGluZywKKwlub3QgdGVzdGVkIHlldAorCisyMDAzLTA5LTI0ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGRhZS9vcGRfcHJvYy5jOgorCSogZGFlL29wZF9zYW1wbGVfZmlsZXMuYzoKKwkqIGRhZW1vbi9vcGRfbWFuZ2xpbmcuYzoKKwkqIGRhZW1vbi9vcGRfc2ZpbGUuYzoKKwkqIGxpYmFiaS9hYmlfdGVzdC5jcHA6CisJKiBsaWJhYmkvb3BfaW1wb3J0LmNwcDoKKwkqIGxpYmRiL2RiX2luc2VydC5jOgorCSogbGliZGIvZGJfbWFuYWdlLmM6CisJKiBsaWJkYi9kYl90ZXN0LmM6CisJKiBsaWJkYi9vZGJfaGFzaC5oOgorCSogbGlicHAvb3BfaGVhZGVyLmNwcDoKKwkqIGxpYnBwL3Byb2ZpbGUuY3BwOiByZW1vdmUgc2FtcGxlc19vZGJfdC5lcnJfbXNnCisJZW50aXJlbHkgLSBwcmVmZXIgVU5JWC1zdHlsZSBlcnJubyByZXR1cm5zLiBNb2RpZnkKKwllcnJvciBtZXNzYWdlcyB0byBtYXRjaAorCisyMDAzLTA5LTI0ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGRhZS9vcGRfc2FtcGxlX2ZpbGVzLmM6CisJKiBkYWVtb24vb3BkX3NhbXBsZV9maWxlcy5jOgorCSogbGlicHAvb3BfaGVhZGVyLmNwcDoKKwkqIGxpYnBwL3Byb2ZpbGUuY3BwOgorCSogbGliYWJpL2FiaV90ZXN0LmNwcDoKKwkqIGxpYmFiaS9vcF9pbXBvcnQuY3BwOgorCSogbGliZGIvZGJfdGVzdC5jOgorCSogbGliZGIvb2RiX2hhc2guaDoKKwkqIGxpYmRiL29kYl9tYW5hZ2UuYzogbWFrZSBvZGJfb3BlbiByZXR1cm4gZXJybm8KKwlpbnN0ZWFkIG9mIEVYSVRfRkFJTFVSRS9TVUNDRVNTIHRvIGFsbG93IEVNRklMRQorCWhhbmRsaW5nLiBBbHNvIGRvIG5vdCBsZWFrIGZkJ3Mgb24gZmFpbHVyZS4KKworCSogbGlidXRpbC9vcF90eXBlcy5oOiBjb29raWVfdCBtb3ZlZCBpbnRvIGRhZW1vbi8KKworCSogZGFlbW9uLzogbWFqb3IgcmV3cml0ZTogbW92ZSB0byBhIGhhc2ggb24gYWxsCisJcGFyYW1ldGVycyBvZiBzdHJ1Y3QgdHJhbnNpZW50LiBMb3RzIG9mIHJlYWRhYmlsaXR5CisJY2xlYW51cHMsIHBsdXMgcmVzaXN0YW5jZSB0byBjb29raWUgbG9va3VwIGZhaWx1cmVzLAorCWFuZCBoaXR0aW5nIG9wZW4gZmlsZSBsaW1pdHMuIEFkZGl0aW9uYWxseSB0aHJlYWQKKwlwcm9maWxpbmcgZm9yIGtlcm5lbCB0aHJlYWRzIGlzIGVuYWJsZWQgbm93LgorCisyMDAzLTA5LTI0ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGRhZW1vbi9vcGRfaW1hZ2UuYzogcmVtb3ZlIHN1cHBvcnQgZm9yIG1pc3NpbmcKKwlDVFhfVEdJRAorCisyMDAzLTA5LTI0ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGRhZW1vbi9vcHJvZmlsZWQuYzogcmVtb3ZlIC9wcm9jL2tjb3JlIHN1cHBvcnQKKworMjAwMy0wOS0yMiAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogZGFlL29wZF9wYXJzZV9wcm9jLmM6IGJvdGggb3BfZmlsZS5oIGFuZCBvcF9maWxlaW8uaCBhcmUgbmVlZGVkCisKKzIwMDMtMDktMjIgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogZG9jL0NvZGluZ1N0eWxlOiBkb2N1bWVudCBkb3h5Z2VuIHBsYWNpbmcgcnVsZQorCisJKiBsaWJvcC9vcF9hbGxvY19jb3VudGVyLmg6CisJKiBsaWJvcC9vcF9nZXRfaW50ZXJmYWNlLmM6CisJKiBsaWJ1dGlsKysvZmlsZV9tYW5pcC5jcHA6CisJKiBsaWJ1dGlsKysvZmlsZV9tYW5pcC5oOgorCSogbGlidXRpbCsrL29wX2JmZC5jcHA6CisJKiBsaWJ1dGlsKysvb3BfYmZkLmg6CisJKiBsaWJ1dGlsL29wX2RldmljZWlvLmM6CisJKiBsaWJ1dGlsL29wX2RldmljZWlvLmg6CisJKiBsaWJ1dGlsL29wX2dldF90aW1lLmM6CisJKiBsaWJ1dGlsL29wX2dldF90aW1lLmg6CisJKiBsaWJ1dGlsL29wX2xpYmliZXJ0eS5jOgorCSogbGlidXRpbC9vcF9saWJpYmVydHkuaDoKKwkqIGxpYnV0aWwvb3BfbG9ja2ZpbGUuYzoKKwkqIGxpYnV0aWwvb3BfbG9ja2ZpbGUuaDoKKwkqIGxpYnV0aWwvb3BfcG9wdC5jOgorCSogbGlidXRpbC9vcF9wb3B0Lmg6IGZvbGxvdyB0aGUgYWJvdmUKKworCSogbGlidXRpbC9vcF9maWxlLmM6CisJKiBsaWJ1dGlsL29wX2ZpbGUuaDoKKwkqIGxpYnV0aWwvb3BfZmlsZWlvLmM6CisJKiBsaWJ1dGlsL29wX2ZpbGVpby5oOgorCSogZGFlL29wZF9wYXJzZV9wcm9jLmM6CisJKiBsaWJ1dGlsKysvc3RyaW5nX21hbmlwLmNwcDogbW92ZSBvcF9nZXRfbGluayB0bworCW9wX2ZpbGUKKworMjAwMy0wOS0yMiAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBsaWJ1dGlsL29wX2ZpbGVpby5oOgorCSogbGlidXRpbC9vcF9maWxlaW8uYzogd2FybiBhYm91dCBvcF9nZXRfbGluaygpCisJcmVzdHJpY3Rpb25zCisKKwkqIGxpYnV0aWwrKy9maWxlX21hbmlwLmg6CisJKiBsaWJ1dGlsKysvZmlsZV9tYW5pcC5jcHA6IHMvb3BfcmVhZF9saW5rL29wX2ZvbGxvd19saW5rLAorCWFuZCBiZWhhdmlvdXIgY2hhbmdlIHRvIG1hdGNoCisKKwkqIGxpYnBwL3Byb2ZpbGVfc3BlYy5jcHA6CisJKiBndWkvb3Byb2Zfc3RhcnRfdXRpbC5jcHA6IHVzZSBvcF9mb2xsb3dfbGluaworCisyMDAzLTA5LTIyICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBkYWUvbWFrZWZpbGUuYW06IG1pc3NpbmcgQU1fQ0ZMQUdTIHNldHRpbmcKKworCSogZGFlL29wcm9maWxlZC5jOgorCSogZGFlbW9uL29wcm9maWxlZC5jOiBoYW5kbGUgc2lnbmFsIGluIHJlYWQgbG9vcAorCSogZGFlbW9uL29wZF91dGlsLmg6CisJKiBkYWVtb24vb3BkX3V0aWwuYzogbW92ZSBvcGRfc2V0dXBfc2lnbmFsKCkgZnJvbSBkYWUvIGRhZW1vbi8KKworMjAwMy0wOS0yMiAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBkYWUvb3Byb2ZpbGVkLmM6CisJKiBkYWVtb24vb3Byb2ZpbGVkLmM6IG1hc2sgU0lHVEVSTSB0b28gdG8gcHJldmVudAorCXRoZSBwb3NzaWJpbGl0eSBvZiBlbXB0eSBzYW1wbGUgZmlsZXMKKworMjAwMy0wOS0yMSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogbGlicHAvZm9ybWF0X291dHB1dC5oOgorCSogbGlicHAvZm9ybWF0X291dHB1dC5jcHA6CisJKiBwcC9vcHJlcG9ydC5jcHA6IGZvcm1hdF9vdXRwdXQ6OnNob3dfaGVhZGVyIG5vIGhpZGVfaGVhZGVyCisKKzIwMDMtMDktMjEgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGRvYy9vcHJlcG9ydC4xLmluOgorCSogZG9jL29wcm9maWxlLnhtbDoKKwkqIGxpYnBwL2Zvcm1hdF9vdXRwdXQuaDoKKwkqIGxpYnBwL2Zvcm1hdF9vdXRwdXQuY3BwOgorCSogcHAvb3ByZXBvcnQuY3BwOiAtLWdsb2JhbF9wZXJjZW50IG11c3QgYmUgZWZmZWN0aXZlIGZvciBkZXRhaWxlZAorCSAgb3V0cHV0IHRvbworCisyMDAzLTA5LTIxICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIHBwL29wcmVwb3J0X29wdGlvbnMuY3BwOiBwcmV2ZW50IC0tZ2xvYmFsLXBlcmNlbnQKKwl3aGVuIGFwcHJvcHJpYXRlCisKKzIwMDMtMDktMjEgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogTWFrZWZpbGUuYW06IGJhY2sgb3V0IGJyb2tlbiBtYWtlIGNsZWFuIGNoYW5nZQorCisyMDAzLTA5LTIxICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIE1ha2VmaWxlLmFtOiBtYWtlIGNsZWFuIG5vdyByZW1vdmVzICouaHRtbAorCisJKiBpbnRlcm5hbHMueG1sOiBhZGQgc29tZSBvdXRsaW5lIHNlY3Rpb25zCisKKzIwMDMtMDktMjEgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogZG9jL2ludGVybmFscy54bWw6IHByb3ZpZGUgYSBzaG9ydCBvdmVydmlldworCWFuZCBzdGFydCBhIGdsb3NzYXJ5CisKKwkqIGxpYnBwL2NvdW50X2FycmF5Lmg6CisJKiBsaWJwcC9mb3JtYXRfb3V0cHV0LmNwcDoKKwkqIGxpYnBwL2Zvcm1hdF9vdXRwdXQuaDoKKwkqIGxpYnBwL3Byb2ZpbGUuY3BwOgorCSogbGlicHAvcHJvZmlsZS5oOgorCSogbGlicHAvcHJvZmlsZV9jb250YWluZXIuY3BwOgorCSogbGlicHAvcHJvZmlsZV9jb250YWluZXIuaDoKKwkqIHBwL29wcmVwb3J0LmNwcDogcmVwbGFjZSByZXNpZHVhbCByZWZlcmVuY2VzIHRvCisJY291bnQgZ3JvdXBzIHdpdGggcHJvZmlsZSBjbGFzcyBjb25jZXB0CisKKzIwMDMtMDktMjEgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogZG9jL01ha2VmaWxlLmFtOgorCSogZG9jL2ludGVybmFscy54bWw6IHN0YXJ0IGFuIGludGVybmFscyBtYW51YWwgLi4uCisKKzIwMDMtMDktMTkgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogcHAvaW1hZ2VfZXJyb3JzLmNwcDogbWlzc2luZyBpbmNsdWRlCisKKzIwMDMtMDktMTkgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogbGlib3B0KysvcG9wdF9vcHRpb25zLmg6CisJKiBsaWJvcHQrKy9wb3B0X29wdGlvbnMuY3BwOiByZW1vdmUgYWRkaXRpb25hbF9oZWxwCisJc3R1ZmYsIHVudXNlZCBmb3Igc29tZSB0aW1lCisKKzIwMDMtMDktMTggIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogbGlidXRpbCsrL01ha2VmaWxlLmFtOgorCSogbGlidXRpbCsrL2ltYWdlX2ZsYWdzLmg6IG1vdmUgdG8gLi4uCisKKwkqIGxpYnBwL01ha2VmaWxlLmFtOgorCSogbGlicHAvaW1hZ2VfZXJyb3IuaDogLi4uIGhlcmUsIGFuZCByZW5hbWUKKworCSogbGlidXRpbCsrL29wX2JmZC5oOgorCSogbGlidXRpbCsrL29wX2JmZC5jcHA6IHRha2UgYW4gaW4tb3V0IGJvb2wKKwlpbnN0ZWFkIG9mIGltYWdlX2ZsYWdzCisKKwkqIGxpYnBwL2FycmFuZ2VfcHJvZmlsZXMuY3BwOgorCSogbGlicHAvYXJyYW5nZV9wcm9maWxlcy5oOgorCSogbGlicHAvbG9jYXRlX2ltYWdlcy5jcHA6CisJKiBsaWJwcC9sb2NhdGVfaW1hZ2VzLmg6CisJKiBsaWJwcC9wcm9maWxlX3NwZWMuY3BwOgorCSogcHAvaW1hZ2VfZXJyb3JzLmNwcDoKKwkqIHBwL29wZ3Byb2YuY3BwOgorCSogcHAvcG9wdWxhdGUuY3BwOiBjaGFuZ2VzIGZyb20gYWJvdmUKKworMjAwMy0wOS0xOCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBsaWJ1dGlsKysvTWFrZWZpbGUuYW06CisJKiBsaWJ1dGlsKysvaW1hZ2VfZmxhZ3MuaDogZmxhZ3MgZm9yIGltYWdlIHJlYWQgZmFpbHVyZQorCisJKiBsaWJwcC9wcm9maWxlX3NwZWMuY3BwOgorCSogbGlicHAvbG9jYXRlX2ltYWdlcy5oOgorCSogbGlicHAvbG9jYXRlX2ltYWdlcy5jcHA6CisJKiBsaWJwcC9hcnJhbmdlX3Byb2ZpbGVzLmg6CisJKiBsaWJwcC9hcnJhbmdlX3Byb2ZpbGVzLmNwcDogdXNlIGltYWdlX2ZsYWdzCisKKwkqIGxpYnV0aWwrKy9vcF9iZmQuaDoKKwkqIGxpYnV0aWwrKy9vcF9iZmQuY3BwOiB1c2UgaW1hZ2VfZmxhZ3MsIG5vIGxvbmdlciBlcnJvcgorCW91dCBvbiBmb3JtYXQgZmFpbHVyZQorCisJKiBwcC9NYWtlZmlsZS5hbToKKwkqIHBwL2ltYWdlX2Vycm9ycy5jcHA6CisJKiBwcC9pbWFnZV9lcnJvcnMuaDogZXJyb3JzIHByZXZpb3VzbHkgcmVwb3J0ZWQgaW4gbG9jYXRlX2ltYWdlcworCWFyZSBub3cgcmVwb3J0ZWQgaGVyZSBieSB0aGUgY2xpZW50CisKKwkqIHBwL29wYW5ub3RhdGUuY3BwOgorCSogcHAvb3BncHJvZi5jcHA6CisJKiBwcC9vcGdwcm9mX29wdGlvbnMuY3BwOgorCSogcHAvb3ByZXBvcnQuY3BwOgorCSogcHAvcG9wdWxhdGUuaDoKKwkqIHBwL3BvcHVsYXRlLmNwcDogdXNlIHRoZSBhYm92ZQorCisyMDAzLTA5LTE4ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBsaWJwcC9mb3JtYXRfb3V0cHV0LmNwcDogdXNlIDkgbm90IDEyIGZvciAlIGZpZWxkIHdpZHRoCisJKiBsaWJ1dGlsKysvc3RyaW5nX21hbmlwLmNwcDogc2hyaW5rIDEwMC4wMDAwIHRvIDEwMC4wMDAKKwkqIHBwL29wcmVwb3J0LmNwcDogcy8iICIvJyAnCisKKzIwMDMtMDktMTggIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogcHAvb3Bhbm5vdGF0ZV9vcHRpb25zLmNwcDoKKwkqIHBwL29wcmVwb3J0X29wdGlvbnMuY3BwOiBjbGVhbiB1cCBlcnJvciBtZXNzYWdlcworCisJKiBwcC9vcGdwcm9mX29wdGlvbnMuaDoKKwkqIHBwL29wZ3Byb2Zfb3B0aW9ucy5jcHA6CisJKiBwcC9vcGdwcm9mLmNwcDogdXNlIGludmVydGVkX3Byb2ZpbGUgQVBJCisKKzIwMDMtMDktMTggIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIHV0aWxzL29wY29udHJvbDogb3ZlcndyaXRlIGFsbCBjdXJyZW50IHNldHRpbmdzIHdpdGggLS1zZXBhcmF0ZSwKKwkgIHRoaXMgY2hhbmdlIGJlaGF2aW9yIG9mIC0tc2VwYXJhdGU9a2VybmVsLGxpYnJhcnkgbm93IHdlIHJlYWxseSBzZXR1cAorCSAgYm90aCBpbiB0aGlzIGNhc2UuCisKKzIwMDMtMDktMTggIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogbGlicHAvbG9jYXRlX2ltYWdlcy5jcHA6IHJld3JpdGUgYSBsaXR0bGUKKworCSogbGlidXRpbCsrL29wX2JmZC5jcHA6IHNldCBmc2l6ZSB0byBkZWZhdWx0IHRvIC0xLAorCWZvciBmYWtlIGFydGlmaWNpYWwgc3ltYm9sCisKKzIwMDMtMDktMTggIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGxpYnBwL2xvY2F0ZV9pbWFnZXMuaDoKKwkqIGxpYnBwL2xvY2F0ZV9pbWFnZXMuY3BwOiBmaW5kX21vZHVsZV9wYXRoKCkgZXh0cmEgYm9vbCBwYXJhbWV0ZXIKKwkgIHRvIGtub3cgaWYgd2UgZmFpbCB0byByZXRyaWV2ZSB0aGUgaW1hZ2UuCisJKiBsaWJwcC9hcnJhbmdlX3Byb2ZpbGVzLmg6CisJKiBsaWJwcC9hcnJhbmdlX3Byb2ZpbGVzLmNwcDogdXNlIGl0IGFuZCBzYXZlIHRoaXMgYm9vbCBpbgorCSAgaW52ZXJ0ZWRfcHJvZmlsZSBzdHJ1Y3QKKwkqIGxpYnBwL3Byb2ZpbGVfc3BlYy5jcHA6IHVwZGF0ZSBjYWxsZXIgYWNjb3JkaW5nCisKKwkqIGxpYnV0aWwrKy9vcF9iZmQuaDoKKwkqIGxpYnV0aWwrKy9vcF9iZmQuY3BwOiB1c2UgdGhlIGFib3ZlIGNoYW5nZSB0byBjcmVhdGUgZmFrZSBvcF9iZmQKKworCSogcHAvb3BncHJvZl9vcHRpb25zLmNwcDoKKwkqIHBwL29wZ3Byb2YuY3BwOiB1cGRhdGUgY2FsbGVyIGJ1dCBuZXZlciBhbGxvdyBmYWtlIG9wX2JmZAorCisJKiBwcC9wb3B1bGF0ZS5jcHA6IGFsbG93IHRvIGNyZWF0ZSBmYWtlIG9wX2JmZAorCQorCisyMDAzLTA5LTE4ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGRhZS9vcGRfaW1hZ2UuYzoKKwkqIGRhZS9vcGRfcHJvYy5jOgorCSogZGFlL29wZF9zYW1wbGVfZmlsZXMuYzoKKwkqIGRhZS9vcHJvZmlsZWQuYzoKKwkqIGRhZW1vbi9vcGRfaW1hZ2UuYzoKKwkqIGRhZW1vbi9vcGRfaW1hZ2UuaDoKKwkqIGRhZW1vbi9vcGRfa2VybmVsLmM6CisJKiBkYWVtb24vb3BkX3NhbXBsZV9maWxlcy5jOgorCSogZGFlbW9uL29wcm9maWxlZC5jOgorCSogZ3VpL29wcm9mX3N0YXJ0LmNwcDoKKwkqIGd1aS9vcHJvZl9zdGFydF9jb25maWcuY3BwOgorCSogZ3VpL29wcm9mX3N0YXJ0X2NvbmZpZy5oOgorCSogZ3VpL3VpL29wcm9mX3N0YXJ0LmJhc2UudWk6CisJKiBsaWJhYmkvYWJpLmNwcDoKKwkqIGxpYmFiaS9hYmlfdGVzdC5jcHA6CisJKiBsaWJhYmkvb3BfaW1wb3J0LmNwcDoKKwkqIGxpYm9wL29wX3NhbXBsZV9maWxlLmg6CisJKiBsaWJwcC9vcF9oZWFkZXIuY3BwOgorCSogdXRpbHMvb3Bjb250cm9sOiByZW5hbWluZ3Mgb2Ygc2VwYXJhdGUgc3R1ZmYKKworMjAwMy0wOS0xNyAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogZGFlL29wZF9rZXJuZWwuYzogdGhpbmtvIGluIG9wZF9nZXRfbW9kdWxlX2luZm8oKTogd2UgbXVzdCB0YWtlCisJICBjYXJlIHRvIHJlLXVzZSBhIHByZXZpb3VzbHkgY3JlYXRlZCBtb2R1bGUgbm90IHRvIGNyZWF0ZSBhIG5ldworCisyMDAzLTA5LTE3ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGRhZW1vbi9vcGRfa2VybmVsLmM6IGxvZ2dpbmcgaW1wcm92ZW1lbnRzCisKKzIwMDMtMDktMTcgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGRhZS9vcGRfa2VybmVsLmM6CisJKiBkYWVtb24vb3BkX2tlcm5lbC5jOiBmaXggdXNlIGFmdGVyIGZyZWUgb2YgbW9kdWxlCisKKzIwMDMtMDktMTcgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogZGFlbW9uL29wZF9pbWFnZS5jOiBmaXggdGhyZWFkIHByb2ZpbGluZyB3aGVuCisJLS1zZXBhcmF0ZS1saWJyYXJ5PTAKKworMjAwMy0wOS0xNyAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogZGFlL29wZF9rZXJuZWwuYzogYWRkIG1vZHVsZSB0byBsaXN0IG9mIG1vZHVsZSAuLi4KKwkqIGRhZW1vbi9vcGRfa2VybmVsLmM6IHMvcHJpbnQvdmVyYnByaW50ZgorCisyMDAzLTA5LTE3ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBsaWJvcC9vcF9jb25maWcuaDogcmVtb3ZlIE9QRF9NQVhfTU9EVUxFcworCSogZGFlL29wZF9rZXJuZWwuYzoKKwkqIGRhZW1vbi9vcGRfa2VybmVsLmM6IHJlbW92ZSBmaXhlZCBhcnJheSBvZiBtb2R1bGVzIHJlcGxhY2VkIGJ5CisJICBhIGxpc3QuIFVuaWZ5IHRoZSB3YXkgd2UgY3JlYXRlIG9wZF9tb2R1bGUKKwkqIHV0aWxzL29wY29udHJvbDogZG9uJ3QgdXNlIC0tdGhyZWFkLXByb2ZpbGluZyBmb3IgMi40CisKKzIwMDMtMDktMTcgS2EgRmFpIEx1ICA8a2FmYWkwOTI4QHlhaG9vLmNvbT4KKworCUkgYWRhcHRlZCBzbGlnaHRseSB0aGlzIHBhdGNoIFBoaWwuCisJKiBkYWVtb24vb3BkX2ltYWdlLmM6CisJKiBkYWVtb24vb3BkX2ltYWdlLmg6CisJKiBkYWVtb24vb3BkX2tlcm5lbC5jOgorCSogZGFlbW9uL29wZF9zYW1wbGVfZmlsZXMuYzoKKwkqIGRhZW1vbi9vcHJvZmlsZWQuYzoKKwkqIHV0aWxzL29wY29udHJvbDogaW1wbGVtZW50IHBlciB0aHJlYWQgcHJvZmlsaW5nCisKKzIwMDMtMDktMTYgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGxpYm9wdCsrL3BvcHRfb3B0aW9ucy5oOgorCSogbGlicHAvbG9jYXRlX2ltYWdlcy5jcHA6IG1pbm9yIHRpZHkKKworMjAwMy0wOS0xNiAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiB1dGlscy9vcGNvbnRyb2w6IGRvbid0IHBhc3MgcGlkL3BncnAgZmlsdGVyCisJdG8gMi42IGRhZW1vbgorCisJKiBkYWUvb3Byb2ZpbGVkLmM6CisJKiBkYWVtb24vb3Byb2ZpbGVkLmM6IHNldHJsaW1pdCB0byA4MTkyIChsYW1lCisJd29ya2Fyb3VuZCBmb3Igbm93KSwgbWlub3IgY2xlYW51cHMKKworMjAwMy0wOS0xNSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBjb21tb25fb3B0aW9uLmNwcDogcmVuYW1lIHRoZSBhcnJheSB0bworCWF2b2lkIGEgbGluayBlcnJvciBpbiBHQ0MgMy40CisKKzIwMDMtMDktMTUgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogbGlib3AvTWFrZWZpbGUuYW06CisJKiBsaWJvcC9vcF9pbnRlcmZhY2VfMjUuaDogbW92ZSB0byAuLi4KKworCSogZGFlbW9uL01ha2VmaWxlLmFtOgorCSogZGFlbW9uL29wZF9pbnRlcmZhY2UuaDogLi4uIGhlcmUKKworCSogZGFlbW9uL29wZF9pbWFnZS5jOgorCSogZGFlbW9uL29wcm9maWxlZC5jOiB1c2UgYWJvdmUuIFJlbW92ZSBwb2ludGxlc3MKKwljb21tYW5kIGxpbmUgb3B0aW9ucy4KKworCSogbGlib3Avb3BfY29uZmlnXzI1Lmg6IHJlbW92ZS4KKworCSogbGlib3Avb3BfaHdfY29uZmlnLmg6IG1vdmUgRENPT0tJRV9TSElGVCB0bworCW9wZF9pbnRlcmZhY2UuaAorCisyMDAzLTA5LTE1ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGNvbmZpZ3VyZS5pbjogdXNlIC1XZGVjbGFyYXRpb24tYWZ0ZXItc3RhdGVtZW50CisJaWYgYXZhaWxhYmxlCisKKwkqIFJFQURNRToKKwkqIGRhZW1vbi9vcGRfdXRpbC5jOgorCSogZGFlbW9uL29wZF91dGlsLmg6CisJKiBkb2Mvb3Bhbm5vdGF0ZS4xLmluOgorCSogZG9jL29wZ3Byb2YuMS5pbjoKKwkqIGRvYy9vcHJlcG9ydC4xLmluOgorCSogZG9jL29wcm9maWxlLjEuaW46CisJKiBkb2Mvb3Byb2ZpbGUueG1sOgorCSogZ3VpL29wcm9mX3N0YXJ0LmNwcDoKKwkqIGd1aS9vcHJvZl9zdGFydF91dGlsLmNwcDoKKwkqIGxpYm9wL29wX2NwdV90eXBlLmM6CisJKiBsaWJvcC9vcF9jcHVfdHlwZS5oOgorCSogbGlib3Avb3BfZ2V0X2ludGVyZmFjZS5jOgorCSogbGlicHAvbG9jYXRlX2ltYWdlcy5jcHA6IHJlbW92ZSByZWZlcmVuY2VzIHRvCisJMi41LCByZXBsYWNlZCB3aXRoIDIuNgorCisyMDAzLTA5LTE1ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGRvYy9vcHJlcG9ydC4xLmluOiBkb2N1bWVudCAtLXNob3ctYWRkcmVzcworCisyMDAzLTA5LTE1ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGxpYnBwL2FycmFuZ2VfcHJvZmlsZXMuY3BwOgorCSogbGlicHAvYXJyYW5nZV9wcm9maWxlcy5oOgorCSogcHAvcG9wdWxhdGUuY3BwOiBtb3JlIGNvbW1lbnRhcnkKKworMjAwMy0wOS0xNCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogcHAvb3ByZXBvcnQuY3BwOiBoYW5kbGUgMi45NSByaWdodCBpbyBtYW5pcHVsYXRvciBhbmQgdGhlIGxhY2sKKwkgIG9mIGEgcHJvcGVyIHNldHcodykgPDwgc3RkOjpzdHJpbmcKKworMjAwMy0wOS0xNCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBwcC9vcHJlcG9ydC5jcHA6IHJlLWFkZCBoZWFkZXIgZm9yIGltYWdlIHN1bW1hcnkKKworMjAwMy0wOS0xNCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBsaWJwcC9hcnJhbmdlX3Byb2ZpbGVzLmNwcDogdGhyb3cgYW4gZXhjZXB0aW9uCisJaWYgdGhlcmUgYXJlIHR3byBtYW55IHVubWVyZ2VkIHByb2ZpbGVzLCB3aXRoIGRldGFpbHMKKwlvZiBob3cgdG8gZml4IGl0CisKKwkqIHBwL29wZ3Byb2Zfb3B0aW9ucy5jcHA6CisJKiBwcC9jb21tb25fb3B0aW9uLmNwcDogY2xlYW4gdXAgZXJyb3IgbWVzc2FnZXMKKworMjAwMy0wOS0xNCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBsaWJwcC9hcnJhbmdlX3Byb2ZpbGVzLmg6CisJKiBsaWJwcC9hcnJhbmdlX3Byb2ZpbGVzLmNwcDogYWRkIGxvY2F0aW9uIG9mIAorCWltYWdlcyB3aGVuIGludmVydGluZyBwcm9maWxlcworCisJKiBsaWJwcC9sb2NhdGVfaW1hZ2VzLmNwcDogcmV0dXJuIGVtcHR5IHN0cmluZworCWlmIGZpbGUgaXNuJ3QgcmVhZGFibGUKKworCSogcHAvb3Bhbm5vdGF0ZS5jcHA6IHVzZSB0aGUgYWJvdmUKKworCSogcHAvb3ByZXBvcnQuY3BwOiB1c2UgdGhlIGFib3ZlOyBwbGFjZSB3YXJuaW5ncworCWJlZm9yZSBhbnkgb3RoZXIgb3V0cHV0CisKKzIwMDMtMDktMTQgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogcHAvb3BncHJvZl9vcHRpb25zLmNwcDogdXNlIGxvY2F0ZV9pbWFnZV9wYXRoCisKKzIwMDMtMDktMTQgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogTWFrZWZpbGUuYW06CisJKiBwb3B1bGF0ZS5oOgorCSogcG9wdWxhdGUuY3BwOiBzaGFyZWQgY29kZSBmb3IgcG9wdWxhdGluZyBmcm9tCisJaW52ZXJ0ZWQgcHJvZmlsZXMKKworCSogb3ByZXBvcnQuY3BwOgorCSogb3Bhbm5vdGF0ZS5jcHA6IHVzZSBhYm92ZQorCisyMDAzLTA5LTE0ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGxpYnBwL2FycmFuZ2VfcHJvZmlsZXMuaDoKKwkqIGxpYnBwL2FycmFuZ2VfcHJvZmlsZXMuY3BwOiBhZGQgaW52ZXJ0X3Byb2ZpbGVzCisKKwkqIHBwL29wcmVwb3J0LmNwcDogdXNlIGl0CisKKzIwMDMtMDktMTQgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogZG9jL29wcm9maWxlLnhtbDoKKwkqIHBwL29wcmVwb3J0LmNwcDoKKwkqIHBwL29wcmVwb3J0X29wdGlvbnMuY3BwOgorCSogcHAvb3ByZXBvcnRfb3B0aW9ucy5oOiBUdXJuIG9mZiBWTUEgcmVwb3J0IGJ5CisJZGVmYXVsdCwgYWRkIC0tc2hvdy1hZGRyZXNzCisKKzIwMDMtMDktMTQgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogcHAvb3ByZXBvcnQuY3BwOiBuaWNlIGZvcm1hdHRpbmcgb2YgaW1hZ2UgcmVwb3J0CisJY29sdW1uIGhlYWRlcnMsIHJlc3BlY3QgLS1uby1oZWFkZXIKKworMjAwMy0wOS0xNCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogbGlicHAvYXJyYW5nZV9wcm9maWxlcy5jcHA6IHVzZSBzdHJpbmc6OmVyYXNlKCkgbm90IHN0cmluZzo6Y2xlYXIoKQorCSAgZm9yIDIuOTUKKworCSogbGlidXRpbCsrL2dlbmVyaWNfc3BlYy5oOiBhbGxvdyB0byBpZ25vcmUgImFsbCIgbWF0Y2gKKwkqIGxpYnV0aWwrKy9jb21tYV9saXN0Lmg6IHVzZSBpdAorCisyMDAzLTA5LTE0ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIHBwL29wcmVwb3J0LmNwcDogb3V0cHV0IGNvbHVtbiBoZWFkZXJzIGZvcgorCWltYWdlIHJlcG9ydAorCisyMDAzLTA5LTE0ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGxpYnBwL29wX2hlYWRlci5oOgorCSogbGlicHAvb3BfaGVhZGVyLmNwcDogb3V0cHV0IGhlYWRlciBpbmZvIHRvCisJYSBzdHJpbmcgbm90IGEgc3RyZWFtCisKKwkqIGxpYnBwL2FycmFuZ2VfcHJvZmlsZXMuaDoKKwkqIGxpYnBwL2FycmFuZ2VfcHJvZmlsZXMuY3BwOiBnaXZlIGNsYXNzZXMgYSBsb25nCisJbmFtZSwgYW5kIGZpbGwgaW4gZ2xvYmFsIGV2ZW50L2NwdSBpbmZvCisKKwkqIHBwL29wYW5ub3RhdGUuY3BwOgorCSogcHAvb3Bhbm5vdGF0ZV9vcHRpb25zLmNwcDoKKwkqIHBwL29wYW5ub3RhdGVfb3B0aW9ucy5oOgorCSogcHAvb3BncHJvZl9vcHRpb25zLmNwcDoKKwkqIHBwL29wcmVwb3J0LmNwcDoKKwkqIHBwL29wcmVwb3J0X29wdGlvbnMuY3BwOgorCSogcHAvb3ByZXBvcnRfb3B0aW9ucy5oOiB1c2UgdGhlIGNsYXNzIGxvbmcgbmFtZXMKKwlhbmQgaW5mbworCisyMDAzLTA5LTE0ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBsaWJwcC9wcm9maWxlX3NwZWMuY3BwOiBoYW5kbGUgc3ltbGluaworCisyMDAzLTA5LTE0ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGFycmFuZ2VfcHJvZmlsZXMuaDoKKwkqIGFycmFuZ2VfcHJvZmlsZXMuY3BwOiBBZGQgY29kZSB0byBnaXZlIHNob3J0IG5hbWVzCisJdG8gZWFjaCBjbGFzcywgdW51c2VkIHlldAorCisyMDAzLTA5LTE0ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBsaWJwcC9hcnJhbmdlX3Byb2ZpbGVzLmNwcDogbWlzc2luZyBpbmNsdWRlPD4gd2l0aCBnY2MgMi45NQorCisyMDAzLTA5LTE0ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGxpYnBwL01ha2VmaWxlLmFtOgorCSogbGlicHAvc3BsaXRfc2FtcGxlX2ZpbGVuYW1lLmNwcDoKKwkqIGxpYnBwL3NwbGl0X3NhbXBsZV9maWxlbmFtZS5oOiByZW5hbWUgYXMgLi4uCisKKwkqIGxpYnBwL3BhcnNlX2ZpbGVuYW1lLmNwcDoKKwkqIGxpYnBwL3BhcnNlX2ZpbGVuYW1lLmg6IC4uLiB0aGlzCisKKwkqIGxpYnBwL2ZpbGVuYW1lX3NwZWMuY3BwOgorCSogbGlicHAvYXJyYW5nZV9wcm9maWxlcy5jcHA6CisJKiBsaWJwcC9hcnJhbmdlX3Byb2ZpbGVzLmg6IHNvcnQgY2xhc3NlcyBmb3IgbmljZW5lc3MsCisJY2hhbmdlcyBmcm9tIGFib3ZlCisKKwkqIHBwL29wcmVwb3J0LmNwcDogcmVtb3ZlIG5lZWRsZXNzIGRvdWJsZSBjaGVjayBvZgorCWV4Y2x1ZGVfZGVwZW5kZW50CisKKwkqIGxpYnV0aWwrKy9zdHJpbmdfbWFuaXAuY3BwOiB0b3VpbnQgc2hvdWxkIGluaXQgdG8gMAorCWluIGNhc2Ugb2YgcGFyc2UgZmFpbHVyZQorCisyMDAzLTA5LTE0ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBjb25maWd1cmUuaW46IGZpeCBtYXhpbXVtIHRlbXBsYXRlIGRlcHRoIHRvIDUwCisJKiBsaWJ1dGlsL29wX2ZpbGVpby5jOiBvcF9nZXRfbGluaygpIGRvbid0IHRydW5jYXRlIHNpbGVudGx5IHJlc3VsdHMKKwkqIG00L3NzdHJlYW0ubTQ6IHVzZSBPUF9DWFhGTEFHUyBub3QgQ1hYRkxBR1MKKworMjAwMy0wOS0xNCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBwcC9wYXJ0aXRpb25fZmlsZXMuaDoKKwkqIHBwL3BhcnRpdGlvbl9maWxlcy5jcHA6IHJlbW92ZSwgbm93IHVudXNlZAorCisyMDAzLTA5LTE0ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIHBwL29wYW5ub3RhdGUuY3BwOgorCSogcHAvb3Bhbm5vdGF0ZV9vcHRpb25zLmNwcDoKKwkqIHBwL29wYW5ub3RhdGVfb3B0aW9ucy5oOiB1c2UgYXJyYW5nZV9wcm9maWxlcyBBUEkKKworMjAwMy0wOS0xNCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBwcC9vcGdwcm9mX29wdGlvbnMuaDoKKwkqIHBwL29wZ3Byb2Zfb3B0aW9ucy5jcHA6CisJKiBwcC9vcGdwcm9mLmNwcDogdXNlIGFycmFuZ2VfcHJvZmlsZXMgQVBJCisKKzIwMDMtMDktMTQgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogbGlicHAvTWFrZWZpbGUuYW06CisJKiBsaWJwcC9hcnJhbmdlX3Byb2ZpbGVzLmNwcDoKKwkqIGxpYnBwL2FycmFuZ2VfcHJvZmlsZXMuaDogaW50cm9kdWNlIG5ldworCWNvZGUgZm9yIHBhcnRpdGlvbmluZyBwcm9maWxlcyBhbmQgaGFuZGxpbmcKKwltZXJnaW5nCisKKwkqIGxpYnBwL3BhcnRpdGlvbl9maWxlcy5oOgorCSogcHAvb3ByZXBvcnRfb3B0aW9ucy5jcHA6CisJKiBwcC9vcHJlcG9ydF9vcHRpb25zLmg6CisJKiBwcC9vcHJlcG9ydC5jcHA6IHVzZSB0aGUgYWJvdmUgY29kZQorCisJKiBsaWJwcC9mb3JtYXRfZmxhZ3MuaDoKKwkqIGxpYnBwL3Byb2ZpbGVfY29udGFpbmVyLmNwcDogcmVtb3ZlIHVubmVlZGVkCisJbXVsdGlwbGUgYXBwcyBoaW50CisKKwkqIGxpYnBwL2NvdW50X2FycmF5LmNwcDoKKwkqIGxpYnBwL2NvdW50X2FycmF5Lmg6IHJlbW92ZSB1bm5lY2Vzc2FyeSBjb2RlCisKKzIwMDMtMDktMTQgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogY29uZmlndXJlLmluOiBiYWNrIHRvIDAuN2N2cworCisyMDAzLTA5LTE0ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIHBwL29wYW5ub3RhdGUuY3BwOiBnY2MgMi45MSB3b3JrYXJvdW5kCisJKGluIDAuNi4xIHJlbGVhc2UpCisKKzIwMDMtMDktMTQgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogY29uZmlndXJlLmluOiBidW1wIHRvIDAuNi4xCisKKzIwMDMtMDktMTMgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogZG9jL29wcm9maWxlLnhtbDogZG9jdW1lbnQgImluY29ycmVjdCBzb3VyY2UgYXR0cmlidXRpb24iCisJYSBiaXQKKworMjAwMy0wOS0xMiAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogbGlicHAvb3BfaGVhZGVyLmNwcDogdHlwbyBpbiBjb21tZW50CisKKzIwMDMtMDktMTEgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogY29uZmlndXJlLmluOiBjaGVjayBmb3IgLWxpbnRsLCB0d2VhayAtbGRsIGNoZWNrCisKKzIwMDMtMDktMTEgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogZGFlL29wcm9maWxlZC5jOgorCSogZGFlbW9uL29wcm9maWxlZC5jOgorCSogbGliZGIvZGJfbWFuYWdlLmM6CisJKiBsaWJkYi9kYl90ZXN0LmM6IGNvcnJlY3QgaGVhZGVycworCisyMDAzLTA5LTExICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIG9wX2xvY2tmaWxlLmM6IHVzZSBjb3JyZWN0IGhlYWRlcnMKKworMjAwMy0wOS0wNyAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogdXRpbHMvb3BfaGVscC5jOiBjaGVjayB0aGFuIGFsbCBldmVudHMgYXJlIGRpc3RpbmN0cworCisyMDAzLTA5LTA2ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBwY2gtYysrLmg6CisJKiBtNC9wcmVjb21waWxlZGhlYWRlci5tNDogbmV3IGZpbGUgdG8gaGFuZGxlIHByZWNvbXBpbGVkIGhlYWRlcgorCSogbTQvTWFrZWZpbGUuYW06CisJKiBjb25maWd1cmUuaW46CisJKiBNYWtlZmlsZS5hbTogaGFuZGxlIHByZWNvbXBpbGVkIGhlYWRlcgorCisyMDAzLTA5LTA1ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIG9wZF9pbWFnZS5jOiBjbGVhbnVwIG9mIGN0eF9zd2l0Y2hfc2V0X2ltYWdlKCkKKworMjAwMy0wOS0wNSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogZGFlbW9uL29wZF9pbWFnZS5jOiBBZnRlciBhIGNvbnRleHQgc3dpdGNoIGVuc3VyZSB3ZSB1cGRhdGUgY29ycmVjdGx5CisJICB0aGUgY3VycmVudCBpbWFnZS4KKworMjAwMy0wOS0wNCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogcHAvb3ByZXBvcnQuY3BwOgorCSogcHAvb3Bhbm5vdGF0ZS5jcHA6IGNhdGNoIG9wX2JmZCBleGNlcHRpb24gYW5kIHJlY292ZXIgZ3JhY2VmdWxseQorCisyMDAzLTA5LTA0ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiB1dGlscy9vcGNvbnRyb2w6IHR3ZWFrICJzaWduYWxpbmcgZGFlbW9uICIgbWVzc2FnZSBhcyBzdWdnZXN0ZWQKKwkgIGJ5IENhcmxvIFdvb2QKKworMjAwMy0wOS0wNCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBkb2Mvb3Byb2ZpbGUueG1sOiBtZW50aW9uIC0tcmVzZXQgaW4KKwkiR2V0dGluZyBTdGFydGVkIgorCisyMDAzLTA5LTAzICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGxpYm9wL29wX2V2ZW50cy5jOgorCSogbGlicHAvb3BfaGVhZGVyLmNwcDoKKwkqIGRhZS9vcGRfc2FtcGxlX2ZpbGVzLmM6CisJKiBkYWVtb24vb3BkX3NhbXBsZV9maWxlcy5jOiBwcm9wYWdhdGUgZXZlbnQKKwllcnJvciBiYWNrIHVwIHRvIGNhbGxlcgorCisJKiBsaWJkYi9vZGJfaGFzaC5oOiBmaXggY29tbWVudAorCisyMDAzLTA5LTAyICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGRhZS9vcGRfaW1hZ2UuYzoKKwkqIGRhZS9vcGRfcHJvYy5jOgorCSogZGFlL29wcm9maWxlZC5jOgorCSogZGFlbW9uL29wZF9pbWFnZS5jOiB1c2UgYWJvcnQoKSBub3QgZXhpdCgpCisJb24gImNhbid0IGhhcHBlbiIgZXJyb3JzCisKKzIwMDMtMDktMDIgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogZGFlL29wZF9wcm9jLmM6CisJKiBkYWVtb24vb3BkX2ltYWdlLmM6IGZpeCBlcnJvciBtZXNzYWdlCisKKzIwMDMtMDgtMjggIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGV2ZW50cy9hbHBoYS5ldjYuZXZlbnRzOiBmaXggZHVwbGljYXRlIHVtIHRhZworCisyMDAzLTA4LTI4ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGV2ZW50cy9pMzg2LmF0aGxvbi5ldmVudHM6IGZpeCBkdXBsaWNhdGUgbWluaW11bSB0YWcKKworCSogZGFlbW9uL29wZF9pbWFnZS5jOgorCSogbGlib3Avb3BfZXZlbnRzLmM6IGNoZWNrIGZvciBkdXBsaWNhdGUgdGFncworCisyMDAzLTA4LTI4ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKworMjAwMy0wOC0yNyAgV2lsbCBDb2hlbiAgPHdjb2hlbkByZWRoYXQuY29tPgorCisJKiB1dGlscy9vcF9oZWxwLmMgKHJlc29sdmVfZXZlbnRzKTogVHlwZWNhc3QgcHJpbnRmIGFyZ3VtZW50LgorCisyMDAzLTA4LTI1ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBwcC9vcGFubm90YXRlX29wdGlvbnMuY3BwOgorCSogcHAvb3Bhbm5vdGF0ZV9vcHRpb25zLmg6CisJKiBwcC9vcGFubm90YXRlLmNwcDogZW5hYmxlIG11bHRpcGxlIGV2ZW50cworCisJKiBwcC9vcHJlcG9ydF9vcHRpb25zLmNwcDogcmVtb3ZlICNpZiAwIC4uLi4gI2VuZGlmCisKKzIwMDMtMDgtMjUgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGxpYnBwL2NvdW50X2FycmF5LmNwcDogYXZvaWQgdG8gYWNjZXNzIGludmFsaWQgbWVtb3J5CisKKzIwMDMtMDgtMjUgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGNvbmZpZ3VyZS5pbjoKKwkqIG00L2J1aWx0aW5leHBlY3QubTQ6CisJKiBtNC9jb25maWdtb2R1bGUubTQ6CisJKiBtb2R1bGUvTWFrZWZpbGUuaW46CisJKiBtb2R1bGUvaWE2NC9NYWtlZmlsZS5pbjoKKwkqIG1vZHVsZS94ODYvbWFrZWZpbGUuaW46IGFsd2F5cyB1c2UgRVhUUkFfQ0ZMQUdTX01PRFVMRSBub3QKKwlFWFRSQV9DRkxBR1MgZm9yIG1vZHVsZSBidWlsZCBmbGFncworCisyMDAzLTA4LTIzICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBsaWJyZWdleC9vcF9yZWdleC5oOgorCSogbGlicmVnZXgvb3BfcmVnZXguY3BwOiB0aWR5CisKKwkqIGxpYnV0aWwrKy9vcF9iZmQuY3BwOiByZW1vdmUgb2Jzb2xldGUgY29tbWVudAorCisyMDAzLTA4LTIzICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBsaWJ1dGlsKysvZmlsZV9tYW5pcC5oOgorCSogbGlidXRpbCsrL2ZpbGVfbWFuaXAuY3BwOiBpc19kaXJlY3RvcnkoZGlybmFtZSk6IHJldHVybiB0cnVlIGlmCisJICBkaXJuYW1lIGV4aXN0cworCSogcHAvY29tbW9uX29wdGlvbi5jcHA6IHZhbGlkYXRlIC0taW1hZ2UtcGF0aCBwYXJhbWV0ZXJzCisKKzIwMDMtMDgtMjIgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGV2ZW50cy9pMzg2LnA0LmV2ZW50czogY2xhcmlmeSB0aGFuIDEyOEJJVF9NTVhfVU9QIGNvdW50IG9ubHkgaW50ZWdlcgorCSAgU1NFMiBvcHMKKwkqIHBwL29wcmVwb3J0LmNwcDogbWlub3Igc3BhY2luZyBjaGFuZ2UgaW4gb3V0cHV0CisKKzIwMDMtMDgtMjIgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogZGFlbW9uL29wcm9maWxlZC5jOiByZXBvcnQgdGhlIGtlcm5lbCBwb2ludGVyIHNpemUKKworMjAwMy0wOC0yMiAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBkYWVtb24vb3Byb2ZpbGVkLmM6IHJlYWQgbmV3IC9kZXYvb3Byb2ZpbGUvcG9pbnRlcl9zaXplCisJaW4gcHJlZmVyZW5jZSB0byBrY29yZS4ga2NvcmUgY29kZSB3aWxsIGV2ZW50dWFsbHkgZ28uCisKKzIwMDMtMDgtMjEgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogbGlidXRpbCsrL29wX2JmZC5jcHA6IHVwZGF0ZSBnY2MyX2NvbXBpbGVkLiBjb21tZW50CisJdG8gcmVmbGVjdCByZWFsaXR5CisKKzIwMDMtMDgtMTkgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIHBwL29wcmVwb3J0LmNwcDogcmVhbGx5IG1lcmdlIHdoZW4gLS1tZXJnZT1saWIgYW5kIGltYWdlIG5hbWUgYXJlCisJICBzcGVjaWZpZWQuCisKKzIwMDMtMDgtMTYgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIHBwL29wYW5ub3RhdGUuY3BwOiBvdXRwdXQgdGhyZXNob2xkIHBlcmNlbnQgd2hlbiBuZWNlc3NhcnkuCisKKzIwMDMtMDgtMTYgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGxpYnV0aWwrKy9vcF9iZmQuY3BwOiByZW1vdmUgRUxGLWJhc2VkIHN5bWJvbCBzaXplIGNvZGUKKworMjAwMy0wOC0xNSAgV2lsbGlhbSBDb2hlbiAgPHdjb2hlbkByZWRoYXQuY29tPgorCisJKiBkb2Mvb3Bjb250cm9sLjEuaW46CisJKiBkb2Mvb3Byb2ZpbGUuMS5pbjoKKwkqIGRvYy9vcHJvZmlsZS54bWw6IENvcnJlY3QgcGF0aCB0byAvcm9vdC8ub3Byb2ZpbGUvZGFlbW9ucmMuCisKKzIwMDMtMDgtMTUgIFRob21hcyBTcGF0emllciAgPFRTUEFUQGRlLmlibS5jb20+CisKKwkqIGRhZW1vbi9vcGRfY29va2llLmg6IGZpeCBzMzkwIHN5c2NhbGwKKworMjAwMy0wOC0xNCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogbGlidXRpbCsrL3N0cmluZ19tYW5pcC5jcHA6IGVyYXNlX3RvX2xhc3Rfb2YoKSBpcyBub3QgYSBsdHJpbSgpCisKKzIwMDMtMDgtMTQgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwlEYXZlIEpvbmVzIHN1Z2dlc3RlZCB0aGlzIGNoYW5nZS4KKworCSogbW9kdWxlL3g4Ni9vcF9tb2RlbF9wNC5jOiByZW1vdmUgc3VwZXJmbG91cyAnOycgYXQgZW5kIG9mIHNvbWUgbWFjcm8KKworMjAwMy0wOC0xNCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogbGlidXRpbCsrL3N0cmluZ19tYW5pcC5oOiByZW1vdmUgZXJhc2VfZnJvbV9sYXN0X29mKCkKKwkqIGxpYnV0aWwrKy9zdHJpbmdfbWFuaXAuY3BwOiBhbmQgdGlkeSBlcmFzZV90b19sYXN0X29mKCksIHJ0cmltKCkgYW5kCisJICBsdHJpbSgpCisKKzIwMDMtMDgtMTMgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGxpYnV0aWwrKy9vcF9iZmQuaDoKKwkqIGxpYnBwL3Byb2ZpbGVfY29udGFpbmVyLmNwcDogcmVtb3ZlIG5pbF9zeW1ib2xfaW5kZXgKKworMjAwMy0wOC0xMyAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBsaWJwcC9wcm9maWxlX2NvbnRhaW5lci5jcHA6CisJKiBsaWJwcC9wcm9maWxlX2NvbnRhaW5lci5oOiByZW1vdmUgImJhc2Vfdm1hIiBwYXJhbWV0ZXIKKwl0byBhZGRfc2FtcGxlcygpLCB3ZSBjYW4ganVzdCByZS1ncmFiIGl0IHN0cmFpZ2h0IGZyb20KKwl0aGUgYWJmZAorCisyMDAzLTA4LTEzICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGxpYnBwL3Byb2ZpbGVfY29udGFpbmVyLmNwcDoKKwkqIGxpYnBwL3Byb2ZpbGVfY29udGFpbmVyLmg6IHJlbW92ZSB1bnVzZWQgInplcm8gc2FtcGxlcyIKKwlvcHRpbWl6YXRpb24gaGludDogaXQncyBhbHdheXMgZmFsc2UKKworCSogcHAvb3Bhbm5vdGF0ZS5jcHA6CisJKiBwcC9vcGdwcm9mLmNwcDoKKwkqIHBwL29wcmVwb3J0LmNwcDogZnJvbSBhYm92ZQorCisyMDAzLTA4LTEyICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIHBwL29wcmVwb3J0LmNwcDogc21hbGwgdHJpdmlhbGl0aWVzCisKKzIwMDMtMDgtMTIgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGxpYnJlZ2V4L3N0bC5wYXQuaW46IG1pbm9yIGZpeC9pbXByb3ZlbWVudHMKKwkqIGxpYnJlZ2V4L21hbmdsZWQtbmFtZS50eHQ6IGFkZCB0ZXN0cworCisyMDAzLTA4LTEyICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBwcC9vcHJlcG9ydC5jcHA6IGZpeCB0aGlua28gd2hlbiAtLW1lcmdlPWxpYgorCisyMDAzLTA4LTEyICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIHBwL29wcmVwb3J0LmNwcDogcy9jb3VudF9ncm91cHNfc3VtbWFyeS9zdW1tYXJ5X2NvbnRhaW5lci9nCisKKzIwMDMtMDgtMTIgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogZG9jL29wcm9maWxlLnhtbDogZG9jdW1lbnQgb3ByZXBvcnQncyBzaWRlLWJ5LXNpZGUgYSBsaXR0bGUKKwliaXQKKworMjAwMy0wOC0xMiAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBwcC9vcHJlcG9ydC5jcHA6IHMvZ3JvdXBfc3VtbWFyeS9hcHBfc3VtbWFyeS8sIGFuZAorCWEgbG90IG9mIG90aGVyIHJlbmFtaW5ncyB0byBjbGFyaWZ5IHRoZSBjb3VudCBncm91cHMKKwl1c2FnZS4KKworMjAwMy0wOC0xMiAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiB1dGlscy9vcF9oZWxwLmM6IGFkZCAtLXVuaXQtbWFzaworCisJKiB1dGlscy9vcGNvbnRyb2w6IHVzZSAtLXVuaXQtbWFzaworCisyMDAzLTA4LTEyICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBwcC9vcHJlcG9ydC5jcHA6IHJlIHdyaXRlIHVzaW5nIGNvdW50X2FycmF5X3QKKworMjAwMy0wOC0xMSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBsaWJwcC9jb3VudF9hcnJheS5jcHA6CisJKiBsaWJwcC9jb3VudF9hcnJheS5oOiBhdXRvLXJlc2l6ZSB0aGUgbnVtYmVyIG9mIGdyb3VwcworCWJhc2VkIG9uIGhvdyB3ZSBpbmRleC4KKworCSogbGlicHAvcHJvZmlsZV9jb250YWluZXIuY3BwOiByZW1vdmUgY2hlY2sKKworCSogcHAvb3Bhbm5vdGF0ZS5jcHA6IGNvdW50X2FycmF5Lnplcm8oKSBub3QgLmVtcHR5KCkKKworMjAwMy0wOC0xMSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBsaWJwcC9maWxlbmFtZV9zcGVjLmg6CisJKiBsaWJwcC9wcm9maWxlX3NwZWMuY3BwOgorCSogbGlicHAvcHJvZmlsZV9zcGVjLmg6IGFkZCBjb21tZW50cywgYWxsb3cgY29tbWEgbGlzdHMKKwlmb3IgZXZlbnQsIGNvdW50LCBhbmQgdW5pdCBtYXNrCisKKwkqIGxpYnV0aWwrKy9jb21tYV9saXN0Lmg6IGltcGxlbWVudCBtaXNzaW5nIG1ldGhvZAorCisyMDAzLTA4LTExICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGxpYnBwL2Zvcm1hdF9vdXRwdXQuY3BwOgorCSogbGlicHAvZm9ybWF0X291dHB1dC5oOiBhZGQgc2V0X25yX2dyb3VwcygpLCByZW1vdmUKKwlwcF9ucl9jb3VudGVycy4KKworCSogbGlicHAvcHJvZmlsZV9jb250YWluZXIuY3BwOgorCSogbGlicHAvcHJvZmlsZV9jb250YWluZXIuaDoKKwkqIHBwL29wYW5ub3RhdGUuY3BwOgorCSogcHAvb3BncHJvZi5jcHA6CisJKiBwcC9vcHJlcG9ydC5jcHA6IGNvdW50X2dyb3VwIG5vdCBjb3VudGVyCisKKzIwMDMtMDgtMTEgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogbGlicHAvTWFrZWZpbGUuYW06CisJKiBsaWJwcC9jb3VudGVyX2FycmF5LmNwcDoKKwkqIGxpYnBwL2NvdW50ZXJfYXJyYXkuaDogcmVuYW1lIHRvIC4uLgorCisJKiBsaWJwcC9jb3VudF9hcnJheS5oOgorCSogbGlicHAvY291bnRfYXJyYXkuY3BwOiAuLi4gdGhpcyAuLi4KKworCSogbGlicHAvZm9ybWF0X291dHB1dC5jcHA6CisJKiBsaWJwcC9mb3JtYXRfb3V0cHV0Lmg6CisJKiBsaWJwcC9wcm9maWxlLmNwcDoKKwkqIGxpYnBwL3Byb2ZpbGUuaDoKKwkqIGxpYnBwL3Byb2ZpbGVfY29udGFpbmVyLmNwcDoKKwkqIGxpYnBwL3Byb2ZpbGVfY29udGFpbmVyLmg6CisJKiBsaWJwcC9zYW1wbGVfY29udGFpbmVyLmNwcDoKKwkqIGxpYnBwL3NhbXBsZV9jb250YWluZXIuaDoKKwkqIGxpYnBwL3N5bWJvbC5oOgorCSogcHAvb3Bhbm5vdGF0ZS5jcHA6CisJKiBwcC9vcGdwcm9mLmNwcDoKKwkqIHBwL29wcmVwb3J0LmNwcDogLi4uIGFuZCBzZXZlcmFsIHJlbmFtaW5ncyB0byBzdGFydGluZworCWNoYW5nZSB0aGUgbm90aW9uIGZyb20gImNvdW50ZXJzIiB0byB0aGUgbW9yZSBnZW5lcmFsIG5vdGlvbgorCW9mICJjb3VudCBncm91cHMiCisKKzIwMDMtMDgtMTAgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwlNdWx0aXBsZSBjb3VudGVyIHN1cHBvcnQgZm9yIHBwIHRvb2xzLgorCisJKiBsaWJwcC9jb3VudGVyX2FycmF5Lmg6CisJKiBsaWJwcC9jb3VudGVyX2FycmF5LmNwcDogcmVzdXJyZWN0ZWQgZnJvbSBwcC1pbnRlcmZhY2UtYnJhbmNoLCBmb3IKKwkgbm93IG1lbW9yeSB1c2UgaXMgaW5lZmZpY2llbnQuCisJKiBsaWJwcC9NYWtlZmlsZS5hbTogYWRkIGNvdW50ZXJfYXJyYXkuY3BwIC5oCisJKiBsaWJwcC9mb3JtYXRfb3V0Lmg6CisJKiBsaWJwcC9mb3JtYXRfb3V0LmNwcDogaGFuZGxlIG11bHRpcGxlIGNvdW50ZXIgKyBhIGdlbmVyYWwgdGlkeQorCSogbGlicHAvZm9ybWF0X2ZsYWdzLmg6IHJlbW92ZSBmZl9pbW11dGFibGVfbWFzayBhbmQgc29tZSBuYXN0eQorCSAgcmVxdWlzaXRlIG9uIGZsYWdzIHZhbHVlCisJKiBsaWJwcC9wcm9maWxlX2NvbnRhaW5lci5oOgorCSogbGlicHAvcHJvZmlsZV9jb250YWluZXIuY3BwOgorCSogbGlicHAvc2FtcGxlX2NvbnRhaW5lci5oOgorCSogbGlicHAvc2FtcGxlX2NvbnRhaW5lci5jcHA6CisJKiBsaWJwcC9zeW1ib2wuaDoKKwkqIGxpYnBwL3N5bWJvbF9jb250YWluZXIuY3BwOgorCSogbGlicHAvc3ltYm9sX3NvcnQuY3BwOgorCSogcHAvb3ByZXBvcnQuY3BwOiBoYW5kbGUgbXVsdGlwbGUgY291bnRlcgorCSogcHAvb3Bhbm5vdGF0ZS5jcHA6IHBhcnRpYWwgaGFuZGxpbmcgb2YgbXVsdGlwbGUgY291bnRlcgorCSogcHAvb3BncHJvZi5jcHA6CisJKiBwcC9vcHJlcG9ydC5jcHA6IG1pbm9yIGJpdHMKKworMjAwMy0wOC0wOCAgV2lsbCBDb2hlbiAgPHdjb2hlbkByZWRoYXQuY29tPgorCisJKiBkYWUvTWFrZWZpbGUuYW06CisJKiBkYWVtb24vTWFrZWZpbGUuYW06IENvcnJlY3QgbGlicmFyeSBsaW5raW5nIG9yZGVyLgorCSogZGFlbW9uL29wZF91dGlsLmM6IEFkZCBuZWVkZWQgaW5jbHVkZSBmaWxlcy4KKworMjAwMy0wOC0wOCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogdXRpbHMvb3Bjb250cm9sOiBtb3ZlX2FuZF9yZW1vdmUoKSBkbyBub3RoaW5nIGlmIHNvdXJjZSBkb2Vzbid0IGV4aXN0CisKKzIwMDMtMDgtMDggIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwlyZXZlcnQgdGhlIHByZXZpb3VzIHBhdGNoCisJKiBkYWUvTWFrZWZpbGUuYW06CisJKiBkYWUvb3BkX3NhbXBsZV9maWxlcy5oOgorCSogZGFlL29wZF9zYW1wbGVfZmlsZXMuYzoKKwkqIGRhZW1vbi9NYWtlZmlsZS5hbToKKwkqIGRhZW1vbi9vcGRfc2FtcGxlX2ZpbGVzLmM6IHVuLXNoYXJlIG9wZF9zYW1wbGVfZmlsZXMKKwljb2RlCisKKzIwMDMtMDgtMDggIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogZGFlL01ha2VmaWxlLmFtOgorCSogZGFlL29wZF9zYW1wbGVfZmlsZXMuaDoKKwkqIGRhZS9vcGRfc2FtcGxlX2ZpbGVzLmM6CisJKiBkYWVtb24vTWFrZWZpbGUuYW06CisJKiBkYWVtb24vb3BkX3NhbXBsZV9maWxlcy5jOiBzaGFyZSBvcGRfc2FtcGxlX2ZpbGVzCisJY29kZQorCisyMDAzLTA4LTA4ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGRhZS9vcHJvZmlsZWQuYzoKKwkqIGRhZW1vbi9vcHJvZmlsZWQuYzoKKwkqIGRhZW1vbi9vcGRfdXRpbC5oOgorCSogZGFlbW9uL29wZF91dGlsLmM6IHNoYXJlIG9wZF93cml0ZV9hYmkoKQorCisyMDAzLTA4LTA4ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBsaWJvcC9vcF9hbGxvY19jb3VudGVyLmM6CisJKiBsaWJvcC9vcF9ldmVudHMuaDogbWlub3IgZG94eWdlbiBmaXgKKworMjAwMy0wOC0wOCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBkYWUvTWFrZWZpbGUuYW06CisJKiBkYWUvb3Byb2ZpbGVkLmM6CisJKiBkYWVtb24vTWFrZWZpbGUuYW06CisJKiBkYWVtb24vb3Byb2ZpbGVkLmM6CisJKiBkYWVtb24vb3BkX3V0aWwuaDoKKwkqIGRhZW1vbi9vcGRfdXRpbC5jOiBzaGFyZSBzb21lIHNtYWxsIGJpdHMgb2YgY29kZQorCWJldHdlZW4gdGhlIGRhZW1vbnMKKworMjAwMy0wOC0wOCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBkYWUvb3Byb2ZpbGVkLmM6CisJKiBkYWVtb24vb3Byb2ZpbGVkLmM6IHJlbW92ZSBteXBpZCwgdW51c2VkCisKKzIwMDMtMDgtMDggIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogZGFlL01ha2VmaWxlLmFtOgorCSogZGFlL29wZF9wcmludGYuaDogcmVtb3ZlIGR1cGxpY2F0ZSBoZWFkZXIKKwlhbmQgdXNlIGRhZW1vbi9vcGRfcHJpbnRmLmgKKworMjAwMy0wOC0wOCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBkYWUvb3BkX2ltYWdlLmM6CisJKiBkYWUvb3BkX3NhbXBsZV9maWxlcy5oOgorCSogZGFlL29wZF9zYW1wbGVfZmlsZXMuYzoKKwkqIGRhZW1vbi9vcGRfaW1hZ2UuYzoKKwkqIGRhZW1vbi9vcGRfc2FtcGxlX2ZpbGVzLmg6CisJKiBkYWVtb24vb3BkX3NhbXBsZV9maWxlcy5jOiByZW1vdmUgImNyZWF0ZSIgYm9vbAorCWZyb20gb3BkX21hbmdsZV9maWxlbmFtZSgpOiBvbmx5IG9uZSBjYWxsc2l0ZSBuZWVkcworCXRoYXQgZnVuY3Rpb25hbGl0eSwgb3BlbiBjb2RlIHRoZSBjcmVhdGUgaW5zdGVhZAorCisJKiBkYWUvb3BkX3Byb2MuYzoKKwkqIGRhZS9vcGRfc2FtcGxlX2ZpbGVzLmg6CisJKiBkYWUvb3BkX3NhbXBsZV9maWxlcy5jOgorCSogZGFlbW9uL29wZF9zYW1wbGVfZmlsZXMuaDoKKwkqIGRhZW1vbi9vcGRfc2FtcGxlX2ZpbGVzLmM6IHJldHVybiBlcnJvciBmcm9tCisJb3BkX29wZW5fc2FtcGxlX2ZpbGVuYW1lKCkuIERvIG5vdCBmYWlsIHdoZW4gb2RiX29wZW4KKwlmYWlscyBkdWUgdG8gLS1yZXNldCByYWNlcy4KKworCSogZGFlL29wcm9maWxlZC5jOgorCSogZGFlbW9uL29wcm9maWxlZC5jOiBhIGxpdHRsZSBtb3JlIHZlcmJvc2l0eS4KKworCSogbGlidXRpbC9vcF9maWxlLmg6CisJKiBsaWJ1dGlsL29wX2ZpbGUuYzogZml4IGNyZWF0ZV9kaXIvcGF0aCgpIGNvbW1lbnRzLAorCWRvbid0IHVzZSBhY2Nlc3MoKQorCisJKiB1dGlscy9vcGNvbnRyb2w6IHJlZHVjZSBjaGFuY2Ugb2YgLS1yZXNldCByYWNlcworCisyMDAzLTA4LTA2ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBsaWJwcC9zeW1ib2xfc29ydC5oOgorCSogbGlicHAvc3ltYm9sX3NvcnQuY3BwOiBhZGQgYXBwX25hbWUgc29ydCBvcmRlciwgZm9yY2Ugc29ydCBvcmRlcgorCSAgZm9yIGNyaXRlcmlhIHVuc3BlY2lmaWVkIGJ5IHVzZXIuCisJKiBwcC9vcHJlcG9ydF9vcHRpb25zLmNwcDogdXBkYXRlIC0tc29ydCBvcHRpb24gaGVscCBzdHJpbmcuCisKKzIwMDMtMDgtMDQgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogZG9jL29wcm9maWxlLnhtbDoKKwkqIGRvYy9vcGFubm90YXRlLjEuaW46CisJKiBwcC9vcGFubm90YXRlLmNwcDoKKwkqIHBwL29wYW5ub3RhdGVfb3B0aW9ucy5oOgorCSogcHAvb3Bhbm5vdGF0ZV9vcHRpb25zLmNwcDogYWRkIC0tYmFzZS1kaXJzCisKKzIwMDMtMDgtMDQgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogZG9jL29wcm9maWxlLnhtbDoKKwkqIGRvYy9vcGFubm90YXRlLjEuaW46CisJKiBwcC9vcGFubm90YXRlLmNwcDoKKwkqIHBwL29wYW5ub3RhdGVfb3B0aW9ucy5oOgorCSogcHAvb3Bhbm5vdGF0ZV9vcHRpb25zLmNwcDogYWRkIC0tc2VhcmNoLWRpcnMKKworMjAwMy0wOC0wNCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBkb2Mvb3Byb2ZpbGUueG1sOgorCSogZG9jL29wYW5ub3RhdGUuMS5pbjoKKwkqIHBwL29wYW5ub3RhdGUuY3BwOgorCSogcHAvb3Bhbm5vdGF0ZV9vcHRpb25zLmg6CisJKiBwcC9vcGFubm90YXRlX29wdGlvbnMuY3BwOiByZW1vdmUgLS1zb3VyY2UtZGlyIGFuZCAtLWJhc2UtZGlyLAorCSAgdGhleSdyZSBjb25mdXNpbmcgYW5kIG5vdCB1c2VmdWwgaW4gdGhlIGN1cnJlbnQgZm9ybQorCisyMDAzLTA4LTAzICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIHV0aWxzL29wY29udHJvbDogYXZvaWQgdXNpbmcgcHMsIGl0J3MgdmVyeSBzbG93IHdpdGgga2FsbHN5bXMKKworMjAwMy0wOC0wMyAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogbGlidXRpbCsrL29wX2JmZC5jcHA6IGMrKyBzdGF0aWMgZnVuY3Rpb24gZG9lc24ndCBnZXQgYSBtYW5nbGVkIG5hbWUKKwkgIGluIGRlYnVnIGluZm8gKHNlZSBnY2MgIzExNzc0KS4gVHJ5IHRvIHJlY292ZXIgdGhyb3VnaCBhIG5vdAorCSAgY29tcGxldGVseSByZWxpYWJsZSBtZWNoYW5pc20gYnV0IGJldHRlciB0aGFuIGlnbm9yaW5nIHRoZSBwcm9ibGVtCisKKzIwMDMtMDgtMDIgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIHBwL29wcmVwb3J0LmNwcDogbWlub3I6IG1vcmUgY29uc2lzdGVuY3kgYWJvdXQgZnVuY3Rpb24gb3JkZXJpbmcKKworMjAwMy0wOC0wMiAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogbGlicHAvcHJvZmlsZS5oOgorCSogbGlicHAvcHJvZmlsZS5jcHA6IHByb2ZpbGU6OnNhbXBsZV9jb3VudCgpIG5ldyB0byBhbGxvdyByYXcgYWNjZXNzCisJICB0byBzYW1wbGVzIGNvdW50CisJKiBwcC9vcHJlcG9ydC5jcHA6IHVzZSBhYm92ZSBmdW5jdGlvbiB0byBpbXBsZW1lbnQgb3ByZXBvcnQgKHcvbyAtbAorCSAgb3IgLS1kZXRhaWxzIG9wdGlvbnMpLiBvcHJlcG9ydCBpcyByb3VnaGx5IHR3aWNlIGZhc3Rlci4KKworMjAwMy0wOC0wMiAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogcHAvb3ByZXBvcnQuY3BwOiBjbGFyaWZ5IG11bHRpcGxlIGNvdW50ZXIgc3VwcG9ydAorCisyMDAzLTA4LTAxICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGxpYnJlZ2V4L3N0bC5wYXQuaW46IGZpeCBfTGlzdF9pdGVyYXRvciByZWdleAorCShmcm9tIFBoaWwpCisKKzIwMDMtMDctMzEgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIHBwL29wYW5ub3RhdGUuY3BwOiBvdXRwdXQgY3B1IHR5cGUgYW5kIGNwdSBzcGVlZC4KKworMjAwMy0wNy0zMCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBsaWJwcC9wYXJ0aXRpb25fZmlsZXMuY3BwOiByZW1vdmUgc29tZSBhcHBhcmVudGx5CisJZGVhZCBjb2RlCisKKzIwMDMtMDctMzAgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogZXZlbnRzL2kzODYucDQudW5pdF9tYXNrczogbWFrZSBmbGFtZV91b3BzIHZhbHVlCisJbWFuZGF0b3J5LCBZdWFuLkx1QHJyemUudW5pLWVybGFuZ2VuLmRlIGRvZXMgbm90CisJc2VlIGFueSBldmVudHMgd2l0aG91dCBzZXR0aW5nIHRoZSB1bml0IG1hc2sKKworMjAwMy0wNy0zMCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBsaWJ1dGlsKysvb3BfYmZkLmg6CisJKiBsaWJ1dGlsKysvb3BfYmZkLmNwcDogYmZkX29wZW5yKCkga2VlcHMgYSBjb3B5IG9mCisJdGhlIHBhc3NlZCBpbiBjaGFyICogYXJvdW5kLCBzaWNrZW5seSBlbm91Z2guIEVuc3VyZSBsaWZldGltZXMKKwl3aWxsIGFsd2F5cyBiZSBjb3JyZWN0IGJ5IGFkZGluZyBhIGZpbGVuYW1lIGRhdGEgbWVtYmVyIHRvCisJb3BfYmZkCisKKzIwMDMtMDctMjkgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGxpYnBwL29wX2hlYWRlci5oOgorCSogbGlicHAvb3BfaGVhZGVyLmNwcDogc2VwYXJhdGUgb3V0cHV0IG9mIGNwdV90eXBlLCBjcHVfc3BlZWQKKwkgIGFuZCBjb3VudGVyIHNldHVwCisKKwkqIGxpYnBwL3BhcnRpdGlvbl9maWxlcy5oOgorCSogbGlicHAvcGFydGl0aW9uX2ZpbGVzLmNwcDogdW5tZXJnZWFibGVfcHJvZmlsZSgpIHNwbGl0IHByb2ZpbGUKKwkgIGJ5IHRoZSB1bm1lcmdlYWJsZS4KKworCSogcHAvb3ByZXBvcnRfb3B0aW9ucy5oOgorCSogcHAvb3ByZXBvcnRfb3B0aW9ucy5jcHA6CisJKiBwcC9vcHJlcG9ydC5jcHA6IGluaXRpYWwgbXVsdGlwbGUgY291bnRlciBvdXRwdXQsIG11bHRpcGxlIGNvdW50ZXIKKwkgIHdpdGggLWwgaXMgbm90IHlldCBhdmFpbGFibGUuCisKKzIwMDMtMDctMjkgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogZG9jL29wY29udHJvbC4xLmluOiB1cGRhdGUgZm9yIC0tZXZlbnQKKworMjAwMy0wNy0yOSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBjb25maWd1cmUuaW46CisJKiBkb2Mvc3JjZG9jL0RveHlmaWxlLmluOgorCSogb3Byb2ZfcmVwb3J0LzogcmVtb3ZlIGJhZGx5IG91dCBvZiBkYXRlIG9wcm9mX3JlcG9ydAorCisyMDAzLTA3LTI4ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGNvbmZpZ3VyZS5pbjogYnVtcCB0byAwLjdjdnMKKworMjAwMy0wNy0yNiAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBjb25maWd1cmUuaW46IGJ1bXAgdG8gMC42CisKKzIwMDMtMDctMjYgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogdXRpbHMvb3Bjb250cm9sOiBmaXggY2FsbCBvZiBvcF9oZWxwCisKKzIwMDMtMDctMjYgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogZ3VpL29wcm9mX3N0YXJ0LmNwcDogcmVwbGFjZSBmb2xkZXIgaWNvbnMgd2l0aCBjbGVhcmVyCisJcmVkL2dyZWVuIGNpcmNsZXMKKworMjAwMy0wNy0yNiAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBndWkvb3Byb2Zfc3RhcnQuY3BwOiBhY3R1YWxseSBzZWxlY3QgYW5kIHNob3cgdGhlIGRlZmF1bHQKKwlldmVudAorCisyMDAzLTA3LTI2ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGd1aS9vcHJvZl9zdGFydC5jcHA6IHNtYWxsIHN0cmluZyB0d2Vhaywgc2hvdyAiY29uZmxpY3RzIgorCW1lc3NhZ2UgY29uc2lzdGVudGx5CisKKzIwMDMtMDctMjYgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogZ3VpL29wcm9mX3N0YXJ0LmNwcDogZG9uJ3QgdXNlIGludmFsaWRhdGVkIGl0ZXJhdG9yCisKKzIwMDMtMDctMjYgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGd1aS9vcHJvZl9zdGFydC5jcHA6IGZpeCBmb3IgMi45MS42NgorCisJKiBsaWJwcC9wcm9maWxlLmNwcDogdHlwbyBpbnZva2luZyBhbiB1bmRlZmluZWQgYmVoYXZpb3IgcmV2ZWFsZWQKKwkgIGJ5IGdjYyBzdGwgZGVidWcgbW9kZQorCSogbGlicHAvcHJvZmlsZS5oOiBlbnN1cmUgd2UgcHJvdmlkZSB0aGUgcmlnaHQgdHlwZWRlZiB0byBzdGQ6OgorCSAgZm9yIHByb2ZpbGU6OmNvbnN0X2l0ZXJhdG9yIHJldmVhbGVkIGJ5IGdjYyBzdGwgZGVidWcgbW9kZSBhdCBjb21waWxlCisJICB0aW1lLiBUaGUgaW1wbGVtZW50YXRpb24gaXMgYSBiaXQgdHJpY2t5IHRvIHdvcmsgd2l0aCBvbGQgY29tcGlsZXIKKwkqIGxpYnBwL3N5bWJvbF9zb3J0LmNwcDogY29tcGFyZSBtdXN0IGRlZmluZSBhIHdlYWsgb3JkZXJlZCByZWxhdGlvbgorCSAgb3JkZXIsIHJldmVhbGVkIGJ5IGdjYyBzdGwgZGVidWcgbW9kZS4KKworMjAwMy0wNy0yNiAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogZ3VpL3VpL29wcm9mX3N0YXJ0LmJhc2UudWk6CisJKiBndWkvb3Byb2Zfc3RhcnQuaDoKKwkqIGd1aS9vcHJvZl9zdGFydC5jcHA6IGNoYW5nZSBVSSB0byB1c2UgdGhlIG5ldyBjb3VudGVyIGFsbG9jYXRpb24KKwkgIEFQSQorCisJKiBsaWJvcC9vcF9hbGxvY19jb3VudGVyLmg6CisJKiBsaWJvcC9vcF9hbGxvY19jb3VudGVyLmM6CisJKiB1dGlscy9vcF9oZWxwLmM6IG1pbm9yIGNvbnN0LW5lc3MgYXBpIGNoYW5nZQorCisyMDAzLTA3LTI1ICBXaWxsIENvaGVuICA8d2NvaGVuQHJlZGhhdC5jb20+CisKKwkqIHV0aWxzL29wY29udHJvbDogUmVzdHJpY3QgdGhlIHNlYXJjaCBwYXRoLgorCisyMDAzLTA3LTI1ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBsaWJvcC9vcF9hbGxvY19jb3VudGVyLmM6IHVzZSB0YWJ1bGF0aW9uCisKKwkqIGxpYm9wL29wX2V2ZW50cy5jOgorCSogbGlib3Avb3BfZXZlbnRzLmg6IGZpbmRfZXZlbnRfYnlfbmFtZSgpIG5ldworCSogdXRpbHMvb3BfaGVscC5jOiB1c2UgZmluZF9ldmVudF9ieV9uYW1lKCkKKworMjAwMy0wNy0yNCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogdXRpbHMvb3BfaGVscC5jOiBtYWtlIHZhbGdyaW5kIGhhcHB5ICsgbWlub3IgY2xlYW51cAorCisyMDAzLTA3LTI0ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBsaWJvcC9vcF9hbGxvY19jb3VudGVyLmg6CisJKiBsaWJvcC9vcF9hbGxvY19jb3VudGVyLmM6IG5ldyBmaWxlIHByb3ZpZGluZyBtYXBwaW5nIGZyb20gYW4gZXZlbnQgCisJICBsaXN0IHRvIGhhcmR3YXJlIGNvdW50ZXIgbnVtYmVyCisJKiB1dGlscy9vcF9oZWxwLmM6IHVzZSB0aGUgYWJvdmUgYXBpCisKKzIwMDMtMDctMjQgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIHV0aWxzL29wX2hlbHAuYzogZml4IGhhcmR3YXJlIGNvdW50ZXIgYWxsb2NhdGlvbiBvcmRlcgorCisyMDAzLTA3LTIzICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGRvYy9vcHJvZmlsZS54bWw6IGNvbW1lbnQgb3V0IC0tYmFzZS1kaXIgbWVudGlvbgorCisyMDAzLTA3LTIzICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGRvYy9vcHJvZmlsZS54bWw6IHJlbW92ZSBtZW50aW9uIG9mIG9wcm9mX3N0YXJ0X2V2ZW50CisKKzIwMDMtMDctMjMgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogZGFlL29wcm9maWxlZC5jOgorCSogZGFlbW9uL29wcm9maWxlZC5jOiBkb24ndCB1c2VsZXNzbHkgdHJ5IHRvIHVubGluaworCW5vbi1leGlzdGVudCBsb2NrZmlsZQorCisJKiBkYWVtb24vb3BkX2ltYWdlLmM6CisJKiBkYWVtb24vb3Byb2ZpbGVkLmM6IGNsZWFuIHVwIGJ1ZmZlciByZWFkIG1lc3NhZ2VzCisKKzIwMDMtMDctMjMgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogdXRpbHMvb3Bjb250cm9sOiBlcnJvciBvdXQgYXQgLS1zZXR1cCB0aW1lIGlmIHZtbGludXggaXMgbm90CisJdmFsaWQuIENsZWFudXAgdGhlIGVycm9yIG1lc3NhZ2UgaWYgc28KKworCSogZGFlbW9uL29wZF9rZXJuZWwuYzogZml4IHBvdGVudGlhbCBudWxsIGRlcmVmCisKKzIwMDMtMDctMjEgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogZ3VpL29wcm9mX3N0YXJ0LmNwcDogc2VsZWN0ICJObyBldmVudCIgd2hlbiBzd2l0Y2hpbmcgY291bnRlcgorCWlmIG5lZWRlZAorCisyMDAzLTA3LTIxICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGd1aS9vcHJvZl9zdGFydC5jcHA6IGZpeCBkZWZhdWx0IGV2ZW50IGNob29zaW5nIHdoZW4KKwlkYWVtb25yYyBleGlzdHMKKworMjAwMy0wNy0yMSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogZ3VpL29wcm9mX3N0YXJ0LmNwcDogdGhpbmtvIGluIGhhc191bmlxdWVfZXZlbnQoKSwgZG9uJ3Qgd2FybiBmb3IKKwkgIG5vIGNvdW50ZXIgd2l0aCBDUFVfVElNRVJfSU5UCisKKzIwMDMtMDctMjEgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGd1aS9vcHJvZl9zdGFydC5jcHA6IGFsbG93IHRvIGRlLXNlbGVjdCBhIGNvdW50ZXIKKworMjAwMy0wNy0yMSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBndWkvb3Byb2Zfc3RhcnQuY3BwOgorCSogZ3VpL29wcm9mX3N0YXJ0X3V0aWwuaDoKKwkqIGd1aS9vcHJvZl9zdGFydF91dGlsLmNwcDogcmVtb3ZlIHVwdGltZSBwcmV0dHkgcHJpbnRpbmcuCisJSXQncyBicm9rZW4gZm9yIDIuNSBhbmQgdWdseSBjb2RlCisKKzIwMDMtMDctMjEgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogZ3VpL29wcm9mX3N0YXJ0Lmg6CisJKiBndWkvb3Byb2Zfc3RhcnQuY3BwOiB1c2UgYSBkZWZhdWx0IGV2ZW50IGlmIG5vCisJZXZlbnRzIGFyZSBzZXQgeWV0CisKKzIwMDMtMDctMjAgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIG00L2NvbXBpbGVyb3B0aW9uLm00OiBmaXggZm9yIGF1dG9jb25mIDIuMTMKKworMjAwMy0wNy0xOSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogZ3VpL29wcm9mX3N0YXJ0LmNwcDoKKwkqIGxpYnBwL2Zvcm1hdF9vdXRwdXQuY3BwOgorCSogbGlicHAvZm9ybWF0X291dHB1dC5oOgorCSogcHAvb3Bhbm5vdGF0ZS5jcHA6CisJKiBwcC9vcHJlcG9ydF9vcHRpb25zLmNwcDogbWlub3IgdGlkeQorCisyMDAzLTA3LTE5ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBndWkvb3Byb2Zfc3RhcnQuY3BwOiBSVEMgbW9kZSB3YXMgbm90IHdvcmtpbmcKKworMjAwMy0wNy0xNiAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogZ3VpL29wcm9mX3N0YXJ0X2NvbmZpZy5oOgorCSogZ3VpL29wcm9mX3N0YXJ0X2NvbmZpZy5jcHA6IHJlbW92ZSBkZWFkIGNvZGUsIGZpeCBrZXJuZWxfb25seSByZWFkCisKKzIwMDMtMDctMTYgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogdXRpbHMvb3Bjb250cm9sOiBmaXggdHlwbyB0aGF0IHdhcyBwYXJ0bHkgYnJlYWtpbmcKKwlDUFVfVElNRVJfSU5UCisKKzIwMDMtMDctMTYgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogZ3VpL29wcm9mX3N0YXJ0Lmg6CisJKiBndWkvb3Byb2Zfc3RhcnQuY3BwOiBmaXhlcyBmb3IgQ1BVX1RJTUVSX0lOVAorCisyMDAzLTA3LTE2ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGd1aS91aS9vcHJvZl9zdGFydC5iYXNlLnVpOiByZW1vdmUgYWRkL3JlbW92ZSBldmVudCBidXR0b25zLAorCWZpeCByZXNpemUgd2VpcmRuZXNzCisKKwkqIGd1aS9vcHJvZl9zdGFydC5oOgorCSogZ3VpL29wcm9mX3N0YXJ0LmNwcDogcmVtb3ZlIGFkZC9yZW1vdmUgZXZlbnQgYnV0dG9ucywgYWxsb3cKKwlzaG9ydC1mb3JtIGV2ZW50IGRlc2NyaXB0aW9ucworCisyMDAzLTA3LTE1ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBndWkvcGVyc2lzdGVudF9jb25maWcuaDogcmVtb3ZlCisJKiBndWkvb3Byb2Zfc3RhcnQuaDoKKwkqIGd1aS9vcHJvZl9zdGFydC5jcHA6IGRlYnVnLCByZW1vdmUgZGVhZCBjb2RlLCB3b3JrcyBiZXR0ZXIgbm93LCBzZWUKKwkgIFRPRE8KKworMjAwMy0wNy0xNSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogZ3VpL29wcm9mX3N0YXJ0Lmg6CisJKiBndWkvb3Byb2Zfc3RhcnQuY3BwOgorCSogZ3VpL29wcm9mX3N0YXJ0X3V0aWwuY3BwOiByZS1lbmFibGUgcGFydGlhbGx5IHRoZSBndWksIHNvcnRhIG9mCisJICB3b3JraW5nIGlmIGNhdXRpb3Vsc3kgdXNlZAorCisyMDAzLTA3LTE1ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGd1aS91aS9vcHJvZl9zdGFydF9iYXNlLnVpOgorCSogZ3VpL29wcm9mX3N0YXJ0Lmg6CisJKiBndWkvb3Byb2Zfc3RhcnQuY3BwOiBzb21lIHN0ZXBzIHRvd2FyZHMgZml4aW5nIGd1aSBmb3IKKwl0aGUgbmV3IGV2ZW50cyBzdHVmZgorCisyMDAzLTA3LTE1ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGxpYm9wL29wX2V2ZW50cy5oOgorCSogbGlib3Avb3BfZXZlbnRzLmM6IGFkZCBvcF9kZWZhdWx0X2V2ZW50CisKKwkqIHV0aWxzL29wX2hlbHAuYzogbW92ZSBkZWZhdWx0IGV2ZW50IHN0dWZmIHRvIGxpYm9wLAorCWZpeCAtYyBvcHRpb24KKworMjAwMy0wNy0xNSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiB1dGlscy9vcF9oZWxwLmM6IGZpeCBkZWZhdWx0IFJUQyBldmVudCB0byBiZQorCSJSVENfSU5URVJSVVBUUyIKKworMjAwMy0wNy0xNSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogdXRpbHMvb3Bjb250cm9sCisJKiBldmVudHMvcnRjLi5ldmVudHM6IHVzZSBSVENfSU5URVJSVVBUUyBhcyBldmVudCBuYW1lCisKKzIwMDMtMDctMTUgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGRhZW1vbi9vcGRfc2FtcGxlX2ZpbGVzLmM6IEM4OSBjb21waWxlIGZpeAorCisyMDAzLTA3LTE1ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIHV0aWxzL29wY29udHJvbDoKKwkqIHV0aWxzL29wX2hlbHAuYzogbW92ZSB0aGUgZGVmYXVsdCBldmVudCBzdHJpbmdzIGludG8KKwlvcF9oZWxwLmMgaW5zdGVhZCBvZiBpbiBvcGNvbnRyb2wKKworMjAwMy0wNy0xNSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBkb2Mvb3Byb2ZpbGUueG1sOiBkb2N1bWVudCBldmVudCBuYW1lIGZvciB0aW1lciBpbnRlcnJ1cHQKKworCSogZGFlbW9uL29wZF9zYW1wbGVfZmlsZXMuYzogaGFuZGxlIENQVV9USU1FUl9JTlQKKworCSogdXRpbHMvb3BfaGVscC5jOiBmaXggYSBjb3JlIGR1bXAKKworMjAwMy0wNy0xMyAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogZGFlbW9uL29wZF9pbWFnZS5jOiB2ZXJicHJpbnRmKCkgd2hlbiBzdGFydGluZyByZWFkaW5nIGJ1ZmZlciBub3QKKwkgIHByaW50ZgorCisyMDAzLTA3LTEyICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBmcm9tIEJSQU5DSF9DQUxMR1JBUEg6CisJKiBkYWVtb24vb3BkX2ltYWdlLmM6IHByaW50ZiAtPiB2ZXJicHJpbnRmLCBmaXggY29tbWVudAorCSogZGFlbW9uL29wZF9rZXJuZWwuYzoga2VybmVsL21vZHVsZSBzYW1wbGVzIHN0YXRpc3RpY3Mgd2FzIHdyb25nCisKKwkqIGRhZW1vbi9vcGRfaW1hZ2UuYzoKKwkqIGRhZW1vbi9vcGRfaW1hZ2UuaDoKKwkqIGRhZW1vbi9vcGRfa2VybmVsLmM6CisJKiBkYWVtb24vb3BkX2tlcm5lbC5oOiBpbXBvcnQgY2xlYW51cCBmcm9tIGJyYW5jaCwgbWFpbmx5IGRvbid0IGhhbmRsZQorCSAgc2FtcGxlcyBpbiBvcGRfa2VybmVsLmMgYnV0IHJldHVybiAoY3JlYXRpbmcgaWYgbmVjZXNzYXJ5KSBhbgorCSAgb3BkX2ltYWdlIHN0cnVjdCB3aGVyZSB0aGUgc2FtcGxlIG11c3QgZ28gYW5kIGxldCBvcGRfaW1hZ2UgY2FsbGVyCisJICBpbiBvcGRfaW1hZ2UuYyBkbyBzYW1wbGUgaW5zZXJ0aW9uCisKKzIwMDMtMDctMTEgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIHV0aWxzL29wY29udHJvbDogc2hvd3MgYmFzZW5hbWUgJDAgd2l0aCAtLXZlcnNpb24KKwkqIGxpYnBwL29wX2hlYWRlci5jcHA6IGZvcm1hdGluZworCQorMjAwMy0wNy0xMSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogdXRpbHMvb3Bjb250cm9sOiBkb24ndCB0cnkgdG8gc2F2ZSBjdXJyZW50IGlmIHRoZSBkaXJlY3RvcnkgZG9lc24ndAorCSAgZXhpc3QKKworMjAwMy0wNy0xMSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogbGlidXRpbCsrL3N0cmVhbV91dGlsLmg6CisJKiBsaWJ1dGlsKysvc3RyZWFtX3V0aWwuY3BwOiBuZXcgZmlsZSwgaW9fc3RhdGUoKSBzYXZlIG9iamVjdAorCSogbGlidXRpbCsrL01ha2VmaWxlLmFtOiBoYW5kbGUgbmV3IGZpbGUKKwkqIGxpYnV0aWwrKy9vcF9iZmQuY3BwOgorCSogcHAvb3ByZXBvcnQuY3BwOgorCSogbGlicHAvb3BfaGVhZGVyLmNwcDogdXNlIGlvX3N0YXRlCisKKzIwMDMtMDctMDkgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIG1vZHVsZS94ODYvb3BfbW9kZWxfcDQuYzogcmVmbGVjdCBpbnRlbCBkb2N1bWVudGF0aW9uIGZpeC4KKworMjAwMy0wNy0wOCAgV2lsbCBDb2hlbiAgPHdjb2hlbkByZWRoYXQuY29tPgorCisJKiBkYWVtb24vb3BkX2tlcm5lbC5jOiBIYW5kbGUgL3Byb2MvbW9kdWxlcyBmb3JtYXQuCisJCisyMDAzLTA3LTA4ICBXaWxsIENvaGVuICA8d2NvaGVuQHJlZGhhdC5jb20+CisKKwkqIGRvYy9vcHJvZmlsZS54bWw6CisJKiBjb25maWd1cmUuaW46IC0tZW5hYmxlLWdjb3Ygb3B0aW9uIGFuZCBkb2N1bWVudGF0aW9uLgorCisyMDAzLTA3LTA4ICBXaWxsIENvaGVuICA8d2NvaGVuQHJlZGhhdC5jb20+CisKKwkqIHV0aWxzL29wY29udHJvbDogQ29ycmVjdCBQNCBkZWZhdWx0IGV2ZW50LgorCisyMDAzLTA2LTAzICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGZyb20gQlJBTkNIX0NBTExHUkFQSAorCSogbGliZGIvb2RiX2hhc2guaDoKKwkqIGxpYmRiL2RiX21hbmFnZS5jOgorCSogbGliZGIvZGJfaW5zZXJ0LmM6IG5hbWVzcGFjZSBzYWZldHkKKworCSogbGlicHAvcGFydGl0aW9uX2ZpbGVzLmNwcDoKKwkqIGxpYnBwL3Byb2ZpbGUuY3BwOiBzcGFjaW5nLCBhZGQgYSBGSVhNRQorCisyMDAzLTA3LTA3ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBwcC9vcGFubm90YXRlLmNwcDoKKwkqIHBwL29wZ3Byb2YuY3BwOgorCSogcHAvb3ByZXBvcnQuY3BwOiBjbGVhbnVwIHdhbGtpbmcgdGhyb3VnaCBtdWx0aW1hcCB3aXRoIGEKKwkgIHBhaXI8aXRlcmF0b3IsIGl0ZXJhdG9yPgorCisyMDAzLTA3LTA1ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBkYWVtb24vb3BkX2ltYWdlLmM6CisJKiBsaWJkYi9kYl9pbnNlcnQuYzogNjQgYml0cyBhcmNoIGNvbXBpbGUgZml4LCB0aGFua3MgdG8gRmFsayBIdWVmZm5lcgorCSA8ZmFsa0BkZWJpYW4ub3JnPgorCisyMDAzLTA3LTAyICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBwcC9vcHJlcG9ydC5jcHA6IGhvbm9yIG9wdGlvbnM6OnNob3dfaGVhZGVyCisKKzIwMDMtMDYtMzAgIEdyYXlkb24gSG9hcmUgIDxncmF5ZG9uQHJlZGhhdC5jb20+CisKKwkqIGxpYnBwL29wX2hlYWRlci5jcHA6IEhhbmRsZSBwcmludGluZyBtdWx0aXBsZSBiaXRtYXNrIHZhbHVlcy4KKworMjAwMy0wNi0xOSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBkb2MvTWFrZWZpbGUuYW06IGZpeCBtYWtlIGRpc3RjaGVjaworCisyMDAzLTA2LTE4ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIHBwL29wYW5ub3RhdGVfb3B0aW9ucy5jOiBoaWRlIHRoZSB1bmhhbmRsZWQKKwktLWJhc2UtZGlyIG9wdGlvbgorCisyMDAzLTA2LTE4ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIHBwL01ha2VmaWxlLmFtOiBkb24ndCBidWlsZCBvcGRpZmYKKworMjAwMy0wNi0xNyAgV2lsbCBDb2hlbiAgPHdjb2hlbkByZWRoYXQuY29tPgorCisJKiBkYWVtb24vb3BkX2Nvb2tpZS5oOiBBZGQgczM5MCBzeXNjYWxsIHZhbHVlLgorCQorMjAwMy0wNi0xNyAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiB1dGlscy9vcGNvbnRyb2w6IGRvbid0IGFjY2VwdCAiLXIiIC0gaXQncyB0b28gZWFzeSB0byB0eXBvCisKKzIwMDMtMDYtMTcgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogZG9jL3NyY2RvYy9Eb3h5ZmlsZTogcmVtb3ZlZAorCisJKiBkb2Mvc3JjZG9jL0RveHlmaWxlLmluOgorCSogY29uZmlndXJlLmluOiBnZW5lcmF0ZSBkb3h5Z2VuIHZlcnNpb24gbnIuIGF1dG9tYXRpY2FsbHkKKworMjAwMy0wNi0xNyAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogbGliZGIvZGJfaW5zZXJ0LmNwcDogbWlzc2luZyBpbml0aWFsaXphdGlvbiBvZiBlcnJvciBtZXNzYWdlIG9uCisJICBlcnJvciBwYXRoCisKKzIwMDMtMDYtMTcgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogdXRpbHMvb3Bjb250cm9sOiBhY2NlcHQgc29tZSBzaG9ydCBmb3JtcyBmb3IgY29tbW9uCisJb3BlcmF0aW9ucworCisyMDAzLTA2LTE3ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIHV0aWxzL29wY29udHJvbDogYWNjZXB0IC0tZm9vIGJsYWggYXMgd2VsbCBhcworCS0tZm9vPWJsYWgKKworMjAwMy0wNi0xNiAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiB1dGlscy9vcGNvbnRyb2w6ICJvcGNvbnRyb2wiIHdpbGwgc2hvdyB1c2FnZQorCWluc3RlYWQgb2YgZG9pbmcgbm90aGluZworCisyMDAzLTA2LTE2ICBXaWxsIENvaGVuICA8d2NvaGVuQG5jLnJyLmNvbT4KKworCSogbGliYWJpL2FiaS5jcHA6CisJKiBsaWJhYmkvb3BfaW1wb3J0LmNwcDogQWRkIHJlcXVpcmVkIGluY2x1ZGUgZm9yIGNhc3NlcnQuCisKKzIwMDMtMDYtMTYgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogZXZlbnRzL3g4Ni02NC5oYW1tZXIudW5pdF9tYXNrczogcmVtb3ZlIHNvbWUKKwlib2d1cyBGSVhNRXMKKworMjAwMy0wNi0xNSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBSRUFETUU6IGZpeCBhdXRvZ2VuLnNoIGxpbmUKKworMjAwMy0wNi0xNSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBkYWVtb24vb3BkX2ltYWdlLmM6IDY0IGJpdCBmaXhlcworCisyMDAzLTA2LTE1ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIHV0aWxzL29wX2hlbHAuYzogYzg5IGZpeAorCisyMDAzLTA2LTE1ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGRhZW1vbi9vcGRfaW1hZ2UuYzogYzg5IGZpeAorCisyMDAzLTA2LTE1ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGRvYy9vcHJvZmlsZS54bWw6IGRvY3VtZW50IC0tZXZlbnQKKworCSogdXRpbHMvb3Bjb250cm9sOgorCSogdXRpbHMvb3BfaGVscC5jOiBhbGxvdyB1bml0IG1hc2ssIGtlcm5lbCwgdXNlciB0byBiZQorCW9wdGlvbmFsLiBWZXJpZnkgbm90IHRvbyBtYW55IGV2ZW50cyBhcmUgcGFzc2VkLgorCisyMDAzLTA2LTE1ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGxpYm9wL29wX2NwdV90eXBlLmM6IGZpeCBucl9jb3VudGVycyBjcHUgdHlwZSBjaGVjaworCisJKiB1dGlscy9vcF9oZWxwOiBpbXBsZW1lbnQgLS1jaGVja19ldmVudHMsIGV2ZW50IHZhbGlkYXRpb24KKwlhbmQgY291bnRlciBhbGxvY2F0aW9uCisKKwkqIHV0aWxzL29wY29udHJvbDogdXNlIHRoZSBhYm92ZSwgaW1wbGVtZW50IC0tZXZlbnQ9ZGVmYXVsdAorCisyMDAzLTA2LTE0ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGRhZW1vbi9vcGRfaW1hZ2UuYzogZml4IGEgc3R1cGlkIGVycm9yIGluIG15IHByZXZpb3VzIFRHSUQgcGF0Y2gKKworMjAwMy0wNi0xMiAgR3JheWRvbiBIb2FyZSAgPGdyYXlkb25AcmVkaGF0LmNvbT4KKworCSogbGlib3Avb3BfZXZlbnRzLmMgKG9wX2NoZWNrX2V2ZW50cyk6IENoZWNrIGJpdG1hc2tzIGFzIHdlbGwgYXMgCisJZXhjbHVzaXZlIHZhbHVlcywgZm9yIHVuaXQgbWFza3MuCisKKzIwMDMtMDYtMTIgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogZGFlbW9uL29wZF9pbWFnZS5jOiB3ZSB3ZXJlIG5vdCBoYW5kbGluZyBhIHRydW5jYXRlZAorCVRHSUQgZW50cnkgcHJvcGVybHkKKworMjAwMy0wNi0xMiAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBsaWJ1dGlsKysvdW5pcXVlX3N0b3JhZ2UuaDogbWlzc2luZyB0eXBlbmFtZQorCisyMDAzLTA2LTExICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBwcC9vcGFubm90YXRlX29wdGlvbnMuY3BwOiB0eXBvIGluIG9wdGlvbiBuYW1lCisKKzIwMDMtMDYtMTEgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGxpYnV0aWwrKy9vcF9iZmQuY3BwOiBib3Jpbmdfc3ltYm9sKCkgbmV3IHRvIGdldCBhIGJldHRlciBjaG9pY2UKKwl3aGVuIGVsaW1pbmF0aW5nIHN5bWJvbCBhdCBpZGVudGljYWwgdm1hCisKKzIwMDMtMDYtMTEgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIHV0aWxzL29wY29udHJvbDogZml4IHJ0YyBvcHRpb24gY2hlY2tpbmcsIGJ1ZyBhZGRlZCBhZnRlciAwLjUuMywKKwlubyBiaWcgZGVhbAorCisyMDAzLTA2LTExICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBsaWJyZWdleC9vcF9yZWdleC5jcHA6CisJKiBsaWJwcC9wcm9maWxlLmNwcDogY29tcGlsZSBmaXgsIHRyZWUgd2FzIGJyb2tlbiBieSBteSBwcmV2aW91cyBwYXRjaAorCisyMDAzLTA2LTExICBKYXNvbiBZZWggIDxqYXNvbi55ZWhAYW1kLmNvbT4KKworCSogZXZlbnRzL2kzODYuYXRobG9uLmV2ZW50czogYWRkIENQVV9DTEtfVU5IQUxURUQKKworCSogdXRpbHMvb3Bjb250cm9sOiB1c2UgdGhlIGFib3ZlIGJ5IGRlZmF1bHQKKworCSogZXZlbnRzL3g4Ni02NC5oYW1tZXIuZXZlbnRzOgorCSogZXZlbnRzL3g4Ni02NC5oYW1tZXIudW5pdF9tYXNrczogdmFyaW91cyBmaXhlcworCisyMDAzLTA2LTExICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBsaWJwcC9vcF9oZWFkZXIuY3BwOgorCSogbGlicHAvcHJvZmlsZS5jcHA6CisJKiBsaWJwcC9wcm9maWxlX3NwZWMuY3BwOgorCSogbGlicHAvc3ltYm9sX3NvcnQuY3BwOgorCSogbGlicmVnZXgvb3BfcmVnZXguY3BwOgorCSogbGlidXRpbCsrL29wX2JmZC5jcHA6IHVzZSBleGNlcHRpb24gcmF0aGVyIGV4aXQoRVhJVF9GQUlMVVJFKSBpbgorCWxpYnJhcnkgY29kZQorCisyMDAzLTA2LTExICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGRhZW1vbi9vcGRfaW1hZ2UuYzogZnV0dXJlLXByb29mIHRoZSBjb2RlIGhhbmRsZXJzCisKKzIwMDMtMDYtMTEgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIHBwL29wYW5ub3RhdGUuY3BwOiBvdXRwdXRfYXNtKCkgYXZvaWQgb3V0cHV0IHdoZW4gdGhlIHNldCBvZiBzZWxlY3RlZAorCXN5bWJvbHMgZG9lc24ndCBjb250YWluIGFueSBzYW1wbGVzCisKKzIwMDMtMDYtMTEgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGxpYnV0aWwrKy91bmlxdWVfc3RvcmFnZS5oOiB3ZSBkb24ndCBuZWVkIHRvIGNoZWNrIGlmIGtleSBpcyBwcmVzZW50CisJICBiZWZvcmUgdHJ5aW5nIHRvIGluc2VydCBpdAorCisyMDAzLTA2LTEwICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBsaWJwcC9uYW1lX3N0b3JhZ2UuaDogbWlub3IgdGlkeQorCSogbGlidXRpbCsrL3VuaXF1ZV9zdG9yYWdlLmg6IHNtYWxsIGVmZmljaWVuY3kgaW1wcm92ZW1lbnQKKworMjAwMy0wNi0wOSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBwcC9NYWtlZmlsZS5hbToKKwkqIGxpYnV0aWwvTWFrZWZpbGUuYW06IGZpeCBtYWtlIGRpc3RjaGVjaworCisyMDAzLTA2LTA5ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGxpYnBwL29wcF9zeW1ib2wuaDogcmVuYW1lIHRvIC4uLgorCisJKiBsaWJwcC9zeW1ib2wuaDogLi4uIHRoaXMKKworCSogbGlicHAvTWFrZWZpbGUuYW06CisJKiBsaWJwcC9mb3JtYXRfb3V0cHV0Lmg6CisJKiBsaWJwcC9mb3JtYXRfb3V0cHV0LmNwcDoKKwkqIGxpYnBwL3Byb2ZpbGVfY29udGFpbmVyLmg6CisJKiBsaWJwcC9wcm9maWxlX2NvbnRhaW5lci5jcHA6CisJKiBsaWJwcC9zYW1wbGVfY29udGFpbmVyLmg6CisJKiBsaWJwcC9zYW1wbGVfY29udGFpbmVyLmNwcDoKKwkqIGxpYnBwL3N5bWJvbF9mdW5jdG9ycy5oOgorCSogbGlicHAvc3ltYm9sX3NvcnQuY3BwOiBmaXggdXAgZnJvbSBhYm92ZSBhbmQgc29tZSBoZWFkZXIKKwljbGVhbnVwcworCisyMDAzLTA2LTA5ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGxpYnBwL3Byb2ZpbGUuaDogc3RkOjpwYWlyIG5vdCBwYWlyCisKKzIwMDMtMDYtMDggIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGxpYnBwL3Byb2ZpbGUuY3BwOiBkb24ndCB1bmRlcmZsb3cgc3RhcnQgb2Zmc2V0IHdoZW4gdGhlIHZtYSByYW5nZQorCSAgaXMgdW5rbm93bgorCSogcHAvb3ByZXBvcnQuY3BwOiB1c2Ugc2FtcGxlc19yYW5nZSgpIG5vdCBzYW1wbGVzX3JhbmdlKDAsIH4wKQorCisyMDAzLTA2LTA4ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBsaWJwcC9wcm9maWxlLmg6CisJKiBsaWJwcC9wcm9maWxlLmNwcDogcmVwbGFjZSBhY2N1bXVsYXRlX3NhbXBsZXMoKSBBUEkgYnkgYW4gaXRlcmF0b3IKKwkgIGludGVyZmFjZQorCSogbGlicHAvcHJvZmlsZV9jb250YWluZXIuaDoKKwkqIGxpYnBwL3Byb2ZpbGVjb250YWluZXIuY3BwOgorCSogcHAvb3ByZXBvcnQuY3BwOiB1c2UgbmV3IEFQSQorCisyMDAzLTA2LTA4ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBpbmNsdWRlL3NzdHJlYW06IHJlcGxhY2Ugb2xkIHZlcnNpb24gYnkgdGhlIG9uY2Ugc2hpcHBlZCB3aXRoCisJICAyLjk1LjMsIHNlZWtnKCkgaW4gdGhlIG9sZCB3YXMgbm90IHdvcmtpbmcKKworMjAwMy0wNi0wOCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBsaWJwcC9uYW1lX3N0b3JhZ2UuaDogZG9uJ3QgbmVlZCB0byBkZWZpbmUgdGhlIHRhZyBzdHJ1Y3RzCisKKwkqIGxpYnV0aWwrKy91bmlxdWVfc3RvcmFnZS5oOiBmaXggdGhlIGNvbW1lbnRzLAorCW1ha2UgZ2V0KCkgcHVibGljCisKKzIwMDMtMDYtMDggIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGxpYnBwL3Byb2ZpbGVfY29udGFpbmVyLmNwcDoKKwkqIGxpYnV0aWwrKy9zdHJpbmdfbWFuaXAuY3BwOiBnY2MgMi45MS42NiBmaXgKKworMjAwMy0wNi0wOCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBsaWJwcC9uYW1lX3N0b3JhZ2UuaDoKKwkqIGxpYnBwL25hbWVfc3RvcmFnZS5jcHA6CisJKiBsaWJwcC9vcHBfc3ltYm9sLmg6CisJKiBsaWJwcC9wcm9maWxlX2NvbnRhaW5lci5jcHA6CisJKiBsaWJwcC9zeW1ib2xfZnVuY3RvcnMuY3BwOgorCSogbGlidXRpbCsrL3VuaXF1ZV9zdG9yYWdlLmg6IGRvbid0IGRlcml2ZSBmcm9tIEkoKQorCWF0IGFsbCBmb3IgaWRfdmFsdWUsIGl0J3Mgbm90IG5lZWRlZC4gSGlkZSAuaWQgYW5kCisJcHJvdmlkZSBvcGVyYXRvcjwoKSwgb3BlcmF0b3I9PSgpLCBvcGVyYXRvciE9KCksIGFuZAorCXNldCgpCisKKzIwMDMtMDYtMDggIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogbGlidXRpbCsrL3VuaXF1ZV9zdG9yYWdlLmg6IG1ha2Ugc29tZSBvZgorCWlkX3ZhbHVlIG9ubHkgdmlzaWJsZSB0byB1bmlxdWVfc3RvcmFnZS4KKworMjAwMy0wNi0wOCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBsaWJwcC9uYW1lX3N0b3JhZ2UuaDoKKwkqIGxpYnV0aWwrKy91bmlxdWVfc3RvcmFnZS5oOiBtb3ZlIHRoZSBJRCBjbGFzcworCWludG8gdW5pcXVlX3N0b3JhZ2UsIGFuZCBtYWtlIGl0IGRlcml2ZSBmcm9tIHRoZQorCXRlbXBsYXRlIHBhcmFtZXRlciwgdG8gZ2l2ZSBzaW1wbGVyIHR5cGUgc2FmZSBzdXBwb3J0CisKKzIwMDMtMDYtMDggIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogbGlidXRpbCsrL01ha2VmaWxlLmFtOgorCSogbGlidXRpbCsrL3VuaXF1ZV9zdG9yYWdlLmg6IGFkZCBuZXcgdGVtcGxhdGUgZm9yCisJdW5pcXVlIHN0b3JhZ2Ugb2YgdmFsdWVzCisKKwkqIGxpYnBwL25hbWVfc3RvcmFnZS5oOgorCSogbGlicHAvbmFtZV9zdG9yYWdlLmNwcDogdXNlIGl0CisKKzIwMDMtMDYtMDcgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGxpYnBwL3Byb2ZpbGVfY29udGFpbmVyLmNwcDogZml4IG9yZGVyIG9mIGZpbGUgb3V0cHV0IHdpdGggb3Bhbm5vdGF0ZQorCS0tc291cmNlIHRvIGJlIGNvbnNpc3RlbnQgd2l0aCBvdGhlciB0b29scworCisyMDAzLTA2LTA3ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGxpYnBwL3Byb2ZpbGVfY29udGFpbmVyLmNwcDogZml4IG9wZXJhdG9yPAorCisyMDAzLTA2LTA3ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBsaWJwcC9wcm9maWxlLmg6CisJKiBsaWJwcC9wcm9maWxlLmNwcDogY2hhbmdlIEFQSSB0byB3YWxrIHRocm91Z2ggdm1hIHdpdGggbm9uIHplcm8KKwlzYW1wbGVzIGNvdW50IHJhdGhlciBsb29raW5nIGZvciBhbGwgdm1hLiBUaGlzIGlzIG5vdCB2ZXJ5IGNsZWFuLCBhbgorCWl0ZXJhdG9yIGludGVyZmFjZSB3aWxsIGJlIHBlcmhhcHMgYSBiZXR0ZXIgaWRlYS4gTWVhc3VyZXMgc2hvd3MgaXQncworCXRvIGRvIGl0IHNvIGZvciBub3cgSSBhcHBseSBpdC4KKwkqIGxpYnBwL3Byb2ZpbGVfY29udGFpbmVyLmNwcDogdXBkYXRlIGFjY29yZGluZyB0byBhYm92ZSBjaGFuZ2UuCisKKzIwMDMtMDYtMDcgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGxpYnBwL3Byb2ZpbGVfY29udGFpbmVyLmg6CisJKiBsaWJwcC9wcm9maWxlX2NvbnRhaW5lci5jcHA6CisJKiBsaWJwcC9zeW1ib2xfY29udGFpbmVyLmg6CisJKiBsaWJwcC9zeW1ib2xfY29udGFpbmVyLmNwcDogcmVtb3ZlIGRlYWQgYXBpCisJICBmaW5kX3N5bWJvbChzdHJpbmcgc3ltYm9sX25hbWUpCisKKzIwMDMtMDYtMDcgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGxpYnBwL25hbWVfc3RvcmFnZS5oOgorCSogbGlicHAvbmFtZV9zdG9yYWdlLmNwcDoKKwkqIGxpYnBwL3Byb2ZpbGVfY29udGFpbmVyLmNwcDoKKwkqIGxpYnBwL3Byb2ZpbGVfY29udGFpbmVyLmg6CisJKiBsaWJwcC9zYW1wbGVfY29udGFpbmVyLmg6CisJKiBsaWJwcC9zYW1wbGVfY29udGFpbmVyLmNwcDoKKwkqIGxpYnBwL3N5bWJvbF9jb250YWluZXIuaDoKKwkqIGxpYnBwL3N5bWJvbF9jb250YWluZXIuY3BwOgorCSogcHAvb3Bhbm5vdGF0ZS5jcHA6IHJlcGxhY2Ugc29tZSB1c2Ugb2Ygc3RyaW5nIGZpbGVuYW1lIGJ5CisJICBkZWJ1Z19uYW1lX2lkCisKKzIwMDMtMDYtMDUgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogZGFlbW9uL01ha2VmaWxlLmFtOgorCSogZGFlbW9uL29wZF9rZXJuZWwuYzoKKwkqIGRhZW1vbi9wX21vZHVsZS5oOiByZW1vdmUgcF9tb2R1bGUuaCwgdW51c2VkCisKKwkqIGRhZW1vbi9vcGRfY29va2llLmg6IHVzZSBfX05SX2xvb2t1cF9kY29va2llIGFuZAorCXVzZSBvdXIgZGVmaW5pdGlvbnMgb25seSBpZiBpdCdzIG5vdCBkZWZpbmVkCisKKwkqIGRhZW1vbi9vcGRfaW1hZ2UuYzoKKwkqIGRhZW1vbi9vcGRfa2VybmVsLmM6CisJKiBkYWVtb24vb3BkX3NhbXBsZV9maWxlcy5jOgorCSogZGFlbW9uL29wcm9maWxlZC5jOiBwZWRhbnRyeQorCisJKiBsaWJhYmkvb3BfaW1wb3J0LmNwcDoKKwkqIGxpYmFiaS9hYmlfdGVzdC5jcHA6IGZpeCBidWlsZCBmcm9tIG9kYiBjaGFuZ2UKKworCSogbGlib3Avb3BfY29uZmlnLmg6IG1vdmUgTlJfQ1BVUyB0byAuLi4KKworCSogbGlib3Avb3BfY29uZmlnXzI0Lmg6IC4uLiBoZXJlCisKKwkqIGxpYm9wL29wX2h3X2NvbmZpZy5oOiByZW1vdmUgdW51c2VkIE9QX0NPVU5UX01BWAorCisyMDAzLTA2LTAzICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBsaWJwcC9vcF9oZWFkZXIuY3BwOgorCSogbGlicHAvcHJvZmlsZS5jcHA6CisJKiBkYWUvb3BkX3Byb2MuYzoKKwkqIGRhZS9vcGRfc2FtcGxlX2ZpbGVzLmM6CisJKiBkYWVtb24vb3BkX2ltYWdlLmM6CisJKiBkYWVtb24vb3BkX3NhbXBsZV9maWxlcy5jOgorCSogbGliZGIvb2RiX2hhc2guaDoKKwkqIGxpYmRiL2RiX2luc2VydC5jOgorCSogbGliZGIvZGJfbWFuYWdlLmM6CisJKiBsaWJkYi9kYl90ZXN0LmM6IGVycm9yIG1lc3NhZ2UgaXMgbm93IGEgZmllbGQgb2YgYSBzYW1wbGVzX29kYl90CisKKzIwMDMtMDYtMDMgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogbGlidXRpbCsrL2NoaWxkX3JlYWRlci5jcHA6CisJKiBsaWJhYmkvYWJpLmNwcDoKKwkqIGxpYmFiaS9hYmkuaDoKKwkqIGxpYmFiaS9hYmlfdGVzdC5jcHA6CisJKiBsaWJhYmkvb3BfYXBpLmg6CisJKiBsaWJhYmkvb3BfYWJpLmNwcDoKKwkqIGxpYmFiaS9vcF9pbXBvcnQuY3BwOiBwZWRhbnRyeSwgcmVtb3ZlIHVudXNlZCBjb2RlCisKKzIwMDMtMDYtMDEgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGRhZS9vcHJvZmlsZWQuYzoKKwkqIGxpYm9wL29wcm9maWxlZC5jOgorCSogbGlib3Avb3BfY3B1X3R5cGUuYzoKKwkqIG1vZHVsZS9vcHJvZmlsZS5jOgorCSogbW9kdWxlL29wcm9maWxlLmg6CisJKiBwcC9vcGRpZmYuY3BwOiBtb3JlIHN0YXRpYyBkYXRhIGFuZCBmdW5jdGlvbgorCisyMDAzLTA1LTMxICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBndWkvb3Byb2Zfc3RhcnRfdXRpbC5oOgorCSogbGliZGIvZGJfc3RhdC5jOgorCSogbGliZGIvb2RiX2hhc2guaDoKKwkqIGxpYnBwL2Zvcm1hdF9vdXRwdXQuaDoKKwkqIGxpYnBwL2xvY2F0ZV9pbWFnZS5oOgorCSogbGlicHAvbmFtZV9zdG9yYWdlLmg6CisJKiBsaWJwcC9wYXJ0aXRpb25fZmlsZXMuaDoKKwkqIGxpYnBwL3Byb2ZpbGUuaDoKKwkqIGxpYnV0aWwrKy9vcF9iZmQuaDoKKwkqIGxpYnV0aWwrKy9vcF9iZmQuY3BwOiBpbXByb3ZlIGRveHlnZW4gY29tbWVudAorCisyMDAzLTA1LTMxICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBjb25maWd1cmUuaW46IHVzZSBBQ19ERUZJTkVfVU5RVU9URUQoKSB0byBkZWZpbmUgdmVyc2lvbiBzdHJpbmcKKwkgIGluIGNvbmZpZy5oIG5vdCBpbiB2ZXJzaW9uLTEuaAorCSogTWFrZWZpbGUuYW06IGRpc3RjbGVhbi1sb2NhbDogaXMgbm8gbG9uZ2VyIHVzZWQKKwkqIHZlcnNpb24tMS5oLmluOiBkZWxldGUKKwkqIGxpYnV0aWwvb3BfdmVyc2lvbi5oOgorCSogbGlidXRpbC9vcF92ZXJzaW9uLmM6IG5ldyBmaWxlOiBwYWNrYWdlIHZlcnNpb24gb3V0cHV0CisJKiBsaWJ1dGlsL01ha2VmaWxlLmFtOgorCSogZGFlL29wcm9maWxlZC5jOgorCSogZGFlbW9uL29wcm9maWxlZC5jOgorCSogZ3VpL29wcm9mX3N0YXJ0Lmg6CisJKiBsaWJvcC9vcF9ldmVudHMuYzoKKwkqIGxpYm9wdCsrL3BvcHRfb3B0aW9ucy5jcHA6CisJKiBsaWJyZWdleC9kZW1hbmdsZV9zeWJvbC5jcHA6CisJKiBtb2R1bGUvb3Byb2ZpbGUuYzoKKwkqIHV0aWxzL29wX2hlbHAuYzogdHdlYWsgIyBpbmNsdWRlIGFjY29yZGluZworCisyMDAzLTA1LTMwICBEYW4gWmluayAgPERhbi5aaW5rQGhwLmNvbT4KKworCSogbW9kdWxlL3g4Ni9vcF9hcGljLmM6IHJlYWxseSBkaXNhYmxlIHRoZSBhcGljIGlmIGl0IHdhcyBkaXNhYmxlZAorCisyMDAzLTA1LTI5ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIHV0aWxzL29wY29udHJvbDogZG9uJ3QgYWxsb3cgLS1ydGMtdmFsdWUgaWYgbm90IFJUQyBtb2RlCisKKzIwMDMtMDUtMjcgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogbGlidXRpbCsrL3N0cmluZ19tYW5pcC5oOiBhZGQgPHN0ZGV4Y2VwdD4KKworCSogcHAvb3Bhbm5vdGF0ZS5jcHA6IHVzZSAnXG4nIG5vdCBlbmRsCisKKwkqIHBwL29wcmVwb3J0LmNwcDogdW50aWUgY291dAorCisyMDAzLTA1LTI5ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBtZXJnZSB3aXRoIHBwLWludGVyZmFjZS1icmFuY2g6IGZvbGxvd2luZyBDaGFuZ2VMb2cgd2FzIHVubWVyZ2VkCisJICB0byBicmFuY2gKKworCTIwMDMtMDUtMjcgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogY29uZmlndXJlLmluOiBvcHJvZmlsZSAwLjUuMyBpcyByZWxlYXNlZCwgYmFjayB0bworCTAuNmN2cworCisJMjAwMy0wNS0yNiAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBkb2Mvb3Byb2ZpbGUueG1sOiB1cGRhdGUgZG9jcyBmb3IgLS1uby12bWxpbnV4CisKKwkyMDAzLTA1LTI2ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGxpYm9wL29wX2ludGVyZmFjZV8yNS5oOgorCSogZGFlbW9uL29wZF9pbWFnZS5jOiBoYW5kbGUgdGdpZCBmb3IgZnV0dXJlCisJY29tcGF0aWJpbGl0eSwgZml4IGNvbXBpbGUgb24gb2xkZXIgZ2NjcworCisJMjAwMy0wNS0yNiAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBsaWJvcC9vcF9pbnRlcmZhY2VfMjUuaDogYWRkIExBU1RfQ09ERQorCisJKiBkYWVtb24vb3BkX3N0YXRzLmg6CisJKiBkYWVtb24vb3BkX3N0YXRzLmM6IGNvdW50IHNob3J0IHJlYWRzIG9mCisJYnVmZmVyIGFuZCB1bnBsYWNlYWJsZSBzYW1wbGVzCisKKwkqIGRhZW1vbi9vcGRfaW1hZ2UuYzogcmV3cml0ZSBidWZmZXIgcGFyc2luZworCWNvZGUsIGhhbmRsZSB3aW5kb3cgd2hlcmUgd2UgY2FuJ3QgcGxhY2UgYQorCXNhbXBsZQorCisJMjAwMy0wNS0yNiAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBsaWJ1dGlsKysvdXRpbGl0eS5oOiBmaXggdHlwbworCisJKiB1dGlscy9vcGNvbnRyb2w6IGZpeCB0eXBvCisKKwkyMDAzLTA1LTE2ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIHBwL2NvdW50ZXJfcHJvZmlsZS5jcHA6IHJlbW92ZSBib2d1cyBjcHUgc3BlZWQKKwljb25zaXN0ZW5jeSBjaGVjaworCisJMjAwMy0wNS0wOSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBtNC9NYWtlZmlsZS5hbToKKwkqIG00L2NvbXBpbGVyb3B0aW9uLm00OiBhZGQgYSBnZW5lcmFsaXNlZCBjb21waWxlciBvcHRpb24KKwl0ZXN0ZXIKKworCSogY29uZmlndXJlLmluOiB1c2UgaXQsIGFkZCAtZm5vLWNvbW1vbgorCisJMjAwMy0wNS0wOSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBkYWVtb24vb3Byb2ZpbGVkLmM6CisJKiBkYWUvb3Byb2ZpbGVkLmM6IHJlbW92ZSBkdXBsaWNhdGUgZGVjbGFyYXRpb24gZm91bmQKKwl2aWEgLWZuby1jb21tb24KKworCTIwMDMtMDUtMDQgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogZG9jL29wcm9maWxlLnhtbDogZml4IHZhbGlkYXRpb24gZXJyb3JzIGZyb20geG1sbGludCAtLXZhbGlkCisJCisKKzIwMDMtMDUtMjggIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGxpYnBwL3Byb2ZpbGVfc3BlYy5jcHA6IG1ha2UgaW1hZ2U6L3BhdGgvdG86aW1hZ2Ugd29ya2luZworCisyMDAzLTA1LTI4ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBsaWJ1dGlsKysvc3RyaW5nX21hbmlwLmg6CisJKiBsaWJ1dGlsKysvc3RyaW5nX21hbmlwLmNwcDogc3BlY2lhbGl6ZQorCSAgbGV4aWNhbF9jYXN0X25vX3dzPHVuc2lnbmVkIGludD4gdG8gYWNjZXB0IGhleGFkZWNpbWFsIGlucHV0CisKKwkqIHBwL2NvbW1vbl9vcHRpb24uY3BwOiBtaXNzaW5nIDw8IGVuZGwKKworMjAwMy0wNS0yNyAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogZG9jL29wcm9maWxlLnhtbDogdXBkYXRlIGV4YW1wbGUgaW4gIkludGVycHJldGluZyBwcm9maWxpbmcgcmVzdWx0cyIKKwlzZWN0aW9uCisKKzIwMDMtMDUtMjYgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogZG9jL29wcm9maWxlLnhtbDogYWRkIG5ldyBwcCB0b29scyBvcHRpb25zCisKKzIwMDMtMDUtMjYgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogZG9jL29wcmVwb3J0LjEuaW46CisJKiBkb2Mvb3BncHJvZi4xLmluOgorCSogZG9jL29wYW5ub3RhdGUuMS5pbjoKKwkqIGRvYy9vcF9oZWxwLjEuaW46IGNvbXBsZXRlCisKKzIwMDMtMDUtMjYgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogY29uZmlndXJlLmluOgorCSogZG9jL01ha2VmaWxlLmFtOgorCSogZG9jL29wcm9maWxlLjEuaW46CisJKiBkb2Mvb3BfaGVscC4xLmluOgorCSogZG9jL29wY29udHJvbC4xLmluOgorCSogZG9jL29wcmVwb3J0LjEuaW46CisJKiBkb2Mvb3Bhbm5vdGF0ZS4xLmluOgorCSogZG9jL29wZ3Byb2YuMS5pbjogcmUtb3JnYW5pc2UgYW5kIGFkZCBtYW5wYWdlcworCisyMDAzLTA1LTI2ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGRvYy9vcHJvZmlsZS54bWw6IHN0YXJ0IHRvIGRvY3VtZW50IHRoZSBwcCBpbnRlcmZhY2UKKworMjAwMy0wNS0yNiAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogcHAvb3ByZXBvcnQuY3BwOiByZW1vdmUgYXV0b21hdGljIHN3aXRjaCB0byAtLXN5bWJvbHMgbW9kZQorCisyMDAzLTA1LTI2ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBsaWJwcC9zeW1ib2xfc29ydC5oOgorCSogcHAvb3Bhbm5vdGF0ZV9vcHRpb25zLmNwcDoKKwkqIHBwL29wZ3Byb2Zfb3B0aW9ucy5jcHA6CisJKiBwcC9vcHJlcG9ydF9vcHRpb25zLmNwcDogaGFuZGxlIG1lYW5pbmdsZXNzIG9wdGlvbnMgY29tYmluYXRpb25zCisKKzIwMDMtMDUtMjYgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIHBwL29wZ3Byb2Zfb3B0aW9ucy5jcHA6IG5vIG5lZWQgdG8gdXNlIHVubWVyZ2VhYmxlX3Byb2ZpbGUgaGVyZQorCisyMDAzLTA1LTI1ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBldmVudHMvaTM4Ni5waWlpLnVuaXRfbWFza3M6IHR3ZWFrIGNvbW1lbnQsIGNoYW5nZSBkZWZhdWx0IHVuaXQgbWFzaworCSAgZm9yIGtuaSBpbnN0cnVjdGlvbiB0byAwIGFuZCB0eXBlIHRvIGV4Y2x1c2l2ZQorCisyMDAzLTA1LTI1ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBsaWJwcC9wcm9maWxlX2NvbnRhaW5lci5jcHA6IHRoaW5rbworCSogcHAvb3ByZXBvcnQuY3BwOiB0eXBvCisKKzIwMDMtMDUtMjUgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogbGlib3B0KysvcG9wdF9vcHRpb25zLmg6CisJKiBsaWJvcHQrKy9wb3B0X29wdGlvbnMuY3BwOiBvYnZpb3VzIGNsZWFudXAsCisJcmVtb3ZlIHNvbWUgZGVhZCBjb2RlCisKKzIwMDMtMDUtMjUgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGxpYnBwL2Zvcm1hdF9mbGFnczogY2ZfaW1hZ2VfbmFtZSBuZXcgY29sdW1uX2ZsYWdzIGZsYWcKKwkqIGxpYnBwL3Byb2ZpbGVfY29udGFpbmVyLmNwcDogdXNlIGFib3ZlIGZsYWcuIERvbid0IGNvbXBhcmUgYXBwX25hbWUKKwkgIGJ5IHN0cmluZyBidXQgaWQKKwkqIHBwL29wcmVwb3J0LmNwcDogaGlkZSBpbWFnZV9uYW1lIHdoZW4gdW4tbmVjZXNzYXJ5CisKKzIwMDMtMDUtMjQgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGRvYy9zcmNkb2MvRG94eWZpbGU6CisJKiBsaWJwcC9wcm9maWxlLmg6CisJKiBsaWJwcC9wcm9maWxlX2NvbnRhaW5lci5oOgorCSogbGlidXRpbCsrL3V0aWxpdHkuaDogcmVtb3ZlIGdjYyAyLjkxIG5vbmNvcHlhYmxlIGFzIGVtcHR5IGJhc2UgY2xhc3MKKwkgd29yay1hcm91bmQKKworMjAwMy0wNS0yMyAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogY29uZmlndXJlLmluOiBkbyBlYXJseSBjaGVjayBvZiBsaWJpYmVydHkKKworCSogbGlicHAvc3ltYm9sX3NvcnQuY3BwOiAyLjkxIGNvbXBpbGUgZml4CisKKzIwMDMtMDUtMjIgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGxpYnV0aWwrKy9jaGlsZF9yZWFkZXIuaDogbWlub3IgI2luY2x1ZGUgZml4CisKKzIwMDMtMDUtMjIgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGxpYnBwL25hbWVfc3RvcmFnZS5jcHA6IGRlYnVnX25hbWVfc3RvcmFnZTo6bmFtZSgpIAorCSAgcmV0dXJuIGFuIGVtcHR5IHN0cmluZyB3aGVuIGZvciB6ZXJvIGlkIHRvIGF2b2lkIGV4Y2VwdGlvbgorCisyMDAzLTA1LTIxICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBsaWJwcC9wcm9maWxlLmNwcDoKKwkqIGxpYnBwL29wX2hlYWRlci5oOgorCSogbGlicHAvb3BfaGVhZGVyLmNwcDogd2hlbiBzYW1wbGUgZmlsZSBkaWZmZXIgb3V0cHV0IHRoZSBzYW1wbGUKKwkgIGZpbGVuYW1lCisKKwkqIHBwL29wYW5ub3RhdGUuY3BwOiByZW1vdmUgc3B1cmlvdXMgb3V0cHV0CisKKwkqICovTWFrZWZpbGUuYW06CisJKiBjb25maWd1cmUuaW46IGhhbmRsZSBvdXIgb3duIE9QX0NGTEFHUywgT1BfQ1hYRkxBR1MgdG8gbGV0IHVzZXIKKwkgIGZyZWUgdG8gdXNlIG1ha2UgQ0ZMQUdTPQorCisyMDAzLTA1LTIwICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBsaWJwcC9wcm9maWxlX3NwZWMuaDoKKwkqIGxpYnBwL3Byb2ZpbGVfc3BlYy5jcHA6IHJlbW92ZSBsaWJfaW1hZ2VfZXhjbHVkZSwgdXNlIGltYWdlX2V4Y2x1ZGUKKwkgIGluc3RlYWQuIG1hdGNoKCkgSGFuZGxlIGltYWdlIGV4Y2x1c2lvbi4KKworCSogbGlicmVnZXgvc3RsLnBhdC5pbjogRklYTUUKKworCSogbGlidXRpbCsrL3N0cmluZ19tYW5pcC5oOiBjb21waWxlIGZpeAorCisyMDAzLTA1LTE5ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGxpYnV0aWwrKy9jb21tYV9saXN0Lmg6CisJKiBsaWJwcC9maWxlbmFtZV9zcGVjLmNwcDoKKwkqIGxpYnV0aWwrKy9zdHJpbmdfbWFuaXAuaDoKKwkqIGxpYnV0aWwrKy9nZW5lcmljX3NwZWMuaDogcmVuYW1lIHN0cmljdF9jb252ZXJ0PD4KKwl0byBsZXhpY2FsX2Nhc3Rfbm9fd3M8PgorCisyMDAzLTA1LTE5ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGxpYnV0aWwrKy9nZW5lcmljX3NwZWMuaDogbW92ZSBzdHJpY3RfY29udmVydDw+IHRvLi4uCisKKwkqIGxpYnV0aWwrKy9zdHJpbmdfbWFuaXAuaDogLi4uaGVyZQorCisyMDAzLTA1LTE5ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGxpYnV0aWwrKy9nZW5lcmljX3NwZWMuaDogY29tbWFfbGlzdCBpc24ndCBhIGZyaWVuZAorCWFueSBtb3JlCisKKwkqIGxpYnV0aWwrKy9jb21tYV9saXN0Lmg6IHVzZSBnZW5lcmljX3NwZWM8Pjo6bWF0Y2goKQorCWRpcmVjdGx5CisKKzIwMDMtMDUtMTkgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogbGlicHAvbmFtZV9zdG9yYWdlLmg6IHMvbmFtZV9tYXAvc3RvcmVkX25hbWVzLywgaXQncyBub3QKKwlhIG1hcCBhbnkgbW9yZS4KKworMjAwMy0wNS0xOSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogbGlicmVnZXgvbWFuZ2xlZC1uYW1lLnR4dDoKKwkqIGxpYnJlZ2V4L3N0bC5wYXQuaW46IHBhcnRpYWwgaGFuZGxpbmcgb2YgX0lkZW50aXR5PD4gYW5kCisJICBfU2VsZWN0MXN0PD4sIHBhdHRlcm4gZmFpbCBpZiB0eXBlIGFyZSB0b28gY29tcGxleAorCisyMDAzLTA1LTE5ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBsaWJwcC9mb3JtYXRfb3V0cHV0LmNwcDogc21hbGwgY2xlYW51cAorCisJKiBsaWJwcC9uYW1lX3N0b3JhZ2UuaDoKKwkqIGxpYnBwL25hbWVfc3RvcmFnZS5jcHA6IGVuc3VyZSB0eXBlIHNhZmV0eSBieSBwcm92aWRpbmcgZGlzdGluY3QKKwkgIHR5cGUgaWRlbnRpZmllciBmb3IgZWFjaCBuYW1lX3N0b3JhZ2UgYmFzZWQgY29udGFpbmVyCisKKwkqIGxpYnBwL3Byb2ZpbGVfY29udGFpbmVyLmNwcDoKKwkqIGxpYnBwL3NhbXBsZV9jb250YWluZXIuY3BwOgorCSogbGlicHAvc3ltYm9sX2Z1bmN0b3JzLmNwcDoKKwkqIGxpYnBwL3N5bWJvbF9zb3J0LmNwcDoKKwkqIGxpYnBwL29wcF9zeW1ib2wuaDogdXNlIHRoZSBuYW1lIGlkZW50aWZpZXIgYXBpCisKKwkqIGxpYnBwL29wX2hlYWRlci5jcHA6IAorCSogbGlicHAvcGFydGl0aW9uX2ZpbGVzLmNwcDogdXNlIGEgc2V0PHN0cmluZz4gbm90IGEgbmFtZV9zdG9yYWdlCisKKwkqIGxpYnBwL2Zvcm1hdF9vdXRwdXQuY3BwOiBzbWFsbCBjbGVhbnVwCisKKworMjAwMy0wNS0xOCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogbGlicHAvcGFydGl0aW9uX2ZpbGVzLmNwcDogbWVyZ2UgcGFydGl0aW9uIGVudHJ5IHdoZW4gbmVjZXNzYXJ5CisJICBmaXhpbmcgYSBjb3JuZXIgY2FzZSB3aGVuIGEgYmluYXJ5IGNhbiBiZSBhIGRlcGVuZGVudCBvciBhIHByaW1hcnkKKwkgIGltYWdlIGFuZCB3YXMgbm90IG1lcmdlZAorCisyMDAzLTA1LTE4ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBwcC9vcHJlcG9ydF9vcHRpb25zLmNwcDoKKwkqIHBwL29wYW5ub3RhdGVfb3B0aW9ucy5jcHA6IHJlbW92ZSBjb25mbGljdGluZyBvcHRpb25zIHNob3J0Y3V0CisKKzIwMDMtMDUtMTggIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGxpYnJlZ2V4L3N0bC5wYXQuaW46IGFkZCBsaXN0PFQ+Ojp7Y29uc3RffStpdGVyYXRvcgorCisyMDAzLTA1LTE3ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBsaWJwcC9uYW1lX3N0b3JhZ2UuY3BwOiBiYXNlbmFtZSgpIHJldHVybiBhbiBlbXB0eSBzdHJpbmcgZm9yIG5pbCBpZAorCisyMDAzLTA1LTE3ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBsaWJ1dGlsKysvb3BfYmZkLmNwcDogZ2V0X2xpbmVucigpIGluaXQgbGluZW5yIHRvIHplcm8KKworCSogbGlicHAvbmFtZV9zdG9yYWdlLmNwcDogZG9uJ3QgdXNlIGlkIHplcm8KKwkqIGxpYnBwL29wcF9zeW1ib2wuaDogbm93IHdlIHVzZSBpZCBhbmQgbm90IHN0cmluZyB3ZSBtdXN0IHByb3ZpZGUKKwkgIGRlZmF1bHQgY3RvciB0byBpbml0aWFsaXplIHRoZSBpZAorCSogbGlicHAvcHJvZmlsZV9jb250YWluZXIuY3BwOiBpbml0IGRlYnVnIGluZm8gZW50cnkgb25seSBpZgorCSAgZ2V0X2xpbmVucigpIHN1Y2NlZWQKKworMjAwMy0wNS0xNyAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogbGliZGIvZGJfbWFuYWdlLmM6IGJldHRlciBoYW5kbGluZyBvZiB6ZXJvIHNhbXBsZSBmaWxlIHNpemUgd2hlbgorCSAgb3BlbmluZyBpbiByZWFkIG9ubHkgbW9kZQorCisJKiBtb2R1bGUveDg2L29wX25taS5jOiBwcmludGsgZm9ybWF0IGZpeAorCisyMDAzLTA1LTE3ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIHBwL29wYW5ub3RhdGVfb3B0aW9uLmNwcDoKKwkqIHBwL29wcmVwb3J0X29wdGlvbnMuY3BwOiBjb21tYW5kIGxpbmUgY2hhbmdlcworCisyMDAzLTA1LTE3ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGxpYnBwL25hbWVfc3RvcmFnZS5oOgorCSogbGlicHAvbmFtZV9zdG9yYWdlLmNwcDogYWRkIHByZXNlbnQoKQorCisJKiBsaWJwcC9vcF9oZWFkZXIuY3BwOgorCSogbGlicHAvcGFydGl0aW9uX2ZpbGVzLmNwcDogdXNlIGEgbmFtZSBzdG9yZQorCXRvIHRyYWNrIHdoYXQgd2UndmUgd2FybmVkIGFib3V0LCBhbmQgY2xlYW4gdXAKKwl0aGUgd2FybmluZ3MgYSBiaXQKKworMjAwMy0wNS0xNiAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBsaWJ1dGlsKysvb3BfYmZkLmg6CisJKiBsaWJ1dGlsKysvb3BfYmZkLmNwcDogZXhwb3NlIGFub255bW91cyBzeW1ib2xzCisJdG8gdGhlIHdvcmxkIGFzICI/P3NlY3Rpb25uYW1lIi4gVXNlZnVsIGZvciAucGx0CisJYW5kIC5maW5pLCB3aGljaCBhcmUgcXVpdGUgY29tbW9uLgorCisJKiBsaWJwcC9uYW1lX3N0b3JhZ2UuY3BwOiBkZW1hbmdsZSBhbm9ueW1vdXMgc3ltYm9scworCW5pY2VseS4KKworMjAwMy0wNS0xNiAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBsaWJwcC9zeW1ib2xfc29ydC5jcHA6IGZpeCBpbWFnZS1zb3J0aW5nCisKKzIwMDMtMDUtMTYgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogbGlicHAvbmFtZV9zdG9yYWdlLmg6CisJKiBsaWJwcC9uYW1lX3N0b3JhZ2UuY3BwOiBtYWtlIElEIGJlIHBlci1jb250YWluZXIKKworMjAwMy0wNS0xNiAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBsaWJwcC9uYW1lX3N0b3JhZ2UuaDoKKwkqIGxpYnBwL25hbWVfc3RvcmFnZS5jcHA6IG1lcmdlIHByb2Nlc3NlZCBuYW1lcworCWludG8gb25lIHN0cmluZywgcmVtb3ZlIHRoZSBib29sZWFuCisKKzIwMDMtMDUtMTYgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogbGlicHAvbmFtZV9zdG9yYWdlLmg6CisJKiBsaWJwcC9uYW1lX3N0b3JhZ2UuY3BwOiB3aG9vcHMsIHVzZSBzdHJpbmcKKwlub3Qgc3RvcmVkX25hbWUgZm9yIHRoZSBJRCBtYXAKKworMjAwMy0wNS0xNiAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBsaWJwcC9uYW1lX3N0b3JhZ2UuaDoKKwkqIGxpYnBwL25hbWVfc3RvcmFnZS5jcHA6IHNwbGl0IGludG8gdGhyZWUKKwlzdG9yZXMgZm9yIGRlYnVnIGZpbGVuYW1lcywgc3ltYm9scywgYW5kIGltYWdlcworCisJKiBsaWJwcC9mb3JtYXRfb3V0cHV0LmNwcDoKKwkqIGxpYnBwL3Byb2ZpbGVfY29udGFpbmVyLmNwcDoKKwkqIGxpYnBwL3NhbXBsZV9jb250YWluZXIuY3BwOgorCSogbGlicHAvc3ltYm9sX2NvbnRhaW5lci5jcHA6CisJKiBsaWJwcC9zeW1ib2xfc29ydC5jcHA6CisJKiBwcC9vcGFubm90YXRlLmNwcDogY2hhbmdlcyBmcm9tIGFib3ZlCisKKzIwMDMtMDUtMTYgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogbGlicHAvTWFrZWZpbGUuYW06CisJKiBsaWJwcC9uYW1lX3N0b3JhZ2UuaDoKKwkqIGxpYnBwL25hbWVfc3RvcmFnZS5jcHA6IGFkZCBzaGFyZWQgc3RvcmFnZQorCWFuZCBjYWNoaW5nIG9mIHN5bWJvbCBhbmQgZmlsZSBuYW1lcworCisJKiBsaWJwcC9vcHBfc3ltYm9sLmg6CisJKiBsaWJwcC9mb3JtYXRfb3V0cHV0LmNwcDoKKwkqIGxpYnBwL3Byb2ZpbGVfY29udGFpbmVyLmNwcDoKKwkqIGxpYnBwL3NhbXBsZV9jb250YWluZXIuY3BwOgorCSogbGlicHAvc3ltYm9sX2NvbnRhaW5lci5jcHA6CisJKiBsaWJwcC9zeW1ib2xfY29udGFpbmVyLmg6CisJKiBsaWJwcC9zeW1ib2xfc29ydC5jcHA6CisJKiBsaWJwcC9zeW1ib2xfc29ydC5oOgorCSogcHAvb3Bhbm5vdGF0ZS5jcHA6CisJKiBwcC9vcHJlcG9ydC5jcHA6IHVzZSBpdAorCisJKiBwcC9vcGdwcm9mX29wdGlvbnMuY3BwOiBhZGQgdW51c2VkIGRlbWFuZ2xlCisJb3B0aW9ucyB0byBoYWNrLWZpeCB0aGUgYnVpbGQKKworMjAwMy0wNS0xNiAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBsaWJwcC9zeW1ib2xfc29ydC5jcHA6IGZpeCAtLXNvcnQgZGVidWcKKworMjAwMy0wNS0xNiAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBsaWJ1dGlsKysvb3BfYmZkLmg6CisJKiBsaWJ1dGlsKysvb3BfYmZkLmNwcDogcmVtb3ZlIGhhdmVfZGVidWdfaW5mbygpCisKKzIwMDMtMDUtMTYgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGxpYnBwL29wX2hlYWRlci5jcHA6IHJlbW92ZSBjcHVfc3BlZWQgY2hlY2tpbmcKKworCSogbGlidXRpbCsrL29wX2JmZC5oOgorCSogbGlidXRpbCsrL29wX2JmZC5jcHA6IGJhaWwgb3V0IGluIGdldF9saW5lbnIoKSBpZiBiaW5hcnkgZG9lc24ndAorCSAgY29udGFpbiBhbnkgZGVidWcgaW5mby4gU3BlZWQgdXAgbXkgdGVzdCBjYXNlIG9wcmVwb3J0IC0tZGVidWctaW5mbworCSAgLWwgYnkgMjUKKworMjAwMy0wNS0xNiAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBsaWJ1dGlsKysvb3BfYmZkLmNwcDogY2xlYW4gdXAgaW50ZXJlc3Rpbmdfc3ltYm9sCisJYSBiaXQKKworMjAwMy0wNS0xNiAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBsaWJ1dGlsKysvb3BfYmZkLmNwcDogbWFrZSBzdXJlIGxpbmVuciBpcworCWFsd2F5cyBzZXQgdG8gc29tZXRoaW5nCisKKwkqIGxpYnBwL29wcF9zeW1ib2wuaDogbGluZW5yIHNob3VsZCBiZSB1bnNpZ25lZAorCisJKiBsaWJwcC9wcm9maWxlX2NvbnRhaW5lci5jcHA6IHJlbW92ZSBzb21lIHVubmVlZGVkCisJY29waWVzCisJCisyMDAzLTA1LTE2ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIHBwL29wYW5ub3RhdGUuY3BwOiBzbWFsbCByZW5hbWluZworCisyMDAzLTA1LTE1ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGxpYnBwL3N5bWJvbF9jb250YWluZXIuaDoKKwkqIGxpYnBwL3N5bWJvbF9jb250YWluZXIuY3BwOiBhZGQgYmVnaW4oKSwgZW5kKCksCisJcmVtb3ZlIHN5bWJvbHNfYnlfY291bnQoKQorCisJKiBsaWJwcC9wcm9maWxlX2NvbnRhaW5lci5jcHA6IHVzZSBzeW1ib2wgY29udGFpbmVyCisJaXRlcmF0b3IgZGlyZWN0bHkgaW4gc2VsZWN0X3N5bWJvbHMoKQorCisyMDAzLTA1LTE1ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGxpYnBwL2Zvcm1hdF9vdXRwdXQuaDoKKwkqIGxpYnBwL2Zvcm1hdF9vdXRwdXQuY3BwOgorCSogbGlicHAvcHJvZmlsZV9jb250YWluZXIuaDoKKwkqIGxpYnBwL3Byb2ZpbGVfY29udGFpbmVyLmNwcDoKKwkqIGxpYnBwL3N5bWJvbF9jb250YWluZXIuaDoKKwkqIGxpYnBwL3N5bWJvbF9jb250YWluZXIuY3BwOgorCSogbGlicHAvc3ltYm9sX3NvcnQuaDoKKwkqIGxpYnBwL3N5bWJvbF9zb3J0LmNwcDoKKwkqIHBwL29wYW5ub3RhdGUuY3BwOgorCSogcHAvb3ByZXBvcnQuY3BwOgorCSogcHAvb3BncHJvZi5jcHA6IG1vdmUgc3ltYm9sX2NvbGxlY3Rpb24gdHlwZWRlZgorCSAgaW50byBnbG9iYWwgbmFtZXNwYWNlLCBhbmQgdXNlIGNvbnNpc3RlbnRseQorCisyMDAzLTA1LTE1ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGxpYnBwL2Zvcm1hdF9vdXRwdXQuaDoKKwkqIGxpYnBwL2Zvcm1hdF9vdXRwdXQuY3BwOiBhZGQgdm1hX2Zvcm1hdF82NGJpdCgpLAorCXJlbW92ZSBib29sIHBhcmFtZXRlciBmcm9tIG91dHB1dCgpCisKKwkqIHBwL29wcmVwb3J0LmNwcDogY2hhbmdlIGZyb20gYWJvdmUsIHJlZmFjdG9yIGZsYWdzCisJY29kZSBpbnRvIGdldF9mb3JtYXRfZmxhZ3MoKSBoZWxwZXIKKworMjAwMy0wNS0xMiAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogbGlicHAvZm9ybWF0X291dHB1dC5oOgorCSogbGlicHAvZm9ybWF0X291dHB1dC5jcHA6CisJKiBsaWJwcC9zeW1ib2xfc29ydC5oOgorCSogbGlicHAvc3ltYm9sX3NvcnQuY3BwOiBoYW5kbGUgcmV2ZXJzZSBzb3J0IGluIHNvcnRpbmcgbm90IGluIG91dHB1dAorCSogcHAvb3Bhbm5vdGF0ZS5jcHA6CisJKiBwcC9vcHJlcG9ydC5jcHA6IHVwZGF0ZSBhY2NvcmRpbmcKKworMjAwMy0wNS0xMiAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogbGlicHAvc3ltYm9sX3NvcnQuaDoKKwkqIGxpYnBwL3N5bWJvbF9zb3J0LmNwcDogaGFuZGxlIHNvcnQgb3JkZXIgYXMgc3BlY2lmaWVkIG9uIGNvbW1hbmQgbGluZQorCisJKiBwcC9vcGdwcm9mLmNwcDogc29ydCBzeW1ib2wgaXMgbm90IG5lY2Vzc2FyeSBmb3IgZ3Byb2YKKwkqIHBwL29wcmVwb3J0LmNwcDoKKwkqIHBwL29wcmVwb3J0X29wdGlvbnMuY3BwOgorCSogcHAvb3Bhbm5vdGF0ZS5jcHA6IHVzZSBuZXcgc29ydCBBUEkKKworMjAwMy0wNS0xMiAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBsaWJwcC9zeW1ib2xfc29ydC5oOgorCSogbGlicHAvc3ltYm9sX3NvcnQuY3BwOiBwYXJ0aWFsIGltcGxlbWVudGF0aW9uCisJb2Ygb3RoZXIgc29ydCBvcHRpb25zCisKKzIwMDMtMDUtMTIgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogbGlicHAvTWFrZWZpbGUuYW06CisJKiBsaWJwcC9zeW1ib2xfc29ydC5oOgorCSogbGlicHAvc3ltYm9sX3NvcnQuY3BwOiBhZGQgc29ydGluZyBjb2RlCisKKwkqIHN5bWJvbF9mdW5jdG9ycy5oOiBtb3ZlIHNvbWUgbGVzcygpIGludG8KKwlzeW1ib2xfc29ydC5jcHAKKworCSogbGlicHAvcHJvZmlsZV9jb250YWluZXIuaDoKKwkqIGxpYnBwL3Byb2ZpbGVfY29udGFpbmVyLmNwcDogZG9uJ3QgcGFzcyBpbgorCXNvcnQgb3B0aW9uIHRvIHNlbGVjdF9zeW1ib2xzKCksIGRvIGl0IGluIGNhbGxlcgorCisJKiBwcC9vcGFubm90YXRlLmNwcDoKKwkqIHBwL29wZ3Byb2YuY3BwOgorCSogcHAvb3ByZXBvcnQuY3BwOgorCSogcHAvb3ByZXBvcnRfb3B0aW9ucy5oOgorCSogcHAvb3ByZXBvcnRfb3B0aW9ucy5jcHA6IGZyb20gdGhlIGFib3ZlCisKKzIwMDMtMDUtMTIgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogZm9ybWF0X2ZsYWdzLmg6IHJlbW92ZSB2bWE2NF9wLiBBZGQgY29sdW1uX2ZsYWdzCisKKwkqIGxpYnBwL3Byb2ZpbGVfY29udGFpbmVyLmg6CisJKiBsaWJwcC9wcm9maWxlX2NvbnRhaW5lci5jcHA6IHBhc3MgaW4gYSBzdHJ1Y3QKKwl0byBzZWxlY3Rfc3ltYm9scy4gR2VuZXJhdGUgaGludHMgZm9yIDY0LWJpdCBWTUEKKwlhbmQgbXVsdGlwbGUgYXBwcyBpbiB0aGUgcHJvZmlsZS4KKworCSogcHAvb3Bhbm5vdGF0ZS5jcHA6CisJKiBwcC9vcGdwcm9mLmNwcDoKKwkqIHBwL29wcmVwb3J0LmNwcDogdXNlIHRoZSBhYm92ZQorCisyMDAzLTA1LTEyICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGxpYnBwL2Zvcm1hdF9vdXRwdXQuY3BwOgorCSogbGlicHAvZm9ybWF0X2ZsYWdzLmg6CisJKiBwcC9vcHJlcG9ydC5jcHA6IHRyaXZpYWwgcmVuYW1pbmcgb2YgZmxhZ3MKKworMjAwMy0wNS0xMSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBsaWJwcC9mb3JtYXRfb3V0cHV0LmNwcDoKKwkqIGxpYnBwL2Zvcm1hdF9mbGFncy5oOiBiZXR0ZXIgb3V0cHV0IGZvcgorCXRoZSBkZWZhdWx0IG9mIHNob3J0IGZpbGVuYW1lcworCisyMDAzLTA1LTExICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIHBwL29wcmVwb3J0LmNwcDogaW1wcm92ZSB0aGUgYXBwL2ltYWdlIG5hbWUgY29sdW1uCisJc2hvd2luZyBhIGJpdAorCisyMDAzLTA1LTExICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIHBwL29wcmVwb3J0LmNwcDogZGVmYXVsdCB0byAtbCBpZiB3ZSB3ZXJlIGp1c3QKKwlnb2luZyB0byBzaG93IG9uZSBpbWFnZSBzdW1tYXJ5LgorCisyMDAzLTA1LTExICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIHBwL29wcmVwb3J0LmNwcDogbW92ZSBzb21lIGNvZGUgYXJvdW5kIHRoYXQKKwlvdXRwdXRzIHRoZSBpbWFnZSBzdW1tYXJpZXMKKworMjAwMy0wNS0xMSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBsaWJwcC9mb3JtYXRfb3V0cHV0Lmg6CisJKiBsaWJwcC9mb3JtYXRfb3V0cHV0LmNwcDoKKwkqIHBwL29wcmVwb3J0LmNwcDoKKwkqIHBwL29wcmVwb3J0X29wdGlvbnMuaDoKKwkqIHBwL29wcmVwb3J0X29wdGlvbnMuY3BwOiBzLy0tc2hvcnQtZmlsZW5hbWUvLS1sb25nLWZpbGVuYW1lcy8KKworMjAwMy0wNS0xMSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBsaWJwcC9wcm9maWxlX3NwZWMuaDoKKwkqIGxpYnBwL3Byb2ZpbGVfc3BlYy5jcHA6IHRha2UgZXhjbHVkZV9kZXBlbmRlbnQgbm90CisJaW5jbHVkZV9kZXBlbmRlbnQKKworCSogcHAvb3Bhbm5vdGF0ZV9vcHRpb25zLmM6CisJKiBwcC9vcGdwcm9mX29wdGlvbnMuYzoKKwkqIHBwL29wcmVwb3J0X29wdGlvbnMuaDoKKwkqIHBwL29wcmVwb3J0X29wdGlvbnMuYzogY2hhbmdlIHRvIHVzZSBleGNsdWRlX2RlcGVuZGVudCwKKwlyZW1vdmUgLS1oaWRlLWRlcGVuZGVudAorCisyMDAzLTA1LTExICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGxvY2F0ZV9pbWFnZXMuaDoKKwkqIGxvY2F0ZV9pbWFnZXMuY3BwOiBleHRyYV9pbWFnZXMgY2FuIG5vdyB1c2UKKwlyZWxhdGl2ZSBwYXRocyBmb3IgaXRzIHNlYXJjaCBkaXJzLiBNb3ZlIG1vc3Qgb2YgCisJdGhlIHdhcm5pbmdzIG91dCBvZiBmaW5kX2ltYWdlX3BhdGgsIGFuZCBtYWtlIGl0CisJYWxzbyBoYW5kbGUgcmVsYXRpdmUgcGF0aHMuIFJldHVybiB0aGUgZmlsZQorCWV2ZW4gaWYgaXQgd2Fzbid0IHJlYWRhYmxlLgorCisJKiBsaWJwcC9wYXJ0aXRpb25fZmlsZXMuY3BwOiBnaXZlIHdhcm5pbmdzIHdoZW4KKwluZWNlc3NhcnkuCisKKwkqIGxpYnBwL3Byb2ZpbGVfc3BlYy5oOgorCSogbGlicHAvcHJvZmlsZV9zcGVjLmNwcDogaGFuZGxlIHJlbGF0aXZlIHBhdGhzCisJaW5zaWRlIGltYWdlIHNwZWNzLCBhcyBzdGF0ZWQgaW4gcHBfaW50ZXJmYWNlOyBhbHNvCisJdXNlIHRoZSBleHRyYSBpbWFnZXMgc2VhcmNoIHBhdGggZm9yIHJlc29sdXRpb24uCisKKwkqIHBwL29wYW5ub3RhdGVfb3B0aW9ucy5jcHA6CisJKiBwcC9vcHJlcG9ydF9vcHRpb25zLmNwcDoKKwkqIHBwL29wZ3Byb2Zfb3B0aW9ucy5jcHA6IGNoYW5nZXMgZnJvbSBhYm92ZQorCisyMDAzLTA1LTExICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGxpYnBwL2Zvcm1hdF9mbGFncy5oOiBzb3VyY2UgZG9jIGltcHJvdmVtZW50cworCisyMDAzLTA1LTExICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGxpYnBwL29wcF9zeW1ib2wuaDogbW92ZSB2bWE2NF9wIHRvIC4uLgorCisJKiBsaWJwcC9mb3JtYXRfZmxhZ3MuaDogLi4uIGhlcmUKKworMjAwMy0wNS0xMSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBsaWJwcC9NYWtlZmlsZS5hbToKKwkqIGxpYnBwL291dHN5bWJmbGFncy5oOgorCSogbGlicHAvZm9ybWF0X2ZsYWdzLmg6CisJKiBsaWJwcC9wcm9maWxlX2NvbnRhaW5lci5oOgorCSogbGlicHAvZm9ybWF0X291dHB1dC5oOgorCSogbGlicHAvZm9ybWF0X291dHB1dC5jcHA6CisJKiBwcC9vcHJlcG9ydC5jcHA6IHJlbmFtZSBvdXRzeW1iZmxhZ3MgdG8gZm9ybWF0X2ZsYWdzCisKKzIwMDMtMDUtMTEgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogcHJvZmlsZV9jb250YWluZXIuaDoKKwkqIHByb2ZpbGVfY29udGFpbmVyLmNwcDoKKwkqIG9wYW5ub3RhdGUuY3BwOiBjbGVhbiB1cCBzZWxlY3RfZmlsZW5hbWUoKSBpbiBhCisJc2ltaWxhciBmYXNoaW9uCisKKzIwMDMtMDUtMTEgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogbGlicHAvcHJvZmlsZV9jb250YWluZXIuaDoKKwkqIGxpYnBwL3Byb2ZpbGVfY29udGFpbmVyLmNwcDoKKwkqIHBwL29wcmVwb3J0LmNwcDoKKwkqIHBwL29wYW5ub3RhdGUuY3BwOgorCSogcHAvb3BncHJvZi5jcHA6IGFub3RoZXIgc2VsZWN0X3N5bWJvbHMoKSBBUEkgY2xlYW51cAorCisyMDAzLTA1LTExICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIHBwL29wZ3Byb2YuY3BwOiB1c2Ugc2VsZWN0X3N5bWJvbHMgc28gd2UgY2FuCisJaGFuZGxlIC0tdGhyZXNob2xkCisKKzIwMDMtMDUtMTEgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIHBwL29wYW5ub3RhdGUuY3BwOiB1c2UgdGhyZXNob2xkIGZvciBzb3VyY2Ugb3V0cHV0CisKKzIwMDMtMDUtMTEgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogcHAvY29tbW9uX29wdGlvbi5oOgorCSogcHAvY29tbW9uX29wdGlvbi5jcHA6CisJKiBwcC9vcGFubm90YXRlX29wdGlvbnMuY3BwOgorCSogcHAvb3ByZXBvcnRfb3B0aW9ucy5jcHA6IG1ha2UgLS10aHJlc2hvbGQKKwliZSBhIGNvbW1vbiBvcHRpb24uCisKKzIwMDMtMDUtMTEgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogcHAvcHJvZmlsZV9jb250YWluZXIuaDoKKwkqIHBwL3Byb2ZpbGVfY29udGFpbmVyLmNwcDoKKwkqIHBwL29wYW5ub3RhdGUuY3BwOgorCSogcHAvb3ByZXBvcnQuY3BwOiBjbGVhbiB1cCBzZWxlY3Rfc3ltYm9scworCWludGVyZmFjZQorCisyMDAzLTA1LTExICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIHBwL29wcmVwb3J0LmNwcDogbWFrZSAtLXRocmVzaG9sZCB3b3JrIGZvcgorCWltYWdlIHN1bW1hcmllcyB0b28KKworMjAwMy0wNS0xMSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBwcC9vcHJlcG9ydF9vcHRpb25zLmNwcDogZml4IC0tdGhyZXNob2xkCisJZGVzY3JpcHRpb24gdG8gbWF0Y2ggcmVhbGl0eQorCisyMDAzLTA1LTExICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGxpYnBwL3BhcnRpdGlvbl9maWxlcy5oOgorCSogbGlicHAvcGFydGl0aW9uX2ZpbGVzLmNwcDoKKwkqIHBwL29wYW5ub3RhdGVfb3B0aW9ucy5jcHA6CisJKiBwcC9vcGdwcm9mX29wdGlvbnMuY3BwOgorCSogcHAvb3ByZXBvcnQuY3BwOgorCSogcHAvb3ByZXBvcnRfb3B0aW9ucy5jcHA6IHJlbmFtZSBtZXJnZV9ieSBtZW1iZXJzCisKKzIwMDMtMDUtMTEgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogcHAvb3ByZXBvcnQuY3BwOiBhZGQgc29tZSBsb2dpYyB0byBub3Qgb3V0cHV0CisJZHVwbGljYXRlIGxpbmVzIGZvciBkZXAgaW1hZ2VzIHdoZW4gd2UndmUgYWxyZWFkeQorCXNob3duIGFsbCB0aGUgcG9zc2libGUgZGV0YWlscyBpbiB0aGUgbWFpbiBpbWFnZSBzdW1tYXJ5CisKKzIwMDMtMDUtMTEgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogcHAvY29tbW9uX29wdGlvbi5oOiB1c2Ugc3RkOjoKKworMjAwMy0wNS0xMSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogcHAvb3ByZXBvcnRfb3B0aW9ucy5jcHA6IG1vdmUgaGFuZGxlX3RocmVzaG9sZCgpCisJKiBwcC9jb21tb25fb3B0aW9uLmg6CisJKiBwcC9jb21tb25fb3B0aW9uLmNwcDogaGVyZQorCSogcHAvb3Bhbm5vdGF0ZV9vcHRpb25zLmg6CisJKiBwcC9vcGFubm90YXRlX29wdGlvbnMuY3BwOgorCSogcHAvb3Bhbm5vdGF0ZS5jcHA6IGhhbmRsZSAtLXRocmVzaG9sZAorCisyMDAzLTA1LTEwICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGxpYm9wL29wX21hbmdsZS5oOgorCSogbGlib3Avb3BfbWFuZ2xlLmM6IHVzZSBhIHRlbXAgc3RydWN0IGZvcgorCXBhc3NpbmcgdGhlIG1hbmdsZSBwYXJhbWV0ZXJzIHdpdGggYSBzZXQgb2YKKwlmbGFncy4KKworCSogZGFlL29wZF9zYW1wbGVfZmlsZXMuYzoKKwkqIGRhZW1vbi9vcGRfc2FtcGxlX2ZpbGVzLmM6IHVzZSBpdAorCisyMDAzLTA1LTEwICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIE1ha2VmaWxlLmFtOgorCSogSEFDS0lORzoKKwkqIGxpYm9wKysvOgorCSogcHAvTWFrZWZpbGUuYW06CisJKiBsaWJwcC9NYWtlZmlsZS5hbToKKwkqIGxpYnBwL29wX2hlYWRlci5oOgorCSogbGlicHAvb3BfaGVhZGVyLmNwcDogcmVtb3ZlIGxpYm9wKysgYWZ0ZXIKKwltb3Zpbmcgb3BfaGVhZGVyIGludG8gbGlicHAKKworMjAwMy0wNS0xMCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBsaWJvcCsrL29wX2hlYWRlci5jcHA6IG1ha2UgQ1BVIGluZm8gdGFrZSB1cAorCW9uZSBsaW5lIG5vdCB0d28KKworMjAwMy0wNS0xMCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBsaWJvcCsrL01ha2VmaWxlLmFtOgorCSogbGlib3ArKy9vcF9oZWFkZXIuY3BwOgorCSogbGlib3ArKy9vcF9wcmludF9ldmVudC5oOgorCSogbGlib3ArKy9vcF9wcmludF9ldmVudC5jcHA6IHJlbW92ZSBvcF9wcmludF9ldmVudAorCWZpbGVzLCBtYWtpbmcgaXQgYSBmdW5jdGlvbiBsb2NhbCB0byBvcF9oZWFkZXIuY3BwCisKKzIwMDMtMDUtMTAgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogbGlib3ArKy9vcF9oZWFkZXIuaDoKKwkqIGxpYm9wKysvb3BfaGVhZGVyLmNwcDogbWFrZSBvdXRwdXRfaGVhZGVyKCkgYmUKKwlhbiBvcGVyYXRvcjw8CisJCisJKiBwcC9vcGFubm90YXRlLmNwcDoKKwkqIHBwL29wcmVwb3J0LmNwcDogY2hhbmdlcyBmcm9tIHRoZSBhYm92ZQorCisJKiBsaWJwcC9wcm9maWxlLmg6IHNtYWxsIGNsZWFudXAKKworMjAwMy0wNS0xMCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogbGlidXRpbCsrL3N0cmluZ19tYW5pcC5oOgorCSogbGlidXRpbCsrL3N0cmluZ19tYW5pcC5jcHA6IHJlcGxhY2UgZm9ybWF0X3BlcmNlbnQoKSBieQorCSAgZm9ybWF0X2RvdWJsZSgpCisKKwkqIGxpYnBwL2Zvcm1hdF9vdXRwdXQuY3BwOgorCSogcHAvb3Bhbm5vdGF0ZS5jcHA6CisJKiBwcC9vcHJlcG9ydC5jcHA6IHVzZSBmb3JtYXRfZG91YmxlKCkKKworMjAwMy0wNS0wOSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBsaWJwcC9vcHBfc3ltYm9sLmg6IGFwcCBuYW1lLCBpbWFnZSBuYW1lIHNob3VsZAorCWJlIGluIHN5bWJvbCBub3QgaW4gZmlsZV9sb2NhdGlvbgorCisJKiBsaWJwcC9mb3JtYXRfb3V0cHV0LmNwcDoKKwkqIGxpYnBwL3Byb2ZpbGVfY29udGFpbmVyLmg6CisJKiBsaWJwcC9wcm9maWxlX2NvbnRhaW5lci5jcHA6CisJKiBsaWJwcC9zeW1ib2xfY29udGFpbmVyLmNwcDoKKwkqIGxpYnBwL3N5bWJvbF9mdW5jdG9ycy5jcHA6IGNoYW5nZXMgZnJvbSBhYm92ZQorCisyMDAzLTA1LTA5ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGxpYnBwL2Zvcm1hdF9vdXRwdXQuaDoKKwkqIGxpYnBwL2Zvcm1hdF9vdXRwdXQuY3BwOiB2bWFfNjQgZG9lc24ndCBuZWVkCisJdG8gYmUgaW4gZmllbGRfZGF0dW0uIG1ha2Ugb25lIG91dHB1dCgpIHByaXZhdGUKKworMjAwMy0wNS0wOSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBsaWJwcC9mb3JtYXRfb3V0cHV0Lmg6CisJKiBsaWJwcC9mb3JtYXRfb3V0cHV0LmNwcDogcGFzcyBhIHN5bWJvbCByZWYKKwlub3QgbmFtZSBkb3duIGludG8gdGhlIGZvcm1hdHRlcnMKKworMjAwMy0wNS0wOSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBsaWJ1dGlsKysvc3RyaW5nX21hbmlwLmg6CisJKiBsaWJ1dGlsKysvc3RyaW5nX21hbmlwLmNwcDogc2FtcGxlX2ZpbGVuYW1lKCkgaXMgdW51c2VkCisKKzIwMDMtMDUtMDkgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGxpYm9wKysvb3BfaGVhZGVyLmg6CisJKiBsaWJvcCsrL29wX2hlYWRlci5jcHA6IHJlYWRfaGVhZGVyKCkgbmV3CisJKiBsaWJvcCsrL01ha2VmaWxlLmluOiB3ZSBkZXBlbmQgb24gbGliZGIKKworCSogcHAvb3Bhbm5vdGF0ZS5jcHA6CisJKiBwcC9vcHJlcG9ydC5jcHA6IGJldHRlciB3YXkgdG8gZ2V0IHNhbXBsZSBmaWxlIGhlYWRlcgorCisyMDAzLTA1LTA5ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBsaWJwcC9mb3JtYXRfb3V0cHV0LmNwcDogcmVtb3ZlIHJlZHVuZGFudCBtYXAgZm9ybWF0ZXIKKwkqIHBwL29wYW5ub3RhdGUuY3BwOiBzcHVyaW91cyBjb3V0CisKKzIwMDMtMDUtMDggIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogcHAvb3ByZXBvcnQuY3BwOgorCSogcHAvb3ByZXBvcnRfb3B0aW9ucy5jcHA6CisJKiBwcC9vcHJlcG9ydF9vcHRpb25zLmg6IGNsZWFuIHVwIGNvdXQgc3R1ZmYgYXMKKwlzdWdnZXN0ZWQgYnkgUGhpbAorCisyMDAzLTA1LTA4ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGxpYnBwL3Byb2ZpbGVfc3BlYy5oOgorCSogbGlicHAvcHJvZmlsZV9zcGVjLmM6IHJlbmFtZSB0aGUgc2V0X3AgdmFyaWFibGVzLAorCXJlbW92ZSBwb2ludGxlc3MgaXNfZW1wdHkoKSBmdW5jdGlvbgorCisJKiBwcC9vcHJlcG9ydC5jcHA6IHNwbGl0IGNvbGxhdGlvbiBhbmQgb3V0cHV0IGludG8KKwl0d28gc2VwYXJhdGUgZnVuY3Rpb25zLiBSZW5hbWUgdGhlIHRlbXBvcmFyeSBzdHJ1Y3R1cmVzCisJc28gaXQncyBob3BlZnVsbHkgYSBiaXQgbW9yZSBvYnZpb3VzIHdoYXQncyBoYXBwZW5pbmcuCisJQWRkIHNvdXJjZWRvY3MuCisKKzIwMDMtMDUtMDggIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogcHAvb3ByZXBvcnRfb3B0aW9ucy5oOgorCSogcHAvb3ByZXBvcnRfb3B0aW9ucy5jcHA6IGFkZCBvcHRpb25zOjpjb3V0LAorCSAgLS1vdXRwdXQtZmlsZSBvcHRpb24KKworCSogcHAvb3ByZXBvcnQuY3BwOiB1c2Ugb3B0aW9uczo6Y291dAorCisyMDAzLTA1LTA4ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIHBwL2Zvcm1hdF9vdXRwdXQuY3BwOiBmaXggY3VtdWxhdGl2ZSBjb2x1bW4gd2lkdGhzCisKKzIwMDMtMDUtMDggIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogb3ByZXBvcnRfb3B0aW9ucy5oOiBhZGQgYWNjdW11bGF0ZWQKKworCSogb3ByZXBvcnQuY3BwOiBoYW5kbGUgLS1hY2N1bXVsYXRlZAorCisyMDAzLTA1LTA4ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBsaWJwcC9zeW1ib2xfY29udGFpbmVyLmNwcDogbWlub3IgdGlkeQorCisJKiBsaWJwcC9wcm9maWxlLmg6CisJKiBsaWJwcC9wcm9maWxlLmNwcDogYWxsb3cgdG8gY3VtdWxhdGUgc2FtcGxlIGZpbGUKKwkqIGxpYnBwL3Byb2ZpbGVfY29udGFpbmVyLmg6CisJKiBsaWJwcC9wcm9maWxlX2NvbnRhaW5lci5jcHA6IHJlbW92ZSBmcmVlIGZ1bmN0aW9uIGFkZF9zYW1wbGVzKCkKKworCSogcHAvYW5ub3RhdGUuY3BwOgorCSogcHAvb3BncHJvZi5jcHA6CisJKiBwcC9vcHJlcG9ydC5jcHA6IHdoZW4gcG9zc2libGUgY3VtdWxhdGUgc2FtcGxlcyBpbnRvIGEgcHJvZmlsZV90CisJICBmaXJzdCBiZWZvcmUgY3VtdWxhdGluZyB0aGVtIGluIGEgcHJvZmlsZV9jb250YWluZXIKKworMjAwMy0wNS0wNyAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBwcC9vcGFubm90YXRlLmNwcDogc21hbGwgY2xlYW51cAorCisyMDAzLTA1LTA3ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIHBwL29wcmVwb3J0X29wdGlvbnMuY3BwOiByZW1vdmUgdW5uZWVkZWQgaW5jbHVkZQorCisyMDAzLTA1LTA3ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGxpYnBwL01ha2VmaWxlLmFtOgorCSogbGlicHAvcGFyc2VfY21kbGluZS5oOgorCSogbGlicHAvcGFyc2VfY21kbGluZS5jcHA6IHJlbmFtZSB0byAuLi4KKworCSogbGlicHAvcHJvZmlsZV9zcGVjLmg6CisJKiBsaWJwcC9wcm9maWxlX3NwZWMuY3BwOiB0aGlzLiBNYWtlIGhhbmRsZV9ub25vcHRpb25zKCkKKwliZSBhIHN0YXRpYyBmYWN0b3J5IGNyZWF0ZSgpIG1ldGhvZCBpbnN0ZWFkLiBNYWtlCisJc2VsZWN0X3NhbXBsZV9maWxlbmFtZXMoKSBiZSBhIG1lbWJlciBnZW5lcmF0ZV9maWxlX2xpc3QoKQorCWluc3RlYWQuIENvbmNvbWl0YW50IGNsZWFudXBzLgorCisJKiBsaWJwcC9maWxlbmFtZV9zcGVjLmg6CisJKiBwcC9vcGFubm90YXRlX29wdGlvbnMuY3BwOgorCSogcHAvb3BncHJvZl9vcHRpb25zLmNwcDoKKwkqIHBwL29wcmVwb3J0X29wdGlvbnMuY3BwOiBjaGFuZ2VzIGZyb20gYWJvdmUKKworMjAwMy0wNS0wNyAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBsaWJwcC9wcm9maWxlLmNwcDogZml4IHN0dXBpZCBlcnJvciBpbiBsYXN0IGNvbW1pdAorCisyMDAzLTA1LTA3ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGxpYnBwL3Byb2ZpbGUuaDoKKwkqIGxpYnBwL3Byb2ZpbGUuY3BwOiByZW1vdmUgc2FtcGxlX2ZpbGVuYW1lIG1lbWJlciwKKwlib2d1cyBvbGQgc3B1cmlvdXMgY2hlY2ssIHNldF9zdGFydF9vZmZzZXQoKS4KKworCSogbGlicHAvcHJvZmlsZV9jb250YWluZXIuY3BwOgorCSogcHAvb3Bhbm5vdGF0ZS5jcHA6CisJKiBwcC9vcHJlcG9ydC5jcHA6IGNoYW5nZXMgZnJvbSBhYm92ZQorCisyMDAzLTA1LTA3ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGxpYnBwL2Rlcml2ZV9maWxlcy5oOgorCSogbGlicHAvZGVyaXZlX2ZpbGVzLmNwcDogcmVuYW1lIGZpbGVzIGFzIC4uLgorCisJKiBsaWJwcC9sb2NhdGVfaW1hZ2VzLmg6CisJKiBsaWJwcC9sb2NhdGVfaW1hZ2VzLmNwcDogdGhpcy4KKworCSogbGlicHAvTWFrZWZpbGUuYW06CisJKiBsaWJwcC9wYXJ0aXRpb25fZmlsZXMuaDoKKwkqIHBwL2NvbW1vbl9vcHRpb24uaDoKKwkqIHBwL29wZ3Byb2YuY3BwOgorCSogcHAvb3BncHJvZl9vcHRpb25zLmg6CisJKiBwcC9vcHJlcG9ydF9vcHRpb25zLmg6IGNoYW5nZXMgZnJvbSBhYm92ZQorCisyMDAzLTA1LTA3ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGxpYnBwL2Rlcml2ZV9maWxlcy5oOgorCSogbGlicHAvZGVyaXZlX2ZpbGVzLmNwcDogcmV3b3JrIGludG8gZXh0cmFfaW1hZ2VzCisJY2xhc3MKKworCSogbGlicHAvcGFydGl0aW9uX2ZpbGVzLmg6CisJKiBsaWJwcC9wYXJ0aXRpb25fZmlsZXMuY3BwOgorCSogcHAvY29tbW9uX29wdGlvbi5oOgorCSogcHAvY29tbW9uX29wdGlvbi5jcHA6CisJKiBwcC9vcGFubm90YXRlLmNwcDoKKwkqIHBwL29wZ3Byb2YuY3BwOgorCSogcHAvb3ByZXBvcnQuY3BwOiB1c2UgdGhlIGFib3ZlCisKKzIwMDMtMDUtMDcgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogbGlicHAvTWFrZWZpbGUuYW06CisJKiBzZXNzaW9uLmg6CisJKiBzZXNzaW9uLmNwcDogcmVtb3ZlIHNlc3Npb24ue2gsY3BwfQorCisyMDAzLTA1LTA3ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBwcC9vcHJvZnBwLmNwcCBwcC9vcHJvZnBwX29wdGlvbnMuY3BwIHBwL29wcm9mcHBfb3B0aW9ucy5oOgorCSogcHAvb3BfdGltZS5jcHAgcHAvb3BfdGltZV9vcHRpb25zLmNwcCBwcC9vcF90aW1lX29wdGlvbnMuaDoKKwkqIHBwL29wX3RvX3NvdXJjZS5jcHAgcHAvb3BfdG9fc291cmNlX29wdGlvbnMuY3BwOgorCSogcHAvb3BfdG9fc291cmNlX29wdGlvbnMuaCBwcC9vcF9tZXJnZS5jcHA6IHJlbW92ZWQgZmlsZXMKKworCSogcHAvTWFrZWZpbGUuYW06IHVwZGF0ZQorCisyMDAzLTA1LTA2ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBwcC9vcGdwcm9mLmNwcDogaW5mYW1vdXMgdHlwbworCisJKiBwcC9vcGFubm90YXRlLmNwcDogb3V0cHV0IHNhbXBsZSBmaWxlIGhlYWRlcgorCisKKzIwMDMtMDUtMDYgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGxpYnBvcCsrL29wX21hbmdsaW5nLmg6CisJKiBsaWJwb3ArKy9vcF9tYW5nbGluZy5jcHA6IHJlbW92ZWQgZmlsZQorCSogbGlib3ArKy9vcF9oZWFkZXIuaDoKKwkqIGxpYm9wKysvb3BfaGVhZGVyLmNwcDogbmV3IGZpbGUsIG1pc2MgZnVuY3Rpb24gYWN0aW5nIG9uIHNhbXBsZQorCSAgZmlsZSBoZWFkZXIgc3RvbGVuIGZyb20gbGlicHAvcHJvZmlsZS4oY3BwfGgpCisJKiBsaWJvcCsrL29wX3ByaW50X2V2ZW50Lmg6IHR5cG8KKwkqIGxpYm9wKysvb3BfcHJpbnRfZXZlbnQuY3BwOiBzYXZlL3Jlc3RvcmUgb3N0cmVhbSBzdGF0ZQorCSogbGlib3ArKy9NYWtlZmlsZS5hbTogdXBkYXRlCisJCisJKiBsaWJvcC9vcF9zYW1wbGVfZmlsZS5oOiByZW1vdmUgZGVhZCAjZGVmaW5lIE9QRF9NQU5HTEVfQ0hBUgorCisJKiBsaWJwcC9wcm9maWxlLmg6CisJKiBsaWJwcC9wcm9maWxlLmNwcDogbW92ZSBzb21lIG1lbWJlciBmdW5jdGlvbiB0byBmcmVlIGZ1bmN0aW9uIGluCisJICBsaWJvcCsrL29wX2hlYWRlci4oY3BwfGgpCisJKiBsaWJwcC9wcm9maWxlX2NvbnRhaW5lci5jcHA6IG1pbm9yIGNhbGwgY2hhbmdlCisKKwkqIGxpYnBwL01ha2VmaWxlLmFtOiBvcF9tZXJnZSBjYW4ndCBiZSBjb21waWxlZCBjdXJyZW50bHkgaW5oaWJpdCBidWlsZAorCisJKiBsaWJwcC9vcHJlcG9ydC5jcHA6IG91dHB1dCBzYW1wbGUgZmlsZSBoZWFkZXIKKworMjAwMy0wNS0wNiAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogbGlidXRpbCsrL3BhdGhfZmlsdGVyLmg6IGRlZmF1bHQgcGFyYW0gdG8gZW1wdHkgc3RyaW5nIG5vdCAiKiIKKworCSogbGlicHAvc3ltYm9sX2Z1bmN0b3JzLmg6IHJlbW92ZSBkZWFkIGNvZGUKKworCSogcHAvb3BncHJvZi5jcHA6IG9mZiBieSBvbmUgaW4gaGlzdHNpemUgY2FsY3VsYXRpb24KKworMjAwMy0wNS0wNCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogbGlidXRpbC9vcF9maWxlLmg6CisJKiBsaWJ1dGlsL29wX2ZpbGUuYzogc2FuaXRpemUgY3JlYXRlX3BhdGgoKQorCisJKiBsaWJ1dGlsKysvcGF0aF9maWx0ZXIuaDogZGVmYXVsdCBjdG9yIG1hdGNoIGFsbAorCisJKiBsaWJwcC9wcm9maWxlX2NvbnRhaW5lci5oOgorCSogbGlicHAvcHJvZmlsZV9jb250YWluZXIuY3BwOgorCSogbGlicHAvc2FtcGxlX2NvbnRhaW5lci5oOgorCSogbGlicHAvc2FtcGxlX2NvbnRhaW5lci5jcHA6CisJKiBsaWJwcC9zeW1ib2xfY29udGFpbmVyLmg6CisJKiBsaWJwcC9zeW1ib2xfY29udGFpbmVyLmNwcDogZXh0ZW5kIGFwaSB0byBhbGxvdyBzZWxlY3Rpbmcgc3ltYm9sCisJICByZXN0cmljdGVkIHRvIG9uZSBhcHBsaWNhdGlvbiwgZGl0dG8gZm9yIHJldHJpZXZpbmcgc2FtcGxlcworCisJKiBwcC9vcGFubm90YXRlX29wdGlvbnMuaDoKKwkqIHBwL29wYW5ub3RhdGVfb3B0aW9ucy5jcHA6CisJKiBwcC9vcGFubm90YXRlLmNwcDogaW1wbGVtZW50CisKKwkqIHBwL29wZ3Byb2Zfb3B0aW9ucy5oOgorCSogcHAvb3BncHJvZl9vcHRpb25zLmNwcDoKKwkqIHBwL29wcmVwb3J0X29wdGlvbnMuaDoKKwkqIHBwL29wcmVwb3J0X29wdGlvbnMuY3BwOiBjb21tZW50IGZpeAorCisJKiBwcC9vcHJlcG9ydC5jcHA6IHVwZGF0ZSB0byBtYXRjaCBuZXcgcHJvZmlsZV9jb250YWluZXIgYXBpCisKKzIwMDMtMDUtMDMgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIHBwL29wcmVwb3J0LmNwcDogZG9uJ3Qgc2hvdyBkZXBlbmRlbnQgZmlsZSBpZiAhLS1pbmNsdWRlLWRlcGVuZGVudAorCisyMDAzLTA1LTAyICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBsaWJwcC9wYXJ0aXRpb25fZmlsZXMuaDoKKwkqIGxpYnBwL3BhcnRpdGlvbl9maWxlcy5jcHA6IHNvcnRfYnlfaW1hZ2VfbmFtZSgpIG5ldyByZXR1cm4gYSBsaXN0CisJICBvZiBzYW1wbGUgZmlsZW5hbWUgc29ydGVkIGJ5IGJmZCBpbWFnZSBuYW1lLgorCSogbGlicHAvcHJvZmlsZV9jb250YWluZXIuY3BwOiBhZGRfc2FtcGxlcygpIGRvbid0IGJ1aWxkIG9wX2JmZCBvYmplY3QKKwkgIHVzZWQgaGVyZSBidXQgcGFzcyBpdCBhcyBwYXJhbWV0ZXJzCisKKwkqIHBwL29wZ3Byb2YuY3BwOgorCSogcHAvb3ByZXBvcnQuY3BwOiB1c2UgdGhlIGFib3ZlIGNoYW5nZSB0byBhdm9pZCBvcGVuaW5nIG11bHRpcGxlIHRpbWUKKwkgIGEgYmZkIG9iamVjdC4KKworCSogcHAvb3Bhbm5vdGF0ZV9vcHRpb25zLmNwcDogYWRkIC0tKGluY2x1ZGV8ZXhjbHVkZSktc3ltYm9scworCisJKiBsaWJwcC9wYXJzZV9jbWRsaW5lLmNwcDoKKwkqIHBwL29wZ3Byb2Zfb3B0aW9ucy5jcHA6CisJKiBwcC9vcHJlcG9ydC5jcHA6IG1ha2UgYSBkaXN0aW5jdGlvbiBpbiBlcnJvciBtZXNzYWdlIGJldHdlZW4gbm8KKwkgIHNhbXBsZSBhdmFpbGFibGUgYW5kIHNhbXBsZSBmaWxlIGF2YWlsYWJsZSBidXQgbm8gb25lIHdhcyBzZWxlY3RlZAorCisyMDAzLTA1LTAxICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBwcC9vcGFubm90YXRlX29wdGlvbnMuaDoKKwkqIHBwL29wYW5ub3RhdGVfb3B0aW9ucy5jcHA6CisJKiBwcC9vcGRpZmYuY3BwOgorCSogcHAvb3BkaWZmX29wdGlvbnMuaDoKKwkqIHBwL29wZGlmZl9vcHRpb25zLmNwcDoKKwkqIHBwL29wZ3Byb2YuY3BwOgorCSogcHAvb3BncHJvZl9vcHRpb25zLmg6CisJKiBwcC9vcGdwcm9mX29wdGlvbnMuY3BwOgorCSogcHAvb3ByZXBvcnQuY3BwOgorCSogcHAvb3ByZXBvcnRfb3B0aW9ucy5oOgorCSogcHAvb3ByZXBvcnRfb3B0aW9ucy5jcHA6IG1vdmUgY29tbW9uIG9wdGlvbnMgaGFuZGxpbmcgLi4uCisJKiBwcC9jb21tb25fb3B0aW9uLmg6CisJKiBwcC9jb21tb25fb3B0aW9uLmNwcDogaGVyZQorCisJKiBwcC9vcGFubm90YXRlLmNwcDogYWRkIG9wdGlvbnMKKworCSogbGlicHAvcGFyc2VfY21kbGluZS5jcHA6ICNpbmNsdWRlIDxpdGVyYXRvcj4gLi4uCisKKzIwMDMtMDUtMDEgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGxpYnBwL2NvdW50ZXJfdXRpbC5oOgorCSogbGlicHAvY291bnRlcl91dGlsLmNwcDogcmVtb3ZlIHRoZXNlIGZpbGVzIGZyb20gY3ZzCisKKwkqIGxpYnBwL2Rlcml2ZV9maWxlcy5oOgorCSogbGlicHAvZGVyaXZlX2ZpbGVzLmNwcDogcmVtb3ZlIGRlYWQgY29kZSBkZXJpdmVfZmlsZXMoKSArIHR5cG8KKworCSogbGlicHAvcGFyc2VfY21kbGluZS5jcHA6IHNlbGVjdF9zYW1wbGVfZmlsZW5hbWUoKSB0aHJvdyBpZiBlbXB0eQorCSAgc2Vzc2lvbiBhZnRlciBmaWx0ZXJpbmcKKworCSogcHAvY29tbW9uX29wdGlvbi5jcHA6IGNhdGNoIGludmFsaWRfYXJndW1lbnQsIHJldHVybiBmYWlsdXJlIG9uCisJICBjYXRjaGVkIGV4Y2VwdGlvbgorCisyMDAzLTA1LTAxICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBsaWJ1dGlsKysvb3BfYmZkLmNwcDogcmVtb3ZlIF9pbml0IGZyb20gZXhjbHVkZWQgc3ltYm9sCisJKiBsaWJwcC9wcm9maWxlX2NvbnRhaW5lci5jcHA6IHRpZHkKKworCSogcHAvb3BncHJvZi5jcHA6IGZpeCBjYXBwaW5nIHNhbXBsZXMKKworMjAwMy0wNC0zMCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBwcC9vcGdwcm9mLmNwcDoKKwkqIHBwL29wZ3Byb2Zfb3B0aW9ucy5jcHA6CisJKiBsaWJwcC9wcm9maWxlLmNwcDogdGlueSBjbGVhbnVwcywgZml4IGNvbXBpbGUKKworMjAwMy0wNC0zMCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogbGliZGIvZGJfc3RhdC5jOiBtaW5vciBpbXByb3ZlbWVudCB0byBzdGF0LCB1c2VmdWwgdG8gdHJhY2sgbWlzc2VkCisJICBzYW1wbGUgYnkgb3VyIHRvb2xzLgorCisJKiBwcC9vcF9yZXBvcnQuY3BwOiBtb3ZlIG1hdGNoaW5nX3NhbXBsZV9maWxlbmFtZSgpIHRvIC4uLgorCSogbGlicHAvcGFyc2VfY21kbGluZS5oOgorCSogbGlicHAvcGFyc2VfY21kbGluZS5jcHA6IGhlcmUgcmVuYW1lZCBzZWxlY3Rfc2FtcGxlX2ZpbGVuYW1lKCkKKworCSogbGlicHAvcHJvZmlsZV9jb250YWluZXIuaDoKKwkqIGxpYnBwL3Byb2ZpbGVfY29udGFpbmVyLmNwcDogZXhwb3NlIGJlZ2luKCkgLyBlbmQoKSBmcm9tCisJIHNhbXBsZV9jb250YWluZXIKKworCSogcHAvY29tbW9uX29wdGlvbi5oOgorCSogcHAvY29tbW9uX29wdGlvbi5jcHA6IG1vdmUgb3B0aW9uIHdoaWNoIHdhcyBub3QgcmVhbGx5IGNvbW1vbiB0byAuLgorCSogcHAvb3ByZXBvcnRfb3B0aW9ucy5oOgorCSogcHAvb3ByZXBvcnRfb3B0aW9ucy5jcHA6IGhlcmUKKwkqIHBwL29wYW5ub3RhdGVfb3B0aW9ucy5oOgorCSogcHAvb3Bhbm5vdGF0ZV9vcHRpb25zLmNwcDogYW5kIGhlcmUKKworCSogcHAvb3BlcnBvcnQuY3BwOgorCSogcHAvb3Bhbm5vdGF0ZS5jcHA6IGJldHRlciB0byByZXR1cm4gYSB2YWx1ZSBmcm9tIG1haW4oKSAuLi4KKworCSogcHAvb3BncHJvZl9vcHRpb25zLmg6CisJKiBwcC9vcGdwcm9mX29wdGlvbnMuY3BwOgorCSogcHAvb3BncHJvZi5jcHA6IGltcGxlbWVudCBvcGdwcm9mCisKKzIwMDMtMDQtMjkgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGxpYnBwL3BhcnNlX2NtZGxpbmUuaDoKKwkqIGxpYnBwL3BhcnNlX2NtZGxpbmUuY3BwOiBoYW5kbGUgb3ByZXBvcnQgL2xpYi9saWJjLTIuMi41LnNvLCBub3cKKwkgIG5vbiB0YWcsIG5vbiBvcHRpb24gYXJndW1lbnQgbWF0Y2ggZWl0aGVyIGFuIGltYWdlIG5hbWUgb3IgbGliIG5hbWUKKworMjAwMy0wNC0yOSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBsaWJ1dGlsKysvb3BfYmZkLmNwcDogcmVtb3ZlICJzdGF0aWMgIiBpbnNpZGUgYW5vbiBuYW1lc3BhY2UKKworMjAwMy0wNC0yOCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogbGlicHAvZm9ybWF0X291dHB1dC5oOgorCSogbGlicHAvZm9ybWF0X291dHB1dC5jcHA6IG5lZWQgaGVhZGVyIHR3ZWFraW5nCisKKwkqIHBwL29wYW5ub3RhdGUuY3BwOgorCSogcHAvb3BncHJvZi5jcHA6IG1pbm9yIHRpZHkKKworCSogcHAvb3ByZXBvcnRfb3B0aW9ucy5oOgorCSogcHAvb3ByZXBvcnRfb3B0aW9ucy5jcHA6CisJKiBwcC9vcHJlcG9ydC5jcHA6IGhhbmRsZSAtbm8taGVhZGVyIGFuZCAtLWltYWdlLXBhdGgKKworMjAwMy0wNC0yOCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogbGlidXRpbCsrL2dsb2JfZmlsdGVyLmNwcDoKKwkqIGxpYnV0aWwrKy9wYXRoX2ZpbHRlci5jcHA6CisJKiBsaWJ1dGlsKysvc3RyaW5nX2ZpbHRlci5jcHA6ICNpbmNsdWRlIDxhbGdvcml0aG0+CisKKzIwMDMtMDQtMjggIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogbGlidXRpbCsrL3N0cmluZ19maWx0ZXIuY3BwOgorCSogbGlidXRpbCsrL3N0cmluZ19maWx0ZXIuaDoKKwkqIGxpYnV0aWwrKy9nbG9iX2ZpbHRlci5oOgorCSogbGlidXRpbCsrL2dsb2JfZmlsdGVyLmNwcDoKKwkqIGxpYnV0aWwrKy9wYXRoX2ZpbHRlci5oOgorCSogbGlidXRpbCsrL3BhdGhfZmlsdGVyLmNwcDogdXNlIHN0ZDo6ZmluZFtfaWZdLAorCXNoYXJlIHNvbWUgY29kZQorCisyMDAzLTA0LTI4ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBsaWJ1dGlsKysvb3BfYmZkLmNwcDogcmVwbGFjZSBhIGxvb3AgYnkgYSBzdGQ6OmNvcHkoKQorCisyMDAzLTA0LTI4ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGxpYnV0aWwrKy9vcF9iZmQuaDoKKwkqIGxpYnV0aWwrKy9vcF9iZmQuY3BwOiBjbGVhbnVwIG9mIGxhc3QgZml4CisKKzIwMDMtMDQtMjggIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogbGlidXRpbCsrL29wX2JmZC5oOgorCSogbGlidXRpbCsrL29wX2JmZC5jcHA6IG1ha2Ugc3ltYm9sIGZpbHRlcmluZworCWhhcHBlbiAqYWZ0ZXIqIGFkZGluZyBvZiBhcnRpZmljaWFsIHN5bWJvbAorCisyMDAzLTA0LTI4ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGxpYnV0aWwrKy9zdHJpbmdfZmlsdGVyLmNwcDoKKwkqIGxpYnV0aWwrKy9nbG9iX2ZpbHRlci5jcHA6CisJKiBsaWJ1dGlsKysvcGF0aF9maWx0ZXIuY3BwOiBtYXRjaCBhcyB0cnVlIGlmCisJaW5jbHVkZV9saXN0IGlzIGVtcHR5IGFuZCBub3QgZXhjbHVkZWQKKworCSogbGlidXRpbCsrL29wX2JmZC5oOgorCSogbGlidXRpbCsrL29wX2JmZC5jcHA6IHVzZSBzdHJpbmdfZmlsdGVyIHRvCisJZmlsdGVyIHN5bWJvbHMKKworCSogbGlicHAvcHJvZmlsZV9jb250YWluZXIuaDoKKwkqIGxpYnBwL3Byb2ZpbGVfY29udGFpbmVyLmNwcDoKKwkqIHBwL29wcmVwb3J0X29wdGlvbnMuaDoKKwkqIHBwL29wcmVwb3J0X29wdGlvbnMuY3BwOgorCSogcHAvb3ByZXBvcnQuY3BwOiBjaGFuZ2VzIGZyb20gdXNpbmcgc3RyaW5nX2ZpbHRlcgorCisyMDAzLTA0LTI4ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBwcC9vcHJlcG9ydC5jcHA6IGZpbmlzaCB0byByZW1vdmUgdXNlIG9mIHNwbGl0X3NhbXBsZV9maWxlbmFtZQorCisyMDAzLTA0LTI4ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGxpYnV0aWwrKy9maWxlbmFtZV9tYXRjaC5oOgorCSogbGlidXRpbCsrL2ZpbGVuYW1lX21hdGNoLmNwcDogcmVwbGFjZSB3aXRoIC4uLgorCisJKiBsaWJ1dGlsKysvTWFrZWZpbGUuYW06CisJKiBsaWJ1dGlsKysvc3RyaW5nX2ZpbHRlci5oOgorCSogbGlidXRpbCsrL3N0cmluZ19maWx0ZXIuY3BwOgorCSogbGlidXRpbCsrL2dsb2JfZmlsdGVyLmg6CisJKiBsaWJ1dGlsKysvZ2xvYl9maWx0ZXIuY3BwOgorCSogbGlidXRpbCsrL3BhdGhfZmlsdGVyLmg6CisJKiBsaWJ1dGlsKysvcGF0aF9maWx0ZXIuY3BwOiAuLiBzcGxpdCB1cCB2YXJpYW50cworCW9mIHRoZSBmaWx0ZXJzCisKKwkqIGxpYnBwL3BhcnNlX2NtZGxpbmUuY3BwOiB1c2UgZ2xvYl9maWx0ZXIKKworCSogcHAvb3BfdG9fc291cmNlLmNwcDogdXNlIHBhdGhfZmlsdGVyCisKKzIwMDMtMDQtMjggIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGxpYnBwL3BhcnRpdGlvbl9maWxlcy5oOgorCSogbGlicHAvcGFydGl0aW9uX2ZpbGVzLmNwcDoKKwkqIGxpYnBwL3NwbGl0X3NhbXBsZV9maWxlbmFtZS5oOgorCSogbGlicHAvc3BsaXRfc2FtcGxlX2ZpbGVuYW1lLmNwcDoKKwkqIHBwL29wcmVwb3J0LmNwcDogcmVwbGFjZSBzb21lIHVzZSBvZiBzdGQ6OnN0cmluZyBzYW1wbGVfZmlsZW5hbWUKKwkgIGJ5IGEgc3BsaXRfc2FtcGxlX2ZpbGVuYW1lIHN0cnVjdAorCisyMDAzLTA0LTI4ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGxpYnV0aWwrKy9maWxlbmFtZV9tYXRjaC5oOgorCSogbGlidXRpbCsrL2ZpbGVuYW1lX21hdGNoLmNwcDogdXNlIGZpbGUtc2NvcGUKKwlub3QgcHJpdmF0ZSBzdGF0aWMgbWVtYmVyIGZ1bmN0aW9uCisKKzIwMDMtMDQtMjcgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGxpYnBwL2Zvcm1hdF9vdXRwdXQuaDoKKwkqIGxpYnBwL2Zvcm1hdF9vdXRwdXQuY3BwOiByZW1vdmUgYWxsIHN0cmluZyBiYXNlZCBvdXRwdXQgZm9ybWF0IGZsYWcKKworCSogbGlicHAvZm9ybWF0X291dHB1dC5jcHA6IG1vdmUgb3B0aW9uczo6ZGVtYW5nbGUgaGFuZGxpbmcgLi4uCisJKiBsaWJyZWd4L2RlbWFuZ2xlX3N5bWJvbC5jcHA6IGhlcmUKKworCSogbGlicHAvcHJvZmlsZV9jb250YWluZXIuaDoKKwkqIGxpYnBwL3Byb2ZpbGVfY29udGFpbmVyLmNwcDoKKwkqIHBwL29wcmVwb3J0X29wdGlvbnMuaDoKKwkqIHBwL29wcmVwb3J0X29wdGlvbnMuY3BwOgorCSogcHAvb3ByZXBvcnQuY3BwOiBoYW5kbGUgLS1pbmNsdWRlLXN5bWJvbHMKKworMjAwMy0wNC0yNyAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogcHAvb3ByZXBvcnRfb3B0aW9ucy5oOgorCSogcHAvb3ByZXBvcnRfb3B0aW9ucy5jcHA6CisJKiBwcC9vcHJlcG9ydC5jcHA6IGhhbmRsZSAtLXRocmVzaG9sZCwgcmVtb3ZlIC0taWdub3JlLXN5bWJvbHMKKworMjAwMy0wNC0yNyAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBsaWJwcC88dmFyaW91cz46IG1pbm9yIHNwYWNpbmcgZXRjLgorCisyMDAzLTA0LTI3ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBsaWJwcC9vdXRzeW1iZmxhZy5oOiByZW1vdmUgb3NmX3Nob3J0X3h4eCB2YXJpYW50CisJKiBsaWJwcC9mb3JtYXRfb3V0cHV0Lmg6CisJKiBsaWJwcC9mb3JtYXRfb3V0cHV0LmNwcDogcmVwbGFjZSBvc2Zfc2hvcnRfeHh4IGJ5IGEgYm9vbGVhbgorCSogbGlicHAvcHJvZmlsZV9jb250YWluZXIuY3BwOiB1cGRhdGUgYWNjb3JkaW5nCisKKwkqIHBwL29wcmVwb3J0X29wdGlvbnMuaDogZXhwb3J0IHNob3J0X2ZpbGVuYW1lIG9wdGlvbgorCSogcHAvb3ByZXBvcnQuY3BwOiB1c2Ugc2hvcnRfZmlsZW5hbWUKKworMjAwMy0wNC0yNyAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogbGlicHAvc3ltYm9sX2Z1bmN0b3JzLmg6IGFkZCBsZXNzX3N5bWJvbCBwcmVkaWNhdGUKKwkqIGxpYnBwL3N5bWJvbF9mdW5jdG9ycy5jcHA6IG5ldyBmaWxlLCBsZXNzX3N5bWJvbCBpbXBsZW1lbnRhdGlvbgorCSogbGlicHAvTWFrZWZpbGUuYW06IHN5bWJvbF9mdW5jdG9ycy5jcHAKKworCSogbGlicHAvc3ltYm9sX2NvbnRhaW5lci5oOgorCSogbGlicHAvc3ltYm9sX2NvbnRhaW5lci5jcHA6IHVzZSBhIG5vZGUgYmFzZWQgY29udGFpbmVyIGZvciBzeW1ib2xzCisJICBlbnN1cmluZyB2YWxpZGl0eSBvZiBzeW1ib2wgcG9pbnRlciBvdmVyIGEgc3ltYm9sX2NvbnRhaW5lciBsaWZlIHRpbWUKKwkqIGxpYnBwL3NhbXBsZV9jb250YWluZXIuaDoKKwkqIGxpYnBwL3NhbXBsZV9jb250YWluZXIuY3BwOiBkaXR0byBhcyBhYm92ZSBmb3Igc2FtcGxlcworCSogbGlicHAvcHJvZmlsZV9jb250YWluZXIuaDoKKwkqIGxpYnBwL3Byb2ZpbGVfY29udGFpbmVyLmNwcDogdXNlIHRoaXMgbmV3IGFwaSB0byBtZXJnZSBzeW1ib2xzCisJICBhbmQgc2FtcGxlLgorCisJKiBsaWJwcC9mb3JtYXRfb3V0cHV0Lmg6CisJKiBsaWJwcC9mb3JtYXRfb3V0cHV0LmNwcDogdXNlIG5ldyBhcGkgdG8gaXRlcmF0ZSBvdmVyIHNhbXBsZSBieSBzeW1ib2wKKworCSogcHAvb3ByZXBvcnQuY3BwOiBkZXRhaWxlZCBvdXRwdXQKKwkKKworMjAwMy0wNC0yNyAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBwcC9vcHJlcG9ydC5jcHA6IG1ha2Ugb3ByZXBvcnQgLWwgcHV0IGxhcmdlc3QgcmVzdWx0cworCWF0IHRoZSB0b3AgbGlrZSBvcHJlcG9ydCBkb2VzCisKKzIwMDMtMDQtMjYgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGxpYnBwL3Byb2ZpbGVfY29udGFpbmVyLmg6IGNvbW1lbnQKKworCSogcHAvb3ByZXBvcnRfb3B0aW9ucy5oOiBtb3JlIG9wdGlvbnMgZXhwb3J0CisJKiBwcC9vcHJlcG9ydC5jcHA6IGltcGxlbWVudCAtbC4gRG9lc24ndCB3b3JrcyBjb3JyZWN0bHk6IC0tbWVyZ2U9bGliCisKKzIwMDMtMDQtMjUgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIHBwL29wcmVwb3J0X29wdGlvbnMuaDogZXhwb3J0IGdsb2JhbF9wZXJjZW50CisJKiBwcC9vcHJlcG9ydC5jcHA6IGZpbmlzaCB0byBpbXBsZW1lbnQgb3BfdGltZSBsaWtlIGJlaGF2aW9yLiBSZW1haW5zCisJICB0byBpbXBsZW1lbnQgb3BfdGltZSAtbAorCisyMDAzLTA0LTI1ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBsaWJwcC9wYXJ0aXRpb25fZmlsZXMuY3BwOiBmaXggYSBjcmFzaCB3aGVuIHByb2ZpbGUgc3BlYyBpcyBlbXB0eQorCisJKiBwcC9vcHJlcG9ydF9vcHRpb25zLmNwcDogYmFpbCBvdXQgaWYgbm8gc2FtcGxlcyBmaWxlcyBhcmUgZm91bmQKKworMjAwMy0wNC0yNSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBwcC9vcHJlcG9ydF9vcHRpb25zLmNwcDogLS1oaWRlLWRlcGVuZGVudCBzaG91bGQgaGF2ZSAnaCcgYXMKKwlzaG9ydCBmb3JtLiBBZGQgYSBGSVhNRSBmb3IgYSBjcmFzaAorCisyMDAzLTA0LTI1ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBsaWJwcC9wYXJ0aXRpb25fZmlsZXMuY3BwOiB0aGlua28gaW4gc2FtcGxlIGZpbGVuYW1lIHBhcnRpdGlvbgorCisJKiBwcC9vcHJlcG9ydF9vcHRpb25zLmg6IGV4cG9ydCBtb3JlIG9wdGlvbnMKKwkqIHBwL29wcmVwb3J0X29wdGlvbnMuY3BwOiBhZGQgLS1oaWRlLWRlcGVuZGVudCwgY2hhbmdlIC0tbWVyZ2UgdG8gbm90CisJICBkZWZhdWx0IHRvIGFsbAorCSogcHAvb3ByZXBvcnQuY3BwOiBoYW5kbGUgLS1oaWRlLWRlcGVuZGVudCAtLWluY2x1ZGUtZGVwZW5kZW50IGFuZAorCSAgLS1tZXJnZT1saWIuIENvZGUgaXMgdWdseSwgdGlkeSBpbmNvbWluZworCisyMDAzLTA0LTI1ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGxpYnBwL2Zvcm1hdF9vdXRwdXQuY3BwOgorCSogbGlicHAvZm9ybWF0X291dHB1dC5oOgorCSogbGlicHAvb3V0c3ltYmZsYWcuaDogImltbXV0YWJsZSIgbm90ICJpbXV0YWJsZSIKKworCSogbGlicHAvcGFydGl0aW9uX2ZpbGVzLmNwcDogaW5jbHVkZSA8aXRlcmF0b3I+IHRvIGNvbXBpbGUKKworMjAwMy0wNC0yNCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogbGlicHAvcGFydGl0aW9uX2ZpbGVzLmg6IHR5cG8KKwkqIGxpYnBwL3Byb2ZpbGUuY3BwOiBkaWZmaWN1bHQgdG8gZ2V0IHJpZ2h0IHJlc3VsdCB3aXRoIGEgcmFuZG9tIHZhbHVlCisJICBpbiBwcm9maWxlOjpzdGFydF9vZmZzZXQKKworCSogcHAvb3ByZXBvcnRfb3B0aW9ucy5oOiBleHBvcnQgb3B0aW9uczo6cmV2ZXJzZV9zb3J0CisJKiBwcC9vcHJlcG9ydF9vcHRpb25zLmNwcDogYmFpbCBvdXQgaWYgd2UgZ2V0IG11bHRpcGxlIGNvdW50ZXIKKworCSogcHAvb3ByZXBvcnQuY3BwOiByYXcgb3V0cHV0IHJlc3VsdCBmb3IgYXBwbGljYXRpb24gKG5vdCBzeW1ib2wpCisJICBvdXRwdXQuCisKKzIwMDMtMDQtMjQgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGxpYnBwL2ZpbGVuYW1lX3NwZWMuaDoKKwkqIGxpYnBwL2ZpbGVuYW1lX3NwZWMuY3BwOgorCSogbGlicHAvcGFyc2VfY21kbGluZS5oOgorCSogbGlicHAvcGFyc2VfY21kbGluZS5jcHA6CisJKiBsaWJwcC9zcGxpdF9zYW1wbGVfZmlsZW5hbWUuaDoKKwkqIGxpYnBwL3NwbGl0X3NhbXBsZV9maWxlbmFtZS5jcHA6IHMvdW5pdF9tYXNrL3VuaXRtYXNrCisKKwkqIGxpYnBwL21lcmdlX3NwZWMuY3BwOgorCSogbGlicHAvbWVyZ2Vfc3BlYy5oOiByZW5hbWUgdG8KKwkqIGxpYnBwL3BhcnRpdGlvbl9maWxlcy5oOgorCSogbGlicHAvcGFydGl0aW9uX2ZpbGVzLmNwcDogaGVyZS4gQWRkIGFuZCBtZXJnZV9vcHRpb24uCisJICBwYXJ0aXRpb25fZmlsZXMgaXMgbm93IGEgY2xhc3MuCisJKiBwcC9vcHJlcG9ydF9vcHRpb25zLmg6CisJKiBwcC9vcHJlcG9ydF9vcHRpb25zLmNwcDoKKwkqIHBwL29wcmVwb3J0LmNwcDogdXBkYXRlIGFjY29yZGluZyB0byB0aGUgYWJvdmUuIEFkZCBhIHJvdWdobHkgc3VwcG9ydAorCSAgdG8gY291bnQgc2FtcGxlcyBmb3IgcGxhaW4gb3BfdGltZSBvcHJlcG9ydCBsaWtlCisKKzIwMDMtMDQtMjQgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogbGlicHAvcHJvZmlsZV9jb250YWluZXIuaDoKKwkqIGxpYnBwL3Byb2ZpbGVfY29udGFpbmVyLmNwcDogY2hvcCBvZmYgdGhlIF90IG9mIHRoZSBjbGFzcyBuYW1lCisKKwkqIGxpYnBwL2Zvcm1hdF9vdXRwdXQuY3BwOgorCSogbGlicHAvZm9ybWF0X291dHB1dC5oOgorCSogbGlicHAvc3ltYm9sX2NvbnRhaW5lci5jcHA6CisJKiBsaWJwcC9zeW1ib2xfY29udGFpbmVyLmg6CisJKiBwcC9vcF90aW1lLmNwcDoKKwkqIHBwL29wX3RvX3NvdXJjZS5jcHA6CisJKiBwcC9vcHJvZnBwLmNwcDogY2hhbmdlcyBmcm9tIHRoZSBhYm92ZQorCisyMDAzLTA0LTI0ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGxpYnBwL3Byb2ZpbGVfY29udGFpbmVyLmg6CisJKiBsaWJwcC9wcm9maWxlX2NvbnRhaW5lci5jcHA6IHBlZGFudHJ5IGZvciBzYW1wbGVfY29udGFpbmVyCisJaW5kaWNlcy4KKworCSogbGlicHAvc2FtcGxlX2NvbnRhaW5lci5oOgorCSogbGlicHAvc2FtcGxlX2NvbnRhaW5lci5jcHA6IHZhcmlvdXMgY2xlYW51cHMgYW5kIGRvY3MuIEFkZAorCWFuZCB1c2Ugc2l6ZV90eXBlLgorCisJKiBsaWJwcC9zeW1ib2xfY29udGFpbmVyLmg6CisJKiBsaWJwcC9zeW1ib2xfY29udGFpbmVyLmNwcDogcmVuYW1pbmdzLiBBZGQgYW5kIHVzZSBzaXplX3R5cGUuCisKKzIwMDMtMDQtMjQgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogbGlicHAvc3ltYm9sX2NvbnRhaW5lci5oOgorCSogbGlicHAvc3ltYm9sX2NvbnRhaW5lci5jcHA6IHJlbW92ZSB1bnVzZWQgb3BlcmF0b3JbXS4KKwlBZGQgc29tZSBkb2NzLiBTb21lIHNtYWxsIGNsZWFudXBzCisKKzIwMDMtMDQtMjQgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogbGlicHAvc3ltYm9sX2NvbnRhaW5lcl9pbXAuaDoKKwkqIGxpYnBwL3N5bWJvbF9jb250YWluZXJfaW1wLmNwcDoKKwkqIGxpYnBwL3NhbXBsZV9jb250YWluZXJfaW1wLmg6CisJKiBsaWJwcC9zYW1wbGVfY29udGFpbmVyX2ltcC5jcHA6IFRoZXNlIGNsYXNzZXMgd2VyZW4ndCB1c2luZworCXRoZSBwaW1wbCBpZGlvbSwgc28gdGhlIF9pbXAgd2FzIHNwdXJpb3VzLiBSZW1vdmUgdGhhdCBhcyB3ZWxsCisJYXMgcmVtb3ZpbmcgdGhlIF90IGZyb20gdGhlIG5hbWVzLCBhbmQgcmVuYW1lIHRvIC4uLgorCisJKiBsaWJwcC9zeW1ib2xfY29udGFpbmVyLmg6CisJKiBsaWJwcC9zeW1ib2xfY29udGFpbmVyLmNwcDoKKwkqIGxpYnBwL3NhbXBsZV9jb250YWluZXIuaDoKKwkqIGxpYnBwL3NhbXBsZV9jb250YWluZXIuY3BwOiAuLi5maWxlcyBtb3ZlZCBmcm9tIHRoZSBhYm92ZSB3aXRoCisJbmV3IG5hbWVzLgorCisyMDAzLTA0LTIzICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBsaWJ1dGlsKysvZ2VuZXJpY19zcGVjLmg6IG1pbm9yIGZvcm1hdGluZyB0d2VhaworCisJKiBsaWJwcC9wYXJzZV9jbWRsaW5lLmg6CisJKiBsaWJwcC9wYXJzZV9jbWRsaW5lLmNwcDogaGFuZGxlX25vbl9vcHRpb25zKCk6IHJldHVybiBwYXJzZV9jbWRsaW5lCisJICBieSB2YWx1ZQorCisJKiBsaWJwcC9tZXJnZV9zcGVjLmg6CisJKiBsaWJwcC9tZXJnZV9zcGVjLmNwcDogbmV3IGZpbGVzOiBwYXJ0aXRpb24gbGlzdCBvZiBzYW1wbGVzIGZpbGVuYW1lCisJICBhY2NvcmRpbmcgdG8gbWVyZ2Ugb3B0aW9ucy4KKwkqIGxpYnBwL01ha2VmaWxlLmFtOiB1cGRhdGUKKworCSogcHAvb3ByZXBvcnRfb3B0aW9ucy5jcHA6IG1vcmUgb3B0aW9ucyBoYW5kbGluZywgdXNlIHBhcnRpdGlvbl9maWxlcygpCisKKzIwMDMtMDQtMjIgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogcHAvb3ByZXBvcnRfb3B0aW9ucy5jcHA6IGNvbXBpbGUgZml4CisKKzIwMDMtMDQtMjEgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGxpYnV0aWwrKy9maWxlbmFtZV9tYXRjaC5oOgorCSogbGlidXRpbCsrL2ZpbGVuYW1lX21hdGNoLmNwcDogYWRkIHN0cmljdF9tYXRjaCgpCisKKwkqIGxpYnV0aWwrKy9nZW5lcmljX3NwZWMuY3BwOiBnZW5lcmljX3NwZWM8c3RyaW5nPjo6c2V0KCkgd2FzIG5vdAorCSAgc2V0dGluZyBpc19hbGwgbWVtYmVyIGxlYWRpbmcgdG8gYmFkIG1hdGNoaW5nCisKKwkqIGxpYnBwL2ZpbGVuYW1lX3NwZWMuY3BwOiBtaW5vciB0aWR5CisKKwkqIGxpYnBwL3BhcnNlX2NtZGxpbmUuaDoKKwkqIGxpYnBwL3BhcnNlX2NtZGxpbmUuY3BwOiBmaXggbWF0Y2goKQorCisJKiBsaWJwcC9zcGxpdF9zYW1wbGVfZmlsZW5hbWUuaDoKKwkqIGxpYnBwL3NwbGl0X3NhbXBsZV9maWxlbmFtZS5jcHA6IGhhbmRsZSBzYW1wbGUgZmlsZSBiYXNlIGRpcmVjdG9yeQorCisJKiBsaWJvcCsrL29wX3ByaW50X2V2ZW50Lmg6CisJKiBsaWJvcCsrL29wX3ByaW50X2V2ZW50LmNwcDoKKwkqIGxpYnBwL2Zvcm1hdF9vdXRwdXQuaDoKKwkqIGxpYnBwL2Zvcm1hdF9vdXRwdXQuY3BwOgorCSogbGlicHAvb3BwX3N5bWJvbC5oOgorCSogbGlicHAvcHJvZmlsZS5oOgorCSogbGlicHAvcHJvZmlsZS5jcHA6CisJKiBsaWJwcC9wcm9maWxlX2NvbnRhaW5lci5oOgorCSogbGlicHAvcHJvZmlsZV9jb250YWluZXIuY3BwOgorCSogbGlicHAvc2FtcGxlX2NvbnRhaW5lcl9pbXAuaDoKKwkqIGxpYnBwL3NhbXBsZV9jb250YWluZXJfaW1wLmNwcDoKKwkqIGxpYnBwL3N5bWJvbF9jb250YWluZXJfaW1wLmg6CisJKiBsaWJwcC9zeW1ib2xfY29udGFpbmVyX2ltcC5jcHA6CisJKiBsaWJwcC9zeW1ib2xfZnVuY3RvcnMuaDogcmVtb3ZlIGFsbCB1c2Ugb2YgY291bnRlciBudW1iZXIKKworCSogbGlicHAvY291bnRlcl9hcnJheS5oOgorCSogbGlicHAvY291bnRlcl9hcnJheS5jcHA6CisJKiBsaWJwcC9jb3VudGVyX3Byb2ZpbGUuaDoKKwkqIGxpYnBwL2NvdW50ZXJfcHJvZmlsZS5jcHA6IG5vIGxvbmdlciB1c2VkLCBtb3ZlIHNvbWUgYml0cyB0bworCSAgbGlicHAvcHJvZmlsZS4oaHxjcHApIGFuZCByZW1vdmUgdGhlc2UgZmlsZXMuCisJKiBsaWJwcC9NYWtlZmlsZS5hbTogdXBkYXRlIGFjY29yZGluZworCisJKiBwcC9vcF9tZXJnZS5jcHA6IHVzZSBwcm9maWxlX3Qgbm90IGNvdW50ZXJfcHJvZmlsZV90CisJKiBwcC9tYWtlZmlsZS5hbTogY29ycmVjdCBsaWIgZm9yIG9wX21lcmdlCisKKwkqIHBwL29wcmVwb3J0X29wdGlvbnMuY3BwOiBtb3JlIG9wdGlvbnMgaGFuZGxpbmcKKworMjAwMy0wNC0xOSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogbGlib3B0KysvcG9wdF9vcHRpb25zLmNwcDogZG9uJ3Qgc2hvdyBoZWxwX3N0ciB3aXRoIC0tdXNhZ2UKKwkqIGxpYnBwL2Zvcm1hdF9vdXRwdXQuY3BwOiB0eXBvCisJKiBsaWJ1dGlsL29wX2ZpbGUuYzogY3JlYXRlIGRpciB3aXRoIDc1NSBub3QgNzAwCisJKiBwcC9jb21tb25fb3B0aW9uLmNwcDogc291cmNlIGZvcm1hdGluZworCisJKiBsaWJwcC9wYXJzZV9jbWRsaW5lLmg6CisJKiBsaWJwcC9wYXJzZV9jbWRsaW5lLmNwcDogaGFuZGxlX25vbl9vcHRpb25zKCkgbmV3CisJKiBwcC9vcHJlcG9ydF9vcHRpb25zLmNwcDogaGFuZGxlIG1vcmUgb3B0aW9ucworCisJKiBwcC9vcHN1bW1hcnkuY3BwOgorCSogcHAvb3BzdW1tYXJ5X29wdGlvbnMuaDoKKwkqIHBwL29wc3VtbWFyeV9vcHRpb25zLmNwcDogcmVtb3ZlLCBvcHJlcG9ydCBzaG91bGQgZG8gaXRzIGpvYi4KKwkqIHBwL01ha2VmaWxlLmFtOiB1cGRhdGUKKworMjAwMy0wNC0xOCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogbGlib3B0KysvcG9wdF9vcHRpb25zLmNwcDogYWxsb3cgIm5vLSIgcHJlZml4IHRvIGxvbmcgb3B0aW9uIG5hbWUKKwkgIGltcGxpY2l0bHkgc3BlY2lmeSB0aGUgdmFsdWUgbXVzdCBiZSBuZWdhdGVkCisJKiBsaWJvcHQrKy9wb3B0X29wdGlvbnMuY3BwOiB1cGRhdGUgZG94eWdlbiBkb2N1bWVudGF0aW9uCisKKwkqIGxpYnBwL2Zvcm1hdF9vdXRwdXQuaDogbWlzc2luZyAjaW5jbHVkZQorCSogbGlicHAvZm9ybWF0X291dHB1dC5jcHA6IHNwYWNlICsgbWlub3IgY2hhbmdlCisKKwkqIHBwL29wYW5ub3RhdGVfb3B0aW9ucy5oOgorCSogcHAvb3Bhbm5vdGF0ZV9vcHRpb25zLmNwcDoKKwkqIHBwL29wZGlmZl9vcHRpb25zLmg6CisJKiBwcC9vcGRpZmZfb3B0aW9ucy5jcHA6CisJKiBwcC9vcGdwcm9mX29wdGlvbnMuaDoKKwkqIHBwL29wZ3Byb2Zfb3B0aW9ucy5jcHA6CisJKiBwcC9vcHJlcG9ydF9vcHRpb25zLmg6CisJKiBwcC9vcHJlcG9ydF9vcHRpb25zLmNwcDoKKwkqIHBwL29wc3VtbWFyeV9vcHRpb25zLmg6CisJKiBwcC9vcHN1bW1hcnlfb3B0aW9ucy5jcHA6IG5ldyBza2VsZXRvbiBmaWxlCisKKwkqIHBwL29wYW5ub3RhdGUuY3BwOgorCSogcHAvb3BkaWZmLmNwcDoKKwkqIHBwL29wZ3Byb2YuY3BwOgorCSogcHAvb3ByZXBvcnQuY3BwOgorCSogcHAvb3BzdW1tYXJ5LmNwcDogdXBkYXRlIHRvIGhhbmRsZSBvcHRpb25zCisKKwkqIHBwL2NvbW1vbl9vcHRpb24uY3BwOiBmb2xsb3cgbW9yZSBjbG9zZWx5IHBwX2ludGVyZmFjZQorCisJKiBwcC9vcHN1bW1hcnlfb3B0aW9ucy5jcHA6IHN0YXJ0IHRvIGhhbmRsZSBvcHN1bW1hcnkgb3B0aW9uCisKKwkqIHBwL01ha2VmaWxlLmFtOiB1cGRhdGUKKworMjAwMy0wNC0xNyAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogbGlicHAvZm9ybWF0X291dHB1dC5oOgorCSogbGlicHAvZm9ybWF0X291dHB1dC5jcHA6CisJKiBsaWJwcC9vdXRzeW1iZmxhZy5oOgorCSogbGlicHAvcHJvZmlsZV9jb250YWluZXIuaDoKKwkqIGxpYnBwL3Byb2ZpbGVfY29udGFpbmVyLmNwcDogb3NmX2hlYWRlci9vc2ZfZGV0YWlscyBhcmUgbm8gbG9uZ2VyCisJICBmbGFncyBidXQgc2VwYXJhdGUgYm9vbGVhbi4KKworMjAwMy0wNC0xNyAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogZGFlL29wZF9rZXJuZWwuYzoKKwkqIGRhZW1vbi9vcGRfa2VybmVsLmM6IHJlbW92ZSBsZWFkaW5nICcvJyBvbiBtb2R1bGUgbmFtZSBmaXhpbmcgMi41CisJIG1vZHVsZSBub3QgdW5kZXIge2tlcm59IGFuZCBzaW1pbGFyIGNhc2UgZm9yICJuby12bWxpbnV4IiB3aXRoIDIuNC8yLjUKKworCSogbGlidXRpbC9vcF9maWxlLmM6IHRpbnkgdGlkeQorCisyMDAzLTA0LTE3ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBsaWJvcC9vcF9tYW5nbGUuYzogYXBwX25hbWUgYW5kIGltYWdlIHdhcyByZXZlcnNlZCwge2RlcH0gd2FzIG1pc3NpbmcKKworMjAwMy0wNC0xNyAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBsaWJwcC9maWxlbmFtZV9zcGVjLmg6CisJKiBsaWJ1dGlsKysvY29tbWFfbGlzdC5oOiBjb21waWxlIGZpeGVzCisKKzIwMDMtMDQtMTcgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIHV0aWxzL29wY29udHJvbDogYmV0dGVyIC0tcmVzZXQgaGFuZGxpbmcKKworMjAwMy0wNC0xNiAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogZGFlIHdvcmtzLCBkYWVtb24gY29tcGlsZXMgYnV0IG5vdCB0ZXN0ZWQuCisKKwkqIGxpYm9wL29wX2NvbmZpZy5oOgorCSogbGlicHAvb3Bfc2Vzc2lvbi5oOgorCSogbGlicHAvc2Vzc2lvbi5jcHA6CisJKiBwcC9vcF9tZXJnZTogaGFuZGxlIG5ldyBwYXRoIHRvIHNhbXBsZXMgZmlsZXMuCisKKwkqIGxpYnV0aWwrKy9maWxlX21hbmlwLmg6CisJKiBsaWJ1dGlsKysvZmlsZV9tYW5pcC5jcHA6IG1vdmUgY3JlYXRlX2RpcigpLCBjcmVhdGVfcGF0aCgpIC4uLgorCSogbGlidXRpbC9vcF9maWxlLmg6CisJKiBsaWJ1dGlsL29wX2ZpbGUuYzogaGVyZS4gUmVtb3ZlIG9wX21vdmVfcmVndWxhcl9maWxlKCkKKworCSogZGFlbW9uL29wZF9pbWFnZS5jOgorCSogZGFlbW9uL29wZF9zYW1wbGVfZmlsZXMuaDoKKwkqIGRhZW1vbi9vcGRfc2FtcGxlX2ZpbGVzLmM6CisJKiBkYWUvb3BkX2ltYWdlLmM6CisJKiBkYWUvb3BkX3NhbXBsZV9maWxlcy5oOgorCSogZGFlL29wZF9zYW1wbGVfZmlsZXMuYzogdXNlIG5ldyBmaWxlbmFtZSBzY2hlbWUKKworCSogZGFlbW9uL29wcm9maWxlZC5jOgorCSogZGFlL29wcm9maWxlZC5jOiByZW1vdmUgc2FtcGxlcyBmaWxlcyBiYWNrdXAgc3R1ZmYKKworCSogbGlib3Avb3BfbWFuZ2xlLmg6CisJKiBsaWJvcC9vcF9tYW5nbGUuYzogdWdseSBtb2RpZmljYXRpb24gdG8gaGFuZGxlIG5ldyBzYW1wbGVzIGZpbGVuYW1lCisKKwkqIHV0aWxzL29wY29udHJvbDogaGFuZGxlIG5ldyBzYW1wbGVzIGZpbGVzIHBhdGgsIC0tc2F2ZSBhbmQgLS1yZXNldAorCSAgYXJlIHdvcmtpbmcgdG9vLgorCisJKiBndWkvb3Byb2Zfc3RhcnRfdXRpbC5jcHA6IHVzZSBuZXcgY3JlYXRlX3BhdGgoKSBBUEkKKworMjAwMy0wNC0xNiAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogcHAvY29tbW9uX29wdGlvbi5jcHA6CisJKiBwcC9jb21tb25fb3B0aW9uLmg6CisJKiBsaWJyZWdleC9kZW1hbmdsZV9zeW1ib2wuY3BwOiByZW5hbWUgZGVtYW5nbGVfYW5kX3NocmluayB0bworCSAgc21hcnRfZGVtYW5nbGUKKworMjAwMy0wNC0xNiAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogc3RhcnRpbmcgYnJhbmNoIHBwLWludGVyZmFjZS1icmFuY2gKKworCSogTWFrZWZpbGUuYW06CisJKiBjb25maWd1cmUuaW46IGhhbmRsZSBuZXcgc3ViIGRpciBsaWJwcAorCisJKiBsaWJ1dGlsKysvY29tbWFfbGlzdC5oOiBuZXcgZmlsZSBoYW5kbGluZyBvZiBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZgorCSAgaXRlbXMuCisJKiBsaWJ1dGlsKysvZ2VuZXJpY19zcGVjLmNwcDoKKwkqIGxpYnV0aWwrKy9nZW5lcmljX3NwZWMuaDogbmV3IGZpbGUKKwkqIGxpYnV0aWwrKy9NYWtlZmlsZS5hbTogaGFuZGxlIG5ldyBmaWxlCisKKwkqIHBwL2NvdW50ZXJfYXJyYXkuKjoKKwkqIHBwL2NvdW50ZXJfcHJvZmlsZS4qOgorCSogcHAvY291bnRlcl91dGlsLio6CisJKiBwcC9kZXJpdmVfZmlsZXMuKjoKKwkqIHBwL2Zvcm1hdF9vdXRwdXQuKjoKKwkqIHBwL29wcF9zeW1ib2wuaDoKKwkqIHBwL291dHN5bWJmbGFnLmg6CisJKiBwcC9wcm9maWxlLio6CisJKiBwcC9wcm9maWxlX2NvbnRhaW5lci4qOgorCSogcHAvc2FtcGxlX2NvbnRhaW5lcl9pbXAuKjoKKwkqIHBwL3Nlc3Npb24uKjoKKwkqIHBwL3N5bWJvbF9jb250YWluZXJfaW1wLio6CisJKiBwcC9zeW1ib2xfZnVuY3RvcnMuKjogbW92ZSB0bworCisJKiBsaWJwcC8qOiBoZXJlCisJKiBsaWJwcC9maWxlbmFtZV9zcGVjLmNwcDoKKwkqIGxpYnBwL2ZpbGVuYW1lX3NwZWMuaDogbmV3IGZpbGUgaGFuZGxpbmcgb2YgcHAgc2FtcGxlIGZpbGVuYW1lCisJKiBsaWJwcC9wYXJzZV9jbWRsaW5lLmNwcDoKKwkqIGxpYnBwL3BhcnNlX2NtZGxpbmUuaDogbmV3IGZpbGUsIGhhbmRsaW5nIG9mIGNvbW1hbmQgbGluZSB0YWc6dmFsdWUKKwkqIGxpYnBwL01ha2VmaWxlLmFtOiBuZXcgZmlsZSBidWlsZCBsaWJwcC5hCisKKwkqIHBwL2NvbW1vbl9vcHRpb24uaDoKKwkqIHBwL2NvbW1vbl9vcHRpb24uY3BwOiBjb21tb24gb3B0aW9uIHRvIHBwIHRvb2xzLiBJbXBsZW1lbnQgY29tbW9uCisJICBlbnRyeSBwb2ludCB0byBwcCB0b29scy4KKwkqIHBwL29wYW5ub3RhdGUuY3BwOgorCSogcHAvb3BkaWZmLmNwcDoKKwkqIHBwL29wZ3Byb2YuY3BwOgorCSogcHAvb3ByZXBvcnQuY3BwOgorCSogcHAvb3BzdW1tYXJ5LmNwcDogc2tlbGV0b24gZmlsZSBmb3IgYWxsIHBwIHRvb2xzLgorCSogcHAvTWFrZWZpbGUuYW06IHJlbW92ZSBvbGQgcHAgdG9vbHMsIGFkZCB0aGUgbmV3cy4KKworMjAwMy0wNC0yOCAgQWxleCBUc2FyaW91bm92ICA8YWxleHRAZmMuaHAuY29tPgorCisJKiBtb2R1bGUvaWE2NC9vcF9wbXUuYzogZml4IGNvbXBpbGUKKworMjAwMy0wNC0yNCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogbW9kdWxlL2NvbXBhdDIyLmg6IGFkZCBjcHVpZF9lZHggd2hlbiBsaW51eCB2ZXJzaW9uIDwgMi4yLjIxCisKKzIwMDMtMDQtMjQgIERhdmUgSm9uZXMgPGRhdmVqQGNvZGVtb25rZXkub3JnLnVrPgorCisJKiBldmVudHMveDg2LTY0LmhhbW1lci5ldmVudHM6CisJKiBldmVudHMveDg2LTY0LmhhbW1lci51bml0X21hc2tzOiB0eXBvIGZpeGVzIGZyb20gQU1ELgorCSogbW9kdWxlL3g4Ni9jcHVfdHlwZS5jOiBDaGVjayBmb3IgQVBJQyBvbiBBdGhsb24gYmVmb3JlIGVuYWJsaW5nIGl0LgorCisyMDAzLTA0LTE1ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBldmVudHMvaTM4Ni1odC5ldmVudHM6IGFsbCBldmVudHMgYWxsb3cgb25seSBvbmUgY291bnRlciwgcmVtb3ZlCisJICB0aHJlZSBldmVudHMgZHVlIHRvIEVTQ1IgcmVzdHJpY3Rpb24uCisJKiBldmVudHMvaTM4Ni5ldmVudHM6IGFkZCBzb21lIGNvbW1lbnRzLgorCisJKiBtb2R1bGUveDg2L29wX21vZGVsX3A0LmM6IHN5bmNoIHdpdGggbGludXggMi41IG1haW5saW5lCisJICAtIGV4Y2VwdCBldmVudHMgQ1RSX0JQVV8wIGFsbCB2aXJ0dWFsIGNvdW50ZXIgd2FzIG5vdCB3b3JraW5nLgorCSAgLSBQcmV2ZW50cyBhIHNlZ2ZhdWx0IHdoZW4gdXNpbmcgaW5jb3JyZWN0IGNvdW50ZXIgbnVtYmVyLgorCSAgLSBFU0NSIGV2ZW50IHNlbGVjdCBpcyA2IGJpdHMgbGVuZ3RoIG5vdCA1LgorCSAgLSBEb24ndCBmYWlsIHNpbGVudGx5IGluIHA0X3NldHVwX2N0cnMoKS4KKwkqIG1vZHVsZS94ODYvb3BfbXNyLmg6IG1hdGNoIG5hbWUgdXNlZCBpbiBsaW51eC4KKworMjAwMy0wNC0xNSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBkb2Mvb3Byb2ZpbGUuMS5pbjoKKwkqIGRvYy9vcHJvZmlsZS54bWw6IHNtYWxsIGVuZ2xpc2ggZml4ZXMKKworMjAwMy0wNC0xNCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogZGFlL29wZF9rZXJuZWwuYzoKKwkqIGRhZS9vcGRfcHJvYy5jOgorCSogZGFlL29wcm9maWxlZC5jOgorCSogdXRpbHMvb3Bjb250cm9sOgorCSogZG9jL29wcm9maWxlLjEuaW46CisJKiBkb2Mvb3Byb2ZpbGUueG1sOiBoYW5kbGUgLS1uby12bWxpbnV4CisKKwkqIGRhZW1vbi9vcGRfa2VybmVsLmM6IHVzZSBuby12bWxpbnV4IG5vdCAvbm8tdm1saW51eCB3aGVuIHVzZXIKKwkgIHNwZWNpZnkgLS1uby12bWxpbnV4CisKKzIwMDMtMDQtMDggIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogSEFDS0lORzogZGVzY3JpYmUgd2hhdCBoYXBwZW5zIHdpdGggb3Byb2ZpbGUtd3d3CisKKzIwMDMtMDQtMDggIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGxpYnV0aWwrKy9vcF9iZmQuY3BwOiBjaGVjayBmb3IgIzcxNzcyMCBhbmQgZGlyZWN0IHVzZXIgdG8KKwkgIEZBUSBpZiBkZXRlY3RlZC4gTm90ZSB0aGFuIHdlIGRvbid0IGRldGVjdCBhbGwgc3ltcHRvbSBvZiB0aGlzIGJ1Zy4KKworMjAwMy0wNC0wOCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogbGlidXRpbCsrL29wX2V4Y2VwdGlvbi5oOiBvcF9ydW50aW1lX2Vycm9yIGlzIG5vIGxvbmdlciBhYnN0cmFjdAorCisJKiBsaWJyZWdleC9vcF9yZWdleC5oOiBjb21tZW50IGFuZCB0aWR5CisJKiBsaWJyZWdleC9vcF9yZWdleC5jcHA6IHRpZHkKKworMjAwMy0wNC0wNyAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogcHAvb3BfdG9fc291cmNlLmNwcDogbWFrZSBlYWNoIGxpbmUgYmUgcHJlZml4ZWQgd2l0aCB0aGUgc2FtcGxlcworCWNvdW50cy4gSXQgd2FzIHRvbyBoYXJkIHRvIGZpbmQgc2FtcGxlcyBpbnNpZGUgcHJldmlvdXMgZm9ybWF0LgorCisyMDAzLTA0LTA3ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBsaWJ1dGlsKysvc3RyaW5nX21hbmlwLmNwcDogd29yayBhcm91bmQgZm9yIGdjYyAyLjk1CisJKiBwL29wX3RvX3NvdXJjZS5jcHA6IG1pbm9yIGNsZWFudXAKKworMjAwMy0wNC0wNyAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBwcC9vcF90b19zb3VyY2UuY3BwOiBjaGVhdCBhIGJpdCB0byBnZXQKKwliZXR0ZXIgaW5kZW50YXRpb24gb24gdGhlIGRlZmF1bHQgc2V0dXAsIGJ5CisJd2lkZW5pbmcgY291bnRlciB3aWR0aCB0byA3LgorCisyMDAzLTA0LTA3ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIHBwL29wX3RvX3NvdXJjZS5jcHA6IGFwcGVuZCBzeW1ib2wgc3VtbWFyeQorCWFubm90YXRpb25zIHNlcGFyYXRlIGZyb20gdGhlIHByb2xvZyBzYW1wbGVzIG9uCisJdGhlIHNhbWUgbGluZS4KKworMjAwMy0wNC0wNyAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBwcC9vcF90b19zb3VyY2UuY3BwOiBvbmx5IG91dHB1dCBsaW5lIDAgYW5ub3RhdGlvbgorCWlmIHNhbXBsZXMgZm91bmQgdGhlcmUuCisKKzIwMDMtMDQtMDcgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogdXRpbHMvb3Bjb250cm9sOiBtYWtlIHN1cmUgLS1jdHJYLWV2ZW50PW5vbmUgZ2V0cyBub3RpY2VkCisKKzIwMDMtMDQtMDYgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogbGlidXRpbCsrL3N0cmluZ19tYW5pcC5oOgorCSogbGlidXRpbCsrL3N0cmluZ19tYW5pcC5jcHA6IHJlbW92ZSB3c19wcmVmaXgoKS4gQWRkCisJZm9ybWF0X3BlcmNlbnQoKS4KKworCSogcHAvb3BfdG9fc291cmNlLmNwcDogbWFrZSBlYWNoIGxpbmUgYmUgcHJlZml4ZWQgd2l0aAorCXRoZSBzYW1wbGUgY291bnRzLCBpbnN0ZWFkIG9mIG9uIGEgbGluZSBhYm92ZSwgdG8gcHJlc2VydmUKKwlsaW5lIG51bWJlcmluZy4KKworMjAwMy0wNC0wNiAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBwcC9vcF90b19zb3VyY2UuY3BwOiBzb21lIHJlbmFtaW5ncyBmb3IgY2xhcml0eQorCisyMDAzLTA0LTA2ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIHBwL29wX3RvX3NvdXJjZS5jcHA6IG1vdmUgZXh0cmFjdF9ibGFua19hdF9iZWdpbigpIHRvIC4uLgorCisJKiBsaWJ1dGlsKysvc3RyaW5nX21hbmlwLmNwcDogLi4uIGhlcmUsIGFuZCByZW5hbWUgYXMKKwl3c19wcmVmaXgoKS4KKwkKKzIwMDMtMDQtMDYgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogcHAvb3BfdG9fc291cmNlLmNwcDogcHJlZml4IGNvbW1lbnQgbGluZXMuCisJT3V0cHV0IHRoZSBnZW5lcmFsIGZvb3RlciBvbiBlYWNoIHNlcGFyYXRlIGZpbGUuCisJT3V0cHV0IHRoZSBpbmZvIGF0IHRoZSBib3R0b20gd2hlbiBvdXRwdXR0aW5nCisJc2VwYXJhdGUgZmlsZXMgKHRvd2FyZHMgbWFpbnRhaW5pbmcgbGluZSBudW1iZXJpbmcpLgorCisyMDAzLTA0LTA2ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIHBwL29wX3RvX3NvdXJjZS5jcHA6IGNvbnN0cnVjdCBhIGZpbGUtc2NvcGUKKwljbWRsaW5lIHN0cmluZywgaW5zdGVhZCBvZiBwYXNzaW5nIGl0IGFyb3VuZC4KKworMjAwMy0wNC0wNiAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBsaWJyZWdleC9vcF9yZWdleHAuY3BwOiByZS1hcnJhbmdlIGEgYml0CisKKzIwMDMtMDQtMDYgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogY29uZmlndXJlLmluOgorCSogYWxsIE1ha2VmaWxlLmFtOiBkb24ndCBibGluZGx5IHNldCAkTElCUywgdXNlCisJZXhwbGljaXQgbWVudGlvbiBvZiB3aGljaCBsaWJzIGFyZSBuZWVkZWQuCisKKwkqIGRhZS9NYWtlZmlsZS5hbToKKwkqIGRhZW1vbi9NYWtlZmlsZS5hbTogb25seSBsaW5rIHdpdGggQysrIGlmIG5lZWRlZC4KKworMjAwMy0wNC0wNSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogbGlib3Avb3BfY29uZmlnXzI0Lmg6CisJKiBtb2R1bGUvb3Byb2ZpbGUuYzoKKwkqIG1vZHVsZS9vcHJvZmlsZS5jOiBtYWtlIHdhdGVybWFyayBzaXplIHByb3BvcnRpb25hbCB0byBidWZmZXIgc2l6ZS4KKworMjAwMy0wNC0wNSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogbGlib3Avb3BfZXZlbnRzLmg6CisJKiBsaWJvcC9vcF9ldmVudHMuYzogcmUtYWRkIG9wX21pbl9jb3VudCgpOworCisJKiBkYWUvb3Byb2ZpbGVkLmM6CisJKiBkYWVtb24vb3Byb2ZpbGVkLmM6IHVzZSBvcF9taW5fY291bnQoKSBmaXhpbmcgIzcxNTkyMworCisyMDAzLTA0LTAxICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGxpYmRiL01ha2VmaWxlLmFtOiBmaXggbWFrZSBkaXN0CisKKwkqIGRhZW1vbi9vcGRfY29va2llLmg6IGFkZCBTUEFSQyBzeXNjYWxsIG51bWJlci4KKwkgIFRoZSBzeXN0ZW0gY2FsbCBmdW5jdGlvbiBpcyBPSyBmb3Igc3BhcmMvc3BhcmM2NAorCisyMDAzLTAzLTMxICBXaWxsIENvaGVuICA8d2NvaGVuQHJlZGhhdC5jb20+CisKKwkqIGxpYmRiL29kYl9oYXNoLmg6IFJlbmFtZWQgZGJfaGFzaC5oLgorCisJKiBkYWUvTWFrZWZpbGUuYW06CisJKiBkYWUvb3BkX2ltYWdlLmM6CisJKiBkYWUvb3BkX2ltYWdlLmg6CisJKiBkYWUvb3BkX3Byb2MuYzoKKwkqIGRhZS9vcGRfc2FtcGxlX2ZpbGVzLmM6CisJKiBkYWVtb24vTWFrZWZpbGUuYW06CisJKiBkYWVtb24vb3BkX2ltYWdlLmM6CisJKiBkYWVtb24vb3BkX2ltYWdlLmg6CisJKiBkYWVtb24vb3BkX3NhbXBsZV9maWxlcy5jOgorCSogbGliYWJpL01ha2VmaWxlLmFtOgorCSogbGliYWJpL2FiaS5jcHA6CisJKiBsaWJhYmkvYWJpX3Rlc3QuY3BwOgorCSogbGliYWJpL29wX2ltcG9ydC5jcHA6CisJKiBsaWJkYi9NYWtlZmlsZS5hbToKKwkqIGxpYmRiL2RiX2RlYnVnLmM6CisJKiBsaWJkYi9kYl9oYXNoLmg6CisJKiBsaWJkYi9kYl9pbnNlcnQuYzoKKwkqIGxpYmRiL2RiX21hbmFnZS5jOgorCSogbGliZGIvZGJfc3RhdC5jOgorCSogbGliZGIvZGJfdGVzdC5jOgorCSogbGliZGIvZGJfdHJhdmVsLmM6CisJKiBwcC9NYWtlZmlsZS5hbToKKwkqIHBwL2NvdW50ZXJfcHJvZmlsZS5jcHA6CisJKiBwcC9jb3VudGVyX3Byb2ZpbGUuaDoKKwkqIHBwL29wX21lcmdlLmNwcDogQ2hhbmdlIG5hbWVzIHRvIGF2b2lkIGxpYmRiLmEgbmFtZSBjb25mbGljdHMuCisJCisyMDAzLTAzLTMwICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGNvbmZpZ3VyZS5pbjogYnVtcCB0byAwLjZjdnMKKworCSogZG9jL29wcm9maWxlLnhtbDogZml4IGlkLiBBZGQgamF2YSBldGMuIG1lbnRpb24KKworCSogdXRpbHMvTWFrZWZpbGUuYW06CisJKiB1dGlscy9vcF9zdGFydDoKKwkqIHV0aWxzL29wX3N0YXJ0XzI1OgorCSogdXRpbHMvb3Bfc3RvcDoKKwkqIHV0aWxzL29wX3N0b3BfMjU6CisJKiB1dGlscy9vcF9kdW1wOgorCSogdXRpbHMvb3BfZHVtcF8yNToKKwkqIHV0aWxzL29wX3Nlc3Npb246IGZpbmFsbHkgcmVtb3ZlIHRoZSBiYWNrIGNvbXBhdCBjcmFwCisKKwkqIEhBQ0tJTkc6IGFkZCByZWxlYXNlLW5vdGVzIHBvbGljeQorCisyMDAzLTAzLTMwICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGNvbmZpZ3VyZS5pbjogYnVtcCB0byAwLjUuMgorCisyMDAzLTAzLTMwICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIE1ha2VmaWxlLmFtOiByZW1vdmUgb3BfYXJjaC5oIGZvciBpYTY0CisKKzIwMDMtMDMtMjcgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogZG9jL29wcm9maWxlLnhtbDogc2V2ZXJhbCBtb3JlIGV4YW1wbGVzIGFuZCBmaXhlcworCisyMDAzLTAzLTI2ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwlGcm9tIGEgcGF0Y2ggYnkgQnJ5YW4gUml0dG1leWVyLgorCisJKiBtb2R1bGUvb3Byb2ZpbGUuYzoKKwkqIG1vZHVsZS9vcHJvZmlsZS5oOiBwdXNoICJpcnFfZW5hYmxlZCIgdGVzdAorCWludG8gYXJjaCBjb2RlLCBkb24ndCBwYXNzIHN0cnVjdCBwdF9yZWdzLgorCisJKiBtb2R1bGUveDg2L29wX2FyY2guaDogY2xlYW51cHMKKworCSogbW9kdWxlL3g4Ni9vcF9tb2RlbF9hdGhsb24uYzoKKwkqIG1vZHVsZS94ODYvb3BfbW9kZWxfcHByby5jOgorCSogbW9kdWxlL3g4Ni9vcF9tb2RlbF9wNC5jOgorCSogbW9kdWxlL3g4Ni9vcF9ydGMuYzogY2hhbmdlcyBmcm9tIGFib3ZlCisKKwkqIG1vZHVsZS9pYTY0L29wX2FyY2guaDogcmVtb3ZlCisJKiBtb2R1bGUvaWE2NC9vcF9wbXUuYzogY2hhbmdlIGZyb20gYWJvdmUKKworMjAwMy0wMy0yNCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBkb2Mvb3Byb2ZpbGUueG1sOiBkb2N1bWVudCBwcm9sb2d1ZXMsIGFuZCBpbmxpbmUgZnVuY3Rpb25zCisKKzIwMDMtMDMtMjQgIFdpbGwgQ29oZW4gIDx3Y29oZW5AcmVkaGF0LmNvbT4KKworCSogbGlidXRpbC9vcF9maWxlaW8uYyAob3BfZ2V0X2xpbmUpOiBVc2UgbG93ZXIgY29zdCBnZXRjKCkuCisKKzIwMDMtMDMtMjQgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogbTQvY29uZmlnbW9kdWxlLm00OiBmaXggcXVvdGluZyBwcm9ibGVtIGZvciBhd2sKKworMjAwMy0wMy0yMyAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBjb25maWd1cmUuaW46CisJKiBtNC86IG1vdmUgbG90cyBvZiBzdHVmZiBpbnRvIHNlcGFyYXRlIC5tNCBmaWxlcworCisJKiBtNC90eXBlZGVmLm00OiBpbXByb3ZlIGNvbmZpZ3VyZSBtZXNzYWdlCisKKzIwMDMtMDMtMjMgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogY29uZmlndXJlLmluOgorCSogbTQvTWFrZWZpbGUuYW06CisJKiBtNC9jb3B5aWZjaGFuZ2UubTQ6CisJKiBtNC9kb2Nib29rLm00OgorCSogbTQva2VybmVsb3B0aW9uLm00OgorCSogbTQva2VybmVsdmVyc2lvbi5tNDoKKyAJKiBtNC9yZXN1bHR5bi5tNDogbW92ZSBjb25maWd1cmUuaW4gbWFjcm9zIHRvIG00LworCisyMDAzLTAzLTIzICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIG00L0NoYW5nZUxvZzogYWRkIGNvbW1lbnQKKworCSogbTQvdHlwZWRlZi5tNDogY2FuJ3QgdXNlIEFDX0xBTkdfUFVTSC9QT1AKKworMjAwMy0wMy0yMyAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogVE9ETzogdXBkYXRlCisKKwkqIG00L01ha2VmaWxlLmFtOgorCSogbTQvdHlwZWRlZi5tNDogbmV3IGZpbGUgdG8gZ2V0IHVuZGVybGluZWQgdHlwZSBmb3IgYSB0eXBlZGVmLgorCQorCSogY29uZmlndXJlLmluOiBnZXQgYXQgY29uZmlndXJlIHRpbWUgdGhlIHJlYWwgdW5kZXJsaW5lZCB0eXBlCisJICBmb3Igc2l6ZV90IGFuZCBwdHJkaWZmX3QKKworCSogbGlicmVnZXgvc3RsLnBhdDogbW92ZSB0byAuLi4KKwkqIGxpYnJlZ2V4L3N0bC5wYXQuaW46IGhlcmUuIFVzZSBAU0laRV9UX1RZUEVAIGFuZCBAUFRSRElGRl9UX1RZUEVACisJKiBsaWJyZWdleC9NYWtlZmlsZS5hbTogdXBkYXRlIGFjY29yZGluZworCSogbGlicmVnZXgvLmN2c2lnbm9yZTogaWdub3JlIHN0bC5wYXQKKworMjAwMy0wMy0yMiAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogdXRpbHMvb3Bjb250cm9sOiB1c2UgJE9QX0hFTFAgbm90IG9wX2hlbHAKKwkqIHV0aWxzL29wX2hlbHAuYzogcmVtb3ZlIHNob3J0IG9wdGlvbiBmb3IgLS1nZXQtY3B1LWZyZXF1ZW5jeQorCisyMDAzLTAzLTIyICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBUT0RPOiB1cGRhdGUKKworCSogbTQ6IG5ldyBkaXJlY3RvcnkKKwkqIG00Ly5jdnNpZ25vcmU6IG5ldworCisJKiBhY2luY2x1ZGUubTQ6IG1vdmUgdG8KKwkqIG00L3F0Lm00OiBoZXJlCisJKiBtNC9NYWtlZmlsZS5hbTogbmV3IGZvciBFWFRSQV9ESVNUID0gYWxsIG91ciAubTQKKwkqIE1ha2VmaWxlLmFtOgorCSogY29uZmlndXJlLmluOgorCSogYXV0b2dlbi5zaDogaGFuZGxlIG00IHN1YmRpciwgYWRkIC1JIG00IHRvIGFjbG9jYWwgZmxhZ3MKKworMjAwMy0wMy0yMiAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSAgU3VnZ2VzdGVkIGJ5IEpvaG4KKworCSogbGlidXRpbC9vcF9jcHVmcmVxLmM6IHR5cG8gaW4gY29tbWVudAorCisJKiB1dGlscy9vcF9oZWxwLmM6IGFkZCAtLWdldC1jcHUtZnJlcXVlbmN5LCBpbnRlbnRpb25uYWx5IG5vdAorCSAgZG9jdW1lbnRlZC4KKwkqIHV0aWxzL29wY29udHJvbDogdXNlIG9wX2hlbHAgLS1nZXQtY3B1LWZyZXF1ZW5jeSBhbmQgcmVtb3ZlCisJICB1Z2x5IHNoZWxsIHNjcmlwdCBkb2luZyB0aGUgc2FtZSB0aGluZy4KKworMjAwMy0wMy0yMiAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogbGlidXRpbC9vcF9jcHVmcmVxLmg6CisJKiBsaWJ1dGlsL29wX2NwdWZyZXEuYzogbmV3IGZpbGUgZXhwb3J0aW5nIG9wX2NwdV9mcmVxdWVuY3koKQorCSogbGlidXRpbC9NYWtlZmlsZS5hbTogdXBkYXRlIGFjY29yZGluZworCisJKiB1dGlscy9vcGNvbnRyb2w6IGhhbmRsZSBvdGhlciBhcmNoCisKKwkqIGd1aS9vcHJvZl9zdGFydF91dGlsLmg6CisJKiBndWkvb3Byb2Zfc3RhcnRfdXRpbC5jcHA6IHJlbW92ZSBnZXRfY3B1X3NwZWVkKCkKKwkqIGd1aS9vcHJvZl9zdGFydC5oOgorCSogZ3VpL29wcm9mX3N0YXJ0LmNwcDogYW5kIHVzZSBpbnN0ZWFkIG9wX2NwdV9mcmVxdWVuY3koKQorCisJKiBkYWVtb24vb3Byb2ZpbGVkLmM6CisJKiBkYWUvb3Byb2ZpbGVkLmM6IHJlcGxhY2UgLS1jcHUtc3BlZWQgb3B0aW9uIGJ5IGEgY2FsbCB0bworCSAgb3BfY3B1X2ZyZXF1ZW5jZXkoKQorCisyMDAzLTAzLTIwICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGRvYy9vcHJvZmlsZS54bWw6IGRvYyBzb21lIDIuNSBtb2R1bGUgc3R1ZmYKKworMjAwMy0wMy0yMCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiB1dGlscy9vcGNvbnRyb2w6IGZpeCBvcGNvbnRyb2wgLS1kdW1wIHRvIGRvIHNvbWV0aGluZworCisJKiBkYWVtb24vb3BkX2ltYWdlLmM6IGdpdmUgYSBwcmludGYgd2hlbiByZWFkaW5nIHRoZSBidWZmZXIuCisKKzIwMDMtMDMtMTkgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGxpYnV0aWwrKy9vcF9iZmQuY3BwOiBjb3JyZWN0IGdldF92bWFfcmFuZ2UoKQorCisJKiBwcC9vcHJvZnBwLmNwcDogZG9fZHVtcF9ncHJvZigpIHRoaXMgdGltZSBpdCdzIHJpZ2h0IQorCisyMDAzLTAzLTE4ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIHBwL3Byb2ZpbGUuY3BwOiBpbXByb3ZlIG10aW1lIHdhcm5pbmcgZm9yIDIuNSBtb2R1bGVzCisKKzIwMDMtMDMtMTggIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogcHAvZGVyaXZlX2ZpbGVzLmNwcDogc29tZSBtb3JlIDIuNSBtb2R1bGVzIGRlcml2YXRpb24gZml4ZXMKKworMjAwMy0wMy0xOCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogcHAvZGVyaXZlX2ZpbGVzLmNwcDogZml4IGhhbmRsaW5nIG9mIDIuNSBtb2R1bGUgbmFtZQorCisyMDAzLTAzLTE4ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGRhZW1vbi9vcGRfaW1hZ2UuYzoKKwkqIGxpYm9wL29wX2ludGVyZmFjZV8yNS5oOiByZW5hbWUgdG8gTU9EVUxFX0xPQURFRF9DT0RFCisKKzIwMDMtMDMtMTggIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIFRPRE86IHVwZGF0ZQorCisJKiBwcC9kZXJpdmVfZmlsZXMuY3BwOiBzcGVjaWFsIHRvIHJldHJpZXZlIDIuNSBtb2R1bGUKKworMjAwMy0wMy0xOCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogVE9ETzogdXBkYXRlCisKKwkqIHBwL3N5bWJvbF9jb250YWluZXJfaW1wLmg6CisJKiBwcC9zeW1ib2xfY29udGFpbmVyX2ltcC5jcHA6CisJKiBwcC9wcm9maWxlX2NvbnRhaW5lci5oOgorCSogcHAvcHJvZmlsZV9jb250YWluZXIuY3BwOiBmaW5kKHN0cmluZyBzeW1ib2xfbmFtZSkgcmV0dXJuIGEgdmVjdG9yCisJICBvZiBzeW1ib2wgcmF0aGVyIGEgYSBzaW5nbGUgc3ltYm9sCisJKiBwcC9vcHJvZnBwLmNwcDogdXNlIGFib3ZlIGNoYW5nZSBzbyBvcHJvZnBwIC1zIHdpbGwgc2hvdyBhbGwKKwkgIHN5bWJvbCB3aXRoIHRoZSBzYW1lIG5hbWUuCisKKwkqIHBwL3N5bWJvbF9mdW5jdG9ycy5oOiByZW1vdmUgdW51c2VkIGZ1bmN0b3JzIGVxdWFsX3N5bWJvbF9ieV9uYW1lCisKKzIwMDMtMDMtMTcgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIFRPRE86IHVwZGF0ZQorCisJKiBsaWJ1dGlsL29wX2ZpbGVpby5oOgorCSogbGlidXRpbC9vcF9maWxlaW8uYzogb3Bfd3JpdGVfdTY0KCkgbmV3CisJKiBsaWJ1dGlsL29wX3R5cGVzLmg6IGNvbnRpbnVlIG91ciBzaWxseSB0eXBlZGVmOiBhZGQgdTY0CisKKwkqIGxpYnV0aWwrKy9vcF9iZmQuaDoKKwkqIGxpYnV0aWwrKy9vcF9iZmQuY3BwOiBvcF9iZmQ6OmFyY2hfYml0c19wZXJfYWRkcmVzcygpIG5ldyBhbGxvd2luZworCSAgdG8gZ2V0LCBvbiBhIHBlci1iaW5hcnkgYmFzaXMsIHRoZSB2bWEgc2l6ZS4KKworCSogcHAvb3Byb2ZwcC5jcHA6IGZpeCA2NCBiaXRzIGFyY2ggZ3Byb2Ygb3V0cHV0LiBGaXggbXVsdGlwbGllciBhbmQKKwkgIGdldCB0aGUgbXVsdGlwbGllciBvZiBncHJvZiBmaWxlIGF0IHJ1bnRpbWUuIEZpeCBhIHZlcnkgb2xkIGJ1ZworCSAgd2hlcmUgd2UgY3JlZGl0IHRoZSBzYW1wbGVzIHRvIHByZXZpb3VzIGdwcm9mIGJpbiBoYXZpbmcgdGhlIGVmZmVjdAorCSAgdGhhbiBzYW1wbGUgYXQgc3RhcnQgb2YgZnVuY3Rpb24gd2FzIGNyZWRpdGVkIHRvIHRoZSBwcmV2aW91cworCSAgZnVuY3Rpb24KKworMjAwMy0wMy0xNyAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBkYWVtb24vb3BkX2tlcm5lbC5jOgorCSogZGFlbW9uL29wZF9rZXJuZWwuaDoKKwkqIGRhZW1vbi9vcGRfaW1hZ2UuYzoKKwkqIGRhZW1vbi9vcHJvZmlsZWQuYzogZG9uJ3QgdHJ5IHRvIHJlcmVhZCB0aGUgbW9kdWxlCisJbGlzdCBvbiBhIGZhaWxlZCBFSVAgbWF0Y2guIFdlIG11c3QgaGF2ZSB0aGUgbW9kdWxlIGxvYWQKKwlub3RpZmljYXRpb24gaW5zdGVhZC4KKworMjAwMy0wMy0xNyAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBkYWVtb24vb3BkX2tlcm5lbC5jOiBmaXggbW9kdWxlIGFjY291bnRpbmcuIFJlbW92ZQorCXF1aWNrLWRyb3AgY29kZSB0aGF0IGNhbid0IHdvcmsuCisKKwkqIGRvYy9vcHJvZmlsZS4xLmluOgorCSogZG9jL29wcm9maWxlLnhtbDogZW5nbGlzaCB0d2Vha3MKKworMjAwMy0wMy0xNyAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogVE9ETzogdXBkYXRlCisKKwkqIGRvYy9vcHJvZmlsZS4xLmluOgorCSogZG9jL29wcm9maWxlLnhtbDogcmVtb3ZlIGRvY3VtZW50YXRpb24gYWJvdXQgLVAsIHVwZGF0ZSBkb2MgYWJvdXQgLXAKKworCSogcHAvZGVyaXZlX2ZpbGVzLmg6CisJKiBwcC9kZXJpdmVfZmlsZXMuY3BwOiBjaGVja19pbWFnZV9uYW1lKCksIGFkZF90b19hbHRlcm5hdGVfZmlsZW5hbWUoKQorCSAgZnVuY3Rpb25zIG1vdmVkIGZyb20gb3BfdGltZS5jcHAKKworCSogcHAvb3BfdGltZV9vcHRpb25zLmg6CisJKiBwcC9vcF90aW1lX29wdGlvbnMuY3BwOgorCSogcHAvb3BfdGltZS5jcHA6IHJlbW92ZSAtUCBvcHRpb24sIG1pbm9yIGNsZWFudXAKKworCSogcHAvb3Byb2ZwcF9vcHRpb25zLmg6CisJKiBwcC9vcHJvZnBwX29wdGlvbnMuY3BwOgorCSogcHAvb3Byb2ZwcC5jcHA6IGFkZCAtcCBvcHRpb24sIG1pbm9yIGNsZWFudXAKKwkKKwkqIHBwL29wX3RvX3NvdXJjZS5jcHA6IG1pbm9yIGNsZWFudXAKKworMjAwMy0wMy0xNiAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogdXRpbHMvb3Bjb250cm9sOiBjaGVjayByZXR1cm4gY29kZSBmb3IgLS1jdHI/Py1ldmVudD1ub25lCisKKzIwMDMtMDMtMTYgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGd1aS9vcHJvZl9zdGFydC5jcHA6IGNoZWNrIGZvciAtLXNlcGFyYXRlPXh4eHggaW4gdGhlIHJpZ2h0IG9yZGVyLgorCSAgT2xkIGNvZGUgZG86IGlmIHVzZXIgc2V0IHNlcGFyYXRlPWxpYnJhcnkgYW5kIHNlcGFyYXRlPWtlcm5lbCBvbmx5CisJICBzZXBhcmF0ZT1saWJyYXJ5IHdhcyB0YWtlbiBieSBvcGNvbnRyb2wKKworMjAwMy0wMy0xNiAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogY29uZmlndXJlLmluOiB0eXBvCisKKzIwMDMtMDMtMTYgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogY29uZmlndXJlLmluOiBtb3JlIGRvY2Jvb2sgbWFjcm8gZml4ZXMKKworMjAwMy0wMy0xNSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogbGlidXRpbC9vcF9saWJpYmVydHkuaDogY3V0JnBhc3RlIHR5cG8gYnJlYWtpbmcgY29tcGlsYXRpb24gb24gYm94CisJICB3L28gbGliaWJlcnR5LmgKKworCSogZGFlbW9uL29wZF9pbWFnZS5jOiByZW1vdmUgYm9ndXMgZnByaW50Zi4gY29tcGlsYXRpb24gd2FzIGJyb2tlbgorCSAgb24gYWxwaGEuCisKKwkqIGNvbmZpZ3VyZS5pbjogeHNsdHByb2MgY2hlY2tpbmcgZml4LCB3YXMgYWx3YXlzIGFjY2VwdGVkIGV2ZW4KKwkgb24gYm94IHdoZXJlIHhzbHRwcm9jIGlzIG5vdCBpbnN0YWxsZWQKKworMjAwMy0wMy0xNSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogVE9ETzogdXBkYXRlCisKKwkqIE1ha2VmaWxlLmFtOiBhZGQgQ2hhbmdlTG9nLTIwMDIgaW4gZGlzdCBmaWxlcworCSogYWxsIE1ha2VmaWxlLmFtOiBwdXQgb25lIGl0ZW0gYnkgbGluZSBmb3IgbW9zdCAgeHh4eCA9IGJsYWgKKwkqIGRvYy9Db2RpbmdTdHlsZTogcmF0aW9uYWxlIGZvciB0aGUgYWJvdmUgY2hhbmdlCisKKzIwMDMtMDMtMTUgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGxpYm9wL29wX2V2ZW50cy5jOiBtaW5vciBjbGVhbnVwCisKKzIwMDMtMDMtMTUgIERhdmUgSm9uZXMgPGRhdmVqQGNvZGVtb25rZXkub3JnLnVrPgorCisJKiBtb2R1bGUveDg2L29wX25taS5jOiBSZW1vdmUgc3RhbGUgZGVidWcgY29kZSBmcm9tIHllc3RlcmRheXMgY29tbWl0LgorCisyMDAzLTAzLTE1ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBjb25maWd1cmUuaW46IGFkZCBjaGVja2luZyBmb3IgZXhpc3RlbmNlIG9mIHhtZW1kdXAoKQorCisJKiBsaWJ1dGlsL01ha2VmaWxlLmFtOgorCSogbGlidXRpbC9vcF9zdHJpbmcuaDoKKwkqIGxpYnV0aWwvb3Bfc3RyaW5nLmM6IG5ldywgYSBmZXcgQyBzdHJpbmcgaGFuZGxpbmcgZnVuY3Rpb24KKworCSogbGlidXRpbC9vcF9saWJpYmVydHkuaDoKKwkqIGxpYnV0aWwvb3BfbGliaWJlcnR5LmM6IHhtZW1kdXAoKSBuZXcuCisKKwkqIGxpYm9wL29wX2V2ZW50cy5oOgorCSogbGlib3Avb3BfZXZlbnRzLmM6IHRpZHkgcGFyc2VyLiBBZGQgb3BfZnJlZV9ldmVudHMoKS4gRml4IG1pbm9yCisJICBidWdsZXQuCisKKwkqIGRhZS9vcHJvZmlsZWQuYzoKKwkqIGRhZW1vbi9vcHJvZmlsZWQuYzogZml4IG1lbWxlYWsgZnJvbSBwYXJzaW5nIGV2ZW50cyBmaWxlcworCisJKiBndWkvTWFrZWZpbGUuYW06CisJKiBwcC9NYWtlZmlsZS5hbTogZml4IGxpYiBvcmRlcmluZywgbm93IGxpYm9wIGRlcGVuZCBvbiBsaWJ1dGlsCisKKwkqIHV0aWxzL29wX2hlbHAuYzogZXJyb3IgbWVzc2FnZSBpZiBpbnZhbGlkIGNwdSB0eXBlLiBGaXggb3BfaGVscAorCSAgd2hlbiB1c2luZyB0aW1lciBpbnRlcnJ1cHQuCisKKzIwMDMtMDMtMTQgIEFuZGkgS2xlZW4gPGFrQHN1c2UuZGU+CisKKwkqIG1vZHVsZS94ODYvb3Bfbm1pLmM6IEZpeCBhbm90aGVyIHBvc3NpYmxlIHJhY2UgY29uZGl0aW9uLgorCisyMDAzLTAzLTE0ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBUT0RPOiB1cGRhdGUKKworCSogbGlicmVnZXgvc3RsLnBhdDogc3VwcG9ydCBmb3IgcmIgdHJlZSwgc2V0L21hcCwgYW5vbnltb3VzIG5hbWVzcGFjZS4KKwkgIEZpeCBpbmNvcnJlY3QgcGF0dGVybiBmb3IgZ2NjIDMuMi4gSGFuZGxlIDIuOTUgdmVjdG9yL3N0cmluZworCSAgaXRlcmF0b3IgYW5kIGEgZmV3IHN0bCBmcmVlIGZ1bmN0aW9uIGhhbmRsaW5nLiBhZGQgYWxsIEMrKyBiYXNlIHR5cGUuCisJKiBsaWJyZWdleC9tYW5nbGVkLW5hbWUudHh0OiB0ZXN0IGZvciB0aGUgYWJvdmUgY2hhbmdlCisKKzIwMDMtMDMtMTQgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGd1aS9vcHJvZl9zdGFydC5jcHA6IGdjYyAyLjkxIHdhcm5pbmcgd29yayBhcm91bmQKKworMjAwMy0wMy0xNCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogbGlib3Avb3BfZXZlbnRzLmM6IGZpeCBhIGRhZW1vbiBzZWdmYXVsdCBkZXBlbmRpbmcgb24gdGhlIHVzZWQKKwkgIGxpYmMgdmVyc2lvbiwgYWRkZWQgMjAwMy0wMy0wNCAoMC41LjEgaXMgb2spCisKKzIwMDMtMDMtMTMgIERhdmUgSm9uZXMgPGRhdmVqQGNvZG1lb25rZXkub3JnLnVrPgorCisJKiBldmVudHMveDg2LTY0LmhhbW1lci5ldmVudHM6IFJlbW92ZSBkdXBsaWNhdGUgbWluaW11bSB0YWcKKwkgIGZyb20gUkVUSVJFRF9JTlNOUyBjb3VudGVyLgorCisyMDAzLTAzLTExICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIG1vZHVsZS9pYTY0L29wX3BtdS5jOiBpbmNsdWRlIG9wX2FyY2guaCBub3QgYXJjaC5oCisKKzIwMDMtMDMtMTAgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGNvbmZpZ3VyZS5pbjogcmVtb3ZlIHVuc3VwcG9ydGVkIC0td2Fybm5ldCwgZml4IGRvY2Jvb2sgcm9vdCBkaXIgdGVzdAorCSogZG9jL29wcm9maWxlLnhtbDogdHlwbworCisyMDAzLTAzLTEwICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGRvYy9NYWtlZmlsZS5hbToKKwkqIGNvbmZpZ3VyZS5pbjoKKwkqIGRvYy94c2wvY2F0YWxvZy0xLnhtbC5pbjogbW9yZSBkb2Nib29rIGNoYW5nZXMKKworMjAwMy0wMy0xMCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBjb25maWd1cmUuaW46CisJKiBkb2MvTWFrZWZpbGUuYW06CisJKiBkb2MveHNsL3hodG1sLnhzbDoKKwkqIGRvYy94c2wveGh0bWwtY2h1bmsueHNsOgorCSogZG9jL3hzbC9jYXRhbG9nLTEueG1sLmluOiBVc2UgYSBjYXRhbG9nIGZvciBmaW5kaW5nCisJdGhlIFhTTCwgc28gd2Ugb25seSBoYXZlIG9uZSAuaW4gZmlsZSBub3cuCisKKzIwMDMtMDMtMDggIFdpbGwgQ29oZW4gIDx3Y29oZW5AcmVkaGF0LmNvbT4KKworCSogZG9jL01ha2VmaWxlLmFtOiBDb3JyZWN0IHBhdGggZm9yIGh0bWxkaXIuCisKKzIwMDMtMDMtMDggIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogbGlib3Avb3BfY3B1X3R5cGUuYzogaW1wcm92ZSBlcnJvciBtZXNzYWdlCisKKwkqIHV0aWxzL29wX2hlbHAuYzogc2hvdyBDUFUgbmFtZSBpbiBldmVudHMgbGlzdC4gU2hvdyBDUFUKKwkgcHJldHR5IG5hbWUgaW4gb3BfaGVscCAtLWdldC1jcHUtdHlwZS4KKworMjAwMy0wMy0wOCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBjb25maWd1cmUuaW46IHNwZWNpZnkgZGlzdGNoZWNrIC4vY29uZmlndXJlIGZsYWdzLgorCSAgQWRkIHZlcnNpb24uaCB0byBkaXN0Y2xlYW4uCisKKwkqIGRvYy9NYWtlZmlsZS5hbTogCisJKiBkb2MveHNsL3hodG1sLTEuaW46CisJKiBkb2MveHNsL3hodG1sLWNodW5rLTEuaW46IGZpeCBtYWtlIGRpc3RjaGVjaworCisyMDAzLTAzLTA4ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBkb2MveHNsLy5jdnNpZ25vcmU6IHVwZGF0ZQorCisJKiBtb2R1bGUveDg2L2NwdV90eXBlLmM6IDxzbXBib290Lmg+IGlzIG5vdCBuZWNlc3NhcnkKKworMjAwMy0wMy0wNyAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBSRUFETUU6IGRvY3VtZW50IGF1dG9nZW4uc2gKKworMjAwMy0wMy0wNyAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogVE9ETzogdXBkYXRlCisKKwkqIGRvYy94c2wveGh0bWwueHNsLmluOiBtb3ZlIHRvCisJKiBkb2MveHNsL3hodG1sLTEueHNsLmluOiBoZXJlCisJKiBkb2MveHNsL3hodG1sLWNodW5rLnhzbC5pbjogbW92ZSB0bworCSogZG9jL3hzbC94aHRtbC1jaHVuay0xLnhzbC5pbjogaGVyZQorCSogZG9jL01ha2VmaWxlLmFtOyB1cGRhdGUgYWNjb3JkaW5nCisJKiBjb25maWd1cmUuaW46IGF2b2lkIHRvIHRvdWNoIGRvYy94c2wgZ2VuZXJhdGVkIGZpbGVzCisKKzIwMDMtMDMtMDcgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIFRPRE86IHVwZGF0ZQorCisJKiBkYWVtb24vb3BkX2ltYWdlLmM6CisJKiBkYWVtb24vb3Bfc3RhdHMuYzoKKwkqIGRhZW1vbi9vcGRfc3RhdHMuaDogYWRkIHN0YXRpc3RpY3MgZm9yIG5pbCBpbWFnZSB3aGlsc3QgcmVjZWl2aW5nCisJICB1c2VyIHNwYWNlIHNhbXBsZXMuCisKKzIwMDMtMDMtMDYgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIFRPRE86IHVwZGF0ZQorCisJKiBsaWJkYi9kYl9oYXNoLmg6CisJKiBsaWJkYi9kYl9pbnNlcnQuYzogZ2V0IGVycm9yIG1lc3NhZ2UgZnJvbSBkYl9pbnNlcnQoKQorCisJKiBsaWJkYi9kYl90ZXN0LmM6CisJKiBkYWUvb3BkX3Byb2MuYzoKKwkqIGRhZW1vbi9vcGRfaW1hZ2UuYzoKKwkqIGxpYmFiaS9hYmlfdGVzdC5jcHA6CisJKiBsaWJhYmkvb3BfaW1wb3J0LmNwcDoKKwkqIHBwL29wX21lcmdlLmNwcDogdXBkYXRlIGFjY29yZGluZyB0byB0aGUgbmV3IGFwaQorCisyMDAzLTAzLTA2ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGRvYy9vcHJvZmlsZS54bWw6IHBlZGFudHJ5CisKKzIwMDMtMDMtMDYgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIFRPRE86IHVwZGF0ZQorCisJKiBkb2Mvb3Byb2ZpbGUuMS5pbjoKKwkqIGRvYy9vcHJvZmlsZS54bWw6IGRvY3VtZW50IC0tc21hcnQtZGVtYW5nbGUKKworMjAwMy0wMy0wNiAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogbW9kdWxlL2lhNjQvb3BfcG11LmM6CisJKiBtb2R1bGUveDg2L29wX25taS5jOiByZW1vdmUgI2luY2x1ZGUgPG9wX2V2ZW50cy5oPgorCisyMDAzLTAzLTA2ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIHV0aWxzL29wY29udHJvbDogc2ggIT0gQy4gVGhpcyBpcyB0aGUgbGFzdCBvcGNvbnRyb2wKKwkgIGJ1ZywgaG9uZXN0ICEgT0ssIG1heWJlIG5vdC4KKworMjAwMy0wMy0wNiAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogVE9ETzogdXBkYXRlCisKKwkqIGd1aS9vcHJvZl9zdGFydC5jcHA6IHNhdmVfY29uZmlnKCkgZ2NjIDIuOTUuMyB3YXJuaW5nIHdvcmstYXJvdW5kCisKKzIwMDMtMDMtMDUgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogdXRpbHMvb3Bjb250cm9sOiBNYWtlIC0tc2V0dXAgb3B0aW9uYWwgKGUuZy4KKwkgIG9wY29udHJvbCAtLW5vLXZtbGludXgpLiBGaXggYSBidWcgaW4gdGhlIC0tc2V0dXAKKwkgIGV4Y2x1c2l2ZSBhcmcgdGVzdGluZy4KKworCSogZG9jL29wcm9maWxlLnhtbDogcmVmbGVjdCB0aGUgYWJvdmUKKworMjAwMy0wMy0wNSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBsaWJ1dGlsKysvc3RyaW5nX21hbmlwLmg6CisJKiBsaWJ1dGlsKysvc3RyaW5nX21hbmlwLmNwcDogY2xlYW51cCwgdXNlIHMuZmluZAorCSAgYmVjYXVzZSBvbGRlciBnY2MncyBkb24ndCBoYXZlIHRoZSByaWdodCBzLmNvbXBhcmUKKworMjAwMy0wMy0wNCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiB1dGlscy9vcGNvbnRyb2w6IG9ubHkgc2xlZXAgMiBhZnRlciBkdW1wIG9uIDIuNAorCisyMDAzLTAzLTA0ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGNvbmZpZ3VyZS5pbjogdHdlYWsgdGhlIHhzbHRwcm9jIHRlc3QKKworMjAwMy0wMy0wNCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBjb25maWd1cmUuaW46CisJKiBkb2MvTWFrZWZpbGUuYW06IGRvbid0IHRyeSB0byBidWlsZCB0aGUgZG9jcworCSAgaWYgaXQgd2lsbCBmYWlsLgorCisyMDAzLTAzLTA0ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIHV0aWxzL29wY29udHJvbDoKKwkqIGRhZW1vbi9vcGRfa2VybmVsLmg6CisJKiBkYWVtb24vb3BkX2ltYWdlLmM6CisJKiBkYWVtb24vb3BkX2tlcm5lbC5jOgorCSogZGFlbW9uL29wcm9maWxlZC5jOiBpbXBsZW1lbnQgLS1uby12bWxpbnV4LgorIAkgIFJlbW92ZSBiYWNrIGNvbXBhdCBmb3IgaXNfa2VybmVsLgorCisJKiBndWkvdWlvcHJvZl9zdGFydC5iYXNlLnVpOgorCSogZ3VpL29wcm9mX3N0YXJ0LmNwcDoKKwkqIGd1aS9vcHJvZl9zdGFydF9jb25maWcuaDoKKwkqIGd1aS9vcHJvZl9zdGFydF9jb25maWcuY3BwOiBzdXBwb3J0IHRoZSBhYm92ZQorCisJKiBkb2Mvb3Byb2ZpbGUuMS5pbjoKKwkqIGRvYy9vcHJvZmlsZS54bWw6IGRvYyB0aGUgYWJvdmUKKworMjAwMy0wMy0wNCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiB1dGlscy9vcGNvbnRyb2w6IGFsbG93IC0tdmVyc2lvbiwgLS1oZWxwIGVhcmx5IG9uCisKKzIwMDMtMDMtMDQgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogbGlib3Avb3BfZXZlbnRzLmM6IGFsdGVyIHRoZSBwYXJzZXIgdG8gZ2l2ZSBmaWxlL2xpbmVuciBvbgorCSAgZXJyb3IsIGFuZCBoYW5kbGUgbW9yZSB3aGl0ZXNwYWNlLgorCisyMDAzLTAzLTA0ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGd1aS9vcHJvZl9zdGFydC5jcHA6CisJKiBndWkvb3Byb2Zfc3RhcnQuaDoKKwkqIGd1aS9vcHJvZl9zdGFydF9jb25maWcuY3BwOgorCSogZ3VpL29wcm9mX3N0YXJ0X2NvbmZpZy5oOgorCisJKiBsaWJ1dGlsKysvc3RyaW5nX21hbmlwLmg6CisJKiBsaWJ1dGlsKysvc3RyaW5nX21hbmlwLmNwcDogYWRkIGlzX3ByZWZpeCgpLAorCSAgbWFrZSB0aGUgdHJpbW1lcnMgdGFrZSBhbiBhcmd1bWVudAorCisyMDAzLTAzLTA0ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGd1aS9vcHJvZl9zdGFydC5jcHA6CisJKiBndWkvb3Byb2Zfc3RhcnQuaDoKKwkqIGd1aS9vcHJvZl9zdGFydF9jb25maWcuY3BwOgorCSogZ3VpL29wcm9mX3N0YXJ0X2NvbmZpZy5oOgorCSogZ3VpL3BlcnNpc3RlbnRfY29uZmlnLmg6CisKKwkqIGxpYnV0aWwrKy9zdHJpbmdfbWFuaXAuaDoKKwkqIGxpYnV0aWwrKy9zdHJpbmdfbWFuaXAuY3BwOiBhZGQgc3BsaXQoKSwgdG9ib29sKCksIHRvdWludCgpCisKKwkqIHV0aWxzL29wY29udHJvbDogZG9uJ3Qgd3JpdGUgQlVGX1NJWkUgdHdpY2UuIFdyaXRlCisJICBSVENfVkFMVUUgcHJvcGVybHkuIFdyaXRlIEtFUk5FTF9PTkxZCisKKzIwMDMtMDMtMDMgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogZ3VpL29wcm9mX3N0YXJ0LmNwcDogdXNlIC0tY3RyWC1ldmVudD1ub25lLAorCSAgLS1zZXBhcmF0ZT1ub25lLiAtLXBpZC9wZ3JwLWZpbHRlcj0wIHdhcyBhbHJlYWR5CisJICBiZWluZyBkb25lLgorCisyMDAzLTAzLTAzICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGRvYy9vcHJvZmlsZS4xLmluOgorCSogZG9jL29wcm9maWxlLnhtbDoKKwkqIGRvYy9vcGNvbnRyb2w6IGFkZCAtLWN0clgtZXZlbnQ9bm9uZQorCisyMDAzLTAzLTAzICBXaWxsIENvaGVuICA8d2NvaGVuQHJlZGhhdC5jb20+CisKKwkqIGd1aS9vcHJvZl9zdGFydC5jcHAgKG9wcm9mX3N0YXJ0Ojpvbl9zdGFydF9wcm9maWxlcik6IExpbWl0CisJICBjaGVjayB0byBvbmx5IHV0bV9iaXRtYXNrLgorCisyMDAzLTAzLTAzICBXaWxsIENvaGVuICA8d2NvaGVuQHJlZGhhdC5jb20+CisKKyAgICAqIGV2ZW50cy9pYTY0Lml0YW5pdW0yLmV2ZW50czoKKyAgICAqIGV2ZW50cy9pYTY0Lml0YW5pdW0yLnVuaXRfbWFza3M6IEFkZCBJdGFuaXVtIDIgZXZlbnRzLgorCisyMDAzLTAzLTAzICBXaWxsIENvaGVuICA8d2NvaGVuQHJlZGhhdC5jb20+CisKKyAgICAqIGxpYm9wL29wX2V2ZW50cy5oOgorICAgICogbGlib3Avb3BfZXZlbnRzLmM6IENvcnJlY3QgY2hlY2tpbmcgZm9yIHRoZSBudW1iZXIgb2YgdW5pdAorICAgICAgbWFza3MuCisKKzIwMDMtMDMtMDMgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogZG9jL29wcm9maWxlLjEuaW46CisJKiBkb2Mvb3Byb2ZpbGUueG1sOiBhbm90aGVyIHJvdW5kIG9mIGNsZWFudXBzCisKKwkqIHBwL29wX21lcmdlLmNwcDogLS1jb3VudGVyIG5vdCAtLXVzZS1jb3VudGVyLAorCSAgZm9yIGNvbnNpc3RlbmN5CisKKzIwMDMtMDMtMDMgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCVBhdGNoIGZyb20gQ2hyaXMgTW9sbGVyLCBtb2RpZmllZC4KKworCSogZGFlL29wZF9wcm9jLmM6CisJKiBkYWUvb3BkX3NhbXBsZV9maWxlcy5jOgorCSogZGFlbW9uL29wZF9pbWFnZS5jOgorCSogZGFlbW9uL29wZF9zYW1wbGVfZmlsZXMuYzoKKwkqIGxpYmFiaS9hYmlfdGVzdC5jcHA6CisJKiBsaWJhYmkvb3BfaW1wb3J0LmNwcDoKKwkqIGxpYmRiL2RiX2hhc2guaDoKKwkqIGxpYmRiL2RiX2luc2VydC5jOgorCSogbGliZGIvZGJfbWFuYWdlLmM6CisJKiBsaWJkYi9kYl90ZXN0LmM6CisJKiBwcC9jb3VudGVyX3Byb2ZpbGUuY3BwOgorCSogcHAvb3BfbWVyZ2UuY3BwOiBwdXNoIGFzc2VydHMgaW4gbGliZGIgZG93biBpbnRvCisJICB0aGUgY2xpZW50cy4KKworMjAwMy0wMy0wMyAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBkb2Mvb3Byb2ZpbGUueG1sOgorCSogZG9jL29wcm9maWxlLjEuaW46CisJKiB1dGlscy9vcGNvbnRyb2w6IGFkZCAtLXNlcGFyYXRlPW5vbmUsIC0tcGlkL3BncnAtZmlsdGVyPW5vbgorCisyMDAzLTAzLTAzICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGNvbmZpZ3VyZS5pbjoKKwkqIGRvYy9NYWtlZmlsZS5hbToKKwkqIGRvYy9vcHJvZmlsZS54bWw6CisJKiBkb2MveHNsL3hodG1sLWNodW5rLnhzbC5pbjoKKwkqIGRvYy94c2wveGh0bWwueHNsLmluOgorCSogZG9jL3hzbC94aHRtbC1jb21tb24ueHNsOiBBZGQgdmVyc2lvbiB0byB0aGUKKwkgIGRvY3MuIFNvbWUgZG9jIGNsZWFudXBzCisKKzIwMDMtMDMtMDIgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogdXRpbHMvb3Bjb250cm9sOiAtLXNlcGFyYXRlPWxpYnJhcnkgc2hvdWxkIHR1cm4ga2VybmVsIG9mZgorCisyMDAzLTAzLTAyICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGV2ZW50cy9NYWtlZmlsZS5hbTogZml4IHVuaW5zdGFsbAorCisyMDAzLTAzLTAyICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGRvYy9vcHJvZmlsZS54bWw6IG1vcmUgcmUtd29ya2luZ3MgcHJvZGRlZCBieSBhZWIKKworMjAwMy0wMy0wMiAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBkYWVtb24vb3BkX2tlcm5lbC5jOiByZW1vdmUgL3Byb2Mva3N5bXMgcmVhZGluZworCisyMDAzLTAzLTAyICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGxpYnV0aWwvb3BfZmlsZWlvLmM6IGNoYW5nZSBvcF9nZXRfbGluZSB0byByZXR1cm4KKwkgIE5VTEwgb24gRU9GLiBBbHNvIGJ1bXAgdXAgdGhlIGRlZmF1bHQgYWxsb2NhdGlvbiBzb21lLgorCisJKiBkYWUvb3BkX2tlcm5lbC5jOgorCSogZGFlL29wZF9wYXJzZV9wcm9jLmM6CisJKiBkYWVtb24vb3BkX2tlcm5lbC5jOgorCSogbGlib3Avb3BfZXZlbnRzLmM6IGNoYW5nZXMgZnJvbSB0aGUgYWJvdmUKKworMjAwMy0wMy0wMiAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBjb25maWd1cmUuaW46CisJKiBNYWtlZmlsZS5hbToKKwkqIGV2ZW50cy86IGFkZCB0ZXh0IGZpbGVzIGRlc2NyaWJpbmcgdGhlIENQVSBjb3VudGVycworCSAgYW5kIHVuaXQgbWFza3MuIEluc3RhbGwgdGhlbS4KKworCSogbGlib3Avb3BfZXZlbnRzLmg6CisJKiBsaWJvcC9vcF9ldmVudHMuYzogcmVtb3ZlIHRoZSBibGV0Y2hlcm91cyBoYXJkIGNvZGVkCisJICBkZXNjcmlwdGlvbnMuCisKKwkqIG1vZHVsZS9pYTY0L29wX3BtdS5jOgorCSogbW9kdWxlL3g4Ni9vcF9ubWkuYzogcmVtb3ZlIGFub3RoZXIgYmlnIG9mIHZhbGlkYXRpb24KKworCSogbGlidXRpbC9vcF9saXN0Lmg6IG1ha2UgQysrIGZyaWVuZGx5CisKKwkqIGxpYm9wL29wX2NwdV90eXBlLmg6CisJKiBsaWJvcC9vcF9jcHVfdHlwZS5jOiBhZGQgb3BfZ2V0X2NwdV9uYW1lKCkKKworCSogbGlib3AvTWFrZWZpbGU6CisJKiBsaWJvcC9vcF9ldmVudHNfZGVzYy5oOgorCSogbGlib3Avb3BfZXZlbnRzX2Rlc2MuY3BwOiByZW1vdmVkCisKKwkqIGxpYm9wKysvb3BfcHJpbnRfZXZlbnQuY3BwOgorCSogdXRpbHMvTWFrZWZpbGUuYW06CisJKiB1dGlscy9vcF9oZWxwLmM6CisJKiBndWkvb3Byb2Zfc3RhcnQuaDoKKwkqIGd1aS9vcHJvZl9zdGFydC5jcHA6IGNoYW5nZXMgZnJvbSBhYm92ZQorCisyMDAzLTAzLTAxICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGRvYy9vcHJvZmlsZS54bWw6IHR3ZWFrcworCisJKiB1dGlscy9vcGNvbnRyb2w6IHNjYWxlIHRoZSBkZWZhdWx0IGV2ZW50IGNvdW50LiBQbGVhc2UKKwkgIHRlc3QgLi4uCisKKzIwMDMtMDMtMDEgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogdXRpbHMvb3Bjb250cm9sOiBzZXR1cCBkZWZhdWx0IGV2ZW50cy4gQWxsb3cgcGFydC1zZXR0aW5nCisJICB1c2luZyAtLXNldHVwLiBGaXggYSBoZWxwIHRleHQuCisKKwkqIGRvYy9vcHJvZmlsZS54bWw6IGNoYW5nZXMgZnJvbSB0aGUgYWJvdmUKKworMjAwMy0wMy0wMSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBsaWJvcC9vcF9jcHVfdHlwZS5jOiBmaXggYWxwaGEvZXY0IG1pcy1kZXRlY3Rpb24KKworMjAwMy0wMy0wMSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBkb2Mvb3Byb2ZpbGUueG1sOiBleHBhbmQgaW50cm8gYSBsaXR0bGUsIHNtYWxsIGZpeGVzCisKKzIwMDMtMDMtMDEgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogcHAvZm9ybWF0X291dHB1dC5jcHA6IHVzZSAiJSIgbm90ICIlLWFnZSIKKworMjAwMy0wMi0yOCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiB1dGlscy9vcGNvbnRyb2w6IGZpeCBJU19USU1FUiBzZXR0aW5nLCBub3RpY2VkIGJ5CisJICBEdW5jYW4gU2FuZHMKKworMjAwMy0wMi0yOCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBjb25maWd1cmUuaW46IGJ1bXAgdG8gMC42Y3ZzCisKKzIwMDMtMDItMjggIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogZG9jL01ha2VmaWxlLmFtOiB0d2VhaworCisJKiBsaWJyZWdleC9NYWtlZmlsZS5hbTogZml4IG1ha2UgZGlzdAorCisyMDAzLTAyLTI3ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGNvbmZpZ3VyZS5pbjogYnVtcCB0byAwLjUuMQorCisyMDAzLTAyLTI3ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGRvYy9vcHJvZmlsZS54bWw6IGNsYXJpZnkgLS1zZXBhcmF0ZT1rZXJuZWwKKworMjAwMy0wMi0yNSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBjb25maWd1cmUuaW46IGNsYXJpZnkgLS13aXRoLWtlcm5lbC1zdXBwb3J0CisKKwkqIGxpYm9wL29wX2V2ZW50cy5jOgorCSogbW9kdWxlL3g4Ni9vcF9ubWkuYzoKKwkqIG1vZHVsZS9pYTY0L29wX25taS5jOiByZW1vdmUgc2FuaXR5IGNoZWNraW5nIC0gaXQncworCSAgdGhlIHdyb25nIHBsYWNlIHRvIGhhdmUgc3VjaCBjb2RlLCBpcyBhIGJhcnJpZXIgdG8gb3BfZXZlbnRzCisJICBjbGVhbnVwLCBhbmQgbWFrZXMgbGlmZSBoYXJkZXIgZm9yIE5EQWVycy4KKworMjAwMy0wMi0yNSAgV2lsbCBDb2hlbiA8d2NvaGVuQHJlZGhhdC5jb20+CisKKwkqIHV0aWxzL29wY29udHJvbCAoZG9fZGVpbml0KTogQ29ycmVjdCBzZWFyY2ggZm9yIC9kZXYvb3Byb2ZpbGUuCisKKzIwMDMtMDItMjQgIERhdmUgSm9uZXMgPGRhdmVqQGNvZGVtb25rZXkub3JnLnVrPgorCisJKiBtb2R1bGUveDg2L29wX2FwaWMuW2N8aF06IG1vdmUgTk1JIGdhdGUgc2V0dXAgdG8gYXJjaGl0ZWN0dXJlCisJICBzcGVjaWZpYyBTRVRfTk1JX0dBVEUgbWFjcm8uIHg4Nj1ubyBjaGFuZ2UuCisJICBNYWtlIHg4Ni02NCB1c2UgdGhlIGtlcm5lbHMgX3NldF9nYXRlIGluc3RlYWQgb2YgaXRzIG93biBvcGVuCisJICBjb2RlZCB2YXJpYW50LgorCisyMDAzLTAyLTIzICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIHZlcnNpb24tMS5oLmluOiBhbm90aGVyIHJlbmFtZQorCisyMDAzLTAyLTIzICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGNvbmZpZ3VyZS5pbjogc2V0IHVwIE9QX0RBVEFESVIgYW5kIE9QX0JJTkRJUgorCisJKiBndWkvb3Byb2Zfc3RhcnQuY3BwOgorCSogbGlicmVnZXgvZGVtYW5nbGVfc3ltYm9sLmNwcDogdXNlIHRoZSBhYm92ZQorCisJKiB2ZXJzaW9uX3RwbC5oLmluOiBtb3ZlIHRvIC4uLgorCisJKiB2ZXJzaW9uLmguaW4uaW46IC4uLiBoZXJlCisKKzIwMDMtMDItMjMgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIFRPRE86IHVwZGF0ZQorCisJKiBjb25maWd1cmUuaW46IGFkZCBBWF9DT1BZX0lGX0NIQU5HRSgpIHVzZSBpdCB0byBnZW5lcmF0ZSB2ZXJzaW9uLmgKKwkqIC5jdnNpZ25vcmU6IHVwZGF0ZQorCisJKiBndWkvTWFrZWZpbGUuYW06CisJKiBndWkvb3Byb2Zfc3RhcnQuY3BwOgorCSogbGlicmVnZXgvTWFrZWZpbGUuYW06CisJKiBsaWJyZWdleC9kZW1hbmdsZV9zeW1ib2wuY3BwOiBkb24ndCB1c2UgLURCSU5ESVIsIHJhdGhlciBpbmNsdWRlCisJICB2ZXJzaW9uLmggdG8gZ2V0IGluc3RhbGwgcGF0aAorCisyMDAzLTAyLTIzICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIFJFQURNRTogcXVpY2sgc3RhcnQgYnVpbGQgaW5zbnMKKworMjAwMy0wMi0yMyAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogVE9ETzogdXBkYXRlCisKKwkqIGxpYnJlZ2V4L01ha2VmaWxlLmFtOiBpbnN0YWxsIHN0bC5wYXQgaW4gJHByZWZpeC9zaGFyZS9vcHJvZmlsZQorCSogbGlicmVnZXgvZGVtYW5nbGVfc3ltYm9sLmNwcDogdXNlIERBVEFESVIgbm90IEJJTkRJUgorCSogbGlicmVnZXgvbWFnbGUtbmFtZS50eHQ6IGFkZCB0ZXN0IGZvciBwb2ludGVyCisJKiBsaWJyZWdleC9zdGwucGF0OiBwYXJ0aWFsIHN1cHBvcnQgZm9yIHBvaW50ZXIKKworMjAwMy0wMi0yMyAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBhdXRvZ2VuLnNoOiBlcnJvciBvdXQgaWYgb3B0aW9ucyBwYXNzZWQKKworMjAwMy0wMi0yMyAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBsaWJyZWdleC9vcF9yZWdleC5oOgorCSogbGlicmVnZXgvcmVnZXhfdGVzdC5jcHA6IGZpeCBzdGQ6OgorCisyMDAzLTAyLTIzICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBsaWJ1dGlsKysvZGVtYW5nbGVfc3ltYm9sLmNwcDoKKwkqIGxpYnV0aWwrKy9kZW1hbmdsZV9zeW1ib2wuaDogbW92ZSB0bworCSogbGlicmVnZXgvZGVtYW5nbGVfc3ltYm9sLmNwcDoKKwkqIGxpYnJlZ2V4L2RlbWFuZ2xlX3N5bWJvbC5oOiBoZXJlIHRvIGF2b2lkIGNpcmN1bGFyIHJlZmVyZW5jZSBiZXR3ZWVuCisJICBsaWJ1dGlsKysgYW5kIGxpYnJlZ2V4CisJKiBsaWJyZWdleC9NYWtlZmlsZS5hbToKKwkqIGxpYnV0aWwrKy9NYWtlZmlsZS5hbTogdXBkYXRlIGFjY29yZGluZyB0byBmaWxlIG1vdmUKKworCSogcHAvTWFrZWZpbGUuYW06CisJKiBwcC9vcF90aW1lLmNwcDoKKwkqIHBwL29wX3RpbWVfb3B0aW9ucy5jcHA6CisJKiBwcC9vcF90b19zb3VyY2UuY3BwOgorCSogcHAvb3BfdG9fc291cmNlX29wdGlvbnMuY3BwOgorCSogcHAvb3Byb2ZwcC5jcHA6CisJKiBwcC9vcHJvZnBwX29wdGlvbnMuY3BwOiBhZGQgLUQgLS1EZW1hbmdsZSBvcHRpb25zIGVuYWJsaW5nIEMrKworCSAgZGVtYW5nbGVkIG5hbWUgZmlsdGVyaW5nLgorCisyMDAzLTAyLTIzICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBsaWJ1dGlsKysvc3RyaW5nX21hbmlwLmg6CisJKiBsaWJ1dGlsKysvc3RyaW5nX21hbmlwLmNwcDogdHJpbSgpLCBsdHJpbSgpLCBydHJpbSgpIG5ldyBmdW5jdGlvbnMKKworCSogTWFrZWZpbGUuYW06IGhhbmRsZSBsaWJyZWdleCBkaXJlY3RvcnkKKwkqIGNvbmZpZ3VyZS5pbjogaGFuZGxlIGxpYnJlZ2V4L01ha2VmaWxlCisKKwkqIGxpYnJlZ2V4Ly5jdnNpZ25vcmU6CisJKiBsaWJyZWdleC9NYWtlZmlsZS5hbSA6CisJKiBsaWJyZWdleC9tYW5nbGVkLW5hbWUudHh0OgorCSogbGlicmVnZXgvb3BfcmVnZXguY3BwOgorCSogbGlicmVnZXgvb3BfcmVnZXguaDoKKwkqIGxpYnJlZ2V4L3JlZ2V4X3Rlc3QuY3BwOgorCSogbGlicmVnZXgvc3RsLnBhdDogbmV3IGZpbGUgaW1wbGVtZW50aW5nIGEgbWF0Y2ggYW5kIHJlcGxhY2UgcmVndWxhcgorCSAgZXhwcmVzc2lvbiBhcm91bmQgZ2xpYmMgcmVnZXguIE5vdCB1c2VkIGZvciBub3csIG5leHQgY29tbWl0IHdpbGwKKwkgIHVzZSB0aGlzIGZvciBwcCB0b29scyBDKysgbmFtZSBkZW1hbmdsaW5nLgorCisyMDAzLTAyLTIyICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGNvbmZpZ3VyZS5pbjogZml4IFgsIG5vbi1RdCBidWlsZCBjYXNlCisKKzIwMDMtMDItMjIgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogbGlidXRpbCsrL01ha2VmaWxlLmFtOiBmaXggbWFrZSBkaXN0CisKKzIwMDMtMDItMjEgIERhdmUgSm9uZXMgPGRhdmVqQGNvZGVtb25rZXkub3JnLnVrPgorCisJKiBjb25maWd1cmUuaW46IEVuYWJsZSBidWlsZGluZyBvbiBoYW1tZXIgYWdhaW4uCisKKzIwMDMtMDItMjEgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogdXRpbHMvb3Bjb250cm9sOiAiUGFyYW1zIHVzZWQiIHdhcyBseWluZworCisyMDAzLTAyLTIwICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGRhZW1vbi9vcGRfaW1hZ2UuYzogRml4ZWQgYSBiaXRjaCBvZiBhIGJ1ZyB3aXRoIHNlcGFyYXRlLWtlcm5lbCwKKwkgIG5vdyBhdHRyaWJ1dGlvbiBvZiBrZXJuZWwgc2FtcGxlcyBzaG91bGQgYmUgbW9yZSBhY2N1cmF0ZQorCisyMDAzLTAyLTIwICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIHV0aWxzL29wY29udHJvbDogc2V0IExJQl9TQU1QTEVTIGlmIEtFUk5FTF9TQU1QTEVTIGluIC5kYWVtb25yYworCisyMDAzLTAyLTIwICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGRhZS9vcGRfc3RhdHMuaDoKKwkqIGRhZS9vcGRfc3RhdHMuYzoKKwkqIGRhZW1vbi9vcGRfc3RhdHMuaDoKKwkqIGRhZW1vbi9vcGRfc3RhdHMuYzoKKwkqIGRhZS9vcGRfcHJvYy5jOgorCSogZGFlbW9uL29wZF9pbWFnZS5jOiByZW1vdmUgdW51c2VkIE9QRF9TQU1QTEVfQ09VTlRTLiBBY3R1YWxseQorCSAgY291bnQgc2FtcGxlcyBmb3IgMi41CisKKzIwMDMtMDItMjAgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogbGlib3Avb3BfaW50ZXJmYWNlXzI1Lmg6CisJKiBkYWVtb24vb3BkX2tlcm5lbC5jOiBpbXBsZW1lbnQgbW9kdWxlIGRyb3BwaW5nCisKKwkqIGRhZW1vbi9vcGRfaW1hZ2UuYzoKKwkqIGRhZW1vbi9vcGRfa2VybmVsLmM6IGF0dGVtcHQgdG8gbWFrZSB2ZXJib3NlIGxvZ3MKKwkgIGxlc3MgY29uZnVzaW5nCisKKzIwMDMtMDItMjIgIERhdmUgSm9uZXMgPGRhdmVqQGNvZGVtb25rZXkub3JnLnVrPgorCisJKiBsaWJvcC9vcF9ldmVudHMuYzogc2VncmVnbG9hZCBpcyB1dG1fbWFzayBub3QgdXRtX2V4Y2x1c2l2ZQorCisyMDAzLTAyLTIwICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBUT0RPOiB1cGRhdGUKKworCSogcHAvb3V0cHV0X2Zvcm1hdC5oOgorCSogcHAvb3V0cHV0X2Zvcm1hdC5jcHA6CisJKiBwcC9vcF90aW1lLmNwcDoKKwkqIHBwL29wcm9mcHAuY3BwOgorCSogcHAvb3BwX3N5bWJvbC5oOiBiZXR0ZXIgaGFuZGxpbmcgb2YgNjQvMzIgYml0cyBiZmRfdm1hCisJICBpbiBvdXRwdXQKKworMjAwMy0wMi0yMCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBsaWJ1dGlsKysvb3BfZXhjZXB0aW9uLmg6CisJKiBsaWJ1dGlsKysvb3BfZXhjZXB0aW9uLmNwcDogdGhyb3coKSB3aGVyZSBuZWVkZWQKKworMjAwMy0wMi0xOSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogVE9ETzogdXBkYXRlCisKKwkqIGRhZW1vbi9vcGRfaW1hZ2UuaDoKKwkqIGRhZW1vbi9vcGRfaW1hZ2UuY3BwOgorCSogZGFlbW9uL29wZF9rZXJuZWwuY3BwOiBmaXggdGhpbmtvIHdpdGggLS1zZXBhcmF0ZT1rZXJuZWwgcmVzdWx0aW5nCisJICBpbiBkdXBsaWNhdGUgb3BlbmluZyBvZiB0aGUgc2FtZSBzYW1wbGVzIGZpbGUuCisKKzIwMDMtMDItMTkgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGxpYnV0aWwrKy9vcF9leGNlcHRpb24uaDoKKwkqIGxpYnV0aWwrKy9vcF9leGNlcHRpb24uY3BwOiBuZXcgZmlsZXMsIGJhc2UgY2xhc3MgZm9yIGV4Y2VwdGlvbi4KKwkgIE5vdCB1c2VkIGZvciBub3cuCisKKzIwMDMtMDItMTkgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogYWNpbmNsdWRlLm00OiB1cGRhdGUgZnJvbSB1cHN0cmVhbQorCisJKiBndWkvdWkvb3Byb2Zfc3RhcnQuYmFzZS51aToKKwkqIGd1aS9vcHJvZl9zdGFydC5jcHA6IHNlcGFyYXRlIC0tc2V0dXAsLS1zdGFydC4KKwkgIEhpZGUgbm9uLTIuNSBzdHVmZiBpbiAyLjUuCisKKzIwMDMtMDItMTggIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIFRPRE86IHVwZGF0ZQorCisJKiBkYWUvb3BkX3NhbXBsZV9maWxlcy5jOgorCSogZGFlbW9uL29wZF9zYW1wbGVfZmlsZXMuYzogb3BkX2hhbmRsZV9vbGRfc2FtcGxlX2ZpbGUoKSBkb24ndAorCSAgdHJ5IHRvIGRlbGV0ZSBvbGQgc2FtcGxlcyBmaWxlcyBpZiB0aGV5IGRvbid0IGV4aXN0LgorCisyMDAzLTAyLTE4ICBXaWxsIENvaGVuICA8d2NvaGVuQHJlZGhhdC5jb20+CisKKwkqIHV0aWxzL29wY29udHJvbCAoZG9fb3B0aW9ucyk6IEJldHRlciBvcHRpb24gZXJyb3IgY2hlY2tpbmcuCisKKzIwMDMtMDItMTcgIFdpbGwgQ29oZW4gIDx3Y29oZW5AcmVkaGF0LmNvbT4KKworCSogcHAvZm9ybWF0X291dHB1dC5oIChzaG93X2hlbHApOiBuYW1lc3BhY2Ugc3RkLgorCisyMDAzLTAyLTE3ICBXaWxsIENvaGVuICA8d2NvaGVuQHJlZGhhdC5jb20+CisKKwkqIFRPRE86IHVwZGF0ZS4KKworMjAwMy0wMi0xNyAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCUZyb20gQW50b24gQmxhbmNoYXJkIDoKKworCSogZGFlbW9uL29wZF9pbWFnZS5jOiBjb29raWVfdCBmaXggZm9yIDY0IGJpdHMKKworMjAwMy0wMi0xNyAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogVE9ETzogdXBkYXRlCisKKwkqIGxpYm9wdCsrL3BvcHRfb3B0aW9ucy5jcHA6CisJKiBsaWJvcHQrKy9wb3B0X29wdGlvbnMuaDogaGFuZGxlIGFuIHVzZXIgc3BlY2lmaWMgYWRkaXRpb25hbAorCSAgaGVscCBzdHJpbmcKKworCSogcHAvb3V0cHV0X2Zvcm1hdC5oOgorCSogcHAvb3V0cHV0X2Zvcm1hdC5jcHA6CisJKiBwcC9vcF90aW1lX29wdGlvbnMuY3BwOgorCSogcHAvb3Byb2ZwcF9vcHRpb25zLmNwcDogdXNlIGl0IHRvIHNob3cgaW4gLS1vdXRwdXRfZm9ybWF0CisJICBvcHRpb25zIGRldGFpbHMuCisKKzIwMDMtMDItMTQgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGRvYy9vcHJvZmlsZS4xLmluOgorCSogZG9jL29wcm9maWxlLnhtbDoKKwkqIHBwL29wcm9mcHBfb3B0aW9ucy5jcHA6IGFsbG93IC0tc2hvdy1zaGFyZWQtbGlicyB3aXRoIC1zCisKKzIwMDMtMDItMTMgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIFRPRE86IHVwZGF0ZQorCisJKiBwcC9vdXRwdXRfZm9ybWF0Lmg6CisJKiBwcC9vdXRwdXRfZm9ybWF0LmNwcDogZml4ICM2ODYyNzIsIGNyYXNoIHdoZW4gdXNpbmcKKwkgIG9wcm9mcHAgLXMgc3ltYl9uYW1lLgorCisyMDAzLTAyLTEzICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBkYWUvb3BkX2tlcm5lbC5oOgorCSogZGFlL29wZF9pbWFnZS5oOgorCSogZGFlL29wZF9pbWFnZS5jOiBkb24ndCB1c2UgaGFzaCBlbnRyeSB6ZXJvIGZvciBrZXJuZWwgaW1hZ2UKKwkgZml4ICM2ODYxNzUKKworMjAwMy0wMi0xMyAgV2lsbCBDb2hlbiAgPHdjb2hlbkByZWRoYXQuY29tPgorCisJKiBkYWVtb24vb3BkX2Nvb2tpZS5oKG9wZF9ucl9sb29rdXBfZGNvb2tpZSk6IENvcnJlY3QgbnVtYmVyLgorCisyMDAzLTAyLTEzICBXaWxsIENvaGVuICA8d2NvaGVuQHJlZGhhdC5jb20+CisKKwkqIGRhZW1vbi9vcGRfY29va2llLmgob3BkX25yX2xvb2t1cF9kY29va2llKTogQWRkIHg4Nl82NC4KKworMjAwMy0wMi0xMyAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBkYWUvb3BkX2ltYWdlLmM6IGxpdHRsZSBjbGVhbnVwIGFuZCBmaXggZXJyb3IgbWVzc2FnZQorCSAgdG8gbm90IGxpZQorCisyMDAzLTAyLTEyICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBkb2Mvb3Byb2ZpbGUuMS5pbjoKKwkqIGRvYy9vcHJvZmlsZS54bWw6IGVuaGFuY2UgZG9jIGFib3V0IC0tc2VwYXJhdGU9a2VybmVsCisKKwkqIHV0aWxzL29wY29udHJvbDogaGFuZGxlIGdyYWNlZnVsbHkgb3Bjb250cm9sIC0tZGVpbml0IGlmIHByb2ZpbGVyCisJICB3YXMgYWxyZWFkeSBzaHV0ZG93bi4gQXZvaWQgd3Jvbmcgd2FybmluZyB3aGVuIHVtb3VudCAvZGV2L29wcm9maWxlCisKKzIwMDMtMDItMTIgIFdpbGwgQ29oZW4gIDx3Y29oZW5AcmVkaGF0LmNvbT4KKworCSogZ3VpL29wcm9mX3N0YXJ0LmNwcCAob3Byb2Zfc3RhcnQ6Om9wcm9mX3N0YXJ0LAorCSAgICBvcHJvZl9zdGFydDo6b25fZmx1c2hfcHJvZmlsZXJfZGF0YSwKKwkgICAgb3Byb2Zfc3RhcnQ6Om9uX3N0YXJ0X3Byb2ZpbGVyLAorCSAgICBvcHJvZl9zdGFydDo6b25fc3RvcF9wcm9maWxlcik6IFVzZSBvcGNvbnRyb2wuCisJKiBndWkvb3Byb2Zfc3RhcnRfdXRpbC5jcHAgKGRhZW1vbl9zdGF0dXM6OmRhZW1vbl9zdGF0dXMpOgorCSAgICBBbGxvdyByZWFkaW5nIGludGVycnVwdCBpbmZvIGZyb20gbmV3IGtlcm5lbCBpbnRlcmZhY2UuCisJKiBsaWJvcC9vcF9nZXRfaW50ZXJmYWNlLmM6IE5ldy4KKwkqIGxpYm9wL01ha2VmaWxlLmFtOiBBZGQgbGlib3Avb3BfZ2V0X2ludGVyZmFjZS5jLgorCSogbGlib3Avb3BfY3B1X3R5cGUuaDogQWRkIGVudW0gb3BfaW50ZXJmYWNlLgorCisJSSBBZGRlZCBzb21lIGJpdHMuIFBoaWwKKwkqIGd1aS9vcHJvZl9zdGFydC5jcHA6IGNvcnJlY3QgLS1zZXBhcmF0ZT0gaGFuZGxpbmcKKwkqIGd1aS9vcHJvZl9zdGFydF91dGlsLmNwcDogcmVhZCBvbmx5IHRoZSByZWFsIG51bWJlciBvZiBpbnRlcnJ1cHRzCisKKzIwMDMtMDItMTIgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIHV0aWxzL29wY29udHJvbDogaGFuZGxlIC0tbm90ZS10YWJsZS1zaXplIC0ta2VybmVsLW9ubHkgKDIuNCBrZXJuZWwpCisKKzIwMDMtMDItMTIgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIHV0aWxzL29wX3N0YXJ0OiBtYXAgLS1zZXBhcmF0ZS1zYW1wbGVzIHRvIGRhZW1vbiBvcHRpb24KKwkgIC0tc2VwYXJhdGUtbGliLXNhbXBsZXMuCisKKzIwMDMtMDItMTEgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGRhZS9vcGRfaW1hZ2UuYzoKKwkqIGRhZS9vcGRfa2VybmVsLmM6CisJKiBkYWUvb3BkX2tlcm5lbC5oOgorCSogZGFlL29wZF9wYXJzZV9wcm9jLmM6CisJKiBkYWUvb3BkX3Byb2MuYzoKKwkqIGRhZS9vcGRfcHJvYy5oOgorCSogZGFlL29wZF9zYW1wbGVfZmlsZXMuYzoKKwkqIGRhZS9vcHJvZmlsZWQuYzoKKwkqIGRhZW1vbi9vcGRfaW1hZ2UuYzoKKwkqIGRhZW1vbi9vcGRfaW1hZ2UuaDoKKwkqIGRhZW1vbi9vcGRfa2VybmVsLmM6CisJKiBkYWVtb24vb3BkX2tlcm5lbC5oOgorCSogZGFlbW9uL29wZF9zYW1wbGVfZmlsZXMuYzoKKwkqIGRhZW1vbi9vcHJvZmlsZWQuYzogcGVyIGFwcGxpY2F0aW9uIGtlcm5lbCBzYW1wbGVzIGZpbGVzCisKKwkqIGRvYy9vcHJvZmlsZS4xLmluOgorCSogZG9jL29wcm9maWxlLnhtbDogZG9jdW1lbnQgb3Bjb250cm9sIC0tc2VwYXJhdGU9a2VybmVsCisKKwkqIGd1aS9vcHJvZl9zdGFydC5jcHA6CisJKiBndWkvb3Byb2Zfc3RhcnRfY29uZmlnLmNwcDoKKwkqIGd1aS9vcHJvZl9zdGFydF9jb25maWcuaDoKKwkqIGd1aS91aS9vcHJvZl9zdGFydC5iYXNlLnVpOiByZW1vdmUgaWdub3JlX2RhZW1vbiBjaGVja2JveCwgaGFuZGxlCisJICAtLXNlcGFyYXRlPVtsaWJyYXJ5fGtlcm5lbF0KKworCSogbGlib3Avb3Bfc2FtcGxlX2ZpbGUuaDogYWRkIHNlcGFyYXRlX2tlcm5lbF9zYW1wbGVzIGZpZWxkLCBmaWxlCisJICBmb3JtYXQgaXMgYmFja3dhcmQgY29tcGF0aWJsZQorCisJKiBsaWJhYmkvYWJpLmNwcDoKKwkqIGxpYmFiaS9hYmlfdGVzdC5jcHA6CisJKiBsaWJhYmkvb3BfaW1wb3J0LmNwcDogaGFuZGxlIG5ldyBzYW1wbGVzIGZpbGUgaGVhZGVyIGZpZWxkCisKKwkqIHBwL2NvdW50ZXJfcHJvZmlsZS5jcHA6IGR1bXAgbmV3IHNhbXBsZSBmaWxlcyBoZWFkZXIgZmllbGQuCisKKwkqIHV0aWxzL29wY29udHJvbDogaGFuZGxlIC0tc2VwYXJhdGU9a2VybmVsCisKKzIwMDMtMDItMDkgIFdpbGwgQ29oZW4gIDx3Y29oZW5AcmVkaGF0LmNvbT4KKworCSogdXRpbHMvb3Bjb250cm9sOiBBZGQgcnRjLXZhbHVlIG9wdGlvbi4KKworMjAwMy0wMi0wOSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiB1dGlscy9vcGNvbnRyb2w6IHN0YWxlIGxvY2sgZmlsZSBkZXRlY3Rpb24KKworMjAwMy0wMi0wNiAgV2lsbCBDb2hlbiAgPHdjb2hlbkByZWRoYXQuY29tPgorCisJKiB1dGlscy9vcGNvbnRyb2wgKGRvX2R1bXApOiBEbyBub3QgZXhpdCBpZiBubyBkYWVtb24uCisKKzIwMDMtMDItMDYgIFdpbGwgY29oZW4gIDx3Y29oZW5AcmVkaGF0LmNvbT4KKworCSogZG9jL29wcm9maWxlLjEuaW46IFVwZGF0ZSBtYW4gcGFnZSBpbmZvcm1hdGlvbi4KKworMjAwMy0wMi0wMyAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBjb25maWd1cmUuaW46IDAuNmN2cworCisyMDAzLTAyLTAyICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGNvbmZpZ3VyZS5pbjogYnVtcCB0byAwLjUKKworMjAwMy0wMi0wMiAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBjb25maWd1cmUuaW46IGRpc2FibGUgeDg2XzY0CisKKzIwMDMtMDItMDIgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogcHAvZm9ybWF0X291dHB1dC5jcHA6IHJldmVydCBwcmV2aW91cyBwYXRjaCwgUGhpbCdzCisJICB4ODYgYmludXRpbHMgaXMgYnVpbHQgd2l0aCA2NC1iaXQgYmZkX3ZtYQorCisyMDAzLTAyLTAxICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIHV0aWxzL29wY29udHJvbDogcmVuYW1lIC0tc2VwYXJhdGUtc2FtcGxlcyB0byAtLXNlcGFyYXRlPWxpYnJhcnkKKwkgIGZvciBmdXR1cmUgcHJvb2ZpbmcuCisKKwkqIHBwL2Zvcm1hdF9vdXRwdXQuY3BwOiBvdXRwdXQgdm1hIGF0IGEgc3VpdGFibGUgd2lkdGgKKworMjAwMy0wMS0zMSAgV2lsbCBDb2hlbiAgPHdjb2hlbkByZWRoYXQuY29tPgorCisJKiB1dGlscy9vcGNvbnRyb2woZ2V0X2tlcm5lbF9yYW5nZSk6IE1hdGNoIG9ubHkgLnRleHQgc2VnbWVudC4KKworMjAwMy0wMS0zMSAgR3JheWRvbiBIb2FyZSAgPGdyYXlkb25AcmVkaGF0LmNvbT4KKworCSogbGliYWJpL2FiaS5jcHAKKwkqIGxpYmFiaS9hYmlfdGVzdC5jcHAKKwkqIGxpYmFiaS9vcF9pbXBvcnQuY3BwOiBUcmVhdCBlbmRpYW5uZXNzIGFzIGEgcHJvcGVydHkgb2YgdGhlIGRhdHVtCisJYmVpbmcgaW1wb3J0ZWQsIHJhdGhlciB0aGFuIHRoZSBtZW1vcnkgYXJjaGl0ZWN0dXJlLgorCisyMDAzLTAxLTMxICBEYXZlIEpvbmVzIDxkYXZlakBjb2RlbW9ua2V5Lm9yZy51az4KKworCSogbW9kdWxlL3g4Ni9vcF9tb2RlbF9hdGhsb24uYzogRG9uJ3QgcG9rZSByZXNlcnZlZCBiaXRzIGluIHRoZSBjb3VudGVyLgorCSAgT25seSByZG1zci93cm1zciBjb3VudGVycyB0aGF0IHdlJ3ZlIGVuYWJsZWQgaW4gdGhlIE5NSSBoYW5kbGVyLgorCSAgdWxvbmctPnVpbnQgY29udmVyc2lvbi4KKworMjAwMy0wMS0zMCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCUZyb20gUmFuZG9scGggQ2h1bmcgOgorCisJKiBkYWVtb24vb3BkX2Nvb2tpZS5oOiBhZGQgcGFyaXNjIHN1cHBvcnQKKworMjAwMy0wMS0zMCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJRnJvbSBBbnRvbiBCbGFuY2hhcmQgOgorCisJKiBkYWVtb24vb3BkX2Nvb2tpZS5oOiBhZGQgcHBjMzIvNjQKKworCSogdXRpbHMvb3Bfc3RhcnRfMjU6IGZpeCBzdGFydCBvZiBrZXJuZWwgZm9yIHBwYworCisyMDAzLTAxLTMwICBXaWxsIENvaGVuICA8d2NvaGVuQHJlZGhhdC5jb20+CisKKwkqIHV0aWxzL29wY29udHJvbChnZXRfa2VybmVsX3JhbmdlKTogQXZvaWQgdXNpbmcgcGVybCBhcml0aG1ldGljLgorCisyMDAzLTAxLTI5ICBEYXZlIEpvbmVzIDxkYXZlakBjb2RlbW9ua2V5Lm9yZy51az4KKworCSogdXRpbHMvb3Bjb250cm9sOiBUcnlpbmcgdG8gdXNlIHRoZSBvcHRpb25zIC0tcGlkLWZpbHRlcj1waWQgYW5kCisJICAtLXBnbXItZmlsdGVyPXBnbXIsIG9wY29udHJvbCByZXR1cm5lZCAiY29tbWFuZCBub3QgZm91bmQuCisJICBUaGlzIHdhcyBkdWUgdG8gMiBtaXNzaW5nICd0ZXN0JyBzdGF0ZW1lbnRzLgorCQorMjAwMy0wMS0yOSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogcHAvb3BfdG9fc291cmNlLmNwcDogcmVhZCB2bWEgd2l0aCBzdHJ0b3VsbCBub3Qgc3RydG91bCBmaXhpbmcKKwkgIDMyLzY0IGZhaWx1cmUgdG8gcmVhZCBvdXRwdXQgb2Ygb2JqZHVtcAorCisyMDAzLTAxLTI5ICBEYXZlIEpvbmVzIDxkYXZlakBjb2RlbW9ua2V5Lm9yZy51az4KKworCSogbGlib3Avb3BfY3B1X3R5cGUuYzogQ2x1ZSB0aGUgdXNlciBpbiBvbiB3aHkgdGhlIGNwdSB0eXBlIGlzbid0CisJICByZWNvZ25pc2VkLCBieSBzdWdnZXN0aW5nIHRoZSBtb2R1bGUgd2Fzbid0IGxvYWRlZC4KKwkqIGxpYm9wL29wX2V2ZW50cy5jOiBEb2gsIHVuaXQgbWFza3MgdXNlIGJpdCBudW1iZXJzLCBub3QgdmFsdWVzLgorCisyMDAzLTAxLTI4ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiB1dGlscy9vcF9oZWxwLmM6IGdldCBjcHUgdHlwZSBvbmx5IGlmIG5vdCBmb3JjZWQgb24gY29tbWFuZCBsaW5lLgorCSAgQXZvaWQgd3Jvbmcgd2FybmluZyBhYm91dCB1bnN1cHBvcnRlZCBjcHUgdHlwZS4KKworMjAwMy0wMS0yNyAgV2lsbCBDb2hlbiAgPHdjb2hlbkByZWRoYXQuY29tPgorCisJKiBkYWVtb24vb3BkX2Nvb2tpZS5oKG9wZF9ucl9sb29rdXBfZGNvb2tpZSk6IEFkZCBpYTY0IHZlcnNpb24uCisKKzIwMDMtMDEtMjcgIERhdmUgSm9uZXMgPGRhdmVqQGNvZGVtb25rZXkub3JnLnVrPgorCisJKiBsaWJvcC9vcF9ldmVudHMuYzogSzggSFQgZXZlbnRzIGFyZSB1dG1fZXhjbHVzaXZlLCBub3QgdXRtX2JpdG1hc2sKKwkqIGxpYm9wL29wX2V2ZW50cy5jOiBBZGQgYWRkaXRpb25hbCBLOCB1bml0IG1hc2tzLgorCisyMDAzLTAxLTIzICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBsaWJvcC9vcF9pbnRlcmZhY2VfMjUuaDoKKwkqIGRhZW1vbi9vcGRfaW1hZ2UuYzogcHJlcGFyZSBkcm9wIG1vZHVsZXMgc3VwcG9ydC4gZXhpdCgpIHdoZW4KKwkgIHJlY2VpdmluZyB1bmtub3duIGVzY2FwZSBjb2RlLgorCisyMDAzLTAxLTIzICAgUmFuZG9scGggQ2h1bmcgIDx0YXVzcUBkZWJpYW4ub3JnPgorCisJQWRkZWQgbWlub3IgY2hhbmdlOiBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCB1X2ludCB0byB1aW50LCBmaXgKKwkzMi82NCBiaXRzIGVzY2FwZSBjb2RlIG1hcmtlciBjb21wYXJpc29uLiBQaGlsCisKKwkqIGxpYm9wL29wX2ludGVyZmFjZV8yNS5oOgorCSogZGFlbW9uL29wZF9rZXJuZWwuYzoKKwkqIGRhZW1vbi9vcGRfaW1hZ2UuYzogbmV3IHNjaGVtZSB0byByZWNvZ25pemUga2VybmVsIG9yIHVzZXIgc3BhY2UKKwkgIGVpcCwgbm93IGtlcm5lbCBtb2R1bGUgcGFzcyB0aGUgcmVsZXZlbnQgaW5mb3JtYXRpb24gdGhyb3VnaAorCSAgZXNjYXBlIHNlcXVlbmNlLgorCisyMDAzLTAxLTIxICBEYXZlIEpvbmVzIDxkYXZlakBjb2RlbW9ua2V5Lm9yZy51az4KKworCSogbGlib3Avb3BfZXZlbnRzLmM6IEFkZCB1bml0IG1hc2sgZm9yIEh5cGVydHJhbnNwb3J0IGV2ZW50cy4KKworMjAwMy0wMS0yMSAgRGF2ZSBKb25lcyA8ZGF2ZWpAY29kZW1vbmtleS5vcmcudWs+CisKKwkqIGxpYm9wL29wX2V2ZW50cy5jOiBBZGQgeDg2LTY0IHNwZWNpZmljIGV2ZW50cy4KKworMjAwMy0wMS0yMSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogZGFlbW9uL29wZF9rZXJuZWwuYzogdXNlIHNzY2FuZiB0byBwYXJzZSAvcHJvYy9tb2R1bGVzCisKKzIwMDMtMDEtMjAgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGRhZW1vbi9vcGRfa2VybmVsLmM6IG1vcmUgcm9idXN0IC9wcm9jL21vZHVsZXMgcGFyc2luZy4KKworMjAwMy0wMS0yMCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogZGFlbW9uL29wZF9rZXJuZWwuYzogMi41IG1vZHVsZXMgc3VwcG9ydCwgZm9yIG5vdyBJIGtlZXAKKwkgIHRoZSBjb2RlIGZvciAvcHJvYy9rc3ltcyBwYXJzaW5nIGluIGRhZW1vbi4gTGV0J3MgaXQgbGl2aW5nIGEgZmV3CisJICB3ZWVrcyBwbGVhc2UuCisKKzIwMDMtMDEtMTggIEZhbGsgSHVlZmZuZXIgIDxmYWxrQGRlYmlhbi5vcmc+CisKKwlJIGFkZGVkIHRvIHRoZSBvcmlnaW5hbCBwYXRjaCBhbGwgJUwgdG8gJWxsLCBQaGlsCisKKwkqIGRhZW1vbi9vcGRfaW1hZ2UuYzoKKwkqIGRhZW1vbi9vcGRfa2VybmVsLmM6CisJKiBsaWJ1dGlsL29wX3R5cGVzLmg6IDY0IGJpdHMgcHJpbnRmL3NjYW5mIHNhZmV0eS4KKworMjAwMy0wMS0xOCAgRmFsayBIdWVmZm5lciAgPGZhbGtAZGViaWFuLm9yZz4KKworCSogbGlib3Avb3BfY3B1X3R5cGUuaDoKKwkqIGxpYm9wL29wX2NwdV90eXBlLmM6IGFkZCBBbHBoYSBDUFUgZmFtaWxpZXMuCisJKiBsaWJvcC9vcF9ldmVudHMuaDogbWFrZSBvcF9ldmVudC5jcHVfbWFzayB1MzIsIHNpbmNlIHdlIG5vdyBoYXZlCisJICBtb3JlIHRoYW4gMTYgQ1BVIHR5cGVzCisJKiBsaWJvcC9vcF9od19jb25maWcuaDogYnVtcCBPUF9NQVhfQ09VTlRFUlMgdG8gMjAgZm9yIEFscGhhCisJKiBsaWJvcC9vcF9ldmVudHMuYzogYWRkIEFscGhhIGV2ZW50cworCSogZGFlbW9uL29wZF9jb29raWUuaDogYWRkIGRjb29raWUgc3lzY2FsbCBudW1iZXIgZm9yIEFscGhhCisJKiB1dGlscy9vcF9oZWxwLmMgKG1haW4pOiBhZGQgaGVscCBzdHJpbmcgZm9yIEFscGhhCisKKzIwMDMtMDEtMTggIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogbW9kdWxlL01ha2VmaWxlLmluOgorCSogbW9kdWxlL3g4Ni9NYWtlZmlsZS5pbjoKKwkqIG1vZHVsZS9pYTY0L01ha2VmaWxlLmluOiBrZXJuZWwgaGVhZGVycyBhcmUgdG9vIGZ1YmFyCisJICBmb3IgLVdlcnJvci4gU28gSSdtIHRha2luZyBteSBiYWxsIGhvbWUuCisKKzIwMDMtMDEtMTcgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogSEFDS0lORzoKKwkqIGRvYy9Db2RpbmdTdHlsZTogYWRkCisKKzIwMDMtMDEtMTcgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogVE9ETzogc29tZSB1cGRhdGVzCisKKzIwMDMtMDEtMTUgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIG1vZHVsZS94ODYvb3BfbW9kZWxfcDQuYzogcG1jX3NldHVwX29uZV9wNF9jb3VudGVyKCkgc2hvdyBjbGVhcmx5CisJICB0aGFuIGV2ZW50ID09IDAgaXMgYW4gZXJyb3IKKworMjAwMy0wMS0xNSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiB1dGlscy9vcGNvbnRyb2w6IHByZWZlciBvcHJvZmlsZWQvb3BfaGVscCBiaW5hcmllcyBpbiB0aGUgc2FtZQorCSAgZGlyIGFzIG9wY29udHJvbAorCisyMDAzLTAxLTEyICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBsaWJvcC9vcF9ldmVudHMuYzogcmVuYW1lIE9QX1A0X0hUMiB0byBPUF9QNF9BTEwKKworMjAwMy0wMS0xMiAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogbGlib3ArKy9vcF9wcmludF9ldmVudC5jcHA6IG5vIGV2ZW50LG5vciB1bml0IG1hc2sgZm9yIENQVV9USU1FUl9JTlQsCisJICBwcm9ibGVtIHJlcG9ydGVkIGJ5IEthIEZhaSBMdS4KKworMjAwMy0wMS0xMiAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJRnJvbSBHcmF5ZG9uIEhvYXJlCisKKwkqIGxpYm9wL29wX2NwdV90eXBlLmg6CisJKiBsaWJvcC9vcF9jcHVfdHlwZS5jOiBhZGQgUDQgSFQKKworCSogbGlib3Avb3BfZXZlbnRzLmM6IHRhZyBQNCBIVCBldmVudHMKKworMjAwMy0wMS0xMSAgIFJhbmRvbHBoIENodW5nICA8dGF1c3FAZGViaWFuLm9yZz4KKworCSogZGFlbW9uL29wcm9maWxlZC5jOiBmaXggRUxGIHNuaWZmCisKKzIwMDMtMDEtMTEgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogZGFlbW9uL29wZF9pbWFnZS5jOiBiYWlsIG91dCBpbW1lZGlhdGVseSBvbiBkY29va2llCisJICBsb29rdXAgZmFpbHVyZS4KKworMjAwMy0wMS0xMCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBkYWVtb24vb3BkX2Nvb2tpZS5oOiBpbnN1bGF0ZSBhZ2FpbnN0IG1pc3NpbmcgYXJjaCBzdXBwb3J0CisJICBmb3Igc3lzX2xvb2t1cF9kY29va2llCisKKwkqIGRhZW1vbi9vcGRfaW1hZ2UuYzogdXNlIHRoZSBhYm92ZQorCisyMDAzLTAxLTEwICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGRhZW1vbi9vcGRfaW1hZ2UuYzoKKwkqIGRhZW1vbi9vcHJvZmlsZWQuYzogbW92ZSBjb21wbGV0ZV9kdW1wIHRvIGEgYmV0dGVyIHBsYWNlCisKKzIwMDMtMDEtMTAgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogbGlidXRpbC9vcF90eXBlcy5oOiBhZGQgY29va2llX3QgYW5kIHZtYV90CisKKwkqIGRhZW1vbi9vcGRfaW1hZ2UuYzoKKwkqIGRhZW1vbi9vcGRfaW1hZ2UuaDoKKwkqIGRhZW1vbi9vcGRfa2VybmVsLmM6CisJKiBkYWVtb24vb3BkX2tlcm5lbC5oOiB1c2UgYWJvdmUgdHlwZXMsIGFuZCBrZXJuZWxfcG9pbnRlcl9zaXplCisKKwkqIGRhZW1vbi9vcHJvZmlsZWQuYzogc25pZmYgL3Byb2Mva2NvcmUgZm9yIGtlcm5lbF9wb2ludGVyX3NpemUKKworMjAwMy0wMS0xMCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogbGlib3B0KysvcG9wdF9vcHRpb25zLmNwcDoKKwkqIGxpYm9wdCsrL3BvcHRfb3B0aW9ucy5oOiB3b3JrLWFyb3VuZCB0byBzdXBwb3J0IGJvdGggZ2NjIG5ldyBwYXJzZXIKKwkgIGFuZCBnY2MgMi45NQorCisyMDAzLTAxLTA4ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGxpYm9wL29wX3R5cGUuY3BwOiBzdXBwb3J0IGZvciBhc2NpaS1zdHJpbmcgY3B1IHR5cGVzCisKKzIwMDMtMDEtMDggIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGxpYnV0aWwrKy9vcF9iZmQuY3BwOgorCSogbGlidXRpbCsrL29wX2JmZC5oOgorCSogcHAvb3Byb2ZwcC5jcHA6IG1vcmUgdXNlIG9mIGJmZF92bWEKKworMjAwMy0wMS0wOCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogbGliZGIvTWFrZWZpbGUuYW06IGZpeCBpbmNsdWRlIGRpcgorCSogbGliZGIvZGJfdGVzdC5jOiBkb24ndCBhc3N1bWUgdGhhbiBzaXplb2Yoc3RydWN0IG9wZF9oZWFkZXIpID09IDEyOAorCisyMDAzLTAxLTA2ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBsaWJ1dGlsKysvb3BfYmZkLmg6IGZpeCBmb3IgNjQgYml0cy4KKworMjAwMy0wMS0wNiAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogbGliYWJpL2FiaS5jcHA6CisJKiBsaWJhYmkvb3BfaW1wb3J0LmNwcDogYnJva2VuIGJ5IG15IGxhc3QgY2hhbmdlIGluIGxpYmRiLgorCisyMDAzLTAxLTA2ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBkYi9kYl9oYXNoLmg6IGRvX2hhc2goKSB1c2UgZGJfa2V5X3QgYXMgcGFyYW1ldGVyCisKKzIwMDMtMDEtMDQgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogcHAvb3BfdGltZS5jcHA6IHN1Z2dlc3Qgb3Bjb250cm9sIC0tZHVtcCBpbnN0ZWFkCisKKwkqIHV0aWxzL29wY29udHJvbDogaW1wbGVtZW50IC0tc3RhcnQtZGFlbW9uLiBGaXggYSBudW1iZXIKKwkgIG9mIGJ1Z3MKKworCSogZG9jL29wcm9maWxlLnhtbDoKKwkqIGRvYy9vcHJvZmlsZS4xLmluOiBkb2N1bWVudCAtLXN0YXJ0LWRhZW1vbgorCisyMDAzLTAxLTAzICBXaWxsIENvaGVuICA8d2NvaGVuQHJlZGhhdC5jb20+CisKKwkqIGRhZW1vbi9vcHJvZmlsZWQuYyAob3BkX2RvX3NhbXBsZXMpOiBUeXBlY2FzdCB0byBtYXRjaAorCSAgYXJndW1lbnRzLgorCitTZWUgQ2hhbmdlTG9nLTIwMDIgZm9yIGVhcmxpZXIgY2hhbmdlbG9ncy4KZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L0NoYW5nZUxvZy0yMDA0IGIvb3Byb2ZpbGUtMC45LjcvQ2hhbmdlTG9nLTIwMDQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTA0YjEwYgotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L0NoYW5nZUxvZy0yMDA0CkBAIC0wLDAgKzEsMTAzNCBAQAorMjAwNC0xMi0yNSAgV2lsbCBDb2hlbiAgPHdjb2hlbkByZWRoYXQuY29tPgorCisJKiBldmVudHMvTWFrZWZpbGUuYW06IENvcnJlY3RlZCB0eXBlIGZvciBldmVudHNfZmlsZXMuCisKKzIwMDQtMTItMTIgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogZG9jL29wcm9maWxlLnhtbDogZXhwYW5kIGxpc3Qgb2Ygc3VwcG9ydGVkIENQVSB0eXBlcy4KKworMjAwNC0xMi0xMiAgUmFsZiBCYWVjaGxlICA8cmFsZkBsaW51eC1taXBzLm9yZz4KKworCSogZGFlbW9uL29wZF9jb29raWUuYzogRGVmaW5lIF9fTlJfbG9va3VwX2Rjb29raWUgZm9yIGFsbCB0aHJlZQorCSAgc3VwcG9ydGVkIE1JUFMgQUJJcy4KKworCSogZXZlbnRzL21pcHMvcjEwMDAwL2V2ZW50czoKKwkqIGV2ZW50cy9taXBzL3IxMDAwMC91bml0X21hc2tzOgorCSogZXZlbnRzL21pcHMvcjEyMDAwL2V2ZW50czoKKwkqIGV2ZW50cy9taXBzL3IxMjAwMC91bml0X21hc2tzOgorCSogZXZlbnRzL21pcHMvcjU0MzIvZXZlbnRzOgorCSogZXZlbnRzL21pcHMvcjU0MzIvdW5pdF9tYXNrczoKKwkqIGV2ZW50cy9taXBzL3I1NTAwL2V2ZW50czoKKwkqIGV2ZW50cy9taXBzL3I1NTAwL3VuaXRfbWFza3M6CisJKiBldmVudHMvbWlwcy9ybTcwMDAvZXZlbnRzOgorCSogZXZlbnRzL21pcHMvcm03MDAwL3VuaXRfbWFza3M6CisJKiBldmVudHMvbWlwcy9ybTkwMDAvZXZlbnRzOgorCSogZXZlbnRzL21pcHMvcm05MDAwL3VuaXRfbWFza3M6CisJKiBldmVudHMvbWlwcy9zYjEvZXZlbnRzOgorCSogZXZlbnRzL21pcHMvc2IxL3VuaXRfbWFza3M6CisJKiBldmVudHMvTWFrZWZpbGUuYW06CisJKiBsaWJvcC9vcF9ldmVudHMuYzoKKwkqIHV0aWxzL29wX2hlbHAuYzoKKwkqIGxpYm9wL29wX2NwdV90eXBlLmg6CisJKiBsaWJvcC9vcF9jcHVfdHlwZS5jOiBBZGQgc3VwcG9ydCBmb3IgdGhlIE1JUFMgUjEwMDAwIGFuZCBSMTIwMDAsCisJICBRRUQgUk03MDAwIGFuZCBQTUMtU2llcnJhIFJNOTAwMCwgTkVDIFZSNTQzMiBhbmQgVlI1NTAwIGFuZCBTaWJ5dGUgU0IxCisJICAgcHJvY2Vzc29ycy4KKworCSogUkVBRE1FOiBMaXN0IG15c2VsZiBhcyB0aGUgY2FyZXRha2VyIG9mIHRoZSBNSVBTIGJpdHMuCisKKzIwMDQtMTEtMjUgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGxpYm9wL29wX2V2ZW50cy5jOiBzaW1wbGlmeSBhIGJpdCBnZXRfbWFwcGluZygpCisKKzIwMDQtMTEtMjAgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGRhZW1vbi9vcGRfc3RhdHMuYzogc29tZSBzdGF0aXN0aWNzIGFyZSB1c2VsZXNzLCBkb24ndCBwcmludCB0aGVtCisJICBpZiB3ZSBjYW4ndCByZWFkIHRoZSBvcHJvZmlsZWZzIGZpbGVzLgorCisyMDA0LTExLTIwICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBkYWVtb24vb3BkX3NmaWxlLmM6IHNmaWxlX2NsZWFyX2tlbmVsKCkgOiBjbGVhciBhbHNvIGNhbGxncmFwaAorCSAgZmlsZSBkZXBlbmRpbmcgb24gbW9kdWxlLgorCisyMDA0LTExLTE5ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBkYWVtb24vb3BkX3NmaWxlLmg6CisJKiBkYWVtb24vb3BkX3NmaWxlLmM6IGZpeCAjOTcxNDg3LCBkYWVtb24gd2FzIHVuYWJsZSB0byByZXRyaWV2ZQorCSAgY29ycmVjdGx5IGNhbGxncmFwaCBzYW1wbGUgZmlsZSBmb3Iga2VybmVsIHNwYWNlIHNhbXBsZXMuIEZpeGVkIGJ5CisJICBhZGRpbmcgcmVsZXZhbnQgaW5mb3JtYXRpb24gdG8gY2dfaGFzaF9lbnRyeS4KKworCSogbGlicHAvY2FsbGdyYXBoX2NvbnRhaW5lci5jcHA6IG1vcmUgdmVyYm9zaXR5CisKKzIwMDQtMTEtMTkgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogZG9jL29wcm9maWxlLnhtbDogRml4IEFNRCBsaW5rIChub3RpY2VkIGJ5IEVtbWFudWVsIEFyYW1hbikuCisKKzIwMDQtMTEtMTggIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIHBwL29wZ3Byb2YuY3BwOiBlbnN1cmUgd2UgbG9hZCBhbGwgY2FsbGdyYXBoIGZpbGUKKworMjAwNC0xMS0xOCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogbGlidXRpbCsrL2xvY2F0ZV9pbWFnZXMuY3BwOiBlbnN1cmUgZXJyb3IgaXMgYWx3YXlzIHNldCwKKwkgIGNhbGxncmFwaF9jb250YWluZXIgd2FzIHVzaW5nIGFuIHVuaW5pdGlhbGl6ZWQgdmFsdWUuCisKKzIwMDQtMTEtMTcgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGxpYnV0aWwrKy9vcF9iZmQuY3BwOiBpbXByb3ZlIGEgYml0IHRoZSBzeW1ib2wgY2hvc2VuIHdoZW4KKwkgIG11bHRpcGxlIHN5bWJvbCBsaXZlIGF0IHNhbWUgdm1hCisKKzIwMDQtMTEtMTcgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGRvYy9vcHJvZmlsZS54bWw6IHNvbWUgd29yZHMgYWJvdXQgVVAga2VybmVsID4gMi42LjkgYW5kIHRoZSBuZWVkIG9mCisJICBsYXBpYyBhdCBib290LgorCisyMDA0LTExLTE3ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBwcC9jb21tb25fb3B0aW9uLmg6CisJKiBwcC9jb21tb25fb3B0aW9uLmNwcDogbW92ZSB0aHJlc2hvbGQgb3B0aW9uIGZyb20gaGVyZSAuLi4KKwkqIHBwL29wYW5ub3RhdGVfb3B0aW9ucy5jcHA6CisJKiBwcC9vcGdwcm9mX29wdGlvbnMuY3BwOgorCSogcHAvb3ByZXBvcnRfb3B0aW9ucy5jcHA6CisJKiBwcC9vcHN0YWNrX29wdGlvbnMuY3BwOiB0byBlYWNoIG9mIHRoZXNlIGZpbGUgdXNpbmcgaXQuIFNpZGUgZWZmZWN0CisJICBpcyB0byByZW1vdmUgdGhpcyBvcHRpb24gZnJvbSBvcGFyY2hpdmUgd2hpY2ggZGlkbid0IGhhbmRsZSBpdC4KKwkKKwkqIGRvYy9vcGFyY2hpdmUuMS5pbjoKKwkqIGRvYy9vcHJvZmlsZS54bWw6IHRoZXJlIGlzbid0IGFueSAtLXRocmVzaG9sZCBvcHRpb24gdG8gb3BhcmNoaXZlCisKKzIwMDQtMTEtMDcgIEtyaXN0aXMgTWFrcmlzICA8a3Jpc3Rpcy5tYWtyaXNAYXN1LmVkdT4KKworCSogZG9jL2ludGVybmFscy54bWw6IGZpeCB0eXBvCisKKzIwMDQtMTEtMDEgIE1heW5hcmQgSm9obnNvbiAgPG1heW5hcmRqQHVzLmlibS5jb20+CisKKwkqIGV2ZW50cy9wcGM2NC85NzAvZXZlbnRzOiBNYWtlIG1pbiBjb3VudCAxMDAwMCBmb3IgYWxsIFBNX0lOU1RfQ01QTDsKKwkgIGFuZCByZW1vdmUgcmVkdW5kYW50IGV2ZW50IGluIGdyb3VwIDIKKwkqIGV2ZW50cy9wcGM2NC9wb3dlcjQvZXZlbnRfbWFwcGluZ3M6IFNldCBMU0Igb2YgTU1DUkEgc28ga2VybmVsIGtsdWRnZQorCSAgY2FuIGJlIHJlbW92ZWQgYXQgc29tZSBsYXRlciBkYXRlCisJKiBldmVudHMvcHBjNjQvcG93ZXI0L2V2ZW50czogTWFrZSBtaW4gY291bnRzIGNvbnNpc3RlbnQgd2l0aCBwcGM5NzAKKwkqIGV2ZW50cy9wcGM2NC9wb3dlcjUvZXZlbnRzOiBNYWtlIG1pbiBjb3VudHMgY29uc2lzdGVudCB3aXRoIHBwYzk3MAkgIAorCisyMDA0LTExLTAxICBHcmVnIEJhbmtzICA8Z25iQG1lbGJvdXJuZS5zZ2kuY29tPgorCisJKiBsaWJvcC9vcF9ldmVudHMuYzogTWFrZSB0aGUgZGVmYXVsdCBzYW1wbGUgcmF0ZSBmb3IKKwkgIElBNjQgc2Vuc2libGUgKGkuZS4gMTAgdGltZXMgc21hbGxlcikuCisKKzIwMDQtMTAtMTUgIFdpbGwgQ29oZW4gIDx3Y29oZW5AcmVkaGF0LmNvbT4KKworCSogZXZlbnRzL3BwYzY0L3Bvd2VyNC9ldmVudHM6IENvcnJlY3RlZCBncm91cCA0IGNvdW50ZXIgYXNzaWdubWVudHMuCisKKzIwMDQtMTAtMTUgIE1heW5hcmQgSm9obnNvbiAgPG1heW5hcmRqQHVzLmlibS5jb20+CisKKwkqIGV2ZW50cy9NYWtlZmlsZS5hbToKKwkqIGV2ZW50cy9wcGM2NC85NzAvZXZlbnRfbWFwcGluZ3M6CisJKiBldmVudHMvcHBjNjQvOTcwL2V2ZW50czoKKwkqIGV2ZW50cy9wcGM2NC85NzAvdW5pdF9tYXNrczoKKwkqIGxpYm9wL29wX2NwdV90eXBlLmM6CisJKiBsaWJvcC9vcF9jcHVfdHlwZS5oOgorCSogbGlib3Avb3BfZXZlbnRzLmM6CisJKiB1dGlscy9vcF9oZWxwLmM6CisJKiB1dGlscy9vcGNvbnRyb2w6IEFkZGVkIHBwYzY0Lzk3MCBzdXBwb3J0LgorCisyMDA0LTEwLTE0ICBHcmVnIEJhbmtzICA8Z25iQG1lbGJvdXJuZS5zZ2kuY29tPgorCisJKiBjb25maWd1cmUuaW46CisJKiBkYWVtb24vb3BkX3BlcmZtb24uYzogYXV0b2NvbmYgZm9yIHNjaGVkX3NldGFmZmluaXR5CisJICBhbmQgcGVyZm1vbmN0bCwgZml4IHNjaGVkX3NldGFmZmluaXR5IGNhbGwgZm9yIGVhcmx5CisJICAyLjYga2VybmVscworCisyMDA0LTEwLTA3ICBXaWxsIENvaGVuICA8d2NvaGVuQHJlZGhhdC5jb20+CisKKwkqIHV0aWxzL29wY29udHJvbDogQ29ycmVjdCBwcGM2NCBjaGVjayB0aGF0IGV2ZW50cyBhcmUgaW4gc2FtZSBncm91cC4KKworMjAwNC0wOS0yMSAgV2lsbCBDb2hlbiAgPHdjb2hlbkByZWRoYXQuY29tPgorCisJKiBsaWJ1dGlsKysvb3BfYmZkLmg6CisJKiBsaWJ1dGlsKysvb3BfYmZkLmNwcDogQWRkIGxvZ2ljIHRvIHVzZSB0aGUgcHJlZmVycmVkIHN5bWJvbCBuYW1lLgorCisyMDA0LTA5LTE3ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIHV0aWxzL29wX2hlbHAuYzogZG9uJ3QgZGVyZWYgYSBOVUxMIHBvaW50ZXIKKwkgIG9uIGZhaWx1cmUgdG8gcmVhZCAvZGV2L29wcm9maWxlL2NwdV90eXBlCisKKzIwMDQtMDktMTcgIEFudG9uIEJsYW5jaGFyZCAgPGFudG9uQHNhbWJhLm9yZz4KKworCSogbGlib3Avb3BfZXZlbnRzLmM6IGZpeCBjb21waWxlIHdhcm5pbmdzCisKKzIwMDQtMDktMTYgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogbTQvY29uZmlnbW9kdWxlLm00OiBkaXNhYmxlIHg4Ni02NCBvbiAyLjQKKworMjAwNC0wOS0xNSAgTWF5bmFyZCBQLiBKb2huc29uICA8bWF5bmFyZGpAdXMuaWJtLmNvbT4KKworCSogZXZlbnRzL01ha2VmaWxlLmFtOgorCSogbGlib3Avb3BfY3B1X3R5cGUuaDoKKwkqIGxpYm9wL29wX2V2ZW50cy5oOgorCSogbGlib3Avb3BfZXZlbnRzLmM6CisJKiB1dGlscy9vcF9oZWxwLmM6CisJKiB1dGlscy9vcGNvbnRyb2w6IFBQQzY0IHN1cHBvcnQKKwkKKzIwMDQtMDktMTMgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogY29uZmlndXJlLmluOiBidW1wIHRvIDAuOC4yY3ZzCisKKzIwMDQtMDktMTEgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogY29uZmlndXJlLmluOiBidW1wIHRvIDAuOC4xCisKKzIwMDQtMDktMTEgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogbGlicHAvbG9jYXRlX2ltYWdlcy5oOiBkb3h5Z2VuIGZvciBhcmNoaXZlX3BhdGgKKworMjAwNC0wOC0xOCAgV2lsbCBDb2hlbiAgPHdjb2hlbkByZWRoYXQuY29tPgorCisJKiBkb2Mvb3Byb2ZpbGUueG1sOiBMaXN0IGRlZmF1bHQgZXZlbnRzIGluIGRvY3VtZW50YXRpb24uCisKKzIwMDQtMDgtMTIgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogbGlidXRpbCsrL29wX2JmZC5jcHA6IHdlIG5lZWQgdG8gdmVyaWZ5CisJZnVuY3Rpb25uYW1lIGlzIG5vbi1OVUxMIGluICpib3RoKiBwbGFjZXMKKworMjAwNC0wOC0xMiAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBsaWJ1dGlsKysvb3BfYmZkLmNwcDogYWRkIGEgaGFjayB0byBzdXBwb3J0CisJT2JqZWN0aXZlIEMKKworMjAwNC0wNy0yMSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogbGliZGIvZGJfbWFuYWdlLmM6IHRoaW5rbyBpbiAjOTMxODcxIGJ1ZyBmaXguCisKKzIwMDQtMDctMjEgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGxpYnBwL2FycmFuZ2VfcHJvZmlsZXMuY3BwOiBmaXggb3ByZXBvcnQgLW0gbGliLCBicm9rZW4gaW4gMC44CisJICB3aGVuIHVzaW5nIG9wY29udHJvbCAtLXNlcGFyYXRlPWtlcm5lbCB3aXRoIG1lc3NhZ2UKKwkgICJhZGRfdG9fcHJvZmlsZV9zYW1wbGVfZmlsZXMoKTogc2FtcGxlIGZpbGUgcGFyc2VkIHR3aWNlIgorCisyMDA0LTA3LTE4ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGxpYm9wL29wX21hbmdsaW5nLmM6IGRlcCBpbWFnZSBhbHdheXMgdXNlZAorCSd7cm9vdH0nIHRva2VuCisKKzIwMDQtMDctMTUgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogZG9jL2ludGVybmFscy54bWw6IGRvY3VtZW50IHNvbWUgbW9yZQorCisyMDA0LTA3LTA5ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGxpYnBwL3BvcHVsYXRlLmNwcDogcXVhc2ggdGltZXN0YW1wIHdhcm5pbmdzCisJIHdoZW4gdXNpbmcgYXJjaGl2ZTogcHJvZmlsZSBzcGVjaWZpZXIKKworMjAwNC0wNy0wOSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBwcC9vcHN0YWNrX29wdGlvbnMuY3BwOiBpbmNsdWRlIGNhbGwtZ3JhcGgKKwkgIGZpbGVzIGluIGFyY2hpdmUuCisKKzIwMDQtMDctMDYgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogZG9jL29wcm9maWxlLjEuaW46CisJKiBkb2Mvb3Byb2ZpbGUueG1sOgorCSogbGlicHAvcHJvZmlsZV9zcGVjLmg6CisJKiBsaWJwcC9wcm9maWxlX3NwZWMuY3BwOiByZW1vdmUgc2FtcGxlLWZpbGUKKwkgIGFuZCBiaW5hcnkgcHJvZmlsZSBzcGVjaWZpZXJzCisKKwkqIGRvYy9vcGNvbnRyb2wuMS5pbjoKKwkqIGRvYy9vcHJvZmlsZS54bWw6CisJKiBwcC9jb21tb25fb3B0aW9uLmNwcDoKKwkqIHV0aWxzL29wY29udHJvbDogYWxsb3cgZWl0aGVyICJsaWIiIG9yICJsaWJyYXJ5IgorCSBmb3IgbWVyZ2Uvc2VwYXJhdGUgb3B0aW9uLiBEb2N1bWVudCAibGliIgorCisyMDA0LTA3LTA2ICBXaWxsIENvaGVuIDx3Y29oZW5AcmVkaGF0LmNvbT4KKworCSogZG9jL29wcm9maWxlLnhtbDoKKwkqIGRvYy9NYWtlZmlsZS5hbToKKwkqIGRvYy9vcGFyY2hpdmUuMS5pbjoKKwkqIGRvYy9vcHJvZmlsZS4xLmluOgorCSogbGlicHAvcHJvZmlsZV9zcGVjLmNwcDoKKwkqIGxpYnBwL3Byb2ZpbGVfc3BlYy5oOgorCSogbGlicHAvcG9wdWxhdGUuaDoKKwkqIGxpYnBwL3BvcHVsYXRlLmNwcDoKKwkqIGxpYnBwL2NhbGxncmFwaF9jb250YWluZXIuY3BwOgorCSogbGlicHAvY2FsbGdyYXBoX2NvbnRhaW5lci5oOgorCSogbGlicHAvYXJyYW5nZV9wcm9maWxlcy5jcHA6CisJKiBsaWJwcC9hcnJhbmdlX3Byb2ZpbGVzLmg6CisJKiBsaWJwcC9sb2NhdGVfaW1hZ2VzLmNwcDoKKwkqIGxpYnBwL2xvY2F0ZV9pbWFnZXMuaDoKKwkqIGxpYnV0aWwrKy9vcF9iZmQuaDoKKwkqIGxpYnV0aWwrKy9vcF9iZmQuY3BwOgorCSogbGlidXRpbCsrL2ZpbGVfbWFuaXAuY3BwOgorCSogbGlidXRpbCsrL2ZpbGVfbWFuaXAuaDoKKwkqIHBwL01ha2VmaWxlLmFtOgorCSogcHAvb3BhcmNoaXZlLmNwcDoKKwkqIHBwL29wYXJjaGl2ZV9vcHRpb25zLmNwcDoKKwkqIHBwL29wYXJjaGl2ZV9vcHRpb25zLmg6CisJKiBwcC9vcHJlcG9ydC5jcHA6CisJKiBwcC9vcHJlcG9ydF9vcHRpb25zLmg6CisJKiBwcC9vcHJlcG9ydF9vcHRpb25zLmNwcDoKKwkqIHBwL29wc3RhY2suY3BwOgorCSogcHAvb3BzdGFja19vcHRpb25zLmg6CisJKiBwcC9vcHN0YWNrX29wdGlvbnMuY3BwOgorCSogcHAvb3Bhbm5vdGF0ZV9vcHRpb25zLmNwcDoKKwkqIHBwL29wYW5ub3RhdGVfb3B0aW9ucy5oOgorCSogcHAvb3BncHJvZi5jcHA6CisJKiBwcC9vcGdwcm9mX29wdGlvbnMuY3BwOgorCSogcHAvb3BncHJvZl9vcHRpb25zLmg6CisJKiBwcC9vcGFubm90YXRlLmNwcDoKKwkqIGNvbmZpZ3VyZS5pbjogU3VwcG9ydCBmb3Igb3BhcmNoaXZlLgorCisyMDA0LTA3LTA1ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGRvYy9vcHJvZmlsZS4xLmluOiBhZGQgb3BzdGFjaygxKSB0byBTRUUgQUxTTworCisyMDA0LTA2LTIxICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGV2ZW50cy9pMzg2L3A0L2V2ZW50czoKKwkqIGV2ZW50cy9pMzg2L3A0LWh0L2V2ZW50czoKKwkqIG1vZHVsZS94ODYvb3BfbW9kZWxfYXRobG9uLmM6CisJKiBtb2R1bGUveDg2L29wX21vZGVsX3A0LmM6CisJKiBtb2R1bGUveDg2L29wX21vZGVsX3Bwcm8uYzoKKwkqIG1vZHVsZS9pYTY0L29wX3BtdS5jOiBmaXggYnVnIDk2NDA5NyAoZXZlbnQKKwljb2RlIG9mIDB4MDAgZG9lc24ndCB3b3JrKSBieSByZWx5aW5nIGNvbnNpc3RlbnRseQorCW9uICJlbmFibGVkIiBub3QgImV2ZW50IgorCisyMDA0LTA1LTI5ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGxpYmRiL3Rlc3RzL01ha2VmaWxlLmFtOiBmaXggYnVpbGQKKworCSogZGFlbW9uL29wZF9tYW5nbGluZy5jOgorCSogZGFlbW9uL29wZF9tYW5nbGluZy5oOgorCSogZGFlbW9uL29wZF9zZmlsZS5jOgorCSogZGFlbW9uL29wZF9zZmlsZS5oOgorCSogZGFlbW9uL2xpYmxlZ2FjeS9vcGRfc2FtcGxlX2ZpbGVzLmg6CisJKiBsaWJhYmkvYWJpLmNwcDoKKwkqIGxpYmFiaS9hYmlfdGVzdC5jcHA6CisJKiBsaWJhYmkvb3BfaW1wb3J0LmNwcDoKKwkqIGxpYmRiL01ha2VmaWxlLmFtOgorCSogbGliZGIvZGJfZGVidWcuYzoKKwkqIGxpYmRiL2RiX2luc2VydC5jOgorCSogbGliZGIvZGJfbWFuYWdlLmM6CisJKiBsaWJkYi9kYl9zdGF0LmM6CisJKiBsaWJkYi9kYl90cmF2ZWwuYzoKKwkqIGxpYmRiL29kYi5oOgorCSogbGliZGIvb2RiX2hhc2guaDoKKwkqIGxpYmRiL3Rlc3RzL2RiX3Rlc3QuYzoKKwkqIGxpYnBwL29wX2hlYWRlci5jcHA6CisJKiBsaWJwcC9wcm9maWxlLmNwcDoKKwkqIGxpYnBwL3Byb2ZpbGUuaDogcy9zYW1wbGVzX29kYl90L29kYl90LywgbW92ZQorCW9kYl9oYXNoLmggdG8gb2RiLmgKKworMjAwNC0wNS0yOCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBkYWVtb24vb3BkX21hbmdsaW5nLmNwcDoKKwkqIGRhZW1vbi9vcGRfc2ZpbGUuY3BwOgorCSogZGFlbW9uL2xpYmxlZ2FjeS9vcGRfcHJvYy5jOgorCSogZGFlbW9uL2xpYmxlZ2FjeS9vcGRfc2FtcGxlX2ZpbGVzLmM6CisJKiBsaWJhYmkvYWJpX3Rlc3QuY3BwOgorCSogbGliYWJpL29wX2ltcG9ydC5jcHA6CisJKiBsaWJkYi9kYl9tYW5hZ2UuY3BwOgorCSogbGliZGIvb2RiX2hhc2guaDoKKwkqIGxpYnBwL3Byb2ZpbGUuY3BwOiBpbnRyb2R1Y2UgYW5kIHVzZSBvZGJfZ2V0X2RhdGEoKSwKKwlvZGJfb3Blbl9jb3VudCgpCisKKzIwMDQtMDUtMjggIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogbGlicHAvY2FsbGdyYXBoX2NvbnRhaW5lci5jcHA6CisJKiBsaWJwcC9hcnJhbmdlX3Byb2ZpbGVzLmNwcDogdHJpdmlhbGl0aWVzCisKKzIwMDQtMDUtMjggIEJpbiBSZW4gIDxiaW4ucmVuQGNsLmNhbS5hYy51az4KKworCSogZGFlbW9uL29wZF9tYW5nbGluZy5jOgorCSogZGFlbW9uL29wZF9zZmlsZS5jOgorCSogZGFlbW9uL29wcm9maWxlZC5jOgorCSogZGFlbW9uL2xpYmxlZ2FjeS9vcGRfaW1hZ2UuYzoKKwkqIGRhZW1vbi9saWJsZWdhY3kvb3BkX3Byb2MuYzoKKwkqIGRhZW1vbi9saWJsZWdhY3kvb3BkX3NhbXBsZV9maWxlcy5jOgorCSogbGliZGIvZGJfZGVidWcuYzoKKwkqIGxpYmRiL2RiX2luc2VydC5jOgorCSogbGliZGIvZGJfbWFuYWdlLmM6CisJKiBsaWJkYi9kYl9zdGF0LmM6CisJKiBsaWJkYi9vZGJfaGFzaC5oOgorCSogbGliZGIvZGJfdHJhdmVsLmM6CisJKiBsaWJwcC9vcF9oZWFkZXIuY3BwOgorCSogbGlicHAvcHJvZmlsZS5jcHA6CisJKiBsaWJ1dGlsL29wX3N0cmluZy5jOgorCSogbGlidXRpbC9vcF9zdHJpbmcuaDogZml4IGRjb29raWUgYWxpYXMgYnVnIGJ5CisJICBpbnRyb2R1Y2luZyBvbmUgbGV2ZWwgb2YgaW5kaXJlY3Rpb24gYW5kIGhhc2gKKwkgIHNhbXBsZSBmaWxlcyBieSBwYXRoIG5hbWVzIChidWcgIzkzMTg3MSkKKworMjAwNC0wNS0xMSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBsaWJ1dGlsKysvZmlsZV9tYW5pcC5oOiBjbGFyaWZ5IGJlaGF2aW91ciBvZgorCSAgb3BfcmVhbHBhdGgoKQorCisJKiBsaWJwcC9vcGFubm90YXRlLmNwcDogYWRkIHNvbWUgY2hlY2tzIHRvIGF2b2lkCisJICBjcmVhdGluZyBmaWxlcyBvdXRzaWRlIG9mIHRoZSBvdXRwdXQgZGlyZWN0b3J5CisKKzIwMDQtMDUtMTEgIEFuZGkgS2xlZW4gIDxha0BzdXNlLmRlPgorCisJKiBsaWJwcC9jYWxsZ3JhcGhfY29udGFpbmVyLmNwcDoKKwkqIGxpYnBwL3Byb2ZpbGVfY29udGFpbmVyLmNwcDoKKwkqIGxpYnV0aWwrKy9vcF9iZmQuaDoKKwkqIGxpYnV0aWwrKy9vcF9iZmQuY3BwOiB1c2UgdW5zaWduZWQgbG9uZyBpbiB2YXJpb3VzCisJICBwbGFjZXMgLSB1MzIgd2FzIGJyZWFraW5nIDY0LWJpdCB1c2FnZQorCisyMDA0LTA1LTExICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGNvbmZpZ3VyZS5pbjogYnVtcCB0byAwLjguMWN2cworCisyMDA0LTA1LTA3ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGNvbmZpZ3VyZS5pbjogYnVtcCB0byAwLjgKKworMjAwNC0wNS0wNyAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBsaWJwcC9maWxlbmFtZV9zcGVjLmg6CisJKiBsaWJwcC9maWxlbmFtZV9zcGVjLmNwcDoKKwkqIGxpYnBwL3Byb2ZpbGVfc3BlYy5jcHA6ICJkZXBlbmRhbnQiIG5vdCAiZGVwZW5kZW50IgorCisyMDA0LTA0LTE5ICBXaWxsIENvaGVuICA8d2NvaGVuQHJlZGhhdC5jb20+CisKKwkqIGV2ZW50cy9pMzg2L3A0L3VuaXRfbWFza3M6CisJKiBldmVudHMvaTM4Ni9wNC1odC91bml0X21hc2tzOiBDb3JyZWN0IG1hY2hpbmVfY2xlYXIgdW5pdCBtYXNrLgorCisyMDA0LTA0LTA0ICBXaWxsIENvaGVuICA8d2NvaGVuQHJlZGhhdC5jb20+CisKKwkqIG00L2J1aWx0aW5leHBlY3QubTQ6CisJKiBtNC9jb21waWxlcm9wdGlvbi5tNDoKKwkqIG00L2NvbmZpZ21vZHVsZS5tNDoKKwkqIG00L2NvcHlpZmNoYW5nZS5tNDoKKwkqIG00L2RvY2Jvb2subTQ6CisJKiBtNC9leHRyYWRpcnMubTQ6CisJKiBtNC9maW5ka2VybmVsLm00OgorCSogbTQva2VybmVsb3B0aW9uLm00OgorCSogbTQva2VybmVsdmVyc2lvbi5tNDoKKwkqIG00L21hbGxvY2F0dHJpYnV0ZS5tNDoKKwkqIG00L3BvcHRjb25zdC5tNDoKKwkqIG00L3ByZWNvbXBpbGVkaGVhZGVyLm00OgorCSogbTQvcXQubTQ6CisJKiBtNC9yZXN1bHR5bi5tNDoKKwkqIG00L3NzdHJlYW0ubTQ6CisJKiBtNC90eXBlZGVmLm00OiBBZGQgcXVvdGVzIGFzIHJlcXVpcmVkIGZvciBhdXRvbWFrZSAxLjguIAorCisyMDA0LTA0LTA0ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGRvYy9vcHJvZmlsZS54bWw6IGltcHJvdmVtZW50cyB0byB0aGUgY2FsbC1ncmFwaAorCSogZG9jdW1lbnRhdGlvbi4KKworMjAwNC0wMy0yOCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogbGlidXRpbCsrL29wX2JmZC5jcHA6IHJlbW92ZSBzcHVyaW91cyBjZXJyIDw8OyBmaXggYSBwb3RlbnRpYWwgbWVtb3J5CisJICBsZWFrCisKKzIwMDQtMDMtMjggIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogbGlidXRpbCsrL29wX2JmZC5jcHA6IGZpeCBhIEJGRCBsZWFrIG9uIGZvcm1hdCBmYWlsdXJlLiBGaXggYQorCSAgc21hbGwgcmFjZSB3aGVuIHRoZSBiaW5hcnkgY2hhbmdlcywgYW5kIHdlIGVycm9yIGZhdGFsbHkKKwkgIGluc3RlYWQgb2YgcmVjb3ZlcmluZy4KKworMjAwNC0wMy0yMiAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogbW9kdWxlL3g4Ni9oYW1tZXJfb3Bfc3lzY2FsbHMuYzogdXNlIHRoZSBmaXJzdCBtYXAgd2l0aCBWTV9FWEVDVVRBQkxFCisJICBiaXQgdG8gZG8gdGhlIGV4ZWMgbm90aWZpY2F0aW9uLCB0aGlzIGZpeCBhIDMyIGJpdHMgYXBwbGljYXRpb24KKwkgIHByb2ZpbGluZyByZWdyZXNzaW9uLiBXZSBkdW5ubyBleGFjdGx5IHdoYXQgaXMgdGhpcyBzZWNvbmQgbW1hcCAuLi4KKwkgIGJ1dCB3ZSBtdXN0IGlnbm9yZSBvbmUgb2YgdGhlc2UuIEZpeCAjOTIxMjQzCisKKzIwMDQtMDMtMjIgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIG1vZHVsZS9pYTY0L29wX3BtdS5jOiB0aGUgd2F5IHRvIHNldCBwZm1fc3lzdF93aWRlIGFuZAorCSAgcGZtX2Rjcl9wcCBjaGFuZ2VkIGJldHdlZW4gMi40LjE5IGFuZCAyLjQuMjAKKworMjAwNC0wMy0yMiAgV2lsbCBDb2hlbiAgPHdjb2hlbkByZWRoYXQuY29tPgorCisJKiB1dGlscy9vcGNvbnRyb2w6IENvcnJlY3Qgb3JkZXIgb2YgZG9faW5pdF9kYWVtb25fdmFycyBhbmQKKwlkZWNpZGVfb3JvZmlsZV9kZXZpY2VzLgorCQorMjAwNC0wMy0yMiAgV2lsbCBDb2hlbiAgPHdjb2hlbkByZWRoYXQuY29tPgorCisJKiB1dGlscy9vcGNvbnRyb2w6IFR3ZWFrIGVycm9yIG1lc3NhZ2VzIGFuZCBmYWN0b3Igb3V0IGNvbW1vbiBjb2RlLgorCisyMDA0LTAzLTE5ICBBbnRvbiBCbGFuY2hhcmQgIDxhbnRvbkBzYW1iYS5vcmc+CisKKwkqIGRhZW1vbi9vcGRfc2ZpbGUuYzogQWRkIGZ1bmN0aW9uIG5hbWUgdG8gc29tZSBlcnJvciBtZXNzYWdlcworCisyMDA0LTAzLTA0ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiB1dGlscy9vcGNvbnRyb2w6IHR3ZWFrIGEgYml0IGVycm9yIG1lc3NhZ2UuCisKKzIwMDQtMDMtMDMgIFdpbGwgQ29oZW4gIDx3Y29oZW5AcmVkaGF0LmNvbT4KKworCSogdXRpbHMvb3Bjb250cm9sOiBTdXBwb3J0IC0tZHVtcCBmb3Igbm9ybWFsIHVzZXJzLgorCisyMDA0LTAyLTI5ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBsaWJwcC9jYWxsZ3JhcGhfY29udGFpbmVyLmNwcDogbWFrZSBnKysgLURfR0xJQkNYWF9ERUJVRyBoYXBweSwgc2VlCisJICBodHRwOi8vZ2NjLmdudS5vcmcvUFIxNDM0MAorCisJKiBtb2R1bGUvb3BfZGNhY2hlLmg6CisJKiBtb2R1bGUvb3BfZG5hbWUuYzogc29tZSBnY2MgdmVyc2lvbiBhcmUgY29uZnVzZWQgYnkgZXh0ZXJuCisJICBkZWNsYXJhdGlvbiBmb2xsb3dlZCBieSBsYXRlciBzdGF0aWMuCisKKzIwMDQtMDItMjggIFp3YW5lIE13YWlrYW1ibyAgPHp3YW5lQGxpbnV4cG93ZXIuY2E+CisKKwkqIGxpYnV0aWwrKy9vcF9iZmQuY3BwOgorCSogdXRpbHMvb3Bjb250cm9sOiBUaGlzIHBhdGNoIGZpeGVzIHRoZSBsaXN0aW5nIG9mIHN5bWJvbHMgd2l0aGluIHRoZQorCSAga2VybmVsIGltYWdlIG9uIEFSTSBpIHdhcyBoYXZpbmcuIFRoZSBwcm9ibGVtIHdhcyBkdWUgdG8gdGhlIGZhY3QKKwkgIHRoYXQgQVJNL0xpbnV4IGtlcm5lbCB0ZXh0IHN0YXJ0cyB3aXRoIGEgc2VjdGlvbiBjYWxsZWQgLmluaXQgdW5saWtlCisJICBhbGwgdGhlIGN1cnJlbnRseSBzdXBwb3J0ZWQgTGludXggYXJjaGl0ZWN0dXJlcy4gU28gdGhlIHNvbHV0aW9uIGlzCisJICB0byBzdGFydCBhdCBzZWN0aW9uIDAKKworMjAwNC0wMi0yOCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogbW9kdWxlL3g4Ni9vcF9zeXNjYWxscy5jOiB3YXJuaW5nIGZpeAorCisyMDA0LTAyLTIzICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBkYWVtb24vTWFrZWZpbGUuYW06CisJKiBkYWVtb24vbGlibGVnYWN5L01ha2VmaWxlLmFtOiBmb3JjZSBkYWVtb24gYnVpbGQgd2l0aCBmcmFtZSBwb2ludGVyLgorCSAgSWYgZGFlbW9uIGlzIGJ1aWx0IHcvbyBmcmFtZSBwb2ludGVyIHdlIGdldCByYW5kb20gYXJjLCBzb21lIG9mIHRoZW0KKwkgIGdvIGluIHRoZSB2bWEgdXNlZCBieSBhbiBleGlzdGluZyBtbWFwZWQgc2FtcGxlIGZpbGUsIHNvIGNvb2tpZQorCSAgbG9va3VwIHJldHVybiBhIHNhbXBsZSBmaWxlbmFtZSB3aGljaCBpcyB1c2VkIGFzIGEgZnJvbSBvciB0bworCSAgY29tcG9uZW50LCB0aGlzIGJyZWFrIHBwdG9vbHMgYnkgY3JlYXRpbmcgaW52YWxpZCBmaWxlbmFtZS4gIE5vdGUKKwkgIHRoaXMgZG9lc24ndCBwcm90ZWN0IGFnYWlzbnQgYSBtYWtlIENGTEFHUz0tZm9taXQtZnJhbWUtcG9pbnRlci4KKworCSogbGlicHAvY2FsbGdyYXBoX2NvbnRhaW5lci5jcHA6IHVzZSB0aGUgcmlnaHQge2NnX31pbWFnZV9uYW1lIGZvcgorCSAgdmVyYm9zZSBvdXRwdXQuCisKKzIwMDQtMDItMjEgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGxpYnBwL2Zvcm1hdF9mbGFncy5oOgorCSogbGlicHAvZm9ybWF0X291dHB1dC5jcHA6CisJKiBsaWJwcC9mb3JtYXRfb3V0cHV0Lmg6CisJKiBwcC9vcHN0YWNrLmNwcDogYWx0ZXJuYXRlIG91dHB1dCBmb3JtYXQuCisKKzIwMDQtMDItMjAgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGRvYy9zcmNkb2MvRG94eWZpbGUuaW46IEZpeCBmb3IgZG94eWdlbiAxLjMuNgorCSogbGlicHAvcHJvZmlsZV9zcGVjLmg6CisJKiBsaWJ1dGlsKysvb3BfYmZkLmg6IG1pbm9yIERveHlnZW4gY29tbWVudHMgZml4CisKKzIwMDQtMDItMjAgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGxpYnV0aWwrKy90ZXN0cy9zdHJpbmdfbWFuaXBfdGVzdHMuY3BwOiBmaXggYSAkIG1ha2UgY2hlY2sgZmFpbHVyZQorCSAgZnJvbSB0aGUgbGFzdCBmb3JtYXRfcGVyY2VudCgpIGNoYW5nZQorCisyMDA0LTAyLTE4ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBsaWJwcC9mb3JtYXRfb3V0cHV0LmNwcDogY2hhbmdlIG91dHB1dCBzcGFjaW5nLgorCisyMDA0LTAyLTE3ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBwcC9vcHN0YWNrX29wdGlvbnMuaDoKKwkqIHBwL29wc3RhY2suY3BwOiBwYXNzIG1lZ2Vfb3B0aW9uczo6bGliIHRvIGNhbGxncmFwaF9jb250YWluZXIKKwkqIGxpYnBwL2NhbGxncmFwaF9jb250YWluZXIuY3BwOgorCSogbGlicHAvY2FsbGdyYXBoX2NvbnRhaW5lci5oOiBoYW5kbGUgbWVyZ2Vfb3B0aW9uczo6bGliCisKKzIwMDQtMDItMTcgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGxpYnBwL2Zvcm1hdF9vdXRwdXQuY3BwOiB1c2UgInNlbGYvY2hpbGQiIGZvciBoZWFkZXIKKwkqIGxpYnV0aWwrKy9zdHJpbmdfbWFuaXAuY3BwOiBmb3JtYXRfcGVyY2VudCgpIHJldHVybiAiMCIgaWYKKwkgIHZhbHVlID09IDAuMAorCSogbGlicHAvY2FsbGdyYXBoX2NvbnRhaW5lci5jcHA6IHJlbW92ZSBzb21lIGRlYWQgY29kZS4KKworMjAwNC0wMi0xNiAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogbW9kdWxlL2NvbXBhdDI0Lmg6CisJKiBtb2R1bGUveDg2L2NwdV90eXBlLmM6CisJKiBtb2R1bGUveDg2L29wX2FwaWMuYzoKKwkqIG1vZHVsZS94ODYvb3BfbW9kZWxfcDQuYzoKKwkqIG1vZHVsZS94ODYvb3Bfbm1pLmM6CisJKiBtb2R1bGUveDg2L29wX3g4Nl9tb2RlbC5oOiBiYWNrcG9ydCBQNCBIeXBlclRocmVhZGluZyBzdXBwb3J0IGZyb20KKwkgICAyLjYgdG8gMi40LgorCisyMDA0LTAyLTE2ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBldmVudHMvaTM4Ni9wNC9ldmVudHM6CisJKiBldmVudHMvaTM4Ni9wNC91bml0X21hc2tzOgorCSogZXZlbnRzL2kzODYvcDQtaHQvZXZlbnRzOgorCSogZXZlbnRzL2kzODYvcDQtaHQvdW5pdF9tYXNrczogZml4IE1FTU9SWV9DT01QTEVURSB1bml0IG1hc2sKKworMjAwNC0wMi0xNSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogbGlicHAvcHJvZmlsZS5jcHA6IHNhbXBsZXNfcmFuZ2UoKSB0aHJvdyBpZiBzdGFydCA+IGVuZAorCisyMDA0LTAyLTE1ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBldmVudHMvaWE2NC9pdGFuaXVtMi91bml0X21hc2tzOiBjb21tZW50cworCSogdXRpbHMvb3BfaGVscC5jOiBhZGQgLS1jYWxsZ3JhcGggdG8gc2FuaXRpemUgbWluIGV2ZW50cyBjb3VudAorCSogdXRpbHMvb3Bjb250cm9sOiBwYXNzIC0tY2FsbGdyYXBoIHRvIG9wX2hlbHAKKworMjAwNC0wMi0xNSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogZGFlbW9uL29wcm9maWxlZC5jOiBzZW5kIGFsYXJtKCkgYWZ0ZXIgZm9yayBub3QgYmVmb3JlLCBiZWhhdmlvcgorCSAgY2hhbmdlZCBiZXR3ZWVuIDIuNCBhbmQgMi42IGFuZCBhY2NvcmRpbmcgdG8gcG9zaXggMi42IGlzIHJpZ2h0LgorCisyMDA0LTAyLTE1ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiB1dGlscy9vcF9oZWxwLmM6IG91dHB1dCB0aGUgZGVmYXVsdCB1bml0IG1hc2suIHdoZW4gcXVlcnlpbmcgdGhlCisJICBkZWZhdWx0IG1hc2sgb3V0cHV0IGl0IGluIGRlY2ltYWwgbm90IGhleGFkZWNpbWFsCisJKiBsaWJwcC9vcF9oZWFkZXIuY3BwOiBldmVudCBudW1iZXIgbXVzdCBiZSBvdXRwdXQgYXMgaW50ZWdlciBub3QgYXMKKwkgIHVuc2lnbmVkIGNoYXIgdHlwZQorCSogbGlib3Avb3BfcGFyc2VfZXZlbnQuYzogY2xhcmlmeSBlcnJvciBtZXNzYWdlCisKKwkqIGxpYm9wL29wX2V2ZW50cy5jOiBiZXR0ZXIgdmFsaWRhdGlvbiBvZiB1bml0IG1hc2sKKwkqIGV2ZW50cy9pYTY0L2l0YW5pdW0yL3VuaXRfbWFza3M6CisJKiBldmVudHMveDg2LTY0L2hhbW1lci91bml0X21hc2tzOiBmaXggc28gbWFrZSBjaGVjayBwYXNzLCBkb25lIHRocm91Z2gKKwkgIGRvY3VtZW50YXRpb24gcmVhZGluZy4KKworCisyMDA0LTAyLTEzICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBldmVudHMvaTM4Ni9wNC1odC9ldmVudHM6IG11bHRpcGx5IGFsbCBtaW5pbXVtIGNvdW50IGJ5IHR3bworCisyMDA0LTAyLTEyICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBkYWVtb24vb3BkX3N0YXRzLmM6IGhhbmRsZSBuZXcgc3RhdGlzdGljcyBhZGRlZCBpbiBjYWxsZ3JhcGggcGF0Y2gKKworMjAwNC0wMi0xMSAgV2lsbCBDb2hlbiAgPHdjb2hlbkByZWRoYXQuY29tPgorCisJKiB1dGlscy9vcGNvbnRyb2w6IGZpeCBub3JtYWxpc2VfZXZlbnRzIGZvciBkZWZhdWx0IGV2ZW50LgorCisyMDA0LTAyLTEwICBXaWxsIENvaGVuICA8d2NvaGVuQHJlZGhhdC5jb20+CisKKwkqIGV2ZW50cy9pMzg2L3A2X21vYmlsZS9ldmVudHM6CisJKiBldmVudHMvaTM4Ni9wNl9tb2JpbGUvdW5pdF9tYXNrczoKKwkqIGV2ZW50cy9NYWtlZmlsZS5hbToKKwkqIGxpYm9wL29wX2NwdV90eXBlLmM6CisJKiBsaWJvcC9vcF9jcHVfdHlwZS5oOgorCSogbGlib3Avb3BfZXZlbnRzLmM6CisJKiB1dGlscy9vcF9oZWxwLmM6IEFkZCBzdXBwb3J0IGZvciBQZW50aXVtIE0gKENlbnRyaW5vKS4KKworMjAwNC0wMi0xMCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogZXZlbnRzL2kzODYvcDQvZXZlbnRzOiBzL2luc3RydWN0aW9ucy91b3BzLyB3aGVuIGFwcHJvcHJpYXRlCisJKiBldmVudHMvaTM4Ni9wNC91bml0X21hc2tzOiBjaGFuZ2UgbWFueSBiaXRtYXNrIHRvIG1hbmRhdG9yeSwKKwkgIGZpeCBpbnZhbGlkIGRlZmF1bHQgdmFsdWUsIHJlbW92ZSBtYXNrIG9ubHkgdXNlZCB3aXRoIEh5cGVyVGhyZWFkaW5nCisJKiBldmVudHMvaTM4Ni9wNC1odC91bml0X21hc2tzOiBzL2JpdG1hc2svbWFuZGF0b3J5LiBSZW1vdmUgdW51c2VkCisJICB1bml0IG1hc2sKKworCSogbGlib3Avb3BfZXZlbnRzLmg6CisJKiBsaWJvcC9vcF9ldmVudHMuYzogd2FybiBpZiBhbiB1bml0IG1hc2sgaXMgbm90IHVzZWQgKHRoaXMgYWRkIGEKKwkgIHdhcm5pbmcgZm9yIEl0YW5pdW0yLCBhZGRlZCBpbiBUT0RPKQorCisJKiBsaWJvcC9vcF9wYXJzZV9ldmVudC5jOiBkb24ndCBzaWxlbnRseSBhY2NlcHQgaW52YWxpZCB2YWx1ZSBhcyB6ZXJvCisJICAoZS5nIEZPTzozMDAwOjB4eDIxIHdhcyBhY2NlcHRlZCBhcyBGT086MzAwMDoweDApCisKKwkqIHV0aWxzL29wY29udHJvbDogbWFuZGF0b3J5IGRlZmF1bHQgdmFsdWUgd2FzIHJlamVjdGVkIGJlY2F1c2Ugd2UKKwkgIGNoZWNrZWQgdGhlIGV2ZW50cyBiZWZvcmUgZ2V0dGluZyB0aGUgZGVmYXVsdCB1bml0IG1hc2suCisKKzIwMDQtMDItMDggIFp3YW5lIE13YWlrYW1ibyAgPHp3YW5lQGFybS5saW51eC5vcmcudWs+CisKKwkqIGRhZW1vbi9vcGRfY29va2llLmM6IEZpeCBzeXNjYWxsIGJhc2UgbnVtYmVyLgorCisyMDA0LTAyLTA4ICBad2FuZSBNd2Fpa2FtYm8gIDx6d2FuZUBhcm0ubGludXgub3JnLnVrPgorCisJKiBkYWVtb24vb3BkX2Nvb2tpZS5jOiBhcm0gc3VwcG9ydCBmb3IgdGltZXIgaW50ZXJydXB0CisKKzIwMDQtMDItMDggIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGRhZW1vbi9saWJsZWdhY3kvb3BkX3NhbXBsZV9maWxlcy5jOiBvcF9tYW5nbGVfZmlsZW5hbWUoKSBwcmVzdW1lCisJICBtYW5nbGVfdmFsdWVzOjpkZXBfbmFtZSBpcyBuZXZlciBOVUxMLCB0aGlzIGZpeCBhIGRhZW1vbiBzZWdmYXVsdAorCSAgd2l0aCAyLjQga2VybmVsCisKKzIwMDQtMDItMDcgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGV2ZW50cy9pMzg2L3A0L3VuaXRfbWFza3M6CisJKiBldmVudHMvaTM4Ni9wNC1odC91bml0X21hc2tzOiBnbG9iYWxfcG93ZXJfZXZlbnRzIG5lZWQgbWFuZGF0b3J5CisJIHVuaXQgbWFzaworCisyMDA0LTAyLTA3ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBsaWJwcC9hcnJhbmdlX3Byb2ZpbGVzLmNwcDogcmUtb3JkZXIgZnVuY3Rpb24gdG8gZml4IGEgYnVpbGQgcHJvYmxlbQorCSAgd2l0aCBnY2MgMy4zLjEKKworMjAwNC0wMi0wNSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogbGlicHAvY2FsbGdyYXBoX2NvbnRhaW5lci5jcHA6IHR3ZWFrIGNvbXB1dGF0aW9uIG9mIGNhbGxlZV9jb3VudHMKKworMjAwNC0wMi0wNSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogbGlicHAvY2FsbGdyYXBoX2NvbnRhaW5lci5jcHA6IEJpZyBUaGlua28gKHRtKSwgY2FsbGVlIHNhbXBsZXMgb2Zmc2V0CisJICBhcmUgdW5vcmRlcmVkCisKKzIwMDQtMDItMDQgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGxpYnBwL2NhbGxncmFwaF9jb250YWluZXIuY3BwOgorCSogbGlicHAvZm9ybWF0X291dHB1dC5jcHA6IGFyY19yZWNvcmRlcjo6Z2V0X2NhbGxlcigpL2dldF9jYWxsZWUoKSBuYW1lCisJICB3YXMgcmV2ZXJzZWQgKGNhdWdodCBieSBXaWxsIENvaGVuKQorCisyMDA0LTAyLTAyICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBsaWJwcC9jYWxsZ3JhcGhfY29udGFpbmVyLmNwcDoKKwkqIGxpYnBwL2NhbGxncmFwaF9jb250YWluZXIuaDoKKwkqIHBwL29wcmVwb3J0X29wdGlvbnMuaDoKKwkqIHBwL29wc3RhY2suY3BwOiBpbXBsZW1lbnQgLS10aHJlc2hvbGQKKworMjAwNC0wMi0wMiAgV2lsbCBDb2hlbiAgPHdjb2hlbkByZWRoYXQuY29tPgorCisJKiBsaWJwcC9jYWxsZ3JhcGhfY29udGFpbmVyLmg6CisJKiBsaWJwcC9mb3JtYXRfb3V0cHV0Lmg6IG1pc3Npbmcgc3RkOjogaW4gaGVhZGVyLgorCisyMDA0LTAyLTAxICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBsaWJwcC9jYWxsZ3JhcGhfY29udGFpbmVyLmg6CisJKiBsaWJwcC9jYWxsZ3JhcGhfY29udGFpbmVyLmNwcDogcmV3cml0ZSBwb3B1bGF0ZSgpIGFuZCBlaGFuY2UKKwkgIGNhbGxlcl9jYWxsZWVfcmVjb3JkZXIgdG8gc3VwcG9ydCBtdWx0aXBsZSBwcm9maWxlIGNsYXNzZXMuCisJKiBwcC9vcHN0YWNrX29wdGlvbnMuY3BwOiBhY2NlcHQgbXVsdGlwbGUgcHJvZmlsZSBjbGFzcworCisyMDA0LTAyLTAxICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBsaWJwcC9jYWxsZ3JhcGhfY29udGFpbmVyLmNwcDogZ2V0IGNvcnJlY3Qgc291cmNlIGZpbGVubmFtZSBsaW5lcgorCSogbGlicHAvZm9ybWF0X291dHB1dC5jcHA6IHJlLWZhY3Rvcml6ZSBhIGJpdCBieSBtb3ZpbmcgYW5vbgorCSAgbmFtZXNwYWNlIGZyb20gZm9ybWF0X291dHB1dDo6IHRvIDo6CisKKzIwMDQtMDItMDEgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGRvYy9vcHJvZmlsZS54bWw6CisJKiBkb2Mvb3BzdGFjay4xLmluOiBkb2N1bWVudCBuZXcgb3B0aW9ucworCisJKiBsaWJwcC9jYWxsZ3JhcGhfY29udGFpbmVyLmg6CisJKiBsaWJwcC9jYWxsZ3JhcGhfY29udGFpbmVyLmNwcDogaW1wcm92ZSByZWFkYWJpbGl0eSwgYWRkIGxpbmVucgorCSAgZGVidWcgaW5mb3JtYXRpb24gcmVjb3JkaW5nIHBhcnRpYWxseSwgc2VlIFRPRE8KKworCSogbGlicHAvZm9ybWF0X291dHB1dC5oOiBzL2Zvcm1hdHRlci9vcHJlcG9ydF9mb3JtYXR0ZXIsIGRlZmluZQorCSAgY2dfZm9ybWF0dGVyCisJKiBsaWJwcC9mb3JtYXRfb3V0cHV0LmNwcDogaW1wbGVtZW50IGNnX2Zvcm1hdHRlciwgZmFjdG9yaXplIHNvbWUgY29kZQorCSAgaW4gZm9ybWF0dGVyIGJhc2UgY2xhc3MKKworCSogcHAvb3ByZXBvcnQuY3BwOiBzL2Zvcm1hdHRlci9vcHJlcG9ydF9mb3JtYXR0ZXIKKwkqIHBwL29wc3RhY2tfb3B0aW9ucy5oOgorCSogcHAvb3BzdGFja19vcHRpb25zLmNwcDogaW1wbGVtZW50IG91dHB1dCBzZWxlY3Rpb24vZm9ybWF0dGluZyBvcHRpb25zCisJKiBwcC9vcHN0YWNrLmNwcDogdXNlIGNnX2Zvcm1hdHRlciBmb3Igb3V0cHV0LgorCisyMDA0LTAxLTMwICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJY29tbWl0IG5vdCBpdGVuZGVkIGJ1dCB0cmVlIGlzIHN0YWJsZSBzbyBhZGQgYSBDaGFuZ2VMb2cgLi4uCisJKiBsaWJwcC9NYWtlZmlsZS5hbToKKwkqIGxpYnBwL3N5bWJvbC5jcHA6IG5ldyBmaWxlIGZvciBvdXRwdXRfaGludCgpCisJKiBsaWJwcC9wcm9maWxlX2NvbnRhaW5lci5jcHA6IHVzZSBvdXRwdXRfaGludCgpCisJKiBsaWJwcC9jYWxsZ3JhcGhfY29udGFpbmVyLmNwcDoKKwkqIGxpYnBwL2NhbGxncmFwaF9jb250YWluZXIuaDoKKwkqIGxpYnBwL3N5bWJvbC5oOgorCSogcHAvb3BzdGFjay5jcHA6IGdldCBvdXRwdXQgaGludCBmcm9tIHRoZSBjYWxsZ3JhcGggY29udGFpbmVyLgorCisyMDA0LTAxLTI5ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBkYWVtb24vaW5pdC5jOgorCSogZGFlbW9uL29wZF9ldmVudHMuYzoKKwkqIGRhZW1vbi9vcGRfa2VybmVsLmM6CisJKiBkYWVtb24vb3BkX21hbmdsaW5nLmM6CisJKiBkYWVtb24vb3BkX3ByaW50Zi5oOgorCSogZGFlbW9uL29wZF9zZmlsZS5jOgorCSogZGFlbW9uL29wZF90cmFucy5jOgorCSogZGFlbW9uL29wcm9maWxlZC5jOgorCSogZGFlbW9uL29wcm9maWxlZC5oOgorCSogZGFlbW9uL2xpYmxlZ2FjeS9pbml0LmM6CisJKiBkYWVtb24vbGlibGVnYWN5L29wZF9pbWFnZS5jOgorCSogZGFlbW9uL2xpYmxlZ2FjeS9vcGRfa2VybmVsLmM6CisJKiBkYWVtb24vbGlibGVnYWN5L29wZF9tYXBwaW5nLmM6CisJKiBkYWVtb24vbGlibGVnYWN5L29wZF9wYXJzZV9wcm9jLmM6CisJKiBkYWVtb24vbGlibGVnYWN5L29wZF9wcm9jLmM6CisJKiBkYWVtb24vbGlibGVnYWN5L29wZF9zYW1wbGVfZmlsZXMuYzoKKwkqIHV0aWxzL29wY29udHJvbDogc3BsaXQgZGFlbW9uIC0tdmVyYm9zZSwgdy9vIGFyZ3VtZW50IGl0J3Mgc3lub255bW91cworCSAgdG8gLS12ZXJib3NlPWFsbC4gQmV0dGVyIHNwbGl0dGluZyBpcyB3ZWxjb21lCisKKwkqIGRhZW1vbi9vcGRfc2ZpbGUuYzogRml4IHRoaW5rbywgb3Bjb250cm9sIC0tcmVzZXQgY29yZWR1bXAnZWQKKworMjAwNC0wMS0yOSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogbGlib3Avb3BfZXZlbnRzLmM6CisJKiB1dGlscy9vcF9oZWxwLmM6IGRvbid0IHVzZSBkZWZhdWx0IGluIHN3aXRjaCAoY3B1X3R5cGUpIHRvIGVuc3VyZQorCSAgYWRkaW5nIGEgY3B1IHR5cGUgd2lsbCBpc3N1ZSBhIHdhcm5pbmcgd2hlcmUgd2UgZm9yZ2V0IHRvIGhhbmRsZSBpdC4KKworMjAwNC0wMS0yOCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogZGFlbW9uL29wZF9zZmlsZS5jOiBpbnZlcnQgZnJvbS90byBzdGFydCBvZmZzZXQgZm9yIGtlcm5lbCBzYW1wbGVzCisKKwkqIHBwL29wc3RhY2suY3BwOgorCSogbGlicHAvY2FsbGdyYXBoX2NvbnRhaW5lci5oOgorCSogbGlicHAvY2FsbGdyYXBoX2NvbnRhaW5lci5jcHA6IGlmIHdlIGNhbid0IGJmZF9vcGVuIGEgYmluYXJ5IGFuZAorCSAgdGhlIHNhbXBsZSBmaWxlIHNob3cgaXQncyBhIGtlcm5lbCBzYW1wbGUgZmlsZSB3ZSBtdXN0IGlnbm9yZQorCSAgY29tcGxldGVseSB0aGUgaXQuIChBZGRlZCB0byBUT0RPLCB0aGVyZSBpcyBzb21ldGhpbmcgZnJhZ2lsZSBoZXJlKQorCisyMDA0LTAxLTI4ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBsaWJwcC9pbWFnZV9lcnJvcnMuY3BwOiB0eXBvLCB3YXJuIGF0IGZpcnN0IGVycm9yIG5vdCBmcm9tIHNlY29uZAorCisyMDA0LTAxLTI4ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBsaWJ1dGlsKysvdGVzdHMvdXRpbGl0eV90ZXN0cy5jcHA6CisJKiBsaWJvcHQrKy9wb3B0X29wdGlvbnMuY3BwOiBzL3RlbXBsYXRlIDxjbGFzcy90ZW1wbGF0ZSA8dHlwZW5hbWUvCisKKzIwMDQtMDEtMjggIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGRhZW1vbi9pbml0LmM6IHNob3cgYnVmZmVyIHJlYWQgb25seSB3aGVuIC0tdmVyYm9zZQorCisJKiBsaWJwcC9pbWFnZV9lcnJvcnMuY3BwOgorCSogbGlicHAvaW1hZ2VfZXJyb3JzLmg6IGFkZCBuZWVkZWQgQVBJIGZvciBjYWxsZ3JhcGggaW1hZ2UgZXJyb3IKKwkqIGxpYnBwL2NhbGxncmFwaF9jb250YWluZXIuY3BwOiB1c2UgaXQuCisJKiBwcC9vcHN0YWNrLmNwcDogcmVwb3J0X2ltYWdlX2Vycm9ycygpCisKKzIwMDQtMDEtMjcgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGxpYnV0aWwrKy9vcF9iZmQuY3BwOiBGaXggYmZkX2ZpbmRfbmVhcmVzdF9saW5lKCkgYW5kIHNlcGFyYXRlCisJICBkZWJ1ZyBpbmZvLCBwbGVhc2UgdGVzdCBpdC4KKworMjAwNC0wMS0yNyAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogZG9jL29wY29udHJvbC4xLmluOgorCSogZG9jL29wcm9maWxlLnhtbDoKKwkqIHV0aWxzL29wY29udHJvbDogYWRkIC0tY3B1LWJ1ZmZlci1zaXplIGFuZCBkb2N1bWVudCBpdC4KKworMjAwNC0wMS0yNyAgV2lsbCBDb2hlbiAgPHdjb2hlbkByZWRoYXQuY29tPgorCisJKiBldmVudHMvaTM4Ni9wNC91bml0X21hc2tzOgorCSogZXZlbnRzL2kzODYvcDQtaHQvdW5pdF9tYXNrczogY29ycmVjdCBicmFuY2hfdHlwZSB1bml0IG1hc2suCisJCisyMDA0LTAxLTI1ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGRvYy9NYWtlZmlsZS5hbTogZml4IG1ha2UgY2h1bmsKKworCSogZG9jL2J1ZmZlcnMuZGlhOiBhZGQgZWRpdGFibGUgc291cmNlCisKKwkqIGRvYy9idWZmZXJzLnBuZzogZml4IHN0dXBpZCB0eXBvcworCisJKiBkb2MvaW50ZXJuYWxzLnhtbDogYWRkIHNvbWUgbW9yZSB0ZXh0CisKKzIwMDQtMDEtMjUgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGxpYnBwL3BhcnNlX2ZpbGVuYW1lLmg6CisJKiBsaWJwcC9wYXJzZV9maWxlbmFtZS5jcHA6IHByb2ZpbGVfc3BlY19lcXVhbCgpIG5ldyBwcmVkaWNhdGUKKwkqIGxpYnBwL2FycmFuZ2VfcHJvZmlsZXMuY3BwOiB1c2UgaXQgdG8gZW5zdXJlIHdlIGNyZWF0ZSBhIG5ldworCSAgcHJvZmlsZV9zYW1wbGVzX2ZpbGUgd2hlbiBuZWVkZWQuCisKKzIwMDQtMDEtMjQgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogZG9jL29wcm9maWxlLjEuaW46CisJKiBkb2Mvb3BzdGFjay4xLmluOiBzb21lIGNsZWFudXBzCisKKwkqIGxpYm9wL3Rlc3RzL2xvYWRfZXZlbnRzX2ZpbGVzX3Rlc3RzLmM6CisJKiBsaWJvcC90ZXN0cy9hbGxvY19jb3VudGVyX3Rlc3RzLmM6CisJKiBsaWJvcC9vcF9ldmVudHMuYzogcmVuYW1lIGVudiB2YXIgdG8gT1BST0ZJTEVfRVZFTlRTX0RJUgorCisyMDA0LTAxLTIwICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBkYWVtb24vb3BkX3NmaWxlLmM6IChnZXRmaWxlKCkpIGF2b2lkIG91dCBvZiBib3VuZCBzZi0+ZmlsZXNbXSBhY2Nlc3MKKworMjAwNC0wMS0yMCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogbGlicHAvY2FsbGdyYXBoX2NvbnRhaW5lci5jcHA6IHR3ZWFrIGNvbXBhcmF0b3IgdG8gc29ydCBhcmNzLgorCSogcHAvY29tbW9uX29wdGlvbi5jcHA6IHR5cG8uCisKKzIwMDQtMDEtMjAgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGRvYy9vcGFubm90YXRlLjEuaW46CisJKiBkb2Mvb3BncHJvZi4xLmluOgorCSogZG9jL29wcmVwb3J0LjEuaW46CisJKiBkb2Mvb3Byb2ZpbGUueG1sOgorCSogZG9jL29wc3RhY2suMS5pbjogZG9jdW1lbnQgLS12ZXJib3NlIG9wdGlvbnMgYSBiaXQKKwkqIGxpYnV0aWwrKy9jdmVyYi5jcHA6CisJKiBsaWJ1dGlsKysvY3ZlcmIuaDoKKwkqIHBwL2NvbW1vbl9vcHRpb24uY3BwOiByZW1vdmUgdmxldmVsMiB2ZXJib3NlIG9iamVjdAorCisyMDA0LTAxLTIwICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBsaWJ1dGlsKysvY3ZlcmIuaDoKKwkqIGxpYnV0aWwrKy9jdmVyYi5jcHA6IG5ldyBjdmVyYiBoYW5kbGluZy4gbW9zdCBpbnRlcnJlc3RpbmcgYXJlCisJICAtLXZlcmJvc2U9c2ZpbGUsYmZkLGxldmVsMSByZXNwLiBzYW1wbGUgZmlsZW5hbWUgaGFuZGxpbmcgYmZkCisJICBoYW5kbGluZyBhbmQgbW9yZSB2ZXJib3NpdHkgKG9ubHkgZm9yIGJmZCBhY3R1YWxseSkKKworCSogcHAvb3BncHJvZi5jcHA6IGNvbnRyb2xsZWQgYnkgLS12ZXJib3NlPT1iZmQsIGFkZCBsZXZlbDEgdG8gZ2V0CisJICB2ZXJib3NlIHN5bWJvbHMuCisJKiBsaWJwcC9jYWxsZ3JhcGhfY29udGFpbmVyLmNwcDoKKwkqIGxpYnV0aWwrKy9vcF9iZmQuY3BwOgorCSogcHAvY29tbW9uX29wdGlvbi5jcHA6CisJKiBwcC9vcGFubm90YXRlX29wdGlvbnMuY3BwOgorCSogcHAvb3BncHJvZl9vcHRpb25zLmNwcDoKKwkqIHBwL29wcmVwb3J0X29wdGlvbnMuY3BwOgorCSogcHAvb3BzdGFja19vcHRpb25zLmNwcDogdXNlIGl0CisKKzIwMDQtMDEtMTkgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogbGlicHAvY2FsbGdyYXBoX2NvbnRhaW5lci5oOgorCSogbGlicHAvY2FsbGdyYXBoX2NvbnRhaW5lci5jcHA6IHJlbmFtZSBjYWxsZXJfY2FsbGVlX3JlY29yZGVyCisJdG8gYXJjX3JlY29yZGVyLgorCisJKiBkb2MvQ29kaW5nU3R5bGU6IG1lbnRpb24gdHJhaWxpbmcgY29tbWVudHMKKworCSogdXRpbHMvb3Bjb250cm9sOiBmaXggZm9ybWF0dGluZy4gRXJyb3IgaWYgLS1ub3RlLXRhYmxlLXNpemUKKwlpcyBwYXNzZWQgb24gMi42IGtlcm5lbHMuCisKKzIwMDQtMDEtMTggIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGxpYmRiL2RiX2RlYnVnLmM6IGZpeCBidWlsZCBvbiBhbHBoYQorCSogbGlicHAvY2FsbGdyYXBoX2NvbnRhaW5lci5jcHA6IG1pc3Npbmcgc3RkOjogaW4gaGVhZGVyCisKKzIwMDQtMDEtMTggIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGxpYnBwL2NhbGxncmFwaF9jb250YWluZXIuY3BwOiBPYnZpb3VzbHkgbm90Mih3ZWFrX29yZGVyaW5nX2Z1bmN0aW9uKQorCSAgaXMgbm90IGEgd2Vha19vcmRlcmluZyBmdW5jdGlvbiBsZWFkaW5nIHRvIG15c3RlcmlvdXMgc2VnZmF1bHQKKwkgIGR1cmluZyBzb3J0LgorCisyMDA0LTAxLTE4ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBkb2Mvb3BzdGFjay4xLmluOiBuZXcgZmlsZSwgZGVzY3JpYmUgb3BzdGFjayB1c2FnZQorCSogZG9jL29wcm9maWxlLnhtbDogZGVzY3JpYmUgb3BzdGFjaworCisyMDA0LTAxLTE4ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBsaWJ1dGlsKysvb3BfYmZkLmNwcDogRG9uJ3QgZml4IHN5bWJvbCBvZmZzZXQgZm9yIHN5bWJvbCBkZWZpbml0aW9uCisJICBjb21pbmcgZnJvbSB0aGUgb3JpZ2luYWwgZmlsZS4gQSBjb3JuZXIgY2FzZSByZW1haW4gYnJva2VuOiBzeW1ib2xzCisJICBkZWZpbml0aW9uIGNvbWluZyBmcm9tIGRlYnVnIGZpbGUgYW5kIGJlbG9uZ2luZyB0byBhbm90aGVyIHNlY3Rpb24KKwkgIHRoYW4gLnRleHQgYXJlIGluY29ycmVjdHRseSBvZmZzZXRlZC4KKworMjAwNC0wMS0xOCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogbGlib3Avb3Bfc2FtcGxlX2ZpbGUuaDogd2l0aCBjZyBmaWxlIHdlIG5lZWQgdHdvIGZpZWxkIGlzX2tlcm5lbC4KKwkqIGRhZW1vbi9vcGRfZXZlbnRzLmM6CisJKiBkYWVtb24vb3BkX2V2ZW50cy5oOgorCSogZGFlbW9uL29wZF9tYW5nbGluZy5jOgorCSogZGFlbW9uL2xpYmxlZ2FjeS9vcGRfc2FtcGxlX2ZpbGVzLmM6IGhhbmRsZSBjZ190b19pc19rZXJuZWwKKworCSogcHAvcG9wdWxhdGUuY3BwOgorCSogcHAvcG9wdWxhdGUuaDoKKwkqIHBwL2ltYWdlX2Vycm9ycy5jcHA6CisJKiBwcC9pbWFnZV9lcnJvcnMuaDogbW92ZSB0aGlzIGZvdXIgZmlsZXMgdG8gbGlicHAKKworCSogbGlicHAvcG9wdWxhdGUuY3BwOiB3ZSBjYW4gZ2V0IGVtcHR5IGZpbGVuYW1lIG5vdywgaWdub3JlIHRoZW0uCisJKiBsaWJwcC9pbWFnZV9lcnJvci5oOiByZW1vdmUgdGhpcyBmaWxlIGJ5IG1vdmluZyBpdHMgY29udGVudHMgLi4uCisJKiBsaWJwcC9pbWFnZV9lcnJvcnMuaCBoZXJlICh0aGlzIHR3byBmaWxlbmFtZXMgd2FzIGNvbmZ1c2luZykKKworCSogbGlicHAvTWFrZWZpbGUuYW06IHVwZGF0ZSBhY2NvcmRpbmcgdG8gZmlsZXMgbW92ZS4KKworCSogbGlicHAvYXJyYW5nZV9wcm9maWxlcy5oOgorCSogbGlicHAvYXJyYW5nZV9wcm9maWxlcy5jcHA6IEZpeCBmaW5kX3Byb2ZpbGVfc2FtcGxlX2ZpbGVzKCksIEkgd2FzCisJICBjcmVhdGluZyB0byBtYW55IHByb2ZpbGVfc2FtcGxlX2ZpbGVzLiBBZGQgYSBidW5jaCBvZiBvcGVyYXRvcjw8LgorCisJKiBsaWJwcC9jYWxsZ3JhcGhfY29udGFpbmVyLmg6CisJKiBsaWJwcC9jYWxsZ3JhcGhfY29udGFpbmVyLmNwcDoKKworCSogbGlicHAvZmlsZW5hbWVfc3BlYy5oOiBhZGQgY2dfZmlsZW5hbWUgbWVtYmVyCisJKiBsaWJwcC9maWxlbmFtZV9zcGVjLmNwcDogaGFuZGxlIGNnX2ZpbGVuYW1lLCBGaXggYW4gZXJyb3IgaW4KKwkgIGlzX2RlcGVuZGFudCgpLCBJJ20gYSBiaXQgbmVydm91cyBhYm91dCB0aGlzIHByZWRpY2F0ZS4uLgorCisJKiBsaWJwcC9sb2NhdGVfaW1hZ2VzLmg6CisJKiBsaWJwcC9sb2NhdGVfaW1hZ2VzLmNwcDogI2luY2x1ZGUgZml4CisKKwkqIGxpYnBwL3BhcnNlX2ZpbGVuYW1lLmNwcDogRml4IGNnIGZpbGVuYW1lIGhhbmRsaW5nIHRvIG5vdCB0cmlnZ2VyCisJICBzb21lIGludmFsaWRfZmlsZW5hbWUgZXJyb3Igd2l0aCBjZyBmaWxlbmFtZS4KKworCSogbGlicHAvcHJvZmlsZS5oOgorCSogbGlicHAvcHJvZmlsZS5jcHA6IHdlIGNhbiBubyBsb25nZXIgYXNzdW1lIHdlIHVzZSB1MzIsIHNvIHVzZQorCSAgb2RiX2tleV90IGluIHB1YmxpYyBpbnRlcmZhY2UuIEFkZCBvcGVyYXRvcj09IGFjdGluZyBvbiBpdGVyYXRvcgorCisJKiBsaWJwcC9zeW1ib2xfY29udGFpbmVyLmNwcDoKKwkqIGxpYnBwL3N5bWJvbF9jb250YWluZXIuaDogYWRkIGZpbmQoc3ltYm9sIGNvbnN0ICYpOworCSogbGlicHAvcHJvZmlsZV9jb250YWluZXIuaDoKKwkqIGxpYnBwL3Byb2ZpbGVfY29udGFpbmVyLmNwcDogYWRkIGEgcHVibGljIGludGVyZmFjZSB0byBpdGVyYXRlIG92ZXIKKwkgIGFsbCBzbXlib2xzIGFuZCB0byBmaW5kIGEgc3BlY2lmaWMgc3ltYm9sCisKKwkqIGxpYnBwL3N5bWJvbC5oOiB0eXBvLCBtaXNzaW5nIGluY2x1ZGUKKworCSogcHAvTWFrZWZpbGUuYW06IGhhbmRsZSBvcHN0YWNrIHZhcmlvdXMgbmV3IGZpbGVzIGFuZCBmaWxlcyBtb3ZlIHRvCisJICBsaWJwcC4KKworCSogcHAvb3ByZXBvcnQuY3BwOgorCSogcHAvb3Bhbm5vdGF0ZS5jcHA6IHBhc3Mgc3ltYm9sX2ZpbHRlciBhcyBwYXJhbXMgdG8gcG9wdWxhdGUoKQorCisJKiBwcC9vcGFubm90YXRlX29wdGlvbnMuY3BwOiBhZGQgdmVyYm9zZSBvdXRwdXQgb2YgcHJvZmlsZV9jbGFzc2VzCisJKiBwcC9vcGdwcm9mX29wdGlvbnMuY3BwOgorCSogcHAvb3ByZXBvcnRfb3B0aW9ucy5jcHA6CisKKwkqIHBwL29wc3RhY2suY3BwOgorCSogcHAvb3BzdGFja19vcHRpb25zLmNwcDoKKwkqIHBwL29wc3RhY2tfb3B0aW9ucy5oOiBuZXcgY2FsbGdyYXBoIHV0aWxpdHkgZmFyIHRvIGJlIGNvbXBsZXRlIGJ1dAorCSAgZW5vdWdoIHRvIHN0YXJ0IHRvIHBsYXkgd2l0aCBjYWxsZ3JhcGguCisKKzIwMDQtMDEtMDQgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGxpYnV0aWwvb3BfZmlsZWlvLmM6IG9wX3dyaXRlX2ZpbGUoKTogYWxsb3cgdG8gd3JpdGUgemVybyBieXRlLgorCSogbGlidXRpbC9vcF9maWxlaW8uaDogYWRkIGZhdGFsIGVycm9yIGZvciBvcGRfcmVhZF9pbnRfZnJvbV9maWxlKCkKKwkqIGRhZW1vbi9pbml0LmM6IGFkZCBmYXRhbCBlcnJvciBmb3Igb3BkX3JlYWRfZnNfaW50CisJKiBkYWVtb24vb3Byb2ZpbGVkLmM6CisJKiBkYWVtb24vb3Byb2ZpbGVkLmg6CisJKiBkYWVtb24vbGlibGVnYWN5L2luaXQuYzoKKwkqIGRhZW1vbi9saWJsZWdhY3kvb3BkXzI0X3N0YXRzLmM6IHVzZSB0aGlzIG5ldyBmYXRhbCBwYXJhbWV0ZXIKKwkqIGRhZW1vbi9vcGRfc3RhdHMuYzogZHVtcCAvZGV2L29wcm9maWxlL3N0YXRzLyoKKworCSogZGFlbW9uL29wZF9zZmlsZS5jOgorCSogZGFlbW9uL29wZF9zZmlsZS5oOiBhdWdtZW50IG9wZF9zZmlsZSB3aXRoIGFuIGhhc2ggdGFibGUgb2YgcmVsYXRlZAorCSAgY2FsbCBncmFwaCBmaWxlCisJCisJKiBkYWVtb24vb3BkX21hbmdsaW5nLmM6CisJKiBkYWVtb24vb3BkX21hbmdsaW5nLmg6CisJKiBkYWVtb24vbGlibGVnYWN5L29wZF9zYW1wbGVfZmlsZXMuYzoKKwkqIGxpYm9wL29wX21hbmdsZS5jOgorCSogbGlib3Avb3BfbWFuZ2xlLmg6IHVzZSBuZXcgbWFuZ2xpbmcgbmFtZSBzY2hlbWUsIGluIHNob3J0IHdvcmQ6CisJICB7ZGVwfSBwYXJ0IGlzIG5vIGxvbmdlciBvcHRpb25uYWwsIGEge2NnfS9iaW5hcnlfbmFtZSBjYW4gb3B0aW9ubmFsbHkKKwkgIGZvbGxvdyB0aGUge2RlcH0gcGFydAorCSogbGlib3AvdGVzdHMvbWFuZ2xlX3Rlc3RzLmM6IHVwZGF0ZSB0ZXN0IGFjY29yZGluZyB0byBzYW1wbGUgZmlsZW5hbWUKKwkgIGNoYW5nZQorCisJKiBsaWJwcC9maWxlbmFtZV9zcGVjLmNwcDoKKwkqIGxpYnBwL2ZpbGVuYW1lX3NwZWMuaDogZmlsZW5hbWVfc3BlYzo6aXNfZGVwZW5kYW50KCkgbmV3IGZ1bmN0aW9uCisJKiBsaWJwcC9wYXJzZV9maWxlbmFtZS5oOiBhZGQgYSBjZ19pbWFnZSBtZW1iZXIKKwkqIGxpYnBwL3BhcnNlX2ZpbGVuYW1lLmNwcDogaGFuZGxlIGNhbGxncmFwaCBmaWxlbmFtZQorCisJKiBsaWJwcC9hcnJhbmdlX3Byb2ZpbGVzLmNwcDoKKwkqIGxpYnBwL2FycmFuZ2VfcHJvZmlsZXMuaDogcmF0aGVyIHRvIHVzZSBzdHJpbmcgZm9yIHNhbXBsZSBmaWxlcywgdXNlCisJICBhIHsgc3RyaW5nIHNhbXBsZV9maWxlbmFtZSwgbGlzdDxzdHJpbmc+IGNnX2ZpbGVzIH0sIGlmIHtkZXB9IHBhcnQKKwkgICE9IHtjZ30gcGFydCBpdCdzIGEgY3Jvc3MtY2FsbCBiaW5hcnkuCisJICBOb3RlIHRoZSBzYW1wbGVfZmlsZW5hbWUgc3RyaW5nIGNhbiBiZSBlbXB0eSAoY2FsbGdyYXBoIGZpbGUgdy9vIGFueQorCSAgc2FtcGxlcyBpbnRvIGEgYmluYXJ5KQorCisJKiBsaWJwcC9wcm9maWxlX3NwZWMuaDoKKwkqIGxpYnBwL3Byb2ZpbGVfc3BlYy5jcHA6IGZpeCBmaWx0ZXJpbmcgb2YgY2FsbGdyYXBoIGZpbGVuYW1lICh0aGlzIGZpeAorCSAgQ2FybG8gcHJvYmxlbSB3aGVyZSBvcHJlcG9ydCBkaWUgd2l0aCBhbiBpbnZhbGlkX2ZpbGVuYW1lIGVycm9yKQorCisJKiBwcC9vcGdwcm9mLmNwcDogdXNlIHRoZSBuZXcgYXJyYW5nZV9wcm9maWxlcy5oIEFQSSB0byBhY3F1aXJlCisJICBjYWxsZ3JhcGggZmlsZW5hbWUgYXNzb2NpYXRlZCB3aXRoIGEgYmluYXJ5CisJKiBwcC9vcGdwcm9mX29wdGlvbnMuY3BwOiBkb24ndCBmaWx0ZXIgY2FsbGdyYXBoIGZpbGVuYW1lCisKKwkqIHBwL29wcmVwb3J0LmNwcDoKKwkqIHBwL3BvcHVsYXRlLmNwcDogdXBkYXRlIGFjY29yZGluZyBhcnJhbmdlX3Byb2ZpbGUgQVBJIGNoYW5nZQorCisJKiB1dGlscy9vcGNvbnRyb2w6IGFkZCAtLWNhbGxncmFwaD0jZGVwdGggcGFyYW1ldGVyCisJKiBkb2Mvb3Bjb250cm9sLjEuaW46CisJKiBkb2Mvb3Byb2ZpbGUueG1sOiBkb2N1bWVudCBvcGNvbnRyb2wgLS1jYWxsZ3JhcGg9I2RlcHRoCisKKzIwMDQtMDEtMTYgIFdpbGwgQ29oZW4gIDx3Y29oZW5AcmVkaGF0LmNvbT4KKworCSogbGlidXRpbCsrL29wX2JmZC5jcHA6IEFsd2F5cyB1c2UgZmlsZXBvcyBvZiBvcmlnaW5hbCBmaWxlLgorCisyMDA0LTAxLTE2ICBXaWxsIENvaGVuICA8d2NvaGVuQHJlZGhhdC5jb20+CisKKwkqIGxpYm9wL29wX2NvbmZpZy5oIChERUJVR0RJUik6IE5ldy4KKwkqIGxpYnV0aWwvb3BfZmlsZWlvLmg6CisJKiBsaWJ1dGlsL29wX2ZpbGVpby5jOiBOZXcgZnVuY3Rpb24gY2FsY19jcmMzMgorCSogbGlidXRpbCsrL01ha2VmaWxlLmFtOiBBZGQgbGlib3AgdG8gaW5jbHVkZSBkaXJlY3RvcnkuCisJKiBsaWJ1dGlsKysvb3BfYmZkLmg6CisJKiBsaWJ1dGlsKysvb3BfYmZkLmNwcDogTmV3IGZ1bmN0aW9ucyBzZXBhcmF0ZV9kZWJ1Z19maWxlX2V4aXN0cywKKwkgIGdldF9kZWJ1Z19saW5rX2luZm8sIGZpbmRfc2VwYXJhdGVfZGVidWdfZmlsZSwgb3Blbl9iZmQsIGFuZAorCSAgZ2V0X3N5bWJvbHNfZnJvbV9maWxlIHRvIHN1cHBvcnQgc2VwYXJhdGUgZGVidWcgZmlsZXMuIAorCisyMDA0LTAxLTAyICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBwcC9vcGdwcm9mX29wdGlvbnMuY3BwOiB1c2UgdGhlIHByb3BlciB0eXBlIGZvciBvcHRpb25zOjpkZW1hbmdsZQorCisyMDA0LTAxLTAxICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBsaWJyZWdleC9vcF9yZWdleC5jcHA6CisJKiBsaWJyZWdleC9vcF9yZWdleC5oOiB0aWR5IGEgYml0IHByaXZhdGUgaW50ZXJmYWNlCisKKzIwMDQtMDEtMDEgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGd1aS9vcHJvZl9zdGFydF9jb25maWcuaDoKKwkqIGd1aS9vcHJvZl9zdGFydF91dGlsLmg6CisJKiBsaWJwcC9zeW1ib2wuaDoKKwkqIGxpYnV0aWwrKy9jdmVyYi5jcHA6CisJKiBsaWJ1dGlsKysvY3ZlcmIuaDoKKwkqIHBwL29wYW5ub3RhdGVfb3B0aW9ucy5jcHA6CisJKiBwcC9vcGdwcm9mX29wdGlvbnMuY3BwOiBtb3ZlIHNvbWUgI2luY2x1ZGUgPD4gZnJvbSAuaCB0byAuY3BwCisKKzIwMDQtMDEtMDEgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGxpYnJlZ2V4L29wX3JlZ2V4LmNwcDogZG9uJ3QgYXNzdW1lIGludCgnYScpID4gaW50KCcwJykKKworU2VlIENoYW5nZUxvZy0yMDA0IGZvciBlYXJsaWVyIGNoYW5nZWxvZ3MuCmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9DaGFuZ2VMb2ctMjAwNSBiL29wcm9maWxlLTAuOS43L0NoYW5nZUxvZy0yMDA1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyZTc2ZWUKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9DaGFuZ2VMb2ctMjAwNQpAQCAtMCwwICsxLDk2MyBAQAorMjAwNS0xMi0zMCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogbGlidXRpbCsrL2JmZF9zdXBwb3J0LmNwcDogYmZkX2ZpbmRfbmVhcmVzdF9saW5lKCkgY2FuIHJldHVybiBOVUxMCisJICBpbiB0aGUgc2l4dGggcGFyYW1ldGVycywgY2hlY2sgdGhlIHJldHVybmVkIHZhbHVlLiBQcm9ibGVtIHJlcG9ydGVkCisJICBieSBOaWNvbGFzIFNhdm9pcmUgPG5pY29zQG1hdW5ha2VhdGVjaC5jb20+CisKKzIwMDUtMTItMDcgIE1heW5hcmQgSm9obnNvbiAgPG1heW5hcmRqQHVzLmlibS5jb20+CisKKwkqIGV2ZW50cy9wcGM2NC9wb3dlcjUvZXZlbnRzOiBDaGFuZ2UgY291bnRlciBmb3IgQ1lDTEVTIAorCSAgaW4gb3JkZXIgdG8gdXNlIFBNX0NZQyB2cyBQTV9SVU5fQ1lDLiAgVGhpcyBtYWtlcyBhCisJICBkaWZmZXJlbmNlIG5vdyB3aXRoIGtlcm5lbHMgPiAyLjYuMTQgc2luY2UgdGhlIFBvd2VyUEMKKwkgIHJ1bmxhdGNoIGlzIG5vdyBob25vcmVkIGFuZCBQTV9SVU5fQ1lDIGNvdW50cyBDWUNMRVMKKwkgIG9ubHkgd2hlbiBub3QgaW4gaWRsZSBsb29wLgorCisyMDA1LTEyLTA1ICBXaWxsIENvaGVuICA8d2NvaGVuQHJlZGhhdC5jb20+CisKKwkqIGxpYnBwL2FycmFuZ2VfcHJvZmlsZXMuY3BwOiBDb3JyZWN0IGFub24gbmFtZXNwYWNlIGZvciBnY2MgNC4xLgorCisyMDA1LTExLTMwICBKdW5pY2hpIFVla2F3YSAgPGRhbmNlckBuZXRmb3J0LmdyLmpwPgorCisJKiBkb2Mvb3Byb2ZpbGUuMS5pbjogJHByZWZpeCBpcyB1bnByb2Nlc3NlZCwgdXNlCisJICBAcHJlZml4QCBpbnN0ZWFkLgorCisyMDA1LTExLTE3ICBTZWFuIExlZSAgPGpveS5saXN0c0BnbWFpbC5jb20+CisKKwkqIHV0aWxzL29wY29udHJvbDogRml4IGEgdHlwby4gQ2xlYW51cCBsb2FkX21vZHVsZV8yNigpCisKKzIwMDUtMTAtMTkgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogZGFlbW9uL29wZF9jb29raWUuYzogdXNlIF9fTUlQU0VCX18gbm90IF9NSVBTRUIKKworMjAwNS0xMC0xOCAgTWF5bmFyZCBKb2huc29uIDxtYXluYXJkakB1cy5pYm0uY29tPgorCisJKiBldmVudHMvcHBjNjQvcG93ZXI0L2V2ZW50X21hcHBpbmdzOgorCSogZXZlbnRzL3BwYzY0Lzk3MC9ldmVudF9tYXBwaW5nczoKKwkqIGV2ZW50cy9wcGM2NC9wb3dlcjUvZXZlbnRzOgorCSogZXZlbnRzL3BwYzY0L3Bvd2VyNS9ldmVudF9tYXBwaW5nczogRW5zdXJlIFNBTVBMRV9FTkFCTEUgYml0CisJICBpcyBzZXQgY29ycmVjdGx5LCBpbiBwcmVwYXJhdGlvbiBmb3IgY29taW5nIGNoYW5nZSBpbgorCSAgUFBDNjQgZHJpdmVyLiAgQWxzbywgYmFzZWQgb24gdXNlciBpbnB1dCwgYWRkIG5ldyBldmVudAorCSAgQ1lDTEVTX1JORF9TTVBMIGZvciBQb3dlcjUuCisKKzIwMDUtMTAtMTggIERhdmlkIERhbmV5ICA8ZGRhbmV5QGF2dHJleC5jb20+CisKKwkqIGRhZW1vbi9vcGRfY29va2llLmM6IEhhbmRsZSBNSVBTIG8zMiBmb3IgYm90aCBiaWcgYW5kIGxpdHRsZSBlbmRpYW4uCisKKzIwMDUtMTAtMTggIEFuZHkgRmxlbWluZyAgPGFmbGVtaW5nQGZyZWVzY2FsZS5jb20+CisKKwkqIGV2ZW50cy9NYWtlZmlsZS5hbToKKwkqIGV2ZW50cy9wcGMvZTUwMHYyL2V2ZW50czoKKwkqIGV2ZW50cy9wcGMvZTUwMHYyL3VuaXRfbWFza3M6CisJKiBsaWJvcC9vcF9jcHVfdHlwZS5jOgorCSogbGlib3Avb3BfY3B1X3R5cGUuaDoKKwkqIGxpYm9wL29wX2V2ZW50cy5jOgorCSogdXRpbHMvb3BoZWxwLmM6IGFkZCBzdXBwb3J0IGZvciBsYXRlc3QgZTUwMCBwcm9jZXNzb3IKKworMjAwNS0wOS0wOCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogbGlib3Avb3BfZXZlbnRzLmM6CisJKiBsaWJvcC9vcF9ldmVudHMuaDoKKwkqIGxpYnBwL29wX2hlYWRlci5jcHA6IHVzZSAzMiBiaXRzIHVuc2lnbmVkIGludCBmb3IgdW5pdCBtYXNrLCB1MTYKKwkgIHVzZSB3YXMgYW4gaGlzdG9yaWNhbCBhcnRlZmFjdCBjb21pbmcgZnJvbSB0aGUgcDYgaW1wbGVtZW50YXRpb24uCisJICBUaGlzIGFsbG93IHRvIHBhc3MgbW9yZSBpbmZvcm1hdGlvbiBhbmQgd2lsbCBiZSB1c2VkIGJ5IFA0IGRyaXZlci4KKworMjAwNS0wOS0wMSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogZ3VpL29wcm9mX3N0YXJ0LmNwcDogdGhlIGxhc3QgdW5pdCBtYXNrIGNoZWNrYm94IGlzIG5vIGxvbmdlciBhCisJICAidmFsaWRhdGUgYWxsIHVuaXQgbWFzayIgc28gZG9uJ3QgdHJlYXQgaXQgc3BlY2lhbGx5LiBJdCBhdm9pZCB0bworCSAgbG9zdCB0aGUgbGFzdCBiaXQgaW4gdGhlIHVuaXQgbWFzayBlYWNoIHRpbWUgb3Byb2Zfc3RhcnQgaXMgdXNlZC4KKworMjAwNS0wOC0zMSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogZG9jL29wcm9maWxlLjEuaW46IHF1b3RlIC5CUiBzdHJpbmdzCisKKzIwMDUtMDgtMzEgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogZG9jL29wcm9maWxlLjEuaW46IGRvY3VtZW50IGFyY2hpdmU6IHNwZWNpZmllcgorCisyMDA1LTA4LTMwICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBwcC9vcGFyY2hpdmVfb3B0aW9ucy5jcHA6IGZpeCAjMTI3NjA1OCwgb3BhcmNoaXZlIG11c3QgZm9yY2UgbWVyZ2luZworCSAgdG8gYXZvaWQgdHJpZ2VycmluZyBzb21lIHNhbml0eSBjaGVjayBpbiBhcnJhbmdlX3Byb2ZpbGVzKCkuIEFsbG93aW5nCisJICBtZXJnaW5nIGlzIG5vdCBhIHByb2JsZW0gYXMgbWVyZ2luZyBkb2Vzbid0IG9jY3VyIGluIG9wYXJjaGl2ZS4KKworMjAwNS0wOC0yNSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogZXZlbnRzL3g4Ni02NC9oYW1tZXIvdW5pdF9tYXNrczoKKwkqIGV2ZW50cy94ODYtNjQvaGFtbWVyL2V2ZW50czogbmV3IGV2ZW50cyB0byBjb3VudCBkYXRhIGNhY2hlCisJICBhY2Nlc3MvbWlzcyBieSBsb2NrJ2VkIGluc24uCisKKzIwMDUtMDgtMjQgIE1heW5hcmQgSm9obnNvbiA8bWF5bmFyZGpAdXMuaWJtLmNvbT4KKworCSogZXZlbnRzL3BwYzY0L3Bvd2VyNC9ldmVudHM6CisJKiBldmVudHMvcHBjNjQvcG93ZXI0L2V2ZW50X21hcHBpbmdzOgorCSogZXZlbnRzL3BwYzY0L3Bvd2VyNS9ldmVudHM6CisJKiBldmVudHMvcHBjNjQvcG93ZXI1L2V2ZW50X21hcHBpbmdzOgorCSogZXZlbnRzL3BwYzY0Lzk3MC9ldmVudHM6CisJKiBldmVudHMvcHBjNjQvOTcwL2V2ZW50X21hcHBpbmdzOiBBZGQgYWxsIHN1cHBvcnRlZCBldmVudHMgYW5kIGdyb3Vwcy4KKwkgIFRoaXMgY2hhbmdlIHNvbWUgZXZlbnRzIG5hbWUuCisKKzIwMDUtMDgtMjQgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGxpYnV0aWwrKy9vcF9iZmQuY3BwOiBtaW5vciB0aWR5CisJKiBkYWVtb24vb3BkX3RyYW5zLmM6IG1vcmUgc3RhdGljIGZ1bmN0aW9uCisJKiBldmVudHMvcHBjL2U1MDAvZXZlbnRzOiB0eXBvCisKKzIwMDUtMDgtMTkgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGxpYmRiL2RiX3N0YXQuYzogdXNlIDY0IGJpdHMgdG8gY3VtdWxhdGUgc2FtcGxlcyBjb3VudC4KKworMjAwNS0wOC0xOCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogbGlidXRpbCsrL2ZpbGVfbWFuaXAuY3BwOiBDaGFuZ2UgdGhlIGxhc3QgbW9kaWZpY2F0aW9uIHRpbWUgYWZ0ZXIKKwkgIGNvcHlpbmcgaXQuCisKKzIwMDUtMDgtMTcgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGxpYmRiL29kYi5oOgorCSogbGliZGIvZGJfbWFuYWdlLmM6CisJKiBsaWJkYi9kYl9pbnNlcnQuYzogc3BsaXQgdGhlIGFwaSBpbiB0d28gcGFydCwgb25lIHRvIHVwZGF0ZSBhIG5vZGUKKwkgIChvciBjcmVhdGUgaXQpIGJ5IGluY3JlbWVudGluZyBieSBvbmUgaXRzIGFzc29jaWF0ZWQgdmFsdWUgYW5kCisJICBvbmUgdG8gY3JlYXRlIGEgbmV3IG5vZGUgd2l0aCBhIGdpdmVuIHZhbHVlLiBUaGlzIG9wdGltaXplIHRoZQorCSAgZmFzdCBwYXRoIHVzZWQgYnkgdGhlIGRhZW1vbi4gU2FuaXR5IGNoZWNrIGluc2lkZSB0aGUgZmFzdCBwYXRoIGhhcworCSAgYmVlbiByZW1vdmVkIHRvby4KKworCSogZGFlbW9uL29wZF9zZmlsZS5jOgorCSogZGFlbW9uL2xpYmxlZ2FjeS9vcGRfcHJvYy5jOgorCSogbGliYWJpL29waW1wb3J0LmNwcDoKKwkqIGxpYmFiaS90ZXN0cy9hYmlfdGVzdC5jcHA6CisJKiBsaWJkYi90ZXN0cy9kYl90ZXN0LmM6IHVwZGF0ZSBhY2NvcmRpbmcgCisKKzIwMDUtMDgtMTcgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGxpYnV0aWwrKy9iZmRfc3VwcG9ydC5oOgorCSogbGlidXRpbCsrL29wX2JmZC5jcHA6IGNvbW1lbnQgaG93IGFuZCB3aHkgd2UgY2FuIHVzZSB0aGUgZGVidWdpbmZvCisJICBiZmQgb2JqZWN0LgorCSAgCisKKzIwMDUtMDgtMTYgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGxpYnV0aWwrKy9maWxlX21hbmlwLmNwcDogZml4IGNvbXBpbGF0aW9uIG9uIEdDQyAyLjk1LngKKworMjAwNS0wOC0xNSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSAgRml4ICMxMjU2OTc4OiBzdW0gb2Ygc2FtcGxlcyBjb3VudCBvdmVyZmxvdworCisJKiBsaWJ1dGlsL29wX3R5cGVzLmg6IHR5cGVkZWYgYSB1bnNpZ25lZCA2NCBiaXRzIGNvdW50X3R5cGUKKwkqIGxpYnBwL2NhbGxncmFwaF9jb250YWluZXIuY3BwOgorCSogbGlicHAvZm9ybWF0X291dHB1dC5jcHA6CisJKiBsaWJwcC9wcm9maWxlLmNwcDoKKwkqIGxpYnBwL3Byb2ZpbGUuaDoKKwkqIGxpYnBwL3Byb2ZpbGVfY29udGFpbmVyLmNwcDoKKwkqIGxpYnBwL3N5bWJvbC5oOgorCSogbGlidXRpbC9vcF90eXBlcy5oOgorCSogbGlidXRpbCsrL2dyb3dhYmxlX3ZlY3Rvci5oOgorCSogcHAvb3ByZXBvcnQuY3BwOiB1c2UgaXQgYWxsIG92ZXIgcGxhY2Ugd2hlcmUgd2UgbmVlZCB0byBzdW0gdXAKKwkgIHNhbXBsZXMgY291bnQKKwkqIHBwL29wZ3Byb2YuY3BwOiBjaGVjayBmb3Igc2FtcGxlcyBjb3VudCBjYXBwaW5nIGZvciBjYWxsZ3JhcGgKKwkgIG91dHB1dAorCisyMDA1LTA4LTE1ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBsaWJkYi90ZXN0cy9kYl90ZXN0LmM6IGFkZCBhIGJldHRlciBzcGVlZCB0ZXN0CisKKzIwMDUtMDgtMTMgIE1heW5hcmQgSm9obnNvbiA8bWF5bmFyZGpAdXMuaWJtLmNvbT4KKworCSogZ3VpL29wcm9mX3N0YXJ0Lmg6CisJKiBsaWJvcC9vcF9ldmVudHMuYzoKKwkqIGxpYm9wL29wX2V2ZW50cy5oOgorCSogbGlicHAvb3BfaGVhZGVyLmNwcDogY2hhbmdlIG9wX2V2ZW50LnZhbCBmaWVsZCBmcm9tIHU4IHRvIHUzMiB0bworCSAgYWxsb3cgZXZlbnQgbnVtYmVycyBoaWdoZXIgdGhhbiAwWDEwMC4KKworMjAwNS0wOC0xMyAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogbGliZGIvb2RiLmg6IAorCSogbGliZGIvZGJfaW5zZXJ0LmM6CisJKiBsaWJkYi9kYl9tYW5hZ2UuYzogdXNlIGEgdHdvIHN0ZXAgbm9kZSBhbGxvY2F0aW9uIHRvIGVuc3VyZSBhZGRpbmcKKwkgIGEgbm9kZSB3aWxsIGJlIHNvcnQgb2YgYXRvbWljYWxseSB2aXNpYmxlIGluIGFub3RoZXIgcHJvY2VzcworCisyMDA1LTA4LTEzICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBsaWJkYi9vZGIuaDogY2xhcmlmeSB0aGUgd2F5IG9kYl9nZXRfaXRlcmF0b3Igd29yaworCSogbGlicHAvcHJvZmlsZS5jcHA6IHVzZSBvZGJfZ2V0X2l0ZXJhdG9yIHByb3Blcmx5IHRvIGVuc3VyZSB3ZSBhY2NvdW50CisJICB6ZXJvIHJlbGF0aXZlIG9mZnNldC4gVGhpcyBmaXggYSBjb3JuZXIgY2FzZSB3aGVuIGtlcm5lbCBtb2R1bGUgZ2V0CisJICBhIHNhbXBsZSBhdCB0aGUgZmlyc3QgYnl0ZSBvZiB0aGVpciAudGV4dCBzZWN0aW9uLgorCisyMDA1LTA4LTExICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBsaWJ1dGlsKysvZmlsZV9tYW5pcC5jcHA6IGZpeCBhIHJhY2Ugd2hlbiBjaGFuZ2luZyB0aGUgbW9kZSBhbmQgb3duZXIKKwkgIG9mIGNvcGllZCBmaWxlLgorCSogcHAvb3BhcmNoaXZlLmNwcDogd2FybiBpZiBhIGZpbGUgY2FuJ3QgYmUgY29waWVkLCBhdm9pZCB0byBjb3B5IAorCSAgaW5leGlzdGluZyBpbWFnZSBmb3IgYW5vbiBtYW1tcGluZworCisyMDA1LTA4LTExICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBndWkvb3Byb2Zfc3RhcnQuY3BwOgorCSogZ3VpL29wcm9mX3N0YXJ0X2NvbmZpZy5jcHA6CisJKiBndWkvb3Byb2Zfc3RhcnRfY29uZmlnLmg6CisJKiBndWkvdWkvb3Byb2Zfc3RhcnQuYmFzZS51aToKKwkqIGxpYm9wL29wX2NvbmZpZy5oOiBhZGQgLS1jcHUtYnVmZmVyLXNpemUgZm9yIDIuNgorCisyMDA1LTA4LTEwICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBsaWJ1dGlsKysvZmlsZV9tYW5pcC5oOgorCSogbGlidXRpbCsrL2ZpbGVfbWFuaXAuY3BwOiBwcmVzZXJ2ZSBhcyBtYW55IG9mIGZpbGUgYXR0cmlidXRlcyBhbmQKKwkgIG93bmVyIHdlIGNhbiB3aGVuIGNvcHlpbmcgYSBmaWxlLiBUaGlzIGFmZmVjdGVkIHJ1bm5pbmcgb3BhcmNoaXZlCisJICB3aXRoIHJvb3QgcmlnaHQgYWxsb3dpbmcgbm9uIHJvb3QgdXNlciB0byByZWFkIGFsbCBhcmNoaXZlZCBiaW5hcmllcy4KKwkgIFByb2JsZW0gc3RhcnRlZCBpbiBjdnMgdGhlIDIwMDUtMDgtMDcKKworMjAwNS0wOC0wOSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogZGFlbW9uL29wZF9hbm9uLmM6CisJKiBkYWVtb24vb3BkX2tlcm5lbC5jOiBmaXggdHdvIHNjYW5mIHBvdGVudGlhbCBidWZmZXIgb3ZlcmZsb3cKKworMjAwNS0wOC0wOSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogbW9kdWxlL3g4Ni9jcHVfdHlwZS5jOiBmaXggIzEyNTQzOTAsIHByb2JsZW0gYW5kIHNvbHV0aW9uCisJICBieSBUaG9tYXMgS2hvIDx0a2hvQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSogbW9kdWxlL29wcm9maWxlLmM6CisJKiBtb2R1bGUvb3Byb2ZpbGUuaDogIzEyNjY2MDQgZml4IGEgY29tcGlsYXRpb24gcHJvYmxlbSB3aXRoCisJICBnY2MgPD0gMy4zLiBJdCdzIG5vdCB3b3J0aCB0byB0cnkgdG8gY29udGludWUgdG8gdXNlIGZhc3RjYWxsCisJICBmb3Igb3BfZG9fcHJvZmlsZS4KKworCSogbW9kdWxlL3g4Ni9vcF9tb2RlbF9wNC5jOiBiYWNrcG9ydCBzb21lIGNoYW5nZSBmcm9tIHRoZSAyLjYgZHJpdmVyOgorCSAgb24gc29tZSBQNCBtb2RlbCAzIElRX0VTQ1IwLzEgZG9lc24ndCBleGlzdCBhbmQgYWNlc3NpbmcgdGhlbSBmYXVsdC4KKworMjAwNS0wOC0wOCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogZG9jL29wY29udHJvbC4xLmluOgorCSogZG9jL29wcm9maWxlLnhtbDogZG9jdW1lbnQgb3Bjb250cm9sIC0tYnVmZmVyLXdhdGVyc2hlZAorCisJKiBndWkvb3Byb2Zfc3RhcnQuY3BwOgorCSogZ3VpL29wcm9mX3N0YXJ0X2NvbmZpZy5jcHA6CisJKiBndWkvb3Byb2Zfc3RhcnRfY29uZmlnLmg6CisJKiBndWkvdWkvb3Byb2Zfc3RhcnQuYmFzZS51aToKKwkqIHV0aWxzL29wY29udHJvbDogaW1wbGVtZW50IDIuNiBidWZmZXJfd2F0ZXJzaGVkCisKKzIwMDUtMDgtMDcgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGxpYnV0aWwrKy9maWxlX21hbmlwLmg6CisJKiBsaWJ1dGlsKysvZmlsZV9tYW5pcC5jcHA6IHVzZSBpb3N0cmVhbSB0byBjb3B5IGZpbGUKKwkqIGxpYnBwL3BvcHVsYXRlLmNwcDogY2hlY2tfbXRpbWUoKSBldmVuIHdoZW4gdXNpbmcgYXJjaGl2ZTogc3BlYworCSogcHAvb3BhcmNoaXZlLmNwcDogZml4IGNvbW1lbnQKKworMjAwNS0wOC0wNyAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogcHAvb3ByZXBvcnQuY3BwOiBkb24ndCB0aHJvdyBhIHN0ZDo6c3RyaW5nIGJ1dCBhbiBvcF9ydW50aW1lX2Vycm9yCisKKzIwMDUtMDgtMDcgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGRhZW1vbi9vcHJvZmlsZWQuYzoKKwkqIGRhZW1vbi9saWJsZWdhY3kvaW5pdC5jOgorCSogZGFlbW9uL2xpYmxlZ2FjeS9vcGRfaW1hZ2UuYzoKKwkqIGRhZW1vbi9saWJsZWdhY3kvb3BkX3BhcnNlX3Byb2MuYzoKKwkqIGd1aS9vcHJvZl9zdGFydC5jcHA6CisJKiBndWkvb3Byb2Zfc3RhcnRfdXRpbC5jcHA6CisJKiBsaWJkYi9kYl9kZWJ1Zy5jOgorCSogbGliZGIvZGJfaW5zZXJ0LmM6CisJKiBsaWJkYi9kYl9tYW5hZ2UuYzoKKwkqIGxpYmRiL3Rlc3RzL2RiX3Rlc3QuYzoKKwkqIGxpYm9wL29wX2V2ZW50cy5jOgorCSogbGlib3AvdGVzdHMvYWxsb2NfY291bnRlcl90ZXN0cy5jOgorCSogbGlib3AvdGVzdHMvcGFyc2VfZXZlbnRfdGVzdHMuYzoKKwkqIGxpYm9wdCsrL3BvcHRfb3B0aW9ucy5jcHA6CisJKiBsaWJwcC9hcnJhbmdlX3Byb2ZpbGVzLmNwcDoKKwkqIGxpYnBwL2NhbGxncmFwaF9jb250YWluZXIuY3BwOgorCSogbGlicHAvZmlsZW5hbWVfc3BlYy5jcHA6CisJKiBsaWJwcC9pbWFnZV9lcnJvcnMuY3BwOgorCSogbGlicHAvbmFtZV9zdG9yYWdlLmNwcDoKKwkqIGxpYnBwL3Byb2ZpbGVfY29udGFpbmVyLmNwcDoKKwkqIGxpYnBwL3Byb2ZpbGVfc3BlYy5jcHA6CisJKiBsaWJyZWdleC9vcF9yZWdleC5jcHA6CisJKiBsaWJyZWdleC90ZXN0cy9yZWdleF90ZXN0LmNwcDoKKwkqIGxpYnV0aWwrKy9zdHJpbmdfbWFuaXAuY3BwOgorCSogcHAvb3Bhbm5vdGF0ZS5jcHA6CisJKiBwcC9vcGdwcm9mX29wdGlvbnMuY3BwOgorCSogcHAvb3ByZXBvcnQuY3BwOgorCSogcHAvb3ByZXBvcnRfb3B0aW9ucy5jcHA6CisJKiB1dGlscy9vcGhlbHAuYzogY29kaW5nIHN0eWxlCisKKzIwMDUtMDgtMDYgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGRvYy9vcHJvZmlsZS54bWw6IG1vcmUgZG9jdW1lbnRhdGlvbiBhYm91dCBhbm5vdGF0ZWQgc291cmNlIGFuZAorCSAgaW5saW5lZCBmdW5jdGlvbnMuCisJKiBsaWJwcC9wcm9maWxlX2NvbnRhaW5lci5jcHA6CisJKiBsaWJwcC9wcm9maWxlX2NvbnRhaW5lci5oOgorCSogbGlicHAvc3ltYm9sX2NvbnRhaW5lci5jcHA6CisJKiBsaWJwcC9zeW1ib2xfY29udGFpbmVyLmg6IG5ldyBwdWJsaWMgaW50ZXJmYWNlIHRvIHNlbGVjdCBhbGwgc3ltYm9scworCSAgZGVmaW5lZCBpbiBhIGdpdmVuIHNvdXJjZSBmaWxlLgorCSogcHAvb3Bhbm5vdGF0ZS5jcHA6IHdoZW4gbm8gc291cmNlIGZpbGUgaXMgYXZhaWxhYmxlIHdlIGNhbiBhdCBsZWFzdAorCSAgb3V0cHV0IGFsbCBzeW1ib2xzIG5hbWUvc2FtcGxlcyBjb3VudCBiZWxvbmdpbmcgdG8gdGhpcyBzb3VyY2UuCisKKzIwMDUtMDgtMDYgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGxpYnBwL3Byb2ZpbGVfY29udGFpbmVyLmNwcDoKKwkqIGxpYnBwL3Byb2ZpbGVfY29udGFpbmVyLmg6CisJKiBsaWJwcC9zeW1ib2xfY29udGFpbmVyLmNwcDoKKwkqIGxpYnBwL3N5bWJvbF9jb250YWluZXIuaDogZmluZCBzeW1ib2wgYnkgc291cmNlIGZpbGVuYW1lLCBsaW5lbnIgOgorCSAgY2hhbmdlIHB1YmxpYyBpbnRlcmZhY2UgdG8gcmV0dXJuIG11bHRpcGxlIHN5bWJvbHMKKwkqIHBwL29wYW5ub3RhdGUuY3BwOiBGaXggIzEyNTI3NTQKKworMjAwNS0wOC0wNCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogZG9jL29waW1wb3J0LjEuaW46CisJKiBkb2Mvb3Byb2ZpbGUueG1sOiBpbXByb3ZlIGRvY3VtZW50YXRpb24gYWJvdXQgb3BpbXBvcnQKKworMjAwNS0wOC0wNCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogZ3VpL3VpL29wcm9mX3N0YXJ0LmJhc2UudWk6IGhhbmRsZSB1aSBldmVudHMgaGVscCBzdHJpbmcgd2hlbiB1c2luZworCSAga2V5Ym9hcmQgdG8gbmF2aWdhdGUgdGhyb3VnaCBldmVudCBsaXN0CisKKzIwMDUtMDgtMDQgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGxpYmFiaS9NYWtlZmlsZS5hbToKKwkqIGxpYmFiaS9hYmkuY3BwOgorCSogbGliYWJpL2FiaS5oOgorCSogbGliYWJpL29wX2FiaS5oOgorCSogbGliYWJpL3Rlc3RzL01ha2VmaWxlLmFtOgorCSogbGliYWJpL29wX2FiaS5jcHA6IHJlbW92ZWQKKwkqIGxpYmFiaS9vcF9hYmkuYzogbmV3IGZpbGUsIGFiaSBmaWxlIHdyaXRpbmcgaW4gcGxhaW4gQworCisJKiBjb25maWd1cmUuaW46CisJKiBkYWVtb24vTWFrZWZpbGUuYW06CisJKiBkYWVtb24vb3Byb2ZpbGVkLmM6CisJKiBkYWVtb24vbGlibGVnYWN5L01ha2VmaWxlLmFtOgorCSogZG9jL01ha2VmaWxlLmFtOgorCSogZG9jL29wcm9maWxlLnhtbDogYnVpbGQgdW5jb25kaXRpb25uYWx5IGxpYmFiaQorCisJKiBkb2Mvb3BpbXBvcnQuMS5pbjogbmV3IGZpbGUsIG1hbiBwYWdlIGZvciBvcGltcG9ydCwgbmVlZCBzb21lCisJICB0d2Vha2luZyBwcm9iYWJseQorCisyMDA1LTA4LTAzICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBndWkvb3Byb2Zfc3RhcnQuY3BwOgorCSogZ3VpL29wcm9mX3N0YXJ0Lmg6CisJKiBndWkvb3Byb2Zfc3RhcnRfY29uZmlnLmNwcDoKKwkqIGd1aS9vcHJvZl9zdGFydF9jb25maWcuaDoKKwkqIGd1aS91aS9vcHJvZl9zdGFydC5iYXNlLnVpOiBhZGQgYSBidXR0b24gdG8gcmVzZXQgdGhlIHByb2ZpbGluZworCSAgc2Vzc2lvbiBhbmQgYW4gZWRpdCBmaWVsZCB0byBzZXR1cCB0aGUgY2FsbGdyYXBoIGRlcHRoCisKKzIwMDUtMDgtMDMgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGd1aS9vcHJvZl9zdGFydF91dGlsLmg6CisJKiBndWkvb3Byb2Zfc3RhcnRfdXRpbC5jcHA6CisJKiBndWkvb3Byb2Zfc3RhcnQuY3BwOiBoYXJkY29kZSBjb25maWcgZGlyZWN0b3J5IHRvIC9yb290LAorCSAgcmVuYW1lIGdldF91c2VyX2ZpbGVuYW1lKCkgdG8gZ2V0X2NvbmZpZ19maWxlbmFtZSgpCisKKzIwMDUtMDgtMDMgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGd1aS9vcHJvZl9zdGFydF91dGlsLmNwcDogZml4IGRldGVjdGlvbiBvZiBzdG9wcGVkIGRhZW1vbi4gRml4IGEKKwkgIG1pc2NvdW50ZWQgaW50ZXJydXB0IG5yIGFmdGVyIGEgc3RhcnQvc3RvcC9zdGFydAorCisyMDA1LTA4LTAzICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBkb2Mvb3Byb2ZpbGUueG1sOiBpbXByb3ZlIGRvY3VtZW50YXRpb24gYWJvdXQgUlRDIG1vZGUuCisKKzIwMDUtMDgtMDMgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGd1aS9vcHJvZl9zdGFydC5jcHA6IGZpeCBldmVudHMgcGFyc2luZyBhY2NvcmRpbmcgdG8gdGhlIHdheQorCSAgd2Ugc3RvcmUgdGhlbSBpbiBzZXR1cGZpbGUgY2hhbmdlZCBieSB0aGUgbGFzdCBwYXRjaC4KKworMjAwNS0wOC0wMiAgUmljaGFyZCBQdXJkaWUgIDxycHVyZGllQG9wZW5lZGhhbmQuY29tPgorCisJKiBIQUNLSU5HOiBBZGQgbm90ZSBhYm91dCBiYXNoaXNtcyBiZWluZyBiYWQKKwkqIGRvYy9vcHJvZmlsZS54bWw6IFJlbW92ZSBiYXNoIGRlcGVuZGVuY3kKKwkqIHV0aWxzL29wY29udHJvbDogcmVtb3ZlIGJhc2hpc21zIGZyb20gdGhlIHNjcmlwdAorCisyMDA1LTA4LTAyICBSaWNoYXJkIFB1cmRpZSAgPHJwdXJkaWVAb3BlbmVkaGFuZC5jb20+CisKKwkqIHV0aWxzL29wY29udHJvbDogcmVtb3ZlIHNvbWUgYmFzaGlzbSwgbm90IHlldCBlbm91Z2ggdG8gcmVtb3ZlCisJICBiYXNoIGRlcGVuZGVuY3kKKworMjAwNS0wNy0yMSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBjb25maWd1cmUuaW46IGJ1bXAgdG8gMC45LjJjdnMKKworMjAwNS0wNy0xOCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBsaWJ1dGlsKysvdGVzdHMvTWFrZWZpbGUuYW06IGNhbm9uaWNhbGl6ZQorCSAgU1JDRElSIHRvIGZpeCBtYWtlIGNoZWNrCisKKzIwMDUtMDctMTggIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogY29uZmlndXJlLmluOiBidW1wIHRvIDAuOS4xCisKKzIwMDUtMDctMTEgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogbW9kdWxlL29wcm9maWxlLmM6IGZpeCBmb3IgR0NDIDMuNCwgc3BvdHRlZCBieQorCSAgSmFzb24gTHVueiA8bHVuekBmYWxvb2xleS5vcmc+CisKKzIwMDUtMDEtMDYgIFJhbGYgQmFlY2hsZSAgPHJhbGZAbGludXgtbWlwcy5vcmc+CisKKwkqIGV2ZW50cy9NYWtlZmlsZS5hbToKKwkqIGV2ZW50cy9taXBzLzI0Sy9ldmVudHM6CisJKiBldmVudHMvbWlwcy8yNEsvdW5pdF9tYXNrczoKKwkqIGxpYm9wL29wX2V2ZW50cy5jOgorCSogbGlib3Avb3BfY3B1X3R5cGUuaDoKKwkqIGxpYm9wL29wX2NwdV90eXBlLmM6CisJKiB1dGlscy9vcGhlbHAuYzogQWRkIE1JUFMgMjRLIHN1cHBvcnQKKworMjAwNS0wNi0xNiAgUmljaGFyZCBQdXJkaWUgIDxycHVyZGllQG8taGFuZC5jb20+CisKKwkqIHV0aWxzL29wY29udHJvbDogZml4IEFSTSBrZXJuZWxzIGFnYWluIGFmdGVyIDIwMDUtMDUtMDQKKwkgIGNoYW5nZSB0byBvcF9iZmQuY3BwIGJyb2tlIGl0IGFnYWluLiBPbmx5IGxvb2sgZm9yIC50ZXh0CisJICBzZWN0aW9uIGZvciBvdXIga2VybmVsIHJhbmdlLgorCisyMDA1LTA2LTEzICBSaWNoYXJkIFB1cmRpZSAgPHJwdXJkaWVAby1oYW5kLmNvbT4KKworCSogbGlicHAvY2FsbGdyYXBoX2NvbnRhaW5lci5jcHA6CisJKiBsaWJwcC9wcm9maWxlLmNwcDogaWdub3JlIGFueSBzeW1ib2xzIGJlZm9yZSAudGV4dAorCSAgZm9yIHN0YXJ0X29mZnNldCBwcm9maWxlcworCisyMDA1LTA2LTAyICBKYXNvbiBMdW56ICA8bHVuekBmYWxvb2xleS5vcmc+CisKKwkqIGxpYnBwL2RpZmZfY29udGFpbmVyLmNwcDoKKwkqIGxpYnBwL2Zvcm1hdF9vdXRwdXQuY3BwOgorCSogbGlidXRpbCsrL2JmZF9zdXBwb3J0LmNwcDoKKwkqIGxpYnV0aWwrKy9vcF9iZmQuY3BwOiBmaXggY29tcGlsYXRpb24gb24gR0NDIDIuOTUueCwKKwkgIG9sZGVyIGdsaWJjCisKKzIwMDUtMDYtMDEgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIHBwL29wYW5ub3RhdGVfb3B0aW9ucy5jcHA6IGVycm9yIG91dCBpZiAtLWFzc2VtYmx5IGFuZCAtLW91dHB1dC1kaXIKKwkgIGFyZSB1c2VkIHRvZ2V0aGVyCisJKiBkb2Mvb3Bhbm5vdGF0ZS4xLmluOgorCSogZG9jL29wcm9maWxlLnhtbDogdXBkYXRlIGRvY3VjbWVudGF0aW9uIGFjY29yZGluZy4KKworMjAwNS0wNS0zMSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBjb25maWd1cmUuaW46IGJ1bXAgdG8gMC45LjFjdnMKKworMjAwNS0wNS0yNyAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBsaWJwcC9kaWZmX2NvbnRhaW5lci5jcHA6IGNvbnZlcnQgdGhlIGRpZmZzIGludG8KKwkgIGFuIGFjdHVhbCBwZXJjZW50YWdlIQorCisJKiBjb25maWd1cmUuaW46IGJ1bXAgdG8gMC45CisKKzIwMDUtMDUtMjYgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogZGFlbW9uL29wZF9jb29raWUuYzoKKwkqIGRhZW1vbi9vcGRfc2ZpbGUuYzoKKwkqIGRhZW1vbi9vcGRfdHJhbnMuYzogZml4ZXMgZm9yIGltYWdlIGZpbHRlcmluZworCisyMDA1LTA1LTA5ICBXaWxsIENvaGVuICA8d2NvaGVuQHJlZGhhdC5jb20+CisKKwkqIGRhZW1vbi9vcGRfc2ZpbGUuYzogRml4IHZhcmlhYmxlIGRlY2xhcmF0aW9uIHRvIGNvbXBpbGUgb24gZ2NjIDMuNC4KKwkKKzIwMDUtMDUtMDQgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIHBwL2NvbW1vbl9vcHRpb24uY3BwOiBzcGxpdCBhcmd1bWVudCAie30iIGluIHR3byBzZXBhcmF0ZSBhcmd1bWVudAorCisyMDA1LTA1LTA0ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGRvYy9vcHJvZmlsZS54bWw6IGZpeCB0eXBvcworCisyMDA1LTA1LTA0ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBsaWJ1dGlsKysvY3ZlcmIuY3BwOgorCSogbGlidXRpbCsrL2N2ZXJiLmg6IGZpeCBjb21tZW50LCByZW1vdmUgdW5lY2Vzc2FyeSBmcmllbmQgZGVjbGFyYXRpb24uCisKKzIwMDUtMDUtMDQgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogZGFlbW9uL2xpYmxlZ2FjeS9vcGRfa2VybmVsLmM6IGZpeCBwcmV2aW91cyB3b3JrYXJvdW5kCisJICBzbyBpdCBvbmx5IHRyaWdnZXJzIG9uIHg4NgorCisyMDA1LTA1LTA0ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGxpYnV0aWwrKy9vcF9iZmQuaDoKKwkqIGxpYnV0aWwrKy9vcF9iZmQuY3BwOiBkb24ndCBhc3N1bWUgLnRleHQgaXMgdGhlIGZpcnN0IFNFQ19DT0RFCisJICBzZWN0aW9uLiBLZWVwIGEgbWFwIG9mIHNlY3Rpb24gZmlsZSBvZmZzZXRzIHRvIGZpeCB1cCBkYmZkCisJICBzeW1ib2xzLiBSZW1vdmUgYnJva2VuIHNhbml0eSBjaGVja3MuCisKKzIwMDUtMDUtMDIgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogZG9jL29wcm9maWxlLnhtbDogc21hbGwgY2hhbmdlCisKKzIwMDUtMDUtMDIgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogZGFlbW9uL01ha2VmaWxlLmFtOgorCSogZGFlbW9uL29wZF9hbm9uLmg6CisJKiBkYWVtb24vb3BkX2Fub24uYzoKKwkqIGRhZW1vbi9pbml0LmM6CisJKiBkYWVtb24vb3BkX2Nvb2tpZS5jOgorCSogZGFlbW9uL29wZF9ldmVudHMuaDoKKwkqIGRhZW1vbi9vcGRfZXZlbnRzLmM6CisJKiBkYWVtb24vb3BkX21hbmdsaW5nLmM6CisJKiBkYWVtb24vb3BkX3NmaWxlLmg6CisJKiBkYWVtb24vb3BkX3NmaWxlLmM6CisJKiBkYWVtb24vb3BkX3RyYW5zLmg6CisJKiBkYWVtb24vb3BkX3RyYW5zLmM6CisJKiBkYWVtb24vbGlibGVnYWN5L29wZF9zYW1wbGVfZmlsZXMuYzoKKwkqIGRvYy9vcHJvZmlsZS54bWw6CisJKiBsaWJhYmkvYWJpLmNwcDoKKwkqIGxpYmFiaS9vcGltcG9ydC5jcHA6CisJKiBsaWJhYmkvdGVzdHMvYWJpX3Rlc3QuY3BwOgorCSogbGlib3Avb3BfbWFuZ2xlLmg6CisJKiBsaWJvcC9vcF9tYW5nbGUuYzoKKwkqIGxpYm9wL29wX3NhbXBsZV9maWxlLmg6CisJKiBsaWJwcC9jYWxsZ3JhcGhfY29udGFpbmVyLmNwcDoKKwkqIGxpYnBwL2ltYWdlX2Vycm9ycy5jcHA6CisJKiBsaWJwcC9vcF9oZWFkZXIuY3BwOgorCSogbGlicHAvcGFyc2VfZmlsZW5hbWUuY3BwOgorCSogbGlicHAvcG9wdWxhdGUuY3BwOgorCSogbGlicHAvcHJvZmlsZS5oOgorCSogbGlicHAvcHJvZmlsZS5jcHA6CisJKiBsaWJwcC9wcm9maWxlX3NwZWMuY3BwOgorCSogbGlidXRpbCsrL29wX2JmZC5oOgorCSogbGlidXRpbCsrL29wX2JmZC5jcHA6CisJKiBwcC9vcGFubm90YXRlLmNwcDoKKwkqIHBwL29wZ3Byb2YuY3BwOiBhZGQgYmFzaWMgYW5vbiBtYXBwaW5nIHN1cHBvcnQKKworMjAwNS0wNC0yOCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiB1dGlscy9vcGNvbnRyb2w6CisJKiBkb2Mvb3Bjb250cm9sLjEuaW46CisJKiBkb2Mvb3Byb2ZpbGUueG1sOiBhZGQgb3Bjb250cm9sIC0tc3RhdHVzCisKKzIwMDUtMDQtMjggIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGRhZW1vbi9vcGRfc2ZpbGUuYzogY2xlYXIgb25seSAyNTYgZW50cnkgaW4gdGhlIHNmaWxlIGxydSBsaXN0CisKKzIwMDUtMDQtMjggIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogbGliYWJpL2FiaS5jcHA6CisJKiBsaWJhYmkvb3BfaW1wb3J0LmNwcDogYWRkIGNnX3RvX2lzX2tlcm5lbCB0byBhYmkKKworCSogY29uZmlndXJlLmluOgorCSogbGliYWJpL3Rlc3RzL01ha2VmaWxlLmFtOgorCSogbGliYWJpL3Rlc3RzL2FiaV90ZXN0LmNwcDogbW92ZSB0ZXN0IHRvIHN1YmRpcgorCisyMDA1LTA0LTI4ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBtb2R1bGUvaWE2NC9vcF9wbXUuYzogY29tcGlsZSBmaXgsIHBmbV9zeXN0X2luZm8gaGFzIGJlZW4gYWRkZWQKKwkgIGJldHdlZW4gMi40LjIwIGFuZCAyLjQuMjEKKworMjAwNS0wNC0yNyAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogbGlidXRpbC9vcF9maWxlLmg6IG9wX2ZpbGVfcmVhZGFibGUoKSBhY2NlcHQgb25seSByZWd1bGFyIGZpbGUKKwkqIGxpYnV0aWwvb3BfZmlsZS5jOgorCSogbGlidXRpbCsrL3Rlc3RzL2ZpbGVfbWFuaXBfdGVzdHMuY3BwOgorCisyMDA1LTA0LTI3ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGRhZW1vbi9vcGRfc2ZpbGUuaDoKKwkqIGRhZW1vbi9vcGRfc2ZpbGUuYzogcmV3cml0ZS4gRml4IC0tbm8tdm1saW51eCB0YWtpbmcgdXAKKwkgIENQVSB3aGVuIHVzaW5nIGNhbGwgZ3JhcGggcHJvZmlsaW5nCisKKzIwMDUtMDQtMjcgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogZGFlbW9uL29wcm9maWxlZC5oOiByZW1vdmUgZGVhZCBwcm90b3R5cGUKKworMjAwNS0wNC0yNSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogZGFlbW9uL29wZF9tYW5nbGluZy5jOiBwcm90ZWN0IGxhc3QgYWdhaW5zdCBzZmlsZSBscnUgZGVsZXRpb24KKwkqIGRhZW1vbi9vcGRfc2ZpbGUuYzogYWxsb3cgbnVsbCBzZmlsZSB0byBzZmlsZV9nZXQoKSwgc2ZpbGVfcHV0KCkKKworMjAwNS0wNC0yNCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBkYWVtb24vb3BkX2Nvb2tpZS5oOgorCSogZGFlbW9uL29wZF9jb29raWUuYzoKKwkqIGRhZW1vbi9vcGRfdHJhbnMuYzoKKwkqIGRhZW1vbi9vcGRfc2ZpbGUuYzoKKwkqIGRhZW1vbi9vcGRfc3RhdHMuaDoKKwkqIGRhZW1vbi9vcGRfc3RhdHMuYzogaGFuZGxlIE5PX0NPT0tJRSAoZHJvcCBvbiB0aGUgZmxvb3IpCisKKwkqIG00L3F0Lm00OiBhbGxvdyBnY2MgNC4wIGNvbXBpbGUgd2l0aCBRdCBoZWFkZXJzCisJICBieSB1c2luZyAtaXN5c3RlbQorCisyMDA1LTA0LTIzICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGNvbmZpZ3VyZS5pbjogYWRkIC0td2l0aC1nY2MsIC0td2l0aC1iaW51dGlscyAoZm9yCisJICBkZXZlbG9wbWVudCB1c2Ugb25seSwgdW5kb2N1bWVudGVkKQorCisyMDA1LTA0LTIyICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBsaWJwcC9sb2NhdGVfaW1hZ2VzLmg6IGFkZCBhIHZpcnR1YWwgZHRvciB0byBleHRyYV9pbWFnZXM6Om1hdGNoZXIKKworMjAwNS0wNC0yMiAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBkb2MvaW50ZXJuYWxzLnhtbDogc29tZSBwYXJhZ3JhcGhzIG9uIGNhbGwgZ3JhcGhzCisKKwkqIGxpYm9wL29wX2V2ZW50cy5oOgorCSogbGlib3Avb3BfZXZlbnRzLmM6CisJKiBsaWJ1dGlsL29wX2RldmljZWlvLmg6CisJKiBsaWJ1dGlsL29wX2RldmljZWlvLmM6CisJKiBsaWJ1dGlsL29wX2ZpbGVpby5oOgorCSogbGlidXRpbC9vcF9maWxlaW8uYzogcmVtb3ZlIGRlYWQgY29kZQorCisJKiBsaWJ1dGlsL29wX2xvY2tfZmlsZS5oOgorCSogbGlidXRpbC9vcF9sb2NrX2ZpbGUuYzogbWFrZSBhIGZ1bmN0aW9uIHN0YXRpYworCisJKiBsaWJ1dGlsKysvTWFrZWZpbGUuYW06CisJKiBsaWJ1dGlsKysvb3BfYmZkLmg6CisJKiBsaWJ1dGlsKysvb3BfYmZkLmNwcDoKKwkqIGxpYnV0aWwrKy9iZmRfc3VwcG9ydC5oOgorCSogbGlidXRpbCsrL2JmZF9zdXBwb3J0LmNwcDogbW92ZSBsb3RzIG9mIEJGRCBndW5rIGludG8KKwkgIGEgc2VwYXJhdGUgZmlsZS4gRml4IHN5bnRoIHN5bWJvbHMgc3VwcG9ydCwgd2l0aCBsb3RzIG9mCisJICB0ZXN0aW5nIGJ5IE1heW5hcmQuCisKKwkqIGxpYnV0aWwrKy9jb21tYV9saXN0Lmg6IHJlbW92ZSB1bnVzZWQgc2V0X3AKKworCSogcHAvb3Bhbm5vdGF0ZS5jcHA6IGNvbXBsYWluIGxlc3MgdmVyYm9zZWx5IGlmIHRoZSBpbnB1dCBmaWxlCisJICBjb3VsZG4ndCBiZSBmb3VuZAorCisyMDA1LTA0LTE0ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGxpYnV0aWwrKy9ncm93YWJsZV92ZWN0b3IuaDoKKwkqIGxpYnBwL2RpZmZfY29udGFpbmVyLmNwcDogZml4IGZpbGwoKQorCisJKiBwcC9vcHJlcG9ydC5jcHA6IGZpeCBtdWx0aXBsZSBhcHBzIGZvciBkaWZmIG91dHB1dAorCisyMDA1LTA0LTE0ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGRhZW1vbi9vcGRfaW50ZXJmYWNlLmg6CisJKiBkYWVtb24vb3BkX3RyYW5zLmM6IHJlbW92ZSBsZWdhY3kgVFJBQ0VfRU5ECisKKwkqIGRhZW1vbi9saWJsZWdhY3kvb3BkX2tlcm5lbC5jOgorCSogZGFlbW9uL2xpYmxlZ2FjeS9vcGRfcHJvYy5jOiBhdm9pZCBhdHRyaWJ1dGluZyAibm8gbWFwcGluZyIKKwkgIHNhbXBsZXMgdG8gdm1saW51eCB3aGVuIHVzaW5nIC0tbm8tdm1saW51eCB2aWEgYSBzaWNrIGhhY2sKKworMjAwNS0wNC0xMyAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBsaWJ1dGlsKysvZ3Jvd2FibGVfdmVjdG9yLmg6IGFkZCBmaWxsKCkKKworCSogbGlidXRpbCsrL2RpZmZfY29udGFpbmVyLmNwcDogdXNlIGl0CisKKwkqIGxpYnBwL3N5bWJvbF9zb3J0LmNwcDogY29kZSBjbGVhbiB1cAorCisyMDA1LTA0LTEzICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGxpYnBwL2RpZmZfY29udGFpbmVyLmg6CisJKiBsaWJwcC9kaWZmX2NvbnRhaW5lci5jcHA6IHN5bXMgZG9lc24ndCBuZWVkIHRvIGJlIGEgbWVtYmVyCisKKzIwMDUtMDQtMTMgIE5hdGhhbiBUYWxsZW50ICA8ZXJheHhvbkBjcy5yaWNlLmVkdT4KKworCSogdXRpbHMvb3Bjb250cm9sOiBmaXggdW5xdW90ZWQgdmFyaWFibGUgcmVmZXJlbmNlcyBpbiAndGVzdCcKKyAJICBleHByZXNzaW9ucworCisyMDA1LTA0LTEzICBNYXluYXJkIEpvaG5zb24gIDxtYXluYXJkakB1cy5pYm0uY29tPgorCisJKiBsaWJ1dGlsKysvb3BfYmZkLmNwcDogc2tpcCBudWxsLW5hbWUgc2VjdGlvbiBzeW1ib2xzCisKKzIwMDUtMDQtMTIgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGxpYnV0aWwrKy9zdHJpbmdfbWFuaXAuY3BwOiBmaXggZG91YmxlIGZvcm1hdGluZyB3aGVuIHZhbHVlIGFyZQorCSAgbmVnYXRpdmUKKworMjAwNS0wNC0xMiAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBsaWJwcC9hcnJhbmdlX3Byb2ZpbGVzLmg6CisJKiBsaWJwcC9hcnJhbmdlX3Byb2ZpbGVzLmNwcDoKKwkqIHBwL29wcmVwb3J0X29wdGlvbnMuY3BwOgorCSogcHAvY29tbW9uX29wdGlvbi5jcHA6IHZlcmlmeSBkaWZmIHByb2ZpbGUgY2xhc3NlcyBtYXRjaAorCisyMDA1LTA0LTEyICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGRvYy9vcHJvZmlsZS54bWw6CisJKiBkb2Mvb3Byb2ZpbGUuMS5pbjogZG9jdW1lbnQgZGlmZiBwcm9maWxlcworCisyMDA1LTA0LTEyICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGxpYnBwL2RpZmZfY29udGFpbmVyLmNwcDogZml4IGR1cGxpY2F0ZSBzeW1zIGluIG91dHB1dAorCisJKiBwcC9vcHJlcG9ydC5jcHA6CisJKiBsaWJwcC9kaWZmX2NvbnRhaW5lci5oOgorCSogbGlicHAvZGlmZl9jb250YWluZXIuY3BwOiBpbXBsZW1lbnQgdGhyZXNob2xkaW5nIGV0Yy4KKworMjAwNS0wNC0xMiAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBsaWJwcC9NYWtlZmlsZS5hbToKKwkqIGxpYnBwL2NvdW50X2FycmF5LmNwcDoKKwkqIGxpYnBwL2NvdW50X2FycmF5Lmg6CisJKiBsaWJwcC9kaWZmX2NvbnRhaW5lci5jcHA6CisJKiBsaWJwcC9kaWZmX2NvbnRhaW5lci5oOgorCSogbGlicHAvZm9ybWF0X2ZsYWdzLmg6CisJKiBsaWJwcC9mb3JtYXRfb3V0cHV0LmNwcDoKKwkqIGxpYnBwL2Zvcm1hdF9vdXRwdXQuaDoKKwkqIGxpYnBwL3Byb2ZpbGVfc3BlYy5jcHA6CisJKiBsaWJwcC9wcm9maWxlX3NwZWMuaDoKKwkqIGxpYnBwL3N5bWJvbC5oOgorCSogbGlicHAvc3ltYm9sX2Z1bmN0b3JzLmNwcDoKKwkqIGxpYnBwL3N5bWJvbF9zb3J0LmNwcDoKKwkqIGxpYnBwL3N5bWJvbF9zb3J0Lmg6CisJKiBsaWJ1dGlsKysvTWFrZWZpbGUuYW06CisJKiBsaWJ1dGlsKysvZ3Jvd2FibGVfdmVjdG9yLmg6CisJKiBsaWJ1dGlsKysvc3RyaW5nX21hbmlwLmNwcDoKKwkqIGxpYnV0aWwrKy9zdHJpbmdfbWFuaXAuaDoKKwkqIHBwL2NvbW1vbl9vcHRpb24uY3BwOgorCSogcHAvY29tbW9uX29wdGlvbi5oOgorCSogcHAvb3Bhbm5vdGF0ZS5jcHA6CisJKiBwcC9vcGFubm90YXRlX29wdGlvbnMuY3BwOgorCSogcHAvb3Bhbm5vdGF0ZV9vcHRpb25zLmg6CisJKiBwcC9vcGFyY2hpdmUuY3BwOgorCSogcHAvb3BhcmNoaXZlX29wdGlvbnMuY3BwOgorCSogcHAvb3BhcmNoaXZlX29wdGlvbnMuaDoKKwkqIHBwL29wZGlmZi5jcHA6CisJKiBwcC9vcGRpZmZfb3B0aW9ucy5jcHA6CisJKiBwcC9vcGRpZmZfb3B0aW9ucy5oOgorCSogcHAvb3BncHJvZi5jcHA6CisJKiBwcC9vcGdwcm9mX29wdGlvbnMuY3BwOgorCSogcHAvb3BncHJvZl9vcHRpb25zLmg6CisJKiBwcC9vcHJlcG9ydC5jcHA6CisJKiBwcC9vcHJlcG9ydF9vcHRpb25zLmNwcDoKKwkqIHBwL29wcmVwb3J0X29wdGlvbnMuaDogaW1wbGVtZW50IGFuIGluaXRpYWwgdmVyc2lvbiBvZiBkaWZmCisJICBwcm9maWxpbmcKKworMjAwNS0wNC0xMSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBkb2Mvb3Byb2ZpbGUueG1sOgorCSogZG9jL29wcmVwb3J0LjEuaW46CisJKiBkb2Mvb3Bhbm5vdGF0ZS4xLmluOgorCSogcHAvb3ByZXBvcnRfb3B0aW9ucy5jcHA6CisJKiBwcC9vcGFubm90YXRlX29wdGlvbnMuY3BwOiBhZGQgLUQgYW5kIC0lCisKKzIwMDUtMDQtMTEgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogcHAvb3Bhbm5vdGF0ZS5jcHA6IGZpeCBvcGFubm90YXRlIG1hdGNoaW5nIHNldmVyYWwgYmluYXJpZXMKKworMjAwNS0wNC0wOSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogbGlidXRpbCsrL29wX2JmZC5jcHA6IGZpeCBhIHNlZ2ZhdWx0IGlmIGEgYmluYXJ5IGZpbGUgY2FuJ3QgYmUKKwkgIGFjY2Vzc2VkIChvcHJlcG9ydCAtZ2w7IG9wYW5ub3RhdGUpIHByb2JsZW0gYW5kIHNvbHV0aW9uIHBvaW50ZWQKKwkgIGJ5IE1heW5hcmQgUC4gSm9obnNvbiA8bWF5bmFyZGpAdXMuaWJtLmNvbT4uCisJKiBsaWJ1dGlsKysvb3BfYmZkLmg6IG9wX2JmZCBtZW1iZXIgZnVuY3Rpb24gbXVzdCBjaGVjayBmb3IgYSBOVUxMCisJICBpYmZkIGJlZm9yZSB1c2luZyBpdC4KKworMjAwNS0wNC0wNyAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBsaWJ1dGlsL3Rlc3RzL01ha2VmaWxlLmFtOgorCSogbGlidXRpbCsrL3Rlc3RzL01ha2VmaWxlLmFtOgorCSogbGliZGIvdGVzdHMvTWFrZWZpbGUuYW06CisJKiBsaWJvcC90ZXN0cy9NYWtlZmlsZS5hbTogZml4IHRlc3RzIGJ1aWxkCisKKzIwMDUtMDQtMDcgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogbTQvTWFrZWZpbGUuYW06CisJKiBtNC9iaW51dGlscy5tNDoKKwkqIGNvbmZpZ3VyZS5pbjogbW92ZSBiaW51dGlscyBzdHVmZiBpbnRvIGEgbWFjcm8KKworCSogZG9jL29wcm9maWxlLnhtbDogZml4ZXMgYW5kIGltcHJvdmVtZW50cworCisyMDA1LTA0LTA3ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGxpYnBwL2NhbGxncmFwaF9jb250YWluZXIuY3BwOiBob2lzdCBpbWFnZS9hcHAgbmFtZSBsb29rdXAKKwkgIG91dHNpZGUgb2YgdGhlIGxvb3AKKworMjAwNS0wNC0wNyAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBsaWJ1dGlsKysvb3BfYmZkLmNwcDogcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnRzIHdpdGggaGFuZGxpbmcKKwkgIHN5bWJvbHMKKworMjAwNS0wNC0wNiAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBsaWJwcC9wb3B1bGF0ZS5oOgorCSogbGlicHAvcG9wdWxhdGUuY3BwOgorCSogbGlicHAvY2FsbGdyYXBoX2NvbnRhaW5lci5jcHA6CisJKiBsaWJ1dGlsKysvY2FjaGVkX3ZhbHVlLmg6CisJKiBsaWJ1dGlsKysvb3BfYmZkLmg6CisJKiBsaWJ1dGlsKysvb3BfYmZkLmNwcDoKKwkqIHBwL29wYW5ub3RhdGUuY3BwOgorCSogcHAvb3ByZXBvcnQuY3BwOgorCSogbGlidXRpbCsrL3Rlc3RzL01ha2VmaWxlLmFtOgorCSogbGlidXRpbCsrL3Rlc3RzL2NhY2hlZF92YWx1ZV90ZXN0cy5jcHA6IHR3ZWFrIENSQyBidWZmZXIuCisJRG8gZGVsYXllZCBkZWJ1ZyBpbmZvIHNlYXJjaGluZyAobWFrZXMgbm8gYWN0dWFsIGRpZmZlcmVuY2UpLgorCisyMDA1LTA0LTA1ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGxpYnBwL2Zvcm1hdF9vdXRwdXQuY3BwOiBhZGQgc2VwYXJhdG9yIGF0IGZpcnN0IGZ1bmN0aW9uCisJICBmb3Igb3ByZXBvcnQgLWMKKworMjAwNS0wNC0wNSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBsaWJwcC9jYWxsZ3JhcGhfY29udGFpbmVyLmg6CisJKiBsaWJwcC9jYWxsZ3JhcGhfY29udGFpbmVyLmNwcDoKKwkqIHBwL29wcmVwb3J0LmNwcDoKKwkqIHBwL29wcmVwb3J0X29wdGlvbnMuY3BwOiBpbXBsZW1lbnQgLWkgLyAtZSBmb3IKKwkgIG9wcmVwb3J0IC1jCisKKzIwMDUtMDQtMDUgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogbGlicHAvZm9ybWF0X291dHB1dC5oOgorCSogbGlicHAvZm9ybWF0X291dHB1dC5jcHA6CisJKiBwcC9vcHJlcG9ydC5jcHA6CisJKiBwcC9vcHJlcG9ydF9vcHRpb25zLmNwcDogaW1wbGVtZW50IC0tZ2xvYmFsLXBlcmNlbnQKKwkgIGZvciBvcHJlcG9ydCAtYworCisyMDA1LTA0LTA0ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGNvbmZpZ3VyZS5pbjoKKwkqIGRvYy9NYWtlZmlsZS5hbToKKwkqIGRvYy9vcHJvZmlsZS54bWw6CisJKiBkb2Mvb3BzdGFjay4xLmluOgorCSogZG9jL29wcmVwb3J0LjEuaW46CisJKiBkb2Mvb3Byb2ZpbGUuMS5pbjoKKwkqIHBwLy5jdnNpZ25vcmU6CisJKiBwcC9NYWtlZmlsZS5hbToKKwkqIHBwL29wcmVwb3J0LmNwcDoKKwkqIHBwL29wcmVwb3J0X29wdGlvbnMuY3BwOgorCSogcHAvb3ByZXBvcnRfb3B0aW9ucy5oOgorCSogcHAvb3BzdGFjay5jcHA6CisJKiBwcC9vcHN0YWNrX29wdGlvbnMuY3BwOgorCSogcHAvb3BzdGFja19vcHRpb25zLmg6IHJlbW92ZSBvcHN0YWNrIGluIGZhdm91ciBvZiBvcHJlcG9ydCAtYworCisJKiBsaWJwcC9jYWxsZ3JhcGhfY29udGFpbmVyLmNwcDogZml4IGZvciBuZXcgY2FsbC1ncmFwaCBjb2RlCisKKwkqIGRvYy9vcHJvZmlsZS54bWw6CisJKiBkb2Mvb3BhcmNoaXZlLjEuaW46IGRvY3VtZW50IC14LCByZS1vcmdhbmlzZSBtYW51YWwKKworMjAwNS0wNC0wNCBNYXluYXJkIEpvaG5zb24gIDxtYXluYXJkakB1cy5pYm0uY29tPgorCisJKiBjb25maWd1cmUuaW46IGZ1cnRoZXIgY2hlY2sgZm9yIGJmZCBzeW50aGVzaXNlZAorCSAgc3ltYm9scyBzdXBwb3J0CisKKzIwMDUtMDQtMDQgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogbGlicHAvY2FsbGdyYXBoX2NvbnRhaW5lci5jcHA6CisJKiBsaWJwcC9jYWxsZ3JhcGhfY29udGFpbmVyLmg6CisJKiBsaWJwcC9mb3JtYXRfZmxhZ3MuaDoKKwkqIGxpYnBwL2Zvcm1hdF9vdXRwdXQuY3BwOgorCSogbGlicHAvZm9ybWF0X291dHB1dC5oOgorCSogbGlicHAvc3ltYm9sLmNwcDoKKwkqIGxpYnBwL3N5bWJvbC5oOgorCSogbGlicHAvc3ltYm9sX3NvcnQuY3BwOgorCSogbGlicHAvc3ltYm9sX3NvcnQuaDoKKwkqIGxpYnV0aWwrKy9vcF9iZmQuY3BwOgorCSogcHAvY29tbW9uX29wdGlvbi5jcHA6CisJKiBwcC9jb21tb25fb3B0aW9uLmg6CisJKiBwcC9vcHN0YWNrLmNwcDoKKwkqIHBwL29wc3RhY2tfb3B0aW9ucy5jcHA6CisJKiBwcC9vcHN0YWNrX29wdGlvbnMuaDogcmUtd2hhY2sgY2FsbC1ncmFwaCBjb2xsZWN0aW9uCisJICBhbmQgb3V0cHV0IGZvcm1hdAorCisyMDA1LTA0LTAzIE1heW5hcmQgSm9obnNvbiAgPG1heW5hcmRqQHVzLmlibS5jb20+CisKKwkqIGNvbmZpZ3VyZS5pbjoKKwkqIGxpYnV0aWwrKy9vcF9iZmQuaDoKKwkqIGxpYnV0aWwrKy9vcF9iZmQuY3BwOiBzeW50aGVzaXMgZG90dGVkIHN5bWJvbHMKKwkgIGlmIG5lY2Vzc2FyeQorCisyMDA1LTAzLTMxICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIEhBQ0tJTkc6CisJKiBUT0RPOgorCSogY29uZmlndXJlLmluOgorCSogZG9jL01ha2VmaWxlLmFtOgorCSogZG9jL29wX2hlbHAuMS5pbjoKKwkqIGRvYy9vcGhlbHAuMS5pbjoKKwkqIGRvYy9vcHJvZmlsZS54bWw6CisJKiBsaWJhYmkvLmN2c2lnbm9yZToKKwkqIGxpYmFiaS9NYWtlZmlsZS5hbToKKwkqIGxpYmFiaS9vcGltcG9ydC5jcHA6CisJKiB1dGlscy8uY3ZzaWdub3JlOgorCSogdXRpbHMvTWFrZWZpbGUuYW06CisJKiB1dGlscy9vcGNvbnRyb2w6CisJKiB1dGlscy9vcGhlbHAuYzogcmVuYW1lIG9wX2ltcG9ydC0+b3BpbXBvcnQsCisJICBvcF9oZWxwLT5vcGhlbHAuIEFsbG93IG5vcm1hbCB1c2VyIHRvIHVzZQorCSAgb3Bjb250cm9sIC0tbGlzdC1ldmVudHMKKworMjAwNS0wMy0zMSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBkb2MvaW50ZXJuYWxzLnhtbDogbW9yZSBpbnRlcm5hbHMgZG9jcworCisyMDA1LTAzLTI5ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGxpYnBwL2NhbGxncmFwaF9jb250YWluZXIuaDoKKwkqIGxpYnBwL2NhbGxncmFwaF9jb250YWluZXIuY3BwOgorCSogbGlicHAvZm9ybWF0X291dHB1dC5oOgorCSogbGlicHAvZm9ybWF0X291dHB1dC5jcHA6CisJKiBsaWJwcC9wcm9maWxlX2NvbnRhaW5lci5oOgorCSogbGlicHAvc3ltYm9sLmg6CisJKiBsaWJwcC9zeW1ib2xfc29ydC5oOgorCSogbGlicHAvc3ltYm9sX3NvcnQuY3BwOgorCSogbGlicHAvc3ltYm9sX2NvbnRhaW5lci5oOgorCSogbGlicHAvc3ltYm9sX2NvbnRhaW5lci5jcHA6CisJKiBwcC9vcHJlcG9ydF9vcHRpb25zLmg6IGhlYWRlciBmaWxlIGNsZWFudXAKKworMjAwNS0wMy0yNiAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBNYWtlZmlsZS5hbToKKwkqIGRvYy9vcHJvZmlsZS54bWw6CisJKiBtNC9jb25maWdtb2R1bGUubTQ6CisJKiBtb2R1bGUveDg2L01ha2VmaWxlLmluOgorCSogbW9kdWxlL3g4Ni9oYW1tZXJfZW50cnkuUzoKKwkqIG1vZHVsZS94ODYvaGFtbWVyX2lhMzJlbnRyeS5TOgorCSogbW9kdWxlL3g4Ni9oYW1tZXJfb3Bfc3lzY2FsbHMuYzoKKwkqIG1vZHVsZS94ODYvaGFtbWVyX29wcm9maWxlX25taS5TOgorCSogbW9kdWxlL3g4Ni9vcF9hcGljLmg6CisJKiBtb2R1bGUveDg2L29wX2FyY2guaDoKKwkqIG1vZHVsZS94ODYvb3Bfbm1pLmM6IHJlbW92ZSB4ODYtNjQgc3VwcG9ydCBmb3IgMi40CisJICBrZXJuZWxzLCBhcyBpdCdzIG5vbi1mdW5jdGlvbmFsCisKKzIwMDUtMDMtMjYgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogZGFlbW9uL29wcm9maWxlZC5jOiBob25vdXIgb3Byb2ZpbGVkIC12IGZpcnN0LCBjb21wbGFpbgorCWlmIC0tZXZlbnRzIG9wdGlvbiBpcyBtaXNzaW5nIGluc3RlYWQgb2YgY29yZSBkdW1waW5nCisKKwkqIGRvYy9vcHJvZmlsZWQueG1sOiBleHBsYWluIG9wcmVwb3J0IC1kIGJlaGF2aW91ciBmb3IKKwkgIG5vLXN5bWJvbCBiaW5hcmllcworCisyMDA1LTAzLTE0ICBNYXluYXJkIEpvaG5zb24gIDxtYXluYXJkakB1cy5pYm0uY29tPgorCisJKiB1dGlscy9vcF9oZWxwLmM6CisJKiBkb2Mvb3Byb2ZpbGUueG1sOiAKKwkgIFVwZGF0ZSBQUEM2NC1yZWxhdGVkIGRvY3VtZW50YXRpb24gdG8gaW5jbHVkZSBVUkwgbGlua3MgdG8KKwkgIElCTSBwdWJsaWNhdGlvbnMuCisKKzIwMDUtMDMtMjIgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogY29uZmlndXJlLmluOiBidW1wIHRvIDAuOWN2cworCisyMDA1LTAzLTE5ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBjb25maWd1cmUuaW46IGJ1bXAgdG8gMC44LjIKKworMjAwNS0wMy0xOCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogZXZlbnRzL2kzODYvcDQvZXZlbnRzOgorCSogZXZlbnRzL2kzODYvcDQvdW5pdF9tYXNrczoKKwkqIGV2ZW50cy9pMzg2L3A0LWh0L2V2ZW50czoKKwkqIGV2ZW50cy9pMzg2L3A0LWh0L3VuaXRfbWFza3M6IHJlbW92ZSBGUk9OVF9FTkRfRVZFTlQsIEVYRUNVVElPTl9FVkVOVAorCSAgYW5kIFJFUExBWV9FVkVOVC4KKworCSogbGlib3AvdGVzdHMvYWxsb2NfY291bnRlcl90ZXN0cy5jOiB1cGRhdGUgdGVzdCBhY2NvcmRpbmcgZXZlbnRzCisJICByZW1vdmFsCisKKzIwMDUtMDMtMTggIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIHV0aWxzL29wY29udHJvbDogcmV2ZXJ0IGxhc3QgcGF0Y2gsIGJhc2ggY2FuJ3QgZG8gaW50ZWdlcgorCSAgYXJpdGhtZXRpYyBvbiBoZXhhZGVjaW1hbC4KKworMjAwNS0wMi0yMSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiB1dGlscy9vcGNvbnRyb2w6IGZ1cnRoZXIgdmFsaWRhdGlvbiBvZiB0aGUga2VybmVsIHJhbmdlIHRvCisJICBwcmV2ZW50IGFuIHVucmVsb2NhdGVkIHZtbGludXggYmVpbmcgdXNlZAorCisyMDA1LTAyLTA3ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGV2ZW50cy9hcm0veHNjYWxlMS91bml0X21hc2tzOiBmaXggJ3plcm8nIHVuaXQgbWFzaworCisyMDA1LTAxLTI1ICBNYXluYXJkIEpvaG5zb24gPG1heW5hcmRqQHVzLmlibS5jb20+CisKKwkqIGRvYy9vcHJvZmlsZS54bWw6IEFkZCBQb3dlclBDIDY0LWJpdCBwcm9jZXNzb3Igc3VwcG9ydCBpbmZvcm1hdGlvbgorCisyMDA1LTAxLTI0ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBsaWJ1dGlsKysvb3BfYmZkLmNwcDogYWx3YXlzIGluaXRpYWxpemUgb3BfYmZkX3N5bWJvbDpzeW1iX2hpZGRlbgorCSBhbmQgc3ltYl93ZWFrLCBub3QgYSBidWcgZml4IGJ1dCBhIGNsZWFudXAuCisKKzIwMDUtMDEtMDQgIEFuZHkgRmxlbWluZyAgPGFmbGVtaW5nQGZyZWVzY2FsZS5jb20+CisKKwkqIGV2ZW50cy9NYWtlZmlsZS5hbToKKwkqIGV2ZW50cy9wcGMvZTUwMC9ldmVudHM6CisJKiBldmVudHMvcHBjL2U1MDAvdW5pdF9tYXNrczoKKwkqIGxpYm9wL29wX2V2ZW50cy5jOgorCSogbGlib3Avb3BfY3B1X3R5cGUuaDoKKwkqIGxpYm9wL29wX2NwdV90eXBlLmM6CisJKiB1dGlscy9vcF9oZWxwLmM6IEFkZCBQUEMgZTUwMCBzdXBwb3J0CisKKzIwMDUtMDEtMDIgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIHBwL29wYW5ub3RhdGUuY3BwOiBmaXggIzEwOTMxNjIgYnkgc2ltcGxpZnlpbmcgdGhlIGNvZGUsIHRoaXMgd2FzCisJICBsaWtlbHkgdG8gYmUgYSBjb21waWxlciBwcm9ibGVtIGJ1dCB0aGUgbmV3IGNvZGUgaXMgc2ltcGxlci4KZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L0NoYW5nZUxvZy0yMDA2IGIvb3Byb2ZpbGUtMC45LjcvQ2hhbmdlTG9nLTIwMDYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQ1MWJiMwotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L0NoYW5nZUxvZy0yMDA2CkBAIC0wLDAgKzEsMjk2IEBACisyMDA2LTEyLTE0ICBNYXluYXJkIEpvaG5zb24gPG1heW5hcmRqQHVzLmlibS5jb20+CisKKwkqIGRvYy9vcHJvZmlsZS54bWw6CisJKiBldmVudHMvTWFrZWZpbGUuYW06CisJKiBldmVudHMvcHBjNjQvY2VsbC1iZS9ldmVudHM6CisJKiBldmVudHMvcHBjNjQvY2VsbC1iZS91bml0X21hc2tzOgorCSogbGlib3Avb3BfY3B1X3R5cGUuYzoKKwkqIGxpYm9wL29wX2NwdV90eXBlLmg6CisJKiBsaWJvcC9vcF9ldmVudHMuYzoKKwkqIHV0aWxzL29wY29udHJvbDoKKwkqIHV0aWxzL29waGVscC5jIEFkZCBzdXBwb3J0IGZvciBDZWxsIEJyb2FkYmFuZCBFbmdpbmUKKworMjAwNi0xMi0xNCAgRGF2ZSBOb211cmEgPGRjbmx0Y0B1cy5pYm0uY29tPgorCisJKiBkYWVtb24vaW5pdC5jOiBtb3ZlIG9wZW5fb3BkX2ZpbGVzIGNhbGwgdG8gaW5pdGlhbGl6YXRpb24gcGhhc2UKKworMjAwNi0xMi0xMSAgTWF5bmFyZCBKb2huc29uIDxtYXluYXJkakB1cy5pYm0uY29tPgorCisJKiBtNC9rZXJuZWxvcHRpb24ubTQ6CisJKiBtNC9rZXJuZWx2ZXJzaW9uLm00OiBlbGltaW5hdGUvcmVwbGFjZSB1c2FnZSBvZiBvYnNvbGV0ZSBrZXJuZWwKKwkgIGhlYWRlciBsaW51eC9jb25maWcuaAorCisKKzIwMDYtMTItMDYgIERhbmllbCBKYWNvYm93aXR6ICA8ZGFuQGRlYmlhbi5vcmc+CisKKwkqIGxpYm9wdCsrL3BvcHRfb3B0aW9ucy5jcHA6IGNvbXBsZXRlIGZpeCBmb3Igc3RhdGljCisJICBpbml0aWFsaXNhdGlvbiBvcmRlcmluZyBidWcgb24gQVJNCisKKzIwMDYtMTEtMjQgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogZG9jL29wcm9maWxlLnhtbDoKKwkqIGRvYy9vcHJvZmlsZS4xLmluOiB3YXJuIGFib3V0IGJyYWNlcyBwYXJzaW5nIGluIGRpZmZlcmVudGlhbAorCSAgbW9kZS4KKworCSogZG9jL29wcmVwb3J0LjEuaW46CisJKiBkb2Mvb3BhcmNoaXZlLjEuaW46CisJKiBkb2Mvb3Bhbm5vdGF0ZS4xLmluOgorCSogZG9jL29wZ3Byb2YuMS5pbjogcG9pbnQgZXhwbGljaXRseSB0byBvcHJvZmlsZSgxKQorCisJKiBwcC9vcHJlcG9ydF9vcHRpb25zLmNwcDogLS14bWwgaXMgaW5jb21wYXRpYmxlIHdpdGgKKwkgIGRpZmZlcmVudGlhbCBwcm9maWxlcy4KKworMjAwNi0xMS0yMiAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogbGlib3Avb3BfYWxsb2NfY291bnRlci5jOiByZWFwcGx5IDIwMDYtOC0wMyAgSmVyZW1pYWggTG90dCBwYXRjaAorCSAgd2hpY2ggd2FzIGFjY2lkZW50YWxseSByZXZlcnRlZCwgYXMgYSBzaWRlZWZmZWN0IHRoaXMgcGF0Y2ggY2hhbmdlCisJICBjb3VudGVyIGFsbG9jYXRpb24gb3JkZXIuIEl0IGNhbid0IGh1cnQgc2luY2Ugb3VyIHN0b3JhZ2UgZG9uJ3QKKwkgIHRha2UgY2FyZSBhYm91dCBjb3VudGVyIG51bWJlci4KKwkqIGxpYm9wL3Rlc3RzL2FsbG9jX2NvdW50ZXJfdGVzdHMuYzogYWRkIGEgdGVzdCBjYXNlIGZvciB0aGlzIHBhdGNoLgorCSAgVGFrZSBjYXJlIGFib3V0IGNvdW50ZXIgYWxsb2NhdGlvbiBvcmRlciBjaGFuZ2UuCisKKzIwMDYtMTEtMTkgIE1heW5hcmQgSm9obnNvbiA8bWF5bmFyZGpAdXMuaWJtLmNvbT4KKworCSogZG9jL29wcm9maWxlLnhtbDogIERvY3VtZW50IHBsYXRmb3JtcyB3aGVyZSBjYWxsZ3JhcGggaXMgc3VwcG9ydGVkCisKKzIwMDYtMTEtMTcgIERhdmUgTm9tdXJhICA8ZGNubHRjQHVzLmlibS5jb20+CisKKwkqIGRvYy9NYWtlZmlsZS5hbToKKwkqIGRvYy9vcHJlcG9ydC4xLmluOgorCSogZG9jL29wcmVwb3J0LnhzZDoKKwkqIGRvYy9vcHJvZmlsZS54bWw6CisJKiBsaWJvcC9vcF9hbGxvY19jb3VudGVyLmM6CisJKiBsaWJwcC9NYWtlZmlsZS5hbToKKwkqIGxpYnBwL2FycmFuZ2VfcHJvZmlsZXMuY3BwOgorCSogbGlicHAvZm9ybWF0X291dHB1dC5jcHA6CisJKiBsaWJwcC9mb3JtYXRfb3V0cHV0Lmg6CisJKiBsaWJwcC9vcF9oZWFkZXIuY3BwOgorCSogbGlicHAvcHJvZmlsZV9jb250YWluZXIuY3BwOgorCSogbGlicHAvc3ltYm9sLmNwcDoKKwkqIGxpYnBwL3N5bWJvbC5oOgorCSogbGlicHAveG1sX3V0aWxzLmNwcDoKKwkqIGxpYnBwL3htbF91dGlscy5oOgorCSogbGlidXRpbCsrL01ha2VmaWxlLmFtOgorCSogbGlidXRpbCsrL2JmZF9zdXBwb3J0LmNwcDoKKwkqIGxpYnV0aWwrKy9jdmVyYi5jcHA6CisJKiBsaWJ1dGlsKysvY3ZlcmIuaDoKKwkqIGxpYnV0aWwrKy9vcF9iZmQuY3BwOgorCSogbGlidXRpbCsrL29wX2JmZC5oOgorCSogbGlidXRpbCsrL3htbF9vdXRwdXQuY3BwOgorCSogbGlidXRpbCsrL3htbF9vdXRwdXQuaDoKKwkqIHBwL2NvbW1vbl9vcHRpb24uY3BwOgorCSogcHAvY29tbW9uX29wdGlvbi5oOgorCSogcHAvb3BhcmNoaXZlX29wdGlvbnMuY3BwOgorCSogcHAvb3BncHJvZl9vcHRpb25zLmNwcDoKKwkqIHBwL29wcmVwb3J0LmNwcDoKKwkqIHBwL29wcmVwb3J0X29wdGlvbnMuY3BwOgorCSogcHAvb3ByZXBvcnRfb3B0aW9ucy5oOiBYTUwgb3V0cHV0IHN1cHBvcnQuCisKKzIwMDYtOC0wMyAgSmVyZW1pYWggTG90dCAgPGplcmVtaWFoLmxvdHRAdGltZXN5cy5jb20+CisKKwkqIGxpYm9wL29wX2FsbG9jX2NvdW50ZXIuYzogYWxsb2NhdGVfY291bnRlciguLi4pIHdhcyByZXR1cm5pbmcKKwkgIHByaW9yIHRvIGNvbnNpZGVyaW5nIGFsbCBwb3NzaWJsZSBhbGxvY2F0aW9uIHN0cmF0ZWdpZXMuCisKKzIwMDYtMTEtMTUgIEFkYW0gQm9yZGVsb24gIDxtZUBjcy5yaWNlLmVkdT4KKworCSogZG9jL2ludGVybmFscy54bWw6CisJKiBkb2Mvb3Bhbm5vdGF0ZS4xLmluOgorCSogZG9jL29wYXJjaGl2ZS4xLmluOgorCSogZG9jL29wY29udHJvbC4xLmluOgorCSogZG9jL29wZ3Byb2YuMS5pbjoKKwkqIGRvYy9vcHJlcG9ydC4xLmluOgorCSogZG9jL29wcm9maWxlLnhtbDogRG9jdW1lbnRlZCAtLXNlc3Npb24tZGlyIG9wdGlvbi4KKyAKKyAJKiBkYWVtb24vaW5pdC5jOgorCSogZGFlbW9uL2xpYmxlZ2FjeS9pbml0LmM6CisJKiBkYWVtb24vb3Byb2ZpbGVkLmM6CisJKiBsaWJvcC9NYWtlZmlsZS5hbToKKwkqIGxpYm9wL29wX2NvbmZpZy5jOgorCSogbGlib3Avb3BfY29uZmlnLmg6CisJKiBsaWJvcC9vcF9jb25maWdfMjQuaDoKKwkqIGxpYm9wL29wX21hbmdsZS5jOgorCSogbGlicHAvcHJvZmlsZV9zcGVjLmM6CisJKiBwcC9jb21tb25fb3B0aW9uLmNwcDoKKwkqIHV0aWxzL29wY29udHJvbDogQWRkZWQgLS1zZXNzaW9uLWRpciBvcHRpb24sIHRvIHBsYWNlIHNhbXBsZSBkYXRhYmFzZSBpbiBkaXIgaW5zdGVhZCBvZiBkZWZhdWx0IGxvY2F0aW9uICgvdmFyL2xpYi9vcHJvZmlsZSksIGFuZCBwcm9ncmFtIGNhbiBiZSBydW4gYXMgbm9ybWFsIHVzZXIuCisKKzIwMDYtMTEtMTUgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogZXZlbnRzL3g4Ni02NC9oYW1tZXIvZXZlbnRzOiBmaXggZXZlbnQgbmFtZXMgd2l0aCAnLycgaW4gdGhlbQorCSAgKGJ1ZyAxNTk3MDU0KQorCisJKiBsaWJvcC9vcF9ldmVudHMuYzogY2hlY2sgZm9yICcvJyBhbmQgZmFpbCBpZiBzbworCisyMDA2LTExLTA5ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBkb2Mvb3ByZXBvcnQuMS5pbjogCisJKiBkb2Mvb3Byb2ZpbGUueG1sOiAtLWxvbmctZmlsZW5hbWVzIDogLWYgaXMgdGhlIHNob3J0IG9wdCwgbm90IC1sCisKKzIwMDYtMTAtMTYgIFJpY2hhcmQgUHVyZGllIDxycHVyZGllQG9wZW5lZGhhbmQuY29tPgorCisJKiBsaWJ1dGlsKysvYmZkX3N1cHBvcnQuY3BwOiBJZ25vcmUgdW5pbnRlcmVzdGluZyBhcm0gbWFwcGluZyBzeW1ib2xzCisKKzIwMDYtMTAtMTYgIFJpY2hhcmQgUHVyZGllIDxycHVyZGllQG9wZW5lZGhhbmQuY29tPgorCisJKiB1dGlscy9vcGNvbnRyb2w6IFJlbW92ZSBhIGJhc2hpc20gaW4gdmFsaWRhdGVfc2VwYXJhdGVfYXJncygpCisKKzIwMDYtMTAtMTMgIE1heW5hcmQgSm9obnNvbiA8bWF5bmFyZGpAdXMuaWJtLmNvbT4KKworICAgICAgICAqIGRvYy9vcGNvbnRyb2wuMS5pbjogRG9jdW1lbnQgY2FsbGdyYXBoIHN1cHBvcnQgZm9yIFBvd2VyUEMKKworMjAwNi0wOS0yNSAgSm9uIENhbGxhbiAgPEpvbi5DYWxsYW5AYXJtLmNvbT4KKworCSogbGlib3B0KysvcG9wdF9vcHRpb25zLmNwcDogZml4IHN0YXRpYyBpbml0IG9yZGVyIHByb2JsZW0sIHNlZW4KKwkgIG9uIEFSTS4KKworMjAwNi0wOS0yMSAgRGVhbiBHYXVkZXQgIDxkZ2F1ZGV0QHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSogZXZlbnRzL2kzODYvY29yZV8yL2V2ZW50czogcmVuYW1lIHNvbWUgZXZlbnRzCisJKiBldmVudHMvaTM4Ni9jb3JlXzIvdW5pdF9tYXNrczogdmFyaW91cyBmaXhlcyBmb3IKKwkgIGRvdWJsZS1jb3VudGluZyBldmVudHMKKworMjAwNi0wOS0yMSAgTWFyayBBLiBHcmVlciAgPG1ncmVlckBtdmlzdGEuY29tPgorCisJKiBldmVudHMvcHBjLzc0NTAvZXZlbnRzOgorCSogZXZlbnRzL3BwYy83NDUwL3VuaXRfbWFza3M6CisJKiB1dGlscy9vcGhlbHAuYzogcHBjIDc0NXggZXZlbnQgaW1wcm92ZW1lbnRzLgorCisyMDA2LTA5LTE1ICBXaWxsIENvaGVuICA8d2NvaGVuQHJlZGhhdC5jb20+CisKKwkqIE1ha2VmaWxlLmFtOiBBZGQgQ2hhbmdlTG9nLTIwMDQgYW5kIENoYW5nZUxvZy0yMDA1IHRvIGRpc3Ryby4KKwkKKzIwMDYtMDktMTUgIFdpbGwgQ29oZW4gIDx3Y29oZW5AcmVkaGF0LmNvbT4KKworCSogY29uZmlndXJlLmluOiBCdW1wIHRvIDAuOS4zY3ZzLgorCisyMDA2LTA5LTE1ICBXaWxsIENvaGVuICA8d2NvaGVuQHJlZGhhdC5jb20+CisKKwkqIGNvbmZpZ3VyZS5pbjogQnVtcCB0byAwLjkuMi4KKworMjAwNi0wOS0xMSAgV2lsbCBDb2hlbiAgPHdjb2hlbkByZWRoYXQuY29tPgorCisJKiBjb25maWd1cmUuaW46IEJ1bXAgdG8gMC45LjIuMXJjMS4KKworMjAwNi0wOS0xMSAgV2lsbCBDb2hlbiAgPHdjb2hlbkByZWRoYXQuY29tPgorCisJKiBldmVudHMvaTM4Ni9jb3JlXzIvdW5pdF9tYXNrczoKKwkqIGV2ZW50cy9pMzg2L2NvcmVfMi9ldmVudHM6IENvcnJlY3QgbmFtZXMgYW5kIG1hc2tzLgorCQorMjAwNi0wOS0wNyAgQmVuamFtaW4gTGFIYWlzZSAgPGJjcmxAa3ZhY2sub3JnPgorCQorCSogZXZlbnRzL2kzODYvY29yZV8yL2V2ZW50czogQ29ycmVjdCBzb21lIGV2ZW50IG5hbWVzLgorCisyMDA2LTA5LTA1ICBXaWxsIENvaGVuICA8d2NvaGVuQHJlZGhhdC5jb20+CisKKwkqIGNvbmZpZ3VyZS5pbjogYnVtcCB0byAwLjkuMgorCisyMDA2LTA5LTA1ICBXaWxsIENvaGVuICA8d2NvaGVuQHJlZGhhdC5jb20+CisKKwkqIGxpYnBwL3N5bWJvbF9jb250YWluZXIuY3BwOiBFeHBsaWNpdCBjYXN0aW5nLgorCisyMDA2LTA4LTI3ICBSYXkgQnJ5YW50ICA8cmF5YnJ5QGFtZC5jb20+CisKKwkqIGV2ZW50cy94ODYtNjQvaGFtbWVyL2V2ZW50czoKKwkqIGV2ZW50cy94ODYtNjQvaGFtbWVyL3VuaXRfbWFza3M6CisJKiBsaWJvcC9vcF9ldmVudHMuaDogbWFrZSBuYW1lcyBtYXRjaCB0aGUgQktERyBuYW1lcyBmcm9tIEFNRAorCisyMDA2LTA4LTIyICBCZW5qYW1pbiBMYUhhaXNlICA8YmNybEBrdmFjay5vcmc+CisKKwkqIGV2ZW50cy9NYWtlZmlsZS5hbToKKwkqIGV2ZW50cy9pMzg2L2NvcmVfMi9ldmVudHM6CisJKiBldmVudHMvaTM4Ni9jb3JlXzIvdW5pdF9tYXNrczoKKwkqIGxpYm9wL29wX2NwdV90eXBlLmg6CisJKiBsaWJvcC9vcF9jcHVfdHlwZS5jOgorCSogbGlib3Avb3BfZXZlbnRzLmM6CisJKiB1dGlscy9vcGhlbHAuYzogc3VwcG9ydCBJbnRlbCBDb3JlIDIgZXZlbnRzCisKKzIwMDYtMDctMTUgIEx1Y2EgQmFyYmF0byAgPGx1X3plcm9AZ2VudG9vLm9yZz4KKworCSogZXZlbnRzL01ha2VmaWxlLmFtOgorCSogZXZlbnRzL3BwYy83NDUwL2V2ZW50czoKKwkqIGV2ZW50cy9wcGMvNzQ1MC91bml0X21hc2tzOgorCSogbGlib3Avb3BfY3B1X3R5cGUuaDoKKwkqIGxpYm9wL29wX2NwdV90eXBlLmM6CisJKiBsaWJvcC9vcF9ldmVudHMuYzoKKwkqIHV0aWxzL29waGVscC5jOiBzdXBwb3J0IFBvd2VyUEMgRzQgZXZlbnRzCisgCisyMDA2LTA2LTIxICBSYWxmIEJhZWNobGUgIDxyYWxmQGxpbnV4LW1pcHMub3JnPgorCisJKiBsaWJvcC9vcF9jcHVfdHlwZS5oOgorCSogdXRpbHMvb3BoZWxwLmM6CisJKiBsaWJvcC9vcF9jcHVfdHlwZS5jOgorCSogbGlib3Avb3BfZXZlbnRzLmM6CisJKiBldmVudHMvTWFrZWZpbGUuYW06CisJKiBldmVudHMvbWlwcy81SzoKKwkqIGV2ZW50cy9taXBzLzIwSzoKKwkqIGV2ZW50cy9taXBzLzI1SzoKKwkqIGV2ZW50cy9taXBzLzM0SzogYWRkIG5ldyBNSVBTIHN1cHBvcnQuCisKKzIwMDYtMDUtMTMgIEJlbmphbWluIExhSGFpc2UgIDxiY3JsQGt2YWNrLm9yZz4KKworCSogZXZlbnRzL01ha2VmaWxlLmFtOgorCSogZXZlbnRzL2kzODYvY29yZS9ldmVudHM6CisJKiBldmVudHMvaTM4Ni9jb3JlL3VuaXRfbWFza3M6CisJKiBsaWJvcC9vcF9jcHVfdHlwZS5oOgorCSogbGlib3Avb3BfY3B1X3R5cGUuYzoKKwkqIGxpYm9wL29wX2V2ZW50cy5jOgorCSogbW9kdWxlL3g4Ni9jcHVfdHlwZS5jOgorCSogdXRpbHMvb3BoZWxwLmM6IHN1cHBvcnQgSW50ZWwgQ29yZSBEdW8gZXZlbnRzCisKKzIwMDYtMDMtMDEgIEFuZHJlYXMgS3JlYmJlbCAgPGtyZWJiZWwxQGRlLmlibS5jb20+CisKKwkqIHV0aWxzL29wY29udHJvbDogKGRvX3NhdmVfc2V0dXApOiBTYXZlIEtFUk5FTF9SQU5HRSBhbmQgWEVOX1JBTkdFIAorCXZhbHVlcyBpbnRvIHNldHVwIGZpbGUuCisJKGRvX2xvYWRfc2V0dXApOiBQcmludCBLRVJORUxfUkFOR0UsIFhFTklNQUdFIGFuZCBYRU5fUkFOR0UgdmFsdWVzIGluCisJdmVyYm9zZSBtb2RlLgorCisyMDA2LTAzLTE5ICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGRhZW1vbi9vcGRfYW5vbi5jOiBidW1wIExSVSBzaXplIHRvIGF2b2lkIHNpZ25pZmljYW50IG1hcHMKKwkgIHBhcnNpbmcgb3ZlcmhlYWQuCisKKzIwMDYtMDMtMTkgIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKworCSogZGFlbW9uL29wZF9hbm9uLmM6CisJKiBkYWVtb24vb3BkX3NmaWxlLmg6CisJKiBkYWVtb24vb3BkX3NmaWxlLmM6IG1ha2Ugc3VyZSB3ZSBwcm90ZWN0IHRyYW5zLT5sYXN0CisJICBpZiBpdCdzIGFuIGFub24gc2YsIGFuZCB3ZSBuZWVkIHRvIGRvIGNsZWFudXAuIFNwZWVkCisJICBjbGVhbnVwIHNvbWV3aGF0LgorCisyMDA2LTAyLTE3ICBNYXluYXJkIEpvaG5zb24gPG1heW5hcmRqQHVzLmlibS5jb20+CisKKwkqIGRvYy9vcHJvZmlsZS54bWw6CisJKiBldmVudHMvcHBjNjQvcG93ZXI1Ky9ldmVudHM6CisJKiBldmVudHMvcHBjNjQvcG93ZXI1Ky9ldmVudF9tYXBwaW5nczoKKwkqIGV2ZW50cy9wcGM2NC91bml0X21hc2tzOgorCSogZXZlbnRzL01ha2VmaWxlLmFtOgorCSogbGlib3Avb3BfZXZlbnRzLmM6CisJKiBsaWJvcC9vcF9jcHVfdHlwZS5jOgorCSogbGlib3Avb3BfY3B1X3R5cGUuaDoKKwkqIHV0aWxzL29wY29udHJvbDoKKwkqIHV0aWxzL29waGVscC5jOiAgQWRkIHN1cHBvcnQgZm9yIFBvd2VyNSsKKworMjAwNi0wMi0xMCAgV2lsbCBDb2hlbiAgPHdjb2hlbkByZWRoYXQuY29tPgorCisJKiB1dGlscy9vcGNvbnRyb2w6IFVzZSBmdWxsIHBhdGhzIGZvciB3aGljaCBhbmQgZGlybmFtZS4KKworMjAwNi0wMS0yMiAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBkb2Mvb3Byb2ZpbGUueG1sOiBtZW50aW9uIDIuNCArIHBvd2VyIG1hbmFnZW1lbnQKKworMjAwNi0wMS0xNiAgTWlrZSBDYXJsc29uICA8Y29yZmU4M2RldkBnbWFpbC5jb20+CisKKwkqIGRvYy9vcGNvbnRyb2wuMS5pbjogZml4IHR5cG8KKworMjAwNi0wMS0xNiAgSm9zZSBSZW5hdG8gU2FudG9zICA8anNhbnRvc0BocGwuaHAuY29tPgorCisJKiBkYWVtb24vaW5pdC5jOgorCSogZGFlbW9uL29wZF9pbnRlcmZhY2UuaDoKKwkqIGRhZW1vbi9vcGRfa2VybmVsLmg6CisJKiBkYWVtb24vb3BkX2tlcm5lbC5jOgorCSogZGFlbW9uL29wZF90cmFucy5jOgorCSogZGFlbW9uL29wcm9maWxlZC5oOgorCSogZGFlbW9uL29wcm9maWxlZC5jOgorCSogZG9jL29wY29udHJvbC4xLmluOgorCSogdXRpbHMvb3Bjb250cm9sOiBBZGRlZCBzdXBwb3J0IGZvciBYZW4KKworU2VlIENoYW5nZUxvZy0yMDA1IGZvciBlYXJsaWVyIGNoYW5nZWxvZ3MuCmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9DaGFuZ2VMb2ctMjAwNyBiL29wcm9maWxlLTAuOS43L0NoYW5nZUxvZy0yMDA3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzNzc4MjUKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9DaGFuZ2VMb2ctMjAwNwpAQCAtMCwwICsxLDc1NyBAQAorMjAwNy0xMi0xMSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogbGlidXRpbCsrL29wX2JmZC5oOiByZW1vdmUgc3ltX29mZnNldCgpLCB3ZSBjYW4gZ2V0IHdoYXQgZGlkCisJICBzeW1fb2Zmc2V0KCkgaW4gYSBzaW1wbGVyIHdheSBhdCBjYWxsIHNpdGUKKwkqIGxpYnV0aWwrKy9vcF9iZmQuY3BwOgorCSogbGlicHAvY2FsbGdyYXBoX2NvbnRhaW5lci5jcHA6CisJKiBsaWJwcC9wcm9maWxlX2NvbnRhaW5lci5jcHA6CisJKiBsaWJwcC9wcm9maWxlX2NvbnRhaW5lci5oOgorCisyMDA3LTExLTI1ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBkYWVtb24vb3BkX3N0YXRzLmM6IGR1bXAgaW52YWxpZCBwYyBjb3VudCwgYWRkZWQgdG8gb3Byb2ZpbGUgc3RhdHMKKwkgIGZzIDIuNi4yNC1yYworCisyMDA3LTExLTE1ICBEYXZlIE5vbXVyYSAgPGRjbmx0Y0B1cy5pYm0uY29tPgorCisJKiBmaXhlZCBhIHNvbWUgdHlwb3MgaW4gbWFudWFsbHkgcGF0Y2hlZCBldmVudCBmaWxlcworCisyMDA3LTExLTE1ICBEYXZlIE5vbXVyYSAgPGRjbmx0Y0B1cy5pYm0uY29tPgorCisJKiBsaWJwcC9mb3JtYXRfb3V0cHV0LmNwcDogb3V0cHV0IFhNTCBTWU1CT0xfREFUQSBmb3IgY2FsbGVycy9jYWxsZWVzCisJKiBsaWJwcC9mb3JtYXQuaDoKKworMjAwNy0xMS0xNSAgIERhdmUgTm9tdXJhICA8ZGNubHRjQHVzLmlibS5jb20+CisKKwkqIGV2ZW50cy9wcGM2NC9wb3dlcjYvZXZlbnRfbWFwcGluZ3M6IHVwZGF0ZWQgUG93ZXI2IGV2ZW50IGZpbGVzCisJKiBldmVudHMvcHBjNjQvcG93ZXI2L2V2ZW50czoKKworMjAwNy0xMS0xNSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCWhhbmRsZSAtLXJvb3Qgd2hpY2ggYWN0IGFzIGEgcmVwbGFjZW1lbnQgKGEgcHJlZml4KSBmb3IgdGhlIC8gZnMKKwkqIGxpYnBwL2xvY2F0ZV9pbWFnZXMuY3BwOiByb290IHBhdGggc2VhcmNoIHRha2luZyBjYXJlIGlmIGEKKwkgIHJvb3QgcGF0aCBpcyBnaXZlbiB3ZSBuZXZlciBzZWFyY2ggdGhyb3VnaCAiLyIKKwkqIGxpYnBwL2xvY2F0ZV9pbWFnZXMuaDoKKwkqIGxpYnBwL3BvcHVsYXRlLmNwcDoKKwkqIGxpYnBwL3BvcHVsYXRlX2Zvcl9zcHUuY3BwOiB1c2UgdGhlIHJpZ2h0IHBhdGggdG8gY2hlY2sgbGFzdAorCSAgbW9kaWZpY2F0aW9uIHRpbWUsIHRoaXMgaXMgeWV0IGFnYWluIGEgY2hhbmdlIGluIGJlaGF2aW9yLCBtb2R1bGUKKwkgIHdhcyBuZXZlciBmb3VuZCBhIHRoaXMgcG9pbnQsIGV2ZW4gaWYgd2UgZm91bmQgdGhlbSBsYXRlciwgYW5kIHdlCisJICBkaWRuJ3QgdHJ5IHRvIGNoZWNrX210aW1lKCksIHNvIG9wcmVwb3J0IGlzIGFnYWluIGEgYml0IG1vcmUgdmVyYm9zZQorCSogbGlidXRpbCsrL29wX2JmZC5jcHA6IGJlIG1vcmUgY2F1dGlvdXMgd2hlbiBjaGVja2luZyBpZiB3ZSBjYW4gdHJ5IHRvCisJICBvcGVuIHRoZSBiZmQgZmlsZSwgZG9uJ3Qgb3BlbiBpdCBpbiB0aGUgJy8nIGZzIGlmIGEgLS1yb290IGlzICBnaXZlbgorCSogbGlicHAvcHJvZmlsZV9zcGVjLmNwcDogY29udmV5IHRoZSByb290X3BhdGggYWxsIG92ZXIgdGhlIGNvZGUuCisJKiBsaWJwcC9wcm9maWxlX3NwZWMuaDoKKwkqIHBwL2NvbW1vbl9vcHRpb24uY3BwOgorCSogcHAvY29tbW9uX29wdGlvbi5oOgorCSogcHAvb3Bhbm5vdGF0ZV9vcHRpb25zLmNwcDoKKwkqIHBwL29wYXJjaGl2ZS5jcHA6CisJKiBwcC9vcGFyY2hpdmVfb3B0aW9ucy5jcHA6CisJKiBwcC9vcGdwcm9mX29wdGlvbnMuY3BwOgorCSogcHAvb3ByZXBvcnRfb3B0aW9ucy5jcHA6CisJKiBkb2Mvb3Bhbm5vdGF0ZS4xLmluOiBkb2N1bWVudCAtLXJvb3QKKwkqIGRvYy9vcGFyY2hpdmUuMS5pbjoKKwkqIGRvYy9vcGdwcm9mLjEuaW46CisJKiBkb2Mvb3ByZXBvcnQuMS5pbjoKKwkqIGRvYy9vcHJvZmlsZS54bWw6CisKKzIwMDctMTEtMTAgIERhdmUgTm9tdXJhICA8ZGNubHRjQHVzLmlibS5jb20+CisKKwkqIGxpYnV0aWwrKy9iZmRfc3VwcG9ydC5jcHA6IGlzX2NvcnJlY3RfZnVuY3Rpb24oKSBpcyBpdGVuZGVkIHRvIGRlYWwKKwkgIHdpdGggbWlzc2luZyBkZWJ1ZyBpbmZvcm1hdGlvbiwgaWYgbGluZW5yICE9IDAsIGRvbid0IGNhbGwgaXQgc2luY2UKKwkgIHdlIGtub3cgd2UgaGF2ZSB2YWxpZCBkZWJ1ZyBpbmZvCisKKzIwMDctMTEtMDggIEhhYXZhcmQgU2tpbm5lbW9lbiAgPGhza2lubmVtb2VuQGF0bWVsLmNvbT4KKworCSogdXRpbHMvb3Bjb250cm9sOiBCdXN5Ym94J3MgaW1wbGVtZW50YXRpb24gb2YgImtpbGwiIGRvZXNuJ3QKKwkgIHVuZGVyc3RhbmQgdGhlICItcyBTSUciIG9wdGlvbi4gVXNlICItU0lHIiBpbnN0ZWFkLgorCisyMDA3LTExLTA3ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJQ29tcGlsZSBmaXggZm9yIGdjYyAyLjk1LjMKKwkqIGxpYnBwL2Zvcm1hdF9vdXRwdXQuY3BwOiB1bnVzZWQgbG9jYWwgdmFyLCB0aGVuIHVudXNlZCBwYXJhbXMKKwkqIGxpYnBwL2Zvcm1hdF9vdXRwdXQuaDoKKwkqIGxpYnBwL29wX2hlYWRlci5jcHA6IG1pc3NpbmcgaW5jbHVkZQorCSogbGlidXRpbCsrL2JmZF9zcHVfc3VwcG9ydC5jcHA6IGdjYyAyLjk1LjMgZG8gbm90IGxpa2Ugc3RydWN0IGJmZCwKKwkgMi45NSBnZXQgaXQgd3JvbmcgcHJvYmFibHkgYnV0IGFueXdheSBhbGwgdGhlc2Ugc3RydWN0IGFyZSB1c2VsZXNzLgorCisyMDA3LTExLTA2ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBwcC9vcGFubm90YXRlLmNwcDogZm9yIG1vZHVsZSB3ZSBkaWRuJ3QgdXNlIHRoZSByaWdodCBpbWFnZSBuYW1lLAorCSAgdGhpcyBidWcgYXBwZWFyZWQgYWZ0ZXIgMC45LjMgcmVsZWFzZQorCisyMDA3LTExLTA1ICBSaWNoYXJkIFB1cmRpZSAgPHJwdXJkaWVAb3BlbmVkaGFuZC5jb20+CisKKwkqIGV2ZW50cy9hcm0vYXJtdjYvZXZlbnRzOiBGaXggYXJtdjYgZXZlbnRzIHRvIG1hdGNoIG1haW5saW5lIGtlcm5lbHMKKworMjAwNy0xMS0wNCAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogdXRpbHMvb3Bjb250cm9sOiBubWkgd2F0Y2hkb2cgaXMgbm93IGNsZWFubHkgaGFuZGxlZCBpbiB0aGUga2VybmVsCisJICBidXQgaXQgY2FuIGJlIG9uIGJ5IGRlZmF1bHQgZXZlbiBpZiBDT05GSUdfV0FUQ0hET0c9biwgYSBzeXNjdGwKKwkgIGV4aXN0cyB0byBwdXQgaXQgb2ZmLiBXZSBuZWVkIHRvIGNoZWNrIHRoaXMgaW4gb3Bjb250cm9sIHNpbmNlIHdlCisJICByZXR1cm5lZCBzdWNjZXNzIGlmIGEgY291bnRlciBpcyBtaXNzaW5nIGFuZCBzdGFydGluZyBvcHJvZmlsZSB3aXRoCisJICBvcHJvZl9zdGFydCBzaWxlbnRseSBmYWlsZWQuCisKKzIwMDctMTEtMDMgIFJpY2hhcmQgUHVyZGllICA8cnB1cmRpZUBvcGVuZWRoYW5kLmNvbT4KKworCSogcHAvb3BhcmNoaXZlLmNwcDogIENoZWNrIGxpc3RfZmlsZXMgb3B0aW9uIGJlZm9yZSBjYWxsaW5nCisJICBjcmVhdGVfZGlyKCkgZm9yIGRlYnVnIGZpbGVzLgorCisyMDA3LTExLTAzICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJd2l0aCAtLXhtbCBhbmQgLS1kZXRhaWxzLCBiZmQgb3Blbi9jbG9zZSB3YXMgZG9uZSBvbmUgdGltZSBwZXIKKwlzeW1ib2xzLCBub3Qgb25lIHRpbWUgcGVyIGFwcGxpY2F0aW9uLiBTb2x2ZWQgYnkgbW92aW5nIG9wZW4vY2xvc2UKKwlpbiB0aGUgY2FsbGVyIGFuZCBjYWNoZSBiZmQgb2JqZWN0LCB0aGlzIHdvcmsgYmVjYXVzZSAtLXhtbCBpbXBseQorCXN5bWJvbHMgYXJlIHNvcnRlZCBieSBhcHAgbmFtZSB0aGVuIGxpYiBuYW1lLiBUaGlzIGlzIG5vdCBwZXJmZWN0IGFzCisJd2UgY2FuIG9wZW4vY2xvc2UgbXVsdGlwbGUgdGltZSBiZmQgb2JqZWN0IHdpdGggLS1zZXBhcmF0ZT1saWJyYXJ5CisJYnV0IHN0aWxsIGEgcmVhbCB3aW4uIFF1aWNrIHRlc3Qgc2hvd2VkIGFuIGltcHJvdmVtZW50IGJ5IG92ZXIgNDAKKwl0aW1lcy4gSW1wcm92ZW1lbnQgZ3Jvd3MgYXMgbnVtYmVyIG9mIHN5bWJvbHMgcGVyIGJpbmFyeS4KKwkqIGxpYnBwL3htbF91dGlscy5jcHA6IG1vdmUgYmZkIG9wZW4gLi4uCisJKiBsaWJwcC94bWxfdXRpbHMuaDoKKwkqIGxpYnBwL2Zvcm1hdF9vdXRwdXQuY3BwOiAuLi4gaGVyZQorCSogbGlicHAvZm9ybWF0X291dHB1dC5oOgorCSogcHAvb3ByZXBvcnQuY3BwOgorCisyMDA3LTExLTAyICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBwcC9vcHJlcG9ydF9vcHRpb25zLmNwcDogLS14bWwgaXMgbm90IGNvbXBhdGlibGUgd2l0aCAtLXNvcnQgc2luY2UKKwkgIHhtbCBvdXRwdXQgbmVlZCBzb21lIHByZWRlZmluZWQgc29ydCBvcHRpb25zLCB3ZSB3YXJuZWQgYWdhaW5zdAorCSAgdGhlIHVzZSBvZiAtLXNvcnQgYnV0IGRpZG4ndCByZXNldCB0aGUgc29ydCBvcHRpb25zIHRvIGRlZmF1bHQuCisKKzIwMDctMTEtMDEgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIHBwL29wYXJjaGl2ZV9vcHRpb25zLmNwcDogb3BhcmNoaXZlIG5lZWQgdG8gYmUgcnVuIGFzIHJvb3QgaWYgeW91CisJICB3YW50IHRvIGdldCBzYXZlIGFsbCBiaW5hcmllcywgZ2VuZXJhbGx5IEkgZG9uJ3QgbGlrZSB0byByZXN0cmljdAorCSAgdXNlciB0byBkbyBzaWxseSB0aGluZ3MgYnV0IC0tb3V0cHV0LWRpcmVjdG9yeSAvIGlzIGFuIGVhc3kgdHlwbworCSAgdG8gZG8gYW5kIHdpbGwgY29tcGxldGVseSBzY3JldyB1cCB0aGUgYm94LgorCisyMDA3LTEwLTMwICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBsaWJwcC9mb3JtYXRfb3V0cHV0LmNwcDogRml4ICM5MzE4ODIsIHhtbCBvdXRwdXQgbm90IGNoYW5nZWQgYXQKKwl0aGUgbW9tZW50LgorCisyMDA3LTEwLTMwICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJUHJlcGFyZSAjOTMxODgyIGZpeCwgY29udGludWUgdG8gbW92ZSBkb3duIHJlYWwgZmlsZW5hbWUKKwlyZXRyaWV2YWwgYnkgZXh0ZW5kaW5nIGltYWdlX25hbWVfc3RvcmFnZSB3aGljaCBjYW4gaG9sZCBub3cgdGhlCisJcmVhbCBpbWFnZSBuYW1lIGFuZCB0aGUgaW1hZ2UgYXMgZGVyaXZlZCBmcm9tIHRoZSBzYW1wbGUgZmlsZW5hbWUuCisJVXNlIHRoZSBuZXcgYXBpIGluIGEgY29tcGF0aWJsZSB3YXkgd2l0aCB0aGUgb2xkIGJlaGF2aW9yLCBubyBvdXRwdXQKKwljaGFuZ2UgaW50ZW5kZWQuCisJKiBsaWJwcC9mb3JtYXRfb3V0cHV0LmNwcDoKKwkqIGxpYnBwL2Zvcm1hdF9vdXRwdXQuaDoKKwkqIGxpYnBwL2xvY2F0ZV9pbWFnZXMuY3BwOgorCSogbGlicHAvbG9jYXRlX2ltYWdlcy5oOgorCSogbGlicHAvbmFtZV9zdG9yYWdlLmNwcDoKKwkqIGxpYnBwL25hbWVfc3RvcmFnZS5oOgorCSogbGlicHAvc3ltYm9sLmNwcDoKKwkqIGxpYnBwL3N5bWJvbC5oOgorCSogbGlicHAveG1sX3V0aWxzLmNwcDoKKwkqIGxpYnBwL3htbF91dGlscy5oOgorCSogcHAvb3ByZXBvcnQuY3BwOgorCisyMDA3LTEwLTI5ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBsaWJwcC9pbWFnZV9lcnJvcnMuY3BwOiBQYXNzIHRvIGltYWdlX2Vycm9ycyB0aGUgYXJjaGl2ZV9wYXRoIHRocm91Z2gKKwkgIGFuIGV4dHJhX2ltYWdlcyB0byBlbnN1cmUgbm8gZHVwbGljYXRlIGVycm9yIG1lc3NhZ2Ugb2NjdXIgbm9yIHdlCisJICBtaXNzIGVycm9yLCB0aGlzIGZpeCB0d28gYnVncywgb25lIHdpdGggZGlmZmVyZW50aWFsIHByb2ZpbGUKKwkgIGFuIGVycm9yIG1lc3NhZ2Ugd2FzIG1pc3Npbmcgd2hlbiB0d28gYmluYXJ5IGFyZSBtaXNzaW5nLCBhbm90aGVyCisJICB3aXRoIG9wcmVwb3J0IHdoZXJlIHRoZSBzYW1lIGVycm9yIG1lc3NhZ2Ugd2FzIGR1cGxpY2F0ZSBiZWNhdXNlIGluCisJICBvbiBjYXNlIHdlIHBhc3NlZCB0aGUgcmVhbCBiaW5hcnkgbmFtZSAocHJlZml4ZWQgd2l0aCBhcmNoaXZlX3BhdGgpCisJICB3aGlsZSBsYXR0ZXIgd2UgcGFzc2VkIHRoZSBzaG9ydCBmb3JtIG9mIHRoZSBiaW5hcnkgbmFtZS4KKwkqIGxpYnBwL2ltYWdlX2Vycm9ycy5oOgorCSogbGlicHAvY2FsbGdyYXBoX2NvbnRhaW5lci5jcHA6CisJKiBsaWJwcC9wb3B1bGF0ZS5jcHA6CisJKiBsaWJwcC9wb3B1bGF0ZV9mb3Jfc3B1LmNwcDoKKwkqIGxpYnBwL3htbF91dGlscy5jcHA6CisJKiBsaWJ1dGlsKysvb3BfYmZkLmg6CisKKwkqIHBwL29wYW5ub3RhdGUuY3BwOiBnbG9iYWwgdmFyIGFyY2hpdmVfcGF0aCBpcyBubyBsb25nZXIgdXNlZAorCSogcHAvb3Bhbm5vdGF0ZV9vcHRpb25zLmNwcDoKKwkqIHBwL29wYW5ub3RhdGVfb3B0aW9ucy5oOgorCSogcHAvb3BhcmNoaXZlLmNwcDoKKwkqIHBwL29wZ3Byb2YuY3BwOgorCSogcHAvb3BncHJvZl9vcHRpb25zLmg6CisJKiBwcC9vcHJlcG9ydC5jcHA6CisJKiBwcC9vcHJlcG9ydF9vcHRpb25zLmNwcDoKKwkqIHBwL29wcmVwb3J0X29wdGlvbnMuaDoKKworMjAwNy0xMC0yOSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCUNsZWFudXAgdGhlIHdheSBwZXIgc3BlYyBhcmNoaXZlX3BhdGggaXMgaGFuZGxlZCwgYXMgZXh0cmFfaW1hZ2VzCisJaXMgYnVpbHQgdXNpbmcgYW4gYXJjaGl2ZV9wYXRoIGl0IG1ha2Ugbm8gc2Vuc2UgdG8gcGFzcyBhcmNoaXZlX3BhdGgKKwlhcyBwYXJhbWV0ZXIgYWxsIG92ZXIgdGhlIHBsYWNlLCByYXRoZXIgbWFrZSBpdCBhIG1lbWJlciBvZgorCWV4dHJhX2ltYWdlcyBhbmQgdXNlIGl0LCBhbnl3YXkgaXQgd2FzIHJlcXVpcmVkIHRoZSBhcmNoaXZlX3BhdGgKKwlwYXNzZWQgdG8gZmluZF9pbWFnZV9wYXRoKCkgd2FzIHRoZSBzYW1lIGFzIHVzZWQgdG8gYnVpbGQgdGhlCisJZXh0cmFfaW1hZ2VzLgorCisJQXMgYSBzaWRlIGVmZmVjdCBpdCBmaXggYSBjb3JuZXIgY2FzZTogb3BhcmNoaXZlIGFyY2hpdmU6dG1wMSAtbyB0bXAyCisJd2FzIG5vdCB3b3JraW5nIGZvciBtb2R1bGUsIGFyY2hpdmluZyBmcm9tIGFuIGFyY2hpdmUgc2hvdWxkIHdvcmsgbm93LgorCSogbGlicHAvYXJyYW5nZV9wcm9maWxlcy5jcHA6CisJKiBsaWJwcC9hcnJhbmdlX3Byb2ZpbGVzLmg6CisJKiBsaWJwcC9jYWxsZ3JhcGhfY29udGFpbmVyLmNwcDoKKwkqIGxpYnBwL2NhbGxncmFwaF9jb250YWluZXIuaDoKKwkqIGxpYnBwL2xvY2F0ZV9pbWFnZXMuY3BwOgorCSogbGlicHAvbG9jYXRlX2ltYWdlcy5oOgorCSogbGlicHAvcG9wdWxhdGUuY3BwOgorCSogbGlicHAvcG9wdWxhdGUuaDoKKwkqIGxpYnBwL3BvcHVsYXRlX2Zvcl9zcHUuY3BwOgorCSogbGlicHAvcG9wdWxhdGVfZm9yX3NwdS5oOgorCSogbGlicHAvcHJvZmlsZV9zcGVjLmNwcDoKKwkqIGxpYnBwL3htbF91dGlscy5jcHA6CisJKiBsaWJwcC94bWxfdXRpbHMuaDoKKwkqIGxpYnV0aWwrKy9vcF9iZmQuY3BwOgorCSogbGlidXRpbCsrL29wX2JmZC5oOgorCSogbGlidXRpbCsrL29wX3NwdV9iZmQuY3BwOgorCSogcHAvb3Bhbm5vdGF0ZS5jcHA6CisJKiBwcC9vcGFyY2hpdmUuY3BwOgorCSogcHAvb3BhcmNoaXZlX29wdGlvbnMuY3BwOgorCSogcHAvb3BhcmNoaXZlX29wdGlvbnMuaDoKKwkqIHBwL29wZ3Byb2YuY3BwOgorCSogcHAvb3BncHJvZl9vcHRpb25zLmNwcDoKKwkqIHBwL29wcmVwb3J0LmNwcDoKKworMjAwNy0xMC0yOSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogbGlidXRpbCsrL2ZpbGVfbWFuaXAuY3BwOiBkbyBub3QgY3JlYXRlIHRoZSBvdXRwdXQgZmlsZSBpZiB0aGUgaW5wdXQKKwkgIGZpbGUgY2FuIG5vdCBiZSByZWFkLiBJdCBjaGFuZ2Ugb3BhcmNoaXZlIGJlaGF2aW9yIHdoaWNoIGNyZWF0ZWQKKwkgIGVtcHR5IGZpbGUgd2l0aCBpbnB1dCBmaWxlIGxpa2UgLXJ3cy0teC0teCAxIHJvb3Qgcm9vdAorCisyMDA3LTEwLTI4ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBsaWJwcC9mb3JtYXRfb3V0cHV0LmNwcDogbWlub3Igb3ZlcmtpbGwKKworMjAwNy0xMC0yNyAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCUZpeCAjMTgxOTM1MCwgaXQgdHVybmVkIG91dCB0aGlzIGltcGxpZWQgYW5vdGhlciBmaXggZm9yIGRpZmZlcmVudGlhbAorCXByb2ZpbGUsIGV4dHJhX2ltYWdlcyBtdXN0IGJlIGJ1aWx0IHBlciBwcm9maWxlIHNwZWNpZmljYXRpb24gbm90CisJZ2xvYmFsbHkgc28gbW9zdCBvZiB0aGlzIHBhdGNoIHBhc3MgYW4gZXh0cmFfaW1hZ2VzIGRvd24gdG8gb3BfYmZkLgorCVRoZSB3YXkgaW1hZ2UgbmFtZSByZXNvbHV0aW9uIGhhcyBjaGFuZ2VkLiBXZSBmaXh1cCBhbiBpbWFnZSBuYW1lCisJb25seSB3aGVuIHJlYWxseSBuZWVkZWQsIHdoZW4gb3BlbmluZyBhIGJmZCBmaWxlLCB3aGVuIGNoZWNraW5nIGEKKwliaW5hcnkgZXhpc3RzIGFuZCB3aGVuIHdlIHRyeSBtYXRjaGluZyBhbiBpbWFnZSBuYW1lIHdpdGggYSBwcm9maWxlCisJc3BlY2lmaWNhdGlvbiwgdGhpcyByb2J1c3RpZnkgZGlmZmVyZW50aWFsIHByb2ZpbGUuIFRoaXMgcGF0Y2ggYWxzbworCWFsbG93IGEgcHJvZmlsZV9zcGVjIGFsYSBpbWFnZToqb3Byb2ZpbGUua28gd2hpY2ggd2FzIGJyb2tlbiB0b28uCisJSXQncyBub3cgbWFuZGF0b3J5IHRvIHVzZSB0aGUgc2FtZSAtcCBvcHRpb24gdXNlZCB3aXRoIG9wYXJjaGl2ZSB3aGVuCisJdXNpbmcgYW4gYXJjaGl2ZSB3aXRoIG90aGVyIHBwIHRvb2xzLCBpdCB3YXMgYWxyZWFkeSB0aGUgY2FzZSBidXQgd2FzCisJYnJva2VuLCB0aGlzIHBhdGNoIGRvZXMgbm90IGNsYXJpZnkgdGhlIGRvY3VtZW50YXRpb24gYWJvdXQgdGhpcworCXBvaW50IGJlY2F1c2UgSSBzdXNwZWN0IG9wYXJjaGl2ZSBzaG91bGQgYmUgbW9kaWZpZWQgdG8gc2F2ZSBhdCB0aGUKKwl0b3AgbGV2ZWwgZGlyZWN0b3J5IHRoZSBjb250ZW50cyBvZiAtcCBvcHRpb24sIHBwIHRvb2xzIHdpbGwgdXNlIHRoYXQKKwlhdXRvbWF0aWNhbGx5IGFuZCAtLWltYWdlX3BhdGggd2lsbCBiZSBvYnNvbGV0ZWQgd2hlbiB1c2VkIHdpdGggYW4KKwlhcmNoaXZlLgorCisJVGhpcyBwYXRjaCBleGNlcHQgY2xhcmlmeWluZyB0aGFuIC0taW1hZ2UtcGF0aCB3aXRoIGFyY2hpdmU6IGlzIGEgYml0CisJc3BlY2lhbCBkb2VzIG5vdCBhZGQgYW55IHVzZXIgbGV2ZWwgdmlzaWJsZSBjaGFuZ2UuCisJKiBsaWJwcC9hcnJhbmdlX3Byb2ZpbGVzLmNwcDoKKwkqIGxpYnBwL2FycmFuZ2VfcHJvZmlsZXMuaDoKKwkqIGxpYnBwL2NhbGxncmFwaF9jb250YWluZXIuY3BwOgorCSogbGlicHAvY2FsbGdyYXBoX2NvbnRhaW5lci5oOgorCSogbGlicHAvbG9jYXRlX2ltYWdlcy5jcHA6CisJKiBsaWJwcC9sb2NhdGVfaW1hZ2VzLmg6CisJKiBsaWJwcC9wb3B1bGF0ZS5jcHA6CisJKiBsaWJwcC9wb3B1bGF0ZV9mb3Jfc3B1LmNwcDoKKwkqIGxpYnBwL3Byb2ZpbGVfY29udGFpbmVyLmNwcDoKKwkqIGxpYnBwL3Byb2ZpbGVfY29udGFpbmVyLmg6CisJKiBsaWJwcC9wcm9maWxlX3NwZWMuY3BwOgorCSogbGlicHAvcHJvZmlsZV9zcGVjLmg6CisJKiBsaWJwcC94bWxfdXRpbHMuY3BwOgorCSogbGlicHAveG1sX3V0aWxzLmg6CisJKiBsaWJ1dGlsKysvTWFrZWZpbGUuYW06CisJKiBsaWJ1dGlsKysvb3BfYmZkLmNwcDoKKwkqIGxpYnV0aWwrKy9vcF9iZmQuaDoKKwkqIGxpYnV0aWwrKy9vcF9zcHVfYmZkLmNwcDoKKwkqIHBwL2NvbW1vbl9vcHRpb24uY3BwOgorCSogcHAvY29tbW9uX29wdGlvbi5oOgorCSogcHAvb3Bhbm5vdGF0ZS5jcHA6CisJKiBwcC9vcGFubm90YXRlX29wdGlvbnMuY3BwOgorCSogcHAvb3BhcmNoaXZlLmNwcDoKKwkqIHBwL29wYXJjaGl2ZV9vcHRpb25zLmNwcDoKKwkqIHBwL29wZ3Byb2YuY3BwOgorCSogcHAvb3BncHJvZl9vcHRpb25zLmNwcDoKKwkqIHBwL29wcmVwb3J0LmNwcDoKKwkqIHBwL29wcmVwb3J0X29wdGlvbnMuY3BwOgorCisyMDA3LTEwLTI3ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBsaWJwcC9wcm9maWxlX3NwZWMuY3BwOiBsb29rIGxpa2UgYW4gb2J2aW91cyB0eXBvLCB3ZSBtdXN0IGZpeHVwCisJICB0aGUgc3RyaW5nIHdlIGFyZSBwYXJzaW5nIG5vdCBhIHByZXZpb3VzbHkgc2VlbiBvciBlbXB0eSBzdHJpbmcKKworMjAwNy0xMC0yNSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogbGlidXRpbCsrL3NwYXJzZV9hcnJheS5oOiBzaXplKCkgcmV0dXJuIHRoZSBtYXggaW5kZXggd2hpbGUgd2UKKwkgIHdhbnQgdGhlIG1heCBpbmRleCArIDEsIHRoZSBvbmx5IHVzZXIgaXMgZGlmZl9jb250YWluZXIsCisJICBkaWZmZXJlbnRpYWwgY29udGFpbmVyIGlzIGJyb2tlbiBpbiAwLjkuMy4gVGhpcyBmaXggYnVnICMxODIwMjAyCisKKzIwMDctMTAtMjUgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIHV0aWxzL29wY29udHJvbDogZml4IHRoZSBwcmV2aW91cyBvcGNvbnRyb2wgLS1yZXNldCBwYXRjaCwgaXQgd2FzCisJICBicm9rZW4gaWYgdGhlIGRhZW1vbiBpcyBydW5uaW5nIGJlY2F1c2UgLS1yZXNldCBpbXBseSAtLWR1bXAgc28KKwkgIHdlIGNhbiB1c2UgdGhpcyAtLXJlc2V0IHNob3J0Y3V0IG9ubHkgaWYgdGhlIGRhZW1vbiBpcyBub3QgcnVubmluZy4KKworMjAwNy0xMC0yNSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogdXRpbHMvb3Bjb250cm9sOiBpZiBvYmpkdW1wIGlzIG1pc3NpbmcgdGhlIGVycm9yIG1lc3NhZ2UgaXMKKwkgIG9ic2N1cmUsIHRoaXMgZml4IGJ1ZyAjMTU2NDkyMCBieSBjaGVja2luZyBpZiBvYmpkdW1wIGV4aXN0cworCSAgYW5kIGlzIGFuIGV4ZWN1dGFibGUgYmVmb3JlIHVzaW5nIGl0CisKKzIwMDctMTAtMjUgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIHV0aWxzL29wY29udHJvbDogLS1yZXNldCBkb2Vzbid0IG5lZWQgdG8gbG9hZCB0aGUgbW9kdWxlLCBpdCB3YXMKKwkgIGNvdW50ZXItaW50dWl0aXZlIHRoYW4gdGhlIHNlcXVlbmNlIG9wY29udHJvbCAtLWRlaW5pdDsKKwkgIG9wY29udHJvbCAtLXJlc2V0IG11c3QgYmUgZm9sbG93ZWQgYnkgYW5vdGhlciBvcGNvbnRyb2wgLS1kZWluaXQKKworMjAwNy0xMC0yNSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogdXRpbHMvb3Bjb250cm9sOiBlcnJvciBvdXQgZWFybGllciBpZiB0aGUgbW9kdWxlIGlzIG5vdCBsb2FkZWQKKwkgIGV2ZW4gZm9yIC0tbGlzdC1ldmVudHMgb3IgLS1kdW1wIHRvIGF2b2lkIG9ic2N1cmUgZXJyb3IgbWVzc2FnZQorCisyMDA3LTEwLTI0ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBsaWJvcC9vcF9jb25maWcuaDogYnVtcCBzYW1wbGUgZmlsZW5hbWUgZm9ybWF0LCBzaG91bGQgaGF2ZSBiZWVuCisJICBkb25lIGJlZm9yZSAwLjkuMworCSogbGlicHAvb3BfaGVhZGVyLmNwcDogZG8gbm90IHVzZSBvZGJfb3BlbigpIHRvIHJlYWQgdGhlIHNhbXBsZSBmaWxlCisJICBoZWFkZXIsIGlmIGl0IGZhaWxzIGl0IGNhbiByZXR1cm4gRUlOVkFMIGlmIHNhbml0eSBjaGVja2luZyBmYWlscworCSAgc28gd2UgY2FuJ3Qga25vdyBpZiB0aGUgZmFpbHVyZSBjYW1lIGZyb20gYSBzYW1wbGUgZmlsZSBmb3JtYXQKKwkgIGNoYW5nZSBvciBzb21lIG90aGVyIGZhaWx1cmUuIFRoaXMgZXhwbGFpbiBzb21lICJzYW1wbGVfZmlsZW5hbWU6CisJICBJbnZhbGlkIGFyZ3VtZW50IiB3ZSBnb3QgaW4gYnVnIHJlcG9ydCB3aGVuIHVzZXIgZGlkbid0IGNsZWFudXAKKwkgIHRoZSBzYW1wbGUgZmlsZSBkaXJlY3RvcnkuCisJKiBsaWJwcC9wcm9maWxlLmNwcDogdXNlIHJlYWRfaGVhZGVyKCkgZmlyc3QgdG8gY2hlY2sgdGhlIHNhbXBsZSBmaWxlCisJICBmb3JtYXQgdG8gZ2V0IGJldHRlciBlcnJvciBtZXNzYWdlLgorCisyMDA3LTEwLTE5ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBsaWJvcC9vcF9ldmVudHMuYzogZm9yY2UgdGhlIHVzZSBvZiBoZXhhIG5vdGF0aW9uIGluIGV2ZW50IGZpbGUgZm9yCisJICB0aGUgZmllbGQgaW50ZW5kZWQgdG8gYmUgaW4gaGV4YWNpZGVtYWwgc28gbWFrZSBjaGVjayB3aWxsIGNhdGNoCisJICBhdHRlbXB0IHRvIHVzZSBkZWNpbWFsIG5vdGF0aW9uIGZvciB0aGVtLgorCisJKiBldmVudHMvbWlwcy8yMEsvZXZlbnRzOiBhbGwgZXZlbnQgbnVtYmVyIHdlcmUgaW4gZGVjaW1hbCBidXQgcGFyc2VkCisJICBhcyBoZXhhZGVjaW1hbCwgdGhpcyBmaXggYnVnICMxNzE3Mjk4CisJKiBldmVudHMvbWlwcy8yNEsvZXZlbnRzOgorCSogZXZlbnRzL21pcHMvMjVLL2V2ZW50czoKKwkqIGV2ZW50cy9taXBzLzVLL2V2ZW50czoKKwkqIGV2ZW50cy9taXBzL3IxMjAwMC9ldmVudHM6CisJKiBldmVudHMvbWlwcy9zYjEvZXZlbnRzOgorCSogZXZlbnRzL21pcHMvdnI1NDMyL2V2ZW50czoKKwkqIGV2ZW50cy9taXBzL3ZyNTUwMC9ldmVudHM6CisJKiBldmVudHMvbWlwcy8zNEsvZXZlbnRzOiBjb21tZW50IGEgYnVuY2ggb2Ygb3ZlcmxhcHBpbmcgZXZlbnQuCisJKiBldmVudHMvcHBjNjQvY2VsbC1iZS91bml0X21hc2tzOiB3ZWxsLCAwID09IDB4MCBidXQgaXQncyBlYXNpZXIKKwkgIHRvIGNhdGNoIHJlYWwgZXJyb3IgYnkgZm9yY2luZyBoZXhhIG5vdGF0aW9uIGZvciBkZWZhdWx0IHVuaXQgbWFzay4KKworCSogbGlib3AvdGVzdHMvYWxsb2NfY291bnRlcl90ZXN0cy5jOiBmaXggbWlwcy8zNEsgdGVzdCwgdGhlIHVzZWQgZXZlbnQKKwkgIGhhcyBiZWVuIHJlbW9kZWQKKworMjAwNy0xMC0xNyAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogZG9jL29wcm9maWxlLnhtbDogZml4IGRlYWQgdXJsCisJKiB1dGlscy9vcGhlbHAuYzoKKworMjAwNy0xMC0xNyAgSmFzb24gWWVoICA8amFzb24ueWVoQGFtZC5jb20+CisKKwkqIGV2ZW50cy94ODYtNjQvZmFtaWx5MTAvZXZlbnRzOiBUaGlzIHBhdGNoIHVwZGF0ZXMgdGhlIGV2ZW50cyBhbmQKKwkgIHVuaXRfbWFza3MgZmlsZXMgdG8gbWF0Y2ggdGhlIEJJT1MgYW5kIEtlcm5lbCBEZXZlbG9wZXIncyBHdWlkZQorCSAgRm9yIEFNRCBGYW1pbHkgMTBoIFByb2Nlc3NvcnMgUmV2IDMuMDAgcmVsZWFzZWQgb24gU2VwdGVtYmVyIDA3LAorCSAgMjAwNy4gVGhlIG5vdGFibGUgY2hhbmdlcyBhcmUgTDMgY2FjaGUgZXZlbnRzIGFuZCB1cGRhdGVzIHRvCisJICBjb3JyZXNwb25kaW5nIHVuaXQgbWFza3MuCisJKiBldmVudHMveDg2LTY0L2ZhbWlseTEwL3VuaXRfbWFza3M6CisKKzIwMDctMTAtMTcgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIHV0aWxzL29wY29udHJvbDogbmV3ZXIgc2hlbGwgYWNjZXB0IGlmIC16IC4uLiBidXQgb2xkZXIgbmVlZCAKKwkgIGlmIHRlc3QgLXouIFRoaXMgYnJva2Ugb3Bjb250cm9sIC0tZHVtcCB3aXRoIGJhc2ggMi54IGFuZCBwcm9iYWJseQorCSAgb3RoZXIgc2hlbGwuIFdpdGggYmFzaCB0aGUgZXJyb3Igd2hlbiBydW5uaW5nIG9wY29udHJvbCBhcyBub24gcm9vdAorCSAgd2FzOgorCSAgICAvdXNyL2xvY2FsL2Jpbi9vcGNvbnRyb2w6IGxpbmUgMTY3MDogLXo6IGNvbW1hbmQgbm90IGZvdW5kCisKKzIwMDctMTAtMTIgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIGxpYm9wL29wX2V2ZW50cy5jOiBjaGVjayBmb3IgJy4nIGluc2lkZSBldmVudCBuYW1lLCB0aGV5IGNhbid0IHdvcmsKKwkqIGV2ZW50cy9pMzg2L2NvcmVfMi9ldmVudHM6IGNoYW5nZSAnLicgYnkgJ18nIGluIGV2ZW50cyBuYW1lCisJKiBldmVudHMvcHBjNjQvY2VsbC1iZS9ldmVudHM6CisKKzIwMDctMTAtMTEgIE1heW5hcmQgSm9obnNvbiAgPG1heW5hcmRqQHVzLmlibS5jb20+CisKKwkqIGV2ZW50cy9wcGM2NC85NzBNUC9ldmVudF9tYXBwaW5nczogVHVybiBvZmYgcHJvZmlsaW5nIGluCisJICBoeXBlcnZpc29yIG9uIDk3ME1QIHRvIHByZXZlbnQgbG9zdCBpbnRlcnJ1cHRzCisKKzIwMDctMTAtMTAgIE1heW5hcmQgSm9obnNvbiAgPG1heW5hcmRqQHVzLmlibS5jb20+CisKKwkqIGV2ZW50cy9wcGM2NC85NzBNUC9ldmVudHM6CisJKiBldmVudHMvcHBjNjQvOTcwTVAvZXZlbnRfbWFwcGluZ3M6IEZpeCBNTUNSIHZhbHVlcworCSAgYW5kIGNvdW50ZXItdG8tZXZlbnQgbWFwcGluZ3Mgb24gYSBmZXcgOTcwTVAgZ3JvdXBzCisKKzIwMDctMTAtMDkgIE1lbGNoaW9yIEZyYW56ICA8bWZyYW56QGFvbi5hdD4KKworCSogbGlicmVnZXgvb3BfcmVnZXguY3BwOiBGaXggYnJva2VuIHN0cmluZyBjb25jYXRlbmF0aW9uCisKKzIwMDctMTAtMDUgIFdpbGwgQ29oZW4gIDx3Y29oZW5AcmVkaGF0LmNvbT4KKworCSogdXRpbHMvb3Bjb250cm9sOiBNb2RpZnkgb3Bjb250cm9sIHRvIGFsbG93ICBzaG9ydCBmb3JtIC1sIGFuZCAtZCBmb3IKKwkgIG5vcm1hbCB1c2Vycy4KKworMjAwNy0wOS0yNSAgQnJpYW4gVHdpY2hlbGwgPHRicmlhbkB1cy5pYm0uY29tPgorCisJKiB1dGlscy9vcGNvbnRyb2w6IE1vZGlmeSBvcGNvbnRyb2wgdG8gdXNlIGEgbW9yZSBpbmNsdXNpdmUKKwkgIGtlcm5lbCByYW5nZQorCisyMDA3LTA4LTIzICBNYXluYXJkIEpvaG5zb24gPG1heW5hcmRqQHVzLmlibS5jb20+CisKKwkqIGRhZW1vbi9vcGRfYW5vbi5jOiBNYWtlIGFub255bW91cyBzYW1wbGUgcmVjb3JkaW5nCisJICB3b3JrIHdpdGggMzItYml0IE9Qcm9maWxlIGFuZCA2NC1iaXQgYW5vbnltb3VzIGNvZGUKKworMjAwNy0wOC0xNCAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBkb2Mvb3Byb2ZpbGUueG1sOgorCSogZG9jL29wY29udHJvbC4xLmluOiBjbGFyaWZ5IGJlaGF2aW91ciBvZiBvcGNvbnRyb2wgLWUKKworMjAwNy0wOC0wMiAgSmVucyBXaWxrZSA8amVucy53aWxrZUBkZS5pYm0uY29tPgorCisJKiBDaGFuZ2VMb2c6ICBDb3JyZWN0IHRoZSBkYXRlIGZyb20gcHJldmlvdXMgcGF0Y2ggKG1heW5hcmRqKQorCisJKiBsaWJ1dGlsKysvb3BfYmZkLmNwcDogRml4IHN5bV9vZmZzZXQgY2FsY3VsYXRpb24uCisJICBCdWcgdHJpZ2dlcnMgb24gNjQgYml0IHN5c3RlbXMgd2l0aCBjb2RlIG1hcHBlZAorCSAgd2l0aCBhbiBhZGRyZXNzID40Ry4KKworMjAwNy0wOC0wMiAgSmVucyBXaWxrZSA8amVucy53aWxrZUBkZS5pYm0uY29tPgorCisJKiBsaWJwcC9wcm9maWxlX2NvbnRhaW5lci5jcHA6IFJlbW92ZSB1bm5lY2Vzc2FyeSBvZmZzZXQKKwkgIGNhbGN1bGF0aW9uLgorCisyMDA3LTA3LTE4ICBNYXluYXJkIEpvaG5zb24gPG1heW5hcmRqQHVzLmlibS5jb20+CisKKwkqIGRvYy9NYWtlZmlsZS5hbTogSW5jbHVkZSBidWZmZXJzIGRpYWdyYW0gaW4gZGlzdAorCisJKiBkb2Mvb3Byb2ZpbGUueG1sOiBDb3JyZWN0IGZpbGVuYW1lIHJlZmVyZW5jZSB0byBvcHJlcG9ydC54c2QKKworMjAwNy0wNy0xNiAgTWF5bmFyZCBKb2huc29uIDxtYXluYXJkakB1cy5pYm0uY29tPgorCisgICAgICAgICogY29uZmlndXJlLmluOiBCdW1wIHRvIDAuOS40Y3ZzLgorCisyMDA3LTA3LTE2ICBNYXluYXJkIEpvaG5zb24gPG1heW5hcmRqQHVzLmlibS5jb20+CisKKwkqIGNvbmZpZ3VyZS5pbjoKKwkqIE1ha2VmaWxlLmFtOiAgQnVtcCByZWxlYXNlIHRvIDAuOS4zIGFuZCBhZGQgYSBsaW5lIHRvCisJICBFWFRSQV9ESVNUIHRvIGRpc3RyaWJ1dGUgQ2hhbmdlTG9nLTIwMDYuCisKKzIwMDctMDctMDkgIE1heW5hcmQgSm9obnNvbiA8bWF5bmFyZGpAdXMuaWJtLmNvbT4KKworICAgICAgICAqIGRvYy9vcHJlcG9ydC54c2Q6CisgICAgICAgICogbGlicHAveG1sX3V0aWxzLmNwcDogQ29ycmVjdCBzY2hlbWEgdmVyc2lvbiBidW1wCisKKzIwMDctMDctMDIgIE1heW5hcmQgSm9obnNvbiA8bWF5bmFyZGpAdXMuaWJtLmNvbT4KKworCSogbGlicHAvcG9wdWxhdGVfZm9yX3NwdS5jcHA6IEZpeCBsb2dpYyBpbiBpc19zcHVfcHJvZmlsZSgpCisJICB0byBoYW5kbGUgJy0tc2VwYXJhdGU9dGhyZWFkJyBvcHRpb24uCisKKzIwMDctMDYtMjcgIE1heW5hcmQgSm9obnNvbiA8bWF5bmFyZGpAdXMuaWJtLmNvbT4KKworCSogQ2hhbmdlTG9nOiBDaGFuZ2VMb2cgY2xlYW51cAorCisyMDA3LTA2LTE1ICBNYXluYXJkIEpvaG5zb24gPG1heW5hcmRqQHVzLmlibS5jb20+CisKKwkqIGRvYy9vcHJlcG9ydC54c2Q6CisJKiBsaWJwcC94bWxfdXRpbHMuY3BwOiBCdW1wIHNjaGVtYSB2ZXJzaW9uIHRvIDIuMCB0byBjb2luY2lkZSB3aXRoCisJICBjYWxsZ3JhcGggZWxlbWVudHMgYWRkZWQgcmVjZW50bHkgdG8gdGhlIHNjaGVtYQorCisyMDA3LTA2LTEzICBNYXluYXJkIEpvaG5zb24gPG1heW5hcmRqQHVzLmlibS5jb20+CisKKwkqIGRvYy9vcHJvZmlsZS54bWw6CisJKiBldmVudHMvTWFrZWZpbGUuYW06CisJKiBldmVudHMvcHBjNjQvcG93ZXI1KysvZXZlbnRfbWFwcGluZ3M6CisJKiBldmVudHMvcHBjNjQvcG93ZXI1KysvZXZlbnRzOgorCSogZXZlbnRzL3BwYzY0L3Bvd2VyNSsrL3VuaXRfbWFza3M6CisJKiBsaWJvcC9vcF9jcHVfdHlwZS5jOgorCSogbGlib3Avb3BfY3B1X3R5cGUuaDoKKwkqIGxpYm9wL29wX2V2ZW50cy5jOgorCSogdXRpbHMvb3Bjb250cm9sOgorCSogdXRpbHMvb3BoZWxwLmM6IEFkZCBzdXBwb3J0IGZvciBQT1dFUjUrKyAoaS5lLiwgUE9XRVI1KyB3aXRoIFBNVQorCSAgc2V0IHRvIFBPV0VSNiBtb2RlKQorCisyMDA3LTA2LTEyICBkZWFuIGdhdWRldCAgPGRlYW5AYXJjdGljLm9yZz4KKworCSogZXZlbnRzL2kzODYvY29yZV8yL2V2ZW50czoKKwkqIGV2ZW50cy9pMzg2L2NvcmVfMi91bml0X21hc2tzOiAgdXBkYXRlcyB0byBtYXRjaAorCSAgMjUzNjY5LTAyMlVTIElTQSB2b2wgM0IgZnJvbSBJbnRlbC4gIChJbmNsdWRpbmcgZml4CisJICBmb3IgIzE1ODAwNjQgZnJvbSBBcnVuIFNoYXJtYS4pCisKKzIwMDctMDYtMDggIGRlYW4gZ2F1ZGV0ICA8ZGVhbkBhcmN0aWMub3JnPgorCisJKiBldmVudHMveDg2LTY0L2hhbW1lci9ldmVudHM6CisJKiBldmVudHMveDg2LTY0L2hhbW1lci91bml0X21hc2tzOiB1cGRhdGVzIGZyb20gRGVjZW1iZXIgMjAwNgorCSAgQU1EIHVwZGF0ZQorCisyMDA3LTA1LTMxICBNYXluYXJkIEpvaG5zb24gPG1heW5hcmRqQHVzLmlibS5jb20+CisKKwkqIGxpYnBwL3N5bWJvbC5oOgorCSogbGlidXRpbCsrL2JmZF9zdXBwb3J0Lmg6CisJKiBtNC9jZWxsc3B1YmZkc3VwcG9ydC5tNDogRml4dXBzIGZvciBjb21waWxlIGZhaWx1cmVzIG9uIG9sZGVyIExpbnV4CisJICBkaXN0cmlidXRpb25zCisKKzIwMDctMDUtMjkgIERhdmUgTm9tdXJhICA8ZGNubHRjQHVzLmlibS5jb20+CisKKwkqIGxpYnJlZ2V4L2RlbWFuZ2xlX3N5bWJvbC5jcHA6IFN0cmlwIG9mZiBsZWFkaW5nICcuJyBnZW5lcmF0ZWQgZm9yIGVsZjZyLXBvd2VycGMgdGFyZ2V0cyBpbiBtYW5nbGVkIHN5bWJvbCBuYW1lcy4KKworMjAwNy0wNS0yNCAgUmljaGFyZCBQdXJkaWUgIDxycHVyZGllQG9wZW5lZGhhbmQuY29tPgorCisJKiBldmVudHMvYXJtL3hzY2FsZTEvZXZlbnRzOgorCSogZXZlbnRzL2FybS94c2NhbGUyL2V2ZW50czogQWRkIGV4dHJhIFhzY2FsZSBQTVUgZXZlbnQgZGVmaW5pdGlvbnMKKworMjAwNy0wNS0yNCAgUmljaGFyZCBQdXJkaWUgIDxycHVyZGllQG9wZW5lZGhhbmQuY29tPgorCisJKiBldmVudHMvYXJtL2FybXY2L2V2ZW50czoKKwkqIGV2ZW50cy9hcm0vYXJtdjYvdW5pdF9tYXNrczoKKwkqIGxpYm9wL29wX2NwdV90eXBlLmM6CisJKiBsaWJvcC9vcF9jcHVfdHlwZS5oOgorCSogbGlib3Avb3BfZXZlbnRzLmM6CisJKiB1dGlscy9vcGhlbHAuYzogTmFtZSBBUk0xMSBzdXBwb3J0IHRvIGJlIGNvbnNpc3RlbnQgd2l0aCB0aGUga2VybmVsLAorCSAgcmVtb3ZlIHNvbWUgZHVwbGljYXRlIGNvZGUgYW5kIGFkZCBzb21lIGV4dHJhIGV2ZW50cworCisyMDA3LTA1LTI0ICBSaWNoYXJkIFB1cmRpZSAgPHJwdXJkaWVAb3BlbmVkaGFuZC5jb20+CisKKwkqIG9wcm9maWxlL3BwL29wYXJjaGl2ZS5jcHA6IElmIHRoZSBkZWJ1ZyBmaWxlcyBoYXZlIHRoZSBzYW1lIG5hbWUKKwkgIGFzIHRoZSBvcmlnaW5hbCBiaW5hcnksIHRoZSBiaW5hcnkgZ2V0cyBvdmVyd3JpdHRlbi4gQWRkIGluIGEgLmRlYnVnCisJICBkaXJlY3RvcnkgdG8gYXZvaWQgdGhpcy4KKworMjAwNy0wNS0yMyAgSm9lcmcgV2FnbmVyICA8d2FnbmVyQGNjcmwtbmVjZS5kZT4KKworCSogZXZlbnRzL01ha2VmaWxlLmFtOgorCSogZXZlbnRzL2FybS9tcGNvcmUvZXZlbnRzOgorCSogZXZlbnRzL2FybS9tcGNvcmUvdW5pdF9tYXNrczoKKwkqIGxpYm9wL29wX2NwdV90eXBlLmM6CisJKiBsaWJvcC9vcF9jcHVfdHlwZS5oOgorCSogbGlib3Avb3BfZXZlbnRzLmM6CisJKiB1dGlscy9vcGhlbHAuYzogQVJNIE1QQ29yZSBzdXBwb3J0CisKKzIwMDctMDUtMjMgIFJpa3UgVm9pcGlvICA8cmlrdS52b2lwaW9AaWtpLmZpPgorCisJKiBldmVudHMvTWFrZWZpbGUuYW06CisJKiBldmVudHMvYXJtL2FybXY2L2V2ZW50czoKKwkqIGV2ZW50cy9hcm0vYXJtdjYvdW5pdF9tYXNrczoKKwkqIGxpYm9wL29wX2NwdV90eXBlLmM6CisJKiBsaWJvcC9vcF9jcHVfdHlwZS5oOgorCSogbGlib3Avb3BfZXZlbnRzLmM6CisJKiB1dGlscy9vcGhlbHAuYzogQVJNMTEgc3VwcG9ydAorCisyMDA3LTA1LTIxICBSaWNoYXJkIFB1cmRpZSAgPHJwdXJkaWVAb3BlbmVkaGFuZC5jb20+CisgIAorCSogZG9jL29wcmVwb3J0LnhzZDoKKwkqIGxpYnBwL2Zvcm1hdF9vdXRwdXQuY3BwOgorCSogbGlicHAvZm9ybWF0X291dHB1dC5oOgorCSogbGlicHAveG1sX3V0aWxzLmNwcDoKKwkqIGxpYnV0aWwrKy94bWxfb3V0cHV0LmNwcDoKKwkqIGxpYnV0aWwrKy94bWxfb3V0cHV0Lmg6CisJKiBwcC9vcHJlcG9ydC5jcHA6CisJKiBwcC9vcHJlcG9ydF9vcHRpb25zLmNwcDogQWRkIGNhbGxncmFwaCBYTUwgb3V0cHV0CisgCisyMDA3LTA1LTIwICBEZWFuIEdhdWRldCAgPGRnYXVkZXRAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJKiBldmVudHMvaTM4Ni9jb3JlXzIvZXZlbnRzOiBJVExCX01JU1NfUkVUSVJFRCxNRU1fTE9BRF9SRVRJUkVECisJICBvbmx5IHdvcmsgd2l0aCBjb3VudGVyIDAKKworMjAwNy0wNS0yMCAgUmljaGFyZCBQdXJkaWUgIDxycHVyZGllQG9wZW5lZGhhbmQuY29tPgorCisJKiBsaWJwcC9jYWxsZ3JhcGhfY29udGFpbmVyLmNwcDoKKwkqIGxpYnBwL2NhbGxncmFwaF9jb250YWluZXIuaDoKKwkqIGxpYnBwL2Zvcm1hdF9vdXRwdXQuY3BwOgorCSogbGlicHAvZm9ybWF0X291dHB1dC5oOgorCSogbGlicHAvc3ltYm9sLmg6CisJKiBsaWJwcC9zeW1ib2xfc29ydC5jcHA6CisJKiBsaWJwcC9zeW1ib2xfc29ydC5oOgorCSogcHAvb3ByZXBvcnQuY3BwOiBDb252ZXJ0IGNnX2NvbGxlY3Rpb24gdG8gc3ltYm9sX2NvbGxlY3Rpb24gYW5kIHVzZQorCWR5bmFtaWMgY2FzdGluZyBhbGxvd2luZyBtb3JlIGNvZGUgcmV1c2UgZm9yIGNhbGxncmFwaHMKKworMjAwNy0wNS0xOSAgUmljaGFyZCBQdXJkaWUgIDxycHVyZGllQG9wZW5lZGhhbmQuY29tPgorCisJKiBkb2Mvb3BhcmNoaXZlLjEuaW46CisJKiBkb2Mvb3Byb2ZpbGUueG1sOgorCSogcHAvb3BhcmNoaXZlLmNwcDoKKwkqIHBwL29wYXJjaGl2ZV9vcHRpb25zLmNwcDoKKwkqIHBwL29wYXJjaGl2ZV9vcHRpb25zLmg6IEFkZCAtLWxpc3QtZmlsZXMgb3B0aW9uIHRvIGxpc3QgYWxsIGZpbGVzCisJICB0aGF0IHdvdWxkIGJlIGhhbmRsZWQgYnkgb3BhcmNoaXZlLgorCisyMDA3LTA1LTE5ICBPbG9mIEpvaGFuc3NvbiAgPG9sb2ZAbGl4b20ubmV0PgorCisJKiBldmVudHMvTWFrZWZpbGUuaW46CisJKiBldmVudHMvcHBjNjQvcGE2dC9ldmVudF9tYXBwaW5nczoKKwkqIGV2ZW50cy9wcGM2NC9wYTZ0L2V2ZW50czoKKwkqIGV2ZW50cy9wcGM2NC9wYTZ0L3VuaXRfbWFza3M6CisJKiBsaWJvcC9vcF9jcHVfdHlwZS5jOgorCSogbGlib3Avb3BfY3B1X3R5cGUuaDoKKwkqIGxpYm9wL29wX2V2ZW50cy5jOgorCSogdXRpbHMvb3Bjb250cm9sOgorCSogdXRpbHMvb3BoZWxwLmM6IFBBIFNlbWkgNlQgc3VwcG9ydAorCisyMDA3LTA1LTA5ICBSaWNoYXJkIFB1cmRpZSAgPHJwdXJkaWVAb3BlbmVkaGFuZC5jb20+CisKKwkqIG9wcm9maWxlL2RhZW1vbi9vcGRfY29va2llLmM6IEZpeCBzeXNjYWxsIGZvciBBUk0gRUFCSQorCisyMDA3LTA1LTEwICBNYXluYXJkIEpvaG5zb24gPG1heW5hcmRqQHVzLmlibS5jb20+CisKKwkqIGxpYnBwL01ha2VmaWxlLmFtOgorCSogbGlicHAvcG9wdWxhdGUuY3BwOgorCSogbGlicHAvcG9wdWxhdGVfZm9yX3NwdS5jcHA6CisJKiBsaWJwcC9wb3B1bGF0ZV9mb3Jfc3B1Lmg6CisJKiBsaWJwcC9wcm9maWxlLmg6CisJKiBsaWJwcC9wcm9maWxlLmNwcDoKKwkqIGxpYnV0aWwrKy9NYWtlZmlsZS5hbToKKwkqIGxpYnV0aWwrKy9iZmRfc3B1X3N1cHBvcnQuY3BwOgorCSogbGlidXRpbCsrL2JmZF9zdXBwb3J0Lmg6CisJKiBsaWJ1dGlsKysvb3BfYmZkLmg6CisJKiBsaWJ1dGlsKysvb3Bfc3B1X2JmZC5jcHA6CisJKiBsaWJwcC94bWxfdXRpbHMuY3BwOgorCSogbGlicHAvcHJvZmlsZV9jb250YWluZXIuY3BwOgorCSogbGlicHAvc3ltYm9sLmg6IFBhdGNoIDMgb2YgMyBmb3IgYWRkaW5nIHN1cHBvcnQgZm9yIHByb2ZpbGluZworCSAgQ2VsbCBCcm9hZGJhbmQgRW5naW5lIFNQVQorCisyMDA3LTA1LTEwICBNYXluYXJkIEpvaG5zb24gPG1heW5hcmRqQHVzLmlibS5jb20+CisKKwkqIGRhZW1vbi9saWJsZWdhY3kvb3BkX3NhbXBsZV9maWxlcy5jOgorCSogZGFlbW9uL29wZF9ldmVudHMuYzoKKwkqIGRhZW1vbi9vcGRfZXZlbnRzLmg6CisJKiBkYWVtb24vb3BkX2ludGVyZmFjZS5oOgorCSogZGFlbW9uL01ha2VmaWxlLmFtOgorCSogZGFlbW9uL29wZF9tYW5nbGluZy5jOgorCSogZGFlbW9uL29wZF9zZmlsZS5jOgorCSogZGFlbW9uL29wZF9zZmlsZS5oOgorCSogZGFlbW9uL29wZF9zcHUuYzoKKwkqIGRhZW1vbi9vcGRfdHJhbnMuYzoKKwkqIGRhZW1vbi9vcGRfdHJhbnMuaDoKKwkqIGxpYm9wL29wX3NhbXBsZV9maWxlLmg6IFBhdGNoIDIgb2YgMyBmb3IgYWRkaW5nIHN1cHBvcnQgZm9yIHByb2ZpbGluZworCSAgQ2VsbCBCcm9hZGJhbmQgRW5naW5lIFNQVQorCisyMDA3LTA1LTEwICBNYXluYXJkIEpvaG5zb24gPG1heW5hcmRqQHVzLmlibS5jb20+CisKKwkqIGNvbmZpZ3VyZS5pbjoKKwkqIGRvYy9vcHJvZmlsZS54bWw6CisJKiBldmVudHMvcHBjNjQvY2VsbC1iZS9ldmVudHM6CisJKiBtNC9NYWtlZmlsZS5hbToKKwkqIG00L2NlbGxzcHViZmRzdXBwb3J0Lm00OgorCSogdXRpbHMvb3Bjb250cm9sOiBQYXRjaCAxIG9mIDMgZm9yIGFkZGluZyBzdXBwb3J0IGZvciBwcm9maWxpbmcKKwkgIENlbGwgQnJvYWRiYW5kIEVuZ2luZSBTUFUKKworMjAwNy0wNC0yNSAgTWFub2ogRWtib3RlICA8bWFub2ouZWtib3RlQGJyb2FkY29tLmNvbT4KKworCSogZXZlbnRzL21pcHMvc2IxL2V2ZW50czogZml4IFNCMSBldmVudHMKKworMjAwNy0wNC0xOSAgRGF2ZSBOb211cmEgIDxkY25sdGNAdXMuaWJtLmNvbT4KKworCSogZXZlbnRzL3BwYzY0L3Bvd2VyNi9ldmVudHM6IGNvdW50ZXIgMyBzaG91bGQgaGF2ZSBiZWVuIHVzZWQgCisJICBpbiB0aGUgc3BlY2lmaWNhdGlvbiBvZiB0aGUgZGVmYXVsdCBDWUNMRVMgZXZlbnQsIG5vdCBjb3VudGVyIDEKKworMjAwNy0wNC0xMyAgV2lsbCBDb2hlbiAgPHdjb2hlbkByZWRoYXQuY29tPgorCisJKiBsaWJvcC9vcF9jcHVfdHlwZS5jOgorCSogbGlib3Avb3BfY3B1X3R5cGUuaDogTW92ZSBuZXcgZW50cmllcyB0byBlbmQgb2YgbGlzdAorCXRvIGltcHJvdmUgYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3aXRoIGVudW0gdmFsdWVzLgorCQorMjAwNy0wNC0xMSAgSm9obiBMZXZvbiAgPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorCisJKiBkb2Mvb3Byb2ZpbGUueG1sOiBJUkMgY2hhbm5lbCBpcyBvbiBPRlRDCisKKzIwMDctMDQtMTAgIFBoaWxpcHBlIEVsaWUgIDxwaGlsLmVsQHdhbmFkb28uZnI+CisKKwkqIHV0aWxzL29waGVscC5jOiBpZiB1c2Vyc3BhY2UgZG9lc24ndCByZWNvZ25pemUgdGhlIGNwdSB0eXBlCisJICB3YXJuIHRoZSB1c2VyIGl0IGNhbiB1c2UgdGltZXIgbW9kZSBvciB1cGdyYWRlIG9wcm9maWxlLgorCisyMDA3LTA0LTA0ICBNYXluYXJkIGpvaG5zb24gPG1heW5hcmRqQHVzLmlibS5jb20+CisKKwkqIGxpYnV0aWwrKy9maWxlX21hbmlwLmNwcDogY2F0Y2ggcmVzdWx0IGZyb20gY2hvd24oKSB0byBhdm9pZAorCSAgY29tcGlsYXRpb24gd2FybmluZyAodHJlYXRlZCBhcyBlcnJvcikKKworMjAwNy0wMy0yMyAgSmFzb24gWWVoICA8amFzb24ueWVoQGFtZC5jb20+CisKKwkqIGV2ZW50cy9NYWtlZmlsZS5hbToKKwkqIGV2ZW50cy94ODYtNjQvZmFtaWx5MTAvZXZlbnRzOgorCSogZXZlbnRzL3g4Ni02NC9mYW1pbHkxMC91bml0X21hc2tzOgorCSogbGlib3Avb3BfY3B1X3R5cGUuYzoKKwkqIGxpYm9wL29wX2NwdV90eXBlLmg6CisJKiBsaWJvcC9vcF9ldmVudHMuYzoKKwkqIHV0aWxzL29waGVscC5jOiBBZGQgQU1EIEZhbWlseSAxMCBzdXBwb3J0LgorCQorMjAwNy0wMi0yOCAgUm9iIEJyYWRmb3JkICA8cm9iQG8taGFuZC5jb20+CisKKwkqIHBwL29wYXJjaGl2ZS5jcHA6IHJldHVybiBmcm9tIG1haW4KKworMjAwNy0wMi0yMSAgUm9iIEJyYWRmb3JkIDxyb2JAby1oYW5kLmNvbT4KKworCVJldmVydGVkIHByZXZpb3VzIHBhdGNoZXMuCisJKiBwcC9vcGFyY2hpdmUuY3BwOiBTYXZlIGRlYnVnaW5mbyBmaWxlcyBpbiAuZGVidWcgc3ViIGRpcmVjdG9yeS4KKworCSogcHAvb3BhcmNoaXZlLmNwcDoKKwkqIHBwL29wYXJjaGl2ZV9vcHRpb25zLmg6CisJKiBwcC9vcGFyY2hpdmVfb3B0aW9ucy5jcHA6IExpc3QgZmlsZXMgb3B0aW9uLgorCisyMDA3LTAyLTIxICBSb2IgQnJhZGZvcmQgPHJvYkBvLWhhbmQuY29tPgorCisJKiBwcC9vcGFyY2hpdmUuY3BwOiBTYXZlIGRlYnVnaW5mbyBmaWxlcyBpbiAuZGVidWcgc3ViIGRpcmVjdG9yeS4KKworCSogcHAvb3BhcmNoaXZlLmNwcDoKKwkqIHBwL29wYXJjaGl2ZV9vcHRpb25zLmg6CisJKiBwcC9vcGFyY2hpdmVfb3B0aW9ucy5jcHA6IExpc3QgZmlsZXMgb3B0aW9uLgorCisyMDA3LTAyLTE2ICBQaGlsaXBwZSBFbGllICA8cGhpbC5lbEB3YW5hZG9vLmZyPgorCisJKiBkYWVtb24vb3BkX21hbmdsaW5nLmM6IG1pc3NpbmcgaW5pdGlhbGlzYXRpb24gd2hlbiBtYW5nbGluZyBhbiAKKwkgIGFub24gYW5kIGNhbGxncmFwaCBmaWxlbmFtZS4gRml4IGdpdmVuIGJ5IEFtaXRhYmhhIFJveS4KKworMjAwNy0wMi0wNiAgRGF2ZSBOb211cmEgPGRjbmx0Y0B1cy5pYm0uY29tPgorCisJKiBsaWJwcC9zeW1ib2wuaDoKKwkqIGxpYnV0aWwrKy9NYWtlZmlsZS5hbToKKwkqIGxpYnV0aWwrKy9zcGFyc2VfYXJyYXkuaDogcmVwcmVzZW50IGNvdW50X2FycmF5X3QgYXMgYSBzcGFyc2UgCisJICBhcnJheSB0eXBlIGJhc2VkIG9uIHN0ZDo6bWFwIHJhdGhlciB0aGFuIGdyb3dhYmxlX3ZlY3RvciB3aGljaCBpcworCSAgYmFzZWQgb24gc3RkOjp2ZWN0b3IgdG8gcmVkdWNlIHRoZSBleGNlc3NpdmUgaGVhcCB1c2FnZSBvbiBsYXJnZQorCSAgcHJvZmlsZXMuCisKKzIwMDctMDItMDIgIEFtaXRhYmhhIFJveSAgPGFtaXRhYmhhLnJveUBnbWFpbC5jb20+CisKKwkqIGRhZW1vbi9vcGRfYW5vbi5jOgorCSogZGFlbW9uL29wZF9hbm9uLmg6CisJKiBkYWVtb24vb3BkX21hbmdsaW5nLmM6CisJKiBsaWJvcC9vcF9tYW5nbGUuYzoKKwkqIGxpYm9wL29wX21hbmdsZS5oOgorCSogbGlicHAvcGFyc2VfZmlsZW5hbWUuY3BwOiBzYXZlIGFuZCByZXBvcnQgbmFtZSBvZiBhbm9ueW1vdXMKKwkgIG1hcHBpbmcgaWYgdGhlcmUgaXMgb25lIChhcyBzZWxmLWNvbnRyYWRpY3RvcnkgYXMgdGhhdAorCSAgc291bmRzKS4KKworMjAwNy0wMi0wMiAgRGF2ZSBOb211cmEgPGRjbmx0Y0B1cy5pYm0uY29tPgorCisJKiBldmVudHMvTWFrZWZpbGUuYW06CisJKiBldmVudHMvcHBjNjQvOTcwTVAvZXZlbnRfbWFwcGluZ3M6CisJKiBldmVudHMvcHBjNjQvOTcwTVAvZXZlbnRzOgorCSogZXZlbnRzL3BwYzY0Lzk3ME1QL3VuaXRfbWFza3M6CisJKiBsaWJvcC9vcF9jcHVfdHlwZS5jOgorCSogbGlib3Avb3BfY3B1X3R5cGUuaDoKKwkqIGxpYm9wL29wX2V2ZW50cy5jOgorCSogdXRpbHMvb3BoZWxwLmM6IFBQQzk3ME1QIGhhcyBkaWZmZXJlbnQgaGFyZHdhcmUgY291bnRlcnMgdGhhbiB0aGUgcmVzdAorCSAgb2YgdGhlIFBQQyBmYW1pbHkgYW5kIG11c3QgYmUgdHJlYXRlZCBhcyBhIGRpZmZlcmVudCBhcmNoaXRlY3R1cmUKKwkgIGJ5IG9wcm9maWxlLgorCisyMDA3LTAxLTMxICBEYXZlIE5vbXVyYSA8ZGNubHRjQHVzLmlibS5jb20+CisKKwkqIGxpYnBwL3htbF91dGlscy5jcHA6IG9wcmVwb3J0IC1YIHdhcyBzdGlsbCBnZXR0aW5nIHNvbWUgaW5jb3JyZWN0IAorCSAgc3ltYm9scyBhdHRyaWJ1dGVkIHRvIHRoZSA8YmluYXJ5PiB3aGVuIHByb2Nlc3NpbmcgYSAtLXNlcGFyYXRlPWxpYgorCSAgcHJvZmlsZS4KKwkgIAorMjAwNy0wMS0yOSAgUGhpbGlwcGUgRWxpZSAgPHBoaWwuZWxAd2FuYWRvby5mcj4KKworCSogZGFlbW9uL29wcm9maWxlZC5jOiBubyBuZWVkIGZvciAwNzU1IGZvciB0aGUgbG9nIGZpbGUgbW9kZSwgdXNlIDA2NDQKKwkqIHV0aWxzL29wY29udHJvbDogZG9uJ3QgY3JlYXRlIHRoZSBsb2cgaW4gb3Bjb250cm9sCisKKzIwMDctMDEtMjYgIERhdmUgTm9tdXJhIDxkY25sdGNAdXMuaWJtLmNvbT4KKworCSogbGlicHAvZm9ybWF0X291dHB1dC5jcHA6CisJKiBsaWJwcC94bWxfdXRpbHMuY3BwOiBvcHJlcG9ydCAtWCB3YXMgbWl4aW5nIHRoZSBzeW1ib2xzIGFzc29jaWF0ZWQgd2l0aAorCSAgYW4gYXBwbGljYXRpb24gd2l0aCB0aG9zZSBvZiBhIGxpYnJhcnkgd2hlbiBwcm9jZXNzaW5nIGEgLS1zZXBhcmF0ZT1saWIKKwkgIHByb2ZpbGUuCisKKzIwMDctMDEtMDIgIERhdmUgTm9tdXJhIDxkY25sdGNAdXMuaWJtLmNvbT4KKworCSogZXZlbnRzL01ha2VmaWxlLmFtOgorCSogZXZlbnRzL3BwYzY0L3Bvd2VyNi9ldmVudF9tYXBwaW5nczoKKwkqIGV2ZW50cy9wcGM2NC9wb3dlcjYvZXZlbnRzOgorCSogZXZlbnRzL3BwYzY0L3Bvd2VyNi91bml0X21hc2tzOgorCSogbGlib3Avb3BfY3B1X3R5cGUuYzoKKwkqIGxpYm9wL29wX2NwdV90eXBlLmg6CisJKiBsaWJvcC9vcF9ldmVudHMuYzoKKwkqIHV0aWxzL29wY29udHJvbDoKKwkqIHV0aWxzL29waGVscC5jOiAgQWRkIHN1cHBvcnQgZm9yIFBvd2VyNgorCisKK1NlZSBDaGFuZ2VMb2ctMjAwNiBmb3IgZWFybGllciBjaGFuZ2Vsb2dzLgpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvQ2hhbmdlTG9nLTIwMDggYi9vcHJvZmlsZS0wLjkuNy9DaGFuZ2VMb2ctMjAwOApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTQzODg5Ci0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvQ2hhbmdlTG9nLTIwMDgKQEAgLTAsMCArMSw0NTEgQEAKKzIwMDgtMTItMjMgIE1heW5hcmQgSm9obnNvbiAgPG1heW5hcmRqQHVzLmlibS5jb20+CisKKwkqIHV0aWxzL29wY29udHJvbDogcmV2ZXJzZSB0aGUgbG9naWMgaW4KKwkgIGlzX25vbl9jZWxsX3BwYzY0X3ZhcmlhbnQgdG8gYXZvaWQgdGhlIG5lZWQKKwkgIGZvciBtYWludGVuYW5jZSBhcyBuZXcgcHBjNjQgdmFyaWFudHMgYXJlIGFkZGRlZAorCisyMDA4LTEyLTEyICBNYXluYXJkIEpvaG5zb24gIDxtYXluYXJkakB1cy5pYm0uY29tPgorCisJKiBsaWJvcC9NYWtlZmlsZS5hbTogQWRkIEFuZGkgS2xlZW4ncyBuZXcgb3BfaHdfc3BlY2lmaWMuaAorCSAgZmlsZSB0byB0byBNYWtlZmlsZS5hbQorCisyMDA4LTExLTI0ICBSb2JlcnQgUmljaHRlciA8cm9iZXJ0LnJpY2h0ZXJAYW1kLmNvbT4KKworCSogdXRpbHMvb3Bjb250cm9sOiBDb3JyZWN0IHNwZWxsaW5nIGVycm9yCisKKzIwMDgtMTEtMjQgIFJvYmVydCBSaWNodGVyIDxyb2JlcnQucmljaHRlckBhbWQuY29tPgorCisJKiBkYWVtb24vb3BkX2V2ZW50cy5jOgorCSogZGFlbW9uL29wZF9ldmVudHMuaDoKKwkqIGRhZW1vbi9vcGRfbWFuZ2xpbmcuYzoKKwkqIGRhZW1vbi9vcGRfbWFuZ2xpbmcuaDoKKwkqIGRhZW1vbi9vcGRfc2ZpbGUuYzoKKwkqIGRhZW1vbi9vcGRfdHJhbnMuYzoKKwkqIGV2ZW50cy94ODYtNjQvZmFtaWx5MTAvZXZlbnRzOgorCSogdXRpbHMvb3Bjb250cm9sOiBmaXggd2hpdGVzcGFjZXMKKworMjAwOC0xMS0xMiAgQW5kaSBLbGVlbiAgPGFuZGlAZmlyc3RmbG9vci5vcmc+CisKKwkqIGxpYm9wL29wX2V2ZW50cy5jCisJKiBsaWJvcC9vcF9ldmVudHMuaAorCSogbGlicHAvb3BfaGVhZGVyLmNwcDogRml4IHJlZ3Jlc3Npb24gaW4gYXJjaCBwZXJmbW9uIGNvZGUKKwkgIChzZWUgYnVnICMyMTYxNzYyKQorCisyMDA4LTExLTEyICBBbmRpIEtsZWVuICA8YW5kaUBmaXJzdGZsb29yLm9yZz4KKworCSogZXZlbnRzL2kzODYvYXJjaF9wZXJmbW9uL2V2ZW50czogRml4IGV2ZW50IG5hbWUgdG8gYXZvaWQKKwkgIHBhcnNpbmcgZXJyb3IKKworMjAwOC0xMS0wNSAgTWF5bmFyZCBKb2huc29uICA8bWF5bmFyZGpAdXMuaWJtLmNvbT4KKworCSogbGlidXRpbCsrL2ZpbGVfbWFuaXAuY3BwOiBBZGQgbW9kZSBhcmcgdG8gb3BlbgorCisyMDA4LTEwLTMwICBXaWxsaWFtIENvaGVuICA8d2NvaGVuQHJlZGhhdC5jb20+CisKKwkqIG00L2JpbnV0aWxzLm00OiBEZWZlYXQgY29tcGlsZXIgb3B0aW1pemF0aW9uIGluIGNvbmZpZ3VyZQorCSAgY2hlY2sgZm9yIGJmZF9nZXRfc3ludGhldGljX3N5bXRhYgorCisyMDA4LTEwLTI3ICBNYXluYXJkIEpvaG5zb24gIDxtYXluYXJkakB1cy5pYm0uY29tPgorCisJKiBsaWJ1dGlsKysvb3Bfc3B1X2JmZC5jcHA6IEluaXRpYWxpemUgYW5vbl9vYmogdG8gZmFsc2UgZm9yIG9wX2JmZAorCSAgb2JqZWN0cyBmb3IgQ2VsbCBTUEUgZW1iZWRkZWQgYmluYXJpZXMKKworMjAwOC0xMC0yMyAgRGF2ZSBOb211cmEgIDxkY25sdGNAdXMuaWJtLmNvbT4KKworCSogbGlidXRpbCsrL3htbF9vdXRwdXQuY3BwOgorCSogbGlidXRpbC94bWxfb3V0LmM6CisJKiBsaWJ1dGlsL3htbF9vdXQuaDoKKwkqIGxpYnV0aWwveG1sX2V2ZW50cy5jOgorCSogbGlidXRpbC94bWxfZXZlbnRzLmg6CisJKiBsaWJ1dGlsL01ha2VmaWxlLmFtOgorCSogbGlib3Avb3BfeG1sX291dC5jOgorCSogbGlib3Avb3BfeG1sX291dC5oOgorCSogbGlib3Avb3BfeG1sX2V2ZW50cy5jOgorCSogbGlib3Avb3BfeG1sX2V2ZW50cy5oOgorCSogbGlib3AvTWFrZWZpbGUuYW06IG1vdmVkIHhtbCB1dGlsIHJvdXRpbmVzIHRvIGxpYm9wIGFuZCBmaXhlZCBzb21lCisJICBvdGhlciBwcm9ibGVtcyBpbiB0aGUgcHJldmlvdXMgcGF0Y2gKKworMjAwOC0xMC0xNSAgRGF2ZSBOb211cmEgIDxkY25sdGNAdXMuaWJtLmNvbT4KKworCSogdXRpbHMvb3BoZWxwLmM6CisJKiBsaWJ1dGlsKysveG1sX291dHB1dC5jcHA6CisJKiBsaWJ1dGlsKysveG1sX291dHB1dC5oOgorCSogbGlidXRpbC94bWxfb3V0LmM6CisJKiBsaWJ1dGlsL3htbF9vdXQuaDoKKwkqIGxpYnV0aWwveG1sX2V2ZW50cy5jOgorCSogbGlidXRpbC94bWxfZXZlbnRzLmg6CisJKiBsaWJ1dGlsL01ha2VmaWxlLmFtOiBhZGRlZCAtWCBvcHRpb24gdG8gb3BoZWxwIHRvIGdlbmVyYXRlIFhNTAorCisyMDA4LTEwLTA2ICBNYXluYXJkIEpvaG5zb24gIDxtYXluYXJkakB1cy5pYm0uY29tPgorCisJKiBjb25maWd1cmUuaW46CisJKiBtNC9iaW51dGlscy5tNDoKKwkqIG00L2NlbGxzcHViZmRzdXBwb3J0Lm00OiBIYW5kbGUgQkZEJ3MgbmV3IGRlcGVuZGVuY3kgb24gbGliegorCisyMDA4LTA4LTI4ICBNYXluYXJkIEpvaG5zb24gIDxtYXluYXJkakB1cy5pYm0uY29tPgorCisJKiBjb25maWd1cmUuaW46IEFkZCBjb25maWd1cmUgb3B0aW9uIGZvciBub24tc3RhbmRhcmQgYmludXRpbHMgbGliCisKKzIwMDgtMDgtMjggIEFuZGkgS2xlZW4gIDxhbmRpQGZpcnN0Zmxvb3Iub3JnPgorCisJKiBldmVudHMvaTM4Ni9hcmNoX3BlcmZtb24vZXZlbnRzOgorCSogZXZlbnRzL2kzODYvYXJjaF9wZXJmbW9uL3VuaXRfbWFza3M6CisJKiBldmVudHMvTWFrZWZpbGUuYW06CisJKiBsaWJvcC9vcF9jcHVfdHlwZS5jOgorCSogbGlib3Avb3BfY3B1X3R5cGUuaDoKKwkqIGxpYm9wL29wX2V2ZW50cy5jOgorCSogbGlib3Avb3BfZXZlbnRzLmg6CisJKiBsaWJvcC9vcF9od19zcGVjaWZpYy5oOgorCSogbGlicHAvb3BfaGVhZGVyLmNwcDoKKwkqIHV0aWxzL29waGVscC5jOiBzdXBwb3J0IGZvciBJbnRlbCBhcmNoIHBlcmZtb24KKworMjAwOC0wOC0yOCAgTWF5bmFyZCBKb2huc29uICA8bWF5bmFyZGpAdXMuaWJtLmNvbT4KKworCSogY29uZmlndXJlLmluOiBDaGFuZ2UgQU1fSU5JVF9BVVRPTUFLRSB0byAwLjkuNWN2czsgZW5hYmxlcyAtd2Vycm9yCisJICBnY2Mgb3B0aW9uIHRvIHN0b3AgYnVpbGQgb24gd2FybmluZ3MKKworMjAwOC0wOC0yNyAgSmF0aW4gTmFuc2kgPGpuYW5zaUByZWRoYXQuY29tPgorCisJKiB1dGlscy9vcGNvbnRyb2w6IHZlY2hvIHBhcmFtZXRlcnMgYWZ0ZXIgIi0tdmVyYm9zZSIgb3B0aW9uIHByb2Nlc3NlZAorCisyMDA4LTA4LTA4ICBEYW5pZWwgSGFuc2VsIDxkYW5pZWwuaGFuc2VsQGxpbnV4LnZuZXQuaWJtLmNvbT4KKworCSogZGFlbW9uL2luaXQuYzogRml4ZWQgY2FsbCBvZiBleGVjdnAoKSB0byBleGVjdXRlIG9waml0Y29udiBpZgorCSAgaXQgaXMgaW5zdGFsbGVkIGluIGEgY3VzdG9tIGRpcmVjdG9yeQorCisyMDA4LTA4LTA3ICBNYXluYXJkIEpvaG5zb24gIDxtYXluYXJkakB1cy5pYm0uY29tPgorCisJKiBsaWJ1dGlsKysvYmZkX3N1cHBvcnQuY3BwOgorCSogbGlidXRpbCsrL29wX2JmZC5jcHA6CisJKiBsaWJ1dGlsKysvb3BfYmZkLmg6IEZpeCBhIGNvdXBsZSBwcm9ibGVtcyByZWxhdGluZworCSAgdG8gb3ZlcmxheSBzeW1ib2xzIGZvciBDZWxsIFNQRSBhcHBsaWNhdGlvbnMKKworMjAwOC0wNy0zMSAgTWF5bmFyZCBKb2huc29uICA8bWF5bmFyZGpAdXMuaWJtLmNvbT4KKworCSogY29uZmlndXJlLmluOiBGaXggdG8gYWxsb3cgbGlidG9vbCB0byByZWNvZ25pemUKKwkgIGFsdGVybmF0ZSBiaW51dGlscyBkaXIgcGFzc2VkIHZpYSAtLXdpdGgtYmludXRpbHMKKworMjAwOC0wNy0yNCAgSmVhbiBQaWhldCA8anBpaGV0QG12aXN0YS5jb20+CisKKwkqIGV2ZW50cy9hcm0vYXJtdjcvZXZlbnRzOgorCSogZXZlbnRzL2FybS9hcm12Ny91bml0X21hc2tzOgorCSogbGlib3Avb3BfY3B1X3R5cGUuYzoKKwkqIGxpYm9wL29wX2NwdV90eXBlLmg6CisJKiBsaWJvcC9vcF9ldmVudHMuYzoKKwkqIHV0aWxzL29waGVscC5jOiBBZGRlZCBBUk12NyBzdXBwb3J0IHRvIGJlIGNvbnNpc3RlbnQgd2l0aCB0aGUKKwkgIGtlcm5lbCwgYWRkZWQgQVJNdjcgc3BlY2lmaWMgZXZlbnRzLgorCSAgVGVzdGVkIG9uIE9NQVAzNDMwIGFuZCBPTUFQMzUzMCBjaGlwc2V0cy4KKworMjAwOC0wNy0xNyAgTWF5bmFyZCBKb2huc29uICA8bWF5bmFyZGpAdXMuaWJtLmNvbT4KKworCSogY29uZmlndXJlLmluOiBidW1wIHZlcnNpb24gaW4gQU1fSU5JVF9BVVRPTUFLRSB0byAwLjkuNAorCisyMDA4LTA3LTE3ICBXaWxsIENvaGVuICA8d2NvaGVuQHJlZGhhdC5jb20+CisKKwkqIGxpYm9wL29wX2FsbG9jX2NvdW50ZXIuYzogQXNzdW1lIHBlcmZtb24gbWFuYWdpbmcgUE1VIGh3CisJICB3aGVuIG5vIGNvdW50ZXJzCisKKzIwMDgtMDctMDcgIE1heW5hcmQgSm9obnNvbiAgPG1heW5hcmRqQHVzLmlibS5jb20+CisKKwkqIEhBQ0tJTkc6IEFzayBjb250cmlidXRvcnMgdG8gaW5jbHVkZSBTaWduZWQtb2ZmLWJ5CisJICBsaW5lIHdpdGggdGhlaXIgcGF0Y2hlcworCisyMDA4LTA3LTAzICBSaWNoYXJkIFB1cmRpZSAgPHJwdXJkaWVAb3BlbmVkaGFuZC5jb20+CisKKwkqIGxpYnV0aWwrKy9iZmRfc3VwcG9ydC5jcHA6CisJKiBsaWJ1dGlsKysvYmZkX3N1cHBvcnQuaDoKKwkqIGxpYnV0aWwrKy9vcF9iZmQuY3BwOgorCSogbGlidXRpbCsrL29wX2JmZC5oOgorCSogbGlidXRpbCsrL29wX3NwdV9iZmQuY3BwOgorCSogcHAvb3BhcmNoaXZlLmNwcDogU3dpdGNoIHNlcGFyYXRlX2RlYnVnX2ZpbGVfZXhpc3RzKCkKKwkgIGFuZCBoZW5jZSBmaW5kX3NlcGFyYXRlX2RlYnVnX2ZpbGUoKSB0byB1c2UKKwkgIGV4dHJhX2ltYWdlczo6ZmluZF9pbWFnZV9wYXRoKCkgc28gZGVidWcgZmlsZXMgaW4gLS1yb290CisJICBkaXJlY3RvcmllcyBhcmUgY29ycmVjdGx5IGZvdW5kCisKKzIwMDgtMDctMDMgIE1heW5hcmQgSm9obnNvbiAgPG1heW5hcmRqQHVzLmlibS5jb20+CisKKwkqIENoYW5nZUxvZzogIENvcnJlY3QgZGF0ZSBvZiBwcmV2aW91cyBlbnRyeQorCSogUkVBRE1FX1BBQ0tBR0VSUzogQWRkIG1vcmUgYWR2aWNlIHRvIHBhY2thZ2VycworCSAgcmVnYXJkaW5nIHRoZSBuZXcgSklUIHN1cHBvcnQgbGlicmFyaWVzCisKKzIwMDgtMDctMDMgIE1heW5hcmQgSm9obnNvbiA8bWF5bmFyZGpAdXMuaWJtLmNvbT4KKworCSogbGlib3BhZ2VudC9NYWtlZmlsZS5hbToKKwkqIGxpYm9wYWdlbnQvb3BhZ2VudC5jOgorCSogcmVtb3ZlIGxpYm9wYWdlbnQvYmZkZGVmaW5lcy5jOiBNb3ZlIGNvZGUgZnJvbSBiZmRkZWZpbmVzCisJICB0byBsaWJvcGFnZW50IHRvIGZpeCBjcm9zcy1jb21waWxlIGVycm9yCisKKzIwMDgtMDYtMzAgIFNodW5pY2hpIEZ1amkgIDxwYWxnbG93ckBnbWFpbC5jb20+CisKKwkqIGxpYnBwL2NhbGxncmFwaF9jb250YWluZXIuY3BwOiBGaXggY29tcGlsZSB3YXJuaW5nCisJICB1c2luZyBnY2MgNC4zLjEgZm9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUKKworMjAwOC0wNi0yMyAgTWF5bmFyZCBKb2huc29uIDxtYXluYXJkakB1cy5pYm0uY29tPgorCisJKiBkYWVtb24vb3BkX3N0YXRzLmM6IERvIG5vdCBmb3JjZSBwcmludGluZyBvZiBzYW1wbGVfaW52YWxpZF9laXAKKwkgIHNpbmNlIHRoaXMgaXMgbm90IGF2YWlsYWJsZSBmcm9tIHByZS0yLjYuMjQga2VybmVscworCisyMDA4LTA2LTIzICBNYXluYXJkIEpvaG5zb24gPG1heW5hcmRqQHVzLmlibS5jb20+CisKKwkqIG9waml0Y29udi9vcGppdGNvbnYuYzogU3dpdGNoIHRvIHNwZWNpYWwgdXNlciBhY2NvdW50CisJICBhZnRlciBkZXRlcm1pbmluZyB3aGV0aGVyIG9yIG5vdCB3ZSBoYXZlIEpJVCBkdW1wIGZpbGVzCisJICB0byBwcm9jZXNzIGluIG9yZGVyIHRvIGF2b2lkIHVubmVjZXNzYXJ5IGVycm9yIG1lc3NhZ2VzCisJICBpbiBvcHJvZmlsZWQubG9nCisKKzIwMDgtMDYtMTEgIE1heW5hcmQgSm9obnNvbiA8bWF5bmFyZGpAdXMuaWJtLmNvbT4KKworCSogY29uZmlndXJlLmluOgorCSogTWFrZWZpbGUuYW06CisJKiBhZ2VudHMvTWFrZWZpbGUuYW06CisJKiBkb2Mvb3Byb2ZpbGUueG1sOiBDaGFuZ2UgbWFrZSBpbnN0YWxsIGVycm9yIHRvIHdhcm5pbmcKKwkgIGlmIHNwZWNpYWwgdXNlciBhY2NvdW50IGRvZXMgbm90IGV4aXN0CisKKzIwMDgtMDYtMTEgIE1heW5hcmQgSm9obnNvbiA8bWF5bmFyZGpAdXMuaWJtLmNvbT4KKworCSogTWFrZWZpbGUuYW06IEFkZCBSRUFETUVfUEFDS0FHRVJTIHRvIEVYVFJBX0RJU1QKKworMjAwOC0wNi0wMyAgV2lsbCBDb2hlbiAgPHdjb2hlbkByZWRoYXQuY29tPgorCisJKiBsaWJvcC9vcF9hbGxvY19jb3VudGVyLmM6IFVzZSBjb3VudGVycyBhY3R1YWxseSBhdmFpbGFibGUuCisKKzIwMDgtMDUtMjEgIEdlb3JnZSBNY0NvbGxpc3RlciAgPGdlb3JnZW1Abm92YXRlY2gtbGxjLmNvbT4KKworCSogZGFlbW9uL29wZF9jb29raWUuYzogRml4IEFSTSBiaWctZW5kaWFuIHN5c2NhbGwKKworMjAwOC0wNS0yMCAgSmFzb24gWWVoICA8amFzb24ueWVoQGFtZC5jb20+CisKKwkqIGV2ZW50cy94ODZfNjQvaGFtbWVyL2V2ZW50czoKKwkqIGV2ZW50cy94ODZfNjQvaGFtbWVyL3VuaXRfbWFza3M6CisJKiBldmVudHMveDg2XzY0L2ZhbWlseTEwL2V2ZW50czoKKwkqIGV2ZW50cy94ODZfNjQvZmFtaWx5MTAvdW5pdF9tYXNrczogdXBkYXRlIGZvciByZWNlbnQgQktERworCXJldmlzaW9ucworCisyMDA4LTA1LTE5ICBNYXluYXJkIEpvaG5zb24gPG1heW5hcmRqQHVzLmlibS5jb20+CisKKwkqIGxpYnBwL3Byb2ZpbGVfc3BlYy5jcHA6IEZpeCBidWcgaW4gZGlmZmVyZW50aWFsIHByb2ZpbGUKKwkgIHdoZW4gdXNpbmcgYXJjaGl2ZSBzcGVjIGFuZCBhbiBpbWFnZSBzcGVjCisKKzIwMDgtMDUtMTkgIE1heW5hcmQgSm9obnNvbiA8bWF5bmFyZGpAdXMuaWJtLmNvbT4KKworCSogbGlicHAvZm9ybWF0X291dHB1dC5jcHA6CisJKiBsaWJwcC94bWxfdXRpbHMuY3BwOgorCSogbGlidXRpbCsrL29wX2JmZC5jcHA6CisJKiBsaWJ1dGlsKysvb3BfYmZkLmg6IERvIG5vdCB0byB0cnkgdG8gZ2V0IHN5bWJvbCBjb250ZW50cworCSAgZm9yIGFydGlmaWNpYWwgc3ltYm9scyBhbmQgb3RoZXIgY2FzZXMgd2hlcmUgbm8gc3ltYm9sIGNvbnRlbnRzCisJICBleGlzdC4gIEFsc28gY2hhbmdlIHRvIHVzZSBzY29wZWQgYXJyYXkgZm9yIHN5bWJvbCBjb250ZW50cworCSAgaW5zdGVhZCBvZiBhdXRvbWF0aWMgYWxsb2NhdGlvbiBmcm9tIHRoZSBzdGFjayB0byBhdm9pZCBhbGxvY2F0aW9uCisJICBhdHRlbXB0IGV4Y2VlZGluZyBtYXggc3RhY2sgc2l6ZS4KKworMjAwOC0wNS0wOSAgTWF5bmFyZCBKb2huc29uICA8bWF5bmFyZGpAdXMuaWJtLmNvbT4KKworCSogY29uZmlndXJlLmluOgorCSogTWFrZWZpbGUuYW06IEltcHJvdmUgZXJyb3IgbWVzc2FnZXMgZm9yIHNwZWNpYWwgdXNlciBhY2NvdW50IGNoZWNrcworCisyMDA4LTA1LTA4ICBNYXluYXJkIEpvaG5zb24gIDxtYXluYXJkakB1cy5pYm0uY29tPgorCisJKiBsaWJwcC9jYWxsZ3JhcGhfY29udGFpbmVyLmNwcDoKKwkqIGxpYnBwL3Byb2ZpbGVfY29udGFpbmVyLmNwcDoKKwkqIGxpYnV0aWwrKy9vcF9iZmQuaDoKKwkqIGxpYnV0aWwrKy9vcF9iZmQuY3BwOiBGaXggdG8gYWxsb3cgMzItYml0IG9wcmVwb3J0IHRvCisJICBwcm9wZXJseSBwcm9jZXNzIHNhbXBsZXMgZnJvbSA2NC1iaXQgSklUIHByb2ZpbGUgYWdlbnQKKworMjAwOC0wNC0yOSAgUmVuw6kgUmViZSAgPHJlbmVAZXhhY3Rjb2RlLmRlPgorCisgICAgICAgICogbGliYWJpL29waW1wb3J0LmNwcDoKKyAgICAgICAgKiBsaWJwcC9vcF9oZWFkZXIuY3BwOgorICAgICAgICAqIGxpYnBwL3Byb2ZpbGUuY3BwOgorICAgICAgICAqIGxpYnV0aWwrKy9iZmRfc3VwcG9ydC5jcHA6CisgICAgICAgICogbGlidXRpbCsrL2N2ZXJiLmNwcDoKKyAgICAgICAgKiBsaWJ1dGlsKysvb3BfYmZkLmNwcDoKKyAgICAgICAgKiBsaWJ1dGlsKysvb3Bfc3B1X2JmZC5jcHA6CisgICAgICAgICogcHAvY29tbW9uX29wdGlvbi5jcHA6CisgICAgICAgICogcHAvb3Bhbm5vdGF0ZV9vcHRpb25zLmNwcDoKKyAgICAgICAgKiBwcC9vcGFyY2hpdmUuY3BwOgorICAgICAgICAqIHBwL29wZ3Byb2Zfb3B0aW9ucy5jcHA6IGFkZGVkIGV4cGxpY2l0IGluY2x1ZGVzIGZvciBDIGZ1bmN0aW9ucworCSAgYXMgcmVxdWlyZWQgZm9yIGNvbXBpbGF0aW9uIHdpdGggR0NDLTQuMworCisyMDA4LTA0LTI4ICBEYW5pZWwgSGFuc2VsIDxkYW5pZWwuaGFuc2VsQGxpbnV4LnZuZXQuaWJtLmNvbT4KKworCSogb3Byb2ZpbGUvYWdlbnRzL2p2bXBpL2p2bXBpX29wcm9maWxlLmNwcDoKKwkqIG9wcm9maWxlL2FnZW50cy9qdm1waS9NYWtlZmlsZS5hbToKKwkqIG9wcm9maWxlL2FnZW50cy9qdm10aS9saWJqdm10aV9vcHJvZmlsZS5jOgorCSogb3Byb2ZpbGUvYWdlbnRzL2p2bXRpL01ha2VmaWxlLmFtOgorCSogb3Byb2ZpbGUvYWdlbnRzL01ha2VmaWxlLmFtOgorCSogb3Byb2ZpbGUvYXV0b2dlbi5zaDoKKwkqIG9wcm9maWxlL2NvbmZpZ3VyZS5pbjoKKwkqIG9wcm9maWxlL2RhZW1vbi9pbml0LmM6CisJKiBvcHJvZmlsZS9kYWVtb24vTWFrZWZpbGUuYW06CisJKiBvcHJvZmlsZS9kYWVtb24vb3BkX2Fub24uYzoKKwkqIG9wcm9maWxlL2RhZW1vbi9vcGRfcGlwZS5jOgorCSogb3Byb2ZpbGUvZGFlbW9uL29wZF9waXBlLmg6CisJKiBvcHJvZmlsZS9kYWVtb24vb3Byb2ZpbGVkLmM6CisJKiBvcHJvZmlsZS9kYWVtb24vb3Byb2ZpbGVkLmg6CisJKiBvcHJvZmlsZS9kb2MvTWFrZWZpbGUuYW06CisJKiBvcHJvZmlsZS9kb2Mvb3Ataml0LWRldmVsLnhtbDoKKwkqIG9wcm9maWxlL2RvYy9vcHJvZmlsZS54bWw6CisJKiBvcHJvZmlsZS9saWJvcC9vcF9jb25maWcuYzoKKwkqIG9wcm9maWxlL2xpYm9wL29wX2NvbmZpZy5oOgorCSogb3Byb2ZpbGUvbGlib3BhZ2VudC9iZmRkZWZpbmVzLmM6CisJKiBvcHJvZmlsZS9saWJvcGFnZW50L2ppdGR1bXAuaDoKKwkqIG9wcm9maWxlL2xpYm9wYWdlbnQvTWFrZWZpbGUuYW06CisJKiBvcHJvZmlsZS9saWJvcGFnZW50L29wYWdlbnQuYzoKKwkqIG9wcm9maWxlL2xpYm9wYWdlbnQvb3BhZ2VudC5oOgorCSogb3Byb2ZpbGUvbGlib3BhZ2VudC9vcGFnZW50X3N5bWJvbHMudmVyOgorCSogb3Byb2ZpbGUvbGlicHAvYXJyYW5nZV9wcm9maWxlcy5jcHA6CisJKiBvcHJvZmlsZS9saWJwcC9jYWxsZ3JhcGhfY29udGFpbmVyLmNwcDoKKwkqIG9wcm9maWxlL2xpYnBwL2ZpbGVuYW1lX3NwZWMuY3BwOgorCSogb3Byb2ZpbGUvbGlicHAvZmlsZW5hbWVfc3BlYy5oOgorCSogb3Byb2ZpbGUvbGlicHAvb3BfaGVhZGVyLmNwcDoKKwkqIG9wcm9maWxlL2xpYnBwL29wX2hlYWRlci5oOgorCSogb3Byb2ZpbGUvbGlicHAvcGFyc2VfZmlsZW5hbWUuY3BwOgorCSogb3Byb2ZpbGUvbGlicHAvcGFyc2VfZmlsZW5hbWUuaDoKKwkqIG9wcm9maWxlL2xpYnBwL3Byb2ZpbGVfY29udGFpbmVyLmNwcDoKKwkqIG9wcm9maWxlL2xpYnBwL3Byb2ZpbGUuY3BwOgorCSogb3Byb2ZpbGUvbGlicHAvcHJvZmlsZS5oOgorCSogb3Byb2ZpbGUvbGlicHAvcHJvZmlsZV9zcGVjLmNwcDoKKwkqIG9wcm9maWxlL2xpYnJlZ2V4L2RlbWFuZ2xlX2phdmFfc3ltYm9sLmNwcDoKKwkqIG9wcm9maWxlL2xpYnJlZ2V4L2RlbWFuZ2xlX2phdmFfc3ltYm9sLmg6CisJKiBvcHJvZmlsZS9saWJyZWdleC9kZW1hbmdsZV9zeW1ib2wuY3BwOgorCSogb3Byb2ZpbGUvbGlicmVnZXgvTWFrZWZpbGUuYW06CisJKiBvcHJvZmlsZS9saWJyZWdleC90ZXN0cy9qYXZhX3Rlc3QuY3BwOgorCSogb3Byb2ZpbGUvbGlicmVnZXgvdGVzdHMvTWFrZWZpbGUuYW06CisJKiBvcHJvZmlsZS9saWJ1dGlsL01ha2VmaWxlLmFtOgorCSogb3Byb2ZpbGUvbGlidXRpbC9vcF9maWxlLmM6CisJKiBvcHJvZmlsZS9saWJ1dGlsL29wX2ZpbGUuaDoKKwkqIG9wcm9maWxlL2xpYnV0aWwvb3BfZ3Jvd2FibGVfYnVmZmVyLmM6CisJKiBvcHJvZmlsZS9saWJ1dGlsL29wX2dyb3dhYmxlX2J1ZmZlci5oOgorCSogb3Byb2ZpbGUvbGlidXRpbC9vcF9saXN0Lmg6CisJKiBvcHJvZmlsZS9saWJ1dGlsKysvYmZkX3N1cHBvcnQuY3BwOgorCSogb3Byb2ZpbGUvbGlidXRpbCsrL2JmZF9zdXBwb3J0Lmg6CisJKiBvcHJvZmlsZS9saWJ1dGlsKysvZmlsZV9tYW5pcC5jcHA6CisJKiBvcHJvZmlsZS9saWJ1dGlsKysvb3BfYmZkLmNwcDoKKwkqIG9wcm9maWxlL2xpYnV0aWwrKy9vcF9iZmQuaDoKKwkqIG9wcm9maWxlL01ha2VmaWxlLmFtOgorCSogb3Byb2ZpbGUvb3BqaXRjb252L2NvbnZlcnNpb24uYzoKKwkqIG9wcm9maWxlL29waml0Y29udi9jcmVhdGVfYmZkLmM6CisJKiBvcHJvZmlsZS9vcGppdGNvbnYvZGVidWdfbGluZS5jOgorCSogb3Byb2ZpbGUvb3BqaXRjb252L2ppdHN5bWJvbC5jOgorCSogb3Byb2ZpbGUvb3BqaXRjb252L01ha2VmaWxlLmFtOgorCSogb3Byb2ZpbGUvb3BqaXRjb252L29waml0Y29udi5jOgorCSogb3Byb2ZpbGUvb3BqaXRjb252L29waml0Y29udi5oOgorCSogb3Byb2ZpbGUvb3BqaXRjb252L3BhcnNlX2R1bXAuYzoKKwkqIG9wcm9maWxlL3BwL29wZ3Byb2YuY3BwOgorCSogb3Byb2ZpbGUvUkVBRE1FX1BBQ0tBR0VSUzoKKwkqIG9wcm9maWxlL1RPRE86CisJKiBvcHJvZmlsZS91dGlscy9vcGNvbnRyb2w6IEpJVCBzdXBwb3J0CisKKzIwMDgtMDQtMTggIE1heW5hcmQgSm9obnNvbiAgPG1heW5hcmRqQHVzLmlibS5jb20+CisKKwkqIG00L2JpbnV0aWxzLm00OiBBIGNvcnJlY3QgZml4IGZvciB0aGUgLS13aXRoLWJpbnV0aWxzIHByb2JsZW0KKworMjAwOC0wNC0xNyAgTWF5bmFyZCBKb2huc29uICA8bWF5bmFyZGpAdXMuaWJtLmNvbT4KKworCSogbTQvYmludXRpbHMubTQ6IFJldmVydCBwcmV2aW91cyBwYXRjaCBhcyBpdCB3YXMgYnVnZ3kKKworMjAwOC0wNC0xNiAgTWF5bmFyZCBKb2huc29uICA8bWF5bmFyZGpAdXMuaWJtLmNvbT4KKworCSogbTQvYmludXRpbHMubTQ6ICBGaXggdGhlIGJmZF9nZXRfc3ludGhldGljX3N5bXRhYiBjaGVjaworCSAgaW4gdGhpcyBtNCBtYWNybyB0byB3b3JrIGNvcnJlY3RseSB3aXRoICctLXdpdGgtYmludXRpbHMnCisJICBjb25maWd1cmUgb3B0aW9uIAorCisyMDA4LTA0LTEwICBDaHJpcyBKIEFyZ2VzICA8YXJnZXNAbGludXgudm5ldC5pYm0uY29tPgorCisJKiB1dGlscy9vcGNvbnRyb2w6CisJRm9yIHBwYzY0IGFyY2hpdGVjdHVyZXMsIG5lZWQgdG8gY2hlY2sgaWYgYWxsIHVzZXIva2VybmVsIGZsYWdzCisJcGVyIGNvdW50ZXIgbWF0Y2guIFRoZW4gdXNlIHRoaXMgdmFsdWUgdG8gc2V0IHVzZXIva2VybmVsIGRvbWFpbgorCXByb2ZpbGluZy4KKworMjAwOC0wMy0xMyAgRGF2ZSBOb211cmEgPGRjbmx0Y0B1cy5pYm0uY29tPgorCisJKiBsaWJ1dGlsKysvb3BfYmZkLmNwcDoKKwkqIGxpYnV0aWwrKy9vcF9iZmQuaDoKKwkqIHBwL29wcmVwb3J0LmNwcDoKKwlnY2MgNC4zIGdpdmVzIHdhcm5pbmdzIG9uIGNvbnN0IGZ1bmN0aW9uIHJldHVybiB0eXBlcworCisyMDA4LTAzLTAzICBKb2huIExldm9uICA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisKKwkqIGRhZW1vbi9vcHJvZmlsZWQuYzogZml4IGVycm9yIG1lc3NhZ2UgdHlwbworCisyMDA4LTAyLTIyICBIYWF2YXJkIFNraW5uZW1vZW4gIDxoc2tpbm5lbW9lbkBhdG1lbC5jb20+CisKKwkqICBldmVudHMvTWFrZWZpbGUuYW06CisJKiAgZXZlbnRzL2F2cjMyL2V2ZW50czoKKwkqICBldmVudHMvYXZyMzIvdW5pdF9tYXNrczoKKwkqICBsaWJvcC9vcF9jcHVfdHlwZS5jOgorCSogIGxpYm9wL29wX2NwdV90eXBlLmg6CisJKiAgbGlib3Avb3BfZXZlbnRzLmM6CisJKiAgdXRpbHMvb3BoZWxwLmM6IEFkZCBBVlIzMiBzdXBwb3J0CisgCisyMDA4LTAyLTIyICBSaWNoYXJkIFB1cmRpZSAgPHJwdXJkaWVAb3BlbmVkaGFuZC5jb20+CisKKwkqIGxpYnV0aWwrKy9maWxlX21hbmlwLmNwcDoKKwkqIHBwL29wYXJjaGl2ZS5jcHA6CisJQ2hlY2sgZmlsZXMgYWN0dWFsbHkgZXhpc3QgYmVmb3JlIGNvcHlpbmcgb3IgbGlzdGluZyB0aGUgZmlsZSBhcyBwYXJ0IG9mCisJb3BhcmNoaXZlIC0tbGlzdC1maWxlcy4KKworCVRoZSBjb3B5X2ZpbGUgZnVuY3Rpb24gYnJlYWtzIGlmIHBhc3NlZCBhIGRpcmVjdG9yeSBhcyBhIGZpbGUgdG8gY29weSAKKwlzaW5jZSBpdCB3aWxsIGNyZWF0ZSBhIGZpbGUgYXQgdGhlIGRlc3RpbmF0aW9uIGNhdXNpbmcgc3VidGxlIGJ1Z3MuCisKKzIwMDgtMDItMjIgIEFuZHkgRmxlbWluZyA8YWZsZW1pbmdAZnJlZXNjYWxlLmNvbT4KKworCSogIGV2ZW50cy9NYWtlZmlsZS5hbToKKwkqICBldmVudHMvcHBjL2UzMDAvZXZlbnRzOgorCSogIGV2ZW50cy9wcGMvZTMwMC91bml0X21hc2tzOgorCSogIGxpYm9wL29wX2NwdV90eXBlLmM6CisJKiAgbGlib3Avb3BfY3B1X3R5cGUuaDoKKwkqICBsaWJvcC9vcF9ldmVudHMuYzoKKwkqICB1dGlscy9vcGhlbHAuYzogQWRkIGUzMDAgc3VwcG9ydAorIAorMjAwOC0wMi0yMiAgQm9iIE5lbHNvbiAgPHJybmVsc29uQHVzLmlibS5jb20+CisKKwkqIHV0aWxzL29wY29udHJvbDogRml4IGxvb3AgaW4gZHVtcCBjb2RlIHdoZW4gdXNpbmcKKwkgIC0tc2Vzc2lvbi1kaXIgb24gYSBuZXR3b3JrIGRyaXZlLiAgKGNsb2NrIGlzc3VlcykKKworMjAwOC0wMi0xNSAgV2lsbCBDb2hlbiAgPHdjb2hlbkByZWRoYXQuY29tPgorCisJKiBndWkvb3Byb2Zfc3RhcnRfdXRpbC5jcHAKKwkqIGxpYnV0aWwrKy9maWxlX21hbmlwLmNwcAorCSogbGlidXRpbCsrL2JmZF9zdXBwb3J0LmNwcAorCSogbGlidXRpbCsrL2JmZF9zcHVfc3VwcG9ydC5jcHAKKwkqIGxpYnV0aWwrKy9vcF9zcHVfYmZkLmNwcAorCSogbGlidXRpbCsrL2N2ZXJiLmNwcAorCSogbGlidXRpbCsrL2NoaWxkX3JlYWRlci5jcHAKKwkqIHBwL29wZ3Byb2Zfb3B0aW9ucy5jcHAKKwkqIHBwL29wYW5ub3RhdGVfb3B0aW9ucy5jcHAKKwkqIHBwL29wYXJjaGl2ZS5jcHAKKwkqIHBwL2NvbW1vbl9vcHRpb24uY3BwCisJKiBsaWJwcC9zYW1wbGVfY29udGFpbmVyLmNwcAorCSogbGlicHAvb3BfaGVhZGVyLmNwcAorCSogbGlicHAvcHJvZmlsZS5jcHAKKwkqIGxpYmFiaS9vcGltcG9ydC5jcHAKKwkqIGxpYnJlZ2V4L2RlbWFuZ2xlX3N5bWJvbC5jcHA6IEFkZCBpbmNsdWRlcyBmb3IgZ2NjIDQuMyBjb21wYXRpYmlsaXR5LgorCisyMDA4LTAyLTA3ICBCb2IgTmVsc29uICA8cnJuZWxzb25AdXMuaWJtLmNvbT4KKworCSogbGlidXRpbCsrL29wX2JmZC5oOiAgYWRkIGJvb2wgc3ltYl9hcnRpZmljaWFsIHRvIG9wX2JmZF9zeW1ib2wKKwkqIGxpYnV0aWwrKy9vcF9iZmQuY3BwOiAgY3RvciBjaGFuZ2VzLCB1c2Ugc3ltYl9hcnRpZmljaWFsCisJKiBsaWJ1dGlsKysvb3Bfc3B1X2JmZC5jcHA6ICBwcm9maWxlIFNQVSAnc3RhY2snIGNvZGUKKworMjAwOC0wMi0wNCAgQm9iIE5lbHNvbiAgPHJybmVsc29uQHVzLmlibS5jb20+CisKKwkqIGRhZW1vbi9vcGRfc3B1LmM6IEZpeCBudW1iZXIgb2YgcmVjb3JkcyB0byBjaGVjayBmb3IKKwkgIGluIGFuIFNQVSBjb250ZXh0IHN3aXRjaAorCisyMDA4LTAxLTIxICBEYW5pZWwgSGFuc2VsICA8ZGFuaWVsLmhhbnNlbEBsaW51eC52bmV0LmlibS5jb20+CisKKwkqIHZhcmlvdXM6IHN0eWxlIGNsZWFudXBzCisKKzIwMDgtMDEtMTUgIElzYWt1IFlhbWFoYXRhICA8eWFtYWhhdGFAdmFsaW51eC5jby5qcD4KKworCSogZGFlbW9uL29wZF90cmFucy5jOiBmaXggcHJldmlvdXMgU1BVIHBhdGNoCisKKzIwMDgtMDEtMTEgIElzYWt1IFlhbWFoYXRhICA8eWFtYWhhdGFAdmFsaW51eC5jby5qcD4KKworCSogZGFlbW9uL29wZF9wZXJmbW9uLmM6IFhlbiBzdXBwb3J0IGZvciBJQTY0CisKKzIwMDgtMDEtMTEgIE1hcmt1cyBBcm1icnVzdGVyICA8YXJtYnJ1QHJlZGhhdC5jb20+CisKKwkqIGRhZW1vbi9vcGRfaW50ZXJmYWNlLmg6CisJKiBkYWVtb24vb3BkX3RyYW5zLmM6IHdvcmsgYXJvdW5kIFNQVS9YZW4gY29kZSBudW1iZXJpbmcgcHJvYmxlbQorCitTZWUgQ2hhbmdlTG9nLTIwMDcgZm9yIGVhcmxpZXIgY2hhbmdlbG9ncy4KZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L0NoYW5nZUxvZy0yMDA5IGIvb3Byb2ZpbGUtMC45LjcvQ2hhbmdlTG9nLTIwMDkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGVkY2RhMwotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L0NoYW5nZUxvZy0yMDA5CkBAIC0wLDAgKzEsNDIxIEBACisyMDA5LTEyLTA3ICBSb2JlcnQgUmljaHRlciAgPHJvYmVydC5yaWNodGVyQGFtZC5jb20+CisKKwkqIGFnZW50cy9NYWtlZmlsZS5hbToKKwkqIGNvbmZpZ3VyZS5pbjogYWRkaW5nIGNvbmZpZyBvcHRpb24gdG8gZGlzYWJsZSBvcHJvZmlsZSB1c2VyIGNoZWNrCisKKzIwMDktMTEtMjUgIENoZW4gSmllICA8Y2hlbmpAbGVtb3RlLmNvbT4KKworCSogZXZlbnRzL01ha2VmaWxlLmFtOgorCSogZXZlbnRzL21pcHMvbG9vbmdzb24yL2V2ZW50czogTmV3IEZpbGUKKwkqIGV2ZW50cy9taXBzL2xvb25nc29uMi91bml0X21hc2tzOiBOZXcgRmlsZQorCSogbGlib3Avb3BfY3B1X3R5cGUuYzoKKwkqIGxpYm9wL29wX2NwdV90eXBlLmg6CisJKiBsaWJvcC9vcF9ldmVudHMuYzogQWRkIGRlZmF1bHQgZXZlbnQgZm9yIGxvb25nc29uMgorCSogbGlidXRpbC9vcF9jcHVmcmVxLmM6IEFkZCBmcmVxIGVzdGltYXRpb24gZm9yIGhpZ2ggcGVyZm9ybWFuY2UgbWlwcyBwcm9jZXNzb3JzCisJKiB1dGlscy9vcGhlbHAuYzogQWRkIHN1cHBvcnQgZm9yIElDVCBsb29uZ3NvbjIKKworMjAwOS0xMS0yNSAgTWF5bmFyZCBKb2huc29uICA8bWF5bmFyZGpAdXMuaWJtLmNvbT4KKworCSogY29uZmlndXJlLmluOiBidW1wIHZlcnNpb24gaW4gQU1fSU5JVF9BVVRPTUFLRSB0byAwLjkuN2N2cworCisyMDA5LTExLTI0ICBNYXluYXJkIEpvaG5zb24gIDxtYXluYXJkakB1cy5pYm0uY29tPgorCisJKiBjb25maWd1cmUuaW46IGJ1bXAgdmVyc2lvbiBpbiBBTV9JTklUX0FVVE9NQUtFIHRvIDAuOS42CisKKzIwMDktMTAtMjkgIFdpbGxpYW0gQ29oZW4gIDx3Y29oZW5AcmVkaGF0LmNvbT4KKworCSogZGFlbW9uL29wZF9wZXJmbW9uLmM6IEZpeCBzdGFydC1kYWVtb24gcHJvYmxlbSBvbiBpYTY0CisKKzIwMDktMTAtMjkgIE1heW5hcmQgSm9obnNvbiAgPG1heW5hcmRqQHVzLmlibS5jb20+CisKKwkqIGV2ZW50cy9wcGM2NC9wb3dlcjcvZXZlbnRzOgorCSogZXZlbnRzL3BwYzY0L3Bvd2VyNy9ldmVudF9tYXBwaW5nczogVXBkYXRlcyB0byBQT1dFUjcgZXZlbnRzIGFuZAorCSAgZ3JvdXBzCisKKzIwMDktMTAtMjggIE1heW5hcmQgSm9obnNvbiAgPG1heW5hcmRqQHVzLmlibS5jb20+CisKKwkqIGRvYy9vcHJlcG9ydC54c2Q6IEZpeCB1cCBzY2hlbWEgYW5kIGJ1bXAgdmVyc2lvbiB0byBtYXRjaCAyMDA5LTA2LTE4IGZpeDsKKwkgIG90aGVyIHNjaGVtYSBmaXh1cHMgZm9yIGNvcnJlY3RuZXNzIGFuZCB0byBmYWNpbGl0YXRlIFhNTCBkb2N1bWVudC10by1zY2hlbWEKKwkgIHZhbGlkYXRpb24gd29ya3MKKwkqIGxpYnBwL3htbF91dGlscy5jcHA6IGJ1bXAgc2NoZW1hIHZlcnNpb24KKwkqIGxpYnBwL2Zvcm1hdF9vdXRwdXQuY3BwOgorCSogbGlicHAvZm9ybWF0X291dHB1dC5oOiBGaXggcmVncmVzc2lvbiBpbiBYTUwgY2FsbGdyYXBoIG91dHB1dAorCSAgY2F1c2VkIGJ5IDIwMDktMDYtMTggZml4CisKKzIwMDktMTAtMjYgIFJvYmVydCBSaWNodGVyIDxyb2JlcnQucmljaHRlckBhbWQuY29tPgorCisJKiBkb2Mvb3Byb2ZpbGUuMS5pbjogZml4IHVzZXItc3BhY2UgZGFlbW9uIGxvZ2ZpbGUgaW4gbWFuIHBhZ2UKKworMjAwOS0xMC0yNiAgTWF5bmFyZCBKb2huc29uICA8bWF5bmFyZGpAdXMuaWJtLmNvbT4KKworCSogbGlidXRpbCsrL2JmZF9zdXBwb3J0LmNwcDoKKwkqIGxpYnV0aWwrKy9iZmRfc3VwcG9ydC5oOiBGaXggcmVncmVzc2lvbiBpbiBoYW5kbGluZyBzZXBhcmF0ZQorCSAgZGVidWdpbmZvIGZpbGVzIAorCisyMDA5LTEwLTIzICBSb2JlcnQgUmljaHRlciAgPHJvYmVydC5yaWNodGVyQGFtZC5jb20+CisKKwkqIGF1dG9nZW4uc2g6IGNyZWF0ZSBjb3BpZXMgd2l0aCBsaWJ0b29saXplIGluc3RlYWQgb2Ygc3ltbGlua3MKKworMjAwOS0xMC0yMyAgU3VyYXZlZSBTdXRoaWt1bHBhbml0ICA8c3VyYXZlZS5zdXRoaWt1bHBhbml0QGFtZC5jb20+CisKKwkqIGV2ZW50cy94ODYtNjQvZmFtaWx5MTAvZXZlbnRzOgorCSogZXZlbnRzL3g4Ni02NC9mYW1pbHkxMC91bml0X21hc2tzOiBVcGRhdGUgZXZlbnRzIGFuZCB1bml0bWFza3MKKwkgIGZyb20gcHVibGljYXRpb24gMzExMTYgcmV2aXNpb24gMy4zNCBhbmQgZml4ZXMKKworMjAwOS0xMC0yMyAgTWF5bmFyZCBKb2huc29uICA8bWF5bmFyZGpAdXMuaWJtLmNvbT4KKworCSogUkVBRE1FX1BBQ0tBR0VSUzogQWRkIG1lbnRpb24gb2YgbmV3IG9waml0Y29udiBiaW5hcnkKKworMjAwOS0xMC0xNCAgTWF5bmFyZCBKb2huc29uICA8bWF5bmFyZGpAdXMuaWJtLmNvbT4KKworCSogYWdlbnRzL2p2bXBpL2p2bXBpX29wcm9maWxlLmNwcDogQWRkIGV4dHJhICNpbmNsdWRlcyBzaW5jZSBuZXcKKwkgIGxpYnN0ZGMrKyBoZWFkZXIgZmlsZXMgZG8gbm90IGluY2x1ZGUgc3RhbmRhcmQgQyBoZWFkZXIgZmlsZXMKKworMjAwOS0xMC0xMyAgTWF5bmFyZCBKb2huc29uICA8bWF5bmFyZGpAdXMuaWJtLmNvbT4KKworCSogdXRpbHMvb3Bjb250cm9sOiBSZW1vdmUgaW5jb3JyZWN0IHJlZHVuZGFudCBpbnZvY2F0aW9uIG9mCisJICBnZXRfaW1hZ2VfcmFuZ2UKKworMjAwOS0xMC0wOSAgUm9iZXJ0IFJpY2h0ZXIgPHJvYmVydC5yaWNodGVyQGFtZC5jb20+CisKKwkqIGxpYm9wL29wX3htbF9ldmVudHMuYzoKKwkqIGxpYm9wL29wX3htbF9vdXQuYzoKKwkqIGxpYm9wL29wX3htbF9vdXQuaDoKKwkqIGxpYnV0aWwrKy94bWxfb3V0cHV0LmNwcDogZml4IGJ1ZmZlciBvdmVyZmxvd3MgaW4geG1sIGdlbmVyYXRvcgorCisyMDA5LTA5LTE0ICBTdXJhdmVlIFN1dGhpa3VscGFuaXQgPHN1cmF2ZWUuc3V0aGlrdWxwYW5pdEBhbWQuY29tPgorCisJKiB1dGlscy9vcGNvbnRyb2w6IEZpeCB0aW1lciBtb2RlCisKKzIwMDktMDktMDggIFJvYmVydCBSaWNodGVyIDxyb2JlcnQucmljaHRlckBhbWQuY29tPgorCisJKiB1dGlscy9vcGNvbnRyb2w6IGZpeCBkZWluaXQ7IGtpbGwgZGFlbW9uIG9ubHkgaWYgcnVubmluZyB0byBwcmV2ZW50CisJICB1bm5lY2Vzc2FyeSAiRGFlbW9uIG5vdCBydW5uaW5nIiBtZXNzYWdlCisKKzIwMDktMDktMDggIFJvYmVydCBSaWNodGVyIDxyb2JlcnQucmljaHRlckBhbWQuY29tPgorCisJKiB1dGlscy9vcGNvbnRyb2w6IGZpeCBoZWxwIG1lc3NhZ2UKKworMjAwOS0wOS0wNCAgUm9iZXJ0IFJpY2h0ZXIgPHJvYmVydC5yaWNodGVyQGFtZC5jb20+CisKKwkqIHV0aWxzL29wY29udHJvbDogRG8gc3RvcCBvbmx5IGlmIGVuYWJsZWQKKworMjAwOS0wOC0yMCAgU3VyYXZlZSBTdXRoaWt1bHBhbml0IDxzdXJhdmVlLnN1dGhpa3VscGFuaXRAYW1kLmNvbT4KKworCSogbGlib3Avb3BfeG1sX2V2ZW50cy5jOiAKKwkqIGxpYm9wL29wX3htbF9vdXQuaDogCisJKiBsaWJvcC9vcF94bWxfb3V0LmM6IEZpeCBvcGhlbHAgLVggb3V0cHV0IGZvciBJQlMgZXZlbnRzCisJKiB1dGlscy9vcGhlbHAuYzogRml4IG9waGVscCBvdXRwdXQgZm9yICJjb3VudGVyOmNwdWlkIiBhbmQgCisJICAiZXh0Onh4eCIgY2FzZS4KKworMjAwOS0wNy0zMSAgTWF5bmFyZCBKb2huc29uICA8bWF5bmFyZGpAdXMuaWJtLmNvbT4KKworCSogY29uZmlndXJlLmluOiBidW1wIHZlcnNpb24gaW4gQU1fSU5JVF9BVVRPTUFLRSB0byAwLjkuNmN2cworCisyMDA5LTA3LTMxICBNYXluYXJkIEpvaG5zb24gIDxtYXluYXJkakB1cy5pYm0uY29tPgorCisJKiBjb25maWd1cmUuaW46IGJ1bXAgdmVyc2lvbiBpbiBBTV9JTklUX0FVVE9NQUtFIHRvIDAuOS41CisKKzIwMDktMDctMzEgIEFuZGkgS2xlZW4gICA8YWtAbGludXguaW50ZWwuY29tPgorCisJKiBldmVudHMvaTM4Ni9uZWhhbGVtL2V2ZW50czogRml4IG5hbWUgb2YgZXZlbnQgMHhhNworCisyMDA5LTA3LTIwICBKZWZmcmV5IFlhc3NraW4gIDxqeWFzc2tpbkBnb29nbGUuY29tPgorCisJKiBsaWJ1dGlsKysvYmZkX3N1cHBvcnQuaChmaW5kX25lYXJlc3RfbGluZSk6CisJKiBsaWJ1dGlsKysvYmZkX3N1cHBvcnQuY3BwKGZpbmRfbmVhcmVzdF9saW5lKToKKwkqIGxpYnV0aWwrKy9vcF9iZmQuaChvcF9iZmQ6OmdldF9saW5lbnIpOgorCSogbGlidXRpbCsrL29wX2JmZC5jcHAob3BfYmZkOjpnZXRfbGluZW5yKTogQ2hhbmdlIHRoZSB0eXBlIG9mIG9mZnNldAorCSAgZnJvbSB1bnNpZ25lZCBpbnQgdG8gYmZkX3ZtYSB0byBhY2NvbW1vZGF0ZSBhZGRyZXNzZXMgYWJvdmUgNEcKKworMjAwOS0wNy0xNyAgTWF5bmFyZCBKb2huc29uICA8bWF5bmFyZGpAdXMuaWJtLmNvbT4KKworCSogbGlidXRpbCsrL2JmZF9zdXBwb3J0LmNwcDogRml4IGxvZ2ljIGVycm9yIGZyb20gcHJldmlvdXMKKwkgIHBhdGNoIHRvIHRoaXMgZmlsZQorCisyMDA5LTA3LTE0ICBNYXluYXJkIEpvaG5zb24gIDxtYXluYXJkakB1cy5pYm0uY29tPgorCisJKiBNYWtlZmlsZS5hbTogQWRkIENoYW5nZUxvZy0yMDA4IHRvIEVYVFJBX0RJU1QKKworMjAwOS0wNy0xMCAgTWF5bmFyZCBKb2huc29uICA8bWF5bmFyZGpAdXMuaWJtLmNvbT4KKworCSogbGlicHAvcHJvZmlsZV9zcGVjLmNwcDoKKwkqIHBwL29wYXJjaGl2ZS5jcHA6CisJKiB1dGlscy9vcGNvbnRyb2w6ICBIYW5kbGUgYmFkIHNhbXBsZXMgZnJvbSBrZXJuZWwgZHVlIHRvIG92ZXJmbG93cworCisyMDA5LTA2LTI5ICBNYXluYXJkIEpvaG5zb24gIDxtYXluYXJkakB1cy5pYm0uY29tPgorCisJKiBldmVudHMvcHBjNjQvcG93ZXI3L2V2ZW50czoKKwkqIGV2ZW50cy9wcGM2NC9wb3dlcjcvZXZlbnRfbWFwcGluZ3M6IFVwZGF0ZSB0byBJQk0gUE9XRVI3IGV2ZW50cworCSAgYW5kIGdyb3VwcworCisyMDA5LTA2LTIzICBNYXluYXJkIEpvaG5zb24gIDxtYXluYXJkakB1cy5pYm0uY29tPgorCisJKiBsaWJ1dGlsKysvYmZkX3N1cHBvcnQuY3BwOiBEaXNjYXJkIHN5bWJvbHMgZnJvbSBzZWN0aW9ucyB0aGF0IGRvCisJICBub3QgaGF2ZSBTRUNfTE9BRCBmbGFnIHNldDsgdGhpcyBwcmV2ZW50cyBpc3N1ZXMgd2l0aCBib2d1cyBzeW1ib2wKKwkgIHNpemUgY29tcHV0YXRpb24sIHJlc3VsdGluZyBpbiAic2FtcGxlc19yYW5nZSgpOiBzdGFydCA+IGVuZCIgbWVzc2FnZQorCisyMDA5LTA2LTIzICBNYXluYXJkIEpvaG5zb24gIDxtYXluYXJkakB1cy5pYm0uY29tPgorCisJKiBsaWJwcC9wcm9maWxlX3NwZWMuY3BwOgorCSogcHAvY29tbW9uX29wdGlvbi5jcHA6IEZpeCBpbWFnZS1wYXRoIG9wdGlvbiB0byBiZSBhcHBlbmRlZAorCSAgdG8gYXJjaGl2ZSBwYXRoCisKKzIwMDktMDYtMTggIE1heW5hcmQgSm9obnNvbiAgPG1heW5hcmRqQHVzLmlibS5jb20+CisKKwkqIGxpYnBwL2Zvcm1hdF9vdXRwdXQuaDoKKwkqIGxpYnBwL2Zvcm1hdF9vdXRwdXQuY3BwOiBNYWtlIHN1cmUgdGhhdCBhbGwgY2FsbGdyYXBoIHN5bWJvbHMgYXJlCisJICByZXBvcnRlZCwgZXZlbiBpZiAwIHNhbXBsZXMKKworMjAwOS0wNi0wNSAgV2lsbGlhbSBDb2hlbiAgPHdjb2hlbkByZWRoYXQuY29tPgorCisJKiBsaWJ1dGlsKysvYmZkX3N1cHBvcnQuY3BwOiBBdm9pZCBjYWxsaW5nIGJmZF9maW5kX25lYXJlc3RfbGluZQorCSAgd2l0aCBOVUxMIHN5bXMgYXJndW1lbnQKKworMjAwOS0wNi0wNSAgQW5kaSBLbGVlbiAgPGFrQGxpbnV4LmludGVsLmNvbT4KKworCSogbGlib3Avb3BfZXZlbnRzLmg6IChmaW5kX2V2ZW50X2J5X25hbWUpOgorCSogbGlib3Avb3BfZXZlbnRzLmM6IChmaW5kX2V2ZW50X2J5X25hbWUpOiBNYXRjaCB1bml0IG1hc2suCisJKiBsaWJvcC9vcF9wYXJzZV9ldmVudC5jOiAocGFyc2VfZXZlbnRzKTogU2V0IHVuaXRfbWFza192YWxpZAorCSogbGlib3Avb3BfcGFyc2VfZXZlbnQuaDogKHBhcnNlZF9ldmVudGQpOiBBZGQgdW5pdF9tYXNrX3ZhbGlkCisJKiBsaWJvcC90ZXN0cy9hbGxvY19jb3VudGVyX3Rlc3RzLmM6IChkb190ZXN0KToKKwkqIGxpYm9wL3Rlc3RzL3BhcnNlX2V2ZW50X3Rlc3RzLmM6CisJKiBkYWVtb24vb3BkX2liczogKGlic19wYXJzZV9hbmRfc2V0X2V2ZW50cyk6CisJKiBndWkvb3Byb2Zfc3RhcnQuY3BwIChhbGxvY19zZWxlY3RlZF9ldmVudHMpOgorCSogdXRpbHMvb3BoZWxwLmM6IChyZXNvbHZlX2V2ZW50cywgc2hvd191bml0X21hc2spOgorCSAgVXBkYXRlIGZpbmRfZXZlbnRfYnlfbmFtZSBjYWxsLgorCisyMDA5LTA2LTA1IEFuZGkgS2xlZW4gPGFrQGxpbnV4LmludGVsLmNvbT4KKworCSogbGlib3AvdGVzdHMvYWxsb2NfY291bnRlcl90ZXN0cy5jOgorCURvbid0IHVzZSBub24gZXhpc3RlbnQgdW5pdCBtYXNrcyBpbiBQNCBjb3VudGVyIHRlc3RzLgorCisyMDA5LTA2LTAzIFN1cmF2ZWUgU3V0aGlrdWxwYW5pdCA8c3VyYXZlZS5zdXRoaWt1bHBhbml0QGFtZC5jb20+CisKKwkqIGV2ZW50cy94ODYtNjQvZmFtaWx5MTAvZXZlbnRzOgorCSogZXZlbnRzL3g4Ni02NC9mYW1pbHkxMC91bml0X21hc2tzOiBVcGRhdGUgZXZlbnRzIGFuZCB1bml0bWFza3MKKwkgIGZvciB0aGUgQU1EIFNpeC1jb3JlIE9wdGVyb24gcHJvY2Vzc29yIHN1cHBvcnQgZnJvbQorCSAgcHVibGljYXRpb24gMzExMTYgcmV2aXNpb24gMy4yOAorCisyMDA5LTA1LTI3IFN1cmF2ZWUgU3V0aGlrdWxwYW5pdCA8c3VyYXZlZS5zdXRoaWt1bHBhbml0QGFtZC5jb20+CisKKwkqIHV0aWxzL29wY29udHJvbDogRml4IElCUyBpbml0aWFsaXphdGlvbgorCisyMDA5LTA1LTI3IFN1cmF2ZWUgU3V0aGlrdWxwYW5pdCA8c3VyYXZlZS5zdXRoaWt1bHBhbml0QGFtZC5jb20+CisKKyAJKiBkYWVtb24vb3Byb2ZpbGVkLmM6CisJKiBkYWVtb24vb3BkX2V4dC5jOiBGaXggZXh0ZW5kZWQgZmVhdHVyZSBpbml0aWFsaXphdGlvbgorCisyMDA5LTA1LTI3IFN1cmF2ZWUgU3V0aGlrdWxwYW5pdCA8c3VyYXZlZS5zdXRoaWt1bHBhbml0QGFtZC5jb20+CisKKwkqIGRvYy9vcHJvZmlsZS54bWw6CisJKiBkb2MvaW50ZXJuYWxzLnhtbDogQWRkIEV4dGVuZGVkLUludGVyZmFjZSBhbmQgSUJTIGRvY3VtZW50YXRpb24sCisJCisyMDA5LTA1LTE5IEFuZGkgS2xlZW4gIDxha0BsaW51eC5pbnRlbC5jb20+CisKKyAJKiB1dGlscy9vcGhlbHAuYzogKGNsZWFudXApIEZpeCBjbGVhbnVwIGNyYXNoLgorIAorMjAwOS0wNS0xOSAgQW5kaSBLbGVlbiAgPGFrQGxpbnV4LmludGVsLmNvbT4KKworIAkqIGV2ZW50cy9pMzg2L2F0b20vZXZlbnRzOiBVc2UgaGFyZGNvZGVkIGNvdW50ZXJzLiBSZWFkZAorIAlVTkhBTFRFRF9SRUZFUkVOQ0VfQ0xPQ0suCisgCSogZXZlbnRzL2kzODYvbmVoYWxlbS9ldmVudHM6CisgCSogZXZlbnRzL2kzODYvbmVoYWxlbS91bml0X21hc2tzOiBVc2UgaGFyZGNvZGVkIGNvdW50ZXJzLgorIAlDbGFyaWZ5IENQVV9DTE9DS1NfVU5IQUxURUQuUkVGX1AKKworMjAwOS0wNS0xOSBBbmRpIEtsZWVuIDxha0BsaW51eC5pbnRlbC5jb20+CisKKyAJKiBsaWJvcC9vcF9od19zcGVjaWZpYy5oOiAoYXJjaF9nZXRfZmlsdGVyKToKKyAJUmV0dXJuIC0xIHdoZW4gQ1BVSUQgaXMgbm90IGF2YWlsYWJsZS4KKworMjAwOS0wNS0xOCAgQnJpYW4gQmxvbmlhcnogICA8Ym1iQGF0aGVuYWNyLmNvbT4KKworCSogbGlidXRpbC9vcF9maWxlLmM6IEZpeCBjcmFzaCB3aGVuIGNoYXNpbmcgYnJva2VuIHN5bWxpbmtzCisKKzIwMDktMDUtMTMgIE1heW5hcmQgSm9obnNvbiAgPG1heW5hcmRqQHVzLmlibS5jb20+CisKKwkqIHBwL29wYXJjaGl2ZS5jcHA6IEZpeGVzIGZvciBvcGFyY2hpdmUgc2Vzc2lvbi1kaXIgYXMgcmVwb3J0ZWQgaW4KKwkgIGJ1Z3MgMjY0NjM4OSBhbmQgMjY0NjM3NgorCisyMDA5LTA1LTEzICBNYXluYXJkIEpvaG5zb24gIDxtYXluYXJkakB1cy5pYm0uY29tPgorCisJKiB1dGlscy9vcGNvbnRyb2w6IEZpeCBmb3Igc2Vzc2lvbi1kaXIgc2V0dXAsIGJ1ZyByZXBvcnQgMjY0NjM5OAorCisyMDA5LTA1LTEzICBCcmlhbiBCbG9uaWFyeiAgPGJtYkBhdGhlbmFjci5jb20+CisKKwkqIHV0aWxzL29wY29udHJvbDogUmVwbGFjZSBiYXNoIGJ1aWx0LWluIGxldCB3aXRoIHBvc2l4IHN0YXRlbWVudHMKKworMjAwOS0wNS0wNyAgQW5kaSBLbGVlbiAgPGFrQGxpbnV4LmludGVsLmNvbT4KKwkqIHV0aWxzL29waGVscC5jOgorCSogbGlib3Avb3BfY3B1X3R5cGUuYzoKKwkqIGxpYm9wL29wX2NwdV90eXBlLmg6CisJKiBsaWJvcC9vcF9ldmVudHMuYzoKKwkqIGxpYm9wL29wX2h3X3NwZWNpZmljLmg6IEFkZCB3b3JrYXJvdW5kX25laGFsZW1fYWFqNzkKKwkqIGV2ZW50cy9NYWtlZmlsZS5hbToKKwkqIGV2ZW50cy9pMzg2L2F0b20vZXZlbnRzOiBBZGQgQXRvbSBzdXBwb3J0IChOZXcgZmlsZSkKKwkqIGV2ZW50cy9pMzg2L2F0b20vdW5pdF9tYXNrczogQWRkIEF0b20gc3VwcG9ydCAoTmV3IGZpbGUpCisJKiBldmVudHMvaTM4Ni9uZWhhbGVtL2V2ZW50czogQWRkIE5laGFsZW0gc3VwcG9ydCAoTmV3IGZpbGUpCisJKiBldmVudHMvaTM4Ni9uZWhhbGVtL3VuaXRfbWFza3M6IEFkZCBOZWhhbGVtIHN1cHBvcnQgKE5ldyBmaWxlKQorCSogZXZlbnRzL2kzODYvY29yZV9pNy9ldmVudHM6IEFkZCBDb3JlIGk3IHN1cHBvcnQgKE5ldyBmaWxlKQorCSogZXZlbnRzL2kzODYvY29yZV9pNy91bml0X21hc2tzOiBBZGQgQ29yZSBpNyBzdXBwb3J0IChOZXcgZmlsZSkKKworMjAwOS0wNS0wNyAgTWF5bmFyZCBKb2huc29uICA8bWF5bmFyZGpAdXMuaWJtLmNvbT4KKworCSogb3Byb2YtY29tcGF0L2V2ZW50cy9NYWtlZmlsZS5hbToKKwkqIG9wcm9mLWNvbXBhdC9ldmVudHMvcHBjNjQvaWJtLWNvbXBhdC12MS9ldmVudF9tYXBwaW5nczogKG5ldykKKwkqIG9wcm9mLWNvbXBhdC9ldmVudHMvcHBjNjQvaWJtLWNvbXBhdC12MS9ldmVudHM6IChuZXcpCisJKiBvcHJvZi1jb21wYXQvZXZlbnRzL3BwYzY0L2libS1jb21wYXQtdjEvdW5pdF9tYXNrczogKG5ldykKKwkqIG9wcm9mLWNvbXBhdC9saWJvcC9vcF9jcHVfdHlwZS5jOgorCSogb3Byb2YtY29tcGF0L2xpYm9wL29wX2NwdV90eXBlLmg6CisJKiBvcHJvZi1jb21wYXQvbGlib3Avb3BfZXZlbnRzLmM6CisJKiBvcHJvZi1jb21wYXQvdXRpbHMvb3BoZWxwLmM6ICBBZGQgc3VwcG9ydCBmb3IgSUJNIHBwYzY0IGFyY2hpdGVjdGVkIGV2ZW50cworCisyMDA5LTA1LTA2ICBBbmRpIEtsZWVuICA8YWtAbGludXguaW50ZWwuY29tPgorCisJKiB1dGlscy9vcGhlbHAuYzogVXNlIHdvcmQgd3JhcCB0byBvdXRwdXQgZXZlbnQgZGVzY3JpcHRpb25zCisKKzIwMDktMDUtMDEgIEFuZGkgS2xlZW4gIDxha0BsaW51eC5pbnRlbC5jb20+CisKKwkqIGV2ZW50cy9pMzg2L2FyY2hfcGVyZm1vbi9ldmVudHM6IFVwZGF0ZSBldmVudCBuYW1lcyB0byBjb25mb3JtIHRvIG1hbnVhbC4KKworMjAwOS0wNS0wMSAgTWF5bmFyZCBKb2huc29uICA8bWF5bmFyZGpAdXMuaWJtLmNvbT4KKworCSogY29uZmlndXJlLmluOgorCSogbTQvYmludXRpbHMubTQ6IFdvcmthcm91bmQgdG8gbWFrZSBvcHJvZmlsZSBidWlsZCBvbiByZWNlbnQgU1VTRQorCisyMDA5LTA0LTI5ICBBbmRpIEtsZWVuICA8YWtAbGludXguaW50ZWwuY29tPgorCisJKiBsaWJvcC9vcF9ldmVudHMuYzogQWRkIHN1cHBvcnQgZm9yIGluY2x1ZGUgYW5kIHVuaXQgbWFzayBtZXJnaW5nCisJICBzdGF0ZW1lbnRzIGluIGV2ZW50IGZpbGVzCisKKzIwMDktMDQtMjkgIEFuZGkgS2xlZW4gIDxha0BsaW51eC5pbnRlbC5jb20+CisKKwkqIGxpYm9wL29wX2V2ZW50cy5jOiBBbGxvdyBtYWtlIGNoZWNrIHRvIGFjY3VtdWxhdGUgc29tZSBlcnJvcnMKKwkgIGJlZm9yZSBleGl0aW5nCisKKzIwMDktMDQtMjggIE1heW5hcmQgSm9obnNvbiAgPG1heW5hcmRqQHVzLmlibS5jb20+CisKKwkqIGV2ZW50cy9NYWtlZmlsZS5hbToKKwkqIGV2ZW50cy9wcGM2NC9wb3dlcjcvZXZlbnRfbWFwcGluZ3M6IChuZXcpCisJKiBldmVudHMvcHBjNjQvcG93ZXI3L2V2ZW50czogKG5ldykKKwkqIGV2ZW50cy9wcGM2NC9wb3dlcjcvdW5pdF9tYXNrczogKG5ldykKKwkqIGxpYm9wL29wX2NwdV90eXBlLmM6CisJKiBsaWJvcC9vcF9jcHVfdHlwZS5oOgorCSogbGlib3Avb3BfZXZlbnRzLmM6CisJKiB1dGlscy9vcGhlbHAuYzogIEFkZCBzdXBwb3J0IGZvciBJQk0gUE9XRVI3IHByb2Nlc3NvcgorCisyMDA5LTA0LTIyICBNYXluYXJkIEpvaG5zb24gIDxtYXluYXJkakB1cy5pYm0uY29tPgorCisJKiBhZ2VudHMvanZtcGkvanZtcGlfb3Byb2ZpbGUuY3BwOiBDaGFuZ2UgdGhpcyBmaWxlIHRvIHVzZSBMR1BMIGxpY2Vuc2UKKwkgIHRvIGFsbG93IEpWTVBJIGFnZW50IGxpYnJhcnkgdG8gbGluayB0byBub24tR1BMIGNvZGUKKworMjAwOS0wNC0xNyAgU3VyYXZlZSBTdXRoaWt1bHBhbml0IDxzdXJhdmVlLnN1dGhpa3VscGFuaXRAYW1kLmNvbT4KKworCSogdXRpbHMvb3Bjb250cm9sOiBBZGQgSUJTIHN1cHBvcnQsIHBhdGNoIDQgb2YgNAorCisyMDA5LTA0LTE3ICBTdXJhdmVlIFN1dGhpa3VscGFuaXQgPHN1cmF2ZWUuc3V0aGlrdWxwYW5pdEBhbWQuY29tPgorCisJKiBwcC9vcGFubm90YXRlLmNwcDogQWRkIElCUyBzdXBwb3J0LCBwYXRjaCAzIG9mIDQKKworMjAwOS0wNC0xNyAgU3VyYXZlZSBTdXRoaWt1bHBhbml0IDxzdXJhdmVlLnN1dGhpa3VscGFuaXRAYW1kLmNvbT4KKworCSogZXZlbnRzL3g4Ni02NC9mYW1pbHkxMC9ldmVudHM6CisJKiBldmVudHMveDg2LTY0L2ZhbWlseTEwL3VuaXRfbWFza3M6IEFkZCBJQlMgc3VwcG9ydCwgcGF0Y2ggMiBvZiA0CisKKworMjAwOS0wNC0xNyAgU3VyYXZlZSBTdXRoaWt1bHBhbml0IDxzdXJhdmVlLnN1dGhpa3VscGFuaXRAYW1kLmNvbT4KKworCSogZGFlbW9uL01ha2VmaWxlLmFtOgorCSogZGFlbW9uL29wZF9leHRlbmRlZC5jOgorCSogZGFlbW9uL29wZF9pYnMuYzogTmV3IEZpbGUKKwkqIGRhZW1vbi9vcGRfaWJzLmg6IE5ldyBGaWxlCisJKiBkYWVtb24vb3BkX2lic19tYWNyby5oOiBOZXcgRmlsZQorCSogZGFlbW9uL29wZF9pYnNfdHJhbnMuYzogTmV3IEZpbGUKKwkqIGRhZW1vbi9vcGRfaWJzX3RyYW5zLmg6IE5ldyBGaWxlCisJKiBkYWVtb24vb3BkX2ludGVyZmFjZS5oOgorCSogZGFlbW9uL29wZF9zZmlsZS5jOgorCSogZGFlbW9uL29wZF9zZmlsZS5oOgorCSogZGFlbW9uL29wZF90cmFucy5jOgorCSogbGliZGIvZGJfaW5zZXJ0LmM6CisJKiBsaWJkYi9vZGIuaDogQWRkIElCUyBzdXBwb3J0LCBwYXRjaCAxIG9mIDQKKworMjAwOS0wNC0xNSAgTWF5bmFyZCBKb2huc29uICA8bWF5bmFyZGpAdXMuaWJtLmNvbT4KKworCSogbGlicHAveG1sX3V0aWxzLmNwcDogRml4IGJpbmFyeSBjb3VudCB0b3RhbCBpbiBYTUwgb3V0cHV0CisJICB3aGVuIHVzaW5nIC0tc2VwYXJhdGU9bGliCisKKzIwMDktMDQtMDggIFdpbGxpYW0gQ29oZW4gIDx3Y29oZW5AcmVkaGF0LmNvbT4KKworCSogY29uZmlndXJlLmluOiBBZGQgY2hlY2sgZm9yIGJhc2VuYW1lIGRlY2xhcmF0aW9uCisKKzIwMDktMDQtMDEgIFN1cmF2ZWUgU3V0aGlrdWxwYW5pdCA8c3VyYXZlZS5zdXRoaWt1bHBhbml0QGFtZC5jb20+CisKKwkqIGRhZW1vbi9NYWtlZmlsZS5hbToKKwkqIGRhZW1vbi9vcGRfZXZlbnRzLmM6CisJKiBkYWVtb24vb3BkX2V4dGVuZGVkLmg6IE5ldyBGaWxlCisJKiBkYWVtb24vb3BkX2V4dGVuZGVkLmM6IE5ldyBGaWxlCisJKiBkYWVtb24vb3BkX3ByaW50Zi5oOgorCSogZGFlbW9uL29wZF9zZmlsZS5oOgorCSogZGFlbW9uL29wZF9zZmlsZS5jOgorCSogZGFlbW9uL29wZF9zdGF0cy5jOgorCSogZGFlbW9uL29wZF90cmFucy5oOgorCSogZGFlbW9uL29wZF90cmFucy5jOgorCSogZGFlbW9uL29wcm9maWxlZC5jOgorCSogbGlib3Avb3BfZXZlbnRzLmg6CisJKiBsaWJvcC9vcF9ldmVudHMuYzoKKwkqIGxpYm9wL29wX2FsbG9jX2NvdW50ZXIuYzoKKwkqIHV0aWxzL29waGVscC5jOiBBZGQgRXh0ZW5kZWQgRmVhdHVyZSBJbnRlcmZhY2UKKworMjAwOS0wMy0xNyAgU3VyYXZlZWUgU3V0aGlrdWxwYW5pdCA8c3VyYXZlZS5zdXRoaWt1bHBhbml0QGFtZC5jb20+CisKKwkqIGV2ZW50cy9NYWtlZmlsZS5hbQorCSogZXZlbnRzL3g4Ni02NC9mYW1pbHkxMWgvZXZlbnRzOiBOZXcgZXZlbnQgZmlsZQorCSogZXZlbnRzL3g4Ni02NC9mYW1pbHkxMWgvdW5pdF9tYXNrczogTmV3IFVuaXRtYXNrIGZpbGUKKwkqIGxpYm9wL29wX2NwdV90eXBlLmM6IEFkZGluZyBmYW1pbHkxMWgKKwkqIGxpYm9wL29wX2NwdV90eXBlLmg6IEFkZGluZyBmYW1pbHkxMWgKKwkqIGxpYm9wL29wX2V2ZW50cy5jOiBBZGRpbmcgZmFtaWx5MTFoCisJKiB1dGlscy9vcGhlbHAuYzogQWRkaW5nIGZhbWlseTExaCBhbmQgdXBkYXRlIGRvY3VtZW50cworCisyMDA5LTAzLTE3ICBNYXluYXJkIEpvaG5zb24gIDxtYXluYXJkakB1cy5pYm0uY29tPgorCisJKiBsaWJvcC9vcF9hbGxvY2F0ZV9jb3VudGVyLmM6IE1ha2UgbWFwX2V2ZW50X3RvX2NvdW50ZXIgaGFuZGxlCisJICBhIG5vbi1uYXRpdmUgY3B1X3R5cGUKKworMjAwOS0wMy0wNSAgUm9iZXJ0IFJpY2h0ZXIgPHJvYmVydC5yaWNodGVyQGFtZC5jb20+CisKKwkqIGxpYnV0aWwrKy9iZmRfc3VwcG9ydC5jcHA6IHN1cHByZXNzICd1bnVzZWQgcGFyYW1ldGVyJyB3YXJuaW5nCisKKzIwMDktMDItMTAgIE1heW5hcmQgSm9obnNvbiAgPG1heW5hcmRqQHVzLmlibS5jb20+CisKKwkqIGxpYmFiaS90ZXN0cy9hYmlfdGVzdC5jcHA6CisJKiBsaWJyZWdleC90ZXN0cy9qYXZhX3Rlc3QuY3BwOgorCSogbGlicmVnZXgvdGVzdHMvcmVnZXhfdGVzdC5jcHA6IFVzZSBDKysgc3R5bGUgI2luY2x1ZGVzCisJICBmb3Igc3RkbGliIGFuZCBzdHJpbmcKKwkKKworMjAwOS0wMi0wOSAgS2pldGlsIEJhcnZpayAgPGJhcnZpa0Bicm9hZHBhcmsubm8+CisKKwkqIGxpYmFiaS90ZXN0cy9hYmlfdGVzdC5jcHA6CisJKiBsaWJyZWdleC90ZXN0cy9qYXZhX3Rlc3QuY3BwOgorCSogbGlicmVnZXgvdGVzdHMvcmVnZXhfdGVzdC5jcHA6CisJKiBsaWJ1dGlsL3Rlc3RzL2ZpbGVfdGVzdHMuYzogRml4IGdjYyB3YXJuaW5ncworCisyMDA5LTAyLTA2ICBNYXluYXJkIEpvaG5zb24gIDxtYXluYXJkakB1cy5pYm0uY29tPgorCisJKiBsaWJ1dGlsKysvYmZkX3N1cHBvcnQuY3BwOgorCSogbGlidXRpbCsrL2JmZF9zdXBwb3J0Lmg6CisJKiBsaWJ1dGlsKysvb3BfYmZkLmNwcDogRml4dXAgZGVidWdpbmZvIHByb2Nlc3NpbmcgZm9yIHBwYzY0CisKKzIwMDktMDItMDMgIENhcmwgTG92ZSAgPGNlbEB1cy5pYm0uY29tPgorCisJKiB1dGlscy9vcGNvbnRyb2w6CisJKiBkb2Mvb3Byb2ZpbGUueG1sOgorCSogZXZlbnRzL3BwYzY0L2NlbGwtYmUvZXZlbnRzOgorCSogZXZlbnRzL3BwYzY0L2NlbGwtYmUvdW5pdF9tYXNrczogQWRkZWQgSUJNIENFTEwgU1BVIGV2ZW50IHByb2ZpbGluZyBzdXBwb3J0CisKKzIwMDktMDEtMDUgIE1heW5hcmQgSm9obnNvbiAgPG1heW5hcmRqQHVzLmlibS5jb20+CisKKwkqIG00L2JpbnV0aWxzLm00OiBGaXggZXJyb3IgaW4gQUNfQ0hFQ0tfTElCIGFjdGlvbgorCisKK1NlZSBDaGFuZ2VMb2ctMjAwOCBmb3IgZWFybGllciBjaGFuZ2Vsb2dzLgpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvQ2hhbmdlTG9nLTIwMTAgYi9vcHJvZmlsZS0wLjkuNy9DaGFuZ2VMb2ctMjAxMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mN2NlNTk1Ci0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvQ2hhbmdlTG9nLTIwMTAKQEAgLTAsMCArMSwxODIgQEAKKzIwMTAtMTItMTYgIEpvaG4gVmlsbGFsb3ZvcyA8am9obi5sLnZpbGxhbG92b3NAaW50ZWwuY29tPgorCisJKiBldmVudHMvTWFrZWZpbGUuYW06CisJKiBsaWJvcC9vcF9jcHVfdHlwZS5jOgorCSogbGlib3Avb3BfY3B1X3R5cGUuaDoKKwkqIGxpYm9wL29wX2h3X3NwZWNpZmljLmg6CisJKiBsaWJvcC9vcF9ldmVudHMuYzoKKwkqIHV0aWxzL29waGVscC5jOgorCSogZXZlbnRzL2kzODYvd2VzdG1lcmUvZXZlbnRzIChuZXcpOgorCSogZXZlbnRzL2kzODYvd2VzdG1lcmUvdW5pdF9tYXNrcyAobmV3KTogQWRkIHN1cHBvcnQgZm9yIEludGVsCisJICBXZXN0bWVyZSBtaWNyby1hcmNoaXRlY3R1cmUgcHJvY2Vzc29ycworCisyMDEwLTEyLTE1ICBXaWxsIENvaGVuICA8d2NvaGVuQHJlZGhhdC5jb20+CisKKwkqIGxpYm9wL29wX2NwdV90eXBlLmM6CisJKiBsaWJvcC9vcF9jcHVfdHlwZS5oOgorCSogbGlib3Avb3BfaHdfc3BlY2lmaWMuaDogVXNlci1zcGFjZSBpZGVudGlmaWNhdGlvbiBvZiBwcm9jZXNzb3JzCisJICB0aGF0IHN1cHBvcnQgSW50ZWwgYXJjaGl0ZWN0dXJhbCBldmVudHMKKworMjAxMC0xMi0xNCAgU3VyYXZlZSBTdXRoaWt1bHBhbml0IDxzdXJhdmVlLnN1dGhpa3VscGFuaXRAYW1kLmNvbT4KKworCSogb3Byb2ZpbGUvZGFlbW9uL29wZF9pYnNfdHJhbnMuYzogRml4IG5vbi14ODYgYnVpbGQgaXNzdWUgCisJICBkdWUgdG8gY3B1aWQgaW5zdHJ1Y3Rpb24KKworMjAxMC0xMS03ICBTdXJhdmVlIFN1dGhpa3VscGFuaXQgPHN1cmF2ZWUuc3V0aGlrdWxwYW5pdEBhbWQuY29tPgorCisJKiBvcHJvZmlsZS91dGlscy9vcGNvbnRyb2w6CisJKiBvcHJvZmlsZS9kYWVtb24vaW5pdC5jOgorCSogb3Byb2ZpbGUvZGFlbW9uL29wZF9leHRlbmRlZC5oOgorCSogb3Byb2ZpbGUvZGFlbW9uL29wZF9leHRlbmRlZC5jOgorCSogb3Byb2ZpbGUvZGFlbW9uL29wZF9pYnMuaDoKKwkqIG9wcm9maWxlL2RhZW1vbi9vcGRfaWJzLmM6CisJKiBvcHJvZmlsZS9kYWVtb24vb3BkX2lic190cmFucy5oOgorCSogb3Byb2ZpbGUvZGFlbW9uL29wZF9pYnNfdHJhbnMuYzoKKwkqIG9wcm9maWxlL2V2ZW50cy94ODYtNjQvZmFtaWx5MTAvdW5pdF9tYXNrczoKKwkqIG9wcm9maWxlL2RhZW1vbi9vcGRfaWJzX21hY3JvLmg6IEFkZGl0aW9uYWwgSUJTIHN1cHBvcnRzIGZvciAKKwkgIGZhbWlseTEyLzE0LzE1aCBpbmNsdWRpbmc6CisJCS0gSUJTIE9wIGJyYW5jaCB0YXJnZXQgYWRkcmVzcyBsb2cKKwkJLSBJQlMgT3AgbWVtb3J5IGFjY2VzcyBsb2cKKwkJLSBJQlMgT3AgZXh0ZW5kZWQgY291bnQgYml0cworCisyMDEwLTExLTcgIFN1cmF2ZWUgU3V0aGlrdWxwYW5pdCA8c3VyYXZlZS5zdXRoaWt1bHBhbml0QGFtZC5jb20+CisKKwkqIGV2ZW50cy9NYWtlZmlsZS5hbToKKwkqIGxpYm9wL29wX2V2ZW50cy5jOgorCSogbGlib3Avb3BfY3B1X3R5cGUuaDoKKwkqIGxpYm9wL29wX2NwdV90eXBlLmM6CisJKiB1dGlscy9vcGhlbHAuYzoKKwkqIGV2ZW50cy94ODYtNjQvZmFtaWx5MTJoL2V2ZW50czogTmV3IEZpbGUKKwkqIGV2ZW50cy94ODYtNjQvZmFtaWx5MTJoL3VuaXRfbWFza3M6IE5ldyBGaWxlCisJKiBldmVudHMveDg2LTY0L2ZhbWlseTE0aC9ldmVudHM6IE5ldyBGaWxlCisJKiBldmVudHMveDg2LTY0L2ZhbWlseTE0aC91bml0X21hc2tzOiBOZXcgRmlsZQorCSogZXZlbnRzL3g4Ni02NC9mYW1pbHkxNWgvZXZlbnRzOiBOZXcgRmlsZQorCSogZXZlbnRzL3g4Ni02NC9mYW1pbHkxNWgvdW5pdF9tYXNrczogTmV3IEZpbGUKKwkgIEFkZCBzdXBwb3J0IGZvciBuZXcgQU1EIHByb2Nlc3NvcnMgKGZhbWlseTEyaC8xNGgvMTVoKQorCisyMDEwLTEwLTE1ICBSb2xhbmQgR3J1bmJlcmcgIDxyb2xhbmQuZ3J1bmJlcmdAZ21haWwuY29tPgorCisJKiBsaWJvcC9vcF94bWxfZXZlbnRzLmM6CisJKiBsaWJvcC9vcF94bWxfb3V0LmM6CisJKiBsaWJvcC9vcF94bWxfb3V0Lmg6CisJKiBkb2Mvb3BoZWxwLnhzZDogQWRkIHVuaXQgbWFzayB0eXBlIGF0dHJpYnV0ZSBmb3IgYW4gZXZlbnQgaW4KKwkgIHRoZSBvcGhlbHAgc2NoZW1hCisKKzIwMTAtMTAtMTUgIE1heW5hcmQgSm9obnNvbiAgPG1heW5hcmRqQHVzLmlibS5jb20+CisKKwkqIGRvYy9vcGhlbHAueHNkOgorCSogbGlib3Avb3BfeG1sX2V2ZW50cy5jOiBGaXggc2NoZW1hIHZhbGlkYXRpb24gaXNzdWVzIGFuZCBlcnJvciBpbgorCSAgeG1sIGdlbmVyYXRpb24KKworMjAxMC0xMC0xMyAgTWF5bmFyZCBKb2huc29uICA8bWF5bmFyZGpAdXMuaWJtLmNvbT4KKworCSogbGliYWJpL29waW1wb3J0LmNwcDogRml4IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgd2FybmluZyB3aGVuCisJICBidWlsZGluZyB3aXRoIGdjYyA0LjQKKworMjAxMC0xMC0xMyAgTWF5bmFyZCBKb2huc29uICA8bWF5bmFyZGpAdXMuaWJtLmNvbT4KKworCSogZXZlbnRzL21pcHMvTWFrZWZpbGUuYW06IENvcnJlY3Rpb24gdG8gOC8yNiBNSVBTIHBhdGNoCisJICB0byBhZGQgZXZlbnRzIGFuZCB1bml0X21hc2tzIHRvIG1ha2VmaWxlCisKKzIwMTAtMTAtMDcgIFdpbGxpYW0gQ29oZW4gIDx3Y29oZW5AcmVkaGF0LmNvbT4KKworCSogZXZlbnRzL2kzODYvYXJjaF9wZXJmbW9uL2V2ZW50czogQ29ycmVjdCBmaWx0ZXIgdmFsdWVzLgorCisyMDEwLTA4LTI2ICBQYXVsIExpbmQgIDxwbGluZEBtaXBzLmNvbT4KKworCSogbGlib3Avb3BfY3B1X3R5cGUuW2gsY106CisJKiBsaWJvcC9vcF9ldmVudHMuYzoKKwkqIHV0aWxzL29waGVscC5jOiBBZGQgIm1pcHMvNzRLIiBhbmQgIm1pcHMvMTAwNEsiIGFzIHZhbGlkIGNwdSB0eXBlcywKKwkgIGFuZCBjaGFuZ2UgbnVtYmVyIG9mIGF2YWlsYWJsZSAzNEsgY291bnRlcnMgdG8gMi4KKwkqIGxpYm9wL3Rlc3RzL2FsbG9jX2NvdW50ZXJfdGVzdHMuYzogY29ycmVjdCAzNEsgdGVzdCB0byAyIGNvdW50ZXJzLgorCSogZXZlbnRzL21pcHMvMjRLL2V2ZW50czogY29ycmVjdCB0aGUgcGVyZm9ybWFuY2UgY291bnRlcnMgZm9yIDI0Sy4KKwkqIGV2ZW50cy9taXBzLzM0Sy9ldmVudHM6IGNvcnJlY3QgdGhlIHBlcmZvcm1hbmNlIGNvdW50ZXJzIGZvciAzNEsuCisJKiBldmVudHMvbWlwcy83NEsvW2V2ZW50cyx1bml0X21hc2tzXTogQWRkIGV2ZW50cyBmb3IgNzRLLgorCSogZXZlbnRzL21pcHMvMTAwNEsvW2V2ZW50cyx1bml0X21hc2tzXTogQWRkIGV2ZW50cyBmb3IgMTAwNEsuCisKKzIwMTAtMDgtMTMgIE1heW5hcmQgSm9obnNvbiAgPG1heW5hcmRqQHVzLmlibS5jb20+CisKKwkqIHV0aWxzL29wY29udHJvbDoKKwkqIGRvYy9vcGNvbnRyb2wuMS5pbjogVXBkYXRlIGhlbHAgYW5kIG1hbiBwYWdlIGZvciBvcGNvbnRyb2wgdG8gaW5kaWNhdGUKKwkgIHRoYXQgYnVmZmVyIHZhbHVlcyBtYXkgYmUgcmVzZXQgdG8gZGVmYXVsdCB2YWx1ZXMgYnkgcGFzc2luZyBhICcwJworCisyMDEwLTA4LTAyICBNYXluYXJkIEpvaG5zb24gIDxtYXluYXJkakB1cy5pYm0uY29tPgorCisJKiB1dGlscy9vcGNvbnRyb2w6CisJKiBsaWJwcC9wcm9maWxlX3NwZWMuY3BwOgorCSogcHAvb3BhcmNoaXZlLmNwcDogIE1vdmVkIHRoZSBjb3B5aW5nIG9mIHN0YXRzIHRvIG9wY29udHJvbDo6ZG9fZHVtcF9kYXRhCisJICBhbmQgcmVtb3ZlZCB0aGUgdW5uZWNlc3NhcnkgYW5kIGNvbmZ1c2luZyBtZXNzYWdlIHRoYXQgaW5kaWNhdGVkCisJICB3aGVuIG92ZXJmbG93IHN0YXRzIHdlcmUgbm90IGF2YWlsYWJsZS4KKworMjAxMC0wNy0xMyAgTWF5bmFyZCBKb2huc29uICA8bWF5bmFyZGpAdXMuaWJtLmNvbT4KKworCSogZXZlbnRzL2FybS9hcm12Ny1jb21tb24vZXZlbnRzOiAobmV3KQorCSogZXZlbnRzL2FybS9hcm12Ny1jb21tb24vdW5pdF9tYXNrczogKG5ldykKKwkqIGV2ZW50cy9hcm0vYXJtdjctY2E5L2V2ZW50czogKG5ldykKKwkqIGV2ZW50cy9hcm0vYXJtdjctY2E5L3VuaXRfbWFza3M6IChuZXcpCisJICBJIG5lZ2xlY3RlZCB0byBkbyAnY3ZzIGFkZCcgZm9yIHRoZXNlIG5ldyBmaWxlcyBpbiB0aGUKKwkgIHByZXZpb3VzIGNvbW1pdDsgZG9pbmcgc28gbm93LgorCisyMDEwLTA3LTAxICBXaWxsIERlYWNvbiAgPHdpbGwuZGVhY29uQGFybS5jb20+CisKKwkqIGV2ZW50cy9hcm0vYXJtdjctY29tbW9uL2V2ZW50czoKKwkqIGV2ZW50cy9hcm0vYXJtdjctY29tbW9uL3VuaXRfbWFza3M6CisJKiBldmVudHMvYXJtL2FybXY3L2V2ZW50czogZmFjdG9yIG91dCBBUk12NyBjb21tb24gYXJjaGl0ZWN0dXJhbCBldmVudHMKKwkqIGV2ZW50cy9NYWtlZmlsZS5hbToKKwkqIGxpYm9wL29wX2NwdV90eXBlLmM6CisJKiBsaWJvcC9vcF9jcHVfdHlwZS5oOgorCSogbGlib3Avb3BfZXZlbnRzLmM6CisJKiB1dGlscy9vcGhlbHAuYzogY29ycmVjdCB1c2FnZSBvZiBjb3JlIHRlcm1pbm9sb2d5IGZvciB2NyBhbmQgTVBDb3JlCisJKiBldmVudHMvYXJtL2FybXY3LWNhOS9ldmVudHM6CisJKiBldmVudHMvYXJtL2FybXY3LWNhOS91bml0X21hc2tzOiBhZGQgc3VwcG9ydCBmb3IgQ29ydGV4LUE5IGV2ZW50cworCisyMDEwLTA2LTIxICBKb2huIFZpbGxhbG92b3MgPGpvaG4ubC52aWxsYWxvdm9zQGludGVsLmNvbT4KKworCSogbGlib3Avb3BfY3B1X3R5cGUuW2gsY106CisJKiBsaWJvcC9vcF9ldmVudHMuYzoKKwkqIHV0aWxzL29waGVscC5jOiBBZGQgImkzODYvbmVoYWxlbSIgYXMgYSB2YWxpZCBjcHVfdHlwZS4gIFRoaXMgd2lsbAorCWFsbG93IHRoZSBrZXJuZWwgaW4gdGhlIGZ1dHVyZSAoaWYgZGVzaXJlZCkgdG8gdXNlICJpMzg2L25laGFsZW0iCisJaW5zdGVhZCBvZiAiaTM4Ni9jb3JlX2k3Ii4gIENvcmUgaTcgcHJvY2Vzc29ycyBjYW4gYmUgZWl0aGVyIE5laGFsZW0KKwlvciBXZXN0bWVyZSBtaWNyb2FyY2hpdGVjdHVyZSBidXQgdGhlICJpMzg2L2NvcmVfaTciIGNwdV90eXBlIGluCisJT3Byb2ZpbGUgaXMgb25seSBmb3IgTmVoYWxlbSBtaWNyb2FyY2hpdGVjdHVyZSBwcm9jZXNzb3JzLgorCisyMDEwLTA2LTExICBXaWxsaWFtIENvaGVuIDx3Y29oZW5AcmVkaGF0LmNvbT4KKworICAgICAgICAqIGxpYnJlZ2V4L3N0bC5wYXQuaW46IEF2b2lkIG1hY2hpbmUgc3BlY2lmaWMgY29uZmlndXJhdGlvbi4KKworMjAxMC0wNS0xOCAgRGFuaWVsIEhhbnNlbCAgPGRhbmllbC5oYW5zZWxAbGludXgudm5ldC5pYm0uY29tPgorCisJKiBkb2Mvb3Byb2ZpbGUueG1sOiBEb2N1bWVudCB0aGF0IG9ubHkga2VybmVsIHZlcnNpb25zIDIuNi4xMyBvcgorCSAgbGF0ZXIgcHJvdmlkZSBzdXBwb3J0IGZvciBhbm9ueW1vdXMgbWFwcGVkIHJlZ2lvbnMKKworMjAxMC0wNC0xMyAgTWF5bmFyZCBKb2huc29uICA8bWF5bmFyZGpAdXMuaWJtLmNvbT4KKworCSogbGlidXRpbCsrL2JmZF9zdXBwb3J0LmNwcDogRml4IHVwIHRyYW5zbGF0ZV9kZWJ1Z2luZm9fc3ltcworCSAgc28gaXQgZG9lc24ndCByZWx5IG9uIHNlY3Rpb24gaW5kZXggdmFsdWVzIGJlaW5nIHRoZSBzYW1lCisJICBiZXR3ZWVuIHJlYWwgaW1hZ2UgYW5kIGRlYnVnaW5mbyBmaWxlICh0byByZXNvbHZlIHByb2JsZW0KKwkgIHJlcG9ydGVkIGJ5IFdpbGwgQ29oZW4gb24gRmVkb3JhIDEyKQorCisyMDEwLTAzLTI1ICBPbGl2ZXIgU2NobmVpZGVyICA8b2xpdmVyQGFzc2FyYmFkLm5ldD4KKworCSogbGlicHAvcGFyc2VfZmlsZW5hbWUuY3BwOiAgQ2F0Y2ggY2FzZSB3aGVyZSBhIGJhc2ljX3N0cmluZzo6ZXJhc2UKKwkgIGVycm9yIGNhbiBvY2N1ciBpbiBvcHJlcG9ydCB3aGVuIHBhcnNpbmcgYW4gaW52YWxpZCBzYW1wbGUgZmlsZSBuYW1lCisKKzIwMTAtMDMtMjUgIE1heW5hcmQgSm9obnNvbiAgPG1heW5hcmRqQHVzLmlibS5jb20+CisKKwkqIGV2ZW50cy9taXBzL2xvb25nc29uMi9ldmVudHM6IE5ldyBGaWxlCisJKiBldmVudHMvbWlwcy9sb29uZ3NvbjIvdW5pdF9tYXNrczogTmV3IEZpbGUKKwkgICBJIG5lZ2xlY3RlZCB0byBkbyAnY3ZzIGFkZCcgZm9yIHRoZXNlIG5ldyB0d28gbmV3IGZpbGVzCisJICAgYmFjayBvbiBOb3YgMjUsIDIwMDkgd2hlbiBJIGNvbW1pdHRlZCB0aGUgaW5pdGlhbAorCSAgIGxvb25nc29uMiBzdXBwb3J0LiAgVGhpcyBjaGFuZ2UgY29ycmVjdHMgdGhhdCBlcnJvci4KKworMjAxMC0wMy0wMSAgR2Fib3IgTG9raSAgPGxva2lAaW5mLnUtc3plZ2VkLmh1PgorCisJKiBkYWVtb24vb3BkX3BpcGUuYzogRml4IG1lbW9yeSBsZWFrCisJKiB1dGlscy9vcGNvbnRyb2w6IEZpeCBtZXNzYWdlcyBzZW5kaW5nIG1ldGhvZCB0byBvcGRfcGlwZQorCisyMDEwLTAxLTIwICBNYXluYXJkIEpvaG5zb24gIDxtYXluYXJkakB1cy5pYm0uY29tPgorCisJKiBtNC9xdC5tNDogRml4IHF0IGxpYiBjaGVjayBzbyBpdCB3b3JrcyBvbiBiYXNlIDY0LWJpdCBzeXN0ZW0KKworCitTZWUgQ2hhbmdlTG9nLTIwMDkgZm9yIGVhcmxpZXIgY2hhbmdlbG9ncy4KZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L0NoYW5nZUxvZy0yMDExIGIvb3Byb2ZpbGUtMC45LjcvQ2hhbmdlTG9nLTIwMTEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzcxMGMxMQotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L0NoYW5nZUxvZy0yMDExCkBAIC0wLDAgKzEsMjAgQEAKKzIwMTEtMDItMjUgIE1heW5hcmQgSm9obnNvbiAgPG1heW5hcmRqQHVzLmlibS5jb20+CisKKwlGcm9tIHRoaXMgZGF0ZSBmb3J3YXJkLCBDaGFuZ2VMb2cgZW50cmllcyB3aWxsIG5vdAorCWJlIG5lY2Vzc2FyeSwgc2luY2UgJ2dpdCBsb2cnIGNhbiBub3cgYmUgdXNlZCB0byBzaG93CisJY2hhbmdlcyBpbiB0aGUgcmVwb3NpdG9yeS4KKworMjAxMS0wMi0wOSAgV2lsbGlhbSBDb2hlbiAgPHdjb2hlbkByZWRoYXQuY29tPgorCisJKiBsaWJwcC9mb3JtYXRfb3V0cHV0Lmg6IERvIG5vdCB1c2UgbXV0YWJsZSBmb3IgcmVmZXJlbmNlIHZhcmlhYmxlLgorCisyMDExLTAxLTE3ICBXaWxsIERlYWNvbiAgPHdpbGwuZGVhY29uQGFybS5jb20+CisKKwkqIGV2ZW50cy9hcm0vYXJtdjctY2E5L2V2ZW50czogQWRkIG1pc3NpbmcgVExCIGV2ZW50CisKKzIwMTEtMDEtMDUgIFdpbGxpYW0gQ29oZW4gIDx3Y29oZW5AcmVkaGF0LmNvbT4KKworCSogdXRpbHMvb3Bjb250cm9sOiBBZGQgYXJndW1lbnQgY2hlY2tpbmcgZm9yIG51bWVyaWNhbCBhcmd1bWVudHMKKworCitTZWUgQ2hhbmdlTG9nLTIwMTAgZm9yIGVhcmxpZXIgY2hhbmdlbG9ncy4KZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L01ha2VmaWxlLmFtIGIvb3Byb2ZpbGUtMC45LjcvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjJlODkzNgotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsMTEwIEBACisjIyMjIEFUVEVOVElPTiAjIyMjCisjICAgIFRoZSBhZ2VudHMgZGlyZWN0b3J5IG11c3QgYmUga2VwdCBhcyB0aGUgbGFzdCBzdWJkaXIKK1NVQkRJUlMgPSBcCisJLiBcCisJbTQgXAorCWxpYnV0aWwgXAorCWxpYm9wIFwKKwlsaWJvcGFnZW50IFwKKwlsaWJkYiBcCisJbGlidXRpbCsrIFwKKwlsaWJvcHQrKyBcCisJbGliYWJpIFwKKwlkYWVtb24gXAorCXV0aWxzIFwKKwlsaWJyZWdleCBcCisJbGlicHAgXAorCW9waml0Y29udiBcCisJcHAgXAorCWV2ZW50cyBcCisJZG9jIFwKKwlndWkgXAorCWFnZW50cworIyMjIyBBVFRFTlRJT04gIyMjIworIyAgICBUaGUgYWdlbnRzIGRpcmVjdG9yeSBtdXN0IGJlIGtlcHQgYXMgdGhlIGxhc3Qgc3ViZGlyCisKKworCitBQ0xPQ0FMX0FNRkxBR1MgPSAtSSBtNAorCisjIFRoZSBtb2R1bGUgd2lsbCBub3QgYnVpbGQgdW5kZXIgZGlzdGNoZWNrCitESVNUQ0hFQ0tfQ09ORklHVVJFX0ZMQUdTID0gLS13aXRoLWtlcm5lbC1zdXBwb3J0CisKK2lmICFrZXJuZWxfc3VwcG9ydAorCisuUEhPTlk6IG1vZHVsZQorCithbGwtbG9jYWw6IG1vZHVsZQorCisjIFRoaXMgbXVzdCB1c2UgYSBmdWxseS1xdWFsaWZpZWQgU1VCRElSUyBwYXRoLCBzbyB3ZSBjYW4ndCB1c2UgJHt0b3Bfc3JjZGlyfQorbW9kdWxlOgorCW1ha2UgLUMgbGlidXRpbAorCW1ha2UgLUMgbGlib3AKKwkoY2QgJChLU1JDKSAmJiAkKE1BS0UpIFNVQkRJUlM9JChPUFJPRklMRV9ESVIpL21vZHVsZS9AT1BST0ZJTEVfTU9EVUxFX0FSQ0hAIG1vZHVsZXMpIHx8IGV4aXQgMSA7CisJKGNkICQoS1NSQykgJiYgJChNQUtFKSBTVUJESVJTPSQoT1BST0ZJTEVfRElSKS9tb2R1bGUgbW9kdWxlcykgfHwgZXhpdCAxIDsKKworaW5zdGFsbC1leGVjLWxvY2FsOgorCS1ta2RpciAtcCAkKE1PRElOU1RBTExESVIpL29wcm9maWxlCisJY3AgbW9kdWxlL29wcm9maWxlLW1vZHVsZS5vICQoTU9ESU5TVEFMTERJUikvb3Byb2ZpbGUvb3Byb2ZpbGUubworCWlmIHRlc3QgJChLVkVSUykgPSAiYHVuYW1lIC1yYCI7IHRoZW4gZGVwbW9kIC1hIDsgZmkKKworY2xlYW4tbG9jYWw6CisJcm0gLWYgbW9kdWxlLyoubyBtb2R1bGUvQE9QUk9GSUxFX01PRFVMRV9BUkNIQC8qLm8gXAorCW1vZHVsZS8uKi5vLmNtZCBtb2R1bGUvLiouby5mbGFncyBcCisJbW9kdWxlL0BPUFJPRklMRV9NT0RVTEVfQVJDSEAvLiouby5jbWQgbW9kdWxlL0BPUFJPRklMRV9NT0RVTEVfQVJDSEAvLiouby5mbGFncworCitlbmRpZgorCitFWFRSQV9ESVNUID0gXAorCUNoYW5nZUxvZy0yMDAxIFwKKwlDaGFuZ2VMb2ctMjAwMiBcCisJQ2hhbmdlTG9nLTIwMDMgXAorCUNoYW5nZUxvZy0yMDA0IFwKKwlDaGFuZ2VMb2ctMjAwNSBcCisgICAgICAgIENoYW5nZUxvZy0yMDA2IFwKKwlDaGFuZ2VMb2ctMjAwNyBcCisJQ2hhbmdlTG9nLTIwMDggXAorCUNoYW5nZUxvZy0yMDA5IFwKKwlDaGFuZ2VMb2ctMjAxMCBcCisJQ2hhbmdlTG9nLTIwMTEgXAorCWF1dG9nZW4uc2ggXAorCVJFQURNRV9QQUNLQUdFUlMgXAorCWluY2x1ZGUvc3N0cmVhbSBcCisJbW9kdWxlL01ha2VmaWxlLmluIFwKKwltb2R1bGUvY29tcGF0LmMgXAorCW1vZHVsZS9vcF9kbmFtZS5jIFwKKwltb2R1bGUvb3BfaW5pdC5jIFwKKwltb2R1bGUvb3Byb2ZpbGUuYyBcCisJbW9kdWxlL29wX3V0aWwuYyBcCisJbW9kdWxlL2NvbXBhdDIyLmggXAorCW1vZHVsZS9jb21wYXQyNC5oIFwKKwltb2R1bGUvY29tcGF0LmggXAorCW1vZHVsZS9vcF9jYWNoZS5oIFwKKwltb2R1bGUvb3BfZGNhY2hlLmggXAorCW1vZHVsZS9vcHJvZmlsZS5oIFwKKwltb2R1bGUvb3BfdXRpbC5oIFwKKwltb2R1bGUvaWE2NC9NYWtlZmlsZS5pbiBcCisJbW9kdWxlL2lhNjQvb3Byb2ZpbGVfc3R1YnMuUyBcCisJbW9kdWxlL2lhNjQvY3B1X3R5cGUuYyBcCisJbW9kdWxlL2lhNjQvb3BfcG11LmMgXAorCW1vZHVsZS9pYTY0L29wX3N5c2NhbGxzLmMgXAorCW1vZHVsZS9pYTY0L0lBNjRlbnRyeS5oIFwKKwltb2R1bGUvaWE2NC9JQTY0bWluc3RhdGUuaCBcCisJbW9kdWxlL2lhNjQvSUE2NHN5c2NhbGxzdHViLmggXAorCW1vZHVsZS9pYTY0L29wX2lhNjRfbW9kZWwuaCBcCisJbW9kdWxlL3g4Ni9NYWtlZmlsZS5pbiBcCisJbW9kdWxlL3g4Ni9vcHJvZmlsZV9ubWkuUyBcCisJbW9kdWxlL3g4Ni9hcGljX2NvbXBhdC5oIFwKKwltb2R1bGUveDg2L29wX2FwaWMuaCBcCisJbW9kdWxlL3g4Ni9vcF9hcmNoLmggXAorCW1vZHVsZS94ODYvb3BfeDg2X21vZGVsLmggXAorCW1vZHVsZS94ODYvb3BfbXNyLmggXAorCW1vZHVsZS94ODYvY3B1X3R5cGUuYyBcCisJbW9kdWxlL3g4Ni9vcF9hcGljLmMgXAorCW1vZHVsZS94ODYvb3BfZml4bWFwLmMgXAorCW1vZHVsZS94ODYvb3BfbW9kZWxfYXRobG9uLmMgXAorCW1vZHVsZS94ODYvb3BfbW9kZWxfcDQuYyBcCisJbW9kdWxlL3g4Ni9vcF9tb2RlbF9wcHJvLmMgXAorCW1vZHVsZS94ODYvb3Bfbm1pLmMgXAorCW1vZHVsZS94ODYvb3BfcnRjLmMgXAorCW1vZHVsZS94ODYvb3Bfc3lzY2FsbHMuYwpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvTWFrZWZpbGUuaW4gYi9vcHJvZmlsZS0wLjkuNy9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MGU0MDY1Ci0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSw4OTcgQEAKKyMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTEuMSBmcm9tIE1ha2VmaWxlLmFtLgorIyBAY29uZmlndXJlX2lucHV0QAorCisjIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwKKyMgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorIyBJbmMuCisjIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0CisjIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKKyMgUEFSVElDVUxBUiBQVVJQT1NFLgorCitAU0VUX01BS0VACitWUEFUSCA9IEBzcmNkaXJACitwa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKK3BrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAorcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAorcGtnbGliZXhlY2RpciA9ICQobGliZXhlY2RpcikvQFBBQ0tBR0VACithbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCitpbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAoraW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYworaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCitJTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQordHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQorTk9STUFMX0lOU1RBTEwgPSA6CitQUkVfSU5TVEFMTCA9IDoKK1BPU1RfSU5TVEFMTCA9IDoKK05PUk1BTF9VTklOU1RBTEwgPSA6CitQUkVfVU5JTlNUQUxMID0gOgorUE9TVF9VTklOU1RBTEwgPSA6CitidWlsZF90cmlwbGV0ID0gQGJ1aWxkQAoraG9zdF90cmlwbGV0ID0gQGhvc3RACitzdWJkaXIgPSAuCitESVNUX0NPTU1PTiA9IFJFQURNRSAkKGFtX19jb25maWd1cmVfZGVwcykgJChzcmNkaXIpL01ha2VmaWxlLmFtIFwKKwkkKHNyY2RpcikvTWFrZWZpbGUuaW4gJChzcmNkaXIpL2NvbmZpZy5oLmluIFwKKwkkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKHRvcF9zcmNkaXIpL2RvYy9zcmNkb2MvRG94eWZpbGUuaW4gXAorCSQodG9wX3NyY2RpcikvZG9jL3hzbC9jYXRhbG9nLTEueG1sLmluIFwKKwkkKHRvcF9zcmNkaXIpL21vZHVsZS9NYWtlZmlsZS5pbiBcCisJJCh0b3Bfc3JjZGlyKS9tb2R1bGUvaWE2NC9NYWtlZmlsZS5pbiBcCisJJCh0b3Bfc3JjZGlyKS9tb2R1bGUveDg2L01ha2VmaWxlLmluIENPUFlJTkcgVE9ETyBjb25maWcuZ3Vlc3MgXAorCWNvbmZpZy5zdWIgZGVwY29tcCBpbnN0YWxsLXNoIGx0bWFpbi5zaCBtaXNzaW5nCitBQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00CithbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9tNC9iaW51dGlscy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9idWlsdGluZXhwZWN0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2NlbGxzcHViZmRzdXBwb3J0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2NvbXBpbGVyb3B0aW9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2NvbmZpZ21vZHVsZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jb3B5aWZjaGFuZ2UubTQgJCh0b3Bfc3JjZGlyKS9tNC9kb2Nib29rLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2V4dHJhZGlycy5tNCAkKHRvcF9zcmNkaXIpL200L2ZpbmRrZXJuZWwubTQgXAorCSQodG9wX3NyY2RpcikvbTQva2VybmVsb3B0aW9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2tlcm5lbHZlcnNpb24ubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWJ0b29sLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2x0b3B0aW9ucy5tNCAkKHRvcF9zcmNkaXIpL200L2x0c3VnYXIubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbHR2ZXJzaW9uLm00ICQodG9wX3NyY2RpcikvbTQvbHR+b2Jzb2xldGUubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbWFsbG9jYXR0cmlidXRlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3BvcHRjb25zdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9wcmVjb21waWxlZGhlYWRlci5tNCAkKHRvcF9zcmNkaXIpL200L3F0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3Jlc3VsdHluLm00ICQodG9wX3NyY2RpcikvbTQvc3N0cmVhbS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC90eXBlZGVmLm00ICQodG9wX3NyY2RpcikvY29uZmlndXJlLmluCithbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAorCSQoQUNMT0NBTF9NNCkKK2FtX19DT05GSUdfRElTVENMRUFOX0ZJTEVTID0gY29uZmlnLnN0YXR1cyBjb25maWcuY2FjaGUgY29uZmlnLmxvZyBcCisgY29uZmlndXJlLmxpbmVubyBjb25maWcuc3RhdHVzLmxpbmVubworbWtpbnN0YWxsZGlycyA9ICQoaW5zdGFsbF9zaCkgLWQKK0NPTkZJR19IRUFERVIgPSBjb25maWcuaAorQ09ORklHX0NMRUFOX0ZJTEVTID0gZG9jL3hzbC9jYXRhbG9nLTEueG1sIGRvYy9zcmNkb2MvRG94eWZpbGUgXAorCW1vZHVsZS9NYWtlZmlsZSBtb2R1bGUveDg2L01ha2VmaWxlIG1vZHVsZS9pYTY0L01ha2VmaWxlCitDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMgPQorU09VUkNFUyA9CitESVNUX1NPVVJDRVMgPQorUkVDVVJTSVZFX1RBUkdFVFMgPSBhbGwtcmVjdXJzaXZlIGNoZWNrLXJlY3Vyc2l2ZSBkdmktcmVjdXJzaXZlIFwKKwlodG1sLXJlY3Vyc2l2ZSBpbmZvLXJlY3Vyc2l2ZSBpbnN0YWxsLWRhdGEtcmVjdXJzaXZlIFwKKwlpbnN0YWxsLWR2aS1yZWN1cnNpdmUgaW5zdGFsbC1leGVjLXJlY3Vyc2l2ZSBcCisJaW5zdGFsbC1odG1sLXJlY3Vyc2l2ZSBpbnN0YWxsLWluZm8tcmVjdXJzaXZlIFwKKwlpbnN0YWxsLXBkZi1yZWN1cnNpdmUgaW5zdGFsbC1wcy1yZWN1cnNpdmUgaW5zdGFsbC1yZWN1cnNpdmUgXAorCWluc3RhbGxjaGVjay1yZWN1cnNpdmUgaW5zdGFsbGRpcnMtcmVjdXJzaXZlIHBkZi1yZWN1cnNpdmUgXAorCXBzLXJlY3Vyc2l2ZSB1bmluc3RhbGwtcmVjdXJzaXZlCitSRUNVUlNJVkVfQ0xFQU5fVEFSR0VUUyA9IG1vc3RseWNsZWFuLXJlY3Vyc2l2ZSBjbGVhbi1yZWN1cnNpdmUJXAorICBkaXN0Y2xlYW4tcmVjdXJzaXZlIG1haW50YWluZXItY2xlYW4tcmVjdXJzaXZlCitBTV9SRUNVUlNJVkVfVEFSR0VUUyA9ICQoUkVDVVJTSVZFX1RBUkdFVFM6LXJlY3Vyc2l2ZT0pIFwKKwkkKFJFQ1VSU0lWRV9DTEVBTl9UQVJHRVRTOi1yZWN1cnNpdmU9KSB0YWdzIFRBR1MgY3RhZ3MgQ1RBR1MgXAorCWRpc3RkaXIgZGlzdCBkaXN0LWFsbCBkaXN0Y2hlY2sKK0VUQUdTID0gZXRhZ3MKK0NUQUdTID0gY3RhZ3MKK0RJU1RfU1VCRElSUyA9ICQoU1VCRElSUykKK0RJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCitkaXN0ZGlyID0gJChQQUNLQUdFKS0kKFZFUlNJT04pCit0b3BfZGlzdGRpciA9ICQoZGlzdGRpcikKK2FtX19yZW1vdmVfZGlzdGRpciA9IFwKKyAgeyB0ZXN0ICEgLWQgIiQoZGlzdGRpcikiIFwKKyAgICB8fCB7IGZpbmQgIiQoZGlzdGRpcikiIC10eXBlIGQgISAtcGVybSAtMjAwIC1leGVjIGNobW9kIHUrdyB7fSAnOycgXAorICAgICAgICAgJiYgcm0gLWZyICIkKGRpc3RkaXIpIjsgfTsgfQorYW1fX3JlbGF0aXZpemUgPSBcCisgIGRpcjA9YHB3ZGA7IFwKKyAgc2VkX2ZpcnN0PSdzLF5cKFteL10qXCkvLiokJCxcMSwnOyBcCisgIHNlZF9yZXN0PSdzLF5bXi9dKi8qLCwnOyBcCisgIHNlZF9sYXN0PSdzLF4uKi9cKFteL10qXCkkJCxcMSwnOyBcCisgIHNlZF9idXRsYXN0PSdzLC8qW14vXSokJCwsJzsgXAorICB3aGlsZSB0ZXN0IC1uICIkJGRpcjEiOyBkbyBcCisgICAgZmlyc3Q9YGVjaG8gIiQkZGlyMSIgfCBzZWQgLWUgIiQkc2VkX2ZpcnN0ImA7IFwKKyAgICBpZiB0ZXN0ICIkJGZpcnN0IiAhPSAiLiI7IHRoZW4gXAorICAgICAgaWYgdGVzdCAiJCRmaXJzdCIgPSAiLi4iOyB0aGVuIFwKKyAgICAgICAgZGlyMj1gZWNobyAiJCRkaXIwIiB8IHNlZCAtZSAiJCRzZWRfbGFzdCJgLyIkJGRpcjIiOyBcCisgICAgICAgIGRpcjA9YGVjaG8gIiQkZGlyMCIgfCBzZWQgLWUgIiQkc2VkX2J1dGxhc3QiYDsgXAorICAgICAgZWxzZSBcCisgICAgICAgIGZpcnN0Mj1gZWNobyAiJCRkaXIyIiB8IHNlZCAtZSAiJCRzZWRfZmlyc3QiYDsgXAorICAgICAgICBpZiB0ZXN0ICIkJGZpcnN0MiIgPSAiJCRmaXJzdCI7IHRoZW4gXAorICAgICAgICAgIGRpcjI9YGVjaG8gIiQkZGlyMiIgfCBzZWQgLWUgIiQkc2VkX3Jlc3QiYDsgXAorICAgICAgICBlbHNlIFwKKyAgICAgICAgICBkaXIyPSIuLi8kJGRpcjIiOyBcCisgICAgICAgIGZpOyBcCisgICAgICAgIGRpcjA9IiQkZGlyMCIvIiQkZmlyc3QiOyBcCisgICAgICBmaTsgXAorICAgIGZpOyBcCisgICAgZGlyMT1gZWNobyAiJCRkaXIxIiB8IHNlZCAtZSAiJCRzZWRfcmVzdCJgOyBcCisgIGRvbmU7IFwKKyAgcmVsZGlyPSIkJGRpcjIiCitESVNUX0FSQ0hJVkVTID0gJChkaXN0ZGlyKS50YXIuZ3oKK0daSVBfRU5WID0gLS1iZXN0CitkaXN0dW5pbnN0YWxsY2hlY2tfbGlzdGZpbGVzID0gZmluZCAuIC10eXBlIGYgLXByaW50CitkaXN0Y2xlYW5jaGVja19saXN0ZmlsZXMgPSBmaW5kIC4gLXR5cGUgZiAtcHJpbnQKK0FDTE9DQUwgPSBAQUNMT0NBTEAKK0FNVEFSID0gQEFNVEFSQAorQVIgPSBAQVJACitBVVRPQ09ORiA9IEBBVVRPQ09ORkAKK0FVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKK0FVVE9NQUtFID0gQEFVVE9NQUtFQAorQVdLID0gQEFXS0AKK0JGRF9MSUJTID0gQEJGRF9MSUJTQAorQ0FUX0VOVFJZX0VORCA9IEBDQVRfRU5UUllfRU5EQAorQ0FUX0VOVFJZX1NUQVJUID0gQENBVF9FTlRSWV9TVEFSVEAKK0NDID0gQENDQAorQ0NERVBNT0RFID0gQENDREVQTU9ERUAKK0NGTEFHUyA9IEBDRkxBR1NACitDUFAgPSBAQ1BQQAorQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACitDWFggPSBAQ1hYQAorQ1hYQ1BQID0gQENYWENQUEAKK0NYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKK0NYWEZMQUdTID0gQENYWEZMQUdTQAorQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKK0RBVEUgPSBAREFURUAKK0RFRlMgPSBAREVGU0AKK0RFUERJUiA9IEBERVBESVJACitET0NCT09LX1JPT1QgPSBARE9DQk9PS19ST09UQAorRFNZTVVUSUwgPSBARFNZTVVUSUxACitEVU1QQklOID0gQERVTVBCSU5ACitFQ0hPX0MgPSBARUNIT19DQAorRUNIT19OID0gQEVDSE9fTkAKK0VDSE9fVCA9IEBFQ0hPX1RACitFR1JFUCA9IEBFR1JFUEAKK0VYRUVYVCA9IEBFWEVFWFRACitFWFRSQV9DRkxBR1NfTU9EVUxFID0gQEVYVFJBX0NGTEFHU19NT0RVTEVACitGR1JFUCA9IEBGR1JFUEAKK0dSRVAgPSBAR1JFUEAKK0lOU1RBTEwgPSBASU5TVEFMTEAKK0lOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACitJTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAorSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACitJTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAorSkFWQV9IT01FRElSID0gQEpBVkFfSE9NRURJUkAKK0tJTkMgPSBAS0lOQ0AKK0tTUkMgPSBAS1NSQ0AKK0tWRVJTID0gQEtWRVJTQAorTEQgPSBATERACitMREZMQUdTID0gQExERkxBR1NACitMSUJFUlRZX0xJQlMgPSBATElCRVJUWV9MSUJTQAorTElCT0JKUyA9IEBMSUJPQkpTQAorTElCUyA9IEBMSUJTQAorTElCVE9PTCA9IEBMSUJUT09MQAorTElQTyA9IEBMSVBPQAorTE5fUyA9IEBMTl9TQAorTFRMSUJPQkpTID0gQExUTElCT0JKU0AKK01BS0VJTkZPID0gQE1BS0VJTkZPQAorTUtESVJfUCA9IEBNS0RJUl9QQAorTU9DID0gQE1PQ0AKK01PRElOU1RBTExESVIgPSBATU9ESU5TVEFMTERJUkAKK05NID0gQE5NQAorTk1FRElUID0gQE5NRURJVEAKK09CSkRVTVAgPSBAT0JKRFVNUEAKK09CSkVYVCA9IEBPQkpFWFRACitPUFJPRklMRV9ESVIgPSBAT1BST0ZJTEVfRElSQAorT1BST0ZJTEVfTU9EVUxFX0FSQ0ggPSBAT1BST0ZJTEVfTU9EVUxFX0FSQ0hACitPUF9DRkxBR1MgPSBAT1BfQ0ZMQUdTQAorT1BfQ1hYRkxBR1MgPSBAT1BfQ1hYRkxBR1NACitPUF9ET0NESVIgPSBAT1BfRE9DRElSQAorT1RPT0wgPSBAT1RPT0xACitPVE9PTDY0ID0gQE9UT09MNjRACitQQUNLQUdFID0gQFBBQ0tBR0VACitQQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKK1BBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACitQQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKK1BBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACitQQUNLQUdFX1VSTCA9IEBQQUNLQUdFX1VSTEAKK1BBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACitQQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKK1BLR19DT05GSUcgPSBAUEtHX0NPTkZJR0AKK1BLR19DT05GSUdfTElCRElSID0gQFBLR19DT05GSUdfTElCRElSQAorUEtHX0NPTkZJR19QQVRIID0gQFBLR19DT05GSUdfUEFUSEAKK1BPUFRfTElCUyA9IEBQT1BUX0xJQlNACitQVFJESUZGX1RfVFlQRSA9IEBQVFJESUZGX1RfVFlQRUAKK1FUX0NGTEFHUyA9IEBRVF9DRkxBR1NACitRVF9JTkNMVURFUyA9IEBRVF9JTkNMVURFU0AKK1FUX0xERkxBR1MgPSBAUVRfTERGTEFHU0AKK1FUX0xJQiA9IEBRVF9MSUJACitRVF9MSUJTID0gQFFUX0xJQlNACitRVF9WRVJTSU9OID0gQFFUX1ZFUlNJT05ACitSQU5MSUIgPSBAUkFOTElCQAorU0VEID0gQFNFREAKK1NFVF9NQUtFID0gQFNFVF9NQUtFQAorU0hFTEwgPSBAU0hFTExACitTSVpFX1RfVFlQRSA9IEBTSVpFX1RfVFlQRUAKK1NUUklQID0gQFNUUklQQAorVUlDID0gQFVJQ0AKK1VJQ2hlbHAgPSBAVUlDaGVscEAKK1ZFUlNJT04gPSBAVkVSU0lPTkAKK1hNS01GID0gQFhNS01GQAorWE1MX0NBVEFMT0cgPSBAWE1MX0NBVEFMT0dACitYU0xUUFJPQyA9IEBYU0xUUFJPQ0AKK1hTTFRQUk9DX0ZMQUdTID0gQFhTTFRQUk9DX0ZMQUdTQAorWF9DRkxBR1MgPSBAWF9DRkxBR1NACitYX0VYVFJBX0xJQlMgPSBAWF9FWFRSQV9MSUJTQAorWF9MSUJTID0gQFhfTElCU0AKK1hfUFJFX0xJQlMgPSBAWF9QUkVfTElCU0AKK2Fic19idWlsZGRpciA9IEBhYnNfYnVpbGRkaXJACithYnNfc3JjZGlyID0gQGFic19zcmNkaXJACithYnNfdG9wX2J1aWxkZGlyID0gQGFic190b3BfYnVpbGRkaXJACithYnNfdG9wX3NyY2RpciA9IEBhYnNfdG9wX3NyY2RpckAKK2FjX2N0X0NDID0gQGFjX2N0X0NDQAorYWNfY3RfQ1hYID0gQGFjX2N0X0NYWEAKK2FjX2N0X0RVTVBCSU4gPSBAYWNfY3RfRFVNUEJJTkAKK2FtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAorYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKK2FtX19xdW90ZSA9IEBhbV9fcXVvdGVACithbV9fdGFyID0gQGFtX190YXJACithbV9fdW50YXIgPSBAYW1fX3VudGFyQAorYmluZGlyID0gQGJpbmRpckAKK2J1aWxkID0gQGJ1aWxkQAorYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACitidWlsZF9jcHUgPSBAYnVpbGRfY3B1QAorYnVpbGRfb3MgPSBAYnVpbGRfb3NACitidWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAorYnVpbGRkaXIgPSBAYnVpbGRkaXJACitkYXRhZGlyID0gQGRhdGFkaXJACitkYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKK2RvY2RpciA9IEBkb2NkaXJACitkdmlkaXIgPSBAZHZpZGlyQAorZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACitob3N0ID0gQGhvc3RACitob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACitob3N0X2NwdSA9IEBob3N0X2NwdUAKK2hvc3Rfb3MgPSBAaG9zdF9vc0AKK2hvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAoraHRtbGRpciA9IEBodG1sZGlyQAoraW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAoraW5mb2RpciA9IEBpbmZvZGlyQAoraW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAorbGliZGlyID0gQGxpYmRpckAKK2xpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKK2xvY2FsZWRpciA9IEBsb2NhbGVkaXJACitsb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACitsdF9FQ0hPID0gQGx0X0VDSE9ACittYW5kaXIgPSBAbWFuZGlyQAorbWtkaXJfcCA9IEBta2Rpcl9wQAorb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAorcGRmZGlyID0gQHBkZmRpckAKK3ByZWZpeCA9IEBwcmVmaXhACitwcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACitwc2RpciA9IEBwc2RpckAKK3NiaW5kaXIgPSBAc2JpbmRpckAKK3NoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAorc3JjZGlyID0gQHNyY2RpckAKK3N5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKK3RhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACit0b3BfYnVpbGRfcHJlZml4ID0gQHRvcF9idWlsZF9wcmVmaXhACit0b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAordG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAordG9wZGlyID0gQHRvcGRpckAKKworIyMjIyBBVFRFTlRJT04gIyMjIworIyAgICBUaGUgYWdlbnRzIGRpcmVjdG9yeSBtdXN0IGJlIGtlcHQgYXMgdGhlIGxhc3Qgc3ViZGlyCitTVUJESVJTID0gXAorCS4gXAorCW00IFwKKwlsaWJ1dGlsIFwKKwlsaWJvcCBcCisJbGlib3BhZ2VudCBcCisJbGliZGIgXAorCWxpYnV0aWwrKyBcCisJbGlib3B0KysgXAorCWxpYmFiaSBcCisJZGFlbW9uIFwKKwl1dGlscyBcCisJbGlicmVnZXggXAorCWxpYnBwIFwKKwlvcGppdGNvbnYgXAorCXBwIFwKKwlldmVudHMgXAorCWRvYyBcCisJZ3VpIFwKKwlhZ2VudHMKKworIyMjIyBBVFRFTlRJT04gIyMjIworIyAgICBUaGUgYWdlbnRzIGRpcmVjdG9yeSBtdXN0IGJlIGtlcHQgYXMgdGhlIGxhc3Qgc3ViZGlyCitBQ0xPQ0FMX0FNRkxBR1MgPSAtSSBtNAorCisjIFRoZSBtb2R1bGUgd2lsbCBub3QgYnVpbGQgdW5kZXIgZGlzdGNoZWNrCitESVNUQ0hFQ0tfQ09ORklHVVJFX0ZMQUdTID0gLS13aXRoLWtlcm5lbC1zdXBwb3J0CitFWFRSQV9ESVNUID0gXAorCUNoYW5nZUxvZy0yMDAxIFwKKwlDaGFuZ2VMb2ctMjAwMiBcCisJQ2hhbmdlTG9nLTIwMDMgXAorCUNoYW5nZUxvZy0yMDA0IFwKKwlDaGFuZ2VMb2ctMjAwNSBcCisgICAgICAgIENoYW5nZUxvZy0yMDA2IFwKKwlDaGFuZ2VMb2ctMjAwNyBcCisJQ2hhbmdlTG9nLTIwMDggXAorCUNoYW5nZUxvZy0yMDA5IFwKKwlDaGFuZ2VMb2ctMjAxMCBcCisJQ2hhbmdlTG9nLTIwMTEgXAorCWF1dG9nZW4uc2ggXAorCVJFQURNRV9QQUNLQUdFUlMgXAorCWluY2x1ZGUvc3N0cmVhbSBcCisJbW9kdWxlL01ha2VmaWxlLmluIFwKKwltb2R1bGUvY29tcGF0LmMgXAorCW1vZHVsZS9vcF9kbmFtZS5jIFwKKwltb2R1bGUvb3BfaW5pdC5jIFwKKwltb2R1bGUvb3Byb2ZpbGUuYyBcCisJbW9kdWxlL29wX3V0aWwuYyBcCisJbW9kdWxlL2NvbXBhdDIyLmggXAorCW1vZHVsZS9jb21wYXQyNC5oIFwKKwltb2R1bGUvY29tcGF0LmggXAorCW1vZHVsZS9vcF9jYWNoZS5oIFwKKwltb2R1bGUvb3BfZGNhY2hlLmggXAorCW1vZHVsZS9vcHJvZmlsZS5oIFwKKwltb2R1bGUvb3BfdXRpbC5oIFwKKwltb2R1bGUvaWE2NC9NYWtlZmlsZS5pbiBcCisJbW9kdWxlL2lhNjQvb3Byb2ZpbGVfc3R1YnMuUyBcCisJbW9kdWxlL2lhNjQvY3B1X3R5cGUuYyBcCisJbW9kdWxlL2lhNjQvb3BfcG11LmMgXAorCW1vZHVsZS9pYTY0L29wX3N5c2NhbGxzLmMgXAorCW1vZHVsZS9pYTY0L0lBNjRlbnRyeS5oIFwKKwltb2R1bGUvaWE2NC9JQTY0bWluc3RhdGUuaCBcCisJbW9kdWxlL2lhNjQvSUE2NHN5c2NhbGxzdHViLmggXAorCW1vZHVsZS9pYTY0L29wX2lhNjRfbW9kZWwuaCBcCisJbW9kdWxlL3g4Ni9NYWtlZmlsZS5pbiBcCisJbW9kdWxlL3g4Ni9vcHJvZmlsZV9ubWkuUyBcCisJbW9kdWxlL3g4Ni9hcGljX2NvbXBhdC5oIFwKKwltb2R1bGUveDg2L29wX2FwaWMuaCBcCisJbW9kdWxlL3g4Ni9vcF9hcmNoLmggXAorCW1vZHVsZS94ODYvb3BfeDg2X21vZGVsLmggXAorCW1vZHVsZS94ODYvb3BfbXNyLmggXAorCW1vZHVsZS94ODYvY3B1X3R5cGUuYyBcCisJbW9kdWxlL3g4Ni9vcF9hcGljLmMgXAorCW1vZHVsZS94ODYvb3BfZml4bWFwLmMgXAorCW1vZHVsZS94ODYvb3BfbW9kZWxfYXRobG9uLmMgXAorCW1vZHVsZS94ODYvb3BfbW9kZWxfcDQuYyBcCisJbW9kdWxlL3g4Ni9vcF9tb2RlbF9wcHJvLmMgXAorCW1vZHVsZS94ODYvb3Bfbm1pLmMgXAorCW1vZHVsZS94ODYvb3BfcnRjLmMgXAorCW1vZHVsZS94ODYvb3Bfc3lzY2FsbHMuYworCithbGw6IGNvbmZpZy5oCisJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYWxsLXJlY3Vyc2l2ZQorCisuU1VGRklYRVM6CithbS0tcmVmcmVzaDoKKwlAOgorJChzcmNkaXIpL01ha2VmaWxlLmluOiAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKKwlAZm9yIGRlcCBpbiAkPzsgZG8gXAorCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCisJICAgICokJGRlcCopIFwKKwkgICAgICBlY2hvICcgY2QgJChzcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZm9yZWlnbic7IFwKKwkgICAgICAkKGFtX19jZCkgJChzcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZm9yZWlnbiBcCisJCSYmIGV4aXQgMDsgXAorCSAgICAgIGV4aXQgMTs7IFwKKwkgIGVzYWM7IFwKKwlkb25lOyBcCisJZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1mb3JlaWduIE1ha2VmaWxlJzsgXAorCSQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmIFwKKwkgICQoQVVUT01BS0UpIC0tZm9yZWlnbiBNYWtlZmlsZQorLlBSRUNJT1VTOiBNYWtlZmlsZQorTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworCUBjYXNlICckPycgaW4gXAorCSAgKmNvbmZpZy5zdGF0dXMqKSBcCisJICAgIGVjaG8gJyAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMnOyBcCisJICAgICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1czs7IFwKKwkgICopIFwKKwkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKKwllc2FjOworCiskKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKKwkkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgLS1yZWNoZWNrCisKKyQodG9wX3NyY2RpcikvY29uZmlndXJlOiAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJJChhbV9fY2QpICQoc3JjZGlyKSAmJiAkKEFVVE9DT05GKQorJChBQ0xPQ0FMX000KTogICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKKwkkKGFtX19jZCkgJChzcmNkaXIpICYmICQoQUNMT0NBTCkgJChBQ0xPQ0FMX0FNRkxBR1MpCiskKGFtX19hY2xvY2FsX200X2RlcHMpOgorCitjb25maWcuaDogc3RhbXAtaDEKKwlAaWYgdGVzdCAhIC1mICRAOyB0aGVuIFwKKwkgIHJtIC1mIHN0YW1wLWgxOyBcCisJICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBzdGFtcC1oMTsgXAorCWVsc2UgOjsgZmkKKworc3RhbXAtaDE6ICQoc3JjZGlyKS9jb25maWcuaC5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworCUBybSAtZiBzdGFtcC1oMQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgY29uZmlnLmgKKyQoc3JjZGlyKS9jb25maWcuaC5pbjogICQoYW1fX2NvbmZpZ3VyZV9kZXBzKSAKKwkoJChhbV9fY2QpICQodG9wX3NyY2RpcikgJiYgJChBVVRPSEVBREVSKSkKKwlybSAtZiBzdGFtcC1oMQorCXRvdWNoICRACisKK2Rpc3RjbGVhbi1oZHI6CisJLXJtIC1mIGNvbmZpZy5oIHN0YW1wLWgxCitkb2MveHNsL2NhdGFsb2ctMS54bWw6ICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzICQodG9wX3NyY2RpcikvZG9jL3hzbC9jYXRhbG9nLTEueG1sLmluCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkQAorZG9jL3NyY2RvYy9Eb3h5ZmlsZTogJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMgJCh0b3Bfc3JjZGlyKS9kb2Mvc3JjZG9jL0RveHlmaWxlLmluCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkQAorbW9kdWxlL01ha2VmaWxlOiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cyAkKHRvcF9zcmNkaXIpL21vZHVsZS9NYWtlZmlsZS5pbgorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJEAKK21vZHVsZS94ODYvTWFrZWZpbGU6ICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzICQodG9wX3NyY2RpcikvbW9kdWxlL3g4Ni9NYWtlZmlsZS5pbgorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJEAKK21vZHVsZS9pYTY0L01ha2VmaWxlOiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cyAkKHRvcF9zcmNkaXIpL21vZHVsZS9pYTY0L01ha2VmaWxlLmluCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkQAorCittb3N0bHljbGVhbi1saWJ0b29sOgorCS1ybSAtZiAqLmxvCisKK2NsZWFuLWxpYnRvb2w6CisJLXJtIC1yZiAubGlicyBfbGlicworCitkaXN0Y2xlYW4tbGlidG9vbDoKKwktcm0gLWYgbGlidG9vbCBjb25maWcubHQKKworIyBUaGlzIGRpcmVjdG9yeSdzIHN1YmRpcmVjdG9yaWVzIGFyZSBtb3N0bHkgaW5kZXBlbmRlbnQ7IHlvdSBjYW4gY2QKKyMgaW50byB0aGVtIGFuZCBydW4gYG1ha2UnIHdpdGhvdXQgZ29pbmcgdGhyb3VnaCB0aGlzIE1ha2VmaWxlLgorIyBUbyBjaGFuZ2UgdGhlIHZhbHVlcyBvZiBgbWFrZScgdmFyaWFibGVzOiBpbnN0ZWFkIG9mIGVkaXRpbmcgTWFrZWZpbGVzLAorIyAoMSkgaWYgdGhlIHZhcmlhYmxlIGlzIHNldCBpbiBgY29uZmlnLnN0YXR1cycsIGVkaXQgYGNvbmZpZy5zdGF0dXMnCisjICAgICAod2hpY2ggd2lsbCBjYXVzZSB0aGUgTWFrZWZpbGVzIHRvIGJlIHJlZ2VuZXJhdGVkIHdoZW4geW91IHJ1biBgbWFrZScpOworIyAoMikgb3RoZXJ3aXNlLCBwYXNzIHRoZSBkZXNpcmVkIHZhbHVlcyBvbiB0aGUgYG1ha2UnIGNvbW1hbmQgbGluZS4KKyQoUkVDVVJTSVZFX1RBUkdFVFMpOgorCUBmYWlsPSBmYWlsY29tPSdleGl0IDEnOyBcCisJZm9yIGYgaW4geCAkJE1BS0VGTEFHUzsgZG8gXAorCSAgY2FzZSAkJGYgaW4gXAorCSAgICAqPSogfCAtLVsha10qKTs7IFwKKwkgICAgKmsqKSBmYWlsY29tPSdmYWlsPXllcyc7OyBcCisJICBlc2FjOyBcCisJZG9uZTsgXAorCWRvdF9zZWVuPW5vOyBcCisJdGFyZ2V0PWBlY2hvICRAIHwgc2VkIHMvLXJlY3Vyc2l2ZS8vYDsgXAorCWxpc3Q9JyQoU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAorCSAgZWNobyAiTWFraW5nICQkdGFyZ2V0IGluICQkc3ViZGlyIjsgXAorCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gIi4iOyB0aGVuIFwKKwkgICAgZG90X3NlZW49eWVzOyBcCisJICAgIGxvY2FsX3RhcmdldD0iJCR0YXJnZXQtYW0iOyBcCisJICBlbHNlIFwKKwkgICAgbG9jYWxfdGFyZ2V0PSIkJHRhcmdldCI7IFwKKwkgIGZpOyBcCisJICAoJChhbV9fY2QpICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICQkbG9jYWxfdGFyZ2V0KSBcCisJICB8fCBldmFsICQkZmFpbGNvbTsgXAorCWRvbmU7IFwKKwlpZiB0ZXN0ICIkJGRvdF9zZWVuIiA9ICJubyI7IHRoZW4gXAorCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgIiQkdGFyZ2V0LWFtIiB8fCBleGl0IDE7IFwKKwlmaTsgdGVzdCAteiAiJCRmYWlsIgorCiskKFJFQ1VSU0lWRV9DTEVBTl9UQVJHRVRTKToKKwlAZmFpbD0gZmFpbGNvbT0nZXhpdCAxJzsgXAorCWZvciBmIGluIHggJCRNQUtFRkxBR1M7IGRvIFwKKwkgIGNhc2UgJCRmIGluIFwKKwkgICAgKj0qIHwgLS1bIWtdKik7OyBcCisJICAgICprKikgZmFpbGNvbT0nZmFpbD15ZXMnOzsgXAorCSAgZXNhYzsgXAorCWRvbmU7IFwKKwlkb3Rfc2Vlbj1ubzsgXAorCWNhc2UgIiRAIiBpbiBcCisJICBkaXN0Y2xlYW4tKiB8IG1haW50YWluZXItY2xlYW4tKikgbGlzdD0nJChESVNUX1NVQkRJUlMpJyA7OyBcCisJICAqKSBsaXN0PSckKFNVQkRJUlMpJyA7OyBcCisJZXNhYzsgXAorCXJldj0nJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKwkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9ICIuIjsgdGhlbiA6OyBlbHNlIFwKKwkgICAgcmV2PSIkJHN1YmRpciAkJHJldiI7IFwKKwkgIGZpOyBcCisJZG9uZTsgXAorCXJldj0iJCRyZXYgLiI7IFwKKwl0YXJnZXQ9YGVjaG8gJEAgfCBzZWQgcy8tcmVjdXJzaXZlLy9gOyBcCisJZm9yIHN1YmRpciBpbiAkJHJldjsgZG8gXAorCSAgZWNobyAiTWFraW5nICQkdGFyZ2V0IGluICQkc3ViZGlyIjsgXAorCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gIi4iOyB0aGVuIFwKKwkgICAgbG9jYWxfdGFyZ2V0PSIkJHRhcmdldC1hbSI7IFwKKwkgIGVsc2UgXAorCSAgICBsb2NhbF90YXJnZXQ9IiQkdGFyZ2V0IjsgXAorCSAgZmk7IFwKKwkgICgkKGFtX19jZCkgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgJCRsb2NhbF90YXJnZXQpIFwKKwkgIHx8IGV2YWwgJCRmYWlsY29tOyBcCisJZG9uZSAmJiB0ZXN0IC16ICIkJGZhaWwiCit0YWdzLXJlY3Vyc2l2ZToKKwlsaXN0PSckKFNVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKwkgIHRlc3QgIiQkc3ViZGlyIiA9IC4gfHwgKCQoYW1fX2NkKSAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSB0YWdzKTsgXAorCWRvbmUKK2N0YWdzLXJlY3Vyc2l2ZToKKwlsaXN0PSckKFNVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKwkgIHRlc3QgIiQkc3ViZGlyIiA9IC4gfHwgKCQoYW1fX2NkKSAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBjdGFncyk7IFwKKwlkb25lCisKK0lEOiAkKEhFQURFUlMpICQoU09VUkNFUykgJChMSVNQKSAkKFRBR1NfRklMRVMpCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCisJICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCisJbWtpZCAtZklEICQkdW5pcXVlCit0YWdzOiBUQUdTCisKK1RBR1M6IHRhZ3MtcmVjdXJzaXZlICQoSEVBREVSUykgJChTT1VSQ0VTKSBjb25maWcuaC5pbiAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCisJCSQoVEFHU19GSUxFUykgJChMSVNQKQorCXNldCB4OyBcCisJaGVyZT1gcHdkYDsgXAorCWlmICgkKEVUQUdTKSAtLWV0YWdzLWluY2x1ZGUgLS12ZXJzaW9uKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gXAorCSAgaW5jbHVkZV9vcHRpb249LS1ldGFncy1pbmNsdWRlOyBcCisJICBlbXB0eV9maXg9LjsgXAorCWVsc2UgXAorCSAgaW5jbHVkZV9vcHRpb249LS1pbmNsdWRlOyBcCisJICBlbXB0eV9maXg9OyBcCisJZmk7IFwKKwlsaXN0PSckKFNVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKwkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9IC47IHRoZW4gOjsgZWxzZSBcCisJICAgIHRlc3QgISAtZiAkJHN1YmRpci9UQUdTIHx8IFwKKwkgICAgICBzZXQgIiQkQCIgIiQkaW5jbHVkZV9vcHRpb249JCRoZXJlLyQkc3ViZGlyL1RBR1MiOyBcCisJICBmaTsgXAorCWRvbmU7IFwKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgY29uZmlnLmguaW4gJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKwkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKwlzaGlmdDsgXAorCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJCokJHVuaXF1ZSI7IHRoZW4gOjsgZWxzZSBcCisJICB0ZXN0IC1uICIkJHVuaXF1ZSIgfHwgdW5pcXVlPSQkZW1wdHlfZml4OyBcCisJICBpZiB0ZXN0ICQkIyAtZ3QgMDsgdGhlbiBcCisJICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKwkgICAgICAiJCRAIiAkJHVuaXF1ZTsgXAorCSAgZWxzZSBcCisJICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKwkgICAgICAkJHVuaXF1ZTsgXAorCSAgZmk7IFwKKwlmaQorY3RhZ3M6IENUQUdTCitDVEFHUzogY3RhZ3MtcmVjdXJzaXZlICQoSEVBREVSUykgJChTT1VSQ0VTKSBjb25maWcuaC5pbiAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCisJCSQoVEFHU19GSUxFUykgJChMSVNQKQorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSBjb25maWcuaC5pbiAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHVuaXF1ZSIgXAorCSAgfHwgJChDVEFHUykgJChDVEFHU0ZMQUdTKSAkKEFNX0NUQUdTRkxBR1MpICQoQ1RBR1NfQVJHUykgXAorCSAgICAgJCR1bmlxdWUKKworR1RBR1M6CisJaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKKwkgICYmICQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpIFwKKwkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgIiQkaGVyZSIKKworZGlzdGNsZWFuLXRhZ3M6CisJLXJtIC1mIFRBR1MgSUQgR1RBR1MgR1JUQUdTIEdTWU1TIEdQQVRIIHRhZ3MKKworZGlzdGRpcjogJChESVNURklMRVMpCisJJChhbV9fcmVtb3ZlX2Rpc3RkaXIpCisJdGVzdCAtZCAiJChkaXN0ZGlyKSIgfHwgbWtkaXIgIiQoZGlzdGRpcikiCisJQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwlsaXN0PSckKERJU1RGSUxFUyknOyBcCisJICBkaXN0X2ZpbGVzPWBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRmaWxlOyBkb25lIHwgXAorCSAgc2VkIC1lICJzfF4kJHNyY2RpcnN0cmlwL3x8O3QiIFwKKwkgICAgICAtZSAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3w7dCJgOyBcCisJY2FzZSAkJGRpc3RfZmlsZXMgaW4gXAorCSAgKi8qKSAkKE1LRElSX1ApIGBlY2hvICIkJGRpc3RfZmlsZXMiIHwgXAorCQkJICAgc2VkICcvXC8vIWQ7c3xefCQoZGlzdGRpcikvfDtzLC9bXi9dKiQkLCwnIHwgXAorCQkJICAgc29ydCAtdWAgOzsgXAorCWVzYWM7IFwKKwlmb3IgZmlsZSBpbiAkJGRpc3RfZmlsZXM7IGRvIFwKKwkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKKwkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCisJICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCisJICAgIGlmIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRmaWxlIjsgdGhlbiBcCisJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisJICAgIGZpOyBcCisJICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAorCSAgICAgIGNwIC1mcFIgJChzcmNkaXIpLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKwkgICAgZmk7IFwKKwkgICAgY3AgLWZwUiAkJGQvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorCSAgZWxzZSBcCisJICAgIHRlc3QgLWYgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGV4aXQgMTsgXAorCSAgZmk7IFwKKwlkb25lCisJQGxpc3Q9JyQoRElTVF9TVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAuOyB0aGVuIDo7IGVsc2UgXAorCSAgICB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkc3ViZGlyIiBcCisJICAgIHx8ICQoTUtESVJfUCkgIiQoZGlzdGRpcikvJCRzdWJkaXIiIFwKKwkgICAgfHwgZXhpdCAxOyBcCisJICBmaTsgXAorCWRvbmUKKwlAbGlzdD0nJChESVNUX1NVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKwkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9IC47IHRoZW4gOjsgZWxzZSBcCisJICAgIGRpcjE9JCRzdWJkaXI7IGRpcjI9IiQoZGlzdGRpcikvJCRzdWJkaXIiOyBcCisJICAgICQoYW1fX3JlbGF0aXZpemUpOyBcCisJICAgIG5ld19kaXN0ZGlyPSQkcmVsZGlyOyBcCisJICAgIGRpcjE9JCRzdWJkaXI7IGRpcjI9IiQodG9wX2Rpc3RkaXIpIjsgXAorCSAgICAkKGFtX19yZWxhdGl2aXplKTsgXAorCSAgICBuZXdfdG9wX2Rpc3RkaXI9JCRyZWxkaXI7IFwKKwkgICAgZWNobyAiIChjZCAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSB0b3BfZGlzdGRpcj0iJCRuZXdfdG9wX2Rpc3RkaXIiIGRpc3RkaXI9IiQkbmV3X2Rpc3RkaXIiIFxcIjsgXAorCSAgICBlY2hvICIgICAgIGFtX19yZW1vdmVfZGlzdGRpcj06IGFtX19za2lwX2xlbmd0aF9jaGVjaz06IGFtX19za2lwX21vZGVfZml4PTogZGlzdGRpcikiOyBcCisJICAgICgkKGFtX19jZCkgJCRzdWJkaXIgJiYgXAorCSAgICAgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIFwKKwkgICAgICAgIHRvcF9kaXN0ZGlyPSIkJG5ld190b3BfZGlzdGRpciIgXAorCSAgICAgICAgZGlzdGRpcj0iJCRuZXdfZGlzdGRpciIgXAorCQlhbV9fcmVtb3ZlX2Rpc3RkaXI9OiBcCisJCWFtX19za2lwX2xlbmd0aF9jaGVjaz06IFwKKwkJYW1fX3NraXBfbW9kZV9maXg9OiBcCisJICAgICAgICBkaXN0ZGlyKSBcCisJICAgICAgfHwgZXhpdCAxOyBcCisJICBmaTsgXAorCWRvbmUKKwktdGVzdCAtbiAiJChhbV9fc2tpcF9tb2RlX2ZpeCkiIFwKKwl8fCBmaW5kICIkKGRpc3RkaXIpIiAtdHlwZSBkICEgLXBlcm0gLTc1NSBcCisJCS1leGVjIGNobW9kIHUrcnd4LGdvK3J4IHt9IFw7IC1vIFwKKwkgICEgLXR5cGUgZCAhIC1wZXJtIC00NDQgLWxpbmtzIDEgLWV4ZWMgY2htb2QgYStyIHt9IFw7IC1vIFwKKwkgICEgLXR5cGUgZCAhIC1wZXJtIC00MDAgLWV4ZWMgY2htb2QgYStyIHt9IFw7IC1vIFwKKwkgICEgLXR5cGUgZCAhIC1wZXJtIC00NDQgLWV4ZWMgJChpbnN0YWxsX3NoKSAtYyAtbSBhK3Ige30ge30gXDsgXAorCXx8IGNobW9kIC1SIGErciAiJChkaXN0ZGlyKSIKK2Rpc3QtZ3ppcDogZGlzdGRpcgorCXRhcmRpcj0kKGRpc3RkaXIpICYmICQoYW1fX3RhcikgfCBHWklQPSQoR1pJUF9FTlYpIGd6aXAgLWMgPiQoZGlzdGRpcikudGFyLmd6CisJJChhbV9fcmVtb3ZlX2Rpc3RkaXIpCisKK2Rpc3QtYnppcDI6IGRpc3RkaXIKKwl0YXJkaXI9JChkaXN0ZGlyKSAmJiAkKGFtX190YXIpIHwgYnppcDIgLTkgLWMgPiQoZGlzdGRpcikudGFyLmJ6MgorCSQoYW1fX3JlbW92ZV9kaXN0ZGlyKQorCitkaXN0LWx6bWE6IGRpc3RkaXIKKwl0YXJkaXI9JChkaXN0ZGlyKSAmJiAkKGFtX190YXIpIHwgbHptYSAtOSAtYyA+JChkaXN0ZGlyKS50YXIubHptYQorCSQoYW1fX3JlbW92ZV9kaXN0ZGlyKQorCitkaXN0LXh6OiBkaXN0ZGlyCisJdGFyZGlyPSQoZGlzdGRpcikgJiYgJChhbV9fdGFyKSB8IHh6IC1jID4kKGRpc3RkaXIpLnRhci54egorCSQoYW1fX3JlbW92ZV9kaXN0ZGlyKQorCitkaXN0LXRhclo6IGRpc3RkaXIKKwl0YXJkaXI9JChkaXN0ZGlyKSAmJiAkKGFtX190YXIpIHwgY29tcHJlc3MgLWMgPiQoZGlzdGRpcikudGFyLloKKwkkKGFtX19yZW1vdmVfZGlzdGRpcikKKworZGlzdC1zaGFyOiBkaXN0ZGlyCisJc2hhciAkKGRpc3RkaXIpIHwgR1pJUD0kKEdaSVBfRU5WKSBnemlwIC1jID4kKGRpc3RkaXIpLnNoYXIuZ3oKKwkkKGFtX19yZW1vdmVfZGlzdGRpcikKKworZGlzdC16aXA6IGRpc3RkaXIKKwktcm0gLWYgJChkaXN0ZGlyKS56aXAKKwl6aXAgLXJxICQoZGlzdGRpcikuemlwICQoZGlzdGRpcikKKwkkKGFtX19yZW1vdmVfZGlzdGRpcikKKworZGlzdCBkaXN0LWFsbDogZGlzdGRpcgorCXRhcmRpcj0kKGRpc3RkaXIpICYmICQoYW1fX3RhcikgfCBHWklQPSQoR1pJUF9FTlYpIGd6aXAgLWMgPiQoZGlzdGRpcikudGFyLmd6CisJJChhbV9fcmVtb3ZlX2Rpc3RkaXIpCisKKyMgVGhpcyB0YXJnZXQgdW50YXJzIHRoZSBkaXN0IGZpbGUgYW5kIHRyaWVzIGEgVlBBVEggY29uZmlndXJhdGlvbi4gIFRoZW4KKyMgaXQgZ3VhcmFudGVlcyB0aGF0IHRoZSBkaXN0cmlidXRpb24gaXMgc2VsZi1jb250YWluZWQgYnkgbWFraW5nIGFub3RoZXIKKyMgdGFyZmlsZS4KK2Rpc3RjaGVjazogZGlzdAorCWNhc2UgJyQoRElTVF9BUkNISVZFUyknIGluIFwKKwkqLnRhci5neiopIFwKKwkgIEdaSVA9JChHWklQX0VOVikgZ3ppcCAtZGMgJChkaXN0ZGlyKS50YXIuZ3ogfCAkKGFtX191bnRhcikgOztcCisJKi50YXIuYnoyKikgXAorCSAgYnppcDIgLWRjICQoZGlzdGRpcikudGFyLmJ6MiB8ICQoYW1fX3VudGFyKSA7O1wKKwkqLnRhci5sem1hKikgXAorCSAgbHptYSAtZGMgJChkaXN0ZGlyKS50YXIubHptYSB8ICQoYW1fX3VudGFyKSA7O1wKKwkqLnRhci54eiopIFwKKwkgIHh6IC1kYyAkKGRpc3RkaXIpLnRhci54eiB8ICQoYW1fX3VudGFyKSA7O1wKKwkqLnRhci5aKikgXAorCSAgdW5jb21wcmVzcyAtYyAkKGRpc3RkaXIpLnRhci5aIHwgJChhbV9fdW50YXIpIDs7XAorCSouc2hhci5neiopIFwKKwkgIEdaSVA9JChHWklQX0VOVikgZ3ppcCAtZGMgJChkaXN0ZGlyKS5zaGFyLmd6IHwgdW5zaGFyIDs7XAorCSouemlwKikgXAorCSAgdW56aXAgJChkaXN0ZGlyKS56aXAgOztcCisJZXNhYworCWNobW9kIC1SIGEtdyAkKGRpc3RkaXIpOyBjaG1vZCBhK3cgJChkaXN0ZGlyKQorCW1rZGlyICQoZGlzdGRpcikvX2J1aWxkCisJbWtkaXIgJChkaXN0ZGlyKS9faW5zdAorCWNobW9kIGEtdyAkKGRpc3RkaXIpCisJdGVzdCAtZCAkKGRpc3RkaXIpL19idWlsZCB8fCBleGl0IDA7IFwKKwlkY19pbnN0YWxsX2Jhc2U9YCQoYW1fX2NkKSAkKGRpc3RkaXIpL19pbnN0ICYmIHB3ZCB8IHNlZCAtZSAncyxeW146XFwvXTpbXFwvXSwvLCdgIFwKKwkgICYmIGRjX2Rlc3RkaXI9IiQke1RNUERJUi0vdG1wfS9hbS1kYy0kJCQkLyIgXAorCSAgJiYgYW1fX2N3ZD1gcHdkYCBcCisJICAmJiAkKGFtX19jZCkgJChkaXN0ZGlyKS9fYnVpbGQgXAorCSAgJiYgLi4vY29uZmlndXJlIC0tc3JjZGlyPS4uIC0tcHJlZml4PSIkJGRjX2luc3RhbGxfYmFzZSIgXAorCSAgICAkKERJU1RDSEVDS19DT05GSUdVUkVfRkxBR1MpIFwKKwkgICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIFwKKwkgICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGR2aSBcCisJICAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBjaGVjayBcCisJICAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsIFwKKwkgICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGxjaGVjayBcCisJICAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSB1bmluc3RhbGwgXAorCSAgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgZGlzdHVuaW5zdGFsbGNoZWNrX2Rpcj0iJCRkY19pbnN0YWxsX2Jhc2UiIFwKKwkgICAgICAgIGRpc3R1bmluc3RhbGxjaGVjayBcCisJICAmJiBjaG1vZCAtUiBhLXcgIiQkZGNfaW5zdGFsbF9iYXNlIiBcCisJICAmJiAoeyBcCisJICAgICAgIChjZCAuLi8uLiAmJiB1bWFzayAwNzcgJiYgbWtkaXIgIiQkZGNfZGVzdGRpciIpIFwKKwkgICAgICAgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgREVTVERJUj0iJCRkY19kZXN0ZGlyIiBpbnN0YWxsIFwKKwkgICAgICAgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgREVTVERJUj0iJCRkY19kZXN0ZGlyIiB1bmluc3RhbGwgXAorCSAgICAgICAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBERVNURElSPSIkJGRjX2Rlc3RkaXIiIFwKKwkgICAgICAgICAgICBkaXN0dW5pbnN0YWxsY2hlY2tfZGlyPSIkJGRjX2Rlc3RkaXIiIGRpc3R1bmluc3RhbGxjaGVjazsgXAorCSAgICAgIH0gfHwgeyBybSAtcmYgIiQkZGNfZGVzdGRpciI7IGV4aXQgMTsgfSkgXAorCSAgJiYgcm0gLXJmICIkJGRjX2Rlc3RkaXIiIFwKKwkgICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGRpc3QgXAorCSAgJiYgcm0gLXJmICQoRElTVF9BUkNISVZFUykgXAorCSAgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgZGlzdGNsZWFuY2hlY2sgXAorCSAgJiYgY2QgIiQkYW1fX2N3ZCIgXAorCSAgfHwgZXhpdCAxCisJJChhbV9fcmVtb3ZlX2Rpc3RkaXIpCisJQChlY2hvICIkKGRpc3RkaXIpIGFyY2hpdmVzIHJlYWR5IGZvciBkaXN0cmlidXRpb246ICI7IFwKKwkgIGxpc3Q9JyQoRElTVF9BUkNISVZFUyknOyBmb3IgaSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRpOyBkb25lKSB8IFwKKwkgIHNlZCAtZSAxaCAtZSAxcy8uLz0vZyAtZSAxcCAtZSAxeCAtZSAnJCRwJyAtZSAnJCR4JworZGlzdHVuaW5zdGFsbGNoZWNrOgorCUAkKGFtX19jZCkgJyQoZGlzdHVuaW5zdGFsbGNoZWNrX2RpciknIFwKKwkmJiB0ZXN0IGAkKGRpc3R1bmluc3RhbGxjaGVja19saXN0ZmlsZXMpIHwgd2MgLWxgIC1sZSAxIFwKKwkgICB8fCB7IGVjaG8gIkVSUk9SOiBmaWxlcyBsZWZ0IGFmdGVyIHVuaW5zdGFsbDoiIDsgXAorCSAgICAgICAgaWYgdGVzdCAtbiAiJChERVNURElSKSI7IHRoZW4gXAorCSAgICAgICAgICBlY2hvICIgIChjaGVjayBERVNURElSIHN1cHBvcnQpIjsgXAorCSAgICAgICAgZmkgOyBcCisJICAgICAgICAkKGRpc3R1bmluc3RhbGxjaGVja19saXN0ZmlsZXMpIDsgXAorCSAgICAgICAgZXhpdCAxOyB9ID4mMgorZGlzdGNsZWFuY2hlY2s6IGRpc3RjbGVhbgorCUBpZiB0ZXN0ICckKHNyY2RpciknID0gLiA7IHRoZW4gXAorCSAgZWNobyAiRVJST1I6IGRpc3RjbGVhbmNoZWNrIGNhbiBvbmx5IHJ1biBmcm9tIGEgVlBBVEggYnVpbGQiIDsgXAorCSAgZXhpdCAxIDsgXAorCWZpCisJQHRlc3QgYCQoZGlzdGNsZWFuY2hlY2tfbGlzdGZpbGVzKSB8IHdjIC1sYCAtZXEgMCBcCisJICB8fCB7IGVjaG8gIkVSUk9SOiBmaWxlcyBsZWZ0IGluIGJ1aWxkIGRpcmVjdG9yeSBhZnRlciBkaXN0Y2xlYW46IiA7IFwKKwkgICAgICAgJChkaXN0Y2xlYW5jaGVja19saXN0ZmlsZXMpIDsgXAorCSAgICAgICBleGl0IDE7IH0gPiYyCitjaGVjay1hbTogYWxsLWFtCitjaGVjazogY2hlY2stcmVjdXJzaXZlCitAa2VybmVsX3N1cHBvcnRfVFJVRUBhbGwtbG9jYWw6CithbGwtYW06IE1ha2VmaWxlIGNvbmZpZy5oIGFsbC1sb2NhbAoraW5zdGFsbGRpcnM6IGluc3RhbGxkaXJzLXJlY3Vyc2l2ZQoraW5zdGFsbGRpcnMtYW06CitpbnN0YWxsOiBpbnN0YWxsLXJlY3Vyc2l2ZQoraW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtcmVjdXJzaXZlCitpbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1yZWN1cnNpdmUKK3VuaW5zdGFsbDogdW5pbnN0YWxsLXJlY3Vyc2l2ZQorCitpbnN0YWxsLWFtOiBhbGwtYW0KKwlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQorCitpbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1yZWN1cnNpdmUKK2luc3RhbGwtc3RyaXA6CisJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKKwkgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorCSAgYHRlc3QgLXogJyQoU1RSSVApJyB8fCBcCisJICAgIGVjaG8gIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciYCBpbnN0YWxsCittb3N0bHljbGVhbi1nZW5lcmljOgorCitjbGVhbi1nZW5lcmljOgorCitkaXN0Y2xlYW4tZ2VuZXJpYzoKKwktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKKwktdGVzdCAuID0gIiQoc3JjZGlyKSIgfHwgdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykKKworbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgorCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKKwlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCitAa2VybmVsX3N1cHBvcnRfVFJVRUBpbnN0YWxsLWV4ZWMtbG9jYWw6CitAa2VybmVsX3N1cHBvcnRfVFJVRUBjbGVhbi1sb2NhbDoKK2NsZWFuOiBjbGVhbi1yZWN1cnNpdmUKKworY2xlYW4tYW06IGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBjbGVhbi1sb2NhbCBtb3N0bHljbGVhbi1hbQorCitkaXN0Y2xlYW46IGRpc3RjbGVhbi1yZWN1cnNpdmUKKwktcm0gLWYgJChhbV9fQ09ORklHX0RJU1RDTEVBTl9GSUxFUykKKwktcm0gLWYgTWFrZWZpbGUKK2Rpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLWhkciBcCisJZGlzdGNsZWFuLWxpYnRvb2wgZGlzdGNsZWFuLXRhZ3MKKworZHZpOiBkdmktcmVjdXJzaXZlCisKK2R2aS1hbToKKworaHRtbDogaHRtbC1yZWN1cnNpdmUKKworaHRtbC1hbToKKworaW5mbzogaW5mby1yZWN1cnNpdmUKKworaW5mby1hbToKKworaW5zdGFsbC1kYXRhLWFtOgorCitpbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktcmVjdXJzaXZlCisKK2luc3RhbGwtZHZpLWFtOgorCitpbnN0YWxsLWV4ZWMtYW06IGluc3RhbGwtZXhlYy1sb2NhbAorCitpbnN0YWxsLWh0bWw6IGluc3RhbGwtaHRtbC1yZWN1cnNpdmUKKworaW5zdGFsbC1odG1sLWFtOgorCitpbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1yZWN1cnNpdmUKKworaW5zdGFsbC1pbmZvLWFtOgorCitpbnN0YWxsLW1hbjoKKworaW5zdGFsbC1wZGY6IGluc3RhbGwtcGRmLXJlY3Vyc2l2ZQorCitpbnN0YWxsLXBkZi1hbToKKworaW5zdGFsbC1wczogaW5zdGFsbC1wcy1yZWN1cnNpdmUKKworaW5zdGFsbC1wcy1hbToKKworaW5zdGFsbGNoZWNrLWFtOgorCittYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLXJlY3Vyc2l2ZQorCS1ybSAtZiAkKGFtX19DT05GSUdfRElTVENMRUFOX0ZJTEVTKQorCS1ybSAtcmYgJCh0b3Bfc3JjZGlyKS9hdXRvbTR0ZS5jYWNoZQorCS1ybSAtZiBNYWtlZmlsZQorbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYworCittb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tcmVjdXJzaXZlCisKK21vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wKKworcGRmOiBwZGYtcmVjdXJzaXZlCisKK3BkZi1hbToKKworcHM6IHBzLXJlY3Vyc2l2ZQorCitwcy1hbToKKwordW5pbnN0YWxsLWFtOgorCisuTUFLRTogJChSRUNVUlNJVkVfQ0xFQU5fVEFSR0VUUykgJChSRUNVUlNJVkVfVEFSR0VUUykgYWxsIFwKKwljdGFncy1yZWN1cnNpdmUgaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwIHRhZ3MtcmVjdXJzaXZlCisKKy5QSE9OWTogJChSRUNVUlNJVkVfQ0xFQU5fVEFSR0VUUykgJChSRUNVUlNJVkVfVEFSR0VUUykgQ1RBR1MgR1RBR1MgXAorCWFsbCBhbGwtYW0gYWxsLWxvY2FsIGFtLS1yZWZyZXNoIGNoZWNrIGNoZWNrLWFtIGNsZWFuIFwKKwljbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgY2xlYW4tbG9jYWwgY3RhZ3MgY3RhZ3MtcmVjdXJzaXZlIFwKKwlkaXN0IGRpc3QtYWxsIGRpc3QtYnppcDIgZGlzdC1nemlwIGRpc3QtbHptYSBkaXN0LXNoYXIgXAorCWRpc3QtdGFyWiBkaXN0LXh6IGRpc3QtemlwIGRpc3RjaGVjayBkaXN0Y2xlYW4gXAorCWRpc3RjbGVhbi1nZW5lcmljIGRpc3RjbGVhbi1oZHIgZGlzdGNsZWFuLWxpYnRvb2wgXAorCWRpc3RjbGVhbi10YWdzIGRpc3RjbGVhbmNoZWNrIGRpc3RkaXIgZGlzdHVuaW5zdGFsbGNoZWNrIGR2aSBcCisJZHZpLWFtIGh0bWwgaHRtbC1hbSBpbmZvIGluZm8tYW0gaW5zdGFsbCBpbnN0YWxsLWFtIFwKKwlpbnN0YWxsLWRhdGEgaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZHZpIGluc3RhbGwtZHZpLWFtIFwKKwlpbnN0YWxsLWV4ZWMgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZXhlYy1sb2NhbCBpbnN0YWxsLWh0bWwgXAorCWluc3RhbGwtaHRtbC1hbSBpbnN0YWxsLWluZm8gaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIFwKKwlpbnN0YWxsLXBkZiBpbnN0YWxsLXBkZi1hbSBpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gXAorCWluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBcCisJaW5zdGFsbGRpcnMtYW0gbWFpbnRhaW5lci1jbGVhbiBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgXAorCW1vc3RseWNsZWFuIG1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBwZGYgcGRmLWFtIFwKKwlwcyBwcy1hbSB0YWdzIHRhZ3MtcmVjdXJzaXZlIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0KKworCitAa2VybmVsX3N1cHBvcnRfRkFMU0VALlBIT05ZOiBtb2R1bGUKKworQGtlcm5lbF9zdXBwb3J0X0ZBTFNFQGFsbC1sb2NhbDogbW9kdWxlCisKKyMgVGhpcyBtdXN0IHVzZSBhIGZ1bGx5LXF1YWxpZmllZCBTVUJESVJTIHBhdGgsIHNvIHdlIGNhbid0IHVzZSAke3RvcF9zcmNkaXJ9CitAa2VybmVsX3N1cHBvcnRfRkFMU0VAbW9kdWxlOgorQGtlcm5lbF9zdXBwb3J0X0ZBTFNFQAltYWtlIC1DIGxpYnV0aWwKK0BrZXJuZWxfc3VwcG9ydF9GQUxTRUAJbWFrZSAtQyBsaWJvcAorQGtlcm5lbF9zdXBwb3J0X0ZBTFNFQAkoY2QgJChLU1JDKSAmJiAkKE1BS0UpIFNVQkRJUlM9JChPUFJPRklMRV9ESVIpL21vZHVsZS9AT1BST0ZJTEVfTU9EVUxFX0FSQ0hAIG1vZHVsZXMpIHx8IGV4aXQgMSA7CitAa2VybmVsX3N1cHBvcnRfRkFMU0VACShjZCAkKEtTUkMpICYmICQoTUFLRSkgU1VCRElSUz0kKE9QUk9GSUxFX0RJUikvbW9kdWxlIG1vZHVsZXMpIHx8IGV4aXQgMSA7CisKK0BrZXJuZWxfc3VwcG9ydF9GQUxTRUBpbnN0YWxsLWV4ZWMtbG9jYWw6CitAa2VybmVsX3N1cHBvcnRfRkFMU0VACS1ta2RpciAtcCAkKE1PRElOU1RBTExESVIpL29wcm9maWxlCitAa2VybmVsX3N1cHBvcnRfRkFMU0VACWNwIG1vZHVsZS9vcHJvZmlsZS1tb2R1bGUubyAkKE1PRElOU1RBTExESVIpL29wcm9maWxlL29wcm9maWxlLm8KK0BrZXJuZWxfc3VwcG9ydF9GQUxTRUAJaWYgdGVzdCAkKEtWRVJTKSA9ICJgdW5hbWUgLXJgIjsgdGhlbiBkZXBtb2QgLWEgOyBmaQorCitAa2VybmVsX3N1cHBvcnRfRkFMU0VAY2xlYW4tbG9jYWw6CitAa2VybmVsX3N1cHBvcnRfRkFMU0VACXJtIC1mIG1vZHVsZS8qLm8gbW9kdWxlL0BPUFJPRklMRV9NT0RVTEVfQVJDSEAvKi5vIFwKK0BrZXJuZWxfc3VwcG9ydF9GQUxTRUAJbW9kdWxlLy4qLm8uY21kIG1vZHVsZS8uKi5vLmZsYWdzIFwKK0BrZXJuZWxfc3VwcG9ydF9GQUxTRUAJbW9kdWxlL0BPUFJPRklMRV9NT0RVTEVfQVJDSEAvLiouby5jbWQgbW9kdWxlL0BPUFJPRklMRV9NT0RVTEVfQVJDSEAvLiouby5mbGFncworCisjIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgorIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCisuTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9SRUFETUUgYi9vcHJvZmlsZS0wLjkuNy9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzRiMGExMgotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L1JFQURNRQpAQCAtMCwwICsxLDQ2IEBACitUaGlzIGlzIGFuIGFscGhhIHJlbGVhc2UgdmVyc2lvbiBvZiBvcHJvZmlsZSwgYSB0cmFuc3BhcmVudAorbG93LW92ZXJoZWFkIHN5c3RlbS13aWRlIHByb2ZpbGVyLgorCitZb3UgY2FuIGZpbmQgc29tZSBkb2N1bWVudGF0aW9uIGluIHRoZSBkb2MvIGRpcmVjdG9yeS4KKworUGxlYXNlIHZpc2l0IHRoZSBvcHJvZmlsZSB3ZWJzaXRlIGF0IDogaHR0cDovL29wcm9maWxlLnNmLm5ldC8KKworb3Byb2ZpbGUgd2FzIHdyaXR0ZW4gYnkgSm9obiBMZXZvbiA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CithbmQgUGhpbGlwcGUgRWxpZSA8cGhpbC5lbEB3YW5hZG9vLmZyPi4KKworTWF5bmFyZCBKb2huc29uIDxtYXluYXJkakB1cy5pYm0uY29tPiBpcyB0aGUgY3VycmVudCBtYWludGFpbmVyLgorCitEYXZlIEpvbmVzIDxkYXZlakBzdXNlLmRlPiBwcm92aWRlZCBidWcgZml4ZXMgYW5kIHN1cHBvcnQgZm9yCit0aGUgQU1EIEF0aGxvbiwgYW5kIEFNRCBIYW1tZXIgZmFtaWxpZXMgb2YgQ1BVcy4KKworQm9iIE1vbnRnb21lcnkgPGJvYm1AZmMuaHAuY29tPiBwcm92aWRlZCBidWcgZml4ZXMsIHRoZSBpbml0aWFsIFJUQworZHJpdmVyIGFuZCB0aGUgaW5pdGlhbCBpYTY0IGRyaXZlci4KKworV2lsbCBDb2hlbiA8d2NvaGVuQHJlZGhhdC5jb20+IGludGVncmF0ZWQgdGhlIGlhNjQgZHJpdmVyIGludG8gdGhlCitvcHJvZmlsZSByZWxlYXNlLCBhbmQgY29udHJpYnV0ZWQgYnVnIGZpeGVzIGFuZCBzZXZlcmFsIGNsZWFudXBzLgorCitHcmF5ZG9uIEhvYXJlIDxncmF5ZG9uQHJlZGhhdC5jb20+IHByb3ZpZGVkIFA0IHBvcnQsIGJ1ZyBmaXhlcyBhbmQgY2xlYW51cHMuCisKK1JhbGYgQmFlY2hsZSA8cmFsZkBsaW51eC1taXBzLm9yZz4gcHJvdmlkZWQgdGhlIE1JUFMgcG9ydC4KKworT3RoZXIgY29udHJpYnV0b3JzIGFyZSBsaXN0ZWQgaW4gdGhlIENoYW5nZUxvZy4KKworQnVpbGRpbmcKKy0tLS0tLS0tCisKK1BsZWFzZSByZWFkIHRoZSBpbnN0YWxsYXRpb24gaW5zdHJ1Y3Rpb25zIGluIGRvYy9vcHJvZmlsZS5odG1sIG9yCitodHRwOi8vb3Byb2ZpbGUuc291cmNlZm9yZ2UubmV0L2RvYy9pbnN0YWxsLmh0bWwuCisKK1F1aWNrIHN0YXJ0IDoKKworKElmIHVzaW5nIGdpdDogLi9hdXRvZ2VuLnNoIGZpcnN0LiBZb3UgbmVlZCBhdXRvbWFrZSAxLjUgb3IgaGlnaGVyLiBZb3UKK2NhbiBzcGVjaWZ5IGEgZGlmZmVyZW50IHZlcnNpb24sIGUuZy4KK0FDTE9DQUw9YWNsb2NhbC0xLjUgQVVUT01BS0U9YXV0b21ha2UtMS41IEFVVE9DT05GPWF1dG9jb25mLTIuMTMgQVVUT0hFQURFUj1hdXRvaGVhZGVyLTIuMTMgLi9hdXRvZ2VuLnNoKQorCisyLjQga2VybmVscworCisJLi9jb25maWd1cmUgLS13aXRoLWxpbnV4PS9wYXRoL3RvL2tlcm5lbC9zb3VyY2UKKworMi42IGtlcm5lbHMKKworCS4vY29uZmlndXJlIC0td2l0aC1rZXJuZWwtc3VwcG9ydApkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvUkVBRE1FX1BBQ0tBR0VSUyBiL29wcm9maWxlLTAuOS43L1JFQURNRV9QQUNLQUdFUlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ZkZjQzZgotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L1JFQURNRV9QQUNLQUdFUlMKQEAgLTAsMCArMSw3OSBAQAorQnVpbGRpbmcgYW4gUlBNIGZvciBPUHJvZmlsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitXaGVuIGJ1aWxkaW5nIGFuIFJQTSBmb3IgT1Byb2ZpbGUsIHBsZWFzZSBmb2xsb3cgdGhlIFJQTSBwYWNrYWdpbmcgZ3VpZGVsaW5lcworZGVzY3JpYmVkIGluOgorICAgaHR0cDovL3d3dy5ycG0ub3JnL1JQTS1IT1dUTy9idWlsZC5odG1sCisKKworTmV3IGZpbGUgdG8gaW5zdGFsbCBhcyBvZiByZWxlYXNlIDAuOS4zCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQXMgb2YgcmVsZWFzZSAwLjkuMywgb3ByZXBvcnQgaXMgY2FwYWJsZSBvZiBnZW5lcmF0aW5nIFhNTCBvdXRwdXQuCitUb29sIGRldmVsb3BlcnMgd2hvIHdpc2ggdG8gdXNlIHRoZSB4bWwgb3V0cHV0IHdpbGwgbmVlZCB0byBoYXZlCithY2Nlc3MgdG8gdGhlIGRvYy9vcHJlcG9ydC54c2QgZmlsZSwgd2hpY2ggZGVzY3JpYmVzIHRoZSBzY2hlbWEuCitSUE0gcGFja2FnZXJzIG1heSBpbnN0YWxsIHRoaXMgZmlsZSBpbiB0aGUgc2FtZSBwYWNrYWdlIGFzIHRoZSBvdGhlcgorc3RhbmRhcmQgT1Byb2ZpbGUgY29tcG9uZW50cyBvciBpbiBhIHNlcGFyYXRlIGRldmVsIHBhY2thZ2UgaWYgZGVzaXJlZC4KKworCitOZXcgZmlsZXMgdG8gaW5zdGFsbCBhcyBvZiByZWxlYXNlIDAuOS40CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQXMgb2YgcmVsZWFzZSAwLjkuNCwgT1Byb2ZpbGUgaW5jbHVkZXMgYSBKSVQgc3VwcG9ydCBsaWJyYXJ5IGNhbGxlZCBsaWJvcGFnZW50LgorVGhpcyBsaWJyYXJ5IGlzIG5lZWRlZCBhdCBydW50aW1lIHdoZW4gcHJvZmlsaW5nIEpJVGVkIGNvZGUgZnJvbSBzdXBwb3J0ZWQKK3ZpcnR1YWwgbWFjaGluZXMuICBUaGUgaW5zdGFsbCBsb2NhdGlvbiBmb3IgdGhpcyBsaWJyYXJ5IGlzOgorCTxvcHJvZi1pbnN0YWxsLWRpcj4vPGxpYmRpcj4vb3Byb2ZpbGUKKworQW5kIHRoZXJlJ3MgYSBuZXcgYmluYXJ5IGZpbGUgdG8gaW5zdGFsbCB0aGF0J3MgdXNlZCBmb3IgSklUIHByb2ZpbGluZyBjYWxsZWQKK29waml0Y29udi4gIEFzIHdpdGggdGhlIG90aGVyIG9wcm9maWxlIGV4ZWN1dGFibGVzLCB0aGlzIGZpbGUgaXMgaW5zdGFsbGVkIGluCit0aGUgPG9wcm9mLWluc3RhbGwtZGlyPi9iaW4gZGlyZWN0b3J5LgorCitPUHJvZmlsZSBhbHNvIGluY2x1ZGVzIHN1cHBvcnQgZm9yIHByb2ZpbGluZyBKYXZhIGFwcGxpY2F0aW9ucy4gIFRoaXMgc3VwcG9ydAorbXVzdCBiZSBjb25maWd1cmVkIGJ5IHdheSBvZiB0aGUgJy0td2l0aC1qYXZhPTxwYXRoX3RvX2pkaz4nIGNvbmZpZ3VyZQorb3B0aW9uLiAgSWYgeW91ciBKREsgaXMgb2xkZXIgdGhhbiB2ZXJzaW9uIDEuNSwgb25seSBhIEpWTVBJIGFnZW50IGxpYnJhcnkKK2lzIGJ1aWx0LiAgSWYgeW91ciBKREsgaXMgdmVyc2lvbiAxLjUsIGJvdGggSlZNUEkgYW5kIEpWTVRJIGFnZW50CitsaWJyYXJpZXMgYXJlIGJ1aWx0LiAgSWYgeW91ciBKREsgaXMgMS42IG9yIG5ld2VyLCBvbmx5IHRoZSBKVk1USSBhZ2VudAorbGlicmFyeSBpcyBidWlsdC4gIEFzIHdpdGggbGlib3BhZ2VudCBkZXNjcmliZWQgYWJvdmUsIHRoZSBpbnN0YWxsIGxvY2F0aW9uCitmb3IgdGhlc2UgaXMgJzxsaWJkaXI+L29wcm9maWxlJy4KKworUlBNIHBhY2thZ2VycyBjYW4gaW5zdGFsbCB0aGUgPGxpYmRpcj4vb3Byb2ZpbGUgbGlicmFyaWVzIGluIHRoZSBzYW1lIHBhY2thZ2UKK2FzIHRoZSBvdGhlciBzdGFuZGFyZCBPUHJvZmlsZSBjb21wb25lbnRzIG9yIGluIGEgc2VwYXJhdGUgcGFja2FnZSBpZiBkZXNpcmVkLgorSXQgaXMgcmVjb21tZW5kZWQgdG8gcnVuIGxkY29uZmlnIGluICVwb3N0IGFuZCAlcG9zdHVuIHRvIGFkZC9yZW1vdmUgdGhlCis8bGliZGlyPi9vcHJvZmlsZSBwYXRoIGZyb20gdGhlIHN0YW5kYXJkIGxpYnJhcnkgc2VhcmNoIHBhdGhzLgorCitPbiBiaS1hcmNoIHBsYXRmb3JtcyB0aGF0IHN1cHBvcnQgbW9yZSB0aGFuIG9uZSAiYml0bmVzcyIgb2YgdXNlcnNwYWNlIHNvZnR3YXJlCisoZS5nLiwgMzItYml0IGFuZCA2NC1iaXQgcHJvZ3JhbXMpLCBpdCBpcyByZWNvbW1lbmRlZCB0aGF0IHRoZSBsaWJvcGFnZW50IGFuZAorSmF2YSBhZ2VudCBsaWJyYXJpZXMgYmUgcGFja2FnZWQgaW4gYSBzZXBhcmF0ZSBSUE0uICBZb3UgY291bGQgdGhlbiBidWlsZAorT1Byb2ZpbGUgdHdpY2UgLS0gb25jZSBmb3IgZWFjaCBiaXRuZXNzIHR5cGUuICBZb3Ugd291bGQgdGhlbiBkaXN0cmlidXRlIGJvdGgKK3ZlcnNpb25zIG9mIHRoZSBSUE1zIGNvbnRhaW5pbmcgdGhlIGxpYnJhcmllcywgYnV0IG9ubHkgb25lIFJQTSBjb250YWluaW5nIHRoZQorImJhc2UiIE9Qcm9maWxlIChpLmUuLCBleGVjdXRhYmxlcywgc2NyaXB0cywgZXRjLikuCisKK1RoZSBuZXcgSklUIHN1cHBvcnQgYWxzbyBwcm92aWRlcyB0aGUgYWJpbGl0eSBmb3IgdGhpcmQgcGFydGllcyB0byBkZXZlbG9wCitKSVQgYWdlbnRzIGZvciBvdGhlciB2aXJ0dWFsIG1hY2hpbmVzLiAgVGhlIGRldmVsb3BtZW50IGZpbGVzIHByb3ZpZGVkIGZvciB0aGlzCitwdXJwb3NlIGFyZToKKwlkb2Mvb3Ataml0LWRldmVsLmh0bWwKKwlpbmNsdWRlL29wYWdlbnQuaAorCitBZ2FpbiwgdGhlIFJQTSBwYWNrYWdlciBtYXkgcGFja2FnZSB0aGVzZSBmaWxlcyBpbiB0aGUgZGVmYXVsdCBwYWNrYWdlCitvciBpbiBhIHNlcGFyYXRlIGRldmVsIHBhY2thZ2UuCisKKworUmVxdWlyZW1lbnQgZm9yIGJ1aWxkaW5nIGEgYmluYXJ5IFJQTSBwYWNrYWdlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK09Qcm9maWxlIHJlcXVpcmVzIHRoZSBzcGVjaWFsIHVzZXIgYWNjb3VudCAib3Byb2ZpbGUiIHRvIGV4aXN0IGZvciBwdXJwb3Nlcworb2YgcHJvY2Vzc2luZyBzYW1wbGVzIGZyb20gSklUJ2VkIGNvZGUgKGUuZy4sIEphdmEgYXBwbGljYXRpb25zKS4KKworV2hlbiBkZWZpbmluZyB0aGUgc3BlYyBmaWxlIGZvciB0aGUgT1Byb2ZpbGUgUlBNLCB5b3Ugc2hvdWxkIGFkZCB0aGUgYXV0b21hdGljCitjcmVhdGlvbiBvZiB0aGUgc3BlY2lhbCAib3Byb2ZpbGUiIHVzZXIgYWNjb3VudC4gIFBsZWFzZSByZWZlciB0byB0aGUgVVJMCitiZWxvdyBmb3IgYW4gZXhhbXBsZSBvZiBob3cgdGhpcyBjYW4gYmUgZG9uZToKKyAgIGh0dHA6Ly9mZWRvcmFwcm9qZWN0Lm9yZy93aWtpL1BhY2thZ2luZy9Vc2Vyc0FuZEdyb3VwcworCitGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBjb21tYW5kcyB3b3VsZCBhZGQgdGhlIG5lY2Vzc2FyeSB1c2VyIGFjY291bnQ6CisKKyAgICVwcmUKKyAgIGdldGVudCBncm91cCBvcHJvZmlsZSA+L2Rldi9udWxsIHx8IGdyb3VwYWRkIC1yIG9wcm9maWxlCisgICBnZXRlbnQgcGFzc3dkIG9wcm9maWxlID4vZGV2L251bGwgfHwgXAorICAgdXNlcmFkZCAtciAtZyBvcHJvZmlsZSAtZCAvaG9tZS9vcHJvZmlsZSAtcyAvc2Jpbi9ub2xvZ2luIFwKKyAgICAgICAtYyAiU3BlY2lhbCB1c2VyIGFjY291bnQgdG8gYmUgdXNlZCBieSBPUHJvZmlsZSIgb3Byb2ZpbGUKKyAgIGV4aXQgMApkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvVE9ETyBiL29wcm9maWxlLTAuOS43L1RPRE8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmNhZTJiZAotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L1RPRE8KQEAgLTAsMCArMSwyNjggQEAKK1RoaXMgaXMgYW4gKGluY29tcGxldGUpIGxpc3Qgb2Ygc29tZSBvZiB0aGUgc3R1ZmYgd2Ugd2FudCB0byBsb29rIGF0IGRvaW5nLgorCitJZiB5b3UncmUgaW50ZXJlc3RlZCBpbiBoYWNraW5nIG9uIGFueSBvZiB0aGVzZSwgcGxlYXNlIGNvbnRhY3QgdGhlIGxpc3QgZmlyc3QKK2ZvciBzb21lIHBvaW50ZXJzIGFuZC9vciByZWFkIEhBQ0tJTkcgYW5kIGRvYy9Db2RpbmdTdHlsZS4KKworMS4wIHJlbGVhc2UKKy0tLS0tLS0tLS0tCisKKyh0aGlzIGlzIGEgbWluaW1hbCBzZWxlY3Rpb24gb2Ygc3R1ZmYgSSB0aGluayB3ZSBuZWVkKQorCisgbyBkZWZhdWx0IHRvIGEgdm1saW51eCBsb2NhdGlvbjogbmVlZCBhZ3JlZW1lbnQgZnJvbSBrZXJuZWwgZGV2ZWxvcGVycworIG8gZGVmYXVsdCB0byAtLXNlcGFyYXRlPWxpYnJhcnkgKHdpdGggYW5vbiwgPW5vbmUsIG1ha2VzIG5vdCBtdWNoIHNlbnNlKQorIG8gcHJldHRpZnkgaW1hZ2UgbmFtZSBmb3IgLmpvIGZpbGVzIGFuZCBhbGxvdyBsaWItaW1hZ2U6IHRvIHNwZWNpZnkgaXQKKyBvIGdpc2xlJ3MgZml4ZXMKKyBvIG9wcmVwb3J0IHRnaWQ6PHRnaWQ+IGRvZXNuJ3Qgd29yayBldmVuIGlmIC5qbyBmaWxlcyB3aXRoIHRoYXQgcGlkCisgbyBGaXg6CisKK3dhcm5pbmc6IFt2ZHNvXSAodGdpZDo5MjM2IHJhbmdlOjB4N2ZmZjk4ZmZkMDAwLTB4N2ZmZjk4ZmZmMDAwKSBjb3VsZCBub3QgYmUgZm91bmQuCit3YXJuaW5nOiAvbm8tdm1saW51eCBjb3VsZCBub3QgYmUgZm91bmQuCit3YXJuaW5nOiAvdXNyL2xpYjY0L2xpYnBhbmVsLWFwcGxldC0yLnNvLjAuMi4yNy4jcHJlbGluayMuc1hDVUsxIChkZWxldGVkKSBjb3VsZCBub3QgYmUgZm91bmQuCisKKyBvIGFtZDY0IDMyIGJpdCBidWlsZCBuZWVkcyBhIHN5czMyX2xvb2t1cF9kY29va2llKCkgdHJhbnNsYXRvciBpbiB0aGUKKyAgIGtlcm5lbAorIG8gZGVjaWRlIG9uIC1tIHRnaWQgc2VtYW50aWNzIGZvciBhbm9uIHJlZ2lvbnMKKyBvIGlmIGV2NjcgaXMgbm90IGZpeGVkLCBiYWNrIGl0IG91dAorIG8gbGFwaWMgOiBtb2R1bGUgc2hvdWxkIHNheXMgImRpZG4ndCBmaW5kIGFwaWMiIGlmIG5lZWRlZCwgRkFRIGFuZCBkb2Mgc2hvdWxkCisgIHNwZWFrIGEgYml0IGFib3V0IGxhcGljIGtlcm5lbCBvcHRpb24gb24geDg2IGFuZCByZWNlbnQga2VybmVsCisgbyBzZWUgdGhlIGJpZyBjb21tZW50IGluIGRiX2luc2VydC5jLCBpdCdzIHBvc3NpYmxlIHRvIGFsbG93IHVubGltaXRlZAorICAgYW1vdW50IG9mIHNhbXBsZXMgd2l0aCBhIHZlcnkgbWlub3IgY2hhbmdlIGluIGxpYmRiLgorIG8gaWYgb3Byb2ZpbGUgZG9lc24ndCByZWNvZ25pemUgdGhlIHByb2Nlc3NvciBzZWxlY3RlZCBieSB0aGUga2VybmVsCisgICBvcGNvbnRyb2wgY291bGQgc2V0dXAgdGhlIG1vZHVsZSBpbiB0aW1lciBtb2RlIChyZW1vdmUvcmVsb2FkIHByb2xseSksIGFuZAorICAgd2FybiB0aGUgdXNlciBpdCBtdXN0IHVwZ3JhZGUgb3Byb2ZpbGUgdG8gZ2V0IGFsbCB0aGUgZmVhdHVyZSBmcm9tIGl0cworICAgaGFyZHdhcmUuCisKK0xhdGVyCistLS0tLQorCisgbyByZW1vdmUgMi45NS8yLjIgc3VwcG9ydCBzbyB3ZSBjYW4gdXNlIGJvb3N0IG11bHRpIGluZGV4IGNvbnRhaW5lciBpbgorICAgc3ltYm9sL3NhbXBsZSBjb250YWluZXIKKyBvIGNvbnNpZGVyIGlmIHdlIGNhbiBpbXByb3ZlIGFub24gbWFwcGluZyBncm93aW5nIHN1cHBvcnQKKworPG1vdmVtZW50PiBbbW96QGxhbWJlbnQgcHBdJCAuL29wcmVwb3J0IC1sZiBsaWItaW1hZ2U6L2xpYi90bHMvbGliYy0yLjMuMi5zbyAvYmluL2Jhc2ggfCBncmVwIHZmcHJpbnRmCis8bW92ZW1lbnQ+IDE0ICAgICAgICAwLjEzMDEgIDYgICAgICAgICAwLjAxMDIgIC9saWIvdGxzL2xpYmMtMi4zLjIuc28gICB2ZnByaW50ZgorPG1vdmVtZW50PiBbbW96QGxhbWJlbnQgcHBdJCAuL29wcmVwb3J0IC1sZiBsaWItaW1hZ2U6L2xpYi90bHMvbGliYy0yLjMuMi5zbyAvdXNyL2Jpbi92aW0gfCBncmVwIHZmcHJpbnRmCis8bW92ZW1lbnQ+IDE3NiAgICAgICAyLjA5MjcgIDM0OSAgICAgICAxLjI1NTIgIC9saWIvdGxzL2xpYmMtMi4zLjIuc28gICB2ZnByaW50ZgorPG1vdmVtZW50PiBbbW96QGxhbWJlbnQgcHBdJCAuL29wcmVwb3J0IC1sZiBsaWItaW1hZ2U6L2xpYi90bHMvbGliYy0yLjMuMi5zbyB7IGltYWdlOi9iaW4vYmFzaCB9IHsgaW1hZ2U6L3Vzci9iaW4vdmltIH0gfCBncmVwIHZmcHJpbnRmCis8bW92ZW1lbnQ+IDE3NiAgICAgIDEwLjk2NTcgICsrKyAgICAgICAzNDkgICAgICAgNy44ODg4ICArKysgICAgICAgdmZwcmludGYKKzxtb3ZlbWVudD4gMTQgICAgICAgLS0tICAgICAgLS0tICAgICAgIDYgICAgICAgIC0tLSAgICAgIC0tLSAgICAgICB2ZnByaW50ZgorPG1vdmVtZW50PiBpdCBzZWVtcyB0aGVtIGFzIHR3byBzZXBhcmF0ZSBzeW1ib2xzCis8bW92ZW1lbnQ+IGJ1dCBjYW4gd2UgcmVtb3ZlIHRoZSBhcHBfbmFtZSBmcm9tIHJvdWdoX2xlc3MgYW5kIHN0aWxsIGJlIGFibGUgdG8gd2FsayB0aGUgdHdvIGxpc3RzPworPG1vdmVtZW50PiBldmVuIGlmIHdlIGNvdWxkLCBpdCB3b3VsZCBzdGlsbCBnbyB3cm9uZyB3aGVuIHdlJ3JlIHByb2ZpbGluZyBtdWx0aXBsZSBhcHBzCisKKyBvIEphdmEgc3R1ZmY/PworIG8gd2l0aCBvcHJlcG9ydCAtYyBJIGNhbiBnZXQgIndhcm5pbmc6IC9uby12bWxpbnV4IGNvdWxkIG5vdCBiZSBmb3VuZC4iLgorICAgU2hvdWxkIGJlIHNtYXJ0ZXIgPworIG8gb3ByZXBvcnQgLWMgZ2l2ZXMgd2VpcmQgb3V0cHV0IGZvciBhbiBpbWFnZSB3aXRoIG5vIHN5bWJvbHM6CisKKyAgICBzYW1wbGVzICAlICAgICAgICBzeW1ib2wgbmFtZQorICAxNTk2NSAgICAxMDAuMDAwICAobm8gc3ltYm9scykKKzI1MyAgICAgIDEwMC4wMDAgIChubyBzeW1ib2xzKQorICAxNTk2NSAgICA5OC40NDAwICAobm8gc3ltYm9scykKKyAgMjUzICAgICAgIDEuNTYwMCAgKG5vIHN5bWJvbHMpIFtzZWxmXQorCisgbyBjb25zaWRlciB0YWdnaW5nIG9wcmVwb3J0IC1jIGVudHJpZXMgd2l0aCBhIG51bWJlciBsaWtlIGdwcm9mCisgbyAtLWRldGFpbHMgZm9yIG9wcmVwb3J0IC1jLCBvciBkaWZmPz8KKyBvIHNob3VsZCBbc2VsZl0gZW50cmllcyBiZSBvbW1pdHRlZCBpZiAwID8/CisgbyBzdHJlc3MgdGVzdCBvcHJlcG9ydCAtYzogY29tcGlsZSBhIEJpZyBBcHBsaWNhdGlvbiB3L28gZnJhbWUgcG9pbnRlciBhbmQgbG9vaworICAgaG93IGRyaXZlciBhbmQgb3ByZXBvcnQgLWMgcmVhY3QuCisgbyBvcGFyY2hpdmUgY291bGQgZml4IHVwIHtrZXJufSBwYXRocyB3aXRoIC1wICh3aGF0IGFib3V0IGRpZmYgYmV0d2VlbgorICAgYXJjaGl2ZSBhbmQgY3VycmVudCB0aG91Z2g/KQorIG8gY2FuIHNheSBtb3JlIGluIG9wY29udHJvbCAtLXN0YXR1cworIG8gY29uc2lkZXIgYSBzb3J0IG9wdGlvbiBmb3IgZGlmZiAlCisgbyBvcGFubm90YXRlIGlzIHNpbGVudCBhYm91dCBzeW1ib2xzIG1pc3NpbmcgZGVidWcgaW5mbworIG8gb3Byb2ZpbGVkLmxvZyBub3cgY29udGFpbnMgdmFyaW91cyBzdGF0aXN0aWNzIGFib3V0IGxvc3Qgc2FtcGxlIGV0Yy4gZnJvbQorICB0aGUgZHJpdmVyLiBQb3N0IHByb2ZpbGUgdG9vbHMgbXVzdCBwYXJzZSB0aGF0IGFuZCB3YXJuIGV2ZW50dWFsbHksIHdhcm5pbmcKKyAgbXVzdCBpbmNsdWRlIGEgcHJvcG9zZWQgd29yayBhcm91bmQuIFVzZXIgbmVlZCB0aGlzOiBpZiBub3RoaW5nIHNlZW1zIHdyb25nCisgIHBlb3BsZSBhcmUgdW5saWtlbHkgdG8gZ2V0IGEgbG9vayBpbiBvcHJvZmlsZWQubG9nIChJIHJhbiBvcHJvZmlsZSBvbiAyLjYuMQorICAyIHdlZWtzIGJlZm9yZSBub3RpY2luZyBhdCAzMDAwMCBJIGxvc3QgYSBsb3Qgb2Ygc2FtcGxlcywgdGhlIHByb2ZpbGUgc2VlbWVkCisgIG9rIGR1IHRvIHRoZSByYW5kb21pemF0aW9uIG9mIGxvc3Qgc2FtcGxlcykuIEFzIGRldmVsb3BwZXIgd2UgbmVlZCB0aGF0IHRvbywKKyAgYWN0dWFsbHkgd2UgaGF2ZSBubyBjbGVhciBpZGVhIG9mIHRoZSBiZWhhdmlvciBvbiBkaWZmZXJlbnQgYXJjaCwgTlVNQSBldGMuCisgIE5vdCBwZXJmZWN0IGJlY2F1c2UgaWYgdGhlIHByb2ZpbGVyIGlzIHJ1bm5pbmcgdGhlIG9wcm9maWxlZC5sb2cgd2lsbCBzaG93CisgIHRob3NlIHdhcm5pbmcgb25seSBhZnRlciB0aGUgZmlyc3QgIGFsYXJtIHNpZ25hbCwgSSB0aGluayB3ZSBtdXN0IGR1bXAgdGhlCisgIHN0YXRpc3RpY3MgaW5mb3JtYXRpb24gYWZ0ZXIgZWFjaCBvcGNvbnRyb2wgLS1kdW1wIHRvIGF2b2lkIHRoYXQuCisgbyBvZGJfaW5zZXJ0KCkgY2FuIGZhaWwgb24gZnRydW5jYXRlIG9yIG1yZW1hcCgpIGluIGRiX21hbmFnZS5jIGJ1dCB3ZSBkb24ndAorICB0cnkgdG8gcmVjb3ZlciBncmFjZWZ1bGx5LgorIG8gb3V0cHV0IGNvbHVtbiBzaG9ydG5hbWUgaGVhZGVycyBmb3Igb3ByZXBvcnQgLWwKKyBvIGlzIHJlbGF0aXZlX3RvX2Fic29sdXRlX3BhdGggZ3VhcmFudGVlaW5nIGEgdHJhaWxpbmcgJy8nIGRvY3VtZW50ZWQgPworIG8gbW92ZSBvcHJvZmlsZWQubG9nIHRvIE9QX1NBTVBMRV9ESVIvY3VycmVudCA/CisgbyBwcCB0b29scyBtdXN0IGhhbmRsZSBzYW1wbGVzIGNvdW50IG92ZXJmbG93IChtYXJrZWQgYXMgKHVuc2lnbmVkKS0xKQorIG8gdGhlIHdheSB3ZSBzaG93IGtlcm5lbCBtb2R1bGVzIGluIDIuNSBpcyBub3QgdmVyeSBvYnZpb3VzIC0gIi9vcHJvZmlsZSIKKyBvIG9wYXJjaGl2ZSB3aWxsIGJlIG1vcmUgdXNlZnVsbCB3aXRoIGEgLS1yb290PSBvcHRpb25zIHRvIGFsbG93IHByb2ZpbGluZworICBvbiBhIHNtYWxsIGJveCwgbmZzIG1vdW50IC8gdG8gYW5vdGhlciBib3ggYW5kIHRyYW5zZmVyIHNhbXBsZSBmaWxlIGFuZAorICBiaW5hcnkgb24gYSBiaWdnZXIgYm94IGZvciBhbmFseXNpcy4gVGhlcmUgaXMgYWxzbyBhIHByb2JsZW0gaW4gb3BhcmNoaXZlCisgIHlvdSBjYW4gdXNlIHNlc3Npb246IHRvIGdldCB0aGUgcmlnaHQgcGF0aCB0byBzYW1wbGVzIGZpbGVzIGJ1dCBvcHJvZmlsZWQubG9nCisgIGFuZCBhYmkgZmlsZXMgcGF0aCBhcmUgaGFyZGNvZGVkIHRvIC92YXIvbGliL29wcm9maWxlLgorIG8gY2FsbGdyYXBoIHBhdGNoOiBiZXR0ZXIgd2F5IHRvIHNraXAgaWdub3JlZCBiYWNrdHJhY2UgPworIG8gbGliLWltYWdlOiBhbmQgaW1hZ2U6IGJlaGF2aW9yIGRlcGVuZCBvbiAtLXNlcGFyYXRlPSwgaWYgLS1zZXBhcmF0ZT1saWJyYXJ5CisgIG9wcmVwb3J0ICJsaWItaW1hZ2U6KmxpYmMqIiAtLW1lcmdlPWxpYiB3b3JrcyBidXQgbm90CisgIG9wcmVwb3J0ICJpbWFnZToqbGliYyoiIC0tbWVyZ2U9bGliIHdoaWxzdCB0aGUgYmVoYXZpb3IgaXMgcmV2ZXJzZWQgaWYKKyAgLS1zZXBhcmF0ZT09bm9uZS4gTXVzdCB3ZSB0YWtlIGNhcmUgPworIG8gZGVwZW5kZW5jaWVzIGJldHdlZW4gcHJvZmlsZV9jb250YWluZXIuaCBzeW1ib2xfY29udGFpbmVyLmggYW5kCisgIHNhbXBsZV9jb250YWluZXIuaCBiZWNvbWUgbW9yZSBhbmQgbW9yZSB1Z2x5LCBJIG5lZWRlZCB0byBpbmNsdWRlIHRoZW0KKyAgaW4gYSBzcGVjaWZpYyBvcmRlciBpbiBzb21lIHNvdXJjZSAoc3RpbGwgdHJ1ZT8/KQorIG8gYWRkIGV2ZW50IGFsaWFzZXMgZm9yIGNvbW1vbiB0aGluZ3MgbGlrZSBpY2FjaGUgbWlzc2VzLCB3ZSBtdXN0IHN0YXJ0IHRvIAorICB0aGluayBhYm91dCBtZXRyaWNzIGluY2x1ZGluZyBzaW1wbGUgbGlrZSBldmVudCBhbGlhcyBtYXBwZWQgdG8gdHdvIG9yIG1vcmUKKyAgZXZlbnRzIGFuZCBpbnRlcHJldGVkIHNwZWNpYWxseSBieSB1c2VyIHNwYWNlIHRvb2xzIGxpa2UgdXNpbmcgdGhlIHJhdGlvCisgIG9mIHNhbXBsZXM7IG1vcmUgdHJpY2t5IHdpbGwgYmUgdG8gc2VsZWN0IGFuIGV2ZW50IHVzZWQgYXMgY2FsbCBjb3VudCAobm8KKyAgY2cgb24gaXQpIGFuZCAgdXNlZCB0byBlbXVsYXRlIHRoZSBjYWxsIGNvdW50IGZpZWxkIGluIGdwcm9mLiBJIHRoaW5rIHRoaXMgaXMKKyAgYSBhZnRlciAxLjAgdGhpbmcgYnV0IGV2ZW50IGFsaWFzZXMgbXVzdCBiZSBzcGVjaWZpZWQgaW4gYSB3YXkgYWxsb3dpbmcgc3VjaAorICBleHRlbnNpb24KKyBvIGRvIHdlIG5lZWQgYW4gb3ByZXBvcnQgbGlrZSBvcHJlcG9ydCAtYyAoc2hvd2luZyBjYWxsZXIvY2FsbGVlIGF0IGJpbmFyeQorICBib3VuZGFyeSBub3Qgc3ltYm9scykgPworIG8gd2Ugc2hvdWxkIG5vdGljZSBhbiBvcGNvbnRyb2wgY29uZmlnIGNoYW5nZSAoLS1zZXBhcmF0ZSBldGMuKSBhbmQKKyAgIGF1dG8tcmVzdGFydCB0aGUgZGFlbW9uIGlmIG5lY2Vzc2FyeSAoUnVuKQorIG8gd2UgY2FuIGFkZCBsb3RzIG1vcmUgdW5pdCB0ZXN0cyB5ZXQKKyBvIEl0YW5pdW0gZXZlbnQgY29uc3RyYWludHMgYXJlIG5vdCBpbXBsZW1lbnRlZAorIG8gR1VJIHN0aWxsIGhhcyBhIHBoeXNpY2FsLWNvdW50ZXIgaW50ZXJmYWNlLCBzaG91bGQgaGF2ZSBhIGdlbmVyYWwgb25lCisgICBsaWtlIG9wY29udHJvbCAtLWV2ZW50CisgbyBJIHRoaW5rIHdlIHNob3VsZCBoYXZlIHRoZSBhYmlsaXR5IHRvIGhhdmUgKmZpeGVkKiB3aWR0aCBoZWFkZXJzLCBlLmcuIDoKKwordm1hICAgICAgc2FtcGxlcyAgY3VtLiBzYW1wbGVzICAlICAgICAgICAgICBjdW0uICUgICAgIHN5bWJvbCBuYW1lICAgICAgICAgICAgIGltYWdlIG5hbWUgICAgICAgICAgICAgIGFwcCBuYW1lCiswODA0YzM1MCA2NDU4MiAgICA2NDU4MiAgICAgICAgIDM1LjA3NTcgICAgIDM1LjA3NTcgICAgb2RiX2luc2VydCAgICAgICAgICAgICAgL3Vzci9sb2MuLi5pbi9vcHJvZmlsZWQgL3Vzci9sb2NhbC9vcHJvZmlsZS1wcC9iaW4vb3Byb2ZpbGVkCisKKyAgTm90ZSB0aGUgZWxsaXBzaXMKKyBvIHNob3VsZCB3ZSBtYWtlIHRoZSBzaWdodXAgaGFuZGxlciByZS1yZWFkIGNvdW50ZXIgY29uZmlnIGFuZCByZS1zdGFydCBwcm9maWxpbmcgdG9vID8KKyBvIGltcHJvdmUgLS1zbWFydC1kZW1hbmdsZQorCW8gYWxsb3cgdXNlciB0byBhZGQgaXQncyBvd24gcGF0dGVybiBpbiB1c2VyLnBhdCwgZG9jdW1lbnQgaXQuCisJbyBoYXJkIGNvZGUgJHt0eXBlbmFtZX0gcmVndWxhciBkZWZpbml0aW9uIHRvIHJlbW92ZSBhbGwgY3VycmVudCBsaW1pdGF0aW9ucyAoZGlmZmljdWx0LCBwZXJoYXBzIGFmdGVyIDEuMCA/KS4KKyBvIG9wcm9mX3N0YXJ0IGRpYWxvZyBzaXplIGlzIHRvbyBzbWFsbCBpbml0aWFsbHkKKyBvIGkxOG4uIFdlIG5lZWQgYSBnb29kIGZvcm1hdHRlciwgYW5kIGFsc28gcmVtZW1iZXIgZm9ybWF0X3BlcmNlbnQoKQorIG8gb3Bhbm5vdGF0ZSAtLXNvdXJjZSAtLW91dHB1dC1kaXI9fm1vei9vcC8gL3Vzci9iaW4vb3Byb2ZpbGVkCisgICB3aWxsIGZhaWwgYmVjYXVzZSB0aGUgfiBpcyBub3QgZXhwYW5kZWQgKG5vIHNwYWNlIGFyb3VuZCBpdCkgKHBvcHQgYnVnIEkgc2F5KQorIG8gY3B1IG5hbWVzIGluc3RlYWQgb2YgbnVtYmVycyBpbiAyLjQgbW9kdWxlLyA/CisgbyByZW1vdmUgMSBhbmQgMiBtYWdpYyBudW1iZXJzIGZvciBvcHJvZl9yZWFkeQorIG8gYWRhcHQgQW50b24ncyBwYXRjaCBmb3IgaGFuZGxpbmcgbm9uLXN5bWJvbGxlZCBsaWJyYXJpZXMgPyAobm93YWRheSBDKysKKyAgYW5vbiBuYW1lc3BhY2Ugc3ltYm9sIGFyZSBzdGF0aWMsIDMuNCBpaXJjLCBzbyB3aXRoIHJlY2VudCBkaXN0cm8gd2UgYXJlCisgIG1vcmUgbGlrZWx5IHRvIGdldCBwcm9ibGVtcyB3aXRoIGEgImZhbGxiYWNrIHRvIGR5bmFtaWMgc3ltYm9scyIgYXBwcm9jaCkKKyBvIHVzZSBzdGFuZGFyZCBDIGludGVnZXIgdHlwZSA8c3RkaW50Lmg+IGludDMyX3QgaW50MTZfdCBldGMuCisgbyBldmVudCBtdWx0aXBsZXhpbmcgZm9yIHJlYWwKKyBvIHJhbmRvbWl6aW5nIG9mIHJlc2V0IHZhbHVlCisgbyBYTUwgb3V0cHV0CisgbyBwcm9maWxlIHRoZSBOTUkgaGFuZGxlciBjb2RlCisgbyBvcGFubm90YXRlIDogSSBhZGRlZCB0aGlzIHRvIHRoZSBkb2MgYWJvdXQgZGlmZmVyZW5jZSBiZXR3ZWVuIG5yIHNhbXBsZXMKKyAgY3JlZGl0ZWQgdG8gYSBzb3VyY2UgZnVuY3Rpb24gYW5kIHRvdGFsIG51bWJlciBvZiBzYW1wbGVzIGZvciB0aGlzIGZ1bmN0aW9uOgorICAgIlRoZSBtaXNzaW5nIHNhbXBsZXMgYXJlIG5vdCBsb3N0LCB0aGV5IHdpbGwgYmUgY3JlZGl0ZWQgdG8gYW5vdGhlciBzb3VyY2UKKyAgICBsb2NhdGlvbiB3aGVyZSB0aGUgaW5saW5lZCBmdW5jdGlvbiBpcyBkZWZpbmVkLiBUaGUgaW5saW5lZCBmdW5jdGlvbiB3aWxsCisgICAgYmUgY3JlZGl0ZWQgZnJvbSBtdWx0aXBsZSBjYWxsIHNpdGUgYW5kIG1lcmdlZCBpbiBvbmUgcGxhY2UgaW4gdGhlCisgICBhbm5vdGF0ZWQgc291cmNlIGZpbGUgc28gdGhlcmUgaXMgbm8gd2F5IHRvIHNlZSBmcm9tIHdoYXQgY2FsbCBzaXRlIGFyZQorICAgY29taW5nIHRoZSBzYW1wbGVzIGZvciBhbiBpbmxpbmVkIGZ1bmN0aW9uLiIKKyAgSSB0aGluayB3ZSBjYW4gd29yayBhcm91bmQgdGhpczogb3V0cHV0IG11bHRpcGxlIGluc3RhbmNlcyBvZiBpbmxpbmVkCisgIGZ1bmN0aW9uIGxpa2UgOgorICBpbmxpbmUgZm9vKCkgeyBmb286IHRvdGFsIDE1MDAgMzAuMDAgLi4uCisgIC4uLiBhbm5vdGF0ZWQgc291cmNlIGZyb20gYWxsIGNhbGwgc2l0ZSAKKyAgaW5saW5lIGZvbygpIHsgZm9vIChjYWxsIHNpdGUgYmFyKCkpOiB0b3RhbCA1MDAgMTAuMDAKKyAgLi4gYW5ub3RhdGVkIHNvdXJjZSBmcm9tIGNhbGwgc2l0ZSBiYXIoKSBldGMuCisgIHdoYXQgYWJvdXQgdGVtcGxhdGUuLi4sIGNhbiB3ZSBkby9tdXN0IHdlIGRvIHNvbWV0aGluZyBsaWtlIHRoYXQKKyAgdGVtcGxhdGUgPGNsYXNzIFQ+IGVhdF9jcHUoKSBhbmQgZG8gYSBzaW1pbGFyIHRoaW5ncywgbWVyZ2luZyBhbmQgYW5ub3RhdGluZworICBhbGwgaW5zdGFudGF0aW9uIHRoZW4gYW5ub3RhdGluZyBmb3IgZWFjaCBkaXN0aW5jdCBpbnN0YW50YXRpb24sIHRoaXMgd2lsbAorICBicmVhayBvdXIgImtlZXAgdGhlIHNvdXJjZSBsaW5lIG51bWJlciBpbiBhbm5vdGF0ZWQgc291cmNlIGZpbGUgaWRlbnRpY2FsIHRvCisgIHRoZSBvcmlnaW5hbCBzb3VyY2UiCisgbyBldmVudHMvbWlwcy8zNGsvZXZlbnRzLCBzb21lIGV2ZW50cyBkb2VzIG5vdCBtYWtlIHNlbnNlLCB0aGV5IGdldCBpZGVudGljYWwKKyAgZXZlbnQgbnVtYmVyLCB1bSBhbmQgY291bnRlciBuciBzbyB0aGV5IG92ZXJsYXAsIGN1cnJlbnRseSBjb21tZW50ZWQKKyBvIGNhbiB3ZSBmaW5kIGEgbW9yZSBlZmZpY2llbnQgaW1wbGVtZW50YXRpb24gZm9yIHNwYXJzZV9hcnJheSA/CisgbyBsaWJwcC9wcm9maWxlLmNwcDppc19zcHVfc2FtcGxlX2ZpbGUoKSBjYW4gYmUgc2ltcGxpZmllZCBieSB1c2luZworICByZWFkX2hlYWRlcigpCisgbyB3aGlsZSBmaXhpbmcgIzE4MTkzNTAgSSBuZWVkZWQgdG8gbWFrZSBleHRyYV9pbWFnZXMgcGVyIHByb2ZpbGUgc2Vzc2lvbgorICAgcmF0aGVyIHRoYW4gYSBnbG9iYWwgdmFyIHNvIEkgdGhpbmsgd2UgbmVlZCB0byByZXZpc2l0IGZpbmRfaW1hZ2VfcGF0aCgpLAorICAgZXh0cmFfZm91bmRfaW1hZ2VzLCAtLWltYWdlLXBhdGggKC1wKS4KKyAgIEFjdHVhbGx5IHdlIGNhbid0IGRvIHNvbWV0aGluZyBhbGE6CisgICBvcHJlcG9ydCB7IGFyY2hpdmU6dG1wMSBzZWFyY2hfcGF0aD0vbGliL21vZHVsZXMvMi42LjIwIH0geyBhcmNoaXZlOnRtcDIgc2VhcmNoX3BhdGg9Ly4uLi8yLjYuMjAuOSB9CisgICBiZWNhdXNlIHNlYXJjaF9wYXRoIGlzIHNwZWNpZmllZCB0aHJvdWdoIC1wIHdoaWNoIGlzIG5vdCBhIHBhcnQgb2YgdGhlCisgICBwcm9maWxlIHNwZWMuIEZpeGluZyAjMTgxOTM1MCBjb3ZlcmVkIGFsbCBjYXNlIGV4Y2VwdCB0aGlzIG9uZSBidXQgdy9vIGFueQorICAgdXNlciB2aXNpYmxlIGNoYW5nZS4gQW5vdGhlciB3YXkgd2lsbCBiZSB0byBzYXZlIHRoZSAtcCBvcHRpb24gdXNlZCB3aXRoCisgICBvcGFyY2hpdmUgaW4gYSBmaWxlIGF0IHRoZSB0b3BsZXZlbCBvZiB0aGUgYXJjaGl2ZSwgdXNlIGl0IHdpdGggYWxsIHRvb2xzCisgICB3aGVuIGFuIGFyY2hpdmU6IGlzIHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZCBsaW5lIGFuZCBkZXByZWNhdGUgdGhlIHVzZSBvZgorICAgLXAgaW4gc3VjaCBjYXNlLgorIG8gY29uc2lkZXIgdG8gbWFrZSBleHRyYV9pbWFnZXMgYSByZWYgY291bnRlZCBvYmplY3QsIGl0J3MgY29waWVkIGJ5IHZhbHVlCisgIGEgZmV3IHRpbWUgYnV0IGNhbiBjb250YWluIGEgbG90IG9mIHN0cmluZy4gVGhlcmUgaXMgYWxzbyBzb21lIHVnbHkgcHVibGljCisgIG1lbWJlciBleHRyYV9pbWFnZXMgdG8gZml4LgorIG8gZGFlbW9uIGJzcyBzaXplIGNhbiBiZSBpbXByb3ZlZCwgZ3JlcCBmb3IgTUFYX1BBVEggdG8gc2VlIHdoZXJlIGR5bmFtaWMKKyAgIGFsbG9jYXRpb24gY2FuIGJlIHVzZWQsIHRyeSAkIG5tIG9wcm9maWxlZCAtLXNpemUtc29ydCB0b28uCisKK0RvY3VtZW50YXRpb24KKy0tLS0tLS0tLS0tLS0KKworIG8gdGhlIGRvY3Mgc2hvdWxkIG1lbnRpb24gdGhlIGRlZmF1bHQgZXZlbnQgZm9yIGVhY2ggYXJjaCBzb21ld2hlcmUKKyBvIG1vcmUgZGlzY3Vzc2lvbiBvZiBwcm9ibGVtYXRpYyBjb2RlIG5lZWRzIHRvIGdvIGluIHRoZSAiaW50ZXJwcmV0aW5nIiBzZWN0aW9uLiAKKyBvIGRvY3VtZW50IGdjYyAyLjk1IGFuZCBsaW5lbnIgaW5mbyBwcm9ibGVtcyBlc3BlY2lhbGx5IGZvciBpbmxpbmUgZnVuY3Rpb25zCisgbyBmaW5pc2ggdGhlIGludGVybmFscyBtYW51YWwKKworSklUIHN1cHBvcnQKKy0tLS0tLS0tLS0tCisKKyBvIFdlIG5lZWQgYSBtb3JlIGR5bmFtaWMgc3RydWN0dXJlIHRvIGhhbmRsZSBlbnRyaWVzX2FkZHJlc3NfYXNjZW5kaW5nIGFuZAorICAgZW50cmllc19zeW1ib2xzX2FzY2VuZGluZywgYWN0dWFsbHkgbWFueSBzY2FsaW5nIHByb2JsZW0gb2NjdXIgYmVjYXVzZSB0aGV5CisgICBhcmUgYXJyYXksIHRoaXMgd2FzIHBlcmZlY3QgdG8gZ2V0IGEgZmlyc3QgaW1wbGVtZW50YXRpb24gZm9jdXNpbmcgb24KKyAgIGhhbmRsaW5nIG92ZXJsYXAgYW5kIGFsbCBidXQgdGhlIG5lZWQgdG8gcXNvcnQvY29weSBhcnJheXMgYXQgZWFjaCBpdGVyYXRpb24KKyAgIGlzIGEgcGVyZm9ybWFuY2Uga2lsbGVyLiBTb21lIHNvcnQgb2YgQVZMIHRyZWUgd2lsbCBkbyB0aGUgam9iLgorIG8gUmVsYXRlZCB0byB0aGUgcHJldmlvdXMsIGl0J3MgcG9zc2libGUgdG8gZG8gYWxsIHByb2Nlc3NpbmcgaW4gb3BqaXRjb252LmMKKyAgIGluIGEgc2luZ2xlIGxlZnQgdG8gcmlnaHQgd2FsayBvZiB0aGUgaml0ZW50cnkgbGlzdC4KKyBvIHNlZSB0aGUgRklYTUUgYXQgcGFyc2VfZHVtcC5jOnBhcnNlX2NvZGVfdW5sb2FkKCkKKyBvIEluY3JlbWVudCBKSVRIRUFERVJfVkVSU0lPTiBpbiBqaXRkdW1wLmggdG8gYmUgc3VyZSB0aGF0IHRoZSBuZXcgY29kZSBvbmx5CisgICBhY2NlcHRzIGR1bXAgZmlsZSBjcmVhdGVkIGJ5IHRoZSBuZXcgY29kZS4KKyBvIG9waml0Y29udi5jOnJlcGxhY2VtZW50X25hbWUoKSBzaG91bGQgYmUgZW5vdWdoIGNsZXZlciB0byBhdm9pZCBuYW1lCisgICBjb2xsaXNpb24gc28gd2UgY2FuIHJlbW92ZSB0aGUgcmVjdXJzaXZlIGNhbGwgdG8gZGlzYW1iaWd1YXRlX3N5bWJvbF9uYW1lcygpLAorICAgbmVlZCBhIGhhc2ggdGFibGUgb3Igc29tZSBzb3J0IG9mIGFzc29jaWF0aXZlIGFycmF5IHRvIGNoZWNrIHF1aWNrbHkgaWYgYQorICAgbmFtZSBleGlzdHMsIHdlIHdpbGwgbmVlZCBzb21lIHNvcnQgb2YgYXZsIHRyZWUgc28gaXQncyBwcm9iYWJseSBiZXR0ZXIKKyAgIHRvIGRvIG5vdCBpbXBsZW1lbnQgYSBoYXNoIHRhYmxlIG9ubHkgZm9yIHRoaXMgcHVycG9zZS4KKyBvIG9wX3dyaXRlX25hdGl2ZV9jb2RlKCkgbXVzdCBhY2NlcHQgb25lIG1vcmUgcGFyYW1ldGVyLCB0aGUgcmVhbCBjb2RlIHNpemUKKyAgIHdoaWNoIGNhbiBiZSB6ZXJvIG9yIGVxdWFsIHRvIGNvZGVfc2l6ZSwgdGhpcyB3aWxsIGFsbG93IHRvIGNyZWF0ZSBlbGYKKyAgIGZpbGUgdy9vIGFueSBjb2RlIGNvbnRlbnRzLCBvbmx5IGEgc3ltYm9sIHRhYmxlIGFuZCAudGV4dCBzZWN0aW9ucyB3L28KKyAgIGNvbnRlbnRzICh5ZXMgRUxGIGZvcm1hdCBhbGxvdyB0aGF0KS4gRm9yIGR5bmFtaWMgYmluYXJ5IHRyYW5zbGF0aW9uIGl0J2xsCisgICBhdm9pZCB0byBkdW1wIHRvbnMgb2YgY29kZSBmb3IgbGl0dGxlIHVzZSwgb3Bhbm5vdGF0ZSAtLWFzc2VtYmx5IHdpbGwgbm90CisgICB3b3JrIG9uIHN1Y2ggZWxmIGZpbGUgYnV0IGl0IGNhbiBiZSBhIHJlYWwgd2luLiBJdCdsbCBuZWVkIHRvIGFkZCB0bworICAgaml0cmVjb3JkMCBhIHJlYWxfc2l6ZSBmaWVsZCwgYW5kIHNvbWUgdHJpY2tlcnkgd2hlbiBidWlsZGluZyB0aGUgZWxmIGZpbGUsCisgICB0YWtpbmcgY2FyZSBhYm91dCB0aGUgY2FzZSB3ZSBtaXggemVybyBjb2RlIHNpemUgd2l0aCBub24gemVybyBjb2RlIHNpemUuCisgICBQZXJoYXBzIHdlIGNhbiB1c2UgaXQgdG9vIGZvciBqYXZhLCBmaWx0ZXJpbmcgbmF0aXZlIG1ldGhvZCBldGMuIEFjdHVhbGx5CisgICB3ZSBhbGxvdyBhIHNpbXBsaWZpZWQgZm9ybSBvZiB0aGlzIGZlYXR1cmUgYnkgYWxsb3dpbmcgdG8gZGlzYWJsZS9lbmFibGUKKyAgIGNvZGUgZHVtcGluZyBidXQgYXQgdGhlIHdob2xlIGR1bXAgbGV2ZWwgbm90IG9uIGEgc3ltYm9sIGJhc2lzLCBxdWl0ZQorICAgcG9zc2libGUgc3VmZmljaWVudC4gW21wajogV2UncmUgYmFja2luZyBhd2F5IGZyb20gdGhlIGlkZWEgb2YgZHVtcGluZworICAgSklUIHJlY29yZHMgd2l0aG91dCBjb2RlLiAgU2luY2UgQkZEIGFzeW1ib2wgdHlwZSBkb2VzIG5vdCBpbmNsdWRlIHN5bWJvbCBzaXplLAorICAgdGhlIG9wX2JmZCB0ZWNobmlxdWUgZm9yIGRldGVybWluaW5nIHN5bWJvbCBzaXplIHJlbGllcyBvbiBrbm93aW5nIHRoZSB0cnVlCisgICBmaWxlIHNpemU7IGFuZCBpZiBjb2RlIGlzIG5vdCBpbmNsdWRlZCBpbiB0aGUgLmpvIGZpbGUsIHdlIGRvbid0IGhhdmUgdHJ1ZSBzaXplLl0KKyBvIFRoZSBwaXBlIHVzZWQgZm9yIHRyaWdnZXJpbmcgSklUIGR1bXAgY29udmVyc2lvbiBzaG91bGQgYmUgdXNlZCBmb3Igbm9ybWFsCisgICBkdW1waW5nIHRvby4KKyBvIFNlZSBGSVhNRSBpbiBhZ2VudHMvanZtdGkvbGlianZtdGlfb3Byb2ZpbGUuYzoKKyAgIElmIGVuYWJsZW1lbnQgdG8gZ2V0IGxpbmUgbnVtYmVyIGluZm8gd291bGQgYmUgY29uZmlndXJhYmxlIHRocm91Z2ggY29tbWFuZCBsaW5lLAorICAgd2hhdCBzaG91bGQgYmUgdGhlIGRlZmF1bHQgb24vb2ZmPworIG8gU2VlIEZJWE1FIGluIG9waml0Y29udi9kZWJ1Z19saW5lLmMKKyBvIFRoZSB3YXkgdG8gdXNlIHRoZSBwaXBlIHNob3VsZCBiZSBtYWRlIG1vcmUgc2VjdXJlIHRvIGF2b2lkIGRlbmlhbCBvZiBzZXJ2aWNlCisgICBhdHRhY2tzLiBXZSBoYXZlIHRvIHRoaW5rIGFib3V0IGl0LgorIG8gQ2FsbGdyYXBoIGRvZXMgbm90IHdvcmsgcHJvcGVybHkgZm9yIHRoZSAuam8gZmlsZXMgdGhlIEpJVCBzdXBwb3J0IGNyZWF0ZXMuCisgICBTZWUgc2VjdGlvbiBDaGFwdGVyIDQsIHNlY3QgMi4zLjIgIkNhbGxncmFwaCBhbmQgSklUIHN1cHBvcnQiLiBUcnkgdG8gZmlndXJlCisgICBvdXQgYSB3YXkgdG8gY29ycmVsYXRlIGFuIGFub255bW91cyBzYW1wbGUgY2FsbGdyYXBoIGVudHJ5IHdpdGgKKyAgIHRoZSAuam8gZmlsZSB0aGF0IG1heSBleGlzdCBmb3IgdGhlIGFub255bW91cyBjb2RlLgorIG8gc2VlIG1haWwgZnJvbSBHaXNsZSBEYW5rZWw6CisgICAiSklUX1NVUFBPUlQ6IEFkZGluZyBzdXBwb3J0IGZvciBmaWxlLWJhY2tlZCBub24tRUxGIEpJVCBjb2RlIgorICAgLT4gc2hvdWxkIGJlIGNoYW5nZWQgKGlmIHVzZWZ1bCkgYmVmb3JlIG5leHQgcmVsZWFzZQorIG8gU2VlIEZJWE1FIGluIG9wX2hlYWRlci5jcHA6CisgICBUaGUgY2hlY2sgZm9yIGhlYWRlci5tdGltZSBvZiBKSVQgc2FtcGxlIGZpbGVzIGlzIG5vdCBjb3JyZWN0IGJlY2F1c2UgY3VycmVudGx5CisgICB0aGlzIG10aW1lIHZhbHVlIGlzIHNldCB0byB6ZXJvIGR1ZSB0byBtaXNzaW5nIGNvb2tpZSBzZXR0aW5nIGZvciBKSVQgc2FtcGxlIGZpbGVzLgorICAgU29tZSBhZGRpdGlvbmFsIGNoZWNrL3NldHRpbmcgdG8gaGVhZGVyLm10aW1lIHNob3VsZCBiZSBtYWRlIGZvciBKSVQgc2FtcGxlIGZpbGVzLgorIG8gTW9ubyBKSVQgc3VwcG9ydDoKKworICAgMjAwNy0xMS0wODogd2l0aCBjYWxsZ3JhcGggbWFzc2kgZ290CisgICA8bWFzc2k+IG9wYXJjaGl2ZSBlcnJvcjogcGFyc2VfZmlsZW5hbWUoKSBpbnZhbGlkIGZpbGVuYW1lOiAvdmFyL2xpYi9vcHJvZmlsZS9zYW1wbGVzL2N1cnJlbnQve3Jvb3R9L3Zhci9saWIvb3Byb2ZpbGUvc2FtcGxlcy9jdXJyZW50L3tyb290fS9ob21lL21hc3NpL21vbm8vYW1kNjQvYmluL21vbm8ve2RlcH0ve2Fub246YW5vbn0vMzI0MzIuMHg0MGEyNjAwMC4weDQwYTM2MDAwL0NQVV9DTEtfVU5IQUxURUQuMTAwMDAwLjAuYWxsLmFsbC5hbGwve2RlcH0ve3Jvb3R9L3Zhci9saWIvb3Byb2ZpbGUvc2FtcGxlcy9jdXJyZW50L3tyb290fS9ob21lL21hc3NpL21vbm8vYW1kNjQvYmluL21vbm8ve2RlcH0ve2Fub246YW5vbn0vMzI0MzIuMHg0MGEyNjAwMC4weDQwYTM2MDAwL0NQVV9DTEtfVU5IQUxURUQuMTAwMDAwLjAuYWxsLmFsbC5hbGwve2NnfS97cm9vdH0vdXNyL29wcm9maWxlL2Jpbi9vcHJvZmlsZWQvQ1BVX0NMS18KKworICAgTWFzc2kgYWRkZWQgTW9ubyBKSVQgc3VwcG9ydCwgY29kZSBvbiB0aGUgc3RhY2sgaXMgbmV2ZXIgdW5sb2FkZWQgYW5kIHRoZXJlIGlzCisgICBubyBieXRlIGNvZGUsIGNvZGUgaXMgYWx3YXlzIGNvbXBpbGVkIHRvIG5hdGl2ZSBtYWNoaW5lIGNvZGUsIHRoaXMgbWVhbiB0aGFuCisgICBmb3IgbW9ubyBhdCBsZWFzdCB3ZSBjYW4gZG8gY2FsbGdyYXBoIGlmIHdlIGNhbiBmaXggdGhpcyBzYW1wbGVzIGZpbGVuYW1lCisgICBwcm9ibGVtLgorCitHZW5lcmFsIGNoZWNrcyB0byBtYWtlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgCisgbyByZ3JlcCBGSVhNRQorIG8gdmFsZ3JpbmQgKC0tc2hvdy1yZWFjaGFibGU9eWVzIC0tbGVhay1jaGVjaz15ZXMpCisgbyBhdWRpdCB0byB0cmFjayB1bm5lY2Vzc2FyeSBpbmNsdWRlIDw+CisgbyBnY2MgMy4wLzMueCBjb21waWxlCisgbyBRdDIvMyBjaGVjaywgbm8gUXQgY2hlY2sKKyBvIHZlcmlmeSBidWlsZHMgKG1vZHZlcnNpb25zLCBrZXJuZWwgdmVyc2lvbnMsIGF0aGxvbiBldGMuKS4gSSBoYXZlIHRoZQorICBuZWNlc3Nhcnkgc3R1ZmYgdG8gY2hlY2sga2VybmVsIHZlcnNpb25zL2NvbmZpZ3VyYXRpb25zIG9uIFBJSUkgY29yZSAoUGhpbCkKKyBvIHVzZSBubSBhbmQgYSBsaXR0bGUgc2NyaXB0IHRvIHRyYWNrIHVudXNlZCBmdW5jdGlvbgorIG8gdGVzdCBpdCB0byBoZWxsIGFuZCBiYWNrCisgbyBjb21waWxlIGFsbCBDKysgcHJvZ3JhbXMgd2l0aCBTVExfcG9ydCBhbmQgdGVzdCB0aGVtIChnY2MgMy40IGNvbnRhaW4gYQorICAgZGVidWcgbW9kZSB0b28gYnV0IHN0ZDo6c3RyaW5nIGl0ZXJhdG9yIGFyZSBub3QgY2hlY2tlZCkKKyBvIFRoZXJlIGlzIHByb2JhYmx5IHBsYWNlIG9mIHBvc3QgcHJvZmlsZSB0b29scyB3aGVyZSBsb29raW5nIGF0IGVycm5vIHdpbGwgZ2l2ZSBiZXR0ZXIgZXJyb3IgbWVzc2FnZXMuCisKZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2FjbG9jYWwubTQgYi9vcHJvZmlsZS0wLjkuNy9hY2xvY2FsLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0NTAxMGQKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9hY2xvY2FsLm00CkBAIC0wLDAgKzEsMTE0NCBAQAorIyBnZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBhY2xvY2FsIDEuMTEuMSAtKi0gQXV0b2NvbmYgLSotCisKKyMgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LAorIyAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAorIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCisjIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworbTRfaWZuZGVmKFtBQ19BVVRPQ09ORl9WRVJTSU9OXSwKKyAgW200X2NvcHkoW200X1BBQ0tBR0VfVkVSU0lPTl0sIFtBQ19BVVRPQ09ORl9WRVJTSU9OXSldKWRubAorbTRfaWYobTRfZGVmbihbQUNfQVVUT0NPTkZfVkVSU0lPTl0pLCBbMi42N10sLAorW200X3dhcm5pbmcoW3RoaXMgZmlsZSB3YXMgZ2VuZXJhdGVkIGZvciBhdXRvY29uZiAyLjY3LgorWW91IGhhdmUgYW5vdGhlciB2ZXJzaW9uIG9mIGF1dG9jb25mLiAgSXQgbWF5IHdvcmssIGJ1dCBpcyBub3QgZ3VhcmFudGVlZCB0by4KK0lmIHlvdSBoYXZlIHByb2JsZW1zLCB5b3UgbWF5IG5lZWQgdG8gcmVnZW5lcmF0ZSB0aGUgYnVpbGQgc3lzdGVtIGVudGlyZWx5LgorVG8gZG8gc28sIHVzZSB0aGUgcHJvY2VkdXJlIGRvY3VtZW50ZWQgYnkgdGhlIHBhY2thZ2UsIHR5cGljYWxseSBgYXV0b3JlY29uZicuXSldKQorCisjIHBrZy5tNCAtIE1hY3JvcyB0byBsb2NhdGUgYW5kIHV0aWxpc2UgcGtnLWNvbmZpZy4gICAgICAgICAgICAtKi0gQXV0b2NvbmYgLSotCisjIHNlcmlhbCAxIChwa2ctY29uZmlnLTAuMjQpCisjIAorIyBDb3B5cmlnaHQgwqkgMjAwNCBTY290dCBKYW1lcyBSZW1uYW50IDxzY290dEBuZXRzcGxpdC5jb20+LgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisjIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorIworIyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaWYgeW91CisjIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIHRoYXQgY29udGFpbnMgYQorIyBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHlvdSBtYXkgaW5jbHVkZSBpdCB1bmRlcgorIyB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisKKyMgUEtHX1BST0dfUEtHX0NPTkZJRyhbTUlOLVZFUlNJT05dKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbUEtHX1BST0dfUEtHX0NPTkZJR10sCitbbTRfcGF0dGVybl9mb3JiaWQoW15fP1BLR19bQS1aX10rJF0pCittNF9wYXR0ZXJuX2FsbG93KFteUEtHX0NPTkZJRyhfUEFUSCk/JF0pCitBQ19BUkdfVkFSKFtQS0dfQ09ORklHXSwgW3BhdGggdG8gcGtnLWNvbmZpZyB1dGlsaXR5XSkKK0FDX0FSR19WQVIoW1BLR19DT05GSUdfUEFUSF0sIFtkaXJlY3RvcmllcyB0byBhZGQgdG8gcGtnLWNvbmZpZydzIHNlYXJjaCBwYXRoXSkKK0FDX0FSR19WQVIoW1BLR19DT05GSUdfTElCRElSXSwgW3BhdGggb3ZlcnJpZGluZyBwa2ctY29uZmlnJ3MgYnVpbHQtaW4gc2VhcmNoIHBhdGhdKQorCitpZiB0ZXN0ICJ4JGFjX2N2X2Vudl9QS0dfQ09ORklHX3NldCIgIT0gInhzZXQiOyB0aGVuCisJQUNfUEFUSF9UT09MKFtQS0dfQ09ORklHXSwgW3BrZy1jb25maWddKQorZmkKK2lmIHRlc3QgLW4gIiRQS0dfQ09ORklHIjsgdGhlbgorCV9wa2dfbWluX3ZlcnNpb249bTRfZGVmYXVsdChbJDFdLCBbMC45LjBdKQorCUFDX01TR19DSEVDS0lORyhbcGtnLWNvbmZpZyBpcyBhdCBsZWFzdCB2ZXJzaW9uICRfcGtnX21pbl92ZXJzaW9uXSkKKwlpZiAkUEtHX0NPTkZJRyAtLWF0bGVhc3QtcGtnY29uZmlnLXZlcnNpb24gJF9wa2dfbWluX3ZlcnNpb247IHRoZW4KKwkJQUNfTVNHX1JFU1VMVChbeWVzXSkKKwllbHNlCisJCUFDX01TR19SRVNVTFQoW25vXSkKKwkJUEtHX0NPTkZJRz0iIgorCWZpCitmaVtdZG5sCitdKSMgUEtHX1BST0dfUEtHX0NPTkZJRworCisjIFBLR19DSEVDS19FWElTVFMoTU9EVUxFUywgW0FDVElPTi1JRi1GT1VORF0sIFtBQ1RJT04tSUYtTk9ULUZPVU5EXSkKKyMKKyMgQ2hlY2sgdG8gc2VlIHdoZXRoZXIgYSBwYXJ0aWN1bGFyIHNldCBvZiBtb2R1bGVzIGV4aXN0cy4gIFNpbWlsYXIKKyMgdG8gUEtHX0NIRUNLX01PRFVMRVMoKSwgYnV0IGRvZXMgbm90IHNldCB2YXJpYWJsZXMgb3IgcHJpbnQgZXJyb3JzLgorIworIyBQbGVhc2UgcmVtZW1iZXIgdGhhdCBtNCBleHBhbmRzIEFDX1JFUVVJUkUoW1BLR19QUk9HX1BLR19DT05GSUddKQorIyBvbmx5IGF0IHRoZSBmaXJzdCBvY2N1cmVuY2UgaW4gY29uZmlndXJlLmFjLCBzbyBpZiB0aGUgZmlyc3QgcGxhY2UKKyMgaXQncyBjYWxsZWQgbWlnaHQgYmUgc2tpcHBlZCAoc3VjaCBhcyBpZiBpdCBpcyB3aXRoaW4gYW4gImlmIiwgeW91CisjIGhhdmUgdG8gY2FsbCBQS0dfQ0hFQ0tfRVhJU1RTIG1hbnVhbGx5CisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbUEtHX0NIRUNLX0VYSVNUU10sCitbQUNfUkVRVUlSRShbUEtHX1BST0dfUEtHX0NPTkZJR10pZG5sCitpZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyIgJiYgXAorICAgIEFDX1JVTl9MT0coWyRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzICIkMSJdKTsgdGhlbgorICBtNF9kZWZhdWx0KFskMl0sIFs6XSkKK200X2lmdmFsbihbJDNdLCBbZWxzZQorICAkM10pZG5sCitmaV0pCisKKyMgX1BLR19DT05GSUcoW1ZBUklBQkxFXSwgW0NPTU1BTkRdLCBbTU9EVUxFU10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtfUEtHX0NPTkZJR10sCitbaWYgdGVzdCAtbiAiJCQxIjsgdGhlbgorICAgIHBrZ19jdl9bXSQxPSIkJDEiCisgZWxpZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyI7IHRoZW4KKyAgICBQS0dfQ0hFQ0tfRVhJU1RTKFskM10sCisgICAgICAgICAgICAgICAgICAgICBbcGtnX2N2X1tdJDE9YCRQS0dfQ09ORklHIC0tW10kMiAiJDMiIDI+L2Rldi9udWxsYF0sCisJCSAgICAgW3BrZ19mYWlsZWQ9eWVzXSkKKyBlbHNlCisgICAgcGtnX2ZhaWxlZD11bnRyaWVkCitmaVtdZG5sCitdKSMgX1BLR19DT05GSUcKKworIyBfUEtHX1NIT1JUX0VSUk9SU19TVVBQT1JURUQKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtfUEtHX1NIT1JUX0VSUk9SU19TVVBQT1JURURdLAorW0FDX1JFUVVJUkUoW1BLR19QUk9HX1BLR19DT05GSUddKQoraWYgJFBLR19DT05GSUcgLS1hdGxlYXN0LXBrZ2NvbmZpZy12ZXJzaW9uIDAuMjA7IHRoZW4KKyAgICAgICAgX3BrZ19zaG9ydF9lcnJvcnNfc3VwcG9ydGVkPXllcworZWxzZQorICAgICAgICBfcGtnX3Nob3J0X2Vycm9yc19zdXBwb3J0ZWQ9bm8KK2ZpW11kbmwKK10pIyBfUEtHX1NIT1JUX0VSUk9SU19TVVBQT1JURUQKKworCisjIFBLR19DSEVDS19NT0RVTEVTKFZBUklBQkxFLVBSRUZJWCwgTU9EVUxFUywgW0FDVElPTi1JRi1GT1VORF0sCisjIFtBQ1RJT04tSUYtTk9ULUZPVU5EXSkKKyMKKyMKKyMgTm90ZSB0aGF0IGlmIHRoZXJlIGlzIGEgcG9zc2liaWxpdHkgdGhlIGZpcnN0IGNhbGwgdG8KKyMgUEtHX0NIRUNLX01PRFVMRVMgbWlnaHQgbm90IGhhcHBlbiwgeW91IHNob3VsZCBiZSBzdXJlIHRvIGluY2x1ZGUgYW4KKyMgZXhwbGljaXQgY2FsbCB0byBQS0dfUFJPR19QS0dfQ09ORklHIGluIHlvdXIgY29uZmlndXJlLmFjCisjCisjCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbUEtHX0NIRUNLX01PRFVMRVNdLAorW0FDX1JFUVVJUkUoW1BLR19QUk9HX1BLR19DT05GSUddKWRubAorQUNfQVJHX1ZBUihbJDFdW19DRkxBR1NdLCBbQyBjb21waWxlciBmbGFncyBmb3IgJDEsIG92ZXJyaWRpbmcgcGtnLWNvbmZpZ10pZG5sCitBQ19BUkdfVkFSKFskMV1bX0xJQlNdLCBbbGlua2VyIGZsYWdzIGZvciAkMSwgb3ZlcnJpZGluZyBwa2ctY29uZmlnXSlkbmwKKworcGtnX2ZhaWxlZD1ubworQUNfTVNHX0NIRUNLSU5HKFtmb3IgJDFdKQorCitfUEtHX0NPTkZJRyhbJDFdW19DRkxBR1NdLCBbY2ZsYWdzXSwgWyQyXSkKK19QS0dfQ09ORklHKFskMV1bX0xJQlNdLCBbbGlic10sIFskMl0pCisKK200X2RlZmluZShbX1BLR19URVhUXSwgW0FsdGVybmF0aXZlbHksIHlvdSBtYXkgc2V0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgJDFbXV9DRkxBR1MKK2FuZCAkMVtdX0xJQlMgdG8gYXZvaWQgdGhlIG5lZWQgdG8gY2FsbCBwa2ctY29uZmlnLgorU2VlIHRoZSBwa2ctY29uZmlnIG1hbiBwYWdlIGZvciBtb3JlIGRldGFpbHMuXSkKKworaWYgdGVzdCAkcGtnX2ZhaWxlZCA9IHllczsgdGhlbgorICAgCUFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgICAgX1BLR19TSE9SVF9FUlJPUlNfU1VQUE9SVEVECisgICAgICAgIGlmIHRlc3QgJF9wa2dfc2hvcnRfZXJyb3JzX3N1cHBvcnRlZCA9IHllczsgdGhlbgorCSAgICAgICAgJDFbXV9QS0dfRVJST1JTPWAkUEtHX0NPTkZJRyAtLXNob3J0LWVycm9ycyAtLXByaW50LWVycm9ycyAiJDIiIDI+JjFgCisgICAgICAgIGVsc2UgCisJICAgICAgICAkMVtdX1BLR19FUlJPUlM9YCRQS0dfQ09ORklHIC0tcHJpbnQtZXJyb3JzICIkMiIgMj4mMWAKKyAgICAgICAgZmkKKwkjIFB1dCB0aGUgbmFzdHkgZXJyb3IgbWVzc2FnZSBpbiBjb25maWcubG9nIHdoZXJlIGl0IGJlbG9uZ3MKKwllY2hvICIkJDFbXV9QS0dfRVJST1JTIiA+JkFTX01FU1NBR0VfTE9HX0ZECisKKwltNF9kZWZhdWx0KFskNF0sIFtBQ19NU0dfRVJST1IoCitbUGFja2FnZSByZXF1aXJlbWVudHMgKCQyKSB3ZXJlIG5vdCBtZXQ6CisKKyQkMV9QS0dfRVJST1JTCisKK0NvbnNpZGVyIGFkanVzdGluZyB0aGUgUEtHX0NPTkZJR19QQVRIIGVudmlyb25tZW50IHZhcmlhYmxlIGlmIHlvdQoraW5zdGFsbGVkIHNvZnR3YXJlIGluIGEgbm9uLXN0YW5kYXJkIHByZWZpeC4KKworX1BLR19URVhUXSlbXWRubAorICAgICAgICBdKQorZWxpZiB0ZXN0ICRwa2dfZmFpbGVkID0gdW50cmllZDsgdGhlbgorICAgICAJQUNfTVNHX1JFU1VMVChbbm9dKQorCW00X2RlZmF1bHQoWyQ0XSwgW0FDX01TR19GQUlMVVJFKAorW1RoZSBwa2ctY29uZmlnIHNjcmlwdCBjb3VsZCBub3QgYmUgZm91bmQgb3IgaXMgdG9vIG9sZC4gIE1ha2Ugc3VyZSBpdAoraXMgaW4geW91ciBQQVRIIG9yIHNldCB0aGUgUEtHX0NPTkZJRyBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byB0aGUgZnVsbAorcGF0aCB0byBwa2ctY29uZmlnLgorCitfUEtHX1RFWFQKKworVG8gZ2V0IHBrZy1jb25maWcsIHNlZSA8aHR0cDovL3BrZy1jb25maWcuZnJlZWRlc2t0b3Aub3JnLz4uXSlbXWRubAorICAgICAgICBdKQorZWxzZQorCSQxW11fQ0ZMQUdTPSRwa2dfY3ZfW10kMVtdX0NGTEFHUworCSQxW11fTElCUz0kcGtnX2N2X1tdJDFbXV9MSUJTCisgICAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisJJDMKK2ZpW11kbmwKK10pIyBQS0dfQ0hFQ0tfTU9EVUxFUworCisjIENvcHlyaWdodCAoQykgMjAwMiwgMjAwMywgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBBTV9BVVRPTUFLRV9WRVJTSU9OKFZFUlNJT04pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQXV0b21ha2UgWC5ZIHRyYWNlcyB0aGlzIG1hY3JvIHRvIGVuc3VyZSBhY2xvY2FsLm00IGhhcyBiZWVuCisjIGdlbmVyYXRlZCBmcm9tIHRoZSBtNCBmaWxlcyBhY2NvbXBhbnlpbmcgQXV0b21ha2UgWC5ZLgorIyAoVGhpcyBwcml2YXRlIG1hY3JvIHNob3VsZCBub3QgYmUgY2FsbGVkIG91dHNpZGUgdGhpcyBmaWxlLikKK0FDX0RFRlVOKFtBTV9BVVRPTUFLRV9WRVJTSU9OXSwKK1thbV9fYXBpX3ZlcnNpb249JzEuMTEnCitkbmwgU29tZSB1c2VycyBmaW5kIEFNX0FVVE9NQUtFX1ZFUlNJT04gYW5kIG1pc3Rha2UgaXQgZm9yIGEgd2F5IHRvCitkbmwgcmVxdWlyZSBzb21lIG1pbmltdW0gdmVyc2lvbi4gIFBvaW50IHRoZW0gdG8gdGhlIHJpZ2h0IG1hY3JvLgorbTRfaWYoWyQxXSwgWzEuMTEuMV0sIFtdLAorICAgICAgW0FDX0ZBVEFMKFtEbyBub3QgY2FsbCAkMCwgdXNlIEFNX0lOSVRfQVVUT01BS0UoWyQxXSkuXSldKWRubAorXSkKKworIyBfQU1fQVVUT0NPTkZfVkVSU0lPTihWRVJTSU9OKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBhY2xvY2FsIHRyYWNlcyB0aGlzIG1hY3JvIHRvIGZpbmQgdGhlIEF1dG9jb25mIHZlcnNpb24uCisjIFRoaXMgaXMgYSBwcml2YXRlIG1hY3JvIHRvby4gIFVzaW5nIG00X2RlZmluZSBzaW1wbGlmaWVzCisjIHRoZSBsb2dpYyBpbiBhY2xvY2FsLCB3aGljaCBjYW4gc2ltcGx5IGlnbm9yZSB0aGlzIGRlZmluaXRpb24uCittNF9kZWZpbmUoW19BTV9BVVRPQ09ORl9WRVJTSU9OXSwgW10pCisKKyMgQU1fU0VUX0NVUlJFTlRfQVVUT01BS0VfVkVSU0lPTgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENhbGwgQU1fQVVUT01BS0VfVkVSU0lPTiBhbmQgQU1fQVVUT01BS0VfVkVSU0lPTiBzbyB0aGV5IGNhbiBiZSB0cmFjZWQuCisjIFRoaXMgZnVuY3Rpb24gaXMgQUNfUkVRVUlSRWQgYnkgQU1fSU5JVF9BVVRPTUFLRS4KK0FDX0RFRlVOKFtBTV9TRVRfQ1VSUkVOVF9BVVRPTUFLRV9WRVJTSU9OXSwKK1tBTV9BVVRPTUFLRV9WRVJTSU9OKFsxLjExLjFdKWRubAorbTRfaWZuZGVmKFtBQ19BVVRPQ09ORl9WRVJTSU9OXSwKKyAgW200X2NvcHkoW200X1BBQ0tBR0VfVkVSU0lPTl0sIFtBQ19BVVRPQ09ORl9WRVJTSU9OXSldKWRubAorX0FNX0FVVE9DT05GX1ZFUlNJT04obTRfZGVmbihbQUNfQVVUT0NPTkZfVkVSU0lPTl0pKV0pCisKKyMgQU1fQVVYX0RJUl9FWFBBTkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0qLSBBdXRvY29uZiAtKi0KKworIyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDMsIDIwMDUgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgRm9yIHByb2plY3RzIHVzaW5nIEFDX0NPTkZJR19BVVhfRElSKFtmb29dKSwgQXV0b2NvbmYgc2V0cworIyAkYWNfYXV4X2RpciB0byBgJHNyY2Rpci9mb28nLiAgSW4gb3RoZXIgcHJvamVjdHMsIGl0IGlzIHNldCB0bworIyBgJHNyY2RpcicsIGAkc3JjZGlyLy4uJywgb3IgYCRzcmNkaXIvLi4vLi4nLgorIworIyBPZiBjb3Vyc2UsIEF1dG9tYWtlIG11c3QgaG9ub3IgdGhpcyB2YXJpYWJsZSB3aGVuZXZlciBpdCBjYWxscyBhCisjIHRvb2wgZnJvbSB0aGUgYXV4aWxpYXJ5IGRpcmVjdG9yeS4gIFRoZSBwcm9ibGVtIGlzIHRoYXQgJHNyY2RpciAoYW5kCisjIHRoZXJlZm9yZSAkYWNfYXV4X2RpciBhcyB3ZWxsKSBjYW4gYmUgZWl0aGVyIGFic29sdXRlIG9yIHJlbGF0aXZlLAorIyBkZXBlbmRpbmcgb24gaG93IGNvbmZpZ3VyZSBpcyBydW4uICBUaGlzIGlzIHByZXR0eSBhbm5veWluZywgc2luY2UKKyMgaXQgbWFrZXMgJGFjX2F1eF9kaXIgcXVpdGUgdW51c2FibGUgaW4gc3ViZGlyZWN0b3JpZXM6IGluIHRoZSB0b3AKKyMgc291cmNlIGRpcmVjdG9yeSwgYW55IGZvcm0gd2lsbCB3b3JrIGZpbmUsIGJ1dCBpbiBzdWJkaXJlY3RvcmllcyBhCisjIHJlbGF0aXZlIHBhdGggbmVlZHMgdG8gYmUgYWRqdXN0ZWQgZmlyc3QuCisjCisjICRhY19hdXhfZGlyL21pc3NpbmcKKyMgICAgZmFpbHMgd2hlbiBjYWxsZWQgZnJvbSBhIHN1YmRpcmVjdG9yeSBpZiAkYWNfYXV4X2RpciBpcyByZWxhdGl2ZQorIyAkdG9wX3NyY2Rpci8kYWNfYXV4X2Rpci9taXNzaW5nCisjICAgIGZhaWxzIGlmICRhY19hdXhfZGlyIGlzIGFic29sdXRlLAorIyAgICBmYWlscyB3aGVuIGNhbGxlZCBmcm9tIGEgc3ViZGlyZWN0b3J5IGluIGEgVlBBVEggYnVpbGQgd2l0aAorIyAgICAgICAgICBhIHJlbGF0aXZlICRhY19hdXhfZGlyCisjCisjIFRoZSByZWFzb24gb2YgdGhlIGxhdHRlciBmYWlsdXJlIGlzIHRoYXQgJHRvcF9zcmNkaXIgYW5kICRhY19hdXhfZGlyCisjIGFyZSBib3RoIHByZWZpeGVkIGJ5ICRzcmNkaXIuICBJbiBhbiBpbi1zb3VyY2UgYnVpbGQgdGhpcyBpcyB1c3VhbGx5CisjIGhhcm1sZXNzIGJlY2F1c2UgJHNyY2RpciBpcyBgLicsIGJ1dCB0aGluZ3Mgd2lsbCBicm9rZSB3aGVuIHlvdQorIyBzdGFydCBhIFZQQVRIIGJ1aWxkIG9yIHVzZSBhbiBhYnNvbHV0ZSAkc3JjZGlyLgorIworIyBTbyB3ZSBjb3VsZCB1c2Ugc29tZXRoaW5nIHNpbWlsYXIgdG8gJHRvcF9zcmNkaXIvJGFjX2F1eF9kaXIvbWlzc2luZywKKyMgaWZmIHdlIHN0cmlwIHRoZSBsZWFkaW5nICRzcmNkaXIgZnJvbSAkYWNfYXV4X2Rpci4gIFRoYXQgd291bGQgYmU6CisjICAgYW1fYXV4X2Rpcj0nXCQodG9wX3NyY2RpcikvJ2BleHByICIkYWNfYXV4X2RpciIgOiAiJHNyY2Rpci8vKlwoLipcKSJgCisjIGFuZCB0aGVuIHdlIHdvdWxkIGRlZmluZSAkTUlTU0lORyBhcworIyAgIE1JU1NJTkc9Ilwke1NIRUxMfSAkYW1fYXV4X2Rpci9taXNzaW5nIgorIyBUaGlzIHdpbGwgd29yayBhcyBsb25nIGFzIE1JU1NJTkcgaXMgbm90IGNhbGxlZCBmcm9tIGNvbmZpZ3VyZSwgYmVjYXVzZQorIyB1bmZvcnR1bmF0ZWx5ICQodG9wX3NyY2RpcikgaGFzIG5vIG1lYW5pbmcgaW4gY29uZmlndXJlLgorIyBIb3dldmVyIHRoZXJlIGFyZSBvdGhlciB2YXJpYWJsZXMsIGxpa2UgQ0MsIHdoaWNoIGFyZSBvZnRlbiB1c2VkIGluCisjIGNvbmZpZ3VyZSwgYW5kIGNvdWxkIHRoZXJlZm9yZSBub3QgdXNlIHRoaXMgImZpeGVkIiAkYWNfYXV4X2Rpci4KKyMKKyMgQW5vdGhlciBzb2x1dGlvbiwgdXNlZCBoZXJlLCBpcyB0byBhbHdheXMgZXhwYW5kICRhY19hdXhfZGlyIHRvIGFuCisjIGFic29sdXRlIFBBVEguICBUaGUgZHJhd2JhY2sgaXMgdGhhdCB1c2luZyBhYnNvbHV0ZSBwYXRocyBwcmV2ZW50IGEKKyMgY29uZmlndXJlZCB0cmVlIHRvIGJlIG1vdmVkIHdpdGhvdXQgcmVjb25maWd1cmF0aW9uLgorCitBQ19ERUZVTihbQU1fQVVYX0RJUl9FWFBBTkRdLAorW2RubCBSZWx5IG9uIGF1dG9jb25mIHRvIHNldCB1cCBDRFBBVEggcHJvcGVybHkuCitBQ19QUkVSRVEoWzIuNTBdKWRubAorIyBleHBhbmQgJGFjX2F1eF9kaXIgdG8gYW4gYWJzb2x1dGUgcGF0aAorYW1fYXV4X2Rpcj1gY2QgJGFjX2F1eF9kaXIgJiYgcHdkYAorXSkKKworIyBBTV9DT05ESVRJT05BTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSotIEF1dG9jb25mIC0qLQorCisjIENvcHlyaWdodCAoQykgMTk5NywgMjAwMCwgMjAwMSwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwOAorIyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIHNlcmlhbCA5CisKKyMgQU1fQ09ORElUSU9OQUwoTkFNRSwgU0hFTEwtQ09ORElUSU9OKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIERlZmluZSBhIGNvbmRpdGlvbmFsLgorQUNfREVGVU4oW0FNX0NPTkRJVElPTkFMXSwKK1tBQ19QUkVSRVEoMi41MilkbmwKKyBpZmVsc2UoWyQxXSwgW1RSVUVdLCAgW0FDX0ZBVEFMKFskMDogaW52YWxpZCBjb25kaXRpb246ICQxXSldLAorCVskMV0sIFtGQUxTRV0sIFtBQ19GQVRBTChbJDA6IGludmFsaWQgY29uZGl0aW9uOiAkMV0pXSlkbmwKK0FDX1NVQlNUKFskMV9UUlVFXSlkbmwKK0FDX1NVQlNUKFskMV9GQUxTRV0pZG5sCitfQU1fU1VCU1RfTk9UTUFLRShbJDFfVFJVRV0pZG5sCitfQU1fU1VCU1RfTk9UTUFLRShbJDFfRkFMU0VdKWRubAorbTRfZGVmaW5lKFtfQU1fQ09ORF9WQUxVRV8kMV0sIFskMl0pZG5sCitpZiAkMjsgdGhlbgorICAkMV9UUlVFPQorICAkMV9GQUxTRT0nIycKK2Vsc2UKKyAgJDFfVFJVRT0nIycKKyAgJDFfRkFMU0U9CitmaQorQUNfQ09ORklHX0NPTU1BTkRTX1BSRSgKK1tpZiB0ZXN0IC16ICIkeyQxX1RSVUV9IiAmJiB0ZXN0IC16ICIkeyQxX0ZBTFNFfSI7IHRoZW4KKyAgQUNfTVNHX0VSUk9SKFtbY29uZGl0aW9uYWwgIiQxIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5Ll1dKQorZmldKV0pCisKKyMgQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA5CisjIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgc2VyaWFsIDEwCisKKyMgVGhlcmUgYXJlIGEgZmV3IGRpcnR5IGhhY2tzIGJlbG93IHRvIGF2b2lkIGxldHRpbmcgYEFDX1BST0dfQ0MnIGJlCisjIHdyaXR0ZW4gaW4gY2xlYXIsIGluIHdoaWNoIGNhc2UgYXV0b21ha2UsIHdoZW4gcmVhZGluZyBhY2xvY2FsLm00LAorIyB3aWxsIHRoaW5rIGl0IHNlZXMgYSAqdXNlKiwgYW5kIHRoZXJlZm9yZSB3aWxsIHRyaWdnZXIgYWxsIGl0J3MKKyMgQyBzdXBwb3J0IG1hY2hpbmVyeS4gIEFsc28gbm90ZSB0aGF0IGl0IG1lYW5zIHRoYXQgYXV0b3NjYW4sIHNlZWluZworIyBDQyBldGMuIGluIHRoZSBNYWtlZmlsZSwgd2lsbCBhc2sgZm9yIGFuIEFDX1BST0dfQ0MgdXNlLi4uCisKKworIyBfQU1fREVQRU5ERU5DSUVTKE5BTUUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgU2VlIGhvdyB0aGUgY29tcGlsZXIgaW1wbGVtZW50cyBkZXBlbmRlbmN5IGNoZWNraW5nLgorIyBOQU1FIGlzICJDQyIsICJDWFgiLCAiR0NKIiwgb3IgIk9CSkMiLgorIyBXZSB0cnkgYSBmZXcgdGVjaG5pcXVlcyBhbmQgdXNlIHRoYXQgdG8gc2V0IGEgc2luZ2xlIGNhY2hlIHZhcmlhYmxlLgorIworIyBXZSBkb24ndCBBQ19SRVFVSVJFIHRoZSBjb3JyZXNwb25kaW5nIEFDX1BST0dfQ0Mgc2luY2UgdGhlIGxhdHRlciB3YXMKKyMgbW9kaWZpZWQgdG8gaW52b2tlIF9BTV9ERVBFTkRFTkNJRVMoQ0MpOyB3ZSB3b3VsZCBoYXZlIGEgY2lyY3VsYXIKKyMgZGVwZW5kZW5jeSwgYW5kIGdpdmVuIHRoYXQgdGhlIHVzZXIgaXMgbm90IGV4cGVjdGVkIHRvIHJ1biB0aGlzIG1hY3JvLAorIyBqdXN0IHJlbHkgb24gQUNfUFJPR19DQy4KK0FDX0RFRlVOKFtfQU1fREVQRU5ERU5DSUVTXSwKK1tBQ19SRVFVSVJFKFtBTV9TRVRfREVQRElSXSlkbmwKK0FDX1JFUVVJUkUoW0FNX09VVFBVVF9ERVBFTkRFTkNZX0NPTU1BTkRTXSlkbmwKK0FDX1JFUVVJUkUoW0FNX01BS0VfSU5DTFVERV0pZG5sCitBQ19SRVFVSVJFKFtBTV9ERVBfVFJBQ0tdKWRubAorCitpZmVsc2UoWyQxXSwgQ0MsICAgW2RlcGNjPSIkQ0MiICAgYW1fY29tcGlsZXJfbGlzdD1dLAorICAgICAgIFskMV0sIENYWCwgIFtkZXBjYz0iJENYWCIgIGFtX2NvbXBpbGVyX2xpc3Q9XSwKKyAgICAgICBbJDFdLCBPQkpDLCBbZGVwY2M9IiRPQkpDIiBhbV9jb21waWxlcl9saXN0PSdnY2MzIGdjYyddLAorICAgICAgIFskMV0sIFVQQywgIFtkZXBjYz0iJFVQQyIgIGFtX2NvbXBpbGVyX2xpc3Q9XSwKKyAgICAgICBbJDFdLCBHQ0osICBbZGVwY2M9IiRHQ0oiICBhbV9jb21waWxlcl9saXN0PSdnY2MzIGdjYyddLAorICAgICAgICAgICAgICAgICAgIFtkZXBjYz0iJCQxIiAgIGFtX2NvbXBpbGVyX2xpc3Q9XSkKKworQUNfQ0FDSEVfQ0hFQ0soW2RlcGVuZGVuY3kgc3R5bGUgb2YgJGRlcGNjXSwKKyAgICAgICAgICAgICAgIFthbV9jdl8kMV9kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZV0sCitbaWYgdGVzdCAteiAiJEFNREVQX1RSVUUiICYmIHRlc3QgLWYgIiRhbV9kZXBjb21wIjsgdGhlbgorICAjIFdlIG1ha2UgYSBzdWJkaXIgYW5kIGRvIHRoZSB0ZXN0cyB0aGVyZS4gIE90aGVyd2lzZSB3ZSBjYW4gZW5kIHVwCisgICMgbWFraW5nIGJvZ3VzIGZpbGVzIHRoYXQgd2UgZG9uJ3Qga25vdyBhYm91dCBhbmQgbmV2ZXIgcmVtb3ZlLiAgRm9yCisgICMgaW5zdGFuY2UgaXQgd2FzIHJlcG9ydGVkIHRoYXQgb24gSFAtVVggdGhlIGdjYyB0ZXN0IHdpbGwgZW5kIHVwCisgICMgbWFraW5nIGEgZHVtbXkgZmlsZSBuYW1lZCBgRCcgLS0gYmVjYXVzZSBgLU1EJyBtZWFucyBgcHV0IHRoZSBvdXRwdXQKKyAgIyBpbiBEJy4KKyAgbWtkaXIgY29uZnRlc3QuZGlyCisgICMgQ29weSBkZXBjb21wIHRvIHN1YmRpciBiZWNhdXNlIG90aGVyd2lzZSB3ZSB3b24ndCBmaW5kIGl0IGlmIHdlJ3JlCisgICMgdXNpbmcgYSByZWxhdGl2ZSBkaXJlY3RvcnkuCisgIGNwICIkYW1fZGVwY29tcCIgY29uZnRlc3QuZGlyCisgIGNkIGNvbmZ0ZXN0LmRpcgorICAjIFdlIHdpbGwgYnVpbGQgb2JqZWN0cyBhbmQgZGVwZW5kZW5jaWVzIGluIGEgc3ViZGlyZWN0b3J5IGJlY2F1c2UKKyAgIyBpdCBoZWxwcyB0byBkZXRlY3QgaW5hcHBsaWNhYmxlIGRlcGVuZGVuY3kgbW9kZXMuICBGb3IgaW5zdGFuY2UKKyAgIyBib3RoIFRydTY0J3MgY2MgYW5kIElDQyBzdXBwb3J0IC1NRCB0byBvdXRwdXQgZGVwZW5kZW5jaWVzIGFzIGEKKyAgIyBzaWRlIGVmZmVjdCBvZiBjb21waWxhdGlvbiwgYnV0IElDQyB3aWxsIHB1dCB0aGUgZGVwZW5kZW5jaWVzIGluCisgICMgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IHdoaWxlIFRydTY0IHdpbGwgcHV0IHRoZW0gaW4gdGhlIG9iamVjdAorICAjIGRpcmVjdG9yeS4KKyAgbWtkaXIgc3ViCisKKyAgYW1fY3ZfJDFfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGU9bm9uZQorICBpZiB0ZXN0ICIkYW1fY29tcGlsZXJfbGlzdCIgPSAiIjsgdGhlbgorICAgICBhbV9jb21waWxlcl9saXN0PWBzZWQgLW4gWydzL14jKlwoW2EtekEtWjAtOV0qXCkpJC9cMS9wJ10gPCAuL2RlcGNvbXBgCisgIGZpCisgIGFtX191bml2ZXJzYWw9ZmFsc2UKKyAgbTRfY2FzZShbJDFdLCBbQ0NdLAorICAgIFtjYXNlICIgJGRlcGNjICIgaW4gIygKKyAgICAgKlwgLWFyY2hcICpcIC1hcmNoXCAqKSBhbV9fdW5pdmVyc2FsPXRydWUgOzsKKyAgICAgZXNhY10sCisgICAgW0NYWF0sCisgICAgW2Nhc2UgIiAkZGVwY2MgIiBpbiAjKAorICAgICAqXCAtYXJjaFwgKlwgLWFyY2hcICopIGFtX191bml2ZXJzYWw9dHJ1ZSA7OworICAgICBlc2FjXSkKKworICBmb3IgZGVwbW9kZSBpbiAkYW1fY29tcGlsZXJfbGlzdDsgZG8KKyAgICAjIFNldHVwIGEgc291cmNlIHdpdGggbWFueSBkZXBlbmRlbmNpZXMsIGJlY2F1c2Ugc29tZSBjb21waWxlcnMKKyAgICAjIGxpa2UgdG8gd3JhcCBsYXJnZSBkZXBlbmRlbmN5IGxpc3RzIG9uIGNvbHVtbiA4MCAod2l0aCBcKSwgYW5kCisgICAgIyB3ZSBzaG91bGQgbm90IGNob29zZSBhIGRlcGNvbXAgbW9kZSB3aGljaCBpcyBjb25mdXNlZCBieSB0aGlzLgorICAgICMKKyAgICAjIFdlIG5lZWQgdG8gcmVjcmVhdGUgdGhlc2UgZmlsZXMgZm9yIGVhY2ggdGVzdCwgYXMgdGhlIGNvbXBpbGVyIG1heQorICAgICMgb3ZlcndyaXRlIHNvbWUgb2YgdGhlbSB3aGVuIHRlc3Rpbmcgd2l0aCBvYnNjdXJlIGNvbW1hbmQgbGluZXMuCisgICAgIyBUaGlzIGhhcHBlbnMgYXQgbGVhc3Qgd2l0aCB0aGUgQUlYIEMgY29tcGlsZXIuCisgICAgOiA+IHN1Yi9jb25mdGVzdC5jCisgICAgZm9yIGkgaW4gMSAyIDMgNCA1IDY7IGRvCisgICAgICBlY2hvICcjaW5jbHVkZSAiY29uZnRzdCckaScuaCInID4+IHN1Yi9jb25mdGVzdC5jCisgICAgICAjIFVzaW5nIGA6ID4gc3ViL2NvbmZ0c3QkaS5oJyBjcmVhdGVzIG9ubHkgc3ViL2NvbmZ0c3QxLmggd2l0aAorICAgICAgIyBTb2xhcmlzIDgncyB7L3Vzcix9L2Jpbi9zaC4KKyAgICAgIHRvdWNoIHN1Yi9jb25mdHN0JGkuaAorICAgIGRvbmUKKyAgICBlY2hvICIke2FtX19pbmNsdWRlfSAke2FtX19xdW90ZX1zdWIvY29uZnRlc3QuUG8ke2FtX19xdW90ZX0iID4gY29uZm1mCisKKyAgICAjIFdlIGNoZWNrIHdpdGggYC1jJyBhbmQgYC1vJyBmb3IgdGhlIHNha2Ugb2YgdGhlICJkYXNobXN0ZG91dCIKKyAgICAjIG1vZGUuICBJdCB0dXJucyBvdXQgdGhhdCB0aGUgU3VuUHJvIEMrKyBjb21waWxlciBkb2VzIG5vdCBwcm9wZXJseQorICAgICMgaGFuZGxlIGAtTSAtbycsIGFuZCB3ZSBuZWVkIHRvIGRldGVjdCB0aGlzLiAgQWxzbywgc29tZSBJbnRlbAorICAgICMgdmVyc2lvbnMgaGFkIHRyb3VibGUgd2l0aCBvdXRwdXQgaW4gc3ViZGlycworICAgIGFtX19vYmo9c3ViL2NvbmZ0ZXN0LiR7T0JKRVhULW99CisgICAgYW1fX21pbnVzX29iaj0iLW8gJGFtX19vYmoiCisgICAgY2FzZSAkZGVwbW9kZSBpbgorICAgIGdjYykKKyAgICAgICMgVGhpcyBkZXBtb2RlIGNhdXNlcyBhIGNvbXBpbGVyIHJhY2UgaW4gdW5pdmVyc2FsIG1vZGUuCisgICAgICB0ZXN0ICIkYW1fX3VuaXZlcnNhbCIgPSBmYWxzZSB8fCBjb250aW51ZQorICAgICAgOzsKKyAgICBub3NpZGVlZmZlY3QpCisgICAgICAjIGFmdGVyIHRoaXMgdGFnLCBtZWNoYW5pc21zIGFyZSBub3QgYnkgc2lkZS1lZmZlY3QsIHNvIHRoZXknbGwKKyAgICAgICMgb25seSBiZSB1c2VkIHdoZW4gZXhwbGljaXRseSByZXF1ZXN0ZWQKKyAgICAgIGlmIHRlc3QgIngkZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmciID0geHllczsgdGhlbgorCWNvbnRpbnVlCisgICAgICBlbHNlCisJYnJlYWsKKyAgICAgIGZpCisgICAgICA7OworICAgIG1zdmlzdWFsY3BwIHwgbXN2Y21zeXMpCisgICAgICAjIFRoaXMgY29tcGlsZXIgd29uJ3QgZ3JvayBgLWMgLW8nLCBidXQgYWxzbywgdGhlIG1pbnVzbyB0ZXN0IGhhcworICAgICAgIyBub3QgcnVuIHlldC4gIFRoZXNlIGRlcG1vZGVzIGFyZSBsYXRlIGVub3VnaCBpbiB0aGUgZ2FtZSwgYW5kCisgICAgICAjIHNvIHdlYWsgdGhhdCB0aGVpciBmdW5jdGlvbmluZyBzaG91bGQgbm90IGJlIGltcGFjdGVkLgorICAgICAgYW1fX29iaj1jb25mdGVzdC4ke09CSkVYVC1vfQorICAgICAgYW1fX21pbnVzX29iaj0KKyAgICAgIDs7CisgICAgbm9uZSkgYnJlYWsgOzsKKyAgICBlc2FjCisgICAgaWYgZGVwbW9kZT0kZGVwbW9kZSBcCisgICAgICAgc291cmNlPXN1Yi9jb25mdGVzdC5jIG9iamVjdD0kYW1fX29iaiBcCisgICAgICAgZGVwZmlsZT1zdWIvY29uZnRlc3QuUG8gdG1wZGVwZmlsZT1zdWIvY29uZnRlc3QuVFBvIFwKKyAgICAgICAkU0hFTEwgLi9kZXBjb21wICRkZXBjYyAtYyAkYW1fX21pbnVzX29iaiBzdWIvY29uZnRlc3QuYyBcCisgICAgICAgICA+L2Rldi9udWxsIDI+Y29uZnRlc3QuZXJyICYmCisgICAgICAgZ3JlcCBzdWIvY29uZnRzdDEuaCBzdWIvY29uZnRlc3QuUG8gPiAvZGV2L251bGwgMj4mMSAmJgorICAgICAgIGdyZXAgc3ViL2NvbmZ0c3Q2Lmggc3ViL2NvbmZ0ZXN0LlBvID4gL2Rldi9udWxsIDI+JjEgJiYKKyAgICAgICBncmVwICRhbV9fb2JqIHN1Yi9jb25mdGVzdC5QbyA+IC9kZXYvbnVsbCAyPiYxICYmCisgICAgICAgJHtNQUtFLW1ha2V9IC1zIC1mIGNvbmZtZiA+IC9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgICAjIGljYyBkb2Vzbid0IGNob2tlIG9uIHVua25vd24gb3B0aW9ucywgaXQgd2lsbCBqdXN0IGlzc3VlIHdhcm5pbmdzCisgICAgICAjIG9yIHJlbWFya3MgKGV2ZW4gd2l0aCAtV2Vycm9yKS4gIFNvIHdlIGdyZXAgc3RkZXJyIGZvciBhbnkgbWVzc2FnZQorICAgICAgIyB0aGF0IHNheXMgYW4gb3B0aW9uIHdhcyBpZ25vcmVkIG9yIG5vdCBzdXBwb3J0ZWQuCisgICAgICAjIFdoZW4gZ2l2ZW4gLU1QLCBpY2MgNy4wIGFuZCA3LjEgY29tcGxhaW4gdGh1c2x5OgorICAgICAgIyAgIGljYzogQ29tbWFuZCBsaW5lIHdhcm5pbmc6IGlnbm9yaW5nIG9wdGlvbiAnLU0nOyBubyBhcmd1bWVudCByZXF1aXJlZAorICAgICAgIyBUaGUgZGlhZ25vc2lzIGNoYW5nZWQgaW4gaWNjIDguMDoKKyAgICAgICMgICBpY2M6IENvbW1hbmQgbGluZSByZW1hcms6IG9wdGlvbiAnLU1QJyBub3Qgc3VwcG9ydGVkCisgICAgICBpZiAoZ3JlcCAnaWdub3Jpbmcgb3B0aW9uJyBjb25mdGVzdC5lcnIgfHwKKyAgICAgICAgICBncmVwICdub3Qgc3VwcG9ydGVkJyBjb25mdGVzdC5lcnIpID4vZGV2L251bGwgMj4mMTsgdGhlbiA6OyBlbHNlCisgICAgICAgIGFtX2N2XyQxX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlPSRkZXBtb2RlCisgICAgICAgIGJyZWFrCisgICAgICBmaQorICAgIGZpCisgIGRvbmUKKworICBjZCAuLgorICBybSAtcmYgY29uZnRlc3QuZGlyCitlbHNlCisgIGFtX2N2XyQxX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlPW5vbmUKK2ZpCitdKQorQUNfU1VCU1QoWyQxREVQTU9ERV0sIFtkZXBtb2RlPSRhbV9jdl8kMV9kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZV0pCitBTV9DT05ESVRJT05BTChbYW1fX2Zhc3RkZXAkMV0sIFsKKyAgdGVzdCAieCRlbmFibGVfZGVwZW5kZW5jeV90cmFja2luZyIgIT0geG5vIFwKKyAgJiYgdGVzdCAiJGFtX2N2XyQxX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlIiA9IGdjYzNdKQorXSkKKworCisjIEFNX1NFVF9ERVBESVIKKyMgLS0tLS0tLS0tLS0tLQorIyBDaG9vc2UgYSBkaXJlY3RvcnkgbmFtZSBmb3IgZGVwZW5kZW5jeSBmaWxlcy4KKyMgVGhpcyBtYWNybyBpcyBBQ19SRVFVSVJFZCBpbiBfQU1fREVQRU5ERU5DSUVTCitBQ19ERUZVTihbQU1fU0VUX0RFUERJUl0sCitbQUNfUkVRVUlSRShbQU1fU0VUX0xFQURJTkdfRE9UXSlkbmwKK0FDX1NVQlNUKFtERVBESVJdLCBbIiR7YW1fX2xlYWRpbmdfZG90fWRlcHMiXSlkbmwKK10pCisKKworIyBBTV9ERVBfVFJBQ0sKKyMgLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbQU1fREVQX1RSQUNLXSwKK1tBQ19BUkdfRU5BQkxFKGRlcGVuZGVuY3ktdHJhY2tpbmcsCitbICAtLWRpc2FibGUtZGVwZW5kZW5jeS10cmFja2luZyAgc3BlZWRzIHVwIG9uZS10aW1lIGJ1aWxkCisgIC0tZW5hYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmcgICBkbyBub3QgcmVqZWN0IHNsb3cgZGVwZW5kZW5jeSBleHRyYWN0b3JzXSkKK2lmIHRlc3QgIngkZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmciICE9IHhubzsgdGhlbgorICBhbV9kZXBjb21wPSIkYWNfYXV4X2Rpci9kZXBjb21wIgorICBBTURFUEJBQ0tTTEFTSD0nXCcKK2ZpCitBTV9DT05ESVRJT05BTChbQU1ERVBdLCBbdGVzdCAieCRlbmFibGVfZGVwZW5kZW5jeV90cmFja2luZyIgIT0geG5vXSkKK0FDX1NVQlNUKFtBTURFUEJBQ0tTTEFTSF0pZG5sCitfQU1fU1VCU1RfTk9UTUFLRShbQU1ERVBCQUNLU0xBU0hdKWRubAorXSkKKworIyBHZW5lcmF0ZSBjb2RlIHRvIHNldCB1cCBkZXBlbmRlbmN5IHRyYWNraW5nLiAgICAgICAgICAgICAgLSotIEF1dG9jb25mIC0qLQorCisjIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwOAorIyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjc2VyaWFsIDUKKworIyBfQU1fT1VUUFVUX0RFUEVOREVOQ1lfQ09NTUFORFMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbX0FNX09VVFBVVF9ERVBFTkRFTkNZX0NPTU1BTkRTXSwKK1t7CisgICMgQXV0b2NvbmYgMi42MiBxdW90ZXMgLS1maWxlIGFyZ3VtZW50cyBmb3IgZXZhbCwgYnV0IG5vdCB3aGVuIGZpbGVzCisgICMgYXJlIGxpc3RlZCB3aXRob3V0IC0tZmlsZS4gIExldCdzIHBsYXkgc2FmZSBhbmQgb25seSBlbmFibGUgdGhlIGV2YWwKKyAgIyBpZiB3ZSBkZXRlY3QgdGhlIHF1b3RpbmcuCisgIGNhc2UgJENPTkZJR19GSUxFUyBpbgorICAqXCcqKSBldmFsIHNldCB4ICIkQ09ORklHX0ZJTEVTIiA7OworICAqKSAgIHNldCB4ICRDT05GSUdfRklMRVMgOzsKKyAgZXNhYworICBzaGlmdAorICBmb3IgbWYKKyAgZG8KKyAgICAjIFN0cmlwIE1GIHNvIHdlIGVuZCB1cCB3aXRoIHRoZSBuYW1lIG9mIHRoZSBmaWxlLgorICAgIG1mPWBlY2hvICIkbWYiIHwgc2VkIC1lICdzLzouKiQvLydgCisgICAgIyBDaGVjayB3aGV0aGVyIHRoaXMgaXMgYW4gQXV0b21ha2UgZ2VuZXJhdGVkIE1ha2VmaWxlIG9yIG5vdC4KKyAgICAjIFdlIHVzZWQgdG8gbWF0Y2ggb25seSB0aGUgZmlsZXMgbmFtZWQgYE1ha2VmaWxlLmluJywgYnV0CisgICAgIyBzb21lIHBlb3BsZSByZW5hbWUgdGhlbTsgc28gaW5zdGVhZCB3ZSBsb29rIGF0IHRoZSBmaWxlIGNvbnRlbnQuCisgICAgIyBHcmVwJ2luZyB0aGUgZmlyc3QgbGluZSBpcyBub3QgZW5vdWdoOiBzb21lIHBlb3BsZSBwb3N0LXByb2Nlc3MKKyAgICAjIGVhY2ggTWFrZWZpbGUuaW4gYW5kIGFkZCBhIG5ldyBsaW5lIG9uIHRvcCBvZiBlYWNoIGZpbGUgdG8gc2F5IHNvLgorICAgICMgR3JlcCdpbmcgdGhlIHdob2xlIGZpbGUgaXMgbm90IGdvb2QgZWl0aGVyOiBBSVggZ3JlcCBoYXMgYSBsaW5lCisgICAgIyBsaW1pdCBvZiAyMDQ4LCBidXQgYWxsIHNlZCdzIHdlIGtub3cgaGF2ZSB1bmRlcnN0YW5kIGF0IGxlYXN0IDQwMDAuCisgICAgaWYgc2VkIC1uICdzLF4jLipnZW5lcmF0ZWQgYnkgYXV0b21ha2UuKixYLHAnICIkbWYiIHwgZ3JlcCBYID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgICAgZGlycGFydD1gQVNfRElSTkFNRSgiJG1mIilgCisgICAgZWxzZQorICAgICAgY29udGludWUKKyAgICBmaQorICAgICMgRXh0cmFjdCB0aGUgZGVmaW5pdGlvbiBvZiBERVBESVIsIGFtX19pbmNsdWRlLCBhbmQgYW1fX3F1b3RlCisgICAgIyBmcm9tIHRoZSBNYWtlZmlsZSB3aXRob3V0IHJ1bm5pbmcgYG1ha2UnLgorICAgIERFUERJUj1gc2VkIC1uICdzL15ERVBESVIgPSAvL3AnIDwgIiRtZiJgCisgICAgdGVzdCAteiAiJERFUERJUiIgJiYgY29udGludWUKKyAgICBhbV9faW5jbHVkZT1gc2VkIC1uICdzL15hbV9faW5jbHVkZSA9IC8vcCcgPCAiJG1mImAKKyAgICB0ZXN0IC16ICJhbV9faW5jbHVkZSIgJiYgY29udGludWUKKyAgICBhbV9fcXVvdGU9YHNlZCAtbiAncy9eYW1fX3F1b3RlID0gLy9wJyA8ICIkbWYiYAorICAgICMgV2hlbiB1c2luZyBhbnNpMmtuciwgVSBtYXkgYmUgZW1wdHkgb3IgYW4gdW5kZXJzY29yZTsgZXhwYW5kIGl0CisgICAgVT1gc2VkIC1uICdzL15VID0gLy9wJyA8ICIkbWYiYAorICAgICMgRmluZCBhbGwgZGVwZW5kZW5jeSBvdXRwdXQgZmlsZXMsIHRoZXkgYXJlIGluY2x1ZGVkIGZpbGVzIHdpdGgKKyAgICAjICQoREVQRElSKSBpbiB0aGVpciBuYW1lcy4gIFdlIGludm9rZSBzZWQgdHdpY2UgYmVjYXVzZSBpdCBpcyB0aGUKKyAgICAjIHNpbXBsZXN0IGFwcHJvYWNoIHRvIGNoYW5naW5nICQoREVQRElSKSB0byBpdHMgYWN0dWFsIHZhbHVlIGluIHRoZQorICAgICMgZXhwYW5zaW9uLgorICAgIGZvciBmaWxlIGluIGBzZWQgLW4gIgorICAgICAgcy9eJGFtX19pbmNsdWRlICRhbV9fcXVvdGVcKC4qKERFUERJUikuKlwpJGFtX19xdW90ZSInJC9cMS9wJyA8IiRtZiIgfCBcCisJIHNlZCAtZSAncy9cJChERVBESVIpLyciJERFUERJUiInL2cnIC1lICdzL1wkVS8nIiRVIicvZydgOyBkbworICAgICAgIyBNYWtlIHN1cmUgdGhlIGRpcmVjdG9yeSBleGlzdHMuCisgICAgICB0ZXN0IC1mICIkZGlycGFydC8kZmlsZSIgJiYgY29udGludWUKKyAgICAgIGZkaXI9YEFTX0RJUk5BTUUoWyIkZmlsZSJdKWAKKyAgICAgIEFTX01LRElSX1AoWyRkaXJwYXJ0LyRmZGlyXSkKKyAgICAgICMgZWNobyAiY3JlYXRpbmcgJGRpcnBhcnQvJGZpbGUiCisgICAgICBlY2hvICcjIGR1bW15JyA+ICIkZGlycGFydC8kZmlsZSIKKyAgICBkb25lCisgIGRvbmUKK30KK10pIyBfQU1fT1VUUFVUX0RFUEVOREVOQ1lfQ09NTUFORFMKKworCisjIEFNX09VVFBVVF9ERVBFTkRFTkNZX0NPTU1BTkRTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRoaXMgbWFjcm8gc2hvdWxkIG9ubHkgYmUgaW52b2tlZCBvbmNlIC0tIHVzZSB2aWEgQUNfUkVRVUlSRS4KKyMKKyMgVGhpcyBjb2RlIGlzIG9ubHkgcmVxdWlyZWQgd2hlbiBhdXRvbWF0aWMgZGVwZW5kZW5jeSB0cmFja2luZworIyBpcyBlbmFibGVkLiAgRklYTUUuICBUaGlzIGNyZWF0ZXMgZWFjaCBgLlAnIGZpbGUgdGhhdCB3ZSB3aWxsCisjIG5lZWQgaW4gb3JkZXIgdG8gYm9vdHN0cmFwIHRoZSBkZXBlbmRlbmN5IGhhbmRsaW5nIGNvZGUuCitBQ19ERUZVTihbQU1fT1VUUFVUX0RFUEVOREVOQ1lfQ09NTUFORFNdLAorW0FDX0NPTkZJR19DT01NQU5EUyhbZGVwZmlsZXNdLAorICAgICBbdGVzdCB4IiRBTURFUF9UUlVFIiAhPSB4IiIgfHwgX0FNX09VVFBVVF9ERVBFTkRFTkNZX0NPTU1BTkRTXSwKKyAgICAgW0FNREVQX1RSVUU9IiRBTURFUF9UUlVFIiBhY19hdXhfZGlyPSIkYWNfYXV4X2RpciJdKQorXSkKKworIyBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDIwMDAsIDIwMDEsIDIwMDMsIDIwMDUKKyMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBzZXJpYWwgOAorCisjIEFNX0NPTkZJR19IRUFERVIgaXMgb2Jzb2xldGUuICBJdCBoYXMgYmVlbiByZXBsYWNlZCBieSBBQ19DT05GSUdfSEVBREVSUy4KK0FVX0RFRlVOKFtBTV9DT05GSUdfSEVBREVSXSwgW0FDX0NPTkZJR19IRUFERVJTKCRAKV0pCisKKyMgRG8gYWxsIHRoZSB3b3JrIGZvciBBdXRvbWFrZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0qLSBBdXRvY29uZiAtKi0KKworIyBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsCisjIDIwMDUsIDIwMDYsIDIwMDgsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBzZXJpYWwgMTYKKworIyBUaGlzIG1hY3JvIGFjdHVhbGx5IGRvZXMgdG9vIG11Y2guICBTb21lIGNoZWNrcyBhcmUgb25seSBuZWVkZWQgaWYKKyMgeW91ciBwYWNrYWdlIGRvZXMgY2VydGFpbiB0aGluZ3MuICBCdXQgdGhpcyBpc24ndCByZWFsbHkgYSBiaWcgZGVhbC4KKworIyBBTV9JTklUX0FVVE9NQUtFKFBBQ0tBR0UsIFZFUlNJT04sIFtOTy1ERUZJTkVdKQorIyBBTV9JTklUX0FVVE9NQUtFKFtPUFRJT05TXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVGhlIGNhbGwgd2l0aCBQQUNLQUdFIGFuZCBWRVJTSU9OIGFyZ3VtZW50cyBpcyB0aGUgb2xkIHN0eWxlCisjIGNhbGwgKHByZSBhdXRvY29uZi0yLjUwKSwgd2hpY2ggaXMgYmVpbmcgcGhhc2VkIG91dC4gIFBBQ0tBR0UKKyMgYW5kIFZFUlNJT04gc2hvdWxkIG5vdyBiZSBwYXNzZWQgdG8gQUNfSU5JVCBhbmQgcmVtb3ZlZCBmcm9tCisjIHRoZSBjYWxsIHRvIEFNX0lOSVRfQVVUT01BS0UuCisjIFdlIHN1cHBvcnQgYm90aCBjYWxsIHN0eWxlcyBmb3IgdGhlIHRyYW5zaXRpb24uICBBZnRlcgorIyB0aGUgbmV4dCBBdXRvbWFrZSByZWxlYXNlLCBBdXRvY29uZiBjYW4gbWFrZSB0aGUgQUNfSU5JVAorIyBhcmd1bWVudHMgbWFuZGF0b3J5LCBhbmQgdGhlbiB3ZSBjYW4gZGVwZW5kIG9uIGEgbmV3IEF1dG9jb25mCisjIHJlbGVhc2UgYW5kIGRyb3AgdGhlIG9sZCBjYWxsIHN1cHBvcnQuCitBQ19ERUZVTihbQU1fSU5JVF9BVVRPTUFLRV0sCitbQUNfUFJFUkVRKFsyLjYyXSlkbmwKK2RubCBBdXRvY29uZiB3YW50cyB0byBkaXNhbGxvdyBBTV8gbmFtZXMuICBXZSBleHBsaWNpdGx5IGFsbG93CitkbmwgdGhlIG9uZXMgd2UgY2FyZSBhYm91dC4KK200X3BhdHRlcm5fYWxsb3coW15BTV9bQS1aXStGTEFHUyRdKWRubAorQUNfUkVRVUlSRShbQU1fU0VUX0NVUlJFTlRfQVVUT01BS0VfVkVSU0lPTl0pZG5sCitBQ19SRVFVSVJFKFtBQ19QUk9HX0lOU1RBTExdKWRubAoraWYgdGVzdCAiYGNkICRzcmNkaXIgJiYgcHdkYCIgIT0gImBwd2RgIjsgdGhlbgorICAjIFVzZSAtSSQoc3JjZGlyKSBvbmx5IHdoZW4gJChzcmNkaXIpICE9IC4sIHNvIHRoYXQgbWFrZSdzIG91dHB1dAorICAjIGlzIG5vdCBwb2xsdXRlZCB3aXRoIHJlcGVhdGVkICItSS4iCisgIEFDX1NVQlNUKFthbV9faXNyY10sIFsnIC1JJChzcmNkaXIpJ10pX0FNX1NVQlNUX05PVE1BS0UoW2FtX19pc3JjXSlkbmwKKyAgIyB0ZXN0IHRvIHNlZSBpZiBzcmNkaXIgYWxyZWFkeSBjb25maWd1cmVkCisgIGlmIHRlc3QgLWYgJHNyY2Rpci9jb25maWcuc3RhdHVzOyB0aGVuCisgICAgQUNfTVNHX0VSUk9SKFtzb3VyY2UgZGlyZWN0b3J5IGFscmVhZHkgY29uZmlndXJlZDsgcnVuICJtYWtlIGRpc3RjbGVhbiIgdGhlcmUgZmlyc3RdKQorICBmaQorZmkKKworIyB0ZXN0IHdoZXRoZXIgd2UgaGF2ZSBjeWdwYXRoCitpZiB0ZXN0IC16ICIkQ1lHUEFUSF9XIjsgdGhlbgorICBpZiAoY3lncGF0aCAtLXZlcnNpb24pID4vZGV2L251bGwgMj4vZGV2L251bGw7IHRoZW4KKyAgICBDWUdQQVRIX1c9J2N5Z3BhdGggLXcnCisgIGVsc2UKKyAgICBDWUdQQVRIX1c9ZWNobworICBmaQorZmkKK0FDX1NVQlNUKFtDWUdQQVRIX1ddKQorCisjIERlZmluZSB0aGUgaWRlbnRpdHkgb2YgdGhlIHBhY2thZ2UuCitkbmwgRGlzdGluZ3Vpc2ggYmV0d2VlbiBvbGQtc3R5bGUgYW5kIG5ldy1zdHlsZSBjYWxscy4KK200X2lmdmFsKFskMl0sCitbbTRfaWZ2YWwoWyQzXSwgW19BTV9TRVRfT1BUSU9OKFtuby1kZWZpbmVdKV0pZG5sCisgQUNfU1VCU1QoW1BBQ0tBR0VdLCBbJDFdKWRubAorIEFDX1NVQlNUKFtWRVJTSU9OXSwgWyQyXSldLAorW19BTV9TRVRfT1BUSU9OUyhbJDFdKWRubAorZG5sIERpYWdub3NlIG9sZC1zdHlsZSBBQ19JTklUIHdpdGggbmV3LXN0eWxlIEFNX0FVVE9NQUtFX0lOSVQuCittNF9pZihtNF9pZmRlZihbQUNfUEFDS0FHRV9OQU1FXSwgMSltNF9pZmRlZihbQUNfUEFDS0FHRV9WRVJTSU9OXSwgMSksIDExLCwKKyAgW200X2ZhdGFsKFtBQ19JTklUIHNob3VsZCBiZSBjYWxsZWQgd2l0aCBwYWNrYWdlIGFuZCB2ZXJzaW9uIGFyZ3VtZW50c10pXSlkbmwKKyBBQ19TVUJTVChbUEFDS0FHRV0sIFsnQUNfUEFDS0FHRV9UQVJOQU1FJ10pZG5sCisgQUNfU1VCU1QoW1ZFUlNJT05dLCBbJ0FDX1BBQ0tBR0VfVkVSU0lPTiddKV0pZG5sCisKK19BTV9JRl9PUFRJT04oW25vLWRlZmluZV0sLAorW0FDX0RFRklORV9VTlFVT1RFRChQQUNLQUdFLCAiJFBBQ0tBR0UiLCBbTmFtZSBvZiBwYWNrYWdlXSkKKyBBQ19ERUZJTkVfVU5RVU9URUQoVkVSU0lPTiwgIiRWRVJTSU9OIiwgW1ZlcnNpb24gbnVtYmVyIG9mIHBhY2thZ2VdKV0pZG5sCisKKyMgU29tZSB0b29scyBBdXRvbWFrZSBuZWVkcy4KK0FDX1JFUVVJUkUoW0FNX1NBTklUWV9DSEVDS10pZG5sCitBQ19SRVFVSVJFKFtBQ19BUkdfUFJPR1JBTV0pZG5sCitBTV9NSVNTSU5HX1BST0coQUNMT0NBTCwgYWNsb2NhbC0ke2FtX19hcGlfdmVyc2lvbn0pCitBTV9NSVNTSU5HX1BST0coQVVUT0NPTkYsIGF1dG9jb25mKQorQU1fTUlTU0lOR19QUk9HKEFVVE9NQUtFLCBhdXRvbWFrZS0ke2FtX19hcGlfdmVyc2lvbn0pCitBTV9NSVNTSU5HX1BST0coQVVUT0hFQURFUiwgYXV0b2hlYWRlcikKK0FNX01JU1NJTkdfUFJPRyhNQUtFSU5GTywgbWFrZWluZm8pCitBQ19SRVFVSVJFKFtBTV9QUk9HX0lOU1RBTExfU0hdKWRubAorQUNfUkVRVUlSRShbQU1fUFJPR19JTlNUQUxMX1NUUklQXSlkbmwKK0FDX1JFUVVJUkUoW0FNX1BST0dfTUtESVJfUF0pZG5sCisjIFdlIG5lZWQgYXdrIGZvciB0aGUgImNoZWNrIiB0YXJnZXQuICBUaGUgc3lzdGVtICJhd2siIGlzIGJhZCBvbgorIyBzb21lIHBsYXRmb3Jtcy4KK0FDX1JFUVVJUkUoW0FDX1BST0dfQVdLXSlkbmwKK0FDX1JFUVVJUkUoW0FDX1BST0dfTUFLRV9TRVRdKWRubAorQUNfUkVRVUlSRShbQU1fU0VUX0xFQURJTkdfRE9UXSlkbmwKK19BTV9JRl9PUFRJT04oW3Rhci11c3Rhcl0sIFtfQU1fUFJPR19UQVIoW3VzdGFyXSldLAorCSAgICAgIFtfQU1fSUZfT1BUSU9OKFt0YXItcGF4XSwgW19BTV9QUk9HX1RBUihbcGF4XSldLAorCQkJICAgICBbX0FNX1BST0dfVEFSKFt2N10pXSldKQorX0FNX0lGX09QVElPTihbbm8tZGVwZW5kZW5jaWVzXSwsCitbQUNfUFJPVklERV9JRkVMU0UoW0FDX1BST0dfQ0NdLAorCQkgIFtfQU1fREVQRU5ERU5DSUVTKENDKV0sCisJCSAgW2RlZmluZShbQUNfUFJPR19DQ10sCisJCQkgIGRlZm4oW0FDX1BST0dfQ0NdKVtfQU1fREVQRU5ERU5DSUVTKENDKV0pXSlkbmwKK0FDX1BST1ZJREVfSUZFTFNFKFtBQ19QUk9HX0NYWF0sCisJCSAgW19BTV9ERVBFTkRFTkNJRVMoQ1hYKV0sCisJCSAgW2RlZmluZShbQUNfUFJPR19DWFhdLAorCQkJICBkZWZuKFtBQ19QUk9HX0NYWF0pW19BTV9ERVBFTkRFTkNJRVMoQ1hYKV0pXSlkbmwKK0FDX1BST1ZJREVfSUZFTFNFKFtBQ19QUk9HX09CSkNdLAorCQkgIFtfQU1fREVQRU5ERU5DSUVTKE9CSkMpXSwKKwkJICBbZGVmaW5lKFtBQ19QUk9HX09CSkNdLAorCQkJICBkZWZuKFtBQ19QUk9HX09CSkNdKVtfQU1fREVQRU5ERU5DSUVTKE9CSkMpXSldKWRubAorXSkKK19BTV9JRl9PUFRJT04oW3NpbGVudC1ydWxlc10sIFtBQ19SRVFVSVJFKFtBTV9TSUxFTlRfUlVMRVNdKV0pZG5sCitkbmwgVGhlIGBwYXJhbGxlbC10ZXN0cycgZHJpdmVyIG1heSBuZWVkIHRvIGtub3cgYWJvdXQgRVhFRVhULCBzbyBhZGQgdGhlCitkbmwgYGFtX19FWEVFWFQnIGNvbmRpdGlvbmFsIGlmIF9BTV9DT01QSUxFUl9FWEVFWFQgd2FzIHNlZW4uICBUaGlzIG1hY3JvCitkbmwgaXMgaG9va2VkIG9udG8gX0FDX0NPTVBJTEVSX0VYRUVYVCBlYXJseSwgc2VlIGJlbG93LgorQUNfQ09ORklHX0NPTU1BTkRTX1BSRShkbmwKK1ttNF9wcm92aWRlX2lmKFtfQU1fQ09NUElMRVJfRVhFRVhUXSwKKyAgW0FNX0NPTkRJVElPTkFMKFthbV9fRVhFRVhUXSwgW3Rlc3QgLW4gIiRFWEVFWFQiXSldKV0pZG5sCitdKQorCitkbmwgSG9vayBpbnRvIGBfQUNfQ09NUElMRVJfRVhFRVhUJyBlYXJseSB0byBsZWFybiBpdHMgZXhwYW5zaW9uLiAgRG8gbm90CitkbmwgYWRkIHRoZSBjb25kaXRpb25hbCByaWdodCBoZXJlLCBhcyBfQUNfQ09NUElMRVJfRVhFRVhUIG1heSBiZSBmdXJ0aGVyCitkbmwgbWFuZ2xlZCBieSBBdXRvY29uZiBhbmQgcnVuIGluIGEgc2hlbGwgY29uZGl0aW9uYWwgc3RhdGVtZW50LgorbTRfZGVmaW5lKFtfQUNfQ09NUElMRVJfRVhFRVhUXSwKK200X2RlZm4oW19BQ19DT01QSUxFUl9FWEVFWFRdKVttNF9wcm92aWRlKFtfQU1fQ09NUElMRVJfRVhFRVhUXSldKQorCisKKyMgV2hlbiBjb25maWcuc3RhdHVzIGdlbmVyYXRlcyBhIGhlYWRlciwgd2UgbXVzdCB1cGRhdGUgdGhlIHN0YW1wLWggZmlsZS4KKyMgVGhpcyBmaWxlIHJlc2lkZXMgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IGFzIHRoZSBjb25maWcgaGVhZGVyCisjIHRoYXQgaXMgZ2VuZXJhdGVkLiAgVGhlIHN0YW1wIGZpbGVzIGFyZSBudW1iZXJlZCB0byBoYXZlIGRpZmZlcmVudCBuYW1lcy4KKworIyBBdXRvY29uZiBjYWxscyBfQUNfQU1fQ09ORklHX0hFQURFUl9IT09LICh3aGVuIGRlZmluZWQpIGluIHRoZQorIyBsb29wIHdoZXJlIGNvbmZpZy5zdGF0dXMgY3JlYXRlcyB0aGUgaGVhZGVycywgc28gd2UgY2FuIGdlbmVyYXRlCisjIG91ciBzdGFtcCBmaWxlcyB0aGVyZS4KK0FDX0RFRlVOKFtfQUNfQU1fQ09ORklHX0hFQURFUl9IT09LXSwKK1sjIENvbXB1dGUgJDEncyBpbmRleCBpbiAkY29uZmlnX2hlYWRlcnMuCitfYW1fYXJnPSQxCitfYW1fc3RhbXBfY291bnQ9MQorZm9yIF9hbV9oZWFkZXIgaW4gJGNvbmZpZ19oZWFkZXJzIDo7IGRvCisgIGNhc2UgJF9hbV9oZWFkZXIgaW4KKyAgICAkX2FtX2FyZyB8ICRfYW1fYXJnOiogKQorICAgICAgYnJlYWsgOzsKKyAgICAqICkKKyAgICAgIF9hbV9zdGFtcF9jb3VudD1gZXhwciAkX2FtX3N0YW1wX2NvdW50ICsgMWAgOzsKKyAgZXNhYworZG9uZQorZWNobyAidGltZXN0YW1wIGZvciAkX2FtX2FyZyIgPmBBU19ESVJOQU1FKFsiJF9hbV9hcmciXSlgL3N0YW1wLWhbXSRfYW1fc3RhbXBfY291bnRdKQorCisjIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMywgMjAwNSwgMjAwOCAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBBTV9QUk9HX0lOU1RBTExfU0gKKyMgLS0tLS0tLS0tLS0tLS0tLS0tCisjIERlZmluZSAkaW5zdGFsbF9zaC4KK0FDX0RFRlVOKFtBTV9QUk9HX0lOU1RBTExfU0hdLAorW0FDX1JFUVVJUkUoW0FNX0FVWF9ESVJfRVhQQU5EXSlkbmwKK2lmIHRlc3QgeCIke2luc3RhbGxfc2h9IiAhPSB4c2V0OyB0aGVuCisgIGNhc2UgJGFtX2F1eF9kaXIgaW4KKyAgKlwgKiB8ICpcCSopCisgICAgaW5zdGFsbF9zaD0iXCR7U0hFTEx9ICckYW1fYXV4X2Rpci9pbnN0YWxsLXNoJyIgOzsKKyAgKikKKyAgICBpbnN0YWxsX3NoPSJcJHtTSEVMTH0gJGFtX2F1eF9kaXIvaW5zdGFsbC1zaCIKKyAgZXNhYworZmkKK0FDX1NVQlNUKGluc3RhbGxfc2gpXSkKKworIyBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDUgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgc2VyaWFsIDIKKworIyBDaGVjayB3aGV0aGVyIHRoZSB1bmRlcmx5aW5nIGZpbGUtc3lzdGVtIHN1cHBvcnRzIGZpbGVuYW1lcworIyB3aXRoIGEgbGVhZGluZyBkb3QuICBGb3IgaW5zdGFuY2UgTVMtRE9TIGRvZXNuJ3QuCitBQ19ERUZVTihbQU1fU0VUX0xFQURJTkdfRE9UXSwKK1tybSAtcmYgLnRzdCAyPi9kZXYvbnVsbAorbWtkaXIgLnRzdCAyPi9kZXYvbnVsbAoraWYgdGVzdCAtZCAudHN0OyB0aGVuCisgIGFtX19sZWFkaW5nX2RvdD0uCitlbHNlCisgIGFtX19sZWFkaW5nX2RvdD1fCitmaQorcm1kaXIgLnRzdCAyPi9kZXYvbnVsbAorQUNfU1VCU1QoW2FtX19sZWFkaW5nX2RvdF0pXSkKKworIyBDaGVjayB0byBzZWUgaG93ICdtYWtlJyB0cmVhdHMgaW5jbHVkZXMuCSAgICAgICAgICAgIC0qLSBBdXRvY29uZiAtKi0KKworIyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDUsIDIwMDkgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgc2VyaWFsIDQKKworIyBBTV9NQUtFX0lOQ0xVREUoKQorIyAtLS0tLS0tLS0tLS0tLS0tLQorIyBDaGVjayB0byBzZWUgaG93IG1ha2UgdHJlYXRzIGluY2x1ZGVzLgorQUNfREVGVU4oW0FNX01BS0VfSU5DTFVERV0sCitbYW1fbWFrZT0ke01BS0UtbWFrZX0KK2NhdCA+IGNvbmZpbmMgPDwgJ0VORCcKK2FtX19kb2l0OgorCUBlY2hvIHRoaXMgaXMgdGhlIGFtX19kb2l0IHRhcmdldAorLlBIT05ZOiBhbV9fZG9pdAorRU5ECisjIElmIHdlIGRvbid0IGZpbmQgYW4gaW5jbHVkZSBkaXJlY3RpdmUsIGp1c3QgY29tbWVudCBvdXQgdGhlIGNvZGUuCitBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBzdHlsZSBvZiBpbmNsdWRlIHVzZWQgYnkgJGFtX21ha2VdKQorYW1fX2luY2x1ZGU9IiMiCithbV9fcXVvdGU9CitfYW1fcmVzdWx0PW5vbmUKKyMgRmlyc3QgdHJ5IEdOVSBtYWtlIHN0eWxlIGluY2x1ZGUuCitlY2hvICJpbmNsdWRlIGNvbmZpbmMiID4gY29uZm1mCisjIElnbm9yZSBhbGwga2luZHMgb2YgYWRkaXRpb25hbCBvdXRwdXQgZnJvbSBgbWFrZScuCitjYXNlIGAkYW1fbWFrZSAtcyAtZiBjb25mbWYgMj4gL2Rldi9udWxsYCBpbiAjKAorKnRoZVwgYW1fX2RvaXRcIHRhcmdldCopCisgIGFtX19pbmNsdWRlPWluY2x1ZGUKKyAgYW1fX3F1b3RlPQorICBfYW1fcmVzdWx0PUdOVQorICA7OworZXNhYworIyBOb3cgdHJ5IEJTRCBtYWtlIHN0eWxlIGluY2x1ZGUuCitpZiB0ZXN0ICIkYW1fX2luY2x1ZGUiID0gIiMiOyB0aGVuCisgICBlY2hvICcuaW5jbHVkZSAiY29uZmluYyInID4gY29uZm1mCisgICBjYXNlIGAkYW1fbWFrZSAtcyAtZiBjb25mbWYgMj4gL2Rldi9udWxsYCBpbiAjKAorICAgKnRoZVwgYW1fX2RvaXRcIHRhcmdldCopCisgICAgIGFtX19pbmNsdWRlPS5pbmNsdWRlCisgICAgIGFtX19xdW90ZT0iXCIiCisgICAgIF9hbV9yZXN1bHQ9QlNECisgICAgIDs7CisgICBlc2FjCitmaQorQUNfU1VCU1QoW2FtX19pbmNsdWRlXSkKK0FDX1NVQlNUKFthbV9fcXVvdGVdKQorQUNfTVNHX1JFU1VMVChbJF9hbV9yZXN1bHRdKQorcm0gLWYgY29uZmluYyBjb25mbWYKK10pCisKKyMgRmFrZSB0aGUgZXhpc3RlbmNlIG9mIHByb2dyYW1zIHRoYXQgR05VIG1haW50YWluZXJzIHVzZS4gIC0qLSBBdXRvY29uZiAtKi0KKworIyBDb3B5cmlnaHQgKEMpIDE5OTcsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDgKKyMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBzZXJpYWwgNgorCisjIEFNX01JU1NJTkdfUFJPRyhOQU1FLCBQUk9HUkFNKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtBTV9NSVNTSU5HX1BST0ddLAorW0FDX1JFUVVJUkUoW0FNX01JU1NJTkdfSEFTX1JVTl0pCiskMT0keyQxLSIke2FtX21pc3NpbmdfcnVufSQyIn0KK0FDX1NVQlNUKCQxKV0pCisKKworIyBBTV9NSVNTSU5HX0hBU19SVU4KKyMgLS0tLS0tLS0tLS0tLS0tLS0tCisjIERlZmluZSBNSVNTSU5HIGlmIG5vdCBkZWZpbmVkIHNvIGZhciBhbmQgdGVzdCBpZiBpdCBzdXBwb3J0cyAtLXJ1bi4KKyMgSWYgaXQgZG9lcywgc2V0IGFtX21pc3NpbmdfcnVuIHRvIHVzZSBpdCwgb3RoZXJ3aXNlLCB0byBub3RoaW5nLgorQUNfREVGVU4oW0FNX01JU1NJTkdfSEFTX1JVTl0sCitbQUNfUkVRVUlSRShbQU1fQVVYX0RJUl9FWFBBTkRdKWRubAorQUNfUkVRVUlSRV9BVVhfRklMRShbbWlzc2luZ10pZG5sCitpZiB0ZXN0IHgiJHtNSVNTSU5HK3NldH0iICE9IHhzZXQ7IHRoZW4KKyAgY2FzZSAkYW1fYXV4X2RpciBpbgorICAqXCAqIHwgKlwJKikKKyAgICBNSVNTSU5HPSJcJHtTSEVMTH0gXCIkYW1fYXV4X2Rpci9taXNzaW5nXCIiIDs7CisgICopCisgICAgTUlTU0lORz0iXCR7U0hFTEx9ICRhbV9hdXhfZGlyL21pc3NpbmciIDs7CisgIGVzYWMKK2ZpCisjIFVzZSBldmFsIHRvIGV4cGFuZCAkU0hFTEwKK2lmIGV2YWwgIiRNSVNTSU5HIC0tcnVuIHRydWUiOyB0aGVuCisgIGFtX21pc3NpbmdfcnVuPSIkTUlTU0lORyAtLXJ1biAiCitlbHNlCisgIGFtX21pc3NpbmdfcnVuPQorICBBQ19NU0dfV0FSTihbYG1pc3NpbmcnIHNjcmlwdCBpcyB0b28gb2xkIG9yIG1pc3NpbmddKQorZmkKK10pCisKKyMgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIEFNX1BST0dfTUtESVJfUAorIyAtLS0tLS0tLS0tLS0tLS0KKyMgQ2hlY2sgZm9yIGBta2RpciAtcCcuCitBQ19ERUZVTihbQU1fUFJPR19NS0RJUl9QXSwKK1tBQ19QUkVSRVEoWzIuNjBdKWRubAorQUNfUkVRVUlSRShbQUNfUFJPR19NS0RJUl9QXSlkbmwKK2RubCBBdXRvbWFrZSAxLjggdG8gMS45LjYgdXNlZCB0byBkZWZpbmUgbWtkaXJfcC4gIFdlIG5vdyB1c2UgTUtESVJfUCwKK2RubCB3aGlsZSBrZWVwaW5nIGEgZGVmaW5pdGlvbiBvZiBta2Rpcl9wIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LgorZG5sIEBNS0RJUl9QQCBpcyBtYWdpYzogQUNfT1VUUFVUIGFkanVzdHMgaXRzIHZhbHVlIGZvciBlYWNoIE1ha2VmaWxlLgorZG5sIEhvd2V2ZXIgd2UgY2Fubm90IGRlZmluZSBta2Rpcl9wIGFzICQoTUtESVJfUCkgZm9yIHRoZSBzYWtlIG9mCitkbmwgTWFrZWZpbGUuaW5zIHRoYXQgZG8gbm90IGRlZmluZSBNS0RJUl9QLCBzbyB3ZSBkbyBvdXIgb3duCitkbmwgYWRqdXN0bWVudCB1c2luZyB0b3BfYnVpbGRkaXIgKHdoaWNoIGlzIGRlZmluZWQgbW9yZSBvZnRlbiB0aGFuCitkbmwgTUtESVJfUCkuCitBQ19TVUJTVChbbWtkaXJfcF0sIFsiJE1LRElSX1AiXSlkbmwKK2Nhc2UgJG1rZGlyX3AgaW4KKyAgW1tcXC8kXV0qIHwgPzpbW1xcL11dKikgOzsKKyAgKi8qKSBta2Rpcl9wPSJcJCh0b3BfYnVpbGRkaXIpLyRta2Rpcl9wIiA7OworZXNhYworXSkKKworIyBIZWxwZXIgZnVuY3Rpb25zIGZvciBvcHRpb24gaGFuZGxpbmcuICAgICAgICAgICAgICAgICAgICAgLSotIEF1dG9jb25mIC0qLQorCisjIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNSwgMjAwOCAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBzZXJpYWwgNAorCisjIF9BTV9NQU5HTEVfT1BUSU9OKE5BTUUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbX0FNX01BTkdMRV9PUFRJT05dLAorW1tfQU1fT1BUSU9OX11tNF9icGF0c3Vic3QoJDEsIFtbXmEtekEtWjAtOV9dXSwgW19dKV0pCisKKyMgX0FNX1NFVF9PUFRJT04oTkFNRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFNldCBvcHRpb24gTkFNRS4gIFByZXNlbnRseSB0aGF0IG9ubHkgbWVhbnMgZGVmaW5pbmcgYSBmbGFnIGZvciB0aGlzIG9wdGlvbi4KK0FDX0RFRlVOKFtfQU1fU0VUX09QVElPTl0sCitbbTRfZGVmaW5lKF9BTV9NQU5HTEVfT1BUSU9OKFskMV0pLCAxKV0pCisKKyMgX0FNX1NFVF9PUFRJT05TKE9QVElPTlMpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgT1BUSU9OUyBpcyBhIHNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIEF1dG9tYWtlIG9wdGlvbnMuCitBQ19ERUZVTihbX0FNX1NFVF9PUFRJT05TXSwKK1ttNF9mb3JlYWNoX3coW19BTV9PcHRpb25dLCBbJDFdLCBbX0FNX1NFVF9PUFRJT04oX0FNX09wdGlvbildKV0pCisKKyMgX0FNX0lGX09QVElPTihPUFRJT04sIElGLVNFVCwgW0lGLU5PVC1TRVRdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEV4ZWN1dGUgSUYtU0VUIGlmIE9QVElPTiBpcyBzZXQsIElGLU5PVC1TRVQgb3RoZXJ3aXNlLgorQUNfREVGVU4oW19BTV9JRl9PUFRJT05dLAorW200X2lmc2V0KF9BTV9NQU5HTEVfT1BUSU9OKFskMV0pLCBbJDJdLCBbJDNdKV0pCisKKyMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGJ1aWxkIGVudmlyb25tZW50IGlzIHNhbmUuICAgIC0qLSBBdXRvY29uZiAtKi0KKworIyBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDIwMDAsIDIwMDEsIDIwMDMsIDIwMDUsIDIwMDgKKyMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBzZXJpYWwgNQorCisjIEFNX1NBTklUWV9DSEVDSworIyAtLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtBTV9TQU5JVFlfQ0hFQ0tdLAorW0FDX01TR19DSEVDS0lORyhbd2hldGhlciBidWlsZCBlbnZpcm9ubWVudCBpcyBzYW5lXSkKKyMgSnVzdCBpbiBjYXNlCitzbGVlcCAxCitlY2hvIHRpbWVzdGFtcCA+IGNvbmZ0ZXN0LmZpbGUKKyMgUmVqZWN0IHVuc2FmZSBjaGFyYWN0ZXJzIGluICRzcmNkaXIgb3IgdGhlIGFic29sdXRlIHdvcmtpbmcgZGlyZWN0b3J5CisjIG5hbWUuICBBY2NlcHQgc3BhY2UgYW5kIHRhYiBvbmx5IGluIHRoZSBsYXR0ZXIuCithbV9sZj0nCisnCitjYXNlIGBwd2RgIGluCisgICpbW1xcXCJcI1wkXCZcJ1xgJGFtX2xmXV0qKQorICAgIEFDX01TR19FUlJPUihbdW5zYWZlIGFic29sdXRlIHdvcmtpbmcgZGlyZWN0b3J5IG5hbWVdKTs7Citlc2FjCitjYXNlICRzcmNkaXIgaW4KKyAgKltbXFxcIlwjXCRcJlwnXGAkYW1fbGZcIFwJXV0qKQorICAgIEFDX01TR19FUlJPUihbdW5zYWZlIHNyY2RpciB2YWx1ZTogYCRzcmNkaXInXSk7OworZXNhYworCisjIERvIGBzZXQnIGluIGEgc3Vic2hlbGwgc28gd2UgZG9uJ3QgY2xvYmJlciB0aGUgY3VycmVudCBzaGVsbCdzCisjIGFyZ3VtZW50cy4gIE11c3QgdHJ5IC1MIGZpcnN0IGluIGNhc2UgY29uZmlndXJlIGlzIGFjdHVhbGx5IGEKKyMgc3ltbGluazsgc29tZSBzeXN0ZW1zIHBsYXkgd2VpcmQgZ2FtZXMgd2l0aCB0aGUgbW9kIHRpbWUgb2Ygc3ltbGlua3MKKyMgKGVnIEZyZWVCU0QgcmV0dXJucyB0aGUgbW9kIHRpbWUgb2YgdGhlIHN5bWxpbmsncyBjb250YWluaW5nCisjIGRpcmVjdG9yeSkuCitpZiAoCisgICBzZXQgWCBgbHMgLUx0ICIkc3JjZGlyL2NvbmZpZ3VyZSIgY29uZnRlc3QuZmlsZSAyPiAvZGV2L251bGxgCisgICBpZiB0ZXN0ICIkWypdIiA9ICJYIjsgdGhlbgorICAgICAgIyAtTCBkaWRuJ3Qgd29yay4KKyAgICAgIHNldCBYIGBscyAtdCAiJHNyY2Rpci9jb25maWd1cmUiIGNvbmZ0ZXN0LmZpbGVgCisgICBmaQorICAgcm0gLWYgY29uZnRlc3QuZmlsZQorICAgaWYgdGVzdCAiJFsqXSIgIT0gIlggJHNyY2Rpci9jb25maWd1cmUgY29uZnRlc3QuZmlsZSIgXAorICAgICAgJiYgdGVzdCAiJFsqXSIgIT0gIlggY29uZnRlc3QuZmlsZSAkc3JjZGlyL2NvbmZpZ3VyZSI7IHRoZW4KKworICAgICAgIyBJZiBuZWl0aGVyIG1hdGNoZWQsIHRoZW4gd2UgaGF2ZSBhIGJyb2tlbiBscy4gIFRoaXMgY2FuIGhhcHBlbgorICAgICAgIyBpZiwgZm9yIGluc3RhbmNlLCBDT05GSUdfU0hFTEwgaXMgYmFzaCBhbmQgaXQgaW5oZXJpdHMgYQorICAgICAgIyBicm9rZW4gbHMgYWxpYXMgZnJvbSB0aGUgZW52aXJvbm1lbnQuICBUaGlzIGhhcyBhY3R1YWxseQorICAgICAgIyBoYXBwZW5lZC4gIFN1Y2ggYSBzeXN0ZW0gY291bGQgbm90IGJlIGNvbnNpZGVyZWQgInNhbmUiLgorICAgICAgQUNfTVNHX0VSUk9SKFtscyAtdCBhcHBlYXJzIHRvIGZhaWwuICBNYWtlIHN1cmUgdGhlcmUgaXMgbm90IGEgYnJva2VuCithbGlhcyBpbiB5b3VyIGVudmlyb25tZW50XSkKKyAgIGZpCisKKyAgIHRlc3QgIiRbMl0iID0gY29uZnRlc3QuZmlsZQorICAgKQordGhlbgorICAgIyBPay4KKyAgIDoKK2Vsc2UKKyAgIEFDX01TR19FUlJPUihbbmV3bHkgY3JlYXRlZCBmaWxlIGlzIG9sZGVyIHRoYW4gZGlzdHJpYnV0ZWQgZmlsZXMhCitDaGVjayB5b3VyIHN5c3RlbSBjbG9ja10pCitmaQorQUNfTVNHX1JFU1VMVCh5ZXMpXSkKKworIyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDMsIDIwMDUgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgQU1fUFJPR19JTlNUQUxMX1NUUklQCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBPbmUgaXNzdWUgd2l0aCB2ZW5kb3IgYGluc3RhbGwnIChldmVuIEdOVSkgaXMgdGhhdCB5b3UgY2FuJ3QKKyMgc3BlY2lmeSB0aGUgcHJvZ3JhbSB1c2VkIHRvIHN0cmlwIGJpbmFyaWVzLiAgVGhpcyBpcyBlc3BlY2lhbGx5CisjIGFubm95aW5nIGluIGNyb3NzLWNvbXBpbGluZyBlbnZpcm9ubWVudHMsIHdoZXJlIHRoZSBidWlsZCdzIHN0cmlwCisjIGlzIHVubGlrZWx5IHRvIGhhbmRsZSB0aGUgaG9zdCdzIGJpbmFyaWVzLgorIyBGb3J0dW5hdGVseSBpbnN0YWxsLXNoIHdpbGwgaG9ub3IgYSBTVFJJUFBST0cgdmFyaWFibGUsIHNvIHdlCisjIGFsd2F5cyB1c2UgaW5zdGFsbC1zaCBpbiBgbWFrZSBpbnN0YWxsLXN0cmlwJywgYW5kIGluaXRpYWxpemUKKyMgU1RSSVBQUk9HIHdpdGggdGhlIHZhbHVlIG9mIHRoZSBTVFJJUCB2YXJpYWJsZSAoc2V0IGJ5IHRoZSB1c2VyKS4KK0FDX0RFRlVOKFtBTV9QUk9HX0lOU1RBTExfU1RSSVBdLAorW0FDX1JFUVVJUkUoW0FNX1BST0dfSU5TVEFMTF9TSF0pZG5sCisjIEluc3RhbGxlZCBiaW5hcmllcyBhcmUgdXN1YWxseSBzdHJpcHBlZCB1c2luZyBgc3RyaXAnIHdoZW4gdGhlIHVzZXIKKyMgcnVuIGBtYWtlIGluc3RhbGwtc3RyaXAnLiAgSG93ZXZlciBgc3RyaXAnIG1pZ2h0IG5vdCBiZSB0aGUgcmlnaHQKKyMgdG9vbCB0byB1c2UgaW4gY3Jvc3MtY29tcGlsYXRpb24gZW52aXJvbm1lbnRzLCB0aGVyZWZvcmUgQXV0b21ha2UKKyMgd2lsbCBob25vciB0aGUgYFNUUklQJyBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byBvdmVycnVsZSB0aGlzIHByb2dyYW0uCitkbmwgRG9uJ3QgdGVzdCBmb3IgJGNyb3NzX2NvbXBpbGluZyA9IHllcywgYmVjYXVzZSBpdCBtaWdodCBiZSBgbWF5YmUnLgoraWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgIT0gbm87IHRoZW4KKyAgQUNfQ0hFQ0tfVE9PTChbU1RSSVBdLCBbc3RyaXBdLCA6KQorZmkKK0lOU1RBTExfU1RSSVBfUFJPR1JBTT0iXCQoaW5zdGFsbF9zaCkgLWMgLXMiCitBQ19TVUJTVChbSU5TVEFMTF9TVFJJUF9QUk9HUkFNXSldKQorCisjIENvcHlyaWdodCAoQykgMjAwNiwgMjAwOCAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBzZXJpYWwgMgorCisjIF9BTV9TVUJTVF9OT1RNQUtFKFZBUklBQkxFKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUHJldmVudCBBdXRvbWFrZSBmcm9tIG91dHB1dHRpbmcgVkFSSUFCTEUgPSBAVkFSSUFCTEVAIGluIE1ha2VmaWxlLmluLgorIyBUaGlzIG1hY3JvIGlzIHRyYWNlZCBieSBBdXRvbWFrZS4KK0FDX0RFRlVOKFtfQU1fU1VCU1RfTk9UTUFLRV0pCisKKyMgQU1fU1VCU1RfTk9UTUFLRShWQVJJQUJMRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFB1YmxpYyBzaXN0ZXIgb2YgX0FNX1NVQlNUX05PVE1BS0UuCitBQ19ERUZVTihbQU1fU1VCU1RfTk9UTUFLRV0sIFtfQU1fU1VCU1RfTk9UTUFLRSgkQCldKQorCisjIENoZWNrIGhvdyB0byBjcmVhdGUgYSB0YXJiYWxsLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKi0gQXV0b2NvbmYgLSotCisKKyMgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIHNlcmlhbCAyCisKKyMgX0FNX1BST0dfVEFSKEZPUk1BVCkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ2hlY2sgaG93IHRvIGNyZWF0ZSBhIHRhcmJhbGwgaW4gZm9ybWF0IEZPUk1BVC4KKyMgRk9STUFUIHNob3VsZCBiZSBvbmUgb2YgYHY3JywgYHVzdGFyJywgb3IgYHBheCcuCisjCisjIFN1YnN0aXR1dGUgYSB2YXJpYWJsZSAkKGFtX190YXIpIHRoYXQgaXMgYSBjb21tYW5kCisjIHdyaXRpbmcgdG8gc3Rkb3V0IGEgRk9STUFULXRhcmJhbGwgY29udGFpbmluZyB0aGUgZGlyZWN0b3J5CisjICR0YXJkaXIuCisjICAgICB0YXJkaXI9ZGlyZWN0b3J5ICYmICQoYW1fX3RhcikgPiByZXN1bHQudGFyCisjCisjIFN1YnN0aXR1dGUgYSB2YXJpYWJsZSAkKGFtX191bnRhcikgdGhhdCBleHRyYWN0IHN1Y2gKKyMgYSB0YXJiYWxsIHJlYWQgZnJvbSBzdGRpbi4KKyMgICAgICQoYW1fX3VudGFyKSA8IHJlc3VsdC50YXIKK0FDX0RFRlVOKFtfQU1fUFJPR19UQVJdLAorWyMgQWx3YXlzIGRlZmluZSBBTVRBUiBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4KK0FNX01JU1NJTkdfUFJPRyhbQU1UQVJdLCBbdGFyXSkKK200X2lmKFskMV0sIFt2N10sCisgICAgIFthbV9fdGFyPScke0FNVEFSfSBjaG9mIC0gIiQkdGFyZGlyIic7IGFtX191bnRhcj0nJHtBTVRBUn0geGYgLSddLAorICAgICBbbTRfY2FzZShbJDFdLCBbdXN0YXJdLCwgW3BheF0sLAorICAgICAgICAgICAgICBbbTRfZmF0YWwoW1Vua25vd24gdGFyIGZvcm1hdF0pXSkKK0FDX01TR19DSEVDS0lORyhbaG93IHRvIGNyZWF0ZSBhICQxIHRhciBhcmNoaXZlXSkKKyMgTG9vcCBvdmVyIGFsbCBrbm93biBtZXRob2RzIHRvIGNyZWF0ZSBhIHRhciBhcmNoaXZlIHVudGlsIG9uZSB3b3Jrcy4KK19hbV90b29scz0nZ251dGFyIG00X2lmKFskMV0sIFt1c3Rhcl0sIFtwbGFpbnRhcl0pIHBheCBjcGlvIG5vbmUnCitfYW1fdG9vbHM9JHthbV9jdl9wcm9nX3Rhcl8kMS0kX2FtX3Rvb2xzfQorIyBEbyBub3QgZm9sZCB0aGUgYWJvdmUgdHdvIGxpbmUgaW50byBvbmUsIGJlY2F1c2UgVHJ1NjQgc2ggYW5kCisjIFNvbGFyaXMgc2ggd2lsbCBub3QgZ3JvayBzcGFjZXMgaW4gdGhlIHJocyBvZiBgLScuCitmb3IgX2FtX3Rvb2wgaW4gJF9hbV90b29scworZG8KKyAgY2FzZSAkX2FtX3Rvb2wgaW4KKyAgZ251dGFyKQorICAgIGZvciBfYW1fdGFyIGluIHRhciBnbnV0YXIgZ3RhcjsKKyAgICBkbworICAgICAgQU1fUlVOX0xPRyhbJF9hbV90YXIgLS12ZXJzaW9uXSkgJiYgYnJlYWsKKyAgICBkb25lCisgICAgYW1fX3Rhcj0iJF9hbV90YXIgLS1mb3JtYXQ9bTRfaWYoWyQxXSwgW3BheF0sIFtwb3NpeF0sIFskMV0pIC1jaGYgLSAiJyIkJHRhcmRpciInCisgICAgYW1fX3Rhcl89IiRfYW1fdGFyIC0tZm9ybWF0PW00X2lmKFskMV0sIFtwYXhdLCBbcG9zaXhdLCBbJDFdKSAtY2hmIC0gIiciJHRhcmRpciInCisgICAgYW1fX3VudGFyPSIkX2FtX3RhciAteGYgLSIKKyAgICA7OworICBwbGFpbnRhcikKKyAgICAjIE11c3Qgc2tpcCBHTlUgdGFyOiBpZiBpdCBkb2VzIG5vdCBzdXBwb3J0IC0tZm9ybWF0PSBpdCBkb2Vzbid0IGNyZWF0ZQorICAgICMgdXN0YXIgdGFyYmFsbCBlaXRoZXIuCisgICAgKHRhciAtLXZlcnNpb24pID4vZGV2L251bGwgMj4mMSAmJiBjb250aW51ZQorICAgIGFtX190YXI9J3RhciBjaGYgLSAiJCR0YXJkaXIiJworICAgIGFtX190YXJfPSd0YXIgY2hmIC0gIiR0YXJkaXIiJworICAgIGFtX191bnRhcj0ndGFyIHhmIC0nCisgICAgOzsKKyAgcGF4KQorICAgIGFtX190YXI9J3BheCAtTCAteCAkMSAtdyAiJCR0YXJkaXIiJworICAgIGFtX190YXJfPSdwYXggLUwgLXggJDEgLXcgIiR0YXJkaXIiJworICAgIGFtX191bnRhcj0ncGF4IC1yJworICAgIDs7CisgIGNwaW8pCisgICAgYW1fX3Rhcj0nZmluZCAiJCR0YXJkaXIiIC1wcmludCB8IGNwaW8gLW8gLUggJDEgLUwnCisgICAgYW1fX3Rhcl89J2ZpbmQgIiR0YXJkaXIiIC1wcmludCB8IGNwaW8gLW8gLUggJDEgLUwnCisgICAgYW1fX3VudGFyPSdjcGlvIC1pIC1IICQxIC1kJworICAgIDs7CisgIG5vbmUpCisgICAgYW1fX3Rhcj1mYWxzZQorICAgIGFtX190YXJfPWZhbHNlCisgICAgYW1fX3VudGFyPWZhbHNlCisgICAgOzsKKyAgZXNhYworCisgICMgSWYgdGhlIHZhbHVlIHdhcyBjYWNoZWQsIHN0b3Agbm93LiAgV2UganVzdCB3YW50ZWQgdG8gaGF2ZSBhbV9fdGFyCisgICMgYW5kIGFtX191bnRhciBzZXQuCisgIHRlc3QgLW4gIiR7YW1fY3ZfcHJvZ190YXJfJDF9IiAmJiBicmVhaworCisgICMgdGFyL3VudGFyIGEgZHVtbXkgZGlyZWN0b3J5LCBhbmQgc3RvcCBpZiB0aGUgY29tbWFuZCB3b3JrcworICBybSAtcmYgY29uZnRlc3QuZGlyCisgIG1rZGlyIGNvbmZ0ZXN0LmRpcgorICBlY2hvIEdyZXBNZSA+IGNvbmZ0ZXN0LmRpci9maWxlCisgIEFNX1JVTl9MT0coW3RhcmRpcj1jb25mdGVzdC5kaXIgJiYgZXZhbCAkYW1fX3Rhcl8gPmNvbmZ0ZXN0LnRhcl0pCisgIHJtIC1yZiBjb25mdGVzdC5kaXIKKyAgaWYgdGVzdCAtcyBjb25mdGVzdC50YXI7IHRoZW4KKyAgICBBTV9SVU5fTE9HKFskYW1fX3VudGFyIDxjb25mdGVzdC50YXJdKQorICAgIGdyZXAgR3JlcE1lIGNvbmZ0ZXN0LmRpci9maWxlID4vZGV2L251bGwgMj4mMSAmJiBicmVhaworICBmaQorZG9uZQorcm0gLXJmIGNvbmZ0ZXN0LmRpcgorCitBQ19DQUNIRV9WQUwoW2FtX2N2X3Byb2dfdGFyXyQxXSwgW2FtX2N2X3Byb2dfdGFyXyQxPSRfYW1fdG9vbF0pCitBQ19NU0dfUkVTVUxUKFskYW1fY3ZfcHJvZ190YXJfJDFdKV0pCitBQ19TVUJTVChbYW1fX3Rhcl0pCitBQ19TVUJTVChbYW1fX3VudGFyXSkKK10pICMgX0FNX1BST0dfVEFSCisKK200X2luY2x1ZGUoW200L2JpbnV0aWxzLm00XSkKK200X2luY2x1ZGUoW200L2J1aWx0aW5leHBlY3QubTRdKQorbTRfaW5jbHVkZShbbTQvY2VsbHNwdWJmZHN1cHBvcnQubTRdKQorbTRfaW5jbHVkZShbbTQvY29tcGlsZXJvcHRpb24ubTRdKQorbTRfaW5jbHVkZShbbTQvY29uZmlnbW9kdWxlLm00XSkKK200X2luY2x1ZGUoW200L2NvcHlpZmNoYW5nZS5tNF0pCittNF9pbmNsdWRlKFttNC9kb2Nib29rLm00XSkKK200X2luY2x1ZGUoW200L2V4dHJhZGlycy5tNF0pCittNF9pbmNsdWRlKFttNC9maW5ka2VybmVsLm00XSkKK200X2luY2x1ZGUoW200L2tlcm5lbG9wdGlvbi5tNF0pCittNF9pbmNsdWRlKFttNC9rZXJuZWx2ZXJzaW9uLm00XSkKK200X2luY2x1ZGUoW200L2xpYnRvb2wubTRdKQorbTRfaW5jbHVkZShbbTQvbHRvcHRpb25zLm00XSkKK200X2luY2x1ZGUoW200L2x0c3VnYXIubTRdKQorbTRfaW5jbHVkZShbbTQvbHR2ZXJzaW9uLm00XSkKK200X2luY2x1ZGUoW200L2x0fm9ic29sZXRlLm00XSkKK200X2luY2x1ZGUoW200L21hbGxvY2F0dHJpYnV0ZS5tNF0pCittNF9pbmNsdWRlKFttNC9wb3B0Y29uc3QubTRdKQorbTRfaW5jbHVkZShbbTQvcHJlY29tcGlsZWRoZWFkZXIubTRdKQorbTRfaW5jbHVkZShbbTQvcXQubTRdKQorbTRfaW5jbHVkZShbbTQvcmVzdWx0eW4ubTRdKQorbTRfaW5jbHVkZShbbTQvc3N0cmVhbS5tNF0pCittNF9pbmNsdWRlKFttNC90eXBlZGVmLm00XSkKZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2FnZW50cy9NYWtlZmlsZS5hbSBiL29wcm9maWxlLTAuOS43L2FnZW50cy9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDQ5ZmE3Ci0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvYWdlbnRzL01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsMzYgQEAKKworU1VCRElSUyA9CisKK2lmIEJVSUxEX0pWTVRJX0FHRU5UCitTVUJESVJTICs9IAlqdm10aQorZW5kaWYKKworaWYgQlVJTERfSlZNUElfQUdFTlQKK1NVQkRJUlMgKz0gICAgICBqdm1waQorZW5kaWYKKworSU5TVEFMTF9FWEVDX0hPT0sgPQorCitpZiBDSEVDS19BQ0NPVU5UCitJTlNUQUxMX0VYRUNfSE9PSyArPSBfX2luc3RhbGwtZXhlYy1ob29rCitlbmRpZgorCitfX2luc3RhbGwtZXhlYy1ob29rOgorCUBnZXRlbnQgcGFzc3dkIG9wcm9maWxlID4vZGV2L251bGwgfHwgKCBcCisJZWNobyAiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiIgOyBcCisJZWNobyAiKiAgICBXQVJOSU5HOiIgOyBcCisJZWNobyAiKiAgICAgIENyZWF0ZSB0aGUgJ29wcm9maWxlJyB1c2VyIGFjY291bnQgdG8gZW5hYmxlIHByb2ZpbGluZyBvZiBKSVRlZCBjb2RlLiIgOyBcCisJZWNobyAiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiIpIDsKKwlAZ2V0ZW50IGdyb3VwIG9wcm9maWxlID4vZGV2L251bGwgfHwgICggXAorCWVjaG8gIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioiIDsgXAorCWVjaG8gIiogICAgV0FSTklORzoiIDsgXAorCWVjaG8gIiogICAgICBDcmVhdGUgdGhlICdvcHJvZmlsZScgZ3JvdXAgdG8gZW5hYmxlIHByb2ZpbGluZyBvZiBKSVRlZCBjb2RlLiIgOyBcCisJZWNobyAiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiIpIDsKKwlAdGVzdCAteiBgaWQgLWduIG9wcm9maWxlIDI+L2Rldi9udWxsYCB8fCBcCisJdGVzdCBgaWQgLWduIG9wcm9maWxlIDI+L2Rldi9udWxsYCA9ICJvcHJvZmlsZSIgfHwgKCBcCisJZWNobyAiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiIgOyBcCisJZWNobyAiKiAgICBXQVJOSU5HOiIgOyBcCisJZWNobyAiKiAgICAgIFRoZSBzcGVjaWFsIHVzZXIgJ29wcm9maWxlJyBtdXN0IGhhdmUgdGhlIGRlZmF1bHQgZ3JvdXAgc2V0IHRvICdvcHJvZmlsZScuIiA7IFwKKwllY2hvICIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIikgOworCitpbnN0YWxsLWV4ZWMtaG9vazogJChJTlNUQUxMX0VYRUNfSE9PSykKZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2FnZW50cy9NYWtlZmlsZS5pbiBiL29wcm9maWxlLTAuOS43L2FnZW50cy9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40M2Q2M2MyCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvYWdlbnRzL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsNjM2IEBACisjIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjExLjEgZnJvbSBNYWtlZmlsZS5hbS4KKyMgQGNvbmZpZ3VyZV9pbnB1dEAKKworIyBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsCisjIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyMgSW5jLgorIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAorIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCisjIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworQFNFVF9NQUtFQAorVlBBVEggPSBAc3JjZGlyQAorcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACitwa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAorYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAoraW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKK2luc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKK2luc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYworSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKK3RyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKK05PUk1BTF9JTlNUQUxMID0gOgorUFJFX0lOU1RBTEwgPSA6CitQT1NUX0lOU1RBTEwgPSA6CitOT1JNQUxfVU5JTlNUQUxMID0gOgorUFJFX1VOSU5TVEFMTCA9IDoKK1BPU1RfVU5JTlNUQUxMID0gOgorYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKK2hvc3RfdHJpcGxldCA9IEBob3N0QAorQEJVSUxEX0pWTVRJX0FHRU5UX1RSVUVAYW1fX2FwcGVuZF8xID0ganZtdGkKK0BCVUlMRF9KVk1QSV9BR0VOVF9UUlVFQGFtX19hcHBlbmRfMiA9IGp2bXBpCitAQ0hFQ0tfQUNDT1VOVF9UUlVFQGFtX19hcHBlbmRfMyA9IF9faW5zdGFsbC1leGVjLWhvb2sKK3N1YmRpciA9IGFnZW50cworRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChzcmNkaXIpL01ha2VmaWxlLmluCitBQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00CithbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9tNC9iaW51dGlscy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9idWlsdGluZXhwZWN0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2NlbGxzcHViZmRzdXBwb3J0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2NvbXBpbGVyb3B0aW9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2NvbmZpZ21vZHVsZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jb3B5aWZjaGFuZ2UubTQgJCh0b3Bfc3JjZGlyKS9tNC9kb2Nib29rLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2V4dHJhZGlycy5tNCAkKHRvcF9zcmNkaXIpL200L2ZpbmRrZXJuZWwubTQgXAorCSQodG9wX3NyY2RpcikvbTQva2VybmVsb3B0aW9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2tlcm5lbHZlcnNpb24ubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWJ0b29sLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2x0b3B0aW9ucy5tNCAkKHRvcF9zcmNkaXIpL200L2x0c3VnYXIubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbHR2ZXJzaW9uLm00ICQodG9wX3NyY2RpcikvbTQvbHR+b2Jzb2xldGUubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbWFsbG9jYXR0cmlidXRlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3BvcHRjb25zdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9wcmVjb21waWxlZGhlYWRlci5tNCAkKHRvcF9zcmNkaXIpL200L3F0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3Jlc3VsdHluLm00ICQodG9wX3NyY2RpcikvbTQvc3N0cmVhbS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC90eXBlZGVmLm00ICQodG9wX3NyY2RpcikvY29uZmlndXJlLmluCithbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAorCSQoQUNMT0NBTF9NNCkKK21raW5zdGFsbGRpcnMgPSAkKGluc3RhbGxfc2gpIC1kCitDT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5oCitDT05GSUdfQ0xFQU5fRklMRVMgPQorQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTID0KK1NPVVJDRVMgPQorRElTVF9TT1VSQ0VTID0KK1JFQ1VSU0lWRV9UQVJHRVRTID0gYWxsLXJlY3Vyc2l2ZSBjaGVjay1yZWN1cnNpdmUgZHZpLXJlY3Vyc2l2ZSBcCisJaHRtbC1yZWN1cnNpdmUgaW5mby1yZWN1cnNpdmUgaW5zdGFsbC1kYXRhLXJlY3Vyc2l2ZSBcCisJaW5zdGFsbC1kdmktcmVjdXJzaXZlIGluc3RhbGwtZXhlYy1yZWN1cnNpdmUgXAorCWluc3RhbGwtaHRtbC1yZWN1cnNpdmUgaW5zdGFsbC1pbmZvLXJlY3Vyc2l2ZSBcCisJaW5zdGFsbC1wZGYtcmVjdXJzaXZlIGluc3RhbGwtcHMtcmVjdXJzaXZlIGluc3RhbGwtcmVjdXJzaXZlIFwKKwlpbnN0YWxsY2hlY2stcmVjdXJzaXZlIGluc3RhbGxkaXJzLXJlY3Vyc2l2ZSBwZGYtcmVjdXJzaXZlIFwKKwlwcy1yZWN1cnNpdmUgdW5pbnN0YWxsLXJlY3Vyc2l2ZQorUkVDVVJTSVZFX0NMRUFOX1RBUkdFVFMgPSBtb3N0bHljbGVhbi1yZWN1cnNpdmUgY2xlYW4tcmVjdXJzaXZlCVwKKyAgZGlzdGNsZWFuLXJlY3Vyc2l2ZSBtYWludGFpbmVyLWNsZWFuLXJlY3Vyc2l2ZQorQU1fUkVDVVJTSVZFX1RBUkdFVFMgPSAkKFJFQ1VSU0lWRV9UQVJHRVRTOi1yZWN1cnNpdmU9KSBcCisJJChSRUNVUlNJVkVfQ0xFQU5fVEFSR0VUUzotcmVjdXJzaXZlPSkgdGFncyBUQUdTIGN0YWdzIENUQUdTIFwKKwlkaXN0ZGlyCitFVEFHUyA9IGV0YWdzCitDVEFHUyA9IGN0YWdzCitESVNUX1NVQkRJUlMgPSBqdm10aSBqdm1waQorRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKK2FtX19yZWxhdGl2aXplID0gXAorICBkaXIwPWBwd2RgOyBcCisgIHNlZF9maXJzdD0ncyxeXChbXi9dKlwpLy4qJCQsXDEsJzsgXAorICBzZWRfcmVzdD0ncyxeW14vXSovKiwsJzsgXAorICBzZWRfbGFzdD0ncyxeLiovXChbXi9dKlwpJCQsXDEsJzsgXAorICBzZWRfYnV0bGFzdD0ncywvKlteL10qJCQsLCc7IFwKKyAgd2hpbGUgdGVzdCAtbiAiJCRkaXIxIjsgZG8gXAorICAgIGZpcnN0PWBlY2hvICIkJGRpcjEiIHwgc2VkIC1lICIkJHNlZF9maXJzdCJgOyBcCisgICAgaWYgdGVzdCAiJCRmaXJzdCIgIT0gIi4iOyB0aGVuIFwKKyAgICAgIGlmIHRlc3QgIiQkZmlyc3QiID0gIi4uIjsgdGhlbiBcCisgICAgICAgIGRpcjI9YGVjaG8gIiQkZGlyMCIgfCBzZWQgLWUgIiQkc2VkX2xhc3QiYC8iJCRkaXIyIjsgXAorICAgICAgICBkaXIwPWBlY2hvICIkJGRpcjAiIHwgc2VkIC1lICIkJHNlZF9idXRsYXN0ImA7IFwKKyAgICAgIGVsc2UgXAorICAgICAgICBmaXJzdDI9YGVjaG8gIiQkZGlyMiIgfCBzZWQgLWUgIiQkc2VkX2ZpcnN0ImA7IFwKKyAgICAgICAgaWYgdGVzdCAiJCRmaXJzdDIiID0gIiQkZmlyc3QiOyB0aGVuIFwKKyAgICAgICAgICBkaXIyPWBlY2hvICIkJGRpcjIiIHwgc2VkIC1lICIkJHNlZF9yZXN0ImA7IFwKKyAgICAgICAgZWxzZSBcCisgICAgICAgICAgZGlyMj0iLi4vJCRkaXIyIjsgXAorICAgICAgICBmaTsgXAorICAgICAgICBkaXIwPSIkJGRpcjAiLyIkJGZpcnN0IjsgXAorICAgICAgZmk7IFwKKyAgICBmaTsgXAorICAgIGRpcjE9YGVjaG8gIiQkZGlyMSIgfCBzZWQgLWUgIiQkc2VkX3Jlc3QiYDsgXAorICBkb25lOyBcCisgIHJlbGRpcj0iJCRkaXIyIgorQUNMT0NBTCA9IEBBQ0xPQ0FMQAorQU1UQVIgPSBAQU1UQVJACitBUiA9IEBBUkAKK0FVVE9DT05GID0gQEFVVE9DT05GQAorQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAorQVVUT01BS0UgPSBAQVVUT01BS0VACitBV0sgPSBAQVdLQAorQkZEX0xJQlMgPSBAQkZEX0xJQlNACitDQVRfRU5UUllfRU5EID0gQENBVF9FTlRSWV9FTkRACitDQVRfRU5UUllfU1RBUlQgPSBAQ0FUX0VOVFJZX1NUQVJUQAorQ0MgPSBAQ0NACitDQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAorQ0ZMQUdTID0gQENGTEFHU0AKK0NQUCA9IEBDUFBACitDUFBGTEFHUyA9IEBDUFBGTEFHU0AKK0NYWCA9IEBDWFhACitDWFhDUFAgPSBAQ1hYQ1BQQAorQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAorQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACitDWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAorREFURSA9IEBEQVRFQAorREVGUyA9IEBERUZTQAorREVQRElSID0gQERFUERJUkAKK0RPQ0JPT0tfUk9PVCA9IEBET0NCT09LX1JPT1RACitEU1lNVVRJTCA9IEBEU1lNVVRJTEAKK0RVTVBCSU4gPSBARFVNUEJJTkAKK0VDSE9fQyA9IEBFQ0hPX0NACitFQ0hPX04gPSBARUNIT19OQAorRUNIT19UID0gQEVDSE9fVEAKK0VHUkVQID0gQEVHUkVQQAorRVhFRVhUID0gQEVYRUVYVEAKK0VYVFJBX0NGTEFHU19NT0RVTEUgPSBARVhUUkFfQ0ZMQUdTX01PRFVMRUAKK0ZHUkVQID0gQEZHUkVQQAorR1JFUCA9IEBHUkVQQAorSU5TVEFMTCA9IEBJTlNUQUxMQAorSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKK0lOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACitJTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKK0lOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACitKQVZBX0hPTUVESVIgPSBASkFWQV9IT01FRElSQAorS0lOQyA9IEBLSU5DQAorS1NSQyA9IEBLU1JDQAorS1ZFUlMgPSBAS1ZFUlNACitMRCA9IEBMREAKK0xERkxBR1MgPSBATERGTEFHU0AKK0xJQkVSVFlfTElCUyA9IEBMSUJFUlRZX0xJQlNACitMSUJPQkpTID0gQExJQk9CSlNACitMSUJTID0gQExJQlNACitMSUJUT09MID0gQExJQlRPT0xACitMSVBPID0gQExJUE9ACitMTl9TID0gQExOX1NACitMVExJQk9CSlMgPSBATFRMSUJPQkpTQAorTUFLRUlORk8gPSBATUFLRUlORk9ACitNS0RJUl9QID0gQE1LRElSX1BACitNT0MgPSBATU9DQAorTU9ESU5TVEFMTERJUiA9IEBNT0RJTlNUQUxMRElSQAorTk0gPSBATk1ACitOTUVESVQgPSBATk1FRElUQAorT0JKRFVNUCA9IEBPQkpEVU1QQAorT0JKRVhUID0gQE9CSkVYVEAKK09QUk9GSUxFX0RJUiA9IEBPUFJPRklMRV9ESVJACitPUFJPRklMRV9NT0RVTEVfQVJDSCA9IEBPUFJPRklMRV9NT0RVTEVfQVJDSEAKK09QX0NGTEFHUyA9IEBPUF9DRkxBR1NACitPUF9DWFhGTEFHUyA9IEBPUF9DWFhGTEFHU0AKK09QX0RPQ0RJUiA9IEBPUF9ET0NESVJACitPVE9PTCA9IEBPVE9PTEAKK09UT09MNjQgPSBAT1RPT0w2NEAKK1BBQ0tBR0UgPSBAUEFDS0FHRUAKK1BBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAorUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKK1BBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAorUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKK1BBQ0tBR0VfVVJMID0gQFBBQ0tBR0VfVVJMQAorUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKK1BBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAorUEtHX0NPTkZJRyA9IEBQS0dfQ09ORklHQAorUEtHX0NPTkZJR19MSUJESVIgPSBAUEtHX0NPTkZJR19MSUJESVJACitQS0dfQ09ORklHX1BBVEggPSBAUEtHX0NPTkZJR19QQVRIQAorUE9QVF9MSUJTID0gQFBPUFRfTElCU0AKK1BUUkRJRkZfVF9UWVBFID0gQFBUUkRJRkZfVF9UWVBFQAorUVRfQ0ZMQUdTID0gQFFUX0NGTEFHU0AKK1FUX0lOQ0xVREVTID0gQFFUX0lOQ0xVREVTQAorUVRfTERGTEFHUyA9IEBRVF9MREZMQUdTQAorUVRfTElCID0gQFFUX0xJQkAKK1FUX0xJQlMgPSBAUVRfTElCU0AKK1FUX1ZFUlNJT04gPSBAUVRfVkVSU0lPTkAKK1JBTkxJQiA9IEBSQU5MSUJACitTRUQgPSBAU0VEQAorU0VUX01BS0UgPSBAU0VUX01BS0VACitTSEVMTCA9IEBTSEVMTEAKK1NJWkVfVF9UWVBFID0gQFNJWkVfVF9UWVBFQAorU1RSSVAgPSBAU1RSSVBACitVSUMgPSBAVUlDQAorVUlDaGVscCA9IEBVSUNoZWxwQAorVkVSU0lPTiA9IEBWRVJTSU9OQAorWE1LTUYgPSBAWE1LTUZACitYTUxfQ0FUQUxPRyA9IEBYTUxfQ0FUQUxPR0AKK1hTTFRQUk9DID0gQFhTTFRQUk9DQAorWFNMVFBST0NfRkxBR1MgPSBAWFNMVFBST0NfRkxBR1NACitYX0NGTEFHUyA9IEBYX0NGTEFHU0AKK1hfRVhUUkFfTElCUyA9IEBYX0VYVFJBX0xJQlNACitYX0xJQlMgPSBAWF9MSUJTQAorWF9QUkVfTElCUyA9IEBYX1BSRV9MSUJTQAorYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKK2Fic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKK2Fic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKK2Fic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAorYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACithY19jdF9DWFggPSBAYWNfY3RfQ1hYQAorYWNfY3RfRFVNUEJJTiA9IEBhY19jdF9EVU1QQklOQAorYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACithbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAorYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKK2FtX190YXIgPSBAYW1fX3RhckAKK2FtX191bnRhciA9IEBhbV9fdW50YXJACitiaW5kaXIgPSBAYmluZGlyQAorYnVpbGQgPSBAYnVpbGRACitidWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AKK2J1aWxkX2NwdSA9IEBidWlsZF9jcHVACitidWlsZF9vcyA9IEBidWlsZF9vc0AKK2J1aWxkX3ZlbmRvciA9IEBidWlsZF92ZW5kb3JACitidWlsZGRpciA9IEBidWlsZGRpckAKK2RhdGFkaXIgPSBAZGF0YWRpckAKK2RhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAorZG9jZGlyID0gQGRvY2RpckAKK2R2aWRpciA9IEBkdmlkaXJACitleGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKK2hvc3QgPSBAaG9zdEAKK2hvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKK2hvc3RfY3B1ID0gQGhvc3RfY3B1QAoraG9zdF9vcyA9IEBob3N0X29zQAoraG9zdF92ZW5kb3IgPSBAaG9zdF92ZW5kb3JACitodG1sZGlyID0gQGh0bWxkaXJACitpbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACitpbmZvZGlyID0gQGluZm9kaXJACitpbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACitsaWJkaXIgPSBAbGliZGlyQAorbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAorbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKK2xvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKK2x0X0VDSE8gPSBAbHRfRUNIT0AKK21hbmRpciA9IEBtYW5kaXJACitta2Rpcl9wID0gQG1rZGlyX3BACitvbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACitwZGZkaXIgPSBAcGRmZGlyQAorcHJlZml4ID0gQHByZWZpeEAKK3Byb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKK3BzZGlyID0gQHBzZGlyQAorc2JpbmRpciA9IEBzYmluZGlyQAorc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACitzcmNkaXIgPSBAc3JjZGlyQAorc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAordGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKK3RvcF9idWlsZF9wcmVmaXggPSBAdG9wX2J1aWxkX3ByZWZpeEAKK3RvcF9idWlsZGRpciA9IEB0b3BfYnVpbGRkaXJACit0b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACit0b3BkaXIgPSBAdG9wZGlyQAorU1VCRElSUyA9ICQoYW1fX2FwcGVuZF8xKSAkKGFtX19hcHBlbmRfMikKK0lOU1RBTExfRVhFQ19IT09LID0gJChhbV9fYXBwZW5kXzMpCithbGw6IGFsbC1yZWN1cnNpdmUKKworLlNVRkZJWEVTOgorJChzcmNkaXIpL01ha2VmaWxlLmluOiAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKKwlAZm9yIGRlcCBpbiAkPzsgZG8gXAorCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCisJICAgICokJGRlcCopIFwKKwkgICAgICAoIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCApIFwKKwkgICAgICAgICYmIHsgaWYgdGVzdCAtZiAkQDsgdGhlbiBleGl0IDA7IGVsc2UgYnJlYWs7IGZpOyB9OyBcCisJICAgICAgZXhpdCAxOzsgXAorCSAgZXNhYzsgXAorCWRvbmU7IFwKKwllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gYWdlbnRzL01ha2VmaWxlJzsgXAorCSQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmIFwKKwkgICQoQVVUT01BS0UpIC0tZm9yZWlnbiBhZ2VudHMvTWFrZWZpbGUKKy5QUkVDSU9VUzogTWFrZWZpbGUKK01ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKKwlAY2FzZSAnJD8nIGluIFwKKwkgICpjb25maWcuc3RhdHVzKikgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCisJICAqKSBcCisJICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKKwllc2FjOworCiskKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKworJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6ICAkKGFtX19jb25maWd1cmVfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyQoQUNMT0NBTF9NNCk6ICAkKGFtX19hY2xvY2FsX200X2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCiskKGFtX19hY2xvY2FsX200X2RlcHMpOgorCittb3N0bHljbGVhbi1saWJ0b29sOgorCS1ybSAtZiAqLmxvCisKK2NsZWFuLWxpYnRvb2w6CisJLXJtIC1yZiAubGlicyBfbGlicworCisjIFRoaXMgZGlyZWN0b3J5J3Mgc3ViZGlyZWN0b3JpZXMgYXJlIG1vc3RseSBpbmRlcGVuZGVudDsgeW91IGNhbiBjZAorIyBpbnRvIHRoZW0gYW5kIHJ1biBgbWFrZScgd2l0aG91dCBnb2luZyB0aHJvdWdoIHRoaXMgTWFrZWZpbGUuCisjIFRvIGNoYW5nZSB0aGUgdmFsdWVzIG9mIGBtYWtlJyB2YXJpYWJsZXM6IGluc3RlYWQgb2YgZWRpdGluZyBNYWtlZmlsZXMsCisjICgxKSBpZiB0aGUgdmFyaWFibGUgaXMgc2V0IGluIGBjb25maWcuc3RhdHVzJywgZWRpdCBgY29uZmlnLnN0YXR1cycKKyMgICAgICh3aGljaCB3aWxsIGNhdXNlIHRoZSBNYWtlZmlsZXMgdG8gYmUgcmVnZW5lcmF0ZWQgd2hlbiB5b3UgcnVuIGBtYWtlJyk7CisjICgyKSBvdGhlcndpc2UsIHBhc3MgdGhlIGRlc2lyZWQgdmFsdWVzIG9uIHRoZSBgbWFrZScgY29tbWFuZCBsaW5lLgorJChSRUNVUlNJVkVfVEFSR0VUUyk6CisJQGZhaWw9IGZhaWxjb209J2V4aXQgMSc7IFwKKwlmb3IgZiBpbiB4ICQkTUFLRUZMQUdTOyBkbyBcCisJICBjYXNlICQkZiBpbiBcCisJICAgICo9KiB8IC0tWyFrXSopOzsgXAorCSAgICAqayopIGZhaWxjb209J2ZhaWw9eWVzJzs7IFwKKwkgIGVzYWM7IFwKKwlkb25lOyBcCisJZG90X3NlZW49bm87IFwKKwl0YXJnZXQ9YGVjaG8gJEAgfCBzZWQgcy8tcmVjdXJzaXZlLy9gOyBcCisJbGlzdD0nJChTVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICBlY2hvICJNYWtpbmcgJCR0YXJnZXQgaW4gJCRzdWJkaXIiOyBcCisJICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAiLiI7IHRoZW4gXAorCSAgICBkb3Rfc2Vlbj15ZXM7IFwKKwkgICAgbG9jYWxfdGFyZ2V0PSIkJHRhcmdldC1hbSI7IFwKKwkgIGVsc2UgXAorCSAgICBsb2NhbF90YXJnZXQ9IiQkdGFyZ2V0IjsgXAorCSAgZmk7IFwKKwkgICgkKGFtX19jZCkgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgJCRsb2NhbF90YXJnZXQpIFwKKwkgIHx8IGV2YWwgJCRmYWlsY29tOyBcCisJZG9uZTsgXAorCWlmIHRlc3QgIiQkZG90X3NlZW4iID0gIm5vIjsgdGhlbiBcCisJICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSAiJCR0YXJnZXQtYW0iIHx8IGV4aXQgMTsgXAorCWZpOyB0ZXN0IC16ICIkJGZhaWwiCisKKyQoUkVDVVJTSVZFX0NMRUFOX1RBUkdFVFMpOgorCUBmYWlsPSBmYWlsY29tPSdleGl0IDEnOyBcCisJZm9yIGYgaW4geCAkJE1BS0VGTEFHUzsgZG8gXAorCSAgY2FzZSAkJGYgaW4gXAorCSAgICAqPSogfCAtLVsha10qKTs7IFwKKwkgICAgKmsqKSBmYWlsY29tPSdmYWlsPXllcyc7OyBcCisJICBlc2FjOyBcCisJZG9uZTsgXAorCWRvdF9zZWVuPW5vOyBcCisJY2FzZSAiJEAiIGluIFwKKwkgIGRpc3RjbGVhbi0qIHwgbWFpbnRhaW5lci1jbGVhbi0qKSBsaXN0PSckKERJU1RfU1VCRElSUyknIDs7IFwKKwkgICopIGxpc3Q9JyQoU1VCRElSUyknIDs7IFwKKwllc2FjOyBcCisJcmV2PScnOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAorCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gIi4iOyB0aGVuIDo7IGVsc2UgXAorCSAgICByZXY9IiQkc3ViZGlyICQkcmV2IjsgXAorCSAgZmk7IFwKKwlkb25lOyBcCisJcmV2PSIkJHJldiAuIjsgXAorCXRhcmdldD1gZWNobyAkQCB8IHNlZCBzLy1yZWN1cnNpdmUvL2A7IFwKKwlmb3Igc3ViZGlyIGluICQkcmV2OyBkbyBcCisJICBlY2hvICJNYWtpbmcgJCR0YXJnZXQgaW4gJCRzdWJkaXIiOyBcCisJICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAiLiI7IHRoZW4gXAorCSAgICBsb2NhbF90YXJnZXQ9IiQkdGFyZ2V0LWFtIjsgXAorCSAgZWxzZSBcCisJICAgIGxvY2FsX3RhcmdldD0iJCR0YXJnZXQiOyBcCisJICBmaTsgXAorCSAgKCQoYW1fX2NkKSAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSAkJGxvY2FsX3RhcmdldCkgXAorCSAgfHwgZXZhbCAkJGZhaWxjb207IFwKKwlkb25lICYmIHRlc3QgLXogIiQkZmFpbCIKK3RhZ3MtcmVjdXJzaXZlOgorCWxpc3Q9JyQoU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAorCSAgdGVzdCAiJCRzdWJkaXIiID0gLiB8fCAoJChhbV9fY2QpICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIHRhZ3MpOyBcCisJZG9uZQorY3RhZ3MtcmVjdXJzaXZlOgorCWxpc3Q9JyQoU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAorCSAgdGVzdCAiJCRzdWJkaXIiID0gLiB8fCAoJChhbV9fY2QpICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGN0YWdzKTsgXAorCWRvbmUKKworSUQ6ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKExJU1ApICQoVEFHU19GSUxFUykKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKwkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKwlta2lkIC1mSUQgJCR1bmlxdWUKK3RhZ3M6IFRBR1MKKworVEFHUzogdGFncy1yZWN1cnNpdmUgJChIRUFERVJTKSAkKFNPVVJDRVMpICAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCisJCSQoVEFHU19GSUxFUykgJChMSVNQKQorCXNldCB4OyBcCisJaGVyZT1gcHdkYDsgXAorCWlmICgkKEVUQUdTKSAtLWV0YWdzLWluY2x1ZGUgLS12ZXJzaW9uKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gXAorCSAgaW5jbHVkZV9vcHRpb249LS1ldGFncy1pbmNsdWRlOyBcCisJICBlbXB0eV9maXg9LjsgXAorCWVsc2UgXAorCSAgaW5jbHVkZV9vcHRpb249LS1pbmNsdWRlOyBcCisJICBlbXB0eV9maXg9OyBcCisJZmk7IFwKKwlsaXN0PSckKFNVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKwkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9IC47IHRoZW4gOjsgZWxzZSBcCisJICAgIHRlc3QgISAtZiAkJHN1YmRpci9UQUdTIHx8IFwKKwkgICAgICBzZXQgIiQkQCIgIiQkaW5jbHVkZV9vcHRpb249JCRoZXJlLyQkc3ViZGlyL1RBR1MiOyBcCisJICBmaTsgXAorCWRvbmU7IFwKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCisJICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCisJc2hpZnQ7IFwKKwlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCQqJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAorCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAorCSAgaWYgdGVzdCAkJCMgLWd0IDA7IHRoZW4gXAorCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCisJICAgICAgIiQkQCIgJCR1bmlxdWU7IFwKKwkgIGVsc2UgXAorCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCisJICAgICAgJCR1bmlxdWU7IFwKKwkgIGZpOyBcCisJZmkKK2N0YWdzOiBDVEFHUworQ1RBR1M6IGN0YWdzLXJlY3Vyc2l2ZSAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKKwkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHVuaXF1ZSIgXAorCSAgfHwgJChDVEFHUykgJChDVEFHU0ZMQUdTKSAkKEFNX0NUQUdTRkxBR1MpICQoQ1RBR1NfQVJHUykgXAorCSAgICAgJCR1bmlxdWUKKworR1RBR1M6CisJaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKKwkgICYmICQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpIFwKKwkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgIiQkaGVyZSIKKworZGlzdGNsZWFuLXRhZ3M6CisJLXJtIC1mIFRBR1MgSUQgR1RBR1MgR1JUQUdTIEdTWU1TIEdQQVRIIHRhZ3MKKworZGlzdGRpcjogJChESVNURklMRVMpCisJQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwlsaXN0PSckKERJU1RGSUxFUyknOyBcCisJICBkaXN0X2ZpbGVzPWBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRmaWxlOyBkb25lIHwgXAorCSAgc2VkIC1lICJzfF4kJHNyY2RpcnN0cmlwL3x8O3QiIFwKKwkgICAgICAtZSAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3w7dCJgOyBcCisJY2FzZSAkJGRpc3RfZmlsZXMgaW4gXAorCSAgKi8qKSAkKE1LRElSX1ApIGBlY2hvICIkJGRpc3RfZmlsZXMiIHwgXAorCQkJICAgc2VkICcvXC8vIWQ7c3xefCQoZGlzdGRpcikvfDtzLC9bXi9dKiQkLCwnIHwgXAorCQkJICAgc29ydCAtdWAgOzsgXAorCWVzYWM7IFwKKwlmb3IgZmlsZSBpbiAkJGRpc3RfZmlsZXM7IGRvIFwKKwkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKKwkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCisJICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCisJICAgIGlmIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRmaWxlIjsgdGhlbiBcCisJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisJICAgIGZpOyBcCisJICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAorCSAgICAgIGNwIC1mcFIgJChzcmNkaXIpLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKwkgICAgZmk7IFwKKwkgICAgY3AgLWZwUiAkJGQvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorCSAgZWxzZSBcCisJICAgIHRlc3QgLWYgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGV4aXQgMTsgXAorCSAgZmk7IFwKKwlkb25lCisJQGxpc3Q9JyQoRElTVF9TVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAuOyB0aGVuIDo7IGVsc2UgXAorCSAgICB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkc3ViZGlyIiBcCisJICAgIHx8ICQoTUtESVJfUCkgIiQoZGlzdGRpcikvJCRzdWJkaXIiIFwKKwkgICAgfHwgZXhpdCAxOyBcCisJICBmaTsgXAorCWRvbmUKKwlAbGlzdD0nJChESVNUX1NVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKwkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9IC47IHRoZW4gOjsgZWxzZSBcCisJICAgIGRpcjE9JCRzdWJkaXI7IGRpcjI9IiQoZGlzdGRpcikvJCRzdWJkaXIiOyBcCisJICAgICQoYW1fX3JlbGF0aXZpemUpOyBcCisJICAgIG5ld19kaXN0ZGlyPSQkcmVsZGlyOyBcCisJICAgIGRpcjE9JCRzdWJkaXI7IGRpcjI9IiQodG9wX2Rpc3RkaXIpIjsgXAorCSAgICAkKGFtX19yZWxhdGl2aXplKTsgXAorCSAgICBuZXdfdG9wX2Rpc3RkaXI9JCRyZWxkaXI7IFwKKwkgICAgZWNobyAiIChjZCAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSB0b3BfZGlzdGRpcj0iJCRuZXdfdG9wX2Rpc3RkaXIiIGRpc3RkaXI9IiQkbmV3X2Rpc3RkaXIiIFxcIjsgXAorCSAgICBlY2hvICIgICAgIGFtX19yZW1vdmVfZGlzdGRpcj06IGFtX19za2lwX2xlbmd0aF9jaGVjaz06IGFtX19za2lwX21vZGVfZml4PTogZGlzdGRpcikiOyBcCisJICAgICgkKGFtX19jZCkgJCRzdWJkaXIgJiYgXAorCSAgICAgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIFwKKwkgICAgICAgIHRvcF9kaXN0ZGlyPSIkJG5ld190b3BfZGlzdGRpciIgXAorCSAgICAgICAgZGlzdGRpcj0iJCRuZXdfZGlzdGRpciIgXAorCQlhbV9fcmVtb3ZlX2Rpc3RkaXI9OiBcCisJCWFtX19za2lwX2xlbmd0aF9jaGVjaz06IFwKKwkJYW1fX3NraXBfbW9kZV9maXg9OiBcCisJICAgICAgICBkaXN0ZGlyKSBcCisJICAgICAgfHwgZXhpdCAxOyBcCisJICBmaTsgXAorCWRvbmUKK2NoZWNrLWFtOiBhbGwtYW0KK2NoZWNrOiBjaGVjay1yZWN1cnNpdmUKK2FsbC1hbTogTWFrZWZpbGUKK2luc3RhbGxkaXJzOiBpbnN0YWxsZGlycy1yZWN1cnNpdmUKK2luc3RhbGxkaXJzLWFtOgoraW5zdGFsbDogaW5zdGFsbC1yZWN1cnNpdmUKK2luc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLXJlY3Vyc2l2ZQoraW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtcmVjdXJzaXZlCit1bmluc3RhbGw6IHVuaW5zdGFsbC1yZWN1cnNpdmUKKworaW5zdGFsbC1hbTogYWxsLWFtCisJQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KKworaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stcmVjdXJzaXZlCitpbnN0YWxsLXN0cmlwOgorCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisJICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKKwkgIGB0ZXN0IC16ICckKFNUUklQKScgfHwgXAorCSAgICBlY2hvICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknImAgaW5zdGFsbAorbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKKworY2xlYW4tZ2VuZXJpYzoKKworZGlzdGNsZWFuLWdlbmVyaWM6CisJLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCisJLXRlc3QgLiA9ICIkKHNyY2RpcikiIHx8IHRlc3QgLXogIiQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpCisKK21haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKKwlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCisJQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgorY2xlYW46IGNsZWFuLXJlY3Vyc2l2ZQorCitjbGVhbi1hbTogY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIG1vc3RseWNsZWFuLWFtCisKK2Rpc3RjbGVhbjogZGlzdGNsZWFuLXJlY3Vyc2l2ZQorCS1ybSAtZiBNYWtlZmlsZQorZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4tdGFncworCitkdmk6IGR2aS1yZWN1cnNpdmUKKworZHZpLWFtOgorCitodG1sOiBodG1sLXJlY3Vyc2l2ZQorCitodG1sLWFtOgorCitpbmZvOiBpbmZvLXJlY3Vyc2l2ZQorCitpbmZvLWFtOgorCitpbnN0YWxsLWRhdGEtYW06CisKK2luc3RhbGwtZHZpOiBpbnN0YWxsLWR2aS1yZWN1cnNpdmUKKworaW5zdGFsbC1kdmktYW06CisKK2luc3RhbGwtZXhlYy1hbToKKwlAJChOT1JNQUxfSU5TVEFMTCkKKwkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtaG9vaworaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtcmVjdXJzaXZlCisKK2luc3RhbGwtaHRtbC1hbToKKworaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tcmVjdXJzaXZlCisKK2luc3RhbGwtaW5mby1hbToKKworaW5zdGFsbC1tYW46CisKK2luc3RhbGwtcGRmOiBpbnN0YWxsLXBkZi1yZWN1cnNpdmUKKworaW5zdGFsbC1wZGYtYW06CisKK2luc3RhbGwtcHM6IGluc3RhbGwtcHMtcmVjdXJzaXZlCisKK2luc3RhbGwtcHMtYW06CisKK2luc3RhbGxjaGVjay1hbToKKworbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1yZWN1cnNpdmUKKwktcm0gLWYgTWFrZWZpbGUKK21haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKKworbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLXJlY3Vyc2l2ZQorCittb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sCisKK3BkZjogcGRmLXJlY3Vyc2l2ZQorCitwZGYtYW06CisKK3BzOiBwcy1yZWN1cnNpdmUKKworcHMtYW06CisKK3VuaW5zdGFsbC1hbToKKworLk1BS0U6ICQoUkVDVVJTSVZFX0NMRUFOX1RBUkdFVFMpICQoUkVDVVJTSVZFX1RBUkdFVFMpIGN0YWdzLXJlY3Vyc2l2ZSBcCisJaW5zdGFsbC1hbSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1zdHJpcCB0YWdzLXJlY3Vyc2l2ZQorCisuUEhPTlk6ICQoUkVDVVJTSVZFX0NMRUFOX1RBUkdFVFMpICQoUkVDVVJTSVZFX1RBUkdFVFMpIENUQUdTIEdUQUdTIFwKKwlhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBcCisJY3RhZ3MgY3RhZ3MtcmVjdXJzaXZlIGRpc3RjbGVhbiBkaXN0Y2xlYW4tZ2VuZXJpYyBcCisJZGlzdGNsZWFuLWxpYnRvb2wgZGlzdGNsZWFuLXRhZ3MgZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgXAorCWh0bWwtYW0gaW5mbyBpbmZvLWFtIGluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgXAorCWluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBpbnN0YWxsLWR2aS1hbSBpbnN0YWxsLWV4ZWMgXAorCWluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWV4ZWMtaG9vayBpbnN0YWxsLWh0bWwgaW5zdGFsbC1odG1sLWFtIFwKKwlpbnN0YWxsLWluZm8gaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIGluc3RhbGwtcGRmIFwKKwlpbnN0YWxsLXBkZi1hbSBpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gaW5zdGFsbC1zdHJpcCBcCisJaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBpbnN0YWxsZGlycy1hbSBcCisJbWFpbnRhaW5lci1jbGVhbiBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gXAorCW1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBwZGYgcGRmLWFtIHBzIHBzLWFtIFwKKwl0YWdzIHRhZ3MtcmVjdXJzaXZlIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0KKworCitfX2luc3RhbGwtZXhlYy1ob29rOgorCUBnZXRlbnQgcGFzc3dkIG9wcm9maWxlID4vZGV2L251bGwgfHwgKCBcCisJZWNobyAiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiIgOyBcCisJZWNobyAiKiAgICBXQVJOSU5HOiIgOyBcCisJZWNobyAiKiAgICAgIENyZWF0ZSB0aGUgJ29wcm9maWxlJyB1c2VyIGFjY291bnQgdG8gZW5hYmxlIHByb2ZpbGluZyBvZiBKSVRlZCBjb2RlLiIgOyBcCisJZWNobyAiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiIpIDsKKwlAZ2V0ZW50IGdyb3VwIG9wcm9maWxlID4vZGV2L251bGwgfHwgICggXAorCWVjaG8gIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioiIDsgXAorCWVjaG8gIiogICAgV0FSTklORzoiIDsgXAorCWVjaG8gIiogICAgICBDcmVhdGUgdGhlICdvcHJvZmlsZScgZ3JvdXAgdG8gZW5hYmxlIHByb2ZpbGluZyBvZiBKSVRlZCBjb2RlLiIgOyBcCisJZWNobyAiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiIpIDsKKwlAdGVzdCAteiBgaWQgLWduIG9wcm9maWxlIDI+L2Rldi9udWxsYCB8fCBcCisJdGVzdCBgaWQgLWduIG9wcm9maWxlIDI+L2Rldi9udWxsYCA9ICJvcHJvZmlsZSIgfHwgKCBcCisJZWNobyAiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiIgOyBcCisJZWNobyAiKiAgICBXQVJOSU5HOiIgOyBcCisJZWNobyAiKiAgICAgIFRoZSBzcGVjaWFsIHVzZXIgJ29wcm9maWxlJyBtdXN0IGhhdmUgdGhlIGRlZmF1bHQgZ3JvdXAgc2V0IHRvICdvcHJvZmlsZScuIiA7IFwKKwllY2hvICIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIikgOworCitpbnN0YWxsLWV4ZWMtaG9vazogJChJTlNUQUxMX0VYRUNfSE9PSykKKworIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KKyMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgorLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvYWdlbnRzL2p2bXBpL01ha2VmaWxlLmFtIGIvb3Byb2ZpbGUtMC45LjcvYWdlbnRzL2p2bXBpL01ha2VmaWxlLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlNmJiNmUKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9hZ2VudHMvanZtcGkvTWFrZWZpbGUuYW0KQEAgLTAsMCArMSwxMiBAQAorcGtnbGliX0xUTElCUkFSSUVTID0gbGlianZtcGlfb3Byb2ZpbGUubGEKKworbGlianZtcGlfb3Byb2ZpbGVfbGFfQ1hYRkxBR1MgPSAtVyAtV2FsbCAtZlBJQworCitsaWJqdm1waV9vcHJvZmlsZV9sYV9TT1VSQ0VTID0ganZtcGlfb3Byb2ZpbGUuY3BwCisKK2xpYmp2bXBpX29wcm9maWxlX2xhX0xJQkFERCA9IC4uLy4uL2xpYm9wYWdlbnQvbGlib3BhZ2VudC5sYQorCitBTV9DUFBGTEFHUyA9IFwKKyAgICAgICAtSSAke3RvcF9zcmNkaXJ9L2xpYm9wYWdlbnQgXAorICAgICAgIC1JIEBKQVZBX0hPTUVESVJAL2luY2x1ZGUgXAorICAgICAgIC1JIEBKQVZBX0hPTUVESVJAL2luY2x1ZGUvbGludXgKZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2FnZW50cy9qdm1waS9NYWtlZmlsZS5pbiBiL29wcm9maWxlLTAuOS43L2FnZW50cy9qdm1waS9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjBmNTRhCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvYWdlbnRzL2p2bXBpL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsNTkxIEBACisjIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjExLjEgZnJvbSBNYWtlZmlsZS5hbS4KKyMgQGNvbmZpZ3VyZV9pbnB1dEAKKworIyBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsCisjIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyMgSW5jLgorIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAorIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCisjIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworQFNFVF9NQUtFQAorCitWUEFUSCA9IEBzcmNkaXJACitwa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKK3BrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAorcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAorcGtnbGliZXhlY2RpciA9ICQobGliZXhlY2RpcikvQFBBQ0tBR0VACithbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCitpbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAoraW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYworaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCitJTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQordHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQorTk9STUFMX0lOU1RBTEwgPSA6CitQUkVfSU5TVEFMTCA9IDoKK1BPU1RfSU5TVEFMTCA9IDoKK05PUk1BTF9VTklOU1RBTEwgPSA6CitQUkVfVU5JTlNUQUxMID0gOgorUE9TVF9VTklOU1RBTEwgPSA6CitidWlsZF90cmlwbGV0ID0gQGJ1aWxkQAoraG9zdF90cmlwbGV0ID0gQGhvc3RACitzdWJkaXIgPSBhZ2VudHMvanZtcGkKK0RJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmFtICQoc3JjZGlyKS9NYWtlZmlsZS5pbgorQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAorYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvbTQvYmludXRpbHMubTQgXAorCSQodG9wX3NyY2RpcikvbTQvYnVpbHRpbmV4cGVjdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jZWxsc3B1YmZkc3VwcG9ydC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jb21waWxlcm9wdGlvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jb25maWdtb2R1bGUubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY29weWlmY2hhbmdlLm00ICQodG9wX3NyY2RpcikvbTQvZG9jYm9vay5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9leHRyYWRpcnMubTQgJCh0b3Bfc3JjZGlyKS9tNC9maW5ka2VybmVsLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2tlcm5lbG9wdGlvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9rZXJuZWx2ZXJzaW9uLm00ICQodG9wX3NyY2RpcikvbTQvbGlidG9vbC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9sdG9wdGlvbnMubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdHN1Z2FyLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2x0dmVyc2lvbi5tNCAkKHRvcF9zcmNkaXIpL200L2x0fm9ic29sZXRlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L21hbGxvY2F0dHJpYnV0ZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9wb3B0Y29uc3QubTQgXAorCSQodG9wX3NyY2RpcikvbTQvcHJlY29tcGlsZWRoZWFkZXIubTQgJCh0b3Bfc3JjZGlyKS9tNC9xdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9yZXN1bHR5bi5tNCAkKHRvcF9zcmNkaXIpL200L3NzdHJlYW0ubTQgXAorCSQodG9wX3NyY2RpcikvbTQvdHlwZWRlZi5tNCAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5pbgorYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKKwkkKEFDTE9DQUxfTTQpCitta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAorQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAorQ09ORklHX0NMRUFOX0ZJTEVTID0KK0NPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9CithbV9fdnBhdGhfYWRqX3NldHVwID0gc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3N8LnwufGcnYDsKK2FtX192cGF0aF9hZGogPSBjYXNlICQkcCBpbiBcCisgICAgJChzcmNkaXIpLyopIGY9YGVjaG8gIiQkcCIgfCBzZWQgInN8XiQkc3JjZGlyc3RyaXAvfHwiYDs7IFwKKyAgICAqKSBmPSQkcDs7IFwKKyAgZXNhYzsKK2FtX19zdHJpcF9kaXIgPSBmPWBlY2hvICQkcCB8IHNlZCAtZSAnc3xeLiovfHwnYDsKK2FtX19pbnN0YWxsX21heCA9IDQwCithbV9fbm9iYXNlX3N0cmlwX3NldHVwID0gXAorICBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqfF0vXFxcXCYvZydgCithbV9fbm9iYXNlX3N0cmlwID0gXAorICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCI7IGRvbmUgfCBzZWQgLWUgInN8JCRzcmNkaXJzdHJpcC98fCIKK2FtX19ub2Jhc2VfbGlzdCA9ICQoYW1fX25vYmFzZV9zdHJpcF9zZXR1cCk7IFwKKyAgZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAgJCRwIjsgZG9uZSB8IFwKKyAgc2VkICJzfCAkJHNyY2RpcnN0cmlwL3wgfDsiJyAvIC4qXC8vIXMvIC4qLyAuLzsgcyxcKCAuKlwpL1teL10qJCQsXDEsJyB8IFwKKyAgJChBV0spICdCRUdJTiB7IGZpbGVzWyIuIl0gPSAiIiB9IHsgZmlsZXNbJCQyXSA9IGZpbGVzWyQkMl0gIiAiICQkMTsgXAorICAgIGlmICgrK25bJCQyXSA9PSAkKGFtX19pbnN0YWxsX21heCkpIFwKKyAgICAgIHsgcHJpbnQgJCQyLCBmaWxlc1skJDJdOyBuWyQkMl0gPSAwOyBmaWxlc1skJDJdID0gIiIgfSB9IFwKKyAgICBFTkQgeyBmb3IgKGRpciBpbiBmaWxlcykgcHJpbnQgZGlyLCBmaWxlc1tkaXJdIH0nCithbV9fYmFzZV9saXN0ID0gXAorICBzZWQgJyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47cy9cbi8gL2cnIHwgXAorICBzZWQgJyQkIU47JCQhTjskJCFOOyQkIU47cy9cbi8gL2cnCithbV9faW5zdGFsbGRpcnMgPSAiJChERVNURElSKSQocGtnbGliZGlyKSIKK0xUTElCUkFSSUVTID0gJChwa2dsaWJfTFRMSUJSQVJJRVMpCitsaWJqdm1waV9vcHJvZmlsZV9sYV9ERVBFTkRFTkNJRVMgPSAuLi8uLi9saWJvcGFnZW50L2xpYm9wYWdlbnQubGEKK2FtX2xpYmp2bXBpX29wcm9maWxlX2xhX09CSkVDVFMgPSAgXAorCWxpYmp2bXBpX29wcm9maWxlX2xhLWp2bXBpX29wcm9maWxlLmxvCitsaWJqdm1waV9vcHJvZmlsZV9sYV9PQkpFQ1RTID0gJChhbV9saWJqdm1waV9vcHJvZmlsZV9sYV9PQkpFQ1RTKQorbGlianZtcGlfb3Byb2ZpbGVfbGFfTElOSyA9ICQoTElCVE9PTCkgLS10YWc9Q1hYICQoQU1fTElCVE9PTEZMQUdTKSBcCisJJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ1hYTEQpIFwKKwkkKGxpYmp2bXBpX29wcm9maWxlX2xhX0NYWEZMQUdTKSAkKENYWEZMQUdTKSAkKEFNX0xERkxBR1MpIFwKKwkkKExERkxBR1MpIC1vICRACitERUZBVUxUX0lOQ0xVREVTID0gLUkuQGFtX19pc3JjQCAtSSQodG9wX2J1aWxkZGlyKQorZGVwY29tcCA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvZGVwY29tcAorYW1fX2RlcGZpbGVzX21heWJlID0gZGVwZmlsZXMKK2FtX19tdiA9IG12IC1mCitDWFhDT01QSUxFID0gJChDWFgpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSBcCisJJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DWFhGTEFHUykgJChDWFhGTEFHUykKK0xUQ1hYQ09NUElMRSA9ICQoTElCVE9PTCkgLS10YWc9Q1hYICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgXAorCS0tbW9kZT1jb21waWxlICQoQ1hYKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgXAorCSQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ1hYRkxBR1MpICQoQ1hYRkxBR1MpCitDWFhMRCA9ICQoQ1hYKQorQ1hYTElOSyA9ICQoTElCVE9PTCkgLS10YWc9Q1hYICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgXAorCS0tbW9kZT1saW5rICQoQ1hYTEQpICQoQU1fQ1hYRkxBR1MpICQoQ1hYRkxBR1MpICQoQU1fTERGTEFHUykgXAorCSQoTERGTEFHUykgLW8gJEAKK1NPVVJDRVMgPSAkKGxpYmp2bXBpX29wcm9maWxlX2xhX1NPVVJDRVMpCitESVNUX1NPVVJDRVMgPSAkKGxpYmp2bXBpX29wcm9maWxlX2xhX1NPVVJDRVMpCitFVEFHUyA9IGV0YWdzCitDVEFHUyA9IGN0YWdzCitESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQorQUNMT0NBTCA9IEBBQ0xPQ0FMQAorQU1UQVIgPSBAQU1UQVJACitBUiA9IEBBUkAKK0FVVE9DT05GID0gQEFVVE9DT05GQAorQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAorQVVUT01BS0UgPSBAQVVUT01BS0VACitBV0sgPSBAQVdLQAorQkZEX0xJQlMgPSBAQkZEX0xJQlNACitDQVRfRU5UUllfRU5EID0gQENBVF9FTlRSWV9FTkRACitDQVRfRU5UUllfU1RBUlQgPSBAQ0FUX0VOVFJZX1NUQVJUQAorQ0MgPSBAQ0NACitDQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAorQ0ZMQUdTID0gQENGTEFHU0AKK0NQUCA9IEBDUFBACitDUFBGTEFHUyA9IEBDUFBGTEFHU0AKK0NYWCA9IEBDWFhACitDWFhDUFAgPSBAQ1hYQ1BQQAorQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAorQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACitDWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAorREFURSA9IEBEQVRFQAorREVGUyA9IEBERUZTQAorREVQRElSID0gQERFUERJUkAKK0RPQ0JPT0tfUk9PVCA9IEBET0NCT09LX1JPT1RACitEU1lNVVRJTCA9IEBEU1lNVVRJTEAKK0RVTVBCSU4gPSBARFVNUEJJTkAKK0VDSE9fQyA9IEBFQ0hPX0NACitFQ0hPX04gPSBARUNIT19OQAorRUNIT19UID0gQEVDSE9fVEAKK0VHUkVQID0gQEVHUkVQQAorRVhFRVhUID0gQEVYRUVYVEAKK0VYVFJBX0NGTEFHU19NT0RVTEUgPSBARVhUUkFfQ0ZMQUdTX01PRFVMRUAKK0ZHUkVQID0gQEZHUkVQQAorR1JFUCA9IEBHUkVQQAorSU5TVEFMTCA9IEBJTlNUQUxMQAorSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKK0lOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACitJTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKK0lOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACitKQVZBX0hPTUVESVIgPSBASkFWQV9IT01FRElSQAorS0lOQyA9IEBLSU5DQAorS1NSQyA9IEBLU1JDQAorS1ZFUlMgPSBAS1ZFUlNACitMRCA9IEBMREAKK0xERkxBR1MgPSBATERGTEFHU0AKK0xJQkVSVFlfTElCUyA9IEBMSUJFUlRZX0xJQlNACitMSUJPQkpTID0gQExJQk9CSlNACitMSUJTID0gQExJQlNACitMSUJUT09MID0gQExJQlRPT0xACitMSVBPID0gQExJUE9ACitMTl9TID0gQExOX1NACitMVExJQk9CSlMgPSBATFRMSUJPQkpTQAorTUFLRUlORk8gPSBATUFLRUlORk9ACitNS0RJUl9QID0gQE1LRElSX1BACitNT0MgPSBATU9DQAorTU9ESU5TVEFMTERJUiA9IEBNT0RJTlNUQUxMRElSQAorTk0gPSBATk1ACitOTUVESVQgPSBATk1FRElUQAorT0JKRFVNUCA9IEBPQkpEVU1QQAorT0JKRVhUID0gQE9CSkVYVEAKK09QUk9GSUxFX0RJUiA9IEBPUFJPRklMRV9ESVJACitPUFJPRklMRV9NT0RVTEVfQVJDSCA9IEBPUFJPRklMRV9NT0RVTEVfQVJDSEAKK09QX0NGTEFHUyA9IEBPUF9DRkxBR1NACitPUF9DWFhGTEFHUyA9IEBPUF9DWFhGTEFHU0AKK09QX0RPQ0RJUiA9IEBPUF9ET0NESVJACitPVE9PTCA9IEBPVE9PTEAKK09UT09MNjQgPSBAT1RPT0w2NEAKK1BBQ0tBR0UgPSBAUEFDS0FHRUAKK1BBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAorUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKK1BBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAorUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKK1BBQ0tBR0VfVVJMID0gQFBBQ0tBR0VfVVJMQAorUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKK1BBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAorUEtHX0NPTkZJRyA9IEBQS0dfQ09ORklHQAorUEtHX0NPTkZJR19MSUJESVIgPSBAUEtHX0NPTkZJR19MSUJESVJACitQS0dfQ09ORklHX1BBVEggPSBAUEtHX0NPTkZJR19QQVRIQAorUE9QVF9MSUJTID0gQFBPUFRfTElCU0AKK1BUUkRJRkZfVF9UWVBFID0gQFBUUkRJRkZfVF9UWVBFQAorUVRfQ0ZMQUdTID0gQFFUX0NGTEFHU0AKK1FUX0lOQ0xVREVTID0gQFFUX0lOQ0xVREVTQAorUVRfTERGTEFHUyA9IEBRVF9MREZMQUdTQAorUVRfTElCID0gQFFUX0xJQkAKK1FUX0xJQlMgPSBAUVRfTElCU0AKK1FUX1ZFUlNJT04gPSBAUVRfVkVSU0lPTkAKK1JBTkxJQiA9IEBSQU5MSUJACitTRUQgPSBAU0VEQAorU0VUX01BS0UgPSBAU0VUX01BS0VACitTSEVMTCA9IEBTSEVMTEAKK1NJWkVfVF9UWVBFID0gQFNJWkVfVF9UWVBFQAorU1RSSVAgPSBAU1RSSVBACitVSUMgPSBAVUlDQAorVUlDaGVscCA9IEBVSUNoZWxwQAorVkVSU0lPTiA9IEBWRVJTSU9OQAorWE1LTUYgPSBAWE1LTUZACitYTUxfQ0FUQUxPRyA9IEBYTUxfQ0FUQUxPR0AKK1hTTFRQUk9DID0gQFhTTFRQUk9DQAorWFNMVFBST0NfRkxBR1MgPSBAWFNMVFBST0NfRkxBR1NACitYX0NGTEFHUyA9IEBYX0NGTEFHU0AKK1hfRVhUUkFfTElCUyA9IEBYX0VYVFJBX0xJQlNACitYX0xJQlMgPSBAWF9MSUJTQAorWF9QUkVfTElCUyA9IEBYX1BSRV9MSUJTQAorYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKK2Fic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKK2Fic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKK2Fic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAorYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACithY19jdF9DWFggPSBAYWNfY3RfQ1hYQAorYWNfY3RfRFVNUEJJTiA9IEBhY19jdF9EVU1QQklOQAorYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACithbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAorYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKK2FtX190YXIgPSBAYW1fX3RhckAKK2FtX191bnRhciA9IEBhbV9fdW50YXJACitiaW5kaXIgPSBAYmluZGlyQAorYnVpbGQgPSBAYnVpbGRACitidWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AKK2J1aWxkX2NwdSA9IEBidWlsZF9jcHVACitidWlsZF9vcyA9IEBidWlsZF9vc0AKK2J1aWxkX3ZlbmRvciA9IEBidWlsZF92ZW5kb3JACitidWlsZGRpciA9IEBidWlsZGRpckAKK2RhdGFkaXIgPSBAZGF0YWRpckAKK2RhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAorZG9jZGlyID0gQGRvY2RpckAKK2R2aWRpciA9IEBkdmlkaXJACitleGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKK2hvc3QgPSBAaG9zdEAKK2hvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKK2hvc3RfY3B1ID0gQGhvc3RfY3B1QAoraG9zdF9vcyA9IEBob3N0X29zQAoraG9zdF92ZW5kb3IgPSBAaG9zdF92ZW5kb3JACitodG1sZGlyID0gQGh0bWxkaXJACitpbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACitpbmZvZGlyID0gQGluZm9kaXJACitpbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACitsaWJkaXIgPSBAbGliZGlyQAorbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAorbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKK2xvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKK2x0X0VDSE8gPSBAbHRfRUNIT0AKK21hbmRpciA9IEBtYW5kaXJACitta2Rpcl9wID0gQG1rZGlyX3BACitvbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACitwZGZkaXIgPSBAcGRmZGlyQAorcHJlZml4ID0gQHByZWZpeEAKK3Byb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKK3BzZGlyID0gQHBzZGlyQAorc2JpbmRpciA9IEBzYmluZGlyQAorc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACitzcmNkaXIgPSBAc3JjZGlyQAorc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAordGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKK3RvcF9idWlsZF9wcmVmaXggPSBAdG9wX2J1aWxkX3ByZWZpeEAKK3RvcF9idWlsZGRpciA9IEB0b3BfYnVpbGRkaXJACit0b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACit0b3BkaXIgPSBAdG9wZGlyQAorcGtnbGliX0xUTElCUkFSSUVTID0gbGlianZtcGlfb3Byb2ZpbGUubGEKK2xpYmp2bXBpX29wcm9maWxlX2xhX0NYWEZMQUdTID0gLVcgLVdhbGwgLWZQSUMKK2xpYmp2bXBpX29wcm9maWxlX2xhX1NPVVJDRVMgPSBqdm1waV9vcHJvZmlsZS5jcHAKK2xpYmp2bXBpX29wcm9maWxlX2xhX0xJQkFERCA9IC4uLy4uL2xpYm9wYWdlbnQvbGlib3BhZ2VudC5sYQorQU1fQ1BQRkxBR1MgPSBcCisgICAgICAgLUkgJHt0b3Bfc3JjZGlyfS9saWJvcGFnZW50IFwKKyAgICAgICAtSSBASkFWQV9IT01FRElSQC9pbmNsdWRlIFwKKyAgICAgICAtSSBASkFWQV9IT01FRElSQC9pbmNsdWRlL2xpbnV4CisKK2FsbDogYWxsLWFtCisKKy5TVUZGSVhFUzoKKy5TVUZGSVhFUzogLmNwcCAubG8gLm8gLm9iagorJChzcmNkaXIpL01ha2VmaWxlLmluOiAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKKwlAZm9yIGRlcCBpbiAkPzsgZG8gXAorCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCisJICAgICokJGRlcCopIFwKKwkgICAgICAoIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCApIFwKKwkgICAgICAgICYmIHsgaWYgdGVzdCAtZiAkQDsgdGhlbiBleGl0IDA7IGVsc2UgYnJlYWs7IGZpOyB9OyBcCisJICAgICAgZXhpdCAxOzsgXAorCSAgZXNhYzsgXAorCWRvbmU7IFwKKwllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gYWdlbnRzL2p2bXBpL01ha2VmaWxlJzsgXAorCSQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmIFwKKwkgICQoQVVUT01BS0UpIC0tZm9yZWlnbiBhZ2VudHMvanZtcGkvTWFrZWZpbGUKKy5QUkVDSU9VUzogTWFrZWZpbGUKK01ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKKwlAY2FzZSAnJD8nIGluIFwKKwkgICpjb25maWcuc3RhdHVzKikgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCisJICAqKSBcCisJICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKKwllc2FjOworCiskKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKworJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6ICAkKGFtX19jb25maWd1cmVfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyQoQUNMT0NBTF9NNCk6ICAkKGFtX19hY2xvY2FsX200X2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCiskKGFtX19hY2xvY2FsX200X2RlcHMpOgoraW5zdGFsbC1wa2dsaWJMVExJQlJBUklFUzogJChwa2dsaWJfTFRMSUJSQVJJRVMpCisJQCQoTk9STUFMX0lOU1RBTEwpCisJdGVzdCAteiAiJChwa2dsaWJkaXIpIiB8fCAkKE1LRElSX1ApICIkKERFU1RESVIpJChwa2dsaWJkaXIpIgorCUBsaXN0PSckKHBrZ2xpYl9MVExJQlJBUklFUyknOyB0ZXN0IC1uICIkKHBrZ2xpYmRpcikiIHx8IGxpc3Q9OyBcCisJbGlzdDI9OyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwkgIGlmIHRlc3QgLWYgJCRwOyB0aGVuIFwKKwkgICAgbGlzdDI9IiQkbGlzdDIgJCRwIjsgXAorCSAgZWxzZSA6OyBmaTsgXAorCWRvbmU7IFwKKwl0ZXN0IC16ICIkJGxpc3QyIiB8fCB7IFwKKwkgIGVjaG8gIiAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWluc3RhbGwgJChJTlNUQUxMKSAkKElOU1RBTExfU1RSSVBfRkxBRykgJCRsaXN0MiAnJChERVNURElSKSQocGtnbGliZGlyKSciOyBcCisJICAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWluc3RhbGwgJChJTlNUQUxMKSAkKElOU1RBTExfU1RSSVBfRkxBRykgJCRsaXN0MiAiJChERVNURElSKSQocGtnbGliZGlyKSI7IFwKKwl9CisKK3VuaW5zdGFsbC1wa2dsaWJMVExJQlJBUklFUzoKKwlAJChOT1JNQUxfVU5JTlNUQUxMKQorCUBsaXN0PSckKHBrZ2xpYl9MVExJQlJBUklFUyknOyB0ZXN0IC1uICIkKHBrZ2xpYmRpcikiIHx8IGxpc3Q9OyBcCisJZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJICAkKGFtX19zdHJpcF9kaXIpIFwKKwkgIGVjaG8gIiAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPXVuaW5zdGFsbCBybSAtZiAnJChERVNURElSKSQocGtnbGliZGlyKS8kJGYnIjsgXAorCSAgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT11bmluc3RhbGwgcm0gLWYgIiQoREVTVERJUikkKHBrZ2xpYmRpcikvJCRmIjsgXAorCWRvbmUKKworY2xlYW4tcGtnbGliTFRMSUJSQVJJRVM6CisJLXRlc3QgLXogIiQocGtnbGliX0xUTElCUkFSSUVTKSIgfHwgcm0gLWYgJChwa2dsaWJfTFRMSUJSQVJJRVMpCisJQGxpc3Q9JyQocGtnbGliX0xUTElCUkFSSUVTKSc7IGZvciBwIGluICQkbGlzdDsgZG8gXAorCSAgZGlyPSJgZWNobyAkJHAgfCBzZWQgLWUgJ3N8L1teL10qJCR8fCdgIjsgXAorCSAgdGVzdCAiJCRkaXIiICE9ICIkJHAiIHx8IGRpcj0uOyBcCisJICBlY2hvICJybSAtZiBcIiQke2Rpcn0vc29fbG9jYXRpb25zXCIiOyBcCisJICBybSAtZiAiJCR7ZGlyfS9zb19sb2NhdGlvbnMiOyBcCisJZG9uZQorbGlianZtcGlfb3Byb2ZpbGUubGE6ICQobGlianZtcGlfb3Byb2ZpbGVfbGFfT0JKRUNUUykgJChsaWJqdm1waV9vcHJvZmlsZV9sYV9ERVBFTkRFTkNJRVMpIAorCSQobGlianZtcGlfb3Byb2ZpbGVfbGFfTElOSykgLXJwYXRoICQocGtnbGliZGlyKSAkKGxpYmp2bXBpX29wcm9maWxlX2xhX09CSkVDVFMpICQobGlianZtcGlfb3Byb2ZpbGVfbGFfTElCQUREKSAkKExJQlMpCisKK21vc3RseWNsZWFuLWNvbXBpbGU6CisJLXJtIC1mICouJChPQkpFWFQpCisKK2Rpc3RjbGVhbi1jb21waWxlOgorCS1ybSAtZiAqLnRhYi5jCisKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJqdm1waV9vcHJvZmlsZV9sYS1qdm1waV9vcHJvZmlsZS5QbG9AYW1fX3F1b3RlQAorCisuY3BwLm86CitAYW1fX2Zhc3RkZXBDWFhfVFJVRUAJJChDWFhDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCAkPAorQGFtX19mYXN0ZGVwQ1hYX1RSVUVACSQoYW1fX212KSAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENYWF9GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENYWERFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAkkKENYWENPTVBJTEUpIC1jIC1vICRAICQ8CisKKy5jcHAub2JqOgorQGFtX19mYXN0ZGVwQ1hYX1RSVUVACSQoQ1hYQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYAorQGFtX19mYXN0ZGVwQ1hYX1RSVUVACSQoYW1fX212KSAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENYWF9GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENYWERFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAkkKENYWENPTVBJTEUpIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKKworLmNwcC5sbzoKK0BhbV9fZmFzdGRlcENYWF9UUlVFQAkkKExUQ1hYQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgJDwKK0BhbV9fZmFzdGRlcENYWF9UUlVFQAkkKGFtX19tdikgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENYWF9GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENYWERFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAkkKExUQ1hYQ09NUElMRSkgLWMgLW8gJEAgJDwKKworbGlianZtcGlfb3Byb2ZpbGVfbGEtanZtcGlfb3Byb2ZpbGUubG86IGp2bXBpX29wcm9maWxlLmNwcAorQGFtX19mYXN0ZGVwQ1hYX1RSVUVACSQoTElCVE9PTCkgIC0tdGFnPUNYWCAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ1hYKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJqdm1waV9vcHJvZmlsZV9sYV9DWFhGTEFHUykgJChDWFhGTEFHUykgLU1UIGxpYmp2bXBpX29wcm9maWxlX2xhLWp2bXBpX29wcm9maWxlLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJqdm1waV9vcHJvZmlsZV9sYS1qdm1waV9vcHJvZmlsZS5UcG8gLWMgLW8gbGlianZtcGlfb3Byb2ZpbGVfbGEtanZtcGlfb3Byb2ZpbGUubG8gYHRlc3QgLWYgJ2p2bXBpX29wcm9maWxlLmNwcCcgfHwgZWNobyAnJChzcmNkaXIpLydganZtcGlfb3Byb2ZpbGUuY3BwCitAYW1fX2Zhc3RkZXBDWFhfVFJVRUAJJChhbV9fbXYpICQoREVQRElSKS9saWJqdm1waV9vcHJvZmlsZV9sYS1qdm1waV9vcHJvZmlsZS5UcG8gJChERVBESVIpL2xpYmp2bXBpX29wcm9maWxlX2xhLWp2bXBpX29wcm9maWxlLlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAlzb3VyY2U9J2p2bXBpX29wcm9maWxlLmNwcCcgb2JqZWN0PSdsaWJqdm1waV9vcHJvZmlsZV9sYS1qdm1waV9vcHJvZmlsZS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ1hYREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACSQoTElCVE9PTCkgIC0tdGFnPUNYWCAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ1hYKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJqdm1waV9vcHJvZmlsZV9sYV9DWFhGTEFHUykgJChDWFhGTEFHUykgLWMgLW8gbGlianZtcGlfb3Byb2ZpbGVfbGEtanZtcGlfb3Byb2ZpbGUubG8gYHRlc3QgLWYgJ2p2bXBpX29wcm9maWxlLmNwcCcgfHwgZWNobyAnJChzcmNkaXIpLydganZtcGlfb3Byb2ZpbGUuY3BwCisKK21vc3RseWNsZWFuLWxpYnRvb2w6CisJLXJtIC1mICoubG8KKworY2xlYW4tbGlidG9vbDoKKwktcm0gLXJmIC5saWJzIF9saWJzCisKK0lEOiAkKEhFQURFUlMpICQoU09VUkNFUykgJChMSVNQKSAkKFRBR1NfRklMRVMpCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCisJICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCisJbWtpZCAtZklEICQkdW5pcXVlCit0YWdzOiBUQUdTCisKK1RBR1M6ICAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKKwkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCisJc2V0IHg7IFwKKwloZXJlPWBwd2RgOyBcCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorCXNoaWZ0OyBcCisJaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkKiQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKKwkgIHRlc3QgLW4gIiQkdW5pcXVlIiB8fCB1bmlxdWU9JCRlbXB0eV9maXg7IFwKKwkgIGlmIHRlc3QgJCQjIC1ndCAwOyB0aGVuIFwKKwkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAorCSAgICAgICIkJEAiICQkdW5pcXVlOyBcCisJICBlbHNlIFwKKwkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAorCSAgICAgICQkdW5pcXVlOyBcCisJICBmaTsgXAorCWZpCitjdGFnczogQ1RBR1MKK0NUQUdTOiAgJChIRUFERVJTKSAkKFNPVVJDRVMpICAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCisJCSQoVEFHU19GSUxFUykgJChMSVNQKQorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKwkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKwl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR1bmlxdWUiIFwKKwkgIHx8ICQoQ1RBR1MpICQoQ1RBR1NGTEFHUykgJChBTV9DVEFHU0ZMQUdTKSAkKENUQUdTX0FSR1MpIFwKKwkgICAgICQkdW5pcXVlCisKK0dUQUdTOgorCWhlcmU9YCQoYW1fX2NkKSAkKHRvcF9idWlsZGRpcikgJiYgcHdkYCBcCisJICAmJiAkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSBcCisJICAmJiBndGFncyAtaSAkKEdUQUdTX0FSR1MpICIkJGhlcmUiCisKK2Rpc3RjbGVhbi10YWdzOgorCS1ybSAtZiBUQUdTIElEIEdUQUdTIEdSVEFHUyBHU1lNUyBHUEFUSCB0YWdzCisKK2Rpc3RkaXI6ICQoRElTVEZJTEVTKQorCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisJbGlzdD0nJChESVNURklMRVMpJzsgXAorCSAgZGlzdF9maWxlcz1gZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8IFwKKwkgIHNlZCAtZSAic3xeJCRzcmNkaXJzdHJpcC98fDt0IiBcCisJICAgICAgLWUgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98O3QiYDsgXAorCWNhc2UgJCRkaXN0X2ZpbGVzIGluIFwKKwkgICovKikgJChNS0RJUl9QKSBgZWNobyAiJCRkaXN0X2ZpbGVzIiB8IFwKKwkJCSAgIHNlZCAnL1wvLyFkO3N8XnwkKGRpc3RkaXIpL3w7cywvW14vXSokJCwsJyB8IFwKKwkJCSAgIHNvcnQgLXVgIDs7IFwKKwllc2FjOyBcCisJZm9yIGZpbGUgaW4gJCRkaXN0X2ZpbGVzOyBkbyBcCisJICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCisJICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAorCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAorCSAgICBpZiB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkZmlsZSI7IHRoZW4gXAorCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAorCSAgICBmaTsgXAorCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKKwkgICAgICBjcCAtZnBSICQoc3JjZGlyKS8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCisJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisJICAgIGZpOyBcCisJICAgIGNwIC1mcFIgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKKwkgIGVsc2UgXAorCSAgICB0ZXN0IC1mICIkKGRpc3RkaXIpLyQkZmlsZSIgXAorCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICIkKGRpc3RkaXIpLyQkZmlsZSIgXAorCSAgICB8fCBleGl0IDE7IFwKKwkgIGZpOyBcCisJZG9uZQorY2hlY2stYW06IGFsbC1hbQorY2hlY2s6IGNoZWNrLWFtCithbGwtYW06IE1ha2VmaWxlICQoTFRMSUJSQVJJRVMpCitpbnN0YWxsZGlyczoKKwlmb3IgZGlyIGluICIkKERFU1RESVIpJChwa2dsaWJkaXIpIjsgZG8gXAorCSAgdGVzdCAteiAiJCRkaXIiIHx8ICQoTUtESVJfUCkgIiQkZGlyIjsgXAorCWRvbmUKK2luc3RhbGw6IGluc3RhbGwtYW0KK2luc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLWFtCitpbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1hbQordW5pbnN0YWxsOiB1bmluc3RhbGwtYW0KKworaW5zdGFsbC1hbTogYWxsLWFtCisJQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KKworaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KK2luc3RhbGwtc3RyaXA6CisJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKKwkgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorCSAgYHRlc3QgLXogJyQoU1RSSVApJyB8fCBcCisJICAgIGVjaG8gIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciYCBpbnN0YWxsCittb3N0bHljbGVhbi1nZW5lcmljOgorCitjbGVhbi1nZW5lcmljOgorCitkaXN0Y2xlYW4tZ2VuZXJpYzoKKwktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKKwktdGVzdCAuID0gIiQoc3JjZGlyKSIgfHwgdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykKKworbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgorCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKKwlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCitjbGVhbjogY2xlYW4tYW0KKworY2xlYW4tYW06IGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBjbGVhbi1wa2dsaWJMVExJQlJBUklFUyBcCisJbW9zdGx5Y2xlYW4tYW0KKworZGlzdGNsZWFuOiBkaXN0Y2xlYW4tYW0KKwktcm0gLXJmIC4vJChERVBESVIpCisJLXJtIC1mIE1ha2VmaWxlCitkaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKKwlkaXN0Y2xlYW4tdGFncworCitkdmk6IGR2aS1hbQorCitkdmktYW06CisKK2h0bWw6IGh0bWwtYW0KKworaHRtbC1hbToKKworaW5mbzogaW5mby1hbQorCitpbmZvLWFtOgorCitpbnN0YWxsLWRhdGEtYW06CisKK2luc3RhbGwtZHZpOiBpbnN0YWxsLWR2aS1hbQorCitpbnN0YWxsLWR2aS1hbToKKworaW5zdGFsbC1leGVjLWFtOiBpbnN0YWxsLXBrZ2xpYkxUTElCUkFSSUVTCisKK2luc3RhbGwtaHRtbDogaW5zdGFsbC1odG1sLWFtCisKK2luc3RhbGwtaHRtbC1hbToKKworaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KKworaW5zdGFsbC1pbmZvLWFtOgorCitpbnN0YWxsLW1hbjoKKworaW5zdGFsbC1wZGY6IGluc3RhbGwtcGRmLWFtCisKK2luc3RhbGwtcGRmLWFtOgorCitpbnN0YWxsLXBzOiBpbnN0YWxsLXBzLWFtCisKK2luc3RhbGwtcHMtYW06CisKK2luc3RhbGxjaGVjay1hbToKKworbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1hbQorCS1ybSAtcmYgLi8kKERFUERJUikKKwktcm0gLWYgTWFrZWZpbGUKK21haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKKworbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLWFtCisKK21vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgXAorCW1vc3RseWNsZWFuLWxpYnRvb2wKKworcGRmOiBwZGYtYW0KKworcGRmLWFtOgorCitwczogcHMtYW0KKworcHMtYW06CisKK3VuaW5zdGFsbC1hbTogdW5pbnN0YWxsLXBrZ2xpYkxUTElCUkFSSUVTCisKKy5NQUtFOiBpbnN0YWxsLWFtIGluc3RhbGwtc3RyaXAKKworLlBIT05ZOiBDVEFHUyBHVEFHUyBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgXAorCWNsZWFuLWxpYnRvb2wgY2xlYW4tcGtnbGliTFRMSUJSQVJJRVMgY3RhZ3MgZGlzdGNsZWFuIFwKKwlkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4tbGlidG9vbCBcCisJZGlzdGNsZWFuLXRhZ3MgZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgaHRtbC1hbSBpbmZvIGluZm8tYW0gXAorCWluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZHZpIFwKKwlpbnN0YWxsLWR2aS1hbSBpbnN0YWxsLWV4ZWMgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaHRtbCBcCisJaW5zdGFsbC1odG1sLWFtIGluc3RhbGwtaW5mbyBpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gXAorCWluc3RhbGwtcGRmIGluc3RhbGwtcGRmLWFtIGluc3RhbGwtcGtnbGliTFRMSUJSQVJJRVMgXAorCWluc3RhbGwtcHMgaW5zdGFsbC1wcy1hbSBpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBcCisJaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIG1haW50YWluZXItY2xlYW4gXAorCW1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBtb3N0bHljbGVhbi1jb21waWxlIFwKKwltb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wgcGRmIHBkZi1hbSBwcyBwcy1hbSBcCisJdGFncyB1bmluc3RhbGwgdW5pbnN0YWxsLWFtIHVuaW5zdGFsbC1wa2dsaWJMVExJQlJBUklFUworCisKKyMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCisjIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KKy5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2FnZW50cy9qdm1waS9qdm1waV9vcHJvZmlsZS5jcHAgYi9vcHJvZmlsZS0wLjkuNy9hZ2VudHMvanZtcGkvanZtcGlfb3Byb2ZpbGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwMDY2N2YKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9hZ2VudHMvanZtcGkvanZtcGlfb3Byb2ZpbGUuY3BwCkBAIC0wLDAgKzEsMjM5IEBACisvKioKKyAqIEBmaWxlIGp2bXBpX29wcm9maWxlLmNwcAorICogSlZNUEkgYWdlbnQgaW1wbGVtZW50YXRpb24gdG8gcmVwb3J0IGppdHRlZCBKVk0gY29kZSB0byBPUHJvZmlsZQorICoKKyAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDcgT1Byb2ZpbGUgYXV0aG9ycworICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqIEBhdXRob3IgTWF5bmFyZCBKb2huc29uCisgKgorICogQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDA3CisgKgorICovCisKKyNpbmNsdWRlIDxpb3N0cmVhbT4KKyNpbmNsdWRlIDxtYXA+CisjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPGNzdHJpbmc+CisjaW5jbHVkZSA8c3RkZXhjZXB0PgorI2luY2x1ZGUgPGNlcnJubz4KKworZXh0ZXJuICJDIiB7CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8anZtcGkuaD4KKyNpbmNsdWRlIDxvcGFnZW50Lmg+Cit9CisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisKK3N0YXRpYyBib29sIGRlYnVnID0gZmFsc2U7CitzdGF0aWMgb3BfYWdlbnRfdCBhZ2VudF9oZGw7CisKK2NsYXNzIGNsYXNzX2RldGFpbHMgeworcHVibGljOgorCXN0cmluZyBuYW1lOworCW1hcDxqbWV0aG9kSUQsIHN0cmluZz4gbWV0aG9kX25hbWVzOworCW1hcDxqbWV0aG9kSUQsIHN0cmluZz4gbWV0aG9kX3NpZ25hdHVyZXM7Cit9OworCisKK3N0YXRpYyBwdGhyZWFkX211dGV4X3QgY2xhc3NfbWFwX211dGV4ID0gUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUjsKK3N0YXRpYyBtYXAgPGpvYmplY3RJRCwgY2xhc3NfZGV0YWlscz4gbG9hZGVkX2NsYXNzZXM7CisKK3ZvaWQgY2xhc3NfbG9hZChKVk1QSV9FdmVudCAqIGV2ZW50KQoreworCWNsYXNzX2RldGFpbHMgY2xzOworCWNscy5uYW1lID0gZXZlbnQtPnUuY2xhc3NfbG9hZC5jbGFzc19uYW1lOworCUpWTVBJX01ldGhvZCAqIHBhc3NlZF9tZXRob2RzID0gZXZlbnQtPnUuY2xhc3NfbG9hZC5tZXRob2RzOworCWZvciAoaW50IGkgPSAwOyBpIDwgZXZlbnQtPnUuY2xhc3NfbG9hZC5udW1fbWV0aG9kczsKKwkgICAgIGkrKywgcGFzc2VkX21ldGhvZHMrKykgeworCQljbHMubWV0aG9kX25hbWVzW3Bhc3NlZF9tZXRob2RzLT5tZXRob2RfaWRdID0KKwkJCXBhc3NlZF9tZXRob2RzLT5tZXRob2RfbmFtZTsKKwkJY2xzLm1ldGhvZF9zaWduYXR1cmVzW3Bhc3NlZF9tZXRob2RzLT5tZXRob2RfaWRdID0KKwkJCXBhc3NlZF9tZXRob2RzLT5tZXRob2Rfc2lnbmF0dXJlOworCX0KKworCXB0aHJlYWRfbXV0ZXhfbG9jaygmY2xhc3NfbWFwX211dGV4KTsKKwlsb2FkZWRfY2xhc3Nlc1tldmVudC0+dS5jbGFzc19sb2FkLmNsYXNzX2lkXSA9IGNsczsKKwlwdGhyZWFkX211dGV4X3VubG9jaygmY2xhc3NfbWFwX211dGV4KTsKK30KKwordm9pZCBjbGFzc191bmxvYWQoSlZNUElfRXZlbnQgKiBldmVudCkKK3sKKwlwdGhyZWFkX211dGV4X2xvY2soJmNsYXNzX21hcF9tdXRleCk7CisJbG9hZGVkX2NsYXNzZXMuZXJhc2UoZXZlbnQtPnUuY2xhc3NfbG9hZC5jbGFzc19pZCk7CisJcHRocmVhZF9tdXRleF91bmxvY2soJmNsYXNzX21hcF9tdXRleCk7Cit9CisKK0pWTVBJX0ludGVyZmFjZSAqIGp2bXBpOworCit2b2lkIGNvbXBpbGVkX21ldGhvZF9sb2FkKEpWTVBJX0V2ZW50ICogZXZlbnQpCit7CisJam1ldGhvZElEIG1ldGhvZCA9IGV2ZW50LT51LmNvbXBpbGVkX21ldGhvZF9sb2FkLm1ldGhvZF9pZDsKKwl2b2lkICogY29kZV9hZGRyID0gIGV2ZW50LT51LmNvbXBpbGVkX21ldGhvZF9sb2FkLmNvZGVfYWRkcjsKKwlqaW50IGNvZGVfc2l6ZSA9ICBldmVudC0+dS5jb21waWxlZF9tZXRob2RfbG9hZC5jb2RlX3NpemU7CisKKwlqdm1waS0+RGlzYWJsZUdDKCk7CisJIC8qIEdldCB0aGUgY2xhc3Mgb2YgdGhlIG1ldGhvZCAqLworCWpvYmplY3RJRCBjbGFzc0lEID0ganZtcGktPkdldE1ldGhvZENsYXNzKG1ldGhvZCk7CisJanZtcGktPkVuYWJsZUdDKCk7CisKKwlwdGhyZWFkX211dGV4X2xvY2soJmNsYXNzX21hcF9tdXRleCk7CisJbWFwPGpvYmplY3RJRCwgY2xhc3NfZGV0YWlscz46Oml0ZXJhdG9yIGl0ZXIgPQorCQlsb2FkZWRfY2xhc3Nlcy5maW5kKGNsYXNzSUQpOworCWlmIChpdGVyID09IGxvYWRlZF9jbGFzc2VzLmVuZCgpKSB7CisJCXRocm93IHJ1bnRpbWVfZXJyb3IoIkVycm9yOiBDYW5ub3QgZmluZCBjbGFzcyBmb3IgY29tcGlsZWQiCisJCQkJICAgICIgbWV0aG9kXG4iKTsKKwl9CisKKwljbGFzc19kZXRhaWxzIGNsc19pbmZvID0gKChjbGFzc19kZXRhaWxzKWl0ZXItPnNlY29uZCk7CisJbWFwPGptZXRob2RJRCwgc3RyaW5nPjo6aXRlcmF0b3IgbWV0aG9kX2l0ID0KKwkJY2xzX2luZm8ubWV0aG9kX25hbWVzLmZpbmQobWV0aG9kKTsKKwlpZiAobWV0aG9kX2l0ID09IGNsc19pbmZvLm1ldGhvZF9uYW1lcy5lbmQoKSkgeworCQl0aHJvdyBydW50aW1lX2Vycm9yKCJFcnJvcjogQ2Fubm90IGZpbmQgbWV0aG9kIG5hbWUgZm9yICIKKwkJCQkgICAgImNvbXBpbGVkIG1ldGhvZFxuIik7CisJfQorCWNoYXIgY29uc3QgKiBtZXRob2RfbmFtZSA9ICgoc3RyaW5nKW1ldGhvZF9pdC0+c2Vjb25kKS5jX3N0cigpOworCW1ldGhvZF9pdCA9IGNsc19pbmZvLm1ldGhvZF9zaWduYXR1cmVzLmZpbmQobWV0aG9kKTsKKwlpZiAobWV0aG9kX2l0ID09IGNsc19pbmZvLm1ldGhvZF9zaWduYXR1cmVzLmVuZCgpKSB7CisJCXRocm93IHJ1bnRpbWVfZXJyb3IoIkVycm9yOiBDYW5ub3QgZmluZCBtZXRob2Qgc2lnbmF0dXJlICIKKwkJCQkgICAgImZvciBjb21waWxlZCBtZXRob2RcbiIpOworCX0KKwljaGFyIGNvbnN0ICogbWV0aG9kX3NpZ25hdHVyZSA9ICgoc3RyaW5nKW1ldGhvZF9pdC0+c2Vjb25kKS5jX3N0cigpOworCisJc3RyaW5nIGNvbnN0IGNsYXNzX3NpZ25hdHVyZSA9ICJMIiArIGNsc19pbmZvLm5hbWUgKyAiOyI7CisJcHRocmVhZF9tdXRleF91bmxvY2soJmNsYXNzX21hcF9tdXRleCk7CisKKwlpZiAoZGVidWcpIHsKKwkJY2VyciA8PCAibG9hZDogY2xhc3M9IiA8PCBjbGFzc19zaWduYXR1cmUgPDwgIiwgbWV0aG9kID0iCisJCSAgICAgPDwgbWV0aG9kX25hbWUgPDwgIiwgbWV0aG9kIHNpZ25hdHVyZSA9ICIKKwkJICAgICA8PCBtZXRob2Rfc2lnbmF0dXJlCisJCSAgICAgPDwgIiwgYWRkcj0iIDw8IGNvZGVfYWRkciA8PCAiLCBzaXplPSIKKwkJICAgICA8PCBjb2RlX3NpemUgPDwgZW5kbDsKKwl9CisKKwkvLyBwcm9kdWNlIGEgc3ltYm9sIG5hbWUgb3V0IG9mIGNsYXNzIG5hbWUgYW5kIG1ldGhvZCBuYW1lCisJaW50IGNudCA9IHN0cmxlbihtZXRob2RfbmFtZSkgKyBzdHJsZW4oY2xhc3Nfc2lnbmF0dXJlLmNfc3RyKCkpICsKKwkJc3RybGVuKG1ldGhvZF9zaWduYXR1cmUpICsgMjsKKwljaGFyIGJ1ZltjbnRdOworCXN0cm5jcHkoYnVmLCBjbGFzc19zaWduYXR1cmUuY19zdHIoKSwgY250IC0gMSk7CisJc3RybmNhdChidWYsIG1ldGhvZF9uYW1lLCBjbnQgLSBzdHJsZW4oYnVmKSAtIDEpOworCXN0cm5jYXQoYnVmLCBtZXRob2Rfc2lnbmF0dXJlLCBjbnQgLSBzdHJsZW4oYnVmKSAtIDEpOworCWlmIChvcF93cml0ZV9uYXRpdmVfY29kZShhZ2VudF9oZGwsIGJ1ZiwgKHVpbnQ2NF90KSBjb2RlX2FkZHIsCisJCQkJIGNvZGVfYWRkciwgY29kZV9zaXplKSkKKwkJcGVycm9yKCJFcnJvcjogb3Bfd3JpdGVfbmF0aXZlX2NvZGUoKSIpOworfQorCit2b2lkIGNvbXBpbGVkX21ldGhvZF91bmxvYWQoSlZNUElfRXZlbnQgKiBldmVudCkKK3sKKwl2b2lkICogY29kZV9hZGRyID0gIGV2ZW50LT51LmNvbXBpbGVkX21ldGhvZF9sb2FkLmNvZGVfYWRkcjsKKwlpZiAoZGVidWcpIHsKKwkJY2VyciA8PCAidW5sb2FkOiBhZGRyPSIKKwkJCTw8ICh1bnNpZ25lZCBsb25nIGxvbmcpICh1aW50cHRyX3QpIGNvZGVfYWRkcgorCQkJPDwgZW5kbDsKKwl9CisJaWYgKG9wX3VubG9hZF9uYXRpdmVfY29kZShhZ2VudF9oZGwsICh1aW50NjRfdCljb2RlX2FkZHIpKQorCQlwZXJyb3IoIkVycm9yOiBvcF91bmxvYWRfbmF0aXZlX2NvZGUoKSIpOworfQorCit2b2lkIGp2bV9zaHV0ZG93bihKVk1QSV9FdmVudCAqIGV2ZW50KQoreworCS8qIENoZWNraW5nIGV2ZW50IGhlcmUgaXMgbm90IHJlYWxseSBuZWNlc3Nhcnk7IGFkZGVkIG9ubHkgdG8gc2lsZW5jZQorCSAqIHRoZSAndW51c2VkIHBhcmFtZXRlcicgY29tcGlsZXIgd2FybmluZy4KKwkgKi8KKwlpZiAoZXZlbnQpCisJCWlmIChvcF9jbG9zZV9hZ2VudChhZ2VudF9oZGwpKQorCQkJcGVycm9yKCJFcnJvcjogb3BfY2xvc2VfYWdlbnQoKSIpOworfQorCisKK3ZvaWQganZtX25vdGlmeV9ldmVudChKVk1QSV9FdmVudCAqIGV2ZW50KQoreworCXN3aXRjaCAoZXZlbnQtPmV2ZW50X3R5cGUpIHsKKwljYXNlIEpWTVBJX0VWRU5UX0NPTVBJTEVEX01FVEhPRF9MT0FEOgorCQljb21waWxlZF9tZXRob2RfbG9hZChldmVudCk7CisJCWJyZWFrOworCWNhc2UgSlZNUElfRVZFTlRfQ09NUElMRURfTUVUSE9EX1VOTE9BRDoKKwkJY29tcGlsZWRfbWV0aG9kX3VubG9hZChldmVudCk7CisJCWJyZWFrOworCWNhc2UgSlZNUElfRVZFTlRfSlZNX1NIVVRfRE9XTjoKKwkJanZtX3NodXRkb3duKGV2ZW50KTsKKwkJYnJlYWs7CisJY2FzZSBKVk1QSV9FVkVOVF9DTEFTU19MT0FEOgorCQljbGFzc19sb2FkKGV2ZW50KTsKKwkJYnJlYWs7CisJY2FzZSBKVk1QSV9FVkVOVF9DTEFTU19VTkxPQUQ6CisJCWNsYXNzX3VubG9hZChldmVudCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KK30KKworZXh0ZXJuICJDIiB7CitKTklFWFBPUlQgamludCBKTklDQUxMIEpWTV9PbkxvYWQoSmF2YVZNICoganZtLCBjaGFyICogb3B0aW9ucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICogcmVzZXJ2ZWQpCit7CisJaW50IGVycjsKKworCWlmIChvcHRpb25zICYmIHN0cnN0cihvcHRpb25zLCAidmVyc2lvbiIpKSB7CisJCWNlcnIgPDwgImp2bXBpX29wcm9maWxlOiBjdXJyZW50IGxpYm9wYWdlbnQgdmVyc2lvbiAiCisJCQkJIDw8IG9wX21ham9yX3ZlcnNpb24oKSA8PCAiLiIgPDwgb3BfbWlub3JfdmVyc2lvbigpCisJCQkJIDw8IGVuZGw7CisJCXRocm93IHJ1bnRpbWVfZXJyb3IoIkV4aXRpbmciKTsKKwl9CisKKwlpZiAob3B0aW9ucyAmJiBzdHJzdHIob3B0aW9ucywgImRlYnVnPXllcyIpKSB7CisJCWRlYnVnID0gdHJ1ZTsKKwkJLyogQWRkIHNvbWV0aGluZyBicmFpbmRlYWQgdG8gc2lsZW5jZSB0aGUgJ3VudXNlZCBwYXJhbWV0ZXInCisJCSAqIGNvbXBpbGVyIHdhcm5pbmcuCisJCSAqLworCQlpZiAocmVzZXJ2ZWQpCisJCQlkZWJ1ZyA9IHRydWU7CisJfQorCisJaWYgKGRlYnVnKQorCQljZXJyIDw8ICJqdm1waV9vcHJvZmlsZTogYWdlbnQgYWN0aXZhdGVkIiA8PCBlbmRsOworCisJYWdlbnRfaGRsID0gb3Bfb3Blbl9hZ2VudCgpOworCWlmICghYWdlbnRfaGRsKSB7CisJCXBlcnJvcigiRXJyb3I6IG9wX29wZW5fYWdlbnQoKSIpOworCQl0aHJvdyBydW50aW1lX2Vycm9yKCJFeGl0aW5nIik7CisJfQorCisJLyogVGhlIHVuaW9uIGJlbG93IGlzIHVzZWQgdG8gYXZvaWQgdGhlICdkZXJlZmVyZW5jaW5nIHR5cGUtcHVubmVkCisJICogcG9pbnRlciB3aWxsIGJyZWFrIHN0cmljdC1hbGlhc2luZyBydWxlcycgY29tcGlsZXIgd2FybmluZyBvbiB0aGUKKwkgKiBHZXRFbnYgY2FsbC4KKwkgKi8KKwl1bmlvbiB7CisJCUpWTVBJX0ludGVyZmFjZSAqIGp2bXBpX2lmYzsKKwkJdm9pZCAqIGp2bXBpX2lmY19wdHI7CisJfSBqdm1waV9HZXRFbnZfYXJnOworCWVyciA9IGp2bS0+R2V0RW52KCZqdm1waV9HZXRFbnZfYXJnLmp2bXBpX2lmY19wdHIsIEpWTVBJX1ZFUlNJT05fMSk7CisJaWYgKGVyciA8IDApIHsKKwkJY2VyciA8PCAiR2V0RW52IGZhaWxlZCB3aXRoIHJjPSIgPDwgZXJyIDw8IGVuZGw7CisJCXRocm93IHJ1bnRpbWVfZXJyb3IoIkV4aXRpbmciKTsKKwl9CisJanZtcGkgPSBqdm1waV9HZXRFbnZfYXJnLmp2bXBpX2lmYzsKKwlqdm1waS0+RW5hYmxlRXZlbnQoSlZNUElfRVZFTlRfQ09NUElMRURfTUVUSE9EX0xPQUQsIE5VTEwpOworCWp2bXBpLT5FbmFibGVFdmVudChKVk1QSV9FVkVOVF9DT01QSUxFRF9NRVRIT0RfVU5MT0FELCBOVUxMKTsKKwlqdm1waS0+RW5hYmxlRXZlbnQoSlZNUElfRVZFTlRfSlZNX1NIVVRfRE9XTiwgTlVMTCk7CisJanZtcGktPkVuYWJsZUV2ZW50KEpWTVBJX0VWRU5UX0NMQVNTX0xPQUQsIE5VTEwpOworCisJanZtcGktPk5vdGlmeUV2ZW50ID0ganZtX25vdGlmeV9ldmVudDsKKwlyZXR1cm4gSk5JX09LOworfQorfQpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvYWdlbnRzL2p2bXRpL01ha2VmaWxlLmFtIGIvb3Byb2ZpbGUtMC45LjcvYWdlbnRzL2p2bXRpL01ha2VmaWxlLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5YTkwYTQKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9hZ2VudHMvanZtdGkvTWFrZWZpbGUuYW0KQEAgLTAsMCArMSwxNCBAQAorQU1fQ0ZMQUdTID0gQE9QX0NGTEFHU0AKKworcGtnbGliX0xUTElCUkFSSUVTID0gbGlianZtdGlfb3Byb2ZpbGUubGEKKworbGlianZtdGlfb3Byb2ZpbGVfbGFfQ0ZMQUdTID0gJChBTV9DRkxBR1MpIC1mUElDCisKK2xpYmp2bXRpX29wcm9maWxlX2xhX0xJQkFERCA9IC4uLy4uL2xpYm9wYWdlbnQvbGlib3BhZ2VudC5sYQorCitsaWJqdm10aV9vcHJvZmlsZV9sYV9TT1VSQ0VTID0gbGlianZtdGlfb3Byb2ZpbGUuYworCitBTV9DUFBGTEFHUyA9IFwKKyAgICAgICAtSSAke3RvcF9zcmNkaXJ9L2xpYm9wYWdlbnQgXAorICAgICAgIC1JIEBKQVZBX0hPTUVESVJAL2luY2x1ZGUgXAorICAgICAgIC1JIEBKQVZBX0hPTUVESVJAL2luY2x1ZGUvbGludXgKZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2FnZW50cy9qdm10aS9NYWtlZmlsZS5pbiBiL29wcm9maWxlLTAuOS43L2FnZW50cy9qdm10aS9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZmIyNWEwCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvYWdlbnRzL2p2bXRpL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsNTkyIEBACisjIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjExLjEgZnJvbSBNYWtlZmlsZS5hbS4KKyMgQGNvbmZpZ3VyZV9pbnB1dEAKKworIyBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsCisjIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyMgSW5jLgorIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAorIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCisjIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworQFNFVF9NQUtFQAorCitWUEFUSCA9IEBzcmNkaXJACitwa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKK3BrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAorcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAorcGtnbGliZXhlY2RpciA9ICQobGliZXhlY2RpcikvQFBBQ0tBR0VACithbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCitpbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAoraW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYworaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCitJTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQordHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQorTk9STUFMX0lOU1RBTEwgPSA6CitQUkVfSU5TVEFMTCA9IDoKK1BPU1RfSU5TVEFMTCA9IDoKK05PUk1BTF9VTklOU1RBTEwgPSA6CitQUkVfVU5JTlNUQUxMID0gOgorUE9TVF9VTklOU1RBTEwgPSA6CitidWlsZF90cmlwbGV0ID0gQGJ1aWxkQAoraG9zdF90cmlwbGV0ID0gQGhvc3RACitzdWJkaXIgPSBhZ2VudHMvanZtdGkKK0RJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmFtICQoc3JjZGlyKS9NYWtlZmlsZS5pbgorQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAorYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvbTQvYmludXRpbHMubTQgXAorCSQodG9wX3NyY2RpcikvbTQvYnVpbHRpbmV4cGVjdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jZWxsc3B1YmZkc3VwcG9ydC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jb21waWxlcm9wdGlvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jb25maWdtb2R1bGUubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY29weWlmY2hhbmdlLm00ICQodG9wX3NyY2RpcikvbTQvZG9jYm9vay5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9leHRyYWRpcnMubTQgJCh0b3Bfc3JjZGlyKS9tNC9maW5ka2VybmVsLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2tlcm5lbG9wdGlvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9rZXJuZWx2ZXJzaW9uLm00ICQodG9wX3NyY2RpcikvbTQvbGlidG9vbC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9sdG9wdGlvbnMubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdHN1Z2FyLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2x0dmVyc2lvbi5tNCAkKHRvcF9zcmNkaXIpL200L2x0fm9ic29sZXRlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L21hbGxvY2F0dHJpYnV0ZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9wb3B0Y29uc3QubTQgXAorCSQodG9wX3NyY2RpcikvbTQvcHJlY29tcGlsZWRoZWFkZXIubTQgJCh0b3Bfc3JjZGlyKS9tNC9xdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9yZXN1bHR5bi5tNCAkKHRvcF9zcmNkaXIpL200L3NzdHJlYW0ubTQgXAorCSQodG9wX3NyY2RpcikvbTQvdHlwZWRlZi5tNCAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5pbgorYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKKwkkKEFDTE9DQUxfTTQpCitta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAorQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAorQ09ORklHX0NMRUFOX0ZJTEVTID0KK0NPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9CithbV9fdnBhdGhfYWRqX3NldHVwID0gc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3N8LnwufGcnYDsKK2FtX192cGF0aF9hZGogPSBjYXNlICQkcCBpbiBcCisgICAgJChzcmNkaXIpLyopIGY9YGVjaG8gIiQkcCIgfCBzZWQgInN8XiQkc3JjZGlyc3RyaXAvfHwiYDs7IFwKKyAgICAqKSBmPSQkcDs7IFwKKyAgZXNhYzsKK2FtX19zdHJpcF9kaXIgPSBmPWBlY2hvICQkcCB8IHNlZCAtZSAnc3xeLiovfHwnYDsKK2FtX19pbnN0YWxsX21heCA9IDQwCithbV9fbm9iYXNlX3N0cmlwX3NldHVwID0gXAorICBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqfF0vXFxcXCYvZydgCithbV9fbm9iYXNlX3N0cmlwID0gXAorICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCI7IGRvbmUgfCBzZWQgLWUgInN8JCRzcmNkaXJzdHJpcC98fCIKK2FtX19ub2Jhc2VfbGlzdCA9ICQoYW1fX25vYmFzZV9zdHJpcF9zZXR1cCk7IFwKKyAgZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAgJCRwIjsgZG9uZSB8IFwKKyAgc2VkICJzfCAkJHNyY2RpcnN0cmlwL3wgfDsiJyAvIC4qXC8vIXMvIC4qLyAuLzsgcyxcKCAuKlwpL1teL10qJCQsXDEsJyB8IFwKKyAgJChBV0spICdCRUdJTiB7IGZpbGVzWyIuIl0gPSAiIiB9IHsgZmlsZXNbJCQyXSA9IGZpbGVzWyQkMl0gIiAiICQkMTsgXAorICAgIGlmICgrK25bJCQyXSA9PSAkKGFtX19pbnN0YWxsX21heCkpIFwKKyAgICAgIHsgcHJpbnQgJCQyLCBmaWxlc1skJDJdOyBuWyQkMl0gPSAwOyBmaWxlc1skJDJdID0gIiIgfSB9IFwKKyAgICBFTkQgeyBmb3IgKGRpciBpbiBmaWxlcykgcHJpbnQgZGlyLCBmaWxlc1tkaXJdIH0nCithbV9fYmFzZV9saXN0ID0gXAorICBzZWQgJyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47cy9cbi8gL2cnIHwgXAorICBzZWQgJyQkIU47JCQhTjskJCFOOyQkIU47cy9cbi8gL2cnCithbV9faW5zdGFsbGRpcnMgPSAiJChERVNURElSKSQocGtnbGliZGlyKSIKK0xUTElCUkFSSUVTID0gJChwa2dsaWJfTFRMSUJSQVJJRVMpCitsaWJqdm10aV9vcHJvZmlsZV9sYV9ERVBFTkRFTkNJRVMgPSAuLi8uLi9saWJvcGFnZW50L2xpYm9wYWdlbnQubGEKK2FtX2xpYmp2bXRpX29wcm9maWxlX2xhX09CSkVDVFMgPSAgXAorCWxpYmp2bXRpX29wcm9maWxlX2xhLWxpYmp2bXRpX29wcm9maWxlLmxvCitsaWJqdm10aV9vcHJvZmlsZV9sYV9PQkpFQ1RTID0gJChhbV9saWJqdm10aV9vcHJvZmlsZV9sYV9PQkpFQ1RTKQorbGlianZtdGlfb3Byb2ZpbGVfbGFfTElOSyA9ICQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKKwkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSBcCisJJChsaWJqdm10aV9vcHJvZmlsZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAkKEFNX0xERkxBR1MpIFwKKwkkKExERkxBR1MpIC1vICRACitERUZBVUxUX0lOQ0xVREVTID0gLUkuQGFtX19pc3JjQCAtSSQodG9wX2J1aWxkZGlyKQorZGVwY29tcCA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvZGVwY29tcAorYW1fX2RlcGZpbGVzX21heWJlID0gZGVwZmlsZXMKK2FtX19tdiA9IG12IC1mCitDT01QSUxFID0gJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpIFwKKwkkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpCitMVENPTVBJTEUgPSAkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgXAorCS0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSBcCisJJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQorQ0NMRCA9ICQoQ0MpCitMSU5LID0gJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIFwKKwktLW1vZGU9bGluayAkKENDTEQpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgJChBTV9MREZMQUdTKSBcCisJJChMREZMQUdTKSAtbyAkQAorU09VUkNFUyA9ICQobGlianZtdGlfb3Byb2ZpbGVfbGFfU09VUkNFUykKK0RJU1RfU09VUkNFUyA9ICQobGlianZtdGlfb3Byb2ZpbGVfbGFfU09VUkNFUykKK0VUQUdTID0gZXRhZ3MKK0NUQUdTID0gY3RhZ3MKK0RJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCitBQ0xPQ0FMID0gQEFDTE9DQUxACitBTVRBUiA9IEBBTVRBUkAKK0FSID0gQEFSQAorQVVUT0NPTkYgPSBAQVVUT0NPTkZACitBVVRPSEVBREVSID0gQEFVVE9IRUFERVJACitBVVRPTUFLRSA9IEBBVVRPTUFLRUAKK0FXSyA9IEBBV0tACitCRkRfTElCUyA9IEBCRkRfTElCU0AKK0NBVF9FTlRSWV9FTkQgPSBAQ0FUX0VOVFJZX0VOREAKK0NBVF9FTlRSWV9TVEFSVCA9IEBDQVRfRU5UUllfU1RBUlRACitDQyA9IEBDQ0AKK0NDREVQTU9ERSA9IEBDQ0RFUE1PREVACitDRkxBR1MgPSBAQ0ZMQUdTQAorQ1BQID0gQENQUEAKK0NQUEZMQUdTID0gQENQUEZMQUdTQAorQ1hYID0gQENYWEAKK0NYWENQUCA9IEBDWFhDUFBACitDWFhERVBNT0RFID0gQENYWERFUE1PREVACitDWFhGTEFHUyA9IEBDWFhGTEFHU0AKK0NZR1BBVEhfVyA9IEBDWUdQQVRIX1dACitEQVRFID0gQERBVEVACitERUZTID0gQERFRlNACitERVBESVIgPSBAREVQRElSQAorRE9DQk9PS19ST09UID0gQERPQ0JPT0tfUk9PVEAKK0RTWU1VVElMID0gQERTWU1VVElMQAorRFVNUEJJTiA9IEBEVU1QQklOQAorRUNIT19DID0gQEVDSE9fQ0AKK0VDSE9fTiA9IEBFQ0hPX05ACitFQ0hPX1QgPSBARUNIT19UQAorRUdSRVAgPSBARUdSRVBACitFWEVFWFQgPSBARVhFRVhUQAorRVhUUkFfQ0ZMQUdTX01PRFVMRSA9IEBFWFRSQV9DRkxBR1NfTU9EVUxFQAorRkdSRVAgPSBARkdSRVBACitHUkVQID0gQEdSRVBACitJTlNUQUxMID0gQElOU1RBTExACitJTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAorSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKK0lOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAorSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKK0pBVkFfSE9NRURJUiA9IEBKQVZBX0hPTUVESVJACitLSU5DID0gQEtJTkNACitLU1JDID0gQEtTUkNACitLVkVSUyA9IEBLVkVSU0AKK0xEID0gQExEQAorTERGTEFHUyA9IEBMREZMQUdTQAorTElCRVJUWV9MSUJTID0gQExJQkVSVFlfTElCU0AKK0xJQk9CSlMgPSBATElCT0JKU0AKK0xJQlMgPSBATElCU0AKK0xJQlRPT0wgPSBATElCVE9PTEAKK0xJUE8gPSBATElQT0AKK0xOX1MgPSBATE5fU0AKK0xUTElCT0JKUyA9IEBMVExJQk9CSlNACitNQUtFSU5GTyA9IEBNQUtFSU5GT0AKK01LRElSX1AgPSBATUtESVJfUEAKK01PQyA9IEBNT0NACitNT0RJTlNUQUxMRElSID0gQE1PRElOU1RBTExESVJACitOTSA9IEBOTUAKK05NRURJVCA9IEBOTUVESVRACitPQkpEVU1QID0gQE9CSkRVTVBACitPQkpFWFQgPSBAT0JKRVhUQAorT1BST0ZJTEVfRElSID0gQE9QUk9GSUxFX0RJUkAKK09QUk9GSUxFX01PRFVMRV9BUkNIID0gQE9QUk9GSUxFX01PRFVMRV9BUkNIQAorT1BfQ0ZMQUdTID0gQE9QX0NGTEFHU0AKK09QX0NYWEZMQUdTID0gQE9QX0NYWEZMQUdTQAorT1BfRE9DRElSID0gQE9QX0RPQ0RJUkAKK09UT09MID0gQE9UT09MQAorT1RPT0w2NCA9IEBPVE9PTDY0QAorUEFDS0FHRSA9IEBQQUNLQUdFQAorUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACitQQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAorUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACitQQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAorUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACitQQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAorUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACitQS0dfQ09ORklHID0gQFBLR19DT05GSUdACitQS0dfQ09ORklHX0xJQkRJUiA9IEBQS0dfQ09ORklHX0xJQkRJUkAKK1BLR19DT05GSUdfUEFUSCA9IEBQS0dfQ09ORklHX1BBVEhACitQT1BUX0xJQlMgPSBAUE9QVF9MSUJTQAorUFRSRElGRl9UX1RZUEUgPSBAUFRSRElGRl9UX1RZUEVACitRVF9DRkxBR1MgPSBAUVRfQ0ZMQUdTQAorUVRfSU5DTFVERVMgPSBAUVRfSU5DTFVERVNACitRVF9MREZMQUdTID0gQFFUX0xERkxBR1NACitRVF9MSUIgPSBAUVRfTElCQAorUVRfTElCUyA9IEBRVF9MSUJTQAorUVRfVkVSU0lPTiA9IEBRVF9WRVJTSU9OQAorUkFOTElCID0gQFJBTkxJQkAKK1NFRCA9IEBTRURACitTRVRfTUFLRSA9IEBTRVRfTUFLRUAKK1NIRUxMID0gQFNIRUxMQAorU0laRV9UX1RZUEUgPSBAU0laRV9UX1RZUEVACitTVFJJUCA9IEBTVFJJUEAKK1VJQyA9IEBVSUNACitVSUNoZWxwID0gQFVJQ2hlbHBACitWRVJTSU9OID0gQFZFUlNJT05ACitYTUtNRiA9IEBYTUtNRkAKK1hNTF9DQVRBTE9HID0gQFhNTF9DQVRBTE9HQAorWFNMVFBST0MgPSBAWFNMVFBST0NACitYU0xUUFJPQ19GTEFHUyA9IEBYU0xUUFJPQ19GTEFHU0AKK1hfQ0ZMQUdTID0gQFhfQ0ZMQUdTQAorWF9FWFRSQV9MSUJTID0gQFhfRVhUUkFfTElCU0AKK1hfTElCUyA9IEBYX0xJQlNACitYX1BSRV9MSUJTID0gQFhfUFJFX0xJQlNACithYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAorYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAorYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAorYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACithY19jdF9DQyA9IEBhY19jdF9DQ0AKK2FjX2N0X0NYWCA9IEBhY19jdF9DWFhACithY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACithbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKK2FtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACithbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAorYW1fX3RhciA9IEBhbV9fdGFyQAorYW1fX3VudGFyID0gQGFtX191bnRhckAKK2JpbmRpciA9IEBiaW5kaXJACitidWlsZCA9IEBidWlsZEAKK2J1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAorYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKK2J1aWxkX29zID0gQGJ1aWxkX29zQAorYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKK2J1aWxkZGlyID0gQGJ1aWxkZGlyQAorZGF0YWRpciA9IEBkYXRhZGlyQAorZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACitkb2NkaXIgPSBAZG9jZGlyQAorZHZpZGlyID0gQGR2aWRpckAKK2V4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAoraG9zdCA9IEBob3N0QAoraG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAoraG9zdF9jcHUgPSBAaG9zdF9jcHVACitob3N0X29zID0gQGhvc3Rfb3NACitob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKK2h0bWxkaXIgPSBAaHRtbGRpckAKK2luY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKK2luZm9kaXIgPSBAaW5mb2RpckAKK2luc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKK2xpYmRpciA9IEBsaWJkaXJACitsaWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACitsb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAorbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAorbHRfRUNITyA9IEBsdF9FQ0hPQAorbWFuZGlyID0gQG1hbmRpckAKK21rZGlyX3AgPSBAbWtkaXJfcEAKK29sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKK3BkZmRpciA9IEBwZGZkaXJACitwcmVmaXggPSBAcHJlZml4QAorcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAorcHNkaXIgPSBAcHNkaXJACitzYmluZGlyID0gQHNiaW5kaXJACitzaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKK3NyY2RpciA9IEBzcmNkaXJACitzeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACit0YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAordG9wX2J1aWxkX3ByZWZpeCA9IEB0b3BfYnVpbGRfcHJlZml4QAordG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKK3RvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKK3RvcGRpciA9IEB0b3BkaXJACitBTV9DRkxBR1MgPSBAT1BfQ0ZMQUdTQAorcGtnbGliX0xUTElCUkFSSUVTID0gbGlianZtdGlfb3Byb2ZpbGUubGEKK2xpYmp2bXRpX29wcm9maWxlX2xhX0NGTEFHUyA9ICQoQU1fQ0ZMQUdTKSAtZlBJQworbGlianZtdGlfb3Byb2ZpbGVfbGFfTElCQUREID0gLi4vLi4vbGlib3BhZ2VudC9saWJvcGFnZW50LmxhCitsaWJqdm10aV9vcHJvZmlsZV9sYV9TT1VSQ0VTID0gbGlianZtdGlfb3Byb2ZpbGUuYworQU1fQ1BQRkxBR1MgPSBcCisgICAgICAgLUkgJHt0b3Bfc3JjZGlyfS9saWJvcGFnZW50IFwKKyAgICAgICAtSSBASkFWQV9IT01FRElSQC9pbmNsdWRlIFwKKyAgICAgICAtSSBASkFWQV9IT01FRElSQC9pbmNsdWRlL2xpbnV4CisKK2FsbDogYWxsLWFtCisKKy5TVUZGSVhFUzoKKy5TVUZGSVhFUzogLmMgLmxvIC5vIC5vYmoKKyQoc3JjZGlyKS9NYWtlZmlsZS5pbjogICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJQGZvciBkZXAgaW4gJD87IGRvIFwKKwkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAorCSAgICAqJCRkZXAqKSBcCisJICAgICAgKCBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggKSBcCisJICAgICAgICAmJiB7IGlmIHRlc3QgLWYgJEA7IHRoZW4gZXhpdCAwOyBlbHNlIGJyZWFrOyBmaTsgfTsgXAorCSAgICAgIGV4aXQgMTs7IFwKKwkgIGVzYWM7IFwKKwlkb25lOyBcCisJZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1mb3JlaWduIGFnZW50cy9qdm10aS9NYWtlZmlsZSc7IFwKKwkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCisJICAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gYWdlbnRzL2p2bXRpL01ha2VmaWxlCisuUFJFQ0lPVVM6IE1ha2VmaWxlCitNYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCisJQGNhc2UgJyQ/JyBpbiBcCisJICAqY29uZmlnLnN0YXR1cyopIFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoOzsgXAorCSAgKikgXAorCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCisJZXNhYzsKKworJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2RpcikvY29uZmlndXJlICQoQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCisKKyQodG9wX3NyY2RpcikvY29uZmlndXJlOiAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCiskKEFDTE9DQUxfTTQpOiAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorJChhbV9fYWNsb2NhbF9tNF9kZXBzKToKK2luc3RhbGwtcGtnbGliTFRMSUJSQVJJRVM6ICQocGtnbGliX0xUTElCUkFSSUVTKQorCUAkKE5PUk1BTF9JTlNUQUxMKQorCXRlc3QgLXogIiQocGtnbGliZGlyKSIgfHwgJChNS0RJUl9QKSAiJChERVNURElSKSQocGtnbGliZGlyKSIKKwlAbGlzdD0nJChwa2dsaWJfTFRMSUJSQVJJRVMpJzsgdGVzdCAtbiAiJChwa2dsaWJkaXIpIiB8fCBsaXN0PTsgXAorCWxpc3QyPTsgZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0IC1mICQkcDsgdGhlbiBcCisJICAgIGxpc3QyPSIkJGxpc3QyICQkcCI7IFwKKwkgIGVsc2UgOjsgZmk7IFwKKwlkb25lOyBcCisJdGVzdCAteiAiJCRsaXN0MiIgfHwgeyBcCisJICBlY2hvICIgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1pbnN0YWxsICQoSU5TVEFMTCkgJChJTlNUQUxMX1NUUklQX0ZMQUcpICQkbGlzdDIgJyQoREVTVERJUikkKHBrZ2xpYmRpciknIjsgXAorCSAgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1pbnN0YWxsICQoSU5TVEFMTCkgJChJTlNUQUxMX1NUUklQX0ZMQUcpICQkbGlzdDIgIiQoREVTVERJUikkKHBrZ2xpYmRpcikiOyBcCisJfQorCit1bmluc3RhbGwtcGtnbGliTFRMSUJSQVJJRVM6CisJQCQoTk9STUFMX1VOSU5TVEFMTCkKKwlAbGlzdD0nJChwa2dsaWJfTFRMSUJSQVJJRVMpJzsgdGVzdCAtbiAiJChwa2dsaWJkaXIpIiB8fCBsaXN0PTsgXAorCWZvciBwIGluICQkbGlzdDsgZG8gXAorCSAgJChhbV9fc3RyaXBfZGlyKSBcCisJICBlY2hvICIgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT11bmluc3RhbGwgcm0gLWYgJyQoREVTVERJUikkKHBrZ2xpYmRpcikvJCRmJyI7IFwKKwkgICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9dW5pbnN0YWxsIHJtIC1mICIkKERFU1RESVIpJChwa2dsaWJkaXIpLyQkZiI7IFwKKwlkb25lCisKK2NsZWFuLXBrZ2xpYkxUTElCUkFSSUVTOgorCS10ZXN0IC16ICIkKHBrZ2xpYl9MVExJQlJBUklFUykiIHx8IHJtIC1mICQocGtnbGliX0xUTElCUkFSSUVTKQorCUBsaXN0PSckKHBrZ2xpYl9MVExJQlJBUklFUyknOyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwkgIGRpcj0iYGVjaG8gJCRwIHwgc2VkIC1lICdzfC9bXi9dKiQkfHwnYCI7IFwKKwkgIHRlc3QgIiQkZGlyIiAhPSAiJCRwIiB8fCBkaXI9LjsgXAorCSAgZWNobyAicm0gLWYgXCIkJHtkaXJ9L3NvX2xvY2F0aW9uc1wiIjsgXAorCSAgcm0gLWYgIiQke2Rpcn0vc29fbG9jYXRpb25zIjsgXAorCWRvbmUKK2xpYmp2bXRpX29wcm9maWxlLmxhOiAkKGxpYmp2bXRpX29wcm9maWxlX2xhX09CSkVDVFMpICQobGlianZtdGlfb3Byb2ZpbGVfbGFfREVQRU5ERU5DSUVTKSAKKwkkKGxpYmp2bXRpX29wcm9maWxlX2xhX0xJTkspIC1ycGF0aCAkKHBrZ2xpYmRpcikgJChsaWJqdm10aV9vcHJvZmlsZV9sYV9PQkpFQ1RTKSAkKGxpYmp2bXRpX29wcm9maWxlX2xhX0xJQkFERCkgJChMSUJTKQorCittb3N0bHljbGVhbi1jb21waWxlOgorCS1ybSAtZiAqLiQoT0JKRVhUKQorCitkaXN0Y2xlYW4tY29tcGlsZToKKwktcm0gLWYgKi50YWIuYworCitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGlianZtdGlfb3Byb2ZpbGVfbGEtbGlianZtdGlfb3Byb2ZpbGUuUGxvQGFtX19xdW90ZUAKKworLmMubzoKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgJDwKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ09NUElMRSkgLWMgJDwKKworLmMub2JqOgorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENPTVBJTEUpIC1jIGAkKENZR1BBVEhfVykgJyQ8J2AKKworLmMubG86CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExUQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgJDwKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMVENPTVBJTEUpIC1jIC1vICRAICQ8CisKK2xpYmp2bXRpX29wcm9maWxlX2xhLWxpYmp2bXRpX29wcm9maWxlLmxvOiBsaWJqdm10aV9vcHJvZmlsZS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExJQlRPT0wpICAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmp2bXRpX29wcm9maWxlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJqdm10aV9vcHJvZmlsZV9sYS1saWJqdm10aV9vcHJvZmlsZS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGlianZtdGlfb3Byb2ZpbGVfbGEtbGlianZtdGlfb3Byb2ZpbGUuVHBvIC1jIC1vIGxpYmp2bXRpX29wcm9maWxlX2xhLWxpYmp2bXRpX29wcm9maWxlLmxvIGB0ZXN0IC1mICdsaWJqdm10aV9vcHJvZmlsZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BsaWJqdm10aV9vcHJvZmlsZS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJChERVBESVIpL2xpYmp2bXRpX29wcm9maWxlX2xhLWxpYmp2bXRpX29wcm9maWxlLlRwbyAkKERFUERJUikvbGlianZtdGlfb3Byb2ZpbGVfbGEtbGlianZtdGlfb3Byb2ZpbGUuUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdsaWJqdm10aV9vcHJvZmlsZS5jJyBvYmplY3Q9J2xpYmp2bXRpX29wcm9maWxlX2xhLWxpYmp2bXRpX29wcm9maWxlLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJqdm10aV9vcHJvZmlsZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJqdm10aV9vcHJvZmlsZV9sYS1saWJqdm10aV9vcHJvZmlsZS5sbyBgdGVzdCAtZiAnbGlianZtdGlfb3Byb2ZpbGUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgbGlianZtdGlfb3Byb2ZpbGUuYworCittb3N0bHljbGVhbi1saWJ0b29sOgorCS1ybSAtZiAqLmxvCisKK2NsZWFuLWxpYnRvb2w6CisJLXJtIC1yZiAubGlicyBfbGlicworCitJRDogJChIRUFERVJTKSAkKFNPVVJDRVMpICQoTElTUCkgJChUQUdTX0ZJTEVTKQorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorCW1raWQgLWZJRCAkJHVuaXF1ZQordGFnczogVEFHUworCitUQUdTOiAgJChIRUFERVJTKSAkKFNPVVJDRVMpICAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCisJCSQoVEFHU19GSUxFUykgJChMSVNQKQorCXNldCB4OyBcCisJaGVyZT1gcHdkYDsgXAorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKwkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKwlzaGlmdDsgXAorCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJCokJHVuaXF1ZSI7IHRoZW4gOjsgZWxzZSBcCisJICB0ZXN0IC1uICIkJHVuaXF1ZSIgfHwgdW5pcXVlPSQkZW1wdHlfZml4OyBcCisJICBpZiB0ZXN0ICQkIyAtZ3QgMDsgdGhlbiBcCisJICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKwkgICAgICAiJCRAIiAkJHVuaXF1ZTsgXAorCSAgZWxzZSBcCisJICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKwkgICAgICAkJHVuaXF1ZTsgXAorCSAgZmk7IFwKKwlmaQorY3RhZ3M6IENUQUdTCitDVEFHUzogICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAorCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCisJICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCisJdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdW5pcXVlIiBcCisJICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCisJICAgICAkJHVuaXF1ZQorCitHVEFHUzoKKwloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAorCSAgJiYgJChhbV9fY2QpICQodG9wX3NyY2RpcikgXAorCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAiJCRoZXJlIgorCitkaXN0Y2xlYW4tdGFnczoKKwktcm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncworCitkaXN0ZGlyOiAkKERJU1RGSUxFUykKKwlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisJdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCWxpc3Q9JyQoRElTVEZJTEVTKSc7IFwKKwkgIGRpc3RfZmlsZXM9YGZvciBmaWxlIGluICQkbGlzdDsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBcCisJICBzZWQgLWUgInN8XiQkc3JjZGlyc3RyaXAvfHw7dCIgXAorCSAgICAgIC1lICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfDt0ImA7IFwKKwljYXNlICQkZGlzdF9maWxlcyBpbiBcCisJICAqLyopICQoTUtESVJfUCkgYGVjaG8gIiQkZGlzdF9maWxlcyIgfCBcCisJCQkgICBzZWQgJy9cLy8hZDtzfF58JChkaXN0ZGlyKS98O3MsL1teL10qJCQsLCcgfCBcCisJCQkgICBzb3J0IC11YCA7OyBcCisJZXNhYzsgXAorCWZvciBmaWxlIGluICQkZGlzdF9maWxlczsgZG8gXAorCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAorCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKKwkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKKwkgICAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJGZpbGUiOyB0aGVuIFwKKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKwkgICAgZmk7IFwKKwkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCisJICAgICAgY3AgLWZwUiAkKHNyY2RpcikvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAorCSAgICBmaTsgXAorCSAgICBjcCAtZnBSICQkZC8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCisJICBlbHNlIFwKKwkgICAgdGVzdCAtZiAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKKwkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKKwkgICAgfHwgZXhpdCAxOyBcCisJICBmaTsgXAorCWRvbmUKK2NoZWNrLWFtOiBhbGwtYW0KK2NoZWNrOiBjaGVjay1hbQorYWxsLWFtOiBNYWtlZmlsZSAkKExUTElCUkFSSUVTKQoraW5zdGFsbGRpcnM6CisJZm9yIGRpciBpbiAiJChERVNURElSKSQocGtnbGliZGlyKSI7IGRvIFwKKwkgIHRlc3QgLXogIiQkZGlyIiB8fCAkKE1LRElSX1ApICIkJGRpciI7IFwKKwlkb25lCitpbnN0YWxsOiBpbnN0YWxsLWFtCitpbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1hbQoraW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtYW0KK3VuaW5zdGFsbDogdW5pbnN0YWxsLWFtCisKK2luc3RhbGwtYW06IGFsbC1hbQorCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCisKK2luc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLWFtCitpbnN0YWxsLXN0cmlwOgorCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisJICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKKwkgIGB0ZXN0IC16ICckKFNUUklQKScgfHwgXAorCSAgICBlY2hvICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknImAgaW5zdGFsbAorbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKKworY2xlYW4tZ2VuZXJpYzoKKworZGlzdGNsZWFuLWdlbmVyaWM6CisJLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCisJLXRlc3QgLiA9ICIkKHNyY2RpcikiIHx8IHRlc3QgLXogIiQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpCisKK21haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKKwlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCisJQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgorY2xlYW46IGNsZWFuLWFtCisKK2NsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgY2xlYW4tcGtnbGliTFRMSUJSQVJJRVMgXAorCW1vc3RseWNsZWFuLWFtCisKK2Rpc3RjbGVhbjogZGlzdGNsZWFuLWFtCisJLXJtIC1yZiAuLyQoREVQRElSKQorCS1ybSAtZiBNYWtlZmlsZQorZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCisJZGlzdGNsZWFuLXRhZ3MKKworZHZpOiBkdmktYW0KKworZHZpLWFtOgorCitodG1sOiBodG1sLWFtCisKK2h0bWwtYW06CisKK2luZm86IGluZm8tYW0KKworaW5mby1hbToKKworaW5zdGFsbC1kYXRhLWFtOgorCitpbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktYW0KKworaW5zdGFsbC1kdmktYW06CisKK2luc3RhbGwtZXhlYy1hbTogaW5zdGFsbC1wa2dsaWJMVExJQlJBUklFUworCitpbnN0YWxsLWh0bWw6IGluc3RhbGwtaHRtbC1hbQorCitpbnN0YWxsLWh0bWwtYW06CisKK2luc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLWFtCisKK2luc3RhbGwtaW5mby1hbToKKworaW5zdGFsbC1tYW46CisKK2luc3RhbGwtcGRmOiBpbnN0YWxsLXBkZi1hbQorCitpbnN0YWxsLXBkZi1hbToKKworaW5zdGFsbC1wczogaW5zdGFsbC1wcy1hbQorCitpbnN0YWxsLXBzLWFtOgorCitpbnN0YWxsY2hlY2stYW06CisKK21haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tYW0KKwktcm0gLXJmIC4vJChERVBESVIpCisJLXJtIC1mIE1ha2VmaWxlCittYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCisKK21vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1hbQorCittb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIFwKKwltb3N0bHljbGVhbi1saWJ0b29sCisKK3BkZjogcGRmLWFtCisKK3BkZi1hbToKKworcHM6IHBzLWFtCisKK3BzLWFtOgorCit1bmluc3RhbGwtYW06IHVuaW5zdGFsbC1wa2dsaWJMVExJQlJBUklFUworCisuTUFLRTogaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwCisKKy5QSE9OWTogQ1RBR1MgR1RBR1MgYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBjbGVhbi1nZW5lcmljIFwKKwljbGVhbi1saWJ0b29sIGNsZWFuLXBrZ2xpYkxUTElCUkFSSUVTIGN0YWdzIGRpc3RjbGVhbiBcCisJZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLWxpYnRvb2wgXAorCWRpc3RjbGVhbi10YWdzIGRpc3RkaXIgZHZpIGR2aS1hbSBodG1sIGh0bWwtYW0gaW5mbyBpbmZvLWFtIFwKKwlpbnN0YWxsIGluc3RhbGwtYW0gaW5zdGFsbC1kYXRhIGluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBcCisJaW5zdGFsbC1kdmktYW0gaW5zdGFsbC1leGVjIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgXAorCWluc3RhbGwtaHRtbC1hbSBpbnN0YWxsLWluZm8gaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIFwKKwlpbnN0YWxsLXBkZiBpbnN0YWxsLXBkZi1hbSBpbnN0YWxsLXBrZ2xpYkxUTElCUkFSSUVTIFwKKwlpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgXAorCWluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBtYWludGFpbmVyLWNsZWFuIFwKKwltYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gbW9zdGx5Y2xlYW4tY29tcGlsZSBcCisJbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sIHBkZiBwZGYtYW0gcHMgcHMtYW0gXAorCXRhZ3MgdW5pbnN0YWxsIHVuaW5zdGFsbC1hbSB1bmluc3RhbGwtcGtnbGliTFRMSUJSQVJJRVMKKworCisjIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgorIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCisuTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9hZ2VudHMvanZtdGkvbGlianZtdGlfb3Byb2ZpbGUuYyBiL29wcm9maWxlLTAuOS43L2FnZW50cy9qdm10aS9saWJqdm10aV9vcHJvZmlsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxNTdkNDQKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9hZ2VudHMvanZtdGkvbGlianZtdGlfb3Byb2ZpbGUuYwpAQCAtMCwwICsxLDMyNiBAQAorLyoqCisgKiBAZmlsZSBqdm10aV9vcHJvZmlsZS5jCisgKiBKVk1USSBhZ2VudCBpbXBsZW1lbnRhdGlvbiB0byByZXBvcnQgaml0dGVkIEpWTSBjb2RlIHRvIE9wcm9maWxlCisgKgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwNyBPUHJvZmlsZSBhdXRob3JzCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICogQGF1dGhvciBKZW5zIFdpbGtlCisgKiBATW9kaWZpY2F0aW9ucyBEYW5pZWwgSGFuc2VsCisgKgorICogQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDA3CisgKgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGp2bXRpLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworI2luY2x1ZGUgIm9wYWdlbnQuaCIKKworc3RhdGljIGludCBkZWJ1ZyA9IDA7CitzdGF0aWMgaW50IGNhbl9nZXRfbGluZV9udW1iZXJzID0gMDsKK3N0YXRpYyBvcF9hZ2VudF90IGFnZW50X2hkbDsKKworLyoqCisgKiBIYW5kbGUgYW4gZXJyb3Igb3IgYSB3YXJuaW5nLCByZXR1cm4gMCBpZiB0aGUgY2hlY2tlZCBlcnJvciBpcyAKKyAqIEpWTVRJX0VSUk9SX05PTkUsIGkuZS4gc3VjY2VzcworICovCitzdGF0aWMgaW50IGhhbmRsZV9lcnJvcihqdm10aUVycm9yIGVyciwgY2hhciBjb25zdCAqIG1zZywgaW50IHNldmVyZSkKK3sKKwlpZiAoZXJyICE9IEpWTVRJX0VSUk9SX05PTkUpIHsKKwkJZnByaW50ZihzdGRlcnIsICIlczogJXMsIGVyciBjb2RlICVpXG4iLAorCQkJc2V2ZXJlID8gIkVycm9yIiA6ICJXYXJuaW5nIiwgbXNnLCBlcnIpOworCX0KKwlyZXR1cm4gZXJyICE9IEpWTVRJX0VSUk9SX05PTkU7Cit9CisKKworLyoqCisgKiByZXR1cm5lZCBhcnJheSBpcyBtYXBfbGVuZ3RoIGxlbmd0aCwgcGFyYW1zIG1hcCBhbmQgbWFwX2xlbmd0aCAhPSAwCisgKiBmb3JtYXQgb2YgbGluZW5vIGluZm9ybWF0aW9uIGlzIEpWTVRJX0pMT0NBVElPTl9KVk1CQ0ksIG1hcCBpcyBhbiBhcnJheQorICogb2YgeyBhZGRyZXNzLCBjb2RlIGJ5dGUgaW5kZXggfSwgdGFibGVfcHRyIGFuIGFycmF5IG9mIHsgYnl0ZSBjb2RlIGluZGV4LAorICogbGluZW5vIH0KKyAqLworc3RhdGljIHN0cnVjdCBkZWJ1Z19saW5lX2luZm8gKiAKK2NyZWF0ZV9kZWJ1Z19saW5lX2luZm8oamludCBtYXBfbGVuZ3RoLCBqdm10aUFkZHJMb2NhdGlvbk1hcCBjb25zdCAqIG1hcCwKKwkJICAgICAgIGppbnQgZW50cnlfY291bnQsIGp2bXRpTGluZU51bWJlckVudHJ5KiB0YWJsZV9wdHIsCisJCSAgICAgICBjaGFyIGNvbnN0ICogc291cmNlX2ZpbGVuYW1lKQoreworCXN0cnVjdCBkZWJ1Z19saW5lX2luZm8gKiBkZWJ1Z19saW5lOworCWludCBpLCBqOworCWlmIChkZWJ1ZykgeworCQlmcHJpbnRmKHN0ZGVyciwgIlNvdXJjZSAlc1xuIiwgc291cmNlX2ZpbGVuYW1lKTsKKwkJZm9yIChpID0gMDsgaSA8IG1hcF9sZW5ndGg7ICsraSkgeworCQkJZnByaW50ZihzdGRlcnIsICIlcCAlbGxkXHQiLAorCQkJICAgICAgICBtYXBbaV0uc3RhcnRfYWRkcmVzcywKKwkJCSAgICAgICAgKGxvbmcgbG9uZyltYXBbaV0ubG9jYXRpb24pOworCQl9CisJCWZwcmludGYoc3RkZXJyLCAiXG4iKTsKKwkJZm9yIChpID0gMDsgaSA8IGVudHJ5X2NvdW50OyArK2kpIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiJWxsZCAlZFx0IiwKKwkJCQkobG9uZyBsb25nKXRhYmxlX3B0cltpXS5zdGFydF9sb2NhdGlvbiwKKwkJCQl0YWJsZV9wdHJbaV0ubGluZV9udW1iZXIpOworCQl9CisJCWZwcmludGYoc3RkZXJyLCAiXG4iKTsKKwl9CisKKwlkZWJ1Z19saW5lID0gY2FsbG9jKG1hcF9sZW5ndGgsIHNpemVvZihzdHJ1Y3QgZGVidWdfbGluZV9pbmZvKSk7CisJaWYgKCFkZWJ1Z19saW5lKQorCQlyZXR1cm4gMDsKKworCWZvciAoaSA9IDA7IGkgPCBtYXBfbGVuZ3RoOyArK2kpIHsKKwkJLyogRklYTUU6IGxpa2VseSB0byBuZWVkIGEgbG93ZXJfYm91bmQgb24gdGhlIGFycmF5LCBidXQKKwkJICogZG9jdW1lbnRhdGlvbiBpcyBhIGJpdCBvYnNjdXJlIGFib3V0IHRoZSBjb250ZW50cyBvZiB0aGVzZQorCQkgKiBhcnJyYXkKKwkJICoqLworCQlmb3IgKGogPSAwOyBqIDwgZW50cnlfY291bnQgLSAxOyArK2opIHsKKwkJCWlmICh0YWJsZV9wdHJbal0uc3RhcnRfbG9jYXRpb24gPiBtYXBbaV0ubG9jYXRpb24pCisJCQkJYnJlYWs7CisJCX0KKwkJZGVidWdfbGluZVtpXS52bWEgPSAodW5zaWduZWQgbG9uZyltYXBbaV0uc3RhcnRfYWRkcmVzczsKKwkJZGVidWdfbGluZVtpXS5saW5lbm8gPSB0YWJsZV9wdHJbal0ubGluZV9udW1iZXI7CisJCWRlYnVnX2xpbmVbaV0uZmlsZW5hbWUgPSBzb3VyY2VfZmlsZW5hbWU7CisJfQorCisJaWYgKGRlYnVnKSB7CisJCWZvciAoaSA9IDA7IGkgPCBtYXBfbGVuZ3RoOyArK2kpIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiJWx4ICVkXHQiLCBkZWJ1Z19saW5lW2ldLnZtYSwKKwkJCQlkZWJ1Z19saW5lW2ldLmxpbmVubyk7CisJCX0KKwkJZnByaW50ZihzdGRlcnIsICJcbiIpOworCX0KKwkKKwlyZXR1cm4gZGVidWdfbGluZTsKK30KKworCitzdGF0aWMgdm9pZCBKTklDQUxMIGNiX2NvbXBpbGVkX21ldGhvZF9sb2FkKGp2bXRpRW52ICoganZtdGksCisJam1ldGhvZElEIG1ldGhvZCwgamludCBjb2RlX3NpemUsIHZvaWQgY29uc3QgKiBjb2RlX2FkZHIsCisJamludCBtYXBfbGVuZ3RoLCBqdm10aUFkZHJMb2NhdGlvbk1hcCBjb25zdCAqIG1hcCwKKwl2b2lkIGNvbnN0ICogY29tcGlsZV9pbmZvKQoreworCWpjbGFzcyBkZWNsYXJpbmdfY2xhc3M7CisJY2hhciAqIGNsYXNzX3NpZ25hdHVyZSA9IE5VTEw7CisgCWNoYXIgKiBtZXRob2RfbmFtZSA9IE5VTEw7CisgCWNoYXIgKiBtZXRob2Rfc2lnbmF0dXJlID0gTlVMTDsKKwlqdm10aUxpbmVOdW1iZXJFbnRyeSogdGFibGVfcHRyID0gTlVMTDsKKwljaGFyICogc291cmNlX2ZpbGVuYW1lID0gTlVMTDsKKwlzdHJ1Y3QgZGVidWdfbGluZV9pbmZvICogZGVidWdfbGluZSA9IE5VTEw7CisgCWp2bXRpRXJyb3IgZXJyOworCisJLyogc2h1dCB1cCBjb21waWxlciB3YXJuaW5nICovCisJY29tcGlsZV9pbmZvID0gY29tcGlsZV9pbmZvOworCisJZXJyID0gKCpqdm10aSktPkdldE1ldGhvZERlY2xhcmluZ0NsYXNzKGp2bXRpLCBtZXRob2QsCisJCQkJCQkmZGVjbGFyaW5nX2NsYXNzKTsKKwlpZiAoaGFuZGxlX2Vycm9yKGVyciwgIkdldE1ldGhvZERlY2xhcmluZ0NsYXNzKCkiLCAxKSkKKwkJZ290byBjbGVhbnVwMjsKKworCWlmIChjYW5fZ2V0X2xpbmVfbnVtYmVycyAmJiBtYXBfbGVuZ3RoICYmIG1hcCkgeworCQlqaW50IGVudHJ5X2NvdW50OworCisJCWVyciA9ICgqanZtdGkpLT5HZXRMaW5lTnVtYmVyVGFibGUoanZtdGksIG1ldGhvZCwKKwkJCQkJCSAgICZlbnRyeV9jb3VudCwgJnRhYmxlX3B0cik7CisJCWlmIChlcnIgPT0gSlZNVElfRVJST1JfTk9ORSkgeworCQkJZXJyID0gKCpqdm10aSktPkdldFNvdXJjZUZpbGVOYW1lKGp2bXRpLAorCQkJCWRlY2xhcmluZ19jbGFzcywgJnNvdXJjZV9maWxlbmFtZSk7CisJCQlpZiAoZXJyID09ICBKVk1USV9FUlJPUl9OT05FKSB7CisJCQkJZGVidWdfbGluZSA9CisJCQkJCWNyZWF0ZV9kZWJ1Z19saW5lX2luZm8obWFwX2xlbmd0aCwgbWFwLAorCQkJCQkJZW50cnlfY291bnQsIHRhYmxlX3B0ciwKKwkJCQkJCXNvdXJjZV9maWxlbmFtZSk7CisJCQl9IGVsc2UgaWYgKGVyciAhPSBKVk1USV9FUlJPUl9BQlNFTlRfSU5GT1JNQVRJT04pIHsKKwkJCQloYW5kbGVfZXJyb3IoZXJyLCAiR2V0U291cmNlRmlsZU5hbWUoKSIsIDEpOworCQkJfQorCQl9IGVsc2UgaWYgKGVyciAhPSBKVk1USV9FUlJPUl9OQVRJVkVfTUVUSE9EICYmCisJCQkgICBlcnIgIT0gSlZNVElfRVJST1JfQUJTRU5UX0lORk9STUFUSU9OKSB7CisJCQloYW5kbGVfZXJyb3IoZXJyLCAiR2V0TGluZU51bWJlclRhYmxlKCkiLCAxKTsKKwkJfQorCX0KKworCWVyciA9ICgqanZtdGkpLT5HZXRDbGFzc1NpZ25hdHVyZShqdm10aSwgZGVjbGFyaW5nX2NsYXNzLAorCQkJCQkgICZjbGFzc19zaWduYXR1cmUsIE5VTEwpOworCWlmIChoYW5kbGVfZXJyb3IoZXJyLCAiR2V0Q2xhc3NTaWduYXR1cmUoKSIsIDEpKQorCQlnb3RvIGNsZWFudXAxOworCisJZXJyID0gKCpqdm10aSktPkdldE1ldGhvZE5hbWUoanZtdGksIG1ldGhvZCwgJm1ldGhvZF9uYW1lLAorCQkJCSAgICAgICZtZXRob2Rfc2lnbmF0dXJlLCBOVUxMKTsKKwlpZiAoaGFuZGxlX2Vycm9yKGVyciwgIkdldE1ldGhvZE5hbWUoKSIsIDEpKQorCQlnb3RvIGNsZWFudXA7CisKKwlpZiAoZGVidWcpIHsKKwkJZnByaW50ZihzdGRlcnIsICJsb2FkOiBkZWNsYXJpbmdfY2xhc3M9JXAsIGNsYXNzPSVzLCAiCisJCQkibWV0aG9kPSVzLCBzaWduYXR1cmU9JXMsIGFkZHI9JXAsIHNpemU9JWkgXG4iLAorCQkJZGVjbGFyaW5nX2NsYXNzLCBjbGFzc19zaWduYXR1cmUsIG1ldGhvZF9uYW1lLAorCQkJbWV0aG9kX3NpZ25hdHVyZSwgY29kZV9hZGRyLCBjb2RlX3NpemUpOworCX0KKworCXsKKwlpbnQgY250ID0gc3RybGVuKG1ldGhvZF9uYW1lKSArIHN0cmxlbihjbGFzc19zaWduYXR1cmUpICsKKwkJc3RybGVuKG1ldGhvZF9zaWduYXR1cmUpICsgMjsKKwljaGFyIGJ1ZltjbnRdOworCXN0cm5jcHkoYnVmLCBjbGFzc19zaWduYXR1cmUsIGNudCAtIDEpOworCXN0cm5jYXQoYnVmLCBtZXRob2RfbmFtZSwgY250IC0gc3RybGVuKGJ1ZikgLSAxKTsKKwlzdHJuY2F0KGJ1ZiwgbWV0aG9kX3NpZ25hdHVyZSwgY250IC0gc3RybGVuKGJ1ZikgLSAxKTsKKwlpZiAob3Bfd3JpdGVfbmF0aXZlX2NvZGUoYWdlbnRfaGRsLCBidWYsCisJCQkJICh1aW50NjRfdCkodWludHB0cl90KSBjb2RlX2FkZHIsCisJCQkJIGNvZGVfYWRkciwgY29kZV9zaXplKSkgeworCQlwZXJyb3IoIkVycm9yOiBvcF93cml0ZV9uYXRpdmVfY29kZSgpIik7CisJCWdvdG8gY2xlYW51cDsKKwl9CisJfQorCisJaWYgKGRlYnVnX2xpbmUpCisJCWlmIChvcF93cml0ZV9kZWJ1Z19saW5lX2luZm8oYWdlbnRfaGRsLCBjb2RlX2FkZHIsIG1hcF9sZW5ndGgsCisJCQkJCSAgICAgZGVidWdfbGluZSkpCisJCQlwZXJyb3IoIkVycm9yOiBvcF93cml0ZV9kZWJ1Z19saW5lX2luZm8oKSIpOworCitjbGVhbnVwOgorCSgqanZtdGkpLT5EZWFsbG9jYXRlKGp2bXRpLCAodW5zaWduZWQgY2hhciAqKW1ldGhvZF9uYW1lKTsKKwkoKmp2bXRpKS0+RGVhbGxvY2F0ZShqdm10aSwgKHVuc2lnbmVkIGNoYXIgKiltZXRob2Rfc2lnbmF0dXJlKTsKK2NsZWFudXAxOgorCSgqanZtdGkpLT5EZWFsbG9jYXRlKGp2bXRpLCAodW5zaWduZWQgY2hhciAqKWNsYXNzX3NpZ25hdHVyZSk7CisJKCpqdm10aSktPkRlYWxsb2NhdGUoanZtdGksICh1bnNpZ25lZCBjaGFyICopdGFibGVfcHRyKTsKKwkoKmp2bXRpKS0+RGVhbGxvY2F0ZShqdm10aSwgKHVuc2lnbmVkIGNoYXIgKilzb3VyY2VfZmlsZW5hbWUpOworY2xlYW51cDI6CisJZnJlZShkZWJ1Z19saW5lKTsKK30KKworCitzdGF0aWMgdm9pZCBKTklDQUxMIGNiX2NvbXBpbGVkX21ldGhvZF91bmxvYWQoanZtdGlFbnYgKiBqdm10aV9lbnYsCisJam1ldGhvZElEIG1ldGhvZCwgdm9pZCBjb25zdCAqIGNvZGVfYWRkcikKK3sKKwkvKiBzaHV0IHVwIGNvbXBpbGVyIHdhcm5pbmcgKi8KKwlqdm10aV9lbnYgPSBqdm10aV9lbnY7CisJbWV0aG9kID0gbWV0aG9kOworCisJaWYgKGRlYnVnKQorCQlmcHJpbnRmKHN0ZGVyciwgInVubG9hZDogYWRkcj0lcFxuIiwgY29kZV9hZGRyKTsKKwlpZiAob3BfdW5sb2FkX25hdGl2ZV9jb2RlKGFnZW50X2hkbCwgKHVpbnQ2NF90KSh1aW50cHRyX3QpIGNvZGVfYWRkcikpCisJCXBlcnJvcigiRXJyb3I6IG9wX3VubG9hZF9uYXRpdmVfY29kZSgpIik7Cit9CisKKworc3RhdGljIHZvaWQgSk5JQ0FMTCBjYl9keW5hbWljX2NvZGVfZ2VuZXJhdGVkKGp2bXRpRW52ICoganZtdGlfZW52LAorCWNoYXIgY29uc3QgKiBuYW1lLCB2b2lkIGNvbnN0ICogY29kZV9hZGRyLCBqaW50IGNvZGVfc2l6ZSkKK3sKKwkvKiBzaHV0IHVwIGNvbXBpbGVyIHdhcm5pbmcgKi8KKwlqdm10aV9lbnYgPSBqdm10aV9lbnY7CisJaWYgKGRlYnVnKSB7CisJCWZwcmludGYoc3RkZXJyLCAiZHluY29kZTogbmFtZT0lcywgYWRkcj0lcCwgc2l6ZT0laSBcbiIsCisJCQluYW1lLCBjb2RlX2FkZHIsIGNvZGVfc2l6ZSk7CisJfQorCWlmIChvcF93cml0ZV9uYXRpdmVfY29kZShhZ2VudF9oZGwsIG5hbWUsCisJCQkJICh1aW50NjRfdCkodWludHB0cl90KSBjb2RlX2FkZHIsCisJCQkJIGNvZGVfYWRkciwgY29kZV9zaXplKSkKKwkJcGVycm9yKCJFcnJvcjogb3Bfd3JpdGVfbmF0aXZlX2NvZGUoKSIpOworfQorCisKK0pOSUVYUE9SVCBqaW50IEpOSUNBTEwKK0FnZW50X09uTG9hZChKYXZhVk0gKiBqdm0sIGNoYXIgKiBvcHRpb25zLCB2b2lkICogcmVzZXJ2ZWQpCit7CisJamludCByYzsKKwlqdm10aUVudiAqIGp2bXRpID0gTlVMTDsKKwlqdm10aUV2ZW50Q2FsbGJhY2tzIGNhbGxiYWNrczsKKwlqdm10aUNhcGFiaWxpdGllcyBjYXBzOworCWp2bXRpSmxvY2F0aW9uRm9ybWF0IGZvcm1hdDsKKwlqdm10aUVycm9yIGVycm9yOworCisJLyogc2h1dCB1cCBjb21waWxlciB3YXJuaW5nICovCisJcmVzZXJ2ZWQgPSByZXNlcnZlZDsKKworCWlmIChvcHRpb25zICYmICFzdHJjbXAoInZlcnNpb24iLCBvcHRpb25zKSkgeworCQlmcHJpbnRmKHN0ZGVyciwgImp2bXRpX29wcm9maWxlOiBjdXJyZW50IGxpYm9wYWdlbnQgdmVyc2lvbiAlaS4laS5cbiIsCisJCSAgICAgICAgb3BfbWFqb3JfdmVyc2lvbigpLCBvcF9taW5vcl92ZXJzaW9uKCkpOworCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKG9wdGlvbnMgJiYgIXN0cmNtcCgiZGVidWciLCBvcHRpb25zKSkKKwkJZGVidWcgPSAxOworCisJaWYgKGRlYnVnKQorCQlmcHJpbnRmKHN0ZGVyciwgImp2bXRpX29wcm9maWxlOiBhZ2VudCBhY3RpdmF0ZWRcbiIpOworCisJYWdlbnRfaGRsID0gb3Bfb3Blbl9hZ2VudCgpOworCWlmICghYWdlbnRfaGRsKSB7CisJCXBlcnJvcigiRXJyb3I6IG9wX29wZW5fYWdlbnQoKSIpOworCQlyZXR1cm4gLTE7CisJfQorCisJcmMgPSAoKmp2bSktPkdldEVudihqdm0sICh2b2lkICopJmp2bXRpLCBKVk1USV9WRVJTSU9OXzEpOworCWlmIChyYyAhPSBKTklfT0spIHsKKwkJZnByaW50ZihzdGRlcnIsICJFcnJvcjogR2V0RW52KCksIHJjPSVpXG4iLCByYyk7CisJCXJldHVybiAtMTsKKwl9CisKKwltZW1zZXQoJmNhcHMsICdcMCcsIHNpemVvZihjYXBzKSk7CisJY2Fwcy5jYW5fZ2VuZXJhdGVfY29tcGlsZWRfbWV0aG9kX2xvYWRfZXZlbnRzID0gMTsKKwllcnJvciA9ICgqanZtdGkpLT5BZGRDYXBhYmlsaXRpZXMoanZtdGksICZjYXBzKTsKKwlpZiAoaGFuZGxlX2Vycm9yKGVycm9yLCAiQWRkQ2FwYWJpbGl0aWVzKCkiLCAxKSkKKwkJcmV0dXJuIC0xOworCisJLyogRklYTUU6IHNldHRhYmxlIHRocm91Z2ggY29tbWFuZCBsaW5lLCBkZWZhdWx0IG9uL29mZj8gKi8KKwllcnJvciA9ICgqanZtdGkpLT5HZXRKTG9jYXRpb25Gb3JtYXQoanZtdGksICZmb3JtYXQpOworCWlmICghaGFuZGxlX2Vycm9yKGVycm9yLCAiR2V0SkxvY2F0aW9uRm9ybWF0IiwgMSkgJiYKKwkgICAgZm9ybWF0ID09IEpWTVRJX0pMT0NBVElPTl9KVk1CQ0kpIHsKKwkJbWVtc2V0KCZjYXBzLCAnXDAnLCBzaXplb2YoY2FwcykpOworCQljYXBzLmNhbl9nZXRfbGluZV9udW1iZXJzID0gMTsKKwkJY2Fwcy5jYW5fZ2V0X3NvdXJjZV9maWxlX25hbWUgPSAxOworCQllcnJvciA9ICgqanZtdGkpLT5BZGRDYXBhYmlsaXRpZXMoanZtdGksICZjYXBzKTsKKwkJaWYgKCFoYW5kbGVfZXJyb3IoZXJyb3IsICJBZGRDYXBhYmlsaXRpZXMoKSIsIDEpKQorCQkJY2FuX2dldF9saW5lX251bWJlcnMgPSAxOworCX0KKworCW1lbXNldCgmY2FsbGJhY2tzLCAwLCBzaXplb2YoY2FsbGJhY2tzKSk7CisJY2FsbGJhY2tzLkNvbXBpbGVkTWV0aG9kTG9hZCA9IGNiX2NvbXBpbGVkX21ldGhvZF9sb2FkOworCWNhbGxiYWNrcy5Db21waWxlZE1ldGhvZFVubG9hZCA9IGNiX2NvbXBpbGVkX21ldGhvZF91bmxvYWQ7CisJY2FsbGJhY2tzLkR5bmFtaWNDb2RlR2VuZXJhdGVkID0gY2JfZHluYW1pY19jb2RlX2dlbmVyYXRlZDsKKwllcnJvciA9ICgqanZtdGkpLT5TZXRFdmVudENhbGxiYWNrcyhqdm10aSwgJmNhbGxiYWNrcywKKwkJCQkJICAgIHNpemVvZihjYWxsYmFja3MpKTsKKwlpZiAoaGFuZGxlX2Vycm9yKGVycm9yLCAiU2V0RXZlbnRDYWxsYmFja3MoKSIsIDEpKQorCQlyZXR1cm4gLTE7CisKKwllcnJvciA9ICgqanZtdGkpLT5TZXRFdmVudE5vdGlmaWNhdGlvbk1vZGUoanZtdGksIEpWTVRJX0VOQUJMRSwKKwkJCUpWTVRJX0VWRU5UX0NPTVBJTEVEX01FVEhPRF9MT0FELCBOVUxMKTsKKwlpZiAoaGFuZGxlX2Vycm9yKGVycm9yLCAiU2V0RXZlbnROb3RpZmljYXRpb25Nb2RlKCkgIgorCQkJICJKVk1USV9FVkVOVF9DT01QSUxFRF9NRVRIT0RfTE9BRCIsIDEpKQorCQlyZXR1cm4gLTE7CisJZXJyb3IgPSAoKmp2bXRpKS0+U2V0RXZlbnROb3RpZmljYXRpb25Nb2RlKGp2bXRpLCBKVk1USV9FTkFCTEUsCisJCQlKVk1USV9FVkVOVF9DT01QSUxFRF9NRVRIT0RfVU5MT0FELCBOVUxMKTsKKwlpZiAoaGFuZGxlX2Vycm9yKGVycm9yLCAiU2V0RXZlbnROb3RpZmljYXRpb25Nb2RlKCkgIgorCQkJICJKVk1USV9FVkVOVF9DT01QSUxFRF9NRVRIT0RfVU5MT0FEIiwgMSkpCisJCXJldHVybiAtMTsKKwllcnJvciA9ICgqanZtdGkpLT5TZXRFdmVudE5vdGlmaWNhdGlvbk1vZGUoanZtdGksIEpWTVRJX0VOQUJMRSwKKwkJCUpWTVRJX0VWRU5UX0RZTkFNSUNfQ09ERV9HRU5FUkFURUQsIE5VTEwpOworCWlmIChoYW5kbGVfZXJyb3IoZXJyb3IsICJTZXRFdmVudE5vdGlmaWNhdGlvbk1vZGUoKSAiCisJCQkgIkpWTVRJX0VWRU5UX0RZTkFNSUNfQ09ERV9HRU5FUkFURUQiLCAxKSkKKwkJcmV0dXJuIC0xOworCXJldHVybiAwOworfQorCisKK0pOSUVYUE9SVCB2b2lkIEpOSUNBTEwgQWdlbnRfT25VbmxvYWQoSmF2YVZNICoganZtKQoreworCS8qIHNodXQgdXAgY29tcGlsZXIgd2FybmluZyAqLworCWp2bSA9IGp2bTsKKwlpZiAob3BfY2xvc2VfYWdlbnQoYWdlbnRfaGRsKSkKKwkJcGVycm9yKCJFcnJvcjogb3BfY2xvc2VfYWdlbnQoKSIpOworfQpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvYXV0b2dlbi5zaCBiL29wcm9maWxlLTAuOS43L2F1dG9nZW4uc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTE0OGU4MAotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2F1dG9nZW4uc2gKQEAgLTAsMCArMSw0MiBAQAorIyEvYmluL3NoCisKKyMgcnVuIHRvIGdlbmVyYXRlIG5lZWRlZCBmaWxlcyBub3QgaW4gR2l0IHJlcG9zaXRvcnkKKworIyBOQjogaWYgeW91IHJ1biB0aGlzIGZpbGUgd2l0aCBBVVRPTUFLRSwgQVVUT0NPTkYsIGV0Yy4gZW52aXJvbm1lbnQKKyMgdmFyaWFibGVzIHNldCwgeW91ICptdXN0KiBydW4gImNvbmZpZ3VyZSIgd2l0aCB0aGUgc2FtZSB2YXJpYWJsZXMKKyMgc2V0LiB0aGlzIGlzIGJlY2F1c2UgImNvbmZpZ3VyZSIgd2lsbCBlbWJlZCB0aGUgdmFsdWVzIG9mIHRoZXNlIHZhcmlhYmxlcworIyBpbnRvIHRoZSBnZW5lcmF0ZWQgTWFrZWZpbGVzLCBhcyBAQVVUT01BS0VALCBAQVVUT0NPTkZAIGV0Yy4gYW5kIGl0IHdpbGwKKyMgdHJpZ2dlciByZWdlbmVyYXRpb24gb2YgY29uZmlndXJhdGlvbiBzdGF0ZSB1c2luZyB0aG9zZSBwcm9ncmFtcyB3aGVuIGFueQorIyBvZiBNYWtlZmlsZS5hbSBldGMuIGNoYW5nZS4KKworcnVuKCkgeworCWVjaG8gIlJ1bm5pbmcgJDEgLi4uIgorCSQxCit9CisKK3NldCAtZQorCitBQ0xPQ0FMPSR7QUNMT0NBTDotYWNsb2NhbH0KK0FVVE9IRUFERVI9JHtBVVRPSEVBREVSOi1hdXRvaGVhZGVyfQorQVVUT01BS0U9JHtBVVRPTUFLRTotYXV0b21ha2V9CitBVVRPQ09ORj0ke0FVVE9DT05GOi1hdXRvY29uZn0KKworaWYgJEFVVE9NQUtFIC0tdmVyc2lvbiB8IGdyZXAgLXEgMS40CisJdGhlbgorCWVjaG8gIiIKKwllY2hvICJBdXRvbWFrZSAxLjQgbm90IHN1cHBvcnRlZC4gcGxlYXNlIHNldCBcJEFVVE9NQUtFIgorCWVjaG8gInRvIHBvaW50IHRvIGEgbmV3ZXIgYXV0b21ha2UsIG9yIHVwZ3JhZGUuIgorCWVjaG8gIiIKKwlleGl0IDEKK2ZpCisKK2lmIHRlc3QgLW4gIiQxIjsgdGhlbgorCWVjaG8gImF1dG9nZW4uc2ggZG9lc24ndCB0YWtlIGFueSBvcHRpb25zIiA+JjIKKwlleGl0IDEKK2ZpCisKK2xpYnRvb2xpemUgLS1hdXRvbWFrZSAtYworcnVuICIkQUNMT0NBTCAtSSBtNCIKK3J1biAkQVVUT0hFQURFUgorcnVuICIkQVVUT01BS0UgLS1mb3JlaWduIC0tYWRkLW1pc3NpbmcgLS1jb3B5IgorcnVuICRBVVRPQ09ORgpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvY29uZmlnLmd1ZXNzIGIvb3Byb2ZpbGUtMC45LjcvY29uZmlnLmd1ZXNzCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmMyMjQ2YTQKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9jb25maWcuZ3Vlc3MKQEAgLTAsMCArMSwxNTAyIEBACisjISAvYmluL3NoCisjIEF0dGVtcHQgdG8gZ3Vlc3MgYSBjYW5vbmljYWwgc3lzdGVtIG5hbWUuCisjICAgQ29weXJpZ2h0IChDKSAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorIyAgIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAKKyMgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKwordGltZXN0YW1wPScyMDA5LTEyLTMwJworCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisjIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyMgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisjIDAyMTEwLTEzMDEsIFVTQS4KKyMKKyMgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGlmIHlvdQorIyBkaXN0cmlidXRlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgcHJvZ3JhbSB0aGF0IGNvbnRhaW5zIGEKKyMgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB5b3UgbWF5IGluY2x1ZGUgaXQgdW5kZXIKKyMgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIHRoYXQgeW91IHVzZSBmb3IgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorCisKKyMgT3JpZ2luYWxseSB3cml0dGVuIGJ5IFBlciBCb3RobmVyLiAgUGxlYXNlIHNlbmQgcGF0Y2hlcyAoY29udGV4dAorIyBkaWZmIGZvcm1hdCkgdG8gPGNvbmZpZy1wYXRjaGVzQGdudS5vcmc+IGFuZCBpbmNsdWRlIGEgQ2hhbmdlTG9nCisjIGVudHJ5LgorIworIyBUaGlzIHNjcmlwdCBhdHRlbXB0cyB0byBndWVzcyBhIGNhbm9uaWNhbCBzeXN0ZW0gbmFtZSBzaW1pbGFyIHRvCisjIGNvbmZpZy5zdWIuICBJZiBpdCBzdWNjZWVkcywgaXQgcHJpbnRzIHRoZSBzeXN0ZW0gbmFtZSBvbiBzdGRvdXQsIGFuZAorIyBleGl0cyB3aXRoIDAuICBPdGhlcndpc2UsIGl0IGV4aXRzIHdpdGggMS4KKyMKKyMgWW91IGNhbiBnZXQgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoaXMgc2NyaXB0IGZyb206CisjIGh0dHA6Ly9naXQuc2F2YW5uYWguZ251Lm9yZy9naXR3ZWIvP3A9Y29uZmlnLmdpdDthPWJsb2JfcGxhaW47Zj1jb25maWcuZ3Vlc3M7aGI9SEVBRAorCittZT1gZWNobyAiJDAiIHwgc2VkIC1lICdzLC4qLywsJ2AKKwordXNhZ2U9IlwKK1VzYWdlOiAkMCBbT1BUSU9OXQorCitPdXRwdXQgdGhlIGNvbmZpZ3VyYXRpb24gbmFtZSBvZiB0aGUgc3lzdGVtIFxgJG1lJyBpcyBydW4gb24uCisKK09wZXJhdGlvbiBtb2RlczoKKyAgLWgsIC0taGVscCAgICAgICAgIHByaW50IHRoaXMgaGVscCwgdGhlbiBleGl0CisgIC10LCAtLXRpbWUtc3RhbXAgICBwcmludCBkYXRlIG9mIGxhc3QgbW9kaWZpY2F0aW9uLCB0aGVuIGV4aXQKKyAgLXYsIC0tdmVyc2lvbiAgICAgIHByaW50IHZlcnNpb24gbnVtYmVyLCB0aGVuIGV4aXQKKworUmVwb3J0IGJ1Z3MgYW5kIHBhdGNoZXMgdG8gPGNvbmZpZy1wYXRjaGVzQGdudS5vcmc+LiIKKwordmVyc2lvbj0iXAorR05VIGNvbmZpZy5ndWVzcyAoJHRpbWVzdGFtcCkKKworT3JpZ2luYWxseSB3cml0dGVuIGJ5IFBlciBCb3RobmVyLgorQ29weXJpZ2h0IChDKSAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLAorMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgc2VlIHRoZSBzb3VyY2UgZm9yIGNvcHlpbmcgY29uZGl0aW9ucy4gIFRoZXJlIGlzIE5PCit3YXJyYW50eTsgbm90IGV2ZW4gZm9yIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4iCisKK2hlbHA9IgorVHJ5IFxgJG1lIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIgorCisjIFBhcnNlIGNvbW1hbmQgbGluZQord2hpbGUgdGVzdCAkIyAtZ3QgMCA7IGRvCisgIGNhc2UgJDEgaW4KKyAgICAtLXRpbWUtc3RhbXAgfCAtLXRpbWUqIHwgLXQgKQorICAgICAgIGVjaG8gIiR0aW1lc3RhbXAiIDsgZXhpdCA7OworICAgIC0tdmVyc2lvbiB8IC12ICkKKyAgICAgICBlY2hvICIkdmVyc2lvbiIgOyBleGl0IDs7CisgICAgLS1oZWxwIHwgLS1oKiB8IC1oICkKKyAgICAgICBlY2hvICIkdXNhZ2UiOyBleGl0IDs7CisgICAgLS0gKSAgICAgIyBTdG9wIG9wdGlvbiBwcm9jZXNzaW5nCisgICAgICAgc2hpZnQ7IGJyZWFrIDs7CisgICAgLSApCSMgVXNlIHN0ZGluIGFzIGlucHV0LgorICAgICAgIGJyZWFrIDs7CisgICAgLSogKQorICAgICAgIGVjaG8gIiRtZTogaW52YWxpZCBvcHRpb24gJDEkaGVscCIgPiYyCisgICAgICAgZXhpdCAxIDs7CisgICAgKiApCisgICAgICAgYnJlYWsgOzsKKyAgZXNhYworZG9uZQorCitpZiB0ZXN0ICQjICE9IDA7IHRoZW4KKyAgZWNobyAiJG1lOiB0b28gbWFueSBhcmd1bWVudHMkaGVscCIgPiYyCisgIGV4aXQgMQorZmkKKwordHJhcCAnZXhpdCAxJyAxIDIgMTUKKworIyBDQ19GT1JfQlVJTEQgLS0gY29tcGlsZXIgdXNlZCBieSB0aGlzIHNjcmlwdC4gTm90ZSB0aGF0IHRoZSB1c2Ugb2YgYQorIyBjb21waWxlciB0byBhaWQgaW4gc3lzdGVtIGRldGVjdGlvbiBpcyBkaXNjb3VyYWdlZCBhcyBpdCByZXF1aXJlcworIyB0ZW1wb3JhcnkgZmlsZXMgdG8gYmUgY3JlYXRlZCBhbmQsIGFzIHlvdSBjYW4gc2VlIGJlbG93LCBpdCBpcyBhCisjIGhlYWRhY2hlIHRvIGRlYWwgd2l0aCBpbiBhIHBvcnRhYmxlIGZhc2hpb24uCisKKyMgSGlzdG9yaWNhbGx5LCBgQ0NfRk9SX0JVSUxEJyB1c2VkIHRvIGJlIG5hbWVkIGBIT1NUX0NDJy4gV2Ugc3RpbGwKKyMgdXNlIGBIT1NUX0NDJyBpZiBkZWZpbmVkLCBidXQgaXQgaXMgZGVwcmVjYXRlZC4KKworIyBQb3J0YWJsZSB0bXAgZGlyZWN0b3J5IGNyZWF0aW9uIGluc3BpcmVkIGJ5IHRoZSBBdXRvY29uZiB0ZWFtLgorCitzZXRfY2NfZm9yX2J1aWxkPScKK3RyYXAgImV4aXRjb2RlPVwkPzsgKHJtIC1mIFwkdG1wZmlsZXMgMj4vZGV2L251bGw7IHJtZGlyIFwkdG1wIDI+L2Rldi9udWxsKSAmJiBleGl0IFwkZXhpdGNvZGUiIDAgOwordHJhcCAicm0gLWYgXCR0bXBmaWxlcyAyPi9kZXYvbnVsbDsgcm1kaXIgXCR0bXAgMj4vZGV2L251bGw7IGV4aXQgMSIgMSAyIDEzIDE1IDsKKzogJHtUTVBESVI9L3RtcH0gOworIHsgdG1wPWAodW1hc2sgMDc3ICYmIG1rdGVtcCAtZCAiJFRNUERJUi9jZ1hYWFhYWCIpIDI+L2Rldi9udWxsYCAmJiB0ZXN0IC1uICIkdG1wIiAmJiB0ZXN0IC1kICIkdG1wIiA7IH0gfHwKKyB7IHRlc3QgLW4gIiRSQU5ET00iICYmIHRtcD0kVE1QRElSL2NnJCQtJFJBTkRPTSAmJiAodW1hc2sgMDc3ICYmIG1rZGlyICR0bXApIDsgfSB8fAorIHsgdG1wPSRUTVBESVIvY2ctJCQgJiYgKHVtYXNrIDA3NyAmJiBta2RpciAkdG1wKSAmJiBlY2hvICJXYXJuaW5nOiBjcmVhdGluZyBpbnNlY3VyZSB0ZW1wIGRpcmVjdG9yeSIgPiYyIDsgfSB8fAorIHsgZWNobyAiJG1lOiBjYW5ub3QgY3JlYXRlIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSBpbiAkVE1QRElSIiA+JjIgOyBleGl0IDEgOyB9IDsKK2R1bW15PSR0bXAvZHVtbXkgOwordG1wZmlsZXM9IiRkdW1teS5jICRkdW1teS5vICRkdW1teS5yZWwgJGR1bW15IiA7CitjYXNlICRDQ19GT1JfQlVJTEQsJEhPU1RfQ0MsJENDIGluCisgLCwpICAgIGVjaG8gImludCB4OyIgPiAkZHVtbXkuYyA7CisJZm9yIGMgaW4gY2MgZ2NjIGM4OSBjOTkgOyBkbworCSAgaWYgKCRjIC1jIC1vICRkdW1teS5vICRkdW1teS5jKSA+L2Rldi9udWxsIDI+JjEgOyB0aGVuCisJICAgICBDQ19GT1JfQlVJTEQ9IiRjIjsgYnJlYWsgOworCSAgZmkgOworCWRvbmUgOworCWlmIHRlc3QgeCIkQ0NfRk9SX0JVSUxEIiA9IHggOyB0aGVuCisJICBDQ19GT1JfQlVJTEQ9bm9fY29tcGlsZXJfZm91bmQgOworCWZpCisJOzsKKyAsLCopICAgQ0NfRk9SX0JVSUxEPSRDQyA7OworICwqLCopICBDQ19GT1JfQlVJTEQ9JEhPU1RfQ0MgOzsKK2VzYWMgOyBzZXRfY2NfZm9yX2J1aWxkPSA7JworCisjIFRoaXMgaXMgbmVlZGVkIHRvIGZpbmQgdW5hbWUgb24gYSBQeXJhbWlkIE9TeCB3aGVuIHJ1biBpbiB0aGUgQlNEIHVuaXZlcnNlLgorIyAoZ2hhemlAbm9jLnJ1dGdlcnMuZWR1IDE5OTQtMDgtMjQpCitpZiAodGVzdCAtZiAvLmF0dGJpbi91bmFtZSkgPi9kZXYvbnVsbCAyPiYxIDsgdGhlbgorCVBBVEg9JFBBVEg6Ly5hdHRiaW4gOyBleHBvcnQgUEFUSAorZmkKKworVU5BTUVfTUFDSElORT1gKHVuYW1lIC1tKSAyPi9kZXYvbnVsbGAgfHwgVU5BTUVfTUFDSElORT11bmtub3duCitVTkFNRV9SRUxFQVNFPWAodW5hbWUgLXIpIDI+L2Rldi9udWxsYCB8fCBVTkFNRV9SRUxFQVNFPXVua25vd24KK1VOQU1FX1NZU1RFTT1gKHVuYW1lIC1zKSAyPi9kZXYvbnVsbGAgIHx8IFVOQU1FX1NZU1RFTT11bmtub3duCitVTkFNRV9WRVJTSU9OPWAodW5hbWUgLXYpIDI+L2Rldi9udWxsYCB8fCBVTkFNRV9WRVJTSU9OPXVua25vd24KKworIyBOb3RlOiBvcmRlciBpcyBzaWduaWZpY2FudCAtIHRoZSBjYXNlIGJyYW5jaGVzIGFyZSBub3QgZXhjbHVzaXZlLgorCitjYXNlICIke1VOQU1FX01BQ0hJTkV9OiR7VU5BTUVfU1lTVEVNfToke1VOQU1FX1JFTEVBU0V9OiR7VU5BTUVfVkVSU0lPTn0iIGluCisgICAgKjpOZXRCU0Q6KjoqKQorCSMgTmV0QlNEIChuYnNkKSB0YXJnZXRzIHNob3VsZCAod2hlcmUgYXBwbGljYWJsZSkgbWF0Y2ggb25lIG9yCisJIyBtb3JlIG9mIHRoZSB0dXBwbGVzOiAqLSotbmV0YnNkZWxmKiwgKi0qLW5ldGJzZGFvdXQqLAorCSMgKi0qLW5ldGJzZGVjb2ZmKiBhbmQgKi0qLW5ldGJzZCouICBGb3IgdGFyZ2V0cyB0aGF0IHJlY2VudGx5CisJIyBzd2l0Y2hlZCB0byBFTEYsICotKi1uZXRic2QqIHdvdWxkIHNlbGVjdCB0aGUgb2xkCisJIyBvYmplY3QgZmlsZSBmb3JtYXQuICBUaGlzIHByb3ZpZGVzIGJvdGggZm9yd2FyZAorCSMgY29tcGF0aWJpbGl0eSBhbmQgYSBjb25zaXN0ZW50IG1lY2hhbmlzbSBmb3Igc2VsZWN0aW5nIHRoZQorCSMgb2JqZWN0IGZpbGUgZm9ybWF0LgorCSMKKwkjIE5vdGU6IE5ldEJTRCBkb2Vzbid0IHBhcnRpY3VsYXJseSBjYXJlIGFib3V0IHRoZSB2ZW5kb3IKKwkjIHBvcnRpb24gb2YgdGhlIG5hbWUuICBXZSBhbHdheXMgc2V0IGl0IHRvICJ1bmtub3duIi4KKwlzeXNjdGw9InN5c2N0bCAtbiBody5tYWNoaW5lX2FyY2giCisJVU5BTUVfTUFDSElORV9BUkNIPWAoL3NiaW4vJHN5c2N0bCAyPi9kZXYvbnVsbCB8fCBcCisJICAgIC91c3Ivc2Jpbi8kc3lzY3RsIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bilgCisJY2FzZSAiJHtVTkFNRV9NQUNISU5FX0FSQ0h9IiBpbgorCSAgICBhcm1lYikgbWFjaGluZT1hcm1lYi11bmtub3duIDs7CisJICAgIGFybSopIG1hY2hpbmU9YXJtLXVua25vd24gOzsKKwkgICAgc2gzZWwpIG1hY2hpbmU9c2hsLXVua25vd24gOzsKKwkgICAgc2gzZWIpIG1hY2hpbmU9c2gtdW5rbm93biA7OworCSAgICBzaDVlbCkgbWFjaGluZT1zaDVsZS11bmtub3duIDs7CisJICAgICopIG1hY2hpbmU9JHtVTkFNRV9NQUNISU5FX0FSQ0h9LXVua25vd24gOzsKKwllc2FjCisJIyBUaGUgT3BlcmF0aW5nIFN5c3RlbSBpbmNsdWRpbmcgb2JqZWN0IGZvcm1hdCwgaWYgaXQgaGFzIHN3aXRjaGVkCisJIyB0byBFTEYgcmVjZW50bHksIG9yIHdpbGwgaW4gdGhlIGZ1dHVyZS4KKwljYXNlICIke1VOQU1FX01BQ0hJTkVfQVJDSH0iIGluCisJICAgIGFybSp8aTM4NnxtNjhrfG5zMzJrfHNoMyp8c3BhcmN8dmF4KQorCQlldmFsICRzZXRfY2NfZm9yX2J1aWxkCisJCWlmIGVjaG8gX19FTEZfXyB8ICRDQ19GT1JfQlVJTEQgLUUgLSAyPi9kZXYvbnVsbCBcCisJCQl8IGdyZXAgLXEgX19FTEZfXworCQl0aGVuCisJCSAgICAjIE9uY2UgYWxsIHV0aWxpdGllcyBjYW4gYmUgRUNPRkYgKG5ldGJzZGVjb2ZmKSBvciBhLm91dCAobmV0YnNkYW91dCkuCisJCSAgICAjIFJldHVybiBuZXRic2QgZm9yIGVpdGhlci4gIEZJWD8KKwkJICAgIG9zPW5ldGJzZAorCQllbHNlCisJCSAgICBvcz1uZXRic2RlbGYKKwkJZmkKKwkJOzsKKwkgICAgKikKKwkgICAgICAgIG9zPW5ldGJzZAorCQk7OworCWVzYWMKKwkjIFRoZSBPUyByZWxlYXNlCisJIyBEZWJpYW4gR05VL05ldEJTRCBtYWNoaW5lcyBoYXZlIGEgZGlmZmVyZW50IHVzZXJsYW5kLCBhbmQKKwkjIHRodXMsIG5lZWQgYSBkaXN0aW5jdCB0cmlwbGV0LiBIb3dldmVyLCB0aGV5IGRvIG5vdCBuZWVkCisJIyBrZXJuZWwgdmVyc2lvbiBpbmZvcm1hdGlvbiwgc28gaXQgY2FuIGJlIHJlcGxhY2VkIHdpdGggYQorCSMgc3VpdGFibGUgdGFnLCBpbiB0aGUgc3R5bGUgb2YgbGludXgtZ251LgorCWNhc2UgIiR7VU5BTUVfVkVSU0lPTn0iIGluCisJICAgIERlYmlhbiopCisJCXJlbGVhc2U9Jy1nbnUnCisJCTs7CisJICAgICopCisJCXJlbGVhc2U9YGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvWy1fXS4qL1wuLydgCisJCTs7CisJZXNhYworCSMgU2luY2UgQ1BVX1RZUEUtTUFOVUZBQ1RVUkVSLUtFUk5FTC1PUEVSQVRJTkdfU1lTVEVNOgorCSMgY29udGFpbnMgcmVkdW5kYW50IGluZm9ybWF0aW9uLCB0aGUgc2hvcnRlciBmb3JtOgorCSMgQ1BVX1RZUEUtTUFOVUZBQ1RVUkVSLU9QRVJBVElOR19TWVNURU0gaXMgdXNlZC4KKwllY2hvICIke21hY2hpbmV9LSR7b3N9JHtyZWxlYXNlfSIKKwlleGl0IDs7CisgICAgKjpPcGVuQlNEOio6KikKKwlVTkFNRV9NQUNISU5FX0FSQ0g9YGFyY2ggfCBzZWQgJ3MvT3BlbkJTRC4vLydgCisJZWNobyAke1VOQU1FX01BQ0hJTkVfQVJDSH0tdW5rbm93bi1vcGVuYnNkJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAqOmVra29CU0Q6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWVra29ic2Qke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICo6U29saWRCU0Q6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLXNvbGlkYnNkJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBtYWNwcGM6TWlyQlNEOio6KikKKwllY2hvIHBvd2VycGMtdW5rbm93bi1taXJic2Qke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICo6TWlyQlNEOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1taXJic2Qke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIGFscGhhOk9TRjE6KjoqKQorCWNhc2UgJFVOQU1FX1JFTEVBU0UgaW4KKwkqNC4wKQorCQlVTkFNRV9SRUxFQVNFPWAvdXNyL3NiaW4vc2l6ZXIgLXYgfCBhd2sgJ3twcmludCAkM30nYAorCQk7OworCSo1LiopCisJICAgICAgICBVTkFNRV9SRUxFQVNFPWAvdXNyL3NiaW4vc2l6ZXIgLXYgfCBhd2sgJ3twcmludCAkNH0nYAorCQk7OworCWVzYWMKKwkjIEFjY29yZGluZyB0byBDb21wYXEsIC91c3Ivc2Jpbi9wc3JpbmZvIGhhcyBiZWVuIGF2YWlsYWJsZSBvbgorCSMgT1NGLzEgYW5kIFRydTY0IHN5c3RlbXMgcHJvZHVjZWQgc2luY2UgMTk5NS4gIEkgaG9wZSB0aGF0CisJIyBjb3ZlcnMgbW9zdCBzeXN0ZW1zIHJ1bm5pbmcgdG9kYXkuICBUaGlzIGNvZGUgcGlwZXMgdGhlIENQVQorCSMgdHlwZXMgdGhyb3VnaCBoZWFkIC1uIDEsIHNvIHdlIG9ubHkgZGV0ZWN0IHRoZSB0eXBlIG9mIENQVSAwLgorCUFMUEhBX0NQVV9UWVBFPWAvdXNyL3NiaW4vcHNyaW5mbyAtdiB8IHNlZCAtbiAtZSAncy9eICBUaGUgYWxwaGEgXCguKlwpIHByb2Nlc3Nvci4qJC9cMS9wJyB8IGhlYWQgLW4gMWAKKwljYXNlICIkQUxQSEFfQ1BVX1RZUEUiIGluCisJICAgICJFVjQgKDIxMDY0KSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhIiA7OworCSAgICAiRVY0LjUgKDIxMDY0KSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhIiA7OworCSAgICAiTENBNCAoMjEwNjYvMjEwNjgpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGEiIDs7CisJICAgICJFVjUgKDIxMTY0KSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhZXY1IiA7OworCSAgICAiRVY1LjYgKDIxMTY0QSkiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYWV2NTYiIDs7CisJICAgICJFVjUuNiAoMjExNjRQQykiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYXBjYTU2IiA7OworCSAgICAiRVY1LjcgKDIxMTY0UEMpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGFwY2E1NyIgOzsKKwkgICAgIkVWNiAoMjEyNjQpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGFldjYiIDs7CisJICAgICJFVjYuNyAoMjEyNjRBKSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhZXY2NyIgOzsKKwkgICAgIkVWNi44Q0IgKDIxMjY0QykiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYWV2NjgiIDs7CisJICAgICJFVjYuOEFMICgyMTI2NEIpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGFldjY4IiA7OworCSAgICAiRVY2LjhDWCAoMjEyNjREKSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhZXY2OCIgOzsKKwkgICAgIkVWNi45QSAoMjEyNjQvRVY2OUEpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGFldjY5IiA7OworCSAgICAiRVY3ICgyMTM2NCkiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYWV2NyIgOzsKKwkgICAgIkVWNy45ICgyMTM2NEEpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGFldjc5IiA7OworCWVzYWMKKwkjIEEgUG4ubiB2ZXJzaW9uIGlzIGEgcGF0Y2hlZCB2ZXJzaW9uLgorCSMgQSBWbi5uIHZlcnNpb24gaXMgYSByZWxlYXNlZCB2ZXJzaW9uLgorCSMgQSBUbi5uIHZlcnNpb24gaXMgYSByZWxlYXNlZCBmaWVsZCB0ZXN0IHZlcnNpb24uCisJIyBBIFhuLm4gdmVyc2lvbiBpcyBhbiB1bnJlbGVhc2VkIGV4cGVyaW1lbnRhbCBiYXNlbGV2ZWwuCisJIyAxLjIgdXNlcyAiMS4yIiBmb3IgdW5hbWUgLXIuCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LWRlYy1vc2ZgZWNobyAke1VOQU1FX1JFTEVBU0V9IHwgc2VkIC1lICdzL15bUFZUWF0vLycgfCB0ciAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eidgCisJZXhpdCA7OworICAgIEFscGhhXCAqOldpbmRvd3NfTlQqOiopCisJIyBIb3cgZG8gd2Uga25vdyBpdCdzIEludGVyaXggcmF0aGVyIHRoYW4gdGhlIGdlbmVyaWMgUE9TSVggc3Vic3lzdGVtPworCSMgU2hvdWxkIHdlIGNoYW5nZSBVTkFNRV9NQUNISU5FIGJhc2VkIG9uIHRoZSBvdXRwdXQgb2YgdW5hbWUgaW5zdGVhZAorCSMgb2YgdGhlIHNwZWNpZmljIEFscGhhIG1vZGVsPworCWVjaG8gYWxwaGEtcGMtaW50ZXJpeAorCWV4aXQgOzsKKyAgICAyMTA2NDpXaW5kb3dzX05UOjUwOjMpCisJZWNobyBhbHBoYS1kZWMtd2lubnQzLjUKKwlleGl0IDs7CisgICAgQW1pZ2EqOlVOSVhfU3lzdGVtX1Y6NC4wOiopCisJZWNobyBtNjhrLXVua25vd24tc3lzdjQKKwlleGl0IDs7CisgICAgKjpbQWFdbWlnYVtPb11bU3NdOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1hbWlnYW9zCisJZXhpdCA7OworICAgICo6W01tXW9ycGhbT29dW1NzXToqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbW9ycGhvcworCWV4aXQgOzsKKyAgICAqOk9TLzM5MDoqOiopCisJZWNobyBpMzcwLWlibS1vcGVuZWRpdGlvbgorCWV4aXQgOzsKKyAgICAqOnovVk06KjoqKQorCWVjaG8gczM5MC1pYm0tenZtb2UKKwlleGl0IDs7CisgICAgKjpPUzQwMDoqOiopCisgICAgICAgIGVjaG8gcG93ZXJwYy1pYm0tb3M0MDAKKwlleGl0IDs7CisgICAgYXJtOlJJU0MqOjEuWzAxMl0qOip8YXJtOnJpc2NpeDoxLlswMTJdKjoqKQorCWVjaG8gYXJtLWFjb3JuLXJpc2NpeCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgYXJtOnJpc2NvczoqOip8YXJtOlJJU0NPUzoqOiopCisJZWNobyBhcm0tdW5rbm93bi1yaXNjb3MKKwlleGl0IDs7CisgICAgU1IyPzAxOkhJLVVYL01QUDoqOiogfCBTUjgwMDA6SEktVVgvTVBQOio6KikKKwllY2hvIGhwcGExLjEtaGl0YWNoaS1oaXV4bXBwCisJZXhpdCA7OworICAgIFB5cmFtaWQqOk9TeCo6KjoqIHwgTUlTKjpPU3gqOio6KiB8IE1JUyo6U01QX0RDLU9TeCo6KjoqKQorCSMgYWtlZUB3cGRpczAzLndwYWZiLmFmLm1pbCAoRWFybGUgRi4gQWtlKSBjb250cmlidXRlZCBNSVMgYW5kIE5JTEUuCisJaWYgdGVzdCAiYCgvYmluL3VuaXZlcnNlKSAyPi9kZXYvbnVsbGAiID0gYXR0IDsgdGhlbgorCQllY2hvIHB5cmFtaWQtcHlyYW1pZC1zeXN2MworCWVsc2UKKwkJZWNobyBweXJhbWlkLXB5cmFtaWQtYnNkCisJZmkKKwlleGl0IDs7CisgICAgTklMRSo6KjoqOmRjb3N4KQorCWVjaG8gcHlyYW1pZC1weXJhbWlkLXN2cjQKKwlleGl0IDs7CisgICAgRFJTPzYwMDA6dW5peDo0LjA6NiopCisJZWNobyBzcGFyYy1pY2wtbng2CisJZXhpdCA7OworICAgIERSUz82MDAwOlVOSVhfU1Y6NC4yKjo3KiB8IERSUz82MDAwOmlzaXM6NC4yKjo3KikKKwljYXNlIGAvdXNyL2Jpbi91bmFtZSAtcGAgaW4KKwkgICAgc3BhcmMpIGVjaG8gc3BhcmMtaWNsLW54NzsgZXhpdCA7OworCWVzYWMgOzsKKyAgICBzMzkweDpTdW5PUzoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LWlibS1zb2xhcmlzMmBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1teLl0qLy8nYAorCWV4aXQgOzsKKyAgICBzdW40SDpTdW5PUzo1Lio6KikKKwllY2hvIHNwYXJjLWhhbC1zb2xhcmlzMmBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1teLl0qLy8nYAorCWV4aXQgOzsKKyAgICBzdW40KjpTdW5PUzo1Lio6KiB8IHRhZHBvbGUqOlN1bk9TOjUuKjoqKQorCWVjaG8gc3BhcmMtc3VuLXNvbGFyaXMyYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvW14uXSovLydgCisJZXhpdCA7OworICAgIGk4NnBjOkF1cm9yYVVYOjUuKjoqIHwgaTg2eGVuOkF1cm9yYVVYOjUuKjoqKQorCWVjaG8gaTM4Ni1wYy1hdXJvcmF1eCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgaTg2cGM6U3VuT1M6NS4qOiogfCBpODZ4ZW46U3VuT1M6NS4qOiopCisJZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorCVNVTl9BUkNIPSJpMzg2IgorCSMgSWYgdGhlcmUgaXMgYSBjb21waWxlciwgc2VlIGlmIGl0IGlzIGNvbmZpZ3VyZWQgZm9yIDY0LWJpdCBvYmplY3RzLgorCSMgTm90ZSB0aGF0IHRoZSBTdW4gY2MgZG9lcyBub3QgdHVybiBfX0xQNjRfXyBpbnRvIDEgbGlrZSBnY2MgZG9lcy4KKwkjIFRoaXMgdGVzdCB3b3JrcyBmb3IgYm90aCBjb21waWxlcnMuCisJaWYgWyAiJENDX0ZPUl9CVUlMRCIgIT0gJ25vX2NvbXBpbGVyX2ZvdW5kJyBdOyB0aGVuCisJICAgIGlmIChlY2hvICcjaWZkZWYgX19hbWQ2NCc7IGVjaG8gSVNfNjRCSVRfQVJDSDsgZWNobyAnI2VuZGlmJykgfCBcCisJCShDQ09QVFM9ICRDQ19GT1JfQlVJTEQgLUUgLSAyPi9kZXYvbnVsbCkgfCBcCisJCWdyZXAgSVNfNjRCSVRfQVJDSCA+L2Rldi9udWxsCisJICAgIHRoZW4KKwkJU1VOX0FSQ0g9Ing4Nl82NCIKKwkgICAgZmkKKwlmaQorCWVjaG8gJHtTVU5fQVJDSH0tcGMtc29sYXJpczJgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bXi5dKi8vJ2AKKwlleGl0IDs7CisgICAgc3VuNCo6U3VuT1M6Nio6KikKKwkjIEFjY29yZGluZyB0byBjb25maWcuc3ViLCB0aGlzIGlzIHRoZSBwcm9wZXIgd2F5IHRvIGNhbm9uaWNhbGl6ZQorCSMgU3VuT1M2LiAgSGFyZCB0byBndWVzcyBleGFjdGx5IHdoYXQgU3VuT1M2IHdpbGwgYmUgbGlrZSwgYnV0CisJIyBpdCdzIGxpa2VseSB0byBiZSBtb3JlIGxpa2UgU29sYXJpcyB0aGFuIFN1bk9TNC4KKwllY2hvIHNwYXJjLXN1bi1zb2xhcmlzM2BlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1teLl0qLy8nYAorCWV4aXQgOzsKKyAgICBzdW40KjpTdW5PUzoqOiopCisJY2FzZSAiYC91c3IvYmluL2FyY2ggLWtgIiBpbgorCSAgICBTZXJpZXMqfFM0KikKKwkJVU5BTUVfUkVMRUFTRT1gdW5hbWUgLXZgCisJCTs7CisJZXNhYworCSMgSmFwYW5lc2UgTGFuZ3VhZ2UgdmVyc2lvbnMgaGF2ZSBhIHZlcnNpb24gbnVtYmVyIGxpa2UgYDQuMS4zLUpMJy4KKwllY2hvIHNwYXJjLXN1bi1zdW5vc2BlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzLy0vXy8nYAorCWV4aXQgOzsKKyAgICBzdW4zKjpTdW5PUzoqOiopCisJZWNobyBtNjhrLXN1bi1zdW5vcyR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgc3VuKjoqOjQuMkJTRDoqKQorCVVOQU1FX1JFTEVBU0U9YChzZWQgMXEgL2V0Yy9tb3RkIHwgYXdrICd7cHJpbnQgc3Vic3RyKCQ1LDEsMyl9JykgMj4vZGV2L251bGxgCisJdGVzdCAieCR7VU5BTUVfUkVMRUFTRX0iID0gIngiICYmIFVOQU1FX1JFTEVBU0U9MworCWNhc2UgImAvYmluL2FyY2hgIiBpbgorCSAgICBzdW4zKQorCQllY2hvIG02OGstc3VuLXN1bm9zJHtVTkFNRV9SRUxFQVNFfQorCQk7OworCSAgICBzdW40KQorCQllY2hvIHNwYXJjLXN1bi1zdW5vcyR7VU5BTUVfUkVMRUFTRX0KKwkJOzsKKwllc2FjCisJZXhpdCA7OworICAgIGF1c2hwOlN1bk9TOio6KikKKwllY2hvIHNwYXJjLWF1c3BleC1zdW5vcyR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgIyBUaGUgc2l0dWF0aW9uIGZvciBNaU5UIGlzIGEgbGl0dGxlIGNvbmZ1c2luZy4gIFRoZSBtYWNoaW5lIG5hbWUKKyAgICAjIGNhbiBiZSB2aXJ0dWFsbHkgZXZlcnl0aGluZyAoZXZlcnl0aGluZyB3aGljaCBpcyBub3QKKyAgICAjICJhdGFyaXN0IiBvciAiYXRhcmlzdGUiIGF0IGxlYXN0IHNob3VsZCBoYXZlIGEgcHJvY2Vzc29yCisgICAgIyA+IG02ODAwMCkuICBUaGUgc3lzdGVtIG5hbWUgcmFuZ2VzIGZyb20gIk1pTlQiIG92ZXIgIkZyZWVNaU5UIgorICAgICMgdG8gdGhlIGxvd2VyY2FzZSB2ZXJzaW9uICJtaW50IiAob3IgImZyZWVtaW50IikuICBGaW5hbGx5CisgICAgIyB0aGUgc3lzdGVtIG5hbWUgIlRPUyIgZGVub3RlcyBhIHN5c3RlbSB3aGljaCBpcyBhY3R1YWxseSBub3QKKyAgICAjIE1pTlQuICBCdXQgTWlOVCBpcyBkb3dud2FyZCBjb21wYXRpYmxlIHRvIFRPUywgc28gdGhpcyBzaG91bGQKKyAgICAjIGJlIG5vIHByb2JsZW0uCisgICAgYXRhcmlzdFtlXToqTWlOVDoqOiogfCBhdGFyaXN0W2VdOiptaW50Oio6KiB8IGF0YXJpc3RbZV06KlRPUzoqOiopCisgICAgICAgIGVjaG8gbTY4ay1hdGFyaS1taW50JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBhdGFyaSo6Kk1pTlQ6KjoqIHwgYXRhcmkqOiptaW50Oio6KiB8IGF0YXJpc3RbZV06KlRPUzoqOiopCisJZWNobyBtNjhrLWF0YXJpLW1pbnQke1VOQU1FX1JFTEVBU0V9CisgICAgICAgIGV4aXQgOzsKKyAgICAqZmFsY29uKjoqTWlOVDoqOiogfCAqZmFsY29uKjoqbWludDoqOiogfCAqZmFsY29uKjoqVE9TOio6KikKKyAgICAgICAgZWNobyBtNjhrLWF0YXJpLW1pbnQke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIG1pbGFuKjoqTWlOVDoqOiogfCBtaWxhbio6Km1pbnQ6KjoqIHwgKm1pbGFuKjoqVE9TOio6KikKKyAgICAgICAgZWNobyBtNjhrLW1pbGFuLW1pbnQke1VOQU1FX1JFTEVBU0V9CisgICAgICAgIGV4aXQgOzsKKyAgICBoYWRlcyo6Kk1pTlQ6KjoqIHwgaGFkZXMqOiptaW50Oio6KiB8ICpoYWRlcyo6KlRPUzoqOiopCisgICAgICAgIGVjaG8gbTY4ay1oYWRlcy1taW50JHtVTkFNRV9SRUxFQVNFfQorICAgICAgICBleGl0IDs7CisgICAgKjoqTWlOVDoqOiogfCAqOiptaW50Oio6KiB8ICo6KlRPUzoqOiopCisgICAgICAgIGVjaG8gbTY4ay11bmtub3duLW1pbnQke1VOQU1FX1JFTEVBU0V9CisgICAgICAgIGV4aXQgOzsKKyAgICBtNjhrOm1hY2h0ZW46KjoqKQorCWVjaG8gbTY4ay1hcHBsZS1tYWNodGVuJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBwb3dlcnBjOm1hY2h0ZW46KjoqKQorCWVjaG8gcG93ZXJwYy1hcHBsZS1tYWNodGVuJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBSSVNDKjpNYWNoOio6KikKKwllY2hvIG1pcHMtZGVjLW1hY2hfYnNkNC4zCisJZXhpdCA7OworICAgIFJJU0MqOlVMVFJJWDoqOiopCisJZWNobyBtaXBzLWRlYy11bHRyaXgke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIFZBWCo6VUxUUklYKjoqOiopCisJZWNobyB2YXgtZGVjLXVsdHJpeCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgMjAyMDpDTElYOio6KiB8IDI0MzA6Q0xJWDoqOiopCisJZWNobyBjbGlwcGVyLWludGVyZ3JhcGgtY2xpeCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgbWlwczoqOio6VU1JUFMgfCBtaXBzOio6KjpSSVNDb3MpCisJZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorCXNlZCAncy9eCS8vJyA8PCBFT0YgPiRkdW1teS5jCisjaWZkZWYgX19jcGx1c3BsdXMKKyNpbmNsdWRlIDxzdGRpby5oPiAgLyogZm9yIHByaW50ZigpIHByb3RvdHlwZSAqLworCWludCBtYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKSB7CisjZWxzZQorCWludCBtYWluIChhcmdjLCBhcmd2KSBpbnQgYXJnYzsgY2hhciAqYXJndltdOyB7CisjZW5kaWYKKwkjaWYgZGVmaW5lZCAoaG9zdF9taXBzKSAmJiBkZWZpbmVkIChNSVBTRUIpCisJI2lmIGRlZmluZWQgKFNZU1RZUEVfU1lTVikKKwkgIHByaW50ZiAoIm1pcHMtbWlwcy1yaXNjb3Mlc3N5c3ZcbiIsIGFyZ3ZbMV0pOyBleGl0ICgwKTsKKwkjZW5kaWYKKwkjaWYgZGVmaW5lZCAoU1lTVFlQRV9TVlI0KQorCSAgcHJpbnRmICgibWlwcy1taXBzLXJpc2NvcyVzc3ZyNFxuIiwgYXJndlsxXSk7IGV4aXQgKDApOworCSNlbmRpZgorCSNpZiBkZWZpbmVkIChTWVNUWVBFX0JTRDQzKSB8fCBkZWZpbmVkKFNZU1RZUEVfQlNEKQorCSAgcHJpbnRmICgibWlwcy1taXBzLXJpc2NvcyVzYnNkXG4iLCBhcmd2WzFdKTsgZXhpdCAoMCk7CisJI2VuZGlmCisJI2VuZGlmCisJICBleGl0ICgtMSk7CisJfQorRU9GCisJJENDX0ZPUl9CVUlMRCAtbyAkZHVtbXkgJGR1bW15LmMgJiYKKwkgIGR1bW15YXJnPWBlY2hvICIke1VOQU1FX1JFTEVBU0V9IiB8IHNlZCAtbiAncy9cKFswLTldKlwpLiovXDEvcCdgICYmCisJICBTWVNURU1fTkFNRT1gJGR1bW15ICRkdW1teWFyZ2AgJiYKKwkgICAgeyBlY2hvICIkU1lTVEVNX05BTUUiOyBleGl0OyB9CisJZWNobyBtaXBzLW1pcHMtcmlzY29zJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBNb3Rvcm9sYTpQb3dlck1BWF9PUzoqOiopCisJZWNobyBwb3dlcnBjLW1vdG9yb2xhLXBvd2VybWF4CisJZXhpdCA7OworICAgIE1vdG9yb2xhOio6NC4zOlBMOC0qKQorCWVjaG8gcG93ZXJwYy1oYXJyaXMtcG93ZXJtYXgKKwlleGl0IDs7CisgICAgTmlnaHRfSGF3azoqOio6UG93ZXJNQVhfT1MgfCBTeW5lcmd5OlBvd2VyTUFYX09TOio6KikKKwllY2hvIHBvd2VycGMtaGFycmlzLXBvd2VybWF4CisJZXhpdCA7OworICAgIE5pZ2h0X0hhd2s6UG93ZXJfVU5JWDoqOiopCisJZWNobyBwb3dlcnBjLWhhcnJpcy1wb3dlcnVuaXgKKwlleGl0IDs7CisgICAgbTg4azpDWC9VWDo3KjoqKQorCWVjaG8gbTg4ay1oYXJyaXMtY3h1eDcKKwlleGl0IDs7CisgICAgbTg4azoqOjQqOlI0KikKKwllY2hvIG04OGstbW90b3JvbGEtc3lzdjQKKwlleGl0IDs7CisgICAgbTg4azoqOjMqOlIzKikKKwllY2hvIG04OGstbW90b3JvbGEtc3lzdjMKKwlleGl0IDs7CisgICAgQVZpaU9OOmRndXg6KjoqKQorICAgICAgICAjIERHL1VYIHJldHVybnMgQVZpaU9OIGZvciBhbGwgYXJjaGl0ZWN0dXJlcworICAgICAgICBVTkFNRV9QUk9DRVNTT1I9YC91c3IvYmluL3VuYW1lIC1wYAorCWlmIFsgJFVOQU1FX1BST0NFU1NPUiA9IG1jODgxMDAgXSB8fCBbICRVTkFNRV9QUk9DRVNTT1IgPSBtYzg4MTEwIF0KKwl0aGVuCisJICAgIGlmIFsgJHtUQVJHRVRfQklOQVJZX0lOVEVSRkFDRX14ID0gbTg4a2RndXhlbGZ4IF0gfHwgXAorCSAgICAgICBbICR7VEFSR0VUX0JJTkFSWV9JTlRFUkZBQ0V9eCA9IHggXQorCSAgICB0aGVuCisJCWVjaG8gbTg4ay1kZy1kZ3V4JHtVTkFNRV9SRUxFQVNFfQorCSAgICBlbHNlCisJCWVjaG8gbTg4ay1kZy1kZ3V4YmNzJHtVTkFNRV9SRUxFQVNFfQorCSAgICBmaQorCWVsc2UKKwkgICAgZWNobyBpNTg2LWRnLWRndXgke1VOQU1FX1JFTEVBU0V9CisJZmkKKyAJZXhpdCA7OworICAgIE04OCo6RG9scGhpbk9TOio6KikJIyBEb2xwaGluT1MgKFNWUjMpCisJZWNobyBtODhrLWRvbHBoaW4tc3lzdjMKKwlleGl0IDs7CisgICAgTTg4KjoqOlIzKjoqKQorCSMgRGVsdGEgODhrIHN5c3RlbSBydW5uaW5nIFNWUjMKKwllY2hvIG04OGstbW90b3JvbGEtc3lzdjMKKwlleGl0IDs7CisgICAgWEQ4OCo6KjoqOiopICMgVGVrdHJvbml4IFhEODggc3lzdGVtIHJ1bm5pbmcgVVRla1YgKFNWUjMpCisJZWNobyBtODhrLXRla3Ryb25peC1zeXN2MworCWV4aXQgOzsKKyAgICBUZWs0M1swLTldWzAtOV06VVRlazoqOiopICMgVGVrdHJvbml4IDQzMDAgc3lzdGVtIHJ1bm5pbmcgVVRlayAoQlNEKQorCWVjaG8gbTY4ay10ZWt0cm9uaXgtYnNkCisJZXhpdCA7OworICAgICo6SVJJWCo6KjoqKQorCWVjaG8gbWlwcy1zZ2ktaXJpeGBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzLy0vXy9nJ2AKKwlleGl0IDs7CisgICAgPz8/Pz8/Pz86QUlYPzpbMTJdLjE6MikgICAjIEFJWCAyLjIuMSBvciBBSVggMi4xLjEgaXMgUlQvUEMgQUlYLgorCWVjaG8gcm9tcC1pYm0tYWl4ICAgICAjIHVuYW1lIC1tIGdpdmVzIGFuIDggaGV4LWNvZGUgQ1BVIGlkCisJZXhpdCA7OyAgICAgICAgICAgICAgICMgTm90ZSB0aGF0OiBlY2hvICInYHVuYW1lIC1zYCciIGdpdmVzICdBSVggJworICAgIGkqODY6QUlYOio6KikKKwllY2hvIGkzODYtaWJtLWFpeAorCWV4aXQgOzsKKyAgICBpYTY0OkFJWDoqOiopCisJaWYgWyAteCAvdXNyL2Jpbi9vc2xldmVsIF0gOyB0aGVuCisJCUlCTV9SRVY9YC91c3IvYmluL29zbGV2ZWxgCisJZWxzZQorCQlJQk1fUkVWPSR7VU5BTUVfVkVSU0lPTn0uJHtVTkFNRV9SRUxFQVNFfQorCWZpCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LWlibS1haXgke0lCTV9SRVZ9CisJZXhpdCA7OworICAgICo6QUlYOjI6MykKKwlpZiBncmVwIGJvczMyNSAvdXNyL2luY2x1ZGUvc3RkaW8uaCA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKwkJZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorCQlzZWQgJ3MvXgkJLy8nIDw8IEVPRiA+JGR1bW15LmMKKwkJI2luY2x1ZGUgPHN5cy9zeXN0ZW1jZmcuaD4KKworCQltYWluKCkKKwkJCXsKKwkJCWlmICghX19wb3dlcl9wYygpKQorCQkJCWV4aXQoMSk7CisJCQlwdXRzKCJwb3dlcnBjLWlibS1haXgzLjIuNSIpOworCQkJZXhpdCgwKTsKKwkJCX0KK0VPRgorCQlpZiAkQ0NfRk9SX0JVSUxEIC1vICRkdW1teSAkZHVtbXkuYyAmJiBTWVNURU1fTkFNRT1gJGR1bW15YAorCQl0aGVuCisJCQllY2hvICIkU1lTVEVNX05BTUUiCisJCWVsc2UKKwkJCWVjaG8gcnM2MDAwLWlibS1haXgzLjIuNQorCQlmaQorCWVsaWYgZ3JlcCBib3MzMjQgL3Vzci9pbmNsdWRlL3N0ZGlvLmggPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisJCWVjaG8gcnM2MDAwLWlibS1haXgzLjIuNAorCWVsc2UKKwkJZWNobyByczYwMDAtaWJtLWFpeDMuMgorCWZpCisJZXhpdCA7OworICAgICo6QUlYOio6WzQ1Nl0pCisJSUJNX0NQVV9JRD1gL3Vzci9zYmluL2xzZGV2IC1DIC1jIHByb2Nlc3NvciAtUyBhdmFpbGFibGUgfCBzZWQgMXEgfCBhd2sgJ3sgcHJpbnQgJDEgfSdgCisJaWYgL3Vzci9zYmluL2xzYXR0ciAtRWwgJHtJQk1fQ1BVX0lEfSB8IGdyZXAgJyBQT1dFUicgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisJCUlCTV9BUkNIPXJzNjAwMAorCWVsc2UKKwkJSUJNX0FSQ0g9cG93ZXJwYworCWZpCisJaWYgWyAteCAvdXNyL2Jpbi9vc2xldmVsIF0gOyB0aGVuCisJCUlCTV9SRVY9YC91c3IvYmluL29zbGV2ZWxgCisJZWxzZQorCQlJQk1fUkVWPSR7VU5BTUVfVkVSU0lPTn0uJHtVTkFNRV9SRUxFQVNFfQorCWZpCisJZWNobyAke0lCTV9BUkNIfS1pYm0tYWl4JHtJQk1fUkVWfQorCWV4aXQgOzsKKyAgICAqOkFJWDoqOiopCisJZWNobyByczYwMDAtaWJtLWFpeAorCWV4aXQgOzsKKyAgICBpYm1ydDo0LjRCU0Q6Knxyb21wLWlibTpCU0Q6KikKKwllY2hvIHJvbXAtaWJtLWJzZDQuNAorCWV4aXQgOzsKKyAgICBpYm1ydDoqQlNEOip8cm9tcC1pYm06QlNEOiopICAgICAgICAgICAgIyBjb3ZlcnMgUlQvUEMgQlNEIGFuZAorCWVjaG8gcm9tcC1pYm0tYnNkJHtVTkFNRV9SRUxFQVNFfSAgICMgNC4zIHdpdGggdW5hbWUgYWRkZWQgdG8KKwlleGl0IDs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHJlcG9ydDogcm9tcC1pYm0gQlNEIDQuMworICAgICo6Qk9TWDoqOiopCisJZWNobyByczYwMDAtYnVsbC1ib3N4CisJZXhpdCA7OworICAgIERQWC8yPzAwOkIuTy5TLjoqOiopCisJZWNobyBtNjhrLWJ1bGwtc3lzdjMKKwlleGl0IDs7CisgICAgOTAwMC9bMzRdPz86NC4zYnNkOjEuKjoqKQorCWVjaG8gbTY4ay1ocC1ic2QKKwlleGl0IDs7CisgICAgaHAzMDA6NC40QlNEOio6KiB8IDkwMDAvWzM0XT8/OjQuM2JzZDoyLio6KikKKwllY2hvIG02OGstaHAtYnNkNC40CisJZXhpdCA7OworICAgIDkwMDAvWzM0Njc4XT8/OkhQLVVYOio6KikKKwlIUFVYX1JFVj1gZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bXi5dKi5bMEJdKi8vJ2AKKwljYXNlICIke1VOQU1FX01BQ0hJTkV9IiBpbgorCSAgICA5MDAwLzMxPyApICAgICAgICAgICAgSFBfQVJDSD1tNjgwMDAgOzsKKwkgICAgOTAwMC9bMzRdPz8gKSAgICAgICAgIEhQX0FSQ0g9bTY4ayA7OworCSAgICA5MDAwL1s2NzhdWzAtOV1bMC05XSkKKwkJaWYgWyAteCAvdXNyL2Jpbi9nZXRjb25mIF07IHRoZW4KKwkJICAgIHNjX2NwdV92ZXJzaW9uPWAvdXNyL2Jpbi9nZXRjb25mIFNDX0NQVV9WRVJTSU9OIDI+L2Rldi9udWxsYAorICAgICAgICAgICAgICAgICAgICBzY19rZXJuZWxfYml0cz1gL3Vzci9iaW4vZ2V0Y29uZiBTQ19LRVJORUxfQklUUyAyPi9kZXYvbnVsbGAKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAiJHtzY19jcHVfdmVyc2lvbn0iIGluCisgICAgICAgICAgICAgICAgICAgICAgNTIzKSBIUF9BUkNIPSJocHBhMS4wIiA7OyAjIENQVV9QQV9SSVNDMV8wCisgICAgICAgICAgICAgICAgICAgICAgNTI4KSBIUF9BUkNIPSJocHBhMS4xIiA7OyAjIENQVV9QQV9SSVNDMV8xCisgICAgICAgICAgICAgICAgICAgICAgNTMyKSAgICAgICAgICAgICAgICAgICAgICAjIENQVV9QQV9SSVNDMl8wCisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICIke3NjX2tlcm5lbF9iaXRzfSIgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgMzIpIEhQX0FSQ0g9ImhwcGEyLjBuIiA7OworICAgICAgICAgICAgICAgICAgICAgICAgICA2NCkgSFBfQVJDSD0iaHBwYTIuMHciIDs7CisJCQkgICcnKSBIUF9BUkNIPSJocHBhMi4wIiA7OyAgICMgSFAtVVggMTAuMjAKKyAgICAgICAgICAgICAgICAgICAgICAgIGVzYWMgOzsKKyAgICAgICAgICAgICAgICAgICAgZXNhYworCQlmaQorCQlpZiBbICIke0hQX0FSQ0h9IiA9ICIiIF07IHRoZW4KKwkJICAgIGV2YWwgJHNldF9jY19mb3JfYnVpbGQKKwkJICAgIHNlZCAncy9eICAgICAgICAgICAgICAvLycgPDwgRU9GID4kZHVtbXkuYworCisgICAgICAgICAgICAgICNkZWZpbmUgX0hQVVhfU09VUkNFCisgICAgICAgICAgICAgICNpbmNsdWRlIDxzdGRsaWIuaD4KKyAgICAgICAgICAgICAgI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisgICAgICAgICAgICAgIGludCBtYWluICgpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgI2lmIGRlZmluZWQoX1NDX0tFUk5FTF9CSVRTKQorICAgICAgICAgICAgICAgICAgbG9uZyBiaXRzID0gc3lzY29uZihfU0NfS0VSTkVMX0JJVFMpOworICAgICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgICAgICAgIGxvbmcgY3B1ICA9IHN5c2NvbmYgKF9TQ19DUFVfVkVSU0lPTik7CisKKyAgICAgICAgICAgICAgICAgIHN3aXRjaCAoY3B1KQorICAgICAgICAgICAgICAJeworICAgICAgICAgICAgICAJY2FzZSBDUFVfUEFfUklTQzFfMDogcHV0cyAoImhwcGExLjAiKTsgYnJlYWs7CisgICAgICAgICAgICAgIAljYXNlIENQVV9QQV9SSVNDMV8xOiBwdXRzICgiaHBwYTEuMSIpOyBicmVhazsKKyAgICAgICAgICAgICAgCWNhc2UgQ1BVX1BBX1JJU0MyXzA6CisgICAgICAgICAgICAgICNpZiBkZWZpbmVkKF9TQ19LRVJORUxfQklUUykKKyAgICAgICAgICAgICAgCSAgICBzd2l0Y2ggKGJpdHMpCisgICAgICAgICAgICAgIAkJeworICAgICAgICAgICAgICAJCWNhc2UgNjQ6IHB1dHMgKCJocHBhMi4wdyIpOyBicmVhazsKKyAgICAgICAgICAgICAgCQljYXNlIDMyOiBwdXRzICgiaHBwYTIuMG4iKTsgYnJlYWs7CisgICAgICAgICAgICAgIAkJZGVmYXVsdDogcHV0cyAoImhwcGEyLjAiKTsgYnJlYWs7CisgICAgICAgICAgICAgIAkJfSBicmVhazsKKyAgICAgICAgICAgICAgI2Vsc2UgIC8qICFkZWZpbmVkKF9TQ19LRVJORUxfQklUUykgKi8KKyAgICAgICAgICAgICAgCSAgICBwdXRzICgiaHBwYTIuMCIpOyBicmVhazsKKyAgICAgICAgICAgICAgI2VuZGlmCisgICAgICAgICAgICAgIAlkZWZhdWx0OiBwdXRzICgiaHBwYTEuMCIpOyBicmVhazsKKyAgICAgICAgICAgICAgCX0KKyAgICAgICAgICAgICAgICAgIGV4aXQgKDApOworICAgICAgICAgICAgICB9CitFT0YKKwkJICAgIChDQ09QVFM9ICRDQ19GT1JfQlVJTEQgLW8gJGR1bW15ICRkdW1teS5jIDI+L2Rldi9udWxsKSAmJiBIUF9BUkNIPWAkZHVtbXlgCisJCSAgICB0ZXN0IC16ICIkSFBfQVJDSCIgJiYgSFBfQVJDSD1ocHBhCisJCWZpIDs7CisJZXNhYworCWlmIFsgJHtIUF9BUkNIfSA9ICJocHBhMi4wdyIgXQorCXRoZW4KKwkgICAgZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorCisJICAgICMgaHBwYTIuMHctaHAtaHB1eCogaGFzIGEgNjQtYml0IGtlcm5lbCBhbmQgYSBjb21waWxlciBnZW5lcmF0aW5nCisJICAgICMgMzItYml0IGNvZGUuICBocHBhNjQtaHAtaHB1eCogaGFzIHRoZSBzYW1lIGtlcm5lbCBhbmQgYSBjb21waWxlcgorCSAgICAjIGdlbmVyYXRpbmcgNjQtYml0IGNvZGUuICBHTlUgYW5kIEhQIHVzZSBkaWZmZXJlbnQgbm9tZW5jbGF0dXJlOgorCSAgICAjCisJICAgICMgJCBDQ19GT1JfQlVJTEQ9Y2MgLi9jb25maWcuZ3Vlc3MKKwkgICAgIyA9PiBocHBhMi4wdy1ocC1ocHV4MTEuMjMKKwkgICAgIyAkIENDX0ZPUl9CVUlMRD0iY2MgK0RBMi4wdyIgLi9jb25maWcuZ3Vlc3MKKwkgICAgIyA9PiBocHBhNjQtaHAtaHB1eDExLjIzCisKKwkgICAgaWYgZWNobyBfX0xQNjRfXyB8IChDQ09QVFM9ICRDQ19GT1JfQlVJTEQgLUUgLSAyPi9kZXYvbnVsbCkgfAorCQlncmVwIC1xIF9fTFA2NF9fCisJICAgIHRoZW4KKwkJSFBfQVJDSD0iaHBwYTIuMHciCisJICAgIGVsc2UKKwkJSFBfQVJDSD0iaHBwYTY0IgorCSAgICBmaQorCWZpCisJZWNobyAke0hQX0FSQ0h9LWhwLWhwdXgke0hQVVhfUkVWfQorCWV4aXQgOzsKKyAgICBpYTY0OkhQLVVYOio6KikKKwlIUFVYX1JFVj1gZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bXi5dKi5bMEJdKi8vJ2AKKwllY2hvIGlhNjQtaHAtaHB1eCR7SFBVWF9SRVZ9CisJZXhpdCA7OworICAgIDMwNTAqOkhJLVVYOio6KikKKwlldmFsICRzZXRfY2NfZm9yX2J1aWxkCisJc2VkICdzL14JLy8nIDw8IEVPRiA+JGR1bW15LmMKKwkjaW5jbHVkZSA8dW5pc3RkLmg+CisJaW50CisJbWFpbiAoKQorCXsKKwkgIGxvbmcgY3B1ID0gc3lzY29uZiAoX1NDX0NQVV9WRVJTSU9OKTsKKwkgIC8qIFRoZSBvcmRlciBtYXR0ZXJzLCBiZWNhdXNlIENQVV9JU19IUF9NQzY4SyBlcnJvbmVvdXNseSByZXR1cm5zCisJICAgICB0cnVlIGZvciBDUFVfUEFfUklTQzFfMC4gIENQVV9JU19QQV9SSVNDIHJldHVybnMgY29ycmVjdAorCSAgICAgcmVzdWx0cywgaG93ZXZlci4gICovCisJICBpZiAoQ1BVX0lTX1BBX1JJU0MgKGNwdSkpCisJICAgIHsKKwkgICAgICBzd2l0Y2ggKGNwdSkKKwkJeworCQkgIGNhc2UgQ1BVX1BBX1JJU0MxXzA6IHB1dHMgKCJocHBhMS4wLWhpdGFjaGktaGl1eHdlMiIpOyBicmVhazsKKwkJICBjYXNlIENQVV9QQV9SSVNDMV8xOiBwdXRzICgiaHBwYTEuMS1oaXRhY2hpLWhpdXh3ZTIiKTsgYnJlYWs7CisJCSAgY2FzZSBDUFVfUEFfUklTQzJfMDogcHV0cyAoImhwcGEyLjAtaGl0YWNoaS1oaXV4d2UyIik7IGJyZWFrOworCQkgIGRlZmF1bHQ6IHB1dHMgKCJocHBhLWhpdGFjaGktaGl1eHdlMiIpOyBicmVhazsKKwkJfQorCSAgICB9CisJICBlbHNlIGlmIChDUFVfSVNfSFBfTUM2OEsgKGNwdSkpCisJICAgIHB1dHMgKCJtNjhrLWhpdGFjaGktaGl1eHdlMiIpOworCSAgZWxzZSBwdXRzICgidW5rbm93bi1oaXRhY2hpLWhpdXh3ZTIiKTsKKwkgIGV4aXQgKDApOworCX0KK0VPRgorCSRDQ19GT1JfQlVJTEQgLW8gJGR1bW15ICRkdW1teS5jICYmIFNZU1RFTV9OQU1FPWAkZHVtbXlgICYmCisJCXsgZWNobyAiJFNZU1RFTV9OQU1FIjsgZXhpdDsgfQorCWVjaG8gdW5rbm93bi1oaXRhY2hpLWhpdXh3ZTIKKwlleGl0IDs7CisgICAgOTAwMC83Pz86NC4zYnNkOio6KiB8IDkwMDAvOD9bNzldOjQuM2JzZDoqOiogKQorCWVjaG8gaHBwYTEuMS1ocC1ic2QKKwlleGl0IDs7CisgICAgOTAwMC84Pz86NC4zYnNkOio6KikKKwllY2hvIGhwcGExLjAtaHAtYnNkCisJZXhpdCA7OworICAgICo5Pz8qOk1QRS9pWDoqOiogfCAqMzAwMCo6TVBFL2lYOio6KikKKwllY2hvIGhwcGExLjAtaHAtbXBlaXgKKwlleGl0IDs7CisgICAgaHA3Pz86T1NGMToqOiogfCBocDg/Wzc5XTpPU0YxOio6KiApCisJZWNobyBocHBhMS4xLWhwLW9zZgorCWV4aXQgOzsKKyAgICBocDg/PzpPU0YxOio6KikKKwllY2hvIGhwcGExLjAtaHAtb3NmCisJZXhpdCA7OworICAgIGkqODY6T1NGMToqOiopCisJaWYgWyAteCAvdXNyL3NiaW4vc3lzdmVyc2lvbiBdIDsgdGhlbgorCSAgICBlY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1vc2YxbWsKKwllbHNlCisJICAgIGVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLW9zZjEKKwlmaQorCWV4aXQgOzsKKyAgICBwYXJpc2MqOkxpdGVzKjoqOiopCisJZWNobyBocHBhMS4xLWhwLWxpdGVzCisJZXhpdCA7OworICAgIEMxKjpDb252ZXhPUzoqOiogfCBjb252ZXg6Q29udmV4T1M6QzEqOiopCisJZWNobyBjMS1jb252ZXgtYnNkCisgICAgICAgIGV4aXQgOzsKKyAgICBDMio6Q29udmV4T1M6KjoqIHwgY29udmV4OkNvbnZleE9TOkMyKjoqKQorCWlmIGdldHN5c2luZm8gLWYgc2NhbGFyX2FjYworCXRoZW4gZWNobyBjMzItY29udmV4LWJzZAorCWVsc2UgZWNobyBjMi1jb252ZXgtYnNkCisJZmkKKyAgICAgICAgZXhpdCA7OworICAgIEMzNCo6Q29udmV4T1M6KjoqIHwgY29udmV4OkNvbnZleE9TOkMzNCo6KikKKwllY2hvIGMzNC1jb252ZXgtYnNkCisgICAgICAgIGV4aXQgOzsKKyAgICBDMzgqOkNvbnZleE9TOio6KiB8IGNvbnZleDpDb252ZXhPUzpDMzgqOiopCisJZWNobyBjMzgtY29udmV4LWJzZAorICAgICAgICBleGl0IDs7CisgICAgQzQqOkNvbnZleE9TOio6KiB8IGNvbnZleDpDb252ZXhPUzpDNCo6KikKKwllY2hvIGM0LWNvbnZleC1ic2QKKyAgICAgICAgZXhpdCA7OworICAgIENSQVkqWS1NUDoqOio6KikKKwllY2hvIHltcC1jcmF5LXVuaWNvcyR7VU5BTUVfUkVMRUFTRX0gfCBzZWQgLWUgJ3MvXC5bXi5dKiQvLlgvJworCWV4aXQgOzsKKyAgICBDUkFZKltBLVpdOTA6KjoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LWNyYXktdW5pY29zJHtVTkFNRV9SRUxFQVNFfSBcCisJfCBzZWQgLWUgJ3MvQ1JBWS4qXChbQS1aXTkwXCkvXDEvJyBcCisJICAgICAgLWUgeS9BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWi9hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei8gXAorCSAgICAgIC1lICdzL1wuW14uXSokLy5YLycKKwlleGl0IDs7CisgICAgQ1JBWSpUUzoqOio6KikKKwllY2hvIHQ5MC1jcmF5LXVuaWNvcyR7VU5BTUVfUkVMRUFTRX0gfCBzZWQgLWUgJ3MvXC5bXi5dKiQvLlgvJworCWV4aXQgOzsKKyAgICBDUkFZKlQzRToqOio6KikKKwllY2hvIGFscGhhZXY1LWNyYXktdW5pY29zbWske1VOQU1FX1JFTEVBU0V9IHwgc2VkIC1lICdzL1wuW14uXSokLy5YLycKKwlleGl0IDs7CisgICAgQ1JBWSpTVjE6KjoqOiopCisJZWNobyBzdjEtY3JheS11bmljb3Mke1VOQU1FX1JFTEVBU0V9IHwgc2VkIC1lICdzL1wuW14uXSokLy5YLycKKwlleGl0IDs7CisgICAgKjpVTklDT1MvbXA6KjoqKQorCWVjaG8gY3JheW52LWNyYXktdW5pY29zbXAke1VOQU1FX1JFTEVBU0V9IHwgc2VkIC1lICdzL1wuW14uXSokLy5YLycKKwlleGl0IDs7CisgICAgRjMwWzAxXTpVTklYX1N5c3RlbV9WOio6KiB8IEY3MDA6VU5JWF9TeXN0ZW1fVjoqOiopCisJRlVKSVRTVV9QUk9DPWB1bmFtZSAtbSB8IHRyICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWicgJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6J2AKKyAgICAgICAgRlVKSVRTVV9TWVM9YHVuYW1lIC1wIHwgdHIgJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJyAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonIHwgc2VkIC1lICdzL1wvLy8nYAorICAgICAgICBGVUpJVFNVX1JFTD1gZWNobyAke1VOQU1FX1JFTEVBU0V9IHwgc2VkIC1lICdzLyAvXy8nYAorICAgICAgICBlY2hvICIke0ZVSklUU1VfUFJPQ30tZnVqaXRzdS0ke0ZVSklUU1VfU1lTfSR7RlVKSVRTVV9SRUx9IgorICAgICAgICBleGl0IDs7CisgICAgNTAwMDpVTklYX1N5c3RlbV9WOjQuKjoqKQorICAgICAgICBGVUpJVFNVX1NZUz1gdW5hbWUgLXAgfCB0ciAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eicgfCBzZWQgLWUgJ3MvXC8vLydgCisgICAgICAgIEZVSklUU1VfUkVMPWBlY2hvICR7VU5BTUVfUkVMRUFTRX0gfCB0ciAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eicgfCBzZWQgLWUgJ3MvIC9fLydgCisgICAgICAgIGVjaG8gInNwYXJjLWZ1aml0c3UtJHtGVUpJVFNVX1NZU30ke0ZVSklUU1VfUkVMfSIKKwlleGl0IDs7CisgICAgaSo4NjpCU0QvMzg2Oio6KiB8IGkqODY6QlNEL09TOio6KiB8ICo6QXNjZW5kXCBFbWJlZGRlZC9PUzoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLWJzZGkke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIHNwYXJjKjpCU0QvT1M6KjoqKQorCWVjaG8gc3BhcmMtdW5rbm93bi1ic2RpJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAqOkJTRC9PUzoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tYnNkaSR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgKjpGcmVlQlNEOio6KikKKwljYXNlICR7VU5BTUVfTUFDSElORX0gaW4KKwkgICAgcGM5OCkKKwkJZWNobyBpMzg2LXVua25vd24tZnJlZWJzZGBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1stKF0uKi8vJ2AgOzsKKwkgICAgYW1kNjQpCisJCWVjaG8geDg2XzY0LXVua25vd24tZnJlZWJzZGBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1stKF0uKi8vJ2AgOzsKKwkgICAgKikKKwkJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tZnJlZWJzZGBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1stKF0uKi8vJ2AgOzsKKwllc2FjCisJZXhpdCA7OworICAgIGkqOkNZR1dJTio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtY3lnd2luCisJZXhpdCA7OworICAgICo6TUlOR1cqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLW1pbmd3MzIKKwlleGl0IDs7CisgICAgaSo6d2luZG93czMyKjoqKQorICAgIAkjIHVuYW1lIC1tIGluY2x1ZGVzICItcGMiIG9uIHRoaXMgc3lzdGVtLgorICAgIAllY2hvICR7VU5BTUVfTUFDSElORX0tbWluZ3czMgorCWV4aXQgOzsKKyAgICBpKjpQVyo6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtcHczMgorCWV4aXQgOzsKKyAgICAqOkludGVyaXgqOiopCisgICAgCWNhc2UgJHtVTkFNRV9NQUNISU5FfSBpbgorCSAgICB4ODYpCisJCWVjaG8gaTU4Ni1wYy1pbnRlcml4JHtVTkFNRV9SRUxFQVNFfQorCQlleGl0IDs7CisJICAgIGF1dGhlbnRpY2FtZCB8IGdlbnVpbmVpbnRlbCB8IEVNNjRUKQorCQllY2hvIHg4Nl82NC11bmtub3duLWludGVyaXgke1VOQU1FX1JFTEVBU0V9CisJCWV4aXQgOzsKKwkgICAgSUE2NCkKKwkJZWNobyBpYTY0LXVua25vd24taW50ZXJpeCR7VU5BTUVfUkVMRUFTRX0KKwkJZXhpdCA7OworCWVzYWMgOzsKKyAgICBbMzQ1XTg2OldpbmRvd3NfOTU6KiB8IFszNDVdODY6V2luZG93c185ODoqIHwgWzM0NV04NjpXaW5kb3dzX05UOiopCisJZWNobyBpJHtVTkFNRV9NQUNISU5FfS1wYy1ta3MKKwlleGl0IDs7CisgICAgODY2NDpXaW5kb3dzX05UOiopCisJZWNobyB4ODZfNjQtcGMtbWtzCisJZXhpdCA7OworICAgIGkqOldpbmRvd3NfTlQqOiogfCBQZW50aXVtKjpXaW5kb3dzX05UKjoqKQorCSMgSG93IGRvIHdlIGtub3cgaXQncyBJbnRlcml4IHJhdGhlciB0aGFuIHRoZSBnZW5lcmljIFBPU0lYIHN1YnN5c3RlbT8KKwkjIEl0IGFsc28gY29uZmxpY3RzIHdpdGggcHJlLTIuMCB2ZXJzaW9ucyBvZiBBVCZUIFVXSU4uIFNob3VsZCB3ZQorCSMgVU5BTUVfTUFDSElORSBiYXNlZCBvbiB0aGUgb3V0cHV0IG9mIHVuYW1lIGluc3RlYWQgb2YgaTM4Nj8KKwllY2hvIGk1ODYtcGMtaW50ZXJpeAorCWV4aXQgOzsKKyAgICBpKjpVV0lOKjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy11d2luCisJZXhpdCA7OworICAgIGFtZDY0OkNZR1dJTio6KjoqIHwgeDg2XzY0OkNZR1dJTio6KjoqKQorCWVjaG8geDg2XzY0LXVua25vd24tY3lnd2luCisJZXhpdCA7OworICAgIHAqOkNZR1dJTio6KikKKwllY2hvIHBvd2VycGNsZS11bmtub3duLWN5Z3dpbgorCWV4aXQgOzsKKyAgICBwcmVwKjpTdW5PUzo1Lio6KikKKwllY2hvIHBvd2VycGNsZS11bmtub3duLXNvbGFyaXMyYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvW14uXSovLydgCisJZXhpdCA7OworICAgICo6R05VOio6KikKKwkjIHRoZSBHTlUgc3lzdGVtCisJZWNobyBgZWNobyAke1VOQU1FX01BQ0hJTkV9fHNlZCAtZSAncyxbLS9dLiokLCwnYC11bmtub3duLWdudWBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzLC8uKiQsLCdgCisJZXhpdCA7OworICAgICo6R05VLyo6KjoqKQorCSMgb3RoZXIgc3lzdGVtcyB3aXRoIEdOVSBsaWJjIGFuZCB1c2VybGFuZAorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWBlY2hvICR7VU5BTUVfU1lTVEVNfSB8IHNlZCAncyxeW14vXSovLCwnIHwgdHIgJ1tBLVpdJyAnW2Etel0nYGBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1stKF0uKi8vJ2AtZ251CisJZXhpdCA7OworICAgIGkqODY6TWluaXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1taW5peAorCWV4aXQgOzsKKyAgICBhbHBoYTpMaW51eDoqOiopCisJY2FzZSBgc2VkIC1uICcvXmNwdSBtb2RlbC9zL14uKjogXCguKlwpL1wxL3AnIDwgL3Byb2MvY3B1aW5mb2AgaW4KKwkgIEVWNSkgICBVTkFNRV9NQUNISU5FPWFscGhhZXY1IDs7CisJICBFVjU2KSAgVU5BTUVfTUFDSElORT1hbHBoYWV2NTYgOzsKKwkgIFBDQTU2KSBVTkFNRV9NQUNISU5FPWFscGhhcGNhNTYgOzsKKwkgIFBDQTU3KSBVTkFNRV9NQUNISU5FPWFscGhhcGNhNTYgOzsKKwkgIEVWNikgICBVTkFNRV9NQUNISU5FPWFscGhhZXY2IDs7CisJICBFVjY3KSAgVU5BTUVfTUFDSElORT1hbHBoYWV2NjcgOzsKKwkgIEVWNjgqKSBVTkFNRV9NQUNISU5FPWFscGhhZXY2OCA7OworICAgICAgICBlc2FjCisJb2JqZHVtcCAtLXByaXZhdGUtaGVhZGVycyAvYmluL3NoIHwgZ3JlcCAtcSBsZC5zby4xCisJaWYgdGVzdCAiJD8iID0gMCA7IHRoZW4gTElCQz0ibGliYzEiIDsgZWxzZSBMSUJDPSIiIDsgZmkKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUke0xJQkN9CisJZXhpdCA7OworICAgIGFybSo6TGludXg6KjoqKQorCWV2YWwgJHNldF9jY19mb3JfYnVpbGQKKwlpZiBlY2hvIF9fQVJNX0VBQklfXyB8ICRDQ19GT1JfQlVJTEQgLUUgLSAyPi9kZXYvbnVsbCBcCisJICAgIHwgZ3JlcCAtcSBfX0FSTV9FQUJJX18KKwl0aGVuCisJICAgIGVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudQorCWVsc2UKKwkgICAgZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251ZWFiaQorCWZpCisJZXhpdCA7OworICAgIGF2cjMyKjpMaW51eDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CisJZXhpdCA7OworICAgIGNyaXM6TGludXg6KjoqKQorCWVjaG8gY3Jpcy1heGlzLWxpbnV4LWdudQorCWV4aXQgOzsKKyAgICBjcmlzdjMyOkxpbnV4Oio6KikKKwllY2hvIGNyaXN2MzItYXhpcy1saW51eC1nbnUKKwlleGl0IDs7CisgICAgZnJ2OkxpbnV4Oio6KikKKyAgICAJZWNobyBmcnYtdW5rbm93bi1saW51eC1nbnUKKwlleGl0IDs7CisgICAgaSo4NjpMaW51eDoqOiopCisJTElCQz1nbnUKKwlldmFsICRzZXRfY2NfZm9yX2J1aWxkCisJc2VkICdzL14JLy8nIDw8IEVPRiA+JGR1bW15LmMKKwkjaWZkZWYgX19kaWV0bGliY19fCisJTElCQz1kaWV0bGliYworCSNlbmRpZgorRU9GCisJZXZhbCBgJENDX0ZPUl9CVUlMRCAtRSAkZHVtbXkuYyAyPi9kZXYvbnVsbCB8IGdyZXAgJ15MSUJDJ2AKKwllY2hvICIke1VOQU1FX01BQ0hJTkV9LXBjLWxpbnV4LSR7TElCQ30iCisJZXhpdCA7OworICAgIGlhNjQ6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudQorCWV4aXQgOzsKKyAgICBtMzJyKjpMaW51eDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CisJZXhpdCA7OworICAgIG02OCo6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudQorCWV4aXQgOzsKKyAgICBtaXBzOkxpbnV4Oio6KiB8IG1pcHM2NDpMaW51eDoqOiopCisJZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorCXNlZCAncy9eCS8vJyA8PCBFT0YgPiRkdW1teS5jCisJI3VuZGVmIENQVQorCSN1bmRlZiAke1VOQU1FX01BQ0hJTkV9CisJI3VuZGVmICR7VU5BTUVfTUFDSElORX1lbAorCSNpZiBkZWZpbmVkKF9fTUlQU0VMX18pIHx8IGRlZmluZWQoX19NSVBTRUwpIHx8IGRlZmluZWQoX01JUFNFTCkgfHwgZGVmaW5lZChNSVBTRUwpCisJQ1BVPSR7VU5BTUVfTUFDSElORX1lbAorCSNlbHNlCisJI2lmIGRlZmluZWQoX19NSVBTRUJfXykgfHwgZGVmaW5lZChfX01JUFNFQikgfHwgZGVmaW5lZChfTUlQU0VCKSB8fCBkZWZpbmVkKE1JUFNFQikKKwlDUFU9JHtVTkFNRV9NQUNISU5FfQorCSNlbHNlCisJQ1BVPQorCSNlbmRpZgorCSNlbmRpZgorRU9GCisJZXZhbCBgJENDX0ZPUl9CVUlMRCAtRSAkZHVtbXkuYyAyPi9kZXYvbnVsbCB8IGdyZXAgJ15DUFUnYAorCXRlc3QgeCIke0NQVX0iICE9IHggJiYgeyBlY2hvICIke0NQVX0tdW5rbm93bi1saW51eC1nbnUiOyBleGl0OyB9CisJOzsKKyAgICBvcjMyOkxpbnV4Oio6KikKKwllY2hvIG9yMzItdW5rbm93bi1saW51eC1nbnUKKwlleGl0IDs7CisgICAgcGFkcmU6TGludXg6KjoqKQorCWVjaG8gc3BhcmMtdW5rbm93bi1saW51eC1nbnUKKwlleGl0IDs7CisgICAgcGFyaXNjNjQ6TGludXg6KjoqIHwgaHBwYTY0OkxpbnV4Oio6KikKKwllY2hvIGhwcGE2NC11bmtub3duLWxpbnV4LWdudQorCWV4aXQgOzsKKyAgICBwYXJpc2M6TGludXg6KjoqIHwgaHBwYTpMaW51eDoqOiopCisJIyBMb29rIGZvciBDUFUgbGV2ZWwKKwljYXNlIGBncmVwICdeY3B1W15hLXpdKjonIC9wcm9jL2NwdWluZm8gMj4vZGV2L251bGwgfCBjdXQgLWQnICcgLWYyYCBpbgorCSAgUEE3KikgZWNobyBocHBhMS4xLXVua25vd24tbGludXgtZ251IDs7CisJICBQQTgqKSBlY2hvIGhwcGEyLjAtdW5rbm93bi1saW51eC1nbnUgOzsKKwkgICopICAgIGVjaG8gaHBwYS11bmtub3duLWxpbnV4LWdudSA7OworCWVzYWMKKwlleGl0IDs7CisgICAgcHBjNjQ6TGludXg6KjoqKQorCWVjaG8gcG93ZXJwYzY0LXVua25vd24tbGludXgtZ251CisJZXhpdCA7OworICAgIHBwYzpMaW51eDoqOiopCisJZWNobyBwb3dlcnBjLXVua25vd24tbGludXgtZ251CisJZXhpdCA7OworICAgIHMzOTA6TGludXg6KjoqIHwgczM5MHg6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1pYm0tbGludXgKKwlleGl0IDs7CisgICAgc2g2NCo6TGludXg6KjoqKQorICAgIAllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKKwlleGl0IDs7CisgICAgc2gqOkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKKwlleGl0IDs7CisgICAgc3BhcmM6TGludXg6KjoqIHwgc3BhcmM2NDpMaW51eDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CisJZXhpdCA7OworICAgIHZheDpMaW51eDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LWRlYy1saW51eC1nbnUKKwlleGl0IDs7CisgICAgeDg2XzY0OkxpbnV4Oio6KikKKwllY2hvIHg4Nl82NC11bmtub3duLWxpbnV4LWdudQorCWV4aXQgOzsKKyAgICB4dGVuc2EqOkxpbnV4Oio6KikKKyAgICAJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CisJZXhpdCA7OworICAgIGkqODY6RFlOSVgvcHR4OjQqOiopCisJIyBwdHggNC4wIGRvZXMgdW5hbWUgLXMgY29ycmVjdGx5LCB3aXRoIERZTklYL3B0eCBpbiB0aGVyZS4KKwkjIGVhcmxpZXIgdmVyc2lvbnMgYXJlIG1lc3NlZCB1cCBhbmQgcHV0IHRoZSBub2RlbmFtZSBpbiBib3RoCisJIyBzeXNuYW1lIGFuZCBub2RlbmFtZS4KKwllY2hvIGkzODYtc2VxdWVudC1zeXN2NAorCWV4aXQgOzsKKyAgICBpKjg2OlVOSVhfU1Y6NC4yTVA6Mi4qKQorICAgICAgICAjIFVuaXh3YXJlIGlzIGFuIG9mZnNob290IG9mIFNWUjQsIGJ1dCBpdCBoYXMgaXRzIG93biB2ZXJzaW9uCisgICAgICAgICMgbnVtYmVyIHNlcmllcyBzdGFydGluZyB3aXRoIDIuLi4KKyAgICAgICAgIyBJIGFtIG5vdCBwb3NpdGl2ZSB0aGF0IG90aGVyIFNWUjQgc3lzdGVtcyB3b24ndCBtYXRjaCB0aGlzLAorCSMgSSBqdXN0IGhhdmUgdG8gaG9wZS4gIC0tIHJtcy4KKyAgICAgICAgIyBVc2Ugc3lzdjQuMnV3Li4uIHNvIHRoYXQgc3lzdjQqIG1hdGNoZXMgaXQuCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLXN5c3Y0LjJ1dyR7VU5BTUVfVkVSU0lPTn0KKwlleGl0IDs7CisgICAgaSo4NjpPUy8yOio6KikKKwkjIElmIHdlIHdlcmUgYWJsZSB0byBmaW5kIGB1bmFtZScsIHRoZW4gRU1YIFVuaXggY29tcGF0aWJpbGl0eQorCSMgaXMgcHJvYmFibHkgaW5zdGFsbGVkLgorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1vczItZW14CisJZXhpdCA7OworICAgIGkqODY6WFRTLTMwMDoqOlNUT1ApCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tc3RvcAorCWV4aXQgOzsKKyAgICBpKjg2OmF0aGVvczoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tYXRoZW9zCisJZXhpdCA7OworICAgIGkqODY6c3lsbGFibGU6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1zeWxsYWJsZQorCWV4aXQgOzsKKyAgICBpKjg2Okx5bnhPUzoyLio6KiB8IGkqODY6THlueE9TOjMuWzAxXSo6KiB8IGkqODY6THlueE9TOjQuWzAyXSo6KikKKwllY2hvIGkzODYtdW5rbm93bi1seW54b3Mke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIGkqODY6KkRPUzoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLW1zZG9zZGpncHAKKwlleGl0IDs7CisgICAgaSo4NjoqOjQuKjoqIHwgaSo4NjpTWVNURU1fVjo0Lio6KikKKwlVTkFNRV9SRUw9YGVjaG8gJHtVTkFNRV9SRUxFQVNFfSB8IHNlZCAncy9cL01QJC8vJ2AKKwlpZiBncmVwIE5vdmVsbCAvdXNyL2luY2x1ZGUvbGluay5oID4vZGV2L251bGwgMj4vZGV2L251bGw7IHRoZW4KKwkJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVuaXZlbC1zeXN2JHtVTkFNRV9SRUx9CisJZWxzZQorCQllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtc3lzdiR7VU5BTUVfUkVMfQorCWZpCisJZXhpdCA7OworICAgIGkqODY6Kjo1Ols2NzhdKikKKyAgICAJIyBVbml4V2FyZSA3LngsIE9wZW5VTklYIGFuZCBPcGVuU2VydmVyIDYuCisJY2FzZSBgL2Jpbi91bmFtZSAtWCB8IGdyZXAgIl5NYWNoaW5lImAgaW4KKwkgICAgKjQ4NiopCSAgICAgVU5BTUVfTUFDSElORT1pNDg2IDs7CisJICAgICpQZW50aXVtKQkgICAgIFVOQU1FX01BQ0hJTkU9aTU4NiA7OworCSAgICAqUGVudCp8KkNlbGVyb24pIFVOQU1FX01BQ0hJTkU9aTY4NiA7OworCWVzYWMKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1zeXN2JHtVTkFNRV9SRUxFQVNFfSR7VU5BTUVfU1lTVEVNfSR7VU5BTUVfVkVSU0lPTn0KKwlleGl0IDs7CisgICAgaSo4NjoqOjMuMjoqKQorCWlmIHRlc3QgLWYgL3Vzci9vcHRpb25zL2NiLm5hbWU7IHRoZW4KKwkJVU5BTUVfUkVMPWBzZWQgLW4gJ3MvLipWZXJzaW9uIC8vcCcgPC91c3Ivb3B0aW9ucy9jYi5uYW1lYAorCQllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtaXNjJFVOQU1FX1JFTAorCWVsaWYgL2Jpbi91bmFtZSAtWCAyPi9kZXYvbnVsbCA+L2Rldi9udWxsIDsgdGhlbgorCQlVTkFNRV9SRUw9YCgvYmluL3VuYW1lIC1YfGdyZXAgUmVsZWFzZXxzZWQgLWUgJ3MvLio9IC8vJylgCisJCSgvYmluL3VuYW1lIC1YfGdyZXAgaTgwNDg2ID4vZGV2L251bGwpICYmIFVOQU1FX01BQ0hJTkU9aTQ4NgorCQkoL2Jpbi91bmFtZSAtWHxncmVwICdeTWFjaGluZS4qUGVudGl1bScgPi9kZXYvbnVsbCkgXAorCQkJJiYgVU5BTUVfTUFDSElORT1pNTg2CisJCSgvYmluL3VuYW1lIC1YfGdyZXAgJ15NYWNoaW5lLipQZW50ICpJSScgPi9kZXYvbnVsbCkgXAorCQkJJiYgVU5BTUVfTUFDSElORT1pNjg2CisJCSgvYmluL3VuYW1lIC1YfGdyZXAgJ15NYWNoaW5lLipQZW50aXVtIFBybycgPi9kZXYvbnVsbCkgXAorCQkJJiYgVU5BTUVfTUFDSElORT1pNjg2CisJCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1zY28kVU5BTUVfUkVMCisJZWxzZQorCQllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtc3lzdjMyCisJZmkKKwlleGl0IDs7CisgICAgcGM6KjoqOiopCisJIyBMZWZ0IGhlcmUgZm9yIGNvbXBhdGliaWxpdHk6CisgICAgICAgICMgdW5hbWUgLW0gcHJpbnRzIGZvciBESkdQUCBhbHdheXMgJ3BjJywgYnV0IGl0IHByaW50cyBub3RoaW5nIGFib3V0CisgICAgICAgICMgdGhlIHByb2Nlc3Nvciwgc28gd2UgcGxheSBzYWZlIGJ5IGFzc3VtaW5nIGk1ODYuCisJIyBOb3RlOiB3aGF0ZXZlciB0aGlzIGlzLCBpdCBNVVNUIGJlIHRoZSBzYW1lIGFzIHdoYXQgY29uZmlnLnN1YgorCSMgcHJpbnRzIGZvciB0aGUgImRqZ3BwIiBob3N0LCBvciBlbHNlIEdEQiBjb25maWd1cnkgd2lsbCBkZWNpZGUgdGhhdAorCSMgdGhpcyBpcyBhIGNyb3NzLWJ1aWxkLgorCWVjaG8gaTU4Ni1wYy1tc2Rvc2RqZ3BwCisgICAgICAgIGV4aXQgOzsKKyAgICBJbnRlbDpNYWNoOjMqOiopCisJZWNobyBpMzg2LXBjLW1hY2gzCisJZXhpdCA7OworICAgIHBhcmFnb246KjoqOiopCisJZWNobyBpODYwLWludGVsLW9zZjEKKwlleGl0IDs7CisgICAgaTg2MDoqOjQuKjoqKSAjIGk4NjAtU1ZSNAorCWlmIGdyZXAgU3RhcmRlbnQgL3Vzci9pbmNsdWRlL3N5cy91YWRtaW4uaCA+L2Rldi9udWxsIDI+JjEgOyB0aGVuCisJICBlY2hvIGk4NjAtc3RhcmRlbnQtc3lzdiR7VU5BTUVfUkVMRUFTRX0gIyBTdGFyZGVudCBWaXN0cmEgaTg2MC1TVlI0CisJZWxzZSAjIEFkZCBvdGhlciBpODYwLVNWUjQgdmVuZG9ycyBiZWxvdyBhcyB0aGV5IGFyZSBkaXNjb3ZlcmVkLgorCSAgZWNobyBpODYwLXVua25vd24tc3lzdiR7VU5BTUVfUkVMRUFTRX0gICMgVW5rbm93biBpODYwLVNWUjQKKwlmaQorCWV4aXQgOzsKKyAgICBtaW5pKjpDVElYOlNZUyo1OiopCisJIyAibWluaWZyYW1lIgorCWVjaG8gbTY4MDEwLWNvbnZlcmdlbnQtc3lzdgorCWV4aXQgOzsKKyAgICBtYzY4azpVTklYOlNZU1RFTTU6My41MW0pCisJZWNobyBtNjhrLWNvbnZlcmdlbnQtc3lzdgorCWV4aXQgOzsKKyAgICBNNjgwPzA6RC1OSVg6NS4zOiopCisJZWNobyBtNjhrLWRpYWItZG5peAorCWV4aXQgOzsKKyAgICBNNjgqOio6UjNWWzU2NzhdKjoqKQorCXRlc3QgLXIgL3N5c1Y2OCAmJiB7IGVjaG8gJ202OGstbW90b3JvbGEtc3lzdic7IGV4aXQ7IH0gOzsKKyAgICAzWzM0NV0/PzoqOjQuMDozLjAgfCAzWzM0XT8/QToqOjQuMDozLjAgfCAzWzM0XT8/LCo6Kjo0LjA6My4wIHwgM1szNF0/Py8qOio6NC4wOjMuMCB8IDQ0MDA6Kjo0LjA6My4wIHwgNDg1MDoqOjQuMDozLjAgfCBTS0E0MDoqOjQuMDozLjAgfCBTRFMyOio6NC4wOjMuMCB8IFNIRzI6Kjo0LjA6My4wIHwgUzc1MDEqOio6NC4wOjMuMCkKKwlPU19SRUw9JycKKwl0ZXN0IC1yIC9ldGMvLnJlbGlkIFwKKwkmJiBPU19SRUw9LmBzZWQgLW4gJ3MvW14gXSogW14gXSogXChbMC05XVswLTldXCkuKi9cMS9wJyA8IC9ldGMvLnJlbGlkYAorCS9iaW4vdW5hbWUgLXAgMj4vZGV2L251bGwgfCBncmVwIDg2ID4vZGV2L251bGwgXAorCSAgJiYgeyBlY2hvIGk0ODYtbmNyLXN5c3Y0LjMke09TX1JFTH07IGV4aXQ7IH0KKwkvYmluL3VuYW1lIC1wIDI+L2Rldi9udWxsIHwgL2Jpbi9ncmVwIGVudGl1bSA+L2Rldi9udWxsIFwKKwkgICYmIHsgZWNobyBpNTg2LW5jci1zeXN2NC4zJHtPU19SRUx9OyBleGl0OyB9IDs7CisgICAgM1szNF0/PzoqOjQuMDoqIHwgM1szNF0/PywqOio6NC4wOiopCisgICAgICAgIC9iaW4vdW5hbWUgLXAgMj4vZGV2L251bGwgfCBncmVwIDg2ID4vZGV2L251bGwgXAorICAgICAgICAgICYmIHsgZWNobyBpNDg2LW5jci1zeXN2NDsgZXhpdDsgfSA7OworICAgIE5DUio6Kjo0LjI6KiB8IE1QUkFTKjoqOjQuMjoqKQorCU9TX1JFTD0nLjMnCisJdGVzdCAtciAvZXRjLy5yZWxpZCBcCisJICAgICYmIE9TX1JFTD0uYHNlZCAtbiAncy9bXiBdKiBbXiBdKiBcKFswLTldWzAtOV1cKS4qL1wxL3AnIDwgL2V0Yy8ucmVsaWRgCisJL2Jpbi91bmFtZSAtcCAyPi9kZXYvbnVsbCB8IGdyZXAgODYgPi9kZXYvbnVsbCBcCisJICAgICYmIHsgZWNobyBpNDg2LW5jci1zeXN2NC4zJHtPU19SRUx9OyBleGl0OyB9CisJL2Jpbi91bmFtZSAtcCAyPi9kZXYvbnVsbCB8IC9iaW4vZ3JlcCBlbnRpdW0gPi9kZXYvbnVsbCBcCisJICAgICYmIHsgZWNobyBpNTg2LW5jci1zeXN2NC4zJHtPU19SRUx9OyBleGl0OyB9CisJL2Jpbi91bmFtZSAtcCAyPi9kZXYvbnVsbCB8IC9iaW4vZ3JlcCBwdGVyb24gPi9kZXYvbnVsbCBcCisJICAgICYmIHsgZWNobyBpNTg2LW5jci1zeXN2NC4zJHtPU19SRUx9OyBleGl0OyB9IDs7CisgICAgbTY4KjpMeW54T1M6Mi4qOiogfCBtNjgqOkx5bnhPUzozLjAqOiopCisJZWNobyBtNjhrLXVua25vd24tbHlueG9zJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBtYzY4MDMwOlVOSVhfU3lzdGVtX1Y6NC4qOiopCisJZWNobyBtNjhrLWF0YXJpLXN5c3Y0CisJZXhpdCA7OworICAgIFRTVU5BTUk6THlueE9TOjIuKjoqKQorCWVjaG8gc3BhcmMtdW5rbm93bi1seW54b3Mke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIHJzNjAwMDpMeW54T1M6Mi4qOiopCisJZWNobyByczYwMDAtdW5rbm93bi1seW54b3Mke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIFBvd2VyUEM6THlueE9TOjIuKjoqIHwgUG93ZXJQQzpMeW54T1M6My5bMDFdKjoqIHwgUG93ZXJQQzpMeW54T1M6NC5bMDJdKjoqKQorCWVjaG8gcG93ZXJwYy11bmtub3duLWx5bnhvcyR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgU01bQkVdUzpVTklYX1NWOio6KikKKwllY2hvIG1pcHMtZGRlLXN5c3Yke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIFJNKjpSZWxpYW50VU5JWC0qOio6KikKKwllY2hvIG1pcHMtc25pLXN5c3Y0CisJZXhpdCA7OworICAgIFJNKjpTSU5JWC0qOio6KikKKwllY2hvIG1pcHMtc25pLXN5c3Y0CisJZXhpdCA7OworICAgICo6U0lOSVgtKjoqOiopCisJaWYgdW5hbWUgLXAgMj4vZGV2L251bGwgPi9kZXYvbnVsbCA7IHRoZW4KKwkJVU5BTUVfTUFDSElORT1gKHVuYW1lIC1wKSAyPi9kZXYvbnVsbGAKKwkJZWNobyAke1VOQU1FX01BQ0hJTkV9LXNuaS1zeXN2NAorCWVsc2UKKwkJZWNobyBuczMyay1zbmktc3lzdgorCWZpCisJZXhpdCA7OworICAgIFBFTlRJVU06Kjo0LjAqOiopICMgVW5pc3lzIGBDbGVhclBhdGggSE1QIElYIDQwMDAnIFNWUjQvTVAgZWZmb3J0CisgICAgICAgICAgICAgICAgICAgICAgIyBzYXlzIDxSaWNoYXJkLk0uQmFydGVsQGNjTWFpbC5DZW5zdXMuR09WPgorICAgICAgICBlY2hvIGk1ODYtdW5pc3lzLXN5c3Y0CisgICAgICAgIGV4aXQgOzsKKyAgICAqOlVOSVhfU3lzdGVtX1Y6NCo6RlRYKikKKwkjIEZyb20gR2VyYWxkIEhld2VzIDxoZXdlc0BvcGVubWFya2V0LmNvbT4uCisJIyBIb3cgYWJvdXQgZGlmZmVyZW50aWF0aW5nIGJldHdlZW4gc3RyYXR1cyBhcmNoaXRlY3R1cmVzPyAtZGptCisJZWNobyBocHBhMS4xLXN0cmF0dXMtc3lzdjQKKwlleGl0IDs7CisgICAgKjoqOio6RlRYKikKKwkjIEZyb20gc2VhbmZAc3dkYy5zdHJhdHVzLmNvbS4KKwllY2hvIGk4NjAtc3RyYXR1cy1zeXN2NAorCWV4aXQgOzsKKyAgICBpKjg2OlZPUzoqOiopCisJIyBGcm9tIFBhdWwuR3JlZW5Ac3RyYXR1cy5jb20uCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXN0cmF0dXMtdm9zCisJZXhpdCA7OworICAgICo6Vk9TOio6KikKKwkjIEZyb20gUGF1bC5HcmVlbkBzdHJhdHVzLmNvbS4KKwllY2hvIGhwcGExLjEtc3RyYXR1cy12b3MKKwlleGl0IDs7CisgICAgbWM2OCo6QS9VWDoqOiopCisJZWNobyBtNjhrLWFwcGxlLWF1eCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgbmV3cyo6TkVXUy1PUzo2KjoqKQorCWVjaG8gbWlwcy1zb255LW5ld3NvczYKKwlleGl0IDs7CisgICAgUlszNF0wMDA6KlN5c3RlbV9WKjoqOiogfCBSNDAwMDpVTklYX1NZU1Y6KjoqIHwgUiowMDA6VU5JWF9TVjoqOiopCisJaWYgWyAtZCAvdXNyL25lYyBdOyB0aGVuCisJICAgICAgICBlY2hvIG1pcHMtbmVjLXN5c3Yke1VOQU1FX1JFTEVBU0V9CisJZWxzZQorCSAgICAgICAgZWNobyBtaXBzLXVua25vd24tc3lzdiR7VU5BTUVfUkVMRUFTRX0KKwlmaQorICAgICAgICBleGl0IDs7CisgICAgQmVCb3g6QmVPUzoqOiopCSMgQmVPUyBydW5uaW5nIG9uIGhhcmR3YXJlIG1hZGUgYnkgQmUsIFBQQyBvbmx5LgorCWVjaG8gcG93ZXJwYy1iZS1iZW9zCisJZXhpdCA7OworICAgIEJlTWFjOkJlT1M6KjoqKQkjIEJlT1MgcnVubmluZyBvbiBNYWMgb3IgTWFjIGNsb25lLCBQUEMgb25seS4KKwllY2hvIHBvd2VycGMtYXBwbGUtYmVvcworCWV4aXQgOzsKKyAgICBCZVBDOkJlT1M6KjoqKQkjIEJlT1MgcnVubmluZyBvbiBJbnRlbCBQQyBjb21wYXRpYmxlLgorCWVjaG8gaTU4Ni1wYy1iZW9zCisJZXhpdCA7OworICAgIEJlUEM6SGFpa3U6KjoqKQkjIEhhaWt1IHJ1bm5pbmcgb24gSW50ZWwgUEMgY29tcGF0aWJsZS4KKwllY2hvIGk1ODYtcGMtaGFpa3UKKwlleGl0IDs7CisgICAgU1gtNDpTVVBFUi1VWDoqOiopCisJZWNobyBzeDQtbmVjLXN1cGVydXgke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIFNYLTU6U1VQRVItVVg6KjoqKQorCWVjaG8gc3g1LW5lYy1zdXBlcnV4JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBTWC02OlNVUEVSLVVYOio6KikKKwllY2hvIHN4Ni1uZWMtc3VwZXJ1eCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgU1gtNzpTVVBFUi1VWDoqOiopCisJZWNobyBzeDctbmVjLXN1cGVydXgke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIFNYLTg6U1VQRVItVVg6KjoqKQorCWVjaG8gc3g4LW5lYy1zdXBlcnV4JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBTWC04UjpTVVBFUi1VWDoqOiopCisJZWNobyBzeDhyLW5lYy1zdXBlcnV4JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBQb3dlcio6UmhhcHNvZHk6KjoqKQorCWVjaG8gcG93ZXJwYy1hcHBsZS1yaGFwc29keSR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgKjpSaGFwc29keToqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LWFwcGxlLXJoYXBzb2R5JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAqOkRhcndpbjoqOiopCisJVU5BTUVfUFJPQ0VTU09SPWB1bmFtZSAtcGAgfHwgVU5BTUVfUFJPQ0VTU09SPXVua25vd24KKwljYXNlICRVTkFNRV9QUk9DRVNTT1IgaW4KKwkgICAgaTM4NikKKwkJZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorCQlpZiBbICIkQ0NfRk9SX0JVSUxEIiAhPSAnbm9fY29tcGlsZXJfZm91bmQnIF07IHRoZW4KKwkJICBpZiAoZWNobyAnI2lmZGVmIF9fTFA2NF9fJzsgZWNobyBJU182NEJJVF9BUkNIOyBlY2hvICcjZW5kaWYnKSB8IFwKKwkJICAgICAgKENDT1BUUz0gJENDX0ZPUl9CVUlMRCAtRSAtIDI+L2Rldi9udWxsKSB8IFwKKwkJICAgICAgZ3JlcCBJU182NEJJVF9BUkNIID4vZGV2L251bGwKKwkJICB0aGVuCisJCSAgICAgIFVOQU1FX1BST0NFU1NPUj0ieDg2XzY0IgorCQkgIGZpCisJCWZpIDs7CisJICAgIHVua25vd24pIFVOQU1FX1BST0NFU1NPUj1wb3dlcnBjIDs7CisJZXNhYworCWVjaG8gJHtVTkFNRV9QUk9DRVNTT1J9LWFwcGxlLWRhcndpbiR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgKjpwcm9jbnRvKjoqOiogfCAqOlFOWDpbMDEyMzQ1Njc4OV0qOiopCisJVU5BTUVfUFJPQ0VTU09SPWB1bmFtZSAtcGAKKwlpZiB0ZXN0ICIkVU5BTUVfUFJPQ0VTU09SIiA9ICJ4ODYiOyB0aGVuCisJCVVOQU1FX1BST0NFU1NPUj1pMzg2CisJCVVOQU1FX01BQ0hJTkU9cGMKKwlmaQorCWVjaG8gJHtVTkFNRV9QUk9DRVNTT1J9LSR7VU5BTUVfTUFDSElORX0tbnRvLXFueCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgKjpRTlg6Kjo0KikKKwllY2hvIGkzODYtcGMtcW54CisJZXhpdCA7OworICAgIE5TRS0/Ok5PTlNUT1BfS0VSTkVMOio6KikKKwllY2hvIG5zZS10YW5kZW0tbnNrJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBOU1ItPzpOT05TVE9QX0tFUk5FTDoqOiopCisJZWNobyBuc3ItdGFuZGVtLW5zayR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgKjpOb25TdG9wLVVYOio6KikKKwllY2hvIG1pcHMtY29tcGFxLW5vbnN0b3B1eAorCWV4aXQgOzsKKyAgICBCUzIwMDA6UE9TSVgqOio6KikKKwllY2hvIGJzMjAwMC1zaWVtZW5zLXN5c3YKKwlleGl0IDs7CisgICAgRFMvKjpVTklYX1N5c3RlbV9WOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tJHtVTkFNRV9TWVNURU19LSR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgKjpQbGFuOToqOiopCisJIyAidW5hbWUgLW0iIGlzIG5vdCBjb25zaXN0ZW50LCBzbyB1c2UgJGNwdXR5cGUgaW5zdGVhZC4gMzg2CisJIyBpcyBjb252ZXJ0ZWQgdG8gaTM4NiBmb3IgY29uc2lzdGVuY3kgd2l0aCBvdGhlciB4ODYKKwkjIG9wZXJhdGluZyBzeXN0ZW1zLgorCWlmIHRlc3QgIiRjcHV0eXBlIiA9ICIzODYiOyB0aGVuCisJICAgIFVOQU1FX01BQ0hJTkU9aTM4NgorCWVsc2UKKwkgICAgVU5BTUVfTUFDSElORT0iJGNwdXR5cGUiCisJZmkKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1wbGFuOQorCWV4aXQgOzsKKyAgICAqOlRPUFMtMTA6KjoqKQorCWVjaG8gcGRwMTAtdW5rbm93bi10b3BzMTAKKwlleGl0IDs7CisgICAgKjpURU5FWDoqOiopCisJZWNobyBwZHAxMC11bmtub3duLXRlbmV4CisJZXhpdCA7OworICAgIEtTMTA6VE9QUy0yMDoqOiogfCBLTDEwOlRPUFMtMjA6KjoqIHwgVFlQRTQ6VE9QUy0yMDoqOiopCisJZWNobyBwZHAxMC1kZWMtdG9wczIwCisJZXhpdCA7OworICAgIFhLTC0xOlRPUFMtMjA6KjoqIHwgVFlQRTU6VE9QUy0yMDoqOiopCisJZWNobyBwZHAxMC14a2wtdG9wczIwCisJZXhpdCA7OworICAgICo6VE9QUy0yMDoqOiopCisJZWNobyBwZHAxMC11bmtub3duLXRvcHMyMAorCWV4aXQgOzsKKyAgICAqOklUUzoqOiopCisJZWNobyBwZHAxMC11bmtub3duLWl0cworCWV4aXQgOzsKKyAgICBTRUk6KjoqOlNFSVVYKQorICAgICAgICBlY2hvIG1pcHMtc2VpLXNlaXV4JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAqOkRyYWdvbkZseToqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tZHJhZ29uZmx5YGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvWy0oXS4qLy8nYAorCWV4aXQgOzsKKyAgICAqOipWTVM6KjoqKQorICAgIAlVTkFNRV9NQUNISU5FPWAodW5hbWUgLXApIDI+L2Rldi9udWxsYAorCWNhc2UgIiR7VU5BTUVfTUFDSElORX0iIGluCisJICAgIEEqKSBlY2hvIGFscGhhLWRlYy12bXMgOyBleGl0IDs7CisJICAgIEkqKSBlY2hvIGlhNjQtZGVjLXZtcyA7IGV4aXQgOzsKKwkgICAgViopIGVjaG8gdmF4LWRlYy12bXMgOyBleGl0IDs7CisJZXNhYyA7OworICAgICo6WEVOSVg6KjpTeXNWKQorCWVjaG8gaTM4Ni1wYy14ZW5peAorCWV4aXQgOzsKKyAgICBpKjg2OnNreW9zOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtc2t5b3NgZWNobyAke1VOQU1FX1JFTEVBU0V9YCB8IHNlZCAtZSAncy8gLiokLy8nCisJZXhpdCA7OworICAgIGkqODY6cmRvczoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLXJkb3MKKwlleGl0IDs7CisgICAgaSo4NjpBUk9TOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtYXJvcworCWV4aXQgOzsKK2VzYWMKKworI2VjaG8gJyhObyB1bmFtZSBjb21tYW5kIG9yIHVuYW1lIG91dHB1dCBub3QgcmVjb2duaXplZC4pJyAxPiYyCisjZWNobyAiJHtVTkFNRV9NQUNISU5FfToke1VOQU1FX1NZU1RFTX06JHtVTkFNRV9SRUxFQVNFfToke1VOQU1FX1ZFUlNJT059IiAxPiYyCisKK2V2YWwgJHNldF9jY19mb3JfYnVpbGQKK2NhdCA+JGR1bW15LmMgPDxFT0YKKyNpZmRlZiBfU0VRVUVOVF8KKyMgaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjIGluY2x1ZGUgPHN5cy91dHNuYW1lLmg+CisjZW5kaWYKK21haW4gKCkKK3sKKyNpZiBkZWZpbmVkIChzb255KQorI2lmIGRlZmluZWQgKE1JUFNFQikKKyAgLyogQkZEIHdhbnRzICJic2QiIGluc3RlYWQgb2YgIm5ld3NvcyIuICBQZXJoYXBzIEJGRCBzaG91bGQgYmUgY2hhbmdlZCwKKyAgICAgSSBkb24ndCBrbm93Li4uLiAgKi8KKyAgcHJpbnRmICgibWlwcy1zb255LWJzZFxuIik7IGV4aXQgKDApOworI2Vsc2UKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyAgcHJpbnRmICgibTY4ay1zb255LW5ld3NvcyVzXG4iLAorI2lmZGVmIE5FV1NPUzQKKyAgICAgICAgICAiNCIKKyNlbHNlCisJICAiIgorI2VuZGlmCisgICAgICAgICApOyBleGl0ICgwKTsKKyNlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkIChfX2FybSkgJiYgZGVmaW5lZCAoX19hY29ybikgJiYgZGVmaW5lZCAoX191bml4KQorICBwcmludGYgKCJhcm0tYWNvcm4tcmlzY2l4XG4iKTsgZXhpdCAoMCk7CisjZW5kaWYKKworI2lmIGRlZmluZWQgKGhwMzAwKSAmJiAhZGVmaW5lZCAoaHB1eCkKKyAgcHJpbnRmICgibTY4ay1ocC1ic2RcbiIpOyBleGl0ICgwKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoTmVYVCkKKyNpZiAhZGVmaW5lZCAoX19BUkNISVRFQ1RVUkVfXykKKyNkZWZpbmUgX19BUkNISVRFQ1RVUkVfXyAibTY4ayIKKyNlbmRpZgorICBpbnQgdmVyc2lvbjsKKyAgdmVyc2lvbj1gKGhvc3RpbmZvIHwgc2VkIC1uICdzLy4qTmVYVCBNYWNoIFwoWzAtOV0qXCkuKi9cMS9wJykgMj4vZGV2L251bGxgOworICBpZiAodmVyc2lvbiA8IDQpCisgICAgcHJpbnRmICgiJXMtbmV4dC1uZXh0c3RlcCVkXG4iLCBfX0FSQ0hJVEVDVFVSRV9fLCB2ZXJzaW9uKTsKKyAgZWxzZQorICAgIHByaW50ZiAoIiVzLW5leHQtb3BlbnN0ZXAlZFxuIiwgX19BUkNISVRFQ1RVUkVfXywgdmVyc2lvbik7CisgIGV4aXQgKDApOworI2VuZGlmCisKKyNpZiBkZWZpbmVkIChNVUxUSU1BWCkgfHwgZGVmaW5lZCAobjE2KQorI2lmIGRlZmluZWQgKFVNQVhWKQorICBwcmludGYgKCJuczMyay1lbmNvcmUtc3lzdlxuIik7IGV4aXQgKDApOworI2Vsc2UKKyNpZiBkZWZpbmVkIChDTVUpCisgIHByaW50ZiAoIm5zMzJrLWVuY29yZS1tYWNoXG4iKTsgZXhpdCAoMCk7CisjZWxzZQorICBwcmludGYgKCJuczMyay1lbmNvcmUtYnNkXG4iKTsgZXhpdCAoMCk7CisjZW5kaWYKKyNlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkIChfXzM4NkJTRF9fKQorICBwcmludGYgKCJpMzg2LXBjLWJzZFxuIik7IGV4aXQgKDApOworI2VuZGlmCisKKyNpZiBkZWZpbmVkIChzZXF1ZW50KQorI2lmIGRlZmluZWQgKGkzODYpCisgIHByaW50ZiAoImkzODYtc2VxdWVudC1keW5peFxuIik7IGV4aXQgKDApOworI2VuZGlmCisjaWYgZGVmaW5lZCAobnMzMjAwMCkKKyAgcHJpbnRmICgibnMzMmstc2VxdWVudC1keW5peFxuIik7IGV4aXQgKDApOworI2VuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQgKF9TRVFVRU5UXykKKyAgICBzdHJ1Y3QgdXRzbmFtZSB1bjsKKworICAgIHVuYW1lKCZ1bik7CisKKyAgICBpZiAoc3RybmNtcCh1bi52ZXJzaW9uLCAiVjIiLCAyKSA9PSAwKSB7CisJcHJpbnRmICgiaTM4Ni1zZXF1ZW50LXB0eDJcbiIpOyBleGl0ICgwKTsKKyAgICB9CisgICAgaWYgKHN0cm5jbXAodW4udmVyc2lvbiwgIlYxIiwgMikgPT0gMCkgeyAvKiBYWFggaXMgVjEgY29ycmVjdD8gKi8KKwlwcmludGYgKCJpMzg2LXNlcXVlbnQtcHR4MVxuIik7IGV4aXQgKDApOworICAgIH0KKyAgICBwcmludGYgKCJpMzg2LXNlcXVlbnQtcHR4XG4iKTsgZXhpdCAoMCk7CisKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAodmF4KQorIyBpZiAhZGVmaW5lZCAodWx0cml4KQorIyAgaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjICBpZiBkZWZpbmVkIChCU0QpCisjICAgaWYgQlNEID09IDQzCisgICAgICBwcmludGYgKCJ2YXgtZGVjLWJzZDQuM1xuIik7IGV4aXQgKDApOworIyAgIGVsc2UKKyMgICAgaWYgQlNEID09IDE5OTAwNgorICAgICAgcHJpbnRmICgidmF4LWRlYy1ic2Q0LjNyZW5vXG4iKTsgZXhpdCAoMCk7CisjICAgIGVsc2UKKyAgICAgIHByaW50ZiAoInZheC1kZWMtYnNkXG4iKTsgZXhpdCAoMCk7CisjICAgIGVuZGlmCisjICAgZW5kaWYKKyMgIGVsc2UKKyAgICBwcmludGYgKCJ2YXgtZGVjLWJzZFxuIik7IGV4aXQgKDApOworIyAgZW5kaWYKKyMgZWxzZQorICAgIHByaW50ZiAoInZheC1kZWMtdWx0cml4XG4iKTsgZXhpdCAoMCk7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQgKGFsbGlhbnQpICYmIGRlZmluZWQgKGk4NjApCisgIHByaW50ZiAoImk4NjAtYWxsaWFudC1ic2RcbiIpOyBleGl0ICgwKTsKKyNlbmRpZgorCisgIGV4aXQgKDEpOworfQorRU9GCisKKyRDQ19GT1JfQlVJTEQgLW8gJGR1bW15ICRkdW1teS5jIDI+L2Rldi9udWxsICYmIFNZU1RFTV9OQU1FPWAkZHVtbXlgICYmCisJeyBlY2hvICIkU1lTVEVNX05BTUUiOyBleGl0OyB9CisKKyMgQXBvbGxvcyBwdXQgdGhlIHN5c3RlbSB0eXBlIGluIHRoZSBlbnZpcm9ubWVudC4KKwordGVzdCAtZCAvdXNyL2Fwb2xsbyAmJiB7IGVjaG8gJHtJU1B9LWFwb2xsby0ke1NZU1RZUEV9OyBleGl0OyB9CisKKyMgQ29udmV4IHZlcnNpb25zIHRoYXQgcHJlZGF0ZSB1bmFtZSBjYW4gdXNlIGdldHN5c2luZm8oMSkKKworaWYgWyAteCAvdXNyL2NvbnZleC9nZXRzeXNpbmZvIF0KK3RoZW4KKyAgICBjYXNlIGBnZXRzeXNpbmZvIC1mIGNwdV90eXBlYCBpbgorICAgIGMxKikKKwllY2hvIGMxLWNvbnZleC1ic2QKKwlleGl0IDs7CisgICAgYzIqKQorCWlmIGdldHN5c2luZm8gLWYgc2NhbGFyX2FjYworCXRoZW4gZWNobyBjMzItY29udmV4LWJzZAorCWVsc2UgZWNobyBjMi1jb252ZXgtYnNkCisJZmkKKwlleGl0IDs7CisgICAgYzM0KikKKwllY2hvIGMzNC1jb252ZXgtYnNkCisJZXhpdCA7OworICAgIGMzOCopCisJZWNobyBjMzgtY29udmV4LWJzZAorCWV4aXQgOzsKKyAgICBjNCopCisJZWNobyBjNC1jb252ZXgtYnNkCisJZXhpdCA7OworICAgIGVzYWMKK2ZpCisKK2NhdCA+JjIgPDxFT0YKKyQwOiB1bmFibGUgdG8gZ3Vlc3Mgc3lzdGVtIHR5cGUKKworVGhpcyBzY3JpcHQsIGxhc3QgbW9kaWZpZWQgJHRpbWVzdGFtcCwgaGFzIGZhaWxlZCB0byByZWNvZ25pemUKK3RoZSBvcGVyYXRpbmcgc3lzdGVtIHlvdSBhcmUgdXNpbmcuIEl0IGlzIGFkdmlzZWQgdGhhdCB5b3UKK2Rvd25sb2FkIHRoZSBtb3N0IHVwIHRvIGRhdGUgdmVyc2lvbiBvZiB0aGUgY29uZmlnIHNjcmlwdHMgZnJvbQorCisgIGh0dHA6Ly9naXQuc2F2YW5uYWguZ251Lm9yZy9naXR3ZWIvP3A9Y29uZmlnLmdpdDthPWJsb2JfcGxhaW47Zj1jb25maWcuZ3Vlc3M7aGI9SEVBRAorYW5kCisgIGh0dHA6Ly9naXQuc2F2YW5uYWguZ251Lm9yZy9naXR3ZWIvP3A9Y29uZmlnLmdpdDthPWJsb2JfcGxhaW47Zj1jb25maWcuc3ViO2hiPUhFQUQKKworSWYgdGhlIHZlcnNpb24geW91IHJ1biAoJDApIGlzIGFscmVhZHkgdXAgdG8gZGF0ZSwgcGxlYXNlCitzZW5kIHRoZSBmb2xsb3dpbmcgZGF0YSBhbmQgYW55IGluZm9ybWF0aW9uIHlvdSB0aGluayBtaWdodCBiZQorcGVydGluZW50IHRvIDxjb25maWctcGF0Y2hlc0BnbnUub3JnPiBpbiBvcmRlciB0byBwcm92aWRlIHRoZSBuZWVkZWQKK2luZm9ybWF0aW9uIHRvIGhhbmRsZSB5b3VyIHN5c3RlbS4KKworY29uZmlnLmd1ZXNzIHRpbWVzdGFtcCA9ICR0aW1lc3RhbXAKKwordW5hbWUgLW0gPSBgKHVuYW1lIC1tKSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCit1bmFtZSAtciA9IGAodW5hbWUgLXIpIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bmAKK3VuYW1lIC1zID0gYCh1bmFtZSAtcykgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAordW5hbWUgLXYgPSBgKHVuYW1lIC12KSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCisKKy91c3IvYmluL3VuYW1lIC1wID0gYCgvdXNyL2Jpbi91bmFtZSAtcCkgMj4vZGV2L251bGxgCisvYmluL3VuYW1lIC1YICAgICA9IGAoL2Jpbi91bmFtZSAtWCkgMj4vZGV2L251bGxgCisKK2hvc3RpbmZvICAgICAgICAgICAgICAgPSBgKGhvc3RpbmZvKSAyPi9kZXYvbnVsbGAKKy9iaW4vdW5pdmVyc2UgICAgICAgICAgPSBgKC9iaW4vdW5pdmVyc2UpIDI+L2Rldi9udWxsYAorL3Vzci9iaW4vYXJjaCAtayAgICAgICA9IGAoL3Vzci9iaW4vYXJjaCAtaykgMj4vZGV2L251bGxgCisvYmluL2FyY2ggICAgICAgICAgICAgID0gYCgvYmluL2FyY2gpIDI+L2Rldi9udWxsYAorL3Vzci9iaW4vb3NsZXZlbCAgICAgICA9IGAoL3Vzci9iaW4vb3NsZXZlbCkgMj4vZGV2L251bGxgCisvdXNyL2NvbnZleC9nZXRzeXNpbmZvID0gYCgvdXNyL2NvbnZleC9nZXRzeXNpbmZvKSAyPi9kZXYvbnVsbGAKKworVU5BTUVfTUFDSElORSA9ICR7VU5BTUVfTUFDSElORX0KK1VOQU1FX1JFTEVBU0UgPSAke1VOQU1FX1JFTEVBU0V9CitVTkFNRV9TWVNURU0gID0gJHtVTkFNRV9TWVNURU19CitVTkFNRV9WRVJTSU9OID0gJHtVTkFNRV9WRVJTSU9OfQorRU9GCisKK2V4aXQgMQorCisjIExvY2FsIHZhcmlhYmxlczoKKyMgZXZhbDogKGFkZC1ob29rICd3cml0ZS1maWxlLWhvb2tzICd0aW1lLXN0YW1wKQorIyB0aW1lLXN0YW1wLXN0YXJ0OiAidGltZXN0YW1wPSciCisjIHRpbWUtc3RhbXAtZm9ybWF0OiAiJTp5LSUwMm0tJTAyZCIKKyMgdGltZS1zdGFtcC1lbmQ6ICInIgorIyBFbmQ6CmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9jb25maWcuaC5pbiBiL29wcm9maWxlLTAuOS43L2NvbmZpZy5oLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjODg5MWIKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9jb25maWcuaC5pbgpAQCAtMCwwICsxLDExMSBAQAorLyogY29uZmlnLmguaW4uICBHZW5lcmF0ZWQgZnJvbSBjb25maWd1cmUuaW4gYnkgYXV0b2hlYWRlci4gICovCisKKy8qIHdoZXRoZXIgcG9wdCBwcm90b3R5cGUgdGFrZXMgYSBjb25zdCBjaGFyICoqICovCisjdW5kZWYgQ09OU1RfUE9QVAorCisvKiBEZWZpbmVkIGlmIHlvdSBoYXZlIHRoZSB2ZXJzaW9uIG9mIGJmZF9vcGVucl9pb3ZlYyB3aXRoIDcgcGFyYW1ldGVycyAqLworI3VuZGVmIEhBVkVfQkZEX09QRU5SX0lPVkVDX1dJVEhfN1BBUk1TCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBkZWNsYXJhdGlvbiBvZiBgYmFzZW5hbWUnLCBhbmQgdG8gMCBpZiB5b3UKKyAgIGRvbid0LiAqLworI3VuZGVmIEhBVkVfREVDTF9CQVNFTkFNRQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGRsZmNuLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfRExGQ05fSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGludHR5cGVzLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfSU5UVFlQRVNfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGliZXJ0eScgbGlicmFyeSAoLWxpYmVydHkpLiAqLworI3VuZGVmIEhBVkVfTElCSUJFUlRZCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bGliaWJlcnR5Lmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfTElCSUJFUlRZX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBwb3B0JyBsaWJyYXJ5ICgtbHBvcHQpLiAqLworI3VuZGVmIEhBVkVfTElCUE9QVAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG1lbW9yeS5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX01FTU9SWV9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgcGVyZm1vbmN0bCcgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9QRVJGTU9OQ1RMCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc2NoZWRfc2V0YWZmaW5pdHknIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfU0NIRURfU0VUQUZGSU5JVFkKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdGRpbnQuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TVERJTlRfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0ZGxpYi5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NURExJQl9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RyaW5ncy5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NUUklOR1NfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0cmluZy5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NUUklOR19ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3N0YXQuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TWVNfU1RBVF9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3R5cGVzLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1lTX1RZUEVTX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx1bmlzdGQuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9VTklTVERfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHhjYWxsb2MnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfWENBTExPQworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHhtZW1kdXAnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfWE1FTURVUAorCisvKiBEZWZpbmUgdG8gdGhlIHN1Yi1kaXJlY3RvcnkgaW4gd2hpY2ggbGlidG9vbCBzdG9yZXMgdW5pbnN0YWxsZWQgbGlicmFyaWVzLgorICAgKi8KKyN1bmRlZiBMVF9PQkpESVIKKworLyogd2hldGhlciBtYWxsb2MgYXR0cmlidXRlIGlzIHVuZGVyc3Rvb2QgKi8KKyN1bmRlZiBNQUxMT0NfQVRUUklCVVRFX09LCisKKy8qIHBhY2thZ2UgYmluYXJ5IGRpcmVjdG9yeSAqLworI3VuZGVmIE9QX0JJTkRJUgorCisvKiBwYWNrYWdlIGRhdGEgZGlyZWN0b3J5ICovCisjdW5kZWYgT1BfREFUQURJUgorCisvKiBOYW1lIG9mIHBhY2thZ2UgKi8KKyN1bmRlZiBQQUNLQUdFCisKKy8qIERlZmluZSB0byB0aGUgYWRkcmVzcyB3aGVyZSBidWcgcmVwb3J0cyBmb3IgdGhpcyBwYWNrYWdlIHNob3VsZCBiZSBzZW50LiAqLworI3VuZGVmIFBBQ0tBR0VfQlVHUkVQT1JUCisKKy8qIERlZmluZSB0byB0aGUgZnVsbCBuYW1lIG9mIHRoaXMgcGFja2FnZS4gKi8KKyN1bmRlZiBQQUNLQUdFX05BTUUKKworLyogRGVmaW5lIHRvIHRoZSBmdWxsIG5hbWUgYW5kIHZlcnNpb24gb2YgdGhpcyBwYWNrYWdlLiAqLworI3VuZGVmIFBBQ0tBR0VfU1RSSU5HCisKKy8qIERlZmluZSB0byB0aGUgb25lIHN5bWJvbCBzaG9ydCBuYW1lIG9mIHRoaXMgcGFja2FnZS4gKi8KKyN1bmRlZiBQQUNLQUdFX1RBUk5BTUUKKworLyogRGVmaW5lIHRvIHRoZSBob21lIHBhZ2UgZm9yIHRoaXMgcGFja2FnZS4gKi8KKyN1bmRlZiBQQUNLQUdFX1VSTAorCisvKiBEZWZpbmUgdG8gdGhlIHZlcnNpb24gb2YgdGhpcyBwYWNrYWdlLiAqLworI3VuZGVmIFBBQ0tBR0VfVkVSU0lPTgorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgQU5TSSBDIGhlYWRlciBmaWxlcy4gKi8KKyN1bmRlZiBTVERDX0hFQURFUlMKKworLyogU3ludGhlc2l6ZSBzcGVjaWFsIHN5bWJvbHMgd2hlbiBuZWVkZWQgKi8KKyN1bmRlZiBTWU5USEVTSVpFX1NZTUJPTFMKKworLyogd2hldGhlciBiZmQuaCBkZWZpbmVzIGJvb2wgdmFsdWVzICovCisjdW5kZWYgVFJVRV9GQUxTRV9BTFJFQURZX0RFRklORUQKKworLyogVmVyc2lvbiBudW1iZXIgb2YgcGFja2FnZSAqLworI3VuZGVmIFZFUlNJT04KKworLyogRGVmaW5lIHRvIDEgaWYgdGhlIFggV2luZG93IFN5c3RlbSBpcyBtaXNzaW5nIG9yIG5vdCBiZWluZyB1c2VkLiAqLworI3VuZGVmIFhfRElTUExBWV9NSVNTSU5HCmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9jb25maWcuc3ViIGIvb3Byb2ZpbGUtMC45LjcvY29uZmlnLnN1YgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jMmQxMjU3Ci0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvY29uZmlnLnN1YgpAQCAtMCwwICsxLDE3MTQgQEAKKyMhIC9iaW4vc2gKKyMgQ29uZmlndXJhdGlvbiB2YWxpZGF0aW9uIHN1YnJvdXRpbmUgc2NyaXB0LgorIyAgIENvcHlyaWdodCAoQykgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKyMgICAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwCisjICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK3RpbWVzdGFtcD0nMjAxMC0wMS0yMicKKworIyBUaGlzIGZpbGUgaXMgKGluIHByaW5jaXBsZSkgY29tbW9uIHRvIEFMTCBHTlUgc29mdHdhcmUuCisjIFRoZSBwcmVzZW5jZSBvZiBhIG1hY2hpbmUgaW4gdGhpcyBmaWxlIHN1Z2dlc3RzIHRoYXQgU09NRSBHTlUgc29mdHdhcmUKKyMgY2FuIGhhbmRsZSB0aGF0IG1hY2hpbmUuICBJdCBkb2VzIG5vdCBpbXBseSBBTEwgR05VIHNvZnR3YXJlIGNhbi4KKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyMgMDIxMTAtMTMwMSwgVVNBLgorIworIyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaWYgeW91CisjIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIHRoYXQgY29udGFpbnMgYQorIyBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHlvdSBtYXkgaW5jbHVkZSBpdCB1bmRlcgorIyB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisKKworIyBQbGVhc2Ugc2VuZCBwYXRjaGVzIHRvIDxjb25maWctcGF0Y2hlc0BnbnUub3JnPi4gIFN1Ym1pdCBhIGNvbnRleHQKKyMgZGlmZiBhbmQgYSBwcm9wZXJseSBmb3JtYXR0ZWQgR05VIENoYW5nZUxvZyBlbnRyeS4KKyMKKyMgQ29uZmlndXJhdGlvbiBzdWJyb3V0aW5lIHRvIHZhbGlkYXRlIGFuZCBjYW5vbmljYWxpemUgYSBjb25maWd1cmF0aW9uIHR5cGUuCisjIFN1cHBseSB0aGUgc3BlY2lmaWVkIGNvbmZpZ3VyYXRpb24gdHlwZSBhcyBhbiBhcmd1bWVudC4KKyMgSWYgaXQgaXMgaW52YWxpZCwgd2UgcHJpbnQgYW4gZXJyb3IgbWVzc2FnZSBvbiBzdGRlcnIgYW5kIGV4aXQgd2l0aCBjb2RlIDEuCisjIE90aGVyd2lzZSwgd2UgcHJpbnQgdGhlIGNhbm9uaWNhbCBjb25maWcgdHlwZSBvbiBzdGRvdXQgYW5kIHN1Y2NlZWQuCisKKyMgWW91IGNhbiBnZXQgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoaXMgc2NyaXB0IGZyb206CisjIGh0dHA6Ly9naXQuc2F2YW5uYWguZ251Lm9yZy9naXR3ZWIvP3A9Y29uZmlnLmdpdDthPWJsb2JfcGxhaW47Zj1jb25maWcuc3ViO2hiPUhFQUQKKworIyBUaGlzIGZpbGUgaXMgc3VwcG9zZWQgdG8gYmUgdGhlIHNhbWUgZm9yIGFsbCBHTlUgcGFja2FnZXMKKyMgYW5kIHJlY29nbml6ZSBhbGwgdGhlIENQVSB0eXBlcywgc3lzdGVtIHR5cGVzIGFuZCBhbGlhc2VzCisjIHRoYXQgYXJlIG1lYW5pbmdmdWwgd2l0aCAqYW55KiBHTlUgc29mdHdhcmUuCisjIEVhY2ggcGFja2FnZSBpcyByZXNwb25zaWJsZSBmb3IgcmVwb3J0aW5nIHdoaWNoIHZhbGlkIGNvbmZpZ3VyYXRpb25zCisjIGl0IGRvZXMgbm90IHN1cHBvcnQuICBUaGUgdXNlciBzaG91bGQgYmUgYWJsZSB0byBkaXN0aW5ndWlzaAorIyBhIGZhaWx1cmUgdG8gc3VwcG9ydCBhIHZhbGlkIGNvbmZpZ3VyYXRpb24gZnJvbSBhIG1lYW5pbmdsZXNzCisjIGNvbmZpZ3VyYXRpb24uCisKKyMgVGhlIGdvYWwgb2YgdGhpcyBmaWxlIGlzIHRvIG1hcCBhbGwgdGhlIHZhcmlvdXMgdmFyaWF0aW9ucyBvZiBhIGdpdmVuCisjIG1hY2hpbmUgc3BlY2lmaWNhdGlvbiBpbnRvIGEgc2luZ2xlIHNwZWNpZmljYXRpb24gaW4gdGhlIGZvcm06CisjCUNQVV9UWVBFLU1BTlVGQUNUVVJFUi1PUEVSQVRJTkdfU1lTVEVNCisjIG9yIGluIHNvbWUgY2FzZXMsIHRoZSBuZXdlciBmb3VyLXBhcnQgZm9ybToKKyMJQ1BVX1RZUEUtTUFOVUZBQ1RVUkVSLUtFUk5FTC1PUEVSQVRJTkdfU1lTVEVNCisjIEl0IGlzIHdyb25nIHRvIGVjaG8gYW55IG90aGVyIHR5cGUgb2Ygc3BlY2lmaWNhdGlvbi4KKworbWU9YGVjaG8gIiQwIiB8IHNlZCAtZSAncywuKi8sLCdgCisKK3VzYWdlPSJcCitVc2FnZTogJDAgW09QVElPTl0gQ1BVLU1GUi1PUFNZUworICAgICAgICQwIFtPUFRJT05dIEFMSUFTCisKK0Nhbm9uaWNhbGl6ZSBhIGNvbmZpZ3VyYXRpb24gbmFtZS4KKworT3BlcmF0aW9uIG1vZGVzOgorICAtaCwgLS1oZWxwICAgICAgICAgcHJpbnQgdGhpcyBoZWxwLCB0aGVuIGV4aXQKKyAgLXQsIC0tdGltZS1zdGFtcCAgIHByaW50IGRhdGUgb2YgbGFzdCBtb2RpZmljYXRpb24sIHRoZW4gZXhpdAorICAtdiwgLS12ZXJzaW9uICAgICAgcHJpbnQgdmVyc2lvbiBudW1iZXIsIHRoZW4gZXhpdAorCitSZXBvcnQgYnVncyBhbmQgcGF0Y2hlcyB0byA8Y29uZmlnLXBhdGNoZXNAZ251Lm9yZz4uIgorCit2ZXJzaW9uPSJcCitHTlUgY29uZmlnLnN1YiAoJHRpbWVzdGFtcCkKKworQ29weXJpZ2h0IChDKSAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLAorMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgc2VlIHRoZSBzb3VyY2UgZm9yIGNvcHlpbmcgY29uZGl0aW9ucy4gIFRoZXJlIGlzIE5PCit3YXJyYW50eTsgbm90IGV2ZW4gZm9yIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4iCisKK2hlbHA9IgorVHJ5IFxgJG1lIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIgorCisjIFBhcnNlIGNvbW1hbmQgbGluZQord2hpbGUgdGVzdCAkIyAtZ3QgMCA7IGRvCisgIGNhc2UgJDEgaW4KKyAgICAtLXRpbWUtc3RhbXAgfCAtLXRpbWUqIHwgLXQgKQorICAgICAgIGVjaG8gIiR0aW1lc3RhbXAiIDsgZXhpdCA7OworICAgIC0tdmVyc2lvbiB8IC12ICkKKyAgICAgICBlY2hvICIkdmVyc2lvbiIgOyBleGl0IDs7CisgICAgLS1oZWxwIHwgLS1oKiB8IC1oICkKKyAgICAgICBlY2hvICIkdXNhZ2UiOyBleGl0IDs7CisgICAgLS0gKSAgICAgIyBTdG9wIG9wdGlvbiBwcm9jZXNzaW5nCisgICAgICAgc2hpZnQ7IGJyZWFrIDs7CisgICAgLSApCSMgVXNlIHN0ZGluIGFzIGlucHV0LgorICAgICAgIGJyZWFrIDs7CisgICAgLSogKQorICAgICAgIGVjaG8gIiRtZTogaW52YWxpZCBvcHRpb24gJDEkaGVscCIKKyAgICAgICBleGl0IDEgOzsKKworICAgICpsb2NhbCopCisgICAgICAgIyBGaXJzdCBwYXNzIHRocm91Z2ggYW55IGxvY2FsIG1hY2hpbmUgdHlwZXMuCisgICAgICAgZWNobyAkMQorICAgICAgIGV4aXQgOzsKKworICAgICogKQorICAgICAgIGJyZWFrIDs7CisgIGVzYWMKK2RvbmUKKworY2FzZSAkIyBpbgorIDApIGVjaG8gIiRtZTogbWlzc2luZyBhcmd1bWVudCRoZWxwIiA+JjIKKyAgICBleGl0IDE7OworIDEpIDs7CisgKikgZWNobyAiJG1lOiB0b28gbWFueSBhcmd1bWVudHMkaGVscCIgPiYyCisgICAgZXhpdCAxOzsKK2VzYWMKKworIyBTZXBhcmF0ZSB3aGF0IHRoZSB1c2VyIGdhdmUgaW50byBDUFUtQ09NUEFOWSBhbmQgT1Mgb3IgS0VSTkVMLU9TIChpZiBhbnkpLgorIyBIZXJlIHdlIG11c3QgcmVjb2duaXplIGFsbCB0aGUgdmFsaWQgS0VSTkVMLU9TIGNvbWJpbmF0aW9ucy4KK21heWJlX29zPWBlY2hvICQxIHwgc2VkICdzL15cKC4qXCktXChbXi1dKi1bXi1dKlwpJC9cMi8nYAorY2FzZSAkbWF5YmVfb3MgaW4KKyAgbnRvLXFueCogfCBsaW51eC1nbnUqIHwgbGludXgtZGlldGxpYmMgfCBsaW51eC1uZXdsaWIqIHwgbGludXgtdWNsaWJjKiB8IFwKKyAgdWNsaW51eC11Y2xpYmMqIHwgdWNsaW51eC1nbnUqIHwga2ZyZWVic2QqLWdudSogfCBrbmV0YnNkKi1nbnUqIHwgbmV0YnNkKi1nbnUqIHwgXAorICBrb3BlbnNvbGFyaXMqLWdudSogfCBcCisgIHN0b3JtLWNoYW9zKiB8IG9zMi1lbXgqIHwgcnRtay1ub3ZhKikKKyAgICBvcz0tJG1heWJlX29zCisgICAgYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAncy9eXCguKlwpLVwoW14tXSotW14tXSpcKSQvXDEvJ2AKKyAgICA7OworICAqKQorICAgIGJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgJ3MvLVteLV0qJC8vJ2AKKyAgICBpZiBbICRiYXNpY19tYWNoaW5lICE9ICQxIF0KKyAgICB0aGVuIG9zPWBlY2hvICQxIHwgc2VkICdzLy4qLS8tLydgCisgICAgZWxzZSBvcz07IGZpCisgICAgOzsKK2VzYWMKKworIyMjIExldCdzIHJlY29nbml6ZSBjb21tb24gbWFjaGluZXMgYXMgbm90IGJlaW5nIG9wZXJhdGluZyBzeXN0ZW1zIHNvCisjIyMgdGhhdCB0aGluZ3MgbGlrZSBjb25maWcuc3ViIGRlY3N0YXRpb24tMzEwMCB3b3JrLiAgV2UgYWxzbworIyMjIHJlY29nbml6ZSBzb21lIG1hbnVmYWN0dXJlcnMgYXMgbm90IGJlaW5nIG9wZXJhdGluZyBzeXN0ZW1zLCBzbyB3ZQorIyMjIGNhbiBwcm92aWRlIGRlZmF1bHQgb3BlcmF0aW5nIHN5c3RlbXMgYmVsb3cuCitjYXNlICRvcyBpbgorCS1zdW4qb3MqKQorCQkjIFByZXZlbnQgZm9sbG93aW5nIGNsYXVzZSBmcm9tIGhhbmRsaW5nIHRoaXMgaW52YWxpZCBpbnB1dC4KKwkJOzsKKwktZGVjKiB8IC1taXBzKiB8IC1zZXF1ZW50KiB8IC1lbmNvcmUqIHwgLXBjNTMyKiB8IC1zZ2kqIHwgLXNvbnkqIHwgXAorCS1hdHQqIHwgLTczMDAqIHwgLTMzMDAqIHwgLWRlbHRhKiB8IC1tb3Rvcm9sYSogfCAtc3VuWzIzNF0qIHwgXAorCS11bmljb20qIHwgLWlibSogfCAtbmV4dCB8IC1ocCB8IC1pc2kqIHwgLWFwb2xsbyB8IC1hbHRvcyogfCBcCisJLWNvbnZlcmdlbnQqIHwgLW5jciogfCAtbmV3cyB8IC0zMiogfCAtMzYwMCogfCAtMzEwMCogfCAtaGl0YWNoaSogfFwKKwktY1sxMjNdKiB8IC1jb252ZXgqIHwgLXN1biB8IC1jcmRzIHwgLW9tcm9uKiB8IC1kZyB8IC11bHRyYSB8IC10dGkqIHwgXAorCS1oYXJyaXMgfCAtZG9scGhpbiB8IC1oaWdobGV2ZWwgfCAtZ291bGQgfCAtY2JtIHwgLW5zIHwgLW1hc3Njb21wIHwgXAorCS1hcHBsZSB8IC1heGlzIHwgLWtudXRoIHwgLWNyYXkgfCAtbWljcm9ibGF6ZSkKKwkJb3M9CisJCWJhc2ljX21hY2hpbmU9JDEKKwkJOzsKKyAgICAgICAgLWJsdWVnZW5lKikKKwkgICAgICAgIG9zPS1jbmsKKwkJOzsKKwktc2ltIHwgLWNpc2NvIHwgLW9raSB8IC13ZWMgfCAtd2luYm9uZCkKKwkJb3M9CisJCWJhc2ljX21hY2hpbmU9JDEKKwkJOzsKKwktc2NvdXQpCisJCTs7CisJLXdycykKKwkJb3M9LXZ4d29ya3MKKwkJYmFzaWNfbWFjaGluZT0kMQorCQk7OworCS1jaG9ydXNvcyopCisJCW9zPS1jaG9ydXNvcworCQliYXNpY19tYWNoaW5lPSQxCisJCTs7CisgCS1jaG9ydXNyZGIpCisgCQlvcz0tY2hvcnVzcmRiCisJCWJhc2ljX21hY2hpbmU9JDEKKyAJCTs7CisJLWhpdXgqKQorCQlvcz0taGl1eHdlMgorCQk7OworCS1zY282KQorCQlvcz0tc2NvNXY2CisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYtLiovODYtcGMvJ2AKKwkJOzsKKwktc2NvNSkKKwkJb3M9LXNjbzMuMnY1CisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYtLiovODYtcGMvJ2AKKwkJOzsKKwktc2NvNCkKKwkJb3M9LXNjbzMuMnY0CisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYtLiovODYtcGMvJ2AKKwkJOzsKKwktc2NvMy4yLls0LTldKikKKwkJb3M9YGVjaG8gJG9zIHwgc2VkIC1lICdzL3NjbzMuMi4vc2NvMy4ydi8nYAorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LS4qLzg2LXBjLydgCisJCTs7CisJLXNjbzMuMnZbNC05XSopCisJCSMgRG9uJ3QgZm9yZ2V0IHZlcnNpb24gaWYgaXQgaXMgMy4ydjQgb3IgbmV3ZXIuCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYtLiovODYtcGMvJ2AKKwkJOzsKKwktc2NvNXY2KikKKwkJIyBEb24ndCBmb3JnZXQgdmVyc2lvbiBpZiBpdCBpcyAzLjJ2NCBvciBuZXdlci4KKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni0uKi84Ni1wYy8nYAorCQk7OworCS1zY28qKQorCQlvcz0tc2NvMy4ydjIKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni0uKi84Ni1wYy8nYAorCQk7OworCS11ZGsqKQorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LS4qLzg2LXBjLydgCisJCTs7CisJLWlzYykKKwkJb3M9LWlzYzIuMgorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LS4qLzg2LXBjLydgCisJCTs7CisJLWNsaXgqKQorCQliYXNpY19tYWNoaW5lPWNsaXBwZXItaW50ZXJncmFwaAorCQk7OworCS1pc2MqKQorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LS4qLzg2LXBjLydgCisJCTs7CisJLWx5bngqKQorCQlvcz0tbHlueG9zCisJCTs7CisJLXB0eCopCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYtLiovODYtc2VxdWVudC8nYAorCQk7OworCS13aW5kb3dzbnQqKQorCQlvcz1gZWNobyAkb3MgfCBzZWQgLWUgJ3Mvd2luZG93c250L3dpbm50LydgCisJCTs7CisJLXBzb3MqKQorCQlvcz0tcHNvcworCQk7OworCS1taW50IHwgLW1pbnRbMC05XSopCisJCWJhc2ljX21hY2hpbmU9bTY4ay1hdGFyaQorCQlvcz0tbWludAorCQk7OworZXNhYworCisjIERlY29kZSBhbGlhc2VzIGZvciBjZXJ0YWluIENQVS1DT01QQU5ZIGNvbWJpbmF0aW9ucy4KK2Nhc2UgJGJhc2ljX21hY2hpbmUgaW4KKwkjIFJlY29nbml6ZSB0aGUgYmFzaWMgQ1BVIHR5cGVzIHdpdGhvdXQgY29tcGFueSBuYW1lLgorCSMgU29tZSBhcmUgb21pdHRlZCBoZXJlIGJlY2F1c2UgdGhleSBoYXZlIHNwZWNpYWwgbWVhbmluZ3MgYmVsb3cuCisJMTc1MGEgfCA1ODAgXAorCXwgYTI5ayBcCisJfCBhbHBoYSB8IGFscGhhZXZbNC04XSB8IGFscGhhZXY1NiB8IGFscGhhZXY2Wzc4XSB8IGFscGhhcGNhNVs2N10gXAorCXwgYWxwaGE2NCB8IGFscGhhNjRldls0LThdIHwgYWxwaGE2NGV2NTYgfCBhbHBoYTY0ZXY2Wzc4XSB8IGFscGhhNjRwY2E1WzY3XSBcCisJfCBhbTMzXzIuMCBcCisJfCBhcmMgfCBhcm0gfCBhcm1bYmxdZSB8IGFybWVbbGJdIHwgYXJtdlsyMzQ1XSB8IGFybXZbMzQ1XVtsYl0gfCBhdnIgfCBhdnIzMiBcCisJfCBiZmluIFwKKwl8IGM0eCB8IGNsaXBwZXIgXAorCXwgZDEwdiB8IGQzMHYgfCBkbHggfCBkc3AxNnh4IFwKKwl8IGZpZG8gfCBmcjMwIHwgZnJ2IFwKKwl8IGg4MzAwIHwgaDg1MDAgfCBocHBhIHwgaHBwYTEuWzAxXSB8IGhwcGEyLjAgfCBocHBhMi4wW253XSB8IGhwcGE2NCBcCisJfCBpMzcwIHwgaTg2MCB8IGk5NjAgfCBpYTY0IFwKKwl8IGlwMmsgfCBpcTIwMDAgXAorCXwgbG0zMiBcCisJfCBtMzJjIHwgbTMyciB8IG0zMnJsZSB8IG02ODAwMCB8IG02OGsgfCBtODhrIFwKKwl8IG1heHEgfCBtYiB8IG1pY3JvYmxhemUgfCBtY29yZSB8IG1lcCB8IG1ldGFnIFwKKwl8IG1pcHMgfCBtaXBzYmUgfCBtaXBzZWIgfCBtaXBzZWwgfCBtaXBzbGUgXAorCXwgbWlwczE2IFwKKwl8IG1pcHM2NCB8IG1pcHM2NGVsIFwKKwl8IG1pcHM2NG9jdGVvbiB8IG1pcHM2NG9jdGVvbmVsIFwKKwl8IG1pcHM2NG9yaW9uIHwgbWlwczY0b3Jpb25lbCBcCisJfCBtaXBzNjRyNTkwMCB8IG1pcHM2NHI1OTAwZWwgXAorCXwgbWlwczY0dnIgfCBtaXBzNjR2cmVsIFwKKwl8IG1pcHM2NHZyNDEwMCB8IG1pcHM2NHZyNDEwMGVsIFwKKwl8IG1pcHM2NHZyNDMwMCB8IG1pcHM2NHZyNDMwMGVsIFwKKwl8IG1pcHM2NHZyNTAwMCB8IG1pcHM2NHZyNTAwMGVsIFwKKwl8IG1pcHM2NHZyNTkwMCB8IG1pcHM2NHZyNTkwMGVsIFwKKwl8IG1pcHNpc2EzMiB8IG1pcHNpc2EzMmVsIFwKKwl8IG1pcHNpc2EzMnIyIHwgbWlwc2lzYTMycjJlbCBcCisJfCBtaXBzaXNhNjQgfCBtaXBzaXNhNjRlbCBcCisJfCBtaXBzaXNhNjRyMiB8IG1pcHNpc2E2NHIyZWwgXAorCXwgbWlwc2lzYTY0c2IxIHwgbWlwc2lzYTY0c2IxZWwgXAorCXwgbWlwc2lzYTY0c3I3MWsgfCBtaXBzaXNhNjRzcjcxa2VsIFwKKwl8IG1pcHN0eDM5IHwgbWlwc3R4MzllbCBcCisJfCBtbjEwMjAwIHwgbW4xMDMwMCBcCisJfCBtb3hpZSBcCisJfCBtdCBcCisJfCBtc3A0MzAgXAorCXwgbmlvcyB8IG5pb3MyIFwKKwl8IG5zMTZrIHwgbnMzMmsgXAorCXwgb3IzMiBcCisJfCBwZHAxMCB8IHBkcDExIHwgcGogfCBwamwgXAorCXwgcG93ZXJwYyB8IHBvd2VycGM2NCB8IHBvd2VycGM2NGxlIHwgcG93ZXJwY2xlIHwgcHBjYmUgXAorCXwgcHlyYW1pZCBcCisJfCByeCBcCisJfCBzY29yZSBcCisJfCBzaCB8IHNoWzEyMzRdIHwgc2hbMjRdYSB8IHNoWzI0XWFlYiB8IHNoWzIzXWUgfCBzaFszNF1lYiB8IHNoZWIgfCBzaGJlIHwgc2hsZSB8IHNoWzEyMzRdbGUgfCBzaDNlbGUgXAorCXwgc2g2NCB8IHNoNjRsZSBcCisJfCBzcGFyYyB8IHNwYXJjNjQgfCBzcGFyYzY0YiB8IHNwYXJjNjR2IHwgc3BhcmM4NnggfCBzcGFyY2xldCB8IHNwYXJjbGl0ZSBcCisJfCBzcGFyY3Y4IHwgc3BhcmN2OSB8IHNwYXJjdjliIHwgc3BhcmN2OXYgXAorCXwgc3B1IHwgc3Ryb25nYXJtIFwKKwl8IHRhaG9lIHwgdGh1bWIgfCB0aWM0eCB8IHRpYzgwIHwgdHJvbiBcCisJfCB1Ymljb20zMiBcCisJfCB2ODUwIHwgdjg1MGUgXAorCXwgd2UzMmsgXAorCXwgeDg2IHwgeGMxNnggfCB4c2NhbGUgfCB4c2NhbGVlW2JsXSB8IHhzdG9ybXkxNiB8IHh0ZW5zYSBcCisJfCB6OGsgfCB6ODApCisJCWJhc2ljX21hY2hpbmU9JGJhc2ljX21hY2hpbmUtdW5rbm93bgorCQk7OworCW02ODExIHwgbTY4aGMxMSB8IG02ODEyIHwgbTY4aGMxMiB8IHBpY29jaGlwKQorCQkjIE1vdG9yb2xhIDY4SEMxMS8xMi4KKwkJYmFzaWNfbWFjaGluZT0kYmFzaWNfbWFjaGluZS11bmtub3duCisJCW9zPS1ub25lCisJCTs7CisJbTg4MTEwIHwgbTY4MFsxMjM0Nl0wIHwgbTY4Mz8yIHwgbTY4MzYwIHwgbTUyMDAgfCB2NzAgfCB3NjUgfCB6OGspCisJCTs7CisJbXMxKQorCQliYXNpY19tYWNoaW5lPW10LXVua25vd24KKwkJOzsKKworCSMgV2UgdXNlIGBwYycgcmF0aGVyIHRoYW4gYHVua25vd24nCisJIyBiZWNhdXNlICgxKSB0aGF0J3Mgd2hhdCB0aGV5IG5vcm1hbGx5IGFyZSwgYW5kCisJIyAoMikgdGhlIHdvcmQgInVua25vd24iIHRlbmRzIHRvIGNvbmZ1c2UgYmVnaW5uaW5nIHVzZXJzLgorCWkqODYgfCB4ODZfNjQpCisJICBiYXNpY19tYWNoaW5lPSRiYXNpY19tYWNoaW5lLXBjCisJICA7OworCSMgT2JqZWN0IGlmIG1vcmUgdGhhbiBvbmUgY29tcGFueSBuYW1lIHdvcmQuCisJKi0qLSopCisJCWVjaG8gSW52YWxpZCBjb25maWd1cmF0aW9uIFxgJDFcJzogbWFjaGluZSBcYCRiYXNpY19tYWNoaW5lXCcgbm90IHJlY29nbml6ZWQgMT4mMgorCQlleGl0IDEKKwkJOzsKKwkjIFJlY29nbml6ZSB0aGUgYmFzaWMgQ1BVIHR5cGVzIHdpdGggY29tcGFueSBuYW1lLgorCTU4MC0qIFwKKwl8IGEyOWstKiBcCisJfCBhbHBoYS0qIHwgYWxwaGFldls0LThdLSogfCBhbHBoYWV2NTYtKiB8IGFscGhhZXY2Wzc4XS0qIFwKKwl8IGFscGhhNjQtKiB8IGFscGhhNjRldls0LThdLSogfCBhbHBoYTY0ZXY1Ni0qIHwgYWxwaGE2NGV2Nls3OF0tKiBcCisJfCBhbHBoYXBjYTVbNjddLSogfCBhbHBoYTY0cGNhNVs2N10tKiB8IGFyYy0qIFwKKwl8IGFybS0qICB8IGFybWJlLSogfCBhcm1sZS0qIHwgYXJtZWItKiB8IGFybXYqLSogXAorCXwgYXZyLSogfCBhdnIzMi0qIFwKKwl8IGJmaW4tKiB8IGJzMjAwMC0qIFwKKwl8IGNbMTIzXSogfCBjMzAtKiB8IFtjanRdOTAtKiB8IGM0eC0qIHwgYzU0eC0qIHwgYzU1eC0qIHwgYzZ4LSogXAorCXwgY2xpcHBlci0qIHwgY3JheW52LSogfCBjeWRyYS0qIFwKKwl8IGQxMHYtKiB8IGQzMHYtKiB8IGRseC0qIFwKKwl8IGVseHNpLSogXAorCXwgZjMwWzAxXS0qIHwgZjcwMC0qIHwgZmlkby0qIHwgZnIzMC0qIHwgZnJ2LSogfCBmeDgwLSogXAorCXwgaDgzMDAtKiB8IGg4NTAwLSogXAorCXwgaHBwYS0qIHwgaHBwYTEuWzAxXS0qIHwgaHBwYTIuMC0qIHwgaHBwYTIuMFtud10tKiB8IGhwcGE2NC0qIFwKKwl8IGkqODYtKiB8IGk4NjAtKiB8IGk5NjAtKiB8IGlhNjQtKiBcCisJfCBpcDJrLSogfCBpcTIwMDAtKiBcCisJfCBsbTMyLSogXAorCXwgbTMyYy0qIHwgbTMyci0qIHwgbTMycmxlLSogXAorCXwgbTY4MDAwLSogfCBtNjgwWzAxMjM0Nl0wLSogfCBtNjgzNjAtKiB8IG02ODM/Mi0qIHwgbTY4ay0qIFwKKwl8IG04ODExMC0qIHwgbTg4ay0qIHwgbWF4cS0qIHwgbWNvcmUtKiB8IG1ldGFnLSogfCBtaWNyb2JsYXplLSogXAorCXwgbWlwcy0qIHwgbWlwc2JlLSogfCBtaXBzZWItKiB8IG1pcHNlbC0qIHwgbWlwc2xlLSogXAorCXwgbWlwczE2LSogXAorCXwgbWlwczY0LSogfCBtaXBzNjRlbC0qIFwKKwl8IG1pcHM2NG9jdGVvbi0qIHwgbWlwczY0b2N0ZW9uZWwtKiBcCisJfCBtaXBzNjRvcmlvbi0qIHwgbWlwczY0b3Jpb25lbC0qIFwKKwl8IG1pcHM2NHI1OTAwLSogfCBtaXBzNjRyNTkwMGVsLSogXAorCXwgbWlwczY0dnItKiB8IG1pcHM2NHZyZWwtKiBcCisJfCBtaXBzNjR2cjQxMDAtKiB8IG1pcHM2NHZyNDEwMGVsLSogXAorCXwgbWlwczY0dnI0MzAwLSogfCBtaXBzNjR2cjQzMDBlbC0qIFwKKwl8IG1pcHM2NHZyNTAwMC0qIHwgbWlwczY0dnI1MDAwZWwtKiBcCisJfCBtaXBzNjR2cjU5MDAtKiB8IG1pcHM2NHZyNTkwMGVsLSogXAorCXwgbWlwc2lzYTMyLSogfCBtaXBzaXNhMzJlbC0qIFwKKwl8IG1pcHNpc2EzMnIyLSogfCBtaXBzaXNhMzJyMmVsLSogXAorCXwgbWlwc2lzYTY0LSogfCBtaXBzaXNhNjRlbC0qIFwKKwl8IG1pcHNpc2E2NHIyLSogfCBtaXBzaXNhNjRyMmVsLSogXAorCXwgbWlwc2lzYTY0c2IxLSogfCBtaXBzaXNhNjRzYjFlbC0qIFwKKwl8IG1pcHNpc2E2NHNyNzFrLSogfCBtaXBzaXNhNjRzcjcxa2VsLSogXAorCXwgbWlwc3R4MzktKiB8IG1pcHN0eDM5ZWwtKiBcCisJfCBtbWl4LSogXAorCXwgbXQtKiBcCisJfCBtc3A0MzAtKiBcCisJfCBuaW9zLSogfCBuaW9zMi0qIFwKKwl8IG5vbmUtKiB8IG5wMS0qIHwgbnMxNmstKiB8IG5zMzJrLSogXAorCXwgb3Jpb24tKiBcCisJfCBwZHAxMC0qIHwgcGRwMTEtKiB8IHBqLSogfCBwamwtKiB8IHBuLSogfCBwb3dlci0qIFwKKwl8IHBvd2VycGMtKiB8IHBvd2VycGM2NC0qIHwgcG93ZXJwYzY0bGUtKiB8IHBvd2VycGNsZS0qIHwgcHBjYmUtKiBcCisJfCBweXJhbWlkLSogXAorCXwgcm9tcC0qIHwgcnM2MDAwLSogfCByeC0qIFwKKwl8IHNoLSogfCBzaFsxMjM0XS0qIHwgc2hbMjRdYS0qIHwgc2hbMjRdYWViLSogfCBzaFsyM11lLSogfCBzaFszNF1lYi0qIHwgc2hlYi0qIHwgc2hiZS0qIFwKKwl8IHNobGUtKiB8IHNoWzEyMzRdbGUtKiB8IHNoM2VsZS0qIHwgc2g2NC0qIHwgc2g2NGxlLSogXAorCXwgc3BhcmMtKiB8IHNwYXJjNjQtKiB8IHNwYXJjNjRiLSogfCBzcGFyYzY0di0qIHwgc3BhcmM4NngtKiB8IHNwYXJjbGV0LSogXAorCXwgc3BhcmNsaXRlLSogXAorCXwgc3BhcmN2OC0qIHwgc3BhcmN2OS0qIHwgc3BhcmN2OWItKiB8IHNwYXJjdjl2LSogfCBzdHJvbmdhcm0tKiB8IHN2MS0qIHwgc3g/LSogXAorCXwgdGFob2UtKiB8IHRodW1iLSogXAorCXwgdGljMzAtKiB8IHRpYzR4LSogfCB0aWM1NHgtKiB8IHRpYzU1eC0qIHwgdGljNngtKiB8IHRpYzgwLSogXAorCXwgdGlsZS0qIHwgdGlsZWd4LSogXAorCXwgdHJvbi0qIFwKKwl8IHViaWNvbTMyLSogXAorCXwgdjg1MC0qIHwgdjg1MGUtKiB8IHZheC0qIFwKKwl8IHdlMzJrLSogXAorCXwgeDg2LSogfCB4ODZfNjQtKiB8IHhjMTZ4LSogfCB4cHMxMDAtKiB8IHhzY2FsZS0qIHwgeHNjYWxlZVtibF0tKiBcCisJfCB4c3Rvcm15MTYtKiB8IHh0ZW5zYSotKiBcCisJfCB5bXAtKiBcCisJfCB6OGstKiB8IHo4MC0qKQorCQk7OworCSMgUmVjb2duaXplIHRoZSBiYXNpYyBDUFUgdHlwZXMgd2l0aG91dCBjb21wYW55IG5hbWUsIHdpdGggZ2xvYiBtYXRjaC4KKwl4dGVuc2EqKQorCQliYXNpY19tYWNoaW5lPSRiYXNpY19tYWNoaW5lLXVua25vd24KKwkJOzsKKwkjIFJlY29nbml6ZSB0aGUgdmFyaW91cyBtYWNoaW5lIG5hbWVzIGFuZCBhbGlhc2VzIHdoaWNoIHN0YW5kCisJIyBmb3IgYSBDUFUgdHlwZSBhbmQgYSBjb21wYW55IGFuZCBzb21ldGltZXMgZXZlbiBhbiBPUy4KKwkzODZic2QpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni11bmtub3duCisJCW9zPS1ic2QKKwkJOzsKKwkzYjEgfCA3MzAwIHwgNzMwMC1hdHQgfCBhdHQtNzMwMCB8IHBjNzMwMCB8IHNhZmFyaSB8IHVuaXhwYykKKwkJYmFzaWNfbWFjaGluZT1tNjgwMDAtYXR0CisJCTs7CisJM2IqKQorCQliYXNpY19tYWNoaW5lPXdlMzJrLWF0dAorCQk7OworCWEyOWtoaWYpCisJCWJhc2ljX21hY2hpbmU9YTI5ay1hbWQKKwkJb3M9LXVkaQorCQk7OworICAgIAlhYmFjdXMpCisJCWJhc2ljX21hY2hpbmU9YWJhY3VzLXVua25vd24KKwkJOzsKKwlhZG9iZTY4aykKKwkJYmFzaWNfbWFjaGluZT1tNjgwMTAtYWRvYmUKKwkJb3M9LXNjb3V0CisJCTs7CisJYWxsaWFudCB8IGZ4ODApCisJCWJhc2ljX21hY2hpbmU9Zng4MC1hbGxpYW50CisJCTs7CisJYWx0b3MgfCBhbHRvczMwNjgpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1hbHRvcworCQk7OworCWFtMjlrKQorCQliYXNpY19tYWNoaW5lPWEyOWstbm9uZQorCQlvcz0tYnNkCisJCTs7CisJYW1kNjQpCisJCWJhc2ljX21hY2hpbmU9eDg2XzY0LXBjCisJCTs7CisJYW1kNjQtKikKKwkJYmFzaWNfbWFjaGluZT14ODZfNjQtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJOzsKKwlhbWRhaGwpCisJCWJhc2ljX21hY2hpbmU9NTgwLWFtZGFobAorCQlvcz0tc3lzdgorCQk7OworCWFtaWdhIHwgYW1pZ2EtKikKKwkJYmFzaWNfbWFjaGluZT1tNjhrLXVua25vd24KKwkJOzsKKwlhbWlnYW9zIHwgYW1pZ2Fkb3MpCisJCWJhc2ljX21hY2hpbmU9bTY4ay11bmtub3duCisJCW9zPS1hbWlnYW9zCisJCTs7CisJYW1pZ2F1bml4IHwgYW1peCkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLXVua25vd24KKwkJb3M9LXN5c3Y0CisJCTs7CisJYXBvbGxvNjgpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1hcG9sbG8KKwkJb3M9LXN5c3YKKwkJOzsKKwlhcG9sbG82OGJzZCkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWFwb2xsbworCQlvcz0tYnNkCisJCTs7CisJYXJvcykKKwkJYmFzaWNfbWFjaGluZT1pMzg2LXBjCisJCW9zPS1hcm9zCisJCTs7CisJYXV4KQorCQliYXNpY19tYWNoaW5lPW02OGstYXBwbGUKKwkJb3M9LWF1eAorCQk7OworCWJhbGFuY2UpCisJCWJhc2ljX21hY2hpbmU9bnMzMmstc2VxdWVudAorCQlvcz0tZHluaXgKKwkJOzsKKwlibGFja2ZpbikKKwkJYmFzaWNfbWFjaGluZT1iZmluLXVua25vd24KKwkJb3M9LWxpbnV4CisJCTs7CisJYmxhY2tmaW4tKikKKwkJYmFzaWNfbWFjaGluZT1iZmluLWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCW9zPS1saW51eAorCQk7OworCWJsdWVnZW5lKikKKwkJYmFzaWNfbWFjaGluZT1wb3dlcnBjLWlibQorCQlvcz0tY25rCisJCTs7CisJYzkwKQorCQliYXNpY19tYWNoaW5lPWM5MC1jcmF5CisJCW9zPS11bmljb3MKKwkJOzsKKyAgICAgICAgY2VnY2MpCisJCWJhc2ljX21hY2hpbmU9YXJtLXVua25vd24KKwkJb3M9LWNlZ2NjCisJCTs7CisJY29udmV4LWMxKQorCQliYXNpY19tYWNoaW5lPWMxLWNvbnZleAorCQlvcz0tYnNkCisJCTs7CisJY29udmV4LWMyKQorCQliYXNpY19tYWNoaW5lPWMyLWNvbnZleAorCQlvcz0tYnNkCisJCTs7CisJY29udmV4LWMzMikKKwkJYmFzaWNfbWFjaGluZT1jMzItY29udmV4CisJCW9zPS1ic2QKKwkJOzsKKwljb252ZXgtYzM0KQorCQliYXNpY19tYWNoaW5lPWMzNC1jb252ZXgKKwkJb3M9LWJzZAorCQk7OworCWNvbnZleC1jMzgpCisJCWJhc2ljX21hY2hpbmU9YzM4LWNvbnZleAorCQlvcz0tYnNkCisJCTs7CisJY3JheSB8IGo5MCkKKwkJYmFzaWNfbWFjaGluZT1qOTAtY3JheQorCQlvcz0tdW5pY29zCisJCTs7CisJY3JheW52KQorCQliYXNpY19tYWNoaW5lPWNyYXludi1jcmF5CisJCW9zPS11bmljb3NtcAorCQk7OworCWNyMTYpCisJCWJhc2ljX21hY2hpbmU9Y3IxNi11bmtub3duCisJCW9zPS1lbGYKKwkJOzsKKwljcmRzIHwgdW5vcykKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWNyZHMKKwkJOzsKKwljcmlzdjMyIHwgY3Jpc3YzMi0qIHwgZXRyYXhmcyopCisJCWJhc2ljX21hY2hpbmU9Y3Jpc3YzMi1heGlzCisJCTs7CisJY3JpcyB8IGNyaXMtKiB8IGV0cmF4KikKKwkJYmFzaWNfbWFjaGluZT1jcmlzLWF4aXMKKwkJOzsKKwljcngpCisJCWJhc2ljX21hY2hpbmU9Y3J4LXVua25vd24KKwkJb3M9LWVsZgorCQk7OworCWRhMzAgfCBkYTMwLSopCisJCWJhc2ljX21hY2hpbmU9bTY4ay1kYTMwCisJCTs7CisJZGVjc3RhdGlvbiB8IGRlY3N0YXRpb24tMzEwMCB8IHBtYXggfCBwbWF4LSogfCBwbWluIHwgZGVjMzEwMCB8IGRlY3N0YXRuKQorCQliYXNpY19tYWNoaW5lPW1pcHMtZGVjCisJCTs7CisJZGVjc3lzdGVtMTAqIHwgZGVjMTAqKQorCQliYXNpY19tYWNoaW5lPXBkcDEwLWRlYworCQlvcz0tdG9wczEwCisJCTs7CisJZGVjc3lzdGVtMjAqIHwgZGVjMjAqKQorCQliYXNpY19tYWNoaW5lPXBkcDEwLWRlYworCQlvcz0tdG9wczIwCisJCTs7CisJZGVsdGEgfCAzMzAwIHwgbW90b3JvbGEtMzMwMCB8IG1vdG9yb2xhLWRlbHRhIFwKKwkgICAgICB8IDMzMDAtbW90b3JvbGEgfCBkZWx0YS1tb3Rvcm9sYSkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLW1vdG9yb2xhCisJCTs7CisJZGVsdGE4OCkKKwkJYmFzaWNfbWFjaGluZT1tODhrLW1vdG9yb2xhCisJCW9zPS1zeXN2MworCQk7OworCWRpY29zKQorCQliYXNpY19tYWNoaW5lPWk2ODYtcGMKKwkJb3M9LWRpY29zCisJCTs7CisJZGpncHApCisJCWJhc2ljX21hY2hpbmU9aTU4Ni1wYworCQlvcz0tbXNkb3NkamdwcAorCQk7OworCWRweDIwIHwgZHB4MjAtKikKKwkJYmFzaWNfbWFjaGluZT1yczYwMDAtYnVsbAorCQlvcz0tYm9zeAorCQk7OworCWRweDIqIHwgZHB4MiotYnVsbCkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWJ1bGwKKwkJb3M9LXN5c3YzCisJCTs7CisJZWJtb24yOWspCisJCWJhc2ljX21hY2hpbmU9YTI5ay1hbWQKKwkJb3M9LWVibW9uCisJCTs7CisJZWx4c2kpCisJCWJhc2ljX21hY2hpbmU9ZWx4c2ktZWx4c2kKKwkJb3M9LWJzZAorCQk7OworCWVuY29yZSB8IHVtYXggfCBtbWF4KQorCQliYXNpY19tYWNoaW5lPW5zMzJrLWVuY29yZQorCQk7OworCWVzMTgwMCB8IE9TRTY4ayB8IG9zZTY4ayB8IG9zZSB8IE9TRSkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWVyaWNzc29uCisJCW9zPS1vc2UKKwkJOzsKKwlmeDI4MDApCisJCWJhc2ljX21hY2hpbmU9aTg2MC1hbGxpYW50CisJCTs7CisJZ2VuaXgpCisJCWJhc2ljX21hY2hpbmU9bnMzMmstbnMKKwkJOzsKKwlnbWljcm8pCisJCWJhc2ljX21hY2hpbmU9dHJvbi1nbWljcm8KKwkJb3M9LXN5c3YKKwkJOzsKKwlnbzMyKQorCQliYXNpY19tYWNoaW5lPWkzODYtcGMKKwkJb3M9LWdvMzIKKwkJOzsKKwloMzA1MHIqIHwgaGl1eCopCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMS1oaXRhY2hpCisJCW9zPS1oaXV4d2UyCisJCTs7CisJaDgzMDBobXMpCisJCWJhc2ljX21hY2hpbmU9aDgzMDAtaGl0YWNoaQorCQlvcz0taG1zCisJCTs7CisJaDgzMDB4cmF5KQorCQliYXNpY19tYWNoaW5lPWg4MzAwLWhpdGFjaGkKKwkJb3M9LXhyYXkKKwkJOzsKKwloODUwMGhtcykKKwkJYmFzaWNfbWFjaGluZT1oODUwMC1oaXRhY2hpCisJCW9zPS1obXMKKwkJOzsKKwloYXJyaXMpCisJCWJhc2ljX21hY2hpbmU9bTg4ay1oYXJyaXMKKwkJb3M9LXN5c3YzCisJCTs7CisJaHAzMDAtKikKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWhwCisJCTs7CisJaHAzMDBic2QpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1ocAorCQlvcz0tYnNkCisJCTs7CisJaHAzMDBocHV4KQorCQliYXNpY19tYWNoaW5lPW02OGstaHAKKwkJb3M9LWhwdXgKKwkJOzsKKwlocDNrOVswLTldWzAtOV0gfCBocDlbMC05XVswLTldKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjAtaHAKKwkJOzsKKwlocDlrMlswLTldWzAtOV0gfCBocDlrMzFbMC05XSkKKwkJYmFzaWNfbWFjaGluZT1tNjgwMDAtaHAKKwkJOzsKKwlocDlrM1syLTldWzAtOV0pCisJCWJhc2ljX21hY2hpbmU9bTY4ay1ocAorCQk7OworCWhwOWs2WzAtOV1bMC05XSB8IGhwNlswLTldWzAtOV0pCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMC1ocAorCQk7OworCWhwOWs3WzAtNzldWzAtOV0gfCBocDdbMC03OV1bMC05XSkKKwkJYmFzaWNfbWFjaGluZT1ocHBhMS4xLWhwCisJCTs7CisJaHA5azc4WzAtOV0gfCBocDc4WzAtOV0pCisJCSMgRklYTUU6IHJlYWxseSBocHBhMi4wLWhwCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMS1ocAorCQk7OworCWhwOWs4WzY3XTEgfCBocDhbNjddMSB8IGhwOWs4MFsyNF0gfCBocDgwWzI0XSB8IGhwOWs4Wzc4XTkgfCBocDhbNzhdOSB8IGhwOWs4OTMgfCBocDg5MykKKwkJIyBGSVhNRTogcmVhbGx5IGhwcGEyLjAtaHAKKwkJYmFzaWNfbWFjaGluZT1ocHBhMS4xLWhwCisJCTs7CisJaHA5azhbMC05XVsxMzY3OV0gfCBocDhbMC05XVsxMzY3OV0pCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMS1ocAorCQk7OworCWhwOWs4WzAtOV1bMC05XSB8IGhwOFswLTldWzAtOV0pCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMC1ocAorCQk7OworCWhwcGEtbmV4dCkKKwkJb3M9LW5leHRzdGVwMworCQk7OworCWhwcGFvc2YpCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMS1ocAorCQlvcz0tb3NmCisJCTs7CisJaHBwcm8pCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMS1ocAorCQlvcz0tcHJvZWxmCisJCTs7CisJaTM3MC1pYm0qIHwgaWJtKikKKwkJYmFzaWNfbWFjaGluZT1pMzcwLWlibQorCQk7OworIyBJJ20gbm90IHN1cmUgd2hhdCAiU3lzdjMyIiBtZWFucy4gIFNob3VsZCB0aGlzIGJlIHN5c3YzLjI/CisJaSo4NnYzMikKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni4qLzg2LXBjLydgCisJCW9zPS1zeXN2MzIKKwkJOzsKKwlpKjg2djQqKQorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LiovODYtcGMvJ2AKKwkJb3M9LXN5c3Y0CisJCTs7CisJaSo4NnYpCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYuKi84Ni1wYy8nYAorCQlvcz0tc3lzdgorCQk7OworCWkqODZzb2wyKQorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LiovODYtcGMvJ2AKKwkJb3M9LXNvbGFyaXMyCisJCTs7CisJaTM4Nm1hY2gpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni1tYWNoCisJCW9zPS1tYWNoCisJCTs7CisJaTM4Ni12c3RhIHwgdnN0YSkKKwkJYmFzaWNfbWFjaGluZT1pMzg2LXVua25vd24KKwkJb3M9LXZzdGEKKwkJOzsKKwlpcmlzIHwgaXJpczRkKQorCQliYXNpY19tYWNoaW5lPW1pcHMtc2dpCisJCWNhc2UgJG9zIGluCisJCSAgICAtaXJpeCopCisJCQk7OworCQkgICAgKikKKwkJCW9zPS1pcml4NAorCQkJOzsKKwkJZXNhYworCQk7OworCWlzaTY4IHwgaXNpKQorCQliYXNpY19tYWNoaW5lPW02OGstaXNpCisJCW9zPS1zeXN2CisJCTs7CisJbTY4a25vbW11KQorCQliYXNpY19tYWNoaW5lPW02OGstdW5rbm93bgorCQlvcz0tbGludXgKKwkJOzsKKwltNjhrbm9tbXUtKikKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCW9zPS1saW51eAorCQk7OworCW04OGstb21yb24qKQorCQliYXNpY19tYWNoaW5lPW04OGstb21yb24KKwkJOzsKKwltYWdudW0gfCBtMzIzMCkKKwkJYmFzaWNfbWFjaGluZT1taXBzLW1pcHMKKwkJb3M9LXN5c3YKKwkJOzsKKwltZXJsaW4pCisJCWJhc2ljX21hY2hpbmU9bnMzMmstdXRlaworCQlvcz0tc3lzdgorCQk7OworICAgICAgICBtaWNyb2JsYXplKQorCQliYXNpY19tYWNoaW5lPW1pY3JvYmxhemUteGlsaW54CisJCTs7CisJbWluZ3czMikKKwkJYmFzaWNfbWFjaGluZT1pMzg2LXBjCisJCW9zPS1taW5ndzMyCisJCTs7CisJbWluZ3czMmNlKQorCQliYXNpY19tYWNoaW5lPWFybS11bmtub3duCisJCW9zPS1taW5ndzMyY2UKKwkJOzsKKwltaW5pZnJhbWUpCisJCWJhc2ljX21hY2hpbmU9bTY4MDAwLWNvbnZlcmdlbnQKKwkJOzsKKwkqbWludCB8IC1taW50WzAtOV0qIHwgKk1pTlQgfCAqTWlOVFswLTldKikKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWF0YXJpCisJCW9zPS1taW50CisJCTs7CisJbWlwczMqLSopCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgLWUgJ3MvbWlwczMvbWlwczY0LydgCisJCTs7CisJbWlwczMqKQorCQliYXNpY19tYWNoaW5lPWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkIC1lICdzL21pcHMzL21pcHM2NC8nYC11bmtub3duCisJCTs7CisJbW9uaXRvcikKKwkJYmFzaWNfbWFjaGluZT1tNjhrLXJvbTY4aworCQlvcz0tY29mZgorCQk7OworCW1vcnBob3MpCisJCWJhc2ljX21hY2hpbmU9cG93ZXJwYy11bmtub3duCisJCW9zPS1tb3JwaG9zCisJCTs7CisJbXNkb3MpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni1wYworCQlvcz0tbXNkb3MKKwkJOzsKKwltczEtKikKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAtZSAncy9tczEtL210LS8nYAorCQk7OworCW12cykKKwkJYmFzaWNfbWFjaGluZT1pMzcwLWlibQorCQlvcz0tbXZzCisJCTs7CisJbmNyMzAwMCkKKwkJYmFzaWNfbWFjaGluZT1pNDg2LW5jcgorCQlvcz0tc3lzdjQKKwkJOzsKKwluZXRic2QzODYpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni11bmtub3duCisJCW9zPS1uZXRic2QKKwkJOzsKKwluZXR3aW5kZXIpCisJCWJhc2ljX21hY2hpbmU9YXJtdjRsLXJlYmVsCisJCW9zPS1saW51eAorCQk7OworCW5ld3MgfCBuZXdzNzAwIHwgbmV3czgwMCB8IG5ld3M5MDApCisJCWJhc2ljX21hY2hpbmU9bTY4ay1zb255CisJCW9zPS1uZXdzb3MKKwkJOzsKKwluZXdzMTAwMCkKKwkJYmFzaWNfbWFjaGluZT1tNjgwMzAtc29ueQorCQlvcz0tbmV3c29zCisJCTs7CisJbmV3cy0zNjAwIHwgcmlzYy1uZXdzKQorCQliYXNpY19tYWNoaW5lPW1pcHMtc29ueQorCQlvcz0tbmV3c29zCisJCTs7CisJbmVjdjcwKQorCQliYXNpY19tYWNoaW5lPXY3MC1uZWMKKwkJb3M9LXN5c3YKKwkJOzsKKwluZXh0IHwgbSotbmV4dCApCisJCWJhc2ljX21hY2hpbmU9bTY4ay1uZXh0CisJCWNhc2UgJG9zIGluCisJCSAgICAtbmV4dHN0ZXAqICkKKwkJCTs7CisJCSAgICAtbnMyKikKKwkJICAgICAgb3M9LW5leHRzdGVwMgorCQkJOzsKKwkJICAgICopCisJCSAgICAgIG9zPS1uZXh0c3RlcDMKKwkJCTs7CisJCWVzYWMKKwkJOzsKKwluaDMwMDApCisJCWJhc2ljX21hY2hpbmU9bTY4ay1oYXJyaXMKKwkJb3M9LWN4dXgKKwkJOzsKKwluaFs0NV0wMDApCisJCWJhc2ljX21hY2hpbmU9bTg4ay1oYXJyaXMKKwkJb3M9LWN4dXgKKwkJOzsKKwluaW5keTk2MCkKKwkJYmFzaWNfbWFjaGluZT1pOTYwLWludGVsCisJCW9zPS1uaW5keQorCQk7OworCW1vbjk2MCkKKwkJYmFzaWNfbWFjaGluZT1pOTYwLWludGVsCisJCW9zPS1tb245NjAKKwkJOzsKKwlub25zdG9wdXgpCisJCWJhc2ljX21hY2hpbmU9bWlwcy1jb21wYXEKKwkJb3M9LW5vbnN0b3B1eAorCQk7OworCW5wMSkKKwkJYmFzaWNfbWFjaGluZT1ucDEtZ291bGQKKwkJOzsKKwluc3ItdGFuZGVtKQorCQliYXNpY19tYWNoaW5lPW5zci10YW5kZW0KKwkJOzsKKwlvcDUwbi0qIHwgb3A2MGMtKikKKwkJYmFzaWNfbWFjaGluZT1ocHBhMS4xLW9raQorCQlvcz0tcHJvZWxmCisJCTs7CisJb3BlbnJpc2MgfCBvcGVucmlzYy0qKQorCQliYXNpY19tYWNoaW5lPW9yMzItdW5rbm93bgorCQk7OworCW9zNDAwKQorCQliYXNpY19tYWNoaW5lPXBvd2VycGMtaWJtCisJCW9zPS1vczQwMAorCQk7OworCU9TRTY4MDAwIHwgb3NlNjgwMDApCisJCWJhc2ljX21hY2hpbmU9bTY4MDAwLWVyaWNzc29uCisJCW9zPS1vc2UKKwkJOzsKKwlvczY4aykKKwkJYmFzaWNfbWFjaGluZT1tNjhrLW5vbmUKKwkJb3M9LW9zNjhrCisJCTs7CisJcGEtaGl0YWNoaSkKKwkJYmFzaWNfbWFjaGluZT1ocHBhMS4xLWhpdGFjaGkKKwkJb3M9LWhpdXh3ZTIKKwkJOzsKKwlwYXJhZ29uKQorCQliYXNpY19tYWNoaW5lPWk4NjAtaW50ZWwKKwkJb3M9LW9zZgorCQk7OworCXBhcmlzYykKKwkJYmFzaWNfbWFjaGluZT1ocHBhLXVua25vd24KKwkJb3M9LWxpbnV4CisJCTs7CisJcGFyaXNjLSopCisJCWJhc2ljX21hY2hpbmU9aHBwYS1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCQlvcz0tbGludXgKKwkJOzsKKwlwYmQpCisJCWJhc2ljX21hY2hpbmU9c3BhcmMtdHRpCisJCTs7CisJcGJiKQorCQliYXNpY19tYWNoaW5lPW02OGstdHRpCisJCTs7CisJcGM1MzIgfCBwYzUzMi0qKQorCQliYXNpY19tYWNoaW5lPW5zMzJrLXBjNTMyCisJCTs7CisJcGM5OCkKKwkJYmFzaWNfbWFjaGluZT1pMzg2LXBjCisJCTs7CisJcGM5OC0qKQorCQliYXNpY19tYWNoaW5lPWkzODYtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJOzsKKwlwZW50aXVtIHwgcDUgfCBrNSB8IGs2IHwgbmV4Z2VuIHwgdmlhYzMpCisJCWJhc2ljX21hY2hpbmU9aTU4Ni1wYworCQk7OworCXBlbnRpdW1wcm8gfCBwNiB8IDZ4ODYgfCBhdGhsb24gfCBhdGhsb25fKikKKwkJYmFzaWNfbWFjaGluZT1pNjg2LXBjCisJCTs7CisJcGVudGl1bWlpIHwgcGVudGl1bTIgfCBwZW50aXVtaWlpIHwgcGVudGl1bTMpCisJCWJhc2ljX21hY2hpbmU9aTY4Ni1wYworCQk7OworCXBlbnRpdW00KQorCQliYXNpY19tYWNoaW5lPWk3ODYtcGMKKwkJOzsKKwlwZW50aXVtLSogfCBwNS0qIHwgazUtKiB8IGs2LSogfCBuZXhnZW4tKiB8IHZpYWMzLSopCisJCWJhc2ljX21hY2hpbmU9aTU4Ni1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCQk7OworCXBlbnRpdW1wcm8tKiB8IHA2LSogfCA2eDg2LSogfCBhdGhsb24tKikKKwkJYmFzaWNfbWFjaGluZT1pNjg2LWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCTs7CisJcGVudGl1bWlpLSogfCBwZW50aXVtMi0qIHwgcGVudGl1bWlpaS0qIHwgcGVudGl1bTMtKikKKwkJYmFzaWNfbWFjaGluZT1pNjg2LWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCTs7CisJcGVudGl1bTQtKikKKwkJYmFzaWNfbWFjaGluZT1pNzg2LWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCTs7CisJcG4pCisJCWJhc2ljX21hY2hpbmU9cG4tZ291bGQKKwkJOzsKKwlwb3dlcikJYmFzaWNfbWFjaGluZT1wb3dlci1pYm0KKwkJOzsKKwlwcGMpCWJhc2ljX21hY2hpbmU9cG93ZXJwYy11bmtub3duCisJCTs7CisJcHBjLSopCWJhc2ljX21hY2hpbmU9cG93ZXJwYy1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCQk7OworCXBwY2xlIHwgcG93ZXJwY2xpdHRsZSB8IHBwYy1sZSB8IHBvd2VycGMtbGl0dGxlKQorCQliYXNpY19tYWNoaW5lPXBvd2VycGNsZS11bmtub3duCisJCTs7CisJcHBjbGUtKiB8IHBvd2VycGNsaXR0bGUtKikKKwkJYmFzaWNfbWFjaGluZT1wb3dlcnBjbGUtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJOzsKKwlwcGM2NCkJYmFzaWNfbWFjaGluZT1wb3dlcnBjNjQtdW5rbm93bgorCQk7OworCXBwYzY0LSopIGJhc2ljX21hY2hpbmU9cG93ZXJwYzY0LWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCTs7CisJcHBjNjRsZSB8IHBvd2VycGM2NGxpdHRsZSB8IHBwYzY0LWxlIHwgcG93ZXJwYzY0LWxpdHRsZSkKKwkJYmFzaWNfbWFjaGluZT1wb3dlcnBjNjRsZS11bmtub3duCisJCTs7CisJcHBjNjRsZS0qIHwgcG93ZXJwYzY0bGl0dGxlLSopCisJCWJhc2ljX21hY2hpbmU9cG93ZXJwYzY0bGUtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJOzsKKwlwczIpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni1pYm0KKwkJOzsKKwlwdzMyKQorCQliYXNpY19tYWNoaW5lPWk1ODYtdW5rbm93bgorCQlvcz0tcHczMgorCQk7OworCXJkb3MpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni1wYworCQlvcz0tcmRvcworCQk7OworCXJvbTY4aykKKwkJYmFzaWNfbWFjaGluZT1tNjhrLXJvbTY4aworCQlvcz0tY29mZgorCQk7OworCXJtWzQ2XTAwKQorCQliYXNpY19tYWNoaW5lPW1pcHMtc2llbWVucworCQk7OworCXJ0cGMgfCBydHBjLSopCisJCWJhc2ljX21hY2hpbmU9cm9tcC1pYm0KKwkJOzsKKwlzMzkwIHwgczM5MC0qKQorCQliYXNpY19tYWNoaW5lPXMzOTAtaWJtCisJCTs7CisJczM5MHggfCBzMzkweC0qKQorCQliYXNpY19tYWNoaW5lPXMzOTB4LWlibQorCQk7OworCXNhMjkyMDApCisJCWJhc2ljX21hY2hpbmU9YTI5ay1hbWQKKwkJb3M9LXVkaQorCQk7OworCXNiMSkKKwkJYmFzaWNfbWFjaGluZT1taXBzaXNhNjRzYjEtdW5rbm93bgorCQk7OworCXNiMWVsKQorCQliYXNpY19tYWNoaW5lPW1pcHNpc2E2NHNiMWVsLXVua25vd24KKwkJOzsKKwlzZGUpCisJCWJhc2ljX21hY2hpbmU9bWlwc2lzYTMyLXNkZQorCQlvcz0tZWxmCisJCTs7CisJc2VpKQorCQliYXNpY19tYWNoaW5lPW1pcHMtc2VpCisJCW9zPS1zZWl1eAorCQk7OworCXNlcXVlbnQpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni1zZXF1ZW50CisJCTs7CisJc2gpCisJCWJhc2ljX21hY2hpbmU9c2gtaGl0YWNoaQorCQlvcz0taG1zCisJCTs7CisJc2g1ZWwpCisJCWJhc2ljX21hY2hpbmU9c2g1bGUtdW5rbm93bgorCQk7OworCXNoNjQpCisJCWJhc2ljX21hY2hpbmU9c2g2NC11bmtub3duCisJCTs7CisJc3BhcmNsaXRlLXdycyB8IHNpbXNvLXdycykKKwkJYmFzaWNfbWFjaGluZT1zcGFyY2xpdGUtd3JzCisJCW9zPS12eHdvcmtzCisJCTs7CisJc3BzNykKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWJ1bGwKKwkJb3M9LXN5c3YyCisJCTs7CisJc3B1cikKKwkJYmFzaWNfbWFjaGluZT1zcHVyLXVua25vd24KKwkJOzsKKwlzdDIwMDApCisJCWJhc2ljX21hY2hpbmU9bTY4ay10YW5kZW0KKwkJOzsKKwlzdHJhdHVzKQorCQliYXNpY19tYWNoaW5lPWk4NjAtc3RyYXR1cworCQlvcz0tc3lzdjQKKwkJOzsKKwlzdW4yKQorCQliYXNpY19tYWNoaW5lPW02ODAwMC1zdW4KKwkJOzsKKwlzdW4yb3MzKQorCQliYXNpY19tYWNoaW5lPW02ODAwMC1zdW4KKwkJb3M9LXN1bm9zMworCQk7OworCXN1bjJvczQpCisJCWJhc2ljX21hY2hpbmU9bTY4MDAwLXN1bgorCQlvcz0tc3Vub3M0CisJCTs7CisJc3VuM29zMykKKwkJYmFzaWNfbWFjaGluZT1tNjhrLXN1bgorCQlvcz0tc3Vub3MzCisJCTs7CisJc3VuM29zNCkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLXN1bgorCQlvcz0tc3Vub3M0CisJCTs7CisJc3VuNG9zMykKKwkJYmFzaWNfbWFjaGluZT1zcGFyYy1zdW4KKwkJb3M9LXN1bm9zMworCQk7OworCXN1bjRvczQpCisJCWJhc2ljX21hY2hpbmU9c3BhcmMtc3VuCisJCW9zPS1zdW5vczQKKwkJOzsKKwlzdW40c29sMikKKwkJYmFzaWNfbWFjaGluZT1zcGFyYy1zdW4KKwkJb3M9LXNvbGFyaXMyCisJCTs7CisJc3VuMyB8IHN1bjMtKikKKwkJYmFzaWNfbWFjaGluZT1tNjhrLXN1bgorCQk7OworCXN1bjQpCisJCWJhc2ljX21hY2hpbmU9c3BhcmMtc3VuCisJCTs7CisJc3VuMzg2IHwgc3VuMzg2aSB8IHJvYWRydW5uZXIpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni1zdW4KKwkJOzsKKwlzdjEpCisJCWJhc2ljX21hY2hpbmU9c3YxLWNyYXkKKwkJb3M9LXVuaWNvcworCQk7OworCXN5bW1ldHJ5KQorCQliYXNpY19tYWNoaW5lPWkzODYtc2VxdWVudAorCQlvcz0tZHluaXgKKwkJOzsKKwl0M2UpCisJCWJhc2ljX21hY2hpbmU9YWxwaGFldjUtY3JheQorCQlvcz0tdW5pY29zCisJCTs7CisJdDkwKQorCQliYXNpY19tYWNoaW5lPXQ5MC1jcmF5CisJCW9zPS11bmljb3MKKwkJOzsKKwl0aWM1NHggfCBjNTR4KikKKwkJYmFzaWNfbWFjaGluZT10aWM1NHgtdW5rbm93bgorCQlvcz0tY29mZgorCQk7OworCXRpYzU1eCB8IGM1NXgqKQorCQliYXNpY19tYWNoaW5lPXRpYzU1eC11bmtub3duCisJCW9zPS1jb2ZmCisJCTs7CisJdGljNnggfCBjNngqKQorCQliYXNpY19tYWNoaW5lPXRpYzZ4LXVua25vd24KKwkJb3M9LWNvZmYKKwkJOzsKKyAgICAgICAgIyBUaGlzIG11c3QgYmUgbWF0Y2hlZCBiZWZvcmUgdGlsZSouCisgICAgICAgIHRpbGVneCopCisJCWJhc2ljX21hY2hpbmU9dGlsZWd4LXVua25vd24KKwkJb3M9LWxpbnV4LWdudQorCQk7OworCXRpbGUqKQorCQliYXNpY19tYWNoaW5lPXRpbGUtdW5rbm93bgorCQlvcz0tbGludXgtZ251CisJCTs7CisJdHgzOSkKKwkJYmFzaWNfbWFjaGluZT1taXBzdHgzOS11bmtub3duCisJCTs7CisJdHgzOWVsKQorCQliYXNpY19tYWNoaW5lPW1pcHN0eDM5ZWwtdW5rbm93bgorCQk7OworCXRvYWQxKQorCQliYXNpY19tYWNoaW5lPXBkcDEwLXhrbAorCQlvcz0tdG9wczIwCisJCTs7CisJdG93ZXIgfCB0b3dlci0zMikKKwkJYmFzaWNfbWFjaGluZT1tNjhrLW5jcgorCQk7OworCXRwZikKKwkJYmFzaWNfbWFjaGluZT1zMzkweC1pYm0KKwkJb3M9LXRwZgorCQk7OworCXVkaTI5aykKKwkJYmFzaWNfbWFjaGluZT1hMjlrLWFtZAorCQlvcz0tdWRpCisJCTs7CisJdWx0cmEzKQorCQliYXNpY19tYWNoaW5lPWEyOWstbnl1CisJCW9zPS1zeW0xCisJCTs7CisJdjgxMCB8IG5lY3Y4MTApCisJCWJhc2ljX21hY2hpbmU9djgxMC1uZWMKKwkJb3M9LW5vbmUKKwkJOzsKKwl2YXh2KQorCQliYXNpY19tYWNoaW5lPXZheC1kZWMKKwkJb3M9LXN5c3YKKwkJOzsKKwl2bXMpCisJCWJhc2ljX21hY2hpbmU9dmF4LWRlYworCQlvcz0tdm1zCisJCTs7CisJdnBwKnx2eHx2eC0qKQorCQliYXNpY19tYWNoaW5lPWYzMDEtZnVqaXRzdQorCQk7OworCXZ4d29ya3M5NjApCisJCWJhc2ljX21hY2hpbmU9aTk2MC13cnMKKwkJb3M9LXZ4d29ya3MKKwkJOzsKKwl2eHdvcmtzNjgpCisJCWJhc2ljX21hY2hpbmU9bTY4ay13cnMKKwkJb3M9LXZ4d29ya3MKKwkJOzsKKwl2eHdvcmtzMjlrKQorCQliYXNpY19tYWNoaW5lPWEyOWstd3JzCisJCW9zPS12eHdvcmtzCisJCTs7CisJdzY1KikKKwkJYmFzaWNfbWFjaGluZT13NjUtd2RjCisJCW9zPS1ub25lCisJCTs7CisJdzg5ay0qKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjEtd2luYm9uZAorCQlvcz0tcHJvZWxmCisJCTs7CisJeGJveCkKKwkJYmFzaWNfbWFjaGluZT1pNjg2LXBjCisJCW9zPS1taW5ndzMyCisJCTs7CisJeHBzIHwgeHBzMTAwKQorCQliYXNpY19tYWNoaW5lPXhwczEwMC1ob25leXdlbGwKKwkJOzsKKwl5bXApCisJCWJhc2ljX21hY2hpbmU9eW1wLWNyYXkKKwkJb3M9LXVuaWNvcworCQk7OworCXo4ay0qLWNvZmYpCisJCWJhc2ljX21hY2hpbmU9ejhrLXVua25vd24KKwkJb3M9LXNpbQorCQk7OworCXo4MC0qLWNvZmYpCisJCWJhc2ljX21hY2hpbmU9ejgwLXVua25vd24KKwkJb3M9LXNpbQorCQk7OworCW5vbmUpCisJCWJhc2ljX21hY2hpbmU9bm9uZS1ub25lCisJCW9zPS1ub25lCisJCTs7CisKKyMgSGVyZSB3ZSBoYW5kbGUgdGhlIGRlZmF1bHQgbWFudWZhY3R1cmVyIG9mIGNlcnRhaW4gQ1BVIHR5cGVzLiAgSXQgaXMgaW4KKyMgc29tZSBjYXNlcyB0aGUgb25seSBtYW51ZmFjdHVyZXIsIGluIG90aGVycywgaXQgaXMgdGhlIG1vc3QgcG9wdWxhci4KKwl3ODlrKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjEtd2luYm9uZAorCQk7OworCW9wNTBuKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjEtb2tpCisJCTs7CisJb3A2MGMpCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMS1va2kKKwkJOzsKKwlyb21wKQorCQliYXNpY19tYWNoaW5lPXJvbXAtaWJtCisJCTs7CisJbW1peCkKKwkJYmFzaWNfbWFjaGluZT1tbWl4LWtudXRoCisJCTs7CisJcnM2MDAwKQorCQliYXNpY19tYWNoaW5lPXJzNjAwMC1pYm0KKwkJOzsKKwl2YXgpCisJCWJhc2ljX21hY2hpbmU9dmF4LWRlYworCQk7OworCXBkcDEwKQorCQkjIHRoZXJlIGFyZSBtYW55IGNsb25lcywgc28gREVDIGlzIG5vdCBhIHNhZmUgYmV0CisJCWJhc2ljX21hY2hpbmU9cGRwMTAtdW5rbm93bgorCQk7OworCXBkcDExKQorCQliYXNpY19tYWNoaW5lPXBkcDExLWRlYworCQk7OworCXdlMzJrKQorCQliYXNpY19tYWNoaW5lPXdlMzJrLWF0dAorCQk7OworCXNoWzEyMzRdIHwgc2hbMjRdYSB8IHNoWzI0XWFlYiB8IHNoWzM0XWViIHwgc2hbMTIzNF1sZSB8IHNoWzIzXWVsZSkKKwkJYmFzaWNfbWFjaGluZT1zaC11bmtub3duCisJCTs7CisJc3BhcmMgfCBzcGFyY3Y4IHwgc3BhcmN2OSB8IHNwYXJjdjliIHwgc3BhcmN2OXYpCisJCWJhc2ljX21hY2hpbmU9c3BhcmMtc3VuCisJCTs7CisJY3lkcmEpCisJCWJhc2ljX21hY2hpbmU9Y3lkcmEtY3lkcm9tZQorCQk7OworCW9yaW9uKQorCQliYXNpY19tYWNoaW5lPW9yaW9uLWhpZ2hsZXZlbAorCQk7OworCW9yaW9uMTA1KQorCQliYXNpY19tYWNoaW5lPWNsaXBwZXItaGlnaGxldmVsCisJCTs7CisJbWFjIHwgbXB3IHwgbWFjLW1wdykKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWFwcGxlCisJCTs7CisJcG1hYyB8IHBtYWMtbXB3KQorCQliYXNpY19tYWNoaW5lPXBvd2VycGMtYXBwbGUKKwkJOzsKKwkqLXVua25vd24pCisJCSMgTWFrZSBzdXJlIHRvIG1hdGNoIGFuIGFscmVhZHktY2Fub25pY2FsaXplZCBtYWNoaW5lIG5hbWUuCisJCTs7CisJKikKKwkJZWNobyBJbnZhbGlkIGNvbmZpZ3VyYXRpb24gXGAkMVwnOiBtYWNoaW5lIFxgJGJhc2ljX21hY2hpbmVcJyBub3QgcmVjb2duaXplZCAxPiYyCisJCWV4aXQgMQorCQk7OworZXNhYworCisjIEhlcmUgd2UgY2Fub25pY2FsaXplIGNlcnRhaW4gYWxpYXNlcyBmb3IgbWFudWZhY3R1cmVycy4KK2Nhc2UgJGJhc2ljX21hY2hpbmUgaW4KKwkqLWRpZ2l0YWwqKQorCQliYXNpY19tYWNoaW5lPWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL2RpZ2l0YWwuKi9kZWMvJ2AKKwkJOzsKKwkqLWNvbW1vZG9yZSopCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvY29tbW9kb3JlLiovY2JtLydgCisJCTs7CisJKikKKwkJOzsKK2VzYWMKKworIyBEZWNvZGUgbWFudWZhY3R1cmVyLXNwZWNpZmljIGFsaWFzZXMgZm9yIGNlcnRhaW4gb3BlcmF0aW5nIHN5c3RlbXMuCisKK2lmIFsgeCIkb3MiICE9IHgiIiBdCit0aGVuCitjYXNlICRvcyBpbgorICAgICAgICAjIEZpcnN0IG1hdGNoIHNvbWUgc3lzdGVtIHR5cGUgYWxpYXNlcworICAgICAgICAjIHRoYXQgbWlnaHQgZ2V0IGNvbmZ1c2VkIHdpdGggdmFsaWQgc3lzdGVtIHR5cGVzLgorCSMgLXNvbGFyaXMqIGlzIGEgYmFzaWMgc3lzdGVtIHR5cGUsIHdpdGggdGhpcyBvbmUgZXhjZXB0aW9uLgorICAgICAgICAtYXVyb3JhdXgpCisJICAgICAgICBvcz0tYXVyb3JhdXgKKwkJOzsKKwktc29sYXJpczEgfCAtc29sYXJpczEuKikKKwkJb3M9YGVjaG8gJG9zIHwgc2VkIC1lICdzfHNvbGFyaXMxfHN1bm9zNHwnYAorCQk7OworCS1zb2xhcmlzKQorCQlvcz0tc29sYXJpczIKKwkJOzsKKwktc3ZyNCopCisJCW9zPS1zeXN2NAorCQk7OworCS11bml4d2FyZSopCisJCW9zPS1zeXN2NC4ydXcKKwkJOzsKKwktZ251L2xpbnV4KikKKwkJb3M9YGVjaG8gJG9zIHwgc2VkIC1lICdzfGdudS9saW51eHxsaW51eC1nbnV8J2AKKwkJOzsKKwkjIEZpcnN0IGFjY2VwdCB0aGUgYmFzaWMgc3lzdGVtIHR5cGVzLgorCSMgVGhlIHBvcnRhYmxlIHN5c3RlbXMgY29tZXMgZmlyc3QuCisJIyBFYWNoIGFsdGVybmF0aXZlIE1VU1QgRU5EIElOIEEgKiwgdG8gbWF0Y2ggYSB2ZXJzaW9uIG51bWJlci4KKwkjIC1zeXN2KiBpcyBub3QgaGVyZSBiZWNhdXNlIGl0IGNvbWVzIGxhdGVyLCBhZnRlciBzeXN2cjQuCisJLWdudSogfCAtYnNkKiB8IC1tYWNoKiB8IC1taW5peCogfCAtZ2VuaXgqIHwgLXVsdHJpeCogfCAtaXJpeCogXAorCSAgICAgIHwgLSp2bXMqIHwgLXNjbyogfCAtZXNpeCogfCAtaXNjKiB8IC1haXgqIHwgLWNuayogfCAtc3Vub3MgfCAtc3Vub3NbMzRdKlwKKwkgICAgICB8IC1ocHV4KiB8IC11bm9zKiB8IC1vc2YqIHwgLWx1bmEqIHwgLWRndXgqIHwgLWF1cm9yYXV4KiB8IC1zb2xhcmlzKiBcCisJICAgICAgfCAtc3ltKiB8IC1rb3BlbnNvbGFyaXMqIFwKKwkgICAgICB8IC1hbWlnYW9zKiB8IC1hbWlnYWRvcyogfCAtbXNkb3MqIHwgLW5ld3NvcyogfCAtdW5pY29zKiB8IC1hb2YqIFwKKwkgICAgICB8IC1hb3MqIHwgLWFyb3MqIFwKKwkgICAgICB8IC1uaW5keSogfCAtdnhzaW0qIHwgLXZ4d29ya3MqIHwgLWVibW9uKiB8IC1obXMqIHwgLW12cyogXAorCSAgICAgIHwgLWNsaXgqIHwgLXJpc2NvcyogfCAtdW5pcGx1cyogfCAtaXJpcyogfCAtcnR1KiB8IC14ZW5peCogXAorCSAgICAgIHwgLWhpdXgqIHwgLTM4NmJzZCogfCAta25ldGJzZCogfCAtbWlyYnNkKiB8IC1uZXRic2QqIFwKKwkgICAgICB8IC1vcGVuYnNkKiB8IC1zb2xpZGJzZCogXAorCSAgICAgIHwgLWVra29ic2QqIHwgLWtmcmVlYnNkKiB8IC1mcmVlYnNkKiB8IC1yaXNjaXgqIHwgLWx5bnhvcyogXAorCSAgICAgIHwgLWJvc3gqIHwgLW5leHRzdGVwKiB8IC1jeHV4KiB8IC1hb3V0KiB8IC1lbGYqIHwgLW9hYmkqIFwKKwkgICAgICB8IC1wdHgqIHwgLWNvZmYqIHwgLWVjb2ZmKiB8IC13aW5udCogfCAtZG9tYWluKiB8IC12c3RhKiBcCisJICAgICAgfCAtdWRpKiB8IC1lYWJpKiB8IC1saXRlcyogfCAtaWVlZSogfCAtZ28zMiogfCAtYXV4KiBcCisJICAgICAgfCAtY2hvcnVzb3MqIHwgLWNob3J1c3JkYiogfCAtY2VnY2MqIFwKKwkgICAgICB8IC1jeWd3aW4qIHwgLXBlKiB8IC1wc29zKiB8IC1tb3NzKiB8IC1wcm9lbGYqIHwgLXJ0ZW1zKiBcCisJICAgICAgfCAtbWluZ3czMiogfCAtbGludXgtZ251KiB8IC1saW51eC1uZXdsaWIqIHwgLWxpbnV4LXVjbGliYyogXAorCSAgICAgIHwgLXV4cHYqIHwgLWJlb3MqIHwgLW1wZWl4KiB8IC11ZGsqIFwKKwkgICAgICB8IC1pbnRlcml4KiB8IC11d2luKiB8IC1ta3MqIHwgLXJoYXBzb2R5KiB8IC1kYXJ3aW4qIHwgLW9wZW5lZCogXAorCSAgICAgIHwgLW9wZW5zdGVwKiB8IC1vc2tpdCogfCAtY29uaXgqIHwgLXB3MzIqIHwgLW5vbnN0b3B1eCogXAorCSAgICAgIHwgLXN0b3JtLWNoYW9zKiB8IC10b3BzMTAqIHwgLXRlbmV4KiB8IC10b3BzMjAqIHwgLWl0cyogXAorCSAgICAgIHwgLW9zMiogfCAtdm9zKiB8IC1wYWxtb3MqIHwgLXVjbGludXgqIHwgLW51Y2xldXMqIFwKKwkgICAgICB8IC1tb3JwaG9zKiB8IC1zdXBlcnV4KiB8IC1ydG1rKiB8IC1ydG1rLW5vdmEqIHwgLXdpbmRpc3MqIFwKKwkgICAgICB8IC1wb3dlcm1heCogfCAtZG5peCogfCAtbng2IHwgLW54NyB8IC1zZWkqIHwgLWRyYWdvbmZseSogXAorCSAgICAgIHwgLXNreW9zKiB8IC1oYWlrdSogfCAtcmRvcyogfCAtdG9wcGVycyogfCAtZHJvcHMqIHwgLWVzKikKKwkjIFJlbWVtYmVyLCBlYWNoIGFsdGVybmF0aXZlIE1VU1QgRU5EIElOICosIHRvIG1hdGNoIGEgdmVyc2lvbiBudW1iZXIuCisJCTs7CisJLXFueCopCisJCWNhc2UgJGJhc2ljX21hY2hpbmUgaW4KKwkJICAgIHg4Ni0qIHwgaSo4Ni0qKQorCQkJOzsKKwkJICAgICopCisJCQlvcz0tbnRvJG9zCisJCQk7OworCQllc2FjCisJCTs7CisJLW50by1xbngqKQorCQk7OworCS1udG8qKQorCQlvcz1gZWNobyAkb3MgfCBzZWQgLWUgJ3N8bnRvfG50by1xbnh8J2AKKwkJOzsKKwktc2ltIHwgLWVzMTgwMCogfCAtaG1zKiB8IC14cmF5IHwgLW9zNjhrKiB8IC1ub25lKiB8IC12ODhyKiBcCisJICAgICAgfCAtd2luZG93cyogfCAtb3N4IHwgLWFidWcgfCAtbmV0d2FyZSogfCAtb3M5KiB8IC1iZW9zKiB8IC1oYWlrdSogXAorCSAgICAgIHwgLW1hY29zKiB8IC1tcHcqIHwgLW1hZ2ljKiB8IC1tbWl4d2FyZSogfCAtbW9uOTYwKiB8IC1sbmV3cyopCisJCTs7CisJLW1hYyopCisJCW9zPWBlY2hvICRvcyB8IHNlZCAtZSAnc3xtYWN8bWFjb3N8J2AKKwkJOzsKKwktbGludXgtZGlldGxpYmMpCisJCW9zPS1saW51eC1kaWV0bGliYworCQk7OworCS1saW51eCopCisJCW9zPWBlY2hvICRvcyB8IHNlZCAtZSAnc3xsaW51eHxsaW51eC1nbnV8J2AKKwkJOzsKKwktc3Vub3M1KikKKwkJb3M9YGVjaG8gJG9zIHwgc2VkIC1lICdzfHN1bm9zNXxzb2xhcmlzMnwnYAorCQk7OworCS1zdW5vczYqKQorCQlvcz1gZWNobyAkb3MgfCBzZWQgLWUgJ3N8c3Vub3M2fHNvbGFyaXMzfCdgCisJCTs7CisJLW9wZW5lZCopCisJCW9zPS1vcGVuZWRpdGlvbgorCQk7OworICAgICAgICAtb3M0MDAqKQorCQlvcz0tb3M0MDAKKwkJOzsKKwktd2luY2UqKQorCQlvcz0td2luY2UKKwkJOzsKKwktb3Nmcm9zZSopCisJCW9zPS1vc2Zyb3NlCisJCTs7CisJLW9zZiopCisJCW9zPS1vc2YKKwkJOzsKKwktdXRlayopCisJCW9zPS1ic2QKKwkJOzsKKwktZHluaXgqKQorCQlvcz0tYnNkCisJCTs7CisJLWFjaXMqKQorCQlvcz0tYW9zCisJCTs7CisJLWF0aGVvcyopCisJCW9zPS1hdGhlb3MKKwkJOzsKKwktc3lsbGFibGUqKQorCQlvcz0tc3lsbGFibGUKKwkJOzsKKwktMzg2YnNkKQorCQlvcz0tYnNkCisJCTs7CisJLWN0aXgqIHwgLXV0cyopCisJCW9zPS1zeXN2CisJCTs7CisJLW5vdmEqKQorCQlvcz0tcnRtay1ub3ZhCisJCTs7CisJLW5zMiApCisJCW9zPS1uZXh0c3RlcDIKKwkJOzsKKwktbnNrKikKKwkJb3M9LW5zaworCQk7OworCSMgUHJlc2VydmUgdGhlIHZlcnNpb24gbnVtYmVyIG9mIHNpbml4NS4KKwktc2luaXg1LiopCisJCW9zPWBlY2hvICRvcyB8IHNlZCAtZSAnc3xzaW5peHxzeXN2fCdgCisJCTs7CisJLXNpbml4KikKKwkJb3M9LXN5c3Y0CisJCTs7CisgICAgICAgIC10cGYqKQorCQlvcz0tdHBmCisJCTs7CisJLXRyaXRvbiopCisJCW9zPS1zeXN2MworCQk7OworCS1vc3MqKQorCQlvcz0tc3lzdjMKKwkJOzsKKwktc3ZyNCkKKwkJb3M9LXN5c3Y0CisJCTs7CisJLXN2cjMpCisJCW9zPS1zeXN2MworCQk7OworCS1zeXN2cjQpCisJCW9zPS1zeXN2NAorCQk7OworCSMgVGhpcyBtdXN0IGNvbWUgYWZ0ZXIgLXN5c3ZyNC4KKwktc3lzdiopCisJCTs7CisJLW9zZSopCisJCW9zPS1vc2UKKwkJOzsKKwktZXMxODAwKikKKwkJb3M9LW9zZQorCQk7OworCS14ZW5peCkKKwkJb3M9LXhlbml4CisJCTs7CisJLSptaW50IHwgLW1pbnRbMC05XSogfCAtKk1pTlQgfCAtTWlOVFswLTldKikKKwkJb3M9LW1pbnQKKwkJOzsKKwktYXJvcyopCisJCW9zPS1hcm9zCisJCTs7CisJLWthb3MqKQorCQlvcz0ta2FvcworCQk7OworCS16dm1vZSkKKwkJb3M9LXp2bW9lCisJCTs7CisJLWRpY29zKikKKwkJb3M9LWRpY29zCisJCTs7CisgICAgICAgIC1uYWNsKikKKwkgICAgICAgIDs7CisJLW5vbmUpCisJCTs7CisJKikKKwkJIyBHZXQgcmlkIG9mIHRoZSBgLScgYXQgdGhlIGJlZ2lubmluZyBvZiAkb3MuCisJCW9zPWBlY2hvICRvcyB8IHNlZCAncy9bXi1dKi0vLydgCisJCWVjaG8gSW52YWxpZCBjb25maWd1cmF0aW9uIFxgJDFcJzogc3lzdGVtIFxgJG9zXCcgbm90IHJlY29nbml6ZWQgMT4mMgorCQlleGl0IDEKKwkJOzsKK2VzYWMKK2Vsc2UKKworIyBIZXJlIHdlIGhhbmRsZSB0aGUgZGVmYXVsdCBvcGVyYXRpbmcgc3lzdGVtcyB0aGF0IGNvbWUgd2l0aCB2YXJpb3VzIG1hY2hpbmVzLgorIyBUaGUgdmFsdWUgc2hvdWxkIGJlIHdoYXQgdGhlIHZlbmRvciBjdXJyZW50bHkgc2hpcHMgb3V0IHRoZSBkb29yIHdpdGggdGhlaXIKKyMgbWFjaGluZSBvciBwdXQgYW5vdGhlciB3YXksIHRoZSBtb3N0IHBvcHVsYXIgb3MgcHJvdmlkZWQgd2l0aCB0aGUgbWFjaGluZS4KKworIyBOb3RlIHRoYXQgaWYgeW91J3JlIGdvaW5nIHRvIHRyeSB0byBtYXRjaCAiLU1BTlVGQUNUVVJFUiIgaGVyZSAoc2F5LAorIyAiLXN1biIpLCB0aGVuIHlvdSBoYXZlIHRvIHRlbGwgdGhlIGNhc2Ugc3RhdGVtZW50IHVwIHRvd2FyZHMgdGhlIHRvcAorIyB0aGF0IE1BTlVGQUNUVVJFUiBpc24ndCBhbiBvcGVyYXRpbmcgc3lzdGVtLiAgT3RoZXJ3aXNlLCBjb2RlIGFib3ZlCisjIHdpbGwgc2lnbmFsIGFuIGVycm9yIHNheWluZyB0aGF0IE1BTlVGQUNUVVJFUiBpc24ndCBhbiBvcGVyYXRpbmcKKyMgc3lzdGVtLCBhbmQgd2UnbGwgbmV2ZXIgZ2V0IHRvIHRoaXMgcG9pbnQuCisKK2Nhc2UgJGJhc2ljX21hY2hpbmUgaW4KKyAgICAgICAgc2NvcmUtKikKKwkJb3M9LWVsZgorCQk7OworICAgICAgICBzcHUtKikKKwkJb3M9LWVsZgorCQk7OworCSotYWNvcm4pCisJCW9zPS1yaXNjaXgxLjIKKwkJOzsKKwlhcm0qLXJlYmVsKQorCQlvcz0tbGludXgKKwkJOzsKKwlhcm0qLXNlbWkpCisJCW9zPS1hb3V0CisJCTs7CisgICAgICAgIGM0eC0qIHwgdGljNHgtKikKKyAgICAgICAgCW9zPS1jb2ZmCisJCTs7CisJIyBUaGlzIG11c3QgY29tZSBiZWZvcmUgdGhlICotZGVjIGVudHJ5LgorCXBkcDEwLSopCisJCW9zPS10b3BzMjAKKwkJOzsKKwlwZHAxMS0qKQorCQlvcz0tbm9uZQorCQk7OworCSotZGVjIHwgdmF4LSopCisJCW9zPS11bHRyaXg0LjIKKwkJOzsKKwltNjgqLWFwb2xsbykKKwkJb3M9LWRvbWFpbgorCQk7OworCWkzODYtc3VuKQorCQlvcz0tc3Vub3M0LjAuMgorCQk7OworCW02ODAwMC1zdW4pCisJCW9zPS1zdW5vczMKKwkJIyBUaGlzIGFsc28gZXhpc3RzIGluIHRoZSBjb25maWd1cmUgcHJvZ3JhbSwgYnV0IHdhcyBub3QgdGhlCisJCSMgZGVmYXVsdC4KKwkJIyBvcz0tc3Vub3M0CisJCTs7CisJbTY4Ki1jaXNjbykKKwkJb3M9LWFvdXQKKwkJOzsKKyAgICAgICAgbWVwLSopCisJCW9zPS1lbGYKKwkJOzsKKwltaXBzKi1jaXNjbykKKwkJb3M9LWVsZgorCQk7OworCW1pcHMqLSopCisJCW9zPS1lbGYKKwkJOzsKKwlvcjMyLSopCisJCW9zPS1jb2ZmCisJCTs7CisJKi10dGkpCSMgbXVzdCBiZSBiZWZvcmUgc3BhcmMgZW50cnkgb3Igd2UgZ2V0IHRoZSB3cm9uZyBvcy4KKwkJb3M9LXN5c3YzCisJCTs7CisJc3BhcmMtKiB8ICotc3VuKQorCQlvcz0tc3Vub3M0LjEuMQorCQk7OworCSotYmUpCisJCW9zPS1iZW9zCisJCTs7CisJKi1oYWlrdSkKKwkJb3M9LWhhaWt1CisJCTs7CisJKi1pYm0pCisJCW9zPS1haXgKKwkJOzsKKyAgICAJKi1rbnV0aCkKKwkJb3M9LW1taXh3YXJlCisJCTs7CisJKi13ZWMpCisJCW9zPS1wcm9lbGYKKwkJOzsKKwkqLXdpbmJvbmQpCisJCW9zPS1wcm9lbGYKKwkJOzsKKwkqLW9raSkKKwkJb3M9LXByb2VsZgorCQk7OworCSotaHApCisJCW9zPS1ocHV4CisJCTs7CisJKi1oaXRhY2hpKQorCQlvcz0taGl1eAorCQk7OworCWk4NjAtKiB8ICotYXR0IHwgKi1uY3IgfCAqLWFsdG9zIHwgKi1tb3Rvcm9sYSB8ICotY29udmVyZ2VudCkKKwkJb3M9LXN5c3YKKwkJOzsKKwkqLWNibSkKKwkJb3M9LWFtaWdhb3MKKwkJOzsKKwkqLWRnKQorCQlvcz0tZGd1eAorCQk7OworCSotZG9scGhpbikKKwkJb3M9LXN5c3YzCisJCTs7CisJbTY4ay1jY3VyKQorCQlvcz0tcnR1CisJCTs7CisJbTg4ay1vbXJvbiopCisJCW9zPS1sdW5hCisJCTs7CisJKi1uZXh0ICkKKwkJb3M9LW5leHRzdGVwCisJCTs7CisJKi1zZXF1ZW50KQorCQlvcz0tcHR4CisJCTs7CisJKi1jcmRzKQorCQlvcz0tdW5vcworCQk7OworCSotbnMpCisJCW9zPS1nZW5peAorCQk7OworCWkzNzAtKikKKwkJb3M9LW12cworCQk7OworCSotbmV4dCkKKwkJb3M9LW5leHRzdGVwMworCQk7OworCSotZ291bGQpCisJCW9zPS1zeXN2CisJCTs7CisJKi1oaWdobGV2ZWwpCisJCW9zPS1ic2QKKwkJOzsKKwkqLWVuY29yZSkKKwkJb3M9LWJzZAorCQk7OworCSotc2dpKQorCQlvcz0taXJpeAorCQk7OworCSotc2llbWVucykKKwkJb3M9LXN5c3Y0CisJCTs7CisJKi1tYXNzY29tcCkKKwkJb3M9LXJ0dQorCQk7OworCWYzMFswMV0tZnVqaXRzdSB8IGY3MDAtZnVqaXRzdSkKKwkJb3M9LXV4cHYKKwkJOzsKKwkqLXJvbTY4aykKKwkJb3M9LWNvZmYKKwkJOzsKKwkqLSpidWcpCisJCW9zPS1jb2ZmCisJCTs7CisJKi1hcHBsZSkKKwkJb3M9LW1hY29zCisJCTs7CisJKi1hdGFyaSopCisJCW9zPS1taW50CisJCTs7CisJKikKKwkJb3M9LW5vbmUKKwkJOzsKK2VzYWMKK2ZpCisKKyMgSGVyZSB3ZSBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgd2Uga25vdyB0aGUgb3MsIGFuZCB0aGUgQ1BVIHR5cGUsIGJ1dCBub3QgdGhlCisjIG1hbnVmYWN0dXJlci4gIFdlIHBpY2sgdGhlIGxvZ2ljYWwgbWFudWZhY3R1cmVyLgordmVuZG9yPXVua25vd24KK2Nhc2UgJGJhc2ljX21hY2hpbmUgaW4KKwkqLXVua25vd24pCisJCWNhc2UgJG9zIGluCisJCQktcmlzY2l4KikKKwkJCQl2ZW5kb3I9YWNvcm4KKwkJCQk7OworCQkJLXN1bm9zKikKKwkJCQl2ZW5kb3I9c3VuCisJCQkJOzsKKwkJCS1jbmsqfC1haXgqKQorCQkJCXZlbmRvcj1pYm0KKwkJCQk7OworCQkJLWJlb3MqKQorCQkJCXZlbmRvcj1iZQorCQkJCTs7CisJCQktaHB1eCopCisJCQkJdmVuZG9yPWhwCisJCQkJOzsKKwkJCS1tcGVpeCopCisJCQkJdmVuZG9yPWhwCisJCQkJOzsKKwkJCS1oaXV4KikKKwkJCQl2ZW5kb3I9aGl0YWNoaQorCQkJCTs7CisJCQktdW5vcyopCisJCQkJdmVuZG9yPWNyZHMKKwkJCQk7OworCQkJLWRndXgqKQorCQkJCXZlbmRvcj1kZworCQkJCTs7CisJCQktbHVuYSopCisJCQkJdmVuZG9yPW9tcm9uCisJCQkJOzsKKwkJCS1nZW5peCopCisJCQkJdmVuZG9yPW5zCisJCQkJOzsKKwkJCS1tdnMqIHwgLW9wZW5lZCopCisJCQkJdmVuZG9yPWlibQorCQkJCTs7CisJCQktb3M0MDAqKQorCQkJCXZlbmRvcj1pYm0KKwkJCQk7OworCQkJLXB0eCopCisJCQkJdmVuZG9yPXNlcXVlbnQKKwkJCQk7OworCQkJLXRwZiopCisJCQkJdmVuZG9yPWlibQorCQkJCTs7CisJCQktdnhzaW0qIHwgLXZ4d29ya3MqIHwgLXdpbmRpc3MqKQorCQkJCXZlbmRvcj13cnMKKwkJCQk7OworCQkJLWF1eCopCisJCQkJdmVuZG9yPWFwcGxlCisJCQkJOzsKKwkJCS1obXMqKQorCQkJCXZlbmRvcj1oaXRhY2hpCisJCQkJOzsKKwkJCS1tcHcqIHwgLW1hY29zKikKKwkJCQl2ZW5kb3I9YXBwbGUKKwkJCQk7OworCQkJLSptaW50IHwgLW1pbnRbMC05XSogfCAtKk1pTlQgfCAtTWlOVFswLTldKikKKwkJCQl2ZW5kb3I9YXRhcmkKKwkJCQk7OworCQkJLXZvcyopCisJCQkJdmVuZG9yPXN0cmF0dXMKKwkJCQk7OworCQllc2FjCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgInMvdW5rbm93bi8kdmVuZG9yLyJgCisJCTs7Citlc2FjCisKK2VjaG8gJGJhc2ljX21hY2hpbmUkb3MKK2V4aXQKKworIyBMb2NhbCB2YXJpYWJsZXM6CisjIGV2YWw6IChhZGQtaG9vayAnd3JpdGUtZmlsZS1ob29rcyAndGltZS1zdGFtcCkKKyMgdGltZS1zdGFtcC1zdGFydDogInRpbWVzdGFtcD0nIgorIyB0aW1lLXN0YW1wLWZvcm1hdDogIiU6eS0lMDJtLSUwMmQiCisjIHRpbWUtc3RhbXAtZW5kOiAiJyIKKyMgRW5kOgpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvY29uZmlndXJlIGIvb3Byb2ZpbGUtMC45LjcvY29uZmlndXJlCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmFkNWMxNjQKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9jb25maWd1cmUKQEAgLTAsMCArMSwyMTc1MCBAQAorIyEgL2Jpbi9zaAorIyBHdWVzcyB2YWx1ZXMgZm9yIHN5c3RlbS1kZXBlbmRlbnQgdmFyaWFibGVzIGFuZCBjcmVhdGUgTWFrZWZpbGVzLgorIyBHZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNjcuCisjCisjCisjIENvcHlyaWdodCAoQykgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwKKyMgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4KKyMKKyMKKyMgVGhpcyBjb25maWd1cmUgc2NyaXB0IGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQgbW9kaWZ5IGl0LgorIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIE00c2ggSW5pdGlhbGl6YXRpb24uICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCisjIEJlIG1vcmUgQm91cm5lIGNvbXBhdGlibGUKK0RVQUxDQVNFPTE7IGV4cG9ydCBEVUFMQ0FTRSAjIGZvciBNS1Mgc2gKK2lmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgJiYgKGVtdWxhdGUgc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisgIGVtdWxhdGUgc2gKKyAgTlVMTENNRD06CisgICMgUHJlLTQuMiB2ZXJzaW9ucyBvZiBac2ggZG8gd29yZCBzcGxpdHRpbmcgb24gJHsxKyIkQCJ9LCB3aGljaAorICAjIGlzIGNvbnRyYXJ5IHRvIG91ciB1c2FnZS4gIERpc2FibGUgdGhpcyBmZWF0dXJlLgorICBhbGlhcyAtZyAnJHsxKyIkQCJ9Jz0nIiRAIicKKyAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKK2Vsc2UKKyAgY2FzZSBgKHNldCAtbykgMj4vZGV2L251bGxgIGluICMoCisgICpwb3NpeCopIDoKKyAgICBzZXQgLW8gcG9zaXggOzsgIygKKyAgKikgOgorICAgICA7OworZXNhYworZmkKKworCithc19ubD0nCisnCitleHBvcnQgYXNfbmwKKyMgUHJpbnRpbmcgYSBsb25nIHN0cmluZyBjcmFzaGVzIFNvbGFyaXMgNyAvdXNyL2Jpbi9wcmludGYuCithc19lY2hvPSdcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcJworYXNfZWNobz0kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobyRhc19lY2hvCithc19lY2hvPSRhc19lY2hvJGFzX2VjaG8kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobworIyBQcmVmZXIgYSBrc2ggc2hlbGwgYnVpbHRpbiBvdmVyIGFuIGV4dGVybmFsIHByaW50ZiBwcm9ncmFtIG9uIFNvbGFyaXMsCisjIGJ1dCB3aXRob3V0IHdhc3RpbmcgZm9ya3MgZm9yIGJhc2ggb3IgenNoLgoraWYgdGVzdCAteiAiJEJBU0hfVkVSU0lPTiRaU0hfVkVSU0lPTiIgXAorICAgICYmICh0ZXN0ICJYYHByaW50IC1yIC0tICRhc19lY2hvYCIgPSAiWCRhc19lY2hvIikgMj4vZGV2L251bGw7IHRoZW4KKyAgYXNfZWNobz0ncHJpbnQgLXIgLS0nCisgIGFzX2VjaG9fbj0ncHJpbnQgLXJuIC0tJworZWxpZiAodGVzdCAiWGBwcmludGYgJXMgJGFzX2VjaG9gIiA9ICJYJGFzX2VjaG8iKSAyPi9kZXYvbnVsbDsgdGhlbgorICBhc19lY2hvPSdwcmludGYgJXNcbicKKyAgYXNfZWNob19uPSdwcmludGYgJXMnCitlbHNlCisgIGlmIHRlc3QgIlhgKC91c3IvdWNiL2VjaG8gLW4gLW4gJGFzX2VjaG8pIDI+L2Rldi9udWxsYCIgPSAiWC1uICRhc19lY2hvIjsgdGhlbgorICAgIGFzX2VjaG9fYm9keT0nZXZhbCAvdXNyL3VjYi9lY2hvIC1uICIkMSRhc19ubCInCisgICAgYXNfZWNob19uPScvdXNyL3VjYi9lY2hvIC1uJworICBlbHNlCisgICAgYXNfZWNob19ib2R5PSdldmFsIGV4cHIgIlgkMSIgOiAiWFxcKC4qXFwpIicKKyAgICBhc19lY2hvX25fYm9keT0nZXZhbAorICAgICAgYXJnPSQxOworICAgICAgY2FzZSAkYXJnIGluICMoCisgICAgICAqIiRhc19ubCIqKQorCWV4cHIgIlgkYXJnIiA6ICJYXFwoLipcXCkkYXNfbmwiOworCWFyZz1gZXhwciAiWCRhcmciIDogIi4qJGFzX25sXFwoLipcXCkiYDs7CisgICAgICBlc2FjOworICAgICAgZXhwciAiWCRhcmciIDogIlhcXCguKlxcKSIgfCB0ciAtZCAiJGFzX25sIgorICAgICcKKyAgICBleHBvcnQgYXNfZWNob19uX2JvZHkKKyAgICBhc19lY2hvX249J3NoIC1jICRhc19lY2hvX25fYm9keSBhc19lY2hvJworICBmaQorICBleHBvcnQgYXNfZWNob19ib2R5CisgIGFzX2VjaG89J3NoIC1jICRhc19lY2hvX2JvZHkgYXNfZWNobycKK2ZpCisKKyMgVGhlIHVzZXIgaXMgYWx3YXlzIHJpZ2h0LgoraWYgdGVzdCAiJHtQQVRIX1NFUEFSQVRPUitzZXR9IiAhPSBzZXQ7IHRoZW4KKyAgUEFUSF9TRVBBUkFUT1I9OgorICAoUEFUSD0nL2JpbjsvYmluJzsgRlBBVEg9JFBBVEg7IHNoIC1jIDopID4vZGV2L251bGwgMj4mMSAmJiB7CisgICAgKFBBVEg9Jy9iaW46L2Jpbic7IEZQQVRIPSRQQVRIOyBzaCAtYyA6KSA+L2Rldi9udWxsIDI+JjEgfHwKKyAgICAgIFBBVEhfU0VQQVJBVE9SPSc7JworICB9CitmaQorCisKKyMgSUZTCisjIFdlIG5lZWQgc3BhY2UsIHRhYiBhbmQgbmV3IGxpbmUsIGluIHByZWNpc2VseSB0aGF0IG9yZGVyLiAgUXVvdGluZyBpcworIyB0aGVyZSB0byBwcmV2ZW50IGVkaXRvcnMgZnJvbSBjb21wbGFpbmluZyBhYm91dCBzcGFjZS10YWIuCisjIChJZiBfQVNfUEFUSF9XQUxLIHdlcmUgY2FsbGVkIHdpdGggSUZTIHVuc2V0LCBpdCB3b3VsZCBkaXNhYmxlIHdvcmQKKyMgc3BsaXR0aW5nIGJ5IHNldHRpbmcgSUZTIHRvIGVtcHR5IHZhbHVlLikKK0lGUz0iICIiCSRhc19ubCIKKworIyBGaW5kIHdobyB3ZSBhcmUuICBMb29rIGluIHRoZSBwYXRoIGlmIHdlIGNvbnRhaW4gbm8gZGlyZWN0b3J5IHNlcGFyYXRvci4KK2Nhc2UgJDAgaW4gIygoCisgICpbXFwvXSogKSBhc19teXNlbGY9JDAgOzsKKyAgKikgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIHRlc3QgLXIgIiRhc19kaXIvJDAiICYmIGFzX215c2VsZj0kYXNfZGlyLyQwICYmIGJyZWFrCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworICAgICA7OworZXNhYworIyBXZSBkaWQgbm90IGZpbmQgb3Vyc2VsdmVzLCBtb3N0IHByb2JhYmx5IHdlIHdlcmUgcnVuIGFzIGBzaCBDT01NQU5EJworIyBpbiB3aGljaCBjYXNlIHdlIGFyZSBub3QgdG8gYmUgZm91bmQgaW4gdGhlIHBhdGguCitpZiB0ZXN0ICJ4JGFzX215c2VsZiIgPSB4OyB0aGVuCisgIGFzX215c2VsZj0kMAorZmkKK2lmIHRlc3QgISAtZiAiJGFzX215c2VsZiI7IHRoZW4KKyAgJGFzX2VjaG8gIiRhc19teXNlbGY6IGVycm9yOiBjYW5ub3QgZmluZCBteXNlbGY7IHJlcnVuIHdpdGggYW4gYWJzb2x1dGUgZmlsZSBuYW1lIiA+JjIKKyAgZXhpdCAxCitmaQorCisjIFVuc2V0IHZhcmlhYmxlcyB0aGF0IHdlIGRvIG5vdCBuZWVkIGFuZCB3aGljaCBjYXVzZSBidWdzIChlLmcuIGluCisjIHByZS0zLjAgVVdJTiBrc2gpLiAgQnV0IGRvIG5vdCBjYXVzZSBidWdzIGluIGJhc2ggMi4wMTsgdGhlICJ8fCBleGl0IDEiCisjIHN1cHByZXNzZXMgYW55ICJTZWdtZW50YXRpb24gZmF1bHQiIG1lc3NhZ2UgdGhlcmUuICAnKCgnIGNvdWxkCisjIHRyaWdnZXIgYSBidWcgaW4gcGRrc2ggNS4yLjE0LgorZm9yIGFzX3ZhciBpbiBCQVNIX0VOViBFTlYgTUFJTCBNQUlMUEFUSAorZG8gZXZhbCB0ZXN0IHhcJHskYXNfdmFyK3NldH0gPSB4c2V0IFwKKyAgJiYgKCAodW5zZXQgJGFzX3ZhcikgfHwgZXhpdCAxKSA+L2Rldi9udWxsIDI+JjEgJiYgdW5zZXQgJGFzX3ZhciB8fCA6Citkb25lCitQUzE9JyQgJworUFMyPSc+ICcKK1BTND0nKyAnCisKKyMgTkxTIG51aXNhbmNlcy4KK0xDX0FMTD1DCitleHBvcnQgTENfQUxMCitMQU5HVUFHRT1DCitleHBvcnQgTEFOR1VBR0UKKworIyBDRFBBVEguCisodW5zZXQgQ0RQQVRIKSA+L2Rldi9udWxsIDI+JjEgJiYgdW5zZXQgQ0RQQVRICisKK2lmIHRlc3QgIngkQ09ORklHX1NIRUxMIiA9IHg7IHRoZW4KKyAgYXNfYm91cm5lX2NvbXBhdGlibGU9ImlmIHRlc3QgLW4gXCJcJHtaU0hfVkVSU0lPTitzZXR9XCIgJiYgKGVtdWxhdGUgc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisgIGVtdWxhdGUgc2gKKyAgTlVMTENNRD06CisgICMgUHJlLTQuMiB2ZXJzaW9ucyBvZiBac2ggZG8gd29yZCBzcGxpdHRpbmcgb24gXCR7MStcIlwkQFwifSwgd2hpY2gKKyAgIyBpcyBjb250cmFyeSB0byBvdXIgdXNhZ2UuICBEaXNhYmxlIHRoaXMgZmVhdHVyZS4KKyAgYWxpYXMgLWcgJ1wkezErXCJcJEBcIn0nPSdcIlwkQFwiJworICBzZXRvcHQgTk9fR0xPQl9TVUJTVAorZWxzZQorICBjYXNlIFxgKHNldCAtbykgMj4vZGV2L251bGxcYCBpbiAjKAorICAqcG9zaXgqKSA6CisgICAgc2V0IC1vIHBvc2l4IDs7ICMoCisgICopIDoKKyAgICAgOzsKK2VzYWMKK2ZpCisiCisgIGFzX3JlcXVpcmVkPSJhc19mbl9yZXR1cm4gKCkgeyAoZXhpdCBcJDEpOyB9Cithc19mbl9zdWNjZXNzICgpIHsgYXNfZm5fcmV0dXJuIDA7IH0KK2FzX2ZuX2ZhaWx1cmUgKCkgeyBhc19mbl9yZXR1cm4gMTsgfQorYXNfZm5fcmV0X3N1Y2Nlc3MgKCkgeyByZXR1cm4gMDsgfQorYXNfZm5fcmV0X2ZhaWx1cmUgKCkgeyByZXR1cm4gMTsgfQorCitleGl0Y29kZT0wCithc19mbl9zdWNjZXNzIHx8IHsgZXhpdGNvZGU9MTsgZWNobyBhc19mbl9zdWNjZXNzIGZhaWxlZC47IH0KK2FzX2ZuX2ZhaWx1cmUgJiYgeyBleGl0Y29kZT0xOyBlY2hvIGFzX2ZuX2ZhaWx1cmUgc3VjY2VlZGVkLjsgfQorYXNfZm5fcmV0X3N1Y2Nlc3MgfHwgeyBleGl0Y29kZT0xOyBlY2hvIGFzX2ZuX3JldF9zdWNjZXNzIGZhaWxlZC47IH0KK2FzX2ZuX3JldF9mYWlsdXJlICYmIHsgZXhpdGNvZGU9MTsgZWNobyBhc19mbl9yZXRfZmFpbHVyZSBzdWNjZWVkZWQuOyB9CitpZiAoIHNldCB4OyBhc19mbl9yZXRfc3VjY2VzcyB5ICYmIHRlc3QgeCA9IFwiXCQxXCIgKTsgdGhlbiA6CisKK2Vsc2UKKyAgZXhpdGNvZGU9MTsgZWNobyBwb3NpdGlvbmFsIHBhcmFtZXRlcnMgd2VyZSBub3Qgc2F2ZWQuCitmaQordGVzdCB4XCRleGl0Y29kZSA9IHgwIHx8IGV4aXQgMSIKKyAgYXNfc3VnZ2VzdGVkPSIgIGFzX2xpbmVub18xPSI7YXNfc3VnZ2VzdGVkPSRhc19zdWdnZXN0ZWQkTElORU5PO2FzX3N1Z2dlc3RlZD0kYXNfc3VnZ2VzdGVkIiBhc19saW5lbm9fMWE9XCRMSU5FTk8KKyAgYXNfbGluZW5vXzI9Ijthc19zdWdnZXN0ZWQ9JGFzX3N1Z2dlc3RlZCRMSU5FTk87YXNfc3VnZ2VzdGVkPSRhc19zdWdnZXN0ZWQiIGFzX2xpbmVub18yYT1cJExJTkVOTworICBldmFsICd0ZXN0IFwieFwkYXNfbGluZW5vXzEnXCRhc19ydW4nXCIgIT0gXCJ4XCRhc19saW5lbm9fMidcJGFzX3J1bidcIiAmJgorICB0ZXN0IFwieFxgZXhwciBcJGFzX2xpbmVub18xJ1wkYXNfcnVuJyArIDFcYFwiID0gXCJ4XCRhc19saW5lbm9fMidcJGFzX3J1bidcIicgfHwgZXhpdCAxCit0ZXN0IFwkKCggMSArIDEgKSkgPSAyIHx8IGV4aXQgMSIKKyAgaWYgKGV2YWwgIiRhc19yZXF1aXJlZCIpIDI+L2Rldi9udWxsOyB0aGVuIDoKKyAgYXNfaGF2ZV9yZXF1aXJlZD15ZXMKK2Vsc2UKKyAgYXNfaGF2ZV9yZXF1aXJlZD1ubworZmkKKyAgaWYgdGVzdCB4JGFzX2hhdmVfcmVxdWlyZWQgPSB4eWVzICYmIChldmFsICIkYXNfc3VnZ2VzdGVkIikgMj4vZGV2L251bGw7IHRoZW4gOgorCitlbHNlCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2FzX2ZvdW5kPWZhbHNlCitmb3IgYXNfZGlyIGluIC9iaW4kUEFUSF9TRVBBUkFUT1IvdXNyL2JpbiRQQVRIX1NFUEFSQVRPUiRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgIGFzX2ZvdW5kPToKKyAgY2FzZSAkYXNfZGlyIGluICMoCisJIC8qKQorCSAgIGZvciBhc19iYXNlIGluIHNoIGJhc2gga3NoIHNoNTsgZG8KKwkgICAgICMgVHJ5IG9ubHkgc2hlbGxzIHRoYXQgZXhpc3QsIHRvIHNhdmUgc2V2ZXJhbCBmb3Jrcy4KKwkgICAgIGFzX3NoZWxsPSRhc19kaXIvJGFzX2Jhc2UKKwkgICAgIGlmIHsgdGVzdCAtZiAiJGFzX3NoZWxsIiB8fCB0ZXN0IC1mICIkYXNfc2hlbGwuZXhlIjsgfSAmJgorCQkgICAgeyAkYXNfZWNobyAiJGFzX2JvdXJuZV9jb21wYXRpYmxlIiIkYXNfcmVxdWlyZWQiIHwgYXNfcnVuPWEgIiRhc19zaGVsbCI7IH0gMj4vZGV2L251bGw7IHRoZW4gOgorICBDT05GSUdfU0hFTEw9JGFzX3NoZWxsIGFzX2hhdmVfcmVxdWlyZWQ9eWVzCisJCSAgIGlmIHsgJGFzX2VjaG8gIiRhc19ib3VybmVfY29tcGF0aWJsZSIiJGFzX3N1Z2dlc3RlZCIgfCBhc19ydW49YSAiJGFzX3NoZWxsIjsgfSAyPi9kZXYvbnVsbDsgdGhlbiA6CisgIGJyZWFrIDIKK2ZpCitmaQorCSAgIGRvbmU7OworICAgICAgIGVzYWMKKyAgYXNfZm91bmQ9ZmFsc2UKK2RvbmUKKyRhc19mb3VuZCB8fCB7IGlmIHsgdGVzdCAtZiAiJFNIRUxMIiB8fCB0ZXN0IC1mICIkU0hFTEwuZXhlIjsgfSAmJgorCSAgICAgIHsgJGFzX2VjaG8gIiRhc19ib3VybmVfY29tcGF0aWJsZSIiJGFzX3JlcXVpcmVkIiB8IGFzX3J1bj1hICIkU0hFTEwiOyB9IDI+L2Rldi9udWxsOyB0aGVuIDoKKyAgQ09ORklHX1NIRUxMPSRTSEVMTCBhc19oYXZlX3JlcXVpcmVkPXllcworZmk7IH0KK0lGUz0kYXNfc2F2ZV9JRlMKKworCisgICAgICBpZiB0ZXN0ICJ4JENPTkZJR19TSEVMTCIgIT0geDsgdGhlbiA6CisgICMgV2UgY2Fubm90IHlldCBhc3N1bWUgYSBkZWNlbnQgc2hlbGwsIHNvIHdlIGhhdmUgdG8gcHJvdmlkZSBhCisJIyBuZXV0cmFsaXphdGlvbiB2YWx1ZSBmb3Igc2hlbGxzIHdpdGhvdXQgdW5zZXQ7IGFuZCB0aGlzIGFsc28KKwkjIHdvcmtzIGFyb3VuZCBzaGVsbHMgdGhhdCBjYW5ub3QgdW5zZXQgbm9uZXhpc3RlbnQgdmFyaWFibGVzLgorCUJBU0hfRU5WPS9kZXYvbnVsbAorCUVOVj0vZGV2L251bGwKKwkodW5zZXQgQkFTSF9FTlYpID4vZGV2L251bGwgMj4mMSAmJiB1bnNldCBCQVNIX0VOViBFTlYKKwlleHBvcnQgQ09ORklHX1NIRUxMCisJZXhlYyAiJENPTkZJR19TSEVMTCIgIiRhc19teXNlbGYiICR7MSsiJEAifQorZmkKKworICAgIGlmIHRlc3QgeCRhc19oYXZlX3JlcXVpcmVkID0geG5vOyB0aGVuIDoKKyAgJGFzX2VjaG8gIiQwOiBUaGlzIHNjcmlwdCByZXF1aXJlcyBhIHNoZWxsIG1vcmUgbW9kZXJuIHRoYW4gYWxsIgorICAkYXNfZWNobyAiJDA6IHRoZSBzaGVsbHMgdGhhdCBJIGZvdW5kIG9uIHlvdXIgc3lzdGVtLiIKKyAgaWYgdGVzdCB4JHtaU0hfVkVSU0lPTitzZXR9ID0geHNldCA7IHRoZW4KKyAgICAkYXNfZWNobyAiJDA6IEluIHBhcnRpY3VsYXIsIHpzaCAkWlNIX1ZFUlNJT04gaGFzIGJ1Z3MgYW5kIHNob3VsZCIKKyAgICAkYXNfZWNobyAiJDA6IGJlIHVwZ3JhZGVkIHRvIHpzaCA0LjMuNCBvciBsYXRlci4iCisgIGVsc2UKKyAgICAkYXNfZWNobyAiJDA6IFBsZWFzZSB0ZWxsIGJ1Zy1hdXRvY29uZkBnbnUub3JnIGFib3V0IHlvdXIgc3lzdGVtLAorJDA6IGluY2x1ZGluZyBhbnkgZXJyb3IgcG9zc2libHkgb3V0cHV0IGJlZm9yZSB0aGlzCiskMDogbWVzc2FnZS4gVGhlbiBpbnN0YWxsIGEgbW9kZXJuIHNoZWxsLCBvciBtYW51YWxseSBydW4KKyQwOiB0aGUgc2NyaXB0IHVuZGVyIHN1Y2ggYSBzaGVsbCBpZiB5b3UgZG8gaGF2ZSBvbmUuIgorICBmaQorICBleGl0IDEKK2ZpCitmaQorZmkKK1NIRUxMPSR7Q09ORklHX1NIRUxMLS9iaW4vc2h9CitleHBvcnQgU0hFTEwKKyMgVW5zZXQgbW9yZSB2YXJpYWJsZXMga25vd24gdG8gaW50ZXJmZXJlIHdpdGggYmVoYXZpb3Igb2YgY29tbW9uIHRvb2xzLgorQ0xJQ09MT1JfRk9SQ0U9IEdSRVBfT1BUSU9OUz0KK3Vuc2V0IENMSUNPTE9SX0ZPUkNFIEdSRVBfT1BUSU9OUworCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIE00c2ggU2hlbGwgRnVuY3Rpb25zLiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIGFzX2ZuX3Vuc2V0IFZBUgorIyAtLS0tLS0tLS0tLS0tLS0KKyMgUG9ydGFibHkgdW5zZXQgVkFSLgorYXNfZm5fdW5zZXQgKCkKK3sKKyAgeyBldmFsICQxPTsgdW5zZXQgJDE7fQorfQorYXNfdW5zZXQ9YXNfZm5fdW5zZXQKKworIyBhc19mbl9zZXRfc3RhdHVzIFNUQVRVUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBTZXQgJD8gdG8gU1RBVFVTLCB3aXRob3V0IGZvcmtpbmcuCithc19mbl9zZXRfc3RhdHVzICgpCit7CisgIHJldHVybiAkMQorfSAjIGFzX2ZuX3NldF9zdGF0dXMKKworIyBhc19mbl9leGl0IFNUQVRVUworIyAtLS0tLS0tLS0tLS0tLS0tLQorIyBFeGl0IHRoZSBzaGVsbCB3aXRoIFNUQVRVUywgZXZlbiBpbiBhICJ0cmFwIDAiIG9yICJzZXQgLWUiIGNvbnRleHQuCithc19mbl9leGl0ICgpCit7CisgIHNldCArZQorICBhc19mbl9zZXRfc3RhdHVzICQxCisgIGV4aXQgJDEKK30gIyBhc19mbl9leGl0CisKKyMgYXNfZm5fbWtkaXJfcAorIyAtLS0tLS0tLS0tLS0tCisjIENyZWF0ZSAiJGFzX2RpciIgYXMgYSBkaXJlY3RvcnksIGluY2x1ZGluZyBwYXJlbnRzIGlmIG5lY2Vzc2FyeS4KK2FzX2ZuX21rZGlyX3AgKCkKK3sKKworICBjYXNlICRhc19kaXIgaW4gIygKKyAgLSopIGFzX2Rpcj0uLyRhc19kaXI7OworICBlc2FjCisgIHRlc3QgLWQgIiRhc19kaXIiIHx8IGV2YWwgJGFzX21rZGlyX3AgfHwgeworICAgIGFzX2RpcnM9CisgICAgd2hpbGUgOjsgZG8KKyAgICAgIGNhc2UgJGFzX2RpciBpbiAjKAorICAgICAgKlwnKikgYXNfcWRpcj1gJGFzX2VjaG8gIiRhc19kaXIiIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgOzsgIycoCisgICAgICAqKSBhc19xZGlyPSRhc19kaXI7OworICAgICAgZXNhYworICAgICAgYXNfZGlycz0iJyRhc19xZGlyJyAkYXNfZGlycyIKKyAgICAgIGFzX2Rpcj1gJGFzX2Rpcm5hbWUgLS0gIiRhc19kaXIiIHx8CiskYXNfZXhwciBYIiRhc19kaXIiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCisJIFgiJGFzX2RpciIgOiAnWFwoLy9cKVteL10nIFx8IFwKKwkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpJCcgXHwgXAorCSBYIiRhc19kaXIiIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAorJGFzX2VjaG8gWCIkYXNfZGlyIiB8CisgICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cL1wpW14vXS4qL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cL1wpJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXCkuKi97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICBzLy4qLy4vOyBxJ2AKKyAgICAgIHRlc3QgLWQgIiRhc19kaXIiICYmIGJyZWFrCisgICAgZG9uZQorICAgIHRlc3QgLXogIiRhc19kaXJzIiB8fCBldmFsICJta2RpciAkYXNfZGlycyIKKyAgfSB8fCB0ZXN0IC1kICIkYXNfZGlyIiB8fCBhc19mbl9lcnJvciAkPyAiY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgJGFzX2RpciIKKworCit9ICMgYXNfZm5fbWtkaXJfcAorIyBhc19mbl9hcHBlbmQgVkFSIFZBTFVFCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQXBwZW5kIHRoZSB0ZXh0IGluIFZBTFVFIHRvIHRoZSBlbmQgb2YgdGhlIGRlZmluaXRpb24gY29udGFpbmVkIGluIFZBUi4gVGFrZQorIyBhZHZhbnRhZ2Ugb2YgYW55IHNoZWxsIG9wdGltaXphdGlvbnMgdGhhdCBhbGxvdyBhbW9ydGl6ZWQgbGluZWFyIGdyb3d0aCBvdmVyCisjIHJlcGVhdGVkIGFwcGVuZHMsIGluc3RlYWQgb2YgdGhlIHR5cGljYWwgcXVhZHJhdGljIGdyb3d0aCBwcmVzZW50IGluIG5haXZlCisjIGltcGxlbWVudGF0aW9ucy4KK2lmIChldmFsICJhc192YXI9MTsgYXNfdmFyKz0yOyB0ZXN0IHhcJGFzX3ZhciA9IHgxMiIpIDI+L2Rldi9udWxsOyB0aGVuIDoKKyAgZXZhbCAnYXNfZm5fYXBwZW5kICgpCisgIHsKKyAgICBldmFsICQxKz1cJDIKKyAgfScKK2Vsc2UKKyAgYXNfZm5fYXBwZW5kICgpCisgIHsKKyAgICBldmFsICQxPVwkJDFcJDIKKyAgfQorZmkgIyBhc19mbl9hcHBlbmQKKworIyBhc19mbl9hcml0aCBBUkcuLi4KKyMgLS0tLS0tLS0tLS0tLS0tLS0tCisjIFBlcmZvcm0gYXJpdGhtZXRpYyBldmFsdWF0aW9uIG9uIHRoZSBBUkdzLCBhbmQgc3RvcmUgdGhlIHJlc3VsdCBpbiB0aGUKKyMgZ2xvYmFsICRhc192YWwuIFRha2UgYWR2YW50YWdlIG9mIHNoZWxscyB0aGF0IGNhbiBhdm9pZCBmb3Jrcy4gVGhlIGFyZ3VtZW50cworIyBtdXN0IGJlIHBvcnRhYmxlIGFjcm9zcyAkKCgpKSBhbmQgZXhwci4KK2lmIChldmFsICJ0ZXN0IFwkKCggMSArIDEgKSkgPSAyIikgMj4vZGV2L251bGw7IHRoZW4gOgorICBldmFsICdhc19mbl9hcml0aCAoKQorICB7CisgICAgYXNfdmFsPSQoKCAkKiApKQorICB9JworZWxzZQorICBhc19mbl9hcml0aCAoKQorICB7CisgICAgYXNfdmFsPWBleHByICIkQCIgfHwgdGVzdCAkPyAtZXEgMWAKKyAgfQorZmkgIyBhc19mbl9hcml0aAorCisKKyMgYXNfZm5fZXJyb3IgU1RBVFVTIEVSUk9SIFtMSU5FTk8gTE9HX0ZEXQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIE91dHB1dCAiYGJhc2VuYW1lICQwYDogZXJyb3I6IEVSUk9SIiB0byBzdGRlcnIuIElmIExJTkVOTyBhbmQgTE9HX0ZEIGFyZQorIyBwcm92aWRlZCwgYWxzbyBvdXRwdXQgdGhlIGVycm9yIHRvIExPR19GRCwgcmVmZXJlbmNpbmcgTElORU5PLiBUaGVuIGV4aXQgdGhlCisjIHNjcmlwdCB3aXRoIFNUQVRVUywgdXNpbmcgMSBpZiB0aGF0IHdhcyAwLgorYXNfZm5fZXJyb3IgKCkKK3sKKyAgYXNfc3RhdHVzPSQxOyB0ZXN0ICRhc19zdGF0dXMgLWVxIDAgJiYgYXNfc3RhdHVzPTEKKyAgaWYgdGVzdCAiJDQiOyB0aGVuCisgICAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMyJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjaworICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiAkMiIgPiYkNAorICBmaQorICAkYXNfZWNobyAiJGFzX21lOiBlcnJvcjogJDIiID4mMgorICBhc19mbl9leGl0ICRhc19zdGF0dXMKK30gIyBhc19mbl9lcnJvcgorCitpZiBleHByIGEgOiAnXChhXCknID4vZGV2L251bGwgMj4mMSAmJgorICAgdGVzdCAiWGBleHByIDAwMDAxIDogJy4qXCguLi5cKSdgIiA9IFgwMDE7IHRoZW4KKyAgYXNfZXhwcj1leHByCitlbHNlCisgIGFzX2V4cHI9ZmFsc2UKK2ZpCisKK2lmIChiYXNlbmFtZSAtLSAvKSA+L2Rldi9udWxsIDI+JjEgJiYgdGVzdCAiWGBiYXNlbmFtZSAtLSAvIDI+JjFgIiA9ICJYLyI7IHRoZW4KKyAgYXNfYmFzZW5hbWU9YmFzZW5hbWUKK2Vsc2UKKyAgYXNfYmFzZW5hbWU9ZmFsc2UKK2ZpCisKK2lmIChhc19kaXI9YGRpcm5hbWUgLS0gL2AgJiYgdGVzdCAiWCRhc19kaXIiID0gWC8pID4vZGV2L251bGwgMj4mMTsgdGhlbgorICBhc19kaXJuYW1lPWRpcm5hbWUKK2Vsc2UKKyAgYXNfZGlybmFtZT1mYWxzZQorZmkKKworYXNfbWU9YCRhc19iYXNlbmFtZSAtLSAiJDAiIHx8CiskYXNfZXhwciBYLyIkMCIgOiAnLiovXChbXi9dW14vXSpcKS8qJCcgXHwgXAorCSBYIiQwIiA6ICdYXCgvL1wpJCcgXHwgXAorCSBYIiQwIiA6ICdYXCgvXCknIFx8IC4gMj4vZGV2L251bGwgfHwKKyRhc19lY2hvIFgvIiQwIiB8CisgICAgc2VkICcvXi4qXC9cKFteL11bXi9dKlwpXC8qJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcL1woXC9cL1wpJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcL1woXC9cKS4qL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIHMvLiovLi87IHEnYAorCisjIEF2b2lkIGRlcGVuZGluZyB1cG9uIENoYXJhY3RlciBSYW5nZXMuCithc19jcl9sZXR0ZXJzPSdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eicKK2FzX2NyX0xFVFRFUlM9J0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJworYXNfY3JfTGV0dGVycz0kYXNfY3JfbGV0dGVycyRhc19jcl9MRVRURVJTCithc19jcl9kaWdpdHM9JzAxMjM0NTY3ODknCithc19jcl9hbG51bT0kYXNfY3JfTGV0dGVycyRhc19jcl9kaWdpdHMKKworCisgIGFzX2xpbmVub18xPSRMSU5FTk8gYXNfbGluZW5vXzFhPSRMSU5FTk8KKyAgYXNfbGluZW5vXzI9JExJTkVOTyBhc19saW5lbm9fMmE9JExJTkVOTworICBldmFsICd0ZXN0ICJ4JGFzX2xpbmVub18xJyRhc19ydW4nIiAhPSAieCRhc19saW5lbm9fMickYXNfcnVuJyIgJiYKKyAgdGVzdCAieGBleHByICRhc19saW5lbm9fMSckYXNfcnVuJyArIDFgIiA9ICJ4JGFzX2xpbmVub18yJyRhc19ydW4nIicgfHwgeworICAjIEJsYW1lIExlZSBFLiBNY01haG9uICgxOTMxLTE5ODkpIGZvciBzZWQncyBzeW50YXguICA6LSkKKyAgc2VkIC1uICcKKyAgICBwCisgICAgL1skXUxJTkVOTy89CisgICcgPCRhc19teXNlbGYgfAorICAgIHNlZCAnCisgICAgICBzL1skXUxJTkVOTy4qLyYtLworICAgICAgdCBsaW5lbm8KKyAgICAgIGIKKyAgICAgIDpsaW5lbm8KKyAgICAgIE4KKyAgICAgIDpsb29wCisgICAgICBzL1skXUxJTkVOT1woW14nJGFzX2NyX2FsbnVtJ19dLipcblwpXCguKlwpL1wyXDFcMi8KKyAgICAgIHQgbG9vcAorICAgICAgcy8tXG4uKi8vCisgICAgJyA+JGFzX21lLmxpbmVubyAmJgorICBjaG1vZCAreCAiJGFzX21lLmxpbmVubyIgfHwKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgY3JlYXRlICRhc19tZS5saW5lbm87IHJlcnVuIHdpdGggYSBQT1NJWCBzaGVsbCIgPiYyOyBhc19mbl9leGl0IDE7IH0KKworICAjIERvbid0IHRyeSB0byBleGVjIGFzIGl0IGNoYW5nZXMgJFswXSwgY2F1c2luZyBhbGwgc29ydCBvZiBwcm9ibGVtcworICAjICh0aGUgZGlybmFtZSBvZiAkWzBdIGlzIG5vdCB0aGUgcGxhY2Ugd2hlcmUgd2UgbWlnaHQgZmluZCB0aGUKKyAgIyBvcmlnaW5hbCBhbmQgc28gb24uICBBdXRvY29uZiBpcyBlc3BlY2lhbGx5IHNlbnNpdGl2ZSB0byB0aGlzKS4KKyAgLiAiLi8kYXNfbWUubGluZW5vIgorICAjIEV4aXQgc3RhdHVzIGlzIHRoYXQgb2YgdGhlIGxhc3QgY29tbWFuZC4KKyAgZXhpdAorfQorCitFQ0hPX0M9IEVDSE9fTj0gRUNIT19UPQorY2FzZSBgZWNobyAtbiB4YCBpbiAjKCgoKCgKKy1uKikKKyAgY2FzZSBgZWNobyAneHlcYydgIGluCisgICpjKikgRUNIT19UPScJJzs7CSMgRUNIT19UIGlzIHNpbmdsZSB0YWIgY2hhcmFjdGVyLgorICB4eSkgIEVDSE9fQz0nXGMnOzsKKyAgKikgICBlY2hvIGBlY2hvIGtzaDg4IGJ1ZyBvbiBBSVggNi4xYCA+IC9kZXYvbnVsbAorICAgICAgIEVDSE9fVD0nCSc7OworICBlc2FjOzsKKyopCisgIEVDSE9fTj0nLW4nOzsKK2VzYWMKKworcm0gLWYgY29uZiQkIGNvbmYkJC5leGUgY29uZiQkLmZpbGUKK2lmIHRlc3QgLWQgY29uZiQkLmRpcjsgdGhlbgorICBybSAtZiBjb25mJCQuZGlyL2NvbmYkJC5maWxlCitlbHNlCisgIHJtIC1mIGNvbmYkJC5kaXIKKyAgbWtkaXIgY29uZiQkLmRpciAyPi9kZXYvbnVsbAorZmkKK2lmIChlY2hvID5jb25mJCQuZmlsZSkgMj4vZGV2L251bGw7IHRoZW4KKyAgaWYgbG4gLXMgY29uZiQkLmZpbGUgY29uZiQkIDI+L2Rldi9udWxsOyB0aGVuCisgICAgYXNfbG5fcz0nbG4gLXMnCisgICAgIyAuLi4gYnV0IHRoZXJlIGFyZSB0d28gZ290Y2hhczoKKyAgICAjIDEpIE9uIE1TWVMsIGJvdGggYGxuIC1zIGZpbGUgZGlyJyBhbmQgYGxuIGZpbGUgZGlyJyBmYWlsLgorICAgICMgMikgREpHUFAgPCAyLjA0IGhhcyBubyBzeW1saW5rczsgYGxuIC1zJyBjcmVhdGVzIGEgd3JhcHBlciBleGVjdXRhYmxlLgorICAgICMgSW4gYm90aCBjYXNlcywgd2UgaGF2ZSB0byBkZWZhdWx0IHRvIGBjcCAtcCcuCisgICAgbG4gLXMgY29uZiQkLmZpbGUgY29uZiQkLmRpciAyPi9kZXYvbnVsbCAmJiB0ZXN0ICEgLWYgY29uZiQkLmV4ZSB8fAorICAgICAgYXNfbG5fcz0nY3AgLXAnCisgIGVsaWYgbG4gY29uZiQkLmZpbGUgY29uZiQkIDI+L2Rldi9udWxsOyB0aGVuCisgICAgYXNfbG5fcz1sbgorICBlbHNlCisgICAgYXNfbG5fcz0nY3AgLXAnCisgIGZpCitlbHNlCisgIGFzX2xuX3M9J2NwIC1wJworZmkKK3JtIC1mIGNvbmYkJCBjb25mJCQuZXhlIGNvbmYkJC5kaXIvY29uZiQkLmZpbGUgY29uZiQkLmZpbGUKK3JtZGlyIGNvbmYkJC5kaXIgMj4vZGV2L251bGwKKworaWYgbWtkaXIgLXAgLiAyPi9kZXYvbnVsbDsgdGhlbgorICBhc19ta2Rpcl9wPSdta2RpciAtcCAiJGFzX2RpciInCitlbHNlCisgIHRlc3QgLWQgLi8tcCAmJiBybWRpciAuLy1wCisgIGFzX21rZGlyX3A9ZmFsc2UKK2ZpCisKK2lmIHRlc3QgLXggLyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgYXNfdGVzdF94PSd0ZXN0IC14JworZWxzZQorICBpZiBscyAtZEwgLyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICBhc19sc19MX29wdGlvbj1MCisgIGVsc2UKKyAgICBhc19sc19MX29wdGlvbj0KKyAgZmkKKyAgYXNfdGVzdF94PScKKyAgICBldmFsIHNoIC1jICdcJycKKyAgICAgIGlmIHRlc3QgLWQgIiQxIjsgdGhlbgorCXRlc3QgLWQgIiQxLy4iOworICAgICAgZWxzZQorCWNhc2UgJDEgaW4gIygKKwktKilzZXQgIi4vJDEiOzsKKwllc2FjOworCWNhc2UgYGxzIC1sZCckYXNfbHNfTF9vcHRpb24nICIkMSIgMj4vZGV2L251bGxgIGluICMoKAorCT8/P1tzeF0qKTo7OyopZmFsc2U7O2VzYWM7ZmkKKyAgICAnXCcnIHNoCisgICcKK2ZpCithc19leGVjdXRhYmxlX3A9JGFzX3Rlc3RfeAorCisjIFNlZCBleHByZXNzaW9uIHRvIG1hcCBhIHN0cmluZyBvbnRvIGEgdmFsaWQgQ1BQIG5hbWUuCithc190cl9jcHA9ImV2YWwgc2VkICd5JSokYXNfY3JfbGV0dGVycyVQJGFzX2NyX0xFVFRFUlMlO3MlW15fJGFzX2NyX2FsbnVtXSVfJWcnIgorCisjIFNlZCBleHByZXNzaW9uIHRvIG1hcCBhIHN0cmluZyBvbnRvIGEgdmFsaWQgdmFyaWFibGUgbmFtZS4KK2FzX3RyX3NoPSJldmFsIHNlZCAneSUqKyVwcCU7cyVbXl8kYXNfY3JfYWxudW1dJV8lZyciCisKKworCisjIENoZWNrIHRoYXQgd2UgYXJlIHJ1bm5pbmcgdW5kZXIgdGhlIGNvcnJlY3Qgc2hlbGwuCitTSEVMTD0ke0NPTkZJR19TSEVMTC0vYmluL3NofQorCitjYXNlIFgkbHRfRUNITyBpbgorWCotLWZhbGxiYWNrLWVjaG8pCisgICMgUmVtb3ZlIG9uZSBsZXZlbCBvZiBxdW90YXRpb24gKHdoaWNoIHdhcyByZXF1aXJlZCBmb3IgTWFrZSkuCisgIEVDSE89YGVjaG8gIiRsdF9FQ0hPIiB8IHNlZCAncyxcXFxcXCRcXCQwLCckMCcsJ2AKKyAgOzsKK2VzYWMKKworRUNITz0ke2x0X0VDSE8tZWNob30KK2lmIHRlc3QgIlgkMSIgPSBYLS1uby1yZWV4ZWM7IHRoZW4KKyAgIyBEaXNjYXJkIHRoZSAtLW5vLXJlZXhlYyBmbGFnLCBhbmQgY29udGludWUuCisgIHNoaWZ0CitlbGlmIHRlc3QgIlgkMSIgPSBYLS1mYWxsYmFjay1lY2hvOyB0aGVuCisgICMgQXZvaWQgaW5saW5lIGRvY3VtZW50IGhlcmUsIGl0IG1heSBiZSBsZWZ0IG92ZXIKKyAgOgorZWxpZiB0ZXN0ICJYYHsgJEVDSE8gJ1x0JzsgfSAyPi9kZXYvbnVsbGAiID0gJ1hcdCcgOyB0aGVuCisgICMgWWlwcGVlLCAkRUNITyB3b3JrcyEKKyAgOgorZWxzZQorICAjIFJlc3RhcnQgdW5kZXIgdGhlIGNvcnJlY3Qgc2hlbGwuCisgIGV4ZWMgJFNIRUxMICIkMCIgLS1uby1yZWV4ZWMgJHsxKyIkQCJ9CitmaQorCitpZiB0ZXN0ICJYJDEiID0gWC0tZmFsbGJhY2stZWNobzsgdGhlbgorICAjIHVzZWQgYXMgZmFsbGJhY2sgZWNobworICBzaGlmdAorICBjYXQgPDxfTFRfRU9GCiskKgorX0xUX0VPRgorICBleGl0IDAKK2ZpCisKKyMgVGhlIEhQLVVYIGtzaCBhbmQgUE9TSVggc2hlbGwgcHJpbnQgdGhlIHRhcmdldCBkaXJlY3RvcnkgdG8gc3Rkb3V0CisjIGlmIENEUEFUSCBpcyBzZXQuCisodW5zZXQgQ0RQQVRIKSA+L2Rldi9udWxsIDI+JjEgJiYgdW5zZXQgQ0RQQVRICisKK2lmIHRlc3QgLXogIiRsdF9FQ0hPIjsgdGhlbgorICBpZiB0ZXN0ICJYJHtlY2hvX3Rlc3Rfc3RyaW5nK3NldH0iICE9IFhzZXQ7IHRoZW4KKyAgICAjIGZpbmQgYSBzdHJpbmcgYXMgbGFyZ2UgYXMgcG9zc2libGUsIGFzIGxvbmcgYXMgdGhlIHNoZWxsIGNhbiBjb3BlIHdpdGggaXQKKyAgICBmb3IgY21kIGluICdzZWQgNTBxICIkMCInICdzZWQgMjBxICIkMCInICdzZWQgMTBxICIkMCInICdzZWQgMnEgIiQwIicgJ2VjaG8gdGVzdCc7IGRvCisgICAgICAjIGV4cGVjdGVkIHNpemVzOiBsZXNzIHRoYW4gMktiLCAxS2IsIDUxMiBieXRlcywgMTYgYnl0ZXMsIC4uLgorICAgICAgaWYgeyBlY2hvX3Rlc3Rfc3RyaW5nPWBldmFsICRjbWRgOyB9IDI+L2Rldi9udWxsICYmCisJIHsgdGVzdCAiWCRlY2hvX3Rlc3Rfc3RyaW5nIiA9ICJYJGVjaG9fdGVzdF9zdHJpbmciOyB9IDI+L2Rldi9udWxsCisgICAgICB0aGVuCisgICAgICAgIGJyZWFrCisgICAgICBmaQorICAgIGRvbmUKKyAgZmkKKworICBpZiB0ZXN0ICJYYHsgJEVDSE8gJ1x0JzsgfSAyPi9kZXYvbnVsbGAiID0gJ1hcdCcgJiYKKyAgICAgZWNob190ZXN0aW5nX3N0cmluZz1geyAkRUNITyAiJGVjaG9fdGVzdF9zdHJpbmciOyB9IDI+L2Rldi9udWxsYCAmJgorICAgICB0ZXN0ICJYJGVjaG9fdGVzdGluZ19zdHJpbmciID0gIlgkZWNob190ZXN0X3N0cmluZyI7IHRoZW4KKyAgICA6CisgIGVsc2UKKyAgICAjIFRoZSBTb2xhcmlzLCBBSVgsIGFuZCBEaWdpdGFsIFVuaXggZGVmYXVsdCBlY2hvIHByb2dyYW1zIHVucXVvdGUKKyAgICAjIGJhY2tzbGFzaGVzLiAgVGhpcyBtYWtlcyBpdCBpbXBvc3NpYmxlIHRvIHF1b3RlIGJhY2tzbGFzaGVzIHVzaW5nCisgICAgIyAgIGVjaG8gIiRzb21ldGhpbmciIHwgc2VkICdzL1xcL1xcXFwvZycKKyAgICAjCisgICAgIyBTbywgZmlyc3Qgd2UgbG9vayBmb3IgYSB3b3JraW5nIGVjaG8gaW4gdGhlIHVzZXIncyBQQVRILgorCisgICAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisgICAgZm9yIGRpciBpbiAkUEFUSCAvdXNyL3VjYjsgZG8KKyAgICAgIElGUz0iJGx0X3NhdmVfaWZzIgorICAgICAgaWYgKHRlc3QgLWYgJGRpci9lY2hvIHx8IHRlc3QgLWYgJGRpci9lY2hvJGFjX2V4ZWV4dCkgJiYKKyAgICAgICAgIHRlc3QgIlhgKCRkaXIvZWNobyAnXHQnKSAyPi9kZXYvbnVsbGAiID0gJ1hcdCcgJiYKKyAgICAgICAgIGVjaG9fdGVzdGluZ19zdHJpbmc9YCgkZGlyL2VjaG8gIiRlY2hvX3Rlc3Rfc3RyaW5nIikgMj4vZGV2L251bGxgICYmCisgICAgICAgICB0ZXN0ICJYJGVjaG9fdGVzdGluZ19zdHJpbmciID0gIlgkZWNob190ZXN0X3N0cmluZyI7IHRoZW4KKyAgICAgICAgRUNITz0iJGRpci9lY2hvIgorICAgICAgICBicmVhaworICAgICAgZmkKKyAgICBkb25lCisgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisKKyAgICBpZiB0ZXN0ICJYJEVDSE8iID0gWGVjaG87IHRoZW4KKyAgICAgICMgV2UgZGlkbid0IGZpbmQgYSBiZXR0ZXIgZWNobywgc28gbG9vayBmb3IgYWx0ZXJuYXRpdmVzLgorICAgICAgaWYgdGVzdCAiWGB7IHByaW50IC1yICdcdCc7IH0gMj4vZGV2L251bGxgIiA9ICdYXHQnICYmCisgICAgICAgICBlY2hvX3Rlc3Rpbmdfc3RyaW5nPWB7IHByaW50IC1yICIkZWNob190ZXN0X3N0cmluZyI7IH0gMj4vZGV2L251bGxgICYmCisgICAgICAgICB0ZXN0ICJYJGVjaG9fdGVzdGluZ19zdHJpbmciID0gIlgkZWNob190ZXN0X3N0cmluZyI7IHRoZW4KKyAgICAgICAgIyBUaGlzIHNoZWxsIGhhcyBhIGJ1aWx0aW4gcHJpbnQgLXIgdGhhdCBkb2VzIHRoZSB0cmljay4KKyAgICAgICAgRUNITz0ncHJpbnQgLXInCisgICAgICBlbGlmIHsgdGVzdCAtZiAvYmluL2tzaCB8fCB0ZXN0IC1mIC9iaW4va3NoJGFjX2V4ZWV4dDsgfSAmJgorCSAgIHRlc3QgIlgkQ09ORklHX1NIRUxMIiAhPSBYL2Jpbi9rc2g7IHRoZW4KKyAgICAgICAgIyBJZiB3ZSBoYXZlIGtzaCwgdHJ5IHJ1bm5pbmcgY29uZmlndXJlIGFnYWluIHdpdGggaXQuCisgICAgICAgIE9SSUdJTkFMX0NPTkZJR19TSEVMTD0ke0NPTkZJR19TSEVMTC0vYmluL3NofQorICAgICAgICBleHBvcnQgT1JJR0lOQUxfQ09ORklHX1NIRUxMCisgICAgICAgIENPTkZJR19TSEVMTD0vYmluL2tzaAorICAgICAgICBleHBvcnQgQ09ORklHX1NIRUxMCisgICAgICAgIGV4ZWMgJENPTkZJR19TSEVMTCAiJDAiIC0tbm8tcmVleGVjICR7MSsiJEAifQorICAgICAgZWxzZQorICAgICAgICAjIFRyeSB1c2luZyBwcmludGYuCisgICAgICAgIEVDSE89J3ByaW50ZiAlc1xuJworICAgICAgICBpZiB0ZXN0ICJYYHsgJEVDSE8gJ1x0JzsgfSAyPi9kZXYvbnVsbGAiID0gJ1hcdCcgJiYKKwkgICBlY2hvX3Rlc3Rpbmdfc3RyaW5nPWB7ICRFQ0hPICIkZWNob190ZXN0X3N0cmluZyI7IH0gMj4vZGV2L251bGxgICYmCisJICAgdGVzdCAiWCRlY2hvX3Rlc3Rpbmdfc3RyaW5nIiA9ICJYJGVjaG9fdGVzdF9zdHJpbmciOyB0aGVuCisJICAjIENvb2wsIHByaW50ZiB3b3JrcworCSAgOgorICAgICAgICBlbGlmIGVjaG9fdGVzdGluZ19zdHJpbmc9YCgkT1JJR0lOQUxfQ09ORklHX1NIRUxMICIkMCIgLS1mYWxsYmFjay1lY2hvICdcdCcpIDI+L2Rldi9udWxsYCAmJgorCSAgICAgdGVzdCAiWCRlY2hvX3Rlc3Rpbmdfc3RyaW5nIiA9ICdYXHQnICYmCisJICAgICBlY2hvX3Rlc3Rpbmdfc3RyaW5nPWAoJE9SSUdJTkFMX0NPTkZJR19TSEVMTCAiJDAiIC0tZmFsbGJhY2stZWNobyAiJGVjaG9fdGVzdF9zdHJpbmciKSAyPi9kZXYvbnVsbGAgJiYKKwkgICAgIHRlc3QgIlgkZWNob190ZXN0aW5nX3N0cmluZyIgPSAiWCRlY2hvX3Rlc3Rfc3RyaW5nIjsgdGhlbgorCSAgQ09ORklHX1NIRUxMPSRPUklHSU5BTF9DT05GSUdfU0hFTEwKKwkgIGV4cG9ydCBDT05GSUdfU0hFTEwKKwkgIFNIRUxMPSIkQ09ORklHX1NIRUxMIgorCSAgZXhwb3J0IFNIRUxMCisJICBFQ0hPPSIkQ09ORklHX1NIRUxMICQwIC0tZmFsbGJhY2stZWNobyIKKyAgICAgICAgZWxpZiBlY2hvX3Rlc3Rpbmdfc3RyaW5nPWAoJENPTkZJR19TSEVMTCAiJDAiIC0tZmFsbGJhY2stZWNobyAnXHQnKSAyPi9kZXYvbnVsbGAgJiYKKwkgICAgIHRlc3QgIlgkZWNob190ZXN0aW5nX3N0cmluZyIgPSAnWFx0JyAmJgorCSAgICAgZWNob190ZXN0aW5nX3N0cmluZz1gKCRDT05GSUdfU0hFTEwgIiQwIiAtLWZhbGxiYWNrLWVjaG8gIiRlY2hvX3Rlc3Rfc3RyaW5nIikgMj4vZGV2L251bGxgICYmCisJICAgICB0ZXN0ICJYJGVjaG9fdGVzdGluZ19zdHJpbmciID0gIlgkZWNob190ZXN0X3N0cmluZyI7IHRoZW4KKwkgIEVDSE89IiRDT05GSUdfU0hFTEwgJDAgLS1mYWxsYmFjay1lY2hvIgorICAgICAgICBlbHNlCisJICAjIG1heWJlIHdpdGggYSBzbWFsbGVyIHN0cmluZy4uLgorCSAgcHJldj06CisKKwkgIGZvciBjbWQgaW4gJ2VjaG8gdGVzdCcgJ3NlZCAycSAiJDAiJyAnc2VkIDEwcSAiJDAiJyAnc2VkIDIwcSAiJDAiJyAnc2VkIDUwcSAiJDAiJzsgZG8KKwkgICAgaWYgeyB0ZXN0ICJYJGVjaG9fdGVzdF9zdHJpbmciID0gIlhgZXZhbCAkY21kYCI7IH0gMj4vZGV2L251bGwKKwkgICAgdGhlbgorCSAgICAgIGJyZWFrCisJICAgIGZpCisJICAgIHByZXY9IiRjbWQiCisJICBkb25lCisKKwkgIGlmIHRlc3QgIiRwcmV2IiAhPSAnc2VkIDUwcSAiJDAiJzsgdGhlbgorCSAgICBlY2hvX3Rlc3Rfc3RyaW5nPWBldmFsICRwcmV2YAorCSAgICBleHBvcnQgZWNob190ZXN0X3N0cmluZworCSAgICBleGVjICR7T1JJR0lOQUxfQ09ORklHX1NIRUxMLSR7Q09ORklHX1NIRUxMLS9iaW4vc2h9fSAiJDAiICR7MSsiJEAifQorCSAgZWxzZQorCSAgICAjIE9vcHMuICBXZSBsb3N0IGNvbXBsZXRlbHksIHNvIGp1c3Qgc3RpY2sgd2l0aCBlY2hvLgorCSAgICBFQ0hPPWVjaG8KKwkgIGZpCisgICAgICAgIGZpCisgICAgICBmaQorICAgIGZpCisgIGZpCitmaQorCisjIENvcHkgZWNobyBhbmQgcXVvdGUgdGhlIGNvcHkgc3VpdGFibHkgZm9yIHBhc3NpbmcgdG8gbGlidG9vbCBmcm9tCisjIHRoZSBNYWtlZmlsZSwgaW5zdGVhZCBvZiBxdW90aW5nIHRoZSBvcmlnaW5hbCwgd2hpY2ggaXMgdXNlZCBsYXRlci4KK2x0X0VDSE89JEVDSE8KK2lmIHRlc3QgIlgkbHRfRUNITyIgPSAiWCRDT05GSUdfU0hFTEwgJDAgLS1mYWxsYmFjay1lY2hvIjsgdGhlbgorICAgbHRfRUNITz0iJENPTkZJR19TSEVMTCBcXFwkXCQwIC0tZmFsbGJhY2stZWNobyIKK2ZpCisKKworCisKK3Rlc3QgLW4gIiRESkRJUiIgfHwgZXhlYyA3PCYwIDwvZGV2L251bGwKK2V4ZWMgNj4mMQorCisjIE5hbWUgb2YgdGhlIGhvc3QuCisjIGhvc3RuYW1lIG9uIHNvbWUgc3lzdGVtcyAoU1ZSMy4yLCBvbGQgR05VL0xpbnV4KSByZXR1cm5zIGEgYm9ndXMgZXhpdCBzdGF0dXMsCisjIHNvIHVuYW1lIGdldHMgcnVuIHRvby4KK2FjX2hvc3RuYW1lPWAoaG9zdG5hbWUgfHwgdW5hbWUgLW4pIDI+L2Rldi9udWxsIHwgc2VkIDFxYAorCisjCisjIEluaXRpYWxpemF0aW9ucy4KKyMKK2FjX2RlZmF1bHRfcHJlZml4PS91c3IvbG9jYWwKK2FjX2NsZWFuX2ZpbGVzPQorYWNfY29uZmlnX2xpYm9ial9kaXI9LgorTElCT0JKUz0KK2Nyb3NzX2NvbXBpbGluZz1ubworc3ViZGlycz0KK01GTEFHUz0KK01BS0VGTEFHUz0KKworIyBJZGVudGl0eSBvZiB0aGlzIHBhY2thZ2UuCitQQUNLQUdFX05BTUU9CitQQUNLQUdFX1RBUk5BTUU9CitQQUNLQUdFX1ZFUlNJT049CitQQUNLQUdFX1NUUklORz0KK1BBQ0tBR0VfQlVHUkVQT1JUPQorUEFDS0FHRV9VUkw9CisKK2FjX3VuaXF1ZV9maWxlPSJsaWJvcC9vcF9jb25maWcuaCIKKyMgRmFjdG9yaW5nIGRlZmF1bHQgaGVhZGVycyBmb3IgbW9zdCB0ZXN0cy4KK2FjX2luY2x1ZGVzX2RlZmF1bHQ9IlwKKyNpbmNsdWRlIDxzdGRpby5oPgorI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyMgaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19TVEFUX0gKKyMgaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNlbmRpZgorI2lmZGVmIFNURENfSEVBREVSUworIyBpbmNsdWRlIDxzdGRsaWIuaD4KKyMgaW5jbHVkZSA8c3RkZGVmLmg+CisjZWxzZQorIyBpZmRlZiBIQVZFX1NURExJQl9ICisjICBpbmNsdWRlIDxzdGRsaWIuaD4KKyMgZW5kaWYKKyNlbmRpZgorI2lmZGVmIEhBVkVfU1RSSU5HX0gKKyMgaWYgIWRlZmluZWQgU1REQ19IRUFERVJTICYmIGRlZmluZWQgSEFWRV9NRU1PUllfSAorIyAgaW5jbHVkZSA8bWVtb3J5Lmg+CisjIGVuZGlmCisjIGluY2x1ZGUgPHN0cmluZy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TVFJJTkdTX0gKKyMgaW5jbHVkZSA8c3RyaW5ncy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9JTlRUWVBFU19ICisjIGluY2x1ZGUgPGludHR5cGVzLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NURElOVF9ICisjIGluY2x1ZGUgPHN0ZGludC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9VTklTVERfSAorIyBpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZiIKKworYWNfc3Vic3RfdmFycz0nYW1fX0VYRUVYVF9GQUxTRQorYW1fX0VYRUVYVF9UUlVFCitMVExJQk9CSlMKK0xJQk9CSlMKK09QX0RPQ0RJUgorT1BfQ1hYRkxBR1MKK09QX0NGTEFHUworQ0hFQ0tfQUNDT1VOVF9GQUxTRQorQ0hFQ0tfQUNDT1VOVF9UUlVFCitQT1BUX0xJQlMKK0JGRF9MSUJTCitMSUJFUlRZX0xJQlMKK0NBVF9FTlRSWV9FTkQKK0NBVF9FTlRSWV9TVEFSVAorRE9DQk9PS19ST09UCitYU0xUUFJPQ19GTEFHUworWE1MX0NBVEFMT0cKK2hhdmVfeHNsdHByb2NfRkFMU0UKK2hhdmVfeHNsdHByb2NfVFJVRQorWFNMVFBST0MKK2hhdmVfcXRfRkFMU0UKK2hhdmVfcXRfVFJVRQorVUlDaGVscAorUVRfTElCUworUVRfQ0ZMQUdTCitRVF9WRVJTSU9OCitRVF9MSUIKK1VJQworTU9DCitRVF9MREZMQUdTCitRVF9JTkNMVURFUworWF9FWFRSQV9MSUJTCitYX0xJQlMKK1hfUFJFX0xJQlMKK1hfQ0ZMQUdTCitYTUtNRgorUFRSRElGRl9UX1RZUEUKK1NJWkVfVF9UWVBFCit0b3BkaXIKK0VYVFJBX0NGTEFHU19NT0RVTEUKK0JVSUxEX0pWTVBJX0FHRU5UX0ZBTFNFCitCVUlMRF9KVk1QSV9BR0VOVF9UUlVFCitCVUlMRF9KVk1USV9BR0VOVF9GQUxTRQorQlVJTERfSlZNVElfQUdFTlRfVFJVRQorSkFWQV9IT01FRElSCitNT0RJTlNUQUxMRElSCitPUFJPRklMRV9NT0RVTEVfQVJDSAorS1ZFUlMKK2tlcm5lbF9zdXBwb3J0X0ZBTFNFCitrZXJuZWxfc3VwcG9ydF9UUlVFCitLSU5DCitLU1JDCitDWFhDUFAKK2FtX19mYXN0ZGVwQ1hYX0ZBTFNFCithbV9fZmFzdGRlcENYWF9UUlVFCitDWFhERVBNT0RFCithY19jdF9DWFgKK0NYWEZMQUdTCitDWFgKK09QUk9GSUxFX0RJUgorREFURQorUEtHX0NPTkZJR19MSUJESVIKK1BLR19DT05GSUdfUEFUSAorUEtHX0NPTkZJRworQ1BQCitPVE9PTDY0CitPVE9PTAorTElQTworTk1FRElUCitEU1lNVVRJTAorbHRfRUNITworQVIKK09CSkRVTVAKK0xOX1MKK05NCithY19jdF9EVU1QQklOCitEVU1QQklOCitMRAorRkdSRVAKK0VHUkVQCitHUkVQCitTRUQKK2hvc3Rfb3MKK2hvc3RfdmVuZG9yCitob3N0X2NwdQoraG9zdAorYnVpbGRfb3MKK2J1aWxkX3ZlbmRvcgorYnVpbGRfY3B1CitidWlsZAorTElCVE9PTAorUkFOTElCCithbV9fZmFzdGRlcENDX0ZBTFNFCithbV9fZmFzdGRlcENDX1RSVUUKK0NDREVQTU9ERQorQU1ERVBCQUNLU0xBU0gKK0FNREVQX0ZBTFNFCitBTURFUF9UUlVFCithbV9fcXVvdGUKK2FtX19pbmNsdWRlCitERVBESVIKK09CSkVYVAorRVhFRVhUCithY19jdF9DQworQ1BQRkxBR1MKK0xERkxBR1MKK0NGTEFHUworQ0MKK2FtX191bnRhcgorYW1fX3RhcgorQU1UQVIKK2FtX19sZWFkaW5nX2RvdAorU0VUX01BS0UKK0FXSworbWtkaXJfcAorTUtESVJfUAorSU5TVEFMTF9TVFJJUF9QUk9HUkFNCitTVFJJUAoraW5zdGFsbF9zaAorTUFLRUlORk8KK0FVVE9IRUFERVIKK0FVVE9NQUtFCitBVVRPQ09ORgorQUNMT0NBTAorVkVSU0lPTgorUEFDS0FHRQorQ1lHUEFUSF9XCithbV9faXNyYworSU5TVEFMTF9EQVRBCitJTlNUQUxMX1NDUklQVAorSU5TVEFMTF9QUk9HUkFNCit0YXJnZXRfYWxpYXMKK2hvc3RfYWxpYXMKK2J1aWxkX2FsaWFzCitMSUJTCitFQ0hPX1QKK0VDSE9fTgorRUNIT19DCitERUZTCittYW5kaXIKK2xvY2FsZWRpcgorbGliZGlyCitwc2RpcgorcGRmZGlyCitkdmlkaXIKK2h0bWxkaXIKK2luZm9kaXIKK2RvY2Rpcgorb2xkaW5jbHVkZWRpcgoraW5jbHVkZWRpcgorbG9jYWxzdGF0ZWRpcgorc2hhcmVkc3RhdGVkaXIKK3N5c2NvbmZkaXIKK2RhdGFkaXIKK2RhdGFyb290ZGlyCitsaWJleGVjZGlyCitzYmluZGlyCitiaW5kaXIKK3Byb2dyYW1fdHJhbnNmb3JtX25hbWUKK3ByZWZpeAorZXhlY19wcmVmaXgKK1BBQ0tBR0VfVVJMCitQQUNLQUdFX0JVR1JFUE9SVAorUEFDS0FHRV9TVFJJTkcKK1BBQ0tBR0VfVkVSU0lPTgorUEFDS0FHRV9UQVJOQU1FCitQQUNLQUdFX05BTUUKK1BBVEhfU0VQQVJBVE9SCitTSEVMTCcKK2FjX3N1YnN0X2ZpbGVzPScnCithY191c2VyX29wdHM9JworZW5hYmxlX29wdGlvbl9jaGVja2luZworZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmcKK2VuYWJsZV9zaGFyZWQKK2VuYWJsZV9zdGF0aWMKK3dpdGhfcGljCitlbmFibGVfZmFzdF9pbnN0YWxsCit3aXRoX2dudV9sZAorZW5hYmxlX2xpYnRvb2xfbG9jaword2l0aF9iaW51dGlscword2l0aF9iaW51dGlsc19saWJuYW1lCit3aXRoX2djYword2l0aF9rZXJuZWxfc3VwcG9ydAord2l0aF9saW51eAord2l0aF9tb2R1bGVfZGlyCit3aXRoX2phdmEKK3dpdGhfZXh0cmFfaW5jbHVkZXMKK3dpdGhfZXh0cmFfbGlicword2l0aF90YXJnZXQKK3dpdGhfeAorZW5hYmxlX2d1aQord2l0aF9xdF9kaXIKK3dpdGhfcXRfaW5jbHVkZXMKK3dpdGhfcXRfbGlicmFyaWVzCitlbmFibGVfcGNoCitlbmFibGVfZ2NvdgorZW5hYmxlX3dlcnJvcgorZW5hYmxlX29wdGltaXphdGlvbgorZW5hYmxlX2FjY291bnRfY2hlY2sKKycKKyAgICAgIGFjX3ByZWNpb3VzX3ZhcnM9J2J1aWxkX2FsaWFzCitob3N0X2FsaWFzCit0YXJnZXRfYWxpYXMKK0NDCitDRkxBR1MKK0xERkxBR1MKK0xJQlMKK0NQUEZMQUdTCitDUFAKK1BLR19DT05GSUcKK1BLR19DT05GSUdfUEFUSAorUEtHX0NPTkZJR19MSUJESVIKK0NYWAorQ1hYRkxBR1MKK0NDQworQ1hYQ1BQCitYTUtNRgorUVRfQ0ZMQUdTCitRVF9MSUJTJworCisKKyMgSW5pdGlhbGl6ZSBzb21lIHZhcmlhYmxlcyBzZXQgYnkgb3B0aW9ucy4KK2FjX2luaXRfaGVscD0KK2FjX2luaXRfdmVyc2lvbj1mYWxzZQorYWNfdW5yZWNvZ25pemVkX29wdHM9CithY191bnJlY29nbml6ZWRfc2VwPQorIyBUaGUgdmFyaWFibGVzIGhhdmUgdGhlIHNhbWUgbmFtZXMgYXMgdGhlIG9wdGlvbnMsIHdpdGgKKyMgZGFzaGVzIGNoYW5nZWQgdG8gdW5kZXJsaW5lcy4KK2NhY2hlX2ZpbGU9L2Rldi9udWxsCitleGVjX3ByZWZpeD1OT05FCitub19jcmVhdGU9Citub19yZWN1cnNpb249CitwcmVmaXg9Tk9ORQorcHJvZ3JhbV9wcmVmaXg9Tk9ORQorcHJvZ3JhbV9zdWZmaXg9Tk9ORQorcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZT1zLHgseCwKK3NpbGVudD0KK3NpdGU9CitzcmNkaXI9Cit2ZXJib3NlPQoreF9pbmNsdWRlcz1OT05FCit4X2xpYnJhcmllcz1OT05FCisKKyMgSW5zdGFsbGF0aW9uIGRpcmVjdG9yeSBvcHRpb25zLgorIyBUaGVzZSBhcmUgbGVmdCB1bmV4cGFuZGVkIHNvIHVzZXJzIGNhbiAibWFrZSBpbnN0YWxsIGV4ZWNfcHJlZml4PS9mb28iCisjIGFuZCBhbGwgdGhlIHZhcmlhYmxlcyB0aGF0IGFyZSBzdXBwb3NlZCB0byBiZSBiYXNlZCBvbiBleGVjX3ByZWZpeAorIyBieSBkZWZhdWx0IHdpbGwgYWN0dWFsbHkgY2hhbmdlLgorIyBVc2UgYnJhY2VzIGluc3RlYWQgb2YgcGFyZW5zIGJlY2F1c2Ugc2gsIHBlcmwsIGV0Yy4gYWxzbyBhY2NlcHQgdGhlbS4KKyMgKFRoZSBsaXN0IGZvbGxvd3MgdGhlIHNhbWUgb3JkZXIgYXMgdGhlIEdOVSBDb2RpbmcgU3RhbmRhcmRzLikKK2JpbmRpcj0nJHtleGVjX3ByZWZpeH0vYmluJworc2JpbmRpcj0nJHtleGVjX3ByZWZpeH0vc2JpbicKK2xpYmV4ZWNkaXI9JyR7ZXhlY19wcmVmaXh9L2xpYmV4ZWMnCitkYXRhcm9vdGRpcj0nJHtwcmVmaXh9L3NoYXJlJworZGF0YWRpcj0nJHtkYXRhcm9vdGRpcn0nCitzeXNjb25mZGlyPScke3ByZWZpeH0vZXRjJworc2hhcmVkc3RhdGVkaXI9JyR7cHJlZml4fS9jb20nCitsb2NhbHN0YXRlZGlyPScke3ByZWZpeH0vdmFyJworaW5jbHVkZWRpcj0nJHtwcmVmaXh9L2luY2x1ZGUnCitvbGRpbmNsdWRlZGlyPScvdXNyL2luY2x1ZGUnCitkb2NkaXI9JyR7ZGF0YXJvb3RkaXJ9L2RvYy8ke1BBQ0tBR0V9JworaW5mb2Rpcj0nJHtkYXRhcm9vdGRpcn0vaW5mbycKK2h0bWxkaXI9JyR7ZG9jZGlyfScKK2R2aWRpcj0nJHtkb2NkaXJ9JworcGRmZGlyPScke2RvY2Rpcn0nCitwc2Rpcj0nJHtkb2NkaXJ9JworbGliZGlyPScke2V4ZWNfcHJlZml4fS9saWInCitsb2NhbGVkaXI9JyR7ZGF0YXJvb3RkaXJ9L2xvY2FsZScKK21hbmRpcj0nJHtkYXRhcm9vdGRpcn0vbWFuJworCithY19wcmV2PQorYWNfZGFzaGRhc2g9Citmb3IgYWNfb3B0aW9uCitkbworICAjIElmIHRoZSBwcmV2aW91cyBvcHRpb24gbmVlZHMgYW4gYXJndW1lbnQsIGFzc2lnbiBpdC4KKyAgaWYgdGVzdCAtbiAiJGFjX3ByZXYiOyB0aGVuCisgICAgZXZhbCAkYWNfcHJldj1cJGFjX29wdGlvbgorICAgIGFjX3ByZXY9CisgICAgY29udGludWUKKyAgZmkKKworICBjYXNlICRhY19vcHRpb24gaW4KKyAgKj0/KikgYWNfb3B0YXJnPWBleHByICJYJGFjX29wdGlvbiIgOiAnW149XSo9XCguKlwpJ2AgOzsKKyAgKj0pICAgYWNfb3B0YXJnPSA7OworICAqKSAgICBhY19vcHRhcmc9eWVzIDs7CisgIGVzYWMKKworICAjIEFjY2VwdCB0aGUgaW1wb3J0YW50IEN5Z251cyBjb25maWd1cmUgb3B0aW9ucywgc28gd2UgY2FuIGRpYWdub3NlIHR5cG9zLgorCisgIGNhc2UgJGFjX2Rhc2hkYXNoJGFjX29wdGlvbiBpbgorICAtLSkKKyAgICBhY19kYXNoZGFzaD15ZXMgOzsKKworICAtYmluZGlyIHwgLS1iaW5kaXIgfCAtLWJpbmRpIHwgLS1iaW5kIHwgLS1iaW4gfCAtLWJpKQorICAgIGFjX3ByZXY9YmluZGlyIDs7CisgIC1iaW5kaXI9KiB8IC0tYmluZGlyPSogfCAtLWJpbmRpPSogfCAtLWJpbmQ9KiB8IC0tYmluPSogfCAtLWJpPSopCisgICAgYmluZGlyPSRhY19vcHRhcmcgOzsKKworICAtYnVpbGQgfCAtLWJ1aWxkIHwgLS1idWlsIHwgLS1idWkgfCAtLWJ1KQorICAgIGFjX3ByZXY9YnVpbGRfYWxpYXMgOzsKKyAgLWJ1aWxkPSogfCAtLWJ1aWxkPSogfCAtLWJ1aWw9KiB8IC0tYnVpPSogfCAtLWJ1PSopCisgICAgYnVpbGRfYWxpYXM9JGFjX29wdGFyZyA7OworCisgIC1jYWNoZS1maWxlIHwgLS1jYWNoZS1maWxlIHwgLS1jYWNoZS1maWwgfCAtLWNhY2hlLWZpIFwKKyAgfCAtLWNhY2hlLWYgfCAtLWNhY2hlLSB8IC0tY2FjaGUgfCAtLWNhY2ggfCAtLWNhYyB8IC0tY2EgfCAtLWMpCisgICAgYWNfcHJldj1jYWNoZV9maWxlIDs7CisgIC1jYWNoZS1maWxlPSogfCAtLWNhY2hlLWZpbGU9KiB8IC0tY2FjaGUtZmlsPSogfCAtLWNhY2hlLWZpPSogXAorICB8IC0tY2FjaGUtZj0qIHwgLS1jYWNoZS09KiB8IC0tY2FjaGU9KiB8IC0tY2FjaD0qIHwgLS1jYWM9KiB8IC0tY2E9KiB8IC0tYz0qKQorICAgIGNhY2hlX2ZpbGU9JGFjX29wdGFyZyA7OworCisgIC0tY29uZmlnLWNhY2hlIHwgLUMpCisgICAgY2FjaGVfZmlsZT1jb25maWcuY2FjaGUgOzsKKworICAtZGF0YWRpciB8IC0tZGF0YWRpciB8IC0tZGF0YWRpIHwgLS1kYXRhZCkKKyAgICBhY19wcmV2PWRhdGFkaXIgOzsKKyAgLWRhdGFkaXI9KiB8IC0tZGF0YWRpcj0qIHwgLS1kYXRhZGk9KiB8IC0tZGF0YWQ9KikKKyAgICBkYXRhZGlyPSRhY19vcHRhcmcgOzsKKworICAtZGF0YXJvb3RkaXIgfCAtLWRhdGFyb290ZGlyIHwgLS1kYXRhcm9vdGRpIHwgLS1kYXRhcm9vdGQgfCAtLWRhdGFyb290IFwKKyAgfCAtLWRhdGFyb28gfCAtLWRhdGFybyB8IC0tZGF0YXIpCisgICAgYWNfcHJldj1kYXRhcm9vdGRpciA7OworICAtZGF0YXJvb3RkaXI9KiB8IC0tZGF0YXJvb3RkaXI9KiB8IC0tZGF0YXJvb3RkaT0qIHwgLS1kYXRhcm9vdGQ9KiBcCisgIHwgLS1kYXRhcm9vdD0qIHwgLS1kYXRhcm9vPSogfCAtLWRhdGFybz0qIHwgLS1kYXRhcj0qKQorICAgIGRhdGFyb290ZGlyPSRhY19vcHRhcmcgOzsKKworICAtZGlzYWJsZS0qIHwgLS1kaXNhYmxlLSopCisgICAgYWNfdXNlcm9wdD1gZXhwciAieCRhY19vcHRpb24iIDogJ3gtKmRpc2FibGUtXCguKlwpJ2AKKyAgICAjIFJlamVjdCBuYW1lcyB0aGF0IGFyZSBub3QgdmFsaWQgc2hlbGwgdmFyaWFibGUgbmFtZXMuCisgICAgZXhwciAieCRhY191c2Vyb3B0IiA6ICIuKlteLSsuXyRhc19jcl9hbG51bV0iID4vZGV2L251bGwgJiYKKyAgICAgIGFzX2ZuX2Vycm9yICQ/ICJpbnZhbGlkIGZlYXR1cmUgbmFtZTogJGFjX3VzZXJvcHQiCisgICAgYWNfdXNlcm9wdF9vcmlnPSRhY191c2Vyb3B0CisgICAgYWNfdXNlcm9wdD1gJGFzX2VjaG8gIiRhY191c2Vyb3B0IiB8IHNlZCAncy9bLSsuXS9fL2cnYAorICAgIGNhc2UgJGFjX3VzZXJfb3B0cyBpbgorICAgICAgKiIKKyJlbmFibGVfJGFjX3VzZXJvcHQiCisiKikgOzsKKyAgICAgICopIGFjX3VucmVjb2duaXplZF9vcHRzPSIkYWNfdW5yZWNvZ25pemVkX29wdHMkYWNfdW5yZWNvZ25pemVkX3NlcC0tZGlzYWJsZS0kYWNfdXNlcm9wdF9vcmlnIgorCSBhY191bnJlY29nbml6ZWRfc2VwPScsICc7OworICAgIGVzYWMKKyAgICBldmFsIGVuYWJsZV8kYWNfdXNlcm9wdD1ubyA7OworCisgIC1kb2NkaXIgfCAtLWRvY2RpciB8IC0tZG9jZGkgfCAtLWRvYyB8IC0tZG8pCisgICAgYWNfcHJldj1kb2NkaXIgOzsKKyAgLWRvY2Rpcj0qIHwgLS1kb2NkaXI9KiB8IC0tZG9jZGk9KiB8IC0tZG9jPSogfCAtLWRvPSopCisgICAgZG9jZGlyPSRhY19vcHRhcmcgOzsKKworICAtZHZpZGlyIHwgLS1kdmlkaXIgfCAtLWR2aWRpIHwgLS1kdmlkIHwgLS1kdmkgfCAtLWR2KQorICAgIGFjX3ByZXY9ZHZpZGlyIDs7CisgIC1kdmlkaXI9KiB8IC0tZHZpZGlyPSogfCAtLWR2aWRpPSogfCAtLWR2aWQ9KiB8IC0tZHZpPSogfCAtLWR2PSopCisgICAgZHZpZGlyPSRhY19vcHRhcmcgOzsKKworICAtZW5hYmxlLSogfCAtLWVuYWJsZS0qKQorICAgIGFjX3VzZXJvcHQ9YGV4cHIgIngkYWNfb3B0aW9uIiA6ICd4LSplbmFibGUtXChbXj1dKlwpJ2AKKyAgICAjIFJlamVjdCBuYW1lcyB0aGF0IGFyZSBub3QgdmFsaWQgc2hlbGwgdmFyaWFibGUgbmFtZXMuCisgICAgZXhwciAieCRhY191c2Vyb3B0IiA6ICIuKlteLSsuXyRhc19jcl9hbG51bV0iID4vZGV2L251bGwgJiYKKyAgICAgIGFzX2ZuX2Vycm9yICQ/ICJpbnZhbGlkIGZlYXR1cmUgbmFtZTogJGFjX3VzZXJvcHQiCisgICAgYWNfdXNlcm9wdF9vcmlnPSRhY191c2Vyb3B0CisgICAgYWNfdXNlcm9wdD1gJGFzX2VjaG8gIiRhY191c2Vyb3B0IiB8IHNlZCAncy9bLSsuXS9fL2cnYAorICAgIGNhc2UgJGFjX3VzZXJfb3B0cyBpbgorICAgICAgKiIKKyJlbmFibGVfJGFjX3VzZXJvcHQiCisiKikgOzsKKyAgICAgICopIGFjX3VucmVjb2duaXplZF9vcHRzPSIkYWNfdW5yZWNvZ25pemVkX29wdHMkYWNfdW5yZWNvZ25pemVkX3NlcC0tZW5hYmxlLSRhY191c2Vyb3B0X29yaWciCisJIGFjX3VucmVjb2duaXplZF9zZXA9JywgJzs7CisgICAgZXNhYworICAgIGV2YWwgZW5hYmxlXyRhY191c2Vyb3B0PVwkYWNfb3B0YXJnIDs7CisKKyAgLWV4ZWMtcHJlZml4IHwgLS1leGVjX3ByZWZpeCB8IC0tZXhlYy1wcmVmaXggfCAtLWV4ZWMtcHJlZmkgXAorICB8IC0tZXhlYy1wcmVmIHwgLS1leGVjLXByZSB8IC0tZXhlYy1wciB8IC0tZXhlYy1wIHwgLS1leGVjLSBcCisgIHwgLS1leGVjIHwgLS1leGUgfCAtLWV4KQorICAgIGFjX3ByZXY9ZXhlY19wcmVmaXggOzsKKyAgLWV4ZWMtcHJlZml4PSogfCAtLWV4ZWNfcHJlZml4PSogfCAtLWV4ZWMtcHJlZml4PSogfCAtLWV4ZWMtcHJlZmk9KiBcCisgIHwgLS1leGVjLXByZWY9KiB8IC0tZXhlYy1wcmU9KiB8IC0tZXhlYy1wcj0qIHwgLS1leGVjLXA9KiB8IC0tZXhlYy09KiBcCisgIHwgLS1leGVjPSogfCAtLWV4ZT0qIHwgLS1leD0qKQorICAgIGV4ZWNfcHJlZml4PSRhY19vcHRhcmcgOzsKKworICAtZ2FzIHwgLS1nYXMgfCAtLWdhIHwgLS1nKQorICAgICMgT2Jzb2xldGU7IHVzZSAtLXdpdGgtZ2FzLgorICAgIHdpdGhfZ2FzPXllcyA7OworCisgIC1oZWxwIHwgLS1oZWxwIHwgLS1oZWwgfCAtLWhlIHwgLWgpCisgICAgYWNfaW5pdF9oZWxwPWxvbmcgOzsKKyAgLWhlbHA9ciogfCAtLWhlbHA9ciogfCAtLWhlbD1yKiB8IC0taGU9ciogfCAtaHIqKQorICAgIGFjX2luaXRfaGVscD1yZWN1cnNpdmUgOzsKKyAgLWhlbHA9cyogfCAtLWhlbHA9cyogfCAtLWhlbD1zKiB8IC0taGU9cyogfCAtaHMqKQorICAgIGFjX2luaXRfaGVscD1zaG9ydCA7OworCisgIC1ob3N0IHwgLS1ob3N0IHwgLS1ob3MgfCAtLWhvKQorICAgIGFjX3ByZXY9aG9zdF9hbGlhcyA7OworICAtaG9zdD0qIHwgLS1ob3N0PSogfCAtLWhvcz0qIHwgLS1obz0qKQorICAgIGhvc3RfYWxpYXM9JGFjX29wdGFyZyA7OworCisgIC1odG1sZGlyIHwgLS1odG1sZGlyIHwgLS1odG1sZGkgfCAtLWh0bWxkIHwgLS1odG1sIHwgLS1odG0gfCAtLWh0KQorICAgIGFjX3ByZXY9aHRtbGRpciA7OworICAtaHRtbGRpcj0qIHwgLS1odG1sZGlyPSogfCAtLWh0bWxkaT0qIHwgLS1odG1sZD0qIHwgLS1odG1sPSogfCAtLWh0bT0qIFwKKyAgfCAtLWh0PSopCisgICAgaHRtbGRpcj0kYWNfb3B0YXJnIDs7CisKKyAgLWluY2x1ZGVkaXIgfCAtLWluY2x1ZGVkaXIgfCAtLWluY2x1ZGVkaSB8IC0taW5jbHVkZWQgfCAtLWluY2x1ZGUgXAorICB8IC0taW5jbHVkIHwgLS1pbmNsdSB8IC0taW5jbCB8IC0taW5jKQorICAgIGFjX3ByZXY9aW5jbHVkZWRpciA7OworICAtaW5jbHVkZWRpcj0qIHwgLS1pbmNsdWRlZGlyPSogfCAtLWluY2x1ZGVkaT0qIHwgLS1pbmNsdWRlZD0qIHwgLS1pbmNsdWRlPSogXAorICB8IC0taW5jbHVkPSogfCAtLWluY2x1PSogfCAtLWluY2w9KiB8IC0taW5jPSopCisgICAgaW5jbHVkZWRpcj0kYWNfb3B0YXJnIDs7CisKKyAgLWluZm9kaXIgfCAtLWluZm9kaXIgfCAtLWluZm9kaSB8IC0taW5mb2QgfCAtLWluZm8gfCAtLWluZikKKyAgICBhY19wcmV2PWluZm9kaXIgOzsKKyAgLWluZm9kaXI9KiB8IC0taW5mb2Rpcj0qIHwgLS1pbmZvZGk9KiB8IC0taW5mb2Q9KiB8IC0taW5mbz0qIHwgLS1pbmY9KikKKyAgICBpbmZvZGlyPSRhY19vcHRhcmcgOzsKKworICAtbGliZGlyIHwgLS1saWJkaXIgfCAtLWxpYmRpIHwgLS1saWJkKQorICAgIGFjX3ByZXY9bGliZGlyIDs7CisgIC1saWJkaXI9KiB8IC0tbGliZGlyPSogfCAtLWxpYmRpPSogfCAtLWxpYmQ9KikKKyAgICBsaWJkaXI9JGFjX29wdGFyZyA7OworCisgIC1saWJleGVjZGlyIHwgLS1saWJleGVjZGlyIHwgLS1saWJleGVjZGkgfCAtLWxpYmV4ZWNkIHwgLS1saWJleGVjIFwKKyAgfCAtLWxpYmV4ZSB8IC0tbGliZXggfCAtLWxpYmUpCisgICAgYWNfcHJldj1saWJleGVjZGlyIDs7CisgIC1saWJleGVjZGlyPSogfCAtLWxpYmV4ZWNkaXI9KiB8IC0tbGliZXhlY2RpPSogfCAtLWxpYmV4ZWNkPSogfCAtLWxpYmV4ZWM9KiBcCisgIHwgLS1saWJleGU9KiB8IC0tbGliZXg9KiB8IC0tbGliZT0qKQorICAgIGxpYmV4ZWNkaXI9JGFjX29wdGFyZyA7OworCisgIC1sb2NhbGVkaXIgfCAtLWxvY2FsZWRpciB8IC0tbG9jYWxlZGkgfCAtLWxvY2FsZWQgfCAtLWxvY2FsZSkKKyAgICBhY19wcmV2PWxvY2FsZWRpciA7OworICAtbG9jYWxlZGlyPSogfCAtLWxvY2FsZWRpcj0qIHwgLS1sb2NhbGVkaT0qIHwgLS1sb2NhbGVkPSogfCAtLWxvY2FsZT0qKQorICAgIGxvY2FsZWRpcj0kYWNfb3B0YXJnIDs7CisKKyAgLWxvY2Fsc3RhdGVkaXIgfCAtLWxvY2Fsc3RhdGVkaXIgfCAtLWxvY2Fsc3RhdGVkaSB8IC0tbG9jYWxzdGF0ZWQgXAorICB8IC0tbG9jYWxzdGF0ZSB8IC0tbG9jYWxzdGF0IHwgLS1sb2NhbHN0YSB8IC0tbG9jYWxzdCB8IC0tbG9jYWxzKQorICAgIGFjX3ByZXY9bG9jYWxzdGF0ZWRpciA7OworICAtbG9jYWxzdGF0ZWRpcj0qIHwgLS1sb2NhbHN0YXRlZGlyPSogfCAtLWxvY2Fsc3RhdGVkaT0qIHwgLS1sb2NhbHN0YXRlZD0qIFwKKyAgfCAtLWxvY2Fsc3RhdGU9KiB8IC0tbG9jYWxzdGF0PSogfCAtLWxvY2Fsc3RhPSogfCAtLWxvY2Fsc3Q9KiB8IC0tbG9jYWxzPSopCisgICAgbG9jYWxzdGF0ZWRpcj0kYWNfb3B0YXJnIDs7CisKKyAgLW1hbmRpciB8IC0tbWFuZGlyIHwgLS1tYW5kaSB8IC0tbWFuZCB8IC0tbWFuIHwgLS1tYSB8IC0tbSkKKyAgICBhY19wcmV2PW1hbmRpciA7OworICAtbWFuZGlyPSogfCAtLW1hbmRpcj0qIHwgLS1tYW5kaT0qIHwgLS1tYW5kPSogfCAtLW1hbj0qIHwgLS1tYT0qIHwgLS1tPSopCisgICAgbWFuZGlyPSRhY19vcHRhcmcgOzsKKworICAtbmZwIHwgLS1uZnAgfCAtLW5mKQorICAgICMgT2Jzb2xldGU7IHVzZSAtLXdpdGhvdXQtZnAuCisgICAgd2l0aF9mcD1ubyA7OworCisgIC1uby1jcmVhdGUgfCAtLW5vLWNyZWF0ZSB8IC0tbm8tY3JlYXQgfCAtLW5vLWNyZWEgfCAtLW5vLWNyZSBcCisgIHwgLS1uby1jciB8IC0tbm8tYyB8IC1uKQorICAgIG5vX2NyZWF0ZT15ZXMgOzsKKworICAtbm8tcmVjdXJzaW9uIHwgLS1uby1yZWN1cnNpb24gfCAtLW5vLXJlY3Vyc2lvIHwgLS1uby1yZWN1cnNpIFwKKyAgfCAtLW5vLXJlY3VycyB8IC0tbm8tcmVjdXIgfCAtLW5vLXJlY3UgfCAtLW5vLXJlYyB8IC0tbm8tcmUgfCAtLW5vLXIpCisgICAgbm9fcmVjdXJzaW9uPXllcyA7OworCisgIC1vbGRpbmNsdWRlZGlyIHwgLS1vbGRpbmNsdWRlZGlyIHwgLS1vbGRpbmNsdWRlZGkgfCAtLW9sZGluY2x1ZGVkIFwKKyAgfCAtLW9sZGluY2x1ZGUgfCAtLW9sZGluY2x1ZCB8IC0tb2xkaW5jbHUgfCAtLW9sZGluY2wgfCAtLW9sZGluYyBcCisgIHwgLS1vbGRpbiB8IC0tb2xkaSB8IC0tb2xkIHwgLS1vbCB8IC0tbykKKyAgICBhY19wcmV2PW9sZGluY2x1ZGVkaXIgOzsKKyAgLW9sZGluY2x1ZGVkaXI9KiB8IC0tb2xkaW5jbHVkZWRpcj0qIHwgLS1vbGRpbmNsdWRlZGk9KiB8IC0tb2xkaW5jbHVkZWQ9KiBcCisgIHwgLS1vbGRpbmNsdWRlPSogfCAtLW9sZGluY2x1ZD0qIHwgLS1vbGRpbmNsdT0qIHwgLS1vbGRpbmNsPSogfCAtLW9sZGluYz0qIFwKKyAgfCAtLW9sZGluPSogfCAtLW9sZGk9KiB8IC0tb2xkPSogfCAtLW9sPSogfCAtLW89KikKKyAgICBvbGRpbmNsdWRlZGlyPSRhY19vcHRhcmcgOzsKKworICAtcHJlZml4IHwgLS1wcmVmaXggfCAtLXByZWZpIHwgLS1wcmVmIHwgLS1wcmUgfCAtLXByIHwgLS1wKQorICAgIGFjX3ByZXY9cHJlZml4IDs7CisgIC1wcmVmaXg9KiB8IC0tcHJlZml4PSogfCAtLXByZWZpPSogfCAtLXByZWY9KiB8IC0tcHJlPSogfCAtLXByPSogfCAtLXA9KikKKyAgICBwcmVmaXg9JGFjX29wdGFyZyA7OworCisgIC1wcm9ncmFtLXByZWZpeCB8IC0tcHJvZ3JhbS1wcmVmaXggfCAtLXByb2dyYW0tcHJlZmkgfCAtLXByb2dyYW0tcHJlZiBcCisgIHwgLS1wcm9ncmFtLXByZSB8IC0tcHJvZ3JhbS1wciB8IC0tcHJvZ3JhbS1wKQorICAgIGFjX3ByZXY9cHJvZ3JhbV9wcmVmaXggOzsKKyAgLXByb2dyYW0tcHJlZml4PSogfCAtLXByb2dyYW0tcHJlZml4PSogfCAtLXByb2dyYW0tcHJlZmk9KiBcCisgIHwgLS1wcm9ncmFtLXByZWY9KiB8IC0tcHJvZ3JhbS1wcmU9KiB8IC0tcHJvZ3JhbS1wcj0qIHwgLS1wcm9ncmFtLXA9KikKKyAgICBwcm9ncmFtX3ByZWZpeD0kYWNfb3B0YXJnIDs7CisKKyAgLXByb2dyYW0tc3VmZml4IHwgLS1wcm9ncmFtLXN1ZmZpeCB8IC0tcHJvZ3JhbS1zdWZmaSB8IC0tcHJvZ3JhbS1zdWZmIFwKKyAgfCAtLXByb2dyYW0tc3VmIHwgLS1wcm9ncmFtLXN1IHwgLS1wcm9ncmFtLXMpCisgICAgYWNfcHJldj1wcm9ncmFtX3N1ZmZpeCA7OworICAtcHJvZ3JhbS1zdWZmaXg9KiB8IC0tcHJvZ3JhbS1zdWZmaXg9KiB8IC0tcHJvZ3JhbS1zdWZmaT0qIFwKKyAgfCAtLXByb2dyYW0tc3VmZj0qIHwgLS1wcm9ncmFtLXN1Zj0qIHwgLS1wcm9ncmFtLXN1PSogfCAtLXByb2dyYW0tcz0qKQorICAgIHByb2dyYW1fc3VmZml4PSRhY19vcHRhcmcgOzsKKworICAtcHJvZ3JhbS10cmFuc2Zvcm0tbmFtZSB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0tbmFtZSBcCisgIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS1uYW0gfCAtLXByb2dyYW0tdHJhbnNmb3JtLW5hIFwKKyAgfCAtLXByb2dyYW0tdHJhbnNmb3JtLW4gfCAtLXByb2dyYW0tdHJhbnNmb3JtLSBcCisgIHwgLS1wcm9ncmFtLXRyYW5zZm9ybSB8IC0tcHJvZ3JhbS10cmFuc2ZvciBcCisgIHwgLS1wcm9ncmFtLXRyYW5zZm8gfCAtLXByb2dyYW0tdHJhbnNmIFwKKyAgfCAtLXByb2dyYW0tdHJhbnMgfCAtLXByb2dyYW0tdHJhbiBcCisgIHwgLS1wcm9nci10cmEgfCAtLXByb2dyYW0tdHIgfCAtLXByb2dyYW0tdCkKKyAgICBhY19wcmV2PXByb2dyYW1fdHJhbnNmb3JtX25hbWUgOzsKKyAgLXByb2dyYW0tdHJhbnNmb3JtLW5hbWU9KiB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0tbmFtZT0qIFwKKyAgfCAtLXByb2dyYW0tdHJhbnNmb3JtLW5hbT0qIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS1uYT0qIFwKKyAgfCAtLXByb2dyYW0tdHJhbnNmb3JtLW49KiB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0tPSogXAorICB8IC0tcHJvZ3JhbS10cmFuc2Zvcm09KiB8IC0tcHJvZ3JhbS10cmFuc2Zvcj0qIFwKKyAgfCAtLXByb2dyYW0tdHJhbnNmbz0qIHwgLS1wcm9ncmFtLXRyYW5zZj0qIFwKKyAgfCAtLXByb2dyYW0tdHJhbnM9KiB8IC0tcHJvZ3JhbS10cmFuPSogXAorICB8IC0tcHJvZ3ItdHJhPSogfCAtLXByb2dyYW0tdHI9KiB8IC0tcHJvZ3JhbS10PSopCisgICAgcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZT0kYWNfb3B0YXJnIDs7CisKKyAgLXBkZmRpciB8IC0tcGRmZGlyIHwgLS1wZGZkaSB8IC0tcGRmZCB8IC0tcGRmIHwgLS1wZCkKKyAgICBhY19wcmV2PXBkZmRpciA7OworICAtcGRmZGlyPSogfCAtLXBkZmRpcj0qIHwgLS1wZGZkaT0qIHwgLS1wZGZkPSogfCAtLXBkZj0qIHwgLS1wZD0qKQorICAgIHBkZmRpcj0kYWNfb3B0YXJnIDs7CisKKyAgLXBzZGlyIHwgLS1wc2RpciB8IC0tcHNkaSB8IC0tcHNkIHwgLS1wcykKKyAgICBhY19wcmV2PXBzZGlyIDs7CisgIC1wc2Rpcj0qIHwgLS1wc2Rpcj0qIHwgLS1wc2RpPSogfCAtLXBzZD0qIHwgLS1wcz0qKQorICAgIHBzZGlyPSRhY19vcHRhcmcgOzsKKworICAtcSB8IC1xdWlldCB8IC0tcXVpZXQgfCAtLXF1aWUgfCAtLXF1aSB8IC0tcXUgfCAtLXEgXAorICB8IC1zaWxlbnQgfCAtLXNpbGVudCB8IC0tc2lsZW4gfCAtLXNpbGUgfCAtLXNpbCkKKyAgICBzaWxlbnQ9eWVzIDs7CisKKyAgLXNiaW5kaXIgfCAtLXNiaW5kaXIgfCAtLXNiaW5kaSB8IC0tc2JpbmQgfCAtLXNiaW4gfCAtLXNiaSB8IC0tc2IpCisgICAgYWNfcHJldj1zYmluZGlyIDs7CisgIC1zYmluZGlyPSogfCAtLXNiaW5kaXI9KiB8IC0tc2JpbmRpPSogfCAtLXNiaW5kPSogfCAtLXNiaW49KiBcCisgIHwgLS1zYmk9KiB8IC0tc2I9KikKKyAgICBzYmluZGlyPSRhY19vcHRhcmcgOzsKKworICAtc2hhcmVkc3RhdGVkaXIgfCAtLXNoYXJlZHN0YXRlZGlyIHwgLS1zaGFyZWRzdGF0ZWRpIFwKKyAgfCAtLXNoYXJlZHN0YXRlZCB8IC0tc2hhcmVkc3RhdGUgfCAtLXNoYXJlZHN0YXQgfCAtLXNoYXJlZHN0YSBcCisgIHwgLS1zaGFyZWRzdCB8IC0tc2hhcmVkcyB8IC0tc2hhcmVkIHwgLS1zaGFyZSB8IC0tc2hhciBcCisgIHwgLS1zaGEgfCAtLXNoKQorICAgIGFjX3ByZXY9c2hhcmVkc3RhdGVkaXIgOzsKKyAgLXNoYXJlZHN0YXRlZGlyPSogfCAtLXNoYXJlZHN0YXRlZGlyPSogfCAtLXNoYXJlZHN0YXRlZGk9KiBcCisgIHwgLS1zaGFyZWRzdGF0ZWQ9KiB8IC0tc2hhcmVkc3RhdGU9KiB8IC0tc2hhcmVkc3RhdD0qIHwgLS1zaGFyZWRzdGE9KiBcCisgIHwgLS1zaGFyZWRzdD0qIHwgLS1zaGFyZWRzPSogfCAtLXNoYXJlZD0qIHwgLS1zaGFyZT0qIHwgLS1zaGFyPSogXAorICB8IC0tc2hhPSogfCAtLXNoPSopCisgICAgc2hhcmVkc3RhdGVkaXI9JGFjX29wdGFyZyA7OworCisgIC1zaXRlIHwgLS1zaXRlIHwgLS1zaXQpCisgICAgYWNfcHJldj1zaXRlIDs7CisgIC1zaXRlPSogfCAtLXNpdGU9KiB8IC0tc2l0PSopCisgICAgc2l0ZT0kYWNfb3B0YXJnIDs7CisKKyAgLXNyY2RpciB8IC0tc3JjZGlyIHwgLS1zcmNkaSB8IC0tc3JjZCB8IC0tc3JjIHwgLS1zcikKKyAgICBhY19wcmV2PXNyY2RpciA7OworICAtc3JjZGlyPSogfCAtLXNyY2Rpcj0qIHwgLS1zcmNkaT0qIHwgLS1zcmNkPSogfCAtLXNyYz0qIHwgLS1zcj0qKQorICAgIHNyY2Rpcj0kYWNfb3B0YXJnIDs7CisKKyAgLXN5c2NvbmZkaXIgfCAtLXN5c2NvbmZkaXIgfCAtLXN5c2NvbmZkaSB8IC0tc3lzY29uZmQgfCAtLXN5c2NvbmYgXAorICB8IC0tc3lzY29uIHwgLS1zeXNjbyB8IC0tc3lzYyB8IC0tc3lzIHwgLS1zeSkKKyAgICBhY19wcmV2PXN5c2NvbmZkaXIgOzsKKyAgLXN5c2NvbmZkaXI9KiB8IC0tc3lzY29uZmRpcj0qIHwgLS1zeXNjb25mZGk9KiB8IC0tc3lzY29uZmQ9KiB8IC0tc3lzY29uZj0qIFwKKyAgfCAtLXN5c2Nvbj0qIHwgLS1zeXNjbz0qIHwgLS1zeXNjPSogfCAtLXN5cz0qIHwgLS1zeT0qKQorICAgIHN5c2NvbmZkaXI9JGFjX29wdGFyZyA7OworCisgIC10YXJnZXQgfCAtLXRhcmdldCB8IC0tdGFyZ2UgfCAtLXRhcmcgfCAtLXRhciB8IC0tdGEgfCAtLXQpCisgICAgYWNfcHJldj10YXJnZXRfYWxpYXMgOzsKKyAgLXRhcmdldD0qIHwgLS10YXJnZXQ9KiB8IC0tdGFyZ2U9KiB8IC0tdGFyZz0qIHwgLS10YXI9KiB8IC0tdGE9KiB8IC0tdD0qKQorICAgIHRhcmdldF9hbGlhcz0kYWNfb3B0YXJnIDs7CisKKyAgLXYgfCAtdmVyYm9zZSB8IC0tdmVyYm9zZSB8IC0tdmVyYm9zIHwgLS12ZXJibyB8IC0tdmVyYikKKyAgICB2ZXJib3NlPXllcyA7OworCisgIC12ZXJzaW9uIHwgLS12ZXJzaW9uIHwgLS12ZXJzaW8gfCAtLXZlcnNpIHwgLS12ZXJzIHwgLVYpCisgICAgYWNfaW5pdF92ZXJzaW9uPTogOzsKKworICAtd2l0aC0qIHwgLS13aXRoLSopCisgICAgYWNfdXNlcm9wdD1gZXhwciAieCRhY19vcHRpb24iIDogJ3gtKndpdGgtXChbXj1dKlwpJ2AKKyAgICAjIFJlamVjdCBuYW1lcyB0aGF0IGFyZSBub3QgdmFsaWQgc2hlbGwgdmFyaWFibGUgbmFtZXMuCisgICAgZXhwciAieCRhY191c2Vyb3B0IiA6ICIuKlteLSsuXyRhc19jcl9hbG51bV0iID4vZGV2L251bGwgJiYKKyAgICAgIGFzX2ZuX2Vycm9yICQ/ICJpbnZhbGlkIHBhY2thZ2UgbmFtZTogJGFjX3VzZXJvcHQiCisgICAgYWNfdXNlcm9wdF9vcmlnPSRhY191c2Vyb3B0CisgICAgYWNfdXNlcm9wdD1gJGFzX2VjaG8gIiRhY191c2Vyb3B0IiB8IHNlZCAncy9bLSsuXS9fL2cnYAorICAgIGNhc2UgJGFjX3VzZXJfb3B0cyBpbgorICAgICAgKiIKKyJ3aXRoXyRhY191c2Vyb3B0IgorIiopIDs7CisgICAgICAqKSBhY191bnJlY29nbml6ZWRfb3B0cz0iJGFjX3VucmVjb2duaXplZF9vcHRzJGFjX3VucmVjb2duaXplZF9zZXAtLXdpdGgtJGFjX3VzZXJvcHRfb3JpZyIKKwkgYWNfdW5yZWNvZ25pemVkX3NlcD0nLCAnOzsKKyAgICBlc2FjCisgICAgZXZhbCB3aXRoXyRhY191c2Vyb3B0PVwkYWNfb3B0YXJnIDs7CisKKyAgLXdpdGhvdXQtKiB8IC0td2l0aG91dC0qKQorICAgIGFjX3VzZXJvcHQ9YGV4cHIgIngkYWNfb3B0aW9uIiA6ICd4LSp3aXRob3V0LVwoLipcKSdgCisgICAgIyBSZWplY3QgbmFtZXMgdGhhdCBhcmUgbm90IHZhbGlkIHNoZWxsIHZhcmlhYmxlIG5hbWVzLgorICAgIGV4cHIgIngkYWNfdXNlcm9wdCIgOiAiLipbXi0rLl8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCisgICAgICBhc19mbl9lcnJvciAkPyAiaW52YWxpZCBwYWNrYWdlIG5hbWU6ICRhY191c2Vyb3B0IgorICAgIGFjX3VzZXJvcHRfb3JpZz0kYWNfdXNlcm9wdAorICAgIGFjX3VzZXJvcHQ9YCRhc19lY2hvICIkYWNfdXNlcm9wdCIgfCBzZWQgJ3MvWy0rLl0vXy9nJ2AKKyAgICBjYXNlICRhY191c2VyX29wdHMgaW4KKyAgICAgICoiCisid2l0aF8kYWNfdXNlcm9wdCIKKyIqKSA7OworICAgICAgKikgYWNfdW5yZWNvZ25pemVkX29wdHM9IiRhY191bnJlY29nbml6ZWRfb3B0cyRhY191bnJlY29nbml6ZWRfc2VwLS13aXRob3V0LSRhY191c2Vyb3B0X29yaWciCisJIGFjX3VucmVjb2duaXplZF9zZXA9JywgJzs7CisgICAgZXNhYworICAgIGV2YWwgd2l0aF8kYWNfdXNlcm9wdD1ubyA7OworCisgIC0teCkKKyAgICAjIE9ic29sZXRlOyB1c2UgLS13aXRoLXguCisgICAgd2l0aF94PXllcyA7OworCisgIC14LWluY2x1ZGVzIHwgLS14LWluY2x1ZGVzIHwgLS14LWluY2x1ZGUgfCAtLXgtaW5jbHVkIHwgLS14LWluY2x1IFwKKyAgfCAtLXgtaW5jbCB8IC0teC1pbmMgfCAtLXgtaW4gfCAtLXgtaSkKKyAgICBhY19wcmV2PXhfaW5jbHVkZXMgOzsKKyAgLXgtaW5jbHVkZXM9KiB8IC0teC1pbmNsdWRlcz0qIHwgLS14LWluY2x1ZGU9KiB8IC0teC1pbmNsdWQ9KiB8IC0teC1pbmNsdT0qIFwKKyAgfCAtLXgtaW5jbD0qIHwgLS14LWluYz0qIHwgLS14LWluPSogfCAtLXgtaT0qKQorICAgIHhfaW5jbHVkZXM9JGFjX29wdGFyZyA7OworCisgIC14LWxpYnJhcmllcyB8IC0teC1saWJyYXJpZXMgfCAtLXgtbGlicmFyaWUgfCAtLXgtbGlicmFyaSBcCisgIHwgLS14LWxpYnJhciB8IC0teC1saWJyYSB8IC0teC1saWJyIHwgLS14LWxpYiB8IC0teC1saSB8IC0teC1sKQorICAgIGFjX3ByZXY9eF9saWJyYXJpZXMgOzsKKyAgLXgtbGlicmFyaWVzPSogfCAtLXgtbGlicmFyaWVzPSogfCAtLXgtbGlicmFyaWU9KiB8IC0teC1saWJyYXJpPSogXAorICB8IC0teC1saWJyYXI9KiB8IC0teC1saWJyYT0qIHwgLS14LWxpYnI9KiB8IC0teC1saWI9KiB8IC0teC1saT0qIHwgLS14LWw9KikKKyAgICB4X2xpYnJhcmllcz0kYWNfb3B0YXJnIDs7CisKKyAgLSopIGFzX2ZuX2Vycm9yICQ/ICJ1bnJlY29nbml6ZWQgb3B0aW9uOiBcYCRhY19vcHRpb24nCitUcnkgXGAkMCAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uIgorICAgIDs7CisKKyAgKj0qKQorICAgIGFjX2VudnZhcj1gZXhwciAieCRhY19vcHRpb24iIDogJ3hcKFtePV0qXCk9J2AKKyAgICAjIFJlamVjdCBuYW1lcyB0aGF0IGFyZSBub3QgdmFsaWQgc2hlbGwgdmFyaWFibGUgbmFtZXMuCisgICAgY2FzZSAkYWNfZW52dmFyIGluICMoCisgICAgICAnJyB8IFswLTldKiB8ICpbIV8kYXNfY3JfYWxudW1dKiApCisgICAgICBhc19mbl9lcnJvciAkPyAiaW52YWxpZCB2YXJpYWJsZSBuYW1lOiBcYCRhY19lbnZ2YXInIiA7OworICAgIGVzYWMKKyAgICBldmFsICRhY19lbnZ2YXI9XCRhY19vcHRhcmcKKyAgICBleHBvcnQgJGFjX2VudnZhciA7OworCisgICopCisgICAgIyBGSVhNRTogc2hvdWxkIGJlIHJlbW92ZWQgaW4gYXV0b2NvbmYgMy4wLgorICAgICRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHlvdSBzaG91bGQgdXNlIC0tYnVpbGQsIC0taG9zdCwgLS10YXJnZXQiID4mMgorICAgIGV4cHIgIngkYWNfb3B0aW9uIiA6ICIuKlteLS5fJGFzX2NyX2FsbnVtXSIgPi9kZXYvbnVsbCAmJgorICAgICAgJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogaW52YWxpZCBob3N0IHR5cGU6ICRhY19vcHRpb24iID4mMgorICAgIDogJHtidWlsZF9hbGlhcz0kYWNfb3B0aW9ufSAke2hvc3RfYWxpYXM9JGFjX29wdGlvbn0gJHt0YXJnZXRfYWxpYXM9JGFjX29wdGlvbn0KKyAgICA7OworCisgIGVzYWMKK2RvbmUKKworaWYgdGVzdCAtbiAiJGFjX3ByZXYiOyB0aGVuCisgIGFjX29wdGlvbj0tLWBlY2hvICRhY19wcmV2IHwgc2VkICdzL18vLS9nJ2AKKyAgYXNfZm5fZXJyb3IgJD8gIm1pc3NpbmcgYXJndW1lbnQgdG8gJGFjX29wdGlvbiIKK2ZpCisKK2lmIHRlc3QgLW4gIiRhY191bnJlY29nbml6ZWRfb3B0cyI7IHRoZW4KKyAgY2FzZSAkZW5hYmxlX29wdGlvbl9jaGVja2luZyBpbgorICAgIG5vKSA7OworICAgIGZhdGFsKSBhc19mbl9lcnJvciAkPyAidW5yZWNvZ25pemVkIG9wdGlvbnM6ICRhY191bnJlY29nbml6ZWRfb3B0cyIgOzsKKyAgICAqKSAgICAgJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdW5yZWNvZ25pemVkIG9wdGlvbnM6ICRhY191bnJlY29nbml6ZWRfb3B0cyIgPiYyIDs7CisgIGVzYWMKK2ZpCisKKyMgQ2hlY2sgYWxsIGRpcmVjdG9yeSBhcmd1bWVudHMgZm9yIGNvbnNpc3RlbmN5LgorZm9yIGFjX3ZhciBpbglleGVjX3ByZWZpeCBwcmVmaXggYmluZGlyIHNiaW5kaXIgbGliZXhlY2RpciBkYXRhcm9vdGRpciBcCisJCWRhdGFkaXIgc3lzY29uZmRpciBzaGFyZWRzdGF0ZWRpciBsb2NhbHN0YXRlZGlyIGluY2x1ZGVkaXIgXAorCQlvbGRpbmNsdWRlZGlyIGRvY2RpciBpbmZvZGlyIGh0bWxkaXIgZHZpZGlyIHBkZmRpciBwc2RpciBcCisJCWxpYmRpciBsb2NhbGVkaXIgbWFuZGlyCitkbworICBldmFsIGFjX3ZhbD1cJCRhY192YXIKKyAgIyBSZW1vdmUgdHJhaWxpbmcgc2xhc2hlcy4KKyAgY2FzZSAkYWNfdmFsIGluCisgICAgKi8gKQorICAgICAgYWNfdmFsPWBleHByICJYJGFjX3ZhbCIgOiAnWFwoLipbXi9dXCknIFx8ICJYJGFjX3ZhbCIgOiAnWFwoLipcKSdgCisgICAgICBldmFsICRhY192YXI9XCRhY192YWw7OworICBlc2FjCisgICMgQmUgc3VyZSB0byBoYXZlIGFic29sdXRlIGRpcmVjdG9yeSBuYW1lcy4KKyAgY2FzZSAkYWNfdmFsIGluCisgICAgW1xcLyRdKiB8ID86W1xcL10qICkgIGNvbnRpbnVlOzsKKyAgICBOT05FIHwgJycgKSBjYXNlICRhY192YXIgaW4gKnByZWZpeCApIGNvbnRpbnVlOzsgZXNhYzs7CisgIGVzYWMKKyAgYXNfZm5fZXJyb3IgJD8gImV4cGVjdGVkIGFuIGFic29sdXRlIGRpcmVjdG9yeSBuYW1lIGZvciAtLSRhY192YXI6ICRhY192YWwiCitkb25lCisKKyMgVGhlcmUgbWlnaHQgYmUgcGVvcGxlIHdobyBkZXBlbmQgb24gdGhlIG9sZCBicm9rZW4gYmVoYXZpb3I6IGAkaG9zdCcKKyMgdXNlZCB0byBob2xkIHRoZSBhcmd1bWVudCBvZiAtLWhvc3QgZXRjLgorIyBGSVhNRTogVG8gcmVtb3ZlIHNvbWUgZGF5LgorYnVpbGQ9JGJ1aWxkX2FsaWFzCitob3N0PSRob3N0X2FsaWFzCit0YXJnZXQ9JHRhcmdldF9hbGlhcworCisjIEZJWE1FOiBUbyByZW1vdmUgc29tZSBkYXkuCitpZiB0ZXN0ICJ4JGhvc3RfYWxpYXMiICE9IHg7IHRoZW4KKyAgaWYgdGVzdCAieCRidWlsZF9hbGlhcyIgPSB4OyB0aGVuCisgICAgY3Jvc3NfY29tcGlsaW5nPW1heWJlCisgICAgJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogaWYgeW91IHdhbnRlZCB0byBzZXQgdGhlIC0tYnVpbGQgdHlwZSwgZG9uJ3QgdXNlIC0taG9zdC4KKyAgICBJZiBhIGNyb3NzIGNvbXBpbGVyIGlzIGRldGVjdGVkIHRoZW4gY3Jvc3MgY29tcGlsZSBtb2RlIHdpbGwgYmUgdXNlZCIgPiYyCisgIGVsaWYgdGVzdCAieCRidWlsZF9hbGlhcyIgIT0gIngkaG9zdF9hbGlhcyI7IHRoZW4KKyAgICBjcm9zc19jb21waWxpbmc9eWVzCisgIGZpCitmaQorCithY190b29sX3ByZWZpeD0KK3Rlc3QgLW4gIiRob3N0X2FsaWFzIiAmJiBhY190b29sX3ByZWZpeD0kaG9zdF9hbGlhcy0KKwordGVzdCAiJHNpbGVudCIgPSB5ZXMgJiYgZXhlYyA2Pi9kZXYvbnVsbAorCisKK2FjX3B3ZD1gcHdkYCAmJiB0ZXN0IC1uICIkYWNfcHdkIiAmJgorYWNfbHNfZGk9YGxzIC1kaSAuYCAmJgorYWNfcHdkX2xzX2RpPWBjZCAiJGFjX3B3ZCIgJiYgbHMgLWRpIC5gIHx8CisgIGFzX2ZuX2Vycm9yICQ/ICJ3b3JraW5nIGRpcmVjdG9yeSBjYW5ub3QgYmUgZGV0ZXJtaW5lZCIKK3Rlc3QgIlgkYWNfbHNfZGkiID0gIlgkYWNfcHdkX2xzX2RpIiB8fAorICBhc19mbl9lcnJvciAkPyAicHdkIGRvZXMgbm90IHJlcG9ydCBuYW1lIG9mIHdvcmtpbmcgZGlyZWN0b3J5IgorCisKKyMgRmluZCB0aGUgc291cmNlIGZpbGVzLCBpZiBsb2NhdGlvbiB3YXMgbm90IHNwZWNpZmllZC4KK2lmIHRlc3QgLXogIiRzcmNkaXIiOyB0aGVuCisgIGFjX3NyY2Rpcl9kZWZhdWx0ZWQ9eWVzCisgICMgVHJ5IHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGlzIHNjcmlwdCwgdGhlbiB0aGUgcGFyZW50IGRpcmVjdG9yeS4KKyAgYWNfY29uZmRpcj1gJGFzX2Rpcm5hbWUgLS0gIiRhc19teXNlbGYiIHx8CiskYXNfZXhwciBYIiRhc19teXNlbGYiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCisJIFgiJGFzX215c2VsZiIgOiAnWFwoLy9cKVteL10nIFx8IFwKKwkgWCIkYXNfbXlzZWxmIiA6ICdYXCgvL1wpJCcgXHwgXAorCSBYIiRhc19teXNlbGYiIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAorJGFzX2VjaG8gWCIkYXNfbXlzZWxmIiB8CisgICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cL1wpW14vXS4qL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cL1wpJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXCkuKi97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICBzLy4qLy4vOyBxJ2AKKyAgc3JjZGlyPSRhY19jb25mZGlyCisgIGlmIHRlc3QgISAtciAiJHNyY2Rpci8kYWNfdW5pcXVlX2ZpbGUiOyB0aGVuCisgICAgc3JjZGlyPS4uCisgIGZpCitlbHNlCisgIGFjX3NyY2Rpcl9kZWZhdWx0ZWQ9bm8KK2ZpCitpZiB0ZXN0ICEgLXIgIiRzcmNkaXIvJGFjX3VuaXF1ZV9maWxlIjsgdGhlbgorICB0ZXN0ICIkYWNfc3JjZGlyX2RlZmF1bHRlZCIgPSB5ZXMgJiYgc3JjZGlyPSIkYWNfY29uZmRpciBvciAuLiIKKyAgYXNfZm5fZXJyb3IgJD8gImNhbm5vdCBmaW5kIHNvdXJjZXMgKCRhY191bmlxdWVfZmlsZSkgaW4gJHNyY2RpciIKK2ZpCithY19tc2c9InNvdXJjZXMgYXJlIGluICRzcmNkaXIsIGJ1dCBcYGNkICRzcmNkaXInIGRvZXMgbm90IHdvcmsiCithY19hYnNfY29uZmRpcj1gKAorCWNkICIkc3JjZGlyIiAmJiB0ZXN0IC1yICIuLyRhY191bmlxdWVfZmlsZSIgfHwgYXNfZm5fZXJyb3IgJD8gIiRhY19tc2ciCisJcHdkKWAKKyMgV2hlbiBidWlsZGluZyBpbiBwbGFjZSwgc2V0IHNyY2Rpcj0uCitpZiB0ZXN0ICIkYWNfYWJzX2NvbmZkaXIiID0gIiRhY19wd2QiOyB0aGVuCisgIHNyY2Rpcj0uCitmaQorIyBSZW1vdmUgdW5uZWNlc3NhcnkgdHJhaWxpbmcgc2xhc2hlcyBmcm9tIHNyY2Rpci4KKyMgRG91YmxlIHNsYXNoZXMgaW4gZmlsZSBuYW1lcyBpbiBvYmplY3QgZmlsZSBkZWJ1Z2dpbmcgaW5mbworIyBtZXNzIHVwIE0teCBnZGIgaW4gRW1hY3MuCitjYXNlICRzcmNkaXIgaW4KKyovKSBzcmNkaXI9YGV4cHIgIlgkc3JjZGlyIiA6ICdYXCguKlteL11cKScgXHwgIlgkc3JjZGlyIiA6ICdYXCguKlwpJ2A7OworZXNhYworZm9yIGFjX3ZhciBpbiAkYWNfcHJlY2lvdXNfdmFyczsgZG8KKyAgZXZhbCBhY19lbnZfJHthY192YXJ9X3NldD1cJHske2FjX3Zhcn0rc2V0fQorICBldmFsIGFjX2Vudl8ke2FjX3Zhcn1fdmFsdWU9XCQke2FjX3Zhcn0KKyAgZXZhbCBhY19jdl9lbnZfJHthY192YXJ9X3NldD1cJHske2FjX3Zhcn0rc2V0fQorICBldmFsIGFjX2N2X2Vudl8ke2FjX3Zhcn1fdmFsdWU9XCQke2FjX3Zhcn0KK2RvbmUKKworIworIyBSZXBvcnQgdGhlIC0taGVscCBtZXNzYWdlLgorIworaWYgdGVzdCAiJGFjX2luaXRfaGVscCIgPSAibG9uZyI7IHRoZW4KKyAgIyBPbWl0IHNvbWUgaW50ZXJuYWwgb3Igb2Jzb2xldGUgb3B0aW9ucyB0byBtYWtlIHRoZSBsaXN0IGxlc3MgaW1wb3NpbmcuCisgICMgVGhpcyBtZXNzYWdlIGlzIHRvbyBsb25nIHRvIGJlIGEgc3RyaW5nIGluIHRoZSBBL1VYIDMuMSBzaC4KKyAgY2F0IDw8X0FDRU9GCitcYGNvbmZpZ3VyZScgY29uZmlndXJlcyB0aGlzIHBhY2thZ2UgdG8gYWRhcHQgdG8gbWFueSBraW5kcyBvZiBzeXN0ZW1zLgorCitVc2FnZTogJDAgW09QVElPTl0uLi4gW1ZBUj1WQUxVRV0uLi4KKworVG8gYXNzaWduIGVudmlyb25tZW50IHZhcmlhYmxlcyAoZS5nLiwgQ0MsIENGTEFHUy4uLiksIHNwZWNpZnkgdGhlbSBhcworVkFSPVZBTFVFLiAgU2VlIGJlbG93IGZvciBkZXNjcmlwdGlvbnMgb2Ygc29tZSBvZiB0aGUgdXNlZnVsIHZhcmlhYmxlcy4KKworRGVmYXVsdHMgZm9yIHRoZSBvcHRpb25zIGFyZSBzcGVjaWZpZWQgaW4gYnJhY2tldHMuCisKK0NvbmZpZ3VyYXRpb246CisgIC1oLCAtLWhlbHAgICAgICAgICAgICAgIGRpc3BsYXkgdGhpcyBoZWxwIGFuZCBleGl0CisgICAgICAtLWhlbHA9c2hvcnQgICAgICAgIGRpc3BsYXkgb3B0aW9ucyBzcGVjaWZpYyB0byB0aGlzIHBhY2thZ2UKKyAgICAgIC0taGVscD1yZWN1cnNpdmUgICAgZGlzcGxheSB0aGUgc2hvcnQgaGVscCBvZiBhbGwgdGhlIGluY2x1ZGVkIHBhY2thZ2VzCisgIC1WLCAtLXZlcnNpb24gICAgICAgICAgIGRpc3BsYXkgdmVyc2lvbiBpbmZvcm1hdGlvbiBhbmQgZXhpdAorICAtcSwgLS1xdWlldCwgLS1zaWxlbnQgICBkbyBub3QgcHJpbnQgXGBjaGVja2luZyAuLi4nIG1lc3NhZ2VzCisgICAgICAtLWNhY2hlLWZpbGU9RklMRSAgIGNhY2hlIHRlc3QgcmVzdWx0cyBpbiBGSUxFIFtkaXNhYmxlZF0KKyAgLUMsIC0tY29uZmlnLWNhY2hlICAgICAgYWxpYXMgZm9yIFxgLS1jYWNoZS1maWxlPWNvbmZpZy5jYWNoZScKKyAgLW4sIC0tbm8tY3JlYXRlICAgICAgICAgZG8gbm90IGNyZWF0ZSBvdXRwdXQgZmlsZXMKKyAgICAgIC0tc3JjZGlyPURJUiAgICAgICAgZmluZCB0aGUgc291cmNlcyBpbiBESVIgW2NvbmZpZ3VyZSBkaXIgb3IgXGAuLiddCisKK0luc3RhbGxhdGlvbiBkaXJlY3RvcmllczoKKyAgLS1wcmVmaXg9UFJFRklYICAgICAgICAgaW5zdGFsbCBhcmNoaXRlY3R1cmUtaW5kZXBlbmRlbnQgZmlsZXMgaW4gUFJFRklYCisgICAgICAgICAgICAgICAgICAgICAgICAgIFskYWNfZGVmYXVsdF9wcmVmaXhdCisgIC0tZXhlYy1wcmVmaXg9RVBSRUZJWCAgIGluc3RhbGwgYXJjaGl0ZWN0dXJlLWRlcGVuZGVudCBmaWxlcyBpbiBFUFJFRklYCisgICAgICAgICAgICAgICAgICAgICAgICAgIFtQUkVGSVhdCisKK0J5IGRlZmF1bHQsIFxgbWFrZSBpbnN0YWxsJyB3aWxsIGluc3RhbGwgYWxsIHRoZSBmaWxlcyBpbgorXGAkYWNfZGVmYXVsdF9wcmVmaXgvYmluJywgXGAkYWNfZGVmYXVsdF9wcmVmaXgvbGliJyBldGMuICBZb3UgY2FuIHNwZWNpZnkKK2FuIGluc3RhbGxhdGlvbiBwcmVmaXggb3RoZXIgdGhhbiBcYCRhY19kZWZhdWx0X3ByZWZpeCcgdXNpbmcgXGAtLXByZWZpeCcsCitmb3IgaW5zdGFuY2UgXGAtLXByZWZpeD1cJEhPTUUnLgorCitGb3IgYmV0dGVyIGNvbnRyb2wsIHVzZSB0aGUgb3B0aW9ucyBiZWxvdy4KKworRmluZSB0dW5pbmcgb2YgdGhlIGluc3RhbGxhdGlvbiBkaXJlY3RvcmllczoKKyAgLS1iaW5kaXI9RElSICAgICAgICAgICAgdXNlciBleGVjdXRhYmxlcyBbRVBSRUZJWC9iaW5dCisgIC0tc2JpbmRpcj1ESVIgICAgICAgICAgIHN5c3RlbSBhZG1pbiBleGVjdXRhYmxlcyBbRVBSRUZJWC9zYmluXQorICAtLWxpYmV4ZWNkaXI9RElSICAgICAgICBwcm9ncmFtIGV4ZWN1dGFibGVzIFtFUFJFRklYL2xpYmV4ZWNdCisgIC0tc3lzY29uZmRpcj1ESVIgICAgICAgIHJlYWQtb25seSBzaW5nbGUtbWFjaGluZSBkYXRhIFtQUkVGSVgvZXRjXQorICAtLXNoYXJlZHN0YXRlZGlyPURJUiAgICBtb2RpZmlhYmxlIGFyY2hpdGVjdHVyZS1pbmRlcGVuZGVudCBkYXRhIFtQUkVGSVgvY29tXQorICAtLWxvY2Fsc3RhdGVkaXI9RElSICAgICBtb2RpZmlhYmxlIHNpbmdsZS1tYWNoaW5lIGRhdGEgW1BSRUZJWC92YXJdCisgIC0tbGliZGlyPURJUiAgICAgICAgICAgIG9iamVjdCBjb2RlIGxpYnJhcmllcyBbRVBSRUZJWC9saWJdCisgIC0taW5jbHVkZWRpcj1ESVIgICAgICAgIEMgaGVhZGVyIGZpbGVzIFtQUkVGSVgvaW5jbHVkZV0KKyAgLS1vbGRpbmNsdWRlZGlyPURJUiAgICAgQyBoZWFkZXIgZmlsZXMgZm9yIG5vbi1nY2MgWy91c3IvaW5jbHVkZV0KKyAgLS1kYXRhcm9vdGRpcj1ESVIgICAgICAgcmVhZC1vbmx5IGFyY2guLWluZGVwZW5kZW50IGRhdGEgcm9vdCBbUFJFRklYL3NoYXJlXQorICAtLWRhdGFkaXI9RElSICAgICAgICAgICByZWFkLW9ubHkgYXJjaGl0ZWN0dXJlLWluZGVwZW5kZW50IGRhdGEgW0RBVEFST09URElSXQorICAtLWluZm9kaXI9RElSICAgICAgICAgICBpbmZvIGRvY3VtZW50YXRpb24gW0RBVEFST09URElSL2luZm9dCisgIC0tbG9jYWxlZGlyPURJUiAgICAgICAgIGxvY2FsZS1kZXBlbmRlbnQgZGF0YSBbREFUQVJPT1RESVIvbG9jYWxlXQorICAtLW1hbmRpcj1ESVIgICAgICAgICAgICBtYW4gZG9jdW1lbnRhdGlvbiBbREFUQVJPT1RESVIvbWFuXQorICAtLWRvY2Rpcj1ESVIgICAgICAgICAgICBkb2N1bWVudGF0aW9uIHJvb3QgW0RBVEFST09URElSL2RvYy9QQUNLQUdFXQorICAtLWh0bWxkaXI9RElSICAgICAgICAgICBodG1sIGRvY3VtZW50YXRpb24gW0RPQ0RJUl0KKyAgLS1kdmlkaXI9RElSICAgICAgICAgICAgZHZpIGRvY3VtZW50YXRpb24gW0RPQ0RJUl0KKyAgLS1wZGZkaXI9RElSICAgICAgICAgICAgcGRmIGRvY3VtZW50YXRpb24gW0RPQ0RJUl0KKyAgLS1wc2Rpcj1ESVIgICAgICAgICAgICAgcHMgZG9jdW1lbnRhdGlvbiBbRE9DRElSXQorX0FDRU9GCisKKyAgY2F0IDw8XF9BQ0VPRgorCitQcm9ncmFtIG5hbWVzOgorICAtLXByb2dyYW0tcHJlZml4PVBSRUZJWCAgICAgICAgICAgIHByZXBlbmQgUFJFRklYIHRvIGluc3RhbGxlZCBwcm9ncmFtIG5hbWVzCisgIC0tcHJvZ3JhbS1zdWZmaXg9U1VGRklYICAgICAgICAgICAgYXBwZW5kIFNVRkZJWCB0byBpbnN0YWxsZWQgcHJvZ3JhbSBuYW1lcworICAtLXByb2dyYW0tdHJhbnNmb3JtLW5hbWU9UFJPR1JBTSAgIHJ1biBzZWQgUFJPR1JBTSBvbiBpbnN0YWxsZWQgcHJvZ3JhbSBuYW1lcworCitYIGZlYXR1cmVzOgorICAtLXgtaW5jbHVkZXM9RElSICAgIFggaW5jbHVkZSBmaWxlcyBhcmUgaW4gRElSCisgIC0teC1saWJyYXJpZXM9RElSICAgWCBsaWJyYXJ5IGZpbGVzIGFyZSBpbiBESVIKKworU3lzdGVtIHR5cGVzOgorICAtLWJ1aWxkPUJVSUxEICAgICBjb25maWd1cmUgZm9yIGJ1aWxkaW5nIG9uIEJVSUxEIFtndWVzc2VkXQorICAtLWhvc3Q9SE9TVCAgICAgICBjcm9zcy1jb21waWxlIHRvIGJ1aWxkIHByb2dyYW1zIHRvIHJ1biBvbiBIT1NUIFtCVUlMRF0KK19BQ0VPRgorZmkKKworaWYgdGVzdCAtbiAiJGFjX2luaXRfaGVscCI7IHRoZW4KKworICBjYXQgPDxcX0FDRU9GCisKK09wdGlvbmFsIEZlYXR1cmVzOgorICAtLWRpc2FibGUtb3B0aW9uLWNoZWNraW5nICBpZ25vcmUgdW5yZWNvZ25pemVkIC0tZW5hYmxlLy0td2l0aCBvcHRpb25zCisgIC0tZGlzYWJsZS1GRUFUVVJFICAgICAgIGRvIG5vdCBpbmNsdWRlIEZFQVRVUkUgKHNhbWUgYXMgLS1lbmFibGUtRkVBVFVSRT1ubykKKyAgLS1lbmFibGUtRkVBVFVSRVs9QVJHXSAgaW5jbHVkZSBGRUFUVVJFIFtBUkc9eWVzXQorICAtLWRpc2FibGUtZGVwZW5kZW5jeS10cmFja2luZyAgc3BlZWRzIHVwIG9uZS10aW1lIGJ1aWxkCisgIC0tZW5hYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmcgICBkbyBub3QgcmVqZWN0IHNsb3cgZGVwZW5kZW5jeSBleHRyYWN0b3JzCisgIC0tZW5hYmxlLXNoYXJlZFs9UEtHU10gIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMgW2RlZmF1bHQ9eWVzXQorICAtLWVuYWJsZS1zdGF0aWNbPVBLR1NdICBidWlsZCBzdGF0aWMgbGlicmFyaWVzIFtkZWZhdWx0PXllc10KKyAgLS1lbmFibGUtZmFzdC1pbnN0YWxsWz1QS0dTXQorICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpbWl6ZSBmb3IgZmFzdCBpbnN0YWxsYXRpb24gW2RlZmF1bHQ9eWVzXQorICAtLWRpc2FibGUtbGlidG9vbC1sb2NrICBhdm9pZCBsb2NraW5nIChtaWdodCBicmVhayBwYXJhbGxlbCBidWlsZHMpCisgIC0tZW5hYmxlLWd1aSAgY29tcGlsZSB3aXRoIGd1aSBjb21wb25lbnQgKHF0M3xxdDR8eWVzfG5vKSwKKwkJICAgICBpZiBub3QgZ2l2ZW4gb3Igc2V0IHRvIHllcywgZ3VpIGRlZmF1bHRzIHRvIHF0MworICAtLWVuYWJsZS1wY2ggICAgICAgICAgICAgICAgIGVuYWJsZSBwcmVjb21waWxlZCBoZWFkZXIgKGRlZmF1bHQgaXMgZGlzYWJsZWQpCisgIC0tZW5hYmxlLWdjb3YgICAgICAgICAgICAgICAgZW5hYmxlIG9wdGlvbiBmb3IgZ2NvdiBjb3ZlcmFnZSB0ZXN0aW5nIChkZWZhdWx0IGlzIGRpc2FibGVkKQorICAtLWRpc2FibGUtd2Vycm9yICAgICAgICAgICAgZGlzYWJsZSAtV2Vycm9yIGZsYWcgKGRlZmF1bHQgaXMgZW5hYmxlZCBmb3Igbm9uLXJlbGVhc2UpCisgIC0tZGlzYWJsZS1vcHRpbWl6YXRpb24gICAgICBkaXNhYmxlIG9wdGltaXphdGlvbiBmbGFncyAoZGVmYXVsdCBpcyBlbmFibGVkKQorICAtLWRpc2FibGUtYWNjb3VudC1jaGVjayAgICAgZGlzYWJsZSBhY2NvdW50IGNoZWNrIChkZWZhdWx0IGlzIGVuYWJsZWQpCisKK09wdGlvbmFsIFBhY2thZ2VzOgorICAtLXdpdGgtUEFDS0FHRVs9QVJHXSAgICB1c2UgUEFDS0FHRSBbQVJHPXllc10KKyAgLS13aXRob3V0LVBBQ0tBR0UgICAgICAgZG8gbm90IHVzZSBQQUNLQUdFIChzYW1lIGFzIC0td2l0aC1QQUNLQUdFPW5vKQorICAtLXdpdGgtcGljICAgICAgICAgICAgICB0cnkgdG8gdXNlIG9ubHkgUElDL25vbi1QSUMgb2JqZWN0cyBbZGVmYXVsdD11c2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYm90aF0KKyAgLS13aXRoLWdudS1sZCAgICAgICAgICAgYXNzdW1lIHRoZSBDIGNvbXBpbGVyIHVzZXMgR05VIGxkIFtkZWZhdWx0PW5vXQorICAtLXdpdGgtYmludXRpbHM9ZGlyCQlQYXRoIHRvIGJpbnV0aWxzIGluc3RhbGxhdGlvbiB0byB1c2UKKyAgLS13aXRoLWJpbnV0aWxzLWxpYm5hbWUgICAgICAgTGliIGRpciBuYW1lIHVuZGVyIGJpbnV0aWxzIGluc3RhbGxhdGlvbjsgW2xpYl1dCisgIC0td2l0aC1nY2M9ZGlyCQlQYXRoIHRvIEdDQyBpbnN0YWxsYXRpb24gdG8gdXNlCisgIC0td2l0aC1rZXJuZWwtc3VwcG9ydCAgICAgICAgVXNlIDIuNiBrZXJuZWwgKG5vIGtlcm5lbCBzb3VyY2UgdHJlZSByZXF1aXJlZCkKKyAgLS13aXRoLWxpbnV4PWRpciAgICAgICAgICAgICBQYXRoIHRvIExpbnV4IHNvdXJjZSB0cmVlCisgIC0td2l0aC1tb2R1bGUtZGlyPWRpciAgICAgICAgUGF0aCB0byBtb2R1bGUgaW5zdGFsbGF0aW9uIGRpcmVjdG9yeQorICAtLXdpdGgtamF2YT1qYXZhLWhvbWUgICAgICAgIFBhdGggdG8gSmF2YSBob21lIGRpcmVjdG9yeSAoZGVmYXVsdCBpcyAibm8iOyAieWVzIiB3aWxsIHVzZSAvdXNyIGFzIEphdmEgaG9tZSkKKyAgLS13aXRoLWV4dHJhLWluY2x1ZGVzPURJUiAgICBhZGQgZXh0cmEgaW5jbHVkZSBwYXRocworICAtLXdpdGgtZXh0cmEtbGlicz1ESVIgICAgICAgIGFkZCBleHRyYSBsaWJyYXJ5IHBhdGhzCisgIC0td2l0aC10YXJnZXQ9Y2VsbC1iZSAgIENoZWNrIEJGRCBzdXBwb3J0IGZvciBDZWxsIEJyb2FkYmFuZCBFbmdpbmUgU1BVIHByb2ZpbGluZworICAtLXdpdGgteCAgICAgICAgICAgICAgICB1c2UgdGhlIFggV2luZG93IFN5c3RlbQorICAtLXdpdGgtcXQtZGlyICAgICAgICAgICB3aGVyZSB0aGUgcm9vdCBvZiBRdCBpcyBpbnN0YWxsZWQKKyAgLS13aXRoLXF0LWluY2x1ZGVzICAgICAgd2hlcmUgdGhlIFF0IGluY2x1ZGVzIGFyZS4KKyAgLS13aXRoLXF0LWxpYnJhcmllcyAgICAgd2hlcmUgdGhlIFF0IGxpYnJhcnkgaXMgaW5zdGFsbGVkLgorCitTb21lIGluZmx1ZW50aWFsIGVudmlyb25tZW50IHZhcmlhYmxlczoKKyAgQ0MgICAgICAgICAgQyBjb21waWxlciBjb21tYW5kCisgIENGTEFHUyAgICAgIEMgY29tcGlsZXIgZmxhZ3MKKyAgTERGTEFHUyAgICAgbGlua2VyIGZsYWdzLCBlLmcuIC1MPGxpYiBkaXI+IGlmIHlvdSBoYXZlIGxpYnJhcmllcyBpbiBhCisgICAgICAgICAgICAgIG5vbnN0YW5kYXJkIGRpcmVjdG9yeSA8bGliIGRpcj4KKyAgTElCUyAgICAgICAgbGlicmFyaWVzIHRvIHBhc3MgdG8gdGhlIGxpbmtlciwgZS5nLiAtbDxsaWJyYXJ5PgorICBDUFBGTEFHUyAgICAoT2JqZWN0aXZlKSBDL0MrKyBwcmVwcm9jZXNzb3IgZmxhZ3MsIGUuZy4gLUk8aW5jbHVkZSBkaXI+IGlmCisgICAgICAgICAgICAgIHlvdSBoYXZlIGhlYWRlcnMgaW4gYSBub25zdGFuZGFyZCBkaXJlY3RvcnkgPGluY2x1ZGUgZGlyPgorICBDUFAgICAgICAgICBDIHByZXByb2Nlc3NvcgorICBQS0dfQ09ORklHICBwYXRoIHRvIHBrZy1jb25maWcgdXRpbGl0eQorICBQS0dfQ09ORklHX1BBVEgKKyAgICAgICAgICAgICAgZGlyZWN0b3JpZXMgdG8gYWRkIHRvIHBrZy1jb25maWcncyBzZWFyY2ggcGF0aAorICBQS0dfQ09ORklHX0xJQkRJUgorICAgICAgICAgICAgICBwYXRoIG92ZXJyaWRpbmcgcGtnLWNvbmZpZydzIGJ1aWx0LWluIHNlYXJjaCBwYXRoCisgIENYWCAgICAgICAgIEMrKyBjb21waWxlciBjb21tYW5kCisgIENYWEZMQUdTICAgIEMrKyBjb21waWxlciBmbGFncworICBDWFhDUFAgICAgICBDKysgcHJlcHJvY2Vzc29yCisgIFhNS01GICAgICAgIFBhdGggdG8geG1rbWYsIE1ha2VmaWxlIGdlbmVyYXRvciBmb3IgWCBXaW5kb3cgU3lzdGVtCisgIFFUX0NGTEFHUyAgIEMgY29tcGlsZXIgZmxhZ3MgZm9yIFFULCBvdmVycmlkaW5nIHBrZy1jb25maWcKKyAgUVRfTElCUyAgICAgbGlua2VyIGZsYWdzIGZvciBRVCwgb3ZlcnJpZGluZyBwa2ctY29uZmlnCisKK1VzZSB0aGVzZSB2YXJpYWJsZXMgdG8gb3ZlcnJpZGUgdGhlIGNob2ljZXMgbWFkZSBieSBgY29uZmlndXJlJyBvciB0byBoZWxwCitpdCB0byBmaW5kIGxpYnJhcmllcyBhbmQgcHJvZ3JhbXMgd2l0aCBub25zdGFuZGFyZCBuYW1lcy9sb2NhdGlvbnMuCisKK1JlcG9ydCBidWdzIHRvIHRoZSBwYWNrYWdlIHByb3ZpZGVyLgorX0FDRU9GCithY19zdGF0dXM9JD8KK2ZpCisKK2lmIHRlc3QgIiRhY19pbml0X2hlbHAiID0gInJlY3Vyc2l2ZSI7IHRoZW4KKyAgIyBJZiB0aGVyZSBhcmUgc3ViZGlycywgcmVwb3J0IHRoZWlyIHNwZWNpZmljIC0taGVscC4KKyAgZm9yIGFjX2RpciBpbiA6ICRhY19zdWJkaXJzX2FsbDsgZG8gdGVzdCAieCRhY19kaXIiID0geDogJiYgY29udGludWUKKyAgICB0ZXN0IC1kICIkYWNfZGlyIiB8fAorICAgICAgeyBjZCAiJHNyY2RpciIgJiYgYWNfcHdkPWBwd2RgICYmIHNyY2Rpcj0uICYmIHRlc3QgLWQgIiRhY19kaXIiOyB9IHx8CisgICAgICBjb250aW51ZQorICAgIGFjX2J1aWxkZGlyPS4KKworY2FzZSAiJGFjX2RpciIgaW4KKy4pIGFjX2Rpcl9zdWZmaXg9IGFjX3RvcF9idWlsZGRpcl9zdWI9LiBhY190b3BfYnVpbGRfcHJlZml4PSA7OworKikKKyAgYWNfZGlyX3N1ZmZpeD0vYCRhc19lY2hvICIkYWNfZGlyIiB8IHNlZCAnc3xeXC5bXFwvXXx8J2AKKyAgIyBBICIuLiIgZm9yIGVhY2ggZGlyZWN0b3J5IGluICRhY19kaXJfc3VmZml4LgorICBhY190b3BfYnVpbGRkaXJfc3ViPWAkYXNfZWNobyAiJGFjX2Rpcl9zdWZmaXgiIHwgc2VkICdzfC9bXlxcL10qfC8uLnxnO3N8L3x8J2AKKyAgY2FzZSAkYWNfdG9wX2J1aWxkZGlyX3N1YiBpbgorICAiIikgYWNfdG9wX2J1aWxkZGlyX3N1Yj0uIGFjX3RvcF9idWlsZF9wcmVmaXg9IDs7CisgICopICBhY190b3BfYnVpbGRfcHJlZml4PSRhY190b3BfYnVpbGRkaXJfc3ViLyA7OworICBlc2FjIDs7Citlc2FjCithY19hYnNfdG9wX2J1aWxkZGlyPSRhY19wd2QKK2FjX2Fic19idWlsZGRpcj0kYWNfcHdkJGFjX2Rpcl9zdWZmaXgKKyMgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHk6CithY190b3BfYnVpbGRkaXI9JGFjX3RvcF9idWlsZF9wcmVmaXgKKworY2FzZSAkc3JjZGlyIGluCisgIC4pICAjIFdlIGFyZSBidWlsZGluZyBpbiBwbGFjZS4KKyAgICBhY19zcmNkaXI9LgorICAgIGFjX3RvcF9zcmNkaXI9JGFjX3RvcF9idWlsZGRpcl9zdWIKKyAgICBhY19hYnNfdG9wX3NyY2Rpcj0kYWNfcHdkIDs7CisgIFtcXC9dKiB8ID86W1xcL10qICkgICMgQWJzb2x1dGUgbmFtZS4KKyAgICBhY19zcmNkaXI9JHNyY2RpciRhY19kaXJfc3VmZml4OworICAgIGFjX3RvcF9zcmNkaXI9JHNyY2RpcgorICAgIGFjX2Fic190b3Bfc3JjZGlyPSRzcmNkaXIgOzsKKyAgKikgIyBSZWxhdGl2ZSBuYW1lLgorICAgIGFjX3NyY2Rpcj0kYWNfdG9wX2J1aWxkX3ByZWZpeCRzcmNkaXIkYWNfZGlyX3N1ZmZpeAorICAgIGFjX3RvcF9zcmNkaXI9JGFjX3RvcF9idWlsZF9wcmVmaXgkc3JjZGlyCisgICAgYWNfYWJzX3RvcF9zcmNkaXI9JGFjX3B3ZC8kc3JjZGlyIDs7Citlc2FjCithY19hYnNfc3JjZGlyPSRhY19hYnNfdG9wX3NyY2RpciRhY19kaXJfc3VmZml4CisKKyAgICBjZCAiJGFjX2RpciIgfHwgeyBhY19zdGF0dXM9JD87IGNvbnRpbnVlOyB9CisgICAgIyBDaGVjayBmb3IgZ3Vlc3RlZCBjb25maWd1cmUuCisgICAgaWYgdGVzdCAtZiAiJGFjX3NyY2Rpci9jb25maWd1cmUuZ251IjsgdGhlbgorICAgICAgZWNobyAmJgorICAgICAgJFNIRUxMICIkYWNfc3JjZGlyL2NvbmZpZ3VyZS5nbnUiIC0taGVscD1yZWN1cnNpdmUKKyAgICBlbGlmIHRlc3QgLWYgIiRhY19zcmNkaXIvY29uZmlndXJlIjsgdGhlbgorICAgICAgZWNobyAmJgorICAgICAgJFNIRUxMICIkYWNfc3JjZGlyL2NvbmZpZ3VyZSIgLS1oZWxwPXJlY3Vyc2l2ZQorICAgIGVsc2UKKyAgICAgICRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IG5vIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gaXMgaW4gJGFjX2RpciIgPiYyCisgICAgZmkgfHwgYWNfc3RhdHVzPSQ/CisgICAgY2QgIiRhY19wd2QiIHx8IHsgYWNfc3RhdHVzPSQ/OyBicmVhazsgfQorICBkb25lCitmaQorCit0ZXN0IC1uICIkYWNfaW5pdF9oZWxwIiAmJiBleGl0ICRhY19zdGF0dXMKK2lmICRhY19pbml0X3ZlcnNpb247IHRoZW4KKyAgY2F0IDw8XF9BQ0VPRgorY29uZmlndXJlCitnZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNjcKKworQ29weXJpZ2h0IChDKSAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorVGhpcyBjb25maWd1cmUgc2NyaXB0IGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2dpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kIG1vZGlmeSBpdC4KK19BQ0VPRgorICBleGl0CitmaQorCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIEF1dG9jb25mIGluaXRpYWxpemF0aW9uLiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKKyMgYWNfZm5fY190cnlfY29tcGlsZSBMSU5FTk8KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVHJ5IHRvIGNvbXBpbGUgY29uZnRlc3QuJGFjX2V4dCwgYW5kIHJldHVybiB3aGV0aGVyIHRoaXMgc3VjY2VlZGVkLgorYWNfZm5fY190cnlfY29tcGlsZSAoKQoreworICBhc19saW5lbm89JHthc19saW5lbm8tIiQxIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCisgIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyAgaWYgeyB7IGFjX3RyeT0iJGFjX2NvbXBpbGUiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKKyAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcnIKKyAgYWNfc3RhdHVzPSQ/CisgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjEKKyAgICBjYXQgY29uZnRlc3QuZXIxID4mNQorICAgIG12IC1mIGNvbmZ0ZXN0LmVyMSBjb25mdGVzdC5lcnIKKyAgZmkKKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuIDoKKyAgYWNfcmV0dmFsPTAKK2Vsc2UKKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKwlhY19yZXR2YWw9MQorZmkKKyAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyB0ZXN0ICJ4JGFzX2xpbmVub19zdGFjayIgPSB4ICYmIHsgYXNfbGluZW5vPTsgdW5zZXQgYXNfbGluZW5vO30KKyAgYXNfZm5fc2V0X3N0YXR1cyAkYWNfcmV0dmFsCisKK30gIyBhY19mbl9jX3RyeV9jb21waWxlCisKKyMgYWNfZm5fY19jaGVja19kZWNsIExJTkVOTyBTWU1CT0wgVkFSIElOQ0xVREVTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUZXN0cyB3aGV0aGVyIFNZTUJPTCBpcyBkZWNsYXJlZCBpbiBJTkNMVURFUywgc2V0dGluZyBjYWNoZSB2YXJpYWJsZSBWQVIKKyMgYWNjb3JkaW5nbHkuCithY19mbl9jX2NoZWNrX2RlY2wgKCkKK3sKKyAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjaworICBhc19kZWNsX25hbWU9YGVjaG8gJDJ8c2VkICdzLyAqKC4qLy8nYAorICBhc19kZWNsX3VzZT1gZWNobyAkMnxzZWQgLWUgJ3MvKC8oKC8nIC1lICdzLykvKSAwJi8nIC1lICdzLywvKSAwJiAoL2cnYAorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgJGFzX2RlY2xfbmFtZSBpcyBkZWNsYXJlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyICRhc19kZWNsX25hbWUgaXMgZGVjbGFyZWQuLi4gIiA+JjY7IH0KK2lmIGV2YWwgInRlc3QgXCJcJHskMytzZXR9XCIiID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworJDQKK2ludAorbWFpbiAoKQoreworI2lmbmRlZiAkYXNfZGVjbF9uYW1lCisjaWZkZWYgX19jcGx1c3BsdXMKKyAgKHZvaWQpICRhc19kZWNsX3VzZTsKKyNlbHNlCisgICh2b2lkKSAkYXNfZGVjbF9uYW1lOworI2VuZGlmCisjZW5kaWYKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGV2YWwgIiQzPXllcyIKK2Vsc2UKKyAgZXZhbCAiJDM9bm8iCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorZXZhbCBhY19yZXM9XCQkMworCSAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX3JlcyIgPiY1CiskYXNfZWNobyAiJGFjX3JlcyIgPiY2OyB9CisgIGV2YWwgJGFzX2xpbmVub19zdGFjazsgdGVzdCAieCRhc19saW5lbm9fc3RhY2siID0geCAmJiB7IGFzX2xpbmVubz07IHVuc2V0IGFzX2xpbmVubzt9CisKK30gIyBhY19mbl9jX2NoZWNrX2RlY2wKKworIyBhY19mbl9jX3RyeV9saW5rIExJTkVOTworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUcnkgdG8gbGluayBjb25mdGVzdC4kYWNfZXh0LCBhbmQgcmV0dXJuIHdoZXRoZXIgdGhpcyBzdWNjZWVkZWQuCithY19mbl9jX3RyeV9saW5rICgpCit7CisgIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDEifSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKKyAgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKyAgaWYgeyB7IGFjX3RyeT0iJGFjX2xpbmsiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKKyAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcnIKKyAgYWNfc3RhdHVzPSQ/CisgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjEKKyAgICBjYXQgY29uZnRlc3QuZXIxID4mNQorICAgIG12IC1mIGNvbmZ0ZXN0LmVyMSBjb25mdGVzdC5lcnIKKyAgZmkKKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYgeworCSB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllcyB8fAorCSAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorICAgICAgIH07IHRoZW4gOgorICBhY19yZXR2YWw9MAorZWxzZQorICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworCWFjX3JldHZhbD0xCitmaQorICAjIERlbGV0ZSB0aGUgSVBBL0lQTyAoSW50ZXIgUHJvY2VkdXJhbCBBbmFseXNpcy9PcHRpbWl6YXRpb24pIGluZm9ybWF0aW9uCisgICMgY3JlYXRlZCBieSB0aGUgUEdJIGNvbXBpbGVyIChjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vKSwgYXMgaXQgd291bGQKKyAgIyBpbnRlcmZlcmUgd2l0aCB0aGUgbmV4dCBsaW5rIGNvbW1hbmQ7IGFsc28gZGVsZXRlIGEgZGlyZWN0b3J5IHRoYXQgaXMKKyAgIyBsZWZ0IGJlaGluZCBieSBBcHBsZSdzIGNvbXBpbGVyLiAgV2UgZG8gdGhpcyBiZWZvcmUgZXhlY3V0aW5nIHRoZSBhY3Rpb25zLgorICBybSAtcmYgY29uZnRlc3QuZFNZTSBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vCisgIGV2YWwgJGFzX2xpbmVub19zdGFjazsgdGVzdCAieCRhc19saW5lbm9fc3RhY2siID0geCAmJiB7IGFzX2xpbmVubz07IHVuc2V0IGFzX2xpbmVubzt9CisgIGFzX2ZuX3NldF9zdGF0dXMgJGFjX3JldHZhbAorCit9ICMgYWNfZm5fY190cnlfbGluaworCisjIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX2NvbXBpbGUgTElORU5PIEhFQURFUiBWQVIgSU5DTFVERVMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUZXN0cyB3aGV0aGVyIEhFQURFUiBleGlzdHMgYW5kIGNhbiBiZSBjb21waWxlZCB1c2luZyB0aGUgaW5jbHVkZSBmaWxlcyBpbgorIyBJTkNMVURFUywgc2V0dGluZyB0aGUgY2FjaGUgdmFyaWFibGUgVkFSIGFjY29yZGluZ2x5LgorYWNfZm5fY19jaGVja19oZWFkZXJfY29tcGlsZSAoKQoreworICBhc19saW5lbm89JHthc19saW5lbm8tIiQxIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICQyIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkMi4uLiAiID4mNjsgfQoraWYgZXZhbCAidGVzdCBcIlwkeyQzK3NldH1cIiIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskNAorI2luY2x1ZGUgPCQyPgorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGV2YWwgIiQzPXllcyIKK2Vsc2UKKyAgZXZhbCAiJDM9bm8iCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorZXZhbCBhY19yZXM9XCQkMworCSAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX3JlcyIgPiY1CiskYXNfZWNobyAiJGFjX3JlcyIgPiY2OyB9CisgIGV2YWwgJGFzX2xpbmVub19zdGFjazsgdGVzdCAieCRhc19saW5lbm9fc3RhY2siID0geCAmJiB7IGFzX2xpbmVubz07IHVuc2V0IGFzX2xpbmVubzt9CisKK30gIyBhY19mbl9jX2NoZWNrX2hlYWRlcl9jb21waWxlCisKKyMgYWNfZm5fY190cnlfY3BwIExJTkVOTworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRyeSB0byBwcmVwcm9jZXNzIGNvbmZ0ZXN0LiRhY19leHQsIGFuZCByZXR1cm4gd2hldGhlciB0aGlzIHN1Y2NlZWRlZC4KK2FjX2ZuX2NfdHJ5X2NwcCAoKQoreworICBhc19saW5lbm89JHthc19saW5lbm8tIiQxIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCisgIGlmIHsgeyBhY190cnk9IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQorICAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj5jb25mdGVzdC5lcnIKKyAgYWNfc3RhdHVzPSQ/CisgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjEKKyAgICBjYXQgY29uZnRlc3QuZXIxID4mNQorICAgIG12IC1mIGNvbmZ0ZXN0LmVyMSBjb25mdGVzdC5lcnIKKyAgZmkKKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gPiBjb25mdGVzdC5pICYmIHsKKwkgdGVzdCAteiAiJGFjX2NfcHJlcHJvY193YXJuX2ZsYWckYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH07IHRoZW4gOgorICBhY19yZXR2YWw9MAorZWxzZQorICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworICAgIGFjX3JldHZhbD0xCitmaQorICBldmFsICRhc19saW5lbm9fc3RhY2s7IHRlc3QgIngkYXNfbGluZW5vX3N0YWNrIiA9IHggJiYgeyBhc19saW5lbm89OyB1bnNldCBhc19saW5lbm87fQorICBhc19mbl9zZXRfc3RhdHVzICRhY19yZXR2YWwKKworfSAjIGFjX2ZuX2NfdHJ5X2NwcAorCisjIGFjX2ZuX2NfdHJ5X3J1biBMSU5FTk8KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUcnkgdG8gbGluayBjb25mdGVzdC4kYWNfZXh0LCBhbmQgcmV0dXJuIHdoZXRoZXIgdGhpcyBzdWNjZWVkZWQuIEFzc3VtZXMKKyMgdGhhdCBleGVjdXRhYmxlcyAqY2FuKiBiZSBydW4uCithY19mbl9jX3RyeV9ydW4gKCkKK3sKKyAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjaworICBpZiB7IHsgYWNfdHJ5PSIkYWNfbGluayIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQorICAoZXZhbCAiJGFjX2xpbmsiKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSAmJiB7IGFjX3RyeT0nLi9jb25mdGVzdCRhY19leGVleHQnCisgIHsgeyBjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKKyAgKGV2YWwgIiRhY190cnkiKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgfTsgdGhlbiA6CisgIGFjX3JldHZhbD0wCitlbHNlCisgICRhc19lY2hvICIkYXNfbWU6IHByb2dyYW0gZXhpdGVkIHdpdGggc3RhdHVzICRhY19zdGF0dXMiID4mNQorICAgICAgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisgICAgICAgYWNfcmV0dmFsPSRhY19zdGF0dXMKK2ZpCisgIHJtIC1yZiBjb25mdGVzdC5kU1lNIGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28KKyAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyB0ZXN0ICJ4JGFzX2xpbmVub19zdGFjayIgPSB4ICYmIHsgYXNfbGluZW5vPTsgdW5zZXQgYXNfbGluZW5vO30KKyAgYXNfZm5fc2V0X3N0YXR1cyAkYWNfcmV0dmFsCisKK30gIyBhY19mbl9jX3RyeV9ydW4KKworIyBhY19mbl9jX2NoZWNrX2Z1bmMgTElORU5PIEZVTkMgVkFSCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVGVzdHMgd2hldGhlciBGVU5DIGV4aXN0cywgc2V0dGluZyB0aGUgY2FjaGUgdmFyaWFibGUgVkFSIGFjY29yZGluZ2x5CithY19mbl9jX2NoZWNrX2Z1bmMgKCkKK3sKKyAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjaworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkMiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJDIuLi4gIiA+JjY7IH0KK2lmIGV2YWwgInRlc3QgXCJcJHskMytzZXR9XCIiID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworLyogRGVmaW5lICQyIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgJDIuCisgICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KKyNkZWZpbmUgJDIgaW5ub2N1b3VzXyQyCisKKy8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKKyAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyICQyICgpOyBiZWxvdy4KKyAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCisgICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KKworI2lmZGVmIF9fU1REQ19fCisjIGluY2x1ZGUgPGxpbWl0cy5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8YXNzZXJ0Lmg+CisjZW5kaWYKKworI3VuZGVmICQyCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgJDIgKCk7CisvKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCisgICAgdG8gYWx3YXlzIGZhaWwgd2l0aCBFTk9TWVMuICBTb21lIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgbmFtZWQKKyAgICBzb21ldGhpbmcgc3RhcnRpbmcgd2l0aCBfXyBhbmQgdGhlIG5vcm1hbCBuYW1lIGlzIGFuIGFsaWFzLiAgKi8KKyNpZiBkZWZpbmVkIF9fc3R1Yl8kMiB8fCBkZWZpbmVkIF9fc3R1Yl9fXyQyCitjaG9rZSBtZQorI2VuZGlmCisKK2ludAorbWFpbiAoKQoreworcmV0dXJuICQyICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGV2YWwgIiQzPXllcyIKK2Vsc2UKKyAgZXZhbCAiJDM9bm8iCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitldmFsIGFjX3Jlcz1cJCQzCisJICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKyRhc19lY2hvICIkYWNfcmVzIiA+JjY7IH0KKyAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyB0ZXN0ICJ4JGFzX2xpbmVub19zdGFjayIgPSB4ICYmIHsgYXNfbGluZW5vPTsgdW5zZXQgYXNfbGluZW5vO30KKworfSAjIGFjX2ZuX2NfY2hlY2tfZnVuYworCisjIGFjX2ZuX2N4eF90cnlfY29tcGlsZSBMSU5FTk8KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUcnkgdG8gY29tcGlsZSBjb25mdGVzdC4kYWNfZXh0LCBhbmQgcmV0dXJuIHdoZXRoZXIgdGhpcyBzdWNjZWVkZWQuCithY19mbl9jeHhfdHJ5X2NvbXBpbGUgKCkKK3sKKyAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjaworICBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgIGlmIHsgeyBhY190cnk9IiRhY19jb21waWxlIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXJyCisgIGFjX3N0YXR1cz0kPworICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIxCisgICAgY2F0IGNvbmZ0ZXN0LmVyMSA+JjUKKyAgICBtdiAtZiBjb25mdGVzdC5lcjEgY29uZnRlc3QuZXJyCisgIGZpCisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2N4eF93ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuIDoKKyAgYWNfcmV0dmFsPTAKK2Vsc2UKKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKwlhY19yZXR2YWw9MQorZmkKKyAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyB0ZXN0ICJ4JGFzX2xpbmVub19zdGFjayIgPSB4ICYmIHsgYXNfbGluZW5vPTsgdW5zZXQgYXNfbGluZW5vO30KKyAgYXNfZm5fc2V0X3N0YXR1cyAkYWNfcmV0dmFsCisKK30gIyBhY19mbl9jeHhfdHJ5X2NvbXBpbGUKKworIyBhY19mbl9jeHhfdHJ5X2NwcCBMSU5FTk8KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRyeSB0byBwcmVwcm9jZXNzIGNvbmZ0ZXN0LiRhY19leHQsIGFuZCByZXR1cm4gd2hldGhlciB0aGlzIHN1Y2NlZWRlZC4KK2FjX2ZuX2N4eF90cnlfY3BwICgpCit7CisgIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDEifSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKKyAgaWYgeyB7IGFjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisgIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPmNvbmZ0ZXN0LmVycgorICBhY19zdGF0dXM9JD8KKyAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMQorICAgIGNhdCBjb25mdGVzdC5lcjEgPiY1CisgICAgbXYgLWYgY29uZnRlc3QuZXIxIGNvbmZ0ZXN0LmVycgorICBmaQorICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSA+IGNvbmZ0ZXN0LmkgJiYgeworCSB0ZXN0IC16ICIkYWNfY3h4X3ByZXByb2Nfd2Fybl9mbGFnJGFjX2N4eF93ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH07IHRoZW4gOgorICBhY19yZXR2YWw9MAorZWxzZQorICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworICAgIGFjX3JldHZhbD0xCitmaQorICBldmFsICRhc19saW5lbm9fc3RhY2s7IHRlc3QgIngkYXNfbGluZW5vX3N0YWNrIiA9IHggJiYgeyBhc19saW5lbm89OyB1bnNldCBhc19saW5lbm87fQorICBhc19mbl9zZXRfc3RhdHVzICRhY19yZXR2YWwKKworfSAjIGFjX2ZuX2N4eF90cnlfY3BwCisKKyMgYWNfZm5fY3h4X3RyeV9saW5rIExJTkVOTworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRyeSB0byBsaW5rIGNvbmZ0ZXN0LiRhY19leHQsIGFuZCByZXR1cm4gd2hldGhlciB0aGlzIHN1Y2NlZWRlZC4KK2FjX2ZuX2N4eF90cnlfbGluayAoKQoreworICBhc19saW5lbm89JHthc19saW5lbm8tIiQxIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCisgIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CisgIGlmIHsgeyBhY190cnk9IiRhY19saW5rIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisgIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXJyCisgIGFjX3N0YXR1cz0kPworICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIxCisgICAgY2F0IGNvbmZ0ZXN0LmVyMSA+JjUKKyAgICBtdiAtZiBjb25mdGVzdC5lcjEgY29uZnRlc3QuZXJyCisgIGZpCisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2N4eF93ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYgeworCSB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllcyB8fAorCSAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorICAgICAgIH07IHRoZW4gOgorICBhY19yZXR2YWw9MAorZWxzZQorICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworCWFjX3JldHZhbD0xCitmaQorICAjIERlbGV0ZSB0aGUgSVBBL0lQTyAoSW50ZXIgUHJvY2VkdXJhbCBBbmFseXNpcy9PcHRpbWl6YXRpb24pIGluZm9ybWF0aW9uCisgICMgY3JlYXRlZCBieSB0aGUgUEdJIGNvbXBpbGVyIChjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vKSwgYXMgaXQgd291bGQKKyAgIyBpbnRlcmZlcmUgd2l0aCB0aGUgbmV4dCBsaW5rIGNvbW1hbmQ7IGFsc28gZGVsZXRlIGEgZGlyZWN0b3J5IHRoYXQgaXMKKyAgIyBsZWZ0IGJlaGluZCBieSBBcHBsZSdzIGNvbXBpbGVyLiAgV2UgZG8gdGhpcyBiZWZvcmUgZXhlY3V0aW5nIHRoZSBhY3Rpb25zLgorICBybSAtcmYgY29uZnRlc3QuZFNZTSBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vCisgIGV2YWwgJGFzX2xpbmVub19zdGFjazsgdGVzdCAieCRhc19saW5lbm9fc3RhY2siID0geCAmJiB7IGFzX2xpbmVubz07IHVuc2V0IGFzX2xpbmVubzt9CisgIGFzX2ZuX3NldF9zdGF0dXMgJGFjX3JldHZhbAorCit9ICMgYWNfZm5fY3h4X3RyeV9saW5rCisKKyMgYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCBMSU5FTk8gSEVBREVSIFZBUiBJTkNMVURFUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRlc3RzIHdoZXRoZXIgSEVBREVSIGV4aXN0cywgZ2l2aW5nIGEgd2FybmluZyBpZiBpdCBjYW5ub3QgYmUgY29tcGlsZWQgdXNpbmcKKyMgdGhlIGluY2x1ZGUgZmlsZXMgaW4gSU5DTFVERVMgYW5kIHNldHRpbmcgdGhlIGNhY2hlIHZhcmlhYmxlIFZBUgorIyBhY2NvcmRpbmdseS4KK2FjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgKCkKK3sKKyAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjaworICBpZiBldmFsICJ0ZXN0IFwiXCR7JDMrc2V0fVwiIiA9IHNldDsgdGhlbiA6CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICQyIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkMi4uLiAiID4mNjsgfQoraWYgZXZhbCAidGVzdCBcIlwkeyQzK3NldH1cIiIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZmkKK2V2YWwgYWNfcmVzPVwkJDMKKwkgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19yZXMiID4mNQorJGFzX2VjaG8gIiRhY19yZXMiID4mNjsgfQorZWxzZQorICAjIElzIHRoZSBoZWFkZXIgY29tcGlsYWJsZT8KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgJDIgdXNhYmlsaXR5IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nICQyIHVzYWJpbGl0eS4uLiAiID4mNjsgfQorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworJDQKKyNpbmNsdWRlIDwkMj4KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19oZWFkZXJfY29tcGlsZXI9eWVzCitlbHNlCisgIGFjX2hlYWRlcl9jb21waWxlcj1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19oZWFkZXJfY29tcGlsZXIiID4mNQorJGFzX2VjaG8gIiRhY19oZWFkZXJfY29tcGlsZXIiID4mNjsgfQorCisjIElzIHRoZSBoZWFkZXIgcHJlc2VudD8KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgJDIgcHJlc2VuY2UiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgJDIgcHJlc2VuY2UuLi4gIiA+JjY7IH0KK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDwkMj4KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY3BwICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2hlYWRlcl9wcmVwcm9jPXllcworZWxzZQorICBhY19oZWFkZXJfcHJlcHJvYz1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC5pIGNvbmZ0ZXN0LiRhY19leHQKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfaGVhZGVyX3ByZXByb2MiID4mNQorJGFzX2VjaG8gIiRhY19oZWFkZXJfcHJlcHJvYyIgPiY2OyB9CisKKyMgU28/ICBXaGF0IGFib3V0IHRoaXMgaGVhZGVyPworY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYzokYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbiAjKCgKKyAgeWVzOm5vOiApCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiAkMjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkMjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiYyO30KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICQyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICQyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjI7fQorICAgIDs7CisgIG5vOnllczoqICkKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICQyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogJDI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICQyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICQyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogJDI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkMjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjI7fQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogJDI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogJDI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9CisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiAkMjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkMjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiYyO30KKyAgICA7OworZXNhYworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkMiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJDIuLi4gIiA+JjY7IH0KK2lmIGV2YWwgInRlc3QgXCJcJHskMytzZXR9XCIiID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgZXZhbCAiJDM9XCRhY19oZWFkZXJfY29tcGlsZXIiCitmaQorZXZhbCBhY19yZXM9XCQkMworCSAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX3JlcyIgPiY1CiskYXNfZWNobyAiJGFjX3JlcyIgPiY2OyB9CitmaQorICBldmFsICRhc19saW5lbm9fc3RhY2s7IHRlc3QgIngkYXNfbGluZW5vX3N0YWNrIiA9IHggJiYgeyBhc19saW5lbm89OyB1bnNldCBhc19saW5lbm87fQorCit9ICMgYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbAorCisjIGFjX2ZuX2N4eF9jaGVja19mdW5jIExJTkVOTyBGVU5DIFZBUgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVGVzdHMgd2hldGhlciBGVU5DIGV4aXN0cywgc2V0dGluZyB0aGUgY2FjaGUgdmFyaWFibGUgVkFSIGFjY29yZGluZ2x5CithY19mbl9jeHhfY2hlY2tfZnVuYyAoKQoreworICBhc19saW5lbm89JHthc19saW5lbm8tIiQxIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICQyIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkMi4uLiAiID4mNjsgfQoraWYgZXZhbCAidGVzdCBcIlwkeyQzK3NldH1cIiIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisvKiBEZWZpbmUgJDIgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyAkMi4KKyAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLworI2RlZmluZSAkMiBpbm5vY3VvdXNfJDIKKworLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAorICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgJDIgKCk7IGJlbG93LgorICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKKyAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLworCisjaWZkZWYgX19TVERDX18KKyMgaW5jbHVkZSA8bGltaXRzLmg+CisjZWxzZQorIyBpbmNsdWRlIDxhc3NlcnQuaD4KKyNlbmRpZgorCisjdW5kZWYgJDIKKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciAkMiAoKTsKKy8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKKyAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAorICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLworI2lmIGRlZmluZWQgX19zdHViXyQyIHx8IGRlZmluZWQgX19zdHViX19fJDIKK2Nob2tlIG1lCisjZW5kaWYKKworaW50CittYWluICgpCit7CityZXR1cm4gJDIgKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2N4eF90cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBldmFsICIkMz15ZXMiCitlbHNlCisgIGV2YWwgIiQzPW5vIgorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorZXZhbCBhY19yZXM9XCQkMworCSAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX3JlcyIgPiY1CiskYXNfZWNobyAiJGFjX3JlcyIgPiY2OyB9CisgIGV2YWwgJGFzX2xpbmVub19zdGFjazsgdGVzdCAieCRhc19saW5lbm9fc3RhY2siID0geCAmJiB7IGFzX2xpbmVubz07IHVuc2V0IGFzX2xpbmVubzt9CisKK30gIyBhY19mbl9jeHhfY2hlY2tfZnVuYworY2F0ID5jb25maWcubG9nIDw8X0FDRU9GCitUaGlzIGZpbGUgY29udGFpbnMgYW55IG1lc3NhZ2VzIHByb2R1Y2VkIGJ5IGNvbXBpbGVycyB3aGlsZQorcnVubmluZyBjb25maWd1cmUsIHRvIGFpZCBkZWJ1Z2dpbmcgaWYgY29uZmlndXJlIG1ha2VzIGEgbWlzdGFrZS4KKworSXQgd2FzIGNyZWF0ZWQgYnkgJGFzX21lLCB3aGljaCB3YXMKK2dlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42Ny4gIEludm9jYXRpb24gY29tbWFuZCBsaW5lIHdhcworCisgICQgJDAgJEAKKworX0FDRU9GCitleGVjIDU+PmNvbmZpZy5sb2cKK3sKK2NhdCA8PF9BU1VOQU1FCisjIyAtLS0tLS0tLS0gIyMKKyMjIFBsYXRmb3JtLiAjIworIyMgLS0tLS0tLS0tICMjCisKK2hvc3RuYW1lID0gYChob3N0bmFtZSB8fCB1bmFtZSAtbikgMj4vZGV2L251bGwgfCBzZWQgMXFgCit1bmFtZSAtbSA9IGAodW5hbWUgLW0pIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bmAKK3VuYW1lIC1yID0gYCh1bmFtZSAtcikgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAordW5hbWUgLXMgPSBgKHVuYW1lIC1zKSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCit1bmFtZSAtdiA9IGAodW5hbWUgLXYpIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bmAKKworL3Vzci9iaW4vdW5hbWUgLXAgPSBgKC91c3IvYmluL3VuYW1lIC1wKSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCisvYmluL3VuYW1lIC1YICAgICA9IGAoL2Jpbi91bmFtZSAtWCkgMj4vZGV2L251bGwgICAgIHx8IGVjaG8gdW5rbm93bmAKKworL2Jpbi9hcmNoICAgICAgICAgICAgICA9IGAoL2Jpbi9hcmNoKSAyPi9kZXYvbnVsbCAgICAgICAgICAgICAgfHwgZWNobyB1bmtub3duYAorL3Vzci9iaW4vYXJjaCAtayAgICAgICA9IGAoL3Vzci9iaW4vYXJjaCAtaykgMj4vZGV2L251bGwgICAgICAgfHwgZWNobyB1bmtub3duYAorL3Vzci9jb252ZXgvZ2V0c3lzaW5mbyA9IGAoL3Vzci9jb252ZXgvZ2V0c3lzaW5mbykgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAorL3Vzci9iaW4vaG9zdGluZm8gICAgICA9IGAoL3Vzci9iaW4vaG9zdGluZm8pIDI+L2Rldi9udWxsICAgICAgfHwgZWNobyB1bmtub3duYAorL2Jpbi9tYWNoaW5lICAgICAgICAgICA9IGAoL2Jpbi9tYWNoaW5lKSAyPi9kZXYvbnVsbCAgICAgICAgICAgfHwgZWNobyB1bmtub3duYAorL3Vzci9iaW4vb3NsZXZlbCAgICAgICA9IGAoL3Vzci9iaW4vb3NsZXZlbCkgMj4vZGV2L251bGwgICAgICAgfHwgZWNobyB1bmtub3duYAorL2Jpbi91bml2ZXJzZSAgICAgICAgICA9IGAoL2Jpbi91bml2ZXJzZSkgMj4vZGV2L251bGwgICAgICAgICAgfHwgZWNobyB1bmtub3duYAorCitfQVNVTkFNRQorCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgJGFzX2VjaG8gIlBBVEg6ICRhc19kaXIiCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworfSA+JjUKKworY2F0ID4mNSA8PF9BQ0VPRgorCisKKyMjIC0tLS0tLS0tLS0tICMjCisjIyBDb3JlIHRlc3RzLiAjIworIyMgLS0tLS0tLS0tLS0gIyMKKworX0FDRU9GCisKKworIyBLZWVwIGEgdHJhY2Ugb2YgdGhlIGNvbW1hbmQgbGluZS4KKyMgU3RyaXAgb3V0IC0tbm8tY3JlYXRlIGFuZCAtLW5vLXJlY3Vyc2lvbiBzbyB0aGV5IGRvIG5vdCBwaWxlIHVwLgorIyBTdHJpcCBvdXQgLS1zaWxlbnQgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRvIHJlY29yZCBpdCBmb3IgZnV0dXJlIHJ1bnMuCisjIEFsc28gcXVvdGUgYW55IGFyZ3MgY29udGFpbmluZyBzaGVsbCBtZXRhLWNoYXJhY3RlcnMuCisjIE1ha2UgdHdvIHBhc3NlcyB0byBhbGxvdyBmb3IgcHJvcGVyIGR1cGxpY2F0ZS1hcmd1bWVudCBzdXBwcmVzc2lvbi4KK2FjX2NvbmZpZ3VyZV9hcmdzPQorYWNfY29uZmlndXJlX2FyZ3MwPQorYWNfY29uZmlndXJlX2FyZ3MxPQorYWNfbXVzdF9rZWVwX25leHQ9ZmFsc2UKK2ZvciBhY19wYXNzIGluIDEgMgorZG8KKyAgZm9yIGFjX2FyZworICBkbworICAgIGNhc2UgJGFjX2FyZyBpbgorICAgIC1uby1jcmVhdGUgfCAtLW5vLWMqIHwgLW4gfCAtbm8tcmVjdXJzaW9uIHwgLS1uby1yKikgY29udGludWUgOzsKKyAgICAtcSB8IC1xdWlldCB8IC0tcXVpZXQgfCAtLXF1aWUgfCAtLXF1aSB8IC0tcXUgfCAtLXEgXAorICAgIHwgLXNpbGVudCB8IC0tc2lsZW50IHwgLS1zaWxlbiB8IC0tc2lsZSB8IC0tc2lsKQorICAgICAgY29udGludWUgOzsKKyAgICAqXCcqKQorICAgICAgYWNfYXJnPWAkYXNfZWNobyAiJGFjX2FyZyIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImAgOzsKKyAgICBlc2FjCisgICAgY2FzZSAkYWNfcGFzcyBpbgorICAgIDEpIGFzX2ZuX2FwcGVuZCBhY19jb25maWd1cmVfYXJnczAgIiAnJGFjX2FyZyciIDs7CisgICAgMikKKyAgICAgIGFzX2ZuX2FwcGVuZCBhY19jb25maWd1cmVfYXJnczEgIiAnJGFjX2FyZyciCisgICAgICBpZiB0ZXN0ICRhY19tdXN0X2tlZXBfbmV4dCA9IHRydWU7IHRoZW4KKwlhY19tdXN0X2tlZXBfbmV4dD1mYWxzZSAjIEdvdCB2YWx1ZSwgYmFjayB0byBub3JtYWwuCisgICAgICBlbHNlCisJY2FzZSAkYWNfYXJnIGluCisJICAqPSogfCAtLWNvbmZpZy1jYWNoZSB8IC1DIHwgLWRpc2FibGUtKiB8IC0tZGlzYWJsZS0qIFwKKwkgIHwgLWVuYWJsZS0qIHwgLS1lbmFibGUtKiB8IC1nYXMgfCAtLWcqIHwgLW5mcCB8IC0tbmYqIFwKKwkgIHwgLXEgfCAtcXVpZXQgfCAtLXEqIHwgLXNpbGVudCB8IC0tc2lsKiB8IC12IHwgLXZlcmIqIFwKKwkgIHwgLXdpdGgtKiB8IC0td2l0aC0qIHwgLXdpdGhvdXQtKiB8IC0td2l0aG91dC0qIHwgLS14KQorCSAgICBjYXNlICIkYWNfY29uZmlndXJlX2FyZ3MwICIgaW4KKwkgICAgICAiJGFjX2NvbmZpZ3VyZV9hcmdzMSIqIiAnJGFjX2FyZycgIiogKSBjb250aW51ZSA7OworCSAgICBlc2FjCisJICAgIDs7CisJICAtKiApIGFjX211c3Rfa2VlcF9uZXh0PXRydWUgOzsKKwllc2FjCisgICAgICBmaQorICAgICAgYXNfZm5fYXBwZW5kIGFjX2NvbmZpZ3VyZV9hcmdzICIgJyRhY19hcmcnIgorICAgICAgOzsKKyAgICBlc2FjCisgIGRvbmUKK2RvbmUKK3sgYWNfY29uZmlndXJlX2FyZ3MwPTsgdW5zZXQgYWNfY29uZmlndXJlX2FyZ3MwO30KK3sgYWNfY29uZmlndXJlX2FyZ3MxPTsgdW5zZXQgYWNfY29uZmlndXJlX2FyZ3MxO30KKworIyBXaGVuIGludGVycnVwdGVkIG9yIGV4aXQnZCwgY2xlYW51cCB0ZW1wb3JhcnkgZmlsZXMsIGFuZCBjb21wbGV0ZQorIyBjb25maWcubG9nLiAgV2UgcmVtb3ZlIGNvbW1lbnRzIGJlY2F1c2UgYW55d2F5IHRoZSBxdW90ZXMgaW4gdGhlcmUKKyMgd291bGQgY2F1c2UgcHJvYmxlbXMgb3IgbG9vayB1Z2x5LgorIyBXQVJOSU5HOiBVc2UgJ1wnJyB0byByZXByZXNlbnQgYW4gYXBvc3Ryb3BoZSB3aXRoaW4gdGhlIHRyYXAuCisjIFdBUk5JTkc6IERvIG5vdCBzdGFydCB0aGUgdHJhcCBjb2RlIHdpdGggYSBuZXdsaW5lLCBkdWUgdG8gYSBGcmVlQlNEIDQuMCBidWcuCit0cmFwICdleGl0X3N0YXR1cz0kPworICAjIFNhdmUgaW50byBjb25maWcubG9nIHNvbWUgaW5mb3JtYXRpb24gdGhhdCBtaWdodCBoZWxwIGluIGRlYnVnZ2luZy4KKyAgeworICAgIGVjaG8KKworICAgICRhc19lY2hvICIjIyAtLS0tLS0tLS0tLS0tLS0tICMjCisjIyBDYWNoZSB2YXJpYWJsZXMuICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tICMjIgorICAgIGVjaG8KKyAgICAjIFRoZSBmb2xsb3dpbmcgd2F5IG9mIHdyaXRpbmcgdGhlIGNhY2hlIG1pc2hhbmRsZXMgbmV3bGluZXMgaW4gdmFsdWVzLAorKAorICBmb3IgYWNfdmFyIGluIGAoc2V0KSAyPiYxIHwgc2VkIC1uICdcJydzL15cKFthLXpBLVpfXVthLXpBLVowLTlfXSpcKT0uKi9cMS9wJ1wnJ2A7IGRvCisgICAgZXZhbCBhY192YWw9XCQkYWNfdmFyCisgICAgY2FzZSAkYWNfdmFsIGluICMoCisgICAgKiR7YXNfbmx9KikKKyAgICAgIGNhc2UgJGFjX3ZhciBpbiAjKAorICAgICAgKl9jdl8qKSB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IGNhY2hlIHZhcmlhYmxlICRhY192YXIgY29udGFpbnMgYSBuZXdsaW5lIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IGNhY2hlIHZhcmlhYmxlICRhY192YXIgY29udGFpbnMgYSBuZXdsaW5lIiA+JjI7fSA7OworICAgICAgZXNhYworICAgICAgY2FzZSAkYWNfdmFyIGluICMoCisgICAgICBfIHwgSUZTIHwgYXNfbmwpIDs7ICMoCisgICAgICBCQVNIX0FSR1YgfCBCQVNIX1NPVVJDRSkgZXZhbCAkYWNfdmFyPSA7OyAjKAorICAgICAgKikgeyBldmFsICRhY192YXI9OyB1bnNldCAkYWNfdmFyO30gOzsKKyAgICAgIGVzYWMgOzsKKyAgICBlc2FjCisgIGRvbmUKKyAgKHNldCkgMj4mMSB8CisgICAgY2FzZSAkYXNfbmxgKGFjX3NwYWNlPSdcJycgJ1wnJzsgc2V0KSAyPiYxYCBpbiAjKAorICAgICoke2FzX25sfWFjX3NwYWNlPVwgKikKKyAgICAgIHNlZCAtbiBcCisJInMvJ1wnJy8nXCcnXFxcXCdcJycnXCcnL2c7CisJICBzL15cXChbXyRhc19jcl9hbG51bV0qX2N2X1tfJGFzX2NyX2FsbnVtXSpcXCk9XFwoLipcXCkvXFwxPSdcJydcXDInXCcnL3AiCisgICAgICA7OyAjKAorICAgICopCisgICAgICBzZWQgLW4gIi9eW18kYXNfY3JfYWxudW1dKl9jdl9bXyRhc19jcl9hbG51bV0qPS9wIgorICAgICAgOzsKKyAgICBlc2FjIHwKKyAgICBzb3J0CispCisgICAgZWNobworCisgICAgJGFzX2VjaG8gIiMjIC0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBPdXRwdXQgdmFyaWFibGVzLiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0gIyMiCisgICAgZWNobworICAgIGZvciBhY192YXIgaW4gJGFjX3N1YnN0X3ZhcnMKKyAgICBkbworICAgICAgZXZhbCBhY192YWw9XCQkYWNfdmFyCisgICAgICBjYXNlICRhY192YWwgaW4KKyAgICAgICpcJ1wnJyopIGFjX3ZhbD1gJGFzX2VjaG8gIiRhY192YWwiIHwgc2VkICJzLydcJycvJ1wnJ1xcXFxcXFxcJ1wnJydcJycvZyJgOzsKKyAgICAgIGVzYWMKKyAgICAgICRhc19lY2hvICIkYWNfdmFyPSdcJyckYWNfdmFsJ1wnJyIKKyAgICBkb25lIHwgc29ydAorICAgIGVjaG8KKworICAgIGlmIHRlc3QgLW4gIiRhY19zdWJzdF9maWxlcyI7IHRoZW4KKyAgICAgICRhc19lY2hvICIjIyAtLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBGaWxlIHN1YnN0aXR1dGlvbnMuICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tICMjIgorICAgICAgZWNobworICAgICAgZm9yIGFjX3ZhciBpbiAkYWNfc3Vic3RfZmlsZXMKKyAgICAgIGRvCisJZXZhbCBhY192YWw9XCQkYWNfdmFyCisJY2FzZSAkYWNfdmFsIGluCisJKlwnXCcnKikgYWNfdmFsPWAkYXNfZWNobyAiJGFjX3ZhbCIgfCBzZWQgInMvJ1wnJy8nXCcnXFxcXFxcXFwnXCcnJ1wnJy9nImA7OworCWVzYWMKKwkkYXNfZWNobyAiJGFjX3Zhcj0nXCcnJGFjX3ZhbCdcJyciCisgICAgICBkb25lIHwgc29ydAorICAgICAgZWNobworICAgIGZpCisKKyAgICBpZiB0ZXN0IC1zIGNvbmZkZWZzLmg7IHRoZW4KKyAgICAgICRhc19lY2hvICIjIyAtLS0tLS0tLS0tLSAjIworIyMgY29uZmRlZnMuaC4gIyMKKyMjIC0tLS0tLS0tLS0tICMjIgorICAgICAgZWNobworICAgICAgY2F0IGNvbmZkZWZzLmgKKyAgICAgIGVjaG8KKyAgICBmaQorICAgIHRlc3QgIiRhY19zaWduYWwiICE9IDAgJiYKKyAgICAgICRhc19lY2hvICIkYXNfbWU6IGNhdWdodCBzaWduYWwgJGFjX3NpZ25hbCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiBleGl0ICRleGl0X3N0YXR1cyIKKyAgfSA+JjUKKyAgcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qICYmCisgICAgcm0gLWYgLXIgY29uZnRlc3QqIGNvbmZkZWZzKiBjb25mJCQqICRhY19jbGVhbl9maWxlcyAmJgorICAgIGV4aXQgJGV4aXRfc3RhdHVzCisnIDAKK2ZvciBhY19zaWduYWwgaW4gMSAyIDEzIDE1OyBkbworICB0cmFwICdhY19zaWduYWw9JyRhY19zaWduYWwnOyBhc19mbl9leGl0IDEnICRhY19zaWduYWwKK2RvbmUKK2FjX3NpZ25hbD0wCisKKyMgY29uZmRlZnMuaCBhdm9pZHMgT1MgY29tbWFuZCBsaW5lIGxlbmd0aCBsaW1pdHMgdGhhdCBERUZTIGNhbiBleGNlZWQuCitybSAtZiAtciBjb25mdGVzdCogY29uZmRlZnMuaAorCiskYXNfZWNobyAiLyogY29uZmRlZnMuaCAqLyIgPiBjb25mZGVmcy5oCisKKyMgUHJlZGVmaW5lZCBwcmVwcm9jZXNzb3IgdmFyaWFibGVzLgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFBBQ0tBR0VfTkFNRSAiJFBBQ0tBR0VfTkFNRSIKK19BQ0VPRgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFBBQ0tBR0VfVEFSTkFNRSAiJFBBQ0tBR0VfVEFSTkFNRSIKK19BQ0VPRgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFBBQ0tBR0VfVkVSU0lPTiAiJFBBQ0tBR0VfVkVSU0lPTiIKK19BQ0VPRgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFBBQ0tBR0VfU1RSSU5HICIkUEFDS0FHRV9TVFJJTkciCitfQUNFT0YKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBQQUNLQUdFX0JVR1JFUE9SVCAiJFBBQ0tBR0VfQlVHUkVQT1JUIgorX0FDRU9GCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgUEFDS0FHRV9VUkwgIiRQQUNLQUdFX1VSTCIKK19BQ0VPRgorCisKKyMgTGV0IHRoZSBzaXRlIGZpbGUgc2VsZWN0IGFuIGFsdGVybmF0ZSBjYWNoZSBmaWxlIGlmIGl0IHdhbnRzIHRvLgorIyBQcmVmZXIgYW4gZXhwbGljaXRseSBzZWxlY3RlZCBmaWxlIHRvIGF1dG9tYXRpY2FsbHkgc2VsZWN0ZWQgb25lcy4KK2FjX3NpdGVfZmlsZTE9Tk9ORQorYWNfc2l0ZV9maWxlMj1OT05FCitpZiB0ZXN0IC1uICIkQ09ORklHX1NJVEUiOyB0aGVuCisgICMgV2UgZG8gbm90IHdhbnQgYSBQQVRIIHNlYXJjaCBmb3IgY29uZmlnLnNpdGUuCisgIGNhc2UgJENPTkZJR19TSVRFIGluICMoKAorICAgIC0qKSAgYWNfc2l0ZV9maWxlMT0uLyRDT05GSUdfU0lURTs7CisgICAgKi8qKSBhY19zaXRlX2ZpbGUxPSRDT05GSUdfU0lURTs7CisgICAgKikgICBhY19zaXRlX2ZpbGUxPS4vJENPTkZJR19TSVRFOzsKKyAgZXNhYworZWxpZiB0ZXN0ICJ4JHByZWZpeCIgIT0geE5PTkU7IHRoZW4KKyAgYWNfc2l0ZV9maWxlMT0kcHJlZml4L3NoYXJlL2NvbmZpZy5zaXRlCisgIGFjX3NpdGVfZmlsZTI9JHByZWZpeC9ldGMvY29uZmlnLnNpdGUKK2Vsc2UKKyAgYWNfc2l0ZV9maWxlMT0kYWNfZGVmYXVsdF9wcmVmaXgvc2hhcmUvY29uZmlnLnNpdGUKKyAgYWNfc2l0ZV9maWxlMj0kYWNfZGVmYXVsdF9wcmVmaXgvZXRjL2NvbmZpZy5zaXRlCitmaQorZm9yIGFjX3NpdGVfZmlsZSBpbiAiJGFjX3NpdGVfZmlsZTEiICIkYWNfc2l0ZV9maWxlMiIKK2RvCisgIHRlc3QgIngkYWNfc2l0ZV9maWxlIiA9IHhOT05FICYmIGNvbnRpbnVlCisgIGlmIHRlc3QgL2Rldi9udWxsICE9ICIkYWNfc2l0ZV9maWxlIiAmJiB0ZXN0IC1yICIkYWNfc2l0ZV9maWxlIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogbG9hZGluZyBzaXRlIHNjcmlwdCAkYWNfc2l0ZV9maWxlIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGxvYWRpbmcgc2l0ZSBzY3JpcHQgJGFjX3NpdGVfZmlsZSIgPiY2O30KKyAgICBzZWQgJ3MvXi98IC8nICIkYWNfc2l0ZV9maWxlIiA+JjUKKyAgICAuICIkYWNfc2l0ZV9maWxlIiBcCisgICAgICB8fCB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KK2FzX2ZuX2Vycm9yICQ/ICJmYWlsZWQgdG8gbG9hZCBzaXRlIHNjcmlwdCAkYWNfc2l0ZV9maWxlCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNSA7IH0KKyAgZmkKK2RvbmUKKworaWYgdGVzdCAtciAiJGNhY2hlX2ZpbGUiOyB0aGVuCisgICMgU29tZSB2ZXJzaW9ucyBvZiBiYXNoIHdpbGwgZmFpbCB0byBzb3VyY2UgL2Rldi9udWxsIChzcGVjaWFsIGZpbGVzCisgICMgYWN0dWFsbHkpLCBzbyB3ZSBhdm9pZCBkb2luZyB0aGF0LiAgREpHUFAgZW11bGF0ZXMgaXQgYXMgYSByZWd1bGFyIGZpbGUuCisgIGlmIHRlc3QgL2Rldi9udWxsICE9ICIkY2FjaGVfZmlsZSIgJiYgdGVzdCAtZiAiJGNhY2hlX2ZpbGUiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBsb2FkaW5nIGNhY2hlICRjYWNoZV9maWxlIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGxvYWRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNjt9CisgICAgY2FzZSAkY2FjaGVfZmlsZSBpbgorICAgICAgW1xcL10qIHwgPzpbXFwvXSogKSAuICIkY2FjaGVfZmlsZSI7OworICAgICAgKikgICAgICAgICAgICAgICAgICAgICAgLiAiLi8kY2FjaGVfZmlsZSI7OworICAgIGVzYWMKKyAgZmkKK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjcmVhdGluZyBjYWNoZSAkY2FjaGVfZmlsZSIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBjcmVhdGluZyBjYWNoZSAkY2FjaGVfZmlsZSIgPiY2O30KKyAgPiRjYWNoZV9maWxlCitmaQorCisjIENoZWNrIHRoYXQgdGhlIHByZWNpb3VzIHZhcmlhYmxlcyBzYXZlZCBpbiB0aGUgY2FjaGUgaGF2ZSBrZXB0IHRoZSBzYW1lCisjIHZhbHVlLgorYWNfY2FjaGVfY29ycnVwdGVkPWZhbHNlCitmb3IgYWNfdmFyIGluICRhY19wcmVjaW91c192YXJzOyBkbworICBldmFsIGFjX29sZF9zZXQ9XCRhY19jdl9lbnZfJHthY192YXJ9X3NldAorICBldmFsIGFjX25ld19zZXQ9XCRhY19lbnZfJHthY192YXJ9X3NldAorICBldmFsIGFjX29sZF92YWw9XCRhY19jdl9lbnZfJHthY192YXJ9X3ZhbHVlCisgIGV2YWwgYWNfbmV3X3ZhbD1cJGFjX2Vudl8ke2FjX3Zhcn1fdmFsdWUKKyAgY2FzZSAkYWNfb2xkX3NldCwkYWNfbmV3X3NldCBpbgorICAgIHNldCwpCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBcYCRhY192YXInIHdhcyBzZXQgdG8gXGAkYWNfb2xkX3ZhbCcgaW4gdGhlIHByZXZpb3VzIHJ1biIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogXGAkYWNfdmFyJyB3YXMgc2V0IHRvIFxgJGFjX29sZF92YWwnIGluIHRoZSBwcmV2aW91cyBydW4iID4mMjt9CisgICAgICBhY19jYWNoZV9jb3JydXB0ZWQ9OiA7OworICAgICxzZXQpCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBcYCRhY192YXInIHdhcyBub3Qgc2V0IGluIHRoZSBwcmV2aW91cyBydW4iID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IFxgJGFjX3Zhcicgd2FzIG5vdCBzZXQgaW4gdGhlIHByZXZpb3VzIHJ1biIgPiYyO30KKyAgICAgIGFjX2NhY2hlX2NvcnJ1cHRlZD06IDs7CisgICAgLCk7OworICAgICopCisgICAgICBpZiB0ZXN0ICJ4JGFjX29sZF92YWwiICE9ICJ4JGFjX25ld192YWwiOyB0aGVuCisJIyBkaWZmZXJlbmNlcyBpbiB3aGl0ZXNwYWNlIGRvIG5vdCBsZWFkIHRvIGZhaWx1cmUuCisJYWNfb2xkX3ZhbF93PWBlY2hvIHggJGFjX29sZF92YWxgCisJYWNfbmV3X3ZhbF93PWBlY2hvIHggJGFjX25ld192YWxgCisJaWYgdGVzdCAiJGFjX29sZF92YWxfdyIgIT0gIiRhY19uZXdfdmFsX3ciOyB0aGVuCisJICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBcYCRhY192YXInIGhhcyBjaGFuZ2VkIHNpbmNlIHRoZSBwcmV2aW91cyBydW46IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBcYCRhY192YXInIGhhcyBjaGFuZ2VkIHNpbmNlIHRoZSBwcmV2aW91cyBydW46IiA+JjI7fQorCSAgYWNfY2FjaGVfY29ycnVwdGVkPToKKwllbHNlCisJICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHdhcm5pbmc6IGlnbm9yaW5nIHdoaXRlc3BhY2UgY2hhbmdlcyBpbiBcYCRhY192YXInIHNpbmNlIHRoZSBwcmV2aW91cyBydW46IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IHdhcm5pbmc6IGlnbm9yaW5nIHdoaXRlc3BhY2UgY2hhbmdlcyBpbiBcYCRhY192YXInIHNpbmNlIHRoZSBwcmV2aW91cyBydW46IiA+JjI7fQorCSAgZXZhbCAkYWNfdmFyPVwkYWNfb2xkX3ZhbAorCWZpCisJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAgIGZvcm1lciB2YWx1ZTogIFxgJGFjX29sZF92YWwnIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6ICAgZm9ybWVyIHZhbHVlOiAgXGAkYWNfb2xkX3ZhbCciID4mMjt9CisJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAgIGN1cnJlbnQgdmFsdWU6IFxgJGFjX25ld192YWwnIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6ICAgY3VycmVudCB2YWx1ZTogXGAkYWNfbmV3X3ZhbCciID4mMjt9CisgICAgICBmaTs7CisgIGVzYWMKKyAgIyBQYXNzIHByZWNpb3VzIHZhcmlhYmxlcyB0byBjb25maWcuc3RhdHVzLgorICBpZiB0ZXN0ICIkYWNfbmV3X3NldCIgPSBzZXQ7IHRoZW4KKyAgICBjYXNlICRhY19uZXdfdmFsIGluCisgICAgKlwnKikgYWNfYXJnPSRhY192YXI9YCRhc19lY2hvICIkYWNfbmV3X3ZhbCIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImAgOzsKKyAgICAqKSBhY19hcmc9JGFjX3Zhcj0kYWNfbmV3X3ZhbCA7OworICAgIGVzYWMKKyAgICBjYXNlICIgJGFjX2NvbmZpZ3VyZV9hcmdzICIgaW4KKyAgICAgICoiICckYWNfYXJnJyAiKikgOzsgIyBBdm9pZCBkdXBzLiAgVXNlIG9mIHF1b3RlcyBlbnN1cmVzIGFjY3VyYWN5LgorICAgICAgKikgYXNfZm5fYXBwZW5kIGFjX2NvbmZpZ3VyZV9hcmdzICIgJyRhY19hcmcnIiA7OworICAgIGVzYWMKKyAgZmkKK2RvbmUKK2lmICRhY19jYWNoZV9jb3JydXB0ZWQ7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBjaGFuZ2VzIGluIHRoZSBlbnZpcm9ubWVudCBjYW4gY29tcHJvbWlzZSB0aGUgYnVpbGQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGNoYW5nZXMgaW4gdGhlIGVudmlyb25tZW50IGNhbiBjb21wcm9taXNlIHRoZSBidWlsZCIgPiYyO30KKyAgYXNfZm5fZXJyb3IgJD8gInJ1biBcYG1ha2UgZGlzdGNsZWFuJyBhbmQvb3IgXGBybSAkY2FjaGVfZmlsZScgYW5kIHN0YXJ0IG92ZXIiICIkTElORU5PIiA1CitmaQorIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIE1haW4gYm9keSBvZiBzY3JpcHQuICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCithY19leHQ9YworYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CisKKworYW1fX2FwaV92ZXJzaW9uPScxLjExJworCithY19hdXhfZGlyPQorZm9yIGFjX2RpciBpbiAiJHNyY2RpciIgIiRzcmNkaXIvLi4iICIkc3JjZGlyLy4uLy4uIjsgZG8KKyAgaWYgdGVzdCAtZiAiJGFjX2Rpci9pbnN0YWxsLXNoIjsgdGhlbgorICAgIGFjX2F1eF9kaXI9JGFjX2RpcgorICAgIGFjX2luc3RhbGxfc2g9IiRhY19hdXhfZGlyL2luc3RhbGwtc2ggLWMiCisgICAgYnJlYWsKKyAgZWxpZiB0ZXN0IC1mICIkYWNfZGlyL2luc3RhbGwuc2giOyB0aGVuCisgICAgYWNfYXV4X2Rpcj0kYWNfZGlyCisgICAgYWNfaW5zdGFsbF9zaD0iJGFjX2F1eF9kaXIvaW5zdGFsbC5zaCAtYyIKKyAgICBicmVhaworICBlbGlmIHRlc3QgLWYgIiRhY19kaXIvc2h0b29sIjsgdGhlbgorICAgIGFjX2F1eF9kaXI9JGFjX2RpcgorICAgIGFjX2luc3RhbGxfc2g9IiRhY19hdXhfZGlyL3NodG9vbCBpbnN0YWxsIC1jIgorICAgIGJyZWFrCisgIGZpCitkb25lCitpZiB0ZXN0IC16ICIkYWNfYXV4X2RpciI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgJD8gImNhbm5vdCBmaW5kIGluc3RhbGwtc2gsIGluc3RhbGwuc2gsIG9yIHNodG9vbCBpbiBcIiRzcmNkaXJcIiBcIiRzcmNkaXIvLi5cIiBcIiRzcmNkaXIvLi4vLi5cIiIgIiRMSU5FTk8iIDUKK2ZpCisKKyMgVGhlc2UgdGhyZWUgdmFyaWFibGVzIGFyZSB1bmRvY3VtZW50ZWQgYW5kIHVuc3VwcG9ydGVkLAorIyBhbmQgYXJlIGludGVuZGVkIHRvIGJlIHdpdGhkcmF3biBpbiBhIGZ1dHVyZSBBdXRvY29uZiByZWxlYXNlLgorIyBUaGV5IGNhbiBjYXVzZSBzZXJpb3VzIHByb2JsZW1zIGlmIGEgYnVpbGRlcidzIHNvdXJjZSB0cmVlIGlzIGluIGEgZGlyZWN0b3J5CisjIHdob3NlIGZ1bGwgbmFtZSBjb250YWlucyB1bnVzdWFsIGNoYXJhY3RlcnMuCithY19jb25maWdfZ3Vlc3M9IiRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWcuZ3Vlc3MiICAjIFBsZWFzZSBkb24ndCB1c2UgdGhpcyB2YXIuCithY19jb25maWdfc3ViPSIkU0hFTEwgJGFjX2F1eF9kaXIvY29uZmlnLnN1YiIgICMgUGxlYXNlIGRvbid0IHVzZSB0aGlzIHZhci4KK2FjX2NvbmZpZ3VyZT0iJFNIRUxMICRhY19hdXhfZGlyL2NvbmZpZ3VyZSIgICMgUGxlYXNlIGRvbid0IHVzZSB0aGlzIHZhci4KKworCisjIEZpbmQgYSBnb29kIGluc3RhbGwgcHJvZ3JhbS4gIFdlIHByZWZlciBhIEMgcHJvZ3JhbSAoZmFzdGVyKSwKKyMgc28gb25lIHNjcmlwdCBpcyBhcyBnb29kIGFzIGFub3RoZXIuICBCdXQgYXZvaWQgdGhlIGJyb2tlbiBvcgorIyBpbmNvbXBhdGlibGUgdmVyc2lvbnM6CisjIFN5c1YgL2V0Yy9pbnN0YWxsLCAvdXNyL3NiaW4vaW5zdGFsbAorIyBTdW5PUyAvdXNyL2V0Yy9pbnN0YWxsCisjIElSSVggL3NiaW4vaW5zdGFsbAorIyBBSVggL2Jpbi9pbnN0YWxsCisjIEFtaWdhT1MgL0MvaW5zdGFsbCwgd2hpY2ggaW5zdGFsbHMgYm9vdGJsb2NrcyBvbiBmbG9wcHkgZGlzY3MKKyMgQUlYIDQgL3Vzci9iaW4vaW5zdGFsbGJzZCwgd2hpY2ggZG9lc24ndCB3b3JrIHdpdGhvdXQgYSAtZyBmbGFnCisjIEFGUyAvdXNyL2Fmc3dzL2Jpbi9pbnN0YWxsLCB3aGljaCBtaXNoYW5kbGVzIG5vbmV4aXN0ZW50IGFyZ3MKKyMgU1ZSNCAvdXNyL3VjYi9pbnN0YWxsLCB3aGljaCB0cmllcyB0byB1c2UgdGhlIG5vbmV4aXN0ZW50IGdyb3VwICJzdGFmZiIKKyMgT1MvMidzIHN5c3RlbSBpbnN0YWxsLCB3aGljaCBoYXMgYSBjb21wbGV0ZWx5IGRpZmZlcmVudCBzZW1hbnRpYworIyAuL2luc3RhbGwsIHdoaWNoIGNhbiBiZSBlcnJvbmVvdXNseSBjcmVhdGVkIGJ5IG1ha2UgZnJvbSAuL2luc3RhbGwuc2guCisjIFJlamVjdCBpbnN0YWxsIHByb2dyYW1zIHRoYXQgY2Fubm90IGluc3RhbGwgbXVsdGlwbGUgZmlsZXMuCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBhIEJTRC1jb21wYXRpYmxlIGluc3RhbGwiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGEgQlNELWNvbXBhdGlibGUgaW5zdGFsbC4uLiAiID4mNjsgfQoraWYgdGVzdCAteiAiJElOU1RBTEwiOyB0aGVuCitpZiB0ZXN0ICIke2FjX2N2X3BhdGhfaW5zdGFsbCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICAjIEFjY291bnQgZm9yIHBlb3BsZSB3aG8gcHV0IHRyYWlsaW5nIHNsYXNoZXMgaW4gUEFUSCBlbGVtZW50cy4KK2Nhc2UgJGFzX2Rpci8gaW4gIygoCisgIC4vIHwgLi8vIHwgL1tjQ10vKiB8IFwKKyAgL2V0Yy8qIHwgL3Vzci9zYmluLyogfCAvdXNyL2V0Yy8qIHwgL3NiaW4vKiB8IC91c3IvYWZzd3MvYmluLyogfCBcCisgID86W1xcL11vczJbXFwvXWluc3RhbGxbXFwvXSogfCA/OltcXC9dT1MyW1xcL11JTlNUQUxMW1xcL10qIHwgXAorICAvdXNyL3VjYi8qICkgOzsKKyAgKikKKyAgICAjIE9TRjEgYW5kIFNDTyBPRFQgMy4wIGhhdmUgdGhlaXIgb3duIG5hbWVzIGZvciBpbnN0YWxsLgorICAgICMgRG9uJ3QgdXNlIGluc3RhbGxic2QgZnJvbSBPU0Ygc2luY2UgaXQgaW5zdGFsbHMgc3R1ZmYgYXMgcm9vdAorICAgICMgYnkgZGVmYXVsdC4KKyAgICBmb3IgYWNfcHJvZyBpbiBnaW5zdGFsbCBzY29pbnN0IGluc3RhbGw7IGRvCisgICAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKwlpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiOyB9OyB0aGVuCisJICBpZiB0ZXN0ICRhY19wcm9nID0gaW5zdGFsbCAmJgorCSAgICBncmVwIGRzcG1zZyAiJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisJICAgICMgQUlYIGluc3RhbGwuICBJdCBoYXMgYW4gaW5jb21wYXRpYmxlIGNhbGxpbmcgY29udmVudGlvbi4KKwkgICAgOgorCSAgZWxpZiB0ZXN0ICRhY19wcm9nID0gaW5zdGFsbCAmJgorCSAgICBncmVwIHB3cGx1cyAiJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisJICAgICMgcHJvZ3JhbS1zcGVjaWZpYyBpbnN0YWxsIHNjcmlwdCB1c2VkIGJ5IEhQIHB3cGx1cy0tZG9uJ3QgdXNlLgorCSAgICA6CisJICBlbHNlCisJICAgIHJtIC1yZiBjb25mdGVzdC5vbmUgY29uZnRlc3QudHdvIGNvbmZ0ZXN0LmRpcgorCSAgICBlY2hvIG9uZSA+IGNvbmZ0ZXN0Lm9uZQorCSAgICBlY2hvIHR3byA+IGNvbmZ0ZXN0LnR3bworCSAgICBta2RpciBjb25mdGVzdC5kaXIKKwkgICAgaWYgIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiIC1jIGNvbmZ0ZXN0Lm9uZSBjb25mdGVzdC50d28gImBwd2RgL2NvbmZ0ZXN0LmRpciIgJiYKKwkgICAgICB0ZXN0IC1zIGNvbmZ0ZXN0Lm9uZSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LnR3byAmJgorCSAgICAgIHRlc3QgLXMgY29uZnRlc3QuZGlyL2NvbmZ0ZXN0Lm9uZSAmJgorCSAgICAgIHRlc3QgLXMgY29uZnRlc3QuZGlyL2NvbmZ0ZXN0LnR3bworCSAgICB0aGVuCisJICAgICAgYWNfY3ZfcGF0aF9pbnN0YWxsPSIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IC1jIgorCSAgICAgIGJyZWFrIDMKKwkgICAgZmkKKwkgIGZpCisJZmkKKyAgICAgIGRvbmUKKyAgICBkb25lCisgICAgOzsKK2VzYWMKKworICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK3JtIC1yZiBjb25mdGVzdC5vbmUgY29uZnRlc3QudHdvIGNvbmZ0ZXN0LmRpcgorCitmaQorICBpZiB0ZXN0ICIke2FjX2N2X3BhdGhfaW5zdGFsbCtzZXR9IiA9IHNldDsgdGhlbgorICAgIElOU1RBTEw9JGFjX2N2X3BhdGhfaW5zdGFsbAorICBlbHNlCisgICAgIyBBcyBhIGxhc3QgcmVzb3J0LCB1c2UgdGhlIHNsb3cgc2hlbGwgc2NyaXB0LiAgRG9uJ3QgY2FjaGUgYQorICAgICMgdmFsdWUgZm9yIElOU1RBTEwgd2l0aGluIGEgc291cmNlIGRpcmVjdG9yeSwgYmVjYXVzZSB0aGF0IHdpbGwKKyAgICAjIGJyZWFrIG90aGVyIHBhY2thZ2VzIHVzaW5nIHRoZSBjYWNoZSBpZiB0aGF0IGRpcmVjdG9yeSBpcworICAgICMgcmVtb3ZlZCwgb3IgaWYgdGhlIHZhbHVlIGlzIGEgcmVsYXRpdmUgbmFtZS4KKyAgICBJTlNUQUxMPSRhY19pbnN0YWxsX3NoCisgIGZpCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRJTlNUQUxMIiA+JjUKKyRhc19lY2hvICIkSU5TVEFMTCIgPiY2OyB9CisKKyMgVXNlIHRlc3QgLXogYmVjYXVzZSBTdW5PUzQgc2ggbWlzaGFuZGxlcyBicmFjZXMgaW4gJHt2YXItdmFsfS4KKyMgSXQgdGhpbmtzIHRoZSBmaXJzdCBjbG9zZSBicmFjZSBlbmRzIHRoZSB2YXJpYWJsZSBzdWJzdGl0dXRpb24uCit0ZXN0IC16ICIkSU5TVEFMTF9QUk9HUkFNIiAmJiBJTlNUQUxMX1BST0dSQU09JyR7SU5TVEFMTH0nCisKK3Rlc3QgLXogIiRJTlNUQUxMX1NDUklQVCIgJiYgSU5TVEFMTF9TQ1JJUFQ9JyR7SU5TVEFMTH0nCisKK3Rlc3QgLXogIiRJTlNUQUxMX0RBVEEiICYmIElOU1RBTExfREFUQT0nJHtJTlNUQUxMfSAtbSA2NDQnCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBidWlsZCBlbnZpcm9ubWVudCBpcyBzYW5lIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgYnVpbGQgZW52aXJvbm1lbnQgaXMgc2FuZS4uLiAiID4mNjsgfQorIyBKdXN0IGluIGNhc2UKK3NsZWVwIDEKK2VjaG8gdGltZXN0YW1wID4gY29uZnRlc3QuZmlsZQorIyBSZWplY3QgdW5zYWZlIGNoYXJhY3RlcnMgaW4gJHNyY2RpciBvciB0aGUgYWJzb2x1dGUgd29ya2luZyBkaXJlY3RvcnkKKyMgbmFtZS4gIEFjY2VwdCBzcGFjZSBhbmQgdGFiIG9ubHkgaW4gdGhlIGxhdHRlci4KK2FtX2xmPScKKycKK2Nhc2UgYHB3ZGAgaW4KKyAgKltcXFwiXCNcJFwmXCdcYCRhbV9sZl0qKQorICAgIGFzX2ZuX2Vycm9yICQ/ICJ1bnNhZmUgYWJzb2x1dGUgd29ya2luZyBkaXJlY3RvcnkgbmFtZSIgIiRMSU5FTk8iIDUgOzsKK2VzYWMKK2Nhc2UgJHNyY2RpciBpbgorICAqW1xcXCJcI1wkXCZcJ1xgJGFtX2xmXCBcCV0qKQorICAgIGFzX2ZuX2Vycm9yICQ/ICJ1bnNhZmUgc3JjZGlyIHZhbHVlOiBcYCRzcmNkaXInIiAiJExJTkVOTyIgNSA7OworZXNhYworCisjIERvIGBzZXQnIGluIGEgc3Vic2hlbGwgc28gd2UgZG9uJ3QgY2xvYmJlciB0aGUgY3VycmVudCBzaGVsbCdzCisjIGFyZ3VtZW50cy4gIE11c3QgdHJ5IC1MIGZpcnN0IGluIGNhc2UgY29uZmlndXJlIGlzIGFjdHVhbGx5IGEKKyMgc3ltbGluazsgc29tZSBzeXN0ZW1zIHBsYXkgd2VpcmQgZ2FtZXMgd2l0aCB0aGUgbW9kIHRpbWUgb2Ygc3ltbGlua3MKKyMgKGVnIEZyZWVCU0QgcmV0dXJucyB0aGUgbW9kIHRpbWUgb2YgdGhlIHN5bWxpbmsncyBjb250YWluaW5nCisjIGRpcmVjdG9yeSkuCitpZiAoCisgICBzZXQgWCBgbHMgLUx0ICIkc3JjZGlyL2NvbmZpZ3VyZSIgY29uZnRlc3QuZmlsZSAyPiAvZGV2L251bGxgCisgICBpZiB0ZXN0ICIkKiIgPSAiWCI7IHRoZW4KKyAgICAgICMgLUwgZGlkbid0IHdvcmsuCisgICAgICBzZXQgWCBgbHMgLXQgIiRzcmNkaXIvY29uZmlndXJlIiBjb25mdGVzdC5maWxlYAorICAgZmkKKyAgIHJtIC1mIGNvbmZ0ZXN0LmZpbGUKKyAgIGlmIHRlc3QgIiQqIiAhPSAiWCAkc3JjZGlyL2NvbmZpZ3VyZSBjb25mdGVzdC5maWxlIiBcCisgICAgICAmJiB0ZXN0ICIkKiIgIT0gIlggY29uZnRlc3QuZmlsZSAkc3JjZGlyL2NvbmZpZ3VyZSI7IHRoZW4KKworICAgICAgIyBJZiBuZWl0aGVyIG1hdGNoZWQsIHRoZW4gd2UgaGF2ZSBhIGJyb2tlbiBscy4gIFRoaXMgY2FuIGhhcHBlbgorICAgICAgIyBpZiwgZm9yIGluc3RhbmNlLCBDT05GSUdfU0hFTEwgaXMgYmFzaCBhbmQgaXQgaW5oZXJpdHMgYQorICAgICAgIyBicm9rZW4gbHMgYWxpYXMgZnJvbSB0aGUgZW52aXJvbm1lbnQuICBUaGlzIGhhcyBhY3R1YWxseQorICAgICAgIyBoYXBwZW5lZC4gIFN1Y2ggYSBzeXN0ZW0gY291bGQgbm90IGJlIGNvbnNpZGVyZWQgInNhbmUiLgorICAgICAgYXNfZm5fZXJyb3IgJD8gImxzIC10IGFwcGVhcnMgdG8gZmFpbC4gIE1ha2Ugc3VyZSB0aGVyZSBpcyBub3QgYSBicm9rZW4KK2FsaWFzIGluIHlvdXIgZW52aXJvbm1lbnQiICIkTElORU5PIiA1CisgICBmaQorCisgICB0ZXN0ICIkMiIgPSBjb25mdGVzdC5maWxlCisgICApCit0aGVuCisgICAjIE9rLgorICAgOgorZWxzZQorICAgYXNfZm5fZXJyb3IgJD8gIm5ld2x5IGNyZWF0ZWQgZmlsZSBpcyBvbGRlciB0aGFuIGRpc3RyaWJ1dGVkIGZpbGVzIQorQ2hlY2sgeW91ciBzeXN0ZW0gY2xvY2siICIkTElORU5PIiA1CitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KK3Rlc3QgIiRwcm9ncmFtX3ByZWZpeCIgIT0gTk9ORSAmJgorICBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lPSJzJl4mJHByb2dyYW1fcHJlZml4JjskcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSIKKyMgVXNlIGEgZG91YmxlICQgc28gbWFrZSBpZ25vcmVzIGl0LgordGVzdCAiJHByb2dyYW1fc3VmZml4IiAhPSBOT05FICYmCisgIHByb2dyYW1fdHJhbnNmb3JtX25hbWU9InMmXCQmJHByb2dyYW1fc3VmZml4JjskcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSIKKyMgRG91YmxlIGFueSBcIG9yICQuCisjIEJ5IGRlZmF1bHQgd2FzIGBzLHgseCcsIHJlbW92ZSBpdCBpZiB1c2VsZXNzLgorYWNfc2NyaXB0PSdzL1tcXCRdLyYmL2c7cy87cyx4LHgsJC8vJworcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZT1gJGFzX2VjaG8gIiRwcm9ncmFtX3RyYW5zZm9ybV9uYW1lIiB8IHNlZCAiJGFjX3NjcmlwdCJgCisKKyMgZXhwYW5kICRhY19hdXhfZGlyIHRvIGFuIGFic29sdXRlIHBhdGgKK2FtX2F1eF9kaXI9YGNkICRhY19hdXhfZGlyICYmIHB3ZGAKKworaWYgdGVzdCB4IiR7TUlTU0lORytzZXR9IiAhPSB4c2V0OyB0aGVuCisgIGNhc2UgJGFtX2F1eF9kaXIgaW4KKyAgKlwgKiB8ICpcCSopCisgICAgTUlTU0lORz0iXCR7U0hFTEx9IFwiJGFtX2F1eF9kaXIvbWlzc2luZ1wiIiA7OworICAqKQorICAgIE1JU1NJTkc9Ilwke1NIRUxMfSAkYW1fYXV4X2Rpci9taXNzaW5nIiA7OworICBlc2FjCitmaQorIyBVc2UgZXZhbCB0byBleHBhbmQgJFNIRUxMCitpZiBldmFsICIkTUlTU0lORyAtLXJ1biB0cnVlIjsgdGhlbgorICBhbV9taXNzaW5nX3J1bj0iJE1JU1NJTkcgLS1ydW4gIgorZWxzZQorICBhbV9taXNzaW5nX3J1bj0KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBcYG1pc3NpbmcnIHNjcmlwdCBpcyB0b28gb2xkIG9yIG1pc3NpbmciID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogXGBtaXNzaW5nJyBzY3JpcHQgaXMgdG9vIG9sZCBvciBtaXNzaW5nIiA+JjI7fQorZmkKKworaWYgdGVzdCB4IiR7aW5zdGFsbF9zaH0iICE9IHhzZXQ7IHRoZW4KKyAgY2FzZSAkYW1fYXV4X2RpciBpbgorICAqXCAqIHwgKlwJKikKKyAgICBpbnN0YWxsX3NoPSJcJHtTSEVMTH0gJyRhbV9hdXhfZGlyL2luc3RhbGwtc2gnIiA7OworICAqKQorICAgIGluc3RhbGxfc2g9Ilwke1NIRUxMfSAkYW1fYXV4X2Rpci9pbnN0YWxsLXNoIgorICBlc2FjCitmaQorCisjIEluc3RhbGxlZCBiaW5hcmllcyBhcmUgdXN1YWxseSBzdHJpcHBlZCB1c2luZyBgc3RyaXAnIHdoZW4gdGhlIHVzZXIKKyMgcnVuIGBtYWtlIGluc3RhbGwtc3RyaXAnLiAgSG93ZXZlciBgc3RyaXAnIG1pZ2h0IG5vdCBiZSB0aGUgcmlnaHQKKyMgdG9vbCB0byB1c2UgaW4gY3Jvc3MtY29tcGlsYXRpb24gZW52aXJvbm1lbnRzLCB0aGVyZWZvcmUgQXV0b21ha2UKKyMgd2lsbCBob25vciB0aGUgYFNUUklQJyBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byBvdmVycnVsZSB0aGlzIHByb2dyYW0uCitpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiAhPSBubzsgdGhlbgorICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1zdHJpcCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1zdHJpcDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfU1RSSVArc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkU1RSSVAiOyB0aGVuCisgIGFjX2N2X3Byb2dfU1RSSVA9IiRTVFJJUCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX1NUUklQPSIke2FjX3Rvb2xfcHJlZml4fXN0cmlwIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK1NUUklQPSRhY19jdl9wcm9nX1NUUklQCitpZiB0ZXN0IC1uICIkU1RSSVAiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkU1RSSVAiID4mNQorJGFzX2VjaG8gIiRTVFJJUCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfU1RSSVAiOyB0aGVuCisgIGFjX2N0X1NUUklQPSRTVFJJUAorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgInN0cmlwIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBzdHJpcDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfU1RSSVArc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfU1RSSVAiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfU1RSSVA9IiRhY19jdF9TVFJJUCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X1NUUklQPSJzdHJpcCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCithY19jdF9TVFJJUD0kYWNfY3ZfcHJvZ19hY19jdF9TVFJJUAoraWYgdGVzdCAtbiAiJGFjX2N0X1NUUklQIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X1NUUklQIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfU1RSSVAiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKyAgaWYgdGVzdCAieCRhY19jdF9TVFJJUCIgPSB4OyB0aGVuCisgICAgU1RSSVA9IjoiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgU1RSSVA9JGFjX2N0X1NUUklQCisgIGZpCitlbHNlCisgIFNUUklQPSIkYWNfY3ZfcHJvZ19TVFJJUCIKK2ZpCisKK2ZpCitJTlNUQUxMX1NUUklQX1BST0dSQU09IlwkKGluc3RhbGxfc2gpIC1jIC1zIgorCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBhIHRocmVhZC1zYWZlIG1rZGlyIC1wIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBhIHRocmVhZC1zYWZlIG1rZGlyIC1wLi4uICIgPiY2OyB9CitpZiB0ZXN0IC16ICIkTUtESVJfUCI7IHRoZW4KKyAgaWYgdGVzdCAiJHthY19jdl9wYXRoX21rZGlyK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSCRQQVRIX1NFUEFSQVRPUi9vcHQvc2Z3L2JpbgorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19wcm9nIGluIG1rZGlyIGdta2RpcjsgZG8KKwkgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisJICAgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IjsgfSB8fCBjb250aW51ZQorCSAgIGNhc2UgYCIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IiAtLXZlcnNpb24gMj4mMWAgaW4gIygKKwkgICAgICdta2RpciAoR05VIGNvcmV1dGlscykgJyogfCBcCisJICAgICAnbWtkaXIgKGNvcmV1dGlscykgJyogfCBcCisJICAgICAnbWtkaXIgKGZpbGV1dGlscykgJzQuMSopCisJICAgICAgIGFjX2N2X3BhdGhfbWtkaXI9JGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dAorCSAgICAgICBicmVhayAzOzsKKwkgICBlc2FjCisJIGRvbmUKKyAgICAgICBkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKKworICB0ZXN0IC1kIC4vLS12ZXJzaW9uICYmIHJtZGlyIC4vLS12ZXJzaW9uCisgIGlmIHRlc3QgIiR7YWNfY3ZfcGF0aF9ta2RpcitzZXR9IiA9IHNldDsgdGhlbgorICAgIE1LRElSX1A9IiRhY19jdl9wYXRoX21rZGlyIC1wIgorICBlbHNlCisgICAgIyBBcyBhIGxhc3QgcmVzb3J0LCB1c2UgdGhlIHNsb3cgc2hlbGwgc2NyaXB0LiAgRG9uJ3QgY2FjaGUgYQorICAgICMgdmFsdWUgZm9yIE1LRElSX1Agd2l0aGluIGEgc291cmNlIGRpcmVjdG9yeSwgYmVjYXVzZSB0aGF0IHdpbGwKKyAgICAjIGJyZWFrIG90aGVyIHBhY2thZ2VzIHVzaW5nIHRoZSBjYWNoZSBpZiB0aGF0IGRpcmVjdG9yeSBpcworICAgICMgcmVtb3ZlZCwgb3IgaWYgdGhlIHZhbHVlIGlzIGEgcmVsYXRpdmUgbmFtZS4KKyAgICBNS0RJUl9QPSIkYWNfaW5zdGFsbF9zaCAtZCIKKyAgZmkKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJE1LRElSX1AiID4mNQorJGFzX2VjaG8gIiRNS0RJUl9QIiA+JjY7IH0KKworbWtkaXJfcD0iJE1LRElSX1AiCitjYXNlICRta2Rpcl9wIGluCisgIFtcXC8kXSogfCA/OltcXC9dKikgOzsKKyAgKi8qKSBta2Rpcl9wPSJcJCh0b3BfYnVpbGRkaXIpLyRta2Rpcl9wIiA7OworZXNhYworCitmb3IgYWNfcHJvZyBpbiBnYXdrIG1hd2sgbmF3ayBhd2sKK2RvCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICRhY19wcm9nOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19BV0src2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkQVdLIjsgdGhlbgorICBhY19jdl9wcm9nX0FXSz0iJEFXSyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX0FXSz0iJGFjX3Byb2ciCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorQVdLPSRhY19jdl9wcm9nX0FXSworaWYgdGVzdCAtbiAiJEFXSyI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRBV0siID4mNQorJGFzX2VjaG8gIiRBV0siID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworICB0ZXN0IC1uICIkQVdLIiAmJiBicmVhaworZG9uZQorCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgJHtNQUtFLW1ha2V9IHNldHMgXCQoTUFLRSkiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAke01BS0UtbWFrZX0gc2V0cyBcJChNQUtFKS4uLiAiID4mNjsgfQorc2V0IHggJHtNQUtFLW1ha2V9CithY19tYWtlPWAkYXNfZWNobyAiJDIiIHwgc2VkICdzLysvcC9nOyBzL1teYS16QS1aMC05X10vXy9nJ2AKK2lmIGV2YWwgInRlc3QgXCJcJHthY19jdl9wcm9nX21ha2VfJHthY19tYWtlfV9zZXQrc2V0fVwiIiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCA+Y29uZnRlc3QubWFrZSA8PFxfQUNFT0YKK1NIRUxMID0gL2Jpbi9zaAorYWxsOgorCUBlY2hvICdAQEAlJSU9JChNQUtFKT1AQEAlJSUnCitfQUNFT0YKKyMgR05VIG1ha2Ugc29tZXRpbWVzIHByaW50cyAibWFrZVsxXTogRW50ZXJpbmcgLi4uIiwgd2hpY2ggd291bGQgY29uZnVzZSB1cy4KK2Nhc2UgYCR7TUFLRS1tYWtlfSAtZiBjb25mdGVzdC5tYWtlIDI+L2Rldi9udWxsYCBpbgorICAqQEBAJSUlPT8qPUBAQCUlJSopCisgICAgZXZhbCBhY19jdl9wcm9nX21ha2VfJHthY19tYWtlfV9zZXQ9eWVzOzsKKyAgKikKKyAgICBldmFsIGFjX2N2X3Byb2dfbWFrZV8ke2FjX21ha2V9X3NldD1ubzs7Citlc2FjCitybSAtZiBjb25mdGVzdC5tYWtlCitmaQoraWYgZXZhbCB0ZXN0IFwkYWNfY3ZfcHJvZ19tYWtlXyR7YWNfbWFrZX1fc2V0ID0geWVzOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgIFNFVF9NQUtFPQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgU0VUX01BS0U9Ik1BS0U9JHtNQUtFLW1ha2V9IgorZmkKKworcm0gLXJmIC50c3QgMj4vZGV2L251bGwKK21rZGlyIC50c3QgMj4vZGV2L251bGwKK2lmIHRlc3QgLWQgLnRzdDsgdGhlbgorICBhbV9fbGVhZGluZ19kb3Q9LgorZWxzZQorICBhbV9fbGVhZGluZ19kb3Q9XworZmkKK3JtZGlyIC50c3QgMj4vZGV2L251bGwKKworaWYgdGVzdCAiYGNkICRzcmNkaXIgJiYgcHdkYCIgIT0gImBwd2RgIjsgdGhlbgorICAjIFVzZSAtSSQoc3JjZGlyKSBvbmx5IHdoZW4gJChzcmNkaXIpICE9IC4sIHNvIHRoYXQgbWFrZSdzIG91dHB1dAorICAjIGlzIG5vdCBwb2xsdXRlZCB3aXRoIHJlcGVhdGVkICItSS4iCisgIGFtX19pc3JjPScgLUkkKHNyY2RpciknCisgICMgdGVzdCB0byBzZWUgaWYgc3JjZGlyIGFscmVhZHkgY29uZmlndXJlZAorICBpZiB0ZXN0IC1mICRzcmNkaXIvY29uZmlnLnN0YXR1czsgdGhlbgorICAgIGFzX2ZuX2Vycm9yICQ/ICJzb3VyY2UgZGlyZWN0b3J5IGFscmVhZHkgY29uZmlndXJlZDsgcnVuIFwibWFrZSBkaXN0Y2xlYW5cIiB0aGVyZSBmaXJzdCIgIiRMSU5FTk8iIDUKKyAgZmkKK2ZpCisKKyMgdGVzdCB3aGV0aGVyIHdlIGhhdmUgY3lncGF0aAoraWYgdGVzdCAteiAiJENZR1BBVEhfVyI7IHRoZW4KKyAgaWYgKGN5Z3BhdGggLS12ZXJzaW9uKSA+L2Rldi9udWxsIDI+L2Rldi9udWxsOyB0aGVuCisgICAgQ1lHUEFUSF9XPSdjeWdwYXRoIC13JworICBlbHNlCisgICAgQ1lHUEFUSF9XPWVjaG8KKyAgZmkKK2ZpCisKKworIyBEZWZpbmUgdGhlIGlkZW50aXR5IG9mIHRoZSBwYWNrYWdlLgorIFBBQ0tBR0U9b3Byb2ZpbGUKKyBWRVJTSU9OPTAuOS43CisKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBQQUNLQUdFICIkUEFDS0FHRSIKK19BQ0VPRgorCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgVkVSU0lPTiAiJFZFUlNJT04iCitfQUNFT0YKKworIyBTb21lIHRvb2xzIEF1dG9tYWtlIG5lZWRzLgorCitBQ0xPQ0FMPSR7QUNMT0NBTC0iJHthbV9taXNzaW5nX3J1bn1hY2xvY2FsLSR7YW1fX2FwaV92ZXJzaW9ufSJ9CisKKworQVVUT0NPTkY9JHtBVVRPQ09ORi0iJHthbV9taXNzaW5nX3J1bn1hdXRvY29uZiJ9CisKKworQVVUT01BS0U9JHtBVVRPTUFLRS0iJHthbV9taXNzaW5nX3J1bn1hdXRvbWFrZS0ke2FtX19hcGlfdmVyc2lvbn0ifQorCisKK0FVVE9IRUFERVI9JHtBVVRPSEVBREVSLSIke2FtX21pc3NpbmdfcnVufWF1dG9oZWFkZXIifQorCisKK01BS0VJTkZPPSR7TUFLRUlORk8tIiR7YW1fbWlzc2luZ19ydW59bWFrZWluZm8ifQorCisjIFdlIG5lZWQgYXdrIGZvciB0aGUgImNoZWNrIiB0YXJnZXQuICBUaGUgc3lzdGVtICJhd2siIGlzIGJhZCBvbgorIyBzb21lIHBsYXRmb3Jtcy4KKyMgQWx3YXlzIGRlZmluZSBBTVRBUiBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4KKworQU1UQVI9JHtBTVRBUi0iJHthbV9taXNzaW5nX3J1bn10YXIifQorCithbV9fdGFyPScke0FNVEFSfSBjaG9mIC0gIiQkdGFyZGlyIic7IGFtX191bnRhcj0nJHtBTVRBUn0geGYgLScKKworCisKKworCithY19jb25maWdfaGVhZGVycz0iJGFjX2NvbmZpZ19oZWFkZXJzIGNvbmZpZy5oIgorCisKK0RFUERJUj0iJHthbV9fbGVhZGluZ19kb3R9ZGVwcyIKKworYWNfY29uZmlnX2NvbW1hbmRzPSIkYWNfY29uZmlnX2NvbW1hbmRzIGRlcGZpbGVzIgorCisKK2FtX21ha2U9JHtNQUtFLW1ha2V9CitjYXQgPiBjb25maW5jIDw8ICdFTkQnCithbV9fZG9pdDoKKwlAZWNobyB0aGlzIGlzIHRoZSBhbV9fZG9pdCB0YXJnZXQKKy5QSE9OWTogYW1fX2RvaXQKK0VORAorIyBJZiB3ZSBkb24ndCBmaW5kIGFuIGluY2x1ZGUgZGlyZWN0aXZlLCBqdXN0IGNvbW1lbnQgb3V0IHRoZSBjb2RlLgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igc3R5bGUgb2YgaW5jbHVkZSB1c2VkIGJ5ICRhbV9tYWtlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBzdHlsZSBvZiBpbmNsdWRlIHVzZWQgYnkgJGFtX21ha2UuLi4gIiA+JjY7IH0KK2FtX19pbmNsdWRlPSIjIgorYW1fX3F1b3RlPQorX2FtX3Jlc3VsdD1ub25lCisjIEZpcnN0IHRyeSBHTlUgbWFrZSBzdHlsZSBpbmNsdWRlLgorZWNobyAiaW5jbHVkZSBjb25maW5jIiA+IGNvbmZtZgorIyBJZ25vcmUgYWxsIGtpbmRzIG9mIGFkZGl0aW9uYWwgb3V0cHV0IGZyb20gYG1ha2UnLgorY2FzZSBgJGFtX21ha2UgLXMgLWYgY29uZm1mIDI+IC9kZXYvbnVsbGAgaW4gIygKKyp0aGVcIGFtX19kb2l0XCB0YXJnZXQqKQorICBhbV9faW5jbHVkZT1pbmNsdWRlCisgIGFtX19xdW90ZT0KKyAgX2FtX3Jlc3VsdD1HTlUKKyAgOzsKK2VzYWMKKyMgTm93IHRyeSBCU0QgbWFrZSBzdHlsZSBpbmNsdWRlLgoraWYgdGVzdCAiJGFtX19pbmNsdWRlIiA9ICIjIjsgdGhlbgorICAgZWNobyAnLmluY2x1ZGUgImNvbmZpbmMiJyA+IGNvbmZtZgorICAgY2FzZSBgJGFtX21ha2UgLXMgLWYgY29uZm1mIDI+IC9kZXYvbnVsbGAgaW4gIygKKyAgICp0aGVcIGFtX19kb2l0XCB0YXJnZXQqKQorICAgICBhbV9faW5jbHVkZT0uaW5jbHVkZQorICAgICBhbV9fcXVvdGU9IlwiIgorICAgICBfYW1fcmVzdWx0PUJTRAorICAgICA7OworICAgZXNhYworZmkKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJF9hbV9yZXN1bHQiID4mNQorJGFzX2VjaG8gIiRfYW1fcmVzdWx0IiA+JjY7IH0KK3JtIC1mIGNvbmZpbmMgY29uZm1mCisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1kZXBlbmRlbmN5LXRyYWNraW5nIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmcrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9kZXBlbmRlbmN5X3RyYWNraW5nOworZmkKKworaWYgdGVzdCAieCRlbmFibGVfZGVwZW5kZW5jeV90cmFja2luZyIgIT0geG5vOyB0aGVuCisgIGFtX2RlcGNvbXA9IiRhY19hdXhfZGlyL2RlcGNvbXAiCisgIEFNREVQQkFDS1NMQVNIPSdcJworZmkKKyBpZiB0ZXN0ICJ4JGVuYWJsZV9kZXBlbmRlbmN5X3RyYWNraW5nIiAhPSB4bm87IHRoZW4KKyAgQU1ERVBfVFJVRT0KKyAgQU1ERVBfRkFMU0U9JyMnCitlbHNlCisgIEFNREVQX1RSVUU9JyMnCisgIEFNREVQX0ZBTFNFPQorZmkKKworCithY19leHQ9YworYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CitpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1nY2MiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9Z2NjOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19DQytzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRDQyI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19DQz0iJENDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfQ0M9IiR7YWNfdG9vbF9wcmVmaXh9Z2NjIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK0NDPSRhY19jdl9wcm9nX0NDCitpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkQ0MiID4mNQorJGFzX2VjaG8gIiRDQyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfQ0MiOyB0aGVuCisgIGFjX2N0X0NDPSRDQworICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImdjYyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgZ2NjOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9DQytzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9DQyI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9DQz0iJGFjX2N0X0NDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfQ0M9ImdjYyIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCithY19jdF9DQz0kYWNfY3ZfcHJvZ19hY19jdF9DQworaWYgdGVzdCAtbiAiJGFjX2N0X0NDIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X0NDIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfQ0MiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKyAgaWYgdGVzdCAieCRhY19jdF9DQyIgPSB4OyB0aGVuCisgICAgQ0M9IiIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBDQz0kYWNfY3RfQ0MKKyAgZmkKK2Vsc2UKKyAgQ0M9IiRhY19jdl9wcm9nX0NDIgorZmkKKworaWYgdGVzdCAteiAiJENDIjsgdGhlbgorICAgICAgICAgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9Y2MiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9Y2M7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX0NDK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJENDIjsgdGhlbgorICBhY19jdl9wcm9nX0NDPSIkQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19DQz0iJHthY190b29sX3ByZWZpeH1jYyIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitDQz0kYWNfY3ZfcHJvZ19DQworaWYgdGVzdCAtbiAiJENDIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJENDIiA+JjUKKyRhc19lY2hvICIkQ0MiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworICBmaQorZmkKK2lmIHRlc3QgLXogIiRDQyI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJjYyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgY2M7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX0NDK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJENDIjsgdGhlbgorICBhY19jdl9wcm9nX0NDPSIkQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorICBhY19wcm9nX3JlamVjdGVkPW5vCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBpZiB0ZXN0ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA9ICIvdXNyL3VjYi9jYyI7IHRoZW4KKyAgICAgICBhY19wcm9nX3JlamVjdGVkPXllcworICAgICAgIGNvbnRpbnVlCisgICAgIGZpCisgICAgYWNfY3ZfcHJvZ19DQz0iY2MiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2lmIHRlc3QgJGFjX3Byb2dfcmVqZWN0ZWQgPSB5ZXM7IHRoZW4KKyAgIyBXZSBmb3VuZCBhIGJvZ29uIGluIHRoZSBwYXRoLCBzbyBtYWtlIHN1cmUgd2UgbmV2ZXIgdXNlIGl0LgorICBzZXQgZHVtbXkgJGFjX2N2X3Byb2dfQ0MKKyAgc2hpZnQKKyAgaWYgdGVzdCAkIyAhPSAwOyB0aGVuCisgICAgIyBXZSBjaG9zZSBhIGRpZmZlcmVudCBjb21waWxlciBmcm9tIHRoZSBib2d1cyBvbmUuCisgICAgIyBIb3dldmVyLCBpdCBoYXMgdGhlIHNhbWUgYmFzZW5hbWUsIHNvIHRoZSBib2dvbiB3aWxsIGJlIGNob3NlbgorICAgICMgZmlyc3QgaWYgd2Ugc2V0IENDIHRvIGp1c3QgdGhlIGJhc2VuYW1lOyB1c2UgdGhlIGZ1bGwgZmlsZSBuYW1lLgorICAgIHNoaWZ0CisgICAgYWNfY3ZfcHJvZ19DQz0iJGFzX2Rpci8kYWNfd29yZCR7MSsnICd9JEAiCisgIGZpCitmaQorZmkKK2ZpCitDQz0kYWNfY3ZfcHJvZ19DQworaWYgdGVzdCAtbiAiJENDIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJENDIiA+JjUKKyRhc19lY2hvICIkQ0MiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworZmkKK2lmIHRlc3QgLXogIiRDQyI7IHRoZW4KKyAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICBmb3IgYWNfcHJvZyBpbiBjbC5leGUKKyAgZG8KKyAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY190b29sX3ByZWZpeCRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfQ0Mrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCisgIGFjX2N2X3Byb2dfQ0M9IiRDQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX0NDPSIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitDQz0kYWNfY3ZfcHJvZ19DQworaWYgdGVzdCAtbiAiJENDIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJENDIiA+JjUKKyRhc19lY2hvICIkQ0MiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworICAgIHRlc3QgLW4gIiRDQyIgJiYgYnJlYWsKKyAgZG9uZQorZmkKK2lmIHRlc3QgLXogIiRDQyI7IHRoZW4KKyAgYWNfY3RfQ0M9JENDCisgIGZvciBhY19wcm9nIGluIGNsLmV4ZQorZG8KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJGFjX3Byb2c7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X0NDK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X0NDIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X0NDPSIkYWNfY3RfQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19hY19jdF9DQz0iJGFjX3Byb2ciCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorYWNfY3RfQ0M9JGFjX2N2X3Byb2dfYWNfY3RfQ0MKK2lmIHRlc3QgLW4gIiRhY19jdF9DQyI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9DQyIgPiY1CiskYXNfZWNobyAiJGFjX2N0X0NDIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKKyAgdGVzdCAtbiAiJGFjX2N0X0NDIiAmJiBicmVhaworZG9uZQorCisgIGlmIHRlc3QgIngkYWNfY3RfQ0MiID0geDsgdGhlbgorICAgIENDPSIiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgQ0M9JGFjX2N0X0NDCisgIGZpCitmaQorCitmaQorCisKK3Rlc3QgLXogIiRDQyIgJiYgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Cithc19mbl9lcnJvciAkPyAibm8gYWNjZXB0YWJsZSBDIGNvbXBpbGVyIGZvdW5kIGluIFwkUEFUSAorU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDUgOyB9CisKKyMgUHJvdmlkZSBzb21lIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjb21waWxlci4KKyRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBDIGNvbXBpbGVyIHZlcnNpb24iID4mNQorc2V0IFggJGFjX2NvbXBpbGUKK2FjX2NvbXBpbGVyPSQyCitmb3IgYWNfb3B0aW9uIGluIC0tdmVyc2lvbiAtdiAtViAtcXZlcnNpb247IGRvCisgIHsgeyBhY190cnk9IiRhY19jb21waWxlciAkYWNfb3B0aW9uID4mNSIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQorICAoZXZhbCAiJGFjX2NvbXBpbGVyICRhY19vcHRpb24gPiY1IikgMj5jb25mdGVzdC5lcnIKKyAgYWNfc3RhdHVzPSQ/CisgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgc2VkICcxMGFcCisuLi4gcmVzdCBvZiBzdGRlcnIgb3V0cHV0IGRlbGV0ZWQgLi4uCisgICAgICAgICAxMHEnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIxCisgICAgY2F0IGNvbmZ0ZXN0LmVyMSA+JjUKKyAgZmkKKyAgcm0gLWYgY29uZnRlc3QuZXIxIGNvbmZ0ZXN0LmVycgorICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfQorZG9uZQorCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2FjX2NsZWFuX2ZpbGVzX3NhdmU9JGFjX2NsZWFuX2ZpbGVzCithY19jbGVhbl9maWxlcz0iJGFjX2NsZWFuX2ZpbGVzIGEub3V0IGEub3V0LmRTWU0gYS5leGUgYi5vdXQiCisjIFRyeSB0byBjcmVhdGUgYW4gZXhlY3V0YWJsZSB3aXRob3V0IC1vIGZpcnN0LCBkaXNyZWdhcmQgYS5vdXQuCisjIEl0IHdpbGwgaGVscCB1cyBkaWFnbm9zZSBicm9rZW4gY29tcGlsZXJzLCBhbmQgZmluZGluZyBvdXQgYW4gaW50dWl0aW9uCisjIG9mIGV4ZWV4dC4KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0aGUgQyBjb21waWxlciB3b3JrcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSBDIGNvbXBpbGVyIHdvcmtzLi4uICIgPiY2OyB9CithY19saW5rX2RlZmF1bHQ9YCRhc19lY2hvICIkYWNfbGluayIgfCBzZWQgJ3MvIC1vICpjb25mdGVzdFteIF0qLy8nYAorCisjIFRoZSBwb3NzaWJsZSBvdXRwdXQgZmlsZXM6CithY19maWxlcz0iYS5vdXQgY29uZnRlc3QuZXhlIGNvbmZ0ZXN0IGEuZXhlIGFfb3V0LmV4ZSBiLm91dCBjb25mdGVzdC4qIgorCithY19ybWZpbGVzPQorZm9yIGFjX2ZpbGUgaW4gJGFjX2ZpbGVzCitkbworICBjYXNlICRhY19maWxlIGluCisgICAgKi4kYWNfZXh0IHwgKi54Y29mZiB8ICoudGRzIHwgKi5kIHwgKi5wZGIgfCAqLnhTWU0gfCAqLmJiIHwgKi5iYmcgfCAqLm1hcCB8ICouaW5mIHwgKi5kU1lNIHwgKi5vIHwgKi5vYmogKSA7OworICAgICogKSBhY19ybWZpbGVzPSIkYWNfcm1maWxlcyAkYWNfZmlsZSI7OworICBlc2FjCitkb25lCitybSAtZiAkYWNfcm1maWxlcworCitpZiB7IHsgYWNfdHJ5PSIkYWNfbGlua19kZWZhdWx0IgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisgIChldmFsICIkYWNfbGlua19kZWZhdWx0IikgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4gOgorICAjIEF1dG9jb25mLTIuMTMgY291bGQgc2V0IHRoZSBhY19jdl9leGVleHQgdmFyaWFibGUgdG8gYG5vJy4KKyMgU28gaWdub3JlIGEgdmFsdWUgb2YgYG5vJywgb3RoZXJ3aXNlIHRoaXMgd291bGQgbGVhZCB0byBgRVhFRVhUID0gbm8nCisjIGluIGEgTWFrZWZpbGUuICBXZSBzaG91bGQgbm90IG92ZXJyaWRlIGFjX2N2X2V4ZWV4dCBpZiBpdCB3YXMgY2FjaGVkLAorIyBzbyB0aGF0IHRoZSB1c2VyIGNhbiBzaG9ydC1jaXJjdWl0IHRoaXMgdGVzdCBmb3IgY29tcGlsZXJzIHVua25vd24gdG8KKyMgQXV0b2NvbmYuCitmb3IgYWNfZmlsZSBpbiAkYWNfZmlsZXMgJycKK2RvCisgIHRlc3QgLWYgIiRhY19maWxlIiB8fCBjb250aW51ZQorICBjYXNlICRhY19maWxlIGluCisgICAgKi4kYWNfZXh0IHwgKi54Y29mZiB8ICoudGRzIHwgKi5kIHwgKi5wZGIgfCAqLnhTWU0gfCAqLmJiIHwgKi5iYmcgfCAqLm1hcCB8ICouaW5mIHwgKi5kU1lNIHwgKi5vIHwgKi5vYmogKQorCTs7CisgICAgW2FiXS5vdXQgKQorCSMgV2UgZm91bmQgdGhlIGRlZmF1bHQgZXhlY3V0YWJsZSwgYnV0IGV4ZWV4dD0nJyBpcyBtb3N0CisJIyBjZXJ0YWlubHkgcmlnaHQuCisJYnJlYWs7OworICAgICouKiApCisJaWYgdGVzdCAiJHthY19jdl9leGVleHQrc2V0fSIgPSBzZXQgJiYgdGVzdCAiJGFjX2N2X2V4ZWV4dCIgIT0gbm87CisJdGhlbiA6OyBlbHNlCisJICAgYWNfY3ZfZXhlZXh0PWBleHByICIkYWNfZmlsZSIgOiAnW14uXSpcKFwuLipcKSdgCisJZmkKKwkjIFdlIHNldCBhY19jdl9leGVleHQgaGVyZSBiZWNhdXNlIHRoZSBsYXRlciB0ZXN0IGZvciBpdCBpcyBub3QKKwkjIHNhZmU6IGNyb3NzIGNvbXBpbGVycyBtYXkgbm90IGFkZCB0aGUgc3VmZml4IGlmIGdpdmVuIGFuIGAtbycKKwkjIGFyZ3VtZW50LCBzbyB3ZSBtYXkgbmVlZCB0byBrbm93IGl0IGF0IHRoYXQgcG9pbnQgYWxyZWFkeS4KKwkjIEV2ZW4gaWYgdGhpcyBzZWN0aW9uIGxvb2tzIGNydWZ0eTogaXQgaGFzIHRoZSBhZHZhbnRhZ2Ugb2YKKwkjIGFjdHVhbGx5IHdvcmtpbmcuCisJYnJlYWs7OworICAgICogKQorCWJyZWFrOzsKKyAgZXNhYworZG9uZQordGVzdCAiJGFjX2N2X2V4ZWV4dCIgPSBubyAmJiBhY19jdl9leGVleHQ9CisKK2Vsc2UKKyAgYWNfZmlsZT0nJworZmkKK2lmIHRlc3QgLXogIiRhY19maWxlIjsgdGhlbiA6CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK3sgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorYXNfZm5fZXJyb3IgNzcgIkMgY29tcGlsZXIgY2Fubm90IGNyZWF0ZSBleGVjdXRhYmxlcworU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDUgOyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgQyBjb21waWxlciBkZWZhdWx0IG91dHB1dCBmaWxlIG5hbWUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIEMgY29tcGlsZXIgZGVmYXVsdCBvdXRwdXQgZmlsZSBuYW1lLi4uICIgPiY2OyB9Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2ZpbGUiID4mNQorJGFzX2VjaG8gIiRhY19maWxlIiA+JjY7IH0KK2FjX2V4ZWV4dD0kYWNfY3ZfZXhlZXh0CisKK3JtIC1mIC1yIGEub3V0IGEub3V0LmRTWU0gYS5leGUgY29uZnRlc3QkYWNfY3ZfZXhlZXh0IGIub3V0CithY19jbGVhbl9maWxlcz0kYWNfY2xlYW5fZmlsZXNfc2F2ZQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igc3VmZml4IG9mIGV4ZWN1dGFibGVzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBzdWZmaXggb2YgZXhlY3V0YWJsZXMuLi4gIiA+JjY7IH0KK2lmIHsgeyBhY190cnk9IiRhY19saW5rIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisgIChldmFsICIkYWNfbGluayIpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuIDoKKyAgIyBJZiBib3RoIGBjb25mdGVzdC5leGUnIGFuZCBgY29uZnRlc3QnIGFyZSBgcHJlc2VudCcgKHdlbGwsIG9ic2VydmFibGUpCisjIGNhdGNoIGBjb25mdGVzdC5leGUnLiAgRm9yIGluc3RhbmNlIHdpdGggQ3lnd2luLCBgbHMgY29uZnRlc3QnIHdpbGwKKyMgd29yayBwcm9wZXJseSAoaS5lLiwgcmVmZXIgdG8gYGNvbmZ0ZXN0LmV4ZScpLCB3aGlsZSBpdCB3b24ndCB3aXRoCisjIGBybScuCitmb3IgYWNfZmlsZSBpbiBjb25mdGVzdC5leGUgY29uZnRlc3QgY29uZnRlc3QuKjsgZG8KKyAgdGVzdCAtZiAiJGFjX2ZpbGUiIHx8IGNvbnRpbnVlCisgIGNhc2UgJGFjX2ZpbGUgaW4KKyAgICAqLiRhY19leHQgfCAqLnhjb2ZmIHwgKi50ZHMgfCAqLmQgfCAqLnBkYiB8ICoueFNZTSB8ICouYmIgfCAqLmJiZyB8ICoubWFwIHwgKi5pbmYgfCAqLmRTWU0gfCAqLm8gfCAqLm9iaiApIDs7CisgICAgKi4qICkgYWNfY3ZfZXhlZXh0PWBleHByICIkYWNfZmlsZSIgOiAnW14uXSpcKFwuLipcKSdgCisJICBicmVhazs7CisgICAgKiApIGJyZWFrOzsKKyAgZXNhYworZG9uZQorZWxzZQorICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KK2FzX2ZuX2Vycm9yICQ/ICJjYW5ub3QgY29tcHV0ZSBzdWZmaXggb2YgZXhlY3V0YWJsZXM6IGNhbm5vdCBjb21waWxlIGFuZCBsaW5rCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNSA7IH0KK2ZpCitybSAtZiBjb25mdGVzdCBjb25mdGVzdCRhY19jdl9leGVleHQKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfZXhlZXh0IiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfZXhlZXh0IiA+JjY7IH0KKworcm0gLWYgY29uZnRlc3QuJGFjX2V4dAorRVhFRVhUPSRhY19jdl9leGVleHQKK2FjX2V4ZWV4dD0kRVhFRVhUCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8c3RkaW8uaD4KK2ludAorbWFpbiAoKQoreworRklMRSAqZiA9IGZvcGVuICgiY29uZnRlc3Qub3V0IiwgInciKTsKKyByZXR1cm4gZmVycm9yIChmKSB8fCBmY2xvc2UgKGYpICE9IDA7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorYWNfY2xlYW5fZmlsZXM9IiRhY19jbGVhbl9maWxlcyBjb25mdGVzdC5vdXQiCisjIENoZWNrIHRoYXQgdGhlIGNvbXBpbGVyIHByb2R1Y2VzIGV4ZWN1dGFibGVzIHdlIGNhbiBydW4uICBJZiBub3QsIGVpdGhlcgorIyB0aGUgY29tcGlsZXIgaXMgYnJva2VuLCBvciB3ZSBjcm9zcyBjb21waWxlLgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHdlIGFyZSBjcm9zcyBjb21waWxpbmciID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgY3Jvc3MgY29tcGlsaW5nLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiAhPSB5ZXM7IHRoZW4KKyAgeyB7IGFjX3RyeT0iJGFjX2xpbmsiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKKyAgKGV2YWwgIiRhY19saW5rIikgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0KKyAgaWYgeyBhY190cnk9Jy4vY29uZnRlc3QkYWNfY3ZfZXhlZXh0JworICB7IHsgY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisgIChldmFsICIkYWNfdHJ5IikgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IH07IHRoZW4KKyAgICBjcm9zc19jb21waWxpbmc9bm8KKyAgZWxzZQorICAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0gbWF5YmU7IHRoZW4KKwljcm9zc19jb21waWxpbmc9eWVzCisgICAgZWxzZQorCXsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorYXNfZm5fZXJyb3IgJD8gImNhbm5vdCBydW4gQyBjb21waWxlZCBwcm9ncmFtcy4KK0lmIHlvdSBtZWFudCB0byBjcm9zcyBjb21waWxlLCB1c2UgXGAtLWhvc3QnLgorU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDUgOyB9CisgICAgZmkKKyAgZmkKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGNyb3NzX2NvbXBpbGluZyIgPiY1CiskYXNfZWNobyAiJGNyb3NzX2NvbXBpbGluZyIgPiY2OyB9CisKK3JtIC1mIGNvbmZ0ZXN0LiRhY19leHQgY29uZnRlc3QkYWNfY3ZfZXhlZXh0IGNvbmZ0ZXN0Lm91dAorYWNfY2xlYW5fZmlsZXM9JGFjX2NsZWFuX2ZpbGVzX3NhdmUKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHN1ZmZpeCBvZiBvYmplY3QgZmlsZXMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHN1ZmZpeCBvZiBvYmplY3QgZmlsZXMuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3Zfb2JqZXh0K3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC5vIGNvbmZ0ZXN0Lm9iagoraWYgeyB7IGFjX3RyeT0iJGFjX2NvbXBpbGUiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKKyAgKGV2YWwgIiRhY19jb21waWxlIikgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4gOgorICBmb3IgYWNfZmlsZSBpbiBjb25mdGVzdC5vIGNvbmZ0ZXN0Lm9iaiBjb25mdGVzdC4qOyBkbworICB0ZXN0IC1mICIkYWNfZmlsZSIgfHwgY29udGludWU7CisgIGNhc2UgJGFjX2ZpbGUgaW4KKyAgICAqLiRhY19leHQgfCAqLnhjb2ZmIHwgKi50ZHMgfCAqLmQgfCAqLnBkYiB8ICoueFNZTSB8ICouYmIgfCAqLmJiZyB8ICoubWFwIHwgKi5pbmYgfCAqLmRTWU0gKSA7OworICAgICopIGFjX2N2X29iamV4dD1gZXhwciAiJGFjX2ZpbGUiIDogJy4qXC5cKC4qXCknYAorICAgICAgIGJyZWFrOzsKKyAgZXNhYworZG9uZQorZWxzZQorICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Cithc19mbl9lcnJvciAkPyAiY2Fubm90IGNvbXB1dGUgc3VmZml4IG9mIG9iamVjdCBmaWxlczogY2Fubm90IGNvbXBpbGUKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1IDsgfQorZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19jdl9vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3Zfb2JqZXh0IiA+JjUKKyRhc19lY2hvICIkYWNfY3Zfb2JqZXh0IiA+JjY7IH0KK09CSkVYVD0kYWNfY3Zfb2JqZXh0CithY19vYmpleHQ9JE9CSkVYVAoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHdlIGFyZSB1c2luZyB0aGUgR05VIEMgY29tcGlsZXIiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgdXNpbmcgdGhlIEdOVSBDIGNvbXBpbGVyLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X2NfY29tcGlsZXJfZ251K3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKyNpZm5kZWYgX19HTlVDX18KKyAgICAgICBjaG9rZSBtZQorI2VuZGlmCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jb21waWxlcl9nbnU9eWVzCitlbHNlCisgIGFjX2NvbXBpbGVyX2dudT1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorYWNfY3ZfY19jb21waWxlcl9nbnU9JGFjX2NvbXBpbGVyX2dudQorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9jX2NvbXBpbGVyX2dudSIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2NfY29tcGlsZXJfZ251IiA+JjY7IH0KK2lmIHRlc3QgJGFjX2NvbXBpbGVyX2dudSA9IHllczsgdGhlbgorICBHQ0M9eWVzCitlbHNlCisgIEdDQz0KK2ZpCithY190ZXN0X0NGTEFHUz0ke0NGTEFHUytzZXR9CithY19zYXZlX0NGTEFHUz0kQ0ZMQUdTCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgJENDIGFjY2VwdHMgLWciID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAkQ0MgYWNjZXB0cyAtZy4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX2NjX2crc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19zYXZlX2Nfd2Vycm9yX2ZsYWc9JGFjX2Nfd2Vycm9yX2ZsYWcKKyAgIGFjX2Nfd2Vycm9yX2ZsYWc9eWVzCisgICBhY19jdl9wcm9nX2NjX2c9bm8KKyAgIENGTEFHUz0iLWciCisgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfcHJvZ19jY19nPXllcworZWxzZQorICBDRkxBR1M9IiIKKyAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCitlbHNlCisgIGFjX2Nfd2Vycm9yX2ZsYWc9JGFjX3NhdmVfY193ZXJyb3JfZmxhZworCSBDRkxBR1M9Ii1nIgorCSBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfcHJvZ19jY19nPXllcworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgYWNfY193ZXJyb3JfZmxhZz0kYWNfc2F2ZV9jX3dlcnJvcl9mbGFnCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9wcm9nX2NjX2ciID4mNQorJGFzX2VjaG8gIiRhY19jdl9wcm9nX2NjX2ciID4mNjsgfQoraWYgdGVzdCAiJGFjX3Rlc3RfQ0ZMQUdTIiA9IHNldDsgdGhlbgorICBDRkxBR1M9JGFjX3NhdmVfQ0ZMQUdTCitlbGlmIHRlc3QgJGFjX2N2X3Byb2dfY2NfZyA9IHllczsgdGhlbgorICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgIENGTEFHUz0iLWcgLU8yIgorICBlbHNlCisgICAgQ0ZMQUdTPSItZyIKKyAgZmkKK2Vsc2UKKyAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICBDRkxBR1M9Ii1PMiIKKyAgZWxzZQorICAgIENGTEFHUz0KKyAgZmkKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkQ0Mgb3B0aW9uIHRvIGFjY2VwdCBJU08gQzg5IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkQ0Mgb3B0aW9uIHRvIGFjY2VwdCBJU08gQzg5Li4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfY2NfYzg5K3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfY3ZfcHJvZ19jY19jODk9bm8KK2FjX3NhdmVfQ0M9JENDCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorLyogTW9zdCBvZiB0aGUgZm9sbG93aW5nIHRlc3RzIGFyZSBzdG9sZW4gZnJvbSBSQ1MgNS43J3Mgc3JjL2NvbmYuc2guICAqLworc3RydWN0IGJ1ZiB7IGludCB4OyB9OworRklMRSAqICgqcmNzb3BlbikgKHN0cnVjdCBidWYgKiwgc3RydWN0IHN0YXQgKiwgaW50KTsKK3N0YXRpYyBjaGFyICplIChwLCBpKQorICAgICBjaGFyICoqcDsKKyAgICAgaW50IGk7Cit7CisgIHJldHVybiBwW2ldOworfQorc3RhdGljIGNoYXIgKmYgKGNoYXIgKiAoKmcpIChjaGFyICoqLCBpbnQpLCBjaGFyICoqcCwgLi4uKQoreworICBjaGFyICpzOworICB2YV9saXN0IHY7CisgIHZhX3N0YXJ0ICh2LHApOworICBzID0gZyAocCwgdmFfYXJnICh2LGludCkpOworICB2YV9lbmQgKHYpOworICByZXR1cm4gczsKK30KKworLyogT1NGIDQuMCBDb21wYXEgY2MgaXMgc29tZSBzb3J0IG9mIGFsbW9zdC1BTlNJIGJ5IGRlZmF1bHQuICBJdCBoYXMKKyAgIGZ1bmN0aW9uIHByb3RvdHlwZXMgYW5kIHN0dWZmLCBidXQgbm90ICdceEhIJyBoZXggY2hhcmFjdGVyIGNvbnN0YW50cy4KKyAgIFRoZXNlIGRvbid0IHByb3Zva2UgYW4gZXJyb3IgdW5mb3J0dW5hdGVseSwgaW5zdGVhZCBhcmUgc2lsZW50bHkgdHJlYXRlZAorICAgYXMgJ3gnLiAgVGhlIGZvbGxvd2luZyBpbmR1Y2VzIGFuIGVycm9yLCB1bnRpbCAtc3RkIGlzIGFkZGVkIHRvIGdldAorICAgcHJvcGVyIEFOU0kgbW9kZS4gIEN1cmlvdXNseSAnXHgwMCchPSd4JyBhbHdheXMgY29tZXMgb3V0IHRydWUsIGZvciBhbgorICAgYXJyYXkgc2l6ZSBhdCBsZWFzdC4gIEl0J3MgbmVjZXNzYXJ5IHRvIHdyaXRlICdceDAwJz09MCB0byBnZXQgc29tZXRoaW5nCisgICB0aGF0J3MgdHJ1ZSBvbmx5IHdpdGggLXN0ZC4gICovCitpbnQgb3NmNF9jY19hcnJheSBbJ1x4MDAnID09IDAgPyAxIDogLTFdOworCisvKiBJQk0gQyA2IGZvciBBSVggaXMgYWxtb3N0LUFOU0kgYnkgZGVmYXVsdCwgYnV0IGl0IHJlcGxhY2VzIG1hY3JvIHBhcmFtZXRlcnMKKyAgIGluc2lkZSBzdHJpbmdzIGFuZCBjaGFyYWN0ZXIgY29uc3RhbnRzLiAgKi8KKyNkZWZpbmUgRk9PKHgpICd4JworaW50IHhsYzZfY2NfYXJyYXlbRk9PKGEpID09ICd4JyA/IDEgOiAtMV07CisKK2ludCB0ZXN0IChpbnQgaSwgZG91YmxlIHgpOworc3RydWN0IHMxIHtpbnQgKCpmKSAoaW50IGEpO307CitzdHJ1Y3QgczIge2ludCAoKmYpIChkb3VibGUgYSk7fTsKK2ludCBwYWlybmFtZXMgKGludCwgY2hhciAqKiwgRklMRSAqKCopKHN0cnVjdCBidWYgKiwgc3RydWN0IHN0YXQgKiwgaW50KSwgaW50LCBpbnQpOworaW50IGFyZ2M7CitjaGFyICoqYXJndjsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIGYgKGUsIGFyZ3YsIDApICE9IGFyZ3ZbMF0gIHx8ICBmIChlLCBhcmd2LCAxKSAhPSBhcmd2WzFdOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitmb3IgYWNfYXJnIGluICcnIC1xbGFuZ2x2bD1leHRjODkgLXFsYW5nbHZsPWFuc2kgLXN0ZCBcCisJLUFlICItQWEgLURfSFBVWF9TT1VSQ0UiICItWGMgLURfX0VYVEVOU0lPTlNfXyIKK2RvCisgIENDPSIkYWNfc2F2ZV9DQyAkYWNfYXJnIgorICBpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X3Byb2dfY2NfYzg5PSRhY19hcmcKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0CisgIHRlc3QgIngkYWNfY3ZfcHJvZ19jY19jODkiICE9ICJ4bm8iICYmIGJyZWFrCitkb25lCitybSAtZiBjb25mdGVzdC4kYWNfZXh0CitDQz0kYWNfc2F2ZV9DQworCitmaQorIyBBQ19DQUNIRV9WQUwKK2Nhc2UgIngkYWNfY3ZfcHJvZ19jY19jODkiIGluCisgIHgpCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vbmUgbmVlZGVkIiA+JjUKKyRhc19lY2hvICJub25lIG5lZWRlZCIgPiY2OyB9IDs7CisgIHhubykKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogdW5zdXBwb3J0ZWQiID4mNQorJGFzX2VjaG8gInVuc3VwcG9ydGVkIiA+JjY7IH0gOzsKKyAgKikKKyAgICBDQz0iJENDICRhY19jdl9wcm9nX2NjX2M4OSIKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3Byb2dfY2NfYzg5IiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfcHJvZ19jY19jODkiID4mNjsgfSA7OworZXNhYworaWYgdGVzdCAieCRhY19jdl9wcm9nX2NjX2M4OSIgIT0geG5vOyB0aGVuIDoKKworZmkKKworYWNfZXh0PWMKK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorCitkZXBjYz0iJENDIiAgIGFtX2NvbXBpbGVyX2xpc3Q9CisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZGVwZW5kZW5jeSBzdHlsZSBvZiAkZGVwY2MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZGVwZW5kZW5jeSBzdHlsZSBvZiAkZGVwY2MuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YW1fY3ZfQ0NfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC16ICIkQU1ERVBfVFJVRSIgJiYgdGVzdCAtZiAiJGFtX2RlcGNvbXAiOyB0aGVuCisgICMgV2UgbWFrZSBhIHN1YmRpciBhbmQgZG8gdGhlIHRlc3RzIHRoZXJlLiAgT3RoZXJ3aXNlIHdlIGNhbiBlbmQgdXAKKyAgIyBtYWtpbmcgYm9ndXMgZmlsZXMgdGhhdCB3ZSBkb24ndCBrbm93IGFib3V0IGFuZCBuZXZlciByZW1vdmUuICBGb3IKKyAgIyBpbnN0YW5jZSBpdCB3YXMgcmVwb3J0ZWQgdGhhdCBvbiBIUC1VWCB0aGUgZ2NjIHRlc3Qgd2lsbCBlbmQgdXAKKyAgIyBtYWtpbmcgYSBkdW1teSBmaWxlIG5hbWVkIGBEJyAtLSBiZWNhdXNlIGAtTUQnIG1lYW5zIGBwdXQgdGhlIG91dHB1dAorICAjIGluIEQnLgorICBta2RpciBjb25mdGVzdC5kaXIKKyAgIyBDb3B5IGRlcGNvbXAgdG8gc3ViZGlyIGJlY2F1c2Ugb3RoZXJ3aXNlIHdlIHdvbid0IGZpbmQgaXQgaWYgd2UncmUKKyAgIyB1c2luZyBhIHJlbGF0aXZlIGRpcmVjdG9yeS4KKyAgY3AgIiRhbV9kZXBjb21wIiBjb25mdGVzdC5kaXIKKyAgY2QgY29uZnRlc3QuZGlyCisgICMgV2Ugd2lsbCBidWlsZCBvYmplY3RzIGFuZCBkZXBlbmRlbmNpZXMgaW4gYSBzdWJkaXJlY3RvcnkgYmVjYXVzZQorICAjIGl0IGhlbHBzIHRvIGRldGVjdCBpbmFwcGxpY2FibGUgZGVwZW5kZW5jeSBtb2Rlcy4gIEZvciBpbnN0YW5jZQorICAjIGJvdGggVHJ1NjQncyBjYyBhbmQgSUNDIHN1cHBvcnQgLU1EIHRvIG91dHB1dCBkZXBlbmRlbmNpZXMgYXMgYQorICAjIHNpZGUgZWZmZWN0IG9mIGNvbXBpbGF0aW9uLCBidXQgSUNDIHdpbGwgcHV0IHRoZSBkZXBlbmRlbmNpZXMgaW4KKyAgIyB0aGUgY3VycmVudCBkaXJlY3Rvcnkgd2hpbGUgVHJ1NjQgd2lsbCBwdXQgdGhlbSBpbiB0aGUgb2JqZWN0CisgICMgZGlyZWN0b3J5LgorICBta2RpciBzdWIKKworICBhbV9jdl9DQ19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZT1ub25lCisgIGlmIHRlc3QgIiRhbV9jb21waWxlcl9saXN0IiA9ICIiOyB0aGVuCisgICAgIGFtX2NvbXBpbGVyX2xpc3Q9YHNlZCAtbiAncy9eIypcKFthLXpBLVowLTldKlwpKSQvXDEvcCcgPCAuL2RlcGNvbXBgCisgIGZpCisgIGFtX191bml2ZXJzYWw9ZmFsc2UKKyAgY2FzZSAiICRkZXBjYyAiIGluICMoCisgICAgICpcIC1hcmNoXCAqXCAtYXJjaFwgKikgYW1fX3VuaXZlcnNhbD10cnVlIDs7CisgICAgIGVzYWMKKworICBmb3IgZGVwbW9kZSBpbiAkYW1fY29tcGlsZXJfbGlzdDsgZG8KKyAgICAjIFNldHVwIGEgc291cmNlIHdpdGggbWFueSBkZXBlbmRlbmNpZXMsIGJlY2F1c2Ugc29tZSBjb21waWxlcnMKKyAgICAjIGxpa2UgdG8gd3JhcCBsYXJnZSBkZXBlbmRlbmN5IGxpc3RzIG9uIGNvbHVtbiA4MCAod2l0aCBcKSwgYW5kCisgICAgIyB3ZSBzaG91bGQgbm90IGNob29zZSBhIGRlcGNvbXAgbW9kZSB3aGljaCBpcyBjb25mdXNlZCBieSB0aGlzLgorICAgICMKKyAgICAjIFdlIG5lZWQgdG8gcmVjcmVhdGUgdGhlc2UgZmlsZXMgZm9yIGVhY2ggdGVzdCwgYXMgdGhlIGNvbXBpbGVyIG1heQorICAgICMgb3ZlcndyaXRlIHNvbWUgb2YgdGhlbSB3aGVuIHRlc3Rpbmcgd2l0aCBvYnNjdXJlIGNvbW1hbmQgbGluZXMuCisgICAgIyBUaGlzIGhhcHBlbnMgYXQgbGVhc3Qgd2l0aCB0aGUgQUlYIEMgY29tcGlsZXIuCisgICAgOiA+IHN1Yi9jb25mdGVzdC5jCisgICAgZm9yIGkgaW4gMSAyIDMgNCA1IDY7IGRvCisgICAgICBlY2hvICcjaW5jbHVkZSAiY29uZnRzdCckaScuaCInID4+IHN1Yi9jb25mdGVzdC5jCisgICAgICAjIFVzaW5nIGA6ID4gc3ViL2NvbmZ0c3QkaS5oJyBjcmVhdGVzIG9ubHkgc3ViL2NvbmZ0c3QxLmggd2l0aAorICAgICAgIyBTb2xhcmlzIDgncyB7L3Vzcix9L2Jpbi9zaC4KKyAgICAgIHRvdWNoIHN1Yi9jb25mdHN0JGkuaAorICAgIGRvbmUKKyAgICBlY2hvICIke2FtX19pbmNsdWRlfSAke2FtX19xdW90ZX1zdWIvY29uZnRlc3QuUG8ke2FtX19xdW90ZX0iID4gY29uZm1mCisKKyAgICAjIFdlIGNoZWNrIHdpdGggYC1jJyBhbmQgYC1vJyBmb3IgdGhlIHNha2Ugb2YgdGhlICJkYXNobXN0ZG91dCIKKyAgICAjIG1vZGUuICBJdCB0dXJucyBvdXQgdGhhdCB0aGUgU3VuUHJvIEMrKyBjb21waWxlciBkb2VzIG5vdCBwcm9wZXJseQorICAgICMgaGFuZGxlIGAtTSAtbycsIGFuZCB3ZSBuZWVkIHRvIGRldGVjdCB0aGlzLiAgQWxzbywgc29tZSBJbnRlbAorICAgICMgdmVyc2lvbnMgaGFkIHRyb3VibGUgd2l0aCBvdXRwdXQgaW4gc3ViZGlycworICAgIGFtX19vYmo9c3ViL2NvbmZ0ZXN0LiR7T0JKRVhULW99CisgICAgYW1fX21pbnVzX29iaj0iLW8gJGFtX19vYmoiCisgICAgY2FzZSAkZGVwbW9kZSBpbgorICAgIGdjYykKKyAgICAgICMgVGhpcyBkZXBtb2RlIGNhdXNlcyBhIGNvbXBpbGVyIHJhY2UgaW4gdW5pdmVyc2FsIG1vZGUuCisgICAgICB0ZXN0ICIkYW1fX3VuaXZlcnNhbCIgPSBmYWxzZSB8fCBjb250aW51ZQorICAgICAgOzsKKyAgICBub3NpZGVlZmZlY3QpCisgICAgICAjIGFmdGVyIHRoaXMgdGFnLCBtZWNoYW5pc21zIGFyZSBub3QgYnkgc2lkZS1lZmZlY3QsIHNvIHRoZXknbGwKKyAgICAgICMgb25seSBiZSB1c2VkIHdoZW4gZXhwbGljaXRseSByZXF1ZXN0ZWQKKyAgICAgIGlmIHRlc3QgIngkZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmciID0geHllczsgdGhlbgorCWNvbnRpbnVlCisgICAgICBlbHNlCisJYnJlYWsKKyAgICAgIGZpCisgICAgICA7OworICAgIG1zdmlzdWFsY3BwIHwgbXN2Y21zeXMpCisgICAgICAjIFRoaXMgY29tcGlsZXIgd29uJ3QgZ3JvayBgLWMgLW8nLCBidXQgYWxzbywgdGhlIG1pbnVzbyB0ZXN0IGhhcworICAgICAgIyBub3QgcnVuIHlldC4gIFRoZXNlIGRlcG1vZGVzIGFyZSBsYXRlIGVub3VnaCBpbiB0aGUgZ2FtZSwgYW5kCisgICAgICAjIHNvIHdlYWsgdGhhdCB0aGVpciBmdW5jdGlvbmluZyBzaG91bGQgbm90IGJlIGltcGFjdGVkLgorICAgICAgYW1fX29iaj1jb25mdGVzdC4ke09CSkVYVC1vfQorICAgICAgYW1fX21pbnVzX29iaj0KKyAgICAgIDs7CisgICAgbm9uZSkgYnJlYWsgOzsKKyAgICBlc2FjCisgICAgaWYgZGVwbW9kZT0kZGVwbW9kZSBcCisgICAgICAgc291cmNlPXN1Yi9jb25mdGVzdC5jIG9iamVjdD0kYW1fX29iaiBcCisgICAgICAgZGVwZmlsZT1zdWIvY29uZnRlc3QuUG8gdG1wZGVwZmlsZT1zdWIvY29uZnRlc3QuVFBvIFwKKyAgICAgICAkU0hFTEwgLi9kZXBjb21wICRkZXBjYyAtYyAkYW1fX21pbnVzX29iaiBzdWIvY29uZnRlc3QuYyBcCisgICAgICAgICA+L2Rldi9udWxsIDI+Y29uZnRlc3QuZXJyICYmCisgICAgICAgZ3JlcCBzdWIvY29uZnRzdDEuaCBzdWIvY29uZnRlc3QuUG8gPiAvZGV2L251bGwgMj4mMSAmJgorICAgICAgIGdyZXAgc3ViL2NvbmZ0c3Q2Lmggc3ViL2NvbmZ0ZXN0LlBvID4gL2Rldi9udWxsIDI+JjEgJiYKKyAgICAgICBncmVwICRhbV9fb2JqIHN1Yi9jb25mdGVzdC5QbyA+IC9kZXYvbnVsbCAyPiYxICYmCisgICAgICAgJHtNQUtFLW1ha2V9IC1zIC1mIGNvbmZtZiA+IC9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgICAjIGljYyBkb2Vzbid0IGNob2tlIG9uIHVua25vd24gb3B0aW9ucywgaXQgd2lsbCBqdXN0IGlzc3VlIHdhcm5pbmdzCisgICAgICAjIG9yIHJlbWFya3MgKGV2ZW4gd2l0aCAtV2Vycm9yKS4gIFNvIHdlIGdyZXAgc3RkZXJyIGZvciBhbnkgbWVzc2FnZQorICAgICAgIyB0aGF0IHNheXMgYW4gb3B0aW9uIHdhcyBpZ25vcmVkIG9yIG5vdCBzdXBwb3J0ZWQuCisgICAgICAjIFdoZW4gZ2l2ZW4gLU1QLCBpY2MgNy4wIGFuZCA3LjEgY29tcGxhaW4gdGh1c2x5OgorICAgICAgIyAgIGljYzogQ29tbWFuZCBsaW5lIHdhcm5pbmc6IGlnbm9yaW5nIG9wdGlvbiAnLU0nOyBubyBhcmd1bWVudCByZXF1aXJlZAorICAgICAgIyBUaGUgZGlhZ25vc2lzIGNoYW5nZWQgaW4gaWNjIDguMDoKKyAgICAgICMgICBpY2M6IENvbW1hbmQgbGluZSByZW1hcms6IG9wdGlvbiAnLU1QJyBub3Qgc3VwcG9ydGVkCisgICAgICBpZiAoZ3JlcCAnaWdub3Jpbmcgb3B0aW9uJyBjb25mdGVzdC5lcnIgfHwKKyAgICAgICAgICBncmVwICdub3Qgc3VwcG9ydGVkJyBjb25mdGVzdC5lcnIpID4vZGV2L251bGwgMj4mMTsgdGhlbiA6OyBlbHNlCisgICAgICAgIGFtX2N2X0NDX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlPSRkZXBtb2RlCisgICAgICAgIGJyZWFrCisgICAgICBmaQorICAgIGZpCisgIGRvbmUKKworICBjZCAuLgorICBybSAtcmYgY29uZnRlc3QuZGlyCitlbHNlCisgIGFtX2N2X0NDX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlPW5vbmUKK2ZpCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFtX2N2X0NDX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlIiA+JjUKKyRhc19lY2hvICIkYW1fY3ZfQ0NfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUiID4mNjsgfQorQ0NERVBNT0RFPWRlcG1vZGU9JGFtX2N2X0NDX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlCisKKyBpZgorICB0ZXN0ICJ4JGVuYWJsZV9kZXBlbmRlbmN5X3RyYWNraW5nIiAhPSB4bm8gXAorICAmJiB0ZXN0ICIkYW1fY3ZfQ0NfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUiID0gZ2NjMzsgdGhlbgorICBhbV9fZmFzdGRlcENDX1RSVUU9CisgIGFtX19mYXN0ZGVwQ0NfRkFMU0U9JyMnCitlbHNlCisgIGFtX19mYXN0ZGVwQ0NfVFJVRT0nIycKKyAgYW1fX2Zhc3RkZXBDQ19GQUxTRT0KK2ZpCisKKworCithY19mbl9jX2NoZWNrX2RlY2wgIiRMSU5FTk8iICJiYXNlbmFtZSIgImFjX2N2X2hhdmVfZGVjbF9iYXNlbmFtZSIgIiNpbmNsdWRlIDxsaWJnZW4uaD4KKyIKK2lmIHRlc3QgIngkYWNfY3ZfaGF2ZV9kZWNsX2Jhc2VuYW1lIiA9IHgiInllczsgdGhlbiA6CisgIGFjX2hhdmVfZGVjbD0xCitlbHNlCisgIGFjX2hhdmVfZGVjbD0wCitmaQorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfREVDTF9CQVNFTkFNRSAkYWNfaGF2ZV9kZWNsCitfQUNFT0YKKworaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9cmFubGliIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fXJhbmxpYjsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfUkFOTElCK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJFJBTkxJQiI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19SQU5MSUI9IiRSQU5MSUIiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19SQU5MSUI9IiR7YWNfdG9vbF9wcmVmaXh9cmFubGliIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK1JBTkxJQj0kYWNfY3ZfcHJvZ19SQU5MSUIKK2lmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkUkFOTElCIiA+JjUKKyRhc19lY2hvICIkUkFOTElCIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19SQU5MSUIiOyB0aGVuCisgIGFjX2N0X1JBTkxJQj0kUkFOTElCCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAicmFubGliIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSByYW5saWI7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X1JBTkxJQitzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9SQU5MSUIiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfUkFOTElCPSIkYWNfY3RfUkFOTElCIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfUkFOTElCPSJyYW5saWIiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorYWNfY3RfUkFOTElCPSRhY19jdl9wcm9nX2FjX2N0X1JBTkxJQgoraWYgdGVzdCAtbiAiJGFjX2N0X1JBTkxJQiI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9SQU5MSUIiID4mNQorJGFzX2VjaG8gIiRhY19jdF9SQU5MSUIiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKyAgaWYgdGVzdCAieCRhY19jdF9SQU5MSUIiID0geDsgdGhlbgorICAgIFJBTkxJQj0iOiIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBSQU5MSUI9JGFjX2N0X1JBTkxJQgorICBmaQorZWxzZQorICBSQU5MSUI9IiRhY19jdl9wcm9nX1JBTkxJQiIKK2ZpCisKK2Nhc2UgYHB3ZGAgaW4KKyAgKlwgKiB8ICpcCSopCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBMaWJ0b29sIGRvZXMgbm90IGNvcGUgd2VsbCB3aXRoIHdoaXRlc3BhY2UgaW4gXGBwd2RcYCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBMaWJ0b29sIGRvZXMgbm90IGNvcGUgd2VsbCB3aXRoIHdoaXRlc3BhY2UgaW4gXGBwd2RcYCIgPiYyO30gOzsKK2VzYWMKKworCisKK21hY3JvX3ZlcnNpb249JzIuMi42YicKK21hY3JvX3JldmlzaW9uPScxLjMwMTcnCisKKworCisKKworCisKKworCisKKworCisKK2x0bWFpbj0iJGFjX2F1eF9kaXIvbHRtYWluLnNoIgorCisjIE1ha2Ugc3VyZSB3ZSBjYW4gcnVuIGNvbmZpZy5zdWIuCiskU0hFTEwgIiRhY19hdXhfZGlyL2NvbmZpZy5zdWIiIHN1bjQgPi9kZXYvbnVsbCAyPiYxIHx8CisgIGFzX2ZuX2Vycm9yICQ/ICJjYW5ub3QgcnVuICRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWcuc3ViIiAiJExJTkVOTyIgNQorCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGJ1aWxkIHN5c3RlbSB0eXBlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGJ1aWxkIHN5c3RlbSB0eXBlLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X2J1aWxkK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfYnVpbGRfYWxpYXM9JGJ1aWxkX2FsaWFzCit0ZXN0ICJ4JGFjX2J1aWxkX2FsaWFzIiA9IHggJiYKKyAgYWNfYnVpbGRfYWxpYXM9YCRTSEVMTCAiJGFjX2F1eF9kaXIvY29uZmlnLmd1ZXNzImAKK3Rlc3QgIngkYWNfYnVpbGRfYWxpYXMiID0geCAmJgorICBhc19mbl9lcnJvciAkPyAiY2Fubm90IGd1ZXNzIGJ1aWxkIHR5cGU7IHlvdSBtdXN0IHNwZWNpZnkgb25lIiAiJExJTkVOTyIgNQorYWNfY3ZfYnVpbGQ9YCRTSEVMTCAiJGFjX2F1eF9kaXIvY29uZmlnLnN1YiIgJGFjX2J1aWxkX2FsaWFzYCB8fAorICBhc19mbl9lcnJvciAkPyAiJFNIRUxMICRhY19hdXhfZGlyL2NvbmZpZy5zdWIgJGFjX2J1aWxkX2FsaWFzIGZhaWxlZCIgIiRMSU5FTk8iIDUKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfYnVpbGQiID4mNQorJGFzX2VjaG8gIiRhY19jdl9idWlsZCIgPiY2OyB9CitjYXNlICRhY19jdl9idWlsZCBpbgorKi0qLSopIDs7CisqKSBhc19mbl9lcnJvciAkPyAiaW52YWxpZCB2YWx1ZSBvZiBjYW5vbmljYWwgYnVpbGQiICIkTElORU5PIiA1IDs7Citlc2FjCitidWlsZD0kYWNfY3ZfYnVpbGQKK2FjX3NhdmVfSUZTPSRJRlM7IElGUz0nLScKK3NldCB4ICRhY19jdl9idWlsZAorc2hpZnQKK2J1aWxkX2NwdT0kMQorYnVpbGRfdmVuZG9yPSQyCitzaGlmdDsgc2hpZnQKKyMgUmVtZW1iZXIsIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgSUZTIGlzIHVzZWQgdG8gY3JlYXRlICQqLAorIyBleGNlcHQgd2l0aCBvbGQgc2hlbGxzOgorYnVpbGRfb3M9JCoKK0lGUz0kYWNfc2F2ZV9JRlMKK2Nhc2UgJGJ1aWxkX29zIGluICpcICopIGJ1aWxkX29zPWBlY2hvICIkYnVpbGRfb3MiIHwgc2VkICdzLyAvLS9nJ2A7OyBlc2FjCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3N0IHN5c3RlbSB0eXBlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGhvc3Qgc3lzdGVtIHR5cGUuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfaG9zdCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgIngkaG9zdF9hbGlhcyIgPSB4OyB0aGVuCisgIGFjX2N2X2hvc3Q9JGFjX2N2X2J1aWxkCitlbHNlCisgIGFjX2N2X2hvc3Q9YCRTSEVMTCAiJGFjX2F1eF9kaXIvY29uZmlnLnN1YiIgJGhvc3RfYWxpYXNgIHx8CisgICAgYXNfZm5fZXJyb3IgJD8gIiRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWcuc3ViICRob3N0X2FsaWFzIGZhaWxlZCIgIiRMSU5FTk8iIDUKK2ZpCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2hvc3QiID4mNQorJGFzX2VjaG8gIiRhY19jdl9ob3N0IiA+JjY7IH0KK2Nhc2UgJGFjX2N2X2hvc3QgaW4KKyotKi0qKSA7OworKikgYXNfZm5fZXJyb3IgJD8gImludmFsaWQgdmFsdWUgb2YgY2Fub25pY2FsIGhvc3QiICIkTElORU5PIiA1IDs7Citlc2FjCitob3N0PSRhY19jdl9ob3N0CithY19zYXZlX0lGUz0kSUZTOyBJRlM9Jy0nCitzZXQgeCAkYWNfY3ZfaG9zdAorc2hpZnQKK2hvc3RfY3B1PSQxCitob3N0X3ZlbmRvcj0kMgorc2hpZnQ7IHNoaWZ0CisjIFJlbWVtYmVyLCB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIElGUyBpcyB1c2VkIHRvIGNyZWF0ZSAkKiwKKyMgZXhjZXB0IHdpdGggb2xkIHNoZWxsczoKK2hvc3Rfb3M9JCoKK0lGUz0kYWNfc2F2ZV9JRlMKK2Nhc2UgJGhvc3Rfb3MgaW4gKlwgKikgaG9zdF9vcz1gZWNobyAiJGhvc3Rfb3MiIHwgc2VkICdzLyAvLS9nJ2A7OyBlc2FjCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgYSBzZWQgdGhhdCBkb2VzIG5vdCB0cnVuY2F0ZSBvdXRwdXQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGEgc2VkIHRoYXQgZG9lcyBub3QgdHJ1bmNhdGUgb3V0cHV0Li4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3BhdGhfU0VEK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgICAgICAgICAgIGFjX3NjcmlwdD1zL2FhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhL2JiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYi8KKyAgICAgZm9yIGFjX2kgaW4gMSAyIDMgNCA1IDYgNzsgZG8KKyAgICAgICBhY19zY3JpcHQ9IiRhY19zY3JpcHQkYXNfbmwkYWNfc2NyaXB0IgorICAgICBkb25lCisgICAgIGVjaG8gIiRhY19zY3JpcHQiIDI+L2Rldi9udWxsIHwgc2VkIDk5cSA+Y29uZnRlc3Quc2VkCisgICAgIHsgYWNfc2NyaXB0PTsgdW5zZXQgYWNfc2NyaXB0O30KKyAgICAgaWYgdGVzdCAteiAiJFNFRCI7IHRoZW4KKyAgYWNfcGF0aF9TRURfZm91bmQ9ZmFsc2UKKyAgIyBMb29wIHRocm91Z2ggdGhlIHVzZXIncyBwYXRoIGFuZCB0ZXN0IGZvciBlYWNoIG9mIFBST0dOQU1FLUxJU1QKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19wcm9nIGluIHNlZCBnc2VkOyBkbworICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICAgICAgYWNfcGF0aF9TRUQ9IiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiCisgICAgICB7IHRlc3QgLWYgIiRhY19wYXRoX1NFRCIgJiYgJGFzX3Rlc3RfeCAiJGFjX3BhdGhfU0VEIjsgfSB8fCBjb250aW51ZQorIyBDaGVjayBmb3IgR05VIGFjX3BhdGhfU0VEIGFuZCBzZWxlY3QgaXQgaWYgaXQgaXMgZm91bmQuCisgICMgQ2hlY2sgZm9yIEdOVSAkYWNfcGF0aF9TRUQKK2Nhc2UgYCIkYWNfcGF0aF9TRUQiIC0tdmVyc2lvbiAyPiYxYCBpbgorKkdOVSopCisgIGFjX2N2X3BhdGhfU0VEPSIkYWNfcGF0aF9TRUQiIGFjX3BhdGhfU0VEX2ZvdW5kPTo7OworKikKKyAgYWNfY291bnQ9MAorICAkYXNfZWNob19uIDAxMjM0NTY3ODkgPiJjb25mdGVzdC5pbiIKKyAgd2hpbGUgOgorICBkbworICAgIGNhdCAiY29uZnRlc3QuaW4iICJjb25mdGVzdC5pbiIgPiJjb25mdGVzdC50bXAiCisgICAgbXYgImNvbmZ0ZXN0LnRtcCIgImNvbmZ0ZXN0LmluIgorICAgIGNwICJjb25mdGVzdC5pbiIgImNvbmZ0ZXN0Lm5sIgorICAgICRhc19lY2hvICcnID4+ICJjb25mdGVzdC5ubCIKKyAgICAiJGFjX3BhdGhfU0VEIiAtZiBjb25mdGVzdC5zZWQgPCAiY29uZnRlc3QubmwiID4iY29uZnRlc3Qub3V0IiAyPi9kZXYvbnVsbCB8fCBicmVhaworICAgIGRpZmYgImNvbmZ0ZXN0Lm91dCIgImNvbmZ0ZXN0Lm5sIiA+L2Rldi9udWxsIDI+JjEgfHwgYnJlYWsKKyAgICBhc19mbl9hcml0aCAkYWNfY291bnQgKyAxICYmIGFjX2NvdW50PSRhc192YWwKKyAgICBpZiB0ZXN0ICRhY19jb3VudCAtZ3QgJHthY19wYXRoX1NFRF9tYXgtMH07IHRoZW4KKyAgICAgICMgQmVzdCBvbmUgc28gZmFyLCBzYXZlIGl0IGJ1dCBrZWVwIGxvb2tpbmcgZm9yIGEgYmV0dGVyIG9uZQorICAgICAgYWNfY3ZfcGF0aF9TRUQ9IiRhY19wYXRoX1NFRCIKKyAgICAgIGFjX3BhdGhfU0VEX21heD0kYWNfY291bnQKKyAgICBmaQorICAgICMgMTAqKDJeMTApIGNoYXJzIGFzIGlucHV0IHNlZW1zIG1vcmUgdGhhbiBlbm91Z2gKKyAgICB0ZXN0ICRhY19jb3VudCAtZ3QgMTAgJiYgYnJlYWsKKyAgZG9uZQorICBybSAtZiBjb25mdGVzdC5pbiBjb25mdGVzdC50bXAgY29uZnRlc3QubmwgY29uZnRlc3Qub3V0OzsKK2VzYWMKKworICAgICAgJGFjX3BhdGhfU0VEX2ZvdW5kICYmIGJyZWFrIDMKKyAgICBkb25lCisgIGRvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworICBpZiB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9TRUQiOyB0aGVuCisgICAgYXNfZm5fZXJyb3IgJD8gIm5vIGFjY2VwdGFibGUgc2VkIGNvdWxkIGJlIGZvdW5kIGluIFwkUEFUSCIgIiRMSU5FTk8iIDUKKyAgZmkKK2Vsc2UKKyAgYWNfY3ZfcGF0aF9TRUQ9JFNFRAorZmkKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfcGF0aF9TRUQiID4mNQorJGFzX2VjaG8gIiRhY19jdl9wYXRoX1NFRCIgPiY2OyB9CisgU0VEPSIkYWNfY3ZfcGF0aF9TRUQiCisgIHJtIC1mIGNvbmZ0ZXN0LnNlZAorCit0ZXN0IC16ICIkU0VEIiAmJiBTRUQ9c2VkCitYc2VkPSIkU0VEIC1lIDFzL15YLy8iCisKKworCisKKworCisKKworCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgZ3JlcCB0aGF0IGhhbmRsZXMgbG9uZyBsaW5lcyBhbmQgLWUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGdyZXAgdGhhdCBoYW5kbGVzIGxvbmcgbGluZXMgYW5kIC1lLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3BhdGhfR1JFUCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLXogIiRHUkVQIjsgdGhlbgorICBhY19wYXRoX0dSRVBfZm91bmQ9ZmFsc2UKKyAgIyBMb29wIHRocm91Z2ggdGhlIHVzZXIncyBwYXRoIGFuZCB0ZXN0IGZvciBlYWNoIG9mIFBST0dOQU1FLUxJU1QKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSCRQQVRIX1NFUEFSQVRPUi91c3IveHBnNC9iaW4KK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfcHJvZyBpbiBncmVwIGdncmVwOyBkbworICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICAgICAgYWNfcGF0aF9HUkVQPSIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IgorICAgICAgeyB0ZXN0IC1mICIkYWNfcGF0aF9HUkVQIiAmJiAkYXNfdGVzdF94ICIkYWNfcGF0aF9HUkVQIjsgfSB8fCBjb250aW51ZQorIyBDaGVjayBmb3IgR05VIGFjX3BhdGhfR1JFUCBhbmQgc2VsZWN0IGl0IGlmIGl0IGlzIGZvdW5kLgorICAjIENoZWNrIGZvciBHTlUgJGFjX3BhdGhfR1JFUAorY2FzZSBgIiRhY19wYXRoX0dSRVAiIC0tdmVyc2lvbiAyPiYxYCBpbgorKkdOVSopCisgIGFjX2N2X3BhdGhfR1JFUD0iJGFjX3BhdGhfR1JFUCIgYWNfcGF0aF9HUkVQX2ZvdW5kPTo7OworKikKKyAgYWNfY291bnQ9MAorICAkYXNfZWNob19uIDAxMjM0NTY3ODkgPiJjb25mdGVzdC5pbiIKKyAgd2hpbGUgOgorICBkbworICAgIGNhdCAiY29uZnRlc3QuaW4iICJjb25mdGVzdC5pbiIgPiJjb25mdGVzdC50bXAiCisgICAgbXYgImNvbmZ0ZXN0LnRtcCIgImNvbmZ0ZXN0LmluIgorICAgIGNwICJjb25mdGVzdC5pbiIgImNvbmZ0ZXN0Lm5sIgorICAgICRhc19lY2hvICdHUkVQJyA+PiAiY29uZnRlc3QubmwiCisgICAgIiRhY19wYXRoX0dSRVAiIC1lICdHUkVQJCcgLWUgJy0oY2Fubm90IG1hdGNoKS0nIDwgImNvbmZ0ZXN0Lm5sIiA+ImNvbmZ0ZXN0Lm91dCIgMj4vZGV2L251bGwgfHwgYnJlYWsKKyAgICBkaWZmICJjb25mdGVzdC5vdXQiICJjb25mdGVzdC5ubCIgPi9kZXYvbnVsbCAyPiYxIHx8IGJyZWFrCisgICAgYXNfZm5fYXJpdGggJGFjX2NvdW50ICsgMSAmJiBhY19jb3VudD0kYXNfdmFsCisgICAgaWYgdGVzdCAkYWNfY291bnQgLWd0ICR7YWNfcGF0aF9HUkVQX21heC0wfTsgdGhlbgorICAgICAgIyBCZXN0IG9uZSBzbyBmYXIsIHNhdmUgaXQgYnV0IGtlZXAgbG9va2luZyBmb3IgYSBiZXR0ZXIgb25lCisgICAgICBhY19jdl9wYXRoX0dSRVA9IiRhY19wYXRoX0dSRVAiCisgICAgICBhY19wYXRoX0dSRVBfbWF4PSRhY19jb3VudAorICAgIGZpCisgICAgIyAxMCooMl4xMCkgY2hhcnMgYXMgaW5wdXQgc2VlbXMgbW9yZSB0aGFuIGVub3VnaAorICAgIHRlc3QgJGFjX2NvdW50IC1ndCAxMCAmJiBicmVhaworICBkb25lCisgIHJtIC1mIGNvbmZ0ZXN0LmluIGNvbmZ0ZXN0LnRtcCBjb25mdGVzdC5ubCBjb25mdGVzdC5vdXQ7OworZXNhYworCisgICAgICAkYWNfcGF0aF9HUkVQX2ZvdW5kICYmIGJyZWFrIDMKKyAgICBkb25lCisgIGRvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworICBpZiB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9HUkVQIjsgdGhlbgorICAgIGFzX2ZuX2Vycm9yICQ/ICJubyBhY2NlcHRhYmxlIGdyZXAgY291bGQgYmUgZm91bmQgaW4gJFBBVEgkUEFUSF9TRVBBUkFUT1IvdXNyL3hwZzQvYmluIiAiJExJTkVOTyIgNQorICBmaQorZWxzZQorICBhY19jdl9wYXRoX0dSRVA9JEdSRVAKK2ZpCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3BhdGhfR1JFUCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3BhdGhfR1JFUCIgPiY2OyB9CisgR1JFUD0iJGFjX2N2X3BhdGhfR1JFUCIKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBlZ3JlcCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgZWdyZXAuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcGF0aF9FR1JFUCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIGVjaG8gYSB8ICRHUkVQIC1FICcoYXxiKScgPi9kZXYvbnVsbCAyPiYxCisgICB0aGVuIGFjX2N2X3BhdGhfRUdSRVA9IiRHUkVQIC1FIgorICAgZWxzZQorICAgICBpZiB0ZXN0IC16ICIkRUdSRVAiOyB0aGVuCisgIGFjX3BhdGhfRUdSRVBfZm91bmQ9ZmFsc2UKKyAgIyBMb29wIHRocm91Z2ggdGhlIHVzZXIncyBwYXRoIGFuZCB0ZXN0IGZvciBlYWNoIG9mIFBST0dOQU1FLUxJU1QKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSCRQQVRIX1NFUEFSQVRPUi91c3IveHBnNC9iaW4KK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfcHJvZyBpbiBlZ3JlcDsgZG8KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgICAgIGFjX3BhdGhfRUdSRVA9IiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiCisgICAgICB7IHRlc3QgLWYgIiRhY19wYXRoX0VHUkVQIiAmJiAkYXNfdGVzdF94ICIkYWNfcGF0aF9FR1JFUCI7IH0gfHwgY29udGludWUKKyMgQ2hlY2sgZm9yIEdOVSBhY19wYXRoX0VHUkVQIGFuZCBzZWxlY3QgaXQgaWYgaXQgaXMgZm91bmQuCisgICMgQ2hlY2sgZm9yIEdOVSAkYWNfcGF0aF9FR1JFUAorY2FzZSBgIiRhY19wYXRoX0VHUkVQIiAtLXZlcnNpb24gMj4mMWAgaW4KKypHTlUqKQorICBhY19jdl9wYXRoX0VHUkVQPSIkYWNfcGF0aF9FR1JFUCIgYWNfcGF0aF9FR1JFUF9mb3VuZD06OzsKKyopCisgIGFjX2NvdW50PTAKKyAgJGFzX2VjaG9fbiAwMTIzNDU2Nzg5ID4iY29uZnRlc3QuaW4iCisgIHdoaWxlIDoKKyAgZG8KKyAgICBjYXQgImNvbmZ0ZXN0LmluIiAiY29uZnRlc3QuaW4iID4iY29uZnRlc3QudG1wIgorICAgIG12ICJjb25mdGVzdC50bXAiICJjb25mdGVzdC5pbiIKKyAgICBjcCAiY29uZnRlc3QuaW4iICJjb25mdGVzdC5ubCIKKyAgICAkYXNfZWNobyAnRUdSRVAnID4+ICJjb25mdGVzdC5ubCIKKyAgICAiJGFjX3BhdGhfRUdSRVAiICdFR1JFUCQnIDwgImNvbmZ0ZXN0Lm5sIiA+ImNvbmZ0ZXN0Lm91dCIgMj4vZGV2L251bGwgfHwgYnJlYWsKKyAgICBkaWZmICJjb25mdGVzdC5vdXQiICJjb25mdGVzdC5ubCIgPi9kZXYvbnVsbCAyPiYxIHx8IGJyZWFrCisgICAgYXNfZm5fYXJpdGggJGFjX2NvdW50ICsgMSAmJiBhY19jb3VudD0kYXNfdmFsCisgICAgaWYgdGVzdCAkYWNfY291bnQgLWd0ICR7YWNfcGF0aF9FR1JFUF9tYXgtMH07IHRoZW4KKyAgICAgICMgQmVzdCBvbmUgc28gZmFyLCBzYXZlIGl0IGJ1dCBrZWVwIGxvb2tpbmcgZm9yIGEgYmV0dGVyIG9uZQorICAgICAgYWNfY3ZfcGF0aF9FR1JFUD0iJGFjX3BhdGhfRUdSRVAiCisgICAgICBhY19wYXRoX0VHUkVQX21heD0kYWNfY291bnQKKyAgICBmaQorICAgICMgMTAqKDJeMTApIGNoYXJzIGFzIGlucHV0IHNlZW1zIG1vcmUgdGhhbiBlbm91Z2gKKyAgICB0ZXN0ICRhY19jb3VudCAtZ3QgMTAgJiYgYnJlYWsKKyAgZG9uZQorICBybSAtZiBjb25mdGVzdC5pbiBjb25mdGVzdC50bXAgY29uZnRlc3QubmwgY29uZnRlc3Qub3V0OzsKK2VzYWMKKworICAgICAgJGFjX3BhdGhfRUdSRVBfZm91bmQgJiYgYnJlYWsgMworICAgIGRvbmUKKyAgZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisgIGlmIHRlc3QgLXogIiRhY19jdl9wYXRoX0VHUkVQIjsgdGhlbgorICAgIGFzX2ZuX2Vycm9yICQ/ICJubyBhY2NlcHRhYmxlIGVncmVwIGNvdWxkIGJlIGZvdW5kIGluICRQQVRIJFBBVEhfU0VQQVJBVE9SL3Vzci94cGc0L2JpbiIgIiRMSU5FTk8iIDUKKyAgZmkKK2Vsc2UKKyAgYWNfY3ZfcGF0aF9FR1JFUD0kRUdSRVAKK2ZpCisKKyAgIGZpCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9wYXRoX0VHUkVQIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfcGF0aF9FR1JFUCIgPiY2OyB9CisgRUdSRVA9IiRhY19jdl9wYXRoX0VHUkVQIgorCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGZncmVwIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBmZ3JlcC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wYXRoX0ZHUkVQK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgZWNobyAnYWIqYycgfCAkR1JFUCAtRiAnYWIqYycgPi9kZXYvbnVsbCAyPiYxCisgICB0aGVuIGFjX2N2X3BhdGhfRkdSRVA9IiRHUkVQIC1GIgorICAgZWxzZQorICAgICBpZiB0ZXN0IC16ICIkRkdSRVAiOyB0aGVuCisgIGFjX3BhdGhfRkdSRVBfZm91bmQ9ZmFsc2UKKyAgIyBMb29wIHRocm91Z2ggdGhlIHVzZXIncyBwYXRoIGFuZCB0ZXN0IGZvciBlYWNoIG9mIFBST0dOQU1FLUxJU1QKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSCRQQVRIX1NFUEFSQVRPUi91c3IveHBnNC9iaW4KK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfcHJvZyBpbiBmZ3JlcDsgZG8KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgICAgIGFjX3BhdGhfRkdSRVA9IiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiCisgICAgICB7IHRlc3QgLWYgIiRhY19wYXRoX0ZHUkVQIiAmJiAkYXNfdGVzdF94ICIkYWNfcGF0aF9GR1JFUCI7IH0gfHwgY29udGludWUKKyMgQ2hlY2sgZm9yIEdOVSBhY19wYXRoX0ZHUkVQIGFuZCBzZWxlY3QgaXQgaWYgaXQgaXMgZm91bmQuCisgICMgQ2hlY2sgZm9yIEdOVSAkYWNfcGF0aF9GR1JFUAorY2FzZSBgIiRhY19wYXRoX0ZHUkVQIiAtLXZlcnNpb24gMj4mMWAgaW4KKypHTlUqKQorICBhY19jdl9wYXRoX0ZHUkVQPSIkYWNfcGF0aF9GR1JFUCIgYWNfcGF0aF9GR1JFUF9mb3VuZD06OzsKKyopCisgIGFjX2NvdW50PTAKKyAgJGFzX2VjaG9fbiAwMTIzNDU2Nzg5ID4iY29uZnRlc3QuaW4iCisgIHdoaWxlIDoKKyAgZG8KKyAgICBjYXQgImNvbmZ0ZXN0LmluIiAiY29uZnRlc3QuaW4iID4iY29uZnRlc3QudG1wIgorICAgIG12ICJjb25mdGVzdC50bXAiICJjb25mdGVzdC5pbiIKKyAgICBjcCAiY29uZnRlc3QuaW4iICJjb25mdGVzdC5ubCIKKyAgICAkYXNfZWNobyAnRkdSRVAnID4+ICJjb25mdGVzdC5ubCIKKyAgICAiJGFjX3BhdGhfRkdSRVAiIEZHUkVQIDwgImNvbmZ0ZXN0Lm5sIiA+ImNvbmZ0ZXN0Lm91dCIgMj4vZGV2L251bGwgfHwgYnJlYWsKKyAgICBkaWZmICJjb25mdGVzdC5vdXQiICJjb25mdGVzdC5ubCIgPi9kZXYvbnVsbCAyPiYxIHx8IGJyZWFrCisgICAgYXNfZm5fYXJpdGggJGFjX2NvdW50ICsgMSAmJiBhY19jb3VudD0kYXNfdmFsCisgICAgaWYgdGVzdCAkYWNfY291bnQgLWd0ICR7YWNfcGF0aF9GR1JFUF9tYXgtMH07IHRoZW4KKyAgICAgICMgQmVzdCBvbmUgc28gZmFyLCBzYXZlIGl0IGJ1dCBrZWVwIGxvb2tpbmcgZm9yIGEgYmV0dGVyIG9uZQorICAgICAgYWNfY3ZfcGF0aF9GR1JFUD0iJGFjX3BhdGhfRkdSRVAiCisgICAgICBhY19wYXRoX0ZHUkVQX21heD0kYWNfY291bnQKKyAgICBmaQorICAgICMgMTAqKDJeMTApIGNoYXJzIGFzIGlucHV0IHNlZW1zIG1vcmUgdGhhbiBlbm91Z2gKKyAgICB0ZXN0ICRhY19jb3VudCAtZ3QgMTAgJiYgYnJlYWsKKyAgZG9uZQorICBybSAtZiBjb25mdGVzdC5pbiBjb25mdGVzdC50bXAgY29uZnRlc3QubmwgY29uZnRlc3Qub3V0OzsKK2VzYWMKKworICAgICAgJGFjX3BhdGhfRkdSRVBfZm91bmQgJiYgYnJlYWsgMworICAgIGRvbmUKKyAgZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisgIGlmIHRlc3QgLXogIiRhY19jdl9wYXRoX0ZHUkVQIjsgdGhlbgorICAgIGFzX2ZuX2Vycm9yICQ/ICJubyBhY2NlcHRhYmxlIGZncmVwIGNvdWxkIGJlIGZvdW5kIGluICRQQVRIJFBBVEhfU0VQQVJBVE9SL3Vzci94cGc0L2JpbiIgIiRMSU5FTk8iIDUKKyAgZmkKK2Vsc2UKKyAgYWNfY3ZfcGF0aF9GR1JFUD0kRkdSRVAKK2ZpCisKKyAgIGZpCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9wYXRoX0ZHUkVQIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfcGF0aF9GR1JFUCIgPiY2OyB9CisgRkdSRVA9IiRhY19jdl9wYXRoX0ZHUkVQIgorCisKK3Rlc3QgLXogIiRHUkVQIiAmJiBHUkVQPWdyZXAKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1nbnUtbGQgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2dudV9sZCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfZ251X2xkOyB0ZXN0ICIkd2l0aHZhbCIgPSBubyB8fCB3aXRoX2dudV9sZD15ZXMKK2Vsc2UKKyAgd2l0aF9nbnVfbGQ9bm8KK2ZpCisKK2FjX3Byb2c9bGQKK2lmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICMgQ2hlY2sgaWYgZ2NjIC1wcmludC1wcm9nLW5hbWU9bGQgZ2l2ZXMgYSBwYXRoLgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBsZCB1c2VkIGJ5ICRDQyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgbGQgdXNlZCBieSAkQ0MuLi4gIiA+JjY7IH0KKyAgY2FzZSAkaG9zdCBpbgorICAqLSotbWluZ3cqKQorICAgICMgZ2NjIGxlYXZlcyBhIHRyYWlsaW5nIGNhcnJpYWdlIHJldHVybiB3aGljaCB1cHNldHMgbWluZ3cKKyAgICBhY19wcm9nPWAoJENDIC1wcmludC1wcm9nLW5hbWU9bGQpIDI+JjUgfCB0ciAtZCAnXDAxNSdgIDs7CisgICopCisgICAgYWNfcHJvZz1gKCRDQyAtcHJpbnQtcHJvZy1uYW1lPWxkKSAyPiY1YCA7OworICBlc2FjCisgIGNhc2UgJGFjX3Byb2cgaW4KKyAgICAjIEFjY2VwdCBhYnNvbHV0ZSBwYXRocy4KKyAgICBbXFwvXSogfCA/OltcXC9dKikKKyAgICAgIHJlX2RpcmVsdD0nL1teL11bXi9dKi9cLlwuLycKKyAgICAgICMgQ2Fub25pY2FsaXplIHRoZSBwYXRobmFtZSBvZiBsZAorICAgICAgYWNfcHJvZz1gJEVDSE8gIiRhY19wcm9nInwgJFNFRCAncyVcXFxcJS8lZydgCisgICAgICB3aGlsZSAkRUNITyAiJGFjX3Byb2ciIHwgJEdSRVAgIiRyZV9kaXJlbHQiID4gL2Rldi9udWxsIDI+JjE7IGRvCisJYWNfcHJvZz1gJEVDSE8gJGFjX3Byb2d8ICRTRUQgInMlJHJlX2RpcmVsdCUvJSJgCisgICAgICBkb25lCisgICAgICB0ZXN0IC16ICIkTEQiICYmIExEPSIkYWNfcHJvZyIKKyAgICAgIDs7CisgICIiKQorICAgICMgSWYgaXQgZmFpbHMsIHRoZW4gcHJldGVuZCB3ZSBhcmVuJ3QgdXNpbmcgR0NDLgorICAgIGFjX3Byb2c9bGQKKyAgICA7OworICAqKQorICAgICMgSWYgaXQgaXMgcmVsYXRpdmUsIHRoZW4gc2VhcmNoIGZvciB0aGUgZmlyc3QgbGQgaW4gUEFUSC4KKyAgICB3aXRoX2dudV9sZD11bmtub3duCisgICAgOzsKKyAgZXNhYworZWxpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIEdOVSBsZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgR05VIGxkLi4uICIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIG5vbi1HTlUgbGQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIG5vbi1HTlUgbGQuLi4gIiA+JjY7IH0KK2ZpCitpZiB0ZXN0ICIke2x0X2N2X3BhdGhfTEQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC16ICIkTEQiOyB0aGVuCisgIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSRQQVRIX1NFUEFSQVRPUgorICBmb3IgYWNfZGlyIGluICRQQVRIOyBkbworICAgIElGUz0iJGx0X3NhdmVfaWZzIgorICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCisgICAgaWYgdGVzdCAtZiAiJGFjX2Rpci8kYWNfcHJvZyIgfHwgdGVzdCAtZiAiJGFjX2Rpci8kYWNfcHJvZyRhY19leGVleHQiOyB0aGVuCisgICAgICBsdF9jdl9wYXRoX0xEPSIkYWNfZGlyLyRhY19wcm9nIgorICAgICAgIyBDaGVjayB0byBzZWUgaWYgdGhlIHByb2dyYW0gaXMgR05VIGxkLiAgSSdkIHJhdGhlciB1c2UgLS12ZXJzaW9uLAorICAgICAgIyBidXQgYXBwYXJlbnRseSBzb21lIHZhcmlhbnRzIG9mIEdOVSBsZCBvbmx5IGFjY2VwdCAtdi4KKyAgICAgICMgQnJlYWsgb25seSBpZiBpdCB3YXMgdGhlIEdOVS9ub24tR05VIGxkIHRoYXQgd2UgcHJlZmVyLgorICAgICAgY2FzZSBgIiRsdF9jdl9wYXRoX0xEIiAtdiAyPiYxIDwvZGV2L251bGxgIGluCisgICAgICAqR05VKiB8ICond2l0aCBCRkQnKikKKwl0ZXN0ICIkd2l0aF9nbnVfbGQiICE9IG5vICYmIGJyZWFrCisJOzsKKyAgICAgICopCisJdGVzdCAiJHdpdGhfZ251X2xkIiAhPSB5ZXMgJiYgYnJlYWsKKwk7OworICAgICAgZXNhYworICAgIGZpCisgIGRvbmUKKyAgSUZTPSIkbHRfc2F2ZV9pZnMiCitlbHNlCisgIGx0X2N2X3BhdGhfTEQ9IiRMRCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCitmaQorZmkKKworTEQ9IiRsdF9jdl9wYXRoX0xEIgoraWYgdGVzdCAtbiAiJExEIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJExEIiA+JjUKKyRhc19lY2hvICIkTEQiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCit0ZXN0IC16ICIkTEQiICYmIGFzX2ZuX2Vycm9yICQ/ICJubyBhY2NlcHRhYmxlIGxkIGZvdW5kIGluIFwkUEFUSCIgIiRMSU5FTk8iIDUKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgdGhlIGxpbmtlciAoJExEKSBpcyBHTlUgbGQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgdGhlIGxpbmtlciAoJExEKSBpcyBHTlUgbGQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7bHRfY3ZfcHJvZ19nbnVfbGQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICAjIEknZCByYXRoZXIgdXNlIC0tdmVyc2lvbiBoZXJlLCBidXQgYXBwYXJlbnRseSBzb21lIEdOVSBsZHMgb25seSBhY2NlcHQgLXYuCitjYXNlIGAkTEQgLXYgMj4mMSA8L2Rldi9udWxsYCBpbgorKkdOVSogfCAqJ3dpdGggQkZEJyopCisgIGx0X2N2X3Byb2dfZ251X2xkPXllcworICA7OworKikKKyAgbHRfY3ZfcHJvZ19nbnVfbGQ9bm8KKyAgOzsKK2VzYWMKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfZ251X2xkIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfcHJvZ19nbnVfbGQiID4mNjsgfQord2l0aF9nbnVfbGQ9JGx0X2N2X3Byb2dfZ251X2xkCisKKworCisKKworCisKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBCU0QtIG9yIE1TLWNvbXBhdGlibGUgbmFtZSBsaXN0ZXIgKG5tKSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgQlNELSBvciBNUy1jb21wYXRpYmxlIG5hbWUgbGlzdGVyIChubSkuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7bHRfY3ZfcGF0aF9OTStzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiROTSI7IHRoZW4KKyAgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisgIGx0X2N2X3BhdGhfTk09IiROTSIKK2Vsc2UKKyAgbHRfbm1fdG9fY2hlY2s9IiR7YWNfdG9vbF9wcmVmaXh9bm0iCisgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCIgJiYgdGVzdCAiJGJ1aWxkIiA9ICIkaG9zdCI7IHRoZW4KKyAgICBsdF9ubV90b19jaGVjaz0iJGx0X25tX3RvX2NoZWNrIG5tIgorICBmaQorICBmb3IgbHRfdG1wX25tIGluICRsdF9ubV90b19jaGVjazsgZG8KKyAgICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0kUEFUSF9TRVBBUkFUT1IKKyAgICBmb3IgYWNfZGlyIGluICRQQVRIIC91c3IvY2NzL2Jpbi9lbGYgL3Vzci9jY3MvYmluIC91c3IvdWNiIC9iaW47IGRvCisgICAgICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCisgICAgICB0bXBfbm09IiRhY19kaXIvJGx0X3RtcF9ubSIKKyAgICAgIGlmIHRlc3QgLWYgIiR0bXBfbm0iIHx8IHRlc3QgLWYgIiR0bXBfbm0kYWNfZXhlZXh0IiA7IHRoZW4KKwkjIENoZWNrIHRvIHNlZSBpZiB0aGUgbm0gYWNjZXB0cyBhIEJTRC1jb21wYXQgZmxhZy4KKwkjIEFkZGluZyB0aGUgYHNlZCAxcScgcHJldmVudHMgZmFsc2UgcG9zaXRpdmVzIG9uIEhQLVVYLCB3aGljaCBzYXlzOgorCSMgICBubTogdW5rbm93biBvcHRpb24gIkIiIGlnbm9yZWQKKwkjIFRydTY0J3Mgbm0gY29tcGxhaW5zIHRoYXQgL2Rldi9udWxsIGlzIGFuIGludmFsaWQgb2JqZWN0IGZpbGUKKwljYXNlIGAiJHRtcF9ubSIgLUIgL2Rldi9udWxsIDI+JjEgfCBzZWQgJzFxJ2AgaW4KKwkqL2Rldi9udWxsKiB8IConSW52YWxpZCBmaWxlIG9yIG9iamVjdCB0eXBlJyopCisJICBsdF9jdl9wYXRoX05NPSIkdG1wX25tIC1CIgorCSAgYnJlYWsKKwkgIDs7CisJKikKKwkgIGNhc2UgYCIkdG1wX25tIiAtcCAvZGV2L251bGwgMj4mMSB8IHNlZCAnMXEnYCBpbgorCSAgKi9kZXYvbnVsbCopCisJICAgIGx0X2N2X3BhdGhfTk09IiR0bXBfbm0gLXAiCisJICAgIGJyZWFrCisJICAgIDs7CisJICAqKQorCSAgICBsdF9jdl9wYXRoX05NPSR7bHRfY3ZfcGF0aF9OTT0iJHRtcF9ubSJ9ICMga2VlcCB0aGUgZmlyc3QgbWF0Y2gsIGJ1dAorCSAgICBjb250aW51ZSAjIHNvIHRoYXQgd2UgY2FuIHRyeSB0byBmaW5kIG9uZSB0aGF0IHN1cHBvcnRzIEJTRCBmbGFncworCSAgICA7OworCSAgZXNhYworCSAgOzsKKwllc2FjCisgICAgICBmaQorICAgIGRvbmUKKyAgICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgZG9uZQorICA6ICR7bHRfY3ZfcGF0aF9OTT1ub30KK2ZpCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wYXRoX05NIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfcGF0aF9OTSIgPiY2OyB9CitpZiB0ZXN0ICIkbHRfY3ZfcGF0aF9OTSIgIT0gIm5vIjsgdGhlbgorICBOTT0iJGx0X2N2X3BhdGhfTk0iCitlbHNlCisgICMgRGlkbid0IGZpbmQgYW55IEJTRCBjb21wYXRpYmxlIG5hbWUgbGlzdGVyLCBsb29rIGZvciBkdW1wYmluLgorICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgIGZvciBhY19wcm9nIGluICJkdW1wYmluIC1zeW1ib2xzIiAibGluayAtZHVtcCAtc3ltYm9scyIKKyAgZG8KKyAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY190b29sX3ByZWZpeCRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfRFVNUEJJTitzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiREVU1QQklOIjsgdGhlbgorICBhY19jdl9wcm9nX0RVTVBCSU49IiREVU1QQklOIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfRFVNUEJJTj0iJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorRFVNUEJJTj0kYWNfY3ZfcHJvZ19EVU1QQklOCitpZiB0ZXN0IC1uICIkRFVNUEJJTiI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICREVU1QQklOIiA+JjUKKyRhc19lY2hvICIkRFVNUEJJTiIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisgICAgdGVzdCAtbiAiJERVTVBCSU4iICYmIGJyZWFrCisgIGRvbmUKK2ZpCitpZiB0ZXN0IC16ICIkRFVNUEJJTiI7IHRoZW4KKyAgYWNfY3RfRFVNUEJJTj0kRFVNUEJJTgorICBmb3IgYWNfcHJvZyBpbiAiZHVtcGJpbiAtc3ltYm9scyIgImxpbmsgLWR1bXAgLXN5bWJvbHMiCitkbworICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAkYWNfcHJvZzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfRFVNUEJJTitzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9EVU1QQklOIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X0RVTVBCSU49IiRhY19jdF9EVU1QQklOIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfRFVNUEJJTj0iJGFjX3Byb2ciCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorYWNfY3RfRFVNUEJJTj0kYWNfY3ZfcHJvZ19hY19jdF9EVU1QQklOCitpZiB0ZXN0IC1uICIkYWNfY3RfRFVNUEJJTiI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9EVU1QQklOIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfRFVNUEJJTiIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisgIHRlc3QgLW4gIiRhY19jdF9EVU1QQklOIiAmJiBicmVhaworZG9uZQorCisgIGlmIHRlc3QgIngkYWNfY3RfRFVNUEJJTiIgPSB4OyB0aGVuCisgICAgRFVNUEJJTj0iOiIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBEVU1QQklOPSRhY19jdF9EVU1QQklOCisgIGZpCitmaQorCisKKyAgaWYgdGVzdCAiJERVTVBCSU4iICE9ICI6IjsgdGhlbgorICAgIE5NPSIkRFVNUEJJTiIKKyAgZmkKK2ZpCit0ZXN0IC16ICIkTk0iICYmIE5NPW5tCisKKworCisKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHRoZSBuYW1lIGxpc3RlciAoJE5NKSBpbnRlcmZhY2UiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgdGhlIG5hbWUgbGlzdGVyICgkTk0pIGludGVyZmFjZS4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHtsdF9jdl9ubV9pbnRlcmZhY2Urc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBsdF9jdl9ubV9pbnRlcmZhY2U9IkJTRCBubSIKKyAgZWNobyAiaW50IHNvbWVfdmFyaWFibGUgPSAwOyIgPiBjb25mdGVzdC4kYWNfZXh0CisgIChldmFsIGVjaG8gIlwiXCRhc19tZTo0OTI4OiAkYWNfY29tcGlsZVwiIiA+JjUpCisgIChldmFsICIkYWNfY29tcGlsZSIgMj5jb25mdGVzdC5lcnIpCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIChldmFsIGVjaG8gIlwiXCRhc19tZTo0OTMxOiAkTk0gXFxcImNvbmZ0ZXN0LiRhY19vYmpleHRcXFwiXCIiID4mNSkKKyAgKGV2YWwgIiROTSBcImNvbmZ0ZXN0LiRhY19vYmpleHRcIiIgMj5jb25mdGVzdC5lcnIgPiBjb25mdGVzdC5vdXQpCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIChldmFsIGVjaG8gIlwiXCRhc19tZTo0OTM0OiBvdXRwdXRcIiIgPiY1KQorICBjYXQgY29uZnRlc3Qub3V0ID4mNQorICBpZiAkR1JFUCAnRXh0ZXJuYWwuKnNvbWVfdmFyaWFibGUnIGNvbmZ0ZXN0Lm91dCA+IC9kZXYvbnVsbDsgdGhlbgorICAgIGx0X2N2X25tX2ludGVyZmFjZT0iTVMgZHVtcGJpbiIKKyAgZmkKKyAgcm0gLWYgY29uZnRlc3QqCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9ubV9pbnRlcmZhY2UiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9ubV9pbnRlcmZhY2UiID4mNjsgfQorCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgbG4gLXMgd29ya3MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBsbiAtcyB3b3Jrcy4uLiAiID4mNjsgfQorTE5fUz0kYXNfbG5fcworaWYgdGVzdCAiJExOX1MiID0gImxuIC1zIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8sIHVzaW5nICRMTl9TIiA+JjUKKyRhc19lY2hvICJubywgdXNpbmcgJExOX1MiID4mNjsgfQorZmkKKworIyBmaW5kIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBjb21tYW5kIGxpbmUgYXJndW1lbnRzCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBjb21tYW5kIGxpbmUgYXJndW1lbnRzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBjb21tYW5kIGxpbmUgYXJndW1lbnRzLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2x0X2N2X3N5c19tYXhfY21kX2xlbitzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgICAgaT0wCisgIHRlc3RzdHJpbmc9IkFCQ0QiCisKKyAgY2FzZSAkYnVpbGRfb3MgaW4KKyAgbXNkb3NkamdwcCopCisgICAgIyBPbiBESkdQUCwgdGhpcyB0ZXN0IGNhbiBibG93IHVwIHByZXR0eSBiYWRseSBkdWUgdG8gcHJvYmxlbXMgaW4gbGliYworICAgICMgKGFueSBzaW5nbGUgYXJndW1lbnQgZXhjZWVkaW5nIDIwMDAgYnl0ZXMgY2F1c2VzIGEgYnVmZmVyIG92ZXJydW4KKyAgICAjIGR1cmluZyBnbG9iIGV4cGFuc2lvbikuICBFdmVuIGlmIGl0IHdlcmUgZml4ZWQsIHRoZSByZXN1bHQgb2YgdGhpcworICAgICMgY2hlY2sgd291bGQgYmUgbGFyZ2VyIHRoYW4gaXQgc2hvdWxkIGJlLgorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0xMjI4ODsgICAgIyAxMksgaXMgYWJvdXQgcmlnaHQKKyAgICA7OworCisgIGdudSopCisgICAgIyBVbmRlciBHTlUgSHVyZCwgdGhpcyB0ZXN0IGlzIG5vdCByZXF1aXJlZCBiZWNhdXNlIHRoZXJlIGlzCisgICAgIyBubyBsaW1pdCB0byB0aGUgbGVuZ3RoIG9mIGNvbW1hbmQgbGluZSBhcmd1bWVudHMuCisgICAgIyBMaWJ0b29sIHdpbGwgaW50ZXJwcmV0IC0xIGFzIG5vIGxpbWl0IHdoYXRzb2V2ZXIKKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49LTE7CisgICAgOzsKKworICBjeWd3aW4qIHwgbWluZ3cqIHwgY2VnY2MqKQorICAgICMgT24gV2luOXgvTUUsIHRoaXMgdGVzdCBibG93cyB1cCAtLSBpdCBzdWNjZWVkcywgYnV0IHRha2VzCisgICAgIyBhYm91dCA1IG1pbnV0ZXMgYXMgdGhlIHRlc3RzdHJpbmcgZ3Jvd3MgZXhwb25lbnRpYWxseS4KKyAgICAjIFdvcnNlLCBzaW5jZSA5eC9NRSBhcmUgbm90IHByZS1lbXB0aXZlbHkgbXVsdGl0YXNraW5nLAorICAgICMgeW91IGVuZCB1cCB3aXRoIGEgImZyb3plbiIgY29tcHV0ZXIsIGV2ZW4gdGhvdWdoIHdpdGggcGF0aWVuY2UKKyAgICAjIHRoZSB0ZXN0IGV2ZW50dWFsbHkgc3VjY2VlZHMgKHdpdGggYSBtYXggbGluZSBsZW5ndGggb2YgMjU2aykuCisgICAgIyBJbnN0ZWFkLCBsZXQncyBqdXN0IHB1bnQ6IHVzZSB0aGUgbWluaW11bSBsaW5lbGVuZ3RoIHJlcG9ydGVkIGJ5CisgICAgIyBhbGwgb2YgdGhlIHN1cHBvcnRlZCBwbGF0Zm9ybXM6IDgxOTIgKG9uIE5ULzJLL1hQKS4KKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49ODE5MjsKKyAgICA7OworCisgIGFtaWdhb3MqKQorICAgICMgT24gQW1pZ2FPUyB3aXRoIHBka3NoLCB0aGlzIHRlc3QgdGFrZXMgaG91cnMsIGxpdGVyYWxseS4KKyAgICAjIFNvIHdlIGp1c3QgcHVudCBhbmQgdXNlIGEgbWluaW11bSBsaW5lIGxlbmd0aCBvZiA4MTkyLgorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj04MTkyOworICAgIDs7CisKKyAgbmV0YnNkKiB8IGZyZWVic2QqIHwgb3BlbmJzZCogfCBkYXJ3aW4qIHwgZHJhZ29uZmx5KikKKyAgICAjIFRoaXMgaGFzIGJlZW4gYXJvdW5kIHNpbmNlIDM4NkJTRCwgYXQgbGVhc3QuICBMaWtlbHkgZnVydGhlci4KKyAgICBpZiB0ZXN0IC14IC9zYmluL3N5c2N0bDsgdGhlbgorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWAvc2Jpbi9zeXNjdGwgLW4ga2Vybi5hcmdtYXhgCisgICAgZWxpZiB0ZXN0IC14IC91c3Ivc2Jpbi9zeXNjdGw7IHRoZW4KKyAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gL3Vzci9zYmluL3N5c2N0bCAtbiBrZXJuLmFyZ21heGAKKyAgICBlbHNlCisgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49NjU1MzYJIyB1c2FibGUgZGVmYXVsdCBmb3IgYWxsIEJTRHMKKyAgICBmaQorICAgICMgQW5kIGFkZCBhIHNhZmV0eSB6b25lCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gXC8gNGAKKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGV4cHIgJGx0X2N2X3N5c19tYXhfY21kX2xlbiBcKiAzYAorICAgIDs7CisKKyAgaW50ZXJpeCopCisgICAgIyBXZSBrbm93IHRoZSB2YWx1ZSAyNjIxNDQgYW5kIGhhcmRjb2RlIGl0IHdpdGggYSBzYWZldHkgem9uZSAobGlrZSBCU0QpCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTE5NjYwOAorICAgIDs7CisKKyAgb3NmKikKKyAgICAjIERyLiBIYW5zIEVra2VoYXJkIFBsZXNzZXIgcmVwb3J0cyBzZWVpbmcgYSBrZXJuZWwgcGFuaWMgcnVubmluZyBjb25maWd1cmUKKyAgICAjIGR1ZSB0byB0aGlzIHRlc3Qgd2hlbiBleGVjX2Rpc2FibGVfYXJnX2xpbWl0IGlzIDEgb24gVHJ1NjQuIEl0IGlzIG5vdAorICAgICMgbmljZSB0byBjYXVzZSBrZXJuZWwgcGFuaWNzIHNvIGxldHMgYXZvaWQgdGhlIGxvb3AgYmVsb3cuCisgICAgIyBGaXJzdCBzZXQgYSByZWFzb25hYmxlIGRlZmF1bHQuCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTE2Mzg0CisgICAgIworICAgIGlmIHRlc3QgLXggL3NiaW4vc3lzY29uZmlnOyB0aGVuCisgICAgICBjYXNlIGAvc2Jpbi9zeXNjb25maWcgLXEgcHJvYyBleGVjX2Rpc2FibGVfYXJnX2xpbWl0YCBpbgorICAgICAgICAqMSopIGx0X2N2X3N5c19tYXhfY21kX2xlbj0tMSA7OworICAgICAgZXNhYworICAgIGZpCisgICAgOzsKKyAgc2NvMy4ydjUqKQorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0xMDI0MDAKKyAgICA7OworICBzeXN2NSogfCBzY281djYqIHwgc3lzdjQuMnV3MiopCisgICAga2FyZ21heD1gZ3JlcCBBUkdfTUFYIC9ldGMvY29uZi9jZi5kL3N0dW5lIDI+L2Rldi9udWxsYAorICAgIGlmIHRlc3QgLW4gIiRrYXJnbWF4IjsgdGhlbgorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBlY2hvICRrYXJnbWF4IHwgc2VkICdzLy4qWwkgXS8vJ2AKKyAgICBlbHNlCisgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49MzI3NjgKKyAgICBmaQorICAgIDs7CisgICopCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWAoZ2V0Y29uZiBBUkdfTUFYKSAyPiAvZGV2L251bGxgCisgICAgaWYgdGVzdCAtbiAiJGx0X2N2X3N5c19tYXhfY21kX2xlbiI7IHRoZW4KKyAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIFwvIDRgCisgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGV4cHIgJGx0X2N2X3N5c19tYXhfY21kX2xlbiBcKiAzYAorICAgIGVsc2UKKyAgICAgICMgTWFrZSB0ZXN0c3RyaW5nIGEgbGl0dGxlIGJpZ2dlciBiZWZvcmUgd2UgZG8gYW55dGhpbmcgd2l0aCBpdC4KKyAgICAgICMgYSAxSyBzdHJpbmcgc2hvdWxkIGJlIGEgcmVhc29uYWJsZSBzdGFydC4KKyAgICAgIGZvciBpIGluIDEgMiAzIDQgNSA2IDcgOCA7IGRvCisgICAgICAgIHRlc3RzdHJpbmc9JHRlc3RzdHJpbmckdGVzdHN0cmluZworICAgICAgZG9uZQorICAgICAgU0hFTEw9JHtTSEVMTC0ke0NPTkZJR19TSEVMTC0vYmluL3NofX0KKyAgICAgICMgSWYgdGVzdCBpcyBub3QgYSBzaGVsbCBidWlsdC1pbiwgd2UnbGwgcHJvYmFibHkgZW5kIHVwIGNvbXB1dGluZyBhCisgICAgICAjIG1heGltdW0gbGVuZ3RoIHRoYXQgaXMgb25seSBoYWxmIG9mIHRoZSBhY3R1YWwgbWF4aW11bSBsZW5ndGgsIGJ1dAorICAgICAgIyB3ZSBjYW4ndCB0ZWxsLgorICAgICAgd2hpbGUgeyB0ZXN0ICJYImAkU0hFTEwgJDAgLS1mYWxsYmFjay1lY2hvICJYJHRlc3RzdHJpbmckdGVzdHN0cmluZyIgMj4vZGV2L251bGxgIFwKKwkgICAgICAgICA9ICJYWCR0ZXN0c3RyaW5nJHRlc3RzdHJpbmciOyB9ID4vZGV2L251bGwgMj4mMSAmJgorCSAgICAgIHRlc3QgJGkgIT0gMTcgIyAxLzIgTUIgc2hvdWxkIGJlIGVub3VnaAorICAgICAgZG8KKyAgICAgICAgaT1gZXhwciAkaSArIDFgCisgICAgICAgIHRlc3RzdHJpbmc9JHRlc3RzdHJpbmckdGVzdHN0cmluZworICAgICAgZG9uZQorICAgICAgIyBPbmx5IGNoZWNrIHRoZSBzdHJpbmcgbGVuZ3RoIG91dHNpZGUgdGhlIGxvb3AuCisgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGV4cHIgIlgkdGVzdHN0cmluZyIgOiAiLioiIDI+JjFgCisgICAgICB0ZXN0c3RyaW5nPQorICAgICAgIyBBZGQgYSBzaWduaWZpY2FudCBzYWZldHkgZmFjdG9yIGJlY2F1c2UgQysrIGNvbXBpbGVycyBjYW4gdGFjayBvbgorICAgICAgIyBtYXNzaXZlIGFtb3VudHMgb2YgYWRkaXRpb25hbCBhcmd1bWVudHMgYmVmb3JlIHBhc3NpbmcgdGhlbSB0byB0aGUKKyAgICAgICMgbGlua2VyLiAgSXQgYXBwZWFycyBhcyB0aG91Z2ggMS8yIGlzIGEgdXNhYmxlIHZhbHVlLgorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gXC8gMmAKKyAgICBmaQorICAgIDs7CisgIGVzYWMKKworZmkKKworaWYgdGVzdCAtbiAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIDsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3N5c19tYXhfY21kX2xlbiIgPiY1CiskYXNfZWNobyAiJGx0X2N2X3N5c19tYXhfY21kX2xlbiIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBub25lIiA+JjUKKyRhc19lY2hvICJub25lIiA+JjY7IH0KK2ZpCittYXhfY21kX2xlbj0kbHRfY3Zfc3lzX21heF9jbWRfbGVuCisKKworCisKKworCis6ICR7Q1A9ImNwIC1mIn0KKzogJHtNVj0ibXYgLWYifQorOiAke1JNPSJybSAtZiJ9CisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0aGUgc2hlbGwgdW5kZXJzdGFuZHMgc29tZSBYU0kgY29uc3RydWN0cyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSBzaGVsbCB1bmRlcnN0YW5kcyBzb21lIFhTSSBjb25zdHJ1Y3RzLi4uICIgPiY2OyB9CisjIFRyeSBzb21lIFhTSSBmZWF0dXJlcworeHNpX3NoZWxsPW5vCisoIF9sdF9kdW1teT0iYS9iL2MiCisgIHRlc3QgIiR7X2x0X2R1bW15IyMqL30sJHtfbHRfZHVtbXklLyp9LCIke19sdF9kdW1teSUiJF9sdF9kdW1teSJ9LCBcCisgICAgICA9IGMsYS9iLCwgXAorICAgICYmIGV2YWwgJ3Rlc3QgJCgoIDEgKyAxICkpIC1lcSAyIFwKKyAgICAmJiB0ZXN0ICIkeyNfbHRfZHVtbXl9IiAtZXEgNScgKSA+L2Rldi9udWxsIDI+JjEgXAorICAmJiB4c2lfc2hlbGw9eWVzCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHhzaV9zaGVsbCIgPiY1CiskYXNfZWNobyAiJHhzaV9zaGVsbCIgPiY2OyB9CisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRoZSBzaGVsbCB1bmRlcnN0YW5kcyBcIis9XCIiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgc2hlbGwgdW5kZXJzdGFuZHMgXCIrPVwiLi4uICIgPiY2OyB9CitsdF9zaGVsbF9hcHBlbmQ9bm8KKyggZm9vPWJhcjsgc2V0IGZvbyBiYXo7IGV2YWwgIiQxKz1cJDIiICYmIHRlc3QgIiRmb28iID0gYmFyYmF6ICkgXAorICAgID4vZGV2L251bGwgMj4mMSBcCisgICYmIGx0X3NoZWxsX2FwcGVuZD15ZXMKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfc2hlbGxfYXBwZW5kIiA+JjUKKyRhc19lY2hvICIkbHRfc2hlbGxfYXBwZW5kIiA+JjY7IH0KKworCitpZiAoIChNQUlMPTYwOyB1bnNldCBNQUlMKSB8fCBleGl0KSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgbHRfdW5zZXQ9dW5zZXQKK2Vsc2UKKyAgbHRfdW5zZXQ9ZmFsc2UKK2ZpCisKKworCisKKworIyB0ZXN0IEVCQ0RJQyBvciBBU0NJSQorY2FzZSBgZWNobyBYfHRyIFggJ1wxMDEnYCBpbgorIEEpICMgQVNDSUkgYmFzZWQgc3lzdGVtCisgICAgIyBcbiBpcyBub3QgaW50ZXJwcmV0ZWQgY29ycmVjdGx5IGJ5IFNvbGFyaXMgOCAvdXNyL3VjYi90cgorICBsdF9TUDJOTD0ndHIgXDA0MCBcMDEyJworICBsdF9OTDJTUD0ndHIgXDAxNVwwMTIgXDA0MFwwNDAnCisgIDs7CisgKikgIyBFQkNESUMgYmFzZWQgc3lzdGVtCisgIGx0X1NQMk5MPSd0ciBcMTAwIFxuJworICBsdF9OTDJTUD0ndHIgXHJcbiBcMTAwXDEwMCcKKyAgOzsKK2VzYWMKKworCisKKworCisKKworCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRMRCBvcHRpb24gdG8gcmVsb2FkIG9iamVjdCBmaWxlcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJExEIG9wdGlvbiB0byByZWxvYWQgb2JqZWN0IGZpbGVzLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2x0X2N2X2xkX3JlbG9hZF9mbGFnK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbHRfY3ZfbGRfcmVsb2FkX2ZsYWc9Jy1yJworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfbGRfcmVsb2FkX2ZsYWciID4mNQorJGFzX2VjaG8gIiRsdF9jdl9sZF9yZWxvYWRfZmxhZyIgPiY2OyB9CityZWxvYWRfZmxhZz0kbHRfY3ZfbGRfcmVsb2FkX2ZsYWcKK2Nhc2UgJHJlbG9hZF9mbGFnIGluCisiIiB8ICIgIiopIDs7CisqKSByZWxvYWRfZmxhZz0iICRyZWxvYWRfZmxhZyIgOzsKK2VzYWMKK3JlbG9hZF9jbWRzPSckTEQkcmVsb2FkX2ZsYWcgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKK2Nhc2UgJGhvc3Rfb3MgaW4KKyAgZGFyd2luKikKKyAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgICAgcmVsb2FkX2NtZHM9JyRMVENDICRMVENGTEFHUyAtbm9zdGRsaWIgJHt3bH0tciAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJworICAgIGVsc2UKKyAgICAgIHJlbG9hZF9jbWRzPSckTEQkcmVsb2FkX2ZsYWcgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKKyAgICBmaQorICAgIDs7Citlc2FjCisKKworCisKKworCisKKworCitpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1vYmpkdW1wIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fW9iamR1bXA7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX09CSkRVTVArc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkT0JKRFVNUCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19PQkpEVU1QPSIkT0JKRFVNUCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX09CSkRVTVA9IiR7YWNfdG9vbF9wcmVmaXh9b2JqZHVtcCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitPQkpEVU1QPSRhY19jdl9wcm9nX09CSkRVTVAKK2lmIHRlc3QgLW4gIiRPQkpEVU1QIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJE9CSkRVTVAiID4mNQorJGFzX2VjaG8gIiRPQkpEVU1QIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19PQkpEVU1QIjsgdGhlbgorICBhY19jdF9PQkpEVU1QPSRPQkpEVU1QCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAib2JqZHVtcCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgb2JqZHVtcDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfT0JKRFVNUCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9PQkpEVU1QIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X09CSkRVTVA9IiRhY19jdF9PQkpEVU1QIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfT0JKRFVNUD0ib2JqZHVtcCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCithY19jdF9PQkpEVU1QPSRhY19jdl9wcm9nX2FjX2N0X09CSkRVTVAKK2lmIHRlc3QgLW4gIiRhY19jdF9PQkpEVU1QIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X09CSkRVTVAiID4mNQorJGFzX2VjaG8gIiRhY19jdF9PQkpEVU1QIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisgIGlmIHRlc3QgIngkYWNfY3RfT0JKRFVNUCIgPSB4OyB0aGVuCisgICAgT0JKRFVNUD0iZmFsc2UiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgT0JKRFVNUD0kYWNfY3RfT0JKRFVNUAorICBmaQorZWxzZQorICBPQkpEVU1QPSIkYWNfY3ZfcHJvZ19PQkpEVU1QIgorZmkKKwordGVzdCAteiAiJE9CSkRVTVAiICYmIE9CSkRVTVA9b2JqZHVtcAorCisKKworCisKKworCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gcmVjb2duaXplIGRlcGVuZGVudCBsaWJyYXJpZXMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIHJlY29nbml6ZSBkZXBlbmRlbnQgbGlicmFyaWVzLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2x0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9JyRNQUdJQ19DTUQnCitsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0KK2x0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSd1bmtub3duJworIyBOZWVkIHRvIHNldCB0aGUgcHJlY2VkaW5nIHZhcmlhYmxlIG9uIGFsbCBwbGF0Zm9ybXMgdGhhdCBzdXBwb3J0CisjIGludGVybGlicmFyeSBkZXBlbmRlbmNpZXMuCisjICdub25lJyAtLSBkZXBlbmRlbmNpZXMgbm90IHN1cHBvcnRlZC4KKyMgYHVua25vd24nIC0tIHNhbWUgYXMgbm9uZSwgYnV0IGRvY3VtZW50cyB0aGF0IHdlIHJlYWxseSBkb24ndCBrbm93LgorIyAncGFzc19hbGwnIC0tIGFsbCBkZXBlbmRlbmNpZXMgcGFzc2VkIHdpdGggbm8gY2hlY2tzLgorIyAndGVzdF9jb21waWxlJyAtLSBjaGVjayBieSBtYWtpbmcgdGVzdCBwcm9ncmFtLgorIyAnZmlsZV9tYWdpYyBbW3JlZ2V4XV0nIC0tIGNoZWNrIGJ5IGxvb2tpbmcgZm9yIGZpbGVzIGluIGxpYnJhcnkgcGF0aAorIyB3aGljaCByZXNwb25kcyB0byB0aGUgJGZpbGVfbWFnaWNfY21kIHdpdGggYSBnaXZlbiBleHRlbmRlZCByZWdleC4KKyMgSWYgeW91IGhhdmUgYGZpbGUnIG9yIGVxdWl2YWxlbnQgb24geW91ciBzeXN0ZW0gYW5kIHlvdSdyZSBub3Qgc3VyZQorIyB3aGV0aGVyIGBwYXNzX2FsbCcgd2lsbCAqYWx3YXlzKiB3b3JrLCB5b3UgcHJvYmFibHkgd2FudCB0aGlzIG9uZS4KKworY2FzZSAkaG9zdF9vcyBpbgorYWl4WzQtOV0qKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCitiZW9zKikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworYnNkaVs0NV0qKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBFTEYgWzAtOV1bMC05XSotYml0IFtNTF1TQiAoc2hhcmVkIG9iamVjdHxkeW5hbWljIGxpYiknCisgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPScvdXNyL2Jpbi9maWxlIC1MJworICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0vc2hsaWIvbGliYy5zbworICA7OworCitjeWd3aW4qKQorICAjIGZ1bmNfd2luMzJfbGliaWQgaXMgYSBzaGVsbCBmdW5jdGlvbiBkZWZpbmVkIGluIGx0bWFpbi5zaAorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBeeDg2IGFyY2hpdmUgaW1wb3J0fF54ODYgRExMJworICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nZnVuY193aW4zMl9saWJpZCcKKyAgOzsKKworbWluZ3cqIHwgcHczMiopCisgICMgQmFzZSBNU1lTL01pbkdXIGRvIG5vdCBwcm92aWRlIHRoZSAnZmlsZScgY29tbWFuZCBuZWVkZWQgYnkKKyAgIyBmdW5jX3dpbjMyX2xpYmlkIHNoZWxsIGZ1bmN0aW9uLCBzbyB1c2UgYSB3ZWFrZXIgdGVzdCBiYXNlZCBvbiAnb2JqZHVtcCcsCisgICMgdW5sZXNzIHdlIGZpbmQgJ2ZpbGUnLCBmb3IgZXhhbXBsZSBiZWNhdXNlIHdlIGFyZSBjcm9zcy1jb21waWxpbmcuCisgIGlmICggZmlsZSAvICkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgXng4NiBhcmNoaXZlIGltcG9ydHxeeDg2IERMTCcKKyAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nZnVuY193aW4zMl9saWJpZCcKKyAgZWxzZQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIGZpbGUgZm9ybWF0IHBlaSotaTM4NiguKmFyY2hpdGVjdHVyZTogaTM4Nik/JworICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSckT0JKRFVNUCAtZicKKyAgZmkKKyAgOzsKKworY2VnY2MpCisgICMgdXNlIHRoZSB3ZWFrZXIgdGVzdCBiYXNlZCBvbiAnb2JqZHVtcCcuIFNlZSBtaW5ndyouCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIGZpbGUgZm9ybWF0IHBlLWFybS0uKmxpdHRsZSguKmFyY2hpdGVjdHVyZTogYXJtKT8nCisgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSckT0JKRFVNUCAtZicKKyAgOzsKKworZGFyd2luKiB8IHJoYXBzb2R5KikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworZnJlZWJzZCogfCBkcmFnb25mbHkqKQorICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX18gPiAvZGV2L251bGw7IHRoZW4KKyAgICBjYXNlICRob3N0X2NwdSBpbgorICAgIGkqODYgKQorICAgICAgIyBOb3Qgc3VyZSB3aGV0aGVyIHRoZSBwcmVzZW5jZSBvZiBPcGVuQlNEIGhlcmUgd2FzIGEgbWlzdGFrZS4KKyAgICAgICMgTGV0J3MgYWNjZXB0IGJvdGggb2YgdGhlbSB1bnRpbCB0aGlzIGlzIGNsZWFyZWQgdXAuCisgICAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyAoRnJlZUJTRHxPcGVuQlNEfERyYWdvbkZseSkvaVszLTldODYgKGNvbXBhY3QgKT9kZW1hbmQgcGFnZWQgc2hhcmVkIGxpYnJhcnknCisgICAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0vdXNyL2Jpbi9maWxlCisgICAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT1gZWNobyAvdXNyL2xpYi9saWJjLnNvLipgCisgICAgICA7OworICAgIGVzYWMKKyAgZWxzZQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIGZpCisgIDs7CisKK2dudSopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK2hwdXgxMC4yMCogfCBocHV4MTEqKQorICBsdF9jdl9maWxlX21hZ2ljX2NtZD0vdXNyL2Jpbi9maWxlCisgIGNhc2UgJGhvc3RfY3B1IGluCisgIGlhNjQqKQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIChzWzAtOV1bMC05XVswLTldfEVMRi1bMC05XVswLTldKSBzaGFyZWQgb2JqZWN0IGZpbGUgLSBJQTY0JworICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS91c3IvbGliL2hwdXgzMi9saWJjLnNvCisgICAgOzsKKyAgaHBwYSo2NCopCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgKHNbMC05XVswLTldWzAtOV18RUxGLVswLTldWzAtOV0pIHNoYXJlZCBvYmplY3QgZmlsZSAtIFBBLVJJU0MgWzAtOV0uWzAtOV0nCisgICAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9L3Vzci9saWIvcGEyMF82NC9saWJjLnNsCisgICAgOzsKKyAgKikKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyAoc1swLTldWzAtOV1bMC05XXxQQS1SSVNDWzAtOV0uWzAtOV0pIHNoYXJlZCBsaWJyYXJ5JworICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS91c3IvbGliL2xpYmMuc2wKKyAgICA7OworICBlc2FjCisgIDs7CisKK2ludGVyaXhbMy05XSopCisgICMgUElDIGNvZGUgaXMgYnJva2VuIG9uIEludGVyaXggMy54LCB0aGF0J3Mgd2h5IHxcLmEgbm90IHxfcGljXC5hIGhlcmUKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYlteL10rKFwuc298XC5hKSQnCisgIDs7CisKK2lyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisgIGNhc2UgJExEIGluCisgICotMzJ8KiItMzIgIikgbGlibWFnaWM9MzItYml0OzsKKyAgKi1uMzJ8KiItbjMyICIpIGxpYm1hZ2ljPU4zMjs7CisgICotNjR8KiItNjQgIikgbGlibWFnaWM9NjQtYml0OzsKKyAgKikgbGlibWFnaWM9bmV2ZXItbWF0Y2g7OworICBlc2FjCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKKyMgVGhpcyBtdXN0IGJlIExpbnV4IEVMRi4KK2xpbnV4KiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSkKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworbmV0YnNkKiB8IG5ldGJzZGVsZiotZ251KQorICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX18gPiAvZGV2L251bGw7IHRoZW4KKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nbWF0Y2hfcGF0dGVybiAvbGliW14vXSsoXC5zb1wuWzAtOV0rXC5bMC05XSt8X3BpY1wuYSkkJworICBlbHNlCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYlteL10rKFwuc298X3BpY1wuYSkkJworICBmaQorICA7OworCituZXdvczYqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBFTEYgWzAtOV1bMC05XSotYml0IFtNTF1TQiAoZXhlY3V0YWJsZXxkeW5hbWljIGxpYiknCisgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPS91c3IvYmluL2ZpbGUKKyAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9L3Vzci9saWIvbGlibmxzLnNvCisgIDs7CisKKypudG8qIHwgKnFueCopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK29wZW5ic2QqKQorICBpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fYCIgfHwgdGVzdCAiJGhvc3Rfb3MtJGhvc3RfY3B1IiA9ICJvcGVuYnNkMi44LXBvd2VycGMiOyB0aGVuCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYlteL10rKFwuc29cLlswLTldK1wuWzAtOV0rfFwuc298X3BpY1wuYSkkJworICBlbHNlCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYlteL10rKFwuc29cLlswLTldK1wuWzAtOV0rfF9waWNcLmEpJCcKKyAgZmkKKyAgOzsKKworb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCityZG9zKikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworc29sYXJpcyopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK3N5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCogfCBzeXN2NCp1dzIqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCitzeXN2NCB8IHN5c3Y0LjMqKQorICBjYXNlICRob3N0X3ZlbmRvciBpbgorICBtb3Rvcm9sYSkKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBFTEYgWzAtOV1bMC05XSotYml0IFtNTF1TQiAoc2hhcmVkIG9iamVjdHxkeW5hbWljIGxpYikgTVswLTldWzAtOV0qIFZlcnNpb24gWzAtOV0nCisgICAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9YGVjaG8gL3Vzci9saWIvbGliYy5zbypgCisgICAgOzsKKyAgbmNyKQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgICAgOzsKKyAgc2VxdWVudCkKKyAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nL2Jpbi9maWxlJworICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIEVMRiBbMC05XVswLTldKi1iaXQgW0xNXVNCIChzaGFyZWQgb2JqZWN0fGR5bmFtaWMgbGliICknCisgICAgOzsKKyAgc25pKQorICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPScvYmluL2ZpbGUnCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9ImZpbGVfbWFnaWMgRUxGIFswLTldWzAtOV0qLWJpdCBbTE1dU0IgZHluYW1pYyBsaWIiCisgICAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9L2xpYi9saWJjLnNvCisgICAgOzsKKyAgc2llbWVucykKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICAgIDs7CisgIHBjKQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgICAgOzsKKyAgZXNhYworICA7OworCit0cGYqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworZXNhYworCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZCIgPiY1CiskYXNfZWNobyAiJGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kIiA+JjY7IH0KK2ZpbGVfbWFnaWNfY21kPSRsdF9jdl9maWxlX21hZ2ljX2NtZAorZGVwbGlic19jaGVja19tZXRob2Q9JGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kCit0ZXN0IC16ICIkZGVwbGlic19jaGVja19tZXRob2QiICYmIGRlcGxpYnNfY2hlY2tfbWV0aG9kPXVua25vd24KKworCisKKworCisKKworCisKKworCisKK2lmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWFyIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWFyOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19BUitzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRBUiI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19BUj0iJEFSIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfQVI9IiR7YWNfdG9vbF9wcmVmaXh9YXIiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorQVI9JGFjX2N2X3Byb2dfQVIKK2lmIHRlc3QgLW4gIiRBUiI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRBUiIgPiY1CiskYXNfZWNobyAiJEFSIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19BUiI7IHRoZW4KKyAgYWNfY3RfQVI9JEFSCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiYXIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IGFyOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9BUitzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9BUiI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9BUj0iJGFjX2N0X0FSIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfQVI9ImFyIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X0FSPSRhY19jdl9wcm9nX2FjX2N0X0FSCitpZiB0ZXN0IC1uICIkYWNfY3RfQVIiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfQVIiID4mNQorJGFzX2VjaG8gIiRhY19jdF9BUiIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworICBpZiB0ZXN0ICJ4JGFjX2N0X0FSIiA9IHg7IHRoZW4KKyAgICBBUj0iZmFsc2UiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgQVI9JGFjX2N0X0FSCisgIGZpCitlbHNlCisgIEFSPSIkYWNfY3ZfcHJvZ19BUiIKK2ZpCisKK3Rlc3QgLXogIiRBUiIgJiYgQVI9YXIKK3Rlc3QgLXogIiRBUl9GTEFHUyIgJiYgQVJfRkxBR1M9Y3J1CisKKworCisKKworCisKKworCisKKworaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9c3RyaXAiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9c3RyaXA7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX1NUUklQK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJFNUUklQIjsgdGhlbgorICBhY19jdl9wcm9nX1NUUklQPSIkU1RSSVAiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19TVFJJUD0iJHthY190b29sX3ByZWZpeH1zdHJpcCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitTVFJJUD0kYWNfY3ZfcHJvZ19TVFJJUAoraWYgdGVzdCAtbiAiJFNUUklQIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJFNUUklQIiA+JjUKKyRhc19lY2hvICIkU1RSSVAiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworZmkKK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX1NUUklQIjsgdGhlbgorICBhY19jdF9TVFJJUD0kU1RSSVAKKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJzdHJpcCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgc3RyaXA7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X1NUUklQK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X1NUUklQIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X1NUUklQPSIkYWNfY3RfU1RSSVAiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19hY19jdF9TVFJJUD0ic3RyaXAiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorYWNfY3RfU1RSSVA9JGFjX2N2X3Byb2dfYWNfY3RfU1RSSVAKK2lmIHRlc3QgLW4gIiRhY19jdF9TVFJJUCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9TVFJJUCIgPiY1CiskYXNfZWNobyAiJGFjX2N0X1NUUklQIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisgIGlmIHRlc3QgIngkYWNfY3RfU1RSSVAiID0geDsgdGhlbgorICAgIFNUUklQPSI6IgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIFNUUklQPSRhY19jdF9TVFJJUAorICBmaQorZWxzZQorICBTVFJJUD0iJGFjX2N2X3Byb2dfU1RSSVAiCitmaQorCit0ZXN0IC16ICIkU1RSSVAiICYmIFNUUklQPToKKworCisKKworCisKK2lmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fXJhbmxpYiIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1yYW5saWI7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX1JBTkxJQitzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCisgIGFjX2N2X3Byb2dfUkFOTElCPSIkUkFOTElCIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfUkFOTElCPSIke2FjX3Rvb2xfcHJlZml4fXJhbmxpYiIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitSQU5MSUI9JGFjX2N2X3Byb2dfUkFOTElCCitpZiB0ZXN0IC1uICIkUkFOTElCIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJFJBTkxJQiIgPiY1CiskYXNfZWNobyAiJFJBTkxJQiIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfUkFOTElCIjsgdGhlbgorICBhY19jdF9SQU5MSUI9JFJBTkxJQgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgInJhbmxpYiIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgcmFubGliOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9SQU5MSUIrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfUkFOTElCIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X1JBTkxJQj0iJGFjX2N0X1JBTkxJQiIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X1JBTkxJQj0icmFubGliIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X1JBTkxJQj0kYWNfY3ZfcHJvZ19hY19jdF9SQU5MSUIKK2lmIHRlc3QgLW4gIiRhY19jdF9SQU5MSUIiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfUkFOTElCIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfUkFOTElCIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisgIGlmIHRlc3QgIngkYWNfY3RfUkFOTElCIiA9IHg7IHRoZW4KKyAgICBSQU5MSUI9IjoiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgUkFOTElCPSRhY19jdF9SQU5MSUIKKyAgZmkKK2Vsc2UKKyAgUkFOTElCPSIkYWNfY3ZfcHJvZ19SQU5MSUIiCitmaQorCit0ZXN0IC16ICIkUkFOTElCIiAmJiBSQU5MSUI9OgorCisKKworCisKKworIyBEZXRlcm1pbmUgY29tbWFuZHMgdG8gY3JlYXRlIG9sZC1zdHlsZSBzdGF0aWMgYXJjaGl2ZXMuCitvbGRfYXJjaGl2ZV9jbWRzPSckQVIgJEFSX0ZMQUdTICRvbGRsaWIkb2xkb2JqcycKK29sZF9wb3N0aW5zdGFsbF9jbWRzPSdjaG1vZCA2NDQgJG9sZGxpYicKK29sZF9wb3N0dW5pbnN0YWxsX2NtZHM9CisKK2lmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgb3BlbmJzZCopCisgICAgb2xkX3Bvc3RpbnN0YWxsX2NtZHM9IiRvbGRfcG9zdGluc3RhbGxfY21kc35cJFJBTkxJQiAtdCBcJG9sZGxpYiIKKyAgICA7OworICAqKQorICAgIG9sZF9wb3N0aW5zdGFsbF9jbWRzPSIkb2xkX3Bvc3RpbnN0YWxsX2NtZHN+XCRSQU5MSUIgXCRvbGRsaWIiCisgICAgOzsKKyAgZXNhYworICBvbGRfYXJjaGl2ZV9jbWRzPSIkb2xkX2FyY2hpdmVfY21kc35cJFJBTkxJQiBcJG9sZGxpYiIKK2ZpCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKyMgSWYgbm8gQyBjb21waWxlciB3YXMgc3BlY2lmaWVkLCB1c2UgQ0MuCitMVENDPSR7TFRDQy0iJENDIn0KKworIyBJZiBubyBDIGNvbXBpbGVyIGZsYWdzIHdlcmUgc3BlY2lmaWVkLCB1c2UgQ0ZMQUdTLgorTFRDRkxBR1M9JHtMVENGTEFHUy0iJENGTEFHUyJ9CisKKyMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCitjb21waWxlcj0kQ0MKKworCisjIENoZWNrIGZvciBjb21tYW5kIHRvIGdyYWIgdGhlIHJhdyBzeW1ib2wgbmFtZSBmb2xsb3dlZCBieSBDIHN5bWJvbCBmcm9tIG5tLgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBjb21tYW5kIHRvIHBhcnNlICROTSBvdXRwdXQgZnJvbSAkY29tcGlsZXIgb2JqZWN0IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGNvbW1hbmQgdG8gcGFyc2UgJE5NIG91dHB1dCBmcm9tICRjb21waWxlciBvYmplY3QuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7bHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZStzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisKKyMgVGhlc2UgYXJlIHNhbmUgZGVmYXVsdHMgdGhhdCB3b3JrIG9uIGF0IGxlYXN0IGEgZmV3IG9sZCBzeXN0ZW1zLgorIyBbVGhleSBjb21lIGZyb20gVWx0cml4LiAgV2hhdCBjb3VsZCBiZSBvbGRlciB0aGFuIFVsdHJpeD8hISA7KV0KKworIyBDaGFyYWN0ZXIgY2xhc3MgZGVzY3JpYmluZyBOTSBnbG9iYWwgc3ltYm9sIGNvZGVzLgorc3ltY29kZT0nW0JDREVHUlNUXScKKworIyBSZWdleHAgdG8gbWF0Y2ggc3ltYm9scyB0aGF0IGNhbiBiZSBhY2Nlc3NlZCBkaXJlY3RseSBmcm9tIEMuCitzeW1wYXQ9J1woW19BLVphLXpdW19BLVphLXowLTldKlwpJworCisjIERlZmluZSBzeXN0ZW0tc3BlY2lmaWMgdmFyaWFibGVzLgorY2FzZSAkaG9zdF9vcyBpbgorYWl4KikKKyAgc3ltY29kZT0nW0JDRFRdJworICA7OworY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICBzeW1jb2RlPSdbQUJDREdJU1RXXScKKyAgOzsKK2hwdXgqKQorICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorICAgIHN5bWNvZGU9J1tBQkNERUdSU1RdJworICBmaQorICA7OworaXJpeCogfCBub25zdG9wdXgqKQorICBzeW1jb2RlPSdbQkNERUdSU1RdJworICA7Oworb3NmKikKKyAgc3ltY29kZT0nW0JDREVHUVJTVF0nCisgIDs7Citzb2xhcmlzKikKKyAgc3ltY29kZT0nW0JEUlRdJworICA7Oworc2NvMy4ydjUqKQorICBzeW1jb2RlPSdbRFRdJworICA7Oworc3lzdjQuMnV3MiopCisgIHN5bWNvZGU9J1tEVF0nCisgIDs7CitzeXN2NSogfCBzY281djYqIHwgdW5peHdhcmUqIHwgT3BlblVOSVgqKQorICBzeW1jb2RlPSdbQUJEVF0nCisgIDs7CitzeXN2NCkKKyAgc3ltY29kZT0nW0RGTlNUVV0nCisgIDs7Citlc2FjCisKKyMgSWYgd2UncmUgdXNpbmcgR05VIG5tLCB0aGVuIHVzZSBpdHMgc3RhbmRhcmQgc3ltYm9sIGNvZGVzLgorY2FzZSBgJE5NIC1WIDI+JjFgIGluCisqR05VKiB8ICond2l0aCBCRkQnKikKKyAgc3ltY29kZT0nW0FCQ0RHSVJTVFddJyA7OworZXNhYworCisjIFRyYW5zZm9ybSBhbiBleHRyYWN0ZWQgc3ltYm9sIGxpbmUgaW50byBhIHByb3BlciBDIGRlY2xhcmF0aW9uLgorIyBTb21lIHN5c3RlbXMgKGVzcC4gb24gaWE2NCkgbGluayBkYXRhIGFuZCBjb2RlIHN5bWJvbHMgZGlmZmVyZW50bHksCisjIHNvIHVzZSB0aGlzIGdlbmVyYWwgYXBwcm9hY2guCitsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0ic2VkIC1uIC1lICdzL15UIC4qIFwoLipcKSQvZXh0ZXJuIGludCBcMSgpOy9wJyAtZSAncy9eJHN5bWNvZGUqIC4qIFwoLipcKSQvZXh0ZXJuIGNoYXIgXDE7L3AnIgorCisjIFRyYW5zZm9ybSBhbiBleHRyYWN0ZWQgc3ltYm9sIGxpbmUgaW50byBzeW1ib2wgbmFtZSBhbmQgc3ltYm9sIGFkZHJlc3MKK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSJzZWQgLW4gLWUgJ3MvXjogXChbXiBdKlwpICQvICB7XFxcIlwxXFxcIiwgKHZvaWQgKikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwoW14gXSpcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCciCitsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4PSJzZWQgLW4gLWUgJ3MvXjogXChbXiBdKlwpICQvICB7XFxcIlwxXFxcIiwgKHZvaWQgKikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwobGliW14gXSpcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChbXiBdKlwpJC8gIHtcImxpYlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyIKKworIyBIYW5kbGUgQ1JMRiBpbiBtaW5ndyB0b29sIGNoYWluCitvcHRfY3I9CitjYXNlICRidWlsZF9vcyBpbgorbWluZ3cqKQorICBvcHRfY3I9YCRFQ0hPICd4XHswLDFcfScgfCB0ciB4ICdcMDE1J2AgIyBvcHRpb24gY3IgaW4gcmVnZXhwCisgIDs7Citlc2FjCisKKyMgVHJ5IHdpdGhvdXQgYSBwcmVmaXggdW5kZXJzY29yZSwgdGhlbiB3aXRoIGl0LgorZm9yIGFjX3N5bXByZnggaW4gIiIgIl8iOyBkbworCisgICMgVHJhbnNmb3JtIHN5bWNvZGUsIHN5bXBhdCwgYW5kIHN5bXByZnggaW50byBhIHJhdyBzeW1ib2wgYW5kIGEgQyBzeW1ib2wuCisgIHN5bXhmcm09IlxcMSAkYWNfc3ltcHJmeFxcMiBcXDIiCisKKyAgIyBXcml0ZSB0aGUgcmF3IGFuZCBDIGlkZW50aWZpZXJzLgorICBpZiB0ZXN0ICIkbHRfY3Zfbm1faW50ZXJmYWNlIiA9ICJNUyBkdW1wYmluIjsgdGhlbgorICAgICMgRmFrZSBpdCBmb3IgZHVtcGJpbiBhbmQgc2F5IFQgZm9yIGFueSBub24tc3RhdGljIGZ1bmN0aW9uCisgICAgIyBhbmQgRCBmb3IgYW55IGdsb2JhbCB2YXJpYWJsZS4KKyAgICAjIEFsc28gZmluZCBDKysgYW5kIF9fZmFzdGNhbGwgc3ltYm9scyBmcm9tIE1TVkMrKywKKyAgICAjIHdoaWNoIHN0YXJ0IHdpdGggQCBvciA/LgorICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9IiRBV0sgJyJcCisiICAgICB7bGFzdF9zZWN0aW9uPXNlY3Rpb247IHNlY3Rpb249XCQgM307IlwKKyIgICAgIC9TZWN0aW9uIGxlbmd0aCAuKiNyZWxvY3MuKihwaWNrIGFueSkve2hpZGVbbGFzdF9zZWN0aW9uXT0xfTsiXAorIiAgICAgXCQgMCF+L0V4dGVybmFsICpcfC97bmV4dH07IlwKKyIgICAgIC8gMCsgVU5ERUYgL3tuZXh0fTsgLyBVTkRFRiBcKFtefF1cKSooKS97bmV4dH07IlwKKyIgICAgIHtpZihoaWRlW3NlY3Rpb25dKSBuZXh0fTsiXAorIiAgICAge2Y9MH07IFwkIDB+L1woXCkuKlx8L3tmPTF9OyB7cHJpbnRmIGYgPyBcIlQgXCIgOiBcIkQgXCJ9OyJcCisiICAgICB7c3BsaXQoXCQgMCwgYSwgL1x8fFxyLyk7IHNwbGl0KGFbMl0sIHMpfTsiXAorIiAgICAgc1sxXX4vXltAP10ve3ByaW50IHNbMV0sIHNbMV07IG5leHR9OyJcCisiICAgICBzWzFdfnByZngge3NwbGl0KHNbMV0sdCxcIkBcIik7IHByaW50IHRbMV0sIHN1YnN0cih0WzFdLGxlbmd0aChwcmZ4KSl9IlwKKyIgICAgICcgcHJmeD1eJGFjX3N5bXByZngiCisgIGVsc2UKKyAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSJzZWQgLW4gLWUgJ3MvXi4qWwkgXVwoJHN5bWNvZGUkc3ltY29kZSpcKVsJIF1bCSBdKiRhY19zeW1wcmZ4JHN5bXBhdCRvcHRfY3IkLyRzeW14ZnJtL3AnIgorICBmaQorCisgICMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhlIHBpcGUgd29ya3MgY29ycmVjdGx5LgorICBwaXBlX3dvcmtzPW5vCisKKyAgcm0gLWYgY29uZnRlc3QqCisgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxfTFRfRU9GCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCitjaGFyIG5tX3Rlc3RfdmFyOwordm9pZCBubV90ZXN0X2Z1bmModm9pZCk7Cit2b2lkIG5tX3Rlc3RfZnVuYyh2b2lkKXt9CisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgoraW50IG1haW4oKXtubV90ZXN0X3Zhcj0nYSc7bm1fdGVzdF9mdW5jKCk7cmV0dXJuKDApO30KK19MVF9FT0YKKworICBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfY29tcGlsZVwiIjsgfSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuCisgICAgIyBOb3cgdHJ5IHRvIGdyYWIgdGhlIHN5bWJvbHMuCisgICAgbmxpc3Q9Y29uZnRlc3Qubm0KKyAgICBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkTk0gY29uZnRlc3QuJGFjX29iamV4dCBcfCAkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSBcPiAkbmxpc3RcIiI7IH0gPiY1CisgIChldmFsICROTSBjb25mdGVzdC4kYWNfb2JqZXh0IFx8ICRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIFw+ICRubGlzdCkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gJiYgdGVzdCAtcyAiJG5saXN0IjsgdGhlbgorICAgICAgIyBUcnkgc29ydGluZyBhbmQgdW5pcXVpZnlpbmcgdGhlIG91dHB1dC4KKyAgICAgIGlmIHNvcnQgIiRubGlzdCIgfCB1bmlxID4gIiRubGlzdCJUOyB0aGVuCisJbXYgLWYgIiRubGlzdCJUICIkbmxpc3QiCisgICAgICBlbHNlCisJcm0gLWYgIiRubGlzdCJUCisgICAgICBmaQorCisgICAgICAjIE1ha2Ugc3VyZSB0aGF0IHdlIHNuYWdnZWQgYWxsIHRoZSBzeW1ib2xzIHdlIG5lZWQuCisgICAgICBpZiAkR1JFUCAnIG5tX3Rlc3RfdmFyJCcgIiRubGlzdCIgPi9kZXYvbnVsbDsgdGhlbgorCWlmICRHUkVQICcgbm1fdGVzdF9mdW5jJCcgIiRubGlzdCIgPi9kZXYvbnVsbDsgdGhlbgorCSAgY2F0IDw8X0xUX0VPRiA+IGNvbmZ0ZXN0LiRhY19leHQKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworX0xUX0VPRgorCSAgIyBOb3cgZ2VuZXJhdGUgdGhlIHN5bWJvbCBmaWxlLgorCSAgZXZhbCAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsIicgPCAiJG5saXN0IiB8ICRHUkVQIC12IG1haW4gPj4gY29uZnRlc3QuJGFjX2V4dCcKKworCSAgY2F0IDw8X0xUX0VPRiA+PiBjb25mdGVzdC4kYWNfZXh0CisKKy8qIFRoZSBtYXBwaW5nIGJldHdlZW4gc3ltYm9sIG5hbWVzIGFuZCBzeW1ib2xzLiAgKi8KK2NvbnN0IHN0cnVjdCB7CisgIGNvbnN0IGNoYXIgKm5hbWU7CisgIHZvaWQgICAgICAgKmFkZHJlc3M7Cit9CitsdF9fUFJPR1JBTV9fTFRYX3ByZWxvYWRlZF9zeW1ib2xzW10gPQoreworICB7ICJAUFJPR1JBTUAiLCAodm9pZCAqKSAwIH0sCitfTFRfRU9GCisJICAkU0VEICJzL14kc3ltY29kZSRzeW1jb2RlKiBcKC4qXCkgXCguKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC8iIDwgIiRubGlzdCIgfCAkR1JFUCAtdiBtYWluID4+IGNvbmZ0ZXN0LiRhY19leHQKKwkgIGNhdCA8PFxfTFRfRU9GID4+IGNvbmZ0ZXN0LiRhY19leHQKKyAgezAsICh2b2lkICopIDB9Cit9OworCisvKiBUaGlzIHdvcmtzIGFyb3VuZCBhIHByb2JsZW0gaW4gRnJlZUJTRCBsaW5rZXIgKi8KKyNpZmRlZiBGUkVFQlNEX1dPUktBUk9VTkQKK3N0YXRpYyBjb25zdCB2b2lkICpsdF9wcmVsb2FkZWRfc2V0dXAoKSB7CisgIHJldHVybiBsdF9fUFJPR1JBTV9fTFRYX3ByZWxvYWRlZF9zeW1ib2xzOworfQorI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCitfTFRfRU9GCisJICAjIE5vdyB0cnkgbGlua2luZyB0aGUgdHdvIGZpbGVzLgorCSAgbXYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdHN0bS4kYWNfb2JqZXh0CisJICBsdF9zYXZlX0xJQlM9IiRMSUJTIgorCSAgbHRfc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCisJICBMSUJTPSJjb25mdHN0bS4kYWNfb2JqZXh0IgorCSAgQ0ZMQUdTPSIkQ0ZMQUdTJGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnIgorCSAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2xpbmtcIiI7IH0gPiY1CisgIChldmFsICRhY19saW5rKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCisJICAgIHBpcGVfd29ya3M9eWVzCisJICBmaQorCSAgTElCUz0iJGx0X3NhdmVfTElCUyIKKwkgIENGTEFHUz0iJGx0X3NhdmVfQ0ZMQUdTIgorCWVsc2UKKwkgIGVjaG8gImNhbm5vdCBmaW5kIG5tX3Rlc3RfZnVuYyBpbiAkbmxpc3QiID4mNQorCWZpCisgICAgICBlbHNlCisJZWNobyAiY2Fubm90IGZpbmQgbm1fdGVzdF92YXIgaW4gJG5saXN0IiA+JjUKKyAgICAgIGZpCisgICAgZWxzZQorICAgICAgZWNobyAiY2Fubm90IHJ1biAkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSIgPiY1CisgICAgZmkKKyAgZWxzZQorICAgIGVjaG8gIiRwcm9nbmFtZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgICAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIGZpCisgIHJtIC1yZiBjb25mdGVzdCogY29uZnRzdCoKKworICAjIERvIG5vdCB1c2UgdGhlIGdsb2JhbF9zeW1ib2xfcGlwZSB1bmxlc3MgaXQgd29ya3MuCisgIGlmIHRlc3QgIiRwaXBlX3dvcmtzIiA9IHllczsgdGhlbgorICAgIGJyZWFrCisgIGVsc2UKKyAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPQorICBmaQorZG9uZQorCitmaQorCitpZiB0ZXN0IC16ICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSI7IHRoZW4KKyAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9CitmaQoraWYgdGVzdCAteiAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBmYWlsZWQiID4mNQorJGFzX2VjaG8gImZhaWxlZCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBvayIgPiY1CiskYXNfZWNobyAib2siID4mNjsgfQorZmkKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWxpYnRvb2wtbG9jayB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9saWJ0b29sX2xvY2src2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9saWJ0b29sX2xvY2s7CitmaQorCit0ZXN0ICJ4JGVuYWJsZV9saWJ0b29sX2xvY2siICE9IHhubyAmJiBlbmFibGVfbGlidG9vbF9sb2NrPXllcworCisjIFNvbWUgZmxhZ3MgbmVlZCB0byBiZSBwcm9wYWdhdGVkIHRvIHRoZSBjb21waWxlciBvciBsaW5rZXIgZm9yIGdvb2QKKyMgbGlidG9vbCBzdXBwb3J0LgorY2FzZSAkaG9zdCBpbgoraWE2NC0qLWhwdXgqKQorICAjIEZpbmQgb3V0IHdoaWNoIEFCSSB3ZSBhcmUgdXNpbmcuCisgIGVjaG8gJ2ludCBpOycgPiBjb25mdGVzdC4kYWNfZXh0CisgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19jb21waWxlXCIiOyB9ID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KKyAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0LiRhY19vYmpleHRgIGluCisgICAgICAqRUxGLTMyKikKKwlIUFVYX0lBNjRfTU9ERT0iMzIiCisJOzsKKyAgICAgICpFTEYtNjQqKQorCUhQVVhfSUE2NF9NT0RFPSI2NCIKKwk7OworICAgIGVzYWMKKyAgZmkKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICA7OworKi0qLWlyaXg2KikKKyAgIyBGaW5kIG91dCB3aGljaCBBQkkgd2UgYXJlIHVzaW5nLgorICBlY2hvICcjbGluZSA2MTM5ICJjb25maWd1cmUiJyA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2NvbXBpbGVcIiI7IH0gPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbgorICAgIGlmIHRlc3QgIiRsdF9jdl9wcm9nX2dudV9sZCIgPSB5ZXM7IHRoZW4KKyAgICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3QuJGFjX29iamV4dGAgaW4KKwkqMzItYml0KikKKwkgIExEPSIke0xELWxkfSAtbWVsZjMyYnNtaXAiCisJICA7OworCSpOMzIqKQorCSAgTEQ9IiR7TEQtbGR9IC1tZWxmMzJibWlwbjMyIgorCSAgOzsKKwkqNjQtYml0KikKKwkgIExEPSIke0xELWxkfSAtbWVsZjY0Ym1pcCIKKwk7OworICAgICAgZXNhYworICAgIGVsc2UKKyAgICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3QuJGFjX29iamV4dGAgaW4KKwkqMzItYml0KikKKwkgIExEPSIke0xELWxkfSAtMzIiCisJICA7OworCSpOMzIqKQorCSAgTEQ9IiR7TEQtbGR9IC1uMzIiCisJICA7OworCSo2NC1iaXQqKQorCSAgTEQ9IiR7TEQtbGR9IC02NCIKKwkgIDs7CisgICAgICBlc2FjCisgICAgZmkKKyAgZmkKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICA7OworCit4ODZfNjQtKmtmcmVlYnNkKi1nbnV8eDg2XzY0LSpsaW51eCp8cHBjKi0qbGludXgqfHBvd2VycGMqLSpsaW51eCp8IFwKK3MzOTAqLSpsaW51eCp8czM5MCotKnRwZip8c3BhcmMqLSpsaW51eCopCisgICMgRmluZCBvdXQgd2hpY2ggQUJJIHdlIGFyZSB1c2luZy4KKyAgZWNobyAnaW50IGk7JyA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2NvbXBpbGVcIiI7IH0gPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbgorICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3Qub2AgaW4KKyAgICAgICozMi1iaXQqKQorCWNhc2UgJGhvc3QgaW4KKwkgIHg4Nl82NC0qa2ZyZWVic2QqLWdudSkKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZl9pMzg2X2Zic2QiCisJICAgIDs7CisJICB4ODZfNjQtKmxpbnV4KikKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZl9pMzg2IgorCSAgICA7OworCSAgcHBjNjQtKmxpbnV4Knxwb3dlcnBjNjQtKmxpbnV4KikKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjMycHBjbGludXgiCisJICAgIDs7CisJICBzMzkweC0qbGludXgqKQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX3MzOTAiCisJICAgIDs7CisJICBzcGFyYzY0LSpsaW51eCopCisJICAgIExEPSIke0xELWxkfSAtbSBlbGYzMl9zcGFyYyIKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgICo2NC1iaXQqKQorCWNhc2UgJGhvc3QgaW4KKwkgIHg4Nl82NC0qa2ZyZWVic2QqLWdudSkKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZl94ODZfNjRfZmJzZCIKKwkgICAgOzsKKwkgIHg4Nl82NC0qbGludXgqKQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX3g4Nl82NCIKKwkgICAgOzsKKwkgIHBwYyotKmxpbnV4Knxwb3dlcnBjKi0qbGludXgqKQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmNjRwcGMiCisJICAgIDs7CisJICBzMzkwKi0qbGludXgqfHMzOTAqLSp0cGYqKQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmNjRfczM5MCIKKwkgICAgOzsKKwkgIHNwYXJjKi0qbGludXgqKQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmNjRfc3BhcmMiCisJICAgIDs7CisJZXNhYworCTs7CisgICAgZXNhYworICBmaQorICBybSAtcmYgY29uZnRlc3QqCisgIDs7CisKKyotKi1zY28zLjJ2NSopCisgICMgT24gU0NPIE9wZW5TZXJ2ZXIgNSwgd2UgbmVlZCAtYmVsZiB0byBnZXQgZnVsbC1mZWF0dXJlZCBiaW5hcmllcy4KKyAgU0FWRV9DRkxBR1M9IiRDRkxBR1MiCisgIENGTEFHUz0iJENGTEFHUyAtYmVsZiIKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRoZSBDIGNvbXBpbGVyIG5lZWRzIC1iZWxmIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlIEMgY29tcGlsZXIgbmVlZHMgLWJlbGYuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7bHRfY3ZfY2NfbmVlZHNfYmVsZitzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX2V4dD1jCithY19jcHA9JyRDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKKworICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgbHRfY3ZfY2NfbmVlZHNfYmVsZj15ZXMKK2Vsc2UKKyAgbHRfY3ZfY2NfbmVlZHNfYmVsZj1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgIGFjX2V4dD1jCithY19jcHA9JyRDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfY2NfbmVlZHNfYmVsZiIgPiY1CiskYXNfZWNobyAiJGx0X2N2X2NjX25lZWRzX2JlbGYiID4mNjsgfQorICBpZiB0ZXN0IHgiJGx0X2N2X2NjX25lZWRzX2JlbGYiICE9IHgieWVzIjsgdGhlbgorICAgICMgdGhpcyBpcyBwcm9iYWJseSBnY2MgMi44LjAsIGVnY3MgMS4wIG9yIG5ld2VyOyBubyBuZWVkIGZvciAtYmVsZgorICAgIENGTEFHUz0iJFNBVkVfQ0ZMQUdTIgorICBmaQorICA7Oworc3BhcmMqLSpzb2xhcmlzKikKKyAgIyBGaW5kIG91dCB3aGljaCBBQkkgd2UgYXJlIHVzaW5nLgorICBlY2hvICdpbnQgaTsnID4gY29uZnRlc3QuJGFjX2V4dAorICBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfY29tcGlsZVwiIjsgfSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuCisgICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC5vYCBpbgorICAgICo2NC1iaXQqKQorICAgICAgY2FzZSAkbHRfY3ZfcHJvZ19nbnVfbGQgaW4KKyAgICAgIHllcyopIExEPSIke0xELWxkfSAtbSBlbGY2NF9zcGFyYyIgOzsKKyAgICAgICopCisJaWYgJHtMRC1sZH0gLTY0IC1yIC1vIGNvbmZ0ZXN0Mi5vIGNvbmZ0ZXN0Lm8gPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisJICBMRD0iJHtMRC1sZH0gLTY0IgorCWZpCisJOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisgICAgZXNhYworICBmaQorICBybSAtcmYgY29uZnRlc3QqCisgIDs7Citlc2FjCisKK25lZWRfbG9ja3M9IiRlbmFibGVfbGlidG9vbF9sb2NrIgorCisKKyAgY2FzZSAkaG9zdF9vcyBpbgorICAgIHJoYXBzb2R5KiB8IGRhcndpbiopCisgICAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9ZHN5bXV0aWwiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9ZHN5bXV0aWw7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX0RTWU1VVElMK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJERTWU1VVElMIjsgdGhlbgorICBhY19jdl9wcm9nX0RTWU1VVElMPSIkRFNZTVVUSUwiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19EU1lNVVRJTD0iJHthY190b29sX3ByZWZpeH1kc3ltdXRpbCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitEU1lNVVRJTD0kYWNfY3ZfcHJvZ19EU1lNVVRJTAoraWYgdGVzdCAtbiAiJERTWU1VVElMIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJERTWU1VVElMIiA+JjUKKyRhc19lY2hvICIkRFNZTVVUSUwiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworZmkKK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX0RTWU1VVElMIjsgdGhlbgorICBhY19jdF9EU1lNVVRJTD0kRFNZTVVUSUwKKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJkc3ltdXRpbCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgZHN5bXV0aWw7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X0RTWU1VVElMK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X0RTWU1VVElMIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X0RTWU1VVElMPSIkYWNfY3RfRFNZTVVUSUwiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19hY19jdF9EU1lNVVRJTD0iZHN5bXV0aWwiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorYWNfY3RfRFNZTVVUSUw9JGFjX2N2X3Byb2dfYWNfY3RfRFNZTVVUSUwKK2lmIHRlc3QgLW4gIiRhY19jdF9EU1lNVVRJTCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9EU1lNVVRJTCIgPiY1CiskYXNfZWNobyAiJGFjX2N0X0RTWU1VVElMIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisgIGlmIHRlc3QgIngkYWNfY3RfRFNZTVVUSUwiID0geDsgdGhlbgorICAgIERTWU1VVElMPSI6IgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIERTWU1VVElMPSRhY19jdF9EU1lNVVRJTAorICBmaQorZWxzZQorICBEU1lNVVRJTD0iJGFjX2N2X3Byb2dfRFNZTVVUSUwiCitmaQorCisgICAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9bm1lZGl0Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fW5tZWRpdDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfTk1FRElUK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJE5NRURJVCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19OTUVESVQ9IiROTUVESVQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19OTUVESVQ9IiR7YWNfdG9vbF9wcmVmaXh9bm1lZGl0IgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK05NRURJVD0kYWNfY3ZfcHJvZ19OTUVESVQKK2lmIHRlc3QgLW4gIiROTUVESVQiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkTk1FRElUIiA+JjUKKyRhc19lY2hvICIkTk1FRElUIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19OTUVESVQiOyB0aGVuCisgIGFjX2N0X05NRURJVD0kTk1FRElUCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAibm1lZGl0Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBubWVkaXQ7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X05NRURJVCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9OTUVESVQiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfTk1FRElUPSIkYWNfY3RfTk1FRElUIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfTk1FRElUPSJubWVkaXQiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorYWNfY3RfTk1FRElUPSRhY19jdl9wcm9nX2FjX2N0X05NRURJVAoraWYgdGVzdCAtbiAiJGFjX2N0X05NRURJVCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9OTUVESVQiID4mNQorJGFzX2VjaG8gIiRhY19jdF9OTUVESVQiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKyAgaWYgdGVzdCAieCRhY19jdF9OTUVESVQiID0geDsgdGhlbgorICAgIE5NRURJVD0iOiIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBOTUVESVQ9JGFjX2N0X05NRURJVAorICBmaQorZWxzZQorICBOTUVESVQ9IiRhY19jdl9wcm9nX05NRURJVCIKK2ZpCisKKyAgICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1saXBvIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWxpcG87IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX0xJUE8rc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkTElQTyI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19MSVBPPSIkTElQTyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX0xJUE89IiR7YWNfdG9vbF9wcmVmaXh9bGlwbyIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitMSVBPPSRhY19jdl9wcm9nX0xJUE8KK2lmIHRlc3QgLW4gIiRMSVBPIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJExJUE8iID4mNQorJGFzX2VjaG8gIiRMSVBPIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19MSVBPIjsgdGhlbgorICBhY19jdF9MSVBPPSRMSVBPCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAibGlwbyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgbGlwbzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfTElQTytzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9MSVBPIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X0xJUE89IiRhY19jdF9MSVBPIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfTElQTz0ibGlwbyIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCithY19jdF9MSVBPPSRhY19jdl9wcm9nX2FjX2N0X0xJUE8KK2lmIHRlc3QgLW4gIiRhY19jdF9MSVBPIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X0xJUE8iID4mNQorJGFzX2VjaG8gIiRhY19jdF9MSVBPIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisgIGlmIHRlc3QgIngkYWNfY3RfTElQTyIgPSB4OyB0aGVuCisgICAgTElQTz0iOiIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBMSVBPPSRhY19jdF9MSVBPCisgIGZpCitlbHNlCisgIExJUE89IiRhY19jdl9wcm9nX0xJUE8iCitmaQorCisgICAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9b3Rvb2wiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9b3Rvb2w7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX09UT09MK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJE9UT09MIjsgdGhlbgorICBhY19jdl9wcm9nX09UT09MPSIkT1RPT0wiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19PVE9PTD0iJHthY190b29sX3ByZWZpeH1vdG9vbCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitPVE9PTD0kYWNfY3ZfcHJvZ19PVE9PTAoraWYgdGVzdCAtbiAiJE9UT09MIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJE9UT09MIiA+JjUKKyRhc19lY2hvICIkT1RPT0wiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworZmkKK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX09UT09MIjsgdGhlbgorICBhY19jdF9PVE9PTD0kT1RPT0wKKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJvdG9vbCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgb3Rvb2w7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X09UT09MK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X09UT09MIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X09UT09MPSIkYWNfY3RfT1RPT0wiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19hY19jdF9PVE9PTD0ib3Rvb2wiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorYWNfY3RfT1RPT0w9JGFjX2N2X3Byb2dfYWNfY3RfT1RPT0wKK2lmIHRlc3QgLW4gIiRhY19jdF9PVE9PTCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9PVE9PTCIgPiY1CiskYXNfZWNobyAiJGFjX2N0X09UT09MIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisgIGlmIHRlc3QgIngkYWNfY3RfT1RPT0wiID0geDsgdGhlbgorICAgIE9UT09MPSI6IgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIE9UT09MPSRhY19jdF9PVE9PTAorICBmaQorZWxzZQorICBPVE9PTD0iJGFjX2N2X3Byb2dfT1RPT0wiCitmaQorCisgICAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9b3Rvb2w2NCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1vdG9vbDY0OyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19PVE9PTDY0K3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJE9UT09MNjQiOyB0aGVuCisgIGFjX2N2X3Byb2dfT1RPT0w2ND0iJE9UT09MNjQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19PVE9PTDY0PSIke2FjX3Rvb2xfcHJlZml4fW90b29sNjQiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorT1RPT0w2ND0kYWNfY3ZfcHJvZ19PVE9PTDY0CitpZiB0ZXN0IC1uICIkT1RPT0w2NCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRPVE9PTDY0IiA+JjUKKyRhc19lY2hvICIkT1RPT0w2NCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfT1RPT0w2NCI7IHRoZW4KKyAgYWNfY3RfT1RPT0w2ND0kT1RPT0w2NAorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIm90b29sNjQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IG90b29sNjQ7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X09UT09MNjQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfT1RPT0w2NCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9PVE9PTDY0PSIkYWNfY3RfT1RPT0w2NCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X09UT09MNjQ9Im90b29sNjQiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorYWNfY3RfT1RPT0w2ND0kYWNfY3ZfcHJvZ19hY19jdF9PVE9PTDY0CitpZiB0ZXN0IC1uICIkYWNfY3RfT1RPT0w2NCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9PVE9PTDY0IiA+JjUKKyRhc19lY2hvICIkYWNfY3RfT1RPT0w2NCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworICBpZiB0ZXN0ICJ4JGFjX2N0X09UT09MNjQiID0geDsgdGhlbgorICAgIE9UT09MNjQ9IjoiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgT1RPT0w2ND0kYWNfY3RfT1RPT0w2NAorICBmaQorZWxzZQorICBPVE9PTDY0PSIkYWNfY3ZfcHJvZ19PVE9PTDY0IgorZmkKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAtc2luZ2xlX21vZHVsZSBsaW5rZXIgZmxhZyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgLXNpbmdsZV9tb2R1bGUgbGlua2VyIGZsYWcuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7bHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGx0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2Q9bm8KKyAgICAgIGlmIHRlc3QgLXogIiR7TFRfTVVMVElfTU9EVUxFfSI7IHRoZW4KKwkjIEJ5IGRlZmF1bHQgd2Ugd2lsbCBhZGQgdGhlIC1zaW5nbGVfbW9kdWxlIGZsYWcuIFlvdSBjYW4gb3ZlcnJpZGUKKwkjIGJ5IGVpdGhlciBzZXR0aW5nIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBMVF9NVUxUSV9NT0RVTEUKKwkjIG5vbi1lbXB0eSBhdCBjb25maWd1cmUgdGltZSwgb3IgYnkgYWRkaW5nIC1tdWx0aV9tb2R1bGUgdG8gdGhlCisJIyBsaW5rIGZsYWdzLgorCXJtIC1yZiBsaWJjb25mdGVzdC5keWxpYioKKwllY2hvICJpbnQgZm9vKHZvaWQpe3JldHVybiAxO30iID4gY29uZnRlc3QuYworCWVjaG8gIiRMVENDICRMVENGTEFHUyAkTERGTEFHUyAtbyBsaWJjb25mdGVzdC5keWxpYiBcCistZHluYW1pY2xpYiAtV2wsLXNpbmdsZV9tb2R1bGUgY29uZnRlc3QuYyIgPiY1CisJJExUQ0MgJExUQ0ZMQUdTICRMREZMQUdTIC1vIGxpYmNvbmZ0ZXN0LmR5bGliIFwKKwkgIC1keW5hbWljbGliIC1XbCwtc2luZ2xlX21vZHVsZSBjb25mdGVzdC5jIDI+Y29uZnRlc3QuZXJyCisgICAgICAgIF9sdF9yZXN1bHQ9JD8KKwlpZiB0ZXN0IC1mIGxpYmNvbmZ0ZXN0LmR5bGliICYmIHRlc3QgISAtcyBjb25mdGVzdC5lcnIgJiYgdGVzdCAkX2x0X3Jlc3VsdCA9IDA7IHRoZW4KKwkgIGx0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2Q9eWVzCisJZWxzZQorCSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKwlmaQorCXJtIC1yZiBsaWJjb25mdGVzdC5keWxpYioKKwlybSAtZiBjb25mdGVzdC4qCisgICAgICBmaQorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZCIgPiY1CiskYXNfZWNobyAiJGx0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2QiID4mNjsgfQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIC1leHBvcnRlZF9zeW1ib2xzX2xpc3QgbGlua2VyIGZsYWciID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIC1leHBvcnRlZF9zeW1ib2xzX2xpc3QgbGlua2VyIGZsYWcuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7bHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0K3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0PW5vCisgICAgICBzYXZlX0xERkxBR1M9JExERkxBR1MKKyAgICAgIGVjaG8gIl9tYWluIiA+IGNvbmZ0ZXN0LnN5bQorICAgICAgTERGTEFHUz0iJExERkxBR1MgLVdsLC1leHBvcnRlZF9zeW1ib2xzX2xpc3QsY29uZnRlc3Quc3ltIgorICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGx0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdD15ZXMKK2Vsc2UKKyAgbHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0PW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKwlMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3QiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3QiID4mNjsgfQorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICByaGFwc29keSogfCBkYXJ3aW4xLlswMTJdKQorICAgICAgX2x0X2Rhcl9hbGxvd191bmRlZmluZWQ9JyR7d2x9LXVuZGVmaW5lZCAke3dsfXN1cHByZXNzJyA7OworICAgIGRhcndpbjEuKikKKyAgICAgIF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkPScke3dsfS1mbGF0X25hbWVzcGFjZSAke3dsfS11bmRlZmluZWQgJHt3bH1zdXBwcmVzcycgOzsKKyAgICBkYXJ3aW4qKSAjIGRhcndpbiA1Lnggb24KKyAgICAgICMgaWYgcnVubmluZyBvbiAxMC41IG9yIGxhdGVyLCB0aGUgZGVwbG95bWVudCB0YXJnZXQgZGVmYXVsdHMKKyAgICAgICMgdG8gdGhlIE9TIHZlcnNpb24sIGlmIG9uIHg4NiwgYW5kIDEwLjQsIHRoZSBkZXBsb3ltZW50CisgICAgICAjIHRhcmdldCBkZWZhdWx0cyB0byAxMC40LiBEb24ndCB5b3UgbG92ZSBpdD8KKyAgICAgIGNhc2UgJHtNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQtMTAuMH0sJGhvc3QgaW4KKwkxMC4wLCo4NiotZGFyd2luOCp8MTAuMCwqLWRhcndpbls5MV0qKQorCSAgX2x0X2Rhcl9hbGxvd191bmRlZmluZWQ9JyR7d2x9LXVuZGVmaW5lZCAke3dsfWR5bmFtaWNfbG9va3VwJyA7OworCTEwLlswMTJdKikKKwkgIF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkPScke3dsfS1mbGF0X25hbWVzcGFjZSAke3dsfS11bmRlZmluZWQgJHt3bH1zdXBwcmVzcycgOzsKKwkxMC4qKQorCSAgX2x0X2Rhcl9hbGxvd191bmRlZmluZWQ9JyR7d2x9LXVuZGVmaW5lZCAke3dsfWR5bmFtaWNfbG9va3VwJyA7OworICAgICAgZXNhYworICAgIDs7CisgIGVzYWMKKyAgICBpZiB0ZXN0ICIkbHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZCIgPSAieWVzIjsgdGhlbgorICAgICAgX2x0X2Rhcl9zaW5nbGVfbW9kPSckc2luZ2xlX21vZHVsZScKKyAgICBmaQorICAgIGlmIHRlc3QgIiRsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3QiID0gInllcyI7IHRoZW4KKyAgICAgIF9sdF9kYXJfZXhwb3J0X3N5bXM9JyAke3dsfS1leHBvcnRlZF9zeW1ib2xzX2xpc3QsJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bScKKyAgICBlbHNlCisgICAgICBfbHRfZGFyX2V4cG9ydF9zeW1zPSd+JE5NRURJVCAtcyAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltICR7bGlifScKKyAgICBmaQorICAgIGlmIHRlc3QgIiREU1lNVVRJTCIgIT0gIjoiOyB0aGVuCisgICAgICBfbHRfZHN5bXV0aWw9J34kRFNZTVVUSUwgJGxpYiB8fCA6JworICAgIGVsc2UKKyAgICAgIF9sdF9kc3ltdXRpbD0KKyAgICBmaQorICAgIDs7CisgIGVzYWMKKworYWNfZXh0PWMKK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gcnVuIHRoZSBDIHByZXByb2Nlc3NvciIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gcnVuIHRoZSBDIHByZXByb2Nlc3Nvci4uLiAiID4mNjsgfQorIyBPbiBTdW5zLCBzb21ldGltZXMgJENQUCBuYW1lcyBhIGRpcmVjdG9yeS4KK2lmIHRlc3QgLW4gIiRDUFAiICYmIHRlc3QgLWQgIiRDUFAiOyB0aGVuCisgIENQUD0KK2ZpCitpZiB0ZXN0IC16ICIkQ1BQIjsgdGhlbgorICBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfQ1BQK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgICAgICMgRG91YmxlIHF1b3RlcyBiZWNhdXNlIENQUCBuZWVkcyB0byBiZSBleHBhbmRlZAorICAgIGZvciBDUFAgaW4gIiRDQyAtRSIgIiRDQyAtRSAtdHJhZGl0aW9uYWwtY3BwIiAiL2xpYi9jcHAiCisgICAgZG8KKyAgICAgIGFjX3ByZXByb2Nfb2s9ZmFsc2UKK2ZvciBhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluICcnIHllcworZG8KKyAgIyBVc2UgYSBoZWFkZXIgZmlsZSB0aGF0IGNvbWVzIHdpdGggZ2NjLCBzbyBjb25maWd1cmluZyBnbGliYworICAjIHdpdGggYSBmcmVzaCBjcm9zcy1jb21waWxlciB3b3Jrcy4KKyAgIyBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCisgICMgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLgorICAjIE9uIHRoZSBOZVhULCBjYyAtRSBydW5zIHRoZSBjb2RlIHRocm91Z2ggdGhlIGNvbXBpbGVyJ3MgcGFyc2VyLAorICAjIG5vdCBqdXN0IHRocm91Z2ggY3BwLiAiU3ludGF4IGVycm9yIiBpcyBoZXJlIHRvIGNhdGNoIHRoaXMgY2FzZS4KKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2lmZGVmIF9fU1REQ19fCisjIGluY2x1ZGUgPGxpbWl0cy5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8YXNzZXJ0Lmg+CisjZW5kaWYKKwkJICAgICBTeW50YXggZXJyb3IKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY3BwICIkTElORU5PIjsgdGhlbiA6CisKK2Vsc2UKKyAgIyBCcm9rZW46IGZhaWxzIG9uIHZhbGlkIGlucHV0LgorY29udGludWUKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuaSBjb25mdGVzdC4kYWNfZXh0CisKKyAgIyBPSywgd29ya3Mgb24gc2FuZSBjYXNlcy4gIE5vdyBjaGVjayB3aGV0aGVyIG5vbmV4aXN0ZW50IGhlYWRlcnMKKyAgIyBjYW4gYmUgZGV0ZWN0ZWQgYW5kIGhvdy4KKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPGFjX25vbmV4aXN0ZW50Lmg+CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NwcCAiJExJTkVOTyI7IHRoZW4gOgorICAjIEJyb2tlbjogc3VjY2VzcyBvbiBpbnZhbGlkIGlucHV0LgorY29udGludWUKK2Vsc2UKKyAgIyBQYXNzZXMgYm90aCB0ZXN0cy4KK2FjX3ByZXByb2Nfb2s9OgorYnJlYWsKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuaSBjb25mdGVzdC4kYWNfZXh0CisKK2RvbmUKKyMgQmVjYXVzZSBvZiBgYnJlYWsnLCBfQUNfUFJFUFJPQ19JRkVMU0UncyBjbGVhbmluZyBjb2RlIHdhcyBza2lwcGVkLgorcm0gLWYgY29uZnRlc3QuaSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAoraWYgJGFjX3ByZXByb2Nfb2s7IHRoZW4gOgorICBicmVhaworZmkKKworICAgIGRvbmUKKyAgICBhY19jdl9wcm9nX0NQUD0kQ1BQCisKK2ZpCisgIENQUD0kYWNfY3ZfcHJvZ19DUFAKK2Vsc2UKKyAgYWNfY3ZfcHJvZ19DUFA9JENQUAorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkQ1BQIiA+JjUKKyRhc19lY2hvICIkQ1BQIiA+JjY7IH0KK2FjX3ByZXByb2Nfb2s9ZmFsc2UKK2ZvciBhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluICcnIHllcworZG8KKyAgIyBVc2UgYSBoZWFkZXIgZmlsZSB0aGF0IGNvbWVzIHdpdGggZ2NjLCBzbyBjb25maWd1cmluZyBnbGliYworICAjIHdpdGggYSBmcmVzaCBjcm9zcy1jb21waWxlciB3b3Jrcy4KKyAgIyBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCisgICMgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLgorICAjIE9uIHRoZSBOZVhULCBjYyAtRSBydW5zIHRoZSBjb2RlIHRocm91Z2ggdGhlIGNvbXBpbGVyJ3MgcGFyc2VyLAorICAjIG5vdCBqdXN0IHRocm91Z2ggY3BwLiAiU3ludGF4IGVycm9yIiBpcyBoZXJlIHRvIGNhdGNoIHRoaXMgY2FzZS4KKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2lmZGVmIF9fU1REQ19fCisjIGluY2x1ZGUgPGxpbWl0cy5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8YXNzZXJ0Lmg+CisjZW5kaWYKKwkJICAgICBTeW50YXggZXJyb3IKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY3BwICIkTElORU5PIjsgdGhlbiA6CisKK2Vsc2UKKyAgIyBCcm9rZW46IGZhaWxzIG9uIHZhbGlkIGlucHV0LgorY29udGludWUKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuaSBjb25mdGVzdC4kYWNfZXh0CisKKyAgIyBPSywgd29ya3Mgb24gc2FuZSBjYXNlcy4gIE5vdyBjaGVjayB3aGV0aGVyIG5vbmV4aXN0ZW50IGhlYWRlcnMKKyAgIyBjYW4gYmUgZGV0ZWN0ZWQgYW5kIGhvdy4KKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPGFjX25vbmV4aXN0ZW50Lmg+CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NwcCAiJExJTkVOTyI7IHRoZW4gOgorICAjIEJyb2tlbjogc3VjY2VzcyBvbiBpbnZhbGlkIGlucHV0LgorY29udGludWUKK2Vsc2UKKyAgIyBQYXNzZXMgYm90aCB0ZXN0cy4KK2FjX3ByZXByb2Nfb2s9OgorYnJlYWsKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuaSBjb25mdGVzdC4kYWNfZXh0CisKK2RvbmUKKyMgQmVjYXVzZSBvZiBgYnJlYWsnLCBfQUNfUFJFUFJPQ19JRkVMU0UncyBjbGVhbmluZyBjb2RlIHdhcyBza2lwcGVkLgorcm0gLWYgY29uZnRlc3QuaSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAoraWYgJGFjX3ByZXByb2Nfb2s7IHRoZW4gOgorCitlbHNlCisgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorYXNfZm5fZXJyb3IgJD8gIkMgcHJlcHJvY2Vzc29yIFwiJENQUFwiIGZhaWxzIHNhbml0eSBjaGVjaworU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDUgOyB9CitmaQorCithY19leHQ9YworYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgQU5TSSBDIGhlYWRlciBmaWxlcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgQU5TSSBDIGhlYWRlciBmaWxlcy4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9oZWFkZXJfc3RkYytzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxmbG9hdC5oPgorCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2hlYWRlcl9zdGRjPXllcworZWxzZQorICBhY19jdl9oZWFkZXJfc3RkYz1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorCitpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgorICAjIFN1bk9TIDQueCBzdHJpbmcuaCBkb2VzIG5vdCBkZWNsYXJlIG1lbSosIGNvbnRyYXJ5IHRvIEFOU0kuCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworX0FDRU9GCitpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CisgICRFR1JFUCAibWVtY2hyIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorCitlbHNlCisgIGFjX2N2X2hlYWRlcl9zdGRjPW5vCitmaQorcm0gLWYgY29uZnRlc3QqCisKK2ZpCisKK2lmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRjID0geWVzOyB0aGVuCisgICMgSVNDIDIuMC4yIHN0ZGxpYi5oIGRvZXMgbm90IGRlY2xhcmUgZnJlZSwgY29udHJhcnkgdG8gQU5TSS4KKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHN0ZGxpYi5oPgorCitfQUNFT0YKK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgJEVHUkVQICJmcmVlIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorCitlbHNlCisgIGFjX2N2X2hlYWRlcl9zdGRjPW5vCitmaQorcm0gLWYgY29uZnRlc3QqCisKK2ZpCisKK2lmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRjID0geWVzOyB0aGVuCisgICMgL2Jpbi9jYyBpbiBJcml4LTQuMC41IGdldHMgbm9uLUFOU0kgY3R5cGUgbWFjcm9zIHVubGVzcyB1c2luZyAtYW5zaS4KKyAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgorICA6CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2lmICgoJyAnICYgMHgwRkYpID09IDB4MDIwKQorIyBkZWZpbmUgSVNMT1dFUihjKSAoJ2EnIDw9IChjKSAmJiAoYykgPD0gJ3onKQorIyBkZWZpbmUgVE9VUFBFUihjKSAoSVNMT1dFUihjKSA/ICdBJyArICgoYykgLSAnYScpIDogKGMpKQorI2Vsc2UKKyMgZGVmaW5lIElTTE9XRVIoYykgXAorCQkgICAoKCdhJyA8PSAoYykgJiYgKGMpIDw9ICdpJykgXAorCQkgICAgIHx8ICgnaicgPD0gKGMpICYmIChjKSA8PSAncicpIFwKKwkJICAgICB8fCAoJ3MnIDw9IChjKSAmJiAoYykgPD0gJ3onKSkKKyMgZGVmaW5lIFRPVVBQRVIoYykgKElTTE9XRVIoYykgPyAoKGMpIHwgMHg0MCkgOiAoYykpCisjZW5kaWYKKworI2RlZmluZSBYT1IoZSwgZikgKCgoZSkgJiYgIShmKSkgfHwgKCEoZSkgJiYgKGYpKSkKK2ludAorbWFpbiAoKQoreworICBpbnQgaTsKKyAgZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKQorICAgIGlmIChYT1IgKGlzbG93ZXIgKGkpLCBJU0xPV0VSIChpKSkKKwl8fCB0b3VwcGVyIChpKSAhPSBUT1VQUEVSIChpKSkKKyAgICAgIHJldHVybiAyOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6CisKK2Vsc2UKKyAgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KK2ZpCitybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCisgIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0CitmaQorCitmaQorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfaGVhZGVyX3N0ZGMiID4mNQorJGFzX2VjaG8gIiRhY19jdl9oZWFkZXJfc3RkYyIgPiY2OyB9CitpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBTVERDX0hFQURFUlMgMSIgPj5jb25mZGVmcy5oCisKK2ZpCisKKyMgT24gSVJJWCA1LjMsIHN5cy90eXBlcyBhbmQgaW50dHlwZXMuaCBhcmUgY29uZmxpY3RpbmcuCitmb3IgYWNfaGVhZGVyIGluIHN5cy90eXBlcy5oIHN5cy9zdGF0Lmggc3RkbGliLmggc3RyaW5nLmggbWVtb3J5Lmggc3RyaW5ncy5oIFwKKwkJICBpbnR0eXBlcy5oIHN0ZGludC5oIHVuaXN0ZC5oCitkbyA6CisgIGFzX2FjX0hlYWRlcj1gJGFzX2VjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKK2FjX2ZuX2NfY2hlY2tfaGVhZGVyX2NvbXBpbGUgIiRMSU5FTk8iICIkYWNfaGVhZGVyIiAiJGFzX2FjX0hlYWRlciIgIiRhY19pbmNsdWRlc19kZWZhdWx0CisiCitpZiBldmFsIHRlc3QgXCJ4XCQiJGFzX2FjX0hlYWRlciJcIiA9IHgieWVzIjsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgYCRhc19lY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorX0FDRU9GCisKK2ZpCisKK2RvbmUKKworCitmb3IgYWNfaGVhZGVyIGluIGRsZmNuLmgKK2RvIDoKKyAgYWNfZm5fY19jaGVja19oZWFkZXJfY29tcGlsZSAiJExJTkVOTyIgImRsZmNuLmgiICJhY19jdl9oZWFkZXJfZGxmY25faCIgIiRhY19pbmNsdWRlc19kZWZhdWx0CisiCitpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9kbGZjbl9oIiA9IHgiInllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9ETEZDTl9IIDEKK19BQ0VPRgorCitmaQorCitkb25lCisKKworCisjIFNldCBvcHRpb25zCisKKworCisgICAgICAgIGVuYWJsZV9kbG9wZW49bm8KKworCisgIGVuYWJsZV93aW4zMl9kbGw9bm8KKworCisgICAgICAgICAgICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtc2hhcmVkIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX3NoYXJlZCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX3NoYXJlZDsgcD0ke1BBQ0tBR0UtZGVmYXVsdH0KKyAgICBjYXNlICRlbmFibGV2YWwgaW4KKyAgICB5ZXMpIGVuYWJsZV9zaGFyZWQ9eWVzIDs7CisgICAgbm8pIGVuYWJsZV9zaGFyZWQ9bm8gOzsKKyAgICAqKQorICAgICAgZW5hYmxlX3NoYXJlZD1ubworICAgICAgIyBMb29rIGF0IHRoZSBhcmd1bWVudCB3ZSBnb3QuICBXZSB1c2UgYWxsIHRoZSBjb21tb24gbGlzdCBzZXBhcmF0b3JzLgorICAgICAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IiR7SUZTfSRQQVRIX1NFUEFSQVRPUiwiCisgICAgICBmb3IgcGtnIGluICRlbmFibGV2YWw7IGRvCisJSUZTPSIkbHRfc2F2ZV9pZnMiCisJaWYgdGVzdCAiWCRwa2ciID0gIlgkcCI7IHRoZW4KKwkgIGVuYWJsZV9zaGFyZWQ9eWVzCisJZmkKKyAgICAgIGRvbmUKKyAgICAgIElGUz0iJGx0X3NhdmVfaWZzIgorICAgICAgOzsKKyAgICBlc2FjCitlbHNlCisgIGVuYWJsZV9zaGFyZWQ9eWVzCitmaQorCisKKworCisKKworCisKKworICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtc3RhdGljIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX3N0YXRpYytzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX3N0YXRpYzsgcD0ke1BBQ0tBR0UtZGVmYXVsdH0KKyAgICBjYXNlICRlbmFibGV2YWwgaW4KKyAgICB5ZXMpIGVuYWJsZV9zdGF0aWM9eWVzIDs7CisgICAgbm8pIGVuYWJsZV9zdGF0aWM9bm8gOzsKKyAgICAqKQorICAgICBlbmFibGVfc3RhdGljPW5vCisgICAgICAjIExvb2sgYXQgdGhlIGFyZ3VtZW50IHdlIGdvdC4gIFdlIHVzZSBhbGwgdGhlIGNvbW1vbiBsaXN0IHNlcGFyYXRvcnMuCisgICAgICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0iJHtJRlN9JFBBVEhfU0VQQVJBVE9SLCIKKyAgICAgIGZvciBwa2cgaW4gJGVuYWJsZXZhbDsgZG8KKwlJRlM9IiRsdF9zYXZlX2lmcyIKKwlpZiB0ZXN0ICJYJHBrZyIgPSAiWCRwIjsgdGhlbgorCSAgZW5hYmxlX3N0YXRpYz15ZXMKKwlmaQorICAgICAgZG9uZQorICAgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgICAgICA7OworICAgIGVzYWMKK2Vsc2UKKyAgZW5hYmxlX3N0YXRpYz15ZXMKK2ZpCisKKworCisKKworCisKKworCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtcGljIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9waWMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX3BpYzsgcGljX21vZGU9IiR3aXRodmFsIgorZWxzZQorICBwaWNfbW9kZT1kZWZhdWx0CitmaQorCisKK3Rlc3QgLXogIiRwaWNfbW9kZSIgJiYgcGljX21vZGU9ZGVmYXVsdAorCisKKworCisKKworCisgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1mYXN0LWluc3RhbGwgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfZmFzdF9pbnN0YWxsK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfZmFzdF9pbnN0YWxsOyBwPSR7UEFDS0FHRS1kZWZhdWx0fQorICAgIGNhc2UgJGVuYWJsZXZhbCBpbgorICAgIHllcykgZW5hYmxlX2Zhc3RfaW5zdGFsbD15ZXMgOzsKKyAgICBubykgZW5hYmxlX2Zhc3RfaW5zdGFsbD1ubyA7OworICAgICopCisgICAgICBlbmFibGVfZmFzdF9pbnN0YWxsPW5vCisgICAgICAjIExvb2sgYXQgdGhlIGFyZ3VtZW50IHdlIGdvdC4gIFdlIHVzZSBhbGwgdGhlIGNvbW1vbiBsaXN0IHNlcGFyYXRvcnMuCisgICAgICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0iJHtJRlN9JFBBVEhfU0VQQVJBVE9SLCIKKyAgICAgIGZvciBwa2cgaW4gJGVuYWJsZXZhbDsgZG8KKwlJRlM9IiRsdF9zYXZlX2lmcyIKKwlpZiB0ZXN0ICJYJHBrZyIgPSAiWCRwIjsgdGhlbgorCSAgZW5hYmxlX2Zhc3RfaW5zdGFsbD15ZXMKKwlmaQorICAgICAgZG9uZQorICAgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgICAgICA7OworICAgIGVzYWMKK2Vsc2UKKyAgZW5hYmxlX2Zhc3RfaW5zdGFsbD15ZXMKK2ZpCisKKworCisKKworCisKKworCisKKworIyBUaGlzIGNhbiBiZSB1c2VkIHRvIHJlYnVpbGQgbGlidG9vbCB3aGVuIG5lZWRlZAorTElCVE9PTF9ERVBTPSIkbHRtYWluIgorCisjIEFsd2F5cyB1c2Ugb3VyIG93biBsaWJ0b29sLgorTElCVE9PTD0nJChTSEVMTCkgJCh0b3BfYnVpbGRkaXIpL2xpYnRvb2wnCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKK3Rlc3QgLXogIiRMTl9TIiAmJiBMTl9TPSJsbiAtcyIKKworCisKKworCisKKworCisKKworCisKKworCitpZiB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0iIDsgdGhlbgorICAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKK2ZpCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIG9iamRpciIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3Igb2JqZGlyLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2x0X2N2X29iamRpcitzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIHJtIC1mIC5saWJzIDI+L2Rldi9udWxsCitta2RpciAubGlicyAyPi9kZXYvbnVsbAoraWYgdGVzdCAtZCAubGliczsgdGhlbgorICBsdF9jdl9vYmpkaXI9LmxpYnMKK2Vsc2UKKyAgIyBNUy1ET1MgZG9lcyBub3QgYWxsb3cgZmlsZW5hbWVzIHRoYXQgYmVnaW4gd2l0aCBhIGRvdC4KKyAgbHRfY3Zfb2JqZGlyPV9saWJzCitmaQorcm1kaXIgLmxpYnMgMj4vZGV2L251bGwKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X29iamRpciIgPiY1CiskYXNfZWNobyAiJGx0X2N2X29iamRpciIgPiY2OyB9CitvYmpkaXI9JGx0X2N2X29iamRpcgorCisKKworCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgTFRfT0JKRElSICIkbHRfY3Zfb2JqZGlyLyIKK19BQ0VPRgorCisKKworCisKKworCisKKworCisKKworCisKKworCisKK2Nhc2UgJGhvc3Rfb3MgaW4KK2FpeDMqKQorICAjIEFJWCBzb21ldGltZXMgaGFzIHByb2JsZW1zIHdpdGggdGhlIEdDQyBjb2xsZWN0MiBwcm9ncmFtLiAgRm9yIHNvbWUKKyAgIyByZWFzb24sIGlmIHdlIHNldCB0aGUgQ09MTEVDVF9OQU1FUyBlbnZpcm9ubWVudCB2YXJpYWJsZSwgdGhlIHByb2JsZW1zCisgICMgdmFuaXNoIGluIGEgcHVmZiBvZiBzbW9rZS4KKyAgaWYgdGVzdCAiWCR7Q09MTEVDVF9OQU1FUytzZXR9IiAhPSBYc2V0OyB0aGVuCisgICAgQ09MTEVDVF9OQU1FUz0KKyAgICBleHBvcnQgQ09MTEVDVF9OQU1FUworICBmaQorICA7OworZXNhYworCisjIFNlZCBzdWJzdGl0dXRpb24gdGhhdCBoZWxwcyB1cyBkbyByb2J1c3QgcXVvdGluZy4gIEl0IGJhY2tzbGFzaGlmaWVzCisjIG1ldGFjaGFyYWN0ZXJzIHRoYXQgYXJlIHN0aWxsIGFjdGl2ZSB3aXRoaW4gZG91YmxlLXF1b3RlZCBzdHJpbmdzLgorc2VkX3F1b3RlX3N1YnN0PSdzL1woWyJgJFxcXVwpL1xcXDEvZycKKworIyBTYW1lIGFzIGFib3ZlLCBidXQgZG8gbm90IHF1b3RlIHZhcmlhYmxlIHJlZmVyZW5jZXMuCitkb3VibGVfcXVvdGVfc3Vic3Q9J3MvXChbImBcXF1cKS9cXFwxL2cnCisKKyMgU2VkIHN1YnN0aXR1dGlvbiB0byBkZWxheSBleHBhbnNpb24gb2YgYW4gZXNjYXBlZCBzaGVsbCB2YXJpYWJsZSBpbiBhCisjIGRvdWJsZV9xdW90ZV9zdWJzdCdlZCBzdHJpbmcuCitkZWxheV92YXJpYWJsZV9zdWJzdD0ncy9cXFxcXFxcXFxcXCQvXFxcXFxcJC9nJworCisjIFNlZCBzdWJzdGl0dXRpb24gdG8gZGVsYXkgZXhwYW5zaW9uIG9mIGFuIGVzY2FwZWQgc2luZ2xlIHF1b3RlLgorZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0PSdzLydcJycvJ1wnXFxcXFxcXCdcJycvZycKKworIyBTZWQgc3Vic3RpdHV0aW9uIHRvIGF2b2lkIGFjY2lkZW50YWwgZ2xvYmJpbmcgaW4gZXZhbGVkIGV4cHJlc3Npb25zCitub19nbG9iX3N1YnN0PSdzL1wqL1xcXCovZycKKworIyBHbG9iYWwgdmFyaWFibGVzOgorb2ZpbGU9bGlidG9vbAorY2FuX2J1aWxkX3NoYXJlZD15ZXMKKworIyBBbGwga25vd24gbGlua2VycyByZXF1aXJlIGEgYC5hJyBhcmNoaXZlIGZvciBzdGF0aWMgbGlua2luZyAoZXhjZXB0IE1TVkMsCisjIHdoaWNoIG5lZWRzICcubGliJykuCitsaWJleHQ9YQorCit3aXRoX2dudV9sZD0iJGx0X2N2X3Byb2dfZ251X2xkIgorCitvbGRfQ0M9IiRDQyIKK29sZF9DRkxBR1M9IiRDRkxBR1MiCisKKyMgU2V0IHNhbmUgZGVmYXVsdHMgZm9yIHZhcmlvdXMgdmFyaWFibGVzCit0ZXN0IC16ICIkQ0MiICYmIENDPWNjCit0ZXN0IC16ICIkTFRDQyIgJiYgTFRDQz0kQ0MKK3Rlc3QgLXogIiRMVENGTEFHUyIgJiYgTFRDRkxBR1M9JENGTEFHUwordGVzdCAteiAiJExEIiAmJiBMRD1sZAordGVzdCAteiAiJGFjX29iamV4dCIgJiYgYWNfb2JqZXh0PW8KKworZm9yIGNjX3RlbXAgaW4gJGNvbXBpbGVyIiI7IGRvCisgIGNhc2UgJGNjX3RlbXAgaW4KKyAgICBjb21waWxlIHwgKltcXC9dY29tcGlsZSB8IGNjYWNoZSB8ICpbXFwvXWNjYWNoZSApIDs7CisgICAgZGlzdGNjIHwgKltcXC9dZGlzdGNjIHwgcHVyaWZ5IHwgKltcXC9dcHVyaWZ5ICkgOzsKKyAgICBcLSopIDs7CisgICAgKikgYnJlYWs7OworICBlc2FjCitkb25lCitjY19iYXNlbmFtZT1gJEVDSE8gIlgkY2NfdGVtcCIgfCAkWHNlZCAtZSAncyUuKi8lJScgLWUgInMlXiRob3N0X2FsaWFzLSUlImAKKworCisjIE9ubHkgcGVyZm9ybSB0aGUgY2hlY2sgZm9yIGZpbGUsIGlmIHRoZSBjaGVjayBtZXRob2QgcmVxdWlyZXMgaXQKK3Rlc3QgLXogIiRNQUdJQ19DTUQiICYmIE1BR0lDX0NNRD1maWxlCitjYXNlICRkZXBsaWJzX2NoZWNrX21ldGhvZCBpbgorZmlsZV9tYWdpYyopCisgIGlmIHRlc3QgIiRmaWxlX21hZ2ljX2NtZCIgPSAnJE1BR0lDX0NNRCc7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAke2FjX3Rvb2xfcHJlZml4fWZpbGUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICR7YWNfdG9vbF9wcmVmaXh9ZmlsZS4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHtsdF9jdl9wYXRoX01BR0lDX0NNRCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhc2UgJE1BR0lDX0NNRCBpbgorW1xcLypdIHwgID86W1xcL10qKQorICBsdF9jdl9wYXRoX01BR0lDX0NNRD0iJE1BR0lDX0NNRCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgIDs7CisqKQorICBsdF9zYXZlX01BR0lDX0NNRD0iJE1BR0lDX0NNRCIKKyAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisgIGFjX2R1bW15PSIvdXNyL2JpbiRQQVRIX1NFUEFSQVRPUiRQQVRIIgorICBmb3IgYWNfZGlyIGluICRhY19kdW1teTsgZG8KKyAgICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorICAgIGlmIHRlc3QgLWYgJGFjX2Rpci8ke2FjX3Rvb2xfcHJlZml4fWZpbGU7IHRoZW4KKyAgICAgIGx0X2N2X3BhdGhfTUFHSUNfQ01EPSIkYWNfZGlyLyR7YWNfdG9vbF9wcmVmaXh9ZmlsZSIKKyAgICAgIGlmIHRlc3QgLW4gIiRmaWxlX21hZ2ljX3Rlc3RfZmlsZSI7IHRoZW4KKwljYXNlICRkZXBsaWJzX2NoZWNrX21ldGhvZCBpbgorCSJmaWxlX21hZ2ljICIqKQorCSAgZmlsZV9tYWdpY19yZWdleD1gZXhwciAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiA6ICJmaWxlX21hZ2ljIFwoLipcKSJgCisJICBNQUdJQ19DTUQ9IiRsdF9jdl9wYXRoX01BR0lDX0NNRCIKKwkgIGlmIGV2YWwgJGZpbGVfbWFnaWNfY21kIFwkZmlsZV9tYWdpY190ZXN0X2ZpbGUgMj4gL2Rldi9udWxsIHwKKwkgICAgJEVHUkVQICIkZmlsZV9tYWdpY19yZWdleCIgPiAvZGV2L251bGw7IHRoZW4KKwkgICAgOgorCSAgZWxzZQorCSAgICBjYXQgPDxfTFRfRU9GIDE+JjIKKworKioqIFdhcm5pbmc6IHRoZSBjb21tYW5kIGxpYnRvb2wgdXNlcyB0byBkZXRlY3Qgc2hhcmVkIGxpYnJhcmllcywKKyoqKiAkZmlsZV9tYWdpY19jbWQsIHByb2R1Y2VzIG91dHB1dCB0aGF0IGxpYnRvb2wgY2Fubm90IHJlY29nbml6ZS4KKyoqKiBUaGUgcmVzdWx0IGlzIHRoYXQgbGlidG9vbCBtYXkgZmFpbCB0byByZWNvZ25pemUgc2hhcmVkIGxpYnJhcmllcworKioqIGFzIHN1Y2guICBUaGlzIHdpbGwgYWZmZWN0IHRoZSBjcmVhdGlvbiBvZiBsaWJ0b29sIGxpYnJhcmllcyB0aGF0CisqKiogZGVwZW5kIG9uIHNoYXJlZCBsaWJyYXJpZXMsIGJ1dCBwcm9ncmFtcyBsaW5rZWQgd2l0aCBzdWNoIGxpYnRvb2wKKyoqKiBsaWJyYXJpZXMgd2lsbCB3b3JrIHJlZ2FyZGxlc3Mgb2YgdGhpcyBwcm9ibGVtLiAgTmV2ZXJ0aGVsZXNzLCB5b3UKKyoqKiBtYXkgd2FudCB0byByZXBvcnQgdGhlIHByb2JsZW0gdG8geW91ciBzeXN0ZW0gbWFuYWdlciBhbmQvb3IgdG8KKyoqKiBidWctbGlidG9vbEBnbnUub3JnCisKK19MVF9FT0YKKwkgIGZpIDs7CisJZXNhYworICAgICAgZmkKKyAgICAgIGJyZWFrCisgICAgZmkKKyAgZG9uZQorICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgTUFHSUNfQ01EPSIkbHRfc2F2ZV9NQUdJQ19DTUQiCisgIDs7Citlc2FjCitmaQorCitNQUdJQ19DTUQ9IiRsdF9jdl9wYXRoX01BR0lDX0NNRCIKK2lmIHRlc3QgLW4gIiRNQUdJQ19DTUQiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkTUFHSUNfQ01EIiA+JjUKKyRhc19lY2hvICIkTUFHSUNfQ01EIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKKworCisKK2lmIHRlc3QgLXogIiRsdF9jdl9wYXRoX01BR0lDX0NNRCI7IHRoZW4KKyAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGZpbGUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGZpbGUuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7bHRfY3ZfcGF0aF9NQUdJQ19DTUQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXNlICRNQUdJQ19DTUQgaW4KK1tcXC8qXSB8ICA/OltcXC9dKikKKyAgbHRfY3ZfcGF0aF9NQUdJQ19DTUQ9IiRNQUdJQ19DTUQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICA7OworKikKKyAgbHRfc2F2ZV9NQUdJQ19DTUQ9IiRNQUdJQ19DTUQiCisgIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSRQQVRIX1NFUEFSQVRPUgorICBhY19kdW1teT0iL3Vzci9iaW4kUEFUSF9TRVBBUkFUT1IkUEFUSCIKKyAgZm9yIGFjX2RpciBpbiAkYWNfZHVtbXk7IGRvCisgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKyAgICBpZiB0ZXN0IC1mICRhY19kaXIvZmlsZTsgdGhlbgorICAgICAgbHRfY3ZfcGF0aF9NQUdJQ19DTUQ9IiRhY19kaXIvZmlsZSIKKyAgICAgIGlmIHRlc3QgLW4gIiRmaWxlX21hZ2ljX3Rlc3RfZmlsZSI7IHRoZW4KKwljYXNlICRkZXBsaWJzX2NoZWNrX21ldGhvZCBpbgorCSJmaWxlX21hZ2ljICIqKQorCSAgZmlsZV9tYWdpY19yZWdleD1gZXhwciAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiA6ICJmaWxlX21hZ2ljIFwoLipcKSJgCisJICBNQUdJQ19DTUQ9IiRsdF9jdl9wYXRoX01BR0lDX0NNRCIKKwkgIGlmIGV2YWwgJGZpbGVfbWFnaWNfY21kIFwkZmlsZV9tYWdpY190ZXN0X2ZpbGUgMj4gL2Rldi9udWxsIHwKKwkgICAgJEVHUkVQICIkZmlsZV9tYWdpY19yZWdleCIgPiAvZGV2L251bGw7IHRoZW4KKwkgICAgOgorCSAgZWxzZQorCSAgICBjYXQgPDxfTFRfRU9GIDE+JjIKKworKioqIFdhcm5pbmc6IHRoZSBjb21tYW5kIGxpYnRvb2wgdXNlcyB0byBkZXRlY3Qgc2hhcmVkIGxpYnJhcmllcywKKyoqKiAkZmlsZV9tYWdpY19jbWQsIHByb2R1Y2VzIG91dHB1dCB0aGF0IGxpYnRvb2wgY2Fubm90IHJlY29nbml6ZS4KKyoqKiBUaGUgcmVzdWx0IGlzIHRoYXQgbGlidG9vbCBtYXkgZmFpbCB0byByZWNvZ25pemUgc2hhcmVkIGxpYnJhcmllcworKioqIGFzIHN1Y2guICBUaGlzIHdpbGwgYWZmZWN0IHRoZSBjcmVhdGlvbiBvZiBsaWJ0b29sIGxpYnJhcmllcyB0aGF0CisqKiogZGVwZW5kIG9uIHNoYXJlZCBsaWJyYXJpZXMsIGJ1dCBwcm9ncmFtcyBsaW5rZWQgd2l0aCBzdWNoIGxpYnRvb2wKKyoqKiBsaWJyYXJpZXMgd2lsbCB3b3JrIHJlZ2FyZGxlc3Mgb2YgdGhpcyBwcm9ibGVtLiAgTmV2ZXJ0aGVsZXNzLCB5b3UKKyoqKiBtYXkgd2FudCB0byByZXBvcnQgdGhlIHByb2JsZW0gdG8geW91ciBzeXN0ZW0gbWFuYWdlciBhbmQvb3IgdG8KKyoqKiBidWctbGlidG9vbEBnbnUub3JnCisKK19MVF9FT0YKKwkgIGZpIDs7CisJZXNhYworICAgICAgZmkKKyAgICAgIGJyZWFrCisgICAgZmkKKyAgZG9uZQorICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgTUFHSUNfQ01EPSIkbHRfc2F2ZV9NQUdJQ19DTUQiCisgIDs7Citlc2FjCitmaQorCitNQUdJQ19DTUQ9IiRsdF9jdl9wYXRoX01BR0lDX0NNRCIKK2lmIHRlc3QgLW4gIiRNQUdJQ19DTUQiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkTUFHSUNfQ01EIiA+JjUKKyRhc19lY2hvICIkTUFHSUNfQ01EIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKKyAgZWxzZQorICAgIE1BR0lDX0NNRD06CisgIGZpCitmaQorCisgIGZpCisgIDs7Citlc2FjCisKKyMgVXNlIEMgZm9yIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gaW4gdGhlIGxpYnRvb2wgc2NyaXB0CisKK2x0X3NhdmVfQ0M9IiRDQyIKK2FjX2V4dD1jCithY19jcHA9JyRDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKKworCisjIFNvdXJjZSBmaWxlIGV4dGVuc2lvbiBmb3IgQyB0ZXN0IHNvdXJjZXMuCithY19leHQ9YworCisjIE9iamVjdCBmaWxlIGV4dGVuc2lvbiBmb3IgY29tcGlsZWQgQyB0ZXN0IHNvdXJjZXMuCitvYmpleHQ9bworb2JqZXh0PSRvYmpleHQKKworIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGNvbXBpbGUgdGVzdHMKK2x0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZT0iaW50IHNvbWVfdmFyaWFibGUgPSAwOyIKKworIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGxpbmsgdGVzdHMKK2x0X3NpbXBsZV9saW5rX3Rlc3RfY29kZT0naW50IG1haW4oKXtyZXR1cm4oMCk7fScKKworCisKKworCisKKworIyBJZiBubyBDIGNvbXBpbGVyIHdhcyBzcGVjaWZpZWQsIHVzZSBDQy4KK0xUQ0M9JHtMVENDLSIkQ0MifQorCisjIElmIG5vIEMgY29tcGlsZXIgZmxhZ3Mgd2VyZSBzcGVjaWZpZWQsIHVzZSBDRkxBR1MuCitMVENGTEFHUz0ke0xUQ0ZMQUdTLSIkQ0ZMQUdTIn0KKworIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KK2NvbXBpbGVyPSRDQworCisjIFNhdmUgdGhlIGRlZmF1bHQgY29tcGlsZXIsIHNpbmNlIGl0IGdldHMgb3ZlcndyaXR0ZW4gd2hlbiB0aGUgb3RoZXIKKyMgdGFncyBhcmUgYmVpbmcgdGVzdGVkLCBhbmQgX0xUX1RBR1ZBUihjb21waWxlciwgW10pIGlzIGEgTk9QLgorY29tcGlsZXJfREVGQVVMVD0kQ0MKKworIyBzYXZlIHdhcm5pbmdzL2JvaWxlcnBsYXRlIG9mIHNpbXBsZSB0ZXN0IGNvZGUKK2FjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dAorZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPmNvbmZ0ZXN0LiRhY19leHQKK2V2YWwgIiRhY19jb21waWxlIiAyPiYxID4vZGV2L251bGwgfCAkU0VEICcvXiQvZDsgL14gKisvZCcgPmNvbmZ0ZXN0LmVycgorX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlPWBjYXQgY29uZnRlc3QuZXJyYAorJFJNIGNvbmZ0ZXN0KgorCithY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKK2VjaG8gIiRsdF9zaW1wbGVfbGlua190ZXN0X2NvZGUiID5jb25mdGVzdC4kYWNfZXh0CitldmFsICIkYWNfbGluayIgMj4mMSA+L2Rldi9udWxsIHwgJFNFRCAnL14kL2Q7IC9eICorL2QnID5jb25mdGVzdC5lcnIKK19sdF9saW5rZXJfYm9pbGVycGxhdGU9YGNhdCBjb25mdGVzdC5lcnJgCiskUk0gLXIgY29uZnRlc3QqCisKKworIyMgQ0FWRUFUIEVNUFRPUjoKKyMjIFRoZXJlIGlzIG5vIGVuY2Fwc3VsYXRpb24gd2l0aGluIHRoZSBmb2xsb3dpbmcgbWFjcm9zLCBkbyBub3QgY2hhbmdlCisjIyB0aGUgcnVubmluZyBvcmRlciBvciBvdGhlcndpc2UgbW92ZSB0aGVtIGFyb3VuZCB1bmxlc3MgeW91IGtub3cgZXhhY3RseQorIyMgd2hhdCB5b3UgYXJlIGRvaW5nLi4uCitpZiB0ZXN0IC1uICIkY29tcGlsZXIiOyB0aGVuCisKK2x0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnPQorCitpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICBsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZz0nIC1mbm8tYnVpbHRpbicKKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmICRjb21waWxlciBzdXBwb3J0cyAtZm5vLXJ0dGkgLWZuby1leGNlcHRpb25zIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmICRjb21waWxlciBzdXBwb3J0cyAtZm5vLXJ0dGkgLWZuby1leGNlcHRpb25zLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2x0X2N2X3Byb2dfY29tcGlsZXJfcnR0aV9leGNlcHRpb25zK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbHRfY3ZfcHJvZ19jb21waWxlcl9ydHRpX2V4Y2VwdGlvbnM9bm8KKyAgIGFjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dAorICAgZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CisgICBsdF9jb21waWxlcl9mbGFnPSItZm5vLXJ0dGkgLWZuby1leGNlcHRpb25zIgorICAgIyBJbnNlcnQgdGhlIG9wdGlvbiBlaXRoZXIgKDEpIGFmdGVyIHRoZSBsYXN0ICpGTEFHUyB2YXJpYWJsZSwgb3IKKyAgICMgKDIpIGJlZm9yZSBhIHdvcmQgY29udGFpbmluZyAiY29uZnRlc3QuIiwgb3IgKDMpIGF0IHRoZSBlbmQuCisgICAjIE5vdGUgdGhhdCAkYWNfY29tcGlsZSBpdHNlbGYgZG9lcyBub3QgY29udGFpbiBiYWNrc2xhc2hlcyBhbmQgYmVnaW5zCisgICAjIHdpdGggYSBkb2xsYXIgc2lnbiAobm90IGEgaHlwaGVuKSwgc28gdGhlIGVjaG8gc2hvdWxkIHdvcmsgY29ycmVjdGx5LgorICAgIyBUaGUgb3B0aW9uIGlzIHJlZmVyZW5jZWQgdmlhIGEgdmFyaWFibGUgdG8gYXZvaWQgY29uZnVzaW5nIHNlZC4KKyAgIGx0X2NvbXBpbGU9YGVjaG8gIiRhY19jb21waWxlIiB8ICRTRUQgXAorICAgLWUgJ3M6LipGTEFHU31cezAsMVx9IDomJGx0X2NvbXBpbGVyX2ZsYWcgOjsgdCcgXAorICAgLWUgJ3M6IFteIF0qY29uZnRlc3RcLjogJGx0X2NvbXBpbGVyX2ZsYWcmOjsgdCcgXAorICAgLWUgJ3M6JDogJGx0X2NvbXBpbGVyX2ZsYWc6J2AKKyAgIChldmFsIGVjaG8gIlwiXCRhc19tZTo3NjY4OiAkbHRfY29tcGlsZVwiIiA+JjUpCisgICAoZXZhbCAiJGx0X2NvbXBpbGUiIDI+Y29uZnRlc3QuZXJyKQorICAgYWNfc3RhdHVzPSQ/CisgICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOjc2NzI6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgaWYgKGV4aXQgJGFjX3N0YXR1cykgJiYgdGVzdCAtcyAiJGFjX291dGZpbGUiOyB0aGVuCisgICAgICMgVGhlIGNvbXBpbGVyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCisgICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncyBvdGhlciB0aGFuIHRoZSB1c3VhbCBvdXRwdXQuCisgICAgICRFQ0hPICJYJF9sdF9jb21waWxlcl9ib2lsZXJwbGF0ZSIgfCAkWHNlZCAtZSAnL14kL2QnID5jb25mdGVzdC5leHAKKyAgICAgJFNFRCAnL14kL2Q7IC9eICorL2QnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIyCisgICAgIGlmIHRlc3QgISAtcyBjb25mdGVzdC5lcjIgfHwgZGlmZiBjb25mdGVzdC5leHAgY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KKyAgICAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX3J0dGlfZXhjZXB0aW9ucz15ZXMKKyAgICAgZmkKKyAgIGZpCisgICAkUk0gY29uZnRlc3QqCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfcnR0aV9leGNlcHRpb25zIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfcHJvZ19jb21waWxlcl9ydHRpX2V4Y2VwdGlvbnMiID4mNjsgfQorCitpZiB0ZXN0IHgiJGx0X2N2X3Byb2dfY29tcGlsZXJfcnR0aV9leGNlcHRpb25zIiA9IHh5ZXM7IHRoZW4KKyAgICBsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZz0iJGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnIC1mbm8tcnR0aSAtZm5vLWV4Y2VwdGlvbnMiCitlbHNlCisgICAgOgorZmkKKworZmkKKworCisKKworCisKKyAgbHRfcHJvZ19jb21waWxlcl93bD0KK2x0X3Byb2dfY29tcGlsZXJfcGljPQorbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9CisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMuLi4gIiA+JjY7IH0KKworICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgIGx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCisgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1zdGF0aWMnCisKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgICBhaXgqKQorICAgICAgIyBBbGwgQUlYIGNvZGUgaXMgUElDLgorICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKwkjIEFJWCA1IG5vdyBzdXBwb3J0cyBJQTY0IHByb2Nlc3NvcgorCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKKyAgICAgIGZpCisgICAgICA7OworCisgICAgYW1pZ2FvcyopCisgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgcG93ZXJwYykKKyAgICAgICAgICAgICMgc2VlIGNvbW1lbnQgYWJvdXQgQW1pZ2FPUzQgLnNvIHN1cHBvcnQKKyAgICAgICAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctZlBJQycKKyAgICAgICAgOzsKKyAgICAgIG02OGspCisgICAgICAgICAgICAjIEZJWE1FOiB3ZSBuZWVkIGF0IGxlYXN0IDY4MDIwIGNvZGUgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcywgYnV0CisgICAgICAgICAgICAjIGFkZGluZyB0aGUgYC1tNjgwMjAnIGZsYWcgdG8gR0NDIHByZXZlbnRzIGJ1aWxkaW5nIGFueXRoaW5nIGJldHRlciwKKyAgICAgICAgICAgICMgbGlrZSBgLW02ODA0MCcuCisgICAgICAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLW02ODAyMCAtcmVzaWRlbnQzMiAtbWFsd2F5cy1yZXN0b3JlLWE0JworICAgICAgICA7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgIGJlb3MqIHwgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KiB8IG9zZjMqIHwgb3NmNCogfCBvc2Y1KikKKyAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IGZvciB0aGVzZSBPU2VzLgorICAgICAgOzsKKworICAgIG1pbmd3KiB8IGN5Z3dpbiogfCBwdzMyKiB8IG9zMiogfCBjZWdjYyopCisgICAgICAjIFRoaXMgaGFjayBpcyBzbyB0aGF0IHRoZSBzb3VyY2UgZmlsZSBjYW4gdGVsbCB3aGV0aGVyIGl0IGlzIGJlaW5nCisgICAgICAjIGJ1aWx0IGZvciBpbmNsdXNpb24gaW4gYSBkbGwgKGFuZCBzaG91bGQgZXhwb3J0IHN5bWJvbHMgZm9yIGV4YW1wbGUpLgorICAgICAgIyBBbHRob3VnaCB0aGUgY3lnd2luIGdjYyBpZ25vcmVzIC1mUElDLCBzdGlsbCBuZWVkIHRoaXMgZm9yIG9sZC1zdHlsZQorICAgICAgIyAoLS1kaXNhYmxlLWF1dG8taW1wb3J0KSBsaWJyYXJpZXMKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctRERMTF9FWFBPUlQnCisgICAgICA7OworCisgICAgZGFyd2luKiB8IHJoYXBzb2R5KikKKyAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IG9uIHRoaXMgcGxhdGZvcm0KKyAgICAgICMgQ29tbW9uIHN5bWJvbHMgbm90IGFsbG93ZWQgaW4gTUhfRFlMSUIgZmlsZXMKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctZm5vLWNvbW1vbicKKyAgICAgIDs7CisKKyAgICBocHV4KikKKyAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IGZvciA2NC1iaXQgUEEgSFAtVVgsIGJ1dCBub3QgZm9yIDMyLWJpdAorICAgICAgIyBQQSBIUC1VWC4gIE9uIElBNjQgSFAtVVgsIFBJQyBpcyB0aGUgZGVmYXVsdCBidXQgdGhlIHBpYyBmbGFnCisgICAgICAjIHNldHMgdGhlIGRlZmF1bHQgVExTIG1vZGVsIGFuZCBhZmZlY3RzIGlubGluaW5nLgorICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgICAgIGhwcGEqNjQqKQorCSMgK1ogdGhlIGRlZmF1bHQKKwk7OworICAgICAgKikKKwlsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLWZQSUMnCisJOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICBpbnRlcml4WzMtOV0qKQorICAgICAgIyBJbnRlcml4IDMueCBnY2MgLWZwaWMvLWZQSUMgb3B0aW9ucyBnZW5lcmF0ZSBicm9rZW4gY29kZS4KKyAgICAgICMgSW5zdGVhZCwgd2UgcmVsb2NhdGUgc2hhcmVkIGxpYnJhcmllcyBhdCBydW50aW1lLgorICAgICAgOzsKKworICAgIG1zZG9zZGpncHAqKQorICAgICAgIyBKdXN0IGJlY2F1c2Ugd2UgdXNlIEdDQyBkb2Vzbid0IG1lYW4gd2Ugc3VkZGVubHkgZ2V0IHNoYXJlZCBsaWJyYXJpZXMKKyAgICAgICMgb24gc3lzdGVtcyB0aGF0IGRvbid0IHN1cHBvcnQgdGhlbS4KKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfY2FuX2J1aWxkX3NoYXJlZD1ubworICAgICAgZW5hYmxlX3NoYXJlZD1ubworICAgICAgOzsKKworICAgICpudG8qIHwgKnFueCopCisgICAgICAjIFFOWCB1c2VzIEdOVSBDKyssIGJ1dCBuZWVkIHRvIGRlZmluZSAtc2hhcmVkIG9wdGlvbiB0b28sIG90aGVyd2lzZQorICAgICAgIyBpdCB3aWxsIGNvcmVkdW1wLgorICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1mUElDIC1zaGFyZWQnCisgICAgICA7OworCisgICAgc3lzdjQqTVAqKQorICAgICAgaWYgdGVzdCAtZCAvdXNyL25lYzsgdGhlbgorCWx0X3Byb2dfY29tcGlsZXJfcGljPS1LY29uZm9ybV9waWMKKyAgICAgIGZpCisgICAgICA7OworCisgICAgKikKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctZlBJQycKKyAgICAgIDs7CisgICAgZXNhYworICBlbHNlCisgICAgIyBQT1JUTUUgQ2hlY2sgZm9yIGZsYWcgdG8gcGFzcyBsaW5rZXIgZmxhZ3MgdGhyb3VnaCB0aGUgc3lzdGVtIGNvbXBpbGVyLgorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBhaXgqKQorICAgICAgbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKKyAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisJIyBBSVggNSBub3cgc3VwcG9ydHMgSUE2NCBwcm9jZXNzb3IKKwlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCisgICAgICBlbHNlCisJbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1ibnNvIC1iSTovbGliL3N5c2NhbGxzLmV4cCcKKyAgICAgIGZpCisgICAgICA7OworCisgICAgbWluZ3cqIHwgY3lnd2luKiB8IHB3MzIqIHwgb3MyKiB8IGNlZ2NjKikKKyAgICAgICMgVGhpcyBoYWNrIGlzIHNvIHRoYXQgdGhlIHNvdXJjZSBmaWxlIGNhbiB0ZWxsIHdoZXRoZXIgaXQgaXMgYmVpbmcKKyAgICAgICMgYnVpbHQgZm9yIGluY2x1c2lvbiBpbiBhIGRsbCAoYW5kIHNob3VsZCBleHBvcnQgc3ltYm9scyBmb3IgZXhhbXBsZSkuCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLURETExfRVhQT1JUJworICAgICAgOzsKKworICAgIGhwdXg5KiB8IGhwdXgxMCogfCBocHV4MTEqKQorICAgICAgbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKKyAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IGZvciBJQTY0IEhQLVVYIGFuZCA2NC1iaXQgSFAtVVgsIGJ1dAorICAgICAgIyBub3QgZm9yIFBBIEhQLVVYLgorICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgICAgIGhwcGEqNjQqfGlhNjQqKQorCSMgK1ogdGhlIGRlZmF1bHQKKwk7OworICAgICAgKikKKwlsdF9wcm9nX2NvbXBpbGVyX3BpYz0nK1onCisJOzsKKyAgICAgIGVzYWMKKyAgICAgICMgSXMgdGhlcmUgYSBiZXR0ZXIgbHRfcHJvZ19jb21waWxlcl9zdGF0aWMgdGhhdCB3b3JrcyB3aXRoIHRoZSBidW5kbGVkIENDPworICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9JyR7d2x9LWEgJHt3bH1hcmNoaXZlJworICAgICAgOzsKKworICAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJworICAgICAgIyBQSUMgKHdpdGggLUtQSUMpIGlzIHRoZSBkZWZhdWx0LgorICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1ub25fc2hhcmVkJworICAgICAgOzsKKworICAgIGxpbnV4KiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSkKKyAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAjIG9sZCBJbnRlbCBmb3IgeDg2XzY0IHdoaWNoIHN0aWxsIHN1cHBvcnRlZCAtS1BJQy4KKyAgICAgIGVjYyopCisJbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKKwlsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLUtQSUMnCisJbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1zdGF0aWMnCisgICAgICAgIDs7CisgICAgICAjIGljYyB1c2VkIHRvIGJlIGluY29tcGF0aWJsZSB3aXRoIEdDQy4KKyAgICAgICMgSUNDIDEwIGRvZXNuJ3QgYWNjZXB0IC1LUElDIGFueSBtb3JlLgorICAgICAgaWNjKiB8IGlmb3J0KikKKwlsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJworCWx0X3Byb2dfY29tcGlsZXJfcGljPSctZlBJQycKKwlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLXN0YXRpYycKKyAgICAgICAgOzsKKyAgICAgICMgTGFoZXkgRm9ydHJhbiA4LjEuCisgICAgICBsZjk1KikKKwlsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJworCWx0X3Byb2dfY29tcGlsZXJfcGljPSctLXNoYXJlZCcKKwlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLS1zdGF0aWMnCisJOzsKKyAgICAgIHBnY2MqIHwgcGdmNzcqIHwgcGdmOTAqIHwgcGdmOTUqKQorICAgICAgICAjIFBvcnRsYW5kIEdyb3VwIGNvbXBpbGVycyAoKm5vdCogdGhlIFBlbnRpdW0gZ2NjIGNvbXBpbGVyLAorCSMgd2hpY2ggbG9va3MgdG8gYmUgYSBkZWFkIHByb2plY3QpCisJbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKKwlsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLWZwaWMnCisJbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJworICAgICAgICA7OworICAgICAgY2NjKikKKyAgICAgICAgbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKKyAgICAgICAgIyBBbGwgQWxwaGEgY29kZSBpcyBQSUMuCisgICAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctbm9uX3NoYXJlZCcKKyAgICAgICAgOzsKKyAgICAgIHhsKikKKwkjIElCTSBYTCBDIDguMC9Gb3J0cmFuIDEwLjEgb24gUFBDCisJbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKKwlsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLXFwaWMnCisJbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1xc3RhdGljbGluaycKKwk7OworICAgICAgKikKKwljYXNlIGAkQ0MgLVYgMj4mMSB8IHNlZCA1cWAgaW4KKwkqU3VuXCBDKikKKwkgICMgU3VuIEMgNS45CisJICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLUtQSUMnCisJICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCisJICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJworCSAgOzsKKwkqU3VuXCBGKikKKwkgICMgU3VuIEZvcnRyYW4gOC4zIHBhc3NlcyBhbGwgdW5yZWNvZ25pemVkIGZsYWdzIHRvIHRoZSBsaW5rZXIKKwkgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctS1BJQycKKwkgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKKwkgIGx0X3Byb2dfY29tcGlsZXJfd2w9JycKKwkgIDs7CisJZXNhYworCTs7CisgICAgICBlc2FjCisgICAgICA7OworCisgICAgbmV3c29zNikKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctS1BJQycKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKKyAgICAgIDs7CisKKyAgICAqbnRvKiB8ICpxbngqKQorICAgICAgIyBRTlggdXNlcyBHTlUgQysrLCBidXQgbmVlZCB0byBkZWZpbmUgLXNoYXJlZCBvcHRpb24gdG9vLCBvdGhlcndpc2UKKyAgICAgICMgaXQgd2lsbCBjb3JlZHVtcC4KKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctZlBJQyAtc2hhcmVkJworICAgICAgOzsKKworICAgIG9zZjMqIHwgb3NmNCogfCBvc2Y1KikKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCisgICAgICAjIEFsbCBPU0YvMSBjb2RlIGlzIFBJQy4KKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctbm9uX3NoYXJlZCcKKyAgICAgIDs7CisKKyAgICByZG9zKikKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctbm9uX3NoYXJlZCcKKyAgICAgIDs7CisKKyAgICBzb2xhcmlzKikKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctS1BJQycKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKKyAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICBmNzcqIHwgZjkwKiB8IGY5NSopCisJbHRfcHJvZ19jb21waWxlcl93bD0nLVFvcHRpb24gbGQgJzs7CisgICAgICAqKQorCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICBzdW5vczQqKQorICAgICAgbHRfcHJvZ19jb21waWxlcl93bD0nLVFvcHRpb24gbGQgJworICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1QSUMnCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCisgICAgICA7OworCisgICAgc3lzdjQgfCBzeXN2NC4ydXcyKiB8IHN5c3Y0LjMqKQorICAgICAgbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctS1BJQycKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKKyAgICAgIDs7CisKKyAgICBzeXN2NCpNUCopCisgICAgICBpZiB0ZXN0IC1kIC91c3IvbmVjIDt0aGVuCisJbHRfcHJvZ19jb21waWxlcl9waWM9Jy1LY29uZm9ybV9waWMnCisJbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBzeXN2NSogfCB1bml4d2FyZSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgT3BlblVOSVgqKQorICAgICAgbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctS1BJQycKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKKyAgICAgIDs7CisKKyAgICB1bmljb3MqKQorICAgICAgbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfY2FuX2J1aWxkX3NoYXJlZD1ubworICAgICAgOzsKKworICAgIHV0czQqKQorICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1waWMnCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCisgICAgICA7OworCisgICAgKikKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfY2FuX2J1aWxkX3NoYXJlZD1ubworICAgICAgOzsKKyAgICBlc2FjCisgIGZpCisKK2Nhc2UgJGhvc3Rfb3MgaW4KKyAgIyBGb3IgcGxhdGZvcm1zIHdoaWNoIGRvIG5vdCBzdXBwb3J0IFBJQywgLURQSUMgaXMgbWVhbmluZ2xlc3M6CisgICpkamdwcCopCisgICAgbHRfcHJvZ19jb21waWxlcl9waWM9CisgICAgOzsKKyAgKikKKyAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0iJGx0X3Byb2dfY29tcGlsZXJfcGljIC1EUElDIgorICAgIDs7Citlc2FjCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X3Byb2dfY29tcGlsZXJfcGljIiA+JjUKKyRhc19lY2hvICIkbHRfcHJvZ19jb21waWxlcl9waWMiID4mNjsgfQorCisKKworCisKKworIworIyBDaGVjayB0byBtYWtlIHN1cmUgdGhlIFBJQyBmbGFnIGFjdHVhbGx5IHdvcmtzLgorIworaWYgdGVzdCAtbiAiJGx0X3Byb2dfY29tcGlsZXJfcGljIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmICRjb21waWxlciBQSUMgZmxhZyAkbHRfcHJvZ19jb21waWxlcl9waWMgd29ya3MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgJGNvbXBpbGVyIFBJQyBmbGFnICRsdF9wcm9nX2NvbXBpbGVyX3BpYyB3b3Jrcy4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHtsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY193b3JrcytzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzPW5vCisgICBhY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKKyAgIGVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAorICAgbHRfY29tcGlsZXJfZmxhZz0iJGx0X3Byb2dfY29tcGlsZXJfcGljIC1EUElDIgorICAgIyBJbnNlcnQgdGhlIG9wdGlvbiBlaXRoZXIgKDEpIGFmdGVyIHRoZSBsYXN0ICpGTEFHUyB2YXJpYWJsZSwgb3IKKyAgICMgKDIpIGJlZm9yZSBhIHdvcmQgY29udGFpbmluZyAiY29uZnRlc3QuIiwgb3IgKDMpIGF0IHRoZSBlbmQuCisgICAjIE5vdGUgdGhhdCAkYWNfY29tcGlsZSBpdHNlbGYgZG9lcyBub3QgY29udGFpbiBiYWNrc2xhc2hlcyBhbmQgYmVnaW5zCisgICAjIHdpdGggYSBkb2xsYXIgc2lnbiAobm90IGEgaHlwaGVuKSwgc28gdGhlIGVjaG8gc2hvdWxkIHdvcmsgY29ycmVjdGx5LgorICAgIyBUaGUgb3B0aW9uIGlzIHJlZmVyZW5jZWQgdmlhIGEgdmFyaWFibGUgdG8gYXZvaWQgY29uZnVzaW5nIHNlZC4KKyAgIGx0X2NvbXBpbGU9YGVjaG8gIiRhY19jb21waWxlIiB8ICRTRUQgXAorICAgLWUgJ3M6LipGTEFHU31cezAsMVx9IDomJGx0X2NvbXBpbGVyX2ZsYWcgOjsgdCcgXAorICAgLWUgJ3M6IFteIF0qY29uZnRlc3RcLjogJGx0X2NvbXBpbGVyX2ZsYWcmOjsgdCcgXAorICAgLWUgJ3M6JDogJGx0X2NvbXBpbGVyX2ZsYWc6J2AKKyAgIChldmFsIGVjaG8gIlwiXCRhc19tZTo4MDA3OiAkbHRfY29tcGlsZVwiIiA+JjUpCisgICAoZXZhbCAiJGx0X2NvbXBpbGUiIDI+Y29uZnRlc3QuZXJyKQorICAgYWNfc3RhdHVzPSQ/CisgICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOjgwMTE6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgaWYgKGV4aXQgJGFjX3N0YXR1cykgJiYgdGVzdCAtcyAiJGFjX291dGZpbGUiOyB0aGVuCisgICAgICMgVGhlIGNvbXBpbGVyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCisgICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncyBvdGhlciB0aGFuIHRoZSB1c3VhbCBvdXRwdXQuCisgICAgICRFQ0hPICJYJF9sdF9jb21waWxlcl9ib2lsZXJwbGF0ZSIgfCAkWHNlZCAtZSAnL14kL2QnID5jb25mdGVzdC5leHAKKyAgICAgJFNFRCAnL14kL2Q7IC9eICorL2QnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIyCisgICAgIGlmIHRlc3QgISAtcyBjb25mdGVzdC5lcjIgfHwgZGlmZiBjb25mdGVzdC5leHAgY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KKyAgICAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY193b3Jrcz15ZXMKKyAgICAgZmkKKyAgIGZpCisgICAkUk0gY29uZnRlc3QqCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfcHJvZ19jb21waWxlcl9waWNfd29ya3MiID4mNjsgfQorCitpZiB0ZXN0IHgiJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzIiA9IHh5ZXM7IHRoZW4KKyAgICBjYXNlICRsdF9wcm9nX2NvbXBpbGVyX3BpYyBpbgorICAgICAiIiB8ICIgIiopIDs7CisgICAgICopIGx0X3Byb2dfY29tcGlsZXJfcGljPSIgJGx0X3Byb2dfY29tcGlsZXJfcGljIiA7OworICAgICBlc2FjCitlbHNlCisgICAgbHRfcHJvZ19jb21waWxlcl9waWM9CisgICAgIGx0X3Byb2dfY29tcGlsZXJfY2FuX2J1aWxkX3NoYXJlZD1ubworZmkKKworZmkKKworCisKKworCisKKyMKKyMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBzdGF0aWMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KKyMKK3dsPSRsdF9wcm9nX2NvbXBpbGVyX3dsIGV2YWwgbHRfdG1wX3N0YXRpY19mbGFnPVwiJGx0X3Byb2dfY29tcGlsZXJfc3RhdGljXCIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN0YXRpYyBmbGFnICRsdF90bXBfc3RhdGljX2ZsYWcgd29ya3MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN0YXRpYyBmbGFnICRsdF90bXBfc3RhdGljX2ZsYWcgd29ya3MuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7bHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3Mrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBsdF9jdl9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrcz1ubworICAgc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKKyAgIExERkxBR1M9IiRMREZMQUdTICRsdF90bXBfc3RhdGljX2ZsYWciCisgICBlY2hvICIkbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgIGlmIChldmFsICRhY19saW5rIDI+Y29uZnRlc3QuZXJyKSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgorICAgICAjIFRoZSBsaW5rZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKKyAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzCisgICAgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgICAgIyBBcHBlbmQgYW55IGVycm9ycyB0byB0aGUgY29uZmlnLmxvZy4KKyAgICAgICBjYXQgY29uZnRlc3QuZXJyIDE+JjUKKyAgICAgICAkRUNITyAiWCRfbHRfbGlua2VyX2JvaWxlcnBsYXRlIiB8ICRYc2VkIC1lICcvXiQvZCcgPiBjb25mdGVzdC5leHAKKyAgICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjIKKyAgICAgICBpZiBkaWZmIGNvbmZ0ZXN0LmV4cCBjb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3M9eWVzCisgICAgICAgZmkKKyAgICAgZWxzZQorICAgICAgIGx0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzPXllcworICAgICBmaQorICAgZmkKKyAgICRSTSAtciBjb25mdGVzdCoKKyAgIExERkxBR1M9IiRzYXZlX0xERkxBR1MiCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3MiID4mNjsgfQorCitpZiB0ZXN0IHgiJGx0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzIiA9IHh5ZXM7IHRoZW4KKyAgICA6CitlbHNlCisgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9CitmaQorCisKKworCisKKworCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1jIC1vIGZpbGUuJGFjX29iamV4dCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWMgLW8gZmlsZS4kYWNfb2JqZXh0Li4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2x0X2N2X3Byb2dfY29tcGlsZXJfY19vK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbHRfY3ZfcHJvZ19jb21waWxlcl9jX289bm8KKyAgICRSTSAtciBjb25mdGVzdCAyPi9kZXYvbnVsbAorICAgbWtkaXIgY29uZnRlc3QKKyAgIGNkIGNvbmZ0ZXN0CisgICBta2RpciBvdXQKKyAgIGVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAorCisgICBsdF9jb21waWxlcl9mbGFnPSItbyBvdXQvY29uZnRlc3QyLiRhY19vYmpleHQiCisgICAjIEluc2VydCB0aGUgb3B0aW9uIGVpdGhlciAoMSkgYWZ0ZXIgdGhlIGxhc3QgKkZMQUdTIHZhcmlhYmxlLCBvcgorICAgIyAoMikgYmVmb3JlIGEgd29yZCBjb250YWluaW5nICJjb25mdGVzdC4iLCBvciAoMykgYXQgdGhlIGVuZC4KKyAgICMgTm90ZSB0aGF0ICRhY19jb21waWxlIGl0c2VsZiBkb2VzIG5vdCBjb250YWluIGJhY2tzbGFzaGVzIGFuZCBiZWdpbnMKKyAgICMgd2l0aCBhIGRvbGxhciBzaWduIChub3QgYSBoeXBoZW4pLCBzbyB0aGUgZWNobyBzaG91bGQgd29yayBjb3JyZWN0bHkuCisgICBsdF9jb21waWxlPWBlY2hvICIkYWNfY29tcGlsZSIgfCAkU0VEIFwKKyAgIC1lICdzOi4qRkxBR1N9XHswLDFcfSA6JiRsdF9jb21waWxlcl9mbGFnIDo7IHQnIFwKKyAgIC1lICdzOiBbXiBdKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKKyAgIC1lICdzOiQ6ICRsdF9jb21waWxlcl9mbGFnOidgCisgICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6ODExMjogJGx0X2NvbXBpbGVcIiIgPiY1KQorICAgKGV2YWwgIiRsdF9jb21waWxlIiAyPm91dC9jb25mdGVzdC5lcnIpCisgICBhY19zdGF0dXM9JD8KKyAgIGNhdCBvdXQvY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOjgxMTY6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgaWYgKGV4aXQgJGFjX3N0YXR1cykgJiYgdGVzdCAtcyBvdXQvY29uZnRlc3QyLiRhY19vYmpleHQKKyAgIHRoZW4KKyAgICAgIyBUaGUgY29tcGlsZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKKyAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzCisgICAgICRFQ0hPICJYJF9sdF9jb21waWxlcl9ib2lsZXJwbGF0ZSIgfCAkWHNlZCAtZSAnL14kL2QnID4gb3V0L2NvbmZ0ZXN0LmV4cAorICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgb3V0L2NvbmZ0ZXN0LmVyciA+b3V0L2NvbmZ0ZXN0LmVyMgorICAgICBpZiB0ZXN0ICEgLXMgb3V0L2NvbmZ0ZXN0LmVyMiB8fCBkaWZmIG91dC9jb25mdGVzdC5leHAgb3V0L2NvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCisgICAgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9jX289eWVzCisgICAgIGZpCisgICBmaQorICAgY2htb2QgdSt3IC4gMj4mNQorICAgJFJNIGNvbmZ0ZXN0KgorICAgIyBTR0kgQysrIGNvbXBpbGVyIHdpbGwgY3JlYXRlIGRpcmVjdG9yeSBvdXQvaWlfZmlsZXMvIGZvcgorICAgIyB0ZW1wbGF0ZSBpbnN0YW50aWF0aW9uCisgICB0ZXN0IC1kIG91dC9paV9maWxlcyAmJiAkUk0gb3V0L2lpX2ZpbGVzLyogJiYgcm1kaXIgb3V0L2lpX2ZpbGVzCisgICAkUk0gb3V0LyogJiYgcm1kaXIgb3V0CisgICBjZCAuLgorICAgJFJNIC1yIGNvbmZ0ZXN0CisgICAkUk0gY29uZnRlc3QqCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfcHJvZ19jb21waWxlcl9jX28iID4mNjsgfQorCisKKworCisKKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmICRjb21waWxlciBzdXBwb3J0cyAtYyAtbyBmaWxlLiRhY19vYmpleHQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1jIC1vIGZpbGUuJGFjX29iamV4dC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHtsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbytzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGx0X2N2X3Byb2dfY29tcGlsZXJfY19vPW5vCisgICAkUk0gLXIgY29uZnRlc3QgMj4vZGV2L251bGwKKyAgIG1rZGlyIGNvbmZ0ZXN0CisgICBjZCBjb25mdGVzdAorICAgbWtkaXIgb3V0CisgICBlY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKKworICAgbHRfY29tcGlsZXJfZmxhZz0iLW8gb3V0L2NvbmZ0ZXN0Mi4kYWNfb2JqZXh0IgorICAgIyBJbnNlcnQgdGhlIG9wdGlvbiBlaXRoZXIgKDEpIGFmdGVyIHRoZSBsYXN0ICpGTEFHUyB2YXJpYWJsZSwgb3IKKyAgICMgKDIpIGJlZm9yZSBhIHdvcmQgY29udGFpbmluZyAiY29uZnRlc3QuIiwgb3IgKDMpIGF0IHRoZSBlbmQuCisgICAjIE5vdGUgdGhhdCAkYWNfY29tcGlsZSBpdHNlbGYgZG9lcyBub3QgY29udGFpbiBiYWNrc2xhc2hlcyBhbmQgYmVnaW5zCisgICAjIHdpdGggYSBkb2xsYXIgc2lnbiAobm90IGEgaHlwaGVuKSwgc28gdGhlIGVjaG8gc2hvdWxkIHdvcmsgY29ycmVjdGx5LgorICAgbHRfY29tcGlsZT1gZWNobyAiJGFjX2NvbXBpbGUiIHwgJFNFRCBcCisgICAtZSAnczouKkZMQUdTfVx7MCwxXH0gOiYkbHRfY29tcGlsZXJfZmxhZyA6OyB0JyBcCisgICAtZSAnczogW14gXSpjb25mdGVzdFwuOiAkbHRfY29tcGlsZXJfZmxhZyY6OyB0JyBcCisgICAtZSAnczokOiAkbHRfY29tcGlsZXJfZmxhZzonYAorICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOjgxNjc6ICRsdF9jb21waWxlXCIiID4mNSkKKyAgIChldmFsICIkbHRfY29tcGlsZSIgMj5vdXQvY29uZnRlc3QuZXJyKQorICAgYWNfc3RhdHVzPSQ/CisgICBjYXQgb3V0L2NvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTo4MTcxOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIGlmIChleGl0ICRhY19zdGF0dXMpICYmIHRlc3QgLXMgb3V0L2NvbmZ0ZXN0Mi4kYWNfb2JqZXh0CisgICB0aGVuCisgICAgICMgVGhlIGNvbXBpbGVyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCisgICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncworICAgICAkRUNITyAiWCRfbHRfY29tcGlsZXJfYm9pbGVycGxhdGUiIHwgJFhzZWQgLWUgJy9eJC9kJyA+IG91dC9jb25mdGVzdC5leHAKKyAgICAgJFNFRCAnL14kL2Q7IC9eICorL2QnIG91dC9jb25mdGVzdC5lcnIgPm91dC9jb25mdGVzdC5lcjIKKyAgICAgaWYgdGVzdCAhIC1zIG91dC9jb25mdGVzdC5lcjIgfHwgZGlmZiBvdXQvY29uZnRlc3QuZXhwIG91dC9jb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgIGx0X2N2X3Byb2dfY29tcGlsZXJfY19vPXllcworICAgICBmaQorICAgZmkKKyAgIGNobW9kIHUrdyAuIDI+JjUKKyAgICRSTSBjb25mdGVzdCoKKyAgICMgU0dJIEMrKyBjb21waWxlciB3aWxsIGNyZWF0ZSBkaXJlY3Rvcnkgb3V0L2lpX2ZpbGVzLyBmb3IKKyAgICMgdGVtcGxhdGUgaW5zdGFudGlhdGlvbgorICAgdGVzdCAtZCBvdXQvaWlfZmlsZXMgJiYgJFJNIG91dC9paV9maWxlcy8qICYmIHJtZGlyIG91dC9paV9maWxlcworICAgJFJNIG91dC8qICYmIHJtZGlyIG91dAorICAgY2QgLi4KKyAgICRSTSAtciBjb25mdGVzdAorICAgJFJNIGNvbmZ0ZXN0KgorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbyIgPiY1CiskYXNfZWNobyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vIiA+JjY7IH0KKworCisKKworaGFyZF9saW5rcz0ibm90dGVzdGVkIgoraWYgdGVzdCAiJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vIiA9IG5vICYmIHRlc3QgIiRuZWVkX2xvY2tzIiAhPSBubzsgdGhlbgorICAjIGRvIG5vdCBvdmVyd3JpdGUgdGhlIHZhbHVlIG9mIG5lZWRfbG9ja3MgcHJvdmlkZWQgYnkgdGhlIHVzZXIKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiB3ZSBjYW4gbG9jayB3aXRoIGhhcmQgbGlua3MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgd2UgY2FuIGxvY2sgd2l0aCBoYXJkIGxpbmtzLi4uICIgPiY2OyB9CisgIGhhcmRfbGlua3M9eWVzCisgICRSTSBjb25mdGVzdCoKKyAgbG4gY29uZnRlc3QuYSBjb25mdGVzdC5iIDI+L2Rldi9udWxsICYmIGhhcmRfbGlua3M9bm8KKyAgdG91Y2ggY29uZnRlc3QuYQorICBsbiBjb25mdGVzdC5hIGNvbmZ0ZXN0LmIgMj4mNSB8fCBoYXJkX2xpbmtzPW5vCisgIGxuIGNvbmZ0ZXN0LmEgY29uZnRlc3QuYiAyPi9kZXYvbnVsbCAmJiBoYXJkX2xpbmtzPW5vCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkaGFyZF9saW5rcyIgPiY1CiskYXNfZWNobyAiJGhhcmRfbGlua3MiID4mNjsgfQorICBpZiB0ZXN0ICIkaGFyZF9saW5rcyIgPSBubzsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogXGAkQ0MnIGRvZXMgbm90IHN1cHBvcnQgXGAtYyAtbycsIHNvIFxgbWFrZSAtaicgbWF5IGJlIHVuc2FmZSIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBcYCRDQycgZG9lcyBub3Qgc3VwcG9ydCBcYC1jIC1vJywgc28gXGBtYWtlIC1qJyBtYXkgYmUgdW5zYWZlIiA+JjI7fQorICAgIG5lZWRfbG9ja3M9d2FybgorICBmaQorZWxzZQorICBuZWVkX2xvY2tzPW5vCitmaQorCisKKworCisKKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdGhlICRjb21waWxlciBsaW5rZXIgKCRMRCkgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSAkY29tcGlsZXIgbGlua2VyICgkTEQpIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMuLi4gIiA+JjY7IH0KKworICBydW5wYXRoX3Zhcj0KKyAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9CisgIGFsd2F5c19leHBvcnRfc3ltYm9scz1ubworICBhcmNoaXZlX2NtZHM9CisgIGFyY2hpdmVfZXhwc3ltX2NtZHM9CisgIGNvbXBpbGVyX25lZWRzX29iamVjdD1ubworICBlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzPW5vCisgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0KKyAgZXhwb3J0X3N5bWJvbHNfY21kcz0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEICdcJydzLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworICBoYXJkY29kZV9hdXRvbWF0aWM9bm8KKyAgaGFyZGNvZGVfZGlyZWN0PW5vCisgIGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZT1ubworICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPQorICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkPQorICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPQorICBoYXJkY29kZV9taW51c19MPW5vCisgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9dW5zdXBwb3J0ZWQKKyAgaW5oZXJpdF9ycGF0aD1ubworICBsaW5rX2FsbF9kZXBsaWJzPXVua25vd24KKyAgbW9kdWxlX2NtZHM9CisgIG1vZHVsZV9leHBzeW1fY21kcz0KKyAgb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcz0KKyAgb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHM9CisgIHRocmVhZF9zYWZlX2ZsYWdfc3BlYz0KKyAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9CisgICMgaW5jbHVkZV9leHBzeW1zIHNob3VsZCBiZSBhIGxpc3Qgb2Ygc3BhY2Utc2VwYXJhdGVkIHN5bWJvbHMgdG8gYmUgKmFsd2F5cyoKKyAgIyBpbmNsdWRlZCBpbiB0aGUgc3ltYm9sIGxpc3QKKyAgaW5jbHVkZV9leHBzeW1zPQorICAjIGV4Y2x1ZGVfZXhwc3ltcyBjYW4gYmUgYW4gZXh0ZW5kZWQgcmVnZXhwIG9mIHN5bWJvbHMgdG8gZXhjbHVkZQorICAjIGl0IHdpbGwgYmUgd3JhcHBlZCBieSBgICgnIGFuZCBgKSQnLCBzbyBvbmUgbXVzdCBub3QgbWF0Y2ggYmVnaW5uaW5nIG9yCisgICMgZW5kIG9mIGxpbmUuICBFeGFtcGxlOiBgYXxiY3wuKmQuKicgd2lsbCBleGNsdWRlIHRoZSBzeW1ib2xzIGBhJyBhbmQgYGJjJywKKyAgIyBhcyB3ZWxsIGFzIGFueSBzeW1ib2wgdGhhdCBjb250YWlucyBgZCcuCisgIGV4Y2x1ZGVfZXhwc3ltcz0nX0dMT0JBTF9PRkZTRVRfVEFCTEVffF9HTE9CQUxfX0ZbSURdXy4qJworICAjIEFsdGhvdWdoIF9HTE9CQUxfT0ZGU0VUX1RBQkxFXyBpcyBhIHZhbGlkIHN5bWJvbCBDIG5hbWUsIG1vc3QgYS5vdXQKKyAgIyBwbGF0Zm9ybXMgKGFiKXVzZSBpdCBpbiBQSUMgY29kZSwgYnV0IHRoZWlyIGxpbmtlcnMgZ2V0IGNvbmZ1c2VkIGlmCisgICMgdGhlIHN5bWJvbCBpcyBleHBsaWNpdGx5IHJlZmVyZW5jZWQuICBTaW5jZSBwb3J0YWJsZSBjb2RlIGNhbm5vdAorICAjIHJlbHkgb24gdGhpcyBzeW1ib2wgbmFtZSwgaXQncyBwcm9iYWJseSBmaW5lIHRvIG5ldmVyIGluY2x1ZGUgaXQgaW4KKyAgIyBwcmVsb2FkZWQgc3ltYm9sIHRhYmxlcy4KKyAgIyBFeGNsdWRlIHNoYXJlZCBsaWJyYXJ5IGluaXRpYWxpemF0aW9uL2ZpbmFsaXphdGlvbiBzeW1ib2xzLgorICBleHRyYWN0X2V4cHN5bXNfY21kcz0KKworICBjYXNlICRob3N0X29zIGluCisgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgICAjIEZJWE1FOiB0aGUgTVNWQysrIHBvcnQgaGFzbid0IGJlZW4gdGVzdGVkIGluIGEgbG9vb29uZyB0aW1lCisgICAgIyBXaGVuIG5vdCB1c2luZyBnY2MsIHdlIGN1cnJlbnRseSBhc3N1bWUgdGhhdCB3ZSBhcmUgdXNpbmcKKyAgICAjIE1pY3Jvc29mdCBWaXN1YWwgQysrLgorICAgIGlmIHRlc3QgIiRHQ0MiICE9IHllczsgdGhlbgorICAgICAgd2l0aF9nbnVfbGQ9bm8KKyAgICBmaQorICAgIDs7CisgIGludGVyaXgqKQorICAgICMgd2UganVzdCBob3BlL2Fzc3VtZSB0aGlzIGlzIGdjYyBhbmQgbm90IGM4OSAoPSBNU1ZDKyspCisgICAgd2l0aF9nbnVfbGQ9eWVzCisgICAgOzsKKyAgb3BlbmJzZCopCisgICAgd2l0aF9nbnVfbGQ9bm8KKyAgICA7OworICBsaW51eCogfCBrKmJzZCotZ251KQorICAgIGxpbmtfYWxsX2RlcGxpYnM9bm8KKyAgICA7OworICBlc2FjCisKKyAgbGRfc2hsaWJzPXllcworICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCisgICAgIyBJZiBhcmNoaXZlX2NtZHMgcnVucyBMRCwgbm90IENDLCB3bGFyYyBzaG91bGQgYmUgZW1wdHkKKyAgICB3bGFyYz0nJHt3bH0nCisKKyAgICAjIFNldCBzb21lIGRlZmF1bHRzIGZvciBHTlUgbGQgd2l0aCBzaGFyZWQgbGlicmFyeSBzdXBwb3J0LiBUaGVzZQorICAgICMgYXJlIHJlc2V0IGxhdGVyIGlmIHNoYXJlZCBsaWJyYXJpZXMgYXJlIG5vdCBzdXBwb3J0ZWQuIFB1dHRpbmcgdGhlbQorICAgICMgaGVyZSBhbGxvd3MgdGhlbSB0byBiZSBvdmVycmlkZGVuIGlmIG5lY2Vzc2FyeS4KKyAgICBydW5wYXRoX3Zhcj1MRF9SVU5fUEFUSAorICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JyR7d2x9LS1leHBvcnQtZHluYW1pYycKKyAgICAjIGFuY2llbnQgR05VIGxkIGRpZG4ndCBzdXBwb3J0IC0td2hvbGUtYXJjaGl2ZSBldC4gYWwuCisgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJ25vLXdob2xlLWFyY2hpdmUnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0iJHdsYXJjIictLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgJyIkd2xhcmMiJy0tbm8td2hvbGUtYXJjaGl2ZScKKyAgICBlbHNlCisgICAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0KKyAgICBmaQorICAgIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz1ubworICAgIGNhc2UgYCRMRCAtdiAyPiYxYCBpbgorICAgICAgKkdOVVwgZ29sZCopIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz15ZXMgOzsKKyAgICAgICpcIFswMV0uKiB8ICpcIDIuWzAtOV0uKiB8ICpcIDIuMTAuKikgOzsgIyBjYXRjaCB2ZXJzaW9ucyA8IDIuMTEKKyAgICAgICpcIDIuMTEuOTMuMC4yXCAqKSBzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmc9eWVzIDs7ICMgUkg3LjMgLi4uCisgICAgICAqXCAyLjExLjkyLjAuMTJcICopIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz15ZXMgOzsgIyBNYW5kcmFrZSA4LjIgLi4uCisgICAgICAqXCAyLjExLiopIDs7ICMgb3RoZXIgMi4xMSB2ZXJzaW9ucworICAgICAgKikgc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nPXllcyA7OworICAgIGVzYWMKKworICAgICMgU2VlIGlmIEdOVSBsZCBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzLgorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBhaXhbMy05XSopCisgICAgICAjIE9uIEFJWC9QUEMsIHRoZSBHTlUgbGlua2VyIGlzIHZlcnkgYnJva2VuCisgICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiICE9IGlhNjQ7IHRoZW4KKwlsZF9zaGxpYnM9bm8KKwljYXQgPDxfTFRfRU9GIDE+JjIKKworKioqIFdhcm5pbmc6IHRoZSBHTlUgbGlua2VyLCBhdCBsZWFzdCB1cCB0byByZWxlYXNlIDIuOS4xLCBpcyByZXBvcnRlZAorKioqIHRvIGJlIHVuYWJsZSB0byByZWxpYWJseSBjcmVhdGUgc2hhcmVkIGxpYnJhcmllcyBvbiBBSVguCisqKiogVGhlcmVmb3JlLCBsaWJ0b29sIGlzIGRpc2FibGluZyBzaGFyZWQgbGlicmFyaWVzIHN1cHBvcnQuICBJZiB5b3UKKyoqKiByZWFsbHkgY2FyZSBmb3Igc2hhcmVkIGxpYnJhcmllcywgeW91IG1heSB3YW50IHRvIG1vZGlmeSB5b3VyIFBBVEgKKyoqKiBzbyB0aGF0IGEgbm9uLUdOVSBsaW5rZXIgaXMgZm91bmQsIGFuZCB0aGVuIHJlc3RhcnQuCisKK19MVF9FT0YKKyAgICAgIGZpCisgICAgICA7OworCisgICAgYW1pZ2FvcyopCisgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgcG93ZXJwYykKKyAgICAgICAgICAgICMgc2VlIGNvbW1lbnQgYWJvdXQgQW1pZ2FPUzQgLnNvIHN1cHBvcnQKKyAgICAgICAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisgICAgICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPScnCisgICAgICAgIDs7CisgICAgICBtNjhrKQorICAgICAgICAgICAgYXJjaGl2ZV9jbWRzPSckUk0gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBOQU1FICRsaWJuYW1lIiA+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgTElCUkFSWV9JRCAxIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIFZFUlNJT04gJG1ham9yIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIFJFVklTSU9OICRyZXZpc2lvbiIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kQVIgJEFSX0ZMQUdTICRsaWIgJGxpYm9ianN+JFJBTkxJQiAkbGlifihjZCAkb3V0cHV0X29iamRpciAmJiBhMml4bGlicmFyeSAtMzIpJworICAgICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworICAgICAgICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKyAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICBiZW9zKikKKyAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKwlhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAorCSMgSm9zZXBoIEJlY2tlbmJhY2ggPGpyYjNAYmVzdC5jb20+IHNheXMgc29tZSByZWxlYXNlcyBvZiBnY2MKKwkjIHN1cHBvcnQgLS11bmRlZmluZWQuICBUaGlzIGRlc2VydmVzIHNvbWUgaW52ZXN0aWdhdGlvbi4gIEZJWE1FCisJYXJjaGl2ZV9jbWRzPSckQ0MgLW5vc3RhcnQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisgICAgICBlbHNlCisJbGRfc2hsaWJzPW5vCisgICAgICBmaQorICAgICAgOzsKKworICAgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgICAgICMgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCApIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLAorICAgICAgIyBhcyB0aGVyZSBpcyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKyAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCisgICAgICBhbHdheXNfZXhwb3J0X3N5bWJvbHM9bm8KKyAgICAgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCisgICAgICBleHBvcnRfc3ltYm9sc19jbWRzPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW0JDREdSU11bIF0vcy8uKlsgXVwoW14gXSpcKS9cMSBEQVRBLydcJycgfCAkU0VEIC1lICdcJycvXltBSVRXXVsgXS9zLy4qWyBdLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisKKyAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICdhdXRvLWltcG9ydCcgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKKwkjIElmIHRoZSBleHBvcnQtc3ltYm9scyBmaWxlIGFscmVhZHkgaXMgYSAuZGVmIGZpbGUgKDFzdCBsaW5lCisJIyBpcyBFWFBPUlRTKSwgdXNlIGl0IGFzIGlzOyBvdGhlcndpc2UsIHByZXBlbmQuLi4KKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSdpZiB0ZXN0ICJ4YCRTRUQgMXEgJGV4cG9ydF9zeW1ib2xzYCIgPSB4RVhQT1JUUzsgdGhlbgorCSAgY3AgJGV4cG9ydF9zeW1ib2xzICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOworCWVsc2UKKwkgIGVjaG8gRVhQT1JUUyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOworCSAgY2F0ICRleHBvcnRfc3ltYm9scyA+PiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKKwlmaX4KKwkkQ0MgLXNoYXJlZCAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKKyAgICAgIGVsc2UKKwlsZF9zaGxpYnM9bm8KKyAgICAgIGZpCisgICAgICA7OworCisgICAgaW50ZXJpeFszLTldKikKKyAgICAgIGhhcmRjb2RlX2RpcmVjdD1ubworICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubworICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGgsJGxpYmRpcicKKyAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nJHt3bH0tRScKKyAgICAgICMgSGFjazogT24gSW50ZXJpeCAzLngsIHdlIGNhbm5vdCBjb21waWxlIFBJQyBiZWNhdXNlIG9mIGEgYnJva2VuIGdjYy4KKyAgICAgICMgSW5zdGVhZCwgc2hhcmVkIGxpYnJhcmllcyBhcmUgbG9hZGVkIGF0IGFuIGltYWdlIGJhc2UgKDB4MTAwMDAwMDAgYnkKKyAgICAgICMgZGVmYXVsdCkgYW5kIHJlbG9jYXRlZCBpZiB0aGV5IGNvbmZsaWN0LCB3aGljaCBpcyBhIHNsb3cgdmVyeSBtZW1vcnkKKyAgICAgICMgY29uc3VtaW5nIGFuZCBmcmFnbWVudGluZyBwcm9jZXNzLiAgVG8gYXZvaWQgdGhpcywgd2UgcGljayBhIHJhbmRvbSwKKyAgICAgICMgMjU2IEtpQi1hbGlnbmVkIGltYWdlIGJhc2UgYmV0d2VlbiAweDUwMDAwMDAwIGFuZCAweDZGRkMwMDAwIGF0IGxpbmsKKyAgICAgICMgdGltZS4gIE1vdmluZyB1cCBmcm9tIDB4MTAwMDAwMDAgYWxzbyBhbGxvd3MgbW9yZSBzYnJrKDIpIHNwYWNlLgorICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWgsJHNvbmFtZSAke3dsfS0taW1hZ2UtYmFzZSxgZXhwciAke1JBTkRPTS0kJH0gJSA0MDk2IC8gMiBcKiAyNjIxNDQgKyAxMzQyMTc3MjgwYCAtbyAkbGliJworICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nc2VkICJzLF4sXywiICRleHBvcnRfc3ltYm9scyA+JG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW1+JENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1oLCRzb25hbWUgJHt3bH0tLXJldGFpbi1zeW1ib2xzLWZpbGUsJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW0gJHt3bH0tLWltYWdlLWJhc2UsYGV4cHIgJHtSQU5ET00tJCR9ICUgNDA5NiAvIDIgXCogMjYyMTQ0ICsgMTM0MjE3NzI4MGAgLW8gJGxpYicKKyAgICAgIDs7CisKKyAgICBnbnUqIHwgbGludXgqIHwgdHBmKiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSkKKyAgICAgIHRtcF9kaWV0PW5vCisgICAgICBpZiB0ZXN0ICIkaG9zdF9vcyIgPSBsaW51eC1kaWV0bGliYzsgdGhlbgorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBkaWV0XCAqKSB0bXBfZGlldD15ZXM7OwkjIGxpbnV4LWRpZXRsaWJjIHdpdGggc3RhdGljIGxpbmtpbmcgKCFkaWV0LWR5bikKKwllc2FjCisgICAgICBmaQorICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEVHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGwgXAorCSAmJiB0ZXN0ICIkdG1wX2RpZXQiID0gbm8KKyAgICAgIHRoZW4KKwl0bXBfYWRkZmxhZz0KKwl0bXBfc2hhcmVkZmxhZz0nLXNoYXJlZCcKKwljYXNlICRjY19iYXNlbmFtZSwkaG9zdF9jcHUgaW4KKyAgICAgICAgcGdjYyopCQkJCSMgUG9ydGxhbmQgR3JvdXAgQyBjb21waWxlcgorCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9JyR7d2x9LS13aG9sZS1hcmNoaXZlYGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgIC1uIFwiJGNvbnZcIiAmJiBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7ICRFQ0hPIFwiJG5ld19jb252ZW5pZW5jZVwiYCAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKKwkgIHRtcF9hZGRmbGFnPScgJHBpY19mbGFnJworCSAgOzsKKwlwZ2Y3NyogfCBwZ2Y5MCogfCBwZ2Y5NSopCSMgUG9ydGxhbmQgR3JvdXAgZjc3IGFuZCBmOTAgY29tcGlsZXJzCisJICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nJHt3bH0tLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgJEVDSE8gXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJworCSAgdG1wX2FkZGZsYWc9JyAkcGljX2ZsYWcgLU1ub21haW4nIDs7CisJZWNjKixpYTY0KiB8IGljYyosaWE2NCopCSMgSW50ZWwgQyBjb21waWxlciBvbiBpYTY0CisJICB0bXBfYWRkZmxhZz0nIC1pX2R5bmFtaWMnIDs7CisJZWZjKixpYTY0KiB8IGlmb3J0KixpYTY0KikJIyBJbnRlbCBGb3J0cmFuIGNvbXBpbGVyIG9uIGlhNjQKKwkgIHRtcF9hZGRmbGFnPScgLWlfZHluYW1pYyAtbm9mb3JfbWFpbicgOzsKKwlpZmMqIHwgaWZvcnQqKQkJCSMgSW50ZWwgRm9ydHJhbiBjb21waWxlcgorCSAgdG1wX2FkZGZsYWc9JyAtbm9mb3JfbWFpbicgOzsKKwlsZjk1KikJCQkJIyBMYWhleSBGb3J0cmFuIDguMQorCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9CisJICB0bXBfc2hhcmVkZmxhZz0nLS1zaGFyZWQnIDs7CisJeGxbY0NdKikJCQkjIElCTSBYTCBDIDguMCBvbiBQUEMgKGRlYWwgd2l0aCB4bGYgYmVsb3cpCisJICB0bXBfc2hhcmVkZmxhZz0nLXFta3Nocm9iaicKKwkgIHRtcF9hZGRmbGFnPSA7OworCWVzYWMKKwljYXNlIGAkQ0MgLVYgMj4mMSB8IHNlZCA1cWAgaW4KKwkqU3VuXCBDKikJCQkjIFN1biBDIDUuOQorCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9JyR7d2x9LS13aG9sZS1hcmNoaXZlYG5ld19jb252ZW5pZW5jZT07IGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgLXogXCIkY29udlwiIHx8IG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgJEVDSE8gXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJworCSAgY29tcGlsZXJfbmVlZHNfb2JqZWN0PXllcworCSAgdG1wX3NoYXJlZGZsYWc9Jy1HJyA7OworCSpTdW5cIEYqKQkJCSMgU3VuIEZvcnRyYW4gOC4zCisJICB0bXBfc2hhcmVkZmxhZz0nLUcnIDs7CisJZXNhYworCWFyY2hpdmVfY21kcz0nJENDICciJHRtcF9zaGFyZWRmbGFnIiIkdG1wX2FkZGZsYWciJyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKworICAgICAgICBpZiB0ZXN0ICJ4JHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZyIgPSB4eWVzOyB0aGVuCisgICAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nZWNobyAieyBnbG9iYWw6IiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKwkgICAgY2F0ICRleHBvcnRfc3ltYm9scyB8IHNlZCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorCSAgICBlY2hvICJsb2NhbDogKjsgfTsiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKwkgICAgJENDICciJHRtcF9zaGFyZWRmbGFnIiIkdG1wX2FkZGZsYWciJyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tdmVyc2lvbi1zY3JpcHQgJHt3bH0kb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXIgLW8gJGxpYicKKyAgICAgICAgZmkKKworCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJeGxmKikKKwkgICMgSUJNIFhMIEZvcnRyYW4gMTAuMSBvbiBQUEMgY2Fubm90IGNyZWF0ZSBzaGFyZWQgbGlicyBpdHNlbGYKKwkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSctLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgLS1uby13aG9sZS1hcmNoaXZlJworCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0KKwkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQ9Jy1ycGF0aCAkbGliZGlyJworCSAgYXJjaGl2ZV9jbWRzPSckTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIC1vICRsaWInCisJICBpZiB0ZXN0ICJ4JHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZyIgPSB4eWVzOyB0aGVuCisJICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9J2VjaG8gInsgZ2xvYmFsOiIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisJICAgICAgY2F0ICRleHBvcnRfc3ltYm9scyB8IHNlZCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorCSAgICAgIGVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorCSAgICAgICRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLXZlcnNpb24tc2NyaXB0ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlciAtbyAkbGliJworCSAgZmkKKwkgIDs7CisJZXNhYworICAgICAgZWxzZQorICAgICAgICBsZF9zaGxpYnM9bm8KKyAgICAgIGZpCisgICAgICA7OworCisgICAgbmV0YnNkKiB8IG5ldGJzZGVsZiotZ251KQorICAgICAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fID4vZGV2L251bGw7IHRoZW4KKwlhcmNoaXZlX2NtZHM9JyRMRCAtQnNoYXJlYWJsZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1vICRsaWInCisJd2xhcmM9CisgICAgICBlbHNlCisJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgIGZpCisgICAgICA7OworCisgICAgc29sYXJpcyopCisgICAgICBpZiAkTEQgLXYgMj4mMSB8ICRHUkVQICdCRkQgMlwuOCcgPiAvZGV2L251bGw7IHRoZW4KKwlsZF9zaGxpYnM9bm8KKwljYXQgPDxfTFRfRU9GIDE+JjIKKworKioqIFdhcm5pbmc6IFRoZSByZWxlYXNlcyAyLjguKiBvZiB0aGUgR05VIGxpbmtlciBjYW5ub3QgcmVsaWFibHkKKyoqKiBjcmVhdGUgc2hhcmVkIGxpYnJhcmllcyBvbiBTb2xhcmlzIHN5c3RlbXMuICBUaGVyZWZvcmUsIGxpYnRvb2wKKyoqKiBpcyBkaXNhYmxpbmcgc2hhcmVkIGxpYnJhcmllcyBzdXBwb3J0LiAgV2UgdXJnZSB5b3UgdG8gdXBncmFkZSBHTlUKKyoqKiBiaW51dGlscyB0byByZWxlYXNlIDIuOS4xIG9yIG5ld2VyLiAgQW5vdGhlciBvcHRpb24gaXMgdG8gbW9kaWZ5CisqKiogeW91ciBQQVRIIG9yIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gc28gdGhhdCB0aGUgbmF0aXZlIGxpbmtlciBpcworKioqIHVzZWQsIGFuZCB0aGVuIHJlc3RhcnQuCisKK19MVF9FT0YKKyAgICAgIGVsaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgICAgICBlbHNlCisJbGRfc2hsaWJzPW5vCisgICAgICBmaQorICAgICAgOzsKKworICAgIHN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCopCisgICAgICBjYXNlIGAkTEQgLXYgMj4mMWAgaW4KKyAgICAgICAgKlwgWzAxXS4qIHwgKlwgMi5bMC05XS4qIHwgKlwgMi4xWzAtNV0uKikKKwlsZF9zaGxpYnM9bm8KKwljYXQgPDxfTFRfRU9GIDE+JjIKKworKioqIFdhcm5pbmc6IFJlbGVhc2VzIG9mIHRoZSBHTlUgbGlua2VyIHByaW9yIHRvIDIuMTYuOTEuMC4zIGNhbiBub3QKKyoqKiByZWxpYWJseSBjcmVhdGUgc2hhcmVkIGxpYnJhcmllcyBvbiBTQ08gc3lzdGVtcy4gIFRoZXJlZm9yZSwgbGlidG9vbAorKioqIGlzIGRpc2FibGluZyBzaGFyZWQgbGlicmFyaWVzIHN1cHBvcnQuICBXZSB1cmdlIHlvdSB0byB1cGdyYWRlIEdOVQorKioqIGJpbnV0aWxzIHRvIHJlbGVhc2UgMi4xNi45MS4wLjMgb3IgbmV3ZXIuICBBbm90aGVyIG9wdGlvbiBpcyB0byBtb2RpZnkKKyoqKiB5b3VyIFBBVEggb3IgY29tcGlsZXIgY29uZmlndXJhdGlvbiBzbyB0aGF0IHRoZSBuYXRpdmUgbGlua2VyIGlzCisqKiogdXNlZCwgYW5kIHRoZW4gcmVzdGFydC4KKworX0xUX0VPRgorCTs7CisJKikKKwkgICMgRm9yIHNlY3VyaXR5IHJlYXNvbnMsIGl0IGlzIGhpZ2hseSByZWNvbW1lbmRlZCB0aGF0IHlvdSBhbHdheXMKKwkgICMgdXNlIGFic29sdXRlIHBhdGhzIGZvciBuYW1pbmcgc2hhcmVkIGxpYnJhcmllcywgYW5kIGV4Y2x1ZGUgdGhlCisJICAjIERUX1JVTlBBVEggdGFnIGZyb20gZXhlY3V0YWJsZXMgYW5kIGxpYnJhcmllcy4gIEJ1dCBkb2luZyBzbworCSAgIyByZXF1aXJlcyB0aGF0IHlvdSBjb21waWxlIGV2ZXJ5dGhpbmcgdHdpY2UsIHdoaWNoIGlzIGEgcGFpbi4KKwkgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKwkgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworCSAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKwkgIGVsc2UKKwkgICAgbGRfc2hsaWJzPW5vCisJICBmaQorCTs7CisgICAgICBlc2FjCisgICAgICA7OworCisgICAgc3Vub3M0KikKKyAgICAgIGFyY2hpdmVfY21kcz0nJExEIC1hc3NlcnQgcHVyZS10ZXh0IC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIHdsYXJjPQorICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubworICAgICAgOzsKKworICAgICopCisgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgIGVsc2UKKwlsZF9zaGxpYnM9bm8KKyAgICAgIGZpCisgICAgICA7OworICAgIGVzYWMKKworICAgIGlmIHRlc3QgIiRsZF9zaGxpYnMiID0gbm87IHRoZW4KKyAgICAgIHJ1bnBhdGhfdmFyPQorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0KKyAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0KKyAgICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPQorICAgIGZpCisgIGVsc2UKKyAgICAjIFBPUlRNRSBmaWxsIGluIGEgZGVzY3JpcHRpb24gb2YgeW91ciBzeXN0ZW0ncyBsaW5rZXIgKG5vdCBHTlUgbGQpCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgIGFpeDMqKQorICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKKyAgICAgIGFsd2F5c19leHBvcnRfc3ltYm9scz15ZXMKKyAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9JyRMRCAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLWJFOiRleHBvcnRfc3ltYm9scyAtVDUxMiAtSDUxMiAtYk06U1JFfiRBUiAkQVJfRkxBR1MgJGxpYiAkb3V0cHV0X29iamRpci8kc29uYW1lJworICAgICAgIyBOb3RlOiB0aGlzIGxpbmtlciBoYXJkY29kZXMgdGhlIGRpcmVjdG9yaWVzIGluIExJQlBBVEggaWYgdGhlcmUKKyAgICAgICMgYXJlIG5vIGRpcmVjdG9yaWVzIHNwZWNpZmllZCBieSAtTC4KKyAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllcyAmJiB0ZXN0IC16ICIkbHRfcHJvZ19jb21waWxlcl9zdGF0aWMiOyB0aGVuCisJIyBOZWl0aGVyIGRpcmVjdCBoYXJkY29kaW5nIG5vciBzdGF0aWMgbGlua2luZyBpcyBzdXBwb3J0ZWQgd2l0aCBhCisJIyBicm9rZW4gY29sbGVjdDIuCisJaGFyZGNvZGVfZGlyZWN0PXVuc3VwcG9ydGVkCisgICAgICBmaQorICAgICAgOzsKKworICAgIGFpeFs0LTldKikKKyAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisJIyBPbiBJQTY0LCB0aGUgbGlua2VyIGRvZXMgcnVuIHRpbWUgbGlua2luZyBieSBkZWZhdWx0LCBzbyB3ZSBkb24ndAorCSMgaGF2ZSB0byBkbyBhbnl0aGluZyBzcGVjaWFsLgorCWFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KKwlleHBfc3ltX2ZsYWc9Jy1CZXhwb3J0JworCW5vX2VudHJ5X2ZsYWc9IiIKKyAgICAgIGVsc2UKKwkjIElmIHdlJ3JlIHVzaW5nIEdOVSBubSwgdGhlbiB3ZSBkb24ndCB3YW50IHRoZSAiLUMiIG9wdGlvbi4KKwkjIC1DIG1lYW5zIGRlbWFuZ2xlIHRvIEFJWCBubSwgYnV0IG1lYW5zIGRvbid0IGRlbWFuZ2xlIHdpdGggR05VIG5tCisJaWYgJE5NIC1WIDI+JjEgfCAkR1JFUCAnR05VJyA+IC9kZXYvbnVsbDsgdGhlbgorCSAgZXhwb3J0X3N5bWJvbHNfY21kcz0nJE5NIC1CcGcgJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgYXdrICdcJyd7IGlmICgoKFwkIDIgPT0gIlQiKSB8fCAoXCQgMiA9PSAiRCIpIHx8IChcJCAyID09ICJCIikpICYmIChzdWJzdHIoXCQgMywxLDEpICE9ICIuIikpIHsgcHJpbnQgXCQgMyB9IH0nXCcnIHwgc29ydCAtdSA+ICRleHBvcnRfc3ltYm9scycKKwllbHNlCisJICBleHBvcnRfc3ltYm9sc19jbWRzPSckTk0gLUJDcGcgJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgYXdrICdcJyd7IGlmICgoKFwkIDIgPT0gIlQiKSB8fCAoXCQgMiA9PSAiRCIpIHx8IChcJCAyID09ICJCIikpICYmIChzdWJzdHIoXCQgMywxLDEpICE9ICIuIikpIHsgcHJpbnQgXCQgMyB9IH0nXCcnIHwgc29ydCAtdSA+ICRleHBvcnRfc3ltYm9scycKKwlmaQorCWFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KKworCSMgVGVzdCBpZiB3ZSBhcmUgdHJ5aW5nIHRvIHVzZSBydW4gdGltZSBsaW5raW5nIG9yIG5vcm1hbAorCSMgQUlYIHN0eWxlIGxpbmtpbmcuIElmIC1icnRsIGlzIHNvbWV3aGVyZSBpbiBMREZMQUdTLCB3ZQorCSMgbmVlZCB0byBkbyBydW50aW1lIGxpbmtpbmcuCisJY2FzZSAkaG9zdF9vcyBpbiBhaXg0LlsyM118YWl4NC5bMjNdLip8YWl4WzUtOV0qKQorCSAgZm9yIGxkX2ZsYWcgaW4gJExERkxBR1M7IGRvCisJICBpZiAodGVzdCAkbGRfZmxhZyA9ICItYnJ0bCIgfHwgdGVzdCAkbGRfZmxhZyA9ICItV2wsLWJydGwiKTsgdGhlbgorCSAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPXllcworCSAgICBicmVhaworCSAgZmkKKwkgIGRvbmUKKwkgIDs7CisJZXNhYworCisJZXhwX3N5bV9mbGFnPSctYmV4cG9ydCcKKwlub19lbnRyeV9mbGFnPSctYm5vZW50cnknCisgICAgICBmaQorCisgICAgICAjIFdoZW4gbGFyZ2UgZXhlY3V0YWJsZXMgb3Igc2hhcmVkIG9iamVjdHMgYXJlIGJ1aWx0LCBBSVggbGQgY2FuCisgICAgICAjIGhhdmUgcHJvYmxlbXMgY3JlYXRpbmcgdGhlIHRhYmxlIG9mIGNvbnRlbnRzLiAgSWYgbGlua2luZyBhIGxpYnJhcnkKKyAgICAgICMgb3IgcHJvZ3JhbSByZXN1bHRzIGluICJlcnJvciBUT0Mgb3ZlcmZsb3ciIGFkZCAtbW1pbmltYWwtdG9jIHRvCisgICAgICAjIENYWEZMQUdTL0NGTEFHUyBmb3IgZysrL2djYy4gIEluIHRoZSBjYXNlcyB3aGVyZSB0aGF0IGlzIG5vdAorICAgICAgIyBlbm91Z2ggdG8gZml4IHRoZSBwcm9ibGVtLCBhZGQgLVdsLC1iYmlndG9jIHRvIExERkxBR1MuCisKKyAgICAgIGFyY2hpdmVfY21kcz0nJworICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlPXllcworICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0nOicKKyAgICAgIGxpbmtfYWxsX2RlcGxpYnM9eWVzCisgICAgICBmaWxlX2xpc3Rfc3BlYz0nJHt3bH0tZiwnCisKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisJY2FzZSAkaG9zdF9vcyBpbiBhaXg0LlswMTJdfGFpeDQuWzAxMl0uKikKKwkjIFdlIG9ubHkgd2FudCB0byBkbyB0aGlzIG9uIEFJWCA0LjIgYW5kIGxvd2VyLCB0aGUgY2hlY2sKKwkjIGJlbG93IGZvciBicm9rZW4gY29sbGVjdDIgZG9lc24ndCB3b3JrIHVuZGVyIDQuMysKKwkgIGNvbGxlY3QybmFtZT1gJHtDQ30gLXByaW50LXByb2ctbmFtZT1jb2xsZWN0MmAKKwkgIGlmIHRlc3QgLWYgIiRjb2xsZWN0Mm5hbWUiICYmCisJICAgc3RyaW5ncyAiJGNvbGxlY3QybmFtZSIgfCAkR1JFUCByZXNvbHZlX2xpYl9uYW1lID4vZGV2L251bGwKKwkgIHRoZW4KKwkgICMgV2UgaGF2ZSByZXdvcmtlZCBjb2xsZWN0MgorCSAgOgorCSAgZWxzZQorCSAgIyBXZSBoYXZlIG9sZCBjb2xsZWN0MgorCSAgaGFyZGNvZGVfZGlyZWN0PXVuc3VwcG9ydGVkCisJICAjIEl0IGZhaWxzIHRvIGZpbmQgdW5pbnN0YWxsZWQgbGlicmFyaWVzIHdoZW4gdGhlIHVuaW5zdGFsbGVkCisJICAjIHBhdGggaXMgbm90IGxpc3RlZCBpbiB0aGUgbGlicGF0aC4gIFNldHRpbmcgaGFyZGNvZGVfbWludXNfTAorCSAgIyB0byB1bnN1cHBvcnRlZCBmb3JjZXMgcmVsaW5raW5nCisJICBoYXJkY29kZV9taW51c19MPXllcworCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworCSAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0KKwkgIGZpCisJICA7OworCWVzYWMKKwlzaGFyZWRfZmxhZz0nLXNoYXJlZCcKKwlpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KKwkgIHNoYXJlZF9mbGFnPSIkc2hhcmVkX2ZsYWcgIicke3dsfS1HJworCWZpCisJbGlua19hbGxfZGVwbGlicz1ubworICAgICAgZWxzZQorCSMgbm90IHVzaW5nIGdjYworCWlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisJIyBWaXN1YWxBZ2UgQysrLCBWZXJzaW9uIDUuNSBmb3IgQUlYIDVMIGZvciBJQS02NCwgQmV0YSAzIFJlbGVhc2UKKwkjIGNob2tlcyBvbiAtV2wsLUcuIFRoZSBmb2xsb3dpbmcgbGluZSBpcyBjb3JyZWN0OgorCSAgc2hhcmVkX2ZsYWc9Jy1HJworCWVsc2UKKwkgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgorCSAgICBzaGFyZWRfZmxhZz0nJHt3bH0tRycKKwkgIGVsc2UKKwkgICAgc2hhcmVkX2ZsYWc9JyR7d2x9LWJNOlNSRScKKwkgIGZpCisJZmkKKyAgICAgIGZpCisKKyAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nJHt3bH0tYmV4cGFsbCcKKyAgICAgICMgSXQgc2VlbXMgdGhhdCAtYmV4cGFsbCBkb2VzIG5vdCBleHBvcnQgc3ltYm9scyBiZWdpbm5pbmcgd2l0aAorICAgICAgIyB1bmRlcnNjb3JlIChfKSwgc28gaXQgaXMgYmV0dGVyIHRvIGdlbmVyYXRlIGEgbGlzdCBvZiBzeW1ib2xzIHRvIGV4cG9ydC4KKyAgICAgIGFsd2F5c19leHBvcnRfc3ltYm9scz15ZXMKKyAgICAgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgorCSMgV2FybmluZyAtIHdpdGhvdXQgdXNpbmcgdGhlIG90aGVyIHJ1bnRpbWUgbG9hZGluZyBmbGFncyAoLWJydGwpLAorCSMgLWJlcm9rIHdpbGwgbGluayB3aXRob3V0IGVycm9yLCBidXQgbWF5IHByb2R1Y2UgYSBicm9rZW4gbGlicmFyeS4KKwlhbGxvd191bmRlZmluZWRfZmxhZz0nLWJlcm9rJworICAgICAgICAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4KKyAgICAgICAgIyBlbXB0eSBleGVjdXRhYmxlLgorICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKworbHRfYWl4X2xpYnBhdGhfc2VkPScKKyAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CisJL14wLyB7CisJICAgIHMvXjAgICpcKC4qXCkkL1wxLworCSAgICBwCisJfQorICAgIH0nCithaXhfbGlicGF0aD1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKyMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KK2lmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4KKyAgYWl4X2xpYnBhdGg9YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCitmaQorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKworICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAnIlwke3dsfSRub19lbnRyeV9mbGFnIicgJGNvbXBpbGVyX2ZsYWdzIGBpZiB0ZXN0ICJ4JHthbGxvd191bmRlZmluZWRfZmxhZ30iICE9ICJ4IjsgdGhlbiAkRUNITyAiWCR7d2x9JHthbGxvd191bmRlZmluZWRfZmxhZ30iIHwgJFhzZWQ7IGVsc2UgOjsgZmlgICciXCR7d2x9JGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzICRzaGFyZWRfZmxhZyIKKyAgICAgIGVsc2UKKwlpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tUiAkbGliZGlyOi91c3IvbGliOi9saWInCisJICBhbGxvd191bmRlZmluZWRfZmxhZz0iLXogbm9kZWZzIgorCSAgYXJjaGl2ZV9leHBzeW1fY21kcz0iXCRDQyAkc2hhcmVkX2ZsYWciJyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICciXCR7d2x9JG5vX2VudHJ5X2ZsYWciJyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0ke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAnIlwke3dsfSRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scyIKKwllbHNlCisJICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbgorCSAjIGVtcHR5IGV4ZWN1dGFibGUuCisJIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorCitsdF9haXhfbGlicGF0aF9zZWQ9JworICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKKwkvXjAvIHsKKwkgICAgcy9eMCAgKlwoLipcKSQvXDEvCisJICAgIHAKKwl9CisgICAgfScKK2FpeF9saWJwYXRoPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgoraWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbgorICBhaXhfbGlicGF0aD1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKK2ZpCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2lmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorCisJIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisJICAjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW4gdGltZSBsb2FkaW5nIGZsYWdzLAorCSAgIyAtYmVyb2sgd2lsbCBsaW5rIHdpdGhvdXQgZXJyb3IsIGJ1dCBtYXkgcHJvZHVjZSBhIGJyb2tlbiBsaWJyYXJ5LgorCSAgbm9fdW5kZWZpbmVkX2ZsYWc9JyAke3dsfS1iZXJub3RvaycKKwkgIGFsbG93X3VuZGVmaW5lZF9mbGFnPScgJHt3bH0tYmVyb2snCisJICAjIEV4cG9ydGVkIHN5bWJvbHMgY2FuIGJlIHB1bGxlZCBpbnRvIHNoYXJlZCBvYmplY3RzIGZyb20gYXJjaGl2ZXMKKwkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSckY29udmVuaWVuY2UnCisJICBhcmNoaXZlX2NtZHNfbmVlZF9sYz15ZXMKKwkgICMgVGhpcyBpcyBzaW1pbGFyIHRvIGhvdyBBSVggdHJhZGl0aW9uYWxseSBidWlsZHMgaXRzIHNoYXJlZCBsaWJyYXJpZXMuCisJICBhcmNoaXZlX2V4cHN5bV9jbWRzPSJcJENDICRzaGFyZWRfZmxhZyInIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJHt3bH0tYm5vZW50cnkgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWJFOiRleHBvcnRfc3ltYm9scyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9fiRBUiAkQVJfRkxBR1MgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUkcmVsZWFzZS5hICRvdXRwdXRfb2JqZGlyLyRzb25hbWUnCisJZmkKKyAgICAgIGZpCisgICAgICA7OworCisgICAgYW1pZ2FvcyopCisgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgcG93ZXJwYykKKyAgICAgICAgICAgICMgc2VlIGNvbW1lbnQgYWJvdXQgQW1pZ2FPUzQgLnNvIHN1cHBvcnQKKyAgICAgICAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisgICAgICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPScnCisgICAgICAgIDs7CisgICAgICBtNjhrKQorICAgICAgICAgICAgYXJjaGl2ZV9jbWRzPSckUk0gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBOQU1FICRsaWJuYW1lIiA+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgTElCUkFSWV9JRCAxIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIFZFUlNJT04gJG1ham9yIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIFJFVklTSU9OICRyZXZpc2lvbiIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kQVIgJEFSX0ZMQUdTICRsaWIgJGxpYm9ianN+JFJBTkxJQiAkbGlifihjZCAkb3V0cHV0X29iamRpciAmJiBhMml4bGlicmFyeSAtMzIpJworICAgICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworICAgICAgICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKyAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICBic2RpWzQ1XSopCisgICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9LXJkeW5hbWljCisgICAgICA7OworCisgICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgICAgIyBXaGVuIG5vdCB1c2luZyBnY2MsIHdlIGN1cnJlbnRseSBhc3N1bWUgdGhhdCB3ZSBhcmUgdXNpbmcKKyAgICAgICMgTWljcm9zb2Z0IFZpc3VhbCBDKysuCisgICAgICAjIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsIGFzIHRoZXJlIGlzCisgICAgICAjIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nICcKKyAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCisgICAgICAjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmxpYiBmaWxlcywgbm90IC5hIGZpbGVzLgorICAgICAgbGliZXh0PWxpYgorICAgICAgIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCisgICAgICBzaHJleHRfY21kcz0iLmRsbCIKKyAgICAgICMgRklYTUU6IFNldHRpbmcgbGlua25hbWVzIGhlcmUgaXMgYSBiYWQgaGFjay4KKyAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1vICRsaWIgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzIGAkRUNITyAiWCRkZXBsaWJzIiB8ICRYc2VkIC1lICdcJydzLyAtbGMkLy8nXCcnYCAtbGluayAtZGxsfmxpbmtuYW1lcz0nCisgICAgICAjIFRoZSBsaW5rZXIgd2lsbCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgLmxpYiBmaWxlIGlmIHdlIGJ1aWxkIGEgRExMLgorICAgICAgb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcz0ndHJ1ZScKKyAgICAgICMgRklYTUU6IFNob3VsZCBsZXQgdGhlIHVzZXIgc3BlY2lmeSB0aGUgbGliIHByb2dyYW0uCisgICAgICBvbGRfYXJjaGl2ZV9jbWRzPSdsaWIgLU9VVDokb2xkbGliJG9sZG9ianMkb2xkX2RlcGxpYnMnCisgICAgICBmaXhfc3JjZmlsZV9wYXRoPSdgY3lncGF0aCAtdyAiJHNyY2ZpbGUiYCcKKyAgICAgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCisgICAgICA7OworCisgICAgZGFyd2luKiB8IHJoYXBzb2R5KikKKworCisgIGFyY2hpdmVfY21kc19uZWVkX2xjPW5vCisgIGhhcmRjb2RlX2RpcmVjdD1ubworICBoYXJkY29kZV9hdXRvbWF0aWM9eWVzCisgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9dW5zdXBwb3J0ZWQKKyAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9JycKKyAgbGlua19hbGxfZGVwbGlicz15ZXMKKyAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9IiRfbHRfZGFyX2FsbG93X3VuZGVmaW5lZCIKKyAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgaWZvcnQqKSBfbHRfZGFyX2Nhbl9zaGFyZWQ9eWVzIDs7CisgICAgICopIF9sdF9kYXJfY2FuX3NoYXJlZD0kR0NDIDs7CisgIGVzYWMKKyAgaWYgdGVzdCAiJF9sdF9kYXJfY2FuX3NoYXJlZCIgPSAieWVzIjsgdGhlbgorICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPWVjaG8KKyAgICBhcmNoaXZlX2NtZHM9IlwkQ0MgLWR5bmFtaWNsaWIgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiBcJGxpYm9ianMgXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSBcJHJwYXRoL1wkc29uYW1lIFwkdmVyc3RyaW5nICRfbHRfZGFyX3NpbmdsZV9tb2Qke19sdF9kc3ltdXRpbH0iCisgICAgbW9kdWxlX2NtZHM9IlwkQ0MgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiAtYnVuZGxlIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyR7X2x0X2RzeW11dGlsfSIKKyAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSJzZWQgJ3MsXixfLCcgPCBcJGV4cG9ydF9zeW1ib2xzID4gXCRvdXRwdXRfb2JqZGlyL1wke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltflwkQ0MgLWR5bmFtaWNsaWIgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiBcJGxpYm9ianMgXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSBcJHJwYXRoL1wkc29uYW1lIFwkdmVyc3RyaW5nICR7X2x0X2Rhcl9zaW5nbGVfbW9kfSR7X2x0X2Rhcl9leHBvcnRfc3ltc30ke19sdF9kc3ltdXRpbH0iCisgICAgbW9kdWxlX2V4cHN5bV9jbWRzPSJzZWQgLWUgJ3MsXixfLCcgPCBcJGV4cG9ydF9zeW1ib2xzID4gXCRvdXRwdXRfb2JqZGlyL1wke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltflwkQ0MgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiAtYnVuZGxlIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyR7X2x0X2Rhcl9leHBvcnRfc3ltc30ke19sdF9kc3ltdXRpbH0iCisKKyAgZWxzZQorICBsZF9zaGxpYnM9bm8KKyAgZmkKKworICAgICAgOzsKKworICAgIGRndXgqKQorICAgICAgYXJjaGl2ZV9jbWRzPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCisgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCisgICAgICA7OworCisgICAgZnJlZWJzZDEqKQorICAgICAgbGRfc2hsaWJzPW5vCisgICAgICA7OworCisgICAgIyBGcmVlQlNEIDIuMi5bMDEyXSBhbGxvd3MgdXMgdG8gaW5jbHVkZSBjKytydDAubyB0byBnZXQgQysrIGNvbnN0cnVjdG9yCisgICAgIyBzdXBwb3J0LiAgRnV0dXJlIHZlcnNpb25zIGRvIHRoaXMgYXV0b21hdGljYWxseSwgYnV0IGFuIGV4cGxpY2l0IGMrK3J0MC5vCisgICAgIyBkb2VzIG5vdCBicmVhayBhbnl0aGluZywgYW5kIGhlbHBzIHNpZ25pZmljYW50bHkgKGF0IHRoZSBjb3N0IG9mIGEgbGl0dGxlCisgICAgIyBleHRyYSBzcGFjZSkuCisgICAgZnJlZWJzZDIuMiopCisgICAgICBhcmNoaXZlX2NtZHM9JyRMRCAtQnNoYXJlYWJsZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgL3Vzci9saWIvYysrcnQwLm8nCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctUiRsaWJkaXInCisgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCisgICAgICA7OworCisgICAgIyBVbmZvcnR1bmF0ZWx5LCBvbGRlciB2ZXJzaW9ucyBvZiBGcmVlQlNEIDIgZG8gbm90IGhhdmUgdGhpcyBmZWF0dXJlLgorICAgIGZyZWVic2QyKikKKyAgICAgIGFyY2hpdmVfY21kcz0nJExEIC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCisgICAgICA7OworCisgICAgIyBGcmVlQlNEIDMgYW5kIGdyZWF0ZXIgdXNlcyBnY2MgLXNoYXJlZCB0byBkbyBzaGFyZWQgbGlicmFyaWVzLgorICAgIGZyZWVic2QqIHwgZHJhZ29uZmx5KikKKyAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctUiRsaWJkaXInCisgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCisgICAgICA7OworCisgICAgaHB1eDkqKQorICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKwlhcmNoaXZlX2NtZHM9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisgICAgICBlbHNlCisJYXJjaGl2ZV9jbWRzPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kTEQgLWIgK2IgJGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKyAgICAgIGZpCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfStiICR7d2x9JGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgorICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworCisgICAgICAjIGhhcmRjb2RlX21pbnVzX0w6IE5vdCByZWFsbHkgaW4gdGhlIHNlYXJjaCBQQVRILAorICAgICAgIyBidXQgYXMgdGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCisgICAgICBoYXJkY29kZV9taW51c19MPXllcworICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPScke3dsfS1FJworICAgICAgOzsKKworICAgIGhwdXgxMCopCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllcyAtYSAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCisJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgZWxzZQorCWFyY2hpdmVfY21kcz0nJExEIC1iICtoICRzb25hbWUgK2IgJGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIGZpCisgICAgICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKwloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfStiICR7d2x9JGxpYmRpcicKKwloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkPScrYiAkbGliZGlyJworCWhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgorCWhhcmRjb2RlX2RpcmVjdD15ZXMKKwloYXJkY29kZV9kaXJlY3RfYWJzb2x1dGU9eWVzCisJZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPScke3dsfS1FJworCSMgaGFyZGNvZGVfbWludXNfTDogTm90IHJlYWxseSBpbiB0aGUgc2VhcmNoIFBBVEgsCisJIyBidXQgYXMgdGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCisJaGFyZGNvZGVfbWludXNfTD15ZXMKKyAgICAgIGZpCisgICAgICA7OworCisgICAgaHB1eDExKikKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzIC1hICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKwljYXNlICRob3N0X2NwdSBpbgorCWhwcGEqNjQqKQorCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAke3dsfStoICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIDs7CisJaWE2NCopCisJICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgOzsKKwkqKQorCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgOzsKKwllc2FjCisgICAgICBlbHNlCisJY2FzZSAkaG9zdF9jcHUgaW4KKwlocHBhKjY0KikKKwkgIGFyY2hpdmVfY21kcz0nJENDIC1iICR7d2x9K2ggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgOzsKKwlpYTY0KikKKwkgIGFyY2hpdmVfY21kcz0nJENDIC1iICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgOzsKKwkqKQorCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLWIgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIDs7CisJZXNhYworICAgICAgZmkKKyAgICAgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgorCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9K2IgJHt3bH0kbGliZGlyJworCWhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgorCisJY2FzZSAkaG9zdF9jcHUgaW4KKwlocHBhKjY0KnxpYTY0KikKKwkgIGhhcmRjb2RlX2RpcmVjdD1ubworCSAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubworCSAgOzsKKwkqKQorCSAgaGFyZGNvZGVfZGlyZWN0PXllcworCSAgaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlPXllcworCSAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPScke3dsfS1FJworCisJICAjIGhhcmRjb2RlX21pbnVzX0w6IE5vdCByZWFsbHkgaW4gdGhlIHNlYXJjaCBQQVRILAorCSAgIyBidXQgYXMgdGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCisJICBoYXJkY29kZV9taW51c19MPXllcworCSAgOzsKKwllc2FjCisgICAgICBmaQorICAgICAgOzsKKworICAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmICRFQ0hPICJYJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nIiB8ICRYc2VkYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworCSMgVHJ5IHRvIHVzZSB0aGUgLWV4cG9ydGVkX3N5bWJvbCBsZCBvcHRpb24sIGlmIGl0IGRvZXMgbm90CisJIyB3b3JrLCBhc3N1bWUgdGhhdCAtZXhwb3J0c19maWxlIGRvZXMgbm90IHdvcmsgZWl0aGVyIGFuZAorCSMgaW1wbGljaXRseSBleHBvcnQgYWxsIHN5bWJvbHMuCisgICAgICAgIHNhdmVfTERGTEFHUz0iJExERkxBR1MiCisgICAgICAgIExERkxBR1M9IiRMREZMQUdTIC1zaGFyZWQgJHt3bH0tZXhwb3J0ZWRfc3ltYm9sICR7d2x9Zm9vICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfS9kZXYvbnVsbCIKKyAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworaW50IGZvbyh2b2lkKSB7fQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiAkRUNITyAiWCR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyIgfCAkWHNlZGAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgJHt3bH0tZXhwb3J0c19maWxlICR7d2x9JGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICAgICBMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgorICAgICAgZWxzZQorCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgJEVDSE8gIlgtc2V0X3ZlcnNpb24gJHZlcnN0cmluZyIgfCAkWHNlZGAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmICRFQ0hPICJYLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciIHwgJFhzZWRgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLWV4cG9ydHNfZmlsZSAkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgIGZpCisgICAgICBhcmNoaXZlX2NtZHNfbmVlZF9sYz0nbm8nCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKKyAgICAgIGluaGVyaXRfcnBhdGg9eWVzCisgICAgICBsaW5rX2FsbF9kZXBsaWJzPXllcworICAgICAgOzsKKworICAgIG5ldGJzZCogfCBuZXRic2RlbGYqLWdudSkKKyAgICAgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfXyA+L2Rldi9udWxsOyB0aGVuCisJYXJjaGl2ZV9jbWRzPSckTEQgLUJzaGFyZWFibGUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJyAgIyBhLm91dAorICAgICAgZWxzZQorCWFyY2hpdmVfY21kcz0nJExEIC1zaGFyZWQgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJyAgICAgICMgRUxGCisgICAgICBmaQorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLVIkbGliZGlyJworICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubworICAgICAgOzsKKworICAgIG5ld3NvczYpCisgICAgICBhcmNoaXZlX2NtZHM9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgorICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubworICAgICAgOzsKKworICAgICpudG8qIHwgKnFueCopCisgICAgICA7OworCisgICAgb3BlbmJzZCopCisgICAgICBpZiB0ZXN0IC1mIC91c3IvbGliZXhlYy9sZC5zbzsgdGhlbgorCWhhcmRjb2RlX2RpcmVjdD15ZXMKKwloYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCisJaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlPXllcworCWlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX19gIiB8fCB0ZXN0ICIkaG9zdF9vcy0kaG9zdF9jcHUiID0gIm9wZW5ic2QyLjgtcG93ZXJwYyI7IHRoZW4KKwkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUsJGV4cG9ydF9zeW1ib2xzJworCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGgsJGxpYmRpcicKKwkgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nJHt3bH0tRScKKwllbHNlCisJICBjYXNlICRob3N0X29zIGluCisJICAgb3BlbmJzZFswMV0uKiB8IG9wZW5ic2QyLlswLTddIHwgb3BlbmJzZDIuWzAtN10uKikKKwkgICAgIGFyY2hpdmVfY21kcz0nJExEIC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKwkgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1SJGxpYmRpcicKKwkgICAgIDs7CisJICAgKikKKwkgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGgsJGxpYmRpcicKKwkgICAgIDs7CisJICBlc2FjCisJZmkKKyAgICAgIGVsc2UKKwlsZF9zaGxpYnM9bm8KKyAgICAgIGZpCisgICAgICA7OworCisgICAgb3MyKikKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisgICAgICBhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAorICAgICAgYXJjaGl2ZV9jbWRzPSckRUNITyAiTElCUkFSWSAkbGlibmFtZSBJTklUSU5TVEFOQ0UiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfiRFQ0hPICJERVNDUklQVElPTiBcIiRsaWJuYW1lXCIiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4kRUNITyBEQVRBID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4kRUNITyAiIFNJTkdMRSBOT05TSEFSRUQiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4kRUNITyBFWFBPUlRTID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn5lbXhleHAgJGxpYm9ianMgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfiRDQyAtWmRsbCAtWmNydGRsbCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWYnCisgICAgICBvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzPSdlbXhpbXAgLW8gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuYSAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWYnCisgICAgICA7OworCisgICAgb3NmMyopCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorCWFsbG93X3VuZGVmaW5lZF9mbGFnPScgJHt3bH0tZXhwZWN0X3VucmVzb2x2ZWQgJHt3bH1cKicKKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmICRFQ0hPICJYJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nIiB8ICRYc2VkYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworICAgICAgZWxzZQorCWFsbG93X3VuZGVmaW5lZF9mbGFnPScgLWV4cGVjdF91bnJlc29sdmVkIFwqJworCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiAkRUNITyAiWC1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nIiB8ICRYc2VkYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisgICAgICBmaQorICAgICAgYXJjaGl2ZV9jbWRzX25lZWRfbGM9J25vJworICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj06CisgICAgICA7OworCisgICAgb3NmNCogfCBvc2Y1KikJIyBhcyBvc2YzKiB3aXRoIHRoZSBhZGRpdGlvbiBvZiAtbXN5bSBmbGFnCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorCWFsbG93X3VuZGVmaW5lZF9mbGFnPScgJHt3bH0tZXhwZWN0X3VucmVzb2x2ZWQgJHt3bH1cKicKKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LW1zeW0gJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgJEVDSE8gIlgke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciIHwgJFhzZWRgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisJaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICAgICAgZWxzZQorCWFsbG93X3VuZGVmaW5lZF9mbGFnPScgLWV4cGVjdF91bnJlc29sdmVkIFwqJworCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLW1zeW0gLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiAkRUNITyAiWC1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nIiB8ICRYc2VkYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisJYXJjaGl2ZV9leHBzeW1fY21kcz0nZm9yIGkgaW4gYGNhdCAkZXhwb3J0X3N5bWJvbHNgOyBkbyBwcmludGYgIiVzICVzXFxuIiAtZXhwb3J0ZWRfc3ltYm9sICJcJGkiID4+ICRsaWIuZXhwOyBkb25lOyBwcmludGYgIiVzXFxuIiAiLWhpZGRlbiI+PiAkbGliLmV4cH4KKwkkQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICR7d2x9LWlucHV0ICR7d2x9JGxpYi5leHAgJGNvbXBpbGVyX2ZsYWdzICRsaWJvYmpzICRkZXBsaWJzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgJEVDSE8gIlgtc2V0X3ZlcnNpb24gJHZlcnN0cmluZyIgfCAkWHNlZGAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGlifiRSTSAkbGliLmV4cCcKKworCSMgQm90aCBjIGFuZCBjeHggY29tcGlsZXIgc3VwcG9ydCAtcnBhdGggZGlyZWN0bHkKKwloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctcnBhdGggJGxpYmRpcicKKyAgICAgIGZpCisgICAgICBhcmNoaXZlX2NtZHNfbmVlZF9sYz0nbm8nCisgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKKyAgICAgIDs7CisKKyAgICBzb2xhcmlzKikKKyAgICAgIG5vX3VuZGVmaW5lZF9mbGFnPScgLXogZGVmcycKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisJd2xhcmM9JyR7d2x9JworCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHt3bH0teiAke3dsfXRleHQgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJYXJjaGl2ZV9leHBzeW1fY21kcz0nZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH5lY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgorCSAgJENDIC1zaGFyZWQgJHt3bH0teiAke3dsfXRleHQgJHt3bH0tTSAke3dsfSRsaWIuZXhwICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKyAgICAgIGVsc2UKKwljYXNlIGAkQ0MgLVYgMj4mMWAgaW4KKwkqIkNvbXBpbGVycyA1LjAiKikKKwkgIHdsYXJjPScnCisJICBhcmNoaXZlX2NtZHM9JyRMRCAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworCSAgYXJjaGl2ZV9leHBzeW1fY21kcz0nZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH5lY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgorCSAgJExEIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gLU0gJGxpYi5leHAgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworCSAgOzsKKwkqKQorCSAgd2xhcmM9JyR7d2x9JworCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgYXJjaGl2ZV9leHBzeW1fY21kcz0nZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH5lY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgorCSAgJENDIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gLU0gJGxpYi5leHAgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCisJICA7OworCWVzYWMKKyAgICAgIGZpCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctUiRsaWJkaXInCisgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCisgICAgICBjYXNlICRob3N0X29zIGluCisgICAgICBzb2xhcmlzMi5bMC01XSB8IHNvbGFyaXMyLlswLTVdLiopIDs7CisgICAgICAqKQorCSMgVGhlIGNvbXBpbGVyIGRyaXZlciB3aWxsIGNvbWJpbmUgYW5kIHJlb3JkZXIgbGlua2VyIG9wdGlvbnMsCisJIyBidXQgdW5kZXJzdGFuZHMgYC16IGxpbmtlcl9mbGFnJy4gIEdDQyBkaXNjYXJkcyBpdCB3aXRob3V0IGAkd2wnLAorCSMgYnV0IGlzIGNhcmVmdWwgZW5vdWdoIG5vdCB0byByZW9yZGVyLgorCSMgU3VwcG9ydGVkIHNpbmNlIFNvbGFyaXMgMi42IChtYXliZSAyLjUuMT8pCisJaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKwkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPScke3dsfS16ICR7d2x9YWxsZXh0cmFjdCRjb252ZW5pZW5jZSAke3dsfS16ICR7d2x9ZGVmYXVsdGV4dHJhY3QnCisJZWxzZQorCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9Jy16IGFsbGV4dHJhY3QkY29udmVuaWVuY2UgLXogZGVmYXVsdGV4dHJhY3QnCisJZmkKKwk7OworICAgICAgZXNhYworICAgICAgbGlua19hbGxfZGVwbGlicz15ZXMKKyAgICAgIDs7CisKKyAgICBzdW5vczQqKQorICAgICAgaWYgdGVzdCAieCRob3N0X3ZlbmRvciIgPSB4c2VxdWVudDsgdGhlbgorCSMgVXNlICRDQyB0byBsaW5rIHVuZGVyIHNlcXVlbnQsIGJlY2F1c2UgaXQgdGhyb3dzIGluIHNvbWUgZXh0cmEgLm8KKwkjIGZpbGVzIHRoYXQgbWFrZSAuaW5pdCBhbmQgLmZpbmkgc2VjdGlvbnMgd29yay4KKwlhcmNoaXZlX2NtZHM9JyRDQyAtRyAke3dsfS1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICBlbHNlCisJYXJjaGl2ZV9jbWRzPSckTEQgLWFzc2VydCBwdXJlLXRleHQgLUJzdGF0aWMgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgZmkKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCisgICAgICA7OworCisgICAgc3lzdjQpCisgICAgICBjYXNlICRob3N0X3ZlbmRvciBpbgorCXNuaSkKKwkgIGFyY2hpdmVfY21kcz0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworCSAgaGFyZGNvZGVfZGlyZWN0PXllcyAjIGlzIHRoaXMgcmVhbGx5IHRydWU/Pz8KKwk7OworCXNpZW1lbnMpCisJICAjIyBMRCBpcyBsZCBpdCBtYWtlcyBhIFBMQU1MSUIKKwkgICMjIENDIGp1c3QgbWFrZXMgYSBHcm9zc01vZHVsZS4KKwkgIGFyY2hpdmVfY21kcz0nJExEIC1HIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKwkgIHJlbG9hZF9jbWRzPSckQ0MgLXIgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKKwkgIGhhcmRjb2RlX2RpcmVjdD1ubworICAgICAgICA7OworCW1vdG9yb2xhKQorCSAgYXJjaGl2ZV9jbWRzPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisJICBoYXJkY29kZV9kaXJlY3Q9bm8gI01vdG9yb2xhIG1hbnVhbCBzYXlzIHllcywgYnV0IG15IHRlc3RzIHNheSB0aGV5IGxpZQorCTs7CisgICAgICBlc2FjCisgICAgICBydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCisgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCisgICAgICA7OworCisgICAgc3lzdjQuMyopCisgICAgICBhcmNoaXZlX2NtZHM9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KKyAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nLUJleHBvcnQnCisgICAgICA7OworCisgICAgc3lzdjQqTVAqKQorICAgICAgaWYgdGVzdCAtZCAvdXNyL25lYzsgdGhlbgorCWFyY2hpdmVfY21kcz0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworCWhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KKwlydW5wYXRoX3Zhcj1MRF9SVU5fUEFUSAorCWhhcmRjb2RlX3J1bnBhdGhfdmFyPXllcworCWxkX3NobGlicz15ZXMKKyAgICAgIGZpCisgICAgICA7OworCisgICAgc3lzdjQqdXcyKiB8IHN5c3Y1T3BlblVOSVgqIHwgc3lzdjVVbml4V2FyZTcuWzAxXS5bMTBdKiB8IHVuaXh3YXJlNyogfCBzY28zLjJ2NS4wLlswMjRdKikKKyAgICAgIG5vX3VuZGVmaW5lZF9mbGFnPScke3dsfS16LHRleHQnCisgICAgICBhcmNoaXZlX2NtZHNfbmVlZF9sYz1ubworICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubworICAgICAgcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJworCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgIGVsc2UKKwlhcmNoaXZlX2NtZHM9JyRDQyAtRyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1HICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgIGZpCisgICAgICA7OworCisgICAgc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KikKKyAgICAgICMgTm90ZTogV2UgY2FuIE5PVCB1c2UgLXogZGVmcyBhcyB3ZSBtaWdodCBkZXNpcmUsIGJlY2F1c2Ugd2UgZG8gbm90CisgICAgICAjIGxpbmsgd2l0aCAtbGMsIGFuZCB0aGF0IHdvdWxkIGNhdXNlIGFueSBzeW1ib2xzIHVzZWQgZnJvbSBsaWJjIHRvCisgICAgICAjIGFsd2F5cyBiZSB1bnJlc29sdmVkLCB3aGljaCBtZWFucyBqdXN0IGFib3V0IG5vIGxpYnJhcnkgd291bGQKKyAgICAgICMgZXZlciBsaW5rIGNvcnJlY3RseS4gIElmIHdlJ3JlIG5vdCB1c2luZyBHTlUgbGQgd2UgdXNlIC16IHRleHQKKyAgICAgICMgdGhvdWdoLCB3aGljaCBkb2VzIGNhdGNoIHNvbWUgYmFkIHN5bWJvbHMgYnV0IGlzbid0IGFzIGhlYXZ5LWhhbmRlZAorICAgICAgIyBhcyAteiBkZWZzLgorICAgICAgbm9fdW5kZWZpbmVkX2ZsYWc9JyR7d2x9LXosdGV4dCcKKyAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnPScke3dsfS16LG5vZGVmcycKKyAgICAgIGFyY2hpdmVfY21kc19uZWVkX2xjPW5vCisgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1SLCRsaWJkaXInCisgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPSc6JworICAgICAgbGlua19hbGxfZGVwbGlicz15ZXMKKyAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nJHt3bH0tQmV4cG9ydCcKKyAgICAgIHJ1bnBhdGhfdmFyPSdMRF9SVU5fUEFUSCcKKworICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICBlbHNlCisJYXJjaGl2ZV9jbWRzPSckQ0MgLUcgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtRyAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICBmaQorICAgICAgOzsKKworICAgIHV0czQqKQorICAgICAgYXJjaGl2ZV9jbWRzPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCisgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCisgICAgICA7OworCisgICAgKikKKyAgICAgIGxkX3NobGlicz1ubworICAgICAgOzsKKyAgICBlc2FjCisKKyAgICBpZiB0ZXN0IHgkaG9zdF92ZW5kb3IgPSB4c25pOyB0aGVuCisgICAgICBjYXNlICRob3N0IGluCisgICAgICBzeXN2NCB8IHN5c3Y0LjJ1dzIqIHwgc3lzdjQuMyogfCBzeXN2NSopCisJZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPScke3dsfS1CbGFyZ2VkeW5zeW0nCisJOzsKKyAgICAgIGVzYWMKKyAgICBmaQorICBmaQorCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGxkX3NobGlicyIgPiY1CiskYXNfZWNobyAiJGxkX3NobGlicyIgPiY2OyB9Cit0ZXN0ICIkbGRfc2hsaWJzIiA9IG5vICYmIGNhbl9idWlsZF9zaGFyZWQ9bm8KKword2l0aF9nbnVfbGQ9JHdpdGhfZ251X2xkCisKKworCisKKworCisKKworCisKKworCisKKworCisjCisjIERvIHdlIG5lZWQgdG8gZXhwbGljaXRseSBsaW5rIGxpYmM/CisjCitjYXNlICJ4JGFyY2hpdmVfY21kc19uZWVkX2xjIiBpbgoreHx4eWVzKQorICAjIEFzc3VtZSAtbGMgc2hvdWxkIGJlIGFkZGVkCisgIGFyY2hpdmVfY21kc19uZWVkX2xjPXllcworCisgIGlmIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyAmJiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgIGNhc2UgJGFyY2hpdmVfY21kcyBpbgorICAgIConficqKQorICAgICAgIyBGSVhNRTogd2UgbWF5IGhhdmUgdG8gZGVhbCB3aXRoIG11bHRpLWNvbW1hbmQgc2VxdWVuY2VzLgorICAgICAgOzsKKyAgICAnJENDICcqKQorICAgICAgIyBUZXN0IHdoZXRoZXIgdGhlIGNvbXBpbGVyIGltcGxpY2l0bHkgbGlua3Mgd2l0aCAtbGMgc2luY2Ugb24gc29tZQorICAgICAgIyBzeXN0ZW1zLCAtbGdjYyBoYXMgdG8gY29tZSBiZWZvcmUgLWxjLiBJZiBnY2MgYWxyZWFkeSBwYXNzZXMgLWxjCisgICAgICAjIHRvIGxkLCBkb24ndCBhZGQgLWxjIGJlZm9yZSAtbGdjYy4KKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciAtbGMgc2hvdWxkIGJlIGV4cGxpY2l0bHkgbGlua2VkIGluIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgLWxjIHNob3VsZCBiZSBleHBsaWNpdGx5IGxpbmtlZCBpbi4uLiAiID4mNjsgfQorICAgICAgJFJNIGNvbmZ0ZXN0KgorICAgICAgZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CisKKyAgICAgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19jb21waWxlXCIiOyB9ID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gMj5jb25mdGVzdC5lcnI7IHRoZW4KKyAgICAgICAgc29uYW1lPWNvbmZ0ZXN0CisgICAgICAgIGxpYj1jb25mdGVzdAorICAgICAgICBsaWJvYmpzPWNvbmZ0ZXN0LiRhY19vYmpleHQKKyAgICAgICAgZGVwbGlicz0KKyAgICAgICAgd2w9JGx0X3Byb2dfY29tcGlsZXJfd2wKKwlwaWNfZmxhZz0kbHRfcHJvZ19jb21waWxlcl9waWMKKyAgICAgICAgY29tcGlsZXJfZmxhZ3M9LXYKKyAgICAgICAgbGlua2VyX2ZsYWdzPS12CisgICAgICAgIHZlcnN0cmluZz0KKyAgICAgICAgb3V0cHV0X29iamRpcj0uCisgICAgICAgIGxpYm5hbWU9Y29uZnRlc3QKKyAgICAgICAgbHRfc2F2ZV9hbGxvd191bmRlZmluZWRfZmxhZz0kYWxsb3dfdW5kZWZpbmVkX2ZsYWcKKyAgICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9CisgICAgICAgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhcmNoaXZlX2NtZHMgMlw+XCYxIFx8ICRHUkVQIFwiIC1sYyBcIiBcPi9kZXYvbnVsbCAyXD5cJjFcIiI7IH0gPiY1CisgIChldmFsICRhcmNoaXZlX2NtZHMgMlw+XCYxIFx8ICRHUkVQIFwiIC1sYyBcIiBcPi9kZXYvbnVsbCAyXD5cJjEpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9CisgICAgICAgIHRoZW4KKwkgIGFyY2hpdmVfY21kc19uZWVkX2xjPW5vCisgICAgICAgIGVsc2UKKwkgIGFyY2hpdmVfY21kc19uZWVkX2xjPXllcworICAgICAgICBmaQorICAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZz0kbHRfc2F2ZV9hbGxvd191bmRlZmluZWRfZmxhZworICAgICAgZWxzZQorICAgICAgICBjYXQgY29uZnRlc3QuZXJyIDE+JjUKKyAgICAgIGZpCisgICAgICAkUk0gY29uZnRlc3QqCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFyY2hpdmVfY21kc19uZWVkX2xjIiA+JjUKKyRhc19lY2hvICIkYXJjaGl2ZV9jbWRzX25lZWRfbGMiID4mNjsgfQorICAgICAgOzsKKyAgICBlc2FjCisgIGZpCisgIDs7Citlc2FjCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBkeW5hbWljIGxpbmtlciBjaGFyYWN0ZXJpc3RpY3MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZHluYW1pYyBsaW5rZXIgY2hhcmFjdGVyaXN0aWNzLi4uICIgPiY2OyB9CisKK2lmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBkYXJ3aW4qKSBsdF9hd2tfYXJnPSIvXmxpYnJhcmllczovLC9MUi8iIDs7CisgICAgKikgbHRfYXdrX2FyZz0iL15saWJyYXJpZXM6LyIgOzsKKyAgZXNhYworICBsdF9zZWFyY2hfcGF0aF9zcGVjPWAkQ0MgLXByaW50LXNlYXJjaC1kaXJzIHwgYXdrICRsdF9hd2tfYXJnIHwgJFNFRCAtZSAicy9ebGlicmFyaWVzOi8vIiAtZSAicyw9LywvLGciYAorICBpZiAkRUNITyAiJGx0X3NlYXJjaF9wYXRoX3NwZWMiIHwgJEdSRVAgJzsnID4vZGV2L251bGwgOyB0aGVuCisgICAgIyBpZiB0aGUgcGF0aCBjb250YWlucyAiOyIgdGhlbiB3ZSBhc3N1bWUgaXQgdG8gYmUgdGhlIHNlcGFyYXRvcgorICAgICMgb3RoZXJ3aXNlIGRlZmF1bHQgdG8gdGhlIHN0YW5kYXJkIHBhdGggc2VwYXJhdG9yIChpLmUuICI6IikgLSBpdCBpcworICAgICMgYXNzdW1lZCB0aGF0IG5vIHBhcnQgb2YgYSBub3JtYWwgcGF0aG5hbWUgY29udGFpbnMgIjsiIGJ1dCB0aGF0IHNob3VsZAorICAgICMgb2theSBpbiB0aGUgcmVhbCB3b3JsZCB3aGVyZSAiOyIgaW4gZGlycGF0aHMgaXMgaXRzZWxmIHByb2JsZW1hdGljLgorICAgIGx0X3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkbHRfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICdzLzsvIC9nJ2AKKyAgZWxzZQorICAgIGx0X3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkbHRfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEICAtZSAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKKyAgZmkKKyAgIyBPaywgbm93IHdlIGhhdmUgdGhlIHBhdGgsIHNlcGFyYXRlZCBieSBzcGFjZXMsIHdlIGNhbiBzdGVwIHRocm91Z2ggaXQKKyAgIyBhbmQgYWRkIG11bHRpbGliIGRpciBpZiBuZWNlc3NhcnkuCisgIGx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjPQorICBsdF9tdWx0aV9vc19kaXI9YCRDQyAkQ1BQRkxBR1MgJENGTEFHUyAkTERGTEFHUyAtcHJpbnQtbXVsdGktb3MtZGlyZWN0b3J5IDI+L2Rldi9udWxsYAorICBmb3IgbHRfc3lzX3BhdGggaW4gJGx0X3NlYXJjaF9wYXRoX3NwZWM7IGRvCisgICAgaWYgdGVzdCAtZCAiJGx0X3N5c19wYXRoLyRsdF9tdWx0aV9vc19kaXIiOyB0aGVuCisgICAgICBsdF90bXBfbHRfc2VhcmNoX3BhdGhfc3BlYz0iJGx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjICRsdF9zeXNfcGF0aC8kbHRfbXVsdGlfb3NfZGlyIgorICAgIGVsc2UKKyAgICAgIHRlc3QgLWQgIiRsdF9zeXNfcGF0aCIgJiYgXAorCWx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjPSIkbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWMgJGx0X3N5c19wYXRoIgorICAgIGZpCisgIGRvbmUKKyAgbHRfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gJGx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjIHwgYXdrICcKK0JFR0lOIHtSUz0iICI7IEZTPSIvfFxuIjt9IHsKKyAgbHRfZm9vPSIiOworICBsdF9jb3VudD0wOworICBmb3IgKGx0X2kgPSBORjsgbHRfaSA+IDA7IGx0X2ktLSkgeworICAgIGlmICgkbHRfaSAhPSAiIiAmJiAkbHRfaSAhPSAiLiIpIHsKKyAgICAgIGlmICgkbHRfaSA9PSAiLi4iKSB7CisgICAgICAgIGx0X2NvdW50Kys7CisgICAgICB9IGVsc2UgeworICAgICAgICBpZiAobHRfY291bnQgPT0gMCkgeworICAgICAgICAgIGx0X2Zvbz0iLyIgJGx0X2kgbHRfZm9vOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGx0X2NvdW50LS07CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0KKyAgaWYgKGx0X2ZvbyAhPSAiIikgeyBsdF9mcmVxW2x0X2Zvb10rKzsgfQorICBpZiAobHRfZnJlcVtsdF9mb29dID09IDEpIHsgcHJpbnQgbHRfZm9vOyB9Cit9J2AKKyAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAkbHRfc2VhcmNoX3BhdGhfc3BlY2AKK2Vsc2UKKyAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvbGliIC91c3IvbGliIC91c3IvbG9jYWwvbGliIgorZmkKK2xpYnJhcnlfbmFtZXNfc3BlYz0KK2xpYm5hbWVfc3BlYz0nbGliJG5hbWUnCitzb25hbWVfc3BlYz0KK3NocmV4dF9jbWRzPSIuc28iCitwb3N0aW5zdGFsbF9jbWRzPQorcG9zdHVuaW5zdGFsbF9jbWRzPQorZmluaXNoX2NtZHM9CitmaW5pc2hfZXZhbD0KK3NobGlicGF0aF92YXI9CitzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9dW5rbm93bgordmVyc2lvbl90eXBlPW5vbmUKK2R5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBsZC5zbyIKK3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvbGliIC91c3IvbGliIgorbmVlZF9saWJfcHJlZml4PXVua25vd24KK2hhcmRjb2RlX2ludG9fbGlicz1ubworCisjIHdoZW4geW91IHNldCBuZWVkX3ZlcnNpb24gdG8gbm8sIG1ha2Ugc3VyZSBpdCBkb2VzIG5vdCBjYXVzZSAtc2V0X3ZlcnNpb24KKyMgZmxhZ3MgdG8gYmUgbGVmdCB3aXRob3V0IGFyZ3VtZW50cworbmVlZF92ZXJzaW9uPXVua25vd24KKworY2FzZSAkaG9zdF9vcyBpbgorYWl4MyopCisgIHZlcnNpb25fdHlwZT1saW51eAorICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJGxpYm5hbWUuYScKKyAgc2hsaWJwYXRoX3Zhcj1MSUJQQVRICisKKyAgIyBBSVggMyBoYXMgbm8gdmVyc2lvbmluZyBzdXBwb3J0LCBzbyB3ZSBhcHBlbmQgYSBtYWpvciB2ZXJzaW9uIHRvIHRoZSBuYW1lLgorICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICA7OworCithaXhbNC05XSopCisgIHZlcnNpb25fdHlwZT1saW51eAorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKyAgICAjIEFJWCA1IHN1cHBvcnRzIElBNjQKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBlbHNlCisgICAgIyBXaXRoIEdDQyB1cCB0byAyLjk1LngsIGNvbGxlY3QyIHdvdWxkIGNyZWF0ZSBhbiBpbXBvcnQgZmlsZQorICAgICMgZm9yIGRlcGVuZGVuY2UgbGlicmFyaWVzLiAgVGhlIGltcG9ydCBmaWxlIHdvdWxkIHN0YXJ0IHdpdGgKKyAgICAjIHRoZSBsaW5lIGAjISAuJy4gIFRoaXMgd291bGQgY2F1c2UgdGhlIGdlbmVyYXRlZCBsaWJyYXJ5IHRvCisgICAgIyBkZXBlbmQgb24gYC4nLCBhbHdheXMgYW4gaW52YWxpZCBsaWJyYXJ5LiAgVGhpcyB3YXMgZml4ZWQgaW4KKyAgICAjIGRldmVsb3BtZW50IHNuYXBzaG90cyBvZiBHQ0MgcHJpb3IgdG8gMy4wLgorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIGFpeDQgfCBhaXg0LlswMV0gfCBhaXg0LlswMV0uKikKKyAgICAgIGlmIHsgZWNobyAnI2lmIF9fR05VQ19fID4gMiB8fCAoX19HTlVDX18gPT0gMiAmJiBfX0dOVUNfTUlOT1JfXyA+PSA5NyknCisJICAgZWNobyAnIHllcyAnCisJICAgZWNobyAnI2VuZGlmJzsgfSB8ICR7Q0N9IC1FIC0gfCAkR1JFUCB5ZXMgPiAvZGV2L251bGw7IHRoZW4KKwk6CisgICAgICBlbHNlCisJY2FuX2J1aWxkX3NoYXJlZD1ubworICAgICAgZmkKKyAgICAgIDs7CisgICAgZXNhYworICAgICMgQUlYIChvbiBQb3dlciopIGhhcyBubyB2ZXJzaW9uaW5nIHN1cHBvcnQsIHNvIGN1cnJlbnRseSB3ZSBjYW4gbm90IGhhcmRjb2RlIGNvcnJlY3QKKyAgICAjIHNvbmFtZSBpbnRvIGV4ZWN1dGFibGUuIFByb2JhYmx5IHdlIGNhbiBhZGQgdmVyc2lvbmluZyBzdXBwb3J0IHRvCisgICAgIyBjb2xsZWN0Miwgc28gYWRkaXRpb25hbCBsaW5rcyBjYW4gYmUgdXNlZnVsIGluIGZ1dHVyZS4KKyAgICBpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KKyAgICAgICMgSWYgdXNpbmcgcnVuIHRpbWUgbGlua2luZyAob24gQUlYIDQuMiBvciBsYXRlcikgdXNlIGxpYjxuYW1lPi5zbworICAgICAgIyBpbnN0ZWFkIG9mIGxpYjxuYW1lPi5hIHRvIGxldCBwZW9wbGUga25vdyB0aGF0IHRoZXNlIGFyZSBub3QKKyAgICAgICMgdHlwaWNhbCBBSVggc2hhcmVkIGxpYnJhcmllcy4KKyAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgIGVsc2UKKyAgICAgICMgV2UgcHJlc2VydmUgLmEgYXMgZXh0ZW5zaW9uIGZvciBzaGFyZWQgbGlicmFyaWVzIHRocm91Z2ggQUlYNC4yCisgICAgICAjIGFuZCBsYXRlciB3aGVuIHdlIGFyZSBub3QgZG9pbmcgcnVuIHRpbWUgbGlua2luZy4KKyAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0uYSAkbGlibmFtZS5hJworICAgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgICBmaQorICAgIHNobGlicGF0aF92YXI9TElCUEFUSAorICBmaQorICA7OworCithbWlnYW9zKikKKyAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgcG93ZXJwYykKKyAgICAjIFNpbmNlIEp1bHkgMjAwNyBBbWlnYU9TNCBvZmZpY2lhbGx5IHN1cHBvcnRzIC5zbyBsaWJyYXJpZXMuCisgICAgIyBXaGVuIGNvbXBpbGluZyB0aGUgZXhlY3V0YWJsZSwgYWRkIC11c2UtZHlubGQgLUxzb2JqczogdG8gdGhlIGNvbXBpbGVsaW5lLgorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgIDs7CisgIG02OGspCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5peGxpYnJhcnkgJGxpYm5hbWUuYScKKyAgICAjIENyZWF0ZSAke2xpYm5hbWV9X2l4bGlicmFyeS5hIGVudHJpZXMgaW4gL3N5cy9saWJzLgorICAgIGZpbmlzaF9ldmFsPSdmb3IgbGliIGluIGBscyAkbGliZGlyLyouaXhsaWJyYXJ5IDI+L2Rldi9udWxsYDsgZG8gbGlibmFtZT1gJEVDSE8gIlgkbGliIiB8ICRYc2VkIC1lICdcJydzJV4uKi9cKFteL10qXClcLml4bGlicmFyeSQlXDElJ1wnJ2A7IHRlc3QgJFJNIC9zeXMvbGlicy8ke2xpYm5hbWV9X2l4bGlicmFyeS5hOyAkc2hvdyAiY2QgL3N5cy9saWJzICYmICRMTl9TICRsaWIgJHtsaWJuYW1lfV9peGxpYnJhcnkuYSI7IGNkIC9zeXMvbGlicyAmJiAkTE5fUyAkbGliICR7bGlibmFtZX1faXhsaWJyYXJ5LmEgfHwgZXhpdCAxOyBkb25lJworICAgIDs7CisgIGVzYWMKKyAgOzsKKworYmVvcyopCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCisgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBsZC5zbyIKKyAgc2hsaWJwYXRoX3Zhcj1MSUJSQVJZX1BBVEgKKyAgOzsKKworYnNkaVs0NV0qKQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAkbGliZGlyJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii9zaGxpYiAvdXNyL2xpYiAvdXNyL1gxMS9saWIgL3Vzci9jb250cmliL2xpYiAvbGliIC91c3IvbG9jYWwvbGliIgorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL3NobGliIC91c3IvbGliIC91c3IvbG9jYWwvbGliIgorICAjIHRoZSBkZWZhdWx0IGxkLnNvLmNvbmYgYWxzbyBjb250YWlucyAvdXNyL2NvbnRyaWIvbGliIGFuZAorICAjIC91c3IvWDExUjYvbGliICgvdXNyL1gxMSBpcyBhIGxpbmsgdG8gL3Vzci9YMTFSNiksIGJ1dCBsZXQgdXMgYWxsb3cKKyAgIyBsaWJ0b29sIHRvIGhhcmQtY29kZSB0aGVzZSBpbnRvIHByb2dyYW1zCisgIDs7CisKK2N5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgdmVyc2lvbl90eXBlPXdpbmRvd3MKKyAgc2hyZXh0X2NtZHM9Ii5kbGwiCisgIG5lZWRfdmVyc2lvbj1ubworICBuZWVkX2xpYl9wcmVmaXg9bm8KKworICBjYXNlICRHQ0MsJGhvc3Rfb3MgaW4KKyAgeWVzLGN5Z3dpbiogfCB5ZXMsbWluZ3cqIHwgeWVzLHB3MzIqIHwgeWVzLGNlZ2NjKikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLmRsbC5hJworICAgICMgRExMIGlzIGluc3RhbGxlZCB0byAkKGxpYmRpcikvLi4vYmluIGJ5IHBvc3RpbnN0YWxsX2NtZHMKKyAgICBwb3N0aW5zdGFsbF9jbWRzPSdiYXNlX2ZpbGU9YGJhc2VuYW1lIFwke2ZpbGV9YH4KKyAgICAgIGRscGF0aD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGRpci8nXCcnXCR7YmFzZV9maWxlfSdcJydpOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+CisgICAgICBkbGRpcj0kZGVzdGRpci9gZGlybmFtZSBcJGRscGF0aGB+CisgICAgICB0ZXN0IC1kIFwkZGxkaXIgfHwgbWtkaXIgLXAgXCRkbGRpcn4KKyAgICAgICRpbnN0YWxsX3Byb2cgJGRpci8kZGxuYW1lIFwkZGxkaXIvJGRsbmFtZX4KKyAgICAgIGNobW9kIGEreCBcJGRsZGlyLyRkbG5hbWV+CisgICAgICBpZiB0ZXN0IC1uICdcJyckc3RyaXBtZSdcJycgJiYgdGVzdCAtbiAnXCcnJHN0cmlwbGliJ1wnJzsgdGhlbgorICAgICAgICBldmFsICdcJyckc3RyaXBsaWIgXCRkbGRpci8kZGxuYW1lJ1wnJyB8fCBleGl0IFwkPzsKKyAgICAgIGZpJworICAgIHBvc3R1bmluc3RhbGxfY21kcz0nZGxkbGw9YCRTSEVMTCAyPiYxIC1jICdcJycuICRmaWxlOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+CisgICAgICBkbHBhdGg9JGRpci9cJGRsZGxsfgorICAgICAgICRSTSBcJGRscGF0aCcKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgY3lnd2luKikKKyAgICAgICMgQ3lnd2luIERMTHMgdXNlICdjeWcnIHByZWZpeCByYXRoZXIgdGhhbiAnbGliJworICAgICAgc29uYW1lX3NwZWM9J2BlY2hvICR7bGlibmFtZX0gfCBzZWQgLWUgJ3MvXmxpYi9jeWcvJ2BgZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JworICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiAvbGliL3czMmFwaSAvbGliIC91c3IvbG9jYWwvbGliIgorICAgICAgOzsKKyAgICBtaW5ndyogfCBjZWdjYyopCisgICAgICAjIE1pbkdXIERMTHMgdXNlIHRyYWRpdGlvbmFsICdsaWInIHByZWZpeAorICAgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JworICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkQ0MgLXByaW50LXNlYXJjaC1kaXJzIHwgJEdSRVAgIl5saWJyYXJpZXM6IiB8ICRTRUQgLWUgInMvXmxpYnJhcmllczovLyIgLWUgInMsPS8sLyxnImAKKyAgICAgIGlmICRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRHUkVQICc7W2MtekMtWl06LycgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgICAjIEl0IGlzIG1vc3QgcHJvYmFibHkgYSBXaW5kb3dzIGZvcm1hdCBQQVRIIHByaW50ZWQgYnkKKyAgICAgICAgIyBtaW5ndyBnY2MsIGJ1dCB3ZSBhcmUgcnVubmluZyBvbiBDeWd3aW4uIEdjYyBwcmludHMgaXRzIHNlYXJjaAorICAgICAgICAjIHBhdGggd2l0aCA7IHNlcGFyYXRvcnMsIGFuZCB3aXRoIGRyaXZlIGxldHRlcnMuIFdlIGNhbiBoYW5kbGUgdGhlCisgICAgICAgICMgZHJpdmUgbGV0dGVycyAoY3lnd2luIGZpbGV1dGlscyB1bmRlcnN0YW5kcyB0aGVtKSwgc28gbGVhdmUgdGhlbSwKKyAgICAgICAgIyBlc3BlY2lhbGx5IGFzIHdlIG1pZ2h0IHBhc3MgZmlsZXMgZm91bmQgdGhlcmUgdG8gYSBtaW5ndyBvYmpkdW1wLAorICAgICAgICAjIHdoaWNoIHdvdWxkbid0IHVuZGVyc3RhbmQgYSBjeWd3aW5pZmllZCBwYXRoLiBBaGguCisgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAncy87LyAvZydgCisgICAgICBlbHNlCisgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAgLWUgInMvJFBBVEhfU0VQQVJBVE9SLyAvZyJgCisgICAgICBmaQorICAgICAgOzsKKyAgICBwdzMyKikKKyAgICAgICMgcHczMiBETExzIHVzZSAncHcnIHByZWZpeCByYXRoZXIgdGhhbiAnbGliJworICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSdgZWNobyAke2xpYm5hbWV9IHwgc2VkIC1lICdzL15saWIvcHcvJ2BgZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JworICAgICAgOzsKKyAgICBlc2FjCisgICAgOzsKKworICAqKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfWBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUubGliJworICAgIDs7CisgIGVzYWMKKyAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKKyAgIyBGSVhNRTogZmlyc3Qgd2Ugc2hvdWxkIHNlYXJjaCAuIGFuZCB0aGUgZGlyZWN0b3J5IHRoZSBleGVjdXRhYmxlIGlzIGluCisgIHNobGlicGF0aF92YXI9UEFUSAorICA7OworCitkYXJ3aW4qIHwgcmhhcHNvZHkqKQorICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZHlsZCIKKyAgdmVyc2lvbl90eXBlPWRhcndpbgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke21ham9yfSRzaGFyZWRfZXh0ICR7bGlibmFtZX0kc2hhcmVkX2V4dCcKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHttYWpvcn0kc2hhcmVkX2V4dCcKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBzaGxpYnBhdGhfdmFyPURZTERfTElCUkFSWV9QQVRICisgIHNocmV4dF9jbWRzPSdgdGVzdCAuJG1vZHVsZSA9IC55ZXMgJiYgZWNobyAuc28gfHwgZWNobyAuZHlsaWJgJworCisgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyAvdXNyL2xvY2FsL2xpYiIKKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy91c3IvbG9jYWwvbGliIC9saWIgL3Vzci9saWInCisgIDs7CisKK2RndXgqKQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIDs7CisKK2ZyZWVic2QxKikKKyAgZHluYW1pY19saW5rZXI9bm8KKyAgOzsKKworZnJlZWJzZCogfCBkcmFnb25mbHkqKQorICAjIERyYWdvbkZseSBkb2VzIG5vdCBoYXZlIGFvdXQuICBXaGVuL2lmIHRoZXkgaW1wbGVtZW50IGEgbmV3CisgICMgdmVyc2lvbmluZyBtZWNoYW5pc20sIGFkanVzdCB0aGlzLgorICBpZiB0ZXN0IC14IC91c3IvYmluL29iamZvcm1hdDsgdGhlbgorICAgIG9iamZvcm1hdD1gL3Vzci9iaW4vb2JqZm9ybWF0YAorICBlbHNlCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgIGZyZWVic2RbMTIzXSopIG9iamZvcm1hdD1hb3V0IDs7CisgICAgKikgb2JqZm9ybWF0PWVsZiA7OworICAgIGVzYWMKKyAgZmkKKyAgdmVyc2lvbl90eXBlPWZyZWVic2QtJG9iamZvcm1hdAorICBjYXNlICR2ZXJzaW9uX3R5cGUgaW4KKyAgICBmcmVlYnNkLWVsZiopCisgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9ICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgICAgIG5lZWRfdmVyc2lvbj1ubworICAgICAgbmVlZF9saWJfcHJlZml4PW5vCisgICAgICA7OworICAgIGZyZWVic2QtKikKKyAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAkbGlibmFtZSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4JworICAgICAgbmVlZF92ZXJzaW9uPXllcworICAgICAgOzsKKyAgZXNhYworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBjYXNlICRob3N0X29zIGluCisgIGZyZWVic2QyKikKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgICAgOzsKKyAgZnJlZWJzZDMuWzAxXSogfCBmcmVlYnNkZWxmMy5bMDFdKikKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgICAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAgIDs7CisgIGZyZWVic2QzLlsyLTldKiB8IGZyZWVic2RlbGYzLlsyLTldKiB8IFwKKyAgZnJlZWJzZDQuWzAtNV0gfCBmcmVlYnNkZWxmNC5bMC01XSB8IGZyZWVic2Q0LjEuMSB8IGZyZWVic2RlbGY0LjEuMSkKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICAgOzsKKyAgKikgIyBmcm9tIDQuNiBvbiwgYW5kIERyYWdvbkZseQorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICAgOzsKKyAgZXNhYworICA7OworCitnbnUqKQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHttYWpvcn0gJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgOzsKKworaHB1eDkqIHwgaHB1eDEwKiB8IGhwdXgxMSopCisgICMgR2l2ZSBhIHNvbmFtZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBtYWpvciB2ZXJzaW9uIHNvIHRoYXQgZGxkLnNsIHJlZnVzZXMgdG8KKyAgIyBsaW5rIGFnYWluc3Qgb3RoZXIgdmVyc2lvbnMuCisgIHZlcnNpb25fdHlwZT1zdW5vcworICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGNhc2UgJGhvc3RfY3B1IGluCisgIGlhNjQqKQorICAgIHNocmV4dF9jbWRzPScuc28nCisgICAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkbGQuc28iCisgICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzICMgVW5sZXNzICtub2VudnZhciBpcyBzcGVjaWZpZWQuCisgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgICBpZiB0ZXN0ICJYJEhQVVhfSUE2NF9NT0RFIiA9IFgzMjsgdGhlbgorICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYi9ocHV4MzIgL3Vzci9sb2NhbC9saWIvaHB1eDMyIC91c3IvbG9jYWwvbGliIgorICAgIGVsc2UKKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIvaHB1eDY0IC91c3IvbG9jYWwvbGliL2hwdXg2NCIKKyAgICBmaQorICAgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMKKyAgICA7OworICBocHBhKjY0KikKKyAgICBzaHJleHRfY21kcz0nLnNsJworICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZGxkLnNsIgorICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRIICMgSG93IHNob3VsZCB3ZSBoYW5kbGUgU0hMSUJfUEFUSAorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMgIyBVbmxlc3MgK25vZW52dmFyIGlzIHNwZWNpZmllZC4KKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIvcGEyMF82NCAvdXNyL2Njcy9saWIvcGEyMF82NCIKKyAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjCisgICAgOzsKKyAgKikKKyAgICBzaHJleHRfY21kcz0nLnNsJworICAgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkbGQuc2wiCisgICAgc2hsaWJwYXRoX3Zhcj1TSExJQl9QQVRICisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vICMgK3MgaXMgcmVxdWlyZWQgdG8gZW5hYmxlIFNITElCX1BBVEgKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICAgIDs7CisgIGVzYWMKKyAgIyBIUC1VWCBydW5zICpyZWFsbHkqIHNsb3dseSB1bmxlc3Mgc2hhcmVkIGxpYnJhcmllcyBhcmUgbW9kZSA1NTUuCisgIHBvc3RpbnN0YWxsX2NtZHM9J2NobW9kIDU1NSAkbGliJworICA7OworCitpbnRlcml4WzMtOV0qKQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBkeW5hbWljX2xpbmtlcj0nSW50ZXJpeCAzLnggbGQuc28uMSAoUEUsIGxpa2UgRUxGKScKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgOzsKKworaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKKyAgY2FzZSAkaG9zdF9vcyBpbgorICAgIG5vbnN0b3B1eCopIHZlcnNpb25fdHlwZT1ub25zdG9wdXggOzsKKyAgICAqKQorCWlmIHRlc3QgIiRsdF9jdl9wcm9nX2dudV9sZCIgPSB5ZXM7IHRoZW4KKwkJdmVyc2lvbl90eXBlPWxpbnV4CisJZWxzZQorCQl2ZXJzaW9uX3R5cGU9aXJpeAorCWZpIDs7CisgIGVzYWMKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgaXJpeDUqIHwgbm9uc3RvcHV4KikKKyAgICBsaWJzdWZmPSBzaGxpYnN1ZmY9CisgICAgOzsKKyAgKikKKyAgICBjYXNlICRMRCBpbiAjIGxpYnRvb2wubTQgd2lsbCBhZGQgb25lIG9mIHRoZXNlIHN3aXRjaGVzIHRvIExECisgICAgKi0zMnwqIi0zMiAifCotbWVsZjMyYnNtaXB8KiItbWVsZjMyYnNtaXAgIikKKyAgICAgIGxpYnN1ZmY9IHNobGlic3VmZj0gbGlibWFnaWM9MzItYml0OzsKKyAgICAqLW4zMnwqIi1uMzIgInwqLW1lbGYzMmJtaXBuMzJ8KiItbWVsZjMyYm1pcG4zMiAiKQorICAgICAgbGlic3VmZj0zMiBzaGxpYnN1ZmY9TjMyIGxpYm1hZ2ljPU4zMjs7CisgICAgKi02NHwqIi02NCAifCotbWVsZjY0Ym1pcHwqIi1tZWxmNjRibWlwICIpCisgICAgICBsaWJzdWZmPTY0IHNobGlic3VmZj02NCBsaWJtYWdpYz02NC1iaXQ7OworICAgICopIGxpYnN1ZmY9IHNobGlic3VmZj0gbGlibWFnaWM9bmV2ZXItbWF0Y2g7OworICAgIGVzYWMKKyAgICA7OworICBlc2FjCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWSR7c2hsaWJzdWZmfV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliJHtsaWJzdWZmfSAvbGliJHtsaWJzdWZmfSAvdXNyL2xvY2FsL2xpYiR7bGlic3VmZn0iCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiR7bGlic3VmZn0gL2xpYiR7bGlic3VmZn0iCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgOzsKKworIyBObyBzaGFyZWQgbGliIHN1cHBvcnQgZm9yIExpbnV4IG9sZGxkLCBhb3V0LCBvciBjb2ZmLgorbGludXgqb2xkbGQqIHwgbGludXgqYW91dCogfCBsaW51eCpjb2ZmKikKKyAgZHluYW1pY19saW5rZXI9bm8KKyAgOzsKKworIyBUaGlzIG11c3QgYmUgTGludXggRUxGLgorbGludXgqIHwgaypic2QqLWdudSB8IGtvcGVuc29sYXJpcyotZ251KQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgLW4gJGxpYmRpcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgICMgU29tZSBiaW51dGlscyBsZCBhcmUgcGF0Y2hlZCB0byBzZXQgRFRfUlVOUEFUSAorICBzYXZlX0xERkxBR1M9JExERkxBR1MKKyAgc2F2ZV9saWJkaXI9JGxpYmRpcgorICBldmFsICJsaWJkaXI9L2Zvbzsgd2w9XCIkbHRfcHJvZ19jb21waWxlcl93bFwiOyBcCisgICAgICAgTERGTEFHUz1cIlwkTERGTEFHUyAkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiIgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgaWYgICgkT0JKRFVNUCAtcCBjb25mdGVzdCRhY19leGVleHQpIDI+L2Rldi9udWxsIHwgZ3JlcCAiUlVOUEFUSC4qJGxpYmRpciIgPi9kZXYvbnVsbDsgdGhlbiA6CisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKK2ZpCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgTERGTEFHUz0kc2F2ZV9MREZMQUdTCisgIGxpYmRpcj0kc2F2ZV9saWJkaXIKKworICAjIFRoaXMgaW1wbGllcyBubyBmYXN0X2luc3RhbGwsIHdoaWNoIGlzIHVuYWNjZXB0YWJsZS4KKyAgIyBTb21lIHJld29yayB3aWxsIGJlIG5lZWRlZCB0byBhbGxvdyBmb3IgZmFzdF9pbnN0YWxsCisgICMgYmVmb3JlIHRoaXMgY2FuIGJlIGVuYWJsZWQuCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKworICAjIEFwcGVuZCBsZC5zby5jb25mIGNvbnRlbnRzIHRvIHRoZSBzZWFyY2ggcGF0aAorICBpZiB0ZXN0IC1mIC9ldGMvbGQuc28uY29uZjsgdGhlbgorICAgIGx0X2xkX2V4dHJhPWBhd2sgJy9eaW5jbHVkZSAvIHsgc3lzdGVtKHNwcmludGYoImNkIC9ldGM7IGNhdCAlcyAyPi9kZXYvbnVsbCIsIFwkMikpOyBza2lwID0gMTsgfSB7IGlmICghc2tpcCkgcHJpbnQgXCQwOyBza2lwID0gMDsgfScgPCAvZXRjL2xkLnNvLmNvbmYgfCAkU0VEIC1lICdzLyMuKi8vOy9eWwkgXSpod2NhcFsJIF0vZDtzL1s6LAldLyAvZztzLz1bXj1dKiQvLztzLz1bXj0gXSogLyAvZzsvXiQvZCcgfCB0ciAnXG4nICcgJ2AKKyAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL2xpYiAvdXNyL2xpYiAkbHRfbGRfZXh0cmEiCisgIGZpCisKKyAgIyBXZSB1c2VkIHRvIHRlc3QgZm9yIC9saWIvbGQuc28uMSBhbmQgZGlzYWJsZSBzaGFyZWQgbGlicmFyaWVzIG9uCisgICMgcG93ZXJwYywgYmVjYXVzZSBNa0xpbnV4IG9ubHkgc3VwcG9ydGVkIHNoYXJlZCBsaWJyYXJpZXMgd2l0aCB0aGUKKyAgIyBHTlUgZHluYW1pYyBsaW5rZXIuICBTaW5jZSB0aGlzIHdhcyBicm9rZW4gd2l0aCBjcm9zcyBjb21waWxlcnMsCisgICMgbW9zdCBwb3dlcnBjLWxpbnV4IGJveGVzIHN1cHBvcnQgZHluYW1pYyBsaW5raW5nIHRoZXNlIGRheXMgYW5kCisgICMgcGVvcGxlIGNhbiBhbHdheXMgLS1kaXNhYmxlLXNoYXJlZCwgdGhlIHRlc3Qgd2FzIHJlbW92ZWQsIGFuZCB3ZQorICAjIGFzc3VtZSB0aGUgR05VL0xpbnV4IGR5bmFtaWMgbGlua2VyIGlzIGluIHVzZS4KKyAgZHluYW1pY19saW5rZXI9J0dOVS9MaW51eCBsZC5zbycKKyAgOzsKKworbmV0YnNkZWxmKi1nbnUpCisgIHZlcnNpb25fdHlwZT1saW51eAorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIGR5bmFtaWNfbGlua2VyPSdOZXRCU0QgbGQuZWxmX3NvJworICA7OworCituZXRic2QqKQorICB2ZXJzaW9uX3R5cGU9c3Vub3MKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX18gPi9kZXYvbnVsbDsgdGhlbgorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXgnCisgICAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgLW0gJGxpYmRpcicKKyAgICBkeW5hbWljX2xpbmtlcj0nTmV0QlNEIChhLm91dCkgbGQuc28nCisgIGVsc2UKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JworICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgICAgZHluYW1pY19saW5rZXI9J05ldEJTRCBsZC5lbGZfc28nCisgIGZpCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICA7OworCituZXdzb3M2KQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgOzsKKworKm50byogfCAqcW54KikKKyAgdmVyc2lvbl90eXBlPXFueAorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICBkeW5hbWljX2xpbmtlcj0nbGRxbnguc28nCisgIDs7CisKK29wZW5ic2QqKQorICB2ZXJzaW9uX3R5cGU9c3Vub3MKKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliIgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgIyBTb21lIG9sZGVyIHZlcnNpb25zIG9mIE9wZW5CU0QgKDMuMyBhdCBsZWFzdCkgKmRvKiBuZWVkIHZlcnNpb25lZCBsaWJzLgorICBjYXNlICRob3N0X29zIGluCisgICAgb3BlbmJzZDMuMyB8IG9wZW5ic2QzLjMuKikJbmVlZF92ZXJzaW9uPXllcyA7OworICAgICopCQkJCW5lZWRfdmVyc2lvbj1ubyAgOzsKKyAgZXNhYworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4JworICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAtbSAkbGliZGlyJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fYCIgfHwgdGVzdCAiJGhvc3Rfb3MtJGhvc3RfY3B1IiA9ICJvcGVuYnNkMi44LXBvd2VycGMiOyB0aGVuCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgb3BlbmJzZDIuWzg5XSB8IG9wZW5ic2QyLls4OV0uKikKKwlzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKwk7OworICAgICAgKikKKwlzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisJOzsKKyAgICAgIGVzYWMKKyAgZWxzZQorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgZmkKKyAgOzsKKworb3MyKikKKyAgbGlibmFtZV9zcGVjPSckbmFtZScKKyAgc2hyZXh0X2NtZHM9Ii5kbGwiCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHtzaGFyZWRfZXh0fSAkbGlibmFtZS5hJworICBkeW5hbWljX2xpbmtlcj0nT1MvMiBsZC5leGUnCisgIHNobGlicGF0aF92YXI9TElCUEFUSAorICA7OworCitvc2YzKiB8IG9zZjQqIHwgb3NmNSopCisgIHZlcnNpb25fdHlwZT1vc2YKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL3NobGliIC91c3IvY2NzL2xpYiAvdXNyL2xpYi9jbXBscnMvY2MgL3Vzci9saWIgL3Vzci9sb2NhbC9saWIgL3Zhci9zaGxpYiIKKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiCisgIDs7CisKK3Jkb3MqKQorICBkeW5hbWljX2xpbmtlcj1ubworICA7OworCitzb2xhcmlzKikKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAjIGxkZCBjb21wbGFpbnMgdW5sZXNzIGxpYnJhcmllcyBhcmUgZXhlY3V0YWJsZQorICBwb3N0aW5zdGFsbF9jbWRzPSdjaG1vZCAreCAkbGliJworICA7OworCitzdW5vczQqKQorICB2ZXJzaW9uX3R5cGU9c3Vub3MKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCcKKyAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovdXNyL2V0YyIgbGRjb25maWcgJGxpYmRpcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCisgICAgbmVlZF9saWJfcHJlZml4PW5vCisgIGZpCisgIG5lZWRfdmVyc2lvbj15ZXMKKyAgOzsKKworc3lzdjQgfCBzeXN2NC4zKikKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBjYXNlICRob3N0X3ZlbmRvciBpbgorICAgIHNuaSkKKyAgICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICAgICAgbmVlZF9saWJfcHJlZml4PW5vCisgICAgICBydW5wYXRoX3Zhcj1MRF9SVU5fUEFUSAorICAgICAgOzsKKyAgICBzaWVtZW5zKQorICAgICAgbmVlZF9saWJfcHJlZml4PW5vCisgICAgICA7OworICAgIG1vdG9yb2xhKQorICAgICAgbmVlZF9saWJfcHJlZml4PW5vCisgICAgICBuZWVkX3ZlcnNpb249bm8KKyAgICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPScvbGliIC91c3IvbGliIC91c3IvY2NzL2xpYicKKyAgICAgIDs7CisgIGVzYWMKKyAgOzsKKworc3lzdjQqTVAqKQorICBpZiB0ZXN0IC1kIC91c3IvbmVjIDt0aGVuCisgICAgdmVyc2lvbl90eXBlPWxpbnV4CisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSR7c2hhcmVkX2V4dH0uJHZlcnN1ZmZpeCAkbGlibmFtZSR7c2hhcmVkX2V4dH0uJG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgICBzb25hbWVfc3BlYz0nJGxpYm5hbWUke3NoYXJlZF9leHR9LiRtYWpvcicKKyAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBmaQorICA7OworCitzeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgdW5peHdhcmUqIHwgT3BlblVOSVgqIHwgc3lzdjQqdXcyKikKKyAgdmVyc2lvbl90eXBlPWZyZWVic2QtZWxmCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCisgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPScvdXNyL2xvY2FsL2xpYiAvdXNyL2dudS9saWIgL3Vzci9jY3MvbGliIC91c3IvbGliIC9saWInCisgIGVsc2UKKyAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Jy91c3IvY2NzL2xpYiAvdXNyL2xpYicKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgICBzY28zLjJ2NSopCisgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyAvbGliIgorCTs7CisgICAgZXNhYworICBmaQorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9saWInCisgIDs7CisKK3RwZiopCisgICMgVFBGIGlzIGEgY3Jvc3MtdGFyZ2V0IG9ubHkuICBQcmVmZXJyZWQgY3Jvc3MtaG9zdCA9IEdOVS9MaW51eC4KKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIDs7CisKK3V0czQqKQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIDs7CisKKyopCisgIGR5bmFtaWNfbGlua2VyPW5vCisgIDs7Citlc2FjCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGR5bmFtaWNfbGlua2VyIiA+JjUKKyRhc19lY2hvICIkZHluYW1pY19saW5rZXIiID4mNjsgfQordGVzdCAiJGR5bmFtaWNfbGlua2VyIiA9IG5vICYmIGNhbl9idWlsZF9zaGFyZWQ9bm8KKwordmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9IlBBVEggJHNobGlicGF0aF92YXIgJHJ1bnBhdGhfdmFyIgoraWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9IiR2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluayBHQ0NfRVhFQ19QUkVGSVggQ09NUElMRVJfUEFUSCBMSUJSQVJZX1BBVEgiCitmaQorCitpZiB0ZXN0ICIke2x0X2N2X3N5c19saWJfc2VhcmNoX3BhdGhfc3BlYytzZXR9IiA9IHNldDsgdGhlbgorICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRsdF9jdl9zeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiCitmaQoraWYgdGVzdCAiJHtsdF9jdl9zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYytzZXR9IiA9IHNldDsgdGhlbgorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iJGx0X2N2X3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjIgorZmkKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gaGFyZGNvZGUgbGlicmFyeSBwYXRocyBpbnRvIHByb2dyYW1zIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBoYXJkY29kZSBsaWJyYXJ5IHBhdGhzIGludG8gcHJvZ3JhbXMuLi4gIiA+JjY7IH0KK2hhcmRjb2RlX2FjdGlvbj0KK2lmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIiB8fAorICAgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyIiB8fAorICAgdGVzdCAiWCRoYXJkY29kZV9hdXRvbWF0aWMiID0gIlh5ZXMiIDsgdGhlbgorCisgICMgV2UgY2FuIGhhcmRjb2RlIG5vbi1leGlzdGVudCBkaXJlY3Rvcmllcy4KKyAgaWYgdGVzdCAiJGhhcmRjb2RlX2RpcmVjdCIgIT0gbm8gJiYKKyAgICAgIyBJZiB0aGUgb25seSBtZWNoYW5pc20gdG8gYXZvaWQgaGFyZGNvZGluZyBpcyBzaGxpYnBhdGhfdmFyLCB3ZQorICAgICAjIGhhdmUgdG8gcmVsaW5rLCBvdGhlcndpc2Ugd2UgbWlnaHQgbGluayB3aXRoIGFuIGluc3RhbGxlZCBsaWJyYXJ5CisgICAgICMgd2hlbiB3ZSBzaG91bGQgYmUgbGlua2luZyB3aXRoIGEgeWV0LXRvLWJlLWluc3RhbGxlZCBvbmUKKyAgICAgIyMgdGVzdCAiJF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgKSIgIT0gbm8gJiYKKyAgICAgdGVzdCAiJGhhcmRjb2RlX21pbnVzX0wiICE9IG5vOyB0aGVuCisgICAgIyBMaW5raW5nIGFsd2F5cyBoYXJkY29kZXMgdGhlIHRlbXBvcmFyeSBsaWJyYXJ5IGRpcmVjdG9yeS4KKyAgICBoYXJkY29kZV9hY3Rpb249cmVsaW5rCisgIGVsc2UKKyAgICAjIFdlIGNhbiBsaW5rIHdpdGhvdXQgaGFyZGNvZGluZywgYW5kIHdlIGNhbiBoYXJkY29kZSBub25leGlzdGluZyBkaXJzLgorICAgIGhhcmRjb2RlX2FjdGlvbj1pbW1lZGlhdGUKKyAgZmkKK2Vsc2UKKyAgIyBXZSBjYW5ub3QgaGFyZGNvZGUgYW55dGhpbmcsIG9yIGVsc2Ugd2UgY2FuIG9ubHkgaGFyZGNvZGUgZXhpc3RpbmcKKyAgIyBkaXJlY3Rvcmllcy4KKyAgaGFyZGNvZGVfYWN0aW9uPXVuc3VwcG9ydGVkCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRoYXJkY29kZV9hY3Rpb24iID4mNQorJGFzX2VjaG8gIiRoYXJkY29kZV9hY3Rpb24iID4mNjsgfQorCitpZiB0ZXN0ICIkaGFyZGNvZGVfYWN0aW9uIiA9IHJlbGluayB8fAorICAgdGVzdCAiJGluaGVyaXRfcnBhdGgiID0geWVzOyB0aGVuCisgICMgRmFzdCBpbnN0YWxsYXRpb24gaXMgbm90IHN1cHBvcnRlZAorICBlbmFibGVfZmFzdF9pbnN0YWxsPW5vCitlbGlmIHRlc3QgIiRzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgiID0geWVzIHx8CisgICAgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IG5vOyB0aGVuCisgICMgRmFzdCBpbnN0YWxsYXRpb24gaXMgbm90IG5lY2Vzc2FyeQorICBlbmFibGVfZmFzdF9pbnN0YWxsPW5lZWRsZXNzCitmaQorCisKKworCisKKworICBpZiB0ZXN0ICJ4JGVuYWJsZV9kbG9wZW4iICE9IHh5ZXM7IHRoZW4KKyAgZW5hYmxlX2Rsb3Blbj11bmtub3duCisgIGVuYWJsZV9kbG9wZW5fc2VsZj11bmtub3duCisgIGVuYWJsZV9kbG9wZW5fc2VsZl9zdGF0aWM9dW5rbm93bgorZWxzZQorICBsdF9jdl9kbG9wZW49bm8KKyAgbHRfY3ZfZGxvcGVuX2xpYnM9CisKKyAgY2FzZSAkaG9zdF9vcyBpbgorICBiZW9zKikKKyAgICBsdF9jdl9kbG9wZW49ImxvYWRfYWRkX29uIgorICAgIGx0X2N2X2Rsb3Blbl9saWJzPQorICAgIGx0X2N2X2Rsb3Blbl9zZWxmPXllcworICAgIDs7CisKKyAgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgICAgbHRfY3ZfZGxvcGVuPSJMb2FkTGlicmFyeSIKKyAgICBsdF9jdl9kbG9wZW5fbGlicz0KKyAgICA7OworCisgIGN5Z3dpbiopCisgICAgbHRfY3ZfZGxvcGVuPSJkbG9wZW4iCisgICAgbHRfY3ZfZGxvcGVuX2xpYnM9CisgICAgOzsKKworICBkYXJ3aW4qKQorICAjIGlmIGxpYmRsIGlzIGluc3RhbGxlZCB3ZSBuZWVkIHRvIGxpbmsgYWdhaW5zdCBpdAorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGRsb3BlbiBpbiAtbGRsIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBkbG9wZW4gaW4gLWxkbC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9saWJfZGxfZGxvcGVuK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworTElCUz0iLWxkbCAgJExJQlMiCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgZGxvcGVuICgpOworaW50CittYWluICgpCit7CityZXR1cm4gZGxvcGVuICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2xpYl9kbF9kbG9wZW49eWVzCitlbHNlCisgIGFjX2N2X2xpYl9kbF9kbG9wZW49bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX2RsX2Rsb3BlbiIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl9kbF9kbG9wZW4iID4mNjsgfQoraWYgdGVzdCAieCRhY19jdl9saWJfZGxfZGxvcGVuIiA9IHgiInllczsgdGhlbiA6CisgIGx0X2N2X2Rsb3Blbj0iZGxvcGVuIiBsdF9jdl9kbG9wZW5fbGlicz0iLWxkbCIKK2Vsc2UKKworICAgIGx0X2N2X2Rsb3Blbj0iZHlsZCIKKyAgICBsdF9jdl9kbG9wZW5fbGlicz0KKyAgICBsdF9jdl9kbG9wZW5fc2VsZj15ZXMKKworZmkKKworICAgIDs7CisKKyAgKikKKyAgICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJzaGxfbG9hZCIgImFjX2N2X2Z1bmNfc2hsX2xvYWQiCitpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfc2hsX2xvYWQiID0geCIieWVzOyB0aGVuIDoKKyAgbHRfY3ZfZGxvcGVuPSJzaGxfbG9hZCIKK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igc2hsX2xvYWQgaW4gLWxkbGQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHNobF9sb2FkIGluIC1sZGxkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X2xpYl9kbGRfc2hsX2xvYWQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbGRsZCAgJExJQlMiCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgc2hsX2xvYWQgKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBzaGxfbG9hZCAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9saWJfZGxkX3NobF9sb2FkPXllcworZWxzZQorICBhY19jdl9saWJfZGxkX3NobF9sb2FkPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9kbGRfc2hsX2xvYWQiID4mNQorJGFzX2VjaG8gIiRhY19jdl9saWJfZGxkX3NobF9sb2FkIiA+JjY7IH0KK2lmIHRlc3QgIngkYWNfY3ZfbGliX2RsZF9zaGxfbG9hZCIgPSB4IiJ5ZXM7IHRoZW4gOgorICBsdF9jdl9kbG9wZW49InNobF9sb2FkIiBsdF9jdl9kbG9wZW5fbGlicz0iLWxkbGQiCitlbHNlCisgIGFjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgImRsb3BlbiIgImFjX2N2X2Z1bmNfZGxvcGVuIgoraWYgdGVzdCAieCRhY19jdl9mdW5jX2Rsb3BlbiIgPSB4IiJ5ZXM7IHRoZW4gOgorICBsdF9jdl9kbG9wZW49ImRsb3BlbiIKK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgZGxvcGVuIGluIC1sZGwiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGRsb3BlbiBpbiAtbGRsLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X2xpYl9kbF9kbG9wZW4rc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbGRsICAkTElCUyIKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBkbG9wZW4gKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBkbG9wZW4gKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfbGliX2RsX2Rsb3Blbj15ZXMKK2Vsc2UKKyAgYWNfY3ZfbGliX2RsX2Rsb3Blbj1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfZGxfZGxvcGVuIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfbGliX2RsX2Rsb3BlbiIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9kbF9kbG9wZW4iID0geCIieWVzOyB0aGVuIDoKKyAgbHRfY3ZfZGxvcGVuPSJkbG9wZW4iIGx0X2N2X2Rsb3Blbl9saWJzPSItbGRsIgorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBkbG9wZW4gaW4gLWxzdmxkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBkbG9wZW4gaW4gLWxzdmxkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X2xpYl9zdmxkX2Rsb3BlbitzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKK0xJQlM9Ii1sc3ZsZCAgJExJQlMiCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgZGxvcGVuICgpOworaW50CittYWluICgpCit7CityZXR1cm4gZGxvcGVuICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2xpYl9zdmxkX2Rsb3Blbj15ZXMKK2Vsc2UKKyAgYWNfY3ZfbGliX3N2bGRfZGxvcGVuPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9zdmxkX2Rsb3BlbiIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl9zdmxkX2Rsb3BlbiIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9zdmxkX2Rsb3BlbiIgPSB4IiJ5ZXM7IHRoZW4gOgorICBsdF9jdl9kbG9wZW49ImRsb3BlbiIgbHRfY3ZfZGxvcGVuX2xpYnM9Ii1sc3ZsZCIKK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgZGxkX2xpbmsgaW4gLWxkbGQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGRsZF9saW5rIGluIC1sZGxkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X2xpYl9kbGRfZGxkX2xpbmsrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbGRsZCAgJExJQlMiCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgZGxkX2xpbmsgKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBkbGRfbGluayAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9saWJfZGxkX2RsZF9saW5rPXllcworZWxzZQorICBhY19jdl9saWJfZGxkX2RsZF9saW5rPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9kbGRfZGxkX2xpbmsiID4mNQorJGFzX2VjaG8gIiRhY19jdl9saWJfZGxkX2RsZF9saW5rIiA+JjY7IH0KK2lmIHRlc3QgIngkYWNfY3ZfbGliX2RsZF9kbGRfbGluayIgPSB4IiJ5ZXM7IHRoZW4gOgorICBsdF9jdl9kbG9wZW49ImRsZF9saW5rIiBsdF9jdl9kbG9wZW5fbGlicz0iLWxkbGQiCitmaQorCisKK2ZpCisKKworZmkKKworCitmaQorCisKK2ZpCisKKworZmkKKworICAgIDs7CisgIGVzYWMKKworICBpZiB0ZXN0ICJ4JGx0X2N2X2Rsb3BlbiIgIT0geG5vOyB0aGVuCisgICAgZW5hYmxlX2Rsb3Blbj15ZXMKKyAgZWxzZQorICAgIGVuYWJsZV9kbG9wZW49bm8KKyAgZmkKKworICBjYXNlICRsdF9jdl9kbG9wZW4gaW4KKyAgZGxvcGVuKQorICAgIHNhdmVfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKKyAgICB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9kbGZjbl9oIiA9IHh5ZXMgJiYgQ1BQRkxBR1M9IiRDUFBGTEFHUyAtREhBVkVfRExGQ05fSCIKKworICAgIHNhdmVfTERGTEFHUz0iJExERkxBR1MiCisgICAgd2w9JGx0X3Byb2dfY29tcGlsZXJfd2wgZXZhbCBMREZMQUdTPVwiXCRMREZMQUdTICRleHBvcnRfZHluYW1pY19mbGFnX3NwZWNcIgorCisgICAgc2F2ZV9MSUJTPSIkTElCUyIKKyAgICBMSUJTPSIkbHRfY3ZfZGxvcGVuX2xpYnMgJExJQlMiCisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgYSBwcm9ncmFtIGNhbiBkbG9wZW4gaXRzZWxmIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgYSBwcm9ncmFtIGNhbiBkbG9wZW4gaXRzZWxmLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2x0X2N2X2Rsb3Blbl9zZWxmK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgCSAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgorICBsdF9jdl9kbG9wZW5fc2VsZj1jcm9zcworZWxzZQorICBsdF9kbHVua25vd249MDsgbHRfZGxub191c2NvcmU9MTsgbHRfZGxuZWVkX3VzY29yZT0yCisgIGx0X3N0YXR1cz0kbHRfZGx1bmtub3duCisgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxfTFRfRU9GCisjbGluZSAxMDU1MSAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKKyNpZiBIQVZFX0RMRkNOX0gKKyNpbmNsdWRlIDxkbGZjbi5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaWZkZWYgUlRMRF9HTE9CQUwKKyMgIGRlZmluZSBMVF9ETEdMT0JBTAkJUlRMRF9HTE9CQUwKKyNlbHNlCisjICBpZmRlZiBETF9HTE9CQUwKKyMgICAgZGVmaW5lIExUX0RMR0xPQkFMCQlETF9HTE9CQUwKKyMgIGVsc2UKKyMgICAgZGVmaW5lIExUX0RMR0xPQkFMCQkwCisjICBlbmRpZgorI2VuZGlmCisKKy8qIFdlIG1heSBoYXZlIHRvIGRlZmluZSBMVF9ETExBWllfT1JfTk9XIGluIHRoZSBjb21tYW5kIGxpbmUgaWYgd2UKKyAgIGZpbmQgb3V0IGl0IGRvZXMgbm90IHdvcmsgaW4gc29tZSBwbGF0Zm9ybS4gKi8KKyNpZm5kZWYgTFRfRExMQVpZX09SX05PVworIyAgaWZkZWYgUlRMRF9MQVpZCisjICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCQlSVExEX0xBWlkKKyMgIGVsc2UKKyMgICAgaWZkZWYgRExfTEFaWQorIyAgICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCQlETF9MQVpZCisjICAgIGVsc2UKKyMgICAgICBpZmRlZiBSVExEX05PVworIyAgICAgICAgZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cJUlRMRF9OT1cKKyMgICAgICBlbHNlCisjICAgICAgICBpZmRlZiBETF9OT1cKKyMgICAgICAgICAgZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cJRExfTk9XCisjICAgICAgICBlbHNlCisjICAgICAgICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCTAKKyMgICAgICAgIGVuZGlmCisjICAgICAgZW5kaWYKKyMgICAgZW5kaWYKKyMgIGVuZGlmCisjZW5kaWYKKwordm9pZCBmbm9yZCgpIHsgaW50IGk9NDI7fQoraW50IG1haW4gKCkKK3sKKyAgdm9pZCAqc2VsZiA9IGRsb3BlbiAoMCwgTFRfRExHTE9CQUx8TFRfRExMQVpZX09SX05PVyk7CisgIGludCBzdGF0dXMgPSAkbHRfZGx1bmtub3duOworCisgIGlmIChzZWxmKQorICAgIHsKKyAgICAgIGlmIChkbHN5bSAoc2VsZiwiZm5vcmQiKSkgICAgICAgc3RhdHVzID0gJGx0X2Rsbm9fdXNjb3JlOworICAgICAgZWxzZSBpZiAoZGxzeW0oIHNlbGYsIl9mbm9yZCIpKSBzdGF0dXMgPSAkbHRfZGxuZWVkX3VzY29yZTsKKyAgICAgIC8qIGRsY2xvc2UgKHNlbGYpOyAqLworICAgIH0KKyAgZWxzZQorICAgIHB1dHMgKGRsZXJyb3IgKCkpOworCisgIHJldHVybiBzdGF0dXM7Cit9CitfTFRfRU9GCisgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19saW5rXCIiOyB9ID4mNQorICAoZXZhbCAkYWNfbGluaykgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fSAyPi9kZXYvbnVsbDsgdGhlbgorICAgICguL2NvbmZ0ZXN0OyBleGl0OyApID4mNSAyPi9kZXYvbnVsbAorICAgIGx0X3N0YXR1cz0kPworICAgIGNhc2UgeCRsdF9zdGF0dXMgaW4KKyAgICAgIHgkbHRfZGxub191c2NvcmUpIGx0X2N2X2Rsb3Blbl9zZWxmPXllcyA7OworICAgICAgeCRsdF9kbG5lZWRfdXNjb3JlKSBsdF9jdl9kbG9wZW5fc2VsZj15ZXMgOzsKKyAgICAgIHgkbHRfZGx1bmtub3dufHgqKSBsdF9jdl9kbG9wZW5fc2VsZj1ubyA7OworICAgIGVzYWMKKyAgZWxzZSA6CisgICAgIyBjb21waWxhdGlvbiBmYWlsZWQKKyAgICBsdF9jdl9kbG9wZW5fc2VsZj1ubworICBmaQorZmkKK3JtIC1mciBjb25mdGVzdCoKKworCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9kbG9wZW5fc2VsZiIgPiY1CiskYXNfZWNobyAiJGx0X2N2X2Rsb3Blbl9zZWxmIiA+JjY7IH0KKworICAgIGlmIHRlc3QgIngkbHRfY3ZfZGxvcGVuX3NlbGYiID0geHllczsgdGhlbgorICAgICAgd2w9JGx0X3Byb2dfY29tcGlsZXJfd2wgZXZhbCBMREZMQUdTPVwiXCRMREZMQUdTICRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY1wiCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgYSBzdGF0aWNhbGx5IGxpbmtlZCBwcm9ncmFtIGNhbiBkbG9wZW4gaXRzZWxmIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgYSBzdGF0aWNhbGx5IGxpbmtlZCBwcm9ncmFtIGNhbiBkbG9wZW4gaXRzZWxmLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2x0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYytzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIAkgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKyAgbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljPWNyb3NzCitlbHNlCisgIGx0X2RsdW5rbm93bj0wOyBsdF9kbG5vX3VzY29yZT0xOyBsdF9kbG5lZWRfdXNjb3JlPTIKKyAgbHRfc3RhdHVzPSRsdF9kbHVua25vd24KKyAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PF9MVF9FT0YKKyNsaW5lIDEwNjQ3ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworI2lmIEhBVkVfRExGQ05fSAorI2luY2x1ZGUgPGRsZmNuLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNpZmRlZiBSVExEX0dMT0JBTAorIyAgZGVmaW5lIExUX0RMR0xPQkFMCQlSVExEX0dMT0JBTAorI2Vsc2UKKyMgIGlmZGVmIERMX0dMT0JBTAorIyAgICBkZWZpbmUgTFRfRExHTE9CQUwJCURMX0dMT0JBTAorIyAgZWxzZQorIyAgICBkZWZpbmUgTFRfRExHTE9CQUwJCTAKKyMgIGVuZGlmCisjZW5kaWYKKworLyogV2UgbWF5IGhhdmUgdG8gZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cgaW4gdGhlIGNvbW1hbmQgbGluZSBpZiB3ZQorICAgZmluZCBvdXQgaXQgZG9lcyBub3Qgd29yayBpbiBzb21lIHBsYXRmb3JtLiAqLworI2lmbmRlZiBMVF9ETExBWllfT1JfTk9XCisjICBpZmRlZiBSVExEX0xBWlkKKyMgICAgZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cJCVJUTERfTEFaWQorIyAgZWxzZQorIyAgICBpZmRlZiBETF9MQVpZCisjICAgICAgZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cJCURMX0xBWlkKKyMgICAgZWxzZQorIyAgICAgIGlmZGVmIFJUTERfTk9XCisjICAgICAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwlSVExEX05PVworIyAgICAgIGVsc2UKKyMgICAgICAgIGlmZGVmIERMX05PVworIyAgICAgICAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwlETF9OT1cKKyMgICAgICAgIGVsc2UKKyMgICAgICAgICAgZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cJMAorIyAgICAgICAgZW5kaWYKKyMgICAgICBlbmRpZgorIyAgICBlbmRpZgorIyAgZW5kaWYKKyNlbmRpZgorCit2b2lkIGZub3JkKCkgeyBpbnQgaT00Mjt9CitpbnQgbWFpbiAoKQoreworICB2b2lkICpzZWxmID0gZGxvcGVuICgwLCBMVF9ETEdMT0JBTHxMVF9ETExBWllfT1JfTk9XKTsKKyAgaW50IHN0YXR1cyA9ICRsdF9kbHVua25vd247CisKKyAgaWYgKHNlbGYpCisgICAgeworICAgICAgaWYgKGRsc3ltIChzZWxmLCJmbm9yZCIpKSAgICAgICBzdGF0dXMgPSAkbHRfZGxub191c2NvcmU7CisgICAgICBlbHNlIGlmIChkbHN5bSggc2VsZiwiX2Zub3JkIikpIHN0YXR1cyA9ICRsdF9kbG5lZWRfdXNjb3JlOworICAgICAgLyogZGxjbG9zZSAoc2VsZik7ICovCisgICAgfQorICBlbHNlCisgICAgcHV0cyAoZGxlcnJvciAoKSk7CisKKyAgcmV0dXJuIHN0YXR1czsKK30KK19MVF9FT0YKKyAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2xpbmtcIiI7IH0gPiY1CisgIChldmFsICRhY19saW5rKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9IDI+L2Rldi9udWxsOyB0aGVuCisgICAgKC4vY29uZnRlc3Q7IGV4aXQ7ICkgPiY1IDI+L2Rldi9udWxsCisgICAgbHRfc3RhdHVzPSQ/CisgICAgY2FzZSB4JGx0X3N0YXR1cyBpbgorICAgICAgeCRsdF9kbG5vX3VzY29yZSkgbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljPXllcyA7OworICAgICAgeCRsdF9kbG5lZWRfdXNjb3JlKSBsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWM9eWVzIDs7CisgICAgICB4JGx0X2RsdW5rbm93bnx4KikgbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljPW5vIDs7CisgICAgZXNhYworICBlbHNlIDoKKyAgICAjIGNvbXBpbGF0aW9uIGZhaWxlZAorICAgIGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYz1ubworICBmaQorZmkKK3JtIC1mciBjb25mdGVzdCoKKworCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWMiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWMiID4mNjsgfQorICAgIGZpCisKKyAgICBDUFBGTEFHUz0iJHNhdmVfQ1BQRkxBR1MiCisgICAgTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKKyAgICBMSUJTPSIkc2F2ZV9MSUJTIgorICAgIDs7CisgIGVzYWMKKworICBjYXNlICRsdF9jdl9kbG9wZW5fc2VsZiBpbgorICB5ZXN8bm8pIGVuYWJsZV9kbG9wZW5fc2VsZj0kbHRfY3ZfZGxvcGVuX3NlbGYgOzsKKyAgKikgZW5hYmxlX2Rsb3Blbl9zZWxmPXVua25vd24gOzsKKyAgZXNhYworCisgIGNhc2UgJGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYyBpbgorICB5ZXN8bm8pIGVuYWJsZV9kbG9wZW5fc2VsZl9zdGF0aWM9JGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYyA7OworICAqKSBlbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljPXVua25vd24gOzsKKyAgZXNhYworZmkKKworCisKKworCisKKworCisKKworCisKKworCisKKworCitzdHJpcGxpYj0KK29sZF9zdHJpcGxpYj0KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBzdHJpcHBpbmcgbGlicmFyaWVzIGlzIHBvc3NpYmxlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgc3RyaXBwaW5nIGxpYnJhcmllcyBpcyBwb3NzaWJsZS4uLiAiID4mNjsgfQoraWYgdGVzdCAtbiAiJFNUUklQIiAmJiAkU1RSSVAgLVYgMj4mMSB8ICRHUkVQICJHTlUgc3RyaXAiID4vZGV2L251bGw7IHRoZW4KKyAgdGVzdCAteiAiJG9sZF9zdHJpcGxpYiIgJiYgb2xkX3N0cmlwbGliPSIkU1RSSVAgLS1zdHJpcC1kZWJ1ZyIKKyAgdGVzdCAteiAiJHN0cmlwbGliIiAmJiBzdHJpcGxpYj0iJFNUUklQIC0tc3RyaXAtdW5uZWVkZWQiCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CitlbHNlCisjIEZJWE1FIC0gaW5zZXJ0IHNvbWUgcmVhbCB0ZXN0cywgaG9zdF9vcyBpc24ndCByZWFsbHkgZ29vZCBlbm91Z2gKKyAgY2FzZSAkaG9zdF9vcyBpbgorICBkYXJ3aW4qKQorICAgIGlmIHRlc3QgLW4gIiRTVFJJUCIgOyB0aGVuCisgICAgICBzdHJpcGxpYj0iJFNUUklQIC14IgorICAgICAgb2xkX3N0cmlwbGliPSIkU1RSSVAgLVMiCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgIGVsc2UKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgIGZpCisgICAgOzsKKyAgKikKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICA7OworICBlc2FjCitmaQorCisKKworCisKKworCisKKworCisKKworICAjIFJlcG9ydCB3aGljaCBsaWJyYXJ5IHR5cGVzIHdpbGwgYWN0dWFsbHkgYmUgYnVpbHQKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBsaWJ0b29sIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgbGlidG9vbCBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzLi4uICIgPiY2OyB9CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkY2FuX2J1aWxkX3NoYXJlZCIgPiY1CiskYXNfZWNobyAiJGNhbl9idWlsZF9zaGFyZWQiID4mNjsgfQorCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcy4uLiAiID4mNjsgfQorICB0ZXN0ICIkY2FuX2J1aWxkX3NoYXJlZCIgPSAibm8iICYmIGVuYWJsZV9zaGFyZWQ9bm8KKworICAjIE9uIEFJWCwgc2hhcmVkIGxpYnJhcmllcyBhbmQgc3RhdGljIGxpYnJhcmllcyB1c2UgdGhlIHNhbWUgbmFtZXNwYWNlLCBhbmQKKyAgIyBhcmUgYWxsIGJ1aWx0IGZyb20gUElDLgorICBjYXNlICRob3N0X29zIGluCisgIGFpeDMqKQorICAgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyAmJiBlbmFibGVfc3RhdGljPW5vCisgICAgaWYgdGVzdCAtbiAiJFJBTkxJQiI7IHRoZW4KKyAgICAgIGFyY2hpdmVfY21kcz0iJGFyY2hpdmVfY21kc35cJFJBTkxJQiBcJGxpYiIKKyAgICAgIHBvc3RpbnN0YWxsX2NtZHM9JyRSQU5MSUIgJGxpYicKKyAgICBmaQorICAgIDs7CisKKyAgYWl4WzQtOV0qKQorICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgIT0gaWE2NCAmJiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSBubyA7IHRoZW4KKyAgICAgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyAmJiBlbmFibGVfc3RhdGljPW5vCisgICAgZmkKKyAgICA7OworICBlc2FjCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZW5hYmxlX3NoYXJlZCIgPiY1CiskYXNfZWNobyAiJGVuYWJsZV9zaGFyZWQiID4mNjsgfQorCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgc3RhdGljIGxpYnJhcmllcy4uLiAiID4mNjsgfQorICAjIE1ha2Ugc3VyZSBlaXRoZXIgZW5hYmxlX3NoYXJlZCBvciBlbmFibGVfc3RhdGljIGlzIHllcy4KKyAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzIHx8IGVuYWJsZV9zdGF0aWM9eWVzCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZW5hYmxlX3N0YXRpYyIgPiY1CiskYXNfZWNobyAiJGVuYWJsZV9zdGF0aWMiID4mNjsgfQorCisKKworCitmaQorYWNfZXh0PWMKK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorCitDQz0iJGx0X3NhdmVfQ0MiCisKKworCisKKworCisKKworCisKKworCisKKyAgICAgICAgYWNfY29uZmlnX2NvbW1hbmRzPSIkYWNfY29uZmlnX2NvbW1hbmRzIGxpYnRvb2wiCisKKworCisKKyMgT25seSBleHBhbmQgb25jZToKKworCisKKworCisKKworCitpZiB0ZXN0ICJ4JGFjX2N2X2Vudl9QS0dfQ09ORklHX3NldCIgIT0gInhzZXQiOyB0aGVuCisJaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9cGtnLWNvbmZpZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1wa2ctY29uZmlnOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcGF0aF9QS0dfQ09ORklHK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2FzZSAkUEtHX0NPTkZJRyBpbgorICBbXFwvXSogfCA/OltcXC9dKikKKyAgYWNfY3ZfcGF0aF9QS0dfQ09ORklHPSIkUEtHX0NPTkZJRyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgIDs7CisgICopCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3BhdGhfUEtHX0NPTkZJRz0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworICA7OworZXNhYworZmkKK1BLR19DT05GSUc9JGFjX2N2X3BhdGhfUEtHX0NPTkZJRworaWYgdGVzdCAtbiAiJFBLR19DT05GSUciOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkUEtHX0NPTkZJRyIgPiY1CiskYXNfZWNobyAiJFBLR19DT05GSUciID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworZmkKK2lmIHRlc3QgLXogIiRhY19jdl9wYXRoX1BLR19DT05GSUciOyB0aGVuCisgIGFjX3B0X1BLR19DT05GSUc9JFBLR19DT05GSUcKKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJwa2ctY29uZmlnIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBwa2ctY29uZmlnOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcGF0aF9hY19wdF9QS0dfQ09ORklHK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2FzZSAkYWNfcHRfUEtHX0NPTkZJRyBpbgorICBbXFwvXSogfCA/OltcXC9dKikKKyAgYWNfY3ZfcGF0aF9hY19wdF9QS0dfQ09ORklHPSIkYWNfcHRfUEtHX0NPTkZJRyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgIDs7CisgICopCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3BhdGhfYWNfcHRfUEtHX0NPTkZJRz0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworICA7OworZXNhYworZmkKK2FjX3B0X1BLR19DT05GSUc9JGFjX2N2X3BhdGhfYWNfcHRfUEtHX0NPTkZJRworaWYgdGVzdCAtbiAiJGFjX3B0X1BLR19DT05GSUciOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcHRfUEtHX0NPTkZJRyIgPiY1CiskYXNfZWNobyAiJGFjX3B0X1BLR19DT05GSUciID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKyAgaWYgdGVzdCAieCRhY19wdF9QS0dfQ09ORklHIiA9IHg7IHRoZW4KKyAgICBQS0dfQ09ORklHPSIiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgUEtHX0NPTkZJRz0kYWNfcHRfUEtHX0NPTkZJRworICBmaQorZWxzZQorICBQS0dfQ09ORklHPSIkYWNfY3ZfcGF0aF9QS0dfQ09ORklHIgorZmkKKworZmkKK2lmIHRlc3QgLW4gIiRQS0dfQ09ORklHIjsgdGhlbgorCV9wa2dfbWluX3ZlcnNpb249MC45LjAKKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHBrZy1jb25maWcgaXMgYXQgbGVhc3QgdmVyc2lvbiAkX3BrZ19taW5fdmVyc2lvbiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBwa2ctY29uZmlnIGlzIGF0IGxlYXN0IHZlcnNpb24gJF9wa2dfbWluX3ZlcnNpb24uLi4gIiA+JjY7IH0KKwlpZiAkUEtHX0NPTkZJRyAtLWF0bGVhc3QtcGtnY29uZmlnLXZlcnNpb24gJF9wa2dfbWluX3ZlcnNpb247IHRoZW4KKwkJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKwllbHNlCisJCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorCQlQS0dfQ09ORklHPSIiCisJZmkKK2ZpCisKK0RBVEU9ImBkYXRlICcrJWEgJWQgJUIgJVknYCIKKworCitPUFJPRklMRV9ESVI9YHB3ZGAKKworCisjIHRoaXMgbmVlZHMgdG8gY29tZSBiZWZvcmUgLS13aXRoLWdjYyBzbyB3ZSBsaW5rIHdpdGggYmludXRpbCdzIHZlcnNpb24KKyMgb2YgbGliaWJlcnR5IC4uLiBzaWdoCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtYmludXRpbHMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2JpbnV0aWxzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9iaW51dGlsczsgQklOVVRJTFNESVI9JHdpdGh2YWwKK2ZpCisKKworaWYgdGVzdCAiJEJJTlVUSUxTRElSIiAhPSAiIjsgdGhlbgorCUxEPSIkQklOVVRJTFNESVIvbGQiCisJaWYgdGVzdCAiJENGTEFHUyIgPSAiIjsgdGhlbgorCQlDRkxBR1M9Ii1nIC1PMiIKKwlmaQorCWlmIHRlc3QgIiRDWFhGTEFHUyIgPSAiIjsgdGhlbgorCQlDWFhGTEFHUz0iLWcgLU8yIgorCWZpCisJQ0ZMQUdTPSIkQ0ZMQUdTIC1JJEJJTlVUSUxTRElSL2luY2x1ZGUiCisJQ1hYRkxBR1M9IiRDWFhGTEFHUyAtSSRCSU5VVElMU0RJUi9pbmNsdWRlIgorCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWJpbnV0aWxzLWxpYm5hbWUgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2JpbnV0aWxzX2xpYm5hbWUrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX2JpbnV0aWxzX2xpYm5hbWU7IEJJTlVUSUxTTElCPSR3aXRodmFsCitmaQorCisJaWYgdGVzdCAiJEJJTlVUSUxTTElCIiA9ICIiOyB0aGVuCisJCUJJTlVUSUxTTElCPSJsaWIiCisJZmkKKwlMREZMQUdTPSIkTERGTEFHUyAtTCRCSU5VVElMU0RJUi8kQklOVVRJTFNMSUIgLVhsaW5rZXIgLVIgLVhsaW5rZXIgJEJJTlVUSUxTRElSLyRCSU5VVElMU0xJQiIKK2ZpCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1nY2Mgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2djYytzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfZ2NjOyBHQ0NESVI9JHdpdGh2YWwKK2ZpCisKKworaWYgdGVzdCAiJEdDQ0RJUiIgIT0gIiI7IHRoZW4KKwlDQz0iJEdDQ0RJUi9iaW4vZ2NjIgorCUNYWD0iJEdDQ0RJUi9iaW4vZysrIgorCUxERkxBR1M9IiRMREZMQUdTIC1MJEdDQ0RJUi9saWIgLVhsaW5rZXIgLVIgLVhsaW5rZXIgJEdDQ0RJUi9saWIiCitmaQorCithY19leHQ9YworYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CitpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1nY2MiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9Z2NjOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19DQytzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRDQyI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19DQz0iJENDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfQ0M9IiR7YWNfdG9vbF9wcmVmaXh9Z2NjIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK0NDPSRhY19jdl9wcm9nX0NDCitpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkQ0MiID4mNQorJGFzX2VjaG8gIiRDQyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfQ0MiOyB0aGVuCisgIGFjX2N0X0NDPSRDQworICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImdjYyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgZ2NjOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9DQytzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9DQyI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9DQz0iJGFjX2N0X0NDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfQ0M9ImdjYyIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCithY19jdF9DQz0kYWNfY3ZfcHJvZ19hY19jdF9DQworaWYgdGVzdCAtbiAiJGFjX2N0X0NDIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X0NDIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfQ0MiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKyAgaWYgdGVzdCAieCRhY19jdF9DQyIgPSB4OyB0aGVuCisgICAgQ0M9IiIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBDQz0kYWNfY3RfQ0MKKyAgZmkKK2Vsc2UKKyAgQ0M9IiRhY19jdl9wcm9nX0NDIgorZmkKKworaWYgdGVzdCAteiAiJENDIjsgdGhlbgorICAgICAgICAgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9Y2MiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9Y2M7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX0NDK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJENDIjsgdGhlbgorICBhY19jdl9wcm9nX0NDPSIkQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19DQz0iJHthY190b29sX3ByZWZpeH1jYyIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitDQz0kYWNfY3ZfcHJvZ19DQworaWYgdGVzdCAtbiAiJENDIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJENDIiA+JjUKKyRhc19lY2hvICIkQ0MiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworICBmaQorZmkKK2lmIHRlc3QgLXogIiRDQyI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJjYyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgY2M7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX0NDK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJENDIjsgdGhlbgorICBhY19jdl9wcm9nX0NDPSIkQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorICBhY19wcm9nX3JlamVjdGVkPW5vCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBpZiB0ZXN0ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA9ICIvdXNyL3VjYi9jYyI7IHRoZW4KKyAgICAgICBhY19wcm9nX3JlamVjdGVkPXllcworICAgICAgIGNvbnRpbnVlCisgICAgIGZpCisgICAgYWNfY3ZfcHJvZ19DQz0iY2MiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2lmIHRlc3QgJGFjX3Byb2dfcmVqZWN0ZWQgPSB5ZXM7IHRoZW4KKyAgIyBXZSBmb3VuZCBhIGJvZ29uIGluIHRoZSBwYXRoLCBzbyBtYWtlIHN1cmUgd2UgbmV2ZXIgdXNlIGl0LgorICBzZXQgZHVtbXkgJGFjX2N2X3Byb2dfQ0MKKyAgc2hpZnQKKyAgaWYgdGVzdCAkIyAhPSAwOyB0aGVuCisgICAgIyBXZSBjaG9zZSBhIGRpZmZlcmVudCBjb21waWxlciBmcm9tIHRoZSBib2d1cyBvbmUuCisgICAgIyBIb3dldmVyLCBpdCBoYXMgdGhlIHNhbWUgYmFzZW5hbWUsIHNvIHRoZSBib2dvbiB3aWxsIGJlIGNob3NlbgorICAgICMgZmlyc3QgaWYgd2Ugc2V0IENDIHRvIGp1c3QgdGhlIGJhc2VuYW1lOyB1c2UgdGhlIGZ1bGwgZmlsZSBuYW1lLgorICAgIHNoaWZ0CisgICAgYWNfY3ZfcHJvZ19DQz0iJGFzX2Rpci8kYWNfd29yZCR7MSsnICd9JEAiCisgIGZpCitmaQorZmkKK2ZpCitDQz0kYWNfY3ZfcHJvZ19DQworaWYgdGVzdCAtbiAiJENDIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJENDIiA+JjUKKyRhc19lY2hvICIkQ0MiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworZmkKK2lmIHRlc3QgLXogIiRDQyI7IHRoZW4KKyAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICBmb3IgYWNfcHJvZyBpbiBjbC5leGUKKyAgZG8KKyAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY190b29sX3ByZWZpeCRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfQ0Mrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCisgIGFjX2N2X3Byb2dfQ0M9IiRDQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX0NDPSIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitDQz0kYWNfY3ZfcHJvZ19DQworaWYgdGVzdCAtbiAiJENDIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJENDIiA+JjUKKyRhc19lY2hvICIkQ0MiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworICAgIHRlc3QgLW4gIiRDQyIgJiYgYnJlYWsKKyAgZG9uZQorZmkKK2lmIHRlc3QgLXogIiRDQyI7IHRoZW4KKyAgYWNfY3RfQ0M9JENDCisgIGZvciBhY19wcm9nIGluIGNsLmV4ZQorZG8KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJGFjX3Byb2c7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X0NDK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X0NDIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X0NDPSIkYWNfY3RfQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19hY19jdF9DQz0iJGFjX3Byb2ciCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorYWNfY3RfQ0M9JGFjX2N2X3Byb2dfYWNfY3RfQ0MKK2lmIHRlc3QgLW4gIiRhY19jdF9DQyI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9DQyIgPiY1CiskYXNfZWNobyAiJGFjX2N0X0NDIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKKyAgdGVzdCAtbiAiJGFjX2N0X0NDIiAmJiBicmVhaworZG9uZQorCisgIGlmIHRlc3QgIngkYWNfY3RfQ0MiID0geDsgdGhlbgorICAgIENDPSIiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgQ0M9JGFjX2N0X0NDCisgIGZpCitmaQorCitmaQorCisKK3Rlc3QgLXogIiRDQyIgJiYgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Cithc19mbl9lcnJvciAkPyAibm8gYWNjZXB0YWJsZSBDIGNvbXBpbGVyIGZvdW5kIGluIFwkUEFUSAorU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDUgOyB9CisKKyMgUHJvdmlkZSBzb21lIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjb21waWxlci4KKyRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBDIGNvbXBpbGVyIHZlcnNpb24iID4mNQorc2V0IFggJGFjX2NvbXBpbGUKK2FjX2NvbXBpbGVyPSQyCitmb3IgYWNfb3B0aW9uIGluIC0tdmVyc2lvbiAtdiAtViAtcXZlcnNpb247IGRvCisgIHsgeyBhY190cnk9IiRhY19jb21waWxlciAkYWNfb3B0aW9uID4mNSIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQorICAoZXZhbCAiJGFjX2NvbXBpbGVyICRhY19vcHRpb24gPiY1IikgMj5jb25mdGVzdC5lcnIKKyAgYWNfc3RhdHVzPSQ/CisgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgc2VkICcxMGFcCisuLi4gcmVzdCBvZiBzdGRlcnIgb3V0cHV0IGRlbGV0ZWQgLi4uCisgICAgICAgICAxMHEnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIxCisgICAgY2F0IGNvbmZ0ZXN0LmVyMSA+JjUKKyAgZmkKKyAgcm0gLWYgY29uZnRlc3QuZXIxIGNvbmZ0ZXN0LmVycgorICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfQorZG9uZQorCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIHVzaW5nIHRoZSBHTlUgQyBjb21waWxlciIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHdlIGFyZSB1c2luZyB0aGUgR05VIEMgY29tcGlsZXIuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfY19jb21waWxlcl9nbnUrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworI2lmbmRlZiBfX0dOVUNfXworICAgICAgIGNob2tlIG1lCisjZW5kaWYKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2NvbXBpbGVyX2dudT15ZXMKK2Vsc2UKKyAgYWNfY29tcGlsZXJfZ251PW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CithY19jdl9jX2NvbXBpbGVyX2dudT0kYWNfY29tcGlsZXJfZ251CisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2NfY29tcGlsZXJfZ251IiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfY19jb21waWxlcl9nbnUiID4mNjsgfQoraWYgdGVzdCAkYWNfY29tcGlsZXJfZ251ID0geWVzOyB0aGVuCisgIEdDQz15ZXMKK2Vsc2UKKyAgR0NDPQorZmkKK2FjX3Rlc3RfQ0ZMQUdTPSR7Q0ZMQUdTK3NldH0KK2FjX3NhdmVfQ0ZMQUdTPSRDRkxBR1MKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciAkQ0MgYWNjZXB0cyAtZyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyICRDQyBhY2NlcHRzIC1nLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfY2NfZytzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX3NhdmVfY193ZXJyb3JfZmxhZz0kYWNfY193ZXJyb3JfZmxhZworICAgYWNfY193ZXJyb3JfZmxhZz15ZXMKKyAgIGFjX2N2X3Byb2dfY2NfZz1ubworICAgQ0ZMQUdTPSItZyIKKyAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9wcm9nX2NjX2c9eWVzCitlbHNlCisgIENGTEFHUz0iIgorICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisKK2Vsc2UKKyAgYWNfY193ZXJyb3JfZmxhZz0kYWNfc2F2ZV9jX3dlcnJvcl9mbGFnCisJIENGTEFHUz0iLWciCisJIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9wcm9nX2NjX2c9eWVzCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICBhY19jX3dlcnJvcl9mbGFnPSRhY19zYXZlX2Nfd2Vycm9yX2ZsYWcKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3Byb2dfY2NfZyIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3Byb2dfY2NfZyIgPiY2OyB9CitpZiB0ZXN0ICIkYWNfdGVzdF9DRkxBR1MiID0gc2V0OyB0aGVuCisgIENGTEFHUz0kYWNfc2F2ZV9DRkxBR1MKK2VsaWYgdGVzdCAkYWNfY3ZfcHJvZ19jY19nID0geWVzOyB0aGVuCisgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgQ0ZMQUdTPSItZyAtTzIiCisgIGVsc2UKKyAgICBDRkxBR1M9Ii1nIgorICBmaQorZWxzZQorICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgIENGTEFHUz0iLU8yIgorICBlbHNlCisgICAgQ0ZMQUdTPQorICBmaQorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRDQyBvcHRpb24gdG8gYWNjZXB0IElTTyBDODkiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRDQyBvcHRpb24gdG8gYWNjZXB0IElTTyBDODkuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19jY19jODkrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19jdl9wcm9nX2NjX2M4OT1ubworYWNfc2F2ZV9DQz0kQ0MKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisvKiBNb3N0IG9mIHRoZSBmb2xsb3dpbmcgdGVzdHMgYXJlIHN0b2xlbiBmcm9tIFJDUyA1LjcncyBzcmMvY29uZi5zaC4gICovCitzdHJ1Y3QgYnVmIHsgaW50IHg7IH07CitGSUxFICogKCpyY3NvcGVuKSAoc3RydWN0IGJ1ZiAqLCBzdHJ1Y3Qgc3RhdCAqLCBpbnQpOworc3RhdGljIGNoYXIgKmUgKHAsIGkpCisgICAgIGNoYXIgKipwOworICAgICBpbnQgaTsKK3sKKyAgcmV0dXJuIHBbaV07Cit9CitzdGF0aWMgY2hhciAqZiAoY2hhciAqICgqZykgKGNoYXIgKiosIGludCksIGNoYXIgKipwLCAuLi4pCit7CisgIGNoYXIgKnM7CisgIHZhX2xpc3QgdjsKKyAgdmFfc3RhcnQgKHYscCk7CisgIHMgPSBnIChwLCB2YV9hcmcgKHYsaW50KSk7CisgIHZhX2VuZCAodik7CisgIHJldHVybiBzOworfQorCisvKiBPU0YgNC4wIENvbXBhcSBjYyBpcyBzb21lIHNvcnQgb2YgYWxtb3N0LUFOU0kgYnkgZGVmYXVsdC4gIEl0IGhhcworICAgZnVuY3Rpb24gcHJvdG90eXBlcyBhbmQgc3R1ZmYsIGJ1dCBub3QgJ1x4SEgnIGhleCBjaGFyYWN0ZXIgY29uc3RhbnRzLgorICAgVGhlc2UgZG9uJ3QgcHJvdm9rZSBhbiBlcnJvciB1bmZvcnR1bmF0ZWx5LCBpbnN0ZWFkIGFyZSBzaWxlbnRseSB0cmVhdGVkCisgICBhcyAneCcuICBUaGUgZm9sbG93aW5nIGluZHVjZXMgYW4gZXJyb3IsIHVudGlsIC1zdGQgaXMgYWRkZWQgdG8gZ2V0CisgICBwcm9wZXIgQU5TSSBtb2RlLiAgQ3VyaW91c2x5ICdceDAwJyE9J3gnIGFsd2F5cyBjb21lcyBvdXQgdHJ1ZSwgZm9yIGFuCisgICBhcnJheSBzaXplIGF0IGxlYXN0LiAgSXQncyBuZWNlc3NhcnkgdG8gd3JpdGUgJ1x4MDAnPT0wIHRvIGdldCBzb21ldGhpbmcKKyAgIHRoYXQncyB0cnVlIG9ubHkgd2l0aCAtc3RkLiAgKi8KK2ludCBvc2Y0X2NjX2FycmF5IFsnXHgwMCcgPT0gMCA/IDEgOiAtMV07CisKKy8qIElCTSBDIDYgZm9yIEFJWCBpcyBhbG1vc3QtQU5TSSBieSBkZWZhdWx0LCBidXQgaXQgcmVwbGFjZXMgbWFjcm8gcGFyYW1ldGVycworICAgaW5zaWRlIHN0cmluZ3MgYW5kIGNoYXJhY3RlciBjb25zdGFudHMuICAqLworI2RlZmluZSBGT08oeCkgJ3gnCitpbnQgeGxjNl9jY19hcnJheVtGT08oYSkgPT0gJ3gnID8gMSA6IC0xXTsKKworaW50IHRlc3QgKGludCBpLCBkb3VibGUgeCk7CitzdHJ1Y3QgczEge2ludCAoKmYpIChpbnQgYSk7fTsKK3N0cnVjdCBzMiB7aW50ICgqZikgKGRvdWJsZSBhKTt9OworaW50IHBhaXJuYW1lcyAoaW50LCBjaGFyICoqLCBGSUxFICooKikoc3RydWN0IGJ1ZiAqLCBzdHJ1Y3Qgc3RhdCAqLCBpbnQpLCBpbnQsIGludCk7CitpbnQgYXJnYzsKK2NoYXIgKiphcmd2OworaW50CittYWluICgpCit7CityZXR1cm4gZiAoZSwgYXJndiwgMCkgIT0gYXJndlswXSAgfHwgIGYgKGUsIGFyZ3YsIDEpICE9IGFyZ3ZbMV07CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2ZvciBhY19hcmcgaW4gJycgLXFsYW5nbHZsPWV4dGM4OSAtcWxhbmdsdmw9YW5zaSAtc3RkIFwKKwktQWUgIi1BYSAtRF9IUFVYX1NPVVJDRSIgIi1YYyAtRF9fRVhURU5TSU9OU19fIgorZG8KKyAgQ0M9IiRhY19zYXZlX0NDICRhY19hcmciCisgIGlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfcHJvZ19jY19jODk9JGFjX2FyZworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyAgdGVzdCAieCRhY19jdl9wcm9nX2NjX2M4OSIgIT0gInhubyIgJiYgYnJlYWsKK2RvbmUKK3JtIC1mIGNvbmZ0ZXN0LiRhY19leHQKK0NDPSRhY19zYXZlX0NDCisKK2ZpCisjIEFDX0NBQ0hFX1ZBTAorY2FzZSAieCRhY19jdl9wcm9nX2NjX2M4OSIgaW4KKyAgeCkKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm9uZSBuZWVkZWQiID4mNQorJGFzX2VjaG8gIm5vbmUgbmVlZGVkIiA+JjY7IH0gOzsKKyAgeG5vKQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB1bnN1cHBvcnRlZCIgPiY1CiskYXNfZWNobyAidW5zdXBwb3J0ZWQiID4mNjsgfSA7OworICAqKQorICAgIENDPSIkQ0MgJGFjX2N2X3Byb2dfY2NfYzg5IgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfcHJvZ19jY19jODkiID4mNQorJGFzX2VjaG8gIiRhY19jdl9wcm9nX2NjX2M4OSIgPiY2OyB9IDs7Citlc2FjCitpZiB0ZXN0ICJ4JGFjX2N2X3Byb2dfY2NfYzg5IiAhPSB4bm87IHRoZW4gOgorCitmaQorCithY19leHQ9YworYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CisKK2RlcGNjPSIkQ0MiICAgYW1fY29tcGlsZXJfbGlzdD0KKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBkZXBlbmRlbmN5IHN0eWxlIG9mICRkZXBjYyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBkZXBlbmRlbmN5IHN0eWxlIG9mICRkZXBjYy4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthbV9jdl9DQ19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZStzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLXogIiRBTURFUF9UUlVFIiAmJiB0ZXN0IC1mICIkYW1fZGVwY29tcCI7IHRoZW4KKyAgIyBXZSBtYWtlIGEgc3ViZGlyIGFuZCBkbyB0aGUgdGVzdHMgdGhlcmUuICBPdGhlcndpc2Ugd2UgY2FuIGVuZCB1cAorICAjIG1ha2luZyBib2d1cyBmaWxlcyB0aGF0IHdlIGRvbid0IGtub3cgYWJvdXQgYW5kIG5ldmVyIHJlbW92ZS4gIEZvcgorICAjIGluc3RhbmNlIGl0IHdhcyByZXBvcnRlZCB0aGF0IG9uIEhQLVVYIHRoZSBnY2MgdGVzdCB3aWxsIGVuZCB1cAorICAjIG1ha2luZyBhIGR1bW15IGZpbGUgbmFtZWQgYEQnIC0tIGJlY2F1c2UgYC1NRCcgbWVhbnMgYHB1dCB0aGUgb3V0cHV0CisgICMgaW4gRCcuCisgIG1rZGlyIGNvbmZ0ZXN0LmRpcgorICAjIENvcHkgZGVwY29tcCB0byBzdWJkaXIgYmVjYXVzZSBvdGhlcndpc2Ugd2Ugd29uJ3QgZmluZCBpdCBpZiB3ZSdyZQorICAjIHVzaW5nIGEgcmVsYXRpdmUgZGlyZWN0b3J5LgorICBjcCAiJGFtX2RlcGNvbXAiIGNvbmZ0ZXN0LmRpcgorICBjZCBjb25mdGVzdC5kaXIKKyAgIyBXZSB3aWxsIGJ1aWxkIG9iamVjdHMgYW5kIGRlcGVuZGVuY2llcyBpbiBhIHN1YmRpcmVjdG9yeSBiZWNhdXNlCisgICMgaXQgaGVscHMgdG8gZGV0ZWN0IGluYXBwbGljYWJsZSBkZXBlbmRlbmN5IG1vZGVzLiAgRm9yIGluc3RhbmNlCisgICMgYm90aCBUcnU2NCdzIGNjIGFuZCBJQ0Mgc3VwcG9ydCAtTUQgdG8gb3V0cHV0IGRlcGVuZGVuY2llcyBhcyBhCisgICMgc2lkZSBlZmZlY3Qgb2YgY29tcGlsYXRpb24sIGJ1dCBJQ0Mgd2lsbCBwdXQgdGhlIGRlcGVuZGVuY2llcyBpbgorICAjIHRoZSBjdXJyZW50IGRpcmVjdG9yeSB3aGlsZSBUcnU2NCB3aWxsIHB1dCB0aGVtIGluIHRoZSBvYmplY3QKKyAgIyBkaXJlY3RvcnkuCisgIG1rZGlyIHN1YgorCisgIGFtX2N2X0NDX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlPW5vbmUKKyAgaWYgdGVzdCAiJGFtX2NvbXBpbGVyX2xpc3QiID0gIiI7IHRoZW4KKyAgICAgYW1fY29tcGlsZXJfbGlzdD1gc2VkIC1uICdzL14jKlwoW2EtekEtWjAtOV0qXCkpJC9cMS9wJyA8IC4vZGVwY29tcGAKKyAgZmkKKyAgYW1fX3VuaXZlcnNhbD1mYWxzZQorICBjYXNlICIgJGRlcGNjICIgaW4gIygKKyAgICAgKlwgLWFyY2hcICpcIC1hcmNoXCAqKSBhbV9fdW5pdmVyc2FsPXRydWUgOzsKKyAgICAgZXNhYworCisgIGZvciBkZXBtb2RlIGluICRhbV9jb21waWxlcl9saXN0OyBkbworICAgICMgU2V0dXAgYSBzb3VyY2Ugd2l0aCBtYW55IGRlcGVuZGVuY2llcywgYmVjYXVzZSBzb21lIGNvbXBpbGVycworICAgICMgbGlrZSB0byB3cmFwIGxhcmdlIGRlcGVuZGVuY3kgbGlzdHMgb24gY29sdW1uIDgwICh3aXRoIFwpLCBhbmQKKyAgICAjIHdlIHNob3VsZCBub3QgY2hvb3NlIGEgZGVwY29tcCBtb2RlIHdoaWNoIGlzIGNvbmZ1c2VkIGJ5IHRoaXMuCisgICAgIworICAgICMgV2UgbmVlZCB0byByZWNyZWF0ZSB0aGVzZSBmaWxlcyBmb3IgZWFjaCB0ZXN0LCBhcyB0aGUgY29tcGlsZXIgbWF5CisgICAgIyBvdmVyd3JpdGUgc29tZSBvZiB0aGVtIHdoZW4gdGVzdGluZyB3aXRoIG9ic2N1cmUgY29tbWFuZCBsaW5lcy4KKyAgICAjIFRoaXMgaGFwcGVucyBhdCBsZWFzdCB3aXRoIHRoZSBBSVggQyBjb21waWxlci4KKyAgICA6ID4gc3ViL2NvbmZ0ZXN0LmMKKyAgICBmb3IgaSBpbiAxIDIgMyA0IDUgNjsgZG8KKyAgICAgIGVjaG8gJyNpbmNsdWRlICJjb25mdHN0JyRpJy5oIicgPj4gc3ViL2NvbmZ0ZXN0LmMKKyAgICAgICMgVXNpbmcgYDogPiBzdWIvY29uZnRzdCRpLmgnIGNyZWF0ZXMgb25seSBzdWIvY29uZnRzdDEuaCB3aXRoCisgICAgICAjIFNvbGFyaXMgOCdzIHsvdXNyLH0vYmluL3NoLgorICAgICAgdG91Y2ggc3ViL2NvbmZ0c3QkaS5oCisgICAgZG9uZQorICAgIGVjaG8gIiR7YW1fX2luY2x1ZGV9ICR7YW1fX3F1b3RlfXN1Yi9jb25mdGVzdC5QbyR7YW1fX3F1b3RlfSIgPiBjb25mbWYKKworICAgICMgV2UgY2hlY2sgd2l0aCBgLWMnIGFuZCBgLW8nIGZvciB0aGUgc2FrZSBvZiB0aGUgImRhc2htc3Rkb3V0IgorICAgICMgbW9kZS4gIEl0IHR1cm5zIG91dCB0aGF0IHRoZSBTdW5Qcm8gQysrIGNvbXBpbGVyIGRvZXMgbm90IHByb3Blcmx5CisgICAgIyBoYW5kbGUgYC1NIC1vJywgYW5kIHdlIG5lZWQgdG8gZGV0ZWN0IHRoaXMuICBBbHNvLCBzb21lIEludGVsCisgICAgIyB2ZXJzaW9ucyBoYWQgdHJvdWJsZSB3aXRoIG91dHB1dCBpbiBzdWJkaXJzCisgICAgYW1fX29iaj1zdWIvY29uZnRlc3QuJHtPQkpFWFQtb30KKyAgICBhbV9fbWludXNfb2JqPSItbyAkYW1fX29iaiIKKyAgICBjYXNlICRkZXBtb2RlIGluCisgICAgZ2NjKQorICAgICAgIyBUaGlzIGRlcG1vZGUgY2F1c2VzIGEgY29tcGlsZXIgcmFjZSBpbiB1bml2ZXJzYWwgbW9kZS4KKyAgICAgIHRlc3QgIiRhbV9fdW5pdmVyc2FsIiA9IGZhbHNlIHx8IGNvbnRpbnVlCisgICAgICA7OworICAgIG5vc2lkZWVmZmVjdCkKKyAgICAgICMgYWZ0ZXIgdGhpcyB0YWcsIG1lY2hhbmlzbXMgYXJlIG5vdCBieSBzaWRlLWVmZmVjdCwgc28gdGhleSdsbAorICAgICAgIyBvbmx5IGJlIHVzZWQgd2hlbiBleHBsaWNpdGx5IHJlcXVlc3RlZAorICAgICAgaWYgdGVzdCAieCRlbmFibGVfZGVwZW5kZW5jeV90cmFja2luZyIgPSB4eWVzOyB0aGVuCisJY29udGludWUKKyAgICAgIGVsc2UKKwlicmVhaworICAgICAgZmkKKyAgICAgIDs7CisgICAgbXN2aXN1YWxjcHAgfCBtc3ZjbXN5cykKKyAgICAgICMgVGhpcyBjb21waWxlciB3b24ndCBncm9rIGAtYyAtbycsIGJ1dCBhbHNvLCB0aGUgbWludXNvIHRlc3QgaGFzCisgICAgICAjIG5vdCBydW4geWV0LiAgVGhlc2UgZGVwbW9kZXMgYXJlIGxhdGUgZW5vdWdoIGluIHRoZSBnYW1lLCBhbmQKKyAgICAgICMgc28gd2VhayB0aGF0IHRoZWlyIGZ1bmN0aW9uaW5nIHNob3VsZCBub3QgYmUgaW1wYWN0ZWQuCisgICAgICBhbV9fb2JqPWNvbmZ0ZXN0LiR7T0JKRVhULW99CisgICAgICBhbV9fbWludXNfb2JqPQorICAgICAgOzsKKyAgICBub25lKSBicmVhayA7OworICAgIGVzYWMKKyAgICBpZiBkZXBtb2RlPSRkZXBtb2RlIFwKKyAgICAgICBzb3VyY2U9c3ViL2NvbmZ0ZXN0LmMgb2JqZWN0PSRhbV9fb2JqIFwKKyAgICAgICBkZXBmaWxlPXN1Yi9jb25mdGVzdC5QbyB0bXBkZXBmaWxlPXN1Yi9jb25mdGVzdC5UUG8gXAorICAgICAgICRTSEVMTCAuL2RlcGNvbXAgJGRlcGNjIC1jICRhbV9fbWludXNfb2JqIHN1Yi9jb25mdGVzdC5jIFwKKyAgICAgICAgID4vZGV2L251bGwgMj5jb25mdGVzdC5lcnIgJiYKKyAgICAgICBncmVwIHN1Yi9jb25mdHN0MS5oIHN1Yi9jb25mdGVzdC5QbyA+IC9kZXYvbnVsbCAyPiYxICYmCisgICAgICAgZ3JlcCBzdWIvY29uZnRzdDYuaCBzdWIvY29uZnRlc3QuUG8gPiAvZGV2L251bGwgMj4mMSAmJgorICAgICAgIGdyZXAgJGFtX19vYmogc3ViL2NvbmZ0ZXN0LlBvID4gL2Rldi9udWxsIDI+JjEgJiYKKyAgICAgICAke01BS0UtbWFrZX0gLXMgLWYgY29uZm1mID4gL2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgICMgaWNjIGRvZXNuJ3QgY2hva2Ugb24gdW5rbm93biBvcHRpb25zLCBpdCB3aWxsIGp1c3QgaXNzdWUgd2FybmluZ3MKKyAgICAgICMgb3IgcmVtYXJrcyAoZXZlbiB3aXRoIC1XZXJyb3IpLiAgU28gd2UgZ3JlcCBzdGRlcnIgZm9yIGFueSBtZXNzYWdlCisgICAgICAjIHRoYXQgc2F5cyBhbiBvcHRpb24gd2FzIGlnbm9yZWQgb3Igbm90IHN1cHBvcnRlZC4KKyAgICAgICMgV2hlbiBnaXZlbiAtTVAsIGljYyA3LjAgYW5kIDcuMSBjb21wbGFpbiB0aHVzbHk6CisgICAgICAjICAgaWNjOiBDb21tYW5kIGxpbmUgd2FybmluZzogaWdub3Jpbmcgb3B0aW9uICctTSc7IG5vIGFyZ3VtZW50IHJlcXVpcmVkCisgICAgICAjIFRoZSBkaWFnbm9zaXMgY2hhbmdlZCBpbiBpY2MgOC4wOgorICAgICAgIyAgIGljYzogQ29tbWFuZCBsaW5lIHJlbWFyazogb3B0aW9uICctTVAnIG5vdCBzdXBwb3J0ZWQKKyAgICAgIGlmIChncmVwICdpZ25vcmluZyBvcHRpb24nIGNvbmZ0ZXN0LmVyciB8fAorICAgICAgICAgIGdyZXAgJ25vdCBzdXBwb3J0ZWQnIGNvbmZ0ZXN0LmVycikgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDo7IGVsc2UKKyAgICAgICAgYW1fY3ZfQ0NfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGU9JGRlcG1vZGUKKyAgICAgICAgYnJlYWsKKyAgICAgIGZpCisgICAgZmkKKyAgZG9uZQorCisgIGNkIC4uCisgIHJtIC1yZiBjb25mdGVzdC5kaXIKK2Vsc2UKKyAgYW1fY3ZfQ0NfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGU9bm9uZQorZmkKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYW1fY3ZfQ0NfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUiID4mNQorJGFzX2VjaG8gIiRhbV9jdl9DQ19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZSIgPiY2OyB9CitDQ0RFUE1PREU9ZGVwbW9kZT0kYW1fY3ZfQ0NfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUKKworIGlmCisgIHRlc3QgIngkZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmciICE9IHhubyBcCisgICYmIHRlc3QgIiRhbV9jdl9DQ19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZSIgPSBnY2MzOyB0aGVuCisgIGFtX19mYXN0ZGVwQ0NfVFJVRT0KKyAgYW1fX2Zhc3RkZXBDQ19GQUxTRT0nIycKK2Vsc2UKKyAgYW1fX2Zhc3RkZXBDQ19UUlVFPScjJworICBhbV9fZmFzdGRlcENDX0ZBTFNFPQorZmkKKworCithY19leHQ9YworYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBydW4gdGhlIEMgcHJlcHJvY2Vzc29yIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBydW4gdGhlIEMgcHJlcHJvY2Vzc29yLi4uICIgPiY2OyB9CisjIE9uIFN1bnMsIHNvbWV0aW1lcyAkQ1BQIG5hbWVzIGEgZGlyZWN0b3J5LgoraWYgdGVzdCAtbiAiJENQUCIgJiYgdGVzdCAtZCAiJENQUCI7IHRoZW4KKyAgQ1BQPQorZmkKK2lmIHRlc3QgLXogIiRDUFAiOyB0aGVuCisgIGlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19DUFArc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICAgICAgIyBEb3VibGUgcXVvdGVzIGJlY2F1c2UgQ1BQIG5lZWRzIHRvIGJlIGV4cGFuZGVkCisgICAgZm9yIENQUCBpbiAiJENDIC1FIiAiJENDIC1FIC10cmFkaXRpb25hbC1jcHAiICIvbGliL2NwcCIKKyAgICBkbworICAgICAgYWNfcHJlcHJvY19vaz1mYWxzZQorZm9yIGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4gJycgeWVzCitkbworICAjIFVzZSBhIGhlYWRlciBmaWxlIHRoYXQgY29tZXMgd2l0aCBnY2MsIHNvIGNvbmZpZ3VyaW5nIGdsaWJjCisgICMgd2l0aCBhIGZyZXNoIGNyb3NzLWNvbXBpbGVyIHdvcmtzLgorICAjIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKKyAgIyA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuCisgICMgT24gdGhlIE5lWFQsIGNjIC1FIHJ1bnMgdGhlIGNvZGUgdGhyb3VnaCB0aGUgY29tcGlsZXIncyBwYXJzZXIsCisgICMgbm90IGp1c3QgdGhyb3VnaCBjcHAuICJTeW50YXggZXJyb3IiIGlzIGhlcmUgdG8gY2F0Y2ggdGhpcyBjYXNlLgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaWZkZWYgX19TVERDX18KKyMgaW5jbHVkZSA8bGltaXRzLmg+CisjZWxzZQorIyBpbmNsdWRlIDxhc3NlcnQuaD4KKyNlbmRpZgorCQkgICAgIFN5bnRheCBlcnJvcgorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jcHAgIiRMSU5FTk8iOyB0aGVuIDoKKworZWxzZQorICAjIEJyb2tlbjogZmFpbHMgb24gdmFsaWQgaW5wdXQuCitjb250aW51ZQorZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC5pIGNvbmZ0ZXN0LiRhY19leHQKKworICAjIE9LLCB3b3JrcyBvbiBzYW5lIGNhc2VzLiAgTm93IGNoZWNrIHdoZXRoZXIgbm9uZXhpc3RlbnQgaGVhZGVycworICAjIGNhbiBiZSBkZXRlY3RlZCBhbmQgaG93LgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8YWNfbm9uZXhpc3RlbnQuaD4KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY3BwICIkTElORU5PIjsgdGhlbiA6CisgICMgQnJva2VuOiBzdWNjZXNzIG9uIGludmFsaWQgaW5wdXQuCitjb250aW51ZQorZWxzZQorICAjIFBhc3NlcyBib3RoIHRlc3RzLgorYWNfcHJlcHJvY19vaz06CiticmVhaworZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC5pIGNvbmZ0ZXN0LiRhY19leHQKKworZG9uZQorIyBCZWNhdXNlIG9mIGBicmVhaycsIF9BQ19QUkVQUk9DX0lGRUxTRSdzIGNsZWFuaW5nIGNvZGUgd2FzIHNraXBwZWQuCitybSAtZiBjb25mdGVzdC5pIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CitpZiAkYWNfcHJlcHJvY19vazsgdGhlbiA6CisgIGJyZWFrCitmaQorCisgICAgZG9uZQorICAgIGFjX2N2X3Byb2dfQ1BQPSRDUFAKKworZmkKKyAgQ1BQPSRhY19jdl9wcm9nX0NQUAorZWxzZQorICBhY19jdl9wcm9nX0NQUD0kQ1BQCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRDUFAiID4mNQorJGFzX2VjaG8gIiRDUFAiID4mNjsgfQorYWNfcHJlcHJvY19vaz1mYWxzZQorZm9yIGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4gJycgeWVzCitkbworICAjIFVzZSBhIGhlYWRlciBmaWxlIHRoYXQgY29tZXMgd2l0aCBnY2MsIHNvIGNvbmZpZ3VyaW5nIGdsaWJjCisgICMgd2l0aCBhIGZyZXNoIGNyb3NzLWNvbXBpbGVyIHdvcmtzLgorICAjIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKKyAgIyA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuCisgICMgT24gdGhlIE5lWFQsIGNjIC1FIHJ1bnMgdGhlIGNvZGUgdGhyb3VnaCB0aGUgY29tcGlsZXIncyBwYXJzZXIsCisgICMgbm90IGp1c3QgdGhyb3VnaCBjcHAuICJTeW50YXggZXJyb3IiIGlzIGhlcmUgdG8gY2F0Y2ggdGhpcyBjYXNlLgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaWZkZWYgX19TVERDX18KKyMgaW5jbHVkZSA8bGltaXRzLmg+CisjZWxzZQorIyBpbmNsdWRlIDxhc3NlcnQuaD4KKyNlbmRpZgorCQkgICAgIFN5bnRheCBlcnJvcgorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jcHAgIiRMSU5FTk8iOyB0aGVuIDoKKworZWxzZQorICAjIEJyb2tlbjogZmFpbHMgb24gdmFsaWQgaW5wdXQuCitjb250aW51ZQorZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC5pIGNvbmZ0ZXN0LiRhY19leHQKKworICAjIE9LLCB3b3JrcyBvbiBzYW5lIGNhc2VzLiAgTm93IGNoZWNrIHdoZXRoZXIgbm9uZXhpc3RlbnQgaGVhZGVycworICAjIGNhbiBiZSBkZXRlY3RlZCBhbmQgaG93LgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8YWNfbm9uZXhpc3RlbnQuaD4KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY3BwICIkTElORU5PIjsgdGhlbiA6CisgICMgQnJva2VuOiBzdWNjZXNzIG9uIGludmFsaWQgaW5wdXQuCitjb250aW51ZQorZWxzZQorICAjIFBhc3NlcyBib3RoIHRlc3RzLgorYWNfcHJlcHJvY19vaz06CiticmVhaworZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC5pIGNvbmZ0ZXN0LiRhY19leHQKKworZG9uZQorIyBCZWNhdXNlIG9mIGBicmVhaycsIF9BQ19QUkVQUk9DX0lGRUxTRSdzIGNsZWFuaW5nIGNvZGUgd2FzIHNraXBwZWQuCitybSAtZiBjb25mdGVzdC5pIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CitpZiAkYWNfcHJlcHJvY19vazsgdGhlbiA6CisKK2Vsc2UKKyAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Cithc19mbl9lcnJvciAkPyAiQyBwcmVwcm9jZXNzb3IgXCIkQ1BQXCIgZmFpbHMgc2FuaXR5IGNoZWNrCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNSA7IH0KK2ZpCisKK2FjX2V4dD1jCithY19jcHA9JyRDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKKworYWNfZXh0PWNwcAorYWNfY3BwPSckQ1hYQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDWFggLWMgJENYWEZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDWFggLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDWFhGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2N4eF9jb21waWxlcl9nbnUKK2lmIHRlc3QgLXogIiRDWFgiOyB0aGVuCisgIGlmIHRlc3QgLW4gIiRDQ0MiOyB0aGVuCisgICAgQ1hYPSRDQ0MKKyAgZWxzZQorICAgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgZm9yIGFjX3Byb2cgaW4gZysrIGMrKyBncHAgYUNDIENDIGN4eCBjYysrIGNsLmV4ZSBGQ0MgS0NDIFJDQyB4bENfciB4bEMKKyAgZG8KKyAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY190b29sX3ByZWZpeCRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfQ1hYK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJENYWCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19DWFg9IiRDWFgiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19DWFg9IiRhY190b29sX3ByZWZpeCRhY19wcm9nIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK0NYWD0kYWNfY3ZfcHJvZ19DWFgKK2lmIHRlc3QgLW4gIiRDWFgiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkQ1hYIiA+JjUKKyRhc19lY2hvICIkQ1hYIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKKyAgICB0ZXN0IC1uICIkQ1hYIiAmJiBicmVhaworICBkb25lCitmaQoraWYgdGVzdCAteiAiJENYWCI7IHRoZW4KKyAgYWNfY3RfQ1hYPSRDWFgKKyAgZm9yIGFjX3Byb2cgaW4gZysrIGMrKyBncHAgYUNDIENDIGN4eCBjYysrIGNsLmV4ZSBGQ0MgS0NDIFJDQyB4bENfciB4bEMKK2RvCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICRhY19wcm9nOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9DWFgrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfQ1hYIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X0NYWD0iJGFjX2N0X0NYWCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X0NYWD0iJGFjX3Byb2ciCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorYWNfY3RfQ1hYPSRhY19jdl9wcm9nX2FjX2N0X0NYWAoraWYgdGVzdCAtbiAiJGFjX2N0X0NYWCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9DWFgiID4mNQorJGFzX2VjaG8gIiRhY19jdF9DWFgiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworICB0ZXN0IC1uICIkYWNfY3RfQ1hYIiAmJiBicmVhaworZG9uZQorCisgIGlmIHRlc3QgIngkYWNfY3RfQ1hYIiA9IHg7IHRoZW4KKyAgICBDWFg9ImcrKyIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBDWFg9JGFjX2N0X0NYWAorICBmaQorZmkKKworICBmaQorZmkKKyMgUHJvdmlkZSBzb21lIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjb21waWxlci4KKyRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBDKysgY29tcGlsZXIgdmVyc2lvbiIgPiY1CitzZXQgWCAkYWNfY29tcGlsZQorYWNfY29tcGlsZXI9JDIKK2ZvciBhY19vcHRpb24gaW4gLS12ZXJzaW9uIC12IC1WIC1xdmVyc2lvbjsgZG8KKyAgeyB7IGFjX3RyeT0iJGFjX2NvbXBpbGVyICRhY19vcHRpb24gPiY1IgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisgIChldmFsICIkYWNfY29tcGlsZXIgJGFjX29wdGlvbiA+JjUiKSAyPmNvbmZ0ZXN0LmVycgorICBhY19zdGF0dXM9JD8KKyAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICBzZWQgJzEwYVwKKy4uLiByZXN0IG9mIHN0ZGVyciBvdXRwdXQgZGVsZXRlZCAuLi4KKyAgICAgICAgIDEwcScgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjEKKyAgICBjYXQgY29uZnRlc3QuZXIxID4mNQorICBmaQorICBybSAtZiBjb25mdGVzdC5lcjEgY29uZnRlc3QuZXJyCisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9Citkb25lCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgdXNpbmcgdGhlIEdOVSBDKysgY29tcGlsZXIiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgdXNpbmcgdGhlIEdOVSBDKysgY29tcGlsZXIuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfY3h4X2NvbXBpbGVyX2dudStzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisjaWZuZGVmIF9fR05VQ19fCisgICAgICAgY2hva2UgbWUKKyNlbmRpZgorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2N4eF90cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jb21waWxlcl9nbnU9eWVzCitlbHNlCisgIGFjX2NvbXBpbGVyX2dudT1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorYWNfY3ZfY3h4X2NvbXBpbGVyX2dudT0kYWNfY29tcGlsZXJfZ251CisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2N4eF9jb21waWxlcl9nbnUiID4mNQorJGFzX2VjaG8gIiRhY19jdl9jeHhfY29tcGlsZXJfZ251IiA+JjY7IH0KK2lmIHRlc3QgJGFjX2NvbXBpbGVyX2dudSA9IHllczsgdGhlbgorICBHWFg9eWVzCitlbHNlCisgIEdYWD0KK2ZpCithY190ZXN0X0NYWEZMQUdTPSR7Q1hYRkxBR1Mrc2V0fQorYWNfc2F2ZV9DWFhGTEFHUz0kQ1hYRkxBR1MKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciAkQ1hYIGFjY2VwdHMgLWciID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAkQ1hYIGFjY2VwdHMgLWcuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19jeHhfZytzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX3NhdmVfY3h4X3dlcnJvcl9mbGFnPSRhY19jeHhfd2Vycm9yX2ZsYWcKKyAgIGFjX2N4eF93ZXJyb3JfZmxhZz15ZXMKKyAgIGFjX2N2X3Byb2dfY3h4X2c9bm8KKyAgIENYWEZMQUdTPSItZyIKKyAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY3h4X3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X3Byb2dfY3h4X2c9eWVzCitlbHNlCisgIENYWEZMQUdTPSIiCisgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2N4eF90cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCitlbHNlCisgIGFjX2N4eF93ZXJyb3JfZmxhZz0kYWNfc2F2ZV9jeHhfd2Vycm9yX2ZsYWcKKwkgQ1hYRkxBR1M9Ii1nIgorCSBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2N4eF90cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9wcm9nX2N4eF9nPXllcworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgYWNfY3h4X3dlcnJvcl9mbGFnPSRhY19zYXZlX2N4eF93ZXJyb3JfZmxhZworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfcHJvZ19jeHhfZyIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3Byb2dfY3h4X2ciID4mNjsgfQoraWYgdGVzdCAiJGFjX3Rlc3RfQ1hYRkxBR1MiID0gc2V0OyB0aGVuCisgIENYWEZMQUdTPSRhY19zYXZlX0NYWEZMQUdTCitlbGlmIHRlc3QgJGFjX2N2X3Byb2dfY3h4X2cgPSB5ZXM7IHRoZW4KKyAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KKyAgICBDWFhGTEFHUz0iLWcgLU8yIgorICBlbHNlCisgICAgQ1hYRkxBR1M9Ii1nIgorICBmaQorZWxzZQorICBpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgorICAgIENYWEZMQUdTPSItTzIiCisgIGVsc2UKKyAgICBDWFhGTEFHUz0KKyAgZmkKK2ZpCithY19leHQ9YworYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CisKK2RlcGNjPSIkQ1hYIiAgYW1fY29tcGlsZXJfbGlzdD0KKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBkZXBlbmRlbmN5IHN0eWxlIG9mICRkZXBjYyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBkZXBlbmRlbmN5IHN0eWxlIG9mICRkZXBjYy4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthbV9jdl9DWFhfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC16ICIkQU1ERVBfVFJVRSIgJiYgdGVzdCAtZiAiJGFtX2RlcGNvbXAiOyB0aGVuCisgICMgV2UgbWFrZSBhIHN1YmRpciBhbmQgZG8gdGhlIHRlc3RzIHRoZXJlLiAgT3RoZXJ3aXNlIHdlIGNhbiBlbmQgdXAKKyAgIyBtYWtpbmcgYm9ndXMgZmlsZXMgdGhhdCB3ZSBkb24ndCBrbm93IGFib3V0IGFuZCBuZXZlciByZW1vdmUuICBGb3IKKyAgIyBpbnN0YW5jZSBpdCB3YXMgcmVwb3J0ZWQgdGhhdCBvbiBIUC1VWCB0aGUgZ2NjIHRlc3Qgd2lsbCBlbmQgdXAKKyAgIyBtYWtpbmcgYSBkdW1teSBmaWxlIG5hbWVkIGBEJyAtLSBiZWNhdXNlIGAtTUQnIG1lYW5zIGBwdXQgdGhlIG91dHB1dAorICAjIGluIEQnLgorICBta2RpciBjb25mdGVzdC5kaXIKKyAgIyBDb3B5IGRlcGNvbXAgdG8gc3ViZGlyIGJlY2F1c2Ugb3RoZXJ3aXNlIHdlIHdvbid0IGZpbmQgaXQgaWYgd2UncmUKKyAgIyB1c2luZyBhIHJlbGF0aXZlIGRpcmVjdG9yeS4KKyAgY3AgIiRhbV9kZXBjb21wIiBjb25mdGVzdC5kaXIKKyAgY2QgY29uZnRlc3QuZGlyCisgICMgV2Ugd2lsbCBidWlsZCBvYmplY3RzIGFuZCBkZXBlbmRlbmNpZXMgaW4gYSBzdWJkaXJlY3RvcnkgYmVjYXVzZQorICAjIGl0IGhlbHBzIHRvIGRldGVjdCBpbmFwcGxpY2FibGUgZGVwZW5kZW5jeSBtb2Rlcy4gIEZvciBpbnN0YW5jZQorICAjIGJvdGggVHJ1NjQncyBjYyBhbmQgSUNDIHN1cHBvcnQgLU1EIHRvIG91dHB1dCBkZXBlbmRlbmNpZXMgYXMgYQorICAjIHNpZGUgZWZmZWN0IG9mIGNvbXBpbGF0aW9uLCBidXQgSUNDIHdpbGwgcHV0IHRoZSBkZXBlbmRlbmNpZXMgaW4KKyAgIyB0aGUgY3VycmVudCBkaXJlY3Rvcnkgd2hpbGUgVHJ1NjQgd2lsbCBwdXQgdGhlbSBpbiB0aGUgb2JqZWN0CisgICMgZGlyZWN0b3J5LgorICBta2RpciBzdWIKKworICBhbV9jdl9DWFhfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGU9bm9uZQorICBpZiB0ZXN0ICIkYW1fY29tcGlsZXJfbGlzdCIgPSAiIjsgdGhlbgorICAgICBhbV9jb21waWxlcl9saXN0PWBzZWQgLW4gJ3MvXiMqXChbYS16QS1aMC05XSpcKSkkL1wxL3AnIDwgLi9kZXBjb21wYAorICBmaQorICBhbV9fdW5pdmVyc2FsPWZhbHNlCisgIGNhc2UgIiAkZGVwY2MgIiBpbiAjKAorICAgICAqXCAtYXJjaFwgKlwgLWFyY2hcICopIGFtX191bml2ZXJzYWw9dHJ1ZSA7OworICAgICBlc2FjCisKKyAgZm9yIGRlcG1vZGUgaW4gJGFtX2NvbXBpbGVyX2xpc3Q7IGRvCisgICAgIyBTZXR1cCBhIHNvdXJjZSB3aXRoIG1hbnkgZGVwZW5kZW5jaWVzLCBiZWNhdXNlIHNvbWUgY29tcGlsZXJzCisgICAgIyBsaWtlIHRvIHdyYXAgbGFyZ2UgZGVwZW5kZW5jeSBsaXN0cyBvbiBjb2x1bW4gODAgKHdpdGggXCksIGFuZAorICAgICMgd2Ugc2hvdWxkIG5vdCBjaG9vc2UgYSBkZXBjb21wIG1vZGUgd2hpY2ggaXMgY29uZnVzZWQgYnkgdGhpcy4KKyAgICAjCisgICAgIyBXZSBuZWVkIHRvIHJlY3JlYXRlIHRoZXNlIGZpbGVzIGZvciBlYWNoIHRlc3QsIGFzIHRoZSBjb21waWxlciBtYXkKKyAgICAjIG92ZXJ3cml0ZSBzb21lIG9mIHRoZW0gd2hlbiB0ZXN0aW5nIHdpdGggb2JzY3VyZSBjb21tYW5kIGxpbmVzLgorICAgICMgVGhpcyBoYXBwZW5zIGF0IGxlYXN0IHdpdGggdGhlIEFJWCBDIGNvbXBpbGVyLgorICAgIDogPiBzdWIvY29uZnRlc3QuYworICAgIGZvciBpIGluIDEgMiAzIDQgNSA2OyBkbworICAgICAgZWNobyAnI2luY2x1ZGUgImNvbmZ0c3QnJGknLmgiJyA+PiBzdWIvY29uZnRlc3QuYworICAgICAgIyBVc2luZyBgOiA+IHN1Yi9jb25mdHN0JGkuaCcgY3JlYXRlcyBvbmx5IHN1Yi9jb25mdHN0MS5oIHdpdGgKKyAgICAgICMgU29sYXJpcyA4J3Mgey91c3IsfS9iaW4vc2guCisgICAgICB0b3VjaCBzdWIvY29uZnRzdCRpLmgKKyAgICBkb25lCisgICAgZWNobyAiJHthbV9faW5jbHVkZX0gJHthbV9fcXVvdGV9c3ViL2NvbmZ0ZXN0LlBvJHthbV9fcXVvdGV9IiA+IGNvbmZtZgorCisgICAgIyBXZSBjaGVjayB3aXRoIGAtYycgYW5kIGAtbycgZm9yIHRoZSBzYWtlIG9mIHRoZSAiZGFzaG1zdGRvdXQiCisgICAgIyBtb2RlLiAgSXQgdHVybnMgb3V0IHRoYXQgdGhlIFN1blBybyBDKysgY29tcGlsZXIgZG9lcyBub3QgcHJvcGVybHkKKyAgICAjIGhhbmRsZSBgLU0gLW8nLCBhbmQgd2UgbmVlZCB0byBkZXRlY3QgdGhpcy4gIEFsc28sIHNvbWUgSW50ZWwKKyAgICAjIHZlcnNpb25zIGhhZCB0cm91YmxlIHdpdGggb3V0cHV0IGluIHN1YmRpcnMKKyAgICBhbV9fb2JqPXN1Yi9jb25mdGVzdC4ke09CSkVYVC1vfQorICAgIGFtX19taW51c19vYmo9Ii1vICRhbV9fb2JqIgorICAgIGNhc2UgJGRlcG1vZGUgaW4KKyAgICBnY2MpCisgICAgICAjIFRoaXMgZGVwbW9kZSBjYXVzZXMgYSBjb21waWxlciByYWNlIGluIHVuaXZlcnNhbCBtb2RlLgorICAgICAgdGVzdCAiJGFtX191bml2ZXJzYWwiID0gZmFsc2UgfHwgY29udGludWUKKyAgICAgIDs7CisgICAgbm9zaWRlZWZmZWN0KQorICAgICAgIyBhZnRlciB0aGlzIHRhZywgbWVjaGFuaXNtcyBhcmUgbm90IGJ5IHNpZGUtZWZmZWN0LCBzbyB0aGV5J2xsCisgICAgICAjIG9ubHkgYmUgdXNlZCB3aGVuIGV4cGxpY2l0bHkgcmVxdWVzdGVkCisgICAgICBpZiB0ZXN0ICJ4JGVuYWJsZV9kZXBlbmRlbmN5X3RyYWNraW5nIiA9IHh5ZXM7IHRoZW4KKwljb250aW51ZQorICAgICAgZWxzZQorCWJyZWFrCisgICAgICBmaQorICAgICAgOzsKKyAgICBtc3Zpc3VhbGNwcCB8IG1zdmNtc3lzKQorICAgICAgIyBUaGlzIGNvbXBpbGVyIHdvbid0IGdyb2sgYC1jIC1vJywgYnV0IGFsc28sIHRoZSBtaW51c28gdGVzdCBoYXMKKyAgICAgICMgbm90IHJ1biB5ZXQuICBUaGVzZSBkZXBtb2RlcyBhcmUgbGF0ZSBlbm91Z2ggaW4gdGhlIGdhbWUsIGFuZAorICAgICAgIyBzbyB3ZWFrIHRoYXQgdGhlaXIgZnVuY3Rpb25pbmcgc2hvdWxkIG5vdCBiZSBpbXBhY3RlZC4KKyAgICAgIGFtX19vYmo9Y29uZnRlc3QuJHtPQkpFWFQtb30KKyAgICAgIGFtX19taW51c19vYmo9CisgICAgICA7OworICAgIG5vbmUpIGJyZWFrIDs7CisgICAgZXNhYworICAgIGlmIGRlcG1vZGU9JGRlcG1vZGUgXAorICAgICAgIHNvdXJjZT1zdWIvY29uZnRlc3QuYyBvYmplY3Q9JGFtX19vYmogXAorICAgICAgIGRlcGZpbGU9c3ViL2NvbmZ0ZXN0LlBvIHRtcGRlcGZpbGU9c3ViL2NvbmZ0ZXN0LlRQbyBcCisgICAgICAgJFNIRUxMIC4vZGVwY29tcCAkZGVwY2MgLWMgJGFtX19taW51c19vYmogc3ViL2NvbmZ0ZXN0LmMgXAorICAgICAgICAgPi9kZXYvbnVsbCAyPmNvbmZ0ZXN0LmVyciAmJgorICAgICAgIGdyZXAgc3ViL2NvbmZ0c3QxLmggc3ViL2NvbmZ0ZXN0LlBvID4gL2Rldi9udWxsIDI+JjEgJiYKKyAgICAgICBncmVwIHN1Yi9jb25mdHN0Ni5oIHN1Yi9jb25mdGVzdC5QbyA+IC9kZXYvbnVsbCAyPiYxICYmCisgICAgICAgZ3JlcCAkYW1fX29iaiBzdWIvY29uZnRlc3QuUG8gPiAvZGV2L251bGwgMj4mMSAmJgorICAgICAgICR7TUFLRS1tYWtlfSAtcyAtZiBjb25mbWYgPiAvZGV2L251bGwgMj4mMTsgdGhlbgorICAgICAgIyBpY2MgZG9lc24ndCBjaG9rZSBvbiB1bmtub3duIG9wdGlvbnMsIGl0IHdpbGwganVzdCBpc3N1ZSB3YXJuaW5ncworICAgICAgIyBvciByZW1hcmtzIChldmVuIHdpdGggLVdlcnJvcikuICBTbyB3ZSBncmVwIHN0ZGVyciBmb3IgYW55IG1lc3NhZ2UKKyAgICAgICMgdGhhdCBzYXlzIGFuIG9wdGlvbiB3YXMgaWdub3JlZCBvciBub3Qgc3VwcG9ydGVkLgorICAgICAgIyBXaGVuIGdpdmVuIC1NUCwgaWNjIDcuMCBhbmQgNy4xIGNvbXBsYWluIHRodXNseToKKyAgICAgICMgICBpY2M6IENvbW1hbmQgbGluZSB3YXJuaW5nOiBpZ25vcmluZyBvcHRpb24gJy1NJzsgbm8gYXJndW1lbnQgcmVxdWlyZWQKKyAgICAgICMgVGhlIGRpYWdub3NpcyBjaGFuZ2VkIGluIGljYyA4LjA6CisgICAgICAjICAgaWNjOiBDb21tYW5kIGxpbmUgcmVtYXJrOiBvcHRpb24gJy1NUCcgbm90IHN1cHBvcnRlZAorICAgICAgaWYgKGdyZXAgJ2lnbm9yaW5nIG9wdGlvbicgY29uZnRlc3QuZXJyIHx8CisgICAgICAgICAgZ3JlcCAnbm90IHN1cHBvcnRlZCcgY29uZnRlc3QuZXJyKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOjsgZWxzZQorICAgICAgICBhbV9jdl9DWFhfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGU9JGRlcG1vZGUKKyAgICAgICAgYnJlYWsKKyAgICAgIGZpCisgICAgZmkKKyAgZG9uZQorCisgIGNkIC4uCisgIHJtIC1yZiBjb25mdGVzdC5kaXIKK2Vsc2UKKyAgYW1fY3ZfQ1hYX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlPW5vbmUKK2ZpCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFtX2N2X0NYWF9kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZSIgPiY1CiskYXNfZWNobyAiJGFtX2N2X0NYWF9kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZSIgPiY2OyB9CitDWFhERVBNT0RFPWRlcG1vZGU9JGFtX2N2X0NYWF9kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZQorCisgaWYKKyAgdGVzdCAieCRlbmFibGVfZGVwZW5kZW5jeV90cmFja2luZyIgIT0geG5vIFwKKyAgJiYgdGVzdCAiJGFtX2N2X0NYWF9kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZSIgPSBnY2MzOyB0aGVuCisgIGFtX19mYXN0ZGVwQ1hYX1RSVUU9CisgIGFtX19mYXN0ZGVwQ1hYX0ZBTFNFPScjJworZWxzZQorICBhbV9fZmFzdGRlcENYWF9UUlVFPScjJworICBhbV9fZmFzdGRlcENYWF9GQUxTRT0KK2ZpCisKKworCithY19leHQ9Y3BwCithY19jcHA9JyRDWFhDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENYWCAtYyAkQ1hYRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENYWCAtbyBjb25mdGVzdCRhY19leGVleHQgJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY3h4X2NvbXBpbGVyX2dudQoraWYgdGVzdCAteiAiJENYWCI7IHRoZW4KKyAgaWYgdGVzdCAtbiAiJENDQyI7IHRoZW4KKyAgICBDWFg9JENDQworICBlbHNlCisgICAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICBmb3IgYWNfcHJvZyBpbiBnKysgYysrIGdwcCBhQ0MgQ0MgY3h4IGNjKysgY2wuZXhlIEZDQyBLQ0MgUkNDIHhsQ19yIHhsQworICBkbworICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICRhY190b29sX3ByZWZpeCRhY19wcm9nOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19DWFgrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkQ1hYIjsgdGhlbgorICBhY19jdl9wcm9nX0NYWD0iJENYWCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX0NYWD0iJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorQ1hYPSRhY19jdl9wcm9nX0NYWAoraWYgdGVzdCAtbiAiJENYWCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRDWFgiID4mNQorJGFzX2VjaG8gIiRDWFgiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworICAgIHRlc3QgLW4gIiRDWFgiICYmIGJyZWFrCisgIGRvbmUKK2ZpCitpZiB0ZXN0IC16ICIkQ1hYIjsgdGhlbgorICBhY19jdF9DWFg9JENYWAorICBmb3IgYWNfcHJvZyBpbiBnKysgYysrIGdwcCBhQ0MgQ0MgY3h4IGNjKysgY2wuZXhlIEZDQyBLQ0MgUkNDIHhsQ19yIHhsQworZG8KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJGFjX3Byb2c7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X0NYWCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9DWFgiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfQ1hYPSIkYWNfY3RfQ1hYIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfQ1hYPSIkYWNfcHJvZyIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCithY19jdF9DWFg9JGFjX2N2X3Byb2dfYWNfY3RfQ1hYCitpZiB0ZXN0IC1uICIkYWNfY3RfQ1hYIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X0NYWCIgPiY1CiskYXNfZWNobyAiJGFjX2N0X0NYWCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisgIHRlc3QgLW4gIiRhY19jdF9DWFgiICYmIGJyZWFrCitkb25lCisKKyAgaWYgdGVzdCAieCRhY19jdF9DWFgiID0geDsgdGhlbgorICAgIENYWD0iZysrIgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIENYWD0kYWNfY3RfQ1hYCisgIGZpCitmaQorCisgIGZpCitmaQorIyBQcm92aWRlIHNvbWUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNvbXBpbGVyLgorJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIEMrKyBjb21waWxlciB2ZXJzaW9uIiA+JjUKK3NldCBYICRhY19jb21waWxlCithY19jb21waWxlcj0kMgorZm9yIGFjX29wdGlvbiBpbiAtLXZlcnNpb24gLXYgLVYgLXF2ZXJzaW9uOyBkbworICB7IHsgYWNfdHJ5PSIkYWNfY29tcGlsZXIgJGFjX29wdGlvbiA+JjUiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKKyAgKGV2YWwgIiRhY19jb21waWxlciAkYWNfb3B0aW9uID4mNSIpIDI+Y29uZnRlc3QuZXJyCisgIGFjX3N0YXR1cz0kPworICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgIHNlZCAnMTBhXAorLi4uIHJlc3Qgb2Ygc3RkZXJyIG91dHB1dCBkZWxldGVkIC4uLgorICAgICAgICAgMTBxJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMQorICAgIGNhdCBjb25mdGVzdC5lcjEgPiY1CisgIGZpCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMSBjb25mdGVzdC5lcnIKKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0KK2RvbmUKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHdlIGFyZSB1c2luZyB0aGUgR05VIEMrKyBjb21waWxlciIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHdlIGFyZSB1c2luZyB0aGUgR05VIEMrKyBjb21waWxlci4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9jeHhfY29tcGlsZXJfZ251K3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKyNpZm5kZWYgX19HTlVDX18KKyAgICAgICBjaG9rZSBtZQorI2VuZGlmCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY3h4X3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2NvbXBpbGVyX2dudT15ZXMKK2Vsc2UKKyAgYWNfY29tcGlsZXJfZ251PW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CithY19jdl9jeHhfY29tcGlsZXJfZ251PSRhY19jb21waWxlcl9nbnUKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfY3h4X2NvbXBpbGVyX2dudSIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2N4eF9jb21waWxlcl9nbnUiID4mNjsgfQoraWYgdGVzdCAkYWNfY29tcGlsZXJfZ251ID0geWVzOyB0aGVuCisgIEdYWD15ZXMKK2Vsc2UKKyAgR1hYPQorZmkKK2FjX3Rlc3RfQ1hYRkxBR1M9JHtDWFhGTEFHUytzZXR9CithY19zYXZlX0NYWEZMQUdTPSRDWFhGTEFHUworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyICRDWFggYWNjZXB0cyAtZyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyICRDWFggYWNjZXB0cyAtZy4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX2N4eF9nK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfc2F2ZV9jeHhfd2Vycm9yX2ZsYWc9JGFjX2N4eF93ZXJyb3JfZmxhZworICAgYWNfY3h4X3dlcnJvcl9mbGFnPXllcworICAgYWNfY3ZfcHJvZ19jeHhfZz1ubworICAgQ1hYRkxBR1M9Ii1nIgorICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jeHhfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfcHJvZ19jeHhfZz15ZXMKK2Vsc2UKKyAgQ1hYRkxBR1M9IiIKKyAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY3h4X3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisKK2Vsc2UKKyAgYWNfY3h4X3dlcnJvcl9mbGFnPSRhY19zYXZlX2N4eF93ZXJyb3JfZmxhZworCSBDWFhGTEFHUz0iLWciCisJIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY3h4X3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X3Byb2dfY3h4X2c9eWVzCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICBhY19jeHhfd2Vycm9yX2ZsYWc9JGFjX3NhdmVfY3h4X3dlcnJvcl9mbGFnCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9wcm9nX2N4eF9nIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfcHJvZ19jeHhfZyIgPiY2OyB9CitpZiB0ZXN0ICIkYWNfdGVzdF9DWFhGTEFHUyIgPSBzZXQ7IHRoZW4KKyAgQ1hYRkxBR1M9JGFjX3NhdmVfQ1hYRkxBR1MKK2VsaWYgdGVzdCAkYWNfY3ZfcHJvZ19jeHhfZyA9IHllczsgdGhlbgorICBpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgorICAgIENYWEZMQUdTPSItZyAtTzIiCisgIGVsc2UKKyAgICBDWFhGTEFHUz0iLWciCisgIGZpCitlbHNlCisgIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCisgICAgQ1hYRkxBR1M9Ii1PMiIKKyAgZWxzZQorICAgIENYWEZMQUdTPQorICBmaQorZmkKK2FjX2V4dD1jCithY19jcHA9JyRDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKKworZGVwY2M9IiRDWFgiICBhbV9jb21waWxlcl9saXN0PQorCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGRlcGVuZGVuY3kgc3R5bGUgb2YgJGRlcGNjIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGRlcGVuZGVuY3kgc3R5bGUgb2YgJGRlcGNjLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FtX2N2X0NYWF9kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZStzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLXogIiRBTURFUF9UUlVFIiAmJiB0ZXN0IC1mICIkYW1fZGVwY29tcCI7IHRoZW4KKyAgIyBXZSBtYWtlIGEgc3ViZGlyIGFuZCBkbyB0aGUgdGVzdHMgdGhlcmUuICBPdGhlcndpc2Ugd2UgY2FuIGVuZCB1cAorICAjIG1ha2luZyBib2d1cyBmaWxlcyB0aGF0IHdlIGRvbid0IGtub3cgYWJvdXQgYW5kIG5ldmVyIHJlbW92ZS4gIEZvcgorICAjIGluc3RhbmNlIGl0IHdhcyByZXBvcnRlZCB0aGF0IG9uIEhQLVVYIHRoZSBnY2MgdGVzdCB3aWxsIGVuZCB1cAorICAjIG1ha2luZyBhIGR1bW15IGZpbGUgbmFtZWQgYEQnIC0tIGJlY2F1c2UgYC1NRCcgbWVhbnMgYHB1dCB0aGUgb3V0cHV0CisgICMgaW4gRCcuCisgIG1rZGlyIGNvbmZ0ZXN0LmRpcgorICAjIENvcHkgZGVwY29tcCB0byBzdWJkaXIgYmVjYXVzZSBvdGhlcndpc2Ugd2Ugd29uJ3QgZmluZCBpdCBpZiB3ZSdyZQorICAjIHVzaW5nIGEgcmVsYXRpdmUgZGlyZWN0b3J5LgorICBjcCAiJGFtX2RlcGNvbXAiIGNvbmZ0ZXN0LmRpcgorICBjZCBjb25mdGVzdC5kaXIKKyAgIyBXZSB3aWxsIGJ1aWxkIG9iamVjdHMgYW5kIGRlcGVuZGVuY2llcyBpbiBhIHN1YmRpcmVjdG9yeSBiZWNhdXNlCisgICMgaXQgaGVscHMgdG8gZGV0ZWN0IGluYXBwbGljYWJsZSBkZXBlbmRlbmN5IG1vZGVzLiAgRm9yIGluc3RhbmNlCisgICMgYm90aCBUcnU2NCdzIGNjIGFuZCBJQ0Mgc3VwcG9ydCAtTUQgdG8gb3V0cHV0IGRlcGVuZGVuY2llcyBhcyBhCisgICMgc2lkZSBlZmZlY3Qgb2YgY29tcGlsYXRpb24sIGJ1dCBJQ0Mgd2lsbCBwdXQgdGhlIGRlcGVuZGVuY2llcyBpbgorICAjIHRoZSBjdXJyZW50IGRpcmVjdG9yeSB3aGlsZSBUcnU2NCB3aWxsIHB1dCB0aGVtIGluIHRoZSBvYmplY3QKKyAgIyBkaXJlY3RvcnkuCisgIG1rZGlyIHN1YgorCisgIGFtX2N2X0NYWF9kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZT1ub25lCisgIGlmIHRlc3QgIiRhbV9jb21waWxlcl9saXN0IiA9ICIiOyB0aGVuCisgICAgIGFtX2NvbXBpbGVyX2xpc3Q9YHNlZCAtbiAncy9eIypcKFthLXpBLVowLTldKlwpKSQvXDEvcCcgPCAuL2RlcGNvbXBgCisgIGZpCisgIGFtX191bml2ZXJzYWw9ZmFsc2UKKyAgY2FzZSAiICRkZXBjYyAiIGluICMoCisgICAgICpcIC1hcmNoXCAqXCAtYXJjaFwgKikgYW1fX3VuaXZlcnNhbD10cnVlIDs7CisgICAgIGVzYWMKKworICBmb3IgZGVwbW9kZSBpbiAkYW1fY29tcGlsZXJfbGlzdDsgZG8KKyAgICAjIFNldHVwIGEgc291cmNlIHdpdGggbWFueSBkZXBlbmRlbmNpZXMsIGJlY2F1c2Ugc29tZSBjb21waWxlcnMKKyAgICAjIGxpa2UgdG8gd3JhcCBsYXJnZSBkZXBlbmRlbmN5IGxpc3RzIG9uIGNvbHVtbiA4MCAod2l0aCBcKSwgYW5kCisgICAgIyB3ZSBzaG91bGQgbm90IGNob29zZSBhIGRlcGNvbXAgbW9kZSB3aGljaCBpcyBjb25mdXNlZCBieSB0aGlzLgorICAgICMKKyAgICAjIFdlIG5lZWQgdG8gcmVjcmVhdGUgdGhlc2UgZmlsZXMgZm9yIGVhY2ggdGVzdCwgYXMgdGhlIGNvbXBpbGVyIG1heQorICAgICMgb3ZlcndyaXRlIHNvbWUgb2YgdGhlbSB3aGVuIHRlc3Rpbmcgd2l0aCBvYnNjdXJlIGNvbW1hbmQgbGluZXMuCisgICAgIyBUaGlzIGhhcHBlbnMgYXQgbGVhc3Qgd2l0aCB0aGUgQUlYIEMgY29tcGlsZXIuCisgICAgOiA+IHN1Yi9jb25mdGVzdC5jCisgICAgZm9yIGkgaW4gMSAyIDMgNCA1IDY7IGRvCisgICAgICBlY2hvICcjaW5jbHVkZSAiY29uZnRzdCckaScuaCInID4+IHN1Yi9jb25mdGVzdC5jCisgICAgICAjIFVzaW5nIGA6ID4gc3ViL2NvbmZ0c3QkaS5oJyBjcmVhdGVzIG9ubHkgc3ViL2NvbmZ0c3QxLmggd2l0aAorICAgICAgIyBTb2xhcmlzIDgncyB7L3Vzcix9L2Jpbi9zaC4KKyAgICAgIHRvdWNoIHN1Yi9jb25mdHN0JGkuaAorICAgIGRvbmUKKyAgICBlY2hvICIke2FtX19pbmNsdWRlfSAke2FtX19xdW90ZX1zdWIvY29uZnRlc3QuUG8ke2FtX19xdW90ZX0iID4gY29uZm1mCisKKyAgICAjIFdlIGNoZWNrIHdpdGggYC1jJyBhbmQgYC1vJyBmb3IgdGhlIHNha2Ugb2YgdGhlICJkYXNobXN0ZG91dCIKKyAgICAjIG1vZGUuICBJdCB0dXJucyBvdXQgdGhhdCB0aGUgU3VuUHJvIEMrKyBjb21waWxlciBkb2VzIG5vdCBwcm9wZXJseQorICAgICMgaGFuZGxlIGAtTSAtbycsIGFuZCB3ZSBuZWVkIHRvIGRldGVjdCB0aGlzLiAgQWxzbywgc29tZSBJbnRlbAorICAgICMgdmVyc2lvbnMgaGFkIHRyb3VibGUgd2l0aCBvdXRwdXQgaW4gc3ViZGlycworICAgIGFtX19vYmo9c3ViL2NvbmZ0ZXN0LiR7T0JKRVhULW99CisgICAgYW1fX21pbnVzX29iaj0iLW8gJGFtX19vYmoiCisgICAgY2FzZSAkZGVwbW9kZSBpbgorICAgIGdjYykKKyAgICAgICMgVGhpcyBkZXBtb2RlIGNhdXNlcyBhIGNvbXBpbGVyIHJhY2UgaW4gdW5pdmVyc2FsIG1vZGUuCisgICAgICB0ZXN0ICIkYW1fX3VuaXZlcnNhbCIgPSBmYWxzZSB8fCBjb250aW51ZQorICAgICAgOzsKKyAgICBub3NpZGVlZmZlY3QpCisgICAgICAjIGFmdGVyIHRoaXMgdGFnLCBtZWNoYW5pc21zIGFyZSBub3QgYnkgc2lkZS1lZmZlY3QsIHNvIHRoZXknbGwKKyAgICAgICMgb25seSBiZSB1c2VkIHdoZW4gZXhwbGljaXRseSByZXF1ZXN0ZWQKKyAgICAgIGlmIHRlc3QgIngkZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmciID0geHllczsgdGhlbgorCWNvbnRpbnVlCisgICAgICBlbHNlCisJYnJlYWsKKyAgICAgIGZpCisgICAgICA7OworICAgIG1zdmlzdWFsY3BwIHwgbXN2Y21zeXMpCisgICAgICAjIFRoaXMgY29tcGlsZXIgd29uJ3QgZ3JvayBgLWMgLW8nLCBidXQgYWxzbywgdGhlIG1pbnVzbyB0ZXN0IGhhcworICAgICAgIyBub3QgcnVuIHlldC4gIFRoZXNlIGRlcG1vZGVzIGFyZSBsYXRlIGVub3VnaCBpbiB0aGUgZ2FtZSwgYW5kCisgICAgICAjIHNvIHdlYWsgdGhhdCB0aGVpciBmdW5jdGlvbmluZyBzaG91bGQgbm90IGJlIGltcGFjdGVkLgorICAgICAgYW1fX29iaj1jb25mdGVzdC4ke09CSkVYVC1vfQorICAgICAgYW1fX21pbnVzX29iaj0KKyAgICAgIDs7CisgICAgbm9uZSkgYnJlYWsgOzsKKyAgICBlc2FjCisgICAgaWYgZGVwbW9kZT0kZGVwbW9kZSBcCisgICAgICAgc291cmNlPXN1Yi9jb25mdGVzdC5jIG9iamVjdD0kYW1fX29iaiBcCisgICAgICAgZGVwZmlsZT1zdWIvY29uZnRlc3QuUG8gdG1wZGVwZmlsZT1zdWIvY29uZnRlc3QuVFBvIFwKKyAgICAgICAkU0hFTEwgLi9kZXBjb21wICRkZXBjYyAtYyAkYW1fX21pbnVzX29iaiBzdWIvY29uZnRlc3QuYyBcCisgICAgICAgICA+L2Rldi9udWxsIDI+Y29uZnRlc3QuZXJyICYmCisgICAgICAgZ3JlcCBzdWIvY29uZnRzdDEuaCBzdWIvY29uZnRlc3QuUG8gPiAvZGV2L251bGwgMj4mMSAmJgorICAgICAgIGdyZXAgc3ViL2NvbmZ0c3Q2Lmggc3ViL2NvbmZ0ZXN0LlBvID4gL2Rldi9udWxsIDI+JjEgJiYKKyAgICAgICBncmVwICRhbV9fb2JqIHN1Yi9jb25mdGVzdC5QbyA+IC9kZXYvbnVsbCAyPiYxICYmCisgICAgICAgJHtNQUtFLW1ha2V9IC1zIC1mIGNvbmZtZiA+IC9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgICAjIGljYyBkb2Vzbid0IGNob2tlIG9uIHVua25vd24gb3B0aW9ucywgaXQgd2lsbCBqdXN0IGlzc3VlIHdhcm5pbmdzCisgICAgICAjIG9yIHJlbWFya3MgKGV2ZW4gd2l0aCAtV2Vycm9yKS4gIFNvIHdlIGdyZXAgc3RkZXJyIGZvciBhbnkgbWVzc2FnZQorICAgICAgIyB0aGF0IHNheXMgYW4gb3B0aW9uIHdhcyBpZ25vcmVkIG9yIG5vdCBzdXBwb3J0ZWQuCisgICAgICAjIFdoZW4gZ2l2ZW4gLU1QLCBpY2MgNy4wIGFuZCA3LjEgY29tcGxhaW4gdGh1c2x5OgorICAgICAgIyAgIGljYzogQ29tbWFuZCBsaW5lIHdhcm5pbmc6IGlnbm9yaW5nIG9wdGlvbiAnLU0nOyBubyBhcmd1bWVudCByZXF1aXJlZAorICAgICAgIyBUaGUgZGlhZ25vc2lzIGNoYW5nZWQgaW4gaWNjIDguMDoKKyAgICAgICMgICBpY2M6IENvbW1hbmQgbGluZSByZW1hcms6IG9wdGlvbiAnLU1QJyBub3Qgc3VwcG9ydGVkCisgICAgICBpZiAoZ3JlcCAnaWdub3Jpbmcgb3B0aW9uJyBjb25mdGVzdC5lcnIgfHwKKyAgICAgICAgICBncmVwICdub3Qgc3VwcG9ydGVkJyBjb25mdGVzdC5lcnIpID4vZGV2L251bGwgMj4mMTsgdGhlbiA6OyBlbHNlCisgICAgICAgIGFtX2N2X0NYWF9kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZT0kZGVwbW9kZQorICAgICAgICBicmVhaworICAgICAgZmkKKyAgICBmaQorICBkb25lCisKKyAgY2QgLi4KKyAgcm0gLXJmIGNvbmZ0ZXN0LmRpcgorZWxzZQorICBhbV9jdl9DWFhfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGU9bm9uZQorZmkKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYW1fY3ZfQ1hYX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlIiA+JjUKKyRhc19lY2hvICIkYW1fY3ZfQ1hYX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlIiA+JjY7IH0KK0NYWERFUE1PREU9ZGVwbW9kZT0kYW1fY3ZfQ1hYX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlCisKKyBpZgorICB0ZXN0ICJ4JGVuYWJsZV9kZXBlbmRlbmN5X3RyYWNraW5nIiAhPSB4bm8gXAorICAmJiB0ZXN0ICIkYW1fY3ZfQ1hYX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlIiA9IGdjYzM7IHRoZW4KKyAgYW1fX2Zhc3RkZXBDWFhfVFJVRT0KKyAgYW1fX2Zhc3RkZXBDWFhfRkFMU0U9JyMnCitlbHNlCisgIGFtX19mYXN0ZGVwQ1hYX1RSVUU9JyMnCisgIGFtX19mYXN0ZGVwQ1hYX0ZBTFNFPQorZmkKKworCitpZiB0ZXN0IC1uICIkQ1hYIiAmJiAoIHRlc3QgIlgkQ1hYIiAhPSAiWG5vIiAmJgorICAgICggKHRlc3QgIlgkQ1hYIiA9ICJYZysrIiAmJiBgZysrIC12ID4vZGV2L251bGwgMj4mMWAgKSB8fAorICAgICh0ZXN0ICJYJENYWCIgIT0gIlhnKysiKSkpIDsgdGhlbgorICBhY19leHQ9Y3BwCithY19jcHA9JyRDWFhDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENYWCAtYyAkQ1hYRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENYWCAtbyBjb25mdGVzdCRhY19leGVleHQgJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY3h4X2NvbXBpbGVyX2dudQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gcnVuIHRoZSBDKysgcHJlcHJvY2Vzc29yIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBydW4gdGhlIEMrKyBwcmVwcm9jZXNzb3IuLi4gIiA+JjY7IH0KK2lmIHRlc3QgLXogIiRDWFhDUFAiOyB0aGVuCisgIGlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19DWFhDUFArc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICAgICAgIyBEb3VibGUgcXVvdGVzIGJlY2F1c2UgQ1hYQ1BQIG5lZWRzIHRvIGJlIGV4cGFuZGVkCisgICAgZm9yIENYWENQUCBpbiAiJENYWCAtRSIgIi9saWIvY3BwIgorICAgIGRvCisgICAgICBhY19wcmVwcm9jX29rPWZhbHNlCitmb3IgYWNfY3h4X3ByZXByb2Nfd2Fybl9mbGFnIGluICcnIHllcworZG8KKyAgIyBVc2UgYSBoZWFkZXIgZmlsZSB0aGF0IGNvbWVzIHdpdGggZ2NjLCBzbyBjb25maWd1cmluZyBnbGliYworICAjIHdpdGggYSBmcmVzaCBjcm9zcy1jb21waWxlciB3b3Jrcy4KKyAgIyBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCisgICMgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLgorICAjIE9uIHRoZSBOZVhULCBjYyAtRSBydW5zIHRoZSBjb2RlIHRocm91Z2ggdGhlIGNvbXBpbGVyJ3MgcGFyc2VyLAorICAjIG5vdCBqdXN0IHRocm91Z2ggY3BwLiAiU3ludGF4IGVycm9yIiBpcyBoZXJlIHRvIGNhdGNoIHRoaXMgY2FzZS4KKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2lmZGVmIF9fU1REQ19fCisjIGluY2x1ZGUgPGxpbWl0cy5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8YXNzZXJ0Lmg+CisjZW5kaWYKKwkJICAgICBTeW50YXggZXJyb3IKK19BQ0VPRgoraWYgYWNfZm5fY3h4X3RyeV9jcHAgIiRMSU5FTk8iOyB0aGVuIDoKKworZWxzZQorICAjIEJyb2tlbjogZmFpbHMgb24gdmFsaWQgaW5wdXQuCitjb250aW51ZQorZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC5pIGNvbmZ0ZXN0LiRhY19leHQKKworICAjIE9LLCB3b3JrcyBvbiBzYW5lIGNhc2VzLiAgTm93IGNoZWNrIHdoZXRoZXIgbm9uZXhpc3RlbnQgaGVhZGVycworICAjIGNhbiBiZSBkZXRlY3RlZCBhbmQgaG93LgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8YWNfbm9uZXhpc3RlbnQuaD4KK19BQ0VPRgoraWYgYWNfZm5fY3h4X3RyeV9jcHAgIiRMSU5FTk8iOyB0aGVuIDoKKyAgIyBCcm9rZW46IHN1Y2Nlc3Mgb24gaW52YWxpZCBpbnB1dC4KK2NvbnRpbnVlCitlbHNlCisgICMgUGFzc2VzIGJvdGggdGVzdHMuCithY19wcmVwcm9jX29rPToKK2JyZWFrCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LmkgY29uZnRlc3QuJGFjX2V4dAorCitkb25lCisjIEJlY2F1c2Ugb2YgYGJyZWFrJywgX0FDX1BSRVBST0NfSUZFTFNFJ3MgY2xlYW5pbmcgY29kZSB3YXMgc2tpcHBlZC4KK3JtIC1mIGNvbmZ0ZXN0LmkgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKK2lmICRhY19wcmVwcm9jX29rOyB0aGVuIDoKKyAgYnJlYWsKK2ZpCisKKyAgICBkb25lCisgICAgYWNfY3ZfcHJvZ19DWFhDUFA9JENYWENQUAorCitmaQorICBDWFhDUFA9JGFjX2N2X3Byb2dfQ1hYQ1BQCitlbHNlCisgIGFjX2N2X3Byb2dfQ1hYQ1BQPSRDWFhDUFAKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJENYWENQUCIgPiY1CiskYXNfZWNobyAiJENYWENQUCIgPiY2OyB9CithY19wcmVwcm9jX29rPWZhbHNlCitmb3IgYWNfY3h4X3ByZXByb2Nfd2Fybl9mbGFnIGluICcnIHllcworZG8KKyAgIyBVc2UgYSBoZWFkZXIgZmlsZSB0aGF0IGNvbWVzIHdpdGggZ2NjLCBzbyBjb25maWd1cmluZyBnbGliYworICAjIHdpdGggYSBmcmVzaCBjcm9zcy1jb21waWxlciB3b3Jrcy4KKyAgIyBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCisgICMgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLgorICAjIE9uIHRoZSBOZVhULCBjYyAtRSBydW5zIHRoZSBjb2RlIHRocm91Z2ggdGhlIGNvbXBpbGVyJ3MgcGFyc2VyLAorICAjIG5vdCBqdXN0IHRocm91Z2ggY3BwLiAiU3ludGF4IGVycm9yIiBpcyBoZXJlIHRvIGNhdGNoIHRoaXMgY2FzZS4KKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2lmZGVmIF9fU1REQ19fCisjIGluY2x1ZGUgPGxpbWl0cy5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8YXNzZXJ0Lmg+CisjZW5kaWYKKwkJICAgICBTeW50YXggZXJyb3IKK19BQ0VPRgoraWYgYWNfZm5fY3h4X3RyeV9jcHAgIiRMSU5FTk8iOyB0aGVuIDoKKworZWxzZQorICAjIEJyb2tlbjogZmFpbHMgb24gdmFsaWQgaW5wdXQuCitjb250aW51ZQorZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC5pIGNvbmZ0ZXN0LiRhY19leHQKKworICAjIE9LLCB3b3JrcyBvbiBzYW5lIGNhc2VzLiAgTm93IGNoZWNrIHdoZXRoZXIgbm9uZXhpc3RlbnQgaGVhZGVycworICAjIGNhbiBiZSBkZXRlY3RlZCBhbmQgaG93LgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8YWNfbm9uZXhpc3RlbnQuaD4KK19BQ0VPRgoraWYgYWNfZm5fY3h4X3RyeV9jcHAgIiRMSU5FTk8iOyB0aGVuIDoKKyAgIyBCcm9rZW46IHN1Y2Nlc3Mgb24gaW52YWxpZCBpbnB1dC4KK2NvbnRpbnVlCitlbHNlCisgICMgUGFzc2VzIGJvdGggdGVzdHMuCithY19wcmVwcm9jX29rPToKK2JyZWFrCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LmkgY29uZnRlc3QuJGFjX2V4dAorCitkb25lCisjIEJlY2F1c2Ugb2YgYGJyZWFrJywgX0FDX1BSRVBST0NfSUZFTFNFJ3MgY2xlYW5pbmcgY29kZSB3YXMgc2tpcHBlZC4KK3JtIC1mIGNvbmZ0ZXN0LmkgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKK2lmICRhY19wcmVwcm9jX29rOyB0aGVuIDoKKworZWxzZQorICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KK19sdF9jYXVnaHRfQ1hYX2Vycm9yPXllczsgfQorZmkKKworYWNfZXh0PWMKK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorCitlbHNlCisgIF9sdF9jYXVnaHRfQ1hYX2Vycm9yPXllcworZmkKKworCisKKworYWNfZXh0PWNwcAorYWNfY3BwPSckQ1hYQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDWFggLWMgJENYWEZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDWFggLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDWFhGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2N4eF9jb21waWxlcl9nbnUKKworYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYPW5vCithbGxvd191bmRlZmluZWRfZmxhZ19DWFg9CithbHdheXNfZXhwb3J0X3N5bWJvbHNfQ1hYPW5vCithcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0KK2NvbXBpbGVyX25lZWRzX29iamVjdF9DWFg9bm8KK2V4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19DWFg9CitoYXJkY29kZV9kaXJlY3RfQ1hYPW5vCitoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGVfQ1hYPW5vCitoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0KK2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGRfQ1hYPQoraGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9DWFg9CitoYXJkY29kZV9taW51c19MX0NYWD1ubworaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9DWFg9dW5zdXBwb3J0ZWQKK2hhcmRjb2RlX2F1dG9tYXRpY19DWFg9bm8KK2luaGVyaXRfcnBhdGhfQ1hYPW5vCittb2R1bGVfY21kc19DWFg9Cittb2R1bGVfZXhwc3ltX2NtZHNfQ1hYPQorbGlua19hbGxfZGVwbGlic19DWFg9dW5rbm93bgorb2xkX2FyY2hpdmVfY21kc19DWFg9JG9sZF9hcmNoaXZlX2NtZHMKK25vX3VuZGVmaW5lZF9mbGFnX0NYWD0KK3dob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWD0KK2VuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXNfQ1hYPW5vCisKKyMgU291cmNlIGZpbGUgZXh0ZW5zaW9uIGZvciBDKysgdGVzdCBzb3VyY2VzLgorYWNfZXh0PWNwcAorCisjIE9iamVjdCBmaWxlIGV4dGVuc2lvbiBmb3IgY29tcGlsZWQgQysrIHRlc3Qgc291cmNlcy4KK29iamV4dD1vCitvYmpleHRfQ1hYPSRvYmpleHQKKworIyBObyBzZW5zZSBpbiBydW5uaW5nIGFsbCB0aGVzZSB0ZXN0cyBpZiB3ZSBhbHJlYWR5IGRldGVybWluZWQgdGhhdAorIyB0aGUgQ1hYIGNvbXBpbGVyIGlzbid0IHdvcmtpbmcuICBTb21lIHZhcmlhYmxlcyAobGlrZSBlbmFibGVfc2hhcmVkKQorIyBhcmUgY3VycmVudGx5IGFzc3VtZWQgdG8gYXBwbHkgdG8gYWxsIGNvbXBpbGVycyBvbiB0aGlzIHBsYXRmb3JtLAorIyBhbmQgd2lsbCBiZSBjb3JydXB0ZWQgYnkgc2V0dGluZyB0aGVtIGJhc2VkIG9uIGEgbm9uLXdvcmtpbmcgY29tcGlsZXIuCitpZiB0ZXN0ICIkX2x0X2NhdWdodF9DWFhfZXJyb3IiICE9IHllczsgdGhlbgorICAjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgY29tcGlsZSB0ZXN0cworICBsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGU9ImludCBzb21lX3ZhcmlhYmxlID0gMDsiCisKKyAgIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGxpbmsgdGVzdHMKKyAgbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlPSdpbnQgbWFpbihpbnQsIGNoYXIgKltdKSB7IHJldHVybigwKTsgfScKKworICAjIGx0bWFpbiBvbmx5IHVzZXMgJENDIGZvciB0YWdnZWQgY29uZmlndXJhdGlvbnMgc28gbWFrZSBzdXJlICRDQyBpcyBzZXQuCisKKworCisKKworCisjIElmIG5vIEMgY29tcGlsZXIgd2FzIHNwZWNpZmllZCwgdXNlIENDLgorTFRDQz0ke0xUQ0MtIiRDQyJ9CisKKyMgSWYgbm8gQyBjb21waWxlciBmbGFncyB3ZXJlIHNwZWNpZmllZCwgdXNlIENGTEFHUy4KK0xUQ0ZMQUdTPSR7TFRDRkxBR1MtIiRDRkxBR1MifQorCisjIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgorY29tcGlsZXI9JENDCisKKworICAjIHNhdmUgd2FybmluZ3MvYm9pbGVycGxhdGUgb2Ygc2ltcGxlIHRlc3QgY29kZQorICBhY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKK2VjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID5jb25mdGVzdC4kYWNfZXh0CitldmFsICIkYWNfY29tcGlsZSIgMj4mMSA+L2Rldi9udWxsIHwgJFNFRCAnL14kL2Q7IC9eICorL2QnID5jb25mdGVzdC5lcnIKK19sdF9jb21waWxlcl9ib2lsZXJwbGF0ZT1gY2F0IGNvbmZ0ZXN0LmVycmAKKyRSTSBjb25mdGVzdCoKKworICBhY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKK2VjaG8gIiRsdF9zaW1wbGVfbGlua190ZXN0X2NvZGUiID5jb25mdGVzdC4kYWNfZXh0CitldmFsICIkYWNfbGluayIgMj4mMSA+L2Rldi9udWxsIHwgJFNFRCAnL14kL2Q7IC9eICorL2QnID5jb25mdGVzdC5lcnIKK19sdF9saW5rZXJfYm9pbGVycGxhdGU9YGNhdCBjb25mdGVzdC5lcnJgCiskUk0gLXIgY29uZnRlc3QqCisKKworICAjIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgorICBsdF9zYXZlX0NDPSRDQworICBsdF9zYXZlX0xEPSRMRAorICBsdF9zYXZlX0dDQz0kR0NDCisgIEdDQz0kR1hYCisgIGx0X3NhdmVfd2l0aF9nbnVfbGQ9JHdpdGhfZ251X2xkCisgIGx0X3NhdmVfcGF0aF9MRD0kbHRfY3ZfcGF0aF9MRAorICBpZiB0ZXN0IC1uICIke2x0X2N2X3Byb2dfZ251X2xkY3h4K3NldH0iOyB0aGVuCisgICAgbHRfY3ZfcHJvZ19nbnVfbGQ9JGx0X2N2X3Byb2dfZ251X2xkY3h4CisgIGVsc2UKKyAgICAkYXNfdW5zZXQgbHRfY3ZfcHJvZ19nbnVfbGQKKyAgZmkKKyAgaWYgdGVzdCAtbiAiJHtsdF9jdl9wYXRoX0xEQ1hYK3NldH0iOyB0aGVuCisgICAgbHRfY3ZfcGF0aF9MRD0kbHRfY3ZfcGF0aF9MRENYWAorICBlbHNlCisgICAgJGFzX3Vuc2V0IGx0X2N2X3BhdGhfTEQKKyAgZmkKKyAgdGVzdCAteiAiJHtMRENYWCtzZXR9IiB8fCBMRD0kTERDWFgKKyAgQ0M9JHtDWFgtImMrKyJ9CisgIGNvbXBpbGVyPSRDQworICBjb21waWxlcl9DWFg9JENDCisgIGZvciBjY190ZW1wIGluICRjb21waWxlciIiOyBkbworICBjYXNlICRjY190ZW1wIGluCisgICAgY29tcGlsZSB8ICpbXFwvXWNvbXBpbGUgfCBjY2FjaGUgfCAqW1xcL11jY2FjaGUgKSA7OworICAgIGRpc3RjYyB8ICpbXFwvXWRpc3RjYyB8IHB1cmlmeSB8ICpbXFwvXXB1cmlmeSApIDs7CisgICAgXC0qKSA7OworICAgICopIGJyZWFrOzsKKyAgZXNhYworZG9uZQorY2NfYmFzZW5hbWU9YCRFQ0hPICJYJGNjX3RlbXAiIHwgJFhzZWQgLWUgJ3MlLiovJSUnIC1lICJzJV4kaG9zdF9hbGlhcy0lJSJgCisKKworICBpZiB0ZXN0IC1uICIkY29tcGlsZXIiOyB0aGVuCisgICAgIyBXZSBkb24ndCB3YW50IC1mbm8tZXhjZXB0aW9uIHdoZW4gY29tcGlsaW5nIEMrKyBjb2RlLCBzbyBzZXQgdGhlCisgICAgIyBub19idWlsdGluX2ZsYWcgc2VwYXJhdGVseQorICAgIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZ19DWFg9JyAtZm5vLWJ1aWx0aW4nCisgICAgZWxzZQorICAgICAgbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWdfQ1hYPQorICAgIGZpCisKKyAgICBpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgorICAgICAgIyBTZXQgdXAgZGVmYXVsdCBHTlUgQysrIGNvbmZpZ3VyYXRpb24KKworCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtZ251LWxkIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9nbnVfbGQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX2dudV9sZDsgdGVzdCAiJHdpdGh2YWwiID0gbm8gfHwgd2l0aF9nbnVfbGQ9eWVzCitlbHNlCisgIHdpdGhfZ251X2xkPW5vCitmaQorCithY19wcm9nPWxkCitpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAjIENoZWNrIGlmIGdjYyAtcHJpbnQtcHJvZy1uYW1lPWxkIGdpdmVzIGEgcGF0aC4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgbGQgdXNlZCBieSAkQ0MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGxkIHVzZWQgYnkgJENDLi4uICIgPiY2OyB9CisgIGNhc2UgJGhvc3QgaW4KKyAgKi0qLW1pbmd3KikKKyAgICAjIGdjYyBsZWF2ZXMgYSB0cmFpbGluZyBjYXJyaWFnZSByZXR1cm4gd2hpY2ggdXBzZXRzIG1pbmd3CisgICAgYWNfcHJvZz1gKCRDQyAtcHJpbnQtcHJvZy1uYW1lPWxkKSAyPiY1IHwgdHIgLWQgJ1wwMTUnYCA7OworICAqKQorICAgIGFjX3Byb2c9YCgkQ0MgLXByaW50LXByb2ctbmFtZT1sZCkgMj4mNWAgOzsKKyAgZXNhYworICBjYXNlICRhY19wcm9nIGluCisgICAgIyBBY2NlcHQgYWJzb2x1dGUgcGF0aHMuCisgICAgW1xcL10qIHwgPzpbXFwvXSopCisgICAgICByZV9kaXJlbHQ9Jy9bXi9dW14vXSovXC5cLi8nCisgICAgICAjIENhbm9uaWNhbGl6ZSB0aGUgcGF0aG5hbWUgb2YgbGQKKyAgICAgIGFjX3Byb2c9YCRFQ0hPICIkYWNfcHJvZyJ8ICRTRUQgJ3MlXFxcXCUvJWcnYAorICAgICAgd2hpbGUgJEVDSE8gIiRhY19wcm9nIiB8ICRHUkVQICIkcmVfZGlyZWx0IiA+IC9kZXYvbnVsbCAyPiYxOyBkbworCWFjX3Byb2c9YCRFQ0hPICRhY19wcm9nfCAkU0VEICJzJSRyZV9kaXJlbHQlLyUiYAorICAgICAgZG9uZQorICAgICAgdGVzdCAteiAiJExEIiAmJiBMRD0iJGFjX3Byb2ciCisgICAgICA7OworICAiIikKKyAgICAjIElmIGl0IGZhaWxzLCB0aGVuIHByZXRlbmQgd2UgYXJlbid0IHVzaW5nIEdDQy4KKyAgICBhY19wcm9nPWxkCisgICAgOzsKKyAgKikKKyAgICAjIElmIGl0IGlzIHJlbGF0aXZlLCB0aGVuIHNlYXJjaCBmb3IgdGhlIGZpcnN0IGxkIGluIFBBVEguCisgICAgd2l0aF9nbnVfbGQ9dW5rbm93bgorICAgIDs7CisgIGVzYWMKK2VsaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBHTlUgbGQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIEdOVSBsZC4uLiAiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBub24tR05VIGxkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBub24tR05VIGxkLi4uICIgPiY2OyB9CitmaQoraWYgdGVzdCAiJHtsdF9jdl9wYXRoX0xEK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAteiAiJExEIjsgdGhlbgorICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0kUEFUSF9TRVBBUkFUT1IKKyAgZm9yIGFjX2RpciBpbiAkUEFUSDsgZG8KKyAgICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorICAgIGlmIHRlc3QgLWYgIiRhY19kaXIvJGFjX3Byb2ciIHx8IHRlc3QgLWYgIiRhY19kaXIvJGFjX3Byb2ckYWNfZXhlZXh0IjsgdGhlbgorICAgICAgbHRfY3ZfcGF0aF9MRD0iJGFjX2Rpci8kYWNfcHJvZyIKKyAgICAgICMgQ2hlY2sgdG8gc2VlIGlmIHRoZSBwcm9ncmFtIGlzIEdOVSBsZC4gIEknZCByYXRoZXIgdXNlIC0tdmVyc2lvbiwKKyAgICAgICMgYnV0IGFwcGFyZW50bHkgc29tZSB2YXJpYW50cyBvZiBHTlUgbGQgb25seSBhY2NlcHQgLXYuCisgICAgICAjIEJyZWFrIG9ubHkgaWYgaXQgd2FzIHRoZSBHTlUvbm9uLUdOVSBsZCB0aGF0IHdlIHByZWZlci4KKyAgICAgIGNhc2UgYCIkbHRfY3ZfcGF0aF9MRCIgLXYgMj4mMSA8L2Rldi9udWxsYCBpbgorICAgICAgKkdOVSogfCAqJ3dpdGggQkZEJyopCisJdGVzdCAiJHdpdGhfZ251X2xkIiAhPSBubyAmJiBicmVhaworCTs7CisgICAgICAqKQorCXRlc3QgIiR3aXRoX2dudV9sZCIgIT0geWVzICYmIGJyZWFrCisJOzsKKyAgICAgIGVzYWMKKyAgICBmaQorICBkb25lCisgIElGUz0iJGx0X3NhdmVfaWZzIgorZWxzZQorICBsdF9jdl9wYXRoX0xEPSIkTEQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorZmkKK2ZpCisKK0xEPSIkbHRfY3ZfcGF0aF9MRCIKK2lmIHRlc3QgLW4gIiRMRCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRMRCIgPiY1CiskYXNfZWNobyAiJExEIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQordGVzdCAteiAiJExEIiAmJiBhc19mbl9lcnJvciAkPyAibm8gYWNjZXB0YWJsZSBsZCBmb3VuZCBpbiBcJFBBVEgiICIkTElORU5PIiA1Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIHRoZSBsaW5rZXIgKCRMRCkgaXMgR05VIGxkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIHRoZSBsaW5rZXIgKCRMRCkgaXMgR05VIGxkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2x0X2N2X3Byb2dfZ251X2xkK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgIyBJJ2QgcmF0aGVyIHVzZSAtLXZlcnNpb24gaGVyZSwgYnV0IGFwcGFyZW50bHkgc29tZSBHTlUgbGRzIG9ubHkgYWNjZXB0IC12LgorY2FzZSBgJExEIC12IDI+JjEgPC9kZXYvbnVsbGAgaW4KKypHTlUqIHwgKid3aXRoIEJGRCcqKQorICBsdF9jdl9wcm9nX2dudV9sZD15ZXMKKyAgOzsKKyopCisgIGx0X2N2X3Byb2dfZ251X2xkPW5vCisgIDs7Citlc2FjCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wcm9nX2dudV9sZCIgPiY1CiskYXNfZWNobyAiJGx0X2N2X3Byb2dfZ251X2xkIiA+JjY7IH0KK3dpdGhfZ251X2xkPSRsdF9jdl9wcm9nX2dudV9sZAorCisKKworCisKKworCisgICAgICAjIENoZWNrIGlmIEdOVSBDKysgdXNlcyBHTlUgbGQgYXMgdGhlIHVuZGVybHlpbmcgbGlua2VyLCBzaW5jZSB0aGUKKyAgICAgICMgYXJjaGl2aW5nIGNvbW1hbmRzIGJlbG93IGFzc3VtZSB0aGF0IEdOVSBsZCBpcyBiZWluZyB1c2VkLgorICAgICAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgorICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisgICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisKKyAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWD0nJHt3bH0tLWV4cG9ydC1keW5hbWljJworCisgICAgICAgICMgSWYgYXJjaGl2ZV9jbWRzIHJ1bnMgTEQsIG5vdCBDQywgd2xhcmMgc2hvdWxkIGJlIGVtcHR5CisgICAgICAgICMgWFhYIEkgdGhpbmsgd2xhcmMgY2FuIGJlIGVsaW1pbmF0ZWQgaW4gbHRjZi1jeHgsIGJ1dCBJIG5lZWQgdG8KKyAgICAgICAgIyAgICAgaW52ZXN0aWdhdGUgaXQgYSBsaXR0bGUgYml0IG1vcmUuIChNTSkKKyAgICAgICAgd2xhcmM9JyR7d2x9JworCisgICAgICAgICMgYW5jaWVudCBHTlUgbGQgZGlkbid0IHN1cHBvcnQgLS13aG9sZS1hcmNoaXZlIGV0LiBhbC4KKyAgICAgICAgaWYgZXZhbCAiYCRDQyAtcHJpbnQtcHJvZy1uYW1lPWxkYCAtLWhlbHAgMj4mMSIgfAorCSAgJEdSRVAgJ25vLXdob2xlLWFyY2hpdmUnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICAgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfQ1hYPSIkd2xhcmMiJy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAnIiR3bGFyYyInLS1uby13aG9sZS1hcmNoaXZlJworICAgICAgICBlbHNlCisgICAgICAgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfQ1hYPQorICAgICAgICBmaQorICAgICAgZWxzZQorICAgICAgICB3aXRoX2dudV9sZD1ubworICAgICAgICB3bGFyYz0KKworICAgICAgICAjIEEgZ2VuZXJpYyBhbmQgdmVyeSBzaW1wbGUgZGVmYXVsdCBzaGFyZWQgbGlicmFyeSBjcmVhdGlvbgorICAgICAgICAjIGNvbW1hbmQgZm9yIEdOVSBDKysgZm9yIHRoZSBjYXNlIHdoZXJlIGl0IHVzZXMgdGhlIG5hdGl2ZQorICAgICAgICAjIGxpbmtlciwgaW5zdGVhZCBvZiBHTlUgbGQuICBJZiBwb3NzaWJsZSwgdGhpcyBzZXR0aW5nIHNob3VsZAorICAgICAgICAjIG92ZXJyaWRkZW4gdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIG5hdGl2ZSBsaW5rZXIgZmVhdHVyZXMgb24KKyAgICAgICAgIyB0aGUgcGxhdGZvcm0gaXQgaXMgYmVpbmcgdXNlZCBvbi4KKyAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbyAkbGliJworICAgICAgZmkKKworICAgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworICAgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCisgICAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KKyAgICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSckQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8ICRHUkVQICJcLUwiJworCisgICAgZWxzZQorICAgICAgR1hYPW5vCisgICAgICB3aXRoX2dudV9sZD1ubworICAgICAgd2xhcmM9CisgICAgZmkKKworICAgICMgUE9SVE1FOiBmaWxsIGluIGEgZGVzY3JpcHRpb24gb2YgeW91ciBzeXN0ZW0ncyBDKysgbGluayBjaGFyYWN0ZXJpc3RpY3MKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdGhlICRjb21waWxlciBsaW5rZXIgKCRMRCkgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSAkY29tcGlsZXIgbGlua2VyICgkTEQpIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMuLi4gIiA+JjY7IH0KKyAgICBsZF9zaGxpYnNfQ1hYPXllcworICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIGFpeDMqKQorICAgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKyAgICAgICAgbGRfc2hsaWJzX0NYWD1ubworICAgICAgICA7OworICAgICAgYWl4WzQtOV0qKQorICAgICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorICAgICAgICAgICMgT24gSUE2NCwgdGhlIGxpbmtlciBkb2VzIHJ1biB0aW1lIGxpbmtpbmcgYnkgZGVmYXVsdCwgc28gd2UgZG9uJ3QKKyAgICAgICAgICAjIGhhdmUgdG8gZG8gYW55dGhpbmcgc3BlY2lhbC4KKyAgICAgICAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPW5vCisgICAgICAgICAgZXhwX3N5bV9mbGFnPSctQmV4cG9ydCcKKyAgICAgICAgICBub19lbnRyeV9mbGFnPSIiCisgICAgICAgIGVsc2UKKyAgICAgICAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPW5vCisKKyAgICAgICAgICAjIFRlc3QgaWYgd2UgYXJlIHRyeWluZyB0byB1c2UgcnVuIHRpbWUgbGlua2luZyBvciBub3JtYWwKKyAgICAgICAgICAjIEFJWCBzdHlsZSBsaW5raW5nLiBJZiAtYnJ0bCBpcyBzb21ld2hlcmUgaW4gTERGTEFHUywgd2UKKyAgICAgICAgICAjIG5lZWQgdG8gZG8gcnVudGltZSBsaW5raW5nLgorICAgICAgICAgIGNhc2UgJGhvc3Rfb3MgaW4gYWl4NC5bMjNdfGFpeDQuWzIzXS4qfGFpeFs1LTldKikKKwkgICAgZm9yIGxkX2ZsYWcgaW4gJExERkxBR1M7IGRvCisJICAgICAgY2FzZSAkbGRfZmxhZyBpbgorCSAgICAgICotYnJ0bCopCisJICAgICAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPXllcworCSAgICAgICAgYnJlYWsKKwkgICAgICAgIDs7CisJICAgICAgZXNhYworCSAgICBkb25lCisJICAgIDs7CisgICAgICAgICAgZXNhYworCisgICAgICAgICAgZXhwX3N5bV9mbGFnPSctYmV4cG9ydCcKKyAgICAgICAgICBub19lbnRyeV9mbGFnPSctYm5vZW50cnknCisgICAgICAgIGZpCisKKyAgICAgICAgIyBXaGVuIGxhcmdlIGV4ZWN1dGFibGVzIG9yIHNoYXJlZCBvYmplY3RzIGFyZSBidWlsdCwgQUlYIGxkIGNhbgorICAgICAgICAjIGhhdmUgcHJvYmxlbXMgY3JlYXRpbmcgdGhlIHRhYmxlIG9mIGNvbnRlbnRzLiAgSWYgbGlua2luZyBhIGxpYnJhcnkKKyAgICAgICAgIyBvciBwcm9ncmFtIHJlc3VsdHMgaW4gImVycm9yIFRPQyBvdmVyZmxvdyIgYWRkIC1tbWluaW1hbC10b2MgdG8KKyAgICAgICAgIyBDWFhGTEFHUy9DRkxBR1MgZm9yIGcrKy9nY2MuICBJbiB0aGUgY2FzZXMgd2hlcmUgdGhhdCBpcyBub3QKKyAgICAgICAgIyBlbm91Z2ggdG8gZml4IHRoZSBwcm9ibGVtLCBhZGQgLVdsLC1iYmlndG9jIHRvIExERkxBR1MuCisKKyAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJworICAgICAgICBoYXJkY29kZV9kaXJlY3RfQ1hYPXllcworICAgICAgICBoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGVfQ1hYPXllcworICAgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0NYWD0nOicKKyAgICAgICAgbGlua19hbGxfZGVwbGlic19DWFg9eWVzCisgICAgICAgIGZpbGVfbGlzdF9zcGVjX0NYWD0nJHt3bH0tZiwnCisKKyAgICAgICAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KKyAgICAgICAgICBjYXNlICRob3N0X29zIGluIGFpeDQuWzAxMl18YWl4NC5bMDEyXS4qKQorICAgICAgICAgICMgV2Ugb25seSB3YW50IHRvIGRvIHRoaXMgb24gQUlYIDQuMiBhbmQgbG93ZXIsIHRoZSBjaGVjaworICAgICAgICAgICMgYmVsb3cgZm9yIGJyb2tlbiBjb2xsZWN0MiBkb2Vzbid0IHdvcmsgdW5kZXIgNC4zKworCSAgY29sbGVjdDJuYW1lPWAke0NDfSAtcHJpbnQtcHJvZy1uYW1lPWNvbGxlY3QyYAorCSAgaWYgdGVzdCAtZiAiJGNvbGxlY3QybmFtZSIgJiYKKwkgICAgIHN0cmluZ3MgIiRjb2xsZWN0Mm5hbWUiIHwgJEdSRVAgcmVzb2x2ZV9saWJfbmFtZSA+L2Rldi9udWxsCisJICB0aGVuCisJICAgICMgV2UgaGF2ZSByZXdvcmtlZCBjb2xsZWN0MgorCSAgICA6CisJICBlbHNlCisJICAgICMgV2UgaGF2ZSBvbGQgY29sbGVjdDIKKwkgICAgaGFyZGNvZGVfZGlyZWN0X0NYWD11bnN1cHBvcnRlZAorCSAgICAjIEl0IGZhaWxzIHRvIGZpbmQgdW5pbnN0YWxsZWQgbGlicmFyaWVzIHdoZW4gdGhlIHVuaW5zdGFsbGVkCisJICAgICMgcGF0aCBpcyBub3QgbGlzdGVkIGluIHRoZSBsaWJwYXRoLiAgU2V0dGluZyBoYXJkY29kZV9taW51c19MCisJICAgICMgdG8gdW5zdXBwb3J0ZWQgZm9yY2VzIHJlbGlua2luZworCSAgICBoYXJkY29kZV9taW51c19MX0NYWD15ZXMKKwkgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9Jy1MJGxpYmRpcicKKwkgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9DWFg9CisJICBmaQorICAgICAgICAgIGVzYWMKKyAgICAgICAgICBzaGFyZWRfZmxhZz0nLXNoYXJlZCcKKwkgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgorCSAgICBzaGFyZWRfZmxhZz0iJHNoYXJlZF9mbGFnICInJHt3bH0tRycKKwkgIGZpCisgICAgICAgIGVsc2UKKyAgICAgICAgICAjIG5vdCB1c2luZyBnY2MKKyAgICAgICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorCSAgIyBWaXN1YWxBZ2UgQysrLCBWZXJzaW9uIDUuNSBmb3IgQUlYIDVMIGZvciBJQS02NCwgQmV0YSAzIFJlbGVhc2UKKwkgICMgY2hva2VzIG9uIC1XbCwtRy4gVGhlIGZvbGxvd2luZyBsaW5lIGlzIGNvcnJlY3Q6CisJICBzaGFyZWRfZmxhZz0nLUcnCisgICAgICAgICAgZWxzZQorCSAgICBpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KKwkgICAgICBzaGFyZWRfZmxhZz0nJHt3bH0tRycKKwkgICAgZWxzZQorCSAgICAgIHNoYXJlZF9mbGFnPScke3dsfS1iTTpTUkUnCisJICAgIGZpCisgICAgICAgICAgZmkKKyAgICAgICAgZmkKKworICAgICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfQ1hYPScke3dsfS1iZXhwYWxsJworICAgICAgICAjIEl0IHNlZW1zIHRoYXQgLWJleHBhbGwgZG9lcyBub3QgZXhwb3J0IHN5bWJvbHMgYmVnaW5uaW5nIHdpdGgKKyAgICAgICAgIyB1bmRlcnNjb3JlIChfKSwgc28gaXQgaXMgYmV0dGVyIHRvIGdlbmVyYXRlIGEgbGlzdCBvZiBzeW1ib2xzIHRvCisJIyBleHBvcnQuCisgICAgICAgIGFsd2F5c19leHBvcnRfc3ltYm9sc19DWFg9eWVzCisgICAgICAgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgorICAgICAgICAgICMgV2FybmluZyAtIHdpdGhvdXQgdXNpbmcgdGhlIG90aGVyIHJ1bnRpbWUgbG9hZGluZyBmbGFncyAoLWJydGwpLAorICAgICAgICAgICMgLWJlcm9rIHdpbGwgbGluayB3aXRob3V0IGVycm9yLCBidXQgbWF5IHByb2R1Y2UgYSBicm9rZW4gbGlicmFyeS4KKyAgICAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZ19DWFg9Jy1iZXJvaycKKyAgICAgICAgICAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4gZW1wdHkKKyAgICAgICAgICAjIGV4ZWN1dGFibGUuCisgICAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jeHhfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKworbHRfYWl4X2xpYnBhdGhfc2VkPScKKyAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CisJL14wLyB7CisJICAgIHMvXjAgICpcKC4qXCkkL1wxLworCSAgICBwCisJfQorICAgIH0nCithaXhfbGlicGF0aD1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKyMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KK2lmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4KKyAgYWl4X2xpYnBhdGg9YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCitmaQorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKworICAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorCisgICAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9JyRDQyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICciXCR7d2x9JG5vX2VudHJ5X2ZsYWciJyAkY29tcGlsZXJfZmxhZ3MgYGlmIHRlc3QgIngke2FsbG93X3VuZGVmaW5lZF9mbGFnfSIgIT0gIngiOyB0aGVuICRFQ0hPICJYJHt3bH0ke2FsbG93X3VuZGVmaW5lZF9mbGFnfSIgfCAkWHNlZDsgZWxzZSA6OyBmaWAgJyJcJHt3bH0kZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMgJHNoYXJlZF9mbGFnIgorICAgICAgICBlbHNlCisgICAgICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKwkgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR7d2x9LVIgJGxpYmRpcjovdXNyL2xpYjovbGliJworCSAgICBhbGxvd191bmRlZmluZWRfZmxhZ19DWFg9Ii16IG5vZGVmcyIKKwkgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9IlwkQ0MgJHNoYXJlZF9mbGFnIicgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAnIlwke3dsfSRub19lbnRyeV9mbGFnIicgJGNvbXBpbGVyX2ZsYWdzICR7d2x9JHthbGxvd191bmRlZmluZWRfZmxhZ30gJyJcJHt3bH0kZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMiCisgICAgICAgICAgZWxzZQorCSAgICAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4KKwkgICAgIyBlbXB0eSBleGVjdXRhYmxlLgorCSAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2N4eF90cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorCitsdF9haXhfbGlicGF0aF9zZWQ9JworICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKKwkvXjAvIHsKKwkgICAgcy9eMCAgKlwoLipcKSQvXDEvCisJICAgIHAKKwl9CisgICAgfScKK2FpeF9saWJwYXRoPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgoraWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbgorICBhaXhfbGlicGF0aD1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKK2ZpCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2lmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorCisJICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorCSAgICAjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW4gdGltZSBsb2FkaW5nIGZsYWdzLAorCSAgICAjIC1iZXJvayB3aWxsIGxpbmsgd2l0aG91dCBlcnJvciwgYnV0IG1heSBwcm9kdWNlIGEgYnJva2VuIGxpYnJhcnkuCisJICAgIG5vX3VuZGVmaW5lZF9mbGFnX0NYWD0nICR7d2x9LWJlcm5vdG9rJworCSAgICBhbGxvd191bmRlZmluZWRfZmxhZ19DWFg9JyAke3dsfS1iZXJvaycKKwkgICAgIyBFeHBvcnRlZCBzeW1ib2xzIGNhbiBiZSBwdWxsZWQgaW50byBzaGFyZWQgb2JqZWN0cyBmcm9tIGFyY2hpdmVzCisJICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWD0nJGNvbnZlbmllbmNlJworCSAgICBhcmNoaXZlX2NtZHNfbmVlZF9sY19DWFg9eWVzCisJICAgICMgVGhpcyBpcyBzaW1pbGFyIHRvIGhvdyBBSVggdHJhZGl0aW9uYWxseSBidWlsZHMgaXRzIHNoYXJlZAorCSAgICAjIGxpYnJhcmllcy4KKwkgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9IlwkQ0MgJHNoYXJlZF9mbGFnIicgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAke3dsfS1ibm9lbnRyeSAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tYkU6JGV4cG9ydF9zeW1ib2xzJHthbGxvd191bmRlZmluZWRfZmxhZ31+JEFSICRBUl9GTEFHUyAkb3V0cHV0X29iamRpci8kbGlibmFtZSRyZWxlYXNlLmEgJG91dHB1dF9vYmpkaXIvJHNvbmFtZScKKyAgICAgICAgICBmaQorICAgICAgICBmaQorICAgICAgICA7OworCisgICAgICBiZW9zKikKKwlpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisJICBhbGxvd191bmRlZmluZWRfZmxhZ19DWFg9dW5zdXBwb3J0ZWQKKwkgICMgSm9zZXBoIEJlY2tlbmJhY2ggPGpyYjNAYmVzdC5jb20+IHNheXMgc29tZSByZWxlYXNlcyBvZiBnY2MKKwkgICMgc3VwcG9ydCAtLXVuZGVmaW5lZC4gIFRoaXMgZGVzZXJ2ZXMgc29tZSBpbnZlc3RpZ2F0aW9uLiAgRklYTUUKKwkgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtbm9zdGFydCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwllbHNlCisJICBsZF9zaGxpYnNfQ1hYPW5vCisJZmkKKwk7OworCisgICAgICBjaG9ydXMqKQorICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgICopCisJICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgIGxkX3NobGlic19DWFg9bm8KKwkgIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgOzsKKworICAgICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgICAgICAjIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgQ1hYKSBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywKKyAgICAgICAgIyBhcyB0aGVyZSBpcyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KKyAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9Jy1MJGxpYmRpcicKKyAgICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPXVuc3VwcG9ydGVkCisgICAgICAgIGFsd2F5c19leHBvcnRfc3ltYm9sc19DWFg9bm8KKyAgICAgICAgZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lc19DWFg9eWVzCisKKyAgICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJ2F1dG8taW1wb3J0JyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKKyAgICAgICAgICAjIElmIHRoZSBleHBvcnQtc3ltYm9scyBmaWxlIGFscmVhZHkgaXMgYSAuZGVmIGZpbGUgKDFzdCBsaW5lCisgICAgICAgICAgIyBpcyBFWFBPUlRTKSwgdXNlIGl0IGFzIGlzOyBvdGhlcndpc2UsIHByZXBlbmQuLi4KKyAgICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0naWYgdGVzdCAieGAkU0VEIDFxICRleHBvcnRfc3ltYm9sc2AiID0geEVYUE9SVFM7IHRoZW4KKwkgICAgY3AgJGV4cG9ydF9zeW1ib2xzICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOworICAgICAgICAgIGVsc2UKKwkgICAgZWNobyBFWFBPUlRTID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CisJICAgIGNhdCAkZXhwb3J0X3N5bWJvbHMgPj4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CisgICAgICAgICAgZml+CisgICAgICAgICAgJENDIC1zaGFyZWQgLW5vc3RkbGliICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR7d2x9LS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJworICAgICAgICBlbHNlCisgICAgICAgICAgbGRfc2hsaWJzX0NYWD1ubworICAgICAgICBmaQorICAgICAgICA7OworICAgICAgZGFyd2luKiB8IHJoYXBzb2R5KikKKworCisgIGFyY2hpdmVfY21kc19uZWVkX2xjX0NYWD1ubworICBoYXJkY29kZV9kaXJlY3RfQ1hYPW5vCisgIGhhcmRjb2RlX2F1dG9tYXRpY19DWFg9eWVzCisgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfQ1hYPXVuc3VwcG9ydGVkCisgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWD0nJworICBsaW5rX2FsbF9kZXBsaWJzX0NYWD15ZXMKKyAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPSIkX2x0X2Rhcl9hbGxvd191bmRlZmluZWQiCisgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgIGlmb3J0KikgX2x0X2Rhcl9jYW5fc2hhcmVkPXllcyA7OworICAgICAqKSBfbHRfZGFyX2Nhbl9zaGFyZWQ9JEdDQyA7OworICBlc2FjCisgIGlmIHRlc3QgIiRfbHRfZGFyX2Nhbl9zaGFyZWQiID0gInllcyI7IHRoZW4KKyAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD1lY2hvCisgICAgYXJjaGl2ZV9jbWRzX0NYWD0iXCRDQyAtZHluYW1pY2xpYiBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lIFwkcnBhdGgvXCRzb25hbWUgXCR2ZXJzdHJpbmcgJF9sdF9kYXJfc2luZ2xlX21vZCR7X2x0X2RzeW11dGlsfSIKKyAgICBtb2R1bGVfY21kc19DWFg9IlwkQ0MgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiAtYnVuZGxlIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyR7X2x0X2RzeW11dGlsfSIKKyAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0ic2VkICdzLF4sXywnIDwgXCRleHBvcnRfc3ltYm9scyA+IFwkb3V0cHV0X29iamRpci9cJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX5cJENDIC1keW5hbWljbGliIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzIC1pbnN0YWxsX25hbWUgXCRycGF0aC9cJHNvbmFtZSBcJHZlcnN0cmluZyAke19sdF9kYXJfc2luZ2xlX21vZH0ke19sdF9kYXJfZXhwb3J0X3N5bXN9JHtfbHRfZHN5bXV0aWx9IgorICAgIG1vZHVsZV9leHBzeW1fY21kc19DWFg9InNlZCAtZSAncyxeLF8sJyA8IFwkZXhwb3J0X3N5bWJvbHMgPiBcJG91dHB1dF9vYmpkaXIvXCR7bGlibmFtZX0tc3ltYm9scy5leHBzeW1+XCRDQyBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIC1idW5kbGUgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzJHtfbHRfZGFyX2V4cG9ydF9zeW1zfSR7X2x0X2RzeW11dGlsfSIKKyAgICAgICBpZiB0ZXN0ICIkbHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZCIgIT0gInllcyI7IHRoZW4KKyAgICAgIGFyY2hpdmVfY21kc19DWFg9IlwkQ0MgLXIgLWtlZXBfcHJpdmF0ZV9leHRlcm5zIC1ub3N0ZGxpYiAtbyBcJHtsaWJ9LW1hc3Rlci5vIFwkbGlib2Jqc35cJENDIC1keW5hbWljbGliIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgXCR7bGlifS1tYXN0ZXIubyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lIFwkcnBhdGgvXCRzb25hbWUgXCR2ZXJzdHJpbmcke19sdF9kc3ltdXRpbH0iCisgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0ic2VkICdzLF4sXywnIDwgXCRleHBvcnRfc3ltYm9scyA+IFwkb3V0cHV0X29iamRpci9cJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX5cJENDIC1yIC1rZWVwX3ByaXZhdGVfZXh0ZXJucyAtbm9zdGRsaWIgLW8gXCR7bGlifS1tYXN0ZXIubyBcJGxpYm9ianN+XCRDQyAtZHluYW1pY2xpYiBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIFwke2xpYn0tbWFzdGVyLm8gXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSBcJHJwYXRoL1wkc29uYW1lIFwkdmVyc3RyaW5nJHtfbHRfZGFyX2V4cG9ydF9zeW1zfSR7X2x0X2RzeW11dGlsfSIKKyAgICBmaQorCisgIGVsc2UKKyAgbGRfc2hsaWJzX0NYWD1ubworICBmaQorCisJOzsKKworICAgICAgZGd1eCopCisgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICAgZWMrKyopCisJICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICBsZF9zaGxpYnNfQ1hYPW5vCisJICAgIDs7CisgICAgICAgICAgZ2hjeCopCisJICAgICMgR3JlZW4gSGlsbHMgQysrIENvbXBpbGVyCisJICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICBsZF9zaGxpYnNfQ1hYPW5vCisJICAgIDs7CisgICAgICAgICAgKikKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIGxkX3NobGlic19DWFg9bm8KKwkgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgICA7OworCisgICAgICBmcmVlYnNkWzEyXSopCisgICAgICAgICMgQysrIHNoYXJlZCBsaWJyYXJpZXMgcmVwb3J0ZWQgdG8gYmUgZmFpcmx5IGJyb2tlbiBiZWZvcmUKKwkjIHN3aXRjaCB0byBFTEYKKyAgICAgICAgbGRfc2hsaWJzX0NYWD1ubworICAgICAgICA7OworCisgICAgICBmcmVlYnNkLWVsZiopCisgICAgICAgIGFyY2hpdmVfY21kc19uZWVkX2xjX0NYWD1ubworICAgICAgICA7OworCisgICAgICBmcmVlYnNkKiB8IGRyYWdvbmZseSopCisgICAgICAgICMgRnJlZUJTRCAzIGFuZCBsYXRlciB1c2UgR05VIEMrKyBhbmQgR05VIGxkIHdpdGggc3RhbmRhcmQgRUxGCisgICAgICAgICMgY29udmVudGlvbnMKKyAgICAgICAgbGRfc2hsaWJzX0NYWD15ZXMKKyAgICAgICAgOzsKKworICAgICAgZ251KikKKyAgICAgICAgOzsKKworICAgICAgaHB1eDkqKQorICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHt3bH0rYiAke3dsfSRsaWJkaXInCisgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYPToKKyAgICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWD0nJHt3bH0tRScKKyAgICAgICAgaGFyZGNvZGVfZGlyZWN0X0NYWD15ZXMKKyAgICAgICAgaGFyZGNvZGVfbWludXNfTF9DWFg9eWVzICMgTm90IGluIHRoZSBzZWFyY2ggUEFUSCwKKwkJCQkgICAgICAgICAgICAgIyBidXQgYXMgdGhlIGRlZmF1bHQKKwkJCQkgICAgICAgICAgICAgIyBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KKworICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgIENDKikKKyAgICAgICAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorICAgICAgICAgICAgbGRfc2hsaWJzX0NYWD1ubworICAgICAgICAgICAgOzsKKyAgICAgICAgICBhQ0MqKQorICAgICAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1iICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisgICAgICAgICAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCisgICAgICAgICAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KKyAgICAgICAgICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorICAgICAgICAgICAgIworICAgICAgICAgICAgIyBUaGVyZSBkb2Vzbid0IGFwcGVhciB0byBiZSBhIHdheSB0byBwcmV2ZW50IHRoaXMgY29tcGlsZXIgZnJvbQorICAgICAgICAgICAgIyBleHBsaWNpdGx5IGxpbmtpbmcgc3lzdGVtIG9iamVjdCBmaWxlcyBzbyB3ZSBuZWVkIHRvIHN0cmlwIHRoZW0KKyAgICAgICAgICAgICMgZnJvbSB0aGUgb3V0cHV0IHNvIHRoYXQgdGhleSBkb24ndCBnZXQgaW5jbHVkZWQgaW4gdGhlIGxpYnJhcnkKKyAgICAgICAgICAgICMgZGVwZW5kZW5jaWVzLgorICAgICAgICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J3RlbXBsaXN0PWAoJENDIC1iICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxKSB8ICRFR1JFUCAiXC1MImA7IGxpc3Q9IiI7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyAkRUNITyAiWCRsaXN0IiB8ICRYc2VkJworICAgICAgICAgICAgOzsKKyAgICAgICAgICAqKQorICAgICAgICAgICAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KKyAgICAgICAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1zaGFyZWQgLW5vc3RkbGliIC1mUElDICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorICAgICAgICAgICAgICBsZF9zaGxpYnNfQ1hYPW5vCisgICAgICAgICAgICBmaQorICAgICAgICAgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgICA7OworCisgICAgICBocHV4MTAqfGhwdXgxMSopCisgICAgICAgIGlmIHRlc3QgJHdpdGhfZ251X2xkID0gbm87IHRoZW4KKwkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPScke3dsfStiICR7d2x9JGxpYmRpcicKKwkgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYPToKKworICAgICAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICAgICAgICBocHBhKjY0KnxpYTY0KikKKyAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICopCisJICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWD0nJHt3bH0tRScKKyAgICAgICAgICAgICAgOzsKKyAgICAgICAgICBlc2FjCisgICAgICAgIGZpCisgICAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICAgICAgaHBwYSo2NCp8aWE2NCopCisgICAgICAgICAgICBoYXJkY29kZV9kaXJlY3RfQ1hYPW5vCisgICAgICAgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0NYWD1ubworICAgICAgICAgICAgOzsKKyAgICAgICAgICAqKQorICAgICAgICAgICAgaGFyZGNvZGVfZGlyZWN0X0NYWD15ZXMKKyAgICAgICAgICAgIGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZV9DWFg9eWVzCisgICAgICAgICAgICBoYXJkY29kZV9taW51c19MX0NYWD15ZXMgIyBOb3QgaW4gdGhlIHNlYXJjaCBQQVRILAorCQkJCQkgICAgICAgICAjIGJ1dCBhcyB0aGUgZGVmYXVsdAorCQkJCQkgICAgICAgICAjIGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgorICAgICAgICAgICAgOzsKKyAgICAgICAgZXNhYworCisgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICAgQ0MqKQorCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgbGRfc2hsaWJzX0NYWD1ubworCSAgICA7OworICAgICAgICAgIGFDQyopCisJICAgIGNhc2UgJGhvc3RfY3B1IGluCisJICAgICAgaHBwYSo2NCopCisJICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLWIgJHt3bH0raCAke3dsfSRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisJICAgICAgICA7OworCSAgICAgIGlhNjQqKQorCSAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1iICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICAgICAgOzsKKwkgICAgICAqKQorCSAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1iICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisJICAgICAgICA7OworCSAgICBlc2FjCisJICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKKwkgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCisJICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorCSAgICAjCisJICAgICMgVGhlcmUgZG9lc24ndCBhcHBlYXIgdG8gYmUgYSB3YXkgdG8gcHJldmVudCB0aGlzIGNvbXBpbGVyIGZyb20KKwkgICAgIyBleHBsaWNpdGx5IGxpbmtpbmcgc3lzdGVtIG9iamVjdCBmaWxlcyBzbyB3ZSBuZWVkIHRvIHN0cmlwIHRoZW0KKwkgICAgIyBmcm9tIHRoZSBvdXRwdXQgc28gdGhhdCB0aGV5IGRvbid0IGdldCBpbmNsdWRlZCBpbiB0aGUgbGlicmFyeQorCSAgICAjIGRlcGVuZGVuY2llcy4KKwkgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J3RlbXBsaXN0PWAoJENDIC1iICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxKSB8ICRHUkVQICJcLUwiYDsgbGlzdD0iIjsgZm9yIHogaW4gJHRlbXBsaXN0OyBkbyBjYXNlICR6IGluIGNvbmZ0ZXN0LiRvYmpleHQpIGxpc3Q9IiRsaXN0ICR6Ijs7ICouJG9iamV4dCk7OyAqKSBsaXN0PSIkbGlzdCAkeiI7O2VzYWM7IGRvbmU7ICRFQ0hPICJYJGxpc3QiIHwgJFhzZWQnCisJICAgIDs7CisgICAgICAgICAgKikKKwkgICAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KKwkgICAgICBpZiB0ZXN0ICR3aXRoX2dudV9sZCA9IG5vOyB0aGVuCisJICAgICAgICBjYXNlICRob3N0X2NwdSBpbgorCSAgICAgICAgICBocHBhKjY0KikKKwkgICAgICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisJICAgICAgICAgICAgOzsKKwkgICAgICAgICAgaWE2NCopCisJICAgICAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgLW5vc3RkbGliIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICAgICAgICAgIDs7CisJICAgICAgICAgICopCisJICAgICAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgLW5vc3RkbGliIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisJICAgICAgICAgICAgOzsKKwkgICAgICAgIGVzYWMKKwkgICAgICBmaQorCSAgICBlbHNlCisJICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgICAgbGRfc2hsaWJzX0NYWD1ubworCSAgICBmaQorCSAgICA7OworICAgICAgICBlc2FjCisgICAgICAgIDs7CisKKyAgICAgIGludGVyaXhbMy05XSopCisJaGFyZGNvZGVfZGlyZWN0X0NYWD1ubworCWhhcmRjb2RlX3NobGlicGF0aF92YXJfQ1hYPW5vCisJaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR7d2x9LXJwYXRoLCRsaWJkaXInCisJZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWD0nJHt3bH0tRScKKwkjIEhhY2s6IE9uIEludGVyaXggMy54LCB3ZSBjYW5ub3QgY29tcGlsZSBQSUMgYmVjYXVzZSBvZiBhIGJyb2tlbiBnY2MuCisJIyBJbnN0ZWFkLCBzaGFyZWQgbGlicmFyaWVzIGFyZSBsb2FkZWQgYXQgYW4gaW1hZ2UgYmFzZSAoMHgxMDAwMDAwMCBieQorCSMgZGVmYXVsdCkgYW5kIHJlbG9jYXRlZCBpZiB0aGV5IGNvbmZsaWN0LCB3aGljaCBpcyBhIHNsb3cgdmVyeSBtZW1vcnkKKwkjIGNvbnN1bWluZyBhbmQgZnJhZ21lbnRpbmcgcHJvY2Vzcy4gIFRvIGF2b2lkIHRoaXMsIHdlIHBpY2sgYSByYW5kb20sCisJIyAyNTYgS2lCLWFsaWduZWQgaW1hZ2UgYmFzZSBiZXR3ZWVuIDB4NTAwMDAwMDAgYW5kIDB4NkZGQzAwMDAgYXQgbGluaworCSMgdGltZS4gIE1vdmluZyB1cCBmcm9tIDB4MTAwMDAwMDAgYWxzbyBhbGxvd3MgbW9yZSBzYnJrKDIpIHNwYWNlLgorCWFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCwkc29uYW1lICR7d2x9LS1pbWFnZS1iYXNlLGBleHByICR7UkFORE9NLSQkfSAlIDQwOTYgLyAyIFwqIDI2MjE0NCArIDEzNDIxNzcyODBgIC1vICRsaWInCisJYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9J3NlZCAicyxeLF8sIiAkZXhwb3J0X3N5bWJvbHMgPiRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwc3ltfiRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCwkc29uYW1lICR7d2x9LS1yZXRhaW4tc3ltYm9scy1maWxlLCRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwc3ltICR7d2x9LS1pbWFnZS1iYXNlLGBleHByICR7UkFORE9NLSQkfSAlIDQwOTYgLyAyIFwqIDI2MjE0NCArIDEzNDIxNzcyODBgIC1vICRsaWInCisJOzsKKyAgICAgIGlyaXg1KiB8IGlyaXg2KikKKyAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICBDQyopCisJICAgICMgU0dJIEMrKworCSAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtYWxsIC1tdWx0aWdvdCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiAkRUNITyAiWC1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nIiB8ICRYc2VkYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisKKwkgICAgIyBBcmNoaXZlcyBjb250YWluaW5nIEMrKyBvYmplY3QgZmlsZXMgbXVzdCBiZSBjcmVhdGVkIHVzaW5nCisJICAgICMgIkNDIC1hciIsIHdoZXJlICJDQyIgaXMgdGhlIElSSVggQysrIGNvbXBpbGVyLiAgVGhpcyBpcworCSAgICAjIG5lY2Vzc2FyeSB0byBtYWtlIHN1cmUgaW5zdGFudGlhdGVkIHRlbXBsYXRlcyBhcmUgaW5jbHVkZWQKKwkgICAgIyBpbiB0aGUgYXJjaGl2ZS4KKwkgICAgb2xkX2FyY2hpdmVfY21kc19DWFg9JyRDQyAtYXIgLVdSLC11IC1vICRvbGRsaWIgJG9sZG9ianMnCisJICAgIDs7CisgICAgICAgICAgKikKKwkgICAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KKwkgICAgICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKwkgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgJEVDSE8gIlgke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciIHwgJFhzZWRgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisJICAgICAgZWxzZQorCSAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiAkRUNITyAiWCR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyIgfCAkWHNlZGAgLW8gJGxpYicKKwkgICAgICBmaQorCSAgICBmaQorCSAgICBsaW5rX2FsbF9kZXBsaWJzX0NYWD15ZXMKKwkgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICAgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0NYWD06CisgICAgICAgIGluaGVyaXRfcnBhdGhfQ1hYPXllcworICAgICAgICA7OworCisgICAgICBsaW51eCogfCBrKmJzZCotZ251IHwga29wZW5zb2xhcmlzKi1nbnUpCisgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICAgS0NDKikKKwkgICAgIyBLdWNrIGFuZCBBc3NvY2lhdGVzLCBJbmMuIChLQUkpIEMrKyBDb21waWxlcgorCisJICAgICMgS0NDIHdpbGwgb25seSBjcmVhdGUgYSBzaGFyZWQgbGlicmFyeSBpZiB0aGUgb3V0cHV0IGZpbGUKKwkgICAgIyBlbmRzIHdpdGggIi5zbyIgKG9yICIuc2wiIGZvciBIUC1VWCksIHNvIHJlbmFtZSB0aGUgbGlicmFyeQorCSAgICAjIHRvIGl0cyBwcm9wZXIgbmFtZSAod2l0aCB2ZXJzaW9uKSBhZnRlciBsaW5raW5nLgorCSAgICBhcmNoaXZlX2NtZHNfQ1hYPSd0ZW1wZXh0PWBlY2hvICRzaGFyZWRfZXh0IHwgJFNFRCAtZSAnXCcncy9cKFteKCkwLTlBLVphLXp7fV1cKS9cXFxcXDEvZydcJydgOyB0ZW1wbGliPWBlY2hvICRsaWIgfCAkU0VEIC1lICJzL1wke3RlbXBleHR9XC4uKi8uc28vImA7ICRDQyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLS1zb25hbWUgJHNvbmFtZSAtbyBcJHRlbXBsaWI7IG12IFwkdGVtcGxpYiAkbGliJworCSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0ndGVtcGV4dD1gZWNobyAkc2hhcmVkX2V4dCB8ICRTRUQgLWUgJ1wnJ3MvXChbXigpMC05QS1aYS16e31dXCkvXFxcXFwxL2cnXCcnYDsgdGVtcGxpYj1gZWNobyAkbGliIHwgJFNFRCAtZSAicy9cJHt0ZW1wZXh0fVwuLiovLnNvLyJgOyAkQ0MgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC0tc29uYW1lICRzb25hbWUgLW8gXCR0ZW1wbGliICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUsJGV4cG9ydF9zeW1ib2xzOyBtdiBcJHRlbXBsaWIgJGxpYicKKwkgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworCSAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KKwkgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCisJICAgICMKKwkgICAgIyBUaGVyZSBkb2Vzbid0IGFwcGVhciB0byBiZSBhIHdheSB0byBwcmV2ZW50IHRoaXMgY29tcGlsZXIgZnJvbQorCSAgICAjIGV4cGxpY2l0bHkgbGlua2luZyBzeXN0ZW0gb2JqZWN0IGZpbGVzIHNvIHdlIG5lZWQgdG8gc3RyaXAgdGhlbQorCSAgICAjIGZyb20gdGhlIG91dHB1dCBzbyB0aGF0IHRoZXkgZG9uJ3QgZ2V0IGluY2x1ZGVkIGluIHRoZSBsaWJyYXJ5CisJICAgICMgZGVwZW5kZW5jaWVzLgorCSAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0ndGVtcGxpc3Q9YCRDQyAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgLW8gbGliY29uZnRlc3Qkc2hhcmVkX2V4dCAyPiYxIHwgJEdSRVAgImxkImA7IHJtIC1mIGxpYmNvbmZ0ZXN0JHNoYXJlZF9leHQ7IGxpc3Q9IiI7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyAkRUNITyAiWCRsaXN0IiB8ICRYc2VkJworCisJICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPScke3dsfS1ycGF0aCwkbGliZGlyJworCSAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfQ1hYPScke3dsfS0tZXhwb3J0LWR5bmFtaWMnCisKKwkgICAgIyBBcmNoaXZlcyBjb250YWluaW5nIEMrKyBvYmplY3QgZmlsZXMgbXVzdCBiZSBjcmVhdGVkIHVzaW5nCisJICAgICMgIkNDIC1Cc3RhdGljIiwgd2hlcmUgIkNDIiBpcyB0aGUgS0FJIEMrKyBjb21waWxlci4KKwkgICAgb2xkX2FyY2hpdmVfY21kc19DWFg9JyRDQyAtQnN0YXRpYyAtbyAkb2xkbGliICRvbGRvYmpzJworCSAgICA7OworCSAgaWNwYyogfCBlY3BjKiApCisJICAgICMgSW50ZWwgQysrCisJICAgIHdpdGhfZ251X2xkPXllcworCSAgICAjIHZlcnNpb24gOC4wIGFuZCBhYm92ZSBvZiBpY3BjIGNob2tlIG9uIG11bHRpcGx5IGRlZmluZWQgc3ltYm9scworCSAgICAjIGlmIHdlIGFkZCAkcHJlZGVwX29iamVjdHMgYW5kICRwb3N0ZGVwX29iamVjdHMsIGhvd2V2ZXIgNy4xIGFuZAorCSAgICAjIGVhcmxpZXIgZG8gbm90IGFkZCB0aGUgb2JqZWN0cyB0aGVtc2VsdmVzLgorCSAgICBjYXNlIGAkQ0MgLVYgMj4mMWAgaW4KKwkgICAgICAqIlZlcnNpb24gNy4iKikKKwkgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCQlhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisJCTs7CisJICAgICAgKikgICMgVmVyc2lvbiA4LjAgb3IgbmV3ZXIKKwkgICAgICAgIHRtcF9pZHluPQorCSAgICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKwkJICBpYTY0KikgdG1wX2lkeW49JyAtaV9keW5hbWljJzs7CisJCWVzYWMKKwkgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkJyIkdG1wX2lkeW4iJyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwkJYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9JyRDQyAtc2hhcmVkJyIkdG1wX2lkeW4iJyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKwkJOzsKKwkgICAgZXNhYworCSAgICBhcmNoaXZlX2NtZHNfbmVlZF9sY19DWFg9bm8KKwkgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR7d2x9LXJwYXRoLCRsaWJkaXInCisJICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19DWFg9JyR7d2x9LS1leHBvcnQtZHluYW1pYycKKwkgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfQ1hYPScke3dsfS0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKKwkgICAgOzsKKyAgICAgICAgICBwZ0NDKiB8IHBnY3BwKikKKyAgICAgICAgICAgICMgUG9ydGxhbmQgR3JvdXAgQysrIGNvbXBpbGVyCisJICAgIGNhc2UgYCRDQyAtVmAgaW4KKwkgICAgKnBnQ0NcIFsxLTVdKiB8ICpwZ2NwcFwgWzEtNV0qKQorCSAgICAgIHByZWxpbmtfY21kc19DWFg9J3RwbGRpcj1UZW1wbGF0ZS5kaXJ+CisJCXJtIC1yZiAkdHBsZGlyfgorCQkkQ0MgLS1wcmVsaW5rX29iamVjdHMgLS1pbnN0YW50aWF0aW9uX2RpciAkdHBsZGlyICRvYmpzICRsaWJvYmpzICRjb21waWxlX2RlcGxpYnN+CisJCWNvbXBpbGVfY29tbWFuZD0iJGNvbXBpbGVfY29tbWFuZCBgZmluZCAkdHBsZGlyIC1uYW1lIFwqLm8gfCAkTkwyU1BgIicKKwkgICAgICBvbGRfYXJjaGl2ZV9jbWRzX0NYWD0ndHBsZGlyPVRlbXBsYXRlLmRpcn4KKwkJcm0gLXJmICR0cGxkaXJ+CisJCSRDQyAtLXByZWxpbmtfb2JqZWN0cyAtLWluc3RhbnRpYXRpb25fZGlyICR0cGxkaXIgJG9sZG9ianMkb2xkX2RlcGxpYnN+CisJCSRBUiAkQVJfRkxBR1MgJG9sZGxpYiRvbGRvYmpzJG9sZF9kZXBsaWJzIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8ICROTDJTUGB+CisJCSRSQU5MSUIgJG9sZGxpYicKKwkgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSd0cGxkaXI9VGVtcGxhdGUuZGlyfgorCQlybSAtcmYgJHRwbGRpcn4KKwkJJENDIC0tcHJlbGlua19vYmplY3RzIC0taW5zdGFudGlhdGlvbl9kaXIgJHRwbGRpciAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJGNvbnZlbmllbmNlICRwb3N0ZGVwX29iamVjdHN+CisJCSRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgYGZpbmQgJHRwbGRpciAtbmFtZSBcKi5vIHwgJE5MMlNQYCAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIC1vICRsaWInCisJICAgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9J3RwbGRpcj1UZW1wbGF0ZS5kaXJ+CisJCXJtIC1yZiAkdHBsZGlyfgorCQkkQ0MgLS1wcmVsaW5rX29iamVjdHMgLS1pbnN0YW50aWF0aW9uX2RpciAkdHBsZGlyICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkY29udmVuaWVuY2UgJHBvc3RkZXBfb2JqZWN0c34KKwkJJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyBgZmluZCAkdHBsZGlyIC1uYW1lIFwqLm8gfCAkTkwyU1BgICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAke3dsfSRleHBvcnRfc3ltYm9scyAtbyAkbGliJworCSAgICAgIDs7CisJICAgICopICMgVmVyc2lvbiA2IHdpbGwgdXNlIHdlYWsgc3ltYm9scworCSAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSAtbyAkbGliJworCSAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAke3dsfSRleHBvcnRfc3ltYm9scyAtbyAkbGliJworCSAgICAgIDs7CisJICAgIGVzYWMKKworCSAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHt3bH0tLXJwYXRoICR7d2x9JGxpYmRpcicKKwkgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWD0nJHt3bH0tLWV4cG9ydC1keW5hbWljJworCSAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19DWFg9JyR7d2x9LS13aG9sZS1hcmNoaXZlYGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgIC1uIFwiJGNvbnZcIiAmJiBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7ICRFQ0hPIFwiJG5ld19jb252ZW5pZW5jZVwiYCAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKKyAgICAgICAgICAgIDs7CisJICBjeHgqKQorCSAgICAjIENvbXBhcSBDKysKKwkgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgIC1vICRsaWIgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMnCisKKwkgICAgcnVucGF0aF92YXI9TERfUlVOX1BBVEgKKwkgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9Jy1ycGF0aCAkbGliZGlyJworCSAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0NYWD06CisKKwkgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworCSAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KKwkgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCisJICAgICMKKwkgICAgIyBUaGVyZSBkb2Vzbid0IGFwcGVhciB0byBiZSBhIHdheSB0byBwcmV2ZW50IHRoaXMgY29tcGlsZXIgZnJvbQorCSAgICAjIGV4cGxpY2l0bHkgbGlua2luZyBzeXN0ZW0gb2JqZWN0IGZpbGVzIHNvIHdlIG5lZWQgdG8gc3RyaXAgdGhlbQorCSAgICAjIGZyb20gdGhlIG91dHB1dCBzbyB0aGF0IHRoZXkgZG9uJ3QgZ2V0IGluY2x1ZGVkIGluIHRoZSBsaWJyYXJ5CisJICAgICMgZGVwZW5kZW5jaWVzLgorCSAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0ndGVtcGxpc3Q9YCRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgJEdSRVAgImxkImA7IHRlbXBsaXN0PWAkRUNITyAiWCR0ZW1wbGlzdCIgfCAkWHNlZCAtZSAicy9cKF4uKmxkLipcKVwoIC4qbGQgLiokXCkvXDEvImA7IGxpc3Q9IiI7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyAkRUNITyAiWCRsaXN0IiB8ICRYc2VkJworCSAgICA7OworCSAgeGwqKQorCSAgICAjIElCTSBYTCA4LjAgb24gUFBDLCB3aXRoIEdOVSBsZAorCSAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworCSAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfQ1hYPScke3dsfS0tZXhwb3J0LWR5bmFtaWMnCisJICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtcW1rc2hyb2JqICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCSAgICBpZiB0ZXN0ICJ4JHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZyIgPSB4eWVzOyB0aGVuCisJICAgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9J2VjaG8gInsgZ2xvYmFsOiIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisJCWNhdCAkZXhwb3J0X3N5bWJvbHMgfCBzZWQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKwkJZWNobyAibG9jYWw6ICo7IH07IiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisJCSRDQyAtcW1rc2hyb2JqICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS12ZXJzaW9uLXNjcmlwdCAke3dsfSRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlciAtbyAkbGliJworCSAgICBmaQorCSAgICA7OworCSAgKikKKwkgICAgY2FzZSBgJENDIC1WIDI+JjEgfCBzZWQgNXFgIGluCisJICAgICpTdW5cIEMqKQorCSAgICAgICMgU3VuIEMrKyA1LjkKKwkgICAgICBub191bmRlZmluZWRfZmxhZ19DWFg9JyAtemRlZnMnCisJICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gLWgkc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSckQ0MgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAtaCRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAke3dsfSRleHBvcnRfc3ltYm9scycKKwkgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nLVIkbGliZGlyJworCSAgICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWD0nJHt3bH0tLXdob2xlLWFyY2hpdmVgbmV3X2NvbnZlbmllbmNlPTsgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAteiBcIiRjb252XCIgfHwgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyAkRUNITyBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCisJICAgICAgY29tcGlsZXJfbmVlZHNfb2JqZWN0X0NYWD15ZXMKKworCSAgICAgICMgTm90IHN1cmUgd2hldGhlciBzb21ldGhpbmcgYmFzZWQgb24KKwkgICAgICAjICRDQyAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgLW8gbGliY29uZnRlc3Qkc2hhcmVkX2V4dCAyPiYxCisJICAgICAgIyB3b3VsZCBiZSBiZXR0ZXIuCisJICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J2VjaG8nCisKKwkgICAgICAjIEFyY2hpdmVzIGNvbnRhaW5pbmcgQysrIG9iamVjdCBmaWxlcyBtdXN0IGJlIGNyZWF0ZWQgdXNpbmcKKwkgICAgICAjICJDQyAteGFyIiwgd2hlcmUgIkNDIiBpcyB0aGUgU3VuIEMrKyBjb21waWxlci4gIFRoaXMgaXMKKwkgICAgICAjIG5lY2Vzc2FyeSB0byBtYWtlIHN1cmUgaW5zdGFudGlhdGVkIHRlbXBsYXRlcyBhcmUgaW5jbHVkZWQKKwkgICAgICAjIGluIHRoZSBhcmNoaXZlLgorCSAgICAgIG9sZF9hcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXhhciAtbyAkb2xkbGliICRvbGRvYmpzJworCSAgICAgIDs7CisJICAgIGVzYWMKKwkgICAgOzsKKwllc2FjCisJOzsKKworICAgICAgbHlueG9zKikKKyAgICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJbGRfc2hsaWJzX0NYWD1ubworCTs7CisKKyAgICAgIG04OGsqKQorICAgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKyAgICAgICAgbGRfc2hsaWJzX0NYWD1ubworCTs7CisKKyAgICAgIG12cyopCisgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICAgY3h4KikKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIGxkX3NobGlic19DWFg9bm8KKwkgICAgOzsKKwkgICopCisJICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICBsZF9zaGxpYnNfQ1hYPW5vCisJICAgIDs7CisJZXNhYworCTs7CisKKyAgICAgIG5ldGJzZCopCisgICAgICAgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfXyA+L2Rldi9udWxsOyB0aGVuCisJICBhcmNoaXZlX2NtZHNfQ1hYPSckTEQgLUJzaGFyZWFibGUgIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGxpbmtlcl9mbGFncycKKwkgIHdsYXJjPQorCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9Jy1SJGxpYmRpcicKKwkgIGhhcmRjb2RlX2RpcmVjdF9DWFg9eWVzCisJICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0NYWD1ubworCWZpCisJIyBXb3JrYXJvdW5kIHNvbWUgYnJva2VuIHByZS0xLjUgdG9vbGNoYWlucworCW91dHB1dF92ZXJib3NlX2xpbmtfY21kPSckQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8ICRHUkVQIGNvbmZ0ZXN0LiRvYmpleHQgfCAkU0VEIC1lICJzOi1sZ2NjIC1sYyAtbGdjYzo6IicKKwk7OworCisgICAgICAqbnRvKiB8ICpxbngqKQorICAgICAgICBsZF9zaGxpYnNfQ1hYPXllcworCTs7CisKKyAgICAgIG9wZW5ic2QyKikKKyAgICAgICAgIyBDKysgc2hhcmVkIGxpYnJhcmllcyBhcmUgZmFpcmx5IGJyb2tlbgorCWxkX3NobGlic19DWFg9bm8KKwk7OworCisgICAgICBvcGVuYnNkKikKKwlpZiB0ZXN0IC1mIC91c3IvbGliZXhlYy9sZC5zbzsgdGhlbgorCSAgaGFyZGNvZGVfZGlyZWN0X0NYWD15ZXMKKwkgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfQ1hYPW5vCisJICBoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGVfQ1hYPXllcworCSAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbyAkbGliJworCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR7d2x9LXJwYXRoLCRsaWJkaXInCisJICBpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX19gIiB8fCB0ZXN0ICIkaG9zdF9vcy0kaG9zdF9jcHUiID0gIm9wZW5ic2QyLjgtcG93ZXJwYyI7IHRoZW4KKwkgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSwkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKwkgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWD0nJHt3bH0tRScKKwkgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfQ1hYPSIkd2xhcmMiJy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAnIiR3bGFyYyInLS1uby13aG9sZS1hcmNoaXZlJworCSAgZmkKKwkgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPWVjaG8KKwllbHNlCisJICBsZF9zaGxpYnNfQ1hYPW5vCisJZmkKKwk7OworCisgICAgICBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCisgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICAgS0NDKikKKwkgICAgIyBLdWNrIGFuZCBBc3NvY2lhdGVzLCBJbmMuIChLQUkpIEMrKyBDb21waWxlcgorCisJICAgICMgS0NDIHdpbGwgb25seSBjcmVhdGUgYSBzaGFyZWQgbGlicmFyeSBpZiB0aGUgb3V0cHV0IGZpbGUKKwkgICAgIyBlbmRzIHdpdGggIi5zbyIgKG9yICIuc2wiIGZvciBIUC1VWCksIHNvIHJlbmFtZSB0aGUgbGlicmFyeQorCSAgICAjIHRvIGl0cyBwcm9wZXIgbmFtZSAod2l0aCB2ZXJzaW9uKSBhZnRlciBsaW5raW5nLgorCSAgICBhcmNoaXZlX2NtZHNfQ1hYPSd0ZW1wZXh0PWBlY2hvICRzaGFyZWRfZXh0IHwgJFNFRCAtZSAnXCcncy9cKFteKCkwLTlBLVphLXp7fV1cKS9cXFxcXDEvZydcJydgOyB0ZW1wbGliPWBlY2hvICIkbGliIiB8ICRTRUQgLWUgInMvXCR7dGVtcGV4dH1cLi4qLy5zby8iYDsgJENDICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtLXNvbmFtZSAkc29uYW1lIC1vIFwkdGVtcGxpYjsgbXYgXCR0ZW1wbGliICRsaWInCisKKwkgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR7d2x9LXJwYXRoLCRsaWJkaXInCisJICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYPToKKworCSAgICAjIEFyY2hpdmVzIGNvbnRhaW5pbmcgQysrIG9iamVjdCBmaWxlcyBtdXN0IGJlIGNyZWF0ZWQgdXNpbmcKKwkgICAgIyB0aGUgS0FJIEMrKyBjb21waWxlci4KKwkgICAgY2FzZSAkaG9zdCBpbgorCSAgICAgIG9zZjMqKSBvbGRfYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1Cc3RhdGljIC1vICRvbGRsaWIgJG9sZG9ianMnIDs7CisJICAgICAgKikgb2xkX2FyY2hpdmVfY21kc19DWFg9JyRDQyAtbyAkb2xkbGliICRvbGRvYmpzJyA7OworCSAgICBlc2FjCisJICAgIDs7CisgICAgICAgICAgUkNDKikKKwkgICAgIyBSYXRpb25hbCBDKysgMi40LjEKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIGxkX3NobGlic19DWFg9bm8KKwkgICAgOzsKKyAgICAgICAgICBjeHgqKQorCSAgICBjYXNlICRob3N0IGluCisJICAgICAgb3NmMyopCisJICAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZ19DWFg9JyAke3dsfS1leHBlY3RfdW5yZXNvbHZlZCAke3dsfVwqJworCSAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmICRFQ0hPICJYJHt3bH0tc2V0X3ZlcnNpb24gJHZlcnN0cmluZyIgfCAkWHNlZGAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworCSAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKwkJOzsKKwkgICAgICAqKQorCSAgICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPScgLWV4cGVjdF91bnJlc29sdmVkIFwqJworCSAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW1zeW0gLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiAkRUNITyAiWC1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nIiB8ICRYc2VkYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisJICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nZm9yIGkgaW4gYGNhdCAkZXhwb3J0X3N5bWJvbHNgOyBkbyBwcmludGYgIiVzICVzXFxuIiAtZXhwb3J0ZWRfc3ltYm9sICJcJGkiID4+ICRsaWIuZXhwOyBkb25lfgorCSAgICAgICAgICBlY2hvICItaGlkZGVuIj4+ICRsaWIuZXhwfgorCSAgICAgICAgICAkQ0MgLXNoYXJlZCRhbGxvd191bmRlZmluZWRfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW1zeW0gLXNvbmFtZSAkc29uYW1lICR7d2x9LWlucHV0ICR7d2x9JGxpYi5leHAgIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiAkRUNITyAiWC1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nIiB8ICRYc2VkYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWJ+CisJICAgICAgICAgICRSTSAkbGliLmV4cCcKKwkgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPSctcnBhdGggJGxpYmRpcicKKwkJOzsKKwkgICAgZXNhYworCisJICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYPToKKworCSAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCisJICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgorCSAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KKwkgICAgIworCSAgICAjIFRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGEgd2F5IHRvIHByZXZlbnQgdGhpcyBjb21waWxlciBmcm9tCisJICAgICMgZXhwbGljaXRseSBsaW5raW5nIHN5c3RlbSBvYmplY3QgZmlsZXMgc28gd2UgbmVlZCB0byBzdHJpcCB0aGVtCisJICAgICMgZnJvbSB0aGUgb3V0cHV0IHNvIHRoYXQgdGhleSBkb24ndCBnZXQgaW5jbHVkZWQgaW4gdGhlIGxpYnJhcnkKKwkgICAgIyBkZXBlbmRlbmNpZXMuCisJICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSd0ZW1wbGlzdD1gJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCAkR1JFUCAibGQiIHwgJEdSRVAgLXYgImxkOiJgOyB0ZW1wbGlzdD1gJEVDSE8gIlgkdGVtcGxpc3QiIHwgJFhzZWQgLWUgInMvXCheLipsZC4qXClcKCAuKmxkLiokXCkvXDEvImA7IGxpc3Q9IiI7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyAkRUNITyAiWCRsaXN0IiB8ICRYc2VkJworCSAgICA7OworCSAgKikKKwkgICAgaWYgdGVzdCAiJEdYWCIgPSB5ZXMgJiYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCisJICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPScgJHt3bH0tZXhwZWN0X3VucmVzb2x2ZWQgJHt3bH1cKicKKwkgICAgICBjYXNlICRob3N0IGluCisJICAgICAgICBvc2YzKikKKwkgICAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgLW5vc3RkbGliICR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiAkRUNITyAiWCR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyIgfCAkWHNlZGAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwkJICA7OworCSAgICAgICAgKikKKwkgICAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgLW5vc3RkbGliICR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1tc3ltICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmICRFQ0hPICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciIHwgJFhzZWRgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisJCSAgOzsKKwkgICAgICBlc2FjCisKKwkgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworCSAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYPToKKworCSAgICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKKwkgICAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KKwkgICAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KKwkgICAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCAkR1JFUCAiXC1MIicKKworCSAgICBlbHNlCisJICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgICAgbGRfc2hsaWJzX0NYWD1ubworCSAgICBmaQorCSAgICA7OworICAgICAgICBlc2FjCisgICAgICAgIDs7CisKKyAgICAgIHBzb3MqKQorICAgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKyAgICAgICAgbGRfc2hsaWJzX0NYWD1ubworICAgICAgICA7OworCisgICAgICBzdW5vczQqKQorICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgIENDKikKKwkgICAgIyBTdW4gQysrIDQueAorCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgbGRfc2hsaWJzX0NYWD1ubworCSAgICA7OworICAgICAgICAgIGxjYyopCisJICAgICMgTHVjaWQKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIGxkX3NobGlic19DWFg9bm8KKwkgICAgOzsKKyAgICAgICAgICAqKQorCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgbGRfc2hsaWJzX0NYWD1ubworCSAgICA7OworICAgICAgICBlc2FjCisgICAgICAgIDs7CisKKyAgICAgIHNvbGFyaXMqKQorICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgIENDKikKKwkgICAgIyBTdW4gQysrIDQuMiwgNS54IGFuZCBDZW50ZXJsaW5lIEMrKworICAgICAgICAgICAgYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYPXllcworCSAgICBub191bmRlZmluZWRfZmxhZ19DWFg9JyAtemRlZnMnCisJICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICAtaCRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisJICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+CisJICAgICAgJENDIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHt3bH0tTSAke3dsfSRsaWIuZXhwIC1oJHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCisKKwkgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9Jy1SJGxpYmRpcicKKwkgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9DWFg9bm8KKwkgICAgY2FzZSAkaG9zdF9vcyBpbgorCSAgICAgIHNvbGFyaXMyLlswLTVdIHwgc29sYXJpczIuWzAtNV0uKikgOzsKKwkgICAgICAqKQorCQkjIFRoZSBjb21waWxlciBkcml2ZXIgd2lsbCBjb21iaW5lIGFuZCByZW9yZGVyIGxpbmtlciBvcHRpb25zLAorCQkjIGJ1dCB1bmRlcnN0YW5kcyBgLXogbGlua2VyX2ZsYWcnLgorCSAgICAgICAgIyBTdXBwb3J0ZWQgc2luY2UgU29sYXJpcyAyLjYgKG1heWJlIDIuNS4xPykKKwkJd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfQ1hYPScteiBhbGxleHRyYWN0JGNvbnZlbmllbmNlIC16IGRlZmF1bHRleHRyYWN0JworCSAgICAgICAgOzsKKwkgICAgZXNhYworCSAgICBsaW5rX2FsbF9kZXBsaWJzX0NYWD15ZXMKKworCSAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nZWNobycKKworCSAgICAjIEFyY2hpdmVzIGNvbnRhaW5pbmcgQysrIG9iamVjdCBmaWxlcyBtdXN0IGJlIGNyZWF0ZWQgdXNpbmcKKwkgICAgIyAiQ0MgLXhhciIsIHdoZXJlICJDQyIgaXMgdGhlIFN1biBDKysgY29tcGlsZXIuICBUaGlzIGlzCisJICAgICMgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VyZSBpbnN0YW50aWF0ZWQgdGVtcGxhdGVzIGFyZSBpbmNsdWRlZAorCSAgICAjIGluIHRoZSBhcmNoaXZlLgorCSAgICBvbGRfYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC14YXIgLW8gJG9sZGxpYiAkb2xkb2JqcycKKwkgICAgOzsKKyAgICAgICAgICBnY3gqKQorCSAgICAjIEdyZWVuIEhpbGxzIEMrKyBDb21waWxlcgorCSAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCAkd2wkc29uYW1lIC1vICRsaWInCisKKwkgICAgIyBUaGUgQysrIGNvbXBpbGVyIG11c3QgYmUgdXNlZCB0byBjcmVhdGUgdGhlIGFyY2hpdmUuCisJICAgIG9sZF9hcmNoaXZlX2NtZHNfQ1hYPSckQ0MgJExERkxBR1MgLWFyY2hpdmUgLW8gJG9sZGxpYiAkb2xkb2JqcycKKwkgICAgOzsKKyAgICAgICAgICAqKQorCSAgICAjIEdOVSBDKysgY29tcGlsZXIgd2l0aCBTb2xhcmlzIGxpbmtlcgorCSAgICBpZiB0ZXN0ICIkR1hYIiA9IHllcyAmJiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKwkgICAgICBub191bmRlZmluZWRfZmxhZ19DWFg9JyAke3dsfS16ICR7d2x9ZGVmcycKKwkgICAgICBpZiAkQ0MgLS12ZXJzaW9uIHwgJEdSRVAgLXYgJ14yXC43JyA+IC9kZXYvbnVsbDsgdGhlbgorCSAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRMREZMQUdTICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1oICR3bCRzb25hbWUgLW8gJGxpYicKKwkgICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+CisJCSAgJENDIC1zaGFyZWQgLW5vc3RkbGliICR7d2x9LU0gJHdsJGxpYi5leHAgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworCisJICAgICAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCisJICAgICAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KKwkgICAgICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorCSAgICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9JyRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgJEdSRVAgIlwtTCInCisJICAgICAgZWxzZQorCSAgICAgICAgIyBnKysgMi43IGFwcGVhcnMgdG8gcmVxdWlyZSBgLUcnIE5PVCBgLXNoYXJlZCcgb24gdGhpcworCSAgICAgICAgIyBwbGF0Zm9ybS4KKwkgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtRyAtbm9zdGRsaWIgJExERkxBR1MgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWggJHdsJHNvbmFtZSAtbyAkbGliJworCSAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KKwkJICAkQ0MgLUcgLW5vc3RkbGliICR7d2x9LU0gJHdsJGxpYi5leHAgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworCisJICAgICAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCisJICAgICAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KKwkgICAgICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorCSAgICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9JyRDQyAtRyAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8ICRHUkVQICJcLUwiJworCSAgICAgIGZpCisKKwkgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHt3bH0tUiAkd2wkbGliZGlyJworCSAgICAgIGNhc2UgJGhvc3Rfb3MgaW4KKwkJc29sYXJpczIuWzAtNV0gfCBzb2xhcmlzMi5bMC01XS4qKSA7OworCQkqKQorCQkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWD0nJHt3bH0teiAke3dsfWFsbGV4dHJhY3QkY29udmVuaWVuY2UgJHt3bH0teiAke3dsfWRlZmF1bHRleHRyYWN0JworCQkgIDs7CisJICAgICAgZXNhYworCSAgICBmaQorCSAgICA7OworICAgICAgICBlc2FjCisgICAgICAgIDs7CisKKyAgICBzeXN2NCp1dzIqIHwgc3lzdjVPcGVuVU5JWCogfCBzeXN2NVVuaXhXYXJlNy5bMDFdLlsxMF0qIHwgdW5peHdhcmU3KiB8IHNjbzMuMnY1LjAuWzAyNF0qKQorICAgICAgbm9fdW5kZWZpbmVkX2ZsYWdfQ1hYPScke3dsfS16LHRleHQnCisgICAgICBhcmNoaXZlX2NtZHNfbmVlZF9sY19DWFg9bm8KKyAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfQ1hYPW5vCisgICAgICBydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCisKKyAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgIENDKikKKwkgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtRyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nJENDIC1HICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIDs7CisJKikKKwkgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICA7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgICAgc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KikKKwkjIE5vdGU6IFdlIGNhbiBOT1QgdXNlIC16IGRlZnMgYXMgd2UgbWlnaHQgZGVzaXJlLCBiZWNhdXNlIHdlIGRvIG5vdAorCSMgbGluayB3aXRoIC1sYywgYW5kIHRoYXQgd291bGQgY2F1c2UgYW55IHN5bWJvbHMgdXNlZCBmcm9tIGxpYmMgdG8KKwkjIGFsd2F5cyBiZSB1bnJlc29sdmVkLCB3aGljaCBtZWFucyBqdXN0IGFib3V0IG5vIGxpYnJhcnkgd291bGQKKwkjIGV2ZXIgbGluayBjb3JyZWN0bHkuICBJZiB3ZSdyZSBub3QgdXNpbmcgR05VIGxkIHdlIHVzZSAteiB0ZXh0CisJIyB0aG91Z2gsIHdoaWNoIGRvZXMgY2F0Y2ggc29tZSBiYWQgc3ltYm9scyBidXQgaXNuJ3QgYXMgaGVhdnktaGFuZGVkCisJIyBhcyAteiBkZWZzLgorCW5vX3VuZGVmaW5lZF9mbGFnX0NYWD0nJHt3bH0teix0ZXh0JworCWFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWD0nJHt3bH0teixub2RlZnMnCisJYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYPW5vCisJaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9DWFg9bm8KKwloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHt3bH0tUiwkbGliZGlyJworCWhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYPSc6JworCWxpbmtfYWxsX2RlcGxpYnNfQ1hYPXllcworCWV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19DWFg9JyR7d2x9LUJleHBvcnQnCisJcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJworCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICBDQyopCisJICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtRyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSckQ0MgLUcgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICA7OworCSAgKikKKwkgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICA7OworCWVzYWMKKyAgICAgIDs7CisKKyAgICAgIHRhbmRlbSopCisgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICAgTkNDKikKKwkgICAgIyBOb25TdG9wLVVYIE5DQyAzLjIwCisJICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICBsZF9zaGxpYnNfQ1hYPW5vCisJICAgIDs7CisgICAgICAgICAgKikKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIGxkX3NobGlic19DWFg9bm8KKwkgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgICA7OworCisgICAgICB2eHdvcmtzKikKKyAgICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisgICAgICAgIGxkX3NobGlic19DWFg9bm8KKyAgICAgICAgOzsKKworICAgICAgKikKKyAgICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisgICAgICAgIGxkX3NobGlic19DWFg9bm8KKyAgICAgICAgOzsKKyAgICBlc2FjCisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGxkX3NobGlic19DWFgiID4mNQorJGFzX2VjaG8gIiRsZF9zaGxpYnNfQ1hYIiA+JjY7IH0KKyAgICB0ZXN0ICIkbGRfc2hsaWJzX0NYWCIgPSBubyAmJiBjYW5fYnVpbGRfc2hhcmVkPW5vCisKKyAgICBHQ0NfQ1hYPSIkR1hYIgorICAgIExEX0NYWD0iJExEIgorCisgICAgIyMgQ0FWRUFUIEVNUFRPUjoKKyAgICAjIyBUaGVyZSBpcyBubyBlbmNhcHN1bGF0aW9uIHdpdGhpbiB0aGUgZm9sbG93aW5nIG1hY3JvcywgZG8gbm90IGNoYW5nZQorICAgICMjIHRoZSBydW5uaW5nIG9yZGVyIG9yIG90aGVyd2lzZSBtb3ZlIHRoZW0gYXJvdW5kIHVubGVzcyB5b3Uga25vdyBleGFjdGx5CisgICAgIyMgd2hhdCB5b3UgYXJlIGRvaW5nLi4uCisgICAgIyBEZXBlbmRlbmNpZXMgdG8gcGxhY2UgYmVmb3JlIGFuZCBhZnRlciB0aGUgb2JqZWN0IGJlaW5nIGxpbmtlZDoKK3ByZWRlcF9vYmplY3RzX0NYWD0KK3Bvc3RkZXBfb2JqZWN0c19DWFg9CitwcmVkZXBzX0NYWD0KK3Bvc3RkZXBzX0NYWD0KK2NvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aF9DWFg9CisKK2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxfTFRfRU9GCitjbGFzcyBGb28KK3sKK3B1YmxpYzoKKyAgRm9vICh2b2lkKSB7IGEgPSAwOyB9Citwcml2YXRlOgorICBpbnQgYTsKK307CitfTFRfRU9GCisKK2lmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19jb21waWxlXCIiOyB9ID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KKyAgIyBQYXJzZSB0aGUgY29tcGlsZXIgb3V0cHV0IGFuZCBleHRyYWN0IHRoZSBuZWNlc3NhcnkKKyAgIyBvYmplY3RzLCBsaWJyYXJpZXMgYW5kIGxpYnJhcnkgZmxhZ3MuCisKKyAgIyBTZW50aW5lbCB1c2VkIHRvIGtlZXAgdHJhY2sgb2Ygd2hldGhlciBvciBub3Qgd2UgYXJlIGJlZm9yZQorICAjIHRoZSBjb25mdGVzdCBvYmplY3QgZmlsZS4KKyAgcHJlX3Rlc3Rfb2JqZWN0X2RlcHNfZG9uZT1ubworCisgIGZvciBwIGluIGBldmFsICIkb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQiYDsgZG8KKyAgICBjYXNlICRwIGluCisKKyAgICAtTCogfCAtUiogfCAtbCopCisgICAgICAgIyBTb21lIGNvbXBpbGVycyBwbGFjZSBzcGFjZSBiZXR3ZWVuICIte0wsUn0iIGFuZCB0aGUgcGF0aC4KKyAgICAgICAjIFJlbW92ZSB0aGUgc3BhY2UuCisgICAgICAgaWYgdGVzdCAkcCA9ICItTCIgfHwKKyAgICAgICAgICB0ZXN0ICRwID0gIi1SIjsgdGhlbgorCSBwcmV2PSRwCisJIGNvbnRpbnVlCisgICAgICAgZWxzZQorCSBwcmV2PQorICAgICAgIGZpCisKKyAgICAgICBpZiB0ZXN0ICIkcHJlX3Rlc3Rfb2JqZWN0X2RlcHNfZG9uZSIgPSBubzsgdGhlbgorCSBjYXNlICRwIGluCisJIC1MKiB8IC1SKikKKwkgICAjIEludGVybmFsIGNvbXBpbGVyIGxpYnJhcnkgcGF0aHMgc2hvdWxkIGNvbWUgYWZ0ZXIgdGhvc2UKKwkgICAjIHByb3ZpZGVkIHRoZSB1c2VyLiAgVGhlIHBvc3RkZXBzIGFscmVhZHkgY29tZSBhZnRlciB0aGUKKwkgICAjIHVzZXIgc3VwcGxpZWQgbGlicyBzbyB0aGVyZSBpcyBubyBuZWVkIHRvIHByb2Nlc3MgdGhlbS4KKwkgICBpZiB0ZXN0IC16ICIkY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoX0NYWCI7IHRoZW4KKwkgICAgIGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aF9DWFg9IiR7cHJldn0ke3B9IgorCSAgIGVsc2UKKwkgICAgIGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aF9DWFg9IiR7Y29tcGlsZXJfbGliX3NlYXJjaF9wYXRoX0NYWH0gJHtwcmV2fSR7cH0iCisJICAgZmkKKwkgICA7OworCSAjIFRoZSAiLWwiIGNhc2Ugd291bGQgbmV2ZXIgY29tZSBiZWZvcmUgdGhlIG9iamVjdCBiZWluZworCSAjIGxpbmtlZCwgc28gZG9uJ3QgYm90aGVyIGhhbmRsaW5nIHRoaXMgY2FzZS4KKwkgZXNhYworICAgICAgIGVsc2UKKwkgaWYgdGVzdCAteiAiJHBvc3RkZXBzX0NYWCI7IHRoZW4KKwkgICBwb3N0ZGVwc19DWFg9IiR7cHJldn0ke3B9IgorCSBlbHNlCisJICAgcG9zdGRlcHNfQ1hYPSIke3Bvc3RkZXBzX0NYWH0gJHtwcmV2fSR7cH0iCisJIGZpCisgICAgICAgZmkKKyAgICAgICA7OworCisgICAgKi4kb2JqZXh0KQorICAgICAgICMgVGhpcyBhc3N1bWVzIHRoYXQgdGhlIHRlc3Qgb2JqZWN0IGZpbGUgb25seSBzaG93cyB1cAorICAgICAgICMgb25jZSBpbiB0aGUgY29tcGlsZXIgb3V0cHV0LgorICAgICAgIGlmIHRlc3QgIiRwIiA9ICJjb25mdGVzdC4kb2JqZXh0IjsgdGhlbgorCSBwcmVfdGVzdF9vYmplY3RfZGVwc19kb25lPXllcworCSBjb250aW51ZQorICAgICAgIGZpCisKKyAgICAgICBpZiB0ZXN0ICIkcHJlX3Rlc3Rfb2JqZWN0X2RlcHNfZG9uZSIgPSBubzsgdGhlbgorCSBpZiB0ZXN0IC16ICIkcHJlZGVwX29iamVjdHNfQ1hYIjsgdGhlbgorCSAgIHByZWRlcF9vYmplY3RzX0NYWD0iJHAiCisJIGVsc2UKKwkgICBwcmVkZXBfb2JqZWN0c19DWFg9IiRwcmVkZXBfb2JqZWN0c19DWFggJHAiCisJIGZpCisgICAgICAgZWxzZQorCSBpZiB0ZXN0IC16ICIkcG9zdGRlcF9vYmplY3RzX0NYWCI7IHRoZW4KKwkgICBwb3N0ZGVwX29iamVjdHNfQ1hYPSIkcCIKKwkgZWxzZQorCSAgIHBvc3RkZXBfb2JqZWN0c19DWFg9IiRwb3N0ZGVwX29iamVjdHNfQ1hYICRwIgorCSBmaQorICAgICAgIGZpCisgICAgICAgOzsKKworICAgICopIDs7ICMgSWdub3JlIHRoZSByZXN0LgorCisgICAgZXNhYworICBkb25lCisKKyAgIyBDbGVhbiB1cC4KKyAgcm0gLWYgYS5vdXQgYS5leGUKK2Vsc2UKKyAgZWNobyAibGlidG9vbC5tNDogZXJyb3I6IHByb2JsZW0gY29tcGlsaW5nIENYWCB0ZXN0IHByb2dyYW0iCitmaQorCiskUk0gLWYgY29uZmVzdC4kb2JqZXh0CisKKyMgUE9SVE1FOiBvdmVycmlkZSBhYm92ZSB0ZXN0IG9uIHN5c3RlbXMgd2hlcmUgaXQgaXMgYnJva2VuCitjYXNlICRob3N0X29zIGluCitpbnRlcml4WzMtOV0qKQorICAjIEludGVyaXggMy41IGluc3RhbGxzIGNvbXBsZXRlbHkgaG9zZWQgLmxhIGZpbGVzIGZvciBDKyssIHNvIHJhdGhlciB0aGFuCisgICMgaGFjayBhbGwgYXJvdW5kIGl0LCBsZXQncyBqdXN0IHRydXN0ICJnKysiIHRvIERUUlQuCisgIHByZWRlcF9vYmplY3RzX0NYWD0KKyAgcG9zdGRlcF9vYmplY3RzX0NYWD0KKyAgcG9zdGRlcHNfQ1hYPQorICA7OworCitsaW51eCopCisgIGNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgorICAqU3VuXCBDKikKKyAgICAjIFN1biBDKysgNS45CisKKyAgICAjIFRoZSBtb3JlIHN0YW5kYXJkcy1jb25mb3JtaW5nIHN0bHBvcnQ0IGxpYnJhcnkgaXMKKyAgICAjIGluY29tcGF0aWJsZSB3aXRoIHRoZSBDc3RkIGxpYnJhcnkuIEF2b2lkIHNwZWNpZnlpbmcKKyAgICAjIGl0IGlmIGl0J3MgaW4gQ1hYRkxBR1MuIElnbm9yZSBsaWJDcnVuIGFzCisgICAgIyAtbGlicmFyeT1zdGxwb3J0NCBkZXBlbmRzIG9uIGl0LgorICAgIGNhc2UgIiAkQ1hYICRDWFhGTEFHUyAiIGluCisgICAgKiIgLWxpYnJhcnk9c3RscG9ydDQgIiopCisgICAgICBzb2xhcmlzX3VzZV9zdGxwb3J0ND15ZXMKKyAgICAgIDs7CisgICAgZXNhYworCisgICAgaWYgdGVzdCAiJHNvbGFyaXNfdXNlX3N0bHBvcnQ0IiAhPSB5ZXM7IHRoZW4KKyAgICAgIHBvc3RkZXBzX0NYWD0nLWxpYnJhcnk9Q3N0ZCAtbGlicmFyeT1DcnVuJworICAgIGZpCisgICAgOzsKKyAgZXNhYworICA7OworCitzb2xhcmlzKikKKyAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgQ0MqKQorICAgICMgVGhlIG1vcmUgc3RhbmRhcmRzLWNvbmZvcm1pbmcgc3RscG9ydDQgbGlicmFyeSBpcworICAgICMgaW5jb21wYXRpYmxlIHdpdGggdGhlIENzdGQgbGlicmFyeS4gQXZvaWQgc3BlY2lmeWluZworICAgICMgaXQgaWYgaXQncyBpbiBDWFhGTEFHUy4gSWdub3JlIGxpYkNydW4gYXMKKyAgICAjIC1saWJyYXJ5PXN0bHBvcnQ0IGRlcGVuZHMgb24gaXQuCisgICAgY2FzZSAiICRDWFggJENYWEZMQUdTICIgaW4KKyAgICAqIiAtbGlicmFyeT1zdGxwb3J0NCAiKikKKyAgICAgIHNvbGFyaXNfdXNlX3N0bHBvcnQ0PXllcworICAgICAgOzsKKyAgICBlc2FjCisKKyAgICAjIEFkZGluZyB0aGlzIHJlcXVpcmVzIGEga25vd24tZ29vZCBzZXR1cCBvZiBzaGFyZWQgbGlicmFyaWVzIGZvcgorICAgICMgU3VuIGNvbXBpbGVyIHZlcnNpb25zIGJlZm9yZSA1LjYsIGVsc2UgUElDIG9iamVjdHMgZnJvbSBhbiBvbGQKKyAgICAjIGFyY2hpdmUgd2lsbCBiZSBsaW5rZWQgaW50byB0aGUgb3V0cHV0LCBsZWFkaW5nIHRvIHN1YnRsZSBidWdzLgorICAgIGlmIHRlc3QgIiRzb2xhcmlzX3VzZV9zdGxwb3J0NCIgIT0geWVzOyB0aGVuCisgICAgICBwb3N0ZGVwc19DWFg9Jy1saWJyYXJ5PUNzdGQgLWxpYnJhcnk9Q3J1bicKKyAgICBmaQorICAgIDs7CisgIGVzYWMKKyAgOzsKK2VzYWMKKworCitjYXNlICIgJHBvc3RkZXBzX0NYWCAiIGluCisqIiAtbGMgIiopIGFyY2hpdmVfY21kc19uZWVkX2xjX0NYWD1ubyA7OworZXNhYworIGNvbXBpbGVyX2xpYl9zZWFyY2hfZGlyc19DWFg9CitpZiB0ZXN0IC1uICIke2NvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aF9DWFh9IjsgdGhlbgorIGNvbXBpbGVyX2xpYl9zZWFyY2hfZGlyc19DWFg9YGVjaG8gIiAke2NvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aF9DWFh9IiB8ICR7U0VEfSAtZSAncyEgLUwhICFnJyAtZSAncyFeICEhJ2AKK2ZpCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKyAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWD0KK2x0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0KK2x0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0KKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAiID4mNjsgfQorCisgICMgQysrIHNwZWNpZmljIGNhc2VzIGZvciBwaWMsIHN0YXRpYywgd2wsIGV0Yy4KKyAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KKyAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWD0nLVdsLCcKKyAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9Jy1zdGF0aWMnCisKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgYWl4KikKKyAgICAgICMgQWxsIEFJWCBjb2RlIGlzIFBJQy4KKyAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisJIyBBSVggNSBub3cgc3VwcG9ydHMgSUE2NCBwcm9jZXNzb3IKKwlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9Jy1Cc3RhdGljJworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBhbWlnYW9zKikKKyAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICBwb3dlcnBjKQorICAgICAgICAgICAgIyBzZWUgY29tbWVudCBhYm91dCBBbWlnYU9TNCAuc28gc3VwcG9ydAorICAgICAgICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctZlBJQycKKyAgICAgICAgOzsKKyAgICAgIG02OGspCisgICAgICAgICAgICAjIEZJWE1FOiB3ZSBuZWVkIGF0IGxlYXN0IDY4MDIwIGNvZGUgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcywgYnV0CisgICAgICAgICAgICAjIGFkZGluZyB0aGUgYC1tNjgwMjAnIGZsYWcgdG8gR0NDIHByZXZlbnRzIGJ1aWxkaW5nIGFueXRoaW5nIGJldHRlciwKKyAgICAgICAgICAgICMgbGlrZSBgLW02ODA0MCcuCisgICAgICAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1tNjgwMjAgLXJlc2lkZW50MzIgLW1hbHdheXMtcmVzdG9yZS1hNCcKKyAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICBiZW9zKiB8IGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCogfCBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgdGhlc2UgT1Nlcy4KKyAgICAgIDs7CisgICAgbWluZ3cqIHwgY3lnd2luKiB8IG9zMiogfCBwdzMyKiB8IGNlZ2NjKikKKyAgICAgICMgVGhpcyBoYWNrIGlzIHNvIHRoYXQgdGhlIHNvdXJjZSBmaWxlIGNhbiB0ZWxsIHdoZXRoZXIgaXQgaXMgYmVpbmcKKyAgICAgICMgYnVpbHQgZm9yIGluY2x1c2lvbiBpbiBhIGRsbCAoYW5kIHNob3VsZCBleHBvcnQgc3ltYm9scyBmb3IgZXhhbXBsZSkuCisgICAgICAjIEFsdGhvdWdoIHRoZSBjeWd3aW4gZ2NjIGlnbm9yZXMgLWZQSUMsIHN0aWxsIG5lZWQgdGhpcyBmb3Igb2xkLXN0eWxlCisgICAgICAjICgtLWRpc2FibGUtYXV0by1pbXBvcnQpIGxpYnJhcmllcworICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctRERMTF9FWFBPUlQnCisgICAgICA7OworICAgIGRhcndpbiogfCByaGFwc29keSopCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBvbiB0aGlzIHBsYXRmb3JtCisgICAgICAjIENvbW1vbiBzeW1ib2xzIG5vdCBhbGxvd2VkIGluIE1IX0RZTElCIGZpbGVzCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1mbm8tY29tbW9uJworICAgICAgOzsKKyAgICAqZGpncHAqKQorICAgICAgIyBESkdQUCBkb2VzIG5vdCBzdXBwb3J0IHNoYXJlZCBsaWJyYXJpZXMgYXQgYWxsCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9CisgICAgICA7OworICAgIGludGVyaXhbMy05XSopCisgICAgICAjIEludGVyaXggMy54IGdjYyAtZnBpYy8tZlBJQyBvcHRpb25zIGdlbmVyYXRlIGJyb2tlbiBjb2RlLgorICAgICAgIyBJbnN0ZWFkLCB3ZSByZWxvY2F0ZSBzaGFyZWQgbGlicmFyaWVzIGF0IHJ1bnRpbWUuCisgICAgICA7OworICAgIHN5c3Y0Kk1QKikKKyAgICAgIGlmIHRlc3QgLWQgL3Vzci9uZWM7IHRoZW4KKwlsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9LUtjb25mb3JtX3BpYworICAgICAgZmkKKyAgICAgIDs7CisgICAgaHB1eCopCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgNjQtYml0IFBBIEhQLVVYLCBidXQgbm90IGZvciAzMi1iaXQKKyAgICAgICMgUEEgSFAtVVguICBPbiBJQTY0IEhQLVVYLCBQSUMgaXMgdGhlIGRlZmF1bHQgYnV0IHRoZSBwaWMgZmxhZworICAgICAgIyBzZXRzIHRoZSBkZWZhdWx0IFRMUyBtb2RlbCBhbmQgYWZmZWN0cyBpbmxpbmluZy4KKyAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICBocHBhKjY0KikKKwk7OworICAgICAgKikKKwlsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1mUElDJworCTs7CisgICAgICBlc2FjCisgICAgICA7OworICAgICpxbngqIHwgKm50byopCisgICAgICAjIFFOWCB1c2VzIEdOVSBDKyssIGJ1dCBuZWVkIHRvIGRlZmluZSAtc2hhcmVkIG9wdGlvbiB0b28sIG90aGVyd2lzZQorICAgICAgIyBpdCB3aWxsIGNvcmVkdW1wLgorICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctZlBJQyAtc2hhcmVkJworICAgICAgOzsKKyAgICAqKQorICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctZlBJQycKKyAgICAgIDs7CisgICAgZXNhYworICBlbHNlCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgYWl4WzQtOV0qKQorCSMgQWxsIEFJWCBjb2RlIGlzIFBJQy4KKwlpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorCSAgIyBBSVggNSBub3cgc3VwcG9ydHMgSUE2NCBwcm9jZXNzb3IKKwkgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0nLUJzdGF0aWMnCisJZWxzZQorCSAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSctYm5zbyAtYkk6L2xpYi9zeXNjYWxscy5leHAnCisJZmkKKwk7OworICAgICAgY2hvcnVzKikKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCWN4Y2g2OCopCisJICAjIEdyZWVuIEhpbGxzIEMrKyBDb21waWxlcgorCSAgIyBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCBDWFgpPSItLW5vX2F1dG9faW5zdGFudGlhdGlvbiAtdSBfX21haW4gLXUgX19wcmVtYWluIC11IF9hYm9ydCAtciAkQ09PTF9ESVIvbGliL2xpYk9yYi5hICRNVk1FX0RJUi9saWIvQ0MvbGliQy5hICRNVk1FX0RJUi9saWIvY2xhc3NpeC9saWJjeC5zLmEiCisJICA7OworCWVzYWMKKwk7OworICAgICAgZGd1eCopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIGVjKysqKQorCSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1LUElDJworCSAgICA7OworCSAgZ2hjeCopCisJICAgICMgR3JlZW4gSGlsbHMgQysrIENvbXBpbGVyCisJICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLXBpYycKKwkgICAgOzsKKwkgICopCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICBmcmVlYnNkKiB8IGRyYWdvbmZseSopCisJIyBGcmVlQlNEIHVzZXMgR05VIEMrKworCTs7CisgICAgICBocHV4OSogfCBocHV4MTAqIHwgaHB1eDExKikKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgQ0MqKQorCSAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWD0nLVdsLCcKKwkgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPScke3dsfS1hICR7d2x9YXJjaGl2ZScKKwkgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiAhPSBpYTY0OyB0aGVuCisJICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPScrWicKKwkgICAgZmkKKwkgICAgOzsKKwkgIGFDQyopCisJICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYPSctV2wsJworCSAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9JyR7d2x9LWEgJHt3bH1hcmNoaXZlJworCSAgICBjYXNlICRob3N0X2NwdSBpbgorCSAgICBocHBhKjY0KnxpYTY0KikKKwkgICAgICAjICtaIHRoZSBkZWZhdWx0CisJICAgICAgOzsKKwkgICAgKikKKwkgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9JytaJworCSAgICAgIDs7CisJICAgIGVzYWMKKwkgICAgOzsKKwkgICopCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICBpbnRlcml4KikKKwkjIFRoaXMgaXMgYzg5LCB3aGljaCBpcyBNUyBWaXN1YWwgQysrIChubyBzaGFyZWQgbGlicykKKwkjIEFueW9uZSB3YW50cyB0byBkbyBhIHBvcnQ/CisJOzsKKyAgICAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIENDKikKKwkgICAgbHRfcHJvZ19jb21waWxlcl93bF9DWFg9Jy1XbCwnCisJICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0nLW5vbl9zaGFyZWQnCisJICAgICMgQ0MgcGljIGZsYWcgLUtQSUMgaXMgdGhlIGRlZmF1bHQuCisJICAgIDs7CisJICAqKQorCSAgICA7OworCWVzYWMKKwk7OworICAgICAgbGludXgqIHwgaypic2QqLWdudSB8IGtvcGVuc29sYXJpcyotZ251KQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBLQ0MqKQorCSAgICAjIEtBSSBDKysgQ29tcGlsZXIKKwkgICAgbHRfcHJvZ19jb21waWxlcl93bF9DWFg9Jy0tYmFja2VuZCAtV2wsJworCSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1mUElDJworCSAgICA7OworCSAgZWNwYyogKQorCSAgICAjIG9sZCBJbnRlbCBDKysgZm9yIHg4Nl82NCB3aGljaCBzdGlsbCBzdXBwb3J0ZWQgLUtQSUMuCisJICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYPSctV2wsJworCSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1LUElDJworCSAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9Jy1zdGF0aWMnCisJICAgIDs7CisJICBpY3BjKiApCisJICAgICMgSW50ZWwgQysrLCB1c2VkIHRvIGJlIGluY29tcGF0aWJsZSB3aXRoIEdDQy4KKwkgICAgIyBJQ0MgMTAgZG9lc24ndCBhY2NlcHQgLUtQSUMgYW55IG1vcmUuCisJICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYPSctV2wsJworCSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1mUElDJworCSAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9Jy1zdGF0aWMnCisJICAgIDs7CisJICBwZ0NDKiB8IHBnY3BwKikKKwkgICAgIyBQb3J0bGFuZCBHcm91cCBDKysgY29tcGlsZXIKKwkgICAgbHRfcHJvZ19jb21waWxlcl93bF9DWFg9Jy1XbCwnCisJICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLWZwaWMnCisJICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0nLUJzdGF0aWMnCisJICAgIDs7CisJICBjeHgqKQorCSAgICAjIENvbXBhcSBDKysKKwkgICAgIyBNYWtlIHN1cmUgdGhlIFBJQyBmbGFnIGlzIGVtcHR5LiAgSXQgYXBwZWFycyB0aGF0IGFsbCBBbHBoYQorCSAgICAjIExpbnV4IGFuZCBDb21wYXEgVHJ1NjQgVW5peCBvYmplY3RzIGFyZSBQSUMuCisJICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0KKwkgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSctbm9uX3NoYXJlZCcKKwkgICAgOzsKKwkgIHhsYyogfCB4bEMqKQorCSAgICAjIElCTSBYTCA4LjAgb24gUFBDCisJICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYPSctV2wsJworCSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1xcGljJworCSAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9Jy1xc3RhdGljbGluaycKKwkgICAgOzsKKwkgICopCisJICAgIGNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgorCSAgICAqU3VuXCBDKikKKwkgICAgICAjIFN1biBDKysgNS45CisJICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctS1BJQycKKwkgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9Jy1Cc3RhdGljJworCSAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYPSctUW9wdGlvbiBsZCAnCisJICAgICAgOzsKKwkgICAgZXNhYworCSAgICA7OworCWVzYWMKKwk7OworICAgICAgbHlueG9zKikKKwk7OworICAgICAgbTg4ayopCisJOzsKKyAgICAgIG12cyopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIGN4eCopCisJICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLVcgYyxleHBvcnRhbGwnCisJICAgIDs7CisJICAqKQorCSAgICA7OworCWVzYWMKKwk7OworICAgICAgbmV0YnNkKiB8IG5ldGJzZGVsZiotZ251KQorCTs7CisgICAgICAqcW54KiB8ICpudG8qKQorICAgICAgICAjIFFOWCB1c2VzIEdOVSBDKyssIGJ1dCBuZWVkIHRvIGRlZmluZSAtc2hhcmVkIG9wdGlvbiB0b28sIG90aGVyd2lzZQorICAgICAgICAjIGl0IHdpbGwgY29yZWR1bXAuCisgICAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLWZQSUMgLXNoYXJlZCcKKyAgICAgICAgOzsKKyAgICAgIG9zZjMqIHwgb3NmNCogfCBvc2Y1KikKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgS0NDKikKKwkgICAgbHRfcHJvZ19jb21waWxlcl93bF9DWFg9Jy0tYmFja2VuZCAtV2wsJworCSAgICA7OworCSAgUkNDKikKKwkgICAgIyBSYXRpb25hbCBDKysgMi40LjEKKwkgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctcGljJworCSAgICA7OworCSAgY3h4KikKKwkgICAgIyBEaWdpdGFsL0NvbXBhcSBDKysKKwkgICAgbHRfcHJvZ19jb21waWxlcl93bF9DWFg9Jy1XbCwnCisJICAgICMgTWFrZSBzdXJlIHRoZSBQSUMgZmxhZyBpcyBlbXB0eS4gIEl0IGFwcGVhcnMgdGhhdCBhbGwgQWxwaGEKKwkgICAgIyBMaW51eCBhbmQgQ29tcGFxIFRydTY0IFVuaXggb2JqZWN0cyBhcmUgUElDLgorCSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9CisJICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0nLW5vbl9zaGFyZWQnCisJICAgIDs7CisJICAqKQorCSAgICA7OworCWVzYWMKKwk7OworICAgICAgcHNvcyopCisJOzsKKyAgICAgIHNvbGFyaXMqKQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBDQyopCisJICAgICMgU3VuIEMrKyA0LjIsIDUueCBhbmQgQ2VudGVybGluZSBDKysKKwkgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctS1BJQycKKwkgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSctQnN0YXRpYycKKwkgICAgbHRfcHJvZ19jb21waWxlcl93bF9DWFg9Jy1Rb3B0aW9uIGxkICcKKwkgICAgOzsKKwkgIGdjeCopCisJICAgICMgR3JlZW4gSGlsbHMgQysrIENvbXBpbGVyCisJICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLVBJQycKKwkgICAgOzsKKwkgICopCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICBzdW5vczQqKQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBDQyopCisJICAgICMgU3VuIEMrKyA0LngKKwkgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctcGljJworCSAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9Jy1Cc3RhdGljJworCSAgICA7OworCSAgbGNjKikKKwkgICAgIyBMdWNpZAorCSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1waWMnCisJICAgIDs7CisJICAqKQorCSAgICA7OworCWVzYWMKKwk7OworICAgICAgc3lzdjUqIHwgdW5peHdhcmUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IE9wZW5VTklYKikKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgQ0MqKQorCSAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWD0nLVdsLCcKKwkgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctS1BJQycKKwkgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSctQnN0YXRpYycKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgIHRhbmRlbSopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIE5DQyopCisJICAgICMgTm9uU3RvcC1VWCBOQ0MgMy4yMAorCSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1LUElDJworCSAgICA7OworCSAgKikKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgIHZ4d29ya3MqKQorCTs7CisgICAgICAqKQorCWx0X3Byb2dfY29tcGlsZXJfY2FuX2J1aWxkX3NoYXJlZF9DWFg9bm8KKwk7OworICAgIGVzYWMKKyAgZmkKKworY2FzZSAkaG9zdF9vcyBpbgorICAjIEZvciBwbGF0Zm9ybXMgd2hpY2ggZG8gbm90IHN1cHBvcnQgUElDLCAtRFBJQyBpcyBtZWFuaW5nbGVzczoKKyAgKmRqZ3BwKikKKyAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9CisgICAgOzsKKyAgKikKKyAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9IiRsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFggLURQSUMiCisgICAgOzsKK2VzYWMKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYIiA+JjUKKyRhc19lY2hvICIkbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYIiA+JjY7IH0KKworCisKKyMKKyMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBQSUMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KKyMKK2lmIHRlc3QgLW4gIiRsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFgiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgJGNvbXBpbGVyIFBJQyBmbGFnICRsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFggd29ya3MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgJGNvbXBpbGVyIFBJQyBmbGFnICRsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFggd29ya3MuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7bHRfY3ZfcHJvZ19jb21waWxlcl9waWNfd29ya3NfQ1hYK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbHRfY3ZfcHJvZ19jb21waWxlcl9waWNfd29ya3NfQ1hYPW5vCisgICBhY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKKyAgIGVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAorICAgbHRfY29tcGlsZXJfZmxhZz0iJGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWCAtRFBJQyIKKyAgICMgSW5zZXJ0IHRoZSBvcHRpb24gZWl0aGVyICgxKSBhZnRlciB0aGUgbGFzdCAqRkxBR1MgdmFyaWFibGUsIG9yCisgICAjICgyKSBiZWZvcmUgYSB3b3JkIGNvbnRhaW5pbmcgImNvbmZ0ZXN0LiIsIG9yICgzKSBhdCB0aGUgZW5kLgorICAgIyBOb3RlIHRoYXQgJGFjX2NvbXBpbGUgaXRzZWxmIGRvZXMgbm90IGNvbnRhaW4gYmFja3NsYXNoZXMgYW5kIGJlZ2lucworICAgIyB3aXRoIGEgZG9sbGFyIHNpZ24gKG5vdCBhIGh5cGhlbiksIHNvIHRoZSBlY2hvIHNob3VsZCB3b3JrIGNvcnJlY3RseS4KKyAgICMgVGhlIG9wdGlvbiBpcyByZWZlcmVuY2VkIHZpYSBhIHZhcmlhYmxlIHRvIGF2b2lkIGNvbmZ1c2luZyBzZWQuCisgICBsdF9jb21waWxlPWBlY2hvICIkYWNfY29tcGlsZSIgfCAkU0VEIFwKKyAgIC1lICdzOi4qRkxBR1N9XHswLDFcfSA6JiRsdF9jb21waWxlcl9mbGFnIDo7IHQnIFwKKyAgIC1lICdzOiBbXiBdKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKKyAgIC1lICdzOiQ6ICRsdF9jb21waWxlcl9mbGFnOidgCisgICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6MTQ1MDc6ICRsdF9jb21waWxlXCIiID4mNSkKKyAgIChldmFsICIkbHRfY29tcGlsZSIgMj5jb25mdGVzdC5lcnIpCisgICBhY19zdGF0dXM9JD8KKyAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6MTQ1MTE6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgaWYgKGV4aXQgJGFjX3N0YXR1cykgJiYgdGVzdCAtcyAiJGFjX291dGZpbGUiOyB0aGVuCisgICAgICMgVGhlIGNvbXBpbGVyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCisgICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncyBvdGhlciB0aGFuIHRoZSB1c3VhbCBvdXRwdXQuCisgICAgICRFQ0hPICJYJF9sdF9jb21waWxlcl9ib2lsZXJwbGF0ZSIgfCAkWHNlZCAtZSAnL14kL2QnID5jb25mdGVzdC5leHAKKyAgICAgJFNFRCAnL14kL2Q7IC9eICorL2QnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIyCisgICAgIGlmIHRlc3QgISAtcyBjb25mdGVzdC5lcjIgfHwgZGlmZiBjb25mdGVzdC5leHAgY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KKyAgICAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY193b3Jrc19DWFg9eWVzCisgICAgIGZpCisgICBmaQorICAgJFJNIGNvbmZ0ZXN0KgorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY193b3Jrc19DWFgiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY193b3Jrc19DWFgiID4mNjsgfQorCitpZiB0ZXN0IHgiJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzX0NYWCIgPSB4eWVzOyB0aGVuCisgICAgY2FzZSAkbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYIGluCisgICAgICIiIHwgIiAiKikgOzsKKyAgICAgKikgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSIgJGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWCIgOzsKKyAgICAgZXNhYworZWxzZQorICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0KKyAgICAgbHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkX0NYWD1ubworZmkKKworZmkKKworCisKKyMKKyMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBzdGF0aWMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KKyMKK3dsPSRsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWCBldmFsIGx0X3RtcF9zdGF0aWNfZmxhZz1cIiRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFhcIgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiAkY29tcGlsZXIgc3RhdGljIGZsYWcgJGx0X3RtcF9zdGF0aWNfZmxhZyB3b3JrcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiAkY29tcGlsZXIgc3RhdGljIGZsYWcgJGx0X3RtcF9zdGF0aWNfZmxhZyB3b3Jrcy4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHtsdF9jdl9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrc19DWFgrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBsdF9jdl9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrc19DWFg9bm8KKyAgIHNhdmVfTERGTEFHUz0iJExERkxBR1MiCisgICBMREZMQUdTPSIkTERGTEFHUyAkbHRfdG1wX3N0YXRpY19mbGFnIgorICAgZWNobyAiJGx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CisgICBpZiAoZXZhbCAkYWNfbGluayAyPmNvbmZ0ZXN0LmVycikgJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KKyAgICAgIyBUaGUgbGlua2VyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCisgICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncworICAgICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgICAgICMgQXBwZW5kIGFueSBlcnJvcnMgdG8gdGhlIGNvbmZpZy5sb2cuCisgICAgICAgY2F0IGNvbmZ0ZXN0LmVyciAxPiY1CisgICAgICAgJEVDSE8gIlgkX2x0X2xpbmtlcl9ib2lsZXJwbGF0ZSIgfCAkWHNlZCAtZSAnL14kL2QnID4gY29uZnRlc3QuZXhwCisgICAgICAgJFNFRCAnL14kL2Q7IC9eICorL2QnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIyCisgICAgICAgaWYgZGlmZiBjb25mdGVzdC5leHAgY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KKyAgICAgICAgIGx0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzX0NYWD15ZXMKKyAgICAgICBmaQorICAgICBlbHNlCisgICAgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3NfQ1hYPXllcworICAgICBmaQorICAgZmkKKyAgICRSTSAtciBjb25mdGVzdCoKKyAgIExERkxBR1M9IiRzYXZlX0xERkxBR1MiCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzX0NYWCIgPiY1CiskYXNfZWNobyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzX0NYWCIgPiY2OyB9CisKK2lmIHRlc3QgeCIkbHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3NfQ1hYIiA9IHh5ZXM7IHRoZW4KKyAgICA6CitlbHNlCisgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPQorZmkKKworCisKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1jIC1vIGZpbGUuJGFjX29iamV4dCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWMgLW8gZmlsZS4kYWNfb2JqZXh0Li4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2x0X2N2X3Byb2dfY29tcGlsZXJfY19vX0NYWCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0NYWD1ubworICAgJFJNIC1yIGNvbmZ0ZXN0IDI+L2Rldi9udWxsCisgICBta2RpciBjb25mdGVzdAorICAgY2QgY29uZnRlc3QKKyAgIG1rZGlyIG91dAorICAgZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CisKKyAgIGx0X2NvbXBpbGVyX2ZsYWc9Ii1vIG91dC9jb25mdGVzdDIuJGFjX29iamV4dCIKKyAgICMgSW5zZXJ0IHRoZSBvcHRpb24gZWl0aGVyICgxKSBhZnRlciB0aGUgbGFzdCAqRkxBR1MgdmFyaWFibGUsIG9yCisgICAjICgyKSBiZWZvcmUgYSB3b3JkIGNvbnRhaW5pbmcgImNvbmZ0ZXN0LiIsIG9yICgzKSBhdCB0aGUgZW5kLgorICAgIyBOb3RlIHRoYXQgJGFjX2NvbXBpbGUgaXRzZWxmIGRvZXMgbm90IGNvbnRhaW4gYmFja3NsYXNoZXMgYW5kIGJlZ2lucworICAgIyB3aXRoIGEgZG9sbGFyIHNpZ24gKG5vdCBhIGh5cGhlbiksIHNvIHRoZSBlY2hvIHNob3VsZCB3b3JrIGNvcnJlY3RseS4KKyAgIGx0X2NvbXBpbGU9YGVjaG8gIiRhY19jb21waWxlIiB8ICRTRUQgXAorICAgLWUgJ3M6LipGTEFHU31cezAsMVx9IDomJGx0X2NvbXBpbGVyX2ZsYWcgOjsgdCcgXAorICAgLWUgJ3M6IFteIF0qY29uZnRlc3RcLjogJGx0X2NvbXBpbGVyX2ZsYWcmOjsgdCcgXAorICAgLWUgJ3M6JDogJGx0X2NvbXBpbGVyX2ZsYWc6J2AKKyAgIChldmFsIGVjaG8gIlwiXCRhc19tZToxNDYwNjogJGx0X2NvbXBpbGVcIiIgPiY1KQorICAgKGV2YWwgIiRsdF9jb21waWxlIiAyPm91dC9jb25mdGVzdC5lcnIpCisgICBhY19zdGF0dXM9JD8KKyAgIGNhdCBvdXQvY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOjE0NjEwOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIGlmIChleGl0ICRhY19zdGF0dXMpICYmIHRlc3QgLXMgb3V0L2NvbmZ0ZXN0Mi4kYWNfb2JqZXh0CisgICB0aGVuCisgICAgICMgVGhlIGNvbXBpbGVyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCisgICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncworICAgICAkRUNITyAiWCRfbHRfY29tcGlsZXJfYm9pbGVycGxhdGUiIHwgJFhzZWQgLWUgJy9eJC9kJyA+IG91dC9jb25mdGVzdC5leHAKKyAgICAgJFNFRCAnL14kL2Q7IC9eICorL2QnIG91dC9jb25mdGVzdC5lcnIgPm91dC9jb25mdGVzdC5lcjIKKyAgICAgaWYgdGVzdCAhIC1zIG91dC9jb25mdGVzdC5lcjIgfHwgZGlmZiBvdXQvY29uZnRlc3QuZXhwIG91dC9jb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgIGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0NYWD15ZXMKKyAgICAgZmkKKyAgIGZpCisgICBjaG1vZCB1K3cgLiAyPiY1CisgICAkUk0gY29uZnRlc3QqCisgICAjIFNHSSBDKysgY29tcGlsZXIgd2lsbCBjcmVhdGUgZGlyZWN0b3J5IG91dC9paV9maWxlcy8gZm9yCisgICAjIHRlbXBsYXRlIGluc3RhbnRpYXRpb24KKyAgIHRlc3QgLWQgb3V0L2lpX2ZpbGVzICYmICRSTSBvdXQvaWlfZmlsZXMvKiAmJiBybWRpciBvdXQvaWlfZmlsZXMKKyAgICRSTSBvdXQvKiAmJiBybWRpciBvdXQKKyAgIGNkIC4uCisgICAkUk0gLXIgY29uZnRlc3QKKyAgICRSTSBjb25mdGVzdCoKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fQ1hYIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fQ1hYIiA+JjY7IH0KKworCisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmICRjb21waWxlciBzdXBwb3J0cyAtYyAtbyBmaWxlLiRhY19vYmpleHQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1jIC1vIGZpbGUuJGFjX29iamV4dC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHtsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19DWFgrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19DWFg9bm8KKyAgICRSTSAtciBjb25mdGVzdCAyPi9kZXYvbnVsbAorICAgbWtkaXIgY29uZnRlc3QKKyAgIGNkIGNvbmZ0ZXN0CisgICBta2RpciBvdXQKKyAgIGVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAorCisgICBsdF9jb21waWxlcl9mbGFnPSItbyBvdXQvY29uZnRlc3QyLiRhY19vYmpleHQiCisgICAjIEluc2VydCB0aGUgb3B0aW9uIGVpdGhlciAoMSkgYWZ0ZXIgdGhlIGxhc3QgKkZMQUdTIHZhcmlhYmxlLCBvcgorICAgIyAoMikgYmVmb3JlIGEgd29yZCBjb250YWluaW5nICJjb25mdGVzdC4iLCBvciAoMykgYXQgdGhlIGVuZC4KKyAgICMgTm90ZSB0aGF0ICRhY19jb21waWxlIGl0c2VsZiBkb2VzIG5vdCBjb250YWluIGJhY2tzbGFzaGVzIGFuZCBiZWdpbnMKKyAgICMgd2l0aCBhIGRvbGxhciBzaWduIChub3QgYSBoeXBoZW4pLCBzbyB0aGUgZWNobyBzaG91bGQgd29yayBjb3JyZWN0bHkuCisgICBsdF9jb21waWxlPWBlY2hvICIkYWNfY29tcGlsZSIgfCAkU0VEIFwKKyAgIC1lICdzOi4qRkxBR1N9XHswLDFcfSA6JiRsdF9jb21waWxlcl9mbGFnIDo7IHQnIFwKKyAgIC1lICdzOiBbXiBdKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKKyAgIC1lICdzOiQ6ICRsdF9jb21waWxlcl9mbGFnOidgCisgICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6MTQ2NTg6ICRsdF9jb21waWxlXCIiID4mNSkKKyAgIChldmFsICIkbHRfY29tcGlsZSIgMj5vdXQvY29uZnRlc3QuZXJyKQorICAgYWNfc3RhdHVzPSQ/CisgICBjYXQgb3V0L2NvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZToxNDY2MjogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICBpZiAoZXhpdCAkYWNfc3RhdHVzKSAmJiB0ZXN0IC1zIG91dC9jb25mdGVzdDIuJGFjX29iamV4dAorICAgdGhlbgorICAgICAjIFRoZSBjb21waWxlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAorICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3MKKyAgICAgJEVDSE8gIlgkX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlIiB8ICRYc2VkIC1lICcvXiQvZCcgPiBvdXQvY29uZnRlc3QuZXhwCisgICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBvdXQvY29uZnRlc3QuZXJyID5vdXQvY29uZnRlc3QuZXIyCisgICAgIGlmIHRlc3QgISAtcyBvdXQvY29uZnRlc3QuZXIyIHx8IGRpZmYgb3V0L2NvbmZ0ZXN0LmV4cCBvdXQvY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KKyAgICAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19DWFg9eWVzCisgICAgIGZpCisgICBmaQorICAgY2htb2QgdSt3IC4gMj4mNQorICAgJFJNIGNvbmZ0ZXN0KgorICAgIyBTR0kgQysrIGNvbXBpbGVyIHdpbGwgY3JlYXRlIGRpcmVjdG9yeSBvdXQvaWlfZmlsZXMvIGZvcgorICAgIyB0ZW1wbGF0ZSBpbnN0YW50aWF0aW9uCisgICB0ZXN0IC1kIG91dC9paV9maWxlcyAmJiAkUk0gb3V0L2lpX2ZpbGVzLyogJiYgcm1kaXIgb3V0L2lpX2ZpbGVzCisgICAkUk0gb3V0LyogJiYgcm1kaXIgb3V0CisgICBjZCAuLgorICAgJFJNIC1yIGNvbmZ0ZXN0CisgICAkUk0gY29uZnRlc3QqCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0NYWCIgPiY1CiskYXNfZWNobyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0NYWCIgPiY2OyB9CisKKworCisKK2hhcmRfbGlua3M9Im5vdHRlc3RlZCIKK2lmIHRlc3QgIiRsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19DWFgiID0gbm8gJiYgdGVzdCAiJG5lZWRfbG9ja3MiICE9IG5vOyB0aGVuCisgICMgZG8gbm90IG92ZXJ3cml0ZSB0aGUgdmFsdWUgb2YgbmVlZF9sb2NrcyBwcm92aWRlZCBieSB0aGUgdXNlcgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIHdlIGNhbiBsb2NrIHdpdGggaGFyZCBsaW5rcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiB3ZSBjYW4gbG9jayB3aXRoIGhhcmQgbGlua3MuLi4gIiA+JjY7IH0KKyAgaGFyZF9saW5rcz15ZXMKKyAgJFJNIGNvbmZ0ZXN0KgorICBsbiBjb25mdGVzdC5hIGNvbmZ0ZXN0LmIgMj4vZGV2L251bGwgJiYgaGFyZF9saW5rcz1ubworICB0b3VjaCBjb25mdGVzdC5hCisgIGxuIGNvbmZ0ZXN0LmEgY29uZnRlc3QuYiAyPiY1IHx8IGhhcmRfbGlua3M9bm8KKyAgbG4gY29uZnRlc3QuYSBjb25mdGVzdC5iIDI+L2Rldi9udWxsICYmIGhhcmRfbGlua3M9bm8KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRoYXJkX2xpbmtzIiA+JjUKKyRhc19lY2hvICIkaGFyZF9saW5rcyIgPiY2OyB9CisgIGlmIHRlc3QgIiRoYXJkX2xpbmtzIiA9IG5vOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBcYCRDQycgZG9lcyBub3Qgc3VwcG9ydCBcYC1jIC1vJywgc28gXGBtYWtlIC1qJyBtYXkgYmUgdW5zYWZlIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IFxgJENDJyBkb2VzIG5vdCBzdXBwb3J0IFxgLWMgLW8nLCBzbyBcYG1ha2UgLWonIG1heSBiZSB1bnNhZmUiID4mMjt9CisgICAgbmVlZF9sb2Nrcz13YXJuCisgIGZpCitlbHNlCisgIG5lZWRfbG9ja3M9bm8KK2ZpCisKKworCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRoZSAkY29tcGlsZXIgbGlua2VyICgkTEQpIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgJGNvbXBpbGVyIGxpbmtlciAoJExEKSBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzLi4uICIgPiY2OyB9CisKKyAgZXhwb3J0X3N5bWJvbHNfY21kc19DWFg9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAnXCcncy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKyAgY2FzZSAkaG9zdF9vcyBpbgorICBhaXhbNC05XSopCisgICAgIyBJZiB3ZSdyZSB1c2luZyBHTlUgbm0sIHRoZW4gd2UgZG9uJ3Qgd2FudCB0aGUgIi1DIiBvcHRpb24uCisgICAgIyAtQyBtZWFucyBkZW1hbmdsZSB0byBBSVggbm0sIGJ1dCBtZWFucyBkb24ndCBkZW1hbmdsZSB3aXRoIEdOVSBubQorICAgIGlmICROTSAtViAyPiYxIHwgJEdSRVAgJ0dOVScgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgIGV4cG9ydF9zeW1ib2xzX2NtZHNfQ1hYPSckTk0gLUJwZyAkbGlib2JqcyAkY29udmVuaWVuY2UgfCBhd2sgJ1wnJ3sgaWYgKCgoXCQgMiA9PSAiVCIpIHx8IChcJCAyID09ICJEIikgfHwgKFwkIDIgPT0gIkIiKSkgJiYgKHN1YnN0cihcJCAzLDEsMSkgIT0gIi4iKSkgeyBwcmludCBcJCAzIH0gfSdcJycgfCBzb3J0IC11ID4gJGV4cG9ydF9zeW1ib2xzJworICAgIGVsc2UKKyAgICAgIGV4cG9ydF9zeW1ib2xzX2NtZHNfQ1hYPSckTk0gLUJDcGcgJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgYXdrICdcJyd7IGlmICgoKFwkIDIgPT0gIlQiKSB8fCAoXCQgMiA9PSAiRCIpIHx8IChcJCAyID09ICJCIikpICYmIChzdWJzdHIoXCQgMywxLDEpICE9ICIuIikpIHsgcHJpbnQgXCQgMyB9IH0nXCcnIHwgc29ydCAtdSA+ICRleHBvcnRfc3ltYm9scycKKyAgICBmaQorICAgIDs7CisgIHB3MzIqKQorICAgIGV4cG9ydF9zeW1ib2xzX2NtZHNfQ1hYPSIkbHRkbGxfY21kcyIKKyAgOzsKKyAgY3lnd2luKiB8IG1pbmd3KiB8IGNlZ2NjKikKKyAgICBleHBvcnRfc3ltYm9sc19jbWRzX0NYWD0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltCQ0RHUlNdWyBdL3MvLipbIF1cKFteIF0qXCkvXDEgREFUQS87L14uKlsgXV9fbm1fXy9zL14uKlsgXV9fbm1fX1woW14gXSpcKVsgXVteIF0qL1wxIERBVEEvOy9eSVsgXS9kOy9eW0FJVFddWyBdL3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisgIDs7CisgIGxpbnV4KiB8IGsqYnNkKi1nbnUpCisgICAgbGlua19hbGxfZGVwbGlic19DWFg9bm8KKyAgOzsKKyAgKikKKyAgICBleHBvcnRfc3ltYm9sc19jbWRzX0NYWD0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEICdcJydzLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworICA7OworICBlc2FjCisgIGV4Y2x1ZGVfZXhwc3ltc19DWFg9J19HTE9CQUxfT0ZGU0VUX1RBQkxFX3xfR0xPQkFMX19GW0lEXV8uKicKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsZF9zaGxpYnNfQ1hYIiA+JjUKKyRhc19lY2hvICIkbGRfc2hsaWJzX0NYWCIgPiY2OyB9Cit0ZXN0ICIkbGRfc2hsaWJzX0NYWCIgPSBubyAmJiBjYW5fYnVpbGRfc2hhcmVkPW5vCisKK3dpdGhfZ251X2xkX0NYWD0kd2l0aF9nbnVfbGQKKworCisKKworCisKKyMKKyMgRG8gd2UgbmVlZCB0byBleHBsaWNpdGx5IGxpbmsgbGliYz8KKyMKK2Nhc2UgIngkYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYIiBpbgoreHx4eWVzKQorICAjIEFzc3VtZSAtbGMgc2hvdWxkIGJlIGFkZGVkCisgIGFyY2hpdmVfY21kc19uZWVkX2xjX0NYWD15ZXMKKworICBpZiB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgJiYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICBjYXNlICRhcmNoaXZlX2NtZHNfQ1hYIGluCisgICAgKid+JyopCisgICAgICAjIEZJWE1FOiB3ZSBtYXkgaGF2ZSB0byBkZWFsIHdpdGggbXVsdGktY29tbWFuZCBzZXF1ZW5jZXMuCisgICAgICA7OworICAgICckQ0MgJyopCisgICAgICAjIFRlc3Qgd2hldGhlciB0aGUgY29tcGlsZXIgaW1wbGljaXRseSBsaW5rcyB3aXRoIC1sYyBzaW5jZSBvbiBzb21lCisgICAgICAjIHN5c3RlbXMsIC1sZ2NjIGhhcyB0byBjb21lIGJlZm9yZSAtbGMuIElmIGdjYyBhbHJlYWR5IHBhc3NlcyAtbGMKKyAgICAgICMgdG8gbGQsIGRvbid0IGFkZCAtbGMgYmVmb3JlIC1sZ2NjLgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIC1sYyBzaG91bGQgYmUgZXhwbGljaXRseSBsaW5rZWQgaW4iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAtbGMgc2hvdWxkIGJlIGV4cGxpY2l0bHkgbGlua2VkIGluLi4uICIgPiY2OyB9CisgICAgICAkUk0gY29uZnRlc3QqCisgICAgICBlY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKKworICAgICAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2NvbXBpbGVcIiI7IH0gPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSAyPmNvbmZ0ZXN0LmVycjsgdGhlbgorICAgICAgICBzb25hbWU9Y29uZnRlc3QKKyAgICAgICAgbGliPWNvbmZ0ZXN0CisgICAgICAgIGxpYm9ianM9Y29uZnRlc3QuJGFjX29iamV4dAorICAgICAgICBkZXBsaWJzPQorICAgICAgICB3bD0kbHRfcHJvZ19jb21waWxlcl93bF9DWFgKKwlwaWNfZmxhZz0kbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYCisgICAgICAgIGNvbXBpbGVyX2ZsYWdzPS12CisgICAgICAgIGxpbmtlcl9mbGFncz0tdgorICAgICAgICB2ZXJzdHJpbmc9CisgICAgICAgIG91dHB1dF9vYmpkaXI9LgorICAgICAgICBsaWJuYW1lPWNvbmZ0ZXN0CisgICAgICAgIGx0X3NhdmVfYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JGFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWAorICAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZ19DWFg9CisgICAgICAgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhcmNoaXZlX2NtZHNfQ1hYIDJcPlwmMSBcfCAkR1JFUCBcIiAtbGMgXCIgXD4vZGV2L251bGwgMlw+XCYxXCIiOyB9ID4mNQorICAoZXZhbCAkYXJjaGl2ZV9jbWRzX0NYWCAyXD5cJjEgXHwgJEdSRVAgXCIgLWxjIFwiIFw+L2Rldi9udWxsIDJcPlwmMSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0KKyAgICAgICAgdGhlbgorCSAgYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYPW5vCisgICAgICAgIGVsc2UKKwkgIGFyY2hpdmVfY21kc19uZWVkX2xjX0NYWD15ZXMKKyAgICAgICAgZmkKKyAgICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPSRsdF9zYXZlX2FsbG93X3VuZGVmaW5lZF9mbGFnCisgICAgICBlbHNlCisgICAgICAgIGNhdCBjb25mdGVzdC5lcnIgMT4mNQorICAgICAgZmkKKyAgICAgICRSTSBjb25mdGVzdCoKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYIiA+JjUKKyRhc19lY2hvICIkYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYIiA+JjY7IH0KKyAgICAgIDs7CisgICAgZXNhYworICBmaQorICA7OworZXNhYworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBkeW5hbWljIGxpbmtlciBjaGFyYWN0ZXJpc3RpY3MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZHluYW1pYyBsaW5rZXIgY2hhcmFjdGVyaXN0aWNzLi4uICIgPiY2OyB9CisKK2xpYnJhcnlfbmFtZXNfc3BlYz0KK2xpYm5hbWVfc3BlYz0nbGliJG5hbWUnCitzb25hbWVfc3BlYz0KK3NocmV4dF9jbWRzPSIuc28iCitwb3N0aW5zdGFsbF9jbWRzPQorcG9zdHVuaW5zdGFsbF9jbWRzPQorZmluaXNoX2NtZHM9CitmaW5pc2hfZXZhbD0KK3NobGlicGF0aF92YXI9CitzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9dW5rbm93bgordmVyc2lvbl90eXBlPW5vbmUKK2R5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBsZC5zbyIKK3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvbGliIC91c3IvbGliIgorbmVlZF9saWJfcHJlZml4PXVua25vd24KK2hhcmRjb2RlX2ludG9fbGlicz1ubworCisjIHdoZW4geW91IHNldCBuZWVkX3ZlcnNpb24gdG8gbm8sIG1ha2Ugc3VyZSBpdCBkb2VzIG5vdCBjYXVzZSAtc2V0X3ZlcnNpb24KKyMgZmxhZ3MgdG8gYmUgbGVmdCB3aXRob3V0IGFyZ3VtZW50cworbmVlZF92ZXJzaW9uPXVua25vd24KKworY2FzZSAkaG9zdF9vcyBpbgorYWl4MyopCisgIHZlcnNpb25fdHlwZT1saW51eAorICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJGxpYm5hbWUuYScKKyAgc2hsaWJwYXRoX3Zhcj1MSUJQQVRICisKKyAgIyBBSVggMyBoYXMgbm8gdmVyc2lvbmluZyBzdXBwb3J0LCBzbyB3ZSBhcHBlbmQgYSBtYWpvciB2ZXJzaW9uIHRvIHRoZSBuYW1lLgorICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICA7OworCithaXhbNC05XSopCisgIHZlcnNpb25fdHlwZT1saW51eAorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKyAgICAjIEFJWCA1IHN1cHBvcnRzIElBNjQKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBlbHNlCisgICAgIyBXaXRoIEdDQyB1cCB0byAyLjk1LngsIGNvbGxlY3QyIHdvdWxkIGNyZWF0ZSBhbiBpbXBvcnQgZmlsZQorICAgICMgZm9yIGRlcGVuZGVuY2UgbGlicmFyaWVzLiAgVGhlIGltcG9ydCBmaWxlIHdvdWxkIHN0YXJ0IHdpdGgKKyAgICAjIHRoZSBsaW5lIGAjISAuJy4gIFRoaXMgd291bGQgY2F1c2UgdGhlIGdlbmVyYXRlZCBsaWJyYXJ5IHRvCisgICAgIyBkZXBlbmQgb24gYC4nLCBhbHdheXMgYW4gaW52YWxpZCBsaWJyYXJ5LiAgVGhpcyB3YXMgZml4ZWQgaW4KKyAgICAjIGRldmVsb3BtZW50IHNuYXBzaG90cyBvZiBHQ0MgcHJpb3IgdG8gMy4wLgorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIGFpeDQgfCBhaXg0LlswMV0gfCBhaXg0LlswMV0uKikKKyAgICAgIGlmIHsgZWNobyAnI2lmIF9fR05VQ19fID4gMiB8fCAoX19HTlVDX18gPT0gMiAmJiBfX0dOVUNfTUlOT1JfXyA+PSA5NyknCisJICAgZWNobyAnIHllcyAnCisJICAgZWNobyAnI2VuZGlmJzsgfSB8ICR7Q0N9IC1FIC0gfCAkR1JFUCB5ZXMgPiAvZGV2L251bGw7IHRoZW4KKwk6CisgICAgICBlbHNlCisJY2FuX2J1aWxkX3NoYXJlZD1ubworICAgICAgZmkKKyAgICAgIDs7CisgICAgZXNhYworICAgICMgQUlYIChvbiBQb3dlciopIGhhcyBubyB2ZXJzaW9uaW5nIHN1cHBvcnQsIHNvIGN1cnJlbnRseSB3ZSBjYW4gbm90IGhhcmRjb2RlIGNvcnJlY3QKKyAgICAjIHNvbmFtZSBpbnRvIGV4ZWN1dGFibGUuIFByb2JhYmx5IHdlIGNhbiBhZGQgdmVyc2lvbmluZyBzdXBwb3J0IHRvCisgICAgIyBjb2xsZWN0Miwgc28gYWRkaXRpb25hbCBsaW5rcyBjYW4gYmUgdXNlZnVsIGluIGZ1dHVyZS4KKyAgICBpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KKyAgICAgICMgSWYgdXNpbmcgcnVuIHRpbWUgbGlua2luZyAob24gQUlYIDQuMiBvciBsYXRlcikgdXNlIGxpYjxuYW1lPi5zbworICAgICAgIyBpbnN0ZWFkIG9mIGxpYjxuYW1lPi5hIHRvIGxldCBwZW9wbGUga25vdyB0aGF0IHRoZXNlIGFyZSBub3QKKyAgICAgICMgdHlwaWNhbCBBSVggc2hhcmVkIGxpYnJhcmllcy4KKyAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgIGVsc2UKKyAgICAgICMgV2UgcHJlc2VydmUgLmEgYXMgZXh0ZW5zaW9uIGZvciBzaGFyZWQgbGlicmFyaWVzIHRocm91Z2ggQUlYNC4yCisgICAgICAjIGFuZCBsYXRlciB3aGVuIHdlIGFyZSBub3QgZG9pbmcgcnVuIHRpbWUgbGlua2luZy4KKyAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0uYSAkbGlibmFtZS5hJworICAgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgICBmaQorICAgIHNobGlicGF0aF92YXI9TElCUEFUSAorICBmaQorICA7OworCithbWlnYW9zKikKKyAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgcG93ZXJwYykKKyAgICAjIFNpbmNlIEp1bHkgMjAwNyBBbWlnYU9TNCBvZmZpY2lhbGx5IHN1cHBvcnRzIC5zbyBsaWJyYXJpZXMuCisgICAgIyBXaGVuIGNvbXBpbGluZyB0aGUgZXhlY3V0YWJsZSwgYWRkIC11c2UtZHlubGQgLUxzb2JqczogdG8gdGhlIGNvbXBpbGVsaW5lLgorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgIDs7CisgIG02OGspCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5peGxpYnJhcnkgJGxpYm5hbWUuYScKKyAgICAjIENyZWF0ZSAke2xpYm5hbWV9X2l4bGlicmFyeS5hIGVudHJpZXMgaW4gL3N5cy9saWJzLgorICAgIGZpbmlzaF9ldmFsPSdmb3IgbGliIGluIGBscyAkbGliZGlyLyouaXhsaWJyYXJ5IDI+L2Rldi9udWxsYDsgZG8gbGlibmFtZT1gJEVDSE8gIlgkbGliIiB8ICRYc2VkIC1lICdcJydzJV4uKi9cKFteL10qXClcLml4bGlicmFyeSQlXDElJ1wnJ2A7IHRlc3QgJFJNIC9zeXMvbGlicy8ke2xpYm5hbWV9X2l4bGlicmFyeS5hOyAkc2hvdyAiY2QgL3N5cy9saWJzICYmICRMTl9TICRsaWIgJHtsaWJuYW1lfV9peGxpYnJhcnkuYSI7IGNkIC9zeXMvbGlicyAmJiAkTE5fUyAkbGliICR7bGlibmFtZX1faXhsaWJyYXJ5LmEgfHwgZXhpdCAxOyBkb25lJworICAgIDs7CisgIGVzYWMKKyAgOzsKKworYmVvcyopCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCisgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBsZC5zbyIKKyAgc2hsaWJwYXRoX3Zhcj1MSUJSQVJZX1BBVEgKKyAgOzsKKworYnNkaVs0NV0qKQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAkbGliZGlyJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii9zaGxpYiAvdXNyL2xpYiAvdXNyL1gxMS9saWIgL3Vzci9jb250cmliL2xpYiAvbGliIC91c3IvbG9jYWwvbGliIgorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL3NobGliIC91c3IvbGliIC91c3IvbG9jYWwvbGliIgorICAjIHRoZSBkZWZhdWx0IGxkLnNvLmNvbmYgYWxzbyBjb250YWlucyAvdXNyL2NvbnRyaWIvbGliIGFuZAorICAjIC91c3IvWDExUjYvbGliICgvdXNyL1gxMSBpcyBhIGxpbmsgdG8gL3Vzci9YMTFSNiksIGJ1dCBsZXQgdXMgYWxsb3cKKyAgIyBsaWJ0b29sIHRvIGhhcmQtY29kZSB0aGVzZSBpbnRvIHByb2dyYW1zCisgIDs7CisKK2N5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgdmVyc2lvbl90eXBlPXdpbmRvd3MKKyAgc2hyZXh0X2NtZHM9Ii5kbGwiCisgIG5lZWRfdmVyc2lvbj1ubworICBuZWVkX2xpYl9wcmVmaXg9bm8KKworICBjYXNlICRHQ0MsJGhvc3Rfb3MgaW4KKyAgeWVzLGN5Z3dpbiogfCB5ZXMsbWluZ3cqIHwgeWVzLHB3MzIqIHwgeWVzLGNlZ2NjKikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLmRsbC5hJworICAgICMgRExMIGlzIGluc3RhbGxlZCB0byAkKGxpYmRpcikvLi4vYmluIGJ5IHBvc3RpbnN0YWxsX2NtZHMKKyAgICBwb3N0aW5zdGFsbF9jbWRzPSdiYXNlX2ZpbGU9YGJhc2VuYW1lIFwke2ZpbGV9YH4KKyAgICAgIGRscGF0aD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGRpci8nXCcnXCR7YmFzZV9maWxlfSdcJydpOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+CisgICAgICBkbGRpcj0kZGVzdGRpci9gZGlybmFtZSBcJGRscGF0aGB+CisgICAgICB0ZXN0IC1kIFwkZGxkaXIgfHwgbWtkaXIgLXAgXCRkbGRpcn4KKyAgICAgICRpbnN0YWxsX3Byb2cgJGRpci8kZGxuYW1lIFwkZGxkaXIvJGRsbmFtZX4KKyAgICAgIGNobW9kIGEreCBcJGRsZGlyLyRkbG5hbWV+CisgICAgICBpZiB0ZXN0IC1uICdcJyckc3RyaXBtZSdcJycgJiYgdGVzdCAtbiAnXCcnJHN0cmlwbGliJ1wnJzsgdGhlbgorICAgICAgICBldmFsICdcJyckc3RyaXBsaWIgXCRkbGRpci8kZGxuYW1lJ1wnJyB8fCBleGl0IFwkPzsKKyAgICAgIGZpJworICAgIHBvc3R1bmluc3RhbGxfY21kcz0nZGxkbGw9YCRTSEVMTCAyPiYxIC1jICdcJycuICRmaWxlOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+CisgICAgICBkbHBhdGg9JGRpci9cJGRsZGxsfgorICAgICAgICRSTSBcJGRscGF0aCcKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgY3lnd2luKikKKyAgICAgICMgQ3lnd2luIERMTHMgdXNlICdjeWcnIHByZWZpeCByYXRoZXIgdGhhbiAnbGliJworICAgICAgc29uYW1lX3NwZWM9J2BlY2hvICR7bGlibmFtZX0gfCBzZWQgLWUgJ3MvXmxpYi9jeWcvJ2BgZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JworICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiAvbGliL3czMmFwaSAvbGliIC91c3IvbG9jYWwvbGliIgorICAgICAgOzsKKyAgICBtaW5ndyogfCBjZWdjYyopCisgICAgICAjIE1pbkdXIERMTHMgdXNlIHRyYWRpdGlvbmFsICdsaWInIHByZWZpeAorICAgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JworICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkQ0MgLXByaW50LXNlYXJjaC1kaXJzIHwgJEdSRVAgIl5saWJyYXJpZXM6IiB8ICRTRUQgLWUgInMvXmxpYnJhcmllczovLyIgLWUgInMsPS8sLyxnImAKKyAgICAgIGlmICRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRHUkVQICc7W2MtekMtWl06LycgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgICAjIEl0IGlzIG1vc3QgcHJvYmFibHkgYSBXaW5kb3dzIGZvcm1hdCBQQVRIIHByaW50ZWQgYnkKKyAgICAgICAgIyBtaW5ndyBnY2MsIGJ1dCB3ZSBhcmUgcnVubmluZyBvbiBDeWd3aW4uIEdjYyBwcmludHMgaXRzIHNlYXJjaAorICAgICAgICAjIHBhdGggd2l0aCA7IHNlcGFyYXRvcnMsIGFuZCB3aXRoIGRyaXZlIGxldHRlcnMuIFdlIGNhbiBoYW5kbGUgdGhlCisgICAgICAgICMgZHJpdmUgbGV0dGVycyAoY3lnd2luIGZpbGV1dGlscyB1bmRlcnN0YW5kcyB0aGVtKSwgc28gbGVhdmUgdGhlbSwKKyAgICAgICAgIyBlc3BlY2lhbGx5IGFzIHdlIG1pZ2h0IHBhc3MgZmlsZXMgZm91bmQgdGhlcmUgdG8gYSBtaW5ndyBvYmpkdW1wLAorICAgICAgICAjIHdoaWNoIHdvdWxkbid0IHVuZGVyc3RhbmQgYSBjeWd3aW5pZmllZCBwYXRoLiBBaGguCisgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAncy87LyAvZydgCisgICAgICBlbHNlCisgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAgLWUgInMvJFBBVEhfU0VQQVJBVE9SLyAvZyJgCisgICAgICBmaQorICAgICAgOzsKKyAgICBwdzMyKikKKyAgICAgICMgcHczMiBETExzIHVzZSAncHcnIHByZWZpeCByYXRoZXIgdGhhbiAnbGliJworICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSdgZWNobyAke2xpYm5hbWV9IHwgc2VkIC1lICdzL15saWIvcHcvJ2BgZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JworICAgICAgOzsKKyAgICBlc2FjCisgICAgOzsKKworICAqKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfWBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUubGliJworICAgIDs7CisgIGVzYWMKKyAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKKyAgIyBGSVhNRTogZmlyc3Qgd2Ugc2hvdWxkIHNlYXJjaCAuIGFuZCB0aGUgZGlyZWN0b3J5IHRoZSBleGVjdXRhYmxlIGlzIGluCisgIHNobGlicGF0aF92YXI9UEFUSAorICA7OworCitkYXJ3aW4qIHwgcmhhcHNvZHkqKQorICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZHlsZCIKKyAgdmVyc2lvbl90eXBlPWRhcndpbgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke21ham9yfSRzaGFyZWRfZXh0ICR7bGlibmFtZX0kc2hhcmVkX2V4dCcKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHttYWpvcn0kc2hhcmVkX2V4dCcKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBzaGxpYnBhdGhfdmFyPURZTERfTElCUkFSWV9QQVRICisgIHNocmV4dF9jbWRzPSdgdGVzdCAuJG1vZHVsZSA9IC55ZXMgJiYgZWNobyAuc28gfHwgZWNobyAuZHlsaWJgJworCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvdXNyL2xvY2FsL2xpYiAvbGliIC91c3IvbGliJworICA7OworCitkZ3V4KikKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICA7OworCitmcmVlYnNkMSopCisgIGR5bmFtaWNfbGlua2VyPW5vCisgIDs7CisKK2ZyZWVic2QqIHwgZHJhZ29uZmx5KikKKyAgIyBEcmFnb25GbHkgZG9lcyBub3QgaGF2ZSBhb3V0LiAgV2hlbi9pZiB0aGV5IGltcGxlbWVudCBhIG5ldworICAjIHZlcnNpb25pbmcgbWVjaGFuaXNtLCBhZGp1c3QgdGhpcy4KKyAgaWYgdGVzdCAteCAvdXNyL2Jpbi9vYmpmb3JtYXQ7IHRoZW4KKyAgICBvYmpmb3JtYXQ9YC91c3IvYmluL29iamZvcm1hdGAKKyAgZWxzZQorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBmcmVlYnNkWzEyM10qKSBvYmpmb3JtYXQ9YW91dCA7OworICAgICopIG9iamZvcm1hdD1lbGYgOzsKKyAgICBlc2FjCisgIGZpCisgIHZlcnNpb25fdHlwZT1mcmVlYnNkLSRvYmpmb3JtYXQKKyAgY2FzZSAkdmVyc2lvbl90eXBlIGluCisgICAgZnJlZWJzZC1lbGYqKQorICAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgICAgICBuZWVkX3ZlcnNpb249bm8KKyAgICAgIG5lZWRfbGliX3ByZWZpeD1ubworICAgICAgOzsKKyAgICBmcmVlYnNkLSopCisgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJGxpYm5hbWUke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCcKKyAgICAgIG5lZWRfdmVyc2lvbj15ZXMKKyAgICAgIDs7CisgIGVzYWMKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgY2FzZSAkaG9zdF9vcyBpbgorICBmcmVlYnNkMiopCisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICAgIDs7CisgIGZyZWVic2QzLlswMV0qIHwgZnJlZWJzZGVsZjMuWzAxXSopCisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgICA7OworICBmcmVlYnNkMy5bMi05XSogfCBmcmVlYnNkZWxmMy5bMi05XSogfCBcCisgIGZyZWVic2Q0LlswLTVdIHwgZnJlZWJzZGVsZjQuWzAtNV0gfCBmcmVlYnNkNC4xLjEgfCBmcmVlYnNkZWxmNC4xLjEpCisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgICAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAgIDs7CisgICopICMgZnJvbSA0LjYgb24sIGFuZCBEcmFnb25GbHkKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgICAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAgIDs7CisgIGVzYWMKKyAgOzsKKworZ251KikKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR7bWFqb3J9ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIDs7CisKK2hwdXg5KiB8IGhwdXgxMCogfCBocHV4MTEqKQorICAjIEdpdmUgYSBzb25hbWUgY29ycmVzcG9uZGluZyB0byB0aGUgbWFqb3IgdmVyc2lvbiBzbyB0aGF0IGRsZC5zbCByZWZ1c2VzIHRvCisgICMgbGluayBhZ2FpbnN0IG90aGVyIHZlcnNpb25zLgorICB2ZXJzaW9uX3R5cGU9c3Vub3MKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBjYXNlICRob3N0X2NwdSBpbgorICBpYTY0KikKKyAgICBzaHJleHRfY21kcz0nLnNvJworICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZGxkLnNvIgorICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcyAjIFVubGVzcyArbm9lbnZ2YXIgaXMgc3BlY2lmaWVkLgorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgICAgaWYgdGVzdCAiWCRIUFVYX0lBNjRfTU9ERSIgPSBYMzI7IHRoZW4KKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIvaHB1eDMyIC91c3IvbG9jYWwvbGliL2hwdXgzMiAvdXNyL2xvY2FsL2xpYiIKKyAgICBlbHNlCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliL2hwdXg2NCAvdXNyL2xvY2FsL2xpYi9ocHV4NjQiCisgICAgZmkKKyAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjCisgICAgOzsKKyAgaHBwYSo2NCopCisgICAgc2hyZXh0X2NtZHM9Jy5zbCcKKyAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGRsZC5zbCIKKyAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSCAjIEhvdyBzaG91bGQgd2UgaGFuZGxlIFNITElCX1BBVEgKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzICMgVW5sZXNzICtub2VudnZhciBpcyBzcGVjaWZpZWQuCisgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliL3BhMjBfNjQgL3Vzci9jY3MvbGliL3BhMjBfNjQiCisgICAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9JHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYworICAgIDs7CisgICopCisgICAgc2hyZXh0X2NtZHM9Jy5zbCcKKyAgICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZGxkLnNsIgorICAgIHNobGlicGF0aF92YXI9U0hMSUJfUEFUSAorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubyAjICtzIGlzIHJlcXVpcmVkIHRvIGVuYWJsZSBTSExJQl9QQVRICisgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgICA7OworICBlc2FjCisgICMgSFAtVVggcnVucyAqcmVhbGx5KiBzbG93bHkgdW5sZXNzIHNoYXJlZCBsaWJyYXJpZXMgYXJlIG1vZGUgNTU1LgorICBwb3N0aW5zdGFsbF9jbWRzPSdjaG1vZCA1NTUgJGxpYicKKyAgOzsKKworaW50ZXJpeFszLTldKikKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgZHluYW1pY19saW5rZXI9J0ludGVyaXggMy54IGxkLnNvLjEgKFBFLCBsaWtlIEVMRiknCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIDs7CisKK2lyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBub25zdG9wdXgqKSB2ZXJzaW9uX3R5cGU9bm9uc3RvcHV4IDs7CisgICAgKikKKwlpZiB0ZXN0ICIkbHRfY3ZfcHJvZ19nbnVfbGQiID0geWVzOyB0aGVuCisJCXZlcnNpb25fdHlwZT1saW51eAorCWVsc2UKKwkJdmVyc2lvbl90eXBlPWlyaXgKKwlmaSA7OworICBlc2FjCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBjYXNlICRob3N0X29zIGluCisgIGlyaXg1KiB8IG5vbnN0b3B1eCopCisgICAgbGlic3VmZj0gc2hsaWJzdWZmPQorICAgIDs7CisgICopCisgICAgY2FzZSAkTEQgaW4gIyBsaWJ0b29sLm00IHdpbGwgYWRkIG9uZSBvZiB0aGVzZSBzd2l0Y2hlcyB0byBMRAorICAgICotMzJ8KiItMzIgInwqLW1lbGYzMmJzbWlwfCoiLW1lbGYzMmJzbWlwICIpCisgICAgICBsaWJzdWZmPSBzaGxpYnN1ZmY9IGxpYm1hZ2ljPTMyLWJpdDs7CisgICAgKi1uMzJ8KiItbjMyICJ8Ki1tZWxmMzJibWlwbjMyfCoiLW1lbGYzMmJtaXBuMzIgIikKKyAgICAgIGxpYnN1ZmY9MzIgc2hsaWJzdWZmPU4zMiBsaWJtYWdpYz1OMzI7OworICAgICotNjR8KiItNjQgInwqLW1lbGY2NGJtaXB8KiItbWVsZjY0Ym1pcCAiKQorICAgICAgbGlic3VmZj02NCBzaGxpYnN1ZmY9NjQgbGlibWFnaWM9NjQtYml0OzsKKyAgICAqKSBsaWJzdWZmPSBzaGxpYnN1ZmY9IGxpYm1hZ2ljPW5ldmVyLW1hdGNoOzsKKyAgICBlc2FjCisgICAgOzsKKyAgZXNhYworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUlkke3NobGlic3VmZn1fUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiR7bGlic3VmZn0gL2xpYiR7bGlic3VmZn0gL3Vzci9sb2NhbC9saWIke2xpYnN1ZmZ9IgorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIke2xpYnN1ZmZ9IC9saWIke2xpYnN1ZmZ9IgorICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIDs7CisKKyMgTm8gc2hhcmVkIGxpYiBzdXBwb3J0IGZvciBMaW51eCBvbGRsZCwgYW91dCwgb3IgY29mZi4KK2xpbnV4Km9sZGxkKiB8IGxpbnV4KmFvdXQqIHwgbGludXgqY29mZiopCisgIGR5bmFtaWNfbGlua2VyPW5vCisgIDs7CisKKyMgVGhpcyBtdXN0IGJlIExpbnV4IEVMRi4KK2xpbnV4KiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSkKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnIC1uICRsaWJkaXInCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICAjIFNvbWUgYmludXRpbHMgbGQgYXJlIHBhdGNoZWQgdG8gc2V0IERUX1JVTlBBVEgKKyAgc2F2ZV9MREZMQUdTPSRMREZMQUdTCisgIHNhdmVfbGliZGlyPSRsaWJkaXIKKyAgZXZhbCAibGliZGlyPS9mb287IHdsPVwiJGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYXCI7IFwKKyAgICAgICBMREZMQUdTPVwiXCRMREZMQUdTICRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWFwiIgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2N4eF90cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBpZiAgKCRPQkpEVU1QIC1wIGNvbmZ0ZXN0JGFjX2V4ZWV4dCkgMj4vZGV2L251bGwgfCBncmVwICJSVU5QQVRILiokbGliZGlyIiA+L2Rldi9udWxsOyB0aGVuIDoKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworZmkKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICBMREZMQUdTPSRzYXZlX0xERkxBR1MKKyAgbGliZGlyPSRzYXZlX2xpYmRpcgorCisgICMgVGhpcyBpbXBsaWVzIG5vIGZhc3RfaW5zdGFsbCwgd2hpY2ggaXMgdW5hY2NlcHRhYmxlLgorICAjIFNvbWUgcmV3b3JrIHdpbGwgYmUgbmVlZGVkIHRvIGFsbG93IGZvciBmYXN0X2luc3RhbGwKKyAgIyBiZWZvcmUgdGhpcyBjYW4gYmUgZW5hYmxlZC4KKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworCisgICMgQXBwZW5kIGxkLnNvLmNvbmYgY29udGVudHMgdG8gdGhlIHNlYXJjaCBwYXRoCisgIGlmIHRlc3QgLWYgL2V0Yy9sZC5zby5jb25mOyB0aGVuCisgICAgbHRfbGRfZXh0cmE9YGF3ayAnL15pbmNsdWRlIC8geyBzeXN0ZW0oc3ByaW50ZigiY2QgL2V0YzsgY2F0ICVzIDI+L2Rldi9udWxsIiwgXCQyKSk7IHNraXAgPSAxOyB9IHsgaWYgKCFza2lwKSBwcmludCBcJDA7IHNraXAgPSAwOyB9JyA8IC9ldGMvbGQuc28uY29uZiB8ICRTRUQgLWUgJ3MvIy4qLy87L15bCSBdKmh3Y2FwWwkgXS9kO3MvWzosCV0vIC9nO3MvPVtePV0qJC8vO3MvPVtePSBdKiAvIC9nOy9eJC9kJyB8IHRyICdcbicgJyAnYAorICAgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvbGliIC91c3IvbGliICRsdF9sZF9leHRyYSIKKyAgZmkKKworICAjIFdlIHVzZWQgdG8gdGVzdCBmb3IgL2xpYi9sZC5zby4xIGFuZCBkaXNhYmxlIHNoYXJlZCBsaWJyYXJpZXMgb24KKyAgIyBwb3dlcnBjLCBiZWNhdXNlIE1rTGludXggb25seSBzdXBwb3J0ZWQgc2hhcmVkIGxpYnJhcmllcyB3aXRoIHRoZQorICAjIEdOVSBkeW5hbWljIGxpbmtlci4gIFNpbmNlIHRoaXMgd2FzIGJyb2tlbiB3aXRoIGNyb3NzIGNvbXBpbGVycywKKyAgIyBtb3N0IHBvd2VycGMtbGludXggYm94ZXMgc3VwcG9ydCBkeW5hbWljIGxpbmtpbmcgdGhlc2UgZGF5cyBhbmQKKyAgIyBwZW9wbGUgY2FuIGFsd2F5cyAtLWRpc2FibGUtc2hhcmVkLCB0aGUgdGVzdCB3YXMgcmVtb3ZlZCwgYW5kIHdlCisgICMgYXNzdW1lIHRoZSBHTlUvTGludXggZHluYW1pYyBsaW5rZXIgaXMgaW4gdXNlLgorICBkeW5hbWljX2xpbmtlcj0nR05VL0xpbnV4IGxkLnNvJworICA7OworCituZXRic2RlbGYqLWdudSkKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgZHluYW1pY19saW5rZXI9J05ldEJTRCBsZC5lbGZfc28nCisgIDs7CisKK25ldGJzZCopCisgIHZlcnNpb25fdHlwZT1zdW5vcworICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfXyA+L2Rldi9udWxsOyB0aGVuCisgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCcKKyAgICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAtbSAkbGliZGlyJworICAgIGR5bmFtaWNfbGlua2VyPSdOZXRCU0QgKGEub3V0KSBsZC5zbycKKyAgZWxzZQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCisgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgICBkeW5hbWljX2xpbmtlcj0nTmV0QlNEIGxkLmVsZl9zbycKKyAgZmkKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIDs7CisKK25ld3NvczYpCisgIHZlcnNpb25fdHlwZT1saW51eAorICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICA7OworCisqbnRvKiB8ICpxbngqKQorICB2ZXJzaW9uX3R5cGU9cW54CisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIGR5bmFtaWNfbGlua2VyPSdsZHFueC5zbycKKyAgOzsKKworb3BlbmJzZCopCisgIHZlcnNpb25fdHlwZT1zdW5vcworICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIiCisgIG5lZWRfbGliX3ByZWZpeD1ubworICAjIFNvbWUgb2xkZXIgdmVyc2lvbnMgb2YgT3BlbkJTRCAoMy4zIGF0IGxlYXN0KSAqZG8qIG5lZWQgdmVyc2lvbmVkIGxpYnMuCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBvcGVuYnNkMy4zIHwgb3BlbmJzZDMuMy4qKQluZWVkX3ZlcnNpb249eWVzIDs7CisgICAgKikJCQkJbmVlZF92ZXJzaW9uPW5vICA7OworICBlc2FjCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXgnCisgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnIC1tICRsaWJkaXInCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIGlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX19gIiB8fCB0ZXN0ICIkaG9zdF9vcy0kaG9zdF9jcHUiID0gIm9wZW5ic2QyLjgtcG93ZXJwYyI7IHRoZW4KKyAgICBjYXNlICRob3N0X29zIGluCisgICAgICBvcGVuYnNkMi5bODldIHwgb3BlbmJzZDIuWzg5XS4qKQorCXNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworCTs7CisgICAgICAqKQorCXNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKwk7OworICAgICAgZXNhYworICBlbHNlCisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBmaQorICA7OworCitvczIqKQorICBsaWJuYW1lX3NwZWM9JyRuYW1lJworICBzaHJleHRfY21kcz0iLmRsbCIKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUke3NoYXJlZF9leHR9ICRsaWJuYW1lLmEnCisgIGR5bmFtaWNfbGlua2VyPSdPUy8yIGxkLmV4ZScKKyAgc2hsaWJwYXRoX3Zhcj1MSUJQQVRICisgIDs7CisKK29zZjMqIHwgb3NmNCogfCBvc2Y1KikKKyAgdmVyc2lvbl90eXBlPW9zZgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3Ivc2hsaWIgL3Vzci9jY3MvbGliIC91c3IvbGliL2NtcGxycy9jYyAvdXNyL2xpYiAvdXNyL2xvY2FsL2xpYiAvdmFyL3NobGliIgorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIKKyAgOzsKKworcmRvcyopCisgIGR5bmFtaWNfbGlua2VyPW5vCisgIDs7CisKK3NvbGFyaXMqKQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICMgbGRkIGNvbXBsYWlucyB1bmxlc3MgbGlicmFyaWVzIGFyZSBleGVjdXRhYmxlCisgIHBvc3RpbnN0YWxsX2NtZHM9J2NobW9kICt4ICRsaWInCisgIDs7CisKK3N1bm9zNCopCisgIHZlcnNpb25fdHlwZT1zdW5vcworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4JworICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi91c3IvZXRjIiBsZGNvbmZpZyAkbGliZGlyJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKyAgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgZmkKKyAgbmVlZF92ZXJzaW9uPXllcworICA7OworCitzeXN2NCB8IHN5c3Y0LjMqKQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIGNhc2UgJGhvc3RfdmVuZG9yIGluCisgICAgc25pKQorICAgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgICAgIHJ1bnBhdGhfdmFyPUxEX1JVTl9QQVRICisgICAgICA7OworICAgIHNpZW1lbnMpCisgICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgICAgIDs7CisgICAgbW90b3JvbGEpCisgICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgICAgIG5lZWRfdmVyc2lvbj1ubworICAgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Jy9saWIgL3Vzci9saWIgL3Vzci9jY3MvbGliJworICAgICAgOzsKKyAgZXNhYworICA7OworCitzeXN2NCpNUCopCisgIGlmIHRlc3QgLWQgL3Vzci9uZWMgO3RoZW4KKyAgICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHtzaGFyZWRfZXh0fS4kdmVyc3VmZml4ICRsaWJuYW1lJHtzaGFyZWRfZXh0fS4kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgIHNvbmFtZV9zcGVjPSckbGlibmFtZSR7c2hhcmVkX2V4dH0uJG1ham9yJworICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIGZpCisgIDs7CisKK3N5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCogfCBzeXN2NCp1dzIqKQorICB2ZXJzaW9uX3R5cGU9ZnJlZWJzZC1lbGYKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9ICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKyAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Jy91c3IvbG9jYWwvbGliIC91c3IvZ251L2xpYiAvdXNyL2Njcy9saWIgL3Vzci9saWIgL2xpYicKKyAgZWxzZQorICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9jY3MvbGliIC91c3IvbGliJworICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIHNjbzMuMnY1KikKKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIC9saWIiCisJOzsKKyAgICBlc2FjCisgIGZpCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvdXNyL2xpYicKKyAgOzsKKwordHBmKikKKyAgIyBUUEYgaXMgYSBjcm9zcy10YXJnZXQgb25seS4gIFByZWZlcnJlZCBjcm9zcy1ob3N0ID0gR05VL0xpbnV4LgorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgOzsKKwordXRzNCopCisgIHZlcnNpb25fdHlwZT1saW51eAorICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgOzsKKworKikKKyAgZHluYW1pY19saW5rZXI9bm8KKyAgOzsKK2VzYWMKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZHluYW1pY19saW5rZXIiID4mNQorJGFzX2VjaG8gIiRkeW5hbWljX2xpbmtlciIgPiY2OyB9Cit0ZXN0ICIkZHluYW1pY19saW5rZXIiID0gbm8gJiYgY2FuX2J1aWxkX3NoYXJlZD1ubworCit2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0iUEFUSCAkc2hsaWJwYXRoX3ZhciAkcnVucGF0aF92YXIiCitpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICB2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0iJHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rIEdDQ19FWEVDX1BSRUZJWCBDT01QSUxFUl9QQVRIIExJQlJBUllfUEFUSCIKK2ZpCisKK2lmIHRlc3QgIiR7bHRfY3Zfc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjK3NldH0iID0gc2V0OyB0aGVuCisgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJGx0X2N2X3N5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIKK2ZpCitpZiB0ZXN0ICIke2x0X2N2X3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjK3NldH0iID0gc2V0OyB0aGVuCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIkbHRfY3Zfc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMiCitmaQorCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIGhhcmRjb2RlIGxpYnJhcnkgcGF0aHMgaW50byBwcm9ncmFtcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gaGFyZGNvZGUgbGlicmFyeSBwYXRocyBpbnRvIHByb2dyYW1zLi4uICIgPiY2OyB9CitoYXJkY29kZV9hY3Rpb25fQ1hYPQoraWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYIiB8fAorICAgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyX0NYWCIgfHwKKyAgIHRlc3QgIlgkaGFyZGNvZGVfYXV0b21hdGljX0NYWCIgPSAiWHllcyIgOyB0aGVuCisKKyAgIyBXZSBjYW4gaGFyZGNvZGUgbm9uLWV4aXN0ZW50IGRpcmVjdG9yaWVzLgorICBpZiB0ZXN0ICIkaGFyZGNvZGVfZGlyZWN0X0NYWCIgIT0gbm8gJiYKKyAgICAgIyBJZiB0aGUgb25seSBtZWNoYW5pc20gdG8gYXZvaWQgaGFyZGNvZGluZyBpcyBzaGxpYnBhdGhfdmFyLCB3ZQorICAgICAjIGhhdmUgdG8gcmVsaW5rLCBvdGhlcndpc2Ugd2UgbWlnaHQgbGluayB3aXRoIGFuIGluc3RhbGxlZCBsaWJyYXJ5CisgICAgICMgd2hlbiB3ZSBzaG91bGQgYmUgbGlua2luZyB3aXRoIGEgeWV0LXRvLWJlLWluc3RhbGxlZCBvbmUKKyAgICAgIyMgdGVzdCAiJF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgQ1hYKSIgIT0gbm8gJiYKKyAgICAgdGVzdCAiJGhhcmRjb2RlX21pbnVzX0xfQ1hYIiAhPSBubzsgdGhlbgorICAgICMgTGlua2luZyBhbHdheXMgaGFyZGNvZGVzIHRoZSB0ZW1wb3JhcnkgbGlicmFyeSBkaXJlY3RvcnkuCisgICAgaGFyZGNvZGVfYWN0aW9uX0NYWD1yZWxpbmsKKyAgZWxzZQorICAgICMgV2UgY2FuIGxpbmsgd2l0aG91dCBoYXJkY29kaW5nLCBhbmQgd2UgY2FuIGhhcmRjb2RlIG5vbmV4aXN0aW5nIGRpcnMuCisgICAgaGFyZGNvZGVfYWN0aW9uX0NYWD1pbW1lZGlhdGUKKyAgZmkKK2Vsc2UKKyAgIyBXZSBjYW5ub3QgaGFyZGNvZGUgYW55dGhpbmcsIG9yIGVsc2Ugd2UgY2FuIG9ubHkgaGFyZGNvZGUgZXhpc3RpbmcKKyAgIyBkaXJlY3Rvcmllcy4KKyAgaGFyZGNvZGVfYWN0aW9uX0NYWD11bnN1cHBvcnRlZAorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkaGFyZGNvZGVfYWN0aW9uX0NYWCIgPiY1CiskYXNfZWNobyAiJGhhcmRjb2RlX2FjdGlvbl9DWFgiID4mNjsgfQorCitpZiB0ZXN0ICIkaGFyZGNvZGVfYWN0aW9uX0NYWCIgPSByZWxpbmsgfHwKKyAgIHRlc3QgIiRpbmhlcml0X3JwYXRoX0NYWCIgPSB5ZXM7IHRoZW4KKyAgIyBGYXN0IGluc3RhbGxhdGlvbiBpcyBub3Qgc3VwcG9ydGVkCisgIGVuYWJsZV9mYXN0X2luc3RhbGw9bm8KK2VsaWYgdGVzdCAiJHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aCIgPSB5ZXMgfHwKKyAgICAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0gbm87IHRoZW4KKyAgIyBGYXN0IGluc3RhbGxhdGlvbiBpcyBub3QgbmVjZXNzYXJ5CisgIGVuYWJsZV9mYXN0X2luc3RhbGw9bmVlZGxlc3MKK2ZpCisKKworCisKKworCisKKyAgZmkgIyB0ZXN0IC1uICIkY29tcGlsZXIiCisKKyAgQ0M9JGx0X3NhdmVfQ0MKKyAgTERDWFg9JExECisgIExEPSRsdF9zYXZlX0xECisgIEdDQz0kbHRfc2F2ZV9HQ0MKKyAgd2l0aF9nbnVfbGQ9JGx0X3NhdmVfd2l0aF9nbnVfbGQKKyAgbHRfY3ZfcGF0aF9MRENYWD0kbHRfY3ZfcGF0aF9MRAorICBsdF9jdl9wYXRoX0xEPSRsdF9zYXZlX3BhdGhfTEQKKyAgbHRfY3ZfcHJvZ19nbnVfbGRjeHg9JGx0X2N2X3Byb2dfZ251X2xkCisgIGx0X2N2X3Byb2dfZ251X2xkPSRsdF9zYXZlX3dpdGhfZ251X2xkCitmaSAjIHRlc3QgIiRfbHRfY2F1Z2h0X0NYWF9lcnJvciIgIT0geWVzCisKK2FjX2V4dD1jCithY19jcHA9JyRDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKKworCisjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImxkIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBsZDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfTEQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkTEQiOyB0aGVuCisgIGFjX2N2X3Byb2dfTEQ9IiRMRCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX0xEPSJsZCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitMRD0kYWNfY3ZfcHJvZ19MRAoraWYgdGVzdCAtbiAiJExEIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJExEIiA+JjUKKyRhc19lY2hvICIkTEQiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKwordGVzdCAiJExEIiB8fCBhc19mbl9lcnJvciAkPyAibGQgbm90IGZvdW5kIiAiJExJTkVOTyIgNQorCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGtlcm5lbCBPUHJvZmlsZSBzdXBwb3J0IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBrZXJuZWwgT1Byb2ZpbGUgc3VwcG9ydC4uLiAiID4mNjsgfQorCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWtlcm5lbC1zdXBwb3J0IHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9rZXJuZWxfc3VwcG9ydCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfa2VybmVsX3N1cHBvcnQ7IGlmIHRlc3QgIiR3aXRodmFsIiA9ICJ5ZXMiOyB0aGVuCisJT1BST0ZJTEVfMjY9eWVzCitmaQorCitmaQorCisKK2lmIHRlc3QgIiRPUFJPRklMRV8yNiIgIT0gInllcyI7IHRoZW4KKworCisJS1NSQz0vbGliL21vZHVsZXMvYHVuYW1lIC1yYC9idWlsZAorCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWxpbnV4IHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9saW51eCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfbGludXg7IEtTUkM9JHdpdGh2YWwKK2ZpCisKKwlLSU5DPSRLU1JDL2luY2x1ZGUKKworCisKK1NBVkVfQ0ZMQUdTPSRDRkxBR1MKK0NGTEFHUz0iLUkkS0lOQyAtTzIgLURfX0tFUk5FTF9fIgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPGxpbnV4L2F1dG9jb25mLmg+CitpbnQKK21haW4gKCkKK3sKKworI2lmbmRlZiBDT05GSUdfT1BST0ZJTEUKK2JyZWFrX21lX2hhcmQoXFxcKTsKKyNlbmRpZgorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgT1BST0ZJTEVfMjY9eWVzCitlbHNlCisgIE9QUk9GSUxFXzI2PW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitDRkxBR1M9JFNBVkVfQ0ZMQUdTCisKKworU0FWRV9DRkxBR1M9JENGTEFHUworQ0ZMQUdTPSItSSRLSU5DIC1PMiAtRF9fS0VSTkVMX18iCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8bGludXgvYXV0b2NvbmYuaD4KK2ludAorbWFpbiAoKQoreworCisjaWZuZGVmIENPTkZJR19PUFJPRklMRV9NT0RVTEUKK2JyZWFrX21lX2hhcmQoXFxcKTsKKyNlbmRpZgorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgT1BST0ZJTEVfMjY9eWVzCitlbHNlCisgIE9QUk9GSUxFXzI2PSRPUFJPRklMRV8yNgorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorQ0ZMQUdTPSRTQVZFX0NGTEFHUworCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRPUFJPRklMRV8yNiIgPiY1CiskYXNfZWNobyAiJE9QUk9GSUxFXzI2IiA+JjY7IH0KKworIGlmIHRlc3QgIiRPUFJPRklMRV8yNiIgPSB5ZXM7IHRoZW4KKyAga2VybmVsX3N1cHBvcnRfVFJVRT0KKyAga2VybmVsX3N1cHBvcnRfRkFMU0U9JyMnCitlbHNlCisgIGtlcm5lbF9zdXBwb3J0X1RSVUU9JyMnCisgIGtlcm5lbF9zdXBwb3J0X0ZBTFNFPQorZmkKKworCisKKworaWYgdGVzdCAiJE9QUk9GSUxFXzI2IiA9ICJubyI7IHRoZW4KKworaWYgdGVzdCAhIC1mICRLSU5DL2xpbnV4L2F1dG9jb25mLmg7IHRoZW4KKwlhc19mbl9lcnJvciAkPyAibm8gc3VpdGFibHkgY29uZmlndXJlZCBrZXJuZWwgaW5jbHVkZSB0cmVlIGZvdW5kIiAiJExJTkVOTyIgNQorZmkKKworCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGtlcm5lbCB2ZXJzaW9uIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBrZXJuZWwgdmVyc2lvbi4uLiAiID4mNjsgfQorZXZhbCBLVkVSUz1gZ2NjIC1JJEtJTkMgLUUgLWRNICRLSU5DL2xpbnV4L3ZlcnNpb24uaCB8IGdyZXAgLXcgVVRTX1JFTEVBU0UgfCBhd2sgJ3twcmludCAkM30nYAoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRLVkVSUyIgPiY1CiskYXNfZWNobyAiJEtWRVJTIiA+JjY7IH0KK2Nhc2UgIiRLVkVSUyIgaW4KKzIuMi4qfDIuNC4qKSA7OworKikgYXNfZm5fZXJyb3IgJD8gIlVuc3VwcG9ydGVkIGtlcm5lbCB2ZXJzaW9uIiAiJExJTkVOTyIgNQorZXNhYworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGtlcm5lbCB2ZXJzaW9uIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGtlcm5lbCB2ZXJzaW9uLi4uICIgPiY2OyB9CisKK1NBVkVfQ0ZMQUdTPSRDRkxBR1MKK0NGTEFHUz0iLUkkS0lOQyAtRF9fS0VSTkVMX18gLVdlcnJvciIKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworICAjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorCitpbnQKK21haW4gKCkKK3sKKworICAjaWYgTElOVVhfVkVSU0lPTl9DT0RFIDw9IEtFUk5FTF9WRVJTSU9OKDIsIDIsIDEwKQorICBicmVha19tZV9oYXJkKFxcXCk7CisgICNlbmRpZgorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG9rIiA+JjUKKyRhc19lY2hvICJvayIgPiY2OyB9CitlbHNlCisgIGFzX2ZuX2Vycm9yICQ/ICJjaGVjayBodG1sIGRvY3VtZW50YXRpb24gaW5zdGFsbCBzZWN0aW9uIiAiJExJTkVOTyIgNQorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorQ0ZMQUdTPSRTQVZFX0NGTEFHUworCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRLSU5DL2xpbnV4L3NwaW5sb2NrLmgiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRLSU5DL2xpbnV4L3NwaW5sb2NrLmguLi4gIiA+JjY7IH0KK2lmIHRlc3QgLWYgJEtJTkMvbGludXgvc3BpbmxvY2suaDsgdGhlbgorCUVYVFJBX0NGTEFHU19NT0RVTEU9IiRFWFRSQV9DRkxBR1NfTU9EVUxFIC1ESEFWRV9MSU5VWF9TUElOTE9DS19IRUFERVIiCisJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KK2Vsc2UKKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHJ0Y19sb2NrIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBydGNfbG9jay4uLiAiID4mNjsgfQorZ2NjIC1JJEtJTkMgLUUgJEtJTkMvbGludXgvbWMxNDY4MThydGMuaCB8IGdyZXAgcnRjX2xvY2sgPi9kZXYvbnVsbAoraWYgdGVzdCAiJD8iIC1lcSAwOyB0aGVuCisJRVhUUkFfQ0ZMQUdTX01PRFVMRT0iJEVYVFJBX0NGTEFHU19NT0RVTEUgLURSVENfTE9DSyIKKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorZWxzZQorCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworYXJjaD0idW5rbm93biIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHg4NiBhcmNoaXRlY3R1cmUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHg4NiBhcmNoaXRlY3R1cmUuLi4gIiA+JjY7IH0KKworU0FWRV9DRkxBR1M9JENGTEFHUworQ0ZMQUdTPSItSSRLSU5DIC1PMiAtRF9fS0VSTkVMX18iCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8bGludXgvYXV0b2NvbmYuaD4KK2ludAorbWFpbiAoKQoreworCisjaWZuZGVmIENPTkZJR19YODYKK2JyZWFrX21lX2hhcmQoXFxcKTsKKyNlbmRpZgorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgeDg2PTEKK2Vsc2UKKyAgeDg2PTAKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0NGTEFHUz0kU0FWRV9DRkxBR1MKKworCitTQVZFX0NGTEFHUz0kQ0ZMQUdTCitDRkxBR1M9Ii1JJEtJTkMgLU8yIC1EX19LRVJORUxfXyIKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxsaW51eC9hdXRvY29uZi5oPgoraW50CittYWluICgpCit7CisKKyNpZm5kZWYgQ09ORklHX1g4Nl9XUF9XT1JLU19PSworYnJlYWtfbWVfaGFyZChcXFwpOworI2VuZGlmCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICB4ODY9MQorZWxzZQorICB4ODY9JHg4NgorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorQ0ZMQUdTPSRTQVZFX0NGTEFHUworCit4PW5vCit0ZXN0ICJ4JHg4NiIgPSAieDEiICYmIHg9eWVzCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHgiID4mNQorJGFzX2VjaG8gIiR4IiA+JjY7IH0KK3Rlc3QgIiR4ODYiID0gMSAmJiBhcmNoPSJ4ODYiCisKK2lmIHRlc3QgIiRhcmNoIiA9ICJ1bmtub3duIjsgdGhlbgorCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGlhNjQgYXJjaGl0ZWN0dXJlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBpYTY0IGFyY2hpdGVjdHVyZS4uLiAiID4mNjsgfQorCitTQVZFX0NGTEFHUz0kQ0ZMQUdTCitDRkxBR1M9Ii1JJEtJTkMgLU8yIC1EX19LRVJORUxfXyIKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxsaW51eC9hdXRvY29uZi5oPgoraW50CittYWluICgpCit7CisKKyNpZm5kZWYgQ09ORklHX0lBNjQKK2JyZWFrX21lX2hhcmQoXFxcKTsKKyNlbmRpZgorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgaWE2ND0xCitlbHNlCisgIGlhNjQ9MAorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorQ0ZMQUdTPSRTQVZFX0NGTEFHUworCisgCXg9bm8KK3Rlc3QgIngkaWE2NCIgPSAieDEiICYmIHg9eWVzCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHgiID4mNQorJGFzX2VjaG8gIiR4IiA+JjY7IH0KKyAJdGVzdCAiJGlhNjQiID0gMSAmJiBhcmNoPSJpYTY0IgorZmkKKwordGVzdCAiJGFyY2giID0gInVua25vd24iICYmIGFzX2ZuX2Vycm9yICQ/ICJVbnN1cHBvcnRlZCBhcmNoaXRlY3R1cmUiICIkTElORU5PIiA1CisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgYXJjaC9rZXJuZWwgdmVyc2lvbiBjb21iaW5hdGlvbiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBhcmNoL2tlcm5lbCB2ZXJzaW9uIGNvbWJpbmF0aW9uLi4uICIgPiY2OyB9CitjYXNlICIkYXJjaCIgaW4KK2lhNjQpCisKK1NBVkVfQ0ZMQUdTPSRDRkxBR1MKK0NGTEFHUz0iLUkkS0lOQyAtRF9fS0VSTkVMX18gLVdlcnJvciIKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworICAjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorCitpbnQKK21haW4gKCkKK3sKKworICAjaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiwgNCwgMTgpCisgIGJyZWFrX21lX2hhcmQoXFxcKTsKKyAgI2VuZGlmCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogb2siID4mNQorJGFzX2VjaG8gIm9rIiA+JjY7IH0KK2Vsc2UKKyAgYXNfZm5fZXJyb3IgJD8gInVuc3VwcG9ydGVkIGFyY2gva2VybmVsIiAiJExJTkVOTyIgNQorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorQ0ZMQUdTPSRTQVZFX0NGTEFHUworIDs7CisqKSB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogb2siID4mNQorJGFzX2VjaG8gIm9rIiA+JjY7IH0KK2VzYWMKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgcHJlZW1wdCBwYXRjaCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgcHJlZW1wdCBwYXRjaC4uLiAiID4mNjsgfQorCitTQVZFX0NGTEFHUz0kQ0ZMQUdTCitDRkxBR1M9Ii1JJEtJTkMgLU8yIC1EX19LRVJORUxfXyIKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxsaW51eC9hdXRvY29uZi5oPgoraW50CittYWluICgpCit7CisKKyNpZm5kZWYgQ09ORklHX1BSRUVNUFQKK2JyZWFrX21lX2hhcmQoXFxcKTsKKyNlbmRpZgorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgcHJlZW1wdD0xCitlbHNlCisgIHByZWVtcHQ9MAorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorQ0ZMQUdTPSRTQVZFX0NGTEFHUworCit4PW5vCit0ZXN0ICJ4JHByZWVtcHQiID0gIngxIiAmJiB4PXllcworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICR4IiA+JjUKKyRhc19lY2hvICIkeCIgPiY2OyB9Cit0ZXN0ICIkcHJlZW1wdCIgPSAwIHx8IGFzX2ZuX2Vycm9yICQ/ICJ1bnN1cHBvcnRlZCBrZXJuZWwgY29uZmlndXJhdGlvbiA6IENPTkZJR19QUkVFTVBUIiAiJExJTkVOTyIgNQorCisKKworTU9ESU5TVEFMTERJUj0vbGliL21vZHVsZXMvJEtWRVJTCisKK09QUk9GSUxFX01PRFVMRV9BUkNIPSRhcmNoCisKKworCitmaQorCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtbW9kdWxlLWRpciB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfbW9kdWxlX2RpcitzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfbW9kdWxlX2RpcjsgTU9ESU5TVEFMTERJUj0kd2l0aHZhbAorZmkKKworCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1qYXZhIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9qYXZhK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9qYXZhOyBKQVZBX0hPTUVESVI9JHdpdGhfamF2YQorZWxzZQorICB3aXRoX2phdmE9bm8KK2ZpCisKKworaWYgdGVzdCAieCR3aXRoX2phdmEiID0gInh5ZXMiOyB0aGVuCisJSkFWQV9IT01FRElSPSIvdXNyIgorZWxzZSBpZiB0ZXN0ICJ4JHdpdGhfamF2YSIgPSAieG5vIjsgdGhlbgorCUpBVkFfSE9NRURJUj0KKwlmaQorZmkKKworCitpZiB0ZXN0IC1uICIkSkFWQV9IT01FRElSIjsgdGhlbgorCWFzX2FjX0ZpbGU9YCRhc19lY2hvICJhY19jdl9maWxlXyIkSkFWQV9IT01FRElSL2luY2x1ZGUvanZtdGkuaCIiIHwgJGFzX3RyX3NoYAoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgXCIkSkFWQV9IT01FRElSL2luY2x1ZGUvanZtdGkuaFwiIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBcIiRKQVZBX0hPTUVESVIvaW5jbHVkZS9qdm10aS5oXCIuLi4gIiA+JjY7IH0KK2lmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfRmlsZStzZXR9XCIiID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXMgJiYKKyAgYXNfZm5fZXJyb3IgJD8gImNhbm5vdCBjaGVjayBmb3IgZmlsZSBleGlzdGVuY2Ugd2hlbiBjcm9zcyBjb21waWxpbmciICIkTElORU5PIiA1CitpZiB0ZXN0IC1yICIiJEpBVkFfSE9NRURJUi9pbmNsdWRlL2p2bXRpLmgiIjsgdGhlbgorICBldmFsICIkYXNfYWNfRmlsZT15ZXMiCitlbHNlCisgIGV2YWwgIiRhc19hY19GaWxlPW5vIgorZmkKK2ZpCitldmFsIGFjX3Jlcz1cJCRhc19hY19GaWxlCisJICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKyRhc19lY2hvICIkYWNfcmVzIiA+JjY7IH0KK2lmIGV2YWwgdGVzdCBcInhcJCIkYXNfYWNfRmlsZSJcIiA9IHgieWVzIjsgdGhlbiA6CisgIEpWTVRJX0hfRVhJU1RTPSJ5ZXMiCitmaQorCisJYXNfYWNfRmlsZT1gJGFzX2VjaG8gImFjX2N2X2ZpbGVfIiRKQVZBX0hPTUVESVIvaW5jbHVkZS9qdm1waS5oIiIgfCAkYXNfdHJfc2hgCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBcIiRKQVZBX0hPTUVESVIvaW5jbHVkZS9qdm1waS5oXCIiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIFwiJEpBVkFfSE9NRURJUi9pbmNsdWRlL2p2bXBpLmhcIi4uLiAiID4mNjsgfQoraWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19GaWxlK3NldH1cIiIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllcyAmJgorICBhc19mbl9lcnJvciAkPyAiY2Fubm90IGNoZWNrIGZvciBmaWxlIGV4aXN0ZW5jZSB3aGVuIGNyb3NzIGNvbXBpbGluZyIgIiRMSU5FTk8iIDUKK2lmIHRlc3QgLXIgIiIkSkFWQV9IT01FRElSL2luY2x1ZGUvanZtcGkuaCIiOyB0aGVuCisgIGV2YWwgIiRhc19hY19GaWxlPXllcyIKK2Vsc2UKKyAgZXZhbCAiJGFzX2FjX0ZpbGU9bm8iCitmaQorZmkKK2V2YWwgYWNfcmVzPVwkJGFzX2FjX0ZpbGUKKwkgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19yZXMiID4mNQorJGFzX2VjaG8gIiRhY19yZXMiID4mNjsgfQoraWYgZXZhbCB0ZXN0IFwieFwkIiRhc19hY19GaWxlIlwiID0geCJ5ZXMiOyB0aGVuIDoKKyAgSlZNUElfSF9FWElTVFM9InllcyIKK2ZpCisKK2ZpCisKKyBpZiB0ZXN0IC1uICIkSlZNVElfSF9FWElTVFMiOyB0aGVuCisgIEJVSUxEX0pWTVRJX0FHRU5UX1RSVUU9CisgIEJVSUxEX0pWTVRJX0FHRU5UX0ZBTFNFPScjJworZWxzZQorICBCVUlMRF9KVk1USV9BR0VOVF9UUlVFPScjJworICBCVUlMRF9KVk1USV9BR0VOVF9GQUxTRT0KK2ZpCisKKyBpZiB0ZXN0IC1uICIkSlZNUElfSF9FWElTVFMiOyB0aGVuCisgIEJVSUxEX0pWTVBJX0FHRU5UX1RSVUU9CisgIEJVSUxEX0pWTVBJX0FHRU5UX0ZBTFNFPScjJworZWxzZQorICBCVUlMRF9KVk1QSV9BR0VOVF9UUlVFPScjJworICBCVUlMRF9KVk1QSV9BR0VOVF9GQUxTRT0KK2ZpCisKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgbWFsbG9jIGF0dHJpYnV0ZSBpcyB1bmRlcnN0b29kIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgbWFsbG9jIGF0dHJpYnV0ZSBpcyB1bmRlcnN0b29kLi4uICIgPiY2OyB9CitTQVZFX0NGTEFHUz0kQ0ZMQUdTCitDRkxBR1M9Ii1XZXJyb3IgJENGTEFHUyIKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisKK3ZvaWQgbW9ua2V5KCkgX19hdHRyaWJ1dGVfXygobWFsbG9jKSk7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfTsKKyRhc19lY2hvICIjZGVmaW5lIE1BTExPQ19BVFRSSUJVVEVfT0sgMSIgPj5jb25mZGVmcy5oCisKK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitDRkxBR1M9JFNBVkVfQ0ZMQUdTCisKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgX19idWlsdGluX2V4cGVjdCBpcyB1bmRlcnN0b29kIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgX19idWlsdGluX2V4cGVjdCBpcyB1bmRlcnN0b29kLi4uICIgPiY2OyB9CitTQVZFX0NGTEFHUz0kQ0ZMQUdTCitDRkxBR1M9Ii1XZXJyb3IgJENGTEFHUyIKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisKK2ludCBpOworaWYgKF9fYnVpbHRpbl9leHBlY3QoaSwgMCkpIHsgfQorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH07IEVYVFJBX0NGTEFHU19NT0RVTEU9IiRFWFRSQV9DRkxBR1NfTU9EVUxFIC1ERVhQRUNUX09LIgorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH07CitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0NGTEFHUz0kU0FWRV9DRkxBR1MKKworCisKKworCit0b3BkaXI9YHB3ZGAKKworCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1leHRyYS1pbmNsdWRlcyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfZXh0cmFfaW5jbHVkZXMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX2V4dHJhX2luY2x1ZGVzOyB1c2VfZXh0cmFfaW5jbHVkZXM9IiR3aXRodmFsIgorZWxzZQorICB1c2VfZXh0cmFfaW5jbHVkZXM9Tk8KKworZmkKKworaWYgdGVzdCAtbiAiJHVzZV9leHRyYV9pbmNsdWRlcyIgJiYgXAorICAgICAgICB0ZXN0ICIkdXNlX2V4dHJhX2luY2x1ZGVzIiAhPSAiTk8iOyB0aGVuCisgIGFjX3NhdmVfaWZzPSRJRlMKKyAgSUZTPSc6JworICBmb3IgZGlyIGluICR1c2VfZXh0cmFfaW5jbHVkZXM7IGRvCisgICAgZXh0cmFfaW5jbHVkZXM9IiRleHRyYV9pbmNsdWRlcyAtSSRkaXIiCisgIGRvbmUKKyAgSUZTPSRhY19zYXZlX2lmcworICBDUFBGTEFHUz0iJENQUEZMQUdTICRleHRyYV9pbmNsdWRlcyIKK2ZpCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1leHRyYS1saWJzIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9leHRyYV9saWJzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9leHRyYV9saWJzOyB1c2VfZXh0cmFfbGlicz0kd2l0aHZhbAorZWxzZQorICB1c2VfZXh0cmFfbGlicz1OTworCitmaQorCitpZiB0ZXN0IC1uICIkdXNlX2V4dHJhX2xpYnMiICYmIFwKKyAgICAgICAgdGVzdCAiJHVzZV9leHRyYV9saWJzIiAhPSAiTk8iOyB0aGVuCisgICBhY19zYXZlX2lmcz0kSUZTCisgICBJRlM9JzonCisgICBmb3IgZGlyIGluICR1c2VfZXh0cmFfbGliczsgZG8KKyAgICAgZXh0cmFfbGlicmFyaWVzPSIkZXh0cmFfbGlicmFyaWVzIC1MJGRpciIKKyAgIGRvbmUKKyAgIElGUz0kYWNfc2F2ZV9pZnMKKyAgIExERkxBR1M9IiRMREZMQUdTICRleHRyYV9saWJyYXJpZXMiCitmaQorCisKKworT1JJR19TQVZFX0xJQlM9IiRMSUJTIgorCitmb3IgYWNfZnVuYyBpbiBzY2hlZF9zZXRhZmZpbml0eSBwZXJmbW9uY3RsCitkbyA6CisgIGFzX2FjX3Zhcj1gJGFzX2VjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYAorYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAiJGFjX2Z1bmMiICIkYXNfYWNfdmFyIgoraWYgZXZhbCB0ZXN0IFwieFwkIiRhc19hY192YXIiXCIgPSB4InllcyI7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGAkYXNfZWNobyAiSEFWRV8kYWNfZnVuYyIgfCAkYXNfdHJfY3BwYCAxCitfQUNFT0YKKworZmkKK2RvbmUKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBwb3B0R2V0Q29udGV4dCBpbiAtbHBvcHQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHBvcHRHZXRDb250ZXh0IGluIC1scG9wdC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9saWJfcG9wdF9wb3B0R2V0Q29udGV4dCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKK0xJQlM9Ii1scG9wdCAgJExJQlMiCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgcG9wdEdldENvbnRleHQgKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBwb3B0R2V0Q29udGV4dCAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9saWJfcG9wdF9wb3B0R2V0Q29udGV4dD15ZXMKK2Vsc2UKKyAgYWNfY3ZfbGliX3BvcHRfcG9wdEdldENvbnRleHQ9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX3BvcHRfcG9wdEdldENvbnRleHQiID4mNQorJGFzX2VjaG8gIiRhY19jdl9saWJfcG9wdF9wb3B0R2V0Q29udGV4dCIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9wb3B0X3BvcHRHZXRDb250ZXh0IiA9IHgiInllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9MSUJQT1BUIDEKK19BQ0VPRgorCisgIExJQlM9Ii1scG9wdCAkTElCUyIKKworZWxzZQorICBhc19mbl9lcnJvciAkPyAicG9wdCBsaWJyYXJ5IG5vdCBmb3VuZCIgIiRMSU5FTk8iIDUKK2ZpCisKKworZm9yIGFjX2hlYWRlciBpbiBsaWJpYmVydHkuaAorZG8gOgorICBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAibGliaWJlcnR5LmgiICJhY19jdl9oZWFkZXJfbGliaWJlcnR5X2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2lmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX2xpYmliZXJ0eV9oIiA9IHgiInllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9MSUJJQkVSVFlfSCAxCitfQUNFT0YKKworZmkKKworZG9uZQorCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBjcGx1c19kZW1hbmdsZSBpbiAtbGliZXJ0eSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgY3BsdXNfZGVtYW5nbGUgaW4gLWxpYmVydHkuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfbGliX2liZXJ0eV9jcGx1c19kZW1hbmdsZStzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKK0xJQlM9Ii1saWJlcnR5ICAkTElCUyIKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBjcGx1c19kZW1hbmdsZSAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIGNwbHVzX2RlbWFuZ2xlICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2xpYl9pYmVydHlfY3BsdXNfZGVtYW5nbGU9eWVzCitlbHNlCisgIGFjX2N2X2xpYl9pYmVydHlfY3BsdXNfZGVtYW5nbGU9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX2liZXJ0eV9jcGx1c19kZW1hbmdsZSIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl9pYmVydHlfY3BsdXNfZGVtYW5nbGUiID4mNjsgfQoraWYgdGVzdCAieCRhY19jdl9saWJfaWJlcnR5X2NwbHVzX2RlbWFuZ2xlIiA9IHgiInllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9MSUJJQkVSVFkgMQorX0FDRU9GCisKKyAgTElCUz0iLWxpYmVydHkgJExJQlMiCisKK2Vsc2UKKyAgYXNfZm5fZXJyb3IgJD8gImxpYmVydHkgbGlicmFyeSBub3QgZm91bmQiICIkTElORU5PIiA1CitmaQorCitmb3IgYWNfZnVuYyBpbiB4Y2FsbG9jCitkbyA6CisgIGFjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgInhjYWxsb2MiICJhY19jdl9mdW5jX3hjYWxsb2MiCitpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfeGNhbGxvYyIgPSB4IiJ5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfWENBTExPQyAxCitfQUNFT0YKKworZmkKK2RvbmUKKworZm9yIGFjX2Z1bmMgaW4geG1lbWR1cAorZG8gOgorICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJ4bWVtZHVwIiAiYWNfY3ZfZnVuY194bWVtZHVwIgoraWYgdGVzdCAieCRhY19jdl9mdW5jX3htZW1kdXAiID0geCIieWVzOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1hNRU1EVVAgMQorX0FDRU9GCisKK2ZpCitkb25lCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGRsb3BlbiBpbiAtbGRsIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBkbG9wZW4gaW4gLWxkbC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9saWJfZGxfZGxvcGVuK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworTElCUz0iLWxkbCAgJExJQlMiCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgZGxvcGVuICgpOworaW50CittYWluICgpCit7CityZXR1cm4gZGxvcGVuICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2xpYl9kbF9kbG9wZW49eWVzCitlbHNlCisgIGFjX2N2X2xpYl9kbF9kbG9wZW49bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX2RsX2Rsb3BlbiIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl9kbF9kbG9wZW4iID4mNjsgfQoraWYgdGVzdCAieCRhY19jdl9saWJfZGxfZGxvcGVuIiA9IHgiInllczsgdGhlbiA6CisgIExJQlM9IiRMSUJTIC1sZGwiOyBETF9MSUI9Ii1sZGwiCitlbHNlCisgIERMX0xJQj0iIgorZmkKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgbWFpbiBpbiAtbGludGwiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIG1haW4gaW4gLWxpbnRsLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X2xpYl9pbnRsX21haW4rc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbGludGwgICRMSUJTIgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKK2ludAorbWFpbiAoKQoreworcmV0dXJuIG1haW4gKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfbGliX2ludGxfbWFpbj15ZXMKK2Vsc2UKKyAgYWNfY3ZfbGliX2ludGxfbWFpbj1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfaW50bF9tYWluIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfbGliX2ludGxfbWFpbiIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9pbnRsX21haW4iID0geCIieWVzOyB0aGVuIDoKKyAgTElCUz0iJExJQlMgLWxpbnRsIjsgSU5UTF9MSUI9Ii1saW50bCIKK2Vsc2UKKyAgSU5UTF9MSUI9IiIKK2ZpCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgYmZkX29wZW5yIGluIC1sYmZkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBiZmRfb3BlbnIgaW4gLWxiZmQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfbGliX2JmZF9iZmRfb3BlbnIrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbGJmZCAgJExJQlMiCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgYmZkX29wZW5yICgpOworaW50CittYWluICgpCit7CityZXR1cm4gYmZkX29wZW5yICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2xpYl9iZmRfYmZkX29wZW5yPXllcworZWxzZQorICBhY19jdl9saWJfYmZkX2JmZF9vcGVucj1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfYmZkX2JmZF9vcGVuciIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl9iZmRfYmZkX29wZW5yIiA+JjY7IH0KK2lmIHRlc3QgIngkYWNfY3ZfbGliX2JmZF9iZmRfb3BlbnIiID0geCIieWVzOyB0aGVuIDoKKyAgTElCUz0iLWxiZmQgJExJQlMiOyBaX0xJQj0iIgorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBjb21wcmVzcyBpbiAtbHoiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGNvbXByZXNzIGluIC1sei4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9saWJfel9jb21wcmVzcytzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKK0xJQlM9Ii1seiAgJExJQlMiCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgY29tcHJlc3MgKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBjb21wcmVzcyAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9saWJfel9jb21wcmVzcz15ZXMKK2Vsc2UKKyAgYWNfY3ZfbGliX3pfY29tcHJlc3M9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX3pfY29tcHJlc3MiID4mNQorJGFzX2VjaG8gIiRhY19jdl9saWJfel9jb21wcmVzcyIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl96X2NvbXByZXNzIiA9IHgiInllczsgdGhlbiA6CisgIAkJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgYmZkX2Zkb3BlbnIgaW4gLWxiZmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGJmZF9mZG9wZW5yIGluIC1sYmZkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X2xpYl9iZmRfYmZkX2Zkb3BlbnIrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbGJmZCAtbHogJExJQlMiCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgYmZkX2Zkb3BlbnIgKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBiZmRfZmRvcGVuciAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9saWJfYmZkX2JmZF9mZG9wZW5yPXllcworZWxzZQorICBhY19jdl9saWJfYmZkX2JmZF9mZG9wZW5yPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9iZmRfYmZkX2Zkb3BlbnIiID4mNQorJGFzX2VjaG8gIiRhY19jdl9saWJfYmZkX2JmZF9mZG9wZW5yIiA+JjY7IH0KK2lmIHRlc3QgIngkYWNfY3ZfbGliX2JmZF9iZmRfZmRvcGVuciIgPSB4IiJ5ZXM7IHRoZW4gOgorICBMSUJTPSItbGJmZCAtbHogJExJQlMiOyBaX0xJQj0iLWx6IgorZWxzZQorICBhc19mbl9lcnJvciAkPyAiYmZkIGxpYnJhcnkgbm90IGZvdW5kIiAiJExJTkVOTyIgNQorZmkKKworCitlbHNlCisgIGFzX2ZuX2Vycm9yICQ/ICJsaWJ6IGxpYnJhcnkgbm90IGZvdW5kOyByZXF1aXJlZCBieSBsaWJiZmQiICIkTElORU5PIiA1CitmaQorCisKKworZmkKKworCithY19leHQ9YworYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CisKKyMgRGV0ZXJtaW5lIGlmIGJmZF9nZXRfc3ludGhldGljX3N5bXRhYiBtYWNybyBpcyBhdmFpbGFibGUKK09TPSJgdW5hbWVgIgoraWYgdGVzdCAiJE9TIiA9ICJMaW51eCI7IHRoZW4KKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgYmZkX2dldF9zeW50aGV0aWNfc3ltdGFiKCkgZXhpc3RzIGluIEJGRCBsaWJyYXJ5IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgYmZkX2dldF9zeW50aGV0aWNfc3ltdGFiKCkgZXhpc3RzIGluIEJGRCBsaWJyYXJ5Li4uICIgPiY2OyB9CisJcm0gLWYgdGVzdC1mb3Itc3ludGgKKwljYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8YmZkLmg+CitpbnQKK21haW4gKCkKK3sKK2FzeW1ib2wgKiBzeW50aHN5bXM7CWJmZCAqIGliZmQgPSAwOworCQkJbG9uZyBzeW50aF9jb3VudCA9IGJmZF9nZXRfc3ludGhldGljX3N5bXRhYihpYmZkLCAwLCAwLCAwLCAwLCAmc3ludGhzeW1zKTsKKwkJCWV4dGVybiBjb25zdCBiZmRfdGFyZ2V0IGJmZF9lbGY2NF9wb3dlcnBjX3ZlYzsKKwkJCWV4dGVybiBjb25zdCBiZmRfdGFyZ2V0IGJmZF9lbGY2NF9wb3dlcnBjbGVfdmVjOworCQkJY2hhciAqIHBwY19uYW1lID0gYmZkX2VsZjY0X3Bvd2VycGNfdmVjLm5hbWU7CisJCQljaGFyICogcHBjbGVfbmFtZSA9IGJmZF9lbGY2NF9wb3dlcnBjbGVfdmVjLm5hbWU7CisJCQlwcmludGYoIiVzICVzXG4iLCBwcGNfbmFtZSwgcHBjbGVfbmFtZSk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgorCSRDQyBjb25mdGVzdC4kYWNfZXh0ICRDRkxBR1MgJExERkxBR1MgJExJQlMgLW8gIHRlc3QtZm9yLXN5bnRoID4gL2Rldi9udWxsIDI+JjEKKwlpZiB0ZXN0IC1mIHRlc3QtZm9yLXN5bnRoOyB0aGVuCisJCWVjaG8gInllcyIKKwkJU1lOVEhFU0laRV9TWU1CT0xTPScxJworCWVsc2UKKwkJZWNobyAibm8iCisJCVNZTlRIRVNJWkVfU1lNQk9MUz0nMCcKKwlmaQorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFNZTlRIRVNJWkVfU1lNQk9MUyAkU1lOVEhFU0laRV9TWU1CT0xTCitfQUNFT0YKKworCXJtIC1mIHRlc3QtZm9yLXN5bnRoKgorCitmaQorYWNfZXh0PWMKK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorCisKKworCisjIE9uIENlbGwgQkUgYXJjaGl0ZWN0dXJlLCBPUHJvZmlsZSB1c2VzIGJmZF9vcGVucl9pb3ZlYyB3aGVuIHByb2Nlc3Npbmcgc29tZQorIyBTUFUgcHJvZmlsZXMuICBUbyBwYXJzZSBlbWJlZGRlZCBTUFUgRUxGIG9uIENlbGwgQkUsIE9Qcm9maWxlIHJlcXVpcmVzIGEKKyMgdmVyc2lvbiBvZiBiZmRfb3BlbnJfaW92ZWMgdGhhdCBzdXBwb3J0cyB0aGUgZWxmMzItc3B1IHRhcmdldC4KKyMgVGhpcyB2ZXJzaW9uIG9mIHRoZSBmdW5jdGlvbiBhbHNvIGhhcyBhIDd0aCBwYXJhbWV0ZXIgdGhhdCdzIGJlZW4gYWRkZWQuCisjIEZpcnN0LCB3ZSBjaGVjayBmb3IgZXhpc3RlbmNlIG9mIHRoZSBiYXNlIGJmZF9vcGVucl9pb3ZlYy4gIElmIGl0IGV4aXN0cywKKyMgd2UgdGhlbiB1c2UgYSB0ZW1wb3JhcnkgdGVzdCBwcm9ncmFtIGJlbG93IHRoYXQgcGFzc2VzIDcgYXJndW1lbnRzIHRvCisjIGJmZF9vcGVucl9pb3ZlYzsgaWYgaXQgY29tcGlsZXMgT0ssIHdlIGFzc3VtZSB3ZSBoYXZlIHRoZSByaWdodCBCRkQKKyMgbGlicmFyeSB0byBzdXBwb3J0IENlbGwgQkUgU1BVIHByb2ZpbGluZy4KKworYWNfZXh0PWMKK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGJmZF9vcGVucl9pb3ZlYyBpbiAtbGJmZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgYmZkX29wZW5yX2lvdmVjIGluIC1sYmZkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X2xpYl9iZmRfYmZkX29wZW5yX2lvdmVjK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworTElCUz0iLWxiZmQgICRMSUJTIgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIGJmZF9vcGVucl9pb3ZlYyAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIGJmZF9vcGVucl9pb3ZlYyAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9saWJfYmZkX2JmZF9vcGVucl9pb3ZlYz15ZXMKK2Vsc2UKKyAgYWNfY3ZfbGliX2JmZF9iZmRfb3BlbnJfaW92ZWM9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX2JmZF9iZmRfb3BlbnJfaW92ZWMiID4mNQorJGFzX2VjaG8gIiRhY19jdl9saWJfYmZkX2JmZF9vcGVucl9pb3ZlYyIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9iZmRfYmZkX29wZW5yX2lvdmVjIiA9IHgiInllczsgdGhlbiA6CisgIGJmZF9vcGVucl9pb3ZlY19leGlzdHM9InllcyIKK2Vsc2UKKyAgYmZkX29wZW5yX2lvdmVjX2V4aXN0cz0ibm8iCisKK2ZpCisKKworaWYgdGVzdCAiJGJmZF9vcGVucl9pb3ZlY19leGlzdHMiID0gInllcyI7IHRoZW4KKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgYmZkX29wZW5yX2lvdmVjIGhhcyBzZXZlbiBwYXJhbWV0ZXJzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgYmZkX29wZW5yX2lvdmVjIGhhcyBzZXZlbiBwYXJhbWV0ZXJzLi4uICIgPiY2OyB9CisJY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPGJmZC5oPgorCSAgI2luY2x1ZGUgPHN0ZGxpYi5oPgorCitpbnQKK21haW4gKCkKK3sKK3N0cnVjdCBiZmQgKm5iZmQgPSBiZmRfb3BlbnJfaW92ZWMoInNvbWUtZmlsZSIsICJlbGYzMi1zcHUiLAorCQkJTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCk7CisJICByZXR1cm4gMDsKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfQkZEX09QRU5SX0lPVkVDX1dJVEhfN1BBUk1TIC8qKi8iID4+Y29uZmRlZnMuaAorCisJYmZkX29wZW5faW92ZWNfNz0ieWVzIgorCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorCithY19leHQ9YworYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CisKKworYXJjaD0idW5rbm93biIKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC10YXJnZXQgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX3RhcmdldCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfdGFyZ2V0OyBhcmNoPSR3aXRodmFsCitmaQorCisKK2lmIHRlc3QgIiRhcmNoIiA9ICJjZWxsLWJlIjsgdGhlbgorICAgICAgICBpZiB0ZXN0ICIkYmZkX29wZW5faW92ZWNfNyIgPSAieWVzIjsgdGhlbgorCSAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBCRkQgbGlicmFyeSBoYXMgc3VwcG9ydCBmb3IgQ2VsbCBCcm9hZGJhbmQgRW5naW5lIFNQVSBwcm9maWxpbmciID4mNQorJGFzX2VjaG8gIiRhc19tZTogQkZEIGxpYnJhcnkgaGFzIHN1cHBvcnQgZm9yIENlbGwgQnJvYWRiYW5kIEVuZ2luZSBTUFUgcHJvZmlsaW5nIiA+JjY7fQorCWVsc2UKKwkJYXNfZm5fZXJyb3IgJD8gIkJGRCBsaWJyYXJ5IGRvZXMgbm90IHN1cHBvcnQgZWxmMzItc3B1IHRhcmdldDsgU1BVIHByb2ZpbGluZyBpcyB1bnN1cHBvcnRlZCIgIiRMSU5FTk8iIDUKKwlmaQorZmkKKworCisKKyMgQysrIHRlc3RzCisKK2FjX2V4dD1jcHAKK2FjX2NwcD0nJENYWENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ1hYIC1jICRDWFhGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ1hYIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ1hYRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jeHhfY29tcGlsZXJfZ251CisKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHBvcHQgcHJvdG90eXBlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHBvcHQgcHJvdG90eXBlLi4uICIgPiY2OyB9CitTQVZFX0NYWEZMQUdTPSRDWFhGTEFHUworQ1hYRkxBR1M9Ii1XZXJyb3IgJENYWEZMQUdTIgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHBvcHQuaD4KK2ludAorbWFpbiAoKQoreworCitpbnQgYzsgY2hhciAqKnY7Citwb3B0R2V0Q29udGV4dCgwLCBjLCB2LCAwLCAwKTsKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jeHhfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHRha2VzIGNoYXIgKioiID4mNQorJGFzX2VjaG8gInRha2VzIGNoYXIgKioiID4mNjsgfTsKK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHRha2VzIGNvbnN0IGNoYXIgKioiID4mNQorJGFzX2VjaG8gInRha2VzIGNvbnN0IGNoYXIgKioiID4mNjsgfTsKKyRhc19lY2hvICIjZGVmaW5lIENPTlNUX1BPUFQgMSIgPj5jb25mZGVmcy5oCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0NYWEZMQUdTPSIkU0FWRV9DWFhGTEFHUyIKKworCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0byB1c2UgaW5jbHVkZWQgc3N0cmVhbSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRvIHVzZSBpbmNsdWRlZCBzc3RyZWFtLi4uICIgPiY2OyB9CitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8c3N0cmVhbT4KK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2N4eF90cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH07CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9OyBPUF9DWFhGTEFHUz0iJE9QX0NYWEZMQUdTIC1JXCR7dG9wX3NyY2Rpcn0vaW5jbHVkZSIKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKworCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBiZmQgZGVmaW5lcyBib29sIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgYmZkIGRlZmluZXMgYm9vbC4uLiAiID4mNjsgfQorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPGJmZC5oPgoraW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY3h4X3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfTsKK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH07CiskYXNfZWNobyAiI2RlZmluZSBUUlVFX0ZBTFNFX0FMUkVBRFlfREVGSU5FRCAxIiA+PmNvbmZkZWZzLmgKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorCisKKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHR5cGUgb2Ygc2l6ZV90IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHR5cGUgb2Ygc2l6ZV90Li4uICIgPiY2OyB9CisJZm9yIGYgaW4gInVuc2lnbmVkIiAidW5zaWduZWQgbG9uZyI7IGRvCisKKworYWNfZXh0PWMKK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorCitTQVZFX0NGTEFHUz0kQ0ZMQUdTCitDRkxBR1M9Ii1XZXJyb3IgJENGTEFHUyIKKworY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisgICNpbmNsdWRlIDxzdGRkZWYuaD4KKworaW50CittYWluICgpCit7CisKKyAgdHlwZWRlZiB2b2lkICgqZmN0MSkoc2l6ZV90KTsKKyAgdHlwZWRlZiB2b2lkICgqZmN0MikoJGYpOworICBmY3QxIGYxID0gMDsKKyAgZmN0MiBmMiA9IDA7CisgIGlmIChmMSA9PSBmMikge30KKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIFNJWkVfVF9UWVBFPSIkZiIKK2Vsc2UKKyAgU0laRV9UX1RZUEU9IiIKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKworQ0ZMQUdTPSRTQVZFX0NGTEFHUworYWNfZXh0PWNwcAorYWNfY3BwPSckQ1hYQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDWFggLWMgJENYWEZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDWFggLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDWFhGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2N4eF9jb21waWxlcl9nbnUKKworCisJCWlmIHRlc3QgLW4gIiR7U0laRV9UX1RZUEV9IjsgdGhlbgorCQkJYnJlYWsKKwkJZmkKKwlkb25lCisJaWYgdGVzdCAtbiAiJHtTSVpFX1RfVFlQRX0iOyB0aGVuCisJCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAke1NJWkVfVF9UWVBFfSIgPiY1CiskYXNfZWNobyAiJHtTSVpFX1RfVFlQRX0iID4mNjsgfQorCWVsc2UKKwkJYXNfZm5fZXJyb3IgJD8gIm5vdCBmb3VuZCIgIiRMSU5FTk8iIDUKKwlmaQorCisKKworCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgdHlwZSBvZiBwdHJkaWZmX3QiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgdHlwZSBvZiBwdHJkaWZmX3QuLi4gIiA+JjY7IH0KKwlmb3IgZiBpbiAiaW50IiAibG9uZyI7IGRvCisKKworYWNfZXh0PWMKK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorCitTQVZFX0NGTEFHUz0kQ0ZMQUdTCitDRkxBR1M9Ii1XZXJyb3IgJENGTEFHUyIKKworY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisgICNpbmNsdWRlIDxzdGRkZWYuaD4KKworaW50CittYWluICgpCit7CisKKyAgdHlwZWRlZiB2b2lkICgqZmN0MSkocHRyZGlmZl90KTsKKyAgdHlwZWRlZiB2b2lkICgqZmN0MikoJGYpOworICBmY3QxIGYxID0gMDsKKyAgZmN0MiBmMiA9IDA7CisgIGlmIChmMSA9PSBmMikge30KKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIFBUUkRJRkZfVF9UWVBFPSIkZiIKK2Vsc2UKKyAgUFRSRElGRl9UX1RZUEU9IiIKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKworQ0ZMQUdTPSRTQVZFX0NGTEFHUworYWNfZXh0PWNwcAorYWNfY3BwPSckQ1hYQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDWFggLWMgJENYWEZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDWFggLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDWFhGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2N4eF9jb21waWxlcl9nbnUKKworCisJCWlmIHRlc3QgLW4gIiR7UFRSRElGRl9UX1RZUEV9IjsgdGhlbgorCQkJYnJlYWsKKwkJZmkKKwlkb25lCisJaWYgdGVzdCAtbiAiJHtQVFJESUZGX1RfVFlQRX0iOyB0aGVuCisJCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAke1BUUkRJRkZfVF9UWVBFfSIgPiY1CiskYXNfZWNobyAiJHtQVFJESUZGX1RfVFlQRX0iID4mNjsgfQorCWVsc2UKKwkJYXNfZm5fZXJyb3IgJD8gIm5vdCBmb3VuZCIgIiRMSU5FTk8iIDUKKwlmaQorCisKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBYIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBYLi4uICIgPiY2OyB9CisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC14IHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF94K3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF94OworZmkKKworIyAkaGF2ZV94IGlzIGB5ZXMnLCBgbm8nLCBgZGlzYWJsZWQnLCBvciBlbXB0eSB3aGVuIHdlIGRvIG5vdCB5ZXQga25vdy4KK2lmIHRlc3QgIngkd2l0aF94IiA9IHhubzsgdGhlbgorICAjIFRoZSB1c2VyIGV4cGxpY2l0bHkgZGlzYWJsZWQgWC4KKyAgaGF2ZV94PWRpc2FibGVkCitlbHNlCisgIGNhc2UgJHhfaW5jbHVkZXMsJHhfbGlicmFyaWVzIGluICMoCisgICAgKlwnKikgYXNfZm5fZXJyb3IgJD8gImNhbm5vdCB1c2UgWCBkaXJlY3RvcnkgbmFtZXMgY29udGFpbmluZyAnIiAiJExJTkVOTyIgNSA7OyAjKAorICAgICosTk9ORSB8IE5PTkUsKikgaWYgdGVzdCAiJHthY19jdl9oYXZlX3grc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICAjIE9uZSBvciBib3RoIG9mIHRoZSB2YXJzIGFyZSBub3Qgc2V0LCBhbmQgdGhlcmUgaXMgbm8gY2FjaGVkIHZhbHVlLgorYWNfeF9pbmNsdWRlcz1ubyBhY194X2xpYnJhcmllcz1ubworcm0gLWYgLXIgY29uZnRlc3QuZGlyCitpZiBta2RpciBjb25mdGVzdC5kaXI7IHRoZW4KKyAgY2QgY29uZnRlc3QuZGlyCisgIGNhdCA+SW1ha2VmaWxlIDw8J19BQ0VPRicKK2luY3Jvb3Q6CisJQGVjaG8gaW5jcm9vdD0nJHtJTkNST09UfScKK3VzcmxpYmRpcjoKKwlAZWNobyB1c3JsaWJkaXI9JyR7VVNSTElCRElSfScKK2xpYmRpcjoKKwlAZWNobyBsaWJkaXI9JyR7TElCRElSfScKK19BQ0VPRgorICBpZiAoZXhwb3J0IENDOyAke1hNS01GLXhta21mfSkgPi9kZXYvbnVsbCAyPi9kZXYvbnVsbCAmJiB0ZXN0IC1mIE1ha2VmaWxlOyB0aGVuCisgICAgIyBHTlUgbWFrZSBzb21ldGltZXMgcHJpbnRzICJtYWtlWzFdOiBFbnRlcmluZyAuLi4iLCB3aGljaCB3b3VsZCBjb25mdXNlIHVzLgorICAgIGZvciBhY192YXIgaW4gaW5jcm9vdCB1c3JsaWJkaXIgbGliZGlyOyBkbworICAgICAgZXZhbCAiYWNfaW1fJGFjX3Zhcj1cYFwke01BS0UtbWFrZX0gJGFjX3ZhciAyPi9kZXYvbnVsbCB8IHNlZCAtbiAncy9eJGFjX3Zhcj0vL3AnXGAiCisgICAgZG9uZQorICAgICMgT3BlbiBXaW5kb3dzIHhta21mIHJlcG9ydGVkbHkgc2V0cyBMSUJESVIgaW5zdGVhZCBvZiBVU1JMSUJESVIuCisgICAgZm9yIGFjX2V4dGVuc2lvbiBpbiBhIHNvIHNsIGR5bGliIGxhIGRsbDsgZG8KKyAgICAgIGlmIHRlc3QgISAtZiAiJGFjX2ltX3VzcmxpYmRpci9saWJYMTEuJGFjX2V4dGVuc2lvbiIgJiYKKwkgdGVzdCAtZiAiJGFjX2ltX2xpYmRpci9saWJYMTEuJGFjX2V4dGVuc2lvbiI7IHRoZW4KKwlhY19pbV91c3JsaWJkaXI9JGFjX2ltX2xpYmRpcjsgYnJlYWsKKyAgICAgIGZpCisgICAgZG9uZQorICAgICMgU2NyZWVuIG91dCBib2d1cyB2YWx1ZXMgZnJvbSB0aGUgaW1ha2UgY29uZmlndXJhdGlvbi4gIFRoZXkgYXJlCisgICAgIyBib2d1cyBib3RoIGJlY2F1c2UgdGhleSBhcmUgdGhlIGRlZmF1bHQgYW55d2F5LCBhbmQgYmVjYXVzZQorICAgICMgdXNpbmcgdGhlbSB3b3VsZCBicmVhayBnY2Mgb24gc3lzdGVtcyB3aGVyZSBpdCBuZWVkcyBmaXhlZCBpbmNsdWRlcy4KKyAgICBjYXNlICRhY19pbV9pbmNyb290IGluCisJL3Vzci9pbmNsdWRlKSBhY194X2luY2x1ZGVzPSA7OworCSopIHRlc3QgLWYgIiRhY19pbV9pbmNyb290L1gxMS9Yb3MuaCIgJiYgYWNfeF9pbmNsdWRlcz0kYWNfaW1faW5jcm9vdDs7CisgICAgZXNhYworICAgIGNhc2UgJGFjX2ltX3VzcmxpYmRpciBpbgorCS91c3IvbGliIHwgL3Vzci9saWI2NCB8IC9saWIgfCAvbGliNjQpIDs7CisJKikgdGVzdCAtZCAiJGFjX2ltX3VzcmxpYmRpciIgJiYgYWNfeF9saWJyYXJpZXM9JGFjX2ltX3VzcmxpYmRpciA7OworICAgIGVzYWMKKyAgZmkKKyAgY2QgLi4KKyAgcm0gLWYgLXIgY29uZnRlc3QuZGlyCitmaQorCisjIFN0YW5kYXJkIHNldCBvZiBjb21tb24gZGlyZWN0b3JpZXMgZm9yIFggaGVhZGVycy4KKyMgQ2hlY2sgWDExIGJlZm9yZSBYMTFSbiBiZWNhdXNlIGl0IGlzIG9mdGVuIGEgc3ltbGluayB0byB0aGUgY3VycmVudCByZWxlYXNlLgorYWNfeF9oZWFkZXJfZGlycz0nCisvdXNyL1gxMS9pbmNsdWRlCisvdXNyL1gxMVI3L2luY2x1ZGUKKy91c3IvWDExUjYvaW5jbHVkZQorL3Vzci9YMTFSNS9pbmNsdWRlCisvdXNyL1gxMVI0L2luY2x1ZGUKKworL3Vzci9pbmNsdWRlL1gxMQorL3Vzci9pbmNsdWRlL1gxMVI3CisvdXNyL2luY2x1ZGUvWDExUjYKKy91c3IvaW5jbHVkZS9YMTFSNQorL3Vzci9pbmNsdWRlL1gxMVI0CisKKy91c3IvbG9jYWwvWDExL2luY2x1ZGUKKy91c3IvbG9jYWwvWDExUjcvaW5jbHVkZQorL3Vzci9sb2NhbC9YMTFSNi9pbmNsdWRlCisvdXNyL2xvY2FsL1gxMVI1L2luY2x1ZGUKKy91c3IvbG9jYWwvWDExUjQvaW5jbHVkZQorCisvdXNyL2xvY2FsL2luY2x1ZGUvWDExCisvdXNyL2xvY2FsL2luY2x1ZGUvWDExUjcKKy91c3IvbG9jYWwvaW5jbHVkZS9YMTFSNgorL3Vzci9sb2NhbC9pbmNsdWRlL1gxMVI1CisvdXNyL2xvY2FsL2luY2x1ZGUvWDExUjQKKworL3Vzci9YMzg2L2luY2x1ZGUKKy91c3IveDM4Ni9pbmNsdWRlCisvdXNyL1hGcmVlODYvaW5jbHVkZS9YMTEKKworL3Vzci9pbmNsdWRlCisvdXNyL2xvY2FsL2luY2x1ZGUKKy91c3IvdW5zdXBwb3J0ZWQvaW5jbHVkZQorL3Vzci9hdGhlbmEvaW5jbHVkZQorL3Vzci9sb2NhbC94MTFyNS9pbmNsdWRlCisvdXNyL2xwcC9YYW1wbGVzL2luY2x1ZGUKKworL3Vzci9vcGVud2luL2luY2x1ZGUKKy91c3Ivb3Blbndpbi9zaGFyZS9pbmNsdWRlJworCitpZiB0ZXN0ICIkYWNfeF9pbmNsdWRlcyIgPSBubzsgdGhlbgorICAjIEd1ZXNzIHdoZXJlIHRvIGZpbmQgaW5jbHVkZSBmaWxlcywgYnkgbG9va2luZyBmb3IgWGxpYi5oLgorICAjIEZpcnN0LCB0cnkgdXNpbmcgdGhhdCBmaWxlIHdpdGggbm8gc3BlY2lhbCBkaXJlY3Rvcnkgc3BlY2lmaWVkLgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8WDExL1hsaWIuaD4KK19BQ0VPRgoraWYgYWNfZm5fY3h4X3RyeV9jcHAgIiRMSU5FTk8iOyB0aGVuIDoKKyAgIyBXZSBjYW4gY29tcGlsZSB1c2luZyBYIGhlYWRlcnMgd2l0aCBubyBzcGVjaWFsIGluY2x1ZGUgZGlyZWN0b3J5LgorYWNfeF9pbmNsdWRlcz0KK2Vsc2UKKyAgZm9yIGFjX2RpciBpbiAkYWNfeF9oZWFkZXJfZGlyczsgZG8KKyAgaWYgdGVzdCAtciAiJGFjX2Rpci9YMTEvWGxpYi5oIjsgdGhlbgorICAgIGFjX3hfaW5jbHVkZXM9JGFjX2RpcgorICAgIGJyZWFrCisgIGZpCitkb25lCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LmkgY29uZnRlc3QuJGFjX2V4dAorZmkgIyAkYWNfeF9pbmNsdWRlcyA9IG5vCisKK2lmIHRlc3QgIiRhY194X2xpYnJhcmllcyIgPSBubzsgdGhlbgorICAjIENoZWNrIGZvciB0aGUgbGlicmFyaWVzLgorICAjIFNlZSBpZiB3ZSBmaW5kIHRoZW0gd2l0aG91dCBhbnkgc3BlY2lhbCBvcHRpb25zLgorICAjIERvbid0IGFkZCB0byAkTElCUyBwZXJtYW5lbnRseS4KKyAgYWNfc2F2ZV9MSUJTPSRMSUJTCisgIExJQlM9Ii1sWDExICRMSUJTIgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8WDExL1hsaWIuaD4KK2ludAorbWFpbiAoKQoreworWHJtSW5pdGlhbGl6ZSAoKQorICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jeHhfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgTElCUz0kYWNfc2F2ZV9MSUJTCisjIFdlIGNhbiBsaW5rIFggcHJvZ3JhbXMgd2l0aCBubyBzcGVjaWFsIGxpYnJhcnkgcGF0aC4KK2FjX3hfbGlicmFyaWVzPQorZWxzZQorICBMSUJTPSRhY19zYXZlX0xJQlMKK2ZvciBhY19kaXIgaW4gYCRhc19lY2hvICIkYWNfeF9pbmNsdWRlcyAkYWNfeF9oZWFkZXJfZGlycyIgfCBzZWQgcy9pbmNsdWRlL2xpYi9nYAorZG8KKyAgIyBEb24ndCBldmVuIGF0dGVtcHQgdGhlIGhhaXIgb2YgdHJ5aW5nIHRvIGxpbmsgYW4gWCBwcm9ncmFtIQorICBmb3IgYWNfZXh0ZW5zaW9uIGluIGEgc28gc2wgZHlsaWIgbGEgZGxsOyBkbworICAgIGlmIHRlc3QgLXIgIiRhY19kaXIvbGliWDExLiRhY19leHRlbnNpb24iOyB0aGVuCisgICAgICBhY194X2xpYnJhcmllcz0kYWNfZGlyCisgICAgICBicmVhayAyCisgICAgZmkKKyAgZG9uZQorZG9uZQorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitmaSAjICRhY194X2xpYnJhcmllcyA9IG5vCisKK2Nhc2UgJGFjX3hfaW5jbHVkZXMsJGFjX3hfbGlicmFyaWVzIGluICMoCisgIG5vLCogfCAqLG5vIHwgKlwnKikKKyAgICAjIERpZG4ndCBmaW5kIFgsIG9yIGEgZGlyZWN0b3J5IGhhcyAiJyIgaW4gaXRzIG5hbWUuCisgICAgYWNfY3ZfaGF2ZV94PSJoYXZlX3g9bm8iOzsgIygKKyAgKikKKyAgICAjIFJlY29yZCB3aGVyZSB3ZSBmb3VuZCBYIGZvciB0aGUgY2FjaGUuCisgICAgYWNfY3ZfaGF2ZV94PSJoYXZlX3g9eWVzXAorCWFjX3hfaW5jbHVkZXM9JyRhY194X2luY2x1ZGVzJ1wKKwlhY194X2xpYnJhcmllcz0nJGFjX3hfbGlicmFyaWVzJyIKK2VzYWMKK2ZpCis7OyAjKAorICAgICopIGhhdmVfeD15ZXM7OworICBlc2FjCisgIGV2YWwgIiRhY19jdl9oYXZlX3giCitmaSAjICR3aXRoX3ggIT0gbm8KKworaWYgdGVzdCAiJGhhdmVfeCIgIT0geWVzOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkaGF2ZV94IiA+JjUKKyRhc19lY2hvICIkaGF2ZV94IiA+JjY7IH0KKyAgbm9feD15ZXMKK2Vsc2UKKyAgIyBJZiBlYWNoIG9mIHRoZSB2YWx1ZXMgd2FzIG9uIHRoZSBjb21tYW5kIGxpbmUsIGl0IG92ZXJyaWRlcyBlYWNoIGd1ZXNzLgorICB0ZXN0ICJ4JHhfaW5jbHVkZXMiID0geE5PTkUgJiYgeF9pbmNsdWRlcz0kYWNfeF9pbmNsdWRlcworICB0ZXN0ICJ4JHhfbGlicmFyaWVzIiA9IHhOT05FICYmIHhfbGlicmFyaWVzPSRhY194X2xpYnJhcmllcworICAjIFVwZGF0ZSB0aGUgY2FjaGUgdmFsdWUgdG8gcmVmbGVjdCB0aGUgY29tbWFuZCBsaW5lIHZhbHVlcy4KKyAgYWNfY3ZfaGF2ZV94PSJoYXZlX3g9eWVzXAorCWFjX3hfaW5jbHVkZXM9JyR4X2luY2x1ZGVzJ1wKKwlhY194X2xpYnJhcmllcz0nJHhfbGlicmFyaWVzJyIKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IGxpYnJhcmllcyAkeF9saWJyYXJpZXMsIGhlYWRlcnMgJHhfaW5jbHVkZXMiID4mNQorJGFzX2VjaG8gImxpYnJhcmllcyAkeF9saWJyYXJpZXMsIGhlYWRlcnMgJHhfaW5jbHVkZXMiID4mNjsgfQorZmkKKworaWYgdGVzdCAiJG5vX3giID0geWVzOyB0aGVuCisgICMgTm90IGFsbCBwcm9ncmFtcyBtYXkgdXNlIHRoaXMgc3ltYm9sLCBidXQgaXQgZG9lcyBub3QgaHVydCB0byBkZWZpbmUgaXQuCisKKyRhc19lY2hvICIjZGVmaW5lIFhfRElTUExBWV9NSVNTSU5HIDEiID4+Y29uZmRlZnMuaAorCisgIFhfQ0ZMQUdTPSBYX1BSRV9MSUJTPSBYX0xJQlM9IFhfRVhUUkFfTElCUz0KK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJHhfaW5jbHVkZXMiOyB0aGVuCisgICAgWF9DRkxBR1M9IiRYX0NGTEFHUyAtSSR4X2luY2x1ZGVzIgorICBmaQorCisgICMgSXQgd291bGQgYWxzbyBiZSBuaWNlIHRvIGRvIHRoaXMgZm9yIGFsbCAtTCBvcHRpb25zLCBub3QganVzdCB0aGlzIG9uZS4KKyAgaWYgdGVzdCAtbiAiJHhfbGlicmFyaWVzIjsgdGhlbgorICAgIFhfTElCUz0iJFhfTElCUyAtTCR4X2xpYnJhcmllcyIKKyAgICAjIEZvciBTb2xhcmlzOyBzb21lIHZlcnNpb25zIG9mIFN1biBDQyByZXF1aXJlIGEgc3BhY2UgYWZ0ZXIgLVIgYW5kCisgICAgIyBvdGhlcnMgcmVxdWlyZSBubyBzcGFjZS4gIFdvcmRzIGFyZSBub3Qgc3VmZmljaWVudCAuIC4gLiAuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIC1SIG11c3QgYmUgZm9sbG93ZWQgYnkgYSBzcGFjZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIC1SIG11c3QgYmUgZm9sbG93ZWQgYnkgYSBzcGFjZS4uLiAiID4mNjsgfQorICAgIGFjX3hzYXZlX0xJQlM9JExJQlM7IExJQlM9IiRMSUJTIC1SJHhfbGlicmFyaWVzIgorICAgIGFjX3hzYXZlX2N4eF93ZXJyb3JfZmxhZz0kYWNfY3h4X3dlcnJvcl9mbGFnCisgICAgYWNfY3h4X3dlcnJvcl9mbGFnPXllcworICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY3h4X3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgICAgIFhfTElCUz0iJFhfTElCUyAtUiR4X2xpYnJhcmllcyIKK2Vsc2UKKyAgTElCUz0iJGFjX3hzYXZlX0xJQlMgLVIgJHhfbGlicmFyaWVzIgorICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY3h4X3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisJICBYX0xJQlM9IiRYX0xJQlMgLVIgJHhfbGlicmFyaWVzIgorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbmVpdGhlciB3b3JrcyIgPiY1CiskYXNfZWNobyAibmVpdGhlciB3b3JrcyIgPiY2OyB9CitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAgIGFjX2N4eF93ZXJyb3JfZmxhZz0kYWNfeHNhdmVfY3h4X3dlcnJvcl9mbGFnCisgICAgTElCUz0kYWNfeHNhdmVfTElCUworICBmaQorCisgICMgQ2hlY2sgZm9yIHN5c3RlbS1kZXBlbmRlbnQgbGlicmFyaWVzIFggcHJvZ3JhbXMgbXVzdCBsaW5rIHdpdGguCisgICMgRG8gdGhpcyBiZWZvcmUgY2hlY2tpbmcgZm9yIHRoZSBzeXN0ZW0taW5kZXBlbmRlbnQgUjYgbGlicmFyaWVzCisgICMgKC1sSUNFKSwgc2luY2Ugd2UgbWF5IG5lZWQgLWxzb2NrZXQgb3Igd2hhdGV2ZXIgZm9yIFggbGlua2luZy4KKworICBpZiB0ZXN0ICIkSVNDIiA9IHllczsgdGhlbgorICAgIFhfRVhUUkFfTElCUz0iJFhfRVhUUkFfTElCUyAtbG5zbF9zIC1saW5ldCIKKyAgZWxzZQorICAgICMgTWFydHluIEpvaG5zb24gc2F5cyB0aGlzIGlzIG5lZWRlZCBmb3IgVWx0cml4LCBpZiB0aGUgWAorICAgICMgbGlicmFyaWVzIHdlcmUgYnVpbHQgd2l0aCBERUNuZXQgc3VwcG9ydC4gIEFuZCBLYXJsIEJlcnJ5IHNheXMKKyAgICAjIHRoZSBBbHBoYSBuZWVkcyBkbmV0X3N0dWIgKGRuZXQgZG9lcyBub3QgZXhpc3QpLgorICAgIGFjX3hzYXZlX0xJQlM9IiRMSUJTIjsgTElCUz0iJExJQlMgJFhfTElCUyAtbFgxMSIKKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgWE9wZW5EaXNwbGF5ICgpOworaW50CittYWluICgpCit7CityZXR1cm4gWE9wZW5EaXNwbGF5ICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jeHhfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKworZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBkbmV0X250b2EgaW4gLWxkbmV0IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBkbmV0X250b2EgaW4gLWxkbmV0Li4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X2xpYl9kbmV0X2RuZXRfbnRvYStzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKK0xJQlM9Ii1sZG5ldCAgJExJQlMiCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgZG5ldF9udG9hICgpOworaW50CittYWluICgpCit7CityZXR1cm4gZG5ldF9udG9hICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jeHhfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfbGliX2RuZXRfZG5ldF9udG9hPXllcworZWxzZQorICBhY19jdl9saWJfZG5ldF9kbmV0X250b2E9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX2RuZXRfZG5ldF9udG9hIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfbGliX2RuZXRfZG5ldF9udG9hIiA+JjY7IH0KK2lmIHRlc3QgIngkYWNfY3ZfbGliX2RuZXRfZG5ldF9udG9hIiA9IHgiInllczsgdGhlbiA6CisgIFhfRVhUUkFfTElCUz0iJFhfRVhUUkFfTElCUyAtbGRuZXQiCitmaQorCisgICAgaWYgdGVzdCAkYWNfY3ZfbGliX2RuZXRfZG5ldF9udG9hID0gbm87IHRoZW4KKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGRuZXRfbnRvYSBpbiAtbGRuZXRfc3R1YiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgZG5ldF9udG9hIGluIC1sZG5ldF9zdHViLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X2xpYl9kbmV0X3N0dWJfZG5ldF9udG9hK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworTElCUz0iLWxkbmV0X3N0dWIgICRMSUJTIgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIGRuZXRfbnRvYSAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIGRuZXRfbnRvYSAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY3h4X3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2xpYl9kbmV0X3N0dWJfZG5ldF9udG9hPXllcworZWxzZQorICBhY19jdl9saWJfZG5ldF9zdHViX2RuZXRfbnRvYT1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfZG5ldF9zdHViX2RuZXRfbnRvYSIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl9kbmV0X3N0dWJfZG5ldF9udG9hIiA+JjY7IH0KK2lmIHRlc3QgIngkYWNfY3ZfbGliX2RuZXRfc3R1Yl9kbmV0X250b2EiID0geCIieWVzOyB0aGVuIDoKKyAgWF9FWFRSQV9MSUJTPSIkWF9FWFRSQV9MSUJTIC1sZG5ldF9zdHViIgorZmkKKworICAgIGZpCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICBMSUJTPSIkYWNfeHNhdmVfTElCUyIKKworICAgICMgbXNoQGNpcy51ZmwuZWR1IHNheXMgLWxuc2wgKGFuZCAtbHNvY2tldCkgYXJlIG5lZWRlZCBmb3IgaGlzIDM4Ni9BVCwKKyAgICAjIHRvIGdldCB0aGUgU3lzViB0cmFuc3BvcnQgZnVuY3Rpb25zLgorICAgICMgQ2hhZCBSLiBMYXJzb24gc2F5cyB0aGUgUHlyYW1pcyBNSVMtRVMgcnVubmluZyBEQy9PU3ggKFNWUjQpCisgICAgIyBuZWVkcyAtbG5zbC4KKyAgICAjIFRoZSBuc2wgbGlicmFyeSBwcmV2ZW50cyBwcm9ncmFtcyBmcm9tIG9wZW5pbmcgdGhlIFggZGlzcGxheQorICAgICMgb24gSXJpeCA1LjIsIGFjY29yZGluZyB0byBULkUuIERpY2tleS4KKyAgICAjIFRoZSBmdW5jdGlvbnMgZ2V0aG9zdGJ5bmFtZSwgZ2V0c2VydmJ5bmFtZSwgYW5kIGluZXRfYWRkciBhcmUKKyAgICAjIGluIC1sYnNkIG9uIEx5bnhPUyAzLjAuMS9pMzg2LCBhY2NvcmRpbmcgdG8gTGFycyBIZWNraW5nLgorICAgIGFjX2ZuX2N4eF9jaGVja19mdW5jICIkTElORU5PIiAiZ2V0aG9zdGJ5bmFtZSIgImFjX2N2X2Z1bmNfZ2V0aG9zdGJ5bmFtZSIKK2lmIHRlc3QgIngkYWNfY3ZfZnVuY19nZXRob3N0YnluYW1lIiA9IHgiInllczsgdGhlbiA6CisKK2ZpCisKKyAgICBpZiB0ZXN0ICRhY19jdl9mdW5jX2dldGhvc3RieW5hbWUgPSBubzsgdGhlbgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgZ2V0aG9zdGJ5bmFtZSBpbiAtbG5zbCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgZ2V0aG9zdGJ5bmFtZSBpbiAtbG5zbC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9saWJfbnNsX2dldGhvc3RieW5hbWUrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbG5zbCAgJExJQlMiCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgZ2V0aG9zdGJ5bmFtZSAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIGdldGhvc3RieW5hbWUgKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2N4eF90cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9saWJfbnNsX2dldGhvc3RieW5hbWU9eWVzCitlbHNlCisgIGFjX2N2X2xpYl9uc2xfZ2V0aG9zdGJ5bmFtZT1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfbnNsX2dldGhvc3RieW5hbWUiID4mNQorJGFzX2VjaG8gIiRhY19jdl9saWJfbnNsX2dldGhvc3RieW5hbWUiID4mNjsgfQoraWYgdGVzdCAieCRhY19jdl9saWJfbnNsX2dldGhvc3RieW5hbWUiID0geCIieWVzOyB0aGVuIDoKKyAgWF9FWFRSQV9MSUJTPSIkWF9FWFRSQV9MSUJTIC1sbnNsIgorZmkKKworICAgICAgaWYgdGVzdCAkYWNfY3ZfbGliX25zbF9nZXRob3N0YnluYW1lID0gbm87IHRoZW4KKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBnZXRob3N0YnluYW1lIGluIC1sYnNkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBnZXRob3N0YnluYW1lIGluIC1sYnNkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X2xpYl9ic2RfZ2V0aG9zdGJ5bmFtZStzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKK0xJQlM9Ii1sYnNkICAkTElCUyIKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBnZXRob3N0YnluYW1lICgpOworaW50CittYWluICgpCit7CityZXR1cm4gZ2V0aG9zdGJ5bmFtZSAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY3h4X3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2xpYl9ic2RfZ2V0aG9zdGJ5bmFtZT15ZXMKK2Vsc2UKKyAgYWNfY3ZfbGliX2JzZF9nZXRob3N0YnluYW1lPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9ic2RfZ2V0aG9zdGJ5bmFtZSIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl9ic2RfZ2V0aG9zdGJ5bmFtZSIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9ic2RfZ2V0aG9zdGJ5bmFtZSIgPSB4IiJ5ZXM7IHRoZW4gOgorICBYX0VYVFJBX0xJQlM9IiRYX0VYVFJBX0xJQlMgLWxic2QiCitmaQorCisgICAgICBmaQorICAgIGZpCisKKyAgICAjIGxpZWRlckBza3lsZXIubWF2ZC5ob25leXdlbGwuY29tIHNheXMgd2l0aG91dCAtbHNvY2tldCwKKyAgICAjIHNvY2tldC9zZXRzb2Nrb3B0IGFuZCBvdGhlciByb3V0aW5lcyBhcmUgdW5kZWZpbmVkIHVuZGVyIFNDTyBPRFQKKyAgICAjIDIuMC4gIEJ1dCAtbHNvY2tldCBpcyBicm9rZW4gb24gSVJJWCA1LjIgKGFuZCBpcyBub3QgbmVjZXNzYXJ5CisgICAgIyBvbiBsYXRlciB2ZXJzaW9ucyksIHNheXMgU2ltb24gTGVpbmVuOiBpdCBjb250YWlucyBnZXRob3N0YnkqCisgICAgIyB2YXJpYW50cyB0aGF0IGRvbid0IHVzZSB0aGUgbmFtZSBzZXJ2ZXIgKG9yIHNvbWV0aGluZykuICAtbHNvY2tldAorICAgICMgbXVzdCBiZSBnaXZlbiBiZWZvcmUgLWxuc2wgaWYgYm90aCBhcmUgbmVlZGVkLiAgV2UgYXNzdW1lIHRoYXQKKyAgICAjIGlmIGNvbm5lY3QgbmVlZHMgLWxuc2wsIHNvIGRvZXMgZ2V0aG9zdGJ5bmFtZS4KKyAgICBhY19mbl9jeHhfY2hlY2tfZnVuYyAiJExJTkVOTyIgImNvbm5lY3QiICJhY19jdl9mdW5jX2Nvbm5lY3QiCitpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfY29ubmVjdCIgPSB4IiJ5ZXM7IHRoZW4gOgorCitmaQorCisgICAgaWYgdGVzdCAkYWNfY3ZfZnVuY19jb25uZWN0ID0gbm87IHRoZW4KKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGNvbm5lY3QgaW4gLWxzb2NrZXQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGNvbm5lY3QgaW4gLWxzb2NrZXQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfbGliX3NvY2tldF9jb25uZWN0K3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworTElCUz0iLWxzb2NrZXQgJFhfRVhUUkFfTElCUyAkTElCUyIKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBjb25uZWN0ICgpOworaW50CittYWluICgpCit7CityZXR1cm4gY29ubmVjdCAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY3h4X3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2xpYl9zb2NrZXRfY29ubmVjdD15ZXMKK2Vsc2UKKyAgYWNfY3ZfbGliX3NvY2tldF9jb25uZWN0PW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9zb2NrZXRfY29ubmVjdCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl9zb2NrZXRfY29ubmVjdCIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9zb2NrZXRfY29ubmVjdCIgPSB4IiJ5ZXM7IHRoZW4gOgorICBYX0VYVFJBX0xJQlM9Ii1sc29ja2V0ICRYX0VYVFJBX0xJQlMiCitmaQorCisgICAgZmkKKworICAgICMgR3VpbGxlcm1vIEdvbWV6IHNheXMgLWxwb3NpeCBpcyBuZWNlc3Nhcnkgb24gQS9VWC4KKyAgICBhY19mbl9jeHhfY2hlY2tfZnVuYyAiJExJTkVOTyIgInJlbW92ZSIgImFjX2N2X2Z1bmNfcmVtb3ZlIgoraWYgdGVzdCAieCRhY19jdl9mdW5jX3JlbW92ZSIgPSB4IiJ5ZXM7IHRoZW4gOgorCitmaQorCisgICAgaWYgdGVzdCAkYWNfY3ZfZnVuY19yZW1vdmUgPSBubzsgdGhlbgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgcmVtb3ZlIGluIC1scG9zaXgiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHJlbW92ZSBpbiAtbHBvc2l4Li4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X2xpYl9wb3NpeF9yZW1vdmUrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbHBvc2l4ICAkTElCUyIKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciByZW1vdmUgKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiByZW1vdmUgKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2N4eF90cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9saWJfcG9zaXhfcmVtb3ZlPXllcworZWxzZQorICBhY19jdl9saWJfcG9zaXhfcmVtb3ZlPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9wb3NpeF9yZW1vdmUiID4mNQorJGFzX2VjaG8gIiRhY19jdl9saWJfcG9zaXhfcmVtb3ZlIiA+JjY7IH0KK2lmIHRlc3QgIngkYWNfY3ZfbGliX3Bvc2l4X3JlbW92ZSIgPSB4IiJ5ZXM7IHRoZW4gOgorICBYX0VYVFJBX0xJQlM9IiRYX0VYVFJBX0xJQlMgLWxwb3NpeCIKK2ZpCisKKyAgICBmaQorCisgICAgIyBCU0RJIEJTRC9PUyAyLjEgbmVlZHMgLWxpcGMgZm9yIFhPcGVuRGlzcGxheS4KKyAgICBhY19mbl9jeHhfY2hlY2tfZnVuYyAiJExJTkVOTyIgInNobWF0IiAiYWNfY3ZfZnVuY19zaG1hdCIKK2lmIHRlc3QgIngkYWNfY3ZfZnVuY19zaG1hdCIgPSB4IiJ5ZXM7IHRoZW4gOgorCitmaQorCisgICAgaWYgdGVzdCAkYWNfY3ZfZnVuY19zaG1hdCA9IG5vOyB0aGVuCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBzaG1hdCBpbiAtbGlwYyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3Igc2htYXQgaW4gLWxpcGMuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfbGliX2lwY19zaG1hdCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKK0xJQlM9Ii1saXBjICAkTElCUyIKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBzaG1hdCAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIHNobWF0ICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jeHhfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfbGliX2lwY19zaG1hdD15ZXMKK2Vsc2UKKyAgYWNfY3ZfbGliX2lwY19zaG1hdD1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfaXBjX3NobWF0IiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfbGliX2lwY19zaG1hdCIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9pcGNfc2htYXQiID0geCIieWVzOyB0aGVuIDoKKyAgWF9FWFRSQV9MSUJTPSIkWF9FWFRSQV9MSUJTIC1saXBjIgorZmkKKworICAgIGZpCisgIGZpCisKKyAgIyBDaGVjayBmb3IgbGlicmFyaWVzIHRoYXQgWDExUjYgWHQvWGF3IHByb2dyYW1zIG5lZWQuCisgIGFjX3NhdmVfTERGTEFHUz0kTERGTEFHUworICB0ZXN0IC1uICIkeF9saWJyYXJpZXMiICYmIExERkxBR1M9IiRMREZMQUdTIC1MJHhfbGlicmFyaWVzIgorICAjIFNNIG5lZWRzIElDRSB0byAoZHluYW1pY2FsbHkpIGxpbmsgdW5kZXIgU3VuT1MgNC54IChzbyB3ZSBoYXZlIHRvCisgICMgY2hlY2sgZm9yIElDRSBmaXJzdCksIGJ1dCB3ZSBtdXN0IGxpbmsgaW4gdGhlIG9yZGVyIC1sU00gLWxJQ0Ugb3IKKyAgIyB3ZSBnZXQgdW5kZWZpbmVkIHN5bWJvbHMuICBTbyBhc3N1bWUgd2UgaGF2ZSBTTSBpZiB3ZSBoYXZlIElDRS4KKyAgIyBUaGVzZSBoYXZlIHRvIGJlIGxpbmtlZCB3aXRoIGJlZm9yZSAtbFgxMSwgdW5saWtlIHRoZSBvdGhlcgorICAjIGxpYnJhcmllcyB3ZSBjaGVjayBmb3IgYmVsb3csIHNvIHVzZSBhIGRpZmZlcmVudCB2YXJpYWJsZS4KKyAgIyBKb2huIEludGVycmFudGUsIEthcmwgQmVycnkKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgSWNlQ29ubmVjdGlvbk51bWJlciBpbiAtbElDRSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgSWNlQ29ubmVjdGlvbk51bWJlciBpbiAtbElDRS4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9saWJfSUNFX0ljZUNvbm5lY3Rpb25OdW1iZXIrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbElDRSAkWF9FWFRSQV9MSUJTICRMSUJTIgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIEljZUNvbm5lY3Rpb25OdW1iZXIgKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBJY2VDb25uZWN0aW9uTnVtYmVyICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jeHhfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfbGliX0lDRV9JY2VDb25uZWN0aW9uTnVtYmVyPXllcworZWxzZQorICBhY19jdl9saWJfSUNFX0ljZUNvbm5lY3Rpb25OdW1iZXI9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX0lDRV9JY2VDb25uZWN0aW9uTnVtYmVyIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfbGliX0lDRV9JY2VDb25uZWN0aW9uTnVtYmVyIiA+JjY7IH0KK2lmIHRlc3QgIngkYWNfY3ZfbGliX0lDRV9JY2VDb25uZWN0aW9uTnVtYmVyIiA9IHgiInllczsgdGhlbiA6CisgIFhfUFJFX0xJQlM9IiRYX1BSRV9MSUJTIC1sU00gLWxJQ0UiCitmaQorCisgIExERkxBR1M9JGFjX3NhdmVfTERGTEFHUworCitmaQorCitPUklHX1hfU0FWRV9MSUJTPSIkTElCUyIKK0xJQlM9IiRYX1BSRV9MSUJTICRMSUJTICRYX0xJQlMgLWxYMTEgJFhfRVhUUkFfTElCUyIKK1hfTElCUz0iJExJQlMiCisKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWd1aSB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9ndWkrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9ndWk7CitlbHNlCisgIGVuYWJsZV9ndWk9cXQzCitmaQorCisKK2lmIHRlc3QgIngkZW5hYmxlX2d1aSIgID0gInhxdDMiICB8fCB0ZXN0ICJ4JGVuYWJsZV9ndWkiICA9ICJ4eWVzIjsgdGhlbgorCVFUX1ZFUlNJT049MworCisJCQlGQVRBTD0wCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1xdC1kaXIgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX3F0X2RpcitzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfcXRfZGlyOyAgcXRfY3ZfZGlyPWBldmFsIGVjaG8gIiR3aXRodmFsIi9gCitmaQorCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1xdC1pbmNsdWRlcyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfcXRfaW5jbHVkZXMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX3F0X2luY2x1ZGVzOyAgcXRfY3ZfaW5jbHVkZXM9YGV2YWwgZWNobyAiJHdpdGh2YWwiYAorZmkKKworCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtcXQtbGlicmFyaWVzIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9xdF9saWJyYXJpZXMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX3F0X2xpYnJhcmllczsgICBxdF9jdl9saWJyYXJpZXM9YGV2YWwgZWNobyAiJHdpdGh2YWwiYAorZmkKKworCisJCWlmIHRlc3QgLXogIiRxdF9jdl9kaXIiOyB0aGVuCisJCXF0X2N2X2Rpcj0kUVRESVIKKwlmaQorCisJCWlmIHRlc3QgLW4gIiRxdF9jdl9kaXIiOyB0aGVuCisJCWlmIHRlc3QgLXogIiRxdF9jdl9pbmNsdWRlcyI7IHRoZW4KKwkJCXF0X2N2X2luY2x1ZGVzPSRxdF9jdl9kaXIvaW5jbHVkZQorCQlmaQorCQlpZiB0ZXN0IC16ICIkcXRfY3ZfbGlicmFyaWVzIjsgdGhlbgorCQkJcXRfY3ZfbGlicmFyaWVzPSRxdF9jdl9kaXIvbGliCisJCWZpCisJZmkKKworCQlRVF9JTkNMVURFUz0KKwlRVF9MREZMQUdTPQorCWlmIHRlc3QgLW4gIiRxdF9jdl9pbmNsdWRlcyI7IHRoZW4KKwkJUVRfSU5DTFVERVM9Ii1pc3lzdGVtICRxdF9jdl9pbmNsdWRlcyIKKwlmaQorCWlmIHRlc3QgLW4gIiRxdF9jdl9saWJyYXJpZXMiOyB0aGVuCisJCVFUX0xERkxBR1M9Ii1MJHF0X2N2X2xpYnJhcmllcyIKKwlmaQorCisKKworCisKKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBtb2MyIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBtb2MyLi4uICIgPiY2OyB9CisJaWYgdGVzdCAiJHtxdF9jdl9wYXRoX21vYzIrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCisJCXF0X2N2X3BhdGhfbW9jMj0iTk9ORSIKKwkJaWYgdGVzdCAtbiAiJGFjX21vYzIiOyB0aGVuCisJCQlxdF9jdl9wYXRoX21vYzI9IiRhY19tb2MyIjsKKwkJZWxzZQorCQkJZGlycz0iJHF0X2N2X2Rpci9iaW4iCisJCQlxdF9zYXZlX0lGUz0kSUZTCisJCQlJRlM9JzonCisJCQlmb3IgZGlyIGluICRQQVRIOyBkbworCQkJCWRpcnM9IiRkaXJzICRkaXIiCisJCQlkb25lCisJCQlJRlM9JHF0X3NhdmVfSUZTCisKKwkJCWZvciBkaXIgaW4gJGRpcnM7IGRvCisJCQkJaWYgdGVzdCAteCAiJGRpci9tb2MyIjsgdGhlbgorCQkJCQlpZiB0ZXN0IC1uICIiOyB0aGVuCisJCQkJCQlldmFsc3RyPSIkZGlyL21vYzIgIDI+JjEgIgorCQkJCQkJaWYgZXZhbCAkZXZhbHN0cjsgdGhlbgorCQkJCQkJCXF0X2N2X3BhdGhfbW9jMj0iJGRpci9tb2MyIgorCQkJCQkJCWJyZWFrCisJCQkJCQlmaQorCQkJCQllbHNlCisJCQkJCQlxdF9jdl9wYXRoX21vYzI9IiRkaXIvbW9jMiIKKwkJCQkJCWJyZWFrCisJCQkJCWZpCisJCQkJZmkKKwkJCWRvbmUKKwkJZmkKKworZmkKKworCisJaWYgdGVzdCAteiAiJHF0X2N2X3BhdGhfbW9jMiIgfHwgdGVzdCAiJHF0X2N2X3BhdGhfbW9jMiIgPSAiTk9ORSI7IHRoZW4KKwkJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vdCBmb3VuZCIgPiY1CiskYXNfZWNobyAibm90IGZvdW5kIiA+JjY7IH0KKworCWVsc2UKKwkJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRxdF9jdl9wYXRoX21vYzIiID4mNQorJGFzX2VjaG8gIiRxdF9jdl9wYXRoX21vYzIiID4mNjsgfQorCQlhY19tb2MyPSRxdF9jdl9wYXRoX21vYzIKKwlmaQorCisKKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBtb2MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIG1vYy4uLiAiID4mNjsgfQorCWlmIHRlc3QgIiR7cXRfY3ZfcGF0aF9tb2Mrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCisJCXF0X2N2X3BhdGhfbW9jPSJOT05FIgorCQlpZiB0ZXN0IC1uICIkYWNfbW9jMSI7IHRoZW4KKwkJCXF0X2N2X3BhdGhfbW9jPSIkYWNfbW9jMSI7CisJCWVsc2UKKwkJCWRpcnM9IiRxdF9jdl9kaXIvYmluIgorCQkJcXRfc2F2ZV9JRlM9JElGUworCQkJSUZTPSc6JworCQkJZm9yIGRpciBpbiAkUEFUSDsgZG8KKwkJCQlkaXJzPSIkZGlycyAkZGlyIgorCQkJZG9uZQorCQkJSUZTPSRxdF9zYXZlX0lGUworCisJCQlmb3IgZGlyIGluICRkaXJzOyBkbworCQkJCWlmIHRlc3QgLXggIiRkaXIvbW9jIjsgdGhlbgorCQkJCQlpZiB0ZXN0IC1uICIiOyB0aGVuCisJCQkJCQlldmFsc3RyPSIkZGlyL21vYyAgMj4mMSAiCisJCQkJCQlpZiBldmFsICRldmFsc3RyOyB0aGVuCisJCQkJCQkJcXRfY3ZfcGF0aF9tb2M9IiRkaXIvbW9jIgorCQkJCQkJCWJyZWFrCisJCQkJCQlmaQorCQkJCQllbHNlCisJCQkJCQlxdF9jdl9wYXRoX21vYz0iJGRpci9tb2MiCisJCQkJCQlicmVhaworCQkJCQlmaQorCQkJCWZpCisJCQlkb25lCisJCWZpCisKK2ZpCisKKworCWlmIHRlc3QgLXogIiRxdF9jdl9wYXRoX21vYyIgfHwgdGVzdCAiJHF0X2N2X3BhdGhfbW9jIiA9ICJOT05FIjsgdGhlbgorCQl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm90IGZvdW5kIiA+JjUKKyRhc19lY2hvICJub3QgZm91bmQiID4mNjsgfQorCisJZWxzZQorCQl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHF0X2N2X3BhdGhfbW9jIiA+JjUKKyRhc19lY2hvICIkcXRfY3ZfcGF0aF9tb2MiID4mNjsgfQorCQlhY19tb2MxPSRxdF9jdl9wYXRoX21vYworCWZpCisKKworCWlmIHRlc3QgLW4gIiRhY19tb2MxIiAtYSAtbiAiJGFjX21vYzIiOyB0aGVuCisJCQkJJGFjX21vYzEgLXYgMj4mMSB8IGdyZXAgIlF0IDMiID4vZGV2L251bGwKKwkJaWYgdGVzdCAiJD8iID0gMDsgdGhlbgorCQkJYWNfbW9jPSRhY19tb2MxOworCQllbHNlCisJCQlhY19tb2M9JGFjX21vYzI7CisJCWZpCisJZWxzZQorCQlpZiB0ZXN0IC1uICIkYWNfbW9jMSI7IHRoZW4KKwkJCWFjX21vYz0kYWNfbW9jMTsKKwkJZWxzZQorCQkJYWNfbW9jPSRhY19tb2MyOworCQlmaQorCWZpCisKKwlpZiB0ZXN0IC16ICIkYWNfbW9jIiAgLWEgIiRGQVRBTCIgPSAxOyB0aGVuCisJCWFzX2ZuX2Vycm9yICQ/ICJtb2MgYmluYXJ5IG5vdCBmb3VuZCBpbiBcJFBBVEggb3IgJHF0X2N2X2Rpci9iaW4gISIgIiRMSU5FTk8iIDUKKwlmaQorCisJTU9DPSRhY19tb2MKKworCisKKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciB1aWMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHVpYy4uLiAiID4mNjsgfQorCWlmIHRlc3QgIiR7cXRfY3ZfcGF0aF91aWMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCisJCXF0X2N2X3BhdGhfdWljPSJOT05FIgorCQlpZiB0ZXN0IC1uICIkYWNfdWljIjsgdGhlbgorCQkJcXRfY3ZfcGF0aF91aWM9IiRhY191aWMiOworCQllbHNlCisJCQlkaXJzPSIkcXRfY3ZfZGlyL2JpbiIKKwkJCXF0X3NhdmVfSUZTPSRJRlMKKwkJCUlGUz0nOicKKwkJCWZvciBkaXIgaW4gJFBBVEg7IGRvCisJCQkJZGlycz0iJGRpcnMgJGRpciIKKwkJCWRvbmUKKwkJCUlGUz0kcXRfc2F2ZV9JRlMKKworCQkJZm9yIGRpciBpbiAkZGlyczsgZG8KKwkJCQlpZiB0ZXN0IC14ICIkZGlyL3VpYyI7IHRoZW4KKwkJCQkJaWYgdGVzdCAtbiAiIjsgdGhlbgorCQkJCQkJZXZhbHN0cj0iJGRpci91aWMgIDI+JjEgIgorCQkJCQkJaWYgZXZhbCAkZXZhbHN0cjsgdGhlbgorCQkJCQkJCXF0X2N2X3BhdGhfdWljPSIkZGlyL3VpYyIKKwkJCQkJCQlicmVhaworCQkJCQkJZmkKKwkJCQkJZWxzZQorCQkJCQkJcXRfY3ZfcGF0aF91aWM9IiRkaXIvdWljIgorCQkJCQkJYnJlYWsKKwkJCQkJZmkKKwkJCQlmaQorCQkJZG9uZQorCQlmaQorCitmaQorCisKKwlpZiB0ZXN0IC16ICIkcXRfY3ZfcGF0aF91aWMiIHx8IHRlc3QgIiRxdF9jdl9wYXRoX3VpYyIgPSAiTk9ORSI7IHRoZW4KKwkJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vdCBmb3VuZCIgPiY1CiskYXNfZWNobyAibm90IGZvdW5kIiA+JjY7IH0KKworCWVsc2UKKwkJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRxdF9jdl9wYXRoX3VpYyIgPiY1CiskYXNfZWNobyAiJHF0X2N2X3BhdGhfdWljIiA+JjY7IH0KKwkJYWNfdWljPSRxdF9jdl9wYXRoX3VpYworCWZpCisKKwlpZiB0ZXN0IC16ICIkYWNfdWljIiAtYSAiJEZBVEFMIiA9IDE7IHRoZW4KKwkJYXNfZm5fZXJyb3IgJD8gInVpYyBiaW5hcnkgbm90IGZvdW5kIGluIFwkUEFUSCBvciAkcXRfY3ZfZGlyL2JpbiAhIiAiJExJTkVOTyIgNQorCWZpCisKKwlVSUM9JGFjX3VpYworCisKKworCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaW4gbGliIGZvciBRdCBsaWJyYXJ5IG5hbWUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaW4gbGliIGZvciBRdCBsaWJyYXJ5IG5hbWUuLi4gIiA+JjY7IH0KKworCWlmIHRlc3QgIiR7cXRfY3ZfbGlibmFtZStzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisKKwkJYWNfZXh0PWNwcAorYWNfY3BwPSckQ1hYQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDWFggLWMgJENYWEZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDWFggLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDWFhGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2N4eF9jb21waWxlcl9nbnUKKworCQlTQVZFX0NYWEZMQUdTPSRDWFhGTEFHUworCQlDWFhGTEFHUz0iJENYWEZMQUdTICRRVF9JTkNMVURFUyAkUVRfTERGTEFHUyIKKworCQlmb3IgbGlibmFtZSBpbiAtbHF0LW10IC1scXQzIC1scXQyIC1scXQ7CisJCWRvCisKKwlTQVZFX0xJQlM9IiRMSUJTIgorCUxJQlM9IiRMSUJTICRsaWJuYW1lIgorCWNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCSNpbmNsdWRlIDxxZ2xvYmFsLmg+CisJI2luY2x1ZGUgPHFzdHJpbmcuaD4KKworaW50CittYWluICgpCit7CisKKwlRU3RyaW5nIHMoIm1hbmdsZV9mYWlsdXJlIik7CisJI2lmIChRVF9WRVJTSU9OIDwgMjIxKQorCWJyZWFrX21lXyhcXFwpOworCSNlbmRpZgorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2N4eF90cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBxdF9jdl9saWJuYW1lPSRsaWJuYW1lCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKwlMSUJTPSIkU0FWRV9MSUJTIgorCisJCQlpZiB0ZXN0IC1uICIkcXRfY3ZfbGlibmFtZSI7IHRoZW4KKwkJCQlicmVhazsKKwkJCWZpCisJCWRvbmUKKworCQlDWFhGTEFHUz0kU0FWRV9DWFhGTEFHUworCitmaQorCisKKwlpZiB0ZXN0IC16ICIkcXRfY3ZfbGlibmFtZSI7IHRoZW4KKwkJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IGZhaWxlZCIgPiY1CiskYXNfZWNobyAiZmFpbGVkIiA+JjY7IH0KKwkJaWYgdGVzdCAiJEZBVEFMIiA9IDEgOyB0aGVuCisJCQlhc19mbl9lcnJvciAkPyAiQ2Fubm90IGNvbXBpbGUgYSBzaW1wbGUgUXQgZXhlY3V0YWJsZS4gQ2hlY2sgeW91IGhhdmUgdGhlIHJpZ2h0IFwkUVRESVIgISIgIiRMSU5FTk8iIDUKKwkJZmkKKwllbHNlCisJCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkcXRfY3ZfbGlibmFtZSIgPiY1CiskYXNfZWNobyAiJHF0X2N2X2xpYm5hbWUiID4mNjsgfQorCWZpCisKKwlpZiB0ZXN0IC16ICIkcXRfY3ZfbGlibmFtZSI7IHRoZW4KKwkJaWYgdGVzdCAtbiAiJHF0X2N2X2RpciI7IHRoZW4KKwkJCQkJcXRfY3ZfbGlicmFyaWVzPSRxdF9jdl9kaXIvbGliNjQKKwkJCVFUX0xERkxBR1M9Ii1MJHF0X2N2X2xpYnJhcmllcyIKKworCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaW4gbGliNjQgZm9yIFF0IGxpYnJhcnkgbmFtZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpbiBsaWI2NCBmb3IgUXQgbGlicmFyeSBuYW1lLi4uICIgPiY2OyB9CisKKwlpZiB0ZXN0ICIke3F0X2N2X2xpYm5hbWUrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCisJCWFjX2V4dD1jcHAKK2FjX2NwcD0nJENYWENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ1hYIC1jICRDWFhGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ1hYIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ1hYRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jeHhfY29tcGlsZXJfZ251CisKKwkJU0FWRV9DWFhGTEFHUz0kQ1hYRkxBR1MKKwkJQ1hYRkxBR1M9IiRDWFhGTEFHUyAkUVRfSU5DTFVERVMgJFFUX0xERkxBR1MiCisKKwkJZm9yIGxpYm5hbWUgaW4gLWxxdC1tdCAtbHF0MyAtbHF0MiAtbHF0OworCQlkbworCisJU0FWRV9MSUJTPSIkTElCUyIKKwlMSUJTPSIkTElCUyAkbGlibmFtZSIKKwljYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKwkjaW5jbHVkZSA8cWdsb2JhbC5oPgorCSNpbmNsdWRlIDxxc3RyaW5nLmg+CisKK2ludAorbWFpbiAoKQoreworCisJUVN0cmluZyBzKCJtYW5nbGVfZmFpbHVyZSIpOworCSNpZiAoUVRfVkVSU0lPTiA8IDIyMSkKKwlicmVha19tZV8oXFxcKTsKKwkjZW5kaWYKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jeHhfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgcXRfY3ZfbGlibmFtZT0kbGlibmFtZQorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisJTElCUz0iJFNBVkVfTElCUyIKKworCQkJaWYgdGVzdCAtbiAiJHF0X2N2X2xpYm5hbWUiOyB0aGVuCisJCQkJYnJlYWs7CisJCQlmaQorCQlkb25lCisKKwkJQ1hYRkxBR1M9JFNBVkVfQ1hYRkxBR1MKKworZmkKKworCisJaWYgdGVzdCAteiAiJHF0X2N2X2xpYm5hbWUiOyB0aGVuCisJCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBmYWlsZWQiID4mNQorJGFzX2VjaG8gImZhaWxlZCIgPiY2OyB9CisJCWlmIHRlc3QgIiRGQVRBTCIgPSAxIDsgdGhlbgorCQkJYXNfZm5fZXJyb3IgJD8gIkNhbm5vdCBjb21waWxlIGEgc2ltcGxlIFF0IGV4ZWN1dGFibGUuIENoZWNrIHlvdSBoYXZlIHRoZSByaWdodCBcJFFURElSICEiICIkTElORU5PIiA1CisJCWZpCisJZWxzZQorCQl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHF0X2N2X2xpYm5hbWUiID4mNQorJGFzX2VjaG8gIiRxdF9jdl9saWJuYW1lIiA+JjY7IH0KKwlmaQorCisJCWZpCisJZmkKKworCVFUX0xJQj0kcXRfY3ZfbGlibmFtZTsKKworCisJaWYgdGVzdCAtbiAiJHF0X2N2X2xpYm5hbWUiOyB0aGVuCisKKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIFF0IHZlcnNpb24iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgUXQgdmVyc2lvbi4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHtseXhfY3ZfcXR2ZXJzaW9uK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKworCQlhY19leHQ9Y3BwCithY19jcHA9JyRDWFhDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENYWCAtYyAkQ1hYRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENYWCAtbyBjb25mdGVzdCRhY19leGVleHQgJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY3h4X2NvbXBpbGVyX2dudQorCisJCVNBVkVfQ1BQRkxBR1M9JENQUEZMQUdTCisJCUNQUEZMQUdTPSIkQ1BQRkxBR1MgJFFUX0lOQ0xVREVTIgorCisJCWNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDE4MDE2ICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyNpbmNsdWRlIDxxZ2xvYmFsLmg+CisiJSUlIlFUX1ZFUlNJT05fU1RSIiUlJSIKK0VPRgorCQlseXhfY3ZfcXR2ZXJzaW9uPWAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8IFwKKwkJCWdyZXAgJ14iJSUlIicgIDI+L2Rldi9udWxsIHwgXAorCQkJc2VkIC1lICdzLyIlJSUiLy9nJyAtZSAncy8iLy9nJ2AKKwkJcm0gLWYgY29uZnRlc3QuJGFjX2V4dAorCQlDUFBGTEFHUz0kU0FWRV9DUFBGTEFHUworCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRseXhfY3ZfcXR2ZXJzaW9uIiA+JjUKKyRhc19lY2hvICIkbHl4X2N2X3F0dmVyc2lvbiIgPiY2OyB9CisKKwlRVF9WRVJTSU9OPSRseXhfY3ZfcXR2ZXJzaW9uCisKKworCWZpCisKKwlpZiB0ZXN0IC1uICIkUVRfTElCIjsgdGhlbgorCQlRVF9MSUJTPSIkUVRfTElCICRRVF9MREZMQUdTIgorCWZpCisJUVRfQ0ZMQUdTPSIkUVRfSU5DTFVERVMiCitmaQorCitpZiB0ZXN0ICJ4JGVuYWJsZV9ndWkiICA9ICJ4cXQ0IjsgdGhlbgorCVFUX1ZFUlNJT049NAorCitwa2dfZmFpbGVkPW5vCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBRVCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgUVQuLi4gIiA+JjY7IH0KKworaWYgdGVzdCAtbiAiJFFUX0NGTEFHUyI7IHRoZW4KKyAgICBwa2dfY3ZfUVRfQ0ZMQUdTPSIkUVRfQ0ZMQUdTIgorIGVsaWYgdGVzdCAtbiAiJFBLR19DT05GSUciOyB0aGVuCisgICAgaWYgdGVzdCAtbiAiJFBLR19DT05GSUciICYmIFwKKyAgICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzIFwiUXQzU3VwcG9ydCBRdEd1aSBRdENvcmUgXCIiOyB9ID4mNQorICAoJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgIlF0M1N1cHBvcnQgUXRHdWkgUXRDb3JlICIpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuCisgIHBrZ19jdl9RVF9DRkxBR1M9YCRQS0dfQ09ORklHIC0tY2ZsYWdzICJRdDNTdXBwb3J0IFF0R3VpIFF0Q29yZSAiIDI+L2Rldi9udWxsYAorZWxzZQorICBwa2dfZmFpbGVkPXllcworZmkKKyBlbHNlCisgICAgcGtnX2ZhaWxlZD11bnRyaWVkCitmaQoraWYgdGVzdCAtbiAiJFFUX0xJQlMiOyB0aGVuCisgICAgcGtnX2N2X1FUX0xJQlM9IiRRVF9MSUJTIgorIGVsaWYgdGVzdCAtbiAiJFBLR19DT05GSUciOyB0aGVuCisgICAgaWYgdGVzdCAtbiAiJFBLR19DT05GSUciICYmIFwKKyAgICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzIFwiUXQzU3VwcG9ydCBRdEd1aSBRdENvcmUgXCIiOyB9ID4mNQorICAoJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgIlF0M1N1cHBvcnQgUXRHdWkgUXRDb3JlICIpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuCisgIHBrZ19jdl9RVF9MSUJTPWAkUEtHX0NPTkZJRyAtLWxpYnMgIlF0M1N1cHBvcnQgUXRHdWkgUXRDb3JlICIgMj4vZGV2L251bGxgCitlbHNlCisgIHBrZ19mYWlsZWQ9eWVzCitmaQorIGVsc2UKKyAgICBwa2dfZmFpbGVkPXVudHJpZWQKK2ZpCisKKworCitpZiB0ZXN0ICRwa2dfZmFpbGVkID0geWVzOyB0aGVuCisgICAJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisKK2lmICRQS0dfQ09ORklHIC0tYXRsZWFzdC1wa2djb25maWctdmVyc2lvbiAwLjIwOyB0aGVuCisgICAgICAgIF9wa2dfc2hvcnRfZXJyb3JzX3N1cHBvcnRlZD15ZXMKK2Vsc2UKKyAgICAgICAgX3BrZ19zaG9ydF9lcnJvcnNfc3VwcG9ydGVkPW5vCitmaQorICAgICAgICBpZiB0ZXN0ICRfcGtnX3Nob3J0X2Vycm9yc19zdXBwb3J0ZWQgPSB5ZXM7IHRoZW4KKwkgICAgICAgIFFUX1BLR19FUlJPUlM9YCRQS0dfQ09ORklHIC0tc2hvcnQtZXJyb3JzIC0tcHJpbnQtZXJyb3JzICJRdDNTdXBwb3J0IFF0R3VpIFF0Q29yZSAiIDI+JjFgCisgICAgICAgIGVsc2UKKwkgICAgICAgIFFUX1BLR19FUlJPUlM9YCRQS0dfQ09ORklHIC0tcHJpbnQtZXJyb3JzICJRdDNTdXBwb3J0IFF0R3VpIFF0Q29yZSAiIDI+JjFgCisgICAgICAgIGZpCisJIyBQdXQgdGhlIG5hc3R5IGVycm9yIG1lc3NhZ2UgaW4gY29uZmlnLmxvZyB3aGVyZSBpdCBiZWxvbmdzCisJZWNobyAiJFFUX1BLR19FUlJPUlMiID4mNQorCisKKwllY2hvICJZb3UgcmVxdWVzdGVkIFFUNCBidXQgaXRzIGJ1aWxkIGZpbGVzIGFyZSBub3QgYXZhaWxhYmxlLiBFeGl0aW5nIG5vdy4iCisJZXhpdAorCitlbGlmIHRlc3QgJHBrZ19mYWlsZWQgPSB1bnRyaWVkOyB0aGVuCisgICAgIAl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKworCWVjaG8gIllvdSByZXF1ZXN0ZWQgUVQ0IGJ1dCBpdHMgYnVpbGQgZmlsZXMgYXJlIG5vdCBhdmFpbGFibGUuIEV4aXRpbmcgbm93LiIKKwlleGl0CisKK2Vsc2UKKwlRVF9DRkxBR1M9JHBrZ19jdl9RVF9DRkxBR1MKKwlRVF9MSUJTPSRwa2dfY3ZfUVRfTElCUworICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorCitmaQorCU1PQz0kKHBrZy1jb25maWcgLS12YXJpYWJsZT1tb2NfbG9jYXRpb24gUXRDb3JlKQorCVVJQz0kKHBrZy1jb25maWcgLS12YXJpYWJsZT11aWNfbG9jYXRpb24gUXRDb3JlKTMKKwlRVF9WRVJTSU9OPSQocGtnLWNvbmZpZyAtLW1vZHZlcnNpb24gUXRDb3JlKQorCisJaWYgdGVzdCAieCRNT0MiID0gIngiOyB0aGVuCisJCWVjaG8gIldBUk5JTkc6IFlvdXIgUXRDb3JlLnBjIGZpbGUgaXMgYnVnZ3ksIGl0IGRvZXNuJ3QgcHJvdmlkZSB0aGUgdmFyaWFibGUgJ21vY19sb2NhdGlvbiciCisJCWVjaG8gIldBUk5JTkc6IEkgd2lsbCB0cnkgdG8gZmluZCBpdCBpbiB5b3VyIFBBVEggLi4uIgorCQkjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIm1vYyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgbW9jOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19NT0Mrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkTU9DIjsgdGhlbgorICBhY19jdl9wcm9nX01PQz0iJE1PQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX01PQz0ibW9jIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK01PQz0kYWNfY3ZfcHJvZ19NT0MKK2lmIHRlc3QgLW4gIiRNT0MiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkTU9DIiA+JjUKKyRhc19lY2hvICIkTU9DIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKKwkJaWYgdGVzdCAieCRNT0MiID0gIngiOyB0aGVuCisJCQllY2hvICJXQVJOSU5HOiBZb3UgY2FuIGZpeCB0aGlzIGJ5IGFkZGluZyB0aGUgbG9jYXRpb24gb2YgbW9jIHRvIHlvdXIgcGF0aC4iCisJCQllY2hvICJXQVJOSU5HOiBFeGl0aW5nIG5vdy4iCisJCQlleGl0CisJCWZpCisJZmkKKworCWlmIHRlc3QgIngkVUlDIiA9ICJ4MyI7IHRoZW4KKwkJZWNobyAiV0FSTklORzogWW91ciBRdENvcmUucGMgZmlsZSBpcyBidWdneSwgaXQgZG9lc24ndCBwcm92aWRlIHRoZSB2YXJpYWJsZSAndWljX2xvY2F0aW9uJyIKKwkJZWNobyAiV0FSTklORzogSSB3aWxsIHRyeSB0byBmaW5kIGl0IGluIHlvdXIgUEFUSCAuLi4iCisJCSMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAidWljMyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgdWljMzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfVUlDaGVscCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRVSUNoZWxwIjsgdGhlbgorICBhY19jdl9wcm9nX1VJQ2hlbHA9IiRVSUNoZWxwIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfVUlDaGVscD0idWljMyIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitVSUNoZWxwPSRhY19jdl9wcm9nX1VJQ2hlbHAKK2lmIHRlc3QgLW4gIiRVSUNoZWxwIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJFVJQ2hlbHAiID4mNQorJGFzX2VjaG8gIiRVSUNoZWxwIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKKwkJaWYgdGVzdCAieCRVSUNoZWxwIiA9ICJ4IjsgdGhlbgorCQkJZWNobyAiV0FSTklORzogWW91IGNhbiBmaXggdGhpcyBieSBhZGRpbmcgdGhlIGxvY2F0aW9uIG9mIHVpYzMgdG8geW91ciBwYXRoLiIKKwkJCWVjaG8gIldBUk5JTkc6IEV4aXRpbmcgbm93LiIKKwkJCWV4aXQKKwkJZWxzZQorCQkJVUlDPSIkVUlDaGVscCIKKwkJZmkKKwlmaQorCisJZmxhZ3NfaGFzX3F0M3N1cHBvcnQ9JChlY2hvICRRVF9DRkxBR1MgfCBncmVwIFFUM19TVVBQT1JUKQorCWlmIHRlc3QgIngkZmxhZ3NfaGFzX3F0M3N1cHBvcnQiID0gIngiIDsgdGhlbgorCQllY2hvICJXQVJOSU5HOiBZb3VyIFF0M1N1cHBvcnQgcGFja2FnZSBpcyBidWdneTsgaXQgZG9zbid0IGluY2x1ZGUgdGhlICdRVDNfU1VQUE9SVCcgZmxhZyIKKwkJZWNobyAiV0FSTklORzogYWRkaW5nIGl0IG1hbnVhbGx5IgorCQlRVF9DRkxBR1M9IiRRVF9DRkxBR1MgLURRVDNfU1VQUE9SVCIKKwlmaQorZmkKKyBpZiB0ZXN0IC1uICIkUVRfTElCUyI7IHRoZW4KKyAgaGF2ZV9xdF9UUlVFPQorICBoYXZlX3F0X0ZBTFNFPScjJworZWxzZQorICBoYXZlX3F0X1RSVUU9JyMnCisgIGhhdmVfcXRfRkFMU0U9CitmaQorCisKK0xJQlM9IiRPUklHX1hfU0FWRV9MSUJTIgorCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtcGNoIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX3BjaCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX3BjaDsgZW5hYmxlX3BjaD0kZW5hYmxldmFsCitlbHNlCisgIGVuYWJsZV9wY2g9bm8KK2ZpCisKK2lmIHRlc3QgIiRlbmFibGVfcGNoIiA9IHllczsgdGhlbgorCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgJHtDWFh9IHN1cHBvcnQgcHJlY29tcGlsZWQgaGVhZGVyIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgJHtDWFh9IHN1cHBvcnQgcHJlY29tcGlsZWQgaGVhZGVyLi4uICIgPiY2OyB9CisKK2FjX2V4dD1jcHAKK2FjX2NwcD0nJENYWENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ1hYIC1jICRDWFhGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ1hYIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ1hYRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jeHhfY29tcGlsZXJfZ251CisKK1NBVkVfQ1hYRkxBR1M9JENYWEZMQUdTCitDWFhGTEFHUz0tV2ludmFsaWQtcGNoCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jeHhfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH07IE9QX0NYWEZMQUdTPSIke09QX0NYWEZMQUdTfSAtaW5jbHVkZSBiaXRzL3N0ZGMrKy5oIgorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0NYWEZMQUdTPSRTQVZFX0NYWEZMQUdTCithY19leHQ9Y3BwCithY19jcHA9JyRDWFhDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENYWCAtYyAkQ1hYRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENYWCAtbyBjb25mdGVzdCRhY19leGVleHQgJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY3h4X2NvbXBpbGVyX2dudQorCisKK2ZpCisKKworIyBJdCdzIGp1c3QgcnVkZSB0byBnbyBvdmVyIHRoZSBuZXQgdG8gYnVpbGQKK1hTTFRQUk9DX0ZMQUdTPS0tbm9uZXQKK0RPQ0JPT0tfUk9PVD0KK2lmIHRlc3QgISAtZiAvZXRjL3htbC9jYXRhbG9nOyB0aGVuCisJZm9yIGkgaW4gL3Vzci9zaGFyZS9zZ21sL2RvY2Jvb2svc3R5bGVzaGVldC94c2wvbndhbHNoIC91c3Ivc2hhcmUvc2dtbC9kb2Nib29rL3hzbC1zdHlsZXNoZWV0cy87CisJZG8KKwkJaWYgdGVzdCAtZCAiJGkiOyB0aGVuCisJCQlET0NCT09LX1JPT1Q9JGkKKwkJZmkKKwlkb25lCisKKwkjIExhc3QgcmVzb3J0IC0gdHJ5IG5ldAorCWlmIHRlc3QgLXogIiRET0NCT09LX1JPT1QiOyB0aGVuCisJCVhTTFRQUk9DX0ZMQUdTPQorCWZpCitlbHNlCisJWE1MX0NBVEFMT0c9L2V0Yy94bWwvY2F0YWxvZworCUNBVF9FTlRSWV9TVEFSVD0nPCEtLScKKwlDQVRfRU5UUllfRU5EPSctLT4nCitmaQorCisjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgInhzbHRwcm9jIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSB4c2x0cHJvYzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfWFNMVFBST0Mrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkWFNMVFBST0MiOyB0aGVuCisgIGFjX2N2X3Byb2dfWFNMVFBST0M9IiRYU0xUUFJPQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX1hTTFRQUk9DPSJ4c2x0cHJvYyIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitYU0xUUFJPQz0kYWNfY3ZfcHJvZ19YU0xUUFJPQworaWYgdGVzdCAtbiAiJFhTTFRQUk9DIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJFhTTFRQUk9DIiA+JjUKKyRhc19lY2hvICIkWFNMVFBST0MiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworWFNMVFBST0NfV09SS1M9bm8KK2lmIHRlc3QgLW4gIiRYU0xUUFJPQyI7IHRoZW4KKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgeHNsdHByb2Mgd29ya3MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB4c2x0cHJvYyB3b3Jrcy4uLiAiID4mNjsgfQorCisJaWYgdGVzdCAtbiAiJFhNTF9DQVRBTE9HIjsgdGhlbgorCQlEQl9GSUxFPSJodHRwOi8vZG9jYm9vay5zb3VyY2Vmb3JnZS5uZXQvcmVsZWFzZS94c2wvY3VycmVudC94aHRtbC9kb2Nib29rLnhzbCIKKwllbHNlCisJCURCX0ZJTEU9IiRET0NCT09LX1JPT1QvZG9jYm9vay54c2wiCisJZmkKKworCSRYU0xUUFJPQyAkWFNMVFBST0NfRkxBR1MgJERCX0ZJTEUgPi9kZXYvbnVsbCAyPiYxIDw8IEVORAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0nSVNPLTg4NTktMSc/PgorPCFET0NUWVBFIGJvb2sgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjEuMi8vRU4iICJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMS4yL2RvY2Jvb2t4LmR0ZCI+Cis8Ym9vayBpZD0idGVzdCI+Cis8L2Jvb2s+CitFTkQKKwlpZiB0ZXN0ICIkPyIgPSAwOyB0aGVuCisJCVhTTFRQUk9DX1dPUktTPXllcworCWZpCisJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRYU0xUUFJPQ19XT1JLUyIgPiY1CiskYXNfZWNobyAiJFhTTFRQUk9DX1dPUktTIiA+JjY7IH0KK2ZpCisgaWYgdGVzdCAiJFhTTFRQUk9DX1dPUktTIiA9ICJ5ZXMiOyB0aGVuCisgIGhhdmVfeHNsdHByb2NfVFJVRT0KKyAgaGF2ZV94c2x0cHJvY19GQUxTRT0nIycKK2Vsc2UKKyAgaGF2ZV94c2x0cHJvY19UUlVFPScjJworICBoYXZlX3hzbHRwcm9jX0ZBTFNFPQorZmkKKworCisKKworCisKKworCisKK0xJQlM9IiRPUklHX1NBVkVfTElCUyIKK0xJQkVSVFlfTElCUz0iLWxpYmVydHkgJERMX0xJQiAkSU5UTF9MSUIiCitCRkRfTElCUz0iLWxiZmQgLWxpYmVydHkgJERMX0xJQiAkSU5UTF9MSUIgJFpfTElCIgorUE9QVF9MSUJTPSItbHBvcHQiCisKKworCisKKyMgZG8gTk9UIHB1dCB0ZXN0cyBoZXJlLCB0aGV5IHdpbGwgZmFpbCBpbiB0aGUgY2FzZSBYIGlzIG5vdCBpbnN0YWxsZWQgIQorCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyICR7Q0N9IC1XIGlzIHVuZGVyc3Rvb2QiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAke0NDfSAtVyBpcyB1bmRlcnN0b29kLi4uICIgPiY2OyB9CisKK2FjX2V4dD1jCithY19jcHA9JyRDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKKworU0FWRV9DRkxBR1M9JENGTEFHUworQ0ZMQUdTPS1XCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9OyBPUF9DRkxBR1M9IiR7T1BfQ0ZMQUdTfSAtVyIKK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitDRkxBR1M9JFNBVkVfQ0ZMQUdTCithY19leHQ9Y3BwCithY19jcHA9JyRDWFhDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENYWCAtYyAkQ1hYRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENYWCAtbyBjb25mdGVzdCRhY19leGVleHQgJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY3h4X2NvbXBpbGVyX2dudQorCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyICR7Q1hYfSAtVyBpcyB1bmRlcnN0b29kIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgJHtDWFh9IC1XIGlzIHVuZGVyc3Rvb2QuLi4gIiA+JjY7IH0KKworYWNfZXh0PWNwcAorYWNfY3BwPSckQ1hYQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDWFggLWMgJENYWEZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDWFggLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDWFhGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2N4eF9jb21waWxlcl9nbnUKKworU0FWRV9DWFhGTEFHUz0kQ1hYRkxBR1MKK0NYWEZMQUdTPS1XCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jeHhfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH07IE9QX0NYWEZMQUdTPSIke09QX0NYWEZMQUdTfSAtVyIKK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitDWFhGTEFHUz0kU0FWRV9DWFhGTEFHUworYWNfZXh0PWNwcAorYWNfY3BwPSckQ1hYQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDWFggLWMgJENYWEZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDWFggLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDWFhGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2N4eF9jb21waWxlcl9nbnUKKworCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciAke0NDfSAtV2FsbCBpcyB1bmRlcnN0b29kIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgJHtDQ30gLVdhbGwgaXMgdW5kZXJzdG9vZC4uLiAiID4mNjsgfQorCithY19leHQ9YworYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CisKK1NBVkVfQ0ZMQUdTPSRDRkxBR1MKK0NGTEFHUz0tV2FsbAorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKzsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfTsgT1BfQ0ZMQUdTPSIke09QX0NGTEFHU30gLVdhbGwiCitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorQ0ZMQUdTPSRTQVZFX0NGTEFHUworYWNfZXh0PWNwcAorYWNfY3BwPSckQ1hYQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDWFggLWMgJENYWEZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDWFggLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDWFhGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2N4eF9jb21waWxlcl9nbnUKKworCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciAke0NYWH0gLVdhbGwgaXMgdW5kZXJzdG9vZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyICR7Q1hYfSAtV2FsbCBpcyB1bmRlcnN0b29kLi4uICIgPiY2OyB9CisKK2FjX2V4dD1jcHAKK2FjX2NwcD0nJENYWENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ1hYIC1jICRDWFhGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ1hYIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ1hYRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jeHhfY29tcGlsZXJfZ251CisKK1NBVkVfQ1hYRkxBR1M9JENYWEZMQUdTCitDWFhGTEFHUz0tV2FsbAorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKzsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY3h4X3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9OyBPUF9DWFhGTEFHUz0iJHtPUF9DWFhGTEFHU30gLVdhbGwiCitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorQ1hYRkxBR1M9JFNBVkVfQ1hYRkxBR1MKK2FjX2V4dD1jcHAKK2FjX2NwcD0nJENYWENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ1hYIC1jICRDWFhGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ1hYIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ1hYRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jeHhfY29tcGlsZXJfZ251CisKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgJHtDQ30gLWZuby1jb21tb24gaXMgdW5kZXJzdG9vZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyICR7Q0N9IC1mbm8tY29tbW9uIGlzIHVuZGVyc3Rvb2QuLi4gIiA+JjY7IH0KKworYWNfZXh0PWMKK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorCitTQVZFX0NGTEFHUz0kQ0ZMQUdTCitDRkxBR1M9LWZuby1jb21tb24KK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7Cis7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH07IE9QX0NGTEFHUz0iJHtPUF9DRkxBR1N9IC1mbm8tY29tbW9uIgorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0NGTEFHUz0kU0FWRV9DRkxBR1MKK2FjX2V4dD1jcHAKK2FjX2NwcD0nJENYWENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ1hYIC1jICRDWFhGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ1hYIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ1hYRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jeHhfY29tcGlsZXJfZ251CisKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgJHtDWFh9IC1mbm8tY29tbW9uIGlzIHVuZGVyc3Rvb2QiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAke0NYWH0gLWZuby1jb21tb24gaXMgdW5kZXJzdG9vZC4uLiAiID4mNjsgfQorCithY19leHQ9Y3BwCithY19jcHA9JyRDWFhDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENYWCAtYyAkQ1hYRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENYWCAtbyBjb25mdGVzdCRhY19leGVleHQgJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY3h4X2NvbXBpbGVyX2dudQorCitTQVZFX0NYWEZMQUdTPSRDWFhGTEFHUworQ1hYRkxBR1M9LWZuby1jb21tb24KK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7Cis7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2N4eF90cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfTsgT1BfQ1hYRkxBR1M9IiR7T1BfQ1hYRkxBR1N9IC1mbm8tY29tbW9uIgorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0NYWEZMQUdTPSRTQVZFX0NYWEZMQUdTCithY19leHQ9Y3BwCithY19jcHA9JyRDWFhDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENYWCAtYyAkQ1hYRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENYWCAtbyBjb25mdGVzdCRhY19leGVleHQgJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY3h4X2NvbXBpbGVyX2dudQorCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyICR7Q1hYfSAtZnRlbXBsYXRlLWRlcHRoLTUwIGlzIHVuZGVyc3Rvb2QiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAke0NYWH0gLWZ0ZW1wbGF0ZS1kZXB0aC01MCBpcyB1bmRlcnN0b29kLi4uICIgPiY2OyB9CisKK2FjX2V4dD1jcHAKK2FjX2NwcD0nJENYWENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ1hYIC1jICRDWFhGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ1hYIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ1hYRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jeHhfY29tcGlsZXJfZ251CisKK1NBVkVfQ1hYRkxBR1M9JENYWEZMQUdTCitDWFhGTEFHUz0tZnRlbXBsYXRlLWRlcHRoLTUwCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jeHhfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH07IE9QX0NYWEZMQUdTPSIke09QX0NYWEZMQUdTfSAtZnRlbXBsYXRlLWRlcHRoLTUwIgorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0NYWEZMQUdTPSRTQVZFX0NYWEZMQUdTCithY19leHQ9Y3BwCithY19jcHA9JyRDWFhDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENYWCAtYyAkQ1hYRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENYWCAtbyBjb25mdGVzdCRhY19leGVleHQgJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY3h4X2NvbXBpbGVyX2dudQorCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyICR7Q0N9IC1XZGVjbGFyYXRpb24tYWZ0ZXItc3RhdGVtZW50IGlzIHVuZGVyc3Rvb2QiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAke0NDfSAtV2RlY2xhcmF0aW9uLWFmdGVyLXN0YXRlbWVudCBpcyB1bmRlcnN0b29kLi4uICIgPiY2OyB9CisKK2FjX2V4dD1jCithY19jcHA9JyRDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKKworU0FWRV9DRkxBR1M9JENGTEFHUworQ0ZMQUdTPS1XZGVjbGFyYXRpb24tYWZ0ZXItc3RhdGVtZW50CitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9OyBPUF9DRkxBR1M9IiR7T1BfQ0ZMQUdTfSAtV2RlY2xhcmF0aW9uLWFmdGVyLXN0YXRlbWVudCIKK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitDRkxBR1M9JFNBVkVfQ0ZMQUdTCithY19leHQ9Y3BwCithY19jcHA9JyRDWFhDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENYWCAtYyAkQ1hYRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENYWCAtbyBjb25mdGVzdCRhY19leGVleHQgJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY3h4X2NvbXBpbGVyX2dudQorCisKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWdjb3Ygd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfZ2NvditzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX2djb3Y7IGVuYWJsZV9nY292PSRlbmFibGV2YWwKK2Vsc2UKKyAgZW5hYmxlX2djb3Y9bm8KK2ZpCisKK2lmIHRlc3QgIiRlbmFibGVfZ2NvdiIgPSB5ZXM7IHRoZW4KKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyICR7Q0N9IC1mcHJvZmlsZS1hcmNzIGlzIHVuZGVyc3Rvb2QiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAke0NDfSAtZnByb2ZpbGUtYXJjcyBpcyB1bmRlcnN0b29kLi4uICIgPiY2OyB9CisKK2FjX2V4dD1jCithY19jcHA9JyRDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKKworU0FWRV9DRkxBR1M9JENGTEFHUworQ0ZMQUdTPS1mcHJvZmlsZS1hcmNzCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9OyBPUF9DRkxBR1M9IiR7T1BfQ0ZMQUdTfSAtZnByb2ZpbGUtYXJjcyIKK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitDRkxBR1M9JFNBVkVfQ0ZMQUdTCithY19leHQ9Y3BwCithY19jcHA9JyRDWFhDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENYWCAtYyAkQ1hYRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENYWCAtbyBjb25mdGVzdCRhY19leGVleHQgJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY3h4X2NvbXBpbGVyX2dudQorCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyICR7Q1hYfSAtZnByb2ZpbGUtYXJjcyBpcyB1bmRlcnN0b29kIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgJHtDWFh9IC1mcHJvZmlsZS1hcmNzIGlzIHVuZGVyc3Rvb2QuLi4gIiA+JjY7IH0KKworYWNfZXh0PWNwcAorYWNfY3BwPSckQ1hYQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDWFggLWMgJENYWEZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDWFggLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDWFhGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2N4eF9jb21waWxlcl9nbnUKKworU0FWRV9DWFhGTEFHUz0kQ1hYRkxBR1MKK0NYWEZMQUdTPS1mcHJvZmlsZS1hcmNzCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jeHhfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH07IE9QX0NYWEZMQUdTPSIke09QX0NYWEZMQUdTfSAtZnByb2ZpbGUtYXJjcyIKK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitDWFhGTEFHUz0kU0FWRV9DWFhGTEFHUworYWNfZXh0PWNwcAorYWNfY3BwPSckQ1hYQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDWFggLWMgJENYWEZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDWFggLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDWFhGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2N4eF9jb21waWxlcl9nbnUKKworCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciAke0NDfSAtZnRlc3QtY292ZXJhZ2UgaXMgdW5kZXJzdG9vZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyICR7Q0N9IC1mdGVzdC1jb3ZlcmFnZSBpcyB1bmRlcnN0b29kLi4uICIgPiY2OyB9CisKK2FjX2V4dD1jCithY19jcHA9JyRDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKKworU0FWRV9DRkxBR1M9JENGTEFHUworQ0ZMQUdTPS1mdGVzdC1jb3ZlcmFnZQorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKzsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfTsgT1BfQ0ZMQUdTPSIke09QX0NGTEFHU30gLWZ0ZXN0LWNvdmVyYWdlIgorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0NGTEFHUz0kU0FWRV9DRkxBR1MKK2FjX2V4dD1jcHAKK2FjX2NwcD0nJENYWENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ1hYIC1jICRDWFhGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ1hYIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ1hYRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jeHhfY29tcGlsZXJfZ251CisKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgJHtDWFh9IC1mdGVzdC1jb3ZlcmFnZSBpcyB1bmRlcnN0b29kIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgJHtDWFh9IC1mdGVzdC1jb3ZlcmFnZSBpcyB1bmRlcnN0b29kLi4uICIgPiY2OyB9CisKK2FjX2V4dD1jcHAKK2FjX2NwcD0nJENYWENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ1hYIC1jICRDWFhGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ1hYIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ1hYRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jeHhfY29tcGlsZXJfZ251CisKK1NBVkVfQ1hYRkxBR1M9JENYWEZMQUdTCitDWFhGTEFHUz0tZnRlc3QtY292ZXJhZ2UKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7Cis7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2N4eF90cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfTsgT1BfQ1hYRkxBR1M9IiR7T1BfQ1hYRkxBR1N9IC1mdGVzdC1jb3ZlcmFnZSIKK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitDWFhGTEFHUz0kU0FWRV9DWFhGTEFHUworYWNfZXh0PWNwcAorYWNfY3BwPSckQ1hYQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDWFggLWMgJENYWEZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDWFggLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDWFhGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2N4eF9jb21waWxlcl9nbnUKKworCitmaQorCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtd2Vycm9yIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX3dlcnJvcitzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX3dlcnJvcjsgZW5hYmxlX3dlcnJvcj0kZW5hYmxldmFsCitlbHNlCisgIGVuYWJsZV93ZXJyb3I9eWVzCitmaQorCitpZiB0ZXN0ICIkZW5hYmxlX3dlcnJvciIgPSB5ZXM7IHRoZW4KKwkjIGVuYWJsZSAtV2Vycm9yIGZvciBub24tcmVsZWFzZSB2ZXJzaW9ucy4KKwlpZiBlY2hvICIkVkVSU0lPTiIgfCBncmVwIGdpdCA+L2Rldi9udWxsOyB0aGVuCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciAke0NDfSAtV2Vycm9yIGlzIHVuZGVyc3Rvb2QiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAke0NDfSAtV2Vycm9yIGlzIHVuZGVyc3Rvb2QuLi4gIiA+JjY7IH0KKworYWNfZXh0PWMKK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorCitTQVZFX0NGTEFHUz0kQ0ZMQUdTCitDRkxBR1M9LVdlcnJvcgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKzsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfTsgT1BfQ0ZMQUdTPSIke09QX0NGTEFHU30gLVdlcnJvciIKK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitDRkxBR1M9JFNBVkVfQ0ZMQUdTCithY19leHQ9Y3BwCithY19jcHA9JyRDWFhDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENYWCAtYyAkQ1hYRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENYWCAtbyBjb25mdGVzdCRhY19leGVleHQgJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY3h4X2NvbXBpbGVyX2dudQorCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyICR7Q1hYfSAtV2Vycm9yIGlzIHVuZGVyc3Rvb2QiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAke0NYWH0gLVdlcnJvciBpcyB1bmRlcnN0b29kLi4uICIgPiY2OyB9CisKK2FjX2V4dD1jcHAKK2FjX2NwcD0nJENYWENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ1hYIC1jICRDWFhGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ1hYIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ1hYRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jeHhfY29tcGlsZXJfZ251CisKK1NBVkVfQ1hYRkxBR1M9JENYWEZMQUdTCitDWFhGTEFHUz0tV2Vycm9yCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jeHhfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH07IE9QX0NYWEZMQUdTPSIke09QX0NYWEZMQUdTfSAtV2Vycm9yIgorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0NYWEZMQUdTPSRTQVZFX0NYWEZMQUdTCithY19leHQ9Y3BwCithY19jcHA9JyRDWFhDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENYWCAtYyAkQ1hYRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENYWCAtbyBjb25mdGVzdCRhY19leGVleHQgJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY3h4X2NvbXBpbGVyX2dudQorCisKKwlmaQorZmkKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLW9wdGltaXphdGlvbiB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9vcHRpbWl6YXRpb24rc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9vcHRpbWl6YXRpb247IGVuYWJsZV9vcHRpbWl6YXRpb249JGVuYWJsZXZhbAorZWxzZQorICBlbmFibGVfb3B0aW1pc2F0aW9uPXllcworZmkKKworaWYgdGVzdCAiJGVuYWJsZV9vcHRpbWl6YXRpb24iID0gIm5vIjsgdGhlbgorCUNGTEFHUz1gZWNobyAkQ0ZMQUdTIHwgc2VkICdzLy1PMi8vZydgCisJQ1hYRkxBR1M9YGVjaG8gJENYWEZMQUdTIHwgc2VkICdzLy1PMi8vZydgCitmaQorCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtYWNjb3VudC1jaGVjayB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9hY2NvdW50X2NoZWNrK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfYWNjb3VudF9jaGVjazsgZW5hYmxlX2FjY291bnRfY2hlY2s9JGVuYWJsZXZhbAorZWxzZQorICBlbmFibGVfYWNjb3VudF9jaGVjaz15ZXMKK2ZpCisKKworIGlmIHRlc3QgIngkZW5hYmxlX2FjY291bnRfY2hlY2siID0gInh5ZXMiOyB0aGVuCisgIENIRUNLX0FDQ09VTlRfVFJVRT0KKyAgQ0hFQ0tfQUNDT1VOVF9GQUxTRT0nIycKK2Vsc2UKKyAgQ0hFQ0tfQUNDT1VOVF9UUlVFPScjJworICBDSEVDS19BQ0NPVU5UX0ZBTFNFPQorZmkKKworCisKKworCisjIGZpeHVwcyBmb3IgY29uZmlnLmgKK2lmIHRlc3QgIiRwcmVmaXgiID0gIk5PTkUiOyB0aGVuCisJbXlfb3BfcHJlZml4PSIkYWNfZGVmYXVsdF9wcmVmaXgiCitlbHNlCisJbXlfb3BfcHJlZml4PSIkcHJlZml4IgorZmkKK215X29wX2RhdGFkaXI9IiRteV9vcF9wcmVmaXgvc2hhcmUiCisKK2lmIHRlc3QgIiRleGVjX3ByZWZpeCIgPSAiTk9ORSI7IHRoZW4KKwlteV9vcF9leGVjX3ByZWZpeD0iJG15X29wX3ByZWZpeCIKK2Vsc2UKKwlteV9vcF9leGVjX3ByZWZpeD0iJGV4ZWNfcHJlZml4IgorZmkKK215X29wX2JpbmRpcj0iJG15X29wX2V4ZWNfcHJlZml4L2JpbiIKKworT1BfREFUQURJUj1gZXZhbCBlY2hvICIkbXlfb3BfZGF0YWRpci8kUEFDS0FHRS8iYAorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIE9QX0RBVEFESVIgIiRPUF9EQVRBRElSIgorX0FDRU9GCisKK09QX0JJTkRJUj1gZXZhbCBlY2hvICIkbXlfb3BfYmluZGlyLyJgCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgT1BfQklORElSICIkT1BfQklORElSIgorX0FDRU9GCisKK09QX0RPQ0RJUj1gZXZhbCBlY2hvICIke215X29wX3ByZWZpeH0vc2hhcmUvZG9jLyRQQUNLQUdFLyJgCisKKworYWNfY29uZmlnX2ZpbGVzPSIkYWNfY29uZmlnX2ZpbGVzIE1ha2VmaWxlIG00L01ha2VmaWxlIGxpYnV0aWwvTWFrZWZpbGUgbGlidXRpbC90ZXN0cy9NYWtlZmlsZSBsaWJ1dGlsKysvTWFrZWZpbGUgbGlidXRpbCsrL3Rlc3RzL01ha2VmaWxlIGxpYm9wL01ha2VmaWxlIGxpYm9wL3Rlc3RzL01ha2VmaWxlIGxpYm9wYWdlbnQvTWFrZWZpbGUgbGlib3B0KysvTWFrZWZpbGUgbGliZGIvTWFrZWZpbGUgbGliZGIvdGVzdHMvTWFrZWZpbGUgbGliYWJpL01ha2VmaWxlIGxpYmFiaS90ZXN0cy9NYWtlZmlsZSBsaWJyZWdleC9NYWtlZmlsZSBsaWJyZWdleC90ZXN0cy9NYWtlZmlsZSBsaWJyZWdleC9zdGwucGF0IGxpYnJlZ2V4L3Rlc3RzL21hbmdsZWQtbmFtZSBkYWVtb24vTWFrZWZpbGUgZGFlbW9uL2xpYmxlZ2FjeS9NYWtlZmlsZSBldmVudHMvTWFrZWZpbGUgdXRpbHMvTWFrZWZpbGUgZG9jL01ha2VmaWxlIGRvYy94c2wvY2F0YWxvZy0xLnhtbCBkb2Mvb3Byb2ZpbGUuMSBkb2Mvb3Bjb250cm9sLjEgZG9jL29waGVscC4xIGRvYy9vcHJlcG9ydC4xIGRvYy9vcGFubm90YXRlLjEgZG9jL29wZ3Byb2YuMSBkb2Mvb3BhcmNoaXZlLjEgZG9jL29waW1wb3J0LjEgZG9jL3NyY2RvYy9Eb3h5ZmlsZSBsaWJwcC9NYWtlZmlsZSBvcGppdGNvbnYvTWFrZWZpbGUgcHAvTWFrZWZpbGUgZ3VpL01ha2VmaWxlIGd1aS91aS9NYWtlZmlsZSBtb2R1bGUvTWFrZWZpbGUgbW9kdWxlL3g4Ni9NYWtlZmlsZSBtb2R1bGUvaWE2NC9NYWtlZmlsZSBhZ2VudHMvTWFrZWZpbGUgYWdlbnRzL2p2bXRpL01ha2VmaWxlIGFnZW50cy9qdm1waS9NYWtlZmlsZSIKKworY2F0ID5jb25mY2FjaGUgPDxcX0FDRU9GCisjIFRoaXMgZmlsZSBpcyBhIHNoZWxsIHNjcmlwdCB0aGF0IGNhY2hlcyB0aGUgcmVzdWx0cyBvZiBjb25maWd1cmUKKyMgdGVzdHMgcnVuIG9uIHRoaXMgc3lzdGVtIHNvIHRoZXkgY2FuIGJlIHNoYXJlZCBiZXR3ZWVuIGNvbmZpZ3VyZQorIyBzY3JpcHRzIGFuZCBjb25maWd1cmUgcnVucywgc2VlIGNvbmZpZ3VyZSdzIG9wdGlvbiAtLWNvbmZpZy1jYWNoZS4KKyMgSXQgaXMgbm90IHVzZWZ1bCBvbiBvdGhlciBzeXN0ZW1zLiAgSWYgaXQgY29udGFpbnMgcmVzdWx0cyB5b3UgZG9uJ3QKKyMgd2FudCB0byBrZWVwLCB5b3UgbWF5IHJlbW92ZSBvciBlZGl0IGl0LgorIworIyBjb25maWcuc3RhdHVzIG9ubHkgcGF5cyBhdHRlbnRpb24gdG8gdGhlIGNhY2hlIGZpbGUgaWYgeW91IGdpdmUgaXQKKyMgdGhlIC0tcmVjaGVjayBvcHRpb24gdG8gcmVydW4gY29uZmlndXJlLgorIworIyBgYWNfY3ZfZW52X2ZvbycgdmFyaWFibGVzIChzZXQgb3IgdW5zZXQpIHdpbGwgYmUgb3ZlcnJpZGRlbiB3aGVuCisjIGxvYWRpbmcgdGhpcyBmaWxlLCBvdGhlciAqdW5zZXQqIGBhY19jdl9mb28nIHdpbGwgYmUgYXNzaWduZWQgdGhlCisjIGZvbGxvd2luZyB2YWx1ZXMuCisKK19BQ0VPRgorCisjIFRoZSBmb2xsb3dpbmcgd2F5IG9mIHdyaXRpbmcgdGhlIGNhY2hlIG1pc2hhbmRsZXMgbmV3bGluZXMgaW4gdmFsdWVzLAorIyBidXQgd2Uga25vdyBvZiBubyB3b3JrYXJvdW5kIHRoYXQgaXMgc2ltcGxlLCBwb3J0YWJsZSwgYW5kIGVmZmljaWVudC4KKyMgU28sIHdlIGtpbGwgdmFyaWFibGVzIGNvbnRhaW5pbmcgbmV3bGluZXMuCisjIFVsdHJpeCBzaCBzZXQgd3JpdGVzIHRvIHN0ZGVyciBhbmQgY2FuJ3QgYmUgcmVkaXJlY3RlZCBkaXJlY3RseSwKKyMgYW5kIHNldHMgdGhlIGhpZ2ggYml0IGluIHRoZSBjYWNoZSBmaWxlIHVubGVzcyB3ZSBhc3NpZ24gdG8gdGhlIHZhcnMuCisoCisgIGZvciBhY192YXIgaW4gYChzZXQpIDI+JjEgfCBzZWQgLW4gJ3MvXlwoW2EtekEtWl9dW2EtekEtWjAtOV9dKlwpPS4qL1wxL3AnYDsgZG8KKyAgICBldmFsIGFjX3ZhbD1cJCRhY192YXIKKyAgICBjYXNlICRhY192YWwgaW4gIygKKyAgICAqJHthc19ubH0qKQorICAgICAgY2FzZSAkYWNfdmFyIGluICMoCisgICAgICAqX2N2XyopIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogY2FjaGUgdmFyaWFibGUgJGFjX3ZhciBjb250YWlucyBhIG5ld2xpbmUiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogY2FjaGUgdmFyaWFibGUgJGFjX3ZhciBjb250YWlucyBhIG5ld2xpbmUiID4mMjt9IDs7CisgICAgICBlc2FjCisgICAgICBjYXNlICRhY192YXIgaW4gIygKKyAgICAgIF8gfCBJRlMgfCBhc19ubCkgOzsgIygKKyAgICAgIEJBU0hfQVJHViB8IEJBU0hfU09VUkNFKSBldmFsICRhY192YXI9IDs7ICMoCisgICAgICAqKSB7IGV2YWwgJGFjX3Zhcj07IHVuc2V0ICRhY192YXI7fSA7OworICAgICAgZXNhYyA7OworICAgIGVzYWMKKyAgZG9uZQorCisgIChzZXQpIDI+JjEgfAorICAgIGNhc2UgJGFzX25sYChhY19zcGFjZT0nICc7IHNldCkgMj4mMWAgaW4gIygKKyAgICAqJHthc19ubH1hY19zcGFjZT1cICopCisgICAgICAjIGBzZXQnIGRvZXMgbm90IHF1b3RlIGNvcnJlY3RseSwgc28gYWRkIHF1b3RlczogZG91YmxlLXF1b3RlCisgICAgICAjIHN1YnN0aXR1dGlvbiB0dXJucyBcXFxcIGludG8gXFwsIGFuZCBzZWQgdHVybnMgXFwgaW50byBcLgorICAgICAgc2VkIC1uIFwKKwkicy8nLydcXFxcJycvZzsKKwkgIHMvXlxcKFtfJGFzX2NyX2FsbnVtXSpfY3ZfW18kYXNfY3JfYWxudW1dKlxcKT1cXCguKlxcKS9cXDE9J1xcMicvcCIKKyAgICAgIDs7ICMoCisgICAgKikKKyAgICAgICMgYHNldCcgcXVvdGVzIGNvcnJlY3RseSBhcyByZXF1aXJlZCBieSBQT1NJWCwgc28gZG8gbm90IGFkZCBxdW90ZXMuCisgICAgICBzZWQgLW4gIi9eW18kYXNfY3JfYWxudW1dKl9jdl9bXyRhc19jcl9hbG51bV0qPS9wIgorICAgICAgOzsKKyAgICBlc2FjIHwKKyAgICBzb3J0CispIHwKKyAgc2VkICcKKyAgICAgL15hY19jdl9lbnZfL2IgZW5kCisgICAgIHQgY2xlYXIKKyAgICAgOmNsZWFyCisgICAgIHMvXlwoW149XSpcKT1cKC4qW3t9XS4qXCkkL3Rlc3QgIiR7XDErc2V0fSIgPSBzZXQgfHwgJi8KKyAgICAgdCBlbmQKKyAgICAgcy9eXChbXj1dKlwpPVwoLipcKSQvXDE9JHtcMT1cMn0vCisgICAgIDplbmQnID4+Y29uZmNhY2hlCitpZiBkaWZmICIkY2FjaGVfZmlsZSIgY29uZmNhY2hlID4vZGV2L251bGwgMj4mMTsgdGhlbiA6OyBlbHNlCisgIGlmIHRlc3QgLXcgIiRjYWNoZV9maWxlIjsgdGhlbgorICAgIHRlc3QgIngkY2FjaGVfZmlsZSIgIT0gIngvZGV2L251bGwiICYmCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHVwZGF0aW5nIGNhY2hlICRjYWNoZV9maWxlIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IHVwZGF0aW5nIGNhY2hlICRjYWNoZV9maWxlIiA+JjY7fQorICAgIGNhdCBjb25mY2FjaGUgPiRjYWNoZV9maWxlCisgIGVsc2UKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IG5vdCB1cGRhdGluZyB1bndyaXRhYmxlIGNhY2hlICRjYWNoZV9maWxlIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IG5vdCB1cGRhdGluZyB1bndyaXRhYmxlIGNhY2hlICRjYWNoZV9maWxlIiA+JjY7fQorICBmaQorZmkKK3JtIC1mIGNvbmZjYWNoZQorCit0ZXN0ICJ4JHByZWZpeCIgPSB4Tk9ORSAmJiBwcmVmaXg9JGFjX2RlZmF1bHRfcHJlZml4CisjIExldCBtYWtlIGV4cGFuZCBleGVjX3ByZWZpeC4KK3Rlc3QgIngkZXhlY19wcmVmaXgiID0geE5PTkUgJiYgZXhlY19wcmVmaXg9JyR7cHJlZml4fScKKworREVGUz0tREhBVkVfQ09ORklHX0gKKworYWNfbGlib2Jqcz0KK2FjX2x0bGlib2Jqcz0KK1U9Citmb3IgYWNfaSBpbiA6ICRMSUJPQkpTOyBkbyB0ZXN0ICJ4JGFjX2kiID0geDogJiYgY29udGludWUKKyAgIyAxLiBSZW1vdmUgdGhlIGV4dGVuc2lvbiwgYW5kICRVIGlmIGFscmVhZHkgaW5zdGFsbGVkLgorICBhY19zY3JpcHQ9J3MvXCRVXC4vLi87cy9cLm8kLy87cy9cLm9iaiQvLycKKyAgYWNfaT1gJGFzX2VjaG8gIiRhY19pIiB8IHNlZCAiJGFjX3NjcmlwdCJgCisgICMgMi4gUHJlcGVuZCBMSUJPQkpESVIuICBXaGVuIHVzZWQgd2l0aCBhdXRvbWFrZT49MS4xMCBMSUJPQkpESVIKKyAgIyAgICB3aWxsIGJlIHNldCB0byB0aGUgZGlyZWN0b3J5IHdoZXJlIExJQk9CSlMgb2JqZWN0cyBhcmUgYnVpbHQuCisgIGFzX2ZuX2FwcGVuZCBhY19saWJvYmpzICIgXCR7TElCT0JKRElSfSRhY19pXCRVLiRhY19vYmpleHQiCisgIGFzX2ZuX2FwcGVuZCBhY19sdGxpYm9ianMgIiBcJHtMSUJPQkpESVJ9JGFjX2kiJyRVLmxvJworZG9uZQorTElCT0JKUz0kYWNfbGlib2JqcworCitMVExJQk9CSlM9JGFjX2x0bGlib2JqcworCisKKyBpZiB0ZXN0IC1uICIkRVhFRVhUIjsgdGhlbgorICBhbV9fRVhFRVhUX1RSVUU9CisgIGFtX19FWEVFWFRfRkFMU0U9JyMnCitlbHNlCisgIGFtX19FWEVFWFRfVFJVRT0nIycKKyAgYW1fX0VYRUVYVF9GQUxTRT0KK2ZpCisKK2lmIHRlc3QgLXogIiR7QU1ERVBfVFJVRX0iICYmIHRlc3QgLXogIiR7QU1ERVBfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJBTURFUFwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7YW1fX2Zhc3RkZXBDQ19UUlVFfSIgJiYgdGVzdCAteiAiJHthbV9fZmFzdGRlcENDX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiYW1fX2Zhc3RkZXBDQ1wiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7YW1fX2Zhc3RkZXBDQ19UUlVFfSIgJiYgdGVzdCAteiAiJHthbV9fZmFzdGRlcENDX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiYW1fX2Zhc3RkZXBDQ1wiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7YW1fX2Zhc3RkZXBDWFhfVFJVRX0iICYmIHRlc3QgLXogIiR7YW1fX2Zhc3RkZXBDWFhfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJhbV9fZmFzdGRlcENYWFwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7YW1fX2Zhc3RkZXBDWFhfVFJVRX0iICYmIHRlc3QgLXogIiR7YW1fX2Zhc3RkZXBDWFhfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJhbV9fZmFzdGRlcENYWFwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7a2VybmVsX3N1cHBvcnRfVFJVRX0iICYmIHRlc3QgLXogIiR7a2VybmVsX3N1cHBvcnRfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJrZXJuZWxfc3VwcG9ydFwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7QlVJTERfSlZNVElfQUdFTlRfVFJVRX0iICYmIHRlc3QgLXogIiR7QlVJTERfSlZNVElfQUdFTlRfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJCVUlMRF9KVk1USV9BR0VOVFwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7QlVJTERfSlZNUElfQUdFTlRfVFJVRX0iICYmIHRlc3QgLXogIiR7QlVJTERfSlZNUElfQUdFTlRfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJCVUlMRF9KVk1QSV9BR0VOVFwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7aGF2ZV9xdF9UUlVFfSIgJiYgdGVzdCAteiAiJHtoYXZlX3F0X0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiaGF2ZV9xdFwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7aGF2ZV94c2x0cHJvY19UUlVFfSIgJiYgdGVzdCAteiAiJHtoYXZlX3hzbHRwcm9jX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiaGF2ZV94c2x0cHJvY1wiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7Q0hFQ0tfQUNDT1VOVF9UUlVFfSIgJiYgdGVzdCAteiAiJHtDSEVDS19BQ0NPVU5UX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiQ0hFQ0tfQUNDT1VOVFwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKKworOiAke0NPTkZJR19TVEFUVVM9Li9jb25maWcuc3RhdHVzfQorYWNfd3JpdGVfZmFpbD0wCithY19jbGVhbl9maWxlc19zYXZlPSRhY19jbGVhbl9maWxlcworYWNfY2xlYW5fZmlsZXM9IiRhY19jbGVhbl9maWxlcyAkQ09ORklHX1NUQVRVUyIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY3JlYXRpbmcgJENPTkZJR19TVEFUVVMiID4mNQorJGFzX2VjaG8gIiRhc19tZTogY3JlYXRpbmcgJENPTkZJR19TVEFUVVMiID4mNjt9Cithc193cml0ZV9mYWlsPTAKK2NhdCA+JENPTkZJR19TVEFUVVMgPDxfQVNFT0YgfHwgYXNfd3JpdGVfZmFpbD0xCisjISAkU0hFTEwKKyMgR2VuZXJhdGVkIGJ5ICRhc19tZS4KKyMgUnVuIHRoaXMgZmlsZSB0byByZWNyZWF0ZSB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLgorIyBDb21waWxlciBvdXRwdXQgcHJvZHVjZWQgYnkgY29uZmlndXJlLCB1c2VmdWwgZm9yIGRlYnVnZ2luZworIyBjb25maWd1cmUsIGlzIGluIGNvbmZpZy5sb2cgaWYgaXQgZXhpc3RzLgorCitkZWJ1Zz1mYWxzZQorYWNfY3NfcmVjaGVjaz1mYWxzZQorYWNfY3Nfc2lsZW50PWZhbHNlCisKK1NIRUxMPVwke0NPTkZJR19TSEVMTC0kU0hFTEx9CitleHBvcnQgU0hFTEwKK19BU0VPRgorY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FTRU9GIHx8IGFzX3dyaXRlX2ZhaWw9MQorIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIE00c2ggSW5pdGlhbGl6YXRpb24uICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCisjIEJlIG1vcmUgQm91cm5lIGNvbXBhdGlibGUKK0RVQUxDQVNFPTE7IGV4cG9ydCBEVUFMQ0FTRSAjIGZvciBNS1Mgc2gKK2lmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgJiYgKGVtdWxhdGUgc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisgIGVtdWxhdGUgc2gKKyAgTlVMTENNRD06CisgICMgUHJlLTQuMiB2ZXJzaW9ucyBvZiBac2ggZG8gd29yZCBzcGxpdHRpbmcgb24gJHsxKyIkQCJ9LCB3aGljaAorICAjIGlzIGNvbnRyYXJ5IHRvIG91ciB1c2FnZS4gIERpc2FibGUgdGhpcyBmZWF0dXJlLgorICBhbGlhcyAtZyAnJHsxKyIkQCJ9Jz0nIiRAIicKKyAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKK2Vsc2UKKyAgY2FzZSBgKHNldCAtbykgMj4vZGV2L251bGxgIGluICMoCisgICpwb3NpeCopIDoKKyAgICBzZXQgLW8gcG9zaXggOzsgIygKKyAgKikgOgorICAgICA7OworZXNhYworZmkKKworCithc19ubD0nCisnCitleHBvcnQgYXNfbmwKKyMgUHJpbnRpbmcgYSBsb25nIHN0cmluZyBjcmFzaGVzIFNvbGFyaXMgNyAvdXNyL2Jpbi9wcmludGYuCithc19lY2hvPSdcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcJworYXNfZWNobz0kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobyRhc19lY2hvCithc19lY2hvPSRhc19lY2hvJGFzX2VjaG8kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobworIyBQcmVmZXIgYSBrc2ggc2hlbGwgYnVpbHRpbiBvdmVyIGFuIGV4dGVybmFsIHByaW50ZiBwcm9ncmFtIG9uIFNvbGFyaXMsCisjIGJ1dCB3aXRob3V0IHdhc3RpbmcgZm9ya3MgZm9yIGJhc2ggb3IgenNoLgoraWYgdGVzdCAteiAiJEJBU0hfVkVSU0lPTiRaU0hfVkVSU0lPTiIgXAorICAgICYmICh0ZXN0ICJYYHByaW50IC1yIC0tICRhc19lY2hvYCIgPSAiWCRhc19lY2hvIikgMj4vZGV2L251bGw7IHRoZW4KKyAgYXNfZWNobz0ncHJpbnQgLXIgLS0nCisgIGFzX2VjaG9fbj0ncHJpbnQgLXJuIC0tJworZWxpZiAodGVzdCAiWGBwcmludGYgJXMgJGFzX2VjaG9gIiA9ICJYJGFzX2VjaG8iKSAyPi9kZXYvbnVsbDsgdGhlbgorICBhc19lY2hvPSdwcmludGYgJXNcbicKKyAgYXNfZWNob19uPSdwcmludGYgJXMnCitlbHNlCisgIGlmIHRlc3QgIlhgKC91c3IvdWNiL2VjaG8gLW4gLW4gJGFzX2VjaG8pIDI+L2Rldi9udWxsYCIgPSAiWC1uICRhc19lY2hvIjsgdGhlbgorICAgIGFzX2VjaG9fYm9keT0nZXZhbCAvdXNyL3VjYi9lY2hvIC1uICIkMSRhc19ubCInCisgICAgYXNfZWNob19uPScvdXNyL3VjYi9lY2hvIC1uJworICBlbHNlCisgICAgYXNfZWNob19ib2R5PSdldmFsIGV4cHIgIlgkMSIgOiAiWFxcKC4qXFwpIicKKyAgICBhc19lY2hvX25fYm9keT0nZXZhbAorICAgICAgYXJnPSQxOworICAgICAgY2FzZSAkYXJnIGluICMoCisgICAgICAqIiRhc19ubCIqKQorCWV4cHIgIlgkYXJnIiA6ICJYXFwoLipcXCkkYXNfbmwiOworCWFyZz1gZXhwciAiWCRhcmciIDogIi4qJGFzX25sXFwoLipcXCkiYDs7CisgICAgICBlc2FjOworICAgICAgZXhwciAiWCRhcmciIDogIlhcXCguKlxcKSIgfCB0ciAtZCAiJGFzX25sIgorICAgICcKKyAgICBleHBvcnQgYXNfZWNob19uX2JvZHkKKyAgICBhc19lY2hvX249J3NoIC1jICRhc19lY2hvX25fYm9keSBhc19lY2hvJworICBmaQorICBleHBvcnQgYXNfZWNob19ib2R5CisgIGFzX2VjaG89J3NoIC1jICRhc19lY2hvX2JvZHkgYXNfZWNobycKK2ZpCisKKyMgVGhlIHVzZXIgaXMgYWx3YXlzIHJpZ2h0LgoraWYgdGVzdCAiJHtQQVRIX1NFUEFSQVRPUitzZXR9IiAhPSBzZXQ7IHRoZW4KKyAgUEFUSF9TRVBBUkFUT1I9OgorICAoUEFUSD0nL2JpbjsvYmluJzsgRlBBVEg9JFBBVEg7IHNoIC1jIDopID4vZGV2L251bGwgMj4mMSAmJiB7CisgICAgKFBBVEg9Jy9iaW46L2Jpbic7IEZQQVRIPSRQQVRIOyBzaCAtYyA6KSA+L2Rldi9udWxsIDI+JjEgfHwKKyAgICAgIFBBVEhfU0VQQVJBVE9SPSc7JworICB9CitmaQorCisKKyMgSUZTCisjIFdlIG5lZWQgc3BhY2UsIHRhYiBhbmQgbmV3IGxpbmUsIGluIHByZWNpc2VseSB0aGF0IG9yZGVyLiAgUXVvdGluZyBpcworIyB0aGVyZSB0byBwcmV2ZW50IGVkaXRvcnMgZnJvbSBjb21wbGFpbmluZyBhYm91dCBzcGFjZS10YWIuCisjIChJZiBfQVNfUEFUSF9XQUxLIHdlcmUgY2FsbGVkIHdpdGggSUZTIHVuc2V0LCBpdCB3b3VsZCBkaXNhYmxlIHdvcmQKKyMgc3BsaXR0aW5nIGJ5IHNldHRpbmcgSUZTIHRvIGVtcHR5IHZhbHVlLikKK0lGUz0iICIiCSRhc19ubCIKKworIyBGaW5kIHdobyB3ZSBhcmUuICBMb29rIGluIHRoZSBwYXRoIGlmIHdlIGNvbnRhaW4gbm8gZGlyZWN0b3J5IHNlcGFyYXRvci4KK2Nhc2UgJDAgaW4gIygoCisgICpbXFwvXSogKSBhc19teXNlbGY9JDAgOzsKKyAgKikgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIHRlc3QgLXIgIiRhc19kaXIvJDAiICYmIGFzX215c2VsZj0kYXNfZGlyLyQwICYmIGJyZWFrCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworICAgICA7OworZXNhYworIyBXZSBkaWQgbm90IGZpbmQgb3Vyc2VsdmVzLCBtb3N0IHByb2JhYmx5IHdlIHdlcmUgcnVuIGFzIGBzaCBDT01NQU5EJworIyBpbiB3aGljaCBjYXNlIHdlIGFyZSBub3QgdG8gYmUgZm91bmQgaW4gdGhlIHBhdGguCitpZiB0ZXN0ICJ4JGFzX215c2VsZiIgPSB4OyB0aGVuCisgIGFzX215c2VsZj0kMAorZmkKK2lmIHRlc3QgISAtZiAiJGFzX215c2VsZiI7IHRoZW4KKyAgJGFzX2VjaG8gIiRhc19teXNlbGY6IGVycm9yOiBjYW5ub3QgZmluZCBteXNlbGY7IHJlcnVuIHdpdGggYW4gYWJzb2x1dGUgZmlsZSBuYW1lIiA+JjIKKyAgZXhpdCAxCitmaQorCisjIFVuc2V0IHZhcmlhYmxlcyB0aGF0IHdlIGRvIG5vdCBuZWVkIGFuZCB3aGljaCBjYXVzZSBidWdzIChlLmcuIGluCisjIHByZS0zLjAgVVdJTiBrc2gpLiAgQnV0IGRvIG5vdCBjYXVzZSBidWdzIGluIGJhc2ggMi4wMTsgdGhlICJ8fCBleGl0IDEiCisjIHN1cHByZXNzZXMgYW55ICJTZWdtZW50YXRpb24gZmF1bHQiIG1lc3NhZ2UgdGhlcmUuICAnKCgnIGNvdWxkCisjIHRyaWdnZXIgYSBidWcgaW4gcGRrc2ggNS4yLjE0LgorZm9yIGFzX3ZhciBpbiBCQVNIX0VOViBFTlYgTUFJTCBNQUlMUEFUSAorZG8gZXZhbCB0ZXN0IHhcJHskYXNfdmFyK3NldH0gPSB4c2V0IFwKKyAgJiYgKCAodW5zZXQgJGFzX3ZhcikgfHwgZXhpdCAxKSA+L2Rldi9udWxsIDI+JjEgJiYgdW5zZXQgJGFzX3ZhciB8fCA6Citkb25lCitQUzE9JyQgJworUFMyPSc+ICcKK1BTND0nKyAnCisKKyMgTkxTIG51aXNhbmNlcy4KK0xDX0FMTD1DCitleHBvcnQgTENfQUxMCitMQU5HVUFHRT1DCitleHBvcnQgTEFOR1VBR0UKKworIyBDRFBBVEguCisodW5zZXQgQ0RQQVRIKSA+L2Rldi9udWxsIDI+JjEgJiYgdW5zZXQgQ0RQQVRICisKKworIyBhc19mbl9lcnJvciBTVEFUVVMgRVJST1IgW0xJTkVOTyBMT0dfRkRdCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgT3V0cHV0ICJgYmFzZW5hbWUgJDBgOiBlcnJvcjogRVJST1IiIHRvIHN0ZGVyci4gSWYgTElORU5PIGFuZCBMT0dfRkQgYXJlCisjIHByb3ZpZGVkLCBhbHNvIG91dHB1dCB0aGUgZXJyb3IgdG8gTE9HX0ZELCByZWZlcmVuY2luZyBMSU5FTk8uIFRoZW4gZXhpdCB0aGUKKyMgc2NyaXB0IHdpdGggU1RBVFVTLCB1c2luZyAxIGlmIHRoYXQgd2FzIDAuCithc19mbl9lcnJvciAoKQoreworICBhc19zdGF0dXM9JDE7IHRlc3QgJGFzX3N0YXR1cyAtZXEgMCAmJiBhc19zdGF0dXM9MQorICBpZiB0ZXN0ICIkNCI7IHRoZW4KKyAgICBhc19saW5lbm89JHthc19saW5lbm8tIiQzIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6ICQyIiA+JiQ0CisgIGZpCisgICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiAkMiIgPiYyCisgIGFzX2ZuX2V4aXQgJGFzX3N0YXR1cworfSAjIGFzX2ZuX2Vycm9yCisKKworIyBhc19mbl9zZXRfc3RhdHVzIFNUQVRVUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBTZXQgJD8gdG8gU1RBVFVTLCB3aXRob3V0IGZvcmtpbmcuCithc19mbl9zZXRfc3RhdHVzICgpCit7CisgIHJldHVybiAkMQorfSAjIGFzX2ZuX3NldF9zdGF0dXMKKworIyBhc19mbl9leGl0IFNUQVRVUworIyAtLS0tLS0tLS0tLS0tLS0tLQorIyBFeGl0IHRoZSBzaGVsbCB3aXRoIFNUQVRVUywgZXZlbiBpbiBhICJ0cmFwIDAiIG9yICJzZXQgLWUiIGNvbnRleHQuCithc19mbl9leGl0ICgpCit7CisgIHNldCArZQorICBhc19mbl9zZXRfc3RhdHVzICQxCisgIGV4aXQgJDEKK30gIyBhc19mbl9leGl0CisKKyMgYXNfZm5fdW5zZXQgVkFSCisjIC0tLS0tLS0tLS0tLS0tLQorIyBQb3J0YWJseSB1bnNldCBWQVIuCithc19mbl91bnNldCAoKQoreworICB7IGV2YWwgJDE9OyB1bnNldCAkMTt9Cit9Cithc191bnNldD1hc19mbl91bnNldAorIyBhc19mbl9hcHBlbmQgVkFSIFZBTFVFCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQXBwZW5kIHRoZSB0ZXh0IGluIFZBTFVFIHRvIHRoZSBlbmQgb2YgdGhlIGRlZmluaXRpb24gY29udGFpbmVkIGluIFZBUi4gVGFrZQorIyBhZHZhbnRhZ2Ugb2YgYW55IHNoZWxsIG9wdGltaXphdGlvbnMgdGhhdCBhbGxvdyBhbW9ydGl6ZWQgbGluZWFyIGdyb3d0aCBvdmVyCisjIHJlcGVhdGVkIGFwcGVuZHMsIGluc3RlYWQgb2YgdGhlIHR5cGljYWwgcXVhZHJhdGljIGdyb3d0aCBwcmVzZW50IGluIG5haXZlCisjIGltcGxlbWVudGF0aW9ucy4KK2lmIChldmFsICJhc192YXI9MTsgYXNfdmFyKz0yOyB0ZXN0IHhcJGFzX3ZhciA9IHgxMiIpIDI+L2Rldi9udWxsOyB0aGVuIDoKKyAgZXZhbCAnYXNfZm5fYXBwZW5kICgpCisgIHsKKyAgICBldmFsICQxKz1cJDIKKyAgfScKK2Vsc2UKKyAgYXNfZm5fYXBwZW5kICgpCisgIHsKKyAgICBldmFsICQxPVwkJDFcJDIKKyAgfQorZmkgIyBhc19mbl9hcHBlbmQKKworIyBhc19mbl9hcml0aCBBUkcuLi4KKyMgLS0tLS0tLS0tLS0tLS0tLS0tCisjIFBlcmZvcm0gYXJpdGhtZXRpYyBldmFsdWF0aW9uIG9uIHRoZSBBUkdzLCBhbmQgc3RvcmUgdGhlIHJlc3VsdCBpbiB0aGUKKyMgZ2xvYmFsICRhc192YWwuIFRha2UgYWR2YW50YWdlIG9mIHNoZWxscyB0aGF0IGNhbiBhdm9pZCBmb3Jrcy4gVGhlIGFyZ3VtZW50cworIyBtdXN0IGJlIHBvcnRhYmxlIGFjcm9zcyAkKCgpKSBhbmQgZXhwci4KK2lmIChldmFsICJ0ZXN0IFwkKCggMSArIDEgKSkgPSAyIikgMj4vZGV2L251bGw7IHRoZW4gOgorICBldmFsICdhc19mbl9hcml0aCAoKQorICB7CisgICAgYXNfdmFsPSQoKCAkKiApKQorICB9JworZWxzZQorICBhc19mbl9hcml0aCAoKQorICB7CisgICAgYXNfdmFsPWBleHByICIkQCIgfHwgdGVzdCAkPyAtZXEgMWAKKyAgfQorZmkgIyBhc19mbl9hcml0aAorCisKK2lmIGV4cHIgYSA6ICdcKGFcKScgPi9kZXYvbnVsbCAyPiYxICYmCisgICB0ZXN0ICJYYGV4cHIgMDAwMDEgOiAnLipcKC4uLlwpJ2AiID0gWDAwMTsgdGhlbgorICBhc19leHByPWV4cHIKK2Vsc2UKKyAgYXNfZXhwcj1mYWxzZQorZmkKKworaWYgKGJhc2VuYW1lIC0tIC8pID4vZGV2L251bGwgMj4mMSAmJiB0ZXN0ICJYYGJhc2VuYW1lIC0tIC8gMj4mMWAiID0gIlgvIjsgdGhlbgorICBhc19iYXNlbmFtZT1iYXNlbmFtZQorZWxzZQorICBhc19iYXNlbmFtZT1mYWxzZQorZmkKKworaWYgKGFzX2Rpcj1gZGlybmFtZSAtLSAvYCAmJiB0ZXN0ICJYJGFzX2RpciIgPSBYLykgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIGFzX2Rpcm5hbWU9ZGlybmFtZQorZWxzZQorICBhc19kaXJuYW1lPWZhbHNlCitmaQorCithc19tZT1gJGFzX2Jhc2VuYW1lIC0tICIkMCIgfHwKKyRhc19leHByIFgvIiQwIiA6ICcuKi9cKFteL11bXi9dKlwpLyokJyBcfCBcCisJIFgiJDAiIDogJ1hcKC8vXCkkJyBcfCBcCisJIFgiJDAiIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAorJGFzX2VjaG8gWC8iJDAiIHwKKyAgICBzZWQgJy9eLipcL1woW14vXVteL10qXClcLyokL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwvXChcL1wvXCkkL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwvXChcL1wpLioveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgcy8uKi8uLzsgcSdgCisKKyMgQXZvaWQgZGVwZW5kaW5nIHVwb24gQ2hhcmFjdGVyIFJhbmdlcy4KK2FzX2NyX2xldHRlcnM9J2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JworYXNfY3JfTEVUVEVSUz0nQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonCithc19jcl9MZXR0ZXJzPSRhc19jcl9sZXR0ZXJzJGFzX2NyX0xFVFRFUlMKK2FzX2NyX2RpZ2l0cz0nMDEyMzQ1Njc4OScKK2FzX2NyX2FsbnVtPSRhc19jcl9MZXR0ZXJzJGFzX2NyX2RpZ2l0cworCitFQ0hPX0M9IEVDSE9fTj0gRUNIT19UPQorY2FzZSBgZWNobyAtbiB4YCBpbiAjKCgoKCgKKy1uKikKKyAgY2FzZSBgZWNobyAneHlcYydgIGluCisgICpjKikgRUNIT19UPScJJzs7CSMgRUNIT19UIGlzIHNpbmdsZSB0YWIgY2hhcmFjdGVyLgorICB4eSkgIEVDSE9fQz0nXGMnOzsKKyAgKikgICBlY2hvIGBlY2hvIGtzaDg4IGJ1ZyBvbiBBSVggNi4xYCA+IC9kZXYvbnVsbAorICAgICAgIEVDSE9fVD0nCSc7OworICBlc2FjOzsKKyopCisgIEVDSE9fTj0nLW4nOzsKK2VzYWMKKworcm0gLWYgY29uZiQkIGNvbmYkJC5leGUgY29uZiQkLmZpbGUKK2lmIHRlc3QgLWQgY29uZiQkLmRpcjsgdGhlbgorICBybSAtZiBjb25mJCQuZGlyL2NvbmYkJC5maWxlCitlbHNlCisgIHJtIC1mIGNvbmYkJC5kaXIKKyAgbWtkaXIgY29uZiQkLmRpciAyPi9kZXYvbnVsbAorZmkKK2lmIChlY2hvID5jb25mJCQuZmlsZSkgMj4vZGV2L251bGw7IHRoZW4KKyAgaWYgbG4gLXMgY29uZiQkLmZpbGUgY29uZiQkIDI+L2Rldi9udWxsOyB0aGVuCisgICAgYXNfbG5fcz0nbG4gLXMnCisgICAgIyAuLi4gYnV0IHRoZXJlIGFyZSB0d28gZ290Y2hhczoKKyAgICAjIDEpIE9uIE1TWVMsIGJvdGggYGxuIC1zIGZpbGUgZGlyJyBhbmQgYGxuIGZpbGUgZGlyJyBmYWlsLgorICAgICMgMikgREpHUFAgPCAyLjA0IGhhcyBubyBzeW1saW5rczsgYGxuIC1zJyBjcmVhdGVzIGEgd3JhcHBlciBleGVjdXRhYmxlLgorICAgICMgSW4gYm90aCBjYXNlcywgd2UgaGF2ZSB0byBkZWZhdWx0IHRvIGBjcCAtcCcuCisgICAgbG4gLXMgY29uZiQkLmZpbGUgY29uZiQkLmRpciAyPi9kZXYvbnVsbCAmJiB0ZXN0ICEgLWYgY29uZiQkLmV4ZSB8fAorICAgICAgYXNfbG5fcz0nY3AgLXAnCisgIGVsaWYgbG4gY29uZiQkLmZpbGUgY29uZiQkIDI+L2Rldi9udWxsOyB0aGVuCisgICAgYXNfbG5fcz1sbgorICBlbHNlCisgICAgYXNfbG5fcz0nY3AgLXAnCisgIGZpCitlbHNlCisgIGFzX2xuX3M9J2NwIC1wJworZmkKK3JtIC1mIGNvbmYkJCBjb25mJCQuZXhlIGNvbmYkJC5kaXIvY29uZiQkLmZpbGUgY29uZiQkLmZpbGUKK3JtZGlyIGNvbmYkJC5kaXIgMj4vZGV2L251bGwKKworCisjIGFzX2ZuX21rZGlyX3AKKyMgLS0tLS0tLS0tLS0tLQorIyBDcmVhdGUgIiRhc19kaXIiIGFzIGEgZGlyZWN0b3J5LCBpbmNsdWRpbmcgcGFyZW50cyBpZiBuZWNlc3NhcnkuCithc19mbl9ta2Rpcl9wICgpCit7CisKKyAgY2FzZSAkYXNfZGlyIGluICMoCisgIC0qKSBhc19kaXI9Li8kYXNfZGlyOzsKKyAgZXNhYworICB0ZXN0IC1kICIkYXNfZGlyIiB8fCBldmFsICRhc19ta2Rpcl9wIHx8IHsKKyAgICBhc19kaXJzPQorICAgIHdoaWxlIDo7IGRvCisgICAgICBjYXNlICRhc19kaXIgaW4gIygKKyAgICAgICpcJyopIGFzX3FkaXI9YCRhc19lY2hvICIkYXNfZGlyIiB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYDs7ICMnKAorICAgICAgKikgYXNfcWRpcj0kYXNfZGlyOzsKKyAgICAgIGVzYWMKKyAgICAgIGFzX2RpcnM9IickYXNfcWRpcicgJGFzX2RpcnMiCisgICAgICBhc19kaXI9YCRhc19kaXJuYW1lIC0tICIkYXNfZGlyIiB8fAorJGFzX2V4cHIgWCIkYXNfZGlyIiA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXAorCSBYIiRhc19kaXIiIDogJ1hcKC8vXClbXi9dJyBcfCBcCisJIFgiJGFzX2RpciIgOiAnWFwoLy9cKSQnIFx8IFwKKwkgWCIkYXNfZGlyIiA6ICdYXCgvXCknIFx8IC4gMj4vZGV2L251bGwgfHwKKyRhc19lY2hvIFgiJGFzX2RpciIgfAorICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXC9cKVteL10uKi97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXC9cKSQveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wpLioveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgcy8uKi8uLzsgcSdgCisgICAgICB0ZXN0IC1kICIkYXNfZGlyIiAmJiBicmVhaworICAgIGRvbmUKKyAgICB0ZXN0IC16ICIkYXNfZGlycyIgfHwgZXZhbCAibWtkaXIgJGFzX2RpcnMiCisgIH0gfHwgdGVzdCAtZCAiJGFzX2RpciIgfHwgYXNfZm5fZXJyb3IgJD8gImNhbm5vdCBjcmVhdGUgZGlyZWN0b3J5ICRhc19kaXIiCisKKworfSAjIGFzX2ZuX21rZGlyX3AKK2lmIG1rZGlyIC1wIC4gMj4vZGV2L251bGw7IHRoZW4KKyAgYXNfbWtkaXJfcD0nbWtkaXIgLXAgIiRhc19kaXIiJworZWxzZQorICB0ZXN0IC1kIC4vLXAgJiYgcm1kaXIgLi8tcAorICBhc19ta2Rpcl9wPWZhbHNlCitmaQorCitpZiB0ZXN0IC14IC8gPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIGFzX3Rlc3RfeD0ndGVzdCAteCcKK2Vsc2UKKyAgaWYgbHMgLWRMIC8gPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgYXNfbHNfTF9vcHRpb249TAorICBlbHNlCisgICAgYXNfbHNfTF9vcHRpb249CisgIGZpCisgIGFzX3Rlc3RfeD0nCisgICAgZXZhbCBzaCAtYyAnXCcnCisgICAgICBpZiB0ZXN0IC1kICIkMSI7IHRoZW4KKwl0ZXN0IC1kICIkMS8uIjsKKyAgICAgIGVsc2UKKwljYXNlICQxIGluICMoCisJLSopc2V0ICIuLyQxIjs7CisJZXNhYzsKKwljYXNlIGBscyAtbGQnJGFzX2xzX0xfb3B0aW9uJyAiJDEiIDI+L2Rldi9udWxsYCBpbiAjKCgKKwk/Pz9bc3hdKik6OzsqKWZhbHNlOztlc2FjO2ZpCisgICAgJ1wnJyBzaAorICAnCitmaQorYXNfZXhlY3V0YWJsZV9wPSRhc190ZXN0X3gKKworIyBTZWQgZXhwcmVzc2lvbiB0byBtYXAgYSBzdHJpbmcgb250byBhIHZhbGlkIENQUCBuYW1lLgorYXNfdHJfY3BwPSJldmFsIHNlZCAneSUqJGFzX2NyX2xldHRlcnMlUCRhc19jcl9MRVRURVJTJTtzJVteXyRhc19jcl9hbG51bV0lXyVnJyIKKworIyBTZWQgZXhwcmVzc2lvbiB0byBtYXAgYSBzdHJpbmcgb250byBhIHZhbGlkIHZhcmlhYmxlIG5hbWUuCithc190cl9zaD0iZXZhbCBzZWQgJ3klKislcHAlO3MlW15fJGFzX2NyX2FsbnVtXSVfJWcnIgorCisKK2V4ZWMgNj4mMQorIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIE1haW4gYm9keSBvZiAkQ09ORklHX1NUQVRVUyBzY3JpcHQuICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworX0FTRU9GCit0ZXN0ICRhc193cml0ZV9mYWlsID0gMCAmJiBjaG1vZCAreCAkQ09ORklHX1NUQVRVUyB8fCBhY193cml0ZV9mYWlsPTEKKworY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorIyBTYXZlIHRoZSBsb2cgbWVzc2FnZSwgdG8ga2VlcCAkMCBhbmQgc28gb24gbWVhbmluZ2Z1bCwgYW5kIHRvCisjIHJlcG9ydCBhY3R1YWwgaW5wdXQgdmFsdWVzIG9mIENPTkZJR19GSUxFUyBldGMuIGluc3RlYWQgb2YgdGhlaXIKKyMgdmFsdWVzIGFmdGVyIG9wdGlvbnMgaGFuZGxpbmcuCithY19sb2c9IgorVGhpcyBmaWxlIHdhcyBleHRlbmRlZCBieSAkYXNfbWUsIHdoaWNoIHdhcworZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjY3LiAgSW52b2NhdGlvbiBjb21tYW5kIGxpbmUgd2FzCisKKyAgQ09ORklHX0ZJTEVTICAgID0gJENPTkZJR19GSUxFUworICBDT05GSUdfSEVBREVSUyAgPSAkQ09ORklHX0hFQURFUlMKKyAgQ09ORklHX0xJTktTICAgID0gJENPTkZJR19MSU5LUworICBDT05GSUdfQ09NTUFORFMgPSAkQ09ORklHX0NPTU1BTkRTCisgICQgJDAgJEAKKworb24gYChob3N0bmFtZSB8fCB1bmFtZSAtbikgMj4vZGV2L251bGwgfCBzZWQgMXFgCisiCisKK19BQ0VPRgorCitjYXNlICRhY19jb25maWdfZmlsZXMgaW4gKiIKKyIqKSBzZXQgeCAkYWNfY29uZmlnX2ZpbGVzOyBzaGlmdDsgYWNfY29uZmlnX2ZpbGVzPSQqOzsKK2VzYWMKKworY2FzZSAkYWNfY29uZmlnX2hlYWRlcnMgaW4gKiIKKyIqKSBzZXQgeCAkYWNfY29uZmlnX2hlYWRlcnM7IHNoaWZ0OyBhY19jb25maWdfaGVhZGVycz0kKjs7Citlc2FjCisKKworY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCisjIEZpbGVzIHRoYXQgY29uZmlnLnN0YXR1cyB3YXMgbWFkZSBmb3IuCitjb25maWdfZmlsZXM9IiRhY19jb25maWdfZmlsZXMiCitjb25maWdfaGVhZGVycz0iJGFjX2NvbmZpZ19oZWFkZXJzIgorY29uZmlnX2NvbW1hbmRzPSIkYWNfY29uZmlnX2NvbW1hbmRzIgorCitfQUNFT0YKKworY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorYWNfY3NfdXNhZ2U9IlwKK1xgJGFzX21lJyBpbnN0YW50aWF0ZXMgZmlsZXMgYW5kIG90aGVyIGNvbmZpZ3VyYXRpb24gYWN0aW9ucworZnJvbSB0ZW1wbGF0ZXMgYWNjb3JkaW5nIHRvIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24uICBVbmxlc3MgdGhlIGZpbGVzCithbmQgYWN0aW9ucyBhcmUgc3BlY2lmaWVkIGFzIFRBR3MsIGFsbCBhcmUgaW5zdGFudGlhdGVkIGJ5IGRlZmF1bHQuCisKK1VzYWdlOiAkMCBbT1BUSU9OXS4uLiBbVEFHXS4uLgorCisgIC1oLCAtLWhlbHAgICAgICAgcHJpbnQgdGhpcyBoZWxwLCB0aGVuIGV4aXQKKyAgLVYsIC0tdmVyc2lvbiAgICBwcmludCB2ZXJzaW9uIG51bWJlciBhbmQgY29uZmlndXJhdGlvbiBzZXR0aW5ncywgdGhlbiBleGl0CisgICAgICAtLWNvbmZpZyAgICAgcHJpbnQgY29uZmlndXJhdGlvbiwgdGhlbiBleGl0CisgIC1xLCAtLXF1aWV0LCAtLXNpbGVudAorICAgICAgICAgICAgICAgICAgIGRvIG5vdCBwcmludCBwcm9ncmVzcyBtZXNzYWdlcworICAtZCwgLS1kZWJ1ZyAgICAgIGRvbid0IHJlbW92ZSB0ZW1wb3JhcnkgZmlsZXMKKyAgICAgIC0tcmVjaGVjayAgICB1cGRhdGUgJGFzX21lIGJ5IHJlY29uZmlndXJpbmcgaW4gdGhlIHNhbWUgY29uZGl0aW9ucworICAgICAgLS1maWxlPUZJTEVbOlRFTVBMQVRFXQorICAgICAgICAgICAgICAgICAgIGluc3RhbnRpYXRlIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgRklMRQorICAgICAgLS1oZWFkZXI9RklMRVs6VEVNUExBVEVdCisgICAgICAgICAgICAgICAgICAgaW5zdGFudGlhdGUgdGhlIGNvbmZpZ3VyYXRpb24gaGVhZGVyIEZJTEUKKworQ29uZmlndXJhdGlvbiBmaWxlczoKKyRjb25maWdfZmlsZXMKKworQ29uZmlndXJhdGlvbiBoZWFkZXJzOgorJGNvbmZpZ19oZWFkZXJzCisKK0NvbmZpZ3VyYXRpb24gY29tbWFuZHM6CiskY29uZmlnX2NvbW1hbmRzCisKK1JlcG9ydCBidWdzIHRvIHRoZSBwYWNrYWdlIHByb3ZpZGVyLiIKKworX0FDRU9GCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKK2FjX2NzX2NvbmZpZz0iYCRhc19lY2hvICIkYWNfY29uZmlndXJlX2FyZ3MiIHwgc2VkICdzL14gLy87IHMvW1xcIiJcYFwkXS9cXFxcJi9nJ2AiCithY19jc192ZXJzaW9uPSJcXAorY29uZmlnLnN0YXR1cworY29uZmlndXJlZCBieSAkMCwgZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjY3LAorICB3aXRoIG9wdGlvbnMgXFwiXCRhY19jc19jb25maWdcXCIKKworQ29weXJpZ2h0IChDKSAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorVGhpcyBjb25maWcuc3RhdHVzIHNjcmlwdCBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5LCBkaXN0cmlidXRlIGFuZCBtb2RpZnkgaXQuIgorCithY19wd2Q9JyRhY19wd2QnCitzcmNkaXI9JyRzcmNkaXInCitJTlNUQUxMPSckSU5TVEFMTCcKK01LRElSX1A9JyRNS0RJUl9QJworQVdLPSckQVdLJwordGVzdCAtbiAiXCRBV0siIHx8IEFXSz1hd2sKK19BQ0VPRgorCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCisjIFRoZSBkZWZhdWx0IGxpc3RzIGFwcGx5IGlmIHRoZSB1c2VyIGRvZXMgbm90IHNwZWNpZnkgYW55IGZpbGUuCithY19uZWVkX2RlZmF1bHRzPToKK3doaWxlIHRlc3QgJCMgIT0gMAorZG8KKyAgY2FzZSAkMSBpbgorICAtLSo9PyopCisgICAgYWNfb3B0aW9uPWBleHByICJYJDEiIDogJ1hcKFtePV0qXCk9J2AKKyAgICBhY19vcHRhcmc9YGV4cHIgIlgkMSIgOiAnWFtePV0qPVwoLipcKSdgCisgICAgYWNfc2hpZnQ9OgorICAgIDs7CisgIC0tKj0pCisgICAgYWNfb3B0aW9uPWBleHByICJYJDEiIDogJ1hcKFtePV0qXCk9J2AKKyAgICBhY19vcHRhcmc9CisgICAgYWNfc2hpZnQ9OgorICAgIDs7CisgICopCisgICAgYWNfb3B0aW9uPSQxCisgICAgYWNfb3B0YXJnPSQyCisgICAgYWNfc2hpZnQ9c2hpZnQKKyAgICA7OworICBlc2FjCisKKyAgY2FzZSAkYWNfb3B0aW9uIGluCisgICMgSGFuZGxpbmcgb2YgdGhlIG9wdGlvbnMuCisgIC1yZWNoZWNrIHwgLS1yZWNoZWNrIHwgLS1yZWNoZWMgfCAtLXJlY2hlIHwgLS1yZWNoIHwgLS1yZWMgfCAtLXJlIHwgLS1yKQorICAgIGFjX2NzX3JlY2hlY2s9OiA7OworICAtLXZlcnNpb24gfCAtLXZlcnNpbyB8IC0tdmVyc2kgfCAtLXZlcnMgfCAtLXZlciB8IC0tdmUgfCAtLXYgfCAtViApCisgICAgJGFzX2VjaG8gIiRhY19jc192ZXJzaW9uIjsgZXhpdCA7OworICAtLWNvbmZpZyB8IC0tY29uZmkgfCAtLWNvbmYgfCAtLWNvbiB8IC0tY28gfCAtLWMgKQorICAgICRhc19lY2hvICIkYWNfY3NfY29uZmlnIjsgZXhpdCA7OworICAtLWRlYnVnIHwgLS1kZWJ1IHwgLS1kZWIgfCAtLWRlIHwgLS1kIHwgLWQgKQorICAgIGRlYnVnPTogOzsKKyAgLS1maWxlIHwgLS1maWwgfCAtLWZpIHwgLS1mICkKKyAgICAkYWNfc2hpZnQKKyAgICBjYXNlICRhY19vcHRhcmcgaW4KKyAgICAqXCcqKSBhY19vcHRhcmc9YCRhc19lY2hvICIkYWNfb3B0YXJnIiB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYCA7OworICAgICcnKSBhc19mbl9lcnJvciAkPyAibWlzc2luZyBmaWxlIGFyZ3VtZW50IiA7OworICAgIGVzYWMKKyAgICBhc19mbl9hcHBlbmQgQ09ORklHX0ZJTEVTICIgJyRhY19vcHRhcmcnIgorICAgIGFjX25lZWRfZGVmYXVsdHM9ZmFsc2U7OworICAtLWhlYWRlciB8IC0taGVhZGUgfCAtLWhlYWQgfCAtLWhlYSApCisgICAgJGFjX3NoaWZ0CisgICAgY2FzZSAkYWNfb3B0YXJnIGluCisgICAgKlwnKikgYWNfb3B0YXJnPWAkYXNfZWNobyAiJGFjX29wdGFyZyIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImAgOzsKKyAgICBlc2FjCisgICAgYXNfZm5fYXBwZW5kIENPTkZJR19IRUFERVJTICIgJyRhY19vcHRhcmcnIgorICAgIGFjX25lZWRfZGVmYXVsdHM9ZmFsc2U7OworICAtLWhlIHwgLS1oKQorICAgICMgQ29uZmxpY3QgYmV0d2VlbiAtLWhlbHAgYW5kIC0taGVhZGVyCisgICAgYXNfZm5fZXJyb3IgJD8gImFtYmlndW91cyBvcHRpb246IFxgJDEnCitUcnkgXGAkMCAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiI7OworICAtLWhlbHAgfCAtLWhlbCB8IC1oICkKKyAgICAkYXNfZWNobyAiJGFjX2NzX3VzYWdlIjsgZXhpdCA7OworICAtcSB8IC1xdWlldCB8IC0tcXVpZXQgfCAtLXF1aWUgfCAtLXF1aSB8IC0tcXUgfCAtLXEgXAorICB8IC1zaWxlbnQgfCAtLXNpbGVudCB8IC0tc2lsZW4gfCAtLXNpbGUgfCAtLXNpbCB8IC0tc2kgfCAtLXMpCisgICAgYWNfY3Nfc2lsZW50PTogOzsKKworICAjIFRoaXMgaXMgYW4gZXJyb3IuCisgIC0qKSBhc19mbl9lcnJvciAkPyAidW5yZWNvZ25pemVkIG9wdGlvbjogXGAkMScKK1RyeSBcYCQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiA7OworCisgICopIGFzX2ZuX2FwcGVuZCBhY19jb25maWdfdGFyZ2V0cyAiICQxIgorICAgICBhY19uZWVkX2RlZmF1bHRzPWZhbHNlIDs7CisKKyAgZXNhYworICBzaGlmdAorZG9uZQorCithY19jb25maWd1cmVfZXh0cmFfYXJncz0KKworaWYgJGFjX2NzX3NpbGVudDsgdGhlbgorICBleGVjIDY+L2Rldi9udWxsCisgIGFjX2NvbmZpZ3VyZV9leHRyYV9hcmdzPSIkYWNfY29uZmlndXJlX2V4dHJhX2FyZ3MgLS1zaWxlbnQiCitmaQorCitfQUNFT0YKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQoraWYgXCRhY19jc19yZWNoZWNrOyB0aGVuCisgIHNldCBYICckU0hFTEwnICckMCcgJGFjX2NvbmZpZ3VyZV9hcmdzIFwkYWNfY29uZmlndXJlX2V4dHJhX2FyZ3MgLS1uby1jcmVhdGUgLS1uby1yZWN1cnNpb24KKyAgc2hpZnQKKyAgXCRhc19lY2hvICJydW5uaW5nIENPTkZJR19TSEVMTD0kU0hFTEwgXCQqIiA+JjYKKyAgQ09ORklHX1NIRUxMPSckU0hFTEwnCisgIGV4cG9ydCBDT05GSUdfU0hFTEwKKyAgZXhlYyAiXCRAIgorZmkKKworX0FDRU9GCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCitleGVjIDU+PmNvbmZpZy5sb2cKK3sKKyAgZWNobworICBzZWQgJ2g7cy8uLy0vZztzL14uLi4vIyMgLztzLy4uLiQvICMjLztwO3g7cDt4JyA8PF9BU0JPWAorIyMgUnVubmluZyAkYXNfbWUuICMjCitfQVNCT1gKKyAgJGFzX2VjaG8gIiRhY19sb2ciCit9ID4mNQorCitfQUNFT0YKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorIworIyBJTklULUNPTU1BTkRTCisjCitBTURFUF9UUlVFPSIkQU1ERVBfVFJVRSIgYWNfYXV4X2Rpcj0iJGFjX2F1eF9kaXIiCisKKworIyBUaGUgSFAtVVgga3NoIGFuZCBQT1NJWCBzaGVsbCBwcmludCB0aGUgdGFyZ2V0IGRpcmVjdG9yeSB0byBzdGRvdXQKKyMgaWYgQ0RQQVRIIGlzIHNldC4KKyh1bnNldCBDRFBBVEgpID4vZGV2L251bGwgMj4mMSAmJiB1bnNldCBDRFBBVEgKKworc2VkX3F1b3RlX3N1YnN0PSckc2VkX3F1b3RlX3N1YnN0JworZG91YmxlX3F1b3RlX3N1YnN0PSckZG91YmxlX3F1b3RlX3N1YnN0JworZGVsYXlfdmFyaWFibGVfc3Vic3Q9JyRkZWxheV92YXJpYWJsZV9zdWJzdCcKK21hY3JvX3ZlcnNpb249J2AkRUNITyAiWCRtYWNyb192ZXJzaW9uIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCittYWNyb19yZXZpc2lvbj0nYCRFQ0hPICJYJG1hY3JvX3JldmlzaW9uIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitlbmFibGVfc2hhcmVkPSdgJEVDSE8gIlgkZW5hYmxlX3NoYXJlZCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZW5hYmxlX3N0YXRpYz0nYCRFQ0hPICJYJGVuYWJsZV9zdGF0aWMiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3BpY19tb2RlPSdgJEVDSE8gIlgkcGljX21vZGUiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2VuYWJsZV9mYXN0X2luc3RhbGw9J2AkRUNITyAiWCRlbmFibGVfZmFzdF9pbnN0YWxsIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitob3N0X2FsaWFzPSdgJEVDSE8gIlgkaG9zdF9hbGlhcyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaG9zdD0nYCRFQ0hPICJYJGhvc3QiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2hvc3Rfb3M9J2AkRUNITyAiWCRob3N0X29zIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitidWlsZF9hbGlhcz0nYCRFQ0hPICJYJGJ1aWxkX2FsaWFzIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitidWlsZD0nYCRFQ0hPICJYJGJ1aWxkIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitidWlsZF9vcz0nYCRFQ0hPICJYJGJ1aWxkX29zIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitTRUQ9J2AkRUNITyAiWCRTRUQiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK1hzZWQ9J2AkRUNITyAiWCRYc2VkIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitHUkVQPSdgJEVDSE8gIlgkR1JFUCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworRUdSRVA9J2AkRUNITyAiWCRFR1JFUCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworRkdSRVA9J2AkRUNITyAiWCRGR1JFUCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworTEQ9J2AkRUNITyAiWCRMRCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworTk09J2AkRUNITyAiWCROTSIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworTE5fUz0nYCRFQ0hPICJYJExOX1MiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK21heF9jbWRfbGVuPSdgJEVDSE8gIlgkbWF4X2NtZF9sZW4iIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2FjX29iamV4dD0nYCRFQ0hPICJYJGFjX29iamV4dCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZXhlZXh0PSdgJEVDSE8gIlgkZXhlZXh0IiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsdF91bnNldD0nYCRFQ0hPICJYJGx0X3Vuc2V0IiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsdF9TUDJOTD0nYCRFQ0hPICJYJGx0X1NQMk5MIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsdF9OTDJTUD0nYCRFQ0hPICJYJGx0X05MMlNQIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCityZWxvYWRfZmxhZz0nYCRFQ0hPICJYJHJlbG9hZF9mbGFnIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCityZWxvYWRfY21kcz0nYCRFQ0hPICJYJHJlbG9hZF9jbWRzIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitPQkpEVU1QPSdgJEVDSE8gIlgkT0JKRFVNUCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZGVwbGlic19jaGVja19tZXRob2Q9J2AkRUNITyAiWCRkZXBsaWJzX2NoZWNrX21ldGhvZCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZmlsZV9tYWdpY19jbWQ9J2AkRUNITyAiWCRmaWxlX21hZ2ljX2NtZCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworQVI9J2AkRUNITyAiWCRBUiIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworQVJfRkxBR1M9J2AkRUNITyAiWCRBUl9GTEFHUyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworU1RSSVA9J2AkRUNITyAiWCRTVFJJUCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworUkFOTElCPSdgJEVDSE8gIlgkUkFOTElCIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitvbGRfcG9zdGluc3RhbGxfY21kcz0nYCRFQ0hPICJYJG9sZF9wb3N0aW5zdGFsbF9jbWRzIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitvbGRfcG9zdHVuaW5zdGFsbF9jbWRzPSdgJEVDSE8gIlgkb2xkX3Bvc3R1bmluc3RhbGxfY21kcyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworb2xkX2FyY2hpdmVfY21kcz0nYCRFQ0hPICJYJG9sZF9hcmNoaXZlX2NtZHMiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0NDPSdgJEVDSE8gIlgkQ0MiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0NGTEFHUz0nYCRFQ0hPICJYJENGTEFHUyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworY29tcGlsZXI9J2AkRUNITyAiWCRjb21waWxlciIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworR0NDPSdgJEVDSE8gIlgkR0NDIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSdgJEVDSE8gIlgkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9J2AkRUNITyAiWCRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9J2AkRUNITyAiWCRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeD0nYCRFQ0hPICJYJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXgiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK29iamRpcj0nYCRFQ0hPICJYJG9iamRpciIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworU0hFTEw9J2AkRUNITyAiWCRTSEVMTCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworRUNITz0nYCRFQ0hPICJYJEVDSE8iIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK01BR0lDX0NNRD0nYCRFQ0hPICJYJE1BR0lDX0NNRCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWc9J2AkRUNITyAiWCRsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbHRfcHJvZ19jb21waWxlcl93bD0nYCRFQ0hPICJYJGx0X3Byb2dfY29tcGlsZXJfd2wiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2x0X3Byb2dfY29tcGlsZXJfcGljPSdgJEVDSE8gIlgkbHRfcHJvZ19jb21waWxlcl9waWMiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2x0X3Byb2dfY29tcGlsZXJfc3RhdGljPSdgJEVDSE8gIlgkbHRfcHJvZ19jb21waWxlcl9zdGF0aWMiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2x0X2N2X3Byb2dfY29tcGlsZXJfY19vPSdgJEVDSE8gIlgkbHRfY3ZfcHJvZ19jb21waWxlcl9jX28iIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK25lZWRfbG9ja3M9J2AkRUNITyAiWCRuZWVkX2xvY2tzIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitEU1lNVVRJTD0nYCRFQ0hPICJYJERTWU1VVElMIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitOTUVESVQ9J2AkRUNITyAiWCROTUVESVQiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0xJUE89J2AkRUNITyAiWCRMSVBPIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitPVE9PTD0nYCRFQ0hPICJYJE9UT09MIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitPVE9PTDY0PSdgJEVDSE8gIlgkT1RPT0w2NCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbGliZXh0PSdgJEVDSE8gIlgkbGliZXh0IiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitzaHJleHRfY21kcz0nYCRFQ0hPICJYJHNocmV4dF9jbWRzIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitleHRyYWN0X2V4cHN5bXNfY21kcz0nYCRFQ0hPICJYJGV4dHJhY3RfZXhwc3ltc19jbWRzIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCithcmNoaXZlX2NtZHNfbmVlZF9sYz0nYCRFQ0hPICJYJGFyY2hpdmVfY21kc19uZWVkX2xjIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzPSdgJEVDSE8gIlgkZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPSdgJEVDSE8gIlgkZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCit3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nYCRFQ0hPICJYJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitjb21waWxlcl9uZWVkc19vYmplY3Q9J2AkRUNITyAiWCRjb21waWxlcl9uZWVkc19vYmplY3QiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK29sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHM9J2AkRUNITyAiWCRvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcz0nYCRFQ0hPICJYJG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCithcmNoaXZlX2NtZHM9J2AkRUNITyAiWCRhcmNoaXZlX2NtZHMiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2FyY2hpdmVfZXhwc3ltX2NtZHM9J2AkRUNITyAiWCRhcmNoaXZlX2V4cHN5bV9jbWRzIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCittb2R1bGVfY21kcz0nYCRFQ0hPICJYJG1vZHVsZV9jbWRzIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCittb2R1bGVfZXhwc3ltX2NtZHM9J2AkRUNITyAiWCRtb2R1bGVfZXhwc3ltX2NtZHMiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3dpdGhfZ251X2xkPSdgJEVDSE8gIlgkd2l0aF9nbnVfbGQiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2FsbG93X3VuZGVmaW5lZF9mbGFnPSdgJEVDSE8gIlgkYWxsb3dfdW5kZWZpbmVkX2ZsYWciIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK25vX3VuZGVmaW5lZF9mbGFnPSdgJEVDSE8gIlgkbm9fdW5kZWZpbmVkX2ZsYWciIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9J2AkRUNITyAiWCRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkPSdgJEVDSE8gIlgkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0nYCRFQ0hPICJYJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2hhcmRjb2RlX2RpcmVjdD0nYCRFQ0hPICJYJGhhcmRjb2RlX2RpcmVjdCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlPSdgJEVDSE8gIlgkaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitoYXJkY29kZV9taW51c19MPSdgJEVDSE8gIlgkaGFyZGNvZGVfbWludXNfTCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj0nYCRFQ0hPICJYJGhhcmRjb2RlX3NobGlicGF0aF92YXIiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2hhcmRjb2RlX2F1dG9tYXRpYz0nYCRFQ0hPICJYJGhhcmRjb2RlX2F1dG9tYXRpYyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaW5oZXJpdF9ycGF0aD0nYCRFQ0hPICJYJGluaGVyaXRfcnBhdGgiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2xpbmtfYWxsX2RlcGxpYnM9J2AkRUNITyAiWCRsaW5rX2FsbF9kZXBsaWJzIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitmaXhfc3JjZmlsZV9wYXRoPSdgJEVDSE8gIlgkZml4X3NyY2ZpbGVfcGF0aCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworYWx3YXlzX2V4cG9ydF9zeW1ib2xzPSdgJEVDSE8gIlgkYWx3YXlzX2V4cG9ydF9zeW1ib2xzIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitleHBvcnRfc3ltYm9sc19jbWRzPSdgJEVDSE8gIlgkZXhwb3J0X3N5bWJvbHNfY21kcyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZXhjbHVkZV9leHBzeW1zPSdgJEVDSE8gIlgkZXhjbHVkZV9leHBzeW1zIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitpbmNsdWRlX2V4cHN5bXM9J2AkRUNITyAiWCRpbmNsdWRlX2V4cHN5bXMiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3ByZWxpbmtfY21kcz0nYCRFQ0hPICJYJHByZWxpbmtfY21kcyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZmlsZV9saXN0X3NwZWM9J2AkRUNITyAiWCRmaWxlX2xpc3Rfc3BlYyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwordmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9J2AkRUNITyAiWCR2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluayIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbmVlZF9saWJfcHJlZml4PSdgJEVDSE8gIlgkbmVlZF9saWJfcHJlZml4IiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCituZWVkX3ZlcnNpb249J2AkRUNITyAiWCRuZWVkX3ZlcnNpb24iIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3ZlcnNpb25fdHlwZT0nYCRFQ0hPICJYJHZlcnNpb25fdHlwZSIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworcnVucGF0aF92YXI9J2AkRUNITyAiWCRydW5wYXRoX3ZhciIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworc2hsaWJwYXRoX3Zhcj0nYCRFQ0hPICJYJHNobGlicGF0aF92YXIiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3NobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD0nYCRFQ0hPICJYJHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbGlibmFtZV9zcGVjPSdgJEVDSE8gIlgkbGlibmFtZV9zcGVjIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsaWJyYXJ5X25hbWVzX3NwZWM9J2AkRUNITyAiWCRsaWJyYXJ5X25hbWVzX3NwZWMiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3NvbmFtZV9zcGVjPSdgJEVDSE8gIlgkc29uYW1lX3NwZWMiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3Bvc3RpbnN0YWxsX2NtZHM9J2AkRUNITyAiWCRwb3N0aW5zdGFsbF9jbWRzIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitwb3N0dW5pbnN0YWxsX2NtZHM9J2AkRUNITyAiWCRwb3N0dW5pbnN0YWxsX2NtZHMiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2ZpbmlzaF9jbWRzPSdgJEVDSE8gIlgkZmluaXNoX2NtZHMiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2ZpbmlzaF9ldmFsPSdgJEVDSE8gIlgkZmluaXNoX2V2YWwiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2hhcmRjb2RlX2ludG9fbGlicz0nYCRFQ0hPICJYJGhhcmRjb2RlX2ludG9fbGlicyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSdgJEVDSE8gIlgkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nYCRFQ0hPICJYJHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitoYXJkY29kZV9hY3Rpb249J2AkRUNITyAiWCRoYXJkY29kZV9hY3Rpb24iIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2VuYWJsZV9kbG9wZW49J2AkRUNITyAiWCRlbmFibGVfZGxvcGVuIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitlbmFibGVfZGxvcGVuX3NlbGY9J2AkRUNITyAiWCRlbmFibGVfZGxvcGVuX3NlbGYiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2VuYWJsZV9kbG9wZW5fc2VsZl9zdGF0aWM9J2AkRUNITyAiWCRlbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitvbGRfc3RyaXBsaWI9J2AkRUNITyAiWCRvbGRfc3RyaXBsaWIiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3N0cmlwbGliPSdgJEVDSE8gIlgkc3RyaXBsaWIiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2NvbXBpbGVyX2xpYl9zZWFyY2hfZGlycz0nYCRFQ0hPICJYJGNvbXBpbGVyX2xpYl9zZWFyY2hfZGlycyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworcHJlZGVwX29iamVjdHM9J2AkRUNITyAiWCRwcmVkZXBfb2JqZWN0cyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworcG9zdGRlcF9vYmplY3RzPSdgJEVDSE8gIlgkcG9zdGRlcF9vYmplY3RzIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitwcmVkZXBzPSdgJEVDSE8gIlgkcHJlZGVwcyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworcG9zdGRlcHM9J2AkRUNITyAiWCRwb3N0ZGVwcyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoPSdgJEVDSE8gIlgkY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitMRF9DWFg9J2AkRUNITyAiWCRMRF9DWFgiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK29sZF9hcmNoaXZlX2NtZHNfQ1hYPSdgJEVDSE8gIlgkb2xkX2FyY2hpdmVfY21kc19DWFgiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2NvbXBpbGVyX0NYWD0nYCRFQ0hPICJYJGNvbXBpbGVyX0NYWCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworR0NDX0NYWD0nYCRFQ0hPICJYJEdDQ19DWFgiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2x0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnX0NYWD0nYCRFQ0hPICJYJGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnX0NYWCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbHRfcHJvZ19jb21waWxlcl93bF9DWFg9J2AkRUNITyAiWCRsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSdgJEVDSE8gIlgkbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9J2AkRUNITyAiWCRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFgiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2x0X2N2X3Byb2dfY29tcGlsZXJfY19vX0NYWD0nYCRFQ0hPICJYJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0NYWCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYPSdgJEVDSE8gIlgkYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzX0NYWD0nYCRFQ0hPICJYJGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXNfQ1hYIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfQ1hYPSdgJEVDSE8gIlgkZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJword2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfQ1hYPSdgJEVDSE8gIlgkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfQ1hYIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitjb21waWxlcl9uZWVkc19vYmplY3RfQ1hYPSdgJEVDSE8gIlgkY29tcGlsZXJfbmVlZHNfb2JqZWN0X0NYWCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kc19DWFg9J2AkRUNITyAiWCRvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzX0NYWCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHNfQ1hYPSdgJEVDSE8gIlgkb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHNfQ1hYIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCithcmNoaXZlX2NtZHNfQ1hYPSdgJEVDSE8gIlgkYXJjaGl2ZV9jbWRzX0NYWCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9J2AkRUNITyAiWCRhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbW9kdWxlX2NtZHNfQ1hYPSdgJEVDSE8gIlgkbW9kdWxlX2NtZHNfQ1hYIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCittb2R1bGVfZXhwc3ltX2NtZHNfQ1hYPSdgJEVDSE8gIlgkbW9kdWxlX2V4cHN5bV9jbWRzX0NYWCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJword2l0aF9nbnVfbGRfQ1hYPSdgJEVDSE8gIlgkd2l0aF9nbnVfbGRfQ1hYIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCithbGxvd191bmRlZmluZWRfZmxhZ19DWFg9J2AkRUNITyAiWCRhbGxvd191bmRlZmluZWRfZmxhZ19DWFgiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK25vX3VuZGVmaW5lZF9mbGFnX0NYWD0nYCRFQ0hPICJYJG5vX3VuZGVmaW5lZF9mbGFnX0NYWCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9J2AkRUNITyAiWCRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZF9DWFg9J2AkRUNITyAiWCRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkX0NYWCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9DWFg9J2AkRUNITyAiWCRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0NYWCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaGFyZGNvZGVfZGlyZWN0X0NYWD0nYCRFQ0hPICJYJGhhcmRjb2RlX2RpcmVjdF9DWFgiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2hhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZV9DWFg9J2AkRUNITyAiWCRoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGVfQ1hYIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitoYXJkY29kZV9taW51c19MX0NYWD0nYCRFQ0hPICJYJGhhcmRjb2RlX21pbnVzX0xfQ1hYIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0NYWD0nYCRFQ0hPICJYJGhhcmRjb2RlX3NobGlicGF0aF92YXJfQ1hYIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitoYXJkY29kZV9hdXRvbWF0aWNfQ1hYPSdgJEVDSE8gIlgkaGFyZGNvZGVfYXV0b21hdGljX0NYWCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaW5oZXJpdF9ycGF0aF9DWFg9J2AkRUNITyAiWCRpbmhlcml0X3JwYXRoX0NYWCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbGlua19hbGxfZGVwbGlic19DWFg9J2AkRUNITyAiWCRsaW5rX2FsbF9kZXBsaWJzX0NYWCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZml4X3NyY2ZpbGVfcGF0aF9DWFg9J2AkRUNITyAiWCRmaXhfc3JjZmlsZV9wYXRoX0NYWCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworYWx3YXlzX2V4cG9ydF9zeW1ib2xzX0NYWD0nYCRFQ0hPICJYJGFsd2F5c19leHBvcnRfc3ltYm9sc19DWFgiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2V4cG9ydF9zeW1ib2xzX2NtZHNfQ1hYPSdgJEVDSE8gIlgkZXhwb3J0X3N5bWJvbHNfY21kc19DWFgiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2V4Y2x1ZGVfZXhwc3ltc19DWFg9J2AkRUNITyAiWCRleGNsdWRlX2V4cHN5bXNfQ1hYIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitpbmNsdWRlX2V4cHN5bXNfQ1hYPSdgJEVDSE8gIlgkaW5jbHVkZV9leHBzeW1zX0NYWCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworcHJlbGlua19jbWRzX0NYWD0nYCRFQ0hPICJYJHByZWxpbmtfY21kc19DWFgiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2ZpbGVfbGlzdF9zcGVjX0NYWD0nYCRFQ0hPICJYJGZpbGVfbGlzdF9zcGVjX0NYWCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaGFyZGNvZGVfYWN0aW9uX0NYWD0nYCRFQ0hPICJYJGhhcmRjb2RlX2FjdGlvbl9DWFgiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2NvbXBpbGVyX2xpYl9zZWFyY2hfZGlyc19DWFg9J2AkRUNITyAiWCRjb21waWxlcl9saWJfc2VhcmNoX2RpcnNfQ1hYIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitwcmVkZXBfb2JqZWN0c19DWFg9J2AkRUNITyAiWCRwcmVkZXBfb2JqZWN0c19DWFgiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3Bvc3RkZXBfb2JqZWN0c19DWFg9J2AkRUNITyAiWCRwb3N0ZGVwX29iamVjdHNfQ1hYIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitwcmVkZXBzX0NYWD0nYCRFQ0hPICJYJHByZWRlcHNfQ1hYIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitwb3N0ZGVwc19DWFg9J2AkRUNITyAiWCRwb3N0ZGVwc19DWFgiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2NvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aF9DWFg9J2AkRUNITyAiWCRjb21waWxlcl9saWJfc2VhcmNoX3BhdGhfQ1hYIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisKK0xUQ0M9JyRMVENDJworTFRDRkxBR1M9JyRMVENGTEFHUycKK2NvbXBpbGVyPSckY29tcGlsZXJfREVGQVVMVCcKKworIyBRdW90ZSBldmFsZWQgc3RyaW5ncy4KK2ZvciB2YXIgaW4gU0VEIFwKK0dSRVAgXAorRUdSRVAgXAorRkdSRVAgXAorTEQgXAorTk0gXAorTE5fUyBcCitsdF9TUDJOTCBcCitsdF9OTDJTUCBcCityZWxvYWRfZmxhZyBcCitPQkpEVU1QIFwKK2RlcGxpYnNfY2hlY2tfbWV0aG9kIFwKK2ZpbGVfbWFnaWNfY21kIFwKK0FSIFwKK0FSX0ZMQUdTIFwKK1NUUklQIFwKK1JBTkxJQiBcCitDQyBcCitDRkxBR1MgXAorY29tcGlsZXIgXAorbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSBcCitsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCBcCitsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcyBcCitsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4IFwKK1NIRUxMIFwKK0VDSE8gXAorbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcgXAorbHRfcHJvZ19jb21waWxlcl93bCBcCitsdF9wcm9nX2NvbXBpbGVyX3BpYyBcCitsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYyBcCitsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbyBcCituZWVkX2xvY2tzIFwKK0RTWU1VVElMIFwKK05NRURJVCBcCitMSVBPIFwKK09UT09MIFwKK09UT09MNjQgXAorc2hyZXh0X2NtZHMgXAorZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjIFwKK3dob2xlX2FyY2hpdmVfZmxhZ19zcGVjIFwKK2NvbXBpbGVyX25lZWRzX29iamVjdCBcCit3aXRoX2dudV9sZCBcCithbGxvd191bmRlZmluZWRfZmxhZyBcCitub191bmRlZmluZWRfZmxhZyBcCitoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIFwKK2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQgXAoraGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciBcCitmaXhfc3JjZmlsZV9wYXRoIFwKK2V4Y2x1ZGVfZXhwc3ltcyBcCitpbmNsdWRlX2V4cHN5bXMgXAorZmlsZV9saXN0X3NwZWMgXAordmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbmsgXAorbGlibmFtZV9zcGVjIFwKK2xpYnJhcnlfbmFtZXNfc3BlYyBcCitzb25hbWVfc3BlYyBcCitmaW5pc2hfZXZhbCBcCitvbGRfc3RyaXBsaWIgXAorc3RyaXBsaWIgXAorY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzIFwKK3ByZWRlcF9vYmplY3RzIFwKK3Bvc3RkZXBfb2JqZWN0cyBcCitwcmVkZXBzIFwKK3Bvc3RkZXBzIFwKK2NvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCBcCitMRF9DWFggXAorY29tcGlsZXJfQ1hYIFwKK2x0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnX0NYWCBcCitsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWCBcCitsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFggXAorbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYIFwKK2x0X2N2X3Byb2dfY29tcGlsZXJfY19vX0NYWCBcCitleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfQ1hYIFwKK3dob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWCBcCitjb21waWxlcl9uZWVkc19vYmplY3RfQ1hYIFwKK3dpdGhfZ251X2xkX0NYWCBcCithbGxvd191bmRlZmluZWRfZmxhZ19DWFggXAorbm9fdW5kZWZpbmVkX2ZsYWdfQ1hYIFwKK2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYIFwKK2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGRfQ1hYIFwKK2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYIFwKK2ZpeF9zcmNmaWxlX3BhdGhfQ1hYIFwKK2V4Y2x1ZGVfZXhwc3ltc19DWFggXAoraW5jbHVkZV9leHBzeW1zX0NYWCBcCitmaWxlX2xpc3Rfc3BlY19DWFggXAorY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzX0NYWCBcCitwcmVkZXBfb2JqZWN0c19DWFggXAorcG9zdGRlcF9vYmplY3RzX0NYWCBcCitwcmVkZXBzX0NYWCBcCitwb3N0ZGVwc19DWFggXAorY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoX0NYWDsgZG8KKyAgICBjYXNlIFxgZXZhbCBcXFxcXCRFQ0hPICJYXFxcXFwkXCR2YXIiXGAgaW4KKyAgICAqW1xcXFxcXFxgXFwiXFxcJF0qKQorICAgICAgZXZhbCAibHRfXCR2YXI9XFxcXFxcIlxcXGBcXFwkRUNITyBcXCJYXFxcJFwkdmFyXFwiIHwgXFxcJFhzZWQgLWUgXFwiXFxcJHNlZF9xdW90ZV9zdWJzdFxcIlxcXGBcXFxcXFwiIgorICAgICAgOzsKKyAgICAqKQorICAgICAgZXZhbCAibHRfXCR2YXI9XFxcXFxcIlxcXCRcJHZhclxcXFxcXCIiCisgICAgICA7OworICAgIGVzYWMKK2RvbmUKKworIyBEb3VibGUtcXVvdGUgZG91YmxlLWV2YWxlZCBzdHJpbmdzLgorZm9yIHZhciBpbiByZWxvYWRfY21kcyBcCitvbGRfcG9zdGluc3RhbGxfY21kcyBcCitvbGRfcG9zdHVuaW5zdGFsbF9jbWRzIFwKK29sZF9hcmNoaXZlX2NtZHMgXAorZXh0cmFjdF9leHBzeW1zX2NtZHMgXAorb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcyBcCitvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcyBcCithcmNoaXZlX2NtZHMgXAorYXJjaGl2ZV9leHBzeW1fY21kcyBcCittb2R1bGVfY21kcyBcCittb2R1bGVfZXhwc3ltX2NtZHMgXAorZXhwb3J0X3N5bWJvbHNfY21kcyBcCitwcmVsaW5rX2NtZHMgXAorcG9zdGluc3RhbGxfY21kcyBcCitwb3N0dW5pbnN0YWxsX2NtZHMgXAorZmluaXNoX2NtZHMgXAorc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIFwKK3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjIFwKK29sZF9hcmNoaXZlX2NtZHNfQ1hYIFwKK29sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHNfQ1hYIFwKK29sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzX0NYWCBcCithcmNoaXZlX2NtZHNfQ1hYIFwKK2FyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYIFwKK21vZHVsZV9jbWRzX0NYWCBcCittb2R1bGVfZXhwc3ltX2NtZHNfQ1hYIFwKK2V4cG9ydF9zeW1ib2xzX2NtZHNfQ1hYIFwKK3ByZWxpbmtfY21kc19DWFg7IGRvCisgICAgY2FzZSBcYGV2YWwgXFxcXFwkRUNITyAiWFxcXFxcJFwkdmFyIlxgIGluCisgICAgKltcXFxcXFxcYFxcIlxcXCRdKikKKyAgICAgIGV2YWwgImx0X1wkdmFyPVxcXFxcXCJcXFxgXFxcJEVDSE8gXFwiWFxcXCRcJHZhclxcIiB8IFxcXCRYc2VkIC1lIFxcIlxcXCRkb3VibGVfcXVvdGVfc3Vic3RcXCIgLWUgXFwiXFxcJHNlZF9xdW90ZV9zdWJzdFxcIiAtZSBcXCJcXFwkZGVsYXlfdmFyaWFibGVfc3Vic3RcXCJcXFxgXFxcXFxcIiIKKyAgICAgIDs7CisgICAgKikKKyAgICAgIGV2YWwgImx0X1wkdmFyPVxcXFxcXCJcXFwkXCR2YXJcXFxcXFwiIgorICAgICAgOzsKKyAgICBlc2FjCitkb25lCisKKyMgRml4LXVwIGZhbGxiYWNrIGVjaG8gaWYgaXQgd2FzIG1hbmdsZWQgYnkgdGhlIGFib3ZlIHF1b3RpbmcgcnVsZXMuCitjYXNlIFwkbHRfRUNITyBpbgorKidcXFwkMCAtLWZhbGxiYWNrLWVjaG8iJykgIGx0X0VDSE89XGBcJEVDSE8gIlhcJGx0X0VDSE8iIHwgXCRYc2VkIC1lICdzL1xcXFxcXFxcXFxcXFxcXCQwIC0tZmFsbGJhY2stZWNobyJcJC9cJDAgLS1mYWxsYmFjay1lY2hvIi8nXGAKKyAgOzsKK2VzYWMKKworYWNfYXV4X2Rpcj0nJGFjX2F1eF9kaXInCit4c2lfc2hlbGw9JyR4c2lfc2hlbGwnCitsdF9zaGVsbF9hcHBlbmQ9JyRsdF9zaGVsbF9hcHBlbmQnCisKKyMgU2VlIGlmIHdlIGFyZSBydW5uaW5nIG9uIHpzaCwgYW5kIHNldCB0aGUgb3B0aW9ucyB3aGljaCBhbGxvdyBvdXIKKyMgY29tbWFuZHMgdGhyb3VnaCB3aXRob3V0IHJlbW92YWwgb2YgXCBlc2NhcGVzIElOSVQuCitpZiB0ZXN0IC1uICJcJHtaU0hfVkVSU0lPTitzZXR9IiA7IHRoZW4KKyAgIHNldG9wdCBOT19HTE9CX1NVQlNUCitmaQorCisKKyAgICBQQUNLQUdFPSckUEFDS0FHRScKKyAgICBWRVJTSU9OPSckVkVSU0lPTicKKyAgICBUSU1FU1RBTVA9JyRUSU1FU1RBTVAnCisgICAgUk09JyRSTScKKyAgICBvZmlsZT0nJG9maWxlJworCisKKworCisKKworX0FDRU9GCisKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKKworIyBIYW5kbGluZyBvZiBhcmd1bWVudHMuCitmb3IgYWNfY29uZmlnX3RhcmdldCBpbiAkYWNfY29uZmlnX3RhcmdldHMKK2RvCisgIGNhc2UgJGFjX2NvbmZpZ190YXJnZXQgaW4KKyAgICAiY29uZmlnLmgiKSBDT05GSUdfSEVBREVSUz0iJENPTkZJR19IRUFERVJTIGNvbmZpZy5oIiA7OworICAgICJkZXBmaWxlcyIpIENPTkZJR19DT01NQU5EUz0iJENPTkZJR19DT01NQU5EUyBkZXBmaWxlcyIgOzsKKyAgICAibGlidG9vbCIpIENPTkZJR19DT01NQU5EUz0iJENPTkZJR19DT01NQU5EUyBsaWJ0b29sIiA7OworICAgICJNYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBNYWtlZmlsZSIgOzsKKyAgICAibTQvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgbTQvTWFrZWZpbGUiIDs7CisgICAgImxpYnV0aWwvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgbGlidXRpbC9NYWtlZmlsZSIgOzsKKyAgICAibGlidXRpbC90ZXN0cy9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBsaWJ1dGlsL3Rlc3RzL01ha2VmaWxlIiA7OworICAgICJsaWJ1dGlsKysvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgbGlidXRpbCsrL01ha2VmaWxlIiA7OworICAgICJsaWJ1dGlsKysvdGVzdHMvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgbGlidXRpbCsrL3Rlc3RzL01ha2VmaWxlIiA7OworICAgICJsaWJvcC9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBsaWJvcC9NYWtlZmlsZSIgOzsKKyAgICAibGlib3AvdGVzdHMvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgbGlib3AvdGVzdHMvTWFrZWZpbGUiIDs7CisgICAgImxpYm9wYWdlbnQvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgbGlib3BhZ2VudC9NYWtlZmlsZSIgOzsKKyAgICAibGlib3B0KysvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgbGlib3B0KysvTWFrZWZpbGUiIDs7CisgICAgImxpYmRiL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGxpYmRiL01ha2VmaWxlIiA7OworICAgICJsaWJkYi90ZXN0cy9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBsaWJkYi90ZXN0cy9NYWtlZmlsZSIgOzsKKyAgICAibGliYWJpL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGxpYmFiaS9NYWtlZmlsZSIgOzsKKyAgICAibGliYWJpL3Rlc3RzL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGxpYmFiaS90ZXN0cy9NYWtlZmlsZSIgOzsKKyAgICAibGlicmVnZXgvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgbGlicmVnZXgvTWFrZWZpbGUiIDs7CisgICAgImxpYnJlZ2V4L3Rlc3RzL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGxpYnJlZ2V4L3Rlc3RzL01ha2VmaWxlIiA7OworICAgICJsaWJyZWdleC9zdGwucGF0IikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGxpYnJlZ2V4L3N0bC5wYXQiIDs7CisgICAgImxpYnJlZ2V4L3Rlc3RzL21hbmdsZWQtbmFtZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBsaWJyZWdleC90ZXN0cy9tYW5nbGVkLW5hbWUiIDs7CisgICAgImRhZW1vbi9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBkYWVtb24vTWFrZWZpbGUiIDs7CisgICAgImRhZW1vbi9saWJsZWdhY3kvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgZGFlbW9uL2xpYmxlZ2FjeS9NYWtlZmlsZSIgOzsKKyAgICAiZXZlbnRzL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGV2ZW50cy9NYWtlZmlsZSIgOzsKKyAgICAidXRpbHMvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgdXRpbHMvTWFrZWZpbGUiIDs7CisgICAgImRvYy9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBkb2MvTWFrZWZpbGUiIDs7CisgICAgImRvYy94c2wvY2F0YWxvZy0xLnhtbCIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBkb2MveHNsL2NhdGFsb2ctMS54bWwiIDs7CisgICAgImRvYy9vcHJvZmlsZS4xIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGRvYy9vcHJvZmlsZS4xIiA7OworICAgICJkb2Mvb3Bjb250cm9sLjEiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgZG9jL29wY29udHJvbC4xIiA7OworICAgICJkb2Mvb3BoZWxwLjEiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgZG9jL29waGVscC4xIiA7OworICAgICJkb2Mvb3ByZXBvcnQuMSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBkb2Mvb3ByZXBvcnQuMSIgOzsKKyAgICAiZG9jL29wYW5ub3RhdGUuMSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBkb2Mvb3Bhbm5vdGF0ZS4xIiA7OworICAgICJkb2Mvb3BncHJvZi4xIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGRvYy9vcGdwcm9mLjEiIDs7CisgICAgImRvYy9vcGFyY2hpdmUuMSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBkb2Mvb3BhcmNoaXZlLjEiIDs7CisgICAgImRvYy9vcGltcG9ydC4xIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGRvYy9vcGltcG9ydC4xIiA7OworICAgICJkb2Mvc3JjZG9jL0RveHlmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGRvYy9zcmNkb2MvRG94eWZpbGUiIDs7CisgICAgImxpYnBwL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGxpYnBwL01ha2VmaWxlIiA7OworICAgICJvcGppdGNvbnYvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgb3BqaXRjb252L01ha2VmaWxlIiA7OworICAgICJwcC9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBwcC9NYWtlZmlsZSIgOzsKKyAgICAiZ3VpL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGd1aS9NYWtlZmlsZSIgOzsKKyAgICAiZ3VpL3VpL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGd1aS91aS9NYWtlZmlsZSIgOzsKKyAgICAibW9kdWxlL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIG1vZHVsZS9NYWtlZmlsZSIgOzsKKyAgICAibW9kdWxlL3g4Ni9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBtb2R1bGUveDg2L01ha2VmaWxlIiA7OworICAgICJtb2R1bGUvaWE2NC9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBtb2R1bGUvaWE2NC9NYWtlZmlsZSIgOzsKKyAgICAiYWdlbnRzL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGFnZW50cy9NYWtlZmlsZSIgOzsKKyAgICAiYWdlbnRzL2p2bXRpL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGFnZW50cy9qdm10aS9NYWtlZmlsZSIgOzsKKyAgICAiYWdlbnRzL2p2bXBpL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGFnZW50cy9qdm1waS9NYWtlZmlsZSIgOzsKKworICAqKSBhc19mbl9lcnJvciAkPyAiaW52YWxpZCBhcmd1bWVudDogXGAkYWNfY29uZmlnX3RhcmdldCciICIkTElORU5PIiA1IDs7CisgIGVzYWMKK2RvbmUKKworCisjIElmIHRoZSB1c2VyIGRpZCBub3QgdXNlIHRoZSBhcmd1bWVudHMgdG8gc3BlY2lmeSB0aGUgaXRlbXMgdG8gaW5zdGFudGlhdGUsCisjIHRoZW4gdGhlIGVudnZhciBpbnRlcmZhY2UgaXMgdXNlZC4gIFNldCBvbmx5IHRob3NlIHRoYXQgYXJlIG5vdC4KKyMgV2UgdXNlIHRoZSBsb25nIGZvcm0gZm9yIHRoZSBkZWZhdWx0IGFzc2lnbm1lbnQgYmVjYXVzZSBvZiBhbiBleHRyZW1lbHkKKyMgYml6YXJyZSBidWcgb24gU3VuT1MgNC4xLjMuCitpZiAkYWNfbmVlZF9kZWZhdWx0czsgdGhlbgorICB0ZXN0ICIke0NPTkZJR19GSUxFUytzZXR9IiA9IHNldCB8fCBDT05GSUdfRklMRVM9JGNvbmZpZ19maWxlcworICB0ZXN0ICIke0NPTkZJR19IRUFERVJTK3NldH0iID0gc2V0IHx8IENPTkZJR19IRUFERVJTPSRjb25maWdfaGVhZGVycworICB0ZXN0ICIke0NPTkZJR19DT01NQU5EUytzZXR9IiA9IHNldCB8fCBDT05GSUdfQ09NTUFORFM9JGNvbmZpZ19jb21tYW5kcworZmkKKworIyBIYXZlIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSBmb3IgY29udmVuaWVuY2UuICBNYWtlIGl0IGluIHRoZSBidWlsZCB0cmVlCisjIHNpbXBseSBiZWNhdXNlIHRoZXJlIGlzIG5vIHJlYXNvbiBhZ2FpbnN0IGhhdmluZyBpdCBoZXJlLCBhbmQgaW4gYWRkaXRpb24sCisjIGNyZWF0aW5nIGFuZCBtb3ZpbmcgZmlsZXMgZnJvbSAvdG1wIGNhbiBzb21ldGltZXMgY2F1c2UgcHJvYmxlbXMuCisjIEhvb2sgZm9yIGl0cyByZW1vdmFsIHVubGVzcyBkZWJ1Z2dpbmcuCisjIE5vdGUgdGhhdCB0aGVyZSBpcyBhIHNtYWxsIHdpbmRvdyBpbiB3aGljaCB0aGUgZGlyZWN0b3J5IHdpbGwgbm90IGJlIGNsZWFuZWQ6CisjIGFmdGVyIGl0cyBjcmVhdGlvbiBidXQgYmVmb3JlIGl0cyBuYW1lIGhhcyBiZWVuIGFzc2lnbmVkIHRvIGAkdG1wJy4KKyRkZWJ1ZyB8fAoreworICB0bXA9CisgIHRyYXAgJ2V4aXRfc3RhdHVzPSQ/CisgIHsgdGVzdCAteiAiJHRtcCIgfHwgdGVzdCAhIC1kICIkdG1wIiB8fCBybSAtZnIgIiR0bXAiOyB9ICYmIGV4aXQgJGV4aXRfc3RhdHVzCisnIDAKKyAgdHJhcCAnYXNfZm5fZXhpdCAxJyAxIDIgMTMgMTUKK30KKyMgQ3JlYXRlIGEgKHNlY3VyZSkgdG1wIGRpcmVjdG9yeSBmb3IgdG1wIGZpbGVzLgorCit7CisgIHRtcD1gKHVtYXNrIDA3NyAmJiBta3RlbXAgLWQgIi4vY29uZlhYWFhYWCIpIDI+L2Rldi9udWxsYCAmJgorICB0ZXN0IC1uICIkdG1wIiAmJiB0ZXN0IC1kICIkdG1wIgorfSAgfHwKK3sKKyAgdG1wPS4vY29uZiQkLSRSQU5ET00KKyAgKHVtYXNrIDA3NyAmJiBta2RpciAiJHRtcCIpCit9IHx8IGFzX2ZuX2Vycm9yICQ/ICJjYW5ub3QgY3JlYXRlIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSBpbiAuIiAiJExJTkVOTyIgNQorCisjIFNldCB1cCB0aGUgc2NyaXB0cyBmb3IgQ09ORklHX0ZJTEVTIHNlY3Rpb24uCisjIE5vIG5lZWQgdG8gZ2VuZXJhdGUgdGhlbSBpZiB0aGVyZSBhcmUgbm8gQ09ORklHX0ZJTEVTLgorIyBUaGlzIGhhcHBlbnMgZm9yIGluc3RhbmNlIHdpdGggYC4vY29uZmlnLnN0YXR1cyBjb25maWcuaCcuCitpZiB0ZXN0IC1uICIkQ09ORklHX0ZJTEVTIjsgdGhlbgorCisKK2FjX2NyPWBlY2hvIFggfCB0ciBYICdcMDE1J2AKKyMgT24gY3lnd2luLCBiYXNoIGNhbiBlYXQgXHIgaW5zaWRlIGBgIGlmIHRoZSB1c2VyIHJlcXVlc3RlZCBpZ25jci4KKyMgQnV0IHdlIGtub3cgb2Ygbm8gb3RoZXIgc2hlbGwgd2hlcmUgYWNfY3Igd291bGQgYmUgZW1wdHkgYXQgdGhpcworIyBwb2ludCwgc28gd2UgY2FuIHVzZSBhIGJhc2hpc20gYXMgYSBmYWxsYmFjay4KK2lmIHRlc3QgIngkYWNfY3IiID0geDsgdGhlbgorICBldmFsIGFjX2NyPVwkXCdcXHJcJworZmkKK2FjX2NzX2F3a19jcj1gJEFXSyAnQkVHSU4geyBwcmludCAiYVxyYiIgfScgPC9kZXYvbnVsbCAyPi9kZXYvbnVsbGAKK2lmIHRlc3QgIiRhY19jc19hd2tfY3IiID0gImEke2FjX2NyfWIiOyB0aGVuCisgIGFjX2NzX2F3a19jcj0nXFxyJworZWxzZQorICBhY19jc19hd2tfY3I9JGFjX2NyCitmaQorCitlY2hvICdCRUdJTiB7JyA+IiR0bXAvc3ViczEuYXdrIiAmJgorX0FDRU9GCisKKworeworICBlY2hvICJjYXQgPmNvbmYkJHN1YnMuYXdrIDw8X0FDRU9GIiAmJgorICBlY2hvICIkYWNfc3Vic3RfdmFycyIgfCBzZWQgJ3MvLiovJiEkJiRhY19kZWxpbS8nICYmCisgIGVjaG8gIl9BQ0VPRiIKK30gPmNvbmYkJHN1YnMuc2ggfHwKKyAgYXNfZm5fZXJyb3IgJD8gImNvdWxkIG5vdCBtYWtlICRDT05GSUdfU1RBVFVTIiAiJExJTkVOTyIgNQorYWNfZGVsaW1fbnVtPWBlY2hvICIkYWNfc3Vic3RfdmFycyIgfCBncmVwIC1jICdeJ2AKK2FjX2RlbGltPSclIV8hIyAnCitmb3IgYWNfbGFzdF90cnkgaW4gZmFsc2UgZmFsc2UgZmFsc2UgZmFsc2UgZmFsc2UgOjsgZG8KKyAgLiAuL2NvbmYkJHN1YnMuc2ggfHwKKyAgICBhc19mbl9lcnJvciAkPyAiY291bGQgbm90IG1ha2UgJENPTkZJR19TVEFUVVMiICIkTElORU5PIiA1CisKKyAgYWNfZGVsaW1fbj1gc2VkIC1uICJzLy4qJGFjX2RlbGltXCQvWC9wIiBjb25mJCRzdWJzLmF3ayB8IGdyZXAgLWMgWGAKKyAgaWYgdGVzdCAkYWNfZGVsaW1fbiA9ICRhY19kZWxpbV9udW07IHRoZW4KKyAgICBicmVhaworICBlbGlmICRhY19sYXN0X3RyeTsgdGhlbgorICAgIGFzX2ZuX2Vycm9yICQ/ICJjb3VsZCBub3QgbWFrZSAkQ09ORklHX1NUQVRVUyIgIiRMSU5FTk8iIDUKKyAgZWxzZQorICAgIGFjX2RlbGltPSIkYWNfZGVsaW0hJGFjX2RlbGltIF8kYWNfZGVsaW0hISAiCisgIGZpCitkb25lCitybSAtZiBjb25mJCRzdWJzLnNoCisKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorY2F0ID4+IlwkdG1wL3N1YnMxLmF3ayIgPDxcXF9BQ0FXSyAmJgorX0FDRU9GCitzZWQgLW4gJworaAorcy9eL1NbIi87IHMvIS4qLyJdPS8KK3AKK2cKK3MvXlteIV0qIS8vCis6cmVwbAordCByZXBsCitzLyciJGFjX2RlbGltIickLy8KK3QgZGVsaW0KKzpubAoraAorcy9cKC5cezE0OFx9XCkuLiovXDEvCit0IG1vcmUxCitzL1siXFxdL1xcJi9nOyBzL14vIi87IHMvJC9cXG4iXFwvCitwCituCitiIHJlcGwKKzptb3JlMQorcy9bIlxcXS9cXCYvZzsgcy9eLyIvOyBzLyQvIlxcLworcAorZworcy8uXHsxNDhcfS8vCit0IG5sCis6ZGVsaW0KK2gKK3MvXCguXHsxNDhcfVwpLi4qL1wxLwordCBtb3JlMgorcy9bIlxcXS9cXCYvZzsgcy9eLyIvOyBzLyQvIi8KK3AKK2IKKzptb3JlMgorcy9bIlxcXS9cXCYvZzsgcy9eLyIvOyBzLyQvIlxcLworcAorZworcy8uXHsxNDhcfS8vCit0IGRlbGltCisnIDxjb25mJCRzdWJzLmF3ayB8IHNlZCAnCisvXlteIiJdL3sKKyAgTgorICBzL1xuLy8KK30KKycgPj4kQ09ORklHX1NUQVRVUyB8fCBhY193cml0ZV9mYWlsPTEKK3JtIC1mIGNvbmYkJHN1YnMuYXdrCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKK19BQ0FXSworY2F0ID4+IlwkdG1wL3N1YnMxLmF3ayIgPDxfQUNBV0sgJiYKKyAgZm9yIChrZXkgaW4gUykgU19pc19zZXRba2V5XSA9IDEKKyAgRlMgPSAiByIKKworfQoreworICBsaW5lID0gJCAwCisgIG5maWVsZHMgPSBzcGxpdChsaW5lLCBmaWVsZCwgIkAiKQorICBzdWJzdGVkID0gMAorICBsZW4gPSBsZW5ndGgoZmllbGRbMV0pCisgIGZvciAoaSA9IDI7IGkgPCBuZmllbGRzOyBpKyspIHsKKyAgICBrZXkgPSBmaWVsZFtpXQorICAgIGtleWxlbiA9IGxlbmd0aChrZXkpCisgICAgaWYgKFNfaXNfc2V0W2tleV0pIHsKKyAgICAgIHZhbHVlID0gU1trZXldCisgICAgICBsaW5lID0gc3Vic3RyKGxpbmUsIDEsIGxlbikgIiIgdmFsdWUgIiIgc3Vic3RyKGxpbmUsIGxlbiArIGtleWxlbiArIDMpCisgICAgICBsZW4gKz0gbGVuZ3RoKHZhbHVlKSArIGxlbmd0aChmaWVsZFsrK2ldKQorICAgICAgc3Vic3RlZCA9IDEKKyAgICB9IGVsc2UKKyAgICAgIGxlbiArPSAxICsga2V5bGVuCisgIH0KKworICBwcmludCBsaW5lCit9CisKK19BQ0FXSworX0FDRU9GCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCitpZiBzZWQgInMvJGFjX2NyLy8iIDwgL2Rldi9udWxsID4gL2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgc2VkICJzLyRhY19jclwkLy87IHMvJGFjX2NyLyRhY19jc19hd2tfY3IvZyIKK2Vsc2UKKyAgY2F0CitmaSA8ICIkdG1wL3N1YnMxLmF3ayIgPiAiJHRtcC9zdWJzLmF3ayIgXAorICB8fCBhc19mbl9lcnJvciAkPyAiY291bGQgbm90IHNldHVwIGNvbmZpZyBmaWxlcyBtYWNoaW5lcnkiICIkTElORU5PIiA1CitfQUNFT0YKKworIyBWUEFUSCBtYXkgY2F1c2UgdHJvdWJsZSB3aXRoIHNvbWUgbWFrZXMsIHNvIHdlIHJlbW92ZSBzb2xlICQoc3JjZGlyKSwKKyMgJHtzcmNkaXJ9IGFuZCBAc3JjZGlyQCBlbnRyaWVzIGZyb20gVlBBVEggaWYgc3JjZGlyIGlzICIuIiwgc3RyaXAgbGVhZGluZyBhbmQKKyMgdHJhaWxpbmcgY29sb25zIGFuZCB0aGVuIHJlbW92ZSB0aGUgd2hvbGUgbGluZSBpZiBWUEFUSCBiZWNvbWVzIGVtcHR5CisjIChhY3R1YWxseSB3ZSBsZWF2ZSBhbiBlbXB0eSBsaW5lIHRvIHByZXNlcnZlIGxpbmUgbnVtYmVycykuCitpZiB0ZXN0ICJ4JHNyY2RpciIgPSB4LjsgdGhlbgorICBhY192cHN1Yj0nL15bCSBdKlZQQVRIWwkgXSo9WwkgXSoveworaAorcy8vLworcy9eLzovCitzL1sJIF0qJC86Lworcy86XCQoc3JjZGlyKTovOi9nCitzLzpcJHtzcmNkaXJ9Oi86L2cKK3MvOkBzcmNkaXJAOi86L2cKK3MvXjoqLy8KK3MvOiokLy8KK3gKK3MvXCg9WwkgXSpcKS4qL1wxLworRworcy9cbi8vCitzL15bXj1dKj1bCSBdKiQvLworfScKK2ZpCisKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKK2ZpICMgdGVzdCAtbiAiJENPTkZJR19GSUxFUyIKKworIyBTZXQgdXAgdGhlIHNjcmlwdHMgZm9yIENPTkZJR19IRUFERVJTIHNlY3Rpb24uCisjIE5vIG5lZWQgdG8gZ2VuZXJhdGUgdGhlbSBpZiB0aGVyZSBhcmUgbm8gQ09ORklHX0hFQURFUlMuCisjIFRoaXMgaGFwcGVucyBmb3IgaW5zdGFuY2Ugd2l0aCBgLi9jb25maWcuc3RhdHVzIE1ha2VmaWxlJy4KK2lmIHRlc3QgLW4gIiRDT05GSUdfSEVBREVSUyI7IHRoZW4KK2NhdCA+IiR0bXAvZGVmaW5lcy5hd2siIDw8XF9BQ0FXSyB8fAorQkVHSU4geworX0FDRU9GCisKKyMgVHJhbnNmb3JtIGNvbmZkZWZzLmggaW50byBhbiBhd2sgc2NyaXB0IGBkZWZpbmVzLmF3aycsIGVtYmVkZGVkIGFzCisjIGhlcmUtZG9jdW1lbnQgaW4gY29uZmlnLnN0YXR1cywgdGhhdCBzdWJzdGl0dXRlcyB0aGUgcHJvcGVyIHZhbHVlcyBpbnRvCisjIGNvbmZpZy5oLmluIHRvIHByb2R1Y2UgY29uZmlnLmguCisKKyMgQ3JlYXRlIGEgZGVsaW1pdGVyIHN0cmluZyB0aGF0IGRvZXMgbm90IGV4aXN0IGluIGNvbmZkZWZzLmgsIHRvIGVhc2UKKyMgaGFuZGxpbmcgb2YgbG9uZyBsaW5lcy4KK2FjX2RlbGltPSclIV8hIyAnCitmb3IgYWNfbGFzdF90cnkgaW4gZmFsc2UgZmFsc2UgOjsgZG8KKyAgYWNfdD1gc2VkIC1uICIvJGFjX2RlbGltL3AiIGNvbmZkZWZzLmhgCisgIGlmIHRlc3QgLXogIiRhY190IjsgdGhlbgorICAgIGJyZWFrCisgIGVsaWYgJGFjX2xhc3RfdHJ5OyB0aGVuCisgICAgYXNfZm5fZXJyb3IgJD8gImNvdWxkIG5vdCBtYWtlICRDT05GSUdfSEVBREVSUyIgIiRMSU5FTk8iIDUKKyAgZWxzZQorICAgIGFjX2RlbGltPSIkYWNfZGVsaW0hJGFjX2RlbGltIF8kYWNfZGVsaW0hISAiCisgIGZpCitkb25lCisKKyMgRm9yIHRoZSBhd2sgc2NyaXB0LCBEIGlzIGFuIGFycmF5IG9mIG1hY3JvIHZhbHVlcyBrZXllZCBieSBuYW1lLAorIyBsaWtld2lzZSBQIGNvbnRhaW5zIG1hY3JvIHBhcmFtZXRlcnMgaWYgYW55LiAgUHJlc2VydmUgYmFja3NsYXNoCisjIG5ld2xpbmUgc2VxdWVuY2VzLgorCithY193b3JkX3JlPVtfJGFzX2NyX0xldHRlcnNdW18kYXNfY3JfYWxudW1dKgorc2VkIC1uICcKK3MvLlx7MTQ4XH0vJiciJGFjX2RlbGltIicvZwordCByc2V0Cis6cnNldAorcy9eWwkgXSojWwkgXSpkZWZpbmVbCSBdWwkgXSovIC8KK3QgZGVmCitkCis6ZGVmCitzL1xcJC8vCit0IGJzbmwKK3MvWyJcXF0vXFwmL2cKK3MvXiBcKCciJGFjX3dvcmRfcmUiJ1wpXCgoW14oKV0qKVwpWwkgXSpcKC4qXCkvUFsiXDEiXT0iXDIiXAorRFsiXDEiXT0iIFwzIi9wCitzL14gXCgnIiRhY193b3JkX3JlIidcKVsJIF0qXCguKlwpL0RbIlwxIl09IiBcMiIvcAorZAorOmJzbmwKK3MvWyJcXF0vXFwmL2cKK3MvXiBcKCciJGFjX3dvcmRfcmUiJ1wpXCgoW14oKV0qKVwpWwkgXSpcKC4qXCkvUFsiXDEiXT0iXDIiXAorRFsiXDEiXT0iIFwzXFxcXFxcbiJcXC9wCit0IGNvbnQKK3MvXiBcKCciJGFjX3dvcmRfcmUiJ1wpWwkgXSpcKC4qXCkvRFsiXDEiXT0iIFwyXFxcXFxcbiJcXC9wCit0IGNvbnQKK2QKKzpjb250CituCitzLy5cezE0OFx9LyYnIiRhY19kZWxpbSInL2cKK3QgY2xlYXIKKzpjbGVhcgorcy9cXCQvLwordCBic25sYworcy9bIlxcXS9cXCYvZzsgcy9eLyIvOyBzLyQvIi9wCitkCis6YnNubGMKK3MvWyJcXF0vXFwmL2c7IHMvXi8iLzsgcy8kL1xcXFxcXG4iXFwvcAorYiBjb250CisnIDxjb25mZGVmcy5oIHwgc2VkICcKK3MvJyIkYWNfZGVsaW0iJy8iXFxcCisiL2cnID4+JENPTkZJR19TVEFUVVMgfHwgYWNfd3JpdGVfZmFpbD0xCisKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorICBmb3IgKGtleSBpbiBEKSBEX2lzX3NldFtrZXldID0gMQorICBGUyA9ICIHIgorfQorL15bXHQgXSojW1x0IF0qKGRlZmluZXx1bmRlZilbXHQgXSskYWNfd29yZF9yZShbXHQgKF18XCQpLyB7CisgIGxpbmUgPSBcJCAwCisgIHNwbGl0KGxpbmUsIGFyZywgIiAiKQorICBpZiAoYXJnWzFdID09ICIjIikgeworICAgIGRlZnVuZGVmID0gYXJnWzJdCisgICAgbWFjMSA9IGFyZ1szXQorICB9IGVsc2UgeworICAgIGRlZnVuZGVmID0gc3Vic3RyKGFyZ1sxXSwgMikKKyAgICBtYWMxID0gYXJnWzJdCisgIH0KKyAgc3BsaXQobWFjMSwgbWFjMiwgIigiKSAjKQorICBtYWNybyA9IG1hYzJbMV0KKyAgcHJlZml4ID0gc3Vic3RyKGxpbmUsIDEsIGluZGV4KGxpbmUsIGRlZnVuZGVmKSAtIDEpCisgIGlmIChEX2lzX3NldFttYWNyb10pIHsKKyAgICAjIFByZXNlcnZlIHRoZSB3aGl0ZSBzcGFjZSBzdXJyb3VuZGluZyB0aGUgIiMiLgorICAgIHByaW50IHByZWZpeCAiZGVmaW5lIiwgbWFjcm8gUFttYWNyb10gRFttYWNyb10KKyAgICBuZXh0CisgIH0gZWxzZSB7CisgICAgIyBSZXBsYWNlICN1bmRlZiB3aXRoIGNvbW1lbnRzLiAgVGhpcyBpcyBuZWNlc3NhcnksIGZvciBleGFtcGxlLAorICAgICMgaW4gdGhlIGNhc2Ugb2YgX1BPU0lYX1NPVVJDRSwgd2hpY2ggaXMgcHJlZGVmaW5lZCBhbmQgcmVxdWlyZWQKKyAgICAjIG9uIHNvbWUgc3lzdGVtcyB3aGVyZSBjb25maWd1cmUgd2lsbCBub3QgZGVjaWRlIHRvIGRlZmluZSBpdC4KKyAgICBpZiAoZGVmdW5kZWYgPT0gInVuZGVmIikgeworICAgICAgcHJpbnQgIi8qIiwgcHJlZml4IGRlZnVuZGVmLCBtYWNybywgIiovIgorICAgICAgbmV4dAorICAgIH0KKyAgfQorfQoreyBwcmludCB9CitfQUNBV0sKK19BQ0VPRgorY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorICBhc19mbl9lcnJvciAkPyAiY291bGQgbm90IHNldHVwIGNvbmZpZyBoZWFkZXJzIG1hY2hpbmVyeSIgIiRMSU5FTk8iIDUKK2ZpICMgdGVzdCAtbiAiJENPTkZJR19IRUFERVJTIgorCisKK2V2YWwgc2V0IFggIiAgOkYgJENPTkZJR19GSUxFUyAgOkggJENPTkZJR19IRUFERVJTICAgIDpDICRDT05GSUdfQ09NTUFORFMiCitzaGlmdAorZm9yIGFjX3RhZworZG8KKyAgY2FzZSAkYWNfdGFnIGluCisgIDpbRkhMQ10pIGFjX21vZGU9JGFjX3RhZzsgY29udGludWU7OworICBlc2FjCisgIGNhc2UgJGFjX21vZGUkYWNfdGFnIGluCisgIDpbRkhMXSo6Kik7OworICA6TCogfCA6Qyo6KikgYXNfZm5fZXJyb3IgJD8gImludmFsaWQgdGFnIFxgJGFjX3RhZyciICIkTElORU5PIiA1IDs7CisgIDpbRkhdLSkgYWNfdGFnPS06LTs7CisgIDpbRkhdKikgYWNfdGFnPSRhY190YWc6JGFjX3RhZy5pbjs7CisgIGVzYWMKKyAgYWNfc2F2ZV9JRlM9JElGUworICBJRlM9OgorICBzZXQgeCAkYWNfdGFnCisgIElGUz0kYWNfc2F2ZV9JRlMKKyAgc2hpZnQKKyAgYWNfZmlsZT0kMQorICBzaGlmdAorCisgIGNhc2UgJGFjX21vZGUgaW4KKyAgOkwpIGFjX3NvdXJjZT0kMTs7CisgIDpbRkhdKQorICAgIGFjX2ZpbGVfaW5wdXRzPQorICAgIGZvciBhY19mCisgICAgZG8KKyAgICAgIGNhc2UgJGFjX2YgaW4KKyAgICAgIC0pIGFjX2Y9IiR0bXAvc3RkaW4iOzsKKyAgICAgICopICMgTG9vayBmb3IgdGhlIGZpbGUgZmlyc3QgaW4gdGhlIGJ1aWxkIHRyZWUsIHRoZW4gaW4gdGhlIHNvdXJjZSB0cmVlCisJICMgKGlmIHRoZSBwYXRoIGlzIG5vdCBhYnNvbHV0ZSkuICBUaGUgYWJzb2x1dGUgcGF0aCBjYW5ub3QgYmUgRE9TLXN0eWxlLAorCSAjIGJlY2F1c2UgJGFjX2YgY2Fubm90IGNvbnRhaW4gYDonLgorCSB0ZXN0IC1mICIkYWNfZiIgfHwKKwkgICBjYXNlICRhY19mIGluCisJICAgW1xcLyRdKikgZmFsc2U7OworCSAgICopIHRlc3QgLWYgIiRzcmNkaXIvJGFjX2YiICYmIGFjX2Y9IiRzcmNkaXIvJGFjX2YiOzsKKwkgICBlc2FjIHx8CisJICAgYXNfZm5fZXJyb3IgMSAiY2Fubm90IGZpbmQgaW5wdXQgZmlsZTogXGAkYWNfZiciICIkTElORU5PIiA1IDs7CisgICAgICBlc2FjCisgICAgICBjYXNlICRhY19mIGluICpcJyopIGFjX2Y9YCRhc19lY2hvICIkYWNfZiIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImA7OyBlc2FjCisgICAgICBhc19mbl9hcHBlbmQgYWNfZmlsZV9pbnB1dHMgIiAnJGFjX2YnIgorICAgIGRvbmUKKworICAgICMgTGV0J3Mgc3RpbGwgcHJldGVuZCBpdCBpcyBgY29uZmlndXJlJyB3aGljaCBpbnN0YW50aWF0ZXMgKGkuZS4sIGRvbid0CisgICAgIyB1c2UgJGFzX21lKSwgcGVvcGxlIHdvdWxkIGJlIHN1cnByaXNlZCB0byByZWFkOgorICAgICMgICAgLyogY29uZmlnLmguICBHZW5lcmF0ZWQgYnkgY29uZmlnLnN0YXR1cy4gICovCisgICAgY29uZmlndXJlX2lucHV0PSdHZW5lcmF0ZWQgZnJvbSAnYAorCSAgJGFzX2VjaG8gIiQqIiB8IHNlZCAnc3xeW146XSovfHw7c3w6W146XSovfCwgfGcnCisJYCcgYnkgY29uZmlndXJlLicKKyAgICBpZiB0ZXN0IHgiJGFjX2ZpbGUiICE9IHgtOyB0aGVuCisgICAgICBjb25maWd1cmVfaW5wdXQ9IiRhY19maWxlLiAgJGNvbmZpZ3VyZV9pbnB1dCIKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY3JlYXRpbmcgJGFjX2ZpbGUiID4mNQorJGFzX2VjaG8gIiRhc19tZTogY3JlYXRpbmcgJGFjX2ZpbGUiID4mNjt9CisgICAgZmkKKyAgICAjIE5ldXRyYWxpemUgc3BlY2lhbCBjaGFyYWN0ZXJzIGludGVycHJldGVkIGJ5IHNlZCBpbiByZXBsYWNlbWVudCBzdHJpbmdzLgorICAgIGNhc2UgJGNvbmZpZ3VyZV9pbnB1dCBpbiAjKAorICAgICpcJiogfCAqXHwqIHwgKlxcKiApCisgICAgICAgYWNfc2VkX2NvbmZfaW5wdXQ9YCRhc19lY2hvICIkY29uZmlndXJlX2lucHV0IiB8CisgICAgICAgc2VkICdzL1tcXFxcJnxdL1xcXFwmL2cnYDs7ICMoCisgICAgKikgYWNfc2VkX2NvbmZfaW5wdXQ9JGNvbmZpZ3VyZV9pbnB1dDs7CisgICAgZXNhYworCisgICAgY2FzZSAkYWNfdGFnIGluCisgICAgKjotOiogfCAqOi0pIGNhdCA+IiR0bXAvc3RkaW4iIFwKKyAgICAgIHx8IGFzX2ZuX2Vycm9yICQ/ICJjb3VsZCBub3QgY3JlYXRlICRhY19maWxlIiAiJExJTkVOTyIgNSAgOzsKKyAgICBlc2FjCisgICAgOzsKKyAgZXNhYworCisgIGFjX2Rpcj1gJGFzX2Rpcm5hbWUgLS0gIiRhY19maWxlIiB8fAorJGFzX2V4cHIgWCIkYWNfZmlsZSIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKwkgWCIkYWNfZmlsZSIgOiAnWFwoLy9cKVteL10nIFx8IFwKKwkgWCIkYWNfZmlsZSIgOiAnWFwoLy9cKSQnIFx8IFwKKwkgWCIkYWNfZmlsZSIgOiAnWFwoL1wpJyBcfCAuIDI+L2Rldi9udWxsIHx8CiskYXNfZWNobyBYIiRhY19maWxlIiB8CisgICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cL1wpW14vXS4qL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cL1wpJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXCkuKi97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICBzLy4qLy4vOyBxJ2AKKyAgYXNfZGlyPSIkYWNfZGlyIjsgYXNfZm5fbWtkaXJfcAorICBhY19idWlsZGRpcj0uCisKK2Nhc2UgIiRhY19kaXIiIGluCisuKSBhY19kaXJfc3VmZml4PSBhY190b3BfYnVpbGRkaXJfc3ViPS4gYWNfdG9wX2J1aWxkX3ByZWZpeD0gOzsKKyopCisgIGFjX2Rpcl9zdWZmaXg9L2AkYXNfZWNobyAiJGFjX2RpciIgfCBzZWQgJ3N8XlwuW1xcL118fCdgCisgICMgQSAiLi4iIGZvciBlYWNoIGRpcmVjdG9yeSBpbiAkYWNfZGlyX3N1ZmZpeC4KKyAgYWNfdG9wX2J1aWxkZGlyX3N1Yj1gJGFzX2VjaG8gIiRhY19kaXJfc3VmZml4IiB8IHNlZCAnc3wvW15cXC9dKnwvLi58ZztzfC98fCdgCisgIGNhc2UgJGFjX3RvcF9idWlsZGRpcl9zdWIgaW4KKyAgIiIpIGFjX3RvcF9idWlsZGRpcl9zdWI9LiBhY190b3BfYnVpbGRfcHJlZml4PSA7OworICAqKSAgYWNfdG9wX2J1aWxkX3ByZWZpeD0kYWNfdG9wX2J1aWxkZGlyX3N1Yi8gOzsKKyAgZXNhYyA7OworZXNhYworYWNfYWJzX3RvcF9idWlsZGRpcj0kYWNfcHdkCithY19hYnNfYnVpbGRkaXI9JGFjX3B3ZCRhY19kaXJfc3VmZml4CisjIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5OgorYWNfdG9wX2J1aWxkZGlyPSRhY190b3BfYnVpbGRfcHJlZml4CisKK2Nhc2UgJHNyY2RpciBpbgorICAuKSAgIyBXZSBhcmUgYnVpbGRpbmcgaW4gcGxhY2UuCisgICAgYWNfc3JjZGlyPS4KKyAgICBhY190b3Bfc3JjZGlyPSRhY190b3BfYnVpbGRkaXJfc3ViCisgICAgYWNfYWJzX3RvcF9zcmNkaXI9JGFjX3B3ZCA7OworICBbXFwvXSogfCA/OltcXC9dKiApICAjIEFic29sdXRlIG5hbWUuCisgICAgYWNfc3JjZGlyPSRzcmNkaXIkYWNfZGlyX3N1ZmZpeDsKKyAgICBhY190b3Bfc3JjZGlyPSRzcmNkaXIKKyAgICBhY19hYnNfdG9wX3NyY2Rpcj0kc3JjZGlyIDs7CisgICopICMgUmVsYXRpdmUgbmFtZS4KKyAgICBhY19zcmNkaXI9JGFjX3RvcF9idWlsZF9wcmVmaXgkc3JjZGlyJGFjX2Rpcl9zdWZmaXgKKyAgICBhY190b3Bfc3JjZGlyPSRhY190b3BfYnVpbGRfcHJlZml4JHNyY2RpcgorICAgIGFjX2Fic190b3Bfc3JjZGlyPSRhY19wd2QvJHNyY2RpciA7OworZXNhYworYWNfYWJzX3NyY2Rpcj0kYWNfYWJzX3RvcF9zcmNkaXIkYWNfZGlyX3N1ZmZpeAorCisKKyAgY2FzZSAkYWNfbW9kZSBpbgorICA6RikKKyAgIworICAjIENPTkZJR19GSUxFCisgICMKKworICBjYXNlICRJTlNUQUxMIGluCisgIFtcXC8kXSogfCA/OltcXC9dKiApIGFjX0lOU1RBTEw9JElOU1RBTEwgOzsKKyAgKikgYWNfSU5TVEFMTD0kYWNfdG9wX2J1aWxkX3ByZWZpeCRJTlNUQUxMIDs7CisgIGVzYWMKKyAgYWNfTUtESVJfUD0kTUtESVJfUAorICBjYXNlICRNS0RJUl9QIGluCisgIFtcXC8kXSogfCA/OltcXC9dKiApIDs7CisgICovKikgYWNfTUtESVJfUD0kYWNfdG9wX2J1aWxkX3ByZWZpeCRNS0RJUl9QIDs7CisgIGVzYWMKK19BQ0VPRgorCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCisjIElmIHRoZSB0ZW1wbGF0ZSBkb2VzIG5vdCBrbm93IGFib3V0IGRhdGFyb290ZGlyLCBleHBhbmQgaXQuCisjIEZJWE1FOiBUaGlzIGhhY2sgc2hvdWxkIGJlIHJlbW92ZWQgYSBmZXcgeWVhcnMgYWZ0ZXIgMi42MC4KK2FjX2RhdGFyb290ZGlyX2hhY2s9OyBhY19kYXRhcm9vdGRpcl9zZWVuPQorYWNfc2VkX2RhdGFyb290PScKKy9kYXRhcm9vdGRpci8geworICBwCisgIHEKK30KKy9AZGF0YWRpckAvcAorL0Bkb2NkaXJAL3AKKy9AaW5mb2RpckAvcAorL0Bsb2NhbGVkaXJAL3AKKy9AbWFuZGlyQC9wJworY2FzZSBgZXZhbCAic2VkIC1uIFwiXCRhY19zZWRfZGF0YXJvb3RcIiAkYWNfZmlsZV9pbnB1dHMiYCBpbgorKmRhdGFyb290ZGlyKikgYWNfZGF0YXJvb3RkaXJfc2Vlbj15ZXM7OworKkBkYXRhZGlyQCp8KkBkb2NkaXJAKnwqQGluZm9kaXJAKnwqQGxvY2FsZWRpckAqfCpAbWFuZGlyQCopCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogJGFjX2ZpbGVfaW5wdXRzIHNlZW1zIHRvIGlnbm9yZSB0aGUgLS1kYXRhcm9vdGRpciBzZXR0aW5nIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19maWxlX2lucHV0cyBzZWVtcyB0byBpZ25vcmUgdGhlIC0tZGF0YXJvb3RkaXIgc2V0dGluZyIgPiYyO30KK19BQ0VPRgorY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCisgIGFjX2RhdGFyb290ZGlyX2hhY2s9JworICBzJkBkYXRhZGlyQCYkZGF0YWRpciZnCisgIHMmQGRvY2RpckAmJGRvY2RpciZnCisgIHMmQGluZm9kaXJAJiRpbmZvZGlyJmcKKyAgcyZAbG9jYWxlZGlyQCYkbG9jYWxlZGlyJmcKKyAgcyZAbWFuZGlyQCYkbWFuZGlyJmcKKyAgcyZcXFwke2RhdGFyb290ZGlyfSYkZGF0YXJvb3RkaXImZycgOzsKK2VzYWMKK19BQ0VPRgorCisjIE5ldXRyYWxpemUgVlBBVEggd2hlbiBgJHNyY2RpcicgPSBgLicuCisjIFNoZWxsIGNvZGUgaW4gY29uZmlndXJlLmFjIG1pZ2h0IHNldCBleHRyYXN1Yi4KKyMgRklYTUU6IGRvIHdlIHJlYWxseSB3YW50IHRvIG1haW50YWluIHRoaXMgZmVhdHVyZT8KK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorYWNfc2VkX2V4dHJhPSIkYWNfdnBzdWIKKyRleHRyYXN1YgorX0FDRU9GCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCis6dAorL0BbYS16QS1aX11bYS16QS1aXzAtOV0qQC8hYgorc3xAY29uZmlndXJlX2lucHV0QHwkYWNfc2VkX2NvbmZfaW5wdXR8O3QgdAorcyZAdG9wX2J1aWxkZGlyQCYkYWNfdG9wX2J1aWxkZGlyX3N1YiY7dCB0CitzJkB0b3BfYnVpbGRfcHJlZml4QCYkYWNfdG9wX2J1aWxkX3ByZWZpeCY7dCB0CitzJkBzcmNkaXJAJiRhY19zcmNkaXImO3QgdAorcyZAYWJzX3NyY2RpckAmJGFjX2Fic19zcmNkaXImO3QgdAorcyZAdG9wX3NyY2RpckAmJGFjX3RvcF9zcmNkaXImO3QgdAorcyZAYWJzX3RvcF9zcmNkaXJAJiRhY19hYnNfdG9wX3NyY2RpciY7dCB0CitzJkBidWlsZGRpckAmJGFjX2J1aWxkZGlyJjt0IHQKK3MmQGFic19idWlsZGRpckAmJGFjX2Fic19idWlsZGRpciY7dCB0CitzJkBhYnNfdG9wX2J1aWxkZGlyQCYkYWNfYWJzX3RvcF9idWlsZGRpciY7dCB0CitzJkBJTlNUQUxMQCYkYWNfSU5TVEFMTCY7dCB0CitzJkBNS0RJUl9QQCYkYWNfTUtESVJfUCY7dCB0CiskYWNfZGF0YXJvb3RkaXJfaGFjaworIgorZXZhbCBzZWQgXCJcJGFjX3NlZF9leHRyYVwiICIkYWNfZmlsZV9pbnB1dHMiIHwgJEFXSyAtZiAiJHRtcC9zdWJzLmF3ayIgPiR0bXAvb3V0IFwKKyAgfHwgYXNfZm5fZXJyb3IgJD8gImNvdWxkIG5vdCBjcmVhdGUgJGFjX2ZpbGUiICIkTElORU5PIiA1CisKK3Rlc3QgLXogIiRhY19kYXRhcm9vdGRpcl9oYWNrJGFjX2RhdGFyb290ZGlyX3NlZW4iICYmCisgIHsgYWNfb3V0PWBzZWQgLW4gJy9cJHtkYXRhcm9vdGRpcn0vcCcgIiR0bXAvb3V0ImA7IHRlc3QgLW4gIiRhY19vdXQiOyB9ICYmCisgIHsgYWNfb3V0PWBzZWQgLW4gJy9eWwkgXSpkYXRhcm9vdGRpclsJIF0qOio9L3AnICIkdG1wL291dCJgOyB0ZXN0IC16ICIkYWNfb3V0IjsgfSAmJgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICRhY19maWxlIGNvbnRhaW5zIGEgcmVmZXJlbmNlIHRvIHRoZSB2YXJpYWJsZSBcYGRhdGFyb290ZGlyJword2hpY2ggc2VlbXMgdG8gYmUgdW5kZWZpbmVkLiAgUGxlYXNlIG1ha2Ugc3VyZSBpdCBpcyBkZWZpbmVkIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19maWxlIGNvbnRhaW5zIGEgcmVmZXJlbmNlIHRvIHRoZSB2YXJpYWJsZSBcYGRhdGFyb290ZGlyJword2hpY2ggc2VlbXMgdG8gYmUgdW5kZWZpbmVkLiAgUGxlYXNlIG1ha2Ugc3VyZSBpdCBpcyBkZWZpbmVkIiA+JjI7fQorCisgIHJtIC1mICIkdG1wL3N0ZGluIgorICBjYXNlICRhY19maWxlIGluCisgIC0pIGNhdCAiJHRtcC9vdXQiICYmIHJtIC1mICIkdG1wL291dCI7OworICAqKSBybSAtZiAiJGFjX2ZpbGUiICYmIG12ICIkdG1wL291dCIgIiRhY19maWxlIjs7CisgIGVzYWMgXAorICB8fCBhc19mbl9lcnJvciAkPyAiY291bGQgbm90IGNyZWF0ZSAkYWNfZmlsZSIgIiRMSU5FTk8iIDUKKyA7OworICA6SCkKKyAgIworICAjIENPTkZJR19IRUFERVIKKyAgIworICBpZiB0ZXN0IHgiJGFjX2ZpbGUiICE9IHgtOyB0aGVuCisgICAgeworICAgICAgJGFzX2VjaG8gIi8qICRjb25maWd1cmVfaW5wdXQgICovIiBcCisgICAgICAmJiBldmFsICckQVdLIC1mICIkdG1wL2RlZmluZXMuYXdrIicgIiRhY19maWxlX2lucHV0cyIKKyAgICB9ID4iJHRtcC9jb25maWcuaCIgXAorICAgICAgfHwgYXNfZm5fZXJyb3IgJD8gImNvdWxkIG5vdCBjcmVhdGUgJGFjX2ZpbGUiICIkTElORU5PIiA1CisgICAgaWYgZGlmZiAiJGFjX2ZpbGUiICIkdG1wL2NvbmZpZy5oIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX2ZpbGUgaXMgdW5jaGFuZ2VkIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6ICRhY19maWxlIGlzIHVuY2hhbmdlZCIgPiY2O30KKyAgICBlbHNlCisgICAgICBybSAtZiAiJGFjX2ZpbGUiCisgICAgICBtdiAiJHRtcC9jb25maWcuaCIgIiRhY19maWxlIiBcCisJfHwgYXNfZm5fZXJyb3IgJD8gImNvdWxkIG5vdCBjcmVhdGUgJGFjX2ZpbGUiICIkTElORU5PIiA1CisgICAgZmkKKyAgZWxzZQorICAgICRhc19lY2hvICIvKiAkY29uZmlndXJlX2lucHV0ICAqLyIgXAorICAgICAgJiYgZXZhbCAnJEFXSyAtZiAiJHRtcC9kZWZpbmVzLmF3ayInICIkYWNfZmlsZV9pbnB1dHMiIFwKKyAgICAgIHx8IGFzX2ZuX2Vycm9yICQ/ICJjb3VsZCBub3QgY3JlYXRlIC0iICIkTElORU5PIiA1CisgIGZpCisjIENvbXB1dGUgIiRhY19maWxlIidzIGluZGV4IGluICRjb25maWdfaGVhZGVycy4KK19hbV9hcmc9IiRhY19maWxlIgorX2FtX3N0YW1wX2NvdW50PTEKK2ZvciBfYW1faGVhZGVyIGluICRjb25maWdfaGVhZGVycyA6OyBkbworICBjYXNlICRfYW1faGVhZGVyIGluCisgICAgJF9hbV9hcmcgfCAkX2FtX2FyZzoqICkKKyAgICAgIGJyZWFrIDs7CisgICAgKiApCisgICAgICBfYW1fc3RhbXBfY291bnQ9YGV4cHIgJF9hbV9zdGFtcF9jb3VudCArIDFgIDs7CisgIGVzYWMKK2RvbmUKK2VjaG8gInRpbWVzdGFtcCBmb3IgJF9hbV9hcmciID5gJGFzX2Rpcm5hbWUgLS0gIiRfYW1fYXJnIiB8fAorJGFzX2V4cHIgWCIkX2FtX2FyZyIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKwkgWCIkX2FtX2FyZyIgOiAnWFwoLy9cKVteL10nIFx8IFwKKwkgWCIkX2FtX2FyZyIgOiAnWFwoLy9cKSQnIFx8IFwKKwkgWCIkX2FtX2FyZyIgOiAnWFwoL1wpJyBcfCAuIDI+L2Rldi9udWxsIHx8CiskYXNfZWNobyBYIiRfYW1fYXJnIiB8CisgICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cL1wpW14vXS4qL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cL1wpJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXCkuKi97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICBzLy4qLy4vOyBxJ2Avc3RhbXAtaCRfYW1fc3RhbXBfY291bnQKKyA7OworCisgIDpDKSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBleGVjdXRpbmcgJGFjX2ZpbGUgY29tbWFuZHMiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXhlY3V0aW5nICRhY19maWxlIGNvbW1hbmRzIiA+JjY7fQorIDs7CisgIGVzYWMKKworCisgIGNhc2UgJGFjX2ZpbGUkYWNfbW9kZSBpbgorICAgICJkZXBmaWxlcyI6QykgdGVzdCB4IiRBTURFUF9UUlVFIiAhPSB4IiIgfHwgeworICAjIEF1dG9jb25mIDIuNjIgcXVvdGVzIC0tZmlsZSBhcmd1bWVudHMgZm9yIGV2YWwsIGJ1dCBub3Qgd2hlbiBmaWxlcworICAjIGFyZSBsaXN0ZWQgd2l0aG91dCAtLWZpbGUuICBMZXQncyBwbGF5IHNhZmUgYW5kIG9ubHkgZW5hYmxlIHRoZSBldmFsCisgICMgaWYgd2UgZGV0ZWN0IHRoZSBxdW90aW5nLgorICBjYXNlICRDT05GSUdfRklMRVMgaW4KKyAgKlwnKikgZXZhbCBzZXQgeCAiJENPTkZJR19GSUxFUyIgOzsKKyAgKikgICBzZXQgeCAkQ09ORklHX0ZJTEVTIDs7CisgIGVzYWMKKyAgc2hpZnQKKyAgZm9yIG1mCisgIGRvCisgICAgIyBTdHJpcCBNRiBzbyB3ZSBlbmQgdXAgd2l0aCB0aGUgbmFtZSBvZiB0aGUgZmlsZS4KKyAgICBtZj1gZWNobyAiJG1mIiB8IHNlZCAtZSAncy86LiokLy8nYAorICAgICMgQ2hlY2sgd2hldGhlciB0aGlzIGlzIGFuIEF1dG9tYWtlIGdlbmVyYXRlZCBNYWtlZmlsZSBvciBub3QuCisgICAgIyBXZSB1c2VkIHRvIG1hdGNoIG9ubHkgdGhlIGZpbGVzIG5hbWVkIGBNYWtlZmlsZS5pbicsIGJ1dAorICAgICMgc29tZSBwZW9wbGUgcmVuYW1lIHRoZW07IHNvIGluc3RlYWQgd2UgbG9vayBhdCB0aGUgZmlsZSBjb250ZW50LgorICAgICMgR3JlcCdpbmcgdGhlIGZpcnN0IGxpbmUgaXMgbm90IGVub3VnaDogc29tZSBwZW9wbGUgcG9zdC1wcm9jZXNzCisgICAgIyBlYWNoIE1ha2VmaWxlLmluIGFuZCBhZGQgYSBuZXcgbGluZSBvbiB0b3Agb2YgZWFjaCBmaWxlIHRvIHNheSBzby4KKyAgICAjIEdyZXAnaW5nIHRoZSB3aG9sZSBmaWxlIGlzIG5vdCBnb29kIGVpdGhlcjogQUlYIGdyZXAgaGFzIGEgbGluZQorICAgICMgbGltaXQgb2YgMjA0OCwgYnV0IGFsbCBzZWQncyB3ZSBrbm93IGhhdmUgdW5kZXJzdGFuZCBhdCBsZWFzdCA0MDAwLgorICAgIGlmIHNlZCAtbiAncyxeIy4qZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlLiosWCxwJyAiJG1mIiB8IGdyZXAgWCA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgIGRpcnBhcnQ9YCRhc19kaXJuYW1lIC0tICIkbWYiIHx8CiskYXNfZXhwciBYIiRtZiIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKwkgWCIkbWYiIDogJ1hcKC8vXClbXi9dJyBcfCBcCisJIFgiJG1mIiA6ICdYXCgvL1wpJCcgXHwgXAorCSBYIiRtZiIgOiAnWFwoL1wpJyBcfCAuIDI+L2Rldi9udWxsIHx8CiskYXNfZWNobyBYIiRtZiIgfAorICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXC9cKVteL10uKi97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXC9cKSQveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wpLioveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgcy8uKi8uLzsgcSdgCisgICAgZWxzZQorICAgICAgY29udGludWUKKyAgICBmaQorICAgICMgRXh0cmFjdCB0aGUgZGVmaW5pdGlvbiBvZiBERVBESVIsIGFtX19pbmNsdWRlLCBhbmQgYW1fX3F1b3RlCisgICAgIyBmcm9tIHRoZSBNYWtlZmlsZSB3aXRob3V0IHJ1bm5pbmcgYG1ha2UnLgorICAgIERFUERJUj1gc2VkIC1uICdzL15ERVBESVIgPSAvL3AnIDwgIiRtZiJgCisgICAgdGVzdCAteiAiJERFUERJUiIgJiYgY29udGludWUKKyAgICBhbV9faW5jbHVkZT1gc2VkIC1uICdzL15hbV9faW5jbHVkZSA9IC8vcCcgPCAiJG1mImAKKyAgICB0ZXN0IC16ICJhbV9faW5jbHVkZSIgJiYgY29udGludWUKKyAgICBhbV9fcXVvdGU9YHNlZCAtbiAncy9eYW1fX3F1b3RlID0gLy9wJyA8ICIkbWYiYAorICAgICMgV2hlbiB1c2luZyBhbnNpMmtuciwgVSBtYXkgYmUgZW1wdHkgb3IgYW4gdW5kZXJzY29yZTsgZXhwYW5kIGl0CisgICAgVT1gc2VkIC1uICdzL15VID0gLy9wJyA8ICIkbWYiYAorICAgICMgRmluZCBhbGwgZGVwZW5kZW5jeSBvdXRwdXQgZmlsZXMsIHRoZXkgYXJlIGluY2x1ZGVkIGZpbGVzIHdpdGgKKyAgICAjICQoREVQRElSKSBpbiB0aGVpciBuYW1lcy4gIFdlIGludm9rZSBzZWQgdHdpY2UgYmVjYXVzZSBpdCBpcyB0aGUKKyAgICAjIHNpbXBsZXN0IGFwcHJvYWNoIHRvIGNoYW5naW5nICQoREVQRElSKSB0byBpdHMgYWN0dWFsIHZhbHVlIGluIHRoZQorICAgICMgZXhwYW5zaW9uLgorICAgIGZvciBmaWxlIGluIGBzZWQgLW4gIgorICAgICAgcy9eJGFtX19pbmNsdWRlICRhbV9fcXVvdGVcKC4qKERFUERJUikuKlwpJGFtX19xdW90ZSInJC9cMS9wJyA8IiRtZiIgfCBcCisJIHNlZCAtZSAncy9cJChERVBESVIpLyciJERFUERJUiInL2cnIC1lICdzL1wkVS8nIiRVIicvZydgOyBkbworICAgICAgIyBNYWtlIHN1cmUgdGhlIGRpcmVjdG9yeSBleGlzdHMuCisgICAgICB0ZXN0IC1mICIkZGlycGFydC8kZmlsZSIgJiYgY29udGludWUKKyAgICAgIGZkaXI9YCRhc19kaXJuYW1lIC0tICIkZmlsZSIgfHwKKyRhc19leHByIFgiJGZpbGUiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCisJIFgiJGZpbGUiIDogJ1hcKC8vXClbXi9dJyBcfCBcCisJIFgiJGZpbGUiIDogJ1hcKC8vXCkkJyBcfCBcCisJIFgiJGZpbGUiIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAorJGFzX2VjaG8gWCIkZmlsZSIgfAorICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXC9cKVteL10uKi97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXC9cKSQveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wpLioveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgcy8uKi8uLzsgcSdgCisgICAgICBhc19kaXI9JGRpcnBhcnQvJGZkaXI7IGFzX2ZuX21rZGlyX3AKKyAgICAgICMgZWNobyAiY3JlYXRpbmcgJGRpcnBhcnQvJGZpbGUiCisgICAgICBlY2hvICcjIGR1bW15JyA+ICIkZGlycGFydC8kZmlsZSIKKyAgICBkb25lCisgIGRvbmUKK30KKyA7OworICAgICJsaWJ0b29sIjpDKQorCisgICAgIyBTZWUgaWYgd2UgYXJlIHJ1bm5pbmcgb24genNoLCBhbmQgc2V0IHRoZSBvcHRpb25zIHdoaWNoIGFsbG93IG91cgorICAgICMgY29tbWFuZHMgdGhyb3VnaCB3aXRob3V0IHJlbW92YWwgb2YgXCBlc2NhcGVzLgorICAgIGlmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgOyB0aGVuCisgICAgICBzZXRvcHQgTk9fR0xPQl9TVUJTVAorICAgIGZpCisKKyAgICBjZmdmaWxlPSIke29maWxlfVQiCisgICAgdHJhcCAiJFJNIFwiJGNmZ2ZpbGVcIjsgZXhpdCAxIiAxIDIgMTUKKyAgICAkUk0gIiRjZmdmaWxlIgorCisgICAgY2F0IDw8X0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCisjISAkU0hFTEwKKworIyBgJEVDSE8gIiRvZmlsZSIgfCBzZWQgJ3MlXi4qLyUlJ2AgLSBQcm92aWRlIGdlbmVyYWxpemVkIGxpYnJhcnktYnVpbGRpbmcgc3VwcG9ydCBzZXJ2aWNlcy4KKyMgR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgJGFzX21lICgkUEFDS0FHRSRUSU1FU1RBTVApICRWRVJTSU9OCisjIExpYnRvb2wgd2FzIGNvbmZpZ3VyZWQgb24gaG9zdCBgKGhvc3RuYW1lIHx8IHVuYW1lIC1uKSAyPi9kZXYvbnVsbCB8IHNlZCAxcWA6CisjIE5PVEU6IENoYW5nZXMgbWFkZSB0byB0aGlzIGZpbGUgd2lsbCBiZSBsb3N0OiBsb29rIGF0IGx0bWFpbi5zaC4KKyMKKyMgICBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDMsIDIwMDQsIDIwMDUsCisjICAgICAgICAgICAgICAgICAyMDA2LCAyMDA3LCAyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyAgIFdyaXR0ZW4gYnkgR29yZG9uIE1hdHppZ2tlaXQsIDE5OTYKKyMKKyMgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBHTlUgTGlidG9vbC4KKyMKKyMgR05VIExpYnRvb2wgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisjIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisjIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyMgaWYgeW91IGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIG9yIGxpYnJhcnkgdGhhdAorIyBpcyBidWlsdCB1c2luZyBHTlUgTGlidG9vbCwgeW91IG1heSBpbmNsdWRlIHRoaXMgZmlsZSB1bmRlciB0aGUKKyMgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisjCisjIEdOVSBMaWJ0b29sIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCBHTlUgTGlidG9vbDsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIGEgY29weQorIyBjYW4gYmUgZG93bmxvYWRlZCBmcm9tIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwuaHRtbCwgb3IKKyMgb2J0YWluZWQgYnkgd3JpdGluZyB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKworCisjIFRoZSBuYW1lcyBvZiB0aGUgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIHN1cHBvcnRlZCBieSB0aGlzIHNjcmlwdC4KK2F2YWlsYWJsZV90YWdzPSJDWFggIgorCisjICMjIyBCRUdJTiBMSUJUT09MIENPTkZJRworCisjIFdoaWNoIHJlbGVhc2Ugb2YgbGlidG9vbC5tNCB3YXMgdXNlZD8KK21hY3JvX3ZlcnNpb249JG1hY3JvX3ZlcnNpb24KK21hY3JvX3JldmlzaW9uPSRtYWNyb19yZXZpc2lvbgorCisjIFdoZXRoZXIgb3Igbm90IHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMuCitidWlsZF9saWJ0b29sX2xpYnM9JGVuYWJsZV9zaGFyZWQKKworIyBXaGV0aGVyIG9yIG5vdCB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzLgorYnVpbGRfb2xkX2xpYnM9JGVuYWJsZV9zdGF0aWMKKworIyBXaGF0IHR5cGUgb2Ygb2JqZWN0cyB0byBidWlsZC4KK3BpY19tb2RlPSRwaWNfbW9kZQorCisjIFdoZXRoZXIgb3Igbm90IHRvIG9wdGltaXplIGZvciBmYXN0IGluc3RhbGxhdGlvbi4KK2Zhc3RfaW5zdGFsbD0kZW5hYmxlX2Zhc3RfaW5zdGFsbAorCisjIFRoZSBob3N0IHN5c3RlbS4KK2hvc3RfYWxpYXM9JGhvc3RfYWxpYXMKK2hvc3Q9JGhvc3QKK2hvc3Rfb3M9JGhvc3Rfb3MKKworIyBUaGUgYnVpbGQgc3lzdGVtLgorYnVpbGRfYWxpYXM9JGJ1aWxkX2FsaWFzCitidWlsZD0kYnVpbGQKK2J1aWxkX29zPSRidWlsZF9vcworCisjIEEgc2VkIHByb2dyYW0gdGhhdCBkb2VzIG5vdCB0cnVuY2F0ZSBvdXRwdXQuCitTRUQ9JGx0X1NFRAorCisjIFNlZCB0aGF0IGhlbHBzIHVzIGF2b2lkIGFjY2lkZW50YWxseSB0cmlnZ2VyaW5nIGVjaG8oMSkgb3B0aW9ucyBsaWtlIC1uLgorWHNlZD0iXCRTRUQgLWUgMXMvXlgvLyIKKworIyBBIGdyZXAgcHJvZ3JhbSB0aGF0IGhhbmRsZXMgbG9uZyBsaW5lcy4KK0dSRVA9JGx0X0dSRVAKKworIyBBbiBFUkUgbWF0Y2hlci4KK0VHUkVQPSRsdF9FR1JFUAorCisjIEEgbGl0ZXJhbCBzdHJpbmcgbWF0Y2hlci4KK0ZHUkVQPSRsdF9GR1JFUAorCisjIEEgQlNELSBvciBNUy1jb21wYXRpYmxlIG5hbWUgbGlzdGVyLgorTk09JGx0X05NCisKKyMgV2hldGhlciB3ZSBuZWVkIHNvZnQgb3IgaGFyZCBsaW5rcy4KK0xOX1M9JGx0X0xOX1MKKworIyBXaGF0IGlzIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBhIGNvbW1hbmQ/CittYXhfY21kX2xlbj0kbWF4X2NtZF9sZW4KKworIyBPYmplY3QgZmlsZSBzdWZmaXggKG5vcm1hbGx5ICJvIikuCitvYmpleHQ9JGFjX29iamV4dAorCisjIEV4ZWN1dGFibGUgZmlsZSBzdWZmaXggKG5vcm1hbGx5ICIiKS4KK2V4ZWV4dD0kZXhlZXh0CisKKyMgd2hldGhlciB0aGUgc2hlbGwgdW5kZXJzdGFuZHMgInVuc2V0Ii4KK2x0X3Vuc2V0PSRsdF91bnNldAorCisjIHR1cm4gc3BhY2VzIGludG8gbmV3bGluZXMuCitTUDJOTD0kbHRfbHRfU1AyTkwKKworIyB0dXJuIG5ld2xpbmVzIGludG8gc3BhY2VzLgorTkwyU1A9JGx0X2x0X05MMlNQCisKKyMgSG93IHRvIGNyZWF0ZSByZWxvYWRhYmxlIG9iamVjdCBmaWxlcy4KK3JlbG9hZF9mbGFnPSRsdF9yZWxvYWRfZmxhZworcmVsb2FkX2NtZHM9JGx0X3JlbG9hZF9jbWRzCisKKyMgQW4gb2JqZWN0IHN5bWJvbCBkdW1wZXIuCitPQkpEVU1QPSRsdF9PQkpEVU1QCisKKyMgTWV0aG9kIHRvIGNoZWNrIHdoZXRoZXIgZGVwZW5kZW50IGxpYnJhcmllcyBhcmUgc2hhcmVkIG9iamVjdHMuCitkZXBsaWJzX2NoZWNrX21ldGhvZD0kbHRfZGVwbGlic19jaGVja19tZXRob2QKKworIyBDb21tYW5kIHRvIHVzZSB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID09ICJmaWxlX21hZ2ljIi4KK2ZpbGVfbWFnaWNfY21kPSRsdF9maWxlX21hZ2ljX2NtZAorCisjIFRoZSBhcmNoaXZlci4KK0FSPSRsdF9BUgorQVJfRkxBR1M9JGx0X0FSX0ZMQUdTCisKKyMgQSBzeW1ib2wgc3RyaXBwaW5nIHByb2dyYW0uCitTVFJJUD0kbHRfU1RSSVAKKworIyBDb21tYW5kcyB1c2VkIHRvIGluc3RhbGwgYW4gb2xkLXN0eWxlIGFyY2hpdmUuCitSQU5MSUI9JGx0X1JBTkxJQgorb2xkX3Bvc3RpbnN0YWxsX2NtZHM9JGx0X29sZF9wb3N0aW5zdGFsbF9jbWRzCitvbGRfcG9zdHVuaW5zdGFsbF9jbWRzPSRsdF9vbGRfcG9zdHVuaW5zdGFsbF9jbWRzCisKKyMgQSBDIGNvbXBpbGVyLgorTFRDQz0kbHRfQ0MKKworIyBMVENDIGNvbXBpbGVyIGZsYWdzLgorTFRDRkxBR1M9JGx0X0NGTEFHUworCisjIFRha2UgdGhlIG91dHB1dCBvZiBubSBhbmQgcHJvZHVjZSBhIGxpc3Rpbmcgb2YgcmF3IHN5bWJvbHMgYW5kIEMgbmFtZXMuCitnbG9iYWxfc3ltYm9sX3BpcGU9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUKKworIyBUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbiBhIHByb3BlciBDIGRlY2xhcmF0aW9uLgorZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wKKworIyBUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbiBhIEMgbmFtZSBhZGRyZXNzIHBhaXIuCitnbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcworCisjIFRyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgQyBuYW1lIGFkZHJlc3MgcGFpciB3aGVuIGxpYiBwcmVmaXggaXMgbmVlZGVkLgorZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4PSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4CisKKyMgVGhlIG5hbWUgb2YgdGhlIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIHRlbXBvcmFyeSBsaWJ0b29sIGZpbGVzLgorb2JqZGlyPSRvYmpkaXIKKworIyBTaGVsbCB0byB1c2Ugd2hlbiBpbnZva2luZyBzaGVsbCBzY3JpcHRzLgorU0hFTEw9JGx0X1NIRUxMCisKKyMgQW4gZWNobyBwcm9ncmFtIHRoYXQgZG9lcyBub3QgaW50ZXJwcmV0IGJhY2tzbGFzaGVzLgorRUNITz0kbHRfRUNITworCisjIFVzZWQgdG8gZXhhbWluZSBsaWJyYXJpZXMgd2hlbiBmaWxlX21hZ2ljX2NtZCBiZWdpbnMgd2l0aCAiZmlsZSIuCitNQUdJQ19DTUQ9JE1BR0lDX0NNRAorCisjIE11c3Qgd2UgbG9jayBmaWxlcyB3aGVuIGRvaW5nIGNvbXBpbGF0aW9uPworbmVlZF9sb2Nrcz0kbHRfbmVlZF9sb2NrcworCisjIFRvb2wgdG8gbWFuaXB1bGF0ZSBhcmNoaXZlZCBEV0FSRiBkZWJ1ZyBzeW1ib2wgZmlsZXMgb24gTWFjIE9TIFguCitEU1lNVVRJTD0kbHRfRFNZTVVUSUwKKworIyBUb29sIHRvIGNoYW5nZSBnbG9iYWwgdG8gbG9jYWwgc3ltYm9scyBvbiBNYWMgT1MgWC4KK05NRURJVD0kbHRfTk1FRElUCisKKyMgVG9vbCB0byBtYW5pcHVsYXRlIGZhdCBvYmplY3RzIGFuZCBhcmNoaXZlcyBvbiBNYWMgT1MgWC4KK0xJUE89JGx0X0xJUE8KKworIyBsZGQvcmVhZGVsZiBsaWtlIHRvb2wgZm9yIE1hY2gtTyBiaW5hcmllcyBvbiBNYWMgT1MgWC4KK09UT09MPSRsdF9PVE9PTAorCisjIGxkZC9yZWFkZWxmIGxpa2UgdG9vbCBmb3IgNjQgYml0IE1hY2gtTyBiaW5hcmllcyBvbiBNYWMgT1MgWCAxMC40LgorT1RPT0w2ND0kbHRfT1RPT0w2NAorCisjIE9sZCBhcmNoaXZlIHN1ZmZpeCAobm9ybWFsbHkgImEiKS4KK2xpYmV4dD0kbGliZXh0CisKKyMgU2hhcmVkIGxpYnJhcnkgc3VmZml4IChub3JtYWxseSAiLnNvIikuCitzaHJleHRfY21kcz0kbHRfc2hyZXh0X2NtZHMKKworIyBUaGUgY29tbWFuZHMgdG8gZXh0cmFjdCB0aGUgZXhwb3J0ZWQgc3ltYm9sIGxpc3QgZnJvbSBhIHNoYXJlZCBhcmNoaXZlLgorZXh0cmFjdF9leHBzeW1zX2NtZHM9JGx0X2V4dHJhY3RfZXhwc3ltc19jbWRzCisKKyMgVmFyaWFibGVzIHdob3NlIHZhbHVlcyBzaG91bGQgYmUgc2F2ZWQgaW4gbGlidG9vbCB3cmFwcGVyIHNjcmlwdHMgYW5kCisjIHJlc3RvcmVkIGF0IGxpbmsgdGltZS4KK3ZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rPSRsdF92YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaworCisjIERvIHdlIG5lZWQgdGhlICJsaWIiIHByZWZpeCBmb3IgbW9kdWxlcz8KK25lZWRfbGliX3ByZWZpeD0kbmVlZF9saWJfcHJlZml4CisKKyMgRG8gd2UgbmVlZCBhIHZlcnNpb24gZm9yIGxpYnJhcmllcz8KK25lZWRfdmVyc2lvbj0kbmVlZF92ZXJzaW9uCisKKyMgTGlicmFyeSB2ZXJzaW9uaW5nIHR5cGUuCit2ZXJzaW9uX3R5cGU9JHZlcnNpb25fdHlwZQorCisjIFNoYXJlZCBsaWJyYXJ5IHJ1bnRpbWUgcGF0aCB2YXJpYWJsZS4KK3J1bnBhdGhfdmFyPSRydW5wYXRoX3ZhcgorCisjIFNoYXJlZCBsaWJyYXJ5IHBhdGggdmFyaWFibGUuCitzaGxpYnBhdGhfdmFyPSRzaGxpYnBhdGhfdmFyCisKKyMgSXMgc2hsaWJwYXRoIHNlYXJjaGVkIGJlZm9yZSB0aGUgaGFyZC1jb2RlZCBsaWJyYXJ5IHNlYXJjaCBwYXRoPworc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPSRzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgKKworIyBGb3JtYXQgb2YgbGlicmFyeSBuYW1lIHByZWZpeC4KK2xpYm5hbWVfc3BlYz0kbHRfbGlibmFtZV9zcGVjCisKKyMgTGlzdCBvZiBhcmNoaXZlIG5hbWVzLiAgRmlyc3QgbmFtZSBpcyB0aGUgcmVhbCBvbmUsIHRoZSByZXN0IGFyZSBsaW5rcy4KKyMgVGhlIGxhc3QgbmFtZSBpcyB0aGUgb25lIHRoYXQgdGhlIGxpbmtlciBmaW5kcyB3aXRoIC1sTkFNRQorbGlicmFyeV9uYW1lc19zcGVjPSRsdF9saWJyYXJ5X25hbWVzX3NwZWMKKworIyBUaGUgY29kZWQgbmFtZSBvZiB0aGUgbGlicmFyeSwgaWYgZGlmZmVyZW50IGZyb20gdGhlIHJlYWwgbmFtZS4KK3NvbmFtZV9zcGVjPSRsdF9zb25hbWVfc3BlYworCisjIENvbW1hbmQgdG8gdXNlIGFmdGVyIGluc3RhbGxhdGlvbiBvZiBhIHNoYXJlZCBhcmNoaXZlLgorcG9zdGluc3RhbGxfY21kcz0kbHRfcG9zdGluc3RhbGxfY21kcworCisjIENvbW1hbmQgdG8gdXNlIGFmdGVyIHVuaW5zdGFsbGF0aW9uIG9mIGEgc2hhcmVkIGFyY2hpdmUuCitwb3N0dW5pbnN0YWxsX2NtZHM9JGx0X3Bvc3R1bmluc3RhbGxfY21kcworCisjIENvbW1hbmRzIHVzZWQgdG8gZmluaXNoIGEgbGlidG9vbCBsaWJyYXJ5IGluc3RhbGxhdGlvbiBpbiBhIGRpcmVjdG9yeS4KK2ZpbmlzaF9jbWRzPSRsdF9maW5pc2hfY21kcworCisjIEFzICJmaW5pc2hfY21kcyIsIGV4Y2VwdCBhIHNpbmdsZSBzY3JpcHQgZnJhZ21lbnQgdG8gYmUgZXZhbGVkIGJ1dAorIyBub3Qgc2hvd24uCitmaW5pc2hfZXZhbD0kbHRfZmluaXNoX2V2YWwKKworIyBXaGV0aGVyIHdlIHNob3VsZCBoYXJkY29kZSBsaWJyYXJ5IHBhdGhzIGludG8gbGlicmFyaWVzLgoraGFyZGNvZGVfaW50b19saWJzPSRoYXJkY29kZV9pbnRvX2xpYnMKKworIyBDb21waWxlLXRpbWUgc3lzdGVtIHNlYXJjaCBwYXRoIGZvciBsaWJyYXJpZXMuCitzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9JGx0X3N5c19saWJfc2VhcmNoX3BhdGhfc3BlYworCisjIFJ1bi10aW1lIHN5c3RlbSBzZWFyY2ggcGF0aCBmb3IgbGlicmFyaWVzLgorc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9JGx0X3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjCisKKyMgV2hldGhlciBkbG9wZW4gaXMgc3VwcG9ydGVkLgorZGxvcGVuX3N1cHBvcnQ9JGVuYWJsZV9kbG9wZW4KKworIyBXaGV0aGVyIGRsb3BlbiBvZiBwcm9ncmFtcyBpcyBzdXBwb3J0ZWQuCitkbG9wZW5fc2VsZj0kZW5hYmxlX2Rsb3Blbl9zZWxmCisKKyMgV2hldGhlciBkbG9wZW4gb2Ygc3RhdGljYWxseSBsaW5rZWQgcHJvZ3JhbXMgaXMgc3VwcG9ydGVkLgorZGxvcGVuX3NlbGZfc3RhdGljPSRlbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljCisKKyMgQ29tbWFuZHMgdG8gc3RyaXAgbGlicmFyaWVzLgorb2xkX3N0cmlwbGliPSRsdF9vbGRfc3RyaXBsaWIKK3N0cmlwbGliPSRsdF9zdHJpcGxpYgorCisKKyMgVGhlIGxpbmtlciB1c2VkIHRvIGJ1aWxkIGxpYnJhcmllcy4KK0xEPSRsdF9MRAorCisjIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYW4gb2xkLXN0eWxlIGFyY2hpdmUuCitvbGRfYXJjaGl2ZV9jbWRzPSRsdF9vbGRfYXJjaGl2ZV9jbWRzCisKKyMgQSBsYW5ndWFnZSBzcGVjaWZpYyBjb21waWxlci4KK0NDPSRsdF9jb21waWxlcgorCisjIElzIHRoZSBjb21waWxlciB0aGUgR05VIGNvbXBpbGVyPword2l0aF9nY2M9JEdDQworCisjIENvbXBpbGVyIGZsYWcgdG8gdHVybiBvZmYgYnVpbHRpbiBmdW5jdGlvbnMuCitub19idWlsdGluX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnCisKKyMgSG93IHRvIHBhc3MgYSBsaW5rZXIgZmxhZyB0aHJvdWdoIHRoZSBjb21waWxlci4KK3dsPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3dsCisKKyMgQWRkaXRpb25hbCBjb21waWxlciBmbGFncyBmb3IgYnVpbGRpbmcgbGlicmFyeSBvYmplY3RzLgorcGljX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfcGljCisKKyMgQ29tcGlsZXIgZmxhZyB0byBwcmV2ZW50IGR5bmFtaWMgbGlua2luZy4KK2xpbmtfc3RhdGljX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfc3RhdGljCisKKyMgRG9lcyBjb21waWxlciBzaW11bHRhbmVvdXNseSBzdXBwb3J0IC1jIGFuZCAtbyBvcHRpb25zPworY29tcGlsZXJfY19vPSRsdF9sdF9jdl9wcm9nX2NvbXBpbGVyX2NfbworCisjIFdoZXRoZXIgb3Igbm90IHRvIGFkZCAtbGMgZm9yIGJ1aWxkaW5nIHNoYXJlZCBsaWJyYXJpZXMuCitidWlsZF9saWJ0b29sX25lZWRfbGM9JGFyY2hpdmVfY21kc19uZWVkX2xjCisKKyMgV2hldGhlciBvciBub3QgdG8gZGlzYWxsb3cgc2hhcmVkIGxpYnMgd2hlbiBydW50aW1lIGxpYnMgYXJlIHN0YXRpYy4KK2FsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcz0kZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcworCisjIENvbXBpbGVyIGZsYWcgdG8gYWxsb3cgcmVmbGV4aXZlIGRsb3BlbnMuCitleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JGx0X2V4cG9ydF9keW5hbWljX2ZsYWdfc3BlYworCisjIENvbXBpbGVyIGZsYWcgdG8gZ2VuZXJhdGUgc2hhcmVkIG9iamVjdHMgZGlyZWN0bHkgZnJvbSBhcmNoaXZlcy4KK3dob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSRsdF93aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYworCisjIFdoZXRoZXIgdGhlIGNvbXBpbGVyIGNvcGVzIHdpdGggcGFzc2luZyBubyBvYmplY3RzIGRpcmVjdGx5LgorY29tcGlsZXJfbmVlZHNfb2JqZWN0PSRsdF9jb21waWxlcl9uZWVkc19vYmplY3QKKworIyBDcmVhdGUgYW4gb2xkLXN0eWxlIGFyY2hpdmUgZnJvbSBhIHNoYXJlZCBhcmNoaXZlLgorb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcz0kbHRfb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcworCisjIENyZWF0ZSBhIHRlbXBvcmFyeSBvbGQtc3R5bGUgYXJjaGl2ZSB0byBsaW5rIGluc3RlYWQgb2YgYSBzaGFyZWQgYXJjaGl2ZS4KK29sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzPSRsdF9vbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcworCisjIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYSBzaGFyZWQgYXJjaGl2ZS4KK2FyY2hpdmVfY21kcz0kbHRfYXJjaGl2ZV9jbWRzCithcmNoaXZlX2V4cHN5bV9jbWRzPSRsdF9hcmNoaXZlX2V4cHN5bV9jbWRzCisKKyMgQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhIGxvYWRhYmxlIG1vZHVsZSBpZiBkaWZmZXJlbnQgZnJvbSBidWlsZGluZworIyBhIHNoYXJlZCBhcmNoaXZlLgorbW9kdWxlX2NtZHM9JGx0X21vZHVsZV9jbWRzCittb2R1bGVfZXhwc3ltX2NtZHM9JGx0X21vZHVsZV9leHBzeW1fY21kcworCisjIFdoZXRoZXIgd2UgYXJlIGJ1aWxkaW5nIHdpdGggR05VIGxkIG9yIG5vdC4KK3dpdGhfZ251X2xkPSRsdF93aXRoX2dudV9sZAorCisjIEZsYWcgdGhhdCBhbGxvd3Mgc2hhcmVkIGxpYnJhcmllcyB3aXRoIHVuZGVmaW5lZCBzeW1ib2xzIHRvIGJlIGJ1aWx0LgorYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JGx0X2FsbG93X3VuZGVmaW5lZF9mbGFnCisKKyMgRmxhZyB0aGF0IGVuZm9yY2VzIG5vIHVuZGVmaW5lZCBzeW1ib2xzLgorbm9fdW5kZWZpbmVkX2ZsYWc9JGx0X25vX3VuZGVmaW5lZF9mbGFnCisKKyMgRmxhZyB0byBoYXJkY29kZSBcJGxpYmRpciBpbnRvIGEgYmluYXJ5IGR1cmluZyBsaW5raW5nLgorIyBUaGlzIG11c3Qgd29yayBldmVuIGlmIFwkbGliZGlyIGRvZXMgbm90IGV4aXN0CitoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSRsdF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjCisKKyMgSWYgbGQgaXMgdXNlZCB3aGVuIGxpbmtpbmcsIGZsYWcgdG8gaGFyZGNvZGUgXCRsaWJkaXIgaW50byBhIGJpbmFyeQorIyBkdXJpbmcgbGlua2luZy4gIFRoaXMgbXVzdCB3b3JrIGV2ZW4gaWYgXCRsaWJkaXIgZG9lcyBub3QgZXhpc3QuCitoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkPSRsdF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkCisKKyMgV2hldGhlciB3ZSBuZWVkIGEgc2luZ2xlICItcnBhdGgiIGZsYWcgd2l0aCBhIHNlcGFyYXRlZCBhcmd1bWVudC4KK2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9JGx0X2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IKKworIyBTZXQgdG8gInllcyIgaWYgdXNpbmcgRElSL2xpYk5BTUVcJHtzaGFyZWRfZXh0fSBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMKKyMgRElSIGludG8gdGhlIHJlc3VsdGluZyBiaW5hcnkuCitoYXJkY29kZV9kaXJlY3Q9JGhhcmRjb2RlX2RpcmVjdAorCisjIFNldCB0byAieWVzIiBpZiB1c2luZyBESVIvbGliTkFNRVwke3NoYXJlZF9leHR9IGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcworIyBESVIgaW50byB0aGUgcmVzdWx0aW5nIGJpbmFyeSBhbmQgdGhlIHJlc3VsdGluZyBsaWJyYXJ5IGRlcGVuZGVuY3kgaXMKKyMgImFic29sdXRlIixpLmUgaW1wb3NzaWJsZSB0byBjaGFuZ2UgYnkgc2V0dGluZyBcJHtzaGxpYnBhdGhfdmFyfSBpZiB0aGUKKyMgbGlicmFyeSBpcyByZWxvY2F0ZWQuCitoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGU9JGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZQorCisjIFNldCB0byAieWVzIiBpZiB1c2luZyB0aGUgLUxESVIgZmxhZyBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSCisjIGludG8gdGhlIHJlc3VsdGluZyBiaW5hcnkuCitoYXJkY29kZV9taW51c19MPSRoYXJkY29kZV9taW51c19MCisKKyMgU2V0IHRvICJ5ZXMiIGlmIHVzaW5nIFNITElCUEFUSF9WQVI9RElSIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIKKyMgaW50byB0aGUgcmVzdWx0aW5nIGJpbmFyeS4KK2hhcmRjb2RlX3NobGlicGF0aF92YXI9JGhhcmRjb2RlX3NobGlicGF0aF92YXIKKworIyBTZXQgdG8gInllcyIgaWYgYnVpbGRpbmcgYSBzaGFyZWQgbGlicmFyeSBhdXRvbWF0aWNhbGx5IGhhcmRjb2RlcyBESVIKKyMgaW50byB0aGUgbGlicmFyeSBhbmQgYWxsIHN1YnNlcXVlbnQgbGlicmFyaWVzIGFuZCBleGVjdXRhYmxlcyBsaW5rZWQKKyMgYWdhaW5zdCBpdC4KK2hhcmRjb2RlX2F1dG9tYXRpYz0kaGFyZGNvZGVfYXV0b21hdGljCisKKyMgU2V0IHRvIHllcyBpZiBsaW5rZXIgYWRkcyBydW50aW1lIHBhdGhzIG9mIGRlcGVuZGVudCBsaWJyYXJpZXMKKyMgdG8gcnVudGltZSBwYXRoIGxpc3QuCitpbmhlcml0X3JwYXRoPSRpbmhlcml0X3JwYXRoCisKKyMgV2hldGhlciBsaWJ0b29sIG11c3QgbGluayBhIHByb2dyYW0gYWdhaW5zdCBhbGwgaXRzIGRlcGVuZGVuY3kgbGlicmFyaWVzLgorbGlua19hbGxfZGVwbGlicz0kbGlua19hbGxfZGVwbGlicworCisjIEZpeCB0aGUgc2hlbGwgdmFyaWFibGUgXCRzcmNmaWxlIGZvciB0aGUgY29tcGlsZXIuCitmaXhfc3JjZmlsZV9wYXRoPSRsdF9maXhfc3JjZmlsZV9wYXRoCisKKyMgU2V0IHRvICJ5ZXMiIGlmIGV4cG9ydGVkIHN5bWJvbHMgYXJlIHJlcXVpcmVkLgorYWx3YXlzX2V4cG9ydF9zeW1ib2xzPSRhbHdheXNfZXhwb3J0X3N5bWJvbHMKKworIyBUaGUgY29tbWFuZHMgdG8gbGlzdCBleHBvcnRlZCBzeW1ib2xzLgorZXhwb3J0X3N5bWJvbHNfY21kcz0kbHRfZXhwb3J0X3N5bWJvbHNfY21kcworCisjIFN5bWJvbHMgdGhhdCBzaG91bGQgbm90IGJlIGxpc3RlZCBpbiB0aGUgcHJlbG9hZGVkIHN5bWJvbHMuCitleGNsdWRlX2V4cHN5bXM9JGx0X2V4Y2x1ZGVfZXhwc3ltcworCisjIFN5bWJvbHMgdGhhdCBtdXN0IGFsd2F5cyBiZSBleHBvcnRlZC4KK2luY2x1ZGVfZXhwc3ltcz0kbHRfaW5jbHVkZV9leHBzeW1zCisKKyMgQ29tbWFuZHMgbmVjZXNzYXJ5IGZvciBsaW5raW5nIHByb2dyYW1zIChhZ2FpbnN0IGxpYnJhcmllcykgd2l0aCB0ZW1wbGF0ZXMuCitwcmVsaW5rX2NtZHM9JGx0X3ByZWxpbmtfY21kcworCisjIFNwZWNpZnkgZmlsZW5hbWUgY29udGFpbmluZyBpbnB1dCBmaWxlcy4KK2ZpbGVfbGlzdF9zcGVjPSRsdF9maWxlX2xpc3Rfc3BlYworCisjIEhvdyB0byBoYXJkY29kZSBhIHNoYXJlZCBsaWJyYXJ5IHBhdGggaW50byBhbiBleGVjdXRhYmxlLgoraGFyZGNvZGVfYWN0aW9uPSRoYXJkY29kZV9hY3Rpb24KKworIyBUaGUgZGlyZWN0b3JpZXMgc2VhcmNoZWQgYnkgdGhpcyBjb21waWxlciB3aGVuIGNyZWF0aW5nIGEgc2hhcmVkIGxpYnJhcnkuCitjb21waWxlcl9saWJfc2VhcmNoX2RpcnM9JGx0X2NvbXBpbGVyX2xpYl9zZWFyY2hfZGlycworCisjIERlcGVuZGVuY2llcyB0byBwbGFjZSBiZWZvcmUgYW5kIGFmdGVyIHRoZSBvYmplY3RzIGJlaW5nIGxpbmtlZCB0bworIyBjcmVhdGUgYSBzaGFyZWQgbGlicmFyeS4KK3ByZWRlcF9vYmplY3RzPSRsdF9wcmVkZXBfb2JqZWN0cworcG9zdGRlcF9vYmplY3RzPSRsdF9wb3N0ZGVwX29iamVjdHMKK3ByZWRlcHM9JGx0X3ByZWRlcHMKK3Bvc3RkZXBzPSRsdF9wb3N0ZGVwcworCisjIFRoZSBsaWJyYXJ5IHNlYXJjaCBwYXRoIHVzZWQgaW50ZXJuYWxseSBieSB0aGUgY29tcGlsZXIgd2hlbiBsaW5raW5nCisjIGEgc2hhcmVkIGxpYnJhcnkuCitjb21waWxlcl9saWJfc2VhcmNoX3BhdGg9JGx0X2NvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aAorCisjICMjIyBFTkQgTElCVE9PTCBDT05GSUcKKworX0xUX0VPRgorCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgYWl4MyopCisgICAgY2F0IDw8XF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorIyBBSVggc29tZXRpbWVzIGhhcyBwcm9ibGVtcyB3aXRoIHRoZSBHQ0MgY29sbGVjdDIgcHJvZ3JhbS4gIEZvciBzb21lCisjIHJlYXNvbiwgaWYgd2Ugc2V0IHRoZSBDT0xMRUNUX05BTUVTIGVudmlyb25tZW50IHZhcmlhYmxlLCB0aGUgcHJvYmxlbXMKKyMgdmFuaXNoIGluIGEgcHVmZiBvZiBzbW9rZS4KK2lmIHRlc3QgIlgke0NPTExFQ1RfTkFNRVMrc2V0fSIgIT0gWHNldDsgdGhlbgorICBDT0xMRUNUX05BTUVTPQorICBleHBvcnQgQ09MTEVDVF9OQU1FUworZmkKK19MVF9FT0YKKyAgICA7OworICBlc2FjCisKKworbHRtYWluPSIkYWNfYXV4X2Rpci9sdG1haW4uc2giCisKKworICAjIFdlIHVzZSBzZWQgaW5zdGVhZCBvZiBjYXQgYmVjYXVzZSBiYXNoIG9uIERKR1BQIGdldHMgY29uZnVzZWQgaWYKKyAgIyBpZiBmaW5kcyBtaXhlZCBDUi9MRiBhbmQgTEYtb25seSBsaW5lcy4gIFNpbmNlIHNlZCBvcGVyYXRlcyBpbgorICAjIHRleHQgbW9kZSwgaXQgcHJvcGVybHkgY29udmVydHMgbGluZXMgdG8gQ1IvTEYuICBUaGlzIGJhc2ggcHJvYmxlbQorICAjIGlzIHJlcG9ydGVkbHkgZml4ZWQsIGJ1dCB3aHkgbm90IHJ1biBvbiBvbGQgdmVyc2lvbnMgdG9vPworICBzZWQgJy9eIyBHZW5lcmF0ZWQgc2hlbGwgZnVuY3Rpb25zIGluc2VydGVkIGhlcmUvcScgIiRsdG1haW4iID4+ICIkY2ZnZmlsZSIgXAorICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiOyBleGl0IDEpCisKKyAgY2FzZSAkeHNpX3NoZWxsIGluCisgIHllcykKKyAgICBjYXQgPDwgXF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorCisjIGZ1bmNfZGlybmFtZSBmaWxlIGFwcGVuZCBub25kaXJfcmVwbGFjZW1lbnQKKyMgQ29tcHV0ZSB0aGUgZGlybmFtZSBvZiBGSUxFLiAgSWYgbm9uZW1wdHksIGFkZCBBUFBFTkQgdG8gdGhlIHJlc3VsdCwKKyMgb3RoZXJ3aXNlIHNldCByZXN1bHQgdG8gTk9ORElSX1JFUExBQ0VNRU5ULgorZnVuY19kaXJuYW1lICgpCit7CisgIGNhc2UgJHsxfSBpbgorICAgICovKikgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHsxJS8qfSR7Mn0iIDs7CisgICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IiA7OworICBlc2FjCit9CisKKyMgZnVuY19iYXNlbmFtZSBmaWxlCitmdW5jX2Jhc2VuYW1lICgpCit7CisgIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PSIkezEjIyovfSIKK30KKworIyBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lIGZpbGUgYXBwZW5kIG5vbmRpcl9yZXBsYWNlbWVudAorIyBwZXJmb3JtIGZ1bmNfYmFzZW5hbWUgYW5kIGZ1bmNfZGlybmFtZSBpbiBhIHNpbmdsZSBmdW5jdGlvbgorIyBjYWxsOgorIyAgIGRpcm5hbWU6ICBDb21wdXRlIHRoZSBkaXJuYW1lIG9mIEZJTEUuICBJZiBub25lbXB0eSwKKyMgICAgICAgICAgICAgYWRkIEFQUEVORCB0byB0aGUgcmVzdWx0LCBvdGhlcndpc2Ugc2V0IHJlc3VsdAorIyAgICAgICAgICAgICB0byBOT05ESVJfUkVQTEFDRU1FTlQuCisjICAgICAgICAgICAgIHZhbHVlIHJldHVybmVkIGluICIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKKyMgICBiYXNlbmFtZTogQ29tcHV0ZSBmaWxlbmFtZSBvZiBGSUxFLgorIyAgICAgICAgICAgICB2YWx1ZSByZXR1bmVkIGluICIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisjIEltcGxlbWVudGF0aW9uIG11c3QgYmUga2VwdCBzeW5jaHJvbml6ZWQgd2l0aCBmdW5jX2Rpcm5hbWUKKyMgYW5kIGZ1bmNfYmFzZW5hbWUuIEZvciBlZmZpY2llbmN5LCB3ZSBkbyBub3QgZGVsZWdhdGUgdG8KKyMgdGhvc2UgZnVuY3Rpb25zIGJ1dCBpbnN0ZWFkIGR1cGxpY2F0ZSB0aGUgZnVuY3Rpb25hbGl0eSBoZXJlLgorZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAoKQoreworICBjYXNlICR7MX0gaW4KKyAgICAqLyopIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7MSUvKn0kezJ9IiA7OworICAgICogICkgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIgOzsKKyAgZXNhYworICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0iJHsxIyMqL30iCit9CisKKyMgZnVuY19zdHJpcG5hbWUgcHJlZml4IHN1ZmZpeCBuYW1lCisjIHN0cmlwIFBSRUZJWCBhbmQgU1VGRklYIG9mZiBvZiBOQU1FLgorIyBQUkVGSVggYW5kIFNVRkZJWCBtdXN0IG5vdCBjb250YWluIGdsb2JiaW5nIG9yIHJlZ2V4IHNwZWNpYWwKKyMgY2hhcmFjdGVycywgaGFzaGVzLCBwZXJjZW50IHNpZ25zLCBidXQgU1VGRklYIG1heSBjb250YWluIGEgbGVhZGluZworIyBkb3QgKGluIHdoaWNoIGNhc2UgdGhhdCBtYXRjaGVzIG9ubHkgYSBkb3QpLgorZnVuY19zdHJpcG5hbWUgKCkKK3sKKyAgIyBwZGtzaCA1LjIuMTQgZG9lcyBub3QgZG8gJHtYJSRZfSBjb3JyZWN0bHkgaWYgYm90aCBYIGFuZCBZIGFyZQorICAjIHBvc2l0aW9uYWwgcGFyYW1ldGVycywgc28gYXNzaWduIG9uZSB0byBvcmRpbmFyeSBwYXJhbWV0ZXIgZmlyc3QuCisgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0kezN9CisgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCMiJHsxfSJ9CisgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCUiJHsyfSJ9Cit9CisKKyMgZnVuY19vcHRfc3BsaXQKK2Z1bmNfb3B0X3NwbGl0ICgpCit7CisgIGZ1bmNfb3B0X3NwbGl0X29wdD0kezElJT0qfQorICBmdW5jX29wdF9zcGxpdF9hcmc9JHsxIyo9fQorfQorCisjIGZ1bmNfbG8ybyBvYmplY3QKK2Z1bmNfbG8ybyAoKQoreworICBjYXNlICR7MX0gaW4KKyAgICAqLmxvKSBmdW5jX2xvMm9fcmVzdWx0PSR7MSUubG99LiR7b2JqZXh0fSA7OworICAgICopICAgIGZ1bmNfbG8yb19yZXN1bHQ9JHsxfSA7OworICBlc2FjCit9CisKKyMgZnVuY194Zm9ybSBsaWJvYmotb3Itc291cmNlCitmdW5jX3hmb3JtICgpCit7CisgIGZ1bmNfeGZvcm1fcmVzdWx0PSR7MSUuKn0ubG8KK30KKworIyBmdW5jX2FyaXRoIGFyaXRobWV0aWMtdGVybS4uLgorZnVuY19hcml0aCAoKQoreworICBmdW5jX2FyaXRoX3Jlc3VsdD0kKCggJCogKSkKK30KKworIyBmdW5jX2xlbiBzdHJpbmcKKyMgU1RSSU5HIG1heSBub3Qgc3RhcnQgd2l0aCBhIGh5cGhlbi4KK2Z1bmNfbGVuICgpCit7CisgIGZ1bmNfbGVuX3Jlc3VsdD0keyMxfQorfQorCitfTFRfRU9GCisgICAgOzsKKyAgKikgIyBCb3VybmUgY29tcGF0aWJsZSBmdW5jdGlvbnMuCisgICAgY2F0IDw8IFxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKworIyBmdW5jX2Rpcm5hbWUgZmlsZSBhcHBlbmQgbm9uZGlyX3JlcGxhY2VtZW50CisjIENvbXB1dGUgdGhlIGRpcm5hbWUgb2YgRklMRS4gIElmIG5vbmVtcHR5LCBhZGQgQVBQRU5EIHRvIHRoZSByZXN1bHQsCisjIG90aGVyd2lzZSBzZXQgcmVzdWx0IHRvIE5PTkRJUl9SRVBMQUNFTUVOVC4KK2Z1bmNfZGlybmFtZSAoKQoreworICAjIEV4dHJhY3Qgc3ViZGlyZWN0b3J5IGZyb20gdGhlIGFyZ3VtZW50LgorICBmdW5jX2Rpcm5hbWVfcmVzdWx0PWAkRUNITyAiWCR7MX0iIHwgJFhzZWQgLWUgIiRkaXJuYW1lImAKKyAgaWYgdGVzdCAiWCRmdW5jX2Rpcm5hbWVfcmVzdWx0IiA9ICJYJHsxfSI7IHRoZW4KKyAgICBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IgorICBlbHNlCisgICAgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJGZ1bmNfZGlybmFtZV9yZXN1bHQkezJ9IgorICBmaQorfQorCisjIGZ1bmNfYmFzZW5hbWUgZmlsZQorZnVuY19iYXNlbmFtZSAoKQoreworICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD1gJEVDSE8gIlgkezF9IiB8ICRYc2VkIC1lICIkYmFzZW5hbWUiYAorfQorCisKKyMgZnVuY19zdHJpcG5hbWUgcHJlZml4IHN1ZmZpeCBuYW1lCisjIHN0cmlwIFBSRUZJWCBhbmQgU1VGRklYIG9mZiBvZiBOQU1FLgorIyBQUkVGSVggYW5kIFNVRkZJWCBtdXN0IG5vdCBjb250YWluIGdsb2JiaW5nIG9yIHJlZ2V4IHNwZWNpYWwKKyMgY2hhcmFjdGVycywgaGFzaGVzLCBwZXJjZW50IHNpZ25zLCBidXQgU1VGRklYIG1heSBjb250YWluIGEgbGVhZGluZworIyBkb3QgKGluIHdoaWNoIGNhc2UgdGhhdCBtYXRjaGVzIG9ubHkgYSBkb3QpLgorIyBmdW5jX3N0cmlwX3N1ZmZpeCBwcmVmaXggbmFtZQorZnVuY19zdHJpcG5hbWUgKCkKK3sKKyAgY2FzZSAkezJ9IGluCisgICAgLiopIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD1gJEVDSE8gIlgkezN9IiBcCisgICAgICAgICAgIHwgJFhzZWQgLWUgInMlXiR7MX0lJSIgLWUgInMlXFxcXCR7Mn1cJCUlImA7OworICAgICopICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9YCRFQ0hPICJYJHszfSIgXAorICAgICAgICAgICB8ICRYc2VkIC1lICJzJV4kezF9JSUiIC1lICJzJSR7Mn1cJCUlImA7OworICBlc2FjCit9CisKKyMgc2VkIHNjcmlwdHM6CitteV9zZWRfbG9uZ19vcHQ9JzFzL15cKC1bXj1dKlwpPS4qL1wxLztxJworbXlfc2VkX2xvbmdfYXJnPScxcy9eLVtePV0qPS8vJworCisjIGZ1bmNfb3B0X3NwbGl0CitmdW5jX29wdF9zcGxpdCAoKQoreworICBmdW5jX29wdF9zcGxpdF9vcHQ9YCRFQ0hPICJYJHsxfSIgfCAkWHNlZCAtZSAiJG15X3NlZF9sb25nX29wdCJgCisgIGZ1bmNfb3B0X3NwbGl0X2FyZz1gJEVDSE8gIlgkezF9IiB8ICRYc2VkIC1lICIkbXlfc2VkX2xvbmdfYXJnImAKK30KKworIyBmdW5jX2xvMm8gb2JqZWN0CitmdW5jX2xvMm8gKCkKK3sKKyAgZnVuY19sbzJvX3Jlc3VsdD1gJEVDSE8gIlgkezF9IiB8ICRYc2VkIC1lICIkbG8ybyJgCit9CisKKyMgZnVuY194Zm9ybSBsaWJvYmotb3Itc291cmNlCitmdW5jX3hmb3JtICgpCit7CisgIGZ1bmNfeGZvcm1fcmVzdWx0PWAkRUNITyAiWCR7MX0iIHwgJFhzZWQgLWUgJ3MvXC5bXi5dKiQvLmxvLydgCit9CisKKyMgZnVuY19hcml0aCBhcml0aG1ldGljLXRlcm0uLi4KK2Z1bmNfYXJpdGggKCkKK3sKKyAgZnVuY19hcml0aF9yZXN1bHQ9YGV4cHIgIiRAImAKK30KKworIyBmdW5jX2xlbiBzdHJpbmcKKyMgU1RSSU5HIG1heSBub3Qgc3RhcnQgd2l0aCBhIGh5cGhlbi4KK2Z1bmNfbGVuICgpCit7CisgIGZ1bmNfbGVuX3Jlc3VsdD1gZXhwciAiJDEiIDogIi4qIiAyPi9kZXYvbnVsbCB8fCBlY2hvICRtYXhfY21kX2xlbmAKK30KKworX0xUX0VPRgorZXNhYworCitjYXNlICRsdF9zaGVsbF9hcHBlbmQgaW4KKyAgeWVzKQorICAgIGNhdCA8PCBcX0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCisKKyMgZnVuY19hcHBlbmQgdmFyIHZhbHVlCisjIEFwcGVuZCBWQUxVRSB0byB0aGUgZW5kIG9mIHNoZWxsIHZhcmlhYmxlIFZBUi4KK2Z1bmNfYXBwZW5kICgpCit7CisgIGV2YWwgIiQxKz1cJDIiCit9CitfTFRfRU9GCisgICAgOzsKKyAgKikKKyAgICBjYXQgPDwgXF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorCisjIGZ1bmNfYXBwZW5kIHZhciB2YWx1ZQorIyBBcHBlbmQgVkFMVUUgdG8gdGhlIGVuZCBvZiBzaGVsbCB2YXJpYWJsZSBWQVIuCitmdW5jX2FwcGVuZCAoKQoreworICBldmFsICIkMT1cJCQxXCQyIgorfQorCitfTFRfRU9GCisgICAgOzsKKyAgZXNhYworCisKKyAgc2VkIC1uICcvXiMgR2VuZXJhdGVkIHNoZWxsIGZ1bmN0aW9ucyBpbnNlcnRlZCBoZXJlLywkcCcgIiRsdG1haW4iID4+ICIkY2ZnZmlsZSIgXAorICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiOyBleGl0IDEpCisKKyAgbXYgLWYgIiRjZmdmaWxlIiAiJG9maWxlIiB8fAorICAgIChybSAtZiAiJG9maWxlIiAmJiBjcCAiJGNmZ2ZpbGUiICIkb2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZSIpCisgIGNobW9kICt4ICIkb2ZpbGUiCisKKworICAgIGNhdCA8PF9MVF9FT0YgPj4gIiRvZmlsZSIKKworIyAjIyMgQkVHSU4gTElCVE9PTCBUQUcgQ09ORklHOiBDWFgKKworIyBUaGUgbGlua2VyIHVzZWQgdG8gYnVpbGQgbGlicmFyaWVzLgorTEQ9JGx0X0xEX0NYWAorCisjIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYW4gb2xkLXN0eWxlIGFyY2hpdmUuCitvbGRfYXJjaGl2ZV9jbWRzPSRsdF9vbGRfYXJjaGl2ZV9jbWRzX0NYWAorCisjIEEgbGFuZ3VhZ2Ugc3BlY2lmaWMgY29tcGlsZXIuCitDQz0kbHRfY29tcGlsZXJfQ1hYCisKKyMgSXMgdGhlIGNvbXBpbGVyIHRoZSBHTlUgY29tcGlsZXI/Cit3aXRoX2djYz0kR0NDX0NYWAorCisjIENvbXBpbGVyIGZsYWcgdG8gdHVybiBvZmYgYnVpbHRpbiBmdW5jdGlvbnMuCitub19idWlsdGluX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnX0NYWAorCisjIEhvdyB0byBwYXNzIGEgbGlua2VyIGZsYWcgdGhyb3VnaCB0aGUgY29tcGlsZXIuCit3bD0kbHRfbHRfcHJvZ19jb21waWxlcl93bF9DWFgKKworIyBBZGRpdGlvbmFsIGNvbXBpbGVyIGZsYWdzIGZvciBidWlsZGluZyBsaWJyYXJ5IG9iamVjdHMuCitwaWNfZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYCisKKyMgQ29tcGlsZXIgZmxhZyB0byBwcmV2ZW50IGR5bmFtaWMgbGlua2luZy4KK2xpbmtfc3RhdGljX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWAorCisjIERvZXMgY29tcGlsZXIgc2ltdWx0YW5lb3VzbHkgc3VwcG9ydCAtYyBhbmQgLW8gb3B0aW9ucz8KK2NvbXBpbGVyX2Nfbz0kbHRfbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fQ1hYCisKKyMgV2hldGhlciBvciBub3QgdG8gYWRkIC1sYyBmb3IgYnVpbGRpbmcgc2hhcmVkIGxpYnJhcmllcy4KK2J1aWxkX2xpYnRvb2xfbmVlZF9sYz0kYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYCisKKyMgV2hldGhlciBvciBub3QgdG8gZGlzYWxsb3cgc2hhcmVkIGxpYnMgd2hlbiBydW50aW1lIGxpYnMgYXJlIHN0YXRpYy4KK2FsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcz0kZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lc19DWFgKKworIyBDb21waWxlciBmbGFnIHRvIGFsbG93IHJlZmxleGl2ZSBkbG9wZW5zLgorZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPSRsdF9leHBvcnRfZHluYW1pY19mbGFnX3NwZWNfQ1hYCisKKyMgQ29tcGlsZXIgZmxhZyB0byBnZW5lcmF0ZSBzaGFyZWQgb2JqZWN0cyBkaXJlY3RseSBmcm9tIGFyY2hpdmVzLgord2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9JGx0X3dob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWAorCisjIFdoZXRoZXIgdGhlIGNvbXBpbGVyIGNvcGVzIHdpdGggcGFzc2luZyBubyBvYmplY3RzIGRpcmVjdGx5LgorY29tcGlsZXJfbmVlZHNfb2JqZWN0PSRsdF9jb21waWxlcl9uZWVkc19vYmplY3RfQ1hYCisKKyMgQ3JlYXRlIGFuIG9sZC1zdHlsZSBhcmNoaXZlIGZyb20gYSBzaGFyZWQgYXJjaGl2ZS4KK29sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHM9JGx0X29sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHNfQ1hYCisKKyMgQ3JlYXRlIGEgdGVtcG9yYXJ5IG9sZC1zdHlsZSBhcmNoaXZlIHRvIGxpbmsgaW5zdGVhZCBvZiBhIHNoYXJlZCBhcmNoaXZlLgorb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHM9JGx0X29sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzX0NYWAorCisjIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYSBzaGFyZWQgYXJjaGl2ZS4KK2FyY2hpdmVfY21kcz0kbHRfYXJjaGl2ZV9jbWRzX0NYWAorYXJjaGl2ZV9leHBzeW1fY21kcz0kbHRfYXJjaGl2ZV9leHBzeW1fY21kc19DWFgKKworIyBDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGEgbG9hZGFibGUgbW9kdWxlIGlmIGRpZmZlcmVudCBmcm9tIGJ1aWxkaW5nCisjIGEgc2hhcmVkIGFyY2hpdmUuCittb2R1bGVfY21kcz0kbHRfbW9kdWxlX2NtZHNfQ1hYCittb2R1bGVfZXhwc3ltX2NtZHM9JGx0X21vZHVsZV9leHBzeW1fY21kc19DWFgKKworIyBXaGV0aGVyIHdlIGFyZSBidWlsZGluZyB3aXRoIEdOVSBsZCBvciBub3QuCit3aXRoX2dudV9sZD0kbHRfd2l0aF9nbnVfbGRfQ1hYCisKKyMgRmxhZyB0aGF0IGFsbG93cyBzaGFyZWQgbGlicmFyaWVzIHdpdGggdW5kZWZpbmVkIHN5bWJvbHMgdG8gYmUgYnVpbHQuCithbGxvd191bmRlZmluZWRfZmxhZz0kbHRfYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYCisKKyMgRmxhZyB0aGF0IGVuZm9yY2VzIG5vIHVuZGVmaW5lZCBzeW1ib2xzLgorbm9fdW5kZWZpbmVkX2ZsYWc9JGx0X25vX3VuZGVmaW5lZF9mbGFnX0NYWAorCisjIEZsYWcgdG8gaGFyZGNvZGUgXCRsaWJkaXIgaW50byBhIGJpbmFyeSBkdXJpbmcgbGlua2luZy4KKyMgVGhpcyBtdXN0IHdvcmsgZXZlbiBpZiBcJGxpYmRpciBkb2VzIG5vdCBleGlzdAoraGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0kbHRfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFgKKworIyBJZiBsZCBpcyB1c2VkIHdoZW4gbGlua2luZywgZmxhZyB0byBoYXJkY29kZSBcJGxpYmRpciBpbnRvIGEgYmluYXJ5CisjIGR1cmluZyBsaW5raW5nLiAgVGhpcyBtdXN0IHdvcmsgZXZlbiBpZiBcJGxpYmRpciBkb2VzIG5vdCBleGlzdC4KK2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQ9JGx0X2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGRfQ1hYCisKKyMgV2hldGhlciB3ZSBuZWVkIGEgc2luZ2xlICItcnBhdGgiIGZsYWcgd2l0aCBhIHNlcGFyYXRlZCBhcmd1bWVudC4KK2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9JGx0X2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYCisKKyMgU2V0IHRvICJ5ZXMiIGlmIHVzaW5nIERJUi9saWJOQU1FXCR7c2hhcmVkX2V4dH0gZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzCisjIERJUiBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5LgoraGFyZGNvZGVfZGlyZWN0PSRoYXJkY29kZV9kaXJlY3RfQ1hYCisKKyMgU2V0IHRvICJ5ZXMiIGlmIHVzaW5nIERJUi9saWJOQU1FXCR7c2hhcmVkX2V4dH0gZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzCisjIERJUiBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5IGFuZCB0aGUgcmVzdWx0aW5nIGxpYnJhcnkgZGVwZW5kZW5jeSBpcworIyAiYWJzb2x1dGUiLGkuZSBpbXBvc3NpYmxlIHRvIGNoYW5nZSBieSBzZXR0aW5nIFwke3NobGlicGF0aF92YXJ9IGlmIHRoZQorIyBsaWJyYXJ5IGlzIHJlbG9jYXRlZC4KK2hhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZT0kaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlX0NYWAorCisjIFNldCB0byAieWVzIiBpZiB1c2luZyB0aGUgLUxESVIgZmxhZyBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSCisjIGludG8gdGhlIHJlc3VsdGluZyBiaW5hcnkuCitoYXJkY29kZV9taW51c19MPSRoYXJkY29kZV9taW51c19MX0NYWAorCisjIFNldCB0byAieWVzIiBpZiB1c2luZyBTSExJQlBBVEhfVkFSPURJUiBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSCisjIGludG8gdGhlIHJlc3VsdGluZyBiaW5hcnkuCitoYXJkY29kZV9zaGxpYnBhdGhfdmFyPSRoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0NYWAorCisjIFNldCB0byAieWVzIiBpZiBidWlsZGluZyBhIHNoYXJlZCBsaWJyYXJ5IGF1dG9tYXRpY2FsbHkgaGFyZGNvZGVzIERJUgorIyBpbnRvIHRoZSBsaWJyYXJ5IGFuZCBhbGwgc3Vic2VxdWVudCBsaWJyYXJpZXMgYW5kIGV4ZWN1dGFibGVzIGxpbmtlZAorIyBhZ2FpbnN0IGl0LgoraGFyZGNvZGVfYXV0b21hdGljPSRoYXJkY29kZV9hdXRvbWF0aWNfQ1hYCisKKyMgU2V0IHRvIHllcyBpZiBsaW5rZXIgYWRkcyBydW50aW1lIHBhdGhzIG9mIGRlcGVuZGVudCBsaWJyYXJpZXMKKyMgdG8gcnVudGltZSBwYXRoIGxpc3QuCitpbmhlcml0X3JwYXRoPSRpbmhlcml0X3JwYXRoX0NYWAorCisjIFdoZXRoZXIgbGlidG9vbCBtdXN0IGxpbmsgYSBwcm9ncmFtIGFnYWluc3QgYWxsIGl0cyBkZXBlbmRlbmN5IGxpYnJhcmllcy4KK2xpbmtfYWxsX2RlcGxpYnM9JGxpbmtfYWxsX2RlcGxpYnNfQ1hYCisKKyMgRml4IHRoZSBzaGVsbCB2YXJpYWJsZSBcJHNyY2ZpbGUgZm9yIHRoZSBjb21waWxlci4KK2ZpeF9zcmNmaWxlX3BhdGg9JGx0X2ZpeF9zcmNmaWxlX3BhdGhfQ1hYCisKKyMgU2V0IHRvICJ5ZXMiIGlmIGV4cG9ydGVkIHN5bWJvbHMgYXJlIHJlcXVpcmVkLgorYWx3YXlzX2V4cG9ydF9zeW1ib2xzPSRhbHdheXNfZXhwb3J0X3N5bWJvbHNfQ1hYCisKKyMgVGhlIGNvbW1hbmRzIHRvIGxpc3QgZXhwb3J0ZWQgc3ltYm9scy4KK2V4cG9ydF9zeW1ib2xzX2NtZHM9JGx0X2V4cG9ydF9zeW1ib2xzX2NtZHNfQ1hYCisKKyMgU3ltYm9scyB0aGF0IHNob3VsZCBub3QgYmUgbGlzdGVkIGluIHRoZSBwcmVsb2FkZWQgc3ltYm9scy4KK2V4Y2x1ZGVfZXhwc3ltcz0kbHRfZXhjbHVkZV9leHBzeW1zX0NYWAorCisjIFN5bWJvbHMgdGhhdCBtdXN0IGFsd2F5cyBiZSBleHBvcnRlZC4KK2luY2x1ZGVfZXhwc3ltcz0kbHRfaW5jbHVkZV9leHBzeW1zX0NYWAorCisjIENvbW1hbmRzIG5lY2Vzc2FyeSBmb3IgbGlua2luZyBwcm9ncmFtcyAoYWdhaW5zdCBsaWJyYXJpZXMpIHdpdGggdGVtcGxhdGVzLgorcHJlbGlua19jbWRzPSRsdF9wcmVsaW5rX2NtZHNfQ1hYCisKKyMgU3BlY2lmeSBmaWxlbmFtZSBjb250YWluaW5nIGlucHV0IGZpbGVzLgorZmlsZV9saXN0X3NwZWM9JGx0X2ZpbGVfbGlzdF9zcGVjX0NYWAorCisjIEhvdyB0byBoYXJkY29kZSBhIHNoYXJlZCBsaWJyYXJ5IHBhdGggaW50byBhbiBleGVjdXRhYmxlLgoraGFyZGNvZGVfYWN0aW9uPSRoYXJkY29kZV9hY3Rpb25fQ1hYCisKKyMgVGhlIGRpcmVjdG9yaWVzIHNlYXJjaGVkIGJ5IHRoaXMgY29tcGlsZXIgd2hlbiBjcmVhdGluZyBhIHNoYXJlZCBsaWJyYXJ5LgorY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzPSRsdF9jb21waWxlcl9saWJfc2VhcmNoX2RpcnNfQ1hYCisKKyMgRGVwZW5kZW5jaWVzIHRvIHBsYWNlIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIG9iamVjdHMgYmVpbmcgbGlua2VkIHRvCisjIGNyZWF0ZSBhIHNoYXJlZCBsaWJyYXJ5LgorcHJlZGVwX29iamVjdHM9JGx0X3ByZWRlcF9vYmplY3RzX0NYWAorcG9zdGRlcF9vYmplY3RzPSRsdF9wb3N0ZGVwX29iamVjdHNfQ1hYCitwcmVkZXBzPSRsdF9wcmVkZXBzX0NYWAorcG9zdGRlcHM9JGx0X3Bvc3RkZXBzX0NYWAorCisjIFRoZSBsaWJyYXJ5IHNlYXJjaCBwYXRoIHVzZWQgaW50ZXJuYWxseSBieSB0aGUgY29tcGlsZXIgd2hlbiBsaW5raW5nCisjIGEgc2hhcmVkIGxpYnJhcnkuCitjb21waWxlcl9saWJfc2VhcmNoX3BhdGg9JGx0X2NvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aF9DWFgKKworIyAjIyMgRU5EIExJQlRPT0wgVEFHIENPTkZJRzogQ1hYCitfTFRfRU9GCisKKyA7OworCisgIGVzYWMKK2RvbmUgIyBmb3IgYWNfdGFnCisKKworYXNfZm5fZXhpdCAwCitfQUNFT0YKK2FjX2NsZWFuX2ZpbGVzPSRhY19jbGVhbl9maWxlc19zYXZlCisKK3Rlc3QgJGFjX3dyaXRlX2ZhaWwgPSAwIHx8CisgIGFzX2ZuX2Vycm9yICQ/ICJ3cml0ZSBmYWlsdXJlIGNyZWF0aW5nICRDT05GSUdfU1RBVFVTIiAiJExJTkVOTyIgNQorCisKKyMgY29uZmlndXJlIGlzIHdyaXRpbmcgdG8gY29uZmlnLmxvZywgYW5kIHRoZW4gY2FsbHMgY29uZmlnLnN0YXR1cy4KKyMgY29uZmlnLnN0YXR1cyBkb2VzIGl0cyBvd24gcmVkaXJlY3Rpb24sIGFwcGVuZGluZyB0byBjb25maWcubG9nLgorIyBVbmZvcnR1bmF0ZWx5LCBvbiBET1MgdGhpcyBmYWlscywgYXMgY29uZmlnLmxvZyBpcyBzdGlsbCBrZXB0IG9wZW4KKyMgYnkgY29uZmlndXJlLCBzbyBjb25maWcuc3RhdHVzIHdvbid0IGJlIGFibGUgdG8gd3JpdGUgdG8gaXQ7IGl0cworIyBvdXRwdXQgaXMgc2ltcGx5IGRpc2NhcmRlZC4gIFNvIHdlIGV4ZWMgdGhlIEZEIHRvIC9kZXYvbnVsbCwKKyMgZWZmZWN0aXZlbHkgY2xvc2luZyBjb25maWcubG9nLCBzbyBpdCBjYW4gYmUgcHJvcGVybHkgKHJlKW9wZW5lZCBhbmQKKyMgYXBwZW5kZWQgdG8gYnkgY29uZmlnLnN0YXR1cy4gIFdoZW4gY29taW5nIGJhY2sgdG8gY29uZmlndXJlLCB3ZQorIyBuZWVkIHRvIG1ha2UgdGhlIEZEIGF2YWlsYWJsZSBhZ2Fpbi4KK2lmIHRlc3QgIiRub19jcmVhdGUiICE9IHllczsgdGhlbgorICBhY19jc19zdWNjZXNzPToKKyAgYWNfY29uZmlnX3N0YXR1c19hcmdzPQorICB0ZXN0ICIkc2lsZW50IiA9IHllcyAmJgorICAgIGFjX2NvbmZpZ19zdGF0dXNfYXJncz0iJGFjX2NvbmZpZ19zdGF0dXNfYXJncyAtLXF1aWV0IgorICBleGVjIDU+L2Rldi9udWxsCisgICRTSEVMTCAkQ09ORklHX1NUQVRVUyAkYWNfY29uZmlnX3N0YXR1c19hcmdzIHx8IGFjX2NzX3N1Y2Nlc3M9ZmFsc2UKKyAgZXhlYyA1Pj5jb25maWcubG9nCisgICMgVXNlIHx8LCBub3QgJiYsIHRvIGF2b2lkIGV4aXRpbmcgZnJvbSB0aGUgaWYgd2l0aCAkPyA9IDEsIHdoaWNoCisgICMgd291bGQgbWFrZSBjb25maWd1cmUgZmFpbCBpZiB0aGlzIGlzIHRoZSBsYXN0IGluc3RydWN0aW9uLgorICAkYWNfY3Nfc3VjY2VzcyB8fCBhc19mbl9leGl0IDEKK2ZpCitpZiB0ZXN0IC1uICIkYWNfdW5yZWNvZ25pemVkX29wdHMiICYmIHRlc3QgIiRlbmFibGVfb3B0aW9uX2NoZWNraW5nIiAhPSBubzsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVucmVjb2duaXplZCBvcHRpb25zOiAkYWNfdW5yZWNvZ25pemVkX29wdHMiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdW5yZWNvZ25pemVkIG9wdGlvbnM6ICRhY191bnJlY29nbml6ZWRfb3B0cyIgPiYyO30KK2ZpCisKKworCitpZiB0ZXN0IC1yIGRvYy94c2wvY2F0YWxvZy54bWw7IHRoZW4KKwlpZiBjbXAgZG9jL3hzbC9jYXRhbG9nLTEueG1sIGRvYy94c2wvY2F0YWxvZy54bWwgPiAvZGV2L251bGw7IHRoZW4KKwkJZWNobyBkb2MveHNsL2NhdGFsb2cueG1sIGlzIHVuY2hhbmdlZAorCWVsc2UKKwkJY3AgLWYgZG9jL3hzbC9jYXRhbG9nLTEueG1sIGRvYy94c2wvY2F0YWxvZy54bWwKKwlmaQorZWxzZQorCWNwIC1mIGRvYy94c2wvY2F0YWxvZy0xLnhtbCBkb2MveHNsL2NhdGFsb2cueG1sCitmaQorCisKK2lmIHRlc3QgIngkZW5hYmxlX2d1aSIgPSAieG5vIiA7IHRoZW4KKwllY2hvICJObyBHVUkgd2lsbCBiZSBidWlsdCBhcyBpdCB3YXMgZXhwbGljaXRseSBkaXNhYmxlZC4iCitlbHNlCisJaWYgdGVzdCAteiAiJFFUX0xJQlMiOyB0aGVuCisJCWVjaG8gIldhcm5pbmc6IFFUIHZlcnNpb24gJFFUX1ZFUlNJT04gd2FzIHJlcXVlc3RlZCBidXQgbm90IGZvdW5kLiBObyBHVUkgd2lsbCBiZSBidWlsdC4iCisJZWxzZQorCQllY2hvICJCdWlsZGluZyBHVUkgd2l0aCBRVCAkUVRfVkVSU0lPTiIKKwkgZmkKK2ZpCisKK2lmICEgdGVzdCAieCRlbmFibGVfYWNjb3VudF9jaGVjayIgPSAieHllcyI7IHRoZW4KKwk6CitlbGlmIHRlc3QgImBnZXRlbnQgcGFzc3dkIG9wcm9maWxlIDI+L2Rldi9udWxsYCIgPT0gIiIgfHwgXAorICAgICB0ZXN0ICJgZ2V0ZW50IGdyb3VwIG9wcm9maWxlIDI+L2Rldi9udWxsYCIgPT0gIiI7IHRoZW4KKwlpZiB0ZXN0IGBpZCAtdWAgIT0gIjAiOyB0aGVuCisJCWVjaG8gIldhcm5pbmc6IFRoZSB1c2VyIGFjY291bnQgJ29wcm9maWxlOm9wcm9maWxlJyBkb2VzIG5vdCBleGlzdCBvbiB0aGUgc3lzdGVtLiIKKwkJZWNobyAiICAgICAgICAgVG8gcHJvZmlsZSBKSVRlZCBjb2RlLCB0aGlzIHNwZWNpYWwgdXNlciBhY2NvdW50IG11c3QgZXhpc3QuIgorCQllY2hvICIgICAgICAgICBQbGVhc2UgYXNrIHlvdXIgc3lzdGVtIGFkbWluaXN0cmF0b3IgdG8gYWRkIHRoZSBmb2xsb3dpbmcgdXNlciBhbmQgZ3JvdXA6IgorCQllY2hvICIgICAgICAgICAgICAgdXNlciBuYW1lIDogJ29wcm9maWxlJyIKKwkJZWNobyAiICAgICAgICAgICAgIGdyb3VwIG5hbWU6ICdvcHJvZmlsZSciCisJCWVjaG8gIiAgICAgICAgIFRoZSAnb3Byb2ZpbGUnIGdyb3VwIG11c3QgYmUgdGhlIGRlZmF1bHQgZ3JvdXAgZm9yIHRoZSAnb3Byb2ZpbGUnIHVzZXIuIgorCWVsc2UKKwkJZWNobyAiV2FybmluZzogVGhlIHVzZXIgYWNjb3VudCAnb3Byb2ZpbGU6b3Byb2ZpbGUnIGRvZXMgbm90IGV4aXN0IG9uIHRoZSBzeXN0ZW0uIgorCQllY2hvICIgICAgICAgICBUbyBwcm9maWxlIEpJVGVkIGNvZGUsIHRoaXMgc3BlY2lhbCB1c2VyIGFjY291bnQgbXVzdCBleGlzdC4iCisJCWVjaG8gIiAgICAgICAgIFBsZWFzZSBhZGQgdGhlIGZvbGxvd2luZyB1c2VyIGFuZCBncm91cDoiCisJCWVjaG8gIiAgICAgICAgICAgICB1c2VyIG5hbWUgOiAnb3Byb2ZpbGUnIgorCQllY2hvICIgICAgICAgICAgICAgZ3JvdXAgbmFtZTogJ29wcm9maWxlJyIKKwkJZWNobyAiICAgICAgICAgVGhlICdvcHJvZmlsZScgZ3JvdXAgbXVzdCBiZSB0aGUgZGVmYXVsdCBncm91cCBmb3IgdGhlICdvcHJvZmlsZScgdXNlci4iCisJZmkKK2ZpCisKZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2NvbmZpZ3VyZS5pbiBiL29wcm9maWxlLTAuOS43L2NvbmZpZ3VyZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjNjNmM2Ci0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvY29uZmlndXJlLmluCkBAIC0wLDAgKzEsMzcxIEBACisjICAgQXV0b2NvbmYgc2NyaXB0IGZvciBvcHJvZmlsZQorIworIyAgIENvcHlyaWdodCAxOTk5IE9sYWYgVGl0eiA8b2xhZkBiaWdyZWQuaW5rYS5kZT4KKyMgICBBZGFwdGVkIGZvciBvcHJvZmlsZQorIworIyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyMgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyAgIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorIyAgIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisKK0FDX1BSRVJFUSgyLjEzKQorCitBQ19JTklUKGxpYm9wL29wX2NvbmZpZy5oKQorQU1fSU5JVF9BVVRPTUFLRShvcHJvZmlsZSwgMC45LjcpCitBTV9DT05GSUdfSEVBREVSKGNvbmZpZy5oKQorCitBQ19DSEVDS19ERUNMUyhbYmFzZW5hbWVdLCBbXSwgW10sIFtbI2luY2x1ZGUgPGxpYmdlbi5oPl1dKQorQUNfUFJPR19SQU5MSUIKK0FDX1BST0dfTElCVE9PTAorUEtHX1BST0dfUEtHX0NPTkZJRworCitkbmwgZm9yIHRoZSBtYW4gcGFnZQorREFURT0iYGRhdGUgJyslYSAlZCAlQiAlWSdgIgorQUNfU1VCU1QoREFURSkKKworZG5sIG5lZWRlZCBmb3IgbW9kdWxlIGJ1aWxkCitPUFJPRklMRV9ESVI9YHB3ZGAKK0FDX1NVQlNUKE9QUk9GSUxFX0RJUikKKyAKKyMgdGhpcyBuZWVkcyB0byBjb21lIGJlZm9yZSAtLXdpdGgtZ2NjIHNvIHdlIGxpbmsgd2l0aCBiaW51dGlsJ3MgdmVyc2lvbgorIyBvZiBsaWJpYmVydHkgLi4uIHNpZ2gKK0FDX0FSR19XSVRIKGJpbnV0aWxzLAorWyAgLS13aXRoLWJpbnV0aWxzPWRpcgkJUGF0aCB0byBiaW51dGlscyBpbnN0YWxsYXRpb24gdG8gdXNlXSwgQklOVVRJTFNESVI9JHdpdGh2YWwpCisKK2lmIHRlc3QgIiRCSU5VVElMU0RJUiIgIT0gIiI7IHRoZW4KKwlMRD0iJEJJTlVUSUxTRElSL2xkIgorCWlmIHRlc3QgIiRDRkxBR1MiID0gIiI7IHRoZW4KKwkJQ0ZMQUdTPSItZyAtTzIiCisJZmkKKwlpZiB0ZXN0ICIkQ1hYRkxBR1MiID0gIiI7IHRoZW4KKwkJQ1hYRkxBR1M9Ii1nIC1PMiIKKwlmaQorCUNGTEFHUz0iJENGTEFHUyAtSSRCSU5VVElMU0RJUi9pbmNsdWRlIgorCUNYWEZMQUdTPSIkQ1hYRkxBR1MgLUkkQklOVVRJTFNESVIvaW5jbHVkZSIKKwlBQ19BUkdfV0lUSChiaW51dGlscy1saWJuYW1lLAorCQlbICAtLXdpdGgtYmludXRpbHMtbGlibmFtZSAgICAgICBMaWIgZGlyIG5hbWUgdW5kZXIgYmludXRpbHMgaW5zdGFsbGF0aW9uOyBAPDpAbGliQDo+QF1dLAorCQlCSU5VVElMU0xJQj0kd2l0aHZhbCkKKwlpZiB0ZXN0ICIkQklOVVRJTFNMSUIiID0gIiI7IHRoZW4KKwkJQklOVVRJTFNMSUI9ImxpYiIKKwlmaQorCUxERkxBR1M9IiRMREZMQUdTIC1MJEJJTlVUSUxTRElSLyRCSU5VVElMU0xJQiAtWGxpbmtlciAtUiAtWGxpbmtlciAkQklOVVRJTFNESVIvJEJJTlVUSUxTTElCIgorZmkKKworQUNfQVJHX1dJVEgoZ2NjLAorWyAgLS13aXRoLWdjYz1kaXIJCVBhdGggdG8gR0NDIGluc3RhbGxhdGlvbiB0byB1c2VdLCBHQ0NESVI9JHdpdGh2YWwpCisKK2lmIHRlc3QgIiRHQ0NESVIiICE9ICIiOyB0aGVuCisJQ0M9IiRHQ0NESVIvYmluL2djYyIKKwlDWFg9IiRHQ0NESVIvYmluL2crKyIKKwlMREZMQUdTPSIkTERGTEFHUyAtTCRHQ0NESVIvbGliIC1YbGlua2VyIC1SIC1YbGlua2VyICRHQ0NESVIvbGliIgorZmkKKworQUNfUFJPR19DQworQUNfUFJPR19DUFAKK0FDX1BST0dfQ1hYCitBQ19DSEVDS19QUk9HKExELGxkLGxkLCkKK3Rlc3QgIiRMRCIgfHwgQUNfRVJST1IobGQgbm90IGZvdW5kKQorCitBWF9GSU5EX0tFUk5FTAorCitpZiB0ZXN0ICIkT1BST0ZJTEVfMjYiID0gIm5vIjsgdGhlbgorCUFYX0NPTkZJR19NT0RVTEUKK2ZpCisKK0FDX0FSR19XSVRIKG1vZHVsZS1kaXIsCitbICAtLXdpdGgtbW9kdWxlLWRpcj1kaXIgICAgICAgIFBhdGggdG8gbW9kdWxlIGluc3RhbGxhdGlvbiBkaXJlY3RvcnldLCBNT0RJTlNUQUxMRElSPSR3aXRodmFsKQorQUNfU1VCU1QoTU9ESU5TVEFMTERJUikKKworQUNfQVJHX1dJVEgoamF2YSwKK1sgIC0td2l0aC1qYXZhPWphdmEtaG9tZSAgICAgICAgUGF0aCB0byBKYXZhIGhvbWUgZGlyZWN0b3J5IChkZWZhdWx0IGlzICJubyI7ICJ5ZXMiIHdpbGwgdXNlIC91c3IgYXMgSmF2YSBob21lKV0sCitKQVZBX0hPTUVESVI9JHdpdGhfamF2YSwgW3dpdGhfamF2YT1ub10pCisKK2lmIHRlc3QgIngkd2l0aF9qYXZhIiA9ICJ4eWVzIjsgdGhlbgorCUpBVkFfSE9NRURJUj0iL3VzciIKK2Vsc2UgaWYgdGVzdCAieCR3aXRoX2phdmEiID0gInhubyI7IHRoZW4KKwlKQVZBX0hPTUVESVI9CisJZmkKK2ZpCitBQ19TVUJTVChKQVZBX0hPTUVESVIpCisKK2lmIHRlc3QgLW4gIiRKQVZBX0hPTUVESVIiOyB0aGVuCisJQUNfQ0hFQ0tfRklMRSgiJEpBVkFfSE9NRURJUi9pbmNsdWRlL2p2bXRpLmgiLEpWTVRJX0hfRVhJU1RTPSJ5ZXMiLCkKKwlBQ19DSEVDS19GSUxFKCIkSkFWQV9IT01FRElSL2luY2x1ZGUvanZtcGkuaCIsSlZNUElfSF9FWElTVFM9InllcyIsKQorZmkKKworQU1fQ09ORElUSU9OQUwoQlVJTERfSlZNVElfQUdFTlQsIHRlc3QgLW4gIiRKVk1USV9IX0VYSVNUUyIpCitBTV9DT05ESVRJT05BTChCVUlMRF9KVk1QSV9BR0VOVCwgdGVzdCAtbiAiJEpWTVBJX0hfRVhJU1RTIikKKworQVhfTUFMTE9DX0FUVFJJQlVURQorQVhfQlVJTFRJTl9FWFBFQ1QKKworQUNfU1VCU1QoRVhUUkFfQ0ZMQUdTX01PRFVMRSkKKwordG9wZGlyPWBwd2RgCitBQ19TVUJTVCh0b3BkaXIpCisgCitBWF9FWFRSQV9ESVJTCisKK09SSUdfU0FWRV9MSUJTPSIkTElCUyIKKworZG5sIGFkdmFuY2VkIGdsaWJjIGZlYXR1cmVzIHdoaWNoIHdlIG5lZWQgYnV0IG1heSBub3QgYmUgcHJlc2VudAorQUNfQ0hFQ0tfRlVOQ1Moc2NoZWRfc2V0YWZmaW5pdHkgcGVyZm1vbmN0bCkKKworQUNfQ0hFQ0tfTElCKHBvcHQsIHBvcHRHZXRDb250ZXh0LCwgQUNfTVNHX0VSUk9SKFtwb3B0IGxpYnJhcnkgbm90IGZvdW5kXSkpCitBWF9CSU5VVElMUworQVhfQ0VMTF9TUFUKKworIyBDKysgdGVzdHMKKyAKK0FDX0xBTkdfQ1BMVVNQTFVTCisKK0FYX1BPUFRfQ09OU1QKK0FYX0NIRUNLX1NTVFJFQU0KKworZG5sIGJmZC5oIHByZSAxOTk4IGNoZWNrIG9ubHkgZm9yIGdudSAyLnh4IHNlcmllcywgc28gZ2NjIDMuMCBjYW4ndCBjb21waWxlIGl0CitBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgYmZkIGRlZmluZXMgYm9vbF0pCitBQ19UUllfQ09NUElMRShbI2luY2x1ZGUgPGJmZC5oPl0sIFtdLCAKK0FDX01TR19SRVNVTFQoW25vXSk7LAorQUNfTVNHX1JFU1VMVChbeWVzXSk7IEFDX0RFRklORShUUlVFX0ZBTFNFX0FMUkVBRFlfREVGSU5FRCwgMSwgW3doZXRoZXIgYmZkLmggZGVmaW5lcyBib29sIHZhbHVlc10pKQorCitkbmwgc21hcnQgZGVtYW5nbGVyIG5lZWQgdG8ga25vdyB3aGF0IGFyZSB0aGUgdW5kZXJsaW5lZCB0eXBlIGZvciBzb21lIHR5cGVkZWYKK0FYX1RZUEVERUZFRF9OQU1FKHNpemVfdCwgInVuc2lnbmVkIiAidW5zaWduZWQgbG9uZyIsIFNJWkVfVF9UWVBFKQorQUNfU1VCU1QoU0laRV9UX1RZUEUpCitBWF9UWVBFREVGRURfTkFNRShwdHJkaWZmX3QsICJpbnQiICJsb25nIiwgUFRSRElGRl9UX1RZUEUpCitBQ19TVUJTVChQVFJESUZGX1RfVFlQRSkKKworQUNfUEFUSF9YVFJBCitPUklHX1hfU0FWRV9MSUJTPSIkTElCUyIKK0xJQlM9IiRYX1BSRV9MSUJTICRMSUJTICRYX0xJQlMgLWxYMTEgJFhfRVhUUkFfTElCUyIKK1hfTElCUz0iJExJQlMiCitBQ19TVUJTVChYX0xJQlMpCisKK0FDX0FSR19FTkFCTEUoZ3VpLFsgIC0tZW5hYmxlLWd1aSAgY29tcGlsZSB3aXRoIGd1aSBjb21wb25lbnQgKHF0M3xxdDR8eWVzfG5vKSwKKwkJICAgICBpZiBub3QgZ2l2ZW4gb3Igc2V0IHRvIHllcywgZ3VpIGRlZmF1bHRzIHRvIHF0M10sLCBlbmFibGVfZ3VpPXF0MykKKworaWYgdGVzdCAieCRlbmFibGVfZ3VpIiAgPSAieHF0MyIgIHx8IHRlc3QgIngkZW5hYmxlX2d1aSIgID0gInh5ZXMiOyB0aGVuCisJUVRfVkVSU0lPTj0zCisJUVRfRE9fSVRfQUxMCisJaWYgdGVzdCAtbiAiJFFUX0xJQiI7IHRoZW4KKwkJUVRfTElCUz0iJFFUX0xJQiAkUVRfTERGTEFHUyIKKwlmaQorCVFUX0NGTEFHUz0iJFFUX0lOQ0xVREVTIgorZmkKKworaWYgdGVzdCAieCRlbmFibGVfZ3VpIiAgPSAieHF0NCI7IHRoZW4KKwlRVF9WRVJTSU9OPTQKKwlQS0dfQ0hFQ0tfTU9EVUxFUyhRVCwgUXQzU3VwcG9ydCBRdEd1aSBRdENvcmUgLCxbCisJZWNobyAiWW91IHJlcXVlc3RlZCBRVDQgYnV0IGl0cyBidWlsZCBmaWxlcyBhcmUgbm90IGF2YWlsYWJsZS4gRXhpdGluZyBub3cuIgorCWV4aXQKKwldKQorCU1PQz0kKHBrZy1jb25maWcgLS12YXJpYWJsZT1tb2NfbG9jYXRpb24gUXRDb3JlKQorCVVJQz0kKHBrZy1jb25maWcgLS12YXJpYWJsZT11aWNfbG9jYXRpb24gUXRDb3JlKTMKKwlRVF9WRVJTSU9OPSQocGtnLWNvbmZpZyAtLW1vZHZlcnNpb24gUXRDb3JlKQorCitkbmwgZm9sbG93aW5nIGFyZSBzb21lIHNhbml0eSB0ZXN0cyBhbmQgd29ya2Fyb3VuZHMgZm9yIGJ1Z2d5IFF0Q29yZS5wYyBmaWxlcworCWlmIHRlc3QgIngkTU9DIiA9ICJ4IjsgdGhlbgorCQllY2hvICJXQVJOSU5HOiBZb3VyIFF0Q29yZS5wYyBmaWxlIGlzIGJ1Z2d5LCBpdCBkb2Vzbid0IHByb3ZpZGUgdGhlIHZhcmlhYmxlICdtb2NfbG9jYXRpb24nIgorCQllY2hvICJXQVJOSU5HOiBJIHdpbGwgdHJ5IHRvIGZpbmQgaXQgaW4geW91ciBQQVRIIC4uLiIKKwkJQUNfQ0hFQ0tfUFJPRyhNT0MsIG1vYywgbW9jKQorCQlpZiB0ZXN0ICJ4JE1PQyIgPSAieCI7IHRoZW4KKwkJCWVjaG8gIldBUk5JTkc6IFlvdSBjYW4gZml4IHRoaXMgYnkgYWRkaW5nIHRoZSBsb2NhdGlvbiBvZiBtb2MgdG8geW91ciBwYXRoLiIKKwkJCWVjaG8gIldBUk5JTkc6IEV4aXRpbmcgbm93LiIKKwkJCWV4aXQKKwkJZmkKKwlmaQorCisJaWYgdGVzdCAieCRVSUMiID0gIngzIjsgdGhlbgorCQllY2hvICJXQVJOSU5HOiBZb3VyIFF0Q29yZS5wYyBmaWxlIGlzIGJ1Z2d5LCBpdCBkb2Vzbid0IHByb3ZpZGUgdGhlIHZhcmlhYmxlICd1aWNfbG9jYXRpb24nIgorCQllY2hvICJXQVJOSU5HOiBJIHdpbGwgdHJ5IHRvIGZpbmQgaXQgaW4geW91ciBQQVRIIC4uLiIKKwkJQUNfQ0hFQ0tfUFJPRyhVSUNoZWxwLCB1aWMzLCB1aWMzKQorCQlpZiB0ZXN0ICJ4JFVJQ2hlbHAiID0gIngiOyB0aGVuCisJCQllY2hvICJXQVJOSU5HOiBZb3UgY2FuIGZpeCB0aGlzIGJ5IGFkZGluZyB0aGUgbG9jYXRpb24gb2YgdWljMyB0byB5b3VyIHBhdGguIgorCQkJZWNobyAiV0FSTklORzogRXhpdGluZyBub3cuIgorCQkJZXhpdAorCQllbHNlCisJCQlVSUM9IiRVSUNoZWxwIgorCQlmaQorCWZpCisKKwlmbGFnc19oYXNfcXQzc3VwcG9ydD0kKGVjaG8gJFFUX0NGTEFHUyB8IGdyZXAgUVQzX1NVUFBPUlQpCisJaWYgdGVzdCAieCRmbGFnc19oYXNfcXQzc3VwcG9ydCIgPSAieCIgOyB0aGVuCisJCWVjaG8gIldBUk5JTkc6IFlvdXIgUXQzU3VwcG9ydCBwYWNrYWdlIGlzIGJ1Z2d5OyBpdCBkb3NuJ3QgaW5jbHVkZSB0aGUgJ1FUM19TVVBQT1JUJyBmbGFnIgorCQllY2hvICJXQVJOSU5HOiBhZGRpbmcgaXQgbWFudWFsbHkiCisJCVFUX0NGTEFHUz0iJFFUX0NGTEFHUyAtRFFUM19TVVBQT1JUIgorCWZpCitmaQorQU1fQ09ORElUSU9OQUwoaGF2ZV9xdCwgdGVzdCAtbiAiJFFUX0xJQlMiKQorCitMSUJTPSIkT1JJR19YX1NBVkVfTElCUyIKKworZG5sIGVuYWJsZSBwY2ggZm9yIGMrKworQUNfQVJHX0VOQUJMRShwY2gsCisJWyAgLS1lbmFibGUtcGNoICAgICAgICAgICAgICAgICBlbmFibGUgcHJlY29tcGlsZWQgaGVhZGVyIChkZWZhdWx0IGlzIGRpc2FibGVkKV0sCisJZW5hYmxlX3BjaD0kZW5hYmxldmFsLCBlbmFibGVfcGNoPW5vKQoraWYgdGVzdCAiJGVuYWJsZV9wY2giID0geWVzOyB0aGVuCisJQVhfQ0hFQ0tfUFJFQ09NUElMRURfSEVBREVSKE9QX0NYWEZMQUdTKQorZmkKKworQVhfQ0hFQ0tfRE9DQk9PSworCitkbmwgZmluYWxseSByZXN0b3JlIHRoZSBvcmlnaW5hbCBsaWJzIHNldHRpbmcKK0xJQlM9IiRPUklHX1NBVkVfTElCUyIKK0xJQkVSVFlfTElCUz0iLWxpYmVydHkgJERMX0xJQiAkSU5UTF9MSUIiCitCRkRfTElCUz0iLWxiZmQgLWxpYmVydHkgJERMX0xJQiAkSU5UTF9MSUIgJFpfTElCIgorUE9QVF9MSUJTPSItbHBvcHQiCitBQ19TVUJTVChMSUJFUlRZX0xJQlMpCitBQ19TVUJTVChCRkRfTElCUykKK0FDX1NVQlNUKFBPUFRfTElCUykKKworIyBkbyBOT1QgcHV0IHRlc3RzIGhlcmUsIHRoZXkgd2lsbCBmYWlsIGluIHRoZSBjYXNlIFggaXMgbm90IGluc3RhbGxlZCAhCisgCisKK0FYX0NGTEFHU19PUFRJT04oT1BfQ0ZMQUdTLFstV10pCitBWF9DWFhGTEFHU19PUFRJT04oT1BfQ1hYRkxBR1MsWy1XXSkKK0FYX0NGTEFHU19PUFRJT04oT1BfQ0ZMQUdTLFstV2FsbF0pCitBWF9DWFhGTEFHU19PUFRJT04oT1BfQ1hYRkxBR1MsWy1XYWxsXSkKK0FYX0NGTEFHU19PUFRJT04oT1BfQ0ZMQUdTLFstZm5vLWNvbW1vbl0pCitBWF9DWFhGTEFHU19PUFRJT04oT1BfQ1hYRkxBR1MsWy1mbm8tY29tbW9uXSkKK0FYX0NYWEZMQUdTX09QVElPTihPUF9DWFhGTEFHUyxbLWZ0ZW1wbGF0ZS1kZXB0aC01MF0pCitBWF9DRkxBR1NfT1BUSU9OKE9QX0NGTEFHUyxbLVdkZWNsYXJhdGlvbi1hZnRlci1zdGF0ZW1lbnRdKQorCitkbmwgZW5hYmxlIG9wdGlvbiB0byB1c2UgR0NDIHRlc3QgY292ZXJhZ2UKK0FDX0FSR19FTkFCTEUoZ2NvdiwKKwlbICAtLWVuYWJsZS1nY292ICAgICAgICAgICAgICAgIGVuYWJsZSBvcHRpb24gZm9yIGdjb3YgY292ZXJhZ2UgdGVzdGluZyAoZGVmYXVsdCBpcyBkaXNhYmxlZCldLAorCWVuYWJsZV9nY292PSRlbmFibGV2YWwsIGVuYWJsZV9nY292PW5vKQoraWYgdGVzdCAiJGVuYWJsZV9nY292IiA9IHllczsgdGhlbgorCUFYX0NGTEFHU19PUFRJT04oT1BfQ0ZMQUdTLFstZnByb2ZpbGUtYXJjc10pCisJQVhfQ1hYRkxBR1NfT1BUSU9OKE9QX0NYWEZMQUdTLFstZnByb2ZpbGUtYXJjc10pCisJQVhfQ0ZMQUdTX09QVElPTihPUF9DRkxBR1MsWy1mdGVzdC1jb3ZlcmFnZV0pCisJQVhfQ1hYRkxBR1NfT1BUSU9OKE9QX0NYWEZMQUdTLFstZnRlc3QtY292ZXJhZ2VdKQorZmkKKworQUNfQVJHX0VOQUJMRSh3ZXJyb3IsCisJWyAgLS1kaXNhYmxlLXdlcnJvciAgICAgICAgICAgIGRpc2FibGUgLVdlcnJvciBmbGFnIChkZWZhdWx0IGlzIGVuYWJsZWQgZm9yIG5vbi1yZWxlYXNlKV0sCisgICAgICAgIGVuYWJsZV93ZXJyb3I9JGVuYWJsZXZhbCwgZW5hYmxlX3dlcnJvcj15ZXMpCitpZiB0ZXN0ICIkZW5hYmxlX3dlcnJvciIgPSB5ZXM7IHRoZW4KKwkjIGVuYWJsZSAtV2Vycm9yIGZvciBub24tcmVsZWFzZSB2ZXJzaW9ucy4KKwlpZiBlY2hvICIkVkVSU0lPTiIgfCBncmVwIGdpdCA+L2Rldi9udWxsOyB0aGVuCisJCUFYX0NGTEFHU19PUFRJT04oT1BfQ0ZMQUdTLFstV2Vycm9yXSkKKwkJQVhfQ1hYRkxBR1NfT1BUSU9OKE9QX0NYWEZMQUdTLFstV2Vycm9yXSkKKwlmaQorZmkKKworQUNfQVJHX0VOQUJMRShvcHRpbWl6YXRpb24sCisJWyAgLS1kaXNhYmxlLW9wdGltaXphdGlvbiAgICAgIGRpc2FibGUgb3B0aW1pemF0aW9uIGZsYWdzIChkZWZhdWx0IGlzIGVuYWJsZWQpXSwKKwllbmFibGVfb3B0aW1pemF0aW9uPSRlbmFibGV2YWwsIGVuYWJsZV9vcHRpbWlzYXRpb249eWVzKQoraWYgdGVzdCAiJGVuYWJsZV9vcHRpbWl6YXRpb24iID0gIm5vIjsgdGhlbgorCUNGTEFHUz1gZWNobyAkQ0ZMQUdTIHwgc2VkICdzLy1PMi8vZydgCisJQ1hYRkxBR1M9YGVjaG8gJENYWEZMQUdTIHwgc2VkICdzLy1PMi8vZydgCitmaQorCitBQ19BUkdfRU5BQkxFKGFjY291bnQtY2hlY2ssCisJWyAgLS1kaXNhYmxlLWFjY291bnQtY2hlY2sgICAgIGRpc2FibGUgYWNjb3VudCBjaGVjayAoZGVmYXVsdCBpcyBlbmFibGVkKV0sCisJZW5hYmxlX2FjY291bnRfY2hlY2s9JGVuYWJsZXZhbCwgZW5hYmxlX2FjY291bnRfY2hlY2s9eWVzKQorCitBTV9DT05ESVRJT05BTChDSEVDS19BQ0NPVU5ULCB0ZXN0ICJ4JGVuYWJsZV9hY2NvdW50X2NoZWNrIiA9ICJ4eWVzIikKKworQUNfU1VCU1QoT1BfQ0ZMQUdTKQorQUNfU1VCU1QoT1BfQ1hYRkxBR1MpCisKKyMgZml4dXBzIGZvciBjb25maWcuaAoraWYgdGVzdCAiJHByZWZpeCIgPSAiTk9ORSI7IHRoZW4KKwlteV9vcF9wcmVmaXg9IiRhY19kZWZhdWx0X3ByZWZpeCIKK2Vsc2UKKwlteV9vcF9wcmVmaXg9IiRwcmVmaXgiCitmaQorbXlfb3BfZGF0YWRpcj0iJG15X29wX3ByZWZpeC9zaGFyZSIKKworaWYgdGVzdCAiJGV4ZWNfcHJlZml4IiA9ICJOT05FIjsgdGhlbgorCW15X29wX2V4ZWNfcHJlZml4PSIkbXlfb3BfcHJlZml4IgorZWxzZQorCW15X29wX2V4ZWNfcHJlZml4PSIkZXhlY19wcmVmaXgiCitmaQorbXlfb3BfYmluZGlyPSIkbXlfb3BfZXhlY19wcmVmaXgvYmluIgorCitPUF9EQVRBRElSPWBldmFsIGVjaG8gIiRteV9vcF9kYXRhZGlyLyRQQUNLQUdFLyJgCitBQ19ERUZJTkVfVU5RVU9URUQoT1BfREFUQURJUiwgIiRPUF9EQVRBRElSIiwgW3BhY2thZ2UgZGF0YSBkaXJlY3RvcnldKQorT1BfQklORElSPWBldmFsIGVjaG8gIiRteV9vcF9iaW5kaXIvImAKK0FDX0RFRklORV9VTlFVT1RFRChPUF9CSU5ESVIsICIkT1BfQklORElSIiwgW3BhY2thZ2UgYmluYXJ5IGRpcmVjdG9yeV0pCitPUF9ET0NESVI9YGV2YWwgZWNobyAiJHtteV9vcF9wcmVmaXh9L3NoYXJlL2RvYy8kUEFDS0FHRS8iYAorQUNfU1VCU1QoT1BfRE9DRElSKQorCitBQ19PVVRQVVQoTWFrZWZpbGUgXAorCW00L01ha2VmaWxlIFwKKwlsaWJ1dGlsL01ha2VmaWxlIFwKKwlsaWJ1dGlsL3Rlc3RzL01ha2VmaWxlIFwKKwlsaWJ1dGlsKysvTWFrZWZpbGUgXAorCWxpYnV0aWwrKy90ZXN0cy9NYWtlZmlsZSBcCisJbGlib3AvTWFrZWZpbGUgXAorCWxpYm9wL3Rlc3RzL01ha2VmaWxlIFwKKwlsaWJvcGFnZW50L01ha2VmaWxlIFwKKwlsaWJvcHQrKy9NYWtlZmlsZSBcCisJbGliZGIvTWFrZWZpbGUgXAorCWxpYmRiL3Rlc3RzL01ha2VmaWxlIFwKKwlsaWJhYmkvTWFrZWZpbGUgXAorCWxpYmFiaS90ZXN0cy9NYWtlZmlsZSBcCisJbGlicmVnZXgvTWFrZWZpbGUgXAorCWxpYnJlZ2V4L3Rlc3RzL01ha2VmaWxlIFwKKwlsaWJyZWdleC9zdGwucGF0IFwKKwlsaWJyZWdleC90ZXN0cy9tYW5nbGVkLW5hbWUgXAorCWRhZW1vbi9NYWtlZmlsZSBcCisJZGFlbW9uL2xpYmxlZ2FjeS9NYWtlZmlsZSBcCisJZXZlbnRzL01ha2VmaWxlIFwKKwl1dGlscy9NYWtlZmlsZSBcCisJZG9jL01ha2VmaWxlIFwKKwlkb2MveHNsL2NhdGFsb2ctMS54bWwgXAorCWRvYy9vcHJvZmlsZS4xIFwKKwlkb2Mvb3Bjb250cm9sLjEgXAorCWRvYy9vcGhlbHAuMSBcCisJZG9jL29wcmVwb3J0LjEgXAorCWRvYy9vcGFubm90YXRlLjEgXAorCWRvYy9vcGdwcm9mLjEgXAorCWRvYy9vcGFyY2hpdmUuMSBcCisJZG9jL29waW1wb3J0LjEgXAorCWRvYy9zcmNkb2MvRG94eWZpbGUgXAorCWxpYnBwL01ha2VmaWxlIFwKKwlvcGppdGNvbnYvTWFrZWZpbGUgXAorCXBwL01ha2VmaWxlIFwKKwlndWkvTWFrZWZpbGUgXAorCWd1aS91aS9NYWtlZmlsZSBcCisJbW9kdWxlL01ha2VmaWxlIFwKKwltb2R1bGUveDg2L01ha2VmaWxlIFwKKwltb2R1bGUvaWE2NC9NYWtlZmlsZSBcCisJYWdlbnRzL01ha2VmaWxlIFwKKwlhZ2VudHMvanZtdGkvTWFrZWZpbGUgXAorCWFnZW50cy9qdm1waS9NYWtlZmlsZSkKKworQVhfQ09QWV9JRl9DSEFOR0UoZG9jL3hzbC9jYXRhbG9nLTEueG1sLCBkb2MveHNsL2NhdGFsb2cueG1sKQorCitpZiB0ZXN0ICJ4JGVuYWJsZV9ndWkiID0gInhubyIgOyB0aGVuCisJZWNobyAiTm8gR1VJIHdpbGwgYmUgYnVpbHQgYXMgaXQgd2FzIGV4cGxpY2l0bHkgZGlzYWJsZWQuIgorZWxzZQorCWlmIHRlc3QgLXogIiRRVF9MSUJTIjsgdGhlbgorCQllY2hvICJXYXJuaW5nOiBRVCB2ZXJzaW9uICRRVF9WRVJTSU9OIHdhcyByZXF1ZXN0ZWQgYnV0IG5vdCBmb3VuZC4gTm8gR1VJIHdpbGwgYmUgYnVpbHQuIgorCWVsc2UKKwkJZWNobyAiQnVpbGRpbmcgR1VJIHdpdGggUVQgJFFUX1ZFUlNJT04iCisJIGZpCitmaQorCitpZiAhIHRlc3QgIngkZW5hYmxlX2FjY291bnRfY2hlY2siID0gInh5ZXMiOyB0aGVuCisJOgorZWxpZiB0ZXN0ICJgZ2V0ZW50IHBhc3N3ZCBvcHJvZmlsZSAyPi9kZXYvbnVsbGAiID09ICIiIHx8IFwKKyAgICAgdGVzdCAiYGdldGVudCBncm91cCBvcHJvZmlsZSAyPi9kZXYvbnVsbGAiID09ICIiOyB0aGVuCisJaWYgdGVzdCBgaWQgLXVgICE9ICIwIjsgdGhlbgorCQllY2hvICJXYXJuaW5nOiBUaGUgdXNlciBhY2NvdW50ICdvcHJvZmlsZTpvcHJvZmlsZScgZG9lcyBub3QgZXhpc3Qgb24gdGhlIHN5c3RlbS4iCisJCWVjaG8gIiAgICAgICAgIFRvIHByb2ZpbGUgSklUZWQgY29kZSwgdGhpcyBzcGVjaWFsIHVzZXIgYWNjb3VudCBtdXN0IGV4aXN0LiIKKwkJZWNobyAiICAgICAgICAgUGxlYXNlIGFzayB5b3VyIHN5c3RlbSBhZG1pbmlzdHJhdG9yIHRvIGFkZCB0aGUgZm9sbG93aW5nIHVzZXIgYW5kIGdyb3VwOiIKKwkJZWNobyAiICAgICAgICAgICAgIHVzZXIgbmFtZSA6ICdvcHJvZmlsZSciCisJCWVjaG8gIiAgICAgICAgICAgICBncm91cCBuYW1lOiAnb3Byb2ZpbGUnIgorCQllY2hvICIgICAgICAgICBUaGUgJ29wcm9maWxlJyBncm91cCBtdXN0IGJlIHRoZSBkZWZhdWx0IGdyb3VwIGZvciB0aGUgJ29wcm9maWxlJyB1c2VyLiIKKwllbHNlCisJCWVjaG8gIldhcm5pbmc6IFRoZSB1c2VyIGFjY291bnQgJ29wcm9maWxlOm9wcm9maWxlJyBkb2VzIG5vdCBleGlzdCBvbiB0aGUgc3lzdGVtLiIKKwkJZWNobyAiICAgICAgICAgVG8gcHJvZmlsZSBKSVRlZCBjb2RlLCB0aGlzIHNwZWNpYWwgdXNlciBhY2NvdW50IG11c3QgZXhpc3QuIgorCQllY2hvICIgICAgICAgICBQbGVhc2UgYWRkIHRoZSBmb2xsb3dpbmcgdXNlciBhbmQgZ3JvdXA6IgorCQllY2hvICIgICAgICAgICAgICAgdXNlciBuYW1lIDogJ29wcm9maWxlJyIKKwkJZWNobyAiICAgICAgICAgICAgIGdyb3VwIG5hbWU6ICdvcHJvZmlsZSciCisJCWVjaG8gIiAgICAgICAgIFRoZSAnb3Byb2ZpbGUnIGdyb3VwIG11c3QgYmUgdGhlIGRlZmF1bHQgZ3JvdXAgZm9yIHRoZSAnb3Byb2ZpbGUnIHVzZXIuIgorCWZpCitmaQorCmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9kYWVtb24vTWFrZWZpbGUuYW0gYi9vcHJvZmlsZS0wLjkuNy9kYWVtb24vTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQzY2ZkNgotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2RhZW1vbi9NYWtlZmlsZS5hbQpAQCAtMCwwICsxLDU4IEBACitTVUJESVJTID0gbGlibGVnYWN5IC4KKworb3Byb2ZpbGVkX1NPVVJDRVMgPSBcCisJaW5pdC5jIFwKKwlvcHJvZmlsZWQuYyBcCisJb3Byb2ZpbGVkLmggXAorCW9wZF9zdGF0cy5jIFwKKwlvcGRfcGlwZS5jIFwKKwlvcGRfcGlwZS5oIFwKKwlvcGRfc2ZpbGUuYyBcCisJb3BkX3NmaWxlLmggXAorCW9wZF9rZXJuZWwuYyBcCisJb3BkX2tlcm5lbC5oIFwKKwlvcGRfdHJhbnMuYyBcCisJb3BkX3RyYW5zLmggXAorCW9wZF9wcmludGYuaCBcCisJb3BkX3N0YXRzLmggXAorCW9wZF9jb29raWUuYyBcCisJb3BkX2Nvb2tpZS5oIFwKKwlvcGRfZXZlbnRzLmMgXAorCW9wZF9ldmVudHMuaCBcCisJb3BkX2ludGVyZmFjZS5oIFwKKwlvcGRfbWFuZ2xpbmcuYyBcCisJb3BkX21hbmdsaW5nLmggXAorCW9wZF9wZXJmbW9uLmggXAorCW9wZF9wZXJmbW9uLmMgXAorCW9wZF9hbm9uLmggXAorCW9wZF9hbm9uLmMgXAorCW9wZF9zcHUuYyBcCisJb3BkX2V4dGVuZGVkLmggXAorCW9wZF9leHRlbmRlZC5jIFwKKwlvcGRfaWJzLmggXAorCW9wZF9pYnMuYyBcCisJb3BkX2lic19tYWNyby5oIFwKKwlvcGRfaWJzX3RyYW5zLmggXAorCW9wZF9pYnNfdHJhbnMuYworCitMSUJTPUBQT1BUX0xJQlNAIEBMSUJFUlRZX0xJQlNACisKK0FNX0NQUEZMQUdTID0gXAorCS1JICR7dG9wX3NyY2Rpcn0vbGliYWJpIFwKKwktSSAke3RvcF9zcmNkaXJ9L2xpYnV0aWwgXAorCS1JICR7dG9wX3NyY2Rpcn0vbGlib3AgXAorCS1JICR7dG9wX3NyY2Rpcn0vbGliZGIKKworIyAtZm5vLW9taXQtZnJhbWUtcG9pbnRlciBuZWVkZWQgZm9yIGRhZW1vbiBidWlsZDogc2VlIENoYW5nZUxvZy0yMDA0IDAyLTIzCitBTV9DRkxBR1MgPSBAT1BfQ0ZMQUdTQCAtZm5vLW9taXQtZnJhbWUtcG9pbnRlcgorCitiaW5fUFJPR1JBTVMgPSBvcHJvZmlsZWQKKworb3Byb2ZpbGVkX0xEQUREID0gXAorCWxpYmxlZ2FjeS9saWJsZWdhY3kuYSBcCisJLi4vbGliYWJpL2xpYmFiaS5hIFwKKwkuLi9saWJkYi9saWJvZGIuYSBcCisJLi4vbGlib3AvbGlib3AuYSBcCisJLi4vbGlidXRpbC9saWJ1dGlsLmEKKworb3Byb2ZpbGVkX0xJTksgPSAkKENDKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpICQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyAkQApkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvZGFlbW9uL01ha2VmaWxlLmluIGIvb3Byb2ZpbGUtMC45LjcvZGFlbW9uL01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxNmQ5MDYKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9kYWVtb24vTWFrZWZpbGUuaW4KQEAgLTAsMCArMSw3OTAgQEAKKyMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTEuMSBmcm9tIE1ha2VmaWxlLmFtLgorIyBAY29uZmlndXJlX2lucHV0QAorCisjIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwKKyMgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorIyBJbmMuCisjIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0CisjIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKKyMgUEFSVElDVUxBUiBQVVJQT1NFLgorCitAU0VUX01BS0VACisKK1ZQQVRIID0gQHNyY2RpckAKK3BrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAorcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACitwa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACitwa2dsaWJleGVjZGlyID0gJChsaWJleGVjZGlyKS9AUEFDS0FHRUAKK2FtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKK2luc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0CitpbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCitpbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKK0lOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCit0cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCitOT1JNQUxfSU5TVEFMTCA9IDoKK1BSRV9JTlNUQUxMID0gOgorUE9TVF9JTlNUQUxMID0gOgorTk9STUFMX1VOSU5TVEFMTCA9IDoKK1BSRV9VTklOU1RBTEwgPSA6CitQT1NUX1VOSU5TVEFMTCA9IDoKK2J1aWxkX3RyaXBsZXQgPSBAYnVpbGRACitob3N0X3RyaXBsZXQgPSBAaG9zdEAKK2Jpbl9QUk9HUkFNUyA9IG9wcm9maWxlZCQoRVhFRVhUKQorc3ViZGlyID0gZGFlbW9uCitESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKHNyY2RpcikvTWFrZWZpbGUuaW4KK0FDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKK2FtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL200L2JpbnV0aWxzLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2J1aWx0aW5leHBlY3QubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY2VsbHNwdWJmZHN1cHBvcnQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY29tcGlsZXJvcHRpb24ubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY29uZmlnbW9kdWxlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2NvcHlpZmNoYW5nZS5tNCAkKHRvcF9zcmNkaXIpL200L2RvY2Jvb2subTQgXAorCSQodG9wX3NyY2RpcikvbTQvZXh0cmFkaXJzLm00ICQodG9wX3NyY2RpcikvbTQvZmluZGtlcm5lbC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9rZXJuZWxvcHRpb24ubTQgXAorCSQodG9wX3NyY2RpcikvbTQva2VybmVsdmVyc2lvbi5tNCAkKHRvcF9zcmNkaXIpL200L2xpYnRvb2wubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbHRvcHRpb25zLm00ICQodG9wX3NyY2RpcikvbTQvbHRzdWdhci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9sdHZlcnNpb24ubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdH5vYnNvbGV0ZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9tYWxsb2NhdHRyaWJ1dGUubTQgXAorCSQodG9wX3NyY2RpcikvbTQvcG9wdGNvbnN0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3ByZWNvbXBpbGVkaGVhZGVyLm00ICQodG9wX3NyY2RpcikvbTQvcXQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvcmVzdWx0eW4ubTQgJCh0b3Bfc3JjZGlyKS9tNC9zc3RyZWFtLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3R5cGVkZWYubTQgJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuaW4KK2FtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCisJJChBQ0xPQ0FMX000KQorbWtpbnN0YWxsZGlycyA9ICQoaW5zdGFsbF9zaCkgLWQKK0NPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvY29uZmlnLmgKK0NPTkZJR19DTEVBTl9GSUxFUyA9CitDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMgPQorYW1fX2luc3RhbGxkaXJzID0gIiQoREVTVERJUikkKGJpbmRpcikiCitQUk9HUkFNUyA9ICQoYmluX1BST0dSQU1TKQorYW1fb3Byb2ZpbGVkX09CSkVDVFMgPSBpbml0LiQoT0JKRVhUKSBvcHJvZmlsZWQuJChPQkpFWFQpIFwKKwlvcGRfc3RhdHMuJChPQkpFWFQpIG9wZF9waXBlLiQoT0JKRVhUKSBvcGRfc2ZpbGUuJChPQkpFWFQpIFwKKwlvcGRfa2VybmVsLiQoT0JKRVhUKSBvcGRfdHJhbnMuJChPQkpFWFQpIG9wZF9jb29raWUuJChPQkpFWFQpIFwKKwlvcGRfZXZlbnRzLiQoT0JKRVhUKSBvcGRfbWFuZ2xpbmcuJChPQkpFWFQpIFwKKwlvcGRfcGVyZm1vbi4kKE9CSkVYVCkgb3BkX2Fub24uJChPQkpFWFQpIG9wZF9zcHUuJChPQkpFWFQpIFwKKwlvcGRfZXh0ZW5kZWQuJChPQkpFWFQpIG9wZF9pYnMuJChPQkpFWFQpIFwKKwlvcGRfaWJzX3RyYW5zLiQoT0JKRVhUKQorb3Byb2ZpbGVkX09CSkVDVFMgPSAkKGFtX29wcm9maWxlZF9PQkpFQ1RTKQorb3Byb2ZpbGVkX0RFUEVOREVOQ0lFUyA9IGxpYmxlZ2FjeS9saWJsZWdhY3kuYSAuLi9saWJhYmkvbGliYWJpLmEgXAorCS4uL2xpYmRiL2xpYm9kYi5hIC4uL2xpYm9wL2xpYm9wLmEgLi4vbGlidXRpbC9saWJ1dGlsLmEKK0RFRkFVTFRfSU5DTFVERVMgPSAtSS5AYW1fX2lzcmNAIC1JJCh0b3BfYnVpbGRkaXIpCitkZXBjb21wID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9kZXBjb21wCithbV9fZGVwZmlsZXNfbWF5YmUgPSBkZXBmaWxlcworYW1fX212ID0gbXYgLWYKK0NPTVBJTEUgPSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgXAorCSQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKK0xUQ09NUElMRSA9ICQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSBcCisJLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpIFwKKwkkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpCitDQ0xEID0gJChDQykKK0xJTksgPSAkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgXAorCS0tbW9kZT1saW5rICQoQ0NMRCkgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAkKEFNX0xERkxBR1MpIFwKKwkkKExERkxBR1MpIC1vICRACitTT1VSQ0VTID0gJChvcHJvZmlsZWRfU09VUkNFUykKK0RJU1RfU09VUkNFUyA9ICQob3Byb2ZpbGVkX1NPVVJDRVMpCitSRUNVUlNJVkVfVEFSR0VUUyA9IGFsbC1yZWN1cnNpdmUgY2hlY2stcmVjdXJzaXZlIGR2aS1yZWN1cnNpdmUgXAorCWh0bWwtcmVjdXJzaXZlIGluZm8tcmVjdXJzaXZlIGluc3RhbGwtZGF0YS1yZWN1cnNpdmUgXAorCWluc3RhbGwtZHZpLXJlY3Vyc2l2ZSBpbnN0YWxsLWV4ZWMtcmVjdXJzaXZlIFwKKwlpbnN0YWxsLWh0bWwtcmVjdXJzaXZlIGluc3RhbGwtaW5mby1yZWN1cnNpdmUgXAorCWluc3RhbGwtcGRmLXJlY3Vyc2l2ZSBpbnN0YWxsLXBzLXJlY3Vyc2l2ZSBpbnN0YWxsLXJlY3Vyc2l2ZSBcCisJaW5zdGFsbGNoZWNrLXJlY3Vyc2l2ZSBpbnN0YWxsZGlycy1yZWN1cnNpdmUgcGRmLXJlY3Vyc2l2ZSBcCisJcHMtcmVjdXJzaXZlIHVuaW5zdGFsbC1yZWN1cnNpdmUKK1JFQ1VSU0lWRV9DTEVBTl9UQVJHRVRTID0gbW9zdGx5Y2xlYW4tcmVjdXJzaXZlIGNsZWFuLXJlY3Vyc2l2ZQlcCisgIGRpc3RjbGVhbi1yZWN1cnNpdmUgbWFpbnRhaW5lci1jbGVhbi1yZWN1cnNpdmUKK0FNX1JFQ1VSU0lWRV9UQVJHRVRTID0gJChSRUNVUlNJVkVfVEFSR0VUUzotcmVjdXJzaXZlPSkgXAorCSQoUkVDVVJTSVZFX0NMRUFOX1RBUkdFVFM6LXJlY3Vyc2l2ZT0pIHRhZ3MgVEFHUyBjdGFncyBDVEFHUyBcCisJZGlzdGRpcgorRVRBR1MgPSBldGFncworQ1RBR1MgPSBjdGFncworRElTVF9TVUJESVJTID0gJChTVUJESVJTKQorRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKK2FtX19yZWxhdGl2aXplID0gXAorICBkaXIwPWBwd2RgOyBcCisgIHNlZF9maXJzdD0ncyxeXChbXi9dKlwpLy4qJCQsXDEsJzsgXAorICBzZWRfcmVzdD0ncyxeW14vXSovKiwsJzsgXAorICBzZWRfbGFzdD0ncyxeLiovXChbXi9dKlwpJCQsXDEsJzsgXAorICBzZWRfYnV0bGFzdD0ncywvKlteL10qJCQsLCc7IFwKKyAgd2hpbGUgdGVzdCAtbiAiJCRkaXIxIjsgZG8gXAorICAgIGZpcnN0PWBlY2hvICIkJGRpcjEiIHwgc2VkIC1lICIkJHNlZF9maXJzdCJgOyBcCisgICAgaWYgdGVzdCAiJCRmaXJzdCIgIT0gIi4iOyB0aGVuIFwKKyAgICAgIGlmIHRlc3QgIiQkZmlyc3QiID0gIi4uIjsgdGhlbiBcCisgICAgICAgIGRpcjI9YGVjaG8gIiQkZGlyMCIgfCBzZWQgLWUgIiQkc2VkX2xhc3QiYC8iJCRkaXIyIjsgXAorICAgICAgICBkaXIwPWBlY2hvICIkJGRpcjAiIHwgc2VkIC1lICIkJHNlZF9idXRsYXN0ImA7IFwKKyAgICAgIGVsc2UgXAorICAgICAgICBmaXJzdDI9YGVjaG8gIiQkZGlyMiIgfCBzZWQgLWUgIiQkc2VkX2ZpcnN0ImA7IFwKKyAgICAgICAgaWYgdGVzdCAiJCRmaXJzdDIiID0gIiQkZmlyc3QiOyB0aGVuIFwKKyAgICAgICAgICBkaXIyPWBlY2hvICIkJGRpcjIiIHwgc2VkIC1lICIkJHNlZF9yZXN0ImA7IFwKKyAgICAgICAgZWxzZSBcCisgICAgICAgICAgZGlyMj0iLi4vJCRkaXIyIjsgXAorICAgICAgICBmaTsgXAorICAgICAgICBkaXIwPSIkJGRpcjAiLyIkJGZpcnN0IjsgXAorICAgICAgZmk7IFwKKyAgICBmaTsgXAorICAgIGRpcjE9YGVjaG8gIiQkZGlyMSIgfCBzZWQgLWUgIiQkc2VkX3Jlc3QiYDsgXAorICBkb25lOyBcCisgIHJlbGRpcj0iJCRkaXIyIgorQUNMT0NBTCA9IEBBQ0xPQ0FMQAorQU1UQVIgPSBAQU1UQVJACitBUiA9IEBBUkAKK0FVVE9DT05GID0gQEFVVE9DT05GQAorQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAorQVVUT01BS0UgPSBAQVVUT01BS0VACitBV0sgPSBAQVdLQAorQkZEX0xJQlMgPSBAQkZEX0xJQlNACitDQVRfRU5UUllfRU5EID0gQENBVF9FTlRSWV9FTkRACitDQVRfRU5UUllfU1RBUlQgPSBAQ0FUX0VOVFJZX1NUQVJUQAorQ0MgPSBAQ0NACitDQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAorQ0ZMQUdTID0gQENGTEFHU0AKK0NQUCA9IEBDUFBACitDUFBGTEFHUyA9IEBDUFBGTEFHU0AKK0NYWCA9IEBDWFhACitDWFhDUFAgPSBAQ1hYQ1BQQAorQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAorQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACitDWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAorREFURSA9IEBEQVRFQAorREVGUyA9IEBERUZTQAorREVQRElSID0gQERFUERJUkAKK0RPQ0JPT0tfUk9PVCA9IEBET0NCT09LX1JPT1RACitEU1lNVVRJTCA9IEBEU1lNVVRJTEAKK0RVTVBCSU4gPSBARFVNUEJJTkAKK0VDSE9fQyA9IEBFQ0hPX0NACitFQ0hPX04gPSBARUNIT19OQAorRUNIT19UID0gQEVDSE9fVEAKK0VHUkVQID0gQEVHUkVQQAorRVhFRVhUID0gQEVYRUVYVEAKK0VYVFJBX0NGTEFHU19NT0RVTEUgPSBARVhUUkFfQ0ZMQUdTX01PRFVMRUAKK0ZHUkVQID0gQEZHUkVQQAorR1JFUCA9IEBHUkVQQAorSU5TVEFMTCA9IEBJTlNUQUxMQAorSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKK0lOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACitJTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKK0lOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACitKQVZBX0hPTUVESVIgPSBASkFWQV9IT01FRElSQAorS0lOQyA9IEBLSU5DQAorS1NSQyA9IEBLU1JDQAorS1ZFUlMgPSBAS1ZFUlNACitMRCA9IEBMREAKK0xERkxBR1MgPSBATERGTEFHU0AKK0xJQkVSVFlfTElCUyA9IEBMSUJFUlRZX0xJQlNACitMSUJPQkpTID0gQExJQk9CSlNACitMSUJTID0gQFBPUFRfTElCU0AgQExJQkVSVFlfTElCU0AKK0xJQlRPT0wgPSBATElCVE9PTEAKK0xJUE8gPSBATElQT0AKK0xOX1MgPSBATE5fU0AKK0xUTElCT0JKUyA9IEBMVExJQk9CSlNACitNQUtFSU5GTyA9IEBNQUtFSU5GT0AKK01LRElSX1AgPSBATUtESVJfUEAKK01PQyA9IEBNT0NACitNT0RJTlNUQUxMRElSID0gQE1PRElOU1RBTExESVJACitOTSA9IEBOTUAKK05NRURJVCA9IEBOTUVESVRACitPQkpEVU1QID0gQE9CSkRVTVBACitPQkpFWFQgPSBAT0JKRVhUQAorT1BST0ZJTEVfRElSID0gQE9QUk9GSUxFX0RJUkAKK09QUk9GSUxFX01PRFVMRV9BUkNIID0gQE9QUk9GSUxFX01PRFVMRV9BUkNIQAorT1BfQ0ZMQUdTID0gQE9QX0NGTEFHU0AKK09QX0NYWEZMQUdTID0gQE9QX0NYWEZMQUdTQAorT1BfRE9DRElSID0gQE9QX0RPQ0RJUkAKK09UT09MID0gQE9UT09MQAorT1RPT0w2NCA9IEBPVE9PTDY0QAorUEFDS0FHRSA9IEBQQUNLQUdFQAorUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACitQQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAorUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACitQQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAorUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACitQQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAorUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACitQS0dfQ09ORklHID0gQFBLR19DT05GSUdACitQS0dfQ09ORklHX0xJQkRJUiA9IEBQS0dfQ09ORklHX0xJQkRJUkAKK1BLR19DT05GSUdfUEFUSCA9IEBQS0dfQ09ORklHX1BBVEhACitQT1BUX0xJQlMgPSBAUE9QVF9MSUJTQAorUFRSRElGRl9UX1RZUEUgPSBAUFRSRElGRl9UX1RZUEVACitRVF9DRkxBR1MgPSBAUVRfQ0ZMQUdTQAorUVRfSU5DTFVERVMgPSBAUVRfSU5DTFVERVNACitRVF9MREZMQUdTID0gQFFUX0xERkxBR1NACitRVF9MSUIgPSBAUVRfTElCQAorUVRfTElCUyA9IEBRVF9MSUJTQAorUVRfVkVSU0lPTiA9IEBRVF9WRVJTSU9OQAorUkFOTElCID0gQFJBTkxJQkAKK1NFRCA9IEBTRURACitTRVRfTUFLRSA9IEBTRVRfTUFLRUAKK1NIRUxMID0gQFNIRUxMQAorU0laRV9UX1RZUEUgPSBAU0laRV9UX1RZUEVACitTVFJJUCA9IEBTVFJJUEAKK1VJQyA9IEBVSUNACitVSUNoZWxwID0gQFVJQ2hlbHBACitWRVJTSU9OID0gQFZFUlNJT05ACitYTUtNRiA9IEBYTUtNRkAKK1hNTF9DQVRBTE9HID0gQFhNTF9DQVRBTE9HQAorWFNMVFBST0MgPSBAWFNMVFBST0NACitYU0xUUFJPQ19GTEFHUyA9IEBYU0xUUFJPQ19GTEFHU0AKK1hfQ0ZMQUdTID0gQFhfQ0ZMQUdTQAorWF9FWFRSQV9MSUJTID0gQFhfRVhUUkFfTElCU0AKK1hfTElCUyA9IEBYX0xJQlNACitYX1BSRV9MSUJTID0gQFhfUFJFX0xJQlNACithYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAorYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAorYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAorYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACithY19jdF9DQyA9IEBhY19jdF9DQ0AKK2FjX2N0X0NYWCA9IEBhY19jdF9DWFhACithY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACithbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKK2FtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACithbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAorYW1fX3RhciA9IEBhbV9fdGFyQAorYW1fX3VudGFyID0gQGFtX191bnRhckAKK2JpbmRpciA9IEBiaW5kaXJACitidWlsZCA9IEBidWlsZEAKK2J1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAorYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKK2J1aWxkX29zID0gQGJ1aWxkX29zQAorYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKK2J1aWxkZGlyID0gQGJ1aWxkZGlyQAorZGF0YWRpciA9IEBkYXRhZGlyQAorZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACitkb2NkaXIgPSBAZG9jZGlyQAorZHZpZGlyID0gQGR2aWRpckAKK2V4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAoraG9zdCA9IEBob3N0QAoraG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAoraG9zdF9jcHUgPSBAaG9zdF9jcHVACitob3N0X29zID0gQGhvc3Rfb3NACitob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKK2h0bWxkaXIgPSBAaHRtbGRpckAKK2luY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKK2luZm9kaXIgPSBAaW5mb2RpckAKK2luc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKK2xpYmRpciA9IEBsaWJkaXJACitsaWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACitsb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAorbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAorbHRfRUNITyA9IEBsdF9FQ0hPQAorbWFuZGlyID0gQG1hbmRpckAKK21rZGlyX3AgPSBAbWtkaXJfcEAKK29sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKK3BkZmRpciA9IEBwZGZkaXJACitwcmVmaXggPSBAcHJlZml4QAorcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAorcHNkaXIgPSBAcHNkaXJACitzYmluZGlyID0gQHNiaW5kaXJACitzaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKK3NyY2RpciA9IEBzcmNkaXJACitzeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACit0YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAordG9wX2J1aWxkX3ByZWZpeCA9IEB0b3BfYnVpbGRfcHJlZml4QAordG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKK3RvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKK3RvcGRpciA9IEB0b3BkaXJACitTVUJESVJTID0gbGlibGVnYWN5IC4KK29wcm9maWxlZF9TT1VSQ0VTID0gXAorCWluaXQuYyBcCisJb3Byb2ZpbGVkLmMgXAorCW9wcm9maWxlZC5oIFwKKwlvcGRfc3RhdHMuYyBcCisJb3BkX3BpcGUuYyBcCisJb3BkX3BpcGUuaCBcCisJb3BkX3NmaWxlLmMgXAorCW9wZF9zZmlsZS5oIFwKKwlvcGRfa2VybmVsLmMgXAorCW9wZF9rZXJuZWwuaCBcCisJb3BkX3RyYW5zLmMgXAorCW9wZF90cmFucy5oIFwKKwlvcGRfcHJpbnRmLmggXAorCW9wZF9zdGF0cy5oIFwKKwlvcGRfY29va2llLmMgXAorCW9wZF9jb29raWUuaCBcCisJb3BkX2V2ZW50cy5jIFwKKwlvcGRfZXZlbnRzLmggXAorCW9wZF9pbnRlcmZhY2UuaCBcCisJb3BkX21hbmdsaW5nLmMgXAorCW9wZF9tYW5nbGluZy5oIFwKKwlvcGRfcGVyZm1vbi5oIFwKKwlvcGRfcGVyZm1vbi5jIFwKKwlvcGRfYW5vbi5oIFwKKwlvcGRfYW5vbi5jIFwKKwlvcGRfc3B1LmMgXAorCW9wZF9leHRlbmRlZC5oIFwKKwlvcGRfZXh0ZW5kZWQuYyBcCisJb3BkX2licy5oIFwKKwlvcGRfaWJzLmMgXAorCW9wZF9pYnNfbWFjcm8uaCBcCisJb3BkX2lic190cmFucy5oIFwKKwlvcGRfaWJzX3RyYW5zLmMKKworQU1fQ1BQRkxBR1MgPSBcCisJLUkgJHt0b3Bfc3JjZGlyfS9saWJhYmkgXAorCS1JICR7dG9wX3NyY2Rpcn0vbGlidXRpbCBcCisJLUkgJHt0b3Bfc3JjZGlyfS9saWJvcCBcCisJLUkgJHt0b3Bfc3JjZGlyfS9saWJkYgorCisKKyMgLWZuby1vbWl0LWZyYW1lLXBvaW50ZXIgbmVlZGVkIGZvciBkYWVtb24gYnVpbGQ6IHNlZSBDaGFuZ2VMb2ctMjAwNCAwMi0yMworQU1fQ0ZMQUdTID0gQE9QX0NGTEFHU0AgLWZuby1vbWl0LWZyYW1lLXBvaW50ZXIKK29wcm9maWxlZF9MREFERCA9IFwKKwlsaWJsZWdhY3kvbGlibGVnYWN5LmEgXAorCS4uL2xpYmFiaS9saWJhYmkuYSBcCisJLi4vbGliZGIvbGlib2RiLmEgXAorCS4uL2xpYm9wL2xpYm9wLmEgXAorCS4uL2xpYnV0aWwvbGlidXRpbC5hCisKK29wcm9maWxlZF9MSU5LID0gJChDQykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKK2FsbDogYWxsLXJlY3Vyc2l2ZQorCisuU1VGRklYRVM6CisuU1VGRklYRVM6IC5jIC5sbyAubyAub2JqCiskKHNyY2RpcikvTWFrZWZpbGUuaW46ICAkKHNyY2RpcikvTWFrZWZpbGUuYW0gICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCUBmb3IgZGVwIGluICQ/OyBkbyBcCisJICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKKwkgICAgKiQkZGVwKikgXAorCSAgICAgICggY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoICkgXAorCSAgICAgICAgJiYgeyBpZiB0ZXN0IC1mICRAOyB0aGVuIGV4aXQgMDsgZWxzZSBicmVhazsgZmk7IH07IFwKKwkgICAgICBleGl0IDE7OyBcCisJICBlc2FjOyBcCisJZG9uZTsgXAorCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZm9yZWlnbiBkYWVtb24vTWFrZWZpbGUnOyBcCisJJChhbV9fY2QpICQodG9wX3NyY2RpcikgJiYgXAorCSAgJChBVVRPTUFLRSkgLS1mb3JlaWduIGRhZW1vbi9NYWtlZmlsZQorLlBSRUNJT1VTOiBNYWtlZmlsZQorTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworCUBjYXNlICckPycgaW4gXAorCSAgKmNvbmZpZy5zdGF0dXMqKSBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKKwkgICopIFwKKwkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAorCWVzYWM7CisKKyQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorCiskKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorJChBQ0xPQ0FMX000KTogICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6CitpbnN0YWxsLWJpblBST0dSQU1TOiAkKGJpbl9QUk9HUkFNUykKKwlAJChOT1JNQUxfSU5TVEFMTCkKKwl0ZXN0IC16ICIkKGJpbmRpcikiIHx8ICQoTUtESVJfUCkgIiQoREVTVERJUikkKGJpbmRpcikiCisJQGxpc3Q9JyQoYmluX1BST0dSQU1TKSc7IHRlc3QgLW4gIiQoYmluZGlyKSIgfHwgbGlzdD07IFwKKwlmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCAkJHAiOyBkb25lIHwgXAorCXNlZCAncy8kKEVYRUVYVCkkJC8vJyB8IFwKKwl3aGlsZSByZWFkIHAgcDE7IGRvIGlmIHRlc3QgLWYgJCRwIHx8IHRlc3QgLWYgJCRwMTsgXAorCSAgdGhlbiBlY2hvICIkJHAiOyBlY2hvICIkJHAiOyBlbHNlIDo7IGZpOyBcCisJZG9uZSB8IFwKKwlzZWQgLWUgJ3A7cywuKi8sLDtuO2gnIC1lICdzfC4qfC58JyBcCisJICAgIC1lICdwO3g7cywuKi8sLDtzLyQoRVhFRVhUKSQkLy87JCh0cmFuc2Zvcm0pO3MvJCQvJChFWEVFWFQpLycgfCBcCisJc2VkICdOO047TjtzLFxuLCAsZycgfCBcCisJJChBV0spICdCRUdJTiB7IGZpbGVzWyIuIl0gPSAiIjsgZGlyc1siLiJdID0gMSB9IFwKKwkgIHsgZD0kJDM7IGlmIChkaXJzW2RdICE9IDEpIHsgcHJpbnQgImQiLCBkOyBkaXJzW2RdID0gMSB9IFwKKwkgICAgaWYgKCQkMiA9PSAkJDQpIGZpbGVzW2RdID0gZmlsZXNbZF0gIiAiICQkMTsgXAorCSAgICBlbHNlIHsgcHJpbnQgImYiLCAkJDMgIi8iICQkNCwgJCQxOyB9IH0gXAorCSAgRU5EIHsgZm9yIChkIGluIGZpbGVzKSBwcmludCAiZiIsIGQsIGZpbGVzW2RdIH0nIHwgXAorCXdoaWxlIHJlYWQgdHlwZSBkaXIgZmlsZXM7IGRvIFwKKwkgICAgaWYgdGVzdCAiJCRkaXIiID0gLjsgdGhlbiBkaXI9OyBlbHNlIGRpcj0vJCRkaXI7IGZpOyBcCisJICAgIHRlc3QgLXogIiQkZmlsZXMiIHx8IHsgXAorCSAgICBlY2hvICIgJChJTlNUQUxMX1BST0dSQU1fRU5WKSAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWluc3RhbGwgJChJTlNUQUxMX1BST0dSQU0pICQkZmlsZXMgJyQoREVTVERJUikkKGJpbmRpcikkJGRpciciOyBcCisJICAgICQoSU5TVEFMTF9QUk9HUkFNX0VOVikgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1pbnN0YWxsICQoSU5TVEFMTF9QUk9HUkFNKSAkJGZpbGVzICIkKERFU1RESVIpJChiaW5kaXIpJCRkaXIiIHx8IGV4aXQgJCQ/OyBcCisJICAgIH0gXAorCTsgZG9uZQorCit1bmluc3RhbGwtYmluUFJPR1JBTVM6CisJQCQoTk9STUFMX1VOSU5TVEFMTCkKKwlAbGlzdD0nJChiaW5fUFJPR1JBTVMpJzsgdGVzdCAtbiAiJChiaW5kaXIpIiB8fCBsaXN0PTsgXAorCWZpbGVzPWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCI7IGRvbmUgfCBcCisJICBzZWQgLWUgJ2g7cyxeLiovLCw7cy8kKEVYRUVYVCkkJC8vOyQodHJhbnNmb3JtKScgXAorCSAgICAgIC1lICdzLyQkLyQoRVhFRVhUKS8nIGA7IFwKKwl0ZXN0IC1uICIkJGxpc3QiIHx8IGV4aXQgMDsgXAorCWVjaG8gIiAoIGNkICckKERFU1RESVIpJChiaW5kaXIpJyAmJiBybSAtZiIgJCRmaWxlcyAiKSI7IFwKKwljZCAiJChERVNURElSKSQoYmluZGlyKSIgJiYgcm0gLWYgJCRmaWxlcworCitjbGVhbi1iaW5QUk9HUkFNUzoKKwlAbGlzdD0nJChiaW5fUFJPR1JBTVMpJzsgdGVzdCAtbiAiJCRsaXN0IiB8fCBleGl0IDA7IFwKKwllY2hvICIgcm0gLWYiICQkbGlzdDsgXAorCXJtIC1mICQkbGlzdCB8fCBleGl0ICQkPzsgXAorCXRlc3QgLW4gIiQoRVhFRVhUKSIgfHwgZXhpdCAwOyBcCisJbGlzdD1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAiOyBkb25lIHwgc2VkICdzLyQoRVhFRVhUKSQkLy8nYDsgXAorCWVjaG8gIiBybSAtZiIgJCRsaXN0OyBcCisJcm0gLWYgJCRsaXN0CitvcHJvZmlsZWQkKEVYRUVYVCk6ICQob3Byb2ZpbGVkX09CSkVDVFMpICQob3Byb2ZpbGVkX0RFUEVOREVOQ0lFUykgCisJQHJtIC1mIG9wcm9maWxlZCQoRVhFRVhUKQorCSQob3Byb2ZpbGVkX0xJTkspICQob3Byb2ZpbGVkX09CSkVDVFMpICQob3Byb2ZpbGVkX0xEQUREKSAkKExJQlMpCisKK21vc3RseWNsZWFuLWNvbXBpbGU6CisJLXJtIC1mICouJChPQkpFWFQpCisKK2Rpc3RjbGVhbi1jb21waWxlOgorCS1ybSAtZiAqLnRhYi5jCisKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9pbml0LlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9vcGRfYW5vbi5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvb3BkX2Nvb2tpZS5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvb3BkX2V2ZW50cy5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvb3BkX2V4dGVuZGVkLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9vcGRfaWJzLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9vcGRfaWJzX3RyYW5zLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9vcGRfa2VybmVsLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9vcGRfbWFuZ2xpbmcuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL29wZF9wZXJmbW9uLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9vcGRfcGlwZS5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvb3BkX3NmaWxlLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9vcGRfc3B1LlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9vcGRfc3RhdHMuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL29wZF90cmFucy5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvb3Byb2ZpbGVkLlBvQGFtX19xdW90ZUAKKworLmMubzoKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgJDwKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ09NUElMRSkgLWMgJDwKKworLmMub2JqOgorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENPTVBJTEUpIC1jIGAkKENZR1BBVEhfVykgJyQ8J2AKKworLmMubG86CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExUQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgJDwKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMVENPTVBJTEUpIC1jIC1vICRAICQ8CisKK21vc3RseWNsZWFuLWxpYnRvb2w6CisJLXJtIC1mICoubG8KKworY2xlYW4tbGlidG9vbDoKKwktcm0gLXJmIC5saWJzIF9saWJzCisKKyMgVGhpcyBkaXJlY3RvcnkncyBzdWJkaXJlY3RvcmllcyBhcmUgbW9zdGx5IGluZGVwZW5kZW50OyB5b3UgY2FuIGNkCisjIGludG8gdGhlbSBhbmQgcnVuIGBtYWtlJyB3aXRob3V0IGdvaW5nIHRocm91Z2ggdGhpcyBNYWtlZmlsZS4KKyMgVG8gY2hhbmdlIHRoZSB2YWx1ZXMgb2YgYG1ha2UnIHZhcmlhYmxlczogaW5zdGVhZCBvZiBlZGl0aW5nIE1ha2VmaWxlcywKKyMgKDEpIGlmIHRoZSB2YXJpYWJsZSBpcyBzZXQgaW4gYGNvbmZpZy5zdGF0dXMnLCBlZGl0IGBjb25maWcuc3RhdHVzJworIyAgICAgKHdoaWNoIHdpbGwgY2F1c2UgdGhlIE1ha2VmaWxlcyB0byBiZSByZWdlbmVyYXRlZCB3aGVuIHlvdSBydW4gYG1ha2UnKTsKKyMgKDIpIG90aGVyd2lzZSwgcGFzcyB0aGUgZGVzaXJlZCB2YWx1ZXMgb24gdGhlIGBtYWtlJyBjb21tYW5kIGxpbmUuCiskKFJFQ1VSU0lWRV9UQVJHRVRTKToKKwlAZmFpbD0gZmFpbGNvbT0nZXhpdCAxJzsgXAorCWZvciBmIGluIHggJCRNQUtFRkxBR1M7IGRvIFwKKwkgIGNhc2UgJCRmIGluIFwKKwkgICAgKj0qIHwgLS1bIWtdKik7OyBcCisJICAgICprKikgZmFpbGNvbT0nZmFpbD15ZXMnOzsgXAorCSAgZXNhYzsgXAorCWRvbmU7IFwKKwlkb3Rfc2Vlbj1ubzsgXAorCXRhcmdldD1gZWNobyAkQCB8IHNlZCBzLy1yZWN1cnNpdmUvL2A7IFwKKwlsaXN0PSckKFNVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKwkgIGVjaG8gIk1ha2luZyAkJHRhcmdldCBpbiAkJHN1YmRpciI7IFwKKwkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9ICIuIjsgdGhlbiBcCisJICAgIGRvdF9zZWVuPXllczsgXAorCSAgICBsb2NhbF90YXJnZXQ9IiQkdGFyZ2V0LWFtIjsgXAorCSAgZWxzZSBcCisJICAgIGxvY2FsX3RhcmdldD0iJCR0YXJnZXQiOyBcCisJICBmaTsgXAorCSAgKCQoYW1fX2NkKSAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSAkJGxvY2FsX3RhcmdldCkgXAorCSAgfHwgZXZhbCAkJGZhaWxjb207IFwKKwlkb25lOyBcCisJaWYgdGVzdCAiJCRkb3Rfc2VlbiIgPSAibm8iOyB0aGVuIFwKKwkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICIkJHRhcmdldC1hbSIgfHwgZXhpdCAxOyBcCisJZmk7IHRlc3QgLXogIiQkZmFpbCIKKworJChSRUNVUlNJVkVfQ0xFQU5fVEFSR0VUUyk6CisJQGZhaWw9IGZhaWxjb209J2V4aXQgMSc7IFwKKwlmb3IgZiBpbiB4ICQkTUFLRUZMQUdTOyBkbyBcCisJICBjYXNlICQkZiBpbiBcCisJICAgICo9KiB8IC0tWyFrXSopOzsgXAorCSAgICAqayopIGZhaWxjb209J2ZhaWw9eWVzJzs7IFwKKwkgIGVzYWM7IFwKKwlkb25lOyBcCisJZG90X3NlZW49bm87IFwKKwljYXNlICIkQCIgaW4gXAorCSAgZGlzdGNsZWFuLSogfCBtYWludGFpbmVyLWNsZWFuLSopIGxpc3Q9JyQoRElTVF9TVUJESVJTKScgOzsgXAorCSAgKikgbGlzdD0nJChTVUJESVJTKScgOzsgXAorCWVzYWM7IFwKKwlyZXY9Jyc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAiLiI7IHRoZW4gOjsgZWxzZSBcCisJICAgIHJldj0iJCRzdWJkaXIgJCRyZXYiOyBcCisJICBmaTsgXAorCWRvbmU7IFwKKwlyZXY9IiQkcmV2IC4iOyBcCisJdGFyZ2V0PWBlY2hvICRAIHwgc2VkIHMvLXJlY3Vyc2l2ZS8vYDsgXAorCWZvciBzdWJkaXIgaW4gJCRyZXY7IGRvIFwKKwkgIGVjaG8gIk1ha2luZyAkJHRhcmdldCBpbiAkJHN1YmRpciI7IFwKKwkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9ICIuIjsgdGhlbiBcCisJICAgIGxvY2FsX3RhcmdldD0iJCR0YXJnZXQtYW0iOyBcCisJICBlbHNlIFwKKwkgICAgbG9jYWxfdGFyZ2V0PSIkJHRhcmdldCI7IFwKKwkgIGZpOyBcCisJICAoJChhbV9fY2QpICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICQkbG9jYWxfdGFyZ2V0KSBcCisJICB8fCBldmFsICQkZmFpbGNvbTsgXAorCWRvbmUgJiYgdGVzdCAteiAiJCRmYWlsIgordGFncy1yZWN1cnNpdmU6CisJbGlzdD0nJChTVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICB0ZXN0ICIkJHN1YmRpciIgPSAuIHx8ICgkKGFtX19jZCkgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgdGFncyk7IFwKKwlkb25lCitjdGFncy1yZWN1cnNpdmU6CisJbGlzdD0nJChTVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICB0ZXN0ICIkJHN1YmRpciIgPSAuIHx8ICgkKGFtX19jZCkgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgY3RhZ3MpOyBcCisJZG9uZQorCitJRDogJChIRUFERVJTKSAkKFNPVVJDRVMpICQoTElTUCkgJChUQUdTX0ZJTEVTKQorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorCW1raWQgLWZJRCAkJHVuaXF1ZQordGFnczogVEFHUworCitUQUdTOiB0YWdzLXJlY3Vyc2l2ZSAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKKwkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCisJc2V0IHg7IFwKKwloZXJlPWBwd2RgOyBcCisJaWYgKCQoRVRBR1MpIC0tZXRhZ3MtaW5jbHVkZSAtLXZlcnNpb24pID4vZGV2L251bGwgMj4mMTsgdGhlbiBcCisJICBpbmNsdWRlX29wdGlvbj0tLWV0YWdzLWluY2x1ZGU7IFwKKwkgIGVtcHR5X2ZpeD0uOyBcCisJZWxzZSBcCisJICBpbmNsdWRlX29wdGlvbj0tLWluY2x1ZGU7IFwKKwkgIGVtcHR5X2ZpeD07IFwKKwlmaTsgXAorCWxpc3Q9JyQoU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAorCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gLjsgdGhlbiA6OyBlbHNlIFwKKwkgICAgdGVzdCAhIC1mICQkc3ViZGlyL1RBR1MgfHwgXAorCSAgICAgIHNldCAiJCRAIiAiJCRpbmNsdWRlX29wdGlvbj0kJGhlcmUvJCRzdWJkaXIvVEFHUyI7IFwKKwkgIGZpOyBcCisJZG9uZTsgXAorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKwkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKwlzaGlmdDsgXAorCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJCokJHVuaXF1ZSI7IHRoZW4gOjsgZWxzZSBcCisJICB0ZXN0IC1uICIkJHVuaXF1ZSIgfHwgdW5pcXVlPSQkZW1wdHlfZml4OyBcCisJICBpZiB0ZXN0ICQkIyAtZ3QgMDsgdGhlbiBcCisJICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKwkgICAgICAiJCRAIiAkJHVuaXF1ZTsgXAorCSAgZWxzZSBcCisJICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKwkgICAgICAkJHVuaXF1ZTsgXAorCSAgZmk7IFwKKwlmaQorY3RhZ3M6IENUQUdTCitDVEFHUzogY3RhZ3MtcmVjdXJzaXZlICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAorCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCisJICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCisJdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdW5pcXVlIiBcCisJICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCisJICAgICAkJHVuaXF1ZQorCitHVEFHUzoKKwloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAorCSAgJiYgJChhbV9fY2QpICQodG9wX3NyY2RpcikgXAorCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAiJCRoZXJlIgorCitkaXN0Y2xlYW4tdGFnczoKKwktcm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncworCitkaXN0ZGlyOiAkKERJU1RGSUxFUykKKwlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisJdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCWxpc3Q9JyQoRElTVEZJTEVTKSc7IFwKKwkgIGRpc3RfZmlsZXM9YGZvciBmaWxlIGluICQkbGlzdDsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBcCisJICBzZWQgLWUgInN8XiQkc3JjZGlyc3RyaXAvfHw7dCIgXAorCSAgICAgIC1lICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfDt0ImA7IFwKKwljYXNlICQkZGlzdF9maWxlcyBpbiBcCisJICAqLyopICQoTUtESVJfUCkgYGVjaG8gIiQkZGlzdF9maWxlcyIgfCBcCisJCQkgICBzZWQgJy9cLy8hZDtzfF58JChkaXN0ZGlyKS98O3MsL1teL10qJCQsLCcgfCBcCisJCQkgICBzb3J0IC11YCA7OyBcCisJZXNhYzsgXAorCWZvciBmaWxlIGluICQkZGlzdF9maWxlczsgZG8gXAorCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAorCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKKwkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKKwkgICAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJGZpbGUiOyB0aGVuIFwKKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKwkgICAgZmk7IFwKKwkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCisJICAgICAgY3AgLWZwUiAkKHNyY2RpcikvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAorCSAgICBmaTsgXAorCSAgICBjcCAtZnBSICQkZC8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCisJICBlbHNlIFwKKwkgICAgdGVzdCAtZiAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKKwkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKKwkgICAgfHwgZXhpdCAxOyBcCisJICBmaTsgXAorCWRvbmUKKwlAbGlzdD0nJChESVNUX1NVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKwkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9IC47IHRoZW4gOjsgZWxzZSBcCisJICAgIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRzdWJkaXIiIFwKKwkgICAgfHwgJChNS0RJUl9QKSAiJChkaXN0ZGlyKS8kJHN1YmRpciIgXAorCSAgICB8fCBleGl0IDE7IFwKKwkgIGZpOyBcCisJZG9uZQorCUBsaXN0PSckKERJU1RfU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAorCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gLjsgdGhlbiA6OyBlbHNlIFwKKwkgICAgZGlyMT0kJHN1YmRpcjsgZGlyMj0iJChkaXN0ZGlyKS8kJHN1YmRpciI7IFwKKwkgICAgJChhbV9fcmVsYXRpdml6ZSk7IFwKKwkgICAgbmV3X2Rpc3RkaXI9JCRyZWxkaXI7IFwKKwkgICAgZGlyMT0kJHN1YmRpcjsgZGlyMj0iJCh0b3BfZGlzdGRpcikiOyBcCisJICAgICQoYW1fX3JlbGF0aXZpemUpOyBcCisJICAgIG5ld190b3BfZGlzdGRpcj0kJHJlbGRpcjsgXAorCSAgICBlY2hvICIgKGNkICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIHRvcF9kaXN0ZGlyPSIkJG5ld190b3BfZGlzdGRpciIgZGlzdGRpcj0iJCRuZXdfZGlzdGRpciIgXFwiOyBcCisJICAgIGVjaG8gIiAgICAgYW1fX3JlbW92ZV9kaXN0ZGlyPTogYW1fX3NraXBfbGVuZ3RoX2NoZWNrPTogYW1fX3NraXBfbW9kZV9maXg9OiBkaXN0ZGlyKSI7IFwKKwkgICAgKCQoYW1fX2NkKSAkJHN1YmRpciAmJiBcCisJICAgICAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgXAorCSAgICAgICAgdG9wX2Rpc3RkaXI9IiQkbmV3X3RvcF9kaXN0ZGlyIiBcCisJICAgICAgICBkaXN0ZGlyPSIkJG5ld19kaXN0ZGlyIiBcCisJCWFtX19yZW1vdmVfZGlzdGRpcj06IFwKKwkJYW1fX3NraXBfbGVuZ3RoX2NoZWNrPTogXAorCQlhbV9fc2tpcF9tb2RlX2ZpeD06IFwKKwkgICAgICAgIGRpc3RkaXIpIFwKKwkgICAgICB8fCBleGl0IDE7IFwKKwkgIGZpOyBcCisJZG9uZQorY2hlY2stYW06IGFsbC1hbQorY2hlY2s6IGNoZWNrLXJlY3Vyc2l2ZQorYWxsLWFtOiBNYWtlZmlsZSAkKFBST0dSQU1TKQoraW5zdGFsbGRpcnM6IGluc3RhbGxkaXJzLXJlY3Vyc2l2ZQoraW5zdGFsbGRpcnMtYW06CisJZm9yIGRpciBpbiAiJChERVNURElSKSQoYmluZGlyKSI7IGRvIFwKKwkgIHRlc3QgLXogIiQkZGlyIiB8fCAkKE1LRElSX1ApICIkJGRpciI7IFwKKwlkb25lCitpbnN0YWxsOiBpbnN0YWxsLXJlY3Vyc2l2ZQoraW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtcmVjdXJzaXZlCitpbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1yZWN1cnNpdmUKK3VuaW5zdGFsbDogdW5pbnN0YWxsLXJlY3Vyc2l2ZQorCitpbnN0YWxsLWFtOiBhbGwtYW0KKwlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQorCitpbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1yZWN1cnNpdmUKK2luc3RhbGwtc3RyaXA6CisJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKKwkgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorCSAgYHRlc3QgLXogJyQoU1RSSVApJyB8fCBcCisJICAgIGVjaG8gIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciYCBpbnN0YWxsCittb3N0bHljbGVhbi1nZW5lcmljOgorCitjbGVhbi1nZW5lcmljOgorCitkaXN0Y2xlYW4tZ2VuZXJpYzoKKwktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKKwktdGVzdCAuID0gIiQoc3JjZGlyKSIgfHwgdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykKKworbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgorCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKKwlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCitjbGVhbjogY2xlYW4tcmVjdXJzaXZlCisKK2NsZWFuLWFtOiBjbGVhbi1iaW5QUk9HUkFNUyBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgbW9zdGx5Y2xlYW4tYW0KKworZGlzdGNsZWFuOiBkaXN0Y2xlYW4tcmVjdXJzaXZlCisJLXJtIC1yZiAuLyQoREVQRElSKQorCS1ybSAtZiBNYWtlZmlsZQorZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCisJZGlzdGNsZWFuLXRhZ3MKKworZHZpOiBkdmktcmVjdXJzaXZlCisKK2R2aS1hbToKKworaHRtbDogaHRtbC1yZWN1cnNpdmUKKworaHRtbC1hbToKKworaW5mbzogaW5mby1yZWN1cnNpdmUKKworaW5mby1hbToKKworaW5zdGFsbC1kYXRhLWFtOgorCitpbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktcmVjdXJzaXZlCisKK2luc3RhbGwtZHZpLWFtOgorCitpbnN0YWxsLWV4ZWMtYW06IGluc3RhbGwtYmluUFJPR1JBTVMKKworaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtcmVjdXJzaXZlCisKK2luc3RhbGwtaHRtbC1hbToKKworaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tcmVjdXJzaXZlCisKK2luc3RhbGwtaW5mby1hbToKKworaW5zdGFsbC1tYW46CisKK2luc3RhbGwtcGRmOiBpbnN0YWxsLXBkZi1yZWN1cnNpdmUKKworaW5zdGFsbC1wZGYtYW06CisKK2luc3RhbGwtcHM6IGluc3RhbGwtcHMtcmVjdXJzaXZlCisKK2luc3RhbGwtcHMtYW06CisKK2luc3RhbGxjaGVjay1hbToKKworbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1yZWN1cnNpdmUKKwktcm0gLXJmIC4vJChERVBESVIpCisJLXJtIC1mIE1ha2VmaWxlCittYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCisKK21vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1yZWN1cnNpdmUKKworbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCisJbW9zdGx5Y2xlYW4tbGlidG9vbAorCitwZGY6IHBkZi1yZWN1cnNpdmUKKworcGRmLWFtOgorCitwczogcHMtcmVjdXJzaXZlCisKK3BzLWFtOgorCit1bmluc3RhbGwtYW06IHVuaW5zdGFsbC1iaW5QUk9HUkFNUworCisuTUFLRTogJChSRUNVUlNJVkVfQ0xFQU5fVEFSR0VUUykgJChSRUNVUlNJVkVfVEFSR0VUUykgY3RhZ3MtcmVjdXJzaXZlIFwKKwlpbnN0YWxsLWFtIGluc3RhbGwtc3RyaXAgdGFncy1yZWN1cnNpdmUKKworLlBIT05ZOiAkKFJFQ1VSU0lWRV9DTEVBTl9UQVJHRVRTKSAkKFJFQ1VSU0lWRV9UQVJHRVRTKSBDVEFHUyBHVEFHUyBcCisJYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBjbGVhbi1iaW5QUk9HUkFNUyBcCisJY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIGN0YWdzIGN0YWdzLXJlY3Vyc2l2ZSBkaXN0Y2xlYW4gXAorCWRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIGRpc3RjbGVhbi1saWJ0b29sIFwKKwlkaXN0Y2xlYW4tdGFncyBkaXN0ZGlyIGR2aSBkdmktYW0gaHRtbCBodG1sLWFtIGluZm8gaW5mby1hbSBcCisJaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtYmluUFJPR1JBTVMgaW5zdGFsbC1kYXRhIFwKKwlpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgaW5zdGFsbC1kdmktYW0gaW5zdGFsbC1leGVjIFwKKwlpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1odG1sIGluc3RhbGwtaHRtbC1hbSBpbnN0YWxsLWluZm8gXAorCWluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBpbnN0YWxsLXBkZiBpbnN0YWxsLXBkZi1hbSBcCisJaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIGluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIFwKKwlpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgaW5zdGFsbGRpcnMtYW0gbWFpbnRhaW5lci1jbGVhbiBcCisJbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIG1vc3RseWNsZWFuLWNvbXBpbGUgXAorCW1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBwZGYgcGRmLWFtIHBzIHBzLWFtIFwKKwl0YWdzIHRhZ3MtcmVjdXJzaXZlIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0gXAorCXVuaW5zdGFsbC1iaW5QUk9HUkFNUworCisKKyMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCisjIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KKy5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2RhZW1vbi9pbml0LmMgYi9vcHJvZmlsZS0wLjkuNy9kYWVtb24vaW5pdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3OWUzNmUKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9kYWVtb24vaW5pdC5jCkBAIC0wLDAgKzEsMzcyIEBACisvKioKKyAqIEBmaWxlIGRhZW1vbi9pbml0LmMKKyAqIERhZW1vbiBzZXQgdXAgYW5kIG1haW4gbG9vcCBmb3IgMi42CisgKgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMiBPUHJvZmlsZSBhdXRob3JzCisgKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORworICoKKyAqIEBhdXRob3IgSm9obiBMZXZvbgorICogQGF1dGhvciBQaGlsaXBwZSBFbGllCisgKiBATW9kaWZpY2F0aW9ucyBEYW5pZWwgSGFuc2VsCisgKiBNb2RpZmllZCBieSBBcmF2aW5kIE1lbm9uIGZvciBYZW4KKyAqIFRoZXNlIG1vZGlmaWNhdGlvbnMgYXJlOgorICogQ29weXJpZ2h0IChDKSAyMDA1IEhld2xldHQtUGFja2FyZCBDby4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisgCisjaW5jbHVkZSAib3Byb2ZpbGVkLmgiCisjaW5jbHVkZSAib3BkX3N0YXRzLmgiCisjaW5jbHVkZSAib3BkX3NmaWxlLmgiCisjaW5jbHVkZSAib3BkX3BpcGUuaCIKKyNpbmNsdWRlICJvcGRfa2VybmVsLmgiCisjaW5jbHVkZSAib3BkX3RyYW5zLmgiCisjaW5jbHVkZSAib3BkX2Fub24uaCIKKyNpbmNsdWRlICJvcGRfcGVyZm1vbi5oIgorI2luY2x1ZGUgIm9wZF9wcmludGYuaCIKKyNpbmNsdWRlICJvcGRfZXh0ZW5kZWQuaCIKKworI2luY2x1ZGUgIm9wX3ZlcnNpb24uaCIKKyNpbmNsdWRlICJvcF9jb25maWcuaCIKKyNpbmNsdWRlICJvcF9kZXZpY2Vpby5oIgorI2luY2x1ZGUgIm9wX2dldF90aW1lLmgiCisjaW5jbHVkZSAib3BfbGliaWJlcnR5LmgiCisjaW5jbHVkZSAib3BfZmlsZWlvLmgiCisKKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2luY2x1ZGUgPHdhaXQuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworc2l6ZV90IGtlcm5lbF9wb2ludGVyX3NpemU7CisKK3N0YXRpYyBmZF90IGRldmZkOworc3RhdGljIGNoYXIgKiBzYnVmOworc3RhdGljIHNpemVfdCBzX2J1Zl9ieXRlc2l6ZTsKK2V4dGVybiBjaGFyICogc2Vzc2lvbl9kaXI7CitzdGF0aWMgY2hhciBzdGFydF90aW1lX3N0clszMl07CitzdGF0aWMgaW50IGppdF9jb252ZXJzaW9uX3J1bm5pbmc7CisKK3N0YXRpYyB2b2lkIG9wZF9zaWdodXAodm9pZCk7CitzdGF0aWMgdm9pZCBvcGRfYWxhcm0odm9pZCk7CitzdGF0aWMgdm9pZCBvcGRfc2lndGVybSh2b2lkKTsKK3N0YXRpYyB2b2lkIG9wZF9zaWdjaGlsZCh2b2lkKTsKK3N0YXRpYyB2b2lkIG9wZF9kb19qaXRkdW1wcyh2b2lkKTsKKworLyoqCisgKiBvcGRfb3Blbl9maWxlcyAtIG9wZW4gbmVjZXNzYXJ5IGZpbGVzCisgKgorICogT3BlbiB0aGUgZGV2aWNlIGZpbGVzIGFuZCB0aGUgbG9nIGZpbGUsCisgKiBhbmQgbW1hcCgpIHRoZSBoYXNoIG1hcC4KKyAqLworc3RhdGljIHZvaWQgb3BkX29wZW5fZmlsZXModm9pZCkKK3sKKwlkZXZmZCA9IG9wX29wZW5fZGV2aWNlKCIvZGV2L29wcm9maWxlL2J1ZmZlciIpOworCWlmIChkZXZmZCA9PSAtMSkgeworCQlpZiAoZXJybm8gPT0gRUlOVkFMKQorCQkJZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gb3BlbiBkZXZpY2UuIFBvc3NpYmx5IHlvdSBoYXZlIHBhc3NlZCBpbmNvcnJlY3RcbiIKKwkJCQkicGFyYW1ldGVycy4gQ2hlY2sgL3Zhci9sb2cvbWVzc2FnZXMuIik7CisJCWVsc2UKKwkJCXBlcnJvcigiRmFpbGVkIHRvIG9wZW4gcHJvZmlsZSBkZXZpY2UiKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKworCS8qIGdpdmUgb3V0cHV0IGJlZm9yZSByZS1vcGVuaW5nIHN0ZG91dCBhcyB0aGUgbG9nZmlsZSAqLworCXByaW50ZigiVXNpbmcgbG9nIGZpbGUgJXNcbiIsIG9wX2xvZ19maWxlKTsKKworCS8qIHNldCB1cCBsb2dmaWxlICovCisJY2xvc2UoMCk7CisJY2xvc2UoMSk7CisKKwlpZiAob3BlbigiL2Rldi9udWxsIiwgT19SRE9OTFkpID09IC0xKSB7CisJCXBlcnJvcigib3Byb2ZpbGVkOiBjb3VsZG4ndCByZS1vcGVuIHN0ZGluIGFzIC9kZXYvbnVsbDogIik7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisKKwlvcGRfb3Blbl9sb2dmaWxlKCk7CisJb3BkX2NyZWF0ZV9waXBlKCk7CisKKwlwcmludGYoIm9wcm9maWxlZCBzdGFydGVkICVzIiwgb3BfZ2V0X3RpbWUoKSk7CisJcHJpbnRmKCJrZXJuZWwgcG9pbnRlciBzaXplOiAlbHVcbiIsCisJCSh1bnNpZ25lZCBsb25nKWtlcm5lbF9wb2ludGVyX3NpemUpOworCWZmbHVzaChzdGRvdXQpOworfQorIAorCisvKiogRG9uZSB3cml0aW5nIG91dCB0aGUgc2FtcGxlcywgaW5kaWNhdGUgd2l0aCBjb21wbGV0ZV9kdW1wIGZpbGUgKi8KK3N0YXRpYyB2b2lkIGNvbXBsZXRlX2R1bXAodm9pZCkKK3sKKwlGSUxFICogc3RhdHVzX2ZpbGU7CisKK3JldHJ5OgorCXN0YXR1c19maWxlID0gZm9wZW4ob3BfZHVtcF9zdGF0dXMsICJ3Iik7CisKKwlpZiAoIXN0YXR1c19maWxlICYmIGVycm5vID09IEVNRklMRSkgeworCQlpZiAoc2ZpbGVfbHJ1X2NsZWFyKCkpIHsKKwkJCXByaW50ZigiTFJVIGNsZWFyZWQgYnV0IGZpbGUgb3BlbiBmYWlscyBmb3IgJXMuXG4iLAorCQkJICAgICAgIG9wX2R1bXBfc3RhdHVzKTsKKwkJCWFib3J0KCk7CisJCX0KKwkJZ290byByZXRyeTsKKwl9CisKKwlpZiAoIXN0YXR1c19maWxlKSB7CisJCXBlcnJvcigid2FybmluZzogY291bGRuJ3Qgc2V0IGNvbXBsZXRlX2R1bXA6ICIpOworCQlyZXR1cm47CisJfQorCisJZnByaW50ZihzdGF0dXNfZmlsZSwgIjFcbiIpOworCWZjbG9zZShzdGF0dXNfZmlsZSk7Cit9CisKKyAKKy8qKgorICogb3BkX2RvX3NhbXBsZXMgLSBwcm9jZXNzIGEgc2FtcGxlIGJ1ZmZlcgorICogQHBhcmFtIG9wZF9idWYgIGJ1ZmZlciB0byBwcm9jZXNzCisgKgorICogUHJvY2VzcyBhIGJ1ZmZlciBvZiBzYW1wbGVzLgorICoKKyAqIElmIHRoZSBzYW1wbGUgY291bGQgYmUgcHJvY2Vzc2VkIGNvcnJlY3RseSwgaXQgaXMgd3JpdHRlbgorICogdG8gdGhlIHJlbGV2YW50IHNhbXBsZSBmaWxlLgorICovCitzdGF0aWMgdm9pZCBvcGRfZG9fc2FtcGxlcyhjaGFyIGNvbnN0ICogb3BkX2J1Ziwgc3NpemVfdCBjb3VudCkKK3sKKwlzaXplX3QgbnVtID0gY291bnQgLyBrZXJuZWxfcG9pbnRlcl9zaXplOworIAorCW9wZF9zdGF0c1tPUERfRFVNUF9DT1VOVF0rKzsKKworCXZlcmJwcmludGYodm1pc2MsICJSZWFkIGJ1ZmZlciBvZiAlZCBlbnRyaWVzLlxuIiwgKHVuc2lnbmVkIGludCludW0pOworIAorCW9wZF9wcm9jZXNzX3NhbXBsZXMob3BkX2J1ZiwgbnVtKTsKKworCWNvbXBsZXRlX2R1bXAoKTsKK30KKyAKK3N0YXRpYyB2b2lkIG9wZF9kb19qaXRkdW1wcyh2b2lkKQoreyAKKwlwaWRfdCBjaGlsZHBpZDsKKwlpbnQgYXJnX251bTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgZW5kX3RpbWUgPSAwVUxMOworCXN0cnVjdCB0aW1ldmFsIHR2OworCWNoYXIgZW5kX3RpbWVfc3RyWzMyXTsKKwljaGFyIG9waml0Y29udl9wYXRoW1BBVEhfTUFYICsgMV07CisJY2hhciAqIGV4ZWNfYXJnc1s2XTsKKworCWlmIChqaXRfY29udmVyc2lvbl9ydW5uaW5nKQorCQlyZXR1cm47CisJaml0X2NvbnZlcnNpb25fcnVubmluZyA9IDE7CisKKwljaGlsZHBpZCA9IGZvcmsoKTsKKwlzd2l0Y2ggKGNoaWxkcGlkKSB7CisJCWNhc2UgLTE6CisJCQlwZXJyb3IoIkVycm9yIGZvcmtpbmcgSklUIGR1bXAgcHJvY2VzcyEiKTsKKwkJCWJyZWFrOworCQljYXNlIDA6CisJCQlnZXR0aW1lb2ZkYXkoJnR2LCBOVUxMKTsKKwkJCWVuZF90aW1lID0gdHYudHZfc2VjOworCQkJc3ByaW50ZihlbmRfdGltZV9zdHIsICIlbGx1IiwgZW5kX3RpbWUpOworCQkJc3ByaW50ZihvcGppdGNvbnZfcGF0aCwgIiVzLyVzIiwgT1BfQklORElSLCAib3BqaXRjb252Iik7CisJCQlhcmdfbnVtID0gMDsKKwkJCWV4ZWNfYXJnc1thcmdfbnVtKytdID0gIm9waml0Y29udiI7CisJCQlpZiAodm1pc2MpCisJCQkJZXhlY19hcmdzW2FyZ19udW0rK10gPSAiLWQiOworCQkJZXhlY19hcmdzW2FyZ19udW0rK10gPSBzZXNzaW9uX2RpcjsKKwkJCWV4ZWNfYXJnc1thcmdfbnVtKytdID0gc3RhcnRfdGltZV9zdHI7CisJCQlleGVjX2FyZ3NbYXJnX251bSsrXSA9IGVuZF90aW1lX3N0cjsKKwkJCWV4ZWNfYXJnc1thcmdfbnVtXSA9IChjaGFyICopIE5VTEw7CisJCQlleGVjdnAob3BqaXRjb252X3BhdGgsIGV4ZWNfYXJncyk7CisJCQlmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byBleGVjICVzOiAlc1xuIiwKKwkJCSAgICAgICAgZXhlY19hcmdzWzBdLCBzdHJlcnJvcihlcnJubykpOworCQkJLyogV2UgZG9uJ3Qgd2FudCBhbnkgY2xlYW51cCBpbiB0aGUgY2hpbGQgKi8KKwkJCV9leGl0KEVYSVRfRkFJTFVSRSk7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwl9IAorCit9IAorCisvKioKKyAqIG9wZF9kb19yZWFkIC0gZW50ZXIgcHJvY2Vzc2luZyBsb29wCisgKiBAcGFyYW0gYnVmICBidWZmZXIgdG8gcmVhZCBpbnRvCisgKiBAcGFyYW0gc2l6ZSAgc2l6ZSBvZiBidWZmZXIKKyAqCisgKiBSZWFkIHNvbWUgb2YgYSBidWZmZXIgZnJvbSB0aGUgZGV2aWNlIGFuZCBwcm9jZXNzCisgKiB0aGUgY29udGVudHMuCisgKi8KK3N0YXRpYyB2b2lkIG9wZF9kb19yZWFkKGNoYXIgKiBidWYsIHNpemVfdCBzaXplKQoreworCW9wZF9vcGVuX3BpcGUoKTsKKworCXdoaWxlICgxKSB7CisJCXNzaXplX3QgY291bnQgPSAtMTsKKworCQkvKiBsb29wIHRvIGhhbmRsZSBFSU5UUiAqLworCQl3aGlsZSAoY291bnQgPCAwKSB7CisJCQljb3VudCA9IG9wX3JlYWRfZGV2aWNlKGRldmZkLCBidWYsIHNpemUpOworCisJCQkvKiB3ZSBjYW4gbG9zZSBhbiBhbGFybSBvciBhIGh1cCBidXQKKwkJCSAqIHdlIGRvbid0IGNhcmUuCisJCQkgKi8KKwkJCWlmIChzaWduYWxfYWxhcm0pIHsKKwkJCQlzaWduYWxfYWxhcm0gPSAwOworCQkJCW9wZF9hbGFybSgpOworCQkJfQorCisJCQlpZiAoc2lnbmFsX2h1cCkgeworCQkJCXNpZ25hbF9odXAgPSAwOworCQkJCW9wZF9zaWdodXAoKTsKKwkJCX0KKworCQkJaWYgKHNpZ25hbF90ZXJtKQorCQkJCW9wZF9zaWd0ZXJtKCk7CisKKwkJCWlmIChzaWduYWxfY2hpbGQpCisJCQkJb3BkX3NpZ2NoaWxkKCk7CisKKwkJCWlmIChzaWduYWxfdXNyMSkgeworCQkJCXNpZ25hbF91c3IxID0gMDsKKwkJCQlwZXJmbW9uX3N0YXJ0KCk7CisJCQl9CisKKwkJCWlmIChzaWduYWxfdXNyMikgeworCQkJCXNpZ25hbF91c3IyID0gMDsKKwkJCQlwZXJmbW9uX3N0b3AoKTsKKwkJCX0KKworCQkJaWYgKGlzX2ppdGNvbnZfcmVxdWVzdGVkKCkpIHsKKwkJCQl2ZXJicHJpbnRmKHZtaXNjLCAiU3RhcnQgb3BqaXRjb252IHdhcyB0cmlnZ2VyZWRcbiIpOworCQkJCW9wZF9kb19qaXRkdW1wcygpOworCQkJfQorCQl9CisKKwkJb3BkX2RvX3NhbXBsZXMoYnVmLCBjb3VudCk7CisJfQorCQorCW9wZF9jbG9zZV9waXBlKCk7Cit9CisKKworLyoqIG9wZF9hbGFybSAtIHN5bmMgZmlsZXMgYW5kIHJlcG9ydCBzdGF0cyAqLworc3RhdGljIHZvaWQgb3BkX2FsYXJtKHZvaWQpCit7CisJc2ZpbGVfc3luY19maWxlcygpOworCW9wZF9wcmludF9zdGF0cygpOworCWFsYXJtKDYwICogMTApOworfQorIAorCisvKiogcmUtb3BlbiBmaWxlcyBmb3IgbG9ncm90YXRlL29wY29udHJvbCAtLXJlc2V0ICovCitzdGF0aWMgdm9pZCBvcGRfc2lnaHVwKHZvaWQpCit7CisJcHJpbnRmKCJSZWNlaXZlZCBTSUdIVVAuXG4iKTsKKwkvKiBXZSBqdXN0IGNsb3NlIHRoZW0sIGFuZCByZS1vcGVuIHRoZW0gbGF6aWx5IGFzIHVzdWFsLiAqLworCXNmaWxlX2Nsb3NlX2ZpbGVzKCk7CisJY2xvc2UoMSk7CisJY2xvc2UoMik7CisJb3BkX29wZW5fbG9nZmlsZSgpOworfQorCisKK3N0YXRpYyB2b2lkIGNsZWFuX2V4aXQodm9pZCkKK3sKKwlwZXJmbW9uX2V4aXQoKTsKKwl1bmxpbmsob3BfbG9ja19maWxlKTsKK30KKworCitzdGF0aWMgdm9pZCBvcGRfc2lndGVybSh2b2lkKQoreworCW9wZF9kb19qaXRkdW1wcygpOworCW9wZF9wcmludF9zdGF0cygpOworCXByaW50Zigib3Byb2ZpbGVkIHN0b3BwZWQgJXMiLCBvcF9nZXRfdGltZSgpKTsKKwlvcGRfZXh0X2RlaW5pdGlhbGl6ZSgpOworCisJZXhpdChFWElUX0ZBSUxVUkUpOworfQorCisvKiBTSUdDSExEIHJlY2VpdmVkIGZyb20gSklUIGR1bXAgY2hpbGQgcHJvY2Vzcy4gKi8KK3N0YXRpYyB2b2lkIG9wZF9zaWdjaGlsZCh2b2lkKQoreworCWludCBjaGlsZF9zdGF0dXM7CisJd2FpdCgmY2hpbGRfc3RhdHVzKTsKKwlqaXRfY29udmVyc2lvbl9ydW5uaW5nID0gMDsKKwlpZiAoV0lGRVhJVEVEKGNoaWxkX3N0YXR1cykgJiYgKCFXRVhJVFNUQVRVUyhjaGlsZF9zdGF0dXMpKSkgeworCQl2ZXJicHJpbnRmKHZtaXNjLCAiSklUIGR1bXAgcHJvY2Vzc2luZyBjb21wbGV0ZS5cbiIpOworCX0gZWxzZSB7CisJCXByaW50ZigiSklUIGR1bXAgcHJvY2Vzc2luZyBleGl0ZWQgYWJub3JtYWxseTogJWRcbiIsCisJCSAgICAgICBXRVhJVFNUQVRVUyhjaGlsZF9zdGF0dXMpKTsKKwl9CisKK30KKyAKK3N0YXRpYyB2b2lkIG9wZF8yNl9pbml0KHZvaWQpCit7CisJc2l6ZV90IGk7CisJc2l6ZV90IG9wZF9idWZfc2l6ZTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgc3RhcnRfdGltZSA9IDBVTEw7CisJc3RydWN0IHRpbWV2YWwgdHY7CisKKwlvcGRfY3JlYXRlX3ZtbGludXgodm1saW51eCwga2VybmVsX3JhbmdlKTsKKwlvcGRfY3JlYXRlX3hlbih4ZW5pbWFnZSwgeGVuX3JhbmdlKTsKKworCW9wZF9idWZfc2l6ZSA9IG9wZF9yZWFkX2ZzX2ludCgiL2Rldi9vcHJvZmlsZS8iLCAiYnVmZmVyX3NpemUiLCAxKTsKKwlrZXJuZWxfcG9pbnRlcl9zaXplID0gb3BkX3JlYWRfZnNfaW50KCIvZGV2L29wcm9maWxlLyIsICJwb2ludGVyX3NpemUiLCAxKTsKKworCXNfYnVmX2J5dGVzaXplID0gb3BkX2J1Zl9zaXplICoga2VybmVsX3BvaW50ZXJfc2l6ZTsKKworCXNidWYgPSB4bWFsbG9jKHNfYnVmX2J5dGVzaXplKTsKKworCW9wZF9yZXJlYWRfbW9kdWxlX2luZm8oKTsKKworCWZvciAoaSA9IDA7IGkgPCBPUERfTUFYX1NUQVRTOyBpKyspCisJCW9wZF9zdGF0c1tpXSA9IDA7CisKKwlwZXJmbW9uX2luaXQoKTsKKworCWNvb2tpZV9pbml0KCk7CisJc2ZpbGVfaW5pdCgpOworCWFub25faW5pdCgpOworCisJLyogbXVzdCBiZSAvYWZ0ZXIvIHBlcmZtb25faW5pdCgpIGF0IGxlYXN0ICovCisJaWYgKGF0ZXhpdChjbGVhbl9leGl0KSkgeworCQlwZXJmbW9uX2V4aXQoKTsKKwkJcGVycm9yKCJvcHJvZmlsZWQ6IGNvdWxkbid0IHNldCBleGl0IGNsZWFudXA6ICIpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorCisJLyogdHJpZ2dlciBrZXJuZWwgbW9kdWxlIHNldHVwIGJlZm9yZSByZXR1cm5pbmcgY29udHJvbCB0byBvcGNvbnRyb2wgKi8KKwlvcGRfb3Blbl9maWxlcygpOworCWdldHRpbWVvZmRheSgmdHYsIE5VTEwpOworCXN0YXJ0X3RpbWUgPSAwVUxMOworCXN0YXJ0X3RpbWUgPSB0di50dl9zZWM7CisJc3ByaW50ZihzdGFydF90aW1lX3N0ciwgIiVsbHUiLCBzdGFydF90aW1lKTsKKwkJICAKK30KKworCitzdGF0aWMgdm9pZCBvcGRfMjZfc3RhcnQodm9pZCkKK3sKKwkvKiBzaW1wbGUgc2xlZXAtdGhlbi1wcm9jZXNzIGxvb3AgKi8KKwlvcGRfZG9fcmVhZChzYnVmLCBzX2J1Zl9ieXRlc2l6ZSk7Cit9CisKKworc3RhdGljIHZvaWQgb3BkXzI2X2V4aXQodm9pZCkKK3sKKwlvcGRfcHJpbnRfc3RhdHMoKTsKKwlwcmludGYoIm9wcm9maWxlZCBzdG9wcGVkICVzIiwgb3BfZ2V0X3RpbWUoKSk7CisKKwlmcmVlKHNidWYpOworCWZyZWUodm1saW51eCk7CisJLyogRklYTUU6IGZyZWUga2VybmVsIGltYWdlcywgc2ZpbGVzIGV0Yy4gKi8KK30KKworc3RydWN0IG9wcm9maWxlZF9vcHMgb3BkXzI2X29wcyA9IHsKKwkuaW5pdCA9IG9wZF8yNl9pbml0LAorCS5zdGFydCA9IG9wZF8yNl9zdGFydCwKKwkuZXhpdCA9IG9wZF8yNl9leGl0LAorfTsKZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2RhZW1vbi9saWJsZWdhY3kvTWFrZWZpbGUuYW0gYi9vcHJvZmlsZS0wLjkuNy9kYWVtb24vbGlibGVnYWN5L01ha2VmaWxlLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxMDc4YTYKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9kYWVtb24vbGlibGVnYWN5L01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsMjggQEAKK25vaW5zdF9MSUJSQVJJRVMgPSBsaWJsZWdhY3kuYQorCisjIC1mbm8tb21pdC1mcmFtZS1wb2ludGVyIG5lZWRlZCBmb3IgZGFlbW9uIGJ1aWxkOiBzZWUgQ2hhbmdlTG9nLTIwMDQgMDItMjMKK0FNX0NGTEFHUyA9IEBPUF9DRkxBR1NAIC1mbm8tb21pdC1mcmFtZS1wb2ludGVyCisKK0FNX0NQUEZMQUdTID0gXAorCS1JICR7dG9wX3NyY2Rpcn0vbGlidXRpbCBcCisJLUkgJHt0b3Bfc3JjZGlyfS9saWJvcCBcCisJLUkgJHt0b3Bfc3JjZGlyfS9saWJkYiBcCisJLUkgJHt0b3Bfc3JjZGlyfS9kYWVtb24KKworbGlibGVnYWN5X2FfU09VUkNFUyA9IFwKKwlvcGRfMjRfc3RhdHMuYyBcCisJb3BkXzI0X3N0YXRzLmggXAorCW9wZF9rZXJuZWwuYyBcCisJb3BkX3Byb2MuYyBcCisJb3BkX2ltYWdlLmMgXAorCW9wZF9tYXBwaW5nLmMgXAorCW9wZF9wYXJzZV9wcm9jLmMgXAorCW9wZF9pbWFnZS5oIFwKKwlvcGRfbWFwcGluZy5oIFwKKwlwX21vZHVsZS5oIFwKKwlvcGRfa2VybmVsLmggXAorCW9wZF9wYXJzZV9wcm9jLmggXAorCW9wZF9wcm9jLmggXAorCW9wZF9zYW1wbGVfZmlsZXMuYyBcCisJb3BkX3NhbXBsZV9maWxlcy5oIFwKKwlpbml0LmMKZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2RhZW1vbi9saWJsZWdhY3kvTWFrZWZpbGUuaW4gYi9vcHJvZmlsZS0wLjkuNy9kYWVtb24vbGlibGVnYWN5L01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3NDU2MGQKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9kYWVtb24vbGlibGVnYWN5L01ha2VmaWxlLmluCkBAIC0wLDAgKzEsNTU4IEBACisjIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjExLjEgZnJvbSBNYWtlZmlsZS5hbS4KKyMgQGNvbmZpZ3VyZV9pbnB1dEAKKworIyBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsCisjIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyMgSW5jLgorIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAorIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCisjIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworQFNFVF9NQUtFQAorCitWUEFUSCA9IEBzcmNkaXJACitwa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKK3BrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAorcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAorcGtnbGliZXhlY2RpciA9ICQobGliZXhlY2RpcikvQFBBQ0tBR0VACithbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCitpbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAoraW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYworaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCitJTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQordHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQorTk9STUFMX0lOU1RBTEwgPSA6CitQUkVfSU5TVEFMTCA9IDoKK1BPU1RfSU5TVEFMTCA9IDoKK05PUk1BTF9VTklOU1RBTEwgPSA6CitQUkVfVU5JTlNUQUxMID0gOgorUE9TVF9VTklOU1RBTEwgPSA6CitidWlsZF90cmlwbGV0ID0gQGJ1aWxkQAoraG9zdF90cmlwbGV0ID0gQGhvc3RACitzdWJkaXIgPSBkYWVtb24vbGlibGVnYWN5CitESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKHNyY2RpcikvTWFrZWZpbGUuaW4KK0FDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKK2FtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL200L2JpbnV0aWxzLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2J1aWx0aW5leHBlY3QubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY2VsbHNwdWJmZHN1cHBvcnQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY29tcGlsZXJvcHRpb24ubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY29uZmlnbW9kdWxlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2NvcHlpZmNoYW5nZS5tNCAkKHRvcF9zcmNkaXIpL200L2RvY2Jvb2subTQgXAorCSQodG9wX3NyY2RpcikvbTQvZXh0cmFkaXJzLm00ICQodG9wX3NyY2RpcikvbTQvZmluZGtlcm5lbC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9rZXJuZWxvcHRpb24ubTQgXAorCSQodG9wX3NyY2RpcikvbTQva2VybmVsdmVyc2lvbi5tNCAkKHRvcF9zcmNkaXIpL200L2xpYnRvb2wubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbHRvcHRpb25zLm00ICQodG9wX3NyY2RpcikvbTQvbHRzdWdhci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9sdHZlcnNpb24ubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdH5vYnNvbGV0ZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9tYWxsb2NhdHRyaWJ1dGUubTQgXAorCSQodG9wX3NyY2RpcikvbTQvcG9wdGNvbnN0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3ByZWNvbXBpbGVkaGVhZGVyLm00ICQodG9wX3NyY2RpcikvbTQvcXQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvcmVzdWx0eW4ubTQgJCh0b3Bfc3JjZGlyKS9tNC9zc3RyZWFtLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3R5cGVkZWYubTQgJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuaW4KK2FtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCisJJChBQ0xPQ0FMX000KQorbWtpbnN0YWxsZGlycyA9ICQoaW5zdGFsbF9zaCkgLWQKK0NPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvY29uZmlnLmgKK0NPTkZJR19DTEVBTl9GSUxFUyA9CitDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMgPQorTElCUkFSSUVTID0gJChub2luc3RfTElCUkFSSUVTKQorQVJGTEFHUyA9IGNydQorbGlibGVnYWN5X2FfQVIgPSAkKEFSKSAkKEFSRkxBR1MpCitsaWJsZWdhY3lfYV9MSUJBREQgPQorYW1fbGlibGVnYWN5X2FfT0JKRUNUUyA9IG9wZF8yNF9zdGF0cy4kKE9CSkVYVCkgb3BkX2tlcm5lbC4kKE9CSkVYVCkgXAorCW9wZF9wcm9jLiQoT0JKRVhUKSBvcGRfaW1hZ2UuJChPQkpFWFQpIG9wZF9tYXBwaW5nLiQoT0JKRVhUKSBcCisJb3BkX3BhcnNlX3Byb2MuJChPQkpFWFQpIG9wZF9zYW1wbGVfZmlsZXMuJChPQkpFWFQpIFwKKwlpbml0LiQoT0JKRVhUKQorbGlibGVnYWN5X2FfT0JKRUNUUyA9ICQoYW1fbGlibGVnYWN5X2FfT0JKRUNUUykKK0RFRkFVTFRfSU5DTFVERVMgPSAtSS5AYW1fX2lzcmNAIC1JJCh0b3BfYnVpbGRkaXIpCitkZXBjb21wID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9kZXBjb21wCithbV9fZGVwZmlsZXNfbWF5YmUgPSBkZXBmaWxlcworYW1fX212ID0gbXYgLWYKK0NPTVBJTEUgPSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgXAorCSQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKK0xUQ09NUElMRSA9ICQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSBcCisJLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpIFwKKwkkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpCitDQ0xEID0gJChDQykKK0xJTksgPSAkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgXAorCS0tbW9kZT1saW5rICQoQ0NMRCkgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAkKEFNX0xERkxBR1MpIFwKKwkkKExERkxBR1MpIC1vICRACitTT1VSQ0VTID0gJChsaWJsZWdhY3lfYV9TT1VSQ0VTKQorRElTVF9TT1VSQ0VTID0gJChsaWJsZWdhY3lfYV9TT1VSQ0VTKQorRVRBR1MgPSBldGFncworQ1RBR1MgPSBjdGFncworRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKK0FDTE9DQUwgPSBAQUNMT0NBTEAKK0FNVEFSID0gQEFNVEFSQAorQVIgPSBAQVJACitBVVRPQ09ORiA9IEBBVVRPQ09ORkAKK0FVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKK0FVVE9NQUtFID0gQEFVVE9NQUtFQAorQVdLID0gQEFXS0AKK0JGRF9MSUJTID0gQEJGRF9MSUJTQAorQ0FUX0VOVFJZX0VORCA9IEBDQVRfRU5UUllfRU5EQAorQ0FUX0VOVFJZX1NUQVJUID0gQENBVF9FTlRSWV9TVEFSVEAKK0NDID0gQENDQAorQ0NERVBNT0RFID0gQENDREVQTU9ERUAKK0NGTEFHUyA9IEBDRkxBR1NACitDUFAgPSBAQ1BQQAorQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACitDWFggPSBAQ1hYQAorQ1hYQ1BQID0gQENYWENQUEAKK0NYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKK0NYWEZMQUdTID0gQENYWEZMQUdTQAorQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKK0RBVEUgPSBAREFURUAKK0RFRlMgPSBAREVGU0AKK0RFUERJUiA9IEBERVBESVJACitET0NCT09LX1JPT1QgPSBARE9DQk9PS19ST09UQAorRFNZTVVUSUwgPSBARFNZTVVUSUxACitEVU1QQklOID0gQERVTVBCSU5ACitFQ0hPX0MgPSBARUNIT19DQAorRUNIT19OID0gQEVDSE9fTkAKK0VDSE9fVCA9IEBFQ0hPX1RACitFR1JFUCA9IEBFR1JFUEAKK0VYRUVYVCA9IEBFWEVFWFRACitFWFRSQV9DRkxBR1NfTU9EVUxFID0gQEVYVFJBX0NGTEFHU19NT0RVTEVACitGR1JFUCA9IEBGR1JFUEAKK0dSRVAgPSBAR1JFUEAKK0lOU1RBTEwgPSBASU5TVEFMTEAKK0lOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACitJTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAorSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACitJTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAorSkFWQV9IT01FRElSID0gQEpBVkFfSE9NRURJUkAKK0tJTkMgPSBAS0lOQ0AKK0tTUkMgPSBAS1NSQ0AKK0tWRVJTID0gQEtWRVJTQAorTEQgPSBATERACitMREZMQUdTID0gQExERkxBR1NACitMSUJFUlRZX0xJQlMgPSBATElCRVJUWV9MSUJTQAorTElCT0JKUyA9IEBMSUJPQkpTQAorTElCUyA9IEBMSUJTQAorTElCVE9PTCA9IEBMSUJUT09MQAorTElQTyA9IEBMSVBPQAorTE5fUyA9IEBMTl9TQAorTFRMSUJPQkpTID0gQExUTElCT0JKU0AKK01BS0VJTkZPID0gQE1BS0VJTkZPQAorTUtESVJfUCA9IEBNS0RJUl9QQAorTU9DID0gQE1PQ0AKK01PRElOU1RBTExESVIgPSBATU9ESU5TVEFMTERJUkAKK05NID0gQE5NQAorTk1FRElUID0gQE5NRURJVEAKK09CSkRVTVAgPSBAT0JKRFVNUEAKK09CSkVYVCA9IEBPQkpFWFRACitPUFJPRklMRV9ESVIgPSBAT1BST0ZJTEVfRElSQAorT1BST0ZJTEVfTU9EVUxFX0FSQ0ggPSBAT1BST0ZJTEVfTU9EVUxFX0FSQ0hACitPUF9DRkxBR1MgPSBAT1BfQ0ZMQUdTQAorT1BfQ1hYRkxBR1MgPSBAT1BfQ1hYRkxBR1NACitPUF9ET0NESVIgPSBAT1BfRE9DRElSQAorT1RPT0wgPSBAT1RPT0xACitPVE9PTDY0ID0gQE9UT09MNjRACitQQUNLQUdFID0gQFBBQ0tBR0VACitQQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKK1BBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACitQQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKK1BBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACitQQUNLQUdFX1VSTCA9IEBQQUNLQUdFX1VSTEAKK1BBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACitQQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKK1BLR19DT05GSUcgPSBAUEtHX0NPTkZJR0AKK1BLR19DT05GSUdfTElCRElSID0gQFBLR19DT05GSUdfTElCRElSQAorUEtHX0NPTkZJR19QQVRIID0gQFBLR19DT05GSUdfUEFUSEAKK1BPUFRfTElCUyA9IEBQT1BUX0xJQlNACitQVFJESUZGX1RfVFlQRSA9IEBQVFJESUZGX1RfVFlQRUAKK1FUX0NGTEFHUyA9IEBRVF9DRkxBR1NACitRVF9JTkNMVURFUyA9IEBRVF9JTkNMVURFU0AKK1FUX0xERkxBR1MgPSBAUVRfTERGTEFHU0AKK1FUX0xJQiA9IEBRVF9MSUJACitRVF9MSUJTID0gQFFUX0xJQlNACitRVF9WRVJTSU9OID0gQFFUX1ZFUlNJT05ACitSQU5MSUIgPSBAUkFOTElCQAorU0VEID0gQFNFREAKK1NFVF9NQUtFID0gQFNFVF9NQUtFQAorU0hFTEwgPSBAU0hFTExACitTSVpFX1RfVFlQRSA9IEBTSVpFX1RfVFlQRUAKK1NUUklQID0gQFNUUklQQAorVUlDID0gQFVJQ0AKK1VJQ2hlbHAgPSBAVUlDaGVscEAKK1ZFUlNJT04gPSBAVkVSU0lPTkAKK1hNS01GID0gQFhNS01GQAorWE1MX0NBVEFMT0cgPSBAWE1MX0NBVEFMT0dACitYU0xUUFJPQyA9IEBYU0xUUFJPQ0AKK1hTTFRQUk9DX0ZMQUdTID0gQFhTTFRQUk9DX0ZMQUdTQAorWF9DRkxBR1MgPSBAWF9DRkxBR1NACitYX0VYVFJBX0xJQlMgPSBAWF9FWFRSQV9MSUJTQAorWF9MSUJTID0gQFhfTElCU0AKK1hfUFJFX0xJQlMgPSBAWF9QUkVfTElCU0AKK2Fic19idWlsZGRpciA9IEBhYnNfYnVpbGRkaXJACithYnNfc3JjZGlyID0gQGFic19zcmNkaXJACithYnNfdG9wX2J1aWxkZGlyID0gQGFic190b3BfYnVpbGRkaXJACithYnNfdG9wX3NyY2RpciA9IEBhYnNfdG9wX3NyY2RpckAKK2FjX2N0X0NDID0gQGFjX2N0X0NDQAorYWNfY3RfQ1hYID0gQGFjX2N0X0NYWEAKK2FjX2N0X0RVTVBCSU4gPSBAYWNfY3RfRFVNUEJJTkAKK2FtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAorYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKK2FtX19xdW90ZSA9IEBhbV9fcXVvdGVACithbV9fdGFyID0gQGFtX190YXJACithbV9fdW50YXIgPSBAYW1fX3VudGFyQAorYmluZGlyID0gQGJpbmRpckAKK2J1aWxkID0gQGJ1aWxkQAorYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACitidWlsZF9jcHUgPSBAYnVpbGRfY3B1QAorYnVpbGRfb3MgPSBAYnVpbGRfb3NACitidWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAorYnVpbGRkaXIgPSBAYnVpbGRkaXJACitkYXRhZGlyID0gQGRhdGFkaXJACitkYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKK2RvY2RpciA9IEBkb2NkaXJACitkdmlkaXIgPSBAZHZpZGlyQAorZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACitob3N0ID0gQGhvc3RACitob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACitob3N0X2NwdSA9IEBob3N0X2NwdUAKK2hvc3Rfb3MgPSBAaG9zdF9vc0AKK2hvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAoraHRtbGRpciA9IEBodG1sZGlyQAoraW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAoraW5mb2RpciA9IEBpbmZvZGlyQAoraW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAorbGliZGlyID0gQGxpYmRpckAKK2xpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKK2xvY2FsZWRpciA9IEBsb2NhbGVkaXJACitsb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACitsdF9FQ0hPID0gQGx0X0VDSE9ACittYW5kaXIgPSBAbWFuZGlyQAorbWtkaXJfcCA9IEBta2Rpcl9wQAorb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAorcGRmZGlyID0gQHBkZmRpckAKK3ByZWZpeCA9IEBwcmVmaXhACitwcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACitwc2RpciA9IEBwc2RpckAKK3NiaW5kaXIgPSBAc2JpbmRpckAKK3NoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAorc3JjZGlyID0gQHNyY2RpckAKK3N5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKK3RhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACit0b3BfYnVpbGRfcHJlZml4ID0gQHRvcF9idWlsZF9wcmVmaXhACit0b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAordG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAordG9wZGlyID0gQHRvcGRpckAKK25vaW5zdF9MSUJSQVJJRVMgPSBsaWJsZWdhY3kuYQorCisjIC1mbm8tb21pdC1mcmFtZS1wb2ludGVyIG5lZWRlZCBmb3IgZGFlbW9uIGJ1aWxkOiBzZWUgQ2hhbmdlTG9nLTIwMDQgMDItMjMKK0FNX0NGTEFHUyA9IEBPUF9DRkxBR1NAIC1mbm8tb21pdC1mcmFtZS1wb2ludGVyCitBTV9DUFBGTEFHUyA9IFwKKwktSSAke3RvcF9zcmNkaXJ9L2xpYnV0aWwgXAorCS1JICR7dG9wX3NyY2Rpcn0vbGlib3AgXAorCS1JICR7dG9wX3NyY2Rpcn0vbGliZGIgXAorCS1JICR7dG9wX3NyY2Rpcn0vZGFlbW9uCisKK2xpYmxlZ2FjeV9hX1NPVVJDRVMgPSBcCisJb3BkXzI0X3N0YXRzLmMgXAorCW9wZF8yNF9zdGF0cy5oIFwKKwlvcGRfa2VybmVsLmMgXAorCW9wZF9wcm9jLmMgXAorCW9wZF9pbWFnZS5jIFwKKwlvcGRfbWFwcGluZy5jIFwKKwlvcGRfcGFyc2VfcHJvYy5jIFwKKwlvcGRfaW1hZ2UuaCBcCisJb3BkX21hcHBpbmcuaCBcCisJcF9tb2R1bGUuaCBcCisJb3BkX2tlcm5lbC5oIFwKKwlvcGRfcGFyc2VfcHJvYy5oIFwKKwlvcGRfcHJvYy5oIFwKKwlvcGRfc2FtcGxlX2ZpbGVzLmMgXAorCW9wZF9zYW1wbGVfZmlsZXMuaCBcCisJaW5pdC5jCisKK2FsbDogYWxsLWFtCisKKy5TVUZGSVhFUzoKKy5TVUZGSVhFUzogLmMgLmxvIC5vIC5vYmoKKyQoc3JjZGlyKS9NYWtlZmlsZS5pbjogICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJQGZvciBkZXAgaW4gJD87IGRvIFwKKwkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAorCSAgICAqJCRkZXAqKSBcCisJICAgICAgKCBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggKSBcCisJICAgICAgICAmJiB7IGlmIHRlc3QgLWYgJEA7IHRoZW4gZXhpdCAwOyBlbHNlIGJyZWFrOyBmaTsgfTsgXAorCSAgICAgIGV4aXQgMTs7IFwKKwkgIGVzYWM7IFwKKwlkb25lOyBcCisJZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1mb3JlaWduIGRhZW1vbi9saWJsZWdhY3kvTWFrZWZpbGUnOyBcCisJJChhbV9fY2QpICQodG9wX3NyY2RpcikgJiYgXAorCSAgJChBVVRPTUFLRSkgLS1mb3JlaWduIGRhZW1vbi9saWJsZWdhY3kvTWFrZWZpbGUKKy5QUkVDSU9VUzogTWFrZWZpbGUKK01ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKKwlAY2FzZSAnJD8nIGluIFwKKwkgICpjb25maWcuc3RhdHVzKikgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCisJICAqKSBcCisJICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKKwllc2FjOworCiskKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKworJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6ICAkKGFtX19jb25maWd1cmVfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyQoQUNMT0NBTF9NNCk6ICAkKGFtX19hY2xvY2FsX200X2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCiskKGFtX19hY2xvY2FsX200X2RlcHMpOgorCitjbGVhbi1ub2luc3RMSUJSQVJJRVM6CisJLXRlc3QgLXogIiQobm9pbnN0X0xJQlJBUklFUykiIHx8IHJtIC1mICQobm9pbnN0X0xJQlJBUklFUykKK2xpYmxlZ2FjeS5hOiAkKGxpYmxlZ2FjeV9hX09CSkVDVFMpICQobGlibGVnYWN5X2FfREVQRU5ERU5DSUVTKSAKKwktcm0gLWYgbGlibGVnYWN5LmEKKwkkKGxpYmxlZ2FjeV9hX0FSKSBsaWJsZWdhY3kuYSAkKGxpYmxlZ2FjeV9hX09CSkVDVFMpICQobGlibGVnYWN5X2FfTElCQUREKQorCSQoUkFOTElCKSBsaWJsZWdhY3kuYQorCittb3N0bHljbGVhbi1jb21waWxlOgorCS1ybSAtZiAqLiQoT0JKRVhUKQorCitkaXN0Y2xlYW4tY29tcGlsZToKKwktcm0gLWYgKi50YWIuYworCitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvaW5pdC5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvb3BkXzI0X3N0YXRzLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9vcGRfaW1hZ2UuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL29wZF9rZXJuZWwuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL29wZF9tYXBwaW5nLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9vcGRfcGFyc2VfcHJvYy5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvb3BkX3Byb2MuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL29wZF9zYW1wbGVfZmlsZXMuUG9AYW1fX3F1b3RlQAorCisuYy5vOgorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCAkPAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDT01QSUxFKSAtYyAkPAorCisuYy5vYmo6CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJCouVHBvIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ09NUElMRSkgLWMgYCQoQ1lHUEFUSF9XKSAnJDwnYAorCisuYy5sbzoKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoTFRDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCAkPAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExUQ09NUElMRSkgLWMgLW8gJEAgJDwKKworbW9zdGx5Y2xlYW4tbGlidG9vbDoKKwktcm0gLWYgKi5sbworCitjbGVhbi1saWJ0b29sOgorCS1ybSAtcmYgLmxpYnMgX2xpYnMKKworSUQ6ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKExJU1ApICQoVEFHU19GSUxFUykKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKwkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKwlta2lkIC1mSUQgJCR1bmlxdWUKK3RhZ3M6IFRBR1MKKworVEFHUzogICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAorCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKwlzZXQgeDsgXAorCWhlcmU9YHB3ZGA7IFwKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCisJICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCisJc2hpZnQ7IFwKKwlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCQqJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAorCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAorCSAgaWYgdGVzdCAkJCMgLWd0IDA7IHRoZW4gXAorCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCisJICAgICAgIiQkQCIgJCR1bmlxdWU7IFwKKwkgIGVsc2UgXAorCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCisJICAgICAgJCR1bmlxdWU7IFwKKwkgIGZpOyBcCisJZmkKK2N0YWdzOiBDVEFHUworQ1RBR1M6ICAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKKwkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHVuaXF1ZSIgXAorCSAgfHwgJChDVEFHUykgJChDVEFHU0ZMQUdTKSAkKEFNX0NUQUdTRkxBR1MpICQoQ1RBR1NfQVJHUykgXAorCSAgICAgJCR1bmlxdWUKKworR1RBR1M6CisJaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKKwkgICYmICQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpIFwKKwkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgIiQkaGVyZSIKKworZGlzdGNsZWFuLXRhZ3M6CisJLXJtIC1mIFRBR1MgSUQgR1RBR1MgR1JUQUdTIEdTWU1TIEdQQVRIIHRhZ3MKKworZGlzdGRpcjogJChESVNURklMRVMpCisJQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwlsaXN0PSckKERJU1RGSUxFUyknOyBcCisJICBkaXN0X2ZpbGVzPWBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRmaWxlOyBkb25lIHwgXAorCSAgc2VkIC1lICJzfF4kJHNyY2RpcnN0cmlwL3x8O3QiIFwKKwkgICAgICAtZSAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3w7dCJgOyBcCisJY2FzZSAkJGRpc3RfZmlsZXMgaW4gXAorCSAgKi8qKSAkKE1LRElSX1ApIGBlY2hvICIkJGRpc3RfZmlsZXMiIHwgXAorCQkJICAgc2VkICcvXC8vIWQ7c3xefCQoZGlzdGRpcikvfDtzLC9bXi9dKiQkLCwnIHwgXAorCQkJICAgc29ydCAtdWAgOzsgXAorCWVzYWM7IFwKKwlmb3IgZmlsZSBpbiAkJGRpc3RfZmlsZXM7IGRvIFwKKwkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKKwkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCisJICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCisJICAgIGlmIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRmaWxlIjsgdGhlbiBcCisJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisJICAgIGZpOyBcCisJICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAorCSAgICAgIGNwIC1mcFIgJChzcmNkaXIpLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKwkgICAgZmk7IFwKKwkgICAgY3AgLWZwUiAkJGQvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorCSAgZWxzZSBcCisJICAgIHRlc3QgLWYgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGV4aXQgMTsgXAorCSAgZmk7IFwKKwlkb25lCitjaGVjay1hbTogYWxsLWFtCitjaGVjazogY2hlY2stYW0KK2FsbC1hbTogTWFrZWZpbGUgJChMSUJSQVJJRVMpCitpbnN0YWxsZGlyczoKK2luc3RhbGw6IGluc3RhbGwtYW0KK2luc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLWFtCitpbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1hbQordW5pbnN0YWxsOiB1bmluc3RhbGwtYW0KKworaW5zdGFsbC1hbTogYWxsLWFtCisJQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KKworaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KK2luc3RhbGwtc3RyaXA6CisJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKKwkgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorCSAgYHRlc3QgLXogJyQoU1RSSVApJyB8fCBcCisJICAgIGVjaG8gIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciYCBpbnN0YWxsCittb3N0bHljbGVhbi1nZW5lcmljOgorCitjbGVhbi1nZW5lcmljOgorCitkaXN0Y2xlYW4tZ2VuZXJpYzoKKwktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKKwktdGVzdCAuID0gIiQoc3JjZGlyKSIgfHwgdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykKKworbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgorCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKKwlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCitjbGVhbjogY2xlYW4tYW0KKworY2xlYW4tYW06IGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBjbGVhbi1ub2luc3RMSUJSQVJJRVMgXAorCW1vc3RseWNsZWFuLWFtCisKK2Rpc3RjbGVhbjogZGlzdGNsZWFuLWFtCisJLXJtIC1yZiAuLyQoREVQRElSKQorCS1ybSAtZiBNYWtlZmlsZQorZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCisJZGlzdGNsZWFuLXRhZ3MKKworZHZpOiBkdmktYW0KKworZHZpLWFtOgorCitodG1sOiBodG1sLWFtCisKK2h0bWwtYW06CisKK2luZm86IGluZm8tYW0KKworaW5mby1hbToKKworaW5zdGFsbC1kYXRhLWFtOgorCitpbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktYW0KKworaW5zdGFsbC1kdmktYW06CisKK2luc3RhbGwtZXhlYy1hbToKKworaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KKworaW5zdGFsbC1odG1sLWFtOgorCitpbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQorCitpbnN0YWxsLWluZm8tYW06CisKK2luc3RhbGwtbWFuOgorCitpbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KKworaW5zdGFsbC1wZGYtYW06CisKK2luc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KKworaW5zdGFsbC1wcy1hbToKKworaW5zdGFsbGNoZWNrLWFtOgorCittYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCisJLXJtIC1yZiAuLyQoREVQRElSKQorCS1ybSAtZiBNYWtlZmlsZQorbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYworCittb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tYW0KKworbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCisJbW9zdGx5Y2xlYW4tbGlidG9vbAorCitwZGY6IHBkZi1hbQorCitwZGYtYW06CisKK3BzOiBwcy1hbQorCitwcy1hbToKKwordW5pbnN0YWxsLWFtOgorCisuTUFLRTogaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwCisKKy5QSE9OWTogQ1RBR1MgR1RBR1MgYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBjbGVhbi1nZW5lcmljIFwKKwljbGVhbi1saWJ0b29sIGNsZWFuLW5vaW5zdExJQlJBUklFUyBjdGFncyBkaXN0Y2xlYW4gXAorCWRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIGRpc3RjbGVhbi1saWJ0b29sIFwKKwlkaXN0Y2xlYW4tdGFncyBkaXN0ZGlyIGR2aSBkdmktYW0gaHRtbCBodG1sLWFtIGluZm8gaW5mby1hbSBcCisJaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgXAorCWluc3RhbGwtZHZpLWFtIGluc3RhbGwtZXhlYyBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1odG1sIFwKKwlpbnN0YWxsLWh0bWwtYW0gaW5zdGFsbC1pbmZvIGluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBcCisJaW5zdGFsbC1wZGYgaW5zdGFsbC1wZGYtYW0gaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIFwKKwlpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgXAorCW1haW50YWluZXItY2xlYW4gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIFwKKwltb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBcCisJcGRmIHBkZi1hbSBwcyBwcy1hbSB0YWdzIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0KKworCisjIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgorIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCisuTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9kYWVtb24vbGlibGVnYWN5L2luaXQuYyBiL29wcm9maWxlLTAuOS43L2RhZW1vbi9saWJsZWdhY3kvaW5pdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyY2QwMTMKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9kYWVtb24vbGlibGVnYWN5L2luaXQuYwpAQCAtMCwwICsxLDM4NyBAQAorLyoqCisgKiBAZmlsZSBkYWVtb24vbGlibGVnYWN5L2luaXQuYworICogRGFlbW9uIHNldCB1cCBhbmQgbWFpbiBsb29wIGZvciAyLjQKKyAqCisgKiBAcmVtYXJrIENvcHlyaWdodCAyMDAyIE9Qcm9maWxlIGF1dGhvcnMKKyAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCisgKgorICogQGF1dGhvciBKb2huIExldm9uCisgKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisgCisjaW5jbHVkZSAib3BkX3Byb2MuaCIKKyNpbmNsdWRlICJvcGRfbWFwcGluZy5oIgorI2luY2x1ZGUgIm9wZF8yNF9zdGF0cy5oIgorI2luY2x1ZGUgIm9wZF9zYW1wbGVfZmlsZXMuaCIKKyNpbmNsdWRlICJvcGRfaW1hZ2UuaCIKKyNpbmNsdWRlICJvcGRfcGFyc2VfcHJvYy5oIgorI2luY2x1ZGUgIm9wZF9rZXJuZWwuaCIKKyNpbmNsdWRlICJvcGRfcHJpbnRmLmgiCisjaW5jbHVkZSAib3Byb2ZpbGVkLmgiCisKKyNpbmNsdWRlICJvcF9zYW1wbGVfZmlsZS5oIgorI2luY2x1ZGUgIm9wX2NvbmZpZ18yNC5oIgorI2luY2x1ZGUgIm9wX2ludGVyZmFjZS5oIgorI2luY2x1ZGUgIm9wX2xpYmliZXJ0eS5oIgorI2luY2x1ZGUgIm9wX2RldmljZWlvLmgiCisjaW5jbHVkZSAib3BfZXZlbnRzLmgiCisjaW5jbHVkZSAib3BfZ2V0X3RpbWUuaCIKKyNpbmNsdWRlICJvcF9maWxlaW8uaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCitmZF90IGhhc2htYXBkZXZmZDsKKworaW50IGNwdV9udW1iZXI7CisKK3N0YXRpYyBmZF90IGRldmZkOworc3RhdGljIGZkX3Qgbm90ZWRldmZkOworc3RhdGljIHN0cnVjdCBvcF9idWZmZXJfaGVhZCAqIHNidWY7CitzdGF0aWMgc2l6ZV90IHNfYnVmX2J5dGVzaXplOworc3RhdGljIHN0cnVjdCBvcF9ub3RlICogbmJ1ZjsKK3N0YXRpYyBzaXplX3Qgbl9idWZfYnl0ZXNpemU7CisKK3N0YXRpYyB2b2lkIG9wZF9zaWdodXAodm9pZCk7CitzdGF0aWMgdm9pZCBvcGRfYWxhcm0odm9pZCk7CitzdGF0aWMgdm9pZCBvcGRfc2lndGVybSh2b2lkKTsKKworCisvKioKKyAqIG9wX29wZW5fZmlsZXMgLSBvcGVuIG5lY2Vzc2FyeSBmaWxlcworICoKKyAqIE9wZW4gdGhlIGRldmljZSBmaWxlcyBhbmQgdGhlIGxvZyBmaWxlLAorICogYW5kIG1tYXAoKSB0aGUgaGFzaCBtYXAuCisgKi8KK3N0YXRpYyB2b2lkIG9wX29wZW5fZmlsZXModm9pZCkKK3sKKwloYXNobWFwZGV2ZmQgPSBvcF9vcGVuX2RldmljZShvcF9oYXNoX2RldmljZSk7CisJaWYgKGhhc2htYXBkZXZmZCA9PSAtMSkgeworCQlwZXJyb3IoIkZhaWxlZCB0byBvcGVuIGhhc2ggbWFwIGRldmljZSIpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorCisJbm90ZWRldmZkID0gb3Bfb3Blbl9kZXZpY2Uob3Bfbm90ZV9kZXZpY2UpOworCWlmIChub3RlZGV2ZmQgPT0gLTEpIHsKKwkJaWYgKGVycm5vID09IEVJTlZBTCkKKwkJCWZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIG9wZW4gbm90ZSBkZXZpY2UuIFBvc3NpYmx5IHlvdSBoYXZlIHBhc3NlZCBpbmNvcnJlY3RcbiIKKwkJCQkicGFyYW1ldGVycy4gQ2hlY2sgL3Zhci9sb2cvbWVzc2FnZXMuIik7CisJCWVsc2UKKwkJCXBlcnJvcigiRmFpbGVkIHRvIG9wZW4gbm90ZSBkZXZpY2UiKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKworCWRldmZkID0gb3Bfb3Blbl9kZXZpY2Uob3BfZGV2aWNlKTsKKwlpZiAoZGV2ZmQgPT0gLTEpIHsKKwkJaWYgKGVycm5vID09IEVJTlZBTCkKKwkJCWZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIG9wZW4gZGV2aWNlLiBQb3NzaWJseSB5b3UgaGF2ZSBwYXNzZWQgaW5jb3JyZWN0XG4iCisJCQkJInBhcmFtZXRlcnMuIENoZWNrIC92YXIvbG9nL21lc3NhZ2VzLiIpOworCQllbHNlCisJCQlwZXJyb3IoIkZhaWxlZCB0byBvcGVuIHByb2ZpbGUgZGV2aWNlIik7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisKKwlvcGRfaW5pdF9oYXNoX21hcCgpOworCisJLyogZ2l2ZSBvdXRwdXQgYmVmb3JlIHJlLW9wZW5pbmcgc3Rkb3V0IGFzIHRoZSBsb2dmaWxlICovCisJcHJpbnRmKCJVc2luZyBsb2cgZmlsZSAlc1xuIiwgb3BfbG9nX2ZpbGUpOworCisJLyogc2V0IHVwIGxvZ2ZpbGUgKi8KKwljbG9zZSgwKTsKKwljbG9zZSgxKTsKKworCWlmIChvcGVuKCIvZGV2L251bGwiLCBPX1JET05MWSkgPT0gLTEpIHsKKwkJcGVycm9yKCJvcHJvZmlsZWQ6IGNvdWxkbid0IHJlLW9wZW4gc3RkaW4gYXMgL2Rldi9udWxsOiAiKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKworCW9wZF9vcGVuX2xvZ2ZpbGUoKTsKKworCXByaW50Zigib3Byb2ZpbGVkIHN0YXJ0ZWQgJXMiLCBvcF9nZXRfdGltZSgpKTsKKwlmZmx1c2goc3Rkb3V0KTsKK30KKyAKKworc3RhdGljIHZvaWQgb3BkX2RvX3NhbXBsZXMoc3RydWN0IG9wX2J1ZmZlcl9oZWFkIGNvbnN0ICogYnVmKTsKK3N0YXRpYyB2b2lkIG9wZF9kb19ub3RlcyhzdHJ1Y3Qgb3Bfbm90ZSBjb25zdCAqIG9wZF9idWYsIHNpemVfdCBjb3VudCk7CisKKy8qKgorICogZG9fc2h1dGRvd24gLSBzaHV0ZG93biBjbGVhbmx5LCByZWFkaW5nIGFzIG11Y2ggcmVtYWluaW5nIGRhdGEgYXMgcG9zc2libGUuCisgKiBAcGFyYW0gYnVmICBzYW1wbGUgYnVmZmVyIGFyZWEKKyAqIEBwYXJhbSBzaXplICBzaXplIG9mIHNhbXBsZSBidWZmZXIKKyAqIEBwYXJhbSBuYnVmICBub3RlIGJ1ZmZlciBhcmVhCisgKiBAcGFyYW0gbnNpemUgIHNpemUgb2Ygbm90ZSBidWZmZXIKKyAqLworc3RhdGljIHZvaWQgb3BkX3NodXRkb3duKHN0cnVjdCBvcF9idWZmZXJfaGVhZCAqIGJ1Ziwgc2l6ZV90IHNpemUsIHN0cnVjdCBvcF9ub3RlICogbmJ1Ziwgc2l6ZV90IG5zaXplKQoreworCXNzaXplX3QgY291bnQgPSAtMTsKKwlzc2l6ZV90IG5jb3VudCA9IC0xOworCisJLyogdGhlIGR1bXAgbWF5IGhhdmUgYWRkZWQgbm8gc2FtcGxlcywgc28gd2UgbXVzdCBzZXQKKwkgKiBub24tYmxvY2tpbmcgKi8KKwlpZiAoZmNudGwoZGV2ZmQsIEZfU0VURkwsIGZjbnRsKGRldmZkLCBGX0dFVEZMKSB8IE9fTk9OQkxPQ0spIDwgMCkgeworCQlwZXJyb3IoIkZhaWxlZCB0byBzZXQgbm9uLWJsb2NraW5nIHJlYWQgZm9yIGRldmljZTogIik7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisKKwkvKiBpdCdzIGFsd2F5cyBPSyB0byByZWFkIHRoZSBub3RlIGRldmljZSAqLworCXdoaWxlIChuY291bnQgPCAwKQorCQluY291bnQgPSBvcF9yZWFkX2RldmljZShub3RlZGV2ZmQsIG5idWYsIG5zaXplKTsKKworCWlmIChuY291bnQgPiAwKQorCQlvcGRfZG9fbm90ZXMobmJ1ZiwgbmNvdW50KTsKKworCS8qIHJlYWQgYXMgbXVjaCBhcyB3ZSBjYW4gdW50aWwgd2UgaGF2ZSBleGhhdXN0ZWQgdGhlIGRhdGEKKwkgKiAoRUFHQUlOIGlzIHJldHVybmVkKS4KKwkgKgorCSAqIFRoaXMgd2lsbCBub3QgbGl2ZWxvY2sgYXMgdGhlIHByb2ZpbGVyIGhhcyBiZWVuIHBhcnRpYWxseQorCSAqIHNodXQgZG93biBieSBub3cuCisJICovCisJd2hpbGUgKDEpIHsKKwkJY291bnQgPSBvcF9yZWFkX2RldmljZShkZXZmZCwgYnVmLCBzaXplKTsKKwkJaWYgKGNvdW50IDwgMCAmJiBlcnJubyA9PSBFQUdBSU4pCisJCQlicmVhazsKKwkJdmVyYnByaW50Zih2bWlzYywgIlNodXR0aW5nIGRvd24sIHN0YXRlICVkXG4iLCBidWYtPnN0YXRlKTsKKwkJb3BkX2RvX3NhbXBsZXMoYnVmKTsKKwl9Cit9CisgCisKKy8qKgorICogb3BkX2RvX3JlYWQgLSBlbnRlciBwcm9jZXNzaW5nIGxvb3AKKyAqIEBwYXJhbSBidWYgIGJ1ZmZlciB0byByZWFkIGludG8KKyAqIEBwYXJhbSBzaXplICBzaXplIG9mIGJ1ZmZlcgorICogQHBhcmFtIG5idWYgIG5vdGUgYnVmZmVyCisgKiBAcGFyYW0gbnNpemUgIHNpemUgb2Ygbm90ZSBidWZmZXIKKyAqCisgKiBSZWFkIHNvbWUgb2YgYSBidWZmZXIgZnJvbSB0aGUgZGV2aWNlIGFuZCBwcm9jZXNzCisgKiB0aGUgY29udGVudHMuCisgKi8KK3N0YXRpYyB2b2lkIG9wZF9kb19yZWFkKHN0cnVjdCBvcF9idWZmZXJfaGVhZCAqIGJ1Ziwgc2l6ZV90IHNpemUsIHN0cnVjdCBvcF9ub3RlICogbmJ1Ziwgc2l6ZV90IG5zaXplKQoreworCXdoaWxlICgxKSB7CisJCXNzaXplX3QgY291bnQgPSAtMTsKKwkJc3NpemVfdCBuY291bnQgPSAtMTsKKworCQkvKiBsb29wIHRvIGhhbmRsZSBFSU5UUiAqLworCQl3aGlsZSAoY291bnQgPCAwKQorCQkJY291bnQgPSBvcF9yZWFkX2RldmljZShkZXZmZCwgYnVmLCBzaXplKTsKKworCQl3aGlsZSAobmNvdW50IDwgMCkKKwkJCW5jb3VudCA9IG9wX3JlYWRfZGV2aWNlKG5vdGVkZXZmZCwgbmJ1ZiwgbnNpemUpOworCisJCW9wZF9kb19ub3RlcyhuYnVmLCBuY291bnQpOworCQlvcGRfZG9fc2FtcGxlcyhidWYpOworCisJCS8vIHdlIGNhbiBsb3N0IGEgc2lnbmFsIGFsYXJtIG9yIGEgc2lnbmFsIGh1cCBidXQgd2UgZG9uJ3QKKwkJLy8gdGFrZSBjYXJlLgorCQlpZiAoc2lnbmFsX2FsYXJtKSB7CisJCQlzaWduYWxfYWxhcm0gPSAwOworCQkJb3BkX2FsYXJtKCk7CisJCX0KKworCQlpZiAoc2lnbmFsX2h1cCkgeworCQkJc2lnbmFsX2h1cCA9IDA7CisJCQlvcGRfc2lnaHVwKCk7CisJCX0KKworCQlpZiAoc2lnbmFsX3Rlcm0pCisJCQlvcGRfc2lndGVybSgpOworIAorCQkvKiByZXF1ZXN0IHRvIHN0b3AgYXJyaXZlZCAqLworCQlpZiAoYnVmLT5zdGF0ZSA9PSBTVE9QUElORykgeworCQkJdmVyYnByaW50Zih2bWlzYywgIlNodXR0aW5nIGRvd24gYnkgcmVxdWVzdC5cbiIpOworCQkJb3BkX3NodXRkb3duKGJ1Ziwgc2l6ZSwgbmJ1ZiwgbnNpemUpOworCQkJcmV0dXJuOworCQl9CisJfQorfQorCisvKioKKyAqIG9wZF9kb19ub3RlcyAtIHByb2Nlc3MgYSBub3RlcyBidWZmZXIKKyAqIEBwYXJhbSBvcGRfYnVmICBidWZmZXIgdG8gcHJvY2VzcworICogQHBhcmFtIGNvdW50ICBudW1iZXIgb2YgYnl0ZXMgaW4gYnVmZmVyCisgKgorICogUHJvY2VzcyBhIGJ1ZmZlciBvZiBub3Rlcy4KKyAqLworc3RhdGljIHZvaWQgb3BkX2RvX25vdGVzKHN0cnVjdCBvcF9ub3RlIGNvbnN0ICogb3BkX2J1Ziwgc2l6ZV90IGNvdW50KQoreworCXVpbnQgaTsKKwlzdHJ1Y3Qgb3Bfbm90ZSBjb25zdCAqIG5vdGU7CisKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQvc2l6ZW9mKHN0cnVjdCBvcF9ub3RlKTsgaSsrKSB7CisJCW5vdGUgPSAmb3BkX2J1ZltpXTsKKworCQlvcGRfMjRfc3RhdHNbT1BEX05PVElGSUNBVElPTlNdKys7CisKKwkJc3dpdGNoIChub3RlLT50eXBlKSB7CisJCQljYXNlIE9QX01BUDoKKwkJCWNhc2UgT1BfRVhFQzoKKwkJCQlpZiAobm90ZS0+dHlwZSA9PSBPUF9FWEVDKQorCQkJCQlvcGRfaGFuZGxlX2V4ZWMobm90ZS0+cGlkLCBub3RlLT50Z2lkKTsKKwkJCQlvcGRfaGFuZGxlX21hcHBpbmcobm90ZSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgT1BfRk9SSzoKKwkJCQlvcGRfaGFuZGxlX2Zvcmsobm90ZSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgT1BfRFJPUF9NT0RVTEVTOgorCQkJCW9wZF9jbGVhcl9tb2R1bGVfaW5mbygpOworCQkJCWJyZWFrOworCisJCQljYXNlIE9QX0VYSVQ6CisJCQkJb3BkX2hhbmRsZV9leGl0KG5vdGUpOworCQkJCWJyZWFrOworCisJCQlkZWZhdWx0OgorCQkJCWZwcmludGYoc3RkZXJyLCAiUmVjZWl2ZWQgdW5rbm93biBub3RpZmljYXRpb24gdHlwZSAldVxuIiwgbm90ZS0+dHlwZSk7CisJCQkJYWJvcnQoKTsKKwkJCQlicmVhazsKKwkJfQorCX0KK30KKworLyoqCisgKiBvcGRfZG9fc2FtcGxlcyAtIHByb2Nlc3MgYSBzYW1wbGUgYnVmZmVyCisgKiBAcGFyYW0gb3BkX2J1ZiAgYnVmZmVyIHRvIHByb2Nlc3MKKyAqCisgKiBQcm9jZXNzIGEgYnVmZmVyIG9mIHNhbXBsZXMuCisgKiBUaGUgc2lnbmFscyBzcGVjaWZpZWQgYnkgdGhlIGdsb2JhbCB2YXJpYWJsZSBtYXNrc2V0IGFyZQorICogbWFza2VkLgorICoKKyAqIElmIHRoZSBzYW1wbGUgY291bGQgYmUgcHJvY2Vzc2VkIGNvcnJlY3RseSwgaXQgaXMgd3JpdHRlbgorICogdG8gdGhlIHJlbGV2YW50IHNhbXBsZSBmaWxlLiBBZGRpdGlvbmFsbHkgbWFwcGluZyBhbmQKKyAqIHByb2Nlc3Mgbm90aWZpY2F0aW9ucyBhcmUgaGFuZGxlZCBoZXJlLgorICovCitzdGF0aWMgdm9pZCBvcGRfZG9fc2FtcGxlcyhzdHJ1Y3Qgb3BfYnVmZmVyX2hlYWQgY29uc3QgKiBvcGRfYnVmKQoreworCXVpbnQgaTsKKwlzdHJ1Y3Qgb3Bfc2FtcGxlIGNvbnN0ICogYnVmZmVyID0gb3BkX2J1Zi0+YnVmZmVyOyAKKworCW9wZF8yNF9zdGF0c1tPUERfRFVNUF9DT1VOVF0rKzsKKworCXZlcmJwcmludGYodm1pc2MsICJSZWFkIGJ1ZmZlciBvZiAlZCBlbnRyaWVzIGZvciBjcHUgJWQuXG4iLAorCQkgICAodW5zaWduZWQgaW50KW9wZF9idWYtPmNvdW50LCBvcGRfYnVmLT5jcHVfbnIpOworIAorCWlmIChzZXBhcmF0ZV9jcHUpCisJCWNwdV9udW1iZXIgPSBvcGRfYnVmLT5jcHVfbnI7CisJZm9yIChpID0gMDsgaSA8IG9wZF9idWYtPmNvdW50OyBpKyspIHsKKwkJdmVyYnByaW50Zih2c2FtcGxlcywgIiUuNnU6IEVJUDogMHglLjhseCBwaWQ6ICUuNmRcbiIsCisJCQlpLCBidWZmZXJbaV0uZWlwLCBidWZmZXJbaV0ucGlkKTsKKwkJb3BkX3B1dF9zYW1wbGUoJmJ1ZmZlcltpXSk7CisJfQorfQorCisKKy8qKgorICogb3BkX2FsYXJtIC0gY2xlYW4gdXAgb2xkIHByb2NzLCBtc3luYywgYW5kIHJlcG9ydCBzdGF0cworICovCitzdGF0aWMgdm9pZCBvcGRfYWxhcm0odm9pZCkKK3sKKwlvcGRfc3luY19zYW1wbGVzX2ZpbGVzKCk7CisKKwlvcGRfYWdlX3Byb2NzKCk7CisKKwlvcGRfcHJpbnRfMjRfc3RhdHMoKTsKKworCWFsYXJtKDYwICogMTApOworfQorIAorCisvKiByZS1vcGVuIGxvZ2ZpbGUgZm9yIGxvZ3JvdGF0ZSAqLworc3RhdGljIHZvaWQgb3BkX3NpZ2h1cCh2b2lkKQoreworCXByaW50ZigiUmVjZWl2ZWQgU0lHSFVQLlxuIik7CisJY2xvc2UoMSk7CisJY2xvc2UoMik7CisJb3BkX29wZW5fbG9nZmlsZSgpOworCS8qIFdlIGp1c3QgY2xvc2UgdGhlbSwgYW5kIHJlLW9wZW4gdGhlbSBsYXppbHkgYXMgdXN1YWwuICovCisJb3BkX2Zvcl9lYWNoX2ltYWdlKG9wZF9jbG9zZV9pbWFnZV9zYW1wbGVzX2ZpbGVzKTsKK30KKworCitzdGF0aWMgdm9pZCBjbGVhbl9leGl0KHZvaWQpCit7CisJb3BkX2NsZWFudXBfaGFzaF9uYW1lKCk7CisJb3BfZnJlZV9ldmVudHMoKTsKKwl1bmxpbmsob3BfbG9ja19maWxlKTsKK30KKworCitzdGF0aWMgdm9pZCBvcGRfc2lndGVybSh2b2lkKQoreworCW9wZF9wcmludF8yNF9zdGF0cygpOworCXByaW50Zigib3Byb2ZpbGVkIHN0b3BwZWQgJXMiLCBvcF9nZXRfdGltZSgpKTsKKwlleGl0KEVYSVRfRkFJTFVSRSk7Cit9CisgCisKK3N0YXRpYyB2b2lkIG9wZF8yNF9pbml0KHZvaWQpCit7CisJc2l6ZV90IGk7CisJaW50IG9wZF9idWZfc2l6ZSA9IE9QX0RFRkFVTFRfQlVGX1NJWkU7CisJaW50IG9wZF9ub3RlX2J1Zl9zaXplID0gT1BfREVGQVVMVF9OT1RFX1NJWkU7CisKKwlpZiAoIW5vX3ZtbGludXgpCisJCW9wZF9wYXJzZV9rZXJuZWxfcmFuZ2Uoa2VybmVsX3JhbmdlKTsKKwlvcGRfYnVmX3NpemUgPSBvcGRfcmVhZF9mc19pbnQoT1BfTU9VTlQsICJidWZzaXplIiwgMSk7CisJb3BkX25vdGVfYnVmX3NpemUgPSBvcGRfcmVhZF9mc19pbnQoT1BfTU9VTlQsICJub3Rlc2l6ZSIsIDEpOworCisJc19idWZfYnl0ZXNpemUgPSBzaXplb2Yoc3RydWN0IG9wX2J1ZmZlcl9oZWFkKSArIG9wZF9idWZfc2l6ZSAqIHNpemVvZihzdHJ1Y3Qgb3Bfc2FtcGxlKTsKKworCXNidWYgPSB4bWFsbG9jKHNfYnVmX2J5dGVzaXplKTsKKworCW5fYnVmX2J5dGVzaXplID0gb3BkX25vdGVfYnVmX3NpemUgKiBzaXplb2Yoc3RydWN0IG9wX25vdGUpOworCW5idWYgPSB4bWFsbG9jKG5fYnVmX2J5dGVzaXplKTsKKworCW9wZF9pbml0X2ltYWdlcygpOworCW9wZF9pbml0X3Byb2NzKCk7CisJb3BkX2luaXRfa2VybmVsX2ltYWdlKCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgT1BEX01BWF9TVEFUUzsgaSsrKQorCQlvcGRfMjRfc3RhdHNbaV0gPSAwOworCisJaWYgKGF0ZXhpdChjbGVhbl9leGl0KSkgeworCQlwZXJyb3IoIm9wcm9maWxlZDogY291bGRuJ3Qgc2V0IGV4aXQgY2xlYW51cDogIik7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9Cit9CisKKworc3RhdGljIHZvaWQgb3BkXzI0X3N0YXJ0KHZvaWQpCit7CisJb3Bfb3Blbl9maWxlcygpOworCisJLyogeWVzLCB0aGlzIGlzIHJhY2V5LiAqLworCW9wZF9nZXRfYXNjaWlfcHJvY3MoKTsKKworCS8qIHNpbXBsZSBzbGVlcC10aGVuLXByb2Nlc3MgbG9vcCAqLworCW9wZF9kb19yZWFkKHNidWYsIHNfYnVmX2J5dGVzaXplLCBuYnVmLCBuX2J1Zl9ieXRlc2l6ZSk7Cit9CisKKworc3RhdGljIHZvaWQgb3BkXzI0X2V4aXQodm9pZCkKK3sKKwlvcGRfcHJpbnRfMjRfc3RhdHMoKTsKKwlwcmludGYoIm9wcm9maWxlZCBzdG9wcGVkICVzIiwgb3BfZ2V0X3RpbWUoKSk7CisKKwlmcmVlKHNidWYpOworCWZyZWUobmJ1Zik7CisJb3BkX2NsZWFyX21vZHVsZV9pbmZvKCk7CisJb3BkX3Byb2NfY2xlYW51cCgpOworCS8qIGtlcm5lbC9tb2R1bGUgaW1hZ2UgYXJlIG5vdCBvd25lZCBieSBhIHByb2MsIHdlIG11c3QgY2xlYW51cCB0aGVtICovCisJb3BkX2Zvcl9lYWNoX2ltYWdlKG9wZF9kZWxldGVfaW1hZ2UpOworfQorCisKK3N0cnVjdCBvcHJvZmlsZWRfb3BzIG9wZF8yNF9vcHMgPSB7CisJLmluaXQgPSBvcGRfMjRfaW5pdCwKKwkuc3RhcnQgPSBvcGRfMjRfc3RhcnQsCisJLmV4aXQgPSBvcGRfMjRfZXhpdAorfTsKZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2RhZW1vbi9saWJsZWdhY3kvb3BkXzI0X3N0YXRzLmMgYi9vcHJvZmlsZS0wLjkuNy9kYWVtb24vbGlibGVnYWN5L29wZF8yNF9zdGF0cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyNDI1YzQKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9kYWVtb24vbGlibGVnYWN5L29wZF8yNF9zdGF0cy5jCkBAIC0wLDAgKzEsNjIgQEAKKy8qKgorICogQGZpbGUgb3BkXzI0X3N0YXRzLmMKKyAqIE1hbmFnZW1lbnQgb2YgZGFlbW9uIHN0YXRpc3RpY3MKKyAqCisgKiBAcmVtYXJrIENvcHlyaWdodCAyMDAyIE9Qcm9maWxlIGF1dGhvcnMKKyAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCisgKgorICogQGF1dGhvciBKb2huIExldm9uCisgKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKKyAqLworCisjaW5jbHVkZSAib3BkXzI0X3N0YXRzLmgiCisjaW5jbHVkZSAib3BkX3Byb2MuaCIKKyNpbmNsdWRlICJvcGRfaW1hZ2UuaCIKKyNpbmNsdWRlICJvcHJvZmlsZWQuaCIKKworI2luY2x1ZGUgIm9wX2dldF90aW1lLmgiCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorCit1bnNpZ25lZCBsb25nIG9wZF8yNF9zdGF0c1tPUERfTUFYX1NUQVRTXTsKKwordm9pZCBvcGRfcHJpbnRfMjRfc3RhdHModm9pZCkKK3sKKwlwcmludGYoIlxuJXNcbiIsIG9wX2dldF90aW1lKCkpOworCXByaW50ZigiTnIuIHByb2Mgc3RydWN0OiAlZFxuIiwgb3BkX2dldF9ucl9wcm9jcygpKTsKKwlwcmludGYoIk5yLiBpbWFnZSBzdHJ1Y3Q6ICVkXG4iLCBvcGRfZ2V0X25yX2ltYWdlcygpKTsKKwlwcmludGYoIk5yLiBrZXJuZWwgc2FtcGxlczogJWx1XG4iLCBvcGRfMjRfc3RhdHNbT1BEX0tFUk5FTF0pOworCXByaW50ZigiTnIuIG1vZHVsZXMgc2FtcGxlczogJWx1XG4iLCBvcGRfMjRfc3RhdHNbT1BEX01PRFVMRV0pOworCXByaW50ZigiTnIuIG1vZHVsZXMgc2FtcGxlcyBsb3N0OiAlbHVcbiIsIG9wZF8yNF9zdGF0c1tPUERfTE9TVF9NT0RVTEVdKTsKKwlwcmludGYoIk5yLiBzYW1wbGVzIGxvc3QgZHVlIHRvIG5vIHByb2Nlc3MgaW5mb3JtYXRpb246ICVsdVxuIiwKKwkJb3BkXzI0X3N0YXRzW09QRF9MT1NUX1BST0NFU1NdKTsKKwlwcmludGYoIk5yLiBzYW1wbGVzIGxvc3QgZHVlIHRvIHNhbXBsZSBmaWxlIG9wZW4gZmFpbHVyZTogJWx1XG4iLAorCQlvcGRfMjRfc3RhdHNbT1BEX0xPU1RfU0FNUExFRklMRV0pOworCXByaW50ZigiTnIuIHByb2Nlc3Mgc2FtcGxlcyBpbiB1c2VyLXNwYWNlOiAlbHVcbiIsIG9wZF8yNF9zdGF0c1tPUERfUFJPQ0VTU10pOworCXByaW50ZigiTnIuIHNhbXBsZXMgbG9zdCBkdWUgdG8gbm8gbWFwIGluZm9ybWF0aW9uOiAlbHVcbiIsCisJCW9wZF8yNF9zdGF0c1tPUERfTE9TVF9NQVBfUFJPQ0VTU10pOworCWlmIChvcGRfMjRfc3RhdHNbT1BEX1BST0NfUVVFVUVfQUNDRVNTXSkgeworCQlwcmludGYoIkF2ZXJhZ2UgZGVwdGggb2Ygc2VhcmNoIG9mIHByb2MgcXVldWU6ICVmXG4iLAorCQkJKGRvdWJsZSlvcGRfMjRfc3RhdHNbT1BEX1BST0NfUVVFVUVfREVQVEhdCisJCQkvIChkb3VibGUpb3BkXzI0X3N0YXRzW09QRF9QUk9DX1FVRVVFX0FDQ0VTU10pOworCX0KKwlpZiAob3BkXzI0X3N0YXRzW09QRF9NQVBfQVJSQVlfQUNDRVNTXSkgeworCQlwcmludGYoIkF2ZXJhZ2UgZGVwdGggb2YgaXRlcmF0aW9uIHRocm91Z2ggbWFwcGluZyBhcnJheTogJWZcbiIsCisJCQkoZG91YmxlKW9wZF8yNF9zdGF0c1tPUERfTUFQX0FSUkFZX0RFUFRIXQorCQkJLyAoZG91YmxlKW9wZF8yNF9zdGF0c1tPUERfTUFQX0FSUkFZX0FDQ0VTU10pOworCX0KKwlpZiAob3BkXzI0X3N0YXRzW09QRF9JTUFHRV9IQVNIX0FDQ0VTU10pIHsKKwkJcHJpbnRmKCJBdmVyYWdlIGRlcHRoIG9mIGl0ZXJhdGlvbiB0aHJvdWdoIGltYWdlIGhhc2ggYXJyYXk6ICVmXG4iLAorCQkJKGRvdWJsZSlvcGRfMjRfc3RhdHNbT1BEX0lNQUdFX0hBU0hfREVQVEhdCisJCQkvIChkb3VibGUpb3BkXzI0X3N0YXRzW09QRF9JTUFHRV9IQVNIX0FDQ0VTU10pOworCX0KKwlwcmludGYoIk5yLiBzYW1wbGUgZHVtcHM6ICVsdVxuIiwgb3BkXzI0X3N0YXRzW09QRF9EVU1QX0NPVU5UXSk7CisJcHJpbnRmKCJOci4gc2FtcGxlcyB0b3RhbDogJWx1XG4iLCBvcGRfMjRfc3RhdHNbT1BEX1NBTVBMRVNdKTsKKwlwcmludGYoIk5yLiBub3RpZmljYXRpb25zOiAlbHVcbiIsIG9wZF8yNF9zdGF0c1tPUERfTk9USUZJQ0FUSU9OU10pOworCXByaW50ZigiTnIuIGtlcm5lbCBub3RlIGJ1ZmZlciBvdmVyZmxvdzogJXVcbiIsCisJICAgICAgIG9wZF9yZWFkX2ZzX2ludChPUF9NT1VOVCwgIm5vdGVfYnVmZmVyX292ZXJmbG93IiwgMCkpOworCXByaW50ZigiTnIuIGtlcm5lbCBzYW1wbGVzIGJ1ZmZlciBvdmVyZmxvdzogJXVcbiIsCisJICAgICAgIG9wZF9yZWFkX2ZzX2ludChPUF9NT1VOVCwgImJ1ZmZlcl9vdmVyZmxvdyIsIDApKTsKKwlmZmx1c2goc3Rkb3V0KTsKK30KZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2RhZW1vbi9saWJsZWdhY3kvb3BkXzI0X3N0YXRzLmggYi9vcHJvZmlsZS0wLjkuNy9kYWVtb24vbGlibGVnYWN5L29wZF8yNF9zdGF0cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhY2Q4NjAKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9kYWVtb24vbGlibGVnYWN5L29wZF8yNF9zdGF0cy5oCkBAIC0wLDAgKzEsMzkgQEAKKy8qKgorICogQGZpbGUgb3BkXzI0X3N0YXRzLmgKKyAqIE1hbmFnZW1lbnQgb2YgZGFlbW9uIHN0YXRpc3RpY3MKKyAqCisgKiBAcmVtYXJrIENvcHlyaWdodCAyMDAyIE9Qcm9maWxlIGF1dGhvcnMKKyAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCisgKgorICogQGF1dGhvciBKb2huIExldm9uCisgKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKKyAqLworCisjaWZuZGVmIE9QRF8yNF9TVEFUU19ICisjZGVmaW5lIE9QRF8yNF9TVEFUU19ICisKK2V4dGVybiB1bnNpZ25lZCBsb25nIG9wZF8yNF9zdGF0c1tdOworCitlbnVtIHsgIE9QRF9LRVJORUwsIC8qKjwgbnIga2VybmVsIHNhbXBsZXMgKi8KKwlPUERfTU9EVUxFLCAvKio8IG5yIG1vZHVsZSBzYW1wbGVzICovCisJT1BEX0xPU1RfTU9EVUxFLCAvKio8IG5yIHNhbXBsZXMgaW4gbW9kdWxlIGZvciB3aGljaCBtb2R1bGVzIGNhbiBub3QgYmUgbG9jYXRlZCAqLworCU9QRF9MT1NUX1BST0NFU1MsIC8qKjwgbnIgc2FtcGxlcyBmb3Igd2hpY2ggcHJvY2VzcyBpbmZvIGNvdWxkbid0IGJlIGFjY2Vzc2VkICovCisJT1BEX1BST0NFU1MsIC8qKjwgbnIgdXNlcnNwYWNlIHNhbXBsZXMgKi8KKwlPUERfTE9TVF9NQVBfUFJPQ0VTUywgLyoqPCBuciBzYW1wbGVzIGZvciB3aGljaCBtYXAgaW5mbyBjb3VsZG4ndCBiZSBhY2Nlc3NlZCAqLworCU9QRF9MT1NUX1NBTVBMRUZJTEUsIC8qKjwgbnIgc2FtcGxlcyBmb3Igd2hpY2ggc2FtcGxlIGZpbGUgY2FuJ3QgYmUgb3BlbmVkICovCisJT1BEX1BST0NfUVVFVUVfQUNDRVNTLCAvKio8IG5yIGFjY2Vzc2VzIG9mIHByb2MgcXVldWUgKi8KKwlPUERfUFJPQ19RVUVVRV9ERVBUSCwgLyoqPCBjdW11bGF0aXZlIGRlcHRoIG9mIHByb2MgcXVldWUgYWNjZXNzZXMgKi8KKwlPUERfRFVNUF9DT1VOVCwgLyoqPCBuciBvZiB0aW1lcyBidWZmZXIgaXMgcmVhZCAqLworCU9QRF9NQVBfQVJSQVlfQUNDRVNTLCAvKio8IG5yIGFjY2Vzc2VzIG9mIG1hcCBhcnJheSAqLworCU9QRF9NQVBfQVJSQVlfREVQVEgsIC8qKjwgY3VtdWxhdGl2ZSBkZXB0aCBvZiBtYXAgYXJyYXkgYWNjZXNzZXMgKi8KKwlPUERfSU1BR0VfSEFTSF9BQ0NFU1MsICAvKio8IG5yIG9wZF9maW5kX2ltYWdlKCkgKi8KKwlPUERfSU1BR0VfSEFTSF9ERVBUSCwgIC8qKjwgY3VtdWxhdGl2ZSBkZXB0aCBvZiBpbWFnZSBzZWFyY2ggKi8KKwlPUERfU0FNUExFUywgLyoqPCBuciBkaXN0aW5jdCBzYW1wbGVzICovCisJT1BEX05PVElGSUNBVElPTlMsIC8qKjwgbnIgbm90aWZpY2F0aW9ucyAqLworCU9QRF9NQVhfU1RBVFMgLyoqPCBlbmQgb2Ygc3RhdHMgKi8KKwl9OworCisvKiogb3BkX3ByaW50XzI0X3N0YXRzIC0gcHJpbnQgb3V0IGxhdGVzdCBzdGF0aXN0aWNzICovCit2b2lkIG9wZF9wcmludF8yNF9zdGF0cyh2b2lkKTsKKworI2VuZGlmIC8qIE9QRF8yNF9TVEFUU19IICovCmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9kYWVtb24vbGlibGVnYWN5L29wZF9pbWFnZS5jIGIvb3Byb2ZpbGUtMC45LjcvZGFlbW9uL2xpYmxlZ2FjeS9vcGRfaW1hZ2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzZiNWEyCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvZGFlbW9uL2xpYmxlZ2FjeS9vcGRfaW1hZ2UuYwpAQCAtMCwwICsxLDI2NCBAQAorLyoqCisgKiBAZmlsZSBvcGRfaW1hZ2UuYworICogTWFuYWdlbWVudCBvZiBiaW5hcnkgaW1hZ2VzCisgKgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMiBPUHJvZmlsZSBhdXRob3JzCisgKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORworICoKKyAqIEBhdXRob3IgSm9obiBMZXZvbgorICogQGF1dGhvciBQaGlsaXBwZSBFbGllCisgKi8KKworI2luY2x1ZGUgIm9wZF9pbWFnZS5oIgorI2luY2x1ZGUgIm9wZF9wcmludGYuaCIKKyNpbmNsdWRlICJvcGRfc2FtcGxlX2ZpbGVzLmgiCisjaW5jbHVkZSAib3BkXzI0X3N0YXRzLmgiCisjaW5jbHVkZSAib3Byb2ZpbGVkLmgiCisKKyNpbmNsdWRlICJvcF9maWxlLmgiCisjaW5jbHVkZSAib3BfY29uZmlnXzI0LmgiCisjaW5jbHVkZSAib3BfbGliaWJlcnR5LmgiCisjaW5jbHVkZSAib3Bfc3RyaW5nLmgiCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorCisvKiBtYWludGFpbmVkIGZvciBzdGF0aXN0aWNzIHB1cnBvc2Ugb25seSAqLworc3RhdGljIGludCBucl9pbWFnZXM7CisKKy8qIGxpc3Qgb2YgaW1hZ2VzICovCisjZGVmaW5lIE9QRF9JTUFHRV9IQVNIX1NJWkUgMjA0OAorc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQgb3BkX2ltYWdlc1tPUERfSU1BR0VfSEFTSF9TSVpFXTsKKworCit2b2lkIG9wZF9pbml0X2ltYWdlcyh2b2lkKQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBPUERfSU1BR0VfSEFTSF9TSVpFOyArK2kpCisJCWxpc3RfaW5pdCgmb3BkX2ltYWdlc1tpXSk7Cit9CisKKworaW50IG9wZF9nZXRfbnJfaW1hZ2VzKHZvaWQpCit7CisJcmV0dXJuIG5yX2ltYWdlczsKK30KKworCit2b2lkIG9wZF9kZWxldGVfaW1hZ2Uoc3RydWN0IG9wZF9pbWFnZSAqIGltYWdlKQoreworCXZlcmJwcmludGYodm1pc2MsICJEZWxldGluZyBpbWFnZTogbmFtZSAlcyBhcHBfbmFtZSAlcywga2VybmVsICVkLCAiCisJICAgICAgICAgICAidGlkICVkLCB0Z2lkICVkIHJlZiBjb3VudCAldVxuIiwKKwkgICAgICAgICAgIGltYWdlLT5uYW1lLCBpbWFnZS0+YXBwX25hbWUsIGltYWdlLT5rZXJuZWwsCisJICAgICAgICAgICBpbWFnZS0+dGlkLCBpbWFnZS0+dGdpZCwgKGludClpbWFnZS0+cmVmX2NvdW50KTsKKworCWlmIChpbWFnZS0+cmVmX2NvdW50IDw9IDApIHsKKwkJcHJpbnRmKCJpbWFnZS0+cmVmX2NvdW50IDwgMCBmb3IgaW1hZ2U6IG5hbWUgJXMgYXBwX25hbWUgJXMsICIKKwkJICAgICAgICJrZXJuZWwgJWQsIHRpZCAlZCwgdGdpZCAlZCByZWYgY291bnQgJXVcbiIsCisJCSAgICAgICBpbWFnZS0+bmFtZSwgaW1hZ2UtPmFwcF9uYW1lLCBpbWFnZS0+a2VybmVsLAorCQkgICAgICAgaW1hZ2UtPnRpZCwgaW1hZ2UtPnRnaWQsIGltYWdlLT5yZWZfY291bnQpOworCQlhYm9ydCgpOworCX0KKworCWlmICgtLWltYWdlLT5yZWZfY291bnQgIT0gMCkKKwkJcmV0dXJuOworCisJaWYgKGltYWdlLT5uYW1lKQorCQlmcmVlKGltYWdlLT5uYW1lKTsKKwlpZiAoaW1hZ2UtPmFwcF9uYW1lKQorCQlmcmVlKGltYWdlLT5hcHBfbmFtZSk7CisJbGlzdF9kZWwoJmltYWdlLT5oYXNoX25leHQpOworCW9wZF9jbG9zZV9pbWFnZV9zYW1wbGVzX2ZpbGVzKGltYWdlKTsKKwlmcmVlKGltYWdlKTsKKworCW5yX2ltYWdlcy0tOworfQorCisKK3ZvaWQgb3BkX2Zvcl9lYWNoX2ltYWdlKG9wZF9pbWFnZV9jYiBpbWFnZV9jYikKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICogcG9zOworCXN0cnVjdCBsaXN0X2hlYWQgKiBwb3MyOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IE9QRF9JTUFHRV9IQVNIX1NJWkU7ICsraSkgeworCQlsaXN0X2Zvcl9lYWNoX3NhZmUocG9zLCBwb3MyLCAmb3BkX2ltYWdlc1tpXSkgeworCQkJc3RydWN0IG9wZF9pbWFnZSAqIGltYWdlID0KKwkJCQlsaXN0X2VudHJ5KHBvcywgc3RydWN0IG9wZF9pbWFnZSwgaGFzaF9uZXh0KTsKKwkJCWltYWdlX2NiKGltYWdlKTsKKwkJfQorCX0KK30KKyAKKworLyoqCisgKiBvcGRfaGFzaF9pbWFnZSAtIGhhc2ggYW4gaW1hZ2UKKyAqIEBwYXJhbSBoYXNoICBoYXNoIG9mIGltYWdlIG5hbWUKKyAqIEBwYXJhbSB0aWQgIHRocmVhZCBpZAorICogQHBhcmFtIHRnaWQgIHRocmVhZCBncm91cCBpZAorICoKKyAqIHJldHVybiB0aGUgaGFzaCBjb2RlIGZvciB0aGUgcGFzc2VkIHBhcmFtZXRlcnMKKyAqLworc3RhdGljIHNpemVfdCBvcGRfaGFzaF9pbWFnZShjaGFyIGNvbnN0ICogbmFtZSwgcGlkX3QgdGlkLCBwaWRfdCB0Z2lkKQoreworCXNpemVfdCBoYXNoID0gb3BfaGFzaF9zdHJpbmcobmFtZSk7CisJaWYgKHNlcGFyYXRlX3RocmVhZCkKKwkJaGFzaCArPSB0aWQgKyB0Z2lkOworCXJldHVybiAgaGFzaCAlIE9QRF9JTUFHRV9IQVNIX1NJWkU7Cit9CisKKworLyoqCisgKiBvcGRfbmV3X2ltYWdlIC0gY3JlYXRlIGFuIGltYWdlIHNhbXBsZSBmaWxlCisgKiBAcGFyYW0gYXBwX25hbWUgIHRoZSBhcHBsaWNhdGlvbiBuYW1lIHdoZXJlIGJlbG9uZ3MgdGhpcyBpbWFnZQorICogQHBhcmFtIG5hbWUgIG5hbWUgb2YgdGhlIGltYWdlIHRvIGFkZAorICogQHBhcmFtIGtlcm5lbCAgaXMgdGhlIGltYWdlIGEga2VybmVsL21vZHVsZSBpbWFnZQorICogQHBhcmFtIHRpZCAgdGhyZWFkIGlkCisgKiBAcGFyYW0gdGdpZCAgdGhyZWFkIGdyb3VwIGlkCisgKgorICogaW1hZ2UgYXQgZnVudGlvbiBlbnRyeSBpcyB1bmluaXRpYWxpc2VkCisgKiBuYW1lIGlzIGNvcGllZCBpLmUuIHNob3VsZCBiZSBHQydkIHNlcGFyYXRlbHkgZnJvbSB0aGUKKyAqIGltYWdlIHN0cnVjdHVyZSBpZiBhcHByb3ByaWF0ZS4KKyAqCisgKiBJbml0aWFsaXNlIGFuIG9wZF9pbWFnZSBzdHJ1Y3QgZm9yIHRoZSBpbWFnZSBpbWFnZQorICogd2l0aG91dCBvcGVuaW5nIHRoZSBhc3NvY2lhdGVkIHNhbXBsZXMgZmlsZXMuIEF0IHJldHVybgorICogdGhlIGltYWdlIGlzIGZ1bGx5IGluaXRpYWxpemVkLgorICovCitzdGF0aWMgc3RydWN0IG9wZF9pbWFnZSAqCitvcGRfbmV3X2ltYWdlKGNoYXIgY29uc3QgKiBuYW1lLCBjaGFyIGNvbnN0ICogYXBwX25hbWUsIGludCBrZXJuZWwsCisgICAgICAgICAgICAgIHBpZF90IHRpZCwgcGlkX3QgdGdpZCkKK3sKKwlzaXplX3QgaGFzaF9pbWFnZTsKKwlzdHJ1Y3Qgb3BkX2ltYWdlICogaW1hZ2U7CisKKwl2ZXJicHJpbnRmKHZtaXNjLCAiQ3JlYXRpbmcgaW1hZ2U6ICVzICVzLCBrZXJuZWwgJWQsIHRpZCAlZCwgIgorCSAgICAgICAgICAgInRnaWQgJWRcbiIsIG5hbWUsIGFwcF9uYW1lLCBrZXJuZWwsIHRpZCwgdGdpZCk7CisKKwlpbWFnZSA9IHhtYWxsb2Moc2l6ZW9mKHN0cnVjdCBvcGRfaW1hZ2UpKTsKKworCWxpc3RfaW5pdCgmaW1hZ2UtPmhhc2hfbmV4dCk7CisJaW1hZ2UtPm5hbWUgPSB4c3RyZHVwKG5hbWUpOworCWltYWdlLT5rZXJuZWwgPSBrZXJuZWw7CisJaW1hZ2UtPnRpZCA9IHRpZDsKKwlpbWFnZS0+dGdpZCA9IHRnaWQ7CisJaW1hZ2UtPnJlZl9jb3VudCA9IDA7CisJaW1hZ2UtPmFwcF9uYW1lID0gYXBwX25hbWUgPyB4c3RyZHVwKGFwcF9uYW1lKSA6IE5VTEw7CisJaW1hZ2UtPm10aW1lID0gb3BfZ2V0X210aW1lKGltYWdlLT5uYW1lKTsKKworCWltYWdlLT5pZ25vcmVkID0gMTsKKwlpZiAoc2VwYXJhdGVfbGliICYmIGFwcF9uYW1lKQorCQlpbWFnZS0+aWdub3JlZCA9IGlzX2ltYWdlX2lnbm9yZWQoYXBwX25hbWUpOworCWlmIChpbWFnZS0+aWdub3JlZCkKKwkJaW1hZ2UtPmlnbm9yZWQgPSBpc19pbWFnZV9pZ25vcmVkKG5hbWUpOworCisJbWVtc2V0KGltYWdlLT5zZmlsZXMsICdcMCcsIE5SX0NQVVMgKiBzaXplb2Yoc3RydWN0IG9wZF8yNF9zZmlsZSAqKikpOworCisJaGFzaF9pbWFnZSA9IG9wZF9oYXNoX2ltYWdlKG5hbWUsIHRpZCwgdGdpZCk7CisJbGlzdF9hZGQoJmltYWdlLT5oYXNoX25leHQsICZvcGRfaW1hZ2VzW2hhc2hfaW1hZ2VdKTsKKworCW5yX2ltYWdlcysrOworCisJcmV0dXJuIGltYWdlOworfQorCisKKy8qKgorICogaXNfc2FtZV9pbWFnZSAtIGNoZWNrIGZvciBpZGVudGljYWwgaW1hZ2UKKyAqIEBwYXJhbSBpbWFnZSAgaW1hZ2UgdG8gY29tcGFyZQorICogQHBhcmFtIG5hbWUgIG5hbWUgb2YgaW1hZ2UKKyAqIEBwYXJhbSBhcHBfbmFtZSBpbWFnZSBtdXN0IGJlbG9uZyB0byB0aGlzIGFwcGxpY2F0aW9uIG5hbWUKKyAqIEBwYXJhbSB0aWQgIHRocmVhZCBpZAorICogQHBhcmFtIHRnaWQgIHRocmVhZCBncm91cCBpZAorICoKKyAqIG9uIGVudHJ5IGNhbGxlciBoYXZlIGNoZWNrZWQgdGhhbiBzdHJjbXAoaW1hZ2UtPm5hbWUsIG5hbWUpID09IDAKKyAqIHJldHVybiAwIGlmIHRoZSBjb3VwbGUgKG5hbWUsIGFwcF9uYW1lKSByZWZlcnMgdG8gc2FtZSBpbWFnZQorICovCitzdGF0aWMgaW50IGlzX3NhbWVfaW1hZ2Uoc3RydWN0IG9wZF9pbWFnZSBjb25zdCAqIGltYWdlLCBjaGFyIGNvbnN0ICogYXBwX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgcGlkX3QgdGlkLCBwaWRfdCB0Z2lkKQoreworCS8qIGNvcnJlY3RuZXNzIGlzIHJlYWxseSBpbXBvcnRhbnQgaGVyZSwgaWYgd2UgZmFpbCB0byByZWNvZ25pemUKKwkgKiBpZGVudGljYWwgaW1hZ2Ugd2Ugd2lsbCBvcGVuL21tYXAgbXVsdGlwbGUgdGltZSB0aGUgc2FtZSBzYW1wbGVzCisJICogZmlsZXMgd2hpY2ggaXMgbm90IHN1cHBvcnRlZCBieSB0aGUga2VybmVsLCBzdHJhbmdlIGFzc2VydGlvbgorCSAqIGZhaWx1cmUgaW4gbGliZmQgaXMgYSB0eXBpY2FsIHN5bXB0b20gb2YgdGhhdCAqLworCisJaWYgKHNlcGFyYXRlX3RocmVhZCkgeworCQlpZiAoaW1hZ2UtPnRpZCAhPSB0aWQgfHwgaW1hZ2UtPnRnaWQgIT0gdGdpZCkKKwkJCXJldHVybiAxOworCX0KKworCS8qIGlmICFzZXBhcmF0ZV9saWIsIHRoZSBjb21wYXJpc29uIG1hZGUgYnkgY2FsbGVyIGlzIGVub3VnaCAqLworCWlmICghc2VwYXJhdGVfbGliKQorCQlyZXR1cm4gMDsKKworCWlmIChpbWFnZS0+YXBwX25hbWUgPT0gTlVMTCAmJiBhcHBfbmFtZSA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCWlmIChpbWFnZS0+YXBwX25hbWUgIT0gTlVMTCAmJiBhcHBfbmFtZSAhPSBOVUxMICYmCisJICAgICFzdHJjbXAoaW1hZ2UtPmFwcF9uYW1lLCBhcHBfbmFtZSkpCisJCXJldHVybiAwOworCisJLyogL3Byb2MgcGFyc2VkIGltYWdlIGNvbWUgd2l0aCBhIG5vbiBudWxsIGFwcF9uYW1lIGJ1dCBub3RpZmljYXRpb24KKwkgKiBmb3IgYXBwbGljYXRpb24gaXRzZWxmIGNvbWUgd2l0aCBhIG51bGwgYXBwX25hbWUsIGluIHRoaXMgY2FzZQorCSAqIHRoZSB0ZXN0IGFib3ZlIGZhaWwgc28gY2hlY2sgZm9yIHRoaXMgY2FzZS4gKi8KKwlpZiAoaW1hZ2UtPmFwcF9uYW1lICYmICFhcHBfbmFtZSAmJiAhc3RyY21wKGltYWdlLT5hcHBfbmFtZSwgaW1hZ2UtPm5hbWUpKQorCQlyZXR1cm4gMDsKKworCXJldHVybiAxOworfQorCisKKy8qKgorICogb3BkX2ZpbmRfaW1hZ2UgLSBmaW5kIGFuIGltYWdlCisgKiBAcGFyYW0gbmFtZSAgbmFtZSBvZiBpbWFnZSB0byBmaW5kCisgKiBAcGFyYW0gaGFzaCAgaGFzaCBvZiBpbWFnZSB0byBmaW5kCisgKiBAcGFyYW0gYXBwX25hbWUgIHRoZSBhcHBsaWNhdGlvbiBuYW1lIHdoZXJlIGJlbG9uZ3MgdGhpcyBpbWFnZQorICogQHBhcmFtIHRpZCAgdGhyZWFkIGlkCisgKiBAcGFyYW0gdGdpZCAgdGhyZWFkIGdyb3VwIGlkCisgKgorICogUmV0dXJucyB0aGUgaW1hZ2UgcG9pbnRlciBmb3IgdGhlIGZpbGUgc3BlY2lmaWVkIGJ5IG5hbWUsIG9yICVOVUxMLgorICovCitzdGF0aWMgc3RydWN0IG9wZF9pbWFnZSAqIG9wZF9maW5kX2ltYWdlKGNoYXIgY29uc3QgKiBuYW1lLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBjb25zdCAqIGFwcF9uYW1lLCBwaWRfdCB0aWQsIHBpZF90IHRnaWQpCit7CisJLyogc3VwcHJlc3MgdW5pbml0aWFsaXplZCB1c2Ugd2FybmluZyAqLworCXN0cnVjdCBvcGRfaW1hZ2UgKiBpbWFnZSA9IDA7CisJc3RydWN0IGxpc3RfaGVhZCAqIHBvczsKKwlzaXplX3QgYnVja2V0OworCisJb3BkXzI0X3N0YXRzW09QRF9JTUFHRV9IQVNIX0FDQ0VTU10rKzsKKwlidWNrZXQgPSBvcGRfaGFzaF9pbWFnZShuYW1lLCB0aWQsIHRnaWQpOworCWxpc3RfZm9yX2VhY2gocG9zLCAmb3BkX2ltYWdlc1tidWNrZXRdKSB7CisJCW9wZF8yNF9zdGF0c1tPUERfSU1BR0VfSEFTSF9ERVBUSF0rKzsKKwkJaW1hZ2UgPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IG9wZF9pbWFnZSwgaGFzaF9uZXh0KTsKKworCQlpZiAoIXN0cmNtcChpbWFnZS0+bmFtZSwgbmFtZSkpIHsKKwkJCWlmICghaXNfc2FtZV9pbWFnZShpbWFnZSwgYXBwX25hbWUsIHRpZCwgdGdpZCkpCisJCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAocG9zID09ICZvcGRfaW1hZ2VzW2J1Y2tldF0pCisJCXJldHVybiBOVUxMOworCisJLyogVGhlIGFwcF9uYW1lIGZpZWxkIGlzIGFsd2F5cyB2YWxpZCAqLworCXJldHVybiBpbWFnZTsKK30KKworIAorc3RydWN0IG9wZF9pbWFnZSAqIG9wZF9nZXRfaW1hZ2UoY2hhciBjb25zdCAqIG5hbWUsIGNoYXIgY29uc3QgKiBhcHBfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBrZXJuZWwsIHBpZF90IHRpZCwgcGlkX3QgdGdpZCkKK3sKKwlzdHJ1Y3Qgb3BkX2ltYWdlICogaW1hZ2U7CisJaWYgKChpbWFnZSA9IG9wZF9maW5kX2ltYWdlKG5hbWUsIGFwcF9uYW1lLCB0aWQsIHRnaWQpKSA9PSBOVUxMKQorCQlpbWFnZSA9IG9wZF9uZXdfaW1hZ2UobmFtZSwgYXBwX25hbWUsIGtlcm5lbCwgdGlkLCB0Z2lkKTsKKworCXJldHVybiBpbWFnZTsKK30KKworCitzdHJ1Y3Qgb3BkX2ltYWdlICogb3BkX2dldF9rZXJuZWxfaW1hZ2UoY2hhciBjb25zdCAqIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBjb25zdCAqIGFwcF9uYW1lLCBwaWRfdCB0aWQsIHBpZF90IHRnaWQpCit7CisJcmV0dXJuIG9wZF9nZXRfaW1hZ2UobmFtZSwgYXBwX25hbWUsIDEsIHRpZCwgdGdpZCk7Cit9CmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9kYWVtb24vbGlibGVnYWN5L29wZF9pbWFnZS5oIGIvb3Byb2ZpbGUtMC45LjcvZGFlbW9uL2xpYmxlZ2FjeS9vcGRfaW1hZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDU1MjcwCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvZGFlbW9uL2xpYmxlZ2FjeS9vcGRfaW1hZ2UuaApAQCAtMCwwICsxLDExMSBAQAorLyoqCisgKiBAZmlsZSBvcGRfaW1hZ2UuaAorICogTWFuYWdlbWVudCBvZiBiaW5hcnkgaW1hZ2VzCisgKgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMiBPUHJvZmlsZSBhdXRob3JzCisgKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORworICoKKyAqIEBhdXRob3IgSm9obiBMZXZvbgorICogQGF1dGhvciBQaGlsaXBwZSBFbGllCisgKi8KKworI2lmbmRlZiBPUERfSU1BR0VfSAorI2RlZmluZSBPUERfSU1BR0VfSAorCisjaW5jbHVkZSAib3BfbGlzdC5oIgorI2luY2x1ZGUgIm9wX2NvbmZpZ18yNC5oIgorI2luY2x1ZGUgIm9wX3R5cGVzLmgiCisKKyNpbmNsdWRlIDx0aW1lLmg+CisKK3N0cnVjdCBvcGRfMjRfc2ZpbGU7CisKKy8qKgorICogQSBiaW5hcnkgKGxpYnJhcnksIGFwcGxpY2F0aW9uLCBrZXJuZWwgb3IgbW9kdWxlKQorICogaXMgcmVwcmVzZW50ZWQgYnkgYSBzdHJ1Y3Qgb3BkX2ltYWdlLgorICovCitzdHJ1Y3Qgb3BkX2ltYWdlIHsKKwkvKiogdXNlZCBieSBjb250YWluZXIgb2Ygb3BkX2ltYWdlcyAqLworCXN0cnVjdCBsaXN0X2hlYWQgaGFzaF9uZXh0OworCS8qKiBob3cgbWFueSB0aW1lIHRoaXMgb3BkX2ltYWdlIGlzIHJlZmVyZW5jZWQgKi8KKwlpbnQgcmVmX2NvdW50OworCS8qKiBhbGwgc2FtcGxlcyBmaWxlcyBiZWxvbmdpbmcgdG8gdGhpcyBpbWFnZSAqLworCXN0cnVjdCBvcGRfMjRfc2ZpbGUgKiogc2ZpbGVzW05SX0NQVVNdOworCS8qKiBuYW1lIG9mIHRoaXMgaW1hZ2UgKi8KKwljaGFyICogbmFtZTsKKwkvKiogdGhlIGFwcGxpY2F0aW9uIG5hbWUgd2hlcmUgYmVsb25ncyB0aGlzIGltYWdlLCBOVUxMIGlmIGltYWdlIGhhcworCSAqIG5vIG93bmVyIChzdWNoIGFzIHZtbGludXggb3IgbW9kdWxlKSAqLworCWNoYXIgKiBhcHBfbmFtZTsKKwkvKiogdGhyZWFkIGlkLCBvbiAyLjIga2VybmVsIGFsd2F5cyA9PSB0byB0Z2lkICovCisJcGlkX3QgdGlkOworCS8qKiB0aHJlYWQgZ3JvdXAgaWQgICovCisJcGlkX3QgdGdpZDsKKwkvKiogdGltZSBvZiBsYXN0IG1vZGlmaWNhdGlvbiAqLworCXRpbWVfdCBtdGltZTsKKwkvKioga2VybmVsIGltYWdlIG9yIG5vdCAqLworCWludCBrZXJuZWw7CisJLyoqIG5vbiB6ZXJvIGlmIHRoaXMgaW1hZ2UgbXVzdCBiZSBwcm9maWxlZCAqLworCWludCBpZ25vcmVkOworfTsKKworLyoqIGNhbGxiYWNrIGZ1bmN0aW9uIHBhc3NlZCB0byBvcGRfZm9yX2VhY2hfaW1hZ2UoKSAqLwordHlwZWRlZiB2b2lkICgqb3BkX2ltYWdlX2NiKShzdHJ1Y3Qgb3BkX2ltYWdlICopOworCisvKioKKyAqIEBwYXJhbSBpbWFnZWNiIGNhbGxiYWNrIHRvIGFwcGx5IG9udG8gZWFjaCBleGlzdGluZyBpbWFnZSBzdHJ1Y3QKKyAqCisgKiB0aGUgY2FsbGJhY2sgcmVjZWl2ZSBhIHN0cnVjdCBvcGRfaW1hZ2UgKiAobm90IGEgY29uc3Qgc3RydWN0KSBhbmQgaXMKKyAqIGFsbG93ZWQgdG8gZnJlZXplIHRoZSBpbWFnZSBzdHJ1Y3QgaXRzZWxmLgorICovCit2b2lkIG9wZF9mb3JfZWFjaF9pbWFnZShvcGRfaW1hZ2VfY2IgaW1hZ2VjYik7CisKKy8qKgorICogaW5pdGlhbGl6ZSBvcGRfaW1hZ2UgY29udGFpbmVyCisgKi8KK3ZvaWQgb3BkX2luaXRfaW1hZ2VzKHZvaWQpOworCisvKioKKyAqIEBwYXJhbSBpbWFnZSAgdGhlIGltYWdlIHBvaW50ZXIKKyAqCisgKiBEZWNyZW1lbnQgcmVmZXJlbmNlIGNvdW50IG9mIGltYWdlLCBpZiByZWZlcmVuY2UgY291bnQgaXMgemVybyBmbHVzaCBhbmQKKyAqIGNsb3NlIHRoZSBzYW1wbGVzIGZpbGVzIHRoZW4gZnJlZXplIGFsbCBtZW1vcnkgYmVsb25naW5nIHRvIHRoaXMgaW1hZ2UuCisgKi8KK3ZvaWQgb3BkX2RlbGV0ZV9pbWFnZShzdHJ1Y3Qgb3BkX2ltYWdlICogaW1hZ2UpOworCisvKioKKyAqIG9wZF9nZXRfa2VybmVsX2ltYWdlIC0gZ2V0IGEga2VybmVsIGltYWdlCisgKiBAcGFyYW0gbmFtZSBvZiBpbWFnZQorICogQHBhcmFtIGFwcF9uYW1lIGFwcGxpY2F0aW9uIG93bmVyIG9mIHRoaXMga2VybmVsIGltYWdlLiBub24tbnVsbCBvbmx5CisgKiAgd2hlbiBzZXBhcmF0ZV9rZXJuZWxfc2FtcGxlICE9IDAKKyAqIEBwYXJhbSB0aWQgIHRocmVhZCBpZAorICogQHBhcmFtIHRnaWQgIHRocmVhZCBncm91cCBpZAorICoKKyAqIENyZWF0ZSBhbmQgaW5pdGlhbGlzZSBhbiBpbWFnZSBhZGRpbmcgaXQgdG8gdGhlIGltYWdlIGxpc3RzIGFuZCB0byBpbWFnZQorICogaGFzaCBsaXN0LiBOb3RlIHRoYW4gYXQgY3JlYXRpb24gcmVmZXJlbmNlIGNvdW50IGlzIHplcm8sIGl0J3MgY2FsbGVyCisgKiByZXNwb25zYWJpbGl0aWVzIHRvIGluY3IgdGhpcyBjb3VudC4KKyAqLworc3RydWN0IG9wZF9pbWFnZSAqIG9wZF9nZXRfa2VybmVsX2ltYWdlKGNoYXIgY29uc3QgKiBuYW1lLAorICAgICBjaGFyIGNvbnN0ICogYXBwX25hbWUsIHBpZF90IHRpZCwgcGlkX3QgdGdpZCk7CisKKy8qKgorICogb3BkX2dldF9pbWFnZSAtIGdldCBhbiBpbWFnZSBmcm9tIHRoZSBpbWFnZSBzdHJ1Y3R1cmUKKyAqIEBwYXJhbSBuYW1lICBuYW1lIG9mIGltYWdlCisgKiBAcGFyYW0gYXBwX25hbWUgIHRoZSBhcHBsaWNhdGlvbiBuYW1lIHdoZXJlIGJlbG9uZ3MgdGhpcyBpbWFnZQorICogQHBhcmFtIGtlcm5lbCAgaXMgdGhlIGltYWdlIGEga2VybmVsL21vZHVsZSBpbWFnZQorICogQHBhcmFtIHRpZCAgdGhyZWFkIGlkCisgKiBAcGFyYW0gdGdpZCAgdGhyZWFkIGdyb3VwIGlkCisgKgorICogR2V0IHRoZSBpbWFnZSBzcGVjaWZpZWQgYnkgdGhlIGZpbGUgbmFtZSBuYW1lIGZyb20gdGhlCisgKiBpbWFnZSBzdHJ1Y3R1cmUuIElmIGl0IGlzIG5vdCBwcmVzZW50LCB0aGUgaW1hZ2UgaXMKKyAqIGFkZGVkIHRvIHRoZSBzdHJ1Y3R1cmUuIEluIGVpdGhlciBjYXNlLCB0aGUgaW1hZ2UgbnVtYmVyCisgKiBpcyByZXR1cm5lZC4KKyAqLworc3RydWN0IG9wZF9pbWFnZSAqIG9wZF9nZXRfaW1hZ2UoY2hhciBjb25zdCAqIG5hbWUsIGNoYXIgY29uc3QgKiBhcHBfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBrZXJuZWwsIHBpZF90IHRpZCwgcGlkX3QgdGdpZCk7CisKKy8qKgorICogb3BkX2dldF9ucl9pbWFnZXMgLSByZXR1cm4gbnVtYmVyIG9mIGltYWdlcworICovCitpbnQgb3BkX2dldF9ucl9pbWFnZXModm9pZCk7CisKKyNlbmRpZiAvKiBPUERfSU1BR0VfSCAqLwpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvZGFlbW9uL2xpYmxlZ2FjeS9vcGRfa2VybmVsLmMgYi9vcHJvZmlsZS0wLjkuNy9kYWVtb24vbGlibGVnYWN5L29wZF9rZXJuZWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTMxYWE3Ci0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvZGFlbW9uL2xpYmxlZ2FjeS9vcGRfa2VybmVsLmMKQEAgLTAsMCArMSw0NjQgQEAKKy8qKgorICogQGZpbGUgZGFlbW9uL2xpYmxlZ2FjeS9vcGRfa2VybmVsLmMKKyAqIERlYWxpbmcgd2l0aCB0aGUga2VybmVsIGFuZCBrZXJuZWwgbW9kdWxlIHNhbXBsZXMKKyAqCisgKiBAcmVtYXJrIENvcHlyaWdodCAyMDAyIE9Qcm9maWxlIGF1dGhvcnMKKyAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCisgKgorICogQGF1dGhvciBKb2huIExldm9uCisgKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKKyAqLworCisjaW5jbHVkZSAib3BkX2tlcm5lbC5oIgorI2luY2x1ZGUgIm9wZF9wcm9jLmgiCisjaW5jbHVkZSAib3BkX2ltYWdlLmgiCisjaW5jbHVkZSAib3BkX21hcHBpbmcuaCIKKyNpbmNsdWRlICJvcGRfcHJpbnRmLmgiCisjaW5jbHVkZSAib3BkXzI0X3N0YXRzLmgiCisjaW5jbHVkZSAib3Byb2ZpbGVkLmgiCisKKyNpbmNsdWRlICJvcF9maWxlaW8uaCIKKyNpbmNsdWRlICJvcF9jb25maWdfMjQuaCIKKyNpbmNsdWRlICJvcF9saWJpYmVydHkuaCIKKworI2luY2x1ZGUgInBfbW9kdWxlLmgiCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworLyoga2VybmVsIG1vZHVsZSAqLworc3RydWN0IG9wZF9tb2R1bGUgeworCWNoYXIgKiBuYW1lOworCXN0cnVjdCBvcGRfaW1hZ2UgKiBpbWFnZTsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0OworCXVuc2lnbmVkIGxvbmcgZW5kOworCXN0cnVjdCBsaXN0X2hlYWQgbW9kdWxlX2xpc3Q7Cit9OworCitzdGF0aWMgc3RydWN0IG9wZF9pbWFnZSAqIGtlcm5lbF9pbWFnZTsKKworLyoga2VybmVsIGFuZCBtb2R1bGUgc3VwcG9ydCAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcga2VybmVsX3N0YXJ0Oworc3RhdGljIHVuc2lnbmVkIGxvbmcga2VybmVsX2VuZDsKK3N0YXRpYyBzdHJ1Y3QgbGlzdF9oZWFkIG9wZF9tb2R1bGVzID0geyAmb3BkX21vZHVsZXMsICZvcGRfbW9kdWxlcyB9Oworc3RhdGljIHVuc2lnbmVkIGludCBucl9tb2R1bGVzPTA7CisKK3ZvaWQgb3BkX2luaXRfa2VybmVsX2ltYWdlKHZvaWQpCit7CisJLyogZm9yIG5vIHZtbGludXggKi8KKwlpZiAoIXZtbGludXgpCisJCXZtbGludXggPSAibm8tdm1saW51eCI7CisJa2VybmVsX2ltYWdlID0gb3BkX2dldF9rZXJuZWxfaW1hZ2Uodm1saW51eCwgTlVMTCwgMCwgMCk7CisJa2VybmVsX2ltYWdlLT5yZWZfY291bnQrKzsKK30KKworCit2b2lkIG9wZF9wYXJzZV9rZXJuZWxfcmFuZ2UoY2hhciBjb25zdCAqIGFyZykKK3sKKwlzc2NhbmYoYXJnLCAiJWx4LCVseCIsICZrZXJuZWxfc3RhcnQsICZrZXJuZWxfZW5kKTsKKworCXZlcmJwcmludGYodm1pc2MsICJPUERfUEFSU0VfS0VSTkVMX1JBTkdFOiBrZXJuZWxfc3RhcnQgPSAlbHgsIGtlcm5lbF9lbmQgPSAlbHhcbiIsCisJCSAgIGtlcm5lbF9zdGFydCwga2VybmVsX2VuZCk7CisKKwlpZiAoIWtlcm5lbF9zdGFydCAmJiAha2VybmVsX2VuZCkgeworCQlmcHJpbnRmKHN0ZGVyciwKKwkJCSJXYXJuaW5nOiBtaXMtcGFyc2VkIGtlcm5lbCByYW5nZTogJWx4LSVseFxuIiwKKwkJCWtlcm5lbF9zdGFydCwga2VybmVsX2VuZCk7CisJCWZwcmludGYoc3RkZXJyLCAia2VybmVsIHByb2ZpbGVzIHdpbGwgYmUgd3JvbmcuXG4iKTsKKwl9Cit9CisKKworLyoqCisgKiBvcGRfY3JlYXRlX21vZHVsZSAtIGFsbG9jYXRlIGFuZCBpbml0aWFsaXNlIGEgbW9kdWxlIGRlc2NyaXB0aW9uCisgKiBAcGFyYW0gbmFtZSBtb2R1bGUgbmFtZQorICogQHBhcmFtIHN0YXJ0IHN0YXJ0IGFkZHJlc3MKKyAqIEBwYXJhbSBlbmQgZW5kIGFkZHJlc3MKKyAqLworc3RhdGljIHN0cnVjdCBvcGRfbW9kdWxlICoKK29wZF9jcmVhdGVfbW9kdWxlKGNoYXIgKiBuYW1lLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKK3sKKwlzdHJ1Y3Qgb3BkX21vZHVsZSAqIG1vZHVsZSA9IHhtYWxsb2Moc2l6ZW9mKHN0cnVjdCBvcGRfbW9kdWxlKSk7CisKKwltb2R1bGUtPm5hbWUgPSB4c3RyZHVwKG5hbWUpOworCW1vZHVsZS0+aW1hZ2UgPSBOVUxMOworCW1vZHVsZS0+c3RhcnQgPSBzdGFydDsKKwltb2R1bGUtPmVuZCA9IGVuZDsKKwlsaXN0X2FkZCgmbW9kdWxlLT5tb2R1bGVfbGlzdCwgJm9wZF9tb2R1bGVzKTsKKworCXJldHVybiBtb2R1bGU7Cit9CisKKworLyoqCisgKiBvcGRfZmluZF9tb2R1bGVfYnlfbmFtZSAtIGZpbmQgYSBtb2R1bGUgYnkgbmFtZSwgY2NyZWF0aW5nIGEgbmV3IG9uY2UgaWYKKyAqIHNlYXJjaCBmYWlsCisgKiBAcGFyYW0gbmFtZSBtb2R1bGUgbmFtZQorICovCitzdGF0aWMgc3RydWN0IG9wZF9tb2R1bGUgKiBvcGRfZmluZF9tb2R1bGVfYnlfbmFtZShjaGFyICogbmFtZSkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICogcG9zOworCXN0cnVjdCBvcGRfbW9kdWxlICogbW9kdWxlOworCisJbGlzdF9mb3JfZWFjaChwb3MsICZvcGRfbW9kdWxlcykgeworCQltb2R1bGUgPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IG9wZF9tb2R1bGUsIG1vZHVsZV9saXN0KTsKKwkJaWYgKCFzdHJjbXAobmFtZSwgbW9kdWxlLT5uYW1lKSkKKwkJCXJldHVybiBtb2R1bGU7CisJfQorCisJcmV0dXJuIG9wZF9jcmVhdGVfbW9kdWxlKG5hbWUsIDAsIDApOworfQorCisKK3ZvaWQgb3BkX2NsZWFyX21vZHVsZV9pbmZvKHZvaWQpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqIHBvczsKKwlzdHJ1Y3QgbGlzdF9oZWFkICogcG9zMjsKKwlzdHJ1Y3Qgb3BkX21vZHVsZSAqIG1vZHVsZTsKKworCXZlcmJwcmludGYodm1vZHVsZSwgIlJlbW92aW5nIG1vZHVsZSBsaXN0XG4iKTsKKwlsaXN0X2Zvcl9lYWNoX3NhZmUocG9zLCBwb3MyLCAmb3BkX21vZHVsZXMpIHsKKwkJbW9kdWxlID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCBvcGRfbW9kdWxlLCBtb2R1bGVfbGlzdCk7CisJCWZyZWUobW9kdWxlLT5uYW1lKTsKKwkJZnJlZShtb2R1bGUpOworCX0KKworCWxpc3RfaW5pdCgmb3BkX21vZHVsZXMpOworCisJb3BkX2NsZWFyX2tlcm5lbF9tYXBwaW5nKCk7Cit9CisKKworLyoqCisgKiBvcGRfZ2V0X21vZHVsZV9pbmZvIC0gcGFyc2UgbWFwcGluZyBpbmZvcm1hdGlvbiBmb3Iga2VybmVsIG1vZHVsZXMKKyAqCisgKiBQYXJzZSB0aGUgZmlsZSAvcHJvYy9rc3ltcyB0byByZWFkIGluIG1hcHBpbmcgaW5mb3JtYXRpb24gZm9yCisgKiBhbGwga2VybmVsIG1vZHVsZXMuIFRoZSBtb2R1dGlscyBwYWNrYWdlIGFkZHMgc3BlY2lhbCBzeW1ib2xzCisgKiB0byB0aGlzIGZpbGUgd2hpY2ggYWxsb3dzIGRldGVybWluYXRpb24gb2YgdGhlIG1vZHVsZSBpbWFnZQorICogYW5kIG1hcHBpbmcgYWRkcmVzc2VzIG9mIHRoZSBmb3JtIDoKKyAqCisgKiBfX2luc21vZF9tb2R1bGVuYW1lX09vYmplY3RmaWxlX01tdGltZV9WdmVyc2lvbgorICogX19pbnNtb2RfbW9kdWxlbmFtZV9Tc2VjdGlvbm5hbWVfTGxlbmd0aAorICoKKyAqIEN1cnJlbnRseSB0aGUgaW1hZ2UgZmlsZSAib2JqZWN0ZmlsZSIgaXMgc3RvcmVkLCBhbmQgZGV0YWlscyBvZgorICogIi50ZXh0IiBzZWN0aW9ucy4KKyAqCisgKiBUaGVyZSBpcyBubyBxdWVyeV9tb2R1bGUgQVBJIHRoYXQgYWxsb3cgdG8gZ2V0IGRpcmVjdGx5IHRoZSBwYXRobmFtZQorICogb2YgYSBtb2R1bGUgc28gd2UgbmVlZCB0byBwYXJzZSBhbGwgdGhlIC9wcm9jL2tzeW1zLgorICovCitzdGF0aWMgdm9pZCBvcGRfZ2V0X21vZHVsZV9pbmZvKHZvaWQpCit7CisJY2hhciAqIGxpbmU7CisJY2hhciAqIGNwLCAqIGNwMiwgKiBjcDM7CisJRklMRSAqIGZwOworCXN0cnVjdCBvcGRfbW9kdWxlICogbW9kOworCWNoYXIgKiBtb2RuYW1lOworCWNoYXIgKiBmaWxlbmFtZTsKKworCW5yX21vZHVsZXM9MDsKKworCWZwID0gb3BfdHJ5X29wZW5fZmlsZSgiL3Byb2Mva3N5bXMiLCAiciIpOworCisJaWYgKCFmcCkgeworCQlwcmludGYoIm9wcm9maWxlZDogL3Byb2Mva3N5bXMgbm90IHJlYWRhYmxlLCBjYW4ndCBwcm9jZXNzIG1vZHVsZSBzYW1wbGVzLlxuIik7CisJCXJldHVybjsKKwl9CisKKwl2ZXJicHJpbnRmKHZtb2R1bGUsICJSZWFkIG1vZHVsZSBpbmZvLlxuIik7CisKKwl3aGlsZSAoMSkgeworCQlsaW5lID0gb3BfZ2V0X2xpbmUoZnApOworCisJCWlmICghbGluZSkKKwkJCWJyZWFrOworCisJCWlmICghc3RyY21wKCIiLCBsaW5lKSkgeworCQkJZnJlZShsaW5lKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKHN0cmxlbihsaW5lKSA8IDkpIHsKKwkJCXByaW50Zigib3Byb2ZpbGVkOiBjb3JydXB0IC9wcm9jL2tzeW1zIGxpbmUgXCIlc1wiXG4iLCBsaW5lKTsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKHN0cm5jbXAoIl9faW5zbW9kXyIsIGxpbmUgKyA5LCA5KSkgeworCQkJZnJlZShsaW5lKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJY3AgPSBsaW5lICsgMTg7CisJCWNwMiA9IGNwOworCQl3aGlsZSAoKCpjcDIpICYmICEhc3RybmNtcCgiX1MiLCBjcDIrMSwgMikgJiYgISFzdHJuY21wKCJfTyIsIGNwMisxLCAyKSkKKwkJCWNwMisrOworCisJCWlmICghKmNwMikgeworCQkJcHJpbnRmKCJvcHJvZmlsZWQ6IGNvcnJ1cHQgL3Byb2Mva3N5bXMgbGluZSBcIiVzXCJcbiIsIGxpbmUpOworCQkJYnJlYWs7CisJCX0KKworCQljcDIrKzsKKworCQltb2RuYW1lID0geG1hbGxvYygoc2l6ZV90KSgoY3AyLWNwKSArIDEpKTsKKwkJc3RybmNweShtb2RuYW1lLCBjcCwgKHNpemVfdCkoKGNwMi1jcCkpKTsKKwkJbW9kbmFtZVtjcDItY3BdID0gJ1wwJzsKKworCQltb2QgPSBvcGRfZmluZF9tb2R1bGVfYnlfbmFtZShtb2RuYW1lKTsKKworCQlmcmVlKG1vZG5hbWUpOworCisJCXN3aXRjaCAoKigrK2NwMikpIHsKKwkJCWNhc2UgJ08nOgorCQkJCS8qIGdldCBmaWxlbmFtZSAqLworCQkJCWNwMisrOworCQkJCWNwMyA9IGNwMjsKKworCQkJCXdoaWxlICgoKmNwMykgJiYgISFzdHJuY21wKCJfTSIsIGNwMysxLCAyKSkKKwkJCQkJY3AzKys7CisKKwkJCQlpZiAoISpjcDMpIHsKKwkJCQkJZnJlZShsaW5lKTsKKwkJCQkJY29udGludWU7CisJCQkJfQorCisJCQkJY3AzKys7CisJCQkJZmlsZW5hbWUgPSB4bWFsbG9jKChzaXplX3QpKGNwMyAtIGNwMiArIDEpKTsKKwkJCQlzdHJuY3B5KGZpbGVuYW1lLCBjcDIsIChzaXplX3QpKGNwMyAtIGNwMikpOworCQkJCWZpbGVuYW1lW2NwMy1jcDJdID0gJ1wwJzsKKworCQkJCW1vZC0+aW1hZ2UgPSBvcGRfZ2V0X2tlcm5lbF9pbWFnZShmaWxlbmFtZSwgTlVMTCwgMCwgMCk7CisJCQkJbW9kLT5pbWFnZS0+cmVmX2NvdW50Kys7CisJCQkJZnJlZShmaWxlbmFtZSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgJ1MnOgorCQkJCS8qIGdldCBleHRlbnQgb2YgLnRleHQgc2VjdGlvbiAqLworCQkJCWNwMisrOworCQkJCWlmIChzdHJuY21wKCIudGV4dF9MIiwgY3AyLCA3KSkgeworCQkJCQlmcmVlKGxpbmUpOworCQkJCQljb250aW51ZTsKKwkJCQl9CisKKwkJCQljcDIgKz0gNzsKKwkJCQlzc2NhbmYobGluZSwgIiVseCIsICZtb2QtPnN0YXJ0KTsKKwkJCQlzc2NhbmYoY3AyLCAiJWx1IiwgJm1vZC0+ZW5kKTsKKwkJCQltb2QtPmVuZCArPSBtb2QtPnN0YXJ0OworCQkJCWJyZWFrOworCQl9CisKKwkJZnJlZShsaW5lKTsKKwl9CisKKwlpZiAobGluZSkKKwkJZnJlZShsaW5lKTsKKwlvcF9jbG9zZV9maWxlKGZwKTsKK30KKyAKKworLyoqCisgKiBvcGRfZHJvcF9tb2R1bGVfc2FtcGxlIC0gZHJvcCBhIG1vZHVsZSBzYW1wbGUgZWZmaWNpZW50bHkKKyAqIEBwYXJhbSBlaXAgIGVpcCBvZiBzYW1wbGUKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB0byByZWNvdmVyIGZyb20gZmFpbGluZyB0byBwdXQgYSBzYW1wbGVzIGV2ZW4KKyAqIGFmdGVyIHJlLXJlYWRpbmcgL3Byb2Mva3N5bXMuIEl0J3MgZWl0aGVyIGEgcm9ndWUgc2FtcGxlLCBvciBmcm9tIGEgbW9kdWxlCisgKiB0aGF0IGRpZG4ndCBjcmVhdGUgc3ltYm9scyAobGlrZSBpbiBzb21lIGluaXRyZCBzZXR1cHMpLiBTbyB3ZSBjaGVjayB3aXRoCisgKiBxdWVyeV9tb2R1bGUoKSBpZiB3ZSBjYW4gcGxhY2UgaXQgaW4gYSBzeW1ib2wtbGVzcyBtb2R1bGUsIGFuZCBpZiBzbyBjcmVhdGUKKyAqIGEgbmVnYXRpdmUgZW50cnkgZm9yIGl0LCB0byBxdWlja2x5IGlnbm9yZSBmdXR1cmUgc2FtcGxlcy4KKyAqCisgKiBQcm9ibGVtIHVuY292ZXJlZCBieSBCb2IgTW9udGdvbWVyeSA8Ym9ibUBmYy5ocC5jb20+CisgKgorICovCitzdGF0aWMgdm9pZCBvcGRfZHJvcF9tb2R1bGVfc2FtcGxlKHVuc2lnbmVkIGxvbmcgZWlwKQoreworCWNoYXIgKiBtb2R1bGVfbmFtZXM7CisJY2hhciAqIG5hbWU7CisJc2l6ZV90IHNpemUgPSAxMDI0OworCXNpemVfdCByZXQ7CisJdWludCBucl9tb2RzOworCXVpbnQgbW9kID0gMDsKKworCW9wZF8yNF9zdGF0c1tPUERfTE9TVF9NT0RVTEVdKys7CisKKwltb2R1bGVfbmFtZXMgPSB4bWFsbG9jKHNpemUpOworCXdoaWxlIChxdWVyeV9tb2R1bGUoTlVMTCwgUU1fTU9EVUxFUywgbW9kdWxlX25hbWVzLCBzaXplLCAmcmV0KSkgeworCQlpZiAoZXJybm8gIT0gRU5PU1BDKSB7CisJCQl2ZXJicHJpbnRmKHZtb2R1bGUsICJxdWVyeV9tb2R1bGUgZmFpbGVkOiAlc1xuIiwgc3RyZXJyb3IoZXJybm8pKTsKKwkJCXJldHVybjsKKwkJfQorCQlzaXplID0gcmV0OworCQltb2R1bGVfbmFtZXMgPSB4cmVhbGxvYyhtb2R1bGVfbmFtZXMsIHNpemUpOworCX0KKworCW5yX21vZHMgPSByZXQ7CisJbmFtZSA9IG1vZHVsZV9uYW1lczsKKworCXdoaWxlIChtb2QgPCBucl9tb2RzKSB7CisJCXN0cnVjdCBtb2R1bGVfaW5mbyBpbmZvOworCQlpZiAoIXF1ZXJ5X21vZHVsZShuYW1lLCBRTV9JTkZPLCAmaW5mbywgc2l6ZW9mKGluZm8pLCAmcmV0KSkgeworCQkJaWYgKGVpcCA+PSBpbmZvLmFkZHIgJiYgZWlwIDwgaW5mby5hZGRyICsgaW5mby5zaXplKSB7CisJCQkJdmVyYnByaW50Zih2bW9kdWxlLCAiU2FtcGxlIGZyb20gdW5wcm9maWxhYmxlIG1vZHVsZSAlc1xuIiwgbmFtZSk7CisJCQkJb3BkX2NyZWF0ZV9tb2R1bGUobmFtZSwgaW5mby5hZGRyLCBpbmZvLmFkZHIgKyBpbmZvLnNpemUpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCW1vZCsrOworCQluYW1lICs9IHN0cmxlbihuYW1lKSArIDE7CisJfQorCisJaWYgKG1vZHVsZV9uYW1lcykKKwkJZnJlZShtb2R1bGVfbmFtZXMpOworfQorCisKKy8qKgorICogb3BkX2ZpbmRfbW9kdWxlX2J5X2VpcCAtIGZpbmQgYSBtb2R1bGUgYnkgaXRzIGVpcAorICogQHBhcmFtIGVpcCAgRUlQIHZhbHVlCisgKgorICogZmluZCBpbiB0aGUgbW9kdWxlcyBjb250YWluZXIgdGhlIG1vZHVsZSB3aGljaAorICogY29udGFpbiB0aGlzIGVpcCByZXR1cm4gJU5VTEwgaWYgbm90IGZvdW5kLgorICogY2FsbGVyIG11c3QgY2hlY2sgdGhhbiB0aGUgbW9kdWxlIGltYWdlIGlzIHZhbGlkCisgKi8KK3N0YXRpYyBzdHJ1Y3Qgb3BkX21vZHVsZSAqIG9wZF9maW5kX21vZHVsZV9ieV9laXAodW5zaWduZWQgbG9uZyBlaXApCit7CisJc3RydWN0IGxpc3RfaGVhZCAqIHBvczsKKwlzdHJ1Y3Qgb3BkX21vZHVsZSAqIG1vZHVsZTsKKworCWxpc3RfZm9yX2VhY2gocG9zLCAmb3BkX21vZHVsZXMpIHsKKwkJbW9kdWxlID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCBvcGRfbW9kdWxlLCBtb2R1bGVfbGlzdCk7CisJCWlmIChtb2R1bGUtPnN0YXJ0IDw9IGVpcCAmJiBtb2R1bGUtPmVuZCA+IGVpcCkKKwkJCXJldHVybiBtb2R1bGU7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKKworLyoqCisgKiBvcGRfaGFuZGxlX21vZHVsZV9zYW1wbGUgLSBwcm9jZXNzIGEgbW9kdWxlIHNhbXBsZQorICogQHBhcmFtIGVpcCAgRUlQIHZhbHVlCisgKiBAcGFyYW0gY291bnRlciAgY291bnRlciBudW1iZXIKKyAqCisgKiBQcm9jZXNzIGEgc2FtcGxlIGluIG1vZHVsZSBhZGRyZXNzIHNwYWNlLiBUaGUgc2FtcGxlIGVpcAorICogaXMgbWF0Y2hlZCBhZ2FpbnN0IG1vZHVsZSBpbmZvcm1hdGlvbi4gSWYgdGhlIHNlYXJjaCB3YXMKKyAqIHN1Y2Nlc3NmdWwsIHRoZSBzYW1wbGUgaXMgb3V0cHV0IHRvIHRoZSByZWxldmFudCBmaWxlLgorICoKKyAqIE5vdGUgdGhhdCBmb3IgbW9kdWxlcyBhbmQgdGhlIGtlcm5lbCwgdGhlIG9mZnNldCB3aWxsIGJlCisgKiB3cm9uZyBpbiB0aGUgZmlsZSwgYXMgaXQgaXMgbm90IGEgZmlsZSBvZmZzZXQsIGJ1dCB0aGUgb2Zmc2V0CisgKiBmcm9tIHRoZSB0ZXh0IHNlY3Rpb24uIFRoaXMgaXMgZml4ZWQgdXAgaW4gcHAuCisgKgorICogSWYgdGhlIHNhbXBsZSBjb3VsZCBub3QgYmUgbG9jYXRlZCBpbiBhIG1vZHVsZSwgaXQgaXMgdHJlYXRlZAorICogYXMgYSBrZXJuZWwgc2FtcGxlLgorICovCitzdGF0aWMgdm9pZCBvcGRfaGFuZGxlX21vZHVsZV9zYW1wbGUodW5zaWduZWQgbG9uZyBlaXAsIHUzMiBjb3VudGVyKQoreworCXN0cnVjdCBvcGRfbW9kdWxlICogbW9kdWxlOworCisJbW9kdWxlID0gb3BkX2ZpbmRfbW9kdWxlX2J5X2VpcChlaXApOworCWlmICghbW9kdWxlKSB7CisJCS8qIG5vdCBmb3VuZCBpbiBrbm93biBtb2R1bGVzLCByZS1yZWFkIG91ciBpbmZvIGFuZCByZXRyeSAqLworCQlvcGRfY2xlYXJfbW9kdWxlX2luZm8oKTsKKwkJb3BkX2dldF9tb2R1bGVfaW5mbygpOworCisJCW1vZHVsZSA9IG9wZF9maW5kX21vZHVsZV9ieV9laXAoZWlwKTsKKwl9CisKKwlpZiAobW9kdWxlKSB7CisJCWlmIChtb2R1bGUtPmltYWdlICE9IE5VTEwpIHsKKwkJCW9wZF8yNF9zdGF0c1tPUERfTU9EVUxFXSsrOworCQkJb3BkX3B1dF9pbWFnZV9zYW1wbGUobW9kdWxlLT5pbWFnZSwKKwkJCQkJICAgICBlaXAgLSBtb2R1bGUtPnN0YXJ0LCBjb3VudGVyKTsKKwkJfSBlbHNlIHsKKwkJCW9wZF8yNF9zdGF0c1tPUERfTE9TVF9NT0RVTEVdKys7CisJCQl2ZXJicHJpbnRmKHZtb2R1bGUsICJObyBpbWFnZSBmb3Igc2FtcGxlZCBtb2R1bGUgJXNcbiIsCisJCQkJICAgbW9kdWxlLT5uYW1lKTsKKwkJfQorCX0gZWxzZSB7CisJCW9wZF9kcm9wX21vZHVsZV9zYW1wbGUoZWlwKTsKKwl9Cit9CisKKwordm9pZCBvcGRfaGFuZGxlX2tlcm5lbF9zYW1wbGUodW5zaWduZWQgbG9uZyBlaXAsIHUzMiBjb3VudGVyKQoreworCWlmIChub192bWxpbnV4IHx8IGVpcCA8IGtlcm5lbF9lbmQpIHsKKwkJb3BkXzI0X3N0YXRzW09QRF9LRVJORUxdKys7CisJCW9wZF9wdXRfaW1hZ2Vfc2FtcGxlKGtlcm5lbF9pbWFnZSwgZWlwIC0ga2VybmVsX3N0YXJ0LCBjb3VudGVyKTsKKwkJcmV0dXJuOworCX0KKworCS8qIGluIGEgbW9kdWxlICovCisJb3BkX2hhbmRsZV9tb2R1bGVfc2FtcGxlKGVpcCwgY291bnRlcik7Cit9CisgCisKK2ludCBvcGRfZWlwX2lzX2tlcm5lbCh1bnNpZ25lZCBsb25nIGVpcCkKK3sKKyNpZmRlZiBfX2kzODYKKyNkZWZpbmUgS0VSTkVMX09GRlNFVCAweEMwMDAwMDAwCisJLyoKKwkgKiBrZXJuZWxfc3RhcnQgPT0gMCB3aGVuIHVzaW5nIC0tbm8tdm1saW51eC4KKwkgKiBUaGlzIGlzIHdyb25nLCB3cm9uZywgd3JvbmcsIHdyb25nLCBidXQgd2UgZG9uJ3QgaGF2ZSBtdWNoCisJICogY2hvaWNlLiBJdCBvYnZpb3VzbHkgYnJlYWtzIGZvciBJQTY0LgorCSAqLworCWlmICgha2VybmVsX3N0YXJ0KQorCQlyZXR1cm4gZWlwID49IEtFUk5FTF9PRkZTRVQ7CisjZW5kaWYKKworCXJldHVybiBlaXAgPj0ga2VybmVsX3N0YXJ0OworfQorCisKK3ZvaWQgb3BkX2FkZF9rZXJuZWxfbWFwKHN0cnVjdCBvcGRfcHJvYyAqIHByb2MsIHVuc2lnbmVkIGxvbmcgZWlwKQoreworCXN0cnVjdCBvcGRfbW9kdWxlICogbW9kdWxlOworCXN0cnVjdCBvcGRfaW1hZ2UgKiBpbWFnZTsKKwljaGFyIGNvbnN0ICogYXBwX25hbWU7CisKKwlhcHBfbmFtZSA9IHByb2MtPm5hbWU7CisJaWYgKCFhcHBfbmFtZSkgeworCQl2ZXJicHJpbnRmKHZtaXNjLCAidW4tbmFtZWQgcHJvYyBmb3IgdGlkICVkXG4iLCBwcm9jLT50aWQpOworCQlyZXR1cm47CisJfQorCisKKwlpZiAoZWlwIDwga2VybmVsX2VuZCkgeworCQlpbWFnZSA9IG9wZF9nZXRfa2VybmVsX2ltYWdlKHZtbGludXgsIGFwcF9uYW1lLCBwcm9jLT50aWQsIHByb2MtPnRnaWQpOworCQlpZiAoIWltYWdlKSB7CisJCQl2ZXJicHJpbnRmKHZtaXNjLCAiQ2FuJ3QgY3JlYXRlIGltYWdlIGZvciAlcyAlc1xuIiwgdm1saW51eCwgYXBwX25hbWUpOworCQkJcmV0dXJuOworCQl9CisKKwkJb3BkX2FkZF9tYXBwaW5nKHByb2MsIGltYWdlLCBrZXJuZWxfc3RhcnQsIDAsIGtlcm5lbF9lbmQpOworCQlyZXR1cm47CisJfQorCisJbW9kdWxlID0gb3BkX2ZpbmRfbW9kdWxlX2J5X2VpcChlaXApOworCWlmICghbW9kdWxlKSB7CisJCS8qIG5vdCBmb3VuZCBpbiBrbm93biBtb2R1bGVzLCByZS1yZWFkIG91ciBpbmZvIGFuZCByZXRyeSAqLworCQlvcGRfY2xlYXJfbW9kdWxlX2luZm8oKTsKKwkJb3BkX2dldF9tb2R1bGVfaW5mbygpOworCisJCW1vZHVsZSA9IG9wZF9maW5kX21vZHVsZV9ieV9laXAoZWlwKTsKKwl9CisKKwlpZiAobW9kdWxlKSB7CisJCS8qIG1vZHVsZS0+bmFtZSBpcyBvbmx5IHRoZSBtb2R1bGUgbmFtZSBub3QgdGhlIGZ1bGwgcGF0aCAqLworCQljaGFyIGNvbnN0ICogbW9kdWxlX25hbWUgPSAwOworCQlpZiAobW9kdWxlLT5pbWFnZSkKKwkJCW1vZHVsZV9uYW1lID0gbW9kdWxlLT5pbWFnZS0+bmFtZTsKKwkJaWYgKCFtb2R1bGVfbmFtZSkgeworCQkJdmVyYnByaW50Zih2bW9kdWxlLCAidW5hYmxlIHRvIGdldCBwYXRoIG5hbWUgZm9yIG1vZHVsZSAlc1xuIiwKKwkJCSAgICAgICBtb2R1bGUtPm5hbWUpOworCQkJbW9kdWxlX25hbWUgPSBtb2R1bGUtPm5hbWU7CisJCX0KKwkJaW1hZ2UgPSBvcGRfZ2V0X2tlcm5lbF9pbWFnZShtb2R1bGVfbmFtZSwgYXBwX25hbWUsIHByb2MtPnRpZCwgcHJvYy0+dGdpZCk7CisJCWlmICghaW1hZ2UpIHsKKwkJCXZlcmJwcmludGYodm1vZHVsZSwgIkNhbid0IGNyZWF0ZSBpbWFnZSBmb3IgJXMgJXNcbiIsCisJCQkgICAgICAgbW9kdWxlLT5uYW1lLCBhcHBfbmFtZSk7CisJCQlyZXR1cm47CisJCX0KKwkJb3BkX2FkZF9tYXBwaW5nKHByb2MsIGltYWdlLCBtb2R1bGUtPnN0YXJ0LCAwLCBtb2R1bGUtPmVuZCk7CisJfSBlbHNlIHsKKwkJb3BkX2Ryb3BfbW9kdWxlX3NhbXBsZShlaXApOworCX0KK30KZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2RhZW1vbi9saWJsZWdhY3kvb3BkX2tlcm5lbC5oIGIvb3Byb2ZpbGUtMC45LjcvZGFlbW9uL2xpYmxlZ2FjeS9vcGRfa2VybmVsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjg1NGFlMAotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2RhZW1vbi9saWJsZWdhY3kvb3BkX2tlcm5lbC5oCkBAIC0wLDAgKzEsNjcgQEAKKy8qKgorICogQGZpbGUgZGFlbW9uL2xpYmxlZ2FjeS9vcGRfa2VybmVsLmgKKyAqIERlYWxpbmcgd2l0aCB0aGUga2VybmVsIGFuZCBrZXJuZWwgbW9kdWxlIHNhbXBsZXMKKyAqCisgKiBAcmVtYXJrIENvcHlyaWdodCAyMDAyIE9Qcm9maWxlIGF1dGhvcnMKKyAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCisgKgorICogQGF1dGhvciBKb2huIExldm9uCisgKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKKyAqLworCisjaWZuZGVmIE9QRF9LRVJORUxfSAorI2RlZmluZSBPUERfS0VSTkVMX0gKKworI2luY2x1ZGUgIm9wX3R5cGVzLmgiCisKK3N0cnVjdCBvcGRfcHJvYzsKKworLyoqCisgKiBvcGRfaW5pdF9rZXJuZWxfaW1hZ2UgLSBpbml0aWFsaXNlIHRoZSBrZXJuZWwgaW1hZ2UKKyAqLwordm9pZCBvcGRfaW5pdF9rZXJuZWxfaW1hZ2Uodm9pZCk7CisKKy8qKgorICogb3BkX3BhcnNlX2tlcm5lbF9yYW5nZSAtIHBhcnNlIHRoZSBrZXJuZWwgcmFuZ2UgdmFsdWVzCisgKi8KK3ZvaWQgb3BkX3BhcnNlX2tlcm5lbF9yYW5nZShjaGFyIGNvbnN0ICogYXJnKTsKKworLyoqCisgKiBvcGRfY2xlYXJfbW9kdWxlX2luZm8gLSBjbGVhciBrZXJuZWwgbW9kdWxlIGluZm9ybWF0aW9uCisgKgorICogQ2xlYXIgYW5kIGZyZWUgYWxsIGtlcm5lbCBtb2R1bGUgaW5mb3JtYXRpb24gYW5kIHJlc2V0CisgKiB2YWx1ZXMuCisgKi8KK3ZvaWQgb3BkX2NsZWFyX21vZHVsZV9pbmZvKHZvaWQpOworCisvKioKKyAqIG9wZF9oYW5kbGVfa2VybmVsX3NhbXBsZSAtIHByb2Nlc3MgYSBrZXJuZWwgc2FtcGxlCisgKiBAcGFyYW0gZWlwICBFSVAgdmFsdWUgb2Ygc2FtcGxlCisgKiBAcGFyYW0gY291bnRlciAgY291bnRlciBudW1iZXIKKyAqCisgKiBIYW5kbGUgYSBzYW1wbGUgaW4ga2VybmVsIGFkZHJlc3Mgc3BhY2Ugb3IgaW4gYSBtb2R1bGUuIFRoZSBzYW1wbGUgaXMKKyAqIG91dHB1dCB0byB0aGUgcmVsZXZhbnQgaW1hZ2UgZmlsZS4KKyAqLwordm9pZCBvcGRfaGFuZGxlX2tlcm5lbF9zYW1wbGUodW5zaWduZWQgbG9uZyBlaXAsIHUzMiBjb3VudGVyKTsKKworLyoqCisgKiBvcGRfZWlwX2lzX2tlcm5lbCAtIGlzIHRoZSBzYW1wbGUgZnJvbSBrZXJuZWwvbW9kdWxlIHNwYWNlCisgKiBAcGFyYW0gZWlwICBFSVAgdmFsdWUKKyAqCisgKiBSZXR1cm5zICUxIGlmIGVpcCBpcyBpbiB0aGUgYWRkcmVzcyBzcGFjZSBzdGFydGluZyBhdAorICoga2VybmVsX3N0YXJ0LCAlMCBvdGhlcndpc2UuCisgKi8KK2ludCBvcGRfZWlwX2lzX2tlcm5lbCh1bnNpZ25lZCBsb25nIGVpcCk7CisKKy8qKgorICogb3BkX2FkZF9rZXJuZWxfbWFwIC0gYWRkIGEgbW9kdWxlIG9yIGtlcm5lbCBtYXBzIHRvIGEgcHJvYyBzdHJ1Y3QKKyAqCisgKiBAcGFyYW0gcHJvYyBvd25pbmcgcHJvYyBvZiB0aGUgbmV3IG1hcHBpbmcKKyAqIEBwYXJhbSBlaXAgZWlwIGluc2lkZSB0aGUgbmV3IG1hcHBpbmcKKyAqCisgKiBXZSBhc3N1bWUgdGhhbiBlaXAgPj0ga2VybmVsX3N0YXJ0CisgKgorICovCit2b2lkIG9wZF9hZGRfa2VybmVsX21hcChzdHJ1Y3Qgb3BkX3Byb2MgKiBwcm9jLCB1bnNpZ25lZCBsb25nIGVpcCk7CisKKyNlbmRpZiAvKiBPUERfS0VSTkVMX0ggKi8KZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2RhZW1vbi9saWJsZWdhY3kvb3BkX21hcHBpbmcuYyBiL29wcm9maWxlLTAuOS43L2RhZW1vbi9saWJsZWdhY3kvb3BkX21hcHBpbmcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTljNDc1Ci0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvZGFlbW9uL2xpYmxlZ2FjeS9vcGRfbWFwcGluZy5jCkBAIC0wLDAgKzEsMTcwIEBACisvKioKKyAqIEBmaWxlIG9wZF9tYXBwaW5nLmMKKyAqIE1hbmFnZW1lbnQgb2YgcHJvY2VzcyBtYXBwaW5ncworICoKKyAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDIgT1Byb2ZpbGUgYXV0aG9ycworICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKKyAqCisgKiBAYXV0aG9yIEpvaG4gTGV2b24KKyAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQorICovCisKKyNpbmNsdWRlICJvcGRfbWFwcGluZy5oIgorI2luY2x1ZGUgIm9wZF9wcm9jLmgiCisjaW5jbHVkZSAib3BkX2ltYWdlLmgiCisjaW5jbHVkZSAib3BkX3ByaW50Zi5oIgorCisjaW5jbHVkZSAib3BfaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAib3BfY29uZmlnXzI0LmgiCisjaW5jbHVkZSAib3BfbGliaWJlcnR5LmgiCisKKyNpbmNsdWRlIDxzeXMvbW1hbi5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKy8qIGhhc2ggbWFwIGRldmljZSBtbWFwICovCitzdGF0aWMgc3RydWN0IG9wX2hhc2hfaW5kZXggKiBoYXNobWFwOworLyogYWxyZWFkeSBzZWVuIG1hcHBpbmcgbmFtZSAqLworc3RhdGljIGNoYXIgY29uc3QgKiBoYXNoX25hbWVbT1BfSEFTSF9NQVBfTlJdOworCisKK3ZvaWQgb3BkX2NsZWFudXBfaGFzaF9uYW1lKHZvaWQpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IE9QX0hBU0hfTUFQX05SOyArK2kpCisJCWZyZWUoKGNoYXIgKiloYXNoX25hbWVbaV0pOworCQorfQorCisKK3ZvaWQgb3BkX2luaXRfaGFzaF9tYXAodm9pZCkKK3sKKwlleHRlcm4gZmRfdCBoYXNobWFwZGV2ZmQ7CisKKwloYXNobWFwID0gbW1hcCgwLCBPUF9IQVNIX01BUF9TSVpFLCBQUk9UX1JFQUQsIE1BUF9TSEFSRUQsIGhhc2htYXBkZXZmZCwgMCk7CisJaWYgKChsb25nKWhhc2htYXAgPT0gLTEpIHsKKwkJcGVycm9yKCJvcHJvZmlsZWQ6IGNvdWxkbid0IG1tYXAgaGFzaCBtYXAiKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKworfQorCisKK3ZvaWQgb3BkX2tpbGxfbWFwcyhzdHJ1Y3Qgb3BkX3Byb2MgKiBwcm9jKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKiBwb3MsICogcG9zMjsKKworCWxpc3RfZm9yX2VhY2hfc2FmZShwb3MsIHBvczIsICZwcm9jLT5tYXBzKSB7CisJCXN0cnVjdCBvcGRfbWFwICogbWFwID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCBvcGRfbWFwLCBuZXh0KTsKKwkJbGlzdF9kZWwocG9zKTsKKwkJb3BkX2RlbGV0ZV9pbWFnZShtYXAtPmltYWdlKTsKKwkJZnJlZShtYXApOworCX0KK30KKworCit2b2lkIG9wZF9hZGRfbWFwcGluZyhzdHJ1Y3Qgb3BkX3Byb2MgKiBwcm9jLCBzdHJ1Y3Qgb3BkX2ltYWdlICogaW1hZ2UsCisJCXVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIGVuZCkKK3sKKwlzdHJ1Y3Qgb3BkX21hcCAqIG1hcDsKKworCXZlcmJwcmludGYodm1pc2MsICJBZGRpbmcgbWFwcGluZyBmb3IgcHJvY2VzcyAlZDogMHglLjhseC0weCUuOGx4LCBvZmYgMHglLjhseCwgXCIlc1wiXG4iLAorCQlwcm9jLT50aWQsIHN0YXJ0LCBlbmQsIG9mZnNldCwgaW1hZ2UtPm5hbWUpOworCisJbWFwID0gbWFsbG9jKHNpemVvZihzdHJ1Y3Qgb3BkX21hcCkpOworCisJLyogZmlyc3QgbWFwIGlzIHRoZSBwcmltYXJ5IGltYWdlICovCisJaWYgKGxpc3RfZW1wdHkoJnByb2MtPm1hcHMpKSB7CisJCWlmIChwcm9jLT5uYW1lKQorCQkJZnJlZSgoY2hhciAqKXByb2MtPm5hbWUpOworCQlwcm9jLT5uYW1lID0geHN0cmR1cChpbWFnZS0+bmFtZSk7CisJfQorCisJaW1hZ2UtPnJlZl9jb3VudCsrOworCisJbWFwLT5pbWFnZSA9IGltYWdlOworCW1hcC0+c3RhcnQgPSBzdGFydDsKKwltYXAtPm9mZnNldCA9IG9mZnNldDsKKwltYXAtPmVuZCA9IGVuZDsKKwlsaXN0X2FkZF90YWlsKCZtYXAtPm5leHQsICZwcm9jLT5tYXBzKTsKK30KKworCisvKioKKyAqIGdldF9mcm9tX3Bvb2wgLSByZXRyaWV2ZSBzdHJpbmcgZnJvbSBoYXNoIG1hcCBwb29sCisgKiBAcGFyYW0gaW5kIGluZGV4IGludG8gcG9vbAorICovCitpbmxpbmUgc3RhdGljIGNoYXIgKiBnZXRfZnJvbV9wb29sKHVpbnQgaW5kKQoreworCXJldHVybiAoKGNoYXIgKikoaGFzaG1hcCArIE9QX0hBU0hfTUFQX05SKSArIGluZCk7Cit9CisKKworLyoqCisgKiBvcGdfZ2V0X2hhc2hfbmFtZSAtIGZpbmQgYSBtYXBwaW5nIG5hbWUgZnJvbSBhIGhhc2gKKyAqIEBwYXJhbSBoYXNoIGhhc2ggdmFsdWUgZm9yIHRoaXMgbmFtZQorICovCitzdGF0aWMgY2hhciBjb25zdCAqIG9wZF9nZXRfaGFzaF9uYW1lKGludCBoYXNoKQoreworCWNoYXIgZmlsZVtQQVRIX01BWF07CisJY2hhciAqIGMgPSAmZmlsZVtQQVRIX01BWC0xXTsKKwlpbnQgb3JpZ2hhc2ggPSBoYXNoOworCisJaWYgKGhhc2hfbmFtZVtoYXNoXSkKKwkJcmV0dXJuIGhhc2hfbmFtZVtoYXNoXTsKKworCSpjID0gJ1wwJzsKKwl3aGlsZSAoaGFzaCkgeworCQljaGFyICogbmFtZSA9IGdldF9mcm9tX3Bvb2woaGFzaG1hcFtoYXNoXS5uYW1lKTsKKworCQlpZiAoc3RybGVuKG5hbWUpICsgMSArIHN0cmxlbihjKSA+PSBQQVRIX01BWCkgeworCQkJZnByaW50ZihzdGRlcnIsICJTdHJpbmcgXCIlc1wiIHRvbyBsYXJnZS5cbiIsIGMpOworCQkJZXhpdChFWElUX0ZBSUxVUkUpOworCQl9CisKKwkJYyAtPSBzdHJsZW4obmFtZSkgKyAxOworCQkqYyA9ICcvJzsKKwkJc3RybmNweShjICsgMSwgbmFtZSwgc3RybGVuKG5hbWUpKTsKKworCQkvKiBtb3ZlIG9udG8gcGFyZW50ICovCisJCWhhc2ggPSBoYXNobWFwW2hhc2hdLnBhcmVudDsKKwl9CisKKwlyZXR1cm4gaGFzaF9uYW1lW29yaWdoYXNoXSA9IHhzdHJkdXAoYyk7Cit9CisKKwordm9pZCBvcGRfaGFuZGxlX21hcHBpbmcoc3RydWN0IG9wX25vdGUgY29uc3QgKiBub3RlKQoreworCXN0cnVjdCBvcGRfcHJvYyAqIHByb2M7CisJc3RydWN0IG9wZF9pbWFnZSAqIGltYWdlOworCWludCBoYXNoOworCWNoYXIgY29uc3QgKiBuYW1lOworCisJcHJvYyA9IG9wZF9nZXRfcHJvYyhub3RlLT5waWQsIG5vdGUtPnRnaWQpOworCisJaWYgKCFwcm9jKSB7CisJCXZlcmJwcmludGYodm1pc2MsICJUb2xkIGFib3V0IG1hcHBpbmcgZm9yIG5vbi1leGlzdGVudCBwcm9jZXNzICV1LlxuIiwgbm90ZS0+cGlkKTsKKwkJcHJvYyA9IG9wZF9uZXdfcHJvYyhub3RlLT5waWQsIG5vdGUtPnRnaWQpOworCX0KKworCWhhc2ggPSBub3RlLT5oYXNoOworCisJaWYgKGhhc2ggPT0gLTEpIHsKKwkJLyogcG9zc2libHkgZGVsZXRlZCBmaWxlICovCisJCXJldHVybjsKKwl9CisKKwlpZiAoaGFzaCA8IDAgfHwgaGFzaCA+PSBPUF9IQVNIX01BUF9OUikgeworCQlmcHJpbnRmKHN0ZGVyciwgImhhc2ggdmFsdWUgJXUgb3V0IG9mIHJhbmdlLlxuIiwgaGFzaCk7CisJCXJldHVybjsKKwl9CisKKwluYW1lID0gb3BkX2dldF9oYXNoX25hbWUoaGFzaCk7CisJaW1hZ2UgPSBvcGRfZ2V0X2ltYWdlKG5hbWUsIHByb2MtPm5hbWUsIDAsIG5vdGUtPnBpZCwgbm90ZS0+dGdpZCk7CisKKwlvcGRfYWRkX21hcHBpbmcocHJvYywgaW1hZ2UsIG5vdGUtPmFkZHIsIG5vdGUtPm9mZnNldCwKKwkgICAgICAgICAgICAgICAgbm90ZS0+YWRkciArIG5vdGUtPmxlbik7Cit9CmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9kYWVtb24vbGlibGVnYWN5L29wZF9tYXBwaW5nLmggYi9vcHJvZmlsZS0wLjkuNy9kYWVtb24vbGlibGVnYWN5L29wZF9tYXBwaW5nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjEwYjBjOAotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2RhZW1vbi9saWJsZWdhY3kvb3BkX21hcHBpbmcuaApAQCAtMCwwICsxLDExMSBAQAorLyoqCisgKiBAZmlsZSBvcGRfbWFwcGluZy5oCisgKiBNYW5hZ2VtZW50IG9mIHByb2Nlc3MgbWFwcGluZ3MKKyAqCisgKiBAcmVtYXJrIENvcHlyaWdodCAyMDAyIE9Qcm9maWxlIGF1dGhvcnMKKyAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCisgKgorICogQGF1dGhvciBKb2huIExldm9uCisgKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKKyAqLworCisjaWZuZGVmIE9QRF9NQVBQSU5HX0gKKyNkZWZpbmUgT1BEX01BUFBJTkdfSAorCisjaW5jbHVkZSAib3BfbGlzdC5oIgorCitzdHJ1Y3Qgb3BkX2ltYWdlOworc3RydWN0IG9wZF9wcm9jOworc3RydWN0IG9wX25vdGU7CisKKy8qKgorICogcmVwcmVzZW50IGEgbW1hcCdlZCBhcmVhLCB3ZSBjcmVhdGUgc3VjaCBhcmVhIG9ubHkgZm9yIHZtYSBhcmVhIHdpdGggZXhlYworICogYWNjZXNzIHJpZ2h0CisgKi8KK3N0cnVjdCBvcGRfbWFwIHsKKwkvKiogbmV4dCBtYXBwaW5nIGZvciB0aGlzIGltYWdlICovCisJc3RydWN0IGxpc3RfaGVhZCBuZXh0OworCS8qKiBvd25pbmcgaW1hZ2UgKi8KKwlzdHJ1Y3Qgb3BkX2ltYWdlICogaW1hZ2U7CisJLyoqIG1hcHBpbmcgc3RhcnQgdm1hICovCisJdW5zaWduZWQgbG9uZyBzdGFydDsKKwkvKiogbWFwcGluZyBvZmZzZXQgKi8KKwl1bnNpZ25lZCBsb25nIG9mZnNldDsKKwkvKiogbWFwcGluZyBlbmQgdm1hICovCisJdW5zaWduZWQgbG9uZyBlbmQ7Cit9OworCisvKioKKyAqIG9wZF9pbml0X2hhc2hfbWFwIC0gaW5pdGlhbGlzZSB0aGUgaGFzaG1hcAorICovCit2b2lkIG9wZF9pbml0X2hhc2hfbWFwKHZvaWQpOworCisvKioKKyAqIG9wX2NsZWFudXBfaGFzaF9uYW1lCisgKgorICogcmVsZWFzZSByZXNvdXJjZSBvd25lZCBieSBoYXNoX25hbWUgYXJyYXkKKyAqLwordm9pZCBvcGRfY2xlYW51cF9oYXNoX25hbWUodm9pZCk7CisKKy8qKgorICogb3BkX2hhbmRsZV9tYXBwaW5nIC0gZGVhbCB3aXRoIG1hcHBpbmcgbm90aWZpY2F0aW9uCisgKiBAcGFyYW0gbm90ZSAgbWFwcGluZyBub3RpZmljYXRpb24KKyAqCisgKiBEZWFsIHdpdGggb25lIG5vdGlmaWNhdGlvbiB0aGF0IGEgcHJvY2VzcyBoYXMgbWFwcGVkCisgKiBpbiBhIG5ldyBleGVjdXRhYmxlIGZpbGUuIFRoZSBtYXBwaW5nIGluZm9ybWF0aW9uIGlzCisgKiBhZGRlZCB0byB0aGUgcHJvY2VzcyBzdHJ1Y3R1cmUuCisgKi8KK3ZvaWQgb3BkX2hhbmRsZV9tYXBwaW5nKHN0cnVjdCBvcF9ub3RlIGNvbnN0ICogbm90ZSk7CisKKy8qKgorICogb3BkX3B1dF9tYXBwaW5nIC0gYWRkIGEgbWFwcGluZyB0byBhIHByb2Nlc3MKKyAqIEBwYXJhbSBwcm9jICBwcm9jZXNzIHRvIGFkZCBtYXAgdG8KKyAqIEBwYXJhbSBpbWFnZSAgbWFwcGVkIGltYWdlIHBvaW50ZXIKKyAqIEBwYXJhbSBzdGFydCAgc3RhcnQgb2YgbWFwcGluZworICogQHBhcmFtIG9mZnNldCAgZmlsZSBvZmZzZXQgb2YgbWFwcGluZworICogQHBhcmFtIGVuZCAgZW5kIG9mIG1hcHBpbmcKKyAqCisgKiBBZGQgdGhlIG1hcHBpbmcgc3BlY2lmaWVkIHRvIHRoZSBwcm9jZXNzIHByb2MgZ3Jvd2luZyB0aGUgbWFwcyBhcnJheQorICogaWYgbmVjZXNzYXJ5LgorICovCit2b2lkIG9wZF9hZGRfbWFwcGluZyhzdHJ1Y3Qgb3BkX3Byb2MgKiBwcm9jLCBzdHJ1Y3Qgb3BkX2ltYWdlICogaW1hZ2UsCisJCXVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIGVuZCk7CisKKy8qKgorICogb3BkX2tpbGxfbWFwcyAtIGRlbGV0ZSBtYXBwaW5nIGluZm9ybWF0aW9uIGZvciBhIHByb2Nlc3MKKyAqIEBwYXJhbSBwcm9jICBwcm9jZXNzIHRvIHdvcmsgb24KKyAqCisgKiBGcmVlcyBzdHJ1Y3R1cmVzIGhvbGRpbmcgbWFwcGluZyBpbmZvcm1hdGlvbgorICovCit2b2lkIG9wZF9raWxsX21hcHMoc3RydWN0IG9wZF9wcm9jICogcHJvYyk7CisKKy8qKgorICogb3BkX2lzX2luX21hcCAtIGNoZWNrIHdoZXRoZXIgYW4gRUlQIGlzIHdpdGhpbiBhIG1hcHBpbmcKKyAqIEBwYXJhbSBtYXAgIG1hcCB0byBjaGVjaworICogQHBhcmFtIGVpcCAgRUlQIHZhbHVlCisgKgorICogUmV0dXJuICUxIGlmIHRoZSBFSVAgdmFsdWUgQGVpcCBpcyB3aXRoaW4gdGhlIGJvdW5kYXJpZXMKKyAqIG9mIHRoZSBtYXAgQG1hcCwgJTAgb3RoZXJ3aXNlLgorICovCitpbmxpbmUgc3RhdGljIGludCBvcGRfaXNfaW5fbWFwKHN0cnVjdCBvcGRfbWFwICogbWFwLCB1bnNpZ25lZCBsb25nIGVpcCkKK3sKKwlyZXR1cm4gKGVpcCA+PSBtYXAtPnN0YXJ0ICYmIGVpcCA8IG1hcC0+ZW5kKTsKK30KKworCisvKgorICogb3BkX21hcF9vZmZzZXQgLSByZXR1cm4gb2Zmc2V0IG9mIHNhbXBsZSBhZ2FpbnN0IG1hcAorICogQHBhcmFtIG1hcCAgbWFwIHRvIHVzZQorICogQHBhcmFtIGVpcCAgRUlQIHZhbHVlIHRvIHVzZQorICoKKyAqIFJldHVybnMgdGhlIG9mZnNldCBvZiB0aGUgRUlQIHZhbHVlIEBlaXAgaW50bworICogdGhlIG1hcCBAbWFwLCB3aGljaCBpcyB0aGUgc2FtZSBhcyB0aGUgZmlsZSBvZmZzZXQKKyAqIGZvciB0aGUgcmVsZXZhbnQgYmluYXJ5IGltYWdlLgorICovCitpbmxpbmUgc3RhdGljIHVuc2lnbmVkIGxvbmcgb3BkX21hcF9vZmZzZXQoc3RydWN0IG9wZF9tYXAgKiBtYXAsCisJCQkJCSAgIHVuc2lnbmVkIGxvbmcgZWlwKQoreworCXJldHVybiAoZWlwIC0gbWFwLT5zdGFydCkgKyBtYXAtPm9mZnNldDsKK30KKworI2VuZGlmIC8qIE9QRF9NQVBQSU5HX0ggKi8KZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2RhZW1vbi9saWJsZWdhY3kvb3BkX3BhcnNlX3Byb2MuYyBiL29wcm9maWxlLTAuOS43L2RhZW1vbi9saWJsZWdhY3kvb3BkX3BhcnNlX3Byb2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTJkNGU4Ci0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvZGFlbW9uL2xpYmxlZ2FjeS9vcGRfcGFyc2VfcHJvYy5jCkBAIC0wLDAgKzEsMjIzIEBACisvKioKKyAqIEBmaWxlIG9wZF9wYXJzZV9wcm9jLmMKKyAqIFBhcnNpbmcgb2YgL3Byb2MvI3BpZAorICoKKyAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDIgT1Byb2ZpbGUgYXV0aG9ycworICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKKyAqCisgKiBAYXV0aG9yIEpvaG4gTGV2b24KKyAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQorICovCisKKyNpbmNsdWRlICJvcF9saWJpYmVydHkuaCIKKworI2luY2x1ZGUgIm9wZF9wYXJzZV9wcm9jLmgiCisjaW5jbHVkZSAib3BkX3Byb2MuaCIKKyNpbmNsdWRlICJvcGRfbWFwcGluZy5oIgorI2luY2x1ZGUgIm9wZF9pbWFnZS5oIgorI2luY2x1ZGUgIm9wZF9wcmludGYuaCIKKworI2luY2x1ZGUgIm9wX2ZpbGUuaCIKKyNpbmNsdWRlICJvcF9maWxlaW8uaCIKKworI2luY2x1ZGUgPGRpcmVudC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKy8qKgorICogb3BkX2FkZF9hc2NpaV9tYXAgLSBwYXJzZSBhbiBBU0NJSSBtYXAgc3RyaW5nIGZvciBhIHByb2Nlc3MKKyAqIEBwYXJhbSBwcm9jICBwcm9jZXNzIHRvIGFkZCBtYXAgdG8KKyAqIEBwYXJhbSBsaW5lICAwLXRlcm1pbmF0ZWQgQVNDSUkgc3RyaW5nCisgKiBAcGFyYW0gaW1hZ2VfbmFtZSB0aGUgYmluYXJ5IGFwcGxpY2F0aW9uIG5hbWUKKyAqCisgKiBBdHRlbXB0IHRvIHBhcnNlIHRoZSBzdHJpbmcgQGxpbmUgZm9yIG1hcCBpbmZvcm1hdGlvbgorICogYW5kIGFkZCB0aGUgaW5mbyB0byB0aGUgcHJvY2VzcyBAcHJvYy4gUmV0dXJucyAlMQorICogb24gc3VjY2VzcywgJTAgb3RoZXJ3aXNlLgorICoKKyAqIFRoZSBwYXJzaW5nIGlzIGJhc2VkIG9uIExpbnV4IDIuNCBmb3JtYXQsIHdoaWNoIGxvb2tzIGxpa2UgdGhpcyA6CisgKgorICogNDAwMWUwMDAtNDAwZmMwMDAgci14cCAwMDAwMDAwMCAwMzowNCAzMTAxMSAgICAgIC9saWIvbGliYy0yLjEuMi5zbworICovCisvKiBGSVhNRTogaGFuZGxlIChkZWxldGVkKSAqLworc3RhdGljIGludCBvcGRfYWRkX2FzY2lpX21hcChzdHJ1Y3Qgb3BkX3Byb2MgKiBwcm9jLCBjaGFyIGNvbnN0ICogbGluZSwKKwkJCSAgICAgY2hhciAqIGNvbnN0IGltYWdlX25hbWUpCit7CisJdW5zaWduZWQgbG9uZyBvZmZzZXQsIHN0YXJ0LCBlbmQ7CisJc3RydWN0IG9wZF9pbWFnZSAqIGltYWdlOworCWNoYXIgY29uc3QgKiBjcCA9IGxpbmU7CisKKwkvKiBza2lwIHRvIHByb3RlY3Rpb24gZmllbGQgKi8KKwl3aGlsZSAoKmNwICYmICpjcCAhPSAnICcpCisJCWNwKys7CisKKwkvKiBoYW5kbGUgcnd4ICovCisJaWYgKCEqY3AgfHwgKCEqKCsrY3ApKSB8fCAoISooKytjcCkpIHx8ICgqKCsrY3ApICE9ICd4JykpCisJCXJldHVybiAwOworCisJLyogZ2V0IHN0YXJ0IGFuZCBlbmQgZnJvbSAiNDAwMDAwMDAtNDAwMWYwMDAiICovCisJaWYgKHNzY2FuZihsaW5lLCAiJWx4LSVseCIsICZzdGFydCwgJmVuZCkgIT0gMikKKwkJcmV0dXJuIDA7CisKKwkvKiAicCAiICovCisJY3AgKz0gMjsKKworCS8qIHJlYWQgb2Zmc2V0ICovCisJaWYgKHNzY2FuZihjcCwgIiVseCIsICZvZmZzZXQpICE9IDEpCisJCXJldHVybiAwOworCisJd2hpbGUgKCpjcCAmJiAqY3AgIT0gJy8nKQorCQljcCsrOworCisJaWYgKCEqY3ApCisJCXJldHVybiAwOworCisJaW1hZ2UgPSBvcGRfZ2V0X2ltYWdlKGNwLCBpbWFnZV9uYW1lLCAwLCBwcm9jLT50aWQsIHByb2MtPnRnaWQpOworCWlmICghaW1hZ2UpCisJCXJldHVybiAwOworCisJb3BkX2FkZF9tYXBwaW5nKHByb2MsIGltYWdlLCBzdGFydCwgb2Zmc2V0LCBlbmQpOworCisJcmV0dXJuIDE7Cit9CisKKworLyoqCisgKiBvcGRfZ2V0X2FzY2lpX21hcHMgLSByZWFkIGFsbCBtYXBzIGZvciBhIHByb2Nlc3MKKyAqIEBwYXJhbSBwcm9jICBwcm9jZXNzIHRvIHdvcmsgb24KKyAqCisgKiBSZWFkIHRoZSAvcHJvYy88cGlkPi9tYXBzIGZpbGUgYW5kIGFkZCBhbGwKKyAqIG1hcHBpbmcgaW5mb3JtYXRpb24gZm91bmQgdG8gdGhlIHByb2Nlc3MgQHByb2MuCisgKi8KK3N0YXRpYyB2b2lkIG9wZF9nZXRfYXNjaWlfbWFwcyhzdHJ1Y3Qgb3BkX3Byb2MgKiBwcm9jKQoreworCUZJTEUgKiBmcDsKKwljaGFyIG1hcHNmaWxlWzIwXSA9ICIvcHJvYy8iOworCWNoYXIgKiBsaW5lOworCWNoYXIgZXhlX25hbWVbMjBdOworCWNoYXIgKiBpbWFnZV9uYW1lOworCXN0cnVjdCBsaXN0X2hlYWQgKiBwb3M7CisKKwlzbnByaW50ZihtYXBzZmlsZSArIDYsIDYsICIlaHUiLCBwcm9jLT50aWQpOworCisJc3RyY3B5KGV4ZV9uYW1lLCBtYXBzZmlsZSk7CisKKwlzdHJjYXQobWFwc2ZpbGUsICIvbWFwcyIpOworCisJZnAgPSBvcF90cnlfb3Blbl9maWxlKG1hcHNmaWxlLCAiciIpOworCWlmICghZnApCisJCXJldHVybjsKKworCXN0cmNhdChleGVfbmFtZSwgIi9leGUiKTsKKwlpbWFnZV9uYW1lID0geG1hbGxvYyhQQVRIX01BWCk7CisJaWYgKCFyZWFscGF0aChleGVfbmFtZSwgaW1hZ2VfbmFtZSkpCisJCS8qIGtlcm5lbCB0aHJlYWQgYXJlIGludmFsaWQgc3ltbGluayAqLworCQlzdHJjcHkoaW1hZ2VfbmFtZSwgZXhlX25hbWUpOworCisJdmVyYnByaW50Zih2bWlzYywgImltYWdlIG5hbWUgJXMgZm9yIHBpZCAldSAldVxuIiwgaW1hZ2VfbmFtZSwgcHJvYy0+dGlkLCBwcm9jLT50Z2lkKTsKKworCXdoaWxlICgxKSB7CisJCWxpbmUgPSBvcF9nZXRfbGluZShmcCk7CisJCWlmICghbGluZSkKKwkJCWJyZWFrOworCisJCW9wZF9hZGRfYXNjaWlfbWFwKHByb2MsIGxpbmUsIGltYWdlX25hbWUpOworCQlmcmVlKGxpbmUpOworCX0KKworCS8qIGRhZSBhc3N1bWUgdGhhbiB0aGUgZmlyc3QgbWFwIGFkZGVkIGlzIHRoZSBwcmltYXJ5IGltYWdlIG5hbWUsIHRoaXMKKwkgKiBpcyBhbHdheXMgdHJ1ZSBhdCBleGVjIHRpbWUgYnV0IG5vdCBmb3IgL3Byb2MvcGlkIHNvIHJlc3RvcmUKKwkgKiB0aGUgcHJpbWFyeSBpbWFnZSBuYW1lCisJICovCisJbGlzdF9mb3JfZWFjaChwb3MsICZwcm9jLT5tYXBzKSB7CisJCXN0cnVjdCBvcGRfbWFwICogbWFwID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCBvcGRfbWFwLCBuZXh0KTsKKwkJaWYgKCFzdHJjbXAobWFwLT5pbWFnZS0+bmFtZSwgaW1hZ2VfbmFtZSkpIHsKKwkJCWlmIChwb3MgIT0gcHJvYy0+bWFwcy5uZXh0KSB7CisJCQkJZnByaW50ZihzdGRlcnIsICJzd2FwIG1hcCBmb3IgaW1hZ2UgJXMgZnJvbSAlcyB0byAlc1xuIiwgaW1hZ2VfbmFtZSwgcHJvYy0+bmFtZSwgbWFwLT5pbWFnZS0+bmFtZSk7CisJCQkJZnJlZSgoY2hhciAqKXByb2MtPm5hbWUpOworCQkJCXByb2MtPm5hbWUgPSB4c3RyZHVwKG1hcC0+aW1hZ2UtPm5hbWUpOworCQkJfQorCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAobGlzdF9lbXB0eSgmcHJvYy0+bWFwcykpIHsKKwkJLyogd2UgYWx3YXlzIG5lZWQgYSB2YWxpZCBwcm9jLT5tYXBzWzBdLCB3ZSBhcnRpZmljaWFsbHkgZ2l2ZQorCQkgKiBhIG1hcCBvZiBsZW5ndGggemVybyBzbyBvbiBubyBzYW1wbGVzIHdpbGwgbmV2ZXIgZ28gdG8gdGhpcworCQkgKiBtYXAuIFRoaXMgaXMgdXNlZCBvbmx5IHdpdGggLS1zZXBhcmF0ZS1zYW1wbGVzIGFuZCBrZXJuZWwKKwkJICogdGhyZWFkIHdoZW4gYWRkaW5nIHZtbGludXggYW5kIG1vZHVsZSBtYXBzIHRvIHByb2MtPm1hcHNbXQorCQkgKi8KKwkJLyogRklYTUU6IHVzZSB0aGUgZmlyc3QgZmllbGQgb2YgL3Byb2MvcGlkL3N0YXR1cyBhcyBwcm9jIG5hbWUKKwkJICogZm9yIG5vdyB3ZSB1c2UgL3Byb2MvJXBpZC9leGUgYXMgbmFtZSAqLworCQlzdHJ1Y3Qgb3BkX2ltYWdlICogaW1hZ2UgPSBvcGRfZ2V0X2ltYWdlKGltYWdlX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZV9uYW1lLCAwLCBwcm9jLT50aWQsIHByb2MtPnRnaWQpOworCQlpZiAoaW1hZ2UpCisJCQlvcGRfYWRkX21hcHBpbmcocHJvYywgaW1hZ2UsIDAsIDAsIDApOworCX0KKworCWlmIChpbWFnZV9uYW1lKQorCQlmcmVlKGltYWdlX25hbWUpOworCisJb3BfY2xvc2VfZmlsZShmcCk7Cit9CisKKworc3RhdGljIHUzMiByZWFkX3RnaWQodTMyIHRpZCkKK3sKKwljaGFyIHN0YXR1c19maWxlWzMwXSA9ICIvcHJvYy8iOworCWNoYXIgKiBsaW5lOworCUZJTEUgKiBmcDsKKwl1MzIgdGdpZDsKKworCXNucHJpbnRmKHN0YXR1c19maWxlICsgNiwgNiwgIiVodSIsIHRpZCk7CisKKwlzdHJjYXQoc3RhdHVzX2ZpbGUsICIvc3RhdHVzIik7CisKKwlmcCA9IG9wX3RyeV9vcGVuX2ZpbGUoc3RhdHVzX2ZpbGUsICJyIik7CisJaWYgKCFmcCkKKwkJcmV0dXJuIDA7CisKKwl3aGlsZSAoMSkgeworCQlsaW5lID0gb3BfZ2V0X2xpbmUoZnApOworCQlpZiAoIWxpbmUpCisJCQlicmVhazsKKworCQlpZiAoc3NjYW5mKGxpbmUsICJUZ2lkOiAldSIsICZ0Z2lkKSA9PSAxKSB7CisJCQlmcmVlKGxpbmUpOworCQkJb3BfY2xvc2VfZmlsZShmcCk7CisJCQlyZXR1cm4gdGdpZDsKKwkJfQorCQlmcmVlKGxpbmUpOworCX0KKworCW9wX2Nsb3NlX2ZpbGUoZnApOworCisJcmV0dXJuIDA7Cit9CisKKwordm9pZCBvcGRfZ2V0X2FzY2lpX3Byb2NzKHZvaWQpCit7CisJRElSICogZGlyOworCXN0cnVjdCBkaXJlbnQgKiBkaXJlbnQ7CisJc3RydWN0IG9wZF9wcm9jICogcHJvYzsKKwl1MzIgcGlkOworCisJaWYgKCEoZGlyID0gb3BlbmRpcigiL3Byb2MiKSkpIHsKKwkJcGVycm9yKCJvcHJvZmlsZWQ6IC9wcm9jIGRpcmVjdG9yeSBjb3VsZCBub3QgYmUgb3BlbmVkLiAiKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKworCXdoaWxlICgoZGlyZW50ID0gcmVhZGRpcihkaXIpKSkgeworCQlpZiAoc3NjYW5mKGRpcmVudC0+ZF9uYW1lLCAiJXUiLCAmcGlkKSA9PSAxKSB7CisJCQl1MzIgdGdpZCA9IHJlYWRfdGdpZChwaWQpOworCQkJdmVyYnByaW50Zih2bWlzYywgIkFTQ0lJIGFkZGVkICV1ICV1XG4iLCBwaWQsIHRnaWQpOworCQkJcHJvYyA9IG9wZF9nZXRfcHJvYyhwaWQsIHRnaWQpOworCQkJaWYgKCFwcm9jKQorCQkJCXByb2MgPSBvcGRfbmV3X3Byb2MocGlkLCB0Z2lkKTsKKwkJCW9wZF9nZXRfYXNjaWlfbWFwcyhwcm9jKTsKKwkJfQorCX0KKworCWNsb3NlZGlyKGRpcik7Cit9CmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9kYWVtb24vbGlibGVnYWN5L29wZF9wYXJzZV9wcm9jLmggYi9vcHJvZmlsZS0wLjkuNy9kYWVtb24vbGlibGVnYWN5L29wZF9wYXJzZV9wcm9jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTIyNGJlNAotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2RhZW1vbi9saWJsZWdhY3kvb3BkX3BhcnNlX3Byb2MuaApAQCAtMCwwICsxLDIzIEBACisvKioKKyAqIEBmaWxlIG9wZF9wYXJzZV9wcm9jLmgKKyAqIFBhcnNpbmcgb2YgL3Byb2MvI3BpZAorICoKKyAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDIgT1Byb2ZpbGUgYXV0aG9ycworICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKKyAqCisgKiBAYXV0aG9yIEpvaG4gTGV2b24KKyAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQorICovCisKKyNpZm5kZWYgT1BEX1BBUlNFX1BST0NfSAorI2RlZmluZSBPUERfUEFSU0VfUFJPQ19ICisKKy8qKgorICogb3BkX2dldF9hc2NpaV9wcm9jcyAtIHJlYWQgcHJvY2VzcyBhbmQgbWFwcGluZyBpbmZvcm1hdGlvbiBmcm9tIC9wcm9jCisgKgorICogUmVhZCBpbmZvcm1hdGlvbiBvbiBlYWNoIHByb2Nlc3MgYW5kIGl0cyBtYXBwaW5ncyBmcm9tIHRoZSAvcHJvYworICogZmlsZXN5c3RlbS4KKyAqLwordm9pZCBvcGRfZ2V0X2FzY2lpX3Byb2NzKHZvaWQpOworCisjZW5kaWYgLyogT1BEX1BBUlNFX1BST0NfSCAqLwpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvZGFlbW9uL2xpYmxlZ2FjeS9vcGRfcHJvYy5jIGIvb3Byb2ZpbGUtMC45LjcvZGFlbW9uL2xpYmxlZ2FjeS9vcGRfcHJvYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmOWIzOGMKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9kYWVtb24vbGlibGVnYWN5L29wZF9wcm9jLmMKQEAgLTAsMCArMSw0MzIgQEAKKy8qKgorICogQGZpbGUgb3BkX3Byb2MuYworICogTWFuYWdlbWVudCBvZiBwcm9jZXNzZXMKKyAqCisgKiBAcmVtYXJrIENvcHlyaWdodCAyMDAyIE9Qcm9maWxlIGF1dGhvcnMKKyAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCisgKgorICogQGF1dGhvciBKb2huIExldm9uCisgKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKKyAqLworCisjaW5jbHVkZSAib3BfaHdfY29uZmlnLmgiCisjaW5jbHVkZSAib3BkX3Byb2MuaCIKKyNpbmNsdWRlICJvcGRfaW1hZ2UuaCIKKyNpbmNsdWRlICJvcGRfbWFwcGluZy5oIgorI2luY2x1ZGUgIm9wZF9zYW1wbGVfZmlsZXMuaCIKKyNpbmNsdWRlICJvcGRfa2VybmVsLmgiCisjaW5jbHVkZSAib3BkXzI0X3N0YXRzLmgiCisjaW5jbHVkZSAib3BkX3ByaW50Zi5oIgorI2luY2x1ZGUgIm9wcm9maWxlZC5oIgorCisjaW5jbHVkZSAib3BfaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAib3BfbGliaWJlcnR5LmgiCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisvKiBzaXplIG9mIHByb2Nlc3MgaGFzaCB0YWJsZSAqLworI2RlZmluZSBPUERfTUFYX1BST0NfSEFTSCAxMDI0CisKK2V4dGVybiBpbnQgY3B1X251bWJlcjsKKworLyogaGFzaCBvZiBwcm9jZXNzIGxpc3RzICovCitzdGF0aWMgc3RydWN0IGxpc3RfaGVhZCBvcGRfcHJvY3NbT1BEX01BWF9QUk9DX0hBU0hdOworCisvKiBzdGF0aXN0aWNzIHB1cnBvc2UgKi8KK3N0YXRpYyBpbnQgbnJfcHJvY3M7CisKKwordm9pZCBvcGRfaW5pdF9wcm9jcyh2b2lkKQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBPUERfTUFYX1BST0NfSEFTSDsgaSsrKQorCQlsaXN0X2luaXQoJm9wZF9wcm9jc1tpXSk7Cit9CisKKworaW50IG9wZF9nZXRfbnJfcHJvY3Modm9pZCkKK3sKKwlyZXR1cm4gbnJfcHJvY3M7Cit9CisKKworLyoqCisgKiBwcm9jX2hhc2ggLSBoYXNoIHBpZCB2YWx1ZQorICogQHBhcmFtIHRpZCAgcGlkIHZhbHVlIHRvIGhhc2gKKyAqCisgKi8KK2lubGluZSBzdGF0aWMgdWludCBwcm9jX2hhc2gocGlkX3QgdGlkKQoreworCS8qIEZJWE1FOiBoYXNoIHRnaWQgdG9vISAqLworCXJldHVybiAoKHRpZCA+PiA0KSBeICh0aWQpKSAlIE9QRF9NQVhfUFJPQ19IQVNIOworfQorCisKK3N0cnVjdCBvcGRfcHJvYyAqIG9wZF9uZXdfcHJvYyhwaWRfdCB0aWQsIHBpZF90IHRnaWQpCit7CisJc3RydWN0IG9wZF9wcm9jICogcHJvYzsKKworCW5yX3Byb2NzKys7CisJcHJvYyA9IHhtYWxsb2Moc2l6ZW9mKHN0cnVjdCBvcGRfcHJvYykpOworCWxpc3RfaW5pdCgmcHJvYy0+bWFwcyk7CisJcHJvYy0+bmFtZSA9IE5VTEw7CisJcHJvYy0+dGlkID0gdGlkOworCXByb2MtPnRnaWQgPSB0Z2lkOworCXByb2MtPmRlYWQgPSAwOworCXByb2MtPmFjY2Vzc2VkID0gMDsKKwlsaXN0X2FkZCgmcHJvYy0+bmV4dCwgJm9wZF9wcm9jc1twcm9jX2hhc2godGlkKV0pOworCXJldHVybiBwcm9jOworfQorCisKK3N0cnVjdCBvcGRfcHJvYyAqIG9wZF9nZXRfcHJvYyhwaWRfdCB0aWQsIHBpZF90IHRnaWQpCit7CisJc3RydWN0IG9wZF9wcm9jICogcHJvYzsKKwl1aW50IGhhc2ggPSBwcm9jX2hhc2godGlkKTsKKwlzdHJ1Y3QgbGlzdF9oZWFkICogcG9zLCAqcG9zMjsKKworCW9wZF8yNF9zdGF0c1tPUERfUFJPQ19RVUVVRV9BQ0NFU1NdKys7CisJbGlzdF9mb3JfZWFjaF9zYWZlKHBvcywgcG9zMiwgJm9wZF9wcm9jc1toYXNoXSkgeworCQlvcGRfMjRfc3RhdHNbT1BEX1BST0NfUVVFVUVfREVQVEhdKys7CisJCXByb2MgPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IG9wZF9wcm9jLCBuZXh0KTsKKwkJaWYgKHRpZCA9PSBwcm9jLT50aWQgJiYgdGdpZCA9PSBwcm9jLT50Z2lkKSB7CisJCQkvKiBMUlUgdG8gaGVhZCAqLworCQkJbGlzdF9kZWwoJnByb2MtPm5leHQpOworCQkJbGlzdF9hZGQoJnByb2MtPm5leHQsICZvcGRfcHJvY3NbaGFzaF0pOworCQkJcmV0dXJuIHByb2M7CisJCX0KKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworCisvKioKKyAqIHZlcmJfc2hvd19zYW1wbGUgLSBwcmludCB0aGUgc2FtcGxlIG91dCB0byB0aGUgbG9nCisgKiBAcGFyYW0gb2Zmc2V0ICB0aGUgb2Zmc2V0IHZhbHVlCisgKiBAcGFyYW0gbWFwICBtYXAgdG8gcHJpbnQKKyAqLworaW5saW5lIHN0YXRpYyB2b2lkCit2ZXJiX3Nob3dfc2FtcGxlKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzdHJ1Y3Qgb3BkX21hcCAqIG1hcCkKK3sKKwl2ZXJicHJpbnRmKHZzYW1wbGVzLCAiRE9fUFVUX1NBTVBMRSA6IGNhbGMgb2Zmc2V0IDB4JS44bHgsICIKKwkJIm1hcCBzdGFydCAweCUuOGx4LCBlbmQgMHglLjhseCwgb2Zmc2V0IDB4JS44bHgsIG5hbWUgXCIlc1wiXG4iLAorCQlvZmZzZXQsIG1hcC0+c3RhcnQsIG1hcC0+ZW5kLCBtYXAtPm9mZnNldCwgCisJCW1hcC0+aW1hZ2UtPm5hbWUpOworfQorCisKK3ZvaWQgb3BkX3B1dF9pbWFnZV9zYW1wbGUoc3RydWN0IG9wZF9pbWFnZSAqIGltYWdlLCB1bnNpZ25lZCBsb25nIG9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdTMyIGNvdW50ZXIpCit7CisJc3RydWN0IG9wZF8yNF9zZmlsZSAqIHNmaWxlOworCWludCBlcnI7CisKKwlpZiAoaW1hZ2UtPmlnbm9yZWQpCisJCXJldHVybjsKKworCWlmICghaW1hZ2UtPnNmaWxlc1tjcHVfbnVtYmVyXSkgeworCQlpbWFnZS0+c2ZpbGVzW2NwdV9udW1iZXJdID0KKwkJCXhjYWxsb2MoT1BfTUFYX0NPVU5URVJTLCBzaXplb2Yoc3RydWN0IG9wXzI0X3NmaWxlICopKTsKKwl9CisJc2ZpbGUgPSBpbWFnZS0+c2ZpbGVzW2NwdV9udW1iZXJdW2NvdW50ZXJdOworCisJaWYgKCFzZmlsZSB8fCAhb2RiX29wZW5fY291bnQoJnNmaWxlLT5zYW1wbGVfZmlsZSkpIHsKKwkJaWYgKG9wZF9vcGVuXzI0X3NhbXBsZV9maWxlKGltYWdlLCBjb3VudGVyLCBjcHVfbnVtYmVyKSkgeworCQkJLyogb3BkX29wZW5fMjRfc2FtcGxlX2ZpbGUgb3V0cHV0IGFuIGVycm9yIG1lc3NhZ2UgKi8KKwkJCW9wZF8yNF9zdGF0c1tPUERfTE9TVF9TQU1QTEVGSUxFXSsrOworCQkJcmV0dXJuOworCQl9CisJCXNmaWxlID0gaW1hZ2UtPnNmaWxlc1tjcHVfbnVtYmVyXVtjb3VudGVyXTsKKwl9CisKKwllcnIgPSBvZGJfdXBkYXRlX25vZGUoJnNmaWxlLT5zYW1wbGVfZmlsZSwgb2Zmc2V0KTsKKwlpZiAoZXJyKSB7CisJCWZwcmludGYoc3RkZXJyLCAiJXNcbiIsIHN0cmVycm9yKGVycikpOworCQlhYm9ydCgpOworCX0KKworCW9wZF8yNF9zZmlsZV9scnUoc2ZpbGUpOworfQorCisKKy8qKgorICogb3BkX2xvb2t1cF9tYXBzIC0gbG9va3VwIGEgcHJvYyBtYXBwaW5ncyBmb3IgYSBzYW1wbGUKKyAqIEBwYXJhbSBwcm9jIHByb2MgdG8gbG9va3VwCisgKiBAcGFyYW0gc2FtcGxlIHNhbXBsZSB0byBsb29rdXAKKyAqCisgKiBpdGVyYXRlIHRocm91Z2ggdGhlIHByb2MgbWFwcyBzZWFyY2hpbmcgdGhlIG1hcHBpbmcgd2hpY2ggb3ducyBzYW1wbGUKKyAqIGlmIHN1Y2Vzc2Z1bCBzYW1wbGUgY291bnQgd2lsbCBiZSB1cGRhdGVkIGFuZCB3ZSByZXR1cm4gbm9uLXplcm8KKyAqLworc3RhdGljIGludCBvcGRfbG9va3VwX21hcHMoc3RydWN0IG9wZF9wcm9jICogcHJvYywKKwkJCXN0cnVjdCBvcF9zYW1wbGUgY29uc3QgKiBzYW1wbGUpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqIHBvczsKKworCXByb2MtPmFjY2Vzc2VkID0gMTsKKworCW9wZF8yNF9zdGF0c1tPUERfTUFQX0FSUkFZX0FDQ0VTU10rKzsKKwlsaXN0X2Zvcl9lYWNoKHBvcywgJnByb2MtPm1hcHMpIHsKKwkJc3RydWN0IG9wZF9tYXAgKiBtYXAgPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IG9wZF9tYXAsIG5leHQpOworCQlpZiAob3BkX2lzX2luX21hcChtYXAsIHNhbXBsZS0+ZWlwKSkgeworCQkJdW5zaWduZWQgbG9uZyBvZmZzZXQgPSBvcGRfbWFwX29mZnNldChtYXAsIHNhbXBsZS0+ZWlwKTsKKwkJCWlmIChtYXAtPmltYWdlICE9IE5VTEwpIHsKKwkJCQl2ZXJiX3Nob3dfc2FtcGxlKG9mZnNldCwgbWFwKTsKKwkJCQlvcGRfcHV0X2ltYWdlX3NhbXBsZShtYXAtPmltYWdlLCBvZmZzZXQsIHNhbXBsZS0+Y291bnRlcik7CisJCQl9CisJCQlvcGRfMjRfc3RhdHNbT1BEX1BST0NFU1NdKys7CisJCQlyZXR1cm4gMTsKKwkJfQorCQlvcGRfMjRfc3RhdHNbT1BEX01BUF9BUlJBWV9ERVBUSF0rKzsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworCit2b2lkIG9wZF9wdXRfc2FtcGxlKHN0cnVjdCBvcF9zYW1wbGUgY29uc3QgKiBzYW1wbGUpCit7CisJc3RydWN0IG9wZF9wcm9jICogcHJvYzsKKwlpbnQgaW5fa2VybmVsX2VpcCA9IG9wZF9laXBfaXNfa2VybmVsKHNhbXBsZS0+ZWlwKTsKKworCW9wZF8yNF9zdGF0c1tPUERfU0FNUExFU10rKzsKKworCXZlcmJwcmludGYodnNhbXBsZXMsICJET19QVVRfU0FNUExFOiBjJWQsIEVJUCAweCUuOGx4LCB0Z2lkICUuNmQgcGlkICUuNmRcbiIsCisJCXNhbXBsZS0+Y291bnRlciwgc2FtcGxlLT5laXAsIHNhbXBsZS0+dGdpZCwgc2FtcGxlLT5waWQpOworCisJaWYgKCFzZXBhcmF0ZV9rZXJuZWwgJiYgaW5fa2VybmVsX2VpcCkgeworCQlvcGRfaGFuZGxlX2tlcm5lbF9zYW1wbGUoc2FtcGxlLT5laXAsIHNhbXBsZS0+Y291bnRlcik7CisJCXJldHVybjsKKwl9CisKKwlpZiAoIShwcm9jID0gb3BkX2dldF9wcm9jKHNhbXBsZS0+cGlkLCBzYW1wbGUtPnRnaWQpKSkgeworCQlpZiAoaW5fa2VybmVsX2VpcCB8fCBub192bWxpbnV4KSB7CisJCQkvKiBpZGxlIHRhc2sgZ2V0IGEgMCBwaWQgYW5kIGlzIGhpZGRlbiB3ZSBjYW4gbmV2ZXIgZ2V0CisJCQkgKiBhIHByb2Mgc28gb24gd2UgZmFsbCBiYWNrIHRvIHB1dCBzYW1wbGUgaW4gdm1saW51eAorCQkJICogb3IgbW9kdWxlIHNhbXBsZXMgZmlsZXMuIEhlcmUgd2Ugd2lsbCBjYXRjaCBhbHNvCisJCQkgKiBzYW1wbGUgZm9yIG5ld2x5IGNyZWF0ZWQga2VybmVsIHRocmVhZCwgY3VycmVudGx5IAorCQkJICogd2UgY2FuIGhhbmRsZSBwcm9wZXJseSBvbmx5IGtlbmVsIHRocmVhZCBjcmVhdGVkCisJCQkgKiBhdCBkYWVtb24gc3RhcnR1cCB0aW1lICovCisJCQlvcGRfaGFuZGxlX2tlcm5lbF9zYW1wbGUoc2FtcGxlLT5laXAsIHNhbXBsZS0+Y291bnRlcik7CisJCX0gZWxzZSB7CisJCQl2ZXJicHJpbnRmKHZtaXNjLCAiTm8gcHJvYyBpbmZvIGZvciB0Z2lkICUuNmQgcGlkICUuNmQuXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGUtPnRnaWQsIHNhbXBsZS0+cGlkKTsKKwkJCW9wZF8yNF9zdGF0c1tPUERfTE9TVF9QUk9DRVNTXSsrOworCQl9CisJCXJldHVybjsKKwl9CisKKwlpZiAob3BkX2xvb2t1cF9tYXBzKHByb2MsIHNhbXBsZSkpCisJCXJldHVybjsKKworCWlmIChpbl9rZXJuZWxfZWlwKSB7CisJCW9wZF9hZGRfa2VybmVsX21hcChwcm9jLCBzYW1wbGUtPmVpcCk7CisJCWlmIChvcGRfbG9va3VwX21hcHMocHJvYywgc2FtcGxlKSkKKwkJCXJldHVybjsKKwl9CisKKwkvKiBjb3VsZG4ndCBsb2NhdGUgaXQgKi8KKwl2ZXJicHJpbnRmKHZzYW1wbGVzLCAiQ291bGRuJ3QgZmluZCBtYXAgZm9yIHBpZCAlLjZkLCBFSVAgMHglLjhseC5cbiIsCisJCSAgIHNhbXBsZS0+cGlkLCBzYW1wbGUtPmVpcCk7CisJb3BkXzI0X3N0YXRzW09QRF9MT1NUX01BUF9QUk9DRVNTXSsrOworfQorCisKK3ZvaWQgb3BkX2hhbmRsZV9mb3JrKHN0cnVjdCBvcF9ub3RlIGNvbnN0ICogbm90ZSkKK3sKKwlzdHJ1Y3Qgb3BkX3Byb2MgKiBvbGQ7CisJc3RydWN0IG9wZF9wcm9jICogcHJvYzsKKwlzdHJ1Y3QgbGlzdF9oZWFkICogcG9zOworCisJdmVyYnByaW50Zih2bWlzYywgIkRPX0ZPUks6IGZyb20gJWQsICVkIHRvICVsZCwgJWxkXG4iLCBub3RlLT5waWQsIG5vdGUtPnRnaWQsCisJICAgICAgICAgICBub3RlLT5hZGRyLCBub3RlLT5sZW4pOworCisJb2xkID0gb3BkX2dldF9wcm9jKG5vdGUtPnBpZCwgbm90ZS0+dGdpZCk7CisKKwkvKiB3ZSBjYW4gcXVpdGUgZWFzaWx5IGdldCBhIGZvcmsoKSBhZnRlciB0aGUgZXhlY3ZlKCkgYmVjYXVzZSB0aGUKKwkgKiBub3RpZmljYXRpb25zIGFyZSByYWN5LiBJbiBwYXJ0aWN1bGFyLCB0aGUgZm9yayBub3RpZmljYXRpb24gaXMKKwkgKiBkb25lIG9uIHBhcmVudCByZXR1cm4gKHNvIHdlIGtub3cgdGhlIHBpZCksIGJ1dCB0aGlzIHdpbGwgb2Z0ZW4gYmUKKwkgKiBhZnRlciB0aGUgZXhlY3ZlIGlzIGRvbmUgYnkgdGhlIGNoaWxkLgorCSAqCisJICogU28gd2Ugb25seSBjcmVhdGUgYSBuZXcgc2V0dXAgaWYgaXQgZG9lc24ndCBleGlzdCBhbHJlYWR5LCBhbGxvd2luZworCSAqIGJvdGggdGhlIGNsb25lKCkgYW5kIHRoZSBleGVjdmUoKSBjYXNlcyB0byB3b3JrLgorCSAqLworCWlmIChvcGRfZ2V0X3Byb2Mobm90ZS0+YWRkciwgbm90ZS0+bGVuKSkKKwkJcmV0dXJuOworCisJLyogZWlwL2xlbiBpcyBhY3R1YWxseSB0aWQvdGdpZCBvZiBuZXcgcHJvY2VzcyAqLworCXByb2MgPSBvcGRfbmV3X3Byb2Mobm90ZS0+YWRkciwgbm90ZS0+bGVuKTsKKworCWlmICghb2xkKQorCQlyZXR1cm47CisKKwkvKiBjb3B5IHRoZSBtYXBzICovCisJbGlzdF9mb3JfZWFjaChwb3MsICZvbGQtPm1hcHMpIHsKKwkJc3RydWN0IG9wZF9tYXAgKiBtYXAgPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IG9wZF9tYXAsIG5leHQpOworCQlpZiAoIXNlcGFyYXRlX3RocmVhZCkgeworCQkJb3BkX2FkZF9tYXBwaW5nKHByb2MsIG1hcC0+aW1hZ2UsIG1hcC0+c3RhcnQsCisJCQkgICAgICAgICAgICAgICAgbWFwLT5vZmZzZXQsIG1hcC0+ZW5kKTsKKwkJfSBlbHNlIHsKKwkJCS8qIHdoZW4gc2VwYXJhdGluZyB0aHJlYWQgd2UgY2FuJ3QgY3JlYXRlIGJsaW5kbHkgYSBuZXcKKwkJCSAqIGltYWdlIGUuZy4gcGlkIHJlLXVzZSwgbXVsdGlwbGUgbWFwcGluZyB3aXRoIHRoZQorCQkJICogc2FtZSBtYXBwaW5nIG5hbWUgZXRjLiAqLworCQkJc3RydWN0IG9wZF9pbWFnZSAqIGltYWdlID0gCisJCQkJb3BkX2dldF9pbWFnZShtYXAtPmltYWdlLT5uYW1lLCBvbGQtPm5hbWUsCisJCQkJbWFwLT5pbWFnZS0+a2VybmVsLCBub3RlLT5hZGRyLCBub3RlLT5sZW4pOworCQkJb3BkX2FkZF9tYXBwaW5nKHByb2MsIGltYWdlLCBtYXAtPnN0YXJ0LCBtYXAtPm9mZnNldCwKKwkJCSAgICAgICAgICAgICAgICBtYXAtPmVuZCk7CisJCX0KKwl9Cit9CisKKwordm9pZCBvcGRfaGFuZGxlX2V4ZWMocGlkX3QgdGlkLCBwaWRfdCB0Z2lkKQoreworCXN0cnVjdCBvcGRfcHJvYyAqIHByb2M7CisKKwl2ZXJicHJpbnRmKHZtaXNjLCAiRE9fRVhFQzogcGlkICV1ICV1XG4iLCB0aWQsIHRnaWQpOworCisJLyogVGhlcmUgaXMgYSByYWNlIGZvciBzYW1wbGVzIHJlY2VpdmVkIGJldHdlZW4gZm9yay9leGVjIHNlcXVlbmNlLgorCSAqIFRoZXNlIHNhbXBsZXMgYmVsb25nIHRvIHRoZSBvbGQgbWFwcGluZyBidXQgd2UgY2FuIG5vdCBzYXkgaWYKKwkgKiBzYW1wbGVzIGhhcyBiZWVuIHJlY2VpdmVkIGJlZm9yZSB0aGUgZXhlYyBvciBhZnRlci4gVGhpcyBleHBsYWlucworCSAqIHRoZSBtZXNzYWdlICJDb3VsZG4ndCBmaW5kIG1hcCBmb3IgLi4uIiBpbiB2ZXJib3NlIG1vZGUuCisJICoKKwkgKiBVbmhhcHBpbHksIGl0IGlzIGRpZmZpY3VsdCB0byBnZXQgYW4gZXN0aW1hdGlvbiBvZiB0aGVzZSBtaXNwbGFjZWQKKwkgKiBzYW1wbGVzLCB0aGUgZXJyb3IgbWVzc2FnZSBjYW4gY291bnQgb25seSBvdXQgb2YgbWFwcGluZyBzYW1wbGVzIGJ1dAorCSAqIG5vdCBzYW1wbGVzIGJldHdlZW4gdGhlIHJhY2UgYW5kIGluc2lkZSB0aGUgbWFwcGluZyBvZiB0aGUgZXhlYydlZAorCSAqIHByb2Nlc3MgOi8uCisJICoKKwkgKiBUcnlpbmcgdG8gc2F2ZSBvbGQgbWFwcGluZyBpcyBub3QgY29ycmVjdCBkdWUgdGhlIGFib3ZlIHJlYXNvbi4gVGhlCisJICogb25seSBtYW5uZXIgdG8gaGFuZGxlIHRoaXMgaXMgdG8gZmx1c2ggdGhlIG1vZHVsZSBzYW1wbGVzIGhhc2ggdGFibGUKKwkgKiBhZnRlciBlYWNoIGZvcmsgd2hpY2ggaXMgdW5hY2NlcHRhYmxlIGZvciBwZXJmb3JtYW5jZSByZWFzb25zICovCisJcHJvYyA9IG9wZF9nZXRfcHJvYyh0aWQsIHRnaWQpOworCWlmIChwcm9jKSB7CisJCW9wZF9raWxsX21hcHMocHJvYyk7CisJCS8qIHByb2MtPm5hbWUgd2lsbCBiZSBzZXQgd2hlbiB0aGUgbmV4dCBtYXBwaW5nIG9jY3VycyAqLworCQlmcmVlKChjaGFyICopcHJvYy0+bmFtZSk7CisJCXByb2MtPm5hbWUgPSBOVUxMOworCX0gZWxzZSB7CisJCW9wZF9uZXdfcHJvYyh0aWQsIHRnaWQpOworCX0KK30KKworCit2b2lkIG9wZF9oYW5kbGVfZXhpdChzdHJ1Y3Qgb3Bfbm90ZSBjb25zdCAqIG5vdGUpCit7CisJc3RydWN0IG9wZF9wcm9jICogcHJvYzsKKworCXZlcmJwcmludGYodm1pc2MsICJET19FWElUOiBwcm9jZXNzICVkXG4iLCBub3RlLT5waWQpOworCisJcHJvYyA9IG9wZF9nZXRfcHJvYyhub3RlLT5waWQsIG5vdGUtPnRnaWQpOworCWlmIChwcm9jKSB7CisJCXByb2MtPmRlYWQgPSAxOworCQlwcm9jLT5hY2Nlc3NlZCA9IDE7CisJfSBlbHNlIHsKKwkJdmVyYnByaW50Zih2bWlzYywgInVua25vd24gcHJvYyAldSBqdXN0IGV4aXRlZC5cbiIsIG5vdGUtPnBpZCk7CisJfQorfQorCisKK3R5cGVkZWYgdm9pZCAoKm9wZF9wcm9jX2NiKShzdHJ1Y3Qgb3BkX3Byb2MgKik7CisKKy8qKgorICogQHBhcmFtIHByb2NfY2IgY2FsbGJhY2sgdG8gYXBwbHkgb250byBlYWNoIGV4aXN0aW5nIHByb2Mgc3RydWN0CisgKgorICogdGhlIGNhbGxiYWNrIHJlY2VpdmUgYSBzdHJ1Y3Qgb3BkX3Byb2MgKiAobm90IGEgY29uc3Qgc3RydWN0KSBhbmQgaXMKKyAqIGFsbG93ZWQgdG8gZnJlZXplIHRoZSBwcm9jIHN0cnVjdCBpdHNlbGYuCisgKi8KK3N0YXRpYyB2b2lkIG9wZF9mb3JfZWFjaF9wcm9jKG9wZF9wcm9jX2NiIHByb2NfY2IpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqIHBvczsKKwlzdHJ1Y3QgbGlzdF9oZWFkICogcG9zMjsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBPUERfTUFYX1BST0NfSEFTSDsgKytpKSB7CisJCWxpc3RfZm9yX2VhY2hfc2FmZShwb3MsIHBvczIsICZvcGRfcHJvY3NbaV0pIHsKKwkJCXN0cnVjdCBvcGRfcHJvYyAqIHByb2MgPQorCQkJCWxpc3RfZW50cnkocG9zLCBzdHJ1Y3Qgb3BkX3Byb2MsIG5leHQpOworCQkJcHJvY19jYihwcm9jKTsKKwkJfQorCX0KK30KKworCisvKioKKyAqIG9wZF9kZWxldGVfcHJvYyAtIGRlbGV0ZSBhIHByb2Nlc3MKKyAqIEBwYXJhbSBwcm9jICBwcm9jZXNzIHRvIGRlbGV0ZQorICoKKyAqIFJlbW92ZSB0aGUgcHJvY2VzcyBwcm9jIGZyb20gdGhlIHByb2Nlc3MgbGlzdCBhbmQgZnJlZQorICogdGhlIGFzc29jaWF0ZWQgc3RydWN0dXJlcy4KKyAqLworc3RhdGljIHZvaWQgb3BkX2RlbGV0ZV9wcm9jKHN0cnVjdCBvcGRfcHJvYyAqIHByb2MpCit7CisJLS1ucl9wcm9jczsKKwlsaXN0X2RlbCgmcHJvYy0+bmV4dCk7CisJb3BkX2tpbGxfbWFwcyhwcm9jKTsKKwlpZiAocHJvYy0+bmFtZSkKKwkJZnJlZSgoY2hhciAqKXByb2MtPm5hbWUpOworCWZyZWUocHJvYyk7Cit9CisKKwordm9pZCBvcGRfcHJvY19jbGVhbnVwKHZvaWQpCit7CisJb3BkX2Zvcl9lYWNoX3Byb2Mob3BkX2RlbGV0ZV9wcm9jKTsKK30KKworCisvKioKKyAqIG9wZF9hZ2VfcHJvYyAtIGFnZSBhIHN0cnVjdCBvcGRfcHJvYworICogQHBhcmFtICBwcm9jIHByb2MgdG8gYWdlCisgKgorICogYWdlIGRlYWQgcHJvYyBpbiBzdWNoIHdheSBpZiBhIHByb2MgZG9lc24ndCByZWNlaXZlIGFueSBzYW1wbGVzCisgKiBiZXR3ZWVuIHR3byBhZ2VfcHJvYyB0aGUgb3BkX3Byb2Mgc3RydWN0IGlzIGRlbGV0ZWQKKyAqLworc3RhdGljIHZvaWQgb3BkX2FnZV9wcm9jKHN0cnVjdCBvcGRfcHJvYyAqIHByb2MpCit7CisJLy8gZGVsYXkgZGVhdGggd2hpbHN0IGl0cyBzdGlsbCBiZWluZyBhY2Nlc3NlZAorCWlmIChwcm9jLT5kZWFkKSB7CisJCXByb2MtPmRlYWQgKz0gcHJvYy0+YWNjZXNzZWQ7CisJCXByb2MtPmFjY2Vzc2VkID0gMDsKKwkJaWYgKC0tcHJvYy0+ZGVhZCA9PSAwKQorCQkJb3BkX2RlbGV0ZV9wcm9jKHByb2MpOworCX0KK30KKworCit2b2lkIG9wZF9hZ2VfcHJvY3Modm9pZCkKK3sKKwlvcGRfZm9yX2VhY2hfcHJvYyhvcGRfYWdlX3Byb2MpOworfQorCisKKy8qKgorICogb3BkX3JlbW92ZV9rZXJuZWxfbWFwcGluZyAtIHJlbW92ZSBhbGwga2VybmVsIG1hcHBpbmcgZm9yIGFuIG9wZF9wcm9jCisgKiBAcGFyYW0gcHJvYyAgcHJvYyB3aGVyZSBtYXBwaW5ncyBtdXN0IGJlIHVwZGF0ZWQuCisgKgorICogaW52YWxpZGF0ZSAoYnkgcmVtb3ZpbmcgdGhlbSkgYWxsIGtlcm5lbCBtYXBwaW5nLiBUaGlzIGZ1bmN0aW9uIGRvIG5vdGhpbmcKKyAqIHdoZW4gc2VwYXJhdGVfa2VybmVsID09IDAgYmVjYXVzZSB3ZSBkb24ndCBhZGQgbWFwcGluZyBmb3Iga2VybmVsCisgKiBzYW1wbGUgaW4gcHJvYyBzdHJ1Y3QuCisgKi8KK3N0YXRpYyB2b2lkIG9wZF9yZW1vdmVfa2VybmVsX21hcHBpbmcoc3RydWN0IG9wZF9wcm9jICogcHJvYykKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICogcG9zLCAqIHBvczI7CisKKwlsaXN0X2Zvcl9lYWNoX3NhZmUocG9zLCBwb3MyLCAmcHJvYy0+bWFwcykgeworCQlzdHJ1Y3Qgb3BkX21hcCAqIG1hcCA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3Qgb3BkX21hcCwgbmV4dCk7CisJCWlmIChvcGRfZWlwX2lzX2tlcm5lbChtYXAtPnN0YXJ0ICsgbWFwLT5vZmZzZXQpKSB7CisJCQlsaXN0X2RlbChwb3MpOworCQkJb3BkX2RlbGV0ZV9pbWFnZShtYXAtPmltYWdlKTsKKwkJCWZyZWUobWFwKTsKKwkJfQorCX0KK30KKworCit2b2lkIG9wZF9jbGVhcl9rZXJuZWxfbWFwcGluZyh2b2lkKQoreworCW9wZF9mb3JfZWFjaF9wcm9jKG9wZF9yZW1vdmVfa2VybmVsX21hcHBpbmcpOworfQpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvZGFlbW9uL2xpYmxlZ2FjeS9vcGRfcHJvYy5oIGIvb3Byb2ZpbGUtMC45LjcvZGFlbW9uL2xpYmxlZ2FjeS9vcGRfcHJvYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxNDBhNDYKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9kYWVtb24vbGlibGVnYWN5L29wZF9wcm9jLmgKQEAgLTAsMCArMSwxNTEgQEAKKy8qKgorICogQGZpbGUgb3BkX3Byb2MuaAorICogTWFuYWdlbWVudCBvZiBwcm9jZXNzZXMKKyAqCisgKiBAcmVtYXJrIENvcHlyaWdodCAyMDAyIE9Qcm9maWxlIGF1dGhvcnMKKyAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCisgKgorICogQGF1dGhvciBKb2huIExldm9uCisgKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKKyAqLworCisjaWZuZGVmIE9QRF9QUk9DX0gKKyNkZWZpbmUgT1BEX1BST0NfSAorCisjaW5jbHVkZSAib3BfdHlwZXMuaCIKKyNpbmNsdWRlICJvcF9saXN0LmgiCisKK3N0cnVjdCBvcGRfbWFwOworc3RydWN0IG9wZF9pbWFnZTsKK3N0cnVjdCBvcF9ub3RlOworc3RydWN0IG9wX3NhbXBsZTsKKworLyoqCisgKiB0cmFjayBwcm9jZXNzLCBjcmVhdGVkIGVpdGhlciBieSBhIGZvcmsgb3IgYW4gZXhlYyBub3RpZmljYXRpb24uCisgKi8KK3N0cnVjdCBvcGRfcHJvYyB7CisJLyoqIG1hcHMgYXJlIGFsd2F5cyBhZGRlZCB0byB0aGUgZW5kIG9mIGhlYWQsIHNvIHNlYXJjaCB3aWxsIGJlIGRvbmUKKwkgKiBmcm9tIHRoZSBuZXdlc3QgbWFwIHRvIHRoZSBvbGRlc3Qgd2hpY2ggbWVhbiB3ZSBkb24ndCBjYXJlIGFib3V0CisJICogbXVubWFwLiBGaXJzdCBhZGRlZCBtYXAgbXVzdCBiZSB0aGUgcHJpbWFyeSBpbWFnZSAqLworCXN0cnVjdCBsaXN0X2hlYWQgbWFwczsKKwkvKiogcHJvY2VzcyBuYW1lICovCisJY2hhciBjb25zdCAqIG5hbWU7CisJLyoqIHRocmVhZCBpZCBmb3IgdGhpcyBwcm9jZXNzLCBhbHdheXMgZXF1YWwgdG8gdGdpZCBmb3IgMi4yIGtlcm5lbCAqLworCXBpZF90IHRpZDsKKwkvKiogdGhyZWFkIGdyb3VwIGlkIGZvciB0aGlzIHByb2Nlc3MgKi8KKwlwaWRfdCB0Z2lkOworCS8qKiBub24temVybyBpZiB0aGlzIHByb2Nlc3MgcmVjZWl2ZSBhbnkgc2FtcGxlcywgdGhpcyBmaWVsZAorCSAqIGlzIHVzZWQgd2l0aCBkZWFkIGZpZWxkIHRvIGRlZmVyIG9wZF9wcm9jIGRlbGV0aW9uICovCisJaW50IGFjY2Vzc2VkOworCS8qKiBTZXQgdG8gbm9uLXplcm8gd2hlbiBhbiBleGl0IG5vdGlmaWNhdGlvbiBvY2N1ciBmb3IgdGhpcyBwcm9jZXNzICovCisJaW50IGRlYWQ7CisJLyoqIHVzZWQgYnkgY29udGFpbmVyIG9mIG9wZF9wcm9jICovCisJc3RydWN0IGxpc3RfaGVhZCBuZXh0OworfTsKKworLyoqCisgKiBpbml0aWFsaXplIG9wZF9wcm9jIGNvbnRhaW5lcgorICovCit2b2lkIG9wZF9pbml0X3Byb2NzKHZvaWQpOworCisvKioKKyAqIG9wZF9wdXRfc2FtcGxlIC0gcHJvY2VzcyBhIHNhbXBsZQorICogQHBhcmFtIHNhbXBsZSAgc2FtcGxlIHRvIHByb2Nlc3MKKyAqCisgKiBXcml0ZSBvdXQgdGhlIHNhbXBsZSB0byB0aGUgYXBwcm9wcmlhdGUgc2FtcGxlIGZpbGUuIFRoaXMKKyAqIHJvdXRpbmUgaGFuZGxlcyBrZXJuZWwgYW5kIG1vZHVsZSBzYW1wbGVzIGFzIHdlbGwgYXMgb3JkaW5hcnkgb25lcy4KKyAqLwordm9pZCBvcGRfcHV0X3NhbXBsZShzdHJ1Y3Qgb3Bfc2FtcGxlIGNvbnN0ICogc2FtcGxlKTsKKworLyoqCisgKiBvcGRfcHV0X2ltYWdlX3NhbXBsZSAtIHdyaXRlIHNhbXBsZSB0byBmaWxlCisgKiBAcGFyYW0gaW1hZ2UgIGltYWdlIGZvciBzYW1wbGUKKyAqIEBwYXJhbSBvZmZzZXQgIChmaWxlKSBvZmZzZXQgdG8gd3JpdGUgdG8KKyAqIEBwYXJhbSBjb3VudGVyICBjb3VudGVyIG51bWJlcgorICoKKyAqIEFkZCB0byB0aGUgY291bnQgc3RvcmVkIGF0IHBvc2l0aW9uIG9mZnNldCBpbiB0aGUKKyAqIGltYWdlIGZpbGUuIE92ZXJmbG93IHBpbnMgdGhlIGNvdW50IGF0IHRoZSBtYXhpbXVtCisgKiB2YWx1ZS4KKyAqLwordm9pZCBvcGRfcHV0X2ltYWdlX3NhbXBsZShzdHJ1Y3Qgb3BkX2ltYWdlICogaW1hZ2UsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1MzIgY291bnRlcik7CisKKy8qKgorICogb3BkX2hhbmRsZV9mb3JrIC0gZGVhbCB3aXRoIGZvcmsgbm90aWZpY2F0aW9uCisgKiBAcGFyYW0gbm90ZSAgbm90ZSB0byBoYW5kbGUKKyAqCisgKiBEZWFsIHdpdGggYSBmb3JrKCkgbm90aWZpY2F0aW9uIGJ5IGNyZWF0aW5nIGEgbmV3IHByb2Nlc3MKKyAqIHN0cnVjdHVyZSwgYW5kIGNvcHlpbmcgbWFwcGluZyBpbmZvcm1hdGlvbiBmcm9tIHRoZSBvbGQgcHJvY2Vzcy4KKyAqCisgKiBzYW1wbGUtPnBpZCBjb250YWlucyB0aGUgcHJvY2VzcyBpZCBvZiB0aGUgb2xkIHByb2Nlc3MuCisgKiBzYW1wbGUtPmVpcCBjb250YWlucyB0aGUgcHJvY2VzcyBpZCBvZiB0aGUgbmV3IHByb2Nlc3MuCisgKi8KK3ZvaWQgb3BkX2hhbmRsZV9mb3JrKHN0cnVjdCBvcF9ub3RlIGNvbnN0ICogbm90ZSk7CisKKy8qKgorICogb3BkX2hhbmRsZV9leGVjIC0gZGVhbCB3aXRoIG5vdGlmaWNhdGlvbiBvZiBleGVjdmUoKQorICogQHBhcmFtIHRpZCAgdGlkIGZvciB0aGlzIHByb2Nlc3MKKyAqIEBwYXJhbSB0Z2lkICB0Z2lkIGZvciB0aGlzIHByb2Nlc3MKKyAqCisgKiBEcm9wIGFsbCBtYXBwaW5nIGluZm9ybWF0aW9uIGZvciB0aGUgcHJvY2Vzcy4KKyAqLwordm9pZCBvcGRfaGFuZGxlX2V4ZWMocGlkX3QgdGlkLCBwaWRfdCB0Z2lkKTsKKworLyoqCisgKiBvcGRfaGFuZGxlX2V4aXQgLSBkZWFsIHdpdGggZXhpdCBub3RpZmljYXRpb24KKyAqIEBwYXJhbSBub3RlICBub3RlIHRvIGhhbmRsZQorICoKKyAqIERlYWwgd2l0aCBhbiBleGl0KCkgbm90aWZpY2F0aW9uIGJ5IHNldHRpbmcgdGhlIGZsYWcgImRlYWQiCisgKiBvbiBhIHByb2Nlc3MuIFRoZXNlIHdpbGwgYmUgbGF0ZXIgY2xlYW5lZCB1cCBieSB0aGUgJVNJR0FMUk0KKyAqIGhhbmRsZXIuCisgKgorICogc2FtcGxlLT5waWQgY29udGFpbnMgdGhlIHByb2Nlc3MgaWQgb2YgdGhlIGV4aXRlZCBwcm9jZXNzLgorICovCit2b2lkIG9wZF9oYW5kbGVfZXhpdChzdHJ1Y3Qgb3Bfbm90ZSBjb25zdCAqIG5vdGUpOworCisvKioKKyAqIG9wZF9nZXRfcHJvYyAtIGdldCBwcm9jZXNzIGZyb20gcHJvY2VzcyBsaXN0CisgKiBAcGFyYW0gdGlkICB0aWQgZm9yIHRoaXMgcHJvY2VzcworICogQHBhcmFtIHRnaWQgIHRnaWQgZm9yIHRoaXMgcHJvY2VzcworICoKKyAqIEEgcHJvY2VzcyB3aXRoIHBpZCB0aWQgaXMgc2VhcmNoZWQgb24gdGhlIHByb2Nlc3MgbGlzdCwKKyAqIG1haW50YWluaW5nIExSVSBvcmRlci4gSWYgaXQgaXMgbm90IGZvdW5kLCAlTlVMTCBpcyByZXR1cm5lZCwKKyAqIG90aGVyd2lzZSB0aGUgcHJvY2VzcyBzdHJ1Y3R1cmUgaXMgcmV0dXJuZWQuCisgKi8KK3N0cnVjdCBvcGRfcHJvYyAqIG9wZF9nZXRfcHJvYyhwaWRfdCB0aWQsIHBpZF90IHRnaWQpOworCisvKioKKyAqIG9wZF9uZXdfcHJvYyAtIGNyZWF0ZSBhIG5ldyBwcm9jZXNzIHN0cnVjdHVyZQorICogQHBhcmFtIHRpZCAgdGlkIGZvciB0aGlzIHByb2Nlc3MKKyAqIEBwYXJhbSB0Z2lkICB0Z2lkIGZvciB0aGlzIHByb2Nlc3MKKyAqCisgKiBBbGxvY2F0ZSBhbmQgaW5pdGlhbGlzZSBhIHByb2Nlc3Mgc3RydWN0dXJlIGFuZCBpbnNlcnQKKyAqIGl0IGludG8gdGhlIHByb2NzIGhhc2ggdGFibGUuCisgKi8KK3N0cnVjdCBvcGRfcHJvYyAqIG9wZF9uZXdfcHJvYyhwaWRfdCB0aWQsIHBpZF90IHRnaWQpOworCisvKioKKyAqIG9wZF9nZXRfbnJfcHJvY3MgLSByZXR1cm4gbnVtYmVyIG9mIHByb2Nlc3NlcyB0cmFja2VkCisgKi8KK2ludCBvcGRfZ2V0X25yX3Byb2NzKHZvaWQpOworCisvKioKKyAqIG9wZF9hZ2VfcHJvY3MgLSBhZ2UgYWxsIGRlYWQgcHJvY2VzcyBwcmVwYXJpbmcgdGhlbSBmb3IgYSBkZWxldGlvbgorICovCit2b2lkIG9wZF9hZ2VfcHJvY3Modm9pZCk7CisKKy8qKgorICogZnJlZXplIGFsbCByZXNvdXJjZSB1c2VkIGJ5IG9wZF9wcm9jcyBtYW5hZ21lbnQKKyAqLwordm9pZCBvcGRfcHJvY19jbGVhbnVwKHZvaWQpOworCisvKioKKyAqIG9wZF9jbGVhcl9rZXJuZWxfbWFwcGluZyAtIHJlbW92ZSBhbGwga2VybmVsIG1hcHBpbmcgZm9yIGFsbCBvcGRfcHJvYworICoKKyAqIGludmFsaWRhdGUgKGJ5IHJlbW92aW5nIHRoZW0pIGFsbCBrZXJuZWwgbWFwcGluZy4gVGhpcyBmdW5jdGlvbiBkbyBub3RoaW5nCisgKiB3aGVuIHNlcGFyYXRlX2tlcm5lbCA9PSAwIGJlY2F1c2Ugd2UgZG9uJ3QgYWRkIG1hcHBpbmcgZm9yIGtlcm5lbAorICogc2FtcGxlIGluIHByb2Mgc3RydWN0LiBBcyBzaWRlIGVmZmVjdCBkZWNyZWFzZSByZWZlcmVuY2UgY291bnQgb2YKKyAqIGFzc29jaWF0ZWQgd2l0aCB0aGVzZSBtYXBwaW5nIHdoaWNoIGV2ZW50dWFsbHkgY2xvc2UgdGhpcyBpbWFnZQorICovCit2b2lkIG9wZF9jbGVhcl9rZXJuZWxfbWFwcGluZyh2b2lkKTsKKworI2VuZGlmIC8qIE9QRF9QUk9DX0ggKi8KZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2RhZW1vbi9saWJsZWdhY3kvb3BkX3NhbXBsZV9maWxlcy5jIGIvb3Byb2ZpbGUtMC45LjcvZGFlbW9uL2xpYmxlZ2FjeS9vcGRfc2FtcGxlX2ZpbGVzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTI2YmE5OQotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2RhZW1vbi9saWJsZWdhY3kvb3BkX3NhbXBsZV9maWxlcy5jCkBAIC0wLDAgKzEsMTc5IEBACisvKioKKyAqIEBmaWxlIG9wZF9zYW1wbGVfZmlsZXMuYworICogTWFuYWdlbWVudCBvZiBzYW1wbGUgZmlsZXMKKyAqCisgKiBAcmVtYXJrIENvcHlyaWdodCAyMDAyIE9Qcm9maWxlIGF1dGhvcnMKKyAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCisgKgorICogQGF1dGhvciBKb2huIExldm9uCisgKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKKyAqLworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgCisjaW5jbHVkZSAib3BkX3NhbXBsZV9maWxlcy5oIgorI2luY2x1ZGUgIm9wZF9pbWFnZS5oIgorI2luY2x1ZGUgIm9wZF9wcmludGYuaCIKKyNpbmNsdWRlICJvcGRfZXZlbnRzLmgiCisjaW5jbHVkZSAib3Byb2ZpbGVkLmgiCisKKyNpbmNsdWRlICJvcF9zYW1wbGVfZmlsZS5oIgorI2luY2x1ZGUgIm9wX2ZpbGUuaCIKKyNpbmNsdWRlICJvcF9jb25maWcuaCIKKyNpbmNsdWRlICJvcF9tYW5nbGUuaCIKKyNpbmNsdWRlICJvcF9ldmVudHMuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworLyoqIEFsbCBzZmlsZXMgYXJlIG9uIHRoaXMgbGlzdC4gKi8KK3N0YXRpYyBMSVNUX0hFQUQobHJ1X2xpc3QpOworCisvKiB0aGlzIHZhbHVlIHByb2JhYmx5IGRvZXNuJ3QgbWF0dGVyIHRvbyBtdWNoICovCisjZGVmaW5lIExSVV9BTU9VTlQgMTAwMAorc3RhdGljIGludCBvcGRfMjRfc2ZpbGVfbHJ1X2NsZWFyKHZvaWQpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqIHBvczsKKwlzdHJ1Y3QgbGlzdF9oZWFkICogcG9zMjsKKwlzdHJ1Y3Qgb3BkXzI0X3NmaWxlICogc2ZpbGU7CisJaW50IGFtb3VudCA9IExSVV9BTU9VTlQ7CisKKwl2ZXJicHJpbnRmKHZzZmlsZSwgImltYWdlIGxydSBjbGVhclxuIik7CisKKwlpZiAobGlzdF9lbXB0eSgmbHJ1X2xpc3QpKQorCQlyZXR1cm4gMTsKKworCWxpc3RfZm9yX2VhY2hfc2FmZShwb3MsIHBvczIsICZscnVfbGlzdCkgeworCQlpZiAoIS0tYW1vdW50KQorCQkJYnJlYWs7CisJCXNmaWxlID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCBvcGRfMjRfc2ZpbGUsIGxydV9uZXh0KTsKKwkJb2RiX2Nsb3NlKCZzZmlsZS0+c2FtcGxlX2ZpbGUpOworCQlsaXN0X2RlbF9pbml0KCZzZmlsZS0+bHJ1X25leHQpOworCX0KKworCXJldHVybiAwOworfQorCisKK3ZvaWQgb3BkXzI0X3NmaWxlX2xydShzdHJ1Y3Qgb3BkXzI0X3NmaWxlICogc2ZpbGUpCit7CisJbGlzdF9kZWwoJnNmaWxlLT5scnVfbmV4dCk7CisJbGlzdF9hZGRfdGFpbCgmc2ZpbGUtPmxydV9uZXh0LCAmbHJ1X2xpc3QpOworfQorCisKK3N0YXRpYyBjaGFyICogb3BkX21hbmdsZV9maWxlbmFtZShzdHJ1Y3Qgb3BkX2ltYWdlIGNvbnN0ICogaW1hZ2UsIGludCBjb3VudGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjcHVfbnIpCit7CisJY2hhciAqIG1hbmdsZWQ7CisJc3RydWN0IG1hbmdsZV92YWx1ZXMgdmFsdWVzOworCXN0cnVjdCBvcGRfZXZlbnQgKiBldmVudCA9IGZpbmRfY291bnRlcl9ldmVudChjb3VudGVyKTsKKworCXZhbHVlcy5mbGFncyA9IDA7CisJaWYgKGltYWdlLT5rZXJuZWwpCisJCXZhbHVlcy5mbGFncyB8PSBNQU5HTEVfS0VSTkVMOworCisJaWYgKHNlcGFyYXRlX3RocmVhZCkgeworCQl2YWx1ZXMuZmxhZ3MgfD0gTUFOR0xFX1RHSUQgfCBNQU5HTEVfVElEOworCQl2YWx1ZXMudGlkID0gaW1hZ2UtPnRpZDsKKwkJdmFsdWVzLnRnaWQgPSBpbWFnZS0+dGdpZDsKKwl9CisKKwlpZiAoc2VwYXJhdGVfY3B1KSB7CisJCXZhbHVlcy5mbGFncyB8PSBNQU5HTEVfQ1BVOworCQl2YWx1ZXMuY3B1ID0gY3B1X25yOworCX0KKworCXZhbHVlcy5ldmVudF9uYW1lID0gZXZlbnQtPm5hbWU7CisJdmFsdWVzLmNvdW50ID0gZXZlbnQtPmNvdW50OworCXZhbHVlcy51bml0X21hc2sgPSBldmVudC0+dW07CisKKwl2YWx1ZXMuaW1hZ2VfbmFtZSA9IGltYWdlLT5uYW1lOworCXZhbHVlcy5kZXBfbmFtZSA9IHNlcGFyYXRlX2xpYiAmJiBpbWFnZS0+YXBwX25hbWUKKwkJPyBpbWFnZS0+YXBwX25hbWUgOiBpbWFnZS0+bmFtZTsKKworCW1hbmdsZWQgPSBvcF9tYW5nbGVfZmlsZW5hbWUoJnZhbHVlcyk7CisKKwlyZXR1cm4gbWFuZ2xlZDsKK30KKworCitpbnQgb3BkX29wZW5fMjRfc2FtcGxlX2ZpbGUoc3RydWN0IG9wZF9pbWFnZSAqIGltYWdlLCBpbnQgY291bnRlciwgaW50IGNwdV9ucikKK3sKKwljaGFyICogbWFuZ2xlZDsKKwlzdHJ1Y3Qgb3BkXzI0X3NmaWxlICogc2ZpbGU7CisJaW50IGVycjsKKworCW1hbmdsZWQgPSBvcGRfbWFuZ2xlX2ZpbGVuYW1lKGltYWdlLCBjb3VudGVyLCBjcHVfbnIpOworCisJdmVyYnByaW50Zih2c2ZpbGUsICJPcGVuaW5nIFwiJXNcIlxuIiwgbWFuZ2xlZCk7CisKKwljcmVhdGVfcGF0aChtYW5nbGVkKTsKKworCXNmaWxlID0gaW1hZ2UtPnNmaWxlc1tjcHVfbnJdW2NvdW50ZXJdOworCWlmICghc2ZpbGUpIHsKKwkJc2ZpbGUgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBvcGRfMjRfc2ZpbGUpKTsKKwkJbGlzdF9pbml0KCZzZmlsZS0+bHJ1X25leHQpOworCQlvZGJfaW5pdCgmc2ZpbGUtPnNhbXBsZV9maWxlKTsKKwkJaW1hZ2UtPnNmaWxlc1tjcHVfbnJdW2NvdW50ZXJdID0gc2ZpbGU7CisJfQorCisJbGlzdF9kZWwoJnNmaWxlLT5scnVfbmV4dCk7CisJbGlzdF9hZGRfdGFpbCgmc2ZpbGUtPmxydV9uZXh0LCAmbHJ1X2xpc3QpOworCityZXRyeToKKwllcnIgPSBvZGJfb3Blbigmc2ZpbGUtPnNhbXBsZV9maWxlLCBtYW5nbGVkLCBPREJfUkRXUiwKKyAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBvcGRfaGVhZGVyKSk7CisKKwkvKiBUaGlzIGNhbiBuYXR1cmFsbHkgaGFwcGVuIHdoZW4gcmFjaW5nIGFnYWluc3Qgb3Bjb250cm9sIC0tcmVzZXQuICovCisJaWYgKGVycikgeworCQlpZiAoZXJyID09IEVNRklMRSkgeworCQkJaWYgKG9wZF8yNF9zZmlsZV9scnVfY2xlYXIoKSkgeworCQkJCXByaW50ZigiTFJVIGNsZWFyZWQgYnV0IG9kYl9vcGVuKCkgZmFpbHMgZm9yICVzLlxuIiwgbWFuZ2xlZCk7CisJCQkJYWJvcnQoKTsKKwkJCX0KKwkJCWdvdG8gcmV0cnk7CisJCX0KKworCQlmcHJpbnRmKHN0ZGVyciwgIm9wcm9maWxlZDogb3BlbiBvZiAlcyBmYWlsZWQ6ICVzXG4iLAorCQkgICAgICAgIG1hbmdsZWQsIHN0cmVycm9yKGVycikpOworCQlnb3RvIG91dDsKKwl9CisKKwlmaWxsX2hlYWRlcihvZGJfZ2V0X2RhdGEoJnNmaWxlLT5zYW1wbGVfZmlsZSksIGNvdW50ZXIsIDAsIDAsCisJCSAgICBpbWFnZS0+a2VybmVsLCAwLCAwLCAwLCBpbWFnZS0+bXRpbWUpOworCitvdXQ6CisJZnJlZShtYW5nbGVkKTsKKwlyZXR1cm4gZXJyOworfQorCisKK3ZvaWQgb3BkX3N5bmNfc2FtcGxlc19maWxlcyh2b2lkKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKiBwb3M7CisJc3RydWN0IG9wZF8yNF9zZmlsZSAqIHNmaWxlOworCisJbGlzdF9mb3JfZWFjaChwb3MsICZscnVfbGlzdCkgeworCQlzZmlsZSA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3Qgb3BkXzI0X3NmaWxlLCBscnVfbmV4dCk7CisJCW9kYl9zeW5jKCZzZmlsZS0+c2FtcGxlX2ZpbGUpOworCX0KK30KKworCit2b2lkIG9wZF9jbG9zZV9pbWFnZV9zYW1wbGVzX2ZpbGVzKHN0cnVjdCBvcGRfaW1hZ2UgKiBpbWFnZSkKK3sKKwl1aW50IGksIGo7CisJZm9yIChpID0gMCA7IGkgPCBvcF9ucl9jb3VudGVycyA7ICsraSkgeworCQlmb3IgKGogPSAwOyBqIDwgTlJfQ1BVUzsgKytqKSB7CisJCQlpZiAoaW1hZ2UtPnNmaWxlc1tqXSAmJiBpbWFnZS0+c2ZpbGVzW2pdW2ldKSB7CisJCQkJb2RiX2Nsb3NlKCZpbWFnZS0+c2ZpbGVzW2pdW2ldLT5zYW1wbGVfZmlsZSk7CisJCQkJbGlzdF9kZWwoJmltYWdlLT5zZmlsZXNbal1baV0tPmxydV9uZXh0KTsKKwkJCQlmcmVlKGltYWdlLT5zZmlsZXNbal1baV0pOworCQkJCWltYWdlLT5zZmlsZXNbal1baV0gPSAwOworCQkJfQorCQl9CisJfQorfQpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvZGFlbW9uL2xpYmxlZ2FjeS9vcGRfc2FtcGxlX2ZpbGVzLmggYi9vcHJvZmlsZS0wLjkuNy9kYWVtb24vbGlibGVnYWN5L29wZF9zYW1wbGVfZmlsZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDU1NWE5Ci0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvZGFlbW9uL2xpYmxlZ2FjeS9vcGRfc2FtcGxlX2ZpbGVzLmgKQEAgLTAsMCArMSw2MyBAQAorLyoqCisgKiBAZmlsZSBvcGRfc2FtcGxlX2ZpbGVzLmgKKyAqIE1hbmFnZW1lbnQgb2Ygc2FtcGxlIGZpbGVzCisgKgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMiBPUHJvZmlsZSBhdXRob3JzCisgKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORworICoKKyAqIEBhdXRob3IgSm9obiBMZXZvbgorICogQGF1dGhvciBQaGlsaXBwZSBFbGllCisgKi8KKworI2lmbmRlZiBPUERfU0FNUExFX0ZJTEVTX0gKKyNkZWZpbmUgT1BEX1NBTVBMRV9GSUxFU19ICisKKyNpbmNsdWRlICJvcF9saXN0LmgiCisjaW5jbHVkZSAib2RiLmgiCisKK3N0cnVjdCBvcGRfaW1hZ2U7CisKKy8qKiBvbmUgc2FtcGxlcyBmaWxlIHdoZW4gcHJvZmlsaW5nIG9uIGEgMi4yLzIuNCBrZXJuZWwgKi8KK3N0cnVjdCBvcGRfMjRfc2ZpbGUgeworCS8qKiBscnUgbGlzdCBvZiBzYW1wbGUgZmlsZSAqLworCXN0cnVjdCBsaXN0X2hlYWQgbHJ1X25leHQ7CisJLyoqIHRoZSBzYW1wbGUgZmlsZSBpdHNlbGYgKi8KKwlvZGJfdCBzYW1wbGVfZmlsZTsKK307CisKKy8qKgorICogc3luYyBhbGwgc2FtcGxlcyBmaWxlcworICovCit2b2lkIG9wZF9zeW5jX3NhbXBsZXNfZmlsZXModm9pZCk7CisKKy8qKgorICogQHBhcmFtIGltYWdlICB0aGUgaW1hZ2UgcG9pbnRlciB0byB3b3JrIG9uCisgKgorICogY2xvc2UgYWxsIHNhbXBsZXMgZmlsZXMgYmVsb25naW5nIHRvIHRoaXMgaW1hZ2UKKyAqLwordm9pZCBvcGRfY2xvc2VfaW1hZ2Vfc2FtcGxlc19maWxlcyhzdHJ1Y3Qgb3BkX2ltYWdlICogaW1hZ2UpOworCisvKioKKyAqIG9wZF9vcGVuXzI0X3NhbXBsZV9maWxlIC0gb3BlbiBhbiBpbWFnZSBzYW1wbGUgZmlsZQorICogQHBhcmFtIGltYWdlICBpbWFnZSB0byBvcGVuIGZpbGUgZm9yCisgKiBAcGFyYW0gY291bnRlciAgY291bnRlciBudW1iZXIKKyAqIEBwYXJhbSBjcHVfbnIgIGNwdSBudW1iZXIKKyAqCisgKiBPcGVuIGltYWdlIHNhbXBsZSBmaWxlIGZvciB0aGUgaW1hZ2UsIGNvdW50ZXIKKyAqIGNvdW50ZXIgYW5kIHNldCB1cCBtZW1vcnkgbWFwcGluZ3MgZm9yIGl0LgorICogaW1hZ2UtPmtlcm5lbCBhbmQgaW1hZ2UtPm5hbWUgbXVzdCBoYXZlIG1lYW5pbmdmdWwKKyAqIHZhbHVlcy4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2Vzcy4KKyAqLworaW50IG9wZF9vcGVuXzI0X3NhbXBsZV9maWxlKHN0cnVjdCBvcGRfaW1hZ2UgKiBpbWFnZSwgaW50IGNvdW50ZXIsIGludCBjcHVfbnIpOworCisvKioKKyAqIEBwYXJhbSBzZmlsZSAgc2FtcGxlIGZpbGUgdG8gYWN0IG9uCisgKgorICogcHV0IHNmaWxlIGF0IHRoZSBoZWFkIG9mIHNhbXBsZXMgZmlsZXMgbHJ1IGxpc3QKKyAqLwordm9pZCBvcGRfMjRfc2ZpbGVfbHJ1KHN0cnVjdCBvcGRfMjRfc2ZpbGUgKiBzZmlsZSk7CisKKworI2VuZGlmIC8qIE9QRF9TQU1QTEVfRklMRVNfSCAqLwpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvZGFlbW9uL2xpYmxlZ2FjeS9wX21vZHVsZS5oIGIvb3Byb2ZpbGUtMC45LjcvZGFlbW9uL2xpYmxlZ2FjeS9wX21vZHVsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzNjc1MDgKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9kYWVtb24vbGlibGVnYWN5L3BfbW9kdWxlLmgKQEAgLTAsMCArMSwyMDcgQEAKKy8qIERlZmluaXRpb25zIGZvciB0aGUgTGludXggbW9kdWxlIHN5c2NhbGwgaW50ZXJmYWNlLgorICAgQ29weXJpZ2h0IDE5OTYsIDE5OTcgTGludXggSW50ZXJuYXRpb25hbC4KKworICAgQ29udHJpYnV0ZWQgYnkgUmljaGFyZCBIZW5kZXJzb24gPHJ0aEB0YW11LmVkdT4KKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIExpbnV4IG1vZHV0aWxzLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAgIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuICAqLworCisjaWZuZGVmIE1PRFVUSUxTX01PRFVMRV9ICisjZGVmaW5lIE1PRFVUSUxTX01PRFVMRV9IIDEKKworLyogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBzdHJ1Y3R1cmVzIHVzZWQgYnkgdGhlIDIuMCBhbmQgMi4xIGtlcm5lbHMuCisgICBXZSBkbyBub3QgdXNlIHRoZSBrZXJuZWwgaGVhZGVycyBkaXJlY3RseSBiZWNhdXNlIHdlIGRvIG5vdCB3aXNoCisgICB0byBiZSBkZXBlbmRhbnQgb24gYSBwYXJ0aWN1bGFyIGtlcm5lbCB2ZXJzaW9uIHRvIGNvbXBpbGUgaW5zbW9kLiAgKi8KKworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogVGhlIHN0cnVjdHVyZXMgdXNlZCBieSBMaW51eCAyLjAuICAqLworCisvKiBUaGUgc3ltYm9sIGZvcm1hdCB1c2VkIGJ5IGdldF9rZXJuZWxfc3ltcygyKS4gICovCitzdHJ1Y3Qgb2xkX2tlcm5lbF9zeW0KK3sKKyAgdW5zaWduZWQgbG9uZyB2YWx1ZTsKKyAgY2hhciBuYW1lWzYwXTsKK307CisKK3N0cnVjdCBvbGRfbW9kdWxlX3JlZgoreworICB1bnNpZ25lZCBsb25nIG1vZHVsZTsJCS8qIGtlcm5lbCBhZGRyZXNzZXMgKi8KKyAgdW5zaWduZWQgbG9uZyBuZXh0OworfTsKKworc3RydWN0IG9sZF9tb2R1bGVfc3ltYm9sCit7CisgIHVuc2lnbmVkIGxvbmcgYWRkcjsKKyAgdW5zaWduZWQgbG9uZyBuYW1lOworfTsKKworc3RydWN0IG9sZF9zeW1ib2xfdGFibGUKK3sKKyAgaW50IHNpemU7CQkJLyogdG90YWwsIGluY2x1ZGluZyBzdHJpbmcgdGFibGUhISEgKi8KKyAgaW50IG5fc3ltYm9sczsKKyAgaW50IG5fcmVmczsKKyAgc3RydWN0IG9sZF9tb2R1bGVfc3ltYm9sIHN5bWJvbFswXTsgLyogYWN0dWFsIHNpemUgZGVmaW5lZCBieSBuX3N5bWJvbHMgKi8KKyAgc3RydWN0IG9sZF9tb2R1bGVfcmVmIHJlZlswXTsJLyogYWN0dWFsIHNpemUgZGVmaW5lZCBieSBuX3JlZnMgKi8KK307CisKK3N0cnVjdCBvbGRfbW9kX3JvdXRpbmVzCit7CisgIHVuc2lnbmVkIGxvbmcgaW5pdDsKKyAgdW5zaWduZWQgbG9uZyBjbGVhbnVwOworfTsKKworc3RydWN0IG9sZF9tb2R1bGUKK3sKKyAgdW5zaWduZWQgbG9uZyBuZXh0OworICB1bnNpZ25lZCBsb25nIHJlZjsJCS8qIHRoZSBsaXN0IG9mIG1vZHVsZXMgdGhhdCByZWZlciB0byBtZSAqLworICB1bnNpZ25lZCBsb25nIHN5bXRhYjsKKyAgdW5zaWduZWQgbG9uZyBuYW1lOworICBpbnQgc2l6ZTsJCQkvKiBzaXplIG9mIG1vZHVsZSBpbiBwYWdlcyAqLworICB1bnNpZ25lZCBsb25nIGFkZHI7CQkvKiBhZGRyZXNzIG9mIG1vZHVsZSAqLworICBpbnQgc3RhdGU7CisgIHVuc2lnbmVkIGxvbmcgY2xlYW51cDsJLyogY2xlYW51cCByb3V0aW5lICovCit9OworCisvKiBTZW50IHRvIGluaXRfbW9kdWxlKDIpIG9yJ2VkIGludG8gdGhlIGNvZGUgc2l6ZSBwYXJhbWV0ZXIuICAqLworI2RlZmluZSBPTERfTU9EX0FVVE9DTEVBTiAweDQwMDAwMDAwIC8qIGJpZyBlbm91Z2gsIGJ1dCBubyBzaWduIHByb2JsZW1zLi4uICovCisKK2ludCBnZXRfa2VybmVsX3N5bXMoc3RydWN0IG9sZF9rZXJuZWxfc3ltICopOworaW50IG9sZF9zeXNfaW5pdF9tb2R1bGUoY2hhciBjb25zdCAqIG5hbWUsIGNoYXIgKmNvZGUsIHVuc2lnbmVkIGNvZGVzaXplLAorCQkJc3RydWN0IG9sZF9tb2Rfcm91dGluZXMgKiwgc3RydWN0IG9sZF9zeW1ib2xfdGFibGUgKik7CisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBGb3Igc2l6ZW9mKCkgd2hpY2ggYXJlIHJlbGF0ZWQgdG8gdGhlIG1vZHVsZSBwbGF0Zm9ybSBhbmQgbm90IHRvIHRoZQorICAgZW52aXJvbm1lbnQgaXNubW9kIGlzIHJ1bm5pbmcgaW4sIHVzZSBzaXplb2ZfeHggaW5zdGVhZCBvZiBzaXplb2YoeHgpLiAgKi8KKworI2RlZmluZSB0Z3Rfc2l6ZW9mX2NoYXIJCXNpemVvZihjaGFyKQorI2RlZmluZSB0Z3Rfc2l6ZW9mX3Nob3J0CXNpemVvZihzaG9ydCkKKyNkZWZpbmUgdGd0X3NpemVvZl9pbnQJCXNpemVvZihpbnQpCisjZGVmaW5lIHRndF9zaXplb2ZfbG9uZwkJc2l6ZW9mKGxvbmcpCisjZGVmaW5lIHRndF9zaXplb2ZfY2hhcl9wCXNpemVvZihjaGFyICopCisjZGVmaW5lIHRndF9zaXplb2Zfdm9pZF9wCXNpemVvZih2b2lkICopCisjZGVmaW5lIHRndF9sb25nCQlsb25nCisjZGVmaW5lIHRndF9sb25nX2ZtdAkJImwiCisKKy8qIFRoaXMgYXNzdW1lcyB0aGF0IGxvbmcgbG9uZyBvbiBhIDMyIGJpdCBzeXN0ZW0gaXMgZXF1aXZhbGVudCB0byBsb25nIG9uIHRoZQorICogZXF1aXZhbGVudCA2NCBiaXQgc3lzdGVtLiAgQWxzbyB0aGF0IHZvaWQgYW5kIGNoYXIgcG9pbnRlcnMgYXJlIDggYnl0ZXMgb24KKyAqIGFsbCA2NCBiaXQgc3lzdGVtcy4gIEFkZCBwZXIgc3lzdGVtIHR3ZWFrcyBpZiBpdCBldmVyIGJlY29tZXMgbmVjZXNzYXJ5LgorICovCisjaWYgZGVmaW5lZChDT01NT05fMzI2NCkgJiYgZGVmaW5lZChPTkxZXzY0KQorI3VuZGVmIHRndF9sb25nCisjdW5kZWYgdGd0X2xvbmdfZm10CisjdW5kZWYgdGd0X3NpemVvZl9sb25nCisjdW5kZWYgdGd0X3NpemVvZl9jaGFyX3AKKyN1bmRlZiB0Z3Rfc2l6ZW9mX3ZvaWRfcAorI2RlZmluZSB0Z3RfbG9uZyAgICAgICAgICAgICAgICBsb25nIGxvbmcKKyNkZWZpbmUgdGd0X2xvbmdfZm10CQkibGwiCisjZGVmaW5lIHRndF9zaXplb2ZfbG9uZyAgICAgICAgIDgKKyNkZWZpbmUgdGd0X3NpemVvZl9jaGFyX3AgICAgICAgOAorI2RlZmluZSB0Z3Rfc2l6ZW9mX3ZvaWRfcCAgICAgICA4CisjZW5kaWYKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIFRoZSBzdHJ1Y3R1cmVzIHVzZWQgaW4gTGludXggMi4xIG9ud2FyZHMuICAqLworCisvKiBOb3RlOiBtb2R1bGVfc3ltYm9sIGRvZXMgbm90IHVzZSB0Z3RfbG9uZyBpbnRlbnRpb25hbGx5ICovCitzdHJ1Y3QgbW9kdWxlX3N5bWJvbAoreworICB1bnNpZ25lZCBsb25nIHZhbHVlOworICB1bnNpZ25lZCBsb25nIG5hbWU7Cit9OworCitzdHJ1Y3QgbW9kdWxlX3JlZgoreworICB1bnNpZ25lZCB0Z3RfbG9uZyBkZXA7CQkvKiBrZXJuZWwgYWRkcmVzc2VzICovCisgIHVuc2lnbmVkIHRndF9sb25nIHJlZjsKKyAgdW5zaWduZWQgdGd0X2xvbmcgbmV4dF9yZWY7Cit9OworCitzdHJ1Y3QgbW9kdWxlCit7CisgIHVuc2lnbmVkIHRndF9sb25nIHNpemVfb2Zfc3RydWN0OwkvKiA9PSBzaXplb2YobW9kdWxlKSAqLworICB1bnNpZ25lZCB0Z3RfbG9uZyBuZXh0OworICB1bnNpZ25lZCB0Z3RfbG9uZyBuYW1lOworICB1bnNpZ25lZCB0Z3RfbG9uZyBzaXplOworCisgIHRndF9sb25nIHVzZWNvdW50OworICB1bnNpZ25lZCB0Z3RfbG9uZyBmbGFnczsJCS8qIEFVVE9DTEVBTiBldCBhbCAqLworCisgIHVuc2lnbmVkIG5zeW1zOworICB1bnNpZ25lZCBuZGVwczsKKworICB1bnNpZ25lZCB0Z3RfbG9uZyBzeW1zOworICB1bnNpZ25lZCB0Z3RfbG9uZyBkZXBzOworICB1bnNpZ25lZCB0Z3RfbG9uZyByZWZzOworICB1bnNpZ25lZCB0Z3RfbG9uZyBpbml0OworICB1bnNpZ25lZCB0Z3RfbG9uZyBjbGVhbnVwOworICB1bnNpZ25lZCB0Z3RfbG9uZyBleF90YWJsZV9zdGFydDsKKyAgdW5zaWduZWQgdGd0X2xvbmcgZXhfdGFibGVfZW5kOworI2lmZGVmIF9fYWxwaGFfXworICB1bnNpZ25lZCB0Z3RfbG9uZyBncDsKKyNlbmRpZgorICAvKiBFdmVyeXRoaW5nIGFmdGVyIGhlcmUgaXMgZXh0ZW5zaW9uLiAgKi8KKyAgdW5zaWduZWQgdGd0X2xvbmcgcmVhZF9zdGFydDsJCS8qIFJlYWQgZGF0YSBmcm9tIGV4aXN0aW5nIG1vZHVsZSAqLworICB1bnNpZ25lZCB0Z3RfbG9uZyByZWFkX2VuZDsKKyAgdW5zaWduZWQgdGd0X2xvbmcgY2FuX3VubG9hZDsKKyAgdW5zaWduZWQgdGd0X2xvbmcgcnVuc2l6ZTsKKyAgdW5zaWduZWQgdGd0X2xvbmcga2FsbHN5bXNfc3RhcnQ7CisgIHVuc2lnbmVkIHRndF9sb25nIGthbGxzeW1zX2VuZDsKKyAgdW5zaWduZWQgdGd0X2xvbmcgYXJjaGRhdGFfc3RhcnQ7CisgIHVuc2lnbmVkIHRndF9sb25nIGFyY2hkYXRhX2VuZDsKKyAgdW5zaWduZWQgdGd0X2xvbmcga2VybmVsX2RhdGE7Cit9OworCitzdHJ1Y3QgbW9kdWxlX2luZm8KK3sKKyAgdW5zaWduZWQgbG9uZyBhZGRyOworICB1bnNpZ25lZCBsb25nIHNpemU7CisgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJICAgbG9uZyB1c2Vjb3VudDsKK307CisKKy8qIEJpdHMgb2YgbW9kdWxlLmZsYWdzLiAgKi8KKyNkZWZpbmUgTkVXX01PRF9SVU5OSU5HCQkxCisjZGVmaW5lIE5FV19NT0RfREVMRVRFRAkJMgorI2RlZmluZSBORVdfTU9EX0FVVE9DTEVBTgk0CisjZGVmaW5lIE5FV19NT0RfVklTSVRFRAkJOAorI2RlZmluZSBORVdfTU9EX1VTRURfT05DRQkxNgorI2RlZmluZSBORVdfTU9EX0lOSVRJQUxJWklORwk2NAorCitpbnQgc3lzX2luaXRfbW9kdWxlKGNoYXIgY29uc3QgKiBuYW1lLCBjb25zdCBzdHJ1Y3QgbW9kdWxlICopOworaW50IHF1ZXJ5X21vZHVsZShjaGFyIGNvbnN0ICogbmFtZSwgaW50IHdoaWNoLCB2b2lkICpidWYsIHNpemVfdCBidWZzaXplLAorCQkgc2l6ZV90ICpyZXQpOworCisvKiBWYWx1ZXMgZm9yIHF1ZXJ5X21vZHVsZSdzIHdoaWNoLiAgKi8KKworI2RlZmluZSBRTV9NT0RVTEVTCTEKKyNkZWZpbmUgUU1fREVQUwkJMgorI2RlZmluZSBRTV9SRUZTCQkzCisjZGVmaW5lIFFNX1NZTUJPTFMJNAorI2RlZmluZSBRTV9JTkZPCQk1CisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBUaGUgc3lzdGVtIGNhbGxzIHVuY2hhbmdlZCBiZXR3ZWVuIDIuMCBhbmQgMi4xLiAgKi8KKwordW5zaWduZWQgbG9uZyBjcmVhdGVfbW9kdWxlKGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKK2ludCBkZWxldGVfbW9kdWxlKGNvbnN0IGNoYXIgKik7CisKKy8qIEluIHNhZmUgbW9kZSB0aGUgbGFzdCBwYXJhbWV0ZXIgaXMgZm9yY2VkIHRvIGJlIGEgbW9kdWxlIG5hbWUgYW5kIG1ldGEKKyAqIGV4cGFuc2lvbiBpcyBub3QgYWxsb3dlZCBvbiB0aGF0IG5hbWUuCisgKi8KK2V4dGVybiB1bnNpZ25lZCBpbnQgc2FmZW1vZGU7CisKKyNlbmRpZiAvKiBtb2R1bGUuaCAqLwpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvZGFlbW9uL29wZF9hbm9uLmMgYi9vcHJvZmlsZS0wLjkuNy9kYWVtb24vb3BkX2Fub24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Y2FlYTNkCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvZGFlbW9uL29wZF9hbm9uLmMKQEAgLTAsMCArMSwyMjggQEAKKy8qKgorICogQGZpbGUgb3BkX2Fub24uYworICogQW5vbnltb3VzIHJlZ2lvbiBoYW5kbGluZy4KKyAqCisgKiBPdXIgY2FjaGluZyBvZiBtYXBzIGhhcyBzb21lIHByb2JsZW1zOiBpZiB3ZSBnZXQgdGdpZCByZXVzZSwKKyAqIGFuZCBpdCdzIHRoZSBzYW1lIGFwcGxpY2F0aW9uLCB3ZSBtaWdodCBlbmQgdXAgd2l0aCB3cm9uZworICogbWFwcy4gVGhlIHNhbWUgaGFwcGVucyBpbiBhbiB1bm1hcC1yZW1hcCBjYXNlLiBUaGVyZSdzIG5vdCBtdWNoCisgKiB3ZSBjYW4gZG8gYWJvdXQgdGhpcywgd2UganVzdCBob3BlIGl0J3Mgbm90IHRvbyBjb21tb24uLi4KKyAqCisgKiBXaGF0IGlzIHJlbGF0aXZlbHkgY29tbW9uIGlzIGV4cGFuZGluZyBhbm9uIG1hcHMsIHdoaWNoIGxlYXZlcyB1cworICogd2l0aCBsb3RzIG9mIHNlcGFyYXRlIHNhbXBsZSBmaWxlcy4KKyAqCisgKiBAcmVtYXJrIENvcHlyaWdodCAyMDA1IE9Qcm9maWxlIGF1dGhvcnMKKyAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCisgKgorICogQGF1dGhvciBKb2huIExldm9uCisgKiBATW9kaWZpY2F0aW9ucyBHaXNsZSBEYW5rZWwKKyAqLworCisjaW5jbHVkZSAib3BkX2Fub24uaCIKKyNpbmNsdWRlICJvcGRfdHJhbnMuaCIKKyNpbmNsdWRlICJvcGRfc2ZpbGUuaCIKKyNpbmNsdWRlICJvcGRfcHJpbnRmLmgiCisjaW5jbHVkZSAib3BfbGliaWJlcnR5LmgiCisKKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjZGVmaW5lIEhBU0hfU0laRSAxMDI0CisjZGVmaW5lIEhBU0hfQklUUyAoSEFTSF9TSVpFIC0gMSkKKworLyoKKyAqIE5vdGUgdGhhdCB0aGlzIHZhbHVlIGlzIHRlbXBlcmVkIGJ5IHRoZSBmYWN0IHRoYXQgd2hlbiB3ZSBtaXNzIGluIHRoZQorICogYW5vbiBjYWNoZSwgd2UnbGwgdGVhciBkb3duIGFsbCB0aGUgbWFwcGluZ3MgZm9yIHRoYXQgdGdpZC4gVGh1cywgTFJVCisgKiBvZiBhIG1hcHBpbmcgY2FuIHBvdGVudGlhbGx5IGNsZWFyIG91dCBhIG11Y2ggbGFyZ2VyIG51bWJlciBvZgorICogbWFwcGluZ3MuCisgKi8KKyNkZWZpbmUgTFJVX1NJWkUgODE5MgorI2RlZmluZSBMUlVfQU1PVU5UIChMUlVfU0laRS84KQorCitzdGF0aWMgc3RydWN0IGxpc3RfaGVhZCBoYXNoZXNbSEFTSF9TSVpFXTsKK3N0YXRpYyBzdHJ1Y3QgbGlzdF9oZWFkIGxydTsKK3N0YXRpYyBzaXplX3QgbnJfbHJ1OworCitzdGF0aWMgdm9pZCBkb19scnUoc3RydWN0IHRyYW5zaWVudCAqIHRyYW5zKQoreworCXNpemVfdCBucl90b19raWxsID0gTFJVX0FNT1VOVDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICogcG9zOworCXN0cnVjdCBsaXN0X2hlYWQgKiBwb3MyOworCXN0cnVjdCBhbm9uX21hcHBpbmcgKiBlbnRyeTsKKworCWxpc3RfZm9yX2VhY2hfc2FmZShwb3MsIHBvczIsICZscnUpIHsKKwkJZW50cnkgPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IGFub25fbWFwcGluZywgbHJ1X2xpc3QpOworCQlpZiAodHJhbnMtPmFub24gPT0gZW50cnkpCisJCQljbGVhcl90cmFuc19jdXJyZW50KHRyYW5zKTsKKwkJaWYgKHRyYW5zLT5sYXN0X2Fub24gPT0gZW50cnkpCisJCQljbGVhcl90cmFuc19sYXN0KHRyYW5zKTsKKwkJc2ZpbGVfY2xlYXJfYW5vbihlbnRyeSk7CisJCWxpc3RfZGVsKCZlbnRyeS0+bGlzdCk7CisJCWxpc3RfZGVsKCZlbnRyeS0+bHJ1X2xpc3QpOworCQktLW5yX2xydTsKKwkJZnJlZShlbnRyeSk7CisJCWlmIChucl90b19raWxsLS0gPT0gMCkKKwkJCWJyZWFrOworCX0KK30KKworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBoYXNoX2Fub24ocGlkX3QgdGdpZCwgY29va2llX3QgYXBwKQoreworCXJldHVybiAoKGFwcCA+PiBEQ09PS0lFX1NISUZUKSBeICh0Z2lkID4+IDIpKSAmIChIQVNIX1NJWkUgLSAxKTsKK30KKyAKKworc3RhdGljIHZvaWQgY2xlYXJfYW5vbl9tYXBzKHN0cnVjdCB0cmFuc2llbnQgKiB0cmFucykKK3sKKwl1bnNpZ25lZCBsb25nIGhhc2ggPSBoYXNoX2Fub24odHJhbnMtPnRnaWQsIHRyYW5zLT5hcHBfY29va2llKTsKKwlwaWRfdCB0Z2lkID0gdHJhbnMtPnRnaWQ7CisJY29va2llX3QgYXBwID0gdHJhbnMtPmFwcF9jb29raWU7CisJc3RydWN0IGxpc3RfaGVhZCAqIHBvczsKKwlzdHJ1Y3QgbGlzdF9oZWFkICogcG9zMjsKKwlzdHJ1Y3QgYW5vbl9tYXBwaW5nICogZW50cnk7CisKKwljbGVhcl90cmFuc19jdXJyZW50KHRyYW5zKTsKKworCWxpc3RfZm9yX2VhY2hfc2FmZShwb3MsIHBvczIsICZoYXNoZXNbaGFzaF0pIHsKKwkJZW50cnkgPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IGFub25fbWFwcGluZywgbGlzdCk7CisJCWlmIChlbnRyeS0+dGdpZCA9PSB0Z2lkICYmIGVudHJ5LT5hcHBfY29va2llID09IGFwcCkgeworCQkJaWYgKHRyYW5zLT5sYXN0X2Fub24gPT0gZW50cnkpCisJCQkJY2xlYXJfdHJhbnNfbGFzdCh0cmFucyk7CisJCQlzZmlsZV9jbGVhcl9hbm9uKGVudHJ5KTsKKwkJCWxpc3RfZGVsKCZlbnRyeS0+bGlzdCk7CisJCQlsaXN0X2RlbCgmZW50cnktPmxydV9saXN0KTsKKwkJCS0tbnJfbHJ1OworCQkJZnJlZShlbnRyeSk7CisJCX0KKwl9CisKKwlpZiAodm1pc2MpIHsKKwkJY2hhciBjb25zdCAqIG5hbWUgPSB2ZXJib3NlX2Nvb2tpZShhcHApOworCQlwcmludGYoIkNsZWFyZWQgYW5vbiBtYXBzIGZvciB0Z2lkICV1ICglcykuXG4iLCB0Z2lkLCBuYW1lKTsKKwl9Cit9CisKKworc3RhdGljIHZvaWQKK2FkZF9hbm9uX21hcHBpbmcoc3RydWN0IHRyYW5zaWVudCAqIHRyYW5zLCB2bWFfdCBzdGFydCwgdm1hX3QgZW5kLCBjaGFyICogbmFtZSkKK3sKKwl1bnNpZ25lZCBsb25nIGhhc2ggPSBoYXNoX2Fub24odHJhbnMtPnRnaWQsIHRyYW5zLT5hcHBfY29va2llKTsKKwlzdHJ1Y3QgYW5vbl9tYXBwaW5nICogbSA9IHhtYWxsb2Moc2l6ZW9mKHN0cnVjdCBhbm9uX21hcHBpbmcpKTsKKwltLT50Z2lkID0gdHJhbnMtPnRnaWQ7CisJbS0+YXBwX2Nvb2tpZSA9IHRyYW5zLT5hcHBfY29va2llOworCW0tPnN0YXJ0ID0gc3RhcnQ7CisJbS0+ZW5kID0gZW5kOworCXN0cm5jcHkobS0+bmFtZSwgbmFtZSwgTUFYX0lNQUdFX05BTUVfU0laRSArIDEpOworCWxpc3RfYWRkX3RhaWwoJm0tPmxpc3QsICZoYXNoZXNbaGFzaF0pOworCWxpc3RfYWRkX3RhaWwoJm0tPmxydV9saXN0LCAmbHJ1KTsKKwlpZiAoKytucl9scnUgPT0gTFJVX1NJWkUpCisJCWRvX2xydSh0cmFucyk7CisJaWYgKHZtaXNjKSB7CisJCWNoYXIgY29uc3QgKiBuYW1lID0gdmVyYm9zZV9jb29raWUobS0+YXBwX2Nvb2tpZSk7CisJCXByaW50ZigiQWRkZWQgYW5vbiBtYXAgMHglbGx4LTB4JWxseCBmb3IgdGdpZCAldSAoJXMpLlxuIiwKKwkJICAgICAgIHN0YXJ0LCBlbmQsIG0tPnRnaWQsIG5hbWUpOworCX0KK30KKworCisvKiA0MjAwMDAwMC00MjEyZjAwMCByLXhwIDAwMDAwMDAwIDE2OjAzIDQyNDMzNCAvbGliL3Rscy9saWJjLTIuMy4yLnNvICovCitzdGF0aWMgdm9pZCBnZXRfYW5vbl9tYXBzKHN0cnVjdCB0cmFuc2llbnQgKiB0cmFucykKK3sKKwlGSUxFICogZnAgPSBOVUxMOworCWNoYXIgYnVmW1BBVEhfTUFYXTsKKwl2bWFfdCBzdGFydCwgZW5kOworCWludCByZXQ7CisKKwlzbnByaW50ZihidWYsIFBBVEhfTUFYLCAiL3Byb2MvJWQvbWFwcyIsIHRyYW5zLT50Z2lkKTsKKwlmcCA9IGZvcGVuKGJ1ZiwgInIiKTsKKwlpZiAoIWZwKQorCQlyZXR1cm47CisKKwl3aGlsZSAoZmdldHMoYnVmLCBQQVRIX01BWCwgZnApICE9IE5VTEwpIHsKKwkJY2hhciB0bXBbTUFYX0lNQUdFX05BTUVfU0laRSArIDFdOworCQljaGFyIG5hbWVbTUFYX0lNQUdFX05BTUVfU0laRSArIDFdOworCQkvKiBTb21lIGFub24gbWFwcyBoYXZlIGxhYmVscyBsaWtlCisJCSAqIFtoZWFwXSwgW3N0YWNrXSwgW3Zkc29dLCBbdnN5c2NhbGxdIC4uLgorCQkgKiBLZWVwIHRyYWNrIG9mIHRoZXNlIGxhYmVscy4gSWYgYSBtYXAgaGFzIG5vIG5hbWUsIGNhbGwgaXQgImFub24iLgorCQkgKiBJZ25vcmUgYWxsIG1hcHBpbmdzIHN0YXJ0aW5nIHdpdGggIi8iIChmaWxlIG9yIHNoYXJlZCBtZW1vcnkgb2JqZWN0KQorCQkgKi8KKwkJc3RyY3B5KG5hbWUsICJhbm9uIik7CisJCXJldCA9IHNzY2FuZihidWYsICIlbGx4LSVsbHggJTIwcyAlMjBzICUyMHMgJTIwcyAlMjBzIiwKKwkJICAgICAgICAgICAgICZzdGFydCwgJmVuZCwgdG1wLCB0bXAsIHRtcCwgdG1wLCBuYW1lKTsKKwkJaWYgKHJldCA8IDYgfHwgbmFtZVswXSA9PSAnLycpCisJCQljb250aW51ZTsKKworCQlhZGRfYW5vbl9tYXBwaW5nKHRyYW5zLCBzdGFydCwgZW5kLCBuYW1lKTsKKwl9CisKKwlmY2xvc2UoZnApOworfQorCisKK3N0YXRpYyBpbnQKK2Fub25fbWF0Y2goc3RydWN0IHRyYW5zaWVudCBjb25zdCAqIHRyYW5zLCBzdHJ1Y3QgYW5vbl9tYXBwaW5nIGNvbnN0ICogYW5vbikKK3sKKwlpZiAoIWFub24pCisJCXJldHVybiAwOworCWlmICh0cmFucy0+dGdpZCAhPSBhbm9uLT50Z2lkKQorCQlyZXR1cm4gMDsKKwlpZiAodHJhbnMtPmFwcF9jb29raWUgIT0gYW5vbi0+YXBwX2Nvb2tpZSkKKwkJcmV0dXJuIDA7CisJaWYgKHRyYW5zLT5wYyA8IGFub24tPnN0YXJ0KQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gKHRyYW5zLT5wYyA8IGFub24tPmVuZCk7Cit9CisKKworc3RydWN0IGFub25fbWFwcGluZyAqIGZpbmRfYW5vbl9tYXBwaW5nKHN0cnVjdCB0cmFuc2llbnQgKiB0cmFucykKK3sKKwl1bnNpZ25lZCBsb25nIGhhc2ggPSBoYXNoX2Fub24odHJhbnMtPnRnaWQsIHRyYW5zLT5hcHBfY29va2llKTsKKwlzdHJ1Y3QgbGlzdF9oZWFkICogcG9zOworCXN0cnVjdCBhbm9uX21hcHBpbmcgKiBlbnRyeTsKKwlpbnQgdHJpZWQgPSAwOworCisJaWYgKGFub25fbWF0Y2godHJhbnMsIHRyYW5zLT5hbm9uKSkKKwkJcmV0dXJuICh0cmFucy0+YW5vbik7CisKK3JldHJ5OgorCWxpc3RfZm9yX2VhY2gocG9zLCAmaGFzaGVzW2hhc2hdKSB7CisJCWVudHJ5ID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCBhbm9uX21hcHBpbmcsIGxpc3QpOworCQlpZiAoYW5vbl9tYXRjaCh0cmFucywgZW50cnkpKQorCQkJZ290byBzdWNjZXNzOworCX0KKworCWlmICghdHJpZWQpIHsKKwkJY2xlYXJfYW5vbl9tYXBzKHRyYW5zKTsKKwkJZ2V0X2Fub25fbWFwcyh0cmFucyk7CisJCXRyaWVkID0gMTsKKwkJZ290byByZXRyeTsKKwl9CisKKwlyZXR1cm4gTlVMTDsKKworc3VjY2VzczoKKwkvKgorCSAqIFR5cGljYWxseSwgdGhlcmUncyBvbmUgYmlnIG1hcHBpbmcgdGhhdCBtYXRjaGVzLiBMZXQncyBnbworCSAqIGZhc3Rlci4KKwkgKi8KKwlsaXN0X2RlbCgmZW50cnktPmxpc3QpOworCWxpc3RfYWRkKCZlbnRyeS0+bGlzdCwgJmhhc2hlc1toYXNoXSk7CisKKwl2ZXJicHJpbnRmKHZtaXNjLCAiRm91bmQgcmFuZ2UgMHglbGx4LTB4JWxseCBmb3IgdGdpZCAldSwgcGMgJWxseC5cbiIsCisJICAgICAgICAgICBlbnRyeS0+c3RhcnQsIGVudHJ5LT5lbmQsICh1bnNpZ25lZCBpbnQpZW50cnktPnRnaWQsCisJCSAgIHRyYW5zLT5wYyk7CisJcmV0dXJuIGVudHJ5OworfQorCisKK3ZvaWQgYW5vbl9pbml0KHZvaWQpCit7CisJc2l6ZV90IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgSEFTSF9TSVpFOyArK2kpCisJCWxpc3RfaW5pdCgmaGFzaGVzW2ldKTsKKworCWxpc3RfaW5pdCgmbHJ1KTsKK30KZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2RhZW1vbi9vcGRfYW5vbi5oIGIvb3Byb2ZpbGUtMC45LjcvZGFlbW9uL29wZF9hbm9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Y2NmI1NQotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2RhZW1vbi9vcGRfYW5vbi5oCkBAIC0wLDAgKzEsNTQgQEAKKy8qKgorICogQGZpbGUgb3BkX2Fub24uaAorICogQW5vbnltb3VzIHJlZ2lvbiBoYW5kbGluZy4KKyAqCisgKiBAcmVtYXJrIENvcHlyaWdodCAyMDA1IE9Qcm9maWxlIGF1dGhvcnMKKyAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCisgKgorICogQGF1dGhvciBKb2huIExldm9uCisgKi8KKworI2lmbmRlZiBPUERfQU5PTl9ICisjZGVmaW5lIE9QRF9BTk9OX0gKKworI2luY2x1ZGUgIm9wX3R5cGVzLmgiCisjaW5jbHVkZSAib3BfbGlzdC5oIgorCisjaW5jbHVkZSAib3BkX2Nvb2tpZS5oIgorCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKK3N0cnVjdCB0cmFuc2llbnQ7CisKKy8qKgorICogU2hpZnQgdXNlZnVsIGJpdHMgaW50byBwbGF5IGZvciBWTUEgaGFzaGluZy4KKyAqLworI2RlZmluZSBWTUFfU0hJRlQgMTMgCisKKy8qIE1heGltdW0gc2l6ZSBvZiB0aGUgaW1hZ2UgbmFtZSBjb25zaWRlcmVkICovCisjZGVmaW5lIE1BWF9JTUFHRV9OQU1FX1NJWkUgMjAKKworc3RydWN0IGFub25fbWFwcGluZyB7CisJLyoqIHN0YXJ0IG9mIHRoZSBtYXBwaW5nICovCisJdm1hX3Qgc3RhcnQ7CisJLyoqIGVuZCBvZiB0aGUgbWFwcGluZyAqLworCXZtYV90IGVuZDsKKwkvKiogdGdpZCBvZiB0aGUgYXBwICovCisJcGlkX3QgdGdpZDsKKwkvKiogY29va2llIG9mIHRoZSBhcHAgKi8KKwljb29raWVfdCBhcHBfY29va2llOworCS8qKiBoYXNoIGxpc3QgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJLyoqIGxydSBsaXN0ICovCisJc3RydWN0IGxpc3RfaGVhZCBscnVfbGlzdDsKKwljaGFyIG5hbWVbTUFYX0lNQUdFX05BTUVfU0laRSsxXTsKK307CisKKy8qKgorICogVHJ5IHRvIGZpbmQgYW4gYW5vbnltb3VzIG1hcHBpbmcgZm9yIHRoZSBnaXZlbiBwYy90Z2lkIHBhaXIuCisgKi8KK3N0cnVjdCBhbm9uX21hcHBpbmcgKiBmaW5kX2Fub25fbWFwcGluZyhzdHJ1Y3QgdHJhbnNpZW50ICopOworCit2b2lkIGFub25faW5pdCh2b2lkKTsKKworI2VuZGlmIC8qIE9QRF9BTk9OX0ggKi8KZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2RhZW1vbi9vcGRfY29va2llLmMgYi9vcHJvZmlsZS0wLjkuNy9kYWVtb24vb3BkX2Nvb2tpZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1NzhlNDgKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9kYWVtb24vb3BkX2Nvb2tpZS5jCkBAIC0wLDAgKzEsMjA5IEBACisvKioKKyAqIEBmaWxlIG9wZF9jb29raWUuYworICogY29va2llIC0+IG5hbWUgY2FjaGUKKyAqCisgKiBAcmVtYXJrIENvcHlyaWdodCAyMDAyLCAyMDA1IE9Qcm9maWxlIGF1dGhvcnMKKyAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCisgKgorICogQGF1dGhvciBKb2huIExldm9uCisgKi8KKworI2luY2x1ZGUgIm9wZF9jb29raWUuaCIKKyNpbmNsdWRlICJvcHJvZmlsZWQuaCIKKyNpbmNsdWRlICJvcF9saXN0LmgiCisjaW5jbHVkZSAib3BfbGliaWJlcnR5LmgiCisKKyNpbmNsdWRlIDxzeXMvc3lzY2FsbC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworI2lmbmRlZiBfX05SX2xvb2t1cF9kY29va2llCisjaWYgZGVmaW5lZChfX2kzODZfXykKKyNkZWZpbmUgX19OUl9sb29rdXBfZGNvb2tpZSAyNTMKKyNlbGlmIGRlZmluZWQoX194ODZfNjRfXykKKyNkZWZpbmUgX19OUl9sb29rdXBfZGNvb2tpZSAyMTIKKyNlbGlmIGRlZmluZWQoX19wb3dlcnBjX18pCisjZGVmaW5lIF9fTlJfbG9va3VwX2Rjb29raWUgMjM1CisjZWxpZiBkZWZpbmVkKF9fYWxwaGFfXykKKyNkZWZpbmUgX19OUl9sb29rdXBfZGNvb2tpZSA0MDYKKyNlbGlmIGRlZmluZWQoX19ocHBhX18pCisjZGVmaW5lIF9fTlJfbG9va3VwX2Rjb29raWUgMjIzCisjZWxpZiBkZWZpbmVkKF9faWE2NF9fKQorI2RlZmluZSBfX05SX2xvb2t1cF9kY29va2llIDEyMzcKKyNlbGlmIGRlZmluZWQoX19zcGFyY19fKQorLyogdW50ZXN0ZWQgKi8KKyNkZWZpbmUgX19OUl9sb29rdXBfZGNvb2tpZSAyMDgKKyNlbGlmIGRlZmluZWQoX19zMzkwX18pIHx8IGRlZmluZWQgKF9fczM5MHhfXykKKyNkZWZpbmUgX19OUl9sb29rdXBfZGNvb2tpZSAxMTAKKyNlbGlmIGRlZmluZWQoX19hcm1fXykKKyNkZWZpbmUgX19OUl9sb29rdXBfZGNvb2tpZSAoX19OUl9TWVNDQUxMX0JBU0UrMjQ5KQorI2VsaWYgZGVmaW5lZChfX21pcHNfXykKKyNpbmNsdWRlIDxzZ2lkZWZzLmg+CisvKiBPMzIgKi8KKyNpZiBfTUlQU19TSU0gPT0gX01JUFNfU0lNX0FCSTMyCisjZGVmaW5lIF9fTlJfbG9va3VwX2Rjb29raWUgNDI0NworLyogTjY0ICovCisjZWxpZiBfTUlQU19TSU0gPT0gX01JUFNfU0lNX0FCSTY0CisjZGVmaW5lIF9fTlJfbG9va3VwX2Rjb29raWUgNTIwNgorLyogTjMyICovCisjZWxpZiBfTUlQU19TSU0gPT0gX01JUFNfU0lNX05BQkkzMgorI2RlZmluZSBfX05SX2xvb2t1cF9kY29va2llIDYyMDYKKyNlbHNlCisjZXJyb3IgVW5rbm93biBNSVBTIEFCSTogRHVubm8gX19OUl9sb29rdXBfZGNvb2tpZQorI2VuZGlmCisjZWxzZQorI2Vycm9yIFBsZWFzZSBkZWZpbmUgX19OUl9sb29rdXBfZGNvb2tpZSBmb3IgeW91ciBhcmNoaXRlY3R1cmUKKyNlbmRpZgorI2VuZGlmIC8qIF9fTlJfbG9va3VwX2Rjb29raWUgKi8KKworI2lmIChkZWZpbmVkKF9fcG93ZXJwY19fKSAmJiAhZGVmaW5lZChfX3Bvd2VycGM2NF9fKSkgfHwgZGVmaW5lZChfX2hwcGFfXylcCisJfHwgKGRlZmluZWQoX19zMzkwX18pICYmICFkZWZpbmVkKF9fczM5MHhfXykpIFwKKwl8fCAoZGVmaW5lZChfX21pcHNfXykgJiYgKF9NSVBTX1NJTSA9PSBfTUlQU19TSU1fQUJJMzIpIFwKKwkgICAgJiYgZGVmaW5lZChfX01JUFNFQl9fKSkgXAorICAgICAgICB8fCAoZGVmaW5lZChfX2FybV9fKSAmJiBkZWZpbmVkKF9fQVJNX0VBQklfXykgXAorICAgICAgICAgICAgJiYgZGVmaW5lZChfX0FSTUVCX18pKQorc3RhdGljIGlubGluZSBpbnQgbG9va3VwX2Rjb29raWUoY29va2llX3QgY29va2llLCBjaGFyICogYnVmLCBzaXplX3Qgc2l6ZSkKK3sKKwlyZXR1cm4gc3lzY2FsbChfX05SX2xvb2t1cF9kY29va2llLCAodW5zaWduZWQgbG9uZykoY29va2llID4+IDMyKSwKKwkJICAgICAgICh1bnNpZ25lZCBsb25nKShjb29raWUgJiAweGZmZmZmZmZmKSwgYnVmLCBzaXplKTsKK30KKyNlbGlmIChkZWZpbmVkKF9fbWlwc19fKSAmJiAoX01JUFNfU0lNID09IF9NSVBTX1NJTV9BQkkzMikpIFwKKwl8fCAoZGVmaW5lZChfX2FybV9fKSAmJiBkZWZpbmVkKF9fQVJNX0VBQklfXykpCitzdGF0aWMgaW5saW5lIGludCBsb29rdXBfZGNvb2tpZShjb29raWVfdCBjb29raWUsIGNoYXIgKiBidWYsIHNpemVfdCBzaXplKQoreworCXJldHVybiBzeXNjYWxsKF9fTlJfbG9va3VwX2Rjb29raWUsCisJCSAgICAgICAodW5zaWduZWQgbG9uZykoY29va2llICYgMHhmZmZmZmZmZiksCisJCSAgICAgICAodW5zaWduZWQgbG9uZykoY29va2llID4+IDMyKSwgYnVmLCBzaXplKTsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCBsb29rdXBfZGNvb2tpZShjb29raWVfdCBjb29raWUsIGNoYXIgKiBidWYsIHNpemVfdCBzaXplKQoreworCXJldHVybiBzeXNjYWxsKF9fTlJfbG9va3VwX2Rjb29raWUsIGNvb2tpZSwgYnVmLCBzaXplKTsKK30KKyNlbmRpZgorCisKK3N0cnVjdCBjb29raWVfZW50cnkgeworCWNvb2tpZV90IHZhbHVlOworCWNoYXIgKiBuYW1lOworCWludCBpZ25vcmVkOworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKK307CisKKworI2RlZmluZSBIQVNIX1NJWkUgNTEyCisjZGVmaW5lIEhBU0hfQklUUyAoSEFTSF9TSVpFIC0gMSkKKworc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQgaGFzaGVzW0hBU0hfU0laRV07CisKK3N0YXRpYyBzdHJ1Y3QgY29va2llX2VudHJ5ICogY3JlYXRlX2Nvb2tpZShjb29raWVfdCBjb29raWUpCit7CisJaW50IGVycjsKKwlzdHJ1Y3QgY29va2llX2VudHJ5ICogZW50cnkgPSB4bWFsbG9jKHNpemVvZihzdHJ1Y3QgY29va2llX2VudHJ5KSk7CisKKwllbnRyeS0+dmFsdWUgPSBjb29raWU7CisJZW50cnktPm5hbWUgPSB4bWFsbG9jKFBBVEhfTUFYICsgMSk7CisKKwllcnIgPSBsb29rdXBfZGNvb2tpZShjb29raWUsIGVudHJ5LT5uYW1lLCBQQVRIX01BWCk7CisKKwlpZiAoZXJyIDwgMCkgeworCQlmcHJpbnRmKHN0ZGVyciwgIkxvb2t1cCBvZiBjb29raWUgJWxseCBmYWlsZWQsIGVycm5vPSVkXG4iLAorCQkgICAgICAgY29va2llLCBlcnJubyk7IAorCQlmcmVlKGVudHJ5LT5uYW1lKTsKKwkJZW50cnktPm5hbWUgPSBOVUxMOworCQllbnRyeS0+aWdub3JlZCA9IDA7CisJfSBlbHNlIHsKKwkJZW50cnktPmlnbm9yZWQgPSBpc19pbWFnZV9pZ25vcmVkKGVudHJ5LT5uYW1lKTsKKwl9CisKKwlyZXR1cm4gZW50cnk7Cit9CisKKworLyogQ29va2llIG1vbnN0ZXIgd2FudCBjb29raWUhICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBoYXNoX2Nvb2tpZShjb29raWVfdCBjb29raWUpCit7CisJcmV0dXJuIChjb29raWUgPj4gRENPT0tJRV9TSElGVCkgJiAoSEFTSF9TSVpFIC0gMSk7Cit9CisgCisKK2NoYXIgY29uc3QgKiBmaW5kX2Nvb2tpZShjb29raWVfdCBjb29raWUpCit7CisJdW5zaWduZWQgbG9uZyBoYXNoID0gaGFzaF9jb29raWUoY29va2llKTsKKwlzdHJ1Y3QgbGlzdF9oZWFkICogcG9zOworCXN0cnVjdCBjb29raWVfZW50cnkgKiBlbnRyeTsKKworCWlmIChjb29raWUgPT0gSU5WQUxJRF9DT09LSUUgfHwgY29va2llID09IE5PX0NPT0tJRSkKKwkJcmV0dXJuIE5VTEw7CisKKwlsaXN0X2Zvcl9lYWNoKHBvcywgJmhhc2hlc1toYXNoXSkgeworCQllbnRyeSA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3QgY29va2llX2VudHJ5LCBsaXN0KTsKKwkJaWYgKGVudHJ5LT52YWx1ZSA9PSBjb29raWUpCisJCQlnb3RvIG91dDsKKwl9CisKKwkvKiBub3Qgc3VyZSB0aGlzIGNhbiBldmVyIGhhcHBlbiBkdWUgdG8gaXNfY29va2llX2lnbm9yZWQgKi8KKwllbnRyeSA9IGNyZWF0ZV9jb29raWUoY29va2llKTsKKwlsaXN0X2FkZCgmZW50cnktPmxpc3QsICZoYXNoZXNbaGFzaF0pOworb3V0OgorCXJldHVybiBlbnRyeS0+bmFtZTsKK30KKworCitpbnQgaXNfY29va2llX2lnbm9yZWQoY29va2llX3QgY29va2llKQoreworCXVuc2lnbmVkIGxvbmcgaGFzaCA9IGhhc2hfY29va2llKGNvb2tpZSk7CisJc3RydWN0IGxpc3RfaGVhZCAqIHBvczsKKwlzdHJ1Y3QgY29va2llX2VudHJ5ICogZW50cnk7CisKKwlpZiAoY29va2llID09IElOVkFMSURfQ09PS0lFIHx8IGNvb2tpZSA9PSBOT19DT09LSUUpCisJCXJldHVybiAxOworCisJbGlzdF9mb3JfZWFjaChwb3MsICZoYXNoZXNbaGFzaF0pIHsKKwkJZW50cnkgPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IGNvb2tpZV9lbnRyeSwgbGlzdCk7CisJCWlmIChlbnRyeS0+dmFsdWUgPT0gY29va2llKQorCQkJZ290byBvdXQ7CisJfQorCisJZW50cnkgPSBjcmVhdGVfY29va2llKGNvb2tpZSk7CisJbGlzdF9hZGQoJmVudHJ5LT5saXN0LCAmaGFzaGVzW2hhc2hdKTsKK291dDoKKwlyZXR1cm4gZW50cnktPmlnbm9yZWQ7Cit9CisKKworY2hhciBjb25zdCAqIHZlcmJvc2VfY29va2llKGNvb2tpZV90IGNvb2tpZSkKK3sKKwl1bnNpZ25lZCBsb25nIGhhc2ggPSBoYXNoX2Nvb2tpZShjb29raWUpOworCXN0cnVjdCBsaXN0X2hlYWQgKiBwb3M7CisJc3RydWN0IGNvb2tpZV9lbnRyeSAqIGVudHJ5OworCisJaWYgKGNvb2tpZSA9PSBJTlZBTElEX0NPT0tJRSkKKwkJcmV0dXJuICJpbnZhbGlkIjsKKworCWlmIChjb29raWUgPT0gTk9fQ09PS0lFKQorCQlyZXR1cm4gImFub255bW91cyI7CisKKwlsaXN0X2Zvcl9lYWNoKHBvcywgJmhhc2hlc1toYXNoXSkgeworCQllbnRyeSA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3QgY29va2llX2VudHJ5LCBsaXN0KTsKKwkJaWYgKGVudHJ5LT52YWx1ZSA9PSBjb29raWUpIHsKKwkJCWlmICghZW50cnktPm5hbWUpCisJCQkJcmV0dXJuICJmYWlsZWQgbG9va3VwIjsKKwkJCXJldHVybiBlbnRyeS0+bmFtZTsKKwkJfQorCX0KKworCXJldHVybiAibm90IGhhc2hlZCI7Cit9CisKKwordm9pZCBjb29raWVfaW5pdCh2b2lkKQoreworCXNpemVfdCBpOworCisJZm9yIChpID0gMDsgaSA8IEhBU0hfU0laRTsgKytpKQorCQlsaXN0X2luaXQoJmhhc2hlc1tpXSk7Cit9CmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9kYWVtb24vb3BkX2Nvb2tpZS5oIGIvb3Byb2ZpbGUtMC45LjcvZGFlbW9uL29wZF9jb29raWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOWYxM2IxCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvZGFlbW9uL29wZF9jb29raWUuaApAQCAtMCwwICsxLDM5IEBACisvKioKKyAqIEBmaWxlIG9wZF9jb29raWUuaAorICogY29va2llIC0+IG5hbWUgY2FjaGUKKyAqCisgKiBAcmVtYXJrIENvcHlyaWdodCAyMDAyLCAyMDA1IE9Qcm9maWxlIGF1dGhvcnMKKyAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCisgKgorICogQGF1dGhvciBKb2huIExldm9uCisgKi8KKworI2lmbmRlZiBPUERfQ09PS0lFX0gKKyNkZWZpbmUgT1BEX0NPT0tJRV9ICisKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGNvb2tpZV90OworCisjZGVmaW5lIElOVkFMSURfQ09PS0lFIH4wTExVCisjZGVmaW5lIE5PX0NPT0tJRSAwTExVCisKKy8qKgorICogU2hpZnQgdmFsdWUgdG8gcmVtb3ZlIHRyYWlsaW5nIHplcm8gb24gYSBkY29va2llIHZhbHVlLCA3IGlzIHN1ZmZpY2llbnQKKyAqIGZvciBtb3N0IGFyY2hpdGVjdHVyZQorICovCisjZGVmaW5lIERDT09LSUVfU0hJRlQgNworCisvKioKKyAqIFJldHVybiB0aGUgbmFtZSBvZiB0aGUgZ2l2ZW4gZGNvb2tpZS4gTWF5IHJldHVybgorICogTlVMTCBvbiBmYWlsdXJlLgorICovCitjaGFyIGNvbnN0ICogZmluZF9jb29raWUoY29va2llX3QgY29va2llKTsKKworLyoqIHJldHVybiB0cnVlIGlmIHRoaXMgY29va2llIHNob3VsZCBiZSBpZ25vcmVkICovCitpbnQgaXNfY29va2llX2lnbm9yZWQoY29va2llX3QgY29va2llKTsKKworLyoqIGdpdmUgYSB0ZXh0dWFsIGRlc2NyaXB0aW9uIG9mIHRoZSBjb29raWUgKi8KK2NoYXIgY29uc3QgKiB2ZXJib3NlX2Nvb2tpZShjb29raWVfdCBjb29raWUpOworCit2b2lkIGNvb2tpZV9pbml0KHZvaWQpOworCisjZW5kaWYgLyogT1BEX0NPT0tJRV9IICovCmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9kYWVtb24vb3BkX2V2ZW50cy5jIGIvb3Byb2ZpbGUtMC45LjcvZGFlbW9uL29wZF9ldmVudHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTQ0ZmIzCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvZGFlbW9uL29wZF9ldmVudHMuYwpAQCAtMCwwICsxLDE3MiBAQAorLyoqCisgKiBAZmlsZSBkYWVtb24vb3BkX2V2ZW50cy5jCisgKiBFdmVudCBkZXRhaWxzIGZvciBlYWNoIGNvdW50ZXIKKyAqCisgKiBAcmVtYXJrIENvcHlyaWdodCAyMDAyLCAyMDAzIE9Qcm9maWxlIGF1dGhvcnMKKyAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCisgKgorICogQGF1dGhvciBKb2huIExldm9uCisgKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisgCisjaW5jbHVkZSAib3BkX2V2ZW50cy5oIgorI2luY2x1ZGUgIm9wZF9wcmludGYuaCIKKyNpbmNsdWRlICJvcGRfZXh0ZW5kZWQuaCIKKyNpbmNsdWRlICJvcHJvZmlsZWQuaCIKKworI2luY2x1ZGUgIm9wX3N0cmluZy5oIgorI2luY2x1ZGUgIm9wX2NvbmZpZy5oIgorI2luY2x1ZGUgIm9wX2NwdWZyZXEuaCIKKyNpbmNsdWRlICJvcF9jcHVfdHlwZS5oIgorI2luY2x1ZGUgIm9wX2xpYmliZXJ0eS5oIgorI2luY2x1ZGUgIm9wX2h3X2NvbmZpZy5oIgorI2luY2x1ZGUgIm9wX3NhbXBsZV9maWxlLmgiCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorCitleHRlcm4gb3BfY3B1IGNwdV90eXBlOworCitzdHJ1Y3Qgb3BkX2V2ZW50IG9wZF9ldmVudHNbT1BfTUFYX0NPVU5URVJTXTsKKworc3RhdGljIGRvdWJsZSBjcHVfc3BlZWQ7CisKK3N0YXRpYyB2b2lkIG1hbGZvcm1lZF9ldmVudHModm9pZCkKK3sKKwlmcHJpbnRmKHN0ZGVyciwgIm9wcm9maWxlZDogbWFsZm9ybWVkIGV2ZW50cyBwYXNzZWQgIgorCQkib24gdGhlIGNvbW1hbmQgbGluZVxuIik7CisJZXhpdChFWElUX0ZBSUxVUkUpOworfQorCisKK3N0YXRpYyBjaGFyICogY29weV90b2tlbihjaGFyICoqIGMsIGNoYXIgZGVsaW0pCit7CisJY2hhciAqIHRtcCA9ICpjOworCWNoYXIgKiB0bXAyID0gKmM7CisJY2hhciAqIHN0cjsKKworCWlmICghKipjKQorCQlyZXR1cm4gTlVMTDsKKworCXdoaWxlICgqdG1wMiAmJiAqdG1wMiAhPSBkZWxpbSkKKwkJKyt0bXAyOworCisJaWYgKHRtcDIgPT0gdG1wKQorCQlyZXR1cm4gTlVMTDsKKworCXN0ciA9IG9wX3hzdHJuZHVwKHRtcCwgdG1wMiAtIHRtcCk7CisJKmMgPSB0bXAyOworCWlmICgqKmMpCisJCSsrKmM7CisJcmV0dXJuIHN0cjsKK30KKworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBjb3B5X3Vsb25nKGNoYXIgKiogYywgY2hhciBkZWxpbSkKK3sKKwl1bnNpZ25lZCBsb25nIHZhbCA9IDA7CisJY2hhciAqIHN0ciA9IGNvcHlfdG9rZW4oYywgZGVsaW0pOworCWlmICghc3RyKQorCQltYWxmb3JtZWRfZXZlbnRzKCk7CisJdmFsID0gc3RydG91bChzdHIsIE5VTEwsIDApOworCWZyZWUoc3RyKTsKKwlyZXR1cm4gdmFsOworfQorCisKK3ZvaWQgb3BkX3BhcnNlX2V2ZW50cyhjaGFyIGNvbnN0ICogZXZlbnRzKQoreworCWNoYXIgKiBldiA9IHhzdHJkdXAoZXZlbnRzKTsKKwljaGFyICogYzsKKwlzaXplX3QgY3VyID0gMDsKKworCWlmIChjcHVfdHlwZSA9PSBDUFVfVElNRVJfSU5UKSB7CisJCXN0cnVjdCBvcGRfZXZlbnQgKiBldmVudCA9ICZvcGRfZXZlbnRzWzBdOworCQlldmVudC0+bmFtZSA9IHhzdHJkdXAoIlRJTUVSIik7CisJCWV2ZW50LT52YWx1ZSA9IGV2ZW50LT5jb3VudGVyCisJCQk9IGV2ZW50LT5jb3VudCA9IGV2ZW50LT51bSA9IDA7CisJCWV2ZW50LT5rZXJuZWwgPSAxOworCQlldmVudC0+dXNlciA9IDE7CisJCXJldHVybjsKKwl9CisKKwlpZiAoIWV2IHx8ICFzdHJsZW4oZXYpKSB7CisJCWZwcmludGYoc3RkZXJyLCAib3Byb2ZpbGVkOiBubyBldmVudHMgcGFzc2VkLlxuIik7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisKKwl2ZXJicHJpbnRmKHZtaXNjLCAiRXZlbnRzOiAlc1xuIiwgZXYpOworCisJYyA9IGV2OworCisJd2hpbGUgKCpjICYmIGN1ciA8IG9wX25yX2NvdW50ZXJzKSB7CisJCXN0cnVjdCBvcGRfZXZlbnQgKiBldmVudCA9ICZvcGRfZXZlbnRzW2N1cl07CisKKwkJaWYgKCEoZXZlbnQtPm5hbWUgPSBjb3B5X3Rva2VuKCZjLCAnOicpKSkKKwkJCW1hbGZvcm1lZF9ldmVudHMoKTsKKwkJZXZlbnQtPnZhbHVlID0gY29weV91bG9uZygmYywgJzonKTsKKwkJZXZlbnQtPmNvdW50ZXIgPSBjb3B5X3Vsb25nKCZjLCAnOicpOworCQlldmVudC0+Y291bnQgPSBjb3B5X3Vsb25nKCZjLCAnOicpOworCQlldmVudC0+dW0gPSBjb3B5X3Vsb25nKCZjLCAnOicpOworCQlldmVudC0+a2VybmVsID0gY29weV91bG9uZygmYywgJzonKTsKKwkJZXZlbnQtPnVzZXIgPSBjb3B5X3Vsb25nKCZjLCAnLCcpOworCQkrK2N1cjsKKwl9CisKKwlpZiAoKmMpIHsKKwkJZnByaW50ZihzdGRlcnIsICJvcHJvZmlsZWQ6IHRvbyBtYW55IGV2ZW50cyBwYXNzZWQuXG4iKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKworCWZyZWUoZXYpOworCisJY3B1X3NwZWVkID0gb3BfY3B1X2ZyZXF1ZW5jeSgpOworfQorCisKK3N0cnVjdCBvcGRfZXZlbnQgKiBmaW5kX2NvdW50ZXJfZXZlbnQodW5zaWduZWQgbG9uZyBjb3VudGVyKQoreworCXNpemVfdCBpOworCXN0cnVjdCBvcGRfZXZlbnQgKiByZXQgPSBOVUxMOworCisJaWYgKGNvdW50ZXIgPj0gT1BfTUFYX0NPVU5URVJTKSB7CisJCWlmKChyZXQgPSBvcGRfZXh0X2ZpbmRfY291bnRlcl9ldmVudChjb3VudGVyKSkgIT0gTlVMTCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJZm9yIChpID0gMDsgaSA8IG9wX25yX2NvdW50ZXJzICYmIG9wZF9ldmVudHNbaV0ubmFtZTsgKytpKSB7CisJCWlmIChjb3VudGVyID09IG9wZF9ldmVudHNbaV0uY291bnRlcikKKwkJCXJldHVybiAmb3BkX2V2ZW50c1tpXTsKKwl9CisKKwlmcHJpbnRmKHN0ZGVyciwgIlVua25vd24gZXZlbnQgZm9yIGNvdW50ZXIgJWx1XG4iLCBjb3VudGVyKTsKKwlhYm9ydCgpOworCXJldHVybiBOVUxMOworfQorCisKK3ZvaWQgZmlsbF9oZWFkZXIoc3RydWN0IG9wZF9oZWFkZXIgKiBoZWFkZXIsIHVuc2lnbmVkIGxvbmcgY291bnRlciwKKwkJIHZtYV90IGFub25fc3RhcnQsIHZtYV90IGNnX3RvX2Fub25fc3RhcnQsCisJCSBpbnQgaXNfa2VybmVsLCBpbnQgY2dfdG9faXNfa2VybmVsLAorCQkgaW50IHNwdV9zYW1wbGVzLCB1aW50NjRfdCBlbWJlZF9vZmZzZXQsIHRpbWVfdCBtdGltZSkKK3sKKwlzdHJ1Y3Qgb3BkX2V2ZW50ICogZXZlbnQgPSBmaW5kX2NvdW50ZXJfZXZlbnQoY291bnRlcik7CisKKwltZW1zZXQoaGVhZGVyLCAnXDAnLCBzaXplb2Yoc3RydWN0IG9wZF9oZWFkZXIpKTsKKwloZWFkZXItPnZlcnNpb24gPSBPUERfVkVSU0lPTjsKKwltZW1jcHkoaGVhZGVyLT5tYWdpYywgT1BEX01BR0lDLCBzaXplb2YoaGVhZGVyLT5tYWdpYykpOworCWhlYWRlci0+Y3B1X3R5cGUgPSBjcHVfdHlwZTsKKwloZWFkZXItPmN0cl9ldmVudCA9IGV2ZW50LT52YWx1ZTsKKwloZWFkZXItPmN0cl9jb3VudCA9IGV2ZW50LT5jb3VudDsKKwloZWFkZXItPmN0cl91bSA9IGV2ZW50LT51bTsKKwloZWFkZXItPmlzX2tlcm5lbCA9IGlzX2tlcm5lbDsKKwloZWFkZXItPmNnX3RvX2lzX2tlcm5lbCA9IGNnX3RvX2lzX2tlcm5lbDsKKwloZWFkZXItPmNwdV9zcGVlZCA9IGNwdV9zcGVlZDsKKwloZWFkZXItPm10aW1lID0gbXRpbWU7CisJaGVhZGVyLT5hbm9uX3N0YXJ0ID0gYW5vbl9zdGFydDsKKwloZWFkZXItPnNwdV9wcm9maWxlID0gc3B1X3NhbXBsZXM7CisJaGVhZGVyLT5lbWJlZGRlZF9vZmZzZXQgPSBlbWJlZF9vZmZzZXQ7CisJaGVhZGVyLT5jZ190b19hbm9uX3N0YXJ0ID0gY2dfdG9fYW5vbl9zdGFydDsKK30KZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2RhZW1vbi9vcGRfZXZlbnRzLmggYi9vcHJvZmlsZS0wLjkuNy9kYWVtb24vb3BkX2V2ZW50cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlOGI4MDEKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9kYWVtb24vb3BkX2V2ZW50cy5oCkBAIC0wLDAgKzEsNDcgQEAKKy8qKgorICogQGZpbGUgZGFlbW9uL29wZF9ldmVudHMuaAorICogRXZlbnQgZGV0YWlscyBmb3IgZWFjaCBjb3VudGVyCisgKgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMiwgMjAwMyBPUHJvZmlsZSBhdXRob3JzCisgKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORworICoKKyAqIEBhdXRob3IgSm9obiBMZXZvbgorICogQGF1dGhvciBQaGlsaXBwZSBFbGllCisgKi8KKworI2lmbmRlZiBPUERfRVZFTlRTX0gKKworI2luY2x1ZGUgIm9wX3R5cGVzLmgiCisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisKKy8qKiBldmVudCBkZXNjcmlwdGlvbiBmb3Igc2V0dXAgKHBlcmZtb24pIGFuZCBtYW5nbGluZyAqLworc3RydWN0IG9wZF9ldmVudCB7CisJY2hhciAqIG5hbWU7CisJdW5zaWduZWQgbG9uZyB2YWx1ZTsKKwl1bnNpZ25lZCBsb25nIGNvdW50ZXI7CisJdW5zaWduZWQgbG9uZyBjb3VudDsKKwl1bnNpZ25lZCBsb25nIHVtOworCXVuc2lnbmVkIGxvbmcga2VybmVsOworCXVuc2lnbmVkIGxvbmcgdXNlcjsKK307CisKKy8qIG5lZWRlZCBmb3Igb3BkX3BlcmZtb24uYyAqLworZXh0ZXJuIHN0cnVjdCBvcGRfZXZlbnQgb3BkX2V2ZW50c1tdOworCisvKiogcGFyc2UgdGhlIGV2ZW50cyBpbnRvIHRoZSBvcGRfZXZlbnRzIGFycmF5ICovCit2b2lkIG9wZF9wYXJzZV9ldmVudHMoY2hhciBjb25zdCAqIGV2ZW50cyk7CisKKy8qKiBGaW5kIHRoZSBldmVudCBmb3IgdGhlIGdpdmVuIGNvdW50ZXIgKi8KK3N0cnVjdCBvcGRfZXZlbnQgKiBmaW5kX2NvdW50ZXJfZXZlbnQodW5zaWduZWQgbG9uZyBjb3VudGVyKTsKKworc3RydWN0IG9wZF9oZWFkZXI7CisKKy8qKiBmaWxsIHRoZSBzYW1wbGUgZmlsZSBoZWFkZXIgd2l0aCBldmVudCBpbmZvIGV0Yy4gKi8KK3ZvaWQgZmlsbF9oZWFkZXIoc3RydWN0IG9wZF9oZWFkZXIgKiBoZWFkZXIsIHVuc2lnbmVkIGxvbmcgY291bnRlciwKKwkJIHZtYV90IGFub25fc3RhcnQsIHZtYV90IGFub25fZW5kLAorCQkgaW50IGlzX2tlcm5lbCwgaW50IGNnX3RvX2lzX2tlcm5lbCwKKyAgICAgICAgICAgICAgICAgaW50IHNwdV9zYW1wbGVzLCB1aW50NjRfdCBlbWJlZF9vZmZzZXQsIHRpbWVfdCBtdGltZSk7CisKKyNlbmRpZiAvKiBPUERfRVZFTlRTX0ggKi8KZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2RhZW1vbi9vcGRfZXh0ZW5kZWQuYyBiL29wcm9maWxlLTAuOS43L2RhZW1vbi9vcGRfZXh0ZW5kZWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNGM4ODcyCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvZGFlbW9uL29wZF9leHRlbmRlZC5jCkBAIC0wLDAgKzEsMTk1IEBACisvKioKKyAqIEBmaWxlIG9wZF9leHRlbmRlZC5jCisgKiBPUHJvZmlsZSBFeHRlbmRlZCBGZWF0dXJlCisgKgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwNy0yMDA5IE9Qcm9maWxlIGF1dGhvcnMKKyAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCisgKgorICogQGF1dGhvciBTdXJhdmVlIFN1dGhpa3VscGFuaXQgPHN1cmF2ZWUuc3V0aGlrdWxwYW5pdEBhbWQuY29tPgorICogQ29weXJpZ2h0IChjKSAyMDA5IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4KKyAqLworCisjaW5jbHVkZSAib3BkX2V4dGVuZGVkLmgiCisjaW5jbHVkZSAib3Bfc3RyaW5nLmgiCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorCisvKiBUaGlzIGdsb2JhbCB2YXJpYWJsZSBpcyA+PSAwCisgKiBpZiBleHRlbmRlZCBmZWF0dXJlIGlzIGVuYWJsZWQgKi8KK3N0YXRpYyBpbnQgb3BkX2V4dF9mZWF0X2luZGV4OworCitleHRlcm4gc3RydWN0IG9wZF9leHRfaGFuZGxlcnMgaWJzX2hhbmRsZXJzOworCisvKioKKyAqIE9Qcm9maWxlIEV4dGVuZGVkIEZlYXR1cmUgVGFibGUKKyAqCisgKiBUaGlzIHRhYmxlIGNvbnRhaW5zIGEgbGlzdCBvZiBleHRlbmRlZCBmZWF0dXJlcy4KKyAqLworc3RhdGljIHN0cnVjdCBvcGRfZXh0X2ZlYXR1cmUgZXh0X2ZlYXR1cmVfdGFibGVbXSA9IHsKKwl7ImlicyIsICZpYnNfaGFuZGxlcnMgfSwKKwl7IE5VTEwsIE5VTEwgfQorfTsKKworCitzdGF0aWMgaW50IGdldF9pbmRleF9mb3JfZmVhdHVyZShjaGFyIGNvbnN0ICogbmFtZSkKK3sKKwlpbnQgcmV0ID0gLTE7CisJdW5zaWduZWQgaW50IGk7CisKKwlpZighbmFtZSkKKwkJcmV0dXJuIHJldDsKKworCWZvciAoaSA9IDAgOyBleHRfZmVhdHVyZV90YWJsZVtpXS5mZWF0dXJlICE9IE5VTEwgOyBpKysgKSB7CisJCWlmKCFzdHJuY21wKG5hbWUsIGV4dF9mZWF0dXJlX3RhYmxlW2ldLmZlYXR1cmUsCisJCQlzdHJsZW4oZXh0X2ZlYXR1cmVfdGFibGVbaV0uZmVhdHVyZSkpKSB7CisJCQlyZXQgPSBpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisKK3N0YXRpYyBpbmxpbmUgaW50IGlzX2V4dF9lbmFibGVkKCkKK3sKKwlpZiAob3BkX2V4dF9mZWF0X2luZGV4ID49IDAKKwkmJiBleHRfZmVhdHVyZV90YWJsZVtvcGRfZXh0X2ZlYXRfaW5kZXhdLmhhbmRsZXJzICE9IE5VTEwpCisJCXJldHVybiAxOworCWVsc2UKKwkJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGlubGluZSBpbnQgaXNfZXh0X3NmaWxlX2VuYWJsZWQoKQoreworCWlmIChvcGRfZXh0X2ZlYXRfaW5kZXggPj0gMAorCSYmIGV4dF9mZWF0dXJlX3RhYmxlW29wZF9leHRfZmVhdF9pbmRleF0uaGFuZGxlcnMgIT0gTlVMTAorCSYmIGV4dF9mZWF0dXJlX3RhYmxlW29wZF9leHRfZmVhdF9pbmRleF0uaGFuZGxlcnMtPmV4dF9zZmlsZSAhPSBOVUxMKQorCQlyZXR1cm4gMTsKKwllbHNlCisJCXJldHVybiAwOworfQorCisKKy8qKgorICogUGFyYW0gInZhbHVlIiBpcyB0aGUgaW5wdXQgZnJvbSBDTUwgb3B0aW9uIHdpdGggdGhlIGZvcm1hdDoKKyAqCisgKiA8ZmVhdHVyZSBuYW1lPjo8cGFyYW0xPjo8cGFyYW0yPjo8cGFyYW0zPjouLi4uLgorICoKKyAqIHdoZXJlIHBhcmFtMSwyLjMsLi5uIGFyZSBvcHRpb25hbC4KKyAqLworaW50IG9wZF9leHRfaW5pdGlhbGl6ZShjaGFyIGNvbnN0ICogdmFsdWUpCit7CisJaW50IHJldCA9IEVYSVRfRkFJTFVSRTsKKwljaGFyICogdG1wID0gTlVMTCwgKiBuYW1lID0gTlVMTCwgKiBhcmdzID0gTlVMTDsKKworCWlmKCF2YWx1ZSkgeworCQlvcGRfZXh0X2ZlYXRfaW5kZXggPSAtMTsKKwkJcmV0dXJuIDA7CisJfQorCisJdG1wID0gb3BfeHN0cm5kdXAodmFsdWUsIHN0cmxlbih2YWx1ZSkpOworCisJLyogUGFyc2UgZmVhdHVyZSBuYW1lKi8KKwlpZigobmFtZSA9IHN0cnRva19yKHRtcCwgIjoiLCAmYXJncykpID09IE5VTEwpCisJCWdvdG8gZXJyX291dDsKKworCWlmKChvcGRfZXh0X2ZlYXRfaW5kZXggPSBnZXRfaW5kZXhfZm9yX2ZlYXR1cmUobmFtZSkpIDwgMCkKKwkJZ290byBlcnJfb3V0OworCisJcmV0ID0gZXh0X2ZlYXR1cmVfdGFibGVbb3BkX2V4dF9mZWF0X2luZGV4XS5oYW5kbGVycy0+ZXh0X2luaXQoYXJncyk7CisKKwlyZXR1cm4gcmV0OworCitlcnJfb3V0OgorCWZwcmludGYoc3RkZXJyLCJvcGRfZXh0X2luaXRpYWxpemU6IEludmFsaWQgZXh0ZW5kZWQgZmVhdHVyZSBvcHRpb246ICVzXG4iLCB2YWx1ZSk7CisJcmV0dXJuIHJldDsKK30KKworCitpbnQgb3BkX2V4dF9kZWluaXRpYWxpemUoKQoreworCWludCByZXQgPSBFWElUX0ZBSUxVUkU7CisKKwlpZihvcGRfZXh0X2ZlYXRfaW5kZXggPT0gLTEpIHsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0ID0gZXh0X2ZlYXR1cmVfdGFibGVbb3BkX2V4dF9mZWF0X2luZGV4XS5oYW5kbGVycy0+ZXh0X2RlaW5pdCgpOworCisJcmV0dXJuIHJldDsKK30KKworCit2b2lkIG9wZF9leHRfcHJpbnRfc3RhdHMoKQoreworCWlmIChpc19leHRfZW5hYmxlZCgpCisJJiYgZXh0X2ZlYXR1cmVfdGFibGVbb3BkX2V4dF9mZWF0X2luZGV4XS5oYW5kbGVycy0+ZXh0X3ByaW50X3N0YXRzICE9IE5VTEwpIHsKKwkJcHJpbnRmKCJcbi0tIE9Qcm9maWxlIEV4dGVuZGVkLUZlYXR1cmUgU3RhdGlzdGljcyAtLVxuIik7CisJCWV4dF9mZWF0dXJlX3RhYmxlW29wZF9leHRfZmVhdF9pbmRleF0uaGFuZGxlcnMtPmV4dF9wcmludF9zdGF0cygpOworCX0KK30KKworCisvKioKKyAqIG9wZF9zZmlsZSBleHRlbmRlZCBBUElzCisgKi8KK3ZvaWQgb3BkX2V4dF9zZmlsZV9jcmVhdGUoc3RydWN0IHNmaWxlICogc2YpCit7CisJLyogQ3JlYXRpbmcgZXh0IHNmaWxlIG9ubHkgaWYgZXh0ZW5kZWQgZmVhdHVyZSBpcyBlbmFibGUqLworCWlmIChpc19leHRfc2ZpbGVfZW5hYmxlZCgpCisJJiYgZXh0X2ZlYXR1cmVfdGFibGVbb3BkX2V4dF9mZWF0X2luZGV4XS5oYW5kbGVycy0+ZXh0X3NmaWxlLT5jcmVhdGUgIT0gTlVMTCkKKwkJZXh0X2ZlYXR1cmVfdGFibGVbb3BkX2V4dF9mZWF0X2luZGV4XS5oYW5kbGVycy0+ZXh0X3NmaWxlLT5jcmVhdGUoc2YpOworfQorCisKK3ZvaWQgb3BkX2V4dF9zZmlsZV9kdXAgKHN0cnVjdCBzZmlsZSAqIHRvLCBzdHJ1Y3Qgc2ZpbGUgKiBmcm9tKQoreworCS8qIER1cGxpY2F0ZSBleHQgc2ZpbGUgb25seSBpZiBleHRlbmRlZCBmZWF0dXJlIGlzIGVuYWJsZSovCisJaWYgKGlzX2V4dF9zZmlsZV9lbmFibGVkKCkKKwkmJiBleHRfZmVhdHVyZV90YWJsZVtvcGRfZXh0X2ZlYXRfaW5kZXhdLmhhbmRsZXJzLT5leHRfc2ZpbGUtPmR1cCAhPSBOVUxMKQorCQlleHRfZmVhdHVyZV90YWJsZVtvcGRfZXh0X2ZlYXRfaW5kZXhdLmhhbmRsZXJzLT5leHRfc2ZpbGUtPmR1cCh0bywgZnJvbSk7Cit9CisKKwordm9pZCBvcGRfZXh0X3NmaWxlX2Nsb3NlIChzdHJ1Y3Qgc2ZpbGUgKiBzZikKK3sKKwkvKiBDbG9zZSBleHQgc2ZpbGUgb25seSBpZiBleHRlbmRlZCBmZWF0dXJlIGlzIGVuYWJsZSovCisJaWYgKGlzX2V4dF9zZmlsZV9lbmFibGVkKCkKKwkmJiBleHRfZmVhdHVyZV90YWJsZVtvcGRfZXh0X2ZlYXRfaW5kZXhdLmhhbmRsZXJzLT5leHRfc2ZpbGUtPmNsb3NlICE9IE5VTEwpCisJCWV4dF9mZWF0dXJlX3RhYmxlW29wZF9leHRfZmVhdF9pbmRleF0uaGFuZGxlcnMtPmV4dF9zZmlsZS0+Y2xvc2Uoc2YpOworfQorCisKK3ZvaWQgb3BkX2V4dF9zZmlsZV9zeW5jKHN0cnVjdCBzZmlsZSAqIHNmKQoreworCS8qIFN5bmMgZXh0IHNmaWxlIG9ubHkgaWYgZXh0ZW5kZWQgZmVhdHVyZSBpcyBlbmFibGUqLworCWlmIChpc19leHRfc2ZpbGVfZW5hYmxlZCgpCisJJiYgZXh0X2ZlYXR1cmVfdGFibGVbb3BkX2V4dF9mZWF0X2luZGV4XS5oYW5kbGVycy0+ZXh0X3NmaWxlLT5zeW5jICE9IE5VTEwpCisJCWV4dF9mZWF0dXJlX3RhYmxlW29wZF9leHRfZmVhdF9pbmRleF0uaGFuZGxlcnMtPmV4dF9zZmlsZS0+c3luYyhzZik7Cit9CisKKworb2RiX3QgKiBvcGRfZXh0X3NmaWxlX2dldChzdHJ1Y3QgdHJhbnNpZW50IGNvbnN0ICogdHJhbnMsIGludCBpc19jZykKK3sKKwkvKiBHZXQgZXh0IHNmaWxlIG9ubHkgaWYgZXh0ZW5kZWQgZmVhdHVyZSBpcyBlbmFibGUqLworCWlmIChpc19leHRfc2ZpbGVfZW5hYmxlZCgpCisJJiYgZXh0X2ZlYXR1cmVfdGFibGVbb3BkX2V4dF9mZWF0X2luZGV4XS5oYW5kbGVycy0+ZXh0X3NmaWxlLT5nZXQgIT0gTlVMTCkKKwkJcmV0dXJuCWV4dF9mZWF0dXJlX3RhYmxlW29wZF9leHRfZmVhdF9pbmRleF0uaGFuZGxlcnMtPmV4dF9zZmlsZS0+Z2V0KHRyYW5zLCBpc19jZyk7CisKKwlyZXR1cm4gTlVMTDsKK30KKworCitzdHJ1Y3Qgb3BkX2V2ZW50ICogb3BkX2V4dF9maW5kX2NvdW50ZXJfZXZlbnQodW5zaWduZWQgbG9uZyBjb3VudGVyKQoreworCS8qIE9ubHkgaWYgZXh0ZW5kZWQgZmVhdHVyZSBpcyBlbmFibGUqLworCWlmIChpc19leHRfc2ZpbGVfZW5hYmxlZCgpCisJJiYgZXh0X2ZlYXR1cmVfdGFibGVbb3BkX2V4dF9mZWF0X2luZGV4XS5oYW5kbGVycy0+ZXh0X3NmaWxlLT5maW5kX2NvdW50ZXJfZXZlbnQgIT0gTlVMTCkKKwkJcmV0dXJuCWV4dF9mZWF0dXJlX3RhYmxlW29wZF9leHRfZmVhdF9pbmRleF0uaGFuZGxlcnMtPmV4dF9zZmlsZS0+ZmluZF9jb3VudGVyX2V2ZW50KGNvdW50ZXIpOworCisJcmV0dXJuIE5VTEw7Cit9CisKZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2RhZW1vbi9vcGRfZXh0ZW5kZWQuaCBiL29wcm9maWxlLTAuOS43L2RhZW1vbi9vcGRfZXh0ZW5kZWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzY4MmE0Ci0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvZGFlbW9uL29wZF9leHRlbmRlZC5oCkBAIC0wLDAgKzEsOTQgQEAKKy8qKgorICogQGZpbGUgb3BkX2V4dGVuZGVkLmgKKyAqIE9Qcm9maWxlIEV4dGVuZGVkIEZlYXR1cmUKKyAqCisgKiBAcmVtYXJrIENvcHlyaWdodCAyMDA3LTIwMDkgT1Byb2ZpbGUgYXV0aG9ycworICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKKyAqCisgKiBAYXV0aG9yIFN1cmF2ZWUgU3V0aGlrdWxwYW5pdCA8c3VyYXZlZS5zdXRoaWt1bHBhbml0QGFtZC5jb20+CisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLgorICovCisKKyNpZm5kZWYgT1BEX0VYVEVOREVEX0gKKyNkZWZpbmUgT1BEX0VYVEVOREVEX0gKKworI2luY2x1ZGUgIm9wZF90cmFucy5oIgorI2luY2x1ZGUgIm9kYi5oIgorCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisKKworLyoqCisgKiBPUHJvZmlsZSBFeHRlbmRlZCBGZWF0dXJlIFRhYmxlIEVudHJ5CisgKi8KK3N0cnVjdCBvcGRfZXh0X2ZlYXR1cmUgeworCS8vIEZlYXR1cmUgbmFtZQorCWNvbnN0IGNoYXIqIGZlYXR1cmU7CisJLy8gRmVhdHVyZSBoYW5kbGVycworCXN0cnVjdCBvcGRfZXh0X2hhbmRsZXJzICogaGFuZGxlcnM7Cit9OworCisvKioKKyAqIE9Qcm9maWxlIEV4dGVuZGVkIGhhbmRsZXJzCisgKi8KK3N0cnVjdCBvcGRfZXh0X2hhbmRsZXJzIHsKKwkvLyBFeHRlbmRlZCBpbml0CisJaW50ICgqZXh0X2luaXQpKGNoYXIgY29uc3QgKik7CisJLy8gRXh0ZW5kZWQgZGVpbml0IAorCWludCAoKmV4dF9kZWluaXQpKCk7CisJLy8gRXh0ZW5kZWQgc3RhdGlzdGljcworCWludCAoKmV4dF9wcmludF9zdGF0cykoKTsKKwkvLyBFeHRlbmRlZCBzZmlsZSBoYW5kbGVycworCXN0cnVjdCBvcGRfZXh0X3NmaWxlX2hhbmRsZXJzICogZXh0X3NmaWxlOworfTsKKworLyoqCisgKiBPUHJvZmlsZSBFeHRlbmRlZCBzdWItaGFuZGxlcnMgKHNmaWxlKQorICovCitzdHJ1Y3Qgb3BkX2V4dF9zZmlsZV9oYW5kbGVycyB7CisJaW50ICgqY3JlYXRlKShzdHJ1Y3Qgc2ZpbGUgKik7CisJaW50ICgqZHVwKShzdHJ1Y3Qgc2ZpbGUgKiwgc3RydWN0IHNmaWxlICopOworCWludCAoKmNsb3NlKShzdHJ1Y3Qgc2ZpbGUgKik7CisJaW50ICgqc3luYykoc3RydWN0IHNmaWxlICopOworCW9kYl90ICogKCpnZXQpKHN0cnVjdCB0cmFuc2llbnQgY29uc3QgKiwgaW50KTsKKwlzdHJ1Y3Qgb3BkX2V2ZW50ICogKCpmaW5kX2NvdW50ZXJfZXZlbnQpKHVuc2lnbmVkIGxvbmcpOworfTsKKworLyoqCisgKiBAcGFyYW0gdmFsdWU6IGNvbW1hbmRsaW5lIGlucHV0IG9wdGlvbiBzdHJpbmcKKyAqCisgKiBQYXJzZSB0aGUgc3BlY2lmaWVkIGV4dGVuZGVkIGZlYXR1cmUKKyAqLworZXh0ZXJuIGludCBvcGRfZXh0X2luaXRpYWxpemUoY2hhciBjb25zdCAqIHZhbHVlKTsKKworLyoqCisgKiBAcGFyYW0gdmFsdWU6IGNvbW1hbmRsaW5lIGlucHV0IG9wdGlvbiBzdHJpbmcKKyAqCisgKiBEZWluaXRpYWxpemUKKyAqLworZXh0ZXJuIGludCBvcGRfZXh0X2RlaW5pdGlhbGl6ZSgpOworCisvKioKKyAqIFByaW50IG91dCBleHRlbmRlZCBmZWF0dXJlIHN0YXRpc3RpY3MgaW4gb3Byb2ZpbGVkLmxvZyBmaWxlCisgKi8KK2V4dGVybiB2b2lkIG9wZF9leHRfcHJpbnRfc3RhdHMoKTsKKworLyoqCisgKiBvcGRfc2ZpbGUgZXh0ZW5kZWQgc2ZpbGUgaGFuZGxpbmcgZnVuY3Rpb25zCisgKi8KK2V4dGVybiB2b2lkIG9wZF9leHRfc2ZpbGVfY3JlYXRlKHN0cnVjdCBzZmlsZSAqIHNmKTsKK2V4dGVybiB2b2lkIG9wZF9leHRfc2ZpbGVfZHVwIChzdHJ1Y3Qgc2ZpbGUgKiB0bywgc3RydWN0IHNmaWxlICogZnJvbSk7CitleHRlcm4gdm9pZCBvcGRfZXh0X3NmaWxlX2Nsb3NlKHN0cnVjdCBzZmlsZSAqIHNmKTsKK2V4dGVybiB2b2lkIG9wZF9leHRfc2ZpbGVfc3luYyhzdHJ1Y3Qgc2ZpbGUgKiBzZik7CitleHRlcm4gb2RiX3QgKiBvcGRfZXh0X3NmaWxlX2dldChzdHJ1Y3QgdHJhbnNpZW50IGNvbnN0ICogdHJhbnMsIGludCBpc19jZyk7CisKKy8qKgorICogQHBhcmFtIGNvdW50ZXI6IGNvdW50ZXIgaW5kZXgKKyAqCisgKiBHZXQgZXZlbnQgc3RydWN0IG9wZF9ldmVudCBmcm9tIHRoZSBjb3VudGVyIGluZGV4IHZhbHVlLgorICovCitleHRlcm4gc3RydWN0IG9wZF9ldmVudCAqIG9wZF9leHRfZmluZF9jb3VudGVyX2V2ZW50KHVuc2lnbmVkIGxvbmcgY291bnRlcik7CisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9kYWVtb24vb3BkX2licy5jIGIvb3Byb2ZpbGUtMC45LjcvZGFlbW9uL29wZF9pYnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTg4NmJiCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvZGFlbW9uL29wZF9pYnMuYwpAQCAtMCwwICsxLDgzMiBAQAorLyoqCisgKiBAZmlsZSBkYWVtb24vb3BkX2licy5jCisgKiBBTUQgRmFtaWx5MTBoIEluc3RydWN0aW9uIEJhc2VkIFNhbXBsaW5nIChJQlMpIGhhbmRsaW5nLgorICoKKyAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDctMjAxMCBPUHJvZmlsZSBhdXRob3JzCisgKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORworICoKKyAqIEBhdXRob3IgSmFzb24gWWVoIDxqYXNvbi55ZWhAYW1kLmNvbT4KKyAqIEBhdXRob3IgUGF1bCBEcm9uZ293c2tpIDxwYXVsLmRyb25nb3dza2lAYW1kLmNvbT4KKyAqIEBhdXRob3IgU3VyYXZlZSBTdXRoaWt1bHBhbml0IDxzdXJhdmVlLnN1dGhpa3VscGFuaXRAYW1kLmNvbT4KKyAqIENvcHlyaWdodCAoYykgMjAwOCBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCisgKi8KKworI2luY2x1ZGUgIm9wX2h3X2NvbmZpZy5oIgorI2luY2x1ZGUgIm9wX2V2ZW50cy5oIgorI2luY2x1ZGUgIm9wX3N0cmluZy5oIgorI2luY2x1ZGUgIm9wX2h3X3NwZWNpZmljLmgiCisjaW5jbHVkZSAib3BfbGliaWJlcnR5LmgiCisjaW5jbHVkZSAib3BkX3ByaW50Zi5oIgorI2luY2x1ZGUgIm9wZF90cmFucy5oIgorI2luY2x1ZGUgIm9wZF9ldmVudHMuaCIKKyNpbmNsdWRlICJvcGRfa2VybmVsLmgiCisjaW5jbHVkZSAib3BkX2Fub24uaCIKKyNpbmNsdWRlICJvcGRfc2ZpbGUuaCIKKyNpbmNsdWRlICJvcGRfaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAib3BkX21hbmdsaW5nLmgiCisjaW5jbHVkZSAib3BkX2V4dGVuZGVkLmgiCisjaW5jbHVkZSAib3BkX2licy5oIgorI2luY2x1ZGUgIm9wZF9pYnNfdHJhbnMuaCIKKyNpbmNsdWRlICJvcGRfaWJzX21hY3JvLmgiCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisKK2V4dGVybiBvcF9jcHUgY3B1X3R5cGU7CitleHRlcm4gaW50IG5vX2V2ZW50X29rOworZXh0ZXJuIGludCBzZmlsZV9lcXVhbChzdHJ1Y3Qgc2ZpbGUgY29uc3QgKiBzZiwgc3RydWN0IHNmaWxlIGNvbnN0ICogc2YyKTsKK2V4dGVybiB2b2lkIHNmaWxlX2R1cChzdHJ1Y3Qgc2ZpbGUgKiB0bywgc3RydWN0IHNmaWxlICogZnJvbSk7CitleHRlcm4gY2hhciAqIHNlc3Npb25fZGlyOworCisvKiBJQlMgU2VsZWN0IENvdW50ZXJzICovCitzdGF0aWMgdW5zaWduZWQgaW50IGlic19zZWxlY3RlZF9zaXplOworCisvKiBUaGVzZSBmbGFncyBzdG9yZSB0aGUgSUJTLWRlcml2ZWQgZXZlbnRzIHNlbGVjdGlvbi4gKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgaWJzX2ZldGNoX3NlbGVjdGVkX2ZsYWc7CitzdGF0aWMgdW5zaWduZWQgaW50IGlic19vcF9zZWxlY3RlZF9mbGFnOworc3RhdGljIHVuc2lnbmVkIGludCBpYnNfb3BfbHNfc2VsZWN0ZWRfZmxhZzsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaWJzX29wX25iX3NlbGVjdGVkX2ZsYWc7CisKKy8qIElCUyBTdGF0aXN0aWNzICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBpYnNfZmV0Y2hfc2FtcGxlX3N0YXRzOworc3RhdGljIHVuc2lnbmVkIGxvbmcgaWJzX2ZldGNoX2luY29tcGxldGVfc3RhdHM7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBpYnNfb3Bfc2FtcGxlX3N0YXRzOworc3RhdGljIHVuc2lnbmVkIGxvbmcgaWJzX29wX2luY29tcGxldGVfc3RhdHM7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBpYnNfZGVyaXZlZF9ldmVudF9zdGF0czsKKworLyoKKyAqIElCUyBWaXJ0dWFsIENvdW50ZXIKKyAqLworc3RydWN0IG9wZF9ldmVudCBpYnNfdmNbT1BfTUFYX0lCU19DT1VOVEVSU107CisKKy8qIElCUyBWaXJ0dWFsIENvdW50ZXIgSW5kZXgoVkNJKSBNYXAqLwordW5zaWduZWQgaW50IGlic192Y2lfbWFwW09QX01BWF9JQlNfQ09VTlRFUlNdOworCisvKiBDUFVJRCBpbmZvcm1hdGlvbiAqLwordW5zaWduZWQgaW50IGlic19mYW1pbHk7Cit1bnNpZ25lZCBpbnQgaWJzX21vZGVsOwordW5zaWduZWQgaW50IGlic19zdGVwcGluZzsKKworLyogSUJTIEV4dGVuZGVkIE1TUnMgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIGlic19idGFfZW5hYmxlZDsKKworLyogSUJTIGxvZyBmaWxlcyAqLworRklMRSAqIG1lbWFjY2Vzc19sb2c7CitGSUxFICogYnRhX2xvZzsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIGNvbnZlcnRzIElCUyBmZXRjaCBldmVudCBmbGFncyBhbmQgdmFsdWVzIGludG8KKyAqIGRlcml2ZWQgZXZlbnRzLiBJZiB0aGUgdGFnZ2VkIChzYW1wbGVkKSBmZXRjaGVkIGNhdXNlZCBhIGRlcml2ZWQKKyAqIGV2ZW50LCB0aGUgZGVyaXZlZCBldmVudCBpcyB0YWxsaWVkLgorICovCitzdGF0aWMgdm9pZCBvcGRfbG9nX2lic19mZXRjaChzdHJ1Y3QgdHJhbnNpZW50ICogdHJhbnMpCit7CisJc3RydWN0IGlic19mZXRjaF9zYW1wbGUgKiB0cmFuc19mZXRjaCA9ICgoc3RydWN0IGlic19zYW1wbGUqKSh0cmFucy0+ZXh0KSktPmZldGNoOworCWlmICghdHJhbnNfZmV0Y2gpCisJCXJldHVybjsKKworCXRyYW5zX2lic19mZXRjaCh0cmFucywgaWJzX2ZldGNoX3NlbGVjdGVkX2ZsYWcpOworfQorCisKKy8qKgorICogVGhpcyBmdW5jdGlvbiB0cmFuc2xhdGVzIHRoZSBJQlMgb3AgZXZlbnQgZmxhZ3MgYW5kIHZhbHVlcyBpbnRvCisgKiBJQlMgb3AgZGVyaXZlZCBldmVudHMuIElmIGFuIG9wIGRlcml2ZWQgZXZlbnQgb2NjdXJlZCwgaXQncyB0YWxsaWVkLgorICovCitzdGF0aWMgdm9pZCBvcGRfbG9nX2lic19vcChzdHJ1Y3QgdHJhbnNpZW50ICogdHJhbnMpCit7CisJc3RydWN0IGlic19vcF9zYW1wbGUgKiB0cmFuc19vcCA9ICgoc3RydWN0IGlic19zYW1wbGUqKSh0cmFucy0+ZXh0KSktPm9wOworCWlmICghdHJhbnNfb3ApCisJCXJldHVybjsKKworCXRyYW5zX2lic19vcF9tYXNrX3Jlc2VydmVkKGlic19mYW1pbHksIHRyYW5zKTsKKworCWlmICh0cmFuc19pYnNfb3BfcmlwX2ludmFsaWQodHJhbnMpICE9IDApCisJCXJldHVybjsKKworCXRyYW5zX2lic19vcCh0cmFucywgaWJzX29wX3NlbGVjdGVkX2ZsYWcpOworCXRyYW5zX2lic19vcF9scyh0cmFucywgaWJzX29wX2xzX3NlbGVjdGVkX2ZsYWcpOworCXRyYW5zX2lic19vcF9uYih0cmFucywgaWJzX29wX25iX3NlbGVjdGVkX2ZsYWcpOworCXRyYW5zX2lic19vcF9sc19tZW1hY2Nlc3ModHJhbnMpOworCXRyYW5zX2lic19vcF9idGEodHJhbnMpOworfQorCisKK3N0YXRpYyB2b2lkIG9wZF9wdXRfaWJzX3NhbXBsZShzdHJ1Y3QgdHJhbnNpZW50ICogdHJhbnMpCit7CisJdW5zaWduZWQgbG9uZyBsb25nIGV2ZW50ID0gMDsKKwlzdHJ1Y3Qga2VybmVsX2ltYWdlICoga19pbWFnZSA9IE5VTEw7CisJc3RydWN0IGlic19mZXRjaF9zYW1wbGUgKiB0cmFuc19mZXRjaCA9ICgoc3RydWN0IGlic19zYW1wbGUqKSh0cmFucy0+ZXh0KSktPmZldGNoOworCisJaWYgKCFlbm91Z2hfcmVtYWluaW5nKHRyYW5zLCAxKSkgeworCQl0cmFucy0+cmVtYWluaW5nID0gMDsKKwkJcmV0dXJuOworCX0KKworCS8qIElCUyBjYW4gZ2VuZXJhdGUgc2FtcGxlcyB3aXRoIGludmFsaWQgZGNvb2tpZSBhbmQKKwkgKiBpbiBrZXJuZWwgYWRkcmVzcyByYW5nZS4gTWFwIHN1Y2ggc2FtcGxlcyB0byB2bWxpbnV4CisJICogb25seSBpZiB0aGUgdXNlciBlaXRoZXIgc3BlY2lmaWVzIGEgcmFuZ2UsIG9yIHZtbGludXguCisJICovCisJaWYgKHRyYW5zLT5jb29raWUgPT0gSU5WQUxJRF9DT09LSUUKKwkgICAgJiYgKGtfaW1hZ2UgPSBmaW5kX2tlcm5lbF9pbWFnZSh0cmFucykpICE9IE5VTEwKKwkgICAgJiYgKGtfaW1hZ2UtPnN0YXJ0ICE9IDAgJiYga19pbWFnZS0+ZW5kICE9IDApCisJICAgICYmIHRyYW5zLT5pbl9rZXJuZWwgPT0gMCkKKwkJdHJhbnMtPmluX2tlcm5lbCA9IDE7CisKKwlpZiAodHJhbnMtPnRyYWNpbmcgIT0gVFJBQ0lOR19PTikKKwkJdHJhbnMtPmV2ZW50ID0gZXZlbnQ7CisKKwkvKiBzZmlsZSBjYW4gY2hhbmdlIGF0IGVhY2ggc2FtcGxlIGZvciBrZXJuZWwgKi8KKwlpZiAodHJhbnMtPmluX2tlcm5lbCAhPSAwKQorCQljbGVhcl90cmFuc19jdXJyZW50KHRyYW5zKTsKKworCWlmICghdHJhbnMtPmluX2tlcm5lbCAmJiB0cmFucy0+Y29va2llID09IE5PX0NPT0tJRSkKKwkJdHJhbnMtPmFub24gPSBmaW5kX2Fub25fbWFwcGluZyh0cmFucyk7CisKKwkvKiBnZXQgdGhlIGN1cnJlbnQgc2ZpbGUgaWYgbmVlZGVkICovCisJaWYgKCF0cmFucy0+Y3VycmVudCkKKwkJdHJhbnMtPmN1cnJlbnQgPSBzZmlsZV9maW5kKHRyYW5zKTsKKworCS8qCisJICogY2FuIGhhcHBlbiBpZiBrZXJuZWwgc2FtcGxlIGZhbGxzIHRocm91Z2ggdGhlIGNyYWNrcywgb3IgaWYKKwkgKiBpdCdzIGEgc2FtcGxlIGZyb20gYW4gYW5vbiByZWdpb24gd2UgY291bGRuJ3QgZmluZAorCSAqLworCWlmICghdHJhbnMtPmN1cnJlbnQpCisJCWdvdG8gb3V0OworCisJaWYgKHRyYW5zX2ZldGNoKQorCQlvcGRfbG9nX2lic19mZXRjaCh0cmFucyk7CisJZWxzZQorCQlvcGRfbG9nX2lic19vcCh0cmFucyk7CitvdXQ6CisJLyogc3dpdGNoIHRvIHRyYWNlIG1vZGUgKi8KKwlpZiAodHJhbnMtPnRyYWNpbmcgPT0gVFJBQ0lOR19TVEFSVCkKKwkJdHJhbnMtPnRyYWNpbmcgPSBUUkFDSU5HX09OOworCisJdXBkYXRlX3RyYW5zX2xhc3QodHJhbnMpOworfQorCisKK3N0YXRpYyB2b2lkIGdldF9pYnNfYnRhX3N0YXR1cygpCit7CisJRklMRSAqIGZwID0gTlVMTDsKKwljaGFyIGJ1ZltQQVRIX01BWF07CisKKwkvKiBEZWZhdWx0IHRvIGRpc2FibGUgKi8KKwlpYnNfYnRhX2VuYWJsZWQgPSAwOworCisJc25wcmludGYoYnVmLCBQQVRIX01BWCwgIi9kZXYvb3Byb2ZpbGUvaWJzX29wL2JyYW5jaF90YXJnZXQiKTsKKwlmcCA9IGZvcGVuKGJ1ZiwgInIiKTsKKwlpZiAoIWZwKQorCQlyZXR1cm47CisKKwl3aGlsZSAoZmdldHMoYnVmLCBQQVRIX01BWCwgZnApICE9IE5VTEwpCisJCWlic19idGFfZW5hYmxlZCA9IHN0cnRvdWwoYnVmLCBOVUxMLCAxMCk7CQorCisJZmNsb3NlKGZwKTsKK30KKworCit2b2lkIGNvZGVfaWJzX2ZldGNoX3NhbXBsZShzdHJ1Y3QgdHJhbnNpZW50ICogdHJhbnMpCit7CisJc3RydWN0IGlic19mZXRjaF9zYW1wbGUgKiB0cmFuc19mZXRjaCA9IE5VTEw7CisKKwlpZiAoIWVub3VnaF9yZW1haW5pbmcodHJhbnMsIDcpKSB7CisJCXZlcmJwcmludGYodmV4dCwgIm5vdCBlbm91Z2ggcmVtYWluaW5nXG4iKTsKKwkJdHJhbnMtPnJlbWFpbmluZyA9IDA7CisJCWlic19mZXRjaF9pbmNvbXBsZXRlX3N0YXRzKys7CisJCXJldHVybjsKKwl9CisKKwlpYnNfZmV0Y2hfc2FtcGxlX3N0YXRzKys7CisKKwl0cmFucy0+ZXh0ID0geG1hbGxvYyhzaXplb2Yoc3RydWN0IGlic19zYW1wbGUpKTsKKwkoKHN0cnVjdCBpYnNfc2FtcGxlKikodHJhbnMtPmV4dCkpLT5mZXRjaCA9IHhtYWxsb2Moc2l6ZW9mKHN0cnVjdCBpYnNfZmV0Y2hfc2FtcGxlKSk7CisJdHJhbnNfZmV0Y2ggPSAoKHN0cnVjdCBpYnNfc2FtcGxlKikodHJhbnMtPmV4dCkpLT5mZXRjaDsKKworCXRyYW5zX2ZldGNoLT5yaXAgPSBwb3BfYnVmZmVyX3ZhbHVlKHRyYW5zKTsKKworCXRyYW5zX2ZldGNoLT5pYnNfZmV0Y2hfbGluX2FkZHJfbG93ICAgPSBwb3BfYnVmZmVyX3ZhbHVlKHRyYW5zKTsKKwl0cmFuc19mZXRjaC0+aWJzX2ZldGNoX2xpbl9hZGRyX2hpZ2ggID0gcG9wX2J1ZmZlcl92YWx1ZSh0cmFucyk7CisKKwl0cmFuc19mZXRjaC0+aWJzX2ZldGNoX2N0bF9sb3cgICAgICAgID0gcG9wX2J1ZmZlcl92YWx1ZSh0cmFucyk7CisJdHJhbnNfZmV0Y2gtPmlic19mZXRjaF9jdGxfaGlnaCAgICAgICA9IHBvcF9idWZmZXJfdmFsdWUodHJhbnMpOworCXRyYW5zX2ZldGNoLT5pYnNfZmV0Y2hfcGh5c19hZGRyX2xvdyAgPSBwb3BfYnVmZmVyX3ZhbHVlKHRyYW5zKTsKKwl0cmFuc19mZXRjaC0+aWJzX2ZldGNoX3BoeXNfYWRkcl9oaWdoID0gcG9wX2J1ZmZlcl92YWx1ZSh0cmFucyk7CisKKwl2ZXJicHJpbnRmKHZzYW1wbGVzLAorCQkiRkVUQ0hfWCBDUFU6JWxkIFBJRDolbGQgUklQOiVseCBDVExfSDoleCBMQVQ6JWQgUF9ISToleCBQX0xPOiV4IExfSEk6JXggTF9MTzoleFxuIiwKKwkJdHJhbnMtPmNwdSwKKwkJKGxvbmcpdHJhbnMtPnRnaWQsCisJCXRyYW5zX2ZldGNoLT5yaXAsCisJCSh0cmFuc19mZXRjaC0+aWJzX2ZldGNoX2N0bF9oaWdoID4+IDE2KSAmIDB4M2ZmLAorCQkodHJhbnNfZmV0Y2gtPmlic19mZXRjaF9jdGxfaGlnaCkgJiAweGZmZmYsCisJCXRyYW5zX2ZldGNoLT5pYnNfZmV0Y2hfcGh5c19hZGRyX2hpZ2gsCisJCXRyYW5zX2ZldGNoLT5pYnNfZmV0Y2hfcGh5c19hZGRyX2xvdywKKwkJdHJhbnNfZmV0Y2gtPmlic19mZXRjaF9saW5fYWRkcl9oaWdoLAorCQl0cmFuc19mZXRjaC0+aWJzX2ZldGNoX2xpbl9hZGRyX2xvdykgOworCisJLyogT3ZlcndyaXRlIHRoZSB0cmFucy0+cGMgd2l0aCB0aGUgbW9yZSBhY2N1cmF0ZSB0cmFuc19mZXRjaC0+cmlwICovCisJdHJhbnMtPnBjID0gdHJhbnNfZmV0Y2gtPnJpcDsKKworCW9wZF9wdXRfaWJzX3NhbXBsZSh0cmFucyk7CisKKwlmcmVlKHRyYW5zX2ZldGNoKTsKKwlmcmVlKHRyYW5zLT5leHQpOworCXRyYW5zLT5leHQgPSBOVUxMOworfQorCisKK3N0YXRpYyB2b2lkIGdldF9pYnNfb3BfYnRhX3NhbXBsZShzdHJ1Y3QgdHJhbnNpZW50ICogdHJhbnMsCisJCQkJICAgIHN0cnVjdCBpYnNfb3Bfc2FtcGxlICogdHJhbnNfb3ApCit7CisJLy8gQ2hlY2sgcmVtYWluaW5nCisJaWYgKCFlbm91Z2hfcmVtYWluaW5nKHRyYW5zLCAyKSkgeworCQl2ZXJicHJpbnRmKHZleHQsICJub3QgZW5vdWdoIHJlbWFpbmluZ1xuIik7CisJCXRyYW5zLT5yZW1haW5pbmcgPSAwOworCQlpYnNfb3BfaW5jb21wbGV0ZV9zdGF0cysrOworCQlyZXR1cm47CisJfQorCisJaWYgKGlic19idGFfZW5hYmxlZCA9PSAxKSB7CisJCXRyYW5zX29wLT5pYnNfb3BfYnJ0Z3RfYWRkciA9IHBvcF9idWZmZXJfdmFsdWUodHJhbnMpOworCQorCQkvLyBDaGVjayBpZiBicmFuY2ggdGFyZ2V0IGFkZHJlc3MgaXMgdmFsaWQgKE1TUkMwMDFfMTAzNVszN10gPT0gMV0KKwkJaWYgKCh0cmFuc19vcC0+aWJzX29wX2RhdGExX2hpZ2ggJiAoMHgwMDAwMDAwMSA8PCA1KSkgPT0gMCkgeworCQkJdHJhbnNfb3AtPmlic19vcF9icnRndF9hZGRyID0gMDsKKwkJfQorCX0gZWxzZSB7CisJCXRyYW5zX29wLT5pYnNfb3BfYnJ0Z3RfYWRkciA9IDA7CisJfQorfQorCisKK3ZvaWQgY29kZV9pYnNfb3Bfc2FtcGxlKHN0cnVjdCB0cmFuc2llbnQgKiB0cmFucykKK3sKKwlzdHJ1Y3QgaWJzX29wX3NhbXBsZSAqIHRyYW5zX29wPSBOVUxMOworCisJaWYgKCFlbm91Z2hfcmVtYWluaW5nKHRyYW5zLCAxMykpIHsKKwkJdmVyYnByaW50Zih2ZXh0LCAibm90IGVub3VnaCByZW1haW5pbmdcbiIpOworCQl0cmFucy0+cmVtYWluaW5nID0gMDsKKwkJaWJzX29wX2luY29tcGxldGVfc3RhdHMrKzsKKwkJcmV0dXJuOworCX0KKworCWlic19vcF9zYW1wbGVfc3RhdHMrKzsKKworCXRyYW5zLT5leHQgPSB4bWFsbG9jKHNpemVvZihzdHJ1Y3QgaWJzX3NhbXBsZSkpOworCSgoc3RydWN0IGlic19zYW1wbGUqKSh0cmFucy0+ZXh0KSktPm9wID0geG1hbGxvYyhzaXplb2Yoc3RydWN0IGlic19vcF9zYW1wbGUpKTsKKwl0cmFuc19vcCA9ICgoc3RydWN0IGlic19zYW1wbGUqKSh0cmFucy0+ZXh0KSktPm9wOworCisJdHJhbnNfb3AtPnJpcCA9IHBvcF9idWZmZXJfdmFsdWUodHJhbnMpOworCisJdHJhbnNfb3AtPmlic19vcF9saW5fYWRkcl9sb3cgPSBwb3BfYnVmZmVyX3ZhbHVlKHRyYW5zKTsKKwl0cmFuc19vcC0+aWJzX29wX2xpbl9hZGRyX2hpZ2ggPSBwb3BfYnVmZmVyX3ZhbHVlKHRyYW5zKTsKKworCXRyYW5zX29wLT5pYnNfb3BfZGF0YTFfbG93ICAgICAgICAgPSBwb3BfYnVmZmVyX3ZhbHVlKHRyYW5zKTsKKwl0cmFuc19vcC0+aWJzX29wX2RhdGExX2hpZ2ggICAgICAgID0gcG9wX2J1ZmZlcl92YWx1ZSh0cmFucyk7CisJdHJhbnNfb3AtPmlic19vcF9kYXRhMl9sb3cgICAgICAgICA9IHBvcF9idWZmZXJfdmFsdWUodHJhbnMpOworCXRyYW5zX29wLT5pYnNfb3BfZGF0YTJfaGlnaCAgICAgICAgPSBwb3BfYnVmZmVyX3ZhbHVlKHRyYW5zKTsKKwl0cmFuc19vcC0+aWJzX29wX2RhdGEzX2xvdyAgICAgICAgID0gcG9wX2J1ZmZlcl92YWx1ZSh0cmFucyk7CisJdHJhbnNfb3AtPmlic19vcF9kYXRhM19oaWdoICAgICAgICA9IHBvcF9idWZmZXJfdmFsdWUodHJhbnMpOworCXRyYW5zX29wLT5pYnNfb3BfbGRzdF9saW5hZGRyX2xvdyAgPSBwb3BfYnVmZmVyX3ZhbHVlKHRyYW5zKTsKKwl0cmFuc19vcC0+aWJzX29wX2xkc3RfbGluYWRkcl9oaWdoID0gcG9wX2J1ZmZlcl92YWx1ZSh0cmFucyk7CisJdHJhbnNfb3AtPmlic19vcF9waHlzX2FkZHJfbG93ICAgICA9IHBvcF9idWZmZXJfdmFsdWUodHJhbnMpOworCXRyYW5zX29wLT5pYnNfb3BfcGh5c19hZGRyX2hpZ2ggICAgPSBwb3BfYnVmZmVyX3ZhbHVlKHRyYW5zKTsKKworCWdldF9pYnNfb3BfYnRhX3NhbXBsZSh0cmFucywgdHJhbnNfb3ApOworCisJdmVyYnByaW50Zih2c2FtcGxlcywKKwkgICAiSUJTX09QX1ggQ1BVOiVsZCBQSUQ6JWQgUklQOiVseCBEMUhJOiV4IEQxTE86JXggRDJMTzoleCBEM0hJOiV4IEQzTE86JXggTF9MTzoleCBQX0xPOiV4XG4iLAorCQkgICB0cmFucy0+Y3B1LAorCQkgICB0cmFucy0+dGdpZCwKKwkJICAgdHJhbnNfb3AtPnJpcCwKKwkJICAgdHJhbnNfb3AtPmlic19vcF9kYXRhMV9oaWdoLAorCQkgICB0cmFuc19vcC0+aWJzX29wX2RhdGExX2xvdywKKwkJICAgdHJhbnNfb3AtPmlic19vcF9kYXRhMl9sb3csCisJCSAgIHRyYW5zX29wLT5pYnNfb3BfZGF0YTNfaGlnaCwKKwkJICAgdHJhbnNfb3AtPmlic19vcF9kYXRhM19sb3csCisJCSAgIHRyYW5zX29wLT5pYnNfb3BfbGRzdF9saW5hZGRyX2xvdywKKwkJICAgdHJhbnNfb3AtPmlic19vcF9waHlzX2FkZHJfbG93KTsKKworCS8qIE92ZXJ3cml0ZSB0aGUgdHJhbnMtPnBjIHdpdGggdGhlIG1vcmUgYWNjdXJhdGUgdHJhbnNfb3AtPnJpcCAqLworCXRyYW5zLT5wYyA9IHRyYW5zX29wLT5yaXA7CisKKwlvcGRfcHV0X2lic19zYW1wbGUodHJhbnMpOworCisJZnJlZSh0cmFuc19vcCk7CisJZnJlZSh0cmFucy0+ZXh0KTsKKwl0cmFucy0+ZXh0ID0gTlVMTDsKK30KKworCisvKiogQ29udmVydCBJQlMgZXZlbnQgdG8gdmFsdWUgdXNlZCBmb3IgZGF0YSBzdHJ1Y3R1cmUgaW5kZXhpbmcgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIGlic19ldmVudF90b19jb3VudGVyKHVuc2lnbmVkIGxvbmcgeCkKK3sKKwl1bnNpZ25lZCBsb25nIHJldCA9IH4wVUw7CisKKwlpZiAoSVNfSUJTX0ZFVENIKHgpKQorCQlyZXQgPSAoeCAtIElCU19GRVRDSF9CQVNFKTsKKwllbHNlIGlmIChJU19JQlNfT1AoeCkpCisJCXJldCA9ICh4IC0gSUJTX09QX0JBU0UgKyBJQlNfRkVUQ0hfTUFYKTsKKwllbHNlIGlmIChJU19JQlNfT1BfTFMoeCkpCisJCXJldCA9ICh4IC0gSUJTX09QX0xTX0JBU0UgKyBJQlNfT1BfTUFYICsgSUJTX0ZFVENIX01BWCk7CisJZWxzZSBpZiAoSVNfSUJTX09QX05CKHgpKQorCQlyZXQgPSAoeCAtIElCU19PUF9OQl9CQVNFICsgSUJTX09QX0xTX01BWCArIElCU19PUF9NQVggKyBJQlNfRkVUQ0hfTUFYKTsKKworCXJldHVybiAocmV0ICE9IH4wVUwpID8gcmV0ICsgT1BfTUFYX0NPVU5URVJTIDogcmV0OworfQorCisKK3ZvaWQgb3BkX2xvZ19pYnNfZXZlbnQodW5zaWduZWQgaW50IGV2ZW50LAorCXN0cnVjdCB0cmFuc2llbnQgKiB0cmFucykKK3sKKwlpYnNfZGVyaXZlZF9ldmVudF9zdGF0cysrOworCXRyYW5zLT5ldmVudCA9IGV2ZW50OworCXNmaWxlX2xvZ19zYW1wbGVfY291bnQodHJhbnMsIDEpOworfQorCisKK3ZvaWQgb3BkX2xvZ19pYnNfY291bnQodW5zaWduZWQgaW50IGV2ZW50LAorCQkJc3RydWN0IHRyYW5zaWVudCAqIHRyYW5zLAorCQkJdW5zaWduZWQgaW50IGNvdW50KQoreworCWlic19kZXJpdmVkX2V2ZW50X3N0YXRzKys7CisJdHJhbnMtPmV2ZW50ID0gZXZlbnQ7CisJc2ZpbGVfbG9nX3NhbXBsZV9jb3VudCh0cmFucywgY291bnQpOworfQorCisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9pYnNfdmNpX2tleSh1bnNpZ25lZCBpbnQgZXZlbnQpCit7CisJdW5zaWduZWQgbG9uZyBrZXkgPSBpYnNfZXZlbnRfdG9fY291bnRlcihldmVudCk7CisJaWYgKGtleSA9PSB+MFVMIHx8IGtleSA8IE9QX01BWF9DT1VOVEVSUykKKwkJcmV0dXJuIH4wVUw7CisKKwlrZXkgPSBrZXkgLSBPUF9NQVhfQ09VTlRFUlM7CisKKwlyZXR1cm4ga2V5OworfQorCisKK3N0YXRpYyBpbnQgaWJzX3BhcnNlX2FuZF9zZXRfZXZlbnRzKGNoYXIgKiBzdHIpCit7CisJY2hhciAqIHRtcCwgKiBwdHIsICogdG9rMSwgKiB0b2syID0gTlVMTDsKKwlpbnQgaXNfZG9uZSA9IDA7CisJc3RydWN0IG9wX2V2ZW50ICogZXZlbnQgPSBOVUxMOworCW9wX2NwdSBjcHVfdHlwZSA9IENQVV9OT19HT09EOworCXVuc2lnbmVkIGxvbmcga2V5OworCisJaWYgKCFzdHIpCisJCXJldHVybiAtMTsKKworCWNwdV90eXBlID0gb3BfZ2V0X2NwdV90eXBlKCk7CisJb3BfZXZlbnRzKGNwdV90eXBlKTsKKworCXRtcCA9IG9wX3hzdHJuZHVwKHN0ciwgc3RybGVuKHN0cikpOworCXB0ciA9IHRtcDsKKworCXdoaWxlIChpc19kb25lICE9IDEKKwkJJiYgKHRvazEgPSBzdHJ0b2tfcihwdHIsICIsIiwgJnRvazIpKSAhPSBOVUxMKSB7CisKKwkJaWYgKChwdHIgPSBzdHJzdHIodG9rMSwgIjoiKSkgIT0gTlVMTCkgeworCQkJKnB0ciA9ICdcMCc7CisJCQlpc19kb25lID0gMTsKKwkJfQorCisJCS8vIFJlc292ZSBldmVudCBudW1iZXIKKwkJZXZlbnQgPSBmaW5kX2V2ZW50X2J5X25hbWUodG9rMSwgMCwgMCk7CisJCWlmICghZXZlbnQpCisJCQlyZXR1cm4gLTE7CisKKwkJLy8gR3JvdXBpbmcKKwkJaWYgKElTX0lCU19GRVRDSChldmVudC0+dmFsKSkgeworCQkJaWJzX2ZldGNoX3NlbGVjdGVkX2ZsYWcgfD0gMSA8PCBJQlNfRkVUQ0hfT0ZGU0VUKGV2ZW50LT52YWwpOworCQl9IGVsc2UgaWYgKElTX0lCU19PUChldmVudC0+dmFsKSkgeworCQkJaWJzX29wX3NlbGVjdGVkX2ZsYWcgfD0gMSA8PCBJQlNfT1BfT0ZGU0VUKGV2ZW50LT52YWwpOworCQl9IGVsc2UgaWYgKElTX0lCU19PUF9MUyhldmVudC0+dmFsKSkgeworCQkJaWJzX29wX2xzX3NlbGVjdGVkX2ZsYWcgfD0gMSA8PCBJQlNfT1BfTFNfT0ZGU0VUKGV2ZW50LT52YWwpOworCQl9IGVsc2UgaWYgKElTX0lCU19PUF9OQihldmVudC0+dmFsKSkgeworCQkJaWJzX29wX25iX3NlbGVjdGVkX2ZsYWcgfD0gMSA8PCBJQlNfT1BfTkJfT0ZGU0VUKGV2ZW50LT52YWwpOworCQl9IGVsc2UgeworCQkJcmV0dXJuIC0xOworCQl9CisKKwkJa2V5ID0gZ2V0X2lic192Y2lfa2V5KGV2ZW50LT52YWwpOworCQlpZiAoa2V5ID09IH4wVUwpCisJCQlyZXR1cm4gLTE7CisKKwkJaWJzX3ZjaV9tYXBba2V5XSA9IGlic19zZWxlY3RlZF9zaXplOworCisJCS8qIEluaXRpYWxpemUgcGFydCBvZiBpYnNfdmMgKi8KKwkJaWJzX3ZjW2lic19zZWxlY3RlZF9zaXplXS5uYW1lICAgID0gdG9rMTsKKwkJaWJzX3ZjW2lic19zZWxlY3RlZF9zaXplXS52YWx1ZSAgID0gZXZlbnQtPnZhbDsKKwkJaWJzX3ZjW2lic19zZWxlY3RlZF9zaXplXS5jb3VudGVyID0gaWJzX3NlbGVjdGVkX3NpemUgKyBPUF9NQVhfQ09VTlRFUlM7CisJCWlic192Y1tpYnNfc2VsZWN0ZWRfc2l6ZV0ua2VybmVsICA9IDE7CisJCWlic192Y1tpYnNfc2VsZWN0ZWRfc2l6ZV0udXNlciAgICA9IDE7CisKKwkJaWJzX3NlbGVjdGVkX3NpemUrKzsKKworCQlwdHIgPSBOVUxMOworCX0KKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgaWJzX3BhcnNlX2NvdW50cyhjaGFyICogc3RyLCB1bnNpZ25lZCBsb25nIGludCAqIGNvdW50KQoreworCWNoYXIgKiB0bXAsICogdG9rMSwgKiB0b2syID0gTlVMTCwgKmVuZCA9IE5VTEw7CisJaWYgKCFzdHIpCisJCXJldHVybiAtMTsKKworCXRtcCA9IG9wX3hzdHJuZHVwKHN0ciwgc3RybGVuKHN0cikpOworCXRvazEgPSBzdHJ0b2tfcih0bXAsICI6IiwgJnRvazIpOworCSpjb3VudCA9IHN0cnRvdWwodG9rMSwgJmVuZCwgMTApOworCWlmICgoZW5kICYmICplbmQpIHx8ICpjb3VudCA9PSAwCisJICAgIHx8IGVycm5vID09IEVJTlZBTCB8fCBlcnJubyA9PSBFUkFOR0UpIHsKKwkJZnByaW50ZihzdGRlcnIsIkludmFsaWQgY291bnQgKCVzKVxuIiwgc3RyKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgaWJzX3BhcnNlX2FuZF9zZXRfdW1fZmV0Y2goY2hhciBjb25zdCAqIHN0cikKK3sKKwlpZiAoIXN0cikKKwkJcmV0dXJuIC0xOworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgaWJzX3BhcnNlX2FuZF9zZXRfdW1fb3AoY2hhciBjb25zdCAqIHN0ciwgdW5zaWduZWQgbG9uZyBpbnQgKiBpYnNfb3BfdW0pCit7CisJY2hhciAqIGVuZCA9IE5VTEw7CisJaWYgKCFzdHIpCisJCXJldHVybiAtMTsKKworCSppYnNfb3BfdW0gPSBzdHJ0b3VsKHN0ciwgJmVuZCwgMTYpOworCWlmICgoZW5kICYmICplbmQpIHx8IGVycm5vID09IEVJTlZBTCB8fCBlcnJubyA9PSBFUkFOR0UpIHsKKwkJZnByaW50ZihzdGRlcnIsIkludmFsaWQgdW5pdG1ha3MgKCVzKVxuIiwgc3RyKTsKKwkJcmV0dXJuIC0xOworCX0KKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgdm9pZCBjaGVja19jcHVpZF9mYW1pbHlfbW9kZWxfc3RlcHBpbmcoKQoreworI2lmIGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykgCisJdW5zaWduZWQgZWF4ID0gY3B1aWRfc2lnbmF0dXJlKCk7CisKKwlpYnNfZmFtaWx5ICAgPSBjcHVfZmFtaWx5KGVheCk7CisJaWJzX21vZGVsICAgID0gY3B1X21vZGVsKGVheCk7CisJaWJzX3N0ZXBwaW5nID0gY3B1X3N0ZXBwaW5nKGVheCk7CisjZWxzZQorCWlic19mYW1pbHkgICA9IDA7CisJaWJzX21vZGVsICAgID0gMDsKKwlpYnNfc3RlcHBpbmcgPSAwOworI2VuZGlmCit9CisKKworc3RhdGljIGludCBpYnNfaW5pdChjaGFyIGNvbnN0ICogYXJndikKK3sKKwljaGFyICogdG1wLCAqIHB0ciwgKiB0b2sxLCAqIHRvazIgPSBOVUxMOworCXVuc2lnbmVkIGludCBpID0gMDsKKwl1bnNpZ25lZCBsb25nIGludCBpYnNfZmV0Y2hfY291bnQgPSAwOworCXVuc2lnbmVkIGxvbmcgaW50IGlic19vcF9jb3VudCA9IDA7CisJdW5zaWduZWQgbG9uZyBpbnQgaWJzX29wX3VtID0gMDsKKworCWlmICghYXJndikKKwkJcmV0dXJuIC0xOworCisJaWYgKGVtcHR5X2xpbmUoYXJndikgIT0gMCkKKwkJcmV0dXJuIC0xOworCisJdG1wID0gb3BfeHN0cm5kdXAoYXJndiwgc3RybGVuKGFyZ3YpKTsKKwlwdHIgPSAoY2hhciAqKSBza2lwX3dzKHRtcCk7CisKKwkvLyAiZmV0Y2g6ZXZlbnQxLGV2ZW50MiwuLi4uOmNvdW50OnVtfG9wOmV2ZW50MSxldmVudDIsLi4uLi46Y291bnQ6dW0iCisJdG9rMSA9IHN0cnRva19yKHB0ciwgInwiLCAmdG9rMik7CisKKwl3aGlsZSAodG9rMSAhPSBOVUxMKSB7CisKKwkJaWYgKCFzdHJuY21wKCJmZXRjaDoiLCB0b2sxLCBzdHJsZW4oImZldGNoOiIpKSkgeworCQkJLy8gR2V0IHRvIGV2ZW50IHNlY3Rpb24KKwkJCXRvazEgPSB0b2sxICsgc3RybGVuKCJmZXRjaDoiKTsKKwkJCWlmIChpYnNfcGFyc2VfYW5kX3NldF9ldmVudHModG9rMSkgPT0gLTEpCisJCQkJcmV0dXJuIC0xOworCisJCQkvLyBHZXQgdG8gY291bnQgc2VjdGlvbgorCQkJd2hpbGUgKHRvazEpIHsKKwkJCQlpZiAoKnRvazEgPT0gJ1wwJykKKwkJCQkJcmV0dXJuIC0xOworCQkJCWlmICgqdG9rMSAhPSAnOicpIHsKKwkJCQkJdG9rMSsrOworCQkJCX0gZWxzZSB7CisJCQkJCXRvazErKzsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCisJCQlpZiAoaWJzX3BhcnNlX2NvdW50cyh0b2sxLCAmaWJzX2ZldGNoX2NvdW50KSA9PSAtMSkKKwkJCQlyZXR1cm4gLTE7CisKKwkJCS8vIEdldCB0byB1bSBzZWN0aW9uCisJCQl3aGlsZSAodG9rMSkgeworCQkJCWlmICgqdG9rMSA9PSAnXDAnKQorCQkJCQlyZXR1cm4gLTE7CisJCQkJaWYgKCp0b2sxICE9ICc6JykgeworCQkJCQl0b2sxKys7CisJCQkJfSBlbHNlIHsKKwkJCQkJdG9rMSsrOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisKKwkJCWlmIChpYnNfcGFyc2VfYW5kX3NldF91bV9mZXRjaCh0b2sxKSA9PSAtMSkKKwkJCQlyZXR1cm4gLTE7CisKKwkJfSBlbHNlIGlmICghc3RybmNtcCgib3A6IiwgdG9rMSwgc3RybGVuKCJvcDoiKSkpIHsKKwkJCS8vIEdldCB0byBldmVudCBzZWN0aW9uCisJCQl0b2sxID0gdG9rMSArIHN0cmxlbigib3A6Iik7CisJCQlpZiAoaWJzX3BhcnNlX2FuZF9zZXRfZXZlbnRzKHRvazEpID09IC0xKQorCQkJCXJldHVybiAtMTsKKworCQkJLy8gR2V0IHRvIGNvdW50IHNlY3Rpb24KKwkJCXdoaWxlICh0b2sxKSB7CisJCQkJaWYgKCp0b2sxID09ICdcMCcpCisJCQkJCXJldHVybiAtMTsKKwkJCQlpZiAoKnRvazEgIT0gJzonKSB7CisJCQkJCXRvazErKzsKKwkJCQl9IGVsc2UgeworCQkJCQl0b2sxKys7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKworCQkJaWYgKGlic19wYXJzZV9jb3VudHModG9rMSwgJmlic19vcF9jb3VudCkgPT0gLTEpCisJCQkJcmV0dXJuIC0xOworCisJCQkvLyBHZXQgdG8gdW0gc2VjdGlvbgorCQkJd2hpbGUgKHRvazEpIHsKKwkJCQlpZiAoKnRvazEgPT0gJ1wwJykKKwkJCQkJcmV0dXJuIC0xOworCQkJCWlmICgqdG9rMSAhPSAnOicpIHsKKwkJCQkJdG9rMSsrOworCQkJCX0gZWxzZSB7CisJCQkJCXRvazErKzsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCisJCQlpZiAoaWJzX3BhcnNlX2FuZF9zZXRfdW1fb3AodG9rMSwgJmlic19vcF91bSkpCisJCQkJcmV0dXJuIC0xOworCisJCX0gZWxzZQorCQkJcmV0dXJuIC0xOworCisJCXRvazEgPSBzdHJ0b2tfcihOVUxMLCAifCIsICZ0b2syKTsKKwl9CisKKwkvKiBJbml0aWFsaXplIGlic192YyAqLworCWZvciAoaSA9IDAgOyBpIDwgaWJzX3NlbGVjdGVkX3NpemUgOyBpKyspCisJeworCQlpZiAoSVNfSUJTX0ZFVENIKGlic192Y1tpXS52YWx1ZSkpIHsKKwkJCWlic192Y1tpXS5jb3VudCAgID0gaWJzX2ZldGNoX2NvdW50OworCQkJaWJzX3ZjW2ldLnVtICAgICAgPSAwOworCQl9IGVsc2UgeworCQkJaWJzX3ZjW2ldLmNvdW50ICAgPSBpYnNfb3BfY291bnQ7CisJCQlpYnNfdmNbaV0udW0gICAgICA9IGlic19vcF91bTsKKwkJfQorCX0KKworCS8vIEFsbG93IG5vIGV2ZW50CisJbm9fZXZlbnRfb2sgPSAxOworCisJY2hlY2tfY3B1aWRfZmFtaWx5X21vZGVsX3N0ZXBwaW5nKCk7CisKKwlnZXRfaWJzX2J0YV9zdGF0dXMoKTsKKworCS8qIENyZWF0ZSBJQlMgbWVtb3J5IGFjY2VzcyBsb2cgKi8KKwltZW1hY2Nlc3NfbG9nID0gTlVMTDsKKwlpZiAoaWJzX29wX3VtICYgMHgyKSB7CisJCWNoYXIgZmlsZW5hbWVbUEFUSF9NQVhdOworCQljaGFyICogbG9nX2ZpbGUgPSAiL3NhbXBsZXMvaWJzX21lbWFjY2Vzcy5sb2ciOworCQlzaXplX3QgcGF0aF9sZW4gPSBzdHJsZW4oc2Vzc2lvbl9kaXIpICsgc3RybGVuKGxvZ19maWxlKTsKKwkJaWYgKHBhdGhfbGVuIDwgUEFUSF9NQVgpIHsKKwkJCXN0cmNweShmaWxlbmFtZSwgc2Vzc2lvbl9kaXIpOworCQkJc3RyY2F0KGZpbGVuYW1lLCBsb2dfZmlsZSk7CisJCQltZW1hY2Nlc3NfbG9nID0gZm9wZW4oZmlsZW5hbWUsICJ3Iik7CisJCX0KKwkJaWYgKCBtZW1hY2Nlc3NfbG9nID09IE5VTEwpIHsKKwkJCXZlcmJwcmludGYodmV4dCwgIldhcm5pbmc6IENhbm5vdCBjcmVhdGUgaWJzX21lbWFjY2Vzcy5sb2dcbiIpOworCQkJCisJCX0gZWxzZSB7CisJCQlmcHJpbnRmIChtZW1hY2Nlc3NfbG9nLCAiIyBJQlMgTWVtb3J5IEFjY2VzcyBMb2dcblxuIik7CisJCQlmcHJpbnRmIChtZW1hY2Nlc3NfbG9nLCAiIyBGb3JtYXQ6IGFwcF9jb29raWUsY29va2llLGNwdSx0Z2lkLHRpZCxwYyxicmFuY2gtdGFyZ2V0LWFkZHJlc3MsXG4iKTsKKwkJCWZwcmludGYgKG1lbWFjY2Vzc19sb2csICIjICAgICAgICAgcGh5LWhpOnBoeS1sb3csbGluLWhpOmxpbi1sb3csYWNjZXNlLXR5cGUsbGF0ZW5jeVxuXG4iKTsKKwkJfQorCX0KKworCS8vIENyZWF0ZSBJQlMgQnJhbmNoIFRhcmdldCBBZGRyZXNzIChCVEEpIGxvZwkKKwlidGFfbG9nID0gTlVMTDsKKwlpZiAoaWJzX2J0YV9lbmFibGVkKSB7CisJCWNoYXIgZmlsZW5hbWVbUEFUSF9NQVhdOworCQljaGFyICogbG9nX2ZpbGUgPSAiL3NhbXBsZXMvaWJzX2J0YS5sb2ciOworCQlzaXplX3QgcGF0aF9sZW4gPSBzdHJsZW4oc2Vzc2lvbl9kaXIpICsgc3RybGVuKGxvZ19maWxlKTsKKwkJaWYgKHBhdGhfbGVuIDwgUEFUSF9NQVgpIHsKKwkJCXN0cmNweShmaWxlbmFtZSwgc2Vzc2lvbl9kaXIpOworCQkJc3RyY2F0KGZpbGVuYW1lLCBsb2dfZmlsZSk7CisJCQlidGFfbG9nID0gZm9wZW4oZmlsZW5hbWUsICJ3Iik7CisJCX0KKwkJaWYgKCBidGFfbG9nID09IE5VTEwpIHsKKwkJCXZlcmJwcmludGYodmV4dCwgIldhcm5pbmc6IENhbm5vdCBjcmVhdGUgaWJzX2J0YS5sb2dcbiIpOworCQl9IGVsc2UgeworCQkJZnByaW50ZiAoYnRhX2xvZywgIiMgSUJTIE1lbW9yeSBBY2Nlc3MgTG9nXG5cbiIpOworCQkJZnByaW50ZiAoYnRhX2xvZywgIiMgRm9ybWF0OiBhcHBfY29va2llLGNvb2tpZSxjcHUsdGdpZCx0aWQscGMsYnJhbmNoLXRhcmdldC1hZGRyZXNzXG5cbiIpOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCBpYnNfZGVpbml0KCkKK3sKKwlpZiAobWVtYWNjZXNzX2xvZykgeworCQlmY2xvc2UgKG1lbWFjY2Vzc19sb2cpOworCQltZW1hY2Nlc3NfbG9nID0gTlVMTDsKKwl9CisJCisJaWYgKGJ0YV9sb2cpIHsKKwkJZmNsb3NlIChidGFfbG9nKTsKKwkJYnRhX2xvZyA9IE5VTEw7CisJfQorCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgaWJzX3ByaW50X3N0YXRzKCkKK3sKKwlwcmludGYoIk5yLiBJQlMgRmV0Y2ggc2FtcGxlcyAgICAgOiAlbHUgKCVsdSBlbnRyaWVzKVxuIiwgCisJCWlic19mZXRjaF9zYW1wbGVfc3RhdHMsIChpYnNfZmV0Y2hfc2FtcGxlX3N0YXRzICogNykpOworCXByaW50ZigiTnIuIElCUyBGZXRjaCBpbmNvbXBsZXRlcyA6ICVsdVxuIiwgaWJzX2ZldGNoX2luY29tcGxldGVfc3RhdHMpOworCXByaW50ZigiTnIuIElCUyBPcCBzYW1wbGVzICAgICAgICA6ICVsdSAoJWx1IGVudHJpZXMpXG4iLCAKKwkJaWJzX29wX3NhbXBsZV9zdGF0cywgKGlic19vcF9zYW1wbGVfc3RhdHMgKiAxMykpOworCXByaW50ZigiTnIuIElCUyBPcCBpbmNvbXBsZXRlcyAgICA6ICVsdVxuIiwgaWJzX29wX2luY29tcGxldGVfc3RhdHMpOworCXByaW50ZigiTnIuIElCUyBkZXJpdmVkIGV2ZW50cyAgICA6ICVsdVxuIiwgaWJzX2Rlcml2ZWRfZXZlbnRfc3RhdHMpOworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgaWJzX3NmaWxlX2NyZWF0ZShzdHJ1Y3Qgc2ZpbGUgKiBzZikKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwlzZi0+ZXh0X2ZpbGVzID0geG1hbGxvYyhpYnNfc2VsZWN0ZWRfc2l6ZSAqIHNpemVvZihvZGJfdCkpOworCWZvciAoaSA9IDAgOyBpIDwgaWJzX3NlbGVjdGVkX3NpemUgOyArK2kpCisJCW9kYl9pbml0KCZzZi0+ZXh0X2ZpbGVzW2ldKTsKKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgaWJzX3NmaWxlX2R1cCAoc3RydWN0IHNmaWxlICogdG8sIHN0cnVjdCBzZmlsZSAqIGZyb20pCit7CisJdW5zaWduZWQgaW50IGk7CisJaWYgKGZyb20tPmV4dF9maWxlcyAhPSBOVUxMKSB7CisJCXRvLT5leHRfZmlsZXMgPSB4bWFsbG9jKGlic19zZWxlY3RlZF9zaXplICogc2l6ZW9mKG9kYl90KSk7CisJCWZvciAoaSA9IDAgOyBpIDwgaWJzX3NlbGVjdGVkX3NpemUgOyArK2kpCisJCQlvZGJfaW5pdCgmdG8tPmV4dF9maWxlc1tpXSk7CisJfSBlbHNlIHsKKwkJdG8tPmV4dF9maWxlcyA9IE5VTEw7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGlic19zZmlsZV9jbG9zZShzdHJ1Y3Qgc2ZpbGUgKiBzZikKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwlpZiAoc2YtPmV4dF9maWxlcyAhPSBOVUxMKSB7CisJCWZvciAoaSA9IDA7IGkgPCBpYnNfc2VsZWN0ZWRfc2l6ZSA7ICsraSkKKwkJCW9kYl9jbG9zZSgmc2YtPmV4dF9maWxlc1tpXSk7CisKKwkJZnJlZShzZi0+ZXh0X2ZpbGVzKTsKKwkJc2YtPmV4dF9maWxlcz0gTlVMTDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaWJzX3NmaWxlX3N5bmMoc3RydWN0IHNmaWxlICogc2YpCit7CisJdW5zaWduZWQgaW50IGk7CisJaWYgKHNmLT5leHRfZmlsZXMgIT0gTlVMTCkgeworCQlmb3IgKGkgPSAwOyBpIDwgaWJzX3NlbGVjdGVkX3NpemUgOyArK2kpCisJCQlvZGJfc3luYygmc2YtPmV4dF9maWxlc1tpXSk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgb2RiX3QgKiBpYnNfc2ZpbGVfZ2V0KHN0cnVjdCB0cmFuc2llbnQgY29uc3QgKiB0cmFucywgaW50IGlzX2NnKQoreworCXN0cnVjdCBzZmlsZSAqIHNmID0gdHJhbnMtPmN1cnJlbnQ7CisJc3RydWN0IHNmaWxlICogbGFzdCA9IHRyYW5zLT5sYXN0OworCXN0cnVjdCBjZ19lbnRyeSAqIGNnOworCXN0cnVjdCBsaXN0X2hlYWQgKiBwb3M7CisJdW5zaWduZWQgbG9uZyBoYXNoOworCW9kYl90ICogZmlsZTsKKwl1bnNpZ25lZCBsb25nIGNvdW50ZXIsIGlic192Y2ksIGtleTsKKworCS8qIE5vdGU6ICJ0cmFucy0+ZXZlbnQiIGZvciBJQlMgaXMgbm90IHRoZSBzYW1lIGFzIHRyYWRpdGlvbmFsCisgCSAqIGV2ZW50cy4gIEhlcmUsIGl0IGhhcyB0aGUgYWN0dWFsIGV2ZW50ICgweGZ4eHgpLCB3aGlsZSB0aGUKKyAJICogdHJhZGl0aW9uYWwgZXZlbnQgaGFzIHRoZSBldmVudCBpbmRleC4KKyAJICovCisJa2V5ID0gZ2V0X2lic192Y2lfa2V5KHRyYW5zLT5ldmVudCk7CisJaWYgKGtleSA9PSB+MFVMKSB7CisJCWZwcmludGYoc3RkZXJyLCAiJXM6IEludmFsaWQgSUJTIGV2ZW50ICVsdVxuIiwgX19mdW5jX18sIHRyYW5zLT5ldmVudCk7CisJCWFib3J0KCk7CisJfQorCWlic192Y2kgPSBpYnNfdmNpX21hcFtrZXldOworCWNvdW50ZXIgPSBpYnNfdmNpICsgT1BfTUFYX0NPVU5URVJTOworCisJLyogQ3JlYXRpbmcgSUJTIHNmaWxlIGlmIGl0IG5vdCBhbHJlYWR5IGV4aXN0cyAqLworCWlmIChzZi0+ZXh0X2ZpbGVzID09IE5VTEwpCisJCWlic19zZmlsZV9jcmVhdGUoc2YpOworCisJZmlsZSA9ICYoc2YtPmV4dF9maWxlc1tpYnNfdmNpXSk7CisJaWYgKCFpc19jZykKKwkJZ290byBvcGVuOworCisJaGFzaCA9IGxhc3QtPmhhc2h2YWwgJiAoQ0dfSEFTSF9TSVpFIC0gMSk7CisKKwkvKiBOZWVkIHRvIGxvb2sgZm9yIHRoZSByaWdodCAndG8nLiBTaW5jZSB3ZSdyZSBsb29raW5nIGZvcgorCSAqICdsYXN0Jywgd2UgdXNlIGl0cyBoYXNoLgorCSAqLworCWxpc3RfZm9yX2VhY2gocG9zLCAmc2YtPmNnX2hhc2hbaGFzaF0pIHsKKwkJY2cgPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IGNnX2VudHJ5LCBoYXNoKTsKKwkJaWYgKHNmaWxlX2VxdWFsKGxhc3QsICZjZy0+dG8pKSB7CisJCQlmaWxlID0gJihjZy0+dG8uZXh0X2ZpbGVzW2lic192Y2ldKTsKKwkJCWdvdG8gb3BlbjsKKwkJfQorCX0KKworCWNnID0geG1hbGxvYyhzaXplb2Yoc3RydWN0IGNnX2VudHJ5KSk7CisJc2ZpbGVfZHVwKCZjZy0+dG8sIGxhc3QpOworCWxpc3RfYWRkKCZjZy0+aGFzaCwgJnNmLT5jZ19oYXNoW2hhc2hdKTsKKwlmaWxlID0gJihjZy0+dG8uZXh0X2ZpbGVzW2lic192Y2ldKTsKKworb3BlbjoKKwlpZiAoIW9kYl9vcGVuX2NvdW50KGZpbGUpKQorCQlvcGRfb3Blbl9zYW1wbGVfZmlsZShmaWxlLCBsYXN0LCBzZiwgY291bnRlciwgaXNfY2cpOworCisJLyogRXJyb3IgaXMgbG9nZ2VkIGJ5IG9wZF9vcGVuX3NhbXBsZV9maWxlICovCisJaWYgKCFvZGJfb3Blbl9jb3VudChmaWxlKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXR1cm4gZmlsZTsKK30KKworCisvKiogRmlsbGVkIG9wZF9ldmVudCBzdHJ1Y3R1cmUgd2l0aCBJQlMgZGVyaXZlZCBldmVudCBpbmZvcm1hdGlvbgorICogIGZyb20gdGhlIGdpdmVuIGNvdW50ZXIgdmFsdWUuCisgKi8KK3N0YXRpYyBzdHJ1Y3Qgb3BkX2V2ZW50ICogaWJzX3NmaWxlX2ZpbmRfY291bnRlcl9ldmVudCh1bnNpZ25lZCBsb25nIGNvdW50ZXIpCit7CisJdW5zaWduZWQgbG9uZyBpYnNfdmNpOworCisJaWYgKGNvdW50ZXIgPj0gT1BfTUFYX0NPVU5URVJTICsgT1BfTUFYX0lCU19DT1VOVEVSUworCSAgICB8fCBjb3VudGVyIDwgT1BfTUFYX0NPVU5URVJTKSB7CisJCWZwcmludGYoc3RkZXJyLCJFcnJvcjogZmluZF9pYnNfY291bnRlcl9ldmVudCA6ICIKKwkJCQkiaW52YWxpZCBjb3VudGVyIHZhbHVlICVsdS5cbiIsIGNvdW50ZXIpOworCQlhYm9ydCgpOworCX0KKworCWlic192Y2kgPSBjb3VudGVyIC0gT1BfTUFYX0NPVU5URVJTOworCXJldHVybiAmaWJzX3ZjW2lic192Y2ldOworfQorCisKK3N0cnVjdCBvcGRfZXh0X3NmaWxlX2hhbmRsZXJzIGlic19zZmlsZV9oYW5kbGVycyA9Cit7CisJLmNyZWF0ZSA9ICZpYnNfc2ZpbGVfY3JlYXRlLAorCS5kdXAgICAgPSAmaWJzX3NmaWxlX2R1cCwKKwkuY2xvc2UgID0gJmlic19zZmlsZV9jbG9zZSwKKwkuc3luYyAgID0gJmlic19zZmlsZV9zeW5jLAorCS5nZXQgICAgPSAmaWJzX3NmaWxlX2dldCwKKwkuZmluZF9jb3VudGVyX2V2ZW50ID0gJmlic19zZmlsZV9maW5kX2NvdW50ZXJfZXZlbnQKK307CisKKworc3RydWN0IG9wZF9leHRfaGFuZGxlcnMgaWJzX2hhbmRsZXJzID0KK3sKKwkuZXh0X2luaXQgICAgICAgID0gJmlic19pbml0LAorCS5leHRfZGVpbml0ICAgICAgPSAmaWJzX2RlaW5pdCwKKwkuZXh0X3ByaW50X3N0YXRzID0gJmlic19wcmludF9zdGF0cywKKwkuZXh0X3NmaWxlICAgICAgID0gJmlic19zZmlsZV9oYW5kbGVycworfTsKZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2RhZW1vbi9vcGRfaWJzLmggYi9vcHJvZmlsZS0wLjkuNy9kYWVtb24vb3BkX2licy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmMGZkNjQKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9kYWVtb24vb3BkX2licy5oCkBAIC0wLDAgKzEsMTMzIEBACisvKioKKyAqIEBmaWxlIGRhZW1vbi9vcGRfaWJzLmgKKyAqIEFNRCBGYW1pbHkxMGggSW5zdHJ1Y3Rpb24gQmFzZWQgU2FtcGxpbmcgKElCUykgaGFuZGxpbmcuCisgKgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwOC0yMDEwIE9Qcm9maWxlIGF1dGhvcnMKKyAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCisgKgorICogQGF1dGhvciBKYXNvbiBZZWggPGphc29uLnllaEBhbWQuY29tPgorICogQGF1dGhvciBQYXVsIERyb25nb3dza2kgPHBhdWwuZHJvbmdvd3NraUBhbWQuY29tPgorICogQGF1dGhvciBTdXJhdmVlIFN1dGhpa3VscGFuaXQgPHN1cmF2ZWUuc3V0aGlrdWxwYW5pdEBhbWQuY29tPgorICogQ29weXJpZ2h0IChjKSAyMDA4IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4KKyAqLworCisjaWZuZGVmIE9QRF9JQlNfSAorI2RlZmluZSBPUERfSUJTX0gKKworI2luY2x1ZGUgPHN0ZGludC5oPgorCisjaW5jbHVkZSAib3BkX2lic19tYWNyby5oIgorCitzdHJ1Y3QgdHJhbnNpZW50Oworc3RydWN0IG9wZF9ldmVudDsKKworLyoqCisgKiBJQlMgaW5mb3JtYXRpb24gaXMgcHJvY2Vzc2VkIGluIHR3byBzdGVwcy4gVGhlIGZpcnN0IHN0ZXAgZGVjb2RlcworICogaGFyZHdhcmUtbGV2ZWwgSUJTIGluZm9ybWF0aW9uIGFuZCBzYXZlcyBpdCBpbiBkZWNvZGVkIGZvcm0uIFRoZQorICogc2Vjb25kIHN0ZXAgdHJhbnNsYXRlcyB0aGUgZGVjb2RlZCBJQlMgaW5mb3JtYXRpb24gaW50byBJQlMgZGVyaXZlZAorICogZXZlbnRzLiBJQlMgaW5mb3JtYXRpb24gaXMgdGFsbGllZCBhbmQgaXMgcmVwb3J0ZWQgYXMgZGVyaXZlZCBldmVudHMuCisgKi8KKworc3RydWN0IGlic19zYW1wbGUgeworCXN0cnVjdCBpYnNfZmV0Y2hfc2FtcGxlICogZmV0Y2g7CisJc3RydWN0IGlic19vcF9zYW1wbGUgKiBvcDsKK307CisKKy8qKgorICogVGhpcyBzdHJ1Y3QgcmVwcmVzZW50cyB0aGUgaGFyZHdhcmUtbGV2ZWwgSUJTIGZldGNoIGluZm9ybWF0aW9uLgorICogRWFjaCBmaWVsZCBjb3JyZXNwb25kcyB0byBhIG1vZGVsLXNwZWNpZmljIHJlZ2lzdGVyIChNU1IuKSBTZWUgdGhlCisgKiBCSU9TIGFuZCBLZXJuZWwgRGV2ZWxvcGVyJ3MgR3VpZGUgZm9yIEFNRCBNb2RlbCBGYW1pbHkgMTBoIFByb2Nlc3NvcnMKKyAqIGZvciBmdXJ0aGVyIGRldGFpbHMuCisgKi8KK3N0cnVjdCBpYnNfZmV0Y2hfc2FtcGxlIHsKKwl1bnNpZ25lZCBsb25nIGludCByaXA7CisJLyogTVNSQzAwMV8xMDMwIElCUyBGZXRjaCBDb250cm9sIFJlZ2lzdGVyICovCisJdW5zaWduZWQgaW50IGlic19mZXRjaF9jdGxfbG93OworCXVuc2lnbmVkIGludCBpYnNfZmV0Y2hfY3RsX2hpZ2g7CisJLyogTVNSQzAwMV8xMDMxIElCUyBGZXRjaCBMaW5lYXIgQWRkcmVzcyBSZWdpc3RlciAqLworCXVuc2lnbmVkIGludCBpYnNfZmV0Y2hfbGluX2FkZHJfbG93OworCXVuc2lnbmVkIGludCBpYnNfZmV0Y2hfbGluX2FkZHJfaGlnaDsKKwkvKiBNU1JDMDAxXzEwMzIgSUJTIEZldGNoIFBoeXNpY2FsIEFkZHJlc3MgUmVnaXN0ZXIgKi8KKwl1bnNpZ25lZCBpbnQgaWJzX2ZldGNoX3BoeXNfYWRkcl9sb3c7CisJdW5zaWduZWQgaW50IGlic19mZXRjaF9waHlzX2FkZHJfaGlnaDsKKwl1bnNpZ25lZCBpbnQgZHVtbXlfZXZlbnQ7Cit9OworCisKKworLyoqIFRoaXMgc3RydWN0IHJlcHJlc2VudHMgdGhlIGhhcmR3YXJlLWxldmVsIElCUyBvcCBpbmZvcm1hdGlvbi4gKi8KK3N0cnVjdCBpYnNfb3Bfc2FtcGxlIHsKKwl1bnNpZ25lZCBsb25nIGludCByaXA7CisJLyogTVNSQzAwMV8xMDM0IElCUyBPcCBMb2dpY2FsIEFkZHJlc3MgUmVnaXN0ZXIgKi8KKwl1bnNpZ25lZCBpbnQgaWJzX29wX2xpbl9hZGRyX2xvdzsKKwl1bnNpZ25lZCBpbnQgaWJzX29wX2xpbl9hZGRyX2hpZ2g7CisJLyogTVNSQzAwMV8xMDM1IElCUyBPcCBEYXRhIFJlZ2lzdGVyICovCisJdW5zaWduZWQgaW50IGlic19vcF9kYXRhMV9sb3c7CisJdW5zaWduZWQgaW50IGlic19vcF9kYXRhMV9oaWdoOworCS8qIE1TUkMwMDFfMTAzNiBJQlMgT3AgRGF0YSAyIFJlZ2lzdGVyICovCisJdW5zaWduZWQgaW50IGlic19vcF9kYXRhMl9sb3c7CisJdW5zaWduZWQgaW50IGlic19vcF9kYXRhMl9oaWdoOworCS8qIE1TUkMwMDFfMTAzNyBJQlMgT3AgRGF0YSAzIFJlZ2lzdGVyICovCisJdW5zaWduZWQgaW50IGlic19vcF9kYXRhM19sb3c7CisJdW5zaWduZWQgaW50IGlic19vcF9kYXRhM19oaWdoOworCS8qIE1TUkMwMDFfMTAzOCBJQlMgREMgTGluZWFyIEFkZHJlc3MgKi8KKwl1bnNpZ25lZCBpbnQgaWJzX29wX2xkc3RfbGluYWRkcl9sb3c7CisJdW5zaWduZWQgaW50IGlic19vcF9sZHN0X2xpbmFkZHJfaGlnaDsKKwkvKiBNU1JDMDAxXzEwMzkgSUJTIERDIFBoeXNpY2FsIEFkZHJlc3MgKi8KKwl1bnNpZ25lZCBpbnQgaWJzX29wX3BoeXNfYWRkcl9sb3c7CisJdW5zaWduZWQgaW50IGlic19vcF9waHlzX2FkZHJfaGlnaDsKKwkvKiBNU1JDMDAxXzEwM0IgSUJTIEJyYW5jaCBUYXJnZXQgQWRkcmVzcyAqLworCXVuc2lnbmVkIGxvbmcgaWJzX29wX2JydGd0X2FkZHI7Cit9OworCisKKy8qKgorICogSGFuZGxlIGFuIElCUyBmZXRjaCBzYW1wbGUgZXNjYXBlIGNvZGUgc2VxdWVuY2UuIEFuIElCUyBmZXRjaCBzYW1wbGUKKyAqIGlzIHJlcHJlc2VudGVkIGFzIGFuIGVzY2FwZSBjb2RlIHNlcXVlbmNlLiAoU2VlIHRoZSBjb21tZW50IGZvciB0aGUKKyAqIGZ1bmN0aW9uIGNvZGVfaWJzX29wX3NhbXBsZSgpIGZvciB0aGUgc2VxdWVuY2Ugb2YgZW50cmllcyBpbiB0aGUgZXZlbnQKKyAqIGJ1ZmZlci4pIFdoZW4gdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQsIHRoZSBFU0NBUEVfQ09ERSBhbmQgSUJTX0ZFVENIX0NPREUKKyAqIGhhdmUgYWxyZWFkeSBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgZXZlbnQgYnVmZmVyLiBUaHVzLCA3IG1vcmUgZXZlbnQgYnVmZmVyCisgKiBlbnRyaWVzIGFyZSBuZWVkZWQgaW4gb3JkZXIgdG8gcHJvY2VzcyBhIGNvbXBsZXRlIElCUyBmZXRjaCBzYW1wbGUuCisgKi8KK2V4dGVybiB2b2lkIGNvZGVfaWJzX2ZldGNoX3NhbXBsZShzdHJ1Y3QgdHJhbnNpZW50ICogdHJhbnMpOworCisvKioKKyAqIEhhbmRsZSBhbiBJQlMgb3Agc2FtcGxlIGVzY2FwZSBjb2RlIHNlcXVlbmNlLiBBbiBJQlMgb3Agc2FtcGxlCisgKiBpcyByZXByZXNlbnRlZCBhcyBhbiBlc2NhcGUgY29kZSBzZXF1ZW5jZToKKyAqCisgKiAgICBJQlMgZmV0Y2ggICAgICAgICAgICAgIElCUyBvcAorICogICAgLS0tLS0tLS0tLS0tLS0tICAgICAgICAtLS0tLS0tLS0tLS0tLS0tCisgKiAgICBFU0NBUEVfQ09ERSAgICAgICAgICAgIEVTQ0FQRV9DT0RFCisgKiAgICBJQlNfRkVUQ0hfQ09ERSAgICAgICAgIElCU19PUF9DT0RFCisgKiAgICBPZmZzZXQgICAgICAgICAgICAgICAgIE9mZnNldAorICogICAgSWJzRmV0Y2hMaW5BZCBsb3cgICAgICBJYnNPcFJpcCBsb3cgICAgICAgIDwtLSBMb2dpY2FsICh2aXJ0dWFsKSBSSVAKKyAqICAgIElic0ZldGNoTGluQWQgaGlnaCAgICAgSWJzT3BSaXAgaGlnaCAgICAgICA8LS0gTG9naWNhbCAodmlydHVhbCkgUklQCisgKiAgICBJYnNGZXRjaEN0bCBsb3cgICAgICAgIElic09wRGF0YSBsb3cKKyAqICAgIElic0ZldGNoQ3RsIGhpZ2ggICAgICAgSWJzT3BEYXRhIGhpZ2gKKyAqICAgIElic0ZldGNoUGh5c0FkIGxvdyAgICAgSWJzT3BEYXRhMiBsb3cKKyAqICAgIElic0ZldGNoUGh5c0FkIGhpZ2ggICAgSWJzT3BEYXRhMiBoaWdoCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIElic09wRGF0YTMgbG93CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIElic09wRGF0YTMgaGlnaAorICogICAgICAgICAgICAgICAgICAgICAgICAgICBJYnNEY0xpbkFkIGxvdworICogICAgICAgICAgICAgICAgICAgICAgICAgICBJYnNEY0xpbkFkIGhpZ2gKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgSWJzRGNQaHlzQWQgbG93CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIElic0RjUGh5c0FkIGhpZ2gKKyAqCisgKiBXaGVuIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLCB0aGUgRVNDQVBFX0NPREUgYW5kIElCU19PUF9DT0RFIGhhdmUKKyAqIGFscmVhZHkgYmVlbiByZW1vdmVkIGZyb20gdGhlIGV2ZW50IGJ1ZmZlci4gVGh1cywgMTMgbW9yZSBldmVudCBidWZmZXIKKyAqIGVudHJpZXMgYXJlIG5lZWRlZCB0byBwcm9jZXNzIGEgY29tcGxldGUgSUJTIG9wIHNhbXBsZS4KKyAqCisgKiBUaGUgSWJzRmV0Y2hMaW5BZCBhbmQgSWJzT3BSaXAgYXJlIHRoZSBsaW5lYXIgKHZpcnR1YWwpIGFkZHJlc3NlcworICogdGhhdCB3ZXJlIGdlbmVyYXRlZCBieSB0aGUgSUJTIGhhcmR3YXJlLiBUaGVzZSBhZGRyZXNzZXMgYXJlIG1hcHBlZAorICogaW50byB0aGUgb2Zmc2V0LgorICovCitleHRlcm4gdm9pZCBjb2RlX2lic19vcF9zYW1wbGUoc3RydWN0IHRyYW5zaWVudCAqIHRyYW5zKTsKKworLyoqIExvZyB0aGUgc3BlY2lmaWVkIElCUyBkZXJpdmVkIGV2ZW50LiAqLworZXh0ZXJuIHZvaWQgb3BkX2xvZ19pYnNfZXZlbnQodW5zaWduZWQgaW50IGV2ZW50LCBzdHJ1Y3QgdHJhbnNpZW50ICogdHJhbnMpOworCisvKiogTG9nIHRoZSBzcGVjaWZpZWQgSUJTIGN5Y2xlIGNvdW50LiAqLworZXh0ZXJuIHZvaWQgb3BkX2xvZ19pYnNfY291bnQodW5zaWduZWQgaW50IGV2ZW50LCBzdHJ1Y3QgdHJhbnNpZW50ICogdHJhbnMsIHVuc2lnbmVkIGludCBjb3VudCk7CisKKworI2VuZGlmIC8qT1BEX0lCU19IKi8KZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2RhZW1vbi9vcGRfaWJzX21hY3JvLmggYi9vcHJvZmlsZS0wLjkuNy9kYWVtb24vb3BkX2lic19tYWNyby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiZmNmMTcKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9kYWVtb24vb3BkX2lic19tYWNyby5oCkBAIC0wLDAgKzEsMzk3IEBACisvKioKKyAqIEBmaWxlIGRhZW1vbi9vcGRfaWJzX21hY3JvLmgKKyAqIEFNRCBJbnN0cnVjdGlvbiBCYXNlZCBTYW1wbGluZyAoSUJTKSByZWxhdGVkIG1hY3JvLgorICoKKyAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDgtMjAxMCBPUHJvZmlsZSBhdXRob3JzCisgKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORworICoKKyAqIEBhdXRob3IgSmFzb24gWWVoIDxqYXNvbi55ZWhAYW1kLmNvbT4KKyAqIEBhdXRob3IgUGF1bCBEcm9uZ293c2tpIDxwYXVsLmRyb25nb3dza2lAYW1kLmNvbT4KKyAqIEBhdXRob3IgU3VyYXZlZSBTdXRoaWt1bHBhbml0IDxzdXJhdmVlLnN1dGhpa3VscGFuaXRAYW1kLmNvbT4KKyAqIENvcHlyaWdodCAoYykgMjAwOCBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCisgKi8KKworI2lmbmRlZiBPUERfSUJTX01BQ1JPX0gKKyNkZWZpbmUgT1BEX0lCU19NQUNST19ICisKKy8qKgorICogVGhlIGZvbGxvd2luZyBkZWZpbmVzIGFyZSBiaXQgbWFza3MgdGhhdCBhcmUgdXNlZCB0byBzZWxlY3QKKyAqIElCUyBmZXRjaCBldmVudCBmbGFncyBhbmQgdmFsdWVzIGF0IHRoZQorICogTVNSQzAwMV8xMDMwIElCUyBGZXRjaCBDb250cm9sIFJlZ2lzdGVyIChJYnNGZXRjaEN0bCkKKyAqLworI2RlZmluZSBGRVRDSF9NQVNLX0xBVEVOQ1kgIDB4MDAwMGZmZmYKKyNkZWZpbmUgRkVUQ0hfTUFTS19DT01QTEVURSAweDAwMDQwMDAwCisjZGVmaW5lIEZFVENIX01BU0tfSUNfTUlTUyAgMHgwMDA4MDAwMAorI2RlZmluZSBGRVRDSF9NQVNLX1BIWV9BRERSIDB4MDAxMDAwMDAKKyNkZWZpbmUgRkVUQ0hfTUFTS19QR19TSVpFICAweDAwNjAwMDAwCisjZGVmaW5lIEZFVENIX01BU0tfTDFfTUlTUyAgMHgwMDgwMDAwMAorI2RlZmluZSBGRVRDSF9NQVNLX0wyX01JU1MgIDB4MDEwMDAwMDAKKyNkZWZpbmUgRkVUQ0hfTUFTS19LSUxMRUQgICBcCisJCShGRVRDSF9NQVNLX0wxX01JU1N8RkVUQ0hfTUFTS19MMl9NSVNTfEZFVENIX01BU0tfUEhZX0FERFJ8XAorCQlGRVRDSF9NQVNLX0NPTVBMRVRFfEZFVENIX01BU0tfSUNfTUlTUykKKworCisvKioKKyAqIFRoZSBmb2xsb3dpbmcgZGVmaW5lcyBhcmUgYml0IG1hc2tzIHRoYXQgYXJlIHVzZWQgdG8gc2VsZWN0CisgKiBJQlMgb3AgZXZlbnQgZmxhZ3MgYW5kIHZhbHVlcyBhdCB0aGUgTVNSIGxldmVsLgorICovCisKKy8qIE1TUkMwMDFfMTAzNSBJQlMgT3AgRGF0YSBSZWdpc3RlciAoSWJzT3BEYXRhKSAqLworI2RlZmluZSBCUl9NQVNLX1JFVElSRSAgICAgICAgICAgMHgwMDAwZmZmZgorI2RlZmluZSBNQVNLX1JJUF9JTlZBTElEICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBCUl9NQVNLX0JSTl9SRVQgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBCUl9NQVNLX0JSTl9NSVNQICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBCUl9NQVNLX0JSTl9UQUtFTiAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBCUl9NQVNLX1JFVFVSTiAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBCUl9NQVNLX01JU1BfUkVUVVJOICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBCUl9NQVNLX0JSTl9SRVNZTkMgICAgICAgMHgwMDAwMDAwMQorCisvKiBNU1JDMDAxXzEwMzYgSUJTIE9wIERhdGEgUmVnaXN0ZXIgKElic09wRGF0YTIpICovCisjZGVmaW5lIE5CX01BU0tfTDNfU1RBVEUgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIE5CX01BU0tfUkVRX0RTVF9QUk9DICAgICAweDAwMDAwMDEwCisjZGVmaW5lIE5CX01BU0tfUkVRX0RBVEFfU1JDICAgICAweDAwMDAwMDA3CisKKy8qIE1TUkMwMDFfMTAzNyBJQlMgT3AgRGF0YSBSZWdpc3RlciAoSWJzT3BEYXRhMykgKi8KKyNkZWZpbmUgRENfTUFTS19MMl9ISVRfMUcgICAgICAgIDB4MDAwODAwMDAKKyNkZWZpbmUgRENfTUFTS19QSFlfQUREUl9WQUxJRCAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgRENfTUFTS19MSU5fQUREUl9WQUxJRCAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgRENfTUFTS19NQUJfSElUICAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgRENfTUFTS19MT0NLRURfT1AgICAgICAgIDB4MDAwMDgwMDAKKyNkZWZpbmUgRENfTUFTS19VQ19NRU1fQUNDRVNTICAgIDB4MDAwMDQwMDAKKyNkZWZpbmUgRENfTUFTS19XQ19NRU1fQUNDRVNTICAgIDB4MDAwMDIwMDAKKyNkZWZpbmUgRENfTUFTS19TVF9UT19MRF9DQU5DRUwgIDB4MDAwMDEwMDAKKyNkZWZpbmUgRENfTUFTS19TVF9UT19MRF9GT1IgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgRENfTUFTS19TVF9CQU5LX0NPTkZMSUNUIDB4MDAwMDA0MDAKKyNkZWZpbmUgRENfTUFTS19MRF9CQU5LX0NPTkZMSUNUIDB4MDAwMDAyMDAKKyNkZWZpbmUgRENfTUFTS19NSVNBTElHTl9BQ0NFU1MgIDB4MDAwMDAxMDAKKyNkZWZpbmUgRENfTUFTS19EQ19NSVNTICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgRENfTUFTS19MMl9ISVRfMk0gICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgRENfTUFTS19MMV9ISVRfMUcgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgRENfTUFTS19MMV9ISVRfMk0gICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgRENfTUFTS19MMl9UTEJfTUlTUyAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgRENfTUFTS19MMV9UTEJfTUlTUyAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgRENfTUFTS19TVE9SRV9PUCAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgRENfTUFTS19MT0FEX09QICAgICAgICAgIDB4MDAwMDAwMDEKKworCisvKioKKyAqIElCUyBkZXJpdmVkIGV2ZW50czoKKyAqCisgKiBJQlMgZGVyaXZlZCBldmVudHMgYXJlIGlkZW50aWZpZWQgYnkgZXZlbnQgc2VsZWN0IHZhbHVlcyB3aGljaCBhcmUKKyAqIHNpbWlsYXIgdG8gdGhlIGV2ZW50IHNlbGVjdCB2YWx1ZXMgdGhhdCBpZGVudGlmeSBwZXJmb3JtYW5jZSBtb25pdG9yaW5nCisgKiBjb3VudGVyIChQTUMpIGV2ZW50cy4gRXZlbnQgc2VsZWN0IHZhbHVlcyBmb3IgSUJTIGRlcml2ZWQgZXZlbnRzIGJlZ2luCisgKiBhdCAweGYwMDAuCisgKgorICogVGhlIGRlZmluaXRpb25zIGluIHRoaXMgZmlsZSAqbXVzdCogbWF0Y2ggZGVmaW5pdGlvbnMKKyAqIG9mIElCUyBkZXJpdmVkIGV2ZW50cy4gTW9yZSBpbmZvcm1hdGlvbgorICogYWJvdXQgSUJTIGRlcml2ZWQgZXZlbnRzIGlzIGdpdmVuIGluIHRoZSBTb2Z0d2FyZSBPcHJpbWl6YXRpb24KKyAqIEd1aWRlLgorICovCisKKy8qKgorICogVGhlIGZvbGxvd2luZyBkZWZpbmVzIGFzc29jaWF0ZSBhIDE2LWJpdCBzZWxlY3QgdmFsdWUgd2l0aCBhbiBJQlMKKyAqIGRlcml2ZWQgZmV0Y2ggZXZlbnQuCisgKi8KKyNkZWZpbmUgREVfSUJTX0ZFVENIX0FMTCAgICAgICAgIDB4ZjAwMAorI2RlZmluZSBERV9JQlNfRkVUQ0hfS0lMTEVEICAgICAgMHhmMDAxCisjZGVmaW5lIERFX0lCU19GRVRDSF9BVFRFTVBURUQgICAweGYwMDIKKyNkZWZpbmUgREVfSUJTX0ZFVENIX0NPTVBMRVRFRCAgIDB4ZjAwMworI2RlZmluZSBERV9JQlNfRkVUQ0hfQUJPUlRFRCAgICAgMHhmMDA0CisjZGVmaW5lIERFX0lCU19MMV9JVExCX0hJVCAgICAgICAweGYwMDUKKyNkZWZpbmUgREVfSUJTX0lUTEJfTDFNX0wySCAgICAgIDB4ZjAwNgorI2RlZmluZSBERV9JQlNfSVRMQl9MMU1fTDJNICAgICAgMHhmMDA3CisjZGVmaW5lIERFX0lCU19JQ19NSVNTICAgICAgICAgICAweGYwMDgKKyNkZWZpbmUgREVfSUJTX0lDX0hJVCAgICAgICAgICAgIDB4ZjAwOQorI2RlZmluZSBERV9JQlNfRkVUQ0hfNEtfUEFHRSAgICAgMHhmMDBhCisjZGVmaW5lIERFX0lCU19GRVRDSF8yTV9QQUdFICAgICAweGYwMGIKKyNkZWZpbmUgREVfSUJTX0ZFVENIXzFHX1BBR0UgICAgIDB4ZjAwYworI2RlZmluZSBERV9JQlNfRkVUQ0hfWFhfUEFHRSAgICAgMHhmMDBkCisjZGVmaW5lIERFX0lCU19GRVRDSF9MQVRFTkNZICAgICAweGYwMGUKKworI2RlZmluZSBJQlNfRkVUQ0hfQkFTRSAgICAgICAgICAgMHhmMDAwCisjZGVmaW5lIElCU19GRVRDSF9FTkQgICAgICAgICAgICAweGYwMGUKKyNkZWZpbmUgSUJTX0ZFVENIX01BWCAgICAgICAgICAgIChJQlNfRkVUQ0hfRU5EIC0gSUJTX0ZFVENIX0JBU0UgKyAxKQorI2RlZmluZSBJU19JQlNfRkVUQ0goeCkgICAgICAgICAgKElCU19GRVRDSF9CQVNFIDw9IHggJiYgeCA8PSBJQlNfRkVUQ0hfRU5EKQorI2RlZmluZSBJQlNfRkVUQ0hfT0ZGU0VUKHgpICAgICAgKHggLSBJQlNfRkVUQ0hfQkFTRSkKKyNkZWZpbmUgQ0hFQ0tfRkVUQ0hfU0VMRUNURURfRkxBRyh4KQlpZiAoIHNlbGVjdGVkX2ZsYWcgJiAoMSA8PCBJQlNfRkVUQ0hfT0ZGU0VUKHgpKSkKKworCisvKioKKyAqIFRoZSBmb2xsb3dpbmcgZGVmaW5lcyBhc3NvY2lhdGUgYSAxNi1iaXQgc2VsZWN0IHZhbHVlIHdpdGggYW4gSUJTCisgKiBkZXJpdmVkIGJyYW5jaC9yZXR1cm4gbWFjcm8tb3AgZXZlbnQuCisgKi8KKyNkZWZpbmUgREVfSUJTX09QX0FMTCAgICAgICAgICAgICAweGYxMDAKKyNkZWZpbmUgREVfSUJTX09QX1RBR19UT19SRVRJUkUgICAweGYxMDEKKyNkZWZpbmUgREVfSUJTX09QX0NPTVBfVE9fUkVUSVJFICAweGYxMDIKKyNkZWZpbmUgREVfSUJTX0JSQU5DSF9SRVRJUkVEICAgICAweGYxMDMKKyNkZWZpbmUgREVfSUJTX0JSQU5DSF9NSVNQICAgICAgICAweGYxMDQKKyNkZWZpbmUgREVfSUJTX0JSQU5DSF9UQUtFTiAgICAgICAweGYxMDUKKyNkZWZpbmUgREVfSUJTX0JSQU5DSF9NSVNQX1RBS0VOICAweGYxMDYKKyNkZWZpbmUgREVfSUJTX1JFVFVSTiAgICAgICAgICAgICAweGYxMDcKKyNkZWZpbmUgREVfSUJTX1JFVFVSTl9NSVNQICAgICAgICAweGYxMDgKKyNkZWZpbmUgREVfSUJTX1JFU1lOQyAgICAgICAgICAgICAweGYxMDkKKworI2RlZmluZSBJQlNfT1BfQkFTRSAgICAgICAgICAgICAgIDB4ZjEwMAorI2RlZmluZSBJQlNfT1BfRU5EICAgICAgICAgICAgICAgIDB4ZjEwOQorI2RlZmluZSBJQlNfT1BfTUFYICAgICAgICAgICAgICAgIChJQlNfT1BfRU5EIC0gSUJTX09QX0JBU0UgKyAxKQorI2RlZmluZSBJU19JQlNfT1AoeCkgICAgICAgICAgICAgIChJQlNfT1BfQkFTRSA8PSB4ICYmIHggPD0gSUJTX09QX0VORCkKKyNkZWZpbmUgSUJTX09QX09GRlNFVCh4KSAgICAgICAgICAoeCAtIElCU19PUF9CQVNFKQorI2RlZmluZSBDSEVDS19PUF9TRUxFQ1RFRF9GTEFHKHgpCWlmICggc2VsZWN0ZWRfZmxhZyAmICgxIDw8IElCU19PUF9PRkZTRVQoeCkpKQorCisKKy8qKgorICogVGhlIGZvbGxvd2luZyBkZWZpbmVzIGFzc29jaWF0ZSBhIDE2LWJpdCBzZWxlY3QgdmFsdWUgd2l0aCBhbiBJQlMKKyAqIGRlcml2ZWQgbG9hZC9zdG9yZSBldmVudC4KKyAqLworI2RlZmluZSBERV9JQlNfTFNfQUxMX09QICAgICAgICAgMHhmMjAwCisjZGVmaW5lIERFX0lCU19MU19MT0FEX09QICAgICAgICAweGYyMDEKKyNkZWZpbmUgREVfSUJTX0xTX1NUT1JFX09QICAgICAgIDB4ZjIwMgorI2RlZmluZSBERV9JQlNfTFNfRFRMQl9MMUggICAgICAgMHhmMjAzCisjZGVmaW5lIERFX0lCU19MU19EVExCX0wxTV9MMkggICAweGYyMDQKKyNkZWZpbmUgREVfSUJTX0xTX0RUTEJfTDFNX0wyTSAgIDB4ZjIwNQorI2RlZmluZSBERV9JQlNfTFNfRENfTUlTUyAgICAgICAgMHhmMjA2CisjZGVmaW5lIERFX0lCU19MU19EQ19ISVQgICAgICAgICAweGYyMDcKKyNkZWZpbmUgREVfSUJTX0xTX01JU0FMSUdORUQgICAgIDB4ZjIwOAorI2RlZmluZSBERV9JQlNfTFNfQk5LX0NPTkZfTE9BRCAgMHhmMjA5CisjZGVmaW5lIERFX0lCU19MU19CTktfQ09ORl9TVE9SRSAweGYyMGEKKyNkZWZpbmUgREVfSUJTX0xTX1NUTF9GT1JXQVJERUQgIDB4ZjIwYgorI2RlZmluZSBERV9JQlNfTFNfU1RMX0NBTkNFTExFRCAgMHhmMjBjCisjZGVmaW5lIERFX0lCU19MU19VQ19NRU1fQUNDRVNTICAweGYyMGQKKyNkZWZpbmUgREVfSUJTX0xTX1dDX01FTV9BQ0NFU1MgIDB4ZjIwZQorI2RlZmluZSBERV9JQlNfTFNfTE9DS0VEX09QICAgICAgMHhmMjBmCisjZGVmaW5lIERFX0lCU19MU19NQUJfSElUICAgICAgICAweGYyMTAKKyNkZWZpbmUgREVfSUJTX0xTX0wxX0RUTEJfNEsgICAgIDB4ZjIxMQorI2RlZmluZSBERV9JQlNfTFNfTDFfRFRMQl8yTSAgICAgMHhmMjEyCisjZGVmaW5lIERFX0lCU19MU19MMV9EVExCXzFHICAgICAweGYyMTMKKyNkZWZpbmUgREVfSUJTX0xTX0wxX0RUTEJfUkVTICAgIDB4ZjIxNAorI2RlZmluZSBERV9JQlNfTFNfTDJfRFRMQl80SyAgICAgMHhmMjE1CisjZGVmaW5lIERFX0lCU19MU19MMl9EVExCXzJNICAgICAweGYyMTYKKyNkZWZpbmUgREVfSUJTX0xTX0wyX0RUTEJfMUcgICAgIDB4ZjIxNworI2RlZmluZSBERV9JQlNfTFNfTDJfRFRMQl9SRVMyICAgMHhmMjE4CisjZGVmaW5lIERFX0lCU19MU19EQ19MT0FEX0xBVCAgICAweGYyMTkKKworI2RlZmluZSBJQlNfT1BfTFNfQkFTRSAgICAgICAgICAgMHhmMjAwCisjZGVmaW5lIElCU19PUF9MU19FTkQgICAgICAgICAgICAweGYyMTkKKyNkZWZpbmUgSUJTX09QX0xTX01BWCAgICAgICAgICAgIChJQlNfT1BfTFNfRU5EIC0gSUJTX09QX0xTX0JBU0UgKyAxKQorI2RlZmluZSBJU19JQlNfT1BfTFMoeCkgICAgICAgICAgKElCU19PUF9MU19CQVNFIDw9IHggJiYgeCA8PSBJQlNfT1BfTFNfRU5EKQorI2RlZmluZSBJQlNfT1BfTFNfT0ZGU0VUKHgpICAgICAgKHggLSBJQlNfT1BfTFNfQkFTRSkKKyNkZWZpbmUgQ0hFQ0tfT1BfTFNfU0VMRUNURURfRkxBRyh4KQlpZiAoIHNlbGVjdGVkX2ZsYWcgJiAoMSA8PCBJQlNfT1BfTFNfT0ZGU0VUKHgpKSkKKworCisvKioKKyAqIFRoZSBmb2xsb3dpbmcgZGVmaW5lcyBhc3NvY2lhdGUgYSAxNi1iaXQgc2VsZWN0IHZhbHVlIHdpdGggYW4gSUJTCisgKiBkZXJpdmVkIE5vcnRoYnJpZGdlIChOQikgZXZlbnQuCisgKi8KKyNkZWZpbmUgREVfSUJTX05CX0xPQ0FMICAgICAgICAgIDB4ZjI0MAorI2RlZmluZSBERV9JQlNfTkJfUkVNT1RFICAgICAgICAgMHhmMjQxCisjZGVmaW5lIERFX0lCU19OQl9MT0NBTF9MMyAgICAgICAweGYyNDIKKyNkZWZpbmUgREVfSUJTX05CX0xPQ0FMX0NBQ0hFICAgIDB4ZjI0MworI2RlZmluZSBERV9JQlNfTkJfUkVNT1RFX0NBQ0hFICAgMHhmMjQ0CisjZGVmaW5lIERFX0lCU19OQl9MT0NBTF9EUkFNICAgICAweGYyNDUKKyNkZWZpbmUgREVfSUJTX05CX1JFTU9URV9EUkFNICAgIDB4ZjI0NgorI2RlZmluZSBERV9JQlNfTkJfTE9DQUxfT1RIRVIgICAgMHhmMjQ3CisjZGVmaW5lIERFX0lCU19OQl9SRU1PVEVfT1RIRVIgICAweGYyNDgKKyNkZWZpbmUgREVfSUJTX05CX0NBQ0hFX1NUQVRFX00gIDB4ZjI0OQorI2RlZmluZSBERV9JQlNfTkJfQ0FDSEVfU1RBVEVfTyAgMHhmMjRhCisjZGVmaW5lIERFX0lCU19OQl9MT0NBTF9MQVRFTkNZICAweGYyNGIKKyNkZWZpbmUgREVfSUJTX05CX1JFTU9URV9MQVRFTkNZIDB4ZjI0YworCisjZGVmaW5lIElCU19PUF9OQl9CQVNFICAgICAgICAgICAweGYyNDAKKyNkZWZpbmUgSUJTX09QX05CX0VORCAgICAgICAgICAgIDB4ZjI0YworI2RlZmluZSBJQlNfT1BfTkJfTUFYICAgICAgICAgICAgKElCU19PUF9OQl9FTkQgLSBJQlNfT1BfTkJfQkFTRSArIDEpCisjZGVmaW5lIElTX0lCU19PUF9OQih4KSAgICAgICAgICAoSUJTX09QX05CX0JBU0UgPD0geCAmJiB4IDw9IElCU19PUF9OQl9FTkQpCisjZGVmaW5lIElCU19PUF9OQl9PRkZTRVQoeCkgICAgICAoeCAtIElCU19PUF9OQl9CQVNFKQorI2RlZmluZSBDSEVDS19PUF9OQl9TRUxFQ1RFRF9GTEFHKHgpCWlmICggc2VsZWN0ZWRfZmxhZyAmICgxIDw8IElCU19PUF9OQl9PRkZTRVQoeCkpKQorCisKKyNkZWZpbmUgT1BfTUFYX0lCU19DT1VOVEVSUyAgICAgIChJQlNfRkVUQ0hfTUFYICsgSUJTX09QX01BWCArIElCU19PUF9MU19NQVggKyBJQlNfT1BfTkJfTUFYKQorCisKKy8qKgorICogVGhlc2UgbWFjcm8gZGVjb2RlcyBJQlMgaGFyZHdhcmUtbGV2ZWwgZXZlbnQgZmxhZ3MgYW5kIGZpZWxkcy4KKyAqIFRyYW5zbGF0aW9uIHJlc3VsdHMgYXJlIGVpdGhlciB6ZXJvIChmYWxzZSkgb3Igbm9uLXplcm8gKHRydWUpLCBleGNlcHQKKyAqIHRoZSBmZXRjaCBsYXRlbmN5LCB3aGljaCBpcyBhIDE2LWJpdCBjeWNsZSBjb3VudCwgYW5kIHRoZSBmZXRjaCBwYWdlIHNpemUKKyAqIGZpZWxkLCB3aGljaCBpcyBhIDItYml0IHVuc2lnbmVkIGludGVnZXIuCisgKi8KKworLyoqIEJpdHMgNDc6MzIgSWJzRmV0Y2hMYXQ6IGluc3RydWN0aW9uIGZldGNoIGxhdGVuY3kgKi8KKyNkZWZpbmUgSUJTX0ZFVENIX0ZFVENIX0xBVEVOQ1koeCkgICAgICAgICAgICAgICgodW5zaWduZWQgc2hvcnQpKHgtPmlic19mZXRjaF9jdGxfaGlnaCAmIEZFVENIX01BU0tfTEFURU5DWSkpCisKKy8qKiBCaXQgNTAgSWJzRmV0Y2hDb21wOiBpbnN0cnVjdGlvbiBmZXRjaCBjb21wbGV0ZS4gKi8KKyNkZWZpbmUgSUJTX0ZFVENIX0ZFVENIX0NPTVBMRVRJT04oeCkgICAgICAgICAgICgoeC0+aWJzX2ZldGNoX2N0bF9oaWdoICYgRkVUQ0hfTUFTS19DT01QTEVURSkgIT0gMCkKKworLyoqIEJpdCA1MSBJYnNJY01pc3M6IGluc3RydWN0aW9uIGNhY2hlIG1pc3MuICovCisjZGVmaW5lIElCU19GRVRDSF9JTlNUX0NBQ0hFX01JU1MoeCkgICAgICAgICAgICAoKHgtPmlic19mZXRjaF9jdGxfaGlnaCAmIEZFVENIX01BU0tfSUNfTUlTUykgIT0gMCkKKworLyoqIEJpdCA1MiBJYnNQaHlBZGRyVmFsaWQ6IGluc3RydWN0aW9uIGZldGNoIHBoeXNpY2FsIGFkZHJlc3MgdmFsaWQuICovCisjZGVmaW5lIElCU19GRVRDSF9QSFlTX0FERFJfVkFMSUQoeCkgICAgICAgICAgICAoKHgtPmlic19mZXRjaF9jdGxfaGlnaCAmIEZFVENIX01BU0tfUEhZX0FERFIpICE9IDApCisKK2VudW0gSUJTTDFQQUdFU0laRSB7CisJTDFUTEI0SyA9IDAsCisJTDFUTEIyTSwKKwlMMVRMQjFHLAorCUwxVExCX0lOVkFMSUQKK307CisKKy8qKiBCaXRzIDU0OjUzIElic0wxVGxiUGdTejogaW5zdHJ1Y3Rpb24gY2FjaGUgTDFUTEIgcGFnZSBzaXplLiAqLworI2RlZmluZSBJQlNfRkVUQ0hfVExCX1BBR0VfU0laRSh4KSAgICAgICAgICAgICAgKCh1bnNpZ25lZCBzaG9ydCkoKHgtPmlic19mZXRjaF9jdGxfaGlnaCA+PiAyMSkgJiAweDMpKQorI2RlZmluZSBJQlNfRkVUQ0hfVExCX1BBR0VfU0laRV80Syh4KSAgICAgICAgICAgKElCU19GRVRDSF9UTEJfUEFHRV9TSVpFKHgpID09IEwxVExCNEspCisjZGVmaW5lIElCU19GRVRDSF9UTEJfUEFHRV9TSVpFXzJNKHgpICAgICAgICAgICAoSUJTX0ZFVENIX1RMQl9QQUdFX1NJWkUoeCkgPT0gTDFUTEIyTSkKKyNkZWZpbmUgSUJTX0ZFVENIX1RMQl9QQUdFX1NJWkVfMUcoeCkgICAgICAgICAgIChJQlNfRkVUQ0hfVExCX1BBR0VfU0laRSh4KSA9PSBMMVRMQjFHKQorCisvKiogQml0IDU1IElic0wxVGxiTWlzczogaW5zdHJ1Y3Rpb24gY2FjaGUgTDFUTEIgbWlzcy4gKi8KKyNkZWZpbmUgSUJTX0ZFVENIX01fTDFfVExCX01JU1MoeCkgICAgICAgICAgICAgICgoeC0+aWJzX2ZldGNoX2N0bF9oaWdoICYgRkVUQ0hfTUFTS19MMV9NSVNTKSAhPSAwKQorCisvKiogQml0IDU2IElic0wyVGxiTWlzczogaW5zdHJ1Y3Rpb24gY2FjaGUgTDJUTEIgbWlzcy4gKi8KKyNkZWZpbmUgSUJTX0ZFVENIX0wyX1RMQl9NSVNTKHgpICAgICAgICAgICAgICAgICgoeC0+aWJzX2ZldGNoX2N0bF9oaWdoICYgRkVUQ0hfTUFTS19MMl9NSVNTKSAhPSAwKQorCisvKiogQSBmZXRjaCBpcyBhIGtpbGxlZCBmZXRjaCBpZiBhbGwgdGhlIG1hc2tlZCBiaXRzIGFyZSBjbGVhciAqLworI2RlZmluZSBJQlNfRkVUQ0hfS0lMTEVEKHgpICAgICAgICAgICAgICAgICAgICAgKCh4LT5pYnNfZmV0Y2hfY3RsX2hpZ2ggJiBGRVRDSF9NQVNLX0tJTExFRCkgPT0gMCkKKworI2RlZmluZSBJQlNfRkVUQ0hfSU5TVF9DQUNIRV9ISVQoeCkgICAgICAgICAgICAgKElCU19GRVRDSF9GRVRDSF9DT01QTEVUSU9OKHgpICYmICFJQlNfRkVUQ0hfSU5TVF9DQUNIRV9NSVNTKHgpKQorCisjZGVmaW5lIElCU19GRVRDSF9MMV9UTEJfSElUKHgpICAgICAgICAgICAgICAgICAoIUlCU19GRVRDSF9NX0wxX1RMQl9NSVNTKHgpICYmIElCU19GRVRDSF9QSFlTX0FERFJfVkFMSUQoeCkpCisKKyNkZWZpbmUgSUJTX0ZFVENIX0lUTEJfTDFNX0wySCh4KSAgICAgICAgICAgICAgIChJQlNfRkVUQ0hfTV9MMV9UTEJfTUlTUyh4KSAmJiAhSUJTX0ZFVENIX0wyX1RMQl9NSVNTKHgpKQorCisjZGVmaW5lIElCU19GRVRDSF9JVExCX0wxTV9MMk0oeCkgICAgICAgICAgICAgICAoSUJTX0ZFVENIX01fTDFfVExCX01JU1MoeCkgJiYgSUJTX0ZFVENIX0wyX1RMQl9NSVNTKHgpKQorCisKKy8qKgorICogVGhlc2UgbWFjcm9zIHRyYW5zbGF0ZXMgSUJTIG9wIGV2ZW50IGRhdGEgZnJvbSBpdHMgaGFyZHdhcmUtbGV2ZWwKKyAqIHJlcHJlc2VudGF0aW9uIC5JdCBoaWRlcyB0aGUgTVNSIGxheW91dCBvZiBJQlMgb3AgZGF0YS4KKyAqLworCisvKioKKyAqIE1TUkMwMDFfMTAzNSBJQlMgT1AgRGF0YSBSZWdpc3RlciAoSWJzT3BEYXRhKQorICoKKyAqIDE1OjAgSWJzQ29tcFRvUmV0Q3RyOiBtYWNyby1vcCBjb21wbGV0aW9uIHRvIHJldGlyZSBjb3VudAorICovCisjZGVmaW5lIElCU19PUF9DT01fVE9fUkVUSVJFX0NZQ0xFUyh4KSAgICAgICAgICAoKHVuc2lnbmVkIHNob3J0KSh4LT5pYnNfb3BfZGF0YTFfbG93ICYgQlJfTUFTS19SRVRJUkUpKQorCisvKiogMzE6MTYgdGFnX3RvX3JldGlyZV9jeWNsZXMgOiBtYWNyby1vcCB0YWcgdG8gcmV0aXJlIGNvdW50LiAqLworI2RlZmluZSBJQlNfT1BfVEFHX1RPX1JFVElSRV9DWUNMRVMoeCkgICAgICAgICAgKCh1bnNpZ25lZCBzaG9ydCkoKHgtPmlic19vcF9kYXRhMV9sb3cgPj4gMTYpICYgQlJfTUFTS19SRVRJUkUpKQorCisvKiogMzIgb3BfYnJhbmNoX3Jlc3luYyA6IHJlc3luYyBtYWNyby1vcC4gKi8KKyNkZWZpbmUgSUJTX09QX0JSQU5DSF9SRVNZTkMoeCkgICAgICAgICAgICAgICAgICgoeC0+aWJzX29wX2RhdGExX2hpZ2ggJiBCUl9NQVNLX0JSTl9SRVNZTkMpICE9IDApCisKKy8qKiAzMyBvcF9taXNwcmVkaWN0X3JldHVybiA6IG1pc3ByZWRpY3RlZCByZXR1cm4gbWFjcm8tb3AuICovCisjZGVmaW5lIElCU19PUF9NSVNQUkVESUNUX1JFVFVSTih4KSAgICAgICAgICAgICAoKHgtPmlic19vcF9kYXRhMV9oaWdoICYgQlJfTUFTS19NSVNQX1JFVFVSTikgIT0gMCkKKworLyoqIDM0IElic09wUmV0dXJuOiByZXR1cm4gbWFjcm8tb3AuICovCisjZGVmaW5lIElCU19PUF9SRVRVUk4oeCkgICAgICAgICAgICAgICAgICAgICAgICAoKHgtPmlic19vcF9kYXRhMV9oaWdoICYgQlJfTUFTS19SRVRVUk4pICE9IDApCisKKy8qKiAzNSBJYnNPcEJyblRha2VuOiB0YWtlbiBicmFuY2ggbWFjcm8tb3AuICovCisjZGVmaW5lIElCU19PUF9CUkFOQ0hfVEFLRU4oeCkgICAgICAgICAgICAgICAgICAoKHgtPmlic19vcF9kYXRhMV9oaWdoICYgQlJfTUFTS19CUk5fVEFLRU4pICE9IDApCisKKy8qKiAzNiBJYnNPcEJybk1pc3A6IG1pc3ByZWRpY3RlZCBicmFuY2ggbWFjcm8tb3AuICAqLworI2RlZmluZSBJQlNfT1BfQlJBTkNIX01JU1BSRURJQ1QoeCkgICAgICAgICAgICAgKCh4LT5pYnNfb3BfZGF0YTFfaGlnaCAmIEJSX01BU0tfQlJOX01JU1ApICE9IDApCisKKy8qKiAzNyBJYnNPcEJyblJldDogYnJhbmNoIG1hY3JvLW9wIHJldGlyZWQuICovCisjZGVmaW5lIElCU19PUF9CUkFOQ0hfUkVUSVJFRCh4KSAgICAgICAgICAgICAgICAoKHgtPmlic19vcF9kYXRhMV9oaWdoICYgQlJfTUFTS19CUk5fUkVUKSAhPSAwKQorCisvKiogMzggSWJzUmlwSW52YWxpZDogUklQIGludmFsaWQuICovCisjZGVmaW5lIElCU19PUF9SSVBfSU5WQUxJRCh4KSAgICAgICAgICAgICAgICAgICAoKHgtPmlic19vcF9kYXRhMV9oaWdoICYgTUFTS19SSVBfSU5WQUxJRCkgIT0gMCkKKworLyoqCisgKiBNU1JDMDAxXzEwMzYgSUJTIE9wIERhdGEgMiBSZWdpc3RlciAoSWJzT3BEYXRhMikKKyAqCisgKiA1IE5iSWJzUmVxQ2FjaGVIaXRTdDogSUJTIEwzIGNhY2hlIHN0YXRlCisgKi8KKyNkZWZpbmUgSUJTX09QX05CX0lCU19DQUNIRV9ISVRfU1QoeCkgICAgICAgICAgICgoeC0+aWJzX29wX2RhdGEyX2xvdyAmIE5CX01BU0tfTDNfU1RBVEUpICE9IDApCisKKy8qKiA0IE5iSWJzUmVxRHN0UHJvYzogSUJTIHJlcXVlc3QgZGVzdGluYXRpb24gcHJvY2Vzc29yICovCisjZGVmaW5lIElCU19PUF9OQl9JQlNfUkVRX0RTVF9QUk9DKHgpICAgICAgICAgICAoKHgtPmlic19vcF9kYXRhMl9sb3cgJiBOQl9NQVNLX1JFUV9EU1RfUFJPQykgIT0gMCkKKworLyoqIDI6MCBOYklic1JlcVNyYzogTm9ydGhicmlkZ2UgSUJTIHJlcXVlc3QgZGF0YSBzb3VyY2UgKi8KKyNkZWZpbmUgSUJTX09QX05CX0lCU19SRVFfU1JDKHgpICAgICAgICAgICAgICAgICgodW5zaWduZWQgY2hhcikoeC0+aWJzX29wX2RhdGEyX2xvdyAmIE5CX01BU0tfUkVRX0RBVEFfU1JDKSkKKworI2RlZmluZSBJQlNfT1BfTkJfSUJTX1JFUV9TUkNfMDEoeCkgICAgICAgICAgICAgKElCU19PUF9OQl9JQlNfUkVRX1NSQyh4KSA9PSAweDAxKQorCisjZGVmaW5lIElCU19PUF9OQl9JQlNfUkVRX1NSQ18wMih4KSAgICAgICAgICAgICAoSUJTX09QX05CX0lCU19SRVFfU1JDKHgpID09IDB4MDIpCisKKyNkZWZpbmUgSUJTX09QX05CX0lCU19SRVFfU1JDXzAzKHgpICAgICAgICAgICAgIChJQlNfT1BfTkJfSUJTX1JFUV9TUkMoeCkgPT0gMHgwMykKKworI2RlZmluZSBJQlNfT1BfTkJfSUJTX1JFUV9TUkNfMDcoeCkgICAgICAgICAgICAgKElCU19PUF9OQl9JQlNfUkVRX1NSQyh4KSA9PSAweDA3KQorCisvKioKKyAqIE1TUkMwMDFfMTAzNyBJQlMgT3AgRGF0YTMgUmVnaXN0ZXIKKyAqCisgKiBCaXRzIDQ3OjMyICAgSWJzRGNNaXNzTGF0CisgKi8KKyNkZWZpbmUgSUJTX09QX0RDX01JU1NfTEFURU5DWSh4KSAgICAgICAgICAgICAgICgodW5zaWduZWQgc2hvcnQpKHgtPmlic19vcF9kYXRhM19oaWdoICYgMHhmZmZmKSkKKworLyoqIDAgSWJzTGRPcDogTG9hZCBvcCAqLworI2RlZmluZSBJQlNfT1BfSUJTX0xEX09QKHgpICAgICAgICAgICAgICAgICAgICAgKCh4LT5pYnNfb3BfZGF0YTNfbG93ICYgRENfTUFTS19MT0FEX09QKSAhPSAwKQorCisvKiogMSBJYnNTdE9wOiBTdG9yZSBvcCAqLworI2RlZmluZSBJQlNfT1BfSUJTX1NUX09QKHgpICAgICAgICAgICAgICAgICAgICAgKCh4LT5pYnNfb3BfZGF0YTNfbG93ICYgRENfTUFTS19TVE9SRV9PUCkgIT0gMCkKKworLyoqIDIgaWJzX2RjX2wxX3RsYl9taXNzOiBEYXRhIGNhY2hlIEwxVExCIG1pc3MgKi8KKyNkZWZpbmUgSUJTX09QX0lCU19EQ19MMV9UTEJfTUlTUyh4KSAgICAgICAgICAgICgoeC0+aWJzX29wX2RhdGEzX2xvdyAmIERDX01BU0tfTDFfVExCX01JU1MpICE9IDApCisKKy8qKiAzIGlic19kY19sMl90bGJfbWlzczogRGF0YSBjYWNoZSBMMlRMQiBtaXNzICovCisjZGVmaW5lIElCU19PUF9JQlNfRENfTDJfVExCX01JU1MoeCkgICAgICAgICAgICAoKHgtPmlic19vcF9kYXRhM19sb3cgJiBEQ19NQVNLX0wyX1RMQl9NSVNTKSAhPSAwKQorCisvKiogNCBJYnNEY0wxdGxiSGl0Mk06IERhdGEgY2FjaGUgTDFUTEIgaGl0IGluIDJNIHBhZ2UgKi8KKyNkZWZpbmUgSUJTX09QX0lCU19EQ19MMV9UTEJfSElUXzJNQih4KSAgICAgICAgICgoeC0+aWJzX29wX2RhdGEzX2xvdyAmIERDX01BU0tfTDFfSElUXzJNKSAhPSAwKQorCisvKiogNSBpYnNfZGNfbDFfdGxiX2hpdF8xZ2I6IERhdGEgY2FjaGUgTDFUTEIgaGl0IGluIDFHIHBhZ2UgKi8KKyNkZWZpbmUgSUJTX09QX0lCU19EQ19MMV9UTEJfSElUXzFHQih4KSAgICAgICAgICgoeC0+aWJzX29wX2RhdGEzX2xvdyAmIERDX01BU0tfTDFfSElUXzFHKSAhPSAwKQorCisvKiogNiBpYnNfZGNfbDJfdGxiX2hpdF8ybWI6IERhdGEgY2FjaGUgTDJUTEIgaGl0IGluIDJNIHBhZ2UgKi8KKyNkZWZpbmUgSUJTX09QX0lCU19EQ19MMl9UTEJfSElUXzJNQih4KSAgICAgICAgICgoeC0+aWJzX29wX2RhdGEzX2xvdyAmIERDX01BU0tfTDJfSElUXzJNKSAhPSAwKQorCisvKiogNyBpYnNfZGNfbWlzczogRGF0YSBjYWNoZSBtaXNzICovCisjZGVmaW5lIElCU19PUF9JQlNfRENfTUlTUyh4KSAgICAgICAgICAgICAgICAgICAoKHgtPmlic19vcF9kYXRhM19sb3cgJiBEQ19NQVNLX0RDX01JU1MpICE9IDApCisKKy8qKiA4IGlic19kY19taXNzX2FjYzogTWlzYWxpZ25lZCBhY2Nlc3MgKi8KKyNkZWZpbmUgSUJTX09QX0lCU19EQ19NSVNTX0FDQyh4KSAgICAgICAgICAgICAgICgoeC0+aWJzX29wX2RhdGEzX2xvdyAmIERDX01BU0tfTUlTQUxJR05fQUNDRVNTKSAhPSAwKQorCisvKiogOSBpYnNfZGNfbGRfYm5rX2NvbjogQmFuayBjb25mbGljdCBvbiBsb2FkIG9wZXJhdGlvbiAqLworI2RlZmluZSBJQlNfT1BfSUJTX0RDX0xEX0JOS19DT04oeCkgICAgICAgICAgICAgKCh4LT5pYnNfb3BfZGF0YTNfbG93ICYgRENfTUFTS19MRF9CQU5LX0NPTkZMSUNUKSAhPSAwKQorCisvKiogMTAgaWJzX2RjX3N0X2Jua19jb246IEJhbmsgY29uZmxpY3Qgb24gc3RvcmUgb3BlcmF0aW9uICovCisjZGVmaW5lIElCU19PUF9JQlNfRENfU1RfQk5LX0NPTih4KSAgICAgICAgICAgICAoKHgtPmlic19vcF9kYXRhM19sb3cgJiBEQ19NQVNLX1NUX0JBTktfQ09ORkxJQ1QpICE9IDApCisKKy8qKiAxMSBpYnNfZGNfc3RfdG9fbGRfZndkIDogRGF0YSBmb3J3YXJkZWQgZnJvbSBzdG9yZSB0byBsb2FkIG9wZXJhdGlvbiAqLworI2RlZmluZSBJQlNfT1BfSUJTX0RDX1NUX1RPX0xEX0ZXRCh4KSAgICAgICAgICAgKCh4LT5pYnNfb3BfZGF0YTNfbG93ICYgRENfTUFTS19TVF9UT19MRF9GT1IpICE9IDApCisKKy8qKiAxMiBpYnNfZGNfc3RfdG9fbGRfY2FuOiBEYXRhIGZvcndhcmRpbmcgZnJvbSBzdG9yZSB0byBsb2FkIG9wZXJhdGlvbiBjYW5jZWxsZWQgKi8KKyNkZWZpbmUgSUJTX09QX0lCU19EQ19TVF9UT19MRF9DQU4oeCkgICAgICAgICAgICgoeC0+aWJzX29wX2RhdGEzX2xvdyAmIERDX01BU0tfU1RfVE9fTERfQ0FOQ0VMKSAhPSAwKQorCisvKiogMTMgaWJzX2RjX3djX21lbV9hY2MgOiBXQyBtZW1vcnkgYWNjZXNzICovCisjZGVmaW5lIElCU19PUF9JQlNfRENfV0NfTUVNX0FDQyh4KSAgICAgICAgICAgICAoKHgtPmlic19vcF9kYXRhM19sb3cgJiBEQ19NQVNLX1dDX01FTV9BQ0NFU1MpICE9IDApCisKKy8qKiAxNCBpYnNfZGNfdWNfbWVtX2FjYyA6IFVDIG1lbW9yeSBhY2Nlc3MgKi8KKyNkZWZpbmUgSUJTX09QX0lCU19EQ19VQ19NRU1fQUNDKHgpICAgICAgICAgICAgICgoeC0+aWJzX29wX2RhdGEzX2xvdyAmIERDX01BU0tfVUNfTUVNX0FDQ0VTUykgIT0gMCkKKworLyoqIDE1IGlic19sb2NrZWRfb3A6IExvY2tlZCBvcGVyYXRpb24gKi8KKyNkZWZpbmUgSUJTX09QX0lCU19MT0NLRURfT1AoeCkgICAgICAgICAgICAgICAgICgoeC0+aWJzX29wX2RhdGEzX2xvdyAmIERDX01BU0tfTE9DS0VEX09QKSAhPSAwKQorCisvKiogMTYgaWJzX2RjX21hYl9oaXQgOiBNQUIgaGl0ICovCisjZGVmaW5lIElCU19PUF9JQlNfRENfTUFCX0hJVCh4KSAgICAgICAgICAgICAgICAoKHgtPmlic19vcF9kYXRhM19sb3cgJiBEQ19NQVNLX01BQl9ISVQpICE9IDApCisKKy8qKiAxNyBJYnNEY0xpbkFkZHJWYWxpZDogRGF0YSBjYWNoZSBsaW5lYXIgYWRkcmVzcyB2YWxpZCAqLworI2RlZmluZSBJQlNfT1BfSUJTX0RDX0xJTl9BRERSX1ZBTElEKHgpICAgICAgICAgKCh4LT5pYnNfb3BfZGF0YTNfbG93ICYgRENfTUFTS19MSU5fQUREUl9WQUxJRCkgIT0gMCkKKworLyoqIDE4IGlic19kY19waHlfYWRkcl92YWxpZDogRGF0YSBjYWNoZSBwaHlzaWNhbCBhZGRyZXNzIHZhbGlkICovCisjZGVmaW5lIElCU19PUF9JQlNfRENfUEhZX0FERFJfVkFMSUQoeCkgICAgICAgICAoKHgtPmlic19vcF9kYXRhM19sb3cgJiBEQ19NQVNLX1BIWV9BRERSX1ZBTElEKSAhPSAwKQorCisvKiogMTkgaWJzX2RjX2wyX3RsYl9oaXRfMWdiOiBEYXRhIGNhY2hlIEwyVExCIGhpdCBpbiAxRyBwYWdlICovCisjZGVmaW5lIElCU19PUF9JQlNfRENfTDJfVExCX0hJVF8xR0IoeCkgICAgICAgICAoKHgtPmlic19vcF9kYXRhM19sb3cgJiBEQ19NQVNLX0wyX0hJVF8xRykgIT0gMCkKKworCisvKioKKyAqIEFnZ3JlZ2F0ZSB0aGUgSUJTIGRlcml2ZWQgZXZlbnQuIEluY3JlYXNlIHRoZQorICogZGVyaXZlZCBldmVudCBjb3VudCBieSBvbmUuCisgKi8KKyNkZWZpbmUgQUdHX0lCU19FVkVOVChFVikgICAgICAgICAgICAgICBvcGRfbG9nX2lic19ldmVudChFViwgdHJhbnMpCisKKy8qKgorICogQWdncmVnYXRlIHRoZSBJQlMgbGF0ZW5jeS9jeWNsZSBjb3VudHMuIEluY3JlYXNlIHRoZQorICogZGVyaXZlZCBldmVudCBjb3VudCBieSB0aGUgc3BlY2lmaWVkIGNvdW50IHZhbHVlLgorICovCisjZGVmaW5lIEFHR19JQlNfQ09VTlQoRVYsIENPVU5UKSAgICAgICAgb3BkX2xvZ19pYnNfY291bnQoRVYsIHRyYW5zLCBDT1VOVCkKKworI2VuZGlmIC8qT1BEX0lCU19NQUNST19IKi8KZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2RhZW1vbi9vcGRfaWJzX3RyYW5zLmMgYi9vcHJvZmlsZS0wLjkuNy9kYWVtb24vb3BkX2lic190cmFucy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4YmVlMzgKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9kYWVtb24vb3BkX2lic190cmFucy5jCkBAIC0wLDAgKzEsNjQ2IEBACisvKioKKyAqIEBmaWxlIGRhZW1vbi9vcGRfaWJzX3RyYW5zLmMKKyAqIEFNRCBJbnN0cnVjdGlvbiBCYXNlZCBTYW1wbGluZyAoSUJTKSB0cmFuc2xhdGlvbi4KKyAqCisgKiBAcmVtYXJrIENvcHlyaWdodCAyMDA4IC0gMjAxMCBPUHJvZmlsZSBhdXRob3JzCisgKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORworICoKKyAqIEBhdXRob3IgSmFzb24gWWVoIDxqYXNvbi55ZWhAYW1kLmNvbT4KKyAqIEBhdXRob3IgUGF1bCBEcm9uZ293c2tpIDxwYXVsLmRyb25nb3dza2lAYW1kLmNvbT4KKyAqIEBhdXRob3IgU3VyYXZlZSBTdXRoaWt1bHBhbml0IDxzdXJhdmVlLnN1dGhpa3VscGFuaXRAYW1kLmNvbT4KKyAqIENvcHlyaWdodCAoYykgMjAwOCBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCisgKi8KKworI2luY2x1ZGUgIm9wZF9pYnMuaCIKKyNpbmNsdWRlICJvcGRfaWJzX21hY3JvLmgiCisjaW5jbHVkZSAib3BkX2lic190cmFucy5oIgorI2luY2x1ZGUgIm9wZF90cmFucy5oIgorI2luY2x1ZGUgIm9wZF9wcmludGYuaCIKKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKK2V4dGVybiBGSUxFICogYnRhX2xvZzsKK2V4dGVybiBGSUxFICogbWVtYWNjZXNzX2xvZzsKKworLyoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGRVRDSCBERVJJVkVEIEZVTkNUSU9OCisgKi8KK3ZvaWQgdHJhbnNfaWJzX2ZldGNoIChzdHJ1Y3QgdHJhbnNpZW50ICogdHJhbnMsIHVuc2lnbmVkIGludCBzZWxlY3RlZF9mbGFnKQoreworCXN0cnVjdCBpYnNfZmV0Y2hfc2FtcGxlICogdHJhbnNfZmV0Y2ggPSAoKHN0cnVjdCBpYnNfc2FtcGxlKikodHJhbnMtPmV4dCkpLT5mZXRjaDsKKworCWlmICgoc2VsZWN0ZWRfZmxhZykgPT0gMCkKKwkJcmV0dXJuOworCisJQ0hFQ0tfRkVUQ0hfU0VMRUNURURfRkxBRyhERV9JQlNfRkVUQ0hfQUxMKSB7CisJCS8qIElCUyBhbGwgZmV0Y2ggc2FtcGxlcyAoa2lsbHMgKyBhdHRlbXB0cykgKi8KKwkJQUdHX0lCU19FVkVOVChERV9JQlNfRkVUQ0hfQUxMKTsKKwl9CQkKKworCUNIRUNLX0ZFVENIX1NFTEVDVEVEX0ZMQUcoREVfSUJTX0ZFVENIX0tJTExFRCkgeworCQkvKiBJQlMga2lsbGVkIGZldGNoZXMgKCJjYXNlIDAiKSAtLSBBbGwgaW50ZXJlc3RpbmcgZXZlbnQKKwkJICogZmxhZ3MgYXJlIGNsZWFyICovCisJCWlmIChJQlNfRkVUQ0hfS0lMTEVEKHRyYW5zX2ZldGNoKSkKKwkJCUFHR19JQlNfRVZFTlQoREVfSUJTX0ZFVENIX0tJTExFRCk7CisJfQorCisJQ0hFQ0tfRkVUQ0hfU0VMRUNURURfRkxBRyhERV9JQlNfRkVUQ0hfQVRURU1QVEVEKSB7CisJCS8qIEFueSBub24ta2lsbGVkIGZldGNoIGlzIGFuIGF0dGVtcHRlZCBmZXRjaCAqLworCQlBR0dfSUJTX0VWRU5UKERFX0lCU19GRVRDSF9BVFRFTVBURUQpOworCX0KKworCUNIRUNLX0ZFVENIX1NFTEVDVEVEX0ZMQUcoREVfSUJTX0ZFVENIX0NPTVBMRVRFRCkgeworCQlpZiAoSUJTX0ZFVENIX0ZFVENIX0NPTVBMRVRJT04odHJhbnNfZmV0Y2gpKQorCQkJLyogSUJTIEZldGNoIENvbXBsZXRlZCAqLworCQkJQUdHX0lCU19FVkVOVChERV9JQlNfRkVUQ0hfQ09NUExFVEVEKTsKKwl9CisKKwlDSEVDS19GRVRDSF9TRUxFQ1RFRF9GTEFHKERFX0lCU19GRVRDSF9BQk9SVEVEKSB7CisJCWlmICghSUJTX0ZFVENIX0ZFVENIX0NPTVBMRVRJT04odHJhbnNfZmV0Y2gpKQorCQkJLyogSUJTIEZldGNoIEFib3J0ZWQgKi8KKwkJCUFHR19JQlNfRVZFTlQoREVfSUJTX0ZFVENIX0FCT1JURUQpOworCX0KKworCUNIRUNLX0ZFVENIX1NFTEVDVEVEX0ZMQUcoREVfSUJTX0wxX0lUTEJfSElUKSB7CisJCS8qIElCUyBMMSBJVExCIGhpdCAqLworCQlpZiAoSUJTX0ZFVENIX0wxX1RMQl9ISVQodHJhbnNfZmV0Y2gpKQorCQkJQUdHX0lCU19FVkVOVChERV9JQlNfTDFfSVRMQl9ISVQpOworCX0KKworCUNIRUNLX0ZFVENIX1NFTEVDVEVEX0ZMQUcoREVfSUJTX0lUTEJfTDFNX0wySCkgeworCQkvKiBJQlMgTDEgSVRMQiBtaXNzIGFuZCBMMiBJVExCIGhpdCAqLworCQlpZiAoSUJTX0ZFVENIX0lUTEJfTDFNX0wySCh0cmFuc19mZXRjaCkpCisJCQlBR0dfSUJTX0VWRU5UKERFX0lCU19JVExCX0wxTV9MMkgpOworCX0KKworCUNIRUNLX0ZFVENIX1NFTEVDVEVEX0ZMQUcoREVfSUJTX0lUTEJfTDFNX0wyTSkgeworCQkvKiBJQlMgTDEgJiBMMiBJVExCIG1pc3M7IGNvbXBsZXRlIElUTEIgbWlzcyAqLworCQlpZiAoSUJTX0ZFVENIX0lUTEJfTDFNX0wyTSh0cmFuc19mZXRjaCkpCisJCQlBR0dfSUJTX0VWRU5UKERFX0lCU19JVExCX0wxTV9MMk0pOworCX0KKworCUNIRUNLX0ZFVENIX1NFTEVDVEVEX0ZMQUcoREVfSUJTX0lDX01JU1MpIHsKKwkJLyogSUJTIGluc3RydWN0aW9uIGNhY2hlIG1pc3MgKi8KKwkJaWYgKElCU19GRVRDSF9JTlNUX0NBQ0hFX01JU1ModHJhbnNfZmV0Y2gpKQorCQkJQUdHX0lCU19FVkVOVChERV9JQlNfSUNfTUlTUyk7CisJfQorCisJQ0hFQ0tfRkVUQ0hfU0VMRUNURURfRkxBRyhERV9JQlNfSUNfSElUKSB7CisJCS8qIElCUyBpbnN0cnVjdGlvbiBjYWNoZSBoaXQgKi8KKwkJaWYgKElCU19GRVRDSF9JTlNUX0NBQ0hFX0hJVCh0cmFuc19mZXRjaCkpCisJCQlBR0dfSUJTX0VWRU5UKERFX0lCU19JQ19ISVQpOworCX0KKworCUNIRUNLX0ZFVENIX1NFTEVDVEVEX0ZMQUcoREVfSUJTX0ZFVENIXzRLX1BBR0UpIHsKKwkJaWYgKElCU19GRVRDSF9QSFlTX0FERFJfVkFMSUQodHJhbnNfZmV0Y2gpCisJCSAgICAmJiBJQlNfRkVUQ0hfVExCX1BBR0VfU0laRV80Syh0cmFuc19mZXRjaCkpCisJCQlBR0dfSUJTX0VWRU5UKERFX0lCU19GRVRDSF80S19QQUdFKTsKKwl9CisKKwlDSEVDS19GRVRDSF9TRUxFQ1RFRF9GTEFHKERFX0lCU19GRVRDSF8yTV9QQUdFKSB7CisJCWlmIChJQlNfRkVUQ0hfUEhZU19BRERSX1ZBTElEKHRyYW5zX2ZldGNoKQorCQkgICAgJiYgSUJTX0ZFVENIX1RMQl9QQUdFX1NJWkVfMk0odHJhbnNfZmV0Y2gpKQorCQkJQUdHX0lCU19FVkVOVChERV9JQlNfRkVUQ0hfMk1fUEFHRSk7CisJfQorCisJQ0hFQ0tfRkVUQ0hfU0VMRUNURURfRkxBRyhERV9JQlNfRkVUQ0hfMUdfUEFHRSkgeworCQlpZiAoSUJTX0ZFVENIX1BIWVNfQUREUl9WQUxJRCh0cmFuc19mZXRjaCkKKwkJICAgICYmIElCU19GRVRDSF9UTEJfUEFHRV9TSVpFXzFHKHRyYW5zX2ZldGNoKSkKKwkJCUFHR19JQlNfRVZFTlQoREVfSUJTX0ZFVENIXzFHX1BBR0UpOworCX0KKworCUNIRUNLX0ZFVENIX1NFTEVDVEVEX0ZMQUcoREVfSUJTX0ZFVENIX1hYX1BBR0UpIHsKKwl9CisKKwlDSEVDS19GRVRDSF9TRUxFQ1RFRF9GTEFHKERFX0lCU19GRVRDSF9MQVRFTkNZKSB7CisJCWlmIChJQlNfRkVUQ0hfRkVUQ0hfTEFURU5DWSh0cmFuc19mZXRjaCkpCisJCQlBR0dfSUJTX0NPVU5UKERFX0lCU19GRVRDSF9MQVRFTkNZLAorCQkJCSAgICAgIElCU19GRVRDSF9GRVRDSF9MQVRFTkNZKHRyYW5zX2ZldGNoKSk7CisJfQorfQorCisKKy8qCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gT1AgREVSSVZFRCBGVU5DVElPTgorICovCit2b2lkIHRyYW5zX2lic19vcCAoc3RydWN0IHRyYW5zaWVudCAqIHRyYW5zLCB1bnNpZ25lZCBpbnQgc2VsZWN0ZWRfZmxhZykKK3sKKwlzdHJ1Y3QgaWJzX29wX3NhbXBsZSAqIHRyYW5zX29wID0gKChzdHJ1Y3QgaWJzX3NhbXBsZSopKHRyYW5zLT5leHQpKS0+b3A7CisKKwlpZiAoKHNlbGVjdGVkX2ZsYWcpID09IDApCisJCXJldHVybjsKKworCUNIRUNLX09QX1NFTEVDVEVEX0ZMQUcoREVfSUJTX09QX0FMTCkgeworCQkvKiBBbGwgSUJTIG9wIHNhbXBsZXMgKi8KKwkJQUdHX0lCU19FVkVOVChERV9JQlNfT1BfQUxMKTsKKwl9CisKKwlDSEVDS19PUF9TRUxFQ1RFRF9GTEFHKERFX0lCU19PUF9UQUdfVE9fUkVUSVJFKSB7CisJCS8qIFRhbGx5IHJldGlyZSBjeWNsZSBjb3VudHMgZm9yIGFsbCBzYW1wbGVkIG1hY3JvLW9wcworCQkgKiBJQlMgdGFnIHRvIHJldGlyZSBjeWNsZXMgKi8KKwkJaWYgKElCU19PUF9UQUdfVE9fUkVUSVJFX0NZQ0xFUyh0cmFuc19vcCkpCisJCQlBR0dfSUJTX0NPVU5UKERFX0lCU19PUF9UQUdfVE9fUkVUSVJFLAorCQkJCUlCU19PUF9UQUdfVE9fUkVUSVJFX0NZQ0xFUyh0cmFuc19vcCkpOworCX0KKworCUNIRUNLX09QX1NFTEVDVEVEX0ZMQUcoREVfSUJTX09QX0NPTVBfVE9fUkVUSVJFKSB7CisJCS8qIElCUyBjb21wbGV0aW9uIHRvIHJldGlyZSBjeWNsZXMgKi8KKwkJaWYgKElCU19PUF9DT01fVE9fUkVUSVJFX0NZQ0xFUyh0cmFuc19vcCkpCisJCQlBR0dfSUJTX0NPVU5UKERFX0lCU19PUF9DT01QX1RPX1JFVElSRSwKKwkJCQlJQlNfT1BfQ09NX1RPX1JFVElSRV9DWUNMRVModHJhbnNfb3ApKTsKKwl9CisKKwlDSEVDS19PUF9TRUxFQ1RFRF9GTEFHKERFX0lCU19CUkFOQ0hfUkVUSVJFRCkgeworCQlpZiAoSUJTX09QX0JSQU5DSF9SRVRJUkVEKHRyYW5zX29wKSkKKwkJCS8qIElCUyBCcmFuY2ggcmV0aXJlZCBvcCAqLworCQkJQUdHX0lCU19FVkVOVChERV9JQlNfQlJBTkNIX1JFVElSRUQpIDsKKwl9CisKKwlDSEVDS19PUF9TRUxFQ1RFRF9GTEFHKERFX0lCU19CUkFOQ0hfTUlTUCkgeworCQlpZiAoSUJTX09QX0JSQU5DSF9SRVRJUkVEKHRyYW5zX29wKQorCQkgICAgLyogVGVzdCBicmFuY2gtc3BlY2lmaWMgZXZlbnQgZmxhZ3MgKi8KKwkJICAgIC8qIElCUyBtaXNwcmVkaWN0ZWQgQnJhbmNoIG9wICovCisJCSAgICAmJiBJQlNfT1BfQlJBTkNIX01JU1BSRURJQ1QodHJhbnNfb3ApKQorCQkJQUdHX0lCU19FVkVOVChERV9JQlNfQlJBTkNIX01JU1ApIDsKKwl9CisKKwlDSEVDS19PUF9TRUxFQ1RFRF9GTEFHKERFX0lCU19CUkFOQ0hfVEFLRU4pIHsKKwkJaWYgKElCU19PUF9CUkFOQ0hfUkVUSVJFRCh0cmFuc19vcCkKKwkJICAgIC8qIElCUyB0YWtlbiBCcmFuY2ggb3AgKi8KKwkJICAgICYmIElCU19PUF9CUkFOQ0hfVEFLRU4odHJhbnNfb3ApKQorCQkJQUdHX0lCU19FVkVOVChERV9JQlNfQlJBTkNIX1RBS0VOKTsKKwl9CisKKwlDSEVDS19PUF9TRUxFQ1RFRF9GTEFHKERFX0lCU19CUkFOQ0hfTUlTUF9UQUtFTikgeworCQlpZiAoSUJTX09QX0JSQU5DSF9SRVRJUkVEKHRyYW5zX29wKQorCQkgICAgLyogSUJTIG1pc3ByZWRpY3RlZCB0YWtlbiBicmFuY2ggb3AgKi8KKwkJICAgICYmIElCU19PUF9CUkFOQ0hfVEFLRU4odHJhbnNfb3ApCisJCSAgICAmJiBJQlNfT1BfQlJBTkNIX01JU1BSRURJQ1QodHJhbnNfb3ApKQorCQkJQUdHX0lCU19FVkVOVChERV9JQlNfQlJBTkNIX01JU1BfVEFLRU4pOworCX0KKworCUNIRUNLX09QX1NFTEVDVEVEX0ZMQUcoREVfSUJTX1JFVFVSTikgeworCQlpZiAoSUJTX09QX0JSQU5DSF9SRVRJUkVEKHRyYW5zX29wKQorCQkgICAgLyogSUJTIHJldHVybiBvcCAqLworCQkgICAgJiYgSUJTX09QX1JFVFVSTih0cmFuc19vcCkpCisJCQlBR0dfSUJTX0VWRU5UKERFX0lCU19SRVRVUk4pOworCX0KKworCUNIRUNLX09QX1NFTEVDVEVEX0ZMQUcoREVfSUJTX1JFVFVSTl9NSVNQKSB7CisJCWlmIChJQlNfT1BfQlJBTkNIX1JFVElSRUQodHJhbnNfb3ApCisJCSAgICAvKiBJQlMgbWlzcHJlZGljdGVkIHJldHVybiBvcCAqLworCQkgICAgJiYgSUJTX09QX1JFVFVSTih0cmFuc19vcCkKKwkJICAgICYmIElCU19PUF9CUkFOQ0hfTUlTUFJFRElDVCh0cmFuc19vcCkpCisJCQlBR0dfSUJTX0VWRU5UKERFX0lCU19SRVRVUk5fTUlTUCk7CisJfQorCisJQ0hFQ0tfT1BfU0VMRUNURURfRkxBRyhERV9JQlNfUkVTWU5DKSB7CisJCS8qIFRlc3QgZm9yIGEgcmVzeW5jIG1hY3JvLW9wICovCisJCWlmIChJQlNfT1BfQlJBTkNIX1JFU1lOQyh0cmFuc19vcCkpCisJCQlBR0dfSUJTX0VWRU5UKERFX0lCU19SRVNZTkMpOworCX0KK30KKworCisvKgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE9QIExTIERFUklWRUQgRlVOQ1RJT04KKyAqLwordm9pZCB0cmFuc19pYnNfb3BfbHMgKHN0cnVjdCB0cmFuc2llbnQgKiB0cmFucywgdW5zaWduZWQgaW50IHNlbGVjdGVkX2ZsYWcpCit7CisJc3RydWN0IGlic19vcF9zYW1wbGUgKiB0cmFuc19vcCA9ICgoc3RydWN0IGlic19zYW1wbGUqKSh0cmFucy0+ZXh0KSktPm9wOworCisJLyogUHJlbGltaW5hcnkgY2hlY2sgKi8KKwlpZiAoIUlCU19PUF9JQlNfTERfT1AodHJhbnNfb3ApICYmICFJQlNfT1BfSUJTX1NUX09QKHRyYW5zX29wKSkKKwkJcmV0dXJuOworCisKKwlpZiAoKHNlbGVjdGVkX2ZsYWcpID09IDApCisJCXJldHVybjsKKworCUNIRUNLX09QX0xTX1NFTEVDVEVEX0ZMQUcoREVfSUJTX0xTX0FMTF9PUCkgeworCQkvKiBDb3VudCB0aGUgbnVtYmVyIG9mIExTIG9wIHNhbXBsZXMgKi8KKwkJQUdHX0lCU19FVkVOVChERV9JQlNfTFNfQUxMX09QKSA7CisJfQorCisJQ0hFQ0tfT1BfTFNfU0VMRUNURURfRkxBRyhERV9JQlNfTFNfTE9BRF9PUCkgeworCQlpZiAoSUJTX09QX0lCU19MRF9PUCh0cmFuc19vcCkpCisJCQkvKiBUQUxMeSBhbiBJQlMgbG9hZCBkZXJpdmVkIGV2ZW50ICovCisJCQlBR0dfSUJTX0VWRU5UKERFX0lCU19MU19MT0FEX09QKSA7CisJfQorCisJQ0hFQ0tfT1BfTFNfU0VMRUNURURfRkxBRyhERV9JQlNfTFNfU1RPUkVfT1ApIHsKKwkJaWYgKElCU19PUF9JQlNfU1RfT1AodHJhbnNfb3ApKQorCQkJLyogQ291bnQgYW5kIGhhbmRsZSBzdG9yZSBvcGVyYXRpb25zICovCisJCQlBR0dfSUJTX0VWRU5UKERFX0lCU19MU19TVE9SRV9PUCk7CisJfQorCisJQ0hFQ0tfT1BfTFNfU0VMRUNURURfRkxBRyhERV9JQlNfTFNfRFRMQl9MMUgpIHsKKwkJaWYgKElCU19PUF9JQlNfRENfTElOX0FERFJfVkFMSUQodHJhbnNfb3ApCisJCSAgICAmJiAhSUJTX09QX0lCU19EQ19MMV9UTEJfTUlTUyh0cmFuc19vcCkpCisJCQkvKiBMMSBEVExCIGhpdCAtLSBUaGlzIGlzIHRoZSBtb3N0IGZyZXF1ZW50IGNhc2UgKi8KKwkJCUFHR19JQlNfRVZFTlQoREVfSUJTX0xTX0RUTEJfTDFIKTsKKwl9CisKKwlDSEVDS19PUF9MU19TRUxFQ1RFRF9GTEFHKERFX0lCU19MU19EVExCX0wxTV9MMkgpIHsKKwkJLyogbDJfdHJhbnNsYXRpb25fc2l6ZSA9IDEgKi8KKwkJaWYgKElCU19PUF9JQlNfRENfTElOX0FERFJfVkFMSUQodHJhbnNfb3ApCisJCSAgICAmJiBJQlNfT1BfSUJTX0RDX0wxX1RMQl9NSVNTKHRyYW5zX29wKQorCQkgICAgJiYgIUlCU19PUF9JQlNfRENfTDJfVExCX01JU1ModHJhbnNfb3ApKQorCQkJLyogTDEgRFRMQiBtaXNzLCBMMiBEVExCIGhpdCAqLworCQkJQUdHX0lCU19FVkVOVChERV9JQlNfTFNfRFRMQl9MMU1fTDJIKTsKKwl9CisKKwlDSEVDS19PUF9MU19TRUxFQ1RFRF9GTEFHKERFX0lCU19MU19EVExCX0wxTV9MMk0pIHsKKwkJaWYgKElCU19PUF9JQlNfRENfTElOX0FERFJfVkFMSUQodHJhbnNfb3ApCisJCSAgICAmJiBJQlNfT1BfSUJTX0RDX0wxX1RMQl9NSVNTKHRyYW5zX29wKQorCQkgICAgJiYgSUJTX09QX0lCU19EQ19MMl9UTEJfTUlTUyh0cmFuc19vcCkpCisJCQkvKiBMMSBEVExCIG1pc3MsIEwyIERUTEIgbWlzcyAqLworCQkJQUdHX0lCU19FVkVOVChERV9JQlNfTFNfRFRMQl9MMU1fTDJNKTsKKwl9CisKKwlDSEVDS19PUF9MU19TRUxFQ1RFRF9GTEFHKERFX0lCU19MU19EQ19NSVNTKSB7CisJCWlmIChJQlNfT1BfSUJTX0RDX01JU1ModHJhbnNfb3ApKQorCQkJQUdHX0lCU19FVkVOVChERV9JQlNfTFNfRENfTUlTUyk7CisJfQorCisJQ0hFQ0tfT1BfTFNfU0VMRUNURURfRkxBRyhERV9JQlNfTFNfRENfSElUKSB7CisJCWlmICghSUJTX09QX0lCU19EQ19NSVNTKHRyYW5zX29wKSkKKwkJCUFHR19JQlNfRVZFTlQoREVfSUJTX0xTX0RDX0hJVCk7CisJfQorCisJQ0hFQ0tfT1BfTFNfU0VMRUNURURfRkxBRyhERV9JQlNfTFNfTUlTQUxJR05FRCkgeworCQlpZiAoSUJTX09QX0lCU19EQ19NSVNTX0FDQyh0cmFuc19vcCkpCisJCQlBR0dfSUJTX0VWRU5UKERFX0lCU19MU19NSVNBTElHTkVEKTsKKwl9CisKKwlDSEVDS19PUF9MU19TRUxFQ1RFRF9GTEFHKERFX0lCU19MU19CTktfQ09ORl9MT0FEKSB7CisJCWlmIChJQlNfT1BfSUJTX0RDX0xEX0JOS19DT04odHJhbnNfb3ApKQorCQkJQUdHX0lCU19FVkVOVChERV9JQlNfTFNfQk5LX0NPTkZfTE9BRCk7CisJfQorCisJQ0hFQ0tfT1BfTFNfU0VMRUNURURfRkxBRyhERV9JQlNfTFNfQk5LX0NPTkZfU1RPUkUpIHsKKwkJaWYgKElCU19PUF9JQlNfRENfU1RfQk5LX0NPTih0cmFuc19vcCkpCisJCQlBR0dfSUJTX0VWRU5UKERFX0lCU19MU19CTktfQ09ORl9TVE9SRSk7CisJfQorCisJQ0hFQ0tfT1BfTFNfU0VMRUNURURfRkxBRyhERV9JQlNfTFNfU1RMX0ZPUldBUkRFRCkgeworCQlpZiAoSUJTX09QX0lCU19MRF9PUCh0cmFuc19vcCkKKwkJICAgIC8qIERhdGEgZm9yd2FyZGluZyBpbmZvIGFyZSB2YWxpZCBvbmx5IGZvciBsb2FkIG9wcyAqLworCQkgICAgJiYgSUJTX09QX0lCU19EQ19TVF9UT19MRF9GV0QodHJhbnNfb3ApKQorCQkJQUdHX0lCU19FVkVOVChERV9JQlNfTFNfU1RMX0ZPUldBUkRFRCkgOworCX0KKworCUNIRUNLX09QX0xTX1NFTEVDVEVEX0ZMQUcoREVfSUJTX0xTX1NUTF9DQU5DRUxMRUQpIHsKKwkJaWYgKElCU19PUF9JQlNfTERfT1AodHJhbnNfb3ApKQorCQlpZiAoSUJTX09QX0lCU19EQ19TVF9UT19MRF9DQU4odHJhbnNfb3ApKQorCQkJQUdHX0lCU19FVkVOVChERV9JQlNfTFNfU1RMX0NBTkNFTExFRCkgOworCX0KKworCUNIRUNLX09QX0xTX1NFTEVDVEVEX0ZMQUcoREVfSUJTX0xTX1VDX01FTV9BQ0NFU1MpIHsKKwkJaWYgKElCU19PUF9JQlNfRENfVUNfTUVNX0FDQyh0cmFuc19vcCkpCisJCQlBR0dfSUJTX0VWRU5UKERFX0lCU19MU19VQ19NRU1fQUNDRVNTKTsKKwl9CisKKwlDSEVDS19PUF9MU19TRUxFQ1RFRF9GTEFHKERFX0lCU19MU19XQ19NRU1fQUNDRVNTKSB7CisJCWlmIChJQlNfT1BfSUJTX0RDX1dDX01FTV9BQ0ModHJhbnNfb3ApKQorCQkJQUdHX0lCU19FVkVOVChERV9JQlNfTFNfV0NfTUVNX0FDQ0VTUyk7CisJfQorCisJQ0hFQ0tfT1BfTFNfU0VMRUNURURfRkxBRyhERV9JQlNfTFNfTE9DS0VEX09QKSB7CisJCWlmIChJQlNfT1BfSUJTX0xPQ0tFRF9PUCh0cmFuc19vcCkpCisJCQlBR0dfSUJTX0VWRU5UKERFX0lCU19MU19MT0NLRURfT1ApOworCX0KKworCUNIRUNLX09QX0xTX1NFTEVDVEVEX0ZMQUcoREVfSUJTX0xTX01BQl9ISVQpIHsKKwkJaWYgKElCU19PUF9JQlNfRENfTUFCX0hJVCh0cmFuc19vcCkpCisJCQlBR0dfSUJTX0VWRU5UKERFX0lCU19MU19NQUJfSElUKTsKKwl9CisKKwlDSEVDS19PUF9MU19TRUxFQ1RFRF9GTEFHKERFX0lCU19MU19MMV9EVExCXzRLKSB7CisJCS8qIGwxX3RyYW5zbGF0aW9uICovCisJCWlmIChJQlNfT1BfSUJTX0RDX0xJTl9BRERSX1ZBTElEKHRyYW5zX29wKQorCQkgICAgJiYgIUlCU19PUF9JQlNfRENfTDFfVExCX01JU1ModHJhbnNfb3ApCisKKwkJICAgICYmICFJQlNfT1BfSUJTX0RDX0wxX1RMQl9ISVRfMk1CKHRyYW5zX29wKQorCQkgICAgJiYgIUlCU19PUF9JQlNfRENfTDFfVExCX0hJVF8xR0IodHJhbnNfb3ApKQorCQkJLyogVGhpcyBpcyB0aGUgbW9zdCBjb21tb24gY2FzZSwgdW5mb3J0dW5hdGVseSAqLworCQkJQUdHX0lCU19FVkVOVChERV9JQlNfTFNfTDFfRFRMQl80SykgOworCX0KKworCUNIRUNLX09QX0xTX1NFTEVDVEVEX0ZMQUcoREVfSUJTX0xTX0wxX0RUTEJfMk0pIHsKKwkJLyogbDFfdHJhbnNsYXRpb24gKi8KKwkJaWYgKElCU19PUF9JQlNfRENfTElOX0FERFJfVkFMSUQodHJhbnNfb3ApCisJCSAgICAmJiAhSUJTX09QX0lCU19EQ19MMV9UTEJfTUlTUyh0cmFuc19vcCkKKworCQkgICAgJiYgSUJTX09QX0lCU19EQ19MMV9UTEJfSElUXzJNQih0cmFuc19vcCkpCisJCQkvKiAyTSBMMSBEVExCIHBhZ2UgdHJhbnNsYXRpb24gKi8KKwkJCUFHR19JQlNfRVZFTlQoREVfSUJTX0xTX0wxX0RUTEJfMk0pOworCX0KKworCUNIRUNLX09QX0xTX1NFTEVDVEVEX0ZMQUcoREVfSUJTX0xTX0wxX0RUTEJfMUcpIHsKKwkJLyogbDFfdHJhbnNsYXRpb24gKi8KKwkJaWYgKElCU19PUF9JQlNfRENfTElOX0FERFJfVkFMSUQodHJhbnNfb3ApCisJCSAgICAmJiAhSUJTX09QX0lCU19EQ19MMV9UTEJfTUlTUyh0cmFuc19vcCkKKworCQkgICAgJiYgIUlCU19PUF9JQlNfRENfTDFfVExCX0hJVF8yTUIodHJhbnNfb3ApCisJCSAgICAmJiBJQlNfT1BfSUJTX0RDX0wxX1RMQl9ISVRfMUdCKHRyYW5zX29wKSkKKwkJCS8qIDFHIEwxIERUTEIgcGFnZSB0cmFuc2xhdGlvbiAqLworCQkJQUdHX0lCU19FVkVOVChERV9JQlNfTFNfTDFfRFRMQl8xRyk7CisJfQorCisJQ0hFQ0tfT1BfTFNfU0VMRUNURURfRkxBRyhERV9JQlNfTFNfTDFfRFRMQl9SRVMpIHsKKwl9CisKKwlDSEVDS19PUF9MU19TRUxFQ1RFRF9GTEFHKERFX0lCU19MU19MMl9EVExCXzRLKSB7CisJCS8qIGwyX3RyYW5zbGF0aW9uX3NpemUgPSAxICovCisJCWlmIChJQlNfT1BfSUJTX0RDX0xJTl9BRERSX1ZBTElEKHRyYW5zX29wKQorCQkgICAgJiYgSUJTX09QX0lCU19EQ19MMV9UTEJfTUlTUyh0cmFuc19vcCkKKwkJICAgICYmICFJQlNfT1BfSUJTX0RDX0wyX1RMQl9NSVNTKHRyYW5zX29wKQorCisJCSAgICAvKiBMMiBEVExCIHBhZ2UgdHJhbnNsYXRpb24gKi8KKwkJICAgICYmICFJQlNfT1BfSUJTX0RDX0wyX1RMQl9ISVRfMk1CKHRyYW5zX29wKQorCQkgICAgJiYgIUlCU19PUF9JQlNfRENfTDJfVExCX0hJVF8xR0IodHJhbnNfb3ApKQorCQkJLyogNEsgTDIgRFRMQiBwYWdlIHRyYW5zbGF0aW9uICovCisJCQlBR0dfSUJTX0VWRU5UKERFX0lCU19MU19MMl9EVExCXzRLKTsKKwl9CisKKwlDSEVDS19PUF9MU19TRUxFQ1RFRF9GTEFHKERFX0lCU19MU19MMl9EVExCXzJNKSB7CisJCS8qIGwyX3RyYW5zbGF0aW9uX3NpemUgPSAxICovCisJCWlmIChJQlNfT1BfSUJTX0RDX0xJTl9BRERSX1ZBTElEKHRyYW5zX29wKQorCQkgICAgJiYgSUJTX09QX0lCU19EQ19MMV9UTEJfTUlTUyh0cmFuc19vcCkKKwkJICAgICYmICFJQlNfT1BfSUJTX0RDX0wyX1RMQl9NSVNTKHRyYW5zX29wKQorCisJCSAgICAvKiBMMiBEVExCIHBhZ2UgdHJhbnNsYXRpb24gKi8KKwkJICAgICYmIElCU19PUF9JQlNfRENfTDJfVExCX0hJVF8yTUIodHJhbnNfb3ApCisJCSAgICAmJiAhSUJTX09QX0lCU19EQ19MMl9UTEJfSElUXzFHQih0cmFuc19vcCkpCisJCQkvKiAyTSBMMiBEVExCIHBhZ2UgdHJhbnNsYXRpb24gKi8KKwkJCUFHR19JQlNfRVZFTlQoREVfSUJTX0xTX0wyX0RUTEJfMk0pOworCX0KKworCUNIRUNLX09QX0xTX1NFTEVDVEVEX0ZMQUcoREVfSUJTX0xTX0wyX0RUTEJfMUcpIHsKKwkJLyogbDJfdHJhbnNsYXRpb25fc2l6ZSA9IDEgKi8KKwkJaWYgKElCU19PUF9JQlNfRENfTElOX0FERFJfVkFMSUQodHJhbnNfb3ApCisJCSAgICAmJiBJQlNfT1BfSUJTX0RDX0wxX1RMQl9NSVNTKHRyYW5zX29wKQorCQkgICAgJiYgIUlCU19PUF9JQlNfRENfTDJfVExCX01JU1ModHJhbnNfb3ApCisKKwkJICAgIC8qIEwyIERUTEIgcGFnZSB0cmFuc2xhdGlvbiAqLworCQkgICAgJiYgIUlCU19PUF9JQlNfRENfTDJfVExCX0hJVF8yTUIodHJhbnNfb3ApCisJCSAgICAmJiBJQlNfT1BfSUJTX0RDX0wyX1RMQl9ISVRfMUdCKHRyYW5zX29wKSkKKwkJCS8qIDJNIEwyIERUTEIgcGFnZSB0cmFuc2xhdGlvbiAqLworCQkJQUdHX0lCU19FVkVOVChERV9JQlNfTFNfTDJfRFRMQl8xRyk7CisJfQorCisJQ0hFQ0tfT1BfTFNfU0VMRUNURURfRkxBRyhERV9JQlNfTFNfTDJfRFRMQl9SRVMyKSB7CisJfQorCisJQ0hFQ0tfT1BfTFNfU0VMRUNURURfRkxBRyhERV9JQlNfTFNfRENfTE9BRF9MQVQpIHsKKwkJaWYgKElCU19PUF9JQlNfTERfT1AodHJhbnNfb3ApCisJCSAgICAvKiBJZiB0aGUgbG9hZCBtaXNzZWQgaW4gREMsIHRhbGx5IHRoZSBEQyBsb2FkIG1pc3MgbGF0ZW5jeSAqLworCQkgICAgJiYgSUJTX09QX0lCU19EQ19NSVNTKHRyYW5zX29wKSkKKwkJCS8qIERDIGxvYWQgbWlzcyBsYXRlbmN5IGlzIG9ubHkgcmVsaWFibGUgZm9yIGxvYWQgb3BzICovCisJCQlBR0dfSUJTX0NPVU5UKERFX0lCU19MU19EQ19MT0FEX0xBVCwKKwkJCQkgICAgICBJQlNfT1BfRENfTUlTU19MQVRFTkNZKHRyYW5zX29wKSkgOworCX0KK30KKworLyoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSBPUCBOQiBERVJJVkVEIEZVTkNUSU9OCisgKgorICogTkIgZGF0YSBpcyBvbmx5IGd1YXJhbnRlZWQgcmVsaWFibGUgZm9yIGxvYWQgb3BlcmF0aW9ucworICogdGhhdCBtaXNzIGluIEwxIGFuZCBMMiBjYWNoZS4gTkIgZGF0YSBhcnJpdmVzIHRvbyBsYXRlCisgKiB0byBiZSByZWxpYWJsZSBmb3Igc3RvcmUgb3BlcmF0aW9ucworICovCit2b2lkIHRyYW5zX2lic19vcF9uYiAoc3RydWN0IHRyYW5zaWVudCAqIHRyYW5zLCB1bnNpZ25lZCBpbnQgc2VsZWN0ZWRfZmxhZykKK3sKKwlzdHJ1Y3QgaWJzX29wX3NhbXBsZSAqIHRyYW5zX29wID0gKChzdHJ1Y3QgaWJzX3NhbXBsZSopKHRyYW5zLT5leHQpKS0+b3A7CisKKwkvKiBQcmVsaW1pbmFyeSBjaGVjayAqLworCWlmICgoc2VsZWN0ZWRfZmxhZykgPT0gMCkKKwkJcmV0dXJuOworCisJaWYgKCFJQlNfT1BfSUJTX0xEX09QKHRyYW5zX29wKSkKKwkJcmV0dXJuOworCisJaWYgKCFJQlNfT1BfSUJTX0RDX01JU1ModHJhbnNfb3ApKQorCQlyZXR1cm47CisKKwlpZiAoSUJTX09QX05CX0lCU19SRVFfU1JDKHRyYW5zX29wKSA9PSAwKQorCQlyZXR1cm47CisKKwlDSEVDS19PUF9OQl9TRUxFQ1RFRF9GTEFHKERFX0lCU19OQl9MT0NBTCkgeworCQlpZiAoIUlCU19PUF9OQl9JQlNfUkVRX0RTVF9QUk9DKHRyYW5zX29wKSkKKwkJCS8qIFJlcXVlc3Qgd2FzIHNlcnZpY2VkIGJ5IGxvY2FsIHByb2Nlc3NvciAqLworCQkJQUdHX0lCU19FVkVOVChERV9JQlNfTkJfTE9DQUwpIDsKKwl9CisKKwlDSEVDS19PUF9OQl9TRUxFQ1RFRF9GTEFHKERFX0lCU19OQl9SRU1PVEUpIHsKKwkJaWYgKElCU19PUF9OQl9JQlNfUkVRX0RTVF9QUk9DKHRyYW5zX29wKSkKKwkJCS8qIFJlcXVlc3Qgd2FzIHNlcnZpY2VkIGJ5IHJlbW90ZSBwcm9jZXNzb3IgKi8KKwkJCUFHR19JQlNfRVZFTlQoREVfSUJTX05CX1JFTU9URSkgOworCX0KKworCUNIRUNLX09QX05CX1NFTEVDVEVEX0ZMQUcoREVfSUJTX05CX0xPQ0FMX0wzKSB7CisJCWlmICghSUJTX09QX05CX0lCU19SRVFfRFNUX1BST0ModHJhbnNfb3ApCisJCSAgICAmJiAgSUJTX09QX05CX0lCU19SRVFfU1JDXzAxKHRyYW5zX29wKSkKKwkJCUFHR19JQlNfRVZFTlQoREVfSUJTX05CX0xPQ0FMX0wzKTsKKwl9CisKKwlDSEVDS19PUF9OQl9TRUxFQ1RFRF9GTEFHKERFX0lCU19OQl9MT0NBTF9DQUNIRSkgeworCQlpZiAoIUlCU19PUF9OQl9JQlNfUkVRX0RTVF9QUk9DKHRyYW5zX29wKQorCQkgICAgJiYgIElCU19PUF9OQl9JQlNfUkVRX1NSQ18wMih0cmFuc19vcCkpCisJCQlBR0dfSUJTX0VWRU5UKERFX0lCU19OQl9MT0NBTF9DQUNIRSk7CisJfQorCisJQ0hFQ0tfT1BfTkJfU0VMRUNURURfRkxBRyhERV9JQlNfTkJfUkVNT1RFX0NBQ0hFKSB7CisJCWlmIChJQlNfT1BfTkJfSUJTX1JFUV9EU1RfUFJPQyh0cmFuc19vcCkKKwkJICAgICYmICBJQlNfT1BfTkJfSUJTX1JFUV9TUkNfMDIodHJhbnNfb3ApKQorCQkJQUdHX0lCU19FVkVOVChERV9JQlNfTkJfUkVNT1RFX0NBQ0hFKSA7CisJfQorCisJQ0hFQ0tfT1BfTkJfU0VMRUNURURfRkxBRyhERV9JQlNfTkJfTE9DQUxfRFJBTSkgeworCQlpZiAoIUlCU19PUF9OQl9JQlNfUkVRX0RTVF9QUk9DKHRyYW5zX29wKQorCQkgICAgJiYgIElCU19PUF9OQl9JQlNfUkVRX1NSQ18wMyh0cmFuc19vcCkpCisJCQlBR0dfSUJTX0VWRU5UKERFX0lCU19OQl9MT0NBTF9EUkFNKTsKKwl9CisKKwlDSEVDS19PUF9OQl9TRUxFQ1RFRF9GTEFHKERFX0lCU19OQl9SRU1PVEVfRFJBTSkgeworCQlpZiAoSUJTX09QX05CX0lCU19SRVFfRFNUX1BST0ModHJhbnNfb3ApCisJCSAgICAmJiAgSUJTX09QX05CX0lCU19SRVFfU1JDXzAzKHRyYW5zX29wKSkKKwkJCUFHR19JQlNfRVZFTlQoREVfSUJTX05CX1JFTU9URV9EUkFNKSA7CisJfQorCisJQ0hFQ0tfT1BfTkJfU0VMRUNURURfRkxBRyhERV9JQlNfTkJfTE9DQUxfT1RIRVIpIHsKKwkJaWYgKCFJQlNfT1BfTkJfSUJTX1JFUV9EU1RfUFJPQyh0cmFuc19vcCkKKwkJICAgICYmICBJQlNfT1BfTkJfSUJTX1JFUV9TUkNfMDcodHJhbnNfb3ApKQorCQkJQUdHX0lCU19FVkVOVChERV9JQlNfTkJfTE9DQUxfT1RIRVIpOworCX0KKworCUNIRUNLX09QX05CX1NFTEVDVEVEX0ZMQUcoREVfSUJTX05CX1JFTU9URV9PVEhFUikgeworCQlpZiAoSUJTX09QX05CX0lCU19SRVFfRFNUX1BST0ModHJhbnNfb3ApCisJCSAgICAmJiAgSUJTX09QX05CX0lCU19SRVFfU1JDXzA3KHRyYW5zX29wKSkKKwkJCUFHR19JQlNfRVZFTlQoREVfSUJTX05CX1JFTU9URV9PVEhFUikgOworCX0KKworCUNIRUNLX09QX05CX1NFTEVDVEVEX0ZMQUcoREVfSUJTX05CX0NBQ0hFX1NUQVRFX00pIHsKKwkJaWYgKElCU19PUF9OQl9JQlNfUkVRX1NSQ18wMih0cmFuc19vcCkKKwkJICAgICYmICFJQlNfT1BfTkJfSUJTX0NBQ0hFX0hJVF9TVCh0cmFuc19vcCkpCisJCQlBR0dfSUJTX0VWRU5UKERFX0lCU19OQl9DQUNIRV9TVEFURV9NKSA7CisJfQorCisJQ0hFQ0tfT1BfTkJfU0VMRUNURURfRkxBRyhERV9JQlNfTkJfQ0FDSEVfU1RBVEVfTykgeworCQlpZiAoSUJTX09QX05CX0lCU19SRVFfU1JDXzAyKHRyYW5zX29wKQorCQkgICAgJiYgSUJTX09QX05CX0lCU19DQUNIRV9ISVRfU1QodHJhbnNfb3ApKQorCQkJQUdHX0lCU19FVkVOVChERV9JQlNfTkJfQ0FDSEVfU1RBVEVfTykgOworCX0KKworCUNIRUNLX09QX05CX1NFTEVDVEVEX0ZMQUcoREVfSUJTX05CX0xPQ0FMX0xBVEVOQ1kpIHsKKwkJaWYgKCFJQlNfT1BfTkJfSUJTX1JFUV9EU1RfUFJPQyh0cmFuc19vcCkpCisJCQkvKiBSZXF1ZXN0IHdhcyBzZXJ2aWNlZCBieSBsb2NhbCBwcm9jZXNzb3IgKi8KKwkJCUFHR19JQlNfQ09VTlQoREVfSUJTX05CX0xPQ0FMX0xBVEVOQ1ksCisJCQkJICAgICAgSUJTX09QX0RDX01JU1NfTEFURU5DWSh0cmFuc19vcCkpOworCX0KKworCUNIRUNLX09QX05CX1NFTEVDVEVEX0ZMQUcoREVfSUJTX05CX1JFTU9URV9MQVRFTkNZKSB7CisJCWlmIChJQlNfT1BfTkJfSUJTX1JFUV9EU1RfUFJPQyh0cmFuc19vcCkpCisJCQkvKiBSZXF1ZXN0IHdhcyBzZXJ2aWNlZCBieSByZW1vdGUgcHJvY2Vzc29yICovCisJCQlBR0dfSUJTX0NPVU5UKERFX0lCU19OQl9SRU1PVEVfTEFURU5DWSwKKwkJCQkgICAgICBJQlNfT1BfRENfTUlTU19MQVRFTkNZKHRyYW5zX29wKSk7CisJfQorfQorCisKK2ludCB0cmFuc19pYnNfb3BfcmlwX2ludmFsaWQgKHN0cnVjdCB0cmFuc2llbnQgKiB0cmFucykKK3sKKwlzdHJ1Y3QgaWJzX29wX3NhbXBsZSAqIHRyYW5zX29wID0gKChzdHJ1Y3QgaWJzX3NhbXBsZSopKHRyYW5zLT5leHQpKS0+b3A7CisKKwlpZiAoSUJTX09QX1JJUF9JTlZBTElEKHRyYW5zX29wKSkKKwkJcmV0dXJuIDE7CQorCisJcmV0dXJuIDA7Cit9CisKKwordm9pZCB0cmFuc19pYnNfb3BfbWFza19yZXNlcnZlZCAodW5zaWduZWQgaW50IGZhbWlseSwgc3RydWN0IHRyYW5zaWVudCAqIHRyYW5zKQoreworCXN0cnVjdCBpYnNfb3Bfc2FtcGxlICogdHJhbnNfb3AgICAgPSAoKHN0cnVjdCBpYnNfc2FtcGxlKikodHJhbnMtPmV4dCkpLT5vcDsKKworCXN3aXRjaCAoZmFtaWx5KSB7CisJY2FzZSAweDEwOgorCQkvKiBSZXNlcnZlZCBJYnNSaXBJbnZhbGlkIChNU1JDMDAxXzEwMzVbMzhdKSovCisJCXRyYW5zX29wLT5pYnNfb3BfZGF0YTFfaGlnaCAmPSB+TUFTS19SSVBfSU5WQUxJRDsKKwkJYnJlYWs7CisJY2FzZSAweDEyOgorCQkvKiBSZXNlcnZlZCBOYklic1JlcURzdFByb2MgKE1TUkNDMDAxXzEwMzZbNF0pICovCisJCXRyYW5zX29wLT5pYnNfb3BfZGF0YTJfbG93ICY9IH5OQl9NQVNLX1JFUV9EU1RfUFJPQzsKKwkJLyogUmVzZXJ2ZWQgTmJJYnNSZXFDYWNoZUhpdFN0IChNU1JDQzAwMV8xMDM2WzVdKSAqLworCQl0cmFuc19vcC0+aWJzX29wX2RhdGEyX2xvdyAmPSB+TkJfTUFTS19MM19TVEFURTsKKwkJYnJlYWs7CisJY2FzZSAweDE0OgorCQkvKiBSZXNlcnZlZCBOYklic1JlcURzdFByb2MgKE1TUkNDMDAxXzEwMzZbNF0pICovCisJCXRyYW5zX29wLT5pYnNfb3BfZGF0YTJfbG93ICY9IH5OQl9NQVNLX1JFUV9EU1RfUFJPQzsKKwkJLyogUmVzZXJ2ZWQgTmJJYnNSZXFDYWNoZUhpdFN0IChNU1JDQzAwMV8xMDM2WzVdKSAqLworCQl0cmFuc19vcC0+aWJzX29wX2RhdGEyX2xvdyAmPSB+TkJfTUFTS19MM19TVEFURTsKKwkJLyogUmVzZXJ2ZWQgSWJzRGNMMXRsYkhpdDFHIChNU1JDMDAxXzEwMzdbNV0pICovCisJCXRyYW5zX29wLT5pYnNfb3BfZGF0YTNfbG93ICY9IH5EQ19NQVNLX0wxX0hJVF8xRzsKKwkJLyogUmVzZXJ2ZWQgSWJzRGNMZEJua0NvbiAoTVNSQzAwMV8xMDM3WzldKSAqLworCQl0cmFuc19vcC0+aWJzX29wX2RhdGEzX2xvdyAmPSB+RENfTUFTS19MRF9CQU5LX0NPTkZMSUNUOworCQkvKiBSZXNlcnZlZCBJYnNEY1N0Qm5rQ29uIChNU1JDMDAxXzEwMzdbMTBdKSAqLworCQl0cmFuc19vcC0+aWJzX29wX2RhdGEzX2xvdyAmPSB+RENfTUFTS19TVF9CQU5LX0NPTkZMSUNUOworCQkvKiBSZXNlcnZlZCBJYnNEY1N0VG9MZENhbiAoTVNSQzAwMV8xMDM3WzEyXSkgKi8KKwkJdHJhbnNfb3AtPmlic19vcF9kYXRhM19sb3cgJj0gfkRDX01BU0tfU1RfVE9fTERfQ0FOQ0VMOworCQkvKiBSZXNlcnZlZCBJYnNEY0wydGxiSGl0MUcgKE1TUkMwMDFfMTAzN1sxOV0pICovCisJCXRyYW5zX29wLT5pYnNfb3BfZGF0YTNfbG93ICY9IH5EQ19NQVNLX0wyX0hJVF8xRzsKKwkJCisJCWJyZWFrOworCWNhc2UgMHgxNToKKwlkZWZhdWx0OgorCQlicmVhazsKKwkKKwl9Cit9CisKKwordm9pZCB0cmFuc19pYnNfb3BfYnRhKHN0cnVjdCB0cmFuc2llbnQgKiB0cmFucykKK3sKKwlzdGF0aWMgY29va2llX3Qgb2xkX2Nvb2tpZSAgICAgPSBOT19DT09LSUU7CisJc3RhdGljIGNvb2tpZV90IG9sZF9hcHBfY29va2llID0gTk9fQ09PS0lFOworCXN0YXRpYyBjaGFyIGNvbnN0ICogbW9kICAgICAgICA9IE5VTEw7CisJc3RhdGljIGNoYXIgY29uc3QgKiBhcHAgICAgICAgID0gTlVMTDsKKwljb25zdCBjaGFyIHZtbGludXhbMTBdICAgICAgICAgPSAidm1saW51eCI7CisJc3RydWN0IGlic19vcF9zYW1wbGUgKiB0cmFuc19vcCA9ICgoc3RydWN0IGlic19zYW1wbGUqKSh0cmFucy0+ZXh0KSktPm9wOworCisJaWYgKCFidGFfbG9nKQorCQlyZXR1cm47CisKKwlpZiAoIXRyYW5zX29wLT5pYnNfb3BfYnJ0Z3RfYWRkcikKKwkJcmV0dXJuOworCisJaWYoIG9sZF9hcHBfY29va2llID09IElOVkFMSURfQ09PS0lFIAorCXx8ICBvbGRfYXBwX2Nvb2tpZSA9PSBOT19DT09LSUUgCisJfHwgIG9sZF9hcHBfY29va2llICE9IHRyYW5zLT5hcHBfY29va2llKSB7CisJCWFwcCA9IGZpbmRfY29va2llKHRyYW5zLT5hcHBfY29va2llKTsKKwkJb2xkX2FwcF9jb29raWUgPSB0cmFucy0+Y29va2llOworCX0KKworCWlmICh0cmFucy0+aW5fa2VybmVsID09IDEpIHsKKwkJbW9kID0gdm1saW51eDsKKwkJb2xkX2Nvb2tpZSA9IE5PX0NPT0tJRTsKKwl9IGVsc2UgeworCQlpZiggb2xkX2Nvb2tpZSA9PSBJTlZBTElEX0NPT0tJRSAKKwkJfHwgIG9sZF9jb29raWUgPT0gTk9fQ09PS0lFIAorCQl8fCAgb2xkX2Nvb2tpZSAhPSB0cmFucy0+Y29va2llKSB7CisJCQltb2QgPSBmaW5kX2Nvb2tpZSh0cmFucy0+Y29va2llKTsKKwkJCW9sZF9jb29raWUgPSB0cmFucy0+Y29va2llOworCQl9CisJfQorCisJZnByaW50ZihidGFfbG9nLCAiMHglMDE2bGx4LDB4JTAxNmxseCwlMDJsdSAlMDh1LCUwOHUsMHglMDh4LDB4JTA4bHhcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICB0cmFucy0+YXBwX2Nvb2tpZSwgdHJhbnMtPmNvb2tpZSwgdHJhbnMtPmNwdSwgdHJhbnMtPnRnaWQsIHRyYW5zLT50aWQsICh1bnNpZ25lZCBpbnQpdHJhbnMtPnBjLAorCQkJdHJhbnNfb3AtPmlic19vcF9icnRndF9hZGRyKTsKK30KKworCit2b2lkIHRyYW5zX2lic19vcF9sc19tZW1hY2Nlc3Moc3RydWN0IHRyYW5zaWVudCAqIHRyYW5zKQoreworCXN0YXRpYyBjb29raWVfdCBvbGRfY29va2llICAgICA9IE5PX0NPT0tJRTsKKwlzdGF0aWMgY29va2llX3Qgb2xkX2FwcF9jb29raWUgPSBOT19DT09LSUU7CisJc3RhdGljIGNoYXIgY29uc3QgKiBtb2QgICAgICAgID0gTlVMTDsKKwlzdGF0aWMgY2hhciBjb25zdCAqIGFwcCAgICAgICAgPSBOVUxMOworCWNvbnN0IGNoYXIgdm1saW51eFsxMF0gICAgICAgICA9ICJ2bWxpbnV4IjsKKwlzdHJ1Y3QgaWJzX29wX3NhbXBsZSAqIHRyYW5zX29wID0gKChzdHJ1Y3QgaWJzX3NhbXBsZSopKHRyYW5zLT5leHQpKS0+b3A7CisKKwlpZiAoIW1lbWFjY2Vzc19sb2cpCisJCXJldHVybjsKKworCWlmKCBvbGRfYXBwX2Nvb2tpZSA9PSBJTlZBTElEX0NPT0tJRSAKKwl8fCAgb2xkX2FwcF9jb29raWUgPT0gTk9fQ09PS0lFIAorCXx8ICBvbGRfYXBwX2Nvb2tpZSAhPSB0cmFucy0+YXBwX2Nvb2tpZSkgeworCQlhcHAgPSBmaW5kX2Nvb2tpZSh0cmFucy0+YXBwX2Nvb2tpZSk7CisJCW9sZF9hcHBfY29va2llID0gdHJhbnMtPmNvb2tpZTsKKwl9CisKKwlpZiAodHJhbnMtPmluX2tlcm5lbCA9PSAxKSB7CisJCW1vZCA9IHZtbGludXg7CisJCW9sZF9jb29raWUgPSBOT19DT09LSUU7CisJfSBlbHNlIHsKKwkJaWYoIG9sZF9jb29raWUgPT0gSU5WQUxJRF9DT09LSUUgCisJCXx8ICBvbGRfY29va2llID09IE5PX0NPT0tJRSAKKwkJfHwgIG9sZF9jb29raWUgIT0gdHJhbnMtPmNvb2tpZSkgeworCQkJbW9kID0gZmluZF9jb29raWUodHJhbnMtPmNvb2tpZSk7CisJCQlvbGRfY29va2llID0gdHJhbnMtPmNvb2tpZTsKKwkJfQorCX0KKworCWZwcmludGYobWVtYWNjZXNzX2xvZywgIjB4JTAxNmxseCwweCUwMTZsbHgsJTAybHUsJTA4dSwlMDh1LDB4JTA4eCwweCUwOHU6JTA4eCwweCUwOHg6JTA4eCwlcywlMDh1XG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnMtPmFwcF9jb29raWUsIAordHJhbnMtPmNvb2tpZSwgCit0cmFucy0+Y3B1LCAKK3RyYW5zLT50Z2lkLCAKK3RyYW5zLT50aWQsIAorKHVuc2lnbmVkIGludCl0cmFucy0+cGMsIAorCQkJdHJhbnNfb3AtPmlic19vcF9waHlzX2FkZHJfaGlnaCwgdHJhbnNfb3AtPmlic19vcF9waHlzX2FkZHJfbG93LCAKKwkJCXRyYW5zX29wLT5pYnNfb3BfbGRzdF9saW5hZGRyX2hpZ2gsIHRyYW5zX29wLT5pYnNfb3BfbGRzdF9saW5hZGRyX2xvdywgCisJCQkoSUJTX09QX0lCU19MRF9PUCh0cmFuc19vcCkpPyAiTEQiOiAiU1QiLCAKKwkJCSh1bnNpZ25lZCBpbnQpIElCU19PUF9EQ19NSVNTX0xBVEVOQ1kodHJhbnNfb3ApKTsKK30KZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2RhZW1vbi9vcGRfaWJzX3RyYW5zLmggYi9vcHJvZmlsZS0wLjkuNy9kYWVtb24vb3BkX2lic190cmFucy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmMzRkZmEKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9kYWVtb24vb3BkX2lic190cmFucy5oCkBAIC0wLDAgKzEsMzUgQEAKKy8qKgorICogQGZpbGUgZGFlbW9uL29wZF9pYnNfdHJhbnMuaAorICogQU1EIEZhbWlseTEwaCBJbnN0cnVjdGlvbiBCYXNlZCBTYW1wbGluZyAoSUJTKSB0cmFuc2xhdGlvbi4KKyAqCisgKiBAcmVtYXJrIENvcHlyaWdodCAyMDA4IE9Qcm9maWxlIGF1dGhvcnMKKyAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCisgKgorICogQGF1dGhvciBKYXNvbiBZZWggPGphc29uLnllaEBhbWQuY29tPgorICogQGF1dGhvciBQYXVsIERyb25nb3dza2kgPHBhdWwuZHJvbmdvd3NraUBhbWQuY29tPgorICogQGF1dGhvciBTdXJhdmVlIFN1dGhpa3VscGFuaXQgPHN1cmF2ZWUuc3V0aGlrdWxwYW5pdEBhbWQuY29tPgorICogQ29weXJpZ2h0IChjKSAyMDA4IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4KKyAqLworCisjaWZuZGVmIE9QRF9JQlNfVFJBTlNfSAorI2RlZmluZSBPUERfSUJTX1RSQU5TX0gKKworc3RydWN0IGlic19mZXRjaF9zYW1wbGU7CitzdHJ1Y3QgaWJzX29wX3NhbXBsZTsKK3N0cnVjdCB0cmFuc2llbnQ7CisKK3N0cnVjdCBpYnNfdHJhbnNsYXRpb25fdGFibGUgeworCXVuc2lnbmVkIGludCBldmVudDsKKwl2b2lkICgqdHJhbnNsYXRvcikoc3RydWN0IHRyYW5zaWVudCAqKTsKK307CisKKworZXh0ZXJuIHZvaWQgdHJhbnNfaWJzX2ZldGNoIChzdHJ1Y3QgdHJhbnNpZW50ICogdHJhbnMsIHVuc2lnbmVkIGludCBzZWxlY3RlZF9mbGFnKTsKK2V4dGVybiB2b2lkIHRyYW5zX2lic19vcCAoc3RydWN0IHRyYW5zaWVudCAqIHRyYW5zLCB1bnNpZ25lZCBpbnQgc2VsZWN0ZWRfZmxhZyk7CitleHRlcm4gdm9pZCB0cmFuc19pYnNfb3BfbHMgKHN0cnVjdCB0cmFuc2llbnQgKiB0cmFucywgdW5zaWduZWQgaW50IHNlbGVjdGVkX2ZsYWcpOworZXh0ZXJuIHZvaWQgdHJhbnNfaWJzX29wX25iIChzdHJ1Y3QgdHJhbnNpZW50ICogdHJhbnMsIHVuc2lnbmVkIGludCBzZWxlY3RlZF9mbGFnKTsKK2V4dGVybiBpbnQgIHRyYW5zX2lic19vcF9yaXBfaW52YWxpZCAoc3RydWN0IHRyYW5zaWVudCAqIHRyYW5zKTsKK2V4dGVybiB2b2lkIHRyYW5zX2lic19vcF9tYXNrX3Jlc2VydmVkICh1bnNpZ25lZCBpbnQgZmFtaWx5LCBzdHJ1Y3QgdHJhbnNpZW50ICogdHJhbnMpOworZXh0ZXJuIHZvaWQgdHJhbnNfaWJzX29wX2xzX21lbWFjY2VzcyhzdHJ1Y3QgdHJhbnNpZW50ICogdHJhbnMpOworZXh0ZXJuIHZvaWQgdHJhbnNfaWJzX29wX2J0YSAoc3RydWN0IHRyYW5zaWVudCAqIHRyYW5zKTsKKyNlbmRpZiAvLyBPUERfSUJTX1RSQU5TX0gKZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2RhZW1vbi9vcGRfaW50ZXJmYWNlLmggYi9vcHJvZmlsZS0wLjkuNy9kYWVtb24vb3BkX2ludGVyZmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmM2IwMmMKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9kYWVtb24vb3BkX2ludGVyZmFjZS5oCkBAIC0wLDAgKzEsNDggQEAKKy8qKgorICogQGZpbGUgb3BkX2ludGVyZmFjZS5oCisgKgorICogTW9kdWxlIC8gdXNlciBzcGFjZSBpbnRlcmZhY2UgZm9yIDIuNiBrZXJuZWxzIGFuZCBhYm92ZQorICoKKyAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDIgT1Byb2ZpbGUgYXV0aG9ycworICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKKyAqCisgKiBAYXV0aG9yIEpvaG4gTGV2b24KKyAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQorICogTW9kaWZpZWQgYnkgQXJhdmluZCBNZW5vbiBmb3IgWGVuCisgKiBUaGVzZSBtb2RpZmljYXRpb25zIGFyZToKKyAqIENvcHlyaWdodCAoQykgMjAwNSBIZXdsZXR0LVBhY2thcmQgQ28uCisgKi8KKworI2lmbmRlZiBPUERfSU5URVJGQUNFX0gKKyNkZWZpbmUgT1BEX0lOVEVSRkFDRV9ICisKKyNkZWZpbmUgQ1RYX1NXSVRDSF9DT0RFCQkJMQorI2RlZmluZSBDUFVfU1dJVENIX0NPREUJCQkyCisjZGVmaW5lIENPT0tJRV9TV0lUQ0hfQ09ERQkJMworI2RlZmluZSBLRVJORUxfRU5URVJfU1dJVENIX0NPREUJNAorI2RlZmluZSBVU0VSX0VOVEVSX1NXSVRDSF9DT0RFCQk1CisjZGVmaW5lIE1PRFVMRV9MT0FERURfQ09ERQkJNgorI2RlZmluZSBDVFhfVEdJRF9DT0RFCQkJNworI2RlZmluZSBUUkFDRV9CRUdJTl9DT0RFCQk4CisvKiBDb2RlIDkgdXNlZCB0byBiZSBUUkFDRV9FTkRfQ09ERSB3aGljaCBpcyBub3QgdXNlZCBhbnltb3JlICAqLworLyogQ29kZSA5IGlzIG5vdyBjb25zaWRlcmVkIGFuIHVua25vd24gZXNjYXBlIGNvZGUgICAgICAgICAgICAgKi8KKyNkZWZpbmUgWEVOX0VOVEVSX1NXSVRDSF9DT0RFCQkxMAorLyoKKyAqIFVnbHkgd29yay1hcm91bmQgZm9yIHRoZSB1bmZvcnR1bmF0ZSBjb2xsaXNpb24gYmV0d2VlbiBYZW5vcHJvZidzCisgKiBET01BSU5fU1dJVENIX0NPREUgKGluIHVzZSBvbiB4ODYpIGFuZCBDZWxsJ3MgU1BVX1BST0ZJTElOR19DT0RFCisgKiAoaW4gdXNlIHdpdGggUG93ZXIpOgorICovCisjaWYgZGVmaW5lZChfX3Bvd2VycGNfXykKKyNkZWZpbmUgU1BVX1BST0ZJTElOR19DT0RFCQkxMQorI2RlZmluZSBTUFVfQ1RYX1NXSVRDSF9DT0RFCQkxMgorI2Vsc2UKKyNkZWZpbmUgRE9NQUlOX1NXSVRDSF9DT0RFCQkxMQorLyogQ29kZSAxMiBpcyBub3cgY29uc2lkZXJlZCBhbiB1bmtub3duIGVzY2FwZSBjb2RlICovCisjZW5kaWYKKworLyogQU1EJ3MgSW5zdHJ1Y3Rpb24tQmFzZWQgU2FtcGxpbmcgKElCUykgZXNjYXBlIGNvZGUgKi8KKyNkZWZpbmUgSUJTX0ZFVENIX1NBTVBMRQkJMTMKKyNkZWZpbmUgSUJTX09QX1NBTVBMRQkJCTE0CisjZGVmaW5lIExBU1RfQ09ERQkJCTE1CisgCisjZW5kaWYgLyogT1BEX0lOVEVSRkFDRV9IICovCmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9kYWVtb24vb3BkX2tlcm5lbC5jIGIvb3Byb2ZpbGUtMC45LjcvZGFlbW9uL29wZF9rZXJuZWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZWJjMjEwCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvZGFlbW9uL29wZF9rZXJuZWwuYwpAQCAtMCwwICsxLDIyOSBAQAorLyoqCisgKiBAZmlsZSBkYWVtb24vb3BkX2tlcm5lbC5jCisgKiBEZWFsaW5nIHdpdGggdGhlIGtlcm5lbCBhbmQga2VybmVsIG1vZHVsZSBzYW1wbGVzCisgKgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMiBPUHJvZmlsZSBhdXRob3JzCisgKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORworICoKKyAqIEBhdXRob3IgSm9obiBMZXZvbgorICogQGF1dGhvciBQaGlsaXBwZSBFbGllCisgKiBNb2RpZmllZCBieSBBcmF2aW5kIE1lbm9uIGZvciBYZW4KKyAqIFRoZXNlIG1vZGlmaWNhdGlvbnMgYXJlOgorICogQ29weXJpZ2h0IChDKSAyMDA1IEhld2xldHQtUGFja2FyZCBDby4KKyAqLworCisjaW5jbHVkZSAib3BkX2tlcm5lbC5oIgorI2luY2x1ZGUgIm9wZF9zZmlsZS5oIgorI2luY2x1ZGUgIm9wZF90cmFucy5oIgorI2luY2x1ZGUgIm9wZF9wcmludGYuaCIKKyNpbmNsdWRlICJvcGRfc3RhdHMuaCIKKyNpbmNsdWRlICJvcHJvZmlsZWQuaCIKKworI2luY2x1ZGUgIm9wX2ZpbGVpby5oIgorI2luY2x1ZGUgIm9wX2NvbmZpZy5oIgorI2luY2x1ZGUgIm9wX2xpYmliZXJ0eS5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKworc3RhdGljIExJU1RfSEVBRChtb2R1bGVzKTsKKworc3RhdGljIHN0cnVjdCBrZXJuZWxfaW1hZ2Ugdm1saW51eF9pbWFnZTsKKworc3RhdGljIHN0cnVjdCBrZXJuZWxfaW1hZ2UgeGVuX2ltYWdlOworCit2b2lkIG9wZF9jcmVhdGVfdm1saW51eChjaGFyIGNvbnN0ICogbmFtZSwgY2hhciBjb25zdCAqIGFyZykKK3sKKwkvKiB2bWxpbnV4IGlzICpub3QqIG9uIHRoZSBsaXN0IG9mIG1vZHVsZXMgKi8KKwlsaXN0X2luaXQoJnZtbGludXhfaW1hZ2UubGlzdCk7CisKKwkvKiBmb3Igbm8gdm1saW51eCAqLworCWlmIChub192bWxpbnV4KSB7CisJCXZtbGludXhfaW1hZ2UubmFtZSA9ICJuby12bWxpbnV4IjsKKwkJcmV0dXJuOworCX0KKwkKKwl2bWxpbnV4X2ltYWdlLm5hbWUgPSB4c3RyZHVwKG5hbWUpOworCisJc3NjYW5mKGFyZywgIiVsbHgsJWxseCIsICZ2bWxpbnV4X2ltYWdlLnN0YXJ0LCAmdm1saW51eF9pbWFnZS5lbmQpOworCisJdmVyYnByaW50Zih2bWlzYywgImtlcm5lbF9zdGFydCA9ICVsbHgsIGtlcm5lbF9lbmQgPSAlbGx4XG4iLAorCSAgICAgICAgICAgdm1saW51eF9pbWFnZS5zdGFydCwgdm1saW51eF9pbWFnZS5lbmQpOworCisJaWYgKCF2bWxpbnV4X2ltYWdlLnN0YXJ0ICYmICF2bWxpbnV4X2ltYWdlLmVuZCkgeworCQlmcHJpbnRmKHN0ZGVyciwgImVycm9yOiBtaXMtcGFyc2VkIGtlcm5lbCByYW5nZTogJWxseC0lbGx4XG4iLAorCQkgICAgICAgIHZtbGludXhfaW1hZ2Uuc3RhcnQsIHZtbGludXhfaW1hZ2UuZW5kKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KK30KKwordm9pZCBvcGRfY3JlYXRlX3hlbihjaGFyIGNvbnN0ICogbmFtZSwgY2hhciBjb25zdCAqIGFyZykKK3sKKwkvKiB4ZW4gaXMgKm5vdCogb24gdGhlIGxpc3Qgb2YgbW9kdWxlcyAqLworCWxpc3RfaW5pdCgmeGVuX2ltYWdlLmxpc3QpOworCisJLyogZm9yIG5vIHhlbiAqLworCWlmIChub194ZW4pIHsKKwkJeGVuX2ltYWdlLm5hbWUgPSAibm8teGVuIjsKKwkJcmV0dXJuOworCX0KKworCXhlbl9pbWFnZS5uYW1lID0geHN0cmR1cChuYW1lKTsKKworCXNzY2FuZihhcmcsICIlbGx4LCVsbHgiLCAmeGVuX2ltYWdlLnN0YXJ0LCAmeGVuX2ltYWdlLmVuZCk7CisKKwl2ZXJicHJpbnRmKHZtaXNjLCAieGVuX3N0YXJ0ID0gJWxseCwgeGVuX2VuZCA9ICVsbHhcbiIsCisJICAgICAgICAgICB4ZW5faW1hZ2Uuc3RhcnQsIHhlbl9pbWFnZS5lbmQpOworCisJaWYgKCF4ZW5faW1hZ2Uuc3RhcnQgJiYgIXhlbl9pbWFnZS5lbmQpIHsKKwkJZnByaW50ZihzdGRlcnIsICJlcnJvcjogbWlzLXBhcnNlZCB4ZW4gcmFuZ2U6ICVsbHgtJWxseFxuIiwKKwkJICAgICAgICB4ZW5faW1hZ2Uuc3RhcnQsIHhlbl9pbWFnZS5lbmQpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorfQorCisKKy8qKgorICogQWxsb2NhdGUgYW5kIGluaXRpYWxpc2UgYSBrZXJuZWwgaW1hZ2UgZGVzY3JpcHRpb24KKyAqIEBwYXJhbSBuYW1lIGltYWdlIG5hbWUKKyAqIEBwYXJhbSBzdGFydCBzdGFydCBhZGRyZXNzCisgKiBAcGFyYW0gZW5kIGVuZCBhZGRyZXNzCisgKi8KK3N0YXRpYyBzdHJ1Y3Qga2VybmVsX2ltYWdlICoKK29wZF9jcmVhdGVfbW9kdWxlKGNoYXIgY29uc3QgKiBuYW1lLCB2bWFfdCBzdGFydCwgdm1hX3QgZW5kKQoreworCXN0cnVjdCBrZXJuZWxfaW1hZ2UgKiBpbWFnZSA9IHhtYWxsb2Moc2l6ZW9mKHN0cnVjdCBrZXJuZWxfaW1hZ2UpKTsKKworCWltYWdlLT5uYW1lID0geHN0cmR1cChuYW1lKTsKKwlpbWFnZS0+c3RhcnQgPSBzdGFydDsKKwlpbWFnZS0+ZW5kID0gZW5kOworCWxpc3RfYWRkKCZpbWFnZS0+bGlzdCwgJm1vZHVsZXMpOworCisJcmV0dXJuIGltYWdlOworfQorCisKKy8qKgorICogQ2xlYXIgYW5kIGZyZWUgYWxsIGtlcm5lbCBpbWFnZSBpbmZvcm1hdGlvbiBhbmQgcmVzZXQKKyAqIHZhbHVlcy4KKyAqLworc3RhdGljIHZvaWQgb3BkX2NsZWFyX21vZHVsZXModm9pZCkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICogcG9zOworCXN0cnVjdCBsaXN0X2hlYWQgKiBwb3MyOworCXN0cnVjdCBrZXJuZWxfaW1hZ2UgKiBpbWFnZTsKKworCWxpc3RfZm9yX2VhY2hfc2FmZShwb3MsIHBvczIsICZtb2R1bGVzKSB7CisJCWltYWdlID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCBrZXJuZWxfaW1hZ2UsIGxpc3QpOworCQlpZiAoaW1hZ2UtPm5hbWUpCisJCQlmcmVlKGltYWdlLT5uYW1lKTsKKwkJZnJlZShpbWFnZSk7CisJfQorCisJbGlzdF9pbml0KCZtb2R1bGVzKTsKKworCS8qIGNsZWFyIG91dCBsaW5nZXJpbmcgcmVmZXJlbmNlcyAqLworCXNmaWxlX2NsZWFyX2tlcm5lbCgpOworfQorCisKKy8qCisgKiBlYWNoIGxpbmUgaXMgaW4gdGhlIGZvcm1hdDoKKyAqCisgKiBtb2R1bGVfbmFtZSAxNjQ4MCAxIGRlcGVuZGVuY2llcyBMaXZlIDB4ZTA5MWUwMDAKKyAqCisgKiB3aXRob3V0IGFueSBibGFuayBzcGFjZSBpbiBlYWNoIGZpZWxkCisgKi8KK3ZvaWQgb3BkX3JlcmVhZF9tb2R1bGVfaW5mbyh2b2lkKQoreworCUZJTEUgKiBmcDsKKwljaGFyICogbGluZTsKKwlzdHJ1Y3Qga2VybmVsX2ltYWdlICogaW1hZ2U7CisJaW50IG1vZHVsZV9zaXplOworCWNoYXIgcmVmX2NvdW50WzMyKzFdOworCWludCByZXQ7CisJY2hhciBtb2R1bGVfbmFtZVsyNTYrMV07CisJY2hhciBsaXZlX2luZm9bMzIrMV07CisJY2hhciBkZXBlbmRlbmNpZXNbNDA5NisxXTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgc3RhcnRfYWRkcmVzczsKKworCWlmIChub192bWxpbnV4KQorCQlyZXR1cm47CisKKwlvcGRfY2xlYXJfbW9kdWxlcygpOworCisJcHJpbnRmKCJSZWFkaW5nIG1vZHVsZSBpbmZvLlxuIik7CisKKwlmcCA9IG9wX3RyeV9vcGVuX2ZpbGUoIi9wcm9jL21vZHVsZXMiLCAiciIpOworCisJaWYgKCFmcCkgeworCQlwcmludGYoIm9wcm9maWxlZDogL3Byb2MvbW9kdWxlcyBub3QgcmVhZGFibGUsICIKKwkJCSJjYW4ndCBwcm9jZXNzIG1vZHVsZSBzYW1wbGVzLlxuIik7CisJCXJldHVybjsKKwl9CisKKwl3aGlsZSAoMSkgeworCQlsaW5lID0gb3BfZ2V0X2xpbmUoZnApOworCisJCWlmICghbGluZSkKKwkJCWJyZWFrOworCisJCWlmIChsaW5lWzBdID09ICdcMCcpIHsKKwkJCWZyZWUobGluZSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCXJldCA9IHNzY2FuZihsaW5lLCAiJTI1NnMgJXUgJTMycyAlNDA5NnMgJTMycyAlbGx4IiwKKwkJCSAgICAgbW9kdWxlX25hbWUsICZtb2R1bGVfc2l6ZSwgcmVmX2NvdW50LAorCQkJICAgICBkZXBlbmRlbmNpZXMsIGxpdmVfaW5mbywgJnN0YXJ0X2FkZHJlc3MpOworCQlpZiAocmV0ICE9IDYpIHsKKwkJCXByaW50ZigiYmFkIC9wcm9jL21vZHVsZXMgZW50cnk6ICVzXG4iLCBsaW5lKTsKKwkJCWZyZWUobGluZSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWltYWdlID0gb3BkX2NyZWF0ZV9tb2R1bGUobW9kdWxlX25hbWUsIHN0YXJ0X2FkZHJlc3MsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRfYWRkcmVzcyArIG1vZHVsZV9zaXplKTsKKworCQl2ZXJicHJpbnRmKHZtb2R1bGUsICJtb2R1bGUgJXMgc3RhcnQgJWxseCBlbmQgJWxseFxuIiwKKwkJCSAgIGltYWdlLT5uYW1lLCBpbWFnZS0+c3RhcnQsIGltYWdlLT5lbmQpOworCisJCWZyZWUobGluZSk7CisJfQorCisJb3BfY2xvc2VfZmlsZShmcCk7Cit9CisKKworLyoqCisgKiBmaW5kIGEga2VybmVsIGltYWdlIGJ5IFBDIHZhbHVlCisgKiBAcGFyYW0gdHJhbnMgaG9sZHMgUEMgdmFsdWUgdG8gbG9vayB1cAorICoKKyAqIGZpbmQgdGhlIGtlcm5lbCBpbWFnZSB3aGljaCBjb250YWlucyB0aGlzIFBDLgorICoKKyAqIFJldHVybiAlTlVMTCBpZiBub3QgZm91bmQuCisgKi8KK3N0cnVjdCBrZXJuZWxfaW1hZ2UgKiBmaW5kX2tlcm5lbF9pbWFnZShzdHJ1Y3QgdHJhbnNpZW50IGNvbnN0ICogdHJhbnMpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqIHBvczsKKwlzdHJ1Y3Qga2VybmVsX2ltYWdlICogaW1hZ2UgPSAmdm1saW51eF9pbWFnZTsKKworCWlmIChub192bWxpbnV4KQorCQlyZXR1cm4gaW1hZ2U7CisKKwlpZiAoaW1hZ2UtPnN0YXJ0IDw9IHRyYW5zLT5wYyAmJiBpbWFnZS0+ZW5kID4gdHJhbnMtPnBjKQorCQlyZXR1cm4gaW1hZ2U7CisKKwlsaXN0X2Zvcl9lYWNoKHBvcywgJm1vZHVsZXMpIHsKKwkJaW1hZ2UgPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IGtlcm5lbF9pbWFnZSwgbGlzdCk7CisJCWlmIChpbWFnZS0+c3RhcnQgPD0gdHJhbnMtPnBjICYmIGltYWdlLT5lbmQgPiB0cmFucy0+cGMpCisJCQlyZXR1cm4gaW1hZ2U7CisJfQorCisJaWYgKHhlbl9pbWFnZS5zdGFydCA8PSB0cmFucy0+cGMgJiYgeGVuX2ltYWdlLmVuZCA+IHRyYW5zLT5wYykKKwkJcmV0dXJuICZ4ZW5faW1hZ2U7CisKKwlyZXR1cm4gTlVMTDsKK30KZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2RhZW1vbi9vcGRfa2VybmVsLmggYi9vcHJvZmlsZS0wLjkuNy9kYWVtb24vb3BkX2tlcm5lbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiNzFhMzAKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9kYWVtb24vb3BkX2tlcm5lbC5oCkBAIC0wLDAgKzEsNDMgQEAKKy8qKgorICogQGZpbGUgZGFlbW9uL29wZF9rZXJuZWwuaAorICogRGVhbGluZyB3aXRoIHRoZSBrZXJuZWwgYW5kIGtlcm5lbCBtb2R1bGUgaW1hZ2VzCisgKgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMiBPUHJvZmlsZSBhdXRob3JzCisgKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORworICoKKyAqIEBhdXRob3IgSm9obiBMZXZvbgorICogQGF1dGhvciBQaGlsaXBwZSBFbGllCisgKiBNb2RpZmllZCBieSBBcmF2aW5kIE1lbm9uIGZvciBYZW4KKyAqIFRoZXNlIG1vZGlmaWNhdGlvbnMgYXJlOgorICogQ29weXJpZ2h0IChDKSAyMDA1IEhld2xldHQtUGFja2FyZCBDby4KKyAqLworCisjaWZuZGVmIE9QRF9LRVJORUxfSAorI2RlZmluZSBPUERfS0VSTkVMX0gKKworI2luY2x1ZGUgIm9wX3R5cGVzLmgiCisjaW5jbHVkZSAib3BfbGlzdC5oIgorCitzdHJ1Y3QgdHJhbnNpZW50OworCisvKiogY3JlYXRlIHRoZSBrZXJuZWwgaW1hZ2UgKi8KK3ZvaWQgb3BkX2NyZWF0ZV92bWxpbnV4KGNoYXIgY29uc3QgKiBuYW1lLCBjaGFyIGNvbnN0ICogYXJnKTsKKwordm9pZCBvcGRfY3JlYXRlX3hlbihjaGFyIGNvbnN0ICogbmFtZSwgY2hhciBjb25zdCAqIGFyZyk7CisKKy8qKiBvcGRfcmVyZWFkX21vZHVsZV9pbmZvIC0gcGFyc2UgL3Byb2MvbW9kdWxlcyBmb3Iga2VybmVsIG1vZHVsZXMgKi8KK3ZvaWQgb3BkX3JlcmVhZF9tb2R1bGVfaW5mbyh2b2lkKTsKKworLyoqIERlc2NyaWJlcyBhIGtlcm5lbCBtb2R1bGUgb3Igdm1saW51eCBpdHNlbGYgKi8KK3N0cnVjdCBrZXJuZWxfaW1hZ2UgeworCWNoYXIgKiBuYW1lOworCXZtYV90IHN0YXJ0OworCXZtYV90IGVuZDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Cit9OworCisvKiogRmluZCBhIGtlcm5lbF9pbWFnZSBiYXNlZCB1cG9uIHRoZSBnaXZlbiBwYXJhbWV0ZXJzIGluIHRyYW5zLiAqLworc3RydWN0IGtlcm5lbF9pbWFnZSAqCitmaW5kX2tlcm5lbF9pbWFnZShzdHJ1Y3QgdHJhbnNpZW50IGNvbnN0ICogdHJhbnMpOworCisjZW5kaWYgLyogT1BEX0tFUk5FTF9IICovCmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9kYWVtb24vb3BkX21hbmdsaW5nLmMgYi9vcHJvZmlsZS0wLjkuNy9kYWVtb24vb3BkX21hbmdsaW5nLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQ3NjhhNgotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2RhZW1vbi9vcGRfbWFuZ2xpbmcuYwpAQCAtMCwwICsxLDIwNSBAQAorLyoqCisgKiBAZmlsZSBkYWVtb24vb3BkX21hbmdsaW5nLmMKKyAqIE1hbmdsaW5nIGFuZCBvcGVuaW5nIG9mIHNhbXBsZSBmaWxlcworICoKKyAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDIgT1Byb2ZpbGUgYXV0aG9ycworICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKKyAqCisgKiBAYXV0aG9yIEpvaG4gTGV2b24KKyAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQorICovCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAKKyNpbmNsdWRlICJvcGRfbWFuZ2xpbmcuaCIKKyNpbmNsdWRlICJvcGRfa2VybmVsLmgiCisjaW5jbHVkZSAib3BkX2Nvb2tpZS5oIgorI2luY2x1ZGUgIm9wZF9zZmlsZS5oIgorI2luY2x1ZGUgIm9wZF9hbm9uLmgiCisjaW5jbHVkZSAib3BkX3ByaW50Zi5oIgorI2luY2x1ZGUgIm9wZF9ldmVudHMuaCIKKyNpbmNsdWRlICJvcHJvZmlsZWQuaCIKKworI2luY2x1ZGUgIm9wX2ZpbGUuaCIKKyNpbmNsdWRlICJvcF9zYW1wbGVfZmlsZS5oIgorI2luY2x1ZGUgIm9wX2NvbmZpZy5oIgorI2luY2x1ZGUgIm9wX21hbmdsZS5oIgorI2luY2x1ZGUgIm9wX2V2ZW50cy5oIgorI2luY2x1ZGUgIm9wX2xpYmliZXJ0eS5oIgorCisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorCisKK3N0YXRpYyBjaGFyIGNvbnN0ICogZ2V0X2RlcF9uYW1lKHN0cnVjdCBzZmlsZSBjb25zdCAqIHNmKQoreworCWlmIChzZi0+YW5vbikKKwkJcmV0dXJuIGZpbmRfY29va2llKHNmLT5hcHBfY29va2llKTsKKworCS8qIGF2b2lkIHRvIGNhbGwgZmluZF9jb29raWUoKSwgY2FsbGVyIGNhbiByZWNvdmVyIHVzaW5nIGltYWdlX25hbWUgKi8KKwlpZiAoc2YtPmNvb2tpZSA9PSBzZi0+YXBwX2Nvb2tpZSkKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAoIXNlcGFyYXRlX2tlcm5lbCAmJiAhKHNlcGFyYXRlX2xpYiAmJiAhc2YtPmtlcm5lbCkpCisJCXJldHVybiBOVUxMOworCisJLyogdGhpcyB3aWxsIGZhaWwgaWYgZS5nLiBrZXJuZWwgdGhyZWFkICovCisJaWYgKHNmLT5hcHBfY29va2llID09IDApCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuIGZpbmRfY29va2llKHNmLT5hcHBfY29va2llKTsKK30KKworCitzdGF0aWMgY2hhciAqIG1hbmdsZV9hbm9uKHN0cnVjdCBhbm9uX21hcHBpbmcgY29uc3QgKiBhbm9uKQoreworCWNoYXIgKiBuYW1lID0geG1hbGxvYyhQQVRIX01BWCk7CisKKwlzbnByaW50ZihuYW1lLCAxMDI0LCAiJXUuMHglbGx4LjB4JWxseCIsICh1bnNpZ25lZCBpbnQpYW5vbi0+dGdpZCwKKwkgICAgICAgYW5vbi0+c3RhcnQsIGFub24tPmVuZCk7CisKKwlyZXR1cm4gbmFtZTsKK30KKworCitzdGF0aWMgY2hhciAqCittYW5nbGVfZmlsZW5hbWUoc3RydWN0IHNmaWxlICogbGFzdCwgc3RydWN0IHNmaWxlIGNvbnN0ICogc2YsIGludCBjb3VudGVyLCBpbnQgY2cpCit7CisJY2hhciAqIG1hbmdsZWQ7CisJc3RydWN0IG1hbmdsZV92YWx1ZXMgdmFsdWVzOworCXN0cnVjdCBvcGRfZXZlbnQgKiBldmVudCA9IGZpbmRfY291bnRlcl9ldmVudChjb3VudGVyKTsKKworCXZhbHVlcy5mbGFncyA9IDA7CisKKwlpZiAoc2YtPmtlcm5lbCkgeworCQl2YWx1ZXMuaW1hZ2VfbmFtZSA9IHNmLT5rZXJuZWwtPm5hbWU7CisJCXZhbHVlcy5mbGFncyB8PSBNQU5HTEVfS0VSTkVMOworCX0gZWxzZSBpZiAoc2YtPmFub24pIHsKKwkJdmFsdWVzLmZsYWdzIHw9IE1BTkdMRV9BTk9OOworCQl2YWx1ZXMuaW1hZ2VfbmFtZSA9IG1hbmdsZV9hbm9uKHNmLT5hbm9uKTsKKwkJdmFsdWVzLmFub25fbmFtZSA9IHNmLT5hbm9uLT5uYW1lOworCX0gZWxzZSB7CisJCXZhbHVlcy5pbWFnZV9uYW1lID0gZmluZF9jb29raWUoc2YtPmNvb2tpZSk7CisJfQorCisJdmFsdWVzLmRlcF9uYW1lID0gZ2V0X2RlcF9uYW1lKHNmKTsKKwlpZiAoIXZhbHVlcy5kZXBfbmFtZSkKKwkJdmFsdWVzLmRlcF9uYW1lID0gdmFsdWVzLmltYWdlX25hbWU7CisgCisJLyogRklYTUU6IGxvZyAqLworCWlmICghdmFsdWVzLmltYWdlX25hbWUgfHwgIXZhbHVlcy5kZXBfbmFtZSkKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAoc2VwYXJhdGVfdGhyZWFkKSB7CisJCXZhbHVlcy5mbGFncyB8PSBNQU5HTEVfVEdJRCB8IE1BTkdMRV9USUQ7CisJCXZhbHVlcy50aWQgPSBzZi0+dGlkOworCQl2YWx1ZXMudGdpZCA9IHNmLT50Z2lkOworCX0KKyAKKwlpZiAoc2VwYXJhdGVfY3B1KSB7CisJCXZhbHVlcy5mbGFncyB8PSBNQU5HTEVfQ1BVOworCQl2YWx1ZXMuY3B1ID0gc2YtPmNwdTsKKwl9CisKKwlpZiAoY2cpIHsKKwkJdmFsdWVzLmZsYWdzIHw9IE1BTkdMRV9DQUxMR1JBUEg7CisJCWlmIChsYXN0LT5rZXJuZWwpIHsKKwkJCXZhbHVlcy5jZ19pbWFnZV9uYW1lID0gbGFzdC0+a2VybmVsLT5uYW1lOworCQl9IGVsc2UgaWYgKGxhc3QtPmFub24pIHsKKwkJCXZhbHVlcy5mbGFncyB8PSBNQU5HTEVfQ0dfQU5PTjsKKwkJCXZhbHVlcy5jZ19pbWFnZV9uYW1lID0gbWFuZ2xlX2Fub24obGFzdC0+YW5vbik7CisJCQl2YWx1ZXMuYW5vbl9uYW1lID0gbGFzdC0+YW5vbi0+bmFtZTsKKwkJfSBlbHNlIHsKKwkJCXZhbHVlcy5jZ19pbWFnZV9uYW1lID0gZmluZF9jb29raWUobGFzdC0+Y29va2llKTsKKwkJfQorCisJCS8qIEZJWE1FOiBsb2cgKi8KKwkJaWYgKCF2YWx1ZXMuY2dfaW1hZ2VfbmFtZSkgeworCQkJaWYgKHZhbHVlcy5mbGFncyAmIE1BTkdMRV9BTk9OKQorCQkJCWZyZWUoKGNoYXIgKil2YWx1ZXMuaW1hZ2VfbmFtZSk7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCX0KKworCXZhbHVlcy5ldmVudF9uYW1lID0gZXZlbnQtPm5hbWU7CisJdmFsdWVzLmNvdW50ID0gZXZlbnQtPmNvdW50OworCXZhbHVlcy51bml0X21hc2sgPSBldmVudC0+dW07CisKKwltYW5nbGVkID0gb3BfbWFuZ2xlX2ZpbGVuYW1lKCZ2YWx1ZXMpOworCisJaWYgKHZhbHVlcy5mbGFncyAmIE1BTkdMRV9BTk9OKQorCQlmcmVlKChjaGFyICopdmFsdWVzLmltYWdlX25hbWUpOworCWlmICh2YWx1ZXMuZmxhZ3MgJiBNQU5HTEVfQ0dfQU5PTikKKwkJZnJlZSgoY2hhciAqKXZhbHVlcy5jZ19pbWFnZV9uYW1lKTsKKwlyZXR1cm4gbWFuZ2xlZDsKK30KKworCitpbnQgb3BkX29wZW5fc2FtcGxlX2ZpbGUob2RiX3QgKmZpbGUsIHN0cnVjdCBzZmlsZSAqbGFzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2ZpbGUgKiBzZiwgaW50IGNvdW50ZXIsIGludCBjZykKK3sKKwljaGFyICogbWFuZ2xlZDsKKwljaGFyIGNvbnN0ICogYmluYXJ5OworCWludCBzcHVfcHJvZmlsZSA9IDA7CisJdm1hX3QgbGFzdF9zdGFydCA9IDA7CisJaW50IGVycjsKKworCW1hbmdsZWQgPSBtYW5nbGVfZmlsZW5hbWUobGFzdCwgc2YsIGNvdW50ZXIsIGNnKTsKKworCWlmICghbWFuZ2xlZCkKKwkJcmV0dXJuIEVJTlZBTDsKKworCXZlcmJwcmludGYodnNmaWxlLCAiT3BlbmluZyBcIiVzXCJcbiIsIG1hbmdsZWQpOworCisJY3JlYXRlX3BhdGgobWFuZ2xlZCk7CisKKwkvKiBsb2NraW5nIHNmIHdpbGwgbG9jayBhc3NvY2lhdGVkIGNnIGZpbGVzIHRvbyAqLworCXNmaWxlX2dldChzZik7CisJaWYgKHNmICE9IGxhc3QpCisJCXNmaWxlX2dldChsYXN0KTsKKworcmV0cnk6CisJZXJyID0gb2RiX29wZW4oZmlsZSwgbWFuZ2xlZCwgT0RCX1JEV1IsIHNpemVvZihzdHJ1Y3Qgb3BkX2hlYWRlcikpOworCisJLyogVGhpcyBjYW4gbmF0dXJhbGx5IGhhcHBlbiB3aGVuIHJhY2luZyBhZ2FpbnN0IG9wY29udHJvbCAtLXJlc2V0LiAqLworCWlmIChlcnIpIHsKKwkJaWYgKGVyciA9PSBFTUZJTEUpIHsKKwkJCWlmIChzZmlsZV9scnVfY2xlYXIoKSkgeworCQkJCXByaW50ZigiTFJVIGNsZWFyZWQgYnV0IG9kYl9vcGVuKCkgZmFpbHMgZm9yICVzLlxuIiwgbWFuZ2xlZCk7CisJCQkJYWJvcnQoKTsKKwkJCX0KKwkJCWdvdG8gcmV0cnk7CisJCX0KKworCQlmcHJpbnRmKHN0ZGVyciwgIm9wcm9maWxlZDogb3BlbiBvZiAlcyBmYWlsZWQ6ICVzXG4iLAorCQkgICAgICAgIG1hbmdsZWQsIHN0cmVycm9yKGVycikpOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoIXNmLT5rZXJuZWwpCisJCWJpbmFyeSA9IGZpbmRfY29va2llKHNmLT5jb29raWUpOworCWVsc2UKKwkJYmluYXJ5ID0gc2YtPmtlcm5lbC0+bmFtZTsKKworCWlmIChsYXN0ICYmIGxhc3QtPmFub24pCisJCWxhc3Rfc3RhcnQgPSBsYXN0LT5hbm9uLT5zdGFydDsKKworCWlmIChzZi0+ZW1iZWRkZWRfb2Zmc2V0ICE9IFVOVVNFRF9FTUJFRERFRF9PRkZTRVQpCisJCXNwdV9wcm9maWxlID0gMTsKKworCWZpbGxfaGVhZGVyKG9kYl9nZXRfZGF0YShmaWxlKSwgY291bnRlciwKKwkJICAgIHNmLT5hbm9uID8gc2YtPmFub24tPnN0YXJ0IDogMCwgbGFzdF9zdGFydCwKKwkJICAgICEhc2YtPmtlcm5lbCwgbGFzdCA/ICEhbGFzdC0+a2VybmVsIDogMCwKKwkJICAgIHNwdV9wcm9maWxlLCBzZi0+ZW1iZWRkZWRfb2Zmc2V0LAorCQkgICAgYmluYXJ5ID8gb3BfZ2V0X210aW1lKGJpbmFyeSkgOiAwKTsKKworb3V0OgorCXNmaWxlX3B1dChzZik7CisJaWYgKHNmICE9IGxhc3QpCisJCXNmaWxlX3B1dChsYXN0KTsKKwlmcmVlKG1hbmdsZWQpOworCXJldHVybiBlcnI7Cit9CmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9kYWVtb24vb3BkX21hbmdsaW5nLmggYi9vcHJvZmlsZS0wLjkuNy9kYWVtb24vb3BkX21hbmdsaW5nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDFiMmE3OAotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2RhZW1vbi9vcGRfbWFuZ2xpbmcuaApAQCAtMCwwICsxLDMzIEBACisvKioKKyAqIEBmaWxlIGRhZW1vbi9vcGRfbWFuZ2xpbmcuaAorICogTWFuZ2xpbmcgYW5kIG9wZW5pbmcgb2Ygc2FtcGxlIGZpbGVzCisgKgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMiBPUHJvZmlsZSBhdXRob3JzCisgKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORworICoKKyAqIEBhdXRob3IgSm9obiBMZXZvbgorICogQGF1dGhvciBQaGlsaXBwZSBFbGllCisgKi8KKworI2lmbmRlZiBPUERfTUFOR0xJTkdfSAorI2RlZmluZSBPUERfTUFOR0xJTkdfSAorCisjaW5jbHVkZSAib2RiLmgiCisKK3N0cnVjdCBzZmlsZTsKKworLyoKKyAqIG9wZF9vcGVuX3NhbXBsZV9maWxlIC0gb3BlbiBhIHNhbXBsZSBmaWxlCisgKiBAcGFyYW0gc2YgIHNmaWxlIHRvIG9wZW4gc2FtcGxlIGZpbGUgZm9yCisgKiBAcGFyYW0gY291bnRlciAgY291bnRlciBudW1iZXIKKyAqIEBwYXJhbSBjZyBpZiB0aGlzIGlzIGEgY2FsbGdyYXBoIGZpbGUKKyAqCisgKiBPcGVuIGltYWdlIHNhbXBsZSBmaWxlIGZvciB0aGUgc2ZpbGUsIGNvdW50ZXIKKyAqIGNvdW50ZXIgYW5kIHNldCB1cCBtZW1vcnkgbWFwcGluZ3MgZm9yIGl0LgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLgorICovCitpbnQgb3BkX29wZW5fc2FtcGxlX2ZpbGUob2RiX3QgKmZpbGUsIHN0cnVjdCBzZmlsZSAqbGFzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2ZpbGUgKiBzZiwgaW50IGNvdW50ZXIsIGludCBjZyk7CisKKyNlbmRpZiAvKiBPUERfTUFOR0xJTkdfSCAqLwpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvZGFlbW9uL29wZF9wZXJmbW9uLmMgYi9vcHJvZmlsZS0wLjkuNy9kYWVtb24vb3BkX3BlcmZtb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45N2YzMDdjCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvZGFlbW9uL29wZF9wZXJmbW9uLmMKQEAgLTAsMCArMSw1MjIgQEAKKy8qKgorICogQGZpbGUgb3BkX3BlcmZtb24uYworICogcGVyZm1vbmN0bCgpIGhhbmRsaW5nCisgKgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMyBPUHJvZmlsZSBhdXRob3JzCisgKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORworICoKKyAqIEBhdXRob3IgSm9obiBMZXZvbgorICovCisKKyNpZmRlZiBfX2lhNjRfXworCisvKiBuZWVkIHRoaXMgZm9yIHNjaGVkX3NldGFmZmluaXR5KCkgaW4gPHNjaGVkLmg+ICovCisjZGVmaW5lIF9HTlVfU09VUkNFCisKKyNpbmNsdWRlICJvcHJvZmlsZWQuaCIKKyNpbmNsdWRlICJvcGRfcGVyZm1vbi5oIgorI2luY2x1ZGUgIm9wZF9ldmVudHMuaCIKKworI2luY2x1ZGUgIm9wX2NwdV90eXBlLmgiCisjaW5jbHVkZSAib3BfbGliaWJlcnR5LmgiCisjaW5jbHVkZSAib3BfaHdfY29uZmlnLmgiCisKKyNpbmNsdWRlIDxzeXMvc3lzY2FsbC5oPgorI2luY2x1ZGUgPHN5cy93YWl0Lmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaWZkZWYgSEFWRV9TQ0hFRF9TRVRBRkZJTklUWQorI2luY2x1ZGUgPHNjaGVkLmg+CisjZW5kaWYKKworZXh0ZXJuIG9wX2NwdSBjcHVfdHlwZTsKKworI2lmbmRlZiBIQVZFX1NDSEVEX1NFVEFGRklOSVRZCisKKy8qIG1hbnkgZ2xpYmMncyBhcmUgbm90IHlldCB1cCB0byBkYXRlICovCisjaWZuZGVmIF9fTlJfc2NoZWRfc2V0YWZmaW5pdHkKKyNkZWZpbmUgX19OUl9zY2hlZF9zZXRhZmZpbml0eSAxMjMxCisjZW5kaWYKKworLyogQ29waWVkIGZyb20gZ2xpYmMncyA8c2NoZWQuaD4gYW5kIDxiaXRzL3NjaGVkLmg+IGFuZCBtdW5nZWQgKi8KKyNkZWZpbmUgQ1BVX1NFVFNJWkUJMTAyNAorI2RlZmluZSBfX05DUFVCSVRTCSg4ICogc2l6ZW9mICh1bnNpZ25lZCBsb25nKSkKK3R5cGVkZWYgc3RydWN0Cit7CisJdW5zaWduZWQgbG9uZyBfX2JpdHNbQ1BVX1NFVFNJWkUgLyBfX05DUFVCSVRTXTsKK30gY3B1X3NldF90OworCisjZGVmaW5lIENQVV9TRVQoY3B1LCBjcHVzZXRwKSBcCisJKChjcHVzZXRwKS0+X19iaXRzWyhjcHUpL19fTkNQVUJJVFNdIHw9ICgxVUwgPDwgKChjcHUpICUgX19OQ1BVQklUUykpKQorI2RlZmluZSBDUFVfWkVSTyhjcHVzZXRwKSBcCisJbWVtc2V0KChjcHVzZXRwKSwgMCwgc2l6ZW9mKGNwdV9zZXRfdCkpCisKK3N0YXRpYyBpbnQKK3NjaGVkX3NldGFmZmluaXR5KHBpZF90IHBpZCwgc2l6ZV90IGxlbiwgY3B1X3NldF90IGNvbnN0ICogY3B1c2V0cCkKK3sKKwlyZXR1cm4gc3lzY2FsbChfX05SX3NjaGVkX3NldGFmZmluaXR5LCBwaWQsIGxlbiwgY3B1c2V0cCk7Cit9CisjZW5kaWYKKworCisjaWZuZGVmIEhBVkVfUEVSRk1PTkNUTAorI2lmbmRlZiBfX05SX3BlcmZtb25jdGwKKyNkZWZpbmUgX19OUl9wZXJmbW9uY3RsIDExNzUKKyNlbmRpZgorCitzdGF0aWMgaW50IHBlcmZtb25jdGwoaW50IGZkLCBpbnQgY21kLCB2b2lkICogYXJnLCBpbnQgbmFyZykKK3sKKwlyZXR1cm4gc3lzY2FsbChfX05SX3BlcmZtb25jdGwsIGZkLCBjbWQsIGFyZywgbmFyZyk7Cit9CisjZW5kaWYKKworCitzdGF0aWMgdW5zaWduZWQgY2hhciB1dWlkWzE2XSA9IHsKKwkweDc3LCAweDdhLCAweDZlLCAweDYxLCAweDIwLCAweDY1LCAweDczLCAweDY5LAorCTB4NzQsIDB4NmUsIDB4NzIsIDB4MjAsIDB4NjEsIDB4NjUsIDB4MGEsIDB4NmMKK307CisKKworc3RhdGljIHNpemVfdCBucl9jcHVzOworCitzdHJ1Y3QgY2hpbGQgeworCXBpZF90IHBpZDsKKwlpbnQgdXBfcGlwZVsyXTsKKwlpbnQgY3R4X2ZkOworCXNpZ19hdG9taWNfdCBzaWd1c3IxOworCXNpZ19hdG9taWNfdCBzaWd1c3IyOworCXNpZ19hdG9taWNfdCBzaWd0ZXJtOworfTsKKworc3RhdGljIHN0cnVjdCBjaGlsZCAqIGNoaWxkcmVuOworCitzdGF0aWMgdm9pZCBwZXJmbW9uX3N0YXJ0X2NoaWxkKGludCBjdHhfZmQpCit7CisJaWYgKHBlcmZtb25jdGwoY3R4X2ZkLCBQRk1fU1RBUlQsIDAsIDApID09IC0xKSB7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9Cit9CisKKworc3RhdGljIHZvaWQgcGVyZm1vbl9zdG9wX2NoaWxkKGludCBjdHhfZmQpCit7CisJaWYgKHBlcmZtb25jdGwoY3R4X2ZkLCBQRk1fU1RPUCwgMCwgMCkgPT0gLTEpIHsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KK30KKworCitzdGF0aWMgdm9pZCBjaGlsZF9zaWd1c3IxKGludCB2YWwgX19hdHRyaWJ1dGVfXygodW51c2VkKSkpCit7CisJc2l6ZV90IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnJfY3B1czsgKytpKSB7CisJCWlmIChjaGlsZHJlbltpXS5waWQgPT0gZ2V0cGlkKCkpIHsKKwkJCWNoaWxkcmVuW2ldLnNpZ3VzcjEgPSAxOworCQkJcmV0dXJuOworCQl9CisJfQorfQorCisKK3N0YXRpYyB2b2lkIGNoaWxkX3NpZ3VzcjIoaW50IHZhbCBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKSkKK3sKKwlzaXplX3QgaTsKKworCWZvciAoaSA9IDA7IGkgPCBucl9jcHVzOyArK2kpIHsKKwkJaWYgKGNoaWxkcmVuW2ldLnBpZCA9PSBnZXRwaWQoKSkgeworCQkJY2hpbGRyZW5baV0uc2lndXNyMiA9IDE7CisJCQlyZXR1cm47CisJCX0KKwl9Cit9CisKKworc3RhdGljIHZvaWQgY2hpbGRfc2lndGVybShpbnQgdmFsIF9fYXR0cmlidXRlX18oKHVudXNlZCkpKQoreworCWtpbGwoZ2V0cHBpZCgpLCBTSUdURVJNKTsKK30KKworCitzdGF0aWMgdm9pZCBzZXRfYWZmaW5pdHkoc2l6ZV90IGNwdSkKK3sKKwljcHVfc2V0X3Qgc2V0OworCWludCBlcnI7CisKKwlDUFVfWkVSTygmc2V0KTsKKwlDUFVfU0VUKGNwdSwgJnNldCk7CisKKwllcnIgPSBzY2hlZF9zZXRhZmZpbml0eShnZXRwaWQoKSwgc2l6ZW9mKHNldCksICZzZXQpOworCisJaWYgKGVyciA9PSAtMSkgeworCQlwZXJyb3IoIkZhaWxlZCB0byBzZXQgYWZmaW5pdHkiKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KK30KKworCitzdGF0aWMgdm9pZCBzZXR1cF9zaWduYWxzKHZvaWQpCit7CisJc3RydWN0IHNpZ2FjdGlvbiBhY3Q7CisJc2lnc2V0X3QgbWFzazsKKworCXNpZ2VtcHR5c2V0KCZtYXNrKTsKKwlzaWdhZGRzZXQoJm1hc2ssIFNJR1VTUjEpOworCXNpZ2FkZHNldCgmbWFzaywgU0lHVVNSMik7CisJc2lncHJvY21hc2soU0lHX0JMT0NLLCAmbWFzaywgTlVMTCk7CisKKwlhY3Quc2FfaGFuZGxlciA9IGNoaWxkX3NpZ3VzcjE7CisJYWN0LnNhX2ZsYWdzID0gMDsKKwlzaWdlbXB0eXNldCgmYWN0LnNhX21hc2spOworCisJaWYgKHNpZ2FjdGlvbihTSUdVU1IxLCAmYWN0LCBOVUxMKSkgeworCQlwZXJyb3IoIm9wcm9maWxlZDogaW5zdGFsbCBvZiBTSUdVU1IxIGhhbmRsZXIgZmFpbGVkIik7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisKKwlhY3Quc2FfaGFuZGxlciA9IGNoaWxkX3NpZ3VzcjI7CisJYWN0LnNhX2ZsYWdzID0gMDsKKwlzaWdlbXB0eXNldCgmYWN0LnNhX21hc2spOworCisJaWYgKHNpZ2FjdGlvbihTSUdVU1IyLCAmYWN0LCBOVUxMKSkgeworCQlwZXJyb3IoIm9wcm9maWxlZDogaW5zdGFsbCBvZiBTSUdVU1IyIGhhbmRsZXIgZmFpbGVkIik7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisKKwlhY3Quc2FfaGFuZGxlciA9IGNoaWxkX3NpZ3Rlcm07CisJYWN0LnNhX2ZsYWdzID0gMDsKKwlzaWdlbXB0eXNldCgmYWN0LnNhX21hc2spOworCisJaWYgKHNpZ2FjdGlvbihTSUdURVJNLCAmYWN0LCBOVUxMKSkgeworCQlwZXJyb3IoIm9wcm9maWxlZDogaW5zdGFsbCBvZiBTSUdURVJNIGhhbmRsZXIgZmFpbGVkIik7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9Cit9CisKKworLyoqIGNyZWF0ZSB0aGUgcGVyLWNwdSBjb250ZXh0ICovCitzdGF0aWMgdm9pZCBjcmVhdGVfY29udGV4dChzdHJ1Y3QgY2hpbGQgKiBzZWxmKQoreworCXBmYXJnX2NvbnRleHRfdCBjdHg7CisJaW50IGVycjsKKworCW1lbXNldCgmY3R4LCAwLCBzaXplb2YocGZhcmdfY29udGV4dF90KSk7CisJbWVtY3B5KCZjdHguY3R4X3NtcGxfYnVmX2lkLCAmdXVpZCwgMTYpOworCWN0eC5jdHhfZmxhZ3MgPSBQRk1fRkxfU1lTVEVNX1dJREU7CisKKwllcnIgPSBwZXJmbW9uY3RsKDAsIFBGTV9DUkVBVEVfQ09OVEVYVCwgJmN0eCwgMSk7CisJaWYgKGVyciA9PSAtMSkgeworCQlwZXJyb3IoIkNSRUFURV9DT05URVhUIGZhaWxlZCIpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorCisJc2VsZi0+Y3R4X2ZkID0gY3R4LmN0eF9mZDsKK30KKworCisvKiogcHJvZ3JhbSB0aGUgcGVyZm1vbiBjb3VudGVycyAqLworc3RhdGljIHZvaWQgd3JpdGVfcG11KHN0cnVjdCBjaGlsZCAqIHNlbGYpCit7CisJcGZhcmdfcmVnX3QgcGNbT1BfTUFYX0NPVU5URVJTXTsKKwlwZmFyZ19yZWdfdCBwZFtPUF9NQVhfQ09VTlRFUlNdOworCWludCBlcnI7CisJc2l6ZV90IGk7CisKKwltZW1zZXQocGMsIDAsIHNpemVvZihwYykpOworCW1lbXNldChwZCwgMCwgc2l6ZW9mKHBkKSk7CisKKyNkZWZpbmUgUE1DX0dFTl9JTlRFUlJVUFQgKDFVTCA8PCA1KQorI2RlZmluZSBQTUNfUFJJVl9NT05JVE9SICgxVUwgPDwgNikKKy8qIE1jS2lubGV5IHJlcXVpcmVzIHBtYzQgdG8gaGF2ZSBiaXQgMjMgc2V0IChlbmFibGUgUE1VKS4KKyAqIEl0IGlzIHN1cHBvc2VkbHkgaWdub3JlZCBpbiBvdGhlciBwbWMgcmVnaXN0ZXJzLgorICovCisjZGVmaW5lIFBNQ19NQU5EQVRPUlkgKDFVTCA8PCAyMykKKyNkZWZpbmUgUE1DX1VTRVIgKDFVTCA8PCAzKQorI2RlZmluZSBQTUNfS0VSTkVMICgxVUwgPDwgMCkKKwlmb3IgKGkgPSAwOyBpIDwgb3BfbnJfY291bnRlcnMgJiYgb3BkX2V2ZW50c1tpXS5uYW1lOyArK2kpIHsKKwkJc3RydWN0IG9wZF9ldmVudCAqIGV2ZW50ID0gJm9wZF9ldmVudHNbaV07CisJCXBjW2ldLnJlZ19udW0gPSBldmVudC0+Y291bnRlciArIDQ7CisJCXBjW2ldLnJlZ192YWx1ZSA9IFBNQ19HRU5fSU5URVJSVVBUOworCQlwY1tpXS5yZWdfdmFsdWUgfD0gUE1DX1BSSVZfTU9OSVRPUjsKKwkJcGNbaV0ucmVnX3ZhbHVlIHw9IFBNQ19NQU5EQVRPUlk7CisJCShldmVudC0+dXNlcikgPyAocGNbaV0ucmVnX3ZhbHVlIHw9IFBNQ19VU0VSKQorCQkgICAgICAgICAgICAgIDogKHBjW2ldLnJlZ192YWx1ZSAmPSB+UE1DX1VTRVIpOworCQkoZXZlbnQtPmtlcm5lbCkgPyAocGNbaV0ucmVnX3ZhbHVlIHw9IFBNQ19LRVJORUwpCisJCSAgICAgICAgICAgICAgICA6IChwY1tpXS5yZWdfdmFsdWUgJj0gflBNQ19LRVJORUwpOworCQlwY1tpXS5yZWdfdmFsdWUgJj0gfigweGZmIDw8IDgpOworCQlwY1tpXS5yZWdfdmFsdWUgfD0gKChldmVudC0+dmFsdWUgJiAweGZmKSA8PCA4KTsKKwkJcGNbaV0ucmVnX3ZhbHVlICY9IH4oMHhmIDw8IDE2KTsKKwkJcGNbaV0ucmVnX3ZhbHVlIHw9ICgoZXZlbnQtPnVtICYgMHhmKSA8PCAxNik7CisJCXBjW2ldLnJlZ19zbXBsX2V2ZW50aWQgPSBldmVudC0+Y291bnRlcjsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgb3BfbnJfY291bnRlcnMgJiYgb3BkX2V2ZW50c1tpXS5uYW1lOyArK2kpIHsKKwkJc3RydWN0IG9wZF9ldmVudCAqIGV2ZW50ID0gJm9wZF9ldmVudHNbaV07CisJCXBkW2ldLnJlZ192YWx1ZSA9IH4wVUwgLSBldmVudC0+Y291bnQgKyAxOworCQlwZFtpXS5yZWdfc2hvcnRfcmVzZXQgPSB+MFVMIC0gZXZlbnQtPmNvdW50ICsgMTsKKwkJcGRbaV0ucmVnX251bSA9IGV2ZW50LT5jb3VudGVyICsgNDsKKwl9CisKKwllcnIgPSBwZXJmbW9uY3RsKHNlbGYtPmN0eF9mZCwgUEZNX1dSSVRFX1BNQ1MsIHBjLCBpKTsKKwlpZiAoZXJyID09IC0xKSB7CisJCXBlcnJvcigiQ291bGRuJ3Qgd3JpdGUgUE1DcyIpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorCisJZXJyID0gcGVyZm1vbmN0bChzZWxmLT5jdHhfZmQsIFBGTV9XUklURV9QTURTLCBwZCwgaSk7CisJaWYgKGVyciA9PSAtMSkgeworCQlwZXJyb3IoIkNvdWxkbid0IHdyaXRlIFBNRHMiKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KK30KKworCitzdGF0aWMgdm9pZCBsb2FkX2NvbnRleHQoc3RydWN0IGNoaWxkICogc2VsZikKK3sKKwlwZmFyZ19sb2FkX3QgbG9hZF9hcmdzOworCWludCBlcnI7CisKKwltZW1zZXQoJmxvYWRfYXJncywgMCwgc2l6ZW9mKGxvYWRfYXJncykpOworCWxvYWRfYXJncy5sb2FkX3BpZCA9IHNlbGYtPnBpZDsKKworCWVyciA9IHBlcmZtb25jdGwoc2VsZi0+Y3R4X2ZkLCBQRk1fTE9BRF9DT05URVhULCAmbG9hZF9hcmdzLCAxKTsKKwlpZiAoZXJyID09IC0xKSB7CisJCXBlcnJvcigiQ291bGRuJ3QgbG9hZCBjb250ZXh0Iik7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9Cit9CisKKworc3RhdGljIHZvaWQgbm90aWZ5X3BhcmVudChzdHJ1Y3QgY2hpbGQgKiBzZWxmLCBzaXplX3QgY3B1KQoreworCWZvciAoOzspIHsKKwkJc3NpemVfdCByZXQ7CisJCXJldCA9IHdyaXRlKHNlbGYtPnVwX3BpcGVbMV0sICZjcHUsIHNpemVvZihzaXplX3QpKTsKKwkJaWYgKHJldCA9PSBzaXplb2Yoc2l6ZV90KSkKKwkJCWJyZWFrOworCQlpZiAocmV0IDwgMCAmJiBlcnJubyAhPSBFSU5UUikgeworCQkJcGVycm9yKCJGYWlsZWQgdG8gd3JpdGUgY2hpbGQgcGlwZToiKTsKKwkJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwkJfQorCX0KK30KKworc3RhdGljIHN0cnVjdCBjaGlsZCAqIGlubmVyX2NoaWxkOwordm9pZCBjbG9zZV9waXBlKHZvaWQpCit7CisJY2xvc2UoaW5uZXJfY2hpbGQtPnVwX3BpcGVbMV0pOworfQorCitzdGF0aWMgdm9pZCBydW5fY2hpbGQoc2l6ZV90IGNwdSkKK3sKKwlzdHJ1Y3QgY2hpbGQgKiBzZWxmID0gJmNoaWxkcmVuW2NwdV07CisKKwlzZWxmLT5waWQgPSBnZXRwaWQoKTsKKwlzZWxmLT5zaWd1c3IxID0gMDsKKwlzZWxmLT5zaWd1c3IyID0gMDsKKwlzZWxmLT5zaWd0ZXJtID0gMDsKKworCWlubmVyX2NoaWxkID0gc2VsZjsKKwlpZiAoYXRleGl0KGNsb3NlX3BpcGUpKXsKKwkJY2xvc2VfcGlwZSgpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorCisJdW1hc2soMCk7CisJLyogQ2hhbmdlIGRpcmVjdG9yeSB0byBhbGxvdyBkaXJlY3RvcnkgdG8gYmUgcmVtb3ZlZCAqLworCWlmIChjaGRpcigiLyIpIDwgMCkgeworCQlwZXJyb3IoIlVuYWJsZSB0byBjaGRpciB0byBcIi9cIiIpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorCisJc2V0dXBfc2lnbmFscygpOworCisJc2V0X2FmZmluaXR5KGNwdSk7CisKKwljcmVhdGVfY29udGV4dChzZWxmKTsKKworCXdyaXRlX3BtdShzZWxmKTsKKworCWxvYWRfY29udGV4dChzZWxmKTsKKworCW5vdGlmeV9wYXJlbnQoc2VsZiwgY3B1KTsKKworCS8qIFJlZGlyZWN0IHN0YW5kYXJkIGZpbGVzIHRvIC9kZXYvbnVsbCAqLworCWZyZW9wZW4oICIvZGV2L251bGwiLCAiciIsIHN0ZGluKTsKKwlmcmVvcGVuKCAiL2Rldi9udWxsIiwgInciLCBzdGRvdXQpOworCWZyZW9wZW4oICIvZGV2L251bGwiLCAidyIsIHN0ZGVycik7CisKKwlmb3IgKDs7KSB7CisJCXNpZ3NldF90IHNpZ21hc2s7CisJCXNpZ2ZpbGxzZXQoJnNpZ21hc2spOworCQlzaWdkZWxzZXQoJnNpZ21hc2ssIFNJR1VTUjEpOworCQlzaWdkZWxzZXQoJnNpZ21hc2ssIFNJR1VTUjIpOworCQlzaWdkZWxzZXQoJnNpZ21hc2ssIFNJR1RFUk0pOworCisJCWlmIChzZWxmLT5zaWd1c3IxKSB7CisJCQlwZXJmbW9uX3N0YXJ0X2NoaWxkKHNlbGYtPmN0eF9mZCk7CisJCQlzZWxmLT5zaWd1c3IxID0gMDsKKwkJfQorCisJCWlmIChzZWxmLT5zaWd1c3IyKSB7CisJCQlwZXJmbW9uX3N0b3BfY2hpbGQoc2VsZi0+Y3R4X2ZkKTsKKwkJCXNlbGYtPnNpZ3VzcjIgPSAwOworCQl9CisKKwkJc2lnc3VzcGVuZCgmc2lnbWFzayk7CisJfQorfQorCisKK3N0YXRpYyB2b2lkIHdhaXRfZm9yX2NoaWxkKHN0cnVjdCBjaGlsZCAqIGNoaWxkKQoreworCXNpemVfdCB0bXA7CisJZm9yICg7OykgeworCQlzc2l6ZV90IHJldDsKKwkJcmV0ID0gcmVhZChjaGlsZC0+dXBfcGlwZVswXSwgJnRtcCwgc2l6ZW9mKHNpemVfdCkpOworCQlpZiAocmV0ID09IHNpemVvZihzaXplX3QpKQorCQkJYnJlYWs7CisJCWlmICgocmV0IDwgMCAmJiBlcnJubyAhPSBFSU5UUikgfHwgcmV0ID09IDAgKSB7CisJCQlwZXJyb3IoIkZhaWxlZCB0byByZWFkIGNoaWxkIHBpcGUiKTsKKwkJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwkJfQorCX0KKwlwcmludGYoIlBlcmZtb24gY2hpbGQgdXAgb24gQ1BVJWRcbiIsIChpbnQpdG1wKTsKKwlmZmx1c2goc3Rkb3V0KTsKKworCWNsb3NlKGNoaWxkLT51cF9waXBlWzBdKTsKK30KKworc3RhdGljIHN0cnVjdCBjaGlsZCogeGVuX2N0eDsKKwordm9pZCBwZXJmbW9uX2luaXQodm9pZCkKK3sKKwlzaXplX3QgaTsKKwlsb25nIG5yOworCisJaWYgKGNwdV90eXBlID09IENQVV9USU1FUl9JTlQpCisJCXJldHVybjsKKworCWlmICghbm9feGVuKSB7CisJCXhlbl9jdHggPSB4bWFsbG9jKHNpemVvZihzdHJ1Y3QgY2hpbGQpKTsKKwkJeGVuX2N0eC0+cGlkID0gZ2V0cGlkKCk7CisJCXhlbl9jdHgtPnVwX3BpcGVbMF0gPSAtMTsKKwkJeGVuX2N0eC0+dXBfcGlwZVsxXSA9IC0xOworCQl4ZW5fY3R4LT5zaWd1c3IxID0gMDsKKwkJeGVuX2N0eC0+c2lndXNyMiA9IDA7CisJCXhlbl9jdHgtPnNpZ3Rlcm0gPSAwOworCisJCWNyZWF0ZV9jb250ZXh0KHhlbl9jdHgpOworCisJCXdyaXRlX3BtdSh4ZW5fY3R4KTsKKwkJCisJCWxvYWRfY29udGV4dCh4ZW5fY3R4KTsKKwkJcmV0dXJuOworCX0KKwkKKworCW5yID0gc3lzY29uZihfU0NfTlBST0NFU1NPUlNfT05MTik7CisJaWYgKG5yID09IC0xKSB7CisJCWZwcmludGYoc3RkZXJyLCAiQ291bGRuJ3QgZGV0ZXJtaW5lIG51bWJlciBvZiBDUFVzLlxuIik7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisKKwlucl9jcHVzID0gbnI7CisKKwljaGlsZHJlbiA9IHhtYWxsb2Moc2l6ZW9mKHN0cnVjdCBjaGlsZCkgKiBucl9jcHVzKTsKKwliemVybyhjaGlsZHJlbiwgc2l6ZW9mKHN0cnVjdCBjaGlsZCkgKiBucl9jcHVzKTsKKworCWZvciAoaSA9IDA7IGkgPCBucl9jcHVzOyArK2kpIHsKKwkJaW50IHJldDsKKworCQlpZiAocGlwZShjaGlsZHJlbltpXS51cF9waXBlKSkgeworCQkJcGVycm9yKCJDb3VsZG4ndCBjcmVhdGUgY2hpbGQgcGlwZSIpOworCQkJZXhpdChFWElUX0ZBSUxVUkUpOworCQl9CisKKwkJcmV0ID0gZm9yaygpOworCQlpZiAocmV0ID09IC0xKSB7CisJCQlwZXJyb3IoIkNvdWxkbid0IGZvcmsgcGVyZm1vbiBjaGlsZCIpOworCQkJZXhpdChFWElUX0ZBSUxVUkUpOworCQl9IGVsc2UgaWYgKHJldCA9PSAwKSB7CisJCQljbG9zZShjaGlsZHJlbltpXS51cF9waXBlWzBdKTsKKwkJCXJ1bl9jaGlsZChpKTsKKwkJfSBlbHNlIHsKKwkJCWNoaWxkcmVuW2ldLnBpZCA9IHJldDsKKwkJCWNsb3NlKGNoaWxkcmVuW2ldLnVwX3BpcGVbMV0pOworCQkJcHJpbnRmKCJXYWl0aW5nIG9uIENQVSVkXG4iLCAoaW50KWkpOworCQkJd2FpdF9mb3JfY2hpbGQoJmNoaWxkcmVuW2ldKTsKKwkJfQorCX0KK30KKworCit2b2lkIHBlcmZtb25fZXhpdCh2b2lkKQoreworCXNpemVfdCBpOworCisJaWYgKGNwdV90eXBlID09IENQVV9USU1FUl9JTlQpCisJCXJldHVybjsKKworCWlmICghbm9feGVuKQorCQlyZXR1cm47CisKKwlmb3IgKGkgPSAwOyBpIDwgbnJfY3B1czsgKytpKSB7CisJCWlmIChjaGlsZHJlbltpXS5waWQpIHsKKwkJCWludCBjX3BpZCA9IGNoaWxkcmVuW2ldLnBpZDsKKwkJCWNoaWxkcmVuW2ldLnBpZCA9IDA7CisJCQlpZiAoa2lsbChjX3BpZCwgU0lHS0lMTCk9PTApCisJCQkJd2FpdHBpZChjX3BpZCwgTlVMTCwgMCk7CisJCX0KKwl9Cit9CisKKwordm9pZCBwZXJmbW9uX3N0YXJ0KHZvaWQpCit7CisJc2l6ZV90IGk7CisKKwlpZiAoY3B1X3R5cGUgPT0gQ1BVX1RJTUVSX0lOVCkKKwkJcmV0dXJuOworCisJaWYgKCFub194ZW4pIHsKKwkJcGVyZm1vbl9zdGFydF9jaGlsZCh4ZW5fY3R4LT5jdHhfZmQpOworCQlyZXR1cm47CisJfQorCisJZm9yIChpID0gMDsgaSA8IG5yX2NwdXM7ICsraSkgeworCQlpZiAoa2lsbChjaGlsZHJlbltpXS5waWQsIFNJR1VTUjEpKSB7CisJCQlwZXJyb3IoIlVuYWJsZSB0byBzdGFydCBwZXJmbW9uIik7CisJCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJCX0KKwl9Cit9CisKKwordm9pZCBwZXJmbW9uX3N0b3Aodm9pZCkKK3sKKwlzaXplX3QgaTsKKworCWlmIChjcHVfdHlwZSA9PSBDUFVfVElNRVJfSU5UKQorCQlyZXR1cm47CisKKwlpZiAoIW5vX3hlbikgeworCQlwZXJmbW9uX3N0b3BfY2hpbGQoeGVuX2N0eC0+Y3R4X2ZkKTsKKwkJcmV0dXJuOworCX0KKwkKKwlmb3IgKGkgPSAwOyBpIDwgbnJfY3B1czsgKytpKQorCQlpZiAoa2lsbChjaGlsZHJlbltpXS5waWQsIFNJR1VTUjIpKSB7CisJCQlwZXJyb3IoIlVuYWJsZSB0byBzdG9wIHBlcmZtb24iKTsKKwkJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwkJfQorfQorCisjZW5kaWYgLyogX19pYTY0X18gKi8KZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2RhZW1vbi9vcGRfcGVyZm1vbi5oIGIvb3Byb2ZpbGUtMC45LjcvZGFlbW9uL29wZF9wZXJmbW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWI0MjY3ZgotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2RhZW1vbi9vcGRfcGVyZm1vbi5oCkBAIC0wLDAgKzEsMTA2IEBACisvKioKKyAqIEBmaWxlIG9wZF9wZXJmbW9uLmgKKyAqIHBlcmZtb25jdGwoKSBoYW5kbGluZworICoKKyAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDMgT1Byb2ZpbGUgYXV0aG9ycworICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKKyAqCisgKiBAYXV0aG9yIEpvaG4gTGV2b24KKyAqLworCisjaWZuZGVmIE9QRF9QRVJGTU9OX0gKKyNkZWZpbmUgT1BEX1BFUkZNT05fSAorCisjaWZkZWYgX19pYTY0X18KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorCit2b2lkIHBlcmZtb25faW5pdCh2b2lkKTsKK3ZvaWQgcGVyZm1vbl9leGl0KHZvaWQpOwordm9pZCBwZXJmbW9uX3N0YXJ0KHZvaWQpOwordm9pZCBwZXJmbW9uX3N0b3Aodm9pZCk7CisKKy8qIFRoZSBmb2xsb3dpbmcgaXMgZnJvbSBhc20vcGVyZm1vbi5oLiBXaGVuIGl0J3MgaW5zdGFsbGVkIG9uCisgKiBlbm91Z2ggYm94ZXMsIHdlIGNhbiByZW1vdmUgdGhpcyBhbmQgaW5jbHVkZSB0aGUgcGxhdGZvcm0KKyAqIHBlcmZtb24uaAorICovCisKK3R5cGVkZWYgdW5zaWduZWQgY2hhciBwZm1fdXVpZF90WzE2XTsJLyogY3VzdG9tIHNhbXBsaW5nIGJ1ZmZlciBpZGVudGlmaWVyIHR5cGUgKi8KKworLyoKKyAqIFJlcXVlc3Qgc3RydWN0dXJlIHVzZWQgdG8gZGVmaW5lIGEgY29udGV4dAorICovCit0eXBlZGVmIHN0cnVjdCB7CisJcGZtX3V1aWRfdCAgICAgY3R4X3NtcGxfYnVmX2lkOwkgLyogd2hpY2ggYnVmZmVyIGZvcm1hdCB0byB1c2UgKGlmIG5lZWRlZCkgKi8KKwl1bnNpZ25lZCBsb25nICBjdHhfZmxhZ3M7CSAvKiBub2Jsb2NrL2Jsb2NrICovCisJdW5zaWduZWQgc2hvcnQgY3R4X25leHRyYV9zZXRzOwkgLyogbnVtYmVyIG9mIGV4dHJhIGV2ZW50IHNldHMgKHlvdSBhbHdheXMgZ2V0IDEpICovCisJdW5zaWduZWQgc2hvcnQgY3R4X3Jlc2VydmVkMTsJIC8qIGZvciBmdXR1cmUgdXNlICovCisJaW50CSAgICAgICBjdHhfZmQ7CQkgLyogcmV0dXJuIGFyZzogdW5pcXVlIGlkZW50aWZpY2F0aW9uIGZvciBjb250ZXh0ICovCisJdm9pZAkgICAgICAgKmN0eF9zbXBsX3ZhZGRyOwkgLyogcmV0dXJuIGFyZzogdmlydHVhbCBhZGRyZXNzIG9mIHNhbXBsaW5nIGJ1ZmZlciwgaXMgdXNlZCAqLworCXVuc2lnbmVkIGxvbmcgIGN0eF9yZXNlcnZlZDJbMTFdOy8qIGZvciBmdXR1cmUgdXNlICovCit9IHBmYXJnX2NvbnRleHRfdDsKKworLyoKKyAqIFJlcXVlc3Qgc3RydWN0dXJlIHVzZWQgdG8gd3JpdGUvcmVhZCBhIFBNQyBvciBQTUQKKyAqLwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGludAlyZWdfbnVtOwkgICAvKiB3aGljaCByZWdpc3RlciAqLworCXVuc2lnbmVkIHNob3J0CXJlZ19zZXQ7CSAgIC8qIGV2ZW50IHNldCBmb3IgdGhpcyByZWdpc3RlciAqLworCXVuc2lnbmVkIHNob3J0CXJlZ19yZXNlcnZlZDE7CSAgIC8qIGZvciBmdXR1cmUgdXNlICovCisKKwl1bnNpZ25lZCBsb25nCXJlZ192YWx1ZTsJICAgLyogaW5pdGlhbCBwbWMvcG1kIHZhbHVlICovCisJdW5zaWduZWQgbG9uZwlyZWdfZmxhZ3M7CSAgIC8qIGlucHV0OiBwbWMvcG1kIGZsYWdzLCByZXR1cm46IHJlZyBlcnJvciAqLworCisJdW5zaWduZWQgbG9uZwlyZWdfbG9uZ19yZXNldDsJICAgLyogcmVzZXQgYWZ0ZXIgYnVmZmVyIG92ZXJmbG93IG5vdGlmaWNhdGlvbiAqLworCXVuc2lnbmVkIGxvbmcJcmVnX3Nob3J0X3Jlc2V0OyAgIC8qIHJlc2V0IGFmdGVyIGNvdW50ZXIgb3ZlcmZsb3cgKi8KKworCXVuc2lnbmVkIGxvbmcJcmVnX3Jlc2V0X3BtZHNbNF07IC8qIHdoaWNoIG90aGVyIGNvdW50ZXJzIHRvIHJlc2V0IG9uIG92ZXJmbG93ICovCisJdW5zaWduZWQgbG9uZwlyZWdfcmFuZG9tX3NlZWQ7ICAgLyogc2VlZCB2YWx1ZSB3aGVuIHJhbmRvbWl6YXRpb24gaXMgdXNlZCAqLworCXVuc2lnbmVkIGxvbmcJcmVnX3JhbmRvbV9tYXNrOyAgIC8qIGJpdG1hc2sgdXNlZCB0byBsaW1pdCByYW5kb20gdmFsdWUgKi8KKwl1bnNpZ25lZCBsb25nICAgcmVnX2xhc3RfcmVzZXRfdmFsOy8qIHJldHVybjogUE1EIGxhc3QgcmVzZXQgdmFsdWUgKi8KKworCXVuc2lnbmVkIGxvbmcJcmVnX3NtcGxfcG1kc1s0XTsgIC8qIHdoaWNoIHBtZHMgYXJlIGFjY2Vzc2VkIHdoZW4gUE1DIG92ZXJmbG93cyAqLworCXVuc2lnbmVkIGxvbmcJcmVnX3NtcGxfZXZlbnRpZDsgIC8qIG9wYXF1ZSBzYW1wbGluZyBldmVudCBpZGVudGlmaWVyICovCisKKwl1bnNpZ25lZCBsb25nICAgcmVnX3Jlc2VydmVkMlszXTsgICAvKiBmb3IgZnV0dXJlIHVzZSAqLworfSBwZmFyZ19yZWdfdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworCXBpZF90CQlsb2FkX3BpZDsJICAgLyogcHJvY2VzcyB0byBsb2FkIHRoZSBjb250ZXh0IGludG8gKi8KKwl1bnNpZ25lZCBzaG9ydAlsb2FkX3NldDsJICAgLyogZmlyc3QgZXZlbnQgc2V0IHRvIGxvYWQgKi8KKwl1bnNpZ25lZCBzaG9ydAlsb2FkX3Jlc2VydmVkMTsJICAgLyogZm9yIGZ1dHVyZSB1c2UgKi8KKwl1bnNpZ25lZCBsb25nCWxvYWRfcmVzZXJ2ZWQyWzNdOyAvKiBmb3IgZnV0dXJlIHVzZSAqLworfSBwZmFyZ19sb2FkX3Q7CisKKyNkZWZpbmUgUEZNX1dSSVRFX1BNQ1MgICAgICAweDAxCisjZGVmaW5lIFBGTV9XUklURV9QTURTICAgICAgMHgwMgorI2RlZmluZSBQRk1fU1RPUCAgICAgICAgICAgIDB4MDQKKyNkZWZpbmUgUEZNX1NUQVJUICAgICAgICAgICAweDA1CisjZGVmaW5lIFBGTV9DUkVBVEVfQ09OVEVYVCAgMHgwOAorI2RlZmluZSBQRk1fTE9BRF9DT05URVhUICAgIDB4MTAKKyNkZWZpbmUgUEZNX0ZMX1NZU1RFTV9XSURFICAweDAyCisKKyNlbHNlCisKK3ZvaWQgcGVyZm1vbl9pbml0KHZvaWQpCit7Cit9CisKKwordm9pZCBwZXJmbW9uX2V4aXQodm9pZCkKK3sKK30KKworCit2b2lkIHBlcmZtb25fc3RhcnQodm9pZCkKK3sKK30KKworCit2b2lkIHBlcmZtb25fc3RvcCh2b2lkKQoreworfQorCisjZW5kaWYgLyogX19pYTY0X18gKi8KKworI2VuZGlmIC8qIE9QRF9QRVJGTU9OX0ggKi8KZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2RhZW1vbi9vcGRfcGlwZS5jIGIvb3Byb2ZpbGUtMC45LjcvZGFlbW9uL29wZF9waXBlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2M4MTk3OQotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2RhZW1vbi9vcGRfcGlwZS5jCkBAIC0wLDAgKzEsOTkgQEAKKy8qKgorICogQGZpbGUgZGFlbW9uL29wZF9waXBlLmMKKyAqIEZ1bmN0aW9ucyBoYW5kbGluZyB0aGUgJFNFU1NJT05ESVIvb3BkX3BpcGUgRklGTyBzcGVjaWFsIGZpbGUuCisgKiBOT1RFOiBUaGlzIGNvZGUgaXMgZGVhbGluZyB3aXRoIHBvdGVudGlhbGx5IGluc2VjdXJlIGlucHV0LgorICoKKyAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDggT1Byb2ZpbGUgYXV0aG9ycworICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKKyAqCisgKiBAYXV0aG9yIERhbmllbCBIYW5zZWwKKyAqLworCisjaW5jbHVkZSAib3BkX3BpcGUuaCIKKyNpbmNsdWRlICJvcGRfcHJpbnRmLmgiCisjaW5jbHVkZSAib3BfY29uZmlnLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorCitzdGF0aWMgaW50IGZpZm87CitzdGF0aWMgRklMRSAqIGZpZm9fZmQgPSBOVUxMOworCit2b2lkIG9wZF9jcmVhdGVfcGlwZSh2b2lkKQoreworCW1vZGVfdCBvcmlnX3VtYXNrID0gdW1hc2soMDExMSk7CisJaWYgKG1rZmlmbyhvcF9waXBlX2ZpbGUsIDA2NjYpID09IC0xKSB7CisJCWlmIChlcnJubyAhPSBFRVhJU1QpIHsKKwkJCXBlcnJvcigib3Byb2ZpbGVkOiBjb3VsZG4ndCBjcmVhdGUgcGlwZTogIik7CisJCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJCX0KKwl9CisJdW1hc2sob3JpZ191bWFzayk7Cit9CisKKwordm9pZCBvcGRfb3Blbl9waXBlKHZvaWQpCit7CisJZmlmbyA9IG9wZW4ob3BfcGlwZV9maWxlLCBPX1JET05MWSB8IE9fTk9OQkxPQ0spOworCWlmIChmaWZvID09IC0xKSB7CisJCXBlcnJvcigib3Byb2ZpbGVkOiBjb3VsZG4ndCBvcGVuIHBpcGU6ICIpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorfQorCisKK3ZvaWQgb3BkX2Nsb3NlX3BpcGUodm9pZCkKK3sKKwlpZiAoZmlmb19mZCkKKwkJZmNsb3NlKGZpZm9fZmQpOworCWNsb3NlKGZpZm8pOworfQorCisKK2ludCBpc19qaXRjb252X3JlcXVlc3RlZCh2b2lkKQoreworCS8qIG51bWJlciBvZiBkcm9wcGVkICh1bmtub3duKSByZXF1ZXN0cyAqLworCXN0YXRpYyBsb25nIG5yX2Ryb3BzID0gMDsKKwkvKiBtb2R1bHVzIHRvIG91dHB1dCBvbmx5IGEgZmV3IHdhcm5pbmdzIHRvIGF2b2lkIGZsb29kaW5nIG9wcm9maWxlZC5sb2cgKi8KKwlzdGF0aWMgaW50IG1vZF9jbnRfZHJvcHMgPSAxOworCWNoYXIgbGluZVsyNTZdOworCWludCBpLCByZXQgPSAwOworCisJLyogZ2V0IGEgZmlsZSBkZXNjcmlwdG9yIHRvIHRoZSBwaXBlICovCisJaWYgKCFmaWZvX2ZkKQorCQlmaWZvX2ZkID0gZmRvcGVuKGZpZm8sICJyIik7CisKKwlpZiAoZmlmb19mZCA9PSBOVUxMKSB7CisJCXBlcnJvcigib3Byb2ZpbGVkOiBjb3VsZG4ndCBjcmVhdGUgZmlsZSBkZXNjcmlwdG9yOiAiKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKworCS8qIHJlYWQgdXAgdG8gOTkgbGluZXMgdG8gY2hlY2sgZm9yICdkb19qaXRjb252JyAqLworCWZvciAoaSA9IDA7IGkgPCA5OTsgaSsrKSB7CisJCS8qIGp1c3QgYnJlYWsgaWYgbm8gbmV3IGxpbmUgaXMgZm91bmQgKi8KKwkJaWYgKGZnZXRzKGxpbmUsIDI1NiwgZmlmb19mZCkgPT0gTlVMTCkKKwkJCWJyZWFrOworCQlsaW5lW3N0cmxlbihsaW5lKSAtIDFdID0gJ1wwJzsKKworCQlpZiAoc3Ryc3RyKGxpbmUsICJkb19qaXRjb252IikgIT0gTlVMTCkgeworCQkJcmV0ID0gMTsKKwkJfSBlbHNlIHsKKwkJCW5yX2Ryb3BzKys7CisKKwkJCWlmIChucl9kcm9wcyAlIG1vZF9jbnRfZHJvcHMgPT0gMCkgeworCQkJCXByaW50ZigKKwkJCQkgICAgICAgIldhcm5pbmc6IGludmFsaWQgcGlwZSByZXF1ZXN0IHJlY2VpdmVkIChkcm9wcGVkIHJlcXVlc3Qocyk6ICVsZClcbiIsCisJCQkJICAgICAgIG5yX2Ryb3BzKTsKKwkJCQkvKiBpbmNyZWFzZSBtb2R1bHVzIHRvIGF2b2lkIGZsb29kaW5nIGxvZyBmaWxlICovCisJCQkJbW9kX2NudF9kcm9wcyAqPSA1OworCQkJfQorCQl9CisJfQorCisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2RhZW1vbi9vcGRfcGlwZS5oIGIvb3Byb2ZpbGUtMC45LjcvZGFlbW9uL29wZF9waXBlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Y5NmIwNwotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2RhZW1vbi9vcGRfcGlwZS5oCkBAIC0wLDAgKzEsNDUgQEAKKy8qKgorICogQGZpbGUgZGFlbW9uL29wZF9waXBlLmgKKyAqIEZ1bmN0aW9ucyBoYW5kbGluZyB0aGUgJFNFU1NJT05ESVIvb3BkX3BpcGUgRklGTyBzcGVjaWFsIGZpbGUuCisgKiBOT1RFOiBUaGlzIGNvZGUgaXMgZGVhbGluZyB3aXRoIHBvdGVuY2lhbGx5IGluc2VjdXJlIGlucHV0LgorICoKKyAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDggT1Byb2ZpbGUgYXV0aG9ycworICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKKyAqCisgKiBAYXV0aG9yIERhbmllbCBIYW5zZWwKKyAqLworCisjaWZuZGVmIE9QRF9QSVBFX0hfCisjZGVmaW5lIE9QRF9QSVBFX0hfCisgCisvKioKKyAqIG9wZF9jcmVhdGVfcGlwZSAtIGNyZWF0ZXMgdGhlIG9wcm9maWxlZCBmaWZvIGZpbGUKKyAqCisgKiBDcmVhdGVzIHRoZSBPcHJvZmlsZSBkYWVtb24gZmlmbyBwaXBlIHRvIGVuYWJsZSBjb21tdW5pY2F0aW9uIGJldHdlZW4KKyAqIHRoZSBkYWVtb24gYW5kIHRoZSAnb3Bjb250cm9sIC0tZHVtcCcgY29tbWFuZC4gRmFpbHVyZSB0byBjcmVhdGUgdGhlIHBpcGUKKyAqIGlzIGEgZmF0YWwgZXJyb3IuCisgKi8KK3ZvaWQgb3BkX2NyZWF0ZV9waXBlKHZvaWQpOworCisvKioKKyAqIG9wZF9vcGVuX3BpcGUgLSBvcGVucyB0aGUgb3Byb2ZpbGVkIGZpZm8gZmlsZQorICovCit2b2lkIG9wZF9vcGVuX3BpcGUodm9pZCk7CisKKy8qKgorICogb3BkX2Nsb3NlX3BpcGUgLSBjbG9zZXMgdGhlIG9wcm9maWxlZCBmaWZvIGZpbGUKKyAqCisgKiBDbG9zZXMgdGhlIE9wcm9maWxlIGRhZW1vbiBmaWZvIHBpcGUuCisgKi8KK3ZvaWQgb3BkX2Nsb3NlX3BpcGUodm9pZCk7CisKKy8qKgorICogaXNfaml0Y29udl9yZXF1ZXN0ZWQgLSBjaGVjayBmb3IgcmVxdWVzdCB0byBqaXQgY29udmVyc2lvbgorICoKKyAqIENoZWNrcyB0aGUgT3Byb2ZpbGUgZGFlbW9uIGZpZm8gcGlwZSBmb3IgZG9faml0Y29udiByZXF1ZXN0LgorICogSWYgaml0IGNvbnZlcnNpb24gaXMgcmVxdWVzdGVkICgnZG9faml0Y29udicgaXMgc2VudCkgdGhlIGNoZWNrIHJldHVybnMgMS4KKyAqIE90aGVyd2lzZSBpdCByZXR1cm5zIDAuCisgKi8KK2ludCBpc19qaXRjb252X3JlcXVlc3RlZCh2b2lkKTsKKworI2VuZGlmIC8qT1BEX1BJUEVfSF8qLwpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvZGFlbW9uL29wZF9wcmludGYuaCBiL29wcm9maWxlLTAuOS43L2RhZW1vbi9vcGRfcHJpbnRmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDlkZjA3ZgotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2RhZW1vbi9vcGRfcHJpbnRmLmgKQEAgLTAsMCArMSwzNyBAQAorLyoqCisgKiBAZmlsZSBkYWVtb24vb3BkX3ByaW50Zi5oCisgKiBPdXRwdXQgcm91dGluZXMKKyAqCisgKiBAcmVtYXJrIENvcHlyaWdodCAyMDAyIE9Qcm9maWxlIGF1dGhvcnMKKyAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCisgKgorICogQGF1dGhvciBKb2huIExldm9uCisgKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKKyAqLworCisjaWZuZGVmIE9QRF9QUklOVEZfSAorI2RlZmluZSBPUERfUFJJTlRGX0gKKworLy8vIGxvZyBhbGwgc2FtcGxlIGZpbGUgbmFtZSBtYW5pcHVsYXRpb247IHNhbXBsZSBmaWxlcyBvcGVuLCBjbG9zZSwKKy8vLyBzZmlsZSBMUlUgZXRjLiB2b2x1bWlub3VzLiBGSVhNRSBuZWVkIHRvIGJlIHNwbGl0dGVkIChmaWxlbmFtZSBtYW5pcCwgZmlsZXMKKy8vLyBoYW5kbGluZykgPworZXh0ZXJuIGludCB2c2ZpbGU7CisvLy8gbG9nIHNhbXBsZXMsIHZvbHVtaW5vdXMuCitleHRlcm4gaW50IHZzYW1wbGVzOworLy8vIGxvZyBhcmMsIHZlcnkgdm9sdW1pbm91cy4KK2V4dGVybiBpbnQgdmFyY3M7CisvLy8ga2VybmVsIG1vZHVsZSBoYW5kbGluZworZXh0ZXJuIGludCB2bW9kdWxlOworLy8vIGV4dGVuZGVkIGZlYXR1cmUKK2V4dGVybiBpbnQgdmV4dDsKKy8vLyBhbGwgb3RoZXJzIG5vdCBmaXR0aW5nIGluIGFib3ZlIGNhdGVnb3J5LCBub3Qgdm9sdW1pbm91cy4KK2V4dGVybiBpbnQgdm1pc2M7CisKKyNkZWZpbmUgdmVyYnByaW50Zih4LCBhcmdzLi4uKSBcCisJZG8geyBcCisJCS8qIGxvb2sgbGlrZSBmcmFnaWxlIGJ1dCB3ZSBtdXN0IGNhdGNoIHZlcmJyaW50ZigiJXMiLCAiIikgKi8gXAorCQlpZiAoeCA9PSAxKSBcCisJCQlwcmludGYoYXJncyk7IFwKKwl9IHdoaWxlICgwKQorCisjZW5kaWYgLyogT1BEX1BSSU5URl9IICovCmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9kYWVtb24vb3BkX3NmaWxlLmMgYi9vcHJvZmlsZS0wLjkuNy9kYWVtb24vb3BkX3NmaWxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzJkZWEyMAotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2RhZW1vbi9vcGRfc2ZpbGUuYwpAQCAtMCwwICsxLDY0MyBAQAorLyoqCisgKiBAZmlsZSBkYWVtb24vb3BkX3NmaWxlLmMKKyAqIE1hbmFnZW1lbnQgb2Ygc2FtcGxlIGZpbGVzCisgKgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMiwgMjAwNSBPUHJvZmlsZSBhdXRob3JzCisgKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORworICoKKyAqIEBhdXRob3IgSm9obiBMZXZvbgorICogQGF1dGhvciBQaGlsaXBwZSBFbGllCisgKi8KKworI2luY2x1ZGUgIm9wZF9zZmlsZS5oIgorCisjaW5jbHVkZSAib3BkX3RyYW5zLmgiCisjaW5jbHVkZSAib3BkX2tlcm5lbC5oIgorI2luY2x1ZGUgIm9wZF9tYW5nbGluZy5oIgorI2luY2x1ZGUgIm9wZF9hbm9uLmgiCisjaW5jbHVkZSAib3BkX3ByaW50Zi5oIgorI2luY2x1ZGUgIm9wZF9zdGF0cy5oIgorI2luY2x1ZGUgIm9wZF9leHRlbmRlZC5oIgorI2luY2x1ZGUgIm9wcm9maWxlZC5oIgorCisjaW5jbHVkZSAib3BfbGliaWJlcnR5LmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjZGVmaW5lIEhBU0hfU0laRSAyMDQ4CisjZGVmaW5lIEhBU0hfQklUUyAoSEFTSF9TSVpFIC0gMSkKKworLyoqIEFsbCBzZmlsZXMgYXJlIGhhc2hlZCBpbnRvIHRoZXNlIGxpc3RzICovCitzdGF0aWMgc3RydWN0IGxpc3RfaGVhZCBoYXNoZXNbSEFTSF9TSVpFXTsKKworLyoqIEFsbCBzZmlsZXMgYXJlIG9uIHRoaXMgbGlzdC4gKi8KK3N0YXRpYyBMSVNUX0hFQUQobHJ1X2xpc3QpOworCisKKy8qIEZJWE1FOiBjYW4gdW5kb3VidGVkbHkgaW1wcm92ZSB0aGlzIGhhc2hpbmcgKi8KKy8qKiBIYXNoIHRoZSB0cmFuc2llbnQgcGFyYW1ldGVycyBmb3IgbG9va3VwLiAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcKK3NmaWxlX2hhc2goc3RydWN0IHRyYW5zaWVudCBjb25zdCAqIHRyYW5zLCBzdHJ1Y3Qga2VybmVsX2ltYWdlICoga2kpCit7CisJdW5zaWduZWQgbG9uZyB2YWwgPSAwOworCQorCWlmIChzZXBhcmF0ZV90aHJlYWQpIHsKKwkJdmFsIF49IHRyYW5zLT50aWQgPDwgMjsKKwkJdmFsIF49IHRyYW5zLT50Z2lkIDw8IDI7CisJfQorCisJaWYgKHNlcGFyYXRlX2tlcm5lbCB8fCAoKHRyYW5zLT5hbm9uIHx8IHNlcGFyYXRlX2xpYikgJiYgIWtpKSkKKwkJdmFsIF49IHRyYW5zLT5hcHBfY29va2llID4+IChEQ09PS0lFX1NISUZUICsgMyk7CisKKwlpZiAoc2VwYXJhdGVfY3B1KQorCQl2YWwgXj0gdHJhbnMtPmNwdTsKKworCS8qIGNvb2tpZSBtZWFuaW5nbGVzcyBmb3Iga2VybmVsLCBzaG91bGRuJ3QgaGFzaCAqLworCWlmICh0cmFucy0+aW5fa2VybmVsKSB7CisJCXZhbCBePSBraS0+c3RhcnQgPj4gMTQ7CisJCXZhbCBePSBraS0+ZW5kID4+IDc7CisJCXJldHVybiB2YWwgJiBIQVNIX0JJVFM7CisJfQorCisJaWYgKHRyYW5zLT5jb29raWUgIT0gTk9fQ09PS0lFKSB7CisJCXZhbCBePSB0cmFucy0+Y29va2llID4+IERDT09LSUVfU0hJRlQ7CisJCXJldHVybiB2YWwgJiBIQVNIX0JJVFM7CisJfQorCisJaWYgKCFzZXBhcmF0ZV90aHJlYWQpCisJCXZhbCBePSB0cmFucy0+dGdpZCA8PCAyOworCisJaWYgKHRyYW5zLT5hbm9uKSB7CisJCXZhbCBePSB0cmFucy0+YW5vbi0+c3RhcnQgPj4gVk1BX1NISUZUOworCQl2YWwgXj0gdHJhbnMtPmFub24tPmVuZCA+PiAoVk1BX1NISUZUICsgMSk7CisJfQorCisJcmV0dXJuIHZhbCAmIEhBU0hfQklUUzsKK30KKworCitzdGF0aWMgaW50Citkb19tYXRjaChzdHJ1Y3Qgc2ZpbGUgY29uc3QgKiBzZiwgY29va2llX3QgY29va2llLCBjb29raWVfdCBhcHBfY29va2llLAorICAgICAgICAgc3RydWN0IGtlcm5lbF9pbWFnZSBjb25zdCAqIGtpLCBzdHJ1Y3QgYW5vbl9tYXBwaW5nIGNvbnN0ICogYW5vbiwKKyAgICAgICAgIHBpZF90IHRnaWQsIHBpZF90IHRpZCwgdW5zaWduZWQgaW50IGNwdSkKK3sKKwkvKiB0aGlzIGlzIGEgc2ltcGxpZmllZCBjaGVjayBmb3IgImlzIGEga2VybmVsIGltYWdlIiBBTkQKKwkgKiAiaXMgdGhlIHJpZ2h0IGtlcm5lbCBpbWFnZSIuIEFsc28gaGFuZGxlcyBuby12bWxpbnV4CisJICogY29ycmVjdGx5LgorCSAqLworCWlmIChzZi0+a2VybmVsICE9IGtpKQorCQlyZXR1cm4gMDsKKworCWlmIChzZXBhcmF0ZV90aHJlYWQpIHsKKwkJaWYgKHNmLT50aWQgIT0gdGlkIHx8IHNmLT50Z2lkICE9IHRnaWQpCisJCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoc2VwYXJhdGVfY3B1KSB7CisJCWlmIChzZi0+Y3B1ICE9IGNwdSkKKwkJCXJldHVybiAwOworCX0KKworCWlmIChzZXBhcmF0ZV9rZXJuZWwgfHwgKChhbm9uIHx8IHNlcGFyYXRlX2xpYikgJiYgIWtpKSkgeworCQlpZiAoc2YtPmFwcF9jb29raWUgIT0gYXBwX2Nvb2tpZSkKKwkJCXJldHVybiAwOworCX0KKworCS8qIGlnbm9yZSB0aGUgY2FjaGVkIHRyYW5zLT5jb29raWUgZm9yIGtlcm5lbCBpbWFnZXMsCisJICogaXQncyBtZWFuaW5nbGVzcyBhbmQgd2UgY2hlY2tlZCBhbGwgb3RoZXJzIGFscmVhZHkKKwkgKi8KKwlpZiAoa2kpCisJCXJldHVybiAxOworCisJaWYgKHNmLT5hbm9uICE9IGFub24pCisJCXJldHVybiAwOworCisJcmV0dXJuIHNmLT5jb29raWUgPT0gY29va2llOworfQorCisKK3N0YXRpYyBpbnQKK3RyYW5zX21hdGNoKHN0cnVjdCB0cmFuc2llbnQgY29uc3QgKiB0cmFucywgc3RydWN0IHNmaWxlIGNvbnN0ICogc2ZpbGUsCisgICAgICAgICAgICBzdHJ1Y3Qga2VybmVsX2ltYWdlIGNvbnN0ICoga2kpCit7CisJcmV0dXJuIGRvX21hdGNoKHNmaWxlLCB0cmFucy0+Y29va2llLCB0cmFucy0+YXBwX2Nvb2tpZSwga2ksCisJICAgICAgICAgICAgICAgIHRyYW5zLT5hbm9uLCB0cmFucy0+dGdpZCwgdHJhbnMtPnRpZCwgdHJhbnMtPmNwdSk7Cit9CisKKworaW50CitzZmlsZV9lcXVhbChzdHJ1Y3Qgc2ZpbGUgY29uc3QgKiBzZiwgc3RydWN0IHNmaWxlIGNvbnN0ICogc2YyKQoreworCXJldHVybiBkb19tYXRjaChzZiwgc2YyLT5jb29raWUsIHNmMi0+YXBwX2Nvb2tpZSwgc2YyLT5rZXJuZWwsCisJICAgICAgICAgICAgICAgIHNmMi0+YW5vbiwgc2YyLT50Z2lkLCBzZjItPnRpZCwgc2YyLT5jcHUpOworfQorCisKK3N0YXRpYyBpbnQKK2lzX3NmX2lnbm9yZWQoc3RydWN0IHNmaWxlIGNvbnN0ICogc2YpCit7CisJaWYgKHNmLT5rZXJuZWwpIHsKKwkJaWYgKCFpc19pbWFnZV9pZ25vcmVkKHNmLT5rZXJuZWwtPm5hbWUpKQorCQkJcmV0dXJuIDA7CisKKwkJLyogTGV0IGEgZGVwZW5kZW50IGtlcm5lbCBpbWFnZSByZWRlZW0gdGhlIHNmIGlmIHdlJ3JlCisJCSAqIGV4ZWN1dGluZyBvbiBiZWhhbGYgb2YgYW4gYXBwbGljYXRpb24uCisJCSAqLworCQlyZXR1cm4gaXNfY29va2llX2lnbm9yZWQoc2YtPmFwcF9jb29raWUpOworCX0KKworCS8qIEFub24gcmVnaW9ucyBhcmUgYWx3YXlzIGRlcGVuZGVudCBvbiB0aGUgYXBwbGljYXRpb24uCisgCSAqIE90aGVyd2lzZSwgbGV0IGEgZGVwZW5kZW50IGltYWdlIHJlZGVlbSB0aGUgc2YuCisJICovCisJaWYgKHNmLT5hbm9uIHx8IGlzX2Nvb2tpZV9pZ25vcmVkKHNmLT5jb29raWUpKQorCQlyZXR1cm4gaXNfY29va2llX2lnbm9yZWQoc2YtPmFwcF9jb29raWUpOworCisJcmV0dXJuIDA7Cit9CisKKworLyoqIGNyZWF0ZSBhIG5ldyBzZmlsZSBtYXRjaGluZyB0aGUgY3VycmVudCB0cmFuc2llbnQgcGFyYW1ldGVycyAqLworc3RhdGljIHN0cnVjdCBzZmlsZSAqCitjcmVhdGVfc2ZpbGUodW5zaWduZWQgbG9uZyBoYXNoLCBzdHJ1Y3QgdHJhbnNpZW50IGNvbnN0ICogdHJhbnMsCisgICAgICAgICAgICAgc3RydWN0IGtlcm5lbF9pbWFnZSAqIGtpKQoreworCXNpemVfdCBpOworCXN0cnVjdCBzZmlsZSAqIHNmOworCisJc2YgPSB4bWFsbG9jKHNpemVvZihzdHJ1Y3Qgc2ZpbGUpKTsKKworCXNmLT5oYXNodmFsID0gaGFzaDsKKworCS8qIFRoZSBsb2dpYyBoZXJlOiBpZiB3ZSdyZSBpbiB0aGUga2VybmVsLCB0aGUgY2FjaGVkIGNvb2tpZSBpcworCSAqIG1lYW5pbmdsZXNzICh0aG91Z2ggbm90IHRoZSBhcHBfY29va2llIGlmIHNlcGFyYXRlX2tlcm5lbCkKKwkgKi8KKwlzZi0+Y29va2llID0gdHJhbnMtPmluX2tlcm5lbCA/IElOVkFMSURfQ09PS0lFIDogdHJhbnMtPmNvb2tpZTsKKwlzZi0+YXBwX2Nvb2tpZSA9IElOVkFMSURfQ09PS0lFOworCXNmLT50aWQgPSAocGlkX3QpLTE7CisJc2YtPnRnaWQgPSAocGlkX3QpLTE7CisJc2YtPmNwdSA9IDA7CisJc2YtPmtlcm5lbCA9IGtpOworCXNmLT5hbm9uID0gdHJhbnMtPmFub247CisKKwlmb3IgKGkgPSAwIDsgaSA8IG9wX25yX2NvdW50ZXJzIDsgKytpKQorCQlvZGJfaW5pdCgmc2YtPmZpbGVzW2ldKTsKKworCWlmICh0cmFucy0+ZXh0KQorCQlvcGRfZXh0X3NmaWxlX2NyZWF0ZShzZik7CisJZWxzZQorCQlzZi0+ZXh0X2ZpbGVzID0gTlVMTDsKKworCWZvciAoaSA9IDA7IGkgPCBDR19IQVNIX1NJWkU7ICsraSkKKwkJbGlzdF9pbml0KCZzZi0+Y2dfaGFzaFtpXSk7CisKKwlpZiAoc2VwYXJhdGVfdGhyZWFkKQorCQlzZi0+dGlkID0gdHJhbnMtPnRpZDsKKwlpZiAoc2VwYXJhdGVfdGhyZWFkIHx8IHRyYW5zLT5jb29raWUgPT0gTk9fQ09PS0lFKQorCQlzZi0+dGdpZCA9IHRyYW5zLT50Z2lkOworCisJaWYgKHNlcGFyYXRlX2NwdSkKKwkJc2YtPmNwdSA9IHRyYW5zLT5jcHU7CisKKwlpZiAoc2VwYXJhdGVfa2VybmVsIHx8ICgodHJhbnMtPmFub24gfHwgc2VwYXJhdGVfbGliKSAmJiAha2kpKQorCQlzZi0+YXBwX2Nvb2tpZSA9IHRyYW5zLT5hcHBfY29va2llOworCisJc2YtPmlnbm9yZWQgPSBpc19zZl9pZ25vcmVkKHNmKTsKKworCXNmLT5lbWJlZGRlZF9vZmZzZXQgPSB0cmFucy0+ZW1iZWRkZWRfb2Zmc2V0OworCisJLyogSWYgZW1iZWRkZWRfb2Zmc2V0IGlzIGEgdmFsaWQgdmFsdWUsIGl0IG1lYW5zIHdlJ3JlCisJICogcHJvY2Vzc2luZyBhIENlbGwgQkUgU1BVIHByb2ZpbGU7IGluIHdoaWNoIGNhc2UsIHdlCisJICogd2FudCBzZi0+YXBwX2Nvb2tpZSB0byBob2xkIHRyYW5zLT5hcHBfY29va2llLgorCSAqLworCWlmICh0cmFucy0+ZW1iZWRkZWRfb2Zmc2V0ICE9IFVOVVNFRF9FTUJFRERFRF9PRkZTRVQpCisJCXNmLT5hcHBfY29va2llID0gdHJhbnMtPmFwcF9jb29raWU7CisJcmV0dXJuIHNmOworfQorCisKK3N0cnVjdCBzZmlsZSAqIHNmaWxlX2ZpbmQoc3RydWN0IHRyYW5zaWVudCBjb25zdCAqIHRyYW5zKQoreworCXN0cnVjdCBzZmlsZSAqIHNmOworCXN0cnVjdCBsaXN0X2hlYWQgKiBwb3M7CisJc3RydWN0IGtlcm5lbF9pbWFnZSAqIGtpID0gTlVMTDsKKwl1bnNpZ25lZCBsb25nIGhhc2g7CisKKwlpZiAodHJhbnMtPnRyYWNpbmcgIT0gVFJBQ0lOR19PTikgeworCQlvcGRfc3RhdHNbT1BEX1NBTVBMRVNdKys7CisJCW9wZF9zdGF0c1t0cmFucy0+aW5fa2VybmVsID09IDEgPyBPUERfS0VSTkVMIDogT1BEX1BST0NFU1NdKys7CisJfQorCisJLyogVGhlcmUgaXMgYSBzbWFsbCByYWNlIHdoZXJlIHRoaXMgKmNhbiogaGFwcGVuLCBzZWUKKwkgKiBjYWxsZXIgb2YgY3B1X2J1ZmZlcl9yZXNldCgpIGluIHRoZSBrZXJuZWwKKwkgKi8KKwlpZiAodHJhbnMtPmluX2tlcm5lbCA9PSAtMSkgeworCQl2ZXJicHJpbnRmKHZzYW1wbGVzLCAiTG9zaW5nIHNhbXBsZSBhdCAweCVsbHggb2YgdW5rbm93biBwcm92ZW5hbmNlLlxuIiwKKwkJICAgICAgICAgICB0cmFucy0+cGMpOworCQlvcGRfc3RhdHNbT1BEX05PX0NUWF0rKzsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJLyogd2UgbWlnaHQgbmVlZCBhIGtlcm5lbCBpbWFnZSBzdGFydC9lbmQgdG8gaGFzaCBvbiAqLworCWlmICh0cmFucy0+aW5fa2VybmVsKSB7CisJCWtpID0gZmluZF9rZXJuZWxfaW1hZ2UodHJhbnMpOworCQlpZiAoIWtpKSB7CisJCQl2ZXJicHJpbnRmKHZzYW1wbGVzLCAiTG9zdCBrZXJuZWwgc2FtcGxlICVsbHhcbiIsIHRyYW5zLT5wYyk7CisJCQlvcGRfc3RhdHNbT1BEX0xPU1RfS0VSTkVMXSsrOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwl9IGVsc2UgaWYgKHRyYW5zLT5jb29raWUgPT0gTk9fQ09PS0lFICYmICF0cmFucy0+YW5vbikgeworCQlpZiAodnNhbXBsZXMpIHsKKwkJCWNoYXIgY29uc3QgKiBhcHAgPSB2ZXJib3NlX2Nvb2tpZSh0cmFucy0+YXBwX2Nvb2tpZSk7CisJCQlwcmludGYoIk5vIGFub24gbWFwIGZvciBwYyAlbGx4LCBhcHAgJXMuXG4iLAorCQkJICAgICAgIHRyYW5zLT5wYywgYXBwKTsKKwkJfQorCQlvcGRfc3RhdHNbT1BEX0xPU1RfTk9fTUFQUElOR10rKzsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJaGFzaCA9IHNmaWxlX2hhc2godHJhbnMsIGtpKTsKKwlsaXN0X2Zvcl9lYWNoKHBvcywgJmhhc2hlc1toYXNoXSkgeworCQlzZiA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3Qgc2ZpbGUsIGhhc2gpOworCQlpZiAodHJhbnNfbWF0Y2godHJhbnMsIHNmLCBraSkpIHsKKwkJCXNmaWxlX2dldChzZik7CisJCQlnb3RvIGxydTsKKwkJfQorCX0KKworCXNmID0gY3JlYXRlX3NmaWxlKGhhc2gsIHRyYW5zLCBraSk7CisJbGlzdF9hZGQoJnNmLT5oYXNoLCAmaGFzaGVzW2hhc2hdKTsKKworbHJ1OgorCXNmaWxlX3B1dChzZik7CisJcmV0dXJuIHNmOworfQorCisKK3ZvaWQgc2ZpbGVfZHVwKHN0cnVjdCBzZmlsZSAqIHRvLCBzdHJ1Y3Qgc2ZpbGUgKiBmcm9tKQoreworCXNpemVfdCBpOworCisJbWVtY3B5KHRvLCBmcm9tLCBzaXplb2YgKHN0cnVjdCBzZmlsZSkpOworCisJZm9yIChpID0gMCA7IGkgPCBvcF9ucl9jb3VudGVycyA7ICsraSkKKwkJb2RiX2luaXQoJnRvLT5maWxlc1tpXSk7CisKKwlvcGRfZXh0X3NmaWxlX2R1cCh0bywgZnJvbSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQ0dfSEFTSF9TSVpFOyArK2kpCisJCWxpc3RfaW5pdCgmdG8tPmNnX2hhc2hbaV0pOworCisJbGlzdF9pbml0KCZ0by0+aGFzaCk7CisJbGlzdF9pbml0KCZ0by0+bHJ1KTsKK30KKworCitzdGF0aWMgb2RiX3QgKiBnZXRfZmlsZShzdHJ1Y3QgdHJhbnNpZW50IGNvbnN0ICogdHJhbnMsIGludCBpc19jZykKK3sKKwlzdHJ1Y3Qgc2ZpbGUgKiBzZiA9IHRyYW5zLT5jdXJyZW50OworCXN0cnVjdCBzZmlsZSAqIGxhc3QgPSB0cmFucy0+bGFzdDsKKwlzdHJ1Y3QgY2dfZW50cnkgKiBjZzsKKwlzdHJ1Y3QgbGlzdF9oZWFkICogcG9zOworCXVuc2lnbmVkIGxvbmcgaGFzaDsKKwlvZGJfdCAqIGZpbGU7CisKKwlpZiAoKHRyYW5zLT5leHQpICE9IE5VTEwpCisJCXJldHVybiBvcGRfZXh0X3NmaWxlX2dldCh0cmFucywgaXNfY2cpOworCisJaWYgKHRyYW5zLT5ldmVudCA+PSBvcF9ucl9jb3VudGVycykgeworCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiBJbnZhbGlkIGNvdW50ZXIgJWx1XG4iLCBfX0ZVTkNUSU9OX18sCisJCQl0cmFucy0+ZXZlbnQpOworCQlhYm9ydCgpOworCX0KKworCWZpbGUgPSAmc2YtPmZpbGVzW3RyYW5zLT5ldmVudF07CisKKwlpZiAoIWlzX2NnKQorCQlnb3RvIG9wZW47CisKKwloYXNoID0gbGFzdC0+aGFzaHZhbCAmIChDR19IQVNIX1NJWkUgLSAxKTsKKworCS8qIE5lZWQgdG8gbG9vayBmb3IgdGhlIHJpZ2h0ICd0bycuIFNpbmNlIHdlJ3JlIGxvb2tpbmcgZm9yCisJICogJ2xhc3QnLCB3ZSB1c2UgaXRzIGhhc2guCisJICovCisJbGlzdF9mb3JfZWFjaChwb3MsICZzZi0+Y2dfaGFzaFtoYXNoXSkgeworCQljZyA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3QgY2dfZW50cnksIGhhc2gpOworCQlpZiAoc2ZpbGVfZXF1YWwobGFzdCwgJmNnLT50bykpIHsKKwkJCWZpbGUgPSAmY2ctPnRvLmZpbGVzW3RyYW5zLT5ldmVudF07CisJCQlnb3RvIG9wZW47CisJCX0KKwl9CisKKwljZyA9IHhtYWxsb2Moc2l6ZW9mKHN0cnVjdCBjZ19lbnRyeSkpOworCXNmaWxlX2R1cCgmY2ctPnRvLCBsYXN0KTsKKwlsaXN0X2FkZCgmY2ctPmhhc2gsICZzZi0+Y2dfaGFzaFtoYXNoXSk7CisJZmlsZSA9ICZjZy0+dG8uZmlsZXNbdHJhbnMtPmV2ZW50XTsKKworb3BlbjoKKwlpZiAoIW9kYl9vcGVuX2NvdW50KGZpbGUpKQorCQlvcGRfb3Blbl9zYW1wbGVfZmlsZShmaWxlLCBsYXN0LCBzZiwgdHJhbnMtPmV2ZW50LCBpc19jZyk7CisKKwkvKiBFcnJvciBpcyBsb2dnZWQgYnkgb3BkX29wZW5fc2FtcGxlX2ZpbGUgKi8KKwlpZiAoIW9kYl9vcGVuX2NvdW50KGZpbGUpKQorCQlyZXR1cm4gTlVMTDsKKworCXJldHVybiBmaWxlOworfQorCisKK3N0YXRpYyB2b2lkIHZlcmJvc2VfcHJpbnRfc2FtcGxlKHN0cnVjdCBzZmlsZSAqIHNmLCB2bWFfdCBwYywgdWludCBjb3VudGVyKQoreworCWNoYXIgY29uc3QgKiBhcHAgPSB2ZXJib3NlX2Nvb2tpZShzZi0+YXBwX2Nvb2tpZSk7CisJcHJpbnRmKCIweCVsbHgoJXUpOiAiLCBwYywgY291bnRlcik7CisJaWYgKHNmLT5hbm9uKSB7CisJCXByaW50ZigiYW5vbiAodGdpZCAldSwgMHglbGx4LTB4JWxseCksICIsCisJCSAgICAgICAodW5zaWduZWQgaW50KXNmLT5hbm9uLT50Z2lkLAorCQkgICAgICAgc2YtPmFub24tPnN0YXJ0LCBzZi0+YW5vbi0+ZW5kKTsKKwl9IGVsc2UgaWYgKHNmLT5rZXJuZWwpIHsKKwkJcHJpbnRmKCJrZXJuIChuYW1lICVzLCAweCVsbHgtMHglbGx4KSwgIiwgc2YtPmtlcm5lbC0+bmFtZSwKKwkJICAgICAgIHNmLT5rZXJuZWwtPnN0YXJ0LCBzZi0+a2VybmVsLT5lbmQpOworCX0gZWxzZSB7CisJCXByaW50ZigiJXMoJWxseCksICIsIHZlcmJvc2VfY29va2llKHNmLT5jb29raWUpLCAgc2YtPmNvb2tpZSk7CisJfQorCXByaW50ZigiYXBwICVzKCVsbHgpIiwgYXBwLCBzZi0+YXBwX2Nvb2tpZSk7Cit9CisKKworc3RhdGljIHZvaWQgdmVyYm9zZV9zYW1wbGUoc3RydWN0IHRyYW5zaWVudCBjb25zdCAqIHRyYW5zLCB2bWFfdCBwYykKK3sKKwlwcmludGYoIlNhbXBsZSAiKTsKKwl2ZXJib3NlX3ByaW50X3NhbXBsZSh0cmFucy0+Y3VycmVudCwgcGMsIHRyYW5zLT5ldmVudCk7CisJcHJpbnRmKCJcbiIpOworfQorCisKK3N0YXRpYyB2b2lkCit2ZXJib3NlX2FyYyhzdHJ1Y3QgdHJhbnNpZW50IGNvbnN0ICogdHJhbnMsIHZtYV90IGZyb20sIHZtYV90IHRvKQoreworCXByaW50ZigiQXJjICIpOworCXZlcmJvc2VfcHJpbnRfc2FtcGxlKHRyYW5zLT5jdXJyZW50LCBmcm9tLCB0cmFucy0+ZXZlbnQpOworCXByaW50ZigiIC0+IDB4JWxseCIsIHRvKTsKKwlwcmludGYoIlxuIik7Cit9CisKKworc3RhdGljIHZvaWQgc2ZpbGVfbG9nX2FyYyhzdHJ1Y3QgdHJhbnNpZW50IGNvbnN0ICogdHJhbnMpCit7CisJaW50IGVycjsKKwl2bWFfdCBmcm9tID0gdHJhbnMtPnBjOworCXZtYV90IHRvID0gdHJhbnMtPmxhc3RfcGM7CisJdWludDY0X3Qga2V5OworCW9kYl90ICogZmlsZTsKKworCWZpbGUgPSBnZXRfZmlsZSh0cmFucywgMSk7CisKKwkvKiBhYnNvbHV0ZSB2YWx1ZSAtPiBvZmZzZXQgKi8KKwlpZiAodHJhbnMtPmN1cnJlbnQtPmtlcm5lbCkKKwkJZnJvbSAtPSB0cmFucy0+Y3VycmVudC0+a2VybmVsLT5zdGFydDsKKworCWlmICh0cmFucy0+bGFzdC0+a2VybmVsKQorCQl0byAtPSB0cmFucy0+bGFzdC0+a2VybmVsLT5zdGFydDsKKworCWlmICh0cmFucy0+Y3VycmVudC0+YW5vbikKKwkJZnJvbSAtPSB0cmFucy0+Y3VycmVudC0+YW5vbi0+c3RhcnQ7CisKKwlpZiAodHJhbnMtPmxhc3QtPmFub24pCisJCXRvIC09IHRyYW5zLT5sYXN0LT5hbm9uLT5zdGFydDsKKworCWlmICh2YXJjcykKKwkJdmVyYm9zZV9hcmModHJhbnMsIGZyb20sIHRvKTsKKworCWlmICghZmlsZSkgeworCQlvcGRfc3RhdHNbT1BEX0xPU1RfU0FNUExFRklMRV0rKzsKKwkJcmV0dXJuOworCX0KKworCS8qIFBvc3NpYmxlIG5hcnJvd2luZ3MgdG8gMzItYml0IHZhbHVlIG9ubHkuICovCisJa2V5ID0gdG8gJiAoMHhmZmZmZmZmZik7CisJa2V5IHw9ICgodWludDY0X3QpZnJvbSkgPDwgMzI7CisKKwllcnIgPSBvZGJfdXBkYXRlX25vZGUoZmlsZSwga2V5KTsKKwlpZiAoZXJyKSB7CisJCWZwcmludGYoc3RkZXJyLCAiJXM6ICVzXG4iLCBfX0ZVTkNUSU9OX18sIHN0cmVycm9yKGVycikpOworCQlhYm9ydCgpOworCX0KK30KKworCit2b2lkIHNmaWxlX2xvZ19zYW1wbGUoc3RydWN0IHRyYW5zaWVudCBjb25zdCAqIHRyYW5zKQoreworCXNmaWxlX2xvZ19zYW1wbGVfY291bnQodHJhbnMsIDEpOworfQorCisKK3ZvaWQgc2ZpbGVfbG9nX3NhbXBsZV9jb3VudChzdHJ1Y3QgdHJhbnNpZW50IGNvbnN0ICogdHJhbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBpbnQgY291bnQpCit7CisJaW50IGVycjsKKwl2bWFfdCBwYyA9IHRyYW5zLT5wYzsKKwlvZGJfdCAqIGZpbGU7CisKKwlpZiAodHJhbnMtPnRyYWNpbmcgPT0gVFJBQ0lOR19PTikgeworCQkvKiBjYW4gaGFwcGVuIGlmIGtlcm5lbCBzYW1wbGUgZmFsbHMgdGhyb3VnaCB0aGUgY3JhY2tzLAorCQkgKiBzZWUgb3BkX3B1dF9zYW1wbGUoKSAqLworCQlpZiAodHJhbnMtPmxhc3QpCisJCQlzZmlsZV9sb2dfYXJjKHRyYW5zKTsKKwkJcmV0dXJuOworCX0KKworCWZpbGUgPSBnZXRfZmlsZSh0cmFucywgMCk7CisKKwkvKiBhYnNvbHV0ZSB2YWx1ZSAtPiBvZmZzZXQgKi8KKwlpZiAodHJhbnMtPmN1cnJlbnQtPmtlcm5lbCkKKwkJcGMgLT0gdHJhbnMtPmN1cnJlbnQtPmtlcm5lbC0+c3RhcnQ7CisKKwlpZiAodHJhbnMtPmN1cnJlbnQtPmFub24pCisJCXBjIC09IHRyYW5zLT5jdXJyZW50LT5hbm9uLT5zdGFydDsKKworCWlmICh2c2FtcGxlcykKKwkJdmVyYm9zZV9zYW1wbGUodHJhbnMsIHBjKTsKKworCWlmICghZmlsZSkgeworCQlvcGRfc3RhdHNbT1BEX0xPU1RfU0FNUExFRklMRV0rKzsKKwkJcmV0dXJuOworCX0KKworCWVyciA9IG9kYl91cGRhdGVfbm9kZV93aXRoX29mZnNldChmaWxlLAorCQkJCQkgIChvZGJfa2V5X3QpcGMsCisJCQkJCSAgY291bnQpOworCWlmIChlcnIpIHsKKwkJZnByaW50ZihzdGRlcnIsICIlczogJXNcbiIsIF9fRlVOQ1RJT05fXywgc3RyZXJyb3IoZXJyKSk7CisJCWFib3J0KCk7CisJfQorfQorCisKK3N0YXRpYyBpbnQgY2xvc2Vfc2ZpbGUoc3RydWN0IHNmaWxlICogc2YsIHZvaWQgKiBkYXRhIF9fYXR0cmlidXRlX18oKHVudXNlZCkpKQoreworCXNpemVfdCBpOworCisJLyogaXQncyBPSyB0byBjbG9zZSBhIG5vbi1vcGVuIG9kYiBmaWxlICovCisJZm9yIChpID0gMDsgaSA8IG9wX25yX2NvdW50ZXJzOyArK2kpCisJCW9kYl9jbG9zZSgmc2YtPmZpbGVzW2ldKTsKKworCW9wZF9leHRfc2ZpbGVfY2xvc2Uoc2YpOworCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIHZvaWQga2lsbF9zZmlsZShzdHJ1Y3Qgc2ZpbGUgKiBzZikKK3sKKwljbG9zZV9zZmlsZShzZiwgTlVMTCk7CisJbGlzdF9kZWwoJnNmLT5oYXNoKTsKKwlsaXN0X2RlbCgmc2YtPmxydSk7Cit9CisKKworc3RhdGljIGludCBzeW5jX3NmaWxlKHN0cnVjdCBzZmlsZSAqIHNmLCB2b2lkICogZGF0YSBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKSkKK3sKKwlzaXplX3QgaTsKKworCWZvciAoaSA9IDA7IGkgPCBvcF9ucl9jb3VudGVyczsgKytpKQorCQlvZGJfc3luYygmc2YtPmZpbGVzW2ldKTsKKworCW9wZF9leHRfc2ZpbGVfc3luYyhzZik7CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IGlzX3NmaWxlX2tlcm5lbChzdHJ1Y3Qgc2ZpbGUgKiBzZiwgdm9pZCAqIGRhdGEgX19hdHRyaWJ1dGVfXygodW51c2VkKSkpCit7CisJcmV0dXJuICEhc2YtPmtlcm5lbDsKK30KKworCitzdGF0aWMgaW50IGlzX3NmaWxlX2Fub24oc3RydWN0IHNmaWxlICogc2YsIHZvaWQgKiBkYXRhKQoreworCXJldHVybiBzZi0+YW5vbiA9PSBkYXRhOworfQorCisKK3R5cGVkZWYgaW50ICgqc2ZpbGVfZnVuYykoc3RydWN0IHNmaWxlICosIHZvaWQgKik7CisKK3N0YXRpYyB2b2lkCitmb3Jfb25lX3NmaWxlKHN0cnVjdCBzZmlsZSAqIHNmLCBzZmlsZV9mdW5jIGZ1bmMsIHZvaWQgKiBkYXRhKQoreworCXNpemVfdCBpOworCWludCBmcmVlX3NmID0gZnVuYyhzZiwgZGF0YSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQ0dfSEFTSF9TSVpFOyArK2kpIHsKKwkJc3RydWN0IGxpc3RfaGVhZCAqIHBvczsKKwkJc3RydWN0IGxpc3RfaGVhZCAqIHBvczI7CisJCWxpc3RfZm9yX2VhY2hfc2FmZShwb3MsIHBvczIsICZzZi0+Y2dfaGFzaFtpXSkgeworCQkJc3RydWN0IGNnX2VudHJ5ICogY2cgPQorCQkJCWxpc3RfZW50cnkocG9zLCBzdHJ1Y3QgY2dfZW50cnksIGhhc2gpOworCQkJaWYgKGZyZWVfc2YgfHwgZnVuYygmY2ctPnRvLCBkYXRhKSkgeworCQkJCWtpbGxfc2ZpbGUoJmNnLT50byk7CisJCQkJbGlzdF9kZWwoJmNnLT5oYXNoKTsKKwkJCQlmcmVlKGNnKTsKKwkJCX0KKwkJfQorCX0KKworCWlmIChmcmVlX3NmKSB7CisJCWtpbGxfc2ZpbGUoc2YpOworCQlmcmVlKHNmKTsKKwl9Cit9CisKKworc3RhdGljIHZvaWQgZm9yX2VhY2hfc2ZpbGUoc2ZpbGVfZnVuYyBmdW5jLCB2b2lkICogZGF0YSkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICogcG9zOworCXN0cnVjdCBsaXN0X2hlYWQgKiBwb3MyOworCisJbGlzdF9mb3JfZWFjaF9zYWZlKHBvcywgcG9zMiwgJmxydV9saXN0KSB7CisJCXN0cnVjdCBzZmlsZSAqIHNmID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCBzZmlsZSwgbHJ1KTsKKwkJZm9yX29uZV9zZmlsZShzZiwgZnVuYywgZGF0YSk7CisJfQorfQorCisKK3ZvaWQgc2ZpbGVfY2xlYXJfa2VybmVsKHZvaWQpCit7CisJZm9yX2VhY2hfc2ZpbGUoaXNfc2ZpbGVfa2VybmVsLCBOVUxMKTsKK30KKworCit2b2lkIHNmaWxlX2NsZWFyX2Fub24oc3RydWN0IGFub25fbWFwcGluZyAqIGFub24pCit7CisJZm9yX2VhY2hfc2ZpbGUoaXNfc2ZpbGVfYW5vbiwgYW5vbik7Cit9CisKKwordm9pZCBzZmlsZV9zeW5jX2ZpbGVzKHZvaWQpCit7CisJZm9yX2VhY2hfc2ZpbGUoc3luY19zZmlsZSwgTlVMTCk7Cit9CisKKwordm9pZCBzZmlsZV9jbG9zZV9maWxlcyh2b2lkKQoreworCWZvcl9lYWNoX3NmaWxlKGNsb3NlX3NmaWxlLCBOVUxMKTsKK30KKworCitzdGF0aWMgaW50IGFsd2F5c190cnVlKHZvaWQpCit7CisJcmV0dXJuIDE7Cit9CisKKworI2RlZmluZSBMUlVfQU1PVU5UIDI1NgorCisvKgorICogQ2xlYXIgb3V0IG9sZGVyIHNmaWxlcy4gTm90ZSB0aGUgY3VycmVudCBzZmlsZXMgd2UncmUgdXNpbmcKKyAqIHdpbGwgbm90IGJlIHByZXNlbnQgaW4gdGhpcyBsaXN0LCBkdWUgdG8gc2ZpbGVfZ2V0L3B1dCgpIHBhaXJzCisgKiBhcm91bmQgdGhlIGNhbGxlciBvZiB0aGlzLgorICovCitpbnQgc2ZpbGVfbHJ1X2NsZWFyKHZvaWQpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqIHBvczsKKwlzdHJ1Y3QgbGlzdF9oZWFkICogcG9zMjsKKwlpbnQgYW1vdW50ID0gTFJVX0FNT1VOVDsKKworCWlmIChsaXN0X2VtcHR5KCZscnVfbGlzdCkpCisJCXJldHVybiAxOworCisJbGlzdF9mb3JfZWFjaF9zYWZlKHBvcywgcG9zMiwgJmxydV9saXN0KSB7CisJCXN0cnVjdCBzZmlsZSAqIHNmOworCQlpZiAoIS0tYW1vdW50KQorCQkJYnJlYWs7CisJCXNmID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCBzZmlsZSwgbHJ1KTsKKwkJZm9yX29uZV9zZmlsZShzZiwgKHNmaWxlX2Z1bmMpYWx3YXlzX3RydWUsIE5VTEwpOworCX0KKworCXJldHVybiAwOworfQorCisKK3ZvaWQgc2ZpbGVfZ2V0KHN0cnVjdCBzZmlsZSAqIHNmKQoreworCWlmIChzZikKKwkJbGlzdF9kZWwoJnNmLT5scnUpOworfQorCisKK3ZvaWQgc2ZpbGVfcHV0KHN0cnVjdCBzZmlsZSAqIHNmKQoreworCWlmIChzZikKKwkJbGlzdF9hZGRfdGFpbCgmc2YtPmxydSwgJmxydV9saXN0KTsKK30KKworCit2b2lkIHNmaWxlX2luaXQodm9pZCkKK3sKKwlzaXplX3QgaSA9IDA7CisKKwlmb3IgKDsgaSA8IEhBU0hfU0laRTsgKytpKQorCQlsaXN0X2luaXQoJmhhc2hlc1tpXSk7Cit9CmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9kYWVtb24vb3BkX3NmaWxlLmggYi9vcHJvZmlsZS0wLjkuNy9kYWVtb24vb3BkX3NmaWxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzZlNWU2MwotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2RhZW1vbi9vcGRfc2ZpbGUuaApAQCAtMCwwICsxLDExOSBAQAorLyoqCisgKiBAZmlsZSBkYWVtb24vb3BkX3NmaWxlLmgKKyAqIE1hbmFnZW1lbnQgb2Ygc2FtcGxlIGZpbGVzCisgKgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMiBPUHJvZmlsZSBhdXRob3JzCisgKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORworICoKKyAqIEBhdXRob3IgSm9obiBMZXZvbgorICogQGF1dGhvciBQaGlsaXBwZSBFbGllCisgKi8KKworI2lmbmRlZiBPUERfU0ZJTEVfSAorI2RlZmluZSBPUERfU0ZJTEVfSAorCisjaW5jbHVkZSAib3BkX2Nvb2tpZS5oIgorCisjaW5jbHVkZSAib2RiLmgiCisjaW5jbHVkZSAib3BfaHdfY29uZmlnLmgiCisjaW5jbHVkZSAib3BfdHlwZXMuaCIKKyNpbmNsdWRlICJvcF9saXN0LmgiCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKworc3RydWN0IGtlcm5lbF9pbWFnZTsKK3N0cnVjdCB0cmFuc2llbnQ7CisKKyNkZWZpbmUgQ0dfSEFTSF9TSVpFIDE2CisjZGVmaW5lIFVOVVNFRF9FTUJFRERFRF9PRkZTRVQgfjBMTFUKKworLyoqCisgKiBFYWNoIHNldCBvZiBzYW1wbGUgZmlsZXMgKHdoZXJlIGEgc2V0IGlzIG92ZXIgdGhlIHBoeXNpY2FsIGNvdW50ZXIKKyAqIHR5cGVzKSB3aWxsIGhhdmUgb25lIG9mIHRoZXNlIGZvciBpdC4gV2UgbWF0Y2ggYWdhaW5zdCB0aGUKKyAqIGRlc2NyaXB0aW9ucyBoZXJlIHRvIGZpbmQgd2hpY2ggc2FtcGxlIERCIGZpbGUgd2UgbmVlZCB0byBtb2RpZnkuCisgKgorICogY2cgZmlsZXMgYXJlIHN0b3JlZCBpbiB0aGUgaGFzaC4KKyAqLworc3RydWN0IHNmaWxlIHsKKwkvKiogaGFzaCB2YWx1ZSBmb3IgdGhpcyBzZmlsZSAqLworCXVuc2lnbmVkIGxvbmcgaGFzaHZhbDsKKwkvKiogY29va2llIHZhbHVlIGZvciB0aGUgYmluYXJ5IHByb2ZpbGVkICovCisJY29va2llX3QgY29va2llOworCS8qKiBjb29raWUgdmFsdWUgZm9yIHRoZSBhcHBsaWNhdGlvbiBvd25lciwgSU5WQUxJRF9DT09LSUUgaWYgbm90IHNldCAqLworCWNvb2tpZV90IGFwcF9jb29raWU7CisJLyoqIHRocmVhZCBJRCwgLTEgaWYgbm90IHNldCAqLworCXBpZF90IHRpZDsKKwkvKiogdGhyZWFkIGdyb3VwIElELCAtMSBpZiBub3Qgc2V0ICovCisJcGlkX3QgdGdpZDsKKwkvKiogQ1BVIG51bWJlciAqLworCXVuc2lnbmVkIGludCBjcHU7CisJLyoqIGtlcm5lbCBpbWFnZSBpZiBhcHBsaWNhYmxlICovCisJc3RydWN0IGtlcm5lbF9pbWFnZSAqIGtlcm5lbDsKKwkvKiogYW5vbnltb3VzIG1hcHBpbmcgKi8KKwlzdHJ1Y3QgYW5vbl9tYXBwaW5nICogYW5vbjsKKwkvKiogZW1iZWRkZWQgb2Zmc2V0IGZvciBDZWxsIEJFIFNQVSAqLworCXVpbnQ2NF90IGVtYmVkZGVkX29mZnNldDsKKworCS8qKiBoYXNoIHRhYmxlIGxpbmsgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGhhc2g7CisJLyoqIGxydSBsaXN0ICovCisJc3RydWN0IGxpc3RfaGVhZCBscnU7CisJLyoqIHRydWUgaWYgdGhpcyBmaWxlIHNob3VsZCBiZSBpZ25vcmVkIGluIHByb2ZpbGVzICovCisJaW50IGlnbm9yZWQ7CisJLyoqIG9wZW5lZCBzYW1wbGUgZmlsZXMgKi8KKwlvZGJfdCBmaWxlc1tPUF9NQVhfQ09VTlRFUlNdOworCS8qKiBleHRlbmRlZCBzYW1wbGUgZmlsZXMgKi8KKwlvZGJfdCAqIGV4dF9maWxlczsKKwkvKiogaGFzaCB0YWJsZSBvZiBvcGVuZWQgY2cgc2FtcGxlIGZpbGVzICovCisJc3RydWN0IGxpc3RfaGVhZCBjZ19oYXNoW0NHX0hBU0hfU0laRV07Cit9OworCisvKiogYSBjYWxsLWdyYXBoIGVudHJ5ICovCitzdHJ1Y3QgY2dfZW50cnkgeworCS8qKiB3aGVyZSBhcmMgaXMgdG8gKi8KKwlzdHJ1Y3Qgc2ZpbGUgdG87CisJLyoqIG5leHQgaW4gdGhlIGhhc2ggc2xvdCAqLworCXN0cnVjdCBsaXN0X2hlYWQgaGFzaDsKK307CisKKy8qKiBjbGVhciBhbnkgc2ZpbGVzIHRoYXQgYXJlIGZvciB0aGUga2VybmVsICovCit2b2lkIHNmaWxlX2NsZWFyX2tlcm5lbCh2b2lkKTsKKworc3RydWN0IGFub25fbWFwcGluZzsKKworLyoqIGNsZWFyIGFueSBzZmlsZXMgZm9yIHRoZSBnaXZlbiBhbm9uIG1hcHBpbmcgKi8KK3ZvaWQgc2ZpbGVfY2xlYXJfYW5vbihzdHJ1Y3QgYW5vbl9tYXBwaW5nICopOworCisvKiogc3luYyBzYW1wbGUgZmlsZXMgKi8KK3ZvaWQgc2ZpbGVfc3luY19maWxlcyh2b2lkKTsKKworLyoqIGNsb3NlIHNhbXBsZSBmaWxlcyAqLwordm9pZCBzZmlsZV9jbG9zZV9maWxlcyh2b2lkKTsKKworLyoqIGNsZWFyIG91dCBhIGNlcnRhaW4gYW1vdW50IG9mIExSVSBlbnRyaWVzCisgKiByZXR1cm4gbm9uLXplcm8gaWYgdGhlIGxydSBpcyBhbHJlYWR5IGVtcHR5ICovCitpbnQgc2ZpbGVfbHJ1X2NsZWFyKHZvaWQpOworCisvKiogcmVtb3ZlIGEgc2ZpbGUgZnJvbSB0aGUgbHJ1IGxpc3QsIHByb3RlY3RpbmcgaXQgZnJvbSBzZmlsZV9scnVfY2xlYXIoKSAqLwordm9pZCBzZmlsZV9nZXQoc3RydWN0IHNmaWxlICogc2YpOworCisvKiogYWRkIHRoaXMgc2ZpbGUgdG8gbHJ1IGxpc3QgKi8KK3ZvaWQgc2ZpbGVfcHV0KHN0cnVjdCBzZmlsZSAqIHNmKTsKKworLyoqCisgKiBGaW5kIHRoZSBzZmlsZSBmb3IgdGhlIGN1cnJlbnQgcGFyYW1ldGVycy4gTm90ZSB0aGF0IGlzIHJlcXVpcmVkCisgKiB0aGF0IHRoZSBQQyB2YWx1ZSBiZSBzZXQgYXBwcm9wcmlhdGVseSAobmVlZGVkIGZvciBrZXJuZWwgaW1hZ2VzKQorICovCitzdHJ1Y3Qgc2ZpbGUgKiBzZmlsZV9maW5kKHN0cnVjdCB0cmFuc2llbnQgY29uc3QgKiB0cmFucyk7CisKKy8qKiBMb2cgdGhlIHNhbXBsZSBpbiBhIHByZXZpb3VzbHkgbG9jYXRlZCBzZmlsZS4gKi8KK3ZvaWQgc2ZpbGVfbG9nX3NhbXBsZShzdHJ1Y3QgdHJhbnNpZW50IGNvbnN0ICogdHJhbnMpOworCisvKiogTG9nIHRoZSBldmVudC9jeWNsZSBjb3VudCBpbiBhIHByZXZpb3VzbHkgbG9jYXRlZCBzZmlsZSAqLwordm9pZCBzZmlsZV9sb2dfc2FtcGxlX2NvdW50KHN0cnVjdCB0cmFuc2llbnQgY29uc3QgKiB0cmFucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGludCBjb3VudCk7CisKKy8qKiBpbml0aWFsaXNlIGhhc2hlcyAqLwordm9pZCBzZmlsZV9pbml0KHZvaWQpOworCisjZW5kaWYgLyogT1BEX1NGSUxFX0ggKi8KZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2RhZW1vbi9vcGRfc3B1LmMgYi9vcHJvZmlsZS0wLjkuNy9kYWVtb24vb3BkX3NwdS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyYTJjMmIKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9kYWVtb24vb3BkX3NwdS5jCkBAIC0wLDAgKzEsMTc2IEBACisvKioKKyAqIEBmaWxlIGRhZW1vbi9vcGRfc3B1LmMKKyAqIFByb2Nlc3NpbmcgdGhlIHNhbXBsZSBidWZmZXIgZm9yIENlbGwgQkUgU1BVIHByb2ZpbGUKKyAqCisgKiBAcmVtYXJrIENvcHlyaWdodCAyMDA3IE9Qcm9maWxlIGF1dGhvcnMKKyAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCisgKgorICogQGF1dGhvciBNYXluYXJkIEpvaG5zb24KKyAqIChDKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDcKKyAqLworCisjaW5jbHVkZSAib3BkX2ludGVyZmFjZS5oIgorI2luY2x1ZGUgIm9wZF9wcmludGYuaCIKKyNpbmNsdWRlICJvcGRfc2ZpbGUuaCIKKyNpbmNsdWRlICJvcGRfc3RhdHMuaCIKKyNpbmNsdWRlICJvcGRfdHJhbnMuaCIKKyNpbmNsdWRlICJvcF9saWJpYmVydHkuaCIKKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKK3N0cnVjdCBzcHVfY29udGV4dF9pbmZvIHsKKwlwaWRfdCB0aWQ7CisJcGlkX3QgdGdpZDsKKwljb29raWVfdCBhcHBfY29va2llOworCXVpbnQ2NF90IGVtYmVkZGVkX29mZnNldDsKKwljb29raWVfdCBzcHVfY29va2llOworfTsKKworc3RhdGljIHN0cnVjdCBzcHVfY29udGV4dF9pbmZvICogc3B1X2NvbnRleHRfY2FjaGU7CisKKy8qIEZvcndhcmQgZGVjbGFyYXRpb24gKi8KK3N0YXRpYyB2b2lkIHByb2Nlc3Nfc3B1X3NhbXBsZXMoc3RydWN0IHRyYW5zaWVudCAqIHRyYW5zKTsKKwordm9pZCAoKnNwZWNpYWxfcHJvY2Vzc29yKShzdHJ1Y3QgdHJhbnNpZW50ICopOworCisvKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB0aGUgZmlyc3QgdmFsdWUgZm91bmQgaW4gdGhlCisgKiBidWZmZXIgKGFmdGVyIHRoZSBiZWdpbm5pbmcgRVNDQVBFX0NPREUpIGlzIFNQVV9QUk9GSUxJTkdfQ09ERS4KKyAqIE9uY2Ugd2UgZ2V0IGhlcmUsIHRoZSByZXN0IG9mIHRoZSBwcm9jZXNzaW5nIG9mIHRoZSBidWZmZXIgaXMKKyAqIENlbGwtU1BVLXNwZWNpZmljLCBzbyB3ZSBkbyBub3QgbmVlZCB0byByZXR1cm4gdW50aWwgdGhlCisgKiB0cmFucy5idWZmZXIgaXMgZW1wdHkuCisgKi8KK3ZvaWQgY29kZV9zcHVfcHJvZmlsaW5nKHN0cnVjdCB0cmFuc2llbnQgKiB0cmFucykKK3sKKwkvKiBOZXh0IHZhbHVlIGluIGJ1ZmZlciBpcyB0aGUgbnVtYmVyIG9mIFNQVXMuICovCisJdW5zaWduZWQgbG9uZyBsb25nIG51bV9zcHVzID0gcG9wX2J1ZmZlcl92YWx1ZSh0cmFucyk7CisJLyogRnJlZSB0aGUgY2FjaGUgZnJvbSBwcmV2aW91cyBydW4gKi8KKwlmcmVlKHNwdV9jb250ZXh0X2NhY2hlKTsKKwlzcHVfY29udGV4dF9jYWNoZSA9IHhtYWxsb2Moc2l6ZW9mKHN0cnVjdCBzcHVfY29udGV4dF9pbmZvKSAqIG51bV9zcHVzKTsKKwlzcGVjaWFsX3Byb2Nlc3NvciA9IHByb2Nlc3Nfc3B1X3NhbXBsZXM7CisJcHJvY2Vzc19zcHVfc2FtcGxlcyh0cmFucyk7Cit9CisKK3ZvaWQgY29kZV9zcHVfY3R4X3N3aXRjaChzdHJ1Y3QgdHJhbnNpZW50ICogdHJhbnMpCit7CisJY2xlYXJfdHJhbnNfY3VycmVudCh0cmFucyk7CisKKwlpZiAoIWVub3VnaF9yZW1haW5pbmcodHJhbnMsIDYpKSB7CisJCXRyYW5zLT5yZW1haW5pbmcgPSAwOworCQlyZXR1cm47CisJfQorCisJLyogRmlyc3QgdmFsdWUgaW4gdGhlIGJ1ZmZlciBmb3IgYW4gU1BVIGNvbnRleHQgc3dpdGNoIGlzCisJICogdGhlIFNQVSBudW1iZXIuICBGb3IgU1BVIHByb2ZpbGluZywgJ2NwdScgPSAnc3B1Jy4KKwkgKi8KKwl0cmFucy0+Y3B1ID0gcG9wX2J1ZmZlcl92YWx1ZSh0cmFucyk7CisJdHJhbnMtPnRpZCA9IHBvcF9idWZmZXJfdmFsdWUodHJhbnMpOworCXRyYW5zLT50Z2lkID0gcG9wX2J1ZmZlcl92YWx1ZSh0cmFucyk7CisJdHJhbnMtPmFwcF9jb29raWUgPSBwb3BfYnVmZmVyX3ZhbHVlKHRyYW5zKTsKKworCWlmICh2bWlzYykgeworCQljaGFyIGNvbnN0ICogYXBwID0gZmluZF9jb29raWUodHJhbnMtPmFwcF9jb29raWUpOworCQlwcmludGYoIlNQVV9DVFhfU1dJVENIIHRvIHRpZCAlbHUsIHRnaWQgJWx1LCBjb29raWUgJWxseCglcylcbiIsCisJCSAgICAgICAodW5zaWduZWQgbG9uZyl0cmFucy0+dGlkLCAodW5zaWduZWQgbG9uZyl0cmFucy0+dGdpZCwKKwkJICAgICAgIHRyYW5zLT5hcHBfY29va2llLCBhcHAgPyBhcHAgOiAibm9uZSIpOworCX0KKworCS8qIFRoZSB0cmFucy0+Y29va2llIHdpbGwgcG9pbnQgdG8gdGhlIGJpbmFyeSBmaWxlIHdoZXJlIHRoZSBTUFUgRUxGCisJICogY2FuIGJlIGZvdW5kLiAgSWYgdGhlIFNQVSBFTEYgaXMgZW1iZWRkZWQsIGl0IG1heSBiZSBlbWJlZGRlZCBpbgorCSAqIGVpdGhlciB0aGUgZXhlY3V0YWJsZSBhcHBsaWNhdGlvbiBiaW5hcnkgb3IgYSBzaGFyZWQgbGliLiAgSWYgc2hhcmVkCisJICogbGlicmFyeSwgdGhlbiB0cmFucy0+Y29va2llIHdpbGwgZGlmZmVyIGZyb20gdGhlIHByZXZpb3VzbHkgb2J0YWluZWQKKwkgKiB0cmFucy0+YXBwX2Nvb2tpZS4gIEZvciB0aGUgbm9uLWVtYmVkZGVkIGNhc2UsIHRyYW5zLT5jb29raWUgYWx3YXlzCisJICogcG9pbnRzIHRvIGEgc2VwYXJhdGUgYmluYXJ5IGZpbGUuCisJICovCisJdHJhbnMtPmNvb2tpZSA9IHBvcF9idWZmZXJfdmFsdWUodHJhbnMpOworCXRyYW5zLT5lbWJlZGRlZF9vZmZzZXQgPSBwb3BfYnVmZmVyX3ZhbHVlKHRyYW5zKTsKK30KKworCitzdGF0aWMgdm9pZCBjYWNoZV9zcHVfY29udGV4dF9pbmZvKHN0cnVjdCB0cmFuc2llbnQgKiB0cmFucykKK3sKKwlpbnQgaSA9IHRyYW5zLT5jcHU7CisJc3B1X2NvbnRleHRfY2FjaGVbaV0udGlkID0gdHJhbnMtPnRpZDsKKwlzcHVfY29udGV4dF9jYWNoZVtpXS50Z2lkID0gdHJhbnMtPnRnaWQ7CisJc3B1X2NvbnRleHRfY2FjaGVbaV0uYXBwX2Nvb2tpZSA9IHRyYW5zLT5hcHBfY29va2llOworCXNwdV9jb250ZXh0X2NhY2hlW2ldLmVtYmVkZGVkX29mZnNldCA9IHRyYW5zLT5lbWJlZGRlZF9vZmZzZXQ7CisJc3B1X2NvbnRleHRfY2FjaGVbaV0uc3B1X2Nvb2tpZSA9IHRyYW5zLT5jb29raWU7Cit9CisKK3N0YXRpYyB2b2lkIHVwZGF0ZV90cmFuc19mb3Jfc3B1KHN0cnVjdCB0cmFuc2llbnQgKiB0cmFucykKK3sKKwlpbnQgaSA9IHRyYW5zLT5jcHU7CisJdHJhbnMtPnRpZCA9IHNwdV9jb250ZXh0X2NhY2hlW2ldLnRpZDsKKwl0cmFucy0+dGdpZCA9IHNwdV9jb250ZXh0X2NhY2hlW2ldLnRnaWQ7CisJdHJhbnMtPmFwcF9jb29raWUgPSBzcHVfY29udGV4dF9jYWNoZVtpXS5hcHBfY29va2llOworCXRyYW5zLT5lbWJlZGRlZF9vZmZzZXQgPSBzcHVfY29udGV4dF9jYWNoZVtpXS5lbWJlZGRlZF9vZmZzZXQ7CisJdHJhbnMtPmNvb2tpZSA9IHNwdV9jb250ZXh0X2NhY2hlW2ldLnNwdV9jb29raWU7Cit9CisjZGVmaW5lIFNQVV9OVU1fTUFTSyAweEZGRkZGRkZGMDAwMDAwMDBVTEwKKyNkZWZpbmUgU1BVX0NZQ0xFU19DT1VOVEVSIDAKKworc3RhdGljIHZvaWQgb3BkX3B1dF9zcHVfc2FtcGxlCisoc3RydWN0IHRyYW5zaWVudCAqIHRyYW5zLCB1bnNpZ25lZCBsb25nIGxvbmcgcGMpCit7CisJdW5zaWduZWQgbG9uZyBzcHVfbnVtYmVyID0gKHBjICYgU1BVX05VTV9NQVNLKSA+PiAzMjsKKwlpZiAodHJhbnMtPmNwdSAhPSBzcHVfbnVtYmVyKSB7CisJCXRyYW5zLT5jcHUgPSBzcHVfbnVtYmVyOworCSAgICAgICAgY2xlYXJfdHJhbnNfY3VycmVudCh0cmFucyk7CisJCXVwZGF0ZV90cmFuc19mb3Jfc3B1KHRyYW5zKTsKKwl9CisJLyogZ2V0IHRoZSBjdXJyZW50IHNmaWxlIGlmIG5lZWRlZCAqLworCWlmICghdHJhbnMtPmN1cnJlbnQpCisJCXRyYW5zLT5jdXJyZW50ID0gc2ZpbGVfZmluZCh0cmFucyk7CisKKwlpZiAodHJhbnMtPnRyYWNpbmcgIT0gVFJBQ0lOR19PTikKKwkJdHJhbnMtPmV2ZW50ID0gU1BVX0NZQ0xFU19DT1VOVEVSOworCisJdHJhbnMtPnBjID0gKHBjICYgflNQVV9OVU1fTUFTSyk7CisJLyogbG9nIHRoZSBzYW1wbGUgb3IgYXJjICovCisJc2ZpbGVfbG9nX3NhbXBsZSh0cmFucyk7CisKKwkvKiBzd2l0Y2ggdG8gdHJhY2UgbW9kZSAqLworCWlmICh0cmFucy0+dHJhY2luZyA9PSBUUkFDSU5HX1NUQVJUKQorCQl0cmFucy0+dHJhY2luZyA9IFRSQUNJTkdfT047CisKKwl1cGRhdGVfdHJhbnNfbGFzdCh0cmFucyk7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHByb2Nlc3NlcyBTUFUgY29udGV4dCBzd2l0Y2hlcyBhbmQKKyAqIFNQVSBwcm9ncmFtIGNvdW50ZXIgc2FtcGxlcy4gIEFmdGVyIHByb2Nlc3NpbmcgYQorICogY29udGV4dCBzd2l0Y2ggKHZpYSBoYW5kbGVyc1tjb2RlKSksIHdlIGNhY2hlIHRoZQorICogU1BVIGNvbnRleHQgaW5mb3JtYXRpb24gdGhhdCBoYXMgYmVlbiB0ZW1wb3JhcmlseQorICogc3RvcmVkIGluIHRyYW5zLgorICovCitzdGF0aWMgdm9pZCBwcm9jZXNzX3NwdV9zYW1wbGVzKHN0cnVjdCB0cmFuc2llbnQgKiB0cmFucykKK3sKKwl1bnNpZ25lZCBsb25nIGxvbmcgY29kZTsKKwl0cmFucy0+aW5fa2VybmVsID0gMDsKKwl3aGlsZSAodHJhbnMtPnJlbWFpbmluZykgeworCQljb2RlID0gcG9wX2J1ZmZlcl92YWx1ZSh0cmFucyk7CisKKwkJaWYgKCFpc19lc2NhcGVfY29kZShjb2RlKSkgeworCQkJb3BkX3B1dF9zcHVfc2FtcGxlKHRyYW5zLCBjb2RlKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKCF0cmFucy0+cmVtYWluaW5nKSB7CisJCQl2ZXJicHJpbnRmKHZtaXNjLCAiRGFuZ2xpbmcgRVNDQVBFX0NPREUuXG4iKTsKKwkJCW9wZF9zdGF0c1tPUERfREFOR0xJTkdfQ09ERV0rKzsKKwkJCWJyZWFrOworCQl9CisKKwkJLyogc3RhcnRlZCB3aXRoIEVTQ0FQRV9DT0RFLCBuZXh0IGlzIHR5cGUgKi8KKwkJY29kZSA9IHBvcF9idWZmZXJfdmFsdWUodHJhbnMpOworCisJCWlmIChjb2RlID49IExBU1RfQ09ERSkgeworCQkJZnByaW50ZihzdGRlcnIsICJVbmtub3duIGNvZGUgJWxsdVxuIiwgY29kZSk7CisJCQlhYm9ydCgpOworCQl9CisKKwkJaGFuZGxlcnNbY29kZV0odHJhbnMpOworCQljYWNoZV9zcHVfY29udGV4dF9pbmZvKHRyYW5zKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9kYWVtb24vb3BkX3N0YXRzLmMgYi9vcHJvZmlsZS0wLjkuNy9kYWVtb24vb3BkX3N0YXRzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTdhZjcyYgotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2RhZW1vbi9vcGRfc3RhdHMuYwpAQCAtMCwwICsxLDkwIEBACisvKioKKyAqIEBmaWxlIGRhZW1vbi9vcGRfc3RhdHMuYworICogTWFuYWdlbWVudCBvZiBkYWVtb24gc3RhdGlzdGljcworICoKKyAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDIgT1Byb2ZpbGUgYXV0aG9ycworICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKKyAqCisgKiBAYXV0aG9yIEpvaG4gTGV2b24KKyAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQorICovCisKKyNpbmNsdWRlICJvcGRfc3RhdHMuaCIKKyNpbmNsdWRlICJvcGRfZXh0ZW5kZWQuaCIKKyNpbmNsdWRlICJvcHJvZmlsZWQuaCIKKworI2luY2x1ZGUgIm9wX2dldF90aW1lLmgiCisKKyNpbmNsdWRlIDxkaXJlbnQuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorCit1bnNpZ25lZCBsb25nIG9wZF9zdGF0c1tPUERfTUFYX1NUQVRTXTsKKworLyoqCisgKiBwcmludF9pZiAtIHByaW50IGFuIGludGVnZXIgdmFsdWUgcmVhZCBmcm9tIGZpbGUgZmlsZW5hbWUsCisgKiBkbyBub3RoaW5nIGlmIHRoZSB2YWx1ZSByZWFkID09IC0xIGV4Y2VwdCBpZiBmb3JjZSBpcyBub24temVybworICovCitzdGF0aWMgdm9pZCBwcmludF9pZihjaGFyIGNvbnN0ICogZm10LCBjaGFyIGNvbnN0ICogcGF0aCwgY2hhciBjb25zdCAqIGZpbGVuYW1lLCBpbnQgZm9yY2UpCit7CisJaW50IHZhbHVlID0gb3BkX3JlYWRfZnNfaW50KHBhdGgsIGZpbGVuYW1lLCAwKTsKKwlpZiAodmFsdWUgIT0gLTEgfHwgZm9yY2UpCisJCXByaW50ZihmbXQsIHZhbHVlKTsKK30KKworLyoqCisgKiBvcGRfcHJpbnRfc3RhdHMgLSBwcmludCBvdXQgbGF0ZXN0IHN0YXRpc3RpY3MKKyAqLwordm9pZCBvcGRfcHJpbnRfc3RhdHModm9pZCkKK3sKKwlESVIgKiBkaXI7CisJc3RydWN0IGRpcmVudCAqIGRpcmVudDsKKworCXByaW50ZigiXG4lc1xuIiwgb3BfZ2V0X3RpbWUoKSk7CisJcHJpbnRmKCJcbi0tIE9Qcm9maWxlIFN0YXRpc3RpY3MgLS1cbiIpOworCXByaW50ZigiTnIuIHNhbXBsZSBkdW1wczogJWx1XG4iLCBvcGRfc3RhdHNbT1BEX0RVTVBfQ09VTlRdKTsKKwlwcmludGYoIk5yLiBub24tYmFja3RyYWNlIHNhbXBsZXM6ICVsdVxuIiwgb3BkX3N0YXRzW09QRF9TQU1QTEVTXSk7CisJcHJpbnRmKCJOci4ga2VybmVsIHNhbXBsZXM6ICVsdVxuIiwgb3BkX3N0YXRzW09QRF9LRVJORUxdKTsKKwlwcmludGYoIk5yLiBsb3N0IHNhbXBsZXMgKG5vIGtlcm5lbC91c2VyKTogJWx1XG4iLCBvcGRfc3RhdHNbT1BEX05PX0NUWF0pOworCXByaW50ZigiTnIuIGxvc3Qga2VybmVsIHNhbXBsZXM6ICVsdVxuIiwgb3BkX3N0YXRzW09QRF9MT1NUX0tFUk5FTF0pOworCXByaW50ZigiTnIuIGluY29tcGxldGUgY29kZSBzdHJ1Y3RzOiAlbHVcbiIsIG9wZF9zdGF0c1tPUERfREFOR0xJTkdfQ09ERV0pOworCXByaW50ZigiTnIuIHNhbXBsZXMgbG9zdCBkdWUgdG8gc2FtcGxlIGZpbGUgb3BlbiBmYWlsdXJlOiAlbHVcbiIsCisJCW9wZF9zdGF0c1tPUERfTE9TVF9TQU1QTEVGSUxFXSk7CisJcHJpbnRmKCJOci4gc2FtcGxlcyBsb3N0IGR1ZSB0byBubyBwZXJtYW5lbnQgbWFwcGluZzogJWx1XG4iLAorCQlvcGRfc3RhdHNbT1BEX0xPU1RfTk9fTUFQUElOR10pOworCXByaW50X2lmKCJOci4gZXZlbnQgbG9zdCBkdWUgdG8gYnVmZmVyIG92ZXJmbG93OiAldVxuIiwKKwkgICAgICAgIi9kZXYvb3Byb2ZpbGUvc3RhdHMiLCAiZXZlbnRfbG9zdF9vdmVyZmxvdyIsIDEpOworCXByaW50X2lmKCJOci4gc2FtcGxlcyBsb3N0IGR1ZSB0byBubyBtYXBwaW5nOiAldVxuIiwKKwkgICAgICAgIi9kZXYvb3Byb2ZpbGUvc3RhdHMiLCAic2FtcGxlX2xvc3Rfbm9fbWFwcGluZyIsIDEpOworCXByaW50X2lmKCJOci4gYmFja3RyYWNlcyBza2lwcGVkIGR1ZSB0byBubyBmaWxlIG1hcHBpbmc6ICV1XG4iLAorCSAgICAgICAiL2Rldi9vcHJvZmlsZS9zdGF0cyIsICJidF9sb3N0X25vX21hcHBpbmciLCAwKTsKKwlwcmludF9pZigiTnIuIHNhbXBsZXMgbG9zdCBkdWUgdG8gbm8gbW06ICV1XG4iLAorCSAgICAgICAiL2Rldi9vcHJvZmlsZS9zdGF0cyIsICJzYW1wbGVfbG9zdF9ub19tbSIsIDEpOworCisJb3BkX2V4dF9wcmludF9zdGF0cygpOworCisJaWYgKCEoZGlyID0gb3BlbmRpcigiL2Rldi9vcHJvZmlsZS9zdGF0cy8iKSkpCisJCWdvdG8gb3V0OworCXdoaWxlICgoZGlyZW50ID0gcmVhZGRpcihkaXIpKSkgeworCQlpbnQgY3B1X25yOworCQljaGFyIHBhdGhbMjU2XTsKKwkJaWYgKHNzY2FuZihkaXJlbnQtPmRfbmFtZSwgImNwdSVkIiwgJmNwdV9ucikgIT0gMSkKKwkJCWNvbnRpbnVlOworCQlzbnByaW50ZihwYXRoLCAyNTYsICIvZGV2L29wcm9maWxlL3N0YXRzLyVzIiwgZGlyZW50LT5kX25hbWUpOworCisJCXByaW50ZigiXG4tLS0tIFN0YXRpc3RpY3MgZm9yIGNwdSA6ICVkXG4iLCBjcHVfbnIpOworCQlwcmludF9pZigiTnIuIHNhbXBsZXMgbG9zdCBjcHUgYnVmZmVyIG92ZXJmbG93OiAldVxuIiwKKwkJICAgICBwYXRoLCAic2FtcGxlX2xvc3Rfb3ZlcmZsb3ciLCAxKTsKKwkJcHJpbnRfaWYoIk5yLiBzYW1wbGVzIGxvc3QgdGFzayBleGl0OiAldVxuIiwKKwkJICAgICBwYXRoLCAic2FtcGxlX2xvc3RfdGFza19leGl0IiwgMCk7CisJCXByaW50X2lmKCJOci4gc2FtcGxlcyByZWNlaXZlZDogJXVcbiIsCisJCSAgICAgcGF0aCwgInNhbXBsZV9yZWNlaXZlZCIsIDEpOworCQlwcmludF9pZigiTnIuIGJhY2t0cmFjZSBhYm9ydGVkOiAldVxuIiwgCisJCSAgICAgcGF0aCwgImJhY2t0cmFjZV9hYm9ydGVkIiwgMCk7CisJCXByaW50X2lmKCJOci4gc2FtcGxlcyBsb3N0IGludmFsaWQgcGM6ICV1XG4iLCAKKwkJICAgICBwYXRoLCAic2FtcGxlX2ludmFsaWRfZWlwIiwgMCk7CisJfQorCWNsb3NlZGlyKGRpcik7CitvdXQ6CisJZmZsdXNoKHN0ZG91dCk7Cit9CmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9kYWVtb24vb3BkX3N0YXRzLmggYi9vcHJvZmlsZS0wLjkuNy9kYWVtb24vb3BkX3N0YXRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTc3Yjg2YQotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2RhZW1vbi9vcGRfc3RhdHMuaApAQCAtMCwwICsxLDMxIEBACisvKioKKyAqIEBmaWxlIGRhZW1vbi9vcGRfc3RhdHMuaAorICogTWFuYWdlbWVudCBvZiBkYWVtb24gc3RhdGlzdGljcworICoKKyAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDIgT1Byb2ZpbGUgYXV0aG9ycworICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKKyAqCisgKiBAYXV0aG9yIEpvaG4gTGV2b24KKyAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQorICovCisKKyNpZm5kZWYgT1BEX1NUQVRTX0gKKyNkZWZpbmUgT1BEX1NUQVRTX0gKKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgb3BkX3N0YXRzW107CisKK2VudW0gewlPUERfU0FNUExFUywgLyoqPCBuci4gc2FtcGxlcyAqLworCU9QRF9LRVJORUwsIC8qKjwgbnIuIGtlcm5lbCBzYW1wbGVzICovCisJT1BEX1BST0NFU1MsIC8qKjwgbnIuIHVzZXJzcGFjZSBzYW1wbGVzICovCisJT1BEX05PX0NUWCwgLyoqPCBuci4gc2FtcGxlcyBsb3N0IGR1ZSB0byBub3Qga25vd2luZyBpZiBpbiB0aGUga2VybmVsIG9yIG5vdCAqLworCU9QRF9MT1NUX0tFUk5FTCwgIC8qKjwgbnIuIGtlcm5lbCBzYW1wbGVzIGxvc3QgKi8KKwlPUERfTE9TVF9TQU1QTEVGSUxFLCAvKio8IG5yIHNhbXBsZXMgZm9yIHdoaWNoIHNhbXBsZSBmaWxlIGNhbid0IGJlIG9wZW5lZCAqLworCU9QRF9MT1NUX05PX01BUFBJTkcsIC8qKjwgbnIgc2FtcGxlcyBsb3N0IGR1ZSB0byBubyBtYXBwaW5nICovCisJT1BEX0RVTVBfQ09VTlQsIC8qKjwgbnIuIG9mIHRpbWVzIGJ1ZmZlciBpcyByZWFkICovCisJT1BEX0RBTkdMSU5HX0NPREUsIC8qKjwgbnIuIHBhcnRpYWwgY29kZSBub3RpZmljYXRpb25zIChidWZmZXIgb3ZlcmZsb3cgKi8KKwlPUERfTUFYX1NUQVRTIC8qKjwgZW5kIG9mIHN0YXRzICovCit9OworCit2b2lkIG9wZF9wcmludF9zdGF0cyh2b2lkKTsKKworI2VuZGlmIC8qIE9QRF9TVEFUU19IICovCmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9kYWVtb24vb3BkX3RyYW5zLmMgYi9vcHJvZmlsZS0wLjkuNy9kYWVtb24vb3BkX3RyYW5zLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzYyOTZhMAotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2RhZW1vbi9vcGRfdHJhbnMuYwpAQCAtMCwwICsxLDM0OCBAQAorLyoqCisgKiBAZmlsZSBkYWVtb24vb3BkX3RyYW5zLmMKKyAqIFByb2Nlc3NpbmcgdGhlIHNhbXBsZSBidWZmZXIKKyAqCisgKiBAcmVtYXJrIENvcHlyaWdodCAyMDAyIE9Qcm9maWxlIGF1dGhvcnMKKyAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCisgKgorICogQGF1dGhvciBKb2huIExldm9uCisgKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKKyAqIE1vZGlmaWVkIGJ5IEFyYXZpbmQgTWVub24gZm9yIFhlbgorICogVGhlc2UgbW9kaWZpY2F0aW9ucyBhcmU6CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgSGV3bGV0dC1QYWNrYXJkIENvLgorICoKKyAqIE1vZGlmaWVkIGJ5IE1heW5hcmQgSm9obnNvbiA8bWF5bmFyZGpAdXMuaWJtLmNvbT4KKyAqIFRoZXNlIG1vZGlmaWNhdGlvbnMgYXJlOgorICogKEMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwNworICovCisKKyNpbmNsdWRlICJvcGRfdHJhbnMuaCIKKyNpbmNsdWRlICJvcGRfa2VybmVsLmgiCisjaW5jbHVkZSAib3BkX3NmaWxlLmgiCisjaW5jbHVkZSAib3BkX2Fub24uaCIKKyNpbmNsdWRlICJvcGRfc3RhdHMuaCIKKyNpbmNsdWRlICJvcGRfcHJpbnRmLmgiCisjaW5jbHVkZSAib3BkX2ludGVyZmFjZS5oIgorIAorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworZXh0ZXJuIHNpemVfdCBrZXJuZWxfcG9pbnRlcl9zaXplOworCisKK3ZvaWQgY2xlYXJfdHJhbnNfbGFzdChzdHJ1Y3QgdHJhbnNpZW50ICogdHJhbnMpCit7CisJdHJhbnMtPmxhc3QgPSBOVUxMOworCXRyYW5zLT5sYXN0X2Fub24gPSBOVUxMOworfQorCisKK3ZvaWQgY2xlYXJfdHJhbnNfY3VycmVudChzdHJ1Y3QgdHJhbnNpZW50ICogdHJhbnMpCit7CisJdHJhbnMtPmN1cnJlbnQgPSBOVUxMOworCXRyYW5zLT5hbm9uID0gTlVMTDsKK30KKworCit1aW50NjRfdCBwb3BfYnVmZmVyX3ZhbHVlKHN0cnVjdCB0cmFuc2llbnQgKiB0cmFucykKK3sKKwl1aW50NjRfdCB2YWw7CisKKwlpZiAoIXRyYW5zLT5yZW1haW5pbmcpIHsKKwkJZnByaW50ZihzdGRlcnIsICJCVUc6IHBvcHBpbmcgZW1wdHkgYnVmZmVyICFcbiIpOworCQlhYm9ydCgpOworCX0KKworCWlmIChrZXJuZWxfcG9pbnRlcl9zaXplID09IDQpIHsKKwkJdWludDMyX3QgY29uc3QgKiBsYnVmID0gKHZvaWQgY29uc3QgKil0cmFucy0+YnVmZmVyOworCQl2YWwgPSAqbGJ1ZjsKKwl9IGVsc2UgeworCQl1aW50NjRfdCBjb25zdCAqIGxidWYgPSAodm9pZCBjb25zdCAqKXRyYW5zLT5idWZmZXI7CisJCXZhbCA9ICpsYnVmOworCX0KKworCXRyYW5zLT5yZW1haW5pbmctLTsKKwl0cmFucy0+YnVmZmVyICs9IGtlcm5lbF9wb2ludGVyX3NpemU7CisJcmV0dXJuIHZhbDsKK30KKworCitpbnQgZW5vdWdoX3JlbWFpbmluZyhzdHJ1Y3QgdHJhbnNpZW50ICogdHJhbnMsIHNpemVfdCBzaXplKQoreworCWlmICh0cmFucy0+cmVtYWluaW5nID49IHNpemUpCisJCXJldHVybiAxOworCisJdmVyYnByaW50Zih2bWlzYywgIkRhbmdsaW5nIEVTQ0FQRV9DT0RFLlxuIik7CisJb3BkX3N0YXRzW09QRF9EQU5HTElOR19DT0RFXSsrOworCXJldHVybiAwOworfQorCisKK3N0YXRpYyB2b2lkIG9wZF9wdXRfc2FtcGxlKHN0cnVjdCB0cmFuc2llbnQgKiB0cmFucywgdW5zaWduZWQgbG9uZyBsb25nIHBjKQoreworCXVuc2lnbmVkIGxvbmcgbG9uZyBldmVudDsKKworCWlmICghZW5vdWdoX3JlbWFpbmluZyh0cmFucywgMSkpIHsKKwkJdHJhbnMtPnJlbWFpbmluZyA9IDA7CisJCXJldHVybjsKKwl9CisKKwlldmVudCA9IHBvcF9idWZmZXJfdmFsdWUodHJhbnMpOworCisJaWYgKHRyYW5zLT50cmFjaW5nICE9IFRSQUNJTkdfT04pCisJCXRyYW5zLT5ldmVudCA9IGV2ZW50OworCisJdHJhbnMtPnBjID0gcGM7CisKKwkvKiBzZmlsZSBjYW4gY2hhbmdlIGF0IGVhY2ggc2FtcGxlIGZvciBrZXJuZWwgKi8KKwlpZiAodHJhbnMtPmluX2tlcm5lbCAhPSAwKQorCQljbGVhcl90cmFuc19jdXJyZW50KHRyYW5zKTsKKworCWlmICghdHJhbnMtPmluX2tlcm5lbCAmJiB0cmFucy0+Y29va2llID09IE5PX0NPT0tJRSkKKwkJdHJhbnMtPmFub24gPSBmaW5kX2Fub25fbWFwcGluZyh0cmFucyk7CisKKwkvKiBnZXQgdGhlIGN1cnJlbnQgc2ZpbGUgaWYgbmVlZGVkICovCisJaWYgKCF0cmFucy0+Y3VycmVudCkKKwkJdHJhbnMtPmN1cnJlbnQgPSBzZmlsZV9maW5kKHRyYW5zKTsKKworCS8qCisJICogY2FuIGhhcHBlbiBpZiBrZXJuZWwgc2FtcGxlIGZhbGxzIHRocm91Z2ggdGhlIGNyYWNrcywgb3IgaWYKKwkgKiBpdCdzIGEgc2FtcGxlIGZyb20gYW4gYW5vbiByZWdpb24gd2UgY291bGRuJ3QgZmluZAorCSAqLworCWlmICghdHJhbnMtPmN1cnJlbnQpCisJCWdvdG8gb3V0OworCisJLyogRklYTUU6IHRoaXMgbG9naWMgaXMgcGVyaGFwcyB0b28gaGFyc2g/ICovCisJaWYgKHRyYW5zLT5jdXJyZW50LT5pZ25vcmVkIHx8ICh0cmFucy0+bGFzdCAmJiB0cmFucy0+bGFzdC0+aWdub3JlZCkpCisJCWdvdG8gb3V0OworCisJLyogbG9nIHRoZSBzYW1wbGUgb3IgYXJjICovCisJc2ZpbGVfbG9nX3NhbXBsZSh0cmFucyk7CisKK291dDoKKwkvKiBzd2l0Y2ggdG8gdHJhY2UgbW9kZSAqLworCWlmICh0cmFucy0+dHJhY2luZyA9PSBUUkFDSU5HX1NUQVJUKQorCQl0cmFucy0+dHJhY2luZyA9IFRSQUNJTkdfT047CisKKwl1cGRhdGVfdHJhbnNfbGFzdCh0cmFucyk7Cit9CisKKworc3RhdGljIHZvaWQgY29kZV91bmtub3duKHN0cnVjdCB0cmFuc2llbnQgKiB0cmFucyBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKSkKK3sKKwlmcHJpbnRmKHN0ZGVyciwgIlVua25vd24gY29kZSAhXG4iKTsKKwlhYm9ydCgpOworfQorCisKK3N0YXRpYyB2b2lkIGNvZGVfY3R4X3N3aXRjaChzdHJ1Y3QgdHJhbnNpZW50ICogdHJhbnMpCit7CisJY2xlYXJfdHJhbnNfY3VycmVudCh0cmFucyk7CisKKwlpZiAoIWVub3VnaF9yZW1haW5pbmcodHJhbnMsIDUpKSB7CisJCXRyYW5zLT5yZW1haW5pbmcgPSAwOworCQlyZXR1cm47CisJfQorCisJdHJhbnMtPnRpZCA9IHBvcF9idWZmZXJfdmFsdWUodHJhbnMpOworCXRyYW5zLT5hcHBfY29va2llID0gcG9wX2J1ZmZlcl92YWx1ZSh0cmFucyk7CisJLyogbXVzdCBiZSBFU0NBUEVfQ09ERSwgQ1RYX1RHSURfQ09ERSwgdGdpZC4gTGlrZSB0aGlzCisJICogYmVjYXVzZSB0Z2lkIHdhcyBhZGRlZCBsYXRlciBpbiBhIGNvbXBhdGlibGUgbWFubmVyLgorCSAqLworCXBvcF9idWZmZXJfdmFsdWUodHJhbnMpOworCXBvcF9idWZmZXJfdmFsdWUodHJhbnMpOworCXRyYW5zLT50Z2lkID0gcG9wX2J1ZmZlcl92YWx1ZSh0cmFucyk7CisKKwlpZiAodm1pc2MpIHsKKwkJY2hhciBjb25zdCAqIGFwcCA9IGZpbmRfY29va2llKHRyYW5zLT5hcHBfY29va2llKTsKKwkJcHJpbnRmKCJDVFhfU1dJVENIIHRvIHRpZCAlbHUsIHRnaWQgJWx1LCBjb29raWUgJWxseCglcylcbiIsCisJCSAgICAgICAodW5zaWduZWQgbG9uZyl0cmFucy0+dGlkLCAodW5zaWduZWQgbG9uZyl0cmFucy0+dGdpZCwKKwkJICAgICAgIHRyYW5zLT5hcHBfY29va2llLCBhcHAgPyBhcHAgOiAibm9uZSIpOworCX0KK30KKworCitzdGF0aWMgdm9pZCBjb2RlX2NwdV9zd2l0Y2goc3RydWN0IHRyYW5zaWVudCAqIHRyYW5zKQoreworCWNsZWFyX3RyYW5zX2N1cnJlbnQodHJhbnMpOworCisJaWYgKCFlbm91Z2hfcmVtYWluaW5nKHRyYW5zLCAxKSkgeworCQl0cmFucy0+cmVtYWluaW5nID0gMDsKKwkJcmV0dXJuOworCX0KKworCXRyYW5zLT5jcHUgPSBwb3BfYnVmZmVyX3ZhbHVlKHRyYW5zKTsKKwl2ZXJicHJpbnRmKHZtaXNjLCAiQ1BVX1NXSVRDSCB0byAlbHVcbiIsIHRyYW5zLT5jcHUpOworfQorCisKK3N0YXRpYyB2b2lkIGNvZGVfY29va2llX3N3aXRjaChzdHJ1Y3QgdHJhbnNpZW50ICogdHJhbnMpCit7CisJY2xlYXJfdHJhbnNfY3VycmVudCh0cmFucyk7CisKKwlpZiAoIWVub3VnaF9yZW1haW5pbmcodHJhbnMsIDEpKSB7CisJCXRyYW5zLT5yZW1haW5pbmcgPSAwOworCQlyZXR1cm47CisJfQorCisJdHJhbnMtPmNvb2tpZSA9IHBvcF9idWZmZXJfdmFsdWUodHJhbnMpOworCisJaWYgKHZtaXNjKSB7CisJCWNoYXIgY29uc3QgKiBuYW1lID0gdmVyYm9zZV9jb29raWUodHJhbnMtPmNvb2tpZSk7CisJCXZlcmJwcmludGYodm1pc2MsICJDT09LSUVfU1dJVENIIHRvIGNvb2tpZSAlcyglbGx4KVxuIiwKKwkJCSAgIG5hbWUsIHRyYW5zLT5jb29raWUpOworCX0KK30KKworCitzdGF0aWMgdm9pZCBjb2RlX2tlcm5lbF9lbnRlcihzdHJ1Y3QgdHJhbnNpZW50ICogdHJhbnMpCit7CisJdmVyYnByaW50Zih2bWlzYywgIktFUk5FTF9FTlRFUl9TV0lUQ0ggdG8ga2VybmVsXG4iKTsKKwl0cmFucy0+aW5fa2VybmVsID0gMTsKKwljbGVhcl90cmFuc19jdXJyZW50KHRyYW5zKTsKKwkvKiBzdWJ0bGV0eTogd2UgbXVzdCBrZWVwIHRyYW5zLT5jb29raWUgY2FjaGVkLAorCSAqIGV2ZW4gdGhvdWdoIGl0J3MgbWVhbmluZ2xlc3MgZm9yIHRoZSBrZXJuZWwgLQorCSAqIHdlIHdvbid0IG5lY2Vzc2FyaWx5IGdldCBhIGNvb2tpZSBzd2l0Y2ggb24KKwkgKiBrZXJuZWwgZXhpdC4gU2VlIGNvbW1lbnRzIGluIG9wZF9zZmlsZS5jCisJICovCit9CisKKworc3RhdGljIHZvaWQgY29kZV91c2VyX2VudGVyKHN0cnVjdCB0cmFuc2llbnQgKiB0cmFucykKK3sKKwl2ZXJicHJpbnRmKHZtaXNjLCAiVVNFUl9FTlRFUl9TV0lUQ0ggdG8gdXNlci1zcGFjZVxuIik7CisJdHJhbnMtPmluX2tlcm5lbCA9IDA7CisJY2xlYXJfdHJhbnNfY3VycmVudCh0cmFucyk7CisJY2xlYXJfdHJhbnNfbGFzdCh0cmFucyk7Cit9CisKKworc3RhdGljIHZvaWQgY29kZV9tb2R1bGVfbG9hZGVkKHN0cnVjdCB0cmFuc2llbnQgKiB0cmFucyBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKSkKK3sKKwl2ZXJicHJpbnRmKHZtb2R1bGUsICJNT0RVTEVfTE9BREVEX0NPREVcbiIpOworCW9wZF9yZXJlYWRfbW9kdWxlX2luZm8oKTsKKwljbGVhcl90cmFuc19jdXJyZW50KHRyYW5zKTsKKwljbGVhcl90cmFuc19sYXN0KHRyYW5zKTsKK30KKworCisvKgorICogVGhpcyBhbHNvIGltcGxpY2l0bHkgc2lnbmFscyB0aGUgZW5kIG9mIHRoZSBwcmV2aW91cworICogdHJhY2UsIHNvIHdlIG5ldmVyIGV4cGxpY2l0bHkgc2V0IFRSQUNJTkdfT0ZGIHdoZW4KKyAqIHByb2Nlc3NpbmcgYSBidWZmZXIuCisgKi8KK3N0YXRpYyB2b2lkIGNvZGVfdHJhY2VfYmVnaW4oc3RydWN0IHRyYW5zaWVudCAqIHRyYW5zKQoreworCXZlcmJwcmludGYodmFyY3MsICJUUkFDRV9CRUdJTlxuIik7CisJdHJhbnMtPnRyYWNpbmcgPSBUUkFDSU5HX1NUQVJUOworfQorCitzdGF0aWMgdm9pZCBjb2RlX3hlbl9lbnRlcihzdHJ1Y3QgdHJhbnNpZW50ICogdHJhbnMpCit7CisJdmVyYnByaW50Zih2bWlzYywgIlhFTl9FTlRFUl9TV0lUQ0ggdG8geGVuXG4iKTsKKwl0cmFucy0+aW5fa2VybmVsID0gMTsKKwl0cmFucy0+Y3VycmVudCA9IE5VTEw7CisJLyogc3VidGxldHk6IHdlIG11c3Qga2VlcCB0cmFucy0+Y29va2llIGNhY2hlZCwgZXZlbiB0aG91Z2ggaXQncworCSAqIG1lYW5pbmdsZXNzIGZvciBYZW4gLSB3ZSB3b24ndCBuZWNlc3NhcmlseSBnZXQgYSBjb29raWUgc3dpdGNoCisJICogb24gWGVuIGV4aXQuIFNlZSBjb21tZW50cyBpbiBvcGRfc2ZpbGUuYy4gSXQgc2VlbXMgdGhhdCB3ZSBjYW4KKwkgKiBnZXQgYXdheSB3aXRoIGluX2tlcm5lbCA9IDEgYXMgbG9uZyBhcyB3ZSBzdXBwbHkgdGhlIGNvcnJlY3QKKwkgKiBYZW4gaW1hZ2UsIGFuZCBpdHMgYWRkcmVzcyByYW5nZSBpbiBzdGFydHVwIGZpbmRfa2VybmVsX2ltYWdlCisJICogaXMgbW9kaWZpZWQgdG8gbG9vayBpbiB0aGUgWGVuIGltYWdlIGFsc28KKwkgKi8KK30KKworZXh0ZXJuIHZvaWQgY29kZV9zcHVfcHJvZmlsaW5nKHN0cnVjdCB0cmFuc2llbnQgKiB0cmFucyk7CitleHRlcm4gdm9pZCBjb2RlX3NwdV9jdHhfc3dpdGNoKHN0cnVjdCB0cmFuc2llbnQgKiB0cmFucyk7CisKK2V4dGVybiB2b2lkIGNvZGVfaWJzX2ZldGNoX3NhbXBsZShzdHJ1Y3QgdHJhbnNpZW50ICogdHJhbnMpOworZXh0ZXJuIHZvaWQgY29kZV9pYnNfb3Bfc2FtcGxlKHN0cnVjdCB0cmFuc2llbnQgKiB0cmFucyk7CisKK2hhbmRsZXJfdCBoYW5kbGVyc1tMQVNUX0NPREUgKyAxXSA9IHsKKwkmY29kZV91bmtub3duLAorCSZjb2RlX2N0eF9zd2l0Y2gsCisJJmNvZGVfY3B1X3N3aXRjaCwKKwkmY29kZV9jb29raWVfc3dpdGNoLAorCSZjb2RlX2tlcm5lbF9lbnRlciwKKwkmY29kZV91c2VyX2VudGVyLAorCSZjb2RlX21vZHVsZV9sb2FkZWQsCisJLyogdGdpZCBoYW5kbGVkIGRpZmZlcmVudGx5ICovCisJJmNvZGVfdW5rbm93biwKKwkmY29kZV90cmFjZV9iZWdpbiwKKwkmY29kZV91bmtub3duLAorCSZjb2RlX3hlbl9lbnRlciwKKyNpZiBkZWZpbmVkKF9fcG93ZXJwY19fKQorCSZjb2RlX3NwdV9wcm9maWxpbmcsCisJJmNvZGVfc3B1X2N0eF9zd2l0Y2gsCisjZWxzZQorCSZjb2RlX3Vua25vd24sCisJJmNvZGVfdW5rbm93biwKKyNlbmRpZgorCSZjb2RlX2lic19mZXRjaF9zYW1wbGUsCisJJmNvZGVfaWJzX29wX3NhbXBsZSwKK307CisKK2V4dGVybiB2b2lkICgqc3BlY2lhbF9wcm9jZXNzb3IpKHN0cnVjdCB0cmFuc2llbnQgKik7CisKK3ZvaWQgb3BkX3Byb2Nlc3Nfc2FtcGxlcyhjaGFyIGNvbnN0ICogYnVmZmVyLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IHRyYW5zaWVudCB0cmFucyA9IHsKKwkJLmJ1ZmZlciA9IGJ1ZmZlciwKKwkJLnJlbWFpbmluZyA9IGNvdW50LAorCQkudHJhY2luZyA9IFRSQUNJTkdfT0ZGLAorCQkuY3VycmVudCA9IE5VTEwsCisJCS5sYXN0ID0gTlVMTCwKKwkJLmNvb2tpZSA9IElOVkFMSURfQ09PS0lFLAorCQkuYXBwX2Nvb2tpZSA9IElOVkFMSURfQ09PS0lFLAorCQkuYW5vbiA9IE5VTEwsCisJCS5sYXN0X2Fub24gPSBOVUxMLAorCQkucGMgPSAwLAorCQkubGFzdF9wYyA9IDAsCisJCS5ldmVudCA9IDAsCisJCS5pbl9rZXJuZWwgPSAtMSwKKwkJLmNwdSA9IC0xLAorCQkudGlkID0gLTEsCisJCS5lbWJlZGRlZF9vZmZzZXQgPSBVTlVTRURfRU1CRURERURfT0ZGU0VULAorCQkudGdpZCA9IC0xLAorCQkuZXh0ID0gTlVMTAorCX07CisKKwkvKiBGSVhNRTogd2FzIHVpbnQ2NF90IGJ1dCBpdCBjYW4ndCBjb21waWxlIG9uIGFscGhhIHdoZXJlIHVpbnQ2NF90CisJICogaXMgYW4gdW5zaWduZWQgbG9uZyBhbmQgYmVsb3cgdGhlIHByaW50ZigiLi4uIiAlbGx1XG4iLCBjb2RlKQorCSAqIGdlbmVyYXRlIGEgd2FybmluZywgdGhpcyBsb29rIGxpa2UgYSBzdG9wcGVyIHRvIHVzZSBjOTggdHlwZXMgOi8KKwkgKi8KKwl1bnNpZ25lZCBsb25nIGxvbmcgY29kZTsKKworCWlmIChzcGVjaWFsX3Byb2Nlc3NvcikgeworCQlzcGVjaWFsX3Byb2Nlc3NvcigmdHJhbnMpOworCQlyZXR1cm47CisJfQorCisJd2hpbGUgKHRyYW5zLnJlbWFpbmluZykgeworCQljb2RlID0gcG9wX2J1ZmZlcl92YWx1ZSgmdHJhbnMpOworCisJCWlmICghaXNfZXNjYXBlX2NvZGUoY29kZSkpIHsKKwkJCW9wZF9wdXRfc2FtcGxlKCZ0cmFucywgY29kZSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmICghdHJhbnMucmVtYWluaW5nKSB7CisJCQl2ZXJicHJpbnRmKHZtaXNjLCAiRGFuZ2xpbmcgRVNDQVBFX0NPREUuXG4iKTsKKwkJCW9wZF9zdGF0c1tPUERfREFOR0xJTkdfQ09ERV0rKzsKKwkJCWJyZWFrOworCQl9CisKKwkJLy8gc3RhcnRlZCB3aXRoIEVTQ0FQRV9DT0RFLCBuZXh0IGlzIHR5cGUKKwkJY29kZSA9IHBvcF9idWZmZXJfdmFsdWUoJnRyYW5zKTsKKwkKKwkJaWYgKGNvZGUgPj0gTEFTVF9DT0RFKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIlVua25vd24gY29kZSAlbGx1XG4iLCBjb2RlKTsKKwkJCWFib3J0KCk7CisJCX0KKworCQloYW5kbGVyc1tjb2RlXSgmdHJhbnMpOworCX0KK30KZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2RhZW1vbi9vcGRfdHJhbnMuaCBiL29wcm9maWxlLTAuOS43L2RhZW1vbi9vcGRfdHJhbnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMGE4NjhiCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvZGFlbW9uL29wZF90cmFucy5oCkBAIC0wLDAgKzEsODYgQEAKKy8qKgorICogQGZpbGUgZGFlbW9uL29wZF90cmFucy5oCisgKiBQcm9jZXNzaW5nIHRoZSBzYW1wbGUgYnVmZmVyCisgKgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMiBPUHJvZmlsZSBhdXRob3JzCisgKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORworICoKKyAqIEBhdXRob3IgSm9obiBMZXZvbgorICogQGF1dGhvciBQaGlsaXBwZSBFbGllCisgKgorICogTW9kaWZpZWQgYnkgTWF5bmFyZCBKb2huc29uIDxtYXluYXJkakB1cy5pYm0uY29tPgorICogVGhlc2UgbW9kaWZpY2F0aW9ucyBhcmU6CisgKiAoQykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDA3CisgKi8KKworI2lmbmRlZiBPUERfVFJBTlNfSAorI2RlZmluZSBPUERfVFJBTlNfSAorCisjaW5jbHVkZSAib3BkX2Nvb2tpZS5oIgorI2luY2x1ZGUgIm9wX3R5cGVzLmgiCisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworc3RydWN0IHNmaWxlOworc3RydWN0IGFub25fbWFwcGluZzsKKworZW51bSB0cmFjaW5nX3R5cGUgeworCVRSQUNJTkdfT0ZGLAorCVRSQUNJTkdfU1RBUlQsCisJVFJBQ0lOR19PTgorfTsKKworLyoqCisgKiBUcmFuc2llbnQgdmFsdWVzIHVzZWQgZm9yIHBhcnNpbmcgdGhlIGV2ZW50IGJ1ZmZlci4KKyAqIE5vdGUgdGhhdCB0aGVzZSBhcmUgcmVzZXQgZm9yIGVhY2ggYnVmZmVyIHJlYWQsIGJ1dAorICogdGhhdCBzaG91bGQgYmUgb2sgYXMgaW4gdGhlIGtlcm5lbCwgY3B1X2J1ZmZlcl9yZXNldCgpCisgKiBlbnN1cmVzIHRoYXQgYSBjb3JyZWN0IGNvbnRleHQgc3RhcnRzIG9mZiB0aGUgYnVmZmVyLgorICovCitzdHJ1Y3QgdHJhbnNpZW50IHsKKwljaGFyIGNvbnN0ICogYnVmZmVyOworCXNpemVfdCByZW1haW5pbmc7CisJZW51bSB0cmFjaW5nX3R5cGUgdHJhY2luZzsKKwlzdHJ1Y3Qgc2ZpbGUgKiBjdXJyZW50OworCXN0cnVjdCBzZmlsZSAqIGxhc3Q7CisJc3RydWN0IGFub25fbWFwcGluZyAqIGFub247CisJc3RydWN0IGFub25fbWFwcGluZyAqIGxhc3RfYW5vbjsKKwljb29raWVfdCBjb29raWU7CisJY29va2llX3QgYXBwX2Nvb2tpZTsKKwl2bWFfdCBwYzsKKwl2bWFfdCBsYXN0X3BjOworCXVuc2lnbmVkIGxvbmcgZXZlbnQ7CisJaW50IGluX2tlcm5lbDsKKwl1bnNpZ25lZCBsb25nIGNwdTsKKwlwaWRfdCB0aWQ7CisJcGlkX3QgdGdpZDsKKwl1aW50NjRfdCBlbWJlZGRlZF9vZmZzZXQ7CisJdm9pZCAqIGV4dDsKK307CisKK3R5cGVkZWYgdm9pZCAoKmhhbmRsZXJfdCkoc3RydWN0IHRyYW5zaWVudCAqKTsKK2V4dGVybiBoYW5kbGVyX3QgaGFuZGxlcnNbXTsKKwordWludDY0X3QgcG9wX2J1ZmZlcl92YWx1ZShzdHJ1Y3QgdHJhbnNpZW50ICogdHJhbnMpOworaW50IGVub3VnaF9yZW1haW5pbmcoc3RydWN0IHRyYW5zaWVudCAqIHRyYW5zLCBzaXplX3Qgc2l6ZSk7CitzdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlX3RyYW5zX2xhc3Qoc3RydWN0IHRyYW5zaWVudCAqIHRyYW5zKQoreworCXRyYW5zLT5sYXN0ID0gdHJhbnMtPmN1cnJlbnQ7CisJdHJhbnMtPmxhc3RfYW5vbiA9IHRyYW5zLT5hbm9uOworCXRyYW5zLT5sYXN0X3BjID0gdHJhbnMtPnBjOworfQorCitleHRlcm4gc2l6ZV90IGtlcm5lbF9wb2ludGVyX3NpemU7CitzdGF0aWMgaW5saW5lIGludCBpc19lc2NhcGVfY29kZSh1aW50NjRfdCBjb2RlKQoreworCXJldHVybiBrZXJuZWxfcG9pbnRlcl9zaXplID09IDQgPyBjb2RlID09IH4wTFUgOiBjb2RlID09IH4wTExVOworfQorCit2b2lkIG9wZF9wcm9jZXNzX3NhbXBsZXMoY2hhciBjb25zdCAqIGJ1ZmZlciwgc2l6ZV90IGNvdW50KTsKKworLyoqIHVzZWQgd2hlbiB3ZSBuZWVkIHRvIGNsZWFyIGRhdGEgdGhhdCdzIGJlZW4gZnJlZWQgKi8KK3ZvaWQgY2xlYXJfdHJhbnNfbGFzdChzdHJ1Y3QgdHJhbnNpZW50ICogdHJhbnMpOworCisvKiogdXNlZCB3aGVuIHdlIG5lZWQgdG8gY2xlYXIgZGF0YSB0aGF0J3MgYmVlbiBmcmVlZCAqLwordm9pZCBjbGVhcl90cmFuc19jdXJyZW50KHN0cnVjdCB0cmFuc2llbnQgKiB0cmFucyk7CisKKyNlbmRpZiAvKiBPUERfVFJBTlNfSCAqLwpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvZGFlbW9uL29wcm9maWxlZC5jIGIvb3Byb2ZpbGUtMC45LjcvZGFlbW9uL29wcm9maWxlZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiZTYzYzYKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9kYWVtb24vb3Byb2ZpbGVkLmMKQEAgLTAsMCArMSw1MzIgQEAKKy8qKgorICogQGZpbGUgZGFlbW9uL29wcm9maWxlZC5jCisgKiBJbml0aWFsaXNhdGlvbiBhbmQgc2V0dXAKKyAqCisgKiBAcmVtYXJrIENvcHlyaWdodCAyMDAyLCAyMDAzIE9Qcm9maWxlIGF1dGhvcnMKKyAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCisgKgorICogQGF1dGhvciBKb2huIExldm9uCisgKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKKyAqIE1vZGlmaWVkIGJ5IEFyYXZpbmQgTWVub24gZm9yIFhlbgorICogVGhlc2UgbW9kaWZpY2F0aW9ucyBhcmU6CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgSGV3bGV0dC1QYWNrYXJkIENvLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyAKKyNpbmNsdWRlICJvcHJvZmlsZWQuaCIKKyNpbmNsdWRlICJvcGRfcHJpbnRmLmgiCisjaW5jbHVkZSAib3BkX2V2ZW50cy5oIgorI2luY2x1ZGUgIm9wZF9leHRlbmRlZC5oIgorCisjaW5jbHVkZSAib3BfY29uZmlnLmgiCisjaW5jbHVkZSAib3BfdmVyc2lvbi5oIgorI2luY2x1ZGUgIm9wX2h3X2NvbmZpZy5oIgorI2luY2x1ZGUgIm9wX2xpYmliZXJ0eS5oIgorI2luY2x1ZGUgIm9wX2ZpbGUuaCIKKyNpbmNsdWRlICJvcF9hYmkuaCIKKyNpbmNsdWRlICJvcF9zdHJpbmcuaCIKKyNpbmNsdWRlICJvcF9jcHVfdHlwZS5oIgorI2luY2x1ZGUgIm9wX3BvcHQuaCIKKyNpbmNsdWRlICJvcF9sb2NrZmlsZS5oIgorI2luY2x1ZGUgIm9wX2xpc3QuaCIKKyNpbmNsdWRlICJvcF9maWxlaW8uaCIKKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9yZXNvdXJjZS5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPGRpcmVudC5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorCitzaWdfYXRvbWljX3Qgc2lnbmFsX2FsYXJtOworc2lnX2F0b21pY190IHNpZ25hbF9odXA7CitzaWdfYXRvbWljX3Qgc2lnbmFsX3Rlcm07CitzaWdfYXRvbWljX3Qgc2lnbmFsX2NoaWxkOworc2lnX2F0b21pY190IHNpZ25hbF91c3IxOworc2lnX2F0b21pY190IHNpZ25hbF91c3IyOworCit1aW50IG9wX25yX2NvdW50ZXJzOworb3BfY3B1IGNwdV90eXBlOworaW50IG5vX2V2ZW50X29rOworaW50IHZzZmlsZTsKK2ludCB2c2FtcGxlczsKK2ludCB2YXJjczsKK2ludCB2bW9kdWxlOworaW50IHZtaXNjOworaW50IHZleHQ7CitpbnQgc2VwYXJhdGVfbGliOworaW50IHNlcGFyYXRlX2tlcm5lbDsKK2ludCBzZXBhcmF0ZV90aHJlYWQ7CitpbnQgc2VwYXJhdGVfY3B1OworaW50IG5vX3ZtbGludXg7CitjaGFyICogdm1saW51eDsKK2NoYXIgKiBrZXJuZWxfcmFuZ2U7CitjaGFyICogc2Vzc2lvbl9kaXI7CitpbnQgbm9feGVuOworY2hhciAqIHhlbmltYWdlOworY2hhciAqIHhlbl9yYW5nZTsKK3N0YXRpYyBjaGFyICogdmVyYm9zZTsKK3N0YXRpYyBjaGFyICogYmluYXJ5X25hbWVfZmlsdGVyOworc3RhdGljIGNoYXIgKiBldmVudHM7CitzdGF0aWMgY2hhciAqIGV4dF9mZWF0dXJlOworc3RhdGljIGludCBzaG93dmVyczsKK3N0YXRpYyBzdHJ1Y3Qgb3Byb2ZpbGVkX29wcyAqIG9wZF9vcHM7CitleHRlcm4gc3RydWN0IG9wcm9maWxlZF9vcHMgb3BkXzI0X29wczsKK2V4dGVybiBzdHJ1Y3Qgb3Byb2ZpbGVkX29wcyBvcGRfMjZfb3BzOworCisjZGVmaW5lIE9QRF9JTUFHRV9GSUxURVJfSEFTSF9TSVpFIDMyCitzdGF0aWMgc3RydWN0IGxpc3RfaGVhZCBpbWFnZXNfZmlsdGVyW09QRF9JTUFHRV9GSUxURVJfSEFTSF9TSVpFXTsKKworc3RhdGljIHN0cnVjdCBwb3B0T3B0aW9uIG9wdGlvbnNbXSA9IHsKKwl7ICJzZXNzaW9uLWRpciIsIDAsIFBPUFRfQVJHX1NUUklORywgJnNlc3Npb25fZGlyLCAwLCAicGxhY2Ugc2FtcGxlIGRhdGFiYXNlIGluIGRpciBpbnN0ZWFkIG9mIGRlZmF1bHQgbG9jYXRpb24iLCAiL3Zhci9saWIvb3Byb2ZpbGUiLCB9LAorCXsgImtlcm5lbC1yYW5nZSIsICdyJywgUE9QVF9BUkdfU1RSSU5HLCAma2VybmVsX3JhbmdlLCAwLCAiS2VybmVsIFZNQSByYW5nZSIsICJzdGFydC1lbmQiLCB9LAorCXsgInZtbGludXgiLCAnaycsIFBPUFRfQVJHX1NUUklORywgJnZtbGludXgsIDAsICJ2bWxpbnV4IGtlcm5lbCBpbWFnZSIsICJmaWxlIiwgfSwKKwl7ICJuby12bWxpbnV4IiwgMCwgUE9QVF9BUkdfTk9ORSwgJm5vX3ZtbGludXgsIDAsICJ2bWxpbnV4IGtlcm5lbCBpbWFnZSBmaWxlIG5vdCBhdmFpbGFibGUiLCBOVUxMLCB9LAorCXsgInhlbi1yYW5nZSIsIDAsIFBPUFRfQVJHX1NUUklORywgJnhlbl9yYW5nZSwgMCwgIlhlbiBWTUEgcmFuZ2UiLCAic3RhcnQtZW5kIiwgfSwKKwl7ICJ4ZW4taW1hZ2UiLCAwLCBQT1BUX0FSR19TVFJJTkcsICZ4ZW5pbWFnZSwgMCwgIlhlbiBpbWFnZSIsICJmaWxlIiwgfSwKKwl7ICJpbWFnZSIsIDAsIFBPUFRfQVJHX1NUUklORywgJmJpbmFyeV9uYW1lX2ZpbHRlciwgMCwgImltYWdlIG5hbWUgZmlsdGVyIiwgInByb2ZpbGUgdGhlc2UgY29tbWEgc2VwYXJhdGVkIGltYWdlIiB9LAorCXsgInNlcGFyYXRlLWxpYiIsIDAsIFBPUFRfQVJHX0lOVCwgJnNlcGFyYXRlX2xpYiwgMCwgInNlcGFyYXRlIGxpYnJhcnkgc2FtcGxlcyBmb3IgZWFjaCBkaXN0aW5jdCBhcHBsaWNhdGlvbiIsICJbMHwxXSIsIH0sCisJeyAic2VwYXJhdGUta2VybmVsIiwgMCwgUE9QVF9BUkdfSU5ULCAmc2VwYXJhdGVfa2VybmVsLCAwLCAic2VwYXJhdGUga2VybmVsIHNhbXBsZXMgZm9yIGVhY2ggZGlzdGluY3QgYXBwbGljYXRpb24iLCAiWzB8MV0iLCB9LAorCXsgInNlcGFyYXRlLXRocmVhZCIsIDAsIFBPUFRfQVJHX0lOVCwgJnNlcGFyYXRlX3RocmVhZCwgMCwgInRocmVhZC1wcm9maWxpbmcgbW9kZSIsICJbMHwxXSIgfSwKKwl7ICJzZXBhcmF0ZS1jcHUiLCAwLCBQT1BUX0FSR19JTlQsICZzZXBhcmF0ZV9jcHUsIDAsICJzZXBhcmF0ZSBzYW1wbGVzIGZvciBlYWNoIENQVSIsICJbMHwxXSIgfSwKKwl7ICJldmVudHMiLCAnZScsIFBPUFRfQVJHX1NUUklORywgJmV2ZW50cywgMCwgImV2ZW50cyBsaXN0IiwgIltldmVudHNdIiB9LAorCXsgInZlcnNpb24iLCAndicsIFBPUFRfQVJHX05PTkUsICZzaG93dmVycywgMCwgInNob3cgdmVyc2lvbiIsIE5VTEwsIH0sCisJeyAidmVyYm9zZSIsICdWJywgUE9QVF9BUkdfU1RSSU5HLCAmdmVyYm9zZSwgMCwgImJlIHZlcmJvc2UgaW4gbG9nIGZpbGUiLCAiYWxsLHNmaWxlLGFyY3Msc2FtcGxlcyxtb2R1bGUsbWlzYyIsIH0sCisJeyAiZXh0LWZlYXR1cmUiLCAneCcsIFBPUFRfQVJHX1NUUklORywgJmV4dF9mZWF0dXJlLCAxLCAiZW5hYmxlIGV4dGVuZGVkIGZlYXR1cmUiLCAiPGV4dGVuZGVkLWZlYXR1cmUtbmFtZT46W2FyZ3NdIiwgfSwKKwlQT1BUX0FVVE9IRUxQCisJeyBOVUxMLCAwLCAwLCBOVUxMLCAwLCBOVUxMLCBOVUxMLCB9LAorfTsKKyAKKwordm9pZCBvcGRfb3Blbl9sb2dmaWxlKHZvaWQpCit7CisJaWYgKG9wZW4ob3BfbG9nX2ZpbGUsIE9fV1JPTkxZfE9fQ1JFQVR8T19OT0NUVFl8T19BUFBFTkQsIDA2NDQpID09IC0xKSB7CisJCXBlcnJvcigib3Byb2ZpbGVkOiBjb3VsZG4ndCByZS1vcGVuIHN0ZG91dDogIik7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisKKwlpZiAoZHVwMigxLCAyKSA9PSAtMSkgeworCQlwZXJyb3IoIm9wcm9maWxlZDogY291bGRuJ3QgZHVwIHN0ZG91dCB0byBzdGRlcnI6ICIpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorfQorIAorCisvKioKKyAqIG9wZF9mb3JrIC0gZm9yayBhbmQgcmV0dXJuIGFzIGNoaWxkCisgKgorICogZm9yaygpIGFuZCBleGl0IHRoZSBwYXJlbnQgd2l0aCBfZXhpdCgpLgorICogRmFpbHVyZSBpcyBmYXRhbC4KKyAqLworc3RhdGljIHZvaWQgb3BkX2Zvcmsodm9pZCkKK3sKKwlzd2l0Y2ggKGZvcmsoKSkgeworCQljYXNlIC0xOgorCQkJcGVycm9yKCJvcHJvZmlsZWQ6IGZvcmsoKSBmYWlsZWQ6ICIpOworCQkJZXhpdChFWElUX0ZBSUxVUkUpOworCQkJYnJlYWs7CisJCWNhc2UgMDoKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJLyogcGFyZW50ICovCisJCQlfZXhpdChFWElUX1NVQ0NFU1MpOworCQkJYnJlYWs7CisJfQorfQorCisgCitzdGF0aWMgdm9pZCBvcGRfZ29fZGFlbW9uKHZvaWQpCit7CisJb3BkX2ZvcmsoKTsKKworCWlmIChjaGRpcihvcF9zZXNzaW9uX2RpcikpIHsKKwkJZnByaW50ZihzdGRlcnIsICJvcHJvZmlsZWQ6IG9wZF9nb19kYWVtb246IGNvdWxkbid0IGNoZGlyIHRvICVzOiAlcyIsCisJCQlvcF9zZXNzaW9uX2Rpciwgc3RyZXJyb3IoZXJybm8pKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKworCWlmIChzZXRzaWQoKSA8IDApIHsKKwkJcGVycm9yKCJvcHJvZmlsZWQ6IG9wZF9nb19kYWVtb246IGNvdWxkbid0IHNldHNpZDogIik7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisKKwlvcGRfZm9yaygpOworfQorCisKK3N0YXRpYyB2b2lkIG9wZF93cml0ZV9hYmkodm9pZCkKK3sKKwljaGFyICogY2J1ZjsKKyAKKwljYnVmID0geG1hbGxvYyhzdHJsZW4ob3Bfc2Vzc2lvbl9kaXIpICsgNSk7CisJc3RyY3B5KGNidWYsIG9wX3Nlc3Npb25fZGlyKTsKKwlzdHJjYXQoY2J1ZiwgIi9hYmkiKTsKKwlvcF93cml0ZV9hYmlfdG9fZmlsZShjYnVmKTsKKwlmcmVlKGNidWYpOworfQorCisKKy8qKgorICogb3BkX2FsYXJtIC0gc3luYyBmaWxlcyBhbmQgcmVwb3J0IHN0YXRzCisgKi8KK3N0YXRpYyB2b2lkIG9wZF9hbGFybShpbnQgdmFsIF9fYXR0cmlidXRlX18oKHVudXNlZCkpKQoreworCXNpZ25hbF9hbGFybSA9IDE7Cit9CisgCisKKy8qIHJlLW9wZW4gbG9nZmlsZSBmb3IgbG9ncm90YXRlICovCitzdGF0aWMgdm9pZCBvcGRfc2lnaHVwKGludCB2YWwgX19hdHRyaWJ1dGVfXygodW51c2VkKSkpCit7CisJc2lnbmFsX2h1cCA9IDE7Cit9CisKKworc3RhdGljIHZvaWQgb3BkX3NpZ3Rlcm0oaW50IHZhbCBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKSkKK3sKKwlzaWduYWxfdGVybSA9IDE7Cit9CisKK3N0YXRpYyB2b2lkIG9wZF9zaWdjaGlsZChpbnQgdmFsIF9fYXR0cmlidXRlX18oKHVudXNlZCkpKQoreworCXNpZ25hbF9jaGlsZCA9IDE7Cit9CisgCisKK3N0YXRpYyB2b2lkIG9wZF9zaWd1c3IxKGludCB2YWwgX19hdHRyaWJ1dGVfXygodW51c2VkKSkpCit7CisJc2lnbmFsX3VzcjEgPSAxOworfQorCisgCitzdGF0aWMgdm9pZCBvcGRfc2lndXNyMihpbnQgdmFsIF9fYXR0cmlidXRlX18oKHVudXNlZCkpKQoreworCXNpZ25hbF91c3IyID0gMTsKK30KKworCitzdGF0aWMgdm9pZCBvcGRfc2V0dXBfc2lnbmFscyh2b2lkKQoreworCXN0cnVjdCBzaWdhY3Rpb24gYWN0OworIAorCWFjdC5zYV9oYW5kbGVyID0gb3BkX2FsYXJtOworCWFjdC5zYV9mbGFncyA9IDA7CisJc2lnZW1wdHlzZXQoJmFjdC5zYV9tYXNrKTsKKworCWlmIChzaWdhY3Rpb24oU0lHQUxSTSwgJmFjdCwgTlVMTCkpIHsKKwkJcGVycm9yKCJvcHJvZmlsZWQ6IGluc3RhbGwgb2YgU0lHQUxSTSBoYW5kbGVyIGZhaWxlZDogIik7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisKKwlhY3Quc2FfaGFuZGxlciA9IG9wZF9zaWdodXA7CisJYWN0LnNhX2ZsYWdzID0gMDsKKwlzaWdlbXB0eXNldCgmYWN0LnNhX21hc2spOworCXNpZ2FkZHNldCgmYWN0LnNhX21hc2ssIFNJR0FMUk0pOworCisJaWYgKHNpZ2FjdGlvbihTSUdIVVAsICZhY3QsIE5VTEwpKSB7CisJCXBlcnJvcigib3Byb2ZpbGVkOiBpbnN0YWxsIG9mIFNJR0hVUCBoYW5kbGVyIGZhaWxlZDogIik7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisKKwlhY3Quc2FfaGFuZGxlciA9IG9wZF9zaWd0ZXJtOworCWFjdC5zYV9mbGFncyA9IDA7CisJc2lnZW1wdHlzZXQoJmFjdC5zYV9tYXNrKTsKKwlzaWdhZGRzZXQoJmFjdC5zYV9tYXNrLCBTSUdURVJNKTsKKworCWlmIChzaWdhY3Rpb24oU0lHVEVSTSwgJmFjdCwgTlVMTCkpIHsKKwkJcGVycm9yKCJvcHJvZmlsZWQ6IGluc3RhbGwgb2YgU0lHVEVSTSBoYW5kbGVyIGZhaWxlZDogIik7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisKKwlhY3Quc2FfaGFuZGxlciA9IG9wZF9zaWdjaGlsZDsKKwlhY3Quc2FfZmxhZ3MgPSAwOworCXNpZ2VtcHR5c2V0KCZhY3Quc2FfbWFzayk7CisJc2lnYWRkc2V0KCZhY3Quc2FfbWFzaywgU0lHQ0hMRCk7CisKKwlpZiAoc2lnYWN0aW9uKFNJR0NITEQsICZhY3QsIE5VTEwpKSB7CisJCXBlcnJvcigib3Byb2ZpbGVkOiBpbnN0YWxsIG9mIFNJR0NITEQgaGFuZGxlciBmYWlsZWQ6ICIpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorCisJYWN0LnNhX2hhbmRsZXIgPSBvcGRfc2lndXNyMTsKKwlhY3Quc2FfZmxhZ3MgPSAwOworCXNpZ2VtcHR5c2V0KCZhY3Quc2FfbWFzayk7CisJc2lnYWRkc2V0KCZhY3Quc2FfbWFzaywgU0lHVEVSTSk7CisKKwlpZiAoc2lnYWN0aW9uKFNJR1VTUjEsICZhY3QsIE5VTEwpKSB7CisJCXBlcnJvcigib3Byb2ZpbGVkOiBpbnN0YWxsIG9mIFNJR1VTUjEgaGFuZGxlciBmYWlsZWQ6ICIpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorCisJYWN0LnNhX2hhbmRsZXIgPSBvcGRfc2lndXNyMjsKKwlhY3Quc2FfZmxhZ3MgPSAwOworCXNpZ2VtcHR5c2V0KCZhY3Quc2FfbWFzayk7CisJc2lnYWRkc2V0KCZhY3Quc2FfbWFzaywgU0lHVEVSTSk7CisKKwlpZiAoc2lnYWN0aW9uKFNJR1VTUjIsICZhY3QsIE5VTEwpKSB7CisJCXBlcnJvcigib3Byb2ZpbGVkOiBpbnN0YWxsIG9mIFNJR1VTUjIgaGFuZGxlciBmYWlsZWQ6ICIpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorfQorCisKK3N0cnVjdCBvcGRfaGFzaGVkX25hbWUgeworCWNoYXIgKiBuYW1lOworCXN0cnVjdCBsaXN0X2hlYWQgbmV4dDsKK307CisKKworc3RhdGljIHZvaWQgYWRkX2ltYWdlX2ZpbHRlcihjaGFyIGNvbnN0ICogbmFtZSkKK3sKKwlzaXplX3QgaGFzaDsKKwlzdHJ1Y3Qgb3BkX2hhc2hlZF9uYW1lICogZWx0ID0geG1hbGxvYyhzaXplb2Yoc3RydWN0IG9wZF9oYXNoZWRfbmFtZSkpOworCWVsdC0+bmFtZSA9IHhtYWxsb2MoUEFUSF9NQVgpOworCWlmICghcmVhbHBhdGgobmFtZSwgZWx0LT5uYW1lKSkgeworCQlmcmVlKGVsdC0+bmFtZSk7CisJCWZyZWUoZWx0KTsKKwkJcmV0dXJuOworCX0KKwloYXNoID0gb3BfaGFzaF9zdHJpbmcoZWx0LT5uYW1lKTsKKwl2ZXJicHJpbnRmKHZtaXNjLCAiQWRkaW5nIHRvIGltYWdlIGZpbHRlcjogXCIlc1wiXG4iLCBlbHQtPm5hbWUpOworCWxpc3RfYWRkKCZlbHQtPm5leHQsICZpbWFnZXNfZmlsdGVyW2hhc2ggJSBPUERfSU1BR0VfRklMVEVSX0hBU0hfU0laRV0pOworfQorCisKK3N0YXRpYyB2b2lkIG9wZF9wYXJzZV9pbWFnZV9maWx0ZXIodm9pZCkKK3sKKwlzaXplX3QgaTsKKwljaGFyIGNvbnN0ICogbGFzdCA9IGJpbmFyeV9uYW1lX2ZpbHRlcjsKKwljaGFyIGNvbnN0ICogY3VyID0gYmluYXJ5X25hbWVfZmlsdGVyOworCisJaWYgKCFiaW5hcnlfbmFtZV9maWx0ZXIpCisJCXJldHVybjsKKworCWZvciAoaSA9IDA7IGkgPCBPUERfSU1BR0VfRklMVEVSX0hBU0hfU0laRTsgKytpKQorCQlsaXN0X2luaXQoJmltYWdlc19maWx0ZXJbaV0pOworCisJd2hpbGUgKChjdXIgPSBzdHJjaHIobGFzdCwgJywnKSkgIT0gTlVMTCkgeworCQljaGFyICogdG1wID0gb3BfeHN0cm5kdXAobGFzdCwgY3VyIC0gbGFzdCk7CisJCWFkZF9pbWFnZV9maWx0ZXIodG1wKTsKKwkJZnJlZSh0bXApOworCQlsYXN0ID0gY3VyICsgMTsKKwl9CisJYWRkX2ltYWdlX2ZpbHRlcihsYXN0KTsKK30KKworCitpbnQgaXNfaW1hZ2VfaWdub3JlZChjaGFyIGNvbnN0ICogbmFtZSkKK3sKKwlzaXplX3QgaGFzaDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICogcG9zOworCisJaWYgKCFiaW5hcnlfbmFtZV9maWx0ZXIpCisJCXJldHVybiAwOworCQorCWhhc2ggPSBvcF9oYXNoX3N0cmluZyhuYW1lKTsKKworCWxpc3RfZm9yX2VhY2gocG9zLCAmaW1hZ2VzX2ZpbHRlcltoYXNoICUgT1BEX0lNQUdFX0ZJTFRFUl9IQVNIX1NJWkVdKSB7CisJCXN0cnVjdCBvcGRfaGFzaGVkX25hbWUgKiBoYXNoZWRfbmFtZSA9CisJCQlsaXN0X2VudHJ5KHBvcywgc3RydWN0IG9wZF9oYXNoZWRfbmFtZSwgbmV4dCk7CisJCWlmICghc3RyY21wKGhhc2hlZF9uYW1lLT5uYW1lLCBuYW1lKSkKKwkJCXJldHVybiAwOworCX0KKworCXJldHVybiAxOworfQorCisKKy8qKiByZXR1cm4gdGhlIGludCBpbiB0aGUgZ2l2ZW4gb3Byb2ZpbGVmcyBmaWxlICovCitpbnQgb3BkX3JlYWRfZnNfaW50KGNoYXIgY29uc3QgKiBwYXRoLCBjaGFyIGNvbnN0ICogbmFtZSwgaW50IGZhdGFsKQoreworCWNoYXIgZmlsZW5hbWVbUEFUSF9NQVggKyAxXTsKKwlzbnByaW50ZihmaWxlbmFtZSwgUEFUSF9NQVgsICIlcy8lcyIsIHBhdGgsIG5hbWUpOworCXJldHVybiBvcF9yZWFkX2ludF9mcm9tX2ZpbGUoZmlsZW5hbWUsIGZhdGFsKTsKK30KKworCitzdGF0aWMgdm9pZCBvcGRfaGFuZGxlX3ZlcmJvc2Vfb3B0aW9uKGNoYXIgY29uc3QgKiBuYW1lKQoreworCWlmICghc3RyY21wKG5hbWUsICJhbGwiKSkgeworCQl2c2ZpbGUgPSAxOworCQl2c2FtcGxlcyA9IDE7CisJCXZhcmNzID0gMTsKKwkJdm1vZHVsZSA9IDE7CisJCXZtaXNjID0gMTsKKwkJdmV4dD0gMTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAobmFtZSwgInNmaWxlIikpIHsKKwkJdnNmaWxlID0gMTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAobmFtZSwgImFyY3MiKSkgeworCQl2YXJjcyA9IDE7CisJfSBlbHNlIGlmICghc3RyY21wKG5hbWUsICJzYW1wbGVzIikpIHsKKwkJdnNhbXBsZXMgPSAxOworCX0gZWxzZSBpZiAoIXN0cmNtcChuYW1lLCAibW9kdWxlIikpIHsKKwkJdm1vZHVsZSA9IDE7CisJfSBlbHNlIGlmICghc3RyY21wKG5hbWUsICJtaXNjIikpIHsKKwkJdm1pc2MgPSAxOworCX0gZWxzZSBpZiAoIXN0cmNtcChuYW1lLCAiZXh0IikpIHsKKwkJdmV4dD0gMTsKKwl9IGVsc2UgeworCQlmcHJpbnRmKHN0ZGVyciwgInVua25vd24gdmVyYm9zZSBvcHRpb25zXG4iKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KK30KKworc3RhdGljIHZvaWQgb3BkX3BhcnNlX3ZlcmJvc2Uodm9pZCkKK3sKKwljaGFyIGNvbnN0ICogbGFzdCA9IHZlcmJvc2U7CisJY2hhciBjb25zdCAqIGN1ciA9IHZlcmJvc2U7CisKKwlpZiAoIXZlcmJvc2UpCisJCXJldHVybjsKKworCXdoaWxlICgoY3VyID0gc3RyY2hyKGxhc3QsICcsJykpICE9IE5VTEwpIHsKKwkJY2hhciAqIHRtcCA9IG9wX3hzdHJuZHVwKGxhc3QsIGN1ciAtIGxhc3QpOworCQlvcGRfaGFuZGxlX3ZlcmJvc2Vfb3B0aW9uKHRtcCk7CisJCWZyZWUodG1wKTsKKwkJbGFzdCA9IGN1ciArIDE7CisJfQorCW9wZF9oYW5kbGVfdmVyYm9zZV9vcHRpb24obGFzdCk7Cit9CisKKworc3RhdGljIHZvaWQgb3BkX29wdGlvbnMoaW50IGFyZ2MsIGNoYXIgY29uc3QgKiBhcmd2W10pCit7CisJcG9wdENvbnRleHQgb3B0Y29uOworCWNoYXIgKiB0bXA7CisKKwlvcHRjb24gPSBvcF9wb3B0R2V0Q29udGV4dChOVUxMLCBhcmdjLCBhcmd2LCBvcHRpb25zLCAwKTsKKworCWlmIChzaG93dmVycykKKwkJc2hvd192ZXJzaW9uKGFyZ3ZbMF0pOworCisJb3BkX3BhcnNlX3ZlcmJvc2UoKTsKKworCWlmIChzZXBhcmF0ZV9rZXJuZWwpCisJCXNlcGFyYXRlX2xpYiA9IDE7CisKKwljcHVfdHlwZSA9IG9wX2dldF9jcHVfdHlwZSgpOworCW9wX25yX2NvdW50ZXJzID0gb3BfZ2V0X25yX2NvdW50ZXJzKGNwdV90eXBlKTsKKworCWlmICghbm9fdm1saW51eCkgeworCQlpZiAoIXZtbGludXggfHwgIXN0cmNtcCgiIiwgdm1saW51eCkpIHsKKwkJCWZwcmludGYoc3RkZXJyLCAib3Byb2ZpbGVkOiBubyB2bWxpbnV4IHNwZWNpZmllZC5cbiIpOworCQkJcG9wdFByaW50SGVscChvcHRjb24sIHN0ZGVyciwgMCk7CisJCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJCX0KKworCQkvKiBjYW5vbmljYWxpc2Ugdm1saW51eCBmaWxlbmFtZS4gZml4ICM2Mzc4MDUgKi8KKwkJdG1wID0geG1hbGxvYyhQQVRIX01BWCk7CisJCWlmIChyZWFscGF0aCh2bWxpbnV4LCB0bXApKQorCQkJdm1saW51eCA9IHRtcDsKKwkJZWxzZQorCQkJZnJlZSh0bXApOworCisJCWlmICgha2VybmVsX3JhbmdlIHx8ICFzdHJjbXAoIiIsIGtlcm5lbF9yYW5nZSkpIHsKKwkJCWZwcmludGYoc3RkZXJyLCAib3Byb2ZpbGVkOiBubyBrZXJuZWwgVk1BIHJhbmdlIHNwZWNpZmllZC5cbiIpOworCQkJcG9wdFByaW50SGVscChvcHRjb24sIHN0ZGVyciwgMCk7CisJCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJCX0KKwl9CisKKwlpZihvcGRfZXh0X2luaXRpYWxpemUoZXh0X2ZlYXR1cmUpICE9IEVYSVRfU1VDQ0VTUykKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCisJaWYgKGV2ZW50cyA9PSBOVUxMICYmIG5vX2V2ZW50X29rID09IDApIHsKKwkJZnByaW50ZihzdGRlcnIsICJvcHJvZmlsZWQ6IG5vIGV2ZW50cyBzcGVjaWZpZWQuXG4iKTsKKwkJcG9wdFByaW50SGVscChvcHRjb24sIHN0ZGVyciwgMCk7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisKKwlpZiAoIXhlbmltYWdlIHx8ICFzdHJjbXAoIiIsIHhlbmltYWdlKSkgeworCQlub194ZW4gPSAxOworCX0gZWxzZSB7CisJCW5vX3hlbiA9IDA7CisKKwkJLyogY2Fub25pY2FsaXNlIHhlbiBpbWFnZSBmaWxlbmFtZS4gKi8KKwkJdG1wID0geG1hbGxvYyhQQVRIX01BWCk7CisJCWlmIChyZWFscGF0aCh4ZW5pbWFnZSwgdG1wKSkKKwkJCXhlbmltYWdlID0gdG1wOworCQllbHNlCisJCQlmcmVlKHRtcCk7CisKKwkJaWYgKCF4ZW5fcmFuZ2UgfHwgIXN0cmNtcCgiIiwgeGVuX3JhbmdlKSkgeworCQkJZnByaW50ZihzdGRlcnIsICJvcHJvZmlsZWQ6IG5vIFhlbiBWTUEgcmFuZ2Ugc3BlY2lmaWVkLlxuIik7CisJCQlwb3B0UHJpbnRIZWxwKG9wdGNvbiwgc3RkZXJyLCAwKTsKKwkJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwkJfQorCX0KKworCWlmIChldmVudHMgIT0gTlVMTCkKKwkJb3BkX3BhcnNlX2V2ZW50cyhldmVudHMpOworCisJb3BkX3BhcnNlX2ltYWdlX2ZpbHRlcigpOworCisJcG9wdEZyZWVDb250ZXh0KG9wdGNvbik7Cit9CisKKworLyogZGV0ZXJtaW5lIHdoYXQga2VybmVsIHdlJ3JlIHJ1bm5pbmcgYW5kIHdoaWNoIGRhZW1vbgorICogdG8gdXNlCisgKi8KK3N0YXRpYyBzdHJ1Y3Qgb3Byb2ZpbGVkX29wcyAqIGdldF9vcHModm9pZCkKK3sKKwlzd2l0Y2ggKG9wX2dldF9pbnRlcmZhY2UoKSkgeworCQljYXNlIE9QX0lOVEVSRkFDRV8yNDoKKwkJCXByaW50ZigiVXNpbmcgMi40IE9Qcm9maWxlIGtlcm5lbCBpbnRlcmZhY2UuXG4iKTsKKwkJCXJldHVybiAmb3BkXzI0X29wczsKKwkJY2FzZSBPUF9JTlRFUkZBQ0VfMjY6CisJCQlwcmludGYoIlVzaW5nIDIuNisgT1Byb2ZpbGUga2VybmVsIGludGVyZmFjZS5cbiIpOworCQkJcmV0dXJuICZvcGRfMjZfb3BzOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJfQorCisJZnByaW50ZihzdGRlcnIsICJDb3VsZG4ndCBkZXRlcm1pbmUga2VybmVsIHZlcnNpb24uXG4iKTsKKwlleGl0KEVYSVRfRkFJTFVSRSk7CisJcmV0dXJuIE5VTEw7Cit9CisKKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgY29uc3QgKiBhcmd2W10pCit7CisJaW50IGVycjsKKwlzdHJ1Y3QgcmxpbWl0IHJsaW0gPSB7IDIwNDgsIDIwNDggfTsKKworCW9wZF9vcHRpb25zKGFyZ2MsIGFyZ3YpOworCWluaXRfb3BfY29uZmlnX2RpcnMoc2Vzc2lvbl9kaXIpOworCisJb3BkX3NldHVwX3NpZ25hbHMoKTsKKworCWVyciA9IHNldHJsaW1pdChSTElNSVRfTk9GSUxFLCAmcmxpbSk7CisJaWYgKGVycikKKwkJcGVycm9yKCJ3YXJuaW5nOiBjb3VsZCBub3Qgc2V0IFJMSU1JVF9OT0ZJTEUgdG8gMjA0ODogIik7CisKKwlvcGRfd3JpdGVfYWJpKCk7CisKKwlvcGRfb3BzID0gZ2V0X29wcygpOworCisJb3BkX29wcy0+aW5pdCgpOworCisJb3BkX2dvX2RhZW1vbigpOworCisJLyogY2xlYW4gdXAgZXZlcnkgMTAgbWludXRlcyAqLworCWFsYXJtKDYwICogMTApOworCisJaWYgKG9wX3dyaXRlX2xvY2tfZmlsZShvcF9sb2NrX2ZpbGUpKSB7CisJCWZwcmludGYoc3RkZXJyLCAib3Byb2ZpbGVkOiBjb3VsZCBub3QgY3JlYXRlIGxvY2sgZmlsZSAlc1xuIiwKKwkJCW9wX2xvY2tfZmlsZSk7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisKKwlvcGRfb3BzLT5zdGFydCgpOworCisJb3BkX29wcy0+ZXhpdCgpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9kYWVtb24vb3Byb2ZpbGVkLmggYi9vcHJvZmlsZS0wLjkuNy9kYWVtb24vb3Byb2ZpbGVkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjMxOWRmMQotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2RhZW1vbi9vcHJvZmlsZWQuaApAQCAtMCwwICsxLDY5IEBACisvKioKKyAqIEBmaWxlIGRhZW1vbi9vcHJvZmlsZWQuaAorICogSW5pdGlhbGlzYXRpb24gYW5kIHNldHVwCisgKgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMiwgMjAwMyBPUHJvZmlsZSBhdXRob3JzCisgKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORworICoKKyAqIEBhdXRob3IgSm9obiBMZXZvbgorICogQGF1dGhvciBQaGlsaXBwZSBFbGllCisgKiBNb2RpZmllZCBieSBBcmF2aW5kIE1lbm9uIGZvciBYZW4KKyAqIFRoZXNlIG1vZGlmaWNhdGlvbnMgYXJlOgorICogQ29weXJpZ2h0IChDKSAyMDA1IEhld2xldHQtUGFja2FyZCBDby4KKyAqLworCisjaWZuZGVmIE9QUk9GSUxFRF9ICisKKyNpbmNsdWRlIDxzaWduYWwuaD4KKworc3RydWN0IG9wcm9maWxlZF9vcHMgeworCXZvaWQgKCppbml0KSh2b2lkKTsKKwl2b2lkICgqc3RhcnQpKHZvaWQpOworCXZvaWQgKCpleGl0KSh2b2lkKTsKK307CisKKworLyoqCisgKiBvcGRfb3Blbl9sb2dmaWxlIC0gb3BlbiB0aGUgbG9nIGZpbGUKKyAqCisgKiBPcGVuIHRoZSBsb2dmaWxlIG9uIHN0ZG91dCBhbmQgc3RkZXJyLiBUaGlzIGZ1bmN0aW9uCisgKiBhc3N1bWVzIHRoYXQgMSBhbmQgMiBhcmUgdGhlIGxvd2VzdCBjbG9zZSgpZCBmaWxlCisgKiBkZXNjcmlwdG9ycy4gRmFpbHVyZSB0byBvcGVuIG9uIGVpdGhlciBkZXNjcmlwdG9yIGlzCisgKiBhIGZhdGFsIGVycm9yLgorICovCit2b2lkIG9wZF9vcGVuX2xvZ2ZpbGUodm9pZCk7CisKKyAKKy8qKgorICogaXNfaW1hZ2VfaWdub3JlZCAtIGNoZWNrIGlmIHdlIG11c3QgaWdub3JlIHRoaXMgaW1hZ2UKKyAqIEBwYXJhbSBuYW1lIHRoZSBuYW1lIHRvIGNoZWNrCisgKgorICogUmV0dXJuIHRydWUgaWYgdGhlIGltYWdlIHNob3VsZCBub3QgYmUgcHJvZmlsZWQKKyAqLworaW50IGlzX2ltYWdlX2lnbm9yZWQoY2hhciBjb25zdCAqIG5hbWUpOworCisvKiogcmV0dXJuIHRoZSBpbnQgaW4gdGhlIGdpdmVuIG9wcm9maWxlZnMgZmlsZSwgZXJyb3IgaXMgZmF0YWwgaWYgIWlzX2ZhdGFsICovCitpbnQgb3BkX3JlYWRfZnNfaW50KGNoYXIgY29uc3QgKiBwYXRoLCBjaGFyIGNvbnN0ICogbmFtZSwgaW50IGlzX2ZhdGFsKTsKKworCisvKiogZ2xvYmFsIHZhcmlhYmxlIHBvc2l0aW9uZWQgYnkgc2lnbmFsIGhhbmRsZXIgKi8KK2V4dGVybiBzaWdfYXRvbWljX3Qgc2lnbmFsX2FsYXJtOworZXh0ZXJuIHNpZ19hdG9taWNfdCBzaWduYWxfaHVwOworZXh0ZXJuIHNpZ19hdG9taWNfdCBzaWduYWxfdGVybTsKK2V4dGVybiBzaWdfYXRvbWljX3Qgc2lnbmFsX2NoaWxkOworZXh0ZXJuIHNpZ19hdG9taWNfdCBzaWduYWxfdXNyMTsKK2V4dGVybiBzaWdfYXRvbWljX3Qgc2lnbmFsX3VzcjI7CisKK2V4dGVybiB1bnNpZ25lZCBpbnQgb3BfbnJfY291bnRlcnM7CitleHRlcm4gaW50IHNlcGFyYXRlX2xpYjsKK2V4dGVybiBpbnQgc2VwYXJhdGVfa2VybmVsOworZXh0ZXJuIGludCBzZXBhcmF0ZV90aHJlYWQ7CitleHRlcm4gaW50IHNlcGFyYXRlX2NwdTsKK2V4dGVybiBpbnQgbm9fdm1saW51eDsKK2V4dGVybiBjaGFyICogdm1saW51eDsKK2V4dGVybiBjaGFyICoga2VybmVsX3JhbmdlOworZXh0ZXJuIGludCBub194ZW47CitleHRlcm4gY2hhciAqIHhlbmltYWdlOworZXh0ZXJuIGNoYXIgKiB4ZW5fcmFuZ2U7CisKKyNlbmRpZiAvKiBPUFJPRklMRURfSCAqLwpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvZGVwY29tcCBiL29wcm9maWxlLTAuOS43L2RlcGNvbXAKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZGY4ZWVhNwotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2RlcGNvbXAKQEAgLTAsMCArMSw2MzAgQEAKKyMhIC9iaW4vc2gKKyMgZGVwY29tcCAtIGNvbXBpbGUgYSBwcm9ncmFtIGdlbmVyYXRpbmcgZGVwZW5kZW5jaWVzIGFzIHNpZGUtZWZmZWN0cworCitzY3JpcHR2ZXJzaW9uPTIwMDktMDQtMjguMjE7ICMgVVRDCisKKyMgQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA5IEZyZWUKKyMgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyMgYW55IGxhdGVyIHZlcnNpb24uCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworIyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaWYgeW91CisjIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIHRoYXQgY29udGFpbnMgYQorIyBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHlvdSBtYXkgaW5jbHVkZSBpdCB1bmRlcgorIyB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisKKyMgT3JpZ2luYWxseSB3cml0dGVuIGJ5IEFsZXhhbmRyZSBPbGl2YSA8b2xpdmFAZGNjLnVuaWNhbXAuYnI+LgorCitjYXNlICQxIGluCisgICcnKQorICAgICBlY2hvICIkMDogTm8gY29tbWFuZC4gIFRyeSBcYCQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiAxPiYyCisgICAgIGV4aXQgMTsKKyAgICAgOzsKKyAgLWggfCAtLWgqKQorICAgIGNhdCA8PFxFT0YKK1VzYWdlOiBkZXBjb21wIFstLWhlbHBdIFstLXZlcnNpb25dIFBST0dSQU0gW0FSR1NdCisKK1J1biBQUk9HUkFNUyBBUkdTIHRvIGNvbXBpbGUgYSBmaWxlLCBnZW5lcmF0aW5nIGRlcGVuZGVuY2llcworYXMgc2lkZS1lZmZlY3RzLgorCitFbnZpcm9ubWVudCB2YXJpYWJsZXM6CisgIGRlcG1vZGUgICAgIERlcGVuZGVuY3kgdHJhY2tpbmcgbW9kZS4KKyAgc291cmNlICAgICAgU291cmNlIGZpbGUgcmVhZCBieSBgUFJPR1JBTVMgQVJHUycuCisgIG9iamVjdCAgICAgIE9iamVjdCBmaWxlIG91dHB1dCBieSBgUFJPR1JBTVMgQVJHUycuCisgIERFUERJUiAgICAgIGRpcmVjdG9yeSB3aGVyZSB0byBzdG9yZSBkZXBlbmRlbmNpZXMuCisgIGRlcGZpbGUgICAgIERlcGVuZGVuY3kgZmlsZSB0byBvdXRwdXQuCisgIHRtcGRlcGZpbGUgIFRlbXBvcmFyeSBmaWxlIHRvIHVzZSB3aGVuIG91dHB1dGluZyBkZXBlbmRlbmNpZXMuCisgIGxpYnRvb2wgICAgIFdoZXRoZXIgbGlidG9vbCBpcyB1c2VkICh5ZXMvbm8pLgorCitSZXBvcnQgYnVncyB0byA8YnVnLWF1dG9tYWtlQGdudS5vcmc+LgorRU9GCisgICAgZXhpdCAkPworICAgIDs7CisgIC12IHwgLS12KikKKyAgICBlY2hvICJkZXBjb21wICRzY3JpcHR2ZXJzaW9uIgorICAgIGV4aXQgJD8KKyAgICA7OworZXNhYworCitpZiB0ZXN0IC16ICIkZGVwbW9kZSIgfHwgdGVzdCAteiAiJHNvdXJjZSIgfHwgdGVzdCAteiAiJG9iamVjdCI7IHRoZW4KKyAgZWNobyAiZGVwY29tcDogVmFyaWFibGVzIHNvdXJjZSwgb2JqZWN0IGFuZCBkZXBtb2RlIG11c3QgYmUgc2V0IiAxPiYyCisgIGV4aXQgMQorZmkKKworIyBEZXBlbmRlbmNpZXMgZm9yIHN1Yi9iYXIubyBvciBzdWIvYmFyLm9iaiBnbyBpbnRvIHN1Yi8uZGVwcy9iYXIuUG8uCitkZXBmaWxlPSR7ZGVwZmlsZS1gZWNobyAiJG9iamVjdCIgfAorICBzZWQgJ3N8W15cXC9dKiR8JyR7REVQRElSLS5kZXBzfScvJnw7c3xcLlwoW14uXSpcKSR8LlBcMXw7c3xQb2JqJHxQb3wnYH0KK3RtcGRlcGZpbGU9JHt0bXBkZXBmaWxlLWBlY2hvICIkZGVwZmlsZSIgfCBzZWQgJ3MvXC5cKFteLl0qXCkkLy5UXDEvJ2B9CisKK3JtIC1mICIkdG1wZGVwZmlsZSIKKworIyBTb21lIG1vZGVzIHdvcmsganVzdCBsaWtlIG90aGVyIG1vZGVzLCBidXQgdXNlIGRpZmZlcmVudCBmbGFncy4gIFdlCisjIHBhcmFtZXRlcml6ZSBoZXJlLCBidXQgc3RpbGwgbGlzdCB0aGUgbW9kZXMgaW4gdGhlIGJpZyBjYXNlIGJlbG93LAorIyB0byBtYWtlIGRlcGVuZC5tNCBlYXNpZXIgdG8gd3JpdGUuICBOb3RlIHRoYXQgd2UgKmNhbm5vdCogdXNlIGEgY2FzZQorIyBoZXJlLCBiZWNhdXNlIHRoaXMgZmlsZSBjYW4gb25seSBjb250YWluIG9uZSBjYXNlIHN0YXRlbWVudC4KK2lmIHRlc3QgIiRkZXBtb2RlIiA9IGhwOyB0aGVuCisgICMgSFAgY29tcGlsZXIgdXNlcyAtTSBhbmQgbm8gZXh0cmEgYXJnLgorICBnY2NmbGFnPS1NCisgIGRlcG1vZGU9Z2NjCitmaQorCitpZiB0ZXN0ICIkZGVwbW9kZSIgPSBkYXNoWG1zdGRvdXQ7IHRoZW4KKyAgICMgVGhpcyBpcyBqdXN0IGxpa2UgZGFzaG1zdGRvdXQgd2l0aCBhIGRpZmZlcmVudCBhcmd1bWVudC4KKyAgIGRhc2htZmxhZz0teE0KKyAgIGRlcG1vZGU9ZGFzaG1zdGRvdXQKK2ZpCisKK2N5Z3BhdGhfdT0iY3lncGF0aCAtdSAtZiAtIgoraWYgdGVzdCAiJGRlcG1vZGUiID0gbXN2Y21zeXM7IHRoZW4KKyAgICMgVGhpcyBpcyBqdXN0IGxpa2UgbXN2aXN1YWxjcHAgYnV0IHcvbyBjeWdwYXRoIHRyYW5zbGF0aW9uLgorICAgIyBKdXN0IGNvbnZlcnQgdGhlIGJhY2tzbGFzaC1lc2NhcGVkIGJhY2tzbGFzaGVzIHRvIHNpbmdsZSBmb3J3YXJkCisgICAjIHNsYXNoZXMgdG8gc2F0aXNmeSBkZXBlbmQubTQKKyAgIGN5Z3BhdGhfdT0ic2VkIHMsXFxcXFxcXFwsLyxnIgorICAgZGVwbW9kZT1tc3Zpc3VhbGNwcAorZmkKKworY2FzZSAiJGRlcG1vZGUiIGluCitnY2MzKQorIyMgZ2NjIDMgaW1wbGVtZW50cyBkZXBlbmRlbmN5IHRyYWNraW5nIHRoYXQgZG9lcyBleGFjdGx5IHdoYXQKKyMjIHdlIHdhbnQuICBZYXkhICBOb3RlOiBmb3Igc29tZSByZWFzb24gbGlidG9vbCAxLjQgZG9lc24ndCBsaWtlCisjIyBpdCBpZiAtTUQgLU1QIGNvbWVzIGFmdGVyIHRoZSAtTUYgc3R1ZmYuICBIbW0uCisjIyBVbmZvcnR1bmF0ZWx5LCBGcmVlQlNEIGM4OSBhY2NlcHRhbmNlIG9mIGZsYWdzIGRlcGVuZHMgdXBvbgorIyMgdGhlIGNvbW1hbmQgbGluZSBhcmd1bWVudCBvcmRlcjsgc28gYWRkIHRoZSBmbGFncyB3aGVyZSB0aGV5CisjIyBhcHBlYXIgaW4gZGVwZW5kMi5hbS4gIE5vdGUgdGhhdCB0aGUgc2xvd2Rvd24gaW5jdXJyZWQgaGVyZQorIyMgYWZmZWN0cyBvbmx5IGNvbmZpZ3VyZTogaW4gbWFrZWZpbGVzLCAlRkFTVERFUCUgc2hvcnRjdXRzIHRoaXMuCisgIGZvciBhcmcKKyAgZG8KKyAgICBjYXNlICRhcmcgaW4KKyAgICAtYykgc2V0IGZub3JkICIkQCIgLU1UICIkb2JqZWN0IiAtTUQgLU1QIC1NRiAiJHRtcGRlcGZpbGUiICIkYXJnIiA7OworICAgICopICBzZXQgZm5vcmQgIiRAIiAiJGFyZyIgOzsKKyAgICBlc2FjCisgICAgc2hpZnQgIyBmbm9yZAorICAgIHNoaWZ0ICMgJGFyZworICBkb25lCisgICIkQCIKKyAgc3RhdD0kPworICBpZiB0ZXN0ICRzdGF0IC1lcSAwOyB0aGVuIDoKKyAgZWxzZQorICAgIHJtIC1mICIkdG1wZGVwZmlsZSIKKyAgICBleGl0ICRzdGF0CisgIGZpCisgIG12ICIkdG1wZGVwZmlsZSIgIiRkZXBmaWxlIgorICA7OworCitnY2MpCisjIyBUaGVyZSBhcmUgdmFyaW91cyB3YXlzIHRvIGdldCBkZXBlbmRlbmN5IG91dHB1dCBmcm9tIGdjYy4gIEhlcmUncworIyMgd2h5IHdlIHBpY2sgdGhpcyByYXRoZXIgb2JzY3VyZSBtZXRob2Q6CisjIyAtIERvbid0IHdhbnQgdG8gdXNlIC1NRCBiZWNhdXNlIHdlJ2QgbGlrZSB0aGUgZGVwZW5kZW5jaWVzIHRvIGVuZAorIyMgICB1cCBpbiBhIHN1YmRpci4gIEhhdmluZyB0byByZW5hbWUgYnkgaGFuZCBpcyB1Z2x5LgorIyMgICAoV2UgbWlnaHQgZW5kIHVwIGRvaW5nIHRoaXMgYW55d2F5IHRvIHN1cHBvcnQgb3RoZXIgY29tcGlsZXJzLikKKyMjIC0gVGhlIERFUEVOREVOQ0lFU19PVVRQVVQgZW52aXJvbm1lbnQgdmFyaWFibGUgbWFrZXMgZ2NjIGFjdCBsaWtlCisjIyAgIC1NTSwgbm90IC1NIChkZXNwaXRlIHdoYXQgdGhlIGRvY3Mgc2F5KS4KKyMjIC0gVXNpbmcgLU0gZGlyZWN0bHkgbWVhbnMgcnVubmluZyB0aGUgY29tcGlsZXIgdHdpY2UgKGV2ZW4gd29yc2UKKyMjICAgdGhhbiByZW5hbWluZykuCisgIGlmIHRlc3QgLXogIiRnY2NmbGFnIjsgdGhlbgorICAgIGdjY2ZsYWc9LU1ELAorICBmaQorICAiJEAiIC1XcCwiJGdjY2ZsYWckdG1wZGVwZmlsZSIKKyAgc3RhdD0kPworICBpZiB0ZXN0ICRzdGF0IC1lcSAwOyB0aGVuIDoKKyAgZWxzZQorICAgIHJtIC1mICIkdG1wZGVwZmlsZSIKKyAgICBleGl0ICRzdGF0CisgIGZpCisgIHJtIC1mICIkZGVwZmlsZSIKKyAgZWNobyAiJG9iamVjdCA6IFxcIiA+ICIkZGVwZmlsZSIKKyAgYWxwaGE9QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egorIyMgVGhlIHNlY29uZCAtZSBleHByZXNzaW9uIGhhbmRsZXMgRE9TLXN0eWxlIGZpbGUgbmFtZXMgd2l0aCBkcml2ZSBsZXR0ZXJzLgorICBzZWQgLWUgJ3MvXlteOl0qOiAvIC8nIFwKKyAgICAgIC1lICdzL15bJyRhbHBoYSddOlwvW146XSo6IC8gLycgPCAiJHRtcGRlcGZpbGUiID4+ICIkZGVwZmlsZSIKKyMjIFRoaXMgbmV4dCBwaWVjZSBvZiBtYWdpYyBhdm9pZHMgdGhlIGBkZWxldGVkIGhlYWRlciBmaWxlJyBwcm9ibGVtLgorIyMgVGhlIHByb2JsZW0gaXMgdGhhdCB3aGVuIGEgaGVhZGVyIGZpbGUgd2hpY2ggYXBwZWFycyBpbiBhIC5QIGZpbGUKKyMjIGlzIGRlbGV0ZWQsIHRoZSBkZXBlbmRlbmN5IGNhdXNlcyBtYWtlIHRvIGRpZSAoYmVjYXVzZSB0aGVyZSBpcworIyMgdHlwaWNhbGx5IG5vIHdheSB0byByZWJ1aWxkIHRoZSBoZWFkZXIpLiAgV2UgYXZvaWQgdGhpcyBieSBhZGRpbmcKKyMjIGR1bW15IGRlcGVuZGVuY2llcyBmb3IgZWFjaCBoZWFkZXIgZmlsZS4gIFRvbyBiYWQgZ2NjIGRvZXNuJ3QgZG8KKyMjIHRoaXMgZm9yIHVzIGRpcmVjdGx5LgorICB0ciAnICcgJworJyA8ICIkdG1wZGVwZmlsZSIgfAorIyMgU29tZSB2ZXJzaW9ucyBvZiBnY2MgcHV0IGEgc3BhY2UgYmVmb3JlIHRoZSBgOicuICBPbiB0aGUgdGhlb3J5CisjIyB0aGF0IHRoZSBzcGFjZSBtZWFucyBzb21ldGhpbmcsIHdlIGFkZCBhIHNwYWNlIHRvIHRoZSBvdXRwdXQgYXMKKyMjIHdlbGwuCisjIyBTb21lIHZlcnNpb25zIG9mIHRoZSBIUFVYIDEwLjIwIHNlZCBjYW4ndCBwcm9jZXNzIHRoaXMgaW52b2NhdGlvbgorIyMgY29ycmVjdGx5LiAgQnJlYWtpbmcgaXQgaW50byB0d28gc2VkIGludm9jYXRpb25zIGlzIGEgd29ya2Fyb3VuZC4KKyAgICBzZWQgLWUgJ3MvXlxcJC8vJyAtZSAnL14kL2QnIC1lICcvOiQvZCcgfCBzZWQgLWUgJ3MvJC8gOi8nID4+ICIkZGVwZmlsZSIKKyAgcm0gLWYgIiR0bXBkZXBmaWxlIgorICA7OworCitocCkKKyAgIyBUaGlzIGNhc2UgZXhpc3RzIG9ubHkgdG8gbGV0IGRlcGVuZC5tNCBkbyBpdHMgd29yay4gIEl0IHdvcmtzIGJ5CisgICMgbG9va2luZyBhdCB0aGUgdGV4dCBvZiB0aGlzIHNjcmlwdC4gIFRoaXMgY2FzZSB3aWxsIG5ldmVyIGJlIHJ1biwKKyAgIyBzaW5jZSBpdCBpcyBjaGVja2VkIGZvciBhYm92ZS4KKyAgZXhpdCAxCisgIDs7CisKK3NnaSkKKyAgaWYgdGVzdCAiJGxpYnRvb2wiID0geWVzOyB0aGVuCisgICAgIiRAIiAiLVdwLC1NRHVwZGF0ZSwkdG1wZGVwZmlsZSIKKyAgZWxzZQorICAgICIkQCIgLU1EdXBkYXRlICIkdG1wZGVwZmlsZSIKKyAgZmkKKyAgc3RhdD0kPworICBpZiB0ZXN0ICRzdGF0IC1lcSAwOyB0aGVuIDoKKyAgZWxzZQorICAgIHJtIC1mICIkdG1wZGVwZmlsZSIKKyAgICBleGl0ICRzdGF0CisgIGZpCisgIHJtIC1mICIkZGVwZmlsZSIKKworICBpZiB0ZXN0IC1mICIkdG1wZGVwZmlsZSI7IHRoZW4gICMgeWVzLCB0aGUgc291cmNlZmlsZSBkZXBlbmQgb24gb3RoZXIgZmlsZXMKKyAgICBlY2hvICIkb2JqZWN0IDogXFwiID4gIiRkZXBmaWxlIgorCisgICAgIyBDbGlwIG9mZiB0aGUgaW5pdGlhbCBlbGVtZW50ICh0aGUgZGVwZW5kZW50KS4gIERvbid0IHRyeSB0byBiZQorICAgICMgY2xldmVyIGFuZCByZXBsYWNlIHRoaXMgd2l0aCBzZWQgY29kZSwgYXMgSVJJWCBzZWQgd29uJ3QgaGFuZGxlCisgICAgIyBsaW5lcyB3aXRoIG1vcmUgdGhhbiBhIGZpeGVkIG51bWJlciBvZiBjaGFyYWN0ZXJzICg0MDk2IGluCisgICAgIyBJUklYIDYuMiBzZWQsIDgxOTIgaW4gSVJJWCA2LjUpLiAgV2UgYWxzbyByZW1vdmUgY29tbWVudCBsaW5lczsKKyAgICAjIHRoZSBJUklYIGNjIGFkZHMgY29tbWVudHMgbGlrZSBgIzpmZWMnIHRvIHRoZSBlbmQgb2YgdGhlCisgICAgIyBkZXBlbmRlbmN5IGxpbmUuCisgICAgdHIgJyAnICcKKycgPCAiJHRtcGRlcGZpbGUiIFwKKyAgICB8IHNlZCAtZSAncy9eLipcLm86Ly8nIC1lICdzLyMuKiQvLycgLWUgJy9eJC8gZCcgfCBcCisgICAgdHIgJworJyAnICcgPj4gIiRkZXBmaWxlIgorICAgIGVjaG8gPj4gIiRkZXBmaWxlIgorCisgICAgIyBUaGUgc2Vjb25kIHBhc3MgZ2VuZXJhdGVzIGEgZHVtbXkgZW50cnkgZm9yIGVhY2ggaGVhZGVyIGZpbGUuCisgICAgdHIgJyAnICcKKycgPCAiJHRtcGRlcGZpbGUiIFwKKyAgIHwgc2VkIC1lICdzL14uKlwubzovLycgLWUgJ3MvIy4qJC8vJyAtZSAnL14kLyBkJyAtZSAncy8kLzovJyBcCisgICA+PiAiJGRlcGZpbGUiCisgIGVsc2UKKyAgICAjIFRoZSBzb3VyY2VmaWxlIGRvZXMgbm90IGNvbnRhaW4gYW55IGRlcGVuZGVuY2llcywgc28ganVzdAorICAgICMgc3RvcmUgYSBkdW1teSBjb21tZW50IGxpbmUsIHRvIGF2b2lkIGVycm9ycyB3aXRoIHRoZSBNYWtlZmlsZQorICAgICMgImluY2x1ZGUgYmFzZW5hbWUuUGxvIiBzY2hlbWUuCisgICAgZWNobyAiI2R1bW15IiA+ICIkZGVwZmlsZSIKKyAgZmkKKyAgcm0gLWYgIiR0bXBkZXBmaWxlIgorICA7OworCithaXgpCisgICMgVGhlIEMgZm9yIEFJWCBDb21waWxlciB1c2VzIC1NIGFuZCBvdXRwdXRzIHRoZSBkZXBlbmRlbmNpZXMKKyAgIyBpbiBhIC51IGZpbGUuICBJbiBvbGRlciB2ZXJzaW9ucywgdGhpcyBmaWxlIGFsd2F5cyBsaXZlcyBpbiB0aGUKKyAgIyBjdXJyZW50IGRpcmVjdG9yeS4gIEFsc28sIHRoZSBBSVggY29tcGlsZXIgcHV0cyBgJG9iamVjdDonIGF0IHRoZQorICAjIHN0YXJ0IG9mIGVhY2ggbGluZTsgJG9iamVjdCBkb2Vzbid0IGhhdmUgZGlyZWN0b3J5IGluZm9ybWF0aW9uLgorICAjIFZlcnNpb24gNiB1c2VzIHRoZSBkaXJlY3RvcnkgaW4gYm90aCBjYXNlcy4KKyAgZGlyPWBlY2hvICIkb2JqZWN0IiB8IHNlZCAtZSAnc3wvW14vXSokfC98J2AKKyAgdGVzdCAieCRkaXIiID0gIngkb2JqZWN0IiAmJiBkaXI9CisgIGJhc2U9YGVjaG8gIiRvYmplY3QiIHwgc2VkIC1lICdzfF4uKi98fCcgLWUgJ3MvXC5vJC8vJyAtZSAncy9cLmxvJC8vJ2AKKyAgaWYgdGVzdCAiJGxpYnRvb2wiID0geWVzOyB0aGVuCisgICAgdG1wZGVwZmlsZTE9JGRpciRiYXNlLnUKKyAgICB0bXBkZXBmaWxlMj0kYmFzZS51CisgICAgdG1wZGVwZmlsZTM9JGRpci5saWJzLyRiYXNlLnUKKyAgICAiJEAiIC1XYywtTQorICBlbHNlCisgICAgdG1wZGVwZmlsZTE9JGRpciRiYXNlLnUKKyAgICB0bXBkZXBmaWxlMj0kZGlyJGJhc2UudQorICAgIHRtcGRlcGZpbGUzPSRkaXIkYmFzZS51CisgICAgIiRAIiAtTQorICBmaQorICBzdGF0PSQ/CisKKyAgaWYgdGVzdCAkc3RhdCAtZXEgMDsgdGhlbiA6CisgIGVsc2UKKyAgICBybSAtZiAiJHRtcGRlcGZpbGUxIiAiJHRtcGRlcGZpbGUyIiAiJHRtcGRlcGZpbGUzIgorICAgIGV4aXQgJHN0YXQKKyAgZmkKKworICBmb3IgdG1wZGVwZmlsZSBpbiAiJHRtcGRlcGZpbGUxIiAiJHRtcGRlcGZpbGUyIiAiJHRtcGRlcGZpbGUzIgorICBkbworICAgIHRlc3QgLWYgIiR0bXBkZXBmaWxlIiAmJiBicmVhaworICBkb25lCisgIGlmIHRlc3QgLWYgIiR0bXBkZXBmaWxlIjsgdGhlbgorICAgICMgRWFjaCBsaW5lIGlzIG9mIHRoZSBmb3JtIGBmb28ubzogZGVwZW5kZW50LmgnLgorICAgICMgRG8gdHdvIHBhc3Nlcywgb25lIHRvIGp1c3QgY2hhbmdlIHRoZXNlIHRvCisgICAgIyBgJG9iamVjdDogZGVwZW5kZW50LmgnIGFuZCBvbmUgdG8gc2ltcGx5IGBkZXBlbmRlbnQuaDonLgorICAgIHNlZCAtZSAicyxeLipcLlthLXpdKjosJG9iamVjdDosIiA8ICIkdG1wZGVwZmlsZSIgPiAiJGRlcGZpbGUiCisgICAgIyBUaGF0J3MgYSB0YWIgYW5kIGEgc3BhY2UgaW4gdGhlIFtdLgorICAgIHNlZCAtZSAncyxeLipcLlthLXpdKjpbCSBdKiwsJyAtZSAncywkLDosJyA8ICIkdG1wZGVwZmlsZSIgPj4gIiRkZXBmaWxlIgorICBlbHNlCisgICAgIyBUaGUgc291cmNlZmlsZSBkb2VzIG5vdCBjb250YWluIGFueSBkZXBlbmRlbmNpZXMsIHNvIGp1c3QKKyAgICAjIHN0b3JlIGEgZHVtbXkgY29tbWVudCBsaW5lLCB0byBhdm9pZCBlcnJvcnMgd2l0aCB0aGUgTWFrZWZpbGUKKyAgICAjICJpbmNsdWRlIGJhc2VuYW1lLlBsbyIgc2NoZW1lLgorICAgIGVjaG8gIiNkdW1teSIgPiAiJGRlcGZpbGUiCisgIGZpCisgIHJtIC1mICIkdG1wZGVwZmlsZSIKKyAgOzsKKworaWNjKQorICAjIEludGVsJ3MgQyBjb21waWxlciB1bmRlcnN0YW5kcyBgLU1EIC1NRiBmaWxlJy4gIEhvd2V2ZXIgb24KKyAgIyAgICBpY2MgLU1EIC1NRiBmb28uZCAtYyAtbyBzdWIvZm9vLm8gc3ViL2Zvby5jCisgICMgSUNDIDcuMCB3aWxsIGZpbGwgZm9vLmQgd2l0aCBzb21ldGhpbmcgbGlrZQorICAjICAgIGZvby5vOiBzdWIvZm9vLmMKKyAgIyAgICBmb28ubzogc3ViL2Zvby5oCisgICMgd2hpY2ggaXMgd3JvbmcuICBXZSB3YW50OgorICAjICAgIHN1Yi9mb28ubzogc3ViL2Zvby5jCisgICMgICAgc3ViL2Zvby5vOiBzdWIvZm9vLmgKKyAgIyAgICBzdWIvZm9vLmM6CisgICMgICAgc3ViL2Zvby5oOgorICAjIElDQyA3LjEgd2lsbCBvdXRwdXQKKyAgIyAgICBmb28ubzogc3ViL2Zvby5jIHN1Yi9mb28uaAorICAjIGFuZCB3aWxsIHdyYXAgbG9uZyBsaW5lcyB1c2luZyBcIDoKKyAgIyAgICBmb28ubzogc3ViL2Zvby5jIC4uLiBcCisgICMgICAgIHN1Yi9mb28uaCAuLi4gXAorICAjICAgICAuLi4KKworICAiJEAiIC1NRCAtTUYgIiR0bXBkZXBmaWxlIgorICBzdGF0PSQ/CisgIGlmIHRlc3QgJHN0YXQgLWVxIDA7IHRoZW4gOgorICBlbHNlCisgICAgcm0gLWYgIiR0bXBkZXBmaWxlIgorICAgIGV4aXQgJHN0YXQKKyAgZmkKKyAgcm0gLWYgIiRkZXBmaWxlIgorICAjIEVhY2ggbGluZSBpcyBvZiB0aGUgZm9ybSBgZm9vLm86IGRlcGVuZGVudC5oJywKKyAgIyBvciBgZm9vLm86IGRlcDEuaCBkZXAyLmggXCcsIG9yIGAgZGVwMy5oIGRlcDQuaCBcJy4KKyAgIyBEbyB0d28gcGFzc2VzLCBvbmUgdG8ganVzdCBjaGFuZ2UgdGhlc2UgdG8KKyAgIyBgJG9iamVjdDogZGVwZW5kZW50LmgnIGFuZCBvbmUgdG8gc2ltcGx5IGBkZXBlbmRlbnQuaDonLgorICBzZWQgInMsXlteOl0qOiwkb2JqZWN0IDosIiA8ICIkdG1wZGVwZmlsZSIgPiAiJGRlcGZpbGUiCisgICMgU29tZSB2ZXJzaW9ucyBvZiB0aGUgSFBVWCAxMC4yMCBzZWQgY2FuJ3QgcHJvY2VzcyB0aGlzIGludm9jYXRpb24KKyAgIyBjb3JyZWN0bHkuICBCcmVha2luZyBpdCBpbnRvIHR3byBzZWQgaW52b2NhdGlvbnMgaXMgYSB3b3JrYXJvdW5kLgorICBzZWQgJ3MsXlteOl0qOiBcKC4qXCkkLFwxLDtzL15cXCQvLzsvXiQvZDsvOiQvZCcgPCAiJHRtcGRlcGZpbGUiIHwKKyAgICBzZWQgLWUgJ3MvJC8gOi8nID4+ICIkZGVwZmlsZSIKKyAgcm0gLWYgIiR0bXBkZXBmaWxlIgorICA7OworCitocDIpCisgICMgVGhlICJocCIgc3RhbnphIGFib3ZlIGRvZXMgbm90IHdvcmsgd2l0aCBhQ0MgKEMrKykgYW5kIEhQJ3MgaWE2NAorICAjIGNvbXBpbGVycywgd2hpY2ggaGF2ZSBpbnRlZ3JhdGVkIHByZXByb2Nlc3NvcnMuICBUaGUgY29ycmVjdCBvcHRpb24KKyAgIyB0byB1c2Ugd2l0aCB0aGVzZSBpcyArTWFrZWQ7IGl0IHdyaXRlcyBkZXBlbmRlbmNpZXMgdG8gYSBmaWxlIG5hbWVkCisgICMgJ2Zvby5kJywgd2hpY2ggbGFuZHMgbmV4dCB0byB0aGUgb2JqZWN0IGZpbGUsIHdoZXJldmVyIHRoYXQKKyAgIyBoYXBwZW5zIHRvIGJlLgorICAjIE11Y2ggb2YgdGhpcyBpcyBzaW1pbGFyIHRvIHRoZSB0cnU2NCBjYXNlOyBzZWUgY29tbWVudHMgdGhlcmUuCisgIGRpcj1gZWNobyAiJG9iamVjdCIgfCBzZWQgLWUgJ3N8L1teL10qJHwvfCdgCisgIHRlc3QgIngkZGlyIiA9ICJ4JG9iamVjdCIgJiYgZGlyPQorICBiYXNlPWBlY2hvICIkb2JqZWN0IiB8IHNlZCAtZSAnc3xeLiovfHwnIC1lICdzL1wubyQvLycgLWUgJ3MvXC5sbyQvLydgCisgIGlmIHRlc3QgIiRsaWJ0b29sIiA9IHllczsgdGhlbgorICAgIHRtcGRlcGZpbGUxPSRkaXIkYmFzZS5kCisgICAgdG1wZGVwZmlsZTI9JGRpci5saWJzLyRiYXNlLmQKKyAgICAiJEAiIC1XYywrTWFrZWQKKyAgZWxzZQorICAgIHRtcGRlcGZpbGUxPSRkaXIkYmFzZS5kCisgICAgdG1wZGVwZmlsZTI9JGRpciRiYXNlLmQKKyAgICAiJEAiICtNYWtlZAorICBmaQorICBzdGF0PSQ/CisgIGlmIHRlc3QgJHN0YXQgLWVxIDA7IHRoZW4gOgorICBlbHNlCisgICAgIHJtIC1mICIkdG1wZGVwZmlsZTEiICIkdG1wZGVwZmlsZTIiCisgICAgIGV4aXQgJHN0YXQKKyAgZmkKKworICBmb3IgdG1wZGVwZmlsZSBpbiAiJHRtcGRlcGZpbGUxIiAiJHRtcGRlcGZpbGUyIgorICBkbworICAgIHRlc3QgLWYgIiR0bXBkZXBmaWxlIiAmJiBicmVhaworICBkb25lCisgIGlmIHRlc3QgLWYgIiR0bXBkZXBmaWxlIjsgdGhlbgorICAgIHNlZCAtZSAicyxeLipcLlthLXpdKjosJG9iamVjdDosIiAiJHRtcGRlcGZpbGUiID4gIiRkZXBmaWxlIgorICAgICMgQWRkIGBkZXBlbmRlbnQuaDonIGxpbmVzLgorICAgIHNlZCAtbmUgJzIsJHsKKwkgICAgICAgcy9eICovLworCSAgICAgICBzLyBcXCokLy8KKwkgICAgICAgcy8kLzovCisJICAgICAgIHAKKwkgICAgIH0nICIkdG1wZGVwZmlsZSIgPj4gIiRkZXBmaWxlIgorICBlbHNlCisgICAgZWNobyAiI2R1bW15IiA+ICIkZGVwZmlsZSIKKyAgZmkKKyAgcm0gLWYgIiR0bXBkZXBmaWxlIiAiJHRtcGRlcGZpbGUyIgorICA7OworCit0cnU2NCkKKyAgICMgVGhlIFRydTY0IGNvbXBpbGVyIHVzZXMgLU1EIHRvIGdlbmVyYXRlIGRlcGVuZGVuY2llcyBhcyBhIHNpZGUKKyAgICMgZWZmZWN0LiAgYGNjIC1NRCAtbyBmb28ubyAuLi4nIHB1dHMgdGhlIGRlcGVuZGVuY2llcyBpbnRvIGBmb28uby5kJy4KKyAgICMgQXQgbGVhc3Qgb24gQWxwaGEvUmVkaGF0IDYuMSwgQ29tcGFxIENDQyBWNi4yLTUwNCBzZWVtcyB0byBwdXQKKyAgICMgZGVwZW5kZW5jaWVzIGluIGBmb28uZCcgaW5zdGVhZCwgc28gd2UgY2hlY2sgZm9yIHRoYXQgdG9vLgorICAgIyBTdWJkaXJlY3RvcmllcyBhcmUgcmVzcGVjdGVkLgorICAgZGlyPWBlY2hvICIkb2JqZWN0IiB8IHNlZCAtZSAnc3wvW14vXSokfC98J2AKKyAgIHRlc3QgIngkZGlyIiA9ICJ4JG9iamVjdCIgJiYgZGlyPQorICAgYmFzZT1gZWNobyAiJG9iamVjdCIgfCBzZWQgLWUgJ3N8Xi4qL3x8JyAtZSAncy9cLm8kLy8nIC1lICdzL1wubG8kLy8nYAorCisgICBpZiB0ZXN0ICIkbGlidG9vbCIgPSB5ZXM7IHRoZW4KKyAgICAgICMgV2l0aCBUcnU2NCBjYywgc2hhcmVkIG9iamVjdHMgY2FuIGFsc28gYmUgdXNlZCB0byBtYWtlIGEKKyAgICAgICMgc3RhdGljIGxpYnJhcnkuICBUaGlzIG1lY2hhbmlzbSBpcyB1c2VkIGluIGxpYnRvb2wgMS40IHNlcmllcyB0bworICAgICAgIyBoYW5kbGUgYm90aCBzaGFyZWQgYW5kIHN0YXRpYyBsaWJyYXJpZXMgaW4gYSBzaW5nbGUgY29tcGlsYXRpb24uCisgICAgICAjIFdpdGggbGlidG9vbCAxLjQsIGRlcGVuZGVuY2llcyB3ZXJlIG91dHB1dCBpbiAkZGlyLmxpYnMvJGJhc2UubG8uZC4KKyAgICAgICMKKyAgICAgICMgV2l0aCBsaWJ0b29sIDEuNSB0aGlzIGV4Y2VwdGlvbiB3YXMgcmVtb3ZlZCwgYW5kIGxpYnRvb2wgbm93CisgICAgICAjIGdlbmVyYXRlcyAyIHNlcGFyYXRlIG9iamVjdHMgZm9yIHRoZSAyIGxpYnJhcmllcy4gIFRoZXNlIHR3bworICAgICAgIyBjb21waWxhdGlvbnMgb3V0cHV0IGRlcGVuZGVuY2llcyBpbiAkZGlyLmxpYnMvJGJhc2Uuby5kIGFuZAorICAgICAgIyBpbiAkZGlyJGJhc2Uuby5kLiAgV2UgaGF2ZSB0byBjaGVjayBmb3IgYm90aCBmaWxlcywgYmVjYXVzZQorICAgICAgIyBvbmUgb2YgdGhlIHR3byBjb21waWxhdGlvbnMgY2FuIGJlIGRpc2FibGVkLiAgV2Ugc2hvdWxkIHByZWZlcgorICAgICAgIyAkZGlyJGJhc2Uuby5kIG92ZXIgJGRpci5saWJzLyRiYXNlLm8uZCBiZWNhdXNlIHRoZSBsYXR0ZXIgaXMKKyAgICAgICMgYXV0b21hdGljYWxseSBjbGVhbmVkIHdoZW4gLmxpYnMvIGlzIGRlbGV0ZWQsIHdoaWxlIGlnbm9yaW5nCisgICAgICAjIHRoZSBmb3JtZXIgd291bGQgY2F1c2UgYSBkaXN0Y2xlYW5jaGVjayBwYW5pYy4KKyAgICAgIHRtcGRlcGZpbGUxPSRkaXIubGlicy8kYmFzZS5sby5kICAgIyBsaWJ0b29sIDEuNAorICAgICAgdG1wZGVwZmlsZTI9JGRpciRiYXNlLm8uZCAgICAgICAgICAjIGxpYnRvb2wgMS41CisgICAgICB0bXBkZXBmaWxlMz0kZGlyLmxpYnMvJGJhc2Uuby5kICAgICMgbGlidG9vbCAxLjUKKyAgICAgIHRtcGRlcGZpbGU0PSRkaXIubGlicy8kYmFzZS5kICAgICAgIyBDb21wYXEgQ0NDIFY2LjItNTA0CisgICAgICAiJEAiIC1XYywtTUQKKyAgIGVsc2UKKyAgICAgIHRtcGRlcGZpbGUxPSRkaXIkYmFzZS5vLmQKKyAgICAgIHRtcGRlcGZpbGUyPSRkaXIkYmFzZS5kCisgICAgICB0bXBkZXBmaWxlMz0kZGlyJGJhc2UuZAorICAgICAgdG1wZGVwZmlsZTQ9JGRpciRiYXNlLmQKKyAgICAgICIkQCIgLU1ECisgICBmaQorCisgICBzdGF0PSQ/CisgICBpZiB0ZXN0ICRzdGF0IC1lcSAwOyB0aGVuIDoKKyAgIGVsc2UKKyAgICAgIHJtIC1mICIkdG1wZGVwZmlsZTEiICIkdG1wZGVwZmlsZTIiICIkdG1wZGVwZmlsZTMiICIkdG1wZGVwZmlsZTQiCisgICAgICBleGl0ICRzdGF0CisgICBmaQorCisgICBmb3IgdG1wZGVwZmlsZSBpbiAiJHRtcGRlcGZpbGUxIiAiJHRtcGRlcGZpbGUyIiAiJHRtcGRlcGZpbGUzIiAiJHRtcGRlcGZpbGU0IgorICAgZG8KKyAgICAgdGVzdCAtZiAiJHRtcGRlcGZpbGUiICYmIGJyZWFrCisgICBkb25lCisgICBpZiB0ZXN0IC1mICIkdG1wZGVwZmlsZSI7IHRoZW4KKyAgICAgIHNlZCAtZSAicyxeLipcLlthLXpdKjosJG9iamVjdDosIiA8ICIkdG1wZGVwZmlsZSIgPiAiJGRlcGZpbGUiCisgICAgICAjIFRoYXQncyBhIHRhYiBhbmQgYSBzcGFjZSBpbiB0aGUgW10uCisgICAgICBzZWQgLWUgJ3MsXi4qXC5bYS16XSo6WwkgXSosLCcgLWUgJ3MsJCw6LCcgPCAiJHRtcGRlcGZpbGUiID4+ICIkZGVwZmlsZSIKKyAgIGVsc2UKKyAgICAgIGVjaG8gIiNkdW1teSIgPiAiJGRlcGZpbGUiCisgICBmaQorICAgcm0gLWYgIiR0bXBkZXBmaWxlIgorICAgOzsKKworI25vc2lkZWVmZmVjdCkKKyAgIyBUaGlzIGNvbW1lbnQgYWJvdmUgaXMgdXNlZCBieSBhdXRvbWFrZSB0byB0ZWxsIHNpZGUtZWZmZWN0CisgICMgZGVwZW5kZW5jeSB0cmFja2luZyBtZWNoYW5pc21zIGZyb20gc2xvd2VyIG9uZXMuCisKK2Rhc2htc3Rkb3V0KQorICAjIEltcG9ydGFudCBub3RlOiBpbiBvcmRlciB0byBzdXBwb3J0IHRoaXMgbW9kZSwgYSBjb21waWxlciAqbXVzdCoKKyAgIyBhbHdheXMgd3JpdGUgdGhlIHByZXByb2Nlc3NlZCBmaWxlIHRvIHN0ZG91dCwgcmVnYXJkbGVzcyBvZiAtby4KKyAgIiRAIiB8fCBleGl0ICQ/CisKKyAgIyBSZW1vdmUgdGhlIGNhbGwgdG8gTGlidG9vbC4KKyAgaWYgdGVzdCAiJGxpYnRvb2wiID0geWVzOyB0aGVuCisgICAgd2hpbGUgdGVzdCAiWCQxIiAhPSAnWC0tbW9kZT1jb21waWxlJzsgZG8KKyAgICAgIHNoaWZ0CisgICAgZG9uZQorICAgIHNoaWZ0CisgIGZpCisKKyAgIyBSZW1vdmUgYC1vICRvYmplY3QnLgorICBJRlM9IiAiCisgIGZvciBhcmcKKyAgZG8KKyAgICBjYXNlICRhcmcgaW4KKyAgICAtbykKKyAgICAgIHNoaWZ0CisgICAgICA7OworICAgICRvYmplY3QpCisgICAgICBzaGlmdAorICAgICAgOzsKKyAgICAqKQorICAgICAgc2V0IGZub3JkICIkQCIgIiRhcmciCisgICAgICBzaGlmdCAjIGZub3JkCisgICAgICBzaGlmdCAjICRhcmcKKyAgICAgIDs7CisgICAgZXNhYworICBkb25lCisKKyAgdGVzdCAteiAiJGRhc2htZmxhZyIgJiYgZGFzaG1mbGFnPS1NCisgICMgUmVxdWlyZSBhdCBsZWFzdCB0d28gY2hhcmFjdGVycyBiZWZvcmUgc2VhcmNoaW5nIGZvciBgOicKKyAgIyBpbiB0aGUgdGFyZ2V0IG5hbWUuICBUaGlzIGlzIHRvIGNvcGUgd2l0aCBET1Mtc3R5bGUgZmlsZW5hbWVzOgorICAjIGEgZGVwZW5kZW5jeSBzdWNoIGFzIGBjOi9mb28vYmFyJyBjb3VsZCBiZSBzZWVuIGFzIHRhcmdldCBgYycgb3RoZXJ3aXNlLgorICAiJEAiICRkYXNobWZsYWcgfAorICAgIHNlZCAnczpeWyAgXSpbXjogXVteOl1bXjpdKlw6WyAgICBdKjonIiRvYmplY3QiJ1w6IDonID4gIiR0bXBkZXBmaWxlIgorICBybSAtZiAiJGRlcGZpbGUiCisgIGNhdCA8ICIkdG1wZGVwZmlsZSIgPiAiJGRlcGZpbGUiCisgIHRyICcgJyAnCisnIDwgIiR0bXBkZXBmaWxlIiB8IFwKKyMjIFNvbWUgdmVyc2lvbnMgb2YgdGhlIEhQVVggMTAuMjAgc2VkIGNhbid0IHByb2Nlc3MgdGhpcyBpbnZvY2F0aW9uCisjIyBjb3JyZWN0bHkuICBCcmVha2luZyBpdCBpbnRvIHR3byBzZWQgaW52b2NhdGlvbnMgaXMgYSB3b3JrYXJvdW5kLgorICAgIHNlZCAtZSAncy9eXFwkLy8nIC1lICcvXiQvZCcgLWUgJy86JC9kJyB8IHNlZCAtZSAncy8kLyA6LycgPj4gIiRkZXBmaWxlIgorICBybSAtZiAiJHRtcGRlcGZpbGUiCisgIDs7CisKK2Rhc2hYbXN0ZG91dCkKKyAgIyBUaGlzIGNhc2Ugb25seSBleGlzdHMgdG8gc2F0aXNmeSBkZXBlbmQubTQuICBJdCBpcyBuZXZlciBhY3R1YWxseQorICAjIHJ1biwgYXMgdGhpcyBtb2RlIGlzIHNwZWNpYWxseSByZWNvZ25pemVkIGluIHRoZSBwcmVhbWJsZS4KKyAgZXhpdCAxCisgIDs7CisKK21ha2VkZXBlbmQpCisgICIkQCIgfHwgZXhpdCAkPworICAjIFJlbW92ZSBhbnkgTGlidG9vbCBjYWxsCisgIGlmIHRlc3QgIiRsaWJ0b29sIiA9IHllczsgdGhlbgorICAgIHdoaWxlIHRlc3QgIlgkMSIgIT0gJ1gtLW1vZGU9Y29tcGlsZSc7IGRvCisgICAgICBzaGlmdAorICAgIGRvbmUKKyAgICBzaGlmdAorICBmaQorICAjIFggbWFrZWRlcGVuZAorICBzaGlmdAorICBjbGVhcmVkPW5vIGVhdD1ubworICBmb3IgYXJnCisgIGRvCisgICAgY2FzZSAkY2xlYXJlZCBpbgorICAgIG5vKQorICAgICAgc2V0ICIiOyBzaGlmdAorICAgICAgY2xlYXJlZD15ZXMgOzsKKyAgICBlc2FjCisgICAgaWYgdGVzdCAkZWF0ID0geWVzOyB0aGVuCisgICAgICBlYXQ9bm8KKyAgICAgIGNvbnRpbnVlCisgICAgZmkKKyAgICBjYXNlICIkYXJnIiBpbgorICAgIC1EKnwtSSopCisgICAgICBzZXQgZm5vcmQgIiRAIiAiJGFyZyI7IHNoaWZ0IDs7CisgICAgIyBTdHJpcCBhbnkgb3B0aW9uIHRoYXQgbWFrZWRlcGVuZCBtYXkgbm90IHVuZGVyc3RhbmQuICBSZW1vdmUKKyAgICAjIHRoZSBvYmplY3QgdG9vLCBvdGhlcndpc2UgbWFrZWRlcGVuZCB3aWxsIHBhcnNlIGl0IGFzIGEgc291cmNlIGZpbGUuCisgICAgLWFyY2gpCisgICAgICBlYXQ9eWVzIDs7CisgICAgLSp8JG9iamVjdCkKKyAgICAgIDs7CisgICAgKikKKyAgICAgIHNldCBmbm9yZCAiJEAiICIkYXJnIjsgc2hpZnQgOzsKKyAgICBlc2FjCisgIGRvbmUKKyAgb2JqX3N1ZmZpeD1gZWNobyAiJG9iamVjdCIgfCBzZWQgJ3MvXi4qXC4vLi8nYAorICB0b3VjaCAiJHRtcGRlcGZpbGUiCisgICR7TUFLRURFUEVORC1tYWtlZGVwZW5kfSAtbyIkb2JqX3N1ZmZpeCIgLWYiJHRtcGRlcGZpbGUiICIkQCIKKyAgcm0gLWYgIiRkZXBmaWxlIgorICBjYXQgPCAiJHRtcGRlcGZpbGUiID4gIiRkZXBmaWxlIgorICBzZWQgJzEsMmQnICIkdG1wZGVwZmlsZSIgfCB0ciAnICcgJworJyB8IFwKKyMjIFNvbWUgdmVyc2lvbnMgb2YgdGhlIEhQVVggMTAuMjAgc2VkIGNhbid0IHByb2Nlc3MgdGhpcyBpbnZvY2F0aW9uCisjIyBjb3JyZWN0bHkuICBCcmVha2luZyBpdCBpbnRvIHR3byBzZWQgaW52b2NhdGlvbnMgaXMgYSB3b3JrYXJvdW5kLgorICAgIHNlZCAtZSAncy9eXFwkLy8nIC1lICcvXiQvZCcgLWUgJy86JC9kJyB8IHNlZCAtZSAncy8kLyA6LycgPj4gIiRkZXBmaWxlIgorICBybSAtZiAiJHRtcGRlcGZpbGUiICIkdG1wZGVwZmlsZSIuYmFrCisgIDs7CisKK2NwcCkKKyAgIyBJbXBvcnRhbnQgbm90ZTogaW4gb3JkZXIgdG8gc3VwcG9ydCB0aGlzIG1vZGUsIGEgY29tcGlsZXIgKm11c3QqCisgICMgYWx3YXlzIHdyaXRlIHRoZSBwcmVwcm9jZXNzZWQgZmlsZSB0byBzdGRvdXQuCisgICIkQCIgfHwgZXhpdCAkPworCisgICMgUmVtb3ZlIHRoZSBjYWxsIHRvIExpYnRvb2wuCisgIGlmIHRlc3QgIiRsaWJ0b29sIiA9IHllczsgdGhlbgorICAgIHdoaWxlIHRlc3QgIlgkMSIgIT0gJ1gtLW1vZGU9Y29tcGlsZSc7IGRvCisgICAgICBzaGlmdAorICAgIGRvbmUKKyAgICBzaGlmdAorICBmaQorCisgICMgUmVtb3ZlIGAtbyAkb2JqZWN0Jy4KKyAgSUZTPSIgIgorICBmb3IgYXJnCisgIGRvCisgICAgY2FzZSAkYXJnIGluCisgICAgLW8pCisgICAgICBzaGlmdAorICAgICAgOzsKKyAgICAkb2JqZWN0KQorICAgICAgc2hpZnQKKyAgICAgIDs7CisgICAgKikKKyAgICAgIHNldCBmbm9yZCAiJEAiICIkYXJnIgorICAgICAgc2hpZnQgIyBmbm9yZAorICAgICAgc2hpZnQgIyAkYXJnCisgICAgICA7OworICAgIGVzYWMKKyAgZG9uZQorCisgICIkQCIgLUUgfAorICAgIHNlZCAtbiAtZSAnL14jIFswLTldWzAtOV0qICJcKFteIl0qXCkiLiovIHM6OiBcMSBcXDpwJyBcCisgICAgICAgLWUgJy9eI2xpbmUgWzAtOV1bMC05XSogIlwoW14iXSpcKSIuKi8gczo6IFwxIFxcOnAnIHwKKyAgICBzZWQgJyQgczogXFwkOjonID4gIiR0bXBkZXBmaWxlIgorICBybSAtZiAiJGRlcGZpbGUiCisgIGVjaG8gIiRvYmplY3QgOiBcXCIgPiAiJGRlcGZpbGUiCisgIGNhdCA8ICIkdG1wZGVwZmlsZSIgPj4gIiRkZXBmaWxlIgorICBzZWQgPCAiJHRtcGRlcGZpbGUiICcvXiQvZDtzL14gLy87cy8gXFwkLy87cy8kLyA6LycgPj4gIiRkZXBmaWxlIgorICBybSAtZiAiJHRtcGRlcGZpbGUiCisgIDs7CisKK21zdmlzdWFsY3BwKQorICAjIEltcG9ydGFudCBub3RlOiBpbiBvcmRlciB0byBzdXBwb3J0IHRoaXMgbW9kZSwgYSBjb21waWxlciAqbXVzdCoKKyAgIyBhbHdheXMgd3JpdGUgdGhlIHByZXByb2Nlc3NlZCBmaWxlIHRvIHN0ZG91dC4KKyAgIiRAIiB8fCBleGl0ICQ/CisKKyAgIyBSZW1vdmUgdGhlIGNhbGwgdG8gTGlidG9vbC4KKyAgaWYgdGVzdCAiJGxpYnRvb2wiID0geWVzOyB0aGVuCisgICAgd2hpbGUgdGVzdCAiWCQxIiAhPSAnWC0tbW9kZT1jb21waWxlJzsgZG8KKyAgICAgIHNoaWZ0CisgICAgZG9uZQorICAgIHNoaWZ0CisgIGZpCisKKyAgSUZTPSIgIgorICBmb3IgYXJnCisgIGRvCisgICAgY2FzZSAiJGFyZyIgaW4KKyAgICAtbykKKyAgICAgIHNoaWZ0CisgICAgICA7OworICAgICRvYmplY3QpCisgICAgICBzaGlmdAorICAgICAgOzsKKyAgICAiLUdtInwiL0dtInwiLUdpInwiL0dpInwiLVpJInwiL1pJIikKKwlzZXQgZm5vcmQgIiRAIgorCXNoaWZ0CisJc2hpZnQKKwk7OworICAgICopCisJc2V0IGZub3JkICIkQCIgIiRhcmciCisJc2hpZnQKKwlzaGlmdAorCTs7CisgICAgZXNhYworICBkb25lCisgICIkQCIgLUUgMj4vZGV2L251bGwgfAorICBzZWQgLW4gJy9eI2xpbmUgWzAtOV1bMC05XSogIlwoW14iXSpcKSIvIHM6OlwxOnAnIHwgJGN5Z3BhdGhfdSB8IHNvcnQgLXUgPiAiJHRtcGRlcGZpbGUiCisgIHJtIC1mICIkZGVwZmlsZSIKKyAgZWNobyAiJG9iamVjdCA6IFxcIiA+ICIkZGVwZmlsZSIKKyAgc2VkIDwgIiR0bXBkZXBmaWxlIiAtbiAtZSAncyUgJVxcICVnJyAtZSAnL15cKC4qXCkkLyBzOjoJXDEgXFw6cCcgPj4gIiRkZXBmaWxlIgorICBlY2hvICIJIiA+PiAiJGRlcGZpbGUiCisgIHNlZCA8ICIkdG1wZGVwZmlsZSIgLW4gLWUgJ3MlICVcXCAlZycgLWUgJy9eXCguKlwpJC8gczo6XDFcOjpwJyA+PiAiJGRlcGZpbGUiCisgIHJtIC1mICIkdG1wZGVwZmlsZSIKKyAgOzsKKworbXN2Y21zeXMpCisgICMgVGhpcyBjYXNlIGV4aXN0cyBvbmx5IHRvIGxldCBkZXBlbmQubTQgZG8gaXRzIHdvcmsuICBJdCB3b3JrcyBieQorICAjIGxvb2tpbmcgYXQgdGhlIHRleHQgb2YgdGhpcyBzY3JpcHQuICBUaGlzIGNhc2Ugd2lsbCBuZXZlciBiZSBydW4sCisgICMgc2luY2UgaXQgaXMgY2hlY2tlZCBmb3IgYWJvdmUuCisgIGV4aXQgMQorICA7OworCitub25lKQorICBleGVjICIkQCIKKyAgOzsKKworKikKKyAgZWNobyAiVW5rbm93biBkZXBtb2RlICRkZXBtb2RlIiAxPiYyCisgIGV4aXQgMQorICA7OworZXNhYworCitleGl0IDAKKworIyBMb2NhbCBWYXJpYWJsZXM6CisjIG1vZGU6IHNoZWxsLXNjcmlwdAorIyBzaC1pbmRlbnRhdGlvbjogMgorIyBldmFsOiAoYWRkLWhvb2sgJ3dyaXRlLWZpbGUtaG9va3MgJ3RpbWUtc3RhbXApCisjIHRpbWUtc3RhbXAtc3RhcnQ6ICJzY3JpcHR2ZXJzaW9uPSIKKyMgdGltZS1zdGFtcC1mb3JtYXQ6ICIlOnktJTAybS0lMDJkLiUwMkgiCisjIHRpbWUtc3RhbXAtdGltZS16b25lOiAiVVRDIgorIyB0aW1lLXN0YW1wLWVuZDogIjsgIyBVVEMiCisjIEVuZDoKZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2RvYy9NYWtlZmlsZS5hbSBiL29wcm9maWxlLTAuOS43L2RvYy9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODRkNGE4Ci0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvZG9jL01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsOTIgQEAKK1JNPXJtCitNQU5ESVI9JChERVNURElSKUBtYW5kaXJAL21hbjEKKworWFNMVFBST0M9eHNsdHByb2MKK1hTTFRQUk9DX0ZMQUdTPUBYU0xUUFJPQ19GTEFHU0AKK1hIVE1MX1NUWUxFU0hFRVQ9JChzcmNkaXIpL3hzbC94aHRtbC54c2wKK0NIVU5LX1hIVE1MX1NUWUxFU0hFRVQ9JChzcmNkaXIpL3hzbC94aHRtbC1jaHVuay54c2wKK1hNTF9DQVRBTE9HX0ZJTEVTPXhzbC9jYXRhbG9nLnhtbAorU1RZTEVTSEVFVFM9JChDSFVOS19YSFRNTF9TVFlMRVNIRUVUKSAkKHNyY2RpcikveHNsL3hodG1sLWNvbW1vbi54c2wKKworbWFuX01BTlMgPSBcCisJb3Byb2ZpbGUuMSBcCisJb3Bjb250cm9sLjEgXAorCW9wcmVwb3J0LjEgXAorCW9wYW5ub3RhdGUuMSBcCisJb3BncHJvZi4xIFwKKwlvcGhlbHAuMSBcCisJb3BhcmNoaXZlLjEgXAorCW9waW1wb3J0LjEKKworaHRtbGRpciA9ICQocHJlZml4KS9zaGFyZS9kb2Mvb3Byb2ZpbGUKK2Rpc3RfaHRtbF9EQVRBID0gb3Byb2ZpbGUuaHRtbCBpbnRlcm5hbHMuaHRtbCBvcHJlcG9ydC54c2Qgb3Ataml0LWRldmVsLmh0bWwKKworaWYgaGF2ZV94c2x0cHJvYworCitvcHJvZmlsZS5odG1sOiAke3RvcF9zcmNkaXJ9L2RvYy9vcHJvZmlsZS54bWwKKwlYTUxfQ0FUQUxPR19GSUxFUz0kKFhNTF9DQVRBTE9HX0ZJTEVTKSAkKFhTTFRQUk9DKSAkKFhTTFRQUk9DX0ZMQUdTKSAtbyAkQCAtLXN0cmluZ3BhcmFtIHZlcnNpb24gQFZFUlNJT05AICQoWEhUTUxfU1RZTEVTSEVFVCkgJDwKKworb3Ataml0LWRldmVsLmh0bWw6ICR7dG9wX3NyY2Rpcn0vZG9jL29wLWppdC1kZXZlbC54bWwKKwlYTUxfQ0FUQUxPR19GSUxFUz0kKFhNTF9DQVRBTE9HX0ZJTEVTKSAkKFhTTFRQUk9DKSAkKFhTTFRQUk9DX0ZMQUdTKSAtbyAkQCAtLXN0cmluZ3BhcmFtIHZlcnNpb24gQFZFUlNJT05AICQoWEhUTUxfU1RZTEVTSEVFVCkgJDwKKworaW50ZXJuYWxzLmh0bWw6ICR7dG9wX3NyY2Rpcn0vZG9jL2ludGVybmFscy54bWwKKwlYTUxfQ0FUQUxPR19GSUxFUz0kKFhNTF9DQVRBTE9HX0ZJTEVTKSAkKFhTTFRQUk9DKSAkKFhTTFRQUk9DX0ZMQUdTKSAtbyAkQCAtLXN0cmluZ3BhcmFtIHZlcnNpb24gQFZFUlNJT05AICQoWEhUTUxfU1RZTEVTSEVFVCkgJDwKKworIyBydWxlcyB0byBnZW5lcmF0ZSBvcHJvZmlsZS5zZi5uZXQvZG9jIGZpbGVzCisKK2RvYy9pbmRleC5odG1sOiAke3RvcF9zcmNkaXJ9L2RvYy9vcHJvZmlsZS54bWwKKwktbWtkaXIgZG9jLworCSQoWFNMVFBST0MpIC1vIGRvYy8gJChYU0xUUFJPQ19GTEFHUykgLS1zdHJpbmdwYXJhbSB2ZXJzaW9uIEBWRVJTSU9OQCAkKENIVU5LX1hIVE1MX1NUWUxFU0hFRVQpICQ8CisKK2RvYy9kZXZlbC9pbmRleC5odG1sOiAke3RvcF9zcmNkaXJ9L2RvYy9vcC1qaXQtZGV2ZWwueG1sCisJLW1rZGlyIGRvYy9kZXZlbC8KKwkkKFhTTFRQUk9DKSAtbyBkb2MvZGV2ZWwvICQoWFNMVFBST0NfRkxBR1MpIC0tc3RyaW5ncGFyYW0gdmVyc2lvbiBAVkVSU0lPTkAgJChDSFVOS19YSFRNTF9TVFlMRVNIRUVUKSAkPAorCitkb2MvaW50ZXJuYWxzL2luZGV4Lmh0bWw6ICR7dG9wX3NyY2Rpcn0vZG9jL2ludGVybmFscy54bWwKKwktbWtkaXIgZG9jL2ludGVybmFscy8KKwkkKFhTTFRQUk9DKSAtbyBkb2MvaW50ZXJuYWxzLyAkKFhTTFRQUk9DX0ZMQUdTKSAtLXN0cmluZ3BhcmFtIHZlcnNpb24gQFZFUlNJT05AICQoQ0hVTktfWEhUTUxfU1RZTEVTSEVFVCkgJDwKKworY2h1bms6IGRvYy9pbmRleC5odG1sIGRvYy9pbnRlcm5hbHMvaW5kZXguaHRtbCBkb2MvZGV2ZWwvaW5kZXguaHRtbAorCWNwICR7dG9wX3NyY2Rpcn0vZG9jL2J1ZmZlcnMucG5nIGRvYy9pbnRlcm5hbHMvCisKK2Vsc2UKKworb3Byb2ZpbGUuaHRtbDoKKwl0b3VjaCAkQAorCitpbnRlcm5hbHMuaHRtbDoKKwl0b3VjaCAkQAorCitvcC1qaXQtZGV2ZWwuaHRtbDoKKwl0b3VjaCAkQAorCitjaHVuazoKKworZW5kaWYKKworZGlzdGNsZWFuLWxvY2FsOgorCSQoUk0pIC1mIHhzbC9jYXRhbG9nLTEueG1sIHhzbC9jYXRhbG9nLnhtbAorCitjbGVhbi1sb2NhbDoKKwkkKFJNKSAtZiAkKGdlbmVyYXRlZF9tYW5zKQorCisjIHRoZXNlIGZpbGVzIGFyZSBub3QgY2xlYW5lZCBieSBtYWtlIHVuaW5zdGFsbCBhdXRvbWFrZSBidWcgPwordW5pbnN0YWxsLWxvY2FsOgorCXJtIC1mIEBtYW5kaXJAL2NhdDEvb3Byb2ZpbGUuMS5negorCUBmb3IgZiBpbiAkKExJTktfTElTVCk7IGRvCQlcCisJCXJtIC1mICQoQ0FURElSKS9jYXQxLyQkZi5nejsJXAorCWRvbmUKKworRVhUUkFfRElTVCA9IFwKKwlvcHJvZmlsZS4xIFwKKwlvcHJvZmlsZS4xLmluIFwKKwlvcHJvZmlsZS54bWwgXAorCW9wLWppdC1kZXZlbC54bWwgXAorCWludGVybmFscy54bWwgXAorCWJ1ZmZlcnMucG5nIFwKKwl4c2wvY2F0YWxvZy0xLnhtbC5pbiBcCisJeHNsL3hodG1sLnhzbCBcCisJeHNsL3hodG1sLWNvbW1vbi54c2wgXAorCXhzbC94aHRtbC1jaHVuay54c2wgXAorCXNyY2RvYy9Eb3h5ZmlsZS5pbiBcCisJc3JjZG9jL01ha2VmaWxlCmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9kb2MvTWFrZWZpbGUuaW4gYi9vcHJvZmlsZS0wLjkuNy9kb2MvTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWFjOTNiZQotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2RvYy9NYWtlZmlsZS5pbgpAQCAtMCwwICsxLDYxNyBAQAorIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS4xMS4xIGZyb20gTWFrZWZpbGUuYW0uCisjIEBjb25maWd1cmVfaW5wdXRACisKKyMgQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLAorIyAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisjIEluYy4KKyMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKKyMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQorIyBQQVJUSUNVTEFSIFBVUlBPU0UuCisKK0BTRVRfTUFLRUAKKworVlBBVEggPSBAc3JjZGlyQAorcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACitwa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAorYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAoraW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKK2luc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKK2luc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYworSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKK3RyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKK05PUk1BTF9JTlNUQUxMID0gOgorUFJFX0lOU1RBTEwgPSA6CitQT1NUX0lOU1RBTEwgPSA6CitOT1JNQUxfVU5JTlNUQUxMID0gOgorUFJFX1VOSU5TVEFMTCA9IDoKK1BPU1RfVU5JTlNUQUxMID0gOgorYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKK2hvc3RfdHJpcGxldCA9IEBob3N0QAorc3ViZGlyID0gZG9jCitESVNUX0NPTU1PTiA9ICQoZGlzdF9odG1sX0RBVEEpICQoc3JjZGlyKS9NYWtlZmlsZS5hbSBcCisJJChzcmNkaXIpL01ha2VmaWxlLmluICQoc3JjZGlyKS9vcGFubm90YXRlLjEuaW4gXAorCSQoc3JjZGlyKS9vcGFyY2hpdmUuMS5pbiAkKHNyY2Rpcikvb3Bjb250cm9sLjEuaW4gXAorCSQoc3JjZGlyKS9vcGdwcm9mLjEuaW4gJChzcmNkaXIpL29waGVscC4xLmluIFwKKwkkKHNyY2Rpcikvb3BpbXBvcnQuMS5pbiAkKHNyY2Rpcikvb3ByZXBvcnQuMS5pbiBcCisJJChzcmNkaXIpL29wcm9maWxlLjEuaW4KK0FDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKK2FtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL200L2JpbnV0aWxzLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2J1aWx0aW5leHBlY3QubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY2VsbHNwdWJmZHN1cHBvcnQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY29tcGlsZXJvcHRpb24ubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY29uZmlnbW9kdWxlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2NvcHlpZmNoYW5nZS5tNCAkKHRvcF9zcmNkaXIpL200L2RvY2Jvb2subTQgXAorCSQodG9wX3NyY2RpcikvbTQvZXh0cmFkaXJzLm00ICQodG9wX3NyY2RpcikvbTQvZmluZGtlcm5lbC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9rZXJuZWxvcHRpb24ubTQgXAorCSQodG9wX3NyY2RpcikvbTQva2VybmVsdmVyc2lvbi5tNCAkKHRvcF9zcmNkaXIpL200L2xpYnRvb2wubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbHRvcHRpb25zLm00ICQodG9wX3NyY2RpcikvbTQvbHRzdWdhci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9sdHZlcnNpb24ubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdH5vYnNvbGV0ZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9tYWxsb2NhdHRyaWJ1dGUubTQgXAorCSQodG9wX3NyY2RpcikvbTQvcG9wdGNvbnN0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3ByZWNvbXBpbGVkaGVhZGVyLm00ICQodG9wX3NyY2RpcikvbTQvcXQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvcmVzdWx0eW4ubTQgJCh0b3Bfc3JjZGlyKS9tNC9zc3RyZWFtLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3R5cGVkZWYubTQgJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuaW4KK2FtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCisJJChBQ0xPQ0FMX000KQorbWtpbnN0YWxsZGlycyA9ICQoaW5zdGFsbF9zaCkgLWQKK0NPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvY29uZmlnLmgKK0NPTkZJR19DTEVBTl9GSUxFUyA9IG9wcm9maWxlLjEgb3Bjb250cm9sLjEgb3BoZWxwLjEgb3ByZXBvcnQuMSBcCisJb3Bhbm5vdGF0ZS4xIG9wZ3Byb2YuMSBvcGFyY2hpdmUuMSBvcGltcG9ydC4xCitDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMgPQorU09VUkNFUyA9CitESVNUX1NPVVJDRVMgPQorYW1fX3ZwYXRoX2Fkal9zZXR1cCA9IHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7CithbV9fdnBhdGhfYWRqID0gY2FzZSAkJHAgaW4gXAorICAgICQoc3JjZGlyKS8qKSBmPWBlY2hvICIkJHAiIHwgc2VkICJzfF4kJHNyY2RpcnN0cmlwL3x8ImA7OyBcCisgICAgKikgZj0kJHA7OyBcCisgIGVzYWM7CithbV9fc3RyaXBfZGlyID0gZj1gZWNobyAkJHAgfCBzZWQgLWUgJ3N8Xi4qL3x8J2A7CithbV9faW5zdGFsbF9tYXggPSA0MAorYW1fX25vYmFzZV9zdHJpcF9zZXR1cCA9IFwKKyAgc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKnxdL1xcXFwmL2cnYAorYW1fX25vYmFzZV9zdHJpcCA9IFwKKyAgZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAiOyBkb25lIHwgc2VkIC1lICJzfCQkc3JjZGlyc3RyaXAvfHwiCithbV9fbm9iYXNlX2xpc3QgPSAkKGFtX19ub2Jhc2Vfc3RyaXBfc2V0dXApOyBcCisgIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwICQkcCI7IGRvbmUgfCBcCisgIHNlZCAic3wgJCRzcmNkaXJzdHJpcC98IHw7IicgLyAuKlwvLyFzLyAuKi8gLi87IHMsXCggLipcKS9bXi9dKiQkLFwxLCcgfCBcCisgICQoQVdLKSAnQkVHSU4geyBmaWxlc1siLiJdID0gIiIgfSB7IGZpbGVzWyQkMl0gPSBmaWxlc1skJDJdICIgIiAkJDE7IFwKKyAgICBpZiAoKytuWyQkMl0gPT0gJChhbV9faW5zdGFsbF9tYXgpKSBcCisgICAgICB7IHByaW50ICQkMiwgZmlsZXNbJCQyXTsgblskJDJdID0gMDsgZmlsZXNbJCQyXSA9ICIiIH0gfSBcCisgICAgRU5EIHsgZm9yIChkaXIgaW4gZmlsZXMpIHByaW50IGRpciwgZmlsZXNbZGlyXSB9JworYW1fX2Jhc2VfbGlzdCA9IFwKKyAgc2VkICckJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjskJCFOO3MvXG4vIC9nJyB8IFwKKyAgc2VkICckJCFOOyQkIU47JCQhTjskJCFOO3MvXG4vIC9nJworbWFuMWRpciA9ICQobWFuZGlyKS9tYW4xCithbV9faW5zdGFsbGRpcnMgPSAiJChERVNURElSKSQobWFuMWRpcikiICIkKERFU1RESVIpJChodG1sZGlyKSIKK05ST0ZGID0gbnJvZmYKK01BTlMgPSAkKG1hbl9NQU5TKQorREFUQSA9ICQoZGlzdF9odG1sX0RBVEEpCitESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQorQUNMT0NBTCA9IEBBQ0xPQ0FMQAorQU1UQVIgPSBAQU1UQVJACitBUiA9IEBBUkAKK0FVVE9DT05GID0gQEFVVE9DT05GQAorQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAorQVVUT01BS0UgPSBAQVVUT01BS0VACitBV0sgPSBAQVdLQAorQkZEX0xJQlMgPSBAQkZEX0xJQlNACitDQVRfRU5UUllfRU5EID0gQENBVF9FTlRSWV9FTkRACitDQVRfRU5UUllfU1RBUlQgPSBAQ0FUX0VOVFJZX1NUQVJUQAorQ0MgPSBAQ0NACitDQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAorQ0ZMQUdTID0gQENGTEFHU0AKK0NQUCA9IEBDUFBACitDUFBGTEFHUyA9IEBDUFBGTEFHU0AKK0NYWCA9IEBDWFhACitDWFhDUFAgPSBAQ1hYQ1BQQAorQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAorQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACitDWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAorREFURSA9IEBEQVRFQAorREVGUyA9IEBERUZTQAorREVQRElSID0gQERFUERJUkAKK0RPQ0JPT0tfUk9PVCA9IEBET0NCT09LX1JPT1RACitEU1lNVVRJTCA9IEBEU1lNVVRJTEAKK0RVTVBCSU4gPSBARFVNUEJJTkAKK0VDSE9fQyA9IEBFQ0hPX0NACitFQ0hPX04gPSBARUNIT19OQAorRUNIT19UID0gQEVDSE9fVEAKK0VHUkVQID0gQEVHUkVQQAorRVhFRVhUID0gQEVYRUVYVEAKK0VYVFJBX0NGTEFHU19NT0RVTEUgPSBARVhUUkFfQ0ZMQUdTX01PRFVMRUAKK0ZHUkVQID0gQEZHUkVQQAorR1JFUCA9IEBHUkVQQAorSU5TVEFMTCA9IEBJTlNUQUxMQAorSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKK0lOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACitJTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKK0lOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACitKQVZBX0hPTUVESVIgPSBASkFWQV9IT01FRElSQAorS0lOQyA9IEBLSU5DQAorS1NSQyA9IEBLU1JDQAorS1ZFUlMgPSBAS1ZFUlNACitMRCA9IEBMREAKK0xERkxBR1MgPSBATERGTEFHU0AKK0xJQkVSVFlfTElCUyA9IEBMSUJFUlRZX0xJQlNACitMSUJPQkpTID0gQExJQk9CSlNACitMSUJTID0gQExJQlNACitMSUJUT09MID0gQExJQlRPT0xACitMSVBPID0gQExJUE9ACitMTl9TID0gQExOX1NACitMVExJQk9CSlMgPSBATFRMSUJPQkpTQAorTUFLRUlORk8gPSBATUFLRUlORk9ACitNS0RJUl9QID0gQE1LRElSX1BACitNT0MgPSBATU9DQAorTU9ESU5TVEFMTERJUiA9IEBNT0RJTlNUQUxMRElSQAorTk0gPSBATk1ACitOTUVESVQgPSBATk1FRElUQAorT0JKRFVNUCA9IEBPQkpEVU1QQAorT0JKRVhUID0gQE9CSkVYVEAKK09QUk9GSUxFX0RJUiA9IEBPUFJPRklMRV9ESVJACitPUFJPRklMRV9NT0RVTEVfQVJDSCA9IEBPUFJPRklMRV9NT0RVTEVfQVJDSEAKK09QX0NGTEFHUyA9IEBPUF9DRkxBR1NACitPUF9DWFhGTEFHUyA9IEBPUF9DWFhGTEFHU0AKK09QX0RPQ0RJUiA9IEBPUF9ET0NESVJACitPVE9PTCA9IEBPVE9PTEAKK09UT09MNjQgPSBAT1RPT0w2NEAKK1BBQ0tBR0UgPSBAUEFDS0FHRUAKK1BBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAorUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKK1BBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAorUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKK1BBQ0tBR0VfVVJMID0gQFBBQ0tBR0VfVVJMQAorUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKK1BBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAorUEtHX0NPTkZJRyA9IEBQS0dfQ09ORklHQAorUEtHX0NPTkZJR19MSUJESVIgPSBAUEtHX0NPTkZJR19MSUJESVJACitQS0dfQ09ORklHX1BBVEggPSBAUEtHX0NPTkZJR19QQVRIQAorUE9QVF9MSUJTID0gQFBPUFRfTElCU0AKK1BUUkRJRkZfVF9UWVBFID0gQFBUUkRJRkZfVF9UWVBFQAorUVRfQ0ZMQUdTID0gQFFUX0NGTEFHU0AKK1FUX0lOQ0xVREVTID0gQFFUX0lOQ0xVREVTQAorUVRfTERGTEFHUyA9IEBRVF9MREZMQUdTQAorUVRfTElCID0gQFFUX0xJQkAKK1FUX0xJQlMgPSBAUVRfTElCU0AKK1FUX1ZFUlNJT04gPSBAUVRfVkVSU0lPTkAKK1JBTkxJQiA9IEBSQU5MSUJACitTRUQgPSBAU0VEQAorU0VUX01BS0UgPSBAU0VUX01BS0VACitTSEVMTCA9IEBTSEVMTEAKK1NJWkVfVF9UWVBFID0gQFNJWkVfVF9UWVBFQAorU1RSSVAgPSBAU1RSSVBACitVSUMgPSBAVUlDQAorVUlDaGVscCA9IEBVSUNoZWxwQAorVkVSU0lPTiA9IEBWRVJTSU9OQAorWE1LTUYgPSBAWE1LTUZACitYTUxfQ0FUQUxPRyA9IEBYTUxfQ0FUQUxPR0AKK1hTTFRQUk9DID0geHNsdHByb2MKK1hTTFRQUk9DX0ZMQUdTID0gQFhTTFRQUk9DX0ZMQUdTQAorWF9DRkxBR1MgPSBAWF9DRkxBR1NACitYX0VYVFJBX0xJQlMgPSBAWF9FWFRSQV9MSUJTQAorWF9MSUJTID0gQFhfTElCU0AKK1hfUFJFX0xJQlMgPSBAWF9QUkVfTElCU0AKK2Fic19idWlsZGRpciA9IEBhYnNfYnVpbGRkaXJACithYnNfc3JjZGlyID0gQGFic19zcmNkaXJACithYnNfdG9wX2J1aWxkZGlyID0gQGFic190b3BfYnVpbGRkaXJACithYnNfdG9wX3NyY2RpciA9IEBhYnNfdG9wX3NyY2RpckAKK2FjX2N0X0NDID0gQGFjX2N0X0NDQAorYWNfY3RfQ1hYID0gQGFjX2N0X0NYWEAKK2FjX2N0X0RVTVBCSU4gPSBAYWNfY3RfRFVNUEJJTkAKK2FtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAorYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKK2FtX19xdW90ZSA9IEBhbV9fcXVvdGVACithbV9fdGFyID0gQGFtX190YXJACithbV9fdW50YXIgPSBAYW1fX3VudGFyQAorYmluZGlyID0gQGJpbmRpckAKK2J1aWxkID0gQGJ1aWxkQAorYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACitidWlsZF9jcHUgPSBAYnVpbGRfY3B1QAorYnVpbGRfb3MgPSBAYnVpbGRfb3NACitidWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAorYnVpbGRkaXIgPSBAYnVpbGRkaXJACitkYXRhZGlyID0gQGRhdGFkaXJACitkYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKK2RvY2RpciA9IEBkb2NkaXJACitkdmlkaXIgPSBAZHZpZGlyQAorZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACitob3N0ID0gQGhvc3RACitob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACitob3N0X2NwdSA9IEBob3N0X2NwdUAKK2hvc3Rfb3MgPSBAaG9zdF9vc0AKK2hvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAoraHRtbGRpciA9ICQocHJlZml4KS9zaGFyZS9kb2Mvb3Byb2ZpbGUKK2luY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKK2luZm9kaXIgPSBAaW5mb2RpckAKK2luc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKK2xpYmRpciA9IEBsaWJkaXJACitsaWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACitsb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAorbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAorbHRfRUNITyA9IEBsdF9FQ0hPQAorbWFuZGlyID0gQG1hbmRpckAKK21rZGlyX3AgPSBAbWtkaXJfcEAKK29sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKK3BkZmRpciA9IEBwZGZkaXJACitwcmVmaXggPSBAcHJlZml4QAorcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAorcHNkaXIgPSBAcHNkaXJACitzYmluZGlyID0gQHNiaW5kaXJACitzaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKK3NyY2RpciA9IEBzcmNkaXJACitzeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACit0YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAordG9wX2J1aWxkX3ByZWZpeCA9IEB0b3BfYnVpbGRfcHJlZml4QAordG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKK3RvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKK3RvcGRpciA9IEB0b3BkaXJACitSTSA9IHJtCitNQU5ESVIgPSAkKERFU1RESVIpQG1hbmRpckAvbWFuMQorWEhUTUxfU1RZTEVTSEVFVCA9ICQoc3JjZGlyKS94c2wveGh0bWwueHNsCitDSFVOS19YSFRNTF9TVFlMRVNIRUVUID0gJChzcmNkaXIpL3hzbC94aHRtbC1jaHVuay54c2wKK1hNTF9DQVRBTE9HX0ZJTEVTID0geHNsL2NhdGFsb2cueG1sCitTVFlMRVNIRUVUUyA9ICQoQ0hVTktfWEhUTUxfU1RZTEVTSEVFVCkgJChzcmNkaXIpL3hzbC94aHRtbC1jb21tb24ueHNsCittYW5fTUFOUyA9IFwKKwlvcHJvZmlsZS4xIFwKKwlvcGNvbnRyb2wuMSBcCisJb3ByZXBvcnQuMSBcCisJb3Bhbm5vdGF0ZS4xIFwKKwlvcGdwcm9mLjEgXAorCW9waGVscC4xIFwKKwlvcGFyY2hpdmUuMSBcCisJb3BpbXBvcnQuMQorCitkaXN0X2h0bWxfREFUQSA9IG9wcm9maWxlLmh0bWwgaW50ZXJuYWxzLmh0bWwgb3ByZXBvcnQueHNkIG9wLWppdC1kZXZlbC5odG1sCitFWFRSQV9ESVNUID0gXAorCW9wcm9maWxlLjEgXAorCW9wcm9maWxlLjEuaW4gXAorCW9wcm9maWxlLnhtbCBcCisJb3Ataml0LWRldmVsLnhtbCBcCisJaW50ZXJuYWxzLnhtbCBcCisJYnVmZmVycy5wbmcgXAorCXhzbC9jYXRhbG9nLTEueG1sLmluIFwKKwl4c2wveGh0bWwueHNsIFwKKwl4c2wveGh0bWwtY29tbW9uLnhzbCBcCisJeHNsL3hodG1sLWNodW5rLnhzbCBcCisJc3JjZG9jL0RveHlmaWxlLmluIFwKKwlzcmNkb2MvTWFrZWZpbGUKKworYWxsOiBhbGwtYW0KKworLlNVRkZJWEVTOgorJChzcmNkaXIpL01ha2VmaWxlLmluOiAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKKwlAZm9yIGRlcCBpbiAkPzsgZG8gXAorCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCisJICAgICokJGRlcCopIFwKKwkgICAgICAoIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCApIFwKKwkgICAgICAgICYmIHsgaWYgdGVzdCAtZiAkQDsgdGhlbiBleGl0IDA7IGVsc2UgYnJlYWs7IGZpOyB9OyBcCisJICAgICAgZXhpdCAxOzsgXAorCSAgZXNhYzsgXAorCWRvbmU7IFwKKwllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gZG9jL01ha2VmaWxlJzsgXAorCSQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmIFwKKwkgICQoQVVUT01BS0UpIC0tZm9yZWlnbiBkb2MvTWFrZWZpbGUKKy5QUkVDSU9VUzogTWFrZWZpbGUKK01ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKKwlAY2FzZSAnJD8nIGluIFwKKwkgICpjb25maWcuc3RhdHVzKikgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCisJICAqKSBcCisJICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKKwllc2FjOworCiskKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKworJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6ICAkKGFtX19jb25maWd1cmVfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyQoQUNMT0NBTF9NNCk6ICAkKGFtX19hY2xvY2FsX200X2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCiskKGFtX19hY2xvY2FsX200X2RlcHMpOgorb3Byb2ZpbGUuMTogJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMgJChzcmNkaXIpL29wcm9maWxlLjEuaW4KKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQAorb3Bjb250cm9sLjE6ICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzICQoc3JjZGlyKS9vcGNvbnRyb2wuMS5pbgorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRACitvcGhlbHAuMTogJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMgJChzcmNkaXIpL29waGVscC4xLmluCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAKK29wcmVwb3J0LjE6ICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzICQoc3JjZGlyKS9vcHJlcG9ydC4xLmluCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAKK29wYW5ub3RhdGUuMTogJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMgJChzcmNkaXIpL29wYW5ub3RhdGUuMS5pbgorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRACitvcGdwcm9mLjE6ICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzICQoc3JjZGlyKS9vcGdwcm9mLjEuaW4KKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQAorb3BhcmNoaXZlLjE6ICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzICQoc3JjZGlyKS9vcGFyY2hpdmUuMS5pbgorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRACitvcGltcG9ydC4xOiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cyAkKHNyY2Rpcikvb3BpbXBvcnQuMS5pbgorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRACisKK21vc3RseWNsZWFuLWxpYnRvb2w6CisJLXJtIC1mICoubG8KKworY2xlYW4tbGlidG9vbDoKKwktcm0gLXJmIC5saWJzIF9saWJzCitpbnN0YWxsLW1hbjE6ICQobWFuX01BTlMpCisJQCQoTk9STUFMX0lOU1RBTEwpCisJdGVzdCAteiAiJChtYW4xZGlyKSIgfHwgJChNS0RJUl9QKSAiJChERVNURElSKSQobWFuMWRpcikiCisJQGxpc3Q9Jyc7IHRlc3QgLW4gIiQobWFuMWRpcikiIHx8IGV4aXQgMDsgXAorCXsgZm9yIGkgaW4gJCRsaXN0OyBkbyBlY2hvICIkJGkiOyBkb25lOyBcCisJbDI9JyQobWFuX01BTlMpJzsgZm9yIGkgaW4gJCRsMjsgZG8gZWNobyAiJCRpIjsgZG9uZSB8IFwKKwkgIHNlZCAtbiAnL1wuMVthLXpdKiQkL3AnOyBcCisJfSB8IHdoaWxlIHJlYWQgcDsgZG8gXAorCSAgaWYgdGVzdCAtZiAkJHA7IHRoZW4gZD07IGVsc2UgZD0iJChzcmNkaXIpLyI7IGZpOyBcCisJICBlY2hvICIkJGQkJHAiOyBlY2hvICIkJHAiOyBcCisJZG9uZSB8IFwKKwlzZWQgLWUgJ247cywuKi8sLDtwO2g7cywuKlwuLCw7cyxeW14xXVswLTlhLXpdKiQkLDEsO3gnIFwKKwkgICAgICAtZSAncyxcLlswLTlhLXpdKiQkLCw7JCh0cmFuc2Zvcm0pO0c7cyxcbiwuLCcgfCBcCisJc2VkICdOO047cyxcbiwgLGcnIHwgeyBcCisJbGlzdD07IHdoaWxlIHJlYWQgZmlsZSBiYXNlIGluc3Q7IGRvIFwKKwkgIGlmIHRlc3QgIiQkYmFzZSIgPSAiJCRpbnN0IjsgdGhlbiBsaXN0PSIkJGxpc3QgJCRmaWxlIjsgZWxzZSBcCisJICAgIGVjaG8gIiAkKElOU1RBTExfREFUQSkgJyQkZmlsZScgJyQoREVTVERJUikkKG1hbjFkaXIpLyQkaW5zdCciOyBcCisJICAgICQoSU5TVEFMTF9EQVRBKSAiJCRmaWxlIiAiJChERVNURElSKSQobWFuMWRpcikvJCRpbnN0IiB8fCBleGl0ICQkPzsgXAorCSAgZmk7IFwKKwlkb25lOyBcCisJZm9yIGkgaW4gJCRsaXN0OyBkbyBlY2hvICIkJGkiOyBkb25lIHwgJChhbV9fYmFzZV9saXN0KSB8IFwKKwl3aGlsZSByZWFkIGZpbGVzOyBkbyBcCisJICB0ZXN0IC16ICIkJGZpbGVzIiB8fCB7IFwKKwkgICAgZWNobyAiICQoSU5TVEFMTF9EQVRBKSAkJGZpbGVzICckKERFU1RESVIpJChtYW4xZGlyKSciOyBcCisJICAgICQoSU5TVEFMTF9EQVRBKSAkJGZpbGVzICIkKERFU1RESVIpJChtYW4xZGlyKSIgfHwgZXhpdCAkJD87IH07IFwKKwlkb25lOyB9CisKK3VuaW5zdGFsbC1tYW4xOgorCUAkKE5PUk1BTF9VTklOU1RBTEwpCisJQGxpc3Q9Jyc7IHRlc3QgLW4gIiQobWFuMWRpcikiIHx8IGV4aXQgMDsgXAorCWZpbGVzPWB7IGZvciBpIGluICQkbGlzdDsgZG8gZWNobyAiJCRpIjsgZG9uZTsgXAorCWwyPSckKG1hbl9NQU5TKSc7IGZvciBpIGluICQkbDI7IGRvIGVjaG8gIiQkaSI7IGRvbmUgfCBcCisJICBzZWQgLW4gJy9cLjFbYS16XSokJC9wJzsgXAorCX0gfCBzZWQgLWUgJ3MsLiovLCw7aDtzLC4qXC4sLDtzLF5bXjFdWzAtOWEtel0qJCQsMSw7eCcgXAorCSAgICAgIC1lICdzLFwuWzAtOWEtel0qJCQsLDskKHRyYW5zZm9ybSk7RztzLFxuLC4sJ2A7IFwKKwl0ZXN0IC16ICIkJGZpbGVzIiB8fCB7IFwKKwkgIGVjaG8gIiAoIGNkICckKERFU1RESVIpJChtYW4xZGlyKScgJiYgcm0gLWYiICQkZmlsZXMgIikiOyBcCisJICBjZCAiJChERVNURElSKSQobWFuMWRpcikiICYmIHJtIC1mICQkZmlsZXM7IH0KK2luc3RhbGwtZGlzdF9odG1sREFUQTogJChkaXN0X2h0bWxfREFUQSkKKwlAJChOT1JNQUxfSU5TVEFMTCkKKwl0ZXN0IC16ICIkKGh0bWxkaXIpIiB8fCAkKE1LRElSX1ApICIkKERFU1RESVIpJChodG1sZGlyKSIKKwlAbGlzdD0nJChkaXN0X2h0bWxfREFUQSknOyB0ZXN0IC1uICIkKGh0bWxkaXIpIiB8fCBsaXN0PTsgXAorCWZvciBwIGluICQkbGlzdDsgZG8gXAorCSAgaWYgdGVzdCAtZiAiJCRwIjsgdGhlbiBkPTsgZWxzZSBkPSIkKHNyY2RpcikvIjsgZmk7IFwKKwkgIGVjaG8gIiQkZCQkcCI7IFwKKwlkb25lIHwgJChhbV9fYmFzZV9saXN0KSB8IFwKKwl3aGlsZSByZWFkIGZpbGVzOyBkbyBcCisJICBlY2hvICIgJChJTlNUQUxMX0RBVEEpICQkZmlsZXMgJyQoREVTVERJUikkKGh0bWxkaXIpJyI7IFwKKwkgICQoSU5TVEFMTF9EQVRBKSAkJGZpbGVzICIkKERFU1RESVIpJChodG1sZGlyKSIgfHwgZXhpdCAkJD87IFwKKwlkb25lCisKK3VuaW5zdGFsbC1kaXN0X2h0bWxEQVRBOgorCUAkKE5PUk1BTF9VTklOU1RBTEwpCisJQGxpc3Q9JyQoZGlzdF9odG1sX0RBVEEpJzsgdGVzdCAtbiAiJChodG1sZGlyKSIgfHwgbGlzdD07IFwKKwlmaWxlcz1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICQkcDsgZG9uZSB8IHNlZCAtZSAnc3xeLiovfHwnYDsgXAorCXRlc3QgLW4gIiQkZmlsZXMiIHx8IGV4aXQgMDsgXAorCWVjaG8gIiAoIGNkICckKERFU1RESVIpJChodG1sZGlyKScgJiYgcm0gLWYiICQkZmlsZXMgIikiOyBcCisJY2QgIiQoREVTVERJUikkKGh0bWxkaXIpIiAmJiBybSAtZiAkJGZpbGVzCit0YWdzOiBUQUdTCitUQUdTOgorCitjdGFnczogQ1RBR1MKK0NUQUdTOgorCisKK2Rpc3RkaXI6ICQoRElTVEZJTEVTKQorCUBsaXN0PSckKE1BTlMpJzsgaWYgdGVzdCAtbiAiJCRsaXN0IjsgdGhlbiBcCisJICBsaXN0PWBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAkJHA7IHRoZW4gZD07IGVsc2UgZD0iJChzcmNkaXIpLyI7IGZpOyBcCisJICAgIGlmIHRlc3QgLWYgIiQkZCQkcCI7IHRoZW4gZWNobyAiJCRkJCRwIjsgZWxzZSA6OyBmaTsgZG9uZWA7IFwKKwkgIGlmIHRlc3QgLW4gIiQkbGlzdCIgJiYgXAorCSAgICBncmVwICdhYiBoZWxwMm1hbiBpcyByZXF1aXJlZCB0byBnZW5lcmF0ZSB0aGlzIHBhZ2UnICQkbGlzdCA+L2Rldi9udWxsOyB0aGVuIFwKKwkgICAgZWNobyAiZXJyb3I6IGZvdW5kIG1hbiBwYWdlcyBjb250YWluaW5nIHRoZSBcYG1pc3NpbmcgaGVscDJtYW4nIHJlcGxhY2VtZW50IHRleHQ6IiA+JjI7IFwKKwkgICAgZ3JlcCAtbCAnYWIgaGVscDJtYW4gaXMgcmVxdWlyZWQgdG8gZ2VuZXJhdGUgdGhpcyBwYWdlJyAkJGxpc3QgfCBzZWQgJ3MvXi8gICAgICAgICAvJyA+JjI7IFwKKwkgICAgZWNobyAiICAgICAgIHRvIGZpeCB0aGVtLCBpbnN0YWxsIGhlbHAybWFuLCByZW1vdmUgYW5kIHJlZ2VuZXJhdGUgdGhlIG1hbiBwYWdlczsiID4mMjsgXAorCSAgICBlY2hvICIgICAgICAgdHlwaWNhbGx5IFxgbWFrZSBtYWludGFpbmVyLWNsZWFuJyB3aWxsIHJlbW92ZSB0aGVtIiA+JjI7IFwKKwkgICAgZXhpdCAxOyBcCisJICBlbHNlIDo7IGZpOyBcCisJZWxzZSA6OyBmaQorCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisJbGlzdD0nJChESVNURklMRVMpJzsgXAorCSAgZGlzdF9maWxlcz1gZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8IFwKKwkgIHNlZCAtZSAic3xeJCRzcmNkaXJzdHJpcC98fDt0IiBcCisJICAgICAgLWUgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98O3QiYDsgXAorCWNhc2UgJCRkaXN0X2ZpbGVzIGluIFwKKwkgICovKikgJChNS0RJUl9QKSBgZWNobyAiJCRkaXN0X2ZpbGVzIiB8IFwKKwkJCSAgIHNlZCAnL1wvLyFkO3N8XnwkKGRpc3RkaXIpL3w7cywvW14vXSokJCwsJyB8IFwKKwkJCSAgIHNvcnQgLXVgIDs7IFwKKwllc2FjOyBcCisJZm9yIGZpbGUgaW4gJCRkaXN0X2ZpbGVzOyBkbyBcCisJICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCisJICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAorCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAorCSAgICBpZiB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkZmlsZSI7IHRoZW4gXAorCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAorCSAgICBmaTsgXAorCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKKwkgICAgICBjcCAtZnBSICQoc3JjZGlyKS8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCisJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisJICAgIGZpOyBcCisJICAgIGNwIC1mcFIgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKKwkgIGVsc2UgXAorCSAgICB0ZXN0IC1mICIkKGRpc3RkaXIpLyQkZmlsZSIgXAorCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICIkKGRpc3RkaXIpLyQkZmlsZSIgXAorCSAgICB8fCBleGl0IDE7IFwKKwkgIGZpOyBcCisJZG9uZQorY2hlY2stYW06IGFsbC1hbQorY2hlY2s6IGNoZWNrLWFtCithbGwtYW06IE1ha2VmaWxlICQoTUFOUykgJChEQVRBKQoraW5zdGFsbGRpcnM6CisJZm9yIGRpciBpbiAiJChERVNURElSKSQobWFuMWRpcikiICIkKERFU1RESVIpJChodG1sZGlyKSI7IGRvIFwKKwkgIHRlc3QgLXogIiQkZGlyIiB8fCAkKE1LRElSX1ApICIkJGRpciI7IFwKKwlkb25lCitpbnN0YWxsOiBpbnN0YWxsLWFtCitpbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1hbQoraW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtYW0KK3VuaW5zdGFsbDogdW5pbnN0YWxsLWFtCisKK2luc3RhbGwtYW06IGFsbC1hbQorCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCisKK2luc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLWFtCitpbnN0YWxsLXN0cmlwOgorCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisJICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKKwkgIGB0ZXN0IC16ICckKFNUUklQKScgfHwgXAorCSAgICBlY2hvICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknImAgaW5zdGFsbAorbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKKworY2xlYW4tZ2VuZXJpYzoKKworZGlzdGNsZWFuLWdlbmVyaWM6CisJLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCisJLXRlc3QgLiA9ICIkKHNyY2RpcikiIHx8IHRlc3QgLXogIiQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpCisKK21haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKKwlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCisJQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgorY2xlYW46IGNsZWFuLWFtCisKK2NsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgY2xlYW4tbG9jYWwgbW9zdGx5Y2xlYW4tYW0KKworZGlzdGNsZWFuOiBkaXN0Y2xlYW4tYW0KKwktcm0gLWYgTWFrZWZpbGUKK2Rpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLWxvY2FsCisKK2R2aTogZHZpLWFtCisKK2R2aS1hbToKKworaHRtbDogaHRtbC1hbQorCitodG1sLWFtOgorCitpbmZvOiBpbmZvLWFtCisKK2luZm8tYW06CisKK2luc3RhbGwtZGF0YS1hbTogaW5zdGFsbC1kaXN0X2h0bWxEQVRBIGluc3RhbGwtbWFuCisKK2luc3RhbGwtZHZpOiBpbnN0YWxsLWR2aS1hbQorCitpbnN0YWxsLWR2aS1hbToKKworaW5zdGFsbC1leGVjLWFtOgorCitpbnN0YWxsLWh0bWw6IGluc3RhbGwtaHRtbC1hbQorCitpbnN0YWxsLWh0bWwtYW06CisKK2luc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLWFtCisKK2luc3RhbGwtaW5mby1hbToKKworaW5zdGFsbC1tYW46IGluc3RhbGwtbWFuMQorCitpbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KKworaW5zdGFsbC1wZGYtYW06CisKK2luc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KKworaW5zdGFsbC1wcy1hbToKKworaW5zdGFsbGNoZWNrLWFtOgorCittYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCisJLXJtIC1mIE1ha2VmaWxlCittYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCisKK21vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1hbQorCittb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sCisKK3BkZjogcGRmLWFtCisKK3BkZi1hbToKKworcHM6IHBzLWFtCisKK3BzLWFtOgorCit1bmluc3RhbGwtYW06IHVuaW5zdGFsbC1kaXN0X2h0bWxEQVRBIHVuaW5zdGFsbC1sb2NhbCB1bmluc3RhbGwtbWFuCisKK3VuaW5zdGFsbC1tYW46IHVuaW5zdGFsbC1tYW4xCisKKy5NQUtFOiBpbnN0YWxsLWFtIGluc3RhbGwtc3RyaXAKKworLlBIT05ZOiBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBcCisJY2xlYW4tbG9jYWwgZGlzdGNsZWFuIGRpc3RjbGVhbi1nZW5lcmljIGRpc3RjbGVhbi1saWJ0b29sIFwKKwlkaXN0Y2xlYW4tbG9jYWwgZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgaHRtbC1hbSBpbmZvIGluZm8tYW0gXAorCWluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgaW5zdGFsbC1kYXRhLWFtIFwKKwlpbnN0YWxsLWRpc3RfaHRtbERBVEEgaW5zdGFsbC1kdmkgaW5zdGFsbC1kdmktYW0gaW5zdGFsbC1leGVjIFwKKwlpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1odG1sIGluc3RhbGwtaHRtbC1hbSBpbnN0YWxsLWluZm8gXAorCWluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBpbnN0YWxsLW1hbjEgaW5zdGFsbC1wZGYgXAorCWluc3RhbGwtcGRmLWFtIGluc3RhbGwtcHMgaW5zdGFsbC1wcy1hbSBpbnN0YWxsLXN0cmlwIFwKKwlpbnN0YWxsY2hlY2sgaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIG1haW50YWluZXItY2xlYW4gXAorCW1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBtb3N0bHljbGVhbi1nZW5lcmljIFwKKwltb3N0bHljbGVhbi1saWJ0b29sIHBkZiBwZGYtYW0gcHMgcHMtYW0gdW5pbnN0YWxsIHVuaW5zdGFsbC1hbSBcCisJdW5pbnN0YWxsLWRpc3RfaHRtbERBVEEgdW5pbnN0YWxsLWxvY2FsIHVuaW5zdGFsbC1tYW4gXAorCXVuaW5zdGFsbC1tYW4xCisKKworQGhhdmVfeHNsdHByb2NfVFJVRUBvcHJvZmlsZS5odG1sOiAke3RvcF9zcmNkaXJ9L2RvYy9vcHJvZmlsZS54bWwKK0BoYXZlX3hzbHRwcm9jX1RSVUVACVhNTF9DQVRBTE9HX0ZJTEVTPSQoWE1MX0NBVEFMT0dfRklMRVMpICQoWFNMVFBST0MpICQoWFNMVFBST0NfRkxBR1MpIC1vICRAIC0tc3RyaW5ncGFyYW0gdmVyc2lvbiBAVkVSU0lPTkAgJChYSFRNTF9TVFlMRVNIRUVUKSAkPAorCitAaGF2ZV94c2x0cHJvY19UUlVFQG9wLWppdC1kZXZlbC5odG1sOiAke3RvcF9zcmNkaXJ9L2RvYy9vcC1qaXQtZGV2ZWwueG1sCitAaGF2ZV94c2x0cHJvY19UUlVFQAlYTUxfQ0FUQUxPR19GSUxFUz0kKFhNTF9DQVRBTE9HX0ZJTEVTKSAkKFhTTFRQUk9DKSAkKFhTTFRQUk9DX0ZMQUdTKSAtbyAkQCAtLXN0cmluZ3BhcmFtIHZlcnNpb24gQFZFUlNJT05AICQoWEhUTUxfU1RZTEVTSEVFVCkgJDwKKworQGhhdmVfeHNsdHByb2NfVFJVRUBpbnRlcm5hbHMuaHRtbDogJHt0b3Bfc3JjZGlyfS9kb2MvaW50ZXJuYWxzLnhtbAorQGhhdmVfeHNsdHByb2NfVFJVRUAJWE1MX0NBVEFMT0dfRklMRVM9JChYTUxfQ0FUQUxPR19GSUxFUykgJChYU0xUUFJPQykgJChYU0xUUFJPQ19GTEFHUykgLW8gJEAgLS1zdHJpbmdwYXJhbSB2ZXJzaW9uIEBWRVJTSU9OQCAkKFhIVE1MX1NUWUxFU0hFRVQpICQ8CisKKyMgcnVsZXMgdG8gZ2VuZXJhdGUgb3Byb2ZpbGUuc2YubmV0L2RvYyBmaWxlcworCitAaGF2ZV94c2x0cHJvY19UUlVFQGRvYy9pbmRleC5odG1sOiAke3RvcF9zcmNkaXJ9L2RvYy9vcHJvZmlsZS54bWwKK0BoYXZlX3hzbHRwcm9jX1RSVUVACS1ta2RpciBkb2MvCitAaGF2ZV94c2x0cHJvY19UUlVFQAkkKFhTTFRQUk9DKSAtbyBkb2MvICQoWFNMVFBST0NfRkxBR1MpIC0tc3RyaW5ncGFyYW0gdmVyc2lvbiBAVkVSU0lPTkAgJChDSFVOS19YSFRNTF9TVFlMRVNIRUVUKSAkPAorCitAaGF2ZV94c2x0cHJvY19UUlVFQGRvYy9kZXZlbC9pbmRleC5odG1sOiAke3RvcF9zcmNkaXJ9L2RvYy9vcC1qaXQtZGV2ZWwueG1sCitAaGF2ZV94c2x0cHJvY19UUlVFQAktbWtkaXIgZG9jL2RldmVsLworQGhhdmVfeHNsdHByb2NfVFJVRUAJJChYU0xUUFJPQykgLW8gZG9jL2RldmVsLyAkKFhTTFRQUk9DX0ZMQUdTKSAtLXN0cmluZ3BhcmFtIHZlcnNpb24gQFZFUlNJT05AICQoQ0hVTktfWEhUTUxfU1RZTEVTSEVFVCkgJDwKKworQGhhdmVfeHNsdHByb2NfVFJVRUBkb2MvaW50ZXJuYWxzL2luZGV4Lmh0bWw6ICR7dG9wX3NyY2Rpcn0vZG9jL2ludGVybmFscy54bWwKK0BoYXZlX3hzbHRwcm9jX1RSVUVACS1ta2RpciBkb2MvaW50ZXJuYWxzLworQGhhdmVfeHNsdHByb2NfVFJVRUAJJChYU0xUUFJPQykgLW8gZG9jL2ludGVybmFscy8gJChYU0xUUFJPQ19GTEFHUykgLS1zdHJpbmdwYXJhbSB2ZXJzaW9uIEBWRVJTSU9OQCAkKENIVU5LX1hIVE1MX1NUWUxFU0hFRVQpICQ8CisKK0BoYXZlX3hzbHRwcm9jX1RSVUVAY2h1bms6IGRvYy9pbmRleC5odG1sIGRvYy9pbnRlcm5hbHMvaW5kZXguaHRtbCBkb2MvZGV2ZWwvaW5kZXguaHRtbAorQGhhdmVfeHNsdHByb2NfVFJVRUAJY3AgJHt0b3Bfc3JjZGlyfS9kb2MvYnVmZmVycy5wbmcgZG9jL2ludGVybmFscy8KKworQGhhdmVfeHNsdHByb2NfRkFMU0VAb3Byb2ZpbGUuaHRtbDoKK0BoYXZlX3hzbHRwcm9jX0ZBTFNFQAl0b3VjaCAkQAorCitAaGF2ZV94c2x0cHJvY19GQUxTRUBpbnRlcm5hbHMuaHRtbDoKK0BoYXZlX3hzbHRwcm9jX0ZBTFNFQAl0b3VjaCAkQAorCitAaGF2ZV94c2x0cHJvY19GQUxTRUBvcC1qaXQtZGV2ZWwuaHRtbDoKK0BoYXZlX3hzbHRwcm9jX0ZBTFNFQAl0b3VjaCAkQAorCitAaGF2ZV94c2x0cHJvY19GQUxTRUBjaHVuazoKKworZGlzdGNsZWFuLWxvY2FsOgorCSQoUk0pIC1mIHhzbC9jYXRhbG9nLTEueG1sIHhzbC9jYXRhbG9nLnhtbAorCitjbGVhbi1sb2NhbDoKKwkkKFJNKSAtZiAkKGdlbmVyYXRlZF9tYW5zKQorCisjIHRoZXNlIGZpbGVzIGFyZSBub3QgY2xlYW5lZCBieSBtYWtlIHVuaW5zdGFsbCBhdXRvbWFrZSBidWcgPwordW5pbnN0YWxsLWxvY2FsOgorCXJtIC1mIEBtYW5kaXJAL2NhdDEvb3Byb2ZpbGUuMS5negorCUBmb3IgZiBpbiAkKExJTktfTElTVCk7IGRvCQlcCisJCXJtIC1mICQoQ0FURElSKS9jYXQxLyQkZi5nejsJXAorCWRvbmUKKworIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KKyMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgorLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvZG9jL2J1ZmZlcnMucG5nIGIvb3Byb2ZpbGUtMC45LjcvZG9jL2J1ZmZlcnMucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1ZmFiZjMKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9kb2MvYnVmZmVycy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvZG9jL2ludGVybmFscy5odG1sIGIvb3Byb2ZpbGUtMC45LjcvZG9jL2ludGVybmFscy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0M2FkNDYKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9kb2MvaW50ZXJuYWxzLmh0bWwKQEAgLTAsMCArMSwyMDEyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS0xIj8+Cis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtc3RyaWN0LmR0ZCI+Cis8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+CisgIDxoZWFkPgorICAgIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiIC8+CisgICAgPHRpdGxlPk9Qcm9maWxlIEludGVybmFsczwvdGl0bGU+CisgICAgPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43NS4yIiAvPgorICA8L2hlYWQ+CisgIDxib2R5PgorICAgIDxkaXYgY2xhc3M9ImJvb2siIHRpdGxlPSJPUHJvZmlsZSBJbnRlcm5hbHMiPgorICAgICAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KKyAgICAgICAgPGRpdj4KKyAgICAgICAgICA8ZGl2PgorICAgICAgICAgICAgPGgxIGNsYXNzPSJ0aXRsZSI+PGEgaWQ9Im9wcm9maWxlLWludGVybmFscyI+PC9hPk9Qcm9maWxlIEludGVybmFsczwvaDE+CisgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgPGRpdj4KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9ImF1dGhvcmdyb3VwIj4KKyAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYXV0aG9yIj4KKyAgICAgICAgICAgICAgICA8aDMgY2xhc3M9ImF1dGhvciI+PHNwYW4gY2xhc3M9ImZpcnN0bmFtZSI+Sm9objwvc3Bhbj4gPHNwYW4gY2xhc3M9InN1cm5hbWUiPkxldm9uPC9zcGFuPjwvaDM+CisgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWZmaWxpYXRpb24iPgorICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWRkcmVzcyI+CisgICAgICAgICAgICAgICAgICAgIDxwPgorICAgICAgICAgICAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJlbWFpbCI+Jmx0OzxhIGNsYXNzPSJlbWFpbCIgaHJlZj0ibWFpbHRvOmxldm9uQG1vdmVtZW50YXJpYW4ub3JnIj5sZXZvbkBtb3ZlbWVudGFyaWFuLm9yZzwvYT4mZ3Q7PC9jb2RlPgorICAgICAgICAgICAgICAgICAgICA8L3A+CisgICAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICA8ZGl2PgorICAgICAgICAgICAgPHAgY2xhc3M9ImNvcHlyaWdodCI+Q29weXJpZ2h0IKkgMjAwMyBKb2huIExldm9uPC9wPgorICAgICAgICAgIDwvZGl2PgorICAgICAgICA8L2Rpdj4KKyAgICAgICAgPGhyIC8+CisgICAgICA8L2Rpdj4KKyAgICAgIDxkaXYgY2xhc3M9InRvYyI+CisgICAgICAgIDxwPgorICAgICAgICAgIDxiPlRhYmxlIG9mIENvbnRlbnRzPC9iPgorICAgICAgICA8L3A+CisgICAgICAgIDxkbD4KKyAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICA8c3BhbiBjbGFzcz0iY2hhcHRlciI+CisgICAgICAgICAgICAgIDxhIGhyZWY9IiNpbnRyb2R1Y3Rpb24iPjEuIEludHJvZHVjdGlvbjwvYT4KKyAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICA8L2R0PgorICAgICAgICAgIDxkZD4KKyAgICAgICAgICAgIDxkbD4KKyAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MSI+CisgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjb3ZlcnZpZXciPjEuIE92ZXJ2aWV3PC9hPgorICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MSI+CisgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjY29tcG9uZW50cyI+Mi4gQ29tcG9uZW50cyBvZiB0aGUgT1Byb2ZpbGUgc3lzdGVtPC9hPgorICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgICAgPGRkPgorICAgICAgICAgICAgICAgIDxkbD4KKyAgICAgICAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QyIj4KKyAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjYXJjaC1zcGVjaWZpYy1jb21wb25lbnRzIj4yLjEuIEFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjb21wb25lbnRzPC9hPgorICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDIiPgorICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNmaWxlc3lzdGVtIj4yLjIuIG9wcm9maWxlZnM8L2E+CisgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MiI+CisgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2RyaXZlciI+Mi4zLiBHZW5lcmljIGtlcm5lbCBkcml2ZXI8L2E+CisgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MiI+CisgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2RhZW1vbiI+Mi40LiBUaGUgT1Byb2ZpbGUgZGFlbW9uPC9hPgorICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDIiPgorICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNwb3N0LXByb2ZpbGluZyI+Mi41LiBQb3N0LXByb2ZpbGluZyB0b29sczwvYT4KKyAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgICAgICA8L2RsPgorICAgICAgICAgICAgICA8L2RkPgorICAgICAgICAgICAgPC9kbD4KKyAgICAgICAgICA8L2RkPgorICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjaGFwdGVyIj4KKyAgICAgICAgICAgICAgPGEgaHJlZj0iI3BlcmZvcm1hbmNlLWNvdW50ZXJzIj4yLiBQZXJmb3JtYW5jZSBjb3VudGVyIG1hbmFnZW1lbnQ8L2E+CisgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgPC9kdD4KKyAgICAgICAgICA8ZGQ+CisgICAgICAgICAgICA8ZGw+CisgICAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDEiPgorICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI3BlcmZvcm1hbmNlLWNvdW50ZXJzLXVpIj4xLiBQcm92aWRpbmcgYSB1c2VyIGludGVyZmFjZTwvYT4KKyAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDEiPgorICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI3BlcmZvcm1hbmNlLWNvdW50ZXJzLXByb2dyYW1taW5nIj4yLiBQcm9ncmFtbWluZyB0aGUgcGVyZm9ybWFuY2UgY291bnRlciByZWdpc3RlcnM8L2E+CisgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgICA8ZGQ+CisgICAgICAgICAgICAgICAgPGRsPgorICAgICAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDIiPgorICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNwZXJmb3JtYW5jZS1jb3VudGVycy1zdGFydCI+Mi4xLiBTdGFydGluZyBhbmQgc3RvcHBpbmcgdGhlIGNvdW50ZXJzPC9hPgorICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDIiPgorICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNpZDU3NzQxMCI+Mi4yLiBJQTY0IGFuZCBwZXJmbW9uPC9hPgorICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgICAgIDwvZGw+CisgICAgICAgICAgICAgIDwvZGQ+CisgICAgICAgICAgICA8L2RsPgorICAgICAgICAgIDwvZGQ+CisgICAgICAgICAgPGR0PgorICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNoYXB0ZXIiPgorICAgICAgICAgICAgICA8YSBocmVmPSIjY29sbGVjdGluZy1zYW1wbGVzIj4zLiBDb2xsZWN0aW5nIGFuZCBwcm9jZXNzaW5nIHNhbXBsZXM8L2E+CisgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgPC9kdD4KKyAgICAgICAgICA8ZGQ+CisgICAgICAgICAgICA8ZGw+CisgICAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDEiPgorICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI3JlY2VpdmluZy1pbnRlcnJ1cHRzIj4xLiBSZWNlaXZpbmcgaW50ZXJydXB0czwvYT4KKyAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDEiPgorICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2NvcmUtc3RydWN0dXJlIj4yLiBDb3JlIGRhdGEgc3RydWN0dXJlczwvYT4KKyAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDEiPgorICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2xvZ2dpbmctc2FtcGxlIj4zLiBMb2dnaW5nIGEgc2FtcGxlPC9hPgorICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MSI+CisgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjbG9nZ2luZy1zdGFjayI+NC4gTG9nZ2luZyBzdGFjayB0cmFjZXM8L2E+CisgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QxIj4KKyAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNzeW5jaHJvbmlzaW5nLWJ1ZmZlcnMiPjUuIFN5bmNocm9uaXNpbmcgdGhlIENQVSBidWZmZXJzIHRvIHRoZSBldmVudCBidWZmZXI8L2E+CisgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QxIj4KKyAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNkZW50cnktY29va2llcyI+Ni4gSWRlbnRpZnlpbmcgYmluYXJ5IGltYWdlczwvYT4KKyAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDEiPgorICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2ZpbmRpbmctZGVudHJ5Ij43LiBGaW5kaW5nIGEgc2FtcGxlJ3MgYmluYXJ5IGltYWdlIGFuZCBvZmZzZXQ8L2E+CisgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgPC9kbD4KKyAgICAgICAgICA8L2RkPgorICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjaGFwdGVyIj4KKyAgICAgICAgICAgICAgPGEgaHJlZj0iI3NhbXBsZS1maWxlcyI+NC4gR2VuZXJhdGluZyBzYW1wbGUgZmlsZXM8L2E+CisgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgPC9kdD4KKyAgICAgICAgICA8ZGQ+CisgICAgICAgICAgICA8ZGw+CisgICAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDEiPgorICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI3Byb2Nlc3NpbmctYnVmZmVyIj4xLiBQcm9jZXNzaW5nIHRoZSBidWZmZXI8L2E+CisgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgICA8ZGQ+CisgICAgICAgICAgICAgICAgPGRsPgorICAgICAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDIiPgorICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNoYW5kbGluZy1rZXJuZWwtc2FtcGxlcyI+MS4xLiBIYW5kbGluZyBrZXJuZWwgc2FtcGxlczwvYT4KKyAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgICAgICA8L2RsPgorICAgICAgICAgICAgICA8L2RkPgorICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QxIj4KKyAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNzYW1wbGUtZmlsZS1nZW5lcmF0aW9uIj4yLiBMb2NhdGluZyBhbmQgY3JlYXRpbmcgc2FtcGxlIGZpbGVzPC9hPgorICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MSI+CisgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjc2FtcGxlLWZpbGUtd3JpdGluZyI+My4gV3JpdGluZyBkYXRhIHRvIGEgc2FtcGxlIGZpbGU8L2E+CisgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgPC9kbD4KKyAgICAgICAgICA8L2RkPgorICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjaGFwdGVyIj4KKyAgICAgICAgICAgICAgPGEgaHJlZj0iI291dHB1dCI+NS4gR2VuZXJhdGluZyB1c2VmdWwgb3V0cHV0PC9hPgorICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgPGRkPgorICAgICAgICAgICAgPGRsPgorICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QxIj4KKyAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNwcm9maWxlLXNwZWNpZmljYXRpb24iPjEuIEhhbmRsaW5nIHRoZSBwcm9maWxlIHNwZWNpZmljYXRpb248L2E+CisgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QxIj4KKyAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNzYW1wbGUtZmlsZS1jb2xsYXRpbmciPjIuIENvbGxhdGluZyB0aGUgY2FuZGlkYXRlIHNhbXBsZSBmaWxlczwvYT4KKyAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICAgIDxkZD4KKyAgICAgICAgICAgICAgICA8ZGw+CisgICAgICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MiI+CisgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI3NhbXBsZS1maWxlLWNsYXNzaWZ5aW5nIj4yLjEuIENsYXNzaWZ5aW5nIHNhbXBsZSBmaWxlczwvYT4KKyAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QyIj4KKyAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjc2FtcGxlLWZpbGUtaW52ZXJ0aW5nIj4yLjIuIENyZWF0aW5nIGludmVydGVkIHByb2ZpbGUgbGlzdHM8L2E+CisgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICAgICAgPC9kbD4KKyAgICAgICAgICAgICAgPC9kZD4KKyAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MSI+CisgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ2VuZXJhdGluZy1wcm9maWxlLWRhdGEiPjMuIEdlbmVyYXRpbmcgcHJvZmlsZSBkYXRhPC9hPgorICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgICAgPGRkPgorICAgICAgICAgICAgICAgIDxkbD4KKyAgICAgICAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QyIj4KKyAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjYmZkIj4zLjEuIFByb2Nlc3NpbmcgdGhlIGJpbmFyeSBpbWFnZTwvYT4KKyAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QyIj4KKyAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjcHJvY2Vzc2luZy1zYW1wbGUtZmlsZXMiPjMuMi4gUHJvY2Vzc2luZyB0aGUgc2FtcGxlIGZpbGVzPC9hPgorICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgICAgIDwvZGw+CisgICAgICAgICAgICAgIDwvZGQ+CisgICAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDEiPgorICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dlbmVyYXRpbmctb3V0cHV0Ij40LiBHZW5lcmF0aW5nIG91dHB1dDwvYT4KKyAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICA8L2RsPgorICAgICAgICAgIDwvZGQ+CisgICAgICAgICAgPGR0PgorICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNoYXB0ZXIiPgorICAgICAgICAgICAgICA8YSBocmVmPSIjZXh0Ij42LiBFeHRlbmRlZCBGZWF0dXJlIEludGVyZmFjZTwvYT4KKyAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICA8L2R0PgorICAgICAgICAgIDxkZD4KKyAgICAgICAgICAgIDxkbD4KKyAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MSI+CisgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZXh0LWludHJvIj4xLiBJbnRyb2R1Y3Rpb248L2E+CisgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QxIj4KKyAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNleHQtbmFtZS1hbmQtaGFuZGxlcnMiPjIuIEZlYXR1cmUgTmFtZSBhbmQgSGFuZGxlcnM8L2E+CisgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QxIj4KKyAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNleHQtZW5hYmxlIj4zLiBFbmFibGluZyBGZWF0dXJlczwvYT4KKyAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDEiPgorICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2V4dC10eXBlcy1vZi1oYW5kbGVycyI+NC4gVHlwZSBvZiBIYW5kbGVyczwvYT4KKyAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICAgIDxkZD4KKyAgICAgICAgICAgICAgICA8ZGw+CisgICAgICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MiI+CisgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2V4dF9pbml0Ij40LjEuIGV4dF9pbml0IEhhbmRsZXI8L2E+CisgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MiI+CisgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2V4dF9wcmludF9zdGF0cyI+NC4yLiBleHRfcHJpbnRfc3RhdHMgSGFuZGxlcjwvYT4KKyAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QyIj4KKyAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZXh0X3NmaWxlX2hhbmRsZXJzIj40LjMuIGV4dF9zZmlsZSBIYW5kbGVyPC9hPgorICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgICAgIDwvZGw+CisgICAgICAgICAgICAgIDwvZGQ+CisgICAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDEiPgorICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2V4dC1pbXBsZW1lbnRhdGlvbiI+NS4gRXh0ZW5kZWQgRmVhdHVyZSBSZWZlcmVuY2UgSW1wbGVtZW50YXRpb248L2E+CisgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgICA8ZGQ+CisgICAgICAgICAgICAgICAgPGRsPgorICAgICAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDIiPgorICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNleHQtaWJzIj41LjEuIEluc3RydWN0aW9uLUJhc2VkIFNhbXBsaW5nIChJQlMpPC9hPgorICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgICAgIDwvZGw+CisgICAgICAgICAgICAgIDwvZGQ+CisgICAgICAgICAgICA8L2RsPgorICAgICAgICAgIDwvZGQ+CisgICAgICAgICAgPGR0PgorICAgICAgICAgICAgPHNwYW4gY2xhc3M9Imdsb3NzYXJ5Ij4KKyAgICAgICAgICAgICAgPGEgaHJlZj0iI2dsb3NzYXJ5Ij5HbG9zc2FyeSBvZiBPUHJvZmlsZSBzb3VyY2UgY29uY2VwdHMgYW5kIHR5cGVzPC9hPgorICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgIDwvZHQ+CisgICAgICAgIDwvZGw+CisgICAgICA8L2Rpdj4KKyAgICAgIDxkaXYgY2xhc3M9Imxpc3Qtb2YtZmlndXJlcyI+CisgICAgICAgIDxwPgorICAgICAgICAgIDxiPkxpc3Qgb2YgRmlndXJlczwvYj4KKyAgICAgICAgPC9wPgorICAgICAgICA8ZGw+CisgICAgICAgICAgPGR0PjMuMS4gPGEgaHJlZj0iI2lkNTc3NTM4Ij5UaGUgT1Byb2ZpbGUgYnVmZmVyczwvYT48L2R0PgorICAgICAgICA8L2RsPgorICAgICAgPC9kaXY+CisgICAgICA8ZGl2IGNsYXNzPSJjaGFwdGVyIiB0aXRsZT0iQ2hhcHRlcqAxLqBJbnRyb2R1Y3Rpb24iPgorICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgorICAgICAgICAgIDxkaXY+CisgICAgICAgICAgICA8ZGl2PgorICAgICAgICAgICAgICA8aDIgY2xhc3M9InRpdGxlIj48YSBpZD0iaW50cm9kdWN0aW9uIj48L2E+Q2hhcHRlcqAxLqBJbnRyb2R1Y3Rpb248L2gyPgorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgPC9kaXY+CisgICAgICAgIDwvZGl2PgorICAgICAgICA8ZGl2IGNsYXNzPSJ0b2MiPgorICAgICAgICAgIDxwPgorICAgICAgICAgICAgPGI+VGFibGUgb2YgQ29udGVudHM8L2I+CisgICAgICAgICAgPC9wPgorICAgICAgICAgIDxkbD4KKyAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QxIj4KKyAgICAgICAgICAgICAgICA8YSBocmVmPSIjb3ZlcnZpZXciPjEuIE92ZXJ2aWV3PC9hPgorICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDEiPgorICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNjb21wb25lbnRzIj4yLiBDb21wb25lbnRzIG9mIHRoZSBPUHJvZmlsZSBzeXN0ZW08L2E+CisgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICA8ZGQ+CisgICAgICAgICAgICAgIDxkbD4KKyAgICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDIiPgorICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjYXJjaC1zcGVjaWZpYy1jb21wb25lbnRzIj4yLjEuIEFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjb21wb25lbnRzPC9hPgorICAgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QyIj4KKyAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2ZpbGVzeXN0ZW0iPjIuMi4gb3Byb2ZpbGVmczwvYT4KKyAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MiI+CisgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNkcml2ZXIiPjIuMy4gR2VuZXJpYyBrZXJuZWwgZHJpdmVyPC9hPgorICAgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QyIj4KKyAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2RhZW1vbiI+Mi40LiBUaGUgT1Byb2ZpbGUgZGFlbW9uPC9hPgorICAgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QyIj4KKyAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI3Bvc3QtcHJvZmlsaW5nIj4yLjUuIFBvc3QtcHJvZmlsaW5nIHRvb2xzPC9hPgorICAgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICAgIDwvZGw+CisgICAgICAgICAgICA8L2RkPgorICAgICAgICAgIDwvZGw+CisgICAgICAgIDwvZGl2PgorICAgICAgICA8cD4KK1RoaXMgZG9jdW1lbnQgaXMgY3VycmVudCBmb3IgT1Byb2ZpbGUgdmVyc2lvbiAwLjkuNy1yYzIuCitUaGlzIGRvY3VtZW50IHByb3ZpZGVzIHNvbWUgZGV0YWlscyBvbiB0aGUgaW50ZXJuYWwgd29ya2luZ3Mgb2YgT1Byb2ZpbGUgZm9yIHRoZQoraW50ZXJlc3RlZCBoYWNrZXIuIFRoaXMgZG9jdW1lbnQgYXNzdW1lcyBzdHJvbmcgQywgd29ya2luZyBDKyssIHBsdXMgc29tZSBrbm93bGVkZ2Ugb2YKK2tlcm5lbCBpbnRlcm5hbHMgYW5kIENQVSBoYXJkd2FyZS4KKzwvcD4KKyAgICAgICAgPGRpdiBjbGFzcz0ibm90ZSIgdGl0bGU9Ik5vdGUiIHN0eWxlPSJtYXJnaW4tbGVmdDogMC41aW47IG1hcmdpbi1yaWdodDogMC41aW47Ij4KKyAgICAgICAgICA8aDMgY2xhc3M9InRpdGxlIj5Ob3RlPC9oMz4KKyAgICAgICAgICA8cD4KK09ubHkgdGhlICJuZXciIGltcGxlbWVudGF0aW9uIGFzc29jaWF0ZWQgd2l0aCBrZXJuZWwgMi42IGFuZCBhYm92ZSBpcyBjb3ZlcmVkIGhlcmUuIDIuNAordXNlcyBhIHZlcnkgZGlmZmVyZW50IGtlcm5lbCBtb2R1bGUgaW1wbGVtZW50YXRpb24gYW5kIGRhZW1vbiB0byBwcm9kdWNlIHRoZSBzYW1wbGUgZmlsZXMuCis8L3A+CisgICAgICAgIDwvZGl2PgorICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0MSIgdGl0bGU9IjEuoE92ZXJ2aWV3Ij4KKyAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgorICAgICAgICAgICAgPGRpdj4KKyAgICAgICAgICAgICAgPGRpdj4KKyAgICAgICAgICAgICAgICA8aDIgY2xhc3M9InRpdGxlIiBzdHlsZT0iY2xlYXI6IGJvdGgiPjxhIGlkPSJvdmVydmlldyI+PC9hPjEuoE92ZXJ2aWV3PC9oMj4KKyAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICA8cD4KK09Qcm9maWxlIGlzIGEgc3RhdGlzdGljYWwgY29udGludW91cyBwcm9maWxlci4gSW4gb3RoZXIgd29yZHMsIHByb2ZpbGVzIGFyZSBnZW5lcmF0ZWQgYnkKK3JlZ3VsYXJseSBzYW1wbGluZyB0aGUgY3VycmVudCByZWdpc3RlcnMgb24gZWFjaCBDUFUgKGZyb20gYW4gaW50ZXJydXB0IGhhbmRsZXIsIHRoZQorc2F2ZWQgUEMgdmFsdWUgYXQgdGhlIHRpbWUgb2YgaW50ZXJydXB0IGlzIHN0b3JlZCksIGFuZCBjb252ZXJ0aW5nIHRoYXQgcnVudGltZSBQQwordmFsdWUgaW50byBzb21ldGhpbmcgbWVhbmluZ2Z1bCB0byB0aGUgcHJvZ3JhbW1lci4KKzwvcD4KKyAgICAgICAgICA8cD4KK09Qcm9maWxlIGFjaGlldmVzIHRoaXMgYnkgdGFraW5nIHRoZSBzdHJlYW0gb2Ygc2FtcGxlZCBQQyB2YWx1ZXMsIGFsb25nIHdpdGggdGhlIGRldGFpbAorb2Ygd2hpY2ggdGFzayB3YXMgcnVubmluZyBhdCB0aGUgdGltZSBvZiB0aGUgaW50ZXJydXB0LCBhbmQgY29udmVydGluZyBpbnRvIGEgZmlsZSBvZmZzZXQKK2FnYWluc3QgYSBwYXJ0aWN1bGFyIGJpbmFyeSBmaWxlLiBCZWNhdXNlIGFwcGxpY2F0aW9ucyA8Y29kZSBjbGFzcz0iZnVuY3Rpb24iPm1tYXAoKTwvY29kZT4KK3RoZSBjb2RlIHRoZXkgcnVuIChiZSBpdCA8Y29kZSBjbGFzcz0iZmlsZW5hbWUiPi9iaW4vYmFzaDwvY29kZT4sIDxjb2RlIGNsYXNzPSJmaWxlbmFtZSI+L2xpYi9saWJmb28uc288L2NvZGU+CitvciB3aGF0ZXZlciksIGl0J3MgcG9zc2libGUgdG8gZmluZCB0aGUgcmVsZXZhbnQgYmluYXJ5IGZpbGUgYW5kIG9mZnNldCBieSB3YWxraW5nCit0aGUgdGFzaydzIGxpc3Qgb2YgbWFwcGVkIG1lbW9yeSBhcmVhcy4gRWFjaCBQQyB2YWx1ZSBpcyB0aHVzIGNvbnZlcnRlZCBpbnRvIGEgdHVwbGUKK29mIGJpbmFyeS1pbWFnZSxvZmZzZXQuIFRoaXMgaXMgc29tZXRoaW5nIHRoYXQgdGhlIHVzZXJzcGFjZSB0b29scyBjYW4gdXNlIGRpcmVjdGx5Cit0byByZWNvbnN0cnVjdCB3aGVyZSB0aGUgY29kZSBjYW1lIGZyb20sIGluY2x1ZGluZyB0aGUgcGFydGljdWxhciBhc3NlbWJseSBpbnN0cnVjdGlvbnMsCitzeW1ib2wsIGFuZCBzb3VyY2UgbGluZSAodmlhIHRoZSBiaW5hcnkncyBkZWJ1ZyBpbmZvcm1hdGlvbiBpZiBwcmVzZW50KS4KKzwvcD4KKyAgICAgICAgICA8cD4KK1JlZ3VsYXJseSBzYW1wbGluZyB0aGUgUEMgdmFsdWUgbGlrZSB0aGlzIGFwcHJveGltYXRlcyB3aGF0IGFjdHVhbGx5IHdhcyBleGVjdXRlZCBhbmQKK2hvdyBvZnRlbiAtIG1vcmUgb2Z0ZW4gdGhhbiBub3QsIHRoaXMgc3RhdGlzdGljYWwgYXBwcm94aW1hdGlvbiBpcyBnb29kIGVub3VnaCB0bworcmVmbGVjdCByZWFsaXR5LiBJbiBjb21tb24gb3BlcmF0aW9uLCB0aGUgdGltZSBiZXR3ZWVuIGVhY2ggc2FtcGxlIGludGVycnVwdCBpcyByZWd1bGF0ZWQKK2J5IGEgZml4ZWQgbnVtYmVyIG9mIGNsb2NrIGN5Y2xlcy4gVGhpcyBpbXBsaWVzIHRoYXQgdGhlIHJlc3VsdHMgd2lsbCByZWZsZWN0IHdoZXJlCit0aGUgQ1BVIGlzIHNwZW5kaW5nIHRoZSBtb3N0IHRpbWU7IHRoaXMgaXMgb2J2aW91c2x5IGEgdmVyeSB1c2VmdWwgaW5mb3JtYXRpb24gc291cmNlCitmb3IgcGVyZm9ybWFuY2UgYW5hbHlzaXMuCis8L3A+CisgICAgICAgICAgPHA+CitTb21ldGltZXMgdGhvdWdoLCBhbiBhcHBsaWNhdGlvbiBwcm9ncmFtbWVyIG5lZWRzIGRpZmZlcmVudCBraW5kcyBvZiBpbmZvcm1hdGlvbjogZm9yIGV4YW1wbGUsCisid2hpY2ggb2YgdGhlIHNvdXJjZSByb3V0aW5lcyBjYXVzZSB0aGUgbW9zdCBjYWNoZSBtaXNzZXMgPyIuIFRoZSByaXNlIGluIGltcG9ydGFuY2Ugb2YKK3N1Y2ggbWV0cmljcyBpbiByZWNlbnQgeWVhcnMgaGFzIGxlZCBtYW55IENQVSBtYW51ZmFjdHVyZXJzIHRvIHByb3ZpZGUgaGFyZHdhcmUgcGVyZm9ybWFuY2UKK2NvdW50ZXJzIGNhcGFibGUgb2YgbWVhc3VyaW5nIHRoZXNlIGV2ZW50cyBvbiB0aGUgaGFyZHdhcmUgbGV2ZWwuIFR5cGljYWxseSwgdGhlc2UgY291bnRlcnMKK2luY3JlbWVudCBvbmNlIHBlciBlYWNoIGV2ZW50LCBhbmQgZ2VuZXJhdGUgYW4gaW50ZXJydXB0IG9uIHJlYWNoaW5nIHNvbWUgcHJlLWRlZmluZWQKK251bWJlciBvZiBldmVudHMuIE9Qcm9maWxlIGNhbiB1c2UgdGhlc2UgaW50ZXJydXB0cyB0byBnZW5lcmF0ZSBzYW1wbGVzOiB0aGVuLCB0aGUKK3Byb2ZpbGUgcmVzdWx0cyBhcmUgYSBzdGF0aXN0aWNhbCBhcHByb3hpbWF0aW9uIG9mIHdoaWNoIGNvZGUgY2F1c2VkIGhvdyBtYW55IG9mIHRoZQorZ2l2ZW4gZXZlbnQuCis8L3A+CisgICAgICAgICAgPHA+CitDb25zaWRlciBhIHNpbXBsaWZpZWQgc3lzdGVtIHRoYXQgb25seSBleGVjdXRlcyB0d28gZnVuY3Rpb25zIEEgYW5kIEIuIEEKK3Rha2VzIG9uZSBjeWNsZSB0byBleGVjdXRlLCB3aGVyZWFzIEIgdGFrZXMgOTkgY3ljbGVzLiBJbWFnaW5lIHdlIHJ1biBhdAorMTAwIGN5Y2xlcyBhIHNlY29uZCwgYW5kIHdlJ3ZlIHNldCB0aGUgcGVyZm9ybWFuY2UgY291bnRlciB0byBjcmVhdGUgYW4KK2ludGVycnVwdCBhZnRlciBhIHNldCBudW1iZXIgb2YgImV2ZW50cyIgKGluIHRoaXMgY2FzZSBhbiBldmVudCBpcyBvbmUKK2Nsb2NrIGN5Y2xlKS4gSXQgc2hvdWxkIGJlIGNsZWFyIHRoYXQgdGhlIGNoYW5jZXMgb2YgdGhlIGludGVycnVwdAorb2NjdXJyaW5nIGluIGZ1bmN0aW9uIEEgaXMgMS8xMDAsIGFuZCA5OS8xMDAgZm9yIGZ1bmN0aW9uIEIuIFRodXMsIHdlCitzdGF0aXN0aWNhbGx5IGFwcHJveGltYXRlIHRoZSBhY3R1YWwgcmVsYXRpdmUgcGVyZm9ybWFuY2UgZmVhdHVyZXMgb2YKK3RoZSB0d28gZnVuY3Rpb25zIG92ZXIgdGltZS4gVGhpcyBzYW1lIGFuYWx5c2lzIHdvcmtzIGZvciBvdGhlciB0eXBlcyBvZgorZXZlbnRzLCBwcm92aWRpbmcgdGhhdCB0aGUgaW50ZXJydXB0IGlzIHRpZWQgdG8gdGhlIG51bWJlciBvZiBldmVudHMKK29jY3VycmluZyAodGhhdCBpcywgYWZ0ZXIgTiBldmVudHMsIGFuIGludGVycnVwdCBpcyBnZW5lcmF0ZWQpLgorPC9wPgorICAgICAgICAgIDxwPgorVGhlcmUgYXJlIHR5cGljYWxseSBtb3JlIHRoYW4gb25lIG9mIHRoZXNlIGNvdW50ZXJzLCBzbyBpdCdzIHBvc3NpYmxlIHRvIHNldCB1cCBwcm9maWxpbmcKK2ZvciBzZXZlcmFsIGRpZmZlcmVudCBldmVudCB0eXBlcy4gVXNpbmcgdGhlc2UgY291bnRlcnMgZ2l2ZXMgdXMgYSBwb3dlcmZ1bCwgbG93LW92ZXJoZWFkCit3YXkgb2YgZ2FpbmluZyBwZXJmb3JtYW5jZSBtZXRyaWNzLiBJZiBPUHJvZmlsZSwgb3IgdGhlIENQVSwgZG9lcyBub3Qgc3VwcG9ydCBwZXJmb3JtYW5jZQorY291bnRlcnMsIHRoZW4gYSBzaW1wbGVyIG1ldGhvZCBpcyB1c2VkOiB0aGUga2VybmVsIHRpbWVyIGludGVycnVwdCBmZWVkcyBzYW1wbGVzCitpbnRvIE9Qcm9maWxlIGl0c2VsZi4KKzwvcD4KKyAgICAgICAgICA8cD4KK1RoZSByZXN0IG9mIHRoaXMgZG9jdW1lbnQgY29uY2VybnMgaXRzZWxmIHdpdGggaG93IHdlIGdldCBmcm9tIHJlY2VpdmluZyBzYW1wbGVzIGF0CitpbnRlcnJ1cHQgdGltZSB0byBwcm9kdWNpbmcgdXNlci1yZWFkYWJsZSBwcm9maWxlIGluZm9ybWF0aW9uLgorPC9wPgorICAgICAgICA8L2Rpdj4KKyAgICAgICAgPGRpdiBjbGFzcz0ic2VjdDEiIHRpdGxlPSIyLqBDb21wb25lbnRzIG9mIHRoZSBPUHJvZmlsZSBzeXN0ZW0iPgorICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlcGFnZSI+CisgICAgICAgICAgICA8ZGl2PgorICAgICAgICAgICAgICA8ZGl2PgorICAgICAgICAgICAgICAgIDxoMiBjbGFzcz0idGl0bGUiIHN0eWxlPSJjbGVhcjogYm90aCI+PGEgaWQ9ImNvbXBvbmVudHMiPjwvYT4yLqBDb21wb25lbnRzIG9mIHRoZSBPUHJvZmlsZSBzeXN0ZW08L2gyPgorICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgIDwvZGl2PgorICAgICAgICAgIDxkaXYgY2xhc3M9InNlY3QyIiB0aXRsZT0iMi4xLqBBcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29tcG9uZW50cyI+CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgorICAgICAgICAgICAgICA8ZGl2PgorICAgICAgICAgICAgICAgIDxkaXY+CisgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9InRpdGxlIj48YSBpZD0iYXJjaC1zcGVjaWZpYy1jb21wb25lbnRzIj48L2E+Mi4xLqBBcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29tcG9uZW50czwvaDM+CisgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICA8cD4KK0lmIE9Qcm9maWxlIHN1cHBvcnRzIHRoZSBoYXJkd2FyZSBwZXJmb3JtYW5jZSBjb3VudGVycyBmb3VuZCBvbgorYSBwYXJ0aWN1bGFyIGFyY2hpdGVjdHVyZSwgY29kZSBmb3IgbWFuYWdpbmcgdGhlIGRldGFpbHMgb2Ygc2V0dGluZwordXAgYW5kIG1hbmFnaW5nIHRoZXNlIGNvdW50ZXJzIGNhbiBiZSBmb3VuZCBpbiB0aGUga2VybmVsIHNvdXJjZQordHJlZSBpbiB0aGUgcmVsZXZhbnQgPGNvZGUgY2xhc3M9ImZpbGVuYW1lIj5hcmNoLzxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPmFyY2g8L2VtPjwvc3Bhbj4vb3Byb2ZpbGUvPC9jb2RlPgorZGlyZWN0b3J5LiBUaGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGltcGxlbWVudGF0aW9uIHdvcmtzIHZpYQorZmlsbGluZyBpbiB0aGUgb3Byb2ZpbGVfb3BlcmF0aW9ucyBzdHJ1Y3R1cmUgYXQgaW5pdCB0aW1lLiBUaGlzCitwcm92aWRlcyBhIHNldCBvZiBvcGVyYXRpb25zIHN1Y2ggYXMgPGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5zZXR1cCgpPC9jb2RlPiwKKzxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+c3RhcnQoKTwvY29kZT4sIDxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+c3RvcCgpPC9jb2RlPiwgZXRjLgordGhhdCBtYW5hZ2UgdGhlIGhhcmR3YXJlLXNwZWNpZmljIGRldGFpbHMgb2YgZmlkZGxpbmcgd2l0aCB0aGUKK3BlcmZvcm1hbmNlIGNvdW50ZXIgcmVnaXN0ZXJzLgorPC9wPgorICAgICAgICAgICAgPHA+CitUaGUgb3RoZXIgaW1wb3J0YW50IGZhY2lsaXR5IGF2YWlsYWJsZSB0byB0aGUgYXJjaGl0ZWN0dXJlIGNvZGUgaXMKKzxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+b3Byb2ZpbGVfYWRkX3NhbXBsZSgpPC9jb2RlPi4gIFRoaXMgaXMgd2hlcmUgYSBwYXJ0aWN1bGFyIHNhbXBsZQordGFrZW4gYXQgaW50ZXJydXB0IHRpbWUgaXMgZmVkIGludG8gdGhlIGdlbmVyaWMgT1Byb2ZpbGUgZHJpdmVyIGNvZGUuCis8L3A+CisgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgPGRpdiBjbGFzcz0ic2VjdDIiIHRpdGxlPSIyLjIuoG9wcm9maWxlZnMiPgorICAgICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KKyAgICAgICAgICAgICAgPGRpdj4KKyAgICAgICAgICAgICAgICA8ZGl2PgorICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPSJ0aXRsZSI+PGEgaWQ9ImZpbGVzeXN0ZW0iPjwvYT4yLjIuoG9wcm9maWxlZnM8L2gzPgorICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgPHA+CitPUHJvZmlsZSBpbXBsZW1lbnRzIGEgcHNldWRvLWZpbGVzeXN0ZW0ga25vd24gYXMgIm9wcm9maWxlZnMiLCBtb3VudGVkIGZyb20KK3VzZXJzcGFjZSBhdCA8Y29kZSBjbGFzcz0iZmlsZW5hbWUiPi9kZXYvb3Byb2ZpbGU8L2NvZGU+LiBUaGlzIGNvbnNpc3RzIG9mIHNtYWxsCitmaWxlcyBmb3IgcmVwb3J0aW5nIGFuZCByZWNlaXZpbmcgY29uZmlndXJhdGlvbiBmcm9tIHVzZXJzcGFjZSwgYXMgd2VsbAorYXMgdGhlIGFjdHVhbCBjaGFyYWN0ZXIgZGV2aWNlIHRoYXQgdGhlIE9Qcm9maWxlIHVzZXJzcGFjZSByZWNlaXZlcyBzYW1wbGVzCitmcm9tLiBBdCA8Y29kZSBjbGFzcz0iZnVuY3Rpb24iPnNldHVwKCk8L2NvZGU+IHRpbWUsIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgbWF5CithZGQgZnVydGhlciBjb25maWd1cmF0aW9uIGZpbGVzIHJlbGF0ZWQgdG8gdGhlIGRldGFpbHMgb2YgdGhlIHBlcmZvcm1hbmNlCitjb3VudGVycy4gRm9yIGV4YW1wbGUsIG9uIHg4Niwgb25lIG51bWJlcmVkIGRpcmVjdG9yeSBmb3IgZWFjaCBoYXJkd2FyZQorcGVyZm9ybWFuY2UgY291bnRlciBpcyBhZGRlZCwgd2l0aCBmaWxlcyBpbiBlYWNoIGZvciB0aGUgZXZlbnQgdHlwZSwKK3Jlc2V0IHZhbHVlLCBldGMuCis8L3A+CisgICAgICAgICAgICA8cD4KK1RoZSBmaWxlc3lzdGVtIGFsc28gY29udGFpbnMgYSA8Y29kZSBjbGFzcz0iZmlsZW5hbWUiPnN0YXRzPC9jb2RlPiBkaXJlY3Rvcnkgd2l0aAorYSBudW1iZXIgb2YgdXNlZnVsIGNvdW50ZXJzIGZvciB2YXJpb3VzIE9Qcm9maWxlIGV2ZW50cy4KKzwvcD4KKyAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0MiIgdGl0bGU9IjIuMy6gR2VuZXJpYyBrZXJuZWwgZHJpdmVyIj4KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlcGFnZSI+CisgICAgICAgICAgICAgIDxkaXY+CisgICAgICAgICAgICAgICAgPGRpdj4KKyAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz0idGl0bGUiPjxhIGlkPSJkcml2ZXIiPjwvYT4yLjMuoEdlbmVyaWMga2VybmVsIGRyaXZlcjwvaDM+CisgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICA8cD4KK1RoaXMgbGl2ZXMgaW4gPGNvZGUgY2xhc3M9ImZpbGVuYW1lIj5kcml2ZXJzL29wcm9maWxlLzwvY29kZT4sIGFuZCBmb3JtcyB0aGUgY29yZSBvZgoraG93IE9Qcm9maWxlIHdvcmtzIGluIHRoZSBrZXJuZWwuIEl0cyBqb2IgaXMgdG8gdGFrZSBzYW1wbGVzIGRlbGl2ZXJlZAorZnJvbSB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNvZGUgKHZpYSA8Y29kZSBjbGFzcz0iZnVuY3Rpb24iPm9wcm9maWxlX2FkZF9zYW1wbGUoKTwvY29kZT4pLAorYW5kIGJ1ZmZlciB0aGlzIGRhdGEsIGluIGEgdHJhbnNmb3JtZWQgZm9ybSBhcyBkZXNjcmliZWQgbGF0ZXIsIHVudGlsIHJlbGVhc2luZwordGhlIGRhdGEgdG8gdGhlIHVzZXJzcGFjZSBkYWVtb24gdmlhIHRoZSA8Y29kZSBjbGFzcz0iZmlsZW5hbWUiPi9kZXYvb3Byb2ZpbGUvYnVmZmVyPC9jb2RlPgorY2hhcmFjdGVyIGRldmljZS4KKzwvcD4KKyAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0MiIgdGl0bGU9IjIuNC6gVGhlIE9Qcm9maWxlIGRhZW1vbiI+CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgorICAgICAgICAgICAgICA8ZGl2PgorICAgICAgICAgICAgICAgIDxkaXY+CisgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9InRpdGxlIj48YSBpZD0iZGFlbW9uIj48L2E+Mi40LqBUaGUgT1Byb2ZpbGUgZGFlbW9uPC9oMz4KKyAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIDxwPgorVGhlIE9Qcm9maWxlIHVzZXJzcGFjZSBkYWVtb24ncyBqb2IgaXMgdG8gdGFrZSB0aGUgcmF3IGRhdGEgcHJvdmlkZWQgYnkgdGhlCitrZXJuZWwgYW5kIHdyaXRlIGl0IHRvIHRoZSBkaXNrLiBJdCB0YWtlcyB0aGUgc2luZ2xlIGRhdGEgc3RyZWFtIGZyb20gdGhlCitrZXJuZWwgYW5kIGxvZ3Mgc2FtcGxlIGRhdGEgYWdhaW5zdCBhIG51bWJlciBvZiBzYW1wbGUgZmlsZXMgKGZvdW5kIGluCis8Y29kZSBjbGFzcz0iZmlsZW5hbWUiPiRTRVNTSU9OX0RJUi9zYW1wbGVzL2N1cnJlbnQvPC9jb2RlPiwgYnkgZGVmYXVsdCBsb2NhdGVkIGF0IAorPGNvZGUgY2xhc3M9ImZpbGVuYW1lIj4vdmFyL2xpYi9vcHJvZmlsZS9zYW1wbGVzL2N1cnJlbnQvPC9jb2RlPi4gRm9yIHRoZSBiZW5lZml0CitvZiB0aGUgInNlcGFyYXRlIiBmdW5jdGlvbmFsaXR5LCB0aGUgbmFtZXMvcGF0aHMgb2YgdGhlc2Ugc2FtcGxlIGZpbGVzCithcmUgbWFuZ2xlZCB0byByZWZsZWN0IHdoZXJlIHRoZSBzYW1wbGVzIHdlcmUgZnJvbTogdGhpcyBjYW4gaW5jbHVkZQordGhyZWFkIElEcywgdGhlIGJpbmFyeSBmaWxlIHBhdGgsIHRoZSBldmVudCB0eXBlIHVzZWQsIGFuZCBtb3JlLgorPC9wPgorICAgICAgICAgICAgPHA+CitBZnRlciB0aGlzIGZpbmFsIHN0ZXAgZnJvbSBpbnRlcnJ1cHQgdG8gZGlzayBmaWxlLCB0aGUgZGF0YSBpcyBub3cKK3BlcnNpc3RlbnQgKHRoYXQgaXMsIGNoYW5nZXMgaW4gdGhlIHJ1bm5pbmcgb2YgdGhlIHN5c3RlbSBkbyBub3QgaW52YWxpZGF0ZQorc3RvcmVkIGRhdGEpLiBTbyB0aGUgcG9zdC1wcm9maWxpbmcgdG9vbHMgY2FuIHJ1biBvbiB0aGlzIGRhdGEgYXQgYW55Cit0aW1lIChhc3N1bWluZyB0aGUgb3JpZ2luYWwgYmluYXJ5IGZpbGVzIGFyZSBzdGlsbCBhdmFpbGFibGUgYW5kIHVuY2hhbmdlZCwKK25hdHVyYWxseSkuCis8L3A+CisgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgPGRpdiBjbGFzcz0ic2VjdDIiIHRpdGxlPSIyLjUuoFBvc3QtcHJvZmlsaW5nIHRvb2xzIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDMgY2xhc3M9InRpdGxlIj48YSBpZD0icG9zdC1wcm9maWxpbmciPjwvYT4yLjUuoFBvc3QtcHJvZmlsaW5nIHRvb2xzPC9oMz48L2Rpdj48L2Rpdj48L2Rpdj4KK1NvIGZhciwgd2UndmUgY29sbGVjdGVkIGRhdGEsIGJ1dCB3ZSd2ZSB5ZXQgdG8gcHJlc2VudCBpdCBpbiBhIHVzZWZ1bCBmb3JtCit0byB0aGUgdXNlci4gVGhpcyBpcyB0aGUgam9iIG9mIHRoZSBwb3N0LXByb2ZpbGluZyB0b29scy4gSW4gZ2VuZXJhbCBmb3JtLAordGhleSBjb2xsYXRlIGEgc3Vic2V0IG9mIHRoZSBhdmFpbGFibGUgc2FtcGxlIGZpbGVzLCBsb2FkIGFuZCBwcm9jZXNzIGVhY2ggb25lCitjb3JyZWxhdGVkIGFnYWluc3QgdGhlIHJlbGV2YW50IGJpbmFyeSBmaWxlLCBhbmQgZmluYWxseSBwcm9kdWNlIHVzZXItcmVhZGFibGUKK2luZm9ybWF0aW9uLgorPC9kaXY+CisgICAgICAgIDwvZGl2PgorICAgICAgPC9kaXY+CisgICAgICA8ZGl2IGNsYXNzPSJjaGFwdGVyIiB0aXRsZT0iQ2hhcHRlcqAyLqBQZXJmb3JtYW5jZSBjb3VudGVyIG1hbmFnZW1lbnQiPgorICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgorICAgICAgICAgIDxkaXY+CisgICAgICAgICAgICA8ZGl2PgorICAgICAgICAgICAgICA8aDIgY2xhc3M9InRpdGxlIj48YSBpZD0icGVyZm9ybWFuY2UtY291bnRlcnMiPjwvYT5DaGFwdGVyoDIuoFBlcmZvcm1hbmNlIGNvdW50ZXIgbWFuYWdlbWVudDwvaDI+CisgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgPC9kaXY+CisgICAgICAgIDxkaXYgY2xhc3M9InRvYyI+CisgICAgICAgICAgPHA+CisgICAgICAgICAgICA8Yj5UYWJsZSBvZiBDb250ZW50czwvYj4KKyAgICAgICAgICA8L3A+CisgICAgICAgICAgPGRsPgorICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDEiPgorICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNwZXJmb3JtYW5jZS1jb3VudGVycy11aSI+MS4gUHJvdmlkaW5nIGEgdXNlciBpbnRlcmZhY2U8L2E+CisgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MSI+CisgICAgICAgICAgICAgICAgPGEgaHJlZj0iI3BlcmZvcm1hbmNlLWNvdW50ZXJzLXByb2dyYW1taW5nIj4yLiBQcm9ncmFtbWluZyB0aGUgcGVyZm9ybWFuY2UgY291bnRlciByZWdpc3RlcnM8L2E+CisgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICA8ZGQ+CisgICAgICAgICAgICAgIDxkbD4KKyAgICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDIiPgorICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjcGVyZm9ybWFuY2UtY291bnRlcnMtc3RhcnQiPjIuMS4gU3RhcnRpbmcgYW5kIHN0b3BwaW5nIHRoZSBjb3VudGVyczwvYT4KKyAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MiI+CisgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNpZDU3NzQxMCI+Mi4yLiBJQTY0IGFuZCBwZXJmbW9uPC9hPgorICAgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICAgIDwvZGw+CisgICAgICAgICAgICA8L2RkPgorICAgICAgICAgIDwvZGw+CisgICAgICAgIDwvZGl2PgorICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0MSIgdGl0bGU9IjEuoFByb3ZpZGluZyBhIHVzZXIgaW50ZXJmYWNlIj4KKyAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgorICAgICAgICAgICAgPGRpdj4KKyAgICAgICAgICAgICAgPGRpdj4KKyAgICAgICAgICAgICAgICA8aDIgY2xhc3M9InRpdGxlIiBzdHlsZT0iY2xlYXI6IGJvdGgiPjxhIGlkPSJwZXJmb3JtYW5jZS1jb3VudGVycy11aSI+PC9hPjEuoFByb3ZpZGluZyBhIHVzZXIgaW50ZXJmYWNlPC9oMj4KKyAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICA8cD4KK1RoZSBwZXJmb3JtYW5jZSBjb3VudGVyIHJlZ2lzdGVycyBuZWVkIHByb2dyYW1taW5nIGluIG9yZGVyIHRvIHNldCB0aGUKK3R5cGUgb2YgZXZlbnQgdG8gY291bnQsIGV0Yy4gT1Byb2ZpbGUgdXNlcyBhIHN0YW5kYXJkIG1vZGVsIGFjcm9zcyBhbGwKK0NQVXMgZm9yIGRlZmluaW5nIHRoZXNlIGV2ZW50cyBhcyBmb2xsb3dzIDoKKzwvcD4KKyAgICAgICAgICA8ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj4KKyAgICAgICAgICAgIDx0YWJsZSBib3JkZXI9IjEiPgorICAgICAgICAgICAgICA8Y29sZ3JvdXA+CisgICAgICAgICAgICAgICAgPGNvbCAvPgorICAgICAgICAgICAgICAgIDxjb2wgLz4KKyAgICAgICAgICAgICAgPC9jb2xncm91cD4KKyAgICAgICAgICAgICAgPHRib2R5PgorICAgICAgICAgICAgICAgIDx0cj4KKyAgICAgICAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgICAgICAgPGNvZGUgY2xhc3M9Im9wdGlvbiI+ZXZlbnQ8L2NvZGU+CisgICAgICAgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgICAgICAgPHRkPlRoZSBldmVudCB0eXBlIGUuZy4gREFUQV9NRU1fUkVGUzwvdGQ+CisgICAgICAgICAgICAgICAgPC90cj4KKyAgICAgICAgICAgICAgICA8dHI+CisgICAgICAgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPnVuaXQgbWFzazwvY29kZT4KKyAgICAgICAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICAgICAgICA8dGQ+VGhlIHN1Yi1ldmVudHMgdG8gY291bnQgKG1vcmUgZGV0YWlsZWQgc3BlY2lmaWNhdGlvbik8L3RkPgorICAgICAgICAgICAgICAgIDwvdHI+CisgICAgICAgICAgICAgICAgPHRyPgorICAgICAgICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj5jb3VudGVyPC9jb2RlPgorICAgICAgICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgICAgICAgIDx0ZD5UaGUgaGFyZHdhcmUgY291bnRlcihzKSB0aGF0IGNhbiBjb3VudCB0aGlzIGV2ZW50PC90ZD4KKyAgICAgICAgICAgICAgICA8L3RyPgorICAgICAgICAgICAgICAgIDx0cj4KKyAgICAgICAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgICAgICAgPGNvZGUgY2xhc3M9Im9wdGlvbiI+Y291bnQ8L2NvZGU+CisgICAgICAgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgICAgICAgPHRkPlRoZSByZXNldCB2YWx1ZSAoaG93IG1hbnkgZXZlbnRzIGJlZm9yZSBhbiBpbnRlcnJ1cHQpPC90ZD4KKyAgICAgICAgICAgICAgICA8L3RyPgorICAgICAgICAgICAgICAgIDx0cj4KKyAgICAgICAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgICAgICAgPGNvZGUgY2xhc3M9Im9wdGlvbiI+a2VybmVsPC9jb2RlPgorICAgICAgICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgICAgICAgIDx0ZD5XaGV0aGVyIHRoZSBjb3VudGVyIHNob3VsZCBpbmNyZW1lbnQgd2hlbiBpbiBrZXJuZWwgc3BhY2U8L3RkPgorICAgICAgICAgICAgICAgIDwvdHI+CisgICAgICAgICAgICAgICAgPHRyPgorICAgICAgICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj51c2VyPC9jb2RlPgorICAgICAgICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgICAgICAgIDx0ZD5XaGV0aGVyIHRoZSBjb3VudGVyIHNob3VsZCBpbmNyZW1lbnQgd2hlbiBpbiB1c2VyIHNwYWNlPC90ZD4KKyAgICAgICAgICAgICAgICA8L3RyPgorICAgICAgICAgICAgICA8L3Rib2R5PgorICAgICAgICAgICAgPC90YWJsZT4KKyAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICA8cD4KK1RoZSB0ZXJtICJ1bml0IG1hc2siIGlzIGJvcnJvd2VkIGZyb20gdGhlIEludGVsIGFyY2hpdGVjdHVyZXMsIGFuZCBjYW4KK2Z1cnRoZXIgc3BlY2lmeSBleGFjdGx5IHdoZW4gYSBjb3VudGVyIGlzIGluY3JlbWVudGVkIChmb3IgZXhhbXBsZSwKK2NhY2hlLXJlbGF0ZWQgZXZlbnRzIGNhbiBiZSByZXN0cmljdGVkIHRvIHBhcnRpY3VsYXIgc3RhdGUgdHJhbnNpdGlvbnMKK29mIHRoZSBjYWNoZSBsaW5lcykuCis8L3A+CisgICAgICAgICAgPHA+CitBbGwgb2YgdGhlIGF2YWlsYWJsZSBoYXJkd2FyZSBldmVudHMgYW5kIHRoZWlyIGRldGFpbHMgYXJlIHNwZWNpZmllZCBpbgordGhlIHRleHR1YWwgZmlsZXMgaW4gdGhlIDxjb2RlIGNsYXNzPSJmaWxlbmFtZSI+ZXZlbnRzPC9jb2RlPiBkaXJlY3RvcnkuIFRoZQorc3ludGF4IG9mIHRoZXNlIGZpbGVzIHNob3VsZCBiZSBmYWlybHkgb2J2aW91cy4gVGhlIHVzZXIgc3BlY2lmaWVzIHRoZQorbmFtZXMgYW5kIGNvbmZpZ3VyYXRpb24gZGV0YWlscyBvZiB0aGUgY2hvc2VuIGNvdW50ZXJzIHZpYQorPHNwYW4gY2xhc3M9ImNvbW1hbmQiPjxzdHJvbmc+b3Bjb250cm9sPC9zdHJvbmc+PC9zcGFuPi4gVGhlc2UgYXJlIHRoZW4gd3JpdHRlbiB0byB0aGUga2VybmVsCittb2R1bGUgKGluIG51bWVyaWNhbCBmb3JtKSB2aWEgPGNvZGUgY2xhc3M9ImZpbGVuYW1lIj4vZGV2L29wcm9maWxlL04vPC9jb2RlPgord2hlcmUgTiBpcyB0aGUgcGh5c2ljYWwgaGFyZHdhcmUgY291bnRlciAoc29tZSBldmVudHMgY2FuIG9ubHkgYmUgdXNlZAorb24gc3BlY2lmaWMgY291bnRlcnM7IE9Qcm9maWxlIGhpZGVzIHRoZXNlIGRldGFpbHMgZnJvbSB0aGUgdXNlciB3aGVuCitwb3NzaWJsZSkuIE9uIElBNjQsIHRoZSBwZXJmbW9uLWJhc2VkIGludGVyZmFjZSBiZWhhdmVzIHNvbWV3aGF0CitkaWZmZXJlbnRseSwgYXMgZGVzY3JpYmVkIGxhdGVyLgorPC9wPgorICAgICAgICA8L2Rpdj4KKyAgICAgICAgPGRpdiBjbGFzcz0ic2VjdDEiIHRpdGxlPSIyLqBQcm9ncmFtbWluZyB0aGUgcGVyZm9ybWFuY2UgY291bnRlciByZWdpc3RlcnMiPgorICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlcGFnZSI+CisgICAgICAgICAgICA8ZGl2PgorICAgICAgICAgICAgICA8ZGl2PgorICAgICAgICAgICAgICAgIDxoMiBjbGFzcz0idGl0bGUiIHN0eWxlPSJjbGVhcjogYm90aCI+PGEgaWQ9InBlcmZvcm1hbmNlLWNvdW50ZXJzLXByb2dyYW1taW5nIj48L2E+Mi6gUHJvZ3JhbW1pbmcgdGhlIHBlcmZvcm1hbmNlIGNvdW50ZXIgcmVnaXN0ZXJzPC9oMj4KKyAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICA8cD4KK1dlIGhhdmUgZGVzY3JpYmVkIGhvdyB0aGUgdXNlciBpbnRlcmZhY2UgZmlsbHMgaW4gdGhlIGRlc2lyZWQKK2NvbmZpZ3VyYXRpb24gb2YgdGhlIGNvdW50ZXJzIGFuZCB0cmFuc21pdHMgdGhlIGluZm9ybWF0aW9uIHRvIHRoZQora2VybmVsLiBJdCBpcyB0aGUgam9iIG9mIHRoZSA8Y29kZSBjbGFzcz0iZnVuY3Rpb24iPi0mZ3Q7c2V0dXAoKTwvY29kZT4gbWV0aG9kCit0byBhY3R1YWxseSBwcm9ncmFtIHRoZSBwZXJmb3JtYW5jZSBjb3VudGVyIHJlZ2lzdGVycy4gQ2xlYXJseSwgdGhlCitkZXRhaWxzIG9mIGhvdyB0aGlzIGlzIGRvbmUgaXMgYXJjaGl0ZWN0dXJlLXNwZWNpZmljOyBpdCBpcyBhbHNvCittb2RlbC1zcGVjaWZpYyBvbiBtYW55IGFyY2hpdGVjdHVyZXMuIEZvciBleGFtcGxlLCBpMzg2IHByb3ZpZGVzIG1ldGhvZHMKK2ZvciBlYWNoIG1vZGVsIHR5cGUgdGhhdCBwcm9ncmFtcyB0aGUgY291bnRlciByZWdpc3RlcnMgY29ycmVjdGx5Cisoc2VlIHRoZSA8Y29kZSBjbGFzcz0iZmlsZW5hbWUiPm9wX21vZGVsXyo8L2NvZGU+IGZpbGVzIGluCis8Y29kZSBjbGFzcz0iZmlsZW5hbWUiPmFyY2gvaTM4Ni9vcHJvZmlsZTwvY29kZT4gZm9yIHRoZSBkZXRhaWxzKS4gVGhlIG1ldGhvZAorcmVhZHMgdGhlIHZhbHVlcyBzdG9yZWQgaW4gdGhlIHZpcnR1YWwgb3Byb2ZpbGVmcyBmaWxlcyBhbmQgcHJvZ3JhbXMKK3RoZSByZWdpc3RlcnMgYXBwcm9wcmlhdGVseSwgcmVhZHkgZm9yIHN0YXJ0aW5nIHRoZSBhY3R1YWwgcHJvZmlsaW5nCitzZXNzaW9uLgorPC9wPgorICAgICAgICAgIDxwPgorVGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBkcml2ZXJzIG1ha2Ugc3VyZSB0byBzYXZlIHRoZSBvbGQgcmVnaXN0ZXIKK3NldHRpbmdzIGJlZm9yZSBkb2luZyBPUHJvZmlsZSBzZXR1cC4gVGhleSBhcmUgcmVzdG9yZWQgd2hlbiBPUHJvZmlsZQorc2h1dHMgZG93bi4gVGhpcyBpcyB1c2VmdWwsIGZvciBleGFtcGxlLCBvbiBpMzg2LCB3aGVyZSB0aGUgTk1JIHdhdGNoZG9nCit1c2VzIHRoZSBzYW1lIHBlcmZvcm1hbmNlIGNvdW50ZXIgcmVnaXN0ZXJzIGFzIE9Qcm9maWxlOyB0aGV5IGNhbm5vdAorcnVuIGNvbmN1cnJlbnRseSwgYnV0IE9Qcm9maWxlIG1ha2VzIHN1cmUgdG8gcmVzdG9yZSB0aGUgc2V0dXAgaXQgZm91bmQKK2JlZm9yZSBpdCB3YXMgcnVubmluZy4KKzwvcD4KKyAgICAgICAgICA8cD4KK0luIGFkZGl0aW9uIHRvIHByb2dyYW1taW5nIHRoZSBjb3VudGVyIHJlZ2lzdGVycyB0aGVtc2VsdmVzLCBvdGhlciBzZXR1cAoraXMgb2Z0ZW4gbmVjZXNzYXJ5LiBGb3IgZXhhbXBsZSwgb24gaTM4NiwgdGhlIGxvY2FsIEFQSUMgbmVlZHMKK3Byb2dyYW1taW5nIGluIG9yZGVyIHRvIG1ha2UgdGhlIGNvdW50ZXIncyBvdmVyZmxvdyBpbnRlcnJ1cHQgYXBwZWFyIGFzCithbiBOTUkgKG5vbi1tYXNrYWJsZSBpbnRlcnJ1cHQpLiBUaGlzIGFsbG93cyBzYW1wbGluZyAoYW5kIHRoZXJlZm9yZQorcHJvZmlsaW5nKSBvZiByZWdpb25zIHdoZXJlICJub3JtYWwiIGludGVycnVwdHMgYXJlIG1hc2tlZCwgZW5hYmxpbmcKK21vcmUgcmVsaWFibGUgcHJvZmlsZXMuCis8L3A+CisgICAgICAgICAgPGRpdiBjbGFzcz0ic2VjdDIiIHRpdGxlPSIyLjEuoFN0YXJ0aW5nIGFuZCBzdG9wcGluZyB0aGUgY291bnRlcnMiPgorICAgICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KKyAgICAgICAgICAgICAgPGRpdj4KKyAgICAgICAgICAgICAgICA8ZGl2PgorICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPSJ0aXRsZSI+PGEgaWQ9InBlcmZvcm1hbmNlLWNvdW50ZXJzLXN0YXJ0Ij48L2E+Mi4xLqBTdGFydGluZyBhbmQgc3RvcHBpbmcgdGhlIGNvdW50ZXJzPC9oMz4KKyAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIDxwPgorSW5pdGlhdGluZyBhIHByb2ZpbGluZyBzZXNzaW9uIGlzIGRvbmUgdmlhIHdyaXRpbmcgYW4gQVNDSUkgJzEnCit0byB0aGUgZmlsZSA8Y29kZSBjbGFzcz0iZmlsZW5hbWUiPi9kZXYvb3Byb2ZpbGUvZW5hYmxlPC9jb2RlPi4gVGhpcyBzZXRzIHVwIHRoZQorY29yZSwgYW5kIGNhbGxzIGludG8gdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBkcml2ZXIgdG8gYWN0dWFsbHkKK2VuYWJsZSBlYWNoIGNvbmZpZ3VyZWQgY291bnRlci4gQWdhaW4sIHRoZSBkZXRhaWxzIG9mIGhvdyB0aGlzIGlzCitkb25lIGlzIG1vZGVsLXNwZWNpZmljIChmb3IgZXhhbXBsZSwgdGhlIEF0aGxvbiBtb2RlbHMgY2FuIGRpc2FibGUKK29yIGVuYWJsZSBvbiBhIHBlci1jb3VudGVyIGJhc2lzLCB1bmxpa2UgdGhlIFBQcm8gbW9kZWxzKS4KKzwvcD4KKyAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0MiIgdGl0bGU9IjIuMi6gSUE2NCBhbmQgcGVyZm1vbiI+CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgorICAgICAgICAgICAgICA8ZGl2PgorICAgICAgICAgICAgICAgIDxkaXY+CisgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9InRpdGxlIj48YSBpZD0iaWQ1Nzc0MTAiPjwvYT4yLjIuoElBNjQgYW5kIHBlcmZtb248L2gzPgorICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgPHA+CitUaGUgSUE2NCBhcmNoaXRlY3R1cmUgcHJvdmlkZXMgYSBkaWZmZXJlbnQgaW50ZXJmYWNlIGZyb20gdGhlIG90aGVyCithcmNoaXRlY3R1cmVzLCB1c2luZyB0aGUgZXhpc3RpbmcgcGVyZm1vbiBkcml2ZXIuIFJlZ2lzdGVyIHByb2dyYW1taW5nCitpcyBoYW5kbGVkIGVudGlyZWx5IGluIHVzZXItc3BhY2UgKHNlZQorPGNvZGUgY2xhc3M9ImZpbGVuYW1lIj5kYWVtb24vb3BkX3BlcmZtb24uYzwvY29kZT4gZm9yIHRoZSBkZXRhaWxzKS4gQSBwcm9jZXNzCitpcyBmb3JrZWQgZm9yIGVhY2ggQ1BVLCB3aGljaCBjcmVhdGVzIGEgcGVyZm1vbiBjb250ZXh0IGFuZCBzZXRzIHRoZQorY291bnRlciByZWdpc3RlcnMgYXBwcm9wcmlhdGVseSB2aWEgdGhlCis8Y29kZSBjbGFzcz0iZnVuY3Rpb24iPnN5c19wZXJmbW9uY3RsPC9jb2RlPiBpbnRlcmZhY2UuIEluIGFkZGl0aW9uLCB0aGUgYWN0dWFsCitpbml0aWF0aW9uIGFuZCB0ZXJtaW5hdGlvbiBvZiB0aGUgcHJvZmlsaW5nIHNlc3Npb24gaXMgaGFuZGxlZCB2aWEgdGhlCitzYW1lIGludGVyZmFjZSB1c2luZyA8Y29kZSBjbGFzcz0iY29uc3RhbnQiPlBGTV9TVEFSVDwvY29kZT4gYW5kCis8Y29kZSBjbGFzcz0iY29uc3RhbnQiPlBGTV9TVE9QPC9jb2RlPi4gT24gSUE2NCwgdGhlbiwgdGhlcmUgYXJlIG5vIG9wcm9maWxlZnMKK2ZpbGVzIGZvciB0aGUgcGVyZm9ybWFuY2UgY291bnRlcnMsIGFzIHRoZSBrZXJuZWwgZHJpdmVyIGRvZXMgbm90Citwcm9ncmFtIHRoZSByZWdpc3RlcnMgaXRzZWxmLgorPC9wPgorICAgICAgICAgICAgPHA+CitJbnN0ZWFkLCB0aGUgcGVyZm1vbiBkcml2ZXIgZm9yIE9Qcm9maWxlIHNpbXBseSByZWdpc3RlcnMgd2l0aCB0aGUKK09Qcm9maWxlIGNvcmUgd2l0aCBhbiBPUHJvZmlsZS1zcGVjaWZpYyBVVUlELiBEdXJpbmcgYSBwcm9maWxpbmcKK3Nlc3Npb24sIHRoZSBwZXJmbW9uIGNvcmUgY2FsbHMgaW50byB0aGUgT1Byb2ZpbGUgcGVyZm1vbiBkcml2ZXIgYW5kCitzYW1wbGVzIGFyZSByZWdpc3RlcmVkIHdpdGggdGhlIE9Qcm9maWxlIGNvcmUgaXRzZWxmIGFzIHVzdWFsICh3aXRoCis8Y29kZSBjbGFzcz0iZnVuY3Rpb24iPm9wcm9maWxlX2FkZF9zYW1wbGUoKTwvY29kZT4pLgorPC9wPgorICAgICAgICAgIDwvZGl2PgorICAgICAgICA8L2Rpdj4KKyAgICAgIDwvZGl2PgorICAgICAgPGRpdiBjbGFzcz0iY2hhcHRlciIgdGl0bGU9IkNoYXB0ZXKgMy6gQ29sbGVjdGluZyBhbmQgcHJvY2Vzc2luZyBzYW1wbGVzIj4KKyAgICAgICAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KKyAgICAgICAgICA8ZGl2PgorICAgICAgICAgICAgPGRpdj4KKyAgICAgICAgICAgICAgPGgyIGNsYXNzPSJ0aXRsZSI+PGEgaWQ9ImNvbGxlY3Rpbmctc2FtcGxlcyI+PC9hPkNoYXB0ZXKgMy6gQ29sbGVjdGluZyBhbmQgcHJvY2Vzc2luZyBzYW1wbGVzPC9oMj4KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgIDwvZGl2PgorICAgICAgICA8L2Rpdj4KKyAgICAgICAgPGRpdiBjbGFzcz0idG9jIj4KKyAgICAgICAgICA8cD4KKyAgICAgICAgICAgIDxiPlRhYmxlIG9mIENvbnRlbnRzPC9iPgorICAgICAgICAgIDwvcD4KKyAgICAgICAgICA8ZGw+CisgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MSI+CisgICAgICAgICAgICAgICAgPGEgaHJlZj0iI3JlY2VpdmluZy1pbnRlcnJ1cHRzIj4xLiBSZWNlaXZpbmcgaW50ZXJydXB0czwvYT4KKyAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QxIj4KKyAgICAgICAgICAgICAgICA8YSBocmVmPSIjY29yZS1zdHJ1Y3R1cmUiPjIuIENvcmUgZGF0YSBzdHJ1Y3R1cmVzPC9hPgorICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDEiPgorICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNsb2dnaW5nLXNhbXBsZSI+My4gTG9nZ2luZyBhIHNhbXBsZTwvYT4KKyAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QxIj4KKyAgICAgICAgICAgICAgICA8YSBocmVmPSIjbG9nZ2luZy1zdGFjayI+NC4gTG9nZ2luZyBzdGFjayB0cmFjZXM8L2E+CisgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MSI+CisgICAgICAgICAgICAgICAgPGEgaHJlZj0iI3N5bmNocm9uaXNpbmctYnVmZmVycyI+NS4gU3luY2hyb25pc2luZyB0aGUgQ1BVIGJ1ZmZlcnMgdG8gdGhlIGV2ZW50IGJ1ZmZlcjwvYT4KKyAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QxIj4KKyAgICAgICAgICAgICAgICA8YSBocmVmPSIjZGVudHJ5LWNvb2tpZXMiPjYuIElkZW50aWZ5aW5nIGJpbmFyeSBpbWFnZXM8L2E+CisgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MSI+CisgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2ZpbmRpbmctZGVudHJ5Ij43LiBGaW5kaW5nIGEgc2FtcGxlJ3MgYmluYXJ5IGltYWdlIGFuZCBvZmZzZXQ8L2E+CisgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgPC9kbD4KKyAgICAgICAgPC9kaXY+CisgICAgICAgIDxkaXYgY2xhc3M9InNlY3QxIiB0aXRsZT0iMS6gUmVjZWl2aW5nIGludGVycnVwdHMiPgorICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlcGFnZSI+CisgICAgICAgICAgICA8ZGl2PgorICAgICAgICAgICAgICA8ZGl2PgorICAgICAgICAgICAgICAgIDxoMiBjbGFzcz0idGl0bGUiIHN0eWxlPSJjbGVhcjogYm90aCI+PGEgaWQ9InJlY2VpdmluZy1pbnRlcnJ1cHRzIj48L2E+MS6gUmVjZWl2aW5nIGludGVycnVwdHM8L2gyPgorICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgIDwvZGl2PgorICAgICAgICAgIDxwPgorTmF0dXJhbGx5LCBob3cgdGhlIG92ZXJmbG93IGludGVycnVwdHMgYXJlIHJlY2VpdmVkIGlzIHNwZWNpZmljCit0byB0aGUgaGFyZHdhcmUgYXJjaGl0ZWN0dXJlLCB1bmxlc3Mgd2UgYXJlIGluICJ0aW1lciIgbW9kZSwgd2hlcmUgdGhlCitsb2dnaW5nIHJvdXRpbmUgaXMgY2FsbGVkIGRpcmVjdGx5IGZyb20gdGhlIHN0YW5kYXJkIGtlcm5lbCB0aW1lcgoraW50ZXJydXB0IGhhbmRsZXIuCis8L3A+CisgICAgICAgICAgPHA+CitPbiB0aGUgaTM4NiBhcmNoaXRlY3R1cmUsIHRoZSBsb2NhbCBBUElDIGlzIHByb2dyYW1tZWQgc3VjaCB0aGF0IHdoZW4gYQorY291bnRlciBvdmVyZmxvd3MgKHRoYXQgaXMsIGl0IHJlY2VpdmVzIGFuIGV2ZW50IHRoYXQgY2F1c2VzIGFuIGludGVnZXIKK292ZXJmbG93IG9mIHRoZSByZWdpc3RlciB2YWx1ZSB0byB6ZXJvKSwgYW4gTk1JIGlzIGdlbmVyYXRlZC4gVGhpcyBjYWxscworaW50byB0aGUgZ2VuZXJhbCBoYW5kbGVyIDxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+ZG9fbm1pKCk8L2NvZGU+OyBiZWNhdXNlIE9Qcm9maWxlCitoYXMgcmVnaXN0ZXJlZCBpdHNlbGYgYXMgY2FwYWJsZSBvZiBoYW5kbGluZyBOTUkgaW50ZXJydXB0cywgdGhpcyB3aWxsCitjYWxsIGludG8gdGhlIE9Qcm9maWxlIGRyaXZlciBjb2RlIGluCis8Y29kZSBjbGFzcz0iZmlsZW5hbWUiPmFyY2gvaTM4Ni9vcHJvZmlsZTwvY29kZT4uIEhlcmUsIHRoZSBzYXZlZCBQQyB2YWx1ZSAodGhlCitDUFUgc2F2ZXMgdGhlIHJlZ2lzdGVyIHNldCBhdCB0aGUgdGltZSBvZiBpbnRlcnJ1cHQgb24gdGhlIHN0YWNrCithdmFpbGFibGUgZm9yIGluc3BlY3Rpb24pIGlzIGV4dHJhY3RlZCwgYW5kIHRoZSBjb3VudGVycyBhcmUgZXhhbWluZWQgdG8KK2ZpbmQgb3V0IHdoaWNoIG9uZSBnZW5lcmF0ZWQgdGhlIGludGVycnVwdC4gQWxzbyBkZXRlcm1pbmVkIGlzIHdoZXRoZXIKK3RoZSBzeXN0ZW0gd2FzIGluc2lkZSBrZXJuZWwgb3IgdXNlciBzcGFjZSBhdCB0aGUgdGltZSBvZiB0aGUgaW50ZXJydXB0LgorVGhlc2UgdGhyZWUgcGllY2VzIG9mIGluZm9ybWF0aW9uIGFyZSB0aGVuIGZvcndhcmRlZCBvbnRvIHRoZSBPUHJvZmlsZQorY29yZSB2aWEgPGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5vcHJvZmlsZV9hZGRfc2FtcGxlKCk8L2NvZGU+LiBGaW5hbGx5LCB0aGUKK2NvdW50ZXIgdmFsdWVzIGFyZSByZXNldCB0byB0aGUgY2hvc2VuIGNvdW50IHZhbHVlLCB0byBlbnN1cmUgYW5vdGhlcgoraW50ZXJydXB0IGhhcHBlbnMgYWZ0ZXIgYW5vdGhlciBOIGV2ZW50cyBoYXZlIG9jY3VycmVkLiBPdGhlcgorYXJjaGl0ZWN0dXJlcyBiZWhhdmUgaW4gYSBzaW1pbGFyIG1hbm5lci4KKzwvcD4KKyAgICAgICAgPC9kaXY+CisgICAgICAgIDxkaXYgY2xhc3M9InNlY3QxIiB0aXRsZT0iMi6gQ29yZSBkYXRhIHN0cnVjdHVyZXMiPgorICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlcGFnZSI+CisgICAgICAgICAgICA8ZGl2PgorICAgICAgICAgICAgICA8ZGl2PgorICAgICAgICAgICAgICAgIDxoMiBjbGFzcz0idGl0bGUiIHN0eWxlPSJjbGVhcjogYm90aCI+PGEgaWQ9ImNvcmUtc3RydWN0dXJlIj48L2E+Mi6gQ29yZSBkYXRhIHN0cnVjdHVyZXM8L2gyPgorICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgIDwvZGl2PgorICAgICAgICAgIDxwPgorQmVmb3JlIGNvbnNpZGVyaW5nIHdoYXQgaGFwcGVucyB3aGVuIHdlIGxvZyBhIHNhbXBsZSwgd2Ugc2hhbGwgZGlncmVzcworZm9yIGEgbW9tZW50IGFuZCBsb29rIGF0IHRoZSBnZW5lcmFsIHN0cnVjdHVyZSBvZiB0aGUgZGF0YSBjb2xsZWN0aW9uCitzeXN0ZW0uCis8L3A+CisgICAgICAgICAgPHA+CitPUHJvZmlsZSBtYWludGFpbnMgYSBzbWFsbCBidWZmZXIgZm9yIHN0b3JpbmcgdGhlIGxvZ2dlZCBzYW1wbGVzIGZvcgorZWFjaCBDUFUgb24gdGhlIHN5c3RlbS4gT25seSB0aGlzIGJ1ZmZlciBpcyBhbHRlcmVkIHdoZW4gd2UgYWN0dWFsbHkgbG9nCithIHNhbXBsZSAocmVtZW1iZXIsIHdlIG1heSBzdGlsbCBiZSBpbiBhbiBOTUkgY29udGV4dCwgc28gbm8gbG9ja2luZyBpcworcG9zc2libGUpLiBUaGUgYnVmZmVyIGlzIG1hbmFnZWQgYnkgYSB0d28taGFuZGVkIHN5c3RlbTsgdGhlICJoZWFkIgoraXRlcmF0b3IgZGljdGF0ZXMgd2hlcmUgdGhlIG5leHQgc2FtcGxlIGRhdGEgc2hvdWxkIGJlIHBsYWNlZCBpbiB0aGUKK2J1ZmZlci4gT2YgY291cnNlLCBvdmVyZmxvdyBvZiB0aGUgYnVmZmVyIGlzIHBvc3NpYmxlLCBpbiB3aGljaCBjYXNlCit0aGUgc2FtcGxlIGlzIGRpc2NhcmRlZC4KKzwvcD4KKyAgICAgICAgICA8cD4KK0l0IGlzIGNyaXRpY2FsIHRvIHJlbWVtYmVyIHRoYXQgYXQgdGhpcyBwb2ludCwgdGhlIFBDIHZhbHVlIGlzIGFuCithYnNvbHV0ZSB2YWx1ZSwgYW5kIGlzIHRoZXJlZm9yZSBvbmx5IG1lYW5pbmdmdWwgaW4gdGhlIGNvbnRleHQgb2Ygd2hpY2gKK3Rhc2sgaXQgd2FzIGxvZ2dlZCBhZ2FpbnN0LiBUaHVzLCB0aGVzZSBwZXItQ1BVIGJ1ZmZlcnMgYWxzbyBtYWludGFpbgorZGV0YWlscyBvZiB3aGljaCB0YXNrIGVhY2ggbG9nZ2VkIHNhbXBsZSBpcyBmb3IsIGFzIGRlc2NyaWJlZCBpbiB0aGUKK25leHQgc2VjdGlvbi4gSW4gYWRkaXRpb24sIHdlIHN0b3JlIHdoZXRoZXIgdGhlIHNhbXBsZSB3YXMgaW4ga2VybmVsCitzcGFjZSBvciB1c2VyIHNwYWNlIChvbiBzb21lIGFyY2hpdGVjdHVyZXMgYW5kIGNvbmZpZ3VyYXRpb25zLCB0aGUgYWRkcmVzcworc3BhY2UgaXMgbm90IHN1Yi1kaXZpZGVkIG5lYXRseSBhdCBhIHNwZWNpZmljIFBDIHZhbHVlLCBzbyB3ZSBtdXN0IHN0b3JlCit0aGlzIGluZm9ybWF0aW9uKS4KKzwvcD4KKyAgICAgICAgICA8cD4KK0FzIHdlbGwgYXMgdGhlc2Ugc21hbGwgcGVyLUNQVSBidWZmZXJzLCB3ZSBoYXZlIGEgY29uc2lkZXJhYmx5IGxhcmdlcgorc2luZ2xlIGJ1ZmZlci4gVGhpcyBob2xkcyB0aGUgZGF0YSB0aGF0IGlzIGV2ZW50dWFsbHkgY29waWVkIG91dCBpbnRvCit0aGUgT1Byb2ZpbGUgZGFlbW9uLiBPbiBjZXJ0YWluIHN5c3RlbSBldmVudHMsIHRoZSBwZXItQ1BVIGJ1ZmZlcnMgYXJlCitwcm9jZXNzZWQgYW5kIGVudGVyZWQgKGluIG11dGF0ZWQgZm9ybSkgaW50byB0aGUgbWFpbiBidWZmZXIsIGtub3duIGluCit0aGUgc291cmNlIGFzIHRoZSAiZXZlbnQgYnVmZmVyIi4gVGhlICJ0YWlsIiBpdGVyYXRvciBpbmRpY2F0ZXMgdGhlCitwb2ludCBmcm9tIHdoaWNoIHRoZSBDUFUgbWF5IGJlIHJlYWQsIHVwIHRvIHRoZSBwb3NpdGlvbiBvZiB0aGUgImhlYWQiCitpdGVyYXRvci4gVGhpcyBwcm92aWRlcyBhbiBlbnRpcmVseSBsb2NrLWZyZWUgbWV0aG9kIGZvciBleHRyYWN0aW5nIGRhdGEKK2Zyb20gdGhlIENQVSBidWZmZXJzLiBUaGlzIHByb2Nlc3MgaXMgZGVzY3JpYmVkIGluIGRldGFpbCBsYXRlciBpbiB0aGlzIGNoYXB0ZXIuCis8L3A+CisgICAgICAgICAgPGRpdiBjbGFzcz0iZmlndXJlIj4KKyAgICAgICAgICAgIDxhIGlkPSJpZDU3NzUzOCI+PC9hPgorICAgICAgICAgICAgPHAgY2xhc3M9InRpdGxlIj4KKyAgICAgICAgICAgICAgPGI+RmlndXJloDMuMS6gVGhlIE9Qcm9maWxlIGJ1ZmZlcnM8L2I+CisgICAgICAgICAgICA8L3A+CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaWd1cmUtY29udGVudHMiPgorICAgICAgICAgICAgICA8ZGl2PgorICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWZmZXJzLnBuZyIgYWx0PSJUaGUgT1Byb2ZpbGUgYnVmZmVycyIgLz4KKyAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICA8YnIgY2xhc3M9ImZpZ3VyZS1icmVhayIgLz4KKyAgICAgICAgPC9kaXY+CisgICAgICAgIDxkaXYgY2xhc3M9InNlY3QxIiB0aXRsZT0iMy6gTG9nZ2luZyBhIHNhbXBsZSI+CisgICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KKyAgICAgICAgICAgIDxkaXY+CisgICAgICAgICAgICAgIDxkaXY+CisgICAgICAgICAgICAgICAgPGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj48YSBpZD0ibG9nZ2luZy1zYW1wbGUiPjwvYT4zLqBMb2dnaW5nIGEgc2FtcGxlPC9oMj4KKyAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICA8cD4KK0FzIG1lbnRpb25lZCwgdGhlIHNhbXBsZSBpcyBsb2dnZWQgaW50byB0aGUgYnVmZmVyIHNwZWNpZmljIHRvIHRoZQorY3VycmVudCBDUFUuIFRoZSBDUFUgYnVmZmVyIGlzIGEgc2ltcGxlIGFycmF5IG9mIHBhaXJzIG9mIHVuc2lnbmVkIGxvbmcKK3ZhbHVlczsgZm9yIGEgc2FtcGxlLCB0aGV5IGhvbGQgdGhlIFBDIHZhbHVlIGFuZCB0aGUgY291bnRlciBmb3IgdGhlCitzYW1wbGUuIChUaGUgY291bnRlciB2YWx1ZSBpcyBsYXRlciB1c2VkIHRvIHRyYW5zbGF0ZSBiYWNrIGludG8gdGhlIHJlbGV2YW50CitldmVudCB0eXBlIHRoZSBjb3VudGVyIHdhcyBwcm9ncmFtbWVkIHRvKS4KKzwvcD4KKyAgICAgICAgICA8cD4KK0luIGFkZGl0aW9uIHRvIGxvZ2dpbmcgdGhlIHNhbXBsZSBpdHNlbGYsIHdlIGFsc28gbG9nIHRhc2sgc3dpdGNoZXMuCitUaGlzIGlzIHNpbXBseSBkb25lIGJ5IHN0b3JpbmcgdGhlIGFkZHJlc3Mgb2YgdGhlIGxhc3QgdGFzayB0byBsb2cgYQorc2FtcGxlIG9uIHRoYXQgQ1BVIGluIGEgZGF0YSBzdHJ1Y3R1cmUsIGFuZCB3cml0aW5nIGEgdGFzayBzd2l0Y2ggZW50cnkKK2ludG8gdGhlIGJ1ZmZlciBpZiB0aGUgbmV3IHZhbHVlIG9mIDxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Y3VycmVudCgpPC9jb2RlPiBoYXMKK2NoYW5nZWQuIE5vdGUgdGhhdCBsYXRlciB3ZSB3aWxsIGRpcmVjdGx5IGRlLXJlZmVyZW5jZSB0aGlzIHBvaW50ZXI7Cit0aGlzIGltcG9zZXMgY2VydGFpbiByZXN0cmljdGlvbnMgb24gd2hlbiBhbmQgaG93IHRoZSBDUFUgYnVmZmVycyBuZWVkCit0byBiZSBwcm9jZXNzZWQuCis8L3A+CisgICAgICAgICAgPHA+CitGaW5hbGx5LCBhcyBtZW50aW9uZWQsIHdlIGxvZyB3aGV0aGVyIHdlIGhhdmUgY2hhbmdlZCBiZXR3ZWVuIGtlcm5lbCBhbmQKK3VzZXJzcGFjZSB1c2luZyBhIHNpbWlsYXIgbWV0aG9kLiBCb3RoIG9mIHRoZXNlIHZhcmlhYmxlcworKDxjb2RlIGNsYXNzPSJ2YXJuYW1lIj5sYXN0X3Rhc2s8L2NvZGU+IGFuZCA8Y29kZSBjbGFzcz0idmFybmFtZSI+bGFzdF9pc19rZXJuZWw8L2NvZGU+KSBhcmUKK3Jlc2V0IHdoZW4gdGhlIENQVSBidWZmZXIgaXMgcmVhZC4KKzwvcD4KKyAgICAgICAgPC9kaXY+CisgICAgICAgIDxkaXYgY2xhc3M9InNlY3QxIiB0aXRsZT0iNC6gTG9nZ2luZyBzdGFjayB0cmFjZXMiPgorICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlcGFnZSI+CisgICAgICAgICAgICA8ZGl2PgorICAgICAgICAgICAgICA8ZGl2PgorICAgICAgICAgICAgICAgIDxoMiBjbGFzcz0idGl0bGUiIHN0eWxlPSJjbGVhcjogYm90aCI+PGEgaWQ9ImxvZ2dpbmctc3RhY2siPjwvYT40LqBMb2dnaW5nIHN0YWNrIHRyYWNlczwvaDI+CisgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgPHA+CitPUHJvZmlsZSBjYW4gYWxzbyBwcm92aWRlIHN0YXRpc3RpY2FsIHNhbXBsZXMgb2YgY2FsbCBjaGFpbnMgKG9uIHg4NikuIFRvCitkbyB0aGlzLCBhdCBzYW1wbGUgdGltZSwgdGhlIGZyYW1lIHBvaW50ZXIgY2hhaW4gaXMgdHJhdmVyc2VkLCByZWNvcmRpbmcKK3RoZSByZXR1cm4gYWRkcmVzcyBmb3IgZWFjaCBzdGFjayBmcmFtZS4gVGhpcyB3aWxsIG9ubHkgd29yayBpZiB0aGUgY29kZQord2FzIGNvbXBpbGVkIHdpdGggZnJhbWUgcG9pbnRlcnMsIGJ1dCB3ZSdyZSBjYXJlZnVsIHRvIGFib3J0IHRoZQordHJhdmVyc2FsIGlmIHRoZSBmcmFtZSBwb2ludGVyIGFwcGVhcnMgYmFkLiBXZSBzdG9yZSB0aGUgc2V0IG9mIHJldHVybgorYWRkcmVzc2VzIHN0cmFpZ2h0IGludG8gdGhlIENQVSBidWZmZXIuIE5vdGUgdGhhdCwgc2luY2UgdGhpcyB0cmF2ZXJzYWwKK2lzIGtleWVkIG9mZiB0aGUgc3RhbmRhcmQgc2FtcGxlIGludGVycnVwdCwgdGhlIG51bWJlciBvZiB0aW1lcyBhCitmdW5jdGlvbiBhcHBlYXJzIGluIGEgc3RhY2sgdHJhY2UgaXMgbm90IGFuIGluZGljYXRvciBvZiBob3cgbWFueSB0aW1lcwordGhlIGNhbGwgc2l0ZSB3YXMgZXhlY3V0ZWQ6IHJhdGhlciwgaXQncyByZWxhdGVkIHRvIHRoZSBudW1iZXIgb2YKK3NhbXBsZXMgd2UgdG9vayB3aGVyZSB0aGF0IGNhbGwgc2l0ZSB3YXMgaW52b2x2ZWQuIFRodXMsIHRoZSByZXN1bHRzIGZvcgorc3RhY2sgdHJhY2VzIGFyZSBub3QgbmVjZXNzYXJpbHkgcHJvcG9ydGlvbmFsIHRvIHRoZSBjYWxsIGNvdW50czoKK3R5cGljYWwgcHJvZ3JhbXMgd2lsbCBoYXZlIG1hbnkgPGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5tYWluKCk8L2NvZGU+IHNhbXBsZXMuCis8L3A+CisgICAgICAgIDwvZGl2PgorICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0MSIgdGl0bGU9IjUuoFN5bmNocm9uaXNpbmcgdGhlIENQVSBidWZmZXJzIHRvIHRoZSBldmVudCBidWZmZXIiPgorICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlcGFnZSI+CisgICAgICAgICAgICA8ZGl2PgorICAgICAgICAgICAgICA8ZGl2PgorICAgICAgICAgICAgICAgIDxoMiBjbGFzcz0idGl0bGUiIHN0eWxlPSJjbGVhcjogYm90aCI+PGEgaWQ9InN5bmNocm9uaXNpbmctYnVmZmVycyI+PC9hPjUuoFN5bmNocm9uaXNpbmcgdGhlIENQVSBidWZmZXJzIHRvIHRoZSBldmVudCBidWZmZXI8L2gyPgorICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgIDwvZGl2PgorICAgICAgICAgIDxwPgorQXQgc29tZSBwb2ludCwgd2UgaGF2ZSB0byBwcm9jZXNzIHRoZSBkYXRhIGluIGVhY2ggQ1BVIGJ1ZmZlciBhbmQgZW50ZXIKK2l0IGludG8gdGhlIG1haW4gKGV2ZW50KSBidWZmZXIuIFRoZSBmaWxlCis8Y29kZSBjbGFzcz0iZmlsZW5hbWUiPmJ1ZmZlcl9zeW5jLmM8L2NvZGU+IGNvbnRhaW5zIHRoZSByZWxldmFudCBjb2RlLiBXZQorcGVyaW9kaWNhbGx5IChjdXJyZW50bHkgZXZlcnkgPGNvZGUgY2xhc3M9ImNvbnN0YW50Ij5IWjwvY29kZT4vNCBqaWZmaWVzKSBzdGFydAordGhlIHN5bmNocm9uaXNhdGlvbiBwcm9jZXNzLiBJbiBhZGRpdGlvbiwgd2UgcHJvY2VzcyB0aGUgYnVmZmVycyBvbgorY2VydGFpbiBldmVudHMsIHN1Y2ggYXMgYW4gYXBwbGljYXRpb24gY2FsbGluZworPGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5tdW5tYXAoKTwvY29kZT4uIFRoaXMgaXMgcGFydGljdWxhcmx5IGltcG9ydGFudCBmb3IKKzxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+ZXhpdCgpPC9jb2RlPiAtIGJlY2F1c2UgdGhlIENQVSBidWZmZXJzIGNvbnRhaW4gcG9pbnRlcnMKK3RvIHRoZSB0YXNrIHN0cnVjdHVyZSwgaWYgd2UgZG9uJ3QgcHJvY2VzcyBhbGwgdGhlIGJ1ZmZlcnMgYmVmb3JlIHRoZQordGFzayBpcyBhY3R1YWxseSBkZXN0cm95ZWQgYW5kIHRoZSB0YXNrIHN0cnVjdHVyZSBmcmVlZCwgdGhlbiB3ZSBjb3VsZAorZW5kIHVwIHRyeWluZyB0byBkZXJlZmVyZW5jZSBhIGJvZ3VzIHBvaW50ZXIgaW4gb25lIG9mIHRoZSBDUFUgYnVmZmVycy4KKzwvcD4KKyAgICAgICAgICA8cD4KK1dlIGFsc28gYWRkIGEgbm90aWZpY2F0aW9uIHdoZW4gYSBrZXJuZWwgbW9kdWxlIGlzIGxvYWRlZDsgdGhpcyBpcyBzbwordGhhdCB1c2VyLXNwYWNlIGNhbiByZS1yZWFkIDxjb2RlIGNsYXNzPSJmaWxlbmFtZSI+L3Byb2MvbW9kdWxlczwvY29kZT4gdG8KK2RldGVybWluZSB0aGUgbG9hZCBhZGRyZXNzZXMgb2Yga2VybmVsIG1vZHVsZSB0ZXh0IHNlY3Rpb25zLiBXaXRob3V0Cit0aGlzIG5vdGlmaWNhdGlvbiwgc2FtcGxlcyBmb3IgYSBuZXdseS1sb2FkZWQgbW9kdWxlIGNvdWxkIGdldCBsb3N0IG9yCitiZSBhdHRyaWJ1dGVkIHRvIHRoZSB3cm9uZyBtb2R1bGUuCis8L3A+CisgICAgICAgICAgPHA+CitUaGUgc3luY2hyb25pc2F0aW9uIGl0c2VsZiB3b3JrcyBpbiB0aGUgZm9sbG93aW5nIG1hbm5lcjogZmlyc3QsIG11dHVhbAorZXhjbHVzaW9uIG9uIHRoZSBldmVudCBidWZmZXIgaXMgdGFrZW4uIFJlbWVtYmVyLCB3ZSBkbyBub3QgbmVlZCB0byBkbwordGhhdCBmb3IgZWFjaCBDUFUgYnVmZmVyLCBhcyB3ZSBvbmx5IHJlYWQgZnJvbSB0aGUgdGFpbCBpdGVyYXRvciAod2hpbHN0CitpbnRlcnJ1cHRzIG1pZ2h0IGJlIGFycml2aW5nIGF0IHRoZSBzYW1lIGJ1ZmZlciwgYnV0IHRoZXkgd2lsbCB3cml0ZSB0bwordGhlIHBvc2l0aW9uIG9mIHRoZSBoZWFkIGl0ZXJhdG9yLCBsZWF2aW5nIHByZXZpb3VzbHkgd3JpdHRlbiBlbnRyaWVzCitpbnRhY3QpLiBUaGVuLCB3ZSBwcm9jZXNzIGVhY2ggQ1BVIGJ1ZmZlciBpbiB0dXJuLiBBIENQVSBzd2l0Y2gKK25vdGlmaWNhdGlvbiBpcyBhZGRlZCB0byB0aGUgYnVmZmVyIGZpcnN0IChmb3IKKzxjb2RlIGNsYXNzPSJvcHRpb24iPi0tc2VwYXJhdGU9Y3B1PC9jb2RlPiBzdXBwb3J0KS4gVGhlbiB0aGUgcHJvY2Vzc2luZyBvZiB0aGUKK2FjdHVhbCBkYXRhIHN0YXJ0cy4KKzwvcD4KKyAgICAgICAgICA8cD4KK0FzIG1lbnRpb25lZCwgdGhlIENQVSBidWZmZXIgY29uc2lzdHMgb2YgdGFzayBzd2l0Y2ggZW50cmllcyBhbmQgdGhlCithY3R1YWwgc2FtcGxlcy4gV2hlbiB0aGUgcm91dGluZSA8Y29kZSBjbGFzcz0iZnVuY3Rpb24iPnN5bmNfYnVmZmVyKCk8L2NvZGU+IHNlZXMKK2EgdGFzayBzd2l0Y2gsIHRoZSBwcm9jZXNzIElEIGFuZCBwcm9jZXNzIGdyb3VwIElEIGFyZSByZWNvcmRlZCBpbnRvIHRoZQorZXZlbnQgYnVmZmVyLCBhbG9uZyB3aXRoIGEgZGNvb2tpZSAoc2VlIGJlbG93KSBpZGVudGlmeWluZyB0aGUKK2FwcGxpY2F0aW9uIGJpbmFyeSAoZS5nLiA8Y29kZSBjbGFzcz0iZmlsZW5hbWUiPi9iaW4vYmFzaDwvY29kZT4pLiBUaGUKKzxjb2RlIGNsYXNzPSJ2YXJuYW1lIj5tbWFwX3NlbTwvY29kZT4gZm9yIHRoZSB0YXNrIGlzIHRoZW4gdGFrZW4sIHRvIGFsbG93IHNhZmUKK2l0ZXJhdGlvbiBhY3Jvc3MgdGhlIHRhc2tzJyBsaXN0IG9mIG1hcHBlZCBhcmVhcy4gRWFjaCBzYW1wbGUgaXMgdGhlbgorcHJvY2Vzc2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgbmV4dCBzZWN0aW9uLgorPC9wPgorICAgICAgICAgIDxwPgorQWZ0ZXIgYSBidWZmZXIgaGFzIGJlZW4gcmVhZCwgdGhlIHRhaWwgaXRlcmF0b3IgaXMgdXBkYXRlZCB0byByZWZsZWN0Citob3cgbXVjaCBvZiB0aGUgYnVmZmVyIHdhcyBwcm9jZXNzZWQuIE5vdGUgdGhhdCB3aGVuIHdlIGRldGVybWluZWQgaG93CittdWNoIGRhdGEgdGhlcmUgd2FzIHRvIHJlYWQgaW4gdGhlIENQVSBidWZmZXIsIHdlIGFsc28gY2FsbGVkCis8Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmNwdV9idWZmZXJfcmVzZXQoKTwvY29kZT4gdG8gcmVzZXQKKzxjb2RlIGNsYXNzPSJ2YXJuYW1lIj5sYXN0X3Rhc2s8L2NvZGU+IGFuZCA8Y29kZSBjbGFzcz0idmFybmFtZSI+bGFzdF9pc19rZXJuZWw8L2NvZGU+LCBhcword2UndmUgYWxyZWFkeSBtZW50aW9uZWQuIER1cmluZyB0aGUgcHJvY2Vzc2luZywgbW9yZSBzYW1wbGVzIG1heSBoYXZlCitiZWVuIGFycml2aW5nIGluIHRoZSBDUFUgYnVmZmVyOyB0aGlzIGlzIE9LIGJlY2F1c2Ugd2UgYXJlIGNhcmVmdWwgdG8KK29ubHkgdXBkYXRlIHRoZSB0YWlsIGl0ZXJhdG9yIHRvIGhvdyBtdWNoIHdlIGFjdHVhbGx5IHJlYWQgLSBvbiB0aGUgbmV4dAorYnVmZmVyIHN5bmNocm9uaXNhdGlvbiwgd2Ugd2lsbCBzdGFydCBhZ2FpbiBmcm9tIHRoYXQgcG9pbnQuCis8L3A+CisgICAgICAgIDwvZGl2PgorICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0MSIgdGl0bGU9IjYuoElkZW50aWZ5aW5nIGJpbmFyeSBpbWFnZXMiPgorICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlcGFnZSI+CisgICAgICAgICAgICA8ZGl2PgorICAgICAgICAgICAgICA8ZGl2PgorICAgICAgICAgICAgICAgIDxoMiBjbGFzcz0idGl0bGUiIHN0eWxlPSJjbGVhcjogYm90aCI+PGEgaWQ9ImRlbnRyeS1jb29raWVzIj48L2E+Ni6gSWRlbnRpZnlpbmcgYmluYXJ5IGltYWdlczwvaDI+CisgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgPHA+CitJbiBvcmRlciB0byBwcm9kdWNlIHVzZWZ1bCBwcm9maWxlcywgd2UgbmVlZCB0byBiZSBhYmxlIHRvIGFzc29jaWF0ZSBhCitwYXJ0aWN1bGFyIFBDIHZhbHVlIHNhbXBsZSB3aXRoIGFuIGFjdHVhbCBFTEYgYmluYXJ5IG9uIHRoZSBkaXNrLiBUaGlzCitsZWF2ZXMgdXMgd2l0aCB0aGUgcHJvYmxlbSBvZiBob3cgdG8gZXhwb3J0IHRoaXMgaW5mb3JtYXRpb24gdG8KK3VzZXItc3BhY2UuIFdlIGNyZWF0ZSB1bmlxdWUgSURzIHRoYXQgaWRlbnRpZnkgYSBwYXJ0aWN1bGFyIGRpcmVjdG9yeQorZW50cnkgKGRlbnRyeSksIGFuZCB3cml0ZSB0aG9zZSBJRHMgaW50byB0aGUgZXZlbnQgYnVmZmVyLiBMYXRlciBvbiwKK3RoZSB1c2VyLXNwYWNlIGRhZW1vbiBjYW4gY2FsbCB0aGUgPGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5sb29rdXBfZGNvb2tpZTwvY29kZT4KK3N5c3RlbSBjYWxsLCB3aGljaCBsb29rcyB1cCB0aGUgSUQgYW5kIGZpbGxzIGluIHRoZSBmdWxsIHBhdGggb2YKK3RoZSBiaW5hcnkgaW1hZ2UgaW4gdGhlIGJ1ZmZlciB1c2VyLXNwYWNlIHBhc3NlcyBpbi4gVGhlc2UgSURzIGFyZQorbWFpbnRhaW5lZCBieSB0aGUgY29kZSBpbiA8Y29kZSBjbGFzcz0iZmlsZW5hbWUiPmZzL2Rjb29raWVzLmM8L2NvZGU+OyB0aGUKK2NhY2hlIGxhc3RzIGZvciBhcyBsb25nIGFzIHRoZSBkYWVtb24gaGFzIHRoZSBldmVudCBidWZmZXIgb3Blbi4KKzwvcD4KKyAgICAgICAgPC9kaXY+CisgICAgICAgIDxkaXYgY2xhc3M9InNlY3QxIiB0aXRsZT0iNy6gRmluZGluZyBhIHNhbXBsZSdzIGJpbmFyeSBpbWFnZSBhbmQgb2Zmc2V0Ij4KKyAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgorICAgICAgICAgICAgPGRpdj4KKyAgICAgICAgICAgICAgPGRpdj4KKyAgICAgICAgICAgICAgICA8aDIgY2xhc3M9InRpdGxlIiBzdHlsZT0iY2xlYXI6IGJvdGgiPjxhIGlkPSJmaW5kaW5nLWRlbnRyeSI+PC9hPjcuoEZpbmRpbmcgYSBzYW1wbGUncyBiaW5hcnkgaW1hZ2UgYW5kIG9mZnNldDwvaDI+CisgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgPHA+CitXZSBoYXZlbid0IHlldCBkZXNjcmliZWQgaG93IHdlIHByb2Nlc3MgdGhlIGFic29sdXRlIFBDIHZhbHVlIGludG8KK3NvbWV0aGluZyB1c2FibGUgYnkgdGhlIHVzZXItc3BhY2UgZGFlbW9uLiBXaGVuIHdlIGZpbmQgYSBzYW1wbGUgZW50ZXJlZAoraW50byB0aGUgQ1BVIGJ1ZmZlciwgd2UgdHJhdmVyc2UgdGhlIGxpc3Qgb2YgbWFwcGluZ3MgZm9yIHRoZSB0YXNrCisocmVtZW1iZXIsIHdlIHdpbGwgaGF2ZSBzZWVuIGEgdGFzayBzd2l0Y2ggZWFybGllciwgc28gd2Uga25vdyB3aGljaAordGFzaydzIGxpc3RzIHRvIGxvb2sgYXQpLiBXaGVuIGEgbWFwcGluZyBpcyBmb3VuZCB0aGF0IGNvbnRhaW5zIHRoZSBQQwordmFsdWUsIHdlIGxvb2sgdXAgdGhlIG1hcHBlZCBmaWxlJ3MgZGVudHJ5IGluIHRoZSBkY29va2llIGNhY2hlLiBUaGlzCitnaXZlcyB0aGUgZGNvb2tpZSBJRCB0aGF0IHdpbGwgdW5pcXVlbHkgaWRlbnRpZnkgdGhlIG1hcHBlZCBmaWxlLiBUaGVuCit3ZSBhbHRlciB0aGUgYWJzb2x1dGUgdmFsdWUgc3VjaCB0aGF0IGl0IGlzIGFuIG9mZnNldCBmcm9tIHRoZSBzdGFydCBvZgordGhlIGZpbGUgYmVpbmcgbWFwcGVkICh0aGUgbWFwcGluZyBuZWVkIG5vdCBzdGFydCBhdCB0aGUgc3RhcnQgb2YgdGhlCithY3R1YWwgZmlsZSwgc28gd2UgaGF2ZSB0byBjb25zaWRlciB0aGUgb2Zmc2V0IHZhbHVlIG9mIHRoZSBtYXBwaW5nKS4gV2UKK3N0b3JlIHRoaXMgZGNvb2tpZSBJRCBpbnRvIHRoZSBldmVudCBidWZmZXI7IHRoaXMgaWRlbnRpZmllcyB3aGljaAorYmluYXJ5IHRoZSBzYW1wbGVzIGZvbGxvd2luZyBpdCBhcmUgYWdhaW5zdC4KK0luIHRoaXMgbWFubmVyLCB3ZSBoYXZlIGNvbnZlcnRlZCBhIFBDIHZhbHVlLCB3aGljaCBoYXMgdHJhbnNpdG9yeQorbWVhbmluZyBvbmx5LCBpbnRvIGEgc3RhdGljIG9mZnNldCB2YWx1ZSBmb3IgbGF0ZXIgcHJvY2Vzc2luZyBieSB0aGUKK2RhZW1vbi4KKzwvcD4KKyAgICAgICAgICA8cD4KK1dlIGFsc28gYXR0ZW1wdCB0byBhdm9pZCB0aGUgcmVsYXRpdmVseSBleHBlbnNpdmUgbG9va3VwIG9mIHRoZSBkZW50cnkKK2Nvb2tpZSB2YWx1ZSBieSBzdG9yaW5nIHRoZSBjb29raWUgdmFsdWUgZGlyZWN0bHkgaW50byB0aGUgZGVudHJ5CitpdHNlbGY7IHRoZW4gd2UgY2FuIHNpbXBseSBkZXJpdmUgdGhlIGNvb2tpZSB2YWx1ZSBpbW1lZGlhdGVseSB3aGVuIHdlCitmaW5kIHRoZSBjb3JyZWN0IG1hcHBpbmcuCis8L3A+CisgICAgICAgIDwvZGl2PgorICAgICAgPC9kaXY+CisgICAgICA8ZGl2IGNsYXNzPSJjaGFwdGVyIiB0aXRsZT0iQ2hhcHRlcqA0LqBHZW5lcmF0aW5nIHNhbXBsZSBmaWxlcyI+CisgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlcGFnZSI+CisgICAgICAgICAgPGRpdj4KKyAgICAgICAgICAgIDxkaXY+CisgICAgICAgICAgICAgIDxoMiBjbGFzcz0idGl0bGUiPjxhIGlkPSJzYW1wbGUtZmlsZXMiPjwvYT5DaGFwdGVyoDQuoEdlbmVyYXRpbmcgc2FtcGxlIGZpbGVzPC9oMj4KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgIDwvZGl2PgorICAgICAgICA8L2Rpdj4KKyAgICAgICAgPGRpdiBjbGFzcz0idG9jIj4KKyAgICAgICAgICA8cD4KKyAgICAgICAgICAgIDxiPlRhYmxlIG9mIENvbnRlbnRzPC9iPgorICAgICAgICAgIDwvcD4KKyAgICAgICAgICA8ZGw+CisgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MSI+CisgICAgICAgICAgICAgICAgPGEgaHJlZj0iI3Byb2Nlc3NpbmctYnVmZmVyIj4xLiBQcm9jZXNzaW5nIHRoZSBidWZmZXI8L2E+CisgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICA8ZGQ+CisgICAgICAgICAgICAgIDxkbD4KKyAgICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDIiPgorICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjaGFuZGxpbmcta2VybmVsLXNhbXBsZXMiPjEuMS4gSGFuZGxpbmcga2VybmVsIHNhbXBsZXM8L2E+CisgICAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgICAgPC9kbD4KKyAgICAgICAgICAgIDwvZGQ+CisgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MSI+CisgICAgICAgICAgICAgICAgPGEgaHJlZj0iI3NhbXBsZS1maWxlLWdlbmVyYXRpb24iPjIuIExvY2F0aW5nIGFuZCBjcmVhdGluZyBzYW1wbGUgZmlsZXM8L2E+CisgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MSI+CisgICAgICAgICAgICAgICAgPGEgaHJlZj0iI3NhbXBsZS1maWxlLXdyaXRpbmciPjMuIFdyaXRpbmcgZGF0YSB0byBhIHNhbXBsZSBmaWxlPC9hPgorICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICA8L2R0PgorICAgICAgICAgIDwvZGw+CisgICAgICAgIDwvZGl2PgorICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0MSIgdGl0bGU9IjEuoFByb2Nlc3NpbmcgdGhlIGJ1ZmZlciI+CisgICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KKyAgICAgICAgICAgIDxkaXY+CisgICAgICAgICAgICAgIDxkaXY+CisgICAgICAgICAgICAgICAgPGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj48YSBpZD0icHJvY2Vzc2luZy1idWZmZXIiPjwvYT4xLqBQcm9jZXNzaW5nIHRoZSBidWZmZXI8L2gyPgorICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgIDwvZGl2PgorICAgICAgICAgIDxwPgorTm93IHdlIGNhbiBtb3ZlIG9udG8gdXNlci1zcGFjZSBpbiBvdXIgZGVzY3JpcHRpb24gb2YgaG93IHJhdyBpbnRlcnJ1cHQKK3NhbXBsZXMgYXJlIHByb2Nlc3NlZCBpbnRvIHVzZWZ1bCBpbmZvcm1hdGlvbi4gQXMgd2UgZGVzY3JpYmVkIGluCitwcmV2aW91cyBzZWN0aW9ucywgdGhlIGtlcm5lbCBPUHJvZmlsZSBkcml2ZXIgY3JlYXRlcyBhIGxhcmdlIGJ1ZmZlciBvZgorc2FtcGxlIGRhdGEgY29uc2lzdGluZyBvZiBvZmZzZXQgdmFsdWVzLCBpbnRlcnNwZXJzZWQgd2l0aAorbm90aWZpY2F0aW9uIG9mIGNoYW5nZXMgaW4gY29udGV4dC4gVGhlc2UgY29udGV4dCBjaGFuZ2VzIGluZGljYXRlIGhvdworZm9sbG93aW5nIHNhbXBsZXMgc2hvdWxkIGJlIGF0dHJpYnV0ZWQsIGFuZCBpbmNsdWRlIHRhc2sgc3dpdGNoZXMsIENQVQorY2hhbmdlcywgYW5kIHdoaWNoIGRjb29raWUgdGhlIHNhbXBsZSB2YWx1ZSBpcyBhZ2FpbnN0LiBCeSBwcm9jZXNzaW5nCit0aGlzIGJ1ZmZlciBlbnRyeS1ieS1lbnRyeSwgd2UgY2FuIGRldGVybWluZSB3aGVyZSB0aGUgc2FtcGxlcyBzaG91bGQKK2JlIGFjY3JlZGl0ZWQgdG8uIFRoaXMgaXMgcGFydGljdWxhcmx5IGltcG9ydGFudCB3aGVuIHVzaW5nIHRoZSAKKzxjb2RlIGNsYXNzPSJvcHRpb24iPi0tc2VwYXJhdGU8L2NvZGU+LgorPC9wPgorICAgICAgICAgIDxwPgorVGhlIGZpbGUgPGNvZGUgY2xhc3M9ImZpbGVuYW1lIj5kYWVtb24vb3BkX3RyYW5zLmM8L2NvZGU+IGNvbnRhaW5zIHRoZSBiYXNpYyByb3V0aW5lCitmb3IgdGhlIGJ1ZmZlciBwcm9jZXNzaW5nLiBUaGUgPGNvZGUgY2xhc3M9InZhcm5hbWUiPnN0cnVjdCB0cmFuc2llbnQ8L2NvZGU+CitzdHJ1Y3R1cmUgaXMgdXNlZCB0byBob2xkIGNoYW5nZXMgaW4gY29udGV4dC4gSXRzIG1lbWJlcnMgYXJlIG1vZGlmaWVkCithcyB3ZSBwcm9jZXNzIGVhY2ggZW50cnk7IGl0IGlzIHBhc3NlZCBpbnRvIHRoZSByb3V0aW5lcyBpbgorPGNvZGUgY2xhc3M9ImZpbGVuYW1lIj5kYWVtb24vb3BkX3NmaWxlLmM8L2NvZGU+IGZvciBhY3R1YWxseSBsb2dnaW5nIHRoZSBzYW1wbGUKK3RvIGEgcGFydGljdWxhciBzYW1wbGUgZmlsZSAod2hpY2ggd2lsbCBiZSBoZWxkIGluCis8Y29kZSBjbGFzcz0iZmlsZW5hbWUiPiRTRVNTSU9OX0RJUi9zYW1wbGVzL2N1cnJlbnQ8L2NvZGU+KS4KKzwvcD4KKyAgICAgICAgICA8cD4KK1RoZSBidWZmZXIgZm9ybWF0IGlzIGRlc2lnbmVkIGZvciBjb25jaXNlbmVzcywgYXMgaGlnaCBzYW1wbGluZyByYXRlcworY2FuIGVhc2lseSBnZW5lcmF0ZSBhIGxvdCBvZiBkYXRhLiBUaHVzLCBjb250ZXh0IGNoYW5nZXMgYXJlIHByZWZpeGVkCitieSBhbiBlc2NhcGUgY29kZSwgaWRlbnRpZmllZCBieSA8Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmlzX2VzY2FwZV9jb2RlKCk8L2NvZGU+LgorSWYgYW4gZXNjYXBlIGNvZGUgaXMgZm91bmQsIHRoZSBuZXh0IGVudHJ5IGluIHRoZSBidWZmZXIgaWRlbnRpZmllcword2hhdCB0eXBlIG9mIGNvbnRleHQgY2hhbmdlIGlzIGJlaW5nIHJlYWQuIFRoZXNlIGFyZSBoYW5kZWQgb2ZmIHRvCit2YXJpb3VzIGhhbmRsZXJzIChzZWUgdGhlIDxjb2RlIGNsYXNzPSJ2YXJuYW1lIj5oYW5kbGVyczwvY29kZT4gYXJyYXkpLCB3aGljaAorbW9kaWZ5IHRoZSB0cmFuc2llbnQgc3RydWN0dXJlIGFzIGFwcHJvcHJpYXRlLiBJZiBpdCdzIG5vdCBhbiBlc2NhcGUKK2NvZGUsIHRoZW4gaXQgbXVzdCBiZSBhIFBDIG9mZnNldCB2YWx1ZSwgYW5kIHRoZSB2ZXJ5IG5leHQgZW50cnkgd2lsbAorYmUgdGhlIG51bWVyaWMgaGFyZHdhcmUgY291bnRlci4gVGhlc2UgdmFsdWVzIGFyZSByZWFkIGFuZCByZWNvcmRlZAoraW4gdGhlIHRyYW5zaWVudCBzdHJ1Y3R1cmU7IHdlIHRoZW4gZG8gYSBsb29rdXAgdG8gZmluZCB0aGUgY29ycmVjdAorc2FtcGxlIGZpbGUsIGFuZCBsb2cgdGhlIHNhbXBsZSwgYXMgZGVzY3JpYmVkIGluIHRoZSBuZXh0IHNlY3Rpb24uCis8L3A+CisgICAgICAgICAgPGRpdiBjbGFzcz0ic2VjdDIiIHRpdGxlPSIxLjEuoEhhbmRsaW5nIGtlcm5lbCBzYW1wbGVzIj4KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlcGFnZSI+CisgICAgICAgICAgICAgIDxkaXY+CisgICAgICAgICAgICAgICAgPGRpdj4KKyAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz0idGl0bGUiPjxhIGlkPSJoYW5kbGluZy1rZXJuZWwtc2FtcGxlcyI+PC9hPjEuMS6gSGFuZGxpbmcga2VybmVsIHNhbXBsZXM8L2gzPgorICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgPHA+CitTYW1wbGVzIGZyb20ga2VybmVsIGNvZGUgcmVxdWlyZSBhIGxpdHRsZSBzcGVjaWFsIGhhbmRsaW5nLiBCZWNhdXNlCit0aGUgYmluYXJ5IHRleHQgd2hpY2ggdGhlIHNhbXBsZSBpcyBhZ2FpbnN0IGRvZXMgbm90IGNvcnJlc3BvbmQgdG8KK2FueSBmaWxlIHRoYXQgdGhlIGtlcm5lbCBkaXJlY3RseSBrbm93cyBhYm91dCwgdGhlIE9Qcm9maWxlIGRyaXZlcgorc3RvcmVzIHRoZSBhYnNvbHV0ZSBQQyB2YWx1ZSBpbiB0aGUgYnVmZmVyLCBpbnN0ZWFkIG9mIHRoZSBmaWxlIG9mZnNldC4KK09mIGNvdXJzZSwgd2UgbmVlZCBhbiBvZmZzZXQgYWdhaW5zdCBzb21lIHBhcnRpY3VsYXIgYmluYXJ5LiBUbyBoYW5kbGUKK3RoaXMsIHdlIGtlZXAgYSBsaXN0IG9mIGxvYWRlZCBtb2R1bGVzIGJ5IHBhcnNpbmcKKzxjb2RlIGNsYXNzPSJmaWxlbmFtZSI+L3Byb2MvbW9kdWxlczwvY29kZT4gYXMgbmVlZGVkLiBXaGVuIGEgbW9kdWxlIGlzIGxvYWRlZCwKK2Egbm90aWZpY2F0aW9uIGlzIHBsYWNlZCBpbiB0aGUgT1Byb2ZpbGUgYnVmZmVyLCBhbmQgdGhpcyB0cmlnZ2VycyBhCityZS1yZWFkLiBXZSBzdG9yZSB0aGUgbW9kdWxlIG5hbWUsIGFuZCB0aGUgbG9hZGluZyBhZGRyZXNzIGFuZCBzaXplLgorVGhpcyBpcyBhbHNvIGRvbmUgZm9yIHRoZSBtYWluIGtlcm5lbCBpbWFnZSwgYXMgc3BlY2lmaWVkIGJ5IHRoZSB1c2VyLgorVGhlIGFic29sdXRlIFBDIHZhbHVlIGlzIG1hdGNoZWQgYWdhaW5zdCBlYWNoIGFkZHJlc3MgcmFuZ2UsIGFuZAorbW9kaWZpZWQgaW50byBhbiBvZmZzZXQgd2hlbiB0aGUgbWF0Y2hpbmcgbW9kdWxlIGlzIGZvdW5kLiBTZWUgCis8Y29kZSBjbGFzcz0iZmlsZW5hbWUiPmRhZW1vbi9vcGRfa2VybmVsLmM8L2NvZGU+IGZvciB0aGUgZGV0YWlscy4KKzwvcD4KKyAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgPC9kaXY+CisgICAgICAgIDxkaXYgY2xhc3M9InNlY3QxIiB0aXRsZT0iMi6gTG9jYXRpbmcgYW5kIGNyZWF0aW5nIHNhbXBsZSBmaWxlcyI+CisgICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KKyAgICAgICAgICAgIDxkaXY+CisgICAgICAgICAgICAgIDxkaXY+CisgICAgICAgICAgICAgICAgPGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj48YSBpZD0ic2FtcGxlLWZpbGUtZ2VuZXJhdGlvbiI+PC9hPjIuoExvY2F0aW5nIGFuZCBjcmVhdGluZyBzYW1wbGUgZmlsZXM8L2gyPgorICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgIDwvZGl2PgorICAgICAgICAgIDxwPgorV2UgaGF2ZSBhIHNhbXBsZSB2YWx1ZSBhbmQgaXRzIHNhdGVsbGl0ZSBkYXRhIHN0b3JlZCBpbiBhCis8Y29kZSBjbGFzcz0idmFybmFtZSI+c3RydWN0IHRyYW5zaWVudDwvY29kZT4sIGFuZCB3ZSBtdXN0IGxvY2F0ZSBhbgorYWN0dWFsIHNhbXBsZSBmaWxlIHRvIHN0b3JlIHRoZSBzYW1wbGUgaW4sIHVzaW5nIHRoZSBjb250ZXh0CitpbmZvcm1hdGlvbiBpbiB0aGUgdHJhbnNpZW50IHN0cnVjdHVyZSBhcyBhIGtleS4gVGhlIHRyYW5zaWVudCBkYXRhIHRvCitzYW1wbGUgZmlsZSBsb29rdXAgaXMgaGFuZGxlZCBpbgorPGNvZGUgY2xhc3M9ImZpbGVuYW1lIj5kYWVtb24vb3BkX3NmaWxlLmM8L2NvZGU+LiBBIGhhc2ggaXMgdGFrZW4gb2YgdGhlCit0cmFuc2llbnQgdmFsdWVzIHRoYXQgYXJlIHJlbGV2YW50IChkZXBlbmRpbmcgdXBvbiB0aGUgc2V0dGluZyBvZgorPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1zZXBhcmF0ZTwvY29kZT4sIHNvbWUgdmFsdWVzIG1pZ2h0IGJlIGlycmVsZXZhbnQpLCBhbmQgdGhlCitoYXNoIHZhbHVlIGlzIHVzZWQgdG8gbG9va3VwIHRoZSBsaXN0IG9mIGN1cnJlbnRseSBvcGVuIHNhbXBsZSBmaWxlcy4KK09mIGNvdXJzZSwgdGhlIHNhbXBsZSBmaWxlIG1pZ2h0IG5vdCBiZSBmb3VuZCwgaW4gd2hpY2ggY2FzZSB3ZSBuZWVkCit0byBjcmVhdGUgYW5kIG9wZW4gaXQuCis8L3A+CisgICAgICAgICAgPHA+CitPUHJvZmlsZSB1c2VzIGEgcmF0aGVyIGNvbXBsZXggc2NoZW1lIGZvciBuYW1pbmcgc2FtcGxlIGZpbGVzLCBpbiBvcmRlcgordG8gbWFrZSBzZWxlY3RpbmcgcmVsZXZhbnQgc2FtcGxlIGZpbGVzIGVhc2llciBmb3IgdGhlIHBvc3QtcHJvZmlsaW5nCit1dGlsaXRpZXMuIFRoZSBleGFjdCBkZXRhaWxzIG9mIHRoZSBzY2hlbWUgYXJlIGdpdmVuIGluCis8Y29kZSBjbGFzcz0iZmlsZW5hbWUiPm9wcm9maWxlLXRlc3RzL3BwX2ludGVyZmFjZTwvY29kZT4sIGJ1dCBmb3Igbm93IGl0IHdpbGwKK3N1ZmZpY2UgdG8gcmVtZW1iZXIgdGhhdCB0aGUgZmlsZW5hbWUgd2lsbCBpbmNsdWRlIG9ubHkgcmVsZXZhbnQKK2luZm9ybWF0aW9uIGZvciB0aGUgY3VycmVudCBzZXR0aW5ncywgdGFrZW4gZnJvbSB0aGUgdHJhbnNpZW50IGRhdGEuIEEKK2Z1bGx5LXNwZWNpZmllZCBmaWxlbmFtZSBsb29rcyBzb21ldGhpbmcgbGlrZSA6Cis8L3A+CisgICAgICAgICAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij4KKy92YXIvbGliL29wcm9maWxlL3NhbXBsZXMvY3VycmVudC97cm9vdH0vdXNyL2Jpbi94bW1zL3tkZXB9L3tyb290fS9saWIvdGxzL2xpYmMtMi4zLjIuc28vQ1BVX0NMS19VTkhBTFRFRC4xMDAwMDAuMC4yODA4Mi4yODA4OS4wCis8L2NvZGU+CisgICAgICAgICAgPHA+CitJdCBzaG91bGQgYmUgY2xlYXIgdGhhdCB0aGlzIGlkZW50aWZpZXMgc3VjaCBpbmZvcm1hdGlvbiBhcyB0aGUKK2FwcGxpY2F0aW9uIGJpbmFyeSwgdGhlIGRlcGVuZGVudCAobGlicmFyeSkgYmluYXJ5LCB0aGUgaGFyZHdhcmUgZXZlbnQsCithbmQgdGhlIHByb2Nlc3MgYW5kIHRocmVhZCBJRC4gVHlwaWNhbGx5LCBub3QgYWxsIHRoaXMgaW5mb3JtYXRpb24gaXMKK25lZWRlZCwgaW4gd2hpY2ggY2FzZXMgc29tZSB2YWx1ZXMgbWF5IGJlIHJlcGxhY2VkIHdpdGggdGhlIHRva2VuCis8Y29kZSBjbGFzcz0iZmlsZW5hbWUiPmFsbDwvY29kZT4uCis8L3A+CisgICAgICAgICAgPHA+CitUaGUgY29kZSB0aGF0IGdlbmVyYXRlcyB0aGlzIGZpbGVuYW1lIGFuZCBvcGVucyB0aGUgZmlsZSBpcyBmb3VuZCBpbgorPGNvZGUgY2xhc3M9ImZpbGVuYW1lIj5kYWVtb24vb3BkX21hbmdsaW5nLmM8L2NvZGU+LiBZb3UgbWF5IGhhdmUgcmVhbGlzZWQgdGhhdAorYXQgdGhpcyBwb2ludCwgd2UgZG8gbm90IGhhdmUgdGhlIGJpbmFyeSBpbWFnZSBmaWxlIG5hbWVzLCBvbmx5IHRoZQorZGNvb2tpZSB2YWx1ZXMuIEluIG9yZGVyIHRvIGRldGVybWluZSBhIGZpbGUgbmFtZSwgYSBkY29va2llIHZhbHVlIGlzCitsb29rZWQgdXAgaW4gdGhlIGRjb29raWUgY2FjaGUuIFRoaXMgaXMgdG8gYmUgZm91bmQgaW4KKzxjb2RlIGNsYXNzPSJmaWxlbmFtZSI+ZGFlbW9uL29wZF9jb29raWUuYzwvY29kZT4uIFNpbmNlIGRjb29raWVzIGFyZSBib3RoCitwZXJzaXN0ZW50IGFuZCB1bmlxdWUgZHVyaW5nIGEgc2FtcGxpbmcgc2Vzc2lvbiwgd2UgY2FuIGNhY2hlIHRoZQordmFsdWVzLiBJZiB0aGUgdmFsdWUgaXMgbm90IGZvdW5kIGluIHRoZSBjYWNoZSwgdGhlbiB3ZSBhc2sgdGhlIGtlcm5lbAordG8gZG8gdGhlIGxvb2t1cCBmcm9tIHZhbHVlIHRvIGZpbGUgbmFtZSBmb3IgdXMgYnkgY2FsbGluZworPGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5sb29rdXBfZGNvb2tpZSgpPC9jb2RlPi4gVGhpcyBsb29rcyB1cCB0aGUgdmFsdWUgaW4gYQora2VybmVsLXNpZGUgY2FjaGUgKHNlZSA8Y29kZSBjbGFzcz0iZmlsZW5hbWUiPmZzL2Rjb29raWVzLmM8L2NvZGU+KSBhbmQgcmV0dXJucwordGhlIGZ1bGx5LXF1YWxpZmllZCBmaWxlIG5hbWUgdG8gdXNlcnNwYWNlLgorPC9wPgorICAgICAgICA8L2Rpdj4KKyAgICAgICAgPGRpdiBjbGFzcz0ic2VjdDEiIHRpdGxlPSIzLqBXcml0aW5nIGRhdGEgdG8gYSBzYW1wbGUgZmlsZSI+CisgICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KKyAgICAgICAgICAgIDxkaXY+CisgICAgICAgICAgICAgIDxkaXY+CisgICAgICAgICAgICAgICAgPGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj48YSBpZD0ic2FtcGxlLWZpbGUtd3JpdGluZyI+PC9hPjMuoFdyaXRpbmcgZGF0YSB0byBhIHNhbXBsZSBmaWxlPC9oMj4KKyAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICA8cD4KK0VhY2ggc3BlY2lmaWMgc2FtcGxlIGZpbGUgaXMgYSBoYXNoZWQgY29sbGVjdGlvbiwgd2hlcmUgdGhlIGtleSBpcwordGhlIFBDIG9mZnNldCBmcm9tIHRoZSB0cmFuc2llbnQgZGF0YSwgYW5kIHRoZSB2YWx1ZSBpcyB0aGUgbnVtYmVyIG9mCitzYW1wbGVzIHJlY29yZGVkIGFnYWluc3QgdGhhdCBvZmZzZXQuIFRoZSBmaWxlcyBhcmUKKzxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+bW1hcCgpPC9jb2RlPmVkIGludG8gdGhlIGRhZW1vbidzIG1lbW9yeSBzcGFjZS4gVGhlIGNvZGUKK3RvIGFjdHVhbGx5IGxvZyB0aGUgd3JpdGUgYWdhaW5zdCB0aGUgc2FtcGxlIGZpbGUgY2FuIGJlIGZvdW5kIGluCis8Y29kZSBjbGFzcz0iZmlsZW5hbWUiPmxpYmRiLzwvY29kZT4uCis8L3A+CisgICAgICAgICAgPHA+CitGb3IgcmVjb3JkaW5nIHN0YWNrIHRyYWNlcywgd2UgaGF2ZSBhIG1vcmUgY29tcGxpY2F0ZWQgc2FtcGxlIGZpbGVuYW1lCittYW5nbGluZyBzY2hlbWUgdGhhdCBhbGxvd3MgdXMgdG8gaWRlbnRpZnkgY3Jvc3MtYmluYXJ5IGNhbGxzLiBXZSB1c2UKK3RoZSBzYW1lIHNhbXBsZSBmaWxlIGZvcm1hdCwgd2hlcmUgdGhlIGtleSBpcyBhIDY0LWJpdCB2YWx1ZSBjb21wb3NlZAorZnJvbSB0aGUgZnJvbSx0byBwYWlyIG9mIG9mZnNldHMuCis8L3A+CisgICAgICAgIDwvZGl2PgorICAgICAgPC9kaXY+CisgICAgICA8ZGl2IGNsYXNzPSJjaGFwdGVyIiB0aXRsZT0iQ2hhcHRlcqA1LqBHZW5lcmF0aW5nIHVzZWZ1bCBvdXRwdXQiPgorICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgorICAgICAgICAgIDxkaXY+CisgICAgICAgICAgICA8ZGl2PgorICAgICAgICAgICAgICA8aDIgY2xhc3M9InRpdGxlIj48YSBpZD0ib3V0cHV0Ij48L2E+Q2hhcHRlcqA1LqBHZW5lcmF0aW5nIHVzZWZ1bCBvdXRwdXQ8L2gyPgorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgPC9kaXY+CisgICAgICAgIDwvZGl2PgorICAgICAgICA8ZGl2IGNsYXNzPSJ0b2MiPgorICAgICAgICAgIDxwPgorICAgICAgICAgICAgPGI+VGFibGUgb2YgQ29udGVudHM8L2I+CisgICAgICAgICAgPC9wPgorICAgICAgICAgIDxkbD4KKyAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QxIj4KKyAgICAgICAgICAgICAgICA8YSBocmVmPSIjcHJvZmlsZS1zcGVjaWZpY2F0aW9uIj4xLiBIYW5kbGluZyB0aGUgcHJvZmlsZSBzcGVjaWZpY2F0aW9uPC9hPgorICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDEiPgorICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNzYW1wbGUtZmlsZS1jb2xsYXRpbmciPjIuIENvbGxhdGluZyB0aGUgY2FuZGlkYXRlIHNhbXBsZSBmaWxlczwvYT4KKyAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgIDxkZD4KKyAgICAgICAgICAgICAgPGRsPgorICAgICAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MiI+CisgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNzYW1wbGUtZmlsZS1jbGFzc2lmeWluZyI+Mi4xLiBDbGFzc2lmeWluZyBzYW1wbGUgZmlsZXM8L2E+CisgICAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDIiPgorICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjc2FtcGxlLWZpbGUtaW52ZXJ0aW5nIj4yLjIuIENyZWF0aW5nIGludmVydGVkIHByb2ZpbGUgbGlzdHM8L2E+CisgICAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgICAgPC9kbD4KKyAgICAgICAgICAgIDwvZGQ+CisgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MSI+CisgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dlbmVyYXRpbmctcHJvZmlsZS1kYXRhIj4zLiBHZW5lcmF0aW5nIHByb2ZpbGUgZGF0YTwvYT4KKyAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgIDxkZD4KKyAgICAgICAgICAgICAgPGRsPgorICAgICAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MiI+CisgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNiZmQiPjMuMS4gUHJvY2Vzc2luZyB0aGUgYmluYXJ5IGltYWdlPC9hPgorICAgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QyIj4KKyAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI3Byb2Nlc3Npbmctc2FtcGxlLWZpbGVzIj4zLjIuIFByb2Nlc3NpbmcgdGhlIHNhbXBsZSBmaWxlczwvYT4KKyAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgICA8L2RsPgorICAgICAgICAgICAgPC9kZD4KKyAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QxIj4KKyAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ2VuZXJhdGluZy1vdXRwdXQiPjQuIEdlbmVyYXRpbmcgb3V0cHV0PC9hPgorICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICA8L2R0PgorICAgICAgICAgIDwvZGw+CisgICAgICAgIDwvZGl2PgorICAgICAgICA8cD4KK0FsbCBvZiB0aGUgdG9vbHMgdXNlZCB0byBnZW5lcmF0ZSBodW1hbi1yZWFkYWJsZSBvdXRwdXQgaGF2ZSB0byB0YWtlCityb3VnaGx5IHRoZSBzYW1lIHN0ZXBzIHRvIGNvbGxlY3QgdGhlIGRhdGEgZm9yIHByb2Nlc3NpbmcuIEZpcnN0LCB0aGUKK3Byb2ZpbGUgc3BlY2lmaWNhdGlvbiBnaXZlbiBieSB0aGUgdXNlciBoYXMgdG8gYmUgcGFyc2VkLiBOZXh0LCBhIGxpc3QKK29mIHNhbXBsZSBmaWxlcyBtYXRjaGluZyB0aGUgc3BlY2lmaWNhdGlvbiBoYXMgdG8gb2J0YWluZWQuIFVzaW5nIHRoaXMKK2xpc3QsIHdlIG5lZWQgdG8gbG9jYXRlIHRoZSBiaW5hcnkgZmlsZSBmb3IgZWFjaCBzYW1wbGUgZmlsZSwgYW5kIHRoZW4KK3VzZSB0aGVtIHRvIGV4dHJhY3QgbWVhbmluZ2Z1bCBkYXRhLCBiZWZvcmUgYSBmaW5hbCBjb2xsYXRpb24gYW5kCitwcmVzZW50YXRpb24gdG8gdGhlIHVzZXIuCis8L3A+CisgICAgICAgIDxkaXYgY2xhc3M9InNlY3QxIiB0aXRsZT0iMS6gSGFuZGxpbmcgdGhlIHByb2ZpbGUgc3BlY2lmaWNhdGlvbiI+CisgICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KKyAgICAgICAgICAgIDxkaXY+CisgICAgICAgICAgICAgIDxkaXY+CisgICAgICAgICAgICAgICAgPGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj48YSBpZD0icHJvZmlsZS1zcGVjaWZpY2F0aW9uIj48L2E+MS6gSGFuZGxpbmcgdGhlIHByb2ZpbGUgc3BlY2lmaWNhdGlvbjwvaDI+CisgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgPHA+CitUaGUgcHJvZmlsZSBzcGVjaWZpY2F0aW9uIHByZXNlbnRlZCBieSB0aGUgdXNlciBpcyBwYXJzZWQgaW4KK3RoZSBmdW5jdGlvbiA8Y29kZSBjbGFzcz0iZnVuY3Rpb24iPnByb2ZpbGVfc3BlYzo6Y3JlYXRlKCk8L2NvZGU+LiBUaGlzCitjcmVhdGVzIGFuIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHNwZWNpZmljYXRpb24uIFRoZW4gd2UKK3VzZSA8Y29kZSBjbGFzcz0iZnVuY3Rpb24iPnByb2ZpbGVfc3BlYzo6Z2VuZXJhdGVfZmlsZV9saXN0KCk8L2NvZGU+Cit0byBzZWFyY2ggZm9yIGFsbCBzYW1wbGUgZmlsZXMgYW5kIG1hdGNoIHRoZW0gYWdhaW5zdCB0aGUKKzxjb2RlIGNsYXNzPSJ2YXJuYW1lIj5wcm9maWxlX3NwZWM8L2NvZGU+LgorPC9wPgorICAgICAgICAgIDxwPgorVG8gZW5hYmxlIHRoaXMgbWF0Y2hpbmcgcHJvY2VzcyB0byB3b3JrLCB0aGUgYXR0cmlidXRlcyBvZgorZWFjaCBzYW1wbGUgZmlsZSBpcyBlbmNvZGVkIGluIGl0cyBmaWxlbmFtZS4gVGhpcyBpcyBhIGxvdy10ZWNoCithcHByb2FjaCB0byBtYXRjaGluZyBzcGVjaWZpY2F0aW9ucyBhZ2FpbnN0IGNhbmRpZGF0ZSBzYW1wbGUKK2ZpbGVzLCBidXQgaXQgd29ya3MgcmVhc29uYWJseSB3ZWxsLiBBIHR5cGljYWwgc2FtcGxlIGZpbGUKK21pZ2h0IGxvb2sgbGlrZSB0aGVzZToKKzwvcD4KKyAgICAgICAgICA8dGFibGUgeG1sbnM9IiIgYm9yZGVyPSIwIiBzdHlsZT0iYmFja2dyb3VuZDogI0UwRTBFMDsiIHdpZHRoPSI5MCUiPgorICAgICAgICAgICAgPHRyPgorICAgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgICAgPHByZSBjbGFzcz0ic2NyZWVuIj4KKy92YXIvbGliL29wcm9maWxlL3NhbXBsZXMvY3VycmVudC97cm9vdH0vYmluL2xzL3tkZXB9L3tyb290fS9iaW4vbHMve2NnfS97cm9vdH0vYmluL2xzL0NQVV9DTEtfVU5IQUxURUQuMTAwMDAwLjAuYWxsLmFsbC5hbGwKKy92YXIvbGliL29wcm9maWxlL3NhbXBsZXMvY3VycmVudC97cm9vdH0vYmluL2xzL3tkZXB9L3tyb290fS9iaW4vbHMvQ1BVX0NMS19VTkhBTFRFRC4xMDAwMDAuMC5hbGwuYWxsLmFsbAorL3Zhci9saWIvb3Byb2ZpbGUvc2FtcGxlcy9jdXJyZW50L3tyb290fS9iaW4vbHMve2RlcH0ve3Jvb3R9L2Jpbi9scy9DUFVfQ0xLX1VOSEFMVEVELjEwMDAwMC4wLjc0MjMuNzQyNC4wCisvdmFyL2xpYi9vcHJvZmlsZS9zYW1wbGVzL2N1cnJlbnQve2tlcm59L3IxMjgve2RlcH0ve2tlcm59L3IxMjgvQ1BVX0NMS19VTkhBTFRFRC4xMDAwMDAuMC5hbGwuYWxsLmFsbAorPC9wcmU+CisgICAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICA8L3RyPgorICAgICAgICAgIDwvdGFibGU+CisgICAgICAgICAgPHA+CitUaGlzIGxvb2tzIHVubmVjZXNzYXJpbHkgY29tcGxleCwgYnV0IGl0J3MgYWN0dWFsbHkgZmFpcmx5IHNpbXBsZS4gRmlyc3QKK3dlIGhhdmUgdGhlIHNlc3Npb24gb2YgdGhlIHNhbXBsZSwgYnkgZGVmYXVsdCBsb2NhdGVkIGhlcmUKKzxjb2RlIGNsYXNzPSJmaWxlbmFtZSI+L3Zhci9saWIvb3Byb2ZpbGUvc2FtcGxlcy9jdXJyZW50PC9jb2RlPi4gVGhpcyBsb2NhdGlvbgorY2FuIGJlIGNoYW5nZWQgYnkgc3BlY2lmeWluZyB0aGUgLS1zZXNzaW9uLWRpciBvcHRpb24gYXQgY29tbWFuZC1saW5lLgorVGhpcyBzZXNzaW9uIGNvdWxkIGVxdWFsbHkgd2VsbCBiZSBpbnNpZGUgYW4gYXJjaGl2ZSBmcm9tIDxzcGFuIGNsYXNzPSJjb21tYW5kIj48c3Ryb25nPm9wYXJjaGl2ZTwvc3Ryb25nPjwvc3Bhbj4uCitOZXh0IHdlIGhhdmUgb25lIG9mIHRoZSB0b2tlbnMgPGNvZGUgY2xhc3M9ImZpbGVuYW1lIj57cm9vdH08L2NvZGU+IG9yCis8Y29kZSBjbGFzcz0iZmlsZW5hbWUiPntrZXJufTwvY29kZT4uIDxjb2RlIGNsYXNzPSJmaWxlbmFtZSI+e3Jvb3R9PC9jb2RlPiBpbmRpY2F0ZXMKK3RoYXQgdGhlIGJpbmFyeSBpcyBmb3VuZCBvbiBhIGZpbGUgc3lzdGVtLCBhbmQgd2Ugd2lsbCBlbmNvZGUgaXRzIHBhdGgKK2luIHRoZSBuZXh0IHNlY3Rpb24gKGUuZy4gPGNvZGUgY2xhc3M9ImZpbGVuYW1lIj4vYmluL2xzPC9jb2RlPikuCis8Y29kZSBjbGFzcz0iZmlsZW5hbWUiPntrZXJufTwvY29kZT4gaW5kaWNhdGVzIGEga2VybmVsIG1vZHVsZSAtIG9uIDIuNiBrZXJuZWxzCit0aGUgcGF0aCBpbmZvcm1hdGlvbiBpcyBub3QgYXZhaWxhYmxlIGZyb20gdGhlIGtlcm5lbCwgc28gd2UgaGF2ZSB0bworc3BlY2lhbC1jYXNlIGtlcm5lbCBtb2R1bGVzIGxpa2UgdGhpczsgd2UgZW5jb2RlIG1lcmVseSB0aGUgbmFtZSBvZiB0aGUKK21vZHVsZSBhcyBsb2FkZWQuCis8L3A+CisgICAgICAgICAgPHA+CitOZXh0IHRoZXJlIGlzIGEgPGNvZGUgY2xhc3M9ImZpbGVuYW1lIj57ZGVwfTwvY29kZT4gdG9rZW4sIGluZGljYXRpbmcgYW5vdGhlcgordG9rZW4vcGF0aCB3aGljaCBpZGVudGlmaWVzIHRoZSBkZXBlbmRlbnQgYmluYXJ5IGltYWdlLiBUaGlzIGlzIHVzZWQgZXZlbiBmb3IKK3RoZSAicHJpbWFyeSIgYmluYXJ5IChpLmUuIHRoZSBvbmUgdGhhdCB3YXMKKzxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+ZXhlY3ZlKCk8L2NvZGU+ZCksIGFzIGl0IHNpbXBsaWZpZXMgcHJvY2Vzc2luZy4gRmluYWxseSwKK2lmIHRoaXMgc2FtcGxlIGZpbGUgaXMgYSBub3JtYWwgZmxhdCBwcm9maWxlLCB0aGUgYWN0dWFsIGZpbGUgaXMgbmV4dCBpbgordGhlIHBhdGguIElmIGl0J3MgYSBjYWxsLWdyYXBoIHNhbXBsZSBmaWxlLCB3ZSBuZWVkIG9uZSBmdXJ0aGVyCitzcGVjaWZpY2F0aW9uLCB0byBhbGxvdyB1cyB0byBpZGVudGlmeSBjcm9zcy1iaW5hcnkgYXJjcyBpbiB0aGUgY2FsbAorZ3JhcGguCis8L3A+CisgICAgICAgICAgPHA+CitUaGUgYWN0dWFsIHNhbXBsZSBmaWxlIG5hbWUgaXMgZG90LXNlcGFyYXRlZCwgd2hlcmUgdGhlIGZpZWxkcyBhcmUsIGluCitvcmRlcjogZXZlbnQgbmFtZSwgZXZlbnQgY291bnQsIHVuaXQgbWFzaywgdGFzayBncm91cCBJRCwgdGFzayBJRCwgYW5kCitDUFUgbnVtYmVyLgorPC9wPgorICAgICAgICAgIDxwPgorVGhpcyBzYW1wbGUgZmlsZSBjYW4gYmUgcmVsaWFibHkgcGFyc2VkICh3aXRoCis8Y29kZSBjbGFzcz0iZnVuY3Rpb24iPnBhcnNlX2ZpbGVuYW1lKCk8L2NvZGU+KSBpbnRvIGEKKzxjb2RlIGNsYXNzPSJ2YXJuYW1lIj5maWxlbmFtZV9zcGVjPC9jb2RlPi4gRmluYWxseSwgd2UgY2FuIGNoZWNrIHdoZXRoZXIgdG8KK2luY2x1ZGUgdGhlIHNhbXBsZSBmaWxlIGluIHRoZSBmaW5hbCByZXN1bHRzIGJ5IGNvbXBhcmluZyB0aGlzCis8Y29kZSBjbGFzcz0idmFybmFtZSI+ZmlsZW5hbWVfc3BlYzwvY29kZT4gYWdhaW5zdCB0aGUKKzxjb2RlIGNsYXNzPSJ2YXJuYW1lIj5wcm9maWxlX3NwZWM8L2NvZGU+IHRoZSB1c2VyIHNwZWNpZmllZCAoZm9yIHRoZSBpbnRlcmVzdGVkLAorc2VlIDxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+dmFsaWRfY2FuZGlkYXRlKCk8L2NvZGU+IGFuZAorPGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5wcm9maWxlX3NwZWM6Om1hdGNoPC9jb2RlPikuIFRoZW4gY29tZXMgdGhlIHJlYWxseQorY29tcGxpY2F0ZWQgYml0Li4uCis8L3A+CisgICAgICAgIDwvZGl2PgorICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0MSIgdGl0bGU9IjIuoENvbGxhdGluZyB0aGUgY2FuZGlkYXRlIHNhbXBsZSBmaWxlcyI+CisgICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KKyAgICAgICAgICAgIDxkaXY+CisgICAgICAgICAgICAgIDxkaXY+CisgICAgICAgICAgICAgICAgPGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj48YSBpZD0ic2FtcGxlLWZpbGUtY29sbGF0aW5nIj48L2E+Mi6gQ29sbGF0aW5nIHRoZSBjYW5kaWRhdGUgc2FtcGxlIGZpbGVzPC9oMj4KKyAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICA8cD4KK0F0IHRoaXMgcG9pbnQgd2UgaGF2ZSBhIGR1cGxpY2F0ZS1mcmVlIGxpc3Qgb2Ygc2FtcGxlIGZpbGVzIHdlIG5lZWQKK3RvIHByb2Nlc3MuIEJ1dCBmaXJzdCB3ZSBuZWVkIHRvIGRvIHNvbWUgZnVydGhlciBhcnJhbmdlbWVudDogd2UKK25lZWQgdG8gY2xhc3NpZnkgZWFjaCBzYW1wbGUgZmlsZSwgYW5kIHdlIG1heSBhbHNvIG5lZWQgdG8gImludmVydCIKK3RoZSBwcm9maWxlcy4KKzwvcD4KKyAgICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0MiIgdGl0bGU9IjIuMS6gQ2xhc3NpZnlpbmcgc2FtcGxlIGZpbGVzIj4KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlcGFnZSI+CisgICAgICAgICAgICAgIDxkaXY+CisgICAgICAgICAgICAgICAgPGRpdj4KKyAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz0idGl0bGUiPjxhIGlkPSJzYW1wbGUtZmlsZS1jbGFzc2lmeWluZyI+PC9hPjIuMS6gQ2xhc3NpZnlpbmcgc2FtcGxlIGZpbGVzPC9oMz4KKyAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIDxwPgorSXQncyBwb3NzaWJsZSBmb3IgdXRpbGl0aWVzIGxpa2UgPHNwYW4gY2xhc3M9ImNvbW1hbmQiPjxzdHJvbmc+b3ByZXBvcnQ8L3N0cm9uZz48L3NwYW4+IHRvIHNob3cgCitkYXRhIGluIGNvbHVtbmFyIGZvcm1hdDogZm9yIGV4YW1wbGUsIHdlIG1pZ2h0IHdhbnQgdG8gc2hvdyB0aGUgcmVzdWx0cworb2YgdHdvIHRocmVhZHMgd2l0aGluIGEgcHJvY2VzcyBzaWRlLWJ5LXNpZGUuIFRvIGRvIHRoaXMsIHdlIG5lZWQKK3RvIGNsYXNzaWZ5IGVhY2ggc2FtcGxlIGZpbGUgaW50byBjbGFzc2VzIC0gdGhlIGNsYXNzZXMgY29ycmVzcG9uZAord2l0aCBlYWNoIDxzcGFuIGNsYXNzPSJjb21tYW5kIj48c3Ryb25nPm9wcmVwb3J0PC9zdHJvbmc+PC9zcGFuPiBjb2x1bW4uIFRoZSBmdW5jdGlvbiB0aGF0IGhhbmRsZXMKK3RoaXMgaXMgPGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5hcnJhbmdlX3Byb2ZpbGVzKCk8L2NvZGU+LiBFYWNoIHNhbXBsZSBmaWxlCitpcyBhZGRlZCB0byBhIHBhcnRpY3VsYXIgY2xhc3MuIElmIHRoZSBzYW1wbGUgZmlsZSBpcyB0aGUgZmlyc3QgaW4KK2l0cyBjbGFzcywgYSB0ZW1wbGF0ZSBpcyBnZW5lcmF0ZWQgZnJvbSB0aGUgc2FtcGxlIGZpbGUuIEVhY2ggdGVtcGxhdGUKK2Rlc2NyaWJlcyBhIHBhcnRpY3VsYXIgY2xhc3MgKHRodXMsIGluIG91ciBleGFtcGxlIGFib3ZlLCBlYWNoIHRlbXBsYXRlCit3aWxsIGhhdmUgYSBkaWZmZXJlbnQgdGhyZWFkIElELCBhbmQgdGhpcyB1bmlxdWVseSBpZGVudGlmaWVzIGVhY2gKK2NsYXNzKS4KKzwvcD4KKyAgICAgICAgICAgIDxwPgorRWFjaCBjbGFzcyBoYXMgYSBsaXN0IG9mICJwcm9maWxlIHNldHMiIG1hdGNoaW5nIHRoYXQgY2xhc3MncyB0ZW1wbGF0ZS4KK0EgcHJvZmlsZSBzZXQgaXMgZWl0aGVyIGEgcHJvZmlsZSBvZiB0aGUgcHJpbWFyeSBiaW5hcnkgaW1hZ2UsIG9yIGFueSBvZgoraXRzIGRlcGVuZGVudCBpbWFnZXMuIEFmdGVyIGFsbCBzYW1wbGUgZmlsZXMgaGF2ZSBiZWVuIGxpc3RlZCBpbiBvbmUgb2YKK3RoZSBwcm9maWxlIHNldHMgYmVsb25naW5nIHRvIHRoZSBjbGFzc2VzLCB3ZSBoYXZlIHRvIG5hbWUgZWFjaCBjbGFzcyBhbmQKK3BlcmZvcm0gZXJyb3ItY2hlY2tpbmcuIFRoaXMgaXMgZG9uZSBieQorPGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5pZGVudGlmeV9jbGFzc2VzKCk8L2NvZGU+OyBlYWNoIGNsYXNzIGlzIGNoZWNrZWQgdG8gZW5zdXJlCit0aGF0IGl0cyAiYXhpcyIgaXMgdGhlIHNhbWUgYXMgYWxsIHRoZSBvdGhlcnMuIFRoaXMgaXMgbmVlZGVkIGJlY2F1c2UKKzxzcGFuIGNsYXNzPSJjb21tYW5kIj48c3Ryb25nPm9wcmVwb3J0PC9zdHJvbmc+PC9zcGFuPiBjYW4ndCBwcm9kdWNlIHJlc3VsdHMgaW4gM0QgZm9ybWF0OiB3ZSBjYW4KK29ubHkgZGlmZmVyIGluIG9uZSBhc3BlY3QsIHN1Y2ggYXMgdGhyZWFkIElEIG9yIGV2ZW50IG5hbWUuCis8L3A+CisgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgPGRpdiBjbGFzcz0ic2VjdDIiIHRpdGxlPSIyLjIuoENyZWF0aW5nIGludmVydGVkIHByb2ZpbGUgbGlzdHMiPgorICAgICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KKyAgICAgICAgICAgICAgPGRpdj4KKyAgICAgICAgICAgICAgICA8ZGl2PgorICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPSJ0aXRsZSI+PGEgaWQ9InNhbXBsZS1maWxlLWludmVydGluZyI+PC9hPjIuMi6gQ3JlYXRpbmcgaW52ZXJ0ZWQgcHJvZmlsZSBsaXN0czwvaDM+CisgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICA8cD4KK1JlbWVtYmVyIHRoYXQgaWYgd2UncmUgdXNpbmcgY2VydGFpbiBwcm9maWxlIHNlcGFyYXRpb24gb3B0aW9ucywgc3VjaCBhcworIi0tc2VwYXJhdGU9bGliIiwgYSBzaW5nbGUgYmluYXJ5IGNvdWxkIGJlIGEgZGVwZW5kZW50IGltYWdlIHRvIG1hbnkKK2RpZmZlcmVudCBiaW5hcmllcy4gRm9yIGV4YW1wbGUsIHRoZSBDIGxpYnJhcnkgaW1hZ2Ugd291bGQgYmUgYQorZGVwZW5kZW50IGltYWdlIGZvciBtb3N0IHByb2dyYW1zIHRoYXQgaGF2ZSBiZWVuIHByb2ZpbGVkLiBBcyBpdAoraGFwcGVucywgdGhpcyBjYW4gY2F1c2Ugc2V2ZXJlIHBlcmZvcm1hbmNlIHByb2JsZW1zOiB3aXRob3V0IHNvbWUKK3JlLWFycmFuZ2VtZW50LCB0aGVzZSBkZXBlbmRlbnQgYmluYXJ5IGltYWdlcyB3b3VsZCBiZSBvcGVuZWQgZWFjaAordGltZSB3ZSBuZWVkIHRvIHByb2Nlc3Mgc2FtcGxlIGZpbGVzIGZvciBlYWNoIHByb2dyYW0uCis8L3A+CisgICAgICAgICAgICA8cD4KK1RoZSBzb2x1dGlvbiBpcyB0byAiaW52ZXJ0IiB0aGUgcHJvZmlsZXMgdmlhCis8Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmludmVydF9wcm9maWxlcygpPC9jb2RlPi4gV2UgY3JlYXRlIGEgbmV3IGRhdGEgc3RydWN0dXJlCit3aGVyZSB0aGUgZGVwZW5kZW50IGJpbmFyeSBpcyBmaXJzdCwgYW5kIHRoZSBwcmltYXJ5IGJpbmFyeSBpbWFnZXMgdXNpbmcKK3RoYXQgZGVwZW5kZW50IGJpbmFyeSBhcmUgbGlzdGVkIGFzIHN1Yi1pbWFnZXMuIFRoaXMgaGVscHMgb3VyCitwZXJmb3JtYW5jZSBwcm9ibGVtLCBhcyBub3cgd2Ugb25seSBuZWVkIHRvIG9wZW4gZWFjaCBkZXBlbmRlbnQgaW1hZ2UKK29uY2UsIHdoZW4gd2UgcHJvY2VzcyB0aGUgbGlzdCBvZiBpbnZlcnRlZCBwcm9maWxlcy4KKzwvcD4KKyAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgPC9kaXY+CisgICAgICAgIDxkaXYgY2xhc3M9InNlY3QxIiB0aXRsZT0iMy6gR2VuZXJhdGluZyBwcm9maWxlIGRhdGEiPgorICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlcGFnZSI+CisgICAgICAgICAgICA8ZGl2PgorICAgICAgICAgICAgICA8ZGl2PgorICAgICAgICAgICAgICAgIDxoMiBjbGFzcz0idGl0bGUiIHN0eWxlPSJjbGVhcjogYm90aCI+PGEgaWQ9ImdlbmVyYXRpbmctcHJvZmlsZS1kYXRhIj48L2E+My6gR2VuZXJhdGluZyBwcm9maWxlIGRhdGE8L2gyPgorICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgIDwvZGl2PgorICAgICAgICAgIDxwPgorVGhpbmdzIGRvbid0IGdldCBhbnkgc2ltcGxlciBhdCB0aGlzIHBvaW50LCB1bmZvcnR1bmF0ZWx5LiBBdCB0aGlzIHBvaW50Cit3ZSd2ZSBjb2xsZWN0ZWQgYW5kIGNsYXNzaWZpZWQgdGhlIHNhbXBsZSBmaWxlcyBpbnRvIHRoZSBzZXQgb2YgaW52ZXJ0ZWQKK3Byb2ZpbGVzLCBhcyBkZXNjcmliZWQgaW4gdGhlIHByZXZpb3VzIHNlY3Rpb24uIE5vdyB3ZSBuZWVkIHRvIHByb2Nlc3MKK2VhY2ggaW52ZXJ0ZWQgcHJvZmlsZSBhbmQgbWFrZSBzb21ldGhpbmcgb2YgdGhlIGRhdGEuIFRoZSBlbnRyeSBwb2ludAorZm9yIHRoaXMgaXMgPGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5wb3B1bGF0ZV9mb3JfaW1hZ2UoKTwvY29kZT4uCis8L3A+CisgICAgICAgICAgPGRpdiBjbGFzcz0ic2VjdDIiIHRpdGxlPSIzLjEuoFByb2Nlc3NpbmcgdGhlIGJpbmFyeSBpbWFnZSI+CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgorICAgICAgICAgICAgICA8ZGl2PgorICAgICAgICAgICAgICAgIDxkaXY+CisgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9InRpdGxlIj48YSBpZD0iYmZkIj48L2E+My4xLqBQcm9jZXNzaW5nIHRoZSBiaW5hcnkgaW1hZ2U8L2gzPgorICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgPHA+CitUaGUgZmlyc3QgdGhpbmcgd2UgZG8gd2l0aCBhbiBpbnZlcnRlZCBwcm9maWxlIGlzIGF0dGVtcHQgdG8gb3BlbiB0aGUKK2JpbmFyeSBpbWFnZSAocmVtZW1iZXIgZWFjaCBpbnZlcnRlZCBwcm9maWxlIHNldCBpcyBvbmx5IGZvciBvbmUgYmluYXJ5CitpbWFnZSwgYnV0IG1heSBoYXZlIG1hbnkgc2FtcGxlIGZpbGVzIHRvIHByb2Nlc3MpLiBUaGUKKzxjb2RlIGNsYXNzPSJ2YXJuYW1lIj5vcF9iZmQ8L2NvZGU+IGNsYXNzIHByb3ZpZGVzIGFuIGFic3RyYWN0ZWQgaW50ZXJmYWNlIHRvCit0aGlzOyBpbnRlcm5hbGx5IGl0IHVzZXMgPGNvZGUgY2xhc3M9ImZpbGVuYW1lIj5saWJiZmQ8L2NvZGU+LiBUaGUgbWFpbiBwdXJwb3NlCitvZiB0aGlzIGNsYXNzIGlzIHRvIHByb2Nlc3MgdGhlIHN5bWJvbHMgZm9yIHRoZSBiaW5hcnkgaW1hZ2U7IHRoaXMgaXMKK2Fsc28gd2hlcmUgc3ltYm9sIGZpbHRlcmluZyBoYXBwZW5zLiBUaGlzIGlzIGFjdHVhbGx5IHF1aXRlIHRyaWNreSwgYnV0CitzaG91bGQgYmUgY2xlYXIgZnJvbSB0aGUgc291cmNlLgorPC9wPgorICAgICAgICAgIDwvZGl2PgorICAgICAgICAgIDxkaXYgY2xhc3M9InNlY3QyIiB0aXRsZT0iMy4yLqBQcm9jZXNzaW5nIHRoZSBzYW1wbGUgZmlsZXMiPgorICAgICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KKyAgICAgICAgICAgICAgPGRpdj4KKyAgICAgICAgICAgICAgICA8ZGl2PgorICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPSJ0aXRsZSI+PGEgaWQ9InByb2Nlc3Npbmctc2FtcGxlLWZpbGVzIj48L2E+My4yLqBQcm9jZXNzaW5nIHRoZSBzYW1wbGUgZmlsZXM8L2gzPgorICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgPHA+CitUaGUgY2xhc3MgPGNvZGUgY2xhc3M9InZhcm5hbWUiPnByb2ZpbGVfY29udGFpbmVyPC9jb2RlPiBpcyBhIGhvbGQtYWxsIHRoYXQKK2NvbnRhaW5zIGFsbCB0aGUgcHJvY2Vzc2VkIHJlc3VsdHMuIEl0IGlzIGEgY29udGFpbmVyIG9mCis8Y29kZSBjbGFzcz0idmFybmFtZSI+cHJvZmlsZV90PC9jb2RlPiBvYmplY3RzLiBUaGUKKzxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+YWRkX3NhbXBsZV9maWxlcygpPC9jb2RlPiBtZXRob2QgdXNlcworPGNvZGUgY2xhc3M9ImZpbGVuYW1lIj5saWJkYjwvY29kZT4gdG8gb3BlbiB0aGUgZ2l2ZW4gc2FtcGxlIGZpbGUgYW5kIGFkZCB0aGUKK2tleS92YWx1ZSB0eXBlcyB0byB0aGUgPGNvZGUgY2xhc3M9InZhcm5hbWUiPnByb2ZpbGVfdDwvY29kZT4uIE9uY2UgdGhpcyBoYXMgYmVlbgorZG9uZSwgPGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5wcm9maWxlX2NvbnRhaW5lcjo6YWRkKCk8L2NvZGU+IGlzIHBhc3NlZCB0aGUKKzxjb2RlIGNsYXNzPSJ2YXJuYW1lIj5wcm9maWxlX3Q8L2NvZGU+IHBsdXMgdGhlIDxjb2RlIGNsYXNzPSJ2YXJuYW1lIj5vcF9iZmQ8L2NvZGU+IGZvcgorcHJvY2Vzc2luZy4KKzwvcD4KKyAgICAgICAgICAgIDxwPgorPGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5wcm9maWxlX2NvbnRhaW5lcjo6YWRkKCk8L2NvZGU+IHdhbGtzIHRocm91Z2ggdGhlIHN5bWJvbHMKK2NvbGxlY3RlZCBpbiB0aGUgPGNvZGUgY2xhc3M9InZhcm5hbWUiPm9wX2JmZDwvY29kZT4uCis8Y29kZSBjbGFzcz0iZnVuY3Rpb24iPm9wX2JmZDo6Z2V0X3N5bWJvbF9yYW5nZSgpPC9jb2RlPiBnaXZlcyB1cyB0aGUgc3RhcnQgYW5kCitlbmQgb2YgdGhlIHN5bWJvbCBhcyBhbiBvZmZzZXQgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIGJpbmFyeSBpbWFnZSwKK3RoZW4gd2UgaW50ZXJyb2dhdGUgdGhlIDxjb2RlIGNsYXNzPSJ2YXJuYW1lIj5wcm9maWxlX3Q8L2NvZGU+IGZvciB0aGUgcmVsZXZhbnQgc2FtcGxlcworZm9yIHRoYXQgb2Zmc2V0IHJhbmdlLiBXZSBjcmVhdGUgYSA8Y29kZSBjbGFzcz0idmFybmFtZSI+c3ltYm9sX2VudHJ5PC9jb2RlPgorb2JqZWN0IGZvciB0aGlzIHN5bWJvbCBhbmQgZmlsbCBpdCBpbi4gSWYgbmVlZGVkLCBoZXJlIHdlIGFsc28gY29sbGVjdAorZGVidWcgaW5mb3JtYXRpb24gZnJvbSB0aGUgPGNvZGUgY2xhc3M9InZhcm5hbWUiPm9wX2JmZDwvY29kZT4sIGFuZCBwb3NzaWJseQorcmVjb3JkIHRoZSBkZXRhaWxlZCBzYW1wbGUgaW5mb3JtYXRpb24gKGFzIHVzZWQgYnkgPHNwYW4gY2xhc3M9ImNvbW1hbmQiPjxzdHJvbmc+b3ByZXBvcnQKKy1kPC9zdHJvbmc+PC9zcGFuPiBhbmQgPHNwYW4gY2xhc3M9ImNvbW1hbmQiPjxzdHJvbmc+b3Bhbm5vdGF0ZTwvc3Ryb25nPjwvc3Bhbj4pLgorRmluYWxseSB0aGUgPGNvZGUgY2xhc3M9InZhcm5hbWUiPnN5bWJvbF9lbnRyeTwvY29kZT4gaXMgYWRkZWQgdG8KK2EgcHJpdmF0ZSBjb250YWluZXIgb2YgPGNvZGUgY2xhc3M9InZhcm5hbWUiPnByb2ZpbGVfY29udGFpbmVyPC9jb2RlPiAtIHRoaXMKKzxjb2RlIGNsYXNzPSJ2YXJuYW1lIj5zeW1ib2xfY29udGFpbmVyPC9jb2RlPiBob2xkcyBhbGwgc3VjaCBwcm9jZXNzZWQgc3ltYm9scy4KKzwvcD4KKyAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgPC9kaXY+CisgICAgICAgIDxkaXYgY2xhc3M9InNlY3QxIiB0aXRsZT0iNC6gR2VuZXJhdGluZyBvdXRwdXQiPgorICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlcGFnZSI+CisgICAgICAgICAgICA8ZGl2PgorICAgICAgICAgICAgICA8ZGl2PgorICAgICAgICAgICAgICAgIDxoMiBjbGFzcz0idGl0bGUiIHN0eWxlPSJjbGVhcjogYm90aCI+PGEgaWQ9ImdlbmVyYXRpbmctb3V0cHV0Ij48L2E+NC6gR2VuZXJhdGluZyBvdXRwdXQ8L2gyPgorICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgIDwvZGl2PgorICAgICAgICAgIDxwPgorQWZ0ZXIgdGhlIHByb2Nlc3NpbmcgZGVzY3JpYmVkIGluIHRoZSBwcmV2aW91cyBzZWN0aW9uLCB3ZSd2ZSBub3cgZ290CitmdWxsIGRldGFpbHMgb2Ygd2hhdCB3ZSBuZWVkIHRvIG91dHB1dCBzdG9yZWQgaW4gdGhlCis8Y29kZSBjbGFzcz0idmFybmFtZSI+cHJvZmlsZV9jb250YWluZXI8L2NvZGU+IG9uIGEgc3ltYm9sLWJ5LXN5bWJvbCBiYXNpcy4gVG8KK3Byb2R1Y2Ugb3V0cHV0LCB3ZSBuZWVkIHRvIHJlcGxheSB0aGF0IGRhdGEgYW5kIGZvcm1hdCBpdCBzdWl0YWJseS4KKzwvcD4KKyAgICAgICAgICA8cD4KKzxzcGFuIGNsYXNzPSJjb21tYW5kIj48c3Ryb25nPm9wcmVwb3J0PC9zdHJvbmc+PC9zcGFuPiBmaXJzdCBhc2tzIHRoZQorPGNvZGUgY2xhc3M9InZhcm5hbWUiPnByb2ZpbGVfY29udGFpbmVyPC9jb2RlPiBmb3IgYQorPGNvZGUgY2xhc3M9InZhcm5hbWUiPnN5bWJvbF9jb2xsZWN0aW9uPC9jb2RlPiAodGhpcyBpcyBhbHNvIHdoZXJlIHRocmVzaG9sZGluZworaGFwcGVucykuCitUaGlzIGlzIHNvcnRlZCwgdGhlbiBhCis8Y29kZSBjbGFzcz0idmFybmFtZSI+b3ByZXBvcnRfZm9ybWF0dGVyPC9jb2RlPiBpcyBpbml0aWFsaXNlZC4KK1RoaXMgb2JqZWN0IGluaXRpYWxpc2VzIGEgc2V0IG9mIGZpZWxkIGZvcm1hdHRlcnMgYXMgcmVxdWVzdGVkLiBUaGVuCis8Y29kZSBjbGFzcz0iZnVuY3Rpb24iPm9wcmVwb3J0X2Zvcm1hdHRlcjo6b3V0cHV0KCk8L2NvZGU+IGlzIGNhbGxlZC4gVGhpcworaXRlcmF0ZXMgdGhyb3VnaCB0aGUgKHNvcnRlZCkgPGNvZGUgY2xhc3M9InZhcm5hbWUiPnN5bWJvbF9jb2xsZWN0aW9uPC9jb2RlPjsKK2ZvciBlYWNoIGVudHJ5LCB0aGUgc2VsZWN0ZWQgZmllbGRzIChhcyBzZXQgYnkgdGhlCis8Y29kZSBjbGFzcz0idmFybmFtZSI+Zm9ybWF0X2ZsYWdzPC9jb2RlPiBvcHRpb25zKSBhcmUgb3V0cHV0IGJ5IGNhbGxpbmcgdGhlCitmaWVsZCBmb3JtYXR0ZXJzLCB3aXRoIHRoZSA8Y29kZSBjbGFzcz0idmFybmFtZSI+c3ltYm9sX2VudHJ5PC9jb2RlPiBwYXNzZWQgaW4uCis8L3A+CisgICAgICAgIDwvZGl2PgorICAgICAgPC9kaXY+CisgICAgICA8ZGl2IGNsYXNzPSJjaGFwdGVyIiB0aXRsZT0iQ2hhcHRlcqA2LqBFeHRlbmRlZCBGZWF0dXJlIEludGVyZmFjZSI+CisgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlcGFnZSI+CisgICAgICAgICAgPGRpdj4KKyAgICAgICAgICAgIDxkaXY+CisgICAgICAgICAgICAgIDxoMiBjbGFzcz0idGl0bGUiPjxhIGlkPSJleHQiPjwvYT5DaGFwdGVyoDYuoEV4dGVuZGVkIEZlYXR1cmUgSW50ZXJmYWNlPC9oMj4KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgIDwvZGl2PgorICAgICAgICA8L2Rpdj4KKyAgICAgICAgPGRpdiBjbGFzcz0idG9jIj4KKyAgICAgICAgICA8cD4KKyAgICAgICAgICAgIDxiPlRhYmxlIG9mIENvbnRlbnRzPC9iPgorICAgICAgICAgIDwvcD4KKyAgICAgICAgICA8ZGw+CisgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MSI+CisgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2V4dC1pbnRybyI+MS4gSW50cm9kdWN0aW9uPC9hPgorICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDEiPgorICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNleHQtbmFtZS1hbmQtaGFuZGxlcnMiPjIuIEZlYXR1cmUgTmFtZSBhbmQgSGFuZGxlcnM8L2E+CisgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MSI+CisgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2V4dC1lbmFibGUiPjMuIEVuYWJsaW5nIEZlYXR1cmVzPC9hPgorICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDEiPgorICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNleHQtdHlwZXMtb2YtaGFuZGxlcnMiPjQuIFR5cGUgb2YgSGFuZGxlcnM8L2E+CisgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICA8ZGQ+CisgICAgICAgICAgICAgIDxkbD4KKyAgICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDIiPgorICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZXh0X2luaXQiPjQuMS4gZXh0X2luaXQgSGFuZGxlcjwvYT4KKyAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MiI+CisgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNleHRfcHJpbnRfc3RhdHMiPjQuMi4gZXh0X3ByaW50X3N0YXRzIEhhbmRsZXI8L2E+CisgICAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDIiPgorICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZXh0X3NmaWxlX2hhbmRsZXJzIj40LjMuIGV4dF9zZmlsZSBIYW5kbGVyPC9hPgorICAgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICAgIDwvZGw+CisgICAgICAgICAgICA8L2RkPgorICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDEiPgorICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNleHQtaW1wbGVtZW50YXRpb24iPjUuIEV4dGVuZGVkIEZlYXR1cmUgUmVmZXJlbmNlIEltcGxlbWVudGF0aW9uPC9hPgorICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgPGRkPgorICAgICAgICAgICAgICA8ZGw+CisgICAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QyIj4KKyAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2V4dC1pYnMiPjUuMS4gSW5zdHJ1Y3Rpb24tQmFzZWQgU2FtcGxpbmcgKElCUyk8L2E+CisgICAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgICAgPC9kbD4KKyAgICAgICAgICAgIDwvZGQ+CisgICAgICAgICAgPC9kbD4KKyAgICAgICAgPC9kaXY+CisgICAgICAgIDxkaXYgY2xhc3M9InNlY3QxIiB0aXRsZT0iMS6gSW50cm9kdWN0aW9uIj4KKyAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgorICAgICAgICAgICAgPGRpdj4KKyAgICAgICAgICAgICAgPGRpdj4KKyAgICAgICAgICAgICAgICA8aDIgY2xhc3M9InRpdGxlIiBzdHlsZT0iY2xlYXI6IGJvdGgiPjxhIGlkPSJleHQtaW50cm8iPjwvYT4xLqBJbnRyb2R1Y3Rpb248L2gyPgorICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgIDwvZGl2PgorICAgICAgICAgIDxwPgorVGhlIEV4dGVuZGVkIEZlYXR1cmUgSW50ZXJmYWNlIGlzIGEgc3RhbmRhcmQgY2FsbGJhY2sgaW50ZXJmYWNlIAorZGVzaWduZWQgdG8gYWxsb3cgZXh0ZW5zaW9uIHRvIHRoZSBPUHJvZmlsZSBkYWVtb24ncyBzYW1wbGUgcHJvY2Vzc2luZy4gCitFYWNoIGZlYXR1cmUgZGVmaW5lcyBhIHNldCBvZiBjYWxsYmFjayBoYW5kbGVycyB3aGljaCBjYW4gYmUgZW5hYmxlZCBvciAKK2Rpc2FibGVkIHRocm91Z2ggdGhlIE9Qcm9maWxlIGRhZW1vbidzIGNvbW1hbmQtbGluZSBvcHRpb24uCitUaGlzIGludGVyZmFjZSBjYW4gYmUgdXNlZCB0byBpbXBsZW1lbnQgc3VwcG9ydCBmb3IgYXJjaGl0ZWN0dXJlLXNwZWNpZmljCitmZWF0dXJlcyBvciBmZWF0dXJlcyBub3QgY29tbW9ubHkgdXNlZCBieSBnZW5lcmFsIE9Qcm9maWxlIHVzZXJzLiAKKzwvcD4KKyAgICAgICAgPC9kaXY+CisgICAgICAgIDxkaXYgY2xhc3M9InNlY3QxIiB0aXRsZT0iMi6gRmVhdHVyZSBOYW1lIGFuZCBIYW5kbGVycyI+CisgICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KKyAgICAgICAgICAgIDxkaXY+CisgICAgICAgICAgICAgIDxkaXY+CisgICAgICAgICAgICAgICAgPGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj48YSBpZD0iZXh0LW5hbWUtYW5kLWhhbmRsZXJzIj48L2E+Mi6gRmVhdHVyZSBOYW1lIGFuZCBIYW5kbGVyczwvaDI+CisgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgPHA+CitFYWNoIGV4dGVuZGVkIGZlYXR1cmUgaGFzIGFuIGVudHJ5IGluIHRoZSA8Y29kZSBjbGFzcz0idmFybmFtZSI+ZXh0X2ZlYXR1cmVfdGFibGU8L2NvZGU+CitpbiA8Y29kZSBjbGFzcz0iZmlsZW5hbWUiPm9wZF9leHRlbmRlZC5jcHA8L2NvZGU+LiBFYWNoIGVudHJ5IGNvbnRhaW5zIGEgZmVhdHVyZSBuYW1lLAorYW5kIGEgY29ycmVzcG9uZGluZyBzZXQgb2YgaGFuZGxlcnMuIEZlYXR1cmUgbmFtZSBpcyBhIHVuaXF1ZSBzdHJpbmcsIHdoaWNoIGlzCit1c2VkIHRvIGlkZW50aWZ5IGEgZmVhdHVyZSBpbiB0aGUgdGFibGUuIEVhY2ggZmVhdHVyZSBwcm92aWRlcyBhIHNldAorb2YgaGFuZGxlcnMsIHdoaWNoIHdpbGwgYmUgZXhlY3V0ZWQgYnkgdGhlIE9Qcm9maWxlIGRhZW1vbiBmcm9tIHByZS1kZXRlcm1pbmVkCitsb2NhdGlvbnMgdG8gcGVyZm9ybSBjZXJ0YWluIHRhc2tzLiBBdCBydW50aW1lLCB0aGUgT1Byb2ZpbGUgZGFlbW9uIGNhbGxzIGEgZmVhdHVyZQoraGFuZGxlciB3cmFwcGVyIGZyb20gb25lIG9mIHRoZSBwcmVkZXRlcm1pbmVkIGxvY2F0aW9ucyB0byBjaGVjayB3aGV0aGVyCithbiBleHRlbmRlZCBmZWF0dXJlIGlzIGVuYWJsZWQsIGFuZCB3aGV0aGVyIGEgcGFydGljdWxhciBoYW5kbGVyIGV4aXN0cy4KK09ubHkgdGhlIGhhbmRsZXJzIG9mIHRoZSBlbmFibGVkIGZlYXR1cmUgd2lsbCBiZSBleGVjdXRlZC4KKzwvcD4KKyAgICAgICAgPC9kaXY+CisgICAgICAgIDxkaXYgY2xhc3M9InNlY3QxIiB0aXRsZT0iMy6gRW5hYmxpbmcgRmVhdHVyZXMiPgorICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlcGFnZSI+CisgICAgICAgICAgICA8ZGl2PgorICAgICAgICAgICAgICA8ZGl2PgorICAgICAgICAgICAgICAgIDxoMiBjbGFzcz0idGl0bGUiIHN0eWxlPSJjbGVhcjogYm90aCI+PGEgaWQ9ImV4dC1lbmFibGUiPjwvYT4zLqBFbmFibGluZyBGZWF0dXJlczwvaDI+CisgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgPHA+CitFYWNoIGZlYXR1cmUgaXMgZW5hYmxlZCB1c2luZyB0aGUgT1Byb2ZpbGUgZGFlbW9uIChvcHJvZmlsZWQpIGNvbW1hbmQtbGluZQorb3B0aW9uICItLWV4dC1mZWF0dXJlPSZsdDtleHRlbmRlZC1mZWF0dXJlLW5hbWUmZ3Q7OlthcmdzXSIuIFRoZQorImV4dGVuZGVkLWZlYXR1cmUtbmFtZSIgaXMgdXNlZCB0byBkZXRlcm1pbmUgdGhlIGZlYXR1cmUgdG8gYmUgZW5hYmxlZC4KK1RoZSBvcHRpb25hbCAiYXJncyIgaXMgcGFzc2VkIGludG8gdGhlIGZlYXR1cmUtc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24gaGFuZGxlcgorKDxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+ZXh0X2luaXQ8L2NvZGU+KS4gQ3VycmVudGx5LCBvbmx5IG9uZSBleHRlbmRlZCBmZWF0dXJlIGNhbiBiZQorZW5hYmxlZCBhdCBhIHRpbWUuCis8L3A+CisgICAgICAgIDwvZGl2PgorICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0MSIgdGl0bGU9IjQuoFR5cGUgb2YgSGFuZGxlcnMiPgorICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlcGFnZSI+CisgICAgICAgICAgICA8ZGl2PgorICAgICAgICAgICAgICA8ZGl2PgorICAgICAgICAgICAgICAgIDxoMiBjbGFzcz0idGl0bGUiIHN0eWxlPSJjbGVhcjogYm90aCI+PGEgaWQ9ImV4dC10eXBlcy1vZi1oYW5kbGVycyI+PC9hPjQuoFR5cGUgb2YgSGFuZGxlcnM8L2gyPgorICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgIDwvZGl2PgorICAgICAgICAgIDxwPgorRWFjaCBmZWF0dXJlIGlzIHJlc3BvbnNpYmxlIGZvciBwcm92aWRpbmcgaXRzIG93biBzZXQgb2YgaGFuZGxlcnMuCitUeXBlcyBvZiBoYW5kbGVyIGFyZToKKzwvcD4KKyAgICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0MiIgdGl0bGU9IjQuMS6gZXh0X2luaXQgSGFuZGxlciI+CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgorICAgICAgICAgICAgICA8ZGl2PgorICAgICAgICAgICAgICAgIDxkaXY+CisgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9InRpdGxlIj48YSBpZD0iZXh0X2luaXQiPjwvYT40LjEuoGV4dF9pbml0IEhhbmRsZXI8L2gzPgorICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgPHA+CisiZXh0X2luaXQiIGhhbmRsZXMgaW5pdGlhbGl6YXRpb24gb2YgYW4gZXh0ZW5kZWQgZmVhdHVyZS4gSXQgdGFrZXMKKyJhcmdzIiBwYXJhbWV0ZXIgd2hpY2ggaXMgcGFzc2VkIGluIHRocm91Z2ggdGhlICJvcHJvZmlsZWQgLS1leHQtZmVhdHVyZT0mbHQ7CitleHRlbmRlZC1mZWF0dXJlLW5hbWUmZ3Q7OlthcmdzXSIuIFRoaXMgaGFuZGxlciBpcyBleGVjdXRlZCBpbiB0aGUgZnVuY3Rpb24KKzxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+b3BkX29wdGlvbnMoKTwvY29kZT4gaW4gdGhlIGZpbGUgPGNvZGUgY2xhc3M9ImZpbGVuYW1lIj5kYWVtb24vb3Byb2ZpbGVkLmMKKzwvY29kZT4uCis8L3A+CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJub3RlIiB0aXRsZT0iTm90ZSIgc3R5bGU9Im1hcmdpbi1sZWZ0OiAwLjVpbjsgbWFyZ2luLXJpZ2h0OiAwLjVpbjsiPgorICAgICAgICAgICAgICA8aDMgY2xhc3M9InRpdGxlIj5Ob3RlPC9oMz4KKyAgICAgICAgICAgICAgPHA+CitUaGUgZXh0X2luaXQgaGFuZGxlciBpcyByZXF1aXJlZCBmb3IgYWxsIGZlYXR1cmVzLgorPC9wPgorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgPGRpdiBjbGFzcz0ic2VjdDIiIHRpdGxlPSI0LjIuoGV4dF9wcmludF9zdGF0cyBIYW5kbGVyIj4KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlcGFnZSI+CisgICAgICAgICAgICAgIDxkaXY+CisgICAgICAgICAgICAgICAgPGRpdj4KKyAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz0idGl0bGUiPjxhIGlkPSJleHRfcHJpbnRfc3RhdHMiPjwvYT40LjIuoGV4dF9wcmludF9zdGF0cyBIYW5kbGVyPC9oMz4KKyAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIDxwPgorImV4dF9wcmludF9zdGF0cyIgaGFuZGxlcyB0aGUgZXh0ZW5kZWQgZmVhdHVyZSBzdGF0aXN0aWNzIHJlcG9ydC4gSXQgYWRkcworYSBuZXcgc2VjdGlvbiBpbiB0aGUgT1Byb2ZpbGUgZGFlbW9uIHN0YXRpc3RpY3MgcmVwb3J0LCB3aGljaCBpcyBub3JtYWxseQorb3V0cHV0ZWQgdG8gdGhlIGZpbGUKKzxjb2RlIGNsYXNzPSJmaWxlbmFtZSI+L3Zhci9saWIvb3Byb2ZpbGUvc2FtcGxlcy9vcHJvZmlsZWQubG9nPC9jb2RlPi4KK1RoaXMgaGFuZGxlciBpcyBleGVjdXRlZCBpbiB0aGUgZnVuY3Rpb24gPGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5vcGRfcHJpbnRfc3RhdHMoKTwvY29kZT4KK2luIHRoZSBmaWxlIDxjb2RlIGNsYXNzPSJmaWxlbmFtZSI+ZGFlbW9uL29wZF9zdGF0cy5jPC9jb2RlPi4KKzwvcD4KKyAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0MiIgdGl0bGU9IjQuMy6gZXh0X3NmaWxlIEhhbmRsZXIiPgorICAgICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KKyAgICAgICAgICAgICAgPGRpdj4KKyAgICAgICAgICAgICAgICA8ZGl2PgorICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPSJ0aXRsZSI+PGEgaWQ9ImV4dF9zZmlsZV9oYW5kbGVycyI+PC9hPjQuMy6gZXh0X3NmaWxlIEhhbmRsZXI8L2gzPgorICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgPHA+CisiZXh0X3NmaWxlIiBjb250YWlucyBhIHNldCBvZiBoYW5kbGVycyByZWxhdGVkIHRvIG9wZXJhdGlvbnMgb24gdGhlIGV4dGVuZGVkCitzYW1wbGUgZmlsZXMgKHNhbXBsZSBmaWxlcyBmb3IgZXZlbnRzIHJlbGF0ZWQgdG8gZXh0ZW5kZWQgZmVhdHVyZSkuCitUaGVzZSBvcGVyYXRpb25zIGluY2x1ZGUgPGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5jcmVhdGVfc2ZpbGUoKTwvY29kZT4sCis8Y29kZSBjbGFzcz0iZnVuY3Rpb24iPnNmaWxlX2R1cCgpPC9jb2RlPiwgPGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5jbG9zZV9zZmlsZSgpPC9jb2RlPiwKKzxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+c3luY19zZmlsZSgpPC9jb2RlPiwgYW5kIDxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z2V0X2ZpbGUoKTwvY29kZT4KK2FzIGRlZmluZWQgaW4gPGNvZGUgY2xhc3M9ImZpbGVuYW1lIj5kYWVtb24vb3BkX3NmaWxlLmM8L2NvZGU+LgorQW4gYWRkaXRpb25hbCBmaWVsZCwgPGNvZGUgY2xhc3M9InZhcm5hbWUiPm9kYl90ICogZXh0X2ZpbGU8L2NvZGU+LCBpcyBhZGRlZCB0byB0aGUgCis8Y29kZSBjbGFzcz0idmFybmFtZSI+c3RydWN0IHNmaWxlPC9jb2RlPiBmb3Igc3RvcmluZyBleHRlbmRlZCBzYW1wbGUgZmlsZXMKK2luZm9ybWF0aW9uLiAKKworPC9wPgorICAgICAgICAgIDwvZGl2PgorICAgICAgICA8L2Rpdj4KKyAgICAgICAgPGRpdiBjbGFzcz0ic2VjdDEiIHRpdGxlPSI1LqBFeHRlbmRlZCBGZWF0dXJlIFJlZmVyZW5jZSBJbXBsZW1lbnRhdGlvbiI+CisgICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KKyAgICAgICAgICAgIDxkaXY+CisgICAgICAgICAgICAgIDxkaXY+CisgICAgICAgICAgICAgICAgPGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj48YSBpZD0iZXh0LWltcGxlbWVudGF0aW9uIj48L2E+NS6gRXh0ZW5kZWQgRmVhdHVyZSBSZWZlcmVuY2UgSW1wbGVtZW50YXRpb248L2gyPgorICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgIDwvZGl2PgorICAgICAgICAgIDxkaXYgY2xhc3M9InNlY3QyIiB0aXRsZT0iNS4xLqBJbnN0cnVjdGlvbi1CYXNlZCBTYW1wbGluZyAoSUJTKSI+CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgorICAgICAgICAgICAgICA8ZGl2PgorICAgICAgICAgICAgICAgIDxkaXY+CisgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9InRpdGxlIj48YSBpZD0iZXh0LWlicyI+PC9hPjUuMS6gSW5zdHJ1Y3Rpb24tQmFzZWQgU2FtcGxpbmcgKElCUyk8L2gzPgorICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgPHA+CitBbiBleGFtcGxlIG9mIGV4dGVuZGVkIGZlYXR1cmUgaW1wbGVtZW50YXRpb24gY2FuIGJlIHNlZW4gYnkKK2V4YW1pbmluZyB0aGUgQU1EIEluc3RydWN0aW9uLUJhc2VkIFNhbXBsaW5nIHN1cHBvcnQuCis8L3A+CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0MyIgdGl0bGU9IjUuMS4xLqBJQlMgSW5pdGlhbGl6YXRpb24iPgorICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgorICAgICAgICAgICAgICAgIDxkaXY+CisgICAgICAgICAgICAgICAgICA8ZGl2PgorICAgICAgICAgICAgICAgICAgICA8aDQgY2xhc3M9InRpdGxlIj48YSBpZD0iaWJzLWluaXQiPjwvYT41LjEuMS6gSUJTIEluaXRpYWxpemF0aW9uPC9oND4KKyAgICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgICAgPHA+CitJbnN0cnVjdGlvbi1CYXNlZCBTYW1wbGluZyAoSUJTKSBpcyBhIG5ldyBwZXJmb3JtYW5jZSBtZWFzdXJlbWVudCB0ZWNobmlxdWUKK2F2YWlsYWJsZSBvbiBBTUQgRmFtaWx5IDEwaCBwcm9jZXNzb3JzLiBFbmFibGluZyBJQlMgcHJvZmlsaW5nIGlzIGRvbmUgc2ltcGx5CitieSBzcGVjaWZ5aW5nIElCUyBwZXJmb3JtYW5jZSBldmVudHMgdGhyb3VnaCB0aGUgIi0tZXZlbnQ9IiBvcHRpb25zLgorPC9wPgorICAgICAgICAgICAgICA8dGFibGUgeG1sbnM9IiIgYm9yZGVyPSIwIiBzdHlsZT0iYmFja2dyb3VuZDogI0UwRTBFMDsiIHdpZHRoPSI5MCUiPgorICAgICAgICAgICAgICAgIDx0cj4KKyAgICAgICAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgICAgICAgPHByZSBjbGFzcz0ic2NyZWVuIj4KK29wY29udHJvbCAtLWV2ZW50PUlCU19GRVRDSF9YWFg6Jmx0O2NvdW50Jmd0OzombHQ7dW0mZ3Q7OiZsdDtrZXJuZWwmZ3Q7OiZsdDt1c2VyJmd0Oworb3Bjb250cm9sIC0tZXZlbnQ9SUJTX09QX1hYWDombHQ7Y291bnQmZ3Q7OiZsdDt1bSZndDs6Jmx0O2tlcm5lbCZndDs6Jmx0O3VzZXImZ3Q7CisKK05vdGU6ICogQ291bnQgYW5kIHVuaXRtYXNrIGZvciBhbGwgSUJTIGZldGNoIGV2ZW50cyBtdXN0IGJlIHRoZSBzYW1lLAorCWFzIGRvIHRob3NlIGZvciBJQlMgb3AuCis8L3ByZT4KKyAgICAgICAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICAgICAgPC90cj4KKyAgICAgICAgICAgICAgPC90YWJsZT4KKyAgICAgICAgICAgICAgPHA+CitJQlMgcGVyZm9ybWFuY2UgZXZlbnRzIGFyZSBsaXN0ZWQgaW4gPGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5vcGNvbnRyb2wgLS1saXN0LWV2ZW50czwvY29kZT4uCitXaGVuIHVzZXJzIHNwZWNpZnkgdGhlc2UgZXZlbnRzLCBvcGNvbnRyb2wgdmVyaWZpZXMgdGhlbSB1c2luZyBvcGhlbHAsIHdoaWNoCitjaGVja3MgZm9yIHRoZSA8Y29kZSBjbGFzcz0idmFybmFtZSI+ZXh0Omlic19mZXRjaDwvY29kZT4gb3IgPGNvZGUgY2xhc3M9InZhcm5hbWUiPmV4dDppYnNfb3A8L2NvZGU+Cit0YWcgaW4gPGNvZGUgY2xhc3M9ImZpbGVuYW1lIj5ldmVudHMveDg2LTY0L2ZhbWlseTEwL2V2ZW50czwvY29kZT4gZmlsZS4KK1RoZW4sIGl0IGNvbmZpZ3VyZXMgdGhlIGRyaXZlciBpbnRlcmZhY2UgKC9kZXYvb3Byb2ZpbGUvaWJzX2ZldGNoLy4uLiBhbmQKKy9kZXYvb3Byb2ZpbGUvaWJzX29wLy4uLikgYW5kIHN0YXJ0cyB0aGUgT1Byb2ZpbGUgZGFlbW9uIGFzIGZvbGxvd3MuCis8L3A+CisgICAgICAgICAgICAgIDx0YWJsZSB4bWxucz0iIiBib3JkZXI9IjAiIHN0eWxlPSJiYWNrZ3JvdW5kOiAjRTBFMEUwOyIgd2lkdGg9IjkwJSI+CisgICAgICAgICAgICAgICAgPHRyPgorICAgICAgICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICAgICAgICA8cHJlIGNsYXNzPSJzY3JlZW4iPgorb3Byb2ZpbGVkIFwKKyAgICAtLWV4dC1mZWF0dXJlPWliczpcCisJZmV0Y2g6Jmx0O0lCU19GRVRDSF9FVkVOVDEmZ3Q7LCZsdDtJQlNfRkVUQ0hfRVZFTlQyJmd0OywuLi4sOiZsdDtJQlMgZmV0Y2ggY291bnQmZ3Q7OiZsdDtJQlMgRmV0Y2ggdW0mZ3Q7fFwKKwlvcDombHQ7SUJTX09QX0VWRU5UMSZndDssJmx0O0lCU19PUF9FVkVOVDImZ3Q7LC4uLiw6Jmx0O0lCUyBvcCBjb3VudCZndDs6Jmx0O0lCUyBvcCB1bSZndDsKKzwvcHJlPgorICAgICAgICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgICAgICA8L3RyPgorICAgICAgICAgICAgICA8L3RhYmxlPgorICAgICAgICAgICAgICA8cD4KK0hlcmUsIHRoZSBPUHJvZmlsZSBkYWVtb24gcGFyc2VzIHRoZSA8Y29kZSBjbGFzcz0idmFybmFtZSI+LS1leHQtZmVhdHVyZTwvY29kZT4KK29wdGlvbiBhbmQgY2hlY2tzIHRoZSBmZWF0dXJlIG5hbWUgKCJpYnMiKSBiZWZvcmUgY2FsbGluZyB0aGUgCit0aGUgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gdG8gaGFuZGxlIHRoZSBzdHJpbmcKK2NvbnRhaW5pbmcgSUJTIGV2ZW50cywgY291bnRzLCBhbmQgdW5pdG1hc2tzLgorVGhlbiwgaXQgc3RvcmVzIGVhY2ggZXZlbnQgaW4gdGhlIElCUyB2aXJ0dWFsLWNvdW50ZXIgdGFibGUKKyg8Y29kZSBjbGFzcz0idmFybmFtZSI+c3RydWN0IG9wZF9ldmVudCBpYnNfdmNbT1BfTUFYX0lCU19DT1VOVEVSU108L2NvZGU+KSBhbmQKK3N0b3JlcyB0aGUgZXZlbnQgaW5kZXggaW4gdGhlIElCUyBWaXJ0dWFsIENvdW50ZXIgSW5kZXggKFZDSSkgbWFwCisoPGNvZGUgY2xhc3M9InZhcm5hbWUiPmlic192Y2lfbWFwW09QX01BWF9JQlNfQ09VTlRFUlNdPC9jb2RlPikgd2l0aCBJQlMgZXZlbnQgdmFsdWUKK2FzIHRoZSBtYXAga2V5LgorPC9wPgorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0MyIgdGl0bGU9IjUuMS4yLqBJQlMgRGF0YSBQcm9jZXNzaW5nIj4KKyAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KKyAgICAgICAgICAgICAgICA8ZGl2PgorICAgICAgICAgICAgICAgICAgPGRpdj4KKyAgICAgICAgICAgICAgICAgICAgPGg0IGNsYXNzPSJ0aXRsZSI+PGEgaWQ9Imlicy1kYXRhLXByb2Nlc3NpbmciPjwvYT41LjEuMi6gSUJTIERhdGEgUHJvY2Vzc2luZzwvaDQ+CisgICAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgIDxwPgorRHVyaW5nIGEgcHJvZmlsZSBzZXNzaW9uLCB0aGUgT1Byb2ZpbGUgZGFlbW9uIGlkZW50aWZpZXMgSUJTIHNhbXBsZXMgaW4gdGhlIAorZXZlbnQgYnVmZmVyIHVzaW5nIHRoZSA8Y29kZSBjbGFzcz0idmFybmFtZSI+IklCU19GRVRDSF9DT0RFIjwvY29kZT4gb3IgCis8Y29kZSBjbGFzcz0idmFybmFtZSI+IklCU19PUF9DT0RFIjwvY29kZT4uIFRoZXNlIGNvZGVzIHRyaWdnZXIgdGhlIGhhbmRsZXJzIAorPGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5jb2RlX2lic19mZXRjaF9zYW1wbGUoKTwvY29kZT4gb3IgCis8Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmNvZGVfaWJzX29wX3NhbXBsZSgpPC9jb2RlPiBsaXN0ZWQgaW4gdGhlCis8Y29kZSBjbGFzcz0idmFybmFtZSI+aGFuZGxlcl90IGhhbmRsZXJzW108L2NvZGU+IHZlY3RvciBpbiAKKzxjb2RlIGNsYXNzPSJmaWxlbmFtZSI+ZGFlbW9uL29wZF90cmFucy5jIDwvY29kZT4uIFRoZXNlIGhhbmRsZXJzIGFyZSByZXNwb25zaWJsZSBmb3IKK3Byb2Nlc3NpbmcgSUJTIHNhbXBsZXMgYW5kIHRyYW5zbGF0ZSB0aGVtIGludG8gSUJTIHBlcmZvcm1hbmNlIGV2ZW50cy4KKzwvcD4KKyAgICAgICAgICAgICAgPHA+CitVbmxpa2UgdHJhZGl0aW9uYWwgcGVyZm9ybWFuY2UgZXZlbnRzLCBlYWNoIElCUyBzYW1wbGUgY2FuIGJlIGRlcml2ZWQgaW50byAKK211bHRpcGxlIElCUyBwZXJmb3JtYW5jZSBldmVudHMuIEZvciBlYWNoIGV2ZW50IHRoYXQgdGhlIHVzZXIgc3BlY2lmaWVzLAorYSBjb21iaW5hdGlvbiBvZiBiaXRzIGZyb20gTW9kZWwtU3BlY2lmaWMgUmVnaXN0ZXJzIChNU1IpIGFyZSBjaGVja2VkCithZ2FpbnN0IHRoZSBiaXRtYXNrIGRlZmluaW5nIHRoZSBldmVudC4gSWYgdGhlIGNvbmRpdGlvbiBpcyBtZXQsIHRoZSBldmVudAord2lsbCB0aGVuIGJlIHJlY29yZGVkLiBUaGUgZGVyaXZhdGlvbiBsb2dpYyBpcyBpbiB0aGUgZmlsZXMKKzxjb2RlIGNsYXNzPSJmaWxlbmFtZSI+ZGFlbW9uL29wZF9pYnNfbWFjcm8uaDwvY29kZT4gYW5kCis8Y29kZSBjbGFzcz0iZmlsZW5hbWUiPmRhZW1vbi9vcGRfaWJzX3RyYW5zLltoLGNdPC9jb2RlPi4gCis8L3A+CisgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9InNlY3QzIiB0aXRsZT0iNS4xLjMuoElCUyBTYW1wbGUgRmlsZSI+CisgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlcGFnZSI+CisgICAgICAgICAgICAgICAgPGRpdj4KKyAgICAgICAgICAgICAgICAgIDxkaXY+CisgICAgICAgICAgICAgICAgICAgIDxoNCBjbGFzcz0idGl0bGUiPjxhIGlkPSJpYnMtc2FtcGxlLWZpbGUiPjwvYT41LjEuMy6gSUJTIFNhbXBsZSBGaWxlPC9oND4KKyAgICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgICAgPHA+CitUcmFkaXRpb25hbGx5LCBzYW1wbGUgZmlsZSBpbmZvcm1hdGlvbiA8Y29kZSBjbGFzcz0idmFybmFtZSI+KG9kYl90KTwvY29kZT4gaXMgc3RvcmVkCitpbiB0aGUgPGNvZGUgY2xhc3M9InZhcm5hbWUiPnN0cnVjdCBzZmlsZTo6b2RiX3QgZmlsZVtPUF9NQVhfQ09VTlRFUl08L2NvZGU+LgorQ3VycmVudGx5LCA8Y29kZSBjbGFzcz0idmFybmFtZSI+T1BfTUFYX0NPVU5URVI8L2NvZGU+IGlzIDggb24gbm9uLWFscGhhLCBhbmQgMjAgb24KK2FscGhhLWJhc2VkIHN5c3RlbS4gRXZlbnQgaW5kZXggKHRoZSBjb3VudGVyIG51bWJlciBvbiB3aGljaCB0aGUgZXZlbnQKK2lzIGNvbmZpZ3VyZWQpIGlzIHVzZWQgdG8gYWNjZXNzIHRoZSBjb3JyZXNwb25kaW5nIGVudHJ5IGluIHRoZSBhcnJheS4KK1VubGlrZSB0aGUgdHJhZGl0aW9uYWwgcGVyZm9ybWFuY2UgZXZlbnQsIElCUyBkb2VzIG5vdCB1c2UgdGhlIGFjdHVhbAorY291bnRlciByZWdpc3RlcnMgKGkuZS4gPGNvZGUgY2xhc3M9ImZpbGVuYW1lIj4vZGV2L29wcm9maWxlLzAsMSwyLDM8L2NvZGU+KS4KK0Fsc28sIHRoZSBudW1iZXIgb2YgcGVyZm9ybWFuY2UgZXZlbnRzIGdlbmVyYXRlZCBieSBJQlMgY291bGQgYmUgbGFyZ2VyIHRoYW4KKzxjb2RlIGNsYXNzPSJ2YXJuYW1lIj5PUF9NQVhfQ09VTlRFUjwvY29kZT4gKGN1cnJlbnRseSB1cHRvIDEzIElCUy1mZXRjaCBhbmQgNDYgSUJTLW9wIAorZXZlbnRzKS4gVGhlcmVmb3JlIElCUyByZXF1aXJlcyBhIHNwZWNpYWwgZGF0YSBzdHJ1Y3R1cmUgYW5kIHNmaWxlCitoYW5kbGVycyAoPGNvZGUgY2xhc3M9InZhcm5hbWUiPnN0cnVjdCBvcGRfZXh0X3NmaWxlX2hhbmRsZXJzPC9jb2RlPikgZm9yIG1hbmFnaW5nCitJQlMgc2FtcGxlIGZpbGVzLiBJQlMtc2FtcGxlLWZpbGUgaW5mb3JtYXRpb24gaXMgc3RvcmVkIGluIGEgbWVtb3J5IAorYWxsb2NhdGVkIGJ5IGhhbmRsZXIgPGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5pYnNfc2ZpbGVfY3JlYXRlKCk8L2NvZGU+LCB3aGljaCBjYW4KK2JlIGFjY2Vzc2VkIHRocm91Z2ggPGNvZGUgY2xhc3M9InZhcm5hbWUiPnN0cnVjdCBzZmlsZTo6b2RiX3QgKiBleHRfZmlsZXM8L2NvZGU+LgorPC9wPgorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgPC9kaXY+CisgICAgICAgIDwvZGl2PgorICAgICAgPC9kaXY+CisgICAgICA8ZGl2IGNsYXNzPSJnbG9zc2FyeSIgdGl0bGU9Ikdsb3NzYXJ5IG9mIE9Qcm9maWxlIHNvdXJjZSBjb25jZXB0cyBhbmQgdHlwZXMiPgorICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgorICAgICAgICAgIDxkaXY+CisgICAgICAgICAgICA8ZGl2PgorICAgICAgICAgICAgICA8aDIgY2xhc3M9InRpdGxlIj48YSBpZD0iZ2xvc3NhcnkiPjwvYT5HbG9zc2FyeSBvZiBPUHJvZmlsZSBzb3VyY2UgY29uY2VwdHMgYW5kIHR5cGVzPC9oMj4KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgIDwvZGl2PgorICAgICAgICA8L2Rpdj4KKyAgICAgICAgPGRsPgorICAgICAgICAgIDxkdD5hcHBsaWNhdGlvbiBpbWFnZTwvZHQ+CisgICAgICAgICAgPGRkPgorICAgICAgICAgICAgPHA+CitUaGUgcHJpbWFyeSBiaW5hcnkgaW1hZ2UgdXNlZCBieSBhbiBhcHBsaWNhdGlvbi4gVGhpcyBpcyBkZXJpdmVkCitmcm9tIHRoZSBrZXJuZWwgYW5kIGNvcnJlc3BvbmRzIHRvIHRoZSBiaW5hcnkgc3RhcnRlZCB1cG9uIHJ1bm5pbmcKK2FuIGFwcGxpY2F0aW9uOiBmb3IgZXhhbXBsZSwgPGNvZGUgY2xhc3M9ImZpbGVuYW1lIj4vYmluL2Jhc2g8L2NvZGU+LgorPC9wPgorICAgICAgICAgIDwvZGQ+CisgICAgICAgICAgPGR0PmJpbmFyeSBpbWFnZTwvZHQ+CisgICAgICAgICAgPGRkPgorICAgICAgICAgICAgPHA+CitBbiBFTEYgZmlsZSBjb250YWluaW5nIGV4ZWN1dGFibGUgY29kZTogdGhpcyBpbmNsdWRlcyBrZXJuZWwgbW9kdWxlcywKK3RoZSBrZXJuZWwgaXRzZWxmIChhLmsuYS4gPGNvZGUgY2xhc3M9ImZpbGVuYW1lIj52bWxpbnV4PC9jb2RlPiksIHNoYXJlZCBsaWJyYXJpZXMsCithbmQgYXBwbGljYXRpb24gYmluYXJpZXMuCis8L3A+CisgICAgICAgICAgPC9kZD4KKyAgICAgICAgICA8ZHQ+ZGNvb2tpZTwvZHQ+CisgICAgICAgICAgPGRkPgorICAgICAgICAgICAgPHA+CitTaG9ydCBmb3IgImRlbnRyeSBjb29raWUiLiBBIHVuaXF1ZSBJRCB0aGF0IGNhbiBiZSBsb29rZWQgdXAgdG8gcHJvdmlkZQordGhlIGZ1bGwgcGF0aCBuYW1lIG9mIGEgYmluYXJ5IGltYWdlLgorPC9wPgorICAgICAgICAgIDwvZGQ+CisgICAgICAgICAgPGR0PmRlcGVuZGVudCBpbWFnZTwvZHQ+CisgICAgICAgICAgPGRkPgorICAgICAgICAgICAgPHA+CitBIGJpbmFyeSBpbWFnZSB0aGF0IGlzIGRlcGVuZGVudCB1cG9uIGFuIGFwcGxpY2F0aW9uLCB1c2VkIHdpdGgKK3Blci1hcHBsaWNhdGlvbiBzZXBhcmF0aW9uLiBNb3N0IGNvbW1vbmx5LCBzaGFyZWQgbGlicmFyaWVzLiBGb3IgZXhhbXBsZSwKK2lmIDxjb2RlIGNsYXNzPSJmaWxlbmFtZSI+L2Jpbi9iYXNoPC9jb2RlPiBpcyBydW5uaW5nIGFuZCB3ZSB0YWtlCitzb21lIHNhbXBsZXMgaW5zaWRlIHRoZSBDIGxpYnJhcnkgaXRzZWxmIGR1ZSB0byA8c3BhbiBjbGFzcz0iY29tbWFuZCI+PHN0cm9uZz5iYXNoPC9zdHJvbmc+PC9zcGFuPgorY2FsbGluZyBsaWJyYXJ5IGNvZGUsIHRoZW4gdGhlIGltYWdlIDxjb2RlIGNsYXNzPSJmaWxlbmFtZSI+L2xpYi9saWJjLnNvPC9jb2RlPgord291bGQgYmUgZGVwZW5kZW50IHVwb24gPGNvZGUgY2xhc3M9ImZpbGVuYW1lIj4vYmluL2Jhc2g8L2NvZGU+LgorPC9wPgorICAgICAgICAgIDwvZGQ+CisgICAgICAgICAgPGR0Pm1lcmdpbmc8L2R0PgorICAgICAgICAgIDxkZD4KKyAgICAgICAgICAgIDxwPgorVGhpcyByZWZlcnMgdG8gdGhlIGFiaWxpdHkgdG8gbWVyZ2Ugc2V2ZXJhbCBkaXN0aW5jdCBzYW1wbGUgZmlsZXMKK2ludG8gb25lIHNldCBvZiBkYXRhIGF0IHJ1bnRpbWUsIGluIHRoZSBwb3N0LXByb2ZpbGluZyB0b29scy4gRm9yIGV4YW1wbGUsCitwZXItdGhyZWFkIHNhbXBsZSBmaWxlcyBjYW4gYmUgbWVyZ2VkIGludG8gb25lIHNldCBvZiBkYXRhLCBiZWNhdXNlCit0aGV5IGFyZSBjb21wYXRpYmxlIChpLmUuIHRoZSBhZ2dyZWdhdGlvbiBvZiB0aGUgZGF0YSBpcyBtZWFuaW5nZnVsKSwKK2J1dCBpdCdzIG5vdCBwb3NzaWJsZSB0byBtZXJnZSBzYW1wbGUgZmlsZXMgZm9yIHR3byBkaWZmZXJlbnQgZXZlbnRzLAorYmVjYXVzZSB0aGVyZSB3b3VsZCBiZSBubyB1c2VmdWwgbWVhbmluZyB0byB0aGUgcmVzdWx0cy4KKzwvcD4KKyAgICAgICAgICA8L2RkPgorICAgICAgICAgIDxkdD5wcm9maWxlIGNsYXNzPC9kdD4KKyAgICAgICAgICA8ZGQ+CisgICAgICAgICAgICA8cD4KK0EgY29sbGVjdGlvbiBvZiBwcm9maWxlIGRhdGEgdGhhdCBoYXMgYmVlbiBjb2xsZWN0ZWQgdW5kZXIgdGhlIHNhbWUKK2NsYXNzIHRlbXBsYXRlLiBGb3IgZXhhbXBsZSwgaWYgd2UncmUgdXNpbmcgPHNwYW4gY2xhc3M9ImNvbW1hbmQiPjxzdHJvbmc+b3ByZXBvcnQ8L3N0cm9uZz48L3NwYW4+Cit0byBzaG93IHJlc3VsdHMgYWZ0ZXIgcHJvZmlsaW5nIHdpdGggdHdvIHBlcmZvcm1hbmNlIGNvdW50ZXJzIGVuYWJsZWQKK3Byb2ZpbGluZyA8Y29kZSBjbGFzcz0iY29uc3RhbnQiPkRBVEFfTUVNX1JFRlM8L2NvZGU+IGFuZCA8Y29kZSBjbGFzcz0iY29uc3RhbnQiPkNQVV9DTEtfVU5IQUxURUQ8L2NvZGU+LAordGhlcmUgd291bGQgYmUgdHdvIHByb2ZpbGUgY2xhc3Nlcywgb25lIGZvciBlYWNoIGV2ZW50LiBPciBpZiB3ZSdyZSBvbgorYW4gU01QIHN5c3RlbSBhbmQgZG9pbmcgcGVyLWNwdSBwcm9maWxpbmcsIGFuZCB3ZSByZXF1ZXN0Cis8c3BhbiBjbGFzcz0iY29tbWFuZCI+PHN0cm9uZz5vcHJlcG9ydDwvc3Ryb25nPjwvc3Bhbj4gdG8gc2hvdyByZXN1bHRzIGZvciBlYWNoIENQVSBzaWRlLWJ5LXNpZGUsCit0aGVyZSB3b3VsZCBiZSBhIHByb2ZpbGUgY2xhc3MgZm9yIGVhY2ggQ1BVLgorPC9wPgorICAgICAgICAgIDwvZGQ+CisgICAgICAgICAgPGR0PnByb2ZpbGUgc3BlY2lmaWNhdGlvbjwvZHQ+CisgICAgICAgICAgPGRkPgorICAgICAgICAgICAgPHA+CitUaGUgcGFyYW1ldGVycyB0aGUgdXNlciBwYXNzZXMgdG8gdGhlIHBvc3QtcHJvZmlsaW5nIHRvb2xzIHRoYXQgbGltaXQKK3doYXQgc2FtcGxlIGZpbGVzIGFyZSB1c2VkLiBUaGlzIHNwZWNpZmljYXRpb24gaXMgbWF0Y2hlZCBhZ2FpbnN0Cit0aGUgYXZhaWxhYmxlIHNhbXBsZSBmaWxlcyB0byBnZW5lcmF0ZSBhIHNlbGVjdGlvbiBvZiBwcm9maWxlIGRhdGEuCis8L3A+CisgICAgICAgICAgPC9kZD4KKyAgICAgICAgICA8ZHQ+cHJvZmlsZSB0ZW1wbGF0ZTwvZHQ+CisgICAgICAgICAgPGRkPgorICAgICAgICAgICAgPHA+CitUaGUgcGFyYW1ldGVycyB0aGF0IGRlZmluZSB3aGF0IGdvZXMgaW4gYSBwYXJ0aWN1bGFyIHByb2ZpbGUgY2xhc3MuCitUaGlzIGluY2x1ZGVzIGEgc3ltYm9saWMgbmFtZSAoZS5nLiAiY3B1OjEiKSBhbmQgdGhlIGNvZGUtdXNhYmxlCitlcXVpdmFsZW50LgorPC9wPgorICAgICAgICAgIDwvZGQ+CisgICAgICAgIDwvZGw+CisgICAgICA8L2Rpdj4KKyAgICA8L2Rpdj4KKyAgPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvZG9jL2ludGVybmFscy54bWwgYi9vcHJvZmlsZS0wLjkuNy9kb2MvaW50ZXJuYWxzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hN2ZlYWM3Ci0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvZG9jL2ludGVybmFscy54bWwKQEAgLTAsMCArMSwxMTk0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSdJU08tODg1OS0xJz8+Cis8IURPQ1RZUEUgYm9vayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMS4yLy9FTiIgImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4xLjIvZG9jYm9va3guZHRkIj4KKworPGJvb2sgaWQ9Im9wcm9maWxlLWludGVybmFscyI+Cis8Ym9va2luZm8+CisJPHRpdGxlPk9Qcm9maWxlIEludGVybmFsczwvdGl0bGU+CisgCisJPGF1dGhvcmdyb3VwPgorCQk8YXV0aG9yPgorCQkJPGZpcnN0bmFtZT5Kb2huPC9maXJzdG5hbWU+CisJCQk8c3VybmFtZT5MZXZvbjwvc3VybmFtZT4KKwkJCTxhZmZpbGlhdGlvbj4KKwkJCQk8YWRkcmVzcz48ZW1haWw+bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc8L2VtYWlsPjwvYWRkcmVzcz4KKwkJCTwvYWZmaWxpYXRpb24+CisJCTwvYXV0aG9yPgorCTwvYXV0aG9yZ3JvdXA+CisKKwk8Y29weXJpZ2h0PgorCQk8eWVhcj4yMDAzPC95ZWFyPgorCQk8aG9sZGVyPkpvaG4gTGV2b248L2hvbGRlcj4KKwk8L2NvcHlyaWdodD4KKzwvYm9va2luZm8+CisKKzx0b2M+PC90b2M+CisKKzxjaGFwdGVyIGlkPSJpbnRyb2R1Y3Rpb24iPgorPHRpdGxlPkludHJvZHVjdGlvbjwvdGl0bGU+CisKKzxwYXJhPgorVGhpcyBkb2N1bWVudCBpcyBjdXJyZW50IGZvciBPUHJvZmlsZSB2ZXJzaW9uIDxvcHJvZmlsZXZlcnNpb24gLz4uCitUaGlzIGRvY3VtZW50IHByb3ZpZGVzIHNvbWUgZGV0YWlscyBvbiB0aGUgaW50ZXJuYWwgd29ya2luZ3Mgb2YgT1Byb2ZpbGUgZm9yIHRoZQoraW50ZXJlc3RlZCBoYWNrZXIuIFRoaXMgZG9jdW1lbnQgYXNzdW1lcyBzdHJvbmcgQywgd29ya2luZyBDKyssIHBsdXMgc29tZSBrbm93bGVkZ2Ugb2YKK2tlcm5lbCBpbnRlcm5hbHMgYW5kIENQVSBoYXJkd2FyZS4KKzwvcGFyYT4KKzxub3RlPgorPHBhcmE+CitPbmx5IHRoZSAibmV3IiBpbXBsZW1lbnRhdGlvbiBhc3NvY2lhdGVkIHdpdGgga2VybmVsIDIuNiBhbmQgYWJvdmUgaXMgY292ZXJlZCBoZXJlLiAyLjQKK3VzZXMgYSB2ZXJ5IGRpZmZlcmVudCBrZXJuZWwgbW9kdWxlIGltcGxlbWVudGF0aW9uIGFuZCBkYWVtb24gdG8gcHJvZHVjZSB0aGUgc2FtcGxlIGZpbGVzLgorPC9wYXJhPgorPC9ub3RlPgorCis8c2VjdDEgaWQ9Im92ZXJ2aWV3Ij4KKzx0aXRsZT5PdmVydmlldzwvdGl0bGU+Cis8cGFyYT4KK09Qcm9maWxlIGlzIGEgc3RhdGlzdGljYWwgY29udGludW91cyBwcm9maWxlci4gSW4gb3RoZXIgd29yZHMsIHByb2ZpbGVzIGFyZSBnZW5lcmF0ZWQgYnkKK3JlZ3VsYXJseSBzYW1wbGluZyB0aGUgY3VycmVudCByZWdpc3RlcnMgb24gZWFjaCBDUFUgKGZyb20gYW4gaW50ZXJydXB0IGhhbmRsZXIsIHRoZQorc2F2ZWQgUEMgdmFsdWUgYXQgdGhlIHRpbWUgb2YgaW50ZXJydXB0IGlzIHN0b3JlZCksIGFuZCBjb252ZXJ0aW5nIHRoYXQgcnVudGltZSBQQwordmFsdWUgaW50byBzb21ldGhpbmcgbWVhbmluZ2Z1bCB0byB0aGUgcHJvZ3JhbW1lci4KKzwvcGFyYT4KKzxwYXJhPgorT1Byb2ZpbGUgYWNoaWV2ZXMgdGhpcyBieSB0YWtpbmcgdGhlIHN0cmVhbSBvZiBzYW1wbGVkIFBDIHZhbHVlcywgYWxvbmcgd2l0aCB0aGUgZGV0YWlsCitvZiB3aGljaCB0YXNrIHdhcyBydW5uaW5nIGF0IHRoZSB0aW1lIG9mIHRoZSBpbnRlcnJ1cHQsIGFuZCBjb252ZXJ0aW5nIGludG8gYSBmaWxlIG9mZnNldAorYWdhaW5zdCBhIHBhcnRpY3VsYXIgYmluYXJ5IGZpbGUuIEJlY2F1c2UgYXBwbGljYXRpb25zIDxmdW5jdGlvbj5tbWFwKCk8L2Z1bmN0aW9uPgordGhlIGNvZGUgdGhleSBydW4gKGJlIGl0IDxmaWxlbmFtZT4vYmluL2Jhc2g8L2ZpbGVuYW1lPiwgPGZpbGVuYW1lPi9saWIvbGliZm9vLnNvPC9maWxlbmFtZT4KK29yIHdoYXRldmVyKSwgaXQncyBwb3NzaWJsZSB0byBmaW5kIHRoZSByZWxldmFudCBiaW5hcnkgZmlsZSBhbmQgb2Zmc2V0IGJ5IHdhbGtpbmcKK3RoZSB0YXNrJ3MgbGlzdCBvZiBtYXBwZWQgbWVtb3J5IGFyZWFzLiBFYWNoIFBDIHZhbHVlIGlzIHRodXMgY29udmVydGVkIGludG8gYSB0dXBsZQorb2YgYmluYXJ5LWltYWdlLG9mZnNldC4gVGhpcyBpcyBzb21ldGhpbmcgdGhhdCB0aGUgdXNlcnNwYWNlIHRvb2xzIGNhbiB1c2UgZGlyZWN0bHkKK3RvIHJlY29uc3RydWN0IHdoZXJlIHRoZSBjb2RlIGNhbWUgZnJvbSwgaW5jbHVkaW5nIHRoZSBwYXJ0aWN1bGFyIGFzc2VtYmx5IGluc3RydWN0aW9ucywKK3N5bWJvbCwgYW5kIHNvdXJjZSBsaW5lICh2aWEgdGhlIGJpbmFyeSdzIGRlYnVnIGluZm9ybWF0aW9uIGlmIHByZXNlbnQpLgorPC9wYXJhPgorPHBhcmE+CitSZWd1bGFybHkgc2FtcGxpbmcgdGhlIFBDIHZhbHVlIGxpa2UgdGhpcyBhcHByb3hpbWF0ZXMgd2hhdCBhY3R1YWxseSB3YXMgZXhlY3V0ZWQgYW5kCitob3cgb2Z0ZW4gLSBtb3JlIG9mdGVuIHRoYW4gbm90LCB0aGlzIHN0YXRpc3RpY2FsIGFwcHJveGltYXRpb24gaXMgZ29vZCBlbm91Z2ggdG8KK3JlZmxlY3QgcmVhbGl0eS4gSW4gY29tbW9uIG9wZXJhdGlvbiwgdGhlIHRpbWUgYmV0d2VlbiBlYWNoIHNhbXBsZSBpbnRlcnJ1cHQgaXMgcmVndWxhdGVkCitieSBhIGZpeGVkIG51bWJlciBvZiBjbG9jayBjeWNsZXMuIFRoaXMgaW1wbGllcyB0aGF0IHRoZSByZXN1bHRzIHdpbGwgcmVmbGVjdCB3aGVyZQordGhlIENQVSBpcyBzcGVuZGluZyB0aGUgbW9zdCB0aW1lOyB0aGlzIGlzIG9idmlvdXNseSBhIHZlcnkgdXNlZnVsIGluZm9ybWF0aW9uIHNvdXJjZQorZm9yIHBlcmZvcm1hbmNlIGFuYWx5c2lzLgorPC9wYXJhPgorPHBhcmE+CitTb21ldGltZXMgdGhvdWdoLCBhbiBhcHBsaWNhdGlvbiBwcm9ncmFtbWVyIG5lZWRzIGRpZmZlcmVudCBraW5kcyBvZiBpbmZvcm1hdGlvbjogZm9yIGV4YW1wbGUsCisid2hpY2ggb2YgdGhlIHNvdXJjZSByb3V0aW5lcyBjYXVzZSB0aGUgbW9zdCBjYWNoZSBtaXNzZXMgPyIuIFRoZSByaXNlIGluIGltcG9ydGFuY2Ugb2YKK3N1Y2ggbWV0cmljcyBpbiByZWNlbnQgeWVhcnMgaGFzIGxlZCBtYW55IENQVSBtYW51ZmFjdHVyZXJzIHRvIHByb3ZpZGUgaGFyZHdhcmUgcGVyZm9ybWFuY2UKK2NvdW50ZXJzIGNhcGFibGUgb2YgbWVhc3VyaW5nIHRoZXNlIGV2ZW50cyBvbiB0aGUgaGFyZHdhcmUgbGV2ZWwuIFR5cGljYWxseSwgdGhlc2UgY291bnRlcnMKK2luY3JlbWVudCBvbmNlIHBlciBlYWNoIGV2ZW50LCBhbmQgZ2VuZXJhdGUgYW4gaW50ZXJydXB0IG9uIHJlYWNoaW5nIHNvbWUgcHJlLWRlZmluZWQKK251bWJlciBvZiBldmVudHMuIE9Qcm9maWxlIGNhbiB1c2UgdGhlc2UgaW50ZXJydXB0cyB0byBnZW5lcmF0ZSBzYW1wbGVzOiB0aGVuLCB0aGUKK3Byb2ZpbGUgcmVzdWx0cyBhcmUgYSBzdGF0aXN0aWNhbCBhcHByb3hpbWF0aW9uIG9mIHdoaWNoIGNvZGUgY2F1c2VkIGhvdyBtYW55IG9mIHRoZQorZ2l2ZW4gZXZlbnQuCis8L3BhcmE+Cis8cGFyYT4KK0NvbnNpZGVyIGEgc2ltcGxpZmllZCBzeXN0ZW0gdGhhdCBvbmx5IGV4ZWN1dGVzIHR3byBmdW5jdGlvbnMgQSBhbmQgQi4gQQordGFrZXMgb25lIGN5Y2xlIHRvIGV4ZWN1dGUsIHdoZXJlYXMgQiB0YWtlcyA5OSBjeWNsZXMuIEltYWdpbmUgd2UgcnVuIGF0CisxMDAgY3ljbGVzIGEgc2Vjb25kLCBhbmQgd2UndmUgc2V0IHRoZSBwZXJmb3JtYW5jZSBjb3VudGVyIHRvIGNyZWF0ZSBhbgoraW50ZXJydXB0IGFmdGVyIGEgc2V0IG51bWJlciBvZiAiZXZlbnRzIiAoaW4gdGhpcyBjYXNlIGFuIGV2ZW50IGlzIG9uZQorY2xvY2sgY3ljbGUpLiBJdCBzaG91bGQgYmUgY2xlYXIgdGhhdCB0aGUgY2hhbmNlcyBvZiB0aGUgaW50ZXJydXB0CitvY2N1cnJpbmcgaW4gZnVuY3Rpb24gQSBpcyAxLzEwMCwgYW5kIDk5LzEwMCBmb3IgZnVuY3Rpb24gQi4gVGh1cywgd2UKK3N0YXRpc3RpY2FsbHkgYXBwcm94aW1hdGUgdGhlIGFjdHVhbCByZWxhdGl2ZSBwZXJmb3JtYW5jZSBmZWF0dXJlcyBvZgordGhlIHR3byBmdW5jdGlvbnMgb3ZlciB0aW1lLiBUaGlzIHNhbWUgYW5hbHlzaXMgd29ya3MgZm9yIG90aGVyIHR5cGVzIG9mCitldmVudHMsIHByb3ZpZGluZyB0aGF0IHRoZSBpbnRlcnJ1cHQgaXMgdGllZCB0byB0aGUgbnVtYmVyIG9mIGV2ZW50cworb2NjdXJyaW5nICh0aGF0IGlzLCBhZnRlciBOIGV2ZW50cywgYW4gaW50ZXJydXB0IGlzIGdlbmVyYXRlZCkuCis8L3BhcmE+Cis8cGFyYT4KK1RoZXJlIGFyZSB0eXBpY2FsbHkgbW9yZSB0aGFuIG9uZSBvZiB0aGVzZSBjb3VudGVycywgc28gaXQncyBwb3NzaWJsZSB0byBzZXQgdXAgcHJvZmlsaW5nCitmb3Igc2V2ZXJhbCBkaWZmZXJlbnQgZXZlbnQgdHlwZXMuIFVzaW5nIHRoZXNlIGNvdW50ZXJzIGdpdmVzIHVzIGEgcG93ZXJmdWwsIGxvdy1vdmVyaGVhZAord2F5IG9mIGdhaW5pbmcgcGVyZm9ybWFuY2UgbWV0cmljcy4gSWYgT1Byb2ZpbGUsIG9yIHRoZSBDUFUsIGRvZXMgbm90IHN1cHBvcnQgcGVyZm9ybWFuY2UKK2NvdW50ZXJzLCB0aGVuIGEgc2ltcGxlciBtZXRob2QgaXMgdXNlZDogdGhlIGtlcm5lbCB0aW1lciBpbnRlcnJ1cHQgZmVlZHMgc2FtcGxlcworaW50byBPUHJvZmlsZSBpdHNlbGYuCis8L3BhcmE+Cis8cGFyYT4KK1RoZSByZXN0IG9mIHRoaXMgZG9jdW1lbnQgY29uY2VybnMgaXRzZWxmIHdpdGggaG93IHdlIGdldCBmcm9tIHJlY2VpdmluZyBzYW1wbGVzIGF0CitpbnRlcnJ1cHQgdGltZSB0byBwcm9kdWNpbmcgdXNlci1yZWFkYWJsZSBwcm9maWxlIGluZm9ybWF0aW9uLgorPC9wYXJhPgorPC9zZWN0MT4KKworPHNlY3QxIGlkPSJjb21wb25lbnRzIj4KKzx0aXRsZT5Db21wb25lbnRzIG9mIHRoZSBPUHJvZmlsZSBzeXN0ZW08L3RpdGxlPgorCis8c2VjdDIgaWQ9ImFyY2gtc3BlY2lmaWMtY29tcG9uZW50cyI+Cis8dGl0bGU+QXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNvbXBvbmVudHM8L3RpdGxlPgorPHBhcmE+CitJZiBPUHJvZmlsZSBzdXBwb3J0cyB0aGUgaGFyZHdhcmUgcGVyZm9ybWFuY2UgY291bnRlcnMgZm91bmQgb24KK2EgcGFydGljdWxhciBhcmNoaXRlY3R1cmUsIGNvZGUgZm9yIG1hbmFnaW5nIHRoZSBkZXRhaWxzIG9mIHNldHRpbmcKK3VwIGFuZCBtYW5hZ2luZyB0aGVzZSBjb3VudGVycyBjYW4gYmUgZm91bmQgaW4gdGhlIGtlcm5lbCBzb3VyY2UKK3RyZWUgaW4gdGhlIHJlbGV2YW50IDxmaWxlbmFtZT5hcmNoLzxlbXBoYXNpcz5hcmNoPC9lbXBoYXNpcz4vb3Byb2ZpbGUvPC9maWxlbmFtZT4KK2RpcmVjdG9yeS4gVGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiB3b3JrcyB2aWEKK2ZpbGxpbmcgaW4gdGhlIG9wcm9maWxlX29wZXJhdGlvbnMgc3RydWN0dXJlIGF0IGluaXQgdGltZS4gVGhpcworcHJvdmlkZXMgYSBzZXQgb2Ygb3BlcmF0aW9ucyBzdWNoIGFzIDxmdW5jdGlvbj5zZXR1cCgpPC9mdW5jdGlvbj4sCis8ZnVuY3Rpb24+c3RhcnQoKTwvZnVuY3Rpb24+LCA8ZnVuY3Rpb24+c3RvcCgpPC9mdW5jdGlvbj4sIGV0Yy4KK3RoYXQgbWFuYWdlIHRoZSBoYXJkd2FyZS1zcGVjaWZpYyBkZXRhaWxzIG9mIGZpZGRsaW5nIHdpdGggdGhlCitwZXJmb3JtYW5jZSBjb3VudGVyIHJlZ2lzdGVycy4KKzwvcGFyYT4KKzxwYXJhPgorVGhlIG90aGVyIGltcG9ydGFudCBmYWNpbGl0eSBhdmFpbGFibGUgdG8gdGhlIGFyY2hpdGVjdHVyZSBjb2RlIGlzCis8ZnVuY3Rpb24+b3Byb2ZpbGVfYWRkX3NhbXBsZSgpPC9mdW5jdGlvbj4uICBUaGlzIGlzIHdoZXJlIGEgcGFydGljdWxhciBzYW1wbGUKK3Rha2VuIGF0IGludGVycnVwdCB0aW1lIGlzIGZlZCBpbnRvIHRoZSBnZW5lcmljIE9Qcm9maWxlIGRyaXZlciBjb2RlLgorPC9wYXJhPgorPC9zZWN0Mj4KKworPHNlY3QyIGlkPSJmaWxlc3lzdGVtIj4KKzx0aXRsZT5vcHJvZmlsZWZzPC90aXRsZT4KKzxwYXJhPgorT1Byb2ZpbGUgaW1wbGVtZW50cyBhIHBzZXVkby1maWxlc3lzdGVtIGtub3duIGFzICJvcHJvZmlsZWZzIiwgbW91bnRlZCBmcm9tCit1c2Vyc3BhY2UgYXQgPGZpbGVuYW1lPi9kZXYvb3Byb2ZpbGU8L2ZpbGVuYW1lPi4gVGhpcyBjb25zaXN0cyBvZiBzbWFsbAorZmlsZXMgZm9yIHJlcG9ydGluZyBhbmQgcmVjZWl2aW5nIGNvbmZpZ3VyYXRpb24gZnJvbSB1c2Vyc3BhY2UsIGFzIHdlbGwKK2FzIHRoZSBhY3R1YWwgY2hhcmFjdGVyIGRldmljZSB0aGF0IHRoZSBPUHJvZmlsZSB1c2Vyc3BhY2UgcmVjZWl2ZXMgc2FtcGxlcworZnJvbS4gQXQgPGZ1bmN0aW9uPnNldHVwKCk8L2Z1bmN0aW9uPiB0aW1lLCB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIG1heQorYWRkIGZ1cnRoZXIgY29uZmlndXJhdGlvbiBmaWxlcyByZWxhdGVkIHRvIHRoZSBkZXRhaWxzIG9mIHRoZSBwZXJmb3JtYW5jZQorY291bnRlcnMuIEZvciBleGFtcGxlLCBvbiB4ODYsIG9uZSBudW1iZXJlZCBkaXJlY3RvcnkgZm9yIGVhY2ggaGFyZHdhcmUKK3BlcmZvcm1hbmNlIGNvdW50ZXIgaXMgYWRkZWQsIHdpdGggZmlsZXMgaW4gZWFjaCBmb3IgdGhlIGV2ZW50IHR5cGUsCityZXNldCB2YWx1ZSwgZXRjLgorPC9wYXJhPgorPHBhcmE+CitUaGUgZmlsZXN5c3RlbSBhbHNvIGNvbnRhaW5zIGEgPGZpbGVuYW1lPnN0YXRzPC9maWxlbmFtZT4gZGlyZWN0b3J5IHdpdGgKK2EgbnVtYmVyIG9mIHVzZWZ1bCBjb3VudGVycyBmb3IgdmFyaW91cyBPUHJvZmlsZSBldmVudHMuCis8L3BhcmE+Cis8L3NlY3QyPgorCis8c2VjdDIgaWQ9ImRyaXZlciI+Cis8dGl0bGU+R2VuZXJpYyBrZXJuZWwgZHJpdmVyPC90aXRsZT4KKzxwYXJhPgorVGhpcyBsaXZlcyBpbiA8ZmlsZW5hbWU+ZHJpdmVycy9vcHJvZmlsZS88L2ZpbGVuYW1lPiwgYW5kIGZvcm1zIHRoZSBjb3JlIG9mCitob3cgT1Byb2ZpbGUgd29ya3MgaW4gdGhlIGtlcm5lbC4gSXRzIGpvYiBpcyB0byB0YWtlIHNhbXBsZXMgZGVsaXZlcmVkCitmcm9tIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29kZSAodmlhIDxmdW5jdGlvbj5vcHJvZmlsZV9hZGRfc2FtcGxlKCk8L2Z1bmN0aW9uPiksCithbmQgYnVmZmVyIHRoaXMgZGF0YSwgaW4gYSB0cmFuc2Zvcm1lZCBmb3JtIGFzIGRlc2NyaWJlZCBsYXRlciwgdW50aWwgcmVsZWFzaW5nCit0aGUgZGF0YSB0byB0aGUgdXNlcnNwYWNlIGRhZW1vbiB2aWEgdGhlIDxmaWxlbmFtZT4vZGV2L29wcm9maWxlL2J1ZmZlcjwvZmlsZW5hbWU+CitjaGFyYWN0ZXIgZGV2aWNlLgorPC9wYXJhPgorPC9zZWN0Mj4KKworPHNlY3QyIGlkPSJkYWVtb24iPgorPHRpdGxlPlRoZSBPUHJvZmlsZSBkYWVtb248L3RpdGxlPgorPHBhcmE+CitUaGUgT1Byb2ZpbGUgdXNlcnNwYWNlIGRhZW1vbidzIGpvYiBpcyB0byB0YWtlIHRoZSByYXcgZGF0YSBwcm92aWRlZCBieSB0aGUKK2tlcm5lbCBhbmQgd3JpdGUgaXQgdG8gdGhlIGRpc2suIEl0IHRha2VzIHRoZSBzaW5nbGUgZGF0YSBzdHJlYW0gZnJvbSB0aGUKK2tlcm5lbCBhbmQgbG9ncyBzYW1wbGUgZGF0YSBhZ2FpbnN0IGEgbnVtYmVyIG9mIHNhbXBsZSBmaWxlcyAoZm91bmQgaW4KKzxmaWxlbmFtZT4kU0VTU0lPTl9ESVIvc2FtcGxlcy9jdXJyZW50LzwvZmlsZW5hbWU+LCBieSBkZWZhdWx0IGxvY2F0ZWQgYXQgCis8ZmlsZW5hbWU+L3Zhci9saWIvb3Byb2ZpbGUvc2FtcGxlcy9jdXJyZW50LzwvZmlsZW5hbWU+LiBGb3IgdGhlIGJlbmVmaXQKK29mIHRoZSAic2VwYXJhdGUiIGZ1bmN0aW9uYWxpdHksIHRoZSBuYW1lcy9wYXRocyBvZiB0aGVzZSBzYW1wbGUgZmlsZXMKK2FyZSBtYW5nbGVkIHRvIHJlZmxlY3Qgd2hlcmUgdGhlIHNhbXBsZXMgd2VyZSBmcm9tOiB0aGlzIGNhbiBpbmNsdWRlCit0aHJlYWQgSURzLCB0aGUgYmluYXJ5IGZpbGUgcGF0aCwgdGhlIGV2ZW50IHR5cGUgdXNlZCwgYW5kIG1vcmUuCis8L3BhcmE+Cis8cGFyYT4KK0FmdGVyIHRoaXMgZmluYWwgc3RlcCBmcm9tIGludGVycnVwdCB0byBkaXNrIGZpbGUsIHRoZSBkYXRhIGlzIG5vdworcGVyc2lzdGVudCAodGhhdCBpcywgY2hhbmdlcyBpbiB0aGUgcnVubmluZyBvZiB0aGUgc3lzdGVtIGRvIG5vdCBpbnZhbGlkYXRlCitzdG9yZWQgZGF0YSkuIFNvIHRoZSBwb3N0LXByb2ZpbGluZyB0b29scyBjYW4gcnVuIG9uIHRoaXMgZGF0YSBhdCBhbnkKK3RpbWUgKGFzc3VtaW5nIHRoZSBvcmlnaW5hbCBiaW5hcnkgZmlsZXMgYXJlIHN0aWxsIGF2YWlsYWJsZSBhbmQgdW5jaGFuZ2VkLAorbmF0dXJhbGx5KS4KKzwvcGFyYT4KKzwvc2VjdDI+CisKKzxzZWN0MiBpZD0icG9zdC1wcm9maWxpbmciPgorPHRpdGxlPlBvc3QtcHJvZmlsaW5nIHRvb2xzPC90aXRsZT4KK1NvIGZhciwgd2UndmUgY29sbGVjdGVkIGRhdGEsIGJ1dCB3ZSd2ZSB5ZXQgdG8gcHJlc2VudCBpdCBpbiBhIHVzZWZ1bCBmb3JtCit0byB0aGUgdXNlci4gVGhpcyBpcyB0aGUgam9iIG9mIHRoZSBwb3N0LXByb2ZpbGluZyB0b29scy4gSW4gZ2VuZXJhbCBmb3JtLAordGhleSBjb2xsYXRlIGEgc3Vic2V0IG9mIHRoZSBhdmFpbGFibGUgc2FtcGxlIGZpbGVzLCBsb2FkIGFuZCBwcm9jZXNzIGVhY2ggb25lCitjb3JyZWxhdGVkIGFnYWluc3QgdGhlIHJlbGV2YW50IGJpbmFyeSBmaWxlLCBhbmQgZmluYWxseSBwcm9kdWNlIHVzZXItcmVhZGFibGUKK2luZm9ybWF0aW9uLgorPC9zZWN0Mj4KKworPC9zZWN0MT4KKworPC9jaGFwdGVyPgorCis8Y2hhcHRlciBpZD0icGVyZm9ybWFuY2UtY291bnRlcnMiPgorPHRpdGxlPlBlcmZvcm1hbmNlIGNvdW50ZXIgbWFuYWdlbWVudDwvdGl0bGU+CisKKzxzZWN0MSBpZCA9InBlcmZvcm1hbmNlLWNvdW50ZXJzLXVpIj4KKzx0aXRsZT5Qcm92aWRpbmcgYSB1c2VyIGludGVyZmFjZTwvdGl0bGU+CisKKzxwYXJhPgorVGhlIHBlcmZvcm1hbmNlIGNvdW50ZXIgcmVnaXN0ZXJzIG5lZWQgcHJvZ3JhbW1pbmcgaW4gb3JkZXIgdG8gc2V0IHRoZQordHlwZSBvZiBldmVudCB0byBjb3VudCwgZXRjLiBPUHJvZmlsZSB1c2VzIGEgc3RhbmRhcmQgbW9kZWwgYWNyb3NzIGFsbAorQ1BVcyBmb3IgZGVmaW5pbmcgdGhlc2UgZXZlbnRzIGFzIGZvbGxvd3MgOgorPC9wYXJhPgorPGluZm9ybWFsdGFibGUgZnJhbWU9ImFsbCI+Cis8dGdyb3VwIGNvbHM9JzInPiAKKzx0Ym9keT4KKzxyb3c+PGVudHJ5PjxvcHRpb24+ZXZlbnQ8L29wdGlvbj48L2VudHJ5PjxlbnRyeT5UaGUgZXZlbnQgdHlwZSBlLmcuIERBVEFfTUVNX1JFRlM8L2VudHJ5Pjwvcm93PgorPHJvdz48ZW50cnk+PG9wdGlvbj51bml0IG1hc2s8L29wdGlvbj48L2VudHJ5PjxlbnRyeT5UaGUgc3ViLWV2ZW50cyB0byBjb3VudCAobW9yZSBkZXRhaWxlZCBzcGVjaWZpY2F0aW9uKTwvZW50cnk+PC9yb3c+Cis8cm93PjxlbnRyeT48b3B0aW9uPmNvdW50ZXI8L29wdGlvbj48L2VudHJ5PjxlbnRyeT5UaGUgaGFyZHdhcmUgY291bnRlcihzKSB0aGF0IGNhbiBjb3VudCB0aGlzIGV2ZW50PC9lbnRyeT48L3Jvdz4KKzxyb3c+PGVudHJ5PjxvcHRpb24+Y291bnQ8L29wdGlvbj48L2VudHJ5PjxlbnRyeT5UaGUgcmVzZXQgdmFsdWUgKGhvdyBtYW55IGV2ZW50cyBiZWZvcmUgYW4gaW50ZXJydXB0KTwvZW50cnk+PC9yb3c+Cis8cm93PjxlbnRyeT48b3B0aW9uPmtlcm5lbDwvb3B0aW9uPjwvZW50cnk+PGVudHJ5PldoZXRoZXIgdGhlIGNvdW50ZXIgc2hvdWxkIGluY3JlbWVudCB3aGVuIGluIGtlcm5lbCBzcGFjZTwvZW50cnk+PC9yb3c+Cis8cm93PjxlbnRyeT48b3B0aW9uPnVzZXI8L29wdGlvbj48L2VudHJ5PjxlbnRyeT5XaGV0aGVyIHRoZSBjb3VudGVyIHNob3VsZCBpbmNyZW1lbnQgd2hlbiBpbiB1c2VyIHNwYWNlPC9lbnRyeT48L3Jvdz4KKzwvdGJvZHk+Cis8L3Rncm91cD4KKzwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPgorVGhlIHRlcm0gInVuaXQgbWFzayIgaXMgYm9ycm93ZWQgZnJvbSB0aGUgSW50ZWwgYXJjaGl0ZWN0dXJlcywgYW5kIGNhbgorZnVydGhlciBzcGVjaWZ5IGV4YWN0bHkgd2hlbiBhIGNvdW50ZXIgaXMgaW5jcmVtZW50ZWQgKGZvciBleGFtcGxlLAorY2FjaGUtcmVsYXRlZCBldmVudHMgY2FuIGJlIHJlc3RyaWN0ZWQgdG8gcGFydGljdWxhciBzdGF0ZSB0cmFuc2l0aW9ucworb2YgdGhlIGNhY2hlIGxpbmVzKS4KKzwvcGFyYT4KKzxwYXJhPgorQWxsIG9mIHRoZSBhdmFpbGFibGUgaGFyZHdhcmUgZXZlbnRzIGFuZCB0aGVpciBkZXRhaWxzIGFyZSBzcGVjaWZpZWQgaW4KK3RoZSB0ZXh0dWFsIGZpbGVzIGluIHRoZSA8ZmlsZW5hbWU+ZXZlbnRzPC9maWxlbmFtZT4gZGlyZWN0b3J5LiBUaGUKK3N5bnRheCBvZiB0aGVzZSBmaWxlcyBzaG91bGQgYmUgZmFpcmx5IG9idmlvdXMuIFRoZSB1c2VyIHNwZWNpZmllcyB0aGUKK25hbWVzIGFuZCBjb25maWd1cmF0aW9uIGRldGFpbHMgb2YgdGhlIGNob3NlbiBjb3VudGVycyB2aWEKKzxjb21tYW5kPm9wY29udHJvbDwvY29tbWFuZD4uIFRoZXNlIGFyZSB0aGVuIHdyaXR0ZW4gdG8gdGhlIGtlcm5lbAorbW9kdWxlIChpbiBudW1lcmljYWwgZm9ybSkgdmlhIDxmaWxlbmFtZT4vZGV2L29wcm9maWxlL04vPC9maWxlbmFtZT4KK3doZXJlIE4gaXMgdGhlIHBoeXNpY2FsIGhhcmR3YXJlIGNvdW50ZXIgKHNvbWUgZXZlbnRzIGNhbiBvbmx5IGJlIHVzZWQKK29uIHNwZWNpZmljIGNvdW50ZXJzOyBPUHJvZmlsZSBoaWRlcyB0aGVzZSBkZXRhaWxzIGZyb20gdGhlIHVzZXIgd2hlbgorcG9zc2libGUpLiBPbiBJQTY0LCB0aGUgcGVyZm1vbi1iYXNlZCBpbnRlcmZhY2UgYmVoYXZlcyBzb21ld2hhdAorZGlmZmVyZW50bHksIGFzIGRlc2NyaWJlZCBsYXRlci4KKzwvcGFyYT4KKworPC9zZWN0MT4KKworPHNlY3QxIGlkPSJwZXJmb3JtYW5jZS1jb3VudGVycy1wcm9ncmFtbWluZyI+Cis8dGl0bGU+UHJvZ3JhbW1pbmcgdGhlIHBlcmZvcm1hbmNlIGNvdW50ZXIgcmVnaXN0ZXJzPC90aXRsZT4KKworPHBhcmE+CitXZSBoYXZlIGRlc2NyaWJlZCBob3cgdGhlIHVzZXIgaW50ZXJmYWNlIGZpbGxzIGluIHRoZSBkZXNpcmVkCitjb25maWd1cmF0aW9uIG9mIHRoZSBjb3VudGVycyBhbmQgdHJhbnNtaXRzIHRoZSBpbmZvcm1hdGlvbiB0byB0aGUKK2tlcm5lbC4gSXQgaXMgdGhlIGpvYiBvZiB0aGUgPGZ1bmN0aW9uPi0mZ3Q7c2V0dXAoKTwvZnVuY3Rpb24+IG1ldGhvZAordG8gYWN0dWFsbHkgcHJvZ3JhbSB0aGUgcGVyZm9ybWFuY2UgY291bnRlciByZWdpc3RlcnMuIENsZWFybHksIHRoZQorZGV0YWlscyBvZiBob3cgdGhpcyBpcyBkb25lIGlzIGFyY2hpdGVjdHVyZS1zcGVjaWZpYzsgaXQgaXMgYWxzbworbW9kZWwtc3BlY2lmaWMgb24gbWFueSBhcmNoaXRlY3R1cmVzLiBGb3IgZXhhbXBsZSwgaTM4NiBwcm92aWRlcyBtZXRob2RzCitmb3IgZWFjaCBtb2RlbCB0eXBlIHRoYXQgcHJvZ3JhbXMgdGhlIGNvdW50ZXIgcmVnaXN0ZXJzIGNvcnJlY3RseQorKHNlZSB0aGUgPGZpbGVuYW1lPm9wX21vZGVsXyo8L2ZpbGVuYW1lPiBmaWxlcyBpbgorPGZpbGVuYW1lPmFyY2gvaTM4Ni9vcHJvZmlsZTwvZmlsZW5hbWU+IGZvciB0aGUgZGV0YWlscykuIFRoZSBtZXRob2QKK3JlYWRzIHRoZSB2YWx1ZXMgc3RvcmVkIGluIHRoZSB2aXJ0dWFsIG9wcm9maWxlZnMgZmlsZXMgYW5kIHByb2dyYW1zCit0aGUgcmVnaXN0ZXJzIGFwcHJvcHJpYXRlbHksIHJlYWR5IGZvciBzdGFydGluZyB0aGUgYWN0dWFsIHByb2ZpbGluZworc2Vzc2lvbi4KKzwvcGFyYT4KKzxwYXJhPgorVGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBkcml2ZXJzIG1ha2Ugc3VyZSB0byBzYXZlIHRoZSBvbGQgcmVnaXN0ZXIKK3NldHRpbmdzIGJlZm9yZSBkb2luZyBPUHJvZmlsZSBzZXR1cC4gVGhleSBhcmUgcmVzdG9yZWQgd2hlbiBPUHJvZmlsZQorc2h1dHMgZG93bi4gVGhpcyBpcyB1c2VmdWwsIGZvciBleGFtcGxlLCBvbiBpMzg2LCB3aGVyZSB0aGUgTk1JIHdhdGNoZG9nCit1c2VzIHRoZSBzYW1lIHBlcmZvcm1hbmNlIGNvdW50ZXIgcmVnaXN0ZXJzIGFzIE9Qcm9maWxlOyB0aGV5IGNhbm5vdAorcnVuIGNvbmN1cnJlbnRseSwgYnV0IE9Qcm9maWxlIG1ha2VzIHN1cmUgdG8gcmVzdG9yZSB0aGUgc2V0dXAgaXQgZm91bmQKK2JlZm9yZSBpdCB3YXMgcnVubmluZy4KKzwvcGFyYT4KKzxwYXJhPgorSW4gYWRkaXRpb24gdG8gcHJvZ3JhbW1pbmcgdGhlIGNvdW50ZXIgcmVnaXN0ZXJzIHRoZW1zZWx2ZXMsIG90aGVyIHNldHVwCitpcyBvZnRlbiBuZWNlc3NhcnkuIEZvciBleGFtcGxlLCBvbiBpMzg2LCB0aGUgbG9jYWwgQVBJQyBuZWVkcworcHJvZ3JhbW1pbmcgaW4gb3JkZXIgdG8gbWFrZSB0aGUgY291bnRlcidzIG92ZXJmbG93IGludGVycnVwdCBhcHBlYXIgYXMKK2FuIE5NSSAobm9uLW1hc2thYmxlIGludGVycnVwdCkuIFRoaXMgYWxsb3dzIHNhbXBsaW5nIChhbmQgdGhlcmVmb3JlCitwcm9maWxpbmcpIG9mIHJlZ2lvbnMgd2hlcmUgIm5vcm1hbCIgaW50ZXJydXB0cyBhcmUgbWFza2VkLCBlbmFibGluZworbW9yZSByZWxpYWJsZSBwcm9maWxlcy4KKzwvcGFyYT4KKworPHNlY3QyIGlkPSJwZXJmb3JtYW5jZS1jb3VudGVycy1zdGFydCI+Cis8dGl0bGU+U3RhcnRpbmcgYW5kIHN0b3BwaW5nIHRoZSBjb3VudGVyczwvdGl0bGU+Cis8cGFyYT4KK0luaXRpYXRpbmcgYSBwcm9maWxpbmcgc2Vzc2lvbiBpcyBkb25lIHZpYSB3cml0aW5nIGFuIEFTQ0lJICcxJwordG8gdGhlIGZpbGUgPGZpbGVuYW1lPi9kZXYvb3Byb2ZpbGUvZW5hYmxlPC9maWxlbmFtZT4uIFRoaXMgc2V0cyB1cCB0aGUKK2NvcmUsIGFuZCBjYWxscyBpbnRvIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgZHJpdmVyIHRvIGFjdHVhbGx5CitlbmFibGUgZWFjaCBjb25maWd1cmVkIGNvdW50ZXIuIEFnYWluLCB0aGUgZGV0YWlscyBvZiBob3cgdGhpcyBpcworZG9uZSBpcyBtb2RlbC1zcGVjaWZpYyAoZm9yIGV4YW1wbGUsIHRoZSBBdGhsb24gbW9kZWxzIGNhbiBkaXNhYmxlCitvciBlbmFibGUgb24gYSBwZXItY291bnRlciBiYXNpcywgdW5saWtlIHRoZSBQUHJvIG1vZGVscykuCis8L3BhcmE+Cis8L3NlY3QyPgorCis8c2VjdDI+Cis8dGl0bGU+SUE2NCBhbmQgcGVyZm1vbjwvdGl0bGU+Cis8cGFyYT4KK1RoZSBJQTY0IGFyY2hpdGVjdHVyZSBwcm92aWRlcyBhIGRpZmZlcmVudCBpbnRlcmZhY2UgZnJvbSB0aGUgb3RoZXIKK2FyY2hpdGVjdHVyZXMsIHVzaW5nIHRoZSBleGlzdGluZyBwZXJmbW9uIGRyaXZlci4gUmVnaXN0ZXIgcHJvZ3JhbW1pbmcKK2lzIGhhbmRsZWQgZW50aXJlbHkgaW4gdXNlci1zcGFjZSAoc2VlCis8ZmlsZW5hbWU+ZGFlbW9uL29wZF9wZXJmbW9uLmM8L2ZpbGVuYW1lPiBmb3IgdGhlIGRldGFpbHMpLiBBIHByb2Nlc3MKK2lzIGZvcmtlZCBmb3IgZWFjaCBDUFUsIHdoaWNoIGNyZWF0ZXMgYSBwZXJmbW9uIGNvbnRleHQgYW5kIHNldHMgdGhlCitjb3VudGVyIHJlZ2lzdGVycyBhcHByb3ByaWF0ZWx5IHZpYSB0aGUKKzxmdW5jdGlvbj5zeXNfcGVyZm1vbmN0bDwvZnVuY3Rpb24+IGludGVyZmFjZS4gSW4gYWRkaXRpb24sIHRoZSBhY3R1YWwKK2luaXRpYXRpb24gYW5kIHRlcm1pbmF0aW9uIG9mIHRoZSBwcm9maWxpbmcgc2Vzc2lvbiBpcyBoYW5kbGVkIHZpYSB0aGUKK3NhbWUgaW50ZXJmYWNlIHVzaW5nIDxjb25zdGFudD5QRk1fU1RBUlQ8L2NvbnN0YW50PiBhbmQKKzxjb25zdGFudD5QRk1fU1RPUDwvY29uc3RhbnQ+LiBPbiBJQTY0LCB0aGVuLCB0aGVyZSBhcmUgbm8gb3Byb2ZpbGVmcworZmlsZXMgZm9yIHRoZSBwZXJmb3JtYW5jZSBjb3VudGVycywgYXMgdGhlIGtlcm5lbCBkcml2ZXIgZG9lcyBub3QKK3Byb2dyYW0gdGhlIHJlZ2lzdGVycyBpdHNlbGYuCis8L3BhcmE+Cis8cGFyYT4KK0luc3RlYWQsIHRoZSBwZXJmbW9uIGRyaXZlciBmb3IgT1Byb2ZpbGUgc2ltcGx5IHJlZ2lzdGVycyB3aXRoIHRoZQorT1Byb2ZpbGUgY29yZSB3aXRoIGFuIE9Qcm9maWxlLXNwZWNpZmljIFVVSUQuIER1cmluZyBhIHByb2ZpbGluZworc2Vzc2lvbiwgdGhlIHBlcmZtb24gY29yZSBjYWxscyBpbnRvIHRoZSBPUHJvZmlsZSBwZXJmbW9uIGRyaXZlciBhbmQKK3NhbXBsZXMgYXJlIHJlZ2lzdGVyZWQgd2l0aCB0aGUgT1Byb2ZpbGUgY29yZSBpdHNlbGYgYXMgdXN1YWwgKHdpdGgKKzxmdW5jdGlvbj5vcHJvZmlsZV9hZGRfc2FtcGxlKCk8L2Z1bmN0aW9uPikuCis8L3BhcmE+Cis8L3NlY3QyPgorCis8L3NlY3QxPgorCis8L2NoYXB0ZXI+CisKKzxjaGFwdGVyIGlkPSJjb2xsZWN0aW5nLXNhbXBsZXMiPgorPHRpdGxlPkNvbGxlY3RpbmcgYW5kIHByb2Nlc3Npbmcgc2FtcGxlczwvdGl0bGU+CisKKzxzZWN0MSBpZD0icmVjZWl2aW5nLWludGVycnVwdHMiPgorPHRpdGxlPlJlY2VpdmluZyBpbnRlcnJ1cHRzPC90aXRsZT4KKzxwYXJhPgorTmF0dXJhbGx5LCBob3cgdGhlIG92ZXJmbG93IGludGVycnVwdHMgYXJlIHJlY2VpdmVkIGlzIHNwZWNpZmljCit0byB0aGUgaGFyZHdhcmUgYXJjaGl0ZWN0dXJlLCB1bmxlc3Mgd2UgYXJlIGluICJ0aW1lciIgbW9kZSwgd2hlcmUgdGhlCitsb2dnaW5nIHJvdXRpbmUgaXMgY2FsbGVkIGRpcmVjdGx5IGZyb20gdGhlIHN0YW5kYXJkIGtlcm5lbCB0aW1lcgoraW50ZXJydXB0IGhhbmRsZXIuCis8L3BhcmE+Cis8cGFyYT4KK09uIHRoZSBpMzg2IGFyY2hpdGVjdHVyZSwgdGhlIGxvY2FsIEFQSUMgaXMgcHJvZ3JhbW1lZCBzdWNoIHRoYXQgd2hlbiBhCitjb3VudGVyIG92ZXJmbG93cyAodGhhdCBpcywgaXQgcmVjZWl2ZXMgYW4gZXZlbnQgdGhhdCBjYXVzZXMgYW4gaW50ZWdlcgorb3ZlcmZsb3cgb2YgdGhlIHJlZ2lzdGVyIHZhbHVlIHRvIHplcm8pLCBhbiBOTUkgaXMgZ2VuZXJhdGVkLiBUaGlzIGNhbGxzCitpbnRvIHRoZSBnZW5lcmFsIGhhbmRsZXIgPGZ1bmN0aW9uPmRvX25taSgpPC9mdW5jdGlvbj47IGJlY2F1c2UgT1Byb2ZpbGUKK2hhcyByZWdpc3RlcmVkIGl0c2VsZiBhcyBjYXBhYmxlIG9mIGhhbmRsaW5nIE5NSSBpbnRlcnJ1cHRzLCB0aGlzIHdpbGwKK2NhbGwgaW50byB0aGUgT1Byb2ZpbGUgZHJpdmVyIGNvZGUgaW4KKzxmaWxlbmFtZT5hcmNoL2kzODYvb3Byb2ZpbGU8L2ZpbGVuYW1lPi4gSGVyZSwgdGhlIHNhdmVkIFBDIHZhbHVlICh0aGUKK0NQVSBzYXZlcyB0aGUgcmVnaXN0ZXIgc2V0IGF0IHRoZSB0aW1lIG9mIGludGVycnVwdCBvbiB0aGUgc3RhY2sKK2F2YWlsYWJsZSBmb3IgaW5zcGVjdGlvbikgaXMgZXh0cmFjdGVkLCBhbmQgdGhlIGNvdW50ZXJzIGFyZSBleGFtaW5lZCB0bworZmluZCBvdXQgd2hpY2ggb25lIGdlbmVyYXRlZCB0aGUgaW50ZXJydXB0LiBBbHNvIGRldGVybWluZWQgaXMgd2hldGhlcgordGhlIHN5c3RlbSB3YXMgaW5zaWRlIGtlcm5lbCBvciB1c2VyIHNwYWNlIGF0IHRoZSB0aW1lIG9mIHRoZSBpbnRlcnJ1cHQuCitUaGVzZSB0aHJlZSBwaWVjZXMgb2YgaW5mb3JtYXRpb24gYXJlIHRoZW4gZm9yd2FyZGVkIG9udG8gdGhlIE9Qcm9maWxlCitjb3JlIHZpYSA8ZnVuY3Rpb24+b3Byb2ZpbGVfYWRkX3NhbXBsZSgpPC9mdW5jdGlvbj4uIEZpbmFsbHksIHRoZQorY291bnRlciB2YWx1ZXMgYXJlIHJlc2V0IHRvIHRoZSBjaG9zZW4gY291bnQgdmFsdWUsIHRvIGVuc3VyZSBhbm90aGVyCitpbnRlcnJ1cHQgaGFwcGVucyBhZnRlciBhbm90aGVyIE4gZXZlbnRzIGhhdmUgb2NjdXJyZWQuIE90aGVyCithcmNoaXRlY3R1cmVzIGJlaGF2ZSBpbiBhIHNpbWlsYXIgbWFubmVyLgorPC9wYXJhPgorPC9zZWN0MT4KKyAKKzxzZWN0MSBpZD0iY29yZS1zdHJ1Y3R1cmUiPgorPHRpdGxlPkNvcmUgZGF0YSBzdHJ1Y3R1cmVzPC90aXRsZT4KKzxwYXJhPgorQmVmb3JlIGNvbnNpZGVyaW5nIHdoYXQgaGFwcGVucyB3aGVuIHdlIGxvZyBhIHNhbXBsZSwgd2Ugc2hhbGwgZGlncmVzcworZm9yIGEgbW9tZW50IGFuZCBsb29rIGF0IHRoZSBnZW5lcmFsIHN0cnVjdHVyZSBvZiB0aGUgZGF0YSBjb2xsZWN0aW9uCitzeXN0ZW0uCis8L3BhcmE+Cis8cGFyYT4KK09Qcm9maWxlIG1haW50YWlucyBhIHNtYWxsIGJ1ZmZlciBmb3Igc3RvcmluZyB0aGUgbG9nZ2VkIHNhbXBsZXMgZm9yCitlYWNoIENQVSBvbiB0aGUgc3lzdGVtLiBPbmx5IHRoaXMgYnVmZmVyIGlzIGFsdGVyZWQgd2hlbiB3ZSBhY3R1YWxseSBsb2cKK2Egc2FtcGxlIChyZW1lbWJlciwgd2UgbWF5IHN0aWxsIGJlIGluIGFuIE5NSSBjb250ZXh0LCBzbyBubyBsb2NraW5nIGlzCitwb3NzaWJsZSkuIFRoZSBidWZmZXIgaXMgbWFuYWdlZCBieSBhIHR3by1oYW5kZWQgc3lzdGVtOyB0aGUgImhlYWQiCitpdGVyYXRvciBkaWN0YXRlcyB3aGVyZSB0aGUgbmV4dCBzYW1wbGUgZGF0YSBzaG91bGQgYmUgcGxhY2VkIGluIHRoZQorYnVmZmVyLiBPZiBjb3Vyc2UsIG92ZXJmbG93IG9mIHRoZSBidWZmZXIgaXMgcG9zc2libGUsIGluIHdoaWNoIGNhc2UKK3RoZSBzYW1wbGUgaXMgZGlzY2FyZGVkLgorPC9wYXJhPgorPHBhcmE+CitJdCBpcyBjcml0aWNhbCB0byByZW1lbWJlciB0aGF0IGF0IHRoaXMgcG9pbnQsIHRoZSBQQyB2YWx1ZSBpcyBhbgorYWJzb2x1dGUgdmFsdWUsIGFuZCBpcyB0aGVyZWZvcmUgb25seSBtZWFuaW5nZnVsIGluIHRoZSBjb250ZXh0IG9mIHdoaWNoCit0YXNrIGl0IHdhcyBsb2dnZWQgYWdhaW5zdC4gVGh1cywgdGhlc2UgcGVyLUNQVSBidWZmZXJzIGFsc28gbWFpbnRhaW4KK2RldGFpbHMgb2Ygd2hpY2ggdGFzayBlYWNoIGxvZ2dlZCBzYW1wbGUgaXMgZm9yLCBhcyBkZXNjcmliZWQgaW4gdGhlCituZXh0IHNlY3Rpb24uIEluIGFkZGl0aW9uLCB3ZSBzdG9yZSB3aGV0aGVyIHRoZSBzYW1wbGUgd2FzIGluIGtlcm5lbAorc3BhY2Ugb3IgdXNlciBzcGFjZSAob24gc29tZSBhcmNoaXRlY3R1cmVzIGFuZCBjb25maWd1cmF0aW9ucywgdGhlIGFkZHJlc3MKK3NwYWNlIGlzIG5vdCBzdWItZGl2aWRlZCBuZWF0bHkgYXQgYSBzcGVjaWZpYyBQQyB2YWx1ZSwgc28gd2UgbXVzdCBzdG9yZQordGhpcyBpbmZvcm1hdGlvbikuCis8L3BhcmE+Cis8cGFyYT4KK0FzIHdlbGwgYXMgdGhlc2Ugc21hbGwgcGVyLUNQVSBidWZmZXJzLCB3ZSBoYXZlIGEgY29uc2lkZXJhYmx5IGxhcmdlcgorc2luZ2xlIGJ1ZmZlci4gVGhpcyBob2xkcyB0aGUgZGF0YSB0aGF0IGlzIGV2ZW50dWFsbHkgY29waWVkIG91dCBpbnRvCit0aGUgT1Byb2ZpbGUgZGFlbW9uLiBPbiBjZXJ0YWluIHN5c3RlbSBldmVudHMsIHRoZSBwZXItQ1BVIGJ1ZmZlcnMgYXJlCitwcm9jZXNzZWQgYW5kIGVudGVyZWQgKGluIG11dGF0ZWQgZm9ybSkgaW50byB0aGUgbWFpbiBidWZmZXIsIGtub3duIGluCit0aGUgc291cmNlIGFzIHRoZSAiZXZlbnQgYnVmZmVyIi4gVGhlICJ0YWlsIiBpdGVyYXRvciBpbmRpY2F0ZXMgdGhlCitwb2ludCBmcm9tIHdoaWNoIHRoZSBDUFUgbWF5IGJlIHJlYWQsIHVwIHRvIHRoZSBwb3NpdGlvbiBvZiB0aGUgImhlYWQiCitpdGVyYXRvci4gVGhpcyBwcm92aWRlcyBhbiBlbnRpcmVseSBsb2NrLWZyZWUgbWV0aG9kIGZvciBleHRyYWN0aW5nIGRhdGEKK2Zyb20gdGhlIENQVSBidWZmZXJzLiBUaGlzIHByb2Nlc3MgaXMgZGVzY3JpYmVkIGluIGRldGFpbCBsYXRlciBpbiB0aGlzIGNoYXB0ZXIuCis8L3BhcmE+Cis8ZmlndXJlPjx0aXRsZT5UaGUgT1Byb2ZpbGUgYnVmZmVyczwvdGl0bGU+Cis8Z3JhcGhpYyBmaWxlcmVmPSJidWZmZXJzLnBuZyIgLz4KKzwvZmlndXJlPgorPC9zZWN0MT4KKworPHNlY3QxIGlkPSJsb2dnaW5nLXNhbXBsZSI+Cis8dGl0bGU+TG9nZ2luZyBhIHNhbXBsZTwvdGl0bGU+Cis8cGFyYT4KK0FzIG1lbnRpb25lZCwgdGhlIHNhbXBsZSBpcyBsb2dnZWQgaW50byB0aGUgYnVmZmVyIHNwZWNpZmljIHRvIHRoZQorY3VycmVudCBDUFUuIFRoZSBDUFUgYnVmZmVyIGlzIGEgc2ltcGxlIGFycmF5IG9mIHBhaXJzIG9mIHVuc2lnbmVkIGxvbmcKK3ZhbHVlczsgZm9yIGEgc2FtcGxlLCB0aGV5IGhvbGQgdGhlIFBDIHZhbHVlIGFuZCB0aGUgY291bnRlciBmb3IgdGhlCitzYW1wbGUuIChUaGUgY291bnRlciB2YWx1ZSBpcyBsYXRlciB1c2VkIHRvIHRyYW5zbGF0ZSBiYWNrIGludG8gdGhlIHJlbGV2YW50CitldmVudCB0eXBlIHRoZSBjb3VudGVyIHdhcyBwcm9ncmFtbWVkIHRvKS4KKzwvcGFyYT4KKzxwYXJhPgorSW4gYWRkaXRpb24gdG8gbG9nZ2luZyB0aGUgc2FtcGxlIGl0c2VsZiwgd2UgYWxzbyBsb2cgdGFzayBzd2l0Y2hlcy4KK1RoaXMgaXMgc2ltcGx5IGRvbmUgYnkgc3RvcmluZyB0aGUgYWRkcmVzcyBvZiB0aGUgbGFzdCB0YXNrIHRvIGxvZyBhCitzYW1wbGUgb24gdGhhdCBDUFUgaW4gYSBkYXRhIHN0cnVjdHVyZSwgYW5kIHdyaXRpbmcgYSB0YXNrIHN3aXRjaCBlbnRyeQoraW50byB0aGUgYnVmZmVyIGlmIHRoZSBuZXcgdmFsdWUgb2YgPGZ1bmN0aW9uPmN1cnJlbnQoKTwvZnVuY3Rpb24+IGhhcworY2hhbmdlZC4gTm90ZSB0aGF0IGxhdGVyIHdlIHdpbGwgZGlyZWN0bHkgZGUtcmVmZXJlbmNlIHRoaXMgcG9pbnRlcjsKK3RoaXMgaW1wb3NlcyBjZXJ0YWluIHJlc3RyaWN0aW9ucyBvbiB3aGVuIGFuZCBob3cgdGhlIENQVSBidWZmZXJzIG5lZWQKK3RvIGJlIHByb2Nlc3NlZC4KKzwvcGFyYT4KKzxwYXJhPgorRmluYWxseSwgYXMgbWVudGlvbmVkLCB3ZSBsb2cgd2hldGhlciB3ZSBoYXZlIGNoYW5nZWQgYmV0d2VlbiBrZXJuZWwgYW5kCit1c2Vyc3BhY2UgdXNpbmcgYSBzaW1pbGFyIG1ldGhvZC4gQm90aCBvZiB0aGVzZSB2YXJpYWJsZXMKKyg8dmFybmFtZT5sYXN0X3Rhc2s8L3Zhcm5hbWU+IGFuZCA8dmFybmFtZT5sYXN0X2lzX2tlcm5lbDwvdmFybmFtZT4pIGFyZQorcmVzZXQgd2hlbiB0aGUgQ1BVIGJ1ZmZlciBpcyByZWFkLgorPC9wYXJhPgorPC9zZWN0MT4KKworPHNlY3QxIGlkPSJsb2dnaW5nLXN0YWNrIj4KKzx0aXRsZT5Mb2dnaW5nIHN0YWNrIHRyYWNlczwvdGl0bGU+Cis8cGFyYT4KK09Qcm9maWxlIGNhbiBhbHNvIHByb3ZpZGUgc3RhdGlzdGljYWwgc2FtcGxlcyBvZiBjYWxsIGNoYWlucyAob24geDg2KS4gVG8KK2RvIHRoaXMsIGF0IHNhbXBsZSB0aW1lLCB0aGUgZnJhbWUgcG9pbnRlciBjaGFpbiBpcyB0cmF2ZXJzZWQsIHJlY29yZGluZwordGhlIHJldHVybiBhZGRyZXNzIGZvciBlYWNoIHN0YWNrIGZyYW1lLiBUaGlzIHdpbGwgb25seSB3b3JrIGlmIHRoZSBjb2RlCit3YXMgY29tcGlsZWQgd2l0aCBmcmFtZSBwb2ludGVycywgYnV0IHdlJ3JlIGNhcmVmdWwgdG8gYWJvcnQgdGhlCit0cmF2ZXJzYWwgaWYgdGhlIGZyYW1lIHBvaW50ZXIgYXBwZWFycyBiYWQuIFdlIHN0b3JlIHRoZSBzZXQgb2YgcmV0dXJuCithZGRyZXNzZXMgc3RyYWlnaHQgaW50byB0aGUgQ1BVIGJ1ZmZlci4gTm90ZSB0aGF0LCBzaW5jZSB0aGlzIHRyYXZlcnNhbAoraXMga2V5ZWQgb2ZmIHRoZSBzdGFuZGFyZCBzYW1wbGUgaW50ZXJydXB0LCB0aGUgbnVtYmVyIG9mIHRpbWVzIGEKK2Z1bmN0aW9uIGFwcGVhcnMgaW4gYSBzdGFjayB0cmFjZSBpcyBub3QgYW4gaW5kaWNhdG9yIG9mIGhvdyBtYW55IHRpbWVzCit0aGUgY2FsbCBzaXRlIHdhcyBleGVjdXRlZDogcmF0aGVyLCBpdCdzIHJlbGF0ZWQgdG8gdGhlIG51bWJlciBvZgorc2FtcGxlcyB3ZSB0b29rIHdoZXJlIHRoYXQgY2FsbCBzaXRlIHdhcyBpbnZvbHZlZC4gVGh1cywgdGhlIHJlc3VsdHMgZm9yCitzdGFjayB0cmFjZXMgYXJlIG5vdCBuZWNlc3NhcmlseSBwcm9wb3J0aW9uYWwgdG8gdGhlIGNhbGwgY291bnRzOgordHlwaWNhbCBwcm9ncmFtcyB3aWxsIGhhdmUgbWFueSA8ZnVuY3Rpb24+bWFpbigpPC9mdW5jdGlvbj4gc2FtcGxlcy4KKzwvcGFyYT4KKzwvc2VjdDE+CisKKzxzZWN0MSBpZD0ic3luY2hyb25pc2luZy1idWZmZXJzIj4KKzx0aXRsZT5TeW5jaHJvbmlzaW5nIHRoZSBDUFUgYnVmZmVycyB0byB0aGUgZXZlbnQgYnVmZmVyPC90aXRsZT4KKzwhLS0gRklYTUU6IHVwZGF0ZSB3aGVuIHBlcmNwdSBwYXRjaCBnb2VzIGluIC0tPgorPHBhcmE+CitBdCBzb21lIHBvaW50LCB3ZSBoYXZlIHRvIHByb2Nlc3MgdGhlIGRhdGEgaW4gZWFjaCBDUFUgYnVmZmVyIGFuZCBlbnRlcgoraXQgaW50byB0aGUgbWFpbiAoZXZlbnQpIGJ1ZmZlci4gVGhlIGZpbGUKKzxmaWxlbmFtZT5idWZmZXJfc3luYy5jPC9maWxlbmFtZT4gY29udGFpbnMgdGhlIHJlbGV2YW50IGNvZGUuIFdlCitwZXJpb2RpY2FsbHkgKGN1cnJlbnRseSBldmVyeSA8Y29uc3RhbnQ+SFo8L2NvbnN0YW50Pi80IGppZmZpZXMpIHN0YXJ0Cit0aGUgc3luY2hyb25pc2F0aW9uIHByb2Nlc3MuIEluIGFkZGl0aW9uLCB3ZSBwcm9jZXNzIHRoZSBidWZmZXJzIG9uCitjZXJ0YWluIGV2ZW50cywgc3VjaCBhcyBhbiBhcHBsaWNhdGlvbiBjYWxsaW5nCis8ZnVuY3Rpb24+bXVubWFwKCk8L2Z1bmN0aW9uPi4gVGhpcyBpcyBwYXJ0aWN1bGFybHkgaW1wb3J0YW50IGZvcgorPGZ1bmN0aW9uPmV4aXQoKTwvZnVuY3Rpb24+IC0gYmVjYXVzZSB0aGUgQ1BVIGJ1ZmZlcnMgY29udGFpbiBwb2ludGVycwordG8gdGhlIHRhc2sgc3RydWN0dXJlLCBpZiB3ZSBkb24ndCBwcm9jZXNzIGFsbCB0aGUgYnVmZmVycyBiZWZvcmUgdGhlCit0YXNrIGlzIGFjdHVhbGx5IGRlc3Ryb3llZCBhbmQgdGhlIHRhc2sgc3RydWN0dXJlIGZyZWVkLCB0aGVuIHdlIGNvdWxkCitlbmQgdXAgdHJ5aW5nIHRvIGRlcmVmZXJlbmNlIGEgYm9ndXMgcG9pbnRlciBpbiBvbmUgb2YgdGhlIENQVSBidWZmZXJzLgorPC9wYXJhPgorPHBhcmE+CitXZSBhbHNvIGFkZCBhIG5vdGlmaWNhdGlvbiB3aGVuIGEga2VybmVsIG1vZHVsZSBpcyBsb2FkZWQ7IHRoaXMgaXMgc28KK3RoYXQgdXNlci1zcGFjZSBjYW4gcmUtcmVhZCA8ZmlsZW5hbWU+L3Byb2MvbW9kdWxlczwvZmlsZW5hbWU+IHRvCitkZXRlcm1pbmUgdGhlIGxvYWQgYWRkcmVzc2VzIG9mIGtlcm5lbCBtb2R1bGUgdGV4dCBzZWN0aW9ucy4gV2l0aG91dAordGhpcyBub3RpZmljYXRpb24sIHNhbXBsZXMgZm9yIGEgbmV3bHktbG9hZGVkIG1vZHVsZSBjb3VsZCBnZXQgbG9zdCBvcgorYmUgYXR0cmlidXRlZCB0byB0aGUgd3JvbmcgbW9kdWxlLgorPC9wYXJhPgorPHBhcmE+CitUaGUgc3luY2hyb25pc2F0aW9uIGl0c2VsZiB3b3JrcyBpbiB0aGUgZm9sbG93aW5nIG1hbm5lcjogZmlyc3QsIG11dHVhbAorZXhjbHVzaW9uIG9uIHRoZSBldmVudCBidWZmZXIgaXMgdGFrZW4uIFJlbWVtYmVyLCB3ZSBkbyBub3QgbmVlZCB0byBkbwordGhhdCBmb3IgZWFjaCBDUFUgYnVmZmVyLCBhcyB3ZSBvbmx5IHJlYWQgZnJvbSB0aGUgdGFpbCBpdGVyYXRvciAod2hpbHN0CitpbnRlcnJ1cHRzIG1pZ2h0IGJlIGFycml2aW5nIGF0IHRoZSBzYW1lIGJ1ZmZlciwgYnV0IHRoZXkgd2lsbCB3cml0ZSB0bwordGhlIHBvc2l0aW9uIG9mIHRoZSBoZWFkIGl0ZXJhdG9yLCBsZWF2aW5nIHByZXZpb3VzbHkgd3JpdHRlbiBlbnRyaWVzCitpbnRhY3QpLiBUaGVuLCB3ZSBwcm9jZXNzIGVhY2ggQ1BVIGJ1ZmZlciBpbiB0dXJuLiBBIENQVSBzd2l0Y2gKK25vdGlmaWNhdGlvbiBpcyBhZGRlZCB0byB0aGUgYnVmZmVyIGZpcnN0IChmb3IKKzxvcHRpb24+LS1zZXBhcmF0ZT1jcHU8L29wdGlvbj4gc3VwcG9ydCkuIFRoZW4gdGhlIHByb2Nlc3Npbmcgb2YgdGhlCithY3R1YWwgZGF0YSBzdGFydHMuCis8L3BhcmE+Cis8cGFyYT4KK0FzIG1lbnRpb25lZCwgdGhlIENQVSBidWZmZXIgY29uc2lzdHMgb2YgdGFzayBzd2l0Y2ggZW50cmllcyBhbmQgdGhlCithY3R1YWwgc2FtcGxlcy4gV2hlbiB0aGUgcm91dGluZSA8ZnVuY3Rpb24+c3luY19idWZmZXIoKTwvZnVuY3Rpb24+IHNlZXMKK2EgdGFzayBzd2l0Y2gsIHRoZSBwcm9jZXNzIElEIGFuZCBwcm9jZXNzIGdyb3VwIElEIGFyZSByZWNvcmRlZCBpbnRvIHRoZQorZXZlbnQgYnVmZmVyLCBhbG9uZyB3aXRoIGEgZGNvb2tpZSAoc2VlIGJlbG93KSBpZGVudGlmeWluZyB0aGUKK2FwcGxpY2F0aW9uIGJpbmFyeSAoZS5nLiA8ZmlsZW5hbWU+L2Jpbi9iYXNoPC9maWxlbmFtZT4pLiBUaGUKKzx2YXJuYW1lPm1tYXBfc2VtPC92YXJuYW1lPiBmb3IgdGhlIHRhc2sgaXMgdGhlbiB0YWtlbiwgdG8gYWxsb3cgc2FmZQoraXRlcmF0aW9uIGFjcm9zcyB0aGUgdGFza3MnIGxpc3Qgb2YgbWFwcGVkIGFyZWFzLiBFYWNoIHNhbXBsZSBpcyB0aGVuCitwcm9jZXNzZWQgYXMgZGVzY3JpYmVkIGluIHRoZSBuZXh0IHNlY3Rpb24uCis8L3BhcmE+Cis8cGFyYT4KK0FmdGVyIGEgYnVmZmVyIGhhcyBiZWVuIHJlYWQsIHRoZSB0YWlsIGl0ZXJhdG9yIGlzIHVwZGF0ZWQgdG8gcmVmbGVjdAoraG93IG11Y2ggb2YgdGhlIGJ1ZmZlciB3YXMgcHJvY2Vzc2VkLiBOb3RlIHRoYXQgd2hlbiB3ZSBkZXRlcm1pbmVkIGhvdworbXVjaCBkYXRhIHRoZXJlIHdhcyB0byByZWFkIGluIHRoZSBDUFUgYnVmZmVyLCB3ZSBhbHNvIGNhbGxlZAorPGZ1bmN0aW9uPmNwdV9idWZmZXJfcmVzZXQoKTwvZnVuY3Rpb24+IHRvIHJlc2V0Cis8dmFybmFtZT5sYXN0X3Rhc2s8L3Zhcm5hbWU+IGFuZCA8dmFybmFtZT5sYXN0X2lzX2tlcm5lbDwvdmFybmFtZT4sIGFzCit3ZSd2ZSBhbHJlYWR5IG1lbnRpb25lZC4gRHVyaW5nIHRoZSBwcm9jZXNzaW5nLCBtb3JlIHNhbXBsZXMgbWF5IGhhdmUKK2JlZW4gYXJyaXZpbmcgaW4gdGhlIENQVSBidWZmZXI7IHRoaXMgaXMgT0sgYmVjYXVzZSB3ZSBhcmUgY2FyZWZ1bCB0bworb25seSB1cGRhdGUgdGhlIHRhaWwgaXRlcmF0b3IgdG8gaG93IG11Y2ggd2UgYWN0dWFsbHkgcmVhZCAtIG9uIHRoZSBuZXh0CitidWZmZXIgc3luY2hyb25pc2F0aW9uLCB3ZSB3aWxsIHN0YXJ0IGFnYWluIGZyb20gdGhhdCBwb2ludC4KKzwvcGFyYT4KKzwvc2VjdDE+CisKKzxzZWN0MSBpZD0iZGVudHJ5LWNvb2tpZXMiPgorPHRpdGxlPklkZW50aWZ5aW5nIGJpbmFyeSBpbWFnZXM8L3RpdGxlPgorPHBhcmE+CitJbiBvcmRlciB0byBwcm9kdWNlIHVzZWZ1bCBwcm9maWxlcywgd2UgbmVlZCB0byBiZSBhYmxlIHRvIGFzc29jaWF0ZSBhCitwYXJ0aWN1bGFyIFBDIHZhbHVlIHNhbXBsZSB3aXRoIGFuIGFjdHVhbCBFTEYgYmluYXJ5IG9uIHRoZSBkaXNrLiBUaGlzCitsZWF2ZXMgdXMgd2l0aCB0aGUgcHJvYmxlbSBvZiBob3cgdG8gZXhwb3J0IHRoaXMgaW5mb3JtYXRpb24gdG8KK3VzZXItc3BhY2UuIFdlIGNyZWF0ZSB1bmlxdWUgSURzIHRoYXQgaWRlbnRpZnkgYSBwYXJ0aWN1bGFyIGRpcmVjdG9yeQorZW50cnkgKGRlbnRyeSksIGFuZCB3cml0ZSB0aG9zZSBJRHMgaW50byB0aGUgZXZlbnQgYnVmZmVyLiBMYXRlciBvbiwKK3RoZSB1c2VyLXNwYWNlIGRhZW1vbiBjYW4gY2FsbCB0aGUgPGZ1bmN0aW9uPmxvb2t1cF9kY29va2llPC9mdW5jdGlvbj4KK3N5c3RlbSBjYWxsLCB3aGljaCBsb29rcyB1cCB0aGUgSUQgYW5kIGZpbGxzIGluIHRoZSBmdWxsIHBhdGggb2YKK3RoZSBiaW5hcnkgaW1hZ2UgaW4gdGhlIGJ1ZmZlciB1c2VyLXNwYWNlIHBhc3NlcyBpbi4gVGhlc2UgSURzIGFyZQorbWFpbnRhaW5lZCBieSB0aGUgY29kZSBpbiA8ZmlsZW5hbWU+ZnMvZGNvb2tpZXMuYzwvZmlsZW5hbWU+OyB0aGUKK2NhY2hlIGxhc3RzIGZvciBhcyBsb25nIGFzIHRoZSBkYWVtb24gaGFzIHRoZSBldmVudCBidWZmZXIgb3Blbi4KKzwvcGFyYT4KKzwvc2VjdDE+CisKKzxzZWN0MSBpZD0iZmluZGluZy1kZW50cnkiPgorPHRpdGxlPkZpbmRpbmcgYSBzYW1wbGUncyBiaW5hcnkgaW1hZ2UgYW5kIG9mZnNldDwvdGl0bGU+Cis8cGFyYT4KK1dlIGhhdmVuJ3QgeWV0IGRlc2NyaWJlZCBob3cgd2UgcHJvY2VzcyB0aGUgYWJzb2x1dGUgUEMgdmFsdWUgaW50bworc29tZXRoaW5nIHVzYWJsZSBieSB0aGUgdXNlci1zcGFjZSBkYWVtb24uIFdoZW4gd2UgZmluZCBhIHNhbXBsZSBlbnRlcmVkCitpbnRvIHRoZSBDUFUgYnVmZmVyLCB3ZSB0cmF2ZXJzZSB0aGUgbGlzdCBvZiBtYXBwaW5ncyBmb3IgdGhlIHRhc2sKKyhyZW1lbWJlciwgd2Ugd2lsbCBoYXZlIHNlZW4gYSB0YXNrIHN3aXRjaCBlYXJsaWVyLCBzbyB3ZSBrbm93IHdoaWNoCit0YXNrJ3MgbGlzdHMgdG8gbG9vayBhdCkuIFdoZW4gYSBtYXBwaW5nIGlzIGZvdW5kIHRoYXQgY29udGFpbnMgdGhlIFBDCit2YWx1ZSwgd2UgbG9vayB1cCB0aGUgbWFwcGVkIGZpbGUncyBkZW50cnkgaW4gdGhlIGRjb29raWUgY2FjaGUuIFRoaXMKK2dpdmVzIHRoZSBkY29va2llIElEIHRoYXQgd2lsbCB1bmlxdWVseSBpZGVudGlmeSB0aGUgbWFwcGVkIGZpbGUuIFRoZW4KK3dlIGFsdGVyIHRoZSBhYnNvbHV0ZSB2YWx1ZSBzdWNoIHRoYXQgaXQgaXMgYW4gb2Zmc2V0IGZyb20gdGhlIHN0YXJ0IG9mCit0aGUgZmlsZSBiZWluZyBtYXBwZWQgKHRoZSBtYXBwaW5nIG5lZWQgbm90IHN0YXJ0IGF0IHRoZSBzdGFydCBvZiB0aGUKK2FjdHVhbCBmaWxlLCBzbyB3ZSBoYXZlIHRvIGNvbnNpZGVyIHRoZSBvZmZzZXQgdmFsdWUgb2YgdGhlIG1hcHBpbmcpLiBXZQorc3RvcmUgdGhpcyBkY29va2llIElEIGludG8gdGhlIGV2ZW50IGJ1ZmZlcjsgdGhpcyBpZGVudGlmaWVzIHdoaWNoCitiaW5hcnkgdGhlIHNhbXBsZXMgZm9sbG93aW5nIGl0IGFyZSBhZ2FpbnN0LgorSW4gdGhpcyBtYW5uZXIsIHdlIGhhdmUgY29udmVydGVkIGEgUEMgdmFsdWUsIHdoaWNoIGhhcyB0cmFuc2l0b3J5CittZWFuaW5nIG9ubHksIGludG8gYSBzdGF0aWMgb2Zmc2V0IHZhbHVlIGZvciBsYXRlciBwcm9jZXNzaW5nIGJ5IHRoZQorZGFlbW9uLgorPC9wYXJhPgorPHBhcmE+CitXZSBhbHNvIGF0dGVtcHQgdG8gYXZvaWQgdGhlIHJlbGF0aXZlbHkgZXhwZW5zaXZlIGxvb2t1cCBvZiB0aGUgZGVudHJ5Citjb29raWUgdmFsdWUgYnkgc3RvcmluZyB0aGUgY29va2llIHZhbHVlIGRpcmVjdGx5IGludG8gdGhlIGRlbnRyeQoraXRzZWxmOyB0aGVuIHdlIGNhbiBzaW1wbHkgZGVyaXZlIHRoZSBjb29raWUgdmFsdWUgaW1tZWRpYXRlbHkgd2hlbiB3ZQorZmluZCB0aGUgY29ycmVjdCBtYXBwaW5nLgorPC9wYXJhPgorPC9zZWN0MT4KKworPC9jaGFwdGVyPgorCis8Y2hhcHRlciBpZD0ic2FtcGxlLWZpbGVzIj4KKzx0aXRsZT5HZW5lcmF0aW5nIHNhbXBsZSBmaWxlczwvdGl0bGU+CisKKzxzZWN0MSBpZD0icHJvY2Vzc2luZy1idWZmZXIiPgorPHRpdGxlPlByb2Nlc3NpbmcgdGhlIGJ1ZmZlcjwvdGl0bGU+CisKKzxwYXJhPgorTm93IHdlIGNhbiBtb3ZlIG9udG8gdXNlci1zcGFjZSBpbiBvdXIgZGVzY3JpcHRpb24gb2YgaG93IHJhdyBpbnRlcnJ1cHQKK3NhbXBsZXMgYXJlIHByb2Nlc3NlZCBpbnRvIHVzZWZ1bCBpbmZvcm1hdGlvbi4gQXMgd2UgZGVzY3JpYmVkIGluCitwcmV2aW91cyBzZWN0aW9ucywgdGhlIGtlcm5lbCBPUHJvZmlsZSBkcml2ZXIgY3JlYXRlcyBhIGxhcmdlIGJ1ZmZlciBvZgorc2FtcGxlIGRhdGEgY29uc2lzdGluZyBvZiBvZmZzZXQgdmFsdWVzLCBpbnRlcnNwZXJzZWQgd2l0aAorbm90aWZpY2F0aW9uIG9mIGNoYW5nZXMgaW4gY29udGV4dC4gVGhlc2UgY29udGV4dCBjaGFuZ2VzIGluZGljYXRlIGhvdworZm9sbG93aW5nIHNhbXBsZXMgc2hvdWxkIGJlIGF0dHJpYnV0ZWQsIGFuZCBpbmNsdWRlIHRhc2sgc3dpdGNoZXMsIENQVQorY2hhbmdlcywgYW5kIHdoaWNoIGRjb29raWUgdGhlIHNhbXBsZSB2YWx1ZSBpcyBhZ2FpbnN0LiBCeSBwcm9jZXNzaW5nCit0aGlzIGJ1ZmZlciBlbnRyeS1ieS1lbnRyeSwgd2UgY2FuIGRldGVybWluZSB3aGVyZSB0aGUgc2FtcGxlcyBzaG91bGQKK2JlIGFjY3JlZGl0ZWQgdG8uIFRoaXMgaXMgcGFydGljdWxhcmx5IGltcG9ydGFudCB3aGVuIHVzaW5nIHRoZSAKKzxvcHRpb24+LS1zZXBhcmF0ZTwvb3B0aW9uPi4KKzwvcGFyYT4KKzxwYXJhPgorVGhlIGZpbGUgPGZpbGVuYW1lPmRhZW1vbi9vcGRfdHJhbnMuYzwvZmlsZW5hbWU+IGNvbnRhaW5zIHRoZSBiYXNpYyByb3V0aW5lCitmb3IgdGhlIGJ1ZmZlciBwcm9jZXNzaW5nLiBUaGUgPHZhcm5hbWU+c3RydWN0IHRyYW5zaWVudDwvdmFybmFtZT4KK3N0cnVjdHVyZSBpcyB1c2VkIHRvIGhvbGQgY2hhbmdlcyBpbiBjb250ZXh0LiBJdHMgbWVtYmVycyBhcmUgbW9kaWZpZWQKK2FzIHdlIHByb2Nlc3MgZWFjaCBlbnRyeTsgaXQgaXMgcGFzc2VkIGludG8gdGhlIHJvdXRpbmVzIGluCis8ZmlsZW5hbWU+ZGFlbW9uL29wZF9zZmlsZS5jPC9maWxlbmFtZT4gZm9yIGFjdHVhbGx5IGxvZ2dpbmcgdGhlIHNhbXBsZQordG8gYSBwYXJ0aWN1bGFyIHNhbXBsZSBmaWxlICh3aGljaCB3aWxsIGJlIGhlbGQgaW4KKzxmaWxlbmFtZT4kU0VTU0lPTl9ESVIvc2FtcGxlcy9jdXJyZW50PC9maWxlbmFtZT4pLgorPC9wYXJhPgorPHBhcmE+CitUaGUgYnVmZmVyIGZvcm1hdCBpcyBkZXNpZ25lZCBmb3IgY29uY2lzZW5lc3MsIGFzIGhpZ2ggc2FtcGxpbmcgcmF0ZXMKK2NhbiBlYXNpbHkgZ2VuZXJhdGUgYSBsb3Qgb2YgZGF0YS4gVGh1cywgY29udGV4dCBjaGFuZ2VzIGFyZSBwcmVmaXhlZAorYnkgYW4gZXNjYXBlIGNvZGUsIGlkZW50aWZpZWQgYnkgPGZ1bmN0aW9uPmlzX2VzY2FwZV9jb2RlKCk8L2Z1bmN0aW9uPi4KK0lmIGFuIGVzY2FwZSBjb2RlIGlzIGZvdW5kLCB0aGUgbmV4dCBlbnRyeSBpbiB0aGUgYnVmZmVyIGlkZW50aWZpZXMKK3doYXQgdHlwZSBvZiBjb250ZXh0IGNoYW5nZSBpcyBiZWluZyByZWFkLiBUaGVzZSBhcmUgaGFuZGVkIG9mZiB0bwordmFyaW91cyBoYW5kbGVycyAoc2VlIHRoZSA8dmFybmFtZT5oYW5kbGVyczwvdmFybmFtZT4gYXJyYXkpLCB3aGljaAorbW9kaWZ5IHRoZSB0cmFuc2llbnQgc3RydWN0dXJlIGFzIGFwcHJvcHJpYXRlLiBJZiBpdCdzIG5vdCBhbiBlc2NhcGUKK2NvZGUsIHRoZW4gaXQgbXVzdCBiZSBhIFBDIG9mZnNldCB2YWx1ZSwgYW5kIHRoZSB2ZXJ5IG5leHQgZW50cnkgd2lsbAorYmUgdGhlIG51bWVyaWMgaGFyZHdhcmUgY291bnRlci4gVGhlc2UgdmFsdWVzIGFyZSByZWFkIGFuZCByZWNvcmRlZAoraW4gdGhlIHRyYW5zaWVudCBzdHJ1Y3R1cmU7IHdlIHRoZW4gZG8gYSBsb29rdXAgdG8gZmluZCB0aGUgY29ycmVjdAorc2FtcGxlIGZpbGUsIGFuZCBsb2cgdGhlIHNhbXBsZSwgYXMgZGVzY3JpYmVkIGluIHRoZSBuZXh0IHNlY3Rpb24uCis8L3BhcmE+CisKKzxzZWN0MiBpZD0iaGFuZGxpbmcta2VybmVsLXNhbXBsZXMiPgorPHRpdGxlPkhhbmRsaW5nIGtlcm5lbCBzYW1wbGVzPC90aXRsZT4KKworPHBhcmE+CitTYW1wbGVzIGZyb20ga2VybmVsIGNvZGUgcmVxdWlyZSBhIGxpdHRsZSBzcGVjaWFsIGhhbmRsaW5nLiBCZWNhdXNlCit0aGUgYmluYXJ5IHRleHQgd2hpY2ggdGhlIHNhbXBsZSBpcyBhZ2FpbnN0IGRvZXMgbm90IGNvcnJlc3BvbmQgdG8KK2FueSBmaWxlIHRoYXQgdGhlIGtlcm5lbCBkaXJlY3RseSBrbm93cyBhYm91dCwgdGhlIE9Qcm9maWxlIGRyaXZlcgorc3RvcmVzIHRoZSBhYnNvbHV0ZSBQQyB2YWx1ZSBpbiB0aGUgYnVmZmVyLCBpbnN0ZWFkIG9mIHRoZSBmaWxlIG9mZnNldC4KK09mIGNvdXJzZSwgd2UgbmVlZCBhbiBvZmZzZXQgYWdhaW5zdCBzb21lIHBhcnRpY3VsYXIgYmluYXJ5LiBUbyBoYW5kbGUKK3RoaXMsIHdlIGtlZXAgYSBsaXN0IG9mIGxvYWRlZCBtb2R1bGVzIGJ5IHBhcnNpbmcKKzxmaWxlbmFtZT4vcHJvYy9tb2R1bGVzPC9maWxlbmFtZT4gYXMgbmVlZGVkLiBXaGVuIGEgbW9kdWxlIGlzIGxvYWRlZCwKK2Egbm90aWZpY2F0aW9uIGlzIHBsYWNlZCBpbiB0aGUgT1Byb2ZpbGUgYnVmZmVyLCBhbmQgdGhpcyB0cmlnZ2VycyBhCityZS1yZWFkLiBXZSBzdG9yZSB0aGUgbW9kdWxlIG5hbWUsIGFuZCB0aGUgbG9hZGluZyBhZGRyZXNzIGFuZCBzaXplLgorVGhpcyBpcyBhbHNvIGRvbmUgZm9yIHRoZSBtYWluIGtlcm5lbCBpbWFnZSwgYXMgc3BlY2lmaWVkIGJ5IHRoZSB1c2VyLgorVGhlIGFic29sdXRlIFBDIHZhbHVlIGlzIG1hdGNoZWQgYWdhaW5zdCBlYWNoIGFkZHJlc3MgcmFuZ2UsIGFuZAorbW9kaWZpZWQgaW50byBhbiBvZmZzZXQgd2hlbiB0aGUgbWF0Y2hpbmcgbW9kdWxlIGlzIGZvdW5kLiBTZWUgCis8ZmlsZW5hbWU+ZGFlbW9uL29wZF9rZXJuZWwuYzwvZmlsZW5hbWU+IGZvciB0aGUgZGV0YWlscy4KKzwvcGFyYT4KKworPC9zZWN0Mj4KKworCis8L3NlY3QxPgorCis8c2VjdDEgaWQ9InNhbXBsZS1maWxlLWdlbmVyYXRpb24iPgorPHRpdGxlPkxvY2F0aW5nIGFuZCBjcmVhdGluZyBzYW1wbGUgZmlsZXM8L3RpdGxlPgorCis8cGFyYT4KK1dlIGhhdmUgYSBzYW1wbGUgdmFsdWUgYW5kIGl0cyBzYXRlbGxpdGUgZGF0YSBzdG9yZWQgaW4gYQorPHZhcm5hbWU+c3RydWN0IHRyYW5zaWVudDwvdmFybmFtZT4sIGFuZCB3ZSBtdXN0IGxvY2F0ZSBhbgorYWN0dWFsIHNhbXBsZSBmaWxlIHRvIHN0b3JlIHRoZSBzYW1wbGUgaW4sIHVzaW5nIHRoZSBjb250ZXh0CitpbmZvcm1hdGlvbiBpbiB0aGUgdHJhbnNpZW50IHN0cnVjdHVyZSBhcyBhIGtleS4gVGhlIHRyYW5zaWVudCBkYXRhIHRvCitzYW1wbGUgZmlsZSBsb29rdXAgaXMgaGFuZGxlZCBpbgorPGZpbGVuYW1lPmRhZW1vbi9vcGRfc2ZpbGUuYzwvZmlsZW5hbWU+LiBBIGhhc2ggaXMgdGFrZW4gb2YgdGhlCit0cmFuc2llbnQgdmFsdWVzIHRoYXQgYXJlIHJlbGV2YW50IChkZXBlbmRpbmcgdXBvbiB0aGUgc2V0dGluZyBvZgorPG9wdGlvbj4tLXNlcGFyYXRlPC9vcHRpb24+LCBzb21lIHZhbHVlcyBtaWdodCBiZSBpcnJlbGV2YW50KSwgYW5kIHRoZQoraGFzaCB2YWx1ZSBpcyB1c2VkIHRvIGxvb2t1cCB0aGUgbGlzdCBvZiBjdXJyZW50bHkgb3BlbiBzYW1wbGUgZmlsZXMuCitPZiBjb3Vyc2UsIHRoZSBzYW1wbGUgZmlsZSBtaWdodCBub3QgYmUgZm91bmQsIGluIHdoaWNoIGNhc2Ugd2UgbmVlZAordG8gY3JlYXRlIGFuZCBvcGVuIGl0LgorPC9wYXJhPgorPHBhcmE+CitPUHJvZmlsZSB1c2VzIGEgcmF0aGVyIGNvbXBsZXggc2NoZW1lIGZvciBuYW1pbmcgc2FtcGxlIGZpbGVzLCBpbiBvcmRlcgordG8gbWFrZSBzZWxlY3RpbmcgcmVsZXZhbnQgc2FtcGxlIGZpbGVzIGVhc2llciBmb3IgdGhlIHBvc3QtcHJvZmlsaW5nCit1dGlsaXRpZXMuIFRoZSBleGFjdCBkZXRhaWxzIG9mIHRoZSBzY2hlbWUgYXJlIGdpdmVuIGluCis8ZmlsZW5hbWU+b3Byb2ZpbGUtdGVzdHMvcHBfaW50ZXJmYWNlPC9maWxlbmFtZT4sIGJ1dCBmb3Igbm93IGl0IHdpbGwKK3N1ZmZpY2UgdG8gcmVtZW1iZXIgdGhhdCB0aGUgZmlsZW5hbWUgd2lsbCBpbmNsdWRlIG9ubHkgcmVsZXZhbnQKK2luZm9ybWF0aW9uIGZvciB0aGUgY3VycmVudCBzZXR0aW5ncywgdGFrZW4gZnJvbSB0aGUgdHJhbnNpZW50IGRhdGEuIEEKK2Z1bGx5LXNwZWNpZmllZCBmaWxlbmFtZSBsb29rcyBzb21ldGhpbmcgbGlrZSA6Cis8L3BhcmE+Cis8Y29tcHV0ZXJvdXRwdXQ+CisvdmFyL2xpYi9vcHJvZmlsZS9zYW1wbGVzL2N1cnJlbnQve3Jvb3R9L3Vzci9iaW4veG1tcy97ZGVwfS97cm9vdH0vbGliL3Rscy9saWJjLTIuMy4yLnNvL0NQVV9DTEtfVU5IQUxURUQuMTAwMDAwLjAuMjgwODIuMjgwODkuMAorPC9jb21wdXRlcm91dHB1dD4KKzxwYXJhPgorSXQgc2hvdWxkIGJlIGNsZWFyIHRoYXQgdGhpcyBpZGVudGlmaWVzIHN1Y2ggaW5mb3JtYXRpb24gYXMgdGhlCithcHBsaWNhdGlvbiBiaW5hcnksIHRoZSBkZXBlbmRlbnQgKGxpYnJhcnkpIGJpbmFyeSwgdGhlIGhhcmR3YXJlIGV2ZW50LAorYW5kIHRoZSBwcm9jZXNzIGFuZCB0aHJlYWQgSUQuIFR5cGljYWxseSwgbm90IGFsbCB0aGlzIGluZm9ybWF0aW9uIGlzCituZWVkZWQsIGluIHdoaWNoIGNhc2VzIHNvbWUgdmFsdWVzIG1heSBiZSByZXBsYWNlZCB3aXRoIHRoZSB0b2tlbgorPGZpbGVuYW1lPmFsbDwvZmlsZW5hbWU+LgorPC9wYXJhPgorPHBhcmE+CitUaGUgY29kZSB0aGF0IGdlbmVyYXRlcyB0aGlzIGZpbGVuYW1lIGFuZCBvcGVucyB0aGUgZmlsZSBpcyBmb3VuZCBpbgorPGZpbGVuYW1lPmRhZW1vbi9vcGRfbWFuZ2xpbmcuYzwvZmlsZW5hbWU+LiBZb3UgbWF5IGhhdmUgcmVhbGlzZWQgdGhhdAorYXQgdGhpcyBwb2ludCwgd2UgZG8gbm90IGhhdmUgdGhlIGJpbmFyeSBpbWFnZSBmaWxlIG5hbWVzLCBvbmx5IHRoZQorZGNvb2tpZSB2YWx1ZXMuIEluIG9yZGVyIHRvIGRldGVybWluZSBhIGZpbGUgbmFtZSwgYSBkY29va2llIHZhbHVlIGlzCitsb29rZWQgdXAgaW4gdGhlIGRjb29raWUgY2FjaGUuIFRoaXMgaXMgdG8gYmUgZm91bmQgaW4KKzxmaWxlbmFtZT5kYWVtb24vb3BkX2Nvb2tpZS5jPC9maWxlbmFtZT4uIFNpbmNlIGRjb29raWVzIGFyZSBib3RoCitwZXJzaXN0ZW50IGFuZCB1bmlxdWUgZHVyaW5nIGEgc2FtcGxpbmcgc2Vzc2lvbiwgd2UgY2FuIGNhY2hlIHRoZQordmFsdWVzLiBJZiB0aGUgdmFsdWUgaXMgbm90IGZvdW5kIGluIHRoZSBjYWNoZSwgdGhlbiB3ZSBhc2sgdGhlIGtlcm5lbAordG8gZG8gdGhlIGxvb2t1cCBmcm9tIHZhbHVlIHRvIGZpbGUgbmFtZSBmb3IgdXMgYnkgY2FsbGluZworPGZ1bmN0aW9uPmxvb2t1cF9kY29va2llKCk8L2Z1bmN0aW9uPi4gVGhpcyBsb29rcyB1cCB0aGUgdmFsdWUgaW4gYQora2VybmVsLXNpZGUgY2FjaGUgKHNlZSA8ZmlsZW5hbWU+ZnMvZGNvb2tpZXMuYzwvZmlsZW5hbWU+KSBhbmQgcmV0dXJucwordGhlIGZ1bGx5LXF1YWxpZmllZCBmaWxlIG5hbWUgdG8gdXNlcnNwYWNlLgorPC9wYXJhPgorCis8L3NlY3QxPgorCis8c2VjdDEgaWQ9InNhbXBsZS1maWxlLXdyaXRpbmciPgorPHRpdGxlPldyaXRpbmcgZGF0YSB0byBhIHNhbXBsZSBmaWxlPC90aXRsZT4KKworPHBhcmE+CitFYWNoIHNwZWNpZmljIHNhbXBsZSBmaWxlIGlzIGEgaGFzaGVkIGNvbGxlY3Rpb24sIHdoZXJlIHRoZSBrZXkgaXMKK3RoZSBQQyBvZmZzZXQgZnJvbSB0aGUgdHJhbnNpZW50IGRhdGEsIGFuZCB0aGUgdmFsdWUgaXMgdGhlIG51bWJlciBvZgorc2FtcGxlcyByZWNvcmRlZCBhZ2FpbnN0IHRoYXQgb2Zmc2V0LiBUaGUgZmlsZXMgYXJlCis8ZnVuY3Rpb24+bW1hcCgpPC9mdW5jdGlvbj5lZCBpbnRvIHRoZSBkYWVtb24ncyBtZW1vcnkgc3BhY2UuIFRoZSBjb2RlCit0byBhY3R1YWxseSBsb2cgdGhlIHdyaXRlIGFnYWluc3QgdGhlIHNhbXBsZSBmaWxlIGNhbiBiZSBmb3VuZCBpbgorPGZpbGVuYW1lPmxpYmRiLzwvZmlsZW5hbWU+LgorPC9wYXJhPgorPHBhcmE+CitGb3IgcmVjb3JkaW5nIHN0YWNrIHRyYWNlcywgd2UgaGF2ZSBhIG1vcmUgY29tcGxpY2F0ZWQgc2FtcGxlIGZpbGVuYW1lCittYW5nbGluZyBzY2hlbWUgdGhhdCBhbGxvd3MgdXMgdG8gaWRlbnRpZnkgY3Jvc3MtYmluYXJ5IGNhbGxzLiBXZSB1c2UKK3RoZSBzYW1lIHNhbXBsZSBmaWxlIGZvcm1hdCwgd2hlcmUgdGhlIGtleSBpcyBhIDY0LWJpdCB2YWx1ZSBjb21wb3NlZAorZnJvbSB0aGUgZnJvbSx0byBwYWlyIG9mIG9mZnNldHMuCis8L3BhcmE+CisKKzwvc2VjdDE+CisKKzwvY2hhcHRlcj4KKworPGNoYXB0ZXIgaWQ9Im91dHB1dCI+Cis8dGl0bGU+R2VuZXJhdGluZyB1c2VmdWwgb3V0cHV0PC90aXRsZT4KKworPHBhcmE+CitBbGwgb2YgdGhlIHRvb2xzIHVzZWQgdG8gZ2VuZXJhdGUgaHVtYW4tcmVhZGFibGUgb3V0cHV0IGhhdmUgdG8gdGFrZQorcm91Z2hseSB0aGUgc2FtZSBzdGVwcyB0byBjb2xsZWN0IHRoZSBkYXRhIGZvciBwcm9jZXNzaW5nLiBGaXJzdCwgdGhlCitwcm9maWxlIHNwZWNpZmljYXRpb24gZ2l2ZW4gYnkgdGhlIHVzZXIgaGFzIHRvIGJlIHBhcnNlZC4gTmV4dCwgYSBsaXN0CitvZiBzYW1wbGUgZmlsZXMgbWF0Y2hpbmcgdGhlIHNwZWNpZmljYXRpb24gaGFzIHRvIG9idGFpbmVkLiBVc2luZyB0aGlzCitsaXN0LCB3ZSBuZWVkIHRvIGxvY2F0ZSB0aGUgYmluYXJ5IGZpbGUgZm9yIGVhY2ggc2FtcGxlIGZpbGUsIGFuZCB0aGVuCit1c2UgdGhlbSB0byBleHRyYWN0IG1lYW5pbmdmdWwgZGF0YSwgYmVmb3JlIGEgZmluYWwgY29sbGF0aW9uIGFuZAorcHJlc2VudGF0aW9uIHRvIHRoZSB1c2VyLgorPC9wYXJhPgorCis8c2VjdDEgaWQ9InByb2ZpbGUtc3BlY2lmaWNhdGlvbiI+Cis8dGl0bGU+SGFuZGxpbmcgdGhlIHByb2ZpbGUgc3BlY2lmaWNhdGlvbjwvdGl0bGU+CisKKzxwYXJhPgorVGhlIHByb2ZpbGUgc3BlY2lmaWNhdGlvbiBwcmVzZW50ZWQgYnkgdGhlIHVzZXIgaXMgcGFyc2VkIGluCit0aGUgZnVuY3Rpb24gPGZ1bmN0aW9uPnByb2ZpbGVfc3BlYzo6Y3JlYXRlKCk8L2Z1bmN0aW9uPi4gVGhpcworY3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBzcGVjaWZpY2F0aW9uLiBUaGVuIHdlCit1c2UgPGZ1bmN0aW9uPnByb2ZpbGVfc3BlYzo6Z2VuZXJhdGVfZmlsZV9saXN0KCk8L2Z1bmN0aW9uPgordG8gc2VhcmNoIGZvciBhbGwgc2FtcGxlIGZpbGVzIGFuZCBtYXRjaCB0aGVtIGFnYWluc3QgdGhlCis8dmFybmFtZT5wcm9maWxlX3NwZWM8L3Zhcm5hbWU+LgorPC9wYXJhPgorCis8cGFyYT4KK1RvIGVuYWJsZSB0aGlzIG1hdGNoaW5nIHByb2Nlc3MgdG8gd29yaywgdGhlIGF0dHJpYnV0ZXMgb2YKK2VhY2ggc2FtcGxlIGZpbGUgaXMgZW5jb2RlZCBpbiBpdHMgZmlsZW5hbWUuIFRoaXMgaXMgYSBsb3ctdGVjaAorYXBwcm9hY2ggdG8gbWF0Y2hpbmcgc3BlY2lmaWNhdGlvbnMgYWdhaW5zdCBjYW5kaWRhdGUgc2FtcGxlCitmaWxlcywgYnV0IGl0IHdvcmtzIHJlYXNvbmFibHkgd2VsbC4gQSB0eXBpY2FsIHNhbXBsZSBmaWxlCittaWdodCBsb29rIGxpa2UgdGhlc2U6Cis8L3BhcmE+Cis8c2NyZWVuPgorL3Zhci9saWIvb3Byb2ZpbGUvc2FtcGxlcy9jdXJyZW50L3tyb290fS9iaW4vbHMve2RlcH0ve3Jvb3R9L2Jpbi9scy97Y2d9L3tyb290fS9iaW4vbHMvQ1BVX0NMS19VTkhBTFRFRC4xMDAwMDAuMC5hbGwuYWxsLmFsbAorL3Zhci9saWIvb3Byb2ZpbGUvc2FtcGxlcy9jdXJyZW50L3tyb290fS9iaW4vbHMve2RlcH0ve3Jvb3R9L2Jpbi9scy9DUFVfQ0xLX1VOSEFMVEVELjEwMDAwMC4wLmFsbC5hbGwuYWxsCisvdmFyL2xpYi9vcHJvZmlsZS9zYW1wbGVzL2N1cnJlbnQve3Jvb3R9L2Jpbi9scy97ZGVwfS97cm9vdH0vYmluL2xzL0NQVV9DTEtfVU5IQUxURUQuMTAwMDAwLjAuNzQyMy43NDI0LjAKKy92YXIvbGliL29wcm9maWxlL3NhbXBsZXMvY3VycmVudC97a2Vybn0vcjEyOC97ZGVwfS97a2Vybn0vcjEyOC9DUFVfQ0xLX1VOSEFMVEVELjEwMDAwMC4wLmFsbC5hbGwuYWxsCis8L3NjcmVlbj4KKzxwYXJhPgorVGhpcyBsb29rcyB1bm5lY2Vzc2FyaWx5IGNvbXBsZXgsIGJ1dCBpdCdzIGFjdHVhbGx5IGZhaXJseSBzaW1wbGUuIEZpcnN0Cit3ZSBoYXZlIHRoZSBzZXNzaW9uIG9mIHRoZSBzYW1wbGUsIGJ5IGRlZmF1bHQgbG9jYXRlZCBoZXJlCis8ZmlsZW5hbWU+L3Zhci9saWIvb3Byb2ZpbGUvc2FtcGxlcy9jdXJyZW50PC9maWxlbmFtZT4uIFRoaXMgbG9jYXRpb24KK2NhbiBiZSBjaGFuZ2VkIGJ5IHNwZWNpZnlpbmcgdGhlIC0tc2Vzc2lvbi1kaXIgb3B0aW9uIGF0IGNvbW1hbmQtbGluZS4KK1RoaXMgc2Vzc2lvbiBjb3VsZCBlcXVhbGx5IHdlbGwgYmUgaW5zaWRlIGFuIGFyY2hpdmUgZnJvbSA8Y29tbWFuZD5vcGFyY2hpdmU8L2NvbW1hbmQ+LgorTmV4dCB3ZSBoYXZlIG9uZSBvZiB0aGUgdG9rZW5zIDxmaWxlbmFtZT57cm9vdH08L2ZpbGVuYW1lPiBvcgorPGZpbGVuYW1lPntrZXJufTwvZmlsZW5hbWU+LiA8ZmlsZW5hbWU+e3Jvb3R9PC9maWxlbmFtZT4gaW5kaWNhdGVzCit0aGF0IHRoZSBiaW5hcnkgaXMgZm91bmQgb24gYSBmaWxlIHN5c3RlbSwgYW5kIHdlIHdpbGwgZW5jb2RlIGl0cyBwYXRoCitpbiB0aGUgbmV4dCBzZWN0aW9uIChlLmcuIDxmaWxlbmFtZT4vYmluL2xzPC9maWxlbmFtZT4pLgorPGZpbGVuYW1lPntrZXJufTwvZmlsZW5hbWU+IGluZGljYXRlcyBhIGtlcm5lbCBtb2R1bGUgLSBvbiAyLjYga2VybmVscwordGhlIHBhdGggaW5mb3JtYXRpb24gaXMgbm90IGF2YWlsYWJsZSBmcm9tIHRoZSBrZXJuZWwsIHNvIHdlIGhhdmUgdG8KK3NwZWNpYWwtY2FzZSBrZXJuZWwgbW9kdWxlcyBsaWtlIHRoaXM7IHdlIGVuY29kZSBtZXJlbHkgdGhlIG5hbWUgb2YgdGhlCittb2R1bGUgYXMgbG9hZGVkLgorPC9wYXJhPgorPHBhcmE+CitOZXh0IHRoZXJlIGlzIGEgPGZpbGVuYW1lPntkZXB9PC9maWxlbmFtZT4gdG9rZW4sIGluZGljYXRpbmcgYW5vdGhlcgordG9rZW4vcGF0aCB3aGljaCBpZGVudGlmaWVzIHRoZSBkZXBlbmRlbnQgYmluYXJ5IGltYWdlLiBUaGlzIGlzIHVzZWQgZXZlbiBmb3IKK3RoZSAicHJpbWFyeSIgYmluYXJ5IChpLmUuIHRoZSBvbmUgdGhhdCB3YXMKKzxmdW5jdGlvbj5leGVjdmUoKTwvZnVuY3Rpb24+ZCksIGFzIGl0IHNpbXBsaWZpZXMgcHJvY2Vzc2luZy4gRmluYWxseSwKK2lmIHRoaXMgc2FtcGxlIGZpbGUgaXMgYSBub3JtYWwgZmxhdCBwcm9maWxlLCB0aGUgYWN0dWFsIGZpbGUgaXMgbmV4dCBpbgordGhlIHBhdGguIElmIGl0J3MgYSBjYWxsLWdyYXBoIHNhbXBsZSBmaWxlLCB3ZSBuZWVkIG9uZSBmdXJ0aGVyCitzcGVjaWZpY2F0aW9uLCB0byBhbGxvdyB1cyB0byBpZGVudGlmeSBjcm9zcy1iaW5hcnkgYXJjcyBpbiB0aGUgY2FsbAorZ3JhcGguCis8L3BhcmE+Cis8cGFyYT4KK1RoZSBhY3R1YWwgc2FtcGxlIGZpbGUgbmFtZSBpcyBkb3Qtc2VwYXJhdGVkLCB3aGVyZSB0aGUgZmllbGRzIGFyZSwgaW4KK29yZGVyOiBldmVudCBuYW1lLCBldmVudCBjb3VudCwgdW5pdCBtYXNrLCB0YXNrIGdyb3VwIElELCB0YXNrIElELCBhbmQKK0NQVSBudW1iZXIuCis8L3BhcmE+Cis8cGFyYT4KK1RoaXMgc2FtcGxlIGZpbGUgY2FuIGJlIHJlbGlhYmx5IHBhcnNlZCAod2l0aAorPGZ1bmN0aW9uPnBhcnNlX2ZpbGVuYW1lKCk8L2Z1bmN0aW9uPikgaW50byBhCis8dmFybmFtZT5maWxlbmFtZV9zcGVjPC92YXJuYW1lPi4gRmluYWxseSwgd2UgY2FuIGNoZWNrIHdoZXRoZXIgdG8KK2luY2x1ZGUgdGhlIHNhbXBsZSBmaWxlIGluIHRoZSBmaW5hbCByZXN1bHRzIGJ5IGNvbXBhcmluZyB0aGlzCis8dmFybmFtZT5maWxlbmFtZV9zcGVjPC92YXJuYW1lPiBhZ2FpbnN0IHRoZQorPHZhcm5hbWU+cHJvZmlsZV9zcGVjPC92YXJuYW1lPiB0aGUgdXNlciBzcGVjaWZpZWQgKGZvciB0aGUgaW50ZXJlc3RlZCwKK3NlZSA8ZnVuY3Rpb24+dmFsaWRfY2FuZGlkYXRlKCk8L2Z1bmN0aW9uPiBhbmQKKzxmdW5jdGlvbj5wcm9maWxlX3NwZWM6Om1hdGNoPC9mdW5jdGlvbj4pLiBUaGVuIGNvbWVzIHRoZSByZWFsbHkKK2NvbXBsaWNhdGVkIGJpdC4uLgorPC9wYXJhPgorCis8L3NlY3QxPgorCis8c2VjdDEgaWQ9InNhbXBsZS1maWxlLWNvbGxhdGluZyI+Cis8dGl0bGU+Q29sbGF0aW5nIHRoZSBjYW5kaWRhdGUgc2FtcGxlIGZpbGVzPC90aXRsZT4KKworPHBhcmE+CitBdCB0aGlzIHBvaW50IHdlIGhhdmUgYSBkdXBsaWNhdGUtZnJlZSBsaXN0IG9mIHNhbXBsZSBmaWxlcyB3ZSBuZWVkCit0byBwcm9jZXNzLiBCdXQgZmlyc3Qgd2UgbmVlZCB0byBkbyBzb21lIGZ1cnRoZXIgYXJyYW5nZW1lbnQ6IHdlCituZWVkIHRvIGNsYXNzaWZ5IGVhY2ggc2FtcGxlIGZpbGUsIGFuZCB3ZSBtYXkgYWxzbyBuZWVkIHRvICJpbnZlcnQiCit0aGUgcHJvZmlsZXMuCis8L3BhcmE+CisKKzxzZWN0MiBpZD0ic2FtcGxlLWZpbGUtY2xhc3NpZnlpbmciPgorPHRpdGxlPkNsYXNzaWZ5aW5nIHNhbXBsZSBmaWxlczwvdGl0bGU+CisKKzxwYXJhPgorSXQncyBwb3NzaWJsZSBmb3IgdXRpbGl0aWVzIGxpa2UgPGNvbW1hbmQ+b3ByZXBvcnQ8L2NvbW1hbmQ+IHRvIHNob3cgCitkYXRhIGluIGNvbHVtbmFyIGZvcm1hdDogZm9yIGV4YW1wbGUsIHdlIG1pZ2h0IHdhbnQgdG8gc2hvdyB0aGUgcmVzdWx0cworb2YgdHdvIHRocmVhZHMgd2l0aGluIGEgcHJvY2VzcyBzaWRlLWJ5LXNpZGUuIFRvIGRvIHRoaXMsIHdlIG5lZWQKK3RvIGNsYXNzaWZ5IGVhY2ggc2FtcGxlIGZpbGUgaW50byBjbGFzc2VzIC0gdGhlIGNsYXNzZXMgY29ycmVzcG9uZAord2l0aCBlYWNoIDxjb21tYW5kPm9wcmVwb3J0PC9jb21tYW5kPiBjb2x1bW4uIFRoZSBmdW5jdGlvbiB0aGF0IGhhbmRsZXMKK3RoaXMgaXMgPGZ1bmN0aW9uPmFycmFuZ2VfcHJvZmlsZXMoKTwvZnVuY3Rpb24+LiBFYWNoIHNhbXBsZSBmaWxlCitpcyBhZGRlZCB0byBhIHBhcnRpY3VsYXIgY2xhc3MuIElmIHRoZSBzYW1wbGUgZmlsZSBpcyB0aGUgZmlyc3QgaW4KK2l0cyBjbGFzcywgYSB0ZW1wbGF0ZSBpcyBnZW5lcmF0ZWQgZnJvbSB0aGUgc2FtcGxlIGZpbGUuIEVhY2ggdGVtcGxhdGUKK2Rlc2NyaWJlcyBhIHBhcnRpY3VsYXIgY2xhc3MgKHRodXMsIGluIG91ciBleGFtcGxlIGFib3ZlLCBlYWNoIHRlbXBsYXRlCit3aWxsIGhhdmUgYSBkaWZmZXJlbnQgdGhyZWFkIElELCBhbmQgdGhpcyB1bmlxdWVseSBpZGVudGlmaWVzIGVhY2gKK2NsYXNzKS4KKzwvcGFyYT4KKworPHBhcmE+CitFYWNoIGNsYXNzIGhhcyBhIGxpc3Qgb2YgInByb2ZpbGUgc2V0cyIgbWF0Y2hpbmcgdGhhdCBjbGFzcydzIHRlbXBsYXRlLgorQSBwcm9maWxlIHNldCBpcyBlaXRoZXIgYSBwcm9maWxlIG9mIHRoZSBwcmltYXJ5IGJpbmFyeSBpbWFnZSwgb3IgYW55IG9mCitpdHMgZGVwZW5kZW50IGltYWdlcy4gQWZ0ZXIgYWxsIHNhbXBsZSBmaWxlcyBoYXZlIGJlZW4gbGlzdGVkIGluIG9uZSBvZgordGhlIHByb2ZpbGUgc2V0cyBiZWxvbmdpbmcgdG8gdGhlIGNsYXNzZXMsIHdlIGhhdmUgdG8gbmFtZSBlYWNoIGNsYXNzIGFuZAorcGVyZm9ybSBlcnJvci1jaGVja2luZy4gVGhpcyBpcyBkb25lIGJ5Cis8ZnVuY3Rpb24+aWRlbnRpZnlfY2xhc3NlcygpPC9mdW5jdGlvbj47IGVhY2ggY2xhc3MgaXMgY2hlY2tlZCB0byBlbnN1cmUKK3RoYXQgaXRzICJheGlzIiBpcyB0aGUgc2FtZSBhcyBhbGwgdGhlIG90aGVycy4gVGhpcyBpcyBuZWVkZWQgYmVjYXVzZQorPGNvbW1hbmQ+b3ByZXBvcnQ8L2NvbW1hbmQ+IGNhbid0IHByb2R1Y2UgcmVzdWx0cyBpbiAzRCBmb3JtYXQ6IHdlIGNhbgorb25seSBkaWZmZXIgaW4gb25lIGFzcGVjdCwgc3VjaCBhcyB0aHJlYWQgSUQgb3IgZXZlbnQgbmFtZS4KKzwvcGFyYT4KKworPC9zZWN0Mj4KKworPHNlY3QyIGlkPSJzYW1wbGUtZmlsZS1pbnZlcnRpbmciPgorPHRpdGxlPkNyZWF0aW5nIGludmVydGVkIHByb2ZpbGUgbGlzdHM8L3RpdGxlPgorCis8cGFyYT4KK1JlbWVtYmVyIHRoYXQgaWYgd2UncmUgdXNpbmcgY2VydGFpbiBwcm9maWxlIHNlcGFyYXRpb24gb3B0aW9ucywgc3VjaCBhcworIi0tc2VwYXJhdGU9bGliIiwgYSBzaW5nbGUgYmluYXJ5IGNvdWxkIGJlIGEgZGVwZW5kZW50IGltYWdlIHRvIG1hbnkKK2RpZmZlcmVudCBiaW5hcmllcy4gRm9yIGV4YW1wbGUsIHRoZSBDIGxpYnJhcnkgaW1hZ2Ugd291bGQgYmUgYQorZGVwZW5kZW50IGltYWdlIGZvciBtb3N0IHByb2dyYW1zIHRoYXQgaGF2ZSBiZWVuIHByb2ZpbGVkLiBBcyBpdAoraGFwcGVucywgdGhpcyBjYW4gY2F1c2Ugc2V2ZXJlIHBlcmZvcm1hbmNlIHByb2JsZW1zOiB3aXRob3V0IHNvbWUKK3JlLWFycmFuZ2VtZW50LCB0aGVzZSBkZXBlbmRlbnQgYmluYXJ5IGltYWdlcyB3b3VsZCBiZSBvcGVuZWQgZWFjaAordGltZSB3ZSBuZWVkIHRvIHByb2Nlc3Mgc2FtcGxlIGZpbGVzIGZvciBlYWNoIHByb2dyYW0uCis8L3BhcmE+CisKKzxwYXJhPgorVGhlIHNvbHV0aW9uIGlzIHRvICJpbnZlcnQiIHRoZSBwcm9maWxlcyB2aWEKKzxmdW5jdGlvbj5pbnZlcnRfcHJvZmlsZXMoKTwvZnVuY3Rpb24+LiBXZSBjcmVhdGUgYSBuZXcgZGF0YSBzdHJ1Y3R1cmUKK3doZXJlIHRoZSBkZXBlbmRlbnQgYmluYXJ5IGlzIGZpcnN0LCBhbmQgdGhlIHByaW1hcnkgYmluYXJ5IGltYWdlcyB1c2luZwordGhhdCBkZXBlbmRlbnQgYmluYXJ5IGFyZSBsaXN0ZWQgYXMgc3ViLWltYWdlcy4gVGhpcyBoZWxwcyBvdXIKK3BlcmZvcm1hbmNlIHByb2JsZW0sIGFzIG5vdyB3ZSBvbmx5IG5lZWQgdG8gb3BlbiBlYWNoIGRlcGVuZGVudCBpbWFnZQorb25jZSwgd2hlbiB3ZSBwcm9jZXNzIHRoZSBsaXN0IG9mIGludmVydGVkIHByb2ZpbGVzLgorPC9wYXJhPgorCis8L3NlY3QyPgorCis8L3NlY3QxPgorCis8c2VjdDEgaWQ9ImdlbmVyYXRpbmctcHJvZmlsZS1kYXRhIj4KKzx0aXRsZT5HZW5lcmF0aW5nIHByb2ZpbGUgZGF0YTwvdGl0bGU+CisKKzxwYXJhPgorVGhpbmdzIGRvbid0IGdldCBhbnkgc2ltcGxlciBhdCB0aGlzIHBvaW50LCB1bmZvcnR1bmF0ZWx5LiBBdCB0aGlzIHBvaW50Cit3ZSd2ZSBjb2xsZWN0ZWQgYW5kIGNsYXNzaWZpZWQgdGhlIHNhbXBsZSBmaWxlcyBpbnRvIHRoZSBzZXQgb2YgaW52ZXJ0ZWQKK3Byb2ZpbGVzLCBhcyBkZXNjcmliZWQgaW4gdGhlIHByZXZpb3VzIHNlY3Rpb24uIE5vdyB3ZSBuZWVkIHRvIHByb2Nlc3MKK2VhY2ggaW52ZXJ0ZWQgcHJvZmlsZSBhbmQgbWFrZSBzb21ldGhpbmcgb2YgdGhlIGRhdGEuIFRoZSBlbnRyeSBwb2ludAorZm9yIHRoaXMgaXMgPGZ1bmN0aW9uPnBvcHVsYXRlX2Zvcl9pbWFnZSgpPC9mdW5jdGlvbj4uCis8L3BhcmE+CisKKzxzZWN0MiBpZD0iYmZkIj4KKzx0aXRsZT5Qcm9jZXNzaW5nIHRoZSBiaW5hcnkgaW1hZ2U8L3RpdGxlPgorPHBhcmE+CitUaGUgZmlyc3QgdGhpbmcgd2UgZG8gd2l0aCBhbiBpbnZlcnRlZCBwcm9maWxlIGlzIGF0dGVtcHQgdG8gb3BlbiB0aGUKK2JpbmFyeSBpbWFnZSAocmVtZW1iZXIgZWFjaCBpbnZlcnRlZCBwcm9maWxlIHNldCBpcyBvbmx5IGZvciBvbmUgYmluYXJ5CitpbWFnZSwgYnV0IG1heSBoYXZlIG1hbnkgc2FtcGxlIGZpbGVzIHRvIHByb2Nlc3MpLiBUaGUKKzx2YXJuYW1lPm9wX2JmZDwvdmFybmFtZT4gY2xhc3MgcHJvdmlkZXMgYW4gYWJzdHJhY3RlZCBpbnRlcmZhY2UgdG8KK3RoaXM7IGludGVybmFsbHkgaXQgdXNlcyA8ZmlsZW5hbWU+bGliYmZkPC9maWxlbmFtZT4uIFRoZSBtYWluIHB1cnBvc2UKK29mIHRoaXMgY2xhc3MgaXMgdG8gcHJvY2VzcyB0aGUgc3ltYm9scyBmb3IgdGhlIGJpbmFyeSBpbWFnZTsgdGhpcyBpcworYWxzbyB3aGVyZSBzeW1ib2wgZmlsdGVyaW5nIGhhcHBlbnMuIFRoaXMgaXMgYWN0dWFsbHkgcXVpdGUgdHJpY2t5LCBidXQKK3Nob3VsZCBiZSBjbGVhciBmcm9tIHRoZSBzb3VyY2UuCis8L3BhcmE+Cis8L3NlY3QyPgorCis8c2VjdDIgaWQ9InByb2Nlc3Npbmctc2FtcGxlLWZpbGVzIj4KKzx0aXRsZT5Qcm9jZXNzaW5nIHRoZSBzYW1wbGUgZmlsZXM8L3RpdGxlPgorPHBhcmE+CitUaGUgY2xhc3MgPHZhcm5hbWU+cHJvZmlsZV9jb250YWluZXI8L3Zhcm5hbWU+IGlzIGEgaG9sZC1hbGwgdGhhdAorY29udGFpbnMgYWxsIHRoZSBwcm9jZXNzZWQgcmVzdWx0cy4gSXQgaXMgYSBjb250YWluZXIgb2YKKzx2YXJuYW1lPnByb2ZpbGVfdDwvdmFybmFtZT4gb2JqZWN0cy4gVGhlCis8ZnVuY3Rpb24+YWRkX3NhbXBsZV9maWxlcygpPC9mdW5jdGlvbj4gbWV0aG9kIHVzZXMKKzxmaWxlbmFtZT5saWJkYjwvZmlsZW5hbWU+IHRvIG9wZW4gdGhlIGdpdmVuIHNhbXBsZSBmaWxlIGFuZCBhZGQgdGhlCitrZXkvdmFsdWUgdHlwZXMgdG8gdGhlIDx2YXJuYW1lPnByb2ZpbGVfdDwvdmFybmFtZT4uIE9uY2UgdGhpcyBoYXMgYmVlbgorZG9uZSwgPGZ1bmN0aW9uPnByb2ZpbGVfY29udGFpbmVyOjphZGQoKTwvZnVuY3Rpb24+IGlzIHBhc3NlZCB0aGUKKzx2YXJuYW1lPnByb2ZpbGVfdDwvdmFybmFtZT4gcGx1cyB0aGUgPHZhcm5hbWU+b3BfYmZkPC92YXJuYW1lPiBmb3IKK3Byb2Nlc3NpbmcuCis8L3BhcmE+Cis8cGFyYT4KKzxmdW5jdGlvbj5wcm9maWxlX2NvbnRhaW5lcjo6YWRkKCk8L2Z1bmN0aW9uPiB3YWxrcyB0aHJvdWdoIHRoZSBzeW1ib2xzCitjb2xsZWN0ZWQgaW4gdGhlIDx2YXJuYW1lPm9wX2JmZDwvdmFybmFtZT4uCis8ZnVuY3Rpb24+b3BfYmZkOjpnZXRfc3ltYm9sX3JhbmdlKCk8L2Z1bmN0aW9uPiBnaXZlcyB1cyB0aGUgc3RhcnQgYW5kCitlbmQgb2YgdGhlIHN5bWJvbCBhcyBhbiBvZmZzZXQgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIGJpbmFyeSBpbWFnZSwKK3RoZW4gd2UgaW50ZXJyb2dhdGUgdGhlIDx2YXJuYW1lPnByb2ZpbGVfdDwvdmFybmFtZT4gZm9yIHRoZSByZWxldmFudCBzYW1wbGVzCitmb3IgdGhhdCBvZmZzZXQgcmFuZ2UuIFdlIGNyZWF0ZSBhIDx2YXJuYW1lPnN5bWJvbF9lbnRyeTwvdmFybmFtZT4KK29iamVjdCBmb3IgdGhpcyBzeW1ib2wgYW5kIGZpbGwgaXQgaW4uIElmIG5lZWRlZCwgaGVyZSB3ZSBhbHNvIGNvbGxlY3QKK2RlYnVnIGluZm9ybWF0aW9uIGZyb20gdGhlIDx2YXJuYW1lPm9wX2JmZDwvdmFybmFtZT4sIGFuZCBwb3NzaWJseQorcmVjb3JkIHRoZSBkZXRhaWxlZCBzYW1wbGUgaW5mb3JtYXRpb24gKGFzIHVzZWQgYnkgPGNvbW1hbmQ+b3ByZXBvcnQKKy1kPC9jb21tYW5kPiBhbmQgPGNvbW1hbmQ+b3Bhbm5vdGF0ZTwvY29tbWFuZD4pLgorRmluYWxseSB0aGUgPHZhcm5hbWU+c3ltYm9sX2VudHJ5PC92YXJuYW1lPiBpcyBhZGRlZCB0bworYSBwcml2YXRlIGNvbnRhaW5lciBvZiA8dmFybmFtZT5wcm9maWxlX2NvbnRhaW5lcjwvdmFybmFtZT4gLSB0aGlzCis8dmFybmFtZT5zeW1ib2xfY29udGFpbmVyPC92YXJuYW1lPiBob2xkcyBhbGwgc3VjaCBwcm9jZXNzZWQgc3ltYm9scy4KKzwvcGFyYT4KKzwvc2VjdDI+CisKKzwvc2VjdDE+CisKKzxzZWN0MSBpZD0iZ2VuZXJhdGluZy1vdXRwdXQiPgorPHRpdGxlPkdlbmVyYXRpbmcgb3V0cHV0PC90aXRsZT4KKworPHBhcmE+CitBZnRlciB0aGUgcHJvY2Vzc2luZyBkZXNjcmliZWQgaW4gdGhlIHByZXZpb3VzIHNlY3Rpb24sIHdlJ3ZlIG5vdyBnb3QKK2Z1bGwgZGV0YWlscyBvZiB3aGF0IHdlIG5lZWQgdG8gb3V0cHV0IHN0b3JlZCBpbiB0aGUKKzx2YXJuYW1lPnByb2ZpbGVfY29udGFpbmVyPC92YXJuYW1lPiBvbiBhIHN5bWJvbC1ieS1zeW1ib2wgYmFzaXMuIFRvCitwcm9kdWNlIG91dHB1dCwgd2UgbmVlZCB0byByZXBsYXkgdGhhdCBkYXRhIGFuZCBmb3JtYXQgaXQgc3VpdGFibHkuCis8L3BhcmE+Cis8cGFyYT4KKzxjb21tYW5kPm9wcmVwb3J0PC9jb21tYW5kPiBmaXJzdCBhc2tzIHRoZQorPHZhcm5hbWU+cHJvZmlsZV9jb250YWluZXI8L3Zhcm5hbWU+IGZvciBhCis8dmFybmFtZT5zeW1ib2xfY29sbGVjdGlvbjwvdmFybmFtZT4gKHRoaXMgaXMgYWxzbyB3aGVyZSB0aHJlc2hvbGRpbmcKK2hhcHBlbnMpLgorVGhpcyBpcyBzb3J0ZWQsIHRoZW4gYQorPHZhcm5hbWU+b3ByZXBvcnRfZm9ybWF0dGVyPC92YXJuYW1lPiBpcyBpbml0aWFsaXNlZC4KK1RoaXMgb2JqZWN0IGluaXRpYWxpc2VzIGEgc2V0IG9mIGZpZWxkIGZvcm1hdHRlcnMgYXMgcmVxdWVzdGVkLiBUaGVuCis8ZnVuY3Rpb24+b3ByZXBvcnRfZm9ybWF0dGVyOjpvdXRwdXQoKTwvZnVuY3Rpb24+IGlzIGNhbGxlZC4gVGhpcworaXRlcmF0ZXMgdGhyb3VnaCB0aGUgKHNvcnRlZCkgPHZhcm5hbWU+c3ltYm9sX2NvbGxlY3Rpb248L3Zhcm5hbWU+OworZm9yIGVhY2ggZW50cnksIHRoZSBzZWxlY3RlZCBmaWVsZHMgKGFzIHNldCBieSB0aGUKKzx2YXJuYW1lPmZvcm1hdF9mbGFnczwvdmFybmFtZT4gb3B0aW9ucykgYXJlIG91dHB1dCBieSBjYWxsaW5nIHRoZQorZmllbGQgZm9ybWF0dGVycywgd2l0aCB0aGUgPHZhcm5hbWU+c3ltYm9sX2VudHJ5PC92YXJuYW1lPiBwYXNzZWQgaW4uCis8L3BhcmE+CisKKzwvc2VjdDE+CisKKzwvY2hhcHRlcj4KKworPGNoYXB0ZXIgaWQ9ImV4dCI+Cis8dGl0bGU+RXh0ZW5kZWQgRmVhdHVyZSBJbnRlcmZhY2U8L3RpdGxlPgorCis8c2VjdDEgaWQ9ImV4dC1pbnRybyI+Cis8dGl0bGU+SW50cm9kdWN0aW9uPC90aXRsZT4KKworPHBhcmE+CitUaGUgRXh0ZW5kZWQgRmVhdHVyZSBJbnRlcmZhY2UgaXMgYSBzdGFuZGFyZCBjYWxsYmFjayBpbnRlcmZhY2UgCitkZXNpZ25lZCB0byBhbGxvdyBleHRlbnNpb24gdG8gdGhlIE9Qcm9maWxlIGRhZW1vbidzIHNhbXBsZSBwcm9jZXNzaW5nLiAKK0VhY2ggZmVhdHVyZSBkZWZpbmVzIGEgc2V0IG9mIGNhbGxiYWNrIGhhbmRsZXJzIHdoaWNoIGNhbiBiZSBlbmFibGVkIG9yIAorZGlzYWJsZWQgdGhyb3VnaCB0aGUgT1Byb2ZpbGUgZGFlbW9uJ3MgY29tbWFuZC1saW5lIG9wdGlvbi4KK1RoaXMgaW50ZXJmYWNlIGNhbiBiZSB1c2VkIHRvIGltcGxlbWVudCBzdXBwb3J0IGZvciBhcmNoaXRlY3R1cmUtc3BlY2lmaWMKK2ZlYXR1cmVzIG9yIGZlYXR1cmVzIG5vdCBjb21tb25seSB1c2VkIGJ5IGdlbmVyYWwgT1Byb2ZpbGUgdXNlcnMuIAorPC9wYXJhPgorCis8L3NlY3QxPgorCis8c2VjdDEgaWQ9ImV4dC1uYW1lLWFuZC1oYW5kbGVycyI+Cis8dGl0bGU+RmVhdHVyZSBOYW1lIGFuZCBIYW5kbGVyczwvdGl0bGU+CisKKzxwYXJhPgorRWFjaCBleHRlbmRlZCBmZWF0dXJlIGhhcyBhbiBlbnRyeSBpbiB0aGUgPHZhcm5hbWU+ZXh0X2ZlYXR1cmVfdGFibGU8L3Zhcm5hbWU+CitpbiA8ZmlsZW5hbWU+b3BkX2V4dGVuZGVkLmNwcDwvZmlsZW5hbWU+LiBFYWNoIGVudHJ5IGNvbnRhaW5zIGEgZmVhdHVyZSBuYW1lLAorYW5kIGEgY29ycmVzcG9uZGluZyBzZXQgb2YgaGFuZGxlcnMuIEZlYXR1cmUgbmFtZSBpcyBhIHVuaXF1ZSBzdHJpbmcsIHdoaWNoIGlzCit1c2VkIHRvIGlkZW50aWZ5IGEgZmVhdHVyZSBpbiB0aGUgdGFibGUuIEVhY2ggZmVhdHVyZSBwcm92aWRlcyBhIHNldAorb2YgaGFuZGxlcnMsIHdoaWNoIHdpbGwgYmUgZXhlY3V0ZWQgYnkgdGhlIE9Qcm9maWxlIGRhZW1vbiBmcm9tIHByZS1kZXRlcm1pbmVkCitsb2NhdGlvbnMgdG8gcGVyZm9ybSBjZXJ0YWluIHRhc2tzLiBBdCBydW50aW1lLCB0aGUgT1Byb2ZpbGUgZGFlbW9uIGNhbGxzIGEgZmVhdHVyZQoraGFuZGxlciB3cmFwcGVyIGZyb20gb25lIG9mIHRoZSBwcmVkZXRlcm1pbmVkIGxvY2F0aW9ucyB0byBjaGVjayB3aGV0aGVyCithbiBleHRlbmRlZCBmZWF0dXJlIGlzIGVuYWJsZWQsIGFuZCB3aGV0aGVyIGEgcGFydGljdWxhciBoYW5kbGVyIGV4aXN0cy4KK09ubHkgdGhlIGhhbmRsZXJzIG9mIHRoZSBlbmFibGVkIGZlYXR1cmUgd2lsbCBiZSBleGVjdXRlZC4KKzwvcGFyYT4KKworPC9zZWN0MT4KKworPHNlY3QxIGlkPSJleHQtZW5hYmxlIj4KKzx0aXRsZT5FbmFibGluZyBGZWF0dXJlczwvdGl0bGU+CisKKzxwYXJhPgorRWFjaCBmZWF0dXJlIGlzIGVuYWJsZWQgdXNpbmcgdGhlIE9Qcm9maWxlIGRhZW1vbiAob3Byb2ZpbGVkKSBjb21tYW5kLWxpbmUKK29wdGlvbiAiLS1leHQtZmVhdHVyZT0mbHQ7ZXh0ZW5kZWQtZmVhdHVyZS1uYW1lJmd0OzpbYXJnc10iLiBUaGUKKyJleHRlbmRlZC1mZWF0dXJlLW5hbWUiIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSBmZWF0dXJlIHRvIGJlIGVuYWJsZWQuCitUaGUgb3B0aW9uYWwgImFyZ3MiIGlzIHBhc3NlZCBpbnRvIHRoZSBmZWF0dXJlLXNwZWNpZmljIGluaXRpYWxpemF0aW9uIGhhbmRsZXIKKyg8ZnVuY3Rpb24+ZXh0X2luaXQ8L2Z1bmN0aW9uPikuIEN1cnJlbnRseSwgb25seSBvbmUgZXh0ZW5kZWQgZmVhdHVyZSBjYW4gYmUKK2VuYWJsZWQgYXQgYSB0aW1lLgorPC9wYXJhPgorCis8L3NlY3QxPgorCis8c2VjdDEgaWQ9ImV4dC10eXBlcy1vZi1oYW5kbGVycyI+Cis8dGl0bGU+VHlwZSBvZiBIYW5kbGVyczwvdGl0bGU+CisKKzxwYXJhPgorRWFjaCBmZWF0dXJlIGlzIHJlc3BvbnNpYmxlIGZvciBwcm92aWRpbmcgaXRzIG93biBzZXQgb2YgaGFuZGxlcnMuCitUeXBlcyBvZiBoYW5kbGVyIGFyZToKKzwvcGFyYT4KKworPHNlY3QyIGlkPSJleHRfaW5pdCI+Cis8dGl0bGU+ZXh0X2luaXQgSGFuZGxlcjwvdGl0bGU+CisKKzxwYXJhPgorImV4dF9pbml0IiBoYW5kbGVzIGluaXRpYWxpemF0aW9uIG9mIGFuIGV4dGVuZGVkIGZlYXR1cmUuIEl0IHRha2VzCisiYXJncyIgcGFyYW1ldGVyIHdoaWNoIGlzIHBhc3NlZCBpbiB0aHJvdWdoIHRoZSAib3Byb2ZpbGVkIC0tZXh0LWZlYXR1cmU9Jmx0OworZXh0ZW5kZWQtZmVhdHVyZS1uYW1lJmd0OzpbYXJnc10iLiBUaGlzIGhhbmRsZXIgaXMgZXhlY3V0ZWQgaW4gdGhlIGZ1bmN0aW9uCis8ZnVuY3Rpb24+b3BkX29wdGlvbnMoKTwvZnVuY3Rpb24+IGluIHRoZSBmaWxlIDxmaWxlbmFtZT5kYWVtb24vb3Byb2ZpbGVkLmMKKzwvZmlsZW5hbWU+LgorPC9wYXJhPgorCis8bm90ZT4KKzxwYXJhPgorVGhlIGV4dF9pbml0IGhhbmRsZXIgaXMgcmVxdWlyZWQgZm9yIGFsbCBmZWF0dXJlcy4KKzwvcGFyYT4KKzwvbm90ZT4KKworPC9zZWN0Mj4KKworPHNlY3QyIGlkPSJleHRfcHJpbnRfc3RhdHMiPgorPHRpdGxlPmV4dF9wcmludF9zdGF0cyBIYW5kbGVyPC90aXRsZT4KKworPHBhcmE+CisiZXh0X3ByaW50X3N0YXRzIiBoYW5kbGVzIHRoZSBleHRlbmRlZCBmZWF0dXJlIHN0YXRpc3RpY3MgcmVwb3J0LiBJdCBhZGRzCithIG5ldyBzZWN0aW9uIGluIHRoZSBPUHJvZmlsZSBkYWVtb24gc3RhdGlzdGljcyByZXBvcnQsIHdoaWNoIGlzIG5vcm1hbGx5CitvdXRwdXRlZCB0byB0aGUgZmlsZQorPGZpbGVuYW1lPi92YXIvbGliL29wcm9maWxlL3NhbXBsZXMvb3Byb2ZpbGVkLmxvZzwvZmlsZW5hbWU+LgorVGhpcyBoYW5kbGVyIGlzIGV4ZWN1dGVkIGluIHRoZSBmdW5jdGlvbiA8ZnVuY3Rpb24+b3BkX3ByaW50X3N0YXRzKCk8L2Z1bmN0aW9uPgoraW4gdGhlIGZpbGUgPGZpbGVuYW1lPmRhZW1vbi9vcGRfc3RhdHMuYzwvZmlsZW5hbWU+LgorPC9wYXJhPgorCis8L3NlY3QyPgorCis8c2VjdDIgaWQ9ImV4dF9zZmlsZV9oYW5kbGVycyI+Cis8dGl0bGU+ZXh0X3NmaWxlIEhhbmRsZXI8L3RpdGxlPgorCis8cGFyYT4KKyJleHRfc2ZpbGUiIGNvbnRhaW5zIGEgc2V0IG9mIGhhbmRsZXJzIHJlbGF0ZWQgdG8gb3BlcmF0aW9ucyBvbiB0aGUgZXh0ZW5kZWQKK3NhbXBsZSBmaWxlcyAoc2FtcGxlIGZpbGVzIGZvciBldmVudHMgcmVsYXRlZCB0byBleHRlbmRlZCBmZWF0dXJlKS4KK1RoZXNlIG9wZXJhdGlvbnMgaW5jbHVkZSA8ZnVuY3Rpb24+Y3JlYXRlX3NmaWxlKCk8L2Z1bmN0aW9uPiwKKzxmdW5jdGlvbj5zZmlsZV9kdXAoKTwvZnVuY3Rpb24+LCA8ZnVuY3Rpb24+Y2xvc2Vfc2ZpbGUoKTwvZnVuY3Rpb24+LAorPGZ1bmN0aW9uPnN5bmNfc2ZpbGUoKTwvZnVuY3Rpb24+LCBhbmQgPGZ1bmN0aW9uPmdldF9maWxlKCk8L2Z1bmN0aW9uPgorYXMgZGVmaW5lZCBpbiA8ZmlsZW5hbWU+ZGFlbW9uL29wZF9zZmlsZS5jPC9maWxlbmFtZT4uCitBbiBhZGRpdGlvbmFsIGZpZWxkLCA8dmFybmFtZT5vZGJfdCAqIGV4dF9maWxlPC92YXJuYW1lPiwgaXMgYWRkZWQgdG8gdGhlIAorPHZhcm5hbWU+c3RydWN0IHNmaWxlPC92YXJuYW1lPiBmb3Igc3RvcmluZyBleHRlbmRlZCBzYW1wbGUgZmlsZXMKK2luZm9ybWF0aW9uLiAKKworPC9wYXJhPgorCis8L3NlY3QyPgorCis8L3NlY3QxPgorCis8c2VjdDEgaWQ9ImV4dC1pbXBsZW1lbnRhdGlvbiI+Cis8dGl0bGU+RXh0ZW5kZWQgRmVhdHVyZSBSZWZlcmVuY2UgSW1wbGVtZW50YXRpb248L3RpdGxlPgorCis8c2VjdDIgaWQ9ImV4dC1pYnMiPgorPHRpdGxlPkluc3RydWN0aW9uLUJhc2VkIFNhbXBsaW5nIChJQlMpPC90aXRsZT4KKworPHBhcmE+CitBbiBleGFtcGxlIG9mIGV4dGVuZGVkIGZlYXR1cmUgaW1wbGVtZW50YXRpb24gY2FuIGJlIHNlZW4gYnkKK2V4YW1pbmluZyB0aGUgQU1EIEluc3RydWN0aW9uLUJhc2VkIFNhbXBsaW5nIHN1cHBvcnQuCis8L3BhcmE+CisKKzxzZWN0MyBpZD0iaWJzLWluaXQiPgorPHRpdGxlPklCUyBJbml0aWFsaXphdGlvbjwvdGl0bGU+CisKKzxwYXJhPgorSW5zdHJ1Y3Rpb24tQmFzZWQgU2FtcGxpbmcgKElCUykgaXMgYSBuZXcgcGVyZm9ybWFuY2UgbWVhc3VyZW1lbnQgdGVjaG5pcXVlCithdmFpbGFibGUgb24gQU1EIEZhbWlseSAxMGggcHJvY2Vzc29ycy4gRW5hYmxpbmcgSUJTIHByb2ZpbGluZyBpcyBkb25lIHNpbXBseQorYnkgc3BlY2lmeWluZyBJQlMgcGVyZm9ybWFuY2UgZXZlbnRzIHRocm91Z2ggdGhlICItLWV2ZW50PSIgb3B0aW9ucy4KKzwvcGFyYT4KKworPHNjcmVlbj4KK29wY29udHJvbCAtLWV2ZW50PUlCU19GRVRDSF9YWFg6Jmx0O2NvdW50Jmd0OzombHQ7dW0mZ3Q7OiZsdDtrZXJuZWwmZ3Q7OiZsdDt1c2VyJmd0Oworb3Bjb250cm9sIC0tZXZlbnQ9SUJTX09QX1hYWDombHQ7Y291bnQmZ3Q7OiZsdDt1bSZndDs6Jmx0O2tlcm5lbCZndDs6Jmx0O3VzZXImZ3Q7CisKK05vdGU6ICogQ291bnQgYW5kIHVuaXRtYXNrIGZvciBhbGwgSUJTIGZldGNoIGV2ZW50cyBtdXN0IGJlIHRoZSBzYW1lLAorCWFzIGRvIHRob3NlIGZvciBJQlMgb3AuCis8L3NjcmVlbj4KKworPHBhcmE+CitJQlMgcGVyZm9ybWFuY2UgZXZlbnRzIGFyZSBsaXN0ZWQgaW4gPGZ1bmN0aW9uPm9wY29udHJvbCAtLWxpc3QtZXZlbnRzPC9mdW5jdGlvbj4uCitXaGVuIHVzZXJzIHNwZWNpZnkgdGhlc2UgZXZlbnRzLCBvcGNvbnRyb2wgdmVyaWZpZXMgdGhlbSB1c2luZyBvcGhlbHAsIHdoaWNoCitjaGVja3MgZm9yIHRoZSA8dmFybmFtZT5leHQ6aWJzX2ZldGNoPC92YXJuYW1lPiBvciA8dmFybmFtZT5leHQ6aWJzX29wPC92YXJuYW1lPgordGFnIGluIDxmaWxlbmFtZT5ldmVudHMveDg2LTY0L2ZhbWlseTEwL2V2ZW50czwvZmlsZW5hbWU+IGZpbGUuCitUaGVuLCBpdCBjb25maWd1cmVzIHRoZSBkcml2ZXIgaW50ZXJmYWNlICgvZGV2L29wcm9maWxlL2lic19mZXRjaC8uLi4gYW5kCisvZGV2L29wcm9maWxlL2lic19vcC8uLi4pIGFuZCBzdGFydHMgdGhlIE9Qcm9maWxlIGRhZW1vbiBhcyBmb2xsb3dzLgorPC9wYXJhPgorCis8c2NyZWVuPgorb3Byb2ZpbGVkIFwKKyAgICAtLWV4dC1mZWF0dXJlPWliczpcCisJZmV0Y2g6Jmx0O0lCU19GRVRDSF9FVkVOVDEmZ3Q7LCZsdDtJQlNfRkVUQ0hfRVZFTlQyJmd0OywuLi4sOiZsdDtJQlMgZmV0Y2ggY291bnQmZ3Q7OiZsdDtJQlMgRmV0Y2ggdW0mZ3Q7fFwKKwlvcDombHQ7SUJTX09QX0VWRU5UMSZndDssJmx0O0lCU19PUF9FVkVOVDImZ3Q7LC4uLiw6Jmx0O0lCUyBvcCBjb3VudCZndDs6Jmx0O0lCUyBvcCB1bSZndDsKKzwvc2NyZWVuPgorCis8cGFyYT4KK0hlcmUsIHRoZSBPUHJvZmlsZSBkYWVtb24gcGFyc2VzIHRoZSA8dmFybmFtZT4tLWV4dC1mZWF0dXJlPC92YXJuYW1lPgorb3B0aW9uIGFuZCBjaGVja3MgdGhlIGZlYXR1cmUgbmFtZSAoImlicyIpIGJlZm9yZSBjYWxsaW5nIHRoZSAKK3RoZSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiB0byBoYW5kbGUgdGhlIHN0cmluZworY29udGFpbmluZyBJQlMgZXZlbnRzLCBjb3VudHMsIGFuZCB1bml0bWFza3MuCitUaGVuLCBpdCBzdG9yZXMgZWFjaCBldmVudCBpbiB0aGUgSUJTIHZpcnR1YWwtY291bnRlciB0YWJsZQorKDx2YXJuYW1lPnN0cnVjdCBvcGRfZXZlbnQgaWJzX3ZjW09QX01BWF9JQlNfQ09VTlRFUlNdPC92YXJuYW1lPikgYW5kCitzdG9yZXMgdGhlIGV2ZW50IGluZGV4IGluIHRoZSBJQlMgVmlydHVhbCBDb3VudGVyIEluZGV4IChWQ0kpIG1hcAorKDx2YXJuYW1lPmlic192Y2lfbWFwW09QX01BWF9JQlNfQ09VTlRFUlNdPC92YXJuYW1lPikgd2l0aCBJQlMgZXZlbnQgdmFsdWUKK2FzIHRoZSBtYXAga2V5LgorPC9wYXJhPgorPC9zZWN0Mz4KKworPHNlY3QzIGlkPSJpYnMtZGF0YS1wcm9jZXNzaW5nIj4KKzx0aXRsZT5JQlMgRGF0YSBQcm9jZXNzaW5nPC90aXRsZT4KKworPHBhcmE+CitEdXJpbmcgYSBwcm9maWxlIHNlc3Npb24sIHRoZSBPUHJvZmlsZSBkYWVtb24gaWRlbnRpZmllcyBJQlMgc2FtcGxlcyBpbiB0aGUgCitldmVudCBidWZmZXIgdXNpbmcgdGhlIDx2YXJuYW1lPiJJQlNfRkVUQ0hfQ09ERSI8L3Zhcm5hbWU+IG9yIAorPHZhcm5hbWU+IklCU19PUF9DT0RFIjwvdmFybmFtZT4uIFRoZXNlIGNvZGVzIHRyaWdnZXIgdGhlIGhhbmRsZXJzIAorPGZ1bmN0aW9uPmNvZGVfaWJzX2ZldGNoX3NhbXBsZSgpPC9mdW5jdGlvbj4gb3IgCis8ZnVuY3Rpb24+Y29kZV9pYnNfb3Bfc2FtcGxlKCk8L2Z1bmN0aW9uPiBsaXN0ZWQgaW4gdGhlCis8dmFybmFtZT5oYW5kbGVyX3QgaGFuZGxlcnNbXTwvdmFybmFtZT4gdmVjdG9yIGluIAorPGZpbGVuYW1lPmRhZW1vbi9vcGRfdHJhbnMuYyA8L2ZpbGVuYW1lPi4gVGhlc2UgaGFuZGxlcnMgYXJlIHJlc3BvbnNpYmxlIGZvcgorcHJvY2Vzc2luZyBJQlMgc2FtcGxlcyBhbmQgdHJhbnNsYXRlIHRoZW0gaW50byBJQlMgcGVyZm9ybWFuY2UgZXZlbnRzLgorPC9wYXJhPgorCis8cGFyYT4KK1VubGlrZSB0cmFkaXRpb25hbCBwZXJmb3JtYW5jZSBldmVudHMsIGVhY2ggSUJTIHNhbXBsZSBjYW4gYmUgZGVyaXZlZCBpbnRvIAorbXVsdGlwbGUgSUJTIHBlcmZvcm1hbmNlIGV2ZW50cy4gRm9yIGVhY2ggZXZlbnQgdGhhdCB0aGUgdXNlciBzcGVjaWZpZXMsCithIGNvbWJpbmF0aW9uIG9mIGJpdHMgZnJvbSBNb2RlbC1TcGVjaWZpYyBSZWdpc3RlcnMgKE1TUikgYXJlIGNoZWNrZWQKK2FnYWluc3QgdGhlIGJpdG1hc2sgZGVmaW5pbmcgdGhlIGV2ZW50LiBJZiB0aGUgY29uZGl0aW9uIGlzIG1ldCwgdGhlIGV2ZW50Cit3aWxsIHRoZW4gYmUgcmVjb3JkZWQuIFRoZSBkZXJpdmF0aW9uIGxvZ2ljIGlzIGluIHRoZSBmaWxlcworPGZpbGVuYW1lPmRhZW1vbi9vcGRfaWJzX21hY3JvLmg8L2ZpbGVuYW1lPiBhbmQKKzxmaWxlbmFtZT5kYWVtb24vb3BkX2lic190cmFucy5baCxjXTwvZmlsZW5hbWU+LiAKKzwvcGFyYT4KKworPC9zZWN0Mz4KKworPHNlY3QzIGlkPSJpYnMtc2FtcGxlLWZpbGUiPgorPHRpdGxlPklCUyBTYW1wbGUgRmlsZTwvdGl0bGU+CisKKzxwYXJhPgorVHJhZGl0aW9uYWxseSwgc2FtcGxlIGZpbGUgaW5mb3JtYXRpb24gPHZhcm5hbWU+KG9kYl90KTwvdmFybmFtZT4gaXMgc3RvcmVkCitpbiB0aGUgPHZhcm5hbWU+c3RydWN0IHNmaWxlOjpvZGJfdCBmaWxlW09QX01BWF9DT1VOVEVSXTwvdmFybmFtZT4uCitDdXJyZW50bHksIDx2YXJuYW1lPk9QX01BWF9DT1VOVEVSPC92YXJuYW1lPiBpcyA4IG9uIG5vbi1hbHBoYSwgYW5kIDIwIG9uCithbHBoYS1iYXNlZCBzeXN0ZW0uIEV2ZW50IGluZGV4ICh0aGUgY291bnRlciBudW1iZXIgb24gd2hpY2ggdGhlIGV2ZW50CitpcyBjb25maWd1cmVkKSBpcyB1c2VkIHRvIGFjY2VzcyB0aGUgY29ycmVzcG9uZGluZyBlbnRyeSBpbiB0aGUgYXJyYXkuCitVbmxpa2UgdGhlIHRyYWRpdGlvbmFsIHBlcmZvcm1hbmNlIGV2ZW50LCBJQlMgZG9lcyBub3QgdXNlIHRoZSBhY3R1YWwKK2NvdW50ZXIgcmVnaXN0ZXJzIChpLmUuIDxmaWxlbmFtZT4vZGV2L29wcm9maWxlLzAsMSwyLDM8L2ZpbGVuYW1lPikuCitBbHNvLCB0aGUgbnVtYmVyIG9mIHBlcmZvcm1hbmNlIGV2ZW50cyBnZW5lcmF0ZWQgYnkgSUJTIGNvdWxkIGJlIGxhcmdlciB0aGFuCis8dmFybmFtZT5PUF9NQVhfQ09VTlRFUjwvdmFybmFtZT4gKGN1cnJlbnRseSB1cHRvIDEzIElCUy1mZXRjaCBhbmQgNDYgSUJTLW9wIAorZXZlbnRzKS4gVGhlcmVmb3JlIElCUyByZXF1aXJlcyBhIHNwZWNpYWwgZGF0YSBzdHJ1Y3R1cmUgYW5kIHNmaWxlCitoYW5kbGVycyAoPHZhcm5hbWU+c3RydWN0IG9wZF9leHRfc2ZpbGVfaGFuZGxlcnM8L3Zhcm5hbWU+KSBmb3IgbWFuYWdpbmcKK0lCUyBzYW1wbGUgZmlsZXMuIElCUy1zYW1wbGUtZmlsZSBpbmZvcm1hdGlvbiBpcyBzdG9yZWQgaW4gYSBtZW1vcnkgCithbGxvY2F0ZWQgYnkgaGFuZGxlciA8ZnVuY3Rpb24+aWJzX3NmaWxlX2NyZWF0ZSgpPC9mdW5jdGlvbj4sIHdoaWNoIGNhbgorYmUgYWNjZXNzZWQgdGhyb3VnaCA8dmFybmFtZT5zdHJ1Y3Qgc2ZpbGU6Om9kYl90ICogZXh0X2ZpbGVzPC92YXJuYW1lPi4KKzwvcGFyYT4KKworPC9zZWN0Mz4KKworPC9zZWN0Mj4KKworPC9zZWN0MT4KKworPC9jaGFwdGVyPgorCis8Z2xvc3NhcnkgaWQ9Imdsb3NzYXJ5Ij4KKzx0aXRsZT5HbG9zc2FyeSBvZiBPUHJvZmlsZSBzb3VyY2UgY29uY2VwdHMgYW5kIHR5cGVzPC90aXRsZT4KKworPGdsb3NzZW50cnk+PGdsb3NzdGVybT5hcHBsaWNhdGlvbiBpbWFnZTwvZ2xvc3N0ZXJtPgorPGdsb3NzZGVmPjxwYXJhPgorVGhlIHByaW1hcnkgYmluYXJ5IGltYWdlIHVzZWQgYnkgYW4gYXBwbGljYXRpb24uIFRoaXMgaXMgZGVyaXZlZAorZnJvbSB0aGUga2VybmVsIGFuZCBjb3JyZXNwb25kcyB0byB0aGUgYmluYXJ5IHN0YXJ0ZWQgdXBvbiBydW5uaW5nCithbiBhcHBsaWNhdGlvbjogZm9yIGV4YW1wbGUsIDxmaWxlbmFtZT4vYmluL2Jhc2g8L2ZpbGVuYW1lPi4KKzwvcGFyYT48L2dsb3NzZGVmPjwvZ2xvc3NlbnRyeT4KKworPGdsb3NzZW50cnk+PGdsb3NzdGVybT5iaW5hcnkgaW1hZ2U8L2dsb3NzdGVybT4KKzxnbG9zc2RlZj48cGFyYT4KK0FuIEVMRiBmaWxlIGNvbnRhaW5pbmcgZXhlY3V0YWJsZSBjb2RlOiB0aGlzIGluY2x1ZGVzIGtlcm5lbCBtb2R1bGVzLAordGhlIGtlcm5lbCBpdHNlbGYgKGEuay5hLiA8ZmlsZW5hbWU+dm1saW51eDwvZmlsZW5hbWU+KSwgc2hhcmVkIGxpYnJhcmllcywKK2FuZCBhcHBsaWNhdGlvbiBiaW5hcmllcy4KKzwvcGFyYT48L2dsb3NzZGVmPjwvZ2xvc3NlbnRyeT4KKworPGdsb3NzZW50cnk+PGdsb3NzdGVybT5kY29va2llPC9nbG9zc3Rlcm0+Cis8Z2xvc3NkZWY+PHBhcmE+CitTaG9ydCBmb3IgImRlbnRyeSBjb29raWUiLiBBIHVuaXF1ZSBJRCB0aGF0IGNhbiBiZSBsb29rZWQgdXAgdG8gcHJvdmlkZQordGhlIGZ1bGwgcGF0aCBuYW1lIG9mIGEgYmluYXJ5IGltYWdlLgorPC9wYXJhPjwvZ2xvc3NkZWY+PC9nbG9zc2VudHJ5PgorCis8Z2xvc3NlbnRyeT48Z2xvc3N0ZXJtPmRlcGVuZGVudCBpbWFnZTwvZ2xvc3N0ZXJtPgorPGdsb3NzZGVmPjxwYXJhPgorQSBiaW5hcnkgaW1hZ2UgdGhhdCBpcyBkZXBlbmRlbnQgdXBvbiBhbiBhcHBsaWNhdGlvbiwgdXNlZCB3aXRoCitwZXItYXBwbGljYXRpb24gc2VwYXJhdGlvbi4gTW9zdCBjb21tb25seSwgc2hhcmVkIGxpYnJhcmllcy4gRm9yIGV4YW1wbGUsCitpZiA8ZmlsZW5hbWU+L2Jpbi9iYXNoPC9maWxlbmFtZT4gaXMgcnVubmluZyBhbmQgd2UgdGFrZQorc29tZSBzYW1wbGVzIGluc2lkZSB0aGUgQyBsaWJyYXJ5IGl0c2VsZiBkdWUgdG8gPGNvbW1hbmQ+YmFzaDwvY29tbWFuZD4KK2NhbGxpbmcgbGlicmFyeSBjb2RlLCB0aGVuIHRoZSBpbWFnZSA8ZmlsZW5hbWU+L2xpYi9saWJjLnNvPC9maWxlbmFtZT4KK3dvdWxkIGJlIGRlcGVuZGVudCB1cG9uIDxmaWxlbmFtZT4vYmluL2Jhc2g8L2ZpbGVuYW1lPi4KKzwvcGFyYT48L2dsb3NzZGVmPjwvZ2xvc3NlbnRyeT4KKworPGdsb3NzZW50cnk+PGdsb3NzdGVybT5tZXJnaW5nPC9nbG9zc3Rlcm0+Cis8Z2xvc3NkZWY+PHBhcmE+CitUaGlzIHJlZmVycyB0byB0aGUgYWJpbGl0eSB0byBtZXJnZSBzZXZlcmFsIGRpc3RpbmN0IHNhbXBsZSBmaWxlcworaW50byBvbmUgc2V0IG9mIGRhdGEgYXQgcnVudGltZSwgaW4gdGhlIHBvc3QtcHJvZmlsaW5nIHRvb2xzLiBGb3IgZXhhbXBsZSwKK3Blci10aHJlYWQgc2FtcGxlIGZpbGVzIGNhbiBiZSBtZXJnZWQgaW50byBvbmUgc2V0IG9mIGRhdGEsIGJlY2F1c2UKK3RoZXkgYXJlIGNvbXBhdGlibGUgKGkuZS4gdGhlIGFnZ3JlZ2F0aW9uIG9mIHRoZSBkYXRhIGlzIG1lYW5pbmdmdWwpLAorYnV0IGl0J3Mgbm90IHBvc3NpYmxlIHRvIG1lcmdlIHNhbXBsZSBmaWxlcyBmb3IgdHdvIGRpZmZlcmVudCBldmVudHMsCitiZWNhdXNlIHRoZXJlIHdvdWxkIGJlIG5vIHVzZWZ1bCBtZWFuaW5nIHRvIHRoZSByZXN1bHRzLgorPC9wYXJhPjwvZ2xvc3NkZWY+PC9nbG9zc2VudHJ5PgorCis8Z2xvc3NlbnRyeT48Z2xvc3N0ZXJtPnByb2ZpbGUgY2xhc3M8L2dsb3NzdGVybT4KKzxnbG9zc2RlZj48cGFyYT4KK0EgY29sbGVjdGlvbiBvZiBwcm9maWxlIGRhdGEgdGhhdCBoYXMgYmVlbiBjb2xsZWN0ZWQgdW5kZXIgdGhlIHNhbWUKK2NsYXNzIHRlbXBsYXRlLiBGb3IgZXhhbXBsZSwgaWYgd2UncmUgdXNpbmcgPGNvbW1hbmQ+b3ByZXBvcnQ8L2NvbW1hbmQ+Cit0byBzaG93IHJlc3VsdHMgYWZ0ZXIgcHJvZmlsaW5nIHdpdGggdHdvIHBlcmZvcm1hbmNlIGNvdW50ZXJzIGVuYWJsZWQKK3Byb2ZpbGluZyA8Y29uc3RhbnQ+REFUQV9NRU1fUkVGUzwvY29uc3RhbnQ+IGFuZCA8Y29uc3RhbnQ+Q1BVX0NMS19VTkhBTFRFRDwvY29uc3RhbnQ+LAordGhlcmUgd291bGQgYmUgdHdvIHByb2ZpbGUgY2xhc3Nlcywgb25lIGZvciBlYWNoIGV2ZW50LiBPciBpZiB3ZSdyZSBvbgorYW4gU01QIHN5c3RlbSBhbmQgZG9pbmcgcGVyLWNwdSBwcm9maWxpbmcsIGFuZCB3ZSByZXF1ZXN0Cis8Y29tbWFuZD5vcHJlcG9ydDwvY29tbWFuZD4gdG8gc2hvdyByZXN1bHRzIGZvciBlYWNoIENQVSBzaWRlLWJ5LXNpZGUsCit0aGVyZSB3b3VsZCBiZSBhIHByb2ZpbGUgY2xhc3MgZm9yIGVhY2ggQ1BVLgorPC9wYXJhPjwvZ2xvc3NkZWY+PC9nbG9zc2VudHJ5PgorCis8Z2xvc3NlbnRyeT48Z2xvc3N0ZXJtPnByb2ZpbGUgc3BlY2lmaWNhdGlvbjwvZ2xvc3N0ZXJtPgorPGdsb3NzZGVmPjxwYXJhPgorVGhlIHBhcmFtZXRlcnMgdGhlIHVzZXIgcGFzc2VzIHRvIHRoZSBwb3N0LXByb2ZpbGluZyB0b29scyB0aGF0IGxpbWl0Cit3aGF0IHNhbXBsZSBmaWxlcyBhcmUgdXNlZC4gVGhpcyBzcGVjaWZpY2F0aW9uIGlzIG1hdGNoZWQgYWdhaW5zdAordGhlIGF2YWlsYWJsZSBzYW1wbGUgZmlsZXMgdG8gZ2VuZXJhdGUgYSBzZWxlY3Rpb24gb2YgcHJvZmlsZSBkYXRhLgorPC9wYXJhPjwvZ2xvc3NkZWY+PC9nbG9zc2VudHJ5PgorCis8Z2xvc3NlbnRyeT48Z2xvc3N0ZXJtPnByb2ZpbGUgdGVtcGxhdGU8L2dsb3NzdGVybT4KKzxnbG9zc2RlZj48cGFyYT4KK1RoZSBwYXJhbWV0ZXJzIHRoYXQgZGVmaW5lIHdoYXQgZ29lcyBpbiBhIHBhcnRpY3VsYXIgcHJvZmlsZSBjbGFzcy4KK1RoaXMgaW5jbHVkZXMgYSBzeW1ib2xpYyBuYW1lIChlLmcuICJjcHU6MSIpIGFuZCB0aGUgY29kZS11c2FibGUKK2VxdWl2YWxlbnQuCis8L3BhcmE+PC9nbG9zc2RlZj48L2dsb3NzZW50cnk+CisKKzwvZ2xvc3Nhcnk+CisKKzwvYm9vaz4KZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2RvYy9vcC1qaXQtZGV2ZWwuaHRtbCBiL29wcm9maWxlLTAuOS43L2RvYy9vcC1qaXQtZGV2ZWwuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODIzNjg4Ci0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvZG9jL29wLWppdC1kZXZlbC5odG1sCkBAIC0wLDAgKzEsNDU1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS0xIj8+Cis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtc3RyaWN0LmR0ZCI+Cis8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+CisgIDxoZWFkPgorICAgIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiIC8+CisgICAgPHRpdGxlPk9Qcm9maWxlIEpJVCBhZ2VudCBkZXZlbG9wZXIgZ3VpZGU8L3RpdGxlPgorICAgIDxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzUuMiIgLz4KKyAgPC9oZWFkPgorICA8Ym9keT4KKyAgICA8ZGl2IGNsYXNzPSJib29rIiB0aXRsZT0iT1Byb2ZpbGUgSklUIGFnZW50IGRldmVsb3BlciBndWlkZSI+CisgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgorICAgICAgICA8ZGl2PgorICAgICAgICAgIDxkaXY+CisgICAgICAgICAgICA8aDEgY2xhc3M9InRpdGxlIj48YSBpZD0ib3Byb2ZpbGUtZGV2ZWwtZ3VpZGUiPjwvYT5PUHJvZmlsZSBKSVQgYWdlbnQgZGV2ZWxvcGVyIGd1aWRlPC9oMT4KKyAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICA8ZGl2PgorICAgICAgICAgICAgPGRpdiBjbGFzcz0iYXV0aG9yZ3JvdXAiPgorICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhdXRob3IiPgorICAgICAgICAgICAgICAgIDxoMyBjbGFzcz0iYXV0aG9yIj48c3BhbiBjbGFzcz0iZmlyc3RuYW1lIj5NYXluYXJkPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3VybmFtZSI+Sm9obnNvbjwvc3Bhbj48L2gzPgorICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFmZmlsaWF0aW9uIj4KKyAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFkZHJlc3MiPgorICAgICAgICAgICAgICAgICAgICA8cD4KKyAgICAgICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0iZW1haWwiPiZsdDs8YSBjbGFzcz0iZW1haWwiIGhyZWY9Im1haWx0bzptYXluYXJkakB1cy5pYm0uY29tIj5tYXluYXJkakB1cy5pYm0uY29tPC9hPiZndDs8L2NvZGU+CisgICAgICAgICAgICAgICAgICAgIDwvcD4KKyAgICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgIDwvZGl2PgorICAgICAgICAgIDxkaXY+CisgICAgICAgICAgICA8cCBjbGFzcz0iY29weXJpZ2h0Ij5Db3B5cmlnaHQgqSAyMDA3IElCTSBDb3Jwb3JhdGlvbjwvcD4KKyAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgPC9kaXY+CisgICAgICAgIDxociAvPgorICAgICAgPC9kaXY+CisgICAgICA8ZGl2IGNsYXNzPSJ0b2MiPgorICAgICAgICA8cD4KKyAgICAgICAgICA8Yj5UYWJsZSBvZiBDb250ZW50czwvYj4KKyAgICAgICAgPC9wPgorICAgICAgICA8ZGw+CisgICAgICAgICAgPGR0PgorICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNoYXB0ZXIiPgorICAgICAgICAgICAgICA8YSBocmVmPSIjZGV2ZWxvcGluZyI+MS4gRGV2ZWxvcGluZyBhIG5ldyBKSVQgYWdlbnQ8L2E+CisgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgPC9kdD4KKyAgICAgICAgICA8ZGQ+CisgICAgICAgICAgICA8ZGw+CisgICAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDEiPgorICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2ppdC1kZXZlbC1vdmVydmlldyI+MS4gT3ZlcnZpZXc8L2E+CisgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QxIj4KKyAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNqaXQtaW50ZXJmYWNlIj4yLiBJbXBsZW1lbnRpbmcgSklUIHN1cHBvcnQgZm9yIGEgbmV3IHZpcnR1YWwgbWFjaGluZTwvYT4KKyAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICA8L2RsPgorICAgICAgICAgIDwvZGQ+CisgICAgICAgICAgPGR0PgorICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNoYXB0ZXIiPgorICAgICAgICAgICAgICA8YSBocmVmPSIjaml0LWFwaSI+Mi4gVGhlIEpJVCBzdXBwb3J0IEFQSTwvYT4KKyAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICA8L2R0PgorICAgICAgICAgIDxkZD4KKyAgICAgICAgICAgIDxkbD4KKyAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MSI+CisgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjb3Bfb3Blbl9hZ2VudCI+MS4gb3Bfb3Blbl9hZ2VudDwvYT4KKyAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDEiPgorICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI29wX2Nsb3NlX2FnZW50Ij4yLiBvcF9jbG9zZV9hZ2VudDwvYT4KKyAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDEiPgorICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI29wX3dyaXRlX25hdGl2ZV9jb2RlIj4zLiBvcF93cml0ZV9uYXRpdmVfY29kZTwvYT4KKyAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDEiPgorICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI29wX3dyaXRlX2RlYnVnX2xpbmVfaW5mbyI+NC4gb3Bfd3JpdGVfZGVidWdfbGluZV9pbmZvPC9hPgorICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MSI+CisgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjb3BfdW5sb2FkX25hdGl2ZV9jb2RlIj41LiBvcF91bmxvYWRfbmF0aXZlX2NvZGU8L2E+CisgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgPC9kbD4KKyAgICAgICAgICA8L2RkPgorICAgICAgICA8L2RsPgorICAgICAgPC9kaXY+CisgICAgICA8ZGl2IGNsYXNzPSJjaGFwdGVyIiB0aXRsZT0iQ2hhcHRlcqAxLqBEZXZlbG9waW5nIGEgbmV3IEpJVCBhZ2VudCI+CisgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlcGFnZSI+CisgICAgICAgICAgPGRpdj4KKyAgICAgICAgICAgIDxkaXY+CisgICAgICAgICAgICAgIDxoMiBjbGFzcz0idGl0bGUiPjxhIGlkPSJkZXZlbG9waW5nIj48L2E+Q2hhcHRlcqAxLqBEZXZlbG9waW5nIGEgbmV3IEpJVCBhZ2VudDwvaDI+CisgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgPC9kaXY+CisgICAgICAgIDxkaXYgY2xhc3M9InRvYyI+CisgICAgICAgICAgPHA+CisgICAgICAgICAgICA8Yj5UYWJsZSBvZiBDb250ZW50czwvYj4KKyAgICAgICAgICA8L3A+CisgICAgICAgICAgPGRsPgorICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDEiPgorICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNqaXQtZGV2ZWwtb3ZlcnZpZXciPjEuIE92ZXJ2aWV3PC9hPgorICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDEiPgorICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNqaXQtaW50ZXJmYWNlIj4yLiBJbXBsZW1lbnRpbmcgSklUIHN1cHBvcnQgZm9yIGEgbmV3IHZpcnR1YWwgbWFjaGluZTwvYT4KKyAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICA8L2RsPgorICAgICAgICA8L2Rpdj4KKyAgICAgICAgPHA+CisJT1Byb2ZpbGUgaW5jbHVkZXMgYSBoZWFkZXIgZmlsZSBhbmQgbGlicmFyeSB0aGF0IGFyZSBpbnRlbmRlZCB0byBiZSB1c2VkIGJ5CisJZGV2ZWxvcGVycyB3aG8gd2lzaCB0byBleHRlbmQgT1Byb2ZpbGUncyBKSVQgc3VwcG9ydCB0byBvdGhlciBub24tc3VwcG9ydGVkCisJdmlydHVhbCBtYWNoaW5lcy4gIFRoaXMgZGV2ZWxvcGVyIGd1aWRlIGRlc2NyaWJlcyB0aGVzZSBkZXZlbG9wbWVudCBmaWxlcyBhbmQgaG93CisJdG8gdXNlIHRoZW0uCisJPC9wPgorICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0MSIgdGl0bGU9IjEuoE92ZXJ2aWV3Ij4KKyAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgorICAgICAgICAgICAgPGRpdj4KKyAgICAgICAgICAgICAgPGRpdj4KKyAgICAgICAgICAgICAgICA8aDIgY2xhc3M9InRpdGxlIiBzdHlsZT0iY2xlYXI6IGJvdGgiPjxhIGlkPSJqaXQtZGV2ZWwtb3ZlcnZpZXciPjwvYT4xLqBPdmVydmlldzwvaDI+CisgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgPHA+CisJT1Byb2ZpbGUgYWxyZWFkeSBpbmNsdWRlcyBzb21lIGltcGxlbWVudGF0aW9ucyB0aGF0IHVzZSB0aGUgSklUIHN1cHBvcnQsCisJZS5nLiwgdGhlIEphdmEgVmlydHVhbCBNYWNoaW5lIFRvb2xraXQgSW50ZXJmYWNlIChKVk1USSkgbGlicmFyeSwKKwlsaWJqdm10aV9vcHJvZmlsZS5zby4gIEluIGRldmVsb3BpbmcgYSBuZXcgaW1wbGVtZW50YXRpb24sIHlvdSB3aWxsCisJbGlrZWx5IGZvbGxvdyBhIHNpbWlsYXIgKGlmIG5vdCBpZGVudGljYWwpIHByb2NlZHVyZSBhcyB3YXMgdXNlZCBpbgorCWRldmVsb3BpbmcgdGhlIEpWTVRJIGxpYnJhcnkuICBGb2xsb3dpbmcgYXJlIHRoZSBoaWdoIGxldmVsIHN0ZXBzIHRvIGZvbGxvdzoKKwk8L3A+CisgICAgICAgICAgPGRpdiBjbGFzcz0ib3JkZXJlZGxpc3QiPgorICAgICAgICAgICAgPG9sIGNsYXNzPSJvcmRlcmVkbGlzdCIgdHlwZT0iMSI+CisgICAgICAgICAgICAgIDxsaSBjbGFzcz0ibGlzdGl0ZW0iPkVuc3VyZSB5b3VyIHZpcnR1YWwgbWFjaGluZSBwcm92aWRlcyBhbiBBUEkgdGhhdCwgYXQgbWluaW11bSwKKwljYW4gcHJvdmlkZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIGFib3V0IGR5bmFtaWNhbGx5IGNvbXBpbGVkIGNvZGU6CisJCTxkaXYgY2xhc3M9Iml0ZW1pemVkbGlzdCI+PHVsIGNsYXNzPSJpdGVtaXplZGxpc3QiIHR5cGU9ImRpc2MiPjxsaSBjbGFzcz0ibGlzdGl0ZW0iPk5vdGlmaWNhdGlvbiB3aGVuIGNvbXBpbGF0aW9uIG9jY3VyczwvbGk+PGxpIGNsYXNzPSJsaXN0aXRlbSI+TmFtZSBvZiB0aGUgc3ltYm9sIChpLmUuLCBmdW5jdGlvbiBvciBjbGFzcy9tZXRob2QsIGV0Yy4pPC9saT48bGkgY2xhc3M9Imxpc3RpdGVtIj5BZGRyZXNzIGluIGFub255bW91cyBtZW1vcnkgd2hlcmUgdGhlIGNvbXBpbGVkIGNvZGUgd2FzIGxvYWRlZDwvbGk+PGxpIGNsYXNzPSJsaXN0aXRlbSI+TGVuZ3RoIG9mIHRoZSBjb21waWxlZCBjb2RlIHNlZ21lbnQ8L2xpPjwvdWw+PC9kaXY+PC9saT4KKyAgICAgICAgICAgICAgPGxpIGNsYXNzPSJsaXN0aXRlbSI+V3JpdGUgYW4gYWdlbnQgbGlicmFyeSB0aGF0IGNvbW11bmljYXRlcyB3aXRoIHlvdXIgVk0gdG8gb2J0YWluCisJY29tcGlsZWQgY29kZSBub3RpZmljYXRpb25zLiAgSW52b2tlIHRoZSByZXF1aXJlZCBmdW5jdGlvbnMgZnJvbSBvcGFnZW50LmgKKwkoPGEgY2xhc3M9InhyZWYiIGhyZWY9IiNqaXQtaW50ZXJmYWNlIiB0aXRsZT0iMi6gSW1wbGVtZW50aW5nIEpJVCBzdXBwb3J0IGZvciBhIG5ldyB2aXJ0dWFsIG1hY2hpbmUiPlNlY3Rpb26gMiwgJiM4MjIwO0ltcGxlbWVudGluZyBKSVQgc3VwcG9ydCBmb3IgYSBuZXcgdmlydHVhbCBtYWNoaW5lJiM4MjIxOzwvYT4pIGFuZCBsaW5rIHlvdXIgbGlicmFyeSB3aXRoIGxpYm9wYWdlbnQuc28KKwkoaW5zdGFsbGVkIGF0IDxjb2RlIGNsYXNzPSJmaWxlbmFtZSI+Jmx0O29wcm9maWxlX2luc3RhbGxfZGlyJmd0Oy9saWIvb3Byb2ZpbGU8L2NvZGU+KS4KKwk8L2xpPgorICAgICAgICAgICAgPC9vbD4KKyAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICA8cD4KKworCTwvcD4KKyAgICAgICAgPC9kaXY+CisgICAgICAgIDxkaXYgY2xhc3M9InNlY3QxIiB0aXRsZT0iMi6gSW1wbGVtZW50aW5nIEpJVCBzdXBwb3J0IGZvciBhIG5ldyB2aXJ0dWFsIG1hY2hpbmUiPgorICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlcGFnZSI+CisgICAgICAgICAgICA8ZGl2PgorICAgICAgICAgICAgICA8ZGl2PgorICAgICAgICAgICAgICAgIDxoMiBjbGFzcz0idGl0bGUiIHN0eWxlPSJjbGVhcjogYm90aCI+PGEgaWQ9ImppdC1pbnRlcmZhY2UiPjwvYT4yLqBJbXBsZW1lbnRpbmcgSklUIHN1cHBvcnQgZm9yIGEgbmV3IHZpcnR1YWwgbWFjaGluZTwvaDI+CisgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgPHA+CisJVGhlIEpJVCBzdXBwb3J0IEFQSSBmb3IgT1Byb2ZpbGUgaXMgZGVmaW5lZCAKKwlpbiA8Y29kZSBjbGFzcz0iZmlsZW5hbWUiPiZsdDtvcHJvZmlsZS1pbnN0YWxsLWRpciZndDsvaW5jbHVkZS9vcGFnZW50Lmg8L2NvZGU+LgorCVNvbWUgcGFydHMgb2YgdGhlIEFQSSBhcmUgbWFuZGF0b3J5IGZvciBhbiBhZ2VudCBsaWJyYXJ5IHRvIHVzZTsgb3RoZXIKKwlwYXJ0cyBhcmUgb3B0aW9uYWwuICBUaGUgbWFuZGF0b3J5IGZ1bmN0aW9ucyBhcmUgc2hvd24gYmVsb3cuCisJPC9wPgorICAgICAgICAgIDx0YWJsZSB4bWxucz0iIiBib3JkZXI9IjAiIHN0eWxlPSJiYWNrZ3JvdW5kOiAjRTBFMEUwOyIgd2lkdGg9IjkwJSI+CisgICAgICAgICAgICA8dHI+CisgICAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgICA8cHJlIGNsYXNzPSJzY3JlZW4iPgorb3BfYWdlbnRfdCBvcF9vcGVuX2FnZW50KHZvaWQpOworCit2b2lkIG9wX2Nsb3NlX2FnZW50KG9wX2FnZW50X3QgaGRsKTsKKworaW50IG9wX3dyaXRlX25hdGl2ZV9jb2RlKG9wX2FnZW50X3QgaGRsLCBjaGFyIGNvbnN0ICogc3ltYm9sX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgdWludDY0X3Qgdm1hLCBjb25zdCB2b2lkICogY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgY29kZV9zaXplKTsKKzwvcHJlPgorICAgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgPC90cj4KKyAgICAgICAgICA8L3RhYmxlPgorICAgICAgICAgIDxwPgorCVRvIGltcGxlbWVudCB0aGlzIHBhcnQgb2YgeW91ciBsaWJyYXJ5LCB5b3UgbXVzdCBwZXJmb3JtIHRoZQorCWZvbGxvd2luZyBzdGVwczoKKwk8L3A+CisgICAgICAgICAgPGRpdiBjbGFzcz0ib3JkZXJlZGxpc3QiPgorICAgICAgICAgICAgPG9sIGNsYXNzPSJvcmRlcmVkbGlzdCIgdHlwZT0iMSI+CisgICAgICAgICAgICAgIDxsaSBjbGFzcz0ibGlzdGl0ZW0iPkltcGxlbWVudCBhIGZ1bmN0aW9uIHRvIHNldCB1cCBpbml0aWFsIGNvbW11bmljYXRpb24gd2l0aCB0aGUgVk0uCisJT25jZSBjb21tdW5pY2F0aW9uIHRvIHRoZSBWTSBpcyBlc3RhYmxpc2hlZCwgeW91ciBhZ2VudCBsaWJyYXJ5IHNob3VsZCBjYWxsCisJPGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5vcF9vcF9hZ2VudCgpPC9jb2RlPiBhbmQgY2FjaGUgdGhlIHJldHVybmVkIDxjb2RlIGNsYXNzPSJjb2RlIj5vcF9hZ2VudF90PC9jb2RlPiBoYW5kbGUgZm9yIHVzZSBpbgorCWZ1dHVyZSBjYWxscy48L2xpPgorICAgICAgICAgICAgICA8bGkgY2xhc3M9Imxpc3RpdGVtIj5QZXJmb3JtIGFueSBuZWNlc3Nhcnkgc3RlcHMgdG8gcmVnaXN0ZXIgd2l0aCB0aGUgVk0gdG8gYmUgbm90aWZpZWQgb2YKKwljb21waWxlZCBjb2RlIGxvYWQgZXZlbnRzLiAgUmVnaXN0cmF0aW9uIG11c3QgaW5jbHVkZSBhIGNhbGxiYWNrIGZ1bmN0aW9uIHlvdQorCXdpbGwgaW1wbGVtZW50IGluIHRoZSBsaWJyYXJ5IHRvIGhhbmRsZSB0aGUgY29tcGlsZWQgY29kZSBsb2FkIGV2ZW50cy48L2xpPgorICAgICAgICAgICAgICA8bGkgY2xhc3M9Imxpc3RpdGVtIj5UaGUgY2FsbGJhY2sgZnVuY3Rpb24gbWVudGlvbmVkIGFib3ZlIG11c3Qgb2J0YWluIGFsbCByZXF1aXJlZAorCWluZm9ybWF0aW9uIGZyb20gdGhlIFZNIHRvIHBhc3MgdG8gbGlib3BhZ2VudCB2aWEgPGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5vcF93cml0ZV9uYXRpdmVfY29kZSgpPC9jb2RlPi48L2xpPgorICAgICAgICAgICAgICA8bGkgY2xhc3M9Imxpc3RpdGVtIj5XaGVuIGRpc2Nvbm5lY3RpbmcgZnJvbSB0aGUgVk0sIHlvdXIgbGlicmFyeSBzaG91bGQgY2FsbAorCTxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+b3BfYWdlbnRfY2xvc2UoKTwvY29kZT4uPC9saT4KKyAgICAgICAgICAgIDwvb2w+CisgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgPHA+CisJPC9wPgorICAgICAgICAgIDxwPlVzZSBvZiB0aGUgZnVuY3Rpb25zIGJlbG93IGFyZSBvcHRpb25hbCwgZGVwZW5kaW5nIG9uIHRoZSBraW5kcyBvZiBpbmZvcm1hdGlvbiB5b3VyIFZNCisJY2FuIHByb3ZpZGUgdG8geW91ciBhZ2VudCBsaWJyYXJ5LiAgU2VlIHRoZSBKVk1USSBhZ2VudCBsaWJyYXJ5IGZvciBhbiBleGFtcGxlIG9mIGhvdyB0byB1c2UKKwl0aGVzZSBmdW5jdGlvbnMuCis8L3A+CisgICAgICAgICAgPHRhYmxlIHhtbG5zPSIiIGJvcmRlcj0iMCIgc3R5bGU9ImJhY2tncm91bmQ6ICNFMEUwRTA7IiB3aWR0aD0iOTAlIj4KKyAgICAgICAgICAgIDx0cj4KKyAgICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICAgIDxwcmUgY2xhc3M9InNjcmVlbiI+CitpbnQgb3BfdW5sb2FkX25hdGl2ZV9jb2RlKG9wX2FnZW50X3QgaGRsLCB1aW50NjRfdCB2bWEpOworCitpbnQgb3Bfd3JpdGVfZGVidWdfbGluZV9pbmZvKG9wX2FnZW50X3QgaGRsLCB2b2lkIGNvbnN0ICogY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG5yX2VudHJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZGVidWdfbGluZV9pbmZvIGNvbnN0ICogY29tcGlsZV9tYXApOworPC9wcmU+CisgICAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICA8L3RyPgorICAgICAgICAgIDwvdGFibGU+CisgICAgICAgICAgPHA+CisJPC9wPgorICAgICAgICAgIDxkaXYgY2xhc3M9Im5vdGUiIHRpdGxlPSJOb3RlIiBzdHlsZT0ibWFyZ2luLWxlZnQ6IDAuNWluOyBtYXJnaW4tcmlnaHQ6IDAuNWluOyI+PGgzIGNsYXNzPSJ0aXRsZSI+Tm90ZTwvaDM+V2hpbGUgdGhlIGxpYm9wYWdlbnQgZnVuY3Rpb25zIGFyZSB0aHJlYWQtc2FmZSwgeW91IHNob3VsZCBub3QgdXNlIHRoZW0gaW4KKwlzaWduYWwgaGFuZGxlcnMuCisJPC9kaXY+CisgICAgICAgIDwvZGl2PgorICAgICAgPC9kaXY+CisgICAgICA8ZGl2IGNsYXNzPSJjaGFwdGVyIiB0aXRsZT0iQ2hhcHRlcqAyLqBUaGUgSklUIHN1cHBvcnQgQVBJIj4KKyAgICAgICAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KKyAgICAgICAgICA8ZGl2PgorICAgICAgICAgICAgPGRpdj4KKyAgICAgICAgICAgICAgPGgyIGNsYXNzPSJ0aXRsZSI+PGEgaWQ9ImppdC1hcGkiPjwvYT5DaGFwdGVyoDIuoFRoZSBKSVQgc3VwcG9ydCBBUEk8L2gyPgorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgPC9kaXY+CisgICAgICAgIDwvZGl2PgorICAgICAgICA8ZGl2IGNsYXNzPSJ0b2MiPgorICAgICAgICAgIDxwPgorICAgICAgICAgICAgPGI+VGFibGUgb2YgQ29udGVudHM8L2I+CisgICAgICAgICAgPC9wPgorICAgICAgICAgIDxkbD4KKyAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QxIj4KKyAgICAgICAgICAgICAgICA8YSBocmVmPSIjb3Bfb3Blbl9hZ2VudCI+MS4gb3Bfb3Blbl9hZ2VudDwvYT4KKyAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QxIj4KKyAgICAgICAgICAgICAgICA8YSBocmVmPSIjb3BfY2xvc2VfYWdlbnQiPjIuIG9wX2Nsb3NlX2FnZW50PC9hPgorICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDEiPgorICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNvcF93cml0ZV9uYXRpdmVfY29kZSI+My4gb3Bfd3JpdGVfbmF0aXZlX2NvZGU8L2E+CisgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MSI+CisgICAgICAgICAgICAgICAgPGEgaHJlZj0iI29wX3dyaXRlX2RlYnVnX2xpbmVfaW5mbyI+NC4gb3Bfd3JpdGVfZGVidWdfbGluZV9pbmZvPC9hPgorICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDEiPgorICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNvcF91bmxvYWRfbmF0aXZlX2NvZGUiPjUuIG9wX3VubG9hZF9uYXRpdmVfY29kZTwvYT4KKyAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICA8L2RsPgorICAgICAgICA8L2Rpdj4KKyAgICAgICAgPHA+CisJVGhpcyBjaGFwdGVyIGRlc2NyaWJlcyB0aGUgSklUIHN1cHBvcnQgQVBJLiAgU2VlIG9wYWdlbnQuaCBmb3IgbW9yZSBkZXRhaWxzLgorICAgICAgICA8L3A+CisgICAgICAgIDxkaXYgY2xhc3M9InNlY3QxIiB0aXRsZT0iMS6gb3Bfb3Blbl9hZ2VudCI+CisgICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KKyAgICAgICAgICAgIDxkaXY+CisgICAgICAgICAgICAgIDxkaXY+CisgICAgICAgICAgICAgICAgPGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj48YSBpZD0ib3Bfb3Blbl9hZ2VudCI+PC9hPjEuoG9wX29wZW5fYWdlbnQ8L2gyPgorICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgIDwvZGl2PgorICAgICAgICAgIDxkaXYgY2xhc3M9ImZ1bmNzeW5vcHNpcyI+SW5pdGlhbGl6ZXMgdGhlIGFnZW50IGxpYnJhcnkuCis8cHJlIGNsYXNzPSJmdW5jc3lub3BzaXNpbmZvIj4jaW5jbHVkZSAmbHQ7b3BhZ2VudC5oJmd0OzwvcHJlPjx0YWJsZSBib3JkZXI9IjAiIHN1bW1hcnk9IkZ1bmN0aW9uIHN5bm9wc2lzIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIGNsYXNzPSJmdW5jcHJvdG90eXBlLXRhYmxlIj48dHI+PHRkPjxjb2RlIGNsYXNzPSJmdW5jZGVmIj5vcF9hZ2VudF90IDxiIGNsYXNzPSJmc2Z1bmMiPm9wX29wZW5fYWdlbnQ8L2I+KDwvY29kZT48L3RkPjx0ZD48Y29kZT4pPC9jb2RlPjs8L3RkPjx0ZD6gPC90ZD48L3RyPjwvdGFibGU+PGRpdiBjbGFzcz0icGFyYW1kZWYtbGlzdCI+PGNvZGU+dm9pZDwvY29kZT47PC9kaXY+PGRpdiBjbGFzcz0iZnVuY3Byb3RvdHlwZS1zcGFjZXIiPqA8L2Rpdj48L2Rpdj4KKyAgICAgICAgICA8ZGl2IGNsYXNzPSJub3RlIiB0aXRsZT0iRGVzY3JpcHRpb24iIHN0eWxlPSJtYXJnaW4tbGVmdDogMC41aW47IG1hcmdpbi1yaWdodDogMC41aW47Ij48aDMgY2xhc3M9InRpdGxlIj5EZXNjcmlwdGlvbjwvaDM+CitUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGJ5IGFnZW50cyBiZWZvcmUgYW55IG90aGVyIGZ1bmN0aW9uLgorQ3JlYXRlcyBhbmQgb3BlbnMgYSBKSVQgZHVtcCBmaWxlIGluIDxjb2RlIGNsYXNzPSJmaWxlbmFtZSI+L3Zhci9saWIvb3Byb2ZpbGUvaml0ZHVtcDwvY29kZT4KK3VzaW5nIHRoZSBuYW1pbmcgY29udmVudGlvbiA8Y29kZSBjbGFzcz0iZmlsZW5hbWUiPiZsdDtwcm9jZXNzX2lkJmd0Oy5kdW1wPC9jb2RlPi4KKzwvZGl2PgorICAgICAgICAgIDxkaXYgY2xhc3M9Im5vdGUiIHRpdGxlPSJQYXJhbWV0ZXJzIiBzdHlsZT0ibWFyZ2luLWxlZnQ6IDAuNWluOyBtYXJnaW4tcmlnaHQ6IDAuNWluOyI+PGgzIGNsYXNzPSJ0aXRsZSI+UGFyYW1ldGVyczwvaDM+CitOb25lCis8L2Rpdj4KKyAgICAgICAgICA8ZGl2IGNsYXNzPSJub3RlIiB0aXRsZT0iUmV0dXJuIHZhbHVlIiBzdHlsZT0ibWFyZ2luLWxlZnQ6IDAuNWluOyBtYXJnaW4tcmlnaHQ6IDAuNWluOyI+CisgICAgICAgICAgICA8aDMgY2xhc3M9InRpdGxlIj5SZXR1cm4gdmFsdWU8L2gzPgorICAgICAgICAgICAgPHA+UmV0dXJucyBhIHZhbGlkIDxjb2RlIGNsYXNzPSJjb2RlIj5vcF9hZ2VudF90PC9jb2RlPiBoYW5kbGUgb3IgTlVMTC4KK0lmIE5VTEwgaXMgcmV0dXJuZWQsIDxjb2RlIGNsYXNzPSJjb2RlIj5lcnJubzwvY29kZT4gaXMgc2V0IHRvIGluZGljYXRlIHRoZSBuYXR1cmUgb2YgdGhlIGVycm9yLiBGb3IgYSBsaXN0CitvZiBwb3NzaWJsZSA8Y29kZSBjbGFzcz0iY29kZSI+ZXJybm88L2NvZGU+IHZhbHVlcywgc2VlIHRoZSBtYW4gcGFnZXMgZm9yOjwvcD4KKyAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJjb2RlIj4KK3N0YXQsIGNyZWF0LCBnZXR0aW1lb2ZkYXksIGZkb3BlbiwgZndyaXRlCis8L2NvZGU+CisgICAgICAgICAgPC9kaXY+CisgICAgICAgIDwvZGl2PgorICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0MSIgdGl0bGU9IjIuoG9wX2Nsb3NlX2FnZW50Ij4KKyAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgorICAgICAgICAgICAgPGRpdj4KKyAgICAgICAgICAgICAgPGRpdj4KKyAgICAgICAgICAgICAgICA8aDIgY2xhc3M9InRpdGxlIiBzdHlsZT0iY2xlYXI6IGJvdGgiPjxhIGlkPSJvcF9jbG9zZV9hZ2VudCI+PC9hPjIuoG9wX2Nsb3NlX2FnZW50PC9oMj4KKyAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICA8ZGl2IGNsYXNzPSJmdW5jc3lub3BzaXMiPlVuaW5pdGlhbGl6ZSB0aGUgYWdlbnQgbGlicmFyeS4KKzxwcmUgY2xhc3M9ImZ1bmNzeW5vcHNpc2luZm8iPiNpbmNsdWRlICZsdDtvcGFnZW50LmgmZ3Q7PC9wcmU+PHRhYmxlIGJvcmRlcj0iMCIgc3VtbWFyeT0iRnVuY3Rpb24gc3lub3BzaXMiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgY2xhc3M9ImZ1bmNwcm90b3R5cGUtdGFibGUiPjx0cj48dGQ+PGNvZGUgY2xhc3M9ImZ1bmNkZWYiPmludCA8YiBjbGFzcz0iZnNmdW5jIj5vcF9jbG9zZV9hZ2VudDwvYj4oPC9jb2RlPjwvdGQ+PHRkPjx2YXIgY2xhc3M9InBkcGFyYW0iPmhkbDwvdmFyPjxjb2RlPik8L2NvZGU+OzwvdGQ+PHRkPqA8L3RkPjwvdHI+PC90YWJsZT48ZGl2IGNsYXNzPSJwYXJhbWRlZi1saXN0Ij48Y29kZT5vcF9hZ2VudF90IDx2YXIgY2xhc3M9InBkcGFyYW0iPmhkbDwvdmFyPjwvY29kZT47PC9kaXY+PGRpdiBjbGFzcz0iZnVuY3Byb3RvdHlwZS1zcGFjZXIiPqA8L2Rpdj48L2Rpdj4KKyAgICAgICAgICA8ZGl2IGNsYXNzPSJub3RlIiB0aXRsZT0iRGVzY3JpcHRpb24iIHN0eWxlPSJtYXJnaW4tbGVmdDogMC41aW47IG1hcmdpbi1yaWdodDogMC41aW47Ij48aDMgY2xhc3M9InRpdGxlIj5EZXNjcmlwdGlvbjwvaDM+CitGcmVlcyBhbGwgcmVzb3VyY2VzIGFuZCBjbG9zZXMgb3BlbiBmaWxlIGhhbmRsZXMuCis8L2Rpdj4KKyAgICAgICAgICA8ZGl2IGNsYXNzPSJub3RlIiB0aXRsZT0iUGFyYW1ldGVycyIgc3R5bGU9Im1hcmdpbi1sZWZ0OiAwLjVpbjsgbWFyZ2luLXJpZ2h0OiAwLjVpbjsiPjxoMyBjbGFzcz0idGl0bGUiPlBhcmFtZXRlcnM8L2gzPjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5oZGwgOiA8L2NvZGU+PC9lbT5IYW5kbGUgcmV0dXJuZWQgZnJvbSBhbiBlYXJsaWVyIGNhbGwgdG8KKzxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+b3Bfb3Blbl9hZ2VudCgpPC9jb2RlPjwvZGl2PgorICAgICAgICAgIDxkaXYgY2xhc3M9Im5vdGUiIHRpdGxlPSJSZXR1cm4gdmFsdWUiIHN0eWxlPSJtYXJnaW4tbGVmdDogMC41aW47IG1hcmdpbi1yaWdodDogMC41aW47Ij4KKyAgICAgICAgICAgIDxoMyBjbGFzcz0idGl0bGUiPlJldHVybiB2YWx1ZTwvaDM+CisgICAgICAgICAgICA8cD5SZXR1cm5zIDAgb24gc3VjY2VzczsgLTEgb3RoZXJ3aXNlLiBJZiAtMSBpcyByZXR1cm5lZCwgPGNvZGUgY2xhc3M9ImNvZGUiPmVycm5vPC9jb2RlPiBpcyBzZXQKK3RvIGluZGljYXRlIHRoZSBuYXR1cmUgb2YgdGhlIGVycm9yLiAKKzxjb2RlIGNsYXNzPSJjb2RlIj5lcnJubzwvY29kZT4gaXMgc2V0IHRvIEVJTlZBTCBpZiBhbiBpbnZhbGlkIDxjb2RlIGNsYXNzPSJjb2RlIj5vcF9hZ2VudF90PC9jb2RlPgoraGFuZGxlIGlzIHBhc3NlZC4gRm9yIGEgbGlzdCBvZiBvdGhlciBwb3NzaWJsZSA8Y29kZSBjbGFzcz0iY29kZSI+ZXJybm88L2NvZGU+IHZhbHVlcywgc2VlIHRoZSBtYW4gcGFnZXMgZm9yOjwvcD4KKyAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJjb2RlIj5nZXR0aW1lb2ZkYXksIGZ3cml0ZTwvY29kZT4KKyAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgPC9kaXY+CisgICAgICAgIDxkaXYgY2xhc3M9InNlY3QxIiB0aXRsZT0iMy6gb3Bfd3JpdGVfbmF0aXZlX2NvZGUiPgorICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlcGFnZSI+CisgICAgICAgICAgICA8ZGl2PgorICAgICAgICAgICAgICA8ZGl2PgorICAgICAgICAgICAgICAgIDxoMiBjbGFzcz0idGl0bGUiIHN0eWxlPSJjbGVhcjogYm90aCI+PGEgaWQ9Im9wX3dyaXRlX25hdGl2ZV9jb2RlIj48L2E+My6gb3Bfd3JpdGVfbmF0aXZlX2NvZGU8L2gyPgorICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgIDwvZGl2PgorICAgICAgICAgIDxkaXYgY2xhc3M9ImZ1bmNzeW5vcHNpcyI+V3JpdGUgaW5mb3JtYXRpb24gYWJvdXQgY29tcGlsZWQgY29kZSB0byBhIEpJVCBkdW1wIGZpbGUuCis8cHJlIGNsYXNzPSJmdW5jc3lub3BzaXNpbmZvIj4jaW5jbHVkZSAmbHQ7b3BhZ2VudC5oJmd0OzwvcHJlPjx0YWJsZSBib3JkZXI9IjAiIHN1bW1hcnk9IkZ1bmN0aW9uIHN5bm9wc2lzIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIGNsYXNzPSJmdW5jcHJvdG90eXBlLXRhYmxlIj48dHI+PHRkPjxjb2RlIGNsYXNzPSJmdW5jZGVmIj5pbnQgPGIgY2xhc3M9ImZzZnVuYyI+b3Bfd3JpdGVfbmF0aXZlX2NvZGU8L2I+KDwvY29kZT48L3RkPjx0ZD48dmFyIGNsYXNzPSJwZHBhcmFtIj5oZGw8L3Zhcj4sIDwvdGQ+PHRkPqA8L3RkPjwvdHI+PHRyPjx0ZD6gPC90ZD48dGQ+PHZhciBjbGFzcz0icGRwYXJhbSI+c3ltYm9sX25hbWU8L3Zhcj4sIDwvdGQ+PHRkPqA8L3RkPjwvdHI+PHRyPjx0ZD6gPC90ZD48dGQ+PHZhciBjbGFzcz0icGRwYXJhbSI+dm1hPC92YXI+LCA8L3RkPjx0ZD6gPC90ZD48L3RyPjx0cj48dGQ+oDwvdGQ+PHRkPjx2YXIgY2xhc3M9InBkcGFyYW0iPmNvZGU8L3Zhcj4sIDwvdGQ+PHRkPqA8L3RkPjwvdHI+PHRyPjx0ZD6gPC90ZD48dGQ+PHZhciBjbGFzcz0icGRwYXJhbSI+Y29kZV9zaXplPC92YXI+PGNvZGU+KTwvY29kZT47PC90ZD48dGQ+oDwvdGQ+PC90cj48L3RhYmxlPjxkaXYgY2xhc3M9InBhcmFtZGVmLWxpc3QiPjxjb2RlPm9wX2FnZW50X3Q8dmFyIGNsYXNzPSJwZHBhcmFtIj5oZGw8L3Zhcj48L2NvZGU+OzxiciAvPjxjb2RlPmNoYXIgY29uc3QgKjx2YXIgY2xhc3M9InBkcGFyYW0iPnN5bWJvbF9uYW1lPC92YXI+PC9jb2RlPjs8YnIgLz48Y29kZT51aW50NjRfdDx2YXIgY2xhc3M9InBkcGFyYW0iPnZtYTwvdmFyPjwvY29kZT47PGJyIC8+PGNvZGU+dm9pZCBjb25zdCAqPHZhciBjbGFzcz0icGRwYXJhbSI+Y29kZTwvdmFyPjwvY29kZT47PGJyIC8+PGNvZGU+Y29uc3QgdW5zaWduZWQgaW50PHZhciBjbGFzcz0icGRwYXJhbSI+Y29kZV9zaXplPC92YXI+PC9jb2RlPjs8L2Rpdj48ZGl2IGNsYXNzPSJmdW5jcHJvdG90eXBlLXNwYWNlciI+oDwvZGl2PjwvZGl2PgorICAgICAgICAgIDxkaXYgY2xhc3M9Im5vdGUiIHRpdGxlPSJEZXNjcmlwdGlvbiIgc3R5bGU9Im1hcmdpbi1sZWZ0OiAwLjVpbjsgbWFyZ2luLXJpZ2h0OiAwLjVpbjsiPjxoMyBjbGFzcz0idGl0bGUiPkRlc2NyaXB0aW9uPC9oMz4KK1NpZ25hbCB0aGUgZHluYW1pYyBnZW5lcmF0aW9uIG9mIG5hdGl2ZSBjb2RlIGZyb20gYSB2aXJ0dWFsIG1hY2hpbmUuCitXcml0ZXMgYSBKSVQgZHVtcCByZWNvcmQgdG8gdGhlIG9wZW4gSklUIGR1bXAgZmlsZSB1c2luZyB0aGUgcGFzc2VkIGluZm9ybWF0aW9uLgorPC9kaXY+CisgICAgICAgICAgPGRpdiBjbGFzcz0ibm90ZSIgdGl0bGU9IlBhcmFtZXRlcnMiIHN0eWxlPSJtYXJnaW4tbGVmdDogMC41aW47IG1hcmdpbi1yaWdodDogMC41aW47Ij4KKyAgICAgICAgICAgIDxoMyBjbGFzcz0idGl0bGUiPlBhcmFtZXRlcnM8L2gzPgorICAgICAgICAgICAgPHA+Cis8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aGRsIDogPC9jb2RlPjwvZW0+SGFuZGxlIHJldHVybmVkIGZyb20gYW4gZWFybGllciBjYWxsIHRvCis8Y29kZSBjbGFzcz0iZnVuY3Rpb24iPm9wX29wZW5fYWdlbnQoKTwvY29kZT4KKzwvcD4KKyAgICAgICAgICAgIDxwPgorPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnN5bWJvbF9uYW1lIDogPC9jb2RlPjwvZW0+VGhlIG5hbWUgb2YgdGhlIHN5bWJvbCBiZWluZyBkeW5hbWljYWxseSBjb21waWxlZC4KKyBUaGlzIG5hbWUgY2FuIChhbmQgc2hvdWxkKSBjb250YWluIGFsbCBuZWNlc3NhcnkgaW5mb3JtYXRpb24gdG8gZGlzYW1iaWd1YXRlIGl0IGZyb20KKyBzeW1ib2xzIG9mIHRoZSBzYW1lIG5hbWU7IGUuZy4sIGNsYXNzLCBtZXRob2Qgc2lnbmF0dXJlLgorPC9wPgorICAgICAgICAgICAgPHA+Cis8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dm1hIDogPC9jb2RlPjwvZW0+VmlydHVhbCBtZW1vcnkgYWRkcmVzcyBvZiB0aGUgZXhlY3V0YWJsZSBjb2RlCis8L3A+CisgICAgICAgICAgICA8cD4KKzxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb2RlIDogPC9jb2RlPjwvZW0+UG9pbnRlciB0byB0aGUgbG9jYXRpb24gb2YgdGhlIGNvbXBpbGVkIGNvZGUuCisJVGhlb3JldGljYWxseSwgdGhpcyBtYXkgYmUgYSBkaWZmZXJlbnQgbG9jYXRpb24gZnJvbQorCXRoYXQgZ2l2ZW4gYnkgdGhlIHZtYSBhcmd1bWVudC4gIEZvciBzb21lIEpJVCBjb21waWxlcnMsCisJb2J0YWluaW5nIHRoZSBjb2RlIG1heSBiZSBpbXByYWN0aWNhbC4gIEZvciB0aGlzIChvciBhbnkgb3RoZXIpCisJcmVhc29uLCB0aGUgYWdlbnQgY2FuIGNob29zZSB0byBwYXNzIE5VTEwgZm9yIHRoaXMgcGFyYWVtdGVyLgorCUlmIE5VTEwgaXMgcGFzc2VkLCBubyBjb2RlIHdpbGwgYmUgY29waWVkIGludG8gdGhlIEpJVCBkdW1wCisJZmlsZS4KKzwvcD4KKyAgICAgICAgICAgIDxwPgorPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvZGVfc2l6ZSA6IDwvY29kZT48L2VtPlNpemUgb2YgdGhlIGNvbXBpbGVkIGNvZGUKKzwvcD4KKyAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICA8ZGl2IGNsYXNzPSJub3RlIiB0aXRsZT0iUmV0dXJuIHZhbHVlIiBzdHlsZT0ibWFyZ2luLWxlZnQ6IDAuNWluOyBtYXJnaW4tcmlnaHQ6IDAuNWluOyI+CisgICAgICAgICAgICA8aDMgY2xhc3M9InRpdGxlIj5SZXR1cm4gdmFsdWU8L2gzPgorICAgICAgICAgICAgPHA+UmV0dXJucyAwIG9uIHN1Y2Nlc3M7IC0xIG90aGVyd2lzZS4gSWYgLTEgaXMgcmV0dXJuZWQsIDxjb2RlIGNsYXNzPSJjb2RlIj5lcnJubzwvY29kZT4gaXMgc2V0Cit0byBpbmRpY2F0ZSB0aGUgbmF0dXJlIG9mIHRoZSBlcnJvci4gCis8Y29kZSBjbGFzcz0iY29kZSI+ZXJybm88L2NvZGU+IGlzIHNldCB0byBFSU5WQUwgaWYgYW4gaW52YWxpZCA8Y29kZSBjbGFzcz0iY29kZSI+b3BfYWdlbnRfdDwvY29kZT4KK2hhbmRsZSBpcyBwYXNzZWQuIEZvciBhIGxpc3Qgb2Ygb3RoZXIgcG9zc2libGUgPGNvZGUgY2xhc3M9ImNvZGUiPmVycm5vPC9jb2RlPiB2YWx1ZXMsIHNlZSB0aGUgbWFuIHBhZ2VzIGZvcjo8L3A+CisgICAgICAgICAgICA8Y29kZSBjbGFzcz0iY29kZSI+Z2V0dGltZW9mZGF5LCBmd3JpdGU8L2NvZGU+CisgICAgICAgICAgPC9kaXY+CisgICAgICAgIDwvZGl2PgorICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0MSIgdGl0bGU9IjQuoG9wX3dyaXRlX2RlYnVnX2xpbmVfaW5mbyI+CisgICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KKyAgICAgICAgICAgIDxkaXY+CisgICAgICAgICAgICAgIDxkaXY+CisgICAgICAgICAgICAgICAgPGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj48YSBpZD0ib3Bfd3JpdGVfZGVidWdfbGluZV9pbmZvIj48L2E+NC6gb3Bfd3JpdGVfZGVidWdfbGluZV9pbmZvPC9oMj4KKyAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICA8ZGl2IGNsYXNzPSJmdW5jc3lub3BzaXMiPldyaXRlIGRlYnVnIGluZm9ybWF0aW9uIGFib3V0IGNvbXBpbGVkIGNvZGUgdG8gYSBKSVQgZHVtcCBmaWxlLgorPHByZSBjbGFzcz0iZnVuY3N5bm9wc2lzaW5mbyI+I2luY2x1ZGUgJmx0O29wYWdlbnQuaCZndDs8L3ByZT48dGFibGUgYm9yZGVyPSIwIiBzdW1tYXJ5PSJGdW5jdGlvbiBzeW5vcHNpcyIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiBjbGFzcz0iZnVuY3Byb3RvdHlwZS10YWJsZSI+PHRyPjx0ZD48Y29kZSBjbGFzcz0iZnVuY2RlZiI+aW50IDxiIGNsYXNzPSJmc2Z1bmMiPm9wX3dyaXRlX2RlYnVnX2xpbmVfaW5mbzwvYj4oPC9jb2RlPjwvdGQ+PHRkPjx2YXIgY2xhc3M9InBkcGFyYW0iPmhkbDwvdmFyPiwgPC90ZD48dGQ+oDwvdGQ+PC90cj48dHI+PHRkPqA8L3RkPjx0ZD48dmFyIGNsYXNzPSJwZHBhcmFtIj5jb2RlPC92YXI+LCA8L3RkPjx0ZD6gPC90ZD48L3RyPjx0cj48dGQ+oDwvdGQ+PHRkPjx2YXIgY2xhc3M9InBkcGFyYW0iPm5yX2VudHJ5PC92YXI+LCA8L3RkPjx0ZD6gPC90ZD48L3RyPjx0cj48dGQ+oDwvdGQ+PHRkPjx2YXIgY2xhc3M9InBkcGFyYW0iPmNvbXBpbGVfbWFwPC92YXI+PGNvZGU+KTwvY29kZT47PC90ZD48dGQ+oDwvdGQ+PC90cj48L3RhYmxlPjxkaXYgY2xhc3M9InBhcmFtZGVmLWxpc3QiPjxjb2RlPm9wX2FnZW50X3Q8dmFyIGNsYXNzPSJwZHBhcmFtIj5oZGw8L3Zhcj48L2NvZGU+OzxiciAvPjxjb2RlPnZvaWQgY29uc3QgKjx2YXIgY2xhc3M9InBkcGFyYW0iPmNvZGU8L3Zhcj48L2NvZGU+OzxiciAvPjxjb2RlPnNpemVfdDx2YXIgY2xhc3M9InBkcGFyYW0iPm5yX2VudHJ5PC92YXI+PC9jb2RlPjs8YnIgLz48Y29kZT5zdHJ1Y3QgZGVidWdfbGluZV9pbmZvIGNvbnN0ICo8dmFyIGNsYXNzPSJwZHBhcmFtIj5jb21waWxlX21hcDwvdmFyPjwvY29kZT47PC9kaXY+PGRpdiBjbGFzcz0iZnVuY3Byb3RvdHlwZS1zcGFjZXIiPqA8L2Rpdj48L2Rpdj4KKyAgICAgICAgICA8ZGl2IGNsYXNzPSJub3RlIiB0aXRsZT0iRGVzY3JpcHRpb24iIHN0eWxlPSJtYXJnaW4tbGVmdDogMC41aW47IG1hcmdpbi1yaWdodDogMC41aW47Ij48aDMgY2xhc3M9InRpdGxlIj5EZXNjcmlwdGlvbjwvaDM+CitBZGQgZGVidWcgbGluZSBpbmZvcm1hdGlvbiB0byBhIHBpZWNlIG9mIGNvZGUuIEFuIDxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+b3Bfd3JpdGVfbmF0aXZlX2NvZGUoKTwvY29kZT4KK3dpdGggdGhlIHNhbWUgY29kZSBwb2ludGVyIHNob3VsZCBoYXZlIG9jY3VycmVkIGJlZm9yZSB0aGlzIGNhbGwuIEl0J3Mgbm90CituZWNlc3NhcnkgdG8gcHJvdmlkZSBvbmUgbGluZW5vIGluZm9ybWF0aW9uIGVudHJ5IHBlciBtYWNoaW5lIGluc3RydWN0aW9uOwordGhlIGFycmF5IGNhbiBjb250YWluIGhvbGUuCis8L2Rpdj4KKyAgICAgICAgICA8ZGl2IGNsYXNzPSJub3RlIiB0aXRsZT0iUGFyYW1ldGVycyIgc3R5bGU9Im1hcmdpbi1sZWZ0OiAwLjVpbjsgbWFyZ2luLXJpZ2h0OiAwLjVpbjsiPgorICAgICAgICAgICAgPGgzIGNsYXNzPSJ0aXRsZSI+UGFyYW1ldGVyczwvaDM+CisgICAgICAgICAgICA8cD4KKzxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5oZGwgOiA8L2NvZGU+PC9lbT5IYW5kbGUgcmV0dXJuZWQgZnJvbSBhbiBlYXJsaWVyIGNhbGwgdG8KKzxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+b3Bfb3Blbl9hZ2VudCgpPC9jb2RlPgorPC9wPgorICAgICAgICAgICAgPHA+Cis8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29kZSA6IDwvY29kZT48L2VtPlBvaW50ZXIgdG8gdGhlIGxvY2F0aW9uIG9mIHRoZSBjb2RlIHdpdGggZGVidWcgaW5mbworPC9wPgorICAgICAgICAgICAgPHA+Cis8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bnJfZW50cnkgOiA8L2NvZGU+PC9lbT5OdW1iZXIgb2YgZW50cmllcyBpbiBjb21waWxlX21hcAorPC9wPgorICAgICAgICAgICAgPHA+Cis8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29tcGlsZV9tYXAgOiA8L2NvZGU+PC9lbT5BcnJheSBvZiBzdHJ1Y3QgZGVidWdfbGluZV9pbmZvLiAgU2VlIHRoZSBKVk1USSBhZ2VudAorbGlicmFyeSBpbXBsZW1lbnRhdGlvbiBmb3IgYW4gZXhhbXBsZSBvZiB3aGF0IGluZm9ybWF0aW9uIHNob3VsZCBiZSByZXRyaWV2ZWQKK2Zyb20gYSBWTSB0byBmaWxsIG91dCB0aGlzIGRhdGEgc3RydWN0dXJlLgorPC9wPgorICAgICAgICAgIDwvZGl2PgorICAgICAgICAgIDxkaXYgY2xhc3M9Im5vdGUiIHRpdGxlPSJSZXR1cm4gdmFsdWUiIHN0eWxlPSJtYXJnaW4tbGVmdDogMC41aW47IG1hcmdpbi1yaWdodDogMC41aW47Ij4KKyAgICAgICAgICAgIDxoMyBjbGFzcz0idGl0bGUiPlJldHVybiB2YWx1ZTwvaDM+CisgICAgICAgICAgICA8cD5SZXR1cm5zIDAgb24gc3VjY2VzczsgLTEgb3RoZXJ3aXNlLiBJZiAtMSBpcyByZXR1cm5lZCwgPGNvZGUgY2xhc3M9ImNvZGUiPmVycm5vPC9jb2RlPiBpcyBzZXQKK3RvIGluZGljYXRlIHRoZSBuYXR1cmUgb2YgdGhlIGVycm9yLiAKKzxjb2RlIGNsYXNzPSJjb2RlIj5lcnJubzwvY29kZT4gaXMgc2V0IHRvIEVJTlZBTCBpZiBhbiBpbnZhbGlkIDxjb2RlIGNsYXNzPSJjb2RlIj5vcF9hZ2VudF90PC9jb2RlPgoraGFuZGxlIGlzIHBhc3NlZC4gRm9yIGEgbGlzdCBvZiBvdGhlciBwb3NzaWJsZSA8Y29kZSBjbGFzcz0iY29kZSI+ZXJybm88L2NvZGU+IHZhbHVlcywgc2VlIHRoZSBtYW4gcGFnZXMgZm9yOjwvcD4KKyAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJjb2RlIj5nZXR0aW1lb2ZkYXksIGZ0ZWxsLCBmd3JpdGU8L2NvZGU+CisgICAgICAgICAgPC9kaXY+CisgICAgICAgIDwvZGl2PgorICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0MSIgdGl0bGU9IjUuoG9wX3VubG9hZF9uYXRpdmVfY29kZSI+CisgICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KKyAgICAgICAgICAgIDxkaXY+CisgICAgICAgICAgICAgIDxkaXY+CisgICAgICAgICAgICAgICAgPGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj48YSBpZD0ib3BfdW5sb2FkX25hdGl2ZV9jb2RlIj48L2E+NS6gb3BfdW5sb2FkX25hdGl2ZV9jb2RlPC9oMj4KKyAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICA8ZGl2IGNsYXNzPSJmdW5jc3lub3BzaXMiPldyaXRlIGluZm9ybWF0aW9uIHRvIHRoZSBKSVQgZHVtcCBmaWxlIGFib3V0IGludmFsaWRhdGVkIGNvbXBpbGVkIGNvZGUuCis8cHJlIGNsYXNzPSJmdW5jc3lub3BzaXNpbmZvIj4jaW5jbHVkZSAmbHQ7b3BhZ2VudC5oJmd0OzwvcHJlPjx0YWJsZSBib3JkZXI9IjAiIHN1bW1hcnk9IkZ1bmN0aW9uIHN5bm9wc2lzIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIGNsYXNzPSJmdW5jcHJvdG90eXBlLXRhYmxlIj48dHI+PHRkPjxjb2RlIGNsYXNzPSJmdW5jZGVmIj5pbnQgPGIgY2xhc3M9ImZzZnVuYyI+b3BfdW5sb2FkX25hdGl2ZV9jb2RlPC9iPig8L2NvZGU+PC90ZD48dGQ+PHZhciBjbGFzcz0icGRwYXJhbSI+aGRsPC92YXI+LCA8L3RkPjx0ZD6gPC90ZD48L3RyPjx0cj48dGQ+oDwvdGQ+PHRkPjx2YXIgY2xhc3M9InBkcGFyYW0iPnZtYTwvdmFyPjxjb2RlPik8L2NvZGU+OzwvdGQ+PHRkPqA8L3RkPjwvdHI+PC90YWJsZT48ZGl2IGNsYXNzPSJwYXJhbWRlZi1saXN0Ij48Y29kZT5vcF9hZ2VudF90PHZhciBjbGFzcz0icGRwYXJhbSI+aGRsPC92YXI+PC9jb2RlPjs8YnIgLz48Y29kZT51aW50NjRfdDx2YXIgY2xhc3M9InBkcGFyYW0iPnZtYTwvdmFyPjwvY29kZT47PC9kaXY+PGRpdiBjbGFzcz0iZnVuY3Byb3RvdHlwZS1zcGFjZXIiPqA8L2Rpdj48L2Rpdj4KKyAgICAgICAgICA8ZGl2IGNsYXNzPSJub3RlIiB0aXRsZT0iRGVzY3JpcHRpb24iIHN0eWxlPSJtYXJnaW4tbGVmdDogMC41aW47IG1hcmdpbi1yaWdodDogMC41aW47Ij48aDMgY2xhc3M9InRpdGxlIj5EZXNjcmlwdGlvbjwvaDM+CitTaWduYWwgdGhlIGludmFsaWRhdGlvbiBvZiBuYXRpdmUgY29kZSBmcm9tIGEgdmlydHVhbCBtYWNoaW5lLjwvZGl2PgorICAgICAgICAgIDxkaXYgY2xhc3M9Im5vdGUiIHRpdGxlPSJQYXJhbWV0ZXJzIiBzdHlsZT0ibWFyZ2luLWxlZnQ6IDAuNWluOyBtYXJnaW4tcmlnaHQ6IDAuNWluOyI+CisgICAgICAgICAgICA8aDMgY2xhc3M9InRpdGxlIj5QYXJhbWV0ZXJzPC9oMz4KKyAgICAgICAgICAgIDxwPgorPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmhkbCA6IDwvY29kZT48L2VtPkhhbmRsZSByZXR1cm5lZCBmcm9tIGFuIGVhcmxpZXIgY2FsbCB0bworPGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5vcF9vcGVuX2FnZW50KCk8L2NvZGU+IAorPC9wPgorICAgICAgICAgICAgPHA+Cis8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dm1hIDogPC9jb2RlPjwvZW0+VmlydHVhbCBtZW1vcnkgYWRkcmVzcyBvZiB0aGUgY29tcGlsZWQgY29kZSBiZWluZyB1bmxvYWRlZC4KK0FuIDxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+b3Bfd3JpdGVfbmF0aXZlX2NvZGUoKTwvY29kZT4gd2l0aCB0aGUgc2FtZSB2bWEgc2hvdWxkIGhhdmUgb2NjdXJyZWQgYmVmb3JlIHRoaXMgY2FsbC4KKzwvcD4KKyAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICA8ZGl2IGNsYXNzPSJub3RlIiB0aXRsZT0iUmV0dXJuIHZhbHVlIiBzdHlsZT0ibWFyZ2luLWxlZnQ6IDAuNWluOyBtYXJnaW4tcmlnaHQ6IDAuNWluOyI+CisgICAgICAgICAgICA8aDMgY2xhc3M9InRpdGxlIj5SZXR1cm4gdmFsdWU8L2gzPgorICAgICAgICAgICAgPHA+UmV0dXJucyAwIG9uIHN1Y2Nlc3M7IC0xIG90aGVyd2lzZS4gSWYgLTEgaXMgcmV0dXJuZWQsIDxjb2RlIGNsYXNzPSJjb2RlIj5lcnJubzwvY29kZT4gaXMgc2V0Cit0byBpbmRpY2F0ZSB0aGUgbmF0dXJlIG9mIHRoZSBlcnJvci4gCis8Y29kZSBjbGFzcz0iY29kZSI+ZXJybm88L2NvZGU+IGlzIHNldCB0byBFSU5WQUwgaWYgYW4gaW52YWxpZCA8Y29kZSBjbGFzcz0iY29kZSI+b3BfYWdlbnRfdDwvY29kZT4KK2hhbmRsZSBpcyBwYXNzZWQuIEZvciBhIGxpc3Qgb2Ygb3RoZXIgcG9zc2libGUgPGNvZGUgY2xhc3M9ImNvZGUiPmVycm5vPC9jb2RlPiB2YWx1ZXMsIHNlZSB0aGUgbWFuIHBhZ2VzIGZvcjo8L3A+CisgICAgICAgICAgICA8Y29kZSBjbGFzcz0iY29kZSI+Z2V0dGltZW9mZGF5LCBmd3JpdGU8L2NvZGU+CisgICAgICAgICAgPC9kaXY+CisgICAgICAgIDwvZGl2PgorICAgICAgPC9kaXY+CisgICAgPC9kaXY+CisgIDwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2RvYy9vcC1qaXQtZGV2ZWwueG1sIGIvb3Byb2ZpbGUtMC45LjcvZG9jL29wLWppdC1kZXZlbC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJkOWE4OAotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2RvYy9vcC1qaXQtZGV2ZWwueG1sCkBAIC0wLDAgKzEsMzE5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSdJU08tODg1OS0xJz8+Cis8IURPQ1RZUEUgYm9vayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMS4yLy9FTiIgImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4xLjIvZG9jYm9va3guZHRkIj4KKworPGJvb2sgaWQ9Im9wcm9maWxlLWRldmVsLWd1aWRlIj4KKzxib29raW5mbz4KKwk8dGl0bGU+T1Byb2ZpbGUgSklUIGFnZW50IGRldmVsb3BlciBndWlkZTwvdGl0bGU+CisgCisJPGF1dGhvcmdyb3VwPgorCQk8YXV0aG9yPgorCQkJPGZpcnN0bmFtZT5NYXluYXJkPC9maXJzdG5hbWU+CisJCQk8c3VybmFtZT5Kb2huc29uPC9zdXJuYW1lPgorCQkJPGFmZmlsaWF0aW9uPgorCQkJCTxhZGRyZXNzPjxlbWFpbD5tYXluYXJkakB1cy5pYm0uY29tPC9lbWFpbD48L2FkZHJlc3M+CisJCQk8L2FmZmlsaWF0aW9uPgorCQk8L2F1dGhvcj4KKwk8L2F1dGhvcmdyb3VwPgorCisJPGNvcHlyaWdodD4KKwkJPHllYXI+MjAwNzwveWVhcj4KKwkJPGhvbGRlcj5JQk0gQ29ycG9yYXRpb248L2hvbGRlcj4KKwk8L2NvcHlyaWdodD4KKzwvYm9va2luZm8+CisKKzx0b2M+PC90b2M+CisKKzxjaGFwdGVyIGlkPSJkZXZlbG9waW5nIj4KKwk8dGl0bGU+RGV2ZWxvcGluZyBhIG5ldyBKSVQgYWdlbnQ8L3RpdGxlPgorCTxwYXJhPgorCU9Qcm9maWxlIGluY2x1ZGVzIGEgaGVhZGVyIGZpbGUgYW5kIGxpYnJhcnkgdGhhdCBhcmUgaW50ZW5kZWQgdG8gYmUgdXNlZCBieQorCWRldmVsb3BlcnMgd2hvIHdpc2ggdG8gZXh0ZW5kIE9Qcm9maWxlJ3MgSklUIHN1cHBvcnQgdG8gb3RoZXIgbm9uLXN1cHBvcnRlZAorCXZpcnR1YWwgbWFjaGluZXMuICBUaGlzIGRldmVsb3BlciBndWlkZSBkZXNjcmliZXMgdGhlc2UgZGV2ZWxvcG1lbnQgZmlsZXMgYW5kIGhvdworCXRvIHVzZSB0aGVtLgorCTwvcGFyYT4KKzxzZWN0MSBpZD0iaml0LWRldmVsLW92ZXJ2aWV3Ij4KKzx0aXRsZT5PdmVydmlldzwvdGl0bGU+CisJPHBhcmE+CisJT1Byb2ZpbGUgYWxyZWFkeSBpbmNsdWRlcyBzb21lIGltcGxlbWVudGF0aW9ucyB0aGF0IHVzZSB0aGUgSklUIHN1cHBvcnQsCisJZS5nLiwgdGhlIEphdmEgVmlydHVhbCBNYWNoaW5lIFRvb2xraXQgSW50ZXJmYWNlIChKVk1USSkgbGlicmFyeSwKKwlsaWJqdm10aV9vcHJvZmlsZS5zby4gIEluIGRldmVsb3BpbmcgYSBuZXcgaW1wbGVtZW50YXRpb24sIHlvdSB3aWxsCisJbGlrZWx5IGZvbGxvdyBhIHNpbWlsYXIgKGlmIG5vdCBpZGVudGljYWwpIHByb2NlZHVyZSBhcyB3YXMgdXNlZCBpbgorCWRldmVsb3BpbmcgdGhlIEpWTVRJIGxpYnJhcnkuICBGb2xsb3dpbmcgYXJlIHRoZSBoaWdoIGxldmVsIHN0ZXBzIHRvIGZvbGxvdzoKKwk8b3JkZXJlZGxpc3Q+CisJPGxpc3RpdGVtPkVuc3VyZSB5b3VyIHZpcnR1YWwgbWFjaGluZSBwcm92aWRlcyBhbiBBUEkgdGhhdCwgYXQgbWluaW11bSwKKwljYW4gcHJvdmlkZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIGFib3V0IGR5bmFtaWNhbGx5IGNvbXBpbGVkIGNvZGU6CisJCTxpdGVtaXplZGxpc3Q+CisJCTxsaXN0aXRlbT5Ob3RpZmljYXRpb24gd2hlbiBjb21waWxhdGlvbiBvY2N1cnM8L2xpc3RpdGVtPgorCQk8bGlzdGl0ZW0+TmFtZSBvZiB0aGUgc3ltYm9sIChpLmUuLCBmdW5jdGlvbiBvciBjbGFzcy9tZXRob2QsIGV0Yy4pPC9saXN0aXRlbT4KKwkJPGxpc3RpdGVtPkFkZHJlc3MgaW4gYW5vbnltb3VzIG1lbW9yeSB3aGVyZSB0aGUgY29tcGlsZWQgY29kZSB3YXMgbG9hZGVkPC9saXN0aXRlbT4KKwkJPGxpc3RpdGVtPkxlbmd0aCBvZiB0aGUgY29tcGlsZWQgY29kZSBzZWdtZW50PC9saXN0aXRlbT4KKwkJPC9pdGVtaXplZGxpc3Q+CisJPC9saXN0aXRlbT4KKwk8bGlzdGl0ZW0+V3JpdGUgYW4gYWdlbnQgbGlicmFyeSB0aGF0IGNvbW11bmljYXRlcyB3aXRoIHlvdXIgVk0gdG8gb2J0YWluCisJY29tcGlsZWQgY29kZSBub3RpZmljYXRpb25zLiAgSW52b2tlIHRoZSByZXF1aXJlZCBmdW5jdGlvbnMgZnJvbSBvcGFnZW50LmgKKwkoPHhyZWYgbGlua2VuZD0iaml0LWludGVyZmFjZSIgLz4pIGFuZCBsaW5rIHlvdXIgbGlicmFyeSB3aXRoIGxpYm9wYWdlbnQuc28KKwkoaW5zdGFsbGVkIGF0IDxmaWxlbmFtZT4mbHQ7b3Byb2ZpbGVfaW5zdGFsbF9kaXImZ3Q7L2xpYi9vcHJvZmlsZTwvZmlsZW5hbWU+KS4KKwk8L2xpc3RpdGVtPgorCTwvb3JkZXJlZGxpc3Q+CisKKwk8L3BhcmE+Cis8L3NlY3QxPgorPHNlY3QxIGlkPSJqaXQtaW50ZXJmYWNlIj4KKzx0aXRsZT5JbXBsZW1lbnRpbmcgSklUIHN1cHBvcnQgZm9yIGEgbmV3IHZpcnR1YWwgbWFjaGluZTwvdGl0bGU+CisJPHBhcmE+CisJVGhlIEpJVCBzdXBwb3J0IEFQSSBmb3IgT1Byb2ZpbGUgaXMgZGVmaW5lZCAKKwlpbiA8ZmlsZW5hbWU+Jmx0O29wcm9maWxlLWluc3RhbGwtZGlyJmd0Oy9pbmNsdWRlL29wYWdlbnQuaDwvZmlsZW5hbWU+LgorCVNvbWUgcGFydHMgb2YgdGhlIEFQSSBhcmUgbWFuZGF0b3J5IGZvciBhbiBhZ2VudCBsaWJyYXJ5IHRvIHVzZTsgb3RoZXIKKwlwYXJ0cyBhcmUgb3B0aW9uYWwuICBUaGUgbWFuZGF0b3J5IGZ1bmN0aW9ucyBhcmUgc2hvd24gYmVsb3cuCisJPC9wYXJhPgorPHNjcmVlbj4KK29wX2FnZW50X3Qgb3Bfb3Blbl9hZ2VudCh2b2lkKTsKKwordm9pZCBvcF9jbG9zZV9hZ2VudChvcF9hZ2VudF90IGhkbCk7CisKK2ludCBvcF93cml0ZV9uYXRpdmVfY29kZShvcF9hZ2VudF90IGhkbCwgY2hhciBjb25zdCAqIHN5bWJvbF9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IHZtYSwgY29uc3Qgdm9pZCAqIGNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IGNvZGVfc2l6ZSk7Cis8L3NjcmVlbj4KKworCTxwYXJhPgorCVRvIGltcGxlbWVudCB0aGlzIHBhcnQgb2YgeW91ciBsaWJyYXJ5LCB5b3UgbXVzdCBwZXJmb3JtIHRoZQorCWZvbGxvd2luZyBzdGVwczoKKwk8b3JkZXJlZGxpc3Q+CisgICAgICAgIDxsaXN0aXRlbT5JbXBsZW1lbnQgYSBmdW5jdGlvbiB0byBzZXQgdXAgaW5pdGlhbCBjb21tdW5pY2F0aW9uIHdpdGggdGhlIFZNLgorCU9uY2UgY29tbXVuaWNhdGlvbiB0byB0aGUgVk0gaXMgZXN0YWJsaXNoZWQsIHlvdXIgYWdlbnQgbGlicmFyeSBzaG91bGQgY2FsbAorCTxmdW5jdGlvbj5vcF9vcF9hZ2VudCgpPC9mdW5jdGlvbj4gYW5kIGNhY2hlIHRoZSByZXR1cm5lZCA8Y29kZT5vcF9hZ2VudF90PC9jb2RlPiBoYW5kbGUgZm9yIHVzZSBpbgorCWZ1dHVyZSBjYWxscy48L2xpc3RpdGVtPgorICAgICAgICA8bGlzdGl0ZW0+UGVyZm9ybSBhbnkgbmVjZXNzYXJ5IHN0ZXBzIHRvIHJlZ2lzdGVyIHdpdGggdGhlIFZNIHRvIGJlIG5vdGlmaWVkIG9mCisJY29tcGlsZWQgY29kZSBsb2FkIGV2ZW50cy4gIFJlZ2lzdHJhdGlvbiBtdXN0IGluY2x1ZGUgYSBjYWxsYmFjayBmdW5jdGlvbiB5b3UKKwl3aWxsIGltcGxlbWVudCBpbiB0aGUgbGlicmFyeSB0byBoYW5kbGUgdGhlIGNvbXBpbGVkIGNvZGUgbG9hZCBldmVudHMuPC9saXN0aXRlbT4KKyAgICAgICAgPGxpc3RpdGVtPlRoZSBjYWxsYmFjayBmdW5jdGlvbiBtZW50aW9uZWQgYWJvdmUgbXVzdCBvYnRhaW4gYWxsIHJlcXVpcmVkCisJaW5mb3JtYXRpb24gZnJvbSB0aGUgVk0gdG8gcGFzcyB0byBsaWJvcGFnZW50IHZpYSA8ZnVuY3Rpb24+b3Bfd3JpdGVfbmF0aXZlX2NvZGUoKTwvZnVuY3Rpb24+LjwvbGlzdGl0ZW0+CisgICAgICAgIDxsaXN0aXRlbT5XaGVuIGRpc2Nvbm5lY3RpbmcgZnJvbSB0aGUgVk0sIHlvdXIgbGlicmFyeSBzaG91bGQgY2FsbAorCTxmdW5jdGlvbj5vcF9hZ2VudF9jbG9zZSgpPC9mdW5jdGlvbj4uPC9saXN0aXRlbT4KKwk8L29yZGVyZWRsaXN0PgorCTwvcGFyYT4KKworCTxwYXJhPlVzZSBvZiB0aGUgZnVuY3Rpb25zIGJlbG93IGFyZSBvcHRpb25hbCwgZGVwZW5kaW5nIG9uIHRoZSBraW5kcyBvZiBpbmZvcm1hdGlvbiB5b3VyIFZNCisJY2FuIHByb3ZpZGUgdG8geW91ciBhZ2VudCBsaWJyYXJ5LiAgU2VlIHRoZSBKVk1USSBhZ2VudCBsaWJyYXJ5IGZvciBhbiBleGFtcGxlIG9mIGhvdyB0byB1c2UKKwl0aGVzZSBmdW5jdGlvbnMuCis8c2NyZWVuPgoraW50IG9wX3VubG9hZF9uYXRpdmVfY29kZShvcF9hZ2VudF90IGhkbCwgdWludDY0X3Qgdm1hKTsKKworaW50IG9wX3dyaXRlX2RlYnVnX2xpbmVfaW5mbyhvcF9hZ2VudF90IGhkbCwgdm9pZCBjb25zdCAqIGNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBucl9lbnRyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRlYnVnX2xpbmVfaW5mbyBjb25zdCAqIGNvbXBpbGVfbWFwKTsKKzwvc2NyZWVuPgorCTwvcGFyYT4KKwk8bm90ZT5XaGlsZSB0aGUgbGlib3BhZ2VudCBmdW5jdGlvbnMgYXJlIHRocmVhZC1zYWZlLCB5b3Ugc2hvdWxkIG5vdCB1c2UgdGhlbSBpbgorCXNpZ25hbCBoYW5kbGVycy4KKwk8L25vdGU+Cis8L3NlY3QxPgorPC9jaGFwdGVyPgorCisKKzxjaGFwdGVyIGlkPSJqaXQtYXBpIj4KKwk8dGl0bGU+VGhlIEpJVCBzdXBwb3J0IEFQSTwvdGl0bGU+CisJPHBhcmE+CisJVGhpcyBjaGFwdGVyIGRlc2NyaWJlcyB0aGUgSklUIHN1cHBvcnQgQVBJLiAgU2VlIG9wYWdlbnQuaCBmb3IgbW9yZSBkZXRhaWxzLgorICAgICAgICA8L3BhcmE+CisgICAgICAgIAorPHNlY3QxIGlkPSJvcF9vcGVuX2FnZW50Ij4KKzx0aXRsZT5vcF9vcGVuX2FnZW50PC90aXRsZT4KKworPGZ1bmNzeW5vcHNpcz5Jbml0aWFsaXplcyB0aGUgYWdlbnQgbGlicmFyeS4KKzxmdW5jc3lub3BzaXNpbmZvPiNpbmNsdWRlICZsdDtvcGFnZW50LmgmZ3Q7PC9mdW5jc3lub3BzaXNpbmZvPgorPGZ1bmNwcm90b3R5cGU+Cis8ZnVuY2RlZj5vcF9hZ2VudF90IDxmdW5jdGlvbj5vcF9vcGVuX2FnZW50PC9mdW5jdGlvbj48L2Z1bmNkZWY+Cis8cGFyYW1kZWY+dm9pZDwvcGFyYW1kZWY+Cis8L2Z1bmNwcm90b3R5cGU+Cis8L2Z1bmNzeW5vcHNpcz4KKzxub3RlPgorPHRpdGxlPkRlc2NyaXB0aW9uPC90aXRsZT4KK1RoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgYnkgYWdlbnRzIGJlZm9yZSBhbnkgb3RoZXIgZnVuY3Rpb24uCitDcmVhdGVzIGFuZCBvcGVucyBhIEpJVCBkdW1wIGZpbGUgaW4gPGZpbGVuYW1lPi92YXIvbGliL29wcm9maWxlL2ppdGR1bXA8L2ZpbGVuYW1lPgordXNpbmcgdGhlIG5hbWluZyBjb252ZW50aW9uIDxmaWxlbmFtZT4mbHQ7cHJvY2Vzc19pZCZndDsuZHVtcDwvZmlsZW5hbWU+LgorPC9ub3RlPgorPG5vdGU+Cis8dGl0bGU+UGFyYW1ldGVyczwvdGl0bGU+CitOb25lCis8L25vdGU+Cis8bm90ZT4KKzx0aXRsZT5SZXR1cm4gdmFsdWU8L3RpdGxlPgorPHBhcmE+UmV0dXJucyBhIHZhbGlkIDxjb2RlPm9wX2FnZW50X3Q8L2NvZGU+IGhhbmRsZSBvciBOVUxMLgorSWYgTlVMTCBpcyByZXR1cm5lZCwgPGNvZGU+ZXJybm88L2NvZGU+IGlzIHNldCB0byBpbmRpY2F0ZSB0aGUgbmF0dXJlIG9mIHRoZSBlcnJvci4gRm9yIGEgbGlzdAorb2YgcG9zc2libGUgPGNvZGU+ZXJybm88L2NvZGU+IHZhbHVlcywgc2VlIHRoZSBtYW4gcGFnZXMgZm9yOjwvcGFyYT4KKzxjb2RlPgorc3RhdCwgY3JlYXQsIGdldHRpbWVvZmRheSwgZmRvcGVuLCBmd3JpdGUKKzwvY29kZT4KKzwvbm90ZT4KKzwvc2VjdDE+CisKKzxzZWN0MSBpZD0ib3BfY2xvc2VfYWdlbnQiPgorPHRpdGxlPm9wX2Nsb3NlX2FnZW50PC90aXRsZT4KKzxmdW5jc3lub3BzaXM+VW5pbml0aWFsaXplIHRoZSBhZ2VudCBsaWJyYXJ5LgorPGZ1bmNzeW5vcHNpc2luZm8+I2luY2x1ZGUgJmx0O29wYWdlbnQuaCZndDs8L2Z1bmNzeW5vcHNpc2luZm8+Cis8ZnVuY3Byb3RvdHlwZT4KKzxmdW5jZGVmPmludCA8ZnVuY3Rpb24+b3BfY2xvc2VfYWdlbnQ8L2Z1bmN0aW9uPjwvZnVuY2RlZj4KKzxwYXJhbWRlZj5vcF9hZ2VudF90IDxwYXJhbWV0ZXI+aGRsPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKzwvZnVuY3Byb3RvdHlwZT4KKzwvZnVuY3N5bm9wc2lzPgorPG5vdGU+Cis8dGl0bGU+RGVzY3JpcHRpb248L3RpdGxlPgorRnJlZXMgYWxsIHJlc291cmNlcyBhbmQgY2xvc2VzIG9wZW4gZmlsZSBoYW5kbGVzLgorPC9ub3RlPgorPG5vdGU+Cis8dGl0bGU+UGFyYW1ldGVyczwvdGl0bGU+Cis8cGFyYW1ldGVyPmhkbCA6IDwvcGFyYW1ldGVyPkhhbmRsZSByZXR1cm5lZCBmcm9tIGFuIGVhcmxpZXIgY2FsbCB0bworPGZ1bmN0aW9uPm9wX29wZW5fYWdlbnQoKTwvZnVuY3Rpb24+Cis8L25vdGU+Cis8bm90ZT4KKzx0aXRsZT5SZXR1cm4gdmFsdWU8L3RpdGxlPgorPHBhcmE+UmV0dXJucyAwIG9uIHN1Y2Nlc3M7IC0xIG90aGVyd2lzZS4gSWYgLTEgaXMgcmV0dXJuZWQsIDxjb2RlPmVycm5vPC9jb2RlPiBpcyBzZXQKK3RvIGluZGljYXRlIHRoZSBuYXR1cmUgb2YgdGhlIGVycm9yLiAKKzxjb2RlPmVycm5vPC9jb2RlPiBpcyBzZXQgdG8gRUlOVkFMIGlmIGFuIGludmFsaWQgPGNvZGU+b3BfYWdlbnRfdDwvY29kZT4KK2hhbmRsZSBpcyBwYXNzZWQuIEZvciBhIGxpc3Qgb2Ygb3RoZXIgcG9zc2libGUgPGNvZGU+ZXJybm88L2NvZGU+IHZhbHVlcywgc2VlIHRoZSBtYW4gcGFnZXMgZm9yOjwvcGFyYT4KKzxjb2RlPmdldHRpbWVvZmRheSwgZndyaXRlPC9jb2RlPgorPC9ub3RlPgorPC9zZWN0MT4KKworPHNlY3QxIGlkPSJvcF93cml0ZV9uYXRpdmVfY29kZSI+Cis8dGl0bGU+b3Bfd3JpdGVfbmF0aXZlX2NvZGU8L3RpdGxlPgorPGZ1bmNzeW5vcHNpcz5Xcml0ZSBpbmZvcm1hdGlvbiBhYm91dCBjb21waWxlZCBjb2RlIHRvIGEgSklUIGR1bXAgZmlsZS4KKzxmdW5jc3lub3BzaXNpbmZvPiNpbmNsdWRlICZsdDtvcGFnZW50LmgmZ3Q7PC9mdW5jc3lub3BzaXNpbmZvPgorPGZ1bmNwcm90b3R5cGU+Cis8ZnVuY2RlZj5pbnQgPGZ1bmN0aW9uPm9wX3dyaXRlX25hdGl2ZV9jb2RlPC9mdW5jdGlvbj48L2Z1bmNkZWY+Cis8cGFyYW1kZWY+b3BfYWdlbnRfdDxwYXJhbWV0ZXI+aGRsPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKzxwYXJhbWRlZj5jaGFyIGNvbnN0ICo8cGFyYW1ldGVyPnN5bWJvbF9uYW1lPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKzxwYXJhbWRlZj51aW50NjRfdDxwYXJhbWV0ZXI+dm1hPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKzxwYXJhbWRlZj52b2lkIGNvbnN0ICo8cGFyYW1ldGVyPmNvZGU8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorPHBhcmFtZGVmPmNvbnN0IHVuc2lnbmVkIGludDxwYXJhbWV0ZXI+Y29kZV9zaXplPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKzwvZnVuY3Byb3RvdHlwZT4KKzwvZnVuY3N5bm9wc2lzPgorPG5vdGU+Cis8dGl0bGU+RGVzY3JpcHRpb248L3RpdGxlPgorU2lnbmFsIHRoZSBkeW5hbWljIGdlbmVyYXRpb24gb2YgbmF0aXZlIGNvZGUgZnJvbSBhIHZpcnR1YWwgbWFjaGluZS4KK1dyaXRlcyBhIEpJVCBkdW1wIHJlY29yZCB0byB0aGUgb3BlbiBKSVQgZHVtcCBmaWxlIHVzaW5nIHRoZSBwYXNzZWQgaW5mb3JtYXRpb24uCis8L25vdGU+Cis8bm90ZT4KKzx0aXRsZT5QYXJhbWV0ZXJzPC90aXRsZT4KKzxwYXJhPgorPHBhcmFtZXRlcj5oZGwgOiA8L3BhcmFtZXRlcj5IYW5kbGUgcmV0dXJuZWQgZnJvbSBhbiBlYXJsaWVyIGNhbGwgdG8KKzxmdW5jdGlvbj5vcF9vcGVuX2FnZW50KCk8L2Z1bmN0aW9uPgorPC9wYXJhPgorPHBhcmE+Cis8cGFyYW1ldGVyPnN5bWJvbF9uYW1lIDogPC9wYXJhbWV0ZXI+VGhlIG5hbWUgb2YgdGhlIHN5bWJvbCBiZWluZyBkeW5hbWljYWxseSBjb21waWxlZC4KKyBUaGlzIG5hbWUgY2FuIChhbmQgc2hvdWxkKSBjb250YWluIGFsbCBuZWNlc3NhcnkgaW5mb3JtYXRpb24gdG8gZGlzYW1iaWd1YXRlIGl0IGZyb20KKyBzeW1ib2xzIG9mIHRoZSBzYW1lIG5hbWU7IGUuZy4sIGNsYXNzLCBtZXRob2Qgc2lnbmF0dXJlLgorPC9wYXJhPgorPHBhcmE+Cis8cGFyYW1ldGVyPnZtYSA6IDwvcGFyYW1ldGVyPlZpcnR1YWwgbWVtb3J5IGFkZHJlc3Mgb2YgdGhlIGV4ZWN1dGFibGUgY29kZQorPC9wYXJhPgorPHBhcmE+Cis8cGFyYW1ldGVyPmNvZGUgOiA8L3BhcmFtZXRlcj5Qb2ludGVyIHRvIHRoZSBsb2NhdGlvbiBvZiB0aGUgY29tcGlsZWQgY29kZS4KKwlUaGVvcmV0aWNhbGx5LCB0aGlzIG1heSBiZSBhIGRpZmZlcmVudCBsb2NhdGlvbiBmcm9tCisJdGhhdCBnaXZlbiBieSB0aGUgdm1hIGFyZ3VtZW50LiAgRm9yIHNvbWUgSklUIGNvbXBpbGVycywKKwlvYnRhaW5pbmcgdGhlIGNvZGUgbWF5IGJlIGltcHJhY3RpY2FsLiAgRm9yIHRoaXMgKG9yIGFueSBvdGhlcikKKwlyZWFzb24sIHRoZSBhZ2VudCBjYW4gY2hvb3NlIHRvIHBhc3MgTlVMTCBmb3IgdGhpcyBwYXJhZW10ZXIuCisJSWYgTlVMTCBpcyBwYXNzZWQsIG5vIGNvZGUgd2lsbCBiZSBjb3BpZWQgaW50byB0aGUgSklUIGR1bXAKKwlmaWxlLgorPC9wYXJhPgorPHBhcmE+Cis8cGFyYW1ldGVyPmNvZGVfc2l6ZSA6IDwvcGFyYW1ldGVyPlNpemUgb2YgdGhlIGNvbXBpbGVkIGNvZGUKKzwvcGFyYT4KKzwvbm90ZT4KKzxub3RlPgorPHRpdGxlPlJldHVybiB2YWx1ZTwvdGl0bGU+Cis8cGFyYT5SZXR1cm5zIDAgb24gc3VjY2VzczsgLTEgb3RoZXJ3aXNlLiBJZiAtMSBpcyByZXR1cm5lZCwgPGNvZGU+ZXJybm88L2NvZGU+IGlzIHNldAordG8gaW5kaWNhdGUgdGhlIG5hdHVyZSBvZiB0aGUgZXJyb3IuIAorPGNvZGU+ZXJybm88L2NvZGU+IGlzIHNldCB0byBFSU5WQUwgaWYgYW4gaW52YWxpZCA8Y29kZT5vcF9hZ2VudF90PC9jb2RlPgoraGFuZGxlIGlzIHBhc3NlZC4gRm9yIGEgbGlzdCBvZiBvdGhlciBwb3NzaWJsZSA8Y29kZT5lcnJubzwvY29kZT4gdmFsdWVzLCBzZWUgdGhlIG1hbiBwYWdlcyBmb3I6PC9wYXJhPgorPGNvZGU+Z2V0dGltZW9mZGF5LCBmd3JpdGU8L2NvZGU+Cis8L25vdGU+Cis8L3NlY3QxPgorCisKKzxzZWN0MSBpZD0ib3Bfd3JpdGVfZGVidWdfbGluZV9pbmZvIj4KKzx0aXRsZT5vcF93cml0ZV9kZWJ1Z19saW5lX2luZm88L3RpdGxlPgorPGZ1bmNzeW5vcHNpcz5Xcml0ZSBkZWJ1ZyBpbmZvcm1hdGlvbiBhYm91dCBjb21waWxlZCBjb2RlIHRvIGEgSklUIGR1bXAgZmlsZS4KKzxmdW5jc3lub3BzaXNpbmZvPiNpbmNsdWRlICZsdDtvcGFnZW50LmgmZ3Q7PC9mdW5jc3lub3BzaXNpbmZvPgorPGZ1bmNwcm90b3R5cGU+Cis8ZnVuY2RlZj5pbnQgPGZ1bmN0aW9uPm9wX3dyaXRlX2RlYnVnX2xpbmVfaW5mbzwvZnVuY3Rpb24+PC9mdW5jZGVmPgorPHBhcmFtZGVmPm9wX2FnZW50X3Q8cGFyYW1ldGVyPmhkbDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+Cis8cGFyYW1kZWY+dm9pZCBjb25zdCAqPHBhcmFtZXRlcj5jb2RlPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKzxwYXJhbWRlZj5zaXplX3Q8cGFyYW1ldGVyPm5yX2VudHJ5PC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKzxwYXJhbWRlZj5zdHJ1Y3QgZGVidWdfbGluZV9pbmZvIGNvbnN0ICo8cGFyYW1ldGVyPmNvbXBpbGVfbWFwPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKzwvZnVuY3Byb3RvdHlwZT4KKzwvZnVuY3N5bm9wc2lzPgorPG5vdGU+Cis8dGl0bGU+RGVzY3JpcHRpb248L3RpdGxlPgorQWRkIGRlYnVnIGxpbmUgaW5mb3JtYXRpb24gdG8gYSBwaWVjZSBvZiBjb2RlLiBBbiA8ZnVuY3Rpb24+b3Bfd3JpdGVfbmF0aXZlX2NvZGUoKTwvZnVuY3Rpb24+Cit3aXRoIHRoZSBzYW1lIGNvZGUgcG9pbnRlciBzaG91bGQgaGF2ZSBvY2N1cnJlZCBiZWZvcmUgdGhpcyBjYWxsLiBJdCdzIG5vdAorbmVjZXNzYXJ5IHRvIHByb3ZpZGUgb25lIGxpbmVubyBpbmZvcm1hdGlvbiBlbnRyeSBwZXIgbWFjaGluZSBpbnN0cnVjdGlvbjsKK3RoZSBhcnJheSBjYW4gY29udGFpbiBob2xlLgorPC9ub3RlPgorPG5vdGU+Cis8dGl0bGU+UGFyYW1ldGVyczwvdGl0bGU+Cis8cGFyYT4KKzxwYXJhbWV0ZXI+aGRsIDogPC9wYXJhbWV0ZXI+SGFuZGxlIHJldHVybmVkIGZyb20gYW4gZWFybGllciBjYWxsIHRvCis8ZnVuY3Rpb24+b3Bfb3Blbl9hZ2VudCgpPC9mdW5jdGlvbj4KKzwvcGFyYT4KKzxwYXJhPgorPHBhcmFtZXRlcj5jb2RlIDogPC9wYXJhbWV0ZXI+UG9pbnRlciB0byB0aGUgbG9jYXRpb24gb2YgdGhlIGNvZGUgd2l0aCBkZWJ1ZyBpbmZvCis8L3BhcmE+Cis8cGFyYT4KKzxwYXJhbWV0ZXI+bnJfZW50cnkgOiA8L3BhcmFtZXRlcj5OdW1iZXIgb2YgZW50cmllcyBpbiBjb21waWxlX21hcAorPC9wYXJhPgorPHBhcmE+Cis8cGFyYW1ldGVyPmNvbXBpbGVfbWFwIDogPC9wYXJhbWV0ZXI+QXJyYXkgb2Ygc3RydWN0IGRlYnVnX2xpbmVfaW5mby4gIFNlZSB0aGUgSlZNVEkgYWdlbnQKK2xpYnJhcnkgaW1wbGVtZW50YXRpb24gZm9yIGFuIGV4YW1wbGUgb2Ygd2hhdCBpbmZvcm1hdGlvbiBzaG91bGQgYmUgcmV0cmlldmVkCitmcm9tIGEgVk0gdG8gZmlsbCBvdXQgdGhpcyBkYXRhIHN0cnVjdHVyZS4KKzwvcGFyYT4KKzwvbm90ZT4KKzxub3RlPgorPHRpdGxlPlJldHVybiB2YWx1ZTwvdGl0bGU+Cis8cGFyYT5SZXR1cm5zIDAgb24gc3VjY2VzczsgLTEgb3RoZXJ3aXNlLiBJZiAtMSBpcyByZXR1cm5lZCwgPGNvZGU+ZXJybm88L2NvZGU+IGlzIHNldAordG8gaW5kaWNhdGUgdGhlIG5hdHVyZSBvZiB0aGUgZXJyb3IuIAorPGNvZGU+ZXJybm88L2NvZGU+IGlzIHNldCB0byBFSU5WQUwgaWYgYW4gaW52YWxpZCA8Y29kZT5vcF9hZ2VudF90PC9jb2RlPgoraGFuZGxlIGlzIHBhc3NlZC4gRm9yIGEgbGlzdCBvZiBvdGhlciBwb3NzaWJsZSA8Y29kZT5lcnJubzwvY29kZT4gdmFsdWVzLCBzZWUgdGhlIG1hbiBwYWdlcyBmb3I6PC9wYXJhPgorPGNvZGU+Z2V0dGltZW9mZGF5LCBmdGVsbCwgZndyaXRlPC9jb2RlPgorPC9ub3RlPgorPC9zZWN0MT4KKworPHNlY3QxIGlkPSJvcF91bmxvYWRfbmF0aXZlX2NvZGUiPgorPHRpdGxlPm9wX3VubG9hZF9uYXRpdmVfY29kZTwvdGl0bGU+Cis8ZnVuY3N5bm9wc2lzPldyaXRlIGluZm9ybWF0aW9uIHRvIHRoZSBKSVQgZHVtcCBmaWxlIGFib3V0IGludmFsaWRhdGVkIGNvbXBpbGVkIGNvZGUuCis8ZnVuY3N5bm9wc2lzaW5mbz4jaW5jbHVkZSAmbHQ7b3BhZ2VudC5oJmd0OzwvZnVuY3N5bm9wc2lzaW5mbz4KKzxmdW5jcHJvdG90eXBlPgorPGZ1bmNkZWY+aW50IDxmdW5jdGlvbj5vcF91bmxvYWRfbmF0aXZlX2NvZGU8L2Z1bmN0aW9uPjwvZnVuY2RlZj4KKzxwYXJhbWRlZj5vcF9hZ2VudF90PHBhcmFtZXRlcj5oZGw8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorPHBhcmFtZGVmPnVpbnQ2NF90PHBhcmFtZXRlcj52bWE8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorPC9mdW5jcHJvdG90eXBlPgorPC9mdW5jc3lub3BzaXM+Cis8bm90ZT4KKzx0aXRsZT5EZXNjcmlwdGlvbjwvdGl0bGU+CitTaWduYWwgdGhlIGludmFsaWRhdGlvbiBvZiBuYXRpdmUgY29kZSBmcm9tIGEgdmlydHVhbCBtYWNoaW5lLjwvbm90ZT4KKzxub3RlPgorPHRpdGxlPlBhcmFtZXRlcnM8L3RpdGxlPgorPHBhcmE+Cis8cGFyYW1ldGVyPmhkbCA6IDwvcGFyYW1ldGVyPkhhbmRsZSByZXR1cm5lZCBmcm9tIGFuIGVhcmxpZXIgY2FsbCB0bworPGZ1bmN0aW9uPm9wX29wZW5fYWdlbnQoKTwvZnVuY3Rpb24+IAorPC9wYXJhPgorPHBhcmE+Cis8cGFyYW1ldGVyPnZtYSA6IDwvcGFyYW1ldGVyPlZpcnR1YWwgbWVtb3J5IGFkZHJlc3Mgb2YgdGhlIGNvbXBpbGVkIGNvZGUgYmVpbmcgdW5sb2FkZWQuCitBbiA8ZnVuY3Rpb24+b3Bfd3JpdGVfbmF0aXZlX2NvZGUoKTwvZnVuY3Rpb24+IHdpdGggdGhlIHNhbWUgdm1hIHNob3VsZCBoYXZlIG9jY3VycmVkIGJlZm9yZSB0aGlzIGNhbGwuCis8L3BhcmE+Cis8L25vdGU+Cis8bm90ZT4KKzx0aXRsZT5SZXR1cm4gdmFsdWU8L3RpdGxlPgorPHBhcmE+UmV0dXJucyAwIG9uIHN1Y2Nlc3M7IC0xIG90aGVyd2lzZS4gSWYgLTEgaXMgcmV0dXJuZWQsIDxjb2RlPmVycm5vPC9jb2RlPiBpcyBzZXQKK3RvIGluZGljYXRlIHRoZSBuYXR1cmUgb2YgdGhlIGVycm9yLiAKKzxjb2RlPmVycm5vPC9jb2RlPiBpcyBzZXQgdG8gRUlOVkFMIGlmIGFuIGludmFsaWQgPGNvZGU+b3BfYWdlbnRfdDwvY29kZT4KK2hhbmRsZSBpcyBwYXNzZWQuIEZvciBhIGxpc3Qgb2Ygb3RoZXIgcG9zc2libGUgPGNvZGU+ZXJybm88L2NvZGU+IHZhbHVlcywgc2VlIHRoZSBtYW4gcGFnZXMgZm9yOjwvcGFyYT4KKzxjb2RlPmdldHRpbWVvZmRheSwgZndyaXRlPC9jb2RlPgorPC9ub3RlPgorPC9zZWN0MT4KKworPC9jaGFwdGVyPgorCis8L2Jvb2s+CmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9kb2Mvb3Bhbm5vdGF0ZS4xLmluIGIvb3Byb2ZpbGUtMC45LjcvZG9jL29wYW5ub3RhdGUuMS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMWEzNjliCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvZG9jL29wYW5ub3RhdGUuMS5pbgpAQCAtMCwwICsxLDExOSBAQAorLlRIIE9QQU5OT1RBVEUgMSAiQERBVEVAIiAib3Byb2ZpbGUgQFZFUlNJT05AIgorLlVDIDQKKy5TSCBOQU1FCitvcGFubm90YXRlIFwtIHByb2R1Y2Ugc291cmNlIG9yIGFzc2VtYmx5IGFubm90YXRlZCB3aXRoIHByb2ZpbGUgZGF0YQorLlNIIFNZTk9QU0lTCisuYnIKKy5CIG9wYW5ub3RhdGUKK1sKKy5JIG9wdGlvbnMKK10KK1twcm9maWxlIHNwZWNpZmljYXRpb25dCisuU0ggREVTQ1JJUFRJT04KKworLkIgb3Bhbm5vdGF0ZQorb3V0cHV0cyBhbm5vdGF0ZWQgc291cmNlIGFuZC9vciBhc3NlbWJseSBmcm9tIHByb2ZpbGUgZGF0YSBvZiBhbiBPUHJvZmlsZQorc2Vzc2lvbi4gU2VlIG9wcm9maWxlKDEpIGZvciBob3cgdG8gd3JpdGUgcHJvZmlsZSBzcGVjaWZpY2F0aW9ucy4KKworLlNIIE9QVElPTlMKKy5UUAorLkJJICItLWFzc2VtYmx5IC8gLWEiCitPdXRwdXQgYW5ub3RhdGVkIGFzc2VtYmx5LiBJZiB0aGlzIGlzIGNvbWJpbmVkIHdpdGggLS1zb3VyY2UsIHRoZW4gbWl4ZWQKK3NvdXJjZSAvIGFzc2VtYmx5IGFubm90YXRpb25zIGFyZSBvdXRwdXQuCisuYnIKKy5UUAorLkJJICItLWRlbWFuZ2xlIC8gLUQgbm9uZXxzbWFydHxub3JtYWwiCitub25lOiBubyBkZW1hbmdsaW5nLiBub3JtYWw6IHVzZSBkZWZhdWx0IGRlbWFuZ2xlciAoZGVmYXVsdCkgc21hcnQ6IHVzZQorcGF0dGVybi1tYXRjaGluZyB0byBtYWtlIEMrKyBzeW1ib2wgZGVtYW5nbGluZyBtb3JlIHJlYWRhYmxlLgorLmJyCisuVFAKKy5CSSAiLS1leGNsdWRlLWRlcGVuZGVudCAvIC14IgorRG8gbm90IGluY2x1ZGUgYXBwbGljYXRpb24tc3BlY2lmaWMgaW1hZ2VzIGZvciBsaWJyYXJpZXMsIGtlcm5lbCBtb2R1bGVzCithbmQgdGhlIGtlcm5lbC4gVGhpcyBvcHRpb24gb25seSBtYWtlcyBzZW5zZSBpZiB0aGUgcHJvZmlsZSBzZXNzaW9uCit1c2VkIC0tc2VwYXJhdGUuCisuYnIKKy5UUAorLkJJICItLWV4Y2x1ZGUtZmlsZSBbZmlsZXNdIgorRXhjbHVkZSBhbGwgZmlsZXMgaW4gdGhlIGdpdmVuIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGdsb2IgcGF0dGVybnMuCisuYnIKKy5UUAorLkJJICItLWV4Y2x1ZGUtc3ltYm9scyAvIC1lIFtzeW1ib2xzXSIKK0V4Y2x1ZGUgYWxsIHRoZSBzeW1ib2xzIGluIHRoZSBnaXZlbiBjb21tYS1zZXBhcmF0ZWQgbGlzdC4KKy5icgorLlRQCisuQkkgIi0taGVscCAvIC0/IC8gLS11c2FnZSIKK1Nob3cgaGVscCBtZXNzYWdlLgorLmJyCisuVFAKKy5CSSAiLS1pbWFnZS1wYXRoIC8gLXAgW3BhdGhzXSIKK0NvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGFkZGl0aW9uYWwgcGF0aHMgdG8gc2VhcmNoIGZvciBiaW5hcmllcy4KK1RoaXMgaXMgbmVlZGVkIHRvIGZpbmQgbW9kdWxlcyBpbiBrZXJuZWxzIDIuNiBhbmQgdXB3YXJkcy4KKy5icgorLlRQCisuQkkgIi0tcm9vdCAvIC1SIFtwYXRoXSIKK0EgcGF0aCB0byBhIGZpbGVzeXN0ZW0gdG8gc2VhcmNoIGZvciBhZGRpdGlvbmFsIGJpbmFyaWVzLgorLmJyCisuVFAKKy5CSSAiLS1pbmNsdWRlLWZpbGUgW2ZpbGVzXSIKK09ubHkgaW5jbHVkZSBmaWxlcyBpbiB0aGUgZ2l2ZW4gY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgZ2xvYiBwYXR0ZXJucy4KKy5icgorLlRQCisuQkkgIi0taW5jbHVkZS1zeW1ib2xzIC8gLWkgW3N5bWJvbHNdIgorT25seSBpbmNsdWRlIHN5bWJvbHMgaW4gdGhlIGdpdmVuIGNvbW1hLXNlcGFyYXRlZCBsaXN0LgorLmJyCisuVFAKKy5CSSAiLS1vYmpkdW1wLXBhcmFtcyBbcGFyYW1zXSIKK1Bhc3MgdGhlIGdpdmVuIHBhcmFtZXRlcnMgYXMgZXh0cmEgdmFsdWVzIHdoZW4gY2FsbGluZyBvYmpkdW1wLgorLmJyCisuVFAKKy5CSSAiLS1vdXRwdXQtZGlyIC8gLW8gW2Rpcl0iCitPdXRwdXQgZGlyZWN0b3J5LiBUaGlzIG1ha2VzIG9wYW5ub3RhdGUgb3V0cHV0IG9uZSBhbm5vdGF0ZWQgZmlsZSBmb3IgZWFjaAorc291cmNlIGZpbGUuIFRoaXMgb3B0aW9uIGNhbid0IGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCAtLWFzc2VtYmx5LgorLmJyCisuVFAKKy5CSSAiLS1zZWFyY2gtZGlycyAvIC1kIFtwYXRoc10iCitDb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBwYXRocyB0byBzZWFyY2ggZm9yIHNvdXJjZSBmaWxlcy4gWW91IG1heSBuZWVkIHRvIHVzZQordGhpcyBvcHRpb24gd2hlbiB0aGUgZGVidWcgaW5mb3JtYXRpb24gZm9yIGFuIGltYWdlIGNvbnRhaW5zIHJlbGF0aXZlIHBhdGhzLgorLmJyCisuVFAKKy5CSSAiLS1iYXNlLWRpcnMgLyAtYiBbcGF0aHNdIgorQ29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgcGF0aHMgdG8gc3RyaXAgZnJvbSBkZWJ1ZyBzb3VyY2UgZmlsZXMsIHByaW9yIHRvCitsb29raW5nIGZvciB0aGVtIGluIC0tc2VhcmNoLWRpcnMuCisuYnIKKy5UUAorLkJJICItLXNlc3Npb24tZGlyPSJkaXJfcGF0aAorVXNlIHNhbXBsZSBkYXRhYmFzZSBvdXQgb2YgZGlyZWN0b3J5IGRpcl9wYXRoIGluc3RlYWQgb2YgdGhlIGRlZmF1bHQgbG9jYXRpb24gKC92YXIvbGliL29wcm9maWxlKS4KKy5icgorLlRQCisuQkkgIi0tc291cmNlIC8gLXMiCitPdXRwdXQgYW5ub3RhdGVkIHNvdXJjZS4gVGhpcyByZXF1aXJlcyBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gdG8gYmUgYXZhaWxhYmxlCitmb3IgdGhlIGJpbmFyaWVzLgorLmJyCisuVFAKKy5CSSAiLS10aHJlc2hvbGQgLyAtdCBbcGVyY2VudGFnZV0iCitPbmx5IG91dHB1dCBkYXRhIGZvciBzeW1ib2xzIHRoYXQgaGF2ZSBtb3JlIHRoYW4gdGhlIGdpdmVuIHBlcmNlbnRhZ2UKK29mIHRvdGFsIHNhbXBsZXMuCisuYnIKKy5UUAorLkJJICItLXZlcmJvc2UgLyAtViBbb3B0aW9uc10iCitHaXZlIHZlcmJvc2UgZGVidWdnaW5nIG91dHB1dC4KKy5icgorLlRQCisuQkkgIi0tdmVyc2lvbiAvIC12IgorU2hvdyB2ZXJzaW9uLgorCisuU0ggRU5WSVJPTk1FTlQKK05vIHNwZWNpYWwgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZSByZWNvZ25pc2VkIGJ5IG9wYW5ub3RhdGUuCisKKy5TSCBGSUxFUworLlRQCisuSSAvdmFyL2xpYi9vcHJvZmlsZS9zYW1wbGVzLworVGhlIGxvY2F0aW9uIG9mIHRoZSBnZW5lcmF0ZWQgc2FtcGxlIGZpbGVzLgorCisuU0ggVkVSU0lPTgorLlRQCitUaGlzIG1hbiBwYWdlIGlzIGN1cnJlbnQgZm9yIEBQQUNLQUdFQC1AVkVSU0lPTkAuCisKKy5TSCBTRUUgQUxTTworLkJSIEBPUF9ET0NESVJALAorLkJSIG9wcm9maWxlKDEpCmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9kb2Mvb3BhcmNoaXZlLjEuaW4gYi9vcHJvZmlsZS0wLjkuNy9kb2Mvb3BhcmNoaXZlLjEuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmUzMzYzNAotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2RvYy9vcGFyY2hpdmUuMS5pbgpAQCAtMCwwICsxLDc2IEBACisuVEggT1BBUkNISVZFIDEgIkBEQVRFQCIgIm9wcm9maWxlIEBWRVJTSU9OQCIKKy5VQyA0CisuU0ggTkFNRQorb3BhcmNoaXZlIFwtIHByb2R1Y2UgYXJjaGl2ZSBvZiBvcHJvZmlsZSBkYXRhIGZvciBvZmZsaW5lIGFuYWx5c2lzCisuU0ggU1lOT1BTSVMKKy5icgorLkIgb3BhcmNoaXZlCitbCisuSSBvcHRpb25zCitdCitbcHJvZmlsZSBzcGVjaWZpY2F0aW9uXQorLkIgLW8KK1tkaXJlY3RvcnldCisuU0ggREVTQ1JJUFRJT04KKworLkIgb3BhcmNoaXZlCitnZW5lcmF0ZXMgYSBkaXJlY3RvcnkgcG9wdWxhdGVkIHdpdGggZXhlY3V0YWJsZSwgZGVidWcsIGFuZCBvcHJvZmlsZSBzYW1wbGUKK2ZpbGVzLiBUaGlzIGRpcmVjdG9yeSBjYW4gYmUgbW92ZSB0byBhbm90aGVyIG1hY2hpbmUgdmlhIHRhciBhbmQgYW5hbHl6ZWQKK3dpdGhvdXQgZnVydGhlciB1c2Ugb2YgdGhlIGRhdGEgY29sbGVjdGlvbiBtYWNoaW5lLiBTZWUgb3Byb2ZpbGUoMSkgZm9yIGhvdwordG8gd3JpdGUgcHJvZmlsZSBzcGVjaWZpY2F0aW9ucy4KKworLlNIIE9QVElPTlMKKy5UUAorLkJJICItLWhlbHAgLyAtPyAvIC0tdXNhZ2UiCitTaG93IGhlbHAgbWVzc2FnZS4KKy5icgorLlRQCisuQkkgIi0tdmVyc2lvbiAvIC12IgorU2hvdyB2ZXJzaW9uLgorLmJyCisuVFAKKy5CSSAiLS12ZXJib3NlIC8gLVYgW29wdGlvbnNdIgorR2l2ZSB2ZXJib3NlIGRlYnVnZ2luZyBvdXRwdXQuCisuYnIKKy5UUAorLkJJICItLXNlc3Npb24tZGlyPSJkaXJfcGF0aAorVXNlIHNhbXBsZSBkYXRhYmFzZSBvdXQgb2YgZGlyZWN0b3J5IGRpcl9wYXRoIGluc3RlYWQgb2YgdGhlIGRlZmF1bHQgbG9jYXRpb24gKC92YXIvbGliL29wcm9maWxlKS4KKy5icgorLlRQCisuQkkgIi0taW1hZ2UtcGF0aCAvIC1wIFtwYXRoc10iCitDb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBhZGRpdGlvbmFsIHBhdGhzIHRvIHNlYXJjaCBmb3IgYmluYXJpZXMuCitUaGlzIGlzIG5lZWRlZCB0byBmaW5kIG1vZHVsZXMgaW4ga2VybmVscyAyLjYgYW5kIHVwd2FyZHMuCisuYnIKKy5UUAorLkJJICItLXJvb3QgLyAtUiBbcGF0aF0iCitBIHBhdGggdG8gYSBmaWxlc3lzdGVtIHRvIHNlYXJjaCBmb3IgYWRkaXRpb25hbCBiaW5hcmllcy4KKy5icgorLlRQCisuQkkgIi0tb3V0cHV0LWRpcmVjdG9yeSAvIC1vIFtkaXJlY3RvcnldIgorT3V0cHV0IHRvIHRoZSBnaXZlbiBkaXJlY3RvcnkuIFRoZXJlIGlzIG5vIGRlZmF1bHQuIFRoaXMgbXVzdCBiZSBzcGVjaWZpZWQuCisuYnIKKy5UUAorLkJJICItLWV4Y2x1ZGUtZGVwZW5kZW50IC8gLXgiCitEbyBub3QgaW5jbHVkZSBhcHBsaWNhdGlvbi1zcGVjaWZpYyBpbWFnZXMgZm9yIGxpYnJhcmllcywga2VybmVsIG1vZHVsZXMKK2FuZCB0aGUga2VybmVsLiBUaGlzIG9wdGlvbiBvbmx5IG1ha2VzIHNlbnNlIGlmIHRoZSBwcm9maWxlIHNlc3Npb24KK3VzZWQgLS1zZXBhcmF0ZS4KKy5icgorLlRQCisuQkkgIi0tbGlzdC1maWxlcyAvIC1sIgorT25seSBsaXN0IHRoZSBmaWxlcyB0aGF0IHdvdWxkIGJlIGFyY2hpdmVkLCBkb24ndCBjb3B5IHRoZW0uCisKKy5TSCBFTlZJUk9OTUVOVAorTm8gc3BlY2lhbCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlIHJlY29nbmlzZWQgYnkgb3BhcmNoaXZlLgorCisuU0ggRklMRVMKKy5UUAorLkkgL3Zhci9saWIvb3Byb2ZpbGUvc2FtcGxlcy8KK1RoZSBsb2NhdGlvbiBvZiB0aGUgZ2VuZXJhdGVkIHNhbXBsZSBmaWxlcy4KKworLlNIIFZFUlNJT04KKy5UUAorVGhpcyBtYW4gcGFnZSBpcyBjdXJyZW50IGZvciBAUEFDS0FHRUAtQFZFUlNJT05ALgorCisuU0ggU0VFIEFMU08KKy5CUiBAT1BfRE9DRElSQCwKKy5CUiBvcHJvZmlsZSgxKQpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvZG9jL29wY29udHJvbC4xLmluIGIvb3Byb2ZpbGUtMC45LjcvZG9jL29wY29udHJvbC4xLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0MzQ3MDQKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9kb2Mvb3Bjb250cm9sLjEuaW4KQEAgLTAsMCArMSwxODYgQEAKKy5USCBPUENPTlRST0wgMSAiQERBVEVAIiAib3Byb2ZpbGUgQFZFUlNJT05AIgorLlVDIDQKKy5TSCBOQU1FCitvcGNvbnRyb2wgXC0gY29udHJvbCBPUHJvZmlsZSBwcm9maWxpbmcKKy5TSCBTWU5PUFNJUworLmJyCisuQiBvcGNvbnRyb2wKK1sKKy5JIG9wdGlvbnMKK10KKy5TSCBERVNDUklQVElPTgorLkIgb3Bjb250cm9sCitjYW4gYmUgdXNlZCB0byBzdGFydCBwcm9maWxpbmcsIGVuZCBhIHByb2ZpbGluZyBzZXNzaW9uLAorZHVtcCBwcm9maWxlIGRhdGEsIGFuZCBzZXQgdXAgdGhlIHByb2ZpbGluZyBwYXJhbWV0ZXJzLgorCisuU0ggT1BUSU9OUworLlRQCisuQkkgIi0taGVscCIKK1Nob3cgaGVscCBtZXNzYWdlLgorLmJyCisuVFAKKy5CSSAiLS12ZXJzaW9uIgorU2hvdyB2ZXJzaW9uLgorLmJyCisuVFAKKy5CSSAiLS1saXN0LWV2ZW50cyIKK1Nob3dzIHRoZSBtb25pdG9yYWJsZSBldmVudHMuCisuYnIKKy5UUAorLkJJICItLWluaXQiCitMb2FkIHRoZSBPUHJvZmlsZSBtb2R1bGUgaWYgcmVxdWlyZWQgYW5kIG1ha2UgdGhlIE9Qcm9maWxlIGRyaXZlcgoraW50ZXJmYWNlIGF2YWlsYWJsZS4KKy5icgorLlRQCisuQkkgIi0tc2V0dXAiCitGb2xsb3dlZCBieSBsaXN0IG9wdGlvbnMgZm9yIHByb2ZpbGluZyBzZXR1cC4gU3RvcmUgc2V0dXAgCitpbiB+cm9vdC8ub3Byb2ZpbGUvZGFlbW9ucmMuIE9wdGlvbmFsLgorLmJyCisuVFAKKy5CSSAiLS1zdGF0dXMiCitTaG93IGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24uCisuYnIKKy5UUAorLkJJICItLXN0YXJ0LWRhZW1vbiIKK1N0YXJ0IHRoZSBvcHJvZmlsZSBkYWVtb24gd2l0aG91dCBzdGFydGluZyBwcm9maWxpbmcuIE5vdCBhdmFpbGFibGUKK2luIDIuMi8yLjQga2VybmVscy4KKy5icgorLlRQCisuQkkgIi0tc3RhcnQiCitTdGFydCBkYXRhIGNvbGxlY3Rpb24gd2l0aCBlaXRoZXIgYXJndW1lbnRzIHByb3ZpZGVkIGJ5IC0tc2V0dXAKK29yIHdpdGggaW5mb3JtYXRpb24gc2F2ZWQgaW4gfnJvb3QvLm9wcm9maWxlL2RhZW1vbnJjLgorLmJyCisuVFAKKy5CSSAiLS1kdW1wIgorRm9yY2UgYSBmbHVzaCBvZiB0aGUgY29sbGVjdGVkIHByb2ZpbGluZyBkYXRhIHRvIHRoZSBkYWVtb24uCisuYnIKKy5UUAorLkJJICItLXN0b3AiCitTdG9wIGRhdGEgY29sbGVjdGlvbi4gTm90IGF2YWlsYWJsZSBpbiAyLjIvMi40IGtlcm5lbHMuCisuYnIKKy5UUAorLkJJICItLXNodXRkb3duIgorU3RvcCBkYXRhIGNvbGxlY3Rpb24gYW5kIGtpbGwgdGhlIGRhZW1vbi4KKy5icgorLlRQCisuQkkgIi0tcmVzZXQiCitDbGVhciBvdXQgZGF0YSBmcm9tIGN1cnJlbnQgc2Vzc2lvbiwgYnV0IGxlYXZlcyBzYXZlZCBzZXNzaW9ucy4KKy5icgorLlRQCisuQkkgIi0tc2F2ZT0ic2Vzc2lvbm5hbWUKK1NhdmUgZGF0YSBmcm9tIGN1cnJlbnQgc2Vzc2lvbiB0byBzZXNzaW9ubmFtZS4KKy5icgorLlRQCisuQkkgIi0tZGVpbml0IgorU2h1dCBkb3duIGRhZW1vbi4gVW5sb2FkIHRoZSBvcHJvZmlsZSBtb2R1bGUgYW5kIG9wcm9maWxlZnMuCisuYnIKKy5UUAorLkJJICItLXNlc3Npb24tZGlyPSJkaXJfcGF0aAorVXNlIHNhbXBsZSBkYXRhYmFzZSBvdXQgb2YgZGlyZWN0b3J5IGRpcl9wYXRoIGluc3RlYWQgb2YgdGhlIGRlZmF1bHQgbG9jYXRpb24gKC92YXIvbGliL29wcm9maWxlKS4KKy5icgorLlRQCisuQkkgIi0tYnVmZmVyLXNpemU9Im51bQorU2V0IGtlcm5lbCBidWZmZXIgdG8gbnVtIHNhbXBsZXMuIFdoZW4gdXNpbmcgYSAyLjYga2VybmVsLCBidWZmZXIgd2F0ZXJzaGVkIG5lZWRzCit0byBiZSB0d2Vha2VkIHdoZW4gY2hhbmdpbmcgdGhpcyB2YWx1ZS4KK1J1bGVzOiAgQSBub24temVybyB2YWx1ZSBnb2VzIGludG8gZWZmZWN0IGFmdGVyIGEgJy0tc2h1dGRvd24vc3RhcnQnIHNlcXVlbmNlLgorQSB2YWx1ZSBvZiB6ZXJvIHNldHMgdGhpcyBwYXJhbWV0ZXIgYmFjayB0byBkZWZhdWx0IHZhbHVlLCBidXQgZG9lcyBub3QgZ28gaW50bworZWZmZWN0IHVudGlsIGFmdGVyICctLWRlaW5pdC9pbml0JyBzZXF1ZW5jZS4KKy5icgorLlRQCisuQkkgIi0tYnVmZmVyLXdhdGVyc2hlZD0ibnVtCitTZXQga2VybmVsIGJ1ZmZlciB3YXRlcnNoZWQgdG8gbnVtIHNhbXBsZXMgKDIuNiBvbmx5KS4gV2hlbgorYnVmZmVyLXNpemUgLSBidWZmZXItd2F0ZXJzaGVkIGZyZWUgZW50cmllcyByZW1haW4gaW4gdGhlIGtlcm5lbCBidWZmZXIsIGRhdGEgd2lsbCBiZQorZmx1c2hlZCB0byB0aGUgZGFlbW9uLiAgTW9zdCB1c2VmdWwgdmFsdWVzIGFyZSBpbiB0aGUgcmFuZ2UgWzAuMjUgLSAwLjVdICogYnVmZmVyLXNpemUuCitTYW1lIHJ1bGVzIGFzIGRlZmluZWQgZm9yIGJ1ZmZlci1zaXplLgorLmJyCisuVFAKKy5CSSAiLS1jcHUtYnVmZmVyLXNpemU9Im51bQorU2V0IGtlcm5lbCBwZXIgY3B1IGJ1ZmZlciB0byBudW0gc2FtcGxlcyAoMi42IG9ubHkpLiBJZiB5b3UgcHJvZmlsZSBhdCBoaWdoCityYXRlIGl0IGNhbiBoZWxwIHRvIGluY3JlYXNlIHRoaXMgaWYgdGhlIGxvZyBmaWxlIHNob3cgZXhjZXNzaXZlIGNvdW50IG9mCitzYW1wbGUgbG9zdCBjcHUgYnVmZmVyIG92ZXJmbG93LiBTYW1lIHJ1bGVzIGFzIGRlZmluZWQgZm9yIGJ1ZmZlci1zaXplLgorLmJyCisuVFAKKy5CSSAiLS1ldmVudD0iW2V2ZW50fCJkZWZhdWx0Il0KK1NwZWNpZnkgYW4gZXZlbnQgdG8gbWVhc3VyZSBmb3IgdGhlIGhhcmR3YXJlIHBlcmZvcm1hbmNlIGNvdW50ZXJzLAorb3IgImRlZmF1bHQiIGZvciB0aGUgZGVmYXVsdCBldmVudC4gVGhlIGV2ZW50IGlzIG9mIHRoZSBmb3JtCisiQ1BVX0NMS19VTkhBTFRFRDozMDAwMDowOjE6MSIgd2hlcmUgdGhlIG51bWVyaWMgdmFsdWVzIGFyZQorY291bnQsIHVuaXQgbWFzaywga2VybmVsLXNwYWNlIGNvdW50aW5nLCB1c2VyLXNwYWNlIGNvdW50aW5nLAorcmVzcGVjdGl2ZWx5LiAgTm90ZSB0aGF0IHRoaXMgb3Zlci1yaWRlcyBhbGwgcHJldmlvdXMgZXZlbnRzIHNlbGVjdGVkOworaWYgeW91IHdhbnQgdHdvIG9yIG1vcmUgY291bnRlcnMgdXNlZCBzaW11bHRhbmVvdXNseSwgeW91IG11c3Qgc3BlY2lmeQordGhlbSBvbiB0aGUgc2FtZSBvcGNvbnRyb2wgaW52b2NhdGlvbi4gVGhlIG51bWVyaWNhbCB1bml0IG1hc2sKK2NhbiBhbHNvIGJlIGEgc3RyaW5nIHdoaWNoIG1hdGNoZXMgdGhlIGZpcnN0IHdvcmQgaW4gdGhlIHVuaXQgbWFzaworZGVzY3JpcHRpb24sIGJ1dCBvbmx5IGZvciBldmVudHMgd2l0aCAiZXh0cmE6IiBwYXJhbWV0ZXJzIHNob3duLgorVW5pdCBtYXNrcyB3aXRoICJleHRyYToiIHBhcmFtZXRlcnMKKy5JIG11c3QKK2JlIHNwZWNpZmllZCBieSBmaXJzdCB3b3JkLgorLmJyCisuVFAKKy5CSSAiLS1zZXBhcmF0ZT0iW25vbmUsbGliLGtlcm5lbCx0aHJlYWQsY3B1LGFsbF0KK1NlcGFyYXRlIHNhbXBsZXMgYmFzZWQgb24gdGhlIGdpdmVuIHNlcGFyYXRvci4gJ2xpYicgc2VwYXJhdGVzCitkeW5hbWljYWxseSBsaW5rZWQgbGlicmFyeSBzYW1wbGVzIHBlciBhcHBsaWNhdGlvbi4gJ2tlcm5lbCcgc2VwYXJhdGVzCitrZXJuZWwgYW5kIGtlcm5lbCBtb2R1bGUgc2FtcGxlcyBwZXIgYXBwbGljYXRpb247ICdrZXJuZWwnCitpbXBsaWVzICdsaWJyYXJ5Jy4gJ3RocmVhZCcgZ2l2ZXMgc2VwYXJhdGlvbiBmb3IgZWFjaCB0aHJlYWQgYW5kCit0YXNrLiAgJ2NwdScgc2VwYXJhdGVzIGZvciBlYWNoIENQVS4gJ2FsbCcgaW1wbGllcyBhbGwgb2YgdGhlIGFib3ZlCitvcHRpb25zIGFuZCAnbm9uZScgdHVybnMgb2ZmIHNlcGFyYXRpb24uCisuYnIKKy5UUAorLkJJICItLWNhbGxncmFwaD0jZGVwdGgiCitFbmFibGUgY2FsbGdyYXBoIHNhbXBsZSBjb2xsZWN0aW9uIHdpdGggYSBtYXhpbXVtIGRlcHRoLiBVc2UgMCB0byBkaXNhYmxlCitjYWxsZ3JhcGggcHJvZmlsaW5nLiBUaGlzIG9wdGlvbiBpcyBhdmFpbGFibGUgb24geDg2IHVzaW5nIGEKKzIuNisga2VybmVsIHdpdGggY2FsbGdyYXBoIHN1cHBvcnQgZW5hYmxlZC4gIEl0IGlzIGFsc28gYXZhaWxhYmxlIG9uIFBvd2VyUEMgdXNpbmcgYSAyLjYuMTcrIGtlcm5lbC4KKy5icgorLlRQCisuQkkgIi0taW1hZ2U9IltuYW1lLG5hbWUuLi58ImFsbCJdCitPbmx5IHByb2ZpbGUgdGhlIGdpdmVuIGFic29sdXRlIHBhdGhzIHRvIGJpbmFyaWVzLCBvciAiYWxsIiB0byBwcm9maWxlCitldmVyeXRoaW5nICh0aGUgZGVmYXVsdCkuCisuYnIKKy5UUAorLkJJICItLXZtbGludXg9ImZpbGUKK3ZtbGludXgga2VybmVsIGltYWdlLgorLmJyCisuVFAKKy5CSSAiLS1uby12bWxpbnV4IgorVXNlIHRoaXMgd2hlbiB5b3UgZG9uJ3QgaGF2ZSBhIGtlcm5lbCB2bWxpbnV4IGZpbGUsIGFuZCB5b3UgZG9uJ3Qgd2FudCB0bworcHJvZmlsZSB0aGUga2VybmVsLgorLmJyCisuVFAKKy5CSSAiLS12ZXJib3NlIgorQmUgdmVyYm9zZSBpbiB0aGUgZGFlbW9uIGxvZy4gVGhpcyBoYXMgYSBoaWdoIG92ZXJoZWFkLgorLmJyCisuVFAKKy5CSSAiLS1rZXJuZWwtcmFuZ2U9InN0YXJ0LGVuZAorU2V0IGtlcm5lbCByYW5nZSB2bWEgYWRkcmVzcyBpbiBoZXhhZGVjaW1hbC4KKworLlNIIE9QVElPTlMgKHNwZWNpZmljIHRvIFhlbikKKy5UUAorLkJJICItLXhlbj0iZmlsZQorWGVuIGltYWdlCisuYnIKKy5UUAorLkJJICItLWFjdGl2ZS1kb21haW5zPSI8bGlzdD4KK0xpc3Qgb2YgZG9tYWluIGlkcyBwYXJ0aWNpcGF0aW5nIGluIGEgbXVsdGktZG9tYWluIHByb2ZpbGluZyBzZXNzaW9uLiBJZiAKK21vcmUgdGhhbiBvbmUgZG9tYWluIGlzIHNwZWNpZmllZCBpbiA8bGlzdD4gdGhleSBzaG91bGQgYmUgc2VwYXJhdGVkIHVzaW5nIAorY29tbWFzLiBUaGlzIG9wdGlvbiBjYW4gb25seSBiZSB1c2VkIGluIGRvbWFpbiAwIHdoaWNoIGlzIHRoZSBvbmx5IGRvbWFpbiAKK3RoYXQgY2FuIGNvb3JkaW5hdGUgYSBtdWx0aS1kb21haW4gcHJvZmlsaW5nIHNlc3Npb24uIEluY2x1ZGluZyBkb21haW4gMCBpbiAKK3RoZSBsaXN0IG9mIGFjdGl2ZSBkb21haW5zIGlzIG9wdGlvbmFsLiAoZS5nLiAtLWFjdGl2ZS1kb21haW5zPTIsNSw2IGFuZCAKKy0tYWN0aXZlLWRvbWFpbnM9MCwyLDUsNiBhcmUgZXF1aXZhbGVudCkKKy5icgorCisuU0ggRU5WSVJPTk1FTlQKK05vIHNwZWNpYWwgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZSByZWNvZ25pc2VkIGJ5IG9wY29udHJvbC4KKworLlNIIEZJTEVTCisuVFAKKy5JIC9yb290Ly5vcHJvZmlsZS9kYWVtb25yYworQ29uZmlndXJhdGlvbiBmaWxlIGZvciBvcGNvbnRyb2wKKy5UUAorLkkgL3Zhci9saWIvb3Byb2ZpbGUvc2FtcGxlcy8KK1RoZSBsb2NhdGlvbiBvZiB0aGUgZ2VuZXJhdGVkIHNhbXBsZSBmaWxlcy4KKworLlNIIFZFUlNJT04KKy5UUAorVGhpcyBtYW4gcGFnZSBpcyBjdXJyZW50IGZvciBAUEFDS0FHRUAtQFZFUlNJT05ALgorCisuU0ggU0VFIEFMU08KKy5CUiBAT1BfRE9DRElSQCwKKy5CUiBvcHJvZmlsZSgxKQpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvZG9jL29wZ3Byb2YuMS5pbiBiL29wcm9maWxlLTAuOS43L2RvYy9vcGdwcm9mLjEuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2U2MWJhOQotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2RvYy9vcGdwcm9mLjEuaW4KQEAgLTAsMCArMSw2NyBAQAorLlRIIE9QR1BST0YgMSAiQERBVEVAIiAib3Byb2ZpbGUgQFZFUlNJT05AIgorLlVDIDQKKy5TSCBOQU1FCitvcGdwcm9mIFwtIHByb2R1Y2UgZ3Byb2YtZm9ybWF0IHByb2ZpbGUgZGF0YQorLlNIIFNZTk9QU0lTCisuYnIKKy5CIG9wZ3Byb2YKK1sKKy5JIG9wdGlvbnMKK10KK1twcm9maWxlIHNwZWNpZmljYXRpb25dCisuU0ggREVTQ1JJUFRJT04KKworLkIgb3BncHJvZgorb3V0cHV0cyBncHJvZi1mb3JtYXQgcHJvZmlsZSBkYXRhIGZvciBhIGdpdmVuIGJpbmFyeSBpbWFnZSwKK2Zyb20gYW4gT1Byb2ZpbGUgc2Vzc2lvbi4gU2VlIG9wcm9maWxlKDEpIGZvciBob3cgdG8gd3JpdGUgcHJvZmlsZSBzcGVjaWZpY2F0aW9ucy4KKworLlNIIE9QVElPTlMKKy5UUAorLkJJICItLWhlbHAgLyAtPyAvIC0tdXNhZ2UiCitTaG93IGhlbHAgbWVzc2FnZS4KKy5icgorLlRQCisuQkkgIi0tdmVyc2lvbiAvIC12IgorU2hvdyB2ZXJzaW9uLgorLmJyCisuVFAKKy5CSSAiLS12ZXJib3NlIC8gLVYgW29wdGlvbnNdIgorR2l2ZSB2ZXJib3NlIGRlYnVnZ2luZyBvdXRwdXQuCisuYnIKKy5UUAorLkJJICItLXNlc3Npb24tZGlyPSJkaXJfcGF0aAorVXNlIHNhbXBsZSBkYXRhYmFzZSBvdXQgb2YgZGlyZWN0b3J5IGRpcl9wYXRoIGluc3RlYWQgb2YgdGhlIGRlZmF1bHQgbG9jYXRpb24gKC92YXIvbGliL29wcm9maWxlKS4KKy5icgorLlRQCisuQkkgIi0taW1hZ2UtcGF0aCAvIC1wIFtwYXRoc10iCitDb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBhZGRpdGlvbmFsIHBhdGhzIHRvIHNlYXJjaCBmb3IgYmluYXJpZXMuCitUaGlzIGlzIG5lZWRlZCB0byBmaW5kIG1vZHVsZXMgaW4ga2VybmVscyAyLjYgYW5kIHVwd2FyZHMuCisuYnIKKy5UUAorLkJJICItLXJvb3QgLyAtUiBbcGF0aF0iCitBIHBhdGggdG8gYSBmaWxlc3lzdGVtIHRvIHNlYXJjaCBmb3IgYWRkaXRpb25hbCBiaW5hcmllcy4KKy5icgorLlRQCisuQkkgIi0tdGhyZXNob2xkIC8gLXQgW3BlcmNlbnRhZ2VdIgorT25seSBvdXRwdXQgZGF0YSBmb3Igc3ltYm9scyB0aGF0IGhhdmUgbW9yZSB0aGFuIHRoZSBnaXZlbiBwZXJjZW50YWdlCitvZiB0b3RhbCBzYW1wbGVzLgorLmJyCisuVFAKKy5CSSAiLS1vdXRwdXQtZmlsZW5hbWUgLyAtbyBbZmlsZV0iCitPdXRwdXQgdG8gdGhlIGdpdmVuIGZpbGUgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCwgZ21vbi5vdXQKKworLlNIIEVOVklST05NRU5UCitObyBzcGVjaWFsIGVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUgcmVjb2duaXNlZCBieSBvcGdwcm9mLgorCisuU0ggRklMRVMKKy5UUAorLkkgL3Zhci9saWIvb3Byb2ZpbGUvc2FtcGxlcy8KK1RoZSBsb2NhdGlvbiBvZiB0aGUgZ2VuZXJhdGVkIHNhbXBsZSBmaWxlcy4KKworLlNIIFZFUlNJT04KKy5UUAorVGhpcyBtYW4gcGFnZSBpcyBjdXJyZW50IGZvciBAUEFDS0FHRUAtQFZFUlNJT05ALgorCisuU0ggU0VFIEFMU08KKy5CUiBAT1BfRE9DRElSQCwKKy5CUiBvcHJvZmlsZSgxKQpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvZG9jL29waGVscC4xLmluIGIvb3Byb2ZpbGUtMC45LjcvZG9jL29waGVscC4xLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1NDhkNzQKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9kb2Mvb3BoZWxwLjEuaW4KQEAgLTAsMCArMSw1OCBAQAorLlRIIE9QSEVMUCAxICJAREFURUAiICJvcHJvZmlsZSBAVkVSU0lPTkAiCisuVUMgNAorLlNIIE5BTUUKK29waGVscCBcLSBsaXN0IE9Qcm9maWxlIGV2ZW50cworLlNIIFNZTk9QU0lTCisuYnIKKy5CIG9waGVscAorWworLkkgb3B0aW9ucworXQorW2V2ZW50IG5hbWVdCisuU0ggREVTQ1JJUFRJT04KKworQnkgZGVmYXVsdCwKKy5CIG9waGVscAorbGlzdHMgdGhlIGF2YWlsYWJsZSBwZXJmb3JtYW5jZSBjb3VudGVyIG9wdGlvbnMuIElmIHlvdQorZ2l2ZSBpdCBhIHN5bWJvbGljIGV2ZW50IG5hbWUsIGl0IHdpbGwgcmV0dXJuIHRoZSBoYXJkd2FyZQordmFsdWUgKGUuZy4gIm9waGVscCBEQVRBX01FTV9SRUZTIikuCisKKy5TSCBPUFRJT05TCisuVFAKKy5CSSAiLS1jcHUtdHlwZSAvIC1jIgorU2hvdyB0aGUgZXZlbnRzIGZvciB0aGUgZ2l2ZW4gbnVtZXJpY2FsIENQVSB0eXBlLgorLmJyCisuVFAKKy5CSSAiLS1nZXQtY3B1LXR5cGUgLyAtciIKK1Nob3cgdGhlIHN5bWJvbGljIENQVSBuYW1lLgorLmJyCisuVFAKKy5CSSAiLS14bWwgLyAtWCIKK0xpc3QgZXZlbnRzIGluIFhNTCBmb3JtYXQuCisuYnIKKy5UUAorLkJJICItLWhlbHAgLyAtPyAvIC0tdXNhZ2UiCitTaG93IGhlbHAgbWVzc2FnZS4KKy5icgorLlRQCisuQkkgIi0tdmVyc2lvbiAvIC12IgorU2hvdyB2ZXJzaW9uLgorCisuU0ggRU5WSVJPTk1FTlQKK05vIHNwZWNpYWwgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZSByZWNvZ25pc2VkIGJ5IG9waGVscC4KKworLlNIIEZJTEVTCisuVFAKKy5JICRwcmVmaXgvc2hhcmUvb3Byb2ZpbGUvCitFdmVudCBkZXNjcmlwdGlvbiBmaWxlcyB1c2VkIGJ5IE9Qcm9maWxlLgorLlRQCisuSSAvdmFyL2xpYi9vcHJvZmlsZS9zYW1wbGVzLworVGhlIGxvY2F0aW9uIG9mIHRoZSBnZW5lcmF0ZWQgc2FtcGxlIGZpbGVzLgorCisuU0ggVkVSU0lPTgorLlRQCitUaGlzIG1hbiBwYWdlIGlzIGN1cnJlbnQgZm9yIEBQQUNLQUdFQC1AVkVSU0lPTkAuCisKKy5TSCBTRUUgQUxTTworLkJSIEBPUF9ET0NESVJALAorLkJSIG9wcm9maWxlKDEpCmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9kb2Mvb3BpbXBvcnQuMS5pbiBiL29wcm9maWxlLTAuOS43L2RvYy9vcGltcG9ydC4xLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmOGVmNWMKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9kb2Mvb3BpbXBvcnQuMS5pbgpAQCAtMCwwICsxLDU5IEBACisuVEggT1BJTVBPUlQgMSAiQERBVEVAIiAib3Byb2ZpbGUgQFZFUlNJT05AIgorLlVDIDQKKy5TSCBOQU1FCitvcGltcG9ydCBcLSBjb252ZXJ0cyBzYW1wbGUgZGF0YWJhc2UgZmlsZXMKKy5TSCBTWU5PUFNJUworLmJyCisuQiBvcGltcG9ydAorWworLkkgb3B0aW9ucworXQoraW5wdXRfZmlsZQorLlNIIERFU0NSSVBUSU9OCisKKy5CIG9waW1wb3J0Citjb252ZXJ0cyBzYW1wbGUgZGF0YWJhc2UgZmlsZXMgZnJvbSBhIGZvcmVpZ24gYmluYXJ5IGZvcm1hdCAoYWJpKSB0byB0aGUgbmF0aXZlIGZvcm1hdC4KKworLlNIIE9QVElPTlMKKy5UUAorLkJJICItLWFiaSAvIC1hIgorSW5wdXQgYWJpIGZpbGUgZGVzY3JpcHRpb24gbG9jYXRpb24uCisuYnIKKy5UUAorLkJJICItLWZvcmNlIC8gLWYiCitGb3JjZSBjb252ZXJzaW9uIGV2ZW4gaWYgdGhlIGlucHV0IGFuZCBvdXRwdXQgYWJpIGFyZSBpZGVudGljYWwuCisuYnIKKy5UUAorLkJJICItLW91dHB1dCAvIC1vIGZpbGVuYW1lIgorU3BlY2lmeSB0aGUgb3V0cHV0IGZpbGVuYW1lLiBJZiB0aGUgb3V0cHV0IGZpbGUgYWxyZWFkeSBleGlzdHMgaXQgaXMgbm90IG92ZXJ3cml0dGVuIGJ1dCBkYXRhIGFyZSBhY2N1bXVsYXRlZCBpbi4gU2FtcGxlIGZpbGVuYW1lIGFyZSBpbmZvcm1hdGl2ZQorZm9yIHBvc3QgcHJvZmlsZSB0b29scyBhbmQgbXVzdCBiZSBrZXB0IGlkZW50aWNhbCwgaW4gb3RoZXIgd29yZCB0aGUgcGF0aG5hbWUKK2Zyb20gdGhlIGZpcnN0IHBhdGggY29tcG9uZW50IGNvbnRhaW5pbmcgYSAneycgbXVzdCBiZSBrZXB0IGFzIGl0IGluIHRoZQorb3V0cHV0IGZpbGVuYW1lLgorLmJyCisuVFAKKy5CSSAiLS1oZWxwIC8gLT8gLyAtLXVzYWdlIgorU2hvdyBoZWxwIG1lc3NhZ2UuCisuYnIKKy5UUAorLkJJICItLXZlcmJvc2UgLyAtViIKK0dpdmUgdmVyYm9zZSBkZWJ1Z2dpbmcgb3V0cHV0LgorLmJyCisuVFAKKy5CSSAiLS12ZXJzaW9uIC8gLXYiCitTaG93IHZlcnNpb24uCisKKy5TSCBFTlZJUk9OTUVOVAorTm8gc3BlY2lhbCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlIHJlY29nbmlzZWQgYnkgb3BpbXBvcnQKKworLlNIIEZJTEVTCisuVFAKKy5JIC92YXIvbGliL29wcm9maWxlL2FiaQorVGhlIGFiaSBmaWxlIGRlc2NyaXB0aW9uIG9mIHRoZSBzYW1wbGUgZGF0YWJhc2UgZmlsZXMKKworLlNIIFZFUlNJT04KKy5UUAorVGhpcyBtYW4gcGFnZSBpcyBjdXJyZW50IGZvciBAUEFDS0FHRUAtQFZFUlNJT05ALgorCisuU0ggU0VFIEFMU08KKy5CUiBAT1BfRE9DRElSQCwKKy5CUiBvcHJvZmlsZSgxKQpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvZG9jL29wcmVwb3J0LjEuaW4gYi9vcHJvZmlsZS0wLjkuNy9kb2Mvb3ByZXBvcnQuMS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNGZjY2E5Ci0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvZG9jL29wcmVwb3J0LjEuaW4KQEAgLTAsMCArMSwxNDAgQEAKKy5USCBPUFJFUE9SVCAxICJAREFURUAiICJvcHJvZmlsZSBAVkVSU0lPTkAiCisuVUMgNAorLlNIIE5BTUUKK29wcmVwb3J0IFwtIHByb2R1Y2Ugc3ltYm9sIG9yIGJpbmFyeSBpbWFnZSBzdW1tYXJpZXMKKy5TSCBTWU5PUFNJUworLmJyCisuQiBvcHJlcG9ydAorWworLkkgb3B0aW9ucworXQorW3Byb2ZpbGUgc3BlY2lmaWNhdGlvbl0KKy5TSCBERVNDUklQVElPTgorCisuQiBvcHJlcG9ydAorb3V0cHV0cyBiaW5hcnkgaW1hZ2Ugc3VtbWFyaWVzLCBvciBwZXItc3ltYm9sIGRhdGEsIGZyb20gT1Byb2ZpbGUgcHJvZmlsaW5nCitzZXNzaW9ucy4gU2VlIG9wcm9maWxlKDEpIGZvciBob3cgdG8gd3JpdGUgcHJvZmlsZSBzcGVjaWZpY2F0aW9ucy4KKworLlNIIE9QVElPTlMKKy5UUAorLkJJICItLWFjY3VtdWxhdGVkIC8gLWEiCitBY2N1bXVsYXRlIHNhbXBsZSBhbmQgcGVyY2VudGFnZSBjb3VudHMgaW4gdGhlIHN5bWJvbCBsaXN0LgorLmJyCisuVFAKKy5CSSAiLS1kZWJ1Zy1pbmZvIC8gLWciCitTaG93IHNvdXJjZSBmaWxlIGFuZCBsaW5lIGZvciBlYWNoIHN5bWJvbC4KKy5icgorLlRQCisuQkkgIi0tZGVtYW5nbGUgLyAtRCBub25lfHNtYXJ0fG5vcm1hbCIKK25vbmU6IG5vIGRlbWFuZ2xpbmcuIG5vcm1hbDogdXNlIGRlZmF1bHQgZGVtYW5nbGVyIChkZWZhdWx0KSBzbWFydDogdXNlCitwYXR0ZXJuLW1hdGNoaW5nIHRvIG1ha2UgQysrIHN5bWJvbCBkZW1hbmdsaW5nIG1vcmUgcmVhZGFibGUuCisuYnIKKy5UUAorLkJJICItLWNhbGxncmFwaCAvIC1jIgorU2hvdyBjYWxsIGdyYXBoIGluZm9ybWF0aW9uIGlmIGF2YWlsYWJsZS4KKy5icgorLlRQCisuQkkgIi0tZGV0YWlscyAvIC1kIgorU2hvdyBwZXItaW5zdHJ1Y3Rpb24gZGV0YWlscyBmb3IgYWxsIHNlbGVjdGVkIHN5bWJvbHMuCisuYnIKKy5UUAorLkJJICItLWV4Y2x1ZGUtZGVwZW5kZW50IC8gLXgiCitEbyBub3QgaW5jbHVkZSBhcHBsaWNhdGlvbi1zcGVjaWZpYyBpbWFnZXMgZm9yIGxpYnJhcmllcywga2VybmVsIG1vZHVsZXMKK2FuZCB0aGUga2VybmVsLiBUaGlzIG9wdGlvbiBvbmx5IG1ha2VzIHNlbnNlIGlmIHRoZSBwcm9maWxlIHNlc3Npb24KK3VzZWQgLS1zZXBhcmF0ZS4KKy5icgorLlRQCisuQkkgIi0tZXhjbHVkZS1zeW1ib2xzIC8gLWUgW3N5bWJvbHNdIgorRXhjbHVkZSBhbGwgdGhlIHN5bWJvbHMgaW4gdGhlIGdpdmVuIGNvbW1hLXNlcGFyYXRlZCBsaXN0LgorLmJyCisuVFAKKy5CSSAiLS1nbG9iYWwtcGVyY2VudCAvIC0lIgorTWFrZSBhbGwgcGVyY2VudGFnZXMgcmVsYXRpdmUgdG8gdGhlIHdob2xlIHByb2ZpbGUuCisuYnIKKy5UUAorLkJJICItLWhlbHAgLyAtPyAvIC0tdXNhZ2UiCitTaG93IGhlbHAgbWVzc2FnZS4KKy5icgorLlRQCisuQkkgIi0taW1hZ2UtcGF0aCAvIC1wIFtwYXRoc10iCitDb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBhZGRpdGlvbmFsIHBhdGhzIHRvIHNlYXJjaCBmb3IgYmluYXJpZXMuCitUaGlzIGlzIG5lZWRlZCB0byBmaW5kIG1vZHVsZXMgaW4ga2VybmVscyAyLjYgYW5kIHVwd2FyZHMuCisuYnIKKy5UUAorLkJJICItLXJvb3QgLyAtUiBbcGF0aF0iCitBIHBhdGggdG8gYSBmaWxlc3lzdGVtIHRvIHNlYXJjaCBmb3IgYWRkaXRpb25hbCBiaW5hcmllcy4KKy5icgorLlRQCisuQkkgIi0taW5jbHVkZS1zeW1ib2xzIC8gLWkgW3N5bWJvbHNdIgorT25seSBpbmNsdWRlIHN5bWJvbHMgaW4gdGhlIGdpdmVuIGNvbW1hLXNlcGFyYXRlZCBsaXN0LgorLmJyCisuVFAKKy5CSSAiLS1sb25nLWZpbGVuYW1lcyAvIC1mIgorT3V0cHV0IGZ1bGwgcGF0aHMgaW5zdGVhZCBvZiBiYXNlbmFtZXMuCisuYnIKKy5UUAorLkJJICItLW1lcmdlIC8gLW0gW2xpYixjcHUsdGlkLHRnaWQsdW5pdG1hc2ssYWxsXSIKK01lcmdlIGFueSBwcm9maWxlcyBzZXBhcmF0ZWQgaW4gYSAtLXNlcGFyYXRlIHNlc3Npb24uCisuYnIKKy5UUAorLkJJICItLW5vLWhlYWRlciIKK0Rvbid0IG91dHB1dCBhIGhlYWRlciBkZXRhaWxpbmcgcHJvZmlsaW5nIHBhcmFtZXRlcnMuCisuYnIKKy5UUAorLkJJICItLW91dHB1dC1maWxlIC8gLW8gW2ZpbGVdIgorT3V0cHV0IHRvIHRoZSBnaXZlbiBmaWxlIGluc3RlYWQgb2Ygc3Rkb3V0LgorLmJyCisuVFAKKy5CSSAiLS1yZXZlcnNlLXNvcnQgLyAtciIKK1JldmVyc2UgdGhlIHNvcnQgZnJvbSB0aGUgZGVmYXVsdC4KKy5icgorLlRQCisuQkkgIi0tc2Vzc2lvbi1kaXI9ImRpcl9wYXRoCitVc2Ugc2FtcGxlIGRhdGFiYXNlIG91dCBvZiBkaXJlY3RvcnkgZGlyX3BhdGggaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCBsb2NhdGlvbiAoL3Zhci9saWIvb3Byb2ZpbGUpLgorLmJyCisuVFAKKy5CSSAiLS1zaG93LWFkZHJlc3MgLyAtdyIKK1Nob3cgZWFjaCBzeW1ib2wncyBWTUEgYWRkcmVzcy4KKy5icgorLlRQCisuQkkgIi0tc29ydCAvIC1zIFt2bWEsc2FtcGxlLHN5bWJvbCxkZWJ1ZyxpbWFnZV0iCitTb3J0IHRoZSBsaXN0IG9mIHN5bWJvbHMgYnksIHJlc3BlY3RpdmVseSwgc3ltYm9sIGFkZHJlc3MsCitudW1iZXIgb2Ygc2FtcGxlcywgc3ltYm9sIG5hbWUsIGRlYnVnIGZpbGVuYW1lIGFuZCBsaW5lIG51bWJlciwKK2JpbmFyeSBpbWFnZSBmaWxlbmFtZS4KKy5icgorLlRQCisuQkkgIi0tc3ltYm9scyAvIC1sIgorTGlzdCBwZXItc3ltYm9sIGluZm9ybWF0aW9uIGluc3RlYWQgb2YgYSBiaW5hcnkgaW1hZ2Ugc3VtbWFyeS4KKy5icgorLlRQCisuQkkgIi0tdGhyZXNob2xkIC8gLXQgW3BlcmNlbnRhZ2VdIgorT25seSBvdXRwdXQgZGF0YSBmb3Igc3ltYm9scyB0aGF0IGhhdmUgbW9yZSB0aGFuIHRoZSBnaXZlbiBwZXJjZW50YWdlCitvZiB0b3RhbCBzYW1wbGVzLgorLmJyCisuVFAKKy5CSSAiLS12ZXJib3NlIC8gLVYgW29wdGlvbnNdIgorR2l2ZSB2ZXJib3NlIGRlYnVnZ2luZyBvdXRwdXQuCisuYnIKKy5UUAorLkJJICItLXZlcnNpb24gLyAtdiIKK1Nob3cgdmVyc2lvbi4KKy5icgorLlRQCisuQkkgIi0teG1sIC8gLVgiCitHZW5lcmF0ZSBYTUwgb3V0cHV0LgorCisuU0ggRU5WSVJPTk1FTlQKK05vIHNwZWNpYWwgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZSByZWNvZ25pc2VkIGJ5IG9wcmVwb3J0LgorCisuU0ggRklMRVMKKy5UUAorLkkgL3Zhci9saWIvb3Byb2ZpbGUvc2FtcGxlcy8KK1RoZSBsb2NhdGlvbiBvZiB0aGUgZ2VuZXJhdGVkIHNhbXBsZSBmaWxlcy4KKworLlNIIFZFUlNJT04KKy5UUAorVGhpcyBtYW4gcGFnZSBpcyBjdXJyZW50IGZvciBAUEFDS0FHRUAtQFZFUlNJT05ALgorCisuU0ggU0VFIEFMU08KKy5CUiBAT1BfRE9DRElSQCwKKy5CUiBvcHJvZmlsZSgxKQpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvZG9jL29wcmVwb3J0LnhzZCBiL29wcm9maWxlLTAuOS43L2RvYy9vcHJlcG9ydC54c2QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjgyYTBiZgotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2RvYy9vcHJlcG9ydC54c2QKQEAgLTAsMCArMSwyNzkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8eHM6c2NoZW1hCisgeG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KKyAgPHhzOmVsZW1lbnQgbmFtZT0icHJvZmlsZSI+CisgICAgPHhzOmNvbXBsZXhUeXBlPgorICAgICAgPHhzOnNlcXVlbmNlPgorCQk8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjEiIG1heE9jY3Vycz0iMSIgcmVmPSJvcHRpb25zIi8+CisJCTx4czplbGVtZW50IG1pbk9jY3Vycz0iMSIgbWF4T2NjdXJzPSIxIiByZWY9InNldHVwIi8+CisJCTx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSIxIiByZWY9ImNsYXNzZXMiLz4KKwkJPHhzOmNob2ljZT4KKwkJICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJwcm9jZXNzIi8+CisJCSAgPCEtLSBhIGJpbmFyeSBjYW4gYmUgZWl0aGVyIGFuIGFwcGxpY2F0aW9uIG9yIGEgbGlicmFyeSAtLT4KKwkJICA8eHM6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJiaW5hcnkiLz4KKwkJPC94czpjaG9pY2U+CisJCTx4czplbGVtZW50IG1pbk9jY3Vycz0iMSIgbWF4T2NjdXJzPSIxIiByZWY9InN5bWJvbHRhYmxlIi8+CisJCTwhLS0gcHV0IGRldGFpbHMgbGFzdCB0byBhbGxvdyBwYXJzZXIgdG8gZ2F0aGVyIHN1bW1hcnkgaW5mb3JtYXRpb24gLS0+CisJCTx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZGV0YWlsdGFibGUiLz4KKwkJPCEtLSBieXRlc3RhYmxlIG9ubHkgcHJlc2VudCB3aGVuIGRldGFpbHMgb3B0aW9uIHVzZWQgLS0+CisJCTx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSIxIiByZWY9ImJ5dGVzdGFibGUiLz4KKyAgICAgIDwveHM6c2VxdWVuY2U+CisgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InRpdGxlIiB0eXBlPSJ4czpzdHJpbmciIHVzZT0icmVxdWlyZWQiLz4KKyAgICAgIDwhLS0gaW50ZWdlciBwYXJ0IG9mIHNjaGVtYXZlcnNpb24gc2hvdWxkIGNoYW5nZXMgZm9yIG1ham9yIHNjaGVtYSAtLT4KKyAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ic2NoZW1hdmVyc2lvbiIgdXNlPSJyZXF1aXJlZCI+CisgICAgICAgIDx4czpzaW1wbGVUeXBlPgorICAgICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlID0gInhzOnN0cmluZyI+CisgICAgICAgICAgICA8eHM6cGF0dGVybiB2YWx1ZSA9ICIzXC5bMC05XSsiLz4KKyAgICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgorICAgICAgICA8L3hzOnNpbXBsZVR5cGU+ICAgICAgIDwveHM6YXR0cmlidXRlPgorCisgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImNwdXR5cGUiIHR5cGU9InhzOk5DTmFtZSIgdXNlPSJyZXF1aXJlZCIvPgorICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJwcm9jZXNzb3IiIHR5cGU9InhzOk5DTmFtZSIgdXNlPSJyZXF1aXJlZCIvPgorICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJtaHoiIHR5cGU9InhzOmRlY2ltYWwiIHVzZT0icmVxdWlyZWQiLz4gICAgICAKKwkgIDwhLS0gc2VwYXJhdGVkY3B1cyBpcyBvbmx5IHVzZWQgZm9yIHByb2ZpbGVzIHdpdGggc2VwYXJhdGU9Y3B1IC0tPgorICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJzZXBhcmF0ZWRjcHVzIiB0eXBlPSJ4czpub25OZWdhdGl2ZUludGVnZXIiIHVzZT0ib3B0aW9uYWwiLz4gICAgICAKKyAgICA8L3hzOmNvbXBsZXhUeXBlPgorICA8L3hzOmVsZW1lbnQ+CisgIAorICA8eHM6ZWxlbWVudCBuYW1lPSJvcHRpb25zIj4KKyAgICA8eHM6Y29tcGxleFR5cGU+CisgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InNlc3Npb24iIHR5cGU9InhzOnN0cmluZyIgdXNlPSJvcHRpb25hbCIvPgorICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJkZWJ1Z2luZm8iIHR5cGU9InhzOmJvb2xlYW4iIHVzZT0ib3B0aW9uYWwiLz4KKyAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iZGV0YWlscyIgdHlwZT0ieHM6Ym9vbGVhbiIgdXNlPSJvcHRpb25hbCIvPgorICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJleGNsdWRlZGVwZW5kZW50IiB0eXBlPSJ4czpib29sZWFuIiB1c2U9Im9wdGlvbmFsIi8+CisgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImV4Y2x1ZGVzeW1ib2xzIiB0eXBlPSJ4czpzdHJpbmciIHVzZT0ib3B0aW9uYWwiLz4KKyAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iaW1hZ2VwYXRoIiB0eXBlPSJ4czpzdHJpbmciIHVzZT0ib3B0aW9uYWwiLz4KKyAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iaW5jbHVkZXN5bWJvbHMiIHR5cGU9InhzOnN0cmluZyIgdXNlPSJvcHRpb25hbCIvPgorICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJtZXJnZSIgdHlwZT0ieHM6c3RyaW5nIiB1c2U9Im9wdGlvbmFsIi8+CisgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InJldmVyc2Vzb3J0IiB0eXBlPSJ4czpib29sZWFuIiB1c2U9Im9wdGlvbmFsIi8+CisgICAgPC94czpjb21wbGV4VHlwZT4KKyAgPC94czplbGVtZW50PgorICA8eHM6ZWxlbWVudCBuYW1lPSJzZXR1cCI+CisgICAgPHhzOmNvbXBsZXhUeXBlPgorICAgICAgPHhzOmNob2ljZT4KKyAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSIxIiByZWY9InRpbWVyc2V0dXAiLz4KKyAgICAgICAgPHhzOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iZXZlbnRzZXR1cCIvPgorICAgICAgPC94czpjaG9pY2U+CisgICAgPC94czpjb21wbGV4VHlwZT4KKyAgPC94czplbGVtZW50PgorICAKKyAgPHhzOmVsZW1lbnQgbmFtZT0idGltZXJzZXR1cCI+CisgICAgPHhzOmNvbXBsZXhUeXBlPgorICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJydGNpbnRlcnJ1cHRzIiB0eXBlPSJ4czpub25OZWdhdGl2ZUludGVnZXIiLz4gIAorICAgIDwveHM6Y29tcGxleFR5cGU+CisgIDwveHM6ZWxlbWVudD4KKworICA8eHM6ZWxlbWVudCBuYW1lPSJldmVudHNldHVwIj4KKyAgICA8eHM6Y29tcGxleFR5cGU+CisgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJ4czpub25OZWdhdGl2ZUludGVnZXIiIHVzZT0icmVxdWlyZWQiLz4KKyAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iZXZlbnRuYW1lIiB0eXBlPSJ4czpOYW1lIiB1c2U9InJlcXVpcmVkIi8+CisgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InVuaXRtYXNrIiB0eXBlPSJ4czpzdHJpbmciIHVzZT0ib3B0aW9uYWwiLz4KKyAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ic2V0dXBjb3VudCIgdHlwZT0ieHM6bm9uTmVnYXRpdmVJbnRlZ2VyIiB1c2U9InJlcXVpcmVkIi8+CisgICAgPC94czpjb21wbGV4VHlwZT4KKyAgPC94czplbGVtZW50PgorCisgIDwhLS0KKyAgCXRoZSBjcHUgYXR0cmlidXRlIHdpbGwgb25seSBiZSBwcmVzZW50IGluIHByb2ZpbGVzIHdpdGggbW9yZSB0aGFuIG9uZQorCXNlcGFyYXRlZCBjcHVzLiAgdGhlIGV2ZW50IGF0dHJpYnV0ZSB3aWxsIG9ubHkgYXBwZWFyIGlmIHRoZXJlIGlzIG1vcmUKKwl0aGFuIG9uZSBldmVudCBpbiB0aGUgcHJvZmlsZS4gIHRoZSBtYXNrIGF0dHJpYnV0ZSB3aWxsIG9ubHkgYXBwZWFyIGlmCisJdGhlcmUgaXMgYSBzaW5nbGUgbm9uLXplcm8gbWFzaywgb3IgbXVsdGlwbGUgbWFzayB2YWx1ZXMuCisgICAtLT4KKyAgPHhzOmVsZW1lbnQgbmFtZT0iY2xhc3MiPgorICAgIDx4czpjb21wbGV4VHlwZT4KKyAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ieHM6c3RyaW5nIiB1c2U9InJlcXVpcmVkIi8+CisgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImNwdSIgdHlwZT0ieHM6bm9uTmVnYXRpdmVJbnRlZ2VyIiB1c2U9Im9wdGlvbmFsIi8+CisgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImV2ZW50IiB0eXBlPSJ4czpub25OZWdhdGl2ZUludGVnZXIiIHVzZT0ib3B0aW9uYWwiLz4KKyAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibWFzayIgdHlwZT0ieHM6bm9uTmVnYXRpdmVJbnRlZ2VyIiB1c2U9Im9wdGlvbmFsIi8+CisgICAgPC94czpjb21wbGV4VHlwZT4KKyAgPC94czplbGVtZW50PgorICAKKyAgPHhzOmVsZW1lbnQgbmFtZT0iY2xhc3NlcyI+CisgICAgPHhzOmNvbXBsZXhUeXBlPgorICAgICAgPHhzOnNlcXVlbmNlPgorCTx4czplbGVtZW50IG1pbk9jY3Vycz0iMSIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iY2xhc3MiLz4KKyAgICAgIDwveHM6c2VxdWVuY2U+CisgICAgPC94czpjb21wbGV4VHlwZT4KKyAgPC94czplbGVtZW50PgorCisgIDx4czplbGVtZW50IG5hbWU9ImNvdW50Ij4KKyAgPHhzOmNvbXBsZXhUeXBlPgorICAgIDx4czpzaW1wbGVDb250ZW50PgorICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ4czpub25OZWdhdGl2ZUludGVnZXIiPgorCQk8IS0tIGlmIG5vIHNlcGFyYXRpb24gYnkgY3B1IGFuZCBvbmx5IGEgc2luZ2xlIG5vbiBtYXNrZWQgZXZlbnQKKwkJICAgICB0aGUgY2xhc3MgYXR0cmlidXRlIGlzIHVubmVjZXNzYXJ5IC0tPgorICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImNsYXNzIiB0eXBlPSJ4czpzdHJpbmciIHVzZT0ib3B0aW9uYWwiLz4KKyAgICAgIDwveHM6ZXh0ZW5zaW9uPgorICAgIDwveHM6c2ltcGxlQ29udGVudD4KKyAgPC94czpjb21wbGV4VHlwZT4KKyAgPC94czplbGVtZW50PgorCisgIDx4czplbGVtZW50IG5hbWU9InByb2Nlc3MiPgorICAgIDx4czpjb21wbGV4VHlwZT4KKyAgICAgIDx4czpzZXF1ZW5jZT4KKwk8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjEiIG1heE9jY3Vycz0iMSIgcmVmPSJjb3VudCIvPgorICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjEiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InRocmVhZCIvPgorICAgICAgPC94czpzZXF1ZW5jZT4KKyAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0icGlkIiB0eXBlPSJ4czppbnRlZ2VyIiB1c2U9InJlcXVpcmVkIi8+CisgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InhzOnN0cmluZyIgdXNlPSJyZXF1aXJlZCIvPgorICAgIDwveHM6Y29tcGxleFR5cGU+CisgIDwveHM6ZWxlbWVudD4KKworICA8eHM6ZWxlbWVudCBuYW1lPSJ0aHJlYWQiPgorICAgIDx4czpjb21wbGV4VHlwZT4KKyAgICAgIDx4czpzZXF1ZW5jZT4KKwkJPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIxIiBtYXhPY2N1cnM9IjEiIHJlZj0iY291bnQiLz4KKyAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIxIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJtb2R1bGUiLz4KKyAgICAgIDwveHM6c2VxdWVuY2U+CisgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InRpZCIgdHlwZT0ieHM6aW50ZWdlciIgdXNlPSJyZXF1aXJlZCIvPgorICAgIDwveHM6Y29tcGxleFR5cGU+CisgIDwveHM6ZWxlbWVudD4KKworICA8eHM6ZWxlbWVudCBuYW1lPSJiaW5hcnkiPgorICAgIDx4czpjb21wbGV4VHlwZT4KKyAgICAgIDx4czpzZXF1ZW5jZT4KKwkJPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIxIiBtYXhPY2N1cnM9IjEiIHJlZj0iY291bnQiLz4KKyAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJzeW1ib2wiLz4KKyAgICAgICAgPCEtLSBXaGVuIHRoZSBzZXBhcmF0ZT1saWIgb3B0aW9uIGlzIHVzZWQgYW4gYmluYXJ5CisJCSAgICAgY2FuIGNvbnRhaW4gYSBsaXN0IG9mIGxpYnJhcnkgTW9kdWxlcy4gIC0tPgorICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9Im1vZHVsZSIvPgorICAgICAgPC94czpzZXF1ZW5jZT4KKyAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ieHM6c3RyaW5nIiB1c2U9InJlcXVpcmVkIi8+CisgICAgPC94czpjb21wbGV4VHlwZT4KKyAgPC94czplbGVtZW50PgorCisgIDx4czplbGVtZW50IG5hbWU9Im1vZHVsZSI+CisgICAgPHhzOmNvbXBsZXhUeXBlPgorICAgICAgPHhzOnNlcXVlbmNlPgorCQk8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0iMSIgcmVmPSJjb3VudCIvPgorICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjEiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InN5bWJvbCIvPgorICAgICAgPC94czpzZXF1ZW5jZT4KKyAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ieHM6c3RyaW5nIiB1c2U9InJlcXVpcmVkIi8+CisgICAgPC94czpjb21wbGV4VHlwZT4KKyAgPC94czplbGVtZW50PgorCisgIDx4czplbGVtZW50IG5hbWU9ImNhbGxlZXMiPgorICAgIDx4czpjb21wbGV4VHlwZT4KKyAgICAgIDx4czpjaG9pY2U+CisJCTx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ibW9kdWxlIi8+CisJCTx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ic3ltYm9sIi8+CisgICAgICA8L3hzOmNob2ljZT4KKyAgICA8L3hzOmNvbXBsZXhUeXBlPgorICA8L3hzOmVsZW1lbnQ+CisKKyAgPHhzOmVsZW1lbnQgbmFtZT0iY2FsbGVycyI+CisgICAgPHhzOmNvbXBsZXhUeXBlPgorICAgICAgPHhzOmNob2ljZT4KKwkJPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJtb2R1bGUiLz4KKwkJPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJzeW1ib2wiLz4KKyAgICAgIDwveHM6Y2hvaWNlPgorICAgIDwveHM6Y29tcGxleFR5cGU+CisgIDwveHM6ZWxlbWVudD4KKworCisgIDx4czplbGVtZW50IG5hbWU9InN5bWJvbHRhYmxlIj4KKyAgICA8eHM6Y29tcGxleFR5cGU+CisgICAgICA8eHM6c2VxdWVuY2U+CisJCTx4czplbGVtZW50IG1pbk9jY3Vycz0iMSIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0ic3ltYm9sZGF0YSIvPgorICAgICAgPC94czpzZXF1ZW5jZT4KKyAgICA8L3hzOmNvbXBsZXhUeXBlPgorICA8L3hzOmVsZW1lbnQ+CisKKyAgPCEtLQorICAgIFRoZSBzeW1ib2xkYXRhIGVsZW1lbnQgY29udGFpbnMgdGhlIHN5bWJvbGljIGRlYnVnIGluZm9ybWF0aW9uIHRoYXQgaXMKKyAgICBtYWRlIGF2YWlsYWJsZSBieSB0aGUgZGVidWctaW5mbyBhbmQgZGV0YWlscyBvcHRpb25zLiAgVGhpcyBpbmZvcm1hdGlvbgorICAgIGlzIHNoYXJlZCBhY3Jvc3MgYnkgYWxsIG1vZHVsZSBpbnN0YW5jZXMgdGhhdCByZWZlcmVuY2UgaXQgYW5kIHRodXMgaXQKKyAgICBkb2VzIG5vdCBjb250YWluIGFueSBzYW1wbGUgZGVwZW5kZW50IGRhdGEuCisgICAtLT4KKyAgPHhzOmVsZW1lbnQgbmFtZT0ic3ltYm9sZGF0YSI+CisgICAgPHhzOmNvbXBsZXhUeXBlPgorICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJ4czpzdHJpbmciIHVzZT0icmVxdWlyZWQiLz4KKyAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iaWQiIHR5cGU9InhzOmludGVnZXIiIHVzZT0icmVxdWlyZWQiLz4KKyAgICAgIDwhLS0gb3B0aW9uYWwgZGVidWctaW5mbyBhdHRyaWJ1dGVzIC0tPgorICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJmaWxlIiB0eXBlPSJ4czpzdHJpbmciIHVzZT0ib3B0aW9uYWwiLz4KKyAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibGluZSIgdHlwZT0ieHM6bm9uTmVnYXRpdmVJbnRlZ2VyIiB1c2U9Im9wdGlvbmFsIi8+CisgICAgICA8IS0tIHN0YXJ0aW5nYWRkcjogb3B0aW9uYWwgZGV0YWlscyBvciBzaG93LWFkZHJlc3MgYXR0cmlidXRlICAtLT4KKyAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ic3RhcnRpbmdhZGRyIiB1c2U9Im9wdGlvbmFsIi8+CisgICAgICA8IS0tIGNvZGVsZW5ndGg6IG9wdGlvbmFsIGRldGFpbHMgYXR0cmlidXRlICAtLT4KKyAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY29kZWxlbmd0aCIgdHlwZT0ieHM6aW50ZWdlciIgdXNlPSJvcHRpb25hbCIvPgorICAgIDwveHM6Y29tcGxleFR5cGU+CisgIDwveHM6ZWxlbWVudD4KKworICA8eHM6ZWxlbWVudCBuYW1lPSJzeW1ib2wiPgorICAgIDx4czpjb21wbGV4VHlwZT4KKyAgICAgIDx4czpzZXF1ZW5jZT4KKyAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9IjEiIHJlZj0iY2FsbGVycyIvPgorICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0iMSIgcmVmPSJjYWxsZWVzIi8+CisgICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSIxIiByZWY9ImNvdW50Ii8+CisgICAgICA8L3hzOnNlcXVlbmNlPgorCSAgPCEtLSBpZHJlZiBpcyBhbiBpbmRleCBpbnRvIHN5bWJvbHRhYmxlIHRhYmxlLS0+CisgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImlkcmVmIiB0eXBlPSJ4czpub25OZWdhdGl2ZUludGVnZXIiIHVzZT0icmVxdWlyZWQiLz4KKwkgIDwhLS0gc2VsZiBpcyBhIGJvb2xlYW4gdG8gbWFyayBzZWxmIHJlZmVyZW5jaW5nIGNhbGxlZSBzeW1ib2xzIC0tPgorICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJzZWxmIiB0eXBlPSJ4czpib29sZWFuIiB1c2U9Im9wdGlvbmFsIi8+CisJICA8IS0tIGRldGFpbGxvLGRldGFpbGhpIGxvb2t1cCBpZHMgaW50byBjb3JyZXNwb25kaW5nIHN5bWJvbGRldGFpbHMgLS0+CisgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImRldGFpbGxvIiB0eXBlPSJ4czpub25OZWdhdGl2ZUludGVnZXIiIHVzZT0ib3B0aW9uYWwiLz4KKyAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iZGV0YWlsaGkiIHR5cGU9InhzOm5vbk5lZ2F0aXZlSW50ZWdlciIgdXNlPSJvcHRpb25hbCIvPgorICAgIDwveHM6Y29tcGxleFR5cGU+CisgIDwveHM6ZWxlbWVudD4KKworICA8IS0tIGRldGFpbHRhYmxlIGlzIGEgdGFibGUgb2Ygc3ltYm9sZGV0YWlscyB0aGF0IGFyZSByZWZlcmVuY2VkCisgICAgICAgZnJvbSBzeW1ib2xkYXRhLiBUaGUgdGFibGUgaXMgb25seSBnZW5lcmF0ZWQgd2l0aCB0aGUgZGV0YWlscworCSAgIG9wdGlvbiBpcyB1c2VkIGFuZCBhcHBlYXJzIGF0IHRoZSBlbmQgb2YgdGhlIFhNTCBmaWxlIHNvIHRoYXQKKwkgICBhIEdVSSBjYW4gcHJvY2VzcyB0aGUgc3VtbWFyeSBkYXRhIHdpdGhvdXQgaGF2aW5nIHRvIHByb2Nlc3MKKwkgICBhbGwgb2YgdGhlIGRldGFpbHMuIC0tPgorICA8eHM6ZWxlbWVudCBuYW1lPSJkZXRhaWx0YWJsZSI+CisgICAgPHhzOmNvbXBsZXhUeXBlPgorICAgICAgPHhzOnNlcXVlbmNlPgorCQk8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjEiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9InN5bWJvbGRldGFpbHMiLz4KKyAgICAgIDwveHM6c2VxdWVuY2U+CisgICAgPC94czpjb21wbGV4VHlwZT4KKyAgPC94czplbGVtZW50PgorCisgIDwhLS0gc3ltYm9sZGV0YWlscyBpcyBhIGNvbGxlY3Rpb24gb2YgYWxsIG9mIHRoZSBpbmRpdmlkdWFsIGRldGFpbGRhdGEKKyAgICAgICBhc3NvY2lhdGVkIHdpdGggcG9zc2libHkgbXVsdGlwbGUgaW5zdGFuY2VzIG9mIGEgc3ltYm9sLiAtLT4KKyAgPHhzOmVsZW1lbnQgbmFtZT0ic3ltYm9sZGV0YWlscyI+CisgICAgPHhzOmNvbXBsZXhUeXBlPgorICAgICAgPHhzOnNlcXVlbmNlPgorCQk8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjEiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImRldGFpbGRhdGEiLz4KKyAgICAgIDwveHM6c2VxdWVuY2U+CisgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJ4czppbnRlZ2VyIiB1c2U9InJlcXVpcmVkIi8+CisgICAgPC94czpjb21wbGV4VHlwZT4KKyAgPC94czplbGVtZW50PgorCisgIDx4czplbGVtZW50IG5hbWU9ImRldGFpbGRhdGEiPgorICAgIDx4czpjb21wbGV4VHlwZT4KKyAgICAgIDx4czpzZXF1ZW5jZT4KKyAgICAJICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjEiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9ImNvdW50Ii8+CisgICAgICA8L3hzOnNlcXVlbmNlPgorCSAgPCEtLSBsaW5lIG9ubHkgb2NjdXJzIHdoZW4gZGVidWctaW5mbyBvcHRpb24gdXNlZCAtLT4KKwkgIDx4czphdHRyaWJ1dGUgbmFtZT0ibGluZSIgdHlwZT0ieHM6bm9uTmVnYXRpdmVJbnRlZ2VyIiB1c2U9Im9wdGlvbmFsIi8+CisJICA8IS0tIGZpbGUgb25seSBvY2N1cnMgd2hlbiBkZWJ1Zy1pbmZvIG9wdGlvbiB1c2VkIGFuZAorCQkgICB0aGUgZmlsZSBpcyBkaWZmZXJlbnQgdGhhbiB0aGUgc3ltYm9sIGFzc29jaWF0ZWQgd2l0aAorCQkgICB0aGlzIHNhbXBsZSBkYXRhLiAgdGhpcyBzaXR1YXRpb24gY2FuIG9jY3VyIHdoZW4gaW5saW5lIGZ1bmN0aW9ucworCQkgICBhcmUgZGVmaW5lZCBpbiAjaW5jbHVkZSBoZWFkZXIgZmlsZXMuCisJICAgLS0+CisJICA8eHM6YXR0cmlidXRlIG5hbWU9ImZpbGUiIHR5cGU9InhzOnN0cmluZyIgdXNlPSJvcHRpb25hbCIvPgorICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ2bWFvZmZzZXQiIHR5cGU9InhzOmhleEJpbmFyeSIgdXNlPSJyZXF1aXJlZCIvPgorICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJpZCIgdHlwZT0ieHM6aW50ZWdlciIgdXNlPSJyZXF1aXJlZCIvPgorICAgIDwveHM6Y29tcGxleFR5cGU+CisgIDwveHM6ZWxlbWVudD4KKworICA8eHM6ZWxlbWVudCBuYW1lPSJieXRlcyI+CisgIDx4czpjb21wbGV4VHlwZT4KKyAgICA8eHM6c2ltcGxlQ29udGVudD4KKyAgICAgIDx4czpleHRlbnNpb24gYmFzZT0ieHM6aGV4QmluYXJ5Ij4KKyAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJpZCIgdHlwZT0ieHM6bm9uTmVnYXRpdmVJbnRlZ2VyIiB1c2U9InJlcXVpcmVkIi8+CisgICAgICA8L3hzOmV4dGVuc2lvbj4KKyAgICA8L3hzOnNpbXBsZUNvbnRlbnQ+CisgIDwveHM6Y29tcGxleFR5cGU+CisgIDwveHM6ZWxlbWVudD4KKworICA8eHM6ZWxlbWVudCBuYW1lPSJieXRlc3RhYmxlIj4KKyAgICA8eHM6Y29tcGxleFR5cGU+CisgICAgICA8eHM6c2VxdWVuY2U+CisJICAgIDwhLS0gQ29udGFpbnMgYmluYXJ5IGRhdGEgZm9yIHRoZSBtYWNoaW5lIGluc3RydWN0aW9ucyAtLT4KKwkJPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIxIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJieXRlcyIvPgorICAgICAgPC94czpzZXF1ZW5jZT4KKyAgICA8L3hzOmNvbXBsZXhUeXBlPgorICA8L3hzOmVsZW1lbnQ+Cis8L3hzOnNjaGVtYT4KKwpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvZG9jL29wcm9maWxlLjEgYi9vcHJvZmlsZS0wLjkuNy9kb2Mvb3Byb2ZpbGUuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYWU1OGE2Ci0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvZG9jL29wcm9maWxlLjEKQEAgLTAsMCArMSwxOTMgQEAKKy5USCBPUFJPRklMRSAxICJGcmkgMTIgQXVndXN0IDIwMTEiICJvcHJvZmlsZSAwLjkuNyIKKy5VQyA0CisuU0ggTkFNRQorb3Byb2ZpbGUgXC0gYSBzeXN0ZW0td2lkZSBwcm9maWxlcgorLlNIIFNZTk9QU0lTCisuYnIKKy5CIG9wY29udHJvbAorWworLkkgb3B0aW9ucworXQorLmJyCisuQiBvcHJlcG9ydAorWworLkkgb3B0aW9ucworXQorWyBwcm9maWxlIHNwZWNpZmljYXRpb24gXQorLmJyCisuQiBvcGFubm90YXRlCitbCisuSSBvcHRpb25zCitdCitbIHByb2ZpbGUgc3BlY2lmaWNhdGlvbiBdCisuYnIKKy5CIG9wYXJjaGl2ZQorWworLkkgb3B0aW9ucworXQorWyBwcm9maWxlIHNwZWNpZmljYXRpb24gXQorLmJyCisuQiBvcGdwcm9mCitbCisuSSBvcHRpb25zCitdCitbIHByb2ZpbGUgc3BlY2lmaWNhdGlvbiBdCisuYnIKKy5TSCBERVNDUklQVElPTgorT1Byb2ZpbGUgaXMgYSBwcm9maWxpbmcgc3lzdGVtIGZvciBzeXN0ZW1zIHJ1bm5pbmcgTGludXgKKzIuMiwgMi40LCBhbmQgMi42LiBQcm9maWxpbmcgcnVucyB0cmFuc3BhcmVudGx5IGluIHRoZSBiYWNrZ3JvdW5kIGFuZCBwcm9maWxlCitkYXRhIGNhbiBiZSBjb2xsZWN0ZWQgYXQgYW55IHRpbWUuIE9Qcm9maWxlIG1ha2VzIHVzZSBvZiB0aGUgaGFyZHdhcmUKK3BlcmZvcm1hbmNlIGNvdW50ZXJzIHByb3ZpZGVkIG9uIEludGVsLCBBTUQsIGFuZCBvdGhlciBwcm9jZXNzb3JzLAorYW5kIHVzZXMgYSB0aW1lci1pbnRlcnJ1cHQgYmFzZWQgbWVjaGFuaXNtIG9uIENQVXMgd2l0aG91dCBjb3VudGVycy4KK09Qcm9maWxlIGNhbiBwcm9maWxlIHRoZSB3aG9sZSBzeXN0ZW0gaW4gaGlnaCBkZXRhaWwuCisuYnIKK0ZvciBhIGdlbnRsZSBndWlkZSB0byB1c2luZyBPUHJvZmlsZSwgcGxlYXNlIHJlYWQgdGhlIEhUTUwgZG9jdW1lbnRhdGlvbgorbGlzdGVkIGluIFNFRSBBTFNPLgorLmJyCisuU0ggT1BDT05UUk9MCisuQiBvcGNvbnRyb2wKK2lzIHVzZWQgZm9yIHN0YXJ0aW5nIGFuZCBzdG9wcGluZyB0aGUgT1Byb2ZpbGUgZGFlbW9uLCBhbmQgcHJvdmlkaW5nIHNldC11cAorcGFyYW1ldGVycy4KKy5TSCBPUFJFUE9SVAorLkIgb3ByZXBvcnQKK2dpdmVzIGltYWdlIGFuZCBzeW1ib2wtYmFzZWQgcHJvZmlsZSBzdW1tYXJpZXMgZm9yIHRoZSB3aG9sZSBzeXN0ZW0gb3IKK2Egc3Vic2V0IG9mIGJpbmFyeSBpbWFnZXMuCisuU0ggT1BBTk5PVEFURQorLkIgb3Bhbm5vdGF0ZQorY2FuIHByb2R1Y2UgYW5ub3RhdGVkIHNvdXJjZSBvciBtaXhlZCBzb3VyY2UgYW5kIGFzc2VtYmx5IG91dHB1dC4KKy5TSCBPUEFSQ0hJVkUKKy5CIG9wYXJjaGl2ZQorcHJvZHVjZXMgb3Byb2ZpbGUgYXJjaGl2ZSBmb3Igb2ZmbGluZSBhbmFseXNpcworLlNIIE9QR1BST0YKKy5CIG9wZ3Byb2YKK2NhbiBwcm9kdWNlIGEgZ3Byb2YtZm9ybWF0IHByb2ZpbGUgZm9yIGEgc2luZ2xlIGJpbmFyeS4KKworLlNIIFBST0ZJTEUgU1BFQ0lGSUNBVElPTlMKK0FsbCBvZiB0aGUgcG9zdC1wcm9maWxpbmcgdG9vbHMgY2FuIHRha2UgcHJvZmlsZSBzcGVjaWZpY2F0aW9ucywKK3doaWNoIGlzIHNvbWUgY29tYmluYXRpb24gb2YgdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzLiBFbmNsb3NpbmcKK3BhcnQgb2YgYSBwcm9maWxlIHNwZWNpZmljYXRpb24gaW4gY3VybHkgYnJhY2VzIHsgfSBjYW4gYmUgdXNlZAorZm9yIGRpZmZlcmVudGlhbCBwcm9maWxlcyB3aXRoCisuQiBvcHJlcG9ydAorOyB0aGUgYnJhY2VzCisuQiBtdXN0CitiZSBzdXJyb3VuZGVkIGJ5IHdoaXRlc3BhY2UuCisKKy5UUAorLkJJICJhcmNoaXZlOiJhcmNoaXZlCitQYXRoIHRvIHRoZSBhcmNoaXZlIHRvIGluc3BlY3QsIGFzIGdlbmVyYXRlZCBieQorLkIgb3BhcmNoaXZlCisuYnIKKy5UUAorLkJJICJzZXNzaW9uOiJzZXNzaW9ubGlzdAorQSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBzZXNzaW9uIG5hbWVzIHRvIHJlc29sdmUgaW4uIEFic2VuY2Ugb2YgdGhpcwordGFnLCB1bmxpa2UgYWxsIG90aGVycywgbWVhbnMgInRoZSBjdXJyZW50IHNlc3Npb24iLCBlcXVpdmFsZW50IHRvCitzcGVjaWZ5aW5nICJzZXNzaW9uOmN1cnJlbnQiLgorLmJyCisuVFAKKy5CSSAic2Vzc2lvbi1leGNsdWRlOiJzZXNzaW9ubGlzdAorQSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBzZXNzaW9ucyB0byBleGNsdWRlLgorLmJyCisuVFAKKy5CSSAiaW1hZ2U6ImltYWdlbGlzdAorQSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBpbWFnZSBuYW1lcyB0byByZXNvbHZlLiBFYWNoIGVudHJ5IG1heSBiZSByZWxhdGl2ZQorcGF0aCwgZ2xvYi1zdHlsZSBuYW1lLCBvciBmdWxsIHBhdGgsIGUuZy4KK29wcmVwb3J0ICdpbWFnZTovdXNyL2Jpbi9vcHJvZmlsZWQsKm9wKiwuL29wcm9mcHAnCisuYnIKKy5UUAorLkJJICJpbWFnZS1leGNsdWRlOiJpbWFnZWxpc3QKK1NhbWUgYXMgaW1hZ2U6LCBidXQgdGhlIG1hdGNoaW5nIGltYWdlcyBhcmUgZXhjbHVkZWQuCisuYnIKKy5UUAorLkJJICJsaWItaW1hZ2U6ImltYWdlbGlzdAorU2FtZSBhcyBpbWFnZTosIGJ1dCBvbmx5IGZvciBpbWFnZXMgdGhhdCBhcmUgZm9yCithIHBhcnRpY3VsYXIgcHJpbWFyeSBiaW5hcnkgaW1hZ2UgKG5hbWVseSwgYW4gYXBwbGljYXRpb24pLiBUaGlzIG9ubHkKK21ha2VzIHNlbnNlIHRvIHVzZSBpZiB5b3UncmUgdXNpbmcgLS1zZXBhcmF0ZS4KK1RoaXMgaW5jbHVkZXMga2VybmVsIG1vZHVsZXMgYW5kIHRoZSBrZXJuZWwgd2hlbiB1c2luZworLS1zZXBhcmF0ZT1rZXJuZWwuCisuYnIKKy5UUAorLkJJICJsaWItaW1hZ2UtZXhjbHVkZToiaW1hZ2VsaXN0CitTYW1lIGFzIDxvcHRpb24+bGliLWltYWdlOjwvb3B0aW9uPiwgYnV0IHRoZSBtYXRjaGluZyBpbWFnZXMKK2FyZSBleGNsdWRlZC4KKy5icgorLlRQCisuQkkgImV2ZW50OiJldmVudG5hbWUKK1RoZSBzeW1ib2xpYyBldmVudCBuYW1lIHRvIG1hdGNoIG9uLCBlLmcuIGV2ZW50OkRBVEFfTUVNX1JFRlMuCisuYnIKKy5UUAorLkJJICJjb3VudDoiZXZlbnRjb3VudAorVGhlIGV2ZW50IGNvdW50IHRvIG1hdGNoIG9uLCBlLmcuIGV2ZW50OkRBVEFfTUVNX1JFRlMgY291bnQ6MzAwMDAuCisuYnIKKy5UUAorLkJJICJ1bml0LW1hc2s6Im1hc2t2YWx1ZQorVGhlIHVuaXQgbWFzayB2YWx1ZSBvZiB0aGUgZXZlbnQgdG8gbWF0Y2ggb24sIGUuZy4gdW5pdC1tYXNrOjEuCisuYnIKKy5UUAorLkJJICJjcHU6ImNwdWxpc3QKK09ubHkgY29uc2lkZXIgcHJvZmlsZXMgZm9yIHRoZSBnaXZlbiBudW1iZXJlZCBDUFUgKHN0YXJ0aW5nIGZyb20gemVybykuCitUaGlzIGlzIG9ubHkgdXNlZnVsIHdoZW4gdXNpbmcgQ1BVIHByb2ZpbGUgc2VwYXJhdGlvbi4KKy5icgorLlRQCisuQkkgInRnaWQ6InBpZGxpc3QKK09ubHkgY29uc2lkZXIgcHJvZmlsZXMgZm9yIHRoZSBnaXZlbiB0YXNrIGdyb3Vwcy4gVW5sZXNzIHNvbWUgcHJvZ3JhbSBpcwordXNpbmcgdGhyZWFkcywgdGhlIHRhc2sgZ3JvdXAgSUQgb2YgYSBwcm9jZXNzIGlzIHRoZSBzYW1lIGFzIGl0cyBwcm9jZXNzCitJRC4gVGhpcyBvcHRpb24gY29ycmVzcG9uZHMgdG8gdGhlIFBPU0lYIG5vdGlvbiBvZiBhIHRocmVhZCBncm91cC4gVGhpcworaXMgb25seSB1c2VmdWwgd2hlbiB1c2luZyBwZXItcHJvY2VzcyBwcm9maWxlIHNlcGFyYXRpb24uCisuYnIKKy5UUAorLkJJICJ0aWQ6InRpZGxpc3QKK09ubHkgY29uc2lkZXIgcHJvZmlsZXMgZm9yIHRoZSBnaXZlbiB0aHJlYWRzLiBXaGVuIHVzaW5nIHJlY2VudCB0aHJlYWQKK2xpYnJhcmllcywgYWxsIHRocmVhZHMgaW4gYSBwcm9jZXNzIHNoYXJlIHRoZSBzYW1lIHRhc2sgZ3JvdXAgSUQsIGJ1dAoraGF2ZSBkaWZmZXJlbnQgdGhyZWFkIElEcy4gWW91IGNhbiB1c2UgdGhpcyBvcHRpb24gaW4gY29tYmluYXRpb24gd2l0aAordGdpZDogdG8gcmVzdHJpY3QgdGhlIHJlc3VsdHMgdG8gcGFydGljdWxhciB0aHJlYWRzIHdpdGhpbiBhIHByb2Nlc3MuCitUaGlzIGlzIG9ubHkgdXNlZnVsIHdoZW4gdXNpbmcgcGVyLXByb2Nlc3MgcHJvZmlsZSBzZXBhcmF0aW9uLgorCisuU0ggRU5WSVJPTk1FTlQKK05vIHNwZWNpYWwgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZSByZWNvZ25pc2VkIGJ5IG9wcm9maWxlLgorCisuU0ggRklMRVMKKy5UUAorLkkgJEhPTUUvLm9wcm9maWxlLworQ29uZmlndXJhdGlvbiBmaWxlcworLlRQCisuSSAvcm9vdC8ub3Byb2ZpbGUvZGFlbW9ucmMKK0NvbmZpZ3VyYXRpb24gZmlsZSBmb3Igb3Bjb250cm9sCisuVFAKKy5JIC9vcHQvb3Byb2ZpbGUtMC45LjctcmMzL3NoYXJlL29wcm9maWxlLworRXZlbnQgZGVzY3JpcHRpb24gZmlsZXMgdXNlZCBieSBPUHJvZmlsZS4KKy5UUAorLkkgL3Zhci9saWIvb3Byb2ZpbGUvc2FtcGxlcy9vcHJvZmlsZWQubG9nCitUaGUgdXNlci1zcGFjZSBkYWVtb24gbG9nZmlsZS4KKy5UUAorLkkgL3Zhci9saWIvb3Byb2ZpbGUvb3BkZXYsIC92YXIvbGliL29wcm9maWxlL29waGFzaG1hcGRldiwgL3Zhci9saWIvb3Byb2ZpbGUvb3Bub3RlZGV2CitUaGUgZGV2aWNlIGZpbGVzIGZvciBjb21tdW5pY2F0aW9uIHdpdGggdGhlIExpbnV4IDIuNCBrZXJuZWwgbW9kdWxlLiAKKy5UUAorLkkgL2Rldi9vcHJvZmlsZQorVGhlIGRldmljZSBmaWxlc3lzdGVtIGZvciBjb21tdW5pY2F0aW9uIHdpdGggdGhlIExpbnV4IDIuNiBrZXJuZWwgbW9kdWxlLiAKKy5UUAorLkkgL3Zhci9saWIvb3Byb2ZpbGUvc2FtcGxlcy8KK1RoZSBsb2NhdGlvbiBvZiB0aGUgZ2VuZXJhdGVkIHNhbXBsZSBmaWxlcy4KKworLlNIIFZFUlNJT04KKy5UUAorVGhpcyBtYW4gcGFnZSBpcyBjdXJyZW50IGZvciBvcHJvZmlsZS0wLjkuNy4KKworLlNIIFNFRSBBTFNPCisuQlIgL29wdC9vcHJvZmlsZS0wLjkuNy1yYzMvc2hhcmUvZG9jL29wcm9maWxlLywKKy5CUiBvcGNvbnRyb2woMSksCisuQlIgb3ByZXBvcnQoMSksCisuQlIgb3Bhbm5vdGF0ZSgxKSwKKy5CUiBvcGFyY2hpdmUoMSksCisuQlIgb3BncHJvZigxKSwKKy5CUiBncHJvZigxKSwKKy5CUiByZWFkcHJvZmlsZSgxKSwKKy5CUiAiQ1BVIHZlbmRvciBhcmNoaXRlY3R1cmUgbWFudWFscyIKKworLlNIIENPUFlSSUdIVAorb3Byb2ZpbGUgaXMgQ29weXJpZ2h0IChDKSAxOTk4LTIwMDQgVW5pdmVyc2l0eSBvZiBNYW5jaGVzdGVyLCBVSywgSm9obiBMZXZvbiwKK2FuZCBvdGhlcnMuCitPUHJvZmlsZSBpcyByZWxlYXNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIFZlcnNpb24gMiwKK29yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisuU0ggQVVUSE9SUworSm9obiBMZXZvbiA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+IGlzIHRoZSBwcmltYXJ5IGF1dGhvci4gU2VlIHRoZSBkb2N1bWVudGF0aW9uCitmb3Igb3RoZXIgY29udHJpYnV0b3JzLgpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvZG9jL29wcm9maWxlLjEuaW4gYi9vcHJvZmlsZS0wLjkuNy9kb2Mvb3Byb2ZpbGUuMS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDBmMGVkCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvZG9jL29wcm9maWxlLjEuaW4KQEAgLTAsMCArMSwxOTMgQEAKKy5USCBPUFJPRklMRSAxICJAREFURUAiICJvcHJvZmlsZSBAVkVSU0lPTkAiCisuVUMgNAorLlNIIE5BTUUKK29wcm9maWxlIFwtIGEgc3lzdGVtLXdpZGUgcHJvZmlsZXIKKy5TSCBTWU5PUFNJUworLmJyCisuQiBvcGNvbnRyb2wKK1sKKy5JIG9wdGlvbnMKK10KKy5icgorLkIgb3ByZXBvcnQKK1sKKy5JIG9wdGlvbnMKK10KK1sgcHJvZmlsZSBzcGVjaWZpY2F0aW9uIF0KKy5icgorLkIgb3Bhbm5vdGF0ZQorWworLkkgb3B0aW9ucworXQorWyBwcm9maWxlIHNwZWNpZmljYXRpb24gXQorLmJyCisuQiBvcGFyY2hpdmUKK1sKKy5JIG9wdGlvbnMKK10KK1sgcHJvZmlsZSBzcGVjaWZpY2F0aW9uIF0KKy5icgorLkIgb3BncHJvZgorWworLkkgb3B0aW9ucworXQorWyBwcm9maWxlIHNwZWNpZmljYXRpb24gXQorLmJyCisuU0ggREVTQ1JJUFRJT04KK09Qcm9maWxlIGlzIGEgcHJvZmlsaW5nIHN5c3RlbSBmb3Igc3lzdGVtcyBydW5uaW5nIExpbnV4CisyLjIsIDIuNCwgYW5kIDIuNi4gUHJvZmlsaW5nIHJ1bnMgdHJhbnNwYXJlbnRseSBpbiB0aGUgYmFja2dyb3VuZCBhbmQgcHJvZmlsZQorZGF0YSBjYW4gYmUgY29sbGVjdGVkIGF0IGFueSB0aW1lLiBPUHJvZmlsZSBtYWtlcyB1c2Ugb2YgdGhlIGhhcmR3YXJlCitwZXJmb3JtYW5jZSBjb3VudGVycyBwcm92aWRlZCBvbiBJbnRlbCwgQU1ELCBhbmQgb3RoZXIgcHJvY2Vzc29ycywKK2FuZCB1c2VzIGEgdGltZXItaW50ZXJydXB0IGJhc2VkIG1lY2hhbmlzbSBvbiBDUFVzIHdpdGhvdXQgY291bnRlcnMuCitPUHJvZmlsZSBjYW4gcHJvZmlsZSB0aGUgd2hvbGUgc3lzdGVtIGluIGhpZ2ggZGV0YWlsLgorLmJyCitGb3IgYSBnZW50bGUgZ3VpZGUgdG8gdXNpbmcgT1Byb2ZpbGUsIHBsZWFzZSByZWFkIHRoZSBIVE1MIGRvY3VtZW50YXRpb24KK2xpc3RlZCBpbiBTRUUgQUxTTy4KKy5icgorLlNIIE9QQ09OVFJPTAorLkIgb3Bjb250cm9sCitpcyB1c2VkIGZvciBzdGFydGluZyBhbmQgc3RvcHBpbmcgdGhlIE9Qcm9maWxlIGRhZW1vbiwgYW5kIHByb3ZpZGluZyBzZXQtdXAKK3BhcmFtZXRlcnMuCisuU0ggT1BSRVBPUlQKKy5CIG9wcmVwb3J0CitnaXZlcyBpbWFnZSBhbmQgc3ltYm9sLWJhc2VkIHByb2ZpbGUgc3VtbWFyaWVzIGZvciB0aGUgd2hvbGUgc3lzdGVtIG9yCithIHN1YnNldCBvZiBiaW5hcnkgaW1hZ2VzLgorLlNIIE9QQU5OT1RBVEUKKy5CIG9wYW5ub3RhdGUKK2NhbiBwcm9kdWNlIGFubm90YXRlZCBzb3VyY2Ugb3IgbWl4ZWQgc291cmNlIGFuZCBhc3NlbWJseSBvdXRwdXQuCisuU0ggT1BBUkNISVZFCisuQiBvcGFyY2hpdmUKK3Byb2R1Y2VzIG9wcm9maWxlIGFyY2hpdmUgZm9yIG9mZmxpbmUgYW5hbHlzaXMKKy5TSCBPUEdQUk9GCisuQiBvcGdwcm9mCitjYW4gcHJvZHVjZSBhIGdwcm9mLWZvcm1hdCBwcm9maWxlIGZvciBhIHNpbmdsZSBiaW5hcnkuCisKKy5TSCBQUk9GSUxFIFNQRUNJRklDQVRJT05TCitBbGwgb2YgdGhlIHBvc3QtcHJvZmlsaW5nIHRvb2xzIGNhbiB0YWtlIHByb2ZpbGUgc3BlY2lmaWNhdGlvbnMsCit3aGljaCBpcyBzb21lIGNvbWJpbmF0aW9uIG9mIHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVycy4gRW5jbG9zaW5nCitwYXJ0IG9mIGEgcHJvZmlsZSBzcGVjaWZpY2F0aW9uIGluIGN1cmx5IGJyYWNlcyB7IH0gY2FuIGJlIHVzZWQKK2ZvciBkaWZmZXJlbnRpYWwgcHJvZmlsZXMgd2l0aAorLkIgb3ByZXBvcnQKKzsgdGhlIGJyYWNlcworLkIgbXVzdAorYmUgc3Vycm91bmRlZCBieSB3aGl0ZXNwYWNlLgorCisuVFAKKy5CSSAiYXJjaGl2ZToiYXJjaGl2ZQorUGF0aCB0byB0aGUgYXJjaGl2ZSB0byBpbnNwZWN0LCBhcyBnZW5lcmF0ZWQgYnkKKy5CIG9wYXJjaGl2ZQorLmJyCisuVFAKKy5CSSAic2Vzc2lvbjoic2Vzc2lvbmxpc3QKK0EgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2Ygc2Vzc2lvbiBuYW1lcyB0byByZXNvbHZlIGluLiBBYnNlbmNlIG9mIHRoaXMKK3RhZywgdW5saWtlIGFsbCBvdGhlcnMsIG1lYW5zICJ0aGUgY3VycmVudCBzZXNzaW9uIiwgZXF1aXZhbGVudCB0bworc3BlY2lmeWluZyAic2Vzc2lvbjpjdXJyZW50Ii4KKy5icgorLlRQCisuQkkgInNlc3Npb24tZXhjbHVkZToic2Vzc2lvbmxpc3QKK0EgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2Ygc2Vzc2lvbnMgdG8gZXhjbHVkZS4KKy5icgorLlRQCisuQkkgImltYWdlOiJpbWFnZWxpc3QKK0EgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgaW1hZ2UgbmFtZXMgdG8gcmVzb2x2ZS4gRWFjaCBlbnRyeSBtYXkgYmUgcmVsYXRpdmUKK3BhdGgsIGdsb2Itc3R5bGUgbmFtZSwgb3IgZnVsbCBwYXRoLCBlLmcuCitvcHJlcG9ydCAnaW1hZ2U6L3Vzci9iaW4vb3Byb2ZpbGVkLCpvcCosLi9vcHJvZnBwJworLmJyCisuVFAKKy5CSSAiaW1hZ2UtZXhjbHVkZToiaW1hZ2VsaXN0CitTYW1lIGFzIGltYWdlOiwgYnV0IHRoZSBtYXRjaGluZyBpbWFnZXMgYXJlIGV4Y2x1ZGVkLgorLmJyCisuVFAKKy5CSSAibGliLWltYWdlOiJpbWFnZWxpc3QKK1NhbWUgYXMgaW1hZ2U6LCBidXQgb25seSBmb3IgaW1hZ2VzIHRoYXQgYXJlIGZvcgorYSBwYXJ0aWN1bGFyIHByaW1hcnkgYmluYXJ5IGltYWdlIChuYW1lbHksIGFuIGFwcGxpY2F0aW9uKS4gVGhpcyBvbmx5CittYWtlcyBzZW5zZSB0byB1c2UgaWYgeW91J3JlIHVzaW5nIC0tc2VwYXJhdGUuCitUaGlzIGluY2x1ZGVzIGtlcm5lbCBtb2R1bGVzIGFuZCB0aGUga2VybmVsIHdoZW4gdXNpbmcKKy0tc2VwYXJhdGU9a2VybmVsLgorLmJyCisuVFAKKy5CSSAibGliLWltYWdlLWV4Y2x1ZGU6ImltYWdlbGlzdAorU2FtZSBhcyA8b3B0aW9uPmxpYi1pbWFnZTo8L29wdGlvbj4sIGJ1dCB0aGUgbWF0Y2hpbmcgaW1hZ2VzCithcmUgZXhjbHVkZWQuCisuYnIKKy5UUAorLkJJICJldmVudDoiZXZlbnRuYW1lCitUaGUgc3ltYm9saWMgZXZlbnQgbmFtZSB0byBtYXRjaCBvbiwgZS5nLiBldmVudDpEQVRBX01FTV9SRUZTLgorLmJyCisuVFAKKy5CSSAiY291bnQ6ImV2ZW50Y291bnQKK1RoZSBldmVudCBjb3VudCB0byBtYXRjaCBvbiwgZS5nLiBldmVudDpEQVRBX01FTV9SRUZTIGNvdW50OjMwMDAwLgorLmJyCisuVFAKKy5CSSAidW5pdC1tYXNrOiJtYXNrdmFsdWUKK1RoZSB1bml0IG1hc2sgdmFsdWUgb2YgdGhlIGV2ZW50IHRvIG1hdGNoIG9uLCBlLmcuIHVuaXQtbWFzazoxLgorLmJyCisuVFAKKy5CSSAiY3B1OiJjcHVsaXN0CitPbmx5IGNvbnNpZGVyIHByb2ZpbGVzIGZvciB0aGUgZ2l2ZW4gbnVtYmVyZWQgQ1BVIChzdGFydGluZyBmcm9tIHplcm8pLgorVGhpcyBpcyBvbmx5IHVzZWZ1bCB3aGVuIHVzaW5nIENQVSBwcm9maWxlIHNlcGFyYXRpb24uCisuYnIKKy5UUAorLkJJICJ0Z2lkOiJwaWRsaXN0CitPbmx5IGNvbnNpZGVyIHByb2ZpbGVzIGZvciB0aGUgZ2l2ZW4gdGFzayBncm91cHMuIFVubGVzcyBzb21lIHByb2dyYW0gaXMKK3VzaW5nIHRocmVhZHMsIHRoZSB0YXNrIGdyb3VwIElEIG9mIGEgcHJvY2VzcyBpcyB0aGUgc2FtZSBhcyBpdHMgcHJvY2VzcworSUQuIFRoaXMgb3B0aW9uIGNvcnJlc3BvbmRzIHRvIHRoZSBQT1NJWCBub3Rpb24gb2YgYSB0aHJlYWQgZ3JvdXAuIFRoaXMKK2lzIG9ubHkgdXNlZnVsIHdoZW4gdXNpbmcgcGVyLXByb2Nlc3MgcHJvZmlsZSBzZXBhcmF0aW9uLgorLmJyCisuVFAKKy5CSSAidGlkOiJ0aWRsaXN0CitPbmx5IGNvbnNpZGVyIHByb2ZpbGVzIGZvciB0aGUgZ2l2ZW4gdGhyZWFkcy4gV2hlbiB1c2luZyByZWNlbnQgdGhyZWFkCitsaWJyYXJpZXMsIGFsbCB0aHJlYWRzIGluIGEgcHJvY2VzcyBzaGFyZSB0aGUgc2FtZSB0YXNrIGdyb3VwIElELCBidXQKK2hhdmUgZGlmZmVyZW50IHRocmVhZCBJRHMuIFlvdSBjYW4gdXNlIHRoaXMgb3B0aW9uIGluIGNvbWJpbmF0aW9uIHdpdGgKK3RnaWQ6IHRvIHJlc3RyaWN0IHRoZSByZXN1bHRzIHRvIHBhcnRpY3VsYXIgdGhyZWFkcyB3aXRoaW4gYSBwcm9jZXNzLgorVGhpcyBpcyBvbmx5IHVzZWZ1bCB3aGVuIHVzaW5nIHBlci1wcm9jZXNzIHByb2ZpbGUgc2VwYXJhdGlvbi4KKworLlNIIEVOVklST05NRU5UCitObyBzcGVjaWFsIGVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUgcmVjb2duaXNlZCBieSBvcHJvZmlsZS4KKworLlNIIEZJTEVTCisuVFAKKy5JICRIT01FLy5vcHJvZmlsZS8KK0NvbmZpZ3VyYXRpb24gZmlsZXMKKy5UUAorLkkgL3Jvb3QvLm9wcm9maWxlL2RhZW1vbnJjCitDb25maWd1cmF0aW9uIGZpbGUgZm9yIG9wY29udHJvbAorLlRQCisuSSBAcHJlZml4QC9zaGFyZS9vcHJvZmlsZS8KK0V2ZW50IGRlc2NyaXB0aW9uIGZpbGVzIHVzZWQgYnkgT1Byb2ZpbGUuCisuVFAKKy5JIC92YXIvbGliL29wcm9maWxlL3NhbXBsZXMvb3Byb2ZpbGVkLmxvZworVGhlIHVzZXItc3BhY2UgZGFlbW9uIGxvZ2ZpbGUuCisuVFAKKy5JIC92YXIvbGliL29wcm9maWxlL29wZGV2LCAvdmFyL2xpYi9vcHJvZmlsZS9vcGhhc2htYXBkZXYsIC92YXIvbGliL29wcm9maWxlL29wbm90ZWRldgorVGhlIGRldmljZSBmaWxlcyBmb3IgY29tbXVuaWNhdGlvbiB3aXRoIHRoZSBMaW51eCAyLjQga2VybmVsIG1vZHVsZS4gCisuVFAKKy5JIC9kZXYvb3Byb2ZpbGUKK1RoZSBkZXZpY2UgZmlsZXN5c3RlbSBmb3IgY29tbXVuaWNhdGlvbiB3aXRoIHRoZSBMaW51eCAyLjYga2VybmVsIG1vZHVsZS4gCisuVFAKKy5JIC92YXIvbGliL29wcm9maWxlL3NhbXBsZXMvCitUaGUgbG9jYXRpb24gb2YgdGhlIGdlbmVyYXRlZCBzYW1wbGUgZmlsZXMuCisKKy5TSCBWRVJTSU9OCisuVFAKK1RoaXMgbWFuIHBhZ2UgaXMgY3VycmVudCBmb3IgQFBBQ0tBR0VALUBWRVJTSU9OQC4KKworLlNIIFNFRSBBTFNPCisuQlIgQE9QX0RPQ0RJUkAsCisuQlIgb3Bjb250cm9sKDEpLAorLkJSIG9wcmVwb3J0KDEpLAorLkJSIG9wYW5ub3RhdGUoMSksCisuQlIgb3BhcmNoaXZlKDEpLAorLkJSIG9wZ3Byb2YoMSksCisuQlIgZ3Byb2YoMSksCisuQlIgcmVhZHByb2ZpbGUoMSksCisuQlIgIkNQVSB2ZW5kb3IgYXJjaGl0ZWN0dXJlIG1hbnVhbHMiCisKKy5TSCBDT1BZUklHSFQKK29wcm9maWxlIGlzIENvcHlyaWdodCAoQykgMTk5OC0yMDA0IFVuaXZlcnNpdHkgb2YgTWFuY2hlc3RlciwgVUssIEpvaG4gTGV2b24sCithbmQgb3RoZXJzLgorT1Byb2ZpbGUgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBWZXJzaW9uIDIsCitvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorLlNIIEFVVEhPUlMKK0pvaG4gTGV2b24gPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPiBpcyB0aGUgcHJpbWFyeSBhdXRob3IuIFNlZSB0aGUgZG9jdW1lbnRhdGlvbgorZm9yIG90aGVyIGNvbnRyaWJ1dG9ycy4KZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2RvYy9vcHJvZmlsZS5odG1sIGIvb3Byb2ZpbGUtMC45LjcvZG9jL29wcm9maWxlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTI4ZDlmNwotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2RvYy9vcHJvZmlsZS5odG1sCkBAIC0wLDAgKzEsNTM4MCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSI/PgorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgU3RyaWN0Ly9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXN0cmljdC5kdGQiPgorPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPgorICA8aGVhZD4KKyAgICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIiAvPgorICAgIDx0aXRsZT5PUHJvZmlsZSBtYW51YWw8L3RpdGxlPgorICAgIDxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzUuMiIgLz4KKyAgPC9oZWFkPgorICA8Ym9keT4KKyAgICA8ZGl2IGNsYXNzPSJib29rIiB0aXRsZT0iT1Byb2ZpbGUgbWFudWFsIj4KKyAgICAgIDxkaXYgY2xhc3M9InRpdGxlcGFnZSI+CisgICAgICAgIDxkaXY+CisgICAgICAgICAgPGRpdj4KKyAgICAgICAgICAgIDxoMSBjbGFzcz0idGl0bGUiPjxhIGlkPSJvcHJvZmlsZS1ndWlkZSI+PC9hPk9Qcm9maWxlIG1hbnVhbDwvaDE+CisgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgPGRpdj4KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9ImF1dGhvcmdyb3VwIj4KKyAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYXV0aG9yIj4KKyAgICAgICAgICAgICAgICA8aDMgY2xhc3M9ImF1dGhvciI+PHNwYW4gY2xhc3M9ImZpcnN0bmFtZSI+Sm9objwvc3Bhbj4gPHNwYW4gY2xhc3M9InN1cm5hbWUiPkxldm9uPC9zcGFuPjwvaDM+CisgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWZmaWxpYXRpb24iPgorICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWRkcmVzcyI+CisgICAgICAgICAgICAgICAgICAgIDxwPgorICAgICAgICAgICAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJlbWFpbCI+Jmx0OzxhIGNsYXNzPSJlbWFpbCIgaHJlZj0ibWFpbHRvOmxldm9uQG1vdmVtZW50YXJpYW4ub3JnIj5sZXZvbkBtb3ZlbWVudGFyaWFuLm9yZzwvYT4mZ3Q7PC9jb2RlPgorICAgICAgICAgICAgICAgICAgICA8L3A+CisgICAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICA8ZGl2PgorICAgICAgICAgICAgPHAgY2xhc3M9ImNvcHlyaWdodCI+Q29weXJpZ2h0IKkgMjAwMC0yMDA0IFZpY3RvcmlhIFVuaXZlcnNpdHkgb2YgTWFuY2hlc3RlciwgSm9obiBMZXZvbiBhbmQgb3RoZXJzPC9wPgorICAgICAgICAgIDwvZGl2PgorICAgICAgICA8L2Rpdj4KKyAgICAgICAgPGhyIC8+CisgICAgICA8L2Rpdj4KKyAgICAgIDxkaXYgY2xhc3M9InRvYyI+CisgICAgICAgIDxwPgorICAgICAgICAgIDxiPlRhYmxlIG9mIENvbnRlbnRzPC9iPgorICAgICAgICA8L3A+CisgICAgICAgIDxkbD4KKyAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICA8c3BhbiBjbGFzcz0iY2hhcHRlciI+CisgICAgICAgICAgICAgIDxhIGhyZWY9IiNpbnRyb2R1Y3Rpb24iPjEuIEludHJvZHVjdGlvbjwvYT4KKyAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICA8L2R0PgorICAgICAgICAgIDxkZD4KKyAgICAgICAgICAgIDxkbD4KKyAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MSI+CisgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjYXBwbGljYXRpb25zIj4xLiBBcHBsaWNhdGlvbnMgb2YgT1Byb2ZpbGU8L2E+CisgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgICA8ZGQ+CisgICAgICAgICAgICAgICAgPGRsPgorICAgICAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDIiPgorICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNqaXRzdXBwb3J0Ij4xLjEuIFN1cHBvcnQgZm9yIGR5bmFtaWNhbGx5IGNvbXBpbGVkIChKSVQpIGNvZGU8L2E+CisgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICAgICAgPC9kbD4KKyAgICAgICAgICAgICAgPC9kZD4KKyAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MSI+CisgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjcmVxdWlyZW1lbnRzIj4yLiBTeXN0ZW0gcmVxdWlyZW1lbnRzPC9hPgorICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MSI+CisgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjcmVzb3VyY2VzIj4zLiBJbnRlcm5ldCByZXNvdXJjZXM8L2E+CisgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QxIj4KKyAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNpbnN0YWxsIj40LiBJbnN0YWxsYXRpb248L2E+CisgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QxIj4KKyAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiN1bmluc3RhbGwiPjUuIFVuaW5zdGFsbGluZyBPUHJvZmlsZTwvYT4KKyAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICA8L2RsPgorICAgICAgICAgIDwvZGQ+CisgICAgICAgICAgPGR0PgorICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNoYXB0ZXIiPgorICAgICAgICAgICAgICA8YSBocmVmPSIjb3ZlcnZpZXciPjIuIE92ZXJ2aWV3PC9hPgorICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgPGRkPgorICAgICAgICAgICAgPGRsPgorICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QxIj4KKyAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnZXR0aW5nLXN0YXJ0ZWQiPjEuIEdldHRpbmcgc3RhcnRlZDwvYT4KKyAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDEiPgorICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI3Rvb2xzLW92ZXJ2aWV3Ij4yLiBUb29scyBzdW1tYXJ5PC9hPgorICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgIDwvZGw+CisgICAgICAgICAgPC9kZD4KKyAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICA8c3BhbiBjbGFzcz0iY2hhcHRlciI+CisgICAgICAgICAgICAgIDxhIGhyZWY9IiNjb250cm9sbGluZyI+My4gQ29udHJvbGxpbmcgdGhlIHByb2ZpbGVyPC9hPgorICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgPGRkPgorICAgICAgICAgICAgPGRsPgorICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QxIj4KKyAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNjb250cm9sbGluZy1kYWVtb24iPjEuIFVzaW5nIDxzcGFuIGNsYXNzPSJjb21tYW5kIj48c3Ryb25nPm9wY29udHJvbDwvc3Ryb25nPjwvc3Bhbj48L2E+CisgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgICA8ZGQ+CisgICAgICAgICAgICAgICAgPGRsPgorICAgICAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDIiPgorICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNvcGNvbnRyb2xleGFtcGxlcyI+MS4xLiBFeGFtcGxlczwvYT4KKyAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QyIj4KKyAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZXZlbnRzcGVjIj4xLjIuIFNwZWNpZnlpbmcgcGVyZm9ybWFuY2UgY291bnRlciBldmVudHM8L2E+CisgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICAgICAgPC9kbD4KKyAgICAgICAgICAgICAgPC9kZD4KKyAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MSI+CisgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjc2V0dXAtaml0Ij4yLiBTZXR0aW5nIHVwIHRoZSBKSVQgcHJvZmlsaW5nIGZlYXR1cmU8L2E+CisgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgICA8ZGQ+CisgICAgICAgICAgICAgICAgPGRsPgorICAgICAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDIiPgorICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNzZXR1cC1qaXQtanZtIj4yLjEuIEpWTSBpbnN0cnVtZW50YXRpb248L2E+CisgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICAgICAgPC9kbD4KKyAgICAgICAgICAgICAgPC9kZD4KKyAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MSI+CisgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjb3Byb2ZpbGUtZ3VpIj4zLiBVc2luZyA8c3BhbiBjbGFzcz0iY29tbWFuZCI+PHN0cm9uZz5vcHJvZl9zdGFydDwvc3Ryb25nPjwvc3Bhbj48L2E+CisgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QxIj4KKyAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNkZXRhaWxlZC1wYXJhbWV0ZXJzIj40LiBDb25maWd1cmF0aW9uIGRldGFpbHM8L2E+CisgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgICA8ZGQ+CisgICAgICAgICAgICAgICAgPGRsPgorICAgICAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDIiPgorICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNoYXJkd2FyZS1jb3VudGVycyI+NC4xLiBIYXJkd2FyZSBwZXJmb3JtYW5jZSBjb3VudGVyczwvYT4KKyAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QyIj4KKyAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjcnRjIj40LjIuIE9Qcm9maWxlIGluIFJUQyBtb2RlPC9hPgorICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDIiPgorICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiN0aW1lciI+NC4zLiBPUHJvZmlsZSBpbiB0aW1lciBpbnRlcnJ1cHQgbW9kZTwvYT4KKyAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QyIj4KKyAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjcDQiPjQuNC4gUGVudGl1bSA0IHN1cHBvcnQ8L2E+CisgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MiI+CisgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2lhNjQiPjQuNS4gSW50ZWwgSXRhbml1bSAyIHN1cHBvcnQ8L2E+CisgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MiI+CisgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI3BwYzY0Ij40LjYuIFBvd2VyUEM2NCBzdXBwb3J0PC9hPgorICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDIiPgorICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNjZWxsLWJlIj40LjcuIENlbGwgQnJvYWRiYW5kIEVuZ2luZSBzdXBwb3J0PC9hPgorICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDIiPgorICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNhbWQtaWJzLXN1cHBvcnQiPjQuOC4gQU1ENjQgKHg4Nl82NCkgSW5zdHJ1Y3Rpb24tQmFzZWQgU2FtcGxpbmcgKElCUykgc3VwcG9ydDwvYT4KKyAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QyIj4KKyAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjbWlzdXNlIj40LjkuIERhbmdlcm91cyBjb3VudGVyIHNldHRpbmdzPC9hPgorICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgICAgIDwvZGw+CisgICAgICAgICAgICAgIDwvZGQ+CisgICAgICAgICAgICA8L2RsPgorICAgICAgICAgIDwvZGQ+CisgICAgICAgICAgPGR0PgorICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNoYXB0ZXIiPgorICAgICAgICAgICAgICA8YSBocmVmPSIjcmVzdWx0cyI+NC4gT2J0YWluaW5nIHJlc3VsdHM8L2E+CisgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgPC9kdD4KKyAgICAgICAgICA8ZGQ+CisgICAgICAgICAgICA8ZGw+CisgICAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDEiPgorICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI3Byb2ZpbGUtc3BlYyI+MS4gUHJvZmlsZSBzcGVjaWZpY2F0aW9uczwvYT4KKyAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICAgIDxkZD4KKyAgICAgICAgICAgICAgICA8ZGw+CisgICAgICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MiI+CisgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI3Byb2ZpbGUtc3BlYy1leGFtcGxlcyI+MS4xLiBFeGFtcGxlczwvYT4KKyAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QyIj4KKyAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjcHJvZmlsZS1zcGVjLWRldGFpbHMiPjEuMi4gUHJvZmlsZSBzcGVjaWZpY2F0aW9uIHBhcmFtZXRlcnM8L2E+CisgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MiI+CisgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2xvY2F0aW5nLWFuZC1tYW5hZ2luZy1iaW5hcnktaW1hZ2VzIj4xLjMuIExvY2F0aW5nIGFuZCBtYW5hZ2luZyBiaW5hcnkgaW1hZ2VzPC9hPgorICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDIiPgorICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNuby1yZXN1bHRzIj4xLjQuIFdoYXQgdG8gZG8gd2hlbiB5b3UgZG9uJ3QgZ2V0IGFueSByZXN1bHRzPC9hPgorICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgICAgIDwvZGw+CisgICAgICAgICAgICAgIDwvZGQ+CisgICAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDEiPgorICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI29wcmVwb3J0Ij4yLiBJbWFnZSBzdW1tYXJpZXMgYW5kIHN5bWJvbCBzdW1tYXJpZXMgKDxzcGFuIGNsYXNzPSJjb21tYW5kIj48c3Ryb25nPm9wcmVwb3J0PC9zdHJvbmc+PC9zcGFuPik8L2E+CisgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgICA8ZGQ+CisgICAgICAgICAgICAgICAgPGRsPgorICAgICAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDIiPgorICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNvcHJlcG9ydC1tZXJnaW5nIj4yLjEuIE1lcmdpbmcgc2VwYXJhdGUgcHJvZmlsZXM8L2E+CisgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MiI+CisgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI29wcmVwb3J0LWNvbXBhcmlzb24iPjIuMi4gU2lkZS1ieS1zaWRlIG11bHRpcGxlIHJlc3VsdHM8L2E+CisgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MiI+CisgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI29wcmVwb3J0LWNhbGxncmFwaCI+Mi4zLiBDYWxsZ3JhcGggb3V0cHV0PC9hPgorICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDIiPgorICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNvcHJlcG9ydC1kaWZmIj4yLjQuIERpZmZlcmVudGlhbCBwcm9maWxlcyB3aXRoIDxzcGFuIGNsYXNzPSJjb21tYW5kIj48c3Ryb25nPm9wcmVwb3J0PC9zdHJvbmc+PC9zcGFuPjwvYT4KKyAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QyIj4KKyAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjb3ByZXBvcnQtYW5vbiI+Mi41LiBBbm9ueW1vdXMgZXhlY3V0YWJsZSBtYXBwaW5nczwvYT4KKyAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QyIj4KKyAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjb3ByZXBvcnQteG1sIj4yLjYuIFhNTCBmb3JtYXR0ZWQgb3V0cHV0PC9hPgorICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDIiPgorICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNvcHJlcG9ydC1vcHRpb25zIj4yLjcuIE9wdGlvbnMgZm9yIDxzcGFuIGNsYXNzPSJjb21tYW5kIj48c3Ryb25nPm9wcmVwb3J0PC9zdHJvbmc+PC9zcGFuPjwvYT4KKyAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgICAgICA8L2RsPgorICAgICAgICAgICAgICA8L2RkPgorICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QxIj4KKyAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNvcGFubm90YXRlIj4zLiBPdXRwdXR0aW5nIGFubm90YXRlZCBzb3VyY2UgKDxzcGFuIGNsYXNzPSJjb21tYW5kIj48c3Ryb25nPm9wYW5ub3RhdGU8L3N0cm9uZz48L3NwYW4+KTwvYT4KKyAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICAgIDxkZD4KKyAgICAgICAgICAgICAgICA8ZGw+CisgICAgICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MiI+CisgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI29wYW5ub3RhdGUtZmluZGluZy1zb3VyY2UiPjMuMS4gTG9jYXRpbmcgc291cmNlIGZpbGVzPC9hPgorICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDIiPgorICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNvcGFubm90YXRlLWRldGFpbHMiPjMuMi4gVXNhZ2Ugb2YgPHNwYW4gY2xhc3M9ImNvbW1hbmQiPjxzdHJvbmc+b3Bhbm5vdGF0ZTwvc3Ryb25nPjwvc3Bhbj48L2E+CisgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICAgICAgPC9kbD4KKyAgICAgICAgICAgICAgPC9kZD4KKyAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MSI+CisgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ2V0dGluZy1qaXQtcmVwb3J0cyI+NC4gT1Byb2ZpbGUgcmVzdWx0cyB3aXRoIEpJVCBzYW1wbGVzPC9hPgorICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MSI+CisgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjb3BncHJvZiI+NS4gPHNwYW4gY2xhc3M9ImNvbW1hbmQiPjxzdHJvbmc+Z3Byb2Y8L3N0cm9uZz48L3NwYW4+LWNvbXBhdGlibGUgb3V0cHV0ICg8c3BhbiBjbGFzcz0iY29tbWFuZCI+PHN0cm9uZz5vcGdwcm9mPC9zdHJvbmc+PC9zcGFuPik8L2E+CisgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgICA8ZGQ+CisgICAgICAgICAgICAgICAgPGRsPgorICAgICAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDIiPgorICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNvcGdwcm9mLWRldGFpbHMiPjUuMS4gVXNhZ2Ugb2YgPHNwYW4gY2xhc3M9ImNvbW1hbmQiPjxzdHJvbmc+b3BncHJvZjwvc3Ryb25nPjwvc3Bhbj48L2E+CisgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICAgICAgPC9kbD4KKyAgICAgICAgICAgICAgPC9kZD4KKyAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MSI+CisgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjb3BhcmNoaXZlIj42LiBBcmNoaXZpbmcgbWVhc3VyZW1lbnRzICg8c3BhbiBjbGFzcz0iY29tbWFuZCI+PHN0cm9uZz5vcGFyY2hpdmU8L3N0cm9uZz48L3NwYW4+KTwvYT4KKyAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICAgIDxkZD4KKyAgICAgICAgICAgICAgICA8ZGw+CisgICAgICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MiI+CisgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI29wYXJjaGl2ZS1kZXRhaWxzIj42LjEuIFVzYWdlIG9mIDxzcGFuIGNsYXNzPSJjb21tYW5kIj48c3Ryb25nPm9wYXJjaGl2ZTwvc3Ryb25nPjwvc3Bhbj48L2E+CisgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICAgICAgPC9kbD4KKyAgICAgICAgICAgICAgPC9kZD4KKyAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MSI+CisgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjb3BpbXBvcnQiPjcuIENvbnZlcnRpbmcgc2FtcGxlIGRhdGFiYXNlIGZpbGVzICg8c3BhbiBjbGFzcz0iY29tbWFuZCI+PHN0cm9uZz5vcGltcG9ydDwvc3Ryb25nPjwvc3Bhbj4pPC9hPgorICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgICAgPGRkPgorICAgICAgICAgICAgICAgIDxkbD4KKyAgICAgICAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QyIj4KKyAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjb3BpbXBvcnQtZGV0YWlscyI+Ny4xLiBVc2FnZSBvZiA8c3BhbiBjbGFzcz0iY29tbWFuZCI+PHN0cm9uZz5vcGltcG9ydDwvc3Ryb25nPjwvc3Bhbj48L2E+CisgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICAgICAgPC9kbD4KKyAgICAgICAgICAgICAgPC9kZD4KKyAgICAgICAgICAgIDwvZGw+CisgICAgICAgICAgPC9kZD4KKyAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICA8c3BhbiBjbGFzcz0iY2hhcHRlciI+CisgICAgICAgICAgICAgIDxhIGhyZWY9IiNpbnRlcnByZXRpbmciPjUuIEludGVycHJldGluZyBwcm9maWxpbmcgcmVzdWx0czwvYT4KKyAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICA8L2R0PgorICAgICAgICAgIDxkZD4KKyAgICAgICAgICAgIDxkbD4KKyAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MSI+CisgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjaXJxLWxhdGVuY3kiPjEuIFByb2ZpbGluZyBpbnRlcnJ1cHQgbGF0ZW5jeTwvYT4KKyAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDEiPgorICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2tlcm5lbC1wcm9maWxpbmciPjIuIEtlcm5lbCBwcm9maWxpbmc8L2E+CisgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgICA8ZGQ+CisgICAgICAgICAgICAgICAgPGRsPgorICAgICAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDIiPgorICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNpcnEtbWFza2luZyI+Mi4xLiBJbnRlcnJ1cHQgbWFza2luZzwvYT4KKyAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QyIj4KKyAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjaWRsZSI+Mi4yLiBJZGxlIHRpbWU8L2E+CisgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MiI+CisgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2tlcm5lbC1tb2R1bGVzIj4yLjMuIFByb2ZpbGluZyBrZXJuZWwgbW9kdWxlczwvYT4KKyAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgICAgICA8L2RsPgorICAgICAgICAgICAgICA8L2RkPgorICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QxIj4KKyAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNpbnRlcnByZXRpbmctY2FsbGdyYXBoIj4zLiBJbnRlcnByZXRpbmcgY2FsbC1ncmFwaCBwcm9maWxlczwvYT4KKyAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDEiPgorICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2RlYnVnLWluZm8iPjQuIEluYWNjdXJhY2llcyBpbiBhbm5vdGF0ZWQgc291cmNlPC9hPgorICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgICAgPGRkPgorICAgICAgICAgICAgICAgIDxkbD4KKyAgICAgICAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QyIj4KKyAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZWZmZWN0LW9mLW9wdGltaXphdGlvbnMiPjQuMS4gU2lkZSBlZmZlY3RzIG9mIG9wdGltaXphdGlvbnM8L2E+CisgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MiI+CisgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI3Byb2xvZ3VlcyI+NC4yLiBQcm9sb2d1ZXMgYW5kIGVwaWxvZ3VlczwvYT4KKyAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QyIj4KKyAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjaW5saW5lZC1mdW5jdGlvbiI+NC4zLiBJbmxpbmVkIGZ1bmN0aW9uczwvYT4KKyAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QyIj4KKyAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjd3JvbmctbGluZW5yLWluZm8iPjQuNC4gSW5hY2N1cmFjeSBpbiBsaW5lIG51bWJlciBpbmZvcm1hdGlvbjwvYT4KKyAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgICAgICA8L2RsPgorICAgICAgICAgICAgICA8L2RkPgorICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QxIj4KKyAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNzeW1ib2wtd2l0aG91dC1kZWJ1Zy1pbmZvIj41LiBBc3NlbWJseSBmdW5jdGlvbnM8L2E+CisgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QxIj4KKyAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNvdmVybGFwcGluZy1zeW1ib2xzIj42LiBPdmVybGFwcGluZyBzeW1ib2xzIGluIEpJVGVkIGNvZGU8L2E+CisgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QxIj4KKyAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNoaWRkZW4tY29zdCI+Ny4gT3RoZXIgZGlzY3JlcGFuY2llczwvYT4KKyAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICA8L2RsPgorICAgICAgICAgIDwvZGQ+CisgICAgICAgICAgPGR0PgorICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNoYXB0ZXIiPgorICAgICAgICAgICAgICA8YSBocmVmPSIjYWNrIj42LiBBY2tub3dsZWRnbWVudHM8L2E+CisgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgPC9kdD4KKyAgICAgICAgPC9kbD4KKyAgICAgIDwvZGl2PgorICAgICAgPGRpdiBjbGFzcz0iY2hhcHRlciIgdGl0bGU9IkNoYXB0ZXKgMS6gSW50cm9kdWN0aW9uIj4KKyAgICAgICAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KKyAgICAgICAgICA8ZGl2PgorICAgICAgICAgICAgPGRpdj4KKyAgICAgICAgICAgICAgPGgyIGNsYXNzPSJ0aXRsZSI+PGEgaWQ9ImludHJvZHVjdGlvbiI+PC9hPkNoYXB0ZXKgMS6gSW50cm9kdWN0aW9uPC9oMj4KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgIDwvZGl2PgorICAgICAgICA8L2Rpdj4KKyAgICAgICAgPGRpdiBjbGFzcz0idG9jIj4KKyAgICAgICAgICA8cD4KKyAgICAgICAgICAgIDxiPlRhYmxlIG9mIENvbnRlbnRzPC9iPgorICAgICAgICAgIDwvcD4KKyAgICAgICAgICA8ZGw+CisgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MSI+CisgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2FwcGxpY2F0aW9ucyI+MS4gQXBwbGljYXRpb25zIG9mIE9Qcm9maWxlPC9hPgorICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgPGRkPgorICAgICAgICAgICAgICA8ZGw+CisgICAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QyIj4KKyAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2ppdHN1cHBvcnQiPjEuMS4gU3VwcG9ydCBmb3IgZHluYW1pY2FsbHkgY29tcGlsZWQgKEpJVCkgY29kZTwvYT4KKyAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgICA8L2RsPgorICAgICAgICAgICAgPC9kZD4KKyAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QxIj4KKyAgICAgICAgICAgICAgICA8YSBocmVmPSIjcmVxdWlyZW1lbnRzIj4yLiBTeXN0ZW0gcmVxdWlyZW1lbnRzPC9hPgorICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDEiPgorICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNyZXNvdXJjZXMiPjMuIEludGVybmV0IHJlc291cmNlczwvYT4KKyAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QxIj4KKyAgICAgICAgICAgICAgICA8YSBocmVmPSIjaW5zdGFsbCI+NC4gSW5zdGFsbGF0aW9uPC9hPgorICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDEiPgorICAgICAgICAgICAgICAgIDxhIGhyZWY9IiN1bmluc3RhbGwiPjUuIFVuaW5zdGFsbGluZyBPUHJvZmlsZTwvYT4KKyAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICA8L2RsPgorICAgICAgICA8L2Rpdj4KKyAgICAgICAgPHA+CitUaGlzIG1hbnVhbCBhcHBsaWVzIHRvIE9Qcm9maWxlIHZlcnNpb24gMC45LjctcmMyLgorT1Byb2ZpbGUgaXMgYSBwcm9maWxpbmcgc3lzdGVtIGZvciBMaW51eCAyLjIvMi40LzIuNiBzeXN0ZW1zIG9uIGEgbnVtYmVyIG9mIGFyY2hpdGVjdHVyZXMuIEl0IGlzIGNhcGFibGUgb2YgcHJvZmlsaW5nCithbGwgcGFydHMgb2YgYSBydW5uaW5nIHN5c3RlbSwgZnJvbSB0aGUga2VybmVsIChpbmNsdWRpbmcgbW9kdWxlcyBhbmQgaW50ZXJydXB0IGhhbmRsZXJzKSB0byBzaGFyZWQgbGlicmFyaWVzCit0byBiaW5hcmllcy4gSXQgcnVucyB0cmFuc3BhcmVudGx5IGluIHRoZSBiYWNrZ3JvdW5kIGNvbGxlY3RpbmcgaW5mb3JtYXRpb24gYXQgYSBsb3cgb3ZlcmhlYWQuIFRoZXNlCitmZWF0dXJlcyBtYWtlIGl0IGlkZWFsIGZvciBwcm9maWxpbmcgZW50aXJlIHN5c3RlbXMgdG8gZGV0ZXJtaW5lIGJvdHRsZSBuZWNrcyBpbiByZWFsLXdvcmxkIHN5c3RlbXMuCis8L3A+CisgICAgICAgIDxwPgorTWFueSBDUFVzIHByb3ZpZGUgInBlcmZvcm1hbmNlIGNvdW50ZXJzIiwgaGFyZHdhcmUgcmVnaXN0ZXJzIHRoYXQgY2FuIGNvdW50ICJldmVudHMiOyBmb3IgZXhhbXBsZSwKK2NhY2hlIG1pc3Nlcywgb3IgQ1BVIGN5Y2xlcy4gT1Byb2ZpbGUgcHJvdmlkZXMgcHJvZmlsZXMgb2YgY29kZSBiYXNlZCBvbiB0aGUgbnVtYmVyIG9mIHRoZXNlIG9jY3VycmluZyBldmVudHM6CityZXBlYXRlZGx5LCBldmVyeSB0aW1lIGEgY2VydGFpbiAoY29uZmlndXJhYmxlKSBudW1iZXIgb2YgZXZlbnRzIGhhcyBvY2N1cnJlZCwgdGhlIFBDIHZhbHVlIGlzIHJlY29yZGVkLgorVGhpcyBpbmZvcm1hdGlvbiBpcyBhZ2dyZWdhdGVkIGludG8gcHJvZmlsZXMgZm9yIGVhY2ggYmluYXJ5IGltYWdlLjwvcD4KKyAgICAgICAgPHA+CitTb21lIGhhcmR3YXJlIHNldHVwcyBkbyBub3QgYWxsb3cgT1Byb2ZpbGUgdG8gdXNlIHBlcmZvcm1hbmNlIGNvdW50ZXJzOiBpbiB0aGVzZSBjYXNlcywgbm8KK2V2ZW50cyBhcmUgYXZhaWxhYmxlLCBhbmQgT1Byb2ZpbGUgb3BlcmF0ZXMgaW4gdGltZXIvUlRDIG1vZGUsIGFzIGRlc2NyaWJlZCBpbiBsYXRlciBjaGFwdGVycy4KKzwvcD4KKyAgICAgICAgPGRpdiBjbGFzcz0ic2VjdDEiIHRpdGxlPSIxLqBBcHBsaWNhdGlvbnMgb2YgT1Byb2ZpbGUiPgorICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlcGFnZSI+CisgICAgICAgICAgICA8ZGl2PgorICAgICAgICAgICAgICA8ZGl2PgorICAgICAgICAgICAgICAgIDxoMiBjbGFzcz0idGl0bGUiIHN0eWxlPSJjbGVhcjogYm90aCI+PGEgaWQ9ImFwcGxpY2F0aW9ucyI+PC9hPjEuoEFwcGxpY2F0aW9ucyBvZiBPUHJvZmlsZTwvaDI+CisgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgPHA+CitPUHJvZmlsZSBpcyB1c2VmdWwgaW4gYSBudW1iZXIgb2Ygc2l0dWF0aW9ucy4gWW91IG1pZ2h0IHdhbnQgdG8gdXNlIE9Qcm9maWxlIHdoZW4geW91IDoKKzwvcD4KKyAgICAgICAgICA8ZGl2IGNsYXNzPSJpdGVtaXplZGxpc3QiPgorICAgICAgICAgICAgPHVsIGNsYXNzPSJpdGVtaXplZGxpc3QiIHR5cGU9ImRpc2MiPgorICAgICAgICAgICAgICA8bGkgY2xhc3M9Imxpc3RpdGVtIj4KKyAgICAgICAgICAgICAgICA8cD5uZWVkIGxvdyBvdmVyaGVhZDwvcD4KKyAgICAgICAgICAgICAgPC9saT4KKyAgICAgICAgICAgICAgPGxpIGNsYXNzPSJsaXN0aXRlbSI+CisgICAgICAgICAgICAgICAgPHA+Y2Fubm90IHVzZSBoaWdobHkgaW50cnVzaXZlIHByb2ZpbGluZyBtZXRob2RzPC9wPgorICAgICAgICAgICAgICA8L2xpPgorICAgICAgICAgICAgICA8bGkgY2xhc3M9Imxpc3RpdGVtIj4KKyAgICAgICAgICAgICAgICA8cD5uZWVkIHRvIHByb2ZpbGUgaW50ZXJydXB0IGhhbmRsZXJzPC9wPgorICAgICAgICAgICAgICA8L2xpPgorICAgICAgICAgICAgICA8bGkgY2xhc3M9Imxpc3RpdGVtIj4KKyAgICAgICAgICAgICAgICA8cD5uZWVkIHRvIHByb2ZpbGUgYW4gYXBwbGljYXRpb24gYW5kIGl0cyBzaGFyZWQgbGlicmFyaWVzPC9wPgorICAgICAgICAgICAgICA8L2xpPgorICAgICAgICAgICAgICA8bGkgY2xhc3M9Imxpc3RpdGVtIj4KKyAgICAgICAgICAgICAgICA8cD5uZWVkIHRvIHByb2ZpbGUgZHluYW1pY2FsbHkgY29tcGlsZWQgY29kZSBvZiBzdXBwb3J0ZWQgdmlydHVhbCBtYWNoaW5lcyAoc2VlIDxhIGNsYXNzPSJ4cmVmIiBocmVmPSIjaml0c3VwcG9ydCIgdGl0bGU9IjEuMS6gU3VwcG9ydCBmb3IgZHluYW1pY2FsbHkgY29tcGlsZWQgKEpJVCkgY29kZSI+U2VjdGlvbqAxLjEsICYjODIyMDtTdXBwb3J0IGZvciBkeW5hbWljYWxseSBjb21waWxlZCAoSklUKSBjb2RlJiM4MjIxOzwvYT4pPC9wPgorICAgICAgICAgICAgICA8L2xpPgorICAgICAgICAgICAgICA8bGkgY2xhc3M9Imxpc3RpdGVtIj4KKyAgICAgICAgICAgICAgICA8cD5uZWVkIHRvIGNhcHR1cmUgdGhlIHBlcmZvcm1hbmNlIGJlaGF2aW91ciBvZiBlbnRpcmUgc3lzdGVtPC9wPgorICAgICAgICAgICAgICA8L2xpPgorICAgICAgICAgICAgICA8bGkgY2xhc3M9Imxpc3RpdGVtIj4KKyAgICAgICAgICAgICAgICA8cD53YW50IHRvIGV4YW1pbmUgaGFyZHdhcmUgZWZmZWN0cyBzdWNoIGFzIGNhY2hlIG1pc3NlczwvcD4KKyAgICAgICAgICAgICAgPC9saT4KKyAgICAgICAgICAgICAgPGxpIGNsYXNzPSJsaXN0aXRlbSI+CisgICAgICAgICAgICAgICAgPHA+d2FudCBkZXRhaWxlZCBzb3VyY2UgYW5ub3RhdGlvbjwvcD4KKyAgICAgICAgICAgICAgPC9saT4KKyAgICAgICAgICAgICAgPGxpIGNsYXNzPSJsaXN0aXRlbSI+CisgICAgICAgICAgICAgICAgPHA+d2FudCBpbnN0cnVjdGlvbi1sZXZlbCBwcm9maWxlczwvcD4KKyAgICAgICAgICAgICAgPC9saT4KKyAgICAgICAgICAgICAgPGxpIGNsYXNzPSJsaXN0aXRlbSI+CisgICAgICAgICAgICAgICAgPHA+d2FudCBjYWxsLWdyYXBoIHByb2ZpbGVzPC9wPgorICAgICAgICAgICAgICA8L2xpPgorICAgICAgICAgICAgPC91bD4KKyAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICA8cD4KK09Qcm9maWxlIGlzIG5vdCBhIHBhbmFjZWEuIE9Qcm9maWxlIG1pZ2h0IG5vdCBiZSBhIGNvbXBsZXRlIHNvbHV0aW9uIHdoZW4geW91IDoKKzwvcD4KKyAgICAgICAgICA8ZGl2IGNsYXNzPSJpdGVtaXplZGxpc3QiPgorICAgICAgICAgICAgPHVsIGNsYXNzPSJpdGVtaXplZGxpc3QiIHR5cGU9ImRpc2MiPgorICAgICAgICAgICAgICA8bGkgY2xhc3M9Imxpc3RpdGVtIj4KKyAgICAgICAgICAgICAgICA8cD5yZXF1aXJlIGNhbGwgZ3JhcGggcHJvZmlsZXMgb24gcGxhdGZvcm1zIG90aGVyIHRoYW4gMi42L3g4NjwvcD4KKyAgICAgICAgICAgICAgPC9saT4KKyAgICAgICAgICAgICAgPGxpIGNsYXNzPSJsaXN0aXRlbSI+CisgICAgICAgICAgICAgICAgPHA+ZG9uJ3QgaGF2ZSByb290IHBlcm1pc3Npb25zPC9wPgorICAgICAgICAgICAgICA8L2xpPgorICAgICAgICAgICAgICA8bGkgY2xhc3M9Imxpc3RpdGVtIj4KKyAgICAgICAgICAgICAgICA8cD5yZXF1aXJlIDEwMCUgaW5zdHJ1Y3Rpb24tYWNjdXJhdGUgcHJvZmlsZXM8L3A+CisgICAgICAgICAgICAgIDwvbGk+CisgICAgICAgICAgICAgIDxsaSBjbGFzcz0ibGlzdGl0ZW0iPgorICAgICAgICAgICAgICAgIDxwPm5lZWQgZnVuY3Rpb24gY2FsbCBjb3VudHMgb3IgYW4gaW50ZXJzdGl0aWFsIHByb2ZpbGluZyBBUEk8L3A+CisgICAgICAgICAgICAgIDwvbGk+CisgICAgICAgICAgICAgIDxsaSBjbGFzcz0ibGlzdGl0ZW0iPgorICAgICAgICAgICAgICAgIDxwPmNhbm5vdCB0b2xlcmF0ZSBhbnkgZGlzdHVyYmFuY2UgdG8gdGhlIHN5c3RlbSB3aGF0c29ldmVyPC9wPgorICAgICAgICAgICAgICA8L2xpPgorICAgICAgICAgICAgICA8bGkgY2xhc3M9Imxpc3RpdGVtIj4KKyAgICAgICAgICAgICAgICA8cD5uZWVkIHRvIHByb2ZpbGUgaW50ZXJwcmV0ZWQgb3IgZHluYW1pY2FsbHkgY29tcGlsZWQgY29kZSBvZiBub24tc3VwcG9ydGVkIHZpcnR1YWwgbWFjaGluZXM8L3A+CisgICAgICAgICAgICAgIDwvbGk+CisgICAgICAgICAgICA8L3VsPgorICAgICAgICAgIDwvZGl2PgorICAgICAgICAgIDxkaXYgY2xhc3M9InNlY3QyIiB0aXRsZT0iMS4xLqBTdXBwb3J0IGZvciBkeW5hbWljYWxseSBjb21waWxlZCAoSklUKSBjb2RlIj4KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlcGFnZSI+CisgICAgICAgICAgICAgIDxkaXY+CisgICAgICAgICAgICAgICAgPGRpdj4KKyAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz0idGl0bGUiPjxhIGlkPSJqaXRzdXBwb3J0Ij48L2E+MS4xLqBTdXBwb3J0IGZvciBkeW5hbWljYWxseSBjb21waWxlZCAoSklUKSBjb2RlPC9oMz4KKyAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIDxwPgorT2xkZXIgdmVyc2lvbnMgb2YgT1Byb2ZpbGUgd2VyZSBub3QgY2FwYWJsZSBvZiBhdHRyaWJ1dGluZyBzYW1wbGVzIHRvIHN5bWJvbHMgZnJvbSBkeW5hbWljYWxseQorY29tcGlsZWQgY29kZSwgaS5lLiAianVzdC1pbi10aW1lIChKSVQpIGNvZGUiLiBUeXBpY2FsIEpJVCBjb21waWxlcnMgbG9hZCB0aGUgSklUIGNvZGUgaW50bworYW5vbnltb3VzIG1lbW9yeSByZWdpb25zLiBPUHJvZmlsZSByZXBvcnRlZCB0aGUgc2FtcGxlcyBmcm9tIHN1Y2ggY29kZSwgYnV0IHRoZSBhdHRyaWJ1dGlvbgorcHJvdmlkZWQgd2FzIHNpbXBseToKKyAgICAgICAgPC9wPgorICAgICAgICAgICAgPHRhYmxlIHhtbG5zPSIiIGJvcmRlcj0iMCIgc3R5bGU9ImJhY2tncm91bmQ6ICNFMEUwRTA7IiB3aWR0aD0iOTAlIj4KKyAgICAgICAgICAgICAgPHRyPgorICAgICAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgICAgIDxwcmUgY2xhc3M9InNjcmVlbiI+ImFub246ICZsdDt0Z2lkJmd0OyZsdDthZGRyZXNzIHJhbmdlJmd0OyIgPC9wcmU+CisgICAgICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgICAgPC90cj4KKyAgICAgICAgICAgIDwvdGFibGU+CisgICAgICAgICAgICA8cD4KK0R1ZSB0byB0aGlzIGxpbWl0YXRpb24sIGl0IHdhc24ndCBwb3NzaWJsZSB0byBwcm9maWxlIGFwcGxpY2F0aW9ucyBleGVjdXRlZCBieSB2aXJ0dWFsIG1hY2hpbmVzIChWTXMpCitsaWtlIHRoZSBKYXZhIFZpcnR1YWwgTWFjaGluZS4gT1Byb2ZpbGUgbm93IGNvbnRhaW5zIGFuIGluZnJhc3RydWN0dXJlIHRvIHN1cHBvcnQgSklUZWQgY29kZS4KK0EgZGV2ZWxvcG1lbnQgbGlicmFyeSBpcyBwcm92aWRlZCB0byBhbGxvdyBkZXZlbG9wZXJzCit0byBhZGQgc3VwcG9ydCBmb3IgYW55IFZNIHRoYXQgcHJvZHVjZXMgZHluYW1pY2FsbHkgY29tcGlsZWQgY29kZSAoc2VlIHRoZSA8c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5PUHJvZmlsZSBKSVQgYWdlbnQKK2RldmVsb3BlciBndWlkZTwvZW0+PC9zcGFuPikuCitJbiBhZGRpdGlvbiwgYnVpbHQtaW4gc3VwcG9ydCBpcyBpbmNsdWRlZCBmb3IgdGhlIGZvbGxvd2luZzo8L3A+CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpdGVtaXplZGxpc3QiPgorICAgICAgICAgICAgICA8dWwgY2xhc3M9Iml0ZW1pemVkbGlzdCIgdHlwZT0iZGlzYyI+CisgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJsaXN0aXRlbSI+SlZNVEkgYWdlbnQgbGlicmFyeSBmb3IgSmF2YSAoMS41IGFuZCBoaWdoZXIpPC9saT4KKyAgICAgICAgICAgICAgICA8bGkgY2xhc3M9Imxpc3RpdGVtIj5KVk1QSSBhZ2VudCBsaWJyYXJ5IGZvciBKYXZhICgxLjUgYW5kIGxvd2VyKTwvbGk+CisgICAgICAgICAgICAgIDwvdWw+CisgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIDxwPgorRm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byB1c2UgT1Byb2ZpbGUncyBKSVQgc3VwcG9ydCwgc2VlIDxhIGNsYXNzPSJ4cmVmIiBocmVmPSIjc2V0dXAtaml0IiB0aXRsZT0iMi6gU2V0dGluZyB1cCB0aGUgSklUIHByb2ZpbGluZyBmZWF0dXJlIj5TZWN0aW9uoDIsICYjODIyMDtTZXR0aW5nIHVwIHRoZSBKSVQgcHJvZmlsaW5nIGZlYXR1cmUmIzgyMjE7PC9hPi4KKzwvcD4KKyAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgPC9kaXY+CisgICAgICAgIDxkaXYgY2xhc3M9InNlY3QxIiB0aXRsZT0iMi6gU3lzdGVtIHJlcXVpcmVtZW50cyI+CisgICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KKyAgICAgICAgICAgIDxkaXY+CisgICAgICAgICAgICAgIDxkaXY+CisgICAgICAgICAgICAgICAgPGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj48YSBpZD0icmVxdWlyZW1lbnRzIj48L2E+Mi6gU3lzdGVtIHJlcXVpcmVtZW50czwvaDI+CisgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KKyAgICAgICAgICAgIDxkbD4KKyAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXJtIj5MaW51eCBrZXJuZWwgMi4yLzIuNC8yLjY8L3NwYW4+CisgICAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICAgIDxkZD4KKyAgICAgICAgICAgICAgICA8cD4KKwkJCU9Qcm9maWxlIHVzZXMgYSBrZXJuZWwgbW9kdWxlIHRoYXQgY2FuIGJlIGNvbXBpbGVkIGZvcgorCQkJMi4yLjExIG9yIGxhdGVyIGFuZCAyLjQuIDIuNC4xMCBvciBhYm92ZSBpcyByZXF1aXJlZCBpZiB5b3UgdXNlIHRoZSAKKwkJCWJvb3QtdGltZSBrZXJuZWwgb3B0aW9uIDxjb2RlIGNsYXNzPSJvcHRpb24iPm5vc21wPC9jb2RlPi4gIDIuNiBrZXJuZWxzIGFyZSBzdXBwb3J0ZWQgd2l0aCB0aGUgaW4ta2VybmVsCisJCQlPUHJvZmlsZSBkcml2ZXIuIE5vdGUgdGhhdCBvbmx5IDMyLWJpdCB4ODYgYW5kIElBNjQgYXJlIHN1cHBvcnRlZCBvbiAyLjIvMi40IGtlcm5lbHMuCisJCQk8L3A+CisgICAgICAgICAgICAgICAgPHA+CisJCQkyLjYga2VybmVscyBhcmUgc3Ryb25nbHkgcmVjb21tZW5kZWQuIFVuZGVyIDIuNCwgT1Byb2ZpbGUgbWF5IGNhdXNlIHN5c3RlbSBjcmFzaGVzIGlmIHBvd2VyCisJCQltYW5hZ2VtZW50IGlzIHVzZWQsIG9yIHRoZSBCSU9TIGRvZXMgbm90IGNvcnJlY3RseSBkZWFsIHdpdGggbG9jYWwgQVBJQ3MuCisJCQk8L3A+CisgICAgICAgICAgICAgICAgPHA+CisJCQlUbyB1c2UgT1Byb2ZpbGUncyBKSVQgc3VwcG9ydCwgYSBrZXJuZWwgdmVyc2lvbiAyLjYuMTMgb3IgbGF0ZXIgaXMgcmVxdWlyZWQuCisJCQlJbiBlYXJsaWVyIGtlcm5lbCB2ZXJzaW9ucywgdGhlIGFub255bW91cyBtZW1vcnkgcmVnaW9ucyBhcmUgbm90IHJlcG9ydGVkIHRvIE9Qcm9maWxlIGFuZCByZXN1bHRzCisJCQlpbiBwcm9maWxpbmcgcmVwb3J0cyB3aXRob3V0IGFueSBzYW1wbGVzIGluIHRoZXNlIHJlZ2lvbnMuCisJCQk8L3A+CisgICAgICAgICAgICAgICAgPHA+CisJCQlQUEM2NCBwcm9jZXNzb3JzIChQb3dlcjQvUG93ZXI1L1BQQzk3MCwgZXRjLikgcmVxdWlyZSBhIHJlY2VudCAoJmd0OyAyLjYuNSkga2VybmVsIHdpdGggdGhlIGxpbmUgCisJCQk8Y29kZSBjbGFzcz0iY29uc3RhbnQiPiNkZWZpbmUgUFZfOTcwPC9jb2RlPiBwcmVzZW50IGluIDxjb2RlIGNsYXNzPSJmaWxlbmFtZSI+aW5jbHVkZS9hc20tcHBjNjQvcHJvY2Vzc29yLmg8L2NvZGU+LgorCisgICAgICAgICAgICAgICAgICAgICAgIDwvcD4KKyAgICAgICAgICAgICAgICA8cD4KKyAgICAgICAgICAgICAgICAgICAgICAgUHJvZmlsaW5nIHRoZSBDZWxsIEJyb2FkYmFuZCBFbmdpbmUgUG93ZXJQQyBQcm9jZXNzaW5nIEVsZW1lbnQgKFBQRSkgcmVxdWlyZXMgYSBrZXJuZWwgdmVyc2lvbgorICAgICAgICAgICAgICAgICAgICAgICBvZiAyLjYuMTggb3IgbW9yZSByZWNlbnQuCisgICAgICAgICAgICAgICAgICAgICAgIFByb2ZpbGluZyB0aGUgQ2VsbCBCcm9hZGJhbmQgRW5naW5lIFN5bmVyZ2lzdGljIFByb2Nlc3NpbmcgRWxlbWVudCAoU1BFKSByZXF1aXJlcyBhIGtlcm5lbCB2ZXJzaW9uCisgICAgICAgICAgICAgICAgICAgICAgIG9mIDIuNi4yMiBvciBtb3JlIHJlY2VudC4gIEFkZGl0aW9uYWxseSwgZnVsbCBzdXBwb3J0IG9mIFNQRSBwcm9maWxpbmcgcmVxdWlyZXMgYSBCRkQgbGlicmFyeQorICAgICAgICAgICAgICAgICAgICAgICBmcm9tIGJpbnV0aWxzIGNvZGUgZGF0ZWQgSmFudWFyeSAyMDA3IG9yIGxhdGVyLiAgVG8gZW5zdXJlIHRoZSBwcm9wZXIgQkZEIHN1cHBvcnQgZXhpc3RzLCBydW4KKyAgICAgICAgICAgICAgICAgICAgICAgdGhlIDxjb2RlIGNsYXNzPSJjb2RlIj5jb25maWd1cmU8L2NvZGU+IHV0aWxpdHkgd2l0aCA8Y29kZSBjbGFzcz0iY29kZSI+LS13aXRoLXRhcmdldD1jZWxsLWJlPC9jb2RlPi4KKworCQkgICAgICAgUHJvZmlsaW5nIHRoZSBDZWxsIEJyb2FkYmFuZCBFbmdpbmUgdXNpbmcgU1BVIGV2ZW50cyByZXF1aXJlcyBhIGtlcm5lbCB2ZXJzaW9uIG9mIDIuNi4yOS1yYzEKKwkJICAgICAgIG9yICBtb3JlIHJlY2VudC4KKworICAgICAgICAgICAgICAgICAgICAgICA8L3A+CisgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibm90ZSIgdGl0bGU9Ik5vdGUiIHN0eWxlPSJtYXJnaW4tbGVmdDogMC41aW47IG1hcmdpbi1yaWdodDogMC41aW47Ij48aDMgY2xhc3M9InRpdGxlIj5Ob3RlPC9oMz5BdHRlbXB0aW5nIHRvIHByb2ZpbGUgU1BFcyB3aXRoIGtlcm5lbCB2ZXJzaW9ucyBvbGRlciB0aGFuIDIuNi4yMiBtYXkgY2F1c2UgdGhlCisgICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbSB0byBjcmFzaC48L2Rpdj4KKyAgICAgICAgICAgICAgICA8cD4KKyAgICAgICAgICAgICAgICAgICAgICAgPC9wPgorICAgICAgICAgICAgICAgIDxwPgorCQkJSW5zdHJ1Y3Rpb24tQmFzZWQgU2FtcGxpbmcgKElCUykgcHJvZmlsZSBvbiBBTUQgZmFtaWx5MTBoIHByb2Nlc3NvcnMgcmVxdWlyZXMgCisJCQlrZXJuZWwgdmVyc2lvbiAyLjYuMjgtcmMyIG9yIGxhdGVyLgorCQkJPC9wPgorICAgICAgICAgICAgICA8L2RkPgorICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRlcm0iPm1vZHV0aWxzIDIuNC42IG9yIGFib3ZlPC9zcGFuPgorICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgICA8ZGQ+CisgICAgICAgICAgICAgICAgPHA+CisJCQlZb3Ugc2hvdWxkIGhhdmUgaW5zdGFsbGVkIG1vZHV0aWxzIDIuNC42IG9yIGhpZ2hlciAoaW4gZmFjdCBlYXJsaWVyIHZlcnNpb25zIHdvcmsgd2VsbCBpbiBhbG1vc3QgYWxsCisJCQljYXNlcykuCisJCTwvcD4KKyAgICAgICAgICAgICAgPC9kZD4KKyAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXJtIj5TdXBwb3J0ZWQgYXJjaGl0ZWN0dXJlPC9zcGFuPgorICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgICA8ZGQ+CisgICAgICAgICAgICAgICAgPHA+CisJCQlGb3IgSW50ZWwgSUEzMiwgYSBDUFUgd2l0aCBlaXRoZXIgYSBQNiBnZW5lcmF0aW9uIG9yIFBlbnRpdW0gNCBjb3JlIGlzCisJCQlyZXF1aXJlZC4gSW4gbWFya2V0aW5nIHRlcm1zIHRoaXMgdHJhbnNsYXRlcyB0byBhbnl0aGluZworCQkJYmV0d2VlbiBhbiBJbnRlbCBQZW50aXVtIFBybyAobm90IFBlbnRpdW0gQ2xhc3NpY3MpIGFuZAorCQkJYSBQZW50aXVtIDQgLyBYZW9uLCBpbmNsdWRpbmcgYWxsIENlbGVyb25zLiAgVGhlIEFNRAorCQkJQXRobG9uLCBPcHRlcm9uLCBQaGVub20sIGFuZCBUdXJpb24gQ1BVcyBhcmUgYWxzbyBzdXBwb3J0ZWQuICBPdGhlciBJQTMyCisJCQlDUFUgdHlwZXMgb25seSBzdXBwb3J0IHRoZSBSVEMgbW9kZSBvZiBPUHJvZmlsZTsgcGxlYXNlCisJCQlzZWUgbGF0ZXIgaW4gdGhpcyBtYW51YWwgZm9yIGRldGFpbHMuICBIeXBlci10aHJlYWRlZCBQZW50aXVtIElWcworCQkJYXJlIG5vdCBzdXBwb3J0ZWQgaW4gMi40LiBGb3IgMi40IGtlcm5lbHMsIHRoZSBJbnRlbAorCQkJSUEtNjQgQ1BVcyBhcmUgYWxzbyBzdXBwb3J0ZWQuIEZvciAyLjYga2VybmVscywgdGhlcmUgaXMgYWRkaXRpb25hbGx5CisJCQlzdXBwb3J0IGZvciBBbHBoYSBwcm9jZXNzb3JzLCBNSVBTLCBBUk0sIHg4Ni02NCwgc3BhcmM2NCwgcHBjNjQsIEFWUjMyLCBhbmQsCisJCQlpbiB0aW1lciBtb2RlLCBQQS1SSVNDIGFuZCBzMzkwLgorCQk8L3A+CisgICAgICAgICAgICAgIDwvZGQ+CisgICAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGVybSI+VW5pcHJvY2Vzc29yIG9yIFNNUDwvc3Bhbj4KKyAgICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgICAgPGRkPgorICAgICAgICAgICAgICAgIDxwPgorCQkJU01QIG1hY2hpbmVzIGFyZSBmdWxseSBzdXBwb3J0ZWQuCisJCTwvcD4KKyAgICAgICAgICAgICAgPC9kZD4KKyAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXJtIj5SZXF1aXJlZCBsaWJyYXJpZXM8L3NwYW4+CisgICAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICAgIDxkZD4KKyAgICAgICAgICAgICAgICA8cD4KKwkJCVRoZXNlIGxpYnJhcmllcyBhcmUgcmVxdWlyZWQgOiA8Y29kZSBjbGFzcz0iZmlsZW5hbWUiPnBvcHQ8L2NvZGU+LCA8Y29kZSBjbGFzcz0iZmlsZW5hbWUiPmJmZDwvY29kZT4sCisJCQk8Y29kZSBjbGFzcz0iZmlsZW5hbWUiPmxpYmVydHk8L2NvZGU+IChkZWJpYW4gdXNlcnM6IGxpYmliZXJ0eSBpcyBwcm92aWRlZCBpbiBiaW51dGlscy1kZXYgcGFja2FnZSksIDxjb2RlIGNsYXNzPSJmaWxlbmFtZSI+ZGw8L2NvZGU+LAorCQkJcGx1cyB0aGUgc3RhbmRhcmQgQysrIGxpYnJhcmllcy4KKwkJPC9wPgorICAgICAgICAgICAgICA8L2RkPgorICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRlcm0iPlJlcXVpcmVkIHVzZXIgYWNjb3VudDwvc3Bhbj4KKyAgICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgICAgPGRkPgorICAgICAgICAgICAgICAgIDxwPgorCQkJRm9yIHNlY3VyZSBwcm9jZXNzaW5nIG9mIHNhbXBsZSBkYXRhIGZyb20gSklUIHZpcnR1YWwgbWFjaGluZXMgKGUuZy4sIEphdmEpLAorCQkJdGhlIHNwZWNpYWwgdXNlciBhY2NvdW50ICJvcHJvZmlsZSIgbXVzdCBleGlzdCBvbiB0aGUgc3lzdGVtLiAgVGhlICdjb25maWd1cmUnCisJCQlhbmQgJ21ha2UgaW5zdGFsbCcgb3BlcmF0aW9ucyB3aWxsIHByaW50IHdhcm5pbmcgbWVzc2FnZXMgaWYgdGhpcworCQkJYWNjb3VudCBpcyBub3QgZm91bmQuICBJZiB5b3UgaW50ZW5kIHRvIHByb2ZpbGUgSklUZWQgY29kZSwgeW91IG11c3QgY3JlYXRlCisJCQlhIGdyb3VwIGFjY291bnQgbmFtZWQgJ29wcm9maWxlJyBhbmQgdGhlbiBjcmVhdGUgdGhlICdvcHJvZmlsZScgdXNlciBhY2NvdW50LAorCQkJc2V0dGluZyB0aGUgZGVmYXVsdCBncm91cCB0byAnb3Byb2ZpbGUnLiAgQSBydW50aW1lIGVycm9yIG1lc3NhZ2UgaXMgcHJpbnRlZCB0bworCQkJdGhlIG9wcm9maWxlIGRhZW1vbiBsb2cgd2hlbiBwcm9jZXNzaW5nIEpJVCBzYW1wbGVzIGlmIHRoaXMgc3BlY2lhbCB1c2VyCisJCQlhY2NvdW50IGNhbm5vdCBiZSBmb3VuZC4KKwkJPC9wPgorICAgICAgICAgICAgICA8L2RkPgorICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRlcm0iPk9Qcm9maWxlIEdVSTwvc3Bhbj4KKyAgICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgICAgPGRkPgorICAgICAgICAgICAgICAgIDxwPgorCQkJVGhlIHVzZSBvZiB0aGUgR1VJIHRvIHN0YXJ0IHRoZSBwcm9maWxlciByZXF1aXJlcyB0aGUgPGNvZGUgY2xhc3M9ImZpbGVuYW1lIj5RdDwvY29kZT4gbGlicmFyeS4KKwkJCUVpdGhlciA8Y29kZSBjbGFzcz0iZmlsZW5hbWUiPlF0IDM8L2NvZGU+IG9yIDxjb2RlIGNsYXNzPSJmaWxlbmFtZSI+UXQgNDwvY29kZT4gc2hvdWxkIHdvcmsuCisJCTwvcD4KKyAgICAgICAgICAgICAgPC9kZD4KKyAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXJtIj4KKyAgICAgICAgICAgICAgICAgIDxhY3JvbnltIGNsYXNzPSJhY3JvbnltIj5FTEY8L2Fjcm9ueW0+CisgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgICA8ZGQ+CisgICAgICAgICAgICAgICAgPHA+CisJCQlQcm9iYWJseSBub3QgdG9vIHN0cmVudW91cyBhIHJlcXVpcmVtZW50LCBidXQgb2xkZXIgPGFjcm9ueW0gY2xhc3M9ImFjcm9ueW0iPkEuT1VUPC9hY3JvbnltPiBiaW5hcmllcy9saWJyYXJpZXMgYXJlIG5vdCBzdXBwb3J0ZWQuCisJCTwvcD4KKyAgICAgICAgICAgICAgPC9kZD4KKyAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXJtIj5LJmFtcDtSIGNvZGluZyBzdHlsZTwvc3Bhbj4KKyAgICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgICAgPGRkPgorICAgICAgICAgICAgICAgIDxwPgorCQkJT0ssIHNvIGl0J3Mgbm90IHJlYWxseSBhIHJlcXVpcmVtZW50LCBidXQgSSB3aXNoIGl0IHdhcy4uLgorCQk8L3A+CisgICAgICAgICAgICAgIDwvZGQ+CisgICAgICAgICAgICA8L2RsPgorICAgICAgICAgIDwvZGl2PgorICAgICAgICA8L2Rpdj4KKyAgICAgICAgPGRpdiBjbGFzcz0ic2VjdDEiIHRpdGxlPSIzLqBJbnRlcm5ldCByZXNvdXJjZXMiPgorICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlcGFnZSI+CisgICAgICAgICAgICA8ZGl2PgorICAgICAgICAgICAgICA8ZGl2PgorICAgICAgICAgICAgICAgIDxoMiBjbGFzcz0idGl0bGUiIHN0eWxlPSJjbGVhcjogYm90aCI+PGEgaWQ9InJlc291cmNlcyI+PC9hPjMuoEludGVybmV0IHJlc291cmNlczwvaDI+CisgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KKyAgICAgICAgICAgIDxkbD4KKyAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXJtIj5XZWIgcGFnZTwvc3Bhbj4KKyAgICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgICAgPGRkPgorICAgICAgICAgICAgICAgIDxwPgorCQkJVGhlcmUgaXMgYSB3ZWIgcGFnZSAod2hpY2ggeW91IG1heSBiZSByZWFkaW5nIG5vdykgYXQKKwkJCTxhIGNsYXNzPSJ1bGluayIgaHJlZj0iaHR0cDovL29wcm9maWxlLnNmLm5ldC8iPmh0dHA6Ly9vcHJvZmlsZS5zZi5uZXQvPC9hPi4KKwkJPC9wPgorICAgICAgICAgICAgICA8L2RkPgorICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRlcm0iPkRvd25sb2FkPC9zcGFuPgorICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgICA8ZGQ+CisgICAgICAgICAgICAgICAgPHA+CisJCQlZb3UgY2FuIGRvd25sb2FkIGEgc291cmNlIHRhcmJhbGwgb3IgY2hlY2sgb3V0IGNvZGUgZnJvbQorCQkJdGhlIGNvZGUgcmVwb3NpdG9yeSBhdCB0aGUgc291cmNlZm9yZ2UgcGFnZSwKKwkJCTxhIGNsYXNzPSJ1bGluayIgaHJlZj0iaHR0cDovL3NmLm5ldC9wcm9qZWN0cy9vcHJvZmlsZS8iPmh0dHA6Ly9zZi5uZXQvcHJvamVjdHMvb3Byb2ZpbGUvPC9hPi4KKwkJPC9wPgorICAgICAgICAgICAgICA8L2RkPgorICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRlcm0iPk1haWxpbmcgbGlzdDwvc3Bhbj4KKyAgICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgICAgPGRkPgorICAgICAgICAgICAgICAgIDxwPgorCQkJVGhlcmUgaXMgYSBsb3ctdHJhZmZpYyBPUHJvZmlsZS1zcGVjaWZpYyBtYWlsaW5nIGxpc3QsIGRldGFpbHMgYXQKKwkJCTxhIGNsYXNzPSJ1bGluayIgaHJlZj0iaHR0cDovL3NmLm5ldC9tYWlsLz9ncm91cF9pZD0xNjE5MSI+aHR0cDovL3NmLm5ldC9tYWlsLz9ncm91cF9pZD0xNjE5MTwvYT4uCisJCTwvcD4KKyAgICAgICAgICAgICAgPC9kZD4KKyAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXJtIj5CdWcgdHJhY2tlcjwvc3Bhbj4KKyAgICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgICAgPGRkPgorICAgICAgICAgICAgICAgIDxwPgorCQkJVGhlcmUgaXMgYSBidWcgdHJhY2tlciBmb3IgT1Byb2ZpbGUgYXQgU291cmNlRm9yZ2UsCisJCQk8YSBjbGFzcz0idWxpbmsiIGhyZWY9Imh0dHA6Ly9zZi5uZXQvdHJhY2tlci8/Z3JvdXBfaWQ9MTYxOTEmYW1wO2F0aWQ9MTE2MTkxIj5odHRwOi8vc2YubmV0L3RyYWNrZXIvP2dyb3VwX2lkPTE2MTkxJmFtcDthdGlkPTExNjE5MTwvYT4uCisJCTwvcD4KKyAgICAgICAgICAgICAgPC9kZD4KKyAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXJtIj5JUkMgY2hhbm5lbDwvc3Bhbj4KKyAgICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgICAgPGRkPgorICAgICAgICAgICAgICAgIDxwPgorCQkJU2V2ZXJhbCBPUHJvZmlsZSBkZXZlbG9wZXJzIGFuZCB1c2VycyBzb21ldGltZXMgaGFuZyBvdXQgb24gY2hhbm5lbCA8c3BhbiBjbGFzcz0iY29tbWFuZCI+PHN0cm9uZz4jb3Byb2ZpbGU8L3N0cm9uZz48L3NwYW4+CisJCQlvbiB0aGUgPGEgY2xhc3M9InVsaW5rIiBocmVmPSJodHRwOi8vb2Z0Yy5uZXQiPk9GVEM8L2E+IG5ldHdvcmsuIAorCQk8L3A+CisgICAgICAgICAgICAgIDwvZGQ+CisgICAgICAgICAgICA8L2RsPgorICAgICAgICAgIDwvZGl2PgorICAgICAgICA8L2Rpdj4KKyAgICAgICAgPGRpdiBjbGFzcz0ic2VjdDEiIHRpdGxlPSI0LqBJbnN0YWxsYXRpb24iPgorICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlcGFnZSI+CisgICAgICAgICAgICA8ZGl2PgorICAgICAgICAgICAgICA8ZGl2PgorICAgICAgICAgICAgICAgIDxoMiBjbGFzcz0idGl0bGUiIHN0eWxlPSJjbGVhcjogYm90aCI+PGEgaWQ9Imluc3RhbGwiPjwvYT40LqBJbnN0YWxsYXRpb248L2gyPgorICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgIDwvZGl2PgorICAgICAgICAgIDxwPgorRmlyc3QgeW91IG5lZWQgdG8gYnVpbGQgT1Byb2ZpbGUgYW5kIGluc3RhbGwgaXQuIDxzcGFuIGNsYXNzPSJjb21tYW5kIj48c3Ryb25nPi4vY29uZmlndXJlPC9zdHJvbmc+PC9zcGFuPiwgPHNwYW4gY2xhc3M9ImNvbW1hbmQiPjxzdHJvbmc+bWFrZTwvc3Ryb25nPjwvc3Bhbj4sIDxzcGFuIGNsYXNzPSJjb21tYW5kIj48c3Ryb25nPm1ha2UgaW5zdGFsbDwvc3Ryb25nPjwvc3Bhbj4KK2lzIG9mdGVuIGFsbCB5b3UgbmVlZCwgYnV0IG5vdGUgdGhlc2UgYXJndW1lbnRzIHRvIDxzcGFuIGNsYXNzPSJjb21tYW5kIj48c3Ryb25nPi4vY29uZmlndXJlPC9zdHJvbmc+PC9zcGFuPiA6Cis8L3A+CisgICAgICAgICAgPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KKyAgICAgICAgICAgIDxkbD4KKyAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXJtIj4KKyAgICAgICAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0td2l0aC1saW51eDwvY29kZT4KKyAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICAgIDxkZD4KKyAgICAgICAgICAgICAgICA8cD4KKwkJCVVzZSB0aGlzIG9wdGlvbiB0byBzcGVjaWZ5IHRoZSBsb2NhdGlvbiBvZiB0aGUga2VybmVsIHNvdXJjZSB0cmVlIHlvdSB3aXNoCisJCQl0byBjb21waWxlIGFnYWluc3QuIFRoZSBrZXJuZWwgbW9kdWxlIGlzIGJ1aWx0IGFnYWluc3QgdGhpcyBzb3VyY2UgYW5kCisJCQl3aWxsIG9ubHkgd29yayB3aXRoIGEgcnVubmluZyBrZXJuZWwgYnVpbHQgZnJvbSB0aGUgc2FtZSBzb3VyY2Ugd2l0aAorCQkJZXhhY3Qgc2FtZSBvcHRpb25zLCBzbyBpdCBpcyBpbXBvcnRhbnQgeW91IHNwZWNpZnkgdGhpcyBvcHRpb24gaWYgeW91IG5lZWQKKwkJCXRvLgorCQk8L3A+CisgICAgICAgICAgICAgIDwvZGQ+CisgICAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGVybSI+CisgICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLXdpdGgtamF2YTwvY29kZT4KKyAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICAgIDxkZD4KKyAgICAgICAgICAgICAgICA8cD4KKwkJCVVzZSB0aGlzIG9wdGlvbiBpZiB5b3UgbmVlZCB0byBwcm9maWxlIEphdmEgYXBwbGljYXRpb25zLiAgQWxzbywgc2VlCisJCQk8YSBjbGFzcz0ieHJlZiIgaHJlZj0iI3JlcXVpcmVtZW50cyIgdGl0bGU9IjIuoFN5c3RlbSByZXF1aXJlbWVudHMiPlNlY3Rpb26gMiwgJiM4MjIwO1N5c3RlbSByZXF1aXJlbWVudHMmIzgyMjE7PC9hPiwgIlJlcXVpcmVkIHVzZXIgYWNjb3VudCIuICBUaGlzIG9wdGlvbgorCQkJaXMgdXNlZCB0byBzcGVjaWZ5IHRoZSBsb2NhdGlvbiBvZiB0aGUgSmF2YSBEZXZlbG9wbWVudCBLaXQgKEpESykKKwkJCXNvdXJjZSB0cmVlIHlvdSB3aXNoIHRvIHVzZS4gVGhpcyBpcyBuZWNlc3NhcnkgdG8gZ2V0IHRoZSBpbnRlcmZhY2UgZGVzY3JpcHRpb24KKwkJCW9mIHRoZSBKVk1QSSAob3IgSlZNVEkpIGludGVyZmFjZSB0byBjb21waWxlIHRoZSBKSVQgc3VwcG9ydCBjb2RlIHN1Y2Nlc3NmdWxseS4KKwkJCTwvcD4KKyAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJub3RlIiB0aXRsZT0iTm90ZSIgc3R5bGU9Im1hcmdpbi1sZWZ0OiAwLjVpbjsgbWFyZ2luLXJpZ2h0OiAwLjVpbjsiPgorICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPSJ0aXRsZSI+Tm90ZTwvaDM+CisgICAgICAgICAgICAgICAgICA8cD4KKwkJCQlUaGUgSmF2YSBSdW50aW1lIEVudmlyb25tZW50IChKUkUpIGRvZXMgbm90IGluY2x1ZGUgdGhlIGRldmVsb3BtZW50CisJCQkJZmlsZXMgdGhhdCBhcmUgcmVxdWlyZWQgdG8gY29tcGlsZSB0aGUgSklUIHN1cHBvcnQgY29kZSwgc28gdGhlIGZ1bGwKKwkJCQlKREsgbXVzdCBiZSBpbnN0YWxsZWQgaW4gb3JkZXIgdG8gdXNlIHRoaXMgb3B0aW9uLgorCQkJCTwvcD4KKyAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgICAgICA8cD4KKwkJCUJ5IGRlZmF1bHQsIHRoZSBPcHJvZmlsZSBKSVQgc3VwcG9ydCBsaWJyYXJpZXMgd2lsbCBiZSBpbnN0YWxsZWQgaW4KKwkJCTxjb2RlIGNsYXNzPSJmaWxlbmFtZSI+Jmx0O29wcm9mX2luc3RhbGxfZGlyJmd0Oy9saWIvb3Byb2ZpbGU8L2NvZGU+LiAgVG8gYnVpbGQKKwkJCWFuZCBpbnN0YWxsIE9Qcm9maWxlIGFuZCB0aGUgSklUIHN1cHBvcnQgbGlicmFyaWVzIGFzIDY0LWJpdCwgeW91IGNhbgorCQkJZG8gc29tZXRoaW5nIGxpa2UgdGhlIGZvbGxvd2luZzoKKwkJCTwvcD4KKyAgICAgICAgICAgICAgICA8dGFibGUgeG1sbnM9IiIgYm9yZGVyPSIwIiBzdHlsZT0iYmFja2dyb3VuZDogI0UwRTBFMDsiIHdpZHRoPSI5MCUiPgorICAgICAgICAgICAgICAgICAgPHRyPgorICAgICAgICAgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgICAgICAgICAgPHByZSBjbGFzcz0ic2NyZWVuIj4KKwkJCSMgQ0ZMQUdTPSItbTY0IiBDWFhGTEFHUz0iLW02NCIgLi9jb25maWd1cmUgXAorCQkJLS13aXRoLWtlcm5lbC1zdXBwb3J0IC0td2l0aC1qYXZhPXtteV9qZGtfaW5zdGFsbGRpcn0gXAorCQkJLS1saWJkaXI9L3Vzci9sb2NhbC9saWI2NAorCQkJPC9wcmU+CisgICAgICAgICAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICAgICAgICA8L3RyPgorICAgICAgICAgICAgICAgIDwvdGFibGU+CisgICAgICAgICAgICAgICAgPHA+CisJCQk8L3A+CisgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibm90ZSIgdGl0bGU9Ik5vdGUiIHN0eWxlPSJtYXJnaW4tbGVmdDogMC41aW47IG1hcmdpbi1yaWdodDogMC41aW47Ij4KKyAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz0idGl0bGUiPk5vdGU8L2gzPgorICAgICAgICAgICAgICAgICAgPHA+CisJCQkJSWYgeW91IGVuY291bnRlciBlcnJvcnMgYnVpbGRpbmcgNjQtYml0LCB5b3Ugc2hvdWxkCisJCQkJaW5zdGFsbCBsaWJ0b29sIDEuNS4yNiBvciBsYXRlciBzaW5jZSB0aGF0IHJlbGVhc2Ugb2YKKwkJCQlsaWJ0b29sIGZpeGVzIGtub3duIHByb2JsZW1zIGZvciBjZXJ0YWluIHBsYXRmb3Jtcy4KKwkJCQlJZiB5b3UgaW5zdGFsbCBsaWJ0b29sIGludG8gYSBub24tc3RhbmRhcmQgbG9jYXRpb24sCisJCQkJeW91J2xsIG5lZWQgdG8gZWRpdCB0aGUgaW52b2NhdGlvbiBvZiAnYWNsb2NhbCcgaW4KKwkJCQlPUHJvZmlsZSdzIGF1dG9nZW4uc2ggYXMgZm9sbG93cyAoYXNzdW1lIGFuIGluc3RhbGwKKwkJCQlsb2NhdGlvbiBvZiAvdXNyL2xvY2FsKToKKwkJCQk8L3A+CisgICAgICAgICAgICAgICAgICA8cD4KKwkJCQk8Y29kZSBjbGFzcz0iY29kZSI+YWNsb2NhbCAtSSBtNCAtSSAvdXNyL2xvY2FsL3NoYXJlL2FjbG9jYWw8L2NvZGU+CisJCQkJPC9wPgorICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICA8L2RkPgorICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRlcm0iPgorICAgICAgICAgICAgICAgICAgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS13aXRoLWtlcm5lbC1zdXBwb3J0PC9jb2RlPgorICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgICAgPGRkPgorICAgICAgICAgICAgICAgIDxwPgorCQkJVXNlIHRoaXMgb3B0aW9uIHdpdGggMi42IGFuZCBhYm92ZSBrZXJuZWxzIHRvIGluZGljYXRlIHRoZSAKKwkgICAgCQlrZXJuZWwgcHJvdmlkZXMgdGhlIE9Qcm9maWxlIGRldmljZSBkcml2ZXIuCisJCTwvcD4KKyAgICAgICAgICAgICAgPC9kZD4KKyAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXJtIj4KKyAgICAgICAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0td2l0aC1xdC1kaXIvaW5jbHVkZXMvbGlicmFyaWVzPC9jb2RlPgorICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgICAgPGRkPgorICAgICAgICAgICAgICAgIDxwPgorCQkJU3BlY2lmeSB0aGUgbG9jYXRpb24gb2YgUXQgaGVhZGVycyBhbmQgbGlicmFyaWVzLiBJdCBkZWZhdWx0cyB0byBzZWFyY2hpbmcgaW4KKwkJCTxjb2RlIGNsYXNzPSJjb25zdGFudCI+JFFURElSPC9jb2RlPiBpZiB0aGVzZSBhcmUgbm90IHNwZWNpZmllZC4KKwkJPC9wPgorICAgICAgICAgICAgICA8L2RkPgorICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgPGEgaWQ9ImRpc2FibGUtd2Vycm9yIj48L2E+CisgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRlcm0iPgorICAgICAgICAgICAgICAgICAgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1kaXNhYmxlLXdlcnJvcjwvY29kZT4KKyAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICAgIDxkZD4KKyAgICAgICAgICAgICAgICA8cD4KKwkJCURldmVsb3BtZW50IHZlcnNpb25zIG9mIE9Qcm9maWxlIGJ1aWxkIGJ5CisJCQlkZWZhdWx0IHdpdGggPGNvZGUgY2xhc3M9Im9wdGlvbiI+LVdlcnJvcjwvY29kZT4uIFRoaXMgb3B0aW9uIHR1cm5zCisJCQk8Y29kZSBjbGFzcz0ib3B0aW9uIj4tV2Vycm9yPC9jb2RlPiBvZmYuCisJCTwvcD4KKyAgICAgICAgICAgICAgPC9kZD4KKyAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgIDxhIGlkPSJkaXNhYmxlLW9wdGltaXphdGlvbiI+PC9hPgorICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXJtIj4KKyAgICAgICAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tZGlzYWJsZS1vcHRpbWl6YXRpb248L2NvZGU+CisgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgICA8ZGQ+CisgICAgICAgICAgICAgICAgPHA+CisJCQlEaXNhYmxlIHRoZSA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tTzI8L2NvZGU+IGNvbXBpbGVyIGZsYWcKKwkJCSh1c2VmdWwgaWYgeW91IGRpc2NvdmVyIGFuIE9Qcm9maWxlIGJ1ZyBhbmQgd2FudCB0byBnaXZlIGEgdXNlZnVsCisJCQliYWNrLXRyYWNlIGV0Yy4pCisJCTwvcD4KKyAgICAgICAgICAgICAgPC9kZD4KKyAgICAgICAgICAgIDwvZGw+CisgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgPHA+CitZb3UnbGwgbmVlZCB0byBoYXZlIGEgY29uZmlndXJlZCBrZXJuZWwgc291cmNlIGZvciB0aGUgY3VycmVudCBrZXJuZWwKK3RvIGJ1aWxkIHRoZSBtb2R1bGUgZm9yIDIuNCBrZXJuZWxzLiAgU2luY2UgYWxsIGRpc3RyaWJ1dGlvbnMgcHJvdmlkZSBkaWZmZXJlbnQga2VybmVscyBpdCdzIHVubGlrZWx5IHRoZSBydW5uaW5nIGtlcm5lbCBtYXRjaCB0aGUgY29uZmlndXJlZCBzb3VyY2UKK3lvdSBpbnN0YWxsZWQuIFRoZSBzYWZlc3Qgd2F5IGlzIHRvIHJlY29tcGlsZSB5b3VyIG93biBrZXJuZWwsIHJ1biBpdCBhbmQgY29tcGlsZSBvcHJvZmlsZS4gSXQgaXMgYWxzbyByZWNvbW1lbmRlZCB0aGF0IGlmIHlvdSBoYXZlIGEKK3VuaXByb2Nlc3NvciBtYWNoaW5lLCB5b3UgZW5hYmxlIHRoZSBsb2NhbCBBUElDIC8gSU9fQVBJQyBzdXBwb3J0IGZvcgoreW91ciBrZXJuZWwgKHRoaXMgaXMgYXV0b21hdGljYWxseSBlbmFibGVkIGZvciBTTVAga2VybmVscykuIFdpdGggbWFueSBCSU9TLCBrZXJuZWwgJmd0Oz0gMi42LjkgYW5kIFVQIGtlcm5lbCBpdCdzIG5vdCBzdWZmaWNpZW50IHRvIGVuYWJsZSB0aGUgbG9jYWwgQVBJQyB5b3UgbXVzdCBhbHNvIHR1cm4gaXQgb24gZXhwbGljaXRseSBhdCBib290IHRpbWUgYnkgcHJvdmlkaW5nICJsYXBpYyIgb3B0aW9uIHRvIHRoZSBrZXJuZWwuIE9uCittYWNoaW5lcyB3aXRoIHBvd2VyIG1hbmFnZW1lbnQsIHN1Y2ggYXMgbGFwdG9wcywgdGhlIHBvd2VyIG1hbmFnZW1lbnQKK211c3QgYmUgdHVybmVkIG9mZiB3aGVuIHVzaW5nIE9Qcm9maWxlIHdpdGggMi40IGtlcm5lbHMuIFRoZSBwb3dlciBtYW5hZ2VtZW50IHNvZnR3YXJlCitpbiB0aGUgQklPUyBjYW5ub3QgaGFuZGxlIHRoZSBub24tbWFza2FibGUgaW50ZXJydXB0cyAoTk1JcykgdXNlZCBieQorT1Byb2ZpbGUgZm9yIGRhdGEgY29sbGVjdGlvbi4gSWYgeW91IHVzZSB0aGUgTk1JIHdhdGNoZG9nLCBiZSBhd2FyZSB0aGF0Cit0aGUgd2F0Y2hkb2cgaXMgZGlzYWJsZWQgd2hlbiBwcm9maWxpbmcgc3RhcnRzLCBhbmQgbm90IHJlLWVuYWJsZWQgdW50aWwgdGhlCitPUHJvZmlsZSBtb2R1bGUgaXMgcmVtb3ZlZCAob3IsIGluIDIuNiwgd2hlbiBPUHJvZmlsZSBpcyBub3QgcnVubmluZykuIElmIHlvdSBjb21waWxlIE9Qcm9maWxlIGZvcgorYSAyLjIga2VybmVsIHlvdSBtdXN0IGJlIHJvb3QgdG8gY29tcGlsZSB0aGUgbW9kdWxlLiBJZiB5b3UgYXJlIHVzaW5nCisyLjYga2VybmVscyBvciBoaWdoZXIsIHlvdSBkbyBub3QgbmVlZCBrZXJuZWwgc291cmNlLCBhcyBsb25nIGFzIHRoZQorT1Byb2ZpbGUgZHJpdmVyIGlzIGVuYWJsZWQ7IGFkZGl0aW9uYWxseSwgeW91IHNob3VsZCBub3QgbmVlZCB0byBkaXNhYmxlCitwb3dlciBtYW5hZ2VtZW50LgorPC9wPgorICAgICAgICAgIDxwPgorUGxlYXNlIG5vdGUgdGhhdCB5b3UgbXVzdCBzYXZlIG9yIGhhdmUgYXZhaWxhYmxlIHRoZSA8Y29kZSBjbGFzcz0iZmlsZW5hbWUiPnZtbGludXg8L2NvZGU+IGZpbGUKK2dlbmVyYXRlZCBkdXJpbmcgYSBrZXJuZWwgY29tcGlsZSwgYXMgT1Byb2ZpbGUgbmVlZHMgaXQgKHlvdSBjYW4gdXNlCis8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLW5vLXZtbGludXg8L2NvZGU+LCBidXQgdGhpcyB3aWxsIHByZXZlbnQga2VybmVsIHByb2ZpbGluZykuCis8L3A+CisgICAgICAgIDwvZGl2PgorICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0MSIgdGl0bGU9IjUuoFVuaW5zdGFsbGluZyBPUHJvZmlsZSI+CisgICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KKyAgICAgICAgICAgIDxkaXY+CisgICAgICAgICAgICAgIDxkaXY+CisgICAgICAgICAgICAgICAgPGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj48YSBpZD0idW5pbnN0YWxsIj48L2E+NS6gVW5pbnN0YWxsaW5nIE9Qcm9maWxlPC9oMj4KKyAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICA8cD4KK1lvdSBtdXN0IGhhdmUgdGhlIHNvdXJjZSB0cmVlIGF2YWlsYWJsZSB0byB1bmluc3RhbGwgT1Byb2ZpbGU7IGEgPHNwYW4gY2xhc3M9ImNvbW1hbmQiPjxzdHJvbmc+bWFrZSB1bmluc3RhbGw8L3N0cm9uZz48L3NwYW4+IHdpbGwKK3JlbW92ZSBhbGwgaW5zdGFsbGVkIGZpbGVzIGV4Y2VwdCB5b3VyIGNvbmZpZ3VyYXRpb24gZmlsZSBpbiB0aGUgZGlyZWN0b3J5IDxjb2RlIGNsYXNzPSJmaWxlbmFtZSI+fi8ub3Byb2ZpbGU8L2NvZGU+LgorPC9wPgorICAgICAgICA8L2Rpdj4KKyAgICAgIDwvZGl2PgorICAgICAgPGRpdiBjbGFzcz0iY2hhcHRlciIgdGl0bGU9IkNoYXB0ZXKgMi6gT3ZlcnZpZXciPgorICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgorICAgICAgICAgIDxkaXY+CisgICAgICAgICAgICA8ZGl2PgorICAgICAgICAgICAgICA8aDIgY2xhc3M9InRpdGxlIj48YSBpZD0ib3ZlcnZpZXciPjwvYT5DaGFwdGVyoDIuoE92ZXJ2aWV3PC9oMj4KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgIDwvZGl2PgorICAgICAgICA8L2Rpdj4KKyAgICAgICAgPGRpdiBjbGFzcz0idG9jIj4KKyAgICAgICAgICA8cD4KKyAgICAgICAgICAgIDxiPlRhYmxlIG9mIENvbnRlbnRzPC9iPgorICAgICAgICAgIDwvcD4KKyAgICAgICAgICA8ZGw+CisgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MSI+CisgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dldHRpbmctc3RhcnRlZCI+MS4gR2V0dGluZyBzdGFydGVkPC9hPgorICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDEiPgorICAgICAgICAgICAgICAgIDxhIGhyZWY9IiN0b29scy1vdmVydmlldyI+Mi4gVG9vbHMgc3VtbWFyeTwvYT4KKyAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICA8L2RsPgorICAgICAgICA8L2Rpdj4KKyAgICAgICAgPGRpdiBjbGFzcz0ic2VjdDEiIHRpdGxlPSIxLqBHZXR0aW5nIHN0YXJ0ZWQiPgorICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlcGFnZSI+CisgICAgICAgICAgICA8ZGl2PgorICAgICAgICAgICAgICA8ZGl2PgorICAgICAgICAgICAgICAgIDxoMiBjbGFzcz0idGl0bGUiIHN0eWxlPSJjbGVhcjogYm90aCI+PGEgaWQ9ImdldHRpbmctc3RhcnRlZCI+PC9hPjEuoEdldHRpbmcgc3RhcnRlZDwvaDI+CisgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgPHA+CitCZWZvcmUgeW91IGNhbiB1c2UgT1Byb2ZpbGUsIHlvdSBtdXN0IHNldCBpdCB1cC4gVGhlIG1pbmltdW0gc2V0dXAgcmVxdWlyZWQgZm9yIHRoaXMKK2lzIHRvIHRlbGwgT1Byb2ZpbGUgd2hlcmUgdGhlIDxjb2RlIGNsYXNzPSJmaWxlbmFtZSI+dm1saW51eDwvY29kZT4gZmlsZSBjb3JyZXNwb25kaW5nIHRvIHRoZQorcnVubmluZyBrZXJuZWwgaXMsIGZvciBleGFtcGxlIDoKKzwvcD4KKyAgICAgICAgICA8dGFibGUgeG1sbnM9IiIgYm9yZGVyPSIwIiBzdHlsZT0iYmFja2dyb3VuZDogI0UwRTBFMDsiIHdpZHRoPSI5MCUiPgorICAgICAgICAgICAgPHRyPgorICAgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgICAgPHByZSBjbGFzcz0ic2NyZWVuIj5vcGNvbnRyb2wgLS12bWxpbnV4PS9ib290L3ZtbGludXgtYHVuYW1lIC1yYDwvcHJlPgorICAgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgPC90cj4KKyAgICAgICAgICA8L3RhYmxlPgorICAgICAgICAgIDxwPgorSWYgeW91IGRvbid0IHdhbnQgdG8gcHJvZmlsZSB0aGUga2VybmVsIGl0c2VsZiwKK3lvdSBjYW4gdGVsbCBPUHJvZmlsZSB5b3UgZG9uJ3QgaGF2ZSBhIDxjb2RlIGNsYXNzPSJmaWxlbmFtZSI+dm1saW51eDwvY29kZT4gZmlsZSA6Cis8L3A+CisgICAgICAgICAgPHRhYmxlIHhtbG5zPSIiIGJvcmRlcj0iMCIgc3R5bGU9ImJhY2tncm91bmQ6ICNFMEUwRTA7IiB3aWR0aD0iOTAlIj4KKyAgICAgICAgICAgIDx0cj4KKyAgICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICAgIDxwcmUgY2xhc3M9InNjcmVlbiI+b3Bjb250cm9sIC0tbm8tdm1saW51eDwvcHJlPgorICAgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgPC90cj4KKyAgICAgICAgICA8L3RhYmxlPgorICAgICAgICAgIDxwPgorTm93IHdlIGFyZSByZWFkeSB0byBzdGFydCB0aGUgZGFlbW9uICg8c3BhbiBjbGFzcz0iY29tbWFuZCI+PHN0cm9uZz5vcHJvZmlsZWQ8L3N0cm9uZz48L3NwYW4+KSB3aGljaCBjb2xsZWN0cwordGhlIHByb2ZpbGUgZGF0YSA6Cis8L3A+CisgICAgICAgICAgPHRhYmxlIHhtbG5zPSIiIGJvcmRlcj0iMCIgc3R5bGU9ImJhY2tncm91bmQ6ICNFMEUwRTA7IiB3aWR0aD0iOTAlIj4KKyAgICAgICAgICAgIDx0cj4KKyAgICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICAgIDxwcmUgY2xhc3M9InNjcmVlbiI+b3Bjb250cm9sIC0tc3RhcnQ8L3ByZT4KKyAgICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgIDwvdHI+CisgICAgICAgICAgPC90YWJsZT4KKyAgICAgICAgICA8cD4KK1doZW4gSSB3YW50IHRvIHN0b3AgcHJvZmlsaW5nLCBJIGNhbiBkbyBzbyB3aXRoIDoKKzwvcD4KKyAgICAgICAgICA8dGFibGUgeG1sbnM9IiIgYm9yZGVyPSIwIiBzdHlsZT0iYmFja2dyb3VuZDogI0UwRTBFMDsiIHdpZHRoPSI5MCUiPgorICAgICAgICAgICAgPHRyPgorICAgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgICAgPHByZSBjbGFzcz0ic2NyZWVuIj5vcGNvbnRyb2wgLS1zaHV0ZG93bjwvcHJlPgorICAgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgPC90cj4KKyAgICAgICAgICA8L3RhYmxlPgorICAgICAgICAgIDxwPgorTm90ZSB0aGF0IHVubGlrZSA8c3BhbiBjbGFzcz0iY29tbWFuZCI+PHN0cm9uZz5ncHJvZjwvc3Ryb25nPjwvc3Bhbj4sIG5vIGluc3RydW1lbnRhdGlvbiAoPGNvZGUgY2xhc3M9Im9wdGlvbiI+LXBnPC9jb2RlPgorYW5kIDxjb2RlIGNsYXNzPSJvcHRpb24iPi1hPC9jb2RlPiBvcHRpb25zIHRvIDxzcGFuIGNsYXNzPSJjb21tYW5kIj48c3Ryb25nPmdjYzwvc3Ryb25nPjwvc3Bhbj4pCitpcyBuZWNlc3NhcnkuCis8L3A+CisgICAgICAgICAgPHA+CitQZXJpb2RpY2FsbHkgKG9yIG9uIDxzcGFuIGNsYXNzPSJjb21tYW5kIj48c3Ryb25nPm9wY29udHJvbCAtLXNodXRkb3duPC9zdHJvbmc+PC9zcGFuPiBvciA8c3BhbiBjbGFzcz0iY29tbWFuZCI+PHN0cm9uZz5vcGNvbnRyb2wgLS1kdW1wPC9zdHJvbmc+PC9zcGFuPikKK3RoZSBwcm9maWxlIGRhdGEgaXMgd3JpdHRlbiBvdXQgaW50byB0aGUgJFNFU1NJT05fRElSL3NhbXBsZXMgZGlyZWN0b3J5IChieSBkZWZhdWx0IGF0IDxjb2RlIGNsYXNzPSJmaWxlbmFtZSI+L3Zhci9saWIvb3Byb2ZpbGUvc2FtcGxlczwvY29kZT4pLgorVGhlc2UgcHJvZmlsZSBmaWxlcyBjb3ZlciBzaGFyZWQgbGlicmFyaWVzLCBhcHBsaWNhdGlvbnMsIHRoZSBrZXJuZWwgKHZtbGludXgpLCBhbmQga2VybmVsIG1vZHVsZXMuCitZb3UgY2FuIGNsZWFyIHRoZSBwcm9maWxlIGRhdGEgKGF0IGFueSB0aW1lKSB3aXRoIDxzcGFuIGNsYXNzPSJjb21tYW5kIj48c3Ryb25nPm9wY29udHJvbCAtLXJlc2V0PC9zdHJvbmc+PC9zcGFuPi4KKzwvcD4KKyAgICAgICAgICA8cD4KK1RvIHBsYWNlIHRoZXNlIHNhbXBsZSBkYXRhYmFzZSBmaWxlcyBpbiBhIHNwZWNpZmljIGRpcmVjdG9yeSBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0IGxvY2F0aW9uICg8Y29kZSBjbGFzcz0iZmlsZW5hbWUiPi92YXIvbGliL29wcm9maWxlPC9jb2RlPikgdXNlIHRoZSA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLXNlc3Npb24tZGlyPWRpcjwvY29kZT4gb3B0aW9uLiBZb3UgbXVzdCBhbHNvIHNwZWNpZnkgdGhlIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tc2Vzc2lvbi1kaXI8L2NvZGU+IHRvIHRlbGwgdGhlIHRvb2xzIHRvIGNvbnRpbnVlIHVzaW5nIHRoaXMgZGlyZWN0b3J5LiAoSW4gdGhlIGZ1dHVyZSwgd2Ugc2hvdWxkIGFsbG93IHRoaXMgdG8gYmUgc3BlY2lmaWVkIGluIGFuIGVudmlyb25tZW50IHZhcmlhYmxlLikgOgorPC9wPgorICAgICAgICAgIDx0YWJsZSB4bWxucz0iIiBib3JkZXI9IjAiIHN0eWxlPSJiYWNrZ3JvdW5kOiAjRTBFMEUwOyIgd2lkdGg9IjkwJSI+CisgICAgICAgICAgICA8dHI+CisgICAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgICA8cHJlIGNsYXNzPSJzY3JlZW4iPm9wY29udHJvbCAtLW5vLXZtbGludXggLS1zZXNzaW9uLWRpcj0vaG9tZS9tZS90bXBzZXNzaW9uPC9wcmU+CisgICAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICA8L3RyPgorICAgICAgICAgIDwvdGFibGU+CisgICAgICAgICAgPHRhYmxlIHhtbG5zPSIiIGJvcmRlcj0iMCIgc3R5bGU9ImJhY2tncm91bmQ6ICNFMEUwRTA7IiB3aWR0aD0iOTAlIj4KKyAgICAgICAgICAgIDx0cj4KKyAgICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICAgIDxwcmUgY2xhc3M9InNjcmVlbiI+b3Bjb250cm9sIC0tc3RhcnQgLS1zZXNzaW9uLWRpcj0vaG9tZS9tZS90bXBzZXNzaW9uPC9wcmU+CisgICAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICA8L3RyPgorICAgICAgICAgIDwvdGFibGU+CisgICAgICAgICAgPHA+CitZb3UgY2FuIGdldCBzdW1tYXJpZXMgb2YgdGhpcyBkYXRhIGluIGEgbnVtYmVyIG9mIHdheXMgYXQgYW55IHRpbWUuIFRvIGdldCBhIHN1bW1hcnkgb2YKK2RhdGEgYWNyb3NzIHRoZSBlbnRpcmUgc3lzdGVtIGZvciBhbGwgb2YgdGhlc2UgcHJvZmlsZXMsIHlvdSBjYW4gZG8gOgorPC9wPgorICAgICAgICAgIDx0YWJsZSB4bWxucz0iIiBib3JkZXI9IjAiIHN0eWxlPSJiYWNrZ3JvdW5kOiAjRTBFMEUwOyIgd2lkdGg9IjkwJSI+CisgICAgICAgICAgICA8dHI+CisgICAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgICA8cHJlIGNsYXNzPSJzY3JlZW4iPm9wcmVwb3J0IFstLXNlc3Npb24tZGlyPWRpcl08L3ByZT4KKyAgICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgIDwvdHI+CisgICAgICAgICAgPC90YWJsZT4KKyAgICAgICAgICA8cD4KK09yIHRvIGdldCBhIG1vcmUgZGV0YWlsZWQgc3VtbWFyeSwgZm9yIGEgcGFydGljdWxhciBpbWFnZSwgeW91IGNhbiBkbyBzb21ldGhpbmcgbGlrZSA6Cis8L3A+CisgICAgICAgICAgPHRhYmxlIHhtbG5zPSIiIGJvcmRlcj0iMCIgc3R5bGU9ImJhY2tncm91bmQ6ICNFMEUwRTA7IiB3aWR0aD0iOTAlIj4KKyAgICAgICAgICAgIDx0cj4KKyAgICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICAgIDxwcmUgY2xhc3M9InNjcmVlbiI+b3ByZXBvcnQgLWwgL2Jvb3Qvdm1saW51eC1gdW5hbWUgLXJgPC9wcmU+CisgICAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICA8L3RyPgorICAgICAgICAgIDwvdGFibGU+CisgICAgICAgICAgPHA+CitUaGVyZSBhcmUgYWxzbyBhIG51bWJlciBvZiBvdGhlciB3YXlzIG9mIHByZXNlbnRpbmcgdGhlIGRhdGEsIGFzIGRlc2NyaWJlZCBsYXRlciBpbiB0aGlzIG1hbnVhbC4KK05vdGUgdGhhdCBPUHJvZmlsZSB3aWxsIGNob29zZSBhIGRlZmF1bHQgcHJvZmlsaW5nIHNldHVwIGZvciB5b3UuIEhvd2V2ZXIsIHRoZXJlIGFyZSBhIG51bWJlcgorb2Ygb3B0aW9ucyB5b3UgY2FuIHBhc3MgdG8gPHNwYW4gY2xhc3M9ImNvbW1hbmQiPjxzdHJvbmc+b3Bjb250cm9sPC9zdHJvbmc+PC9zcGFuPiBpZiB5b3UgbmVlZCB0byBjaGFuZ2Ugc29tZXRoaW5nLAorYWxzbyBkZXRhaWxlZCBsYXRlci4KKzwvcD4KKyAgICAgICAgPC9kaXY+CisgICAgICAgIDxkaXYgY2xhc3M9InNlY3QxIiB0aXRsZT0iMi6gVG9vbHMgc3VtbWFyeSI+CisgICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KKyAgICAgICAgICAgIDxkaXY+CisgICAgICAgICAgICAgIDxkaXY+CisgICAgICAgICAgICAgICAgPGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj48YSBpZD0idG9vbHMtb3ZlcnZpZXciPjwvYT4yLqBUb29scyBzdW1tYXJ5PC9oMj4KKyAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICA8cD4KK1RoaXMgc2VjdGlvbiBnaXZlcyBhIGJyaWVmIGRlc2NyaXB0aW9uIG9mIHRoZSBhdmFpbGFibGUgT1Byb2ZpbGUgdXRpbGl0aWVzIGFuZCB0aGVpciBwdXJwb3NlLgorPC9wPgorICAgICAgICAgIDxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+CisgICAgICAgICAgICA8ZGw+CisgICAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGVybSI+CisgICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0iZmlsZW5hbWUiPm9waGVscDwvY29kZT4KKyAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICAgIDxkZD4KKyAgICAgICAgICAgICAgICA8cD4KKwkJVGhpcyB1dGlsaXR5IGxpc3RzIHRoZSBhdmFpbGFibGUgZXZlbnRzIGFuZCBzaG9ydCBkZXNjcmlwdGlvbnMuCisJPC9wPgorICAgICAgICAgICAgICA8L2RkPgorICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRlcm0iPgorICAgICAgICAgICAgICAgICAgPGNvZGUgY2xhc3M9ImZpbGVuYW1lIj5vcGNvbnRyb2w8L2NvZGU+CisgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgICA8ZGQ+CisgICAgICAgICAgICAgICAgPHA+CisJCVVzZWQgZm9yIGNvbnRyb2xsaW5nIHRoZSBPUHJvZmlsZSBkYXRhIGNvbGxlY3Rpb24sIGRpc2N1c3NlZCBpbiA8YSBjbGFzcz0ieHJlZiIgaHJlZj0iI2NvbnRyb2xsaW5nIiB0aXRsZT0iQ2hhcHRlcqAzLqBDb250cm9sbGluZyB0aGUgcHJvZmlsZXIiPkNoYXB0ZXKgMywgPGk+Q29udHJvbGxpbmcgdGhlIHByb2ZpbGVyPC9pPjwvYT4uCisJPC9wPgorICAgICAgICAgICAgICA8L2RkPgorICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRlcm0iPgorICAgICAgICAgICAgICAgICAgPGNvZGUgY2xhc3M9ImZpbGVuYW1lIj5hZ2VudCBsaWJyYXJpZXM8L2NvZGU+CisgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgICA8ZGQ+CisgICAgICAgICAgICAgICAgPHA+CisJCQlVc2VkIGJ5IHZpcnR1YWwgbWFjaGluZXMgKGxpa2UgdGhlIEphdmEgVk0pIHRvIHJlY29yZCBpbmZvcm1hdGlvbiBhYm91dCBKSVRlZCBjb2RlIGJlaW5nIHByb2ZpbGVkLiBTZWUgPGEgY2xhc3M9InhyZWYiIGhyZWY9IiNzZXR1cC1qaXQiIHRpdGxlPSIyLqBTZXR0aW5nIHVwIHRoZSBKSVQgcHJvZmlsaW5nIGZlYXR1cmUiPlNlY3Rpb26gMiwgJiM4MjIwO1NldHRpbmcgdXAgdGhlIEpJVCBwcm9maWxpbmcgZmVhdHVyZSYjODIyMTs8L2E+LgorCQk8L3A+CisgICAgICAgICAgICAgIDwvZGQ+CisgICAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGVybSI+CisgICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0iZmlsZW5hbWUiPm9wcmVwb3J0PC9jb2RlPgorICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgICAgPGRkPgorICAgICAgICAgICAgICAgIDxwPgorCQlUaGlzIGlzIHRoZSBtYWluIHRvb2wgZm9yIHJldHJpZXZpbmcgdXNlZnVsIHByb2ZpbGUgZGF0YSwgZGVzY3JpYmVkIGluCisJCTxhIGNsYXNzPSJ4cmVmIiBocmVmPSIjb3ByZXBvcnQiIHRpdGxlPSIyLqBJbWFnZSBzdW1tYXJpZXMgYW5kIHN5bWJvbCBzdW1tYXJpZXMgKG9wcmVwb3J0KSI+U2VjdGlvbqAyLCAmIzgyMjA7SW1hZ2Ugc3VtbWFyaWVzIGFuZCBzeW1ib2wgc3VtbWFyaWVzICg8c3BhbiBjbGFzcz0iY29tbWFuZCI+PHN0cm9uZz5vcHJlcG9ydDwvc3Ryb25nPjwvc3Bhbj4pJiM4MjIxOzwvYT4uCisJPC9wPgorICAgICAgICAgICAgICA8L2RkPgorICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRlcm0iPgorICAgICAgICAgICAgICAgICAgPGNvZGUgY2xhc3M9ImZpbGVuYW1lIj5vcGFubm90YXRlPC9jb2RlPgorICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgICAgPGRkPgorICAgICAgICAgICAgICAgIDxwPgorCQlUaGlzIHV0aWxpdHkgY2FuIGJlIHVzZWQgdG8gcHJvZHVjZSBhbm5vdGF0ZWQgc291cmNlLCBhc3NlbWJseSBvciBtaXhlZCBzb3VyY2UvYXNzZW1ibHkuCisJCVNvdXJjZSBsZXZlbCBhbm5vdGF0aW9uIGlzIGF2YWlsYWJsZSBvbmx5IGlmIHRoZSBhcHBsaWNhdGlvbiB3YXMgY29tcGlsZWQgd2l0aCAKKwkJZGVidWdnaW5nIHN5bWJvbHMuIFNlZSA8YSBjbGFzcz0ieHJlZiIgaHJlZj0iI29wYW5ub3RhdGUiIHRpdGxlPSIzLqBPdXRwdXR0aW5nIGFubm90YXRlZCBzb3VyY2UgKG9wYW5ub3RhdGUpIj5TZWN0aW9uoDMsICYjODIyMDtPdXRwdXR0aW5nIGFubm90YXRlZCBzb3VyY2UgKDxzcGFuIGNsYXNzPSJjb21tYW5kIj48c3Ryb25nPm9wYW5ub3RhdGU8L3N0cm9uZz48L3NwYW4+KSYjODIyMTs8L2E+LgorCTwvcD4KKyAgICAgICAgICAgICAgPC9kZD4KKyAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXJtIj4KKyAgICAgICAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJmaWxlbmFtZSI+b3BncHJvZjwvY29kZT4KKyAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICAgIDxkZD4KKyAgICAgICAgICAgICAgICA8cD4KKwkJVGhpcyB1dGlsaXR5IGNhbiBvdXRwdXQgZ3Byb2Ytc3R5bGUgZGF0YSBmaWxlcyBmb3IgYSBiaW5hcnksIGZvciB1c2Ugd2l0aAorCQk8c3BhbiBjbGFzcz0iY29tbWFuZCI+PHN0cm9uZz5ncHJvZiAtcDwvc3Ryb25nPjwvc3Bhbj4uIFNlZSA8YSBjbGFzcz0ieHJlZiIgaHJlZj0iI29wZ3Byb2YiIHRpdGxlPSI1LqBncHJvZi1jb21wYXRpYmxlIG91dHB1dCAob3BncHJvZikiPlNlY3Rpb26gNSwgJiM4MjIwOzxzcGFuIGNsYXNzPSJjb21tYW5kIj48c3Ryb25nPmdwcm9mPC9zdHJvbmc+PC9zcGFuPi1jb21wYXRpYmxlIG91dHB1dCAoPHNwYW4gY2xhc3M9ImNvbW1hbmQiPjxzdHJvbmc+b3BncHJvZjwvc3Ryb25nPjwvc3Bhbj4pJiM4MjIxOzwvYT4uCisJPC9wPgorICAgICAgICAgICAgICA8L2RkPgorICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRlcm0iPgorICAgICAgICAgICAgICAgICAgPGNvZGUgY2xhc3M9ImZpbGVuYW1lIj5vcGFyY2hpdmU8L2NvZGU+CisgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgICA8ZGQ+CisgICAgICAgICAgICAgICAgPHA+CisJCVRoaXMgdXRpbGl0eSBjYW4gYmUgdXNlZCB0byBjb2xsZWN0IGV4ZWN1dGFibGVzLCBkZWJ1Z2luZm8sCisJCWFuZCBzYW1wbGUgZmlsZXMgYW5kIGNvcHkgdGhlIGZpbGVzIGludG8gYW4gYXJjaGl2ZS4KKwkJVGhlIGFyY2hpdmUgaXMgc2VsZi1jb250YWluZWQgYW5kIGNhbiBiZSBtb3ZlZCB0byBhbm90aGVyCisJCW1hY2hpbmUgZm9yIGZ1cnRoZXIgYW5hbHlzaXMuCisJCVNlZSA8YSBjbGFzcz0ieHJlZiIgaHJlZj0iI29wYXJjaGl2ZSIgdGl0bGU9IjYuoEFyY2hpdmluZyBtZWFzdXJlbWVudHMgKG9wYXJjaGl2ZSkiPlNlY3Rpb26gNiwgJiM4MjIwO0FyY2hpdmluZyBtZWFzdXJlbWVudHMgKDxzcGFuIGNsYXNzPSJjb21tYW5kIj48c3Ryb25nPm9wYXJjaGl2ZTwvc3Ryb25nPjwvc3Bhbj4pJiM4MjIxOzwvYT4uCisJPC9wPgorICAgICAgICAgICAgICA8L2RkPgorICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRlcm0iPgorICAgICAgICAgICAgICAgICAgPGNvZGUgY2xhc3M9ImZpbGVuYW1lIj5vcGltcG9ydDwvY29kZT4KKyAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICAgIDxkZD4KKyAgICAgICAgICAgICAgICA8cD4KKwkJVGhpcyB1dGlsaXR5IGNvbnZlcnRzIHNhbXBsZSBkYXRhYmFzZSBmaWxlcyBmcm9tIGEgZm9yZWlnbiBiaW5hcnkgZm9ybWF0IChhYmkpIHRvCisJCXRoZSBuYXRpdmUgZm9ybWF0LiBUaGlzIGlzIHVzZWZ1bCBvbmx5IHdoZW4gbW92aW5nIHNhbXBsZSBmaWxlcyBiZXR3ZWVuIGhvc3RzLAorCQlmb3IgYW5hbHlzaXMgb24gcGxhdGZvcm1zIG90aGVyIHRoYW4gdGhlIG9uZSB1c2VkIGZvciBjb2xsZWN0aW9uLgorCQlTZWUgPGEgY2xhc3M9InhyZWYiIGhyZWY9IiNvcGltcG9ydCIgdGl0bGU9IjcuoENvbnZlcnRpbmcgc2FtcGxlIGRhdGFiYXNlIGZpbGVzIChvcGltcG9ydCkiPlNlY3Rpb26gNywgJiM4MjIwO0NvbnZlcnRpbmcgc2FtcGxlIGRhdGFiYXNlIGZpbGVzICg8c3BhbiBjbGFzcz0iY29tbWFuZCI+PHN0cm9uZz5vcGltcG9ydDwvc3Ryb25nPjwvc3Bhbj4pJiM4MjIxOzwvYT4uCisJPC9wPgorICAgICAgICAgICAgICA8L2RkPgorICAgICAgICAgICAgPC9kbD4KKyAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgPC9kaXY+CisgICAgICA8L2Rpdj4KKyAgICAgIDxkaXYgY2xhc3M9ImNoYXB0ZXIiIHRpdGxlPSJDaGFwdGVyoDMuoENvbnRyb2xsaW5nIHRoZSBwcm9maWxlciI+CisgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlcGFnZSI+CisgICAgICAgICAgPGRpdj4KKyAgICAgICAgICAgIDxkaXY+CisgICAgICAgICAgICAgIDxoMiBjbGFzcz0idGl0bGUiPjxhIGlkPSJjb250cm9sbGluZyI+PC9hPkNoYXB0ZXKgMy6gQ29udHJvbGxpbmcgdGhlIHByb2ZpbGVyPC9oMj4KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgIDwvZGl2PgorICAgICAgICA8L2Rpdj4KKyAgICAgICAgPGRpdiBjbGFzcz0idG9jIj4KKyAgICAgICAgICA8cD4KKyAgICAgICAgICAgIDxiPlRhYmxlIG9mIENvbnRlbnRzPC9iPgorICAgICAgICAgIDwvcD4KKyAgICAgICAgICA8ZGw+CisgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MSI+CisgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2NvbnRyb2xsaW5nLWRhZW1vbiI+MS4gVXNpbmcgPHNwYW4gY2xhc3M9ImNvbW1hbmQiPjxzdHJvbmc+b3Bjb250cm9sPC9zdHJvbmc+PC9zcGFuPjwvYT4KKyAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgIDxkZD4KKyAgICAgICAgICAgICAgPGRsPgorICAgICAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MiI+CisgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNvcGNvbnRyb2xleGFtcGxlcyI+MS4xLiBFeGFtcGxlczwvYT4KKyAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MiI+CisgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNldmVudHNwZWMiPjEuMi4gU3BlY2lmeWluZyBwZXJmb3JtYW5jZSBjb3VudGVyIGV2ZW50czwvYT4KKyAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgICA8L2RsPgorICAgICAgICAgICAgPC9kZD4KKyAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QxIj4KKyAgICAgICAgICAgICAgICA8YSBocmVmPSIjc2V0dXAtaml0Ij4yLiBTZXR0aW5nIHVwIHRoZSBKSVQgcHJvZmlsaW5nIGZlYXR1cmU8L2E+CisgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICA8ZGQ+CisgICAgICAgICAgICAgIDxkbD4KKyAgICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDIiPgorICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjc2V0dXAtaml0LWp2bSI+Mi4xLiBKVk0gaW5zdHJ1bWVudGF0aW9uPC9hPgorICAgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICAgIDwvZGw+CisgICAgICAgICAgICA8L2RkPgorICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDEiPgorICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNvcHJvZmlsZS1ndWkiPjMuIFVzaW5nIDxzcGFuIGNsYXNzPSJjb21tYW5kIj48c3Ryb25nPm9wcm9mX3N0YXJ0PC9zdHJvbmc+PC9zcGFuPjwvYT4KKyAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QxIj4KKyAgICAgICAgICAgICAgICA8YSBocmVmPSIjZGV0YWlsZWQtcGFyYW1ldGVycyI+NC4gQ29uZmlndXJhdGlvbiBkZXRhaWxzPC9hPgorICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgPGRkPgorICAgICAgICAgICAgICA8ZGw+CisgICAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QyIj4KKyAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2hhcmR3YXJlLWNvdW50ZXJzIj40LjEuIEhhcmR3YXJlIHBlcmZvcm1hbmNlIGNvdW50ZXJzPC9hPgorICAgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QyIj4KKyAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI3J0YyI+NC4yLiBPUHJvZmlsZSBpbiBSVEMgbW9kZTwvYT4KKyAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MiI+CisgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiN0aW1lciI+NC4zLiBPUHJvZmlsZSBpbiB0aW1lciBpbnRlcnJ1cHQgbW9kZTwvYT4KKyAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MiI+CisgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNwNCI+NC40LiBQZW50aXVtIDQgc3VwcG9ydDwvYT4KKyAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MiI+CisgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNpYTY0Ij40LjUuIEludGVsIEl0YW5pdW0gMiBzdXBwb3J0PC9hPgorICAgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QyIj4KKyAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI3BwYzY0Ij40LjYuIFBvd2VyUEM2NCBzdXBwb3J0PC9hPgorICAgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QyIj4KKyAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2NlbGwtYmUiPjQuNy4gQ2VsbCBCcm9hZGJhbmQgRW5naW5lIHN1cHBvcnQ8L2E+CisgICAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDIiPgorICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjYW1kLWlicy1zdXBwb3J0Ij40LjguIEFNRDY0ICh4ODZfNjQpIEluc3RydWN0aW9uLUJhc2VkIFNhbXBsaW5nIChJQlMpIHN1cHBvcnQ8L2E+CisgICAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDIiPgorICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjbWlzdXNlIj40LjkuIERhbmdlcm91cyBjb3VudGVyIHNldHRpbmdzPC9hPgorICAgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICAgIDwvZGw+CisgICAgICAgICAgICA8L2RkPgorICAgICAgICAgIDwvZGw+CisgICAgICAgIDwvZGl2PgorICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0MSIgdGl0bGU9IjEuoFVzaW5nIG9wY29udHJvbCI+CisgICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KKyAgICAgICAgICAgIDxkaXY+CisgICAgICAgICAgICAgIDxkaXY+CisgICAgICAgICAgICAgICAgPGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj48YSBpZD0iY29udHJvbGxpbmctZGFlbW9uIj48L2E+MS6gVXNpbmcgPHNwYW4gY2xhc3M9ImNvbW1hbmQiPjxzdHJvbmc+b3Bjb250cm9sPC9zdHJvbmc+PC9zcGFuPjwvaDI+CisgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgPHA+CitJbiB0aGlzIHNlY3Rpb24gd2UgZGVzY3JpYmUgdGhlIGNvbmZpZ3VyYXRpb24gYW5kIGNvbnRyb2wgb2YgdGhlIHByb2ZpbGluZyBzeXN0ZW0KK3dpdGggb3Bjb250cm9sIGluIG1vcmUgZGVwdGguCitUaGUgPHNwYW4gY2xhc3M9ImNvbW1hbmQiPjxzdHJvbmc+b3Bjb250cm9sPC9zdHJvbmc+PC9zcGFuPiBzY3JpcHQgaGFzIGEgZGVmYXVsdCBzZXR1cCwgYnV0IHlvdQorY2FuIGFsdGVyIHRoaXMgd2l0aCB0aGUgb3B0aW9ucyBnaXZlbiBiZWxvdy4gSW4gcGFydGljdWxhciwKK2lmIHlvdXIgaGFyZHdhcmUgc3VwcG9ydHMgcGVyZm9ybWFuY2UgY291bnRlcnMsIHlvdSBjYW4gY29uZmlndXJlIHRoZW0uCitUaGVyZSBhcmUgYSBudW1iZXIgb2YgY291bnRlcnMgKGZvciBleGFtcGxlLCBjb3VudGVyIDAgYW5kIGNvdW50ZXIgMQorb24gdGhlIFBlbnRpdW0gSUlJKS4gRWFjaCBvZiB0aGVzZSBjb3VudGVycyBjYW4gYmUgcHJvZ3JhbW1lZCB3aXRoCithbiBldmVudCB0byBjb3VudCwgc3VjaCBhcyBjYWNoZSBtaXNzZXMgb3IgTU1YIG9wZXJhdGlvbnMuIFRoZSBldmVudAorY2hvc2VuIGZvciBlYWNoIGNvdW50ZXIgaXMgcmVmbGVjdGVkIGluIHRoZSBwcm9maWxlIGRhdGEgY29sbGVjdGVkCitieSBPUHJvZmlsZTogZnVuY3Rpb25zIGFuZCBiaW5hcmllcyBhdCB0aGUgdG9wIG9mIHRoZSBwcm9maWxlcyByZWZsZWN0Cit0aGF0IG1vc3Qgb2YgdGhlIGNob3NlbiBldmVudHMgaGFwcGVuZWQgd2l0aGluIHRoYXQgY29kZS4KKzwvcD4KKyAgICAgICAgICA8cD4KK0FkZGl0aW9uYWxseSwgZWFjaCBjb3VudGVyIGhhcyBhICJjb3VudCIgdmFsdWU6IHRoaXMgY29ycmVzcG9uZHMgdG8gaG93CitkZXRhaWxlZCB0aGUgcHJvZmlsZSBpcy4gVGhlIGxvd2VyIHRoZSB2YWx1ZSwgdGhlIG1vcmUgZnJlcXVlbnRseSBwcm9maWxlCitzYW1wbGVzIGFyZSB0YWtlbi4gQSBjb3VudGVyIGNhbiBjaG9vc2UgdG8gc2FtcGxlIG9ubHkga2VybmVsIGNvZGUsIHVzZXItc3BhY2UgY29kZSwKK29yIGJvdGggKGJvdGggaXMgdGhlIGRlZmF1bHQpLiBGaW5hbGx5LCBzb21lIGV2ZW50cyBoYXZlIGEgInVuaXQgbWFzayIKKy0gdGhpcyBpcyBhIHZhbHVlIHRoYXQgZnVydGhlciByZXN0cmljdHMgdGhlIHR5cGVzIG9mIGV2ZW50IHRoYXQgYXJlIGNvdW50ZWQuIAorVGhlIGV2ZW50IHR5cGVzIGFuZCB1bml0IG1hc2tzIGZvciB5b3VyIENQVSBhcmUgbGlzdGVkIGJ5IDxzcGFuIGNsYXNzPSJjb21tYW5kIj48c3Ryb25nPm9wY29udHJvbAorLS1saXN0LWV2ZW50czwvc3Ryb25nPjwvc3Bhbj4uCis8L3A+CisgICAgICAgICAgPHA+CitUaGUgPHNwYW4gY2xhc3M9ImNvbW1hbmQiPjxzdHJvbmc+b3Bjb250cm9sPC9zdHJvbmc+PC9zcGFuPiBzY3JpcHQgcHJvdmlkZXMgdGhlIGZvbGxvd2luZyBhY3Rpb25zIDoKKzwvcD4KKyAgICAgICAgICA8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgorICAgICAgICAgICAgPGRsPgorICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRlcm0iPgorICAgICAgICAgICAgICAgICAgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1pbml0PC9jb2RlPgorICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgICAgPGRkPgorICAgICAgICAgICAgICAgIDxwPgorCQlMb2FkcyB0aGUgT1Byb2ZpbGUgbW9kdWxlIGlmIHJlcXVpcmVkIGFuZCBtYWtlcyB0aGUgT1Byb2ZpbGUgZHJpdmVyCisJCWludGVyZmFjZSBhdmFpbGFibGUuCisJCTwvcD4KKyAgICAgICAgICAgICAgPC9kZD4KKyAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXJtIj4KKyAgICAgICAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tc2V0dXA8L2NvZGU+CisgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgICA8ZGQ+CisgICAgICAgICAgICAgICAgPHA+CisJCSAgICBGb2xsb3dlZCBieSBsaXN0IGFyZ3VtZW50cyBmb3IgcHJvZmlsaW5nIHNldCB1cC4gTGlzdCBvZiBhcmd1bWVudHMKKwkJICAgIHNhdmVkIGluIDxjb2RlIGNsYXNzPSJmaWxlbmFtZSI+L3Jvb3QvLm9wcm9maWxlL2RhZW1vbnJjPC9jb2RlPi4KKwkJICAgIEdpdmluZyB0aGlzIG9wdGlvbiBpcyBub3QgbmVjZXNzYXJ5OyB5b3UgY2FuIGp1c3QgZGlyZWN0bHkgcGFzcyBvbmUKKwkJICAgIG9mIHRoZSBzZXR1cCBvcHRpb25zLCBlLmcuIDxzcGFuIGNsYXNzPSJjb21tYW5kIj48c3Ryb25nPm9wY29udHJvbCAtLW5vLXZtbGludXg8L3N0cm9uZz48L3NwYW4+LgorCQkgIDwvcD4KKyAgICAgICAgICAgICAgPC9kZD4KKyAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXJtIj4KKyAgICAgICAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tc3RhdHVzPC9jb2RlPgorICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgICAgPGRkPgorICAgICAgICAgICAgICAgIDxwPgorCQlTaG93IGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24uCisJCTwvcD4KKyAgICAgICAgICAgICAgPC9kZD4KKyAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXJtIj4KKyAgICAgICAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tc3RhcnQtZGFlbW9uPC9jb2RlPgorICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgICAgPGRkPgorICAgICAgICAgICAgICAgIDxwPgorCQkgICAgU3RhcnQgdGhlIG9wcm9maWxlIGRhZW1vbiB3aXRob3V0IHN0YXJ0aW5nIGFjdHVhbCBwcm9maWxpbmcuIFRoZSBwcm9maWxpbmcKKwkJY2FuIHRoZW4gYmUgc3RhcnRlZCB1c2luZyA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLXN0YXJ0PC9jb2RlPi4gVGhpcyBpcyB1c2VmdWwgZm9yIGF2b2lkaW5nCisJCW1lYXN1cmluZyB0aGUgY29zdCBvZiBkYWVtb24gc3RhcnR1cCwgYXMgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1zdGFydDwvY29kZT4gaXMgYSBzaW1wbGUKKwkJd3JpdGUgdG8gYSBmaWxlIGluIG9wcm9maWxlZnMuIE5vdCBhdmFpbGFibGUgaW4gMi4yLzIuNCBrZXJuZWxzLgorCQk8L3A+CisgICAgICAgICAgICAgIDwvZGQ+CisgICAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGVybSI+CisgICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLXN0YXJ0PC9jb2RlPgorICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgICAgPGRkPgorICAgICAgICAgICAgICAgIDxwPgorCQkgICAgU3RhcnQgZGF0YSBjb2xsZWN0aW9uIHdpdGggZWl0aGVyIGFyZ3VtZW50cyBwcm92aWRlZCBieSA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLXNldHVwPC9jb2RlPgorCQlvciBpbmZvcm1hdGlvbiBzYXZlZCBpbiA8Y29kZSBjbGFzcz0iZmlsZW5hbWUiPi9yb290Ly5vcHJvZmlsZS9kYWVtb25yYzwvY29kZT4uIFNwZWNpZnlpbmcKKwkJdGhlIGFkZGl0aW9uIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tdmVyYm9zZTwvY29kZT4gbWFrZXMgdGhlIGRhZW1vbiBnZW5lcmF0ZSBsb3RzIG9mIGRlYnVnIGRhdGEKKwkJd2hpbHN0IGl0IGlzIHJ1bm5pbmcuCisJCTwvcD4KKyAgICAgICAgICAgICAgPC9kZD4KKyAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXJtIj4KKyAgICAgICAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tZHVtcDwvY29kZT4KKyAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICAgIDxkZD4KKyAgICAgICAgICAgICAgICA8cD4KKwkJICAgIEZvcmNlIGEgZmx1c2ggb2YgdGhlIGNvbGxlY3RlZCBwcm9maWxpbmcgZGF0YSB0byB0aGUgZGFlbW9uLgorCQk8L3A+CisgICAgICAgICAgICAgIDwvZGQ+CisgICAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGVybSI+CisgICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLXN0b3A8L2NvZGU+CisgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgICA8ZGQ+CisgICAgICAgICAgICAgICAgPHA+CisJCSAgICBTdG9wIGRhdGEgY29sbGVjdGlvbiAodGhpcyBzZXBhcmF0ZSBzdGVwIGlzIG5vdCBwb3NzaWJsZSB3aXRoIDIuMiBvciAyLjQga2VybmVscykuCisJCTwvcD4KKyAgICAgICAgICAgICAgPC9kZD4KKyAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXJtIj4KKyAgICAgICAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tc2h1dGRvd248L2NvZGU+CisgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgICA8ZGQ+CisgICAgICAgICAgICAgICAgPHA+CisJCSAgICBTdG9wIGRhdGEgY29sbGVjdGlvbiBhbmQga2lsbCB0aGUgZGFlbW9uLgorCQk8L3A+CisgICAgICAgICAgICAgIDwvZGQ+CisgICAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGVybSI+CisgICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLXJlc2V0PC9jb2RlPgorICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgICAgPGRkPgorICAgICAgICAgICAgICAgIDxwPgorCQkgICAgQ2xlYXJzIG91dCBkYXRhIGZyb20gY3VycmVudCBzZXNzaW9uLCBidXQgbGVhdmVzIHNhdmVkIHNlc3Npb25zLgorCQk8L3A+CisgICAgICAgICAgICAgIDwvZGQ+CisgICAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1zYXZlPTwvY29kZT5zZXNzaW9uX25hbWU8L3NwYW4+CisgICAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICAgIDxkZD4KKyAgICAgICAgICAgICAgICA8cD4KKwkJICAgIFNhdmUgZGF0YSBmcm9tIGN1cnJlbnQgc2Vzc2lvbiB0byBzZXNzaW9uX25hbWUuCisJCTwvcD4KKyAgICAgICAgICAgICAgPC9kZD4KKyAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXJtIj4KKyAgICAgICAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tZGVpbml0PC9jb2RlPgorICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgICAgPGRkPgorICAgICAgICAgICAgICAgIDxwPgorICAgICAgICAgICAgICAgIFNodXRzIGRvd24gZGFlbW9uLiBVbmxvYWQgdGhlIE9Qcm9maWxlIG1vZHVsZSBhbmQgb3Byb2ZpbGVmcy4KKwkJPC9wPgorICAgICAgICAgICAgICA8L2RkPgorICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRlcm0iPgorICAgICAgICAgICAgICAgICAgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1saXN0LWV2ZW50czwvY29kZT4KKyAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICAgIDxkZD4KKyAgICAgICAgICAgICAgICA8cD4KKwkJICAgIExpc3QgZXZlbnQgdHlwZXMgYW5kIHVuaXQgbWFza3MuCisJCTwvcD4KKyAgICAgICAgICAgICAgPC9kZD4KKyAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXJtIj4KKyAgICAgICAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0taGVscDwvY29kZT4KKyAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICAgIDxkZD4KKyAgICAgICAgICAgICAgICA8cD4KKwkJICAgIEdlbmVyYXRlIHVzYWdlIG1lc3NhZ2VzLgorCQk8L3A+CisgICAgICAgICAgICAgIDwvZGQ+CisgICAgICAgICAgICA8L2RsPgorICAgICAgICAgIDwvZGl2PgorICAgICAgICAgIDxwPgorVGhlcmUgYXJlIGEgbnVtYmVyIG9mIHBvc3NpYmxlIHNldHRpbmdzLCBvZiB3aGljaCwgb25seQorPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS12bWxpbnV4PC9jb2RlPiAob3IgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1uby12bWxpbnV4PC9jb2RlPikKK2lzIHJlcXVpcmVkLiBUaGVzZSBzZXR0aW5ncyBhcmUgc3RvcmVkIGluIDxjb2RlIGNsYXNzPSJmaWxlbmFtZSI+fi8ub3Byb2ZpbGUvZGFlbW9ucmM8L2NvZGU+LgorPC9wPgorICAgICAgICAgIDxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+CisgICAgICAgICAgICA8ZGw+CisgICAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1idWZmZXItc2l6ZT08L2NvZGU+bnVtPC9zcGFuPgorICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgICA8ZGQ+CisgICAgICAgICAgICAgICAgPHA+CisJCU51bWJlciBvZiBzYW1wbGVzIGluIGtlcm5lbCBidWZmZXIuIFdoZW4gdXNpbmcgYSAyLjYga2VybmVsCisJCWJ1ZmZlciB3YXRlcnNoZWQgbmVlZCB0byBiZSB0d2Vha2VkIHdoZW4gY2hhbmdpbmcgdGhpcyB2YWx1ZS4KKwkJPC9wPgorICAgICAgICAgICAgICA8L2RkPgorICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJvcHRpb24iPi0tYnVmZmVyLXdhdGVyc2hlZD08L2NvZGU+bnVtPC9zcGFuPgorICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgICA8ZGQ+CisgICAgICAgICAgICAgICAgPHA+CisJCVNldCBrZXJuZWwgYnVmZmVyIHdhdGVyc2hlZCB0byBudW0gc2FtcGxlcyAoMi42IG9ubHkpLiBXaGVuIGl0J2xsIHJlbWFpbiBvbmx5CisJCWJ1ZmZlci1zaXplIC0gYnVmZmVyLXdhdGVyc2hlZCBmcmVlIGVudHJ5IGluIHRoZSBrZXJuZWwgYnVmZmVyIGRhdGEgd2lsbCBiZQorCQlmbHVzaGVkIHRvIGRhZW1vbiwgbW9zdCB1c2VmdWxsIHZhbHVlIGFyZSBpbiB0aGUgcmFuZ2UgWzAuMjUgLSAwLjVdICogYnVmZmVyLXNpemUuCisJCTwvcD4KKyAgICAgICAgICAgICAgPC9kZD4KKyAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ib3B0aW9uIj4tLWNwdS1idWZmZXItc2l6ZT08L2NvZGU+bnVtPC9zcGFuPgorICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgICA8ZGQ+CisgICAgICAgICAgICAgICAgPHA+CisJCU51bWJlciBvZiBzYW1wbGVzIGluIGtlcm5lbCBwZXItY3B1IGJ1ZmZlciAoMi42IG9ubHkpLiBJZiB5b3UKKwkJcHJvZmlsZSBhdCBoaWdoIHJhdGUgaXQgY2FuIGhlbHAgdG8gaW5jcmVhc2UgdGhpcyBpZiB0aGUgbG9nCisJCWZpbGUgc2hvdyBleGNlc3NpdmUgY291bnQgb2Ygc2FtcGxlIGxvc3QgY3B1IGJ1ZmZlciBvdmVyZmxvdy4gCisJCTwvcD4KKyAgICAgICAgICAgICAgPC9kZD4KKyAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0ib3B0aW9uIj4tLWV2ZW50PTwvY29kZT5bZXZlbnRzcGVjXTwvc3Bhbj4KKyAgICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgICAgPGRkPgorICAgICAgICAgICAgICAgIDxwPgorCQlVc2UgdGhlIGdpdmVuIHBlcmZvcm1hbmNlIGNvdW50ZXIgZXZlbnQgdG8gcHJvZmlsZS4KKwkJU2VlIDxhIGNsYXNzPSJ4cmVmIiBocmVmPSIjZXZlbnRzcGVjIiB0aXRsZT0iMS4yLqBTcGVjaWZ5aW5nIHBlcmZvcm1hbmNlIGNvdW50ZXIgZXZlbnRzIj5TZWN0aW9uoDEuMiwgJiM4MjIwO1NwZWNpZnlpbmcgcGVyZm9ybWFuY2UgY291bnRlciBldmVudHMmIzgyMjE7PC9hPiBiZWxvdy4KKwkJPC9wPgorICAgICAgICAgICAgICA8L2RkPgorICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJvcHRpb24iPi0tc2Vzc2lvbi1kaXI9PC9jb2RlPmRpcl9wYXRoPC9zcGFuPgorICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgICA8ZGQ+CisgICAgICAgICAgICAgICAgPHA+CisJCSAgICBDcmVhdGUvdXNlIHNhbXBsZSBkYXRhYmFzZSBvdXQgb2YgZGlyZWN0b3J5IDxjb2RlIGNsYXNzPSJmaWxlbmFtZSI+ZGlyX3BhdGg8L2NvZGU+IGluc3RlYWQgb2YKKwkJdGhlIGRlZmF1bHQgbG9jYXRpb24gKC92YXIvbGliL29wcm9maWxlKS4KKwkJPC9wPgorICAgICAgICAgICAgICA8L2RkPgorICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJvcHRpb24iPi0tc2VwYXJhdGU9PC9jb2RlPltub25lLGxpYixrZXJuZWwsdGhyZWFkLGNwdSxhbGxdPC9zcGFuPgorICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgICA8ZGQ+CisgICAgICAgICAgICAgICAgPHA+CisJCUJ5IGRlZmF1bHQsIGV2ZXJ5IHByb2ZpbGUgaXMgc3RvcmVkIGluIGEgc2luZ2xlIGZpbGUuIFRodXMsIGZvciBleGFtcGxlLAorCQlzYW1wbGVzIGluIHRoZSBDIGxpYnJhcnkgYXJlIGFsbCBhY2NyZWRpdGVkIHRvIHRoZSA8Y29kZSBjbGFzcz0iZmlsZW5hbWUiPi9saWIvbGliYy5vPC9jb2RlPgorCQlwcm9maWxlLiBIb3dldmVyLCB5b3UgY2hvb3NlIHRvIGNyZWF0ZSBzZXBhcmF0ZSBzYW1wbGUgZmlsZXMgYnkgc3BlY2lmeWluZworCQlvbmUgb2YgdGhlIGJlbG93IG9wdGlvbnMuCisJCTwvcD4KKyAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj4KKyAgICAgICAgICAgICAgICAgIDx0YWJsZSBib3JkZXI9IjEiPgorICAgICAgICAgICAgICAgICAgICA8Y29sZ3JvdXA+CisgICAgICAgICAgICAgICAgICAgICAgPGNvbCAvPgorICAgICAgICAgICAgICAgICAgICAgIDxjb2wgLz4KKyAgICAgICAgICAgICAgICAgICAgPC9jb2xncm91cD4KKyAgICAgICAgICAgICAgICAgICAgPHRib2R5PgorICAgICAgICAgICAgICAgICAgICAgIDx0cj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvZGUgY2xhc3M9Im9wdGlvbiI+bm9uZTwvY29kZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Tm8gcHJvZmlsZSBzZXBhcmF0aW9uIChkZWZhdWx0KTwvdGQ+CisgICAgICAgICAgICAgICAgICAgICAgPC90cj4KKyAgICAgICAgICAgICAgICAgICAgICA8dHI+CisgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPmxpYjwvY29kZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Q3JlYXRlIHBlci1hcHBsaWNhdGlvbiBwcm9maWxlcyBmb3IgbGlicmFyaWVzPC90ZD4KKyAgICAgICAgICAgICAgICAgICAgICA8L3RyPgorICAgICAgICAgICAgICAgICAgICAgIDx0cj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvZGUgY2xhc3M9Im9wdGlvbiI+a2VybmVsPC9jb2RlPgorICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5DcmVhdGUgcGVyLWFwcGxpY2F0aW9uIHByb2ZpbGVzIGZvciB0aGUga2VybmVsIGFuZCBrZXJuZWwgbW9kdWxlczwvdGQ+CisgICAgICAgICAgICAgICAgICAgICAgPC90cj4KKyAgICAgICAgICAgICAgICAgICAgICA8dHI+CisgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPnRocmVhZDwvY29kZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Q3JlYXRlIHByb2ZpbGVzIGZvciBlYWNoIHRocmVhZCBhbmQgZWFjaCB0YXNrPC90ZD4KKyAgICAgICAgICAgICAgICAgICAgICA8L3RyPgorICAgICAgICAgICAgICAgICAgICAgIDx0cj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvZGUgY2xhc3M9Im9wdGlvbiI+Y3B1PC9jb2RlPgorICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5DcmVhdGUgcHJvZmlsZXMgZm9yIGVhY2ggQ1BVPC90ZD4KKyAgICAgICAgICAgICAgICAgICAgICA8L3RyPgorICAgICAgICAgICAgICAgICAgICAgIDx0cj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvZGUgY2xhc3M9Im9wdGlvbiI+YWxsPC9jb2RlPgorICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5BbGwgb2YgdGhlIGFib3ZlIG9wdGlvbnM8L3RkPgorICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CisgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+CisgICAgICAgICAgICAgICAgICA8L3RhYmxlPgorICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICAgIDxwPgorCQlOb3RlICB0aGF0IDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tc2VwYXJhdGU9a2VybmVsPC9jb2RlPiBhbHNvIHR1cm5zIG9uIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tc2VwYXJhdGU9bGliPC9jb2RlPi4KKwkJCisJCVdoZW4gdXNpbmcgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1zZXBhcmF0ZT1rZXJuZWw8L2NvZGU+LCBzYW1wbGVzIGluIGhhcmR3YXJlIGludGVycnVwdHMsIHNvZnQtaXJxcywgb3Igb3RoZXIKKwkJYXN5bmNocm9ub3VzIGtlcm5lbCBjb250ZXh0cyBhcmUgY3JlZGl0ZWQgdG8gdGhlIHRhc2sgY3VycmVudGx5IHJ1bm5pbmcuIFRoaXMgbWVhbnMgeW91IHdpbGwgc2VlCisJCXNlZW1pbmdseSBub25zZW5zZSBwcm9maWxlcyBzdWNoIGFzIDxjb2RlIGNsYXNzPSJmaWxlbmFtZSI+L2Jpbi9iYXNoPC9jb2RlPiBzaG93aW5nIHNhbXBsZXMgZm9yIHRoZSBQUFAgbW9kdWxlcywKKwkJZXRjLgorCQk8L3A+CisgICAgICAgICAgICAgICAgPHA+CisJCU9uIDIuMi8yLjQgb25seSBrZXJuZWwgdGhyZWFkcyBhbHJlYWR5IHN0YXJ0ZWQgd2hlbiBwcm9maWxpbmcgYmVnaW5zIGFyZSBjb3JyZWN0bHkgcHJvZmlsZWQ7CisJCW5ld2x5IHN0YXJ0ZWQga2VybmVsIHRocmVhZCBzYW1wbGVzIGFyZSBjcmVkaXRlZCB0byB0aGUgdm1saW51eCAoa2VybmVsKSBwcm9maWxlLgorCQk8L3A+CisgICAgICAgICAgICAgICAgPHA+CisJCVVzaW5nIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tc2VwYXJhdGU9dGhyZWFkPC9jb2RlPiBjcmVhdGVzIGEgbG90CisJCW9mIHNhbXBsZSBmaWxlcyBpZiB5b3UgbGVhdmUgT1Byb2ZpbGUgcnVubmluZyBmb3IgYSB3aGlsZTsgaXQncyBtb3N0CisJCXVzZWZ1bCB3aGVuIHVzZWQgZm9yIHNob3J0IHNlc3Npb25zLCBvciB3aGVuIHVzaW5nIGltYWdlIGZpbHRlcmluZy4KKwkJPC9wPgorICAgICAgICAgICAgICA8L2RkPgorICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJvcHRpb24iPi0tY2FsbGdyYXBoPTwvY29kZT4jZGVwdGg8L3NwYW4+CisgICAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICAgIDxkZD4KKyAgICAgICAgICAgICAgICA8cD4KKwkJRW5hYmxlIGNhbGwtZ3JhcGggc2FtcGxlIGNvbGxlY3Rpb24gd2l0aCBhIG1heGltdW0gZGVwdGguIFVzZSAwIHRvIGRpc2FibGUKKwkJY2FsbGdyYXBoIHByb2ZpbGluZy4gIE5PVEU6IENhbGxncmFwaCBzdXBwb3J0IGlzIGF2YWlsYWJsZSBvbiBhIGxpbWl0ZWQKKwkJbnVtYmVyIG9mIHBsYXRmb3JtcyBhdCB0aGlzIHRpbWU7IGZvciBleGFtcGxlOgorCQk8L3A+CisgICAgICAgICAgICAgICAgPHA+CisJCTwvcD4KKyAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpdGVtaXplZGxpc3QiPgorICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPSJpdGVtaXplZGxpc3QiIHR5cGU9ImRpc2MiPgorICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9Imxpc3RpdGVtIj4KKyAgICAgICAgICAgICAgICAgICAgICA8cD54ODYgd2l0aCByZWNlbnQgMi42IGtlcm5lbDwvcD4KKyAgICAgICAgICAgICAgICAgICAgPC9saT4KKyAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJsaXN0aXRlbSI+CisgICAgICAgICAgICAgICAgICAgICAgPHA+QVJNIHdpdGggcmVjZW50IDIuNiBrZXJuZWw8L3A+CisgICAgICAgICAgICAgICAgICAgIDwvbGk+CisgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0ibGlzdGl0ZW0iPgorICAgICAgICAgICAgICAgICAgICAgIDxwPlBvd2VyUEMgd2l0aCAyLjYuMTcga2VybmVsPC9wPgorICAgICAgICAgICAgICAgICAgICA8L2xpPgorICAgICAgICAgICAgICAgICAgPC91bD4KKyAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgICAgICA8cD4KKwkJPC9wPgorICAgICAgICAgICAgICAgIDxwPgorCQk8L3A+CisgICAgICAgICAgICAgIDwvZGQ+CisgICAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1pbWFnZT08L2NvZGU+aW1hZ2UsW2ltYWdlc118ImFsbCI8L3NwYW4+CisgICAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICAgIDxkZD4KKyAgICAgICAgICAgICAgICA8cD4KKwkJSW1hZ2UgZmlsdGVyaW5nLiBJZiB5b3Ugc3BlY2lmeSBvbmUgb3IgbW9yZSBhYnNvbHV0ZQorCQlwYXRocyB0byBiaW5hcmllcywgT1Byb2ZpbGUgd2lsbCBvbmx5IHByb2R1Y2UgcHJvZmlsZSByZXN1bHRzIGZvciB0aG9zZQorCQliaW5hcnkgaW1hZ2VzLiBUaGlzIGlzIHVzZWZ1bCBmb3IgcmVzdHJpY3RpbmcgdGhlIHNvbWV0aW1lcyB2b2x1bWlub3VzCisJCW91dHB1dCB5b3UgbWF5IGdldCBvdGhlcndpc2UsIGVzcGVjaWFsbHkgd2l0aAorCQk8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLXNlcGFyYXRlPXRocmVhZDwvY29kZT4uIE5vdGUgdGhhdCBpZiB5b3UgYXJlIHVzaW5nCisJCTxjb2RlIGNsYXNzPSJvcHRpb24iPi0tc2VwYXJhdGU9bGliPC9jb2RlPiBvcgorCQk8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLXNlcGFyYXRlPWtlcm5lbDwvY29kZT4sIHRoZW4gaWYgeW91IHNwZWNpZmljYXRpb24gYW4KKwkJYXBwbGljYXRpb24gYmluYXJ5LCB0aGUgc2hhcmVkIGxpYnJhcmllcyBhbmQga2VybmVsIGNvZGUKKwkJPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+YXJlPC9lbT48L3NwYW4+IGluY2x1ZGVkLiBTcGVjaWZ5IHRoZSB2YWx1ZQorCQkiYWxsIiB0byBwcm9maWxlIGV2ZXJ5dGhpbmcgKHRoZSBkZWZhdWx0KS4KKwkJPC9wPgorICAgICAgICAgICAgICA8L2RkPgorICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJvcHRpb24iPi0tdm1saW51eD08L2NvZGU+ZmlsZTwvc3Bhbj4KKyAgICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgICAgPGRkPgorICAgICAgICAgICAgICAgIDxwPgorCQl2bWxpbnV4IGtlcm5lbCBpbWFnZS4KKwkJPC9wPgorICAgICAgICAgICAgICA8L2RkPgorICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRlcm0iPgorICAgICAgICAgICAgICAgICAgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1uby12bWxpbnV4PC9jb2RlPgorICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgICAgPGRkPgorICAgICAgICAgICAgICAgIDxwPgorCQlVc2UgdGhpcyB3aGVuIHlvdSBkb24ndCBoYXZlIGEga2VybmVsIHZtbGludXggZmlsZSwgYW5kIHlvdSBkb24ndCB3YW50CisJCXRvIHByb2ZpbGUgdGhlIGtlcm5lbC4gVGhpcyBzdGlsbCBjb3VudHMgdGhlIHRvdGFsIG51bWJlciBvZiBrZXJuZWwgc2FtcGxlcywKKwkJYnV0IGNhbid0IGdpdmUgc3ltYm9sLWJhc2VkIHJlc3VsdHMgZm9yIHRoZSBrZXJuZWwgb3IgYW55IG1vZHVsZXMuCisJCTwvcD4KKyAgICAgICAgICAgICAgPC9kZD4KKyAgICAgICAgICAgIDwvZGw+CisgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgPGRpdiBjbGFzcz0ic2VjdDIiIHRpdGxlPSIxLjEuoEV4YW1wbGVzIj4KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlcGFnZSI+CisgICAgICAgICAgICAgIDxkaXY+CisgICAgICAgICAgICAgICAgPGRpdj4KKyAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz0idGl0bGUiPjxhIGlkPSJvcGNvbnRyb2xleGFtcGxlcyI+PC9hPjEuMS6gRXhhbXBsZXM8L2gzPgorICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2VjdDMiIHRpdGxlPSIxLjEuMS6gSW50ZWwgcGVyZm9ybWFuY2UgY291bnRlciBzZXR1cCI+CisgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlcGFnZSI+CisgICAgICAgICAgICAgICAgPGRpdj4KKyAgICAgICAgICAgICAgICAgIDxkaXY+CisgICAgICAgICAgICAgICAgICAgIDxoNCBjbGFzcz0idGl0bGUiPjxhIGlkPSJleGFtcGxlc3BlcmZjdHIiPjwvYT4xLjEuMS6gSW50ZWwgcGVyZm9ybWFuY2UgY291bnRlciBzZXR1cDwvaDQ+CisgICAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgIDxwPgorSGVyZSwgd2UgaGF2ZSBhIFBlbnRpdW0gSUlJIHJ1bm5pbmcgYXQgODAwTUh6LCBhbmQgd2Ugd2FudCB0byBsb29rIGF0IHdoZXJlIGRhdGEgbWVtb3J5CityZWZlcmVuY2VzIGFyZSBoYXBwZW5pbmcgbW9zdCwgYW5kIGFsc28gZ2V0IHJlc3VsdHMgZm9yIENQVSB0aW1lLgorPC9wPgorICAgICAgICAgICAgICA8dGFibGUgeG1sbnM9IiIgYm9yZGVyPSIwIiBzdHlsZT0iYmFja2dyb3VuZDogI0UwRTBFMDsiIHdpZHRoPSI5MCUiPgorICAgICAgICAgICAgICAgIDx0cj4KKyAgICAgICAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgICAgICAgPHByZSBjbGFzcz0ic2NyZWVuIj4KKyMgb3Bjb250cm9sIC0tZXZlbnQ9Q1BVX0NMS19VTkhBTFRFRDo0MDAwMDAgLS1ldmVudD1EQVRBX01FTV9SRUZTOjEwMDAwCisjIG9wY29udHJvbCAtLXZtbGludXg9L2Jvb3QvMi42LjAvdm1saW51eAorIyBvcGNvbnRyb2wgLS1zdGFydAorPC9wcmU+CisgICAgICAgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgICAgIDwvdHI+CisgICAgICAgICAgICAgIDwvdGFibGU+CisgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9InNlY3QzIiB0aXRsZT0iMS4xLjIuoFJUQyBtb2RlIj4KKyAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KKyAgICAgICAgICAgICAgICA8ZGl2PgorICAgICAgICAgICAgICAgICAgPGRpdj4KKyAgICAgICAgICAgICAgICAgICAgPGg0IGNsYXNzPSJ0aXRsZSI+PGEgaWQ9ImV4YW1wbGVzcnRjIj48L2E+MS4xLjIuoFJUQyBtb2RlPC9oND4KKyAgICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgICAgPHA+CitIZXJlLCB3ZSBoYXZlIGFuIEludGVsIGxhcHRvcCB3aXRob3V0IHN1cHBvcnQgZm9yIHBlcmZvcm1hbmNlIGNvdW50ZXJzLCBydW5uaW5nIG9uIDIuNCBrZXJuZWxzLgorPC9wPgorICAgICAgICAgICAgICA8dGFibGUgeG1sbnM9IiIgYm9yZGVyPSIwIiBzdHlsZT0iYmFja2dyb3VuZDogI0UwRTBFMDsiIHdpZHRoPSI5MCUiPgorICAgICAgICAgICAgICAgIDx0cj4KKyAgICAgICAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgICAgICAgPHByZSBjbGFzcz0ic2NyZWVuIj4KKyMgb3BoZWxwIC1yCitDUFUgd2l0aCBSVEMgZGV2aWNlCisjIG9wY29udHJvbCAtLXZtbGludXg9L2Jvb3QvMi40LjEzL3ZtbGludXggLS1ldmVudD1SVENfSU5URVJSVVBUUzoxMDI0CisjIG9wY29udHJvbCAtLXN0YXJ0Cis8L3ByZT4KKyAgICAgICAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICAgICAgPC90cj4KKyAgICAgICAgICAgICAgPC90YWJsZT4KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2VjdDMiIHRpdGxlPSIxLjEuMy6gU3RhcnRpbmcgdGhlIGRhZW1vbiBzZXBhcmF0ZWx5Ij4KKyAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KKyAgICAgICAgICAgICAgICA8ZGl2PgorICAgICAgICAgICAgICAgICAgPGRpdj4KKyAgICAgICAgICAgICAgICAgICAgPGg0IGNsYXNzPSJ0aXRsZSI+PGEgaWQ9ImV4YW1wbGVzc3RhcnRkYWVtb24iPjwvYT4xLjEuMy6gU3RhcnRpbmcgdGhlIGRhZW1vbiBzZXBhcmF0ZWx5PC9oND4KKyAgICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgICAgPHA+CitJZiB3ZSdyZSBydW5uaW5nIDIuNiBrZXJuZWxzLCB3ZSBjYW4gdXNlIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tc3RhcnQtZGFlbW9uPC9jb2RlPiB0byBhdm9pZAordGhlIHByb2ZpbGVyIHN0YXJ0dXAgYWZmZWN0aW5nIHJlc3VsdHMuCis8L3A+CisgICAgICAgICAgICAgIDx0YWJsZSB4bWxucz0iIiBib3JkZXI9IjAiIHN0eWxlPSJiYWNrZ3JvdW5kOiAjRTBFMEUwOyIgd2lkdGg9IjkwJSI+CisgICAgICAgICAgICAgICAgPHRyPgorICAgICAgICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICAgICAgICA8cHJlIGNsYXNzPSJzY3JlZW4iPgorIyBvcGNvbnRyb2wgLS12bWxpbnV4PS9ib290LzIuNi4wL3ZtbGludXgKKyMgb3Bjb250cm9sIC0tc3RhcnQtZGFlbW9uCisjIG15X2Zhdm91cml0ZV9iZW5jaG1hcmsgLS1pbml0CisjIG9wY29udHJvbCAtLXN0YXJ0IDsgbXlfZmF2b3VyaXRlX2JlbmNobWFyayAtLXJ1biA7IG9wY29udHJvbCAtLXN0b3AKKzwvcHJlPgorICAgICAgICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgICAgICA8L3RyPgorICAgICAgICAgICAgICA8L3RhYmxlPgorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0MyIgdGl0bGU9IjEuMS40LqBTZXBhcmF0ZSBwcm9maWxlcyBmb3IgbGlicmFyaWVzIGFuZCB0aGUga2VybmVsIj4KKyAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KKyAgICAgICAgICAgICAgICA8ZGl2PgorICAgICAgICAgICAgICAgICAgPGRpdj4KKyAgICAgICAgICAgICAgICAgICAgPGg0IGNsYXNzPSJ0aXRsZSI+PGEgaWQ9ImV4YW1wbGVzZXBhcmF0ZSI+PC9hPjEuMS40LqBTZXBhcmF0ZSBwcm9maWxlcyBmb3IgbGlicmFyaWVzIGFuZCB0aGUga2VybmVsPC9oND4KKyAgICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgICAgPHA+CitIZXJlLCB3ZSB3YW50IHRvIHNlZSBhIHByb2ZpbGUgb2YgdGhlIE9Qcm9maWxlIGRhZW1vbiBpdHNlbGYsIGluY2x1ZGluZyB3aGVuCitpdCB3YXMgcnVubmluZyBpbnNpZGUgdGhlIGtlcm5lbCBkcml2ZXIsIGFuZCBpdHMgdXNlIG9mIHNoYXJlZCBsaWJyYXJpZXMuCis8L3A+CisgICAgICAgICAgICAgIDx0YWJsZSB4bWxucz0iIiBib3JkZXI9IjAiIHN0eWxlPSJiYWNrZ3JvdW5kOiAjRTBFMEUwOyIgd2lkdGg9IjkwJSI+CisgICAgICAgICAgICAgICAgPHRyPgorICAgICAgICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICAgICAgICA8cHJlIGNsYXNzPSJzY3JlZW4iPgorIyBvcGNvbnRyb2wgLS1zZXBhcmF0ZT1rZXJuZWwgLS12bWxpbnV4PS9ib290LzIuNi4wL3ZtbGludXgKKyMgb3Bjb250cm9sIC0tc3RhcnQKKyMgbXlfZmF2b3VyaXRlX3N0cmVzc190ZXN0IC0tcnVuCisjIG9wcmVwb3J0IC1sIC1wIC9saWIvbW9kdWxlcy8yLjYuMC9rZXJuZWwgL3Vzci9sb2NhbC9iaW4vb3Byb2ZpbGVkCis8L3ByZT4KKyAgICAgICAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICAgICAgPC90cj4KKyAgICAgICAgICAgICAgPC90YWJsZT4KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2VjdDMiIHRpdGxlPSIxLjEuNS6gUHJvZmlsaW5nIHNlc3Npb25zIj4KKyAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KKyAgICAgICAgICAgICAgICA8ZGl2PgorICAgICAgICAgICAgICAgICAgPGRpdj4KKyAgICAgICAgICAgICAgICAgICAgPGg0IGNsYXNzPSJ0aXRsZSI+PGEgaWQ9ImV4YW1wbGVzc2Vzc2lvbnMiPjwvYT4xLjEuNS6gUHJvZmlsaW5nIHNlc3Npb25zPC9oND4KKyAgICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgICAgPHA+CitJdCBjYW4gb2Z0ZW4gYmUgdXNlZnVsIHRvIHNwbGl0IHVwIHByb2ZpbGluZyBkYXRhIGludG8gc2V2ZXJhbCBkaWZmZXJlbnQKK3RpbWUgcGVyaW9kcy4gRm9yIGV4YW1wbGUsIHlvdSBtYXkgd2FudCB0byBjb2xsZWN0IGRhdGEgb24gYW4gYXBwbGljYXRpb24ncworc3RhcnR1cCBzZXBhcmF0ZWx5IGZyb20gdGhlIG5vcm1hbCBydW50aW1lIGRhdGEuIFlvdSBjYW4gdXNlIHRoZSBzaW1wbGUKK2NvbW1hbmQgPHNwYW4gY2xhc3M9ImNvbW1hbmQiPjxzdHJvbmc+b3Bjb250cm9sIC0tc2F2ZTwvc3Ryb25nPjwvc3Bhbj4gdG8gZG8gdGhpcy4gRm9yIGV4YW1wbGUgOgorPC9wPgorICAgICAgICAgICAgICA8dGFibGUgeG1sbnM9IiIgYm9yZGVyPSIwIiBzdHlsZT0iYmFja2dyb3VuZDogI0UwRTBFMDsiIHdpZHRoPSI5MCUiPgorICAgICAgICAgICAgICAgIDx0cj4KKyAgICAgICAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgICAgICAgPHByZSBjbGFzcz0ic2NyZWVuIj4KKyMgb3Bjb250cm9sIC0tc2F2ZT1ibGFoCis8L3ByZT4KKyAgICAgICAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICAgICAgPC90cj4KKyAgICAgICAgICAgICAgPC90YWJsZT4KKyAgICAgICAgICAgICAgPHA+Cit3aWxsIGNyZWF0ZSBhIHN1Yi1kaXJlY3RvcnkgaW4gPGNvZGUgY2xhc3M9ImZpbGVuYW1lIj4kU0VTU0lPTl9ESVIvc2FtcGxlczwvY29kZT4gY29udGFpbmluZyB0aGUgc2FtcGxlcwordXAgdG8gdGhhdCBwb2ludCAodGhlIGN1cnJlbnQgc2Vzc2lvbidzIHNhbXBsZSBmaWxlcyBhcmUgbW92ZWQgaW50byB0aGlzCitkaXJlY3RvcnkpLiBZb3UgY2FuIHRoZW4gcGFzcyB0aGlzIHNlc3Npb24gbmFtZSBhcyBhIHBhcmFtZXRlciB0byB0aGUgcG9zdC1wcm9maWxpbmcKK2FuYWx5c2lzIHRvb2xzLCB0byBvbmx5IGdldCBkYXRhIHVwIHRvIHRoZSBwb2ludCB5b3UgbmFtZWQgdGhlCitzZXNzaW9uLiBJZiB5b3UgZG8gbm90IHdhbnQgdG8gc2F2ZSBhIHNlc3Npb24sIHlvdSBjYW4gZG8KKzxzcGFuIGNsYXNzPSJjb21tYW5kIj48c3Ryb25nPnJtIC1yZiAkU0VTU0lPTl9ESVIvc2FtcGxlcy9zZXNzaW9ubmFtZTwvc3Ryb25nPjwvc3Bhbj4gb3IsIGZvciB0aGUKK2N1cnJlbnQgc2Vzc2lvbiwgPHNwYW4gY2xhc3M9ImNvbW1hbmQiPjxzdHJvbmc+b3Bjb250cm9sIC0tcmVzZXQ8L3N0cm9uZz48L3NwYW4+LgorPC9wPgorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgPGRpdiBjbGFzcz0ic2VjdDIiIHRpdGxlPSIxLjIuoFNwZWNpZnlpbmcgcGVyZm9ybWFuY2UgY291bnRlciBldmVudHMiPgorICAgICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KKyAgICAgICAgICAgICAgPGRpdj4KKyAgICAgICAgICAgICAgICA8ZGl2PgorICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPSJ0aXRsZSI+PGEgaWQ9ImV2ZW50c3BlYyI+PC9hPjEuMi6gU3BlY2lmeWluZyBwZXJmb3JtYW5jZSBjb3VudGVyIGV2ZW50czwvaDM+CisgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICA8cD4KK1RoZSA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLWV2ZW50PC9jb2RlPiBvcHRpb24gdG8gPHNwYW4gY2xhc3M9ImNvbW1hbmQiPjxzdHJvbmc+b3Bjb250cm9sPC9zdHJvbmc+PC9zcGFuPgordGFrZXMgYSBzcGVjaWZpY2F0aW9uIHRoYXQgaW5kaWNhdGVzIGhvdyB0aGUgZGV0YWlscyBvZiBlYWNoCitoYXJkd2FyZSBwZXJmb3JtYW5jZSBjb3VudGVyIHNob3VsZCBiZSBzZXR1cC4gSWYgeW91IHdhbnQgdG8KK3JldmVydCB0byBPUHJvZmlsZSdzIGRlZmF1bHQgc2V0dGluZyAoPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1ldmVudDwvY29kZT4KK2lzIHN0cmljdGx5IG9wdGlvbmFsKSwgdXNlIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tZXZlbnQ9ZGVmYXVsdDwvY29kZT4uIFVzZSBvZiB0aGlzCitvcHRpb24gb3Zlci1yaWRlcyBhbGwgcHJldmlvdXMgZXZlbnQgc2VsZWN0aW9ucy4KKzwvcD4KKyAgICAgICAgICAgIDxwPgorWW91IGNhbiBwYXNzIG11bHRpcGxlIGV2ZW50IHNwZWNpZmljYXRpb25zLiBPUHJvZmlsZSB3aWxsIGFsbG9jYXRlCitoYXJkd2FyZSBjb3VudGVycyBhcyBuZWNlc3NhcnkuIE5vdGUgdGhhdCBzb21lIGNvbWJpbmF0aW9ucyBhcmUgbm90CithbGxvd2VkIGJ5IHRoZSBDUFU7IHJ1bm5pbmcgPHNwYW4gY2xhc3M9ImNvbW1hbmQiPjxzdHJvbmc+b3Bjb250cm9sIC0tbGlzdC1ldmVudHM8L3N0cm9uZz48L3NwYW4+IGdpdmVzIHRoZSBkZXRhaWxzCitvZiBlYWNoIGV2ZW50LiBUaGUgZXZlbnQgc3BlY2lmaWNhdGlvbiBpcyBhIGNvbG9uLXNlcGFyYXRlZCBzdHJpbmcKK29mIHRoZSBmb3JtIDxjb2RlIGNsYXNzPSJvcHRpb24iPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPm5hbWU8L2VtPjwvc3Bhbj46PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+Y291bnQ8L2VtPjwvc3Bhbj46PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+dW5pdG1hc2s8L2VtPjwvc3Bhbj46PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+a2VybmVsPC9lbT48L3NwYW4+OjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPnVzZXI8L2VtPjwvc3Bhbj48L2NvZGU+IGFzIGRlc2NyaWJlZCBpbiB0aGlzIHRhYmxlOgorPC9wPgorICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+CisgICAgICAgICAgICAgIDx0YWJsZSBib3JkZXI9IjEiPgorICAgICAgICAgICAgICAgIDxjb2xncm91cD4KKyAgICAgICAgICAgICAgICAgIDxjb2wgLz4KKyAgICAgICAgICAgICAgICAgIDxjb2wgLz4KKyAgICAgICAgICAgICAgICA8L2NvbGdyb3VwPgorICAgICAgICAgICAgICAgIDx0Ym9keT4KKyAgICAgICAgICAgICAgICAgIDx0cj4KKyAgICAgICAgICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPm5hbWU8L2NvZGU+CisgICAgICAgICAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICAgICAgICAgIDx0ZD5UaGUgc3ltYm9saWMgZXZlbnQgbmFtZSwgZS5nLiA8Y29kZSBjbGFzcz0iY29uc3RhbnQiPkNQVV9DTEtfVU5IQUxURUQ8L2NvZGU+PC90ZD4KKyAgICAgICAgICAgICAgICAgIDwvdHI+CisgICAgICAgICAgICAgICAgICA8dHI+CisgICAgICAgICAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj5jb3VudDwvY29kZT4KKyAgICAgICAgICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgICAgICAgICAgPHRkPlRoZSBjb3VudGVyIHJlc2V0IHZhbHVlLCBlLmcuIDEwMDAwMDwvdGQ+CisgICAgICAgICAgICAgICAgICA8L3RyPgorICAgICAgICAgICAgICAgICAgPHRyPgorICAgICAgICAgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgICAgICAgICAgPGNvZGUgY2xhc3M9Im9wdGlvbiI+dW5pdG1hc2s8L2NvZGU+CisgICAgICAgICAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICAgICAgICAgIDx0ZD5UaGUgdW5pdCBtYXNrLCBhcyBnaXZlbiBpbiB0aGUgZXZlbnRzIGxpc3Q6IGUuZy4gMHgwZjsgb3IgYSBzeW1ib2xpYyBuYW1lIGFzCitnaXZlbiBieSB0aGUgZmlyc3Qgd29yZCBvZiB0aGUgZGVzY3JpcHRpb24gKG9ubHkgdmFsaWQgZm9yIHVuaXQgbWFza3MgaGF2aW5nIGFuICJleHRyYToiIHBhcmFtZXRlcik8L3RkPgorICAgICAgICAgICAgICAgICAgPC90cj4KKyAgICAgICAgICAgICAgICAgIDx0cj4KKyAgICAgICAgICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPmtlcm5lbDwvY29kZT4KKyAgICAgICAgICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgICAgICAgICAgPHRkPldoZXRoZXIgdG8gcHJvZmlsZSBrZXJuZWwgY29kZTwvdGQ+CisgICAgICAgICAgICAgICAgICA8L3RyPgorICAgICAgICAgICAgICAgICAgPHRyPgorICAgICAgICAgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgICAgICAgICAgPGNvZGUgY2xhc3M9Im9wdGlvbiI+dXNlcjwvY29kZT4KKyAgICAgICAgICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgICAgICAgICAgPHRkPldoZXRoZXIgdG8gcHJvZmlsZSB1c2Vyc3BhY2UgY29kZTwvdGQ+CisgICAgICAgICAgICAgICAgICA8L3RyPgorICAgICAgICAgICAgICAgIDwvdGJvZHk+CisgICAgICAgICAgICAgIDwvdGFibGU+CisgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIDxwPgorVGhlIGxhc3QgdGhyZWUgdmFsdWVzIGFyZSBvcHRpb25hbCwgaWYgeW91IG9taXQgdGhlbSAoZS5nLiA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLWV2ZW50PURBVEFfTUVNX1JFRlM6MzAwMDA8L2NvZGU+KSwKK3RoZXkgd2lsbCBiZSBzZXQgdG8gdGhlIGRlZmF1bHQgdmFsdWVzIChhIHVuaXQgbWFzayBvZiAwLCBhbmQgcHJvZmlsaW5nIGJvdGgga2VybmVsIGFuZAordXNlcnNwYWNlIGNvZGUpLiBOb3RlIHRoYXQgc29tZSBldmVudHMgcmVxdWlyZSBhIHVuaXQgbWFzay4KKzwvcD4KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9Im5vdGUiIHRpdGxlPSJOb3RlIiBzdHlsZT0ibWFyZ2luLWxlZnQ6IDAuNWluOyBtYXJnaW4tcmlnaHQ6IDAuNWluOyI+CisgICAgICAgICAgICAgIDxoMyBjbGFzcz0idGl0bGUiPk5vdGU8L2gzPgorICAgICAgICAgICAgICA8cD4KK0ZvciB0aGUgUG93ZXJQQyBwbGF0Zm9ybXMsIGFsbCBldmVudHMgc3BlY2lmaWVkIG11c3QgYmUgaW4gdGhlIHNhbWUgZ3JvdXA7IGkuZS4sIHRoZSBncm91cCBudW1iZXIKK2FwcGVuZGVkIHRvIHRoZSBldmVudCBuYW1lIChlLmcuIDxjb2RlIGNsYXNzPSJjb25zdGFudCI+Jmx0OzxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPnNvbWUtZXZlbnQtbmFtZTwvZW0+PC9zcGFuPiZndDtfR1JQOTwvY29kZT4pIG11c3QgYmUgdGhlIHNhbWUuCis8L3A+CisgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIDxwPgorSWYgT1Byb2ZpbGUgaXMgdXNpbmcgUlRDIG1vZGUsIGFuZCB5b3Ugd2FudCB0byBhbHRlciB0aGUgZGVmYXVsdCBjb3VudGVyIHZhbHVlLAoreW91IGNhbiB1c2Ugc29tZXRoaW5nIGxpa2UgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1ldmVudD1SVENfSU5URVJSVVBUUzoyMDQ4PC9jb2RlPi4gTm90ZSB0aGUgbGFzdAordGhyZWUgdmFsdWVzIGhlcmUgYXJlIGlnbm9yZWQuCitJZiBPUHJvZmlsZSBpcyB1c2luZyB0aW1lci1pbnRlcnJ1cHQgbW9kZSwgdGhlcmUgaXMgbm8gY29uZmlndXJhdGlvbiBwb3NzaWJsZS4KKzwvcD4KKyAgICAgICAgICAgIDxwPgorVGhlIHRhYmxlIGJlbG93IGxpc3RzIHRoZSBldmVudHMgc2VsZWN0ZWQgYnkgZGVmYXVsdAorKDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tZXZlbnQ9ZGVmYXVsdDwvY29kZT4pIGZvciB0aGUgdmFyaW91cyBjb21wdXRlciBhcmNoaXRlY3R1cmVzOgorPC9wPgorICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+CisgICAgICAgICAgICAgIDx0YWJsZSBib3JkZXI9IjEiPgorICAgICAgICAgICAgICAgIDxjb2xncm91cD4KKyAgICAgICAgICAgICAgICAgIDxjb2wgLz4KKyAgICAgICAgICAgICAgICAgIDxjb2wgLz4KKyAgICAgICAgICAgICAgICAgIDxjb2wgLz4KKyAgICAgICAgICAgICAgICA8L2NvbGdyb3VwPgorICAgICAgICAgICAgICAgIDx0Ym9keT4KKyAgICAgICAgICAgICAgICAgIDx0cj4KKyAgICAgICAgICAgICAgICAgICAgPHRkPlByb2Nlc3NvcjwvdGQ+CisgICAgICAgICAgICAgICAgICAgIDx0ZD5jcHVfdHlwZTwvdGQ+CisgICAgICAgICAgICAgICAgICAgIDx0ZD5EZWZhdWx0IGV2ZW50PC90ZD4KKyAgICAgICAgICAgICAgICAgIDwvdHI+CisgICAgICAgICAgICAgICAgICA8dHI+CisgICAgICAgICAgICAgICAgICAgIDx0ZD5BbHBoYSBFVjQ8L3RkPgorICAgICAgICAgICAgICAgICAgICA8dGQ+YWxwaGEvZXY0PC90ZD4KKyAgICAgICAgICAgICAgICAgICAgPHRkPkNZQ0xFUzoxMDAwMDA6MDoxOjE8L3RkPgorICAgICAgICAgICAgICAgICAgPC90cj4KKyAgICAgICAgICAgICAgICAgIDx0cj4KKyAgICAgICAgICAgICAgICAgICAgPHRkPkFscGhhIEVWNTwvdGQ+CisgICAgICAgICAgICAgICAgICAgIDx0ZD5hbHBoYS9ldjU8L3RkPgorICAgICAgICAgICAgICAgICAgICA8dGQ+Q1lDTEVTOjEwMDAwMDowOjE6MTwvdGQ+CisgICAgICAgICAgICAgICAgICA8L3RyPgorICAgICAgICAgICAgICAgICAgPHRyPgorICAgICAgICAgICAgICAgICAgICA8dGQ+QWxwaGEgUENBNTY8L3RkPgorICAgICAgICAgICAgICAgICAgICA8dGQ+YWxwaGEvcGNhNTY8L3RkPgorICAgICAgICAgICAgICAgICAgICA8dGQ+Q1lDTEVTOjEwMDAwMDowOjE6MTwvdGQ+CisgICAgICAgICAgICAgICAgICA8L3RyPgorICAgICAgICAgICAgICAgICAgPHRyPgorICAgICAgICAgICAgICAgICAgICA8dGQ+QWxwaGEgRVY2PC90ZD4KKyAgICAgICAgICAgICAgICAgICAgPHRkPmFscGhhL2V2NjwvdGQ+CisgICAgICAgICAgICAgICAgICAgIDx0ZD5DWUNMRVM6MTAwMDAwOjA6MToxPC90ZD4KKyAgICAgICAgICAgICAgICAgIDwvdHI+CisgICAgICAgICAgICAgICAgICA8dHI+CisgICAgICAgICAgICAgICAgICAgIDx0ZD5BbHBoYSBFVjY3PC90ZD4KKyAgICAgICAgICAgICAgICAgICAgPHRkPmFscGhhL2V2Njc8L3RkPgorICAgICAgICAgICAgICAgICAgICA8dGQ+Q1lDTEVTOjEwMDAwMDowOjE6MTwvdGQ+CisgICAgICAgICAgICAgICAgICA8L3RyPgorICAgICAgICAgICAgICAgICAgPHRyPgorICAgICAgICAgICAgICAgICAgICA8dGQ+QVJNL1hTY2FsZSBQTVUxPC90ZD4KKyAgICAgICAgICAgICAgICAgICAgPHRkPmFybS94c2NhbGUxPC90ZD4KKyAgICAgICAgICAgICAgICAgICAgPHRkPkNQVV9DWUNMRVM6MTAwMDAwOjA6MToxPC90ZD4KKyAgICAgICAgICAgICAgICAgIDwvdHI+CisgICAgICAgICAgICAgICAgICA8dHI+CisgICAgICAgICAgICAgICAgICAgIDx0ZD5BUk0vWFNjYWxlIFBNVTI8L3RkPgorICAgICAgICAgICAgICAgICAgICA8dGQ+YXJtL3hzY2FsZTI8L3RkPgorICAgICAgICAgICAgICAgICAgICA8dGQ+Q1BVX0NZQ0xFUzoxMDAwMDA6MDoxOjE8L3RkPgorICAgICAgICAgICAgICAgICAgPC90cj4KKyAgICAgICAgICAgICAgICAgIDx0cj4KKyAgICAgICAgICAgICAgICAgICAgPHRkPkFSTS9NUENvcmU8L3RkPgorICAgICAgICAgICAgICAgICAgICA8dGQ+YXJtL21wY29yZTwvdGQ+CisgICAgICAgICAgICAgICAgICAgIDx0ZD5DUFVfQ1lDTEVTOjEwMDAwMDowOjE6MTwvdGQ+CisgICAgICAgICAgICAgICAgICA8L3RyPgorICAgICAgICAgICAgICAgICAgPHRyPgorICAgICAgICAgICAgICAgICAgICA8dGQ+QVZSMzI8L3RkPgorICAgICAgICAgICAgICAgICAgICA8dGQ+YXZyMzI8L3RkPgorICAgICAgICAgICAgICAgICAgICA8dGQ+Q1BVX0NZQ0xFUzoxMDAwMDA6MDoxOjE8L3RkPgorICAgICAgICAgICAgICAgICAgPC90cj4KKyAgICAgICAgICAgICAgICAgIDx0cj4KKyAgICAgICAgICAgICAgICAgICAgPHRkPkF0aGxvbjwvdGQ+CisgICAgICAgICAgICAgICAgICAgIDx0ZD5pMzg2L2F0aGxvbjwvdGQ+CisgICAgICAgICAgICAgICAgICAgIDx0ZD5DUFVfQ0xLX1VOSEFMVEVEOjEwMDAwMDowOjE6MTwvdGQ+CisgICAgICAgICAgICAgICAgICA8L3RyPgorICAgICAgICAgICAgICAgICAgPHRyPgorICAgICAgICAgICAgICAgICAgICA8dGQ+UGVudGl1bSBQcm88L3RkPgorICAgICAgICAgICAgICAgICAgICA8dGQ+aTM4Ni9wcHJvPC90ZD4KKyAgICAgICAgICAgICAgICAgICAgPHRkPkNQVV9DTEtfVU5IQUxURUQ6MTAwMDAwOjA6MToxPC90ZD4KKyAgICAgICAgICAgICAgICAgIDwvdHI+CisgICAgICAgICAgICAgICAgICA8dHI+CisgICAgICAgICAgICAgICAgICAgIDx0ZD5QZW50aXVtIElJPC90ZD4KKyAgICAgICAgICAgICAgICAgICAgPHRkPmkzODYvcGlpPC90ZD4KKyAgICAgICAgICAgICAgICAgICAgPHRkPkNQVV9DTEtfVU5IQUxURUQ6MTAwMDAwOjA6MToxPC90ZD4KKyAgICAgICAgICAgICAgICAgIDwvdHI+CisgICAgICAgICAgICAgICAgICA8dHI+CisgICAgICAgICAgICAgICAgICAgIDx0ZD5QZW50aXVtIElJSTwvdGQ+CisgICAgICAgICAgICAgICAgICAgIDx0ZD5pMzg2L3BpaWk8L3RkPgorICAgICAgICAgICAgICAgICAgICA8dGQ+Q1BVX0NMS19VTkhBTFRFRDoxMDAwMDA6MDoxOjE8L3RkPgorICAgICAgICAgICAgICAgICAgPC90cj4KKyAgICAgICAgICAgICAgICAgIDx0cj4KKyAgICAgICAgICAgICAgICAgICAgPHRkPlBlbnRpdW0gTSAoUDYgY29yZSk8L3RkPgorICAgICAgICAgICAgICAgICAgICA8dGQ+aTM4Ni9wNl9tb2JpbGU8L3RkPgorICAgICAgICAgICAgICAgICAgICA8dGQ+Q1BVX0NMS19VTkhBTFRFRDoxMDAwMDA6MDoxOjE8L3RkPgorICAgICAgICAgICAgICAgICAgPC90cj4KKyAgICAgICAgICAgICAgICAgIDx0cj4KKyAgICAgICAgICAgICAgICAgICAgPHRkPlBlbnRpdW0gNCAobm9uLUhUKTwvdGQ+CisgICAgICAgICAgICAgICAgICAgIDx0ZD5pMzg2L3A0PC90ZD4KKyAgICAgICAgICAgICAgICAgICAgPHRkPkdMT0JBTF9QT1dFUl9FVkVOVFM6MTAwMDAwOjE6MToxPC90ZD4KKyAgICAgICAgICAgICAgICAgIDwvdHI+CisgICAgICAgICAgICAgICAgICA8dHI+CisgICAgICAgICAgICAgICAgICAgIDx0ZD5QZW50aXVtIDQgKEhUKTwvdGQ+CisgICAgICAgICAgICAgICAgICAgIDx0ZD5pMzg2L3A0LWh0PC90ZD4KKyAgICAgICAgICAgICAgICAgICAgPHRkPkdMT0JBTF9QT1dFUl9FVkVOVFM6MTAwMDAwOjE6MToxPC90ZD4KKyAgICAgICAgICAgICAgICAgIDwvdHI+CisgICAgICAgICAgICAgICAgICA8dHI+CisgICAgICAgICAgICAgICAgICAgIDx0ZD5IYW1tZXI8L3RkPgorICAgICAgICAgICAgICAgICAgICA8dGQ+eDg2LTY0L2hhbW1lcjwvdGQ+CisgICAgICAgICAgICAgICAgICAgIDx0ZD5DUFVfQ0xLX1VOSEFMVEVEOjEwMDAwMDowOjE6MTwvdGQ+CisgICAgICAgICAgICAgICAgICA8L3RyPgorICAgICAgICAgICAgICAgICAgPHRyPgorICAgICAgICAgICAgICAgICAgICA8dGQ+RmFtaWx5MTBoPC90ZD4KKyAgICAgICAgICAgICAgICAgICAgPHRkPng4Ni02NC9mYW1pbHkxMDwvdGQ+CisgICAgICAgICAgICAgICAgICAgIDx0ZD5DUFVfQ0xLX1VOSEFMVEVEOjEwMDAwMDowOjE6MTwvdGQ+CisgICAgICAgICAgICAgICAgICA8L3RyPgorICAgICAgICAgICAgICAgICAgPHRyPgorICAgICAgICAgICAgICAgICAgICA8dGQ+RmFtaWx5MTFoPC90ZD4KKyAgICAgICAgICAgICAgICAgICAgPHRkPng4Ni02NC9mYW1pbHkxMWg8L3RkPgorICAgICAgICAgICAgICAgICAgICA8dGQ+Q1BVX0NMS19VTkhBTFRFRDoxMDAwMDA6MDoxOjE8L3RkPgorICAgICAgICAgICAgICAgICAgPC90cj4KKyAgICAgICAgICAgICAgICAgIDx0cj4KKyAgICAgICAgICAgICAgICAgICAgPHRkPkl0YW5pdW08L3RkPgorICAgICAgICAgICAgICAgICAgICA8dGQ+aWE2NC9pdGFuaXVtPC90ZD4KKyAgICAgICAgICAgICAgICAgICAgPHRkPkNQVV9DWUNMRVM6MTAwMDAwOjA6MToxPC90ZD4KKyAgICAgICAgICAgICAgICAgIDwvdHI+CisgICAgICAgICAgICAgICAgICA8dHI+CisgICAgICAgICAgICAgICAgICAgIDx0ZD5JdGFuaXVtIDI8L3RkPgorICAgICAgICAgICAgICAgICAgICA8dGQ+aWE2NC9pdGFuaXVtMjwvdGQ+CisgICAgICAgICAgICAgICAgICAgIDx0ZD5DUFVfQ1lDTEVTOjEwMDAwMDowOjE6MTwvdGQ+CisgICAgICAgICAgICAgICAgICA8L3RyPgorICAgICAgICAgICAgICAgICAgPHRyPgorICAgICAgICAgICAgICAgICAgICA8dGQ+VElNRVJfSU5UPC90ZD4KKyAgICAgICAgICAgICAgICAgICAgPHRkPnRpbWVyPC90ZD4KKyAgICAgICAgICAgICAgICAgICAgPHRkPk5vbmUgc2VsZWN0YWJsZTwvdGQ+CisgICAgICAgICAgICAgICAgICA8L3RyPgorICAgICAgICAgICAgICAgICAgPHRyPgorICAgICAgICAgICAgICAgICAgICA8dGQ+SUJNIGlzZXJpZXM8L3RkPgorICAgICAgICAgICAgICAgICAgICA8dGQ+UG93ZXJQQyA0LzUvOTcwPC90ZD4KKyAgICAgICAgICAgICAgICAgICAgPHRkPkNZQ0xFUzoxMDAwMDowOjE6MTwvdGQ+CisgICAgICAgICAgICAgICAgICA8L3RyPgorICAgICAgICAgICAgICAgICAgPHRyPgorICAgICAgICAgICAgICAgICAgICA8dGQ+SUJNIHBzZXJpZXM8L3RkPgorICAgICAgICAgICAgICAgICAgICA8dGQ+UG93ZXJQQyA0LzUvOTcwL0NlbGw8L3RkPgorICAgICAgICAgICAgICAgICAgICA8dGQ+Q1lDTEVTOjEwMDAwOjA6MToxPC90ZD4KKyAgICAgICAgICAgICAgICAgIDwvdHI+CisgICAgICAgICAgICAgICAgICA8dHI+CisgICAgICAgICAgICAgICAgICAgIDx0ZD5JQk0gczM5MDwvdGQ+CisgICAgICAgICAgICAgICAgICAgIDx0ZD50aW1lcjwvdGQ+CisgICAgICAgICAgICAgICAgICAgIDx0ZD5Ob25lIHNlbGVjdGFibGU8L3RkPgorICAgICAgICAgICAgICAgICAgPC90cj4KKyAgICAgICAgICAgICAgICAgIDx0cj4KKyAgICAgICAgICAgICAgICAgICAgPHRkPklCTSBzMzkweDwvdGQ+CisgICAgICAgICAgICAgICAgICAgIDx0ZD50aW1lcjwvdGQ+CisgICAgICAgICAgICAgICAgICAgIDx0ZD5Ob25lIHNlbGVjdGFibGU8L3RkPgorICAgICAgICAgICAgICAgICAgPC90cj4KKyAgICAgICAgICAgICAgICA8L3Rib2R5PgorICAgICAgICAgICAgICA8L3RhYmxlPgorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgPC9kaXY+CisgICAgICAgIDwvZGl2PgorICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0MSIgdGl0bGU9IjIuoFNldHRpbmcgdXAgdGhlIEpJVCBwcm9maWxpbmcgZmVhdHVyZSI+CisgICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KKyAgICAgICAgICAgIDxkaXY+CisgICAgICAgICAgICAgIDxkaXY+CisgICAgICAgICAgICAgICAgPGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj48YSBpZD0ic2V0dXAtaml0Ij48L2E+Mi6gU2V0dGluZyB1cCB0aGUgSklUIHByb2ZpbGluZyBmZWF0dXJlPC9oMj4KKyAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICA8cD4KKwkJVG8gZ2F0aGVyIGluZm9ybWF0aW9uIGFib3V0IEpJVGVkIGNvZGUgZnJvbSBhIHZpcnR1YWwgbWFjaGluZSwKKwkJaXQgbmVlZHMgdG8gYmUgaW5zdHJ1bWVudGVkIHdpdGggYW4gYWdlbnQgbGlicmFyeS4gV2UgdXNlIHRoZQorCQlhZ2VudCBsaWJyYXJpZXMgZm9yIEphdmEgaW4gdGhlIGZvbGxvd2luZyBleGFtcGxlLiBUbyB1c2UgdGhlCisJCUphdmEgcHJvZmlsaW5nIGZlYXR1cmUsIHlvdSBtdXN0IGJ1aWxkIE9Qcm9maWxlIHdpdGggdGhlICItLXdpdGgtamF2YSIgb3B0aW9uCisgICAgICAgICAgICAgICAgKDxhIGNsYXNzPSJ4cmVmIiBocmVmPSIjaW5zdGFsbCIgdGl0bGU9IjQuoEluc3RhbGxhdGlvbiI+U2VjdGlvbqA0LCAmIzgyMjA7SW5zdGFsbGF0aW9uJiM4MjIxOzwvYT4pLgorCisJPC9wPgorICAgICAgICAgIDxkaXYgY2xhc3M9InNlY3QyIiB0aXRsZT0iMi4xLqBKVk0gaW5zdHJ1bWVudGF0aW9uIj4KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlcGFnZSI+CisgICAgICAgICAgICAgIDxkaXY+CisgICAgICAgICAgICAgICAgPGRpdj4KKyAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz0idGl0bGUiPjxhIGlkPSJzZXR1cC1qaXQtanZtIj48L2E+Mi4xLqBKVk0gaW5zdHJ1bWVudGF0aW9uPC9oMz4KKyAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIDxwPgorCQkJQWRkIHRoaXMgdG8gdGhlIHN0YXJ0dXAgcGFyYW1ldGVycyBvZiB0aGUgSlZNIChmb3IgSlZNVEkpOgorCisJCQk8L3A+CisgICAgICAgICAgICA8dGFibGUgeG1sbnM9IiIgYm9yZGVyPSIwIiBzdHlsZT0iYmFja2dyb3VuZDogI0UwRTBFMDsiIHdpZHRoPSI5MCUiPgorICAgICAgICAgICAgICA8dHI+CisgICAgICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICAgICAgPHByZSBjbGFzcz0ic2NyZWVuIj48Y29kZSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgY2xhc3M9Im9wdGlvbiI+LWFnZW50cGF0aDombHQ7bGliZGlyJmd0Oy9saWJqdm10aV9vcHJvZmlsZS5zb1s9Jmx0O29wdGlvbnMmZ3Q7XTwvY29kZT4gPC9wcmU+CisgICAgICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgICAgPC90cj4KKyAgICAgICAgICAgIDwvdGFibGU+CisgICAgICAgICAgICA8cD4KKwkJCW9yCisJCQk8L3A+CisgICAgICAgICAgICA8dGFibGUgeG1sbnM9IiIgYm9yZGVyPSIwIiBzdHlsZT0iYmFja2dyb3VuZDogI0UwRTBFMDsiIHdpZHRoPSI5MCUiPgorICAgICAgICAgICAgICA8dHI+CisgICAgICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICAgICAgPHByZSBjbGFzcz0ic2NyZWVuIj48Y29kZSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgY2xhc3M9Im9wdGlvbiI+LWFnZW50bGliOmp2bXRpX29wcm9maWxlWz0mbHQ7b3B0aW9ucyZndDtdPC9jb2RlPiA8L3ByZT4KKyAgICAgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgICA8L3RyPgorICAgICAgICAgICAgPC90YWJsZT4KKyAgICAgICAgICAgIDxwPgorCQk8L3A+CisgICAgICAgICAgICA8cD4KKwkJCVRoZSBKVk1QSSBhZ2VudCBpbXBsZW1lbnRhdGlvbiBpcyBlbmFibGVkIHdpdGggdGhlIGNvbW1hbmQgbGluZSBvcHRpb24KKwkJCTwvcD4KKyAgICAgICAgICAgIDx0YWJsZSB4bWxucz0iIiBib3JkZXI9IjAiIHN0eWxlPSJiYWNrZ3JvdW5kOiAjRTBFMEUwOyIgd2lkdGg9IjkwJSI+CisgICAgICAgICAgICAgIDx0cj4KKyAgICAgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgICAgICA8cHJlIGNsYXNzPSJzY3JlZW4iPjxjb2RlIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBjbGFzcz0ib3B0aW9uIj4tWHJ1bmp2bXBpX29wcm9maWxlWzombHQ7b3B0aW9ucyZndDtdPC9jb2RlPiA8L3ByZT4KKyAgICAgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgICA8L3RyPgorICAgICAgICAgICAgPC90YWJsZT4KKyAgICAgICAgICAgIDxwPgorCQk8L3A+CisgICAgICAgICAgICA8cD4KKwkJCUN1cnJlbnRseSwgdGhlcmUgaXMganVzdCBvbmUgb3B0aW9uIGF2YWlsYWJsZSAtLSA8Y29kZSBjbGFzcz0ib3B0aW9uIj5kZWJ1ZzwvY29kZT4uIEZvciBKVk1QSSwKKwkJCXRoZSBjb252ZW50aW9uIGZvciBzcGVjaWZ5aW5nIGFuIG9wdGlvbiBpcyA8Y29kZSBjbGFzcz0ib3B0aW9uIj5vcHRpb25fbmFtZT1beWVzfG5vXTwvY29kZT4uCisJCQlGb3IgSlZNVEksIHRoZSBvcHRpb24gc3BlY2lmaWNhdGlvbiBpcyBzaW1wbHkgdGhlIG9wdGlvbiBuYW1lLCBpbXBseWluZworCQkJInllcyI7IG5vIG9wdGlvbiBzcGVjaWZpZWQgaW1wbGllcyAibm8iLgorCQk8L3A+CisgICAgICAgICAgICA8cD4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBhZ2VudCBsaWJyYXJ5IChpbnN0YWxsZWQgaW4gPGNvZGUgY2xhc3M9ImZpbGVuYW1lIj4mbHQ7b3Byb2ZfaW5zdGFsbF9kaXImZ3Q7L2xpYi9vcHJvZmlsZTwvY29kZT4pCisgICAgICAgICAgICAgICAgICAgICAgICBuZWVkcyB0byBiZSBpbiB0aGUgbGlicmFyeSBzZWFyY2ggcGF0aCAoZS5nLiBhZGQgdGhlIGxpYnJhcnkgZGlyZWN0b3J5CisgICAgICAgICAgICAgICAgICAgICAgICB0byA8Y29kZSBjbGFzcz0iY29uc3RhbnQiPkxEX0xJQlJBUllfUEFUSDwvY29kZT4pLiBJZiB0aGUgY29tbWFuZCBsaW5lIG9mCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgSlZNIGlzIG5vdCBhY2Nlc3NpYmxlLCBpdCBtYXkgYmUgYnVyaWVkIHdpdGhpbiBzaGVsbCBzY3JpcHRzIG9yIGEKKyAgICAgICAgICAgICAgICAgICAgICAgIGxhdW5jaGVyIHByb2dyYW0uIEl0IG1heSBhbHNvIGJlIHBvc3NpYmxlIHRvIHNldCBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byBhZGQKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBpbnN0cnVtZW50YXRpb24uCisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgU3VuIEpWTXMgdGhpcyBpcyA8Y29kZSBjbGFzcz0iY29uc3RhbnQiPkpBVkFfVE9PTF9PUFRJT05TPC9jb2RlPi4gUGxlYXNlIGNoZWNrCisgICAgICAgICAgICAgICAgICAgICAgICB5b3VyIEpWTSBkb2N1bWVudGF0aW9uIGZvcgorICAgICAgICAgICAgICAgICAgICAgICAgZnVydGhlciBpbmZvcm1hdGlvbiBvbiB0aGUgYWdlbnQgc3RhcnR1cCBvcHRpb25zLgorICAgICAgICAgICAgICAgIDwvcD4KKyAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgPC9kaXY+CisgICAgICAgIDxkaXYgY2xhc3M9InNlY3QxIiB0aXRsZT0iMy6gVXNpbmcgb3Byb2Zfc3RhcnQiPgorICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlcGFnZSI+CisgICAgICAgICAgICA8ZGl2PgorICAgICAgICAgICAgICA8ZGl2PgorICAgICAgICAgICAgICAgIDxoMiBjbGFzcz0idGl0bGUiIHN0eWxlPSJjbGVhcjogYm90aCI+PGEgaWQ9Im9wcm9maWxlLWd1aSI+PC9hPjMuoFVzaW5nIDxzcGFuIGNsYXNzPSJjb21tYW5kIj48c3Ryb25nPm9wcm9mX3N0YXJ0PC9zdHJvbmc+PC9zcGFuPjwvaDI+CisgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgPHA+CitUaGUgPHNwYW4gY2xhc3M9ImNvbW1hbmQiPjxzdHJvbmc+b3Byb2Zfc3RhcnQ8L3N0cm9uZz48L3NwYW4+IGFwcGxpY2F0aW9uIHByb3ZpZGVzIGEgY29udmVuaWVudCB3YXkgdG8gc3RhcnQgdGhlIHByb2ZpbGVyLgorTm90ZSB0aGF0IDxzcGFuIGNsYXNzPSJjb21tYW5kIj48c3Ryb25nPm9wcm9mX3N0YXJ0PC9zdHJvbmc+PC9zcGFuPiBpcyBqdXN0IGEgd3JhcHBlciBhcm91bmQgdGhlIDxzcGFuIGNsYXNzPSJjb21tYW5kIj48c3Ryb25nPm9wY29udHJvbDwvc3Ryb25nPjwvc3Bhbj4gc2NyaXB0LAorc28gaXQgZG9lcyBub3QgcHJvdmlkZSBtb3JlIHNlcnZpY2VzIHRoYW4gdGhlIHNjcmlwdCBpdHNlbGYuCis8L3A+CisgICAgICAgICAgPHA+CitBZnRlciA8c3BhbiBjbGFzcz0iY29tbWFuZCI+PHN0cm9uZz5vcHJvZl9zdGFydDwvc3Ryb25nPjwvc3Bhbj4gaXMgc3RhcnRlZCB5b3UgY2FuIHNlbGVjdCB0aGUgZXZlbnQgdHlwZSBmb3IgZWFjaCBjb3VudGVyOwordGhlIHNhbXBsaW5nIHJhdGUgYW5kIG90aGVyIHJlbGF0ZWQgcGFyYW1ldGVycyBhcmUgZXhwbGFpbmVkIGluIDxhIGNsYXNzPSJ4cmVmIiBocmVmPSIjY29udHJvbGxpbmctZGFlbW9uIiB0aXRsZT0iMS6gVXNpbmcgb3Bjb250cm9sIj5TZWN0aW9uoDEsICYjODIyMDtVc2luZyA8c3BhbiBjbGFzcz0iY29tbWFuZCI+PHN0cm9uZz5vcGNvbnRyb2w8L3N0cm9uZz48L3NwYW4+JiM4MjIxOzwvYT4uCitUaGUgIkNvbmZpZ3VyYXRpb24iIHNlY3Rpb24gYWxsb3dzIHlvdSB0byBzZXQgZ2VuZXJhbCBwYXJhbWV0ZXJzIHN1Y2ggYXMgdGhlIGJ1ZmZlciBzaXplLCBrZXJuZWwgZmlsZW5hbWUKK2V0Yy4gVGhlIGNvdW50ZXIgc2V0dXAgaW50ZXJmYWNlIHNob3VsZCBiZSBzZWxmLWV4cGxhbmF0b3J5OyA8YSBjbGFzcz0ieHJlZiIgaHJlZj0iI2hhcmR3YXJlLWNvdW50ZXJzIiB0aXRsZT0iNC4xLqBIYXJkd2FyZSBwZXJmb3JtYW5jZSBjb3VudGVycyI+U2VjdGlvbqA0LjEsICYjODIyMDtIYXJkd2FyZSBwZXJmb3JtYW5jZSBjb3VudGVycyYjODIyMTs8L2E+IGFuZCByZWxhdGVkIAorbGlua3MgY29udGFpbiBpbmZvcm1hdGlvbiBvbiB1c2luZyB1bml0IG1hc2tzLgorPC9wPgorICAgICAgICAgIDxwPgorQSBzdGF0dXMgbGluZSBzaG93cyB0aGUgY3VycmVudCBzdGF0dXMgb2YgdGhlIHByb2ZpbGVyOiBob3cgbG9uZyBpdCBoYXMgYmVlbiBydW5uaW5nLCBhbmQgdGhlIGF2ZXJhZ2UKK251bWJlciBvZiBpbnRlcnJ1cHRzIHJlY2VpdmVkIHBlciBzZWNvbmQgYW5kIHRoZSB0b3RhbCwgb3ZlciBhbGwgcHJvY2Vzc29ycy4KK05vdGUgdGhhdCBxdWl0dGluZyA8c3BhbiBjbGFzcz0iY29tbWFuZCI+PHN0cm9uZz5vcHJvZl9zdGFydDwvc3Ryb25nPjwvc3Bhbj4gZG9lcyBub3Qgc3RvcCB0aGUgcHJvZmlsZXIuCis8L3A+CisgICAgICAgICAgPHA+CitZb3VyIGNvbmZpZ3VyYXRpb24gaXMgc2F2ZWQgaW4gdGhlIHNhbWUgZmlsZSBhcyA8c3BhbiBjbGFzcz0iY29tbWFuZCI+PHN0cm9uZz5vcGNvbnRyb2w8L3N0cm9uZz48L3NwYW4+IHVzZXM7IHRoYXQgaXMsCis8Y29kZSBjbGFzcz0iZmlsZW5hbWUiPn4vLm9wcm9maWxlL2RhZW1vbnJjPC9jb2RlPi4KKzwvcD4KKyAgICAgICAgPC9kaXY+CisgICAgICAgIDxkaXYgY2xhc3M9InNlY3QxIiB0aXRsZT0iNC6gQ29uZmlndXJhdGlvbiBkZXRhaWxzIj4KKyAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgorICAgICAgICAgICAgPGRpdj4KKyAgICAgICAgICAgICAgPGRpdj4KKyAgICAgICAgICAgICAgICA8aDIgY2xhc3M9InRpdGxlIiBzdHlsZT0iY2xlYXI6IGJvdGgiPjxhIGlkPSJkZXRhaWxlZC1wYXJhbWV0ZXJzIj48L2E+NC6gQ29uZmlndXJhdGlvbiBkZXRhaWxzPC9oMj4KKyAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0MiIgdGl0bGU9IjQuMS6gSGFyZHdhcmUgcGVyZm9ybWFuY2UgY291bnRlcnMiPgorICAgICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KKyAgICAgICAgICAgICAgPGRpdj4KKyAgICAgICAgICAgICAgICA8ZGl2PgorICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPSJ0aXRsZSI+PGEgaWQ9ImhhcmR3YXJlLWNvdW50ZXJzIj48L2E+NC4xLqBIYXJkd2FyZSBwZXJmb3JtYW5jZSBjb3VudGVyczwvaDM+CisgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJub3RlIiB0aXRsZT0iTm90ZSIgc3R5bGU9Im1hcmdpbi1sZWZ0OiAwLjVpbjsgbWFyZ2luLXJpZ2h0OiAwLjVpbjsiPgorICAgICAgICAgICAgICA8aDMgY2xhc3M9InRpdGxlIj5Ob3RlPC9oMz4KKyAgICAgICAgICAgICAgPHA+CitZb3VyIENQVSB0eXBlIG1heSBub3QgaW5jbHVkZSB0aGUgcmVxdWlzaXRlIHN1cHBvcnQgZm9yIGhhcmR3YXJlIHBlcmZvcm1hbmNlIGNvdW50ZXJzLCBpbiB3aGljaCBjYXNlCit5b3UgbXVzdCB1c2UgT1Byb2ZpbGUgaW4gUlRDIG1vZGUgaW4gMi40IChzZWUgPGEgY2xhc3M9InhyZWYiIGhyZWY9IiNydGMiIHRpdGxlPSI0LjIuoE9Qcm9maWxlIGluIFJUQyBtb2RlIj5TZWN0aW9uoDQuMiwgJiM4MjIwO09Qcm9maWxlIGluIFJUQyBtb2RlJiM4MjIxOzwvYT4pLCBvciB0aW1lciBtb2RlIGluIDIuNiAoc2VlIDxhIGNsYXNzPSJ4cmVmIiBocmVmPSIjdGltZXIiIHRpdGxlPSI0LjMuoE9Qcm9maWxlIGluIHRpbWVyIGludGVycnVwdCBtb2RlIj5TZWN0aW9uoDQuMywgJiM4MjIwO09Qcm9maWxlIGluIHRpbWVyIGludGVycnVwdCBtb2RlJiM4MjIxOzwvYT4pLiAKK1lvdSBkbyBub3QgcmVhbGx5IG5lZWQgdG8gcmVhZCB0aGlzIHNlY3Rpb24gdW5sZXNzIHlvdSBhcmUgaW50ZXJlc3RlZCBpbiB1c2luZyAKK2V2ZW50cyBvdGhlciB0aGFuIHRoZSBkZWZhdWx0IGV2ZW50IGNob3NlbiBieSBPUHJvZmlsZS4KKzwvcD4KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgPHA+CitUaGUgSW50ZWwgaGFyZHdhcmUgcGVyZm9ybWFuY2UgY291bnRlcnMgYXJlIGRldGFpbGVkIGluIHRoZSBJbnRlbCBJQS0zMiBBcmNoaXRlY3R1cmUgTWFudWFsLCBWb2x1bWUgMywgYXZhaWxhYmxlCitmcm9tIDxhIGNsYXNzPSJ1bGluayIgaHJlZj0iaHR0cDovL2RldmVsb3Blci5pbnRlbC5jb20vIj5odHRwOi8vZGV2ZWxvcGVyLmludGVsLmNvbS88L2E+LiAKK1RoZSBBTUQgQXRobG9uL09wdGVyb24vUGhlbm9tL1R1cmlvbiBpbXBsZW1lbnRhdGlvbiBpcyBkZXRhaWxlZCBpbiA8YSBjbGFzcz0idWxpbmsiIGhyZWY9Imh0dHA6Ly93d3cuYW1kLmNvbS91cy1lbi9hc3NldHMvY29udGVudF90eXBlL3doaXRlX3BhcGVyc19hbmRfdGVjaF9kb2NzLzIyMDA3LnBkZiI+CitodHRwOi8vd3d3LmFtZC5jb20vdXMtZW4vYXNzZXRzL2NvbnRlbnRfdHlwZS93aGl0ZV9wYXBlcnNfYW5kX3RlY2hfZG9jcy8yMjAwNy5wZGY8L2E+LgorRm9yIFBvd2VyUEM2NCBwcm9jZXNzb3JzIGluIElCTSBpU2VyaWVzLCBwU2VyaWVzLCBhbmQgYmxhZGUgc2VydmVyIHN5c3RlbXMsIHByb2Nlc3NvciBkb2N1bWVudGF0aW9uCitpcyBhdmFpbGFibGUgYXQgPGEgY2xhc3M9InVsaW5rIiBocmVmPSJodHRwOi8vd3d3LTAxLmlibS5jb20vY2hpcHMvdGVjaGxpYi90ZWNobGliLm5zZi9wcm9kdWN0ZmFtaWxpZXMvUG93ZXJQQy8iPgoraHR0cDovL3d3dy0wMS5pYm0uY29tL2NoaXBzL3RlY2hsaWIvdGVjaGxpYi5uc2YvcHJvZHVjdGZhbWlsaWVzL1Bvd2VyUEM8L2E+LiAgKEZvciBleGFtcGxlLCB0aGUKK3NwZWNpZmljIHB1YmxpY2F0aW9uIGNvbnRhaW5pbmcgaW5mb3JtYXRpb24gb24gdGhlIHBlcmZvcm1hbmNlIG1vbml0b3IgdW5pdCBmb3IgdGhlIFBvd2VyUEM5NzAgaXMgCisiSUJNIFBvd2VyUEMgOTcwRlggUklTQyBNaWNyb3Byb2Nlc3NvciBVc2VyJ3MgTWFudWFsLiIpCitUaGVzZSBwcm9jZXNzb3JzIGFyZSBjYXBhYmxlIG9mIGRlbGl2ZXJpbmcgYW4gaW50ZXJydXB0IHdoZW4gYSBjb3VudGVyIG92ZXJmbG93cy4KK1RoaXMgaXMgdGhlIGJhc2ljIG1lY2hhbmlzbSBvbiB3aGljaCBPUHJvZmlsZSBpcyBiYXNlZC4gVGhlIGRlbGl2ZXJ5IG1vZGUgaXMgPGFjcm9ueW0gY2xhc3M9ImFjcm9ueW0iPk5NSTwvYWNyb255bT4sCitzbyBibG9ja2luZyBpbnRlcnJ1cHRzIGluIHRoZSBrZXJuZWwgZG9lcyBub3QgcHJldmVudCBwcm9maWxpbmcuIFdoZW4gdGhlIGludGVycnVwdCBoYW5kbGVyIGlzIGNhbGxlZCwKK3RoZSBjdXJyZW50IDxhY3JvbnltIGNsYXNzPSJhY3JvbnltIj5QQzwvYWNyb255bT4gdmFsdWUgYW5kIHRoZSBjdXJyZW50IHRhc2sgYXJlIHJlY29yZGVkIGludG8gdGhlIHByb2ZpbGluZyBzdHJ1Y3R1cmUuCitUaGlzIGFsbG93cyB0aGUgb3ZlcmZsb3cgZXZlbnQgdG8gYmUgYXR0YWNoZWQgdG8gYSBzcGVjaWZpYyBhc3NlbWJseSBpbnN0cnVjdGlvbiBpbiBhIGJpbmFyeSBpbWFnZS4KK1RoZSBkYWVtb24gcmVjZWl2ZXMgdGhpcyBkYXRhIGZyb20gdGhlIGtlcm5lbCwgYW5kIHdyaXRlcyBpdCB0byB0aGUgc2FtcGxlIGZpbGVzLgorPC9wPgorICAgICAgICAgICAgPHA+CitJZiB3ZSB1c2UgYW4gZXZlbnQgc3VjaCBhcyA8Y29kZSBjbGFzcz0iY29uc3RhbnQiPkNQVV9DTEtfVU5IQUxURUQ8L2NvZGU+IG9yIDxjb2RlIGNsYXNzPSJjb25zdGFudCI+SU5TVF9SRVRJUkVEPC9jb2RlPgorKDxjb2RlIGNsYXNzPSJjb25zdGFudCI+R0xPQkFMX1BPV0VSX0VWRU5UUzwvY29kZT4gb3IgPGNvZGUgY2xhc3M9ImNvbnN0YW50Ij5JTlNUUl9SRVRJUkVEPC9jb2RlPiwgcmVzcGVjdGl2ZWx5LCBvbiB0aGUgUGVudGl1bSA0KSwgd2UgY2FuCit1c2UgdGhlIG92ZXJmbG93IGNvdW50cyBhcyBhbiBlc3RpbWF0ZSBvZiBhY3R1YWwgdGltZSBzcGVudCBpbiBlYWNoIHBhcnQgb2YgY29kZS4gQWx0ZXJuYXRpdmVseSB3ZSBjYW4gcHJvZmlsZSBpbnRlcmVzdGluZworZGF0YSBzdWNoIGFzIHRoZSBjYWNoZSBiZWhhdmlvdXIgb2Ygcm91dGluZXMgd2l0aCB0aGUgb3RoZXIgYXZhaWxhYmxlIGNvdW50ZXJzLgorPC9wPgorICAgICAgICAgICAgPHA+CitIb3dldmVyIHRoZXJlIGFyZSBzZXZlcmFsIGNhdmVhdHMuIEZpcnN0LCB0aGVyZSBhcmUgdGhvc2UgaXNzdWVzIGxpc3RlZCBpbiB0aGUgSW50ZWwgbWFudWFsLiBUaGVyZSBpcyBhIGRlbGF5CitiZXR3ZWVuIHRoZSBjb3VudGVyIG92ZXJmbG93IGFuZCB0aGUgaW50ZXJydXB0IGRlbGl2ZXJ5IHRoYXQgY2FuIHNrZXcgcmVzdWx0cyBvbiBhIHNtYWxsIHNjYWxlIC0gdGhpcyBtZWFucworeW91IGNhbm5vdCByZWx5IG9uIHRoZSBwcm9maWxlcyBhdCB0aGUgaW5zdHJ1Y3Rpb24gbGV2ZWwgYXMgYmVpbmcgcGVyZmVjdGx5IGFjY3VyYXRlLgorSWYgeW91IGFyZSB1c2luZyBhbiAiZXZlbnQtbW9kZSIgY291bnRlciBzdWNoIGFzIHRoZSBjYWNoZSBjb3VudGVycywgYSBjb3VudCByZWdpc3RlcmVkIGFnYWluc3QgaXQgZG9lc24ndCBtZWFuCit0aGF0IGl0IGlzIHJlc3BvbnNpYmxlIGZvciB0aGF0IGV2ZW50LiBIb3dldmVyLCBpdCBpbXBsaWVzIHRoYXQgdGhlIGNvdW50ZXIgb3ZlcmZsb3dlZCBpbiB0aGUgZHluYW1pYwordmljaW5pdHkgb2YgdGhhdCBpbnN0cnVjdGlvbiwgdG8gd2l0aGluIGEgZmV3IGluc3RydWN0aW9ucy4gRnVydGhlciBkZXRhaWxzIG9uIHRoaXMgcHJvYmxlbSBjYW4gYmUgZm91bmQgaW4gCis8YSBjbGFzcz0ieHJlZiIgaHJlZj0iI2ludGVycHJldGluZyIgdGl0bGU9IkNoYXB0ZXKgNS6gSW50ZXJwcmV0aW5nIHByb2ZpbGluZyByZXN1bHRzIj5DaGFwdGVyoDUsIDxpPkludGVycHJldGluZyBwcm9maWxpbmcgcmVzdWx0czwvaT48L2E+IGFuZCBhbHNvIGluIHRoZSBEaWdpdGFsIHBhcGVyICJQcm9maWxlTWU6IEEgSGFyZHdhcmUgUGVyZm9ybWFuY2UgQ291bnRlciIuCis8L3A+CisgICAgICAgICAgICA8cD4KK0VhY2ggY291bnRlciBoYXMgc2V2ZXJhbCBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMuCitGaXJzdCwgdGhlcmUgaXMgdGhlIHVuaXQgbWFzazogdGhpcyBzaW1wbHkgZnVydGhlciBzcGVjaWZpZXMgd2hhdCB0byBjb3VudC4KK1NlY29uZCwgdGhlcmUgaXMgdGhlIGNvdW50ZXIgdmFsdWUsIGRpc2N1c3NlZCBiZWxvdy4gVGhpcmQsIHRoZXJlIGlzIGEgcGFyYW1ldGVyIHdoZXRoZXIgdG8gaW5jcmVtZW50IGNvdW50cword2hpbHN0IGluIGtlcm5lbCBvciB1c2VyIHNwYWNlLiBZb3UgY2FuIGNvbmZpZ3VyZSB0aGVzZSBzZXBhcmF0ZWx5IGZvciBlYWNoIGNvdW50ZXIuCis8L3A+CisgICAgICAgICAgICA8cD4KK0FmdGVyIGVhY2ggb3ZlcmZsb3cgZXZlbnQsIHRoZSBjb3VudGVyIHdpbGwgYmUgcmUtaW5pdGlhbGl6ZWQKK3N1Y2ggdGhhdCBhbm90aGVyIG92ZXJmbG93IHdpbGwgb2NjdXIgYWZ0ZXIgdGhpcyBtYW55IGV2ZW50cyBoYXZlIGJlZW4gY291bnRlZC4gVGh1cywgaGlnaGVyCit2YWx1ZXMgbWVhbiBsZXNzLWRldGFpbGVkIHByb2ZpbGluZywgYW5kIGxvd2VyIHZhbHVlcyBtZWFuIG1vcmUgZGV0YWlsLCBidXQgaGlnaGVyIG92ZXJoZWFkLgorUGlja2luZyBhIGdvb2QgdmFsdWUgZm9yIHRoaXMKK3BhcmFtZXRlciBpcywgdW5mb3J0dW5hdGVseSwgc29tZXdoYXQgb2YgYSBibGFjayBhcnQuIEl0IGlzIG9mIGNvdXJzZSBkZXBlbmRlbnQgb24gdGhlIGV2ZW50Cit5b3UgaGF2ZSBjaG9zZW4uCitTcGVjaWZ5aW5nIHRvbyBsYXJnZSBhIHZhbHVlIHdpbGwgbWVhbiBub3QgZW5vdWdoIGludGVycnVwdHMgYXJlIGdlbmVyYXRlZAordG8gZ2l2ZSBhIHJlYWxpc3RpYyBwcm9maWxlICh0aG91Z2ggdGhpcyBwcm9ibGVtIGNhbiBiZSBhbWVsaW9yYXRlZCBieSBwcm9maWxpbmcgZm9yIDxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPmxvbmdlcjwvZW0+PC9zcGFuPikuCitTcGVjaWZ5aW5nIHRvbyBzbWFsbCBhIHZhbHVlIGNhbiBsZWFkIHRvIGhpZ2hlciBwZXJmb3JtYW5jZSBvdmVyaGVhZC4KKzwvcD4KKyAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0MiIgdGl0bGU9IjQuMi6gT1Byb2ZpbGUgaW4gUlRDIG1vZGUiPgorICAgICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KKyAgICAgICAgICAgICAgPGRpdj4KKyAgICAgICAgICAgICAgICA8ZGl2PgorICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPSJ0aXRsZSI+PGEgaWQ9InJ0YyI+PC9hPjQuMi6gT1Byb2ZpbGUgaW4gUlRDIG1vZGU8L2gzPgorICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgPGRpdiBjbGFzcz0ibm90ZSIgdGl0bGU9Ik5vdGUiIHN0eWxlPSJtYXJnaW4tbGVmdDogMC41aW47IG1hcmdpbi1yaWdodDogMC41aW47Ij4KKyAgICAgICAgICAgICAgPGgzIGNsYXNzPSJ0aXRsZSI+Tm90ZTwvaDM+CisgICAgICAgICAgICAgIDxwPgorVGhpcyBzZWN0aW9uIGFwcGxpZXMgdG8gMi4yLzIuNCBrZXJuZWxzIG9ubHkuCis8L3A+CisgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIDxwPgorU29tZSBDUFUgdHlwZXMgZG8gbm90IHByb3ZpZGUgdGhlIG5lZWRlZCBoYXJkd2FyZSBzdXBwb3J0IHRvIHVzZSB0aGUgaGFyZHdhcmUgcGVyZm9ybWFuY2UgY291bnRlcnMuIFRoaXMgaW5jbHVkZXMKK3NvbWUgbGFwdG9wcywgY2xhc3NpYyBQZW50aXVtcywgYW5kIG90aGVyIENQVSB0eXBlcyBub3QgeWV0IHN1cHBvcnRlZCBieSBPUHJvZmlsZSAoc3VjaCBhcyBDeXJpeCkuIAorT24gdGhlc2UgbWFjaGluZXMsIE9Qcm9maWxlIGZhbGxzCitiYWNrIHRvIHVzaW5nIHRoZSByZWFsLXRpbWUgY2xvY2sgaW50ZXJydXB0IHRvIGNvbGxlY3Qgc2FtcGxlcy4gVGhpcyBpbnRlcnJ1cHQgaXMgYWxzbyB1c2VkIGJ5IHRoZSA8c3BhbiBjbGFzcz0iY29tbWFuZCI+PHN0cm9uZz5ydGM8L3N0cm9uZz48L3NwYW4+Cittb2R1bGU6IHlvdSBjYW5ub3QgaGF2ZSBib3RoIHRoZSBPUHJvZmlsZSBhbmQgcnRjIG1vZHVsZXMgbG9hZGVkIG5vciB0aGUgcnRjIHN1cHBvcnQgY29tcGlsZWQgaW4gdGhlIGtlcm5lbC4KKzwvcD4KKyAgICAgICAgICAgIDxwPgorUlRDIG1vZGUgaXMgbGVzcyBjYXBhYmxlIHRoYW4gdGhlIGhhcmR3YXJlIGNvdW50ZXJzIG1vZGU7IGluIHBhcnRpY3VsYXIsIGl0IGlzIHVuYWJsZSB0byBwcm9maWxlIHNlY3Rpb25zIG9mCit0aGUga2VybmVsIHdoZXJlIGludGVycnVwdHMgYXJlIGRpc2FibGVkLiBUaGVyZSBpcyBqdXN0IG9uZSBhdmFpbGFibGUgZXZlbnQsICJSVEMgaW50ZXJydXB0cyIsIGFuZCBpdHMgdmFsdWUgCitjb3JyZXNwb25kcyB0byB0aGUgbnVtYmVyIG9mIGludGVycnVwdHMgZ2VuZXJhdGVkIHBlciBzZWNvbmQgKHRoYXQgaXMsIGEgaGlnaGVyIG51bWJlciBtZWFucyBhIGJldHRlciBwcm9maWxpbmcKK3Jlc29sdXRpb24sIGFuZCBoaWdoZXIgb3ZlcmhlYWQpLiBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgcmVhbC10aW1lIGNsb2NrIHN1cHBvcnRzIG9ubHkgcG93ZXItb2YtdHdvCitzYW1wbGluZyByYXRlcyBmcm9tIDIgdG8gNDA5NiBwZXIgc2Vjb25kLiAgT3RoZXIgdmFsdWVzIHdpdGhpbiB0aGlzIHJhbmdlIGFyZSByb3VuZGVkIHRvIHRoZSBuZWFyZXN0IHBvd2VyIG9mCit0d28uCis8L3A+CisgICAgICAgICAgICA8cD4KK1lvdSBjYW4gZm9yY2UgdXNlIG9mIHRoZSBSVEMgaW50ZXJydXB0IHdpdGggdGhlIDxjb2RlIGNsYXNzPSJvcHRpb24iPmZvcmNlX3J0Yz0xPC9jb2RlPiBtb2R1bGUgcGFyYW1ldGVyLgorPC9wPgorICAgICAgICAgICAgPHA+CitTZXR0aW5nIHRoZSB2YWx1ZSBmcm9tIHRoZSBHVUkgc2hvdWxkIGJlIHN0cmFpZ2h0Zm9yd2FyZC4gT24gdGhlIGNvbW1hbmQgbGluZSwgeW91IG5lZWQgdG8gc3BlY2lmeSB0aGUKK2V2ZW50IHRvIDxzcGFuIGNsYXNzPSJjb21tYW5kIj48c3Ryb25nPm9wY29udHJvbDwvc3Ryb25nPjwvc3Bhbj4sIGUuZy4gOgorPC9wPgorICAgICAgICAgICAgPHA+CisgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjb21tYW5kIj4KKyAgICAgICAgICAgICAgICA8c3Ryb25nPm9wY29udHJvbCAtLWV2ZW50PVJUQ19JTlRFUlJVUFRTOjI1Njwvc3Ryb25nPgorICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICA8L3A+CisgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgPGRpdiBjbGFzcz0ic2VjdDIiIHRpdGxlPSI0LjMuoE9Qcm9maWxlIGluIHRpbWVyIGludGVycnVwdCBtb2RlIj4KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlcGFnZSI+CisgICAgICAgICAgICAgIDxkaXY+CisgICAgICAgICAgICAgICAgPGRpdj4KKyAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz0idGl0bGUiPjxhIGlkPSJ0aW1lciI+PC9hPjQuMy6gT1Byb2ZpbGUgaW4gdGltZXIgaW50ZXJydXB0IG1vZGU8L2gzPgorICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgPGRpdiBjbGFzcz0ibm90ZSIgdGl0bGU9Ik5vdGUiIHN0eWxlPSJtYXJnaW4tbGVmdDogMC41aW47IG1hcmdpbi1yaWdodDogMC41aW47Ij4KKyAgICAgICAgICAgICAgPGgzIGNsYXNzPSJ0aXRsZSI+Tm90ZTwvaDM+CisgICAgICAgICAgICAgIDxwPgorVGhpcyBzZWN0aW9uIGFwcGxpZXMgdG8gMi42IGtlcm5lbHMgYW5kIGFib3ZlIG9ubHkuCis8L3A+CisgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIDxwPgorSW4gMi42IGtlcm5lbHMgb24gQ1BVcyB3aXRob3V0IE9Qcm9maWxlIHN1cHBvcnQgZm9yIHRoZSBoYXJkd2FyZSBwZXJmb3JtYW5jZSBjb3VudGVycywgdGhlIGRyaXZlcgorZmFsbHMgYmFjayB0byB1c2luZyB0aGUgdGltZXIgaW50ZXJydXB0IGZvciBwcm9maWxpbmcuIExpa2UgdGhlIFJUQyBtb2RlIGluIDIuNCBrZXJuZWxzLCB0aGlzIGlzIG5vdCBhYmxlIHRvCitwcm9maWxlIGNvZGUgdGhhdCBoYXMgaW50ZXJydXB0cyBkaXNhYmxlZC4gTm90ZSB0aGF0IHRoZXJlIGFyZSBubyBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgZm9yCitzZXR0aW5nIHRoaXMsIHVubGlrZSB0aGUgUlRDIGFuZCBoYXJkd2FyZSBwZXJmb3JtYW5jZSBjb3VudGVyIHNldHVwLgorPC9wPgorICAgICAgICAgICAgPHA+CitZb3UgY2FuIGZvcmNlIHVzZSBvZiB0aGUgdGltZXIgaW50ZXJydXB0IGJ5IHVzaW5nIHRoZSA8Y29kZSBjbGFzcz0ib3B0aW9uIj50aW1lcj0xPC9jb2RlPiBtb2R1bGUKK3BhcmFtZXRlciAob3IgPGNvZGUgY2xhc3M9Im9wdGlvbiI+b3Byb2ZpbGUudGltZXI9MTwvY29kZT4gb24gdGhlIGJvb3QgY29tbWFuZCBsaW5lIGlmIE9Qcm9maWxlIGlzCitidWlsdC1pbikuCis8L3A+CisgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgPGRpdiBjbGFzcz0ic2VjdDIiIHRpdGxlPSI0LjQuoFBlbnRpdW0gNCBzdXBwb3J0Ij4KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlcGFnZSI+CisgICAgICAgICAgICAgIDxkaXY+CisgICAgICAgICAgICAgICAgPGRpdj4KKyAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz0idGl0bGUiPjxhIGlkPSJwNCI+PC9hPjQuNC6gUGVudGl1bSA0IHN1cHBvcnQ8L2gzPgorICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgPHA+CitUaGUgUGVudGl1bSA0IC8gWGVvbiBwZXJmb3JtYW5jZSBjb3VudGVycyBhcmUgb3JnYW5pemVkIGFyb3VuZCAzIHR5cGVzIG9mIG1vZGVsIHNwZWNpZmljIHJlZ2lzdGVycyAoTVNScyk6IDQ1IGV2ZW50CitzZWxlY3Rpb24gY29udHJvbCByZWdpc3RlcnMgKEVTQ1JzKSwgMTggY291bnRlciBjb25maWd1cmF0aW9uIGNvbnRyb2wgcmVnaXN0ZXJzIChDQ0NScykgYW5kIDE4IGNvdW50ZXJzLiBFU0NScyBkZXNjcmliZSBhCitwYXJ0aWN1bGFyIHNldCBvZiBldmVudHMgd2hpY2ggYXJlIHRvIGJlIHJlY29yZGVkLCBhbmQgQ0NDUnMgYmluZCBFU0NScyB0byBjb3VudGVycyBhbmQgY29uZmlndXJlIHRoZWlyCitvcGVyYXRpb24uIFVuZm9ydHVuYXRlbHkgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIHJlZ2lzdGVycyBpcyBxdWl0ZSBjb21wbGV4OyB0aGV5IGNhbm5vdCBhbGwgYmUgdXNlZCB3aXRoIG9uZQorYW5vdGhlciBhdCBhbnkgdGltZS4gVGhlcmUgaXMsIGhvd2V2ZXIsIGEgc3Vic2V0IG9mIDggY291bnRlcnMsIDggRVNDUnMsIGFuZCA4IENDQ1JzIHdoaWNoIGNhbiBiZSB1c2VkIGluZGVwZW5kZW50bHkgb2YKK29uZSBhbm90aGVyLCBzbyBPUHJvZmlsZSBvbmx5IGFjY2Vzc2VzIHRob3NlIHJlZ2lzdGVycywgdHJlYXRpbmcgdGhlbSBhcyBhIGJhbmsgb2YgOCAibm9ybWFsIiBjb3VudGVycywgc2ltaWxhcgordG8gdGhvc2UgaW4gdGhlIFA2IG9yIEF0aGxvbi9PcHRlcm9uL1BoZW5vbS9UdXJpb24gZmFtaWxpZXMgb2YgQ1BVLgorPC9wPgorICAgICAgICAgICAgPHA+CitUaGVyZSBpcyBjdXJyZW50bHkgbm8gc3VwcG9ydCBmb3IgUHJlY2lzaW9uIEV2ZW50LUJhc2VkIFNhbXBsaW5nIChQRUJTKSwgbm9yIGFueSBhZHZhbmNlZCB1c2VzIG9mIHRoZSBEZWJ1ZyBTdG9yZQorKERTKS4gQ3VycmVudCBzdXBwb3J0IGlzIGxpbWl0ZWQgdG8gdGhlIGNvbnNlcnZhdGl2ZSBleHRlbnNpb24gb2YgT1Byb2ZpbGUncyBleGlzdGluZyBpbnRlcnJ1cHQtYmFzZWQgbW9kZWwgZGVzY3JpYmVkCithYm92ZS4gIFBlcmZvcm1hbmNlIG1vbml0b3JpbmcgaGFyZHdhcmUgb24gUGVudGl1bSA0IC8gWGVvbiBwcm9jZXNzb3JzIHdpdGggSHlwZXJ0aHJlYWRpbmcgZW5hYmxlZCAobXVsdGlwbGUgbG9naWNhbAorcHJvY2Vzc29ycyBvbiBhIHNpbmdsZSBkaWUpIGlzIG5vdCBzdXBwb3J0ZWQgaW4gMi40IGtlcm5lbHMgKHlvdSBjYW4gdXNlIE9Qcm9maWxlIGlmIHlvdSBkaXNhYmxlIGh5cGVyLXRocmVhZGluZywKK3Rob3VnaCkuCis8L3A+CisgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgPGRpdiBjbGFzcz0ic2VjdDIiIHRpdGxlPSI0LjUuoEludGVsIEl0YW5pdW0gMiBzdXBwb3J0Ij4KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlcGFnZSI+CisgICAgICAgICAgICAgIDxkaXY+CisgICAgICAgICAgICAgICAgPGRpdj4KKyAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz0idGl0bGUiPjxhIGlkPSJpYTY0Ij48L2E+NC41LqBJbnRlbCBJdGFuaXVtIDIgc3VwcG9ydDwvaDM+CisgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICA8cD4KK1RoZSBJdGFuaXVtIDIgcGVyZm9ybWFuY2UgbW9uaXRvcmluZyB1bml0IChQTVUpIG9yZ2FuaXplcyB0aGUgY291bnRlcnMgYXMgZm91cgorcGFpcnMgb2YgcGVyZm9ybWFuY2UgZXZlbnQgbW9uaXRvcmluZyByZWdpc3RlcnMuIEVhY2ggcGFpciBpcyBjb21wb3NlZCBvZiBhCitQZXJmb3JtYW5jZSBNb25pdG9yaW5nIENvbmZpZ3VyYXRpb24gKFBNQykgcmVnaXN0ZXIgYW5kIFBlcmZvcm1hbmNlIE1vbml0b3JpbmcKK0RhdGEgKFBNRCkgcmVnaXN0ZXIuICBUaGUgUE1DIHNlbGVjdHMgdGhlIHBlcmZvcm1hbmNlIGV2ZW50IGJlaW5nIG1vbml0b3JlZCBhbmQKK3RoZSBQTUQgZGV0ZXJtaW5lcyB0aGUgc2FtcGxpbmcgaW50ZXJ2YWwuIFRoZSBJQTY0IFBlcmZvcm1hbmNlIE1vbml0b3JpbmcgVW5pdAorKFBNVSkgdHJpZ2dlcnMgc2FtcGxpbmcgd2l0aCBtYXNrYWJsZSBpbnRlcnJ1cHRzLiBUaHVzLCBzYW1wbGVzIHdpbGwgbm90IG9jY3VyCitpbiBzZWN0aW9ucyBvZiB0aGUgSUE2NCBrZXJuZWwgd2hlcmUgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQuCis8L3A+CisgICAgICAgICAgICA8cD4KK05vbmUgb2YgdGhlIGFkdmFuY2UgZmVhdHVyZXMgb2YgdGhlIEl0YW5pdW0gMiBwZXJmb3JtYW5jZSBtb25pdG9yaW5nIHVuaXQKK3N1Y2ggYXMgb3Bjb2RlIG1hdGNoaW5nLCBhZGRyZXNzIHJhbmdlIG1hdGNoaW5nLCBvciBwcmVjaXNlIGV2ZW50IHNhbXBsaW5nIGFyZQorc3VwcG9ydGVkIGJ5IHRoaXMgdmVyc2lvbiBvZiBPUHJvZmlsZS4gIFRoZSBJdGFuaXVtIDIgc3VwcG9ydCBvbmx5IG1hcHMgT1Byb2ZpbGUncworZXhpc3RpbmcgaW50ZXJydXB0LWJhc2VkIG1vZGVsIHRvIHRoZSBQTVUgaGFyZHdhcmUuCis8L3A+CisgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgPGRpdiBjbGFzcz0ic2VjdDIiIHRpdGxlPSI0LjYuoFBvd2VyUEM2NCBzdXBwb3J0Ij4KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlcGFnZSI+CisgICAgICAgICAgICAgIDxkaXY+CisgICAgICAgICAgICAgICAgPGRpdj4KKyAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz0idGl0bGUiPjxhIGlkPSJwcGM2NCI+PC9hPjQuNi6gUG93ZXJQQzY0IHN1cHBvcnQ8L2gzPgorICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgPHA+CitUaGUgcGVyZm9ybWFuY2UgbW9uaXRvcmluZyB1bml0IChQTVUpIGZvciB0aGUgSUJNIFBvd2VyUEMgNjQtYml0IHByb2Nlc3NvcnMgCitjb25zaXN0cyBvZiBiZXR3ZWVuIDQgYW5kIDggY291bnRlcnMgKGRlcGVuZGluZyBvbiB0aGUgbW9kZWwpLCBwbHVzIHRocmVlCitzcGVjaWFsIHB1cnBvc2UgcmVnaXN0ZXJzIHVzZWQgZm9yIHByb2dyYW1taW5nIHRoZSBjb3VudGVycyAtLSBNTUNSMCwgTU1DUjEsCithbmQgTU1DUkEuICBBZHZhbmNlZCBmZWF0dXJlcyBzdWNoIGFzIGluc3RydWN0aW9uIG1hdGNoaW5nIGFuZCB0aHJlc2hvbGRpbmcgYXJlCitub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgdmVyc2lvbiBvZiBPUHJvZmlsZS4KKzwvcD4KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9Im5vdGUiIHRpdGxlPSJOb3RlIiBzdHlsZT0ibWFyZ2luLWxlZnQ6IDAuNWluOyBtYXJnaW4tcmlnaHQ6IDAuNWluOyI+PGgzIGNsYXNzPSJ0aXRsZSI+Tm90ZTwvaDM+TGF0ZXIgdmVyc2lvbnMgb2YgdGhlIElCTSBQT1dFUjUrIHByb2Nlc3NvciAoYmVnaW5uaW5nIHdpdGggcmV2aXNpb24gMy4wKQorcnVuIHRoZSBwZXJmb3JtYW5jZSBtb25pdG9yIHVuaXQgaW4gUE9XRVI2IG1vZGUsIGVmZmVjdGl2ZWx5IHJlbW92aW5nIE9Qcm9maWxlJ3MKK2FjY2VzcyB0byBjb3VudGVycyA1IGFuZCA2LiAgVGhlc2UgdHdvIGNvdW50ZXJzIGFyZSBkZWRpY2F0ZWQgdG8gY291bnRpbmcKK2luc3RydWN0aW9ucyBjb21wbGV0ZWQgYW5kIGN5Y2xlcywgcmVzcGVjdGl2ZWx5LiAgSW4gUE9XRVI2IG1vZGUsIGhvd2V2ZXIsIHRoZQorY291bnRlcnMgZG8gbm90IGdlbmVyYXRlIGFuIGludGVycnVwdCBvbiBvdmVyZmxvdyBhbmQgc28gYXJlIHVudXNhYmxlIGJ5CitPUHJvZmlsZS4gIEtlcm5lbCB2ZXJzaW9ucyAyLjYuMjMgYW5kIGhpZ2hlciB3aWxsIHJlY29nbml6ZSB0aGlzIG1vZGUKK2FuZCBleHBvcnQgInBwYzY0L3Bvd2VyNSsrIiBhcyB0aGUgY3B1X3R5cGUgdG8gdGhlIG9wcm9maWxlZnMgcHNldWRvIGZpbGVzeXN0ZW0uCitPUHJvZmlsZSB1c2Vyc3BhY2UgcmVzcG9uZHMgdG8gdGhpcyBjcHVfdHlwZSBieSByZW1vdmluZyB0aGVzZSBjb3VudGVycyBmcm9tCit0aGUgbGlzdCBvZiBwb3RlbnRpYWwgZXZlbnRzIHRvIGNvdW50LiAgV2l0aG91dCB0aGlzIGtlcm5lbCBzdXBwb3J0LCBhdHRlbXB0cwordG8gcHJvZmlsZSB1c2luZyBhbiBldmVudCBmcm9tIG9uZSBvZiB0aGVzZSBjb3VudGVycyB3aWxsIHlpZWxkIGluY29ycmVjdAorcmVzdWx0cyAtLSB0eXBpY2FsbHksIHplcm8gKG9yIG5lYXIgemVybykgc2FtcGxlcyBpbiB0aGUgZ2VuZXJhdGVkIHJlcG9ydC4KKzwvZGl2PgorICAgICAgICAgICAgPHA+Cis8L3A+CisgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgPGRpdiBjbGFzcz0ic2VjdDIiIHRpdGxlPSI0LjcuoENlbGwgQnJvYWRiYW5kIEVuZ2luZSBzdXBwb3J0Ij4KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlcGFnZSI+CisgICAgICAgICAgICAgIDxkaXY+CisgICAgICAgICAgICAgICAgPGRpdj4KKyAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz0idGl0bGUiPjxhIGlkPSJjZWxsLWJlIj48L2E+NC43LqBDZWxsIEJyb2FkYmFuZCBFbmdpbmUgc3VwcG9ydDwvaDM+CisgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICA8cD4KK1RoZSBDZWxsIEJyb2FkYmFuZCBFbmdpbmUgKENCRSkgcHJvY2Vzc29yIGNvcmUgY29uc2lzdHMgb2YgYSBQb3dlclBDIFByb2Nlc3NpbmcKK0VsZW1lbnQgKFBQRSkgYW5kIDggU3luZXJnaXN0aWMgUHJvY2Vzc2luZyBFbGVtZW50cyAoU1BFKS4gIFBQRXMgYW5kIFNQRXMgZWFjaAorY29uc2lzdCBvZiBhIHByb2Nlc3NpbmcgdW5pdCAoUFBVIGFuZCBTUFUsIHJlc3BlY3RpdmVseSkgYW5kIG90aGVyIGhhcmR3YXJlCitjb21wb25lbnRzLCBzdWNoIGFzIG1lbW9yeSBjb250cm9sbGVycy4KKzwvcD4KKyAgICAgICAgICAgIDxwPgorQSBQUFUgaGFzIHR3byBoYXJkd2FyZSB0aHJlYWRzIChha2EgInZpcnR1YWwgQ1BVcyIpLiAgVGhlIHBlcmZvcm1hbmNlIG1vbml0b3IKK3VuaXQgb2YgdGhlIENCRSBjb2xsZWN0cyBldmVudCBpbmZvcm1hdGlvbiBvbiBvbmUgaGFyZHdhcmUgdGhyZWFkIGF0IGEgdGltZS4KK1RoZXJlZm9yZSwgd2hlbiBwcm9maWxpbmcgUFBFIGV2ZW50cywKK09Qcm9maWxlIGNvbGxlY3RzIHRoZSBwcm9maWxlIGJhc2VkIG9uIHRoZSBzZWxlY3RlZCBldmVudHMgYnkgdGltZSBzbGljaW5nIHRoZQorcGVyZm9ybWFuY2UgY291bnRlciBoYXJkd2FyZSBiZXR3ZWVuIHRoZSB0d28gdGhyZWFkcy4gICBUaGUgdXNlciBtdXN0IGVuc3VyZSB0aGUKK2NvbGxlY3Rpb24gaW50ZXJ2YWwgaXMgbG9uZyBlbm91Z2ggc28gdGhhdCB0aGUgdGltZSBzcGVudCBjb2xsZWN0aW5nIGRhdGEgZm9yCitlYWNoIFBQVSBpcyBzdWZmaWNpZW50IHRvIG9idGFpbiBhIGdvb2QgcHJvZmlsZS4KKzwvcD4KKyAgICAgICAgICAgIDxwPgorVG8gcHJvZmlsZSBhbiBTUFUgYXBwbGljYXRpb24sIHRoZSB1c2VyIHNob3VsZCBzcGVjaWZ5IHRoZSBTUFVfQ1lDTEVTIGV2ZW50LgorV2hlbiBzdGFydGluZyBPUHJvZmlsZSB3aXRoIFNQVV9DWUNMRVMsIHRoZSBvcGNvbnRyb2wgc2NyaXB0IGVuZm9yY2VzIGNlcnRhaW4KK3NlcGFyYXRpb24gcGFyYW1ldGVycyAoc2VwYXJhdGU9Y3B1LGxpYikgdG8gZW5zdXJlIHRoYXQgc3VmZmljaWVudCBpbmZvcm1hdGlvbgoraXMgY29sbGVjdGVkIGluIHRoZSBzYW1wbGUgZGF0YSBpbiBvcmRlciB0byBnZW5lcmF0ZSBhIGNvbXBsZXRlIHJlcG9ydC4gIFRoZQorLS1tZXJnZT1jcHUgb3B0aW9uIGNhbiBiZSB1c2VkIHRvIG9idGFpbiBhIG1vcmUgcmVhZGFibGUgcmVwb3J0IGlmIGFuYWx5emluZwordGhlIHBlcmZvcm1hbmNlIG9mIGVhY2ggc2VwYXJhdGUgU1BVIGlzIG5vdCBuZWNlc3NhcnkuCis8L3A+CisgICAgICAgICAgICA8cD4KK1Byb2ZpbGluZyB3aXRoIGFuIFNQVSBldmVudCAoZXZlbnRzIDQxMDAgdGhyb3VnaCA0MTYzKSBpcyBub3QgY29tcGF0aWJsZSB3aXRoIGFueSBvdGhlcgorZXZlbnQuICBGdXJ0aGVyIG1vcmUsIG9ubHkgb25lIFNQVSBldmVudCBjYW4gYmUgc3BlY2lmaWVkIGF0IGEgdGltZS4gIFRoZSBoYXJkd2FyZSBvbmx5CitzdXBwb3J0cyBwcm9maWxpbmcgb24gb25lIFNQVSBwZXIgbm9kZSBhdCBhIHRpbWUuICBUaGUgT1Byb2ZpbGUga2VybmVsIGNvZGUgdGltZSBzbGljZXMKK2JldHdlZW4gdGhlIGVpZ2h0IFNQVXMgdG8gY29sbGVjdCBkYXRhIG9uIGFsbCBTUFVzLgorPC9wPgorICAgICAgICAgICAgPHA+CitTUFUgcHJvZmlsZSByZXBvcnRzIGhhdmUgc29tZSB1bmlxdWUgY2hhcmFjdGVyaXN0aWNzIGNvbXBhcmVkIHRvIHJlcG9ydHMgZm9yCitzdGFuZGFyZCBhcmNoaXRlY3R1cmVzOgorPC9wPgorICAgICAgICAgICAgPGRpdiBjbGFzcz0iaXRlbWl6ZWRsaXN0Ij4KKyAgICAgICAgICAgICAgPHVsIGNsYXNzPSJpdGVtaXplZGxpc3QiIHR5cGU9ImRpc2MiPgorICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0ibGlzdGl0ZW0iPlR5cGljYWxseSBubyAiYXBwIG5hbWUiIGNvbHVtbi4gIFRoaXMgaXMgcmVhbGx5IHN0YW5kYXJkIE9Qcm9maWxlIGJlaGF2aW9yCit3aGVuIHRoZSByZXBvcnQgY29udGFpbnMgc2FtcGxlcyBmb3IganVzdCBhIHNpbmdsZSBhcHBsaWNhdGlvbiwgd2hpY2ggaXMKK2NvbW1vbmx5IHRoZSBjYXNlIHdoZW4gcHJvZmlsaW5nIFNQVXMuPC9saT4KKyAgICAgICAgICAgICAgICA8bGkgY2xhc3M9Imxpc3RpdGVtIj4iQ1BVIiBlcXVhdGVzIHRvICJTUFUiPC9saT4KKyAgICAgICAgICAgICAgICA8bGkgY2xhc3M9Imxpc3RpdGVtIj5TcGVjaWZ5aW5nICctLWxvbmctZmlsZW5hbWVzJyBvbiB0aGUgb3ByZXBvcnQgY29tbWFuZCBkb2VzIG5vdCBhbHdheXMgcmVzdWx0CitpbiBsb25nIGZpbGVuYW1lcy4gIFRoaXMgaGFwcGVucyB3aGVuIHRoZSBTUFUgYXBwbGljYXRpb24gY29kZSBpcyBlbWJlZGRlZCBpbgordGhlIFBQRSBleGVjdXRhYmxlIG9yIHNoYXJlZCBsaWJyYXJ5LiAgVGhlIGVtYmVkZGVkIFNQVSBFTEYgZGF0YSBjb250YWlucyBvbmx5IHRoZQorc2hvcnQgZmlsZW5hbWUgKGkuZS4sIG5vIHBhdGggaW5mb3JtYXRpb24pIGZvciB0aGUgU1BVIGJpbmFyeSBmaWxlIHRoYXQgd2FzIHVzZWQgYXMKK3RoZSBzb3VyY2UgZm9yIGVtYmVkZGluZy4gICBUaGUgcmVhc29uIHRoYXQganVzdCB0aGUgc2hvcnQgZmlsZW5hbWUgaXMgdXNlZCBpcyBiZWNhdXNlCit0aGUgb3JpZ2luYWwgU1BVIGJpbmFyeSBmaWxlIG1heSBub3QgZXhpc3Qgb3IgYmUgYWNjZXNzaWJsZSBhdCBydW50aW1lLiAgVGhlIHBlcmZvcm1hbmNlCithbmFseXN0IG11c3QgaGF2ZSBzdWZmaWNpZW50IGtub3dsZWRnZSBvZiB0aGUgYXBwbGljYXRpb24gdG8gYmUgYWJsZSB0byBjb3JyZWxhdGUgdGhlCitTUFUgYmluYXJ5IGltYWdlIG5hbWVzIGZvdW5kIGluIHRoZSAgcmVwb3J0IHRvIHRoZSBhcHBsaWNhdGlvbidzIHNvdXJjZSBmaWxlcy4KKzxkaXYgY2xhc3M9Im5vdGUiIHRpdGxlPSJOb3RlIiBzdHlsZT0ibWFyZ2luLWxlZnQ6IDAuNWluOyBtYXJnaW4tcmlnaHQ6IDAuNWluOyI+PGgzIGNsYXNzPSJ0aXRsZSI+Tm90ZTwvaDM+CitDb21waWxlIHRoZSBhcHBsaWNhdGlvbiB3aXRoIC1nIGFuZCBnZW5lcmF0ZSB0aGUgT1Byb2ZpbGUgcmVwb3J0Cit3aXRoIC1nIHRvIGZhY2lsaXRhdGUgZmluZGluZyB0aGUgcmlnaHQgc291cmNlIGZpbGUocykgb24gd2hpY2ggdG8gZm9jdXMuCis8L2Rpdj48L2xpPgorICAgICAgICAgICAgICA8L3VsPgorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgPGRpdiBjbGFzcz0ic2VjdDIiIHRpdGxlPSI0LjguoEFNRDY0ICh4ODZfNjQpIEluc3RydWN0aW9uLUJhc2VkIFNhbXBsaW5nIChJQlMpIHN1cHBvcnQiPgorICAgICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KKyAgICAgICAgICAgICAgPGRpdj4KKyAgICAgICAgICAgICAgICA8ZGl2PgorICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPSJ0aXRsZSI+PGEgaWQ9ImFtZC1pYnMtc3VwcG9ydCI+PC9hPjQuOC6gQU1ENjQgKHg4Nl82NCkgSW5zdHJ1Y3Rpb24tQmFzZWQgU2FtcGxpbmcgKElCUykgc3VwcG9ydDwvaDM+CisgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICA8cD4KK0luc3RydWN0aW9uLUJhc2VkIFNhbXBsaW5nIChJQlMpIGlzIGEgbmV3IHBlcmZvcm1hbmNlIG1lYXN1cmVtZW50IHRlY2huaXF1ZQorYXZhaWxhYmxlIG9uIEFNRCBGYW1pbHkgMTBoIHByb2Nlc3NvcnMuIFRyYWRpdGlvbmFsIHBlcmZvcm1hbmNlIGNvdW50ZXIKK3NhbXBsaW5nIGlzIG5vdCBwcmVjaXNlIGVub3VnaCB0byBpc29sYXRlIHBlcmZvcm1hbmNlIGlzc3VlcyB0byBpbmRpdmlkdWFsCitpbnN0cnVjdGlvbnMuIElCUywgaG93ZXZlciwgcHJlY2lzZWx5IGlkZW50aWZpZXMgaW5zdHJ1Y3Rpb25zIHdoaWNoIGFyZSBub3QKK21ha2luZyB0aGUgYmVzdCB1c2Ugb2YgdGhlIHByb2Nlc3NvciBwaXBlbGluZSBhbmQgbWVtb3J5IGhpZXJhcmNoeS4KK0ZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2UgcmVmZXIgdG8gdGhlICJJbnN0cnVjdGlvbi1CYXNlZCBTYW1wbGluZzoKK0EgTmV3IFBlcmZvcm1hbmNlIEFuYWx5c2lzIFRlY2huaXF1ZSBmb3IgQU1EIEZhbWlseSAxMGggUHJvY2Vzc29ycyIgKAorPGEgY2xhc3M9InVsaW5rIiBocmVmPSJodHRwOi8vZGV2ZWxvcGVyLmFtZC5jb20vYXNzZXRzL0FNRF9JQlNfcGFwZXJfRU4ucGRmIj4KK2h0dHA6Ly9kZXZlbG9wZXIuYW1kLmNvbS9hc3NldHMvQU1EX0lCU19wYXBlcl9FTi5wZGY8L2E+KS4KK1RoZXJlIGFyZSB0d28gdHlwZXMgb2YgSUJTIHByb2ZpbGUgdHlwZXMsIGRlc2NyaWJlZCBpbiB0aGUgZm9sbG93aW5nIHNlY3Rpb25zLgorPC9wPgorICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2VjdDMiIHRpdGxlPSI0LjguMS6gSUJTIEZldGNoIj4KKyAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KKyAgICAgICAgICAgICAgICA8ZGl2PgorICAgICAgICAgICAgICAgICAgPGRpdj4KKyAgICAgICAgICAgICAgICAgICAgPGg0IGNsYXNzPSJ0aXRsZSI+PGEgaWQ9Imlicy1mZXRjaCI+PC9hPjQuOC4xLqBJQlMgRmV0Y2g8L2g0PgorICAgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICA8cD4KK0lCUyBmZXRjaCBzYW1wbGluZyBpcyBhIHN0YXRpc3RpY2FsIHNhbXBsaW5nIG1ldGhvZCB3aGljaCBjb3VudHMgY29tcGxldGVkCitmZXRjaCBvcGVyYXRpb25zLiBXaGVuIHRoZSBudW1iZXIgb2YgY29tcGxldGVkIGZldGNoIG9wZXJhdGlvbnMgcmVhY2hlcyB0aGUKK21heGltdW0gZmV0Y2ggY291bnQgKHRoZSBzYW1wbGluZyBwZXJpb2QpLCBJQlMgdGFncyB0aGUgZmV0Y2ggb3BlcmF0aW9uIGFuZAorbW9uaXRvcnMgdGhhdCBvcGVyYXRpb24gdW50aWwgaXQgZWl0aGVyIGNvbXBsZXRlcyBvciBhYm9ydHMuIFdoZW4gYSB0YWdnZWQKK2ZldGNoIGNvbXBsZXRlcyBvciBhYm9ydHMsIGEgc2FtcGxpbmcgaW50ZXJydXB0IGlzIGdlbmVyYXRlZCBhbmQgYW4gSUJTIGZldGNoCitzYW1wbGUgaXMgdGFrZW4uIEFuIElCUyBmZXRjaCBzYW1wbGUgY29udGFpbnMgYSB0aW1lc3RhbXAsIHRoZSBpZGVudGlmaWVyIG9mCit0aGUgaW50ZXJydXB0ZWQgcHJvY2VzcywgdGhlIHZpcnR1YWwgZmV0Y2ggYWRkcmVzcywgYW5kIHNldmVyYWwgZXZlbnQgZmxhZ3MKK2FuZCB2YWx1ZXMgdGhhdCBkZXNjcmliZSB3aGF0IGhhcHBlbmVkIGR1cmluZyB0aGUgZmV0Y2ggb3BlcmF0aW9uLiAKKzwvcD4KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2VjdDMiIHRpdGxlPSI0LjguMi6gSUJTIE9wIj4KKyAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KKyAgICAgICAgICAgICAgICA8ZGl2PgorICAgICAgICAgICAgICAgICAgPGRpdj4KKyAgICAgICAgICAgICAgICAgICAgPGg0IGNsYXNzPSJ0aXRsZSI+PGEgaWQ9Imlicy1vcCI+PC9hPjQuOC4yLqBJQlMgT3A8L2g0PgorICAgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICA8cD4KK0lCUyBvcCBzYW1wbGluZyBzZWxlY3RzLCB0YWdzLCBhbmQgbW9uaXRvcnMgbWFjcm8tb3BzIGFzIGlzc3VlZCBmcm9tIEFNRDY0CitpbnN0cnVjdGlvbnMuIFR3byBvcHRpb25zIGFyZSBhdmFpbGFibGUgZm9yIHNlbGVjdGluZyBvcHMgZm9yIHNhbXBsaW5nOgorPC9wPgorICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpdGVtaXplZGxpc3QiPgorICAgICAgICAgICAgICAgIDx1bCBjbGFzcz0iaXRlbWl6ZWRsaXN0IiB0eXBlPSJkaXNjIj4KKyAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0ibGlzdGl0ZW0iPgorQ3ljbGVzLWJhc2VkIHNlbGVjdGlvbiBjb3VudHMgQ1BVIGNsb2NrIGN5Y2xlcy4gVGhlIG9wIGlzIHRhZ2dlZCBhbmQgbW9uaXRvcmVkCit3aGVuIHRoZSBjb3VudCByZWFjaGVzIGEgdGhyZXNob2xkICh0aGUgc2FtcGxpbmcgcGVyaW9kKSBhbmQgYSB2YWxpZCBvcCBpcworYXZhaWxhYmxlLiAKKzwvbGk+CisgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9Imxpc3RpdGVtIj4KK0Rpc3BhdGNoZWQgb3AtYmFzZWQgc2VsZWN0aW9uIGNvdW50cyBkaXNwYXRjaGVkIG1hY3JvLW9wcy4KK1doZW4gdGhlIGNvdW50IHJlYWNoZXMgYSB0aHJlc2hvbGQsIHRoZSBuZXh0IHZhbGlkIG9wIGlzIHRhZ2dlZCBhbmQgbW9uaXRvcmVkLiAKKzwvbGk+CisgICAgICAgICAgICAgICAgPC91bD4KKyAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgIDxwPgorSW4gYm90aCBjYXNlcywgYW4gSUJTIHNhbXBsZSBpcyBnZW5lcmF0ZWQgb25seSBpZiB0aGUgdGFnZ2VkIG9wIHJldGlyZXMuCitUaHVzLCBJQlMgb3AgZXZlbnQgaW5mb3JtYXRpb24gZG9lcyBub3QgbWVhc3VyZSBzcGVjdWxhdGl2ZSBleGVjdXRpb24gYWN0aXZpdHkuCitUaGUgZXhlY3V0aW9uIHN0YWdlcyBvZiB0aGUgcGlwZWxpbmUgbW9uaXRvciB0aGUgdGFnZ2VkIG1hY3JvLW9wLiBXaGVuIHRoZQordGFnZ2VkIG1hY3JvLW9wIHJldGlyZXMsIGEgc2FtcGxpbmcgaW50ZXJydXB0IGlzIGdlbmVyYXRlZCBhbmQgYW4gSUJTIG9wCitzYW1wbGUgaXMgdGFrZW4uIEFuIElCUyBvcCBzYW1wbGUgY29udGFpbnMgYSB0aW1lc3RhbXAsIHRoZSBpZGVudGlmaWVyIG9mCit0aGUgaW50ZXJydXB0ZWQgcHJvY2VzcywgdGhlIHZpcnR1YWwgYWRkcmVzcyBvZiB0aGUgQU1ENjQgaW5zdHJ1Y3Rpb24gZnJvbQord2hpY2ggdGhlIG9wIHdhcyBpc3N1ZWQsIGFuZCBzZXZlcmFsIGV2ZW50IGZsYWdzIGFuZCB2YWx1ZXMgdGhhdCBkZXNjcmliZQord2hhdCBoYXBwZW5lZCB3aGVuIHRoZSBtYWNyby1vcCBleGVjdXRlZC4KKzwvcD4KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgPHA+CitFbmFibGluZyBJQlMgcHJvZmlsaW5nIGlzIGRvbmUgc2ltcGx5IGJ5IHNwZWNpZnlpbmcgSUJTIHBlcmZvcm1hbmNlIGV2ZW50cwordGhyb3VnaCB0aGUgIi0tZXZlbnQ9IiBvcHRpb25zLiBUaGVzZSBldmVudHMgYXJlIGxpc3RlZCBpbiB0aGUKKzxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+b3Bjb250cm9sIC0tbGlzdC1ldmVudHM8L2NvZGU+LgorPC9wPgorICAgICAgICAgICAgPHRhYmxlIHhtbG5zPSIiIGJvcmRlcj0iMCIgc3R5bGU9ImJhY2tncm91bmQ6ICNFMEUwRTA7IiB3aWR0aD0iOTAlIj4KKyAgICAgICAgICAgICAgPHRyPgorICAgICAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgICAgIDxwcmUgY2xhc3M9InNjcmVlbiI+CitvcGNvbnRyb2wgLS1ldmVudD1JQlNfRkVUQ0hfWFhYOiZsdDtjb3VudCZndDs6Jmx0O3VtJmd0OzombHQ7a2VybmVsJmd0OzombHQ7dXNlciZndDsKK29wY29udHJvbCAtLWV2ZW50PUlCU19PUF9YWFg6Jmx0O2NvdW50Jmd0OzombHQ7dW0mZ3Q7OiZsdDtrZXJuZWwmZ3Q7OiZsdDt1c2VyJmd0OworCitOb3RlOiAqIEFsbCBJQlMgZmV0Y2ggZXZlbnQgbXVzdCBoYXZlIHRoZSBzYW1lIGV2ZW50IGNvdW50IGFuZCB1bml0bWFzaywKKyAgICAgICAgYXMgZG8gdGhvc2UgZm9yIElCUyBvcC4KKzwvcHJlPgorICAgICAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICAgIDwvdHI+CisgICAgICAgICAgICA8L3RhYmxlPgorICAgICAgICAgIDwvZGl2PgorICAgICAgICAgIDxkaXYgY2xhc3M9InNlY3QyIiB0aXRsZT0iNC45LqBEYW5nZXJvdXMgY291bnRlciBzZXR0aW5ncyI+CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgorICAgICAgICAgICAgICA8ZGl2PgorICAgICAgICAgICAgICAgIDxkaXY+CisgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9InRpdGxlIj48YSBpZD0ibWlzdXNlIj48L2E+NC45LqBEYW5nZXJvdXMgY291bnRlciBzZXR0aW5nczwvaDM+CisgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICA8cD4KK09Qcm9maWxlIGlzIGEgbG93LWxldmVsIHByb2ZpbGVyIHdoaWNoIGFsbG93IGNvbnRpbnVvdXMgcHJvZmlsaW5nIHdpdGggYSBsb3ctb3ZlcmhlYWQgY29zdC4KK0lmIHRvbyBsb3cgYSBjb3VudCByZXNldCB2YWx1ZSBpcyBzZXQgZm9yIGEgY291bnRlciwgdGhlIHN5c3RlbSBjYW4gYmVjb21lIG92ZXJsb2FkZWQgd2l0aCBjb3VudGVyCitpbnRlcnJ1cHRzLCBhbmQgc2VlbSBhcyBpZiB0aGUgc3lzdGVtIGhhcyBmcm96ZW4uIFdoaWxzdCBzb21lIHZhbGlkYXRpb24gaXMgZG9uZSwgaXQKK2lzIG5vdCBmb29scHJvb2YuCis8L3A+CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJub3RlIiB0aXRsZT0iTm90ZSIgc3R5bGU9Im1hcmdpbi1sZWZ0OiAwLjVpbjsgbWFyZ2luLXJpZ2h0OiAwLjVpbjsiPgorICAgICAgICAgICAgICA8aDMgY2xhc3M9InRpdGxlIj5Ob3RlPC9oMz4KKyAgICAgICAgICAgICAgPHA+CitUaGlzIGNhbiBoYXBwZW4gYXMgZm9sbG93czogV2hlbiB0aGUgcHJvZmlsZXIgY291bnQKK3JlYWNoZXMgemVybyBhbiBOTUkgaGFuZGxlciBpcyBjYWxsZWQgd2hpY2ggc3RvcmVzIHRoZSBzYW1wbGUgdmFsdWVzIGluIGFuIGludGVybmFsIGJ1ZmZlciwgdGhlbiByZXNldHMgdGhlIGNvdW50ZXIKK3RvIGl0cyBvcmlnaW5hbCB2YWx1ZS4gSWYgdGhlIGNvdW50IGlzIHZlcnkgbG93LCBhIHBlbmRpbmcgTk1JIGNhbiBiZSBzZW50IGJlZm9yZSB0aGUgTk1JIGhhbmRsZXIgaGFzCitjb21wbGV0ZWQuIER1ZSB0byB0aGUgcHJpb3JpdHkgb2YgdGhlIE5NSSwgdGhlIGxvY2FsIEFQSUMgZGVsaXZlcnMgdGhlIHBlbmRpbmcgaW50ZXJydXB0IGltbWVkaWF0ZWx5IGFmdGVyCitjb21wbGV0aW9uIG9mIHRoZSBwcmV2aW91cyBpbnRlcnJ1cHQgaGFuZGxlciwgYW5kIGNvbnRyb2wgbmV2ZXIgcmV0dXJucyB0byBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtLgorSW4gdGhpcyB3YXkgdGhlIHN5c3RlbSBzZWVtcyB0byBiZSBmcm96ZW4uCis8L3A+CisgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIDxwPklmIHRoaXMgaGFwcGVucywgaXQgd2lsbCBiZSBpbXBvc3NpYmxlIHRvIGJyaW5nIHRoZSBzeXN0ZW0gYmFjayB0byBhIHdvcmthYmxlIHN0YXRlLgorVGhlcmUgaXMgbm8gd2F5IHRvIHByb3ZpZGUgcmVhbCBzZWN1cml0eSBhZ2FpbnN0IHRoaXMgaGFwcGVuaW5nLCBvdGhlciB0aGFuIG1ha2luZyBzdXJlIHRvIHVzZSBhIHJlYXNvbmFibGUgdmFsdWUKK2ZvciB0aGUgY291bnRlciByZXNldC4gRm9yIGV4YW1wbGUsIHNldHRpbmcgPGNvZGUgY2xhc3M9ImNvbnN0YW50Ij5DUFVfQ0xLX1VOSEFMVEVEPC9jb2RlPiBldmVudCB0eXBlIHdpdGggYSByaWRpY3Vsb3VzbHkgbG93IHJlc2V0IGNvdW50IChlLmcuIDUwMCkKK2lzIGxpa2VseSB0byBmcmVlemUgdGhlIHN5c3RlbS4KKzwvcD4KKyAgICAgICAgICAgIDxwPgorSW4gc2hvcnQgOiA8c3BhbiBjbGFzcz0iY29tbWFuZCI+PHN0cm9uZz5Eb24ndCB0cnkgYSBmb29saXNoIHNhbXBsZSBjb3VudCB2YWx1ZTwvc3Ryb25nPjwvc3Bhbj4uIFVuZm9ydHVuYXRlbHkgdGhlIGRlZmluaXRpb24gb2YgYSBmb29saXNoIHZhbHVlCitpcyByZWFsbHkgZGVwZW5kZW50IG9uIHRoZSBldmVudCB0eXBlIC0gaWYgZXZlciBpbiBkb3VidCwgZS1tYWlsIDwvcD4KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFkZHJlc3MiPgorICAgICAgICAgICAgICA8cD48Y29kZSBjbGFzcz0iZW1haWwiPiZsdDs8YSBjbGFzcz0iZW1haWwiIGhyZWY9Im1haWx0bzpvcHJvZmlsZS1saXN0QGxpc3RzLnNmLm5ldCI+b3Byb2ZpbGUtbGlzdEBsaXN0cy5zZi5uZXQ8L2E+Jmd0OzwvY29kZT4uPC9wPgorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgPC9kaXY+CisgICAgICAgIDwvZGl2PgorICAgICAgPC9kaXY+CisgICAgICA8ZGl2IGNsYXNzPSJjaGFwdGVyIiB0aXRsZT0iQ2hhcHRlcqA0LqBPYnRhaW5pbmcgcmVzdWx0cyI+CisgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlcGFnZSI+CisgICAgICAgICAgPGRpdj4KKyAgICAgICAgICAgIDxkaXY+CisgICAgICAgICAgICAgIDxoMiBjbGFzcz0idGl0bGUiPjxhIGlkPSJyZXN1bHRzIj48L2E+Q2hhcHRlcqA0LqBPYnRhaW5pbmcgcmVzdWx0czwvaDI+CisgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgPC9kaXY+CisgICAgICAgIDxkaXYgY2xhc3M9InRvYyI+CisgICAgICAgICAgPHA+CisgICAgICAgICAgICA8Yj5UYWJsZSBvZiBDb250ZW50czwvYj4KKyAgICAgICAgICA8L3A+CisgICAgICAgICAgPGRsPgorICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDEiPgorICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNwcm9maWxlLXNwZWMiPjEuIFByb2ZpbGUgc3BlY2lmaWNhdGlvbnM8L2E+CisgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICA8ZGQ+CisgICAgICAgICAgICAgIDxkbD4KKyAgICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDIiPgorICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjcHJvZmlsZS1zcGVjLWV4YW1wbGVzIj4xLjEuIEV4YW1wbGVzPC9hPgorICAgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QyIj4KKyAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI3Byb2ZpbGUtc3BlYy1kZXRhaWxzIj4xLjIuIFByb2ZpbGUgc3BlY2lmaWNhdGlvbiBwYXJhbWV0ZXJzPC9hPgorICAgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QyIj4KKyAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2xvY2F0aW5nLWFuZC1tYW5hZ2luZy1iaW5hcnktaW1hZ2VzIj4xLjMuIExvY2F0aW5nIGFuZCBtYW5hZ2luZyBiaW5hcnkgaW1hZ2VzPC9hPgorICAgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QyIj4KKyAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI25vLXJlc3VsdHMiPjEuNC4gV2hhdCB0byBkbyB3aGVuIHlvdSBkb24ndCBnZXQgYW55IHJlc3VsdHM8L2E+CisgICAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgICAgPC9kbD4KKyAgICAgICAgICAgIDwvZGQ+CisgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MSI+CisgICAgICAgICAgICAgICAgPGEgaHJlZj0iI29wcmVwb3J0Ij4yLiBJbWFnZSBzdW1tYXJpZXMgYW5kIHN5bWJvbCBzdW1tYXJpZXMgKDxzcGFuIGNsYXNzPSJjb21tYW5kIj48c3Ryb25nPm9wcmVwb3J0PC9zdHJvbmc+PC9zcGFuPik8L2E+CisgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICA8ZGQ+CisgICAgICAgICAgICAgIDxkbD4KKyAgICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDIiPgorICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjb3ByZXBvcnQtbWVyZ2luZyI+Mi4xLiBNZXJnaW5nIHNlcGFyYXRlIHByb2ZpbGVzPC9hPgorICAgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QyIj4KKyAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI29wcmVwb3J0LWNvbXBhcmlzb24iPjIuMi4gU2lkZS1ieS1zaWRlIG11bHRpcGxlIHJlc3VsdHM8L2E+CisgICAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDIiPgorICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjb3ByZXBvcnQtY2FsbGdyYXBoIj4yLjMuIENhbGxncmFwaCBvdXRwdXQ8L2E+CisgICAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDIiPgorICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjb3ByZXBvcnQtZGlmZiI+Mi40LiBEaWZmZXJlbnRpYWwgcHJvZmlsZXMgd2l0aCA8c3BhbiBjbGFzcz0iY29tbWFuZCI+PHN0cm9uZz5vcHJlcG9ydDwvc3Ryb25nPjwvc3Bhbj48L2E+CisgICAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDIiPgorICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjb3ByZXBvcnQtYW5vbiI+Mi41LiBBbm9ueW1vdXMgZXhlY3V0YWJsZSBtYXBwaW5nczwvYT4KKyAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MiI+CisgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNvcHJlcG9ydC14bWwiPjIuNi4gWE1MIGZvcm1hdHRlZCBvdXRwdXQ8L2E+CisgICAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDIiPgorICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjb3ByZXBvcnQtb3B0aW9ucyI+Mi43LiBPcHRpb25zIGZvciA8c3BhbiBjbGFzcz0iY29tbWFuZCI+PHN0cm9uZz5vcHJlcG9ydDwvc3Ryb25nPjwvc3Bhbj48L2E+CisgICAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgICAgPC9kbD4KKyAgICAgICAgICAgIDwvZGQ+CisgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MSI+CisgICAgICAgICAgICAgICAgPGEgaHJlZj0iI29wYW5ub3RhdGUiPjMuIE91dHB1dHRpbmcgYW5ub3RhdGVkIHNvdXJjZSAoPHNwYW4gY2xhc3M9ImNvbW1hbmQiPjxzdHJvbmc+b3Bhbm5vdGF0ZTwvc3Ryb25nPjwvc3Bhbj4pPC9hPgorICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgPGRkPgorICAgICAgICAgICAgICA8ZGw+CisgICAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QyIj4KKyAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI29wYW5ub3RhdGUtZmluZGluZy1zb3VyY2UiPjMuMS4gTG9jYXRpbmcgc291cmNlIGZpbGVzPC9hPgorICAgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QyIj4KKyAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI29wYW5ub3RhdGUtZGV0YWlscyI+My4yLiBVc2FnZSBvZiA8c3BhbiBjbGFzcz0iY29tbWFuZCI+PHN0cm9uZz5vcGFubm90YXRlPC9zdHJvbmc+PC9zcGFuPjwvYT4KKyAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgICA8L2RsPgorICAgICAgICAgICAgPC9kZD4KKyAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QxIj4KKyAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ2V0dGluZy1qaXQtcmVwb3J0cyI+NC4gT1Byb2ZpbGUgcmVzdWx0cyB3aXRoIEpJVCBzYW1wbGVzPC9hPgorICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDEiPgorICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNvcGdwcm9mIj41LiA8c3BhbiBjbGFzcz0iY29tbWFuZCI+PHN0cm9uZz5ncHJvZjwvc3Ryb25nPjwvc3Bhbj4tY29tcGF0aWJsZSBvdXRwdXQgKDxzcGFuIGNsYXNzPSJjb21tYW5kIj48c3Ryb25nPm9wZ3Byb2Y8L3N0cm9uZz48L3NwYW4+KTwvYT4KKyAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgIDxkZD4KKyAgICAgICAgICAgICAgPGRsPgorICAgICAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MiI+CisgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNvcGdwcm9mLWRldGFpbHMiPjUuMS4gVXNhZ2Ugb2YgPHNwYW4gY2xhc3M9ImNvbW1hbmQiPjxzdHJvbmc+b3BncHJvZjwvc3Ryb25nPjwvc3Bhbj48L2E+CisgICAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgICAgPC9kbD4KKyAgICAgICAgICAgIDwvZGQ+CisgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MSI+CisgICAgICAgICAgICAgICAgPGEgaHJlZj0iI29wYXJjaGl2ZSI+Ni4gQXJjaGl2aW5nIG1lYXN1cmVtZW50cyAoPHNwYW4gY2xhc3M9ImNvbW1hbmQiPjxzdHJvbmc+b3BhcmNoaXZlPC9zdHJvbmc+PC9zcGFuPik8L2E+CisgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICA8ZGQ+CisgICAgICAgICAgICAgIDxkbD4KKyAgICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDIiPgorICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjb3BhcmNoaXZlLWRldGFpbHMiPjYuMS4gVXNhZ2Ugb2YgPHNwYW4gY2xhc3M9ImNvbW1hbmQiPjxzdHJvbmc+b3BhcmNoaXZlPC9zdHJvbmc+PC9zcGFuPjwvYT4KKyAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgICA8L2RsPgorICAgICAgICAgICAgPC9kZD4KKyAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QxIj4KKyAgICAgICAgICAgICAgICA8YSBocmVmPSIjb3BpbXBvcnQiPjcuIENvbnZlcnRpbmcgc2FtcGxlIGRhdGFiYXNlIGZpbGVzICg8c3BhbiBjbGFzcz0iY29tbWFuZCI+PHN0cm9uZz5vcGltcG9ydDwvc3Ryb25nPjwvc3Bhbj4pPC9hPgorICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgPGRkPgorICAgICAgICAgICAgICA8ZGw+CisgICAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QyIj4KKyAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI29waW1wb3J0LWRldGFpbHMiPjcuMS4gVXNhZ2Ugb2YgPHNwYW4gY2xhc3M9ImNvbW1hbmQiPjxzdHJvbmc+b3BpbXBvcnQ8L3N0cm9uZz48L3NwYW4+PC9hPgorICAgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICAgIDwvZGw+CisgICAgICAgICAgICA8L2RkPgorICAgICAgICAgIDwvZGw+CisgICAgICAgIDwvZGl2PgorICAgICAgICA8cD4KK09LLCBzbyB0aGUgcHJvZmlsZXIgaGFzIGJlZW4gcnVubmluZywgYnV0IGl0J3Mgbm90IG11Y2ggdXNlIHVubGVzcyB3ZSBjYW4gZ2V0IHNvbWUgZGF0YSBvdXQuIEZhaXJseSBvZnRlbiwKK09Qcm9maWxlIGRvZXMgYSBsaXR0bGUgPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+dG9vPC9lbT48L3NwYW4+IGdvb2QgYSBqb2Igb2Yga2VlcGluZyBvdmVyaGVhZCBsb3csIGFuZCBubyBkYXRhIHJlYWNoZXMKK3RoZSBwcm9maWxlci4gVGhpcyBjYW4gaGFwcGVuIG9uIGxpZ2h0bHktbG9hZGVkIG1hY2hpbmVzLiBSZW1lbWJlciB5b3UgY2FuIGZvcmNlIGEgZHVtcCBhdCBhbnkgdGltZSB3aXRoIDoKKzwvcD4KKyAgICAgICAgPHA+CisgICAgICAgICAgPHNwYW4gY2xhc3M9ImNvbW1hbmQiPgorICAgICAgICAgICAgPHN0cm9uZz5vcGNvbnRyb2wgLS1kdW1wPC9zdHJvbmc+CisgICAgICAgICAgPC9zcGFuPgorICAgICAgICA8L3A+CisgICAgICAgIDxwPlJlbWVtYmVyIHRvIGRvIHRoaXMgYmVmb3JlIGNvbXBsYWluaW5nIHRoZXJlIGlzIG5vIHByb2ZpbGluZyBkYXRhICEKK05vdyB0aGF0IHdlJ3ZlIGdvdCBzb21lIGRhdGEsIGl0IGhhcyB0byBiZSBwcm9jZXNzZWQuIFRoYXQncyB0aGUgam9iIG9mIDxzcGFuIGNsYXNzPSJjb21tYW5kIj48c3Ryb25nPm9wcmVwb3J0PC9zdHJvbmc+PC9zcGFuPiwKKzxzcGFuIGNsYXNzPSJjb21tYW5kIj48c3Ryb25nPm9wYW5ub3RhdGU8L3N0cm9uZz48L3NwYW4+LCBvciA8c3BhbiBjbGFzcz0iY29tbWFuZCI+PHN0cm9uZz5vcGdwcm9mPC9zdHJvbmc+PC9zcGFuPi4KKzwvcD4KKyAgICAgICAgPGRpdiBjbGFzcz0ic2VjdDEiIHRpdGxlPSIxLqBQcm9maWxlIHNwZWNpZmljYXRpb25zIj4KKyAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgorICAgICAgICAgICAgPGRpdj4KKyAgICAgICAgICAgICAgPGRpdj4KKyAgICAgICAgICAgICAgICA8aDIgY2xhc3M9InRpdGxlIiBzdHlsZT0iY2xlYXI6IGJvdGgiPjxhIGlkPSJwcm9maWxlLXNwZWMiPjwvYT4xLqBQcm9maWxlIHNwZWNpZmljYXRpb25zPC9oMj4KKyAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICA8cD4KK0FsbCBvZiB0aGUgYW5hbHlzaXMgdG9vbHMgdGFrZSBhIDxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPnByb2ZpbGUgc3BlY2lmaWNhdGlvbjwvZW0+PC9zcGFuPi4KK1RoaXMgaXMgYSBzZXQgb2YgZGVmaW5pdGlvbnMgdGhhdCBkZXNjcmliZSB3aGljaCBhY3R1YWwgcHJvZmlsZXMgc2hvdWxkIGJlCitleGFtaW5lZC4gVGhlIHNpbXBsZXN0IHByb2ZpbGUgc3BlY2lmaWNhdGlvbiBpcyBlbXB0eTogdGhpcyB3aWxsIG1hdGNoIGFsbAordGhlIGF2YWlsYWJsZSBwcm9maWxlIGZpbGVzIGZvciB0aGUgY3VycmVudCBzZXNzaW9uICh0aGlzIGlzIHdoYXQgaGFwcGVucword2hlbiB5b3UgZG8gPHNwYW4gY2xhc3M9ImNvbW1hbmQiPjxzdHJvbmc+b3ByZXBvcnQ8L3N0cm9uZz48L3NwYW4+KS4KKzwvcD4KKyAgICAgICAgICA8cD4KK1NwZWNpZmljYXRpb24gcGFyYW1ldGVycyBhcmUgb2YgdGhlIGZvcm0gPGNvZGUgY2xhc3M9Im9wdGlvbiI+bmFtZTp2YWx1ZVssdmFsdWVdPC9jb2RlPi4KK0ZvciBleGFtcGxlLCBpZiBJIHdhbnRlZCB0byBnZXQgYSBjb21iaW5lZCBzeW1ib2wgc3VtbWFyeSBmb3IKKzxjb2RlIGNsYXNzPSJmaWxlbmFtZSI+L2Jpbi9teXByb2c8L2NvZGU+IGFuZCA8Y29kZSBjbGFzcz0iZmlsZW5hbWUiPi9iaW4vbXlwcm9nMjwvY29kZT4sCitJIGNvdWxkIGRvIDxzcGFuIGNsYXNzPSJjb21tYW5kIj48c3Ryb25nPm9wcmVwb3J0IC1sIGltYWdlOi9iaW4vbXlwcm9nLC9iaW4vbXlwcm9nMjwvc3Ryb25nPjwvc3Bhbj4uCitBcyBhIHNwZWNpYWwgY2FzZSwgeW91IGRvbid0IGFjdHVhbGx5IG5lZWQgdG8gc3BlY2lmeSB0aGUgPGNvZGUgY2xhc3M9Im9wdGlvbiI+aW1hZ2U6PC9jb2RlPgorcGFydCBoZXJlOiBhbnl0aGluZyBsZWZ0IG9uIHRoZSBjb21tYW5kIGxpbmUgaXMgYXNzdW1lZCB0byBiZSBhbgorPGNvZGUgY2xhc3M9Im9wdGlvbiI+aW1hZ2U6PC9jb2RlPiBuYW1lLiBTaW1pbGFybHksIGlmIG5vIDxjb2RlIGNsYXNzPSJvcHRpb24iPnNlc3Npb246PC9jb2RlPgoraXMgc3BlY2lmaWVkLCB0aGVuIDxjb2RlIGNsYXNzPSJvcHRpb24iPnNlc3Npb246Y3VycmVudDwvY29kZT4gaXMgYXNzdW1lZCAoImN1cnJlbnQiCitpcyBhIHNwZWNpYWwgbmFtZSBvZiB0aGUgY3VycmVudCAvIGxhc3QgcHJvZmlsaW5nIHNlc3Npb24pLgorPC9wPgorICAgICAgICAgIDxwPgorSW4gYWRkaXRpb24gdG8gdGhlIGNvbW1hLXNlcGFyYXRlZCBsaXN0IHNob3duIGFib3ZlLCBzb21lIG9mIHRoZSAKK3NwZWNpZmljYXRpb24gcGFyYW1ldGVycyBjYW4gdGFrZSA8c3BhbiBjbGFzcz0iY29tbWFuZCI+PHN0cm9uZz5nbG9iPC9zdHJvbmc+PC9zcGFuPi1zdHlsZQordmFsdWVzLiBGb3IgZXhhbXBsZSwgaWYgSSB3YW50IHRvIHNlZSBpbWFnZSBzdW1tYXJpZXMgZm9yIGFsbAorYmluYXJpZXMgcHJvZmlsZWQgaW4gPGNvZGUgY2xhc3M9ImZpbGVuYW1lIj4vdXNyL2Jpbi88L2NvZGU+LCBJIGNvdWxkIGRvCis8c3BhbiBjbGFzcz0iY29tbWFuZCI+PHN0cm9uZz5vcHJlcG9ydCBpbWFnZTovdXNyL2Jpbi9cKjwvc3Ryb25nPjwvc3Bhbj4uIE5vdGUgdGhlIG5lY2Vzc2l0eQordG8gZXNjYXBlIHRoZSBzcGVjaWFsIGNoYXJhY3RlciBmcm9tIHRoZSBzaGVsbC4KKzwvcD4KKyAgICAgICAgICA8cD4KK0ZvciA8c3BhbiBjbGFzcz0iY29tbWFuZCI+PHN0cm9uZz5vcHJlcG9ydDwvc3Ryb25nPjwvc3Bhbj4sIHByb2ZpbGUgc3BlY2lmaWNhdGlvbnMgY2FuIGJlIHVzZWQgdG8KK2RlZmluZSB0d28gcHJvZmlsZXMsIGdpdmluZyBkaWZmZXJlbnRpYWwgb3V0cHV0LiBUaGlzIGlzIGRvbmUgYnkKK2VuY2xvc2luZyBlYWNoIG9mIHRoZSB0d28gc3BlY2lmaWNhdGlvbnMgd2l0aGluIGN1cmx5IGJyYWNlcywgYXMgc2hvd24KK2luIHRoZSBleGFtcGxlcyBiZWxvdy4gQW55IHNwZWNpZmljYXRpb25zIG91dHNpZGUgb2YgY3VybHkgYnJhY2VzIGFyZQorc2hhcmVkIGFjcm9zcyBib3RoLgorPC9wPgorICAgICAgICAgIDxkaXYgY2xhc3M9InNlY3QyIiB0aXRsZT0iMS4xLqBFeGFtcGxlcyI+CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgorICAgICAgICAgICAgICA8ZGl2PgorICAgICAgICAgICAgICAgIDxkaXY+CisgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9InRpdGxlIj48YSBpZD0icHJvZmlsZS1zcGVjLWV4YW1wbGVzIj48L2E+MS4xLqBFeGFtcGxlczwvaDM+CisgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICA8cD4KK0ltYWdlIHN1bW1hcmllcyBmb3IgYWxsIHByb2ZpbGVzIHdpdGggPGNvZGUgY2xhc3M9ImNvbnN0YW50Ij5EQVRBX01FTV9SRUZTPC9jb2RlPgorc2FtcGxlcyBpbiB0aGUgc2F2ZWQgc2Vzc2lvbiBjYWxsZWQgInN0cmVzc3Rlc3QiIDoKKzwvcD4KKyAgICAgICAgICAgIDx0YWJsZSB4bWxucz0iIiBib3JkZXI9IjAiIHN0eWxlPSJiYWNrZ3JvdW5kOiAjRTBFMEUwOyIgd2lkdGg9IjkwJSI+CisgICAgICAgICAgICAgIDx0cj4KKyAgICAgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgICAgICA8cHJlIGNsYXNzPSJzY3JlZW4iPgorIyBvcHJlcG9ydCBzZXNzaW9uOnN0cmVzc3Rlc3QgZXZlbnQ6REFUQV9NRU1fUkVGUworPC9wcmU+CisgICAgICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgICAgPC90cj4KKyAgICAgICAgICAgIDwvdGFibGU+CisgICAgICAgICAgICA8cD4KK1N5bWJvbCBzdW1tYXJ5IGZvciB0aGUgYXBwbGljYXRpb24gY2FsbGVkICJ0ZXN0X3N5bTUzYzh4eCw5eHgiLiBOb3RlIHRoZQorZXNjYXBpbmcgaXMgbmVjZXNzYXJ5IGFzIDxjb2RlIGNsYXNzPSJvcHRpb24iPmltYWdlOjwvY29kZT4gdGFrZXMgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdC4KKzwvcD4KKyAgICAgICAgICAgIDx0YWJsZSB4bWxucz0iIiBib3JkZXI9IjAiIHN0eWxlPSJiYWNrZ3JvdW5kOiAjRTBFMEUwOyIgd2lkdGg9IjkwJSI+CisgICAgICAgICAgICAgIDx0cj4KKyAgICAgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgICAgICA8cHJlIGNsYXNzPSJzY3JlZW4iPgorIyBvcHJlcG9ydCAtbCAuL3Rlc3QvdGVzdF9zeW01M2M4eHhcLDl4eAorPC9wcmU+CisgICAgICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgICAgPC90cj4KKyAgICAgICAgICAgIDwvdGFibGU+CisgICAgICAgICAgICA8cD4KK0ltYWdlIHN1bW1hcmllcyBmb3IgYWxsIGJpbmFyaWVzIGluIHRoZSA8Y29kZSBjbGFzcz0iZmlsZW5hbWUiPnRlc3Q8L2NvZGU+IGRpcmVjdG9yeSwKK2V4Y2VwdGluZyA8Y29kZSBjbGFzcz0iZmlsZW5hbWUiPmJvcmluZy10ZXN0PC9jb2RlPiA6Cis8L3A+CisgICAgICAgICAgICA8dGFibGUgeG1sbnM9IiIgYm9yZGVyPSIwIiBzdHlsZT0iYmFja2dyb3VuZDogI0UwRTBFMDsiIHdpZHRoPSI5MCUiPgorICAgICAgICAgICAgICA8dHI+CisgICAgICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICAgICAgPHByZSBjbGFzcz0ic2NyZWVuIj4KKyMgb3ByZXBvcnQgaW1hZ2U6Li90ZXN0L1wqIGltYWdlLWV4Y2x1ZGU6Li90ZXN0L2JvcmluZy10ZXN0Cis8L3ByZT4KKyAgICAgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgICA8L3RyPgorICAgICAgICAgICAgPC90YWJsZT4KKyAgICAgICAgICAgIDxwPgorRGlmZmVyZW50aWFsIHByb2ZpbGUgb2YgYSBiaW5hcnkgc3RvcmVkIGluIHR3byBhcmNoaXZlcyA6Cis8L3A+CisgICAgICAgICAgICA8dGFibGUgeG1sbnM9IiIgYm9yZGVyPSIwIiBzdHlsZT0iYmFja2dyb3VuZDogI0UwRTBFMDsiIHdpZHRoPSI5MCUiPgorICAgICAgICAgICAgICA8dHI+CisgICAgICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICAgICAgPHByZSBjbGFzcz0ic2NyZWVuIj4KKyMgb3ByZXBvcnQgLWwgL2Jpbi9iYXNoIHsgYXJjaGl2ZTouL29yaWcgfSB7IGFyY2hpdmU6Li9uZXcgfQorPC9wcmU+CisgICAgICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgICAgPC90cj4KKyAgICAgICAgICAgIDwvdGFibGU+CisgICAgICAgICAgICA8cD4KK0RpZmZlcmVudGlhbCBwcm9maWxlIG9mIGFuIGFyY2hpdmVkIGJpbmFyeSB3aXRoIHRoZSBjdXJyZW50IHNlc3Npb24gOgorPC9wPgorICAgICAgICAgICAgPHRhYmxlIHhtbG5zPSIiIGJvcmRlcj0iMCIgc3R5bGU9ImJhY2tncm91bmQ6ICNFMEUwRTA7IiB3aWR0aD0iOTAlIj4KKyAgICAgICAgICAgICAgPHRyPgorICAgICAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgICAgIDxwcmUgY2xhc3M9InNjcmVlbiI+CisjIG9wcmVwb3J0IC1sIC9iaW4vYmFzaCB7IGFyY2hpdmU6Li9vcmlnIH0geyB9Cis8L3ByZT4KKyAgICAgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgICA8L3RyPgorICAgICAgICAgICAgPC90YWJsZT4KKyAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0MiIgdGl0bGU9IjEuMi6gUHJvZmlsZSBzcGVjaWZpY2F0aW9uIHBhcmFtZXRlcnMiPgorICAgICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KKyAgICAgICAgICAgICAgPGRpdj4KKyAgICAgICAgICAgICAgICA8ZGl2PgorICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPSJ0aXRsZSI+PGEgaWQ9InByb2ZpbGUtc3BlYy1kZXRhaWxzIj48L2E+MS4yLqBQcm9maWxlIHNwZWNpZmljYXRpb24gcGFyYW1ldGVyczwvaDM+CisgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgorICAgICAgICAgICAgICA8ZGw+CisgICAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRlcm0iPgorICAgICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj5hcmNoaXZlOjwvY29kZT4KKyAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj4KKyAgICAgICAgICAgICAgICAgICAgICA8ZW0+YXJjaGl2ZXBhdGg8L2VtPgorICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgICAgICA8ZGQ+CisgICAgICAgICAgICAgICAgICA8cD4KKwkJQSBwYXRoIHRvIGFuIGFyY2hpdmUgbWFkZSB3aXRoIDxzcGFuIGNsYXNzPSJjb21tYW5kIj48c3Ryb25nPm9wYXJjaGl2ZTwvc3Ryb25nPjwvc3Bhbj4uCisJCUFic2VuY2Ugb2YgdGhpcyB0YWcsIHVubGlrZSBvdGhlcnMsIG1lYW5zICJ0aGUgY3VycmVudCBzeXN0ZW0iLAorCQllcXVpdmFsZW50IHRvIHNwZWNpZnlpbmcgImFyY2hpdmU6Ii4KKwkJPC9wPgorICAgICAgICAgICAgICAgIDwvZGQ+CisgICAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRlcm0iPgorICAgICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj5zZXNzaW9uOjwvY29kZT4KKyAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj4KKyAgICAgICAgICAgICAgICAgICAgICA8ZW0+c2Vzc2lvbmxpc3Q8L2VtPgorICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgICAgICA8ZGQ+CisgICAgICAgICAgICAgICAgICA8cD4KKwkJQSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBzZXNzaW9uIG5hbWVzIHRvIHJlc29sdmUgaW4uIEFic2VuY2Ugb2YgdGhpcworCQl0YWcsIHVubGlrZSBvdGhlcnMsIG1lYW5zICJ0aGUgY3VycmVudCBzZXNzaW9uIiwgZXF1aXZhbGVudCB0bworCQlzcGVjaWZ5aW5nICJzZXNzaW9uOmN1cnJlbnQiLgorCQk8L3A+CisgICAgICAgICAgICAgICAgPC9kZD4KKyAgICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGVybSI+CisgICAgICAgICAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPnNlc3Npb24tZXhjbHVkZTo8L2NvZGU+CisgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+CisgICAgICAgICAgICAgICAgICAgICAgPGVtPnNlc3Npb25saXN0PC9lbT4KKyAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICAgICAgPGRkPgorICAgICAgICAgICAgICAgICAgPHA+CisgICAgICAgICAgICAgICAgQSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBzZXNzaW9ucyB0byBleGNsdWRlLgorCQk8L3A+CisgICAgICAgICAgICAgICAgPC9kZD4KKyAgICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGVybSI+CisgICAgICAgICAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPmltYWdlOjwvY29kZT4KKyAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj4KKyAgICAgICAgICAgICAgICAgICAgICA8ZW0+aW1hZ2VsaXN0PC9lbT4KKyAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICAgICAgPGRkPgorICAgICAgICAgICAgICAgICAgPHA+CisgICAgICAgICAgICAgICAgQSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBpbWFnZSBuYW1lcyB0byByZXNvbHZlLiBFYWNoIGVudHJ5IG1heSBiZSByZWxhdGl2ZQorICAgICAgICAgICAgICAgIHBhdGgsIDxzcGFuIGNsYXNzPSJjb21tYW5kIj48c3Ryb25nPmdsb2I8L3N0cm9uZz48L3NwYW4+LXN0eWxlIG5hbWUsIG9yIGZ1bGwgcGF0aCwgZS5nLjwvcD4KKyAgICAgICAgICAgICAgICAgIDx0YWJsZSB4bWxucz0iIiBib3JkZXI9IjAiIHN0eWxlPSJiYWNrZ3JvdW5kOiAjRTBFMEUwOyIgd2lkdGg9IjkwJSI+CisgICAgICAgICAgICAgICAgICAgIDx0cj4KKyAgICAgICAgICAgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8cHJlIGNsYXNzPSJzY3JlZW4iPm9wcmVwb3J0ICdpbWFnZTovdXNyL2Jpbi9vcHJvZmlsZWQsKm9wKiwuL29wcmVwb3J0JzwvcHJlPgorICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICAgICAgICAgIDwvdHI+CisgICAgICAgICAgICAgICAgICA8L3RhYmxlPgorICAgICAgICAgICAgICAgIDwvZGQ+CisgICAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRlcm0iPgorICAgICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj5pbWFnZS1leGNsdWRlOjwvY29kZT4KKyAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj4KKyAgICAgICAgICAgICAgICAgICAgICA8ZW0+aW1hZ2VsaXN0PC9lbT4KKyAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICAgICAgPGRkPgorICAgICAgICAgICAgICAgICAgPHA+CisJCVNhbWUgYXMgPGNvZGUgY2xhc3M9Im9wdGlvbiI+aW1hZ2U6PC9jb2RlPiwgYnV0IHRoZSBtYXRjaGluZyBpbWFnZXMgYXJlIGV4Y2x1ZGVkLgorCQk8L3A+CisgICAgICAgICAgICAgICAgPC9kZD4KKyAgICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGVybSI+CisgICAgICAgICAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPmxpYi1pbWFnZTo8L2NvZGU+CisgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+CisgICAgICAgICAgICAgICAgICAgICAgPGVtPmltYWdlbGlzdDwvZW0+CisgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgICAgIDxkZD4KKyAgICAgICAgICAgICAgICAgIDxwPgorCQlTYW1lIGFzIDxjb2RlIGNsYXNzPSJvcHRpb24iPmltYWdlOjwvY29kZT4sIGJ1dCBvbmx5IGZvciBpbWFnZXMgdGhhdCBhcmUgZm9yCisJCWEgcGFydGljdWxhciBwcmltYXJ5IGJpbmFyeSBpbWFnZSAobmFtZWx5LCBhbiBhcHBsaWNhdGlvbikuIFRoaXMgb25seQorCQltYWtlcyBzZW5zZSB0byB1c2UgaWYgeW91J3JlIHVzaW5nIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tc2VwYXJhdGU8L2NvZGU+LgorCQlUaGlzIGluY2x1ZGVzIGtlcm5lbCBtb2R1bGVzIGFuZCB0aGUga2VybmVsIHdoZW4gdXNpbmcKKwkJPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1zZXBhcmF0ZT1rZXJuZWw8L2NvZGU+LgorCQk8L3A+CisgICAgICAgICAgICAgICAgPC9kZD4KKyAgICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGVybSI+CisgICAgICAgICAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPmxpYi1pbWFnZS1leGNsdWRlOjwvY29kZT4KKyAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj4KKyAgICAgICAgICAgICAgICAgICAgICA8ZW0+aW1hZ2VsaXN0PC9lbT4KKyAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICAgICAgPGRkPgorICAgICAgICAgICAgICAgICAgPHA+CisJCVNhbWUgYXMgPGNvZGUgY2xhc3M9Im9wdGlvbiI+bGliLWltYWdlOjwvY29kZT4sIGJ1dCB0aGUgbWF0Y2hpbmcgaW1hZ2VzCisJCWFyZSBleGNsdWRlZC4KKwkJPC9wPgorICAgICAgICAgICAgICAgIDwvZGQ+CisgICAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRlcm0iPgorICAgICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj5ldmVudDo8L2NvZGU+CisgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+CisgICAgICAgICAgICAgICAgICAgICAgPGVtPmV2ZW50bGlzdDwvZW0+CisgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgICAgIDxkZD4KKyAgICAgICAgICAgICAgICAgIDxwPgorCQlUaGUgc3ltYm9saWMgZXZlbnQgbmFtZSB0byBtYXRjaCBvbiwgZS5nLiA8Y29kZSBjbGFzcz0ib3B0aW9uIj5ldmVudDpEQVRBX01FTV9SRUZTPC9jb2RlPi4KKwkJWW91IGNhbiBwYXNzIGEgbGlzdCBvZiBldmVudHMgZm9yIHNpZGUtYnktc2lkZSBjb21wYXJpc29uIHdpdGggPHNwYW4gY2xhc3M9ImNvbW1hbmQiPjxzdHJvbmc+b3ByZXBvcnQ8L3N0cm9uZz48L3NwYW4+LgorCQlXaGVuIHVzaW5nIHRoZSB0aW1lciBpbnRlcnJ1cHQsIHRoZSBldmVudCBpcyBhbHdheXMgIlRJTUVSIi4KKwkJPC9wPgorICAgICAgICAgICAgICAgIDwvZGQ+CisgICAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRlcm0iPgorICAgICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj5jb3VudDo8L2NvZGU+CisgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+CisgICAgICAgICAgICAgICAgICAgICAgPGVtPmV2ZW50Y291bnRsaXN0PC9lbT4KKyAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICAgICAgPGRkPgorICAgICAgICAgICAgICAgICAgPHA+CisJCVRoZSBldmVudCBjb3VudCB0byBtYXRjaCBvbiwgZS5nLiA8Y29kZSBjbGFzcz0ib3B0aW9uIj5ldmVudDpEQVRBX01FTV9SRUZTIGNvdW50OjMwMDAwPC9jb2RlPi4KKwkJTm90ZSB0aGF0IHRoaXMgdmFsdWUgcmVmZXJzIHRvIHRoZSBzZXR0aW5nIHVzZWQgZm9yIDxzcGFuIGNsYXNzPSJjb21tYW5kIj48c3Ryb25nPm9wY29udHJvbDwvc3Ryb25nPjwvc3Bhbj4KKwkJb25seSwgYW5kIGhhcyBub3RoaW5nIHRvIGRvIHdpdGggdGhlIHNhbXBsZSBjb3VudHMgaW4gdGhlIHByb2ZpbGUgZGF0YQorCQlpdHNlbGYuCisJCVlvdSBjYW4gcGFzcyBhIGxpc3Qgb2YgZXZlbnRzIGZvciBzaWRlLWJ5LXNpZGUgY29tcGFyaXNvbiB3aXRoIDxzcGFuIGNsYXNzPSJjb21tYW5kIj48c3Ryb25nPm9wcmVwb3J0PC9zdHJvbmc+PC9zcGFuPi4KKwkJV2hlbiB1c2luZyB0aGUgdGltZXIgaW50ZXJydXB0LCB0aGUgY291bnQgaXMgYWx3YXlzIDAgKGluZGljYXRpbmcgaXQgY2Fubm90IGJlIHNldCkuCisJCTwvcD4KKyAgICAgICAgICAgICAgICA8L2RkPgorICAgICAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXJtIj4KKyAgICAgICAgICAgICAgICAgICAgPGNvZGUgY2xhc3M9Im9wdGlvbiI+dW5pdC1tYXNrOjwvY29kZT4KKyAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj4KKyAgICAgICAgICAgICAgICAgICAgICA8ZW0+bWFza2xpc3Q8L2VtPgorICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgICAgICA8ZGQ+CisgICAgICAgICAgICAgICAgICA8cD4KKwkJVGhlIHVuaXQgbWFzayB2YWx1ZSBvZiB0aGUgZXZlbnQgdG8gbWF0Y2ggb24sIGUuZy4gPGNvZGUgY2xhc3M9Im9wdGlvbiI+dW5pdC1tYXNrOjE8L2NvZGU+LgorCQlZb3UgY2FuIHBhc3MgYSBsaXN0IG9mIGV2ZW50cyBmb3Igc2lkZS1ieS1zaWRlIGNvbXBhcmlzb24gd2l0aCA8c3BhbiBjbGFzcz0iY29tbWFuZCI+PHN0cm9uZz5vcHJlcG9ydDwvc3Ryb25nPjwvc3Bhbj4uCisJCTwvcD4KKyAgICAgICAgICAgICAgICA8L2RkPgorICAgICAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXJtIj4KKyAgICAgICAgICAgICAgICAgICAgPGNvZGUgY2xhc3M9Im9wdGlvbiI+Y3B1OjwvY29kZT4KKyAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj4KKyAgICAgICAgICAgICAgICAgICAgICA8ZW0+Y3B1bGlzdDwvZW0+CisgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgICAgIDxkZD4KKyAgICAgICAgICAgICAgICAgIDxwPgorCQlPbmx5IGNvbnNpZGVyIHByb2ZpbGVzIGZvciB0aGUgZ2l2ZW4gbnVtYmVyZWQgQ1BVIChzdGFydGluZyBmcm9tIHplcm8pLgorCQlUaGlzIGlzIG9ubHkgdXNlZnVsIHdoZW4gdXNpbmcgQ1BVIHByb2ZpbGUgc2VwYXJhdGlvbi4KKwkJPC9wPgorICAgICAgICAgICAgICAgIDwvZGQ+CisgICAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRlcm0iPgorICAgICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj50Z2lkOjwvY29kZT4KKyAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj4KKyAgICAgICAgICAgICAgICAgICAgICA8ZW0+cGlkbGlzdDwvZW0+CisgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgICAgIDxkZD4KKyAgICAgICAgICAgICAgICAgIDxwPgorCQlPbmx5IGNvbnNpZGVyIHByb2ZpbGVzIGZvciB0aGUgZ2l2ZW4gdGFzayBncm91cHMuIFVubGVzcyBzb21lIHByb2dyYW0KKwkJaXMgdXNpbmcgdGhyZWFkcywgdGhlIHRhc2sgZ3JvdXAgSUQgb2YgYSBwcm9jZXNzIGlzIHRoZSBzYW1lCisJCWFzIGl0cyBwcm9jZXNzIElELiBUaGlzIG9wdGlvbiBjb3JyZXNwb25kcyB0byB0aGUgUE9TSVgKKwkJbm90aW9uIG9mIGEgdGhyZWFkIGdyb3VwLgorCQlUaGlzIGlzIG9ubHkgdXNlZnVsIHdoZW4gdXNpbmcgcGVyLXByb2Nlc3MgcHJvZmlsZSBzZXBhcmF0aW9uLgorCQk8L3A+CisgICAgICAgICAgICAgICAgPC9kZD4KKyAgICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGVybSI+CisgICAgICAgICAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPnRpZDo8L2NvZGU+CisgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+CisgICAgICAgICAgICAgICAgICAgICAgPGVtPnRpZGxpc3Q8L2VtPgorICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgICAgICA8ZGQ+CisgICAgICAgICAgICAgICAgICA8cD4KKwkJT25seSBjb25zaWRlciBwcm9maWxlcyBmb3IgdGhlIGdpdmVuIHRocmVhZHMuIFdoZW4gdXNpbmcKKwkJcmVjZW50IHRocmVhZCBsaWJyYXJpZXMsIGFsbCB0aHJlYWRzIGluIGEgcHJvY2VzcyBzaGFyZSB0aGUKKwkJc2FtZSB0YXNrIGdyb3VwIElELCBidXQgaGF2ZSBkaWZmZXJlbnQgdGhyZWFkIElEcy4gWW91IGNhbgorCQl1c2UgdGhpcyBvcHRpb24gaW4gY29tYmluYXRpb24gd2l0aCA8Y29kZSBjbGFzcz0ib3B0aW9uIj50Z2lkOjwvY29kZT4gdG8KKwkJcmVzdHJpY3QgdGhlIHJlc3VsdHMgdG8gcGFydGljdWxhciB0aHJlYWRzIHdpdGhpbiBhIHByb2Nlc3MuCisJCVRoaXMgaXMgb25seSB1c2VmdWwgd2hlbiB1c2luZyBwZXItcHJvY2VzcyBwcm9maWxlIHNlcGFyYXRpb24uCisJCTwvcD4KKyAgICAgICAgICAgICAgICA8L2RkPgorICAgICAgICAgICAgICA8L2RsPgorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgPGRpdiBjbGFzcz0ic2VjdDIiIHRpdGxlPSIxLjMuoExvY2F0aW5nIGFuZCBtYW5hZ2luZyBiaW5hcnkgaW1hZ2VzIj4KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlcGFnZSI+CisgICAgICAgICAgICAgIDxkaXY+CisgICAgICAgICAgICAgICAgPGRpdj4KKyAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz0idGl0bGUiPjxhIGlkPSJsb2NhdGluZy1hbmQtbWFuYWdpbmctYmluYXJ5LWltYWdlcyI+PC9hPjEuMy6gTG9jYXRpbmcgYW5kIG1hbmFnaW5nIGJpbmFyeSBpbWFnZXM8L2gzPgorICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgPHA+CitFYWNoIHNlc3Npb24ncyBzYW1wbGUgZmlsZXMgY2FuIGJlIGZvdW5kIGluIHRoZSAkU0VTU0lPTl9ESVIvc2FtcGxlcy8gZGlyZWN0b3J5IChkZWZhdWx0OiA8Y29kZSBjbGFzcz0iZmlsZW5hbWUiPi92YXIvbGliL29wcm9maWxlL3NhbXBsZXMvPC9jb2RlPikuCitUaGVzZSBhcmUgdXNlZCwgYWxvbmcgd2l0aCB0aGUgYmluYXJ5IGltYWdlIGZpbGVzLCB0byBwcm9kdWNlIGh1bWFuLXJlYWRhYmxlIGRhdGEuCitJbiBzb21lIGNpcmN1bXN0YW5jZXMgKGtlcm5lbCBtb2R1bGVzIGluIGFuIGluaXRyZCwgb3IgbW9kdWxlcyBvbiAyLjYga2VybmVscyksIE9Qcm9maWxlCit3aWxsIG5vdCBiZSBhYmxlIHRvIGZpbmQgdGhlIGJpbmFyeSBpbWFnZXMuIEFsbCB0aGUgdG9vbHMgaGF2ZSBhbiA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLWltYWdlLXBhdGg8L2NvZGU+CitvcHRpb24gdG8gd2hpY2ggeW91IGNhbiBwYXNzIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgYWx0ZXJuYXRlIHBhdGhzIHRvIHNlYXJjaC4gRm9yIGV4YW1wbGUsCitJIGNhbiBsZXQgT1Byb2ZpbGUgZmluZCBteSAyLjYgbW9kdWxlcyBieSB1c2luZyA8c3BhbiBjbGFzcz0iY29tbWFuZCI+PHN0cm9uZz4tLWltYWdlLXBhdGggL2xpYi9tb2R1bGVzLzIuNi4wL2tlcm5lbC88L3N0cm9uZz48L3NwYW4+LgorSXQgaXMgeW91ciByZXNwb25zaWJpbGl0eSB0byBlbnN1cmUgdGhhdCB0aGUgY29ycmVjdCBpbWFnZXMgYXJlIGZvdW5kIHdoZW4gdXNpbmcgdGhpcworb3B0aW9uLgorPC9wPgorICAgICAgICAgICAgPHA+CitOb3RlIHRoYXQgaWYgYSBiaW5hcnkgaW1hZ2UgY2hhbmdlcyBhZnRlciB0aGUgc2FtcGxlIGZpbGUgd2FzIGNyZWF0ZWQsIHlvdSB3b24ndCBiZSBhYmxlIHRvIGdldCB1c2VmdWwKK3N5bWJvbC1iYXNlZCBkYXRhIG91dC4gVGhpcyBzaXR1YXRpb24gaXMgZGV0ZWN0ZWQgZm9yIHlvdS4gSWYgeW91IHJlcGxhY2UgYSBiaW5hcnksIHlvdSBzaG91bGQKK21ha2Ugc3VyZSB0byBzYXZlIHRoZSBvbGQgYmluYXJ5IGlmIHlvdSBuZWVkIHRvIGRvIGNvbXBhcmF0aXZlIHByb2ZpbGVzLgorPC9wPgorICAgICAgICAgIDwvZGl2PgorICAgICAgICAgIDxkaXYgY2xhc3M9InNlY3QyIiB0aXRsZT0iMS40LqBXaGF0IHRvIGRvIHdoZW4geW91IGRvbid0IGdldCBhbnkgcmVzdWx0cyI+CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgorICAgICAgICAgICAgICA8ZGl2PgorICAgICAgICAgICAgICAgIDxkaXY+CisgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9InRpdGxlIj48YSBpZD0ibm8tcmVzdWx0cyI+PC9hPjEuNC6gV2hhdCB0byBkbyB3aGVuIHlvdSBkb24ndCBnZXQgYW55IHJlc3VsdHM8L2gzPgorICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgPHA+CitXaGVuIGF0dGVtcHRpbmcgdG8gZ2V0IG91dHB1dCwgeW91IG1heSBzZWUgdGhlIGVycm9yIDoKKzwvcD4KKyAgICAgICAgICAgIDx0YWJsZSB4bWxucz0iIiBib3JkZXI9IjAiIHN0eWxlPSJiYWNrZ3JvdW5kOiAjRTBFMEUwOyIgd2lkdGg9IjkwJSI+CisgICAgICAgICAgICAgIDx0cj4KKyAgICAgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgICAgICA8cHJlIGNsYXNzPSJzY3JlZW4iPgorZXJyb3I6IG5vIHNhbXBsZSBmaWxlcyBmb3VuZDogcHJvZmlsZSBzcGVjaWZpY2F0aW9uIHRvbyBzdHJpY3QgPworPC9wcmU+CisgICAgICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgICAgPC90cj4KKyAgICAgICAgICAgIDwvdGFibGU+CisgICAgICAgICAgICA8cD4KK1doYXQgdGhpcyBpcyBzYXlpbmcgaXMgdGhhdCB0aGUgcHJvZmlsZSBzcGVjaWZpY2F0aW9uIHlvdSBwYXNzZWQgaW4sCit3aGVuIG1hdGNoZWQgYWdhaW5zdCB0aGUgYXZhaWxhYmxlIHNhbXBsZSBmaWxlcywgcmVzdWx0ZWQgaW4gbm8gbWF0Y2hlcy4KK1RoZXJlIGFyZSBhIG51bWJlciBvZiByZWFzb25zIHRoaXMgbWlnaHQgaGFwcGVuOgorPC9wPgorICAgICAgICAgICAgPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KKyAgICAgICAgICAgICAgPGRsPgorICAgICAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXJtIj5zcGVsbGluZzwvc3Bhbj4KKyAgICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgICAgIDxkZD4KKyAgICAgICAgICAgICAgICAgIDxwPgorWW91IHNwZWNpZmllZCBhIGJpbmFyeSBuYW1lLCBidXQgc3BlbHQgaXQgd3JvbmdseS4gQ2hlY2sgeW91ciBzcGVsbGluZyAhCis8L3A+CisgICAgICAgICAgICAgICAgPC9kZD4KKyAgICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGVybSI+cHJvZmlsZXIgd2Fzbid0IHJ1bm5pbmc8L3NwYW4+CisgICAgICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgICAgICA8ZGQ+CisgICAgICAgICAgICAgICAgICA8cD4KK01ha2UgdmVyeSBzdXJlIHRoYXQgT1Byb2ZpbGUgd2FzIGFjdHVhbGx5IHVwIGFuZCBydW5uaW5nIHdoZW4geW91IHJhbgordGhlIGJpbmFyeS4KKzwvcD4KKyAgICAgICAgICAgICAgICA8L2RkPgorICAgICAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXJtIj5iaW5hcnkgZGlkbid0IHJ1biBsb25nIGVub3VnaDwvc3Bhbj4KKyAgICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgICAgIDxkZD4KKyAgICAgICAgICAgICAgICAgIDxwPgorUmVtZW1iZXIgT1Byb2ZpbGUgaXMgYSBzdGF0aXN0aWNhbCBwcm9maWxlciAtIHlvdSdyZSBub3QgZ3VhcmFudGVlZCB0bworZ2V0IHNhbXBsZXMgZm9yIHNob3J0LXJ1bm5pbmcgcHJvZ3JhbXMuIFlvdSBjYW4gaGVscCB0aGlzIGJ5IHVzaW5nIGEKK2xvd2VyIGNvdW50IGZvciB0aGUgcGVyZm9ybWFuY2UgY291bnRlciwgc28gdGhlcmUgYXJlIGEgbG90IG1vcmUgc2FtcGxlcwordGFrZW4gcGVyIHNlY29uZC4KKzwvcD4KKyAgICAgICAgICAgICAgICA8L2RkPgorICAgICAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXJtIj5iaW5hcnkgc3BlbnQgbW9zdCBvZiBpdHMgdGltZSBpbiBsaWJyYXJpZXM8L3NwYW4+CisgICAgICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgICAgICA8ZGQ+CisgICAgICAgICAgICAgICAgICA8cD4KK1NpbWlsYXJseSwgaWYgdGhlIGJpbmFyeSBzcGVuZHMgbGl0dGxlIHRpbWUgaW4gdGhlIG1haW4gYmluYXJ5IGltYWdlCitpdHNlbGYsIHdpdGggbW9zdCBvZiBpdCBzcGVudCBpbiBzaGFyZWQgbGlicmFyaWVzIGl0IHVzZXMsIHlvdSBtaWdodAorbm90IHNlZSBhbnkgc2FtcGxlcyBmb3IgdGhlIGJpbmFyeSBpbWFnZSBpdHNlbGYuIFlvdSBjYW4gY2hlY2sgdGhpcworYnkgdXNpbmcgPHNwYW4gY2xhc3M9ImNvbW1hbmQiPjxzdHJvbmc+b3Bjb250cm9sIC0tc2VwYXJhdGU9bGliPC9zdHJvbmc+PC9zcGFuPiBiZWZvcmUgdGhlCitwcm9maWxpbmcgc2Vzc2lvbiwgc28gPHNwYW4gY2xhc3M9ImNvbW1hbmQiPjxzdHJvbmc+b3ByZXBvcnQ8L3N0cm9uZz48L3NwYW4+IGFuZCBmcmllbmRzIHNob3cKK3RoZSBsaWJyYXJ5IHByb2ZpbGVzIG9uIGEgcGVyLWFwcGxpY2F0aW9uIGJhc2lzLgorPC9wPgorICAgICAgICAgICAgICAgIDwvZGQ+CisgICAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRlcm0iPnNwZWNpZmljYXRpb24gd2FzIHJlYWxseSB0b28gc3RyaWN0PC9zcGFuPgorICAgICAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICAgICAgPGRkPgorICAgICAgICAgICAgICAgICAgPHA+CitGb3IgZXhhbXBsZSwgeW91IHNwZWNpZmllZCBzb21ldGhpbmcgbGlrZSA8Y29kZSBjbGFzcz0ib3B0aW9uIj50Z2lkOjM0MzM8L2NvZGU+LAorYnV0IG5vIHRhc2sgd2l0aCB0aGF0IGdyb3VwIElEIGV2ZXIgcmFuIHRoZSBjb2RlLgorPC9wPgorICAgICAgICAgICAgICAgIDwvZGQ+CisgICAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRlcm0iPmJpbmFyeSBkaWRuJ3QgZ2VuZXJhdGUgYW55IGV2ZW50czwvc3Bhbj4KKyAgICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgICAgIDxkZD4KKyAgICAgICAgICAgICAgICAgIDxwPgorSWYgeW91J3JlIHVzaW5nIGEgcGFydGljdWxhciBldmVudCBjb3VudGVyLCBmb3IgZXhhbXBsZSBjb3VudGluZyBNTVgKK29wZXJhdGlvbnMsIHRoZSBjb2RlIG1pZ2h0IHNpbXBseSBoYXZlIG5vdCBnZW5lcmF0ZWQgYW55IGV2ZW50cyBpbiB0aGUKK2ZpcnN0IHBsYWNlLiBWZXJpZnkgdGhlIGNvZGUgeW91J3JlIHByb2ZpbGluZyBkb2VzIHdoYXQgeW91IGV4cGVjdCBpdAordG8uCis8L3A+CisgICAgICAgICAgICAgICAgPC9kZD4KKyAgICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGVybSI+eW91IGRpZG4ndCBzcGVjaWZ5IGtlcm5lbCBtb2R1bGUgbmFtZSBjb3JyZWN0bHk8L3NwYW4+CisgICAgICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgICAgICA8ZGQ+CisgICAgICAgICAgICAgICAgICA8cD4KK0lmIHlvdSdyZSB1c2luZyAyLjYga2VybmVscywgYW5kIHRyeWluZyB0byBnZXQgcmVwb3J0cyBmb3IgYSBrZXJuZWwKK21vZHVsZSwgbWFrZSBzdXJlIHRvIHVzZSB0aGUgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LXA8L2NvZGU+IG9wdGlvbiwgYW5kIHNwZWNpZnkgdGhlCittb2R1bGUgbmFtZSA8c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT53aXRoPC9lbT48L3NwYW4+IHRoZSA8Y29kZSBjbGFzcz0iZmlsZW5hbWUiPi5rbzwvY29kZT4KK2V4dGVuc2lvbi4gQ2hlY2sgaWYgdGhlIG1vZHVsZSBpcyBvbmUgbG9hZGVkIGZyb20gaW5pdHJkLgorPC9wPgorICAgICAgICAgICAgICAgIDwvZGQ+CisgICAgICAgICAgICAgIDwvZGw+CisgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgPC9kaXY+CisgICAgICAgIDxkaXYgY2xhc3M9InNlY3QxIiB0aXRsZT0iMi6gSW1hZ2Ugc3VtbWFyaWVzIGFuZCBzeW1ib2wgc3VtbWFyaWVzIChvcHJlcG9ydCkiPgorICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlcGFnZSI+CisgICAgICAgICAgICA8ZGl2PgorICAgICAgICAgICAgICA8ZGl2PgorICAgICAgICAgICAgICAgIDxoMiBjbGFzcz0idGl0bGUiIHN0eWxlPSJjbGVhcjogYm90aCI+PGEgaWQ9Im9wcmVwb3J0Ij48L2E+Mi6gSW1hZ2Ugc3VtbWFyaWVzIGFuZCBzeW1ib2wgc3VtbWFyaWVzICg8c3BhbiBjbGFzcz0iY29tbWFuZCI+PHN0cm9uZz5vcHJlcG9ydDwvc3Ryb25nPjwvc3Bhbj4pPC9oMj4KKyAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICA8cD4KK1RoZSA8c3BhbiBjbGFzcz0iY29tbWFuZCI+PHN0cm9uZz5vcHJlcG9ydDwvc3Ryb25nPjwvc3Bhbj4gdXRpbGl0eSBpcyB0aGUgcHJpbWFyeSB1dGlsaXR5IHlvdSB3aWxsIHVzZSBmb3IgCitnZXR0aW5nIGZvcm1hdHRlZCBkYXRhIG91dCBvZiBPUHJvZmlsZS4gSXQgcHJvZHVjZXMgdHdvIHR5cGVzIG9mIGRhdGE6IGltYWdlIHN1bW1hcmllcworYW5kIHN5bWJvbCBzdW1tYXJpZXMuIEFuIGltYWdlIHN1bW1hcnkgbGlzdHMgdGhlIG51bWJlciBvZiBzYW1wbGVzIGZvciBpbmRpdmlkdWFsCitiaW5hcnkgaW1hZ2VzIHN1Y2ggYXMgbGlicmFyaWVzIG9yIGFwcGxpY2F0aW9ucy4gU3ltYm9sIHN1bW1hcmllcyBwcm92aWRlIHBlci1zeW1ib2wKK3Byb2ZpbGUgZGF0YS4gSW4gdGhlIGZvbGxvd2luZyBleGFtcGxlLCB3ZSdyZSBnZXR0aW5nIGFuIGltYWdlIHN1bW1hcnkgZm9yIHRoZSB3aG9sZQorc3lzdGVtOgorPC9wPgorICAgICAgICAgIDx0YWJsZSB4bWxucz0iIiBib3JkZXI9IjAiIHN0eWxlPSJiYWNrZ3JvdW5kOiAjRTBFMEUwOyIgd2lkdGg9IjkwJSI+CisgICAgICAgICAgICA8dHI+CisgICAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgICA8cHJlIGNsYXNzPSJzY3JlZW4iPgorJCBvcHJlcG9ydCAtLWxvbmctZmlsZW5hbWVzCitDUFU6IFBJSUksIHNwZWVkIDg2My4xOTUgTUh6IChlc3RpbWF0ZWQpCitDb3VudGVkIENQVV9DTEtfVU5IQUxURUQgZXZlbnRzIChjbG9ja3MgcHJvY2Vzc29yIGlzIG5vdCBoYWx0ZWQpIHdpdGggYSB1bml0IG1hc2sgb2YgMHgwMCAoTm8gdW5pdCBtYXNrKSBjb3VudCAyMzE1MAorICAgOTA1ODk4IDU5Ljc0MTUgL3Vzci9saWIvZ2NjLWxpYi9pMzg2LXJlZGhhdC1saW51eC8zLjIvY2MxcGx1cworICAgMjE0MzIwIDE0LjEzMzggL2Jvb3QvMi42LjAvdm1saW51eAorICAgMTAzNDUwICA2LjgyMjIgL2xpYi9pNjg2L2xpYmMtMi4zLjIuc28KKyAgICA2MDE2MCAgMy45Njc0IC91c3IvbG9jYWwvYmluL21hZHBsYXkKKyAgICAzMTc2OSAgMi4wOTUxIC91c3IvbG9jYWwvb3Byb2ZpbGUtcHAvYmluL29wcm9maWxlZAorICAgIDI2NTUwICAxLjc1MDkgL3Vzci9saWIvbGliYXJ0c2Zsb3cuc28uMS4wLjAKKyAgICAyMzkwNiAgMS41NzY1IC91c3IvYmluL2FzCisgICAgMTg3NzAgIDEuMjM3OCAvb3Byb2ZpbGUKKyAgICAxNTUyOCAgMS4wMjQwIC91c3IvbGliL3F0LTMuMC41L2xpYi9saWJxdC1tdC5zby4zLjAuNQorICAgIDExOTc5ICAwLjc5MDAgL3Vzci9YMTFSNi9iaW4vWEZyZWU4NgorICAgIDExMzI4ICAwLjc0NzEgL2Jpbi9iYXNoCisgICAgLi4uCis8L3ByZT4KKyAgICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgIDwvdHI+CisgICAgICAgICAgPC90YWJsZT4KKyAgICAgICAgICA8cD4KK0lmIHdlIGhhZCBzcGVjaWZpZWQgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1zeW1ib2xzPC9jb2RlPiBpbiB0aGUgcHJldmlvdXMgY29tbWFuZCwgd2Ugd291bGQgaGF2ZQorZ290dGVuIGEgc3ltYm9sIHN1bW1hcnkgb2YgYWxsIHRoZSBpbWFnZXMgYWNyb3NzIHRoZSBlbnRpcmUgc3lzdGVtLiBXZSBjYW4gcmVzdHJpY3QgdGhpcyB0byBvbmx5CitwYXJ0IG9mIHRoZSBzeXN0ZW0gcHJvZmlsZTsgZm9yIGV4YW1wbGUsCitiZWxvdyBpcyBhIHN5bWJvbCBzdW1tYXJ5IG9mIHRoZSBPUHJvZmlsZSBkYWVtb24uIE5vdGUgdGhhdCBhcyB3ZSB1c2VkCis8c3BhbiBjbGFzcz0iY29tbWFuZCI+PHN0cm9uZz5vcGNvbnRyb2wgLS1zZXBhcmF0ZT1rZXJuZWw8L3N0cm9uZz48L3NwYW4+LCBzeW1ib2xzIGZyb20gaW1hZ2VzIHRoYXQgPHNwYW4gY2xhc3M9ImNvbW1hbmQiPjxzdHJvbmc+b3Byb2ZpbGVkPC9zdHJvbmc+PC9zcGFuPgoraGFzIHVzZWQgYXJlIGFsc28gc2hvd24uCis8L3A+CisgICAgICAgICAgPHRhYmxlIHhtbG5zPSIiIGJvcmRlcj0iMCIgc3R5bGU9ImJhY2tncm91bmQ6ICNFMEUwRTA7IiB3aWR0aD0iOTAlIj4KKyAgICAgICAgICAgIDx0cj4KKyAgICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICAgIDxwcmUgY2xhc3M9InNjcmVlbiI+CiskIG9wcmVwb3J0IC1sIGB3aGljaCBvcHJvZmlsZWRgIDImZ3Q7L2Rldi9udWxsIHwgbW9yZQorQ1BVOiBQSUlJLCBzcGVlZCA4NjMuMTk1IE1IeiAoZXN0aW1hdGVkKQorQ291bnRlZCBDUFVfQ0xLX1VOSEFMVEVEIGV2ZW50cyAoY2xvY2tzIHByb2Nlc3NvciBpcyBub3QgaGFsdGVkKSB3aXRoIGEgdW5pdCBtYXNrIG9mIDB4MDAgKE5vIHVuaXQgbWFzaykgY291bnQgMjMxNTAKK3ZtYSAgICAgIHNhbXBsZXMgICUgICAgICAgICAgIGltYWdlIG5hbWUgICAgICAgICAgICAgICBzeW1ib2wgbmFtZQorMDgwNGJlMTAgMTQ5NzEgICAgMjguMTk5MyAgICAgb3Byb2ZpbGVkICAgICAgICAgICAgICAgIG9kYl9pbnNlcnQKKzA4MDRhZmRjIDcxNDQgICAgIDEzLjQ1NjQgICAgIG9wcm9maWxlZCAgICAgICAgICAgICAgICBwb3BfYnVmZmVyX3ZhbHVlCitjMDFkYWVhMCA2MTEzICAgICAxMS41MTQ0ICAgICB2bWxpbnV4ICAgICAgICAgICAgICAgICAgX19jb3B5X3RvX3VzZXJfbGwKKzA4MDRiMDYwIDI4MTYgICAgICA1LjMwNDIgICAgIG9wcm9maWxlZCAgICAgICAgICAgICAgICBvcGRfcHV0X3NhbXBsZQorMDgwNGI0YTAgMjE0NyAgICAgIDQuMDQ0MSAgICAgb3Byb2ZpbGVkICAgICAgICAgICAgICAgIG9wZF9wcm9jZXNzX3NhbXBsZXMKKzA4MDRhY2Y0IDE4NTUgICAgICAzLjQ5NDEgICAgIG9wcm9maWxlZCAgICAgICAgICAgICAgICBvcGRfcHV0X2ltYWdlX3NhbXBsZQorMDgwNGFkODQgMTc2NiAgICAgIDMuMzI2NCAgICAgb3Byb2ZpbGVkICAgICAgICAgICAgICAgIG9wZF9maW5kX2ltYWdlCiswODA0YTVlYyAxMDg0ICAgICAgMi4wNDE4ICAgICBvcHJvZmlsZWQgICAgICAgICAgICAgICAgb3BkX2ZpbmRfbW9kdWxlCiswODA0YmE1YyA3NDEgICAgICAgMS4zOTU3ICAgICBvcHJvZmlsZWQgICAgICAgICAgICAgICAgb2RiX2hhc2hfYWRkX25vZGUKKy4uLgorPC9wcmU+CisgICAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICA8L3RyPgorICAgICAgICAgIDwvdGFibGU+CisgICAgICAgICAgPHA+CitUaGVzZSBhcmUgdGhlIHR3byBiYXNpYyB3YXlzIHlvdSBhcmUgbW9zdCBsaWtlbHkgdG8gdXNlIHJlZ3VsYXJseSwgYnV0IDxzcGFuIGNsYXNzPSJjb21tYW5kIj48c3Ryb25nPm9wcmVwb3J0PC9zdHJvbmc+PC9zcGFuPgorY2FuIGRvIGEgbG90IG1vcmUgdGhhbiB0aGF0LCBhcyBkZXNjcmliZWQgYmVsb3cuCis8L3A+CisgICAgICAgICAgPGRpdiBjbGFzcz0ic2VjdDIiIHRpdGxlPSIyLjEuoE1lcmdpbmcgc2VwYXJhdGUgcHJvZmlsZXMiPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMyBjbGFzcz0idGl0bGUiPjxhIGlkPSJvcHJlcG9ydC1tZXJnaW5nIj48L2E+Mi4xLqBNZXJnaW5nIHNlcGFyYXRlIHByb2ZpbGVzPC9oMz48L2Rpdj48L2Rpdj48L2Rpdj4KKworSWYgeW91IGhhdmUgdXNlZCBvbmUgb2YgdGhlIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tc2VwYXJhdGU9PC9jb2RlPiBvcHRpb25zCit3aGlsc3QgcHJvZmlsaW5nLCB0aGVyZSBjYW4gYmUgc2V2ZXJhbCBzZXBhcmF0ZSBwcm9maWxlcyBmb3IKK2Egc2luZ2xlIGJpbmFyeSBpbWFnZSB3aXRoaW4gYSBzZXNzaW9uLiBOb3JtYWxseSB0aGUgb3V0cHV0Cit3aWxsIGtlZXAgdGhlc2UgaW1hZ2VzIHNlcGFyYXRlZCAoc28sIGZvciBleGFtcGxlLCB0aGUgaW1hZ2Ugc3VtbWFyeQorb3V0cHV0IHNob3dzIGxpYnJhcnkgaW1hZ2Ugc3VtbWFyaWVzIG9uIGEgcGVyLWFwcGxpY2F0aW9uIGJhc2lzLAord2hlbiB1c2luZyA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLXNlcGFyYXRlPWxpYjwvY29kZT4pLgorU29tZXRpbWVzIGl0IGNhbiBiZSB1c2VmdWwgdG8gbWVyZ2UgdGhlc2UgcmVzdWx0cyBiYWNrIHRvZ2V0aGVyCitiZWZvcmUgZ2V0dGluZyByZXN1bHRzLiBUaGUgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1tZXJnZTwvY29kZT4gb3B0aW9uIGFsbG93cworeW91IHRvIGRvIHRoYXQuCis8L2Rpdj4KKyAgICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0MiIgdGl0bGU9IjIuMi6gU2lkZS1ieS1zaWRlIG11bHRpcGxlIHJlc3VsdHMiPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMyBjbGFzcz0idGl0bGUiPjxhIGlkPSJvcHJlcG9ydC1jb21wYXJpc29uIj48L2E+Mi4yLqBTaWRlLWJ5LXNpZGUgbXVsdGlwbGUgcmVzdWx0czwvaDM+PC9kaXY+PC9kaXY+PC9kaXY+CitJZiB5b3UgaGF2ZSB1c2VkIG11bHRpcGxlIGV2ZW50cyB3aGVuIHByb2ZpbGluZywgYnkgZGVmYXVsdCB5b3UgZ2V0CitzaWRlLWJ5LXNpZGUgcmVzdWx0cyBvZiBlYWNoIGV2ZW50J3Mgc2FtcGxlIHZhbHVlcyBmcm9tIDxzcGFuIGNsYXNzPSJjb21tYW5kIj48c3Ryb25nPm9wcmVwb3J0PC9zdHJvbmc+PC9zcGFuPi4KK1lvdSBjYW4gcmVzdHJpY3Qgd2hpY2ggZXZlbnRzIHRvIGxpc3QgYnkgYXBwcm9wcmlhdGUgdXNlIG9mIHRoZQorPGNvZGUgY2xhc3M9Im9wdGlvbiI+ZXZlbnQ6PC9jb2RlPiBwcm9maWxlIHNwZWNpZmljYXRpb25zLCBldGMuCis8L2Rpdj4KKyAgICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0MiIgdGl0bGU9IjIuMy6gQ2FsbGdyYXBoIG91dHB1dCI+CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgorICAgICAgICAgICAgICA8ZGl2PgorICAgICAgICAgICAgICAgIDxkaXY+CisgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9InRpdGxlIj48YSBpZD0ib3ByZXBvcnQtY2FsbGdyYXBoIj48L2E+Mi4zLqBDYWxsZ3JhcGggb3V0cHV0PC9oMz4KKyAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIDxwPgorVGhpcyBzZWN0aW9uIHByb3ZpZGVzIGRldGFpbHMgb24gaG93IHRvIHVzZSB0aGUgT1Byb2ZpbGUgY2FsbGdyYXBoIGZlYXR1cmUuCis8L3A+CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0MyIgdGl0bGU9IjIuMy4xLqBDYWxsZ3JhcGggZGV0YWlscyI+CisgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlcGFnZSI+CisgICAgICAgICAgICAgICAgPGRpdj4KKyAgICAgICAgICAgICAgICAgIDxkaXY+CisgICAgICAgICAgICAgICAgICAgIDxoNCBjbGFzcz0idGl0bGUiPjxhIGlkPSJvcC1jZzEiPjwvYT4yLjMuMS6gQ2FsbGdyYXBoIGRldGFpbHM8L2g0PgorICAgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICA8cD4KK1doZW4gdXNpbmcgdGhlIDxjb2RlIGNsYXNzPSJvcHRpb24iPm9wY29udHJvbCAtLWNhbGxncmFwaDwvY29kZT4gb3B0aW9uLCB5b3UgY2FuIHNlZSB3aGF0CitmdW5jdGlvbnMgYXJlIGNhbGxpbmcgb3RoZXIgZnVuY3Rpb25zIGluIHRoZSBvdXRwdXQuIENvbnNpZGVyIHRoZQorZm9sbG93aW5nIHByb2dyYW06Cis8L3A+CisgICAgICAgICAgICAgIDx0YWJsZSB4bWxucz0iIiBib3JkZXI9IjAiIHN0eWxlPSJiYWNrZ3JvdW5kOiAjRTBFMEUwOyIgd2lkdGg9IjkwJSI+CisgICAgICAgICAgICAgICAgPHRyPgorICAgICAgICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICAgICAgICA8cHJlIGNsYXNzPSJzY3JlZW4iPgorI2luY2x1ZGUgJmx0O3N0cmluZy5oJmd0OworI2luY2x1ZGUgJmx0O3N0ZGxpYi5oJmd0OworI2luY2x1ZGUgJmx0O3N0ZGlvLmgmZ3Q7CisKKyNkZWZpbmUgU0laRSA1MDAwMDAKKworc3RhdGljIGludCBjb21wYXJlKGNvbnN0IHZvaWQgKnMxLCBjb25zdCB2b2lkICpzMikKK3sKKyAgICAgICAgcmV0dXJuIHN0cmNtcChzMSwgczIpOworfQorCitzdGF0aWMgdm9pZCByZXBlYXQodm9pZCkKK3sKKyAgICAgICAgaW50IGk7CisgICAgICAgIGNoYXIgKnN0cmluZ3NbU0laRV07CisgICAgICAgIGNoYXIgc3RyW10gPSAiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiOworCisgICAgICAgIGZvciAoaSA9IDA7IGkgJmx0OyBTSVpFOyArK2kpIHsKKyAgICAgICAgICAgICAgICBzdHJpbmdzW2ldID0gc3RyZHVwKHN0cik7CisgICAgICAgICAgICAgICAgc3RyZnJ5KHN0cmluZ3NbaV0pOworICAgICAgICB9CisKKyAgICAgICAgcXNvcnQoc3RyaW5ncywgU0laRSwgc2l6ZW9mKGNoYXIgKiksIGNvbXBhcmUpOworfQorCitpbnQgbWFpbigpCit7CisgICAgICAgIHdoaWxlICgxKQorICAgICAgICAgICAgICAgIHJlcGVhdCgpOworfQorPC9wcmU+CisgICAgICAgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgICAgIDwvdHI+CisgICAgICAgICAgICAgIDwvdGFibGU+CisgICAgICAgICAgICAgIDxwPgorV2hlbiBydW5uaW5nIHdpdGggdGhlIGNhbGwtZ3JhcGggb3B0aW9uLCBPUHJvZmlsZSB3aWxsCityZWNvcmQgdGhlIGZ1bmN0aW9uIHN0YWNrIGV2ZXJ5IHRpbWUgaXQgdGFrZXMgYSBzYW1wbGUuCis8c3BhbiBjbGFzcz0iY29tbWFuZCI+PHN0cm9uZz5vcHJlcG9ydCAtLWNhbGxncmFwaDwvc3Ryb25nPjwvc3Bhbj4gb3V0cHV0cyBhbiBlbnRyeSBmb3IgZWFjaAorZnVuY3Rpb24sIHdoZXJlIGVhY2ggZW50cnkgbG9va3Mgc2ltaWxhciB0bzoKKzwvcD4KKyAgICAgICAgICAgICAgPHRhYmxlIHhtbG5zPSIiIGJvcmRlcj0iMCIgc3R5bGU9ImJhY2tncm91bmQ6ICNFMEUwRTA7IiB3aWR0aD0iOTAlIj4KKyAgICAgICAgICAgICAgICA8dHI+CisgICAgICAgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgICAgICAgIDxwcmUgY2xhc3M9InNjcmVlbiI+CitzYW1wbGVzICAlICAgICAgICBpbWFnZSBuYW1lICAgICAgICAgICAgICAgc3ltYm9sIG5hbWUKKyAgMTk3ICAgICAgIDAuMTU0OCAgY2cgICAgICAgICAgICAgICAgICAgICAgIG1haW4KKyAgMTI3MDM2ICAgOTkuODQ1MiAgY2cgICAgICAgICAgICAgICAgICAgICAgIHJlcGVhdAorODQ1OTAgICAgNDIuNTA4NCAgbGliYy0yLjMuMi5zbyAgICAgICAgICAgIHN0cmZyeQorICA4NDU5MCAgICA2Ni40ODM4ICBsaWJjLTIuMy4yLnNvICAgICAgICAgICAgc3RyZnJ5IFtzZWxmXQorICAzOTE2OSAgICAzMC43ODUwICBsaWJjLTIuMy4yLnNvICAgICAgICAgICAgcmFuZG9tX3IKKyAgMzQ3NSAgICAgIDIuNzMxMiAgbGliYy0yLjMuMi5zbyAgICAgICAgICAgIF9faTY4Ni5nZXRfcGNfdGh1bmsuYngKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzwvcHJlPgorICAgICAgICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgICAgICA8L3RyPgorICAgICAgICAgICAgICA8L3RhYmxlPgorICAgICAgICAgICAgICA8cD4KK0hlcmUgdGhlIG5vbi1pbmRlbnRlZCBsaW5lIGlzIHRoZSBmdW5jdGlvbiB3ZSdyZSBmb2N1c3NpbmcgdXBvbgorKDxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+c3RyZnJ5KCk8L2NvZGU+KS4gVGhpcworbGluZSBpcyB0aGUgc2FtZSBhcyB5b3UnZCBnZXQgZnJvbSBhIG5vcm1hbCA8c3BhbiBjbGFzcz0iY29tbWFuZCI+PHN0cm9uZz5vcHJlcG9ydDwvc3Ryb25nPjwvc3Bhbj4KK291dHB1dC4KKzwvcD4KKyAgICAgICAgICAgICAgPHA+CitBYm92ZSB0aGUgbm9uLWluZGVudGVkIGxpbmUgd2UgZmluZCB0aGUgZnVuY3Rpb25zIHRoYXQgY2FsbGVkIHRoaXMKK2Z1bmN0aW9uIChmb3IgZXhhbXBsZSwgPGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5yZXBlYXQoKTwvY29kZT4gY2FsbHMKKzxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+c3RyZnJ5KCk8L2NvZGU+KS4gVGhlIHNhbXBsZXMgYW5kIHBlcmNlbnRhZ2UgdmFsdWVzIGhlcmUKK3JlZmVyIHRvIHRoZSBudW1iZXIgb2YgdGltZXMgd2UgdG9vayBhIHNhbXBsZSB3aGVyZSB0aGlzIGNhbGwgd2FzIGZvdW5kCitpbiB0aGUgc3RhY2s7IHRoZSBwZXJjZW50YWdlIGlzIHJlbGF0aXZlIHRvIGFsbCBvdGhlciBjYWxsZXJzIG9mIHRoZQorZnVuY3Rpb24gd2UncmUgZm9jdXNzaW5nIG9uLiBOb3RlIHRoYXQgdGhlc2UgdmFsdWVzIGFyZQorPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+bm90PC9lbT48L3NwYW4+IGNhbGwgY291bnRzOyB0aGV5IG9ubHkgcmVmbGVjdCB0aGUgY2FsbCBzdGFjaworZXZlcnkgdGltZSBhIHNhbXBsZSBpcyB0YWtlbjsgdGhhdCBpcywgaWYgYSBjYWxsIGlzIGZvdW5kIGluIHRoZSBzdGFjaworYXQgdGhlIHRpbWUgb2YgYSBzYW1wbGUsIGl0IGlzIHJlY29yZGVkIGluIHRoaXMgY291bnQuCis8L3A+CisgICAgICAgICAgICAgIDxwPgorQmVsb3cgdGhlIGxpbmUgYXJlIGZ1bmN0aW9ucyB0aGF0IGFyZSBjYWxsZWQgYnkKKzxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+c3RyZnJ5KCk8L2NvZGU+IChjYWxsZWQgPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+Y2FsbGVlczwvZW0+PC9zcGFuPikuCitJdCdzIGNsZWFyIGhlcmUgdGhhdCA8Y29kZSBjbGFzcz0iZnVuY3Rpb24iPnN0cmZyeSgpPC9jb2RlPiBjYWxscworPGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5yYW5kb21fcigpPC9jb2RlPi4gV2UgYWxzbyBzZWUgYSBzcGVjaWFsIGVudHJ5IHdpdGggYQorIltzZWxmXSIgbWFya2VyLiBUaGlzIHJlY29yZHMgdGhlIG5vcm1hbCBzYW1wbGVzIGZvciB0aGUgZnVuY3Rpb24sIGJ1dAordGhlIHBlcmNlbnRhZ2UgYmVjb21lcyByZWxhdGl2ZSB0byBhbGwgY2FsbGVlcy4gVGhpcyBhbGxvd3MgeW91IHRvCitjb21wYXJlIHRpbWUgc3BlbnQgaW4gdGhlIGZ1bmN0aW9uIGl0c2VsZiBjb21wYXJlZCB0byBmdW5jdGlvbnMgaXQKK2NhbGxzLiBOb3RlIHRoYXQgaWYgYSBmdW5jdGlvbiBjYWxscyBpdHNlbGYsIHRoZW4gaXQgd2lsbCBhcHBlYXIgaW4gdGhlCitsaXN0IG9mIGNhbGxlZXMgb2YgaXRzZWxmLCBidXQgd2l0aG91dCB0aGUgIltzZWxmXSIgbWFya2VyOyBzbyByZWN1cnNpdmUKK2NhbGxzIGFyZSBzdGlsbCBjbGVhcmx5IHNlcGFyYWJsZS4KKzwvcD4KKyAgICAgICAgICAgICAgPHA+CitZb3UgbWF5IGhhdmUgbm90aWNlZCB0aGF0IHRoZSBvdXRwdXQgbGlzdHMgPGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5tYWluKCk8L2NvZGU+CithcyBjYWxsaW5nIDxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+c3RyZnJ5KCk8L2NvZGU+LCBidXQgaXQncyBjbGVhciBmcm9tIHRoZSBzb3VyY2UKK3RoYXQgdGhpcyBkb2Vzbid0IGFjdHVhbGx5IGhhcHBlbi4gU2VlIDxhIGNsYXNzPSJ4cmVmIiBocmVmPSIjaW50ZXJwcmV0aW5nLWNhbGxncmFwaCIgdGl0bGU9IjMuoEludGVycHJldGluZyBjYWxsLWdyYXBoIHByb2ZpbGVzIj5TZWN0aW9uoDMsICYjODIyMDtJbnRlcnByZXRpbmcgY2FsbC1ncmFwaCBwcm9maWxlcyYjODIyMTs8L2E+IGZvciBhbiBleHBsYW5hdGlvbi4KKzwvcD4KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2VjdDMiIHRpdGxlPSIyLjMuMi6gQ2FsbGdyYXBoIGFuZCBKSVQgc3VwcG9ydCI+CisgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlcGFnZSI+CisgICAgICAgICAgICAgICAgPGRpdj4KKyAgICAgICAgICAgICAgICAgIDxkaXY+CisgICAgICAgICAgICAgICAgICAgIDxoNCBjbGFzcz0idGl0bGUiPjxhIGlkPSJjZy13aXRoLWppdHN1cHBvcnQiPjwvYT4yLjMuMi6gQ2FsbGdyYXBoIGFuZCBKSVQgc3VwcG9ydDwvaDQ+CisgICAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgIDxwPgorQ2FsbGdyYXBoIG91dHB1dCB3aGVyZSBhbm9ueW1vdXNseSBtYXBwZWQgY29kZSBpcyBpbiB0aGUgY2FsbHN0YWNrIGNhbiBzb21ldGltZXMgYmUgbWlzbGVhZGluZy4KK0ZvciBhbGwgc3VjaCBjb2RlLCB0aGUgc2FtcGxlcyBmb3IgdGhlIGFub255bW91c2x5IG1hcHBlZCBjb2RlIGFyZSBzdG9yZWQgaW4gYSBzYW1wbGVzIHN1YmRpcmVjdG9yeQorbmFtZWQgPGNvZGUgY2xhc3M9ImZpbGVuYW1lIj57YW5vbjphbm9ufS8mbHQ7dGdpZCZndDsuJmx0O2JlZ2luX2FkZHImZ3Q7LiZsdDtlbmRfYWRkciZndDs8L2NvZGU+LgorQXMgc3RhdGVkIGVhcmxpZXIsIGlmIHRoaXMgYW5vbnltb3VzbHkgbWFwcGVkIGNvZGUgaXMgSklUZWQgY29kZSBmcm9tIGEgc3VwcG9ydGVkIFZNIGxpa2UgSmF2YSwKK09Qcm9maWxlIGNyZWF0ZXMgYW4gRUxGIGZpbGUgdG8gcHJvdmlkZSBhIChzb21ld2hhdCkgcGVybWFuZW50IGJhY2tpbmcgZmlsZSBmb3IgdGhlIGNvZGUuCitIb3dldmVyLCB3aGVuIHZpZXdpbmcgY2FsbGdyYXBoIG91dHB1dCwgYW55IGFub255bW91c2x5IG1hcHBlZCBjb2RlIGluIHRoZSBjYWxsc3RhY2sKK3dpbGwgYmUgYXR0cmlidXRlZCB0byA8Y29kZSBjbGFzcz0iZmlsZW5hbWUiPmFub24gKCZsdDt0Z2lkJmd0OzogcmFuZ2U6Jmx0O2JlZ2luX2FkZHImZ3Q7LSZsdDtlbmRfYWRkciZndDs8L2NvZGU+LAorZXZlbiBpZiBhIDxjb2RlIGNsYXNzPSJmaWxlbmFtZSI+LmpvPC9jb2RlPiBFTEYgZmlsZSBoYWQgYmVlbiBjcmVhdGVkIGZvciBpdC4gIFNlZSB0aGUgZXhhbXBsZSBiZWxvdy4KKzwvcD4KKyAgICAgICAgICAgICAgPHRhYmxlIHhtbG5zPSIiIGJvcmRlcj0iMCIgc3R5bGU9ImJhY2tncm91bmQ6ICNFMEUwRTA7IiB3aWR0aD0iOTAlIj4KKyAgICAgICAgICAgICAgICA8dHI+CisgICAgICAgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgICAgICAgIDxwcmUgY2xhc3M9InNjcmVlbiI+CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDEgICAgICAgICAyLjI3MjcgIGxpYmo5dXRlMjMuc28gICAgICAgICAgICBqYXZhLmJpbiAgICAgICAgICAgICAgICAgdHJhY2VWCisgIDIgICAgICAgICA0LjU0NTUgIGxpYmo5dXRlMjMuc28gICAgICAgICAgICBqYXZhLmJpbiAgICAgICAgICAgICAgICAgdXRzVHJhY2VWCisgIDQgICAgICAgICA5LjA5MDkgIGxpYmo5dHJjMjMuc28gICAgICAgICAgICBqYXZhLmJpbiAgICAgICAgICAgICAgICAgZmlsbEluVVRJbnRlcmZhY2VzCisgIDM3ICAgICAgIDg0LjA5MDkgIGxpYmo5dHJjMjMuc28gICAgICAgICAgICBqYXZhLmJpbiAgICAgICAgICAgICAgICAgdHdHZXRTZXF1ZW5jZUNvdW50ZXIKKzggICAgICAgICAwLjAxNTQgIGxpYmo5cHJ0MjMuc28gICAgICAgICAgICBqYXZhLmJpbiAgICAgICAgICAgICAgICAgajl0aW1lX2hpcmVzX2Nsb2NrCisgIDI3ICAgICAgIDYxLjM2MzYgIGFub24gKHRnaWQ6MTAwMTQgcmFuZ2U6MHgxMDAwMDAtMHgxMDMwMDApIGphdmEuYmluICAgICAgICAgICAgICAgICAobm8gc3ltYm9scykKKyAgOSAgICAgICAgMjAuNDU0NSAgbGliYy0yLjQuc28gICAgICAgICAgICAgIGphdmEuYmluICAgICAgICAgICAgICAgICBnZXR0aW1lb2ZkYXkKKyAgOCAgICAgICAgMTguMTgxOCAgbGliajlwcnQyMy5zbyAgICAgICAgICAgIGphdmEuYmluICAgICAgICAgICAgICAgICBqOXRpbWVfaGlyZXNfY2xvY2sgW3NlbGZdCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis8L3ByZT4KKyAgICAgICAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICAgICAgPC90cj4KKyAgICAgICAgICAgICAgPC90YWJsZT4KKyAgICAgICAgICAgICAgPHA+CitUaGUgb3V0cHV0IHNob3dzIHRoYXQgImFub24gKHRnaWQ6MTAwMTQgcmFuZ2U6MHgxMDAwMDAtMHgxMDMwMDApIiB3YXMgYSBjYWxsZWUgb2YKKzxjb2RlIGNsYXNzPSJjb2RlIj5qOXRpbWVfaGlyZXNfY2xvY2s8L2NvZGU+LCBldmVuIHRob3VnaCB0aGUgRUxGIGZpbGUgPGNvZGUgY2xhc3M9ImZpbGVuYW1lIj4xMDAxNC5qbzwvY29kZT4gd2FzCitjcmVhdGVkIGZvciB0aGlzIHByb2ZpbGUgcnVuLiAgVW5mb3J0dW5hdGVseSwgdGhlcmUgaXMgY3VycmVudGx5IG5vIHdheSB0byBjb3JyZWxhdGUKK3RoYXQgYW5vbnltb3VzIGNhbGxncmFwaCBlbnRyeSB3aXRoIGl0cyBjb3JyZXNwb25kaW5nIDxjb2RlIGNsYXNzPSJmaWxlbmFtZSI+LmpvPC9jb2RlPiBmaWxlLgorPC9wPgorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgPGRpdiBjbGFzcz0ic2VjdDIiIHRpdGxlPSIyLjQuoERpZmZlcmVudGlhbCBwcm9maWxlcyB3aXRoIG9wcmVwb3J0Ij4KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlcGFnZSI+CisgICAgICAgICAgICAgIDxkaXY+CisgICAgICAgICAgICAgICAgPGRpdj4KKyAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz0idGl0bGUiPjxhIGlkPSJvcHJlcG9ydC1kaWZmIj48L2E+Mi40LqBEaWZmZXJlbnRpYWwgcHJvZmlsZXMgd2l0aCA8c3BhbiBjbGFzcz0iY29tbWFuZCI+PHN0cm9uZz5vcHJlcG9ydDwvc3Ryb25nPjwvc3Bhbj48L2gzPgorICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgPHA+CitPZnRlbiwgd2UnZCBsaWtlIHRvIGJlIGFibGUgdG8gY29tcGFyZSB0d28gcHJvZmlsZXMuIEZvciBleGFtcGxlLCB3aGVuCithbmFseXNpbmcgdGhlIHBlcmZvcm1hbmNlIG9mIGFuIGFwcGxpY2F0aW9uLCB3ZSdkIGxpa2UgdG8gbWFrZSBjb2RlCitjaGFuZ2VzIGFuZCBleGFtaW5lIHRoZSBlZmZlY3Qgb2YgdGhlIGNoYW5nZS4gVGhpcyBpcyBzdXBwb3J0ZWQgaW4KKzxzcGFuIGNsYXNzPSJjb21tYW5kIj48c3Ryb25nPm9wcmVwb3J0PC9zdHJvbmc+PC9zcGFuPiBieSBnaXZpbmcgYSBwcm9maWxlIHNwZWNpZmljYXRpb24gdGhhdAoraWRlbnRpZmllcyB0d28gZGlmZmVyZW50IHByb2ZpbGVzLiBUaGUgZ2VuZXJhbCBmb3JtIGlzIG9mOgorPC9wPgorICAgICAgICAgICAgPHRhYmxlIHhtbG5zPSIiIGJvcmRlcj0iMCIgc3R5bGU9ImJhY2tncm91bmQ6ICNFMEUwRTA7IiB3aWR0aD0iOTAlIj4KKyAgICAgICAgICAgICAgPHRyPgorICAgICAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgICAgIDxwcmUgY2xhc3M9InNjcmVlbiI+CiskIG9wcmVwb3J0ICZsdDtzaGFyZWQtc3BlYyZndDsgeyAmbHQ7Zmlyc3QtcHJvZmlsZSZndDsgfSB7ICZsdDtzZWNvbmQtcHJvZmlsZSZndDsgfQorPC9wcmU+CisgICAgICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgICAgPC90cj4KKyAgICAgICAgICAgIDwvdGFibGU+CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJub3RlIiB0aXRsZT0iTm90ZSIgc3R5bGU9Im1hcmdpbi1sZWZ0OiAwLjVpbjsgbWFyZ2luLXJpZ2h0OiAwLjVpbjsiPgorICAgICAgICAgICAgICA8aDMgY2xhc3M9InRpdGxlIj5Ob3RlPC9oMz4KKyAgICAgICAgICAgICAgPHA+CitXZSBsb3N0IG91ciBEcmFnb24gYm9vayBkb3duIHRoZSBiYWNrIG9mIHRoZSBzb2ZhLCBzbyB5b3UgaGF2ZSB0byBiZQorY2FyZWZ1bCB0byBoYXZlIHNwYWNlcyBhcm91bmQgdGhvc2UgYnJhY2VzLCBvciB0aGluZ3Mgd2lsbCBnZXQKK2hvcGVsZXNzbHkgY29uZnVzZWQuIFdlIGNhbiBvbmx5IGFwb2xvZ2lzZS4KKzwvcD4KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgPHA+CitGb3IgZWFjaCBvZiB0aGUgcHJvZmlsZXMsIHRoZSBzaGFyZWQgc2VjdGlvbiBpcyBwcmVmaXhlZCwgYW5kIHRoZW4gdGhlCitzcGVjaWZpY2F0aW9uIGlzIGFuYWx5c2VkLiBUaGUgdXN1YWwgcGFyYW1ldGVycyB3b3JrIGJvdGggd2l0aGluIHRoZQorc2hhcmVkIHNlY3Rpb24sIGFuZCBpbiB0aGUgc3ViLXNwZWNpZmljYXRpb24gd2l0aGluIHRoZSBjdXJseSBicmFjZXMuCis8L3A+CisgICAgICAgICAgICA8cD4KK0EgdHlwaWNhbCB3YXkgdG8gdXNlIHRoaXMgZmVhdHVyZSBpcyB3aXRoIGFyY2hpdmVzIGNyZWF0ZWQgd2l0aAorPHNwYW4gY2xhc3M9ImNvbW1hbmQiPjxzdHJvbmc+b3BhcmNoaXZlPC9zdHJvbmc+PC9zcGFuPi4gTGV0J3MgbG9vayBhdCBhbiBleGFtcGxlOgorPC9wPgorICAgICAgICAgICAgPHRhYmxlIHhtbG5zPSIiIGJvcmRlcj0iMCIgc3R5bGU9ImJhY2tncm91bmQ6ICNFMEUwRTA7IiB3aWR0aD0iOTAlIj4KKyAgICAgICAgICAgICAgPHRyPgorICAgICAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgICAgIDxwcmUgY2xhc3M9InNjcmVlbiI+CiskIC4vYQorJCBvcGFyY2hpdmUgLW8gb3JpZyAuL2EKKyQgb3Bjb250cm9sIC0tcmVzZXQKKyAgIyBlZGl0IGFuZCByZWNvbXBpbGUgYQorJCAuL2EKKyAgIyBub3cgY29tcGFyZSB0aGUgY3VycmVudCBwcm9maWxlIG9mIGEgd2l0aCB0aGUgYXJjaGl2ZWQgcHJvZmlsZQorJCBvcHJlcG9ydCAteGwgLi9hIHsgYXJjaGl2ZTouL29yaWcgfSB7IH0KK0NQVTogUElJSSwgc3BlZWQgODYzLjIzMyBNSHogKGVzdGltYXRlZCkKK0NvdW50ZWQgQ1BVX0NMS19VTkhBTFRFRCBldmVudHMgKGNsb2NrcyBwcm9jZXNzb3IgaXMgbm90IGhhbHRlZCkgd2l0aCBhCit1bml0IG1hc2sgb2YgMHgwMCAoTm8gdW5pdCBtYXNrKSBjb3VudCAxMDAwMDAKK3NhbXBsZXMgICUgICAgICAgIGRpZmYgJSAgICBzeW1ib2wgbmFtZQorOTI0MzUgICAgNDguNTM2NiAgKzAuNDk5OSAgIGEKKzU0MjI2ICAgIC0tLSAgICAgIC0tLSAgICAgICBjCis0OTIyMiAgICAyNS44NDU5ICArKysgICAgICAgZAorNDg3ODcgICAgMjUuNjE3NSAgLTIuMmUtMDEgIGIKKzwvcHJlPgorICAgICAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICAgIDwvdHI+CisgICAgICAgICAgICA8L3RhYmxlPgorICAgICAgICAgICAgPHA+CitOb3RlIHRoYXQgd2Ugc3BlY2lmaWVkIGFuIGVtcHR5IHNlY29uZCBwcm9maWxlIGluIHRoZSBjdXJseSBicmFjZXMsIGFzCit3ZSB3YW50ZWQgdG8gdXNlIHRoZSBjdXJyZW50IHNlc3Npb247IGFsdGVybmF0aXZlbHksIHdlIGNvdWxkCitoYXZlIHNwZWNpZmllZCBhbm90aGVyIGFyY2hpdmUsIG9yIGEgdGdpZCBldGMuIFdlIHNwZWNpZmllZCB0aGUgYmluYXJ5Cis8c3BhbiBjbGFzcz0iY29tbWFuZCI+PHN0cm9uZz5hPC9zdHJvbmc+PC9zcGFuPiBpbiB0aGUgc2hhcmVkIHNlY3Rpb24sIHNvIHdlIG1hdGNoZWQgdGhhdCBpbiBib3RoCit0aGUgcHJvZmlsZXMgd2UncmUgZGlmZmluZy4KKzwvcD4KKyAgICAgICAgICAgIDxwPgorQXMgaW4gdGhlIG5vcm1hbCBvdXRwdXQsIHRoZSByZXN1bHRzIGFyZSBzb3J0ZWQgYnkgdGhlIG51bWJlciBvZgorc2FtcGxlcywgYW5kIHRoZSBwZXJjZW50YWdlIGZpZWxkIHJlcHJlc2VudHMgdGhlIHJlbGF0aXZlIHBlcmNlbnRhZ2Ugb2YKK3RoZSBzeW1ib2wncyBzYW1wbGVzIGluIHRoZSBzZWNvbmQgcHJvZmlsZS4KKzwvcD4KKyAgICAgICAgICAgIDxwPgorTm90aWNlIHRoZSBuZXcgY29sdW1uIGluIHRoZSBvdXRwdXQuIFRoaXMgdmFsdWUgcmVwcmVzZW50cyB0aGUKK3BlcmNlbnRhZ2UgY2hhbmdlIG9mIHRoZSByZWxhdGl2ZSBwZXJjZW50IGJldHdlZW4gdGhlIGZpcnN0IGFuZCB0aGUKK3NlY29uZCBwcm9maWxlOiByb3VnaGx5LCAiaG93IG11Y2ggbW9yZSBpbXBvcnRhbnQgdGhpcyBzeW1ib2wgaXMiLgorTG9va2luZyBhdCB0aGUgc3ltYm9sIDxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+YSgpPC9jb2RlPiwgd2UgY2FuIHNlZSB0aGF0IGl0IHRvb2sKK3JvdWdobHkgdGhlIHNhbWUgYW1vdW50IG9mIHRoZSB0b3RhbCBwcm9maWxlIGluIGJvdGggdGhlIGZpcnN0IGFuZCB0aGUKK3NlY29uZCBwcm9maWxlLiBUaGUgZnVuY3Rpb24gPGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5jKCk8L2NvZGU+IHdhcyBub3QgaW4gdGhlIG5ldworcHJvZmlsZSwgc28gaGFzIGJlZW4gbWFya2VkIHdpdGggPGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj4tLS08L2NvZGU+LiBOb3RlIHRoYXQgdGhlCitzYW1wbGUgdmFsdWUgaXMgdGhlIG51bWJlciBvZiBzYW1wbGVzIGluIHRoZSBmaXJzdCBwcm9maWxlOyBzaW5jZSB3ZSdyZQorZGlzcGxheWluZyByZXN1bHRzIGZvciB0aGUgc2Vjb25kIHByb2ZpbGUsIHdlIGRvbid0IGxpc3QgYSBwZXJjZW50YWdlCit2YWx1ZSBmb3IgaXQsIGFzIGl0IHdvdWxkIGJlIG1lYW5pbmdsZXNzLiA8Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmQoKTwvY29kZT4gaXMKK25ldyBpbiB0aGUgc2Vjb25kIHByb2ZpbGUsIGFuZCBjb25zZXF1ZW50bHkgbWFya2VkIHdpdGgKKzxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+KysrPC9jb2RlPi4KKzwvcD4KKyAgICAgICAgICAgIDxwPgorV2hlbiBjb21wYXJpbmcgcHJvZmlsZXMgYmV0d2VlbiBkaWZmZXJlbnQgYmluYXJpZXMsIGl0IHNob3VsZCBiZSBjbGVhcgordGhhdCBmdW5jdGlvbnMgY2FuIGNoYW5nZSBpbiB0ZXJtcyBvZiBWTUEgYW5kIHNpemUuIFRvIGF2b2lkIHRoaXMKK3Byb2JsZW0sIDxzcGFuIGNsYXNzPSJjb21tYW5kIj48c3Ryb25nPm9wcmVwb3J0PC9zdHJvbmc+PC9zcGFuPiBjb25zaWRlcnMgYSBzeW1ib2wgdG8gYmUgdGhlIHNhbWUKK2lmIHRoZSBzeW1ib2wgbmFtZSwgaW1hZ2UgbmFtZSwgYW5kIG93bmluZyBhcHBsaWNhdGlvbiBuYW1lIGFsbCBtYXRjaDsKK2FueSBvdGhlciBmYWN0b3JzIGFyZSBpZ25vcmVkLiBOb3RlIHRoYXQgdGhlIGNoZWNrIGZvciBhcHBsaWNhdGlvbiBuYW1lCittZWFucyB0aGF0IHRyeWluZyB0byBjb21wYXJlIGxpYnJhcnkgcHJvZmlsZXMgYmV0d2VlbiB0d28gZGlmZmVyZW50CithcHBsaWNhdGlvbnMgd2lsbCBub3Qgd29yayBhcyB5b3UgbWlnaHQgZXhwZWN0OiBlYWNoIHN5bWJvbCB3aWxsIGJlCitjb25zaWRlcmVkIGRpZmZlcmVudC4KKzwvcD4KKyAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0MiIgdGl0bGU9IjIuNS6gQW5vbnltb3VzIGV4ZWN1dGFibGUgbWFwcGluZ3MiPgorICAgICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KKyAgICAgICAgICAgICAgPGRpdj4KKyAgICAgICAgICAgICAgICA8ZGl2PgorICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPSJ0aXRsZSI+PGEgaWQ9Im9wcmVwb3J0LWFub24iPjwvYT4yLjUuoEFub255bW91cyBleGVjdXRhYmxlIG1hcHBpbmdzPC9oMz4KKyAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIDxwPgorTWFueSBhcHBsaWNhdGlvbnMsIHR5cGljYWxseSBvbmVzIGludm9sdmluZyBkeW5hbWljIGNvbXBpbGF0aW9uIGludG8KK21hY2hpbmUgY29kZSAoanVzdC1pbi10aW1lLCBvciAiSklUIiwgY29tcGlsYXRpb24pLCBoYXZlIGV4ZWN1dGFibGUgbWFwcGluZ3MgdGhhdAorYXJlIG5vdCBiYWNrZWQgYnkgYW4gRUxGIGZpbGUuIDxzcGFuIGNsYXNzPSJjb21tYW5kIj48c3Ryb25nPm9wcmVwb3J0PC9zdHJvbmc+PC9zcGFuPiBoYXMgYmFzaWMgc3VwcG9ydCBmb3Igc2hvd2luZyB0aGUKK3NhbXBsZXMgdGFrZW4gaW4gdGhlc2UgcmVnaW9uczsgZm9yIGV4YW1wbGU6Cis8L3A+CisgICAgICAgICAgICA8dGFibGUgeG1sbnM9IiIgYm9yZGVyPSIwIiBzdHlsZT0iYmFja2dyb3VuZDogI0UwRTBFMDsiIHdpZHRoPSI5MCUiPgorICAgICAgICAgICAgICA8dHI+CisgICAgICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICAgICAgPHByZSBjbGFzcz0ic2NyZWVuIj4KKyQgb3ByZXBvcnQgL3Vzci9iaW4vbW9ubyAtbAorQ1BVOiBwcGM2NCBQT1dFUjUsIHNwZWVkIDE2NTQuMzQgTUh6IChlc3RpbWF0ZWQpCitDb3VudGVkIENZQ0xFUyBldmVudHMgKFByb2Nlc3NvciBDeWNsZXMgdXNpbmcgY29udGludW91cyBzYW1wbGluZykgd2l0aCBhIHVuaXQgbWFzayBvZiAweDAwIChObyB1bml0IG1hc2spIGNvdW50IDEwMDAwMAorc2FtcGxlcyAgJSAgICAgICAgaW1hZ2UgbmFtZSAgICAJCSAgICAgICAgICAgICAgICBzeW1ib2wgbmFtZQorNDcgICAgICAgNTguNzUwMCAgbW9ubyAgICAgICAgICAgICAgICAgICAgIAkJCShubyBzeW1ib2xzKQorMTQgICAgICAgMTcuNTAwMCAgYW5vbiAodGdpZDozMTg5IHJhbmdlOjB4ZjcyYWEwMDAtMHhmNzJmYTAwMCkgIChubyBzeW1ib2xzKQorOSAgICAgICAgMTEuMjUwMCAgYW5vbiAodGdpZDozMTg5IHJhbmdlOjB4ZjZjY2EwMDAtMHhmNmRkOTAwMCkgIChubyBzeW1ib2xzKQorLgkgLgkgIC4JCQkJCQkuCis8L3ByZT4KKyAgICAgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgICA8L3RyPgorICAgICAgICAgICAgPC90YWJsZT4KKyAgICAgICAgICAgIDxwPgorPC9wPgorICAgICAgICAgICAgPHA+CitOb3RlIHRoYXQsIHNpbmNlIHN1Y2ggbWFwcGluZ3MgYXJlIGRlcGVuZGVudCB1cG9uIGluZGl2aWR1YWwgaW52b2NhdGlvbnMgb2YKK2EgYmluYXJ5LCB0aGVzZSBtYXBwaW5ncyBhcmUgYWx3YXlzIGxpc3RlZCBhcyBhIGRlcGVuZGVudCBpbWFnZSwKK2V2ZW4gd2hlbiB1c2luZyA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLXNlcGFyYXRlPW5vbmU8L2NvZGU+LgorRXF1YWxseSwgdGhlIHJlc3VsdHMgYXJlIG5vdCBhZmZlY3RlZCBieSB0aGUgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1tZXJnZTwvY29kZT4KK29wdGlvbi4KKzwvcD4KKyAgICAgICAgICAgIDxwPgorQXMgc2hvd24gaW4gdGhlIG9wcmVwb3J0IG91dHB1dCBhYm92ZSwgT1Byb2ZpbGUgaXMgdW5hYmxlIHRvIGF0dHJpYnV0ZSB0aGUgc2FtcGxlcyB0byBhbnkKK3N5bWJvbChzKSBiZWNhdXNlIHRoZXJlIGlzIG5vIEVMRiBmaWxlIGZvciB0aGlzIGNvZGUuCitFbmhhbmNlZCBzdXBwb3J0IGZvciBKSVRlZCBjb2RlIGlzIG5vdyBhdmFpbGFibGUgZm9yIHNvbWUgdmlydHVhbCBtYWNoaW5lczsgCitlLmcuLCB0aGUgSmF2YSBWaXJ0dWFsIE1hY2hpbmUuICBGb3IgZGV0YWlscyBhYm91dCBPUHJvZmlsZSBvdXRwdXQgZm9yCitKSVRlZCBjb2RlLCBzZWUgPGEgY2xhc3M9InhyZWYiIGhyZWY9IiNnZXR0aW5nLWppdC1yZXBvcnRzIiB0aXRsZT0iNC6gT1Byb2ZpbGUgcmVzdWx0cyB3aXRoIEpJVCBzYW1wbGVzIj5TZWN0aW9uoDQsICYjODIyMDtPUHJvZmlsZSByZXN1bHRzIHdpdGggSklUIHNhbXBsZXMmIzgyMjE7PC9hPi4KKzwvcD4KKyAgICAgICAgICAgIDxwPkZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IEpJVCBzdXBwb3J0IGluIE9Qcm9maWxlLCBzZWUgPGEgY2xhc3M9InhyZWYiIGhyZWY9IiNqaXRzdXBwb3J0IiB0aXRsZT0iMS4xLqBTdXBwb3J0IGZvciBkeW5hbWljYWxseSBjb21waWxlZCAoSklUKSBjb2RlIj5TZWN0aW9uoDEuMSwgJiM4MjIwO1N1cHBvcnQgZm9yIGR5bmFtaWNhbGx5IGNvbXBpbGVkIChKSVQpIGNvZGUmIzgyMjE7PC9hPi4KKzwvcD4KKyAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0MiIgdGl0bGU9IjIuNi6gWE1MIGZvcm1hdHRlZCBvdXRwdXQiPgorICAgICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KKyAgICAgICAgICAgICAgPGRpdj4KKyAgICAgICAgICAgICAgICA8ZGl2PgorICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPSJ0aXRsZSI+PGEgaWQ9Im9wcmVwb3J0LXhtbCI+PC9hPjIuNi6gWE1MIGZvcm1hdHRlZCBvdXRwdXQ8L2gzPgorICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgPHA+CitUaGUgLXhtbCBvcHRpb24gY2FuIGJlIHVzZWQgdG8gZ2VuZXJhdGUgWE1MIGluc3RlYWQgb2YgdGhlIHVzdWFsCit0ZXh0IGZvcm1hdC4gIFRoaXMgYWxsb3dzIG9wcmVwb3J0IHRvIGVsaW1pbmF0ZSBzb21lIG9mIHRoZSBjb25zdHJhaW50cworZGljdGF0ZWQgYnkgdGhlIHR3byBkaW1lbnNpb25hbCB0ZXh0IGZvcm1hdC4gIEZvciBleGFtcGxlLCBpdCBpcyBwb3NzaWJsZQordG8gc2VwYXJhdGUgdGhlIHNhbXBsZSBkYXRhIGFjcm9zcyBtdWx0aXBsZSBldmVudHMsIGNwdXMgYW5kIHRocmVhZHMuICBUaGUgWE1MCitzY2hlbWEgaW1wbGVtZW50ZWQgYnkgb3ByZXBvcnQgaXMgZm91bmQgaW4gZG9jL29wcmVwb3J0LnhzZC4gSXQgY29udGFpbnMKK21vcmUgZGV0YWlsZWQgY29tbWVudHMgYWJvdXQgdGhlIHN0cnVjdHVyZSBvZiB0aGUgWE1MIGdlbmVyYXRlZCBieSBvcHJlcG9ydC4KKzwvcD4KKyAgICAgICAgICAgIDxwPgorU2luY2UgWE1MIGlzIGNvbnN1bWVkIGJ5IGEgY2xpZW50IHByb2dyYW0gcmF0aGVyIHRoYW4gYSB1c2VyLCBpdHMgc3RydWN0dXJlCitpcyBmYWlybHkgc3RhdGljLiAgSW4gcGFydGljdWxhciwgdGhlIC0tc29ydCBvcHRpb24gaXMgaW5jb21wYXRpYmxlIHdpdGggdGhlCistLXhtbCBvcHRpb24uICBQZXJjZW50YWdlcyBhcmUgbm90IGRpc2xheWVkIGluIHRoZSBYTUwgc28gdGhlIG9wdGlvbnMgcmVsYXRlZAordG8gcGVyY2VudGFnZXMgd2lsbCBoYXZlIG5vIGVmZmVjdC4gIEZ1bGwgcGF0aG5hbWVzIGFyZSBhbHdheXMgZGlzcGxheWVkIGluCit0aGUgWE1MIHNvIC0tbG9uZy1maWxlbmFtZXMgaXMgbm90IG5lY2Vzc2FyeS4gIFRoZSAtLWRldGFpbHMgb3B0aW9uIHdpbGwgY2F1c2UKK2FsbCBvZiB0aGUgaW5kaXZpZHVhbCBzYW1wbGUgZGF0YSB0byBiZSBpbmNsdWRlZCBpbiB0aGUgWE1MIGFzIHdlbGwgYXMgdGhlCitpbnN0cnVjdGlvbiBieXRlIHN0cmVhbSBmb3IgZWFjaCBzeW1ib2wgKGZvciBkb2luZyBkaXNhc3NlbWJseSkgYW5kIGNhbiByZXN1bHQKK2luIHZlcnkgbGFyZ2UgWE1MIGZpbGVzLgorPC9wPgorICAgICAgICAgIDwvZGl2PgorICAgICAgICAgIDxkaXYgY2xhc3M9InNlY3QyIiB0aXRsZT0iMi43LqBPcHRpb25zIGZvciBvcHJlcG9ydCI+CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgorICAgICAgICAgICAgICA8ZGl2PgorICAgICAgICAgICAgICAgIDxkaXY+CisgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9InRpdGxlIj48YSBpZD0ib3ByZXBvcnQtb3B0aW9ucyI+PC9hPjIuNy6gT3B0aW9ucyBmb3IgPHNwYW4gY2xhc3M9ImNvbW1hbmQiPjxzdHJvbmc+b3ByZXBvcnQ8L3N0cm9uZz48L3NwYW4+PC9oMz4KKyAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+CisgICAgICAgICAgICAgIDxkbD4KKyAgICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGVybSI+CisgICAgICAgICAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tYWNjdW11bGF0ZWQgLyAtYTwvY29kZT4KKyAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgICAgIDxkZD4KKyAgICAgICAgICAgICAgICAgIDxwPgorQWNjdW11bGF0ZSBzYW1wbGUgYW5kIHBlcmNlbnRhZ2UgY291bnRzIGluIHRoZSBzeW1ib2wgbGlzdC4KKzwvcD4KKyAgICAgICAgICAgICAgICA8L2RkPgorICAgICAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXJtIj4KKyAgICAgICAgICAgICAgICAgICAgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1jYWxsZ3JhcGggLyAtYzwvY29kZT4KKyAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgICAgIDxkZD4KKyAgICAgICAgICAgICAgICAgIDxwPgorU2hvdyBjYWxsZ3JhcGggaW5mb3JtYXRpb24uCis8L3A+CisgICAgICAgICAgICAgICAgPC9kZD4KKyAgICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGVybSI+CisgICAgICAgICAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tZGVidWctaW5mbyAvIC1nPC9jb2RlPgorICAgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICAgICAgPGRkPgorICAgICAgICAgICAgICAgICAgPHA+CitTaG93IHNvdXJjZSBmaWxlIGFuZCBsaW5lIGZvciBlYWNoIHN5bWJvbC4KKzwvcD4KKyAgICAgICAgICAgICAgICA8L2RkPgorICAgICAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXJtIj4KKyAgICAgICAgICAgICAgICAgICAgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1kZW1hbmdsZSAvIC1EIG5vbmV8bm9ybWFsfHNtYXJ0PC9jb2RlPgorICAgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICAgICAgPGRkPgorICAgICAgICAgICAgICAgICAgPHA+Citub25lOiBubyBkZW1hbmdsaW5nLiBub3JtYWw6IHVzZSBkZWZhdWx0IGRlbWFuZ2xlciAoZGVmYXVsdCkgc21hcnQ6IHVzZQorcGF0dGVybi1tYXRjaGluZyB0byBtYWtlIEMrKyBzeW1ib2wgZGVtYW5nbGluZyBtb3JlIHJlYWRhYmxlLgorPC9wPgorICAgICAgICAgICAgICAgIDwvZGQ+CisgICAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRlcm0iPgorICAgICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLWRldGFpbHMgLyAtZDwvY29kZT4KKyAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgICAgIDxkZD4KKyAgICAgICAgICAgICAgICAgIDxwPgorU2hvdyBwZXItaW5zdHJ1Y3Rpb24gZGV0YWlscyBmb3IgYWxsIHNlbGVjdGVkIHN5bWJvbHMuIE5vdGUgdGhhdCwgZm9yCitiaW5hcmllcyB3aXRob3V0IHN5bWJvbCBpbmZvcm1hdGlvbiwgdGhlIFZNQSB2YWx1ZXMgc2hvd24gYXJlIHJhdyBmaWxlCitvZmZzZXRzIGZvciB0aGUgaW1hZ2UgYmluYXJ5LgorPC9wPgorICAgICAgICAgICAgICAgIDwvZGQ+CisgICAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRlcm0iPgorICAgICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLWV4Y2x1ZGUtZGVwZW5kZW50IC8gLXg8L2NvZGU+CisgICAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgICAgICA8ZGQ+CisgICAgICAgICAgICAgICAgICA8cD4KK0RvIG5vdCBpbmNsdWRlIGFwcGxpY2F0aW9uLXNwZWNpZmljIGltYWdlcyBmb3IgbGlicmFyaWVzLCBrZXJuZWwgbW9kdWxlcworYW5kIHRoZSBrZXJuZWwuIFRoaXMgb3B0aW9uIG9ubHkgbWFrZXMgc2Vuc2UgaWYgdGhlIHByb2ZpbGUgc2Vzc2lvbgordXNlZCAtLXNlcGFyYXRlLgorPC9wPgorICAgICAgICAgICAgICAgIDwvZGQ+CisgICAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRlcm0iPgorICAgICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLWV4Y2x1ZGUtc3ltYm9scyAvIC1lIFtzeW1ib2xzXTwvY29kZT4KKyAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgICAgIDxkZD4KKyAgICAgICAgICAgICAgICAgIDxwPgorRXhjbHVkZSBhbGwgdGhlIHN5bWJvbHMgaW4gdGhlIGdpdmVuIGNvbW1hLXNlcGFyYXRlZCBsaXN0LgorPC9wPgorICAgICAgICAgICAgICAgIDwvZGQ+CisgICAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRlcm0iPgorICAgICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLWdsb2JhbC1wZXJjZW50IC8gLSU8L2NvZGU+CisgICAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgICAgICA8ZGQ+CisgICAgICAgICAgICAgICAgICA8cD4KK01ha2UgYWxsIHBlcmNlbnRhZ2VzIHJlbGF0aXZlIHRvIHRoZSB3aG9sZSBwcm9maWxlLgorPC9wPgorICAgICAgICAgICAgICAgIDwvZGQ+CisgICAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRlcm0iPgorICAgICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLWhlbHAgLyAtPyAvIC0tdXNhZ2U8L2NvZGU+CisgICAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgICAgICA8ZGQ+CisgICAgICAgICAgICAgICAgICA8cD4KK1Nob3cgaGVscCBtZXNzYWdlLgorPC9wPgorICAgICAgICAgICAgICAgIDwvZGQ+CisgICAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRlcm0iPgorICAgICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLWltYWdlLXBhdGggLyAtcCBbcGF0aHNdPC9jb2RlPgorICAgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICAgICAgPGRkPgorICAgICAgICAgICAgICAgICAgPHA+CitDb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBhZGRpdGlvbmFsIHBhdGhzIHRvIHNlYXJjaCBmb3IgYmluYXJpZXMuCitUaGlzIGlzIG5lZWRlZCB0byBmaW5kIG1vZHVsZXMgaW4ga2VybmVscyAyLjYgYW5kIHVwd2FyZHMuCis8L3A+CisgICAgICAgICAgICAgICAgPC9kZD4KKyAgICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGVybSI+CisgICAgICAgICAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tcm9vdCAvIC1SIFtwYXRoXTwvY29kZT4KKyAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgICAgIDxkZD4KKyAgICAgICAgICAgICAgICAgIDxwPgorQSBwYXRoIHRvIGEgZmlsZXN5c3RlbSB0byBzZWFyY2ggZm9yIGFkZGl0aW9uYWwgYmluYXJpZXMuCis8L3A+CisgICAgICAgICAgICAgICAgPC9kZD4KKyAgICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGVybSI+CisgICAgICAgICAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0taW5jbHVkZS1zeW1ib2xzIC8gLWkgW3N5bWJvbHNdPC9jb2RlPgorICAgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICAgICAgPGRkPgorICAgICAgICAgICAgICAgICAgPHA+CitPbmx5IGluY2x1ZGUgc3ltYm9scyBpbiB0aGUgZ2l2ZW4gY29tbWEtc2VwYXJhdGVkIGxpc3QuCis8L3A+CisgICAgICAgICAgICAgICAgPC9kZD4KKyAgICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGVybSI+CisgICAgICAgICAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tbG9uZy1maWxlbmFtZXMgLyAtZjwvY29kZT4KKyAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgICAgIDxkZD4KKyAgICAgICAgICAgICAgICAgIDxwPgorT3V0cHV0IGZ1bGwgcGF0aHMgaW5zdGVhZCBvZiBiYXNlbmFtZXMuCis8L3A+CisgICAgICAgICAgICAgICAgPC9kZD4KKyAgICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGVybSI+CisgICAgICAgICAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tbWVyZ2UgLyAtbSBbbGliLGNwdSx0aWQsdGdpZCx1bml0bWFzayxhbGxdPC9jb2RlPgorICAgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICAgICAgPGRkPgorICAgICAgICAgICAgICAgICAgPHA+CitNZXJnZSBhbnkgcHJvZmlsZXMgc2VwYXJhdGVkIGluIGEgLS1zZXBhcmF0ZSBzZXNzaW9uLgorPC9wPgorICAgICAgICAgICAgICAgIDwvZGQ+CisgICAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRlcm0iPgorICAgICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLW5vLWhlYWRlcjwvY29kZT4KKyAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgICAgIDxkZD4KKyAgICAgICAgICAgICAgICAgIDxwPgorRG9uJ3Qgb3V0cHV0IGEgaGVhZGVyIGRldGFpbGluZyBwcm9maWxpbmcgcGFyYW1ldGVycy4KKzwvcD4KKyAgICAgICAgICAgICAgICA8L2RkPgorICAgICAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXJtIj4KKyAgICAgICAgICAgICAgICAgICAgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1vdXRwdXQtZmlsZSAvIC1vIFtmaWxlXTwvY29kZT4KKyAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgICAgIDxkZD4KKyAgICAgICAgICAgICAgICAgIDxwPgorT3V0cHV0IHRvIHRoZSBnaXZlbiBmaWxlIGluc3RlYWQgb2Ygc3Rkb3V0LgorPC9wPgorICAgICAgICAgICAgICAgIDwvZGQ+CisgICAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRlcm0iPgorICAgICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLXJldmVyc2Utc29ydCAvIC1yPC9jb2RlPgorICAgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICAgICAgPGRkPgorICAgICAgICAgICAgICAgICAgPHA+CitSZXZlcnNlIHRoZSBzb3J0IGZyb20gdGhlIGRlZmF1bHQuCis8L3A+CisgICAgICAgICAgICAgICAgPC9kZD4KKyAgICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1zZXNzaW9uLWRpcj08L2NvZGU+ZGlyX3BhdGg8L3NwYW4+CisgICAgICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgICAgICA8ZGQ+CisgICAgICAgICAgICAgICAgICA8cD4KK1VzZSBzYW1wbGUgZGF0YWJhc2Ugb3V0IG9mIGRpcmVjdG9yeSA8Y29kZSBjbGFzcz0iZmlsZW5hbWUiPmRpcl9wYXRoPC9jb2RlPiAKK2luc3RlYWQgb2YgdGhlIGRlZmF1bHQgbG9jYXRpb24gKC92YXIvbGliL29wcm9maWxlKS4KKzwvcD4KKyAgICAgICAgICAgICAgICA8L2RkPgorICAgICAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXJtIj4KKyAgICAgICAgICAgICAgICAgICAgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1zaG93LWFkZHJlc3MgLyAtdzwvY29kZT4KKyAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgICAgIDxkZD4KKyAgICAgICAgICAgICAgICAgIDxwPgorU2hvdyB0aGUgVk1BIGFkZHJlc3Mgb2YgZWFjaCBzeW1ib2wgKG9mZiBieSBkZWZhdWx0KS4KKzwvcD4KKyAgICAgICAgICAgICAgICA8L2RkPgorICAgICAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXJtIj4KKyAgICAgICAgICAgICAgICAgICAgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1zb3J0IC8gLXMgW3ZtYSxzYW1wbGUsc3ltYm9sLGRlYnVnLGltYWdlXTwvY29kZT4KKyAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgICAgIDxkZD4KKyAgICAgICAgICAgICAgICAgIDxwPgorU29ydCB0aGUgbGlzdCBvZiBzeW1ib2xzIGJ5LCByZXNwZWN0aXZlbHksIHN5bWJvbCBhZGRyZXNzLAorbnVtYmVyIG9mIHNhbXBsZXMsIHN5bWJvbCBuYW1lLCBkZWJ1ZyBmaWxlbmFtZSBhbmQgbGluZSBudW1iZXIsCitiaW5hcnkgaW1hZ2UgZmlsZW5hbWUuCis8L3A+CisgICAgICAgICAgICAgICAgPC9kZD4KKyAgICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGVybSI+CisgICAgICAgICAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tc3ltYm9scyAvIC1sPC9jb2RlPgorICAgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICAgICAgPGRkPgorICAgICAgICAgICAgICAgICAgPHA+CitMaXN0IHBlci1zeW1ib2wgaW5mb3JtYXRpb24gaW5zdGVhZCBvZiBhIGJpbmFyeSBpbWFnZSBzdW1tYXJ5LgorPC9wPgorICAgICAgICAgICAgICAgIDwvZGQ+CisgICAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRlcm0iPgorICAgICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLXRocmVzaG9sZCAvIC10IFtwZXJjZW50YWdlXTwvY29kZT4KKyAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgICAgIDxkZD4KKyAgICAgICAgICAgICAgICAgIDxwPgorT25seSBvdXRwdXQgZGF0YSBmb3Igc3ltYm9scyB0aGF0IGhhdmUgbW9yZSB0aGFuIHRoZSBnaXZlbiBwZXJjZW50YWdlCitvZiB0b3RhbCBzYW1wbGVzLgorPC9wPgorICAgICAgICAgICAgICAgIDwvZGQ+CisgICAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRlcm0iPgorICAgICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLXZlcmJvc2UgLyAtViBbb3B0aW9uc108L2NvZGU+CisgICAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgICAgICA8ZGQ+CisgICAgICAgICAgICAgICAgICA8cD4KK0dpdmUgdmVyYm9zZSBkZWJ1Z2dpbmcgb3V0cHV0LgorPC9wPgorICAgICAgICAgICAgICAgIDwvZGQ+CisgICAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRlcm0iPgorICAgICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLXZlcnNpb24gLyAtdjwvY29kZT4KKyAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgICAgIDxkZD4KKyAgICAgICAgICAgICAgICAgIDxwPgorU2hvdyB2ZXJzaW9uLgorPC9wPgorICAgICAgICAgICAgICAgIDwvZGQ+CisgICAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRlcm0iPgorICAgICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLXhtbCAvIC1YPC9jb2RlPgorICAgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICAgICAgPGRkPgorICAgICAgICAgICAgICAgICAgPHA+CitHZW5lcmF0ZSBYTUwgb3V0cHV0LgorPC9wPgorICAgICAgICAgICAgICAgIDwvZGQ+CisgICAgICAgICAgICAgIDwvZGw+CisgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgPC9kaXY+CisgICAgICAgIDxkaXYgY2xhc3M9InNlY3QxIiB0aXRsZT0iMy6gT3V0cHV0dGluZyBhbm5vdGF0ZWQgc291cmNlIChvcGFubm90YXRlKSI+CisgICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KKyAgICAgICAgICAgIDxkaXY+CisgICAgICAgICAgICAgIDxkaXY+CisgICAgICAgICAgICAgICAgPGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj48YSBpZD0ib3Bhbm5vdGF0ZSI+PC9hPjMuoE91dHB1dHRpbmcgYW5ub3RhdGVkIHNvdXJjZSAoPHNwYW4gY2xhc3M9ImNvbW1hbmQiPjxzdHJvbmc+b3Bhbm5vdGF0ZTwvc3Ryb25nPjwvc3Bhbj4pPC9oMj4KKyAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICA8cD4KK1RoZSA8c3BhbiBjbGFzcz0iY29tbWFuZCI+PHN0cm9uZz5vcGFubm90YXRlPC9zdHJvbmc+PC9zcGFuPiB1dGlsaXR5IGdlbmVyYXRlcyBhbm5vdGF0ZWQgc291cmNlIGZpbGVzIG9yIGFzc2VtYmx5IGxpc3RpbmdzLCBvcHRpb25hbGx5CittaXhlZCB3aXRoIHNvdXJjZS4KK0lmIHlvdSB3YW50IHRvIHNlZSB0aGUgc291cmNlIGZpbGUsIHRoZSBwcm9maWxlZCBhcHBsaWNhdGlvbiBuZWVkcyB0byBoYXZlIGRlYnVnIGluZm9ybWF0aW9uLCBhbmQgdGhlIHNvdXJjZQorbXVzdCBiZSBhdmFpbGFibGUgdGhyb3VnaCB0aGlzIGRlYnVnIGluZm9ybWF0aW9uLiBGb3IgR0NDLCB5b3UgbXVzdCB1c2UgdGhlIDxjb2RlIGNsYXNzPSJvcHRpb24iPi1nPC9jb2RlPiBvcHRpb24KK3doZW4geW91IGFyZSBjb21waWxpbmcuCitJZiB0aGUgYmluYXJ5IGRvZXNuJ3QgY29udGFpbiBzdWZmaWNpZW50IGRlYnVnIGluZm9ybWF0aW9uLCB5b3UgY2FuIHN0aWxsCit1c2UgPHNwYW4gY2xhc3M9ImNvbW1hbmQiPjxzdHJvbmc+b3Bhbm5vdGF0ZSA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLWFzc2VtYmx5PC9jb2RlPjwvc3Ryb25nPjwvc3Bhbj4gdG8gZ2V0IGFubm90YXRlZCBhc3NlbWJseS4KKzwvcD4KKyAgICAgICAgICA8cD4KK05vdGUgdGhhdCBmb3IgdGhlIHJlYXNvbiBleHBsYWluZWQgaW4gPGEgY2xhc3M9InhyZWYiIGhyZWY9IiNoYXJkd2FyZS1jb3VudGVycyIgdGl0bGU9IjQuMS6gSGFyZHdhcmUgcGVyZm9ybWFuY2UgY291bnRlcnMiPlNlY3Rpb26gNC4xLCAmIzgyMjA7SGFyZHdhcmUgcGVyZm9ybWFuY2UgY291bnRlcnMmIzgyMjE7PC9hPiB0aGUgcmVzdWx0cyBjYW4gYmUKK2luYWNjdXJhdGUuIFRoZSBkZWJ1ZyBpbmZvcm1hdGlvbiBpdHNlbGYgY2FuIGFkZCBvdGhlciBwcm9ibGVtczsgZm9yIGV4YW1wbGUsIHRoZSBsaW5lIG51bWJlciBmb3IgYSBzeW1ib2wgY2FuIGJlCitpbmNvcnJlY3QuIEFzc2VtYmx5IGluc3RydWN0aW9ucyBjYW4gYmUgcmUtb3JkZXJlZCBhbmQgbW92ZWQgYnkgdGhlIGNvbXBpbGVyLCBhbmQgdGhpcyBjYW4gbGVhZCB0bworY3JlZGl0aW5nIHNvdXJjZSBsaW5lcyB3aXRoIHNhbXBsZXMgbm90IHJlYWxseSAib3duZWQiIGJ5IHRoaXMgbGluZS4gQWxzbyBzZWUKKzxhIGNsYXNzPSJ4cmVmIiBocmVmPSIjaW50ZXJwcmV0aW5nIiB0aXRsZT0iQ2hhcHRlcqA1LqBJbnRlcnByZXRpbmcgcHJvZmlsaW5nIHJlc3VsdHMiPkNoYXB0ZXKgNSwgPGk+SW50ZXJwcmV0aW5nIHByb2ZpbGluZyByZXN1bHRzPC9pPjwvYT4uCis8L3A+CisgICAgICAgICAgPHA+CitZb3UgY2FuIG91dHB1dCB0aGUgYW5ub3RhdGlvbiB0byBvbmUgc2luZ2xlIGZpbGUsIGNvbnRhaW5pbmcgYWxsIHRoZSBzb3VyY2UgZm91bmQgdXNpbmcgdGhlCis8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLXNvdXJjZTwvY29kZT4uIFlvdSBjYW4gdXNlIHRoaXMgaW4gY29uanVuY3Rpb24gd2l0aCA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLWFzc2VtYmx5PC9jb2RlPgordG8gZ2V0IGNvbWJpbmVkIHNvdXJjZS9hc3NlbWJseSBvdXRwdXQuCis8L3A+CisgICAgICAgICAgPHA+CitZb3UgY2FuIGFsc28gb3V0cHV0IGEgZGlyZWN0b3J5IG9mIGFubm90YXRlZCBzb3VyY2UgZmlsZXMgdGhhdCBtYWludGFpbnMgdGhlIHN0cnVjdHVyZSBvZgordGhlIG9yaWdpbmFsIHNvdXJjZXMuIEVhY2ggbGluZSBpbiB0aGUgYW5ub3RhdGVkIHNvdXJjZSBpcyBwcmVwZW5kZWQgd2l0aCB0aGUgc2FtcGxlcworZm9yIHRoYXQgbGluZS4gQWRkaXRpb25hbGx5LCBlYWNoIHN5bWJvbCBpcyBhbm5vdGF0ZWQgZ2l2aW5nIGRldGFpbHMgZm9yIHRoZSBzeW1ib2wKK2FzIGEgd2hvbGUuIEFuIGV4YW1wbGU6Cis8L3A+CisgICAgICAgICAgPHRhYmxlIHhtbG5zPSIiIGJvcmRlcj0iMCIgc3R5bGU9ImJhY2tncm91bmQ6ICNFMEUwRTA7IiB3aWR0aD0iOTAlIj4KKyAgICAgICAgICAgIDx0cj4KKyAgICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICAgIDxwcmUgY2xhc3M9InNjcmVlbiI+CiskIG9wYW5ub3RhdGUgLS1zb3VyY2UgLS1vdXRwdXQtZGlyPWFubm90YXRlZCAvdXNyL2xvY2FsL29wcm9maWxlLXBwL2Jpbi9vcHJvZmlsZWQKKyQgbHMgYW5ub3RhdGVkL2hvbWUvbW96L3NyYy9vcHJvZmlsZS1wcC9kYWVtb24vCitvcGRfY29va2llLmggIG9wZF9pbWFnZS5jICBvcGRfa2VybmVsLmMgIG9wZF9zYW1wbGVfZmlsZXMuYyAgb3Byb2ZpbGVkLmMKKzwvcHJlPgorICAgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgPC90cj4KKyAgICAgICAgICA8L3RhYmxlPgorICAgICAgICAgIDxwPgorTGluZSBudW1iZXJzIGFyZSBtYWludGFpbmVkIGluIHRoZSBzb3VyY2UgZmlsZXMsIGJ1dCBlYWNoIGZpbGUgaGFzCithIGZvb3RlciBhcHBlbmRlZCBkZXNjcmliaW5nIHRoZSBwcm9maWxpbmcgZGV0YWlscy4gVGhlIGFjdHVhbCBhbm5vdGF0aW9uCitsb29rcyBzb21ldGhpbmcgbGlrZSB0aGlzIDoKKzwvcD4KKyAgICAgICAgICA8dGFibGUgeG1sbnM9IiIgYm9yZGVyPSIwIiBzdHlsZT0iYmFja2dyb3VuZDogI0UwRTBFMDsiIHdpZHRoPSI5MCUiPgorICAgICAgICAgICAgPHRyPgorICAgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgICAgPHByZSBjbGFzcz0ic2NyZWVuIj4KKy4uLgorICAgICAgICAgICAgICAgOnN0YXRpYyB1aW50NjRfdCBwb3BfYnVmZmVyX3ZhbHVlKHN0cnVjdCB0cmFuc2llbnQgKiB0cmFucykKKyAxMTUxMCAgMS45NjYxIDp7IC8qIHBvcF9idWZmZXJfdmFsdWUgdG90YWw6ICA4OTkwMSAxNS4zNTY2ICovCisgICAgICAgICAgICAgICA6ICAgICAgICB1aW50NjRfdCB2YWw7CisgICAgICAgICAgICAgICA6CisgMTAyMjcgIDEuNzQ2OSA6ICAgICAgICBpZiAoIXRyYW5zLSZndDtyZW1haW5pbmcpIHsKKyAgICAgICAgICAgICAgIDogICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJCVUc6IHBvcHBpbmcgZW1wdHkgYnVmZmVyICFcbiIpOworICAgICAgICAgICAgICAgOiAgICAgICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgICAgICAgICAgICA6ICAgICAgICB9CisgICAgICAgICAgICAgICA6CisgICAgICAgICAgICAgICA6ICAgICAgICB2YWwgPSBnZXRfYnVmZmVyX3ZhbHVlKHRyYW5zLSZndDtidWZmZXIsIDApOworICAyMjgxICAwLjM4OTYgOiAgICAgICAgdHJhbnMtJmd0O3JlbWFpbmluZy0tOworICAyMjk2ICAwLjM5MjIgOiAgICAgICAgdHJhbnMtJmd0O2J1ZmZlciArPSBrZXJuZWxfcG9pbnRlcl9zaXplOworICAgICAgICAgICAgICAgOiAgICAgICAgcmV0dXJuIHZhbDsKKyAxMDQ1NCAgMS43ODU3IDp9CisuLi4KKzwvcHJlPgorICAgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgPC90cj4KKyAgICAgICAgICA8L3RhYmxlPgorICAgICAgICAgIDxwPgorVGhlIGZpcnN0IG51bWJlciBvbiBlYWNoIGxpbmUgaXMgdGhlIG51bWJlciBvZiBzYW1wbGVzLCB3aGlsc3QgdGhlIHNlY29uZCBpcwordGhlIHJlbGF0aXZlIHBlcmNlbnRhZ2Ugb2YgdG90YWwgc2FtcGxlcy4KKzwvcD4KKyAgICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0MiIgdGl0bGU9IjMuMS6gTG9jYXRpbmcgc291cmNlIGZpbGVzIj4KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlcGFnZSI+CisgICAgICAgICAgICAgIDxkaXY+CisgICAgICAgICAgICAgICAgPGRpdj4KKyAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz0idGl0bGUiPjxhIGlkPSJvcGFubm90YXRlLWZpbmRpbmctc291cmNlIj48L2E+My4xLqBMb2NhdGluZyBzb3VyY2UgZmlsZXM8L2gzPgorICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgPHA+CitPZiBjb3Vyc2UsIDxzcGFuIGNsYXNzPSJjb21tYW5kIj48c3Ryb25nPm9wYW5ub3RhdGU8L3N0cm9uZz48L3NwYW4+IG5lZWRzIHRvIGJlIGFibGUgdG8gbG9jYXRlIHRoZSBzb3VyY2UgZmlsZXMKK2ZvciB0aGUgYmluYXJ5IGltYWdlKHMpIGluIG9yZGVyIHRvIHByb2R1Y2Ugb3V0cHV0LiBTb21lIGJpbmFyeSBpbWFnZXMgaGF2ZSBkZWJ1ZworaW5mb3JtYXRpb24gd2hlcmUgdGhlIGdpdmVuIHNvdXJjZSBmaWxlIHBhdGhzIGFyZSByZWxhdGl2ZSwgbm90IGFic29sdXRlLiBZb3UgY2FuCitzcGVjaWZ5IHNlYXJjaCBwYXRocyB0byBsb29rIGZvciB0aGVzZSBmaWxlcyAoc2ltaWxhciB0byA8c3BhbiBjbGFzcz0iY29tbWFuZCI+PHN0cm9uZz5nZGI8L3N0cm9uZz48L3NwYW4+J3MKKzxjb2RlIGNsYXNzPSJvcHRpb24iPmRpcjwvY29kZT4gY29tbWFuZCkgd2l0aCB0aGUgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1zZWFyY2gtZGlyczwvY29kZT4gb3B0aW9uLgorPC9wPgorICAgICAgICAgICAgPHA+CitTb21ldGltZXMgeW91IG1heSBoYXZlIGEgYmluYXJ5IGltYWdlIHdoaWNoIGdpdmVzIGFic29sdXRlIHBhdGhzIGZvciB0aGUgc291cmNlIGZpbGVzLAorYnV0IHlvdSBoYXZlIHRoZSBhY3R1YWwgc291cmNlcyBlbHNld2hlcmUgKGNvbW1vbmx5LCB5b3UndmUgaW5zdGFsbGVkIGFuIFNSUE0gZm9yCithIGJpbmFyeSBvbiB5b3VyIHN5c3RlbSBhbmQgeW91IHdhbnQgYW5ub3RhdGlvbiBmcm9tIGFuIGV4aXN0aW5nIHByb2ZpbGUpLiBZb3UgY2FuCit1c2UgdGhlIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tYmFzZS1kaXJzPC9jb2RlPiBvcHRpb24gdG8gcmVkaXJlY3QgT1Byb2ZpbGUgdG8gbG9vayBzb21ld2hlcmUKK2Vsc2UgZm9yIHNvdXJjZSBmaWxlcy4gRm9yIGV4YW1wbGUsIGltYWdpbmUgd2UgaGF2ZSBhIGJpbmFyeSBnZW5lcmF0ZWQgZnJvbSBhIHNvdXJjZQorZmlsZSB0aGF0IGlzIGdpdmVuIGluIHRoZSBkZWJ1ZyBpbmZvcm1hdGlvbiBhcyA8Y29kZSBjbGFzcz0iZmlsZW5hbWUiPi90bXAvYnVpbGQvbGliZm9vL2Zvby5jPC9jb2RlPiwKK2FuZCB5b3UgaGF2ZSB0aGUgc291cmNlIHRyZWUgbWF0Y2hpbmcgdGhhdCBiaW5hcnkgaW5zdGFsbGVkIGluIDxjb2RlIGNsYXNzPSJmaWxlbmFtZSI+L2hvbWUvdXNlci9saWJmb28vPC9jb2RlPi4KK1lvdSBjYW4gcmVkaXJlY3QgT1Byb2ZpbGUgdG8gZmluZCA8Y29kZSBjbGFzcz0iZmlsZW5hbWUiPmZvby5jPC9jb2RlPiBjb3JyZWN0bHkgbGlrZSB0aGlzIDoKKzwvcD4KKyAgICAgICAgICAgIDx0YWJsZSB4bWxucz0iIiBib3JkZXI9IjAiIHN0eWxlPSJiYWNrZ3JvdW5kOiAjRTBFMEUwOyIgd2lkdGg9IjkwJSI+CisgICAgICAgICAgICAgIDx0cj4KKyAgICAgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgICAgICA8cHJlIGNsYXNzPSJzY3JlZW4iPgorJCBvcGFubm90YXRlIC0tc291cmNlIC0tYmFzZS1kaXJzPS90bXAvYnVpbGQvbGliZm9vLyAtLXNlYXJjaC1kaXJzPS9ob21lL3VzZXIvbGliZm9vLyAtLW91dHB1dC1kaXI9YW5ub3RhdGVkLyAvbGliL2xpYmZvby5zbworPC9wcmU+CisgICAgICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgICAgPC90cj4KKyAgICAgICAgICAgIDwvdGFibGU+CisgICAgICAgICAgICA8cD4KK1lvdSBjYW4gc3BlY2lmeSBtdWx0aXBsZSAoY29tbWEtc2VwYXJhdGVkKSBwYXRocyB0byBib3RoIG9wdGlvbnMuCis8L3A+CisgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgPGRpdiBjbGFzcz0ic2VjdDIiIHRpdGxlPSIzLjIuoFVzYWdlIG9mIG9wYW5ub3RhdGUiPgorICAgICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KKyAgICAgICAgICAgICAgPGRpdj4KKyAgICAgICAgICAgICAgICA8ZGl2PgorICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPSJ0aXRsZSI+PGEgaWQ9Im9wYW5ub3RhdGUtZGV0YWlscyI+PC9hPjMuMi6gVXNhZ2Ugb2YgPHNwYW4gY2xhc3M9ImNvbW1hbmQiPjxzdHJvbmc+b3Bhbm5vdGF0ZTwvc3Ryb25nPjwvc3Bhbj48L2gzPgorICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KKyAgICAgICAgICAgICAgPGRsPgorICAgICAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXJtIj4KKyAgICAgICAgICAgICAgICAgICAgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1hc3NlbWJseSAvIC1hPC9jb2RlPgorICAgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICAgICAgPGRkPgorICAgICAgICAgICAgICAgICAgPHA+CitPdXRwdXQgYW5ub3RhdGVkIGFzc2VtYmx5LiBJZiB0aGlzIGlzIGNvbWJpbmVkIHdpdGggLS1zb3VyY2UsIHRoZW4gbWl4ZWQKK3NvdXJjZSAvIGFzc2VtYmx5IGFubm90YXRpb25zIGFyZSBvdXRwdXQuCis8L3A+CisgICAgICAgICAgICAgICAgPC9kZD4KKyAgICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGVybSI+CisgICAgICAgICAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tYmFzZS1kaXJzIC8gLWIgW3BhdGhzXS88L2NvZGU+CisgICAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgICAgICA8ZGQ+CisgICAgICAgICAgICAgICAgICA8cD4KK0NvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIHBhdGggcHJlZml4ZXMuIFRoaXMgY2FuIGJlIHVzZWQgdG8gcG9pbnQgT1Byb2ZpbGUgdG8gYQorZGlmZmVyZW50IGxvY2F0aW9uIGZvciBzb3VyY2UgZmlsZXMgd2hlbiB0aGUgZGVidWcgaW5mb3JtYXRpb24gc3BlY2lmaWVzIGFuCithYnNvbHV0ZSBwYXRoIG9uIHlvdXIgc3lzdGVtIGZvciB0aGUgc291cmNlIHRoYXQgZG9lcyBub3QgZXhpc3QuIFRoZSBwcmVmaXgKK2lzIHN0cmlwcGVkIGZyb20gdGhlIGRlYnVnIHNvdXJjZSBmaWxlIHBhdGhzLCB0aGVuIHNlYXJjaGVkIGluIHRoZSBzZWFyY2ggZGlycworc3BlY2lmaWVkIGJ5IDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tc2VhcmNoLWRpcnM8L2NvZGU+LgorPC9wPgorICAgICAgICAgICAgICAgIDwvZGQ+CisgICAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRlcm0iPgorICAgICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLWRlbWFuZ2xlIC8gLUQgbm9uZXxub3JtYWx8c21hcnQ8L2NvZGU+CisgICAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgICAgICA8ZGQ+CisgICAgICAgICAgICAgICAgICA8cD4KK25vbmU6IG5vIGRlbWFuZ2xpbmcuIG5vcm1hbDogdXNlIGRlZmF1bHQgZGVtYW5nbGVyIChkZWZhdWx0KSBzbWFydDogdXNlCitwYXR0ZXJuLW1hdGNoaW5nIHRvIG1ha2UgQysrIHN5bWJvbCBkZW1hbmdsaW5nIG1vcmUgcmVhZGFibGUuCis8L3A+CisgICAgICAgICAgICAgICAgPC9kZD4KKyAgICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGVybSI+CisgICAgICAgICAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tZXhjbHVkZS1kZXBlbmRlbnQgLyAteDwvY29kZT4KKyAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgICAgIDxkZD4KKyAgICAgICAgICAgICAgICAgIDxwPgorRG8gbm90IGluY2x1ZGUgYXBwbGljYXRpb24tc3BlY2lmaWMgaW1hZ2VzIGZvciBsaWJyYXJpZXMsIGtlcm5lbCBtb2R1bGVzCithbmQgdGhlIGtlcm5lbC4gVGhpcyBvcHRpb24gb25seSBtYWtlcyBzZW5zZSBpZiB0aGUgcHJvZmlsZSBzZXNzaW9uCit1c2VkIC0tc2VwYXJhdGUuCis8L3A+CisgICAgICAgICAgICAgICAgPC9kZD4KKyAgICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGVybSI+CisgICAgICAgICAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tZXhjbHVkZS1maWxlIFtmaWxlc108L2NvZGU+CisgICAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgICAgICA8ZGQ+CisgICAgICAgICAgICAgICAgICA8cD4KK0V4Y2x1ZGUgYWxsIGZpbGVzIGluIHRoZSBnaXZlbiBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBnbG9iIHBhdHRlcm5zLgorPC9wPgorICAgICAgICAgICAgICAgIDwvZGQ+CisgICAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRlcm0iPgorICAgICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLWV4Y2x1ZGUtc3ltYm9scyAvIC1lIFtzeW1ib2xzXTwvY29kZT4KKyAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgICAgIDxkZD4KKyAgICAgICAgICAgICAgICAgIDxwPgorRXhjbHVkZSBhbGwgdGhlIHN5bWJvbHMgaW4gdGhlIGdpdmVuIGNvbW1hLXNlcGFyYXRlZCBsaXN0LgorPC9wPgorICAgICAgICAgICAgICAgIDwvZGQ+CisgICAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRlcm0iPgorICAgICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLWhlbHAgLyAtPyAvIC0tdXNhZ2U8L2NvZGU+CisgICAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgICAgICA8ZGQ+CisgICAgICAgICAgICAgICAgICA8cD4KK1Nob3cgaGVscCBtZXNzYWdlLgorPC9wPgorICAgICAgICAgICAgICAgIDwvZGQ+CisgICAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRlcm0iPgorICAgICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLWltYWdlLXBhdGggLyAtcCBbcGF0aHNdPC9jb2RlPgorICAgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICAgICAgPGRkPgorICAgICAgICAgICAgICAgICAgPHA+CitDb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBhZGRpdGlvbmFsIHBhdGhzIHRvIHNlYXJjaCBmb3IgYmluYXJpZXMuCitUaGlzIGlzIG5lZWRlZCB0byBmaW5kIG1vZHVsZXMgaW4ga2VybmVscyAyLjYgYW5kIHVwd2FyZHMuCis8L3A+CisgICAgICAgICAgICAgICAgPC9kZD4KKyAgICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGVybSI+CisgICAgICAgICAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tcm9vdCAvIC1SIFtwYXRoXTwvY29kZT4KKyAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgICAgIDxkZD4KKyAgICAgICAgICAgICAgICAgIDxwPgorQSBwYXRoIHRvIGEgZmlsZXN5c3RlbSB0byBzZWFyY2ggZm9yIGFkZGl0aW9uYWwgYmluYXJpZXMuCis8L3A+CisgICAgICAgICAgICAgICAgPC9kZD4KKyAgICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGVybSI+CisgICAgICAgICAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0taW5jbHVkZS1maWxlIFtmaWxlc108L2NvZGU+CisgICAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgICAgICA8ZGQ+CisgICAgICAgICAgICAgICAgICA8cD4KK09ubHkgaW5jbHVkZSBmaWxlcyBpbiB0aGUgZ2l2ZW4gY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgZ2xvYiBwYXR0ZXJucy4KKzwvcD4KKyAgICAgICAgICAgICAgICA8L2RkPgorICAgICAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXJtIj4KKyAgICAgICAgICAgICAgICAgICAgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1pbmNsdWRlLXN5bWJvbHMgLyAtaSBbc3ltYm9sc108L2NvZGU+CisgICAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgICAgICA8ZGQ+CisgICAgICAgICAgICAgICAgICA8cD4KK09ubHkgaW5jbHVkZSBzeW1ib2xzIGluIHRoZSBnaXZlbiBjb21tYS1zZXBhcmF0ZWQgbGlzdC4KKzwvcD4KKyAgICAgICAgICAgICAgICA8L2RkPgorICAgICAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXJtIj4KKyAgICAgICAgICAgICAgICAgICAgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1vYmpkdW1wLXBhcmFtcyBbcGFyYW1zXTwvY29kZT4KKyAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgICAgIDxkZD4KKyAgICAgICAgICAgICAgICAgIDxwPgorUGFzcyB0aGUgZ2l2ZW4gcGFyYW1ldGVycyBhcyBleHRyYSB2YWx1ZXMgd2hlbiBjYWxsaW5nIG9iamR1bXAuCis8L3A+CisgICAgICAgICAgICAgICAgPC9kZD4KKyAgICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGVybSI+CisgICAgICAgICAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tb3V0cHV0LWRpciAvIC1vIFtkaXJdPC9jb2RlPgorICAgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICAgICAgPGRkPgorICAgICAgICAgICAgICAgICAgPHA+CitPdXRwdXQgZGlyZWN0b3J5LiBUaGlzIG1ha2VzIG9wYW5ub3RhdGUgb3V0cHV0IG9uZSBhbm5vdGF0ZWQgZmlsZSBmb3IgZWFjaAorc291cmNlIGZpbGUuIFRoaXMgb3B0aW9uIGNhbid0IGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCAtLWFzc2VtYmx5LgorPC9wPgorICAgICAgICAgICAgICAgIDwvZGQ+CisgICAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRlcm0iPgorICAgICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLXNlYXJjaC1kaXJzIC8gLWQgW3BhdGhzXTwvY29kZT4KKyAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgICAgIDxkZD4KKyAgICAgICAgICAgICAgICAgIDxwPgorQ29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgcGF0aHMgdG8gc2VhcmNoIGZvciBzb3VyY2UgZmlsZXMuIFRoaXMgaXMgdXNlZnVsIHRvIGZpbmQKK3NvdXJjZSBmaWxlcyB3aGVuIHRoZSBkZWJ1ZyBpbmZvcm1hdGlvbiBvbmx5IGNvbnRhaW5zIHJlbGF0aXZlIHBhdGhzLgorPC9wPgorICAgICAgICAgICAgICAgIDwvZGQ+CisgICAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRlcm0iPgorICAgICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLXNvdXJjZSAvIC1zPC9jb2RlPgorICAgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICAgICAgPGRkPgorICAgICAgICAgICAgICAgICAgPHA+CitPdXRwdXQgYW5ub3RhdGVkIHNvdXJjZS4gVGhpcyByZXF1aXJlcyBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gdG8gYmUgYXZhaWxhYmxlCitmb3IgdGhlIGJpbmFyaWVzLgorPC9wPgorICAgICAgICAgICAgICAgIDwvZGQ+CisgICAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRlcm0iPgorICAgICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLXRocmVzaG9sZCAvIC10IFtwZXJjZW50YWdlXTwvY29kZT4KKyAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgICAgIDxkZD4KKyAgICAgICAgICAgICAgICAgIDxwPgorT25seSBvdXRwdXQgZGF0YSBmb3Igc3ltYm9scyB0aGF0IGhhdmUgbW9yZSB0aGFuIHRoZSBnaXZlbiBwZXJjZW50YWdlCitvZiB0b3RhbCBzYW1wbGVzLgorPC9wPgorICAgICAgICAgICAgICAgIDwvZGQ+CisgICAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRlcm0iPgorICAgICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLXZlcmJvc2UgLyAtViBbb3B0aW9uc108L2NvZGU+CisgICAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgICAgICA8ZGQ+CisgICAgICAgICAgICAgICAgICA8cD4KK0dpdmUgdmVyYm9zZSBkZWJ1Z2dpbmcgb3V0cHV0LgorPC9wPgorICAgICAgICAgICAgICAgIDwvZGQ+CisgICAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRlcm0iPgorICAgICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLXZlcnNpb24gLyAtdjwvY29kZT4KKyAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgICAgIDxkZD4KKyAgICAgICAgICAgICAgICAgIDxwPgorU2hvdyB2ZXJzaW9uLgorPC9wPgorICAgICAgICAgICAgICAgIDwvZGQ+CisgICAgICAgICAgICAgIDwvZGw+CisgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgPC9kaXY+CisgICAgICAgIDxkaXYgY2xhc3M9InNlY3QxIiB0aXRsZT0iNC6gT1Byb2ZpbGUgcmVzdWx0cyB3aXRoIEpJVCBzYW1wbGVzIj4KKyAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgorICAgICAgICAgICAgPGRpdj4KKyAgICAgICAgICAgICAgPGRpdj4KKyAgICAgICAgICAgICAgICA8aDIgY2xhc3M9InRpdGxlIiBzdHlsZT0iY2xlYXI6IGJvdGgiPjxhIGlkPSJnZXR0aW5nLWppdC1yZXBvcnRzIj48L2E+NC6gT1Byb2ZpbGUgcmVzdWx0cyB3aXRoIEpJVCBzYW1wbGVzPC9oMj4KKyAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICA8cD4KKwkJQWZ0ZXIgcHJvZmlsaW5nIGEgSmF2YSAob3Igb3RoZXIgc3VwcG9ydGVkIFZNKSBhcHBsaWNhdGlvbiwgdGhlIGNvbW1hbmQKKwkJPC9wPgorICAgICAgICAgIDx0YWJsZSB4bWxucz0iIiBib3JkZXI9IjAiIHN0eWxlPSJiYWNrZ3JvdW5kOiAjRTBFMEUwOyIgd2lkdGg9IjkwJSI+CisgICAgICAgICAgICA8dHI+CisgICAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgICA8cHJlIGNsYXNzPSJzY3JlZW4iPjxzcGFuIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBjbGFzcz0iY29tbWFuZCI+PHN0cm9uZz4ib3Bjb250cm9sIC0tZHVtcCI8L3N0cm9uZz48L3NwYW4+IDwvcHJlPgorICAgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgPC90cj4KKyAgICAgICAgICA8L3RhYmxlPgorICAgICAgICAgIDxwPgorCQlmbHVzaGVzIHRoZSBzYW1wbGUgYnVmZmVycyBhbmQgY3JlYXRlcyBFTEYgYmluYXJpZXMgZnJvbSB0aGUKKwkJaW50ZXJtZWRpYXRlIGZpbGVzIHRoYXQgd2VyZSB3cml0dGVuIGJ5IHRoZSBhZ2VudCBsaWJyYXJ5LgorCQlUaGUgRUxGIGJpbmFyaWVzIGFyZSBuYW1lZCA8Y29kZSBjbGFzcz0iZmlsZW5hbWUiPiZsdDt0Z2lkJmd0Oy5qbzwvY29kZT4uCisJCVdpdGggdGhlIHN5bWJvbCBpbmZvcm1hdGlvbiBzdG9yZWQgaW4gdGhlc2UgRUxGIGZpbGVzLCBpdCBpcworCQlwb3NzaWJsZSB0byBtYXAgc2FtcGxlcyB0byB0aGUgYXBwcm9wcmlhdGUgc3ltYm9scy4KKwk8L3A+CisgICAgICAgICAgPHA+CisJCVRoZSB1c3VhbCBhbmFseXNpcyB0b29scyAoPHNwYW4gY2xhc3M9ImNvbW1hbmQiPjxzdHJvbmc+b3ByZXBvcnQ8L3N0cm9uZz48L3NwYW4+IGFuZC9vciAKKwkJPHNwYW4gY2xhc3M9ImNvbW1hbmQiPjxzdHJvbmc+b3Bhbm5vdGF0ZTwvc3Ryb25nPjwvc3Bhbj4pIGNhbiBub3cgYmUgdXNlZAorCQl0byBnZXQgc3ltYm9scyBhbmQgYXNzZW1ibHkgY29kZSBmb3IgdGhlIGluc3RydW1lbnRlZCBWTSBwcm9jZXNzZXMuCisJPC9wPgorICAgICAgICAgIDxwPgorQmVsb3cgaXMgYW4gZXhhbXBsZSBvZiBhIHByb2ZpbGUgcmVwb3J0IG9mIGEgSmF2YSBhcHBsaWNhdGlvbiB0aGF0IGhhcyBiZWVuCitpbnN0cnVtZW50ZWQgd2l0aCB0aGUgcHJvdmlkZWQgYWdlbnQgbGlicmFyeS4KKzwvcD4KKyAgICAgICAgICA8dGFibGUgeG1sbnM9IiIgYm9yZGVyPSIwIiBzdHlsZT0iYmFja2dyb3VuZDogI0UwRTBFMDsiIHdpZHRoPSI5MCUiPgorICAgICAgICAgICAgPHRyPgorICAgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgICAgPHByZSBjbGFzcz0ic2NyZWVuIj4KKyQgb3ByZXBvcnQgLWwgL3Vzci9saWIvanZtL2pyZS0xLjUuMC1pYm0vYmluL2phdmEKK0NQVTogQ29yZSBTb2xvIC8gRHVvLCBzcGVlZCAyMTY3IE1IeiAoZXN0aW1hdGVkKQorQ291bnRlZCBDUFVfQ0xLX1VOSEFMVEVEIGV2ZW50cyAoVW5oYWx0ZWQgY2xvY2sgY3ljbGVzKSB3aXRoIGEgdW5pdCBtYXNrIG9mIDB4MDAgKFVuaGFsdGVkIGNvcmUgY3ljbGVzKSBjb3VudCAxMDAwMDAKK3NhbXBsZXMgICUgICAgICAgIGltYWdlIG5hbWUgICAgICAgICAgICAgICBzeW1ib2wgbmFtZQorMTg2MDIwICAgNTAuMDUyMyAgbm8tdm1saW51eCAgICAgICAgICAgICAgIG5vLXZtbGludXggICAgICAgICAgICAgICAobm8gc3ltYm9scykKKzM0MzMzICAgICA5LjIzODAgIDc2MzUuam8gICAgICAgICAgICAgICAgICBqYXZhICAgICAgICAgICAgICAgICAgICAgdm9pZCB0ZXN0LmYxKCkKKzE5MDIyICAgICA1LjExODIgIGxpYmMtMi41LnNvICAgICAgICAgICAgICBsaWJjLTIuNS5zbyAgICAgICAgICAgICAgX0lPX2ZpbGVfeHNwdXRuQEBHTElCQ18yLjEKKzE4NzYyICAgICA1LjA0ODMgIGxpYmMtMi41LnNvICAgICAgICAgICAgICBsaWJjLTIuNS5zbyAgICAgICAgICAgICAgdmZwcmludGYKKzE2NDA4ICAgICA0LjQxNDkgIDc2MzUuam8gICAgICAgICAgICAgICAgICBqYXZhICAgICAgICAgICAgICAgICAgICAgdm9pZCB0ZXN0JEhlbGxvVGhyZWFkLnJ1bigpCisxNjI1MCAgICAgNC4zNzI0ICA3NjM1LmpvICAgICAgICAgICAgICAgICAgamF2YSAgICAgICAgICAgICAgICAgICAgIHZvaWQgdGVzdCR0ZXN0XzEuZjIoaW50KQorMTUzMDMgICAgIDQuMTE3NiAgNzYzNS5qbyAgICAgICAgICAgICAgICAgIGphdmEgICAgICAgICAgICAgICAgICAgICB2b2lkIHRlc3QuZjIoaW50LCBpbnQpCisxMzI1MiAgICAgMy41NjU3ICA3NjM1LmpvICAgICAgICAgICAgICAgICAgamF2YSAgICAgICAgICAgICAgICAgICAgIHZvaWQgdGVzdC5mMihpbnQpCis1MTY1ICAgICAgMS4zODk3ICA3NjM1LmpvICAgICAgICAgICAgICAgICAgamF2YSAgICAgICAgICAgICAgICAgICAgIHZvaWQgdGVzdC5mNCgpCis5NTUgICAgICAgMC4yNTcwICA3NjM1LmpvICAgICAgICAgICAgICAgICAgamF2YSAgICAgICAgICAgICAgICAgICAgIHZvaWQgdGVzdCRIZWxsb1RocmVhZC5ydW4oKX4KKworPC9wcmU+CisgICAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICA8L3RyPgorICAgICAgICAgIDwvdGFibGU+CisgICAgICAgICAgPHA+Cis8L3A+CisgICAgICAgICAgPGRpdiBjbGFzcz0ibm90ZSIgdGl0bGU9Ik5vdGUiIHN0eWxlPSJtYXJnaW4tbGVmdDogMC41aW47IG1hcmdpbi1yaWdodDogMC41aW47Ij4KKyAgICAgICAgICAgIDxoMyBjbGFzcz0idGl0bGUiPk5vdGU8L2gzPgorICAgICAgICAgICAgPHA+CisJICBEZXBlbmRpbmcgb24gdGhlIEpWTSB0aGF0IGlzIHVzZWQsIGNlcnRhaW4gb3B0aW9ucyBvZiBvcHJlcG9ydCBhbmQgb3Bhbm5vdGF0ZQorCSAgZG8gTk9UIHdvcmsgc2luY2UgdGhleSByZWx5IG9uIGRlYnVnIGluZm9ybWF0aW9uIChlLmcuIHNvdXJjZSBjb2RlIGxpbmUgbnVtYmVyKQorCSAgdGhhdCBpcyBub3QgYWx3YXlzIGF2YWlsYWJsZS4gVGhlIFN1biBKVk0gZG9lcyBwcm92aWRlIHRoZSBuZWNlc3NhcnkgZGVidWcKKwkgIGluZm9ybWF0aW9uIHZpYSB0aGUgSlZNVElbUEldIGludGVyZmFjZSwKKwkgIGJ1dCBvdGhlciBKVk1zIGRvIG5vdC4KKyAgPC9wPgorICAgICAgICAgIDwvZGl2PgorICAgICAgICAgIDxwPgorCQlBcyB5b3UgY2FuIHNlZSBpbiB0aGUgb3ByZXBvcnQgb3V0cHV0LCB0aGUgSklUIHN1cHBvcnQgYWdlbnQgZm9yIEphdmEKKwkJZ2VuZXJhdGVzIHN5bWJvbHMgdG8gaW5jbHVkZSB0aGUgY2xhc3MgYW5kIG1ldGhvZCBzaWduYXR1cmUuCisJCUEgc3ltYm9sIHdpdGggdGhlIHN1ZmZpeCAmIzczMjsmbHQ7biZndDsgKGUuZy4KKwkJPGNvZGUgY2xhc3M9ImNvZGUiPnZvaWQgdGVzdCRIZWxsb1RocmVhZC5ydW4oKSYjNzMyOzE8L2NvZGU+KSBtZWFucyB0aGF0IHRoaXMgaXMKKwkJdGhlICZsdDtuJmd0O3RoIG9jY3VycmVuY2Ugb2YgdGhlIGlkZW50aWNhbCBuYW1lLiBUaGlzIGhhcHBlbnMgaWYgYSBtZXRob2QgaXMgcmUtSklUZWQuCisJCUEgc3ltYm9sIHdpdGggdGhlIHN1ZmZpeCAlJmx0O24mZ3Q7LCBtZWFucyB0aGF0IHRoZSBhZGRyZXNzIHNwYWNlIG9mIHRoaXMgc3ltYm9sCisJCXdhcyByZXVzZWQgZHVyaW5nIHRoZSBzYW1wbGUgc2Vzc2lvbiAoc2VlIDxhIGNsYXNzPSJ4cmVmIiBocmVmPSIjb3ZlcmxhcHBpbmctc3ltYm9scyIgdGl0bGU9IjYuoE92ZXJsYXBwaW5nIHN5bWJvbHMgaW4gSklUZWQgY29kZSI+U2VjdGlvbqA2LCAmIzgyMjA7T3ZlcmxhcHBpbmcgc3ltYm9scyBpbiBKSVRlZCBjb2RlJiM4MjIxOzwvYT4pLgorCQlUaGUgdmFsdWUgJmx0O24mZ3Q7IGlzIHRoZSBwZXJjZW50YWdlIG9mIHRpbWUgdGhhdCB0aGlzIHN5bWJvbC9jb2RlIHdhcyBwcmVzZW50IGluCisJCXJlbGF0aW9uIHRvIHRoZSB0b3RhbCBsaWZldGltZSBvZiBhbGwgb3ZlcmxhcHBpbmcgb3RoZXIgc3ltYm9scy4gQSBzeW1ib2wgb2YgdGhlIGZvcm0KKwkJPGNvZGUgY2xhc3M9ImNvZGUiPiZsdDtyZXR1cm5fdmFsJmd0OyAmbHQ7Y2xhc3NfbmFtZSZndDskJmx0O21ldGhvZF9zaWcmZ3Q7PC9jb2RlPiBkZW5vdGVzIGFuCisJCWlubmVyIGNsYXNzLgorCTwvcD4KKyAgICAgICAgPC9kaXY+CisgICAgICAgIDxkaXYgY2xhc3M9InNlY3QxIiB0aXRsZT0iNS6gZ3Byb2YtY29tcGF0aWJsZSBvdXRwdXQgKG9wZ3Byb2YpIj4KKyAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgorICAgICAgICAgICAgPGRpdj4KKyAgICAgICAgICAgICAgPGRpdj4KKyAgICAgICAgICAgICAgICA8aDIgY2xhc3M9InRpdGxlIiBzdHlsZT0iY2xlYXI6IGJvdGgiPjxhIGlkPSJvcGdwcm9mIj48L2E+NS6gPHNwYW4gY2xhc3M9ImNvbW1hbmQiPjxzdHJvbmc+Z3Byb2Y8L3N0cm9uZz48L3NwYW4+LWNvbXBhdGlibGUgb3V0cHV0ICg8c3BhbiBjbGFzcz0iY29tbWFuZCI+PHN0cm9uZz5vcGdwcm9mPC9zdHJvbmc+PC9zcGFuPik8L2gyPgorICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgIDwvZGl2PgorICAgICAgICAgIDxwPgorSWYgeW91J3JlIGZhbWlsaWFyIHdpdGggdGhlIG91dHB1dCBwcm9kdWNlZCBieSA8c3BhbiBjbGFzcz0iY29tbWFuZCI+PHN0cm9uZz5HTlUgZ3Byb2Y8L3N0cm9uZz48L3NwYW4+LAoreW91IG1heSBmaW5kIDxzcGFuIGNsYXNzPSJjb21tYW5kIj48c3Ryb25nPm9wZ3Byb2Y8L3N0cm9uZz48L3NwYW4+IHVzZWZ1bC4gSXQgdGFrZXMgYSBzaW5nbGUgYmluYXJ5CithcyBhbiBhcmd1bWVudCwgYW5kIHByb2R1Y2VzIGEgPGNvZGUgY2xhc3M9ImZpbGVuYW1lIj5nbW9uLm91dDwvY29kZT4gZmlsZSBmb3IgdXNlCit3aXRoIDxzcGFuIGNsYXNzPSJjb21tYW5kIj48c3Ryb25nPmdwcm9mIC1wPC9zdHJvbmc+PC9zcGFuPi4gSWYgY2FsbC1ncmFwaCBwcm9maWxpbmcgaXMgZW5hYmxlZCwKK3RoZW4gdGhpcyBpcyBhbHNvIGluY2x1ZGVkLgorPC9wPgorICAgICAgICAgIDx0YWJsZSB4bWxucz0iIiBib3JkZXI9IjAiIHN0eWxlPSJiYWNrZ3JvdW5kOiAjRTBFMEUwOyIgd2lkdGg9IjkwJSI+CisgICAgICAgICAgICA8dHI+CisgICAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgICA8cHJlIGNsYXNzPSJzY3JlZW4iPgorJCBvcGdwcm9mIGB3aGljaCBvcHJvZmlsZWRgICMgZ2VuZXJhdGVzIGdtb24ub3V0IGZpbGUKKyQgZ3Byb2YgLXAgYHdoaWNoIG9wcm9maWxlZGAgfCBoZWFkCitGbGF0IHByb2ZpbGU6CisKK0VhY2ggc2FtcGxlIGNvdW50cyBhcyAxIHNhbXBsZXMuCisgICUgICBjdW11bGF0aXZlICAgc2VsZiAgICAgICAgICAgICAgc2VsZiAgICAgdG90YWwKKyB0aW1lICAgc2FtcGxlcyAgIHNhbXBsZXMgICAgY2FsbHMgIFQxL2NhbGwgIFQxL2NhbGwgIG5hbWUKKyAzMy4xMyAyMDYyMzcuMDAgMjA2MjM3LjAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZGJfaW5zZXJ0CisgMjIuNjcgMzQ3Mzg2LjAwIDE0MTE0OS4wMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9wX2J1ZmZlcl92YWx1ZQorICA5LjU2IDQwNjg4MS4wMCA1OTQ5NS4wMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BkX3B1dF9zYW1wbGUKKyAgNy4zNCA0NTI1OTkuMDAgNDU3MTguMDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZF9maW5kX2ltYWdlCisgIDcuMTkgNDk3MzI3LjAwIDQ0NzI4LjAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGRfcHJvY2Vzc19zYW1wbGVzCis8L3ByZT4KKyAgICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgIDwvdHI+CisgICAgICAgICAgPC90YWJsZT4KKyAgICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0MiIgdGl0bGU9IjUuMS6gVXNhZ2Ugb2Ygb3BncHJvZiI+CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgorICAgICAgICAgICAgICA8ZGl2PgorICAgICAgICAgICAgICAgIDxkaXY+CisgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9InRpdGxlIj48YSBpZD0ib3BncHJvZi1kZXRhaWxzIj48L2E+NS4xLqBVc2FnZSBvZiA8c3BhbiBjbGFzcz0iY29tbWFuZCI+PHN0cm9uZz5vcGdwcm9mPC9zdHJvbmc+PC9zcGFuPjwvaDM+CisgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgorICAgICAgICAgICAgICA8ZGw+CisgICAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRlcm0iPgorICAgICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLWhlbHAgLyAtPyAvIC0tdXNhZ2U8L2NvZGU+CisgICAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgICAgICA8ZGQ+CisgICAgICAgICAgICAgICAgICA8cD4KK1Nob3cgaGVscCBtZXNzYWdlLgorPC9wPgorICAgICAgICAgICAgICAgIDwvZGQ+CisgICAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRlcm0iPgorICAgICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLWltYWdlLXBhdGggLyAtcCBbcGF0aHNdPC9jb2RlPgorICAgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICAgICAgPGRkPgorICAgICAgICAgICAgICAgICAgPHA+CitDb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBhZGRpdGlvbmFsIHBhdGhzIHRvIHNlYXJjaCBmb3IgYmluYXJpZXMuCitUaGlzIGlzIG5lZWRlZCB0byBmaW5kIG1vZHVsZXMgaW4ga2VybmVscyAyLjYgYW5kIHVwd2FyZHMuCis8L3A+CisgICAgICAgICAgICAgICAgPC9kZD4KKyAgICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGVybSI+CisgICAgICAgICAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tcm9vdCAvIC1SIFtwYXRoXTwvY29kZT4KKyAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgICAgIDxkZD4KKyAgICAgICAgICAgICAgICAgIDxwPgorQSBwYXRoIHRvIGEgZmlsZXN5c3RlbSB0byBzZWFyY2ggZm9yIGFkZGl0aW9uYWwgYmluYXJpZXMuCis8L3A+CisgICAgICAgICAgICAgICAgPC9kZD4KKyAgICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGVybSI+CisgICAgICAgICAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tb3V0cHV0LWZpbGVuYW1lIC8gLW8gW2ZpbGVdPC9jb2RlPgorICAgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICAgICAgPGRkPgorICAgICAgICAgICAgICAgICAgPHA+CitPdXRwdXQgdG8gdGhlIGdpdmVuIGZpbGUgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCwgZ21vbi5vdXQKKzwvcD4KKyAgICAgICAgICAgICAgICA8L2RkPgorICAgICAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXJtIj4KKyAgICAgICAgICAgICAgICAgICAgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS10aHJlc2hvbGQgLyAtdCBbcGVyY2VudGFnZV08L2NvZGU+CisgICAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgICAgICA8ZGQ+CisgICAgICAgICAgICAgICAgICA8cD4KK09ubHkgb3V0cHV0IGRhdGEgZm9yIHN5bWJvbHMgdGhhdCBoYXZlIG1vcmUgdGhhbiB0aGUgZ2l2ZW4gcGVyY2VudGFnZQorb2YgdG90YWwgc2FtcGxlcy4KKzwvcD4KKyAgICAgICAgICAgICAgICA8L2RkPgorICAgICAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXJtIj4KKyAgICAgICAgICAgICAgICAgICAgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS12ZXJib3NlIC8gLVYgW29wdGlvbnNdPC9jb2RlPgorICAgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICAgICAgPGRkPgorICAgICAgICAgICAgICAgICAgPHA+CitHaXZlIHZlcmJvc2UgZGVidWdnaW5nIG91dHB1dC4KKzwvcD4KKyAgICAgICAgICAgICAgICA8L2RkPgorICAgICAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXJtIj4KKyAgICAgICAgICAgICAgICAgICAgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS12ZXJzaW9uIC8gLXY8L2NvZGU+CisgICAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgICAgICA8ZGQ+CisgICAgICAgICAgICAgICAgICA8cD4KK1Nob3cgdmVyc2lvbi4KKzwvcD4KKyAgICAgICAgICAgICAgICA8L2RkPgorICAgICAgICAgICAgICA8L2RsPgorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgPC9kaXY+CisgICAgICAgIDwvZGl2PgorICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0MSIgdGl0bGU9IjYuoEFyY2hpdmluZyBtZWFzdXJlbWVudHMgKG9wYXJjaGl2ZSkiPgorICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlcGFnZSI+CisgICAgICAgICAgICA8ZGl2PgorICAgICAgICAgICAgICA8ZGl2PgorICAgICAgICAgICAgICAgIDxoMiBjbGFzcz0idGl0bGUiIHN0eWxlPSJjbGVhcjogYm90aCI+PGEgaWQ9Im9wYXJjaGl2ZSI+PC9hPjYuoEFyY2hpdmluZyBtZWFzdXJlbWVudHMgKDxzcGFuIGNsYXNzPSJjb21tYW5kIj48c3Ryb25nPm9wYXJjaGl2ZTwvc3Ryb25nPjwvc3Bhbj4pPC9oMj4KKyAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICA8cD4KKwlUaGUgPHNwYW4gY2xhc3M9ImNvbW1hbmQiPjxzdHJvbmc+b3BhcmNoaXZlPC9zdHJvbmc+PC9zcGFuPiB1dGlsaXR5IGdlbmVyYXRlcyBhIGRpcmVjdG9yeSBwb3B1bGF0ZWQKKwl3aXRoIGV4ZWN1dGFibGUsIGRlYnVnLCBhbmQgb3Byb2ZpbGUgc2FtcGxlIGZpbGVzLiBUaGlzIGRpcmVjdG9yeSBjYW4gYmUKKwltb3ZlZCB0byBhbm90aGVyIG1hY2hpbmUgdmlhIDxzcGFuIGNsYXNzPSJjb21tYW5kIj48c3Ryb25nPnRhcjwvc3Ryb25nPjwvc3Bhbj4gYW5kIGFuYWx5emVkIHdpdGhvdXQKKwlmdXJ0aGVyIHVzZSBvZiB0aGUgZGF0YSBjb2xsZWN0aW9uIG1hY2hpbmUuCis8L3A+CisgICAgICAgICAgPHA+CisJVGhlIGZvbGxvd2luZyBjb21tYW5kIHdvdWxkIGNvbGxlY3QgdGhlIHNhbXBsZSBmaWxlcywgdGhlIGV4ZWN1dGFibGVzCisJYXNzb2NpYXRlZCB3aXRoIHRoZSBzYW1wbGUgZmlsZXMsIGFuZCB0aGUgZGVidWdpbmZvIGZpbGVzIGFzc29jaWF0ZWQKKwl3aXRoIHRoZSBleGVjdXRhYmxlcyBhbmQgY29weSB0aGVtIGludG8KKwk8Y29kZSBjbGFzcz0iZmlsZW5hbWUiPi90bXAvY3VycmVudF9kYXRhPC9jb2RlPjoKKzwvcD4KKyAgICAgICAgICA8dGFibGUgeG1sbnM9IiIgYm9yZGVyPSIwIiBzdHlsZT0iYmFja2dyb3VuZDogI0UwRTBFMDsiIHdpZHRoPSI5MCUiPgorICAgICAgICAgICAgPHRyPgorICAgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgICAgPHByZSBjbGFzcz0ic2NyZWVuIj4KKyMgb3BhcmNoaXZlIC1vIC90bXAvY3VycmVudF9kYXRhCis8L3ByZT4KKyAgICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgIDwvdHI+CisgICAgICAgICAgPC90YWJsZT4KKyAgICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0MiIgdGl0bGU9IjYuMS6gVXNhZ2Ugb2Ygb3BhcmNoaXZlIj4KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlcGFnZSI+CisgICAgICAgICAgICAgIDxkaXY+CisgICAgICAgICAgICAgICAgPGRpdj4KKyAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz0idGl0bGUiPjxhIGlkPSJvcGFyY2hpdmUtZGV0YWlscyI+PC9hPjYuMS6gVXNhZ2Ugb2YgPHNwYW4gY2xhc3M9ImNvbW1hbmQiPjxzdHJvbmc+b3BhcmNoaXZlPC9zdHJvbmc+PC9zcGFuPjwvaDM+CisgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgorICAgICAgICAgICAgICA8ZGw+CisgICAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRlcm0iPgorICAgICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLWhlbHAgLyAtPyAvIC0tdXNhZ2U8L2NvZGU+CisgICAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgICAgICA8ZGQ+CisgICAgICAgICAgICAgICAgICA8cD4KK1Nob3cgaGVscCBtZXNzYWdlLgorPC9wPgorICAgICAgICAgICAgICAgIDwvZGQ+CisgICAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRlcm0iPgorICAgICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLWV4Y2x1ZGUtZGVwZW5kZW50IC8gLXg8L2NvZGU+CisgICAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgICAgICA8ZGQ+CisgICAgICAgICAgICAgICAgICA8cD4KK0RvIG5vdCBpbmNsdWRlIGFwcGxpY2F0aW9uLXNwZWNpZmljIGltYWdlcyBmb3IgbGlicmFyaWVzLCBrZXJuZWwgbW9kdWxlcworYW5kIHRoZSBrZXJuZWwuIFRoaXMgb3B0aW9uIG9ubHkgbWFrZXMgc2Vuc2UgaWYgdGhlIHByb2ZpbGUgc2Vzc2lvbgordXNlZCAtLXNlcGFyYXRlLgorPC9wPgorICAgICAgICAgICAgICAgIDwvZGQ+CisgICAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRlcm0iPgorICAgICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLWltYWdlLXBhdGggLyAtcCBbcGF0aHNdPC9jb2RlPgorICAgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICAgICAgPGRkPgorICAgICAgICAgICAgICAgICAgPHA+CitDb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBhZGRpdGlvbmFsIHBhdGhzIHRvIHNlYXJjaCBmb3IgYmluYXJpZXMuCitUaGlzIGlzIG5lZWRlZCB0byBmaW5kIG1vZHVsZXMgaW4ga2VybmVscyAyLjYgYW5kIHVwd2FyZHMuCis8L3A+CisgICAgICAgICAgICAgICAgPC9kZD4KKyAgICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGVybSI+CisgICAgICAgICAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tcm9vdCAvIC1SIFtwYXRoXTwvY29kZT4KKyAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgICAgIDxkZD4KKyAgICAgICAgICAgICAgICAgIDxwPgorQSBwYXRoIHRvIGEgZmlsZXN5c3RlbSB0byBzZWFyY2ggZm9yIGFkZGl0aW9uYWwgYmluYXJpZXMuCis8L3A+CisgICAgICAgICAgICAgICAgPC9kZD4KKyAgICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGVybSI+CisgICAgICAgICAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tb3V0cHV0LWRpcmVjdG9yeSAvIC1vIFtkaXJlY3RvcnldPC9jb2RlPgorICAgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICAgICAgPGRkPgorICAgICAgICAgICAgICAgICAgPHA+CitPdXRwdXQgdG8gdGhlIGdpdmVuIGRpcmVjdG9yeS4gVGhlcmUgaXMgbm8gZGVmYXVsdC4gVGhpcyBtdXN0IGJlIHNwZWNpZmllZC4KKzwvcD4KKyAgICAgICAgICAgICAgICA8L2RkPgorICAgICAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXJtIj4KKyAgICAgICAgICAgICAgICAgICAgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1saXN0LWZpbGVzIC8gLWw8L2NvZGU+CisgICAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgICAgICA8ZGQ+CisgICAgICAgICAgICAgICAgICA8cD4KK09ubHkgbGlzdCB0aGUgZmlsZXMgdGhhdCB3b3VsZCBiZSBhcmNoaXZlZCwgZG9uJ3QgY29weSB0aGVtLgorPC9wPgorICAgICAgICAgICAgICAgIDwvZGQ+CisgICAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRlcm0iPgorICAgICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLXZlcmJvc2UgLyAtViBbb3B0aW9uc108L2NvZGU+CisgICAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgICAgICA8ZGQ+CisgICAgICAgICAgICAgICAgICA8cD4KK0dpdmUgdmVyYm9zZSBkZWJ1Z2dpbmcgb3V0cHV0LgorPC9wPgorICAgICAgICAgICAgICAgIDwvZGQ+CisgICAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRlcm0iPgorICAgICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLXZlcnNpb24gLyAtdjwvY29kZT4KKyAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgICAgIDxkZD4KKyAgICAgICAgICAgICAgICAgIDxwPgorU2hvdyB2ZXJzaW9uLgorPC9wPgorICAgICAgICAgICAgICAgIDwvZGQ+CisgICAgICAgICAgICAgIDwvZGw+CisgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgPC9kaXY+CisgICAgICAgIDxkaXYgY2xhc3M9InNlY3QxIiB0aXRsZT0iNy6gQ29udmVydGluZyBzYW1wbGUgZGF0YWJhc2UgZmlsZXMgKG9waW1wb3J0KSI+CisgICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KKyAgICAgICAgICAgIDxkaXY+CisgICAgICAgICAgICAgIDxkaXY+CisgICAgICAgICAgICAgICAgPGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj48YSBpZD0ib3BpbXBvcnQiPjwvYT43LqBDb252ZXJ0aW5nIHNhbXBsZSBkYXRhYmFzZSBmaWxlcyAoPHNwYW4gY2xhc3M9ImNvbW1hbmQiPjxzdHJvbmc+b3BpbXBvcnQ8L3N0cm9uZz48L3NwYW4+KTwvaDI+CisgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgPHA+CisJVGhpcyB1dGlsaXR5IGNvbnZlcnRzIHNhbXBsZSBkYXRhYmFzZSBmaWxlcyBmcm9tIGEgZm9yZWlnbiBiaW5hcnkgZm9ybWF0IChhYmkpIHRvCisJdGhlIG5hdGl2ZSBmb3JtYXQuIFRoaXMgaXMgdXNlZnVsIG9ubHkgd2hlbiBtb3Zpbmcgc2FtcGxlIGZpbGVzIGJldHdlZW4gaG9zdHMsCisJZm9yIGFuYWx5c2lzIG9uIHBsYXRmb3JtcyBvdGhlciB0aGFuIHRoZSBvbmUgdXNlZCBmb3IgY29sbGVjdGlvbi4gVGhlIGFiaSBmb3JtYXQKKwlvZiB0aGUgZmlsZSB0byBiZSBpbXBvcnRlZCBpcyBkZXNjcmliZWQgaW4gYSB0ZXh0IGZpbGUgbG9jYXRlZCBpbiA8Y29kZSBjbGFzcz0iZmlsZW5hbWUiPiRTRVNTSU9OX0RJUi9hYmk8L2NvZGU+LgorPC9wPgorICAgICAgICAgIDxwPgorCVRoZSBmb2xsb3dpbmcgY29tbWFuZCB3b3VsZCBjb252ZXJ0IHRoZSBpbnB1dCBzYW1wbGVzIGZpbGVzIHRvIHRoZQorCW91dHB1dCBzYW1wbGVzIGZpbGVzIHVzaW5nIHRoZSBnaXZlbiBhYmkgZmlsZSBhcyBhIGJpbmFyeSBkZXNjcmlwdGlvbgorCW9mIHRoZSBpbnB1dCBmaWxlIGFuZCB0aGUgY3VyZW50IHBsYXRmb3JtIGFiaSBhcyBhIGJpbmFyeSBkZXNjcmlwdGlvbgorCW9mIHRoZSBvdXRwdXQgZmlsZS4KKzwvcD4KKyAgICAgICAgICA8dGFibGUgeG1sbnM9IiIgYm9yZGVyPSIwIiBzdHlsZT0iYmFja2dyb3VuZDogI0UwRTBFMDsiIHdpZHRoPSI5MCUiPgorICAgICAgICAgICAgPHRyPgorICAgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgICAgPHByZSBjbGFzcz0ic2NyZWVuIj4KKyMgb3BpbXBvcnQgLWEgL3Zhci9saWIvb3Byb2ZpbGUvYWJpIC1vIC90bXAvY3VycmVudC8uLi4vR0xPQkFMX1BPV0VSX0VWRU5UUy4yMDAwMDAuMS5hbGwuYWxsLmFsbCAvdmFyL2xpYi8uLi4vbXByaW1lL0dMT0JBTF9QT1dFUl9FVkVOVFMuMjAwMDAwLjEuYWxsLmFsbC5hbGwKKzwvcHJlPgorICAgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgPC90cj4KKyAgICAgICAgICA8L3RhYmxlPgorICAgICAgICAgIDxkaXYgY2xhc3M9InNlY3QyIiB0aXRsZT0iNy4xLqBVc2FnZSBvZiBvcGltcG9ydCI+CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgorICAgICAgICAgICAgICA8ZGl2PgorICAgICAgICAgICAgICAgIDxkaXY+CisgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9InRpdGxlIj48YSBpZD0ib3BpbXBvcnQtZGV0YWlscyI+PC9hPjcuMS6gVXNhZ2Ugb2YgPHNwYW4gY2xhc3M9ImNvbW1hbmQiPjxzdHJvbmc+b3BpbXBvcnQ8L3N0cm9uZz48L3NwYW4+PC9oMz4KKyAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+CisgICAgICAgICAgICAgIDxkbD4KKyAgICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGVybSI+CisgICAgICAgICAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0taGVscCAvIC0/IC8gLS11c2FnZTwvY29kZT4KKyAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgICAgIDxkZD4KKyAgICAgICAgICAgICAgICAgIDxwPgorU2hvdyBoZWxwIG1lc3NhZ2UuCis8L3A+CisgICAgICAgICAgICAgICAgPC9kZD4KKyAgICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGVybSI+CisgICAgICAgICAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tYWJpIC8gLWEgW2ZpbGVuYW1lXTwvY29kZT4KKyAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgICAgIDxkZD4KKyAgICAgICAgICAgICAgICAgIDxwPgorSW5wdXQgYWJpIGZpbGUgZGVzY3JpcHRpb24gbG9jYXRpb24uCis8L3A+CisgICAgICAgICAgICAgICAgPC9kZD4KKyAgICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGVybSI+CisgICAgICAgICAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tZm9yY2UgLyAtZjwvY29kZT4KKyAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgICAgIDxkZD4KKyAgICAgICAgICAgICAgICAgIDxwPgorRm9yY2UgY29udmVyc2lvbiBldmVuIGlmIHRoZSBpbnB1dCBhbmQgb3V0cHV0IGFiaSBhcmUgaWRlbnRpY2FsLgorPC9wPgorICAgICAgICAgICAgICAgIDwvZGQ+CisgICAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRlcm0iPgorICAgICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLW91dHB1dCAvIC1vIFtmaWxlbmFtZV08L2NvZGU+CisgICAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgICAgICA8ZGQ+CisgICAgICAgICAgICAgICAgICA8cD4KK1NwZWNpZnkgdGhlIG91dHB1dCBmaWxlbmFtZS4gSWYgdGhlIG91dHB1dCBmaWxlIGFscmVhZHkgZXhpc3RzLCB0aGUgZmlsZSBpcworbm90IG92ZXJ3cml0dGVuIGJ1dCBkYXRhIGFyZSBhY2N1bXVsYXRlZCBpbi4gU2FtcGxlIGZpbGVuYW1lIGFyZSBpbmZvcm1hdGl2ZQorZm9yIHBvc3QgcHJvZmlsZSB0b29scyBhbmQgbXVzdCBiZSBrZXB0IGlkZW50aWNhbCwgaW4gb3RoZXIgd29yZCB0aGUgcGF0aG5hbWUKK2Zyb20gdGhlIGZpcnN0IHBhdGggY29tcG9uZW50IGNvbnRhaW5pbmcgYSAneycgbXVzdCBiZSBrZXB0IGFzIGl0IGluIHRoZQorb3V0cHV0IGZpbGVuYW1lLgorPC9wPgorICAgICAgICAgICAgICAgIDwvZGQ+CisgICAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRlcm0iPgorICAgICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tLXZlcmJvc2UgLyAtVjwvY29kZT4KKyAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgICAgIDxkZD4KKyAgICAgICAgICAgICAgICAgIDxwPgorR2l2ZSB2ZXJib3NlIGRlYnVnZ2luZyBvdXRwdXQuCis8L3A+CisgICAgICAgICAgICAgICAgPC9kZD4KKyAgICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGVybSI+CisgICAgICAgICAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJvcHRpb24iPi0tdmVyc2lvbiAvIC12PC9jb2RlPgorICAgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICAgICAgPGRkPgorICAgICAgICAgICAgICAgICAgPHA+CitTaG93IHZlcnNpb24uCis8L3A+CisgICAgICAgICAgICAgICAgPC9kZD4KKyAgICAgICAgICAgICAgPC9kbD4KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgIDwvZGl2PgorICAgICAgICA8L2Rpdj4KKyAgICAgIDwvZGl2PgorICAgICAgPGRpdiBjbGFzcz0iY2hhcHRlciIgdGl0bGU9IkNoYXB0ZXKgNS6gSW50ZXJwcmV0aW5nIHByb2ZpbGluZyByZXN1bHRzIj4KKyAgICAgICAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KKyAgICAgICAgICA8ZGl2PgorICAgICAgICAgICAgPGRpdj4KKyAgICAgICAgICAgICAgPGgyIGNsYXNzPSJ0aXRsZSI+PGEgaWQ9ImludGVycHJldGluZyI+PC9hPkNoYXB0ZXKgNS6gSW50ZXJwcmV0aW5nIHByb2ZpbGluZyByZXN1bHRzPC9oMj4KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgIDwvZGl2PgorICAgICAgICA8L2Rpdj4KKyAgICAgICAgPGRpdiBjbGFzcz0idG9jIj4KKyAgICAgICAgICA8cD4KKyAgICAgICAgICAgIDxiPlRhYmxlIG9mIENvbnRlbnRzPC9iPgorICAgICAgICAgIDwvcD4KKyAgICAgICAgICA8ZGw+CisgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MSI+CisgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2lycS1sYXRlbmN5Ij4xLiBQcm9maWxpbmcgaW50ZXJydXB0IGxhdGVuY3k8L2E+CisgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MSI+CisgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2tlcm5lbC1wcm9maWxpbmciPjIuIEtlcm5lbCBwcm9maWxpbmc8L2E+CisgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICA8ZGQ+CisgICAgICAgICAgICAgIDxkbD4KKyAgICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDIiPgorICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjaXJxLW1hc2tpbmciPjIuMS4gSW50ZXJydXB0IG1hc2tpbmc8L2E+CisgICAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDIiPgorICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjaWRsZSI+Mi4yLiBJZGxlIHRpbWU8L2E+CisgICAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDIiPgorICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIja2VybmVsLW1vZHVsZXMiPjIuMy4gUHJvZmlsaW5nIGtlcm5lbCBtb2R1bGVzPC9hPgorICAgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICAgIDwvZGw+CisgICAgICAgICAgICA8L2RkPgorICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDEiPgorICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNpbnRlcnByZXRpbmctY2FsbGdyYXBoIj4zLiBJbnRlcnByZXRpbmcgY2FsbC1ncmFwaCBwcm9maWxlczwvYT4KKyAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QxIj4KKyAgICAgICAgICAgICAgICA8YSBocmVmPSIjZGVidWctaW5mbyI+NC4gSW5hY2N1cmFjaWVzIGluIGFubm90YXRlZCBzb3VyY2U8L2E+CisgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICA8ZGQ+CisgICAgICAgICAgICAgIDxkbD4KKyAgICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDIiPgorICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZWZmZWN0LW9mLW9wdGltaXphdGlvbnMiPjQuMS4gU2lkZSBlZmZlY3RzIG9mIG9wdGltaXphdGlvbnM8L2E+CisgICAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDIiPgorICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjcHJvbG9ndWVzIj40LjIuIFByb2xvZ3VlcyBhbmQgZXBpbG9ndWVzPC9hPgorICAgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QyIj4KKyAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2lubGluZWQtZnVuY3Rpb24iPjQuMy4gSW5saW5lZCBmdW5jdGlvbnM8L2E+CisgICAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDIiPgorICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjd3JvbmctbGluZW5yLWluZm8iPjQuNC4gSW5hY2N1cmFjeSBpbiBsaW5lIG51bWJlciBpbmZvcm1hdGlvbjwvYT4KKyAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgICA8L2RsPgorICAgICAgICAgICAgPC9kZD4KKyAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QxIj4KKyAgICAgICAgICAgICAgICA8YSBocmVmPSIjc3ltYm9sLXdpdGhvdXQtZGVidWctaW5mbyI+NS4gQXNzZW1ibHkgZnVuY3Rpb25zPC9hPgorICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDEiPgorICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNvdmVybGFwcGluZy1zeW1ib2xzIj42LiBPdmVybGFwcGluZyBzeW1ib2xzIGluIEpJVGVkIGNvZGU8L2E+CisgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MSI+CisgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2hpZGRlbi1jb3N0Ij43LiBPdGhlciBkaXNjcmVwYW5jaWVzPC9hPgorICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICA8L2R0PgorICAgICAgICAgIDwvZGw+CisgICAgICAgIDwvZGl2PgorICAgICAgICA8cD4KK1RoZSBzdGFuZGFyZCBjYXZlYXRzIG9mIHByb2ZpbGluZyBhcHBseSBpbiBpbnRlcnByZXRpbmcgdGhlIHJlc3VsdHMgZnJvbSBPUHJvZmlsZToKK3Byb2ZpbGUgcmVhbGlzdGljIHNpdHVhdGlvbnMsIHByb2ZpbGUgZGlmZmVyZW50IHNjZW5hcmlvcywgcHJvZmlsZQorZm9yIGFzIGxvbmcgYXMgYSB0aW1lIGFzIHBvc3NpYmxlLCBhdm9pZCBzeXN0ZW0tc3BlY2lmaWMgYXJ0aWZhY3RzLCBkb24ndCB0cnVzdAordGhlIHByb2ZpbGUgZGF0YSB0b28gbXVjaC4gQWxzbyBiZWFyIGluIG1pbmQgdGhlIGNvbW1lbnRzIG9uIHRoZSBwZXJmb3JtYW5jZQorY291bnRlcnMgYWJvdmUgLSB5b3UgPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+Y2Fubm90PC9lbT48L3NwYW4+IHJlbHkgb24gdG90YWxseSBhY2N1cmF0ZQoraW5zdHJ1Y3Rpb24tbGV2ZWwgcHJvZmlsaW5nLiAgSG93ZXZlciwgZm9yIGFsbW9zdCBhbGwgY2lyY3Vtc3RhbmNlcyB0aGUgZGF0YQorY2FuIGJlIHVzZWZ1bC4gSWRlYWxseSBhIHV0aWxpdHkgc3VjaCBhcyBJbnRlbCdzIFZUVU5FIHdvdWxkIGJlIGF2YWlsYWJsZSB0bworYWxsb3cgY2FyZWZ1bCBpbnN0cnVjdGlvbi1sZXZlbCBhbmFseXNpczsgZ28gaGFzc2xlIEludGVsIGZvciB0aGlzLCBub3QgbWUgOykKKzwvcD4KKyAgICAgICAgPGRpdiBjbGFzcz0ic2VjdDEiIHRpdGxlPSIxLqBQcm9maWxpbmcgaW50ZXJydXB0IGxhdGVuY3kiPgorICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlcGFnZSI+CisgICAgICAgICAgICA8ZGl2PgorICAgICAgICAgICAgICA8ZGl2PgorICAgICAgICAgICAgICAgIDxoMiBjbGFzcz0idGl0bGUiIHN0eWxlPSJjbGVhcjogYm90aCI+PGEgaWQ9ImlycS1sYXRlbmN5Ij48L2E+MS6gUHJvZmlsaW5nIGludGVycnVwdCBsYXRlbmN5PC9oMj4KKyAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICA8cD4KK1RoaXMgaXMgYW4gZXhhbXBsZSBvZiBob3cgdGhlIGxhdGVuY3kgb2YgZGVsaXZlcnkgb2YgcHJvZmlsaW5nIGludGVycnVwdHMKK2NhbiBpbXBhY3QgdGhlIHJlbGlhYmlsaXR5IG9mIHRoZSBwcm9maWxpbmcgZGF0YS4gVGhpcyBpcyBwcmV0dHkgbXVjaCBhIAord29yc3QtY2FzZS1zY2VuYXJpbyBleGFtcGxlOiB0aGVzZSBwcm9ibGVtcyBhcmUgZmFpcmx5IHJhcmUuCis8L3A+CisgICAgICAgICAgPHRhYmxlIHhtbG5zPSIiIGJvcmRlcj0iMCIgc3R5bGU9ImJhY2tncm91bmQ6ICNFMEUwRTA7IiB3aWR0aD0iOTAlIj4KKyAgICAgICAgICAgIDx0cj4KKyAgICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICAgIDxwcmUgY2xhc3M9InNjcmVlbiI+Citkb3VibGUgZnVuKGRvdWJsZSBhLCBkb3VibGUgYiwgZG91YmxlIGMpCit7CisgZG91YmxlIHJlc3VsdCA9IDA7CisgZm9yIChpbnQgaSA9IDAgOyBpICZsdDsgMTAwMDA7ICsraSkgeworICByZXN1bHQgKz0gYTsKKyAgcmVzdWx0ICo9IGI7CisgIHJlc3VsdCAvPSBjOworIH0KKyByZXR1cm4gcmVzdWx0OworfQorPC9wcmU+CisgICAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICA8L3RyPgorICAgICAgICAgIDwvdGFibGU+CisgICAgICAgICAgPHA+CitIZXJlIHRoZSBsYXN0IGluc3RydWN0aW9uIG9mIHRoZSBsb29wIGlzIHZlcnkgY29zdGx5LCBhbmQgeW91IHdvdWxkIGV4cGVjdCB0aGUgcmVzdWx0CityZWZsZWN0aW5nIHRoYXQgLSBidXQgKGN1dHRpbmcgdGhlIGluc3RydWN0aW9ucyBpbnNpZGUgdGhlIGxvb3ApOgorPC9wPgorICAgICAgICAgIDx0YWJsZSB4bWxucz0iIiBib3JkZXI9IjAiIHN0eWxlPSJiYWNrZ3JvdW5kOiAjRTBFMEUwOyIgd2lkdGg9IjkwJSI+CisgICAgICAgICAgICA8dHI+CisgICAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgICA8cHJlIGNsYXNzPSJzY3JlZW4iPgorJCBvcGFubm90YXRlIC1hIC10IDEwIC4vYS5vdXQKKworICAgICA4OCAxNS4zOCUgOiA4MDQ4MzM3OiAgICAgICBmYWRkICAgJXN0KDMpLCVzdAorICAgICA0OCA4LjM5MSUgOiA4MDQ4MzM5OiAgICAgICBmbXVsICAgJXN0KDIpLCVzdAorICAgICA2OCAxMS44OCUgOiA4MDQ4MzNiOiAgICAgICBmZGl2ICAgJXN0KDEpLCVzdAorICAgIDM2OCA2NC4zMyUgOiA4MDQ4MzNkOiAgICAgICBpbmMgICAgJWVheAorICAgICAgICAgICAgICAgOiA4MDQ4MzNlOiAgICAgICBjbXAgICAgJDB4MjcwZiwlZWF4CisgICAgICAgICAgICAgICA6IDgwNDgzNDM6ICAgICAgIGpsZSAgICA4MDQ4MzM3Cis8L3ByZT4KKyAgICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgIDwvdHI+CisgICAgICAgICAgPC90YWJsZT4KKyAgICAgICAgICA8cD4KK1RoZSBwcm9ibGVtIGNvbWVzIGZyb20gdGhlIHg4NiBoYXJkd2FyZTsgd2hlbiB0aGUgY291bnRlciBvdmVyZmxvd3MgdGhlIElSUQoraXMgYXNzZXJ0ZWQgYnV0IHRoZSBoYXJkd2FyZSBoYXMgZmVhdHVyZXMgdGhhdCBjYW4gZGVsYXkgdGhlIE5NSSBpbnRlcnJ1cHQ6Cit4ODYgaGFyZHdhcmUgaXMgc3luY2hyb25vdXMgKGkuZS4gY2Fubm90IGludGVycnVwdCBkdXJpbmcgYW4gaW5zdHJ1Y3Rpb24pOwordGhlcmUgaXMgYWxzbyBhIGxhdGVuY3kgd2hlbiB0aGUgSVJRIGlzIGFzc2VydGVkLCBhbmQgdGhlIG11bHRpcGxlCitleGVjdXRpb24gdW5pdHMgYW5kIHRoZSBvdXQtb2Ytb3JkZXIgbW9kZWwgb2YgbW9kZXJuIHg4NiBDUFVzIGFsc28gY2F1c2VzCitwcm9ibGVtcy4gVGhpcyBpcyB0aGUgc2FtZSBmdW5jdGlvbiwgd2l0aCBhbm5vdGF0aW9uIDoKKzwvcD4KKyAgICAgICAgICA8dGFibGUgeG1sbnM9IiIgYm9yZGVyPSIwIiBzdHlsZT0iYmFja2dyb3VuZDogI0UwRTBFMDsiIHdpZHRoPSI5MCUiPgorICAgICAgICAgICAgPHRyPgorICAgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgICAgPHByZSBjbGFzcz0ic2NyZWVuIj4KKyQgb3Bhbm5vdGF0ZSAtcyAtdCAxMCAuL2Eub3V0CisKKyAgICAgICAgICAgICAgIDpkb3VibGUgZnVuKGRvdWJsZSBhLCBkb3VibGUgYiwgZG91YmxlIGMpCisgICAgICAgICAgICAgICA6eyAvKiBfWjNmdW5kZGQgdG90YWw6ICAgICA1NzIgMTAwLjAlICovCisgICAgICAgICAgICAgICA6IGRvdWJsZSByZXN1bHQgPSAwOworICAgIDM2OCA2NC4zMyUgOiBmb3IgKGludCBpID0gMCA7IGkgJmx0OyAxMDAwMDsgKytpKSB7CisgICAgIDg4IDE1LjM4JSA6ICByZXN1bHQgKz0gYTsKKyAgICAgNDggOC4zOTElIDogIHJlc3VsdCAqPSBiOworICAgICA2OCAxMS44OCUgOiAgcmVzdWx0IC89IGM7CisgICAgICAgICAgICAgICA6IH0KKyAgICAgICAgICAgICAgIDogcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgICAgIDp9Cis8L3ByZT4KKyAgICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgIDwvdHI+CisgICAgICAgICAgPC90YWJsZT4KKyAgICAgICAgICA8cD4KK1RoZSBjb25jbHVzaW9uOiBkb24ndCB0cnVzdCBzYW1wbGVzIGNvbWluZyBhdCB0aGUgZW5kIG9mIGEgbG9vcCwKK3BhcnRpY3VsYXJseSBpZiB0aGUgbGFzdCBpbnN0cnVjdGlvbiBnZW5lcmF0ZWQgYnkgdGhlIGNvbXBpbGVyIGlzIGNvc3RseS4gVGhpcworY2FzZSBjYW4gYWxzbyBvY2N1ciBmb3IgYnJhbmNoZXMuIEFsd2F5cyBiZWFyIGluIG1pbmQgdGhhdCBzYW1wbGVzCitjYW4gYmUgZGVsYXllZCBieSBhIGZldyBjeWNsZXMgZnJvbSBpdHMgcmVhbCBwb3NpdGlvbi4gVGhhdCdzIGEgaGFyZHdhcmUKK3Byb2JsZW0gYW5kIE9Qcm9maWxlIGNhbiBkbyBub3RoaW5nIGFib3V0IGl0LgorPC9wPgorICAgICAgICA8L2Rpdj4KKyAgICAgICAgPGRpdiBjbGFzcz0ic2VjdDEiIHRpdGxlPSIyLqBLZXJuZWwgcHJvZmlsaW5nIj4KKyAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgorICAgICAgICAgICAgPGRpdj4KKyAgICAgICAgICAgICAgPGRpdj4KKyAgICAgICAgICAgICAgICA8aDIgY2xhc3M9InRpdGxlIiBzdHlsZT0iY2xlYXI6IGJvdGgiPjxhIGlkPSJrZXJuZWwtcHJvZmlsaW5nIj48L2E+Mi6gS2VybmVsIHByb2ZpbGluZzwvaDI+CisgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgPGRpdiBjbGFzcz0ic2VjdDIiIHRpdGxlPSIyLjEuoEludGVycnVwdCBtYXNraW5nIj4KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlcGFnZSI+CisgICAgICAgICAgICAgIDxkaXY+CisgICAgICAgICAgICAgICAgPGRpdj4KKyAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz0idGl0bGUiPjxhIGlkPSJpcnEtbWFza2luZyI+PC9hPjIuMS6gSW50ZXJydXB0IG1hc2tpbmc8L2gzPgorICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgPHA+CitPUHJvZmlsZSB1c2VzIG5vbi1tYXNrYWJsZSBpbnRlcnJ1cHRzIChOTUkpIG9uIHRoZSBQNiBnZW5lcmF0aW9uLCBQZW50aXVtIDQsCitBdGhsb24sIE9wdGVyb24sIFBoZW5vbSwgYW5kIFR1cmlvbiBwcm9jZXNzb3JzLiBUaGVzZSBpbnRlcnJ1cHRzIGNhbiBvY2N1ciBldmVuIGluIHNlY3Rpb24gb2YgdGhlCitMaW51eCB3aGVyZSBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCwgYWxsb3dpbmcgY29sbGVjdGlvbiBvZiBzYW1wbGVzIGluIHZpcnR1YWxseQorYWxsIGV4ZWN1dGFibGUgY29kZS4gIFRoZSBSVEMsIHRpbWVyIGludGVycnVwdCBtb2RlLCBhbmQgSXRhbml1bSAyIGNvbGxlY3Rpb24gbWVjaGFuaXNtcwordXNlIG1hc2thYmxlIGludGVycnVwdHMuIFRodXMsIHRoZSBSVEMgYW5kIEl0YW5pdW0gMiBkYXRhIGNvbGxlY3Rpb24gbWVjaGFuaXNtIGhhdmUgInNhbXBsZQorc2hhZG93cyIsIG9yIGJsaW5kIHNwb3RzOiByZWdpb25zIHdoZXJlIG5vIHNhbXBsZXMgd2lsbCBiZSBjb2xsZWN0ZWQuIFR5cGljYWxseSwgdGhlIHNhbXBsZXMKK3dpbGwgYmUgYXR0cmlidXRlZCB0byB0aGUgY29kZSBpbW1lZGlhdGVseSBhZnRlciB0aGUgaW50ZXJydXB0cyBhcmUgcmUtZW5hYmxlZC4KKzwvcD4KKyAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0MiIgdGl0bGU9IjIuMi6gSWRsZSB0aW1lIj4KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlcGFnZSI+CisgICAgICAgICAgICAgIDxkaXY+CisgICAgICAgICAgICAgICAgPGRpdj4KKyAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz0idGl0bGUiPjxhIGlkPSJpZGxlIj48L2E+Mi4yLqBJZGxlIHRpbWU8L2gzPgorICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgPHA+CitZb3VyIGtlcm5lbCBpcyBsaWtlbHkgdG8gc3VwcG9ydCBoYWx0aW5nIHRoZSBwcm9jZXNzb3Igd2hlbiBhIENQVSBpcyBpZGxlLiBBcwordGhlIHR5cGljYWwgaGFyZHdhcmUgZXZlbnRzIGxpa2UgPGNvZGUgY2xhc3M9ImNvbnN0YW50Ij5DUFVfQ0xLX1VOSEFMVEVEPC9jb2RlPiBkbyBub3QKK2NvdW50IHdoZW4gdGhlIENQVSBpcyBoYWx0ZWQsIHRoZSBrZXJuZWwgcHJvZmlsZSB3aWxsIG5vdCByZWZsZWN0IHRoZSBhY3R1YWwKK2Ftb3VudCBvZiB0aW1lIHNwZW50IGlkbGUuIFlvdSBjYW4gY2hhbmdlIHRoaXMgYmVoYXZpb3VyIGJ5IGJvb3Rpbmcgd2l0aAordGhlIDxjb2RlIGNsYXNzPSJvcHRpb24iPmlkbGU9cG9sbDwvY29kZT4gb3B0aW9uLCB3aGljaCB1c2VzIGEgZGlmZmVyZW50IGlkbGUgcm91dGluZS4gVGhpcword2lsbCBhcHBlYXIgYXMgPGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5wb2xsX2lkbGUoKTwvY29kZT4gaW4geW91ciBrZXJuZWwgcHJvZmlsZS4KKzwvcD4KKyAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0MiIgdGl0bGU9IjIuMy6gUHJvZmlsaW5nIGtlcm5lbCBtb2R1bGVzIj4KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlcGFnZSI+CisgICAgICAgICAgICAgIDxkaXY+CisgICAgICAgICAgICAgICAgPGRpdj4KKyAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz0idGl0bGUiPjxhIGlkPSJrZXJuZWwtbW9kdWxlcyI+PC9hPjIuMy6gUHJvZmlsaW5nIGtlcm5lbCBtb2R1bGVzPC9oMz4KKyAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIDxwPgorT1Byb2ZpbGUgcHJvZmlsZXMga2VybmVsIG1vZHVsZXMgYnkgZGVmYXVsdC4gSG93ZXZlciwgdGhlcmUgYXJlIGEgY291cGxlIG9mIHByb2JsZW1zCit5b3UgbWF5IGhhdmUgd2hlbiB0cnlpbmcgdG8gZ2V0IHJlc3VsdHMuIEZpcnN0LCB5b3UgbWF5IGhhdmUgYm9vdGVkIHZpYSBhbiBpbml0cmQ7Cit0aGlzIG1lYW5zIHRoYXQgdGhlIGFjdHVhbCBwYXRoIGZvciB0aGUgbW9kdWxlIGJpbmFyaWVzIGNhbm5vdCBiZSBkZXRlcm1pbmVkIGF1dG9tYXRpY2FsbHkuCitUbyBnZXQgYXJvdW5kIHRoaXMsIHlvdSBjYW4gdXNlIHRoZSA8Y29kZSBjbGFzcz0ib3B0aW9uIj4tcDwvY29kZT4gb3B0aW9uIHRvIHRoZSBwcm9maWxpbmcgdG9vbHMKK3RvIHNwZWNpZnkgd2hlcmUgdG8gbG9vayBmb3IgdGhlIGtlcm5lbCBtb2R1bGVzLgorPC9wPgorICAgICAgICAgICAgPHA+CitJbiAyLjYsIHRoZSBpbmZvcm1hdGlvbiBvbiB3aGVyZSBrZXJuZWwgbW9kdWxlIGJpbmFyaWVzIGFyZSBsb2NhdGVkIGhhcyBiZWVuIHJlbW92ZWQuCitUaGlzIG1lYW5zIE9Qcm9maWxlIG5lZWRzIGd1aWRpbmcgd2l0aCB0aGUgPGNvZGUgY2xhc3M9Im9wdGlvbiI+LXA8L2NvZGU+IG9wdGlvbiB0byBmaW5kIHlvdXIKK21vZHVsZXMuIE5vcm1hbGx5LCB5b3UgY2FuIGp1c3QgdXNlIHlvdXIgc3RhbmRhcmQgbW9kdWxlIHRvcC1sZXZlbCBkaXJlY3RvcnkgZm9yIHRoaXMuCitOb3RlIHRoYXQgZHVlIHRvIHRoaXMgcHJvYmxlbSwgT1Byb2ZpbGUgY2Fubm90IGNoZWNrIHRoYXQgdGhlIG1vZGlmaWNhdGlvbiB0aW1lcyBtYXRjaDsKK2l0IGlzIHlvdXIgcmVzcG9uc2liaWxpdHkgdG8gbWFrZSBzdXJlIHlvdSBkbyBub3QgbW9kaWZ5IGEgYmluYXJ5IGFmdGVyIGEgcHJvZmlsZQoraGFzIGJlZW4gY3JlYXRlZC4KKzwvcD4KKyAgICAgICAgICAgIDxwPgorSWYgeW91IGhhdmUgcnVuIDxzcGFuIGNsYXNzPSJjb21tYW5kIj48c3Ryb25nPmluc21vZDwvc3Ryb25nPjwvc3Bhbj4gb3IgPHNwYW4gY2xhc3M9ImNvbW1hbmQiPjxzdHJvbmc+bW9kcHJvYmU8L3N0cm9uZz48L3NwYW4+IHRvIGluc2VydCBhIG1vZHVsZQoraW4gYSBwYXJ0aWN1bGFyIGRpcmVjdG9yeSwgaXQgaXMgaW1wb3J0YW50IHRoYXQgeW91IHNwZWNpZnkgdGhpcyBkaXJlY3Rvcnkgd2l0aCB0aGUgCis8Y29kZSBjbGFzcz0ib3B0aW9uIj4tcDwvY29kZT4gb3B0aW9uIGZpcnN0LCBzbyB0aGF0IGl0IG92ZXItcmlkZXMgYW4gb2xkZXIgbW9kdWxlIGJpbmFyeSB0aGF0IG1pZ2h0CitleGlzdCBpbiBvdGhlciBkaXJlY3RvcmllcyB5b3UndmUgc3BlY2lmaWVkIHdpdGggPGNvZGUgY2xhc3M9Im9wdGlvbiI+LXA8L2NvZGU+LiBJdCBpcyB1cCB0byB5b3UKK3RvIG1ha2Ugc3VyZSB0aGF0IHRoZXNlIHZhbHVlcyBhcmUgY29ycmVjdDogMi42IGtlcm5lbHMgc2ltcGx5IGRvIG5vdCBwcm92aWRlIGVub3VnaAoraW5mb3JtYXRpb24gZm9yIE9Qcm9maWxlIHRvIGdldCB0aGlzIGluZm9ybWF0aW9uLgorPC9wPgorICAgICAgICAgIDwvZGl2PgorICAgICAgICA8L2Rpdj4KKyAgICAgICAgPGRpdiBjbGFzcz0ic2VjdDEiIHRpdGxlPSIzLqBJbnRlcnByZXRpbmcgY2FsbC1ncmFwaCBwcm9maWxlcyI+CisgICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KKyAgICAgICAgICAgIDxkaXY+CisgICAgICAgICAgICAgIDxkaXY+CisgICAgICAgICAgICAgICAgPGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj48YSBpZD0iaW50ZXJwcmV0aW5nLWNhbGxncmFwaCI+PC9hPjMuoEludGVycHJldGluZyBjYWxsLWdyYXBoIHByb2ZpbGVzPC9oMj4KKyAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICA8cD4KK1NvbWV0aW1lcyB0aGUgcmVzdWx0cyBmcm9tIGNhbGwtZ3JhcGggcHJvZmlsZXMgbWF5IGJlIGRpZmZlcmVudCB0byB3aGF0Cit5b3UgZXhwZWN0IHRvIHNlZS4gVGhlIGZpcnN0IHRoaW5nIHRvIGNoZWNrIGlzIHdoZXRoZXIgdGhlIHRhcmdldAorYmluYXJpZXMgd2hlcmUgY29tcGlsZWQgd2l0aCBmcmFtZSBwb2ludGVycyBlbmFibGVkIChpZiB0aGUgYmluYXJ5IHdhcworY29tcGlsZWQgdXNpbmcgPHNwYW4gY2xhc3M9ImNvbW1hbmQiPjxzdHJvbmc+Z2NjPC9zdHJvbmc+PC9zcGFuPidzCis8Y29kZSBjbGFzcz0ib3B0aW9uIj4tZm9taXQtZnJhbWUtcG9pbnRlcjwvY29kZT4gb3B0aW9uLCB5b3Ugd2lsbCBub3QgZ2V0CittZWFuaW5nZnVsIHJlc3VsdHMpLiBOb3RlIHRoYXQgYXMgb2YgdGhpcyB3cml0aW5nLCB0aGUgR0NDIGRldmVsb3BlcnMKK3BsYW4gdG8gZGlzYWJsZSBmcmFtZSBwb2ludGVycyBieSBkZWZhdWx0LiBUaGUgTGludXgga2VybmVsIGlzIGJ1aWx0Cit3aXRob3V0IGZyYW1lIHBvaW50ZXJzIGJ5IGRlZmF1bHQ7IHRoZXJlIGlzIGEgY29uZmlndXJhdGlvbiBvcHRpb24geW91CitjYW4gdXNlIHRvIHR1cm4gaXQgb24gdW5kZXIgdGhlICJLZXJuZWwgSGFja2luZyIgbWVudS4KKzwvcD4KKyAgICAgICAgICA8cD4KK09mdGVuIHlvdSBtYXkgc2VlIGEgY2FsbGVyIG9mIGEgZnVuY3Rpb24gdGhhdCBkb2VzIG5vdCBhY3R1YWxseSBkaXJlY3RseQorY2FsbCB0aGUgZnVuY3Rpb24geW91J3JlIGxvb2tpbmcgYXQgKGUuZy4gaWYgPGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5hKCk8L2NvZGU+CitjYWxscyA8Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmIoKTwvY29kZT4sIHdoaWNoIGluIHR1cm4gY2FsbHMKKzxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+YygpPC9jb2RlPiwgeW91IG1heSBzZWUgYW4gZW50cnkgZm9yCis8Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmEoKS0mZ3Q7YygpPC9jb2RlPikuICBXaGF0J3MgYWN0dWFsbHkgb2NjdXJyaW5nIGlzIHRoYXQgd2UKK2FyZSB0YWtpbmcgc2FtcGxlcyBhdCB0aGUgdmVyeSBzdGFydCAob3IgdGhlIHZlcnkgZW5kKSBvZgorPGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5jKCk8L2NvZGU+OyBhdCB0aGVzZSBmZXcgaW5zdHJ1Y3Rpb25zLCB3ZSBoYXZlbid0IHlldAorY3JlYXRlZCB0aGUgbmV3IGZ1bmN0aW9uJ3MgZnJhbWUsIHNvIGl0IGFwcGVhcnMgYXMgaWYKKzxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+YSgpPC9jb2RlPiBpcyBjYWxsaW5nIGRpcmVjdGx5IGludG8KKzxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+YygpPC9jb2RlPi4gQmUgY2FyZWZ1bCBub3QgdG8gYmUgbWlzbGVkIGJ5IHRoZXNlCitlbnRyaWVzLgorPC9wPgorICAgICAgICAgIDxwPgorTGlrZSB0aGUgcmVzdCBvZiBPUHJvZmlsZSwgY2FsbC1ncmFwaCBwcm9maWxpbmcgdXNlcyBhIHN0YXRpc3RpY2FsCithcHByb2FjaDsgdGhpcyBtZWFucyB0aGF0IHNvbWV0aW1lcyBhIGJhY2t0cmFjZSBzYW1wbGUgaXMgdHJ1bmNhdGVkLCBvcgorZXZlbiBwYXJ0aWFsbHkgd3JvbmcuIEJlYXIgdGhpcyBpbiBtaW5kIHdoZW4gZXhhbWluaW5nIHJlc3VsdHMuCis8L3A+CisgICAgICAgIDwvZGl2PgorICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0MSIgdGl0bGU9IjQuoEluYWNjdXJhY2llcyBpbiBhbm5vdGF0ZWQgc291cmNlIj4KKyAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgorICAgICAgICAgICAgPGRpdj4KKyAgICAgICAgICAgICAgPGRpdj4KKyAgICAgICAgICAgICAgICA8aDIgY2xhc3M9InRpdGxlIiBzdHlsZT0iY2xlYXI6IGJvdGgiPjxhIGlkPSJkZWJ1Zy1pbmZvIj48L2E+NC6gSW5hY2N1cmFjaWVzIGluIGFubm90YXRlZCBzb3VyY2U8L2gyPgorICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgIDwvZGl2PgorICAgICAgICAgIDxkaXYgY2xhc3M9InNlY3QyIiB0aXRsZT0iNC4xLqBTaWRlIGVmZmVjdHMgb2Ygb3B0aW1pemF0aW9ucyI+CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgorICAgICAgICAgICAgICA8ZGl2PgorICAgICAgICAgICAgICAgIDxkaXY+CisgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9InRpdGxlIj48YSBpZD0iZWZmZWN0LW9mLW9wdGltaXphdGlvbnMiPjwvYT40LjEuoFNpZGUgZWZmZWN0cyBvZiBvcHRpbWl6YXRpb25zPC9oMz4KKyAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIDxwPgorVGhlIGNvbXBpbGVyIGNhbiBpbnRyb2R1Y2Ugc29tZSBwaXRmYWxscyBpbiB0aGUgYW5ub3RhdGVkIHNvdXJjZSBvdXRwdXQuCitUaGUgb3B0aW1pemVyIGNhbiBtb3ZlIHBpZWNlcyBvZiBjb2RlIGluIHN1Y2ggbWFubmVyIHRoYXQgdHdvIGxpbmUgb2YgY29kZXMKK2FyZSBpbnRlcmxhY2VkIChpbnN0cnVjdGlvbiBzY2hlZHVsaW5nKS4gQWxzbyBkZWJ1ZyBpbmZvIGdlbmVyYXRlZCBieSB0aGUgY29tcGlsZXIgCitjYW4gc2hvdyBzdHJhbmdlIGJlaGF2aW9yLiBUaGlzIGlzIGVzcGVjaWFsbHkgdHJ1ZSBmb3IgY29tcGxleCBleHByZXNzaW9ucyBlLmcuIGluc2lkZQorYW4gaWYgc3RhdGVtZW50OgorPC9wPgorICAgICAgICAgICAgPHRhYmxlIHhtbG5zPSIiIGJvcmRlcj0iMCIgc3R5bGU9ImJhY2tncm91bmQ6ICNFMEUwRTA7IiB3aWR0aD0iOTAlIj4KKyAgICAgICAgICAgICAgPHRyPgorICAgICAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgICAgIDxwcmUgY2xhc3M9InNjcmVlbiI+CisJaWYgKGEgJmFtcDsmYW1wOyAuLgorCSAgICBiICZhbXA7JmFtcDsgLi4KKwkgICAgYyAmYW1wOyZhbXA7KQorPC9wcmU+CisgICAgICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgICAgPC90cj4KKyAgICAgICAgICAgIDwvdGFibGU+CisgICAgICAgICAgICA8cD4KK2hlcmUgdGhlIHByb2JsZW0gY29tZSBmcm9tIHRoZSBwb3NpdGlvbiBvZiBsaW5lIG51bWJlci4gVGhlIGF2YWlsYWJsZSBkZWJ1ZworaW5mbyBkb2VzIG5vdCBnaXZlIGVub3VnaCBkZXRhaWxzIGZvciB0aGUgaWYgY29uZGl0aW9uLCBzbyBhbGwgc2FtcGxlcyBhcmUKK2FjY3VtdWxhdGVkIGF0IHRoZSBwb3NpdGlvbiBvZiB0aGUgcmlnaHQgYnJhY2Ugb2YgdGhlIGV4cHJlc3Npb24uIFVzaW5nCis8c3BhbiBjbGFzcz0iY29tbWFuZCI+PHN0cm9uZz5vcGFubm90YXRlIDxjb2RlIGNsYXNzPSJvcHRpb24iPi1hPC9jb2RlPjwvc3Ryb25nPjwvc3Bhbj4gY2FuIGhlbHAgdG8gc2hvdyB0aGUgcmVhbAorc2FtcGxlcyBhdCBhbiBhc3NlbWJseSBsZXZlbC4KKzwvcD4KKyAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0MiIgdGl0bGU9IjQuMi6gUHJvbG9ndWVzIGFuZCBlcGlsb2d1ZXMiPgorICAgICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KKyAgICAgICAgICAgICAgPGRpdj4KKyAgICAgICAgICAgICAgICA8ZGl2PgorICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPSJ0aXRsZSI+PGEgaWQ9InByb2xvZ3VlcyI+PC9hPjQuMi6gUHJvbG9ndWVzIGFuZCBlcGlsb2d1ZXM8L2gzPgorICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgPHA+CitUaGUgY29tcGlsZXIgZ2VuZXJhbGx5IG5lZWRzIHRvIGdlbmVyYXRlICJnbHVlIiBjb2RlIGFjcm9zcyBmdW5jdGlvbiBjYWxscywgZGVwZW5kZW50CitvbiB0aGUgcGFydGljdWxhciBmdW5jdGlvbiBjYWxsIGNvbnZlbnRpb25zIHVzZWQuIEFkZGl0aW9uYWxseSBvdGhlciB0aGluZ3MKK25lZWQgdG8gaGFwcGVuLCBsaWtlIHN0YWNrIHBvaW50ZXIgYWRqdXN0bWVudCBmb3IgdGhlIGxvY2FsIHZhcmlhYmxlczsgdGhpcworY29kZSBpcyBrbm93biBhcyB0aGUgZnVuY3Rpb24gcHJvbG9ndWUuIFNpbWlsYXIgY29kZSBpcyBuZWVkZWQgYXQgZnVuY3Rpb24gcmV0dXJuLAorYW5kIGlzIGtub3duIGFzIHRoZSBmdW5jdGlvbiBlcGlsb2d1ZS4gVGhpcyB3aWxsIHNob3cgdXAgaW4gYW5ub3RhdGlvbnMgYXMKK3NhbXBsZXMgYXQgdGhlIHZlcnkgc3RhcnQgYW5kIGVuZCBvZiBhIGZ1bmN0aW9uLCB3aGVyZSB0aGVyZSBpcyBubyBhcHBhcmVudAorZXhlY3V0YWJsZSBjb2RlIGluIHRoZSBzb3VyY2UuCis8L3A+CisgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgPGRpdiBjbGFzcz0ic2VjdDIiIHRpdGxlPSI0LjMuoElubGluZWQgZnVuY3Rpb25zIj4KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlcGFnZSI+CisgICAgICAgICAgICAgIDxkaXY+CisgICAgICAgICAgICAgICAgPGRpdj4KKyAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz0idGl0bGUiPjxhIGlkPSJpbmxpbmVkLWZ1bmN0aW9uIj48L2E+NC4zLqBJbmxpbmVkIGZ1bmN0aW9uczwvaDM+CisgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICA8cD4KK1lvdSBtYXkgc2VlIHRoYXQgYSBmdW5jdGlvbiBpcyBjcmVkaXRlZCB3aXRoIGEgY2VydGFpbiBudW1iZXIgb2Ygc2FtcGxlcywgYnV0Cit0aGUgbGlzdGluZyBkb2VzIG5vdCBhZGQgdXAgdG8gdGhlIGNvcnJlY3QgdG90YWwuIFRvIHBpY2sgYSByZWFsIGV4YW1wbGUgOgorPC9wPgorICAgICAgICAgICAgPHRhYmxlIHhtbG5zPSIiIGJvcmRlcj0iMCIgc3R5bGU9ImJhY2tncm91bmQ6ICNFMEUwRTA7IiB3aWR0aD0iOTAlIj4KKyAgICAgICAgICAgICAgPHRyPgorICAgICAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgICAgIDxwcmUgY2xhc3M9InNjcmVlbiI+CisgICAgICAgICAgICAgICA6aW50ZXJuYWxfc2tfYnVmZl9hbGxvY19zZWN1cml0eShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorIDM1MyAyLjM0MiUgICAgOnsgLyogaW50ZXJuYWxfc2tfYnVmZl9hbGxvY19zZWN1cml0eSB0b3RhbDogMTg4MiAxMi40OCUgKi8KKyAgICAgICAgICAgICAgIDoKKyAgICAgICAgICAgICAgIDogICAgICAgIHNrX2J1ZmZfc2VjdXJpdHlfdCAqc2tzZWM7CisgIDE1IDAuMDk5NSUgICA6ICAgICAgICBpbnQgcmMgPSAwOworICAgICAgICAgICAgICAgOgorICAxMCAwLjA2NjMzJSAgOiAgICAgICAgc2tzZWMgPSBza2ItJmd0O2xzbV9zZWN1cml0eTsKKyA0NjggMy4xMDQlICAgIDogICAgICAgIGlmIChza3NlYyAmYW1wOyZhbXA7IHNrc2VjLSZndDttYWdpYyA9PSBEU0lfTUFHSUMpIHsKKyAgICAgICAgICAgICAgIDogICAgICAgICAgICAgICAgZ290byBvdXQ7CisgICAgICAgICAgICAgICA6ICAgICAgICB9CisgICAgICAgICAgICAgICA6CisgICAgICAgICAgICAgICA6ICAgICAgICBza3NlYyA9IChza19idWZmX3NlY3VyaXR5X3QgKikgZ2V0X3NrX2J1ZmZfbWVtb3J5KHNrYik7CisgICAzIDAuMDE5OSUgICA6ICAgICAgICBpZiAoIXNrc2VjKSB7CisgIDM4IDAuMjUyMSUgICA6ICAgICAgICAgICAgICAgIHJjID0gLUVOT01FTTsKKyAgICAgICAgICAgICAgIDogICAgICAgICAgICAgICAgZ290byBvdXQ7CisgIDEwIDAuMDY2MzMlICA6ICAgICAgICB9CisgICAgICAgICAgICAgICA6ICAgICAgICBtZW1zZXQoc2tzZWMsIDAsIHNpemVvZiAoc2tfYnVmZl9zZWN1cml0eV90KSk7CisgIDQ0IDAuMjkxOSUgICA6ICAgICAgICBza3NlYy0mZ3Q7bWFnaWMgPSBEU0lfTUFHSUM7CisgIDMyIDAuMjEyMyUgICA6ICAgICAgICBza3NlYy0mZ3Q7c2tiID0gc2tiOworICA0NSAwLjI5ODUlICAgOiAgICAgICAgc2tzZWMtJmd0O3NpZCA9IERTSV9TSURfTk9STUFMOworICAzMSAwLjIwNTYlICAgOiAgICAgICAgc2tiLSZndDtsc21fc2VjdXJpdHkgPSBza3NlYzsKKyAgICAgICAgICAgICAgIDoKKyAgICAgICAgICAgICAgIDogICAgICBvdXQ6CisgICAgICAgICAgICAgICA6CisgMTQ2IDAuOTY4NSUgICA6ICAgICAgICByZXR1cm4gcmM7CisgICAgICAgICAgICAgICA6CisgIDk4IDAuNjUwMSUgICA6fQorPC9wcmU+CisgICAgICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgICAgPC90cj4KKyAgICAgICAgICAgIDwvdGFibGU+CisgICAgICAgICAgICA8cD4KK0hlcmUsIHRoZSBmdW5jdGlvbiBpcyBjcmVkaXRlZCB3aXRoIDEsODgyIHNhbXBsZXMsIGJ1dCB0aGUgYW5ub3RhdGlvbnMKK2JlbG93IGRvIG5vdCBhY2NvdW50IGZvciB0aGlzLiBUaGlzIGlzIHVzdWFsbHkgYmVjYXVzZSBvZiBpbmxpbmUgZnVuY3Rpb25zIC0KK3RoZSBjb21waWxlciBtYXJrcyBzdWNoIGNvZGUgd2l0aCBkZWJ1ZyBlbnRyaWVzIGZvciB0aGUgaW5saW5lIGZ1bmN0aW9uCitkZWZpbml0aW9uLCBhbmQgdGhpcyBpcyB3aGVyZSA8c3BhbiBjbGFzcz0iY29tbWFuZCI+PHN0cm9uZz5vcGFubm90YXRlPC9zdHJvbmc+PC9zcGFuPiBhbm5vdGF0ZXMKK3N1Y2ggc2FtcGxlcy4gSW4gdGhlIGNhc2UgYWJvdmUsIDxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+bWVtc2V0PC9jb2RlPiBpcyB0aGUgbW9zdAorbGlrZWx5IGNhbmRpZGF0ZSBmb3IgdGhpcyBwcm9ibGVtLiBFeGFtaW5pbmcgdGhlIG1peGVkIHNvdXJjZS9hc3NlbWJseQorb3V0cHV0IGNhbiBoZWxwIGlkZW50aWZ5IHN1Y2ggcmVzdWx0cy4KKzwvcD4KKyAgICAgICAgICAgIDxwPgorVGhpcyBwcm9ibGVtIGlzIG1vcmUgdmlzaWJsZSB3aGVuIHRoZXJlIGlzIG5vIHNvdXJjZSBmaWxlIGF2YWlsYWJsZSwgaW4gdGhlCitmb2xsb3dpbmcgZXhhbXBsZSBpdCdzIHRyaXZpYWxseSB2aXNpYmxlIHRoZSBzdW1zIG9mIHN5bWJvbHMgc2FtcGxlcyBpcyBsZXNzCit0aGFuIHRoZSBudW1iZXIgb2YgdGhlIHNhbXBsZXMgZm9yIHRoaXMgZmlsZS4gVGhlIGRpZmZlcmVuY2UgbXVzdCBiZSBhY2NvdW50ZWQKK3RvIGlubGluZSBmdW5jdGlvbnMuCis8L3A+CisgICAgICAgICAgICA8dGFibGUgeG1sbnM9IiIgYm9yZGVyPSIwIiBzdHlsZT0iYmFja2dyb3VuZDogI0UwRTBFMDsiIHdpZHRoPSI5MCUiPgorICAgICAgICAgICAgICA8dHI+CisgICAgICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICAgICAgPHByZSBjbGFzcz0ic2NyZWVuIj4KKy8qCisgKiBUb3RhbCBzYW1wbGVzIGZvciBmaWxlIDogImFyY2gvaTM4Ni9rZXJuZWwvcHJvY2Vzcy5jIgorICoKKyAqICAgIDEwOSAgMi40NjE2CisgKi8KKworIC8qIGRlZmF1bHRfaWRsZSB0b3RhbDogICAgIDg0ICAxLjg5NzAgKi8KKyAvKiBjcHVfaWRsZSB0b3RhbDogICAgICAgICAyMSAgMC40NzQzICovCisgLyogZmx1c2hfdGhyZWFkIHRvdGFsOiAgICAgIDEgIDAuMDIyNiAqLworIC8qIHByZXBhcmVfdG9fY29weSB0b3RhbDogICAxICAwLjAyMjYgKi8KKyAvKiBfX3N3aXRjaF90byB0b3RhbDogICAgICAxOCAgMC40MDY1ICovCis8L3ByZT4KKyAgICAgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgICA8L3RyPgorICAgICAgICAgICAgPC90YWJsZT4KKyAgICAgICAgICAgIDxwPgorVGhlIG1pc3Npbmcgc2FtcGxlcyBhcmUgbm90IGxvc3QsIHRoZXkgd2lsbCBiZSBjcmVkaXRlZCB0byBhbm90aGVyIHNvdXJjZQorbG9jYXRpb24gd2hlcmUgdGhlIGlubGluZWQgZnVuY3Rpb24gaXMgZGVmaW5lZC4gVGhlIGlubGluZWQgZnVuY3Rpb24gd2lsbCBiZQorY3JlZGl0ZWQgZnJvbSBtdWx0aXBsZSBjYWxsIHNpdGUgYW5kIG1lcmdlZCBpbiBvbmUgcGxhY2UgaW4gdGhlIGFubm90YXRlZAorc291cmNlIGZpbGUgc28gdGhlcmUgaXMgbm8gd2F5IHRvIHNlZSBmcm9tIHdoYXQgY2FsbCBzaXRlIGFyZSBjb21pbmcgdGhlCitzYW1wbGVzIGZvciBhbiBpbmxpbmVkIGZ1bmN0aW9uLgorPC9wPgorICAgICAgICAgICAgPHA+CitXaGVuIHJ1bm5pbmcgPHNwYW4gY2xhc3M9ImNvbW1hbmQiPjxzdHJvbmc+b3Bhbm5vdGF0ZTwvc3Ryb25nPjwvc3Bhbj4sIHlvdSBtYXkgZ2V0IGEgd2FybmluZworInNvbWUgZnVuY3Rpb25zIGNvbXBpbGVkIHdpdGhvdXQgZGVidWcgaW5mb3JtYXRpb24gbWF5IGhhdmUgaW5jb3JyZWN0IHNvdXJjZSBsaW5lIGF0dHJpYnV0aW9ucyIuCitJbiBzb21lIHJhcmUgY2FzZXMsIE9Qcm9maWxlIGlzIG5vdCBhYmxlIHRvIHZlcmlmeSB0aGF0IHRoZSBkZXJpdmVkIHNvdXJjZSBsaW5lCitpcyBjb3JyZWN0ICh3aGVuIHNvbWUgcGFydHMgb2YgdGhlIGJpbmFyeSBpbWFnZSBhcmUgY29tcGlsZWQgd2l0aG91dCBkZWJ1Z2dpbmcKK2luZm9ybWF0aW9uKS4gQmUgd2FyeSBvZiByZXN1bHRzIGlmIHRoaXMgd2FybmluZyBhcHBlYXJzLgorPC9wPgorICAgICAgICAgICAgPHA+CitGdXJ0aGVybW9yZSwgZm9yIHNvbWUgbGFuZ3VhZ2VzIHRoZSBjb21waWxlciBjYW4gaW1wbGljaXRseSBnZW5lcmF0ZSBmdW5jdGlvbnMsCitzdWNoIGFzIGRlZmF1bHQgY29weSBjb25zdHJ1Y3RvcnMuIFN1Y2ggZnVuY3Rpb25zIGFyZSBsYWJlbGxlZCBieSB0aGUgY29tcGlsZXIKK2FzIGhhdmluZyBhIGxpbmUgbnVtYmVyIG9mIDAsIHdoaWNoIG1lYW5zIHRoZSBzb3VyY2UgYW5ub3RhdGlvbiBjYW4gYmUgY29uZnVzaW5nLgorPC9wPgorICAgICAgICAgIDwvZGl2PgorICAgICAgICAgIDxkaXYgY2xhc3M9InNlY3QyIiB0aXRsZT0iNC40LqBJbmFjY3VyYWN5IGluIGxpbmUgbnVtYmVyIGluZm9ybWF0aW9uIj4KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlcGFnZSI+CisgICAgICAgICAgICAgIDxkaXY+CisgICAgICAgICAgICAgICAgPGRpdj4KKyAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz0idGl0bGUiPjxhIGlkPSJ3cm9uZy1saW5lbnItaW5mbyI+PC9hPjQuNC6gSW5hY2N1cmFjeSBpbiBsaW5lIG51bWJlciBpbmZvcm1hdGlvbjwvaDM+CisgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICA8cD4KK0RlcGVuZGluZyBvbiB5b3VyIGNvbXBpbGVyIHlvdSBjYW4gZmFsbCBpbnRvIHRoZSBmb2xsb3dpbmcgcHJvYmxlbToKKzwvcD4KKyAgICAgICAgICAgIDx0YWJsZSB4bWxucz0iIiBib3JkZXI9IjAiIHN0eWxlPSJiYWNrZ3JvdW5kOiAjRTBFMEUwOyIgd2lkdGg9IjkwJSI+CisgICAgICAgICAgICAgIDx0cj4KKyAgICAgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgICAgICA8cHJlIGNsYXNzPSJzY3JlZW4iPgorc3RydWN0IGJpZ19vYmplY3QgeyBpbnQgYVs1MDBdOyB9OworCitpbnQgbWFpbigpCit7CisJYmlnX29iamVjdCBhLCBiOworCWZvciAoaW50IGkgPSAwIDsgaSAhPSAxMDAwICogMTAwMDsgKytpKQorCQliID0gYTsKKwlyZXR1cm4gMDsKK30KKworPC9wcmU+CisgICAgICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgICAgPC90cj4KKyAgICAgICAgICAgIDwvdGFibGU+CisgICAgICAgICAgICA8cD4KK0NvbXBpbGVkIHdpdGggPHNwYW4gY2xhc3M9ImNvbW1hbmQiPjxzdHJvbmc+Z2NjPC9zdHJvbmc+PC9zcGFuPiAzLjAuNCB0aGUgYW5ub3RhdGVkIHNvdXJjZSBpcyBjbGVhcmx5IGluYWNjdXJhdGU6Cis8L3A+CisgICAgICAgICAgICA8dGFibGUgeG1sbnM9IiIgYm9yZGVyPSIwIiBzdHlsZT0iYmFja2dyb3VuZDogI0UwRTBFMDsiIHdpZHRoPSI5MCUiPgorICAgICAgICAgICAgICA8dHI+CisgICAgICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICAgICAgPHByZSBjbGFzcz0ic2NyZWVuIj4KKyAgICAgICAgICAgICAgIDppbnQgbWFpbigpCisgICAgICAgICAgICAgICA6eyAgLyogbWFpbiB0b3RhbDogNzg3MSAxMDAlICovCisgICAgICAgICAgICAgICA6ICAgICAgICBiaWdfb2JqZWN0IGEsIGI7CisgICAgICAgICAgICAgICA6ICAgICAgICBmb3IgKGludCBpID0gMCA7IGkgIT0gMTAwMCAqIDEwMDA7ICsraSkKKyAgICAgICAgICAgICAgIDogICAgICAgICAgICAgICAgYiA9IGE7CisgNzg3MSAxMDAlICAgICA6ICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgIDp9Cis8L3ByZT4KKyAgICAgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgICA8L3RyPgorICAgICAgICAgICAgPC90YWJsZT4KKyAgICAgICAgICAgIDxwPgorVGhlIHByb2JsZW0gaGVyZSBpcyBkaXN0aW5jdCBmcm9tIHRoZSBJUlEgbGF0ZW5jeSBwcm9ibGVtOyB0aGUgZGVidWcgbGluZSBudW1iZXIKK2luZm9ybWF0aW9uIGlzIG5vdCBwcmVjaXNlIGVub3VnaDsgYWdhaW4sIGxvb2tpbmcgYXQgb3V0cHV0IG9mIDxzcGFuIGNsYXNzPSJjb21tYW5kIj48c3Ryb25nPm9wYW5ub2F0YXRlIC1hczwvc3Ryb25nPjwvc3Bhbj4gY2FuIGhlbHAuCis8L3A+CisgICAgICAgICAgICA8dGFibGUgeG1sbnM9IiIgYm9yZGVyPSIwIiBzdHlsZT0iYmFja2dyb3VuZDogI0UwRTBFMDsiIHdpZHRoPSI5MCUiPgorICAgICAgICAgICAgICA8dHI+CisgICAgICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICAgICAgPHByZSBjbGFzcz0ic2NyZWVuIj4KKyAgICAgICAgICAgICAgIDppbnQgbWFpbigpCisgICAgICAgICAgICAgICA6eworICAgICAgICAgICAgICAgOiAgICAgICAgYmlnX29iamVjdCBhLCBiOworICAgICAgICAgICAgICAgOiAgICAgICAgZm9yIChpbnQgaSA9IDAgOyBpICE9IDEwMDAgKiAxMDAwOyArK2kpCisgICAgICAgICAgICAgICA6IDgwNDg0YzA6ICAgICAgIHB1c2ggICAlZWJwCisgICAgICAgICAgICAgICA6IDgwNDg0YzE6ICAgICAgIG1vdiAgICAlZXNwLCVlYnAKKyAgICAgICAgICAgICAgIDogODA0ODRjMzogICAgICAgc3ViICAgICQweGZhYywlZXNwCisgICAgICAgICAgICAgICA6IDgwNDg0Yzk6ICAgICAgIHB1c2ggICAlZWRpCisgICAgICAgICAgICAgICA6IDgwNDg0Y2E6ICAgICAgIHB1c2ggICAlZXNpCisgICAgICAgICAgICAgICA6IDgwNDg0Y2I6ICAgICAgIHB1c2ggICAlZWJ4CisgICAgICAgICAgICAgICA6ICAgICAgICAgICAgICAgIGIgPSBhOworICAgICAgICAgICAgICAgOiA4MDQ4NGNjOiAgICAgICBsZWEgICAgMHhmZmZmZjA2MCglZWJwKSwlZWR4CisgICAgICAgICAgICAgICA6IDgwNDg0ZDI6ICAgICAgIGxlYSAgICAweGZmZmZmODMwKCVlYnApLCVlYXgKKyAgICAgICAgICAgICAgIDogODA0ODRkODogICAgICAgbW92ICAgICQweGY0MjNmLCVlYngKKyAgICAgICAgICAgICAgIDogODA0ODRkZDogICAgICAgbGVhICAgIDB4MCglZXNpKSwlZXNpCisgICAgICAgICAgICAgICA6ICAgICAgICByZXR1cm4gMDsKKyAgICAzIDAuMDM4MTElIDogODA0ODRlMDogICAgICAgbW92ICAgICVlZHgsJWVkaQorICAgICAgICAgICAgICAgOiA4MDQ4NGUyOiAgICAgICBtb3YgICAgJWVheCwlZXNpCisgICAgMSAwLjAxMjclICA6IDgwNDg0ZTQ6ICAgICAgIGNsZAorICAgIDggMC4xMDE2JSAgOiA4MDQ4NGU1OiAgICAgICBtb3YgICAgJDB4MWY0LCVlY3gKKyA3ODUwIDk5LjczJSAgIDogODA0ODRlYTogICAgICAgcmVweiBtb3ZzbCAlZHM6KCVlc2kpLCVlczooJWVkaSkKKyAgICA5IDAuMTE0MyUgIDogODA0ODRlYzogICAgICAgZGVjICAgICVlYngKKyAgICAgICAgICAgICAgIDogODA0ODRlZDogICAgICAgam5zICAgIDgwNDg0ZTAKKyAgICAgICAgICAgICAgIDogODA0ODRlZjogICAgICAgeG9yICAgICVlYXgsJWVheAorICAgICAgICAgICAgICAgOiA4MDQ4NGYxOiAgICAgICBwb3AgICAgJWVieAorICAgICAgICAgICAgICAgOiA4MDQ4NGYyOiAgICAgICBwb3AgICAgJWVzaQorICAgICAgICAgICAgICAgOiA4MDQ4NGYzOiAgICAgICBwb3AgICAgJWVkaQorICAgICAgICAgICAgICAgOiA4MDQ4NGY0OiAgICAgICBsZWF2ZQorICAgICAgICAgICAgICAgOiA4MDQ4NGY1OiAgICAgICByZXQKKzwvcHJlPgorICAgICAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICAgIDwvdHI+CisgICAgICAgICAgICA8L3RhYmxlPgorICAgICAgICAgICAgPHA+CitTbyBoZXJlIGl0J3MgY2xlYXIgdGhhdCBjb3B5aW5nIGlzIGNvcnJlY3RseSBjcmVkaXRlZCB3aXRoIG9mIGFsbCB0aGUgc2FtcGxlcywgYnV0IHRoZQorbGluZSBudW1iZXIgaW5mb3JtYXRpb24gaXMgbWlzcGxhY2VkLiA8c3BhbiBjbGFzcz0iY29tbWFuZCI+PHN0cm9uZz5vYmpkdW1wIC1kUzwvc3Ryb25nPjwvc3Bhbj4gZXhwb3NlcyB0aGUKK3NhbWUgcHJvYmxlbS4gTm90ZSB0aGF0IG1haW50YWluaW5nIGFjY3VyYXRlIGRlYnVnIGluZm9ybWF0aW9uIGZvciBjb21waWxlcnMgd2hlbiBvcHRpbWl6aW5nIGlzIGRpZmZpY3VsdCwgc28gdGhpcyBwcm9ibGVtIGlzIG5vdCBzdXByaXNpbmcuCitUaGUgcHJvYmxlbSBvZiBkZWJ1ZyBpbmZvcm1hdGlvbgorYWNjdXJhY3kgaXMgYWxzbyBkZXBlbmRlbnQgb24gdGhlIGJpbnV0aWxzIHZlcnNpb24gdXNlZDsgc29tZSBCRkQgbGlicmFyeSB2ZXJzaW9ucworY29udGFpbiBhIHdvcmstYXJvdW5kIGZvciBrbm93biBwcm9ibGVtcyBvZiA8c3BhbiBjbGFzcz0iY29tbWFuZCI+PHN0cm9uZz5nY2M8L3N0cm9uZz48L3NwYW4+LCBzb21lIG90aGVycyBkbyBub3QuIFRoaXMgaXMgdW5mb3J0dW5hdGUgYnV0IHdlIG11c3QgbGl2ZSB3aXRoIHRoYXQsCitzaW5jZSBwcm9maWxpbmcgaXMgcG9pbnRsZXNzIHdoZW4geW91IGRpc2FibGUgb3B0aW1pc2F0aW9uICh3aGljaCB3b3VsZCBnaXZlIGJldHRlciBkZWJ1Z2dpbmcgZW50cmllcykuCis8L3A+CisgICAgICAgICAgPC9kaXY+CisgICAgICAgIDwvZGl2PgorICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0MSIgdGl0bGU9IjUuoEFzc2VtYmx5IGZ1bmN0aW9ucyI+CisgICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KKyAgICAgICAgICAgIDxkaXY+CisgICAgICAgICAgICAgIDxkaXY+CisgICAgICAgICAgICAgICAgPGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj48YSBpZD0ic3ltYm9sLXdpdGhvdXQtZGVidWctaW5mbyI+PC9hPjUuoEFzc2VtYmx5IGZ1bmN0aW9uczwvaDI+CisgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgPHA+CitPZnRlbiB0aGUgYXNzZW1ibGVyIGNhbm5vdCBnZW5lcmF0ZSBkZWJ1ZyBpbmZvcm1hdGlvbiBhdXRvbWF0aWNhbGx5LgorVGhpcyBtZWFucyB0aGF0IHlvdSBjYW5ub3QgZ2V0IGEgc291cmNlIHJlcG9ydCB1bmxlc3MgCit5b3UgbWFudWFsbHkgZGVmaW5lIHRoZSBuZWNjZXNzYXJ5IGRlYnVnIGluZm9ybWF0aW9uOyByZWFkIHlvdXIgYXNzZW1ibGVyIGRvY3VtZW50YXRpb24gZm9yIGhvdyB5b3UgbWlnaHQKK2RvIHRoYXQuIFRoZSBvbmx5CitkZWJ1Z2dpbmcgaW5mbyBuZWVkZWQgY3VycmVudGx5IGJ5IE9Qcm9maWxlIGlzIHRoZSBsaW5lLW51bWJlci9maWxlbmFtZS1WTUEgYXNzb2NpYXRpb24uIFdoZW4gcHJvZmlsaW5nIGFzc2VtYmx5Cit3aXRob3V0IGRlYnVnZ2luZyBpbmZvIHlvdSBjYW4gYWx3YXlzIGdldCByZXBvcnQgZm9yIHN5bWJvbHMsIGFuZCBvcHRpb25hbGx5IGZvciBWTUEsIHRocm91Z2ggPHNwYW4gY2xhc3M9ImNvbW1hbmQiPjxzdHJvbmc+b3ByZXBvcnQgLWw8L3N0cm9uZz48L3NwYW4+CitvciA8c3BhbiBjbGFzcz0iY29tbWFuZCI+PHN0cm9uZz5vcHJlcG9ydCAtZDwvc3Ryb25nPjwvc3Bhbj4sIGJ1dCB0aGlzIHdvcmtzIG9ubHkgZm9yIHN5bWJvbHMgd2l0aCB0aGUgcmlnaHQgYXR0cmlidXRlcy4KK0ZvciA8c3BhbiBjbGFzcz0iY29tbWFuZCI+PHN0cm9uZz5nYXM8L3N0cm9uZz48L3NwYW4+IHlvdSBjYW4gZ2V0IHRoaXMgYnkKKzwvcD4KKyAgICAgICAgICA8dGFibGUgeG1sbnM9IiIgYm9yZGVyPSIwIiBzdHlsZT0iYmFja2dyb3VuZDogI0UwRTBFMDsiIHdpZHRoPSI5MCUiPgorICAgICAgICAgICAgPHRyPgorICAgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgICAgPHByZSBjbGFzcz0ic2NyZWVuIj4KKy5nbG9ibCBmb28KKwkudHlwZQlmb28sQGZ1bmN0aW9uCis8L3ByZT4KKyAgICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgIDwvdHI+CisgICAgICAgICAgPC90YWJsZT4KKyAgICAgICAgICA8cD4gCit3aGlsc3QgZm9yIDxzcGFuIGNsYXNzPSJjb21tYW5kIj48c3Ryb25nPm5hc208L3N0cm9uZz48L3NwYW4+IHlvdSBtdXN0IHVzZQorPC9wPgorICAgICAgICAgIDx0YWJsZSB4bWxucz0iIiBib3JkZXI9IjAiIHN0eWxlPSJiYWNrZ3JvdW5kOiAjRTBFMEUwOyIgd2lkdGg9IjkwJSI+CisgICAgICAgICAgICA8dHI+CisgICAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgICA8cHJlIGNsYXNzPSJzY3JlZW4iPgorCSAgR0xPQkFMIGZvbzpmdW5jdGlvbgkJOyBbMV0KKzwvcHJlPgorICAgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgPC90cj4KKyAgICAgICAgICA8L3RhYmxlPgorICAgICAgICAgIDxwPgorTm90ZSB0aGF0IE9Qcm9maWxlIGRvZXMgbm90IG5lZWQgdGhlIGdsb2JhbCBhdHRyaWJ1dGUsIG9ubHkgdGhlIGZ1bmN0aW9uIGF0dHJpYnV0ZS4KKzwvcD4KKyAgICAgICAgPC9kaXY+CisgICAgICAgIDxkaXYgY2xhc3M9InNlY3QxIiB0aXRsZT0iNi6gT3ZlcmxhcHBpbmcgc3ltYm9scyBpbiBKSVRlZCBjb2RlIj4KKyAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgorICAgICAgICAgICAgPGRpdj4KKyAgICAgICAgICAgICAgPGRpdj4KKyAgICAgICAgICAgICAgICA8aDIgY2xhc3M9InRpdGxlIiBzdHlsZT0iY2xlYXI6IGJvdGgiPjxhIGlkPSJvdmVybGFwcGluZy1zeW1ib2xzIj48L2E+Ni6gT3ZlcmxhcHBpbmcgc3ltYm9scyBpbiBKSVRlZCBjb2RlPC9oMj4KKyAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICA8cD4KKwlTb21lIHZpcnR1YWwgbWFjaGluZXMgKGUuZy4sIEphdmEpIG1heSByZS1KSVQgYSBtZXRob2QsIHJlc3VsdGluZyBpbiBwcmV2aW91c2x5CisJYWxsb2NhdGVkIHNwYWNlIGZvciBhIHBpZWNlIG9mIGNvbXBpbGVkIGNvZGUgdG8gYmUgcmV1c2VkLiBUaGlzIG1lYW5zIHRoYXQsIGF0IG9uZSBkaXN0aW5jdAorCWNvZGUgYWRkcmVzcywgbXVsdGlwbGUgc3ltYm9scy9tZXRob2RzIG1heSBiZSBwcmVzZW50IGR1cmluZyB0aGUgcnVuIHRpbWUgb2YgdGhlIGFwcGxpY2F0aW9uLgorCTwvcD4KKyAgICAgICAgICA8cD4KKwlTaW5jZSBPUHJvZmlsZSBzYW1wbGVzIGFyZSBidWZmZXJlZCBhbmQgZG9uJiM4MjQyO3QgaGF2ZSB0aW1pbmcgaW5mb3JtYXRpb24sIHRoZXJlIGlzIG5vIHdheQorCXRvIGNvcnJlbGF0ZSBzYW1wbGVzIHdpdGggdGhlIChwb3NzaWJseSkgdmFyeWluZyBhZGRyZXNzIHJhbmdlcyBpbiB3aGljaCB0aGUgY29kZSBmb3IgYSBzeW1ib2wKKwltYXkgcmVzaWRlLgorCUFuIGFsdGVybmF0aXZlIHdvdWxkIGJlIGZsdXNoaW5nIHRoZSBPUHJvZmlsZSBzYW1wbGluZyBidWZmZXIgd2hlbiB3ZSBnZXQgYW4gdW5sb2FkIGV2ZW50LAorCWJ1dCB0aGlzIGNvdWxkIHJlc3VsdCBpbiBoaWdoIG92ZXJoZWFkLgorCTwvcD4KKyAgICAgICAgICA8cD4KKwlUbyBtb2RlcmF0ZSB0aGUgcHJvYmxlbSBvZiBvdmVybGFwcGluZyBzeW1ib2xzLCBPUHJvZmlsZSB0cmllcyB0byBzZWxlY3QgdGhlIHN5bWJvbCB0aGF0IHdhcworCXByZXNlbnQgYXQgdGhpcyBhZGRyZXNzIHJhbmdlIG1vc3Qgb2YgdGhlIHRpbWUuIEFkZGl0aW9uYWxseSwgb3RoZXIgb3ZlcmxhcHBpbmcgc3ltYm9scworCWFyZSB0cnVuY2F0ZWQgaW4gdGhlIG92ZXJsYXBwaW5nIGFyZWEuCisJVGhpcyBnaXZlcyByZWFzb25hYmxlIHJlc3VsdHMsIGJlY2F1c2UgaW4gcmVhbGl0eSwgYWRkcmVzcyByZXVzZSB0eXBpY2FsbHkgdGFrZXMgcGxhY2UKKwlkdXJpbmcgcGhhc2UgY2hhbmdlcyBvZiB0aGUgYXBwbGljYXRpb24gLS0gaW4gcGFydGljdWxhciwgZHVyaW5nIGFwcGxpY2F0aW9uICBzdGFydHVwLgorCVRodXMsIGZvciBvcHRpbXVtIHByb2ZpbGluZyByZXN1bHRzLCBzdGFydCB0aGUgc2FtcGxpbmcgc2Vzc2lvbiBhZnRlciBhcHBsaWNhdGlvbiBzdGFydHVwCisJYW5kIGJ1cm4gaW4uCisJPC9wPgorICAgICAgICA8L2Rpdj4KKyAgICAgICAgPGRpdiBjbGFzcz0ic2VjdDEiIHRpdGxlPSI3LqBPdGhlciBkaXNjcmVwYW5jaWVzIj4KKyAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgorICAgICAgICAgICAgPGRpdj4KKyAgICAgICAgICAgICAgPGRpdj4KKyAgICAgICAgICAgICAgICA8aDIgY2xhc3M9InRpdGxlIiBzdHlsZT0iY2xlYXI6IGJvdGgiPjxhIGlkPSJoaWRkZW4tY29zdCI+PC9hPjcuoE90aGVyIGRpc2NyZXBhbmNpZXM8L2gyPgorICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgIDwvZGl2PgorICAgICAgICAgIDxwPgorQW5vdGhlciBjYXVzZSBvZiBhcHBhcmVudCBwcm9ibGVtcyBpcyB0aGUgaGlkZGVuIGNvc3Qgb2YgaW5zdHJ1Y3Rpb25zLiBBIHZlcnkKK2NvbW1vbiBleGFtcGxlIGlzIHR3byBtZW1vcnkgcmVhZHM6IG9uZSBmcm9tIEwxIGNhY2hlIGFuZCB0aGUgb3RoZXIgZnJvbSBtZW1vcnk6Cit0aGUgc2Vjb25kIG1lbW9yeSByZWFkIGlzIGxpa2VseSB0byBoYXZlIG1vcmUgc2FtcGxlcy4KK1RoZXJlIGFyZSBtYW55IG90aGVyIGNhdXNlcyBvZiBoaWRkZW4gY29zdCBvZiBpbnN0cnVjdGlvbnMuIEEgbm9uLWV4aGF1c3RpdmUKK2xpc3Q6IG1pcy1wcmVkaWN0ZWQgYnJhbmNoLCBUTEIgY2FjaGUgbWlzcywgcGFydGlhbCByZWdpc3RlciBzdGFsbCwKK3BhcnRpYWwgcmVnaXN0ZXIgZGVwZW5kZW5jaWVzLCBtZW1vcnkgbWlzbWF0Y2ggc3RhbGwsIHJlLWV4ZWN1dGVkILVvcHMuIElmIHlvdSB3YW50IHRvIHdyaXRlCitwcm9ncmFtcyBhdCB0aGUgYXNzZW1ibHkgbGV2ZWwsIGJlIHN1cmUgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIEludGVsIGFuZAorQU1EIGRvY3VtZW50YXRpb24gYXQgPGEgY2xhc3M9InVsaW5rIiBocmVmPSJodHRwOi8vZGV2ZWxvcGVyLmludGVsLmNvbS8iPmh0dHA6Ly9kZXZlbG9wZXIuaW50ZWwuY29tLzwvYT4KK2FuZCA8YSBjbGFzcz0idWxpbmsiIGhyZWY9Imh0dHA6Ly9kZXZlbG9wZXIuYW1kLmNvbS9kZXZndWlkZXMuanNwLyI+aHR0cDovL2RldmVsb3Blci5hbWQuY29tL2Rldmd1aWRlcy5qc3A8L2E+LgorPC9wPgorICAgICAgICA8L2Rpdj4KKyAgICAgIDwvZGl2PgorICAgICAgPGRpdiBjbGFzcz0iY2hhcHRlciIgdGl0bGU9IkNoYXB0ZXKgNi6gQWNrbm93bGVkZ21lbnRzIj4KKyAgICAgICAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KKyAgICAgICAgICA8ZGl2PgorICAgICAgICAgICAgPGRpdj4KKyAgICAgICAgICAgICAgPGgyIGNsYXNzPSJ0aXRsZSI+PGEgaWQ9ImFjayI+PC9hPkNoYXB0ZXKgNi6gQWNrbm93bGVkZ21lbnRzPC9oMj4KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgIDwvZGl2PgorICAgICAgICA8L2Rpdj4KKyAgICAgICAgPHA+CitUaGFua3MgdG8gKGluIG5vIHBhcnRpY3VsYXIgb3JkZXIpIDogQXJqYW4gdmFuIGRlIFZlbiwgUmlrIHZhbiBSaWVsLCBKdWFuIFF1aW50ZWxhLCBQaGlsaXBwZSBFbGllLAorUGhpbGxpcHAgUnVtcGYsIFRpZ3JhbiBBaXZhemlhbiwgQWxleCBCcm93biwgQWxpc2RhaXIgUmF3c3Rob3JuZSwgQm9iIE1vbnRnb21lcnksIFJheSBCcnlhbnQsIEguSi4gTHUsCitKZWZmIEVzcGVyLCBXaWxsIENvaGVuLCBHcmF5ZG9uIEhvYXJlLCBDbGlmZiBXb29sbGV5LCBBbGV4IFRzYXJpb3Vub3YsIEFsIFN0b25lLCBKYXNvbiBZZWgsCitSYW5kb2xwaCBDaHVuZywgQW50b24gQmxhbmNoYXJkLCBSaWNoYXJkIEhlbmRlcnNvbiwgQW5kcmllcyBCcm91d2VyLCBCcnlhbiBSaXR0bWV5ZXIsCitNYXluYXJkIFAuIEpvaG5zb24sCitSaWNoYXJkIFJlaWNoIChycmVpY2hAcmRydGVjaC5jb20pLCBad2FuZSBNd2Fpa2FtYm8sIERhdmUgSm9uZXMsIENoYXJsZXMgRmlsdG5lc3M7IGFuZCBmaW5hbGx5IFB1bHAsIGZvciAiSW50cm8iLgorPC9wPgorICAgICAgPC9kaXY+CisgICAgPC9kaXY+CisgIDwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2RvYy9vcHJvZmlsZS54bWwgYi9vcHJvZmlsZS0wLjkuNy9kb2Mvb3Byb2ZpbGUueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhMTdjNmQKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9kb2Mvb3Byb2ZpbGUueG1sCkBAIC0wLDAgKzEsMjk1MCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0nSVNPLTg4NTktMSc/PgorPCFET0NUWVBFIGJvb2sgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjEuMi8vRU4iICJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMS4yL2RvY2Jvb2t4LmR0ZCI+CisKKzxib29rIGlkPSJvcHJvZmlsZS1ndWlkZSI+Cis8Ym9va2luZm8+CisJPHRpdGxlPk9Qcm9maWxlIG1hbnVhbDwvdGl0bGU+CisgCisJPGF1dGhvcmdyb3VwPgorCQk8YXV0aG9yPgorCQkJPGZpcnN0bmFtZT5Kb2huPC9maXJzdG5hbWU+CisJCQk8c3VybmFtZT5MZXZvbjwvc3VybmFtZT4KKwkJCTxhZmZpbGlhdGlvbj4KKwkJCQk8YWRkcmVzcz48ZW1haWw+bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc8L2VtYWlsPjwvYWRkcmVzcz4KKwkJCTwvYWZmaWxpYXRpb24+CisJCTwvYXV0aG9yPgorCTwvYXV0aG9yZ3JvdXA+CisKKwk8Y29weXJpZ2h0PgorCQk8eWVhcj4yMDAwLTIwMDQ8L3llYXI+CisJCTxob2xkZXI+VmljdG9yaWEgVW5pdmVyc2l0eSBvZiBNYW5jaGVzdGVyLCBKb2huIExldm9uIGFuZCBvdGhlcnM8L2hvbGRlcj4KKwk8L2NvcHlyaWdodD4KKzwvYm9va2luZm8+CisKKzx0b2M+PC90b2M+CisKKzxjaGFwdGVyIGlkPSJpbnRyb2R1Y3Rpb24iPgorPHRpdGxlPkludHJvZHVjdGlvbjwvdGl0bGU+CisKKzxwYXJhPgorVGhpcyBtYW51YWwgYXBwbGllcyB0byBPUHJvZmlsZSB2ZXJzaW9uIDxvcHJvZmlsZXZlcnNpb24gLz4uCitPUHJvZmlsZSBpcyBhIHByb2ZpbGluZyBzeXN0ZW0gZm9yIExpbnV4IDIuMi8yLjQvMi42IHN5c3RlbXMgb24gYSBudW1iZXIgb2YgYXJjaGl0ZWN0dXJlcy4gSXQgaXMgY2FwYWJsZSBvZiBwcm9maWxpbmcKK2FsbCBwYXJ0cyBvZiBhIHJ1bm5pbmcgc3lzdGVtLCBmcm9tIHRoZSBrZXJuZWwgKGluY2x1ZGluZyBtb2R1bGVzIGFuZCBpbnRlcnJ1cHQgaGFuZGxlcnMpIHRvIHNoYXJlZCBsaWJyYXJpZXMKK3RvIGJpbmFyaWVzLiBJdCBydW5zIHRyYW5zcGFyZW50bHkgaW4gdGhlIGJhY2tncm91bmQgY29sbGVjdGluZyBpbmZvcm1hdGlvbiBhdCBhIGxvdyBvdmVyaGVhZC4gVGhlc2UKK2ZlYXR1cmVzIG1ha2UgaXQgaWRlYWwgZm9yIHByb2ZpbGluZyBlbnRpcmUgc3lzdGVtcyB0byBkZXRlcm1pbmUgYm90dGxlIG5lY2tzIGluIHJlYWwtd29ybGQgc3lzdGVtcy4KKzwvcGFyYT4KKzxwYXJhPgorTWFueSBDUFVzIHByb3ZpZGUgInBlcmZvcm1hbmNlIGNvdW50ZXJzIiwgaGFyZHdhcmUgcmVnaXN0ZXJzIHRoYXQgY2FuIGNvdW50ICJldmVudHMiOyBmb3IgZXhhbXBsZSwKK2NhY2hlIG1pc3Nlcywgb3IgQ1BVIGN5Y2xlcy4gT1Byb2ZpbGUgcHJvdmlkZXMgcHJvZmlsZXMgb2YgY29kZSBiYXNlZCBvbiB0aGUgbnVtYmVyIG9mIHRoZXNlIG9jY3VycmluZyBldmVudHM6CityZXBlYXRlZGx5LCBldmVyeSB0aW1lIGEgY2VydGFpbiAoY29uZmlndXJhYmxlKSBudW1iZXIgb2YgZXZlbnRzIGhhcyBvY2N1cnJlZCwgdGhlIFBDIHZhbHVlIGlzIHJlY29yZGVkLgorVGhpcyBpbmZvcm1hdGlvbiBpcyBhZ2dyZWdhdGVkIGludG8gcHJvZmlsZXMgZm9yIGVhY2ggYmluYXJ5IGltYWdlLjwvcGFyYT4KKzxwYXJhPgorU29tZSBoYXJkd2FyZSBzZXR1cHMgZG8gbm90IGFsbG93IE9Qcm9maWxlIHRvIHVzZSBwZXJmb3JtYW5jZSBjb3VudGVyczogaW4gdGhlc2UgY2FzZXMsIG5vCitldmVudHMgYXJlIGF2YWlsYWJsZSwgYW5kIE9Qcm9maWxlIG9wZXJhdGVzIGluIHRpbWVyL1JUQyBtb2RlLCBhcyBkZXNjcmliZWQgaW4gbGF0ZXIgY2hhcHRlcnMuCis8L3BhcmE+Cis8c2VjdDEgaWQ9ImFwcGxpY2F0aW9ucyI+Cis8dGl0bGU+QXBwbGljYXRpb25zIG9mIE9Qcm9maWxlPC90aXRsZT4KKzxwYXJhPgorT1Byb2ZpbGUgaXMgdXNlZnVsIGluIGEgbnVtYmVyIG9mIHNpdHVhdGlvbnMuIFlvdSBtaWdodCB3YW50IHRvIHVzZSBPUHJvZmlsZSB3aGVuIHlvdSA6Cis8L3BhcmE+Cis8aXRlbWl6ZWRsaXN0PgorPGxpc3RpdGVtPjxwYXJhPm5lZWQgbG93IG92ZXJoZWFkPC9wYXJhPjwvbGlzdGl0ZW0+Cis8bGlzdGl0ZW0+PHBhcmE+Y2Fubm90IHVzZSBoaWdobHkgaW50cnVzaXZlIHByb2ZpbGluZyBtZXRob2RzPC9wYXJhPjwvbGlzdGl0ZW0+Cis8bGlzdGl0ZW0+PHBhcmE+bmVlZCB0byBwcm9maWxlIGludGVycnVwdCBoYW5kbGVyczwvcGFyYT48L2xpc3RpdGVtPgorPGxpc3RpdGVtPjxwYXJhPm5lZWQgdG8gcHJvZmlsZSBhbiBhcHBsaWNhdGlvbiBhbmQgaXRzIHNoYXJlZCBsaWJyYXJpZXM8L3BhcmE+PC9saXN0aXRlbT4KKzxsaXN0aXRlbT48cGFyYT5uZWVkIHRvIHByb2ZpbGUgZHluYW1pY2FsbHkgY29tcGlsZWQgY29kZSBvZiBzdXBwb3J0ZWQgdmlydHVhbCBtYWNoaW5lcyAoc2VlIDx4cmVmIGxpbmtlbmQ9ImppdHN1cHBvcnQiLz4pPC9wYXJhPjwvbGlzdGl0ZW0+Cis8bGlzdGl0ZW0+PHBhcmE+bmVlZCB0byBjYXB0dXJlIHRoZSBwZXJmb3JtYW5jZSBiZWhhdmlvdXIgb2YgZW50aXJlIHN5c3RlbTwvcGFyYT48L2xpc3RpdGVtPgorPGxpc3RpdGVtPjxwYXJhPndhbnQgdG8gZXhhbWluZSBoYXJkd2FyZSBlZmZlY3RzIHN1Y2ggYXMgY2FjaGUgbWlzc2VzPC9wYXJhPjwvbGlzdGl0ZW0+Cis8bGlzdGl0ZW0+PHBhcmE+d2FudCBkZXRhaWxlZCBzb3VyY2UgYW5ub3RhdGlvbjwvcGFyYT48L2xpc3RpdGVtPgorPGxpc3RpdGVtPjxwYXJhPndhbnQgaW5zdHJ1Y3Rpb24tbGV2ZWwgcHJvZmlsZXM8L3BhcmE+PC9saXN0aXRlbT4KKzxsaXN0aXRlbT48cGFyYT53YW50IGNhbGwtZ3JhcGggcHJvZmlsZXM8L3BhcmE+PC9saXN0aXRlbT4KKzwvaXRlbWl6ZWRsaXN0PgorPHBhcmE+CitPUHJvZmlsZSBpcyBub3QgYSBwYW5hY2VhLiBPUHJvZmlsZSBtaWdodCBub3QgYmUgYSBjb21wbGV0ZSBzb2x1dGlvbiB3aGVuIHlvdSA6Cis8L3BhcmE+Cis8aXRlbWl6ZWRsaXN0PgorPGxpc3RpdGVtPjxwYXJhPnJlcXVpcmUgY2FsbCBncmFwaCBwcm9maWxlcyBvbiBwbGF0Zm9ybXMgb3RoZXIgdGhhbiAyLjYveDg2PC9wYXJhPjwvbGlzdGl0ZW0+Cis8bGlzdGl0ZW0+PHBhcmE+ZG9uJ3QgaGF2ZSByb290IHBlcm1pc3Npb25zPC9wYXJhPjwvbGlzdGl0ZW0+Cis8bGlzdGl0ZW0+PHBhcmE+cmVxdWlyZSAxMDAlIGluc3RydWN0aW9uLWFjY3VyYXRlIHByb2ZpbGVzPC9wYXJhPjwvbGlzdGl0ZW0+Cis8bGlzdGl0ZW0+PHBhcmE+bmVlZCBmdW5jdGlvbiBjYWxsIGNvdW50cyBvciBhbiBpbnRlcnN0aXRpYWwgcHJvZmlsaW5nIEFQSTwvcGFyYT48L2xpc3RpdGVtPgorPGxpc3RpdGVtPjxwYXJhPmNhbm5vdCB0b2xlcmF0ZSBhbnkgZGlzdHVyYmFuY2UgdG8gdGhlIHN5c3RlbSB3aGF0c29ldmVyPC9wYXJhPjwvbGlzdGl0ZW0+Cis8bGlzdGl0ZW0+PHBhcmE+bmVlZCB0byBwcm9maWxlIGludGVycHJldGVkIG9yIGR5bmFtaWNhbGx5IGNvbXBpbGVkIGNvZGUgb2Ygbm9uLXN1cHBvcnRlZCB2aXJ0dWFsIG1hY2hpbmVzPC9wYXJhPjwvbGlzdGl0ZW0+Cis8L2l0ZW1pemVkbGlzdD4KKzxzZWN0MiBpZD0iaml0c3VwcG9ydCI+Cis8dGl0bGU+U3VwcG9ydCBmb3IgZHluYW1pY2FsbHkgY29tcGlsZWQgKEpJVCkgY29kZTwvdGl0bGU+Cis8cGFyYT4KK09sZGVyIHZlcnNpb25zIG9mIE9Qcm9maWxlIHdlcmUgbm90IGNhcGFibGUgb2YgYXR0cmlidXRpbmcgc2FtcGxlcyB0byBzeW1ib2xzIGZyb20gZHluYW1pY2FsbHkKK2NvbXBpbGVkIGNvZGUsIGkuZS4gImp1c3QtaW4tdGltZSAoSklUKSBjb2RlIi4gVHlwaWNhbCBKSVQgY29tcGlsZXJzIGxvYWQgdGhlIEpJVCBjb2RlIGludG8KK2Fub255bW91cyBtZW1vcnkgcmVnaW9ucy4gT1Byb2ZpbGUgcmVwb3J0ZWQgdGhlIHNhbXBsZXMgZnJvbSBzdWNoIGNvZGUsIGJ1dCB0aGUgYXR0cmlidXRpb24KK3Byb3ZpZGVkIHdhcyBzaW1wbHk6CisgICAgICAgIDxzY3JlZW4+ImFub246ICZsdDt0Z2lkJmd0OyZsdDthZGRyZXNzIHJhbmdlJmd0OyIgPC9zY3JlZW4+CitEdWUgdG8gdGhpcyBsaW1pdGF0aW9uLCBpdCB3YXNuJ3QgcG9zc2libGUgdG8gcHJvZmlsZSBhcHBsaWNhdGlvbnMgZXhlY3V0ZWQgYnkgdmlydHVhbCBtYWNoaW5lcyAoVk1zKQorbGlrZSB0aGUgSmF2YSBWaXJ0dWFsIE1hY2hpbmUuIE9Qcm9maWxlIG5vdyBjb250YWlucyBhbiBpbmZyYXN0cnVjdHVyZSB0byBzdXBwb3J0IEpJVGVkIGNvZGUuCitBIGRldmVsb3BtZW50IGxpYnJhcnkgaXMgcHJvdmlkZWQgdG8gYWxsb3cgZGV2ZWxvcGVycwordG8gYWRkIHN1cHBvcnQgZm9yIGFueSBWTSB0aGF0IHByb2R1Y2VzIGR5bmFtaWNhbGx5IGNvbXBpbGVkIGNvZGUgKHNlZSB0aGUgPGVtcGhhc2lzPk9Qcm9maWxlIEpJVCBhZ2VudAorZGV2ZWxvcGVyIGd1aWRlPC9lbXBoYXNpcz4pLgorSW4gYWRkaXRpb24sIGJ1aWx0LWluIHN1cHBvcnQgaXMgaW5jbHVkZWQgZm9yIHRoZSBmb2xsb3dpbmc6PC9wYXJhPgorPGl0ZW1pemVkbGlzdD48bGlzdGl0ZW0+SlZNVEkgYWdlbnQgbGlicmFyeSBmb3IgSmF2YSAoMS41IGFuZCBoaWdoZXIpPC9saXN0aXRlbT4KKzxsaXN0aXRlbT5KVk1QSSBhZ2VudCBsaWJyYXJ5IGZvciBKYXZhICgxLjUgYW5kIGxvd2VyKTwvbGlzdGl0ZW0+Cis8L2l0ZW1pemVkbGlzdD4KKzxwYXJhPgorRm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byB1c2UgT1Byb2ZpbGUncyBKSVQgc3VwcG9ydCwgc2VlIDx4cmVmIGxpbmtlbmQ9InNldHVwLWppdCIvPi4KKzwvcGFyYT4KKzwvc2VjdDI+Cis8L3NlY3QxPgorCis8c2VjdDEgaWQ9InJlcXVpcmVtZW50cyI+Cis8dGl0bGU+U3lzdGVtIHJlcXVpcmVtZW50czwvdGl0bGU+CisKKzx2YXJpYWJsZWxpc3Q+CisJPHZhcmxpc3RlbnRyeT4KKwkJPHRlcm0+TGludXgga2VybmVsIDIuMi8yLjQvMi42PC90ZXJtPgorCQk8bGlzdGl0ZW0+PHBhcmE+CisJCQlPUHJvZmlsZSB1c2VzIGEga2VybmVsIG1vZHVsZSB0aGF0IGNhbiBiZSBjb21waWxlZCBmb3IKKwkJCTIuMi4xMSBvciBsYXRlciBhbmQgMi40LiAyLjQuMTAgb3IgYWJvdmUgaXMgcmVxdWlyZWQgaWYgeW91IHVzZSB0aGUgCisJCQlib290LXRpbWUga2VybmVsIG9wdGlvbiA8b3B0aW9uPm5vc21wPC9vcHRpb24+LiAgMi42IGtlcm5lbHMgYXJlIHN1cHBvcnRlZCB3aXRoIHRoZSBpbi1rZXJuZWwKKwkJCU9Qcm9maWxlIGRyaXZlci4gTm90ZSB0aGF0IG9ubHkgMzItYml0IHg4NiBhbmQgSUE2NCBhcmUgc3VwcG9ydGVkIG9uIDIuMi8yLjQga2VybmVscy4KKwkJCTwvcGFyYT4KKworCQkJPHBhcmE+CisJCQkyLjYga2VybmVscyBhcmUgc3Ryb25nbHkgcmVjb21tZW5kZWQuIFVuZGVyIDIuNCwgT1Byb2ZpbGUgbWF5IGNhdXNlIHN5c3RlbSBjcmFzaGVzIGlmIHBvd2VyCisJCQltYW5hZ2VtZW50IGlzIHVzZWQsIG9yIHRoZSBCSU9TIGRvZXMgbm90IGNvcnJlY3RseSBkZWFsIHdpdGggbG9jYWwgQVBJQ3MuCisJCQk8L3BhcmE+CisKKwkJCTxwYXJhPgorCQkJVG8gdXNlIE9Qcm9maWxlJ3MgSklUIHN1cHBvcnQsIGEga2VybmVsIHZlcnNpb24gMi42LjEzIG9yIGxhdGVyIGlzIHJlcXVpcmVkLgorCQkJSW4gZWFybGllciBrZXJuZWwgdmVyc2lvbnMsIHRoZSBhbm9ueW1vdXMgbWVtb3J5IHJlZ2lvbnMgYXJlIG5vdCByZXBvcnRlZCB0byBPUHJvZmlsZSBhbmQgcmVzdWx0cworCQkJaW4gcHJvZmlsaW5nIHJlcG9ydHMgd2l0aG91dCBhbnkgc2FtcGxlcyBpbiB0aGVzZSByZWdpb25zLgorCQkJPC9wYXJhPgorCisJCQk8cGFyYT4KKwkJCVBQQzY0IHByb2Nlc3NvcnMgKFBvd2VyNC9Qb3dlcjUvUFBDOTcwLCBldGMuKSByZXF1aXJlIGEgcmVjZW50ICgmZ3Q7IDIuNi41KSBrZXJuZWwgd2l0aCB0aGUgbGluZSAKKwkJCTxjb25zdGFudD4jZGVmaW5lIFBWXzk3MDwvY29uc3RhbnQ+IHByZXNlbnQgaW4gPGZpbGVuYW1lPmluY2x1ZGUvYXNtLXBwYzY0L3Byb2Nlc3Nvci5oPC9maWxlbmFtZT4uCis8IS0tIEZJWE1FOiBkbyB3ZSByZXF1aXJlIGFsd2F5cyBndGUgMi40LjEwIGZvciBub3NtcCA/IC0tPgorICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICBQcm9maWxpbmcgdGhlIENlbGwgQnJvYWRiYW5kIEVuZ2luZSBQb3dlclBDIFByb2Nlc3NpbmcgRWxlbWVudCAoUFBFKSByZXF1aXJlcyBhIGtlcm5lbCB2ZXJzaW9uCisgICAgICAgICAgICAgICAgICAgICAgIG9mIDIuNi4xOCBvciBtb3JlIHJlY2VudC4KKyAgICAgICAgICAgICAgICAgICAgICAgUHJvZmlsaW5nIHRoZSBDZWxsIEJyb2FkYmFuZCBFbmdpbmUgU3luZXJnaXN0aWMgUHJvY2Vzc2luZyBFbGVtZW50IChTUEUpIHJlcXVpcmVzIGEga2VybmVsIHZlcnNpb24KKyAgICAgICAgICAgICAgICAgICAgICAgb2YgMi42LjIyIG9yIG1vcmUgcmVjZW50LiAgQWRkaXRpb25hbGx5LCBmdWxsIHN1cHBvcnQgb2YgU1BFIHByb2ZpbGluZyByZXF1aXJlcyBhIEJGRCBsaWJyYXJ5CisgICAgICAgICAgICAgICAgICAgICAgIGZyb20gYmludXRpbHMgY29kZSBkYXRlZCBKYW51YXJ5IDIwMDcgb3IgbGF0ZXIuICBUbyBlbnN1cmUgdGhlIHByb3BlciBCRkQgc3VwcG9ydCBleGlzdHMsIHJ1bgorICAgICAgICAgICAgICAgICAgICAgICB0aGUgPGNvZGU+Y29uZmlndXJlPC9jb2RlPiB1dGlsaXR5IHdpdGggPGNvZGU+LS13aXRoLXRhcmdldD1jZWxsLWJlPC9jb2RlPi4KKworCQkgICAgICAgUHJvZmlsaW5nIHRoZSBDZWxsIEJyb2FkYmFuZCBFbmdpbmUgdXNpbmcgU1BVIGV2ZW50cyByZXF1aXJlcyBhIGtlcm5lbCB2ZXJzaW9uIG9mIDIuNi4yOS1yYzEKKwkJICAgICAgIG9yICBtb3JlIHJlY2VudC4KKworICAgICAgICAgICAgICAgICAgICAgICA8bm90ZT5BdHRlbXB0aW5nIHRvIHByb2ZpbGUgU1BFcyB3aXRoIGtlcm5lbCB2ZXJzaW9ucyBvbGRlciB0aGFuIDIuNi4yMiBtYXkgY2F1c2UgdGhlCisgICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbSB0byBjcmFzaC48L25vdGU+CisgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKwkJCisJCQk8cGFyYT4KKwkJCUluc3RydWN0aW9uLUJhc2VkIFNhbXBsaW5nIChJQlMpIHByb2ZpbGUgb24gQU1EIGZhbWlseTEwaCBwcm9jZXNzb3JzIHJlcXVpcmVzIAorCQkJa2VybmVsIHZlcnNpb24gMi42LjI4LXJjMiBvciBsYXRlci4KKwkJCTwvcGFyYT4KKwkJPC9saXN0aXRlbT4KKwk8L3Zhcmxpc3RlbnRyeT4KKwk8dmFybGlzdGVudHJ5PgorCQk8dGVybT5tb2R1dGlscyAyLjQuNiBvciBhYm92ZTwvdGVybT4KKwkJPGxpc3RpdGVtPjxwYXJhPgorCQkJWW91IHNob3VsZCBoYXZlIGluc3RhbGxlZCBtb2R1dGlscyAyLjQuNiBvciBoaWdoZXIgKGluIGZhY3QgZWFybGllciB2ZXJzaW9ucyB3b3JrIHdlbGwgaW4gYWxtb3N0IGFsbAorCQkJY2FzZXMpLgorCQk8L3BhcmE+PC9saXN0aXRlbT4KKwk8L3Zhcmxpc3RlbnRyeT4KKwk8dmFybGlzdGVudHJ5PgorCQk8dGVybT5TdXBwb3J0ZWQgYXJjaGl0ZWN0dXJlPC90ZXJtPgorCQk8bGlzdGl0ZW0+PHBhcmE+CisJCQlGb3IgSW50ZWwgSUEzMiwgYSBDUFUgd2l0aCBlaXRoZXIgYSBQNiBnZW5lcmF0aW9uIG9yIFBlbnRpdW0gNCBjb3JlIGlzCisJCQlyZXF1aXJlZC4gSW4gbWFya2V0aW5nIHRlcm1zIHRoaXMgdHJhbnNsYXRlcyB0byBhbnl0aGluZworCQkJYmV0d2VlbiBhbiBJbnRlbCBQZW50aXVtIFBybyAobm90IFBlbnRpdW0gQ2xhc3NpY3MpIGFuZAorCQkJYSBQZW50aXVtIDQgLyBYZW9uLCBpbmNsdWRpbmcgYWxsIENlbGVyb25zLiAgVGhlIEFNRAorCQkJQXRobG9uLCBPcHRlcm9uLCBQaGVub20sIGFuZCBUdXJpb24gQ1BVcyBhcmUgYWxzbyBzdXBwb3J0ZWQuICBPdGhlciBJQTMyCisJCQlDUFUgdHlwZXMgb25seSBzdXBwb3J0IHRoZSBSVEMgbW9kZSBvZiBPUHJvZmlsZTsgcGxlYXNlCisJCQlzZWUgbGF0ZXIgaW4gdGhpcyBtYW51YWwgZm9yIGRldGFpbHMuICBIeXBlci10aHJlYWRlZCBQZW50aXVtIElWcworCQkJYXJlIG5vdCBzdXBwb3J0ZWQgaW4gMi40LiBGb3IgMi40IGtlcm5lbHMsIHRoZSBJbnRlbAorCQkJSUEtNjQgQ1BVcyBhcmUgYWxzbyBzdXBwb3J0ZWQuIEZvciAyLjYga2VybmVscywgdGhlcmUgaXMgYWRkaXRpb25hbGx5CisJCQlzdXBwb3J0IGZvciBBbHBoYSBwcm9jZXNzb3JzLCBNSVBTLCBBUk0sIHg4Ni02NCwgc3BhcmM2NCwgcHBjNjQsIEFWUjMyLCBhbmQsCisJCQlpbiB0aW1lciBtb2RlLCBQQS1SSVNDIGFuZCBzMzkwLgorCQk8L3BhcmE+PC9saXN0aXRlbT4KKwk8L3Zhcmxpc3RlbnRyeT4KKwk8dmFybGlzdGVudHJ5PgorCQk8dGVybT5Vbmlwcm9jZXNzb3Igb3IgU01QPC90ZXJtPgorCQk8bGlzdGl0ZW0+PHBhcmE+CisJCQlTTVAgbWFjaGluZXMgYXJlIGZ1bGx5IHN1cHBvcnRlZC4KKwkJPC9wYXJhPjwvbGlzdGl0ZW0+CisJPC92YXJsaXN0ZW50cnk+CisJPHZhcmxpc3RlbnRyeT4KKwkJPHRlcm0+UmVxdWlyZWQgbGlicmFyaWVzPC90ZXJtPgorCQk8bGlzdGl0ZW0+PHBhcmE+CisJCQlUaGVzZSBsaWJyYXJpZXMgYXJlIHJlcXVpcmVkIDogPGZpbGVuYW1lPnBvcHQ8L2ZpbGVuYW1lPiwgPGZpbGVuYW1lPmJmZDwvZmlsZW5hbWU+LAorCQkJPGZpbGVuYW1lPmxpYmVydHk8L2ZpbGVuYW1lPiAoZGViaWFuIHVzZXJzOiBsaWJpYmVydHkgaXMgcHJvdmlkZWQgaW4gYmludXRpbHMtZGV2IHBhY2thZ2UpLCA8ZmlsZW5hbWU+ZGw8L2ZpbGVuYW1lPiwKKwkJCXBsdXMgdGhlIHN0YW5kYXJkIEMrKyBsaWJyYXJpZXMuCisJCTwvcGFyYT48L2xpc3RpdGVtPgorCTwvdmFybGlzdGVudHJ5PgorCTx2YXJsaXN0ZW50cnk+CisJCTx0ZXJtPlJlcXVpcmVkIHVzZXIgYWNjb3VudDwvdGVybT4KKwkJPGxpc3RpdGVtPjxwYXJhPgorCQkJRm9yIHNlY3VyZSBwcm9jZXNzaW5nIG9mIHNhbXBsZSBkYXRhIGZyb20gSklUIHZpcnR1YWwgbWFjaGluZXMgKGUuZy4sIEphdmEpLAorCQkJdGhlIHNwZWNpYWwgdXNlciBhY2NvdW50ICJvcHJvZmlsZSIgbXVzdCBleGlzdCBvbiB0aGUgc3lzdGVtLiAgVGhlICdjb25maWd1cmUnCisJCQlhbmQgJ21ha2UgaW5zdGFsbCcgb3BlcmF0aW9ucyB3aWxsIHByaW50IHdhcm5pbmcgbWVzc2FnZXMgaWYgdGhpcworCQkJYWNjb3VudCBpcyBub3QgZm91bmQuICBJZiB5b3UgaW50ZW5kIHRvIHByb2ZpbGUgSklUZWQgY29kZSwgeW91IG11c3QgY3JlYXRlCisJCQlhIGdyb3VwIGFjY291bnQgbmFtZWQgJ29wcm9maWxlJyBhbmQgdGhlbiBjcmVhdGUgdGhlICdvcHJvZmlsZScgdXNlciBhY2NvdW50LAorCQkJc2V0dGluZyB0aGUgZGVmYXVsdCBncm91cCB0byAnb3Byb2ZpbGUnLiAgQSBydW50aW1lIGVycm9yIG1lc3NhZ2UgaXMgcHJpbnRlZCB0bworCQkJdGhlIG9wcm9maWxlIGRhZW1vbiBsb2cgd2hlbiBwcm9jZXNzaW5nIEpJVCBzYW1wbGVzIGlmIHRoaXMgc3BlY2lhbCB1c2VyCisJCQlhY2NvdW50IGNhbm5vdCBiZSBmb3VuZC4KKwkJPC9wYXJhPjwvbGlzdGl0ZW0+CisJPC92YXJsaXN0ZW50cnk+CisJPHZhcmxpc3RlbnRyeT4KKwkJPHRlcm0+T1Byb2ZpbGUgR1VJPC90ZXJtPgorCQk8bGlzdGl0ZW0+PHBhcmE+CisJCQlUaGUgdXNlIG9mIHRoZSBHVUkgdG8gc3RhcnQgdGhlIHByb2ZpbGVyIHJlcXVpcmVzIHRoZSA8ZmlsZW5hbWU+UXQ8L2ZpbGVuYW1lPiBsaWJyYXJ5LgorCQkJRWl0aGVyIDxmaWxlbmFtZT5RdCAzPC9maWxlbmFtZT4gb3IgPGZpbGVuYW1lPlF0IDQ8L2ZpbGVuYW1lPiBzaG91bGQgd29yay4KKwkJPC9wYXJhPjwvbGlzdGl0ZW0+CisJPC92YXJsaXN0ZW50cnk+CisJPHZhcmxpc3RlbnRyeT4KKyAJCTx0ZXJtPjxhY3JvbnltPkVMRjwvYWNyb255bT48L3Rlcm0+CisJCTxsaXN0aXRlbT48cGFyYT4KKwkJCVByb2JhYmx5IG5vdCB0b28gc3RyZW51b3VzIGEgcmVxdWlyZW1lbnQsIGJ1dCBvbGRlciA8YWNyb255bT5BLk9VVDwvYWNyb255bT4gYmluYXJpZXMvbGlicmFyaWVzIGFyZSBub3Qgc3VwcG9ydGVkLgorCQk8L3BhcmE+PC9saXN0aXRlbT4KKwk8L3Zhcmxpc3RlbnRyeT4KKwk8dmFybGlzdGVudHJ5PgorCQk8dGVybT5LJmFtcDtSIGNvZGluZyBzdHlsZTwvdGVybT4KKwkJPGxpc3RpdGVtPjxwYXJhPgorCQkJT0ssIHNvIGl0J3Mgbm90IHJlYWxseSBhIHJlcXVpcmVtZW50LCBidXQgSSB3aXNoIGl0IHdhcy4uLgorCQk8L3BhcmE+PC9saXN0aXRlbT4KKwk8L3Zhcmxpc3RlbnRyeT4KKzwvdmFyaWFibGVsaXN0PgorCisKKzwvc2VjdDE+CisKKzxzZWN0MSBpZD0icmVzb3VyY2VzIj4KKzx0aXRsZT5JbnRlcm5ldCByZXNvdXJjZXM8L3RpdGxlPgorCis8dmFyaWFibGVsaXN0PgorCTx2YXJsaXN0ZW50cnk+CisJCTx0ZXJtPldlYiBwYWdlPC90ZXJtPgorCQk8bGlzdGl0ZW0+PHBhcmE+CisJCQlUaGVyZSBpcyBhIHdlYiBwYWdlICh3aGljaCB5b3UgbWF5IGJlIHJlYWRpbmcgbm93KSBhdAorCQkJPHVsaW5rIHVybD0iaHR0cDovL29wcm9maWxlLnNmLm5ldC8iPmh0dHA6Ly9vcHJvZmlsZS5zZi5uZXQvPC91bGluaz4uCisJCTwvcGFyYT48L2xpc3RpdGVtPgorCTwvdmFybGlzdGVudHJ5PgorCTx2YXJsaXN0ZW50cnk+CisJCTx0ZXJtPkRvd25sb2FkPC90ZXJtPgorCQk8bGlzdGl0ZW0+PHBhcmE+CisJCQlZb3UgY2FuIGRvd25sb2FkIGEgc291cmNlIHRhcmJhbGwgb3IgY2hlY2sgb3V0IGNvZGUgZnJvbQorCQkJdGhlIGNvZGUgcmVwb3NpdG9yeSBhdCB0aGUgc291cmNlZm9yZ2UgcGFnZSwKKwkJCTx1bGluayB1cmw9Imh0dHA6Ly9zZi5uZXQvcHJvamVjdHMvb3Byb2ZpbGUvIj5odHRwOi8vc2YubmV0L3Byb2plY3RzL29wcm9maWxlLzwvdWxpbms+LgorCQk8L3BhcmE+PC9saXN0aXRlbT4KKwk8L3Zhcmxpc3RlbnRyeT4KKwk8dmFybGlzdGVudHJ5PgorCQk8dGVybT5NYWlsaW5nIGxpc3Q8L3Rlcm0+CisJCTxsaXN0aXRlbT48cGFyYT4KKwkJCVRoZXJlIGlzIGEgbG93LXRyYWZmaWMgT1Byb2ZpbGUtc3BlY2lmaWMgbWFpbGluZyBsaXN0LCBkZXRhaWxzIGF0CisJCQk8dWxpbmsgdXJsPSJodHRwOi8vc2YubmV0L21haWwvP2dyb3VwX2lkPTE2MTkxIj5odHRwOi8vc2YubmV0L21haWwvP2dyb3VwX2lkPTE2MTkxPC91bGluaz4uCisJCTwvcGFyYT48L2xpc3RpdGVtPgorCTwvdmFybGlzdGVudHJ5PgorCTx2YXJsaXN0ZW50cnk+CisJCTx0ZXJtPkJ1ZyB0cmFja2VyPC90ZXJtPgorCQk8bGlzdGl0ZW0+PHBhcmE+CisJCQlUaGVyZSBpcyBhIGJ1ZyB0cmFja2VyIGZvciBPUHJvZmlsZSBhdCBTb3VyY2VGb3JnZSwKKwkJCTx1bGluayB1cmw9Imh0dHA6Ly9zZi5uZXQvdHJhY2tlci8/Z3JvdXBfaWQ9MTYxOTEmYW1wO2F0aWQ9MTE2MTkxIj5odHRwOi8vc2YubmV0L3RyYWNrZXIvP2dyb3VwX2lkPTE2MTkxJmFtcDthdGlkPTExNjE5MTwvdWxpbms+LgorCQk8L3BhcmE+PC9saXN0aXRlbT4KKwk8L3Zhcmxpc3RlbnRyeT4KKwk8dmFybGlzdGVudHJ5PgorCQk8dGVybT5JUkMgY2hhbm5lbDwvdGVybT4KKwkJPGxpc3RpdGVtPjxwYXJhPgorCQkJU2V2ZXJhbCBPUHJvZmlsZSBkZXZlbG9wZXJzIGFuZCB1c2VycyBzb21ldGltZXMgaGFuZyBvdXQgb24gY2hhbm5lbCA8Y29tbWFuZD4jb3Byb2ZpbGU8L2NvbW1hbmQ+CisJCQlvbiB0aGUgPHVsaW5rIHVybD0iaHR0cDovL29mdGMubmV0Ij5PRlRDPC91bGluaz4gbmV0d29yay4gCisJCTwvcGFyYT48L2xpc3RpdGVtPgorCTwvdmFybGlzdGVudHJ5PgorPC92YXJpYWJsZWxpc3Q+CisKKzwvc2VjdDE+CisKKzxzZWN0MSBpZD0iaW5zdGFsbCI+Cis8dGl0bGU+SW5zdGFsbGF0aW9uPC90aXRsZT4KKworPHBhcmE+CitGaXJzdCB5b3UgbmVlZCB0byBidWlsZCBPUHJvZmlsZSBhbmQgaW5zdGFsbCBpdC4gPGNvbW1hbmQ+Li9jb25maWd1cmU8L2NvbW1hbmQ+LCA8Y29tbWFuZD5tYWtlPC9jb21tYW5kPiwgPGNvbW1hbmQ+bWFrZSBpbnN0YWxsPC9jb21tYW5kPgoraXMgb2Z0ZW4gYWxsIHlvdSBuZWVkLCBidXQgbm90ZSB0aGVzZSBhcmd1bWVudHMgdG8gPGNvbW1hbmQ+Li9jb25maWd1cmU8L2NvbW1hbmQ+IDoKKzwvcGFyYT4KKzx2YXJpYWJsZWxpc3Q+CisJPHZhcmxpc3RlbnRyeT4KKwkJPHRlcm0+PG9wdGlvbj4tLXdpdGgtbGludXg8L29wdGlvbj48L3Rlcm0+CisJCTxsaXN0aXRlbT48cGFyYT4KKwkJCVVzZSB0aGlzIG9wdGlvbiB0byBzcGVjaWZ5IHRoZSBsb2NhdGlvbiBvZiB0aGUga2VybmVsIHNvdXJjZSB0cmVlIHlvdSB3aXNoCisJCQl0byBjb21waWxlIGFnYWluc3QuIFRoZSBrZXJuZWwgbW9kdWxlIGlzIGJ1aWx0IGFnYWluc3QgdGhpcyBzb3VyY2UgYW5kCisJCQl3aWxsIG9ubHkgd29yayB3aXRoIGEgcnVubmluZyBrZXJuZWwgYnVpbHQgZnJvbSB0aGUgc2FtZSBzb3VyY2Ugd2l0aAorCQkJZXhhY3Qgc2FtZSBvcHRpb25zLCBzbyBpdCBpcyBpbXBvcnRhbnQgeW91IHNwZWNpZnkgdGhpcyBvcHRpb24gaWYgeW91IG5lZWQKKwkJCXRvLgorCQk8L3BhcmE+PC9saXN0aXRlbT4KKwk8L3Zhcmxpc3RlbnRyeT4KKwk8dmFybGlzdGVudHJ5PgorCQk8dGVybT48b3B0aW9uPi0td2l0aC1qYXZhPC9vcHRpb24+PC90ZXJtPgorCQk8bGlzdGl0ZW0+CisJCQk8cGFyYT4KKwkJCVVzZSB0aGlzIG9wdGlvbiBpZiB5b3UgbmVlZCB0byBwcm9maWxlIEphdmEgYXBwbGljYXRpb25zLiAgQWxzbywgc2VlCisJCQk8eHJlZiBsaW5rZW5kPSJyZXF1aXJlbWVudHMiLz4sICJSZXF1aXJlZCB1c2VyIGFjY291bnQiLiAgVGhpcyBvcHRpb24KKwkJCWlzIHVzZWQgdG8gc3BlY2lmeSB0aGUgbG9jYXRpb24gb2YgdGhlIEphdmEgRGV2ZWxvcG1lbnQgS2l0IChKREspCisJCQlzb3VyY2UgdHJlZSB5b3Ugd2lzaCB0byB1c2UuIFRoaXMgaXMgbmVjZXNzYXJ5IHRvIGdldCB0aGUgaW50ZXJmYWNlIGRlc2NyaXB0aW9uCisJCQlvZiB0aGUgSlZNUEkgKG9yIEpWTVRJKSBpbnRlcmZhY2UgdG8gY29tcGlsZSB0aGUgSklUIHN1cHBvcnQgY29kZSBzdWNjZXNzZnVsbHkuCisJCQk8L3BhcmE+CisJCQk8bm90ZT4KKwkJCQk8cGFyYT4KKwkJCQlUaGUgSmF2YSBSdW50aW1lIEVudmlyb25tZW50IChKUkUpIGRvZXMgbm90IGluY2x1ZGUgdGhlIGRldmVsb3BtZW50CisJCQkJZmlsZXMgdGhhdCBhcmUgcmVxdWlyZWQgdG8gY29tcGlsZSB0aGUgSklUIHN1cHBvcnQgY29kZSwgc28gdGhlIGZ1bGwKKwkJCQlKREsgbXVzdCBiZSBpbnN0YWxsZWQgaW4gb3JkZXIgdG8gdXNlIHRoaXMgb3B0aW9uLgorCQkJCTwvcGFyYT4KKwkJCTwvbm90ZT4KKwkJCTxwYXJhPgorCQkJQnkgZGVmYXVsdCwgdGhlIE9wcm9maWxlIEpJVCBzdXBwb3J0IGxpYnJhcmllcyB3aWxsIGJlIGluc3RhbGxlZCBpbgorCQkJPGZpbGVuYW1lPiZsdDtvcHJvZl9pbnN0YWxsX2RpciZndDsvbGliL29wcm9maWxlPC9maWxlbmFtZT4uICBUbyBidWlsZAorCQkJYW5kIGluc3RhbGwgT1Byb2ZpbGUgYW5kIHRoZSBKSVQgc3VwcG9ydCBsaWJyYXJpZXMgYXMgNjQtYml0LCB5b3UgY2FuCisJCQlkbyBzb21ldGhpbmcgbGlrZSB0aGUgZm9sbG93aW5nOgorCQkJPHNjcmVlbj4KKwkJCSMgQ0ZMQUdTPSItbTY0IiBDWFhGTEFHUz0iLW02NCIgLi9jb25maWd1cmUgXAorCQkJLS13aXRoLWtlcm5lbC1zdXBwb3J0IC0td2l0aC1qYXZhPXtteV9qZGtfaW5zdGFsbGRpcn0gXAorCQkJLS1saWJkaXI9L3Vzci9sb2NhbC9saWI2NAorCQkJPC9zY3JlZW4+CisJCQk8L3BhcmE+CisJCQk8bm90ZT4KKwkJCQk8cGFyYT4KKwkJCQlJZiB5b3UgZW5jb3VudGVyIGVycm9ycyBidWlsZGluZyA2NC1iaXQsIHlvdSBzaG91bGQKKwkJCQlpbnN0YWxsIGxpYnRvb2wgMS41LjI2IG9yIGxhdGVyIHNpbmNlIHRoYXQgcmVsZWFzZSBvZgorCQkJCWxpYnRvb2wgZml4ZXMga25vd24gcHJvYmxlbXMgZm9yIGNlcnRhaW4gcGxhdGZvcm1zLgorCQkJCUlmIHlvdSBpbnN0YWxsIGxpYnRvb2wgaW50byBhIG5vbi1zdGFuZGFyZCBsb2NhdGlvbiwKKwkJCQl5b3UnbGwgbmVlZCB0byBlZGl0IHRoZSBpbnZvY2F0aW9uIG9mICdhY2xvY2FsJyBpbgorCQkJCU9Qcm9maWxlJ3MgYXV0b2dlbi5zaCBhcyBmb2xsb3dzIChhc3N1bWUgYW4gaW5zdGFsbAorCQkJCWxvY2F0aW9uIG9mIC91c3IvbG9jYWwpOgorCQkJCTwvcGFyYT4KKwkJCQk8cGFyYT4KKwkJCQk8Y29kZT5hY2xvY2FsIC1JIG00IC1JIC91c3IvbG9jYWwvc2hhcmUvYWNsb2NhbDwvY29kZT4KKwkJCQk8L3BhcmE+CisJCQk8L25vdGU+IAorCQk8L2xpc3RpdGVtPgorCTwvdmFybGlzdGVudHJ5PgorCTx2YXJsaXN0ZW50cnk+CisJCTx0ZXJtPjxvcHRpb24+LS13aXRoLWtlcm5lbC1zdXBwb3J0PC9vcHRpb24+PC90ZXJtPgorCQk8bGlzdGl0ZW0+PHBhcmE+CisJCQlVc2UgdGhpcyBvcHRpb24gd2l0aCAyLjYgYW5kIGFib3ZlIGtlcm5lbHMgdG8gaW5kaWNhdGUgdGhlIAorCSAgICAJCWtlcm5lbCBwcm92aWRlcyB0aGUgT1Byb2ZpbGUgZGV2aWNlIGRyaXZlci4KKwkJPC9wYXJhPjwvbGlzdGl0ZW0+CisJPC92YXJsaXN0ZW50cnk+CisJPHZhcmxpc3RlbnRyeT4KKwkJPHRlcm0+PG9wdGlvbj4tLXdpdGgtcXQtZGlyL2luY2x1ZGVzL2xpYnJhcmllczwvb3B0aW9uPjwvdGVybT4KKwkJPGxpc3RpdGVtPjxwYXJhPgorCQkJU3BlY2lmeSB0aGUgbG9jYXRpb24gb2YgUXQgaGVhZGVycyBhbmQgbGlicmFyaWVzLiBJdCBkZWZhdWx0cyB0byBzZWFyY2hpbmcgaW4KKwkJCTxjb25zdGFudD4kUVRESVI8L2NvbnN0YW50PiBpZiB0aGVzZSBhcmUgbm90IHNwZWNpZmllZC4KKwkJPC9wYXJhPjwvbGlzdGl0ZW0+CisJPC92YXJsaXN0ZW50cnk+CisJPHZhcmxpc3RlbnRyeSBpZD0iZGlzYWJsZS13ZXJyb3IiPgorCQk8dGVybT48b3B0aW9uPi0tZGlzYWJsZS13ZXJyb3I8L29wdGlvbj48L3Rlcm0+CisJCTxsaXN0aXRlbT48cGFyYT4KKwkJCURldmVsb3BtZW50IHZlcnNpb25zIG9mIE9Qcm9maWxlIGJ1aWxkIGJ5CisJCQlkZWZhdWx0IHdpdGggPG9wdGlvbj4tV2Vycm9yPC9vcHRpb24+LiBUaGlzIG9wdGlvbiB0dXJucworCQkJPG9wdGlvbj4tV2Vycm9yPC9vcHRpb24+IG9mZi4KKwkJPC9wYXJhPjwvbGlzdGl0ZW0+CisJPC92YXJsaXN0ZW50cnk+CisJPHZhcmxpc3RlbnRyeSBpZD0iZGlzYWJsZS1vcHRpbWl6YXRpb24iPgorCQk8dGVybT48b3B0aW9uPi0tZGlzYWJsZS1vcHRpbWl6YXRpb248L29wdGlvbj48L3Rlcm0+CisJCTxsaXN0aXRlbT48cGFyYT4KKwkJCURpc2FibGUgdGhlIDxvcHRpb24+LU8yPC9vcHRpb24+IGNvbXBpbGVyIGZsYWcKKwkJCSh1c2VmdWwgaWYgeW91IGRpc2NvdmVyIGFuIE9Qcm9maWxlIGJ1ZyBhbmQgd2FudCB0byBnaXZlIGEgdXNlZnVsCisJCQliYWNrLXRyYWNlIGV0Yy4pCisJCTwvcGFyYT48L2xpc3RpdGVtPgorCTwvdmFybGlzdGVudHJ5PgorPC92YXJpYWJsZWxpc3Q+Cis8cGFyYT4KK1lvdSdsbCBuZWVkIHRvIGhhdmUgYSBjb25maWd1cmVkIGtlcm5lbCBzb3VyY2UgZm9yIHRoZSBjdXJyZW50IGtlcm5lbAordG8gYnVpbGQgdGhlIG1vZHVsZSBmb3IgMi40IGtlcm5lbHMuICBTaW5jZSBhbGwgZGlzdHJpYnV0aW9ucyBwcm92aWRlIGRpZmZlcmVudCBrZXJuZWxzIGl0J3MgdW5saWtlbHkgdGhlIHJ1bm5pbmcga2VybmVsIG1hdGNoIHRoZSBjb25maWd1cmVkIHNvdXJjZQoreW91IGluc3RhbGxlZC4gVGhlIHNhZmVzdCB3YXkgaXMgdG8gcmVjb21waWxlIHlvdXIgb3duIGtlcm5lbCwgcnVuIGl0IGFuZCBjb21waWxlIG9wcm9maWxlLiBJdCBpcyBhbHNvIHJlY29tbWVuZGVkIHRoYXQgaWYgeW91IGhhdmUgYQordW5pcHJvY2Vzc29yIG1hY2hpbmUsIHlvdSBlbmFibGUgdGhlIGxvY2FsIEFQSUMgLyBJT19BUElDIHN1cHBvcnQgZm9yCit5b3VyIGtlcm5lbCAodGhpcyBpcyBhdXRvbWF0aWNhbGx5IGVuYWJsZWQgZm9yIFNNUCBrZXJuZWxzKS4gV2l0aCBtYW55IEJJT1MsIGtlcm5lbCAmZ3Q7PSAyLjYuOSBhbmQgVVAga2VybmVsIGl0J3Mgbm90IHN1ZmZpY2llbnQgdG8gZW5hYmxlIHRoZSBsb2NhbCBBUElDIHlvdSBtdXN0IGFsc28gdHVybiBpdCBvbiBleHBsaWNpdGx5IGF0IGJvb3QgdGltZSBieSBwcm92aWRpbmcgImxhcGljIiBvcHRpb24gdG8gdGhlIGtlcm5lbC4gT24KK21hY2hpbmVzIHdpdGggcG93ZXIgbWFuYWdlbWVudCwgc3VjaCBhcyBsYXB0b3BzLCB0aGUgcG93ZXIgbWFuYWdlbWVudAorbXVzdCBiZSB0dXJuZWQgb2ZmIHdoZW4gdXNpbmcgT1Byb2ZpbGUgd2l0aCAyLjQga2VybmVscy4gVGhlIHBvd2VyIG1hbmFnZW1lbnQgc29mdHdhcmUKK2luIHRoZSBCSU9TIGNhbm5vdCBoYW5kbGUgdGhlIG5vbi1tYXNrYWJsZSBpbnRlcnJ1cHRzIChOTUlzKSB1c2VkIGJ5CitPUHJvZmlsZSBmb3IgZGF0YSBjb2xsZWN0aW9uLiBJZiB5b3UgdXNlIHRoZSBOTUkgd2F0Y2hkb2csIGJlIGF3YXJlIHRoYXQKK3RoZSB3YXRjaGRvZyBpcyBkaXNhYmxlZCB3aGVuIHByb2ZpbGluZyBzdGFydHMsIGFuZCBub3QgcmUtZW5hYmxlZCB1bnRpbCB0aGUKK09Qcm9maWxlIG1vZHVsZSBpcyByZW1vdmVkIChvciwgaW4gMi42LCB3aGVuIE9Qcm9maWxlIGlzIG5vdCBydW5uaW5nKS4gSWYgeW91IGNvbXBpbGUgT1Byb2ZpbGUgZm9yCithIDIuMiBrZXJuZWwgeW91IG11c3QgYmUgcm9vdCB0byBjb21waWxlIHRoZSBtb2R1bGUuIElmIHlvdSBhcmUgdXNpbmcKKzIuNiBrZXJuZWxzIG9yIGhpZ2hlciwgeW91IGRvIG5vdCBuZWVkIGtlcm5lbCBzb3VyY2UsIGFzIGxvbmcgYXMgdGhlCitPUHJvZmlsZSBkcml2ZXIgaXMgZW5hYmxlZDsgYWRkaXRpb25hbGx5LCB5b3Ugc2hvdWxkIG5vdCBuZWVkIHRvIGRpc2FibGUKK3Bvd2VyIG1hbmFnZW1lbnQuCis8L3BhcmE+Cis8cGFyYT4KK1BsZWFzZSBub3RlIHRoYXQgeW91IG11c3Qgc2F2ZSBvciBoYXZlIGF2YWlsYWJsZSB0aGUgPGZpbGVuYW1lPnZtbGludXg8L2ZpbGVuYW1lPiBmaWxlCitnZW5lcmF0ZWQgZHVyaW5nIGEga2VybmVsIGNvbXBpbGUsIGFzIE9Qcm9maWxlIG5lZWRzIGl0ICh5b3UgY2FuIHVzZQorPG9wdGlvbj4tLW5vLXZtbGludXg8L29wdGlvbj4sIGJ1dCB0aGlzIHdpbGwgcHJldmVudCBrZXJuZWwgcHJvZmlsaW5nKS4KKzwvcGFyYT4KKworPC9zZWN0MT4KKworPHNlY3QxIGlkPSJ1bmluc3RhbGwiPgorPHRpdGxlPlVuaW5zdGFsbGluZyBPUHJvZmlsZTwvdGl0bGU+Cis8cGFyYT4KK1lvdSBtdXN0IGhhdmUgdGhlIHNvdXJjZSB0cmVlIGF2YWlsYWJsZSB0byB1bmluc3RhbGwgT1Byb2ZpbGU7IGEgPGNvbW1hbmQ+bWFrZSB1bmluc3RhbGw8L2NvbW1hbmQ+IHdpbGwKK3JlbW92ZSBhbGwgaW5zdGFsbGVkIGZpbGVzIGV4Y2VwdCB5b3VyIGNvbmZpZ3VyYXRpb24gZmlsZSBpbiB0aGUgZGlyZWN0b3J5IDxmaWxlbmFtZT5+Ly5vcHJvZmlsZTwvZmlsZW5hbWU+LgorPC9wYXJhPgorPC9zZWN0MT4KKworPC9jaGFwdGVyPgorCis8Y2hhcHRlciBpZD0ib3ZlcnZpZXciPiAKKzx0aXRsZT5PdmVydmlldzwvdGl0bGU+CisKKzxzZWN0MSBpZD0iZ2V0dGluZy1zdGFydGVkIj4KKzx0aXRsZT5HZXR0aW5nIHN0YXJ0ZWQ8L3RpdGxlPgorPHBhcmE+CitCZWZvcmUgeW91IGNhbiB1c2UgT1Byb2ZpbGUsIHlvdSBtdXN0IHNldCBpdCB1cC4gVGhlIG1pbmltdW0gc2V0dXAgcmVxdWlyZWQgZm9yIHRoaXMKK2lzIHRvIHRlbGwgT1Byb2ZpbGUgd2hlcmUgdGhlIDxmaWxlbmFtZT52bWxpbnV4PC9maWxlbmFtZT4gZmlsZSBjb3JyZXNwb25kaW5nIHRvIHRoZQorcnVubmluZyBrZXJuZWwgaXMsIGZvciBleGFtcGxlIDoKKzwvcGFyYT4KKzxzY3JlZW4+b3Bjb250cm9sIC0tdm1saW51eD0vYm9vdC92bWxpbnV4LWB1bmFtZSAtcmA8L3NjcmVlbj4KKzxwYXJhPgorSWYgeW91IGRvbid0IHdhbnQgdG8gcHJvZmlsZSB0aGUga2VybmVsIGl0c2VsZiwKK3lvdSBjYW4gdGVsbCBPUHJvZmlsZSB5b3UgZG9uJ3QgaGF2ZSBhIDxmaWxlbmFtZT52bWxpbnV4PC9maWxlbmFtZT4gZmlsZSA6Cis8L3BhcmE+Cis8c2NyZWVuPm9wY29udHJvbCAtLW5vLXZtbGludXg8L3NjcmVlbj4KKzxwYXJhPgorTm93IHdlIGFyZSByZWFkeSB0byBzdGFydCB0aGUgZGFlbW9uICg8Y29tbWFuZD5vcHJvZmlsZWQ8L2NvbW1hbmQ+KSB3aGljaCBjb2xsZWN0cwordGhlIHByb2ZpbGUgZGF0YSA6Cis8L3BhcmE+Cis8c2NyZWVuPm9wY29udHJvbCAtLXN0YXJ0PC9zY3JlZW4+Cis8cGFyYT4KK1doZW4gSSB3YW50IHRvIHN0b3AgcHJvZmlsaW5nLCBJIGNhbiBkbyBzbyB3aXRoIDoKKzwvcGFyYT4KKzxzY3JlZW4+b3Bjb250cm9sIC0tc2h1dGRvd248L3NjcmVlbj4KKzxwYXJhPgorTm90ZSB0aGF0IHVubGlrZSA8Y29tbWFuZD5ncHJvZjwvY29tbWFuZD4sIG5vIGluc3RydW1lbnRhdGlvbiAoPG9wdGlvbj4tcGc8L29wdGlvbj4KK2FuZCA8b3B0aW9uPi1hPC9vcHRpb24+IG9wdGlvbnMgdG8gPGNvbW1hbmQ+Z2NjPC9jb21tYW5kPikKK2lzIG5lY2Vzc2FyeS4KKzwvcGFyYT4KKzxwYXJhPgorUGVyaW9kaWNhbGx5IChvciBvbiA8Y29tbWFuZD5vcGNvbnRyb2wgLS1zaHV0ZG93bjwvY29tbWFuZD4gb3IgPGNvbW1hbmQ+b3Bjb250cm9sIC0tZHVtcDwvY29tbWFuZD4pCit0aGUgcHJvZmlsZSBkYXRhIGlzIHdyaXR0ZW4gb3V0IGludG8gdGhlICRTRVNTSU9OX0RJUi9zYW1wbGVzIGRpcmVjdG9yeSAoYnkgZGVmYXVsdCBhdCA8ZmlsZW5hbWU+L3Zhci9saWIvb3Byb2ZpbGUvc2FtcGxlczwvZmlsZW5hbWU+KS4KK1RoZXNlIHByb2ZpbGUgZmlsZXMgY292ZXIgc2hhcmVkIGxpYnJhcmllcywgYXBwbGljYXRpb25zLCB0aGUga2VybmVsICh2bWxpbnV4KSwgYW5kIGtlcm5lbCBtb2R1bGVzLgorWW91IGNhbiBjbGVhciB0aGUgcHJvZmlsZSBkYXRhIChhdCBhbnkgdGltZSkgd2l0aCA8Y29tbWFuZD5vcGNvbnRyb2wgLS1yZXNldDwvY29tbWFuZD4uCis8L3BhcmE+Cis8cGFyYT4KK1RvIHBsYWNlIHRoZXNlIHNhbXBsZSBkYXRhYmFzZSBmaWxlcyBpbiBhIHNwZWNpZmljIGRpcmVjdG9yeSBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0IGxvY2F0aW9uICg8ZmlsZW5hbWU+L3Zhci9saWIvb3Byb2ZpbGU8L2ZpbGVuYW1lPikgdXNlIHRoZSA8b3B0aW9uPi0tc2Vzc2lvbi1kaXI9ZGlyPC9vcHRpb24+IG9wdGlvbi4gWW91IG11c3QgYWxzbyBzcGVjaWZ5IHRoZSA8b3B0aW9uPi0tc2Vzc2lvbi1kaXI8L29wdGlvbj4gdG8gdGVsbCB0aGUgdG9vbHMgdG8gY29udGludWUgdXNpbmcgdGhpcyBkaXJlY3RvcnkuIChJbiB0aGUgZnV0dXJlLCB3ZSBzaG91bGQgYWxsb3cgdGhpcyB0byBiZSBzcGVjaWZpZWQgaW4gYW4gZW52aXJvbm1lbnQgdmFyaWFibGUuKSA6Cis8L3BhcmE+Cis8c2NyZWVuPm9wY29udHJvbCAtLW5vLXZtbGludXggLS1zZXNzaW9uLWRpcj0vaG9tZS9tZS90bXBzZXNzaW9uPC9zY3JlZW4+Cis8c2NyZWVuPm9wY29udHJvbCAtLXN0YXJ0IC0tc2Vzc2lvbi1kaXI9L2hvbWUvbWUvdG1wc2Vzc2lvbjwvc2NyZWVuPgorPHBhcmE+CitZb3UgY2FuIGdldCBzdW1tYXJpZXMgb2YgdGhpcyBkYXRhIGluIGEgbnVtYmVyIG9mIHdheXMgYXQgYW55IHRpbWUuIFRvIGdldCBhIHN1bW1hcnkgb2YKK2RhdGEgYWNyb3NzIHRoZSBlbnRpcmUgc3lzdGVtIGZvciBhbGwgb2YgdGhlc2UgcHJvZmlsZXMsIHlvdSBjYW4gZG8gOgorPC9wYXJhPgorPHNjcmVlbj5vcHJlcG9ydCBbLS1zZXNzaW9uLWRpcj1kaXJdPC9zY3JlZW4+Cis8cGFyYT4KK09yIHRvIGdldCBhIG1vcmUgZGV0YWlsZWQgc3VtbWFyeSwgZm9yIGEgcGFydGljdWxhciBpbWFnZSwgeW91IGNhbiBkbyBzb21ldGhpbmcgbGlrZSA6Cis8L3BhcmE+Cis8c2NyZWVuPm9wcmVwb3J0IC1sIC9ib290L3ZtbGludXgtYHVuYW1lIC1yYDwvc2NyZWVuPgorPHBhcmE+CitUaGVyZSBhcmUgYWxzbyBhIG51bWJlciBvZiBvdGhlciB3YXlzIG9mIHByZXNlbnRpbmcgdGhlIGRhdGEsIGFzIGRlc2NyaWJlZCBsYXRlciBpbiB0aGlzIG1hbnVhbC4KK05vdGUgdGhhdCBPUHJvZmlsZSB3aWxsIGNob29zZSBhIGRlZmF1bHQgcHJvZmlsaW5nIHNldHVwIGZvciB5b3UuIEhvd2V2ZXIsIHRoZXJlIGFyZSBhIG51bWJlcgorb2Ygb3B0aW9ucyB5b3UgY2FuIHBhc3MgdG8gPGNvbW1hbmQ+b3Bjb250cm9sPC9jb21tYW5kPiBpZiB5b3UgbmVlZCB0byBjaGFuZ2Ugc29tZXRoaW5nLAorYWxzbyBkZXRhaWxlZCBsYXRlci4KKzwvcGFyYT4KKworPC9zZWN0MT4KKworPHNlY3QxIGlkPSJ0b29scy1vdmVydmlldyI+Cis8dGl0bGU+VG9vbHMgc3VtbWFyeTwvdGl0bGU+Cis8cGFyYT4KK1RoaXMgc2VjdGlvbiBnaXZlcyBhIGJyaWVmIGRlc2NyaXB0aW9uIG9mIHRoZSBhdmFpbGFibGUgT1Byb2ZpbGUgdXRpbGl0aWVzIGFuZCB0aGVpciBwdXJwb3NlLgorPC9wYXJhPgorPHZhcmlhYmxlbGlzdD4KKzx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PGZpbGVuYW1lPm9waGVscDwvZmlsZW5hbWU+PC90ZXJtPgorCTxsaXN0aXRlbT48cGFyYT4KKwkJVGhpcyB1dGlsaXR5IGxpc3RzIHRoZSBhdmFpbGFibGUgZXZlbnRzIGFuZCBzaG9ydCBkZXNjcmlwdGlvbnMuCisJPC9wYXJhPjwvbGlzdGl0ZW0+Cis8L3Zhcmxpc3RlbnRyeT4KKwkKKzx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PGZpbGVuYW1lPm9wY29udHJvbDwvZmlsZW5hbWU+PC90ZXJtPgorCTxsaXN0aXRlbT48cGFyYT4KKwkJVXNlZCBmb3IgY29udHJvbGxpbmcgdGhlIE9Qcm9maWxlIGRhdGEgY29sbGVjdGlvbiwgZGlzY3Vzc2VkIGluIDx4cmVmIGxpbmtlbmQ9ImNvbnRyb2xsaW5nIiAvPi4KKwk8L3BhcmE+PC9saXN0aXRlbT4KKzwvdmFybGlzdGVudHJ5PgorCis8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxmaWxlbmFtZT5hZ2VudCBsaWJyYXJpZXM8L2ZpbGVuYW1lPjwvdGVybT4KKwk8bGlzdGl0ZW0+PHBhcmE+CisJCQlVc2VkIGJ5IHZpcnR1YWwgbWFjaGluZXMgKGxpa2UgdGhlIEphdmEgVk0pIHRvIHJlY29yZCBpbmZvcm1hdGlvbiBhYm91dCBKSVRlZCBjb2RlIGJlaW5nIHByb2ZpbGVkLiBTZWUgPHhyZWYgbGlua2VuZD0ic2V0dXAtaml0IiAvPi4KKwkJPC9wYXJhPjwvbGlzdGl0ZW0+Cis8L3Zhcmxpc3RlbnRyeT4KKworPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48ZmlsZW5hbWU+b3ByZXBvcnQ8L2ZpbGVuYW1lPjwvdGVybT4KKwk8bGlzdGl0ZW0+PHBhcmE+CisJCVRoaXMgaXMgdGhlIG1haW4gdG9vbCBmb3IgcmV0cmlldmluZyB1c2VmdWwgcHJvZmlsZSBkYXRhLCBkZXNjcmliZWQgaW4KKwkJPHhyZWYgbGlua2VuZD0ib3ByZXBvcnQiIC8+LgorCTwvcGFyYT48L2xpc3RpdGVtPgorPC92YXJsaXN0ZW50cnk+CisKKzx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PGZpbGVuYW1lPm9wYW5ub3RhdGU8L2ZpbGVuYW1lPjwvdGVybT4KKwk8bGlzdGl0ZW0+PHBhcmE+CisJCVRoaXMgdXRpbGl0eSBjYW4gYmUgdXNlZCB0byBwcm9kdWNlIGFubm90YXRlZCBzb3VyY2UsIGFzc2VtYmx5IG9yIG1peGVkIHNvdXJjZS9hc3NlbWJseS4KKwkJU291cmNlIGxldmVsIGFubm90YXRpb24gaXMgYXZhaWxhYmxlIG9ubHkgaWYgdGhlIGFwcGxpY2F0aW9uIHdhcyBjb21waWxlZCB3aXRoIAorCQlkZWJ1Z2dpbmcgc3ltYm9scy4gU2VlIDx4cmVmIGxpbmtlbmQ9Im9wYW5ub3RhdGUiIC8+LgorCTwvcGFyYT48L2xpc3RpdGVtPgorPC92YXJsaXN0ZW50cnk+CisKKzx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PGZpbGVuYW1lPm9wZ3Byb2Y8L2ZpbGVuYW1lPjwvdGVybT4KKwk8bGlzdGl0ZW0+PHBhcmE+CisJCVRoaXMgdXRpbGl0eSBjYW4gb3V0cHV0IGdwcm9mLXN0eWxlIGRhdGEgZmlsZXMgZm9yIGEgYmluYXJ5LCBmb3IgdXNlIHdpdGgKKwkJPGNvbW1hbmQ+Z3Byb2YgLXA8L2NvbW1hbmQ+LiBTZWUgPHhyZWYgbGlua2VuZD0ib3BncHJvZiIgLz4uCisJPC9wYXJhPjwvbGlzdGl0ZW0+Cis8L3Zhcmxpc3RlbnRyeT4KKworPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48ZmlsZW5hbWU+b3BhcmNoaXZlPC9maWxlbmFtZT48L3Rlcm0+CisJPGxpc3RpdGVtPjxwYXJhPgorCQlUaGlzIHV0aWxpdHkgY2FuIGJlIHVzZWQgdG8gY29sbGVjdCBleGVjdXRhYmxlcywgZGVidWdpbmZvLAorCQlhbmQgc2FtcGxlIGZpbGVzIGFuZCBjb3B5IHRoZSBmaWxlcyBpbnRvIGFuIGFyY2hpdmUuCisJCVRoZSBhcmNoaXZlIGlzIHNlbGYtY29udGFpbmVkIGFuZCBjYW4gYmUgbW92ZWQgdG8gYW5vdGhlcgorCQltYWNoaW5lIGZvciBmdXJ0aGVyIGFuYWx5c2lzLgorCQlTZWUgPHhyZWYgbGlua2VuZD0ib3BhcmNoaXZlIiAvPi4KKwk8L3BhcmE+PC9saXN0aXRlbT4KKzwvdmFybGlzdGVudHJ5PgorCis8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxmaWxlbmFtZT5vcGltcG9ydDwvZmlsZW5hbWU+PC90ZXJtPgorCTxsaXN0aXRlbT48cGFyYT4KKwkJVGhpcyB1dGlsaXR5IGNvbnZlcnRzIHNhbXBsZSBkYXRhYmFzZSBmaWxlcyBmcm9tIGEgZm9yZWlnbiBiaW5hcnkgZm9ybWF0IChhYmkpIHRvCisJCXRoZSBuYXRpdmUgZm9ybWF0LiBUaGlzIGlzIHVzZWZ1bCBvbmx5IHdoZW4gbW92aW5nIHNhbXBsZSBmaWxlcyBiZXR3ZWVuIGhvc3RzLAorCQlmb3IgYW5hbHlzaXMgb24gcGxhdGZvcm1zIG90aGVyIHRoYW4gdGhlIG9uZSB1c2VkIGZvciBjb2xsZWN0aW9uLgorCQlTZWUgPHhyZWYgbGlua2VuZD0ib3BpbXBvcnQiIC8+LgorCTwvcGFyYT48L2xpc3RpdGVtPgorPC92YXJsaXN0ZW50cnk+CisKKzwvdmFyaWFibGVsaXN0PgorPC9zZWN0MT4KKwkKKzwvY2hhcHRlcj4KKyAKKzxjaGFwdGVyIGlkPSJjb250cm9sbGluZyI+Cis8dGl0bGU+Q29udHJvbGxpbmcgdGhlIHByb2ZpbGVyPC90aXRsZT4KKworPHNlY3QxIGlkPSJjb250cm9sbGluZy1kYWVtb24iPgorPHRpdGxlPlVzaW5nIDxjb21tYW5kPm9wY29udHJvbDwvY29tbWFuZD48L3RpdGxlPgorPHBhcmE+CitJbiB0aGlzIHNlY3Rpb24gd2UgZGVzY3JpYmUgdGhlIGNvbmZpZ3VyYXRpb24gYW5kIGNvbnRyb2wgb2YgdGhlIHByb2ZpbGluZyBzeXN0ZW0KK3dpdGggb3Bjb250cm9sIGluIG1vcmUgZGVwdGguCitUaGUgPGNvbW1hbmQ+b3Bjb250cm9sPC9jb21tYW5kPiBzY3JpcHQgaGFzIGEgZGVmYXVsdCBzZXR1cCwgYnV0IHlvdQorY2FuIGFsdGVyIHRoaXMgd2l0aCB0aGUgb3B0aW9ucyBnaXZlbiBiZWxvdy4gSW4gcGFydGljdWxhciwKK2lmIHlvdXIgaGFyZHdhcmUgc3VwcG9ydHMgcGVyZm9ybWFuY2UgY291bnRlcnMsIHlvdSBjYW4gY29uZmlndXJlIHRoZW0uCitUaGVyZSBhcmUgYSBudW1iZXIgb2YgY291bnRlcnMgKGZvciBleGFtcGxlLCBjb3VudGVyIDAgYW5kIGNvdW50ZXIgMQorb24gdGhlIFBlbnRpdW0gSUlJKS4gRWFjaCBvZiB0aGVzZSBjb3VudGVycyBjYW4gYmUgcHJvZ3JhbW1lZCB3aXRoCithbiBldmVudCB0byBjb3VudCwgc3VjaCBhcyBjYWNoZSBtaXNzZXMgb3IgTU1YIG9wZXJhdGlvbnMuIFRoZSBldmVudAorY2hvc2VuIGZvciBlYWNoIGNvdW50ZXIgaXMgcmVmbGVjdGVkIGluIHRoZSBwcm9maWxlIGRhdGEgY29sbGVjdGVkCitieSBPUHJvZmlsZTogZnVuY3Rpb25zIGFuZCBiaW5hcmllcyBhdCB0aGUgdG9wIG9mIHRoZSBwcm9maWxlcyByZWZsZWN0Cit0aGF0IG1vc3Qgb2YgdGhlIGNob3NlbiBldmVudHMgaGFwcGVuZWQgd2l0aGluIHRoYXQgY29kZS4KKzwvcGFyYT4KKzxwYXJhPgorQWRkaXRpb25hbGx5LCBlYWNoIGNvdW50ZXIgaGFzIGEgImNvdW50IiB2YWx1ZTogdGhpcyBjb3JyZXNwb25kcyB0byBob3cKK2RldGFpbGVkIHRoZSBwcm9maWxlIGlzLiBUaGUgbG93ZXIgdGhlIHZhbHVlLCB0aGUgbW9yZSBmcmVxdWVudGx5IHByb2ZpbGUKK3NhbXBsZXMgYXJlIHRha2VuLiBBIGNvdW50ZXIgY2FuIGNob29zZSB0byBzYW1wbGUgb25seSBrZXJuZWwgY29kZSwgdXNlci1zcGFjZSBjb2RlLAorb3IgYm90aCAoYm90aCBpcyB0aGUgZGVmYXVsdCkuIEZpbmFsbHksIHNvbWUgZXZlbnRzIGhhdmUgYSAidW5pdCBtYXNrIgorLSB0aGlzIGlzIGEgdmFsdWUgdGhhdCBmdXJ0aGVyIHJlc3RyaWN0cyB0aGUgdHlwZXMgb2YgZXZlbnQgdGhhdCBhcmUgY291bnRlZC4gCitUaGUgZXZlbnQgdHlwZXMgYW5kIHVuaXQgbWFza3MgZm9yIHlvdXIgQ1BVIGFyZSBsaXN0ZWQgYnkgPGNvbW1hbmQ+b3Bjb250cm9sCistLWxpc3QtZXZlbnRzPC9jb21tYW5kPi4KKzwvcGFyYT4KKzxwYXJhPgorVGhlIDxjb21tYW5kPm9wY29udHJvbDwvY29tbWFuZD4gc2NyaXB0IHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcgYWN0aW9ucyA6Cis8L3BhcmE+Cis8dmFyaWFibGVsaXN0PgorCTx2YXJsaXN0ZW50cnk+CisJCTx0ZXJtPjxvcHRpb24+LS1pbml0PC9vcHRpb24+PC90ZXJtPgorCQk8bGlzdGl0ZW0+PHBhcmE+CisJCUxvYWRzIHRoZSBPUHJvZmlsZSBtb2R1bGUgaWYgcmVxdWlyZWQgYW5kIG1ha2VzIHRoZSBPUHJvZmlsZSBkcml2ZXIKKwkJaW50ZXJmYWNlIGF2YWlsYWJsZS4KKwkJPC9wYXJhPjwvbGlzdGl0ZW0+CisJPC92YXJsaXN0ZW50cnk+CisJPHZhcmxpc3RlbnRyeT4KKwkJPHRlcm0+PG9wdGlvbj4tLXNldHVwPC9vcHRpb24+PC90ZXJtPgorCQk8bGlzdGl0ZW0+PHBhcmE+CisJCSAgICBGb2xsb3dlZCBieSBsaXN0IGFyZ3VtZW50cyBmb3IgcHJvZmlsaW5nIHNldCB1cC4gTGlzdCBvZiBhcmd1bWVudHMKKwkJICAgIHNhdmVkIGluIDxmaWxlbmFtZT4vcm9vdC8ub3Byb2ZpbGUvZGFlbW9ucmM8L2ZpbGVuYW1lPi4KKwkJICAgIEdpdmluZyB0aGlzIG9wdGlvbiBpcyBub3QgbmVjZXNzYXJ5OyB5b3UgY2FuIGp1c3QgZGlyZWN0bHkgcGFzcyBvbmUKKwkJICAgIG9mIHRoZSBzZXR1cCBvcHRpb25zLCBlLmcuIDxjb21tYW5kPm9wY29udHJvbCAtLW5vLXZtbGludXg8L2NvbW1hbmQ+LgorCQkgIDwvcGFyYT48L2xpc3RpdGVtPgorCTwvdmFybGlzdGVudHJ5PgorCTx2YXJsaXN0ZW50cnk+CisJCTx0ZXJtPjxvcHRpb24+LS1zdGF0dXM8L29wdGlvbj48L3Rlcm0+CisJCTxsaXN0aXRlbT48cGFyYT4KKwkJU2hvdyBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uLgorCQk8L3BhcmE+PC9saXN0aXRlbT4KKwk8L3Zhcmxpc3RlbnRyeT4KKwk8dmFybGlzdGVudHJ5PgorCQk8dGVybT48b3B0aW9uPi0tc3RhcnQtZGFlbW9uPC9vcHRpb24+PC90ZXJtPgorCQk8bGlzdGl0ZW0+PHBhcmE+CisJCSAgICBTdGFydCB0aGUgb3Byb2ZpbGUgZGFlbW9uIHdpdGhvdXQgc3RhcnRpbmcgYWN0dWFsIHByb2ZpbGluZy4gVGhlIHByb2ZpbGluZworCQljYW4gdGhlbiBiZSBzdGFydGVkIHVzaW5nIDxvcHRpb24+LS1zdGFydDwvb3B0aW9uPi4gVGhpcyBpcyB1c2VmdWwgZm9yIGF2b2lkaW5nCisJCW1lYXN1cmluZyB0aGUgY29zdCBvZiBkYWVtb24gc3RhcnR1cCwgYXMgPG9wdGlvbj4tLXN0YXJ0PC9vcHRpb24+IGlzIGEgc2ltcGxlCisJCXdyaXRlIHRvIGEgZmlsZSBpbiBvcHJvZmlsZWZzLiBOb3QgYXZhaWxhYmxlIGluIDIuMi8yLjQga2VybmVscy4KKwkJPC9wYXJhPjwvbGlzdGl0ZW0+CisJPC92YXJsaXN0ZW50cnk+CisJPHZhcmxpc3RlbnRyeT4KKwkJPHRlcm0+PG9wdGlvbj4tLXN0YXJ0PC9vcHRpb24+PC90ZXJtPgorCQk8bGlzdGl0ZW0+PHBhcmE+CisJCSAgICBTdGFydCBkYXRhIGNvbGxlY3Rpb24gd2l0aCBlaXRoZXIgYXJndW1lbnRzIHByb3ZpZGVkIGJ5IDxvcHRpb24+LS1zZXR1cDwvb3B0aW9uPgorCQlvciBpbmZvcm1hdGlvbiBzYXZlZCBpbiA8ZmlsZW5hbWU+L3Jvb3QvLm9wcm9maWxlL2RhZW1vbnJjPC9maWxlbmFtZT4uIFNwZWNpZnlpbmcKKwkJdGhlIGFkZGl0aW9uIDxvcHRpb24+LS12ZXJib3NlPC9vcHRpb24+IG1ha2VzIHRoZSBkYWVtb24gZ2VuZXJhdGUgbG90cyBvZiBkZWJ1ZyBkYXRhCisJCXdoaWxzdCBpdCBpcyBydW5uaW5nLgorCQk8L3BhcmE+PC9saXN0aXRlbT4KKwk8L3Zhcmxpc3RlbnRyeT4KKwk8dmFybGlzdGVudHJ5PgorCQk8dGVybT48b3B0aW9uPi0tZHVtcDwvb3B0aW9uPjwvdGVybT4KKwkJPGxpc3RpdGVtPjxwYXJhPgorCQkgICAgRm9yY2UgYSBmbHVzaCBvZiB0aGUgY29sbGVjdGVkIHByb2ZpbGluZyBkYXRhIHRvIHRoZSBkYWVtb24uCisJCTwvcGFyYT48L2xpc3RpdGVtPgorCTwvdmFybGlzdGVudHJ5PgorCTx2YXJsaXN0ZW50cnk+CisJCTx0ZXJtPjxvcHRpb24+LS1zdG9wPC9vcHRpb24+PC90ZXJtPgorCQk8bGlzdGl0ZW0+PHBhcmE+CisJCSAgICBTdG9wIGRhdGEgY29sbGVjdGlvbiAodGhpcyBzZXBhcmF0ZSBzdGVwIGlzIG5vdCBwb3NzaWJsZSB3aXRoIDIuMiBvciAyLjQga2VybmVscykuCisJCTwvcGFyYT48L2xpc3RpdGVtPgorCTwvdmFybGlzdGVudHJ5PgorCTx2YXJsaXN0ZW50cnk+CisJCTx0ZXJtPjxvcHRpb24+LS1zaHV0ZG93bjwvb3B0aW9uPjwvdGVybT4KKwkJPGxpc3RpdGVtPjxwYXJhPgorCQkgICAgU3RvcCBkYXRhIGNvbGxlY3Rpb24gYW5kIGtpbGwgdGhlIGRhZW1vbi4KKwkJPC9wYXJhPjwvbGlzdGl0ZW0+CisJPC92YXJsaXN0ZW50cnk+CisJPHZhcmxpc3RlbnRyeT4KKwkJPHRlcm0+PG9wdGlvbj4tLXJlc2V0PC9vcHRpb24+PC90ZXJtPgorCQk8bGlzdGl0ZW0+PHBhcmE+CisJCSAgICBDbGVhcnMgb3V0IGRhdGEgZnJvbSBjdXJyZW50IHNlc3Npb24sIGJ1dCBsZWF2ZXMgc2F2ZWQgc2Vzc2lvbnMuCisJCTwvcGFyYT48L2xpc3RpdGVtPgorCTwvdmFybGlzdGVudHJ5PgorCTx2YXJsaXN0ZW50cnk+CisJCTx0ZXJtPjxvcHRpb24+LS1zYXZlPTwvb3B0aW9uPnNlc3Npb25fbmFtZTwvdGVybT4KKwkJPGxpc3RpdGVtPjxwYXJhPgorCQkgICAgU2F2ZSBkYXRhIGZyb20gY3VycmVudCBzZXNzaW9uIHRvIHNlc3Npb25fbmFtZS4KKwkJPC9wYXJhPjwvbGlzdGl0ZW0+CisJPC92YXJsaXN0ZW50cnk+CisJPHZhcmxpc3RlbnRyeT4KKwkJPHRlcm0+PG9wdGlvbj4tLWRlaW5pdDwvb3B0aW9uPjwvdGVybT4KKwkJPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgIFNodXRzIGRvd24gZGFlbW9uLiBVbmxvYWQgdGhlIE9Qcm9maWxlIG1vZHVsZSBhbmQgb3Byb2ZpbGVmcy4KKwkJPC9wYXJhPjwvbGlzdGl0ZW0+CisJPC92YXJsaXN0ZW50cnk+CisJPHZhcmxpc3RlbnRyeT4KKwkJPHRlcm0+PG9wdGlvbj4tLWxpc3QtZXZlbnRzPC9vcHRpb24+PC90ZXJtPgorCQk8bGlzdGl0ZW0+PHBhcmE+CisJCSAgICBMaXN0IGV2ZW50IHR5cGVzIGFuZCB1bml0IG1hc2tzLgorCQk8L3BhcmE+PC9saXN0aXRlbT4KKwk8L3Zhcmxpc3RlbnRyeT4KKwk8dmFybGlzdGVudHJ5PgorCQk8dGVybT48b3B0aW9uPi0taGVscDwvb3B0aW9uPjwvdGVybT4KKwkJPGxpc3RpdGVtPjxwYXJhPgorCQkgICAgR2VuZXJhdGUgdXNhZ2UgbWVzc2FnZXMuCisJCTwvcGFyYT48L2xpc3RpdGVtPgorCTwvdmFybGlzdGVudHJ5PgorPC92YXJpYWJsZWxpc3Q+CisKKzxwYXJhPgorVGhlcmUgYXJlIGEgbnVtYmVyIG9mIHBvc3NpYmxlIHNldHRpbmdzLCBvZiB3aGljaCwgb25seQorPG9wdGlvbj4tLXZtbGludXg8L29wdGlvbj4gKG9yIDxvcHRpb24+LS1uby12bWxpbnV4PC9vcHRpb24+KQoraXMgcmVxdWlyZWQuIFRoZXNlIHNldHRpbmdzIGFyZSBzdG9yZWQgaW4gPGZpbGVuYW1lPn4vLm9wcm9maWxlL2RhZW1vbnJjPC9maWxlbmFtZT4uCis8L3BhcmE+Cis8dmFyaWFibGVsaXN0PgorCTx2YXJsaXN0ZW50cnk+CisJCTx0ZXJtPjxvcHRpb24+LS1idWZmZXItc2l6ZT08L29wdGlvbj5udW08L3Rlcm0+CisJCTxsaXN0aXRlbT48cGFyYT4KKwkJTnVtYmVyIG9mIHNhbXBsZXMgaW4ga2VybmVsIGJ1ZmZlci4gV2hlbiB1c2luZyBhIDIuNiBrZXJuZWwKKwkJYnVmZmVyIHdhdGVyc2hlZCBuZWVkIHRvIGJlIHR3ZWFrZWQgd2hlbiBjaGFuZ2luZyB0aGlzIHZhbHVlLgorCQk8L3BhcmE+PC9saXN0aXRlbT4KKwk8L3Zhcmxpc3RlbnRyeT4KKwk8dmFybGlzdGVudHJ5PgorCQk8dGVybT48b3B0aW9uPi0tYnVmZmVyLXdhdGVyc2hlZD08L29wdGlvbj5udW08L3Rlcm0+CisJCTxsaXN0aXRlbT48cGFyYT4KKwkJU2V0IGtlcm5lbCBidWZmZXIgd2F0ZXJzaGVkIHRvIG51bSBzYW1wbGVzICgyLjYgb25seSkuIFdoZW4gaXQnbGwgcmVtYWluIG9ubHkKKwkJYnVmZmVyLXNpemUgLSBidWZmZXItd2F0ZXJzaGVkIGZyZWUgZW50cnkgaW4gdGhlIGtlcm5lbCBidWZmZXIgZGF0YSB3aWxsIGJlCisJCWZsdXNoZWQgdG8gZGFlbW9uLCBtb3N0IHVzZWZ1bGwgdmFsdWUgYXJlIGluIHRoZSByYW5nZSBbMC4yNSAtIDAuNV0gKiBidWZmZXItc2l6ZS4KKwkJPC9wYXJhPjwvbGlzdGl0ZW0+CisJPC92YXJsaXN0ZW50cnk+CisJPHZhcmxpc3RlbnRyeT4KKwkJPHRlcm0+PG9wdGlvbj4tLWNwdS1idWZmZXItc2l6ZT08L29wdGlvbj5udW08L3Rlcm0+CisJCTxsaXN0aXRlbT48cGFyYT4KKwkJTnVtYmVyIG9mIHNhbXBsZXMgaW4ga2VybmVsIHBlci1jcHUgYnVmZmVyICgyLjYgb25seSkuIElmIHlvdQorCQlwcm9maWxlIGF0IGhpZ2ggcmF0ZSBpdCBjYW4gaGVscCB0byBpbmNyZWFzZSB0aGlzIGlmIHRoZSBsb2cKKwkJZmlsZSBzaG93IGV4Y2Vzc2l2ZSBjb3VudCBvZiBzYW1wbGUgbG9zdCBjcHUgYnVmZmVyIG92ZXJmbG93LiAKKwkJPC9wYXJhPjwvbGlzdGl0ZW0+CisJPC92YXJsaXN0ZW50cnk+CisJPHZhcmxpc3RlbnRyeT4KKwkJPHRlcm0+PG9wdGlvbj4tLWV2ZW50PTwvb3B0aW9uPltldmVudHNwZWNdPC90ZXJtPgorCQk8bGlzdGl0ZW0+PHBhcmE+CisJCVVzZSB0aGUgZ2l2ZW4gcGVyZm9ybWFuY2UgY291bnRlciBldmVudCB0byBwcm9maWxlLgorCQlTZWUgPHhyZWYgbGlua2VuZD0iZXZlbnRzcGVjIiAvPiBiZWxvdy4KKwkJPC9wYXJhPjwvbGlzdGl0ZW0+CisJPC92YXJsaXN0ZW50cnk+CisJPHZhcmxpc3RlbnRyeT4KKwkJPHRlcm0+PG9wdGlvbj4tLXNlc3Npb24tZGlyPTwvb3B0aW9uPmRpcl9wYXRoPC90ZXJtPgorCQk8bGlzdGl0ZW0+PHBhcmE+CisJCSAgICBDcmVhdGUvdXNlIHNhbXBsZSBkYXRhYmFzZSBvdXQgb2YgZGlyZWN0b3J5IDxmaWxlbmFtZT5kaXJfcGF0aDwvZmlsZW5hbWU+IGluc3RlYWQgb2YKKwkJdGhlIGRlZmF1bHQgbG9jYXRpb24gKC92YXIvbGliL29wcm9maWxlKS4KKwkJPC9wYXJhPjwvbGlzdGl0ZW0+CisJPC92YXJsaXN0ZW50cnk+CisJPHZhcmxpc3RlbnRyeT4KKwkJPHRlcm0+PG9wdGlvbj4tLXNlcGFyYXRlPTwvb3B0aW9uPltub25lLGxpYixrZXJuZWwsdGhyZWFkLGNwdSxhbGxdPC90ZXJtPgorCQk8bGlzdGl0ZW0+PHBhcmE+CisJCUJ5IGRlZmF1bHQsIGV2ZXJ5IHByb2ZpbGUgaXMgc3RvcmVkIGluIGEgc2luZ2xlIGZpbGUuIFRodXMsIGZvciBleGFtcGxlLAorCQlzYW1wbGVzIGluIHRoZSBDIGxpYnJhcnkgYXJlIGFsbCBhY2NyZWRpdGVkIHRvIHRoZSA8ZmlsZW5hbWU+L2xpYi9saWJjLm88L2ZpbGVuYW1lPgorCQlwcm9maWxlLiBIb3dldmVyLCB5b3UgY2hvb3NlIHRvIGNyZWF0ZSBzZXBhcmF0ZSBzYW1wbGUgZmlsZXMgYnkgc3BlY2lmeWluZworCQlvbmUgb2YgdGhlIGJlbG93IG9wdGlvbnMuCisJCTwvcGFyYT4KKwkJPGluZm9ybWFsdGFibGUgZnJhbWU9ImFsbCI+CisJCTx0Z3JvdXAgY29scz0nMic+IAorCQk8dGJvZHk+CisJCTxyb3c+PGVudHJ5PjxvcHRpb24+bm9uZTwvb3B0aW9uPjwvZW50cnk+PGVudHJ5Pk5vIHByb2ZpbGUgc2VwYXJhdGlvbiAoZGVmYXVsdCk8L2VudHJ5Pjwvcm93PgorCQk8cm93PjxlbnRyeT48b3B0aW9uPmxpYjwvb3B0aW9uPjwvZW50cnk+PGVudHJ5PkNyZWF0ZSBwZXItYXBwbGljYXRpb24gcHJvZmlsZXMgZm9yIGxpYnJhcmllczwvZW50cnk+PC9yb3c+CisJCTxyb3c+PGVudHJ5PjxvcHRpb24+a2VybmVsPC9vcHRpb24+PC9lbnRyeT48ZW50cnk+Q3JlYXRlIHBlci1hcHBsaWNhdGlvbiBwcm9maWxlcyBmb3IgdGhlIGtlcm5lbCBhbmQga2VybmVsIG1vZHVsZXM8L2VudHJ5Pjwvcm93PgorCQk8cm93PjxlbnRyeT48b3B0aW9uPnRocmVhZDwvb3B0aW9uPjwvZW50cnk+PGVudHJ5PkNyZWF0ZSBwcm9maWxlcyBmb3IgZWFjaCB0aHJlYWQgYW5kIGVhY2ggdGFzazwvZW50cnk+PC9yb3c+CisJCTxyb3c+PGVudHJ5PjxvcHRpb24+Y3B1PC9vcHRpb24+PC9lbnRyeT48ZW50cnk+Q3JlYXRlIHByb2ZpbGVzIGZvciBlYWNoIENQVTwvZW50cnk+PC9yb3c+CisJCTxyb3c+PGVudHJ5PjxvcHRpb24+YWxsPC9vcHRpb24+PC9lbnRyeT48ZW50cnk+QWxsIG9mIHRoZSBhYm92ZSBvcHRpb25zPC9lbnRyeT48L3Jvdz4KKwkJPC90Ym9keT4KKwkJPC90Z3JvdXA+CisJCTwvaW5mb3JtYWx0YWJsZT4KKwkJPHBhcmE+CisJCU5vdGUgIHRoYXQgPG9wdGlvbj4tLXNlcGFyYXRlPWtlcm5lbDwvb3B0aW9uPiBhbHNvIHR1cm5zIG9uIDxvcHRpb24+LS1zZXBhcmF0ZT1saWI8L29wdGlvbj4uCisJCTwhLS0gRklYTUU6IHVwZGF0ZSBpZiB0aGlzIGNoYW5nZSAtLT4KKwkJV2hlbiB1c2luZyA8b3B0aW9uPi0tc2VwYXJhdGU9a2VybmVsPC9vcHRpb24+LCBzYW1wbGVzIGluIGhhcmR3YXJlIGludGVycnVwdHMsIHNvZnQtaXJxcywgb3Igb3RoZXIKKwkJYXN5bmNocm9ub3VzIGtlcm5lbCBjb250ZXh0cyBhcmUgY3JlZGl0ZWQgdG8gdGhlIHRhc2sgY3VycmVudGx5IHJ1bm5pbmcuIFRoaXMgbWVhbnMgeW91IHdpbGwgc2VlCisJCXNlZW1pbmdseSBub25zZW5zZSBwcm9maWxlcyBzdWNoIGFzIDxmaWxlbmFtZT4vYmluL2Jhc2g8L2ZpbGVuYW1lPiBzaG93aW5nIHNhbXBsZXMgZm9yIHRoZSBQUFAgbW9kdWxlcywKKwkJZXRjLgorCQk8L3BhcmE+CisJCTxwYXJhPgorCQlPbiAyLjIvMi40IG9ubHkga2VybmVsIHRocmVhZHMgYWxyZWFkeSBzdGFydGVkIHdoZW4gcHJvZmlsaW5nIGJlZ2lucyBhcmUgY29ycmVjdGx5IHByb2ZpbGVkOworCQluZXdseSBzdGFydGVkIGtlcm5lbCB0aHJlYWQgc2FtcGxlcyBhcmUgY3JlZGl0ZWQgdG8gdGhlIHZtbGludXggKGtlcm5lbCkgcHJvZmlsZS4KKwkJPC9wYXJhPgorCQk8cGFyYT4KKwkJVXNpbmcgPG9wdGlvbj4tLXNlcGFyYXRlPXRocmVhZDwvb3B0aW9uPiBjcmVhdGVzIGEgbG90CisJCW9mIHNhbXBsZSBmaWxlcyBpZiB5b3UgbGVhdmUgT1Byb2ZpbGUgcnVubmluZyBmb3IgYSB3aGlsZTsgaXQncyBtb3N0CisJCXVzZWZ1bCB3aGVuIHVzZWQgZm9yIHNob3J0IHNlc3Npb25zLCBvciB3aGVuIHVzaW5nIGltYWdlIGZpbHRlcmluZy4KKwkJPC9wYXJhPgorCQk8L2xpc3RpdGVtPgorCTwvdmFybGlzdGVudHJ5PgorCTx2YXJsaXN0ZW50cnk+CisJCTx0ZXJtPjxvcHRpb24+LS1jYWxsZ3JhcGg9PC9vcHRpb24+I2RlcHRoPC90ZXJtPgorCQk8bGlzdGl0ZW0+PHBhcmE+CisJCUVuYWJsZSBjYWxsLWdyYXBoIHNhbXBsZSBjb2xsZWN0aW9uIHdpdGggYSBtYXhpbXVtIGRlcHRoLiBVc2UgMCB0byBkaXNhYmxlCisJCWNhbGxncmFwaCBwcm9maWxpbmcuICBOT1RFOiBDYWxsZ3JhcGggc3VwcG9ydCBpcyBhdmFpbGFibGUgb24gYSBsaW1pdGVkCisJCW51bWJlciBvZiBwbGF0Zm9ybXMgYXQgdGhpcyB0aW1lOyBmb3IgZXhhbXBsZToKKwkJPHBhcmE+CisJCTxpdGVtaXplZGxpc3Q+CisJCTxsaXN0aXRlbT48cGFyYT54ODYgd2l0aCByZWNlbnQgMi42IGtlcm5lbDwvcGFyYT48L2xpc3RpdGVtPgorCQk8bGlzdGl0ZW0+PHBhcmE+QVJNIHdpdGggcmVjZW50IDIuNiBrZXJuZWw8L3BhcmE+PC9saXN0aXRlbT4KKwkJPGxpc3RpdGVtPjxwYXJhPlBvd2VyUEMgd2l0aCAyLjYuMTcga2VybmVsPC9wYXJhPjwvbGlzdGl0ZW0+CisJCTwvaXRlbWl6ZWRsaXN0PgorCQk8L3BhcmE+CisJCTwvcGFyYT48L2xpc3RpdGVtPgorCTwvdmFybGlzdGVudHJ5PgorCTx2YXJsaXN0ZW50cnk+CisJCTx0ZXJtPjxvcHRpb24+LS1pbWFnZT08L29wdGlvbj5pbWFnZSxbaW1hZ2VzXXwiYWxsIjwvdGVybT4KKwkJPGxpc3RpdGVtPjxwYXJhPgorCQlJbWFnZSBmaWx0ZXJpbmcuIElmIHlvdSBzcGVjaWZ5IG9uZSBvciBtb3JlIGFic29sdXRlCisJCXBhdGhzIHRvIGJpbmFyaWVzLCBPUHJvZmlsZSB3aWxsIG9ubHkgcHJvZHVjZSBwcm9maWxlIHJlc3VsdHMgZm9yIHRob3NlCisJCWJpbmFyeSBpbWFnZXMuIFRoaXMgaXMgdXNlZnVsIGZvciByZXN0cmljdGluZyB0aGUgc29tZXRpbWVzIHZvbHVtaW5vdXMKKwkJb3V0cHV0IHlvdSBtYXkgZ2V0IG90aGVyd2lzZSwgZXNwZWNpYWxseSB3aXRoCisJCTxvcHRpb24+LS1zZXBhcmF0ZT10aHJlYWQ8L29wdGlvbj4uIE5vdGUgdGhhdCBpZiB5b3UgYXJlIHVzaW5nCisJCTxvcHRpb24+LS1zZXBhcmF0ZT1saWI8L29wdGlvbj4gb3IKKwkJPG9wdGlvbj4tLXNlcGFyYXRlPWtlcm5lbDwvb3B0aW9uPiwgdGhlbiBpZiB5b3Ugc3BlY2lmaWNhdGlvbiBhbgorCQlhcHBsaWNhdGlvbiBiaW5hcnksIHRoZSBzaGFyZWQgbGlicmFyaWVzIGFuZCBrZXJuZWwgY29kZQorCQk8ZW1waGFzaXM+YXJlPC9lbXBoYXNpcz4gaW5jbHVkZWQuIFNwZWNpZnkgdGhlIHZhbHVlCisJCSJhbGwiIHRvIHByb2ZpbGUgZXZlcnl0aGluZyAodGhlIGRlZmF1bHQpLgorCQk8L3BhcmE+PC9saXN0aXRlbT4KKwk8L3Zhcmxpc3RlbnRyeT4KKwk8dmFybGlzdGVudHJ5PgorCQk8dGVybT48b3B0aW9uPi0tdm1saW51eD08L29wdGlvbj5maWxlPC90ZXJtPgorCQk8bGlzdGl0ZW0+PHBhcmE+CisJCXZtbGludXgga2VybmVsIGltYWdlLgorCQk8L3BhcmE+PC9saXN0aXRlbT4KKwk8L3Zhcmxpc3RlbnRyeT4KKwk8dmFybGlzdGVudHJ5PgorCQk8dGVybT48b3B0aW9uPi0tbm8tdm1saW51eDwvb3B0aW9uPjwvdGVybT4KKwkJPGxpc3RpdGVtPjxwYXJhPgorCQlVc2UgdGhpcyB3aGVuIHlvdSBkb24ndCBoYXZlIGEga2VybmVsIHZtbGludXggZmlsZSwgYW5kIHlvdSBkb24ndCB3YW50CisJCXRvIHByb2ZpbGUgdGhlIGtlcm5lbC4gVGhpcyBzdGlsbCBjb3VudHMgdGhlIHRvdGFsIG51bWJlciBvZiBrZXJuZWwgc2FtcGxlcywKKwkJYnV0IGNhbid0IGdpdmUgc3ltYm9sLWJhc2VkIHJlc3VsdHMgZm9yIHRoZSBrZXJuZWwgb3IgYW55IG1vZHVsZXMuCisJCTwvcGFyYT48L2xpc3RpdGVtPgorCTwvdmFybGlzdGVudHJ5PgorPC92YXJpYWJsZWxpc3Q+CisKKzxzZWN0MiBpZD0ib3Bjb250cm9sZXhhbXBsZXMiPgorPHRpdGxlPkV4YW1wbGVzPC90aXRsZT4KKworPHNlY3QzIGlkPSJleGFtcGxlc3BlcmZjdHIiPgorPHRpdGxlPkludGVsIHBlcmZvcm1hbmNlIGNvdW50ZXIgc2V0dXA8L3RpdGxlPgorPHBhcmE+CitIZXJlLCB3ZSBoYXZlIGEgUGVudGl1bSBJSUkgcnVubmluZyBhdCA4MDBNSHosIGFuZCB3ZSB3YW50IHRvIGxvb2sgYXQgd2hlcmUgZGF0YSBtZW1vcnkKK3JlZmVyZW5jZXMgYXJlIGhhcHBlbmluZyBtb3N0LCBhbmQgYWxzbyBnZXQgcmVzdWx0cyBmb3IgQ1BVIHRpbWUuCis8L3BhcmE+Cis8c2NyZWVuPgorIyBvcGNvbnRyb2wgLS1ldmVudD1DUFVfQ0xLX1VOSEFMVEVEOjQwMDAwMCAtLWV2ZW50PURBVEFfTUVNX1JFRlM6MTAwMDAKKyMgb3Bjb250cm9sIC0tdm1saW51eD0vYm9vdC8yLjYuMC92bWxpbnV4CisjIG9wY29udHJvbCAtLXN0YXJ0Cis8L3NjcmVlbj4KKzwvc2VjdDM+CisKKzxzZWN0MyBpZD0iZXhhbXBsZXNydGMiPgorPHRpdGxlPlJUQyBtb2RlPC90aXRsZT4KKzxwYXJhPgorSGVyZSwgd2UgaGF2ZSBhbiBJbnRlbCBsYXB0b3Agd2l0aG91dCBzdXBwb3J0IGZvciBwZXJmb3JtYW5jZSBjb3VudGVycywgcnVubmluZyBvbiAyLjQga2VybmVscy4KKzwvcGFyYT4KKzxzY3JlZW4+CisjIG9waGVscCAtcgorQ1BVIHdpdGggUlRDIGRldmljZQorIyBvcGNvbnRyb2wgLS12bWxpbnV4PS9ib290LzIuNC4xMy92bWxpbnV4IC0tZXZlbnQ9UlRDX0lOVEVSUlVQVFM6MTAyNAorIyBvcGNvbnRyb2wgLS1zdGFydAorPC9zY3JlZW4+Cis8L3NlY3QzPgorCis8c2VjdDMgaWQ9ImV4YW1wbGVzc3RhcnRkYWVtb24iPgorPHRpdGxlPlN0YXJ0aW5nIHRoZSBkYWVtb24gc2VwYXJhdGVseTwvdGl0bGU+Cis8cGFyYT4KK0lmIHdlJ3JlIHJ1bm5pbmcgMi42IGtlcm5lbHMsIHdlIGNhbiB1c2UgPG9wdGlvbj4tLXN0YXJ0LWRhZW1vbjwvb3B0aW9uPiB0byBhdm9pZAordGhlIHByb2ZpbGVyIHN0YXJ0dXAgYWZmZWN0aW5nIHJlc3VsdHMuCis8L3BhcmE+Cis8c2NyZWVuPgorIyBvcGNvbnRyb2wgLS12bWxpbnV4PS9ib290LzIuNi4wL3ZtbGludXgKKyMgb3Bjb250cm9sIC0tc3RhcnQtZGFlbW9uCisjIG15X2Zhdm91cml0ZV9iZW5jaG1hcmsgLS1pbml0CisjIG9wY29udHJvbCAtLXN0YXJ0IDsgbXlfZmF2b3VyaXRlX2JlbmNobWFyayAtLXJ1biA7IG9wY29udHJvbCAtLXN0b3AKKzwvc2NyZWVuPgorPC9zZWN0Mz4KKworPHNlY3QzIGlkPSJleGFtcGxlc2VwYXJhdGUiPgorPHRpdGxlPlNlcGFyYXRlIHByb2ZpbGVzIGZvciBsaWJyYXJpZXMgYW5kIHRoZSBrZXJuZWw8L3RpdGxlPgorPHBhcmE+CitIZXJlLCB3ZSB3YW50IHRvIHNlZSBhIHByb2ZpbGUgb2YgdGhlIE9Qcm9maWxlIGRhZW1vbiBpdHNlbGYsIGluY2x1ZGluZyB3aGVuCitpdCB3YXMgcnVubmluZyBpbnNpZGUgdGhlIGtlcm5lbCBkcml2ZXIsIGFuZCBpdHMgdXNlIG9mIHNoYXJlZCBsaWJyYXJpZXMuCis8L3BhcmE+Cis8c2NyZWVuPgorIyBvcGNvbnRyb2wgLS1zZXBhcmF0ZT1rZXJuZWwgLS12bWxpbnV4PS9ib290LzIuNi4wL3ZtbGludXgKKyMgb3Bjb250cm9sIC0tc3RhcnQKKyMgbXlfZmF2b3VyaXRlX3N0cmVzc190ZXN0IC0tcnVuCisjIG9wcmVwb3J0IC1sIC1wIC9saWIvbW9kdWxlcy8yLjYuMC9rZXJuZWwgL3Vzci9sb2NhbC9iaW4vb3Byb2ZpbGVkCis8L3NjcmVlbj4KKzwvc2VjdDM+CisKKzxzZWN0MyBpZD0iZXhhbXBsZXNzZXNzaW9ucyI+Cis8dGl0bGU+UHJvZmlsaW5nIHNlc3Npb25zPC90aXRsZT4KKzxwYXJhPgorSXQgY2FuIG9mdGVuIGJlIHVzZWZ1bCB0byBzcGxpdCB1cCBwcm9maWxpbmcgZGF0YSBpbnRvIHNldmVyYWwgZGlmZmVyZW50Cit0aW1lIHBlcmlvZHMuIEZvciBleGFtcGxlLCB5b3UgbWF5IHdhbnQgdG8gY29sbGVjdCBkYXRhIG9uIGFuIGFwcGxpY2F0aW9uJ3MKK3N0YXJ0dXAgc2VwYXJhdGVseSBmcm9tIHRoZSBub3JtYWwgcnVudGltZSBkYXRhLiBZb3UgY2FuIHVzZSB0aGUgc2ltcGxlCitjb21tYW5kIDxjb21tYW5kPm9wY29udHJvbCAtLXNhdmU8L2NvbW1hbmQ+IHRvIGRvIHRoaXMuIEZvciBleGFtcGxlIDoKKzwvcGFyYT4KKzxzY3JlZW4+CisjIG9wY29udHJvbCAtLXNhdmU9YmxhaAorPC9zY3JlZW4+Cis8cGFyYT4KK3dpbGwgY3JlYXRlIGEgc3ViLWRpcmVjdG9yeSBpbiA8ZmlsZW5hbWU+JFNFU1NJT05fRElSL3NhbXBsZXM8L2ZpbGVuYW1lPiBjb250YWluaW5nIHRoZSBzYW1wbGVzCit1cCB0byB0aGF0IHBvaW50ICh0aGUgY3VycmVudCBzZXNzaW9uJ3Mgc2FtcGxlIGZpbGVzIGFyZSBtb3ZlZCBpbnRvIHRoaXMKK2RpcmVjdG9yeSkuIFlvdSBjYW4gdGhlbiBwYXNzIHRoaXMgc2Vzc2lvbiBuYW1lIGFzIGEgcGFyYW1ldGVyIHRvIHRoZSBwb3N0LXByb2ZpbGluZworYW5hbHlzaXMgdG9vbHMsIHRvIG9ubHkgZ2V0IGRhdGEgdXAgdG8gdGhlIHBvaW50IHlvdSBuYW1lZCB0aGUKK3Nlc3Npb24uIElmIHlvdSBkbyBub3Qgd2FudCB0byBzYXZlIGEgc2Vzc2lvbiwgeW91IGNhbiBkbworPGNvbW1hbmQ+cm0gLXJmICRTRVNTSU9OX0RJUi9zYW1wbGVzL3Nlc3Npb25uYW1lPC9jb21tYW5kPiBvciwgZm9yIHRoZQorY3VycmVudCBzZXNzaW9uLCA8Y29tbWFuZD5vcGNvbnRyb2wgLS1yZXNldDwvY29tbWFuZD4uCis8L3BhcmE+Cis8L3NlY3QzPgorPC9zZWN0Mj4gCisKKzxzZWN0MiBpZD0iZXZlbnRzcGVjIj4KKzx0aXRsZT5TcGVjaWZ5aW5nIHBlcmZvcm1hbmNlIGNvdW50ZXIgZXZlbnRzPC90aXRsZT4KKzxwYXJhPgorVGhlIDxvcHRpb24+LS1ldmVudDwvb3B0aW9uPiBvcHRpb24gdG8gPGNvbW1hbmQ+b3Bjb250cm9sPC9jb21tYW5kPgordGFrZXMgYSBzcGVjaWZpY2F0aW9uIHRoYXQgaW5kaWNhdGVzIGhvdyB0aGUgZGV0YWlscyBvZiBlYWNoCitoYXJkd2FyZSBwZXJmb3JtYW5jZSBjb3VudGVyIHNob3VsZCBiZSBzZXR1cC4gSWYgeW91IHdhbnQgdG8KK3JldmVydCB0byBPUHJvZmlsZSdzIGRlZmF1bHQgc2V0dGluZyAoPG9wdGlvbj4tLWV2ZW50PC9vcHRpb24+CitpcyBzdHJpY3RseSBvcHRpb25hbCksIHVzZSA8b3B0aW9uPi0tZXZlbnQ9ZGVmYXVsdDwvb3B0aW9uPi4gVXNlIG9mIHRoaXMKK29wdGlvbiBvdmVyLXJpZGVzIGFsbCBwcmV2aW91cyBldmVudCBzZWxlY3Rpb25zLgorPC9wYXJhPgorPHBhcmE+CitZb3UgY2FuIHBhc3MgbXVsdGlwbGUgZXZlbnQgc3BlY2lmaWNhdGlvbnMuIE9Qcm9maWxlIHdpbGwgYWxsb2NhdGUKK2hhcmR3YXJlIGNvdW50ZXJzIGFzIG5lY2Vzc2FyeS4gTm90ZSB0aGF0IHNvbWUgY29tYmluYXRpb25zIGFyZSBub3QKK2FsbG93ZWQgYnkgdGhlIENQVTsgcnVubmluZyA8Y29tbWFuZD5vcGNvbnRyb2wgLS1saXN0LWV2ZW50czwvY29tbWFuZD4gZ2l2ZXMgdGhlIGRldGFpbHMKK29mIGVhY2ggZXZlbnQuIFRoZSBldmVudCBzcGVjaWZpY2F0aW9uIGlzIGEgY29sb24tc2VwYXJhdGVkIHN0cmluZworb2YgdGhlIGZvcm0gPG9wdGlvbj48ZW1waGFzaXM+bmFtZTwvZW1waGFzaXM+OjxlbXBoYXNpcz5jb3VudDwvZW1waGFzaXM+OjxlbXBoYXNpcz51bml0bWFzazwvZW1waGFzaXM+OjxlbXBoYXNpcz5rZXJuZWw8L2VtcGhhc2lzPjo8ZW1waGFzaXM+dXNlcjwvZW1waGFzaXM+PC9vcHRpb24+IGFzIGRlc2NyaWJlZCBpbiB0aGlzIHRhYmxlOgorPC9wYXJhPgorPGluZm9ybWFsdGFibGUgZnJhbWU9ImFsbCI+Cis8dGdyb3VwIGNvbHM9JzInPiAKKzx0Ym9keT4KKzxyb3c+PGVudHJ5PjxvcHRpb24+bmFtZTwvb3B0aW9uPjwvZW50cnk+PGVudHJ5PlRoZSBzeW1ib2xpYyBldmVudCBuYW1lLCBlLmcuIDxjb25zdGFudD5DUFVfQ0xLX1VOSEFMVEVEPC9jb25zdGFudD48L2VudHJ5Pjwvcm93PgorPHJvdz48ZW50cnk+PG9wdGlvbj5jb3VudDwvb3B0aW9uPjwvZW50cnk+PGVudHJ5PlRoZSBjb3VudGVyIHJlc2V0IHZhbHVlLCBlLmcuIDEwMDAwMDwvZW50cnk+PC9yb3c+Cis8cm93PjxlbnRyeT48b3B0aW9uPnVuaXRtYXNrPC9vcHRpb24+PC9lbnRyeT48ZW50cnk+VGhlIHVuaXQgbWFzaywgYXMgZ2l2ZW4gaW4gdGhlIGV2ZW50cyBsaXN0OiBlLmcuIDB4MGY7IG9yIGEgc3ltYm9saWMgbmFtZSBhcworZ2l2ZW4gYnkgdGhlIGZpcnN0IHdvcmQgb2YgdGhlIGRlc2NyaXB0aW9uIChvbmx5IHZhbGlkIGZvciB1bml0IG1hc2tzIGhhdmluZyBhbiAiZXh0cmE6IiBwYXJhbWV0ZXIpPC9lbnRyeT48L3Jvdz4KKzxyb3c+PGVudHJ5PjxvcHRpb24+a2VybmVsPC9vcHRpb24+PC9lbnRyeT48ZW50cnk+V2hldGhlciB0byBwcm9maWxlIGtlcm5lbCBjb2RlPC9lbnRyeT48L3Jvdz4KKzxyb3c+PGVudHJ5PjxvcHRpb24+dXNlcjwvb3B0aW9uPjwvZW50cnk+PGVudHJ5PldoZXRoZXIgdG8gcHJvZmlsZSB1c2Vyc3BhY2UgY29kZTwvZW50cnk+PC9yb3c+Cis8L3Rib2R5PgorPC90Z3JvdXA+Cis8L2luZm9ybWFsdGFibGU+Cis8cGFyYT4KK1RoZSBsYXN0IHRocmVlIHZhbHVlcyBhcmUgb3B0aW9uYWwsIGlmIHlvdSBvbWl0IHRoZW0gKGUuZy4gPG9wdGlvbj4tLWV2ZW50PURBVEFfTUVNX1JFRlM6MzAwMDA8L29wdGlvbj4pLAordGhleSB3aWxsIGJlIHNldCB0byB0aGUgZGVmYXVsdCB2YWx1ZXMgKGEgdW5pdCBtYXNrIG9mIDAsIGFuZCBwcm9maWxpbmcgYm90aCBrZXJuZWwgYW5kCit1c2Vyc3BhY2UgY29kZSkuIE5vdGUgdGhhdCBzb21lIGV2ZW50cyByZXF1aXJlIGEgdW5pdCBtYXNrLgorPC9wYXJhPgorPG5vdGU+PHBhcmE+CitGb3IgdGhlIFBvd2VyUEMgcGxhdGZvcm1zLCBhbGwgZXZlbnRzIHNwZWNpZmllZCBtdXN0IGJlIGluIHRoZSBzYW1lIGdyb3VwOyBpLmUuLCB0aGUgZ3JvdXAgbnVtYmVyCithcHBlbmRlZCB0byB0aGUgZXZlbnQgbmFtZSAoZS5nLiA8Y29uc3RhbnQ+Jmx0OzxlbXBoYXNpcz5zb21lLWV2ZW50LW5hbWU8L2VtcGhhc2lzPiZndDtfR1JQOTwvY29uc3RhbnQ+KSBtdXN0IGJlIHRoZSBzYW1lLgorPC9wYXJhPjwvbm90ZT4KKzxwYXJhPgorSWYgT1Byb2ZpbGUgaXMgdXNpbmcgUlRDIG1vZGUsIGFuZCB5b3Ugd2FudCB0byBhbHRlciB0aGUgZGVmYXVsdCBjb3VudGVyIHZhbHVlLAoreW91IGNhbiB1c2Ugc29tZXRoaW5nIGxpa2UgPG9wdGlvbj4tLWV2ZW50PVJUQ19JTlRFUlJVUFRTOjIwNDg8L29wdGlvbj4uIE5vdGUgdGhlIGxhc3QKK3RocmVlIHZhbHVlcyBoZXJlIGFyZSBpZ25vcmVkLgorSWYgT1Byb2ZpbGUgaXMgdXNpbmcgdGltZXItaW50ZXJydXB0IG1vZGUsIHRoZXJlIGlzIG5vIGNvbmZpZ3VyYXRpb24gcG9zc2libGUuCis8L3BhcmE+Cis8cGFyYT4KK1RoZSB0YWJsZSBiZWxvdyBsaXN0cyB0aGUgZXZlbnRzIHNlbGVjdGVkIGJ5IGRlZmF1bHQKKyg8b3B0aW9uPi0tZXZlbnQ9ZGVmYXVsdDwvb3B0aW9uPikgZm9yIHRoZSB2YXJpb3VzIGNvbXB1dGVyIGFyY2hpdGVjdHVyZXM6Cis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZSBmcmFtZT0iYWxsIj4KKzx0Z3JvdXAgY29scz0nMyc+IAorPHRib2R5PgorPHJvdz48ZW50cnk+UHJvY2Vzc29yPC9lbnRyeT48ZW50cnk+Y3B1X3R5cGU8L2VudHJ5PjxlbnRyeT5EZWZhdWx0IGV2ZW50PC9lbnRyeT48L3Jvdz4KKzxyb3c+PGVudHJ5PkFscGhhIEVWNDwvZW50cnk+PGVudHJ5PmFscGhhL2V2NDwvZW50cnk+PGVudHJ5PkNZQ0xFUzoxMDAwMDA6MDoxOjE8L2VudHJ5Pjwvcm93PgorPHJvdz48ZW50cnk+QWxwaGEgRVY1PC9lbnRyeT48ZW50cnk+YWxwaGEvZXY1PC9lbnRyeT48ZW50cnk+Q1lDTEVTOjEwMDAwMDowOjE6MTwvZW50cnk+PC9yb3c+Cis8cm93PjxlbnRyeT5BbHBoYSBQQ0E1NjwvZW50cnk+PGVudHJ5PmFscGhhL3BjYTU2PC9lbnRyeT48ZW50cnk+Q1lDTEVTOjEwMDAwMDowOjE6MTwvZW50cnk+PC9yb3c+Cis8cm93PjxlbnRyeT5BbHBoYSBFVjY8L2VudHJ5PjxlbnRyeT5hbHBoYS9ldjY8L2VudHJ5PjxlbnRyeT5DWUNMRVM6MTAwMDAwOjA6MToxPC9lbnRyeT48L3Jvdz4KKzxyb3c+PGVudHJ5PkFscGhhIEVWNjc8L2VudHJ5PjxlbnRyeT5hbHBoYS9ldjY3PC9lbnRyeT48ZW50cnk+Q1lDTEVTOjEwMDAwMDowOjE6MTwvZW50cnk+PC9yb3c+Cis8cm93PjxlbnRyeT5BUk0vWFNjYWxlIFBNVTE8L2VudHJ5PjxlbnRyeT5hcm0veHNjYWxlMTwvZW50cnk+PGVudHJ5PkNQVV9DWUNMRVM6MTAwMDAwOjA6MToxPC9lbnRyeT48L3Jvdz4KKzxyb3c+PGVudHJ5PkFSTS9YU2NhbGUgUE1VMjwvZW50cnk+PGVudHJ5PmFybS94c2NhbGUyPC9lbnRyeT48ZW50cnk+Q1BVX0NZQ0xFUzoxMDAwMDA6MDoxOjE8L2VudHJ5Pjwvcm93PgorPHJvdz48ZW50cnk+QVJNL01QQ29yZTwvZW50cnk+PGVudHJ5PmFybS9tcGNvcmU8L2VudHJ5PjxlbnRyeT5DUFVfQ1lDTEVTOjEwMDAwMDowOjE6MTwvZW50cnk+PC9yb3c+Cis8cm93PjxlbnRyeT5BVlIzMjwvZW50cnk+PGVudHJ5PmF2cjMyPC9lbnRyeT48ZW50cnk+Q1BVX0NZQ0xFUzoxMDAwMDA6MDoxOjE8L2VudHJ5Pjwvcm93PgorPHJvdz48ZW50cnk+QXRobG9uPC9lbnRyeT48ZW50cnk+aTM4Ni9hdGhsb248L2VudHJ5PjxlbnRyeT5DUFVfQ0xLX1VOSEFMVEVEOjEwMDAwMDowOjE6MTwvZW50cnk+PC9yb3c+Cis8cm93PjxlbnRyeT5QZW50aXVtIFBybzwvZW50cnk+PGVudHJ5PmkzODYvcHBybzwvZW50cnk+PGVudHJ5PkNQVV9DTEtfVU5IQUxURUQ6MTAwMDAwOjA6MToxPC9lbnRyeT48L3Jvdz4KKzxyb3c+PGVudHJ5PlBlbnRpdW0gSUk8L2VudHJ5PjxlbnRyeT5pMzg2L3BpaTwvZW50cnk+PGVudHJ5PkNQVV9DTEtfVU5IQUxURUQ6MTAwMDAwOjA6MToxPC9lbnRyeT48L3Jvdz4KKzxyb3c+PGVudHJ5PlBlbnRpdW0gSUlJPC9lbnRyeT48ZW50cnk+aTM4Ni9waWlpPC9lbnRyeT48ZW50cnk+Q1BVX0NMS19VTkhBTFRFRDoxMDAwMDA6MDoxOjE8L2VudHJ5Pjwvcm93PgorPHJvdz48ZW50cnk+UGVudGl1bSBNIChQNiBjb3JlKTwvZW50cnk+PGVudHJ5PmkzODYvcDZfbW9iaWxlPC9lbnRyeT48ZW50cnk+Q1BVX0NMS19VTkhBTFRFRDoxMDAwMDA6MDoxOjE8L2VudHJ5Pjwvcm93PgorPHJvdz48ZW50cnk+UGVudGl1bSA0IChub24tSFQpPC9lbnRyeT48ZW50cnk+aTM4Ni9wNDwvZW50cnk+PGVudHJ5PkdMT0JBTF9QT1dFUl9FVkVOVFM6MTAwMDAwOjE6MToxPC9lbnRyeT48L3Jvdz4KKzxyb3c+PGVudHJ5PlBlbnRpdW0gNCAoSFQpPC9lbnRyeT48ZW50cnk+aTM4Ni9wNC1odDwvZW50cnk+PGVudHJ5PkdMT0JBTF9QT1dFUl9FVkVOVFM6MTAwMDAwOjE6MToxPC9lbnRyeT48L3Jvdz4KKzxyb3c+PGVudHJ5PkhhbW1lcjwvZW50cnk+PGVudHJ5Png4Ni02NC9oYW1tZXI8L2VudHJ5PjxlbnRyeT5DUFVfQ0xLX1VOSEFMVEVEOjEwMDAwMDowOjE6MTwvZW50cnk+PC9yb3c+Cis8cm93PjxlbnRyeT5GYW1pbHkxMGg8L2VudHJ5PjxlbnRyeT54ODYtNjQvZmFtaWx5MTA8L2VudHJ5PjxlbnRyeT5DUFVfQ0xLX1VOSEFMVEVEOjEwMDAwMDowOjE6MTwvZW50cnk+PC9yb3c+Cis8cm93PjxlbnRyeT5GYW1pbHkxMWg8L2VudHJ5PjxlbnRyeT54ODYtNjQvZmFtaWx5MTFoPC9lbnRyeT48ZW50cnk+Q1BVX0NMS19VTkhBTFRFRDoxMDAwMDA6MDoxOjE8L2VudHJ5Pjwvcm93PgorPHJvdz48ZW50cnk+SXRhbml1bTwvZW50cnk+PGVudHJ5PmlhNjQvaXRhbml1bTwvZW50cnk+PGVudHJ5PkNQVV9DWUNMRVM6MTAwMDAwOjA6MToxPC9lbnRyeT48L3Jvdz4KKzxyb3c+PGVudHJ5Pkl0YW5pdW0gMjwvZW50cnk+PGVudHJ5PmlhNjQvaXRhbml1bTI8L2VudHJ5PjxlbnRyeT5DUFVfQ1lDTEVTOjEwMDAwMDowOjE6MTwvZW50cnk+PC9yb3c+Cis8cm93PjxlbnRyeT5USU1FUl9JTlQ8L2VudHJ5PjxlbnRyeT50aW1lcjwvZW50cnk+PGVudHJ5Pk5vbmUgc2VsZWN0YWJsZTwvZW50cnk+PC9yb3c+Cis8cm93PjxlbnRyeT5JQk0gaXNlcmllczwvZW50cnk+PGVudHJ5PlBvd2VyUEMgNC81Lzk3MDwvZW50cnk+PGVudHJ5PkNZQ0xFUzoxMDAwMDowOjE6MTwvZW50cnk+PC9yb3c+Cis8cm93PjxlbnRyeT5JQk0gcHNlcmllczwvZW50cnk+PGVudHJ5PlBvd2VyUEMgNC81Lzk3MC9DZWxsPC9lbnRyeT48ZW50cnk+Q1lDTEVTOjEwMDAwOjA6MToxPC9lbnRyeT48L3Jvdz4KKzxyb3c+PGVudHJ5PklCTSBzMzkwPC9lbnRyeT48ZW50cnk+dGltZXI8L2VudHJ5PjxlbnRyeT5Ob25lIHNlbGVjdGFibGU8L2VudHJ5Pjwvcm93PgorPHJvdz48ZW50cnk+SUJNIHMzOTB4PC9lbnRyeT48ZW50cnk+dGltZXI8L2VudHJ5PjxlbnRyeT5Ob25lIHNlbGVjdGFibGU8L2VudHJ5Pjwvcm93PgorPC90Ym9keT4KKzwvdGdyb3VwPgorPC9pbmZvcm1hbHRhYmxlPgorCis8L3NlY3QyPgorCis8L3NlY3QxPgorIAorPHNlY3QxIGlkPSJzZXR1cC1qaXQiPgorCTx0aXRsZT5TZXR0aW5nIHVwIHRoZSBKSVQgcHJvZmlsaW5nIGZlYXR1cmU8L3RpdGxlPgorCTxwYXJhPgorCQlUbyBnYXRoZXIgaW5mb3JtYXRpb24gYWJvdXQgSklUZWQgY29kZSBmcm9tIGEgdmlydHVhbCBtYWNoaW5lLAorCQlpdCBuZWVkcyB0byBiZSBpbnN0cnVtZW50ZWQgd2l0aCBhbiBhZ2VudCBsaWJyYXJ5LiBXZSB1c2UgdGhlCisJCWFnZW50IGxpYnJhcmllcyBmb3IgSmF2YSBpbiB0aGUgZm9sbG93aW5nIGV4YW1wbGUuIFRvIHVzZSB0aGUKKwkJSmF2YSBwcm9maWxpbmcgZmVhdHVyZSwgeW91IG11c3QgYnVpbGQgT1Byb2ZpbGUgd2l0aCB0aGUgIi0td2l0aC1qYXZhIiBvcHRpb24KKyAgICAgICAgICAgICAgICAoPHhyZWYgbGlua2VuZD0iaW5zdGFsbCIgLz4pLgorCisJPC9wYXJhPgorCisJPHNlY3QyIGlkPSJzZXR1cC1qaXQtanZtIj4KKwkJPHRpdGxlPkpWTSBpbnN0cnVtZW50YXRpb248L3RpdGxlPgorCQk8cGFyYT4KKwkJCUFkZCB0aGlzIHRvIHRoZSBzdGFydHVwIHBhcmFtZXRlcnMgb2YgdGhlIEpWTSAoZm9yIEpWTVRJKToKKworCQkJPHNjcmVlbj48b3B0aW9uPi1hZ2VudHBhdGg6Jmx0O2xpYmRpciZndDsvbGlianZtdGlfb3Byb2ZpbGUuc29bPSZsdDtvcHRpb25zJmd0O108L29wdGlvbj4gPC9zY3JlZW4+CisJCQlvcgorCQkJPHNjcmVlbj48b3B0aW9uPi1hZ2VudGxpYjpqdm10aV9vcHJvZmlsZVs9Jmx0O29wdGlvbnMmZ3Q7XTwvb3B0aW9uPiA8L3NjcmVlbj4KKwkJPC9wYXJhPgorCQk8cGFyYT4KKwkJCVRoZSBKVk1QSSBhZ2VudCBpbXBsZW1lbnRhdGlvbiBpcyBlbmFibGVkIHdpdGggdGhlIGNvbW1hbmQgbGluZSBvcHRpb24KKwkJCTxzY3JlZW4+PG9wdGlvbj4tWHJ1bmp2bXBpX29wcm9maWxlWzombHQ7b3B0aW9ucyZndDtdPC9vcHRpb24+IDwvc2NyZWVuPgorCQk8L3BhcmE+CisJCTxwYXJhPgorCQkJQ3VycmVudGx5LCB0aGVyZSBpcyBqdXN0IG9uZSBvcHRpb24gYXZhaWxhYmxlIC0tIDxvcHRpb24+ZGVidWc8L29wdGlvbj4uIEZvciBKVk1QSSwKKwkJCXRoZSBjb252ZW50aW9uIGZvciBzcGVjaWZ5aW5nIGFuIG9wdGlvbiBpcyA8b3B0aW9uPm9wdGlvbl9uYW1lPVt5ZXN8bm9dPC9vcHRpb24+LgorCQkJRm9yIEpWTVRJLCB0aGUgb3B0aW9uIHNwZWNpZmljYXRpb24gaXMgc2ltcGx5IHRoZSBvcHRpb24gbmFtZSwgaW1wbHlpbmcKKwkJCSJ5ZXMiOyBubyBvcHRpb24gc3BlY2lmaWVkIGltcGxpZXMgIm5vIi4KKwkJPC9wYXJhPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGFnZW50IGxpYnJhcnkgKGluc3RhbGxlZCBpbiA8ZmlsZW5hbWU+Jmx0O29wcm9mX2luc3RhbGxfZGlyJmd0Oy9saWIvb3Byb2ZpbGU8L2ZpbGVuYW1lPikKKyAgICAgICAgICAgICAgICAgICAgICAgIG5lZWRzIHRvIGJlIGluIHRoZSBsaWJyYXJ5IHNlYXJjaCBwYXRoIChlLmcuIGFkZCB0aGUgbGlicmFyeSBkaXJlY3RvcnkKKyAgICAgICAgICAgICAgICAgICAgICAgIHRvIDxjb25zdGFudD5MRF9MSUJSQVJZX1BBVEg8L2NvbnN0YW50PikuIElmIHRoZSBjb21tYW5kIGxpbmUgb2YKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBKVk0gaXMgbm90IGFjY2Vzc2libGUsIGl0IG1heSBiZSBidXJpZWQgd2l0aGluIHNoZWxsIHNjcmlwdHMgb3IgYQorICAgICAgICAgICAgICAgICAgICAgICAgbGF1bmNoZXIgcHJvZ3JhbS4gSXQgbWF5IGFsc28gYmUgcG9zc2libGUgdG8gc2V0IGFuIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIGFkZAorICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGluc3RydW1lbnRhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciBTdW4gSlZNcyB0aGlzIGlzIDxjb25zdGFudD5KQVZBX1RPT0xfT1BUSU9OUzwvY29uc3RhbnQ+LiBQbGVhc2UgY2hlY2sKKyAgICAgICAgICAgICAgICAgICAgICAgIHlvdXIgSlZNIGRvY3VtZW50YXRpb24gZm9yCisgICAgICAgICAgICAgICAgICAgICAgICBmdXJ0aGVyIGluZm9ybWF0aW9uIG9uIHRoZSBhZ2VudCBzdGFydHVwIG9wdGlvbnMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisJPC9zZWN0Mj4KKzwvc2VjdDE+CisKKzxzZWN0MSBpZD0ib3Byb2ZpbGUtZ3VpIj4KKzx0aXRsZT5Vc2luZyA8Y29tbWFuZD5vcHJvZl9zdGFydDwvY29tbWFuZD48L3RpdGxlPgorPHBhcmE+CitUaGUgPGNvbW1hbmQ+b3Byb2Zfc3RhcnQ8L2NvbW1hbmQ+IGFwcGxpY2F0aW9uIHByb3ZpZGVzIGEgY29udmVuaWVudCB3YXkgdG8gc3RhcnQgdGhlIHByb2ZpbGVyLgorTm90ZSB0aGF0IDxjb21tYW5kPm9wcm9mX3N0YXJ0PC9jb21tYW5kPiBpcyBqdXN0IGEgd3JhcHBlciBhcm91bmQgdGhlIDxjb21tYW5kPm9wY29udHJvbDwvY29tbWFuZD4gc2NyaXB0LAorc28gaXQgZG9lcyBub3QgcHJvdmlkZSBtb3JlIHNlcnZpY2VzIHRoYW4gdGhlIHNjcmlwdCBpdHNlbGYuCis8L3BhcmE+Cis8cGFyYT4KK0FmdGVyIDxjb21tYW5kPm9wcm9mX3N0YXJ0PC9jb21tYW5kPiBpcyBzdGFydGVkIHlvdSBjYW4gc2VsZWN0IHRoZSBldmVudCB0eXBlIGZvciBlYWNoIGNvdW50ZXI7Cit0aGUgc2FtcGxpbmcgcmF0ZSBhbmQgb3RoZXIgcmVsYXRlZCBwYXJhbWV0ZXJzIGFyZSBleHBsYWluZWQgaW4gPHhyZWYgbGlua2VuZD0iY29udHJvbGxpbmctZGFlbW9uIiAvPi4KK1RoZSAiQ29uZmlndXJhdGlvbiIgc2VjdGlvbiBhbGxvd3MgeW91IHRvIHNldCBnZW5lcmFsIHBhcmFtZXRlcnMgc3VjaCBhcyB0aGUgYnVmZmVyIHNpemUsIGtlcm5lbCBmaWxlbmFtZQorZXRjLiBUaGUgY291bnRlciBzZXR1cCBpbnRlcmZhY2Ugc2hvdWxkIGJlIHNlbGYtZXhwbGFuYXRvcnk7IDx4cmVmIGxpbmtlbmQ9ImhhcmR3YXJlLWNvdW50ZXJzIiAvPiBhbmQgcmVsYXRlZCAKK2xpbmtzIGNvbnRhaW4gaW5mb3JtYXRpb24gb24gdXNpbmcgdW5pdCBtYXNrcy4KKzwvcGFyYT4KKzxwYXJhPgorQSBzdGF0dXMgbGluZSBzaG93cyB0aGUgY3VycmVudCBzdGF0dXMgb2YgdGhlIHByb2ZpbGVyOiBob3cgbG9uZyBpdCBoYXMgYmVlbiBydW5uaW5nLCBhbmQgdGhlIGF2ZXJhZ2UKK251bWJlciBvZiBpbnRlcnJ1cHRzIHJlY2VpdmVkIHBlciBzZWNvbmQgYW5kIHRoZSB0b3RhbCwgb3ZlciBhbGwgcHJvY2Vzc29ycy4KK05vdGUgdGhhdCBxdWl0dGluZyA8Y29tbWFuZD5vcHJvZl9zdGFydDwvY29tbWFuZD4gZG9lcyBub3Qgc3RvcCB0aGUgcHJvZmlsZXIuCis8L3BhcmE+Cis8cGFyYT4KK1lvdXIgY29uZmlndXJhdGlvbiBpcyBzYXZlZCBpbiB0aGUgc2FtZSBmaWxlIGFzIDxjb21tYW5kPm9wY29udHJvbDwvY29tbWFuZD4gdXNlczsgdGhhdCBpcywKKzxmaWxlbmFtZT5+Ly5vcHJvZmlsZS9kYWVtb25yYzwvZmlsZW5hbWU+LgorPC9wYXJhPgorCis8L3NlY3QxPgorCis8c2VjdDEgaWQ9ImRldGFpbGVkLXBhcmFtZXRlcnMiPgorPHRpdGxlPkNvbmZpZ3VyYXRpb24gZGV0YWlsczwvdGl0bGU+CisKKzxzZWN0MiBpZD0iaGFyZHdhcmUtY291bnRlcnMiPgorPHRpdGxlPkhhcmR3YXJlIHBlcmZvcm1hbmNlIGNvdW50ZXJzPC90aXRsZT4KKzxub3RlPgorPHBhcmE+CitZb3VyIENQVSB0eXBlIG1heSBub3QgaW5jbHVkZSB0aGUgcmVxdWlzaXRlIHN1cHBvcnQgZm9yIGhhcmR3YXJlIHBlcmZvcm1hbmNlIGNvdW50ZXJzLCBpbiB3aGljaCBjYXNlCit5b3UgbXVzdCB1c2UgT1Byb2ZpbGUgaW4gUlRDIG1vZGUgaW4gMi40IChzZWUgPHhyZWYgbGlua2VuZD0icnRjIiAvPiksIG9yIHRpbWVyIG1vZGUgaW4gMi42IChzZWUgPHhyZWYgbGlua2VuZD0idGltZXIiIC8+KS4gCitZb3UgZG8gbm90IHJlYWxseSBuZWVkIHRvIHJlYWQgdGhpcyBzZWN0aW9uIHVubGVzcyB5b3UgYXJlIGludGVyZXN0ZWQgaW4gdXNpbmcgCitldmVudHMgb3RoZXIgdGhhbiB0aGUgZGVmYXVsdCBldmVudCBjaG9zZW4gYnkgT1Byb2ZpbGUuCis8L3BhcmE+Cis8L25vdGU+Cis8cGFyYT4KK1RoZSBJbnRlbCBoYXJkd2FyZSBwZXJmb3JtYW5jZSBjb3VudGVycyBhcmUgZGV0YWlsZWQgaW4gdGhlIEludGVsIElBLTMyIEFyY2hpdGVjdHVyZSBNYW51YWwsIFZvbHVtZSAzLCBhdmFpbGFibGUKK2Zyb20gPHVsaW5rIHVybD0iaHR0cDovL2RldmVsb3Blci5pbnRlbC5jb20vIj5odHRwOi8vZGV2ZWxvcGVyLmludGVsLmNvbS88L3VsaW5rPi4gCitUaGUgQU1EIEF0aGxvbi9PcHRlcm9uL1BoZW5vbS9UdXJpb24gaW1wbGVtZW50YXRpb24gaXMgZGV0YWlsZWQgaW4gPHVsaW5rCit1cmw9Imh0dHA6Ly93d3cuYW1kLmNvbS91cy1lbi9hc3NldHMvY29udGVudF90eXBlL3doaXRlX3BhcGVyc19hbmRfdGVjaF9kb2NzLzIyMDA3LnBkZiI+CitodHRwOi8vd3d3LmFtZC5jb20vdXMtZW4vYXNzZXRzL2NvbnRlbnRfdHlwZS93aGl0ZV9wYXBlcnNfYW5kX3RlY2hfZG9jcy8yMjAwNy5wZGY8L3VsaW5rPi4KK0ZvciBQb3dlclBDNjQgcHJvY2Vzc29ycyBpbiBJQk0gaVNlcmllcywgcFNlcmllcywgYW5kIGJsYWRlIHNlcnZlciBzeXN0ZW1zLCBwcm9jZXNzb3IgZG9jdW1lbnRhdGlvbgoraXMgYXZhaWxhYmxlIGF0IDx1bGluayB1cmw9Imh0dHA6Ly93d3ctMDEuaWJtLmNvbS9jaGlwcy90ZWNobGliL3RlY2hsaWIubnNmL3Byb2R1Y3RmYW1pbGllcy9Qb3dlclBDLyI+CitodHRwOi8vd3d3LTAxLmlibS5jb20vY2hpcHMvdGVjaGxpYi90ZWNobGliLm5zZi9wcm9kdWN0ZmFtaWxpZXMvUG93ZXJQQzwvdWxpbms+LiAgKEZvciBleGFtcGxlLCB0aGUKK3NwZWNpZmljIHB1YmxpY2F0aW9uIGNvbnRhaW5pbmcgaW5mb3JtYXRpb24gb24gdGhlIHBlcmZvcm1hbmNlIG1vbml0b3IgdW5pdCBmb3IgdGhlIFBvd2VyUEM5NzAgaXMgCisiSUJNIFBvd2VyUEMgOTcwRlggUklTQyBNaWNyb3Byb2Nlc3NvciBVc2VyJ3MgTWFudWFsLiIpCitUaGVzZSBwcm9jZXNzb3JzIGFyZSBjYXBhYmxlIG9mIGRlbGl2ZXJpbmcgYW4gaW50ZXJydXB0IHdoZW4gYSBjb3VudGVyIG92ZXJmbG93cy4KK1RoaXMgaXMgdGhlIGJhc2ljIG1lY2hhbmlzbSBvbiB3aGljaCBPUHJvZmlsZSBpcyBiYXNlZC4gVGhlIGRlbGl2ZXJ5IG1vZGUgaXMgPGFjcm9ueW0+Tk1JPC9hY3JvbnltPiwKK3NvIGJsb2NraW5nIGludGVycnVwdHMgaW4gdGhlIGtlcm5lbCBkb2VzIG5vdCBwcmV2ZW50IHByb2ZpbGluZy4gV2hlbiB0aGUgaW50ZXJydXB0IGhhbmRsZXIgaXMgY2FsbGVkLAordGhlIGN1cnJlbnQgPGFjcm9ueW0+UEM8L2Fjcm9ueW0+IHZhbHVlIGFuZCB0aGUgY3VycmVudCB0YXNrIGFyZSByZWNvcmRlZCBpbnRvIHRoZSBwcm9maWxpbmcgc3RydWN0dXJlLgorVGhpcyBhbGxvd3MgdGhlIG92ZXJmbG93IGV2ZW50IHRvIGJlIGF0dGFjaGVkIHRvIGEgc3BlY2lmaWMgYXNzZW1ibHkgaW5zdHJ1Y3Rpb24gaW4gYSBiaW5hcnkgaW1hZ2UuCitUaGUgZGFlbW9uIHJlY2VpdmVzIHRoaXMgZGF0YSBmcm9tIHRoZSBrZXJuZWwsIGFuZCB3cml0ZXMgaXQgdG8gdGhlIHNhbXBsZSBmaWxlcy4KKzwvcGFyYT4KKzxwYXJhPgorSWYgd2UgdXNlIGFuIGV2ZW50IHN1Y2ggYXMgPGNvbnN0YW50PkNQVV9DTEtfVU5IQUxURUQ8L2NvbnN0YW50PiBvciA8Y29uc3RhbnQ+SU5TVF9SRVRJUkVEPC9jb25zdGFudD4KKyg8Y29uc3RhbnQ+R0xPQkFMX1BPV0VSX0VWRU5UUzwvY29uc3RhbnQ+IG9yIDxjb25zdGFudD5JTlNUUl9SRVRJUkVEPC9jb25zdGFudD4sIHJlc3BlY3RpdmVseSwgb24gdGhlIFBlbnRpdW0gNCksIHdlIGNhbgordXNlIHRoZSBvdmVyZmxvdyBjb3VudHMgYXMgYW4gZXN0aW1hdGUgb2YgYWN0dWFsIHRpbWUgc3BlbnQgaW4gZWFjaCBwYXJ0IG9mIGNvZGUuIEFsdGVybmF0aXZlbHkgd2UgY2FuIHByb2ZpbGUgaW50ZXJlc3RpbmcKK2RhdGEgc3VjaCBhcyB0aGUgY2FjaGUgYmVoYXZpb3VyIG9mIHJvdXRpbmVzIHdpdGggdGhlIG90aGVyIGF2YWlsYWJsZSBjb3VudGVycy4KKzwvcGFyYT4KKzxwYXJhPgorSG93ZXZlciB0aGVyZSBhcmUgc2V2ZXJhbCBjYXZlYXRzLiBGaXJzdCwgdGhlcmUgYXJlIHRob3NlIGlzc3VlcyBsaXN0ZWQgaW4gdGhlIEludGVsIG1hbnVhbC4gVGhlcmUgaXMgYSBkZWxheQorYmV0d2VlbiB0aGUgY291bnRlciBvdmVyZmxvdyBhbmQgdGhlIGludGVycnVwdCBkZWxpdmVyeSB0aGF0IGNhbiBza2V3IHJlc3VsdHMgb24gYSBzbWFsbCBzY2FsZSAtIHRoaXMgbWVhbnMKK3lvdSBjYW5ub3QgcmVseSBvbiB0aGUgcHJvZmlsZXMgYXQgdGhlIGluc3RydWN0aW9uIGxldmVsIGFzIGJlaW5nIHBlcmZlY3RseSBhY2N1cmF0ZS4KK0lmIHlvdSBhcmUgdXNpbmcgYW4gImV2ZW50LW1vZGUiIGNvdW50ZXIgc3VjaCBhcyB0aGUgY2FjaGUgY291bnRlcnMsIGEgY291bnQgcmVnaXN0ZXJlZCBhZ2FpbnN0IGl0IGRvZXNuJ3QgbWVhbgordGhhdCBpdCBpcyByZXNwb25zaWJsZSBmb3IgdGhhdCBldmVudC4gSG93ZXZlciwgaXQgaW1wbGllcyB0aGF0IHRoZSBjb3VudGVyIG92ZXJmbG93ZWQgaW4gdGhlIGR5bmFtaWMKK3ZpY2luaXR5IG9mIHRoYXQgaW5zdHJ1Y3Rpb24sIHRvIHdpdGhpbiBhIGZldyBpbnN0cnVjdGlvbnMuIEZ1cnRoZXIgZGV0YWlscyBvbiB0aGlzIHByb2JsZW0gY2FuIGJlIGZvdW5kIGluIAorPHhyZWYgbGlua2VuZD0iaW50ZXJwcmV0aW5nIiAvPiBhbmQgYWxzbyBpbiB0aGUgRGlnaXRhbCBwYXBlciAiUHJvZmlsZU1lOiBBIEhhcmR3YXJlIFBlcmZvcm1hbmNlIENvdW50ZXIiLgorPC9wYXJhPgorPHBhcmE+CitFYWNoIGNvdW50ZXIgaGFzIHNldmVyYWwgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzLgorRmlyc3QsIHRoZXJlIGlzIHRoZSB1bml0IG1hc2s6IHRoaXMgc2ltcGx5IGZ1cnRoZXIgc3BlY2lmaWVzIHdoYXQgdG8gY291bnQuCitTZWNvbmQsIHRoZXJlIGlzIHRoZSBjb3VudGVyIHZhbHVlLCBkaXNjdXNzZWQgYmVsb3cuIFRoaXJkLCB0aGVyZSBpcyBhIHBhcmFtZXRlciB3aGV0aGVyIHRvIGluY3JlbWVudCBjb3VudHMKK3doaWxzdCBpbiBrZXJuZWwgb3IgdXNlciBzcGFjZS4gWW91IGNhbiBjb25maWd1cmUgdGhlc2Ugc2VwYXJhdGVseSBmb3IgZWFjaCBjb3VudGVyLgorPC9wYXJhPgorPHBhcmE+CitBZnRlciBlYWNoIG92ZXJmbG93IGV2ZW50LCB0aGUgY291bnRlciB3aWxsIGJlIHJlLWluaXRpYWxpemVkCitzdWNoIHRoYXQgYW5vdGhlciBvdmVyZmxvdyB3aWxsIG9jY3VyIGFmdGVyIHRoaXMgbWFueSBldmVudHMgaGF2ZSBiZWVuIGNvdW50ZWQuIFRodXMsIGhpZ2hlcgordmFsdWVzIG1lYW4gbGVzcy1kZXRhaWxlZCBwcm9maWxpbmcsIGFuZCBsb3dlciB2YWx1ZXMgbWVhbiBtb3JlIGRldGFpbCwgYnV0IGhpZ2hlciBvdmVyaGVhZC4KK1BpY2tpbmcgYSBnb29kIHZhbHVlIGZvciB0aGlzCitwYXJhbWV0ZXIgaXMsIHVuZm9ydHVuYXRlbHksIHNvbWV3aGF0IG9mIGEgYmxhY2sgYXJ0LiBJdCBpcyBvZiBjb3Vyc2UgZGVwZW5kZW50IG9uIHRoZSBldmVudAoreW91IGhhdmUgY2hvc2VuLgorU3BlY2lmeWluZyB0b28gbGFyZ2UgYSB2YWx1ZSB3aWxsIG1lYW4gbm90IGVub3VnaCBpbnRlcnJ1cHRzIGFyZSBnZW5lcmF0ZWQKK3RvIGdpdmUgYSByZWFsaXN0aWMgcHJvZmlsZSAodGhvdWdoIHRoaXMgcHJvYmxlbSBjYW4gYmUgYW1lbGlvcmF0ZWQgYnkgcHJvZmlsaW5nIGZvciA8ZW1waGFzaXM+bG9uZ2VyPC9lbXBoYXNpcz4pLgorU3BlY2lmeWluZyB0b28gc21hbGwgYSB2YWx1ZSBjYW4gbGVhZCB0byBoaWdoZXIgcGVyZm9ybWFuY2Ugb3ZlcmhlYWQuCis8L3BhcmE+CisKKzwvc2VjdDI+CisKKzxzZWN0MiBpZD0icnRjIj4KKzx0aXRsZT5PUHJvZmlsZSBpbiBSVEMgbW9kZTwvdGl0bGU+Cis8bm90ZT48cGFyYT4KK1RoaXMgc2VjdGlvbiBhcHBsaWVzIHRvIDIuMi8yLjQga2VybmVscyBvbmx5LgorPC9wYXJhPjwvbm90ZT4KKzxwYXJhPgorU29tZSBDUFUgdHlwZXMgZG8gbm90IHByb3ZpZGUgdGhlIG5lZWRlZCBoYXJkd2FyZSBzdXBwb3J0IHRvIHVzZSB0aGUgaGFyZHdhcmUgcGVyZm9ybWFuY2UgY291bnRlcnMuIFRoaXMgaW5jbHVkZXMKK3NvbWUgbGFwdG9wcywgY2xhc3NpYyBQZW50aXVtcywgYW5kIG90aGVyIENQVSB0eXBlcyBub3QgeWV0IHN1cHBvcnRlZCBieSBPUHJvZmlsZSAoc3VjaCBhcyBDeXJpeCkuIAorT24gdGhlc2UgbWFjaGluZXMsIE9Qcm9maWxlIGZhbGxzCitiYWNrIHRvIHVzaW5nIHRoZSByZWFsLXRpbWUgY2xvY2sgaW50ZXJydXB0IHRvIGNvbGxlY3Qgc2FtcGxlcy4gVGhpcyBpbnRlcnJ1cHQgaXMgYWxzbyB1c2VkIGJ5IHRoZSA8Y29tbWFuZD5ydGM8L2NvbW1hbmQ+Cittb2R1bGU6IHlvdSBjYW5ub3QgaGF2ZSBib3RoIHRoZSBPUHJvZmlsZSBhbmQgcnRjIG1vZHVsZXMgbG9hZGVkIG5vciB0aGUgcnRjIHN1cHBvcnQgY29tcGlsZWQgaW4gdGhlIGtlcm5lbC4KKzwvcGFyYT4KKzxwYXJhPgorUlRDIG1vZGUgaXMgbGVzcyBjYXBhYmxlIHRoYW4gdGhlIGhhcmR3YXJlIGNvdW50ZXJzIG1vZGU7IGluIHBhcnRpY3VsYXIsIGl0IGlzIHVuYWJsZSB0byBwcm9maWxlIHNlY3Rpb25zIG9mCit0aGUga2VybmVsIHdoZXJlIGludGVycnVwdHMgYXJlIGRpc2FibGVkLiBUaGVyZSBpcyBqdXN0IG9uZSBhdmFpbGFibGUgZXZlbnQsICJSVEMgaW50ZXJydXB0cyIsIGFuZCBpdHMgdmFsdWUgCitjb3JyZXNwb25kcyB0byB0aGUgbnVtYmVyIG9mIGludGVycnVwdHMgZ2VuZXJhdGVkIHBlciBzZWNvbmQgKHRoYXQgaXMsIGEgaGlnaGVyIG51bWJlciBtZWFucyBhIGJldHRlciBwcm9maWxpbmcKK3Jlc29sdXRpb24sIGFuZCBoaWdoZXIgb3ZlcmhlYWQpLiBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgcmVhbC10aW1lIGNsb2NrIHN1cHBvcnRzIG9ubHkgcG93ZXItb2YtdHdvCitzYW1wbGluZyByYXRlcyBmcm9tIDIgdG8gNDA5NiBwZXIgc2Vjb25kLiAgT3RoZXIgdmFsdWVzIHdpdGhpbiB0aGlzIHJhbmdlIGFyZSByb3VuZGVkIHRvIHRoZSBuZWFyZXN0IHBvd2VyIG9mCit0d28uCis8L3BhcmE+Cis8cGFyYT4KK1lvdSBjYW4gZm9yY2UgdXNlIG9mIHRoZSBSVEMgaW50ZXJydXB0IHdpdGggdGhlIDxvcHRpb24+Zm9yY2VfcnRjPTE8L29wdGlvbj4gbW9kdWxlIHBhcmFtZXRlci4KKzwvcGFyYT4KKzxwYXJhPgorU2V0dGluZyB0aGUgdmFsdWUgZnJvbSB0aGUgR1VJIHNob3VsZCBiZSBzdHJhaWdodGZvcndhcmQuIE9uIHRoZSBjb21tYW5kIGxpbmUsIHlvdSBuZWVkIHRvIHNwZWNpZnkgdGhlCitldmVudCB0byA8Y29tbWFuZD5vcGNvbnRyb2w8L2NvbW1hbmQ+LCBlLmcuIDoKKzwvcGFyYT4KKzxwYXJhPjxjb21tYW5kPm9wY29udHJvbCAtLWV2ZW50PVJUQ19JTlRFUlJVUFRTOjI1NjwvY29tbWFuZD48L3BhcmE+Cis8L3NlY3QyPgorCis8c2VjdDIgaWQ9InRpbWVyIj4KKzx0aXRsZT5PUHJvZmlsZSBpbiB0aW1lciBpbnRlcnJ1cHQgbW9kZTwvdGl0bGU+Cis8bm90ZT48cGFyYT4KK1RoaXMgc2VjdGlvbiBhcHBsaWVzIHRvIDIuNiBrZXJuZWxzIGFuZCBhYm92ZSBvbmx5LgorPC9wYXJhPjwvbm90ZT4KKzxwYXJhPgorSW4gMi42IGtlcm5lbHMgb24gQ1BVcyB3aXRob3V0IE9Qcm9maWxlIHN1cHBvcnQgZm9yIHRoZSBoYXJkd2FyZSBwZXJmb3JtYW5jZSBjb3VudGVycywgdGhlIGRyaXZlcgorZmFsbHMgYmFjayB0byB1c2luZyB0aGUgdGltZXIgaW50ZXJydXB0IGZvciBwcm9maWxpbmcuIExpa2UgdGhlIFJUQyBtb2RlIGluIDIuNCBrZXJuZWxzLCB0aGlzIGlzIG5vdCBhYmxlIHRvCitwcm9maWxlIGNvZGUgdGhhdCBoYXMgaW50ZXJydXB0cyBkaXNhYmxlZC4gTm90ZSB0aGF0IHRoZXJlIGFyZSBubyBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgZm9yCitzZXR0aW5nIHRoaXMsIHVubGlrZSB0aGUgUlRDIGFuZCBoYXJkd2FyZSBwZXJmb3JtYW5jZSBjb3VudGVyIHNldHVwLgorPC9wYXJhPgorPHBhcmE+CitZb3UgY2FuIGZvcmNlIHVzZSBvZiB0aGUgdGltZXIgaW50ZXJydXB0IGJ5IHVzaW5nIHRoZSA8b3B0aW9uPnRpbWVyPTE8L29wdGlvbj4gbW9kdWxlCitwYXJhbWV0ZXIgKG9yIDxvcHRpb24+b3Byb2ZpbGUudGltZXI9MTwvb3B0aW9uPiBvbiB0aGUgYm9vdCBjb21tYW5kIGxpbmUgaWYgT1Byb2ZpbGUgaXMKK2J1aWx0LWluKS4KKzwvcGFyYT4KKzwvc2VjdDI+CisKKzxzZWN0MiBpZD0icDQiPgorPHRpdGxlPlBlbnRpdW0gNCBzdXBwb3J0PC90aXRsZT4KKzxwYXJhPgorVGhlIFBlbnRpdW0gNCAvIFhlb24gcGVyZm9ybWFuY2UgY291bnRlcnMgYXJlIG9yZ2FuaXplZCBhcm91bmQgMyB0eXBlcyBvZiBtb2RlbCBzcGVjaWZpYyByZWdpc3RlcnMgKE1TUnMpOiA0NSBldmVudAorc2VsZWN0aW9uIGNvbnRyb2wgcmVnaXN0ZXJzIChFU0NScyksIDE4IGNvdW50ZXIgY29uZmlndXJhdGlvbiBjb250cm9sIHJlZ2lzdGVycyAoQ0NDUnMpIGFuZCAxOCBjb3VudGVycy4gRVNDUnMgZGVzY3JpYmUgYQorcGFydGljdWxhciBzZXQgb2YgZXZlbnRzIHdoaWNoIGFyZSB0byBiZSByZWNvcmRlZCwgYW5kIENDQ1JzIGJpbmQgRVNDUnMgdG8gY291bnRlcnMgYW5kIGNvbmZpZ3VyZSB0aGVpcgorb3BlcmF0aW9uLiBVbmZvcnR1bmF0ZWx5IHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSByZWdpc3RlcnMgaXMgcXVpdGUgY29tcGxleDsgdGhleSBjYW5ub3QgYWxsIGJlIHVzZWQgd2l0aCBvbmUKK2Fub3RoZXIgYXQgYW55IHRpbWUuIFRoZXJlIGlzLCBob3dldmVyLCBhIHN1YnNldCBvZiA4IGNvdW50ZXJzLCA4IEVTQ1JzLCBhbmQgOCBDQ0NScyB3aGljaCBjYW4gYmUgdXNlZCBpbmRlcGVuZGVudGx5IG9mCitvbmUgYW5vdGhlciwgc28gT1Byb2ZpbGUgb25seSBhY2Nlc3NlcyB0aG9zZSByZWdpc3RlcnMsIHRyZWF0aW5nIHRoZW0gYXMgYSBiYW5rIG9mIDggIm5vcm1hbCIgY291bnRlcnMsIHNpbWlsYXIKK3RvIHRob3NlIGluIHRoZSBQNiBvciBBdGhsb24vT3B0ZXJvbi9QaGVub20vVHVyaW9uIGZhbWlsaWVzIG9mIENQVS4KKzwvcGFyYT4KKzxwYXJhPgorVGhlcmUgaXMgY3VycmVudGx5IG5vIHN1cHBvcnQgZm9yIFByZWNpc2lvbiBFdmVudC1CYXNlZCBTYW1wbGluZyAoUEVCUyksIG5vciBhbnkgYWR2YW5jZWQgdXNlcyBvZiB0aGUgRGVidWcgU3RvcmUKKyhEUykuIEN1cnJlbnQgc3VwcG9ydCBpcyBsaW1pdGVkIHRvIHRoZSBjb25zZXJ2YXRpdmUgZXh0ZW5zaW9uIG9mIE9Qcm9maWxlJ3MgZXhpc3RpbmcgaW50ZXJydXB0LWJhc2VkIG1vZGVsIGRlc2NyaWJlZAorYWJvdmUuICBQZXJmb3JtYW5jZSBtb25pdG9yaW5nIGhhcmR3YXJlIG9uIFBlbnRpdW0gNCAvIFhlb24gcHJvY2Vzc29ycyB3aXRoIEh5cGVydGhyZWFkaW5nIGVuYWJsZWQgKG11bHRpcGxlIGxvZ2ljYWwKK3Byb2Nlc3NvcnMgb24gYSBzaW5nbGUgZGllKSBpcyBub3Qgc3VwcG9ydGVkIGluIDIuNCBrZXJuZWxzICh5b3UgY2FuIHVzZSBPUHJvZmlsZSBpZiB5b3UgZGlzYWJsZSBoeXBlci10aHJlYWRpbmcsCit0aG91Z2gpLgorPC9wYXJhPgorPC9zZWN0Mj4KKworPHNlY3QyIGlkPSJpYTY0Ij4KKzx0aXRsZT5JbnRlbCBJdGFuaXVtIDIgc3VwcG9ydDwvdGl0bGU+Cis8cGFyYT4KK1RoZSBJdGFuaXVtIDIgcGVyZm9ybWFuY2UgbW9uaXRvcmluZyB1bml0IChQTVUpIG9yZ2FuaXplcyB0aGUgY291bnRlcnMgYXMgZm91cgorcGFpcnMgb2YgcGVyZm9ybWFuY2UgZXZlbnQgbW9uaXRvcmluZyByZWdpc3RlcnMuIEVhY2ggcGFpciBpcyBjb21wb3NlZCBvZiBhCitQZXJmb3JtYW5jZSBNb25pdG9yaW5nIENvbmZpZ3VyYXRpb24gKFBNQykgcmVnaXN0ZXIgYW5kIFBlcmZvcm1hbmNlIE1vbml0b3JpbmcKK0RhdGEgKFBNRCkgcmVnaXN0ZXIuICBUaGUgUE1DIHNlbGVjdHMgdGhlIHBlcmZvcm1hbmNlIGV2ZW50IGJlaW5nIG1vbml0b3JlZCBhbmQKK3RoZSBQTUQgZGV0ZXJtaW5lcyB0aGUgc2FtcGxpbmcgaW50ZXJ2YWwuIFRoZSBJQTY0IFBlcmZvcm1hbmNlIE1vbml0b3JpbmcgVW5pdAorKFBNVSkgdHJpZ2dlcnMgc2FtcGxpbmcgd2l0aCBtYXNrYWJsZSBpbnRlcnJ1cHRzLiBUaHVzLCBzYW1wbGVzIHdpbGwgbm90IG9jY3VyCitpbiBzZWN0aW9ucyBvZiB0aGUgSUE2NCBrZXJuZWwgd2hlcmUgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQuCis8L3BhcmE+Cis8cGFyYT4KK05vbmUgb2YgdGhlIGFkdmFuY2UgZmVhdHVyZXMgb2YgdGhlIEl0YW5pdW0gMiBwZXJmb3JtYW5jZSBtb25pdG9yaW5nIHVuaXQKK3N1Y2ggYXMgb3Bjb2RlIG1hdGNoaW5nLCBhZGRyZXNzIHJhbmdlIG1hdGNoaW5nLCBvciBwcmVjaXNlIGV2ZW50IHNhbXBsaW5nIGFyZQorc3VwcG9ydGVkIGJ5IHRoaXMgdmVyc2lvbiBvZiBPUHJvZmlsZS4gIFRoZSBJdGFuaXVtIDIgc3VwcG9ydCBvbmx5IG1hcHMgT1Byb2ZpbGUncworZXhpc3RpbmcgaW50ZXJydXB0LWJhc2VkIG1vZGVsIHRvIHRoZSBQTVUgaGFyZHdhcmUuCis8L3BhcmE+Cis8L3NlY3QyPgorCis8c2VjdDIgaWQ9InBwYzY0Ij4KKzx0aXRsZT5Qb3dlclBDNjQgc3VwcG9ydDwvdGl0bGU+Cis8cGFyYT4KK1RoZSBwZXJmb3JtYW5jZSBtb25pdG9yaW5nIHVuaXQgKFBNVSkgZm9yIHRoZSBJQk0gUG93ZXJQQyA2NC1iaXQgcHJvY2Vzc29ycyAKK2NvbnNpc3RzIG9mIGJldHdlZW4gNCBhbmQgOCBjb3VudGVycyAoZGVwZW5kaW5nIG9uIHRoZSBtb2RlbCksIHBsdXMgdGhyZWUKK3NwZWNpYWwgcHVycG9zZSByZWdpc3RlcnMgdXNlZCBmb3IgcHJvZ3JhbW1pbmcgdGhlIGNvdW50ZXJzIC0tIE1NQ1IwLCBNTUNSMSwKK2FuZCBNTUNSQS4gIEFkdmFuY2VkIGZlYXR1cmVzIHN1Y2ggYXMgaW5zdHJ1Y3Rpb24gbWF0Y2hpbmcgYW5kIHRocmVzaG9sZGluZyBhcmUKK25vdCBzdXBwb3J0ZWQgYnkgdGhpcyB2ZXJzaW9uIG9mIE9Qcm9maWxlLgorPG5vdGU+TGF0ZXIgdmVyc2lvbnMgb2YgdGhlIElCTSBQT1dFUjUrIHByb2Nlc3NvciAoYmVnaW5uaW5nIHdpdGggcmV2aXNpb24gMy4wKQorcnVuIHRoZSBwZXJmb3JtYW5jZSBtb25pdG9yIHVuaXQgaW4gUE9XRVI2IG1vZGUsIGVmZmVjdGl2ZWx5IHJlbW92aW5nIE9Qcm9maWxlJ3MKK2FjY2VzcyB0byBjb3VudGVycyA1IGFuZCA2LiAgVGhlc2UgdHdvIGNvdW50ZXJzIGFyZSBkZWRpY2F0ZWQgdG8gY291bnRpbmcKK2luc3RydWN0aW9ucyBjb21wbGV0ZWQgYW5kIGN5Y2xlcywgcmVzcGVjdGl2ZWx5LiAgSW4gUE9XRVI2IG1vZGUsIGhvd2V2ZXIsIHRoZQorY291bnRlcnMgZG8gbm90IGdlbmVyYXRlIGFuIGludGVycnVwdCBvbiBvdmVyZmxvdyBhbmQgc28gYXJlIHVudXNhYmxlIGJ5CitPUHJvZmlsZS4gIEtlcm5lbCB2ZXJzaW9ucyAyLjYuMjMgYW5kIGhpZ2hlciB3aWxsIHJlY29nbml6ZSB0aGlzIG1vZGUKK2FuZCBleHBvcnQgInBwYzY0L3Bvd2VyNSsrIiBhcyB0aGUgY3B1X3R5cGUgdG8gdGhlIG9wcm9maWxlZnMgcHNldWRvIGZpbGVzeXN0ZW0uCitPUHJvZmlsZSB1c2Vyc3BhY2UgcmVzcG9uZHMgdG8gdGhpcyBjcHVfdHlwZSBieSByZW1vdmluZyB0aGVzZSBjb3VudGVycyBmcm9tCit0aGUgbGlzdCBvZiBwb3RlbnRpYWwgZXZlbnRzIHRvIGNvdW50LiAgV2l0aG91dCB0aGlzIGtlcm5lbCBzdXBwb3J0LCBhdHRlbXB0cwordG8gcHJvZmlsZSB1c2luZyBhbiBldmVudCBmcm9tIG9uZSBvZiB0aGVzZSBjb3VudGVycyB3aWxsIHlpZWxkIGluY29ycmVjdAorcmVzdWx0cyAtLSB0eXBpY2FsbHksIHplcm8gKG9yIG5lYXIgemVybykgc2FtcGxlcyBpbiB0aGUgZ2VuZXJhdGVkIHJlcG9ydC4KKzwvbm90ZT4KKzwvcGFyYT4KKworPC9zZWN0Mj4KKworPHNlY3QyIGlkPSJjZWxsLWJlIj4KKzx0aXRsZT5DZWxsIEJyb2FkYmFuZCBFbmdpbmUgc3VwcG9ydDwvdGl0bGU+Cis8cGFyYT4KK1RoZSBDZWxsIEJyb2FkYmFuZCBFbmdpbmUgKENCRSkgcHJvY2Vzc29yIGNvcmUgY29uc2lzdHMgb2YgYSBQb3dlclBDIFByb2Nlc3NpbmcKK0VsZW1lbnQgKFBQRSkgYW5kIDggU3luZXJnaXN0aWMgUHJvY2Vzc2luZyBFbGVtZW50cyAoU1BFKS4gIFBQRXMgYW5kIFNQRXMgZWFjaAorY29uc2lzdCBvZiBhIHByb2Nlc3NpbmcgdW5pdCAoUFBVIGFuZCBTUFUsIHJlc3BlY3RpdmVseSkgYW5kIG90aGVyIGhhcmR3YXJlCitjb21wb25lbnRzLCBzdWNoIGFzIG1lbW9yeSBjb250cm9sbGVycy4KKzwvcGFyYT4KKzxwYXJhPgorQSBQUFUgaGFzIHR3byBoYXJkd2FyZSB0aHJlYWRzIChha2EgInZpcnR1YWwgQ1BVcyIpLiAgVGhlIHBlcmZvcm1hbmNlIG1vbml0b3IKK3VuaXQgb2YgdGhlIENCRSBjb2xsZWN0cyBldmVudCBpbmZvcm1hdGlvbiBvbiBvbmUgaGFyZHdhcmUgdGhyZWFkIGF0IGEgdGltZS4KK1RoZXJlZm9yZSwgd2hlbiBwcm9maWxpbmcgUFBFIGV2ZW50cywKK09Qcm9maWxlIGNvbGxlY3RzIHRoZSBwcm9maWxlIGJhc2VkIG9uIHRoZSBzZWxlY3RlZCBldmVudHMgYnkgdGltZSBzbGljaW5nIHRoZQorcGVyZm9ybWFuY2UgY291bnRlciBoYXJkd2FyZSBiZXR3ZWVuIHRoZSB0d28gdGhyZWFkcy4gICBUaGUgdXNlciBtdXN0IGVuc3VyZSB0aGUKK2NvbGxlY3Rpb24gaW50ZXJ2YWwgaXMgbG9uZyBlbm91Z2ggc28gdGhhdCB0aGUgdGltZSBzcGVudCBjb2xsZWN0aW5nIGRhdGEgZm9yCitlYWNoIFBQVSBpcyBzdWZmaWNpZW50IHRvIG9idGFpbiBhIGdvb2QgcHJvZmlsZS4KKzwvcGFyYT4KKzxwYXJhPgorVG8gcHJvZmlsZSBhbiBTUFUgYXBwbGljYXRpb24sIHRoZSB1c2VyIHNob3VsZCBzcGVjaWZ5IHRoZSBTUFVfQ1lDTEVTIGV2ZW50LgorV2hlbiBzdGFydGluZyBPUHJvZmlsZSB3aXRoIFNQVV9DWUNMRVMsIHRoZSBvcGNvbnRyb2wgc2NyaXB0IGVuZm9yY2VzIGNlcnRhaW4KK3NlcGFyYXRpb24gcGFyYW1ldGVycyAoc2VwYXJhdGU9Y3B1LGxpYikgdG8gZW5zdXJlIHRoYXQgc3VmZmljaWVudCBpbmZvcm1hdGlvbgoraXMgY29sbGVjdGVkIGluIHRoZSBzYW1wbGUgZGF0YSBpbiBvcmRlciB0byBnZW5lcmF0ZSBhIGNvbXBsZXRlIHJlcG9ydC4gIFRoZQorLS1tZXJnZT1jcHUgb3B0aW9uIGNhbiBiZSB1c2VkIHRvIG9idGFpbiBhIG1vcmUgcmVhZGFibGUgcmVwb3J0IGlmIGFuYWx5emluZwordGhlIHBlcmZvcm1hbmNlIG9mIGVhY2ggc2VwYXJhdGUgU1BVIGlzIG5vdCBuZWNlc3NhcnkuCis8L3BhcmE+Cis8cGFyYT4KK1Byb2ZpbGluZyB3aXRoIGFuIFNQVSBldmVudCAoZXZlbnRzIDQxMDAgdGhyb3VnaCA0MTYzKSBpcyBub3QgY29tcGF0aWJsZSB3aXRoIGFueSBvdGhlcgorZXZlbnQuICBGdXJ0aGVyIG1vcmUsIG9ubHkgb25lIFNQVSBldmVudCBjYW4gYmUgc3BlY2lmaWVkIGF0IGEgdGltZS4gIFRoZSBoYXJkd2FyZSBvbmx5CitzdXBwb3J0cyBwcm9maWxpbmcgb24gb25lIFNQVSBwZXIgbm9kZSBhdCBhIHRpbWUuICBUaGUgT1Byb2ZpbGUga2VybmVsIGNvZGUgdGltZSBzbGljZXMKK2JldHdlZW4gdGhlIGVpZ2h0IFNQVXMgdG8gY29sbGVjdCBkYXRhIG9uIGFsbCBTUFVzLgorPC9wYXJhPgorPHBhcmE+CitTUFUgcHJvZmlsZSByZXBvcnRzIGhhdmUgc29tZSB1bmlxdWUgY2hhcmFjdGVyaXN0aWNzIGNvbXBhcmVkIHRvIHJlcG9ydHMgZm9yCitzdGFuZGFyZCBhcmNoaXRlY3R1cmVzOgorPC9wYXJhPgorPGl0ZW1pemVkbGlzdD4KKzxsaXN0aXRlbT5UeXBpY2FsbHkgbm8gImFwcCBuYW1lIiBjb2x1bW4uICBUaGlzIGlzIHJlYWxseSBzdGFuZGFyZCBPUHJvZmlsZSBiZWhhdmlvcgord2hlbiB0aGUgcmVwb3J0IGNvbnRhaW5zIHNhbXBsZXMgZm9yIGp1c3QgYSBzaW5nbGUgYXBwbGljYXRpb24sIHdoaWNoIGlzCitjb21tb25seSB0aGUgY2FzZSB3aGVuIHByb2ZpbGluZyBTUFVzLjwvbGlzdGl0ZW0+Cis8bGlzdGl0ZW0+IkNQVSIgZXF1YXRlcyB0byAiU1BVIjwvbGlzdGl0ZW0+Cis8bGlzdGl0ZW0+U3BlY2lmeWluZyAnLS1sb25nLWZpbGVuYW1lcycgb24gdGhlIG9wcmVwb3J0IGNvbW1hbmQgZG9lcyBub3QgYWx3YXlzIHJlc3VsdAoraW4gbG9uZyBmaWxlbmFtZXMuICBUaGlzIGhhcHBlbnMgd2hlbiB0aGUgU1BVIGFwcGxpY2F0aW9uIGNvZGUgaXMgZW1iZWRkZWQgaW4KK3RoZSBQUEUgZXhlY3V0YWJsZSBvciBzaGFyZWQgbGlicmFyeS4gIFRoZSBlbWJlZGRlZCBTUFUgRUxGIGRhdGEgY29udGFpbnMgb25seSB0aGUKK3Nob3J0IGZpbGVuYW1lIChpLmUuLCBubyBwYXRoIGluZm9ybWF0aW9uKSBmb3IgdGhlIFNQVSBiaW5hcnkgZmlsZSB0aGF0IHdhcyB1c2VkIGFzCit0aGUgc291cmNlIGZvciBlbWJlZGRpbmcuICAgVGhlIHJlYXNvbiB0aGF0IGp1c3QgdGhlIHNob3J0IGZpbGVuYW1lIGlzIHVzZWQgaXMgYmVjYXVzZQordGhlIG9yaWdpbmFsIFNQVSBiaW5hcnkgZmlsZSBtYXkgbm90IGV4aXN0IG9yIGJlIGFjY2Vzc2libGUgYXQgcnVudGltZS4gIFRoZSBwZXJmb3JtYW5jZQorYW5hbHlzdCBtdXN0IGhhdmUgc3VmZmljaWVudCBrbm93bGVkZ2Ugb2YgdGhlIGFwcGxpY2F0aW9uIHRvIGJlIGFibGUgdG8gY29ycmVsYXRlIHRoZQorU1BVIGJpbmFyeSBpbWFnZSBuYW1lcyBmb3VuZCBpbiB0aGUgIHJlcG9ydCB0byB0aGUgYXBwbGljYXRpb24ncyBzb3VyY2UgZmlsZXMuCis8bm90ZT4KK0NvbXBpbGUgdGhlIGFwcGxpY2F0aW9uIHdpdGggLWcgYW5kIGdlbmVyYXRlIHRoZSBPUHJvZmlsZSByZXBvcnQKK3dpdGggLWcgdG8gZmFjaWxpdGF0ZSBmaW5kaW5nIHRoZSByaWdodCBzb3VyY2UgZmlsZShzKSBvbiB3aGljaCB0byBmb2N1cy4KKzwvbm90ZT4KKzwvbGlzdGl0ZW0+Cis8L2l0ZW1pemVkbGlzdD4KKworPC9zZWN0Mj4KKworPHNlY3QyIGlkPSJhbWQtaWJzLXN1cHBvcnQiPgorPHRpdGxlPkFNRDY0ICh4ODZfNjQpIEluc3RydWN0aW9uLUJhc2VkIFNhbXBsaW5nIChJQlMpIHN1cHBvcnQ8L3RpdGxlPgorCis8cGFyYT4KK0luc3RydWN0aW9uLUJhc2VkIFNhbXBsaW5nIChJQlMpIGlzIGEgbmV3IHBlcmZvcm1hbmNlIG1lYXN1cmVtZW50IHRlY2huaXF1ZQorYXZhaWxhYmxlIG9uIEFNRCBGYW1pbHkgMTBoIHByb2Nlc3NvcnMuIFRyYWRpdGlvbmFsIHBlcmZvcm1hbmNlIGNvdW50ZXIKK3NhbXBsaW5nIGlzIG5vdCBwcmVjaXNlIGVub3VnaCB0byBpc29sYXRlIHBlcmZvcm1hbmNlIGlzc3VlcyB0byBpbmRpdmlkdWFsCitpbnN0cnVjdGlvbnMuIElCUywgaG93ZXZlciwgcHJlY2lzZWx5IGlkZW50aWZpZXMgaW5zdHJ1Y3Rpb25zIHdoaWNoIGFyZSBub3QKK21ha2luZyB0aGUgYmVzdCB1c2Ugb2YgdGhlIHByb2Nlc3NvciBwaXBlbGluZSBhbmQgbWVtb3J5IGhpZXJhcmNoeS4KK0ZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2UgcmVmZXIgdG8gdGhlICJJbnN0cnVjdGlvbi1CYXNlZCBTYW1wbGluZzoKK0EgTmV3IFBlcmZvcm1hbmNlIEFuYWx5c2lzIFRlY2huaXF1ZSBmb3IgQU1EIEZhbWlseSAxMGggUHJvY2Vzc29ycyIgKAorPHVsaW5rIHVybD0iaHR0cDovL2RldmVsb3Blci5hbWQuY29tL2Fzc2V0cy9BTURfSUJTX3BhcGVyX0VOLnBkZiI+CitodHRwOi8vZGV2ZWxvcGVyLmFtZC5jb20vYXNzZXRzL0FNRF9JQlNfcGFwZXJfRU4ucGRmPC91bGluaz4pLgorVGhlcmUgYXJlIHR3byB0eXBlcyBvZiBJQlMgcHJvZmlsZSB0eXBlcywgZGVzY3JpYmVkIGluIHRoZSBmb2xsb3dpbmcgc2VjdGlvbnMuCis8L3BhcmE+CisKKzxzZWN0MyBpZD0iaWJzLWZldGNoIj4KKzx0aXRsZT5JQlMgRmV0Y2g8L3RpdGxlPgorCis8cGFyYT4KK0lCUyBmZXRjaCBzYW1wbGluZyBpcyBhIHN0YXRpc3RpY2FsIHNhbXBsaW5nIG1ldGhvZCB3aGljaCBjb3VudHMgY29tcGxldGVkCitmZXRjaCBvcGVyYXRpb25zLiBXaGVuIHRoZSBudW1iZXIgb2YgY29tcGxldGVkIGZldGNoIG9wZXJhdGlvbnMgcmVhY2hlcyB0aGUKK21heGltdW0gZmV0Y2ggY291bnQgKHRoZSBzYW1wbGluZyBwZXJpb2QpLCBJQlMgdGFncyB0aGUgZmV0Y2ggb3BlcmF0aW9uIGFuZAorbW9uaXRvcnMgdGhhdCBvcGVyYXRpb24gdW50aWwgaXQgZWl0aGVyIGNvbXBsZXRlcyBvciBhYm9ydHMuIFdoZW4gYSB0YWdnZWQKK2ZldGNoIGNvbXBsZXRlcyBvciBhYm9ydHMsIGEgc2FtcGxpbmcgaW50ZXJydXB0IGlzIGdlbmVyYXRlZCBhbmQgYW4gSUJTIGZldGNoCitzYW1wbGUgaXMgdGFrZW4uIEFuIElCUyBmZXRjaCBzYW1wbGUgY29udGFpbnMgYSB0aW1lc3RhbXAsIHRoZSBpZGVudGlmaWVyIG9mCit0aGUgaW50ZXJydXB0ZWQgcHJvY2VzcywgdGhlIHZpcnR1YWwgZmV0Y2ggYWRkcmVzcywgYW5kIHNldmVyYWwgZXZlbnQgZmxhZ3MKK2FuZCB2YWx1ZXMgdGhhdCBkZXNjcmliZSB3aGF0IGhhcHBlbmVkIGR1cmluZyB0aGUgZmV0Y2ggb3BlcmF0aW9uLiAKKzwvcGFyYT4KKworPC9zZWN0Mz4KKworPHNlY3QzIGlkPSJpYnMtb3AiPgorPHRpdGxlPklCUyBPcDwvdGl0bGU+CisKKzxwYXJhPgorSUJTIG9wIHNhbXBsaW5nIHNlbGVjdHMsIHRhZ3MsIGFuZCBtb25pdG9ycyBtYWNyby1vcHMgYXMgaXNzdWVkIGZyb20gQU1ENjQKK2luc3RydWN0aW9ucy4gVHdvIG9wdGlvbnMgYXJlIGF2YWlsYWJsZSBmb3Igc2VsZWN0aW5nIG9wcyBmb3Igc2FtcGxpbmc6Cis8L3BhcmE+CisKKzxpdGVtaXplZGxpc3Q+Cis8bGlzdGl0ZW0+CitDeWNsZXMtYmFzZWQgc2VsZWN0aW9uIGNvdW50cyBDUFUgY2xvY2sgY3ljbGVzLiBUaGUgb3AgaXMgdGFnZ2VkIGFuZCBtb25pdG9yZWQKK3doZW4gdGhlIGNvdW50IHJlYWNoZXMgYSB0aHJlc2hvbGQgKHRoZSBzYW1wbGluZyBwZXJpb2QpIGFuZCBhIHZhbGlkIG9wIGlzCithdmFpbGFibGUuIAorPC9saXN0aXRlbT4KKworPGxpc3RpdGVtPgorRGlzcGF0Y2hlZCBvcC1iYXNlZCBzZWxlY3Rpb24gY291bnRzIGRpc3BhdGNoZWQgbWFjcm8tb3BzLgorV2hlbiB0aGUgY291bnQgcmVhY2hlcyBhIHRocmVzaG9sZCwgdGhlIG5leHQgdmFsaWQgb3AgaXMgdGFnZ2VkIGFuZCBtb25pdG9yZWQuIAorPC9saXN0aXRlbT4KKzwvaXRlbWl6ZWRsaXN0PgorCis8cGFyYT4KK0luIGJvdGggY2FzZXMsIGFuIElCUyBzYW1wbGUgaXMgZ2VuZXJhdGVkIG9ubHkgaWYgdGhlIHRhZ2dlZCBvcCByZXRpcmVzLgorVGh1cywgSUJTIG9wIGV2ZW50IGluZm9ybWF0aW9uIGRvZXMgbm90IG1lYXN1cmUgc3BlY3VsYXRpdmUgZXhlY3V0aW9uIGFjdGl2aXR5LgorVGhlIGV4ZWN1dGlvbiBzdGFnZXMgb2YgdGhlIHBpcGVsaW5lIG1vbml0b3IgdGhlIHRhZ2dlZCBtYWNyby1vcC4gV2hlbiB0aGUKK3RhZ2dlZCBtYWNyby1vcCByZXRpcmVzLCBhIHNhbXBsaW5nIGludGVycnVwdCBpcyBnZW5lcmF0ZWQgYW5kIGFuIElCUyBvcAorc2FtcGxlIGlzIHRha2VuLiBBbiBJQlMgb3Agc2FtcGxlIGNvbnRhaW5zIGEgdGltZXN0YW1wLCB0aGUgaWRlbnRpZmllciBvZgordGhlIGludGVycnVwdGVkIHByb2Nlc3MsIHRoZSB2aXJ0dWFsIGFkZHJlc3Mgb2YgdGhlIEFNRDY0IGluc3RydWN0aW9uIGZyb20KK3doaWNoIHRoZSBvcCB3YXMgaXNzdWVkLCBhbmQgc2V2ZXJhbCBldmVudCBmbGFncyBhbmQgdmFsdWVzIHRoYXQgZGVzY3JpYmUKK3doYXQgaGFwcGVuZWQgd2hlbiB0aGUgbWFjcm8tb3AgZXhlY3V0ZWQuCis8L3BhcmE+CisKKzwvc2VjdDM+CisKKzxwYXJhPgorRW5hYmxpbmcgSUJTIHByb2ZpbGluZyBpcyBkb25lIHNpbXBseSBieSBzcGVjaWZ5aW5nIElCUyBwZXJmb3JtYW5jZSBldmVudHMKK3Rocm91Z2ggdGhlICItLWV2ZW50PSIgb3B0aW9ucy4gVGhlc2UgZXZlbnRzIGFyZSBsaXN0ZWQgaW4gdGhlCis8ZnVuY3Rpb24+b3Bjb250cm9sIC0tbGlzdC1ldmVudHM8L2Z1bmN0aW9uPi4KKzwvcGFyYT4KKworPHNjcmVlbj4KK29wY29udHJvbCAtLWV2ZW50PUlCU19GRVRDSF9YWFg6Jmx0O2NvdW50Jmd0OzombHQ7dW0mZ3Q7OiZsdDtrZXJuZWwmZ3Q7OiZsdDt1c2VyJmd0Oworb3Bjb250cm9sIC0tZXZlbnQ9SUJTX09QX1hYWDombHQ7Y291bnQmZ3Q7OiZsdDt1bSZndDs6Jmx0O2tlcm5lbCZndDs6Jmx0O3VzZXImZ3Q7CisKK05vdGU6ICogQWxsIElCUyBmZXRjaCBldmVudCBtdXN0IGhhdmUgdGhlIHNhbWUgZXZlbnQgY291bnQgYW5kIHVuaXRtYXNrLAorICAgICAgICBhcyBkbyB0aG9zZSBmb3IgSUJTIG9wLgorPC9zY3JlZW4+CisKKzwvc2VjdDI+CisKKworPHNlY3QyIGlkPSJtaXN1c2UiPgorPHRpdGxlPkRhbmdlcm91cyBjb3VudGVyIHNldHRpbmdzPC90aXRsZT4KKzxwYXJhPgorT1Byb2ZpbGUgaXMgYSBsb3ctbGV2ZWwgcHJvZmlsZXIgd2hpY2ggYWxsb3cgY29udGludW91cyBwcm9maWxpbmcgd2l0aCBhIGxvdy1vdmVyaGVhZCBjb3N0LgorSWYgdG9vIGxvdyBhIGNvdW50IHJlc2V0IHZhbHVlIGlzIHNldCBmb3IgYSBjb3VudGVyLCB0aGUgc3lzdGVtIGNhbiBiZWNvbWUgb3ZlcmxvYWRlZCB3aXRoIGNvdW50ZXIKK2ludGVycnVwdHMsIGFuZCBzZWVtIGFzIGlmIHRoZSBzeXN0ZW0gaGFzIGZyb3plbi4gV2hpbHN0IHNvbWUgdmFsaWRhdGlvbiBpcyBkb25lLCBpdAoraXMgbm90IGZvb2xwcm9vZi4KKzwvcGFyYT4KKzxub3RlPjxwYXJhPgorVGhpcyBjYW4gaGFwcGVuIGFzIGZvbGxvd3M6IFdoZW4gdGhlIHByb2ZpbGVyIGNvdW50CityZWFjaGVzIHplcm8gYW4gTk1JIGhhbmRsZXIgaXMgY2FsbGVkIHdoaWNoIHN0b3JlcyB0aGUgc2FtcGxlIHZhbHVlcyBpbiBhbiBpbnRlcm5hbCBidWZmZXIsIHRoZW4gcmVzZXRzIHRoZSBjb3VudGVyCit0byBpdHMgb3JpZ2luYWwgdmFsdWUuIElmIHRoZSBjb3VudCBpcyB2ZXJ5IGxvdywgYSBwZW5kaW5nIE5NSSBjYW4gYmUgc2VudCBiZWZvcmUgdGhlIE5NSSBoYW5kbGVyIGhhcworY29tcGxldGVkLiBEdWUgdG8gdGhlIHByaW9yaXR5IG9mIHRoZSBOTUksIHRoZSBsb2NhbCBBUElDIGRlbGl2ZXJzIHRoZSBwZW5kaW5nIGludGVycnVwdCBpbW1lZGlhdGVseSBhZnRlcgorY29tcGxldGlvbiBvZiB0aGUgcHJldmlvdXMgaW50ZXJydXB0IGhhbmRsZXIsIGFuZCBjb250cm9sIG5ldmVyIHJldHVybnMgdG8gb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbS4KK0luIHRoaXMgd2F5IHRoZSBzeXN0ZW0gc2VlbXMgdG8gYmUgZnJvemVuLgorPC9wYXJhPjwvbm90ZT4KKzxwYXJhPklmIHRoaXMgaGFwcGVucywgaXQgd2lsbCBiZSBpbXBvc3NpYmxlIHRvIGJyaW5nIHRoZSBzeXN0ZW0gYmFjayB0byBhIHdvcmthYmxlIHN0YXRlLgorVGhlcmUgaXMgbm8gd2F5IHRvIHByb3ZpZGUgcmVhbCBzZWN1cml0eSBhZ2FpbnN0IHRoaXMgaGFwcGVuaW5nLCBvdGhlciB0aGFuIG1ha2luZyBzdXJlIHRvIHVzZSBhIHJlYXNvbmFibGUgdmFsdWUKK2ZvciB0aGUgY291bnRlciByZXNldC4gRm9yIGV4YW1wbGUsIHNldHRpbmcgPGNvbnN0YW50PkNQVV9DTEtfVU5IQUxURUQ8L2NvbnN0YW50PiBldmVudCB0eXBlIHdpdGggYSByaWRpY3Vsb3VzbHkgbG93IHJlc2V0IGNvdW50IChlLmcuIDUwMCkKK2lzIGxpa2VseSB0byBmcmVlemUgdGhlIHN5c3RlbS4KKzwvcGFyYT4KKzxwYXJhPgorSW4gc2hvcnQgOiA8Y29tbWFuZD5Eb24ndCB0cnkgYSBmb29saXNoIHNhbXBsZSBjb3VudCB2YWx1ZTwvY29tbWFuZD4uIFVuZm9ydHVuYXRlbHkgdGhlIGRlZmluaXRpb24gb2YgYSBmb29saXNoIHZhbHVlCitpcyByZWFsbHkgZGVwZW5kZW50IG9uIHRoZSBldmVudCB0eXBlIC0gaWYgZXZlciBpbiBkb3VidCwgZS1tYWlsIDwvcGFyYT4KKzxhZGRyZXNzPjxlbWFpbD5vcHJvZmlsZS1saXN0QGxpc3RzLnNmLm5ldDwvZW1haWw+LjwvYWRkcmVzcz4KKzwvc2VjdDI+CisKKzwvc2VjdDE+CisgCis8L2NoYXB0ZXI+CisKKzxjaGFwdGVyIGlkPSJyZXN1bHRzIj4KKzx0aXRsZT5PYnRhaW5pbmcgcmVzdWx0czwvdGl0bGU+Cis8cGFyYT4KK09LLCBzbyB0aGUgcHJvZmlsZXIgaGFzIGJlZW4gcnVubmluZywgYnV0IGl0J3Mgbm90IG11Y2ggdXNlIHVubGVzcyB3ZSBjYW4gZ2V0IHNvbWUgZGF0YSBvdXQuIEZhaXJseSBvZnRlbiwKK09Qcm9maWxlIGRvZXMgYSBsaXR0bGUgPGVtcGhhc2lzPnRvbzwvZW1waGFzaXM+IGdvb2QgYSBqb2Igb2Yga2VlcGluZyBvdmVyaGVhZCBsb3csIGFuZCBubyBkYXRhIHJlYWNoZXMKK3RoZSBwcm9maWxlci4gVGhpcyBjYW4gaGFwcGVuIG9uIGxpZ2h0bHktbG9hZGVkIG1hY2hpbmVzLiBSZW1lbWJlciB5b3UgY2FuIGZvcmNlIGEgZHVtcCBhdCBhbnkgdGltZSB3aXRoIDoKKzwvcGFyYT4KKzxwYXJhPjxjb21tYW5kPm9wY29udHJvbCAtLWR1bXA8L2NvbW1hbmQ+PC9wYXJhPgorPHBhcmE+UmVtZW1iZXIgdG8gZG8gdGhpcyBiZWZvcmUgY29tcGxhaW5pbmcgdGhlcmUgaXMgbm8gcHJvZmlsaW5nIGRhdGEgIQorTm93IHRoYXQgd2UndmUgZ290IHNvbWUgZGF0YSwgaXQgaGFzIHRvIGJlIHByb2Nlc3NlZC4gVGhhdCdzIHRoZSBqb2Igb2YgPGNvbW1hbmQ+b3ByZXBvcnQ8L2NvbW1hbmQ+LAorPGNvbW1hbmQ+b3Bhbm5vdGF0ZTwvY29tbWFuZD4sIG9yIDxjb21tYW5kPm9wZ3Byb2Y8L2NvbW1hbmQ+LgorPC9wYXJhPgorCis8c2VjdDEgaWQ9InByb2ZpbGUtc3BlYyI+Cis8dGl0bGU+UHJvZmlsZSBzcGVjaWZpY2F0aW9uczwvdGl0bGU+CisKKzxwYXJhPgorQWxsIG9mIHRoZSBhbmFseXNpcyB0b29scyB0YWtlIGEgPGVtcGhhc2lzPnByb2ZpbGUgc3BlY2lmaWNhdGlvbjwvZW1waGFzaXM+LgorVGhpcyBpcyBhIHNldCBvZiBkZWZpbml0aW9ucyB0aGF0IGRlc2NyaWJlIHdoaWNoIGFjdHVhbCBwcm9maWxlcyBzaG91bGQgYmUKK2V4YW1pbmVkLiBUaGUgc2ltcGxlc3QgcHJvZmlsZSBzcGVjaWZpY2F0aW9uIGlzIGVtcHR5OiB0aGlzIHdpbGwgbWF0Y2ggYWxsCit0aGUgYXZhaWxhYmxlIHByb2ZpbGUgZmlsZXMgZm9yIHRoZSBjdXJyZW50IHNlc3Npb24gKHRoaXMgaXMgd2hhdCBoYXBwZW5zCit3aGVuIHlvdSBkbyA8Y29tbWFuZD5vcHJlcG9ydDwvY29tbWFuZD4pLgorPC9wYXJhPgorPHBhcmE+CitTcGVjaWZpY2F0aW9uIHBhcmFtZXRlcnMgYXJlIG9mIHRoZSBmb3JtIDxvcHRpb24+bmFtZTp2YWx1ZVssdmFsdWVdPC9vcHRpb24+LgorRm9yIGV4YW1wbGUsIGlmIEkgd2FudGVkIHRvIGdldCBhIGNvbWJpbmVkIHN5bWJvbCBzdW1tYXJ5IGZvcgorPGZpbGVuYW1lPi9iaW4vbXlwcm9nPC9maWxlbmFtZT4gYW5kIDxmaWxlbmFtZT4vYmluL215cHJvZzI8L2ZpbGVuYW1lPiwKK0kgY291bGQgZG8gPGNvbW1hbmQ+b3ByZXBvcnQgLWwgaW1hZ2U6L2Jpbi9teXByb2csL2Jpbi9teXByb2cyPC9jb21tYW5kPi4KK0FzIGEgc3BlY2lhbCBjYXNlLCB5b3UgZG9uJ3QgYWN0dWFsbHkgbmVlZCB0byBzcGVjaWZ5IHRoZSA8b3B0aW9uPmltYWdlOjwvb3B0aW9uPgorcGFydCBoZXJlOiBhbnl0aGluZyBsZWZ0IG9uIHRoZSBjb21tYW5kIGxpbmUgaXMgYXNzdW1lZCB0byBiZSBhbgorPG9wdGlvbj5pbWFnZTo8L29wdGlvbj4gbmFtZS4gU2ltaWxhcmx5LCBpZiBubyA8b3B0aW9uPnNlc3Npb246PC9vcHRpb24+CitpcyBzcGVjaWZpZWQsIHRoZW4gPG9wdGlvbj5zZXNzaW9uOmN1cnJlbnQ8L29wdGlvbj4gaXMgYXNzdW1lZCAoImN1cnJlbnQiCitpcyBhIHNwZWNpYWwgbmFtZSBvZiB0aGUgY3VycmVudCAvIGxhc3QgcHJvZmlsaW5nIHNlc3Npb24pLgorPC9wYXJhPgorPHBhcmE+CitJbiBhZGRpdGlvbiB0byB0aGUgY29tbWEtc2VwYXJhdGVkIGxpc3Qgc2hvd24gYWJvdmUsIHNvbWUgb2YgdGhlIAorc3BlY2lmaWNhdGlvbiBwYXJhbWV0ZXJzIGNhbiB0YWtlIDxjb21tYW5kPmdsb2I8L2NvbW1hbmQ+LXN0eWxlCit2YWx1ZXMuIEZvciBleGFtcGxlLCBpZiBJIHdhbnQgdG8gc2VlIGltYWdlIHN1bW1hcmllcyBmb3IgYWxsCitiaW5hcmllcyBwcm9maWxlZCBpbiA8ZmlsZW5hbWU+L3Vzci9iaW4vPC9maWxlbmFtZT4sIEkgY291bGQgZG8KKzxjb21tYW5kPm9wcmVwb3J0IGltYWdlOi91c3IvYmluL1wqPC9jb21tYW5kPi4gTm90ZSB0aGUgbmVjZXNzaXR5Cit0byBlc2NhcGUgdGhlIHNwZWNpYWwgY2hhcmFjdGVyIGZyb20gdGhlIHNoZWxsLgorPC9wYXJhPgorPHBhcmE+CitGb3IgPGNvbW1hbmQ+b3ByZXBvcnQ8L2NvbW1hbmQ+LCBwcm9maWxlIHNwZWNpZmljYXRpb25zIGNhbiBiZSB1c2VkIHRvCitkZWZpbmUgdHdvIHByb2ZpbGVzLCBnaXZpbmcgZGlmZmVyZW50aWFsIG91dHB1dC4gVGhpcyBpcyBkb25lIGJ5CitlbmNsb3NpbmcgZWFjaCBvZiB0aGUgdHdvIHNwZWNpZmljYXRpb25zIHdpdGhpbiBjdXJseSBicmFjZXMsIGFzIHNob3duCitpbiB0aGUgZXhhbXBsZXMgYmVsb3cuIEFueSBzcGVjaWZpY2F0aW9ucyBvdXRzaWRlIG9mIGN1cmx5IGJyYWNlcyBhcmUKK3NoYXJlZCBhY3Jvc3MgYm90aC4KKzwvcGFyYT4KKworPHNlY3QyIGlkPSJwcm9maWxlLXNwZWMtZXhhbXBsZXMiPgorPHRpdGxlPkV4YW1wbGVzPC90aXRsZT4KKworPHBhcmE+CitJbWFnZSBzdW1tYXJpZXMgZm9yIGFsbCBwcm9maWxlcyB3aXRoIDxjb25zdGFudD5EQVRBX01FTV9SRUZTPC9jb25zdGFudD4KK3NhbXBsZXMgaW4gdGhlIHNhdmVkIHNlc3Npb24gY2FsbGVkICJzdHJlc3N0ZXN0IiA6Cis8L3BhcmE+Cis8c2NyZWVuPgorIyBvcHJlcG9ydCBzZXNzaW9uOnN0cmVzc3Rlc3QgZXZlbnQ6REFUQV9NRU1fUkVGUworPC9zY3JlZW4+CisKKzxwYXJhPgorU3ltYm9sIHN1bW1hcnkgZm9yIHRoZSBhcHBsaWNhdGlvbiBjYWxsZWQgInRlc3Rfc3ltNTNjOHh4LDl4eCIuIE5vdGUgdGhlCitlc2NhcGluZyBpcyBuZWNlc3NhcnkgYXMgPG9wdGlvbj5pbWFnZTo8L29wdGlvbj4gdGFrZXMgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdC4KKzwvcGFyYT4KKzxzY3JlZW4+CisjIG9wcmVwb3J0IC1sIC4vdGVzdC90ZXN0X3N5bTUzYzh4eFwsOXh4Cis8L3NjcmVlbj4KKworPHBhcmE+CitJbWFnZSBzdW1tYXJpZXMgZm9yIGFsbCBiaW5hcmllcyBpbiB0aGUgPGZpbGVuYW1lPnRlc3Q8L2ZpbGVuYW1lPiBkaXJlY3RvcnksCitleGNlcHRpbmcgPGZpbGVuYW1lPmJvcmluZy10ZXN0PC9maWxlbmFtZT4gOgorPC9wYXJhPgorPHNjcmVlbj4KKyMgb3ByZXBvcnQgaW1hZ2U6Li90ZXN0L1wqIGltYWdlLWV4Y2x1ZGU6Li90ZXN0L2JvcmluZy10ZXN0Cis8L3NjcmVlbj4KKworPHBhcmE+CitEaWZmZXJlbnRpYWwgcHJvZmlsZSBvZiBhIGJpbmFyeSBzdG9yZWQgaW4gdHdvIGFyY2hpdmVzIDoKKzwvcGFyYT4KKzxzY3JlZW4+CisjIG9wcmVwb3J0IC1sIC9iaW4vYmFzaCB7IGFyY2hpdmU6Li9vcmlnIH0geyBhcmNoaXZlOi4vbmV3IH0KKzwvc2NyZWVuPgorCis8cGFyYT4KK0RpZmZlcmVudGlhbCBwcm9maWxlIG9mIGFuIGFyY2hpdmVkIGJpbmFyeSB3aXRoIHRoZSBjdXJyZW50IHNlc3Npb24gOgorPC9wYXJhPgorPHNjcmVlbj4KKyMgb3ByZXBvcnQgLWwgL2Jpbi9iYXNoIHsgYXJjaGl2ZTouL29yaWcgfSB7IH0KKzwvc2NyZWVuPgorCis8L3NlY3QyPiA8IS0tIHByb2ZpbGUgc3BlYyBleGFtcGxlcyAtLT4KKworPHNlY3QyIGlkPSJwcm9maWxlLXNwZWMtZGV0YWlscyI+Cis8dGl0bGU+UHJvZmlsZSBzcGVjaWZpY2F0aW9uIHBhcmFtZXRlcnM8L3RpdGxlPgorCis8dmFyaWFibGVsaXN0PgorCTx2YXJsaXN0ZW50cnk+CisJCTx0ZXJtPjxvcHRpb24+YXJjaGl2ZTo8L29wdGlvbj48ZW1waGFzaXM+YXJjaGl2ZXBhdGg8L2VtcGhhc2lzPjwvdGVybT4KKwkJPGxpc3RpdGVtPjxwYXJhPgorCQlBIHBhdGggdG8gYW4gYXJjaGl2ZSBtYWRlIHdpdGggPGNvbW1hbmQ+b3BhcmNoaXZlPC9jb21tYW5kPi4KKwkJQWJzZW5jZSBvZiB0aGlzIHRhZywgdW5saWtlIG90aGVycywgbWVhbnMgInRoZSBjdXJyZW50IHN5c3RlbSIsCisJCWVxdWl2YWxlbnQgdG8gc3BlY2lmeWluZyAiYXJjaGl2ZToiLgorCQk8L3BhcmE+PC9saXN0aXRlbT4KKwk8L3Zhcmxpc3RlbnRyeT4KKwk8dmFybGlzdGVudHJ5PgorCQk8dGVybT48b3B0aW9uPnNlc3Npb246PC9vcHRpb24+PGVtcGhhc2lzPnNlc3Npb25saXN0PC9lbXBoYXNpcz48L3Rlcm0+CisJCTxsaXN0aXRlbT48cGFyYT4KKwkJQSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBzZXNzaW9uIG5hbWVzIHRvIHJlc29sdmUgaW4uIEFic2VuY2Ugb2YgdGhpcworCQl0YWcsIHVubGlrZSBvdGhlcnMsIG1lYW5zICJ0aGUgY3VycmVudCBzZXNzaW9uIiwgZXF1aXZhbGVudCB0bworCQlzcGVjaWZ5aW5nICJzZXNzaW9uOmN1cnJlbnQiLgorCQk8L3BhcmE+PC9saXN0aXRlbT4KKwk8L3Zhcmxpc3RlbnRyeT4KKwk8dmFybGlzdGVudHJ5PgorCQk8dGVybT48b3B0aW9uPnNlc3Npb24tZXhjbHVkZTo8L29wdGlvbj48ZW1waGFzaXM+c2Vzc2lvbmxpc3Q8L2VtcGhhc2lzPjwvdGVybT4KKwkJPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgIEEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2Ygc2Vzc2lvbnMgdG8gZXhjbHVkZS4KKwkJPC9wYXJhPjwvbGlzdGl0ZW0+CisJPC92YXJsaXN0ZW50cnk+CisJPHZhcmxpc3RlbnRyeT4KKwkJPHRlcm0+PG9wdGlvbj5pbWFnZTo8L29wdGlvbj48ZW1waGFzaXM+aW1hZ2VsaXN0PC9lbXBoYXNpcz48L3Rlcm0+CisJCTxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICBBIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGltYWdlIG5hbWVzIHRvIHJlc29sdmUuIEVhY2ggZW50cnkgbWF5IGJlIHJlbGF0aXZlCisgICAgICAgICAgICAgICAgcGF0aCwgPGNvbW1hbmQ+Z2xvYjwvY29tbWFuZD4tc3R5bGUgbmFtZSwgb3IgZnVsbCBwYXRoLCBlLmcuPC9wYXJhPgorCQk8c2NyZWVuPm9wcmVwb3J0ICdpbWFnZTovdXNyL2Jpbi9vcHJvZmlsZWQsKm9wKiwuL29wcmVwb3J0Jzwvc2NyZWVuPgorCQk8L2xpc3RpdGVtPgorCTwvdmFybGlzdGVudHJ5PgorCisJPHZhcmxpc3RlbnRyeT4KKwkJPHRlcm0+PG9wdGlvbj5pbWFnZS1leGNsdWRlOjwvb3B0aW9uPjxlbXBoYXNpcz5pbWFnZWxpc3Q8L2VtcGhhc2lzPjwvdGVybT4KKwkJPGxpc3RpdGVtPjxwYXJhPgorCQlTYW1lIGFzIDxvcHRpb24+aW1hZ2U6PC9vcHRpb24+LCBidXQgdGhlIG1hdGNoaW5nIGltYWdlcyBhcmUgZXhjbHVkZWQuCisJCTwvcGFyYT48L2xpc3RpdGVtPgorCTwvdmFybGlzdGVudHJ5PgorCisJPHZhcmxpc3RlbnRyeT4KKwkJPHRlcm0+PG9wdGlvbj5saWItaW1hZ2U6PC9vcHRpb24+PGVtcGhhc2lzPmltYWdlbGlzdDwvZW1waGFzaXM+PC90ZXJtPgorCQk8bGlzdGl0ZW0+PHBhcmE+CisJCVNhbWUgYXMgPG9wdGlvbj5pbWFnZTo8L29wdGlvbj4sIGJ1dCBvbmx5IGZvciBpbWFnZXMgdGhhdCBhcmUgZm9yCisJCWEgcGFydGljdWxhciBwcmltYXJ5IGJpbmFyeSBpbWFnZSAobmFtZWx5LCBhbiBhcHBsaWNhdGlvbikuIFRoaXMgb25seQorCQltYWtlcyBzZW5zZSB0byB1c2UgaWYgeW91J3JlIHVzaW5nIDxvcHRpb24+LS1zZXBhcmF0ZTwvb3B0aW9uPi4KKwkJVGhpcyBpbmNsdWRlcyBrZXJuZWwgbW9kdWxlcyBhbmQgdGhlIGtlcm5lbCB3aGVuIHVzaW5nCisJCTxvcHRpb24+LS1zZXBhcmF0ZT1rZXJuZWw8L29wdGlvbj4uCisJCTwvcGFyYT48L2xpc3RpdGVtPgorCTwvdmFybGlzdGVudHJ5PgorCisJPHZhcmxpc3RlbnRyeT4KKwkJPHRlcm0+PG9wdGlvbj5saWItaW1hZ2UtZXhjbHVkZTo8L29wdGlvbj48ZW1waGFzaXM+aW1hZ2VsaXN0PC9lbXBoYXNpcz48L3Rlcm0+CisJCTxsaXN0aXRlbT48cGFyYT4KKwkJU2FtZSBhcyA8b3B0aW9uPmxpYi1pbWFnZTo8L29wdGlvbj4sIGJ1dCB0aGUgbWF0Y2hpbmcgaW1hZ2VzCisJCWFyZSBleGNsdWRlZC4KKwkJPC9wYXJhPjwvbGlzdGl0ZW0+CisJPC92YXJsaXN0ZW50cnk+CisKKwk8dmFybGlzdGVudHJ5PgorCQk8dGVybT48b3B0aW9uPmV2ZW50Ojwvb3B0aW9uPjxlbXBoYXNpcz5ldmVudGxpc3Q8L2VtcGhhc2lzPjwvdGVybT4KKwkJPGxpc3RpdGVtPjxwYXJhPgorCQlUaGUgc3ltYm9saWMgZXZlbnQgbmFtZSB0byBtYXRjaCBvbiwgZS5nLiA8b3B0aW9uPmV2ZW50OkRBVEFfTUVNX1JFRlM8L29wdGlvbj4uCisJCVlvdSBjYW4gcGFzcyBhIGxpc3Qgb2YgZXZlbnRzIGZvciBzaWRlLWJ5LXNpZGUgY29tcGFyaXNvbiB3aXRoIDxjb21tYW5kPm9wcmVwb3J0PC9jb21tYW5kPi4KKwkJV2hlbiB1c2luZyB0aGUgdGltZXIgaW50ZXJydXB0LCB0aGUgZXZlbnQgaXMgYWx3YXlzICJUSU1FUiIuCisJCTwvcGFyYT48L2xpc3RpdGVtPgorCTwvdmFybGlzdGVudHJ5PgorCisJPHZhcmxpc3RlbnRyeT4KKwkJPHRlcm0+PG9wdGlvbj5jb3VudDo8L29wdGlvbj48ZW1waGFzaXM+ZXZlbnRjb3VudGxpc3Q8L2VtcGhhc2lzPjwvdGVybT4KKwkJPGxpc3RpdGVtPjxwYXJhPgorCQlUaGUgZXZlbnQgY291bnQgdG8gbWF0Y2ggb24sIGUuZy4gPG9wdGlvbj5ldmVudDpEQVRBX01FTV9SRUZTIGNvdW50OjMwMDAwPC9vcHRpb24+LgorCQlOb3RlIHRoYXQgdGhpcyB2YWx1ZSByZWZlcnMgdG8gdGhlIHNldHRpbmcgdXNlZCBmb3IgPGNvbW1hbmQ+b3Bjb250cm9sPC9jb21tYW5kPgorCQlvbmx5LCBhbmQgaGFzIG5vdGhpbmcgdG8gZG8gd2l0aCB0aGUgc2FtcGxlIGNvdW50cyBpbiB0aGUgcHJvZmlsZSBkYXRhCisJCWl0c2VsZi4KKwkJWW91IGNhbiBwYXNzIGEgbGlzdCBvZiBldmVudHMgZm9yIHNpZGUtYnktc2lkZSBjb21wYXJpc29uIHdpdGggPGNvbW1hbmQ+b3ByZXBvcnQ8L2NvbW1hbmQ+LgorCQlXaGVuIHVzaW5nIHRoZSB0aW1lciBpbnRlcnJ1cHQsIHRoZSBjb3VudCBpcyBhbHdheXMgMCAoaW5kaWNhdGluZyBpdCBjYW5ub3QgYmUgc2V0KS4KKwkJPC9wYXJhPjwvbGlzdGl0ZW0+CisJPC92YXJsaXN0ZW50cnk+CisKKwk8dmFybGlzdGVudHJ5PgorCQk8dGVybT48b3B0aW9uPnVuaXQtbWFzazo8L29wdGlvbj48ZW1waGFzaXM+bWFza2xpc3Q8L2VtcGhhc2lzPjwvdGVybT4KKwkJPGxpc3RpdGVtPjxwYXJhPgorCQlUaGUgdW5pdCBtYXNrIHZhbHVlIG9mIHRoZSBldmVudCB0byBtYXRjaCBvbiwgZS5nLiA8b3B0aW9uPnVuaXQtbWFzazoxPC9vcHRpb24+LgorCQlZb3UgY2FuIHBhc3MgYSBsaXN0IG9mIGV2ZW50cyBmb3Igc2lkZS1ieS1zaWRlIGNvbXBhcmlzb24gd2l0aCA8Y29tbWFuZD5vcHJlcG9ydDwvY29tbWFuZD4uCisJCTwvcGFyYT48L2xpc3RpdGVtPgorCTwvdmFybGlzdGVudHJ5PgorCisJPHZhcmxpc3RlbnRyeT4KKwkJPHRlcm0+PG9wdGlvbj5jcHU6PC9vcHRpb24+PGVtcGhhc2lzPmNwdWxpc3Q8L2VtcGhhc2lzPjwvdGVybT4KKwkJPGxpc3RpdGVtPjxwYXJhPgorCQlPbmx5IGNvbnNpZGVyIHByb2ZpbGVzIGZvciB0aGUgZ2l2ZW4gbnVtYmVyZWQgQ1BVIChzdGFydGluZyBmcm9tIHplcm8pLgorCQlUaGlzIGlzIG9ubHkgdXNlZnVsIHdoZW4gdXNpbmcgQ1BVIHByb2ZpbGUgc2VwYXJhdGlvbi4KKwkJPC9wYXJhPjwvbGlzdGl0ZW0+CisJPC92YXJsaXN0ZW50cnk+CisKKwk8dmFybGlzdGVudHJ5PgorCQk8dGVybT48b3B0aW9uPnRnaWQ6PC9vcHRpb24+PGVtcGhhc2lzPnBpZGxpc3Q8L2VtcGhhc2lzPjwvdGVybT4KKwkJPGxpc3RpdGVtPjxwYXJhPgorCQlPbmx5IGNvbnNpZGVyIHByb2ZpbGVzIGZvciB0aGUgZ2l2ZW4gdGFzayBncm91cHMuIFVubGVzcyBzb21lIHByb2dyYW0KKwkJaXMgdXNpbmcgdGhyZWFkcywgdGhlIHRhc2sgZ3JvdXAgSUQgb2YgYSBwcm9jZXNzIGlzIHRoZSBzYW1lCisJCWFzIGl0cyBwcm9jZXNzIElELiBUaGlzIG9wdGlvbiBjb3JyZXNwb25kcyB0byB0aGUgUE9TSVgKKwkJbm90aW9uIG9mIGEgdGhyZWFkIGdyb3VwLgorCQlUaGlzIGlzIG9ubHkgdXNlZnVsIHdoZW4gdXNpbmcgcGVyLXByb2Nlc3MgcHJvZmlsZSBzZXBhcmF0aW9uLgorCQk8L3BhcmE+PC9saXN0aXRlbT4KKwk8L3Zhcmxpc3RlbnRyeT4KKworCTx2YXJsaXN0ZW50cnk+CisJCTx0ZXJtPjxvcHRpb24+dGlkOjwvb3B0aW9uPjxlbXBoYXNpcz50aWRsaXN0PC9lbXBoYXNpcz48L3Rlcm0+CisJCTxsaXN0aXRlbT48cGFyYT4KKwkJT25seSBjb25zaWRlciBwcm9maWxlcyBmb3IgdGhlIGdpdmVuIHRocmVhZHMuIFdoZW4gdXNpbmcKKwkJcmVjZW50IHRocmVhZCBsaWJyYXJpZXMsIGFsbCB0aHJlYWRzIGluIGEgcHJvY2VzcyBzaGFyZSB0aGUKKwkJc2FtZSB0YXNrIGdyb3VwIElELCBidXQgaGF2ZSBkaWZmZXJlbnQgdGhyZWFkIElEcy4gWW91IGNhbgorCQl1c2UgdGhpcyBvcHRpb24gaW4gY29tYmluYXRpb24gd2l0aCA8b3B0aW9uPnRnaWQ6PC9vcHRpb24+IHRvCisJCXJlc3RyaWN0IHRoZSByZXN1bHRzIHRvIHBhcnRpY3VsYXIgdGhyZWFkcyB3aXRoaW4gYSBwcm9jZXNzLgorCQlUaGlzIGlzIG9ubHkgdXNlZnVsIHdoZW4gdXNpbmcgcGVyLXByb2Nlc3MgcHJvZmlsZSBzZXBhcmF0aW9uLgorCQk8L3BhcmE+PC9saXN0aXRlbT4KKwk8L3Zhcmxpc3RlbnRyeT4KKzwvdmFyaWFibGVsaXN0PgorCis8L3NlY3QyPgorCis8c2VjdDIgaWQ9ImxvY2F0aW5nLWFuZC1tYW5hZ2luZy1iaW5hcnktaW1hZ2VzIj4KKzx0aXRsZT5Mb2NhdGluZyBhbmQgbWFuYWdpbmcgYmluYXJ5IGltYWdlczwvdGl0bGU+Cis8cGFyYT4KK0VhY2ggc2Vzc2lvbidzIHNhbXBsZSBmaWxlcyBjYW4gYmUgZm91bmQgaW4gdGhlICRTRVNTSU9OX0RJUi9zYW1wbGVzLyBkaXJlY3RvcnkgKGRlZmF1bHQ6IDxmaWxlbmFtZT4vdmFyL2xpYi9vcHJvZmlsZS9zYW1wbGVzLzwvZmlsZW5hbWU+KS4KK1RoZXNlIGFyZSB1c2VkLCBhbG9uZyB3aXRoIHRoZSBiaW5hcnkgaW1hZ2UgZmlsZXMsIHRvIHByb2R1Y2UgaHVtYW4tcmVhZGFibGUgZGF0YS4KK0luIHNvbWUgY2lyY3Vtc3RhbmNlcyAoa2VybmVsIG1vZHVsZXMgaW4gYW4gaW5pdHJkLCBvciBtb2R1bGVzIG9uIDIuNiBrZXJuZWxzKSwgT1Byb2ZpbGUKK3dpbGwgbm90IGJlIGFibGUgdG8gZmluZCB0aGUgYmluYXJ5IGltYWdlcy4gQWxsIHRoZSB0b29scyBoYXZlIGFuIDxvcHRpb24+LS1pbWFnZS1wYXRoPC9vcHRpb24+CitvcHRpb24gdG8gd2hpY2ggeW91IGNhbiBwYXNzIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgYWx0ZXJuYXRlIHBhdGhzIHRvIHNlYXJjaC4gRm9yIGV4YW1wbGUsCitJIGNhbiBsZXQgT1Byb2ZpbGUgZmluZCBteSAyLjYgbW9kdWxlcyBieSB1c2luZyA8Y29tbWFuZD4tLWltYWdlLXBhdGggL2xpYi9tb2R1bGVzLzIuNi4wL2tlcm5lbC88L2NvbW1hbmQ+LgorSXQgaXMgeW91ciByZXNwb25zaWJpbGl0eSB0byBlbnN1cmUgdGhhdCB0aGUgY29ycmVjdCBpbWFnZXMgYXJlIGZvdW5kIHdoZW4gdXNpbmcgdGhpcworb3B0aW9uLgorPC9wYXJhPgorPHBhcmE+CitOb3RlIHRoYXQgaWYgYSBiaW5hcnkgaW1hZ2UgY2hhbmdlcyBhZnRlciB0aGUgc2FtcGxlIGZpbGUgd2FzIGNyZWF0ZWQsIHlvdSB3b24ndCBiZSBhYmxlIHRvIGdldCB1c2VmdWwKK3N5bWJvbC1iYXNlZCBkYXRhIG91dC4gVGhpcyBzaXR1YXRpb24gaXMgZGV0ZWN0ZWQgZm9yIHlvdS4gSWYgeW91IHJlcGxhY2UgYSBiaW5hcnksIHlvdSBzaG91bGQKK21ha2Ugc3VyZSB0byBzYXZlIHRoZSBvbGQgYmluYXJ5IGlmIHlvdSBuZWVkIHRvIGRvIGNvbXBhcmF0aXZlIHByb2ZpbGVzLgorPC9wYXJhPgorCis8L3NlY3QyPgorCis8c2VjdDIgaWQ9Im5vLXJlc3VsdHMiPgorPHRpdGxlPldoYXQgdG8gZG8gd2hlbiB5b3UgZG9uJ3QgZ2V0IGFueSByZXN1bHRzPC90aXRsZT4KKzxwYXJhPgorV2hlbiBhdHRlbXB0aW5nIHRvIGdldCBvdXRwdXQsIHlvdSBtYXkgc2VlIHRoZSBlcnJvciA6Cis8L3BhcmE+Cis8c2NyZWVuPgorZXJyb3I6IG5vIHNhbXBsZSBmaWxlcyBmb3VuZDogcHJvZmlsZSBzcGVjaWZpY2F0aW9uIHRvbyBzdHJpY3QgPworPC9zY3JlZW4+Cis8cGFyYT4KK1doYXQgdGhpcyBpcyBzYXlpbmcgaXMgdGhhdCB0aGUgcHJvZmlsZSBzcGVjaWZpY2F0aW9uIHlvdSBwYXNzZWQgaW4sCit3aGVuIG1hdGNoZWQgYWdhaW5zdCB0aGUgYXZhaWxhYmxlIHNhbXBsZSBmaWxlcywgcmVzdWx0ZWQgaW4gbm8gbWF0Y2hlcy4KK1RoZXJlIGFyZSBhIG51bWJlciBvZiByZWFzb25zIHRoaXMgbWlnaHQgaGFwcGVuOgorPC9wYXJhPgorPHZhcmlhYmxlbGlzdD4KKzx2YXJsaXN0ZW50cnk+PHRlcm0+c3BlbGxpbmc8L3Rlcm0+PGxpc3RpdGVtPjxwYXJhPgorWW91IHNwZWNpZmllZCBhIGJpbmFyeSBuYW1lLCBidXQgc3BlbHQgaXQgd3JvbmdseS4gQ2hlY2sgeW91ciBzcGVsbGluZyAhCis8L3BhcmE+PC9saXN0aXRlbT48L3Zhcmxpc3RlbnRyeT4KKzx2YXJsaXN0ZW50cnk+PHRlcm0+cHJvZmlsZXIgd2Fzbid0IHJ1bm5pbmc8L3Rlcm0+PGxpc3RpdGVtPjxwYXJhPgorTWFrZSB2ZXJ5IHN1cmUgdGhhdCBPUHJvZmlsZSB3YXMgYWN0dWFsbHkgdXAgYW5kIHJ1bm5pbmcgd2hlbiB5b3UgcmFuCit0aGUgYmluYXJ5LgorPC9wYXJhPjwvbGlzdGl0ZW0+PC92YXJsaXN0ZW50cnk+Cis8dmFybGlzdGVudHJ5Pjx0ZXJtPmJpbmFyeSBkaWRuJ3QgcnVuIGxvbmcgZW5vdWdoPC90ZXJtPjxsaXN0aXRlbT48cGFyYT4KK1JlbWVtYmVyIE9Qcm9maWxlIGlzIGEgc3RhdGlzdGljYWwgcHJvZmlsZXIgLSB5b3UncmUgbm90IGd1YXJhbnRlZWQgdG8KK2dldCBzYW1wbGVzIGZvciBzaG9ydC1ydW5uaW5nIHByb2dyYW1zLiBZb3UgY2FuIGhlbHAgdGhpcyBieSB1c2luZyBhCitsb3dlciBjb3VudCBmb3IgdGhlIHBlcmZvcm1hbmNlIGNvdW50ZXIsIHNvIHRoZXJlIGFyZSBhIGxvdCBtb3JlIHNhbXBsZXMKK3Rha2VuIHBlciBzZWNvbmQuCis8L3BhcmE+PC9saXN0aXRlbT48L3Zhcmxpc3RlbnRyeT4KKzx2YXJsaXN0ZW50cnk+PHRlcm0+YmluYXJ5IHNwZW50IG1vc3Qgb2YgaXRzIHRpbWUgaW4gbGlicmFyaWVzPC90ZXJtPjxsaXN0aXRlbT48cGFyYT4KK1NpbWlsYXJseSwgaWYgdGhlIGJpbmFyeSBzcGVuZHMgbGl0dGxlIHRpbWUgaW4gdGhlIG1haW4gYmluYXJ5IGltYWdlCitpdHNlbGYsIHdpdGggbW9zdCBvZiBpdCBzcGVudCBpbiBzaGFyZWQgbGlicmFyaWVzIGl0IHVzZXMsIHlvdSBtaWdodAorbm90IHNlZSBhbnkgc2FtcGxlcyBmb3IgdGhlIGJpbmFyeSBpbWFnZSBpdHNlbGYuIFlvdSBjYW4gY2hlY2sgdGhpcworYnkgdXNpbmcgPGNvbW1hbmQ+b3Bjb250cm9sIC0tc2VwYXJhdGU9bGliPC9jb21tYW5kPiBiZWZvcmUgdGhlCitwcm9maWxpbmcgc2Vzc2lvbiwgc28gPGNvbW1hbmQ+b3ByZXBvcnQ8L2NvbW1hbmQ+IGFuZCBmcmllbmRzIHNob3cKK3RoZSBsaWJyYXJ5IHByb2ZpbGVzIG9uIGEgcGVyLWFwcGxpY2F0aW9uIGJhc2lzLgorPC9wYXJhPjwvbGlzdGl0ZW0+PC92YXJsaXN0ZW50cnk+Cis8dmFybGlzdGVudHJ5Pjx0ZXJtPnNwZWNpZmljYXRpb24gd2FzIHJlYWxseSB0b28gc3RyaWN0PC90ZXJtPjxsaXN0aXRlbT48cGFyYT4KK0ZvciBleGFtcGxlLCB5b3Ugc3BlY2lmaWVkIHNvbWV0aGluZyBsaWtlIDxvcHRpb24+dGdpZDozNDMzPC9vcHRpb24+LAorYnV0IG5vIHRhc2sgd2l0aCB0aGF0IGdyb3VwIElEIGV2ZXIgcmFuIHRoZSBjb2RlLgorPC9wYXJhPjwvbGlzdGl0ZW0+PC92YXJsaXN0ZW50cnk+Cis8dmFybGlzdGVudHJ5Pjx0ZXJtPmJpbmFyeSBkaWRuJ3QgZ2VuZXJhdGUgYW55IGV2ZW50czwvdGVybT48bGlzdGl0ZW0+PHBhcmE+CitJZiB5b3UncmUgdXNpbmcgYSBwYXJ0aWN1bGFyIGV2ZW50IGNvdW50ZXIsIGZvciBleGFtcGxlIGNvdW50aW5nIE1NWAorb3BlcmF0aW9ucywgdGhlIGNvZGUgbWlnaHQgc2ltcGx5IGhhdmUgbm90IGdlbmVyYXRlZCBhbnkgZXZlbnRzIGluIHRoZQorZmlyc3QgcGxhY2UuIFZlcmlmeSB0aGUgY29kZSB5b3UncmUgcHJvZmlsaW5nIGRvZXMgd2hhdCB5b3UgZXhwZWN0IGl0Cit0by4KKzwvcGFyYT48L2xpc3RpdGVtPjwvdmFybGlzdGVudHJ5PgorPHZhcmxpc3RlbnRyeT48dGVybT55b3UgZGlkbid0IHNwZWNpZnkga2VybmVsIG1vZHVsZSBuYW1lIGNvcnJlY3RseTwvdGVybT48bGlzdGl0ZW0+PHBhcmE+CitJZiB5b3UncmUgdXNpbmcgMi42IGtlcm5lbHMsIGFuZCB0cnlpbmcgdG8gZ2V0IHJlcG9ydHMgZm9yIGEga2VybmVsCittb2R1bGUsIG1ha2Ugc3VyZSB0byB1c2UgdGhlIDxvcHRpb24+LXA8L29wdGlvbj4gb3B0aW9uLCBhbmQgc3BlY2lmeSB0aGUKK21vZHVsZSBuYW1lIDxlbXBoYXNpcz53aXRoPC9lbXBoYXNpcz4gdGhlIDxmaWxlbmFtZT4ua288L2ZpbGVuYW1lPgorZXh0ZW5zaW9uLiBDaGVjayBpZiB0aGUgbW9kdWxlIGlzIG9uZSBsb2FkZWQgZnJvbSBpbml0cmQuCis8L3BhcmE+PC9saXN0aXRlbT48L3Zhcmxpc3RlbnRyeT4KKzwvdmFyaWFibGVsaXN0PgorCis8L3NlY3QyPgorCis8L3NlY3QxPiA8IS0tIHByb2ZpbGUtc3BlYyAtLT4KKworPHNlY3QxIGlkPSJvcHJlcG9ydCI+Cis8dGl0bGU+SW1hZ2Ugc3VtbWFyaWVzIGFuZCBzeW1ib2wgc3VtbWFyaWVzICg8Y29tbWFuZD5vcHJlcG9ydDwvY29tbWFuZD4pPC90aXRsZT4KKzxwYXJhPgorVGhlIDxjb21tYW5kPm9wcmVwb3J0PC9jb21tYW5kPiB1dGlsaXR5IGlzIHRoZSBwcmltYXJ5IHV0aWxpdHkgeW91IHdpbGwgdXNlIGZvciAKK2dldHRpbmcgZm9ybWF0dGVkIGRhdGEgb3V0IG9mIE9Qcm9maWxlLiBJdCBwcm9kdWNlcyB0d28gdHlwZXMgb2YgZGF0YTogaW1hZ2Ugc3VtbWFyaWVzCithbmQgc3ltYm9sIHN1bW1hcmllcy4gQW4gaW1hZ2Ugc3VtbWFyeSBsaXN0cyB0aGUgbnVtYmVyIG9mIHNhbXBsZXMgZm9yIGluZGl2aWR1YWwKK2JpbmFyeSBpbWFnZXMgc3VjaCBhcyBsaWJyYXJpZXMgb3IgYXBwbGljYXRpb25zLiBTeW1ib2wgc3VtbWFyaWVzIHByb3ZpZGUgcGVyLXN5bWJvbAorcHJvZmlsZSBkYXRhLiBJbiB0aGUgZm9sbG93aW5nIGV4YW1wbGUsIHdlJ3JlIGdldHRpbmcgYW4gaW1hZ2Ugc3VtbWFyeSBmb3IgdGhlIHdob2xlCitzeXN0ZW06Cis8L3BhcmE+Cis8c2NyZWVuPgorJCBvcHJlcG9ydCAtLWxvbmctZmlsZW5hbWVzCitDUFU6IFBJSUksIHNwZWVkIDg2My4xOTUgTUh6IChlc3RpbWF0ZWQpCitDb3VudGVkIENQVV9DTEtfVU5IQUxURUQgZXZlbnRzIChjbG9ja3MgcHJvY2Vzc29yIGlzIG5vdCBoYWx0ZWQpIHdpdGggYSB1bml0IG1hc2sgb2YgMHgwMCAoTm8gdW5pdCBtYXNrKSBjb3VudCAyMzE1MAorICAgOTA1ODk4IDU5Ljc0MTUgL3Vzci9saWIvZ2NjLWxpYi9pMzg2LXJlZGhhdC1saW51eC8zLjIvY2MxcGx1cworICAgMjE0MzIwIDE0LjEzMzggL2Jvb3QvMi42LjAvdm1saW51eAorICAgMTAzNDUwICA2LjgyMjIgL2xpYi9pNjg2L2xpYmMtMi4zLjIuc28KKyAgICA2MDE2MCAgMy45Njc0IC91c3IvbG9jYWwvYmluL21hZHBsYXkKKyAgICAzMTc2OSAgMi4wOTUxIC91c3IvbG9jYWwvb3Byb2ZpbGUtcHAvYmluL29wcm9maWxlZAorICAgIDI2NTUwICAxLjc1MDkgL3Vzci9saWIvbGliYXJ0c2Zsb3cuc28uMS4wLjAKKyAgICAyMzkwNiAgMS41NzY1IC91c3IvYmluL2FzCisgICAgMTg3NzAgIDEuMjM3OCAvb3Byb2ZpbGUKKyAgICAxNTUyOCAgMS4wMjQwIC91c3IvbGliL3F0LTMuMC41L2xpYi9saWJxdC1tdC5zby4zLjAuNQorICAgIDExOTc5ICAwLjc5MDAgL3Vzci9YMTFSNi9iaW4vWEZyZWU4NgorICAgIDExMzI4ICAwLjc0NzEgL2Jpbi9iYXNoCisgICAgLi4uCis8L3NjcmVlbj4KKzxwYXJhPgorSWYgd2UgaGFkIHNwZWNpZmllZCA8b3B0aW9uPi0tc3ltYm9sczwvb3B0aW9uPiBpbiB0aGUgcHJldmlvdXMgY29tbWFuZCwgd2Ugd291bGQgaGF2ZQorZ290dGVuIGEgc3ltYm9sIHN1bW1hcnkgb2YgYWxsIHRoZSBpbWFnZXMgYWNyb3NzIHRoZSBlbnRpcmUgc3lzdGVtLiBXZSBjYW4gcmVzdHJpY3QgdGhpcyB0byBvbmx5CitwYXJ0IG9mIHRoZSBzeXN0ZW0gcHJvZmlsZTsgZm9yIGV4YW1wbGUsCitiZWxvdyBpcyBhIHN5bWJvbCBzdW1tYXJ5IG9mIHRoZSBPUHJvZmlsZSBkYWVtb24uIE5vdGUgdGhhdCBhcyB3ZSB1c2VkCis8Y29tbWFuZD5vcGNvbnRyb2wgLS1zZXBhcmF0ZT1rZXJuZWw8L2NvbW1hbmQ+LCBzeW1ib2xzIGZyb20gaW1hZ2VzIHRoYXQgPGNvbW1hbmQ+b3Byb2ZpbGVkPC9jb21tYW5kPgoraGFzIHVzZWQgYXJlIGFsc28gc2hvd24uCis8L3BhcmE+Cis8c2NyZWVuPgorJCBvcHJlcG9ydCAtbCBgd2hpY2ggb3Byb2ZpbGVkYCAyPi9kZXYvbnVsbCB8IG1vcmUKK0NQVTogUElJSSwgc3BlZWQgODYzLjE5NSBNSHogKGVzdGltYXRlZCkKK0NvdW50ZWQgQ1BVX0NMS19VTkhBTFRFRCBldmVudHMgKGNsb2NrcyBwcm9jZXNzb3IgaXMgbm90IGhhbHRlZCkgd2l0aCBhIHVuaXQgbWFzayBvZiAweDAwIChObyB1bml0IG1hc2spIGNvdW50IDIzMTUwCit2bWEgICAgICBzYW1wbGVzICAlICAgICAgICAgICBpbWFnZSBuYW1lICAgICAgICAgICAgICAgc3ltYm9sIG5hbWUKKzA4MDRiZTEwIDE0OTcxICAgIDI4LjE5OTMgICAgIG9wcm9maWxlZCAgICAgICAgICAgICAgICBvZGJfaW5zZXJ0CiswODA0YWZkYyA3MTQ0ICAgICAxMy40NTY0ICAgICBvcHJvZmlsZWQgICAgICAgICAgICAgICAgcG9wX2J1ZmZlcl92YWx1ZQorYzAxZGFlYTAgNjExMyAgICAgMTEuNTE0NCAgICAgdm1saW51eCAgICAgICAgICAgICAgICAgIF9fY29weV90b191c2VyX2xsCiswODA0YjA2MCAyODE2ICAgICAgNS4zMDQyICAgICBvcHJvZmlsZWQgICAgICAgICAgICAgICAgb3BkX3B1dF9zYW1wbGUKKzA4MDRiNGEwIDIxNDcgICAgICA0LjA0NDEgICAgIG9wcm9maWxlZCAgICAgICAgICAgICAgICBvcGRfcHJvY2Vzc19zYW1wbGVzCiswODA0YWNmNCAxODU1ICAgICAgMy40OTQxICAgICBvcHJvZmlsZWQgICAgICAgICAgICAgICAgb3BkX3B1dF9pbWFnZV9zYW1wbGUKKzA4MDRhZDg0IDE3NjYgICAgICAzLjMyNjQgICAgIG9wcm9maWxlZCAgICAgICAgICAgICAgICBvcGRfZmluZF9pbWFnZQorMDgwNGE1ZWMgMTA4NCAgICAgIDIuMDQxOCAgICAgb3Byb2ZpbGVkICAgICAgICAgICAgICAgIG9wZF9maW5kX21vZHVsZQorMDgwNGJhNWMgNzQxICAgICAgIDEuMzk1NyAgICAgb3Byb2ZpbGVkICAgICAgICAgICAgICAgIG9kYl9oYXNoX2FkZF9ub2RlCisuLi4KKzwvc2NyZWVuPgorCis8cGFyYT4KK1RoZXNlIGFyZSB0aGUgdHdvIGJhc2ljIHdheXMgeW91IGFyZSBtb3N0IGxpa2VseSB0byB1c2UgcmVndWxhcmx5LCBidXQgPGNvbW1hbmQ+b3ByZXBvcnQ8L2NvbW1hbmQ+CitjYW4gZG8gYSBsb3QgbW9yZSB0aGFuIHRoYXQsIGFzIGRlc2NyaWJlZCBiZWxvdy4KKzwvcGFyYT4KKworPHNlY3QyIGlkPSJvcHJlcG9ydC1tZXJnaW5nIj4KKzx0aXRsZT5NZXJnaW5nIHNlcGFyYXRlIHByb2ZpbGVzPC90aXRsZT4KKworSWYgeW91IGhhdmUgdXNlZCBvbmUgb2YgdGhlIDxvcHRpb24+LS1zZXBhcmF0ZT08L29wdGlvbj4gb3B0aW9ucword2hpbHN0IHByb2ZpbGluZywgdGhlcmUgY2FuIGJlIHNldmVyYWwgc2VwYXJhdGUgcHJvZmlsZXMgZm9yCithIHNpbmdsZSBiaW5hcnkgaW1hZ2Ugd2l0aGluIGEgc2Vzc2lvbi4gTm9ybWFsbHkgdGhlIG91dHB1dAord2lsbCBrZWVwIHRoZXNlIGltYWdlcyBzZXBhcmF0ZWQgKHNvLCBmb3IgZXhhbXBsZSwgdGhlIGltYWdlIHN1bW1hcnkKK291dHB1dCBzaG93cyBsaWJyYXJ5IGltYWdlIHN1bW1hcmllcyBvbiBhIHBlci1hcHBsaWNhdGlvbiBiYXNpcywKK3doZW4gdXNpbmcgPG9wdGlvbj4tLXNlcGFyYXRlPWxpYjwvb3B0aW9uPikuCitTb21ldGltZXMgaXQgY2FuIGJlIHVzZWZ1bCB0byBtZXJnZSB0aGVzZSByZXN1bHRzIGJhY2sgdG9nZXRoZXIKK2JlZm9yZSBnZXR0aW5nIHJlc3VsdHMuIFRoZSA8b3B0aW9uPi0tbWVyZ2U8L29wdGlvbj4gb3B0aW9uIGFsbG93cworeW91IHRvIGRvIHRoYXQuCis8L3NlY3QyPgorCis8c2VjdDIgaWQ9Im9wcmVwb3J0LWNvbXBhcmlzb24iPgorPHRpdGxlPlNpZGUtYnktc2lkZSBtdWx0aXBsZSByZXN1bHRzPC90aXRsZT4KK0lmIHlvdSBoYXZlIHVzZWQgbXVsdGlwbGUgZXZlbnRzIHdoZW4gcHJvZmlsaW5nLCBieSBkZWZhdWx0IHlvdSBnZXQKK3NpZGUtYnktc2lkZSByZXN1bHRzIG9mIGVhY2ggZXZlbnQncyBzYW1wbGUgdmFsdWVzIGZyb20gPGNvbW1hbmQ+b3ByZXBvcnQ8L2NvbW1hbmQ+LgorWW91IGNhbiByZXN0cmljdCB3aGljaCBldmVudHMgdG8gbGlzdCBieSBhcHByb3ByaWF0ZSB1c2Ugb2YgdGhlCis8b3B0aW9uPmV2ZW50Ojwvb3B0aW9uPiBwcm9maWxlIHNwZWNpZmljYXRpb25zLCBldGMuCis8L3NlY3QyPgorCis8c2VjdDIgaWQ9Im9wcmVwb3J0LWNhbGxncmFwaCI+Cis8dGl0bGU+Q2FsbGdyYXBoIG91dHB1dDwvdGl0bGU+Cis8cGFyYT4KK1RoaXMgc2VjdGlvbiBwcm92aWRlcyBkZXRhaWxzIG9uIGhvdyB0byB1c2UgdGhlIE9Qcm9maWxlIGNhbGxncmFwaCBmZWF0dXJlLgorPC9wYXJhPgorPHNlY3QzIGlkPSJvcC1jZzEiPgorPHRpdGxlPkNhbGxncmFwaCBkZXRhaWxzPC90aXRsZT4KKzxwYXJhPgorV2hlbiB1c2luZyB0aGUgPG9wdGlvbj5vcGNvbnRyb2wgLS1jYWxsZ3JhcGg8L29wdGlvbj4gb3B0aW9uLCB5b3UgY2FuIHNlZSB3aGF0CitmdW5jdGlvbnMgYXJlIGNhbGxpbmcgb3RoZXIgZnVuY3Rpb25zIGluIHRoZSBvdXRwdXQuIENvbnNpZGVyIHRoZQorZm9sbG93aW5nIHByb2dyYW06Cis8L3BhcmE+Cis8c2NyZWVuPgorI2luY2x1ZGUgJmx0O3N0cmluZy5oJmd0OworI2luY2x1ZGUgJmx0O3N0ZGxpYi5oJmd0OworI2luY2x1ZGUgJmx0O3N0ZGlvLmgmZ3Q7CisKKyNkZWZpbmUgU0laRSA1MDAwMDAKKworc3RhdGljIGludCBjb21wYXJlKGNvbnN0IHZvaWQgKnMxLCBjb25zdCB2b2lkICpzMikKK3sKKyAgICAgICAgcmV0dXJuIHN0cmNtcChzMSwgczIpOworfQorCitzdGF0aWMgdm9pZCByZXBlYXQodm9pZCkKK3sKKyAgICAgICAgaW50IGk7CisgICAgICAgIGNoYXIgKnN0cmluZ3NbU0laRV07CisgICAgICAgIGNoYXIgc3RyW10gPSAiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiOworCisgICAgICAgIGZvciAoaSA9IDA7IGkgJmx0OyBTSVpFOyArK2kpIHsKKyAgICAgICAgICAgICAgICBzdHJpbmdzW2ldID0gc3RyZHVwKHN0cik7CisgICAgICAgICAgICAgICAgc3RyZnJ5KHN0cmluZ3NbaV0pOworICAgICAgICB9CisKKyAgICAgICAgcXNvcnQoc3RyaW5ncywgU0laRSwgc2l6ZW9mKGNoYXIgKiksIGNvbXBhcmUpOworfQorCitpbnQgbWFpbigpCit7CisgICAgICAgIHdoaWxlICgxKQorICAgICAgICAgICAgICAgIHJlcGVhdCgpOworfQorPC9zY3JlZW4+Cis8cGFyYT4KK1doZW4gcnVubmluZyB3aXRoIHRoZSBjYWxsLWdyYXBoIG9wdGlvbiwgT1Byb2ZpbGUgd2lsbAorcmVjb3JkIHRoZSBmdW5jdGlvbiBzdGFjayBldmVyeSB0aW1lIGl0IHRha2VzIGEgc2FtcGxlLgorPGNvbW1hbmQ+b3ByZXBvcnQgLS1jYWxsZ3JhcGg8L2NvbW1hbmQ+IG91dHB1dHMgYW4gZW50cnkgZm9yIGVhY2gKK2Z1bmN0aW9uLCB3aGVyZSBlYWNoIGVudHJ5IGxvb2tzIHNpbWlsYXIgdG86Cis8L3BhcmE+Cis8c2NyZWVuPgorc2FtcGxlcyAgJSAgICAgICAgaW1hZ2UgbmFtZSAgICAgICAgICAgICAgIHN5bWJvbCBuYW1lCisgIDE5NyAgICAgICAwLjE1NDggIGNnICAgICAgICAgICAgICAgICAgICAgICBtYWluCisgIDEyNzAzNiAgIDk5Ljg0NTIgIGNnICAgICAgICAgICAgICAgICAgICAgICByZXBlYXQKKzg0NTkwICAgIDQyLjUwODQgIGxpYmMtMi4zLjIuc28gICAgICAgICAgICBzdHJmcnkKKyAgODQ1OTAgICAgNjYuNDgzOCAgbGliYy0yLjMuMi5zbyAgICAgICAgICAgIHN0cmZyeSBbc2VsZl0KKyAgMzkxNjkgICAgMzAuNzg1MCAgbGliYy0yLjMuMi5zbyAgICAgICAgICAgIHJhbmRvbV9yCisgIDM0NzUgICAgICAyLjczMTIgIGxpYmMtMi4zLjIuc28gICAgICAgICAgICBfX2k2ODYuZ2V0X3BjX3RodW5rLmJ4CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis8L3NjcmVlbj4KKzxwYXJhPgorSGVyZSB0aGUgbm9uLWluZGVudGVkIGxpbmUgaXMgdGhlIGZ1bmN0aW9uIHdlJ3JlIGZvY3Vzc2luZyB1cG9uCisoPGZ1bmN0aW9uPnN0cmZyeSgpPC9mdW5jdGlvbj4pLiBUaGlzCitsaW5lIGlzIHRoZSBzYW1lIGFzIHlvdSdkIGdldCBmcm9tIGEgbm9ybWFsIDxjb21tYW5kPm9wcmVwb3J0PC9jb21tYW5kPgorb3V0cHV0LgorPC9wYXJhPgorPHBhcmE+CitBYm92ZSB0aGUgbm9uLWluZGVudGVkIGxpbmUgd2UgZmluZCB0aGUgZnVuY3Rpb25zIHRoYXQgY2FsbGVkIHRoaXMKK2Z1bmN0aW9uIChmb3IgZXhhbXBsZSwgPGZ1bmN0aW9uPnJlcGVhdCgpPC9mdW5jdGlvbj4gY2FsbHMKKzxmdW5jdGlvbj5zdHJmcnkoKTwvZnVuY3Rpb24+KS4gVGhlIHNhbXBsZXMgYW5kIHBlcmNlbnRhZ2UgdmFsdWVzIGhlcmUKK3JlZmVyIHRvIHRoZSBudW1iZXIgb2YgdGltZXMgd2UgdG9vayBhIHNhbXBsZSB3aGVyZSB0aGlzIGNhbGwgd2FzIGZvdW5kCitpbiB0aGUgc3RhY2s7IHRoZSBwZXJjZW50YWdlIGlzIHJlbGF0aXZlIHRvIGFsbCBvdGhlciBjYWxsZXJzIG9mIHRoZQorZnVuY3Rpb24gd2UncmUgZm9jdXNzaW5nIG9uLiBOb3RlIHRoYXQgdGhlc2UgdmFsdWVzIGFyZQorPGVtcGhhc2lzPm5vdDwvZW1waGFzaXM+IGNhbGwgY291bnRzOyB0aGV5IG9ubHkgcmVmbGVjdCB0aGUgY2FsbCBzdGFjaworZXZlcnkgdGltZSBhIHNhbXBsZSBpcyB0YWtlbjsgdGhhdCBpcywgaWYgYSBjYWxsIGlzIGZvdW5kIGluIHRoZSBzdGFjaworYXQgdGhlIHRpbWUgb2YgYSBzYW1wbGUsIGl0IGlzIHJlY29yZGVkIGluIHRoaXMgY291bnQuCis8L3BhcmE+Cis8cGFyYT4KK0JlbG93IHRoZSBsaW5lIGFyZSBmdW5jdGlvbnMgdGhhdCBhcmUgY2FsbGVkIGJ5Cis8ZnVuY3Rpb24+c3RyZnJ5KCk8L2Z1bmN0aW9uPiAoY2FsbGVkIDxlbXBoYXNpcz5jYWxsZWVzPC9lbXBoYXNpcz4pLgorSXQncyBjbGVhciBoZXJlIHRoYXQgPGZ1bmN0aW9uPnN0cmZyeSgpPC9mdW5jdGlvbj4gY2FsbHMKKzxmdW5jdGlvbj5yYW5kb21fcigpPC9mdW5jdGlvbj4uIFdlIGFsc28gc2VlIGEgc3BlY2lhbCBlbnRyeSB3aXRoIGEKKyJbc2VsZl0iIG1hcmtlci4gVGhpcyByZWNvcmRzIHRoZSBub3JtYWwgc2FtcGxlcyBmb3IgdGhlIGZ1bmN0aW9uLCBidXQKK3RoZSBwZXJjZW50YWdlIGJlY29tZXMgcmVsYXRpdmUgdG8gYWxsIGNhbGxlZXMuIFRoaXMgYWxsb3dzIHlvdSB0bworY29tcGFyZSB0aW1lIHNwZW50IGluIHRoZSBmdW5jdGlvbiBpdHNlbGYgY29tcGFyZWQgdG8gZnVuY3Rpb25zIGl0CitjYWxscy4gTm90ZSB0aGF0IGlmIGEgZnVuY3Rpb24gY2FsbHMgaXRzZWxmLCB0aGVuIGl0IHdpbGwgYXBwZWFyIGluIHRoZQorbGlzdCBvZiBjYWxsZWVzIG9mIGl0c2VsZiwgYnV0IHdpdGhvdXQgdGhlICJbc2VsZl0iIG1hcmtlcjsgc28gcmVjdXJzaXZlCitjYWxscyBhcmUgc3RpbGwgY2xlYXJseSBzZXBhcmFibGUuCis8L3BhcmE+Cis8cGFyYT4KK1lvdSBtYXkgaGF2ZSBub3RpY2VkIHRoYXQgdGhlIG91dHB1dCBsaXN0cyA8ZnVuY3Rpb24+bWFpbigpPC9mdW5jdGlvbj4KK2FzIGNhbGxpbmcgPGZ1bmN0aW9uPnN0cmZyeSgpPC9mdW5jdGlvbj4sIGJ1dCBpdCdzIGNsZWFyIGZyb20gdGhlIHNvdXJjZQordGhhdCB0aGlzIGRvZXNuJ3QgYWN0dWFsbHkgaGFwcGVuLiBTZWUgPHhyZWYKK2xpbmtlbmQ9ImludGVycHJldGluZy1jYWxsZ3JhcGgiIC8+IGZvciBhbiBleHBsYW5hdGlvbi4KKzwvcGFyYT4KKzwvc2VjdDM+Cis8c2VjdDMgaWQ9ImNnLXdpdGgtaml0c3VwcG9ydCI+Cis8dGl0bGU+Q2FsbGdyYXBoIGFuZCBKSVQgc3VwcG9ydDwvdGl0bGU+Cis8cGFyYT4KK0NhbGxncmFwaCBvdXRwdXQgd2hlcmUgYW5vbnltb3VzbHkgbWFwcGVkIGNvZGUgaXMgaW4gdGhlIGNhbGxzdGFjayBjYW4gc29tZXRpbWVzIGJlIG1pc2xlYWRpbmcuCitGb3IgYWxsIHN1Y2ggY29kZSwgdGhlIHNhbXBsZXMgZm9yIHRoZSBhbm9ueW1vdXNseSBtYXBwZWQgY29kZSBhcmUgc3RvcmVkIGluIGEgc2FtcGxlcyBzdWJkaXJlY3RvcnkKK25hbWVkIDxmaWxlbmFtZT57YW5vbjphbm9ufS8mbHQ7dGdpZCZndDsuJmx0O2JlZ2luX2FkZHImZ3Q7LiZsdDtlbmRfYWRkciZndDs8L2ZpbGVuYW1lPi4KK0FzIHN0YXRlZCBlYXJsaWVyLCBpZiB0aGlzIGFub255bW91c2x5IG1hcHBlZCBjb2RlIGlzIEpJVGVkIGNvZGUgZnJvbSBhIHN1cHBvcnRlZCBWTSBsaWtlIEphdmEsCitPUHJvZmlsZSBjcmVhdGVzIGFuIEVMRiBmaWxlIHRvIHByb3ZpZGUgYSAoc29tZXdoYXQpIHBlcm1hbmVudCBiYWNraW5nIGZpbGUgZm9yIHRoZSBjb2RlLgorSG93ZXZlciwgd2hlbiB2aWV3aW5nIGNhbGxncmFwaCBvdXRwdXQsIGFueSBhbm9ueW1vdXNseSBtYXBwZWQgY29kZSBpbiB0aGUgY2FsbHN0YWNrCit3aWxsIGJlIGF0dHJpYnV0ZWQgdG8gPGZpbGVuYW1lPmFub24gKCZsdDt0Z2lkJmd0OzogcmFuZ2U6Jmx0O2JlZ2luX2FkZHImZ3Q7LSZsdDtlbmRfYWRkciZndDs8L2ZpbGVuYW1lPiwKK2V2ZW4gaWYgYSA8ZmlsZW5hbWU+LmpvPC9maWxlbmFtZT4gRUxGIGZpbGUgaGFkIGJlZW4gY3JlYXRlZCBmb3IgaXQuICBTZWUgdGhlIGV4YW1wbGUgYmVsb3cuCis8L3BhcmE+Cis8c2NyZWVuPgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAxICAgICAgICAgMi4yNzI3ICBsaWJqOXV0ZTIzLnNvICAgICAgICAgICAgamF2YS5iaW4gICAgICAgICAgICAgICAgIHRyYWNlVgorICAyICAgICAgICAgNC41NDU1ICBsaWJqOXV0ZTIzLnNvICAgICAgICAgICAgamF2YS5iaW4gICAgICAgICAgICAgICAgIHV0c1RyYWNlVgorICA0ICAgICAgICAgOS4wOTA5ICBsaWJqOXRyYzIzLnNvICAgICAgICAgICAgamF2YS5iaW4gICAgICAgICAgICAgICAgIGZpbGxJblVUSW50ZXJmYWNlcworICAzNyAgICAgICA4NC4wOTA5ICBsaWJqOXRyYzIzLnNvICAgICAgICAgICAgamF2YS5iaW4gICAgICAgICAgICAgICAgIHR3R2V0U2VxdWVuY2VDb3VudGVyCis4ICAgICAgICAgMC4wMTU0ICBsaWJqOXBydDIzLnNvICAgICAgICAgICAgamF2YS5iaW4gICAgICAgICAgICAgICAgIGo5dGltZV9oaXJlc19jbG9jaworICAyNyAgICAgICA2MS4zNjM2ICBhbm9uICh0Z2lkOjEwMDE0IHJhbmdlOjB4MTAwMDAwLTB4MTAzMDAwKSBqYXZhLmJpbiAgICAgICAgICAgICAgICAgKG5vIHN5bWJvbHMpCisgIDkgICAgICAgIDIwLjQ1NDUgIGxpYmMtMi40LnNvICAgICAgICAgICAgICBqYXZhLmJpbiAgICAgICAgICAgICAgICAgZ2V0dGltZW9mZGF5CisgIDggICAgICAgIDE4LjE4MTggIGxpYmo5cHJ0MjMuc28gICAgICAgICAgICBqYXZhLmJpbiAgICAgICAgICAgICAgICAgajl0aW1lX2hpcmVzX2Nsb2NrIFtzZWxmXQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorPC9zY3JlZW4+Cis8cGFyYT4KK1RoZSBvdXRwdXQgc2hvd3MgdGhhdCAiYW5vbiAodGdpZDoxMDAxNCByYW5nZToweDEwMDAwMC0weDEwMzAwMCkiIHdhcyBhIGNhbGxlZSBvZgorPGNvZGU+ajl0aW1lX2hpcmVzX2Nsb2NrPC9jb2RlPiwgZXZlbiB0aG91Z2ggdGhlIEVMRiBmaWxlIDxmaWxlbmFtZT4xMDAxNC5qbzwvZmlsZW5hbWU+IHdhcworY3JlYXRlZCBmb3IgdGhpcyBwcm9maWxlIHJ1bi4gIFVuZm9ydHVuYXRlbHksIHRoZXJlIGlzIGN1cnJlbnRseSBubyB3YXkgdG8gY29ycmVsYXRlCit0aGF0IGFub255bW91cyBjYWxsZ3JhcGggZW50cnkgd2l0aCBpdHMgY29ycmVzcG9uZGluZyA8ZmlsZW5hbWU+LmpvPC9maWxlbmFtZT4gZmlsZS4KKzwvcGFyYT4KKzwvc2VjdDM+CisKKworPC9zZWN0Mj4gPCEtLSBvcHJlcG9ydC1jYWxsZ3JhcGggLS0+CisKKzxzZWN0MiBpZD0ib3ByZXBvcnQtZGlmZiI+Cis8dGl0bGU+RGlmZmVyZW50aWFsIHByb2ZpbGVzIHdpdGggPGNvbW1hbmQ+b3ByZXBvcnQ8L2NvbW1hbmQ+PC90aXRsZT4KKworPHBhcmE+CitPZnRlbiwgd2UnZCBsaWtlIHRvIGJlIGFibGUgdG8gY29tcGFyZSB0d28gcHJvZmlsZXMuIEZvciBleGFtcGxlLCB3aGVuCithbmFseXNpbmcgdGhlIHBlcmZvcm1hbmNlIG9mIGFuIGFwcGxpY2F0aW9uLCB3ZSdkIGxpa2UgdG8gbWFrZSBjb2RlCitjaGFuZ2VzIGFuZCBleGFtaW5lIHRoZSBlZmZlY3Qgb2YgdGhlIGNoYW5nZS4gVGhpcyBpcyBzdXBwb3J0ZWQgaW4KKzxjb21tYW5kPm9wcmVwb3J0PC9jb21tYW5kPiBieSBnaXZpbmcgYSBwcm9maWxlIHNwZWNpZmljYXRpb24gdGhhdAoraWRlbnRpZmllcyB0d28gZGlmZmVyZW50IHByb2ZpbGVzLiBUaGUgZ2VuZXJhbCBmb3JtIGlzIG9mOgorPC9wYXJhPgorPHNjcmVlbj4KKyQgb3ByZXBvcnQgJmx0O3NoYXJlZC1zcGVjJmd0OyB7ICZsdDtmaXJzdC1wcm9maWxlJmd0OyB9IHsgJmx0O3NlY29uZC1wcm9maWxlJmd0OyB9Cis8L3NjcmVlbj4KKzxub3RlPjxwYXJhPgorV2UgbG9zdCBvdXIgRHJhZ29uIGJvb2sgZG93biB0aGUgYmFjayBvZiB0aGUgc29mYSwgc28geW91IGhhdmUgdG8gYmUKK2NhcmVmdWwgdG8gaGF2ZSBzcGFjZXMgYXJvdW5kIHRob3NlIGJyYWNlcywgb3IgdGhpbmdzIHdpbGwgZ2V0Citob3BlbGVzc2x5IGNvbmZ1c2VkLiBXZSBjYW4gb25seSBhcG9sb2dpc2UuCis8L3BhcmE+PC9ub3RlPgorPHBhcmE+CitGb3IgZWFjaCBvZiB0aGUgcHJvZmlsZXMsIHRoZSBzaGFyZWQgc2VjdGlvbiBpcyBwcmVmaXhlZCwgYW5kIHRoZW4gdGhlCitzcGVjaWZpY2F0aW9uIGlzIGFuYWx5c2VkLiBUaGUgdXN1YWwgcGFyYW1ldGVycyB3b3JrIGJvdGggd2l0aGluIHRoZQorc2hhcmVkIHNlY3Rpb24sIGFuZCBpbiB0aGUgc3ViLXNwZWNpZmljYXRpb24gd2l0aGluIHRoZSBjdXJseSBicmFjZXMuCis8L3BhcmE+Cis8cGFyYT4KK0EgdHlwaWNhbCB3YXkgdG8gdXNlIHRoaXMgZmVhdHVyZSBpcyB3aXRoIGFyY2hpdmVzIGNyZWF0ZWQgd2l0aAorPGNvbW1hbmQ+b3BhcmNoaXZlPC9jb21tYW5kPi4gTGV0J3MgbG9vayBhdCBhbiBleGFtcGxlOgorPC9wYXJhPgorPHNjcmVlbj4KKyQgLi9hCiskIG9wYXJjaGl2ZSAtbyBvcmlnIC4vYQorJCBvcGNvbnRyb2wgLS1yZXNldAorICAjIGVkaXQgYW5kIHJlY29tcGlsZSBhCiskIC4vYQorICAjIG5vdyBjb21wYXJlIHRoZSBjdXJyZW50IHByb2ZpbGUgb2YgYSB3aXRoIHRoZSBhcmNoaXZlZCBwcm9maWxlCiskIG9wcmVwb3J0IC14bCAuL2EgeyBhcmNoaXZlOi4vb3JpZyB9IHsgfQorQ1BVOiBQSUlJLCBzcGVlZCA4NjMuMjMzIE1IeiAoZXN0aW1hdGVkKQorQ291bnRlZCBDUFVfQ0xLX1VOSEFMVEVEIGV2ZW50cyAoY2xvY2tzIHByb2Nlc3NvciBpcyBub3QgaGFsdGVkKSB3aXRoIGEKK3VuaXQgbWFzayBvZiAweDAwIChObyB1bml0IG1hc2spIGNvdW50IDEwMDAwMAorc2FtcGxlcyAgJSAgICAgICAgZGlmZiAlICAgIHN5bWJvbCBuYW1lCis5MjQzNSAgICA0OC41MzY2ICArMC40OTk5ICAgYQorNTQyMjYgICAgLS0tICAgICAgLS0tICAgICAgIGMKKzQ5MjIyICAgIDI1Ljg0NTkgICsrKyAgICAgICBkCis0ODc4NyAgICAyNS42MTc1ICAtMi4yZS0wMSAgYgorPC9zY3JlZW4+Cis8cGFyYT4KK05vdGUgdGhhdCB3ZSBzcGVjaWZpZWQgYW4gZW1wdHkgc2Vjb25kIHByb2ZpbGUgaW4gdGhlIGN1cmx5IGJyYWNlcywgYXMKK3dlIHdhbnRlZCB0byB1c2UgdGhlIGN1cnJlbnQgc2Vzc2lvbjsgYWx0ZXJuYXRpdmVseSwgd2UgY291bGQKK2hhdmUgc3BlY2lmaWVkIGFub3RoZXIgYXJjaGl2ZSwgb3IgYSB0Z2lkIGV0Yy4gV2Ugc3BlY2lmaWVkIHRoZSBiaW5hcnkKKzxjb21tYW5kPmE8L2NvbW1hbmQ+IGluIHRoZSBzaGFyZWQgc2VjdGlvbiwgc28gd2UgbWF0Y2hlZCB0aGF0IGluIGJvdGgKK3RoZSBwcm9maWxlcyB3ZSdyZSBkaWZmaW5nLgorPC9wYXJhPgorPHBhcmE+CitBcyBpbiB0aGUgbm9ybWFsIG91dHB1dCwgdGhlIHJlc3VsdHMgYXJlIHNvcnRlZCBieSB0aGUgbnVtYmVyIG9mCitzYW1wbGVzLCBhbmQgdGhlIHBlcmNlbnRhZ2UgZmllbGQgcmVwcmVzZW50cyB0aGUgcmVsYXRpdmUgcGVyY2VudGFnZSBvZgordGhlIHN5bWJvbCdzIHNhbXBsZXMgaW4gdGhlIHNlY29uZCBwcm9maWxlLgorPC9wYXJhPgorPHBhcmE+CitOb3RpY2UgdGhlIG5ldyBjb2x1bW4gaW4gdGhlIG91dHB1dC4gVGhpcyB2YWx1ZSByZXByZXNlbnRzIHRoZQorcGVyY2VudGFnZSBjaGFuZ2Ugb2YgdGhlIHJlbGF0aXZlIHBlcmNlbnQgYmV0d2VlbiB0aGUgZmlyc3QgYW5kIHRoZQorc2Vjb25kIHByb2ZpbGU6IHJvdWdobHksICJob3cgbXVjaCBtb3JlIGltcG9ydGFudCB0aGlzIHN5bWJvbCBpcyIuCitMb29raW5nIGF0IHRoZSBzeW1ib2wgPGZ1bmN0aW9uPmEoKTwvZnVuY3Rpb24+LCB3ZSBjYW4gc2VlIHRoYXQgaXQgdG9vaworcm91Z2hseSB0aGUgc2FtZSBhbW91bnQgb2YgdGhlIHRvdGFsIHByb2ZpbGUgaW4gYm90aCB0aGUgZmlyc3QgYW5kIHRoZQorc2Vjb25kIHByb2ZpbGUuIFRoZSBmdW5jdGlvbiA8ZnVuY3Rpb24+YygpPC9mdW5jdGlvbj4gd2FzIG5vdCBpbiB0aGUgbmV3Citwcm9maWxlLCBzbyBoYXMgYmVlbiBtYXJrZWQgd2l0aCA8ZnVuY3Rpb24+LS0tPC9mdW5jdGlvbj4uIE5vdGUgdGhhdCB0aGUKK3NhbXBsZSB2YWx1ZSBpcyB0aGUgbnVtYmVyIG9mIHNhbXBsZXMgaW4gdGhlIGZpcnN0IHByb2ZpbGU7IHNpbmNlIHdlJ3JlCitkaXNwbGF5aW5nIHJlc3VsdHMgZm9yIHRoZSBzZWNvbmQgcHJvZmlsZSwgd2UgZG9uJ3QgbGlzdCBhIHBlcmNlbnRhZ2UKK3ZhbHVlIGZvciBpdCwgYXMgaXQgd291bGQgYmUgbWVhbmluZ2xlc3MuIDxmdW5jdGlvbj5kKCk8L2Z1bmN0aW9uPiBpcworbmV3IGluIHRoZSBzZWNvbmQgcHJvZmlsZSwgYW5kIGNvbnNlcXVlbnRseSBtYXJrZWQgd2l0aAorPGZ1bmN0aW9uPisrKzwvZnVuY3Rpb24+LgorPC9wYXJhPgorPHBhcmE+CitXaGVuIGNvbXBhcmluZyBwcm9maWxlcyBiZXR3ZWVuIGRpZmZlcmVudCBiaW5hcmllcywgaXQgc2hvdWxkIGJlIGNsZWFyCit0aGF0IGZ1bmN0aW9ucyBjYW4gY2hhbmdlIGluIHRlcm1zIG9mIFZNQSBhbmQgc2l6ZS4gVG8gYXZvaWQgdGhpcworcHJvYmxlbSwgPGNvbW1hbmQ+b3ByZXBvcnQ8L2NvbW1hbmQ+IGNvbnNpZGVycyBhIHN5bWJvbCB0byBiZSB0aGUgc2FtZQoraWYgdGhlIHN5bWJvbCBuYW1lLCBpbWFnZSBuYW1lLCBhbmQgb3duaW5nIGFwcGxpY2F0aW9uIG5hbWUgYWxsIG1hdGNoOworYW55IG90aGVyIGZhY3RvcnMgYXJlIGlnbm9yZWQuIE5vdGUgdGhhdCB0aGUgY2hlY2sgZm9yIGFwcGxpY2F0aW9uIG5hbWUKK21lYW5zIHRoYXQgdHJ5aW5nIHRvIGNvbXBhcmUgbGlicmFyeSBwcm9maWxlcyBiZXR3ZWVuIHR3byBkaWZmZXJlbnQKK2FwcGxpY2F0aW9ucyB3aWxsIG5vdCB3b3JrIGFzIHlvdSBtaWdodCBleHBlY3Q6IGVhY2ggc3ltYm9sIHdpbGwgYmUKK2NvbnNpZGVyZWQgZGlmZmVyZW50LgorPC9wYXJhPgorCis8L3NlY3QyPiA8IS0tIG9wcmVwb3J0LWRpZmYgLS0+CisKKzxzZWN0MiBpZD0ib3ByZXBvcnQtYW5vbiI+Cis8dGl0bGU+QW5vbnltb3VzIGV4ZWN1dGFibGUgbWFwcGluZ3M8L3RpdGxlPgorPHBhcmE+CitNYW55IGFwcGxpY2F0aW9ucywgdHlwaWNhbGx5IG9uZXMgaW52b2x2aW5nIGR5bmFtaWMgY29tcGlsYXRpb24gaW50bworbWFjaGluZSBjb2RlIChqdXN0LWluLXRpbWUsIG9yICJKSVQiLCBjb21waWxhdGlvbiksIGhhdmUgZXhlY3V0YWJsZSBtYXBwaW5ncyB0aGF0CithcmUgbm90IGJhY2tlZCBieSBhbiBFTEYgZmlsZS4gPGNvbW1hbmQ+b3ByZXBvcnQ8L2NvbW1hbmQ+IGhhcyBiYXNpYyBzdXBwb3J0IGZvciBzaG93aW5nIHRoZQorc2FtcGxlcyB0YWtlbiBpbiB0aGVzZSByZWdpb25zOyBmb3IgZXhhbXBsZToKKzxzY3JlZW4+CiskIG9wcmVwb3J0IC91c3IvYmluL21vbm8gLWwKK0NQVTogcHBjNjQgUE9XRVI1LCBzcGVlZCAxNjU0LjM0IE1IeiAoZXN0aW1hdGVkKQorQ291bnRlZCBDWUNMRVMgZXZlbnRzIChQcm9jZXNzb3IgQ3ljbGVzIHVzaW5nIGNvbnRpbnVvdXMgc2FtcGxpbmcpIHdpdGggYSB1bml0IG1hc2sgb2YgMHgwMCAoTm8gdW5pdCBtYXNrKSBjb3VudCAxMDAwMDAKK3NhbXBsZXMgICUgICAgICAgIGltYWdlIG5hbWUgICAgCQkgICAgICAgICAgICAgICAgc3ltYm9sIG5hbWUKKzQ3ICAgICAgIDU4Ljc1MDAgIG1vbm8gICAgICAgICAgICAgICAgICAgICAJCQkobm8gc3ltYm9scykKKzE0ICAgICAgIDE3LjUwMDAgIGFub24gKHRnaWQ6MzE4OSByYW5nZToweGY3MmFhMDAwLTB4ZjcyZmEwMDApICAobm8gc3ltYm9scykKKzkgICAgICAgIDExLjI1MDAgIGFub24gKHRnaWQ6MzE4OSByYW5nZToweGY2Y2NhMDAwLTB4ZjZkZDkwMDApICAobm8gc3ltYm9scykKKy4JIC4JICAuCQkJCQkJLgorPC9zY3JlZW4+Cis8L3BhcmE+Cis8cGFyYT4KK05vdGUgdGhhdCwgc2luY2Ugc3VjaCBtYXBwaW5ncyBhcmUgZGVwZW5kZW50IHVwb24gaW5kaXZpZHVhbCBpbnZvY2F0aW9ucyBvZgorYSBiaW5hcnksIHRoZXNlIG1hcHBpbmdzIGFyZSBhbHdheXMgbGlzdGVkIGFzIGEgZGVwZW5kZW50IGltYWdlLAorZXZlbiB3aGVuIHVzaW5nIDxvcHRpb24+LS1zZXBhcmF0ZT1ub25lPC9vcHRpb24+LgorRXF1YWxseSwgdGhlIHJlc3VsdHMgYXJlIG5vdCBhZmZlY3RlZCBieSB0aGUgPG9wdGlvbj4tLW1lcmdlPC9vcHRpb24+CitvcHRpb24uCis8L3BhcmE+Cis8cGFyYT4KK0FzIHNob3duIGluIHRoZSBvcHJlcG9ydCBvdXRwdXQgYWJvdmUsIE9Qcm9maWxlIGlzIHVuYWJsZSB0byBhdHRyaWJ1dGUgdGhlIHNhbXBsZXMgdG8gYW55CitzeW1ib2wocykgYmVjYXVzZSB0aGVyZSBpcyBubyBFTEYgZmlsZSBmb3IgdGhpcyBjb2RlLgorRW5oYW5jZWQgc3VwcG9ydCBmb3IgSklUZWQgY29kZSBpcyBub3cgYXZhaWxhYmxlIGZvciBzb21lIHZpcnR1YWwgbWFjaGluZXM7IAorZS5nLiwgdGhlIEphdmEgVmlydHVhbCBNYWNoaW5lLiAgRm9yIGRldGFpbHMgYWJvdXQgT1Byb2ZpbGUgb3V0cHV0IGZvcgorSklUZWQgY29kZSwgc2VlIDx4cmVmIGxpbmtlbmQ9ImdldHRpbmctaml0LXJlcG9ydHMiIC8+LgorPC9wYXJhPgorPHBhcmE+Rm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgSklUIHN1cHBvcnQgaW4gT1Byb2ZpbGUsIHNlZSA8eHJlZiBsaW5rZW5kPSJqaXRzdXBwb3J0Ii8+LgorPC9wYXJhPgorPC9zZWN0Mj4gPCEtLSBvcHJlcG9ydC1hbm9uIC0tPgorCis8c2VjdDIgaWQ9Im9wcmVwb3J0LXhtbCI+Cis8dGl0bGU+WE1MIGZvcm1hdHRlZCBvdXRwdXQ8L3RpdGxlPgorPHBhcmE+CitUaGUgLXhtbCBvcHRpb24gY2FuIGJlIHVzZWQgdG8gZ2VuZXJhdGUgWE1MIGluc3RlYWQgb2YgdGhlIHVzdWFsCit0ZXh0IGZvcm1hdC4gIFRoaXMgYWxsb3dzIG9wcmVwb3J0IHRvIGVsaW1pbmF0ZSBzb21lIG9mIHRoZSBjb25zdHJhaW50cworZGljdGF0ZWQgYnkgdGhlIHR3byBkaW1lbnNpb25hbCB0ZXh0IGZvcm1hdC4gIEZvciBleGFtcGxlLCBpdCBpcyBwb3NzaWJsZQordG8gc2VwYXJhdGUgdGhlIHNhbXBsZSBkYXRhIGFjcm9zcyBtdWx0aXBsZSBldmVudHMsIGNwdXMgYW5kIHRocmVhZHMuICBUaGUgWE1MCitzY2hlbWEgaW1wbGVtZW50ZWQgYnkgb3ByZXBvcnQgaXMgZm91bmQgaW4gZG9jL29wcmVwb3J0LnhzZC4gSXQgY29udGFpbnMKK21vcmUgZGV0YWlsZWQgY29tbWVudHMgYWJvdXQgdGhlIHN0cnVjdHVyZSBvZiB0aGUgWE1MIGdlbmVyYXRlZCBieSBvcHJlcG9ydC4KKzwvcGFyYT4KKzxwYXJhPgorU2luY2UgWE1MIGlzIGNvbnN1bWVkIGJ5IGEgY2xpZW50IHByb2dyYW0gcmF0aGVyIHRoYW4gYSB1c2VyLCBpdHMgc3RydWN0dXJlCitpcyBmYWlybHkgc3RhdGljLiAgSW4gcGFydGljdWxhciwgdGhlIC0tc29ydCBvcHRpb24gaXMgaW5jb21wYXRpYmxlIHdpdGggdGhlCistLXhtbCBvcHRpb24uICBQZXJjZW50YWdlcyBhcmUgbm90IGRpc2xheWVkIGluIHRoZSBYTUwgc28gdGhlIG9wdGlvbnMgcmVsYXRlZAordG8gcGVyY2VudGFnZXMgd2lsbCBoYXZlIG5vIGVmZmVjdC4gIEZ1bGwgcGF0aG5hbWVzIGFyZSBhbHdheXMgZGlzcGxheWVkIGluCit0aGUgWE1MIHNvIC0tbG9uZy1maWxlbmFtZXMgaXMgbm90IG5lY2Vzc2FyeS4gIFRoZSAtLWRldGFpbHMgb3B0aW9uIHdpbGwgY2F1c2UKK2FsbCBvZiB0aGUgaW5kaXZpZHVhbCBzYW1wbGUgZGF0YSB0byBiZSBpbmNsdWRlZCBpbiB0aGUgWE1MIGFzIHdlbGwgYXMgdGhlCitpbnN0cnVjdGlvbiBieXRlIHN0cmVhbSBmb3IgZWFjaCBzeW1ib2wgKGZvciBkb2luZyBkaXNhc3NlbWJseSkgYW5kIGNhbiByZXN1bHQKK2luIHZlcnkgbGFyZ2UgWE1MIGZpbGVzLgorPC9wYXJhPgorPC9zZWN0Mj4gPCEtLSBvcHJlcG9ydC14bWwgLS0+CisKKzxzZWN0MiBpZD0ib3ByZXBvcnQtb3B0aW9ucyI+Cis8dGl0bGU+T3B0aW9ucyBmb3IgPGNvbW1hbmQ+b3ByZXBvcnQ8L2NvbW1hbmQ+PC90aXRsZT4KKworPHZhcmlhYmxlbGlzdD4KKzx2YXJsaXN0ZW50cnk+PHRlcm0+PG9wdGlvbj4tLWFjY3VtdWxhdGVkIC8gLWE8L29wdGlvbj48L3Rlcm0+PGxpc3RpdGVtPjxwYXJhPgorQWNjdW11bGF0ZSBzYW1wbGUgYW5kIHBlcmNlbnRhZ2UgY291bnRzIGluIHRoZSBzeW1ib2wgbGlzdC4KKzwvcGFyYT48L2xpc3RpdGVtPjwvdmFybGlzdGVudHJ5PgorPHZhcmxpc3RlbnRyeT48dGVybT48b3B0aW9uPi0tY2FsbGdyYXBoIC8gLWM8L29wdGlvbj48L3Rlcm0+PGxpc3RpdGVtPjxwYXJhPgorU2hvdyBjYWxsZ3JhcGggaW5mb3JtYXRpb24uCis8L3BhcmE+PC9saXN0aXRlbT48L3Zhcmxpc3RlbnRyeT4KKzx2YXJsaXN0ZW50cnk+PHRlcm0+PG9wdGlvbj4tLWRlYnVnLWluZm8gLyAtZzwvb3B0aW9uPjwvdGVybT48bGlzdGl0ZW0+PHBhcmE+CitTaG93IHNvdXJjZSBmaWxlIGFuZCBsaW5lIGZvciBlYWNoIHN5bWJvbC4KKzwvcGFyYT48L2xpc3RpdGVtPjwvdmFybGlzdGVudHJ5PgorPHZhcmxpc3RlbnRyeT48dGVybT48b3B0aW9uPi0tZGVtYW5nbGUgLyAtRCBub25lfG5vcm1hbHxzbWFydDwvb3B0aW9uPjwvdGVybT48bGlzdGl0ZW0+PHBhcmE+Citub25lOiBubyBkZW1hbmdsaW5nLiBub3JtYWw6IHVzZSBkZWZhdWx0IGRlbWFuZ2xlciAoZGVmYXVsdCkgc21hcnQ6IHVzZQorcGF0dGVybi1tYXRjaGluZyB0byBtYWtlIEMrKyBzeW1ib2wgZGVtYW5nbGluZyBtb3JlIHJlYWRhYmxlLgorPC9wYXJhPjwvbGlzdGl0ZW0+PC92YXJsaXN0ZW50cnk+Cis8dmFybGlzdGVudHJ5Pjx0ZXJtPjxvcHRpb24+LS1kZXRhaWxzIC8gLWQ8L29wdGlvbj48L3Rlcm0+PGxpc3RpdGVtPjxwYXJhPgorU2hvdyBwZXItaW5zdHJ1Y3Rpb24gZGV0YWlscyBmb3IgYWxsIHNlbGVjdGVkIHN5bWJvbHMuIE5vdGUgdGhhdCwgZm9yCitiaW5hcmllcyB3aXRob3V0IHN5bWJvbCBpbmZvcm1hdGlvbiwgdGhlIFZNQSB2YWx1ZXMgc2hvd24gYXJlIHJhdyBmaWxlCitvZmZzZXRzIGZvciB0aGUgaW1hZ2UgYmluYXJ5LgorPC9wYXJhPjwvbGlzdGl0ZW0+PC92YXJsaXN0ZW50cnk+Cis8dmFybGlzdGVudHJ5Pjx0ZXJtPjxvcHRpb24+LS1leGNsdWRlLWRlcGVuZGVudCAvIC14PC9vcHRpb24+PC90ZXJtPjxsaXN0aXRlbT48cGFyYT4KK0RvIG5vdCBpbmNsdWRlIGFwcGxpY2F0aW9uLXNwZWNpZmljIGltYWdlcyBmb3IgbGlicmFyaWVzLCBrZXJuZWwgbW9kdWxlcworYW5kIHRoZSBrZXJuZWwuIFRoaXMgb3B0aW9uIG9ubHkgbWFrZXMgc2Vuc2UgaWYgdGhlIHByb2ZpbGUgc2Vzc2lvbgordXNlZCAtLXNlcGFyYXRlLgorPC9wYXJhPjwvbGlzdGl0ZW0+PC92YXJsaXN0ZW50cnk+Cis8dmFybGlzdGVudHJ5Pjx0ZXJtPjxvcHRpb24+LS1leGNsdWRlLXN5bWJvbHMgLyAtZSBbc3ltYm9sc108L29wdGlvbj48L3Rlcm0+PGxpc3RpdGVtPjxwYXJhPgorRXhjbHVkZSBhbGwgdGhlIHN5bWJvbHMgaW4gdGhlIGdpdmVuIGNvbW1hLXNlcGFyYXRlZCBsaXN0LgorPC9wYXJhPjwvbGlzdGl0ZW0+PC92YXJsaXN0ZW50cnk+Cis8dmFybGlzdGVudHJ5Pjx0ZXJtPjxvcHRpb24+LS1nbG9iYWwtcGVyY2VudCAvIC0lPC9vcHRpb24+PC90ZXJtPjxsaXN0aXRlbT48cGFyYT4KK01ha2UgYWxsIHBlcmNlbnRhZ2VzIHJlbGF0aXZlIHRvIHRoZSB3aG9sZSBwcm9maWxlLgorPC9wYXJhPjwvbGlzdGl0ZW0+PC92YXJsaXN0ZW50cnk+Cis8dmFybGlzdGVudHJ5Pjx0ZXJtPjxvcHRpb24+LS1oZWxwIC8gLT8gLyAtLXVzYWdlPC9vcHRpb24+PC90ZXJtPjxsaXN0aXRlbT48cGFyYT4KK1Nob3cgaGVscCBtZXNzYWdlLgorPC9wYXJhPjwvbGlzdGl0ZW0+PC92YXJsaXN0ZW50cnk+Cis8dmFybGlzdGVudHJ5Pjx0ZXJtPjxvcHRpb24+LS1pbWFnZS1wYXRoIC8gLXAgW3BhdGhzXTwvb3B0aW9uPjwvdGVybT48bGlzdGl0ZW0+PHBhcmE+CitDb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBhZGRpdGlvbmFsIHBhdGhzIHRvIHNlYXJjaCBmb3IgYmluYXJpZXMuCitUaGlzIGlzIG5lZWRlZCB0byBmaW5kIG1vZHVsZXMgaW4ga2VybmVscyAyLjYgYW5kIHVwd2FyZHMuCis8L3BhcmE+PC9saXN0aXRlbT48L3Zhcmxpc3RlbnRyeT4KKzx2YXJsaXN0ZW50cnk+PHRlcm0+PG9wdGlvbj4tLXJvb3QgLyAtUiBbcGF0aF08L29wdGlvbj48L3Rlcm0+PGxpc3RpdGVtPjxwYXJhPgorQSBwYXRoIHRvIGEgZmlsZXN5c3RlbSB0byBzZWFyY2ggZm9yIGFkZGl0aW9uYWwgYmluYXJpZXMuCis8L3BhcmE+PC9saXN0aXRlbT48L3Zhcmxpc3RlbnRyeT4KKzx2YXJsaXN0ZW50cnk+PHRlcm0+PG9wdGlvbj4tLWluY2x1ZGUtc3ltYm9scyAvIC1pIFtzeW1ib2xzXTwvb3B0aW9uPjwvdGVybT48bGlzdGl0ZW0+PHBhcmE+CitPbmx5IGluY2x1ZGUgc3ltYm9scyBpbiB0aGUgZ2l2ZW4gY29tbWEtc2VwYXJhdGVkIGxpc3QuCis8L3BhcmE+PC9saXN0aXRlbT48L3Zhcmxpc3RlbnRyeT4KKzx2YXJsaXN0ZW50cnk+PHRlcm0+PG9wdGlvbj4tLWxvbmctZmlsZW5hbWVzIC8gLWY8L29wdGlvbj48L3Rlcm0+PGxpc3RpdGVtPjxwYXJhPgorT3V0cHV0IGZ1bGwgcGF0aHMgaW5zdGVhZCBvZiBiYXNlbmFtZXMuCis8L3BhcmE+PC9saXN0aXRlbT48L3Zhcmxpc3RlbnRyeT4KKzx2YXJsaXN0ZW50cnk+PHRlcm0+PG9wdGlvbj4tLW1lcmdlIC8gLW0gW2xpYixjcHUsdGlkLHRnaWQsdW5pdG1hc2ssYWxsXTwvb3B0aW9uPjwvdGVybT48bGlzdGl0ZW0+PHBhcmE+CitNZXJnZSBhbnkgcHJvZmlsZXMgc2VwYXJhdGVkIGluIGEgLS1zZXBhcmF0ZSBzZXNzaW9uLgorPC9wYXJhPjwvbGlzdGl0ZW0+PC92YXJsaXN0ZW50cnk+Cis8dmFybGlzdGVudHJ5Pjx0ZXJtPjxvcHRpb24+LS1uby1oZWFkZXI8L29wdGlvbj48L3Rlcm0+PGxpc3RpdGVtPjxwYXJhPgorRG9uJ3Qgb3V0cHV0IGEgaGVhZGVyIGRldGFpbGluZyBwcm9maWxpbmcgcGFyYW1ldGVycy4KKzwvcGFyYT48L2xpc3RpdGVtPjwvdmFybGlzdGVudHJ5PgorPHZhcmxpc3RlbnRyeT48dGVybT48b3B0aW9uPi0tb3V0cHV0LWZpbGUgLyAtbyBbZmlsZV08L29wdGlvbj48L3Rlcm0+PGxpc3RpdGVtPjxwYXJhPgorT3V0cHV0IHRvIHRoZSBnaXZlbiBmaWxlIGluc3RlYWQgb2Ygc3Rkb3V0LgorPC9wYXJhPjwvbGlzdGl0ZW0+PC92YXJsaXN0ZW50cnk+Cis8dmFybGlzdGVudHJ5Pjx0ZXJtPjxvcHRpb24+LS1yZXZlcnNlLXNvcnQgLyAtcjwvb3B0aW9uPjwvdGVybT48bGlzdGl0ZW0+PHBhcmE+CitSZXZlcnNlIHRoZSBzb3J0IGZyb20gdGhlIGRlZmF1bHQuCis8L3BhcmE+PC9saXN0aXRlbT48L3Zhcmxpc3RlbnRyeT4KKzx2YXJsaXN0ZW50cnk+PHRlcm0+PG9wdGlvbj4tLXNlc3Npb24tZGlyPTwvb3B0aW9uPmRpcl9wYXRoPC90ZXJtPjxsaXN0aXRlbT48cGFyYT4KK1VzZSBzYW1wbGUgZGF0YWJhc2Ugb3V0IG9mIGRpcmVjdG9yeSA8ZmlsZW5hbWU+ZGlyX3BhdGg8L2ZpbGVuYW1lPiAKK2luc3RlYWQgb2YgdGhlIGRlZmF1bHQgbG9jYXRpb24gKC92YXIvbGliL29wcm9maWxlKS4KKzwvcGFyYT48L2xpc3RpdGVtPjwvdmFybGlzdGVudHJ5PgorPHZhcmxpc3RlbnRyeT48dGVybT48b3B0aW9uPi0tc2hvdy1hZGRyZXNzIC8gLXc8L29wdGlvbj48L3Rlcm0+PGxpc3RpdGVtPjxwYXJhPgorU2hvdyB0aGUgVk1BIGFkZHJlc3Mgb2YgZWFjaCBzeW1ib2wgKG9mZiBieSBkZWZhdWx0KS4KKzwvcGFyYT48L2xpc3RpdGVtPjwvdmFybGlzdGVudHJ5PgorPHZhcmxpc3RlbnRyeT48dGVybT48b3B0aW9uPi0tc29ydCAvIC1zIFt2bWEsc2FtcGxlLHN5bWJvbCxkZWJ1ZyxpbWFnZV08L29wdGlvbj48L3Rlcm0+PGxpc3RpdGVtPjxwYXJhPgorU29ydCB0aGUgbGlzdCBvZiBzeW1ib2xzIGJ5LCByZXNwZWN0aXZlbHksIHN5bWJvbCBhZGRyZXNzLAorbnVtYmVyIG9mIHNhbXBsZXMsIHN5bWJvbCBuYW1lLCBkZWJ1ZyBmaWxlbmFtZSBhbmQgbGluZSBudW1iZXIsCitiaW5hcnkgaW1hZ2UgZmlsZW5hbWUuCis8L3BhcmE+PC9saXN0aXRlbT48L3Zhcmxpc3RlbnRyeT4KKzx2YXJsaXN0ZW50cnk+PHRlcm0+PG9wdGlvbj4tLXN5bWJvbHMgLyAtbDwvb3B0aW9uPjwvdGVybT48bGlzdGl0ZW0+PHBhcmE+CitMaXN0IHBlci1zeW1ib2wgaW5mb3JtYXRpb24gaW5zdGVhZCBvZiBhIGJpbmFyeSBpbWFnZSBzdW1tYXJ5LgorPC9wYXJhPjwvbGlzdGl0ZW0+PC92YXJsaXN0ZW50cnk+Cis8dmFybGlzdGVudHJ5Pjx0ZXJtPjxvcHRpb24+LS10aHJlc2hvbGQgLyAtdCBbcGVyY2VudGFnZV08L29wdGlvbj48L3Rlcm0+PGxpc3RpdGVtPjxwYXJhPgorT25seSBvdXRwdXQgZGF0YSBmb3Igc3ltYm9scyB0aGF0IGhhdmUgbW9yZSB0aGFuIHRoZSBnaXZlbiBwZXJjZW50YWdlCitvZiB0b3RhbCBzYW1wbGVzLgorPC9wYXJhPjwvbGlzdGl0ZW0+PC92YXJsaXN0ZW50cnk+Cis8dmFybGlzdGVudHJ5Pjx0ZXJtPjxvcHRpb24+LS12ZXJib3NlIC8gLVYgW29wdGlvbnNdPC9vcHRpb24+PC90ZXJtPjxsaXN0aXRlbT48cGFyYT4KK0dpdmUgdmVyYm9zZSBkZWJ1Z2dpbmcgb3V0cHV0LgorPC9wYXJhPjwvbGlzdGl0ZW0+PC92YXJsaXN0ZW50cnk+Cis8dmFybGlzdGVudHJ5Pjx0ZXJtPjxvcHRpb24+LS12ZXJzaW9uIC8gLXY8L29wdGlvbj48L3Rlcm0+PGxpc3RpdGVtPjxwYXJhPgorU2hvdyB2ZXJzaW9uLgorPC9wYXJhPjwvbGlzdGl0ZW0+PC92YXJsaXN0ZW50cnk+Cis8dmFybGlzdGVudHJ5Pjx0ZXJtPjxvcHRpb24+LS14bWwgLyAtWDwvb3B0aW9uPjwvdGVybT48bGlzdGl0ZW0+PHBhcmE+CitHZW5lcmF0ZSBYTUwgb3V0cHV0LgorPC9wYXJhPjwvbGlzdGl0ZW0+PC92YXJsaXN0ZW50cnk+Cis8L3ZhcmlhYmxlbGlzdD4KKworPC9zZWN0Mj4KKworPC9zZWN0MT4gPCEtLSBvcHJlcG9ydCAtLT4KKworPHNlY3QxIGlkPSJvcGFubm90YXRlIj4KKzx0aXRsZT5PdXRwdXR0aW5nIGFubm90YXRlZCBzb3VyY2UgKDxjb21tYW5kPm9wYW5ub3RhdGU8L2NvbW1hbmQ+KTwvdGl0bGU+Cis8cGFyYT4KK1RoZSA8Y29tbWFuZD5vcGFubm90YXRlPC9jb21tYW5kPiB1dGlsaXR5IGdlbmVyYXRlcyBhbm5vdGF0ZWQgc291cmNlIGZpbGVzIG9yIGFzc2VtYmx5IGxpc3RpbmdzLCBvcHRpb25hbGx5CittaXhlZCB3aXRoIHNvdXJjZS4KK0lmIHlvdSB3YW50IHRvIHNlZSB0aGUgc291cmNlIGZpbGUsIHRoZSBwcm9maWxlZCBhcHBsaWNhdGlvbiBuZWVkcyB0byBoYXZlIGRlYnVnIGluZm9ybWF0aW9uLCBhbmQgdGhlIHNvdXJjZQorbXVzdCBiZSBhdmFpbGFibGUgdGhyb3VnaCB0aGlzIGRlYnVnIGluZm9ybWF0aW9uLiBGb3IgR0NDLCB5b3UgbXVzdCB1c2UgdGhlIDxvcHRpb24+LWc8L29wdGlvbj4gb3B0aW9uCit3aGVuIHlvdSBhcmUgY29tcGlsaW5nLgorSWYgdGhlIGJpbmFyeSBkb2Vzbid0IGNvbnRhaW4gc3VmZmljaWVudCBkZWJ1ZyBpbmZvcm1hdGlvbiwgeW91IGNhbiBzdGlsbAordXNlIDxjb21tYW5kPm9wYW5ub3RhdGUgPG9wdGlvbj4tLWFzc2VtYmx5PC9vcHRpb24+PC9jb21tYW5kPiB0byBnZXQgYW5ub3RhdGVkIGFzc2VtYmx5LgorPC9wYXJhPgorPHBhcmE+CitOb3RlIHRoYXQgZm9yIHRoZSByZWFzb24gZXhwbGFpbmVkIGluIDx4cmVmIGxpbmtlbmQ9ImhhcmR3YXJlLWNvdW50ZXJzIiAvPiB0aGUgcmVzdWx0cyBjYW4gYmUKK2luYWNjdXJhdGUuIFRoZSBkZWJ1ZyBpbmZvcm1hdGlvbiBpdHNlbGYgY2FuIGFkZCBvdGhlciBwcm9ibGVtczsgZm9yIGV4YW1wbGUsIHRoZSBsaW5lIG51bWJlciBmb3IgYSBzeW1ib2wgY2FuIGJlCitpbmNvcnJlY3QuIEFzc2VtYmx5IGluc3RydWN0aW9ucyBjYW4gYmUgcmUtb3JkZXJlZCBhbmQgbW92ZWQgYnkgdGhlIGNvbXBpbGVyLCBhbmQgdGhpcyBjYW4gbGVhZCB0bworY3JlZGl0aW5nIHNvdXJjZSBsaW5lcyB3aXRoIHNhbXBsZXMgbm90IHJlYWxseSAib3duZWQiIGJ5IHRoaXMgbGluZS4gQWxzbyBzZWUKKzx4cmVmIGxpbmtlbmQ9ImludGVycHJldGluZyIgLz4uCis8L3BhcmE+Cis8cGFyYT4KK1lvdSBjYW4gb3V0cHV0IHRoZSBhbm5vdGF0aW9uIHRvIG9uZSBzaW5nbGUgZmlsZSwgY29udGFpbmluZyBhbGwgdGhlIHNvdXJjZSBmb3VuZCB1c2luZyB0aGUKKzxvcHRpb24+LS1zb3VyY2U8L29wdGlvbj4uIFlvdSBjYW4gdXNlIHRoaXMgaW4gY29uanVuY3Rpb24gd2l0aCA8b3B0aW9uPi0tYXNzZW1ibHk8L29wdGlvbj4KK3RvIGdldCBjb21iaW5lZCBzb3VyY2UvYXNzZW1ibHkgb3V0cHV0LgorPC9wYXJhPgorPHBhcmE+CitZb3UgY2FuIGFsc28gb3V0cHV0IGEgZGlyZWN0b3J5IG9mIGFubm90YXRlZCBzb3VyY2UgZmlsZXMgdGhhdCBtYWludGFpbnMgdGhlIHN0cnVjdHVyZSBvZgordGhlIG9yaWdpbmFsIHNvdXJjZXMuIEVhY2ggbGluZSBpbiB0aGUgYW5ub3RhdGVkIHNvdXJjZSBpcyBwcmVwZW5kZWQgd2l0aCB0aGUgc2FtcGxlcworZm9yIHRoYXQgbGluZS4gQWRkaXRpb25hbGx5LCBlYWNoIHN5bWJvbCBpcyBhbm5vdGF0ZWQgZ2l2aW5nIGRldGFpbHMgZm9yIHRoZSBzeW1ib2wKK2FzIGEgd2hvbGUuIEFuIGV4YW1wbGU6Cis8L3BhcmE+Cis8c2NyZWVuPgorJCBvcGFubm90YXRlIC0tc291cmNlIC0tb3V0cHV0LWRpcj1hbm5vdGF0ZWQgL3Vzci9sb2NhbC9vcHJvZmlsZS1wcC9iaW4vb3Byb2ZpbGVkCiskIGxzIGFubm90YXRlZC9ob21lL21vei9zcmMvb3Byb2ZpbGUtcHAvZGFlbW9uLworb3BkX2Nvb2tpZS5oICBvcGRfaW1hZ2UuYyAgb3BkX2tlcm5lbC5jICBvcGRfc2FtcGxlX2ZpbGVzLmMgIG9wcm9maWxlZC5jCis8L3NjcmVlbj4KKzxwYXJhPgorTGluZSBudW1iZXJzIGFyZSBtYWludGFpbmVkIGluIHRoZSBzb3VyY2UgZmlsZXMsIGJ1dCBlYWNoIGZpbGUgaGFzCithIGZvb3RlciBhcHBlbmRlZCBkZXNjcmliaW5nIHRoZSBwcm9maWxpbmcgZGV0YWlscy4gVGhlIGFjdHVhbCBhbm5vdGF0aW9uCitsb29rcyBzb21ldGhpbmcgbGlrZSB0aGlzIDoKKzwvcGFyYT4KKzxzY3JlZW4+CisuLi4KKyAgICAgICAgICAgICAgIDpzdGF0aWMgdWludDY0X3QgcG9wX2J1ZmZlcl92YWx1ZShzdHJ1Y3QgdHJhbnNpZW50ICogdHJhbnMpCisgMTE1MTAgIDEuOTY2MSA6eyAvKiBwb3BfYnVmZmVyX3ZhbHVlIHRvdGFsOiAgODk5MDEgMTUuMzU2NiAqLworICAgICAgICAgICAgICAgOiAgICAgICAgdWludDY0X3QgdmFsOworICAgICAgICAgICAgICAgOgorIDEwMjI3ICAxLjc0NjkgOiAgICAgICAgaWYgKCF0cmFucy0+cmVtYWluaW5nKSB7CisgICAgICAgICAgICAgICA6ICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQlVHOiBwb3BwaW5nIGVtcHR5IGJ1ZmZlciAhXG4iKTsKKyAgICAgICAgICAgICAgIDogICAgICAgICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgICAgICAgICAgICAgOiAgICAgICAgfQorICAgICAgICAgICAgICAgOgorICAgICAgICAgICAgICAgOiAgICAgICAgdmFsID0gZ2V0X2J1ZmZlcl92YWx1ZSh0cmFucy0+YnVmZmVyLCAwKTsKKyAgMjI4MSAgMC4zODk2IDogICAgICAgIHRyYW5zLT5yZW1haW5pbmctLTsKKyAgMjI5NiAgMC4zOTIyIDogICAgICAgIHRyYW5zLT5idWZmZXIgKz0ga2VybmVsX3BvaW50ZXJfc2l6ZTsKKyAgICAgICAgICAgICAgIDogICAgICAgIHJldHVybiB2YWw7CisgMTA0NTQgIDEuNzg1NyA6fQorLi4uCis8L3NjcmVlbj4KKworPHBhcmE+CitUaGUgZmlyc3QgbnVtYmVyIG9uIGVhY2ggbGluZSBpcyB0aGUgbnVtYmVyIG9mIHNhbXBsZXMsIHdoaWxzdCB0aGUgc2Vjb25kIGlzCit0aGUgcmVsYXRpdmUgcGVyY2VudGFnZSBvZiB0b3RhbCBzYW1wbGVzLgorPC9wYXJhPgorCis8c2VjdDIgaWQ9Im9wYW5ub3RhdGUtZmluZGluZy1zb3VyY2UiPgorPHRpdGxlPkxvY2F0aW5nIHNvdXJjZSBmaWxlczwvdGl0bGU+Cis8cGFyYT4KK09mIGNvdXJzZSwgPGNvbW1hbmQ+b3Bhbm5vdGF0ZTwvY29tbWFuZD4gbmVlZHMgdG8gYmUgYWJsZSB0byBsb2NhdGUgdGhlIHNvdXJjZSBmaWxlcworZm9yIHRoZSBiaW5hcnkgaW1hZ2UocykgaW4gb3JkZXIgdG8gcHJvZHVjZSBvdXRwdXQuIFNvbWUgYmluYXJ5IGltYWdlcyBoYXZlIGRlYnVnCitpbmZvcm1hdGlvbiB3aGVyZSB0aGUgZ2l2ZW4gc291cmNlIGZpbGUgcGF0aHMgYXJlIHJlbGF0aXZlLCBub3QgYWJzb2x1dGUuIFlvdSBjYW4KK3NwZWNpZnkgc2VhcmNoIHBhdGhzIHRvIGxvb2sgZm9yIHRoZXNlIGZpbGVzIChzaW1pbGFyIHRvIDxjb21tYW5kPmdkYjwvY29tbWFuZD4ncworPG9wdGlvbj5kaXI8L29wdGlvbj4gY29tbWFuZCkgd2l0aCB0aGUgPG9wdGlvbj4tLXNlYXJjaC1kaXJzPC9vcHRpb24+IG9wdGlvbi4KKzwvcGFyYT4KKzxwYXJhPgorU29tZXRpbWVzIHlvdSBtYXkgaGF2ZSBhIGJpbmFyeSBpbWFnZSB3aGljaCBnaXZlcyBhYnNvbHV0ZSBwYXRocyBmb3IgdGhlIHNvdXJjZSBmaWxlcywKK2J1dCB5b3UgaGF2ZSB0aGUgYWN0dWFsIHNvdXJjZXMgZWxzZXdoZXJlIChjb21tb25seSwgeW91J3ZlIGluc3RhbGxlZCBhbiBTUlBNIGZvcgorYSBiaW5hcnkgb24geW91ciBzeXN0ZW0gYW5kIHlvdSB3YW50IGFubm90YXRpb24gZnJvbSBhbiBleGlzdGluZyBwcm9maWxlKS4gWW91IGNhbgordXNlIHRoZSA8b3B0aW9uPi0tYmFzZS1kaXJzPC9vcHRpb24+IG9wdGlvbiB0byByZWRpcmVjdCBPUHJvZmlsZSB0byBsb29rIHNvbWV3aGVyZQorZWxzZSBmb3Igc291cmNlIGZpbGVzLiBGb3IgZXhhbXBsZSwgaW1hZ2luZSB3ZSBoYXZlIGEgYmluYXJ5IGdlbmVyYXRlZCBmcm9tIGEgc291cmNlCitmaWxlIHRoYXQgaXMgZ2l2ZW4gaW4gdGhlIGRlYnVnIGluZm9ybWF0aW9uIGFzIDxmaWxlbmFtZT4vdG1wL2J1aWxkL2xpYmZvby9mb28uYzwvZmlsZW5hbWU+LAorYW5kIHlvdSBoYXZlIHRoZSBzb3VyY2UgdHJlZSBtYXRjaGluZyB0aGF0IGJpbmFyeSBpbnN0YWxsZWQgaW4gPGZpbGVuYW1lPi9ob21lL3VzZXIvbGliZm9vLzwvZmlsZW5hbWU+LgorWW91IGNhbiByZWRpcmVjdCBPUHJvZmlsZSB0byBmaW5kIDxmaWxlbmFtZT5mb28uYzwvZmlsZW5hbWU+IGNvcnJlY3RseSBsaWtlIHRoaXMgOgorPC9wYXJhPgorPHNjcmVlbj4KKyQgb3Bhbm5vdGF0ZSAtLXNvdXJjZSAtLWJhc2UtZGlycz0vdG1wL2J1aWxkL2xpYmZvby8gLS1zZWFyY2gtZGlycz0vaG9tZS91c2VyL2xpYmZvby8gLS1vdXRwdXQtZGlyPWFubm90YXRlZC8gL2xpYi9saWJmb28uc28KKzwvc2NyZWVuPgorPHBhcmE+CitZb3UgY2FuIHNwZWNpZnkgbXVsdGlwbGUgKGNvbW1hLXNlcGFyYXRlZCkgcGF0aHMgdG8gYm90aCBvcHRpb25zLgorPC9wYXJhPgorPC9zZWN0Mj4KKworPHNlY3QyIGlkPSJvcGFubm90YXRlLWRldGFpbHMiPgorPHRpdGxlPlVzYWdlIG9mIDxjb21tYW5kPm9wYW5ub3RhdGU8L2NvbW1hbmQ+PC90aXRsZT4KKworPHZhcmlhYmxlbGlzdD4KKzx2YXJsaXN0ZW50cnk+PHRlcm0+PG9wdGlvbj4tLWFzc2VtYmx5IC8gLWE8L29wdGlvbj48L3Rlcm0+PGxpc3RpdGVtPjxwYXJhPgorT3V0cHV0IGFubm90YXRlZCBhc3NlbWJseS4gSWYgdGhpcyBpcyBjb21iaW5lZCB3aXRoIC0tc291cmNlLCB0aGVuIG1peGVkCitzb3VyY2UgLyBhc3NlbWJseSBhbm5vdGF0aW9ucyBhcmUgb3V0cHV0LgorPC9wYXJhPjwvbGlzdGl0ZW0+PC92YXJsaXN0ZW50cnk+Cis8dmFybGlzdGVudHJ5Pjx0ZXJtPjxvcHRpb24+LS1iYXNlLWRpcnMgLyAtYiBbcGF0aHNdLzwvb3B0aW9uPjwvdGVybT48bGlzdGl0ZW0+PHBhcmE+CitDb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBwYXRoIHByZWZpeGVzLiBUaGlzIGNhbiBiZSB1c2VkIHRvIHBvaW50IE9Qcm9maWxlIHRvIGEKK2RpZmZlcmVudCBsb2NhdGlvbiBmb3Igc291cmNlIGZpbGVzIHdoZW4gdGhlIGRlYnVnIGluZm9ybWF0aW9uIHNwZWNpZmllcyBhbgorYWJzb2x1dGUgcGF0aCBvbiB5b3VyIHN5c3RlbSBmb3IgdGhlIHNvdXJjZSB0aGF0IGRvZXMgbm90IGV4aXN0LiBUaGUgcHJlZml4CitpcyBzdHJpcHBlZCBmcm9tIHRoZSBkZWJ1ZyBzb3VyY2UgZmlsZSBwYXRocywgdGhlbiBzZWFyY2hlZCBpbiB0aGUgc2VhcmNoIGRpcnMKK3NwZWNpZmllZCBieSA8b3B0aW9uPi0tc2VhcmNoLWRpcnM8L29wdGlvbj4uCis8L3BhcmE+PC9saXN0aXRlbT48L3Zhcmxpc3RlbnRyeT4KKzx2YXJsaXN0ZW50cnk+PHRlcm0+PG9wdGlvbj4tLWRlbWFuZ2xlIC8gLUQgbm9uZXxub3JtYWx8c21hcnQ8L29wdGlvbj48L3Rlcm0+PGxpc3RpdGVtPjxwYXJhPgorbm9uZTogbm8gZGVtYW5nbGluZy4gbm9ybWFsOiB1c2UgZGVmYXVsdCBkZW1hbmdsZXIgKGRlZmF1bHQpIHNtYXJ0OiB1c2UKK3BhdHRlcm4tbWF0Y2hpbmcgdG8gbWFrZSBDKysgc3ltYm9sIGRlbWFuZ2xpbmcgbW9yZSByZWFkYWJsZS4KKzwvcGFyYT48L2xpc3RpdGVtPjwvdmFybGlzdGVudHJ5PgorPHZhcmxpc3RlbnRyeT48dGVybT48b3B0aW9uPi0tZXhjbHVkZS1kZXBlbmRlbnQgLyAteDwvb3B0aW9uPjwvdGVybT48bGlzdGl0ZW0+PHBhcmE+CitEbyBub3QgaW5jbHVkZSBhcHBsaWNhdGlvbi1zcGVjaWZpYyBpbWFnZXMgZm9yIGxpYnJhcmllcywga2VybmVsIG1vZHVsZXMKK2FuZCB0aGUga2VybmVsLiBUaGlzIG9wdGlvbiBvbmx5IG1ha2VzIHNlbnNlIGlmIHRoZSBwcm9maWxlIHNlc3Npb24KK3VzZWQgLS1zZXBhcmF0ZS4KKzwvcGFyYT48L2xpc3RpdGVtPjwvdmFybGlzdGVudHJ5PgorPHZhcmxpc3RlbnRyeT48dGVybT48b3B0aW9uPi0tZXhjbHVkZS1maWxlIFtmaWxlc108L29wdGlvbj48L3Rlcm0+PGxpc3RpdGVtPjxwYXJhPgorRXhjbHVkZSBhbGwgZmlsZXMgaW4gdGhlIGdpdmVuIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGdsb2IgcGF0dGVybnMuCis8L3BhcmE+PC9saXN0aXRlbT48L3Zhcmxpc3RlbnRyeT4KKzx2YXJsaXN0ZW50cnk+PHRlcm0+PG9wdGlvbj4tLWV4Y2x1ZGUtc3ltYm9scyAvIC1lIFtzeW1ib2xzXTwvb3B0aW9uPjwvdGVybT48bGlzdGl0ZW0+PHBhcmE+CitFeGNsdWRlIGFsbCB0aGUgc3ltYm9scyBpbiB0aGUgZ2l2ZW4gY29tbWEtc2VwYXJhdGVkIGxpc3QuCis8L3BhcmE+PC9saXN0aXRlbT48L3Zhcmxpc3RlbnRyeT4KKzx2YXJsaXN0ZW50cnk+PHRlcm0+PG9wdGlvbj4tLWhlbHAgLyAtPyAvIC0tdXNhZ2U8L29wdGlvbj48L3Rlcm0+PGxpc3RpdGVtPjxwYXJhPgorU2hvdyBoZWxwIG1lc3NhZ2UuCis8L3BhcmE+PC9saXN0aXRlbT48L3Zhcmxpc3RlbnRyeT4KKzx2YXJsaXN0ZW50cnk+PHRlcm0+PG9wdGlvbj4tLWltYWdlLXBhdGggLyAtcCBbcGF0aHNdPC9vcHRpb24+PC90ZXJtPjxsaXN0aXRlbT48cGFyYT4KK0NvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGFkZGl0aW9uYWwgcGF0aHMgdG8gc2VhcmNoIGZvciBiaW5hcmllcy4KK1RoaXMgaXMgbmVlZGVkIHRvIGZpbmQgbW9kdWxlcyBpbiBrZXJuZWxzIDIuNiBhbmQgdXB3YXJkcy4KKzwvcGFyYT48L2xpc3RpdGVtPjwvdmFybGlzdGVudHJ5PgorPHZhcmxpc3RlbnRyeT48dGVybT48b3B0aW9uPi0tcm9vdCAvIC1SIFtwYXRoXTwvb3B0aW9uPjwvdGVybT48bGlzdGl0ZW0+PHBhcmE+CitBIHBhdGggdG8gYSBmaWxlc3lzdGVtIHRvIHNlYXJjaCBmb3IgYWRkaXRpb25hbCBiaW5hcmllcy4KKzwvcGFyYT48L2xpc3RpdGVtPjwvdmFybGlzdGVudHJ5PgorPHZhcmxpc3RlbnRyeT48dGVybT48b3B0aW9uPi0taW5jbHVkZS1maWxlIFtmaWxlc108L29wdGlvbj48L3Rlcm0+PGxpc3RpdGVtPjxwYXJhPgorT25seSBpbmNsdWRlIGZpbGVzIGluIHRoZSBnaXZlbiBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBnbG9iIHBhdHRlcm5zLgorPC9wYXJhPjwvbGlzdGl0ZW0+PC92YXJsaXN0ZW50cnk+Cis8dmFybGlzdGVudHJ5Pjx0ZXJtPjxvcHRpb24+LS1pbmNsdWRlLXN5bWJvbHMgLyAtaSBbc3ltYm9sc108L29wdGlvbj48L3Rlcm0+PGxpc3RpdGVtPjxwYXJhPgorT25seSBpbmNsdWRlIHN5bWJvbHMgaW4gdGhlIGdpdmVuIGNvbW1hLXNlcGFyYXRlZCBsaXN0LgorPC9wYXJhPjwvbGlzdGl0ZW0+PC92YXJsaXN0ZW50cnk+Cis8dmFybGlzdGVudHJ5Pjx0ZXJtPjxvcHRpb24+LS1vYmpkdW1wLXBhcmFtcyBbcGFyYW1zXTwvb3B0aW9uPjwvdGVybT48bGlzdGl0ZW0+PHBhcmE+CitQYXNzIHRoZSBnaXZlbiBwYXJhbWV0ZXJzIGFzIGV4dHJhIHZhbHVlcyB3aGVuIGNhbGxpbmcgb2JqZHVtcC4KKzwvcGFyYT48L2xpc3RpdGVtPjwvdmFybGlzdGVudHJ5PgorPHZhcmxpc3RlbnRyeT48dGVybT48b3B0aW9uPi0tb3V0cHV0LWRpciAvIC1vIFtkaXJdPC9vcHRpb24+PC90ZXJtPjxsaXN0aXRlbT48cGFyYT4KK091dHB1dCBkaXJlY3RvcnkuIFRoaXMgbWFrZXMgb3Bhbm5vdGF0ZSBvdXRwdXQgb25lIGFubm90YXRlZCBmaWxlIGZvciBlYWNoCitzb3VyY2UgZmlsZS4gVGhpcyBvcHRpb24gY2FuJ3QgYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIC0tYXNzZW1ibHkuCis8L3BhcmE+PC9saXN0aXRlbT48L3Zhcmxpc3RlbnRyeT4KKzx2YXJsaXN0ZW50cnk+PHRlcm0+PG9wdGlvbj4tLXNlYXJjaC1kaXJzIC8gLWQgW3BhdGhzXTwvb3B0aW9uPjwvdGVybT48bGlzdGl0ZW0+PHBhcmE+CitDb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBwYXRocyB0byBzZWFyY2ggZm9yIHNvdXJjZSBmaWxlcy4gVGhpcyBpcyB1c2VmdWwgdG8gZmluZAorc291cmNlIGZpbGVzIHdoZW4gdGhlIGRlYnVnIGluZm9ybWF0aW9uIG9ubHkgY29udGFpbnMgcmVsYXRpdmUgcGF0aHMuCis8L3BhcmE+PC9saXN0aXRlbT48L3Zhcmxpc3RlbnRyeT4KKzx2YXJsaXN0ZW50cnk+PHRlcm0+PG9wdGlvbj4tLXNvdXJjZSAvIC1zPC9vcHRpb24+PC90ZXJtPjxsaXN0aXRlbT48cGFyYT4KK091dHB1dCBhbm5vdGF0ZWQgc291cmNlLiBUaGlzIHJlcXVpcmVzIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiB0byBiZSBhdmFpbGFibGUKK2ZvciB0aGUgYmluYXJpZXMuCis8L3BhcmE+PC9saXN0aXRlbT48L3Zhcmxpc3RlbnRyeT4KKzx2YXJsaXN0ZW50cnk+PHRlcm0+PG9wdGlvbj4tLXRocmVzaG9sZCAvIC10IFtwZXJjZW50YWdlXTwvb3B0aW9uPjwvdGVybT48bGlzdGl0ZW0+PHBhcmE+CitPbmx5IG91dHB1dCBkYXRhIGZvciBzeW1ib2xzIHRoYXQgaGF2ZSBtb3JlIHRoYW4gdGhlIGdpdmVuIHBlcmNlbnRhZ2UKK29mIHRvdGFsIHNhbXBsZXMuCis8L3BhcmE+PC9saXN0aXRlbT48L3Zhcmxpc3RlbnRyeT4KKzx2YXJsaXN0ZW50cnk+PHRlcm0+PG9wdGlvbj4tLXZlcmJvc2UgLyAtViBbb3B0aW9uc108L29wdGlvbj48L3Rlcm0+PGxpc3RpdGVtPjxwYXJhPgorR2l2ZSB2ZXJib3NlIGRlYnVnZ2luZyBvdXRwdXQuCis8L3BhcmE+PC9saXN0aXRlbT48L3Zhcmxpc3RlbnRyeT4KKzx2YXJsaXN0ZW50cnk+PHRlcm0+PG9wdGlvbj4tLXZlcnNpb24gLyAtdjwvb3B0aW9uPjwvdGVybT48bGlzdGl0ZW0+PHBhcmE+CitTaG93IHZlcnNpb24uCis8L3BhcmE+PC9saXN0aXRlbT48L3Zhcmxpc3RlbnRyeT4KKzwvdmFyaWFibGVsaXN0PgorCisKKzwvc2VjdDI+IDwhLS0gb3Bhbm5vdGF0ZS1kZXRhaWxzIC0tPgorCis8L3NlY3QxPiA8IS0tIG9wYW5ub3RhdGUgLS0+CisKKzxzZWN0MSBpZD0iZ2V0dGluZy1qaXQtcmVwb3J0cyI+CisJPHRpdGxlPk9Qcm9maWxlIHJlc3VsdHMgd2l0aCBKSVQgc2FtcGxlczwvdGl0bGU+CisJPHBhcmE+CisJCUFmdGVyIHByb2ZpbGluZyBhIEphdmEgKG9yIG90aGVyIHN1cHBvcnRlZCBWTSkgYXBwbGljYXRpb24sIHRoZSBjb21tYW5kCisJCTxzY3JlZW4+PGNvbW1hbmQ+Im9wY29udHJvbCAtLWR1bXAiPC9jb21tYW5kPiA8L3NjcmVlbj4KKwkJZmx1c2hlcyB0aGUgc2FtcGxlIGJ1ZmZlcnMgYW5kIGNyZWF0ZXMgRUxGIGJpbmFyaWVzIGZyb20gdGhlCisJCWludGVybWVkaWF0ZSBmaWxlcyB0aGF0IHdlcmUgd3JpdHRlbiBieSB0aGUgYWdlbnQgbGlicmFyeS4KKwkJVGhlIEVMRiBiaW5hcmllcyBhcmUgbmFtZWQgPGZpbGVuYW1lPiZsdDt0Z2lkJmd0Oy5qbzwvZmlsZW5hbWU+LgorCQlXaXRoIHRoZSBzeW1ib2wgaW5mb3JtYXRpb24gc3RvcmVkIGluIHRoZXNlIEVMRiBmaWxlcywgaXQgaXMKKwkJcG9zc2libGUgdG8gbWFwIHNhbXBsZXMgdG8gdGhlIGFwcHJvcHJpYXRlIHN5bWJvbHMuCisJPC9wYXJhPgorCTxwYXJhPgorCQlUaGUgdXN1YWwgYW5hbHlzaXMgdG9vbHMgKDxjb21tYW5kPm9wcmVwb3J0PC9jb21tYW5kPiBhbmQvb3IgCisJCTxjb21tYW5kPm9wYW5ub3RhdGU8L2NvbW1hbmQ+KSBjYW4gbm93IGJlIHVzZWQKKwkJdG8gZ2V0IHN5bWJvbHMgYW5kIGFzc2VtYmx5IGNvZGUgZm9yIHRoZSBpbnN0cnVtZW50ZWQgVk0gcHJvY2Vzc2VzLgorCTwvcGFyYT4KKzxwYXJhPgorQmVsb3cgaXMgYW4gZXhhbXBsZSBvZiBhIHByb2ZpbGUgcmVwb3J0IG9mIGEgSmF2YSBhcHBsaWNhdGlvbiB0aGF0IGhhcyBiZWVuCitpbnN0cnVtZW50ZWQgd2l0aCB0aGUgcHJvdmlkZWQgYWdlbnQgbGlicmFyeS4KKzxzY3JlZW4+CiskIG9wcmVwb3J0IC1sIC91c3IvbGliL2p2bS9qcmUtMS41LjAtaWJtL2Jpbi9qYXZhCitDUFU6IENvcmUgU29sbyAvIER1bywgc3BlZWQgMjE2NyBNSHogKGVzdGltYXRlZCkKK0NvdW50ZWQgQ1BVX0NMS19VTkhBTFRFRCBldmVudHMgKFVuaGFsdGVkIGNsb2NrIGN5Y2xlcykgd2l0aCBhIHVuaXQgbWFzayBvZiAweDAwIChVbmhhbHRlZCBjb3JlIGN5Y2xlcykgY291bnQgMTAwMDAwCitzYW1wbGVzICAlICAgICAgICBpbWFnZSBuYW1lICAgICAgICAgICAgICAgc3ltYm9sIG5hbWUKKzE4NjAyMCAgIDUwLjA1MjMgIG5vLXZtbGludXggICAgICAgICAgICAgICBuby12bWxpbnV4ICAgICAgICAgICAgICAgKG5vIHN5bWJvbHMpCiszNDMzMyAgICAgOS4yMzgwICA3NjM1LmpvICAgICAgICAgICAgICAgICAgamF2YSAgICAgICAgICAgICAgICAgICAgIHZvaWQgdGVzdC5mMSgpCisxOTAyMiAgICAgNS4xMTgyICBsaWJjLTIuNS5zbyAgICAgICAgICAgICAgbGliYy0yLjUuc28gICAgICAgICAgICAgIF9JT19maWxlX3hzcHV0bkBAR0xJQkNfMi4xCisxODc2MiAgICAgNS4wNDgzICBsaWJjLTIuNS5zbyAgICAgICAgICAgICAgbGliYy0yLjUuc28gICAgICAgICAgICAgIHZmcHJpbnRmCisxNjQwOCAgICAgNC40MTQ5ICA3NjM1LmpvICAgICAgICAgICAgICAgICAgamF2YSAgICAgICAgICAgICAgICAgICAgIHZvaWQgdGVzdCRIZWxsb1RocmVhZC5ydW4oKQorMTYyNTAgICAgIDQuMzcyNCAgNzYzNS5qbyAgICAgICAgICAgICAgICAgIGphdmEgICAgICAgICAgICAgICAgICAgICB2b2lkIHRlc3QkdGVzdF8xLmYyKGludCkKKzE1MzAzICAgICA0LjExNzYgIDc2MzUuam8gICAgICAgICAgICAgICAgICBqYXZhICAgICAgICAgICAgICAgICAgICAgdm9pZCB0ZXN0LmYyKGludCwgaW50KQorMTMyNTIgICAgIDMuNTY1NyAgNzYzNS5qbyAgICAgICAgICAgICAgICAgIGphdmEgICAgICAgICAgICAgICAgICAgICB2b2lkIHRlc3QuZjIoaW50KQorNTE2NSAgICAgIDEuMzg5NyAgNzYzNS5qbyAgICAgICAgICAgICAgICAgIGphdmEgICAgICAgICAgICAgICAgICAgICB2b2lkIHRlc3QuZjQoKQorOTU1ICAgICAgIDAuMjU3MCAgNzYzNS5qbyAgICAgICAgICAgICAgICAgIGphdmEgICAgICAgICAgICAgICAgICAgICB2b2lkIHRlc3QkSGVsbG9UaHJlYWQucnVuKCl+CisKKzwvc2NyZWVuPgorPC9wYXJhPgorPG5vdGU+PHBhcmE+CisJICBEZXBlbmRpbmcgb24gdGhlIEpWTSB0aGF0IGlzIHVzZWQsIGNlcnRhaW4gb3B0aW9ucyBvZiBvcHJlcG9ydCBhbmQgb3Bhbm5vdGF0ZQorCSAgZG8gTk9UIHdvcmsgc2luY2UgdGhleSByZWx5IG9uIGRlYnVnIGluZm9ybWF0aW9uIChlLmcuIHNvdXJjZSBjb2RlIGxpbmUgbnVtYmVyKQorCSAgdGhhdCBpcyBub3QgYWx3YXlzIGF2YWlsYWJsZS4gVGhlIFN1biBKVk0gZG9lcyBwcm92aWRlIHRoZSBuZWNlc3NhcnkgZGVidWcKKwkgIGluZm9ybWF0aW9uIHZpYSB0aGUgSlZNVElbUEldIGludGVyZmFjZSwKKwkgIGJ1dCBvdGhlciBKVk1zIGRvIG5vdC4KKyAgPC9wYXJhPjwvbm90ZT4KKwk8cGFyYT4KKwkJQXMgeW91IGNhbiBzZWUgaW4gdGhlIG9wcmVwb3J0IG91dHB1dCwgdGhlIEpJVCBzdXBwb3J0IGFnZW50IGZvciBKYXZhCisJCWdlbmVyYXRlcyBzeW1ib2xzIHRvIGluY2x1ZGUgdGhlIGNsYXNzIGFuZCBtZXRob2Qgc2lnbmF0dXJlLgorCQlBIHN5bWJvbCB3aXRoIHRoZSBzdWZmaXggJnRpbGRlOyZsdDtuJmd0OyAoZS5nLgorCQk8Y29kZT52b2lkIHRlc3QkSGVsbG9UaHJlYWQucnVuKCkmdGlsZGU7MTwvY29kZT4pIG1lYW5zIHRoYXQgdGhpcyBpcworCQl0aGUgJmx0O24mZ3Q7dGggb2NjdXJyZW5jZSBvZiB0aGUgaWRlbnRpY2FsIG5hbWUuIFRoaXMgaGFwcGVucyBpZiBhIG1ldGhvZCBpcyByZS1KSVRlZC4KKwkJQSBzeW1ib2wgd2l0aCB0aGUgc3VmZml4ICUmbHQ7biZndDssIG1lYW5zIHRoYXQgdGhlIGFkZHJlc3Mgc3BhY2Ugb2YgdGhpcyBzeW1ib2wKKwkJd2FzIHJldXNlZCBkdXJpbmcgdGhlIHNhbXBsZSBzZXNzaW9uIChzZWUgPHhyZWYgbGlua2VuZD0ib3ZlcmxhcHBpbmctc3ltYm9scyIgLz4pLgorCQlUaGUgdmFsdWUgJmx0O24mZ3Q7IGlzIHRoZSBwZXJjZW50YWdlIG9mIHRpbWUgdGhhdCB0aGlzIHN5bWJvbC9jb2RlIHdhcyBwcmVzZW50IGluCisJCXJlbGF0aW9uIHRvIHRoZSB0b3RhbCBsaWZldGltZSBvZiBhbGwgb3ZlcmxhcHBpbmcgb3RoZXIgc3ltYm9scy4gQSBzeW1ib2wgb2YgdGhlIGZvcm0KKwkJPGNvZGU+Jmx0O3JldHVybl92YWwmZ3Q7ICZsdDtjbGFzc19uYW1lJmd0OyQmbHQ7bWV0aG9kX3NpZyZndDs8L2NvZGU+IGRlbm90ZXMgYW4KKwkJaW5uZXIgY2xhc3MuCisJPC9wYXJhPgorPC9zZWN0MT4KKworPHNlY3QxIGlkPSJvcGdwcm9mIj4KKzx0aXRsZT48Y29tbWFuZD5ncHJvZjwvY29tbWFuZD4tY29tcGF0aWJsZSBvdXRwdXQgKDxjb21tYW5kPm9wZ3Byb2Y8L2NvbW1hbmQ+KTwvdGl0bGU+Cis8cGFyYT4KK0lmIHlvdSdyZSBmYW1pbGlhciB3aXRoIHRoZSBvdXRwdXQgcHJvZHVjZWQgYnkgPGNvbW1hbmQ+R05VIGdwcm9mPC9jb21tYW5kPiwKK3lvdSBtYXkgZmluZCA8Y29tbWFuZD5vcGdwcm9mPC9jb21tYW5kPiB1c2VmdWwuIEl0IHRha2VzIGEgc2luZ2xlIGJpbmFyeQorYXMgYW4gYXJndW1lbnQsIGFuZCBwcm9kdWNlcyBhIDxmaWxlbmFtZT5nbW9uLm91dDwvZmlsZW5hbWU+IGZpbGUgZm9yIHVzZQord2l0aCA8Y29tbWFuZD5ncHJvZiAtcDwvY29tbWFuZD4uIElmIGNhbGwtZ3JhcGggcHJvZmlsaW5nIGlzIGVuYWJsZWQsCit0aGVuIHRoaXMgaXMgYWxzbyBpbmNsdWRlZC4KKzwvcGFyYT4KKzxzY3JlZW4+CiskIG9wZ3Byb2YgYHdoaWNoIG9wcm9maWxlZGAgIyBnZW5lcmF0ZXMgZ21vbi5vdXQgZmlsZQorJCBncHJvZiAtcCBgd2hpY2ggb3Byb2ZpbGVkYCB8IGhlYWQKK0ZsYXQgcHJvZmlsZToKKworRWFjaCBzYW1wbGUgY291bnRzIGFzIDEgc2FtcGxlcy4KKyAgJSAgIGN1bXVsYXRpdmUgICBzZWxmICAgICAgICAgICAgICBzZWxmICAgICB0b3RhbAorIHRpbWUgICBzYW1wbGVzICAgc2FtcGxlcyAgICBjYWxscyAgVDEvY2FsbCAgVDEvY2FsbCAgbmFtZQorIDMzLjEzIDIwNjIzNy4wMCAyMDYyMzcuMDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9kYl9pbnNlcnQKKyAyMi42NyAzNDczODYuMDAgMTQxMTQ5LjAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3BfYnVmZmVyX3ZhbHVlCisgIDkuNTYgNDA2ODgxLjAwIDU5NDk1LjAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGRfcHV0X3NhbXBsZQorICA3LjM0IDQ1MjU5OS4wMCA0NTcxOC4wMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BkX2ZpbmRfaW1hZ2UKKyAgNy4xOSA0OTczMjcuMDAgNDQ3MjguMDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZF9wcm9jZXNzX3NhbXBsZXMKKzwvc2NyZWVuPgorCis8c2VjdDIgaWQ9Im9wZ3Byb2YtZGV0YWlscyI+Cis8dGl0bGU+VXNhZ2Ugb2YgPGNvbW1hbmQ+b3BncHJvZjwvY29tbWFuZD48L3RpdGxlPgorCis8dmFyaWFibGVsaXN0PgorPHZhcmxpc3RlbnRyeT48dGVybT48b3B0aW9uPi0taGVscCAvIC0/IC8gLS11c2FnZTwvb3B0aW9uPjwvdGVybT48bGlzdGl0ZW0+PHBhcmE+CitTaG93IGhlbHAgbWVzc2FnZS4KKzwvcGFyYT48L2xpc3RpdGVtPjwvdmFybGlzdGVudHJ5PgorPHZhcmxpc3RlbnRyeT48dGVybT48b3B0aW9uPi0taW1hZ2UtcGF0aCAvIC1wIFtwYXRoc108L29wdGlvbj48L3Rlcm0+PGxpc3RpdGVtPjxwYXJhPgorQ29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgYWRkaXRpb25hbCBwYXRocyB0byBzZWFyY2ggZm9yIGJpbmFyaWVzLgorVGhpcyBpcyBuZWVkZWQgdG8gZmluZCBtb2R1bGVzIGluIGtlcm5lbHMgMi42IGFuZCB1cHdhcmRzLgorPC9wYXJhPjwvbGlzdGl0ZW0+PC92YXJsaXN0ZW50cnk+Cis8dmFybGlzdGVudHJ5Pjx0ZXJtPjxvcHRpb24+LS1yb290IC8gLVIgW3BhdGhdPC9vcHRpb24+PC90ZXJtPjxsaXN0aXRlbT48cGFyYT4KK0EgcGF0aCB0byBhIGZpbGVzeXN0ZW0gdG8gc2VhcmNoIGZvciBhZGRpdGlvbmFsIGJpbmFyaWVzLgorPC9wYXJhPjwvbGlzdGl0ZW0+PC92YXJsaXN0ZW50cnk+Cis8dmFybGlzdGVudHJ5Pjx0ZXJtPjxvcHRpb24+LS1vdXRwdXQtZmlsZW5hbWUgLyAtbyBbZmlsZV08L29wdGlvbj48L3Rlcm0+PGxpc3RpdGVtPjxwYXJhPgorT3V0cHV0IHRvIHRoZSBnaXZlbiBmaWxlIGluc3RlYWQgb2YgdGhlIGRlZmF1bHQsIGdtb24ub3V0Cis8L3BhcmE+PC9saXN0aXRlbT48L3Zhcmxpc3RlbnRyeT4KKzx2YXJsaXN0ZW50cnk+PHRlcm0+PG9wdGlvbj4tLXRocmVzaG9sZCAvIC10IFtwZXJjZW50YWdlXTwvb3B0aW9uPjwvdGVybT48bGlzdGl0ZW0+PHBhcmE+CitPbmx5IG91dHB1dCBkYXRhIGZvciBzeW1ib2xzIHRoYXQgaGF2ZSBtb3JlIHRoYW4gdGhlIGdpdmVuIHBlcmNlbnRhZ2UKK29mIHRvdGFsIHNhbXBsZXMuCis8L3BhcmE+PC9saXN0aXRlbT48L3Zhcmxpc3RlbnRyeT4KKzx2YXJsaXN0ZW50cnk+PHRlcm0+PG9wdGlvbj4tLXZlcmJvc2UgLyAtViBbb3B0aW9uc108L29wdGlvbj48L3Rlcm0+PGxpc3RpdGVtPjxwYXJhPgorR2l2ZSB2ZXJib3NlIGRlYnVnZ2luZyBvdXRwdXQuCis8L3BhcmE+PC9saXN0aXRlbT48L3Zhcmxpc3RlbnRyeT4KKzx2YXJsaXN0ZW50cnk+PHRlcm0+PG9wdGlvbj4tLXZlcnNpb24gLyAtdjwvb3B0aW9uPjwvdGVybT48bGlzdGl0ZW0+PHBhcmE+CitTaG93IHZlcnNpb24uCis8L3BhcmE+PC9saXN0aXRlbT48L3Zhcmxpc3RlbnRyeT4KKzwvdmFyaWFibGVsaXN0PgorCis8L3NlY3QyPiA8IS0tIG9wZ3Byb2YtZGV0YWlscyAtLT4KKworPC9zZWN0MT4gPCEtLSBvcGdwcm9mIC0tPgorCis8c2VjdDEgaWQ9Im9wYXJjaGl2ZSI+Cis8dGl0bGU+QXJjaGl2aW5nIG1lYXN1cmVtZW50cyAoPGNvbW1hbmQ+b3BhcmNoaXZlPC9jb21tYW5kPik8L3RpdGxlPgorPHBhcmE+CisJVGhlIDxjb21tYW5kPm9wYXJjaGl2ZTwvY29tbWFuZD4gdXRpbGl0eSBnZW5lcmF0ZXMgYSBkaXJlY3RvcnkgcG9wdWxhdGVkCisJd2l0aCBleGVjdXRhYmxlLCBkZWJ1ZywgYW5kIG9wcm9maWxlIHNhbXBsZSBmaWxlcy4gVGhpcyBkaXJlY3RvcnkgY2FuIGJlCisJbW92ZWQgdG8gYW5vdGhlciBtYWNoaW5lIHZpYSA8Y29tbWFuZD50YXI8L2NvbW1hbmQ+IGFuZCBhbmFseXplZCB3aXRob3V0CisJZnVydGhlciB1c2Ugb2YgdGhlIGRhdGEgY29sbGVjdGlvbiBtYWNoaW5lLgorPC9wYXJhPgorCis8cGFyYT4KKwlUaGUgZm9sbG93aW5nIGNvbW1hbmQgd291bGQgY29sbGVjdCB0aGUgc2FtcGxlIGZpbGVzLCB0aGUgZXhlY3V0YWJsZXMKKwlhc3NvY2lhdGVkIHdpdGggdGhlIHNhbXBsZSBmaWxlcywgYW5kIHRoZSBkZWJ1Z2luZm8gZmlsZXMgYXNzb2NpYXRlZAorCXdpdGggdGhlIGV4ZWN1dGFibGVzIGFuZCBjb3B5IHRoZW0gaW50bworCTxmaWxlbmFtZT4vdG1wL2N1cnJlbnRfZGF0YTwvZmlsZW5hbWU+OgorPC9wYXJhPgorCis8c2NyZWVuPgorIyBvcGFyY2hpdmUgLW8gL3RtcC9jdXJyZW50X2RhdGEKKzwvc2NyZWVuPgorCis8c2VjdDIgaWQ9Im9wYXJjaGl2ZS1kZXRhaWxzIj4KKzx0aXRsZT5Vc2FnZSBvZiA8Y29tbWFuZD5vcGFyY2hpdmU8L2NvbW1hbmQ+PC90aXRsZT4KKworPHZhcmlhYmxlbGlzdD4KKzx2YXJsaXN0ZW50cnk+PHRlcm0+PG9wdGlvbj4tLWhlbHAgLyAtPyAvIC0tdXNhZ2U8L29wdGlvbj48L3Rlcm0+PGxpc3RpdGVtPjxwYXJhPgorU2hvdyBoZWxwIG1lc3NhZ2UuCis8L3BhcmE+PC9saXN0aXRlbT48L3Zhcmxpc3RlbnRyeT4KKzx2YXJsaXN0ZW50cnk+PHRlcm0+PG9wdGlvbj4tLWV4Y2x1ZGUtZGVwZW5kZW50IC8gLXg8L29wdGlvbj48L3Rlcm0+PGxpc3RpdGVtPjxwYXJhPgorRG8gbm90IGluY2x1ZGUgYXBwbGljYXRpb24tc3BlY2lmaWMgaW1hZ2VzIGZvciBsaWJyYXJpZXMsIGtlcm5lbCBtb2R1bGVzCithbmQgdGhlIGtlcm5lbC4gVGhpcyBvcHRpb24gb25seSBtYWtlcyBzZW5zZSBpZiB0aGUgcHJvZmlsZSBzZXNzaW9uCit1c2VkIC0tc2VwYXJhdGUuCis8L3BhcmE+PC9saXN0aXRlbT48L3Zhcmxpc3RlbnRyeT4KKzx2YXJsaXN0ZW50cnk+PHRlcm0+PG9wdGlvbj4tLWltYWdlLXBhdGggLyAtcCBbcGF0aHNdPC9vcHRpb24+PC90ZXJtPjxsaXN0aXRlbT48cGFyYT4KK0NvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGFkZGl0aW9uYWwgcGF0aHMgdG8gc2VhcmNoIGZvciBiaW5hcmllcy4KK1RoaXMgaXMgbmVlZGVkIHRvIGZpbmQgbW9kdWxlcyBpbiBrZXJuZWxzIDIuNiBhbmQgdXB3YXJkcy4KKzwvcGFyYT48L2xpc3RpdGVtPjwvdmFybGlzdGVudHJ5PgorPHZhcmxpc3RlbnRyeT48dGVybT48b3B0aW9uPi0tcm9vdCAvIC1SIFtwYXRoXTwvb3B0aW9uPjwvdGVybT48bGlzdGl0ZW0+PHBhcmE+CitBIHBhdGggdG8gYSBmaWxlc3lzdGVtIHRvIHNlYXJjaCBmb3IgYWRkaXRpb25hbCBiaW5hcmllcy4KKzwvcGFyYT48L2xpc3RpdGVtPjwvdmFybGlzdGVudHJ5PgorPHZhcmxpc3RlbnRyeT48dGVybT48b3B0aW9uPi0tb3V0cHV0LWRpcmVjdG9yeSAvIC1vIFtkaXJlY3RvcnldPC9vcHRpb24+PC90ZXJtPjxsaXN0aXRlbT48cGFyYT4KK091dHB1dCB0byB0aGUgZ2l2ZW4gZGlyZWN0b3J5LiBUaGVyZSBpcyBubyBkZWZhdWx0LiBUaGlzIG11c3QgYmUgc3BlY2lmaWVkLgorPC9wYXJhPjwvbGlzdGl0ZW0+PC92YXJsaXN0ZW50cnk+Cis8dmFybGlzdGVudHJ5Pjx0ZXJtPjxvcHRpb24+LS1saXN0LWZpbGVzIC8gLWw8L29wdGlvbj48L3Rlcm0+PGxpc3RpdGVtPjxwYXJhPgorT25seSBsaXN0IHRoZSBmaWxlcyB0aGF0IHdvdWxkIGJlIGFyY2hpdmVkLCBkb24ndCBjb3B5IHRoZW0uCis8L3BhcmE+PC9saXN0aXRlbT48L3Zhcmxpc3RlbnRyeT4KKzx2YXJsaXN0ZW50cnk+PHRlcm0+PG9wdGlvbj4tLXZlcmJvc2UgLyAtViBbb3B0aW9uc108L29wdGlvbj48L3Rlcm0+PGxpc3RpdGVtPjxwYXJhPgorR2l2ZSB2ZXJib3NlIGRlYnVnZ2luZyBvdXRwdXQuCis8L3BhcmE+PC9saXN0aXRlbT48L3Zhcmxpc3RlbnRyeT4KKzx2YXJsaXN0ZW50cnk+PHRlcm0+PG9wdGlvbj4tLXZlcnNpb24gLyAtdjwvb3B0aW9uPjwvdGVybT48bGlzdGl0ZW0+PHBhcmE+CitTaG93IHZlcnNpb24uCis8L3BhcmE+PC9saXN0aXRlbT48L3Zhcmxpc3RlbnRyeT4KKzwvdmFyaWFibGVsaXN0PgorCis8L3NlY3QyPiA8IS0tIG9wYXJjaGl2ZS1kZXRhaWxzIC0tPgorCis8L3NlY3QxPiA8IS0tIG9wYXJjaGl2ZSAtLT4KKworPHNlY3QxIGlkPSJvcGltcG9ydCI+Cis8dGl0bGU+Q29udmVydGluZyBzYW1wbGUgZGF0YWJhc2UgZmlsZXMgKDxjb21tYW5kPm9waW1wb3J0PC9jb21tYW5kPik8L3RpdGxlPgorPHBhcmE+CisJVGhpcyB1dGlsaXR5IGNvbnZlcnRzIHNhbXBsZSBkYXRhYmFzZSBmaWxlcyBmcm9tIGEgZm9yZWlnbiBiaW5hcnkgZm9ybWF0IChhYmkpIHRvCisJdGhlIG5hdGl2ZSBmb3JtYXQuIFRoaXMgaXMgdXNlZnVsIG9ubHkgd2hlbiBtb3Zpbmcgc2FtcGxlIGZpbGVzIGJldHdlZW4gaG9zdHMsCisJZm9yIGFuYWx5c2lzIG9uIHBsYXRmb3JtcyBvdGhlciB0aGFuIHRoZSBvbmUgdXNlZCBmb3IgY29sbGVjdGlvbi4gVGhlIGFiaSBmb3JtYXQKKwlvZiB0aGUgZmlsZSB0byBiZSBpbXBvcnRlZCBpcyBkZXNjcmliZWQgaW4gYSB0ZXh0IGZpbGUgbG9jYXRlZCBpbiA8ZmlsZW5hbWU+JFNFU1NJT05fRElSL2FiaTwvZmlsZW5hbWU+LgorPC9wYXJhPgorCis8cGFyYT4KKwlUaGUgZm9sbG93aW5nIGNvbW1hbmQgd291bGQgY29udmVydCB0aGUgaW5wdXQgc2FtcGxlcyBmaWxlcyB0byB0aGUKKwlvdXRwdXQgc2FtcGxlcyBmaWxlcyB1c2luZyB0aGUgZ2l2ZW4gYWJpIGZpbGUgYXMgYSBiaW5hcnkgZGVzY3JpcHRpb24KKwlvZiB0aGUgaW5wdXQgZmlsZSBhbmQgdGhlIGN1cmVudCBwbGF0Zm9ybSBhYmkgYXMgYSBiaW5hcnkgZGVzY3JpcHRpb24KKwlvZiB0aGUgb3V0cHV0IGZpbGUuCis8L3BhcmE+CisKKzxzY3JlZW4+CisjIG9waW1wb3J0IC1hIC92YXIvbGliL29wcm9maWxlL2FiaSAtbyAvdG1wL2N1cnJlbnQvLi4uL0dMT0JBTF9QT1dFUl9FVkVOVFMuMjAwMDAwLjEuYWxsLmFsbC5hbGwgL3Zhci9saWIvLi4uL21wcmltZS9HTE9CQUxfUE9XRVJfRVZFTlRTLjIwMDAwMC4xLmFsbC5hbGwuYWxsCis8L3NjcmVlbj4KKworPHNlY3QyIGlkPSJvcGltcG9ydC1kZXRhaWxzIj4KKzx0aXRsZT5Vc2FnZSBvZiA8Y29tbWFuZD5vcGltcG9ydDwvY29tbWFuZD48L3RpdGxlPgorCis8dmFyaWFibGVsaXN0PgorPHZhcmxpc3RlbnRyeT48dGVybT48b3B0aW9uPi0taGVscCAvIC0/IC8gLS11c2FnZTwvb3B0aW9uPjwvdGVybT48bGlzdGl0ZW0+PHBhcmE+CitTaG93IGhlbHAgbWVzc2FnZS4KKzwvcGFyYT48L2xpc3RpdGVtPjwvdmFybGlzdGVudHJ5PgorPHZhcmxpc3RlbnRyeT48dGVybT48b3B0aW9uPi0tYWJpIC8gLWEgW2ZpbGVuYW1lXTwvb3B0aW9uPjwvdGVybT48bGlzdGl0ZW0+PHBhcmE+CitJbnB1dCBhYmkgZmlsZSBkZXNjcmlwdGlvbiBsb2NhdGlvbi4KKzwvcGFyYT48L2xpc3RpdGVtPjwvdmFybGlzdGVudHJ5PgorPHZhcmxpc3RlbnRyeT48dGVybT48b3B0aW9uPi0tZm9yY2UgLyAtZjwvb3B0aW9uPjwvdGVybT48bGlzdGl0ZW0+PHBhcmE+CitGb3JjZSBjb252ZXJzaW9uIGV2ZW4gaWYgdGhlIGlucHV0IGFuZCBvdXRwdXQgYWJpIGFyZSBpZGVudGljYWwuCis8L3BhcmE+PC9saXN0aXRlbT48L3Zhcmxpc3RlbnRyeT4KKzx2YXJsaXN0ZW50cnk+PHRlcm0+PG9wdGlvbj4tLW91dHB1dCAvIC1vIFtmaWxlbmFtZV08L29wdGlvbj48L3Rlcm0+PGxpc3RpdGVtPjxwYXJhPgorU3BlY2lmeSB0aGUgb3V0cHV0IGZpbGVuYW1lLiBJZiB0aGUgb3V0cHV0IGZpbGUgYWxyZWFkeSBleGlzdHMsIHRoZSBmaWxlIGlzCitub3Qgb3ZlcndyaXR0ZW4gYnV0IGRhdGEgYXJlIGFjY3VtdWxhdGVkIGluLiBTYW1wbGUgZmlsZW5hbWUgYXJlIGluZm9ybWF0aXZlCitmb3IgcG9zdCBwcm9maWxlIHRvb2xzIGFuZCBtdXN0IGJlIGtlcHQgaWRlbnRpY2FsLCBpbiBvdGhlciB3b3JkIHRoZSBwYXRobmFtZQorZnJvbSB0aGUgZmlyc3QgcGF0aCBjb21wb25lbnQgY29udGFpbmluZyBhICd7JyBtdXN0IGJlIGtlcHQgYXMgaXQgaW4gdGhlCitvdXRwdXQgZmlsZW5hbWUuCis8L3BhcmE+PC9saXN0aXRlbT48L3Zhcmxpc3RlbnRyeT4KKzx2YXJsaXN0ZW50cnk+PHRlcm0+PG9wdGlvbj4tLXZlcmJvc2UgLyAtVjwvb3B0aW9uPjwvdGVybT48bGlzdGl0ZW0+PHBhcmE+CitHaXZlIHZlcmJvc2UgZGVidWdnaW5nIG91dHB1dC4KKzwvcGFyYT48L2xpc3RpdGVtPjwvdmFybGlzdGVudHJ5PgorPHZhcmxpc3RlbnRyeT48dGVybT48b3B0aW9uPi0tdmVyc2lvbiAvIC12PC9vcHRpb24+PC90ZXJtPjxsaXN0aXRlbT48cGFyYT4KK1Nob3cgdmVyc2lvbi4KKzwvcGFyYT48L2xpc3RpdGVtPjwvdmFybGlzdGVudHJ5PgorPC92YXJpYWJsZWxpc3Q+CisKKzwvc2VjdDI+IDwhLS0gb3BpbXBvcnQtZGV0YWlscyAtLT4KKworPC9zZWN0MT4gPCEtLSBvcGltcG9ydCAtLT4KKworPC9jaGFwdGVyPgorCis8Y2hhcHRlciBpZD0iaW50ZXJwcmV0aW5nIj4KKzx0aXRsZT5JbnRlcnByZXRpbmcgcHJvZmlsaW5nIHJlc3VsdHM8L3RpdGxlPgorPHBhcmE+CitUaGUgc3RhbmRhcmQgY2F2ZWF0cyBvZiBwcm9maWxpbmcgYXBwbHkgaW4gaW50ZXJwcmV0aW5nIHRoZSByZXN1bHRzIGZyb20gT1Byb2ZpbGU6Citwcm9maWxlIHJlYWxpc3RpYyBzaXR1YXRpb25zLCBwcm9maWxlIGRpZmZlcmVudCBzY2VuYXJpb3MsIHByb2ZpbGUKK2ZvciBhcyBsb25nIGFzIGEgdGltZSBhcyBwb3NzaWJsZSwgYXZvaWQgc3lzdGVtLXNwZWNpZmljIGFydGlmYWN0cywgZG9uJ3QgdHJ1c3QKK3RoZSBwcm9maWxlIGRhdGEgdG9vIG11Y2guIEFsc28gYmVhciBpbiBtaW5kIHRoZSBjb21tZW50cyBvbiB0aGUgcGVyZm9ybWFuY2UKK2NvdW50ZXJzIGFib3ZlIC0geW91IDxlbXBoYXNpcz5jYW5ub3Q8L2VtcGhhc2lzPiByZWx5IG9uIHRvdGFsbHkgYWNjdXJhdGUKK2luc3RydWN0aW9uLWxldmVsIHByb2ZpbGluZy4gIEhvd2V2ZXIsIGZvciBhbG1vc3QgYWxsIGNpcmN1bXN0YW5jZXMgdGhlIGRhdGEKK2NhbiBiZSB1c2VmdWwuIElkZWFsbHkgYSB1dGlsaXR5IHN1Y2ggYXMgSW50ZWwncyBWVFVORSB3b3VsZCBiZSBhdmFpbGFibGUgdG8KK2FsbG93IGNhcmVmdWwgaW5zdHJ1Y3Rpb24tbGV2ZWwgYW5hbHlzaXM7IGdvIGhhc3NsZSBJbnRlbCBmb3IgdGhpcywgbm90IG1lIDspCis8L3BhcmE+Cis8c2VjdDEgaWQ9ImlycS1sYXRlbmN5Ij4KKzx0aXRsZT5Qcm9maWxpbmcgaW50ZXJydXB0IGxhdGVuY3k8L3RpdGxlPgorPHBhcmE+CitUaGlzIGlzIGFuIGV4YW1wbGUgb2YgaG93IHRoZSBsYXRlbmN5IG9mIGRlbGl2ZXJ5IG9mIHByb2ZpbGluZyBpbnRlcnJ1cHRzCitjYW4gaW1wYWN0IHRoZSByZWxpYWJpbGl0eSBvZiB0aGUgcHJvZmlsaW5nIGRhdGEuIFRoaXMgaXMgcHJldHR5IG11Y2ggYSAKK3dvcnN0LWNhc2Utc2NlbmFyaW8gZXhhbXBsZTogdGhlc2UgcHJvYmxlbXMgYXJlIGZhaXJseSByYXJlLgorPC9wYXJhPgorPHNjcmVlbj4KK2RvdWJsZSBmdW4oZG91YmxlIGEsIGRvdWJsZSBiLCBkb3VibGUgYykKK3sKKyBkb3VibGUgcmVzdWx0ID0gMDsKKyBmb3IgKGludCBpID0gMCA7IGkgJmx0OyAxMDAwMDsgKytpKSB7CisgIHJlc3VsdCArPSBhOworICByZXN1bHQgKj0gYjsKKyAgcmVzdWx0IC89IGM7CisgfQorIHJldHVybiByZXN1bHQ7Cit9Cis8L3NjcmVlbj4KKzxwYXJhPgorSGVyZSB0aGUgbGFzdCBpbnN0cnVjdGlvbiBvZiB0aGUgbG9vcCBpcyB2ZXJ5IGNvc3RseSwgYW5kIHlvdSB3b3VsZCBleHBlY3QgdGhlIHJlc3VsdAorcmVmbGVjdGluZyB0aGF0IC0gYnV0IChjdXR0aW5nIHRoZSBpbnN0cnVjdGlvbnMgaW5zaWRlIHRoZSBsb29wKToKKzwvcGFyYT4KKzxzY3JlZW4+CiskIG9wYW5ub3RhdGUgLWEgLXQgMTAgLi9hLm91dAorCisgICAgIDg4IDE1LjM4JSA6IDgwNDgzMzc6ICAgICAgIGZhZGQgICAlc3QoMyksJXN0CisgICAgIDQ4IDguMzkxJSA6IDgwNDgzMzk6ICAgICAgIGZtdWwgICAlc3QoMiksJXN0CisgICAgIDY4IDExLjg4JSA6IDgwNDgzM2I6ICAgICAgIGZkaXYgICAlc3QoMSksJXN0CisgICAgMzY4IDY0LjMzJSA6IDgwNDgzM2Q6ICAgICAgIGluYyAgICAlZWF4CisgICAgICAgICAgICAgICA6IDgwNDgzM2U6ICAgICAgIGNtcCAgICAkMHgyNzBmLCVlYXgKKyAgICAgICAgICAgICAgIDogODA0ODM0MzogICAgICAgamxlICAgIDgwNDgzMzcKKzwvc2NyZWVuPgorPHBhcmE+CitUaGUgcHJvYmxlbSBjb21lcyBmcm9tIHRoZSB4ODYgaGFyZHdhcmU7IHdoZW4gdGhlIGNvdW50ZXIgb3ZlcmZsb3dzIHRoZSBJUlEKK2lzIGFzc2VydGVkIGJ1dCB0aGUgaGFyZHdhcmUgaGFzIGZlYXR1cmVzIHRoYXQgY2FuIGRlbGF5IHRoZSBOTUkgaW50ZXJydXB0OgoreDg2IGhhcmR3YXJlIGlzIHN5bmNocm9ub3VzIChpLmUuIGNhbm5vdCBpbnRlcnJ1cHQgZHVyaW5nIGFuIGluc3RydWN0aW9uKTsKK3RoZXJlIGlzIGFsc28gYSBsYXRlbmN5IHdoZW4gdGhlIElSUSBpcyBhc3NlcnRlZCwgYW5kIHRoZSBtdWx0aXBsZQorZXhlY3V0aW9uIHVuaXRzIGFuZCB0aGUgb3V0LW9mLW9yZGVyIG1vZGVsIG9mIG1vZGVybiB4ODYgQ1BVcyBhbHNvIGNhdXNlcworcHJvYmxlbXMuIFRoaXMgaXMgdGhlIHNhbWUgZnVuY3Rpb24sIHdpdGggYW5ub3RhdGlvbiA6Cis8L3BhcmE+Cis8c2NyZWVuPgorJCBvcGFubm90YXRlIC1zIC10IDEwIC4vYS5vdXQKKworICAgICAgICAgICAgICAgOmRvdWJsZSBmdW4oZG91YmxlIGEsIGRvdWJsZSBiLCBkb3VibGUgYykKKyAgICAgICAgICAgICAgIDp7IC8qIF9aM2Z1bmRkZCB0b3RhbDogICAgIDU3MiAxMDAuMCUgKi8KKyAgICAgICAgICAgICAgIDogZG91YmxlIHJlc3VsdCA9IDA7CisgICAgMzY4IDY0LjMzJSA6IGZvciAoaW50IGkgPSAwIDsgaSAmbHQ7IDEwMDAwOyArK2kpIHsKKyAgICAgODggMTUuMzglIDogIHJlc3VsdCArPSBhOworICAgICA0OCA4LjM5MSUgOiAgcmVzdWx0ICo9IGI7CisgICAgIDY4IDExLjg4JSA6ICByZXN1bHQgLz0gYzsKKyAgICAgICAgICAgICAgIDogfQorICAgICAgICAgICAgICAgOiByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgICAgOn0KKzwvc2NyZWVuPgorPHBhcmE+CitUaGUgY29uY2x1c2lvbjogZG9uJ3QgdHJ1c3Qgc2FtcGxlcyBjb21pbmcgYXQgdGhlIGVuZCBvZiBhIGxvb3AsCitwYXJ0aWN1bGFybHkgaWYgdGhlIGxhc3QgaW5zdHJ1Y3Rpb24gZ2VuZXJhdGVkIGJ5IHRoZSBjb21waWxlciBpcyBjb3N0bHkuIFRoaXMKK2Nhc2UgY2FuIGFsc28gb2NjdXIgZm9yIGJyYW5jaGVzLiBBbHdheXMgYmVhciBpbiBtaW5kIHRoYXQgc2FtcGxlcworY2FuIGJlIGRlbGF5ZWQgYnkgYSBmZXcgY3ljbGVzIGZyb20gaXRzIHJlYWwgcG9zaXRpb24uIFRoYXQncyBhIGhhcmR3YXJlCitwcm9ibGVtIGFuZCBPUHJvZmlsZSBjYW4gZG8gbm90aGluZyBhYm91dCBpdC4KKzwvcGFyYT4KKzwvc2VjdDE+Cis8c2VjdDEgaWQ9Imtlcm5lbC1wcm9maWxpbmciPgorPHRpdGxlPktlcm5lbCBwcm9maWxpbmc8L3RpdGxlPgorPHNlY3QyIGlkPSJpcnEtbWFza2luZyI+Cis8dGl0bGU+SW50ZXJydXB0IG1hc2tpbmc8L3RpdGxlPgorPHBhcmE+CitPUHJvZmlsZSB1c2VzIG5vbi1tYXNrYWJsZSBpbnRlcnJ1cHRzIChOTUkpIG9uIHRoZSBQNiBnZW5lcmF0aW9uLCBQZW50aXVtIDQsCitBdGhsb24sIE9wdGVyb24sIFBoZW5vbSwgYW5kIFR1cmlvbiBwcm9jZXNzb3JzLiBUaGVzZSBpbnRlcnJ1cHRzIGNhbiBvY2N1ciBldmVuIGluIHNlY3Rpb24gb2YgdGhlCitMaW51eCB3aGVyZSBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCwgYWxsb3dpbmcgY29sbGVjdGlvbiBvZiBzYW1wbGVzIGluIHZpcnR1YWxseQorYWxsIGV4ZWN1dGFibGUgY29kZS4gIFRoZSBSVEMsIHRpbWVyIGludGVycnVwdCBtb2RlLCBhbmQgSXRhbml1bSAyIGNvbGxlY3Rpb24gbWVjaGFuaXNtcwordXNlIG1hc2thYmxlIGludGVycnVwdHMuIFRodXMsIHRoZSBSVEMgYW5kIEl0YW5pdW0gMiBkYXRhIGNvbGxlY3Rpb24gbWVjaGFuaXNtIGhhdmUgInNhbXBsZQorc2hhZG93cyIsIG9yIGJsaW5kIHNwb3RzOiByZWdpb25zIHdoZXJlIG5vIHNhbXBsZXMgd2lsbCBiZSBjb2xsZWN0ZWQuIFR5cGljYWxseSwgdGhlIHNhbXBsZXMKK3dpbGwgYmUgYXR0cmlidXRlZCB0byB0aGUgY29kZSBpbW1lZGlhdGVseSBhZnRlciB0aGUgaW50ZXJydXB0cyBhcmUgcmUtZW5hYmxlZC4KKzwvcGFyYT4KKzwvc2VjdDI+Cis8c2VjdDIgaWQ9ImlkbGUiPgorPHRpdGxlPklkbGUgdGltZTwvdGl0bGU+Cis8cGFyYT4KK1lvdXIga2VybmVsIGlzIGxpa2VseSB0byBzdXBwb3J0IGhhbHRpbmcgdGhlIHByb2Nlc3NvciB3aGVuIGEgQ1BVIGlzIGlkbGUuIEFzCit0aGUgdHlwaWNhbCBoYXJkd2FyZSBldmVudHMgbGlrZSA8Y29uc3RhbnQ+Q1BVX0NMS19VTkhBTFRFRDwvY29uc3RhbnQ+IGRvIG5vdAorY291bnQgd2hlbiB0aGUgQ1BVIGlzIGhhbHRlZCwgdGhlIGtlcm5lbCBwcm9maWxlIHdpbGwgbm90IHJlZmxlY3QgdGhlIGFjdHVhbAorYW1vdW50IG9mIHRpbWUgc3BlbnQgaWRsZS4gWW91IGNhbiBjaGFuZ2UgdGhpcyBiZWhhdmlvdXIgYnkgYm9vdGluZyB3aXRoCit0aGUgPG9wdGlvbj5pZGxlPXBvbGw8L29wdGlvbj4gb3B0aW9uLCB3aGljaCB1c2VzIGEgZGlmZmVyZW50IGlkbGUgcm91dGluZS4gVGhpcword2lsbCBhcHBlYXIgYXMgPGZ1bmN0aW9uPnBvbGxfaWRsZSgpPC9mdW5jdGlvbj4gaW4geW91ciBrZXJuZWwgcHJvZmlsZS4KKzwvcGFyYT4KKzwvc2VjdDI+Cis8c2VjdDIgaWQ9Imtlcm5lbC1tb2R1bGVzIj4KKzx0aXRsZT5Qcm9maWxpbmcga2VybmVsIG1vZHVsZXM8L3RpdGxlPgorPHBhcmE+CitPUHJvZmlsZSBwcm9maWxlcyBrZXJuZWwgbW9kdWxlcyBieSBkZWZhdWx0LiBIb3dldmVyLCB0aGVyZSBhcmUgYSBjb3VwbGUgb2YgcHJvYmxlbXMKK3lvdSBtYXkgaGF2ZSB3aGVuIHRyeWluZyB0byBnZXQgcmVzdWx0cy4gRmlyc3QsIHlvdSBtYXkgaGF2ZSBib290ZWQgdmlhIGFuIGluaXRyZDsKK3RoaXMgbWVhbnMgdGhhdCB0aGUgYWN0dWFsIHBhdGggZm9yIHRoZSBtb2R1bGUgYmluYXJpZXMgY2Fubm90IGJlIGRldGVybWluZWQgYXV0b21hdGljYWxseS4KK1RvIGdldCBhcm91bmQgdGhpcywgeW91IGNhbiB1c2UgdGhlIDxvcHRpb24+LXA8L29wdGlvbj4gb3B0aW9uIHRvIHRoZSBwcm9maWxpbmcgdG9vbHMKK3RvIHNwZWNpZnkgd2hlcmUgdG8gbG9vayBmb3IgdGhlIGtlcm5lbCBtb2R1bGVzLgorPC9wYXJhPgorPHBhcmE+CitJbiAyLjYsIHRoZSBpbmZvcm1hdGlvbiBvbiB3aGVyZSBrZXJuZWwgbW9kdWxlIGJpbmFyaWVzIGFyZSBsb2NhdGVkIGhhcyBiZWVuIHJlbW92ZWQuCitUaGlzIG1lYW5zIE9Qcm9maWxlIG5lZWRzIGd1aWRpbmcgd2l0aCB0aGUgPG9wdGlvbj4tcDwvb3B0aW9uPiBvcHRpb24gdG8gZmluZCB5b3VyCittb2R1bGVzLiBOb3JtYWxseSwgeW91IGNhbiBqdXN0IHVzZSB5b3VyIHN0YW5kYXJkIG1vZHVsZSB0b3AtbGV2ZWwgZGlyZWN0b3J5IGZvciB0aGlzLgorTm90ZSB0aGF0IGR1ZSB0byB0aGlzIHByb2JsZW0sIE9Qcm9maWxlIGNhbm5vdCBjaGVjayB0aGF0IHRoZSBtb2RpZmljYXRpb24gdGltZXMgbWF0Y2g7CitpdCBpcyB5b3VyIHJlc3BvbnNpYmlsaXR5IHRvIG1ha2Ugc3VyZSB5b3UgZG8gbm90IG1vZGlmeSBhIGJpbmFyeSBhZnRlciBhIHByb2ZpbGUKK2hhcyBiZWVuIGNyZWF0ZWQuCis8L3BhcmE+Cis8cGFyYT4KK0lmIHlvdSBoYXZlIHJ1biA8Y29tbWFuZD5pbnNtb2Q8L2NvbW1hbmQ+IG9yIDxjb21tYW5kPm1vZHByb2JlPC9jb21tYW5kPiB0byBpbnNlcnQgYSBtb2R1bGUKK2luIGEgcGFydGljdWxhciBkaXJlY3RvcnksIGl0IGlzIGltcG9ydGFudCB0aGF0IHlvdSBzcGVjaWZ5IHRoaXMgZGlyZWN0b3J5IHdpdGggdGhlIAorPG9wdGlvbj4tcDwvb3B0aW9uPiBvcHRpb24gZmlyc3QsIHNvIHRoYXQgaXQgb3Zlci1yaWRlcyBhbiBvbGRlciBtb2R1bGUgYmluYXJ5IHRoYXQgbWlnaHQKK2V4aXN0IGluIG90aGVyIGRpcmVjdG9yaWVzIHlvdSd2ZSBzcGVjaWZpZWQgd2l0aCA8b3B0aW9uPi1wPC9vcHRpb24+LiBJdCBpcyB1cCB0byB5b3UKK3RvIG1ha2Ugc3VyZSB0aGF0IHRoZXNlIHZhbHVlcyBhcmUgY29ycmVjdDogMi42IGtlcm5lbHMgc2ltcGx5IGRvIG5vdCBwcm92aWRlIGVub3VnaAoraW5mb3JtYXRpb24gZm9yIE9Qcm9maWxlIHRvIGdldCB0aGlzIGluZm9ybWF0aW9uLgorPC9wYXJhPgorPC9zZWN0Mj4KKzwvc2VjdDE+CisKKzxzZWN0MSBpZD0iaW50ZXJwcmV0aW5nLWNhbGxncmFwaCI+Cis8dGl0bGU+SW50ZXJwcmV0aW5nIGNhbGwtZ3JhcGggcHJvZmlsZXM8L3RpdGxlPgorPHBhcmE+CitTb21ldGltZXMgdGhlIHJlc3VsdHMgZnJvbSBjYWxsLWdyYXBoIHByb2ZpbGVzIG1heSBiZSBkaWZmZXJlbnQgdG8gd2hhdAoreW91IGV4cGVjdCB0byBzZWUuIFRoZSBmaXJzdCB0aGluZyB0byBjaGVjayBpcyB3aGV0aGVyIHRoZSB0YXJnZXQKK2JpbmFyaWVzIHdoZXJlIGNvbXBpbGVkIHdpdGggZnJhbWUgcG9pbnRlcnMgZW5hYmxlZCAoaWYgdGhlIGJpbmFyeSB3YXMKK2NvbXBpbGVkIHVzaW5nIDxjb21tYW5kPmdjYzwvY29tbWFuZD4ncworPG9wdGlvbj4tZm9taXQtZnJhbWUtcG9pbnRlcjwvb3B0aW9uPiBvcHRpb24sIHlvdSB3aWxsIG5vdCBnZXQKK21lYW5pbmdmdWwgcmVzdWx0cykuIE5vdGUgdGhhdCBhcyBvZiB0aGlzIHdyaXRpbmcsIHRoZSBHQ0MgZGV2ZWxvcGVycworcGxhbiB0byBkaXNhYmxlIGZyYW1lIHBvaW50ZXJzIGJ5IGRlZmF1bHQuIFRoZSBMaW51eCBrZXJuZWwgaXMgYnVpbHQKK3dpdGhvdXQgZnJhbWUgcG9pbnRlcnMgYnkgZGVmYXVsdDsgdGhlcmUgaXMgYSBjb25maWd1cmF0aW9uIG9wdGlvbiB5b3UKK2NhbiB1c2UgdG8gdHVybiBpdCBvbiB1bmRlciB0aGUgIktlcm5lbCBIYWNraW5nIiBtZW51LgorPC9wYXJhPgorPHBhcmE+CitPZnRlbiB5b3UgbWF5IHNlZSBhIGNhbGxlciBvZiBhIGZ1bmN0aW9uIHRoYXQgZG9lcyBub3QgYWN0dWFsbHkgZGlyZWN0bHkKK2NhbGwgdGhlIGZ1bmN0aW9uIHlvdSdyZSBsb29raW5nIGF0IChlLmcuIGlmIDxmdW5jdGlvbj5hKCk8L2Z1bmN0aW9uPgorY2FsbHMgPGZ1bmN0aW9uPmIoKTwvZnVuY3Rpb24+LCB3aGljaCBpbiB0dXJuIGNhbGxzCis8ZnVuY3Rpb24+YygpPC9mdW5jdGlvbj4sIHlvdSBtYXkgc2VlIGFuIGVudHJ5IGZvcgorPGZ1bmN0aW9uPmEoKS0+YygpPC9mdW5jdGlvbj4pLiAgV2hhdCdzIGFjdHVhbGx5IG9jY3VycmluZyBpcyB0aGF0IHdlCithcmUgdGFraW5nIHNhbXBsZXMgYXQgdGhlIHZlcnkgc3RhcnQgKG9yIHRoZSB2ZXJ5IGVuZCkgb2YKKzxmdW5jdGlvbj5jKCk8L2Z1bmN0aW9uPjsgYXQgdGhlc2UgZmV3IGluc3RydWN0aW9ucywgd2UgaGF2ZW4ndCB5ZXQKK2NyZWF0ZWQgdGhlIG5ldyBmdW5jdGlvbidzIGZyYW1lLCBzbyBpdCBhcHBlYXJzIGFzIGlmCis8ZnVuY3Rpb24+YSgpPC9mdW5jdGlvbj4gaXMgY2FsbGluZyBkaXJlY3RseSBpbnRvCis8ZnVuY3Rpb24+YygpPC9mdW5jdGlvbj4uIEJlIGNhcmVmdWwgbm90IHRvIGJlIG1pc2xlZCBieSB0aGVzZQorZW50cmllcy4KKzwvcGFyYT4KKzxwYXJhPgorTGlrZSB0aGUgcmVzdCBvZiBPUHJvZmlsZSwgY2FsbC1ncmFwaCBwcm9maWxpbmcgdXNlcyBhIHN0YXRpc3RpY2FsCithcHByb2FjaDsgdGhpcyBtZWFucyB0aGF0IHNvbWV0aW1lcyBhIGJhY2t0cmFjZSBzYW1wbGUgaXMgdHJ1bmNhdGVkLCBvcgorZXZlbiBwYXJ0aWFsbHkgd3JvbmcuIEJlYXIgdGhpcyBpbiBtaW5kIHdoZW4gZXhhbWluaW5nIHJlc3VsdHMuCis8L3BhcmE+Cis8IS0tICBGSVhNRTogd2hhdCBkbyB3ZSBuZWVkIGhlcmUgPyAtLT4KKzwvc2VjdDE+CisKKzxzZWN0MSBpZD0iZGVidWctaW5mbyI+Cis8dGl0bGU+SW5hY2N1cmFjaWVzIGluIGFubm90YXRlZCBzb3VyY2U8L3RpdGxlPgorPHNlY3QyIGlkPSJlZmZlY3Qtb2Ytb3B0aW1pemF0aW9ucyI+Cis8dGl0bGU+U2lkZSBlZmZlY3RzIG9mIG9wdGltaXphdGlvbnM8L3RpdGxlPgorPHBhcmE+CitUaGUgY29tcGlsZXIgY2FuIGludHJvZHVjZSBzb21lIHBpdGZhbGxzIGluIHRoZSBhbm5vdGF0ZWQgc291cmNlIG91dHB1dC4KK1RoZSBvcHRpbWl6ZXIgY2FuIG1vdmUgcGllY2VzIG9mIGNvZGUgaW4gc3VjaCBtYW5uZXIgdGhhdCB0d28gbGluZSBvZiBjb2RlcworYXJlIGludGVybGFjZWQgKGluc3RydWN0aW9uIHNjaGVkdWxpbmcpLiBBbHNvIGRlYnVnIGluZm8gZ2VuZXJhdGVkIGJ5IHRoZSBjb21waWxlciAKK2NhbiBzaG93IHN0cmFuZ2UgYmVoYXZpb3IuIFRoaXMgaXMgZXNwZWNpYWxseSB0cnVlIGZvciBjb21wbGV4IGV4cHJlc3Npb25zIGUuZy4gaW5zaWRlCithbiBpZiBzdGF0ZW1lbnQ6Cis8L3BhcmE+Cis8c2NyZWVuPgorCWlmIChhICZhbXA7JmFtcDsgLi4KKwkgICAgYiAmYW1wOyZhbXA7IC4uCisJICAgIGMgJmFtcDsmYW1wOykKKzwvc2NyZWVuPgorPHBhcmE+CitoZXJlIHRoZSBwcm9ibGVtIGNvbWUgZnJvbSB0aGUgcG9zaXRpb24gb2YgbGluZSBudW1iZXIuIFRoZSBhdmFpbGFibGUgZGVidWcKK2luZm8gZG9lcyBub3QgZ2l2ZSBlbm91Z2ggZGV0YWlscyBmb3IgdGhlIGlmIGNvbmRpdGlvbiwgc28gYWxsIHNhbXBsZXMgYXJlCithY2N1bXVsYXRlZCBhdCB0aGUgcG9zaXRpb24gb2YgdGhlIHJpZ2h0IGJyYWNlIG9mIHRoZSBleHByZXNzaW9uLiBVc2luZworPGNvbW1hbmQ+b3Bhbm5vdGF0ZSA8b3B0aW9uPi1hPC9vcHRpb24+PC9jb21tYW5kPiBjYW4gaGVscCB0byBzaG93IHRoZSByZWFsCitzYW1wbGVzIGF0IGFuIGFzc2VtYmx5IGxldmVsLgorPC9wYXJhPgorPC9zZWN0Mj4KKzxzZWN0MiBpZD0icHJvbG9ndWVzIj4KKzx0aXRsZT5Qcm9sb2d1ZXMgYW5kIGVwaWxvZ3VlczwvdGl0bGU+Cis8cGFyYT4KK1RoZSBjb21waWxlciBnZW5lcmFsbHkgbmVlZHMgdG8gZ2VuZXJhdGUgImdsdWUiIGNvZGUgYWNyb3NzIGZ1bmN0aW9uIGNhbGxzLCBkZXBlbmRlbnQKK29uIHRoZSBwYXJ0aWN1bGFyIGZ1bmN0aW9uIGNhbGwgY29udmVudGlvbnMgdXNlZC4gQWRkaXRpb25hbGx5IG90aGVyIHRoaW5ncworbmVlZCB0byBoYXBwZW4sIGxpa2Ugc3RhY2sgcG9pbnRlciBhZGp1c3RtZW50IGZvciB0aGUgbG9jYWwgdmFyaWFibGVzOyB0aGlzCitjb2RlIGlzIGtub3duIGFzIHRoZSBmdW5jdGlvbiBwcm9sb2d1ZS4gU2ltaWxhciBjb2RlIGlzIG5lZWRlZCBhdCBmdW5jdGlvbiByZXR1cm4sCithbmQgaXMga25vd24gYXMgdGhlIGZ1bmN0aW9uIGVwaWxvZ3VlLiBUaGlzIHdpbGwgc2hvdyB1cCBpbiBhbm5vdGF0aW9ucyBhcworc2FtcGxlcyBhdCB0aGUgdmVyeSBzdGFydCBhbmQgZW5kIG9mIGEgZnVuY3Rpb24sIHdoZXJlIHRoZXJlIGlzIG5vIGFwcGFyZW50CitleGVjdXRhYmxlIGNvZGUgaW4gdGhlIHNvdXJjZS4KKzwvcGFyYT4KKzwvc2VjdDI+Cis8c2VjdDIgaWQ9ImlubGluZWQtZnVuY3Rpb24iPgorPHRpdGxlPklubGluZWQgZnVuY3Rpb25zPC90aXRsZT4KKzxwYXJhPgorWW91IG1heSBzZWUgdGhhdCBhIGZ1bmN0aW9uIGlzIGNyZWRpdGVkIHdpdGggYSBjZXJ0YWluIG51bWJlciBvZiBzYW1wbGVzLCBidXQKK3RoZSBsaXN0aW5nIGRvZXMgbm90IGFkZCB1cCB0byB0aGUgY29ycmVjdCB0b3RhbC4gVG8gcGljayBhIHJlYWwgZXhhbXBsZSA6Cis8L3BhcmE+Cis8c2NyZWVuPgorICAgICAgICAgICAgICAgOmludGVybmFsX3NrX2J1ZmZfYWxsb2Nfc2VjdXJpdHkoc3RydWN0IHNrX2J1ZmYgKnNrYikKKyAzNTMgMi4zNDIlICAgIDp7IC8qIGludGVybmFsX3NrX2J1ZmZfYWxsb2Nfc2VjdXJpdHkgdG90YWw6IDE4ODIgMTIuNDglICovCisgICAgICAgICAgICAgICA6CisgICAgICAgICAgICAgICA6ICAgICAgICBza19idWZmX3NlY3VyaXR5X3QgKnNrc2VjOworICAxNSAwLjA5OTUlICAgOiAgICAgICAgaW50IHJjID0gMDsKKyAgICAgICAgICAgICAgIDoKKyAgMTAgMC4wNjYzMyUgIDogICAgICAgIHNrc2VjID0gc2tiLSZndDtsc21fc2VjdXJpdHk7CisgNDY4IDMuMTA0JSAgICA6ICAgICAgICBpZiAoc2tzZWMgJmFtcDsmYW1wOyBza3NlYy0mZ3Q7bWFnaWMgPT0gRFNJX01BR0lDKSB7CisgICAgICAgICAgICAgICA6ICAgICAgICAgICAgICAgIGdvdG8gb3V0OworICAgICAgICAgICAgICAgOiAgICAgICAgfQorICAgICAgICAgICAgICAgOgorICAgICAgICAgICAgICAgOiAgICAgICAgc2tzZWMgPSAoc2tfYnVmZl9zZWN1cml0eV90ICopIGdldF9za19idWZmX21lbW9yeShza2IpOworICAgMyAwLjAxOTklICAgOiAgICAgICAgaWYgKCFza3NlYykgeworICAzOCAwLjI1MjElICAgOiAgICAgICAgICAgICAgICByYyA9IC1FTk9NRU07CisgICAgICAgICAgICAgICA6ICAgICAgICAgICAgICAgIGdvdG8gb3V0OworICAxMCAwLjA2NjMzJSAgOiAgICAgICAgfQorICAgICAgICAgICAgICAgOiAgICAgICAgbWVtc2V0KHNrc2VjLCAwLCBzaXplb2YgKHNrX2J1ZmZfc2VjdXJpdHlfdCkpOworICA0NCAwLjI5MTklICAgOiAgICAgICAgc2tzZWMtJmd0O21hZ2ljID0gRFNJX01BR0lDOworICAzMiAwLjIxMjMlICAgOiAgICAgICAgc2tzZWMtJmd0O3NrYiA9IHNrYjsKKyAgNDUgMC4yOTg1JSAgIDogICAgICAgIHNrc2VjLSZndDtzaWQgPSBEU0lfU0lEX05PUk1BTDsKKyAgMzEgMC4yMDU2JSAgIDogICAgICAgIHNrYi0mZ3Q7bHNtX3NlY3VyaXR5ID0gc2tzZWM7CisgICAgICAgICAgICAgICA6CisgICAgICAgICAgICAgICA6ICAgICAgb3V0OgorICAgICAgICAgICAgICAgOgorIDE0NiAwLjk2ODUlICAgOiAgICAgICAgcmV0dXJuIHJjOworICAgICAgICAgICAgICAgOgorICA5OCAwLjY1MDElICAgOn0KKzwvc2NyZWVuPgorPHBhcmE+CitIZXJlLCB0aGUgZnVuY3Rpb24gaXMgY3JlZGl0ZWQgd2l0aCAxLDg4MiBzYW1wbGVzLCBidXQgdGhlIGFubm90YXRpb25zCitiZWxvdyBkbyBub3QgYWNjb3VudCBmb3IgdGhpcy4gVGhpcyBpcyB1c3VhbGx5IGJlY2F1c2Ugb2YgaW5saW5lIGZ1bmN0aW9ucyAtCit0aGUgY29tcGlsZXIgbWFya3Mgc3VjaCBjb2RlIHdpdGggZGVidWcgZW50cmllcyBmb3IgdGhlIGlubGluZSBmdW5jdGlvbgorZGVmaW5pdGlvbiwgYW5kIHRoaXMgaXMgd2hlcmUgPGNvbW1hbmQ+b3Bhbm5vdGF0ZTwvY29tbWFuZD4gYW5ub3RhdGVzCitzdWNoIHNhbXBsZXMuIEluIHRoZSBjYXNlIGFib3ZlLCA8ZnVuY3Rpb24+bWVtc2V0PC9mdW5jdGlvbj4gaXMgdGhlIG1vc3QKK2xpa2VseSBjYW5kaWRhdGUgZm9yIHRoaXMgcHJvYmxlbS4gRXhhbWluaW5nIHRoZSBtaXhlZCBzb3VyY2UvYXNzZW1ibHkKK291dHB1dCBjYW4gaGVscCBpZGVudGlmeSBzdWNoIHJlc3VsdHMuCis8L3BhcmE+Cis8cGFyYT4KK1RoaXMgcHJvYmxlbSBpcyBtb3JlIHZpc2libGUgd2hlbiB0aGVyZSBpcyBubyBzb3VyY2UgZmlsZSBhdmFpbGFibGUsIGluIHRoZQorZm9sbG93aW5nIGV4YW1wbGUgaXQncyB0cml2aWFsbHkgdmlzaWJsZSB0aGUgc3VtcyBvZiBzeW1ib2xzIHNhbXBsZXMgaXMgbGVzcwordGhhbiB0aGUgbnVtYmVyIG9mIHRoZSBzYW1wbGVzIGZvciB0aGlzIGZpbGUuIFRoZSBkaWZmZXJlbmNlIG11c3QgYmUgYWNjb3VudGVkCit0byBpbmxpbmUgZnVuY3Rpb25zLgorPC9wYXJhPgorPHNjcmVlbj4KKy8qCisgKiBUb3RhbCBzYW1wbGVzIGZvciBmaWxlIDogImFyY2gvaTM4Ni9rZXJuZWwvcHJvY2Vzcy5jIgorICoKKyAqICAgIDEwOSAgMi40NjE2CisgKi8KKworIC8qIGRlZmF1bHRfaWRsZSB0b3RhbDogICAgIDg0ICAxLjg5NzAgKi8KKyAvKiBjcHVfaWRsZSB0b3RhbDogICAgICAgICAyMSAgMC40NzQzICovCisgLyogZmx1c2hfdGhyZWFkIHRvdGFsOiAgICAgIDEgIDAuMDIyNiAqLworIC8qIHByZXBhcmVfdG9fY29weSB0b3RhbDogICAxICAwLjAyMjYgKi8KKyAvKiBfX3N3aXRjaF90byB0b3RhbDogICAgICAxOCAgMC40MDY1ICovCis8L3NjcmVlbj4KKzxwYXJhPgorVGhlIG1pc3Npbmcgc2FtcGxlcyBhcmUgbm90IGxvc3QsIHRoZXkgd2lsbCBiZSBjcmVkaXRlZCB0byBhbm90aGVyIHNvdXJjZQorbG9jYXRpb24gd2hlcmUgdGhlIGlubGluZWQgZnVuY3Rpb24gaXMgZGVmaW5lZC4gVGhlIGlubGluZWQgZnVuY3Rpb24gd2lsbCBiZQorY3JlZGl0ZWQgZnJvbSBtdWx0aXBsZSBjYWxsIHNpdGUgYW5kIG1lcmdlZCBpbiBvbmUgcGxhY2UgaW4gdGhlIGFubm90YXRlZAorc291cmNlIGZpbGUgc28gdGhlcmUgaXMgbm8gd2F5IHRvIHNlZSBmcm9tIHdoYXQgY2FsbCBzaXRlIGFyZSBjb21pbmcgdGhlCitzYW1wbGVzIGZvciBhbiBpbmxpbmVkIGZ1bmN0aW9uLgorPC9wYXJhPgorPHBhcmE+CitXaGVuIHJ1bm5pbmcgPGNvbW1hbmQ+b3Bhbm5vdGF0ZTwvY29tbWFuZD4sIHlvdSBtYXkgZ2V0IGEgd2FybmluZworInNvbWUgZnVuY3Rpb25zIGNvbXBpbGVkIHdpdGhvdXQgZGVidWcgaW5mb3JtYXRpb24gbWF5IGhhdmUgaW5jb3JyZWN0IHNvdXJjZSBsaW5lIGF0dHJpYnV0aW9ucyIuCitJbiBzb21lIHJhcmUgY2FzZXMsIE9Qcm9maWxlIGlzIG5vdCBhYmxlIHRvIHZlcmlmeSB0aGF0IHRoZSBkZXJpdmVkIHNvdXJjZSBsaW5lCitpcyBjb3JyZWN0ICh3aGVuIHNvbWUgcGFydHMgb2YgdGhlIGJpbmFyeSBpbWFnZSBhcmUgY29tcGlsZWQgd2l0aG91dCBkZWJ1Z2dpbmcKK2luZm9ybWF0aW9uKS4gQmUgd2FyeSBvZiByZXN1bHRzIGlmIHRoaXMgd2FybmluZyBhcHBlYXJzLgorPC9wYXJhPgorPHBhcmE+CitGdXJ0aGVybW9yZSwgZm9yIHNvbWUgbGFuZ3VhZ2VzIHRoZSBjb21waWxlciBjYW4gaW1wbGljaXRseSBnZW5lcmF0ZSBmdW5jdGlvbnMsCitzdWNoIGFzIGRlZmF1bHQgY29weSBjb25zdHJ1Y3RvcnMuIFN1Y2ggZnVuY3Rpb25zIGFyZSBsYWJlbGxlZCBieSB0aGUgY29tcGlsZXIKK2FzIGhhdmluZyBhIGxpbmUgbnVtYmVyIG9mIDAsIHdoaWNoIG1lYW5zIHRoZSBzb3VyY2UgYW5ub3RhdGlvbiBjYW4gYmUgY29uZnVzaW5nLgorPC9wYXJhPgorPCEtLSBGSVhNRSBzbyB3aGF0ICphY3R1YWxseSogaGFwcGVucyB0byB0aG9zZSBzYW1wbGVzID8gaWdub3JlZCA/IC0tPgorPC9zZWN0Mj4KKzxzZWN0MiBpZD0id3JvbmctbGluZW5yLWluZm8iPgorPHRpdGxlPkluYWNjdXJhY3kgaW4gbGluZSBudW1iZXIgaW5mb3JtYXRpb248L3RpdGxlPgorPHBhcmE+CitEZXBlbmRpbmcgb24geW91ciBjb21waWxlciB5b3UgY2FuIGZhbGwgaW50byB0aGUgZm9sbG93aW5nIHByb2JsZW06Cis8L3BhcmE+Cis8c2NyZWVuPgorc3RydWN0IGJpZ19vYmplY3QgeyBpbnQgYVs1MDBdOyB9OworCitpbnQgbWFpbigpCit7CisJYmlnX29iamVjdCBhLCBiOworCWZvciAoaW50IGkgPSAwIDsgaSAhPSAxMDAwICogMTAwMDsgKytpKQorCQliID0gYTsKKwlyZXR1cm4gMDsKK30KKworPC9zY3JlZW4+Cis8cGFyYT4KK0NvbXBpbGVkIHdpdGggPGNvbW1hbmQ+Z2NjPC9jb21tYW5kPiAzLjAuNCB0aGUgYW5ub3RhdGVkIHNvdXJjZSBpcyBjbGVhcmx5IGluYWNjdXJhdGU6Cis8L3BhcmE+Cis8c2NyZWVuPgorICAgICAgICAgICAgICAgOmludCBtYWluKCkKKyAgICAgICAgICAgICAgIDp7ICAvKiBtYWluIHRvdGFsOiA3ODcxIDEwMCUgKi8KKyAgICAgICAgICAgICAgIDogICAgICAgIGJpZ19vYmplY3QgYSwgYjsKKyAgICAgICAgICAgICAgIDogICAgICAgIGZvciAoaW50IGkgPSAwIDsgaSAhPSAxMDAwICogMTAwMDsgKytpKQorICAgICAgICAgICAgICAgOiAgICAgICAgICAgICAgICBiID0gYTsKKyA3ODcxIDEwMCUgICAgIDogICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgOn0KKzwvc2NyZWVuPgorPHBhcmE+CitUaGUgcHJvYmxlbSBoZXJlIGlzIGRpc3RpbmN0IGZyb20gdGhlIElSUSBsYXRlbmN5IHByb2JsZW07IHRoZSBkZWJ1ZyBsaW5lIG51bWJlcgoraW5mb3JtYXRpb24gaXMgbm90IHByZWNpc2UgZW5vdWdoOyBhZ2FpbiwgbG9va2luZyBhdCBvdXRwdXQgb2YgPGNvbW1hbmQ+b3Bhbm5vYXRhdGUgLWFzPC9jb21tYW5kPiBjYW4gaGVscC4KKzwvcGFyYT4KKzxzY3JlZW4+CisgICAgICAgICAgICAgICA6aW50IG1haW4oKQorICAgICAgICAgICAgICAgOnsKKyAgICAgICAgICAgICAgIDogICAgICAgIGJpZ19vYmplY3QgYSwgYjsKKyAgICAgICAgICAgICAgIDogICAgICAgIGZvciAoaW50IGkgPSAwIDsgaSAhPSAxMDAwICogMTAwMDsgKytpKQorICAgICAgICAgICAgICAgOiA4MDQ4NGMwOiAgICAgICBwdXNoICAgJWVicAorICAgICAgICAgICAgICAgOiA4MDQ4NGMxOiAgICAgICBtb3YgICAgJWVzcCwlZWJwCisgICAgICAgICAgICAgICA6IDgwNDg0YzM6ICAgICAgIHN1YiAgICAkMHhmYWMsJWVzcAorICAgICAgICAgICAgICAgOiA4MDQ4NGM5OiAgICAgICBwdXNoICAgJWVkaQorICAgICAgICAgICAgICAgOiA4MDQ4NGNhOiAgICAgICBwdXNoICAgJWVzaQorICAgICAgICAgICAgICAgOiA4MDQ4NGNiOiAgICAgICBwdXNoICAgJWVieAorICAgICAgICAgICAgICAgOiAgICAgICAgICAgICAgICBiID0gYTsKKyAgICAgICAgICAgICAgIDogODA0ODRjYzogICAgICAgbGVhICAgIDB4ZmZmZmYwNjAoJWVicCksJWVkeAorICAgICAgICAgICAgICAgOiA4MDQ4NGQyOiAgICAgICBsZWEgICAgMHhmZmZmZjgzMCglZWJwKSwlZWF4CisgICAgICAgICAgICAgICA6IDgwNDg0ZDg6ICAgICAgIG1vdiAgICAkMHhmNDIzZiwlZWJ4CisgICAgICAgICAgICAgICA6IDgwNDg0ZGQ6ICAgICAgIGxlYSAgICAweDAoJWVzaSksJWVzaQorICAgICAgICAgICAgICAgOiAgICAgICAgcmV0dXJuIDA7CisgICAgMyAwLjAzODExJSA6IDgwNDg0ZTA6ICAgICAgIG1vdiAgICAlZWR4LCVlZGkKKyAgICAgICAgICAgICAgIDogODA0ODRlMjogICAgICAgbW92ICAgICVlYXgsJWVzaQorICAgIDEgMC4wMTI3JSAgOiA4MDQ4NGU0OiAgICAgICBjbGQKKyAgICA4IDAuMTAxNiUgIDogODA0ODRlNTogICAgICAgbW92ICAgICQweDFmNCwlZWN4CisgNzg1MCA5OS43MyUgICA6IDgwNDg0ZWE6ICAgICAgIHJlcHogbW92c2wgJWRzOiglZXNpKSwlZXM6KCVlZGkpCisgICAgOSAwLjExNDMlICA6IDgwNDg0ZWM6ICAgICAgIGRlYyAgICAlZWJ4CisgICAgICAgICAgICAgICA6IDgwNDg0ZWQ6ICAgICAgIGpucyAgICA4MDQ4NGUwCisgICAgICAgICAgICAgICA6IDgwNDg0ZWY6ICAgICAgIHhvciAgICAlZWF4LCVlYXgKKyAgICAgICAgICAgICAgIDogODA0ODRmMTogICAgICAgcG9wICAgICVlYngKKyAgICAgICAgICAgICAgIDogODA0ODRmMjogICAgICAgcG9wICAgICVlc2kKKyAgICAgICAgICAgICAgIDogODA0ODRmMzogICAgICAgcG9wICAgICVlZGkKKyAgICAgICAgICAgICAgIDogODA0ODRmNDogICAgICAgbGVhdmUKKyAgICAgICAgICAgICAgIDogODA0ODRmNTogICAgICAgcmV0Cis8L3NjcmVlbj4KKzxwYXJhPgorU28gaGVyZSBpdCdzIGNsZWFyIHRoYXQgY29weWluZyBpcyBjb3JyZWN0bHkgY3JlZGl0ZWQgd2l0aCBvZiBhbGwgdGhlIHNhbXBsZXMsIGJ1dCB0aGUKK2xpbmUgbnVtYmVyIGluZm9ybWF0aW9uIGlzIG1pc3BsYWNlZC4gPGNvbW1hbmQ+b2JqZHVtcCAtZFM8L2NvbW1hbmQ+IGV4cG9zZXMgdGhlCitzYW1lIHByb2JsZW0uIE5vdGUgdGhhdCBtYWludGFpbmluZyBhY2N1cmF0ZSBkZWJ1ZyBpbmZvcm1hdGlvbiBmb3IgY29tcGlsZXJzIHdoZW4gb3B0aW1pemluZyBpcyBkaWZmaWN1bHQsIHNvIHRoaXMgcHJvYmxlbSBpcyBub3Qgc3VwcmlzaW5nLgorVGhlIHByb2JsZW0gb2YgZGVidWcgaW5mb3JtYXRpb24KK2FjY3VyYWN5IGlzIGFsc28gZGVwZW5kZW50IG9uIHRoZSBiaW51dGlscyB2ZXJzaW9uIHVzZWQ7IHNvbWUgQkZEIGxpYnJhcnkgdmVyc2lvbnMKK2NvbnRhaW4gYSB3b3JrLWFyb3VuZCBmb3Iga25vd24gcHJvYmxlbXMgb2YgPGNvbW1hbmQ+Z2NjPC9jb21tYW5kPiwgc29tZSBvdGhlcnMgZG8gbm90LiBUaGlzIGlzIHVuZm9ydHVuYXRlIGJ1dCB3ZSBtdXN0IGxpdmUgd2l0aCB0aGF0LAorc2luY2UgcHJvZmlsaW5nIGlzIHBvaW50bGVzcyB3aGVuIHlvdSBkaXNhYmxlIG9wdGltaXNhdGlvbiAod2hpY2ggd291bGQgZ2l2ZSBiZXR0ZXIgZGVidWdnaW5nIGVudHJpZXMpLgorPC9wYXJhPgorPC9zZWN0Mj4KKzwvc2VjdDE+Cis8c2VjdDEgaWQ9InN5bWJvbC13aXRob3V0LWRlYnVnLWluZm8iPgorPHRpdGxlPkFzc2VtYmx5IGZ1bmN0aW9uczwvdGl0bGU+Cis8cGFyYT4KK09mdGVuIHRoZSBhc3NlbWJsZXIgY2Fubm90IGdlbmVyYXRlIGRlYnVnIGluZm9ybWF0aW9uIGF1dG9tYXRpY2FsbHkuCitUaGlzIG1lYW5zIHRoYXQgeW91IGNhbm5vdCBnZXQgYSBzb3VyY2UgcmVwb3J0IHVubGVzcyAKK3lvdSBtYW51YWxseSBkZWZpbmUgdGhlIG5lY2Nlc3NhcnkgZGVidWcgaW5mb3JtYXRpb247IHJlYWQgeW91ciBhc3NlbWJsZXIgZG9jdW1lbnRhdGlvbiBmb3IgaG93IHlvdSBtaWdodAorZG8gdGhhdC4gVGhlIG9ubHkKK2RlYnVnZ2luZyBpbmZvIG5lZWRlZCBjdXJyZW50bHkgYnkgT1Byb2ZpbGUgaXMgdGhlIGxpbmUtbnVtYmVyL2ZpbGVuYW1lLVZNQSBhc3NvY2lhdGlvbi4gV2hlbiBwcm9maWxpbmcgYXNzZW1ibHkKK3dpdGhvdXQgZGVidWdnaW5nIGluZm8geW91IGNhbiBhbHdheXMgZ2V0IHJlcG9ydCBmb3Igc3ltYm9scywgYW5kIG9wdGlvbmFsbHkgZm9yIFZNQSwgdGhyb3VnaCA8Y29tbWFuZD5vcHJlcG9ydCAtbDwvY29tbWFuZD4KK29yIDxjb21tYW5kPm9wcmVwb3J0IC1kPC9jb21tYW5kPiwgYnV0IHRoaXMgd29ya3Mgb25seSBmb3Igc3ltYm9scyB3aXRoIHRoZSByaWdodCBhdHRyaWJ1dGVzLgorRm9yIDxjb21tYW5kPmdhczwvY29tbWFuZD4geW91IGNhbiBnZXQgdGhpcyBieQorPC9wYXJhPgorPHNjcmVlbj4KKy5nbG9ibCBmb28KKwkudHlwZQlmb28sQGZ1bmN0aW9uCis8L3NjcmVlbj4KKzxwYXJhPiAKK3doaWxzdCBmb3IgPGNvbW1hbmQ+bmFzbTwvY29tbWFuZD4geW91IG11c3QgdXNlCis8L3BhcmE+Cis8c2NyZWVuPgorCSAgR0xPQkFMIGZvbzpmdW5jdGlvbgkJOyBbMV0KKzwvc2NyZWVuPgorPHBhcmE+CitOb3RlIHRoYXQgT1Byb2ZpbGUgZG9lcyBub3QgbmVlZCB0aGUgZ2xvYmFsIGF0dHJpYnV0ZSwgb25seSB0aGUgZnVuY3Rpb24gYXR0cmlidXRlLgorPC9wYXJhPgorPC9zZWN0MT4KKzwhLS0gCisKK0ZJWE1FOiBJIGNvbW1lbnRlZCB0aGlzIGJpdCBvdXQgdW50aWwgd2UndmUgd3JpdHRlbiBzb21ldGhpbmcgLi4uCisKK2ltcHJvdmUgdGhpcyA/IGJ1dCBsb29rIGZpcnN0IHdoeSB0aGlzIGZpbGUgaXMgc3BlY2lhbCAKKzxzZWN0MiBpZD0ic21hbGwtZnVuY3Rpb25zIj4KKzx0aXRsZT5TbWFsbCBmdW5jdGlvbnM8L3RpdGxlPgorPHBhcmE+CitWZXJ5IHNtYWxsIGZ1bmN0aW9ucyBjYW4gc2hvdyBzdHJhbmdlIGJlaGF2aW9yLiBUaGUgZmlsZSBpbiB5b3VyIHNvdXJjZQorZGlyZWN0b3J5IG9mIE9Qcm9maWxlIDxmaWxlbmFtZT4kU1JDL3Rlc3Qtb3Byb2ZpbGUvdW5kZXJzdGFuZGluZy9wdXp6bGUuYzwvZmlsZW5hbWU+CitzaG93IHN1Y2ggZXhhbXBsZQorPC9wYXJhPgorPC9zZWN0Mj4KKy0tPiAKKworPHNlY3QxIGlkPSJvdmVybGFwcGluZy1zeW1ib2xzIj4KKwk8dGl0bGU+T3ZlcmxhcHBpbmcgc3ltYm9scyBpbiBKSVRlZCBjb2RlPC90aXRsZT4KKwk8cGFyYT4KKwlTb21lIHZpcnR1YWwgbWFjaGluZXMgKGUuZy4sIEphdmEpIG1heSByZS1KSVQgYSBtZXRob2QsIHJlc3VsdGluZyBpbiBwcmV2aW91c2x5CisJYWxsb2NhdGVkIHNwYWNlIGZvciBhIHBpZWNlIG9mIGNvbXBpbGVkIGNvZGUgdG8gYmUgcmV1c2VkLiBUaGlzIG1lYW5zIHRoYXQsIGF0IG9uZSBkaXN0aW5jdAorCWNvZGUgYWRkcmVzcywgbXVsdGlwbGUgc3ltYm9scy9tZXRob2RzIG1heSBiZSBwcmVzZW50IGR1cmluZyB0aGUgcnVuIHRpbWUgb2YgdGhlIGFwcGxpY2F0aW9uLgorCTwvcGFyYT4KKwk8cGFyYT4KKwlTaW5jZSBPUHJvZmlsZSBzYW1wbGVzIGFyZSBidWZmZXJlZCBhbmQgZG9uJnByaW1lO3QgaGF2ZSB0aW1pbmcgaW5mb3JtYXRpb24sIHRoZXJlIGlzIG5vIHdheQorCXRvIGNvcnJlbGF0ZSBzYW1wbGVzIHdpdGggdGhlIChwb3NzaWJseSkgdmFyeWluZyBhZGRyZXNzIHJhbmdlcyBpbiB3aGljaCB0aGUgY29kZSBmb3IgYSBzeW1ib2wKKwltYXkgcmVzaWRlLgorCUFuIGFsdGVybmF0aXZlIHdvdWxkIGJlIGZsdXNoaW5nIHRoZSBPUHJvZmlsZSBzYW1wbGluZyBidWZmZXIgd2hlbiB3ZSBnZXQgYW4gdW5sb2FkIGV2ZW50LAorCWJ1dCB0aGlzIGNvdWxkIHJlc3VsdCBpbiBoaWdoIG92ZXJoZWFkLgorCTwvcGFyYT4KKwk8cGFyYT4KKwlUbyBtb2RlcmF0ZSB0aGUgcHJvYmxlbSBvZiBvdmVybGFwcGluZyBzeW1ib2xzLCBPUHJvZmlsZSB0cmllcyB0byBzZWxlY3QgdGhlIHN5bWJvbCB0aGF0IHdhcworCXByZXNlbnQgYXQgdGhpcyBhZGRyZXNzIHJhbmdlIG1vc3Qgb2YgdGhlIHRpbWUuIEFkZGl0aW9uYWxseSwgb3RoZXIgb3ZlcmxhcHBpbmcgc3ltYm9scworCWFyZSB0cnVuY2F0ZWQgaW4gdGhlIG92ZXJsYXBwaW5nIGFyZWEuCisJVGhpcyBnaXZlcyByZWFzb25hYmxlIHJlc3VsdHMsIGJlY2F1c2UgaW4gcmVhbGl0eSwgYWRkcmVzcyByZXVzZSB0eXBpY2FsbHkgdGFrZXMgcGxhY2UKKwlkdXJpbmcgcGhhc2UgY2hhbmdlcyBvZiB0aGUgYXBwbGljYXRpb24gLS0gaW4gcGFydGljdWxhciwgZHVyaW5nIGFwcGxpY2F0aW9uICBzdGFydHVwLgorCVRodXMsIGZvciBvcHRpbXVtIHByb2ZpbGluZyByZXN1bHRzLCBzdGFydCB0aGUgc2FtcGxpbmcgc2Vzc2lvbiBhZnRlciBhcHBsaWNhdGlvbiBzdGFydHVwCisJYW5kIGJ1cm4gaW4uCisJPC9wYXJhPgorPC9zZWN0MT4KKworPHNlY3QxIGlkPSJoaWRkZW4tY29zdCI+Cis8dGl0bGU+T3RoZXIgZGlzY3JlcGFuY2llczwvdGl0bGU+Cis8cGFyYT4KK0Fub3RoZXIgY2F1c2Ugb2YgYXBwYXJlbnQgcHJvYmxlbXMgaXMgdGhlIGhpZGRlbiBjb3N0IG9mIGluc3RydWN0aW9ucy4gQSB2ZXJ5Citjb21tb24gZXhhbXBsZSBpcyB0d28gbWVtb3J5IHJlYWRzOiBvbmUgZnJvbSBMMSBjYWNoZSBhbmQgdGhlIG90aGVyIGZyb20gbWVtb3J5OgordGhlIHNlY29uZCBtZW1vcnkgcmVhZCBpcyBsaWtlbHkgdG8gaGF2ZSBtb3JlIHNhbXBsZXMuCitUaGVyZSBhcmUgbWFueSBvdGhlciBjYXVzZXMgb2YgaGlkZGVuIGNvc3Qgb2YgaW5zdHJ1Y3Rpb25zLiBBIG5vbi1leGhhdXN0aXZlCitsaXN0OiBtaXMtcHJlZGljdGVkIGJyYW5jaCwgVExCIGNhY2hlIG1pc3MsIHBhcnRpYWwgcmVnaXN0ZXIgc3RhbGwsCitwYXJ0aWFsIHJlZ2lzdGVyIGRlcGVuZGVuY2llcywgbWVtb3J5IG1pc21hdGNoIHN0YWxsLCByZS1leGVjdXRlZCC1b3BzLiBJZiB5b3Ugd2FudCB0byB3cml0ZQorcHJvZ3JhbXMgYXQgdGhlIGFzc2VtYmx5IGxldmVsLCBiZSBzdXJlIHRvIHRha2UgYSBsb29rIGF0IHRoZSBJbnRlbCBhbmQKK0FNRCBkb2N1bWVudGF0aW9uIGF0IDx1bGluayB1cmw9Imh0dHA6Ly9kZXZlbG9wZXIuaW50ZWwuY29tLyI+aHR0cDovL2RldmVsb3Blci5pbnRlbC5jb20vPC91bGluaz4KK2FuZCA8dWxpbmsgdXJsPSJodHRwOi8vZGV2ZWxvcGVyLmFtZC5jb20vZGV2Z3VpZGVzLmpzcC8iPmh0dHA6Ly9kZXZlbG9wZXIuYW1kLmNvbS9kZXZndWlkZXMuanNwPC91bGluaz4uCis8L3BhcmE+Cis8L3NlY3QxPgorPC9jaGFwdGVyPgorCisKKzxjaGFwdGVyIGlkPSJhY2siPgorPHRpdGxlPkFja25vd2xlZGdtZW50czwvdGl0bGU+Cis8cGFyYT4KK1RoYW5rcyB0byAoaW4gbm8gcGFydGljdWxhciBvcmRlcikgOiBBcmphbiB2YW4gZGUgVmVuLCBSaWsgdmFuIFJpZWwsIEp1YW4gUXVpbnRlbGEsIFBoaWxpcHBlIEVsaWUsCitQaGlsbGlwcCBSdW1wZiwgVGlncmFuIEFpdmF6aWFuLCBBbGV4IEJyb3duLCBBbGlzZGFpciBSYXdzdGhvcm5lLCBCb2IgTW9udGdvbWVyeSwgUmF5IEJyeWFudCwgSC5KLiBMdSwKK0plZmYgRXNwZXIsIFdpbGwgQ29oZW4sIEdyYXlkb24gSG9hcmUsIENsaWZmIFdvb2xsZXksIEFsZXggVHNhcmlvdW5vdiwgQWwgU3RvbmUsIEphc29uIFllaCwKK1JhbmRvbHBoIENodW5nLCBBbnRvbiBCbGFuY2hhcmQsIFJpY2hhcmQgSGVuZGVyc29uLCBBbmRyaWVzIEJyb3V3ZXIsIEJyeWFuIFJpdHRtZXllciwKK01heW5hcmQgUC4gSm9obnNvbiwKK1JpY2hhcmQgUmVpY2ggKHJyZWljaEByZHJ0ZWNoLmNvbSksIFp3YW5lIE13YWlrYW1ibywgRGF2ZSBKb25lcywgQ2hhcmxlcyBGaWx0bmVzczsgYW5kIGZpbmFsbHkgUHVscCwgZm9yICJJbnRybyIuCis8L3BhcmE+Cis8L2NoYXB0ZXI+CisKKzwvYm9vaz4KZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2RvYy9zcmNkb2MvRG94eWZpbGUuaW4gYi9vcHJvZmlsZS0wLjkuNy9kb2Mvc3JjZG9jL0RveHlmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmNzZmZjQKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9kb2Mvc3JjZG9jL0RveHlmaWxlLmluCkBAIC0wLDAgKzEsMTg0IEBACisjIERveHlmaWxlIDEuMi4xMy0yMDAyMDIxMAorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEdlbmVyYWwgY29uZmlndXJhdGlvbiBvcHRpb25zCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitQUk9KRUNUX05BTUUgICAgICAgICAgID0gQFBBQ0tBR0VACitQUk9KRUNUX05VTUJFUiAgICAgICAgID0gQFZFUlNJT05ACitPVVRQVVRfRElSRUNUT1JZICAgICAgID0KK09VVFBVVF9MQU5HVUFHRSAgICAgICAgPSBFbmdsaXNoCitFWFRSQUNUX0FMTCAgICAgICAgICAgID0gWUVTCitFWFRSQUNUX1BSSVZBVEUgICAgICAgID0gTk8KK0VYVFJBQ1RfU1RBVElDICAgICAgICAgPSBOTworRVhUUkFDVF9MT0NBTF9DTEFTU0VTICA9IFlFUworSElERV9VTkRPQ19NRU1CRVJTICAgICA9IE5PCitISURFX1VORE9DX0NMQVNTRVMgICAgID0gTk8KK0JSSUVGX01FTUJFUl9ERVNDICAgICAgPSBZRVMKK1JFUEVBVF9CUklFRiAgICAgICAgICAgPSBZRVMKK0FMV0FZU19ERVRBSUxFRF9TRUMgICAgPSBOTworSU5MSU5FX0lOSEVSSVRFRF9NRU1CICA9IE5PCitGVUxMX1BBVEhfTkFNRVMgICAgICAgID0gTk8KK1NUUklQX0ZST01fUEFUSCAgICAgICAgPSAKK0lOVEVSTkFMX0RPQ1MgICAgICAgICAgPSBOTworU1RSSVBfQ09ERV9DT01NRU5UUyAgICA9IE5PCitDQVNFX1NFTlNFX05BTUVTICAgICAgID0gWUVTCitTSE9SVF9OQU1FUyAgICAgICAgICAgID0gTk8KK0hJREVfU0NPUEVfTkFNRVMgICAgICAgPSBOTworVkVSQkFUSU1fSEVBREVSUyAgICAgICA9IFlFUworU0hPV19JTkNMVURFX0ZJTEVTICAgICA9IFlFUworSkFWQURPQ19BVVRPQlJJRUYgICAgICA9IFlFUworSU5IRVJJVF9ET0NTICAgICAgICAgICA9IFlFUworSU5MSU5FX0lORk8gICAgICAgICAgICA9IFlFUworU09SVF9NRU1CRVJfRE9DUyAgICAgICA9IFlFUworRElTVFJJQlVURV9HUk9VUF9ET0MgICA9IE5PCitUQUJfU0laRSAgICAgICAgICAgICAgID0gOAorR0VORVJBVEVfVE9ET0xJU1QgICAgICA9IE5PCitHRU5FUkFURV9URVNUTElTVCAgICAgID0gTk8KK0dFTkVSQVRFX0JVR0xJU1QgICAgICAgPSBOTworQUxJQVNFUyAgICAgICAgICAgICAgICA9IAorRU5BQkxFRF9TRUNUSU9OUyAgICAgICA9IAorTUFYX0lOSVRJQUxJWkVSX0xJTkVTICA9IDMwCitPUFRJTUlaRV9PVVRQVVRfRk9SX0MgID0gTk8KK09QVElNSVpFX09VVFBVVF9KQVZBICAgPSBOTworU0hPV19VU0VEX0ZJTEVTICAgICAgICA9IFlFUworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB3YXJuaW5nIGFuZCBwcm9ncmVzcyBtZXNzYWdlcworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorUVVJRVQgICAgICAgICAgICAgICAgICA9IE5PCitXQVJOSU5HUyAgICAgICAgICAgICAgID0gWUVTCitXQVJOX0lGX1VORE9DVU1FTlRFRCAgID0gWUVTCitXQVJOX0ZPUk1BVCAgICAgICAgICAgID0gIiRmaWxlOiRsaW5lOiAkdGV4dCIKK1dBUk5fTE9HRklMRSAgICAgICAgICAgPSAKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gdGhlIGlucHV0IGZpbGVzCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitJTlBVVCAgICAgICAgICAgICAgICAgID0gLi4vLi4vCitGSUxFX1BBVFRFUk5TICAgICAgICAgID0gKi5jcHAgKi5jICouaAorUkVDVVJTSVZFICAgICAgICAgICAgICA9IFlFUworRVhDTFVERSAgICAgICAgICAgICAgICA9IC4uLy4uL21vZHVsZQorRVhDTFVERV9TWU1MSU5LUyAgICAgICA9IE5PCitFWENMVURFX1BBVFRFUk5TICAgICAgID0gKi5tb2MuY3BwICoubW9jLmggb3Byb2Zfc3RhcnQuYmFzZS5jcHAKK0VYQU1QTEVfUEFUSCAgICAgICAgICAgPSAKK0VYQU1QTEVfUEFUVEVSTlMgICAgICAgPSAKK0VYQU1QTEVfUkVDVVJTSVZFICAgICAgPSBOTworSU1BR0VfUEFUSCAgICAgICAgICAgICA9IAorSU5QVVRfRklMVEVSICAgICAgICAgICA9IAorRklMVEVSX1NPVVJDRV9GSUxFUyAgICA9IE5PCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHNvdXJjZSBicm93c2luZworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorU09VUkNFX0JST1dTRVIgICAgICAgICA9IE5PCitJTkxJTkVfU09VUkNFUyAgICAgICAgID0gTk8KK1JFRkVSRU5DRURfQllfUkVMQVRJT04gPSBZRVMKK1JFRkVSRU5DRVNfUkVMQVRJT04gICAgPSBZRVMKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gdGhlIGFscGhhYmV0aWNhbCBjbGFzcyBpbmRleAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQUxQSEFCRVRJQ0FMX0lOREVYICAgICA9IE5PCitDT0xTX0lOX0FMUEhBX0lOREVYICAgID0gNQorSUdOT1JFX1BSRUZJWCAgICAgICAgICA9IAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB0aGUgSFRNTCBvdXRwdXQKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0dFTkVSQVRFX0hUTUwgICAgICAgICAgPSBZRVMKK0hUTUxfT1VUUFVUICAgICAgICAgICAgPSBodG1sCitIVE1MX0ZJTEVfRVhURU5TSU9OICAgID0gLmh0bWwKK0hUTUxfSEVBREVSICAgICAgICAgICAgPSAKK0hUTUxfRk9PVEVSICAgICAgICAgICAgPSAKK0hUTUxfU1RZTEVTSEVFVCAgICAgICAgPSAKK0hUTUxfQUxJR05fTUVNQkVSUyAgICAgPSBZRVMKK0dFTkVSQVRFX0hUTUxIRUxQICAgICAgPSBOTworR0VORVJBVEVfQ0hJICAgICAgICAgICA9IE5PCitCSU5BUllfVE9DICAgICAgICAgICAgID0gTk8KK1RPQ19FWFBBTkQgICAgICAgICAgICAgPSBOTworRElTQUJMRV9JTkRFWCAgICAgICAgICA9IE5PCitFTlVNX1ZBTFVFU19QRVJfTElORSAgID0gNAorR0VORVJBVEVfVFJFRVZJRVcgICAgICA9IE5PCitUUkVFVklFV19XSURUSCAgICAgICAgID0gMjUwCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBMYVRlWCBvdXRwdXQKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0dFTkVSQVRFX0xBVEVYICAgICAgICAgPSBOTworTEFURVhfT1VUUFVUICAgICAgICAgICA9IGxhdGV4CitMQVRFWF9DTURfTkFNRSAgICAgICAgID0gbGF0ZXgKK01BS0VJTkRFWF9DTURfTkFNRSAgICAgPSBtYWtlaW5kZXgKK0NPTVBBQ1RfTEFURVggICAgICAgICAgPSBOTworUEFQRVJfVFlQRSAgICAgICAgICAgICA9IGE0d2lkZQorRVhUUkFfUEFDS0FHRVMgICAgICAgICA9IAorTEFURVhfSEVBREVSICAgICAgICAgICA9IAorUERGX0hZUEVSTElOS1MgICAgICAgICA9IE5PCitVU0VfUERGTEFURVggICAgICAgICAgID0gTk8KK0xBVEVYX0JBVENITU9ERSAgICAgICAgPSBOTworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB0aGUgUlRGIG91dHB1dAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorR0VORVJBVEVfUlRGICAgICAgICAgICA9IE5PCitSVEZfT1VUUFVUICAgICAgICAgICAgID0gcnRmCitDT01QQUNUX1JURiAgICAgICAgICAgID0gTk8KK1JURl9IWVBFUkxJTktTICAgICAgICAgPSBOTworUlRGX1NUWUxFU0hFRVRfRklMRSAgICA9IAorUlRGX0VYVEVOU0lPTlNfRklMRSAgICA9IAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB0aGUgbWFuIHBhZ2Ugb3V0cHV0CisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitHRU5FUkFURV9NQU4gICAgICAgICAgID0gTk8KK01BTl9PVVRQVVQgICAgICAgICAgICAgPSBtYW4KK01BTl9FWFRFTlNJT04gICAgICAgICAgPSAuMworTUFOX0xJTktTICAgICAgICAgICAgICA9IE5PCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBYTUwgb3V0cHV0CisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitHRU5FUkFURV9YTUwgICAgICAgICAgID0gTk8KKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgQXV0b0dlbiBEZWZpbml0aW9ucyBvdXRwdXQKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0dFTkVSQVRFX0FVVE9HRU5fREVGICAgPSBOTworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB0aGUgcHJlcHJvY2Vzc29yICAgCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitFTkFCTEVfUFJFUFJPQ0VTU0lORyAgID0gWUVTCitNQUNST19FWFBBTlNJT04gICAgICAgID0gWUVTCitFWFBBTkRfT05MWV9QUkVERUYgICAgID0gWUVTCitTRUFSQ0hfSU5DTFVERVMgICAgICAgID0gWUVTCitJTkNMVURFX1BBVEggICAgICAgICAgID0gCitJTkNMVURFX0ZJTEVfUEFUVEVSTlMgID0gCitQUkVERUZJTkVEICAgICAgICAgICAgID0gCitFWFBBTkRfQVNfREVGSU5FRCAgICAgID0gCitTS0lQX0ZVTkNUSU9OX01BQ1JPUyAgID0gWUVTCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENvbmZpZ3VyYXRpb246OmFkZHRpb25zIHJlbGF0ZWQgdG8gZXh0ZXJuYWwgcmVmZXJlbmNlcyAgIAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVEFHRklMRVMgICAgICAgICAgICAgICA9IAorR0VORVJBVEVfVEFHRklMRSAgICAgICA9IAorQUxMRVhURVJOQUxTICAgICAgICAgICA9IE5PCitFWFRFUk5BTF9HUk9VUFMgICAgICAgID0gWUVTCitQRVJMX1BBVEggICAgICAgICAgICAgID0gL3Vzci9iaW4vcGVybAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB0aGUgZG90IHRvb2wgICAKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NMQVNTX0RJQUdSQU1TICAgICAgICAgPSBZRVMKK0hBVkVfRE9UICAgICAgICAgICAgICAgPSBZRVMKK0NMQVNTX0dSQVBIICAgICAgICAgICAgPSBZRVMKK0NPTExBQk9SQVRJT05fR1JBUEggICAgPSBZRVMKK1RFTVBMQVRFX1JFTEFUSU9OUyAgICAgPSBZRVMKK0hJREVfVU5ET0NfUkVMQVRJT05TICAgPSBZRVMKK0lOQ0xVREVfR1JBUEggICAgICAgICAgPSBZRVMKK0lOQ0xVREVEX0JZX0dSQVBIICAgICAgPSBZRVMKK0dSQVBISUNBTF9ISUVSQVJDSFkgICAgPSBZRVMKK0RPVF9JTUFHRV9GT1JNQVQgICAgICAgPSBwbmcKK0RPVF9QQVRIICAgICAgICAgICAgICAgPSAKK0RPVEZJTEVfRElSUyAgICAgICAgICAgPSAKK01BWF9ET1RfR1JBUEhfV0lEVEggICAgPSAxMDI0CitNQVhfRE9UX0dSQVBIX0hFSUdIVCAgID0gMTAyNAorR0VORVJBVEVfTEVHRU5EICAgICAgICA9IFlFUworRE9UX0NMRUFOVVAgICAgICAgICAgICA9IFlFUworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDb25maWd1cmF0aW9uOjphZGRpdGlvbnMgcmVsYXRlZCB0byB0aGUgc2VhcmNoIGVuZ2luZSAgIAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorU0VBUkNIRU5HSU5FICAgICAgICAgICA9IE5PCisjQ0dJX05BTUUgICAgICAgICAgICAgICA9IHNlYXJjaC5jZ2kKKyNDR0lfVVJMICAgICAgICAgICAgICAgID0gCisjRE9DX1VSTCAgICAgICAgICAgICAgICA9IAorI0RPQ19BQlNQQVRIICAgICAgICAgICAgPSAKKyNCSU5fQUJTUEFUSCAgICAgICAgICAgID0gL3Vzci9sb2NhbC9iaW4vCisjRVhUX0RPQ19QQVRIUyAgICAgICAgICA9IApkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvZG9jL3NyY2RvYy9NYWtlZmlsZSBiL29wcm9maWxlLTAuOS43L2RvYy9zcmNkb2MvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTg0ODY2OQotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2RvYy9zcmNkb2MvTWFrZWZpbGUKQEAgLTAsMCArMSw5IEBACitET1hZR0VOPWRveHlnZW4KKworLlBIT05ZOiBjbGVhbgorCithbGw6IGNsZWFuCisJZG94eWdlbiBEb3h5ZmlsZQorCitjbGVhbjoKKwlybSAtcmYgaHRtbC8KZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2RvYy94c2wvY2F0YWxvZy0xLnhtbC5pbiBiL29wcm9maWxlLTAuOS43L2RvYy94c2wvY2F0YWxvZy0xLnhtbC5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YWI2ZTdhCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvZG9jL3hzbC9jYXRhbG9nLTEueG1sLmluCkBAIC0wLDAgKzEsMTYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPCFET0NUWVBFIGNhdGFsb2cgUFVCTElDICItLy9PQVNJUy9EVEQgRW50aXR5IFJlc29sdXRpb24gWE1MIENhdGFsb2cgVjEuMC8vRU4iCisJImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvY29tbWl0dGVlcy9lbnRpdHkvcmVsZWFzZS8xLjAvY2F0YWxvZy5kdGQiPgorCis8Y2F0YWxvZyB4bWxucz0idXJuOm9hc2lzOm5hbWVzOnRjOmVudGl0eTp4bWxuczp4bWw6Y2F0YWxvZyI+CisJPG5leHRDYXRhbG9nIGNhdGFsb2c9IkBYTUxfQ0FUQUxPR0AiIC8+CisKKwlAQ0FUX0VOVFJZX1NUQVJUQAorCTx1cmkgbmFtZT0iaHR0cDovL2RvY2Jvb2suc291cmNlZm9yZ2UubmV0L3JlbGVhc2UveHNsL2N1cnJlbnQveGh0bWwvZG9jYm9vay54c2wiCisJCXVyaT0iQERPQ0JPT0tfUk9PVEAveGh0bWwvZG9jYm9vay54c2wiLz4KKwk8dXJpIG5hbWU9Imh0dHA6Ly9kb2Nib29rLnNvdXJjZWZvcmdlLm5ldC9yZWxlYXNlL3hzbC9jdXJyZW50L3hodG1sL2NodW5rLnhzbCIKKwkJdXJpPSJARE9DQk9PS19ST09UQC94aHRtbC9jaHVuay54c2wiLz4KKwlAQ0FUX0VOVFJZX0VOREAKKworCTx1cmkgbmFtZT0ieHNsL3hodG1sLWNvbW1vbi54c2wiIHVyaT0iQHRvcF9zcmNkaXJAL2RvYy94c2wveGh0bWwtY29tbW9uLnhzbCIvPgorPC9jYXRhbG9nPgpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvZG9jL3hzbC94aHRtbC1jaHVuay54c2wgYi9vcHJvZmlsZS0wLjkuNy9kb2MveHNsL3hodG1sLWNodW5rLnhzbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzMyMGU4Ci0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvZG9jL3hzbC94aHRtbC1jaHVuay54c2wKQEAgLTAsMCArMSw1MiBAQAorPD94bWwgdmVyc2lvbj0nMS4wJz8+Cis8eHNsOnN0eWxlc2hlZXQgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iCisgdmVyc2lvbj0iMS4wIj4KKzx4c2w6aW1wb3J0IGhyZWY9Imh0dHA6Ly9kb2Nib29rLnNvdXJjZWZvcmdlLm5ldC9yZWxlYXNlL3hzbC9jdXJyZW50L3hodG1sL2NodW5rLnhzbCIvPgorPHhzbDppbXBvcnQgaHJlZj0ieGh0bWwtY29tbW9uLnhzbCIvPgorIAorPHhzbDp0ZW1wbGF0ZSBuYW1lPSJwcm9jZXNzLWNodW5rIj4KKyAgPHhzbDpwYXJhbSBuYW1lPSJwcmV2IiBzZWxlY3Q9Ii4iLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJuZXh0IiBzZWxlY3Q9Ii4iLz4KKyAKKyAgPHhzbDp2YXJpYWJsZSBuYW1lPSJpc2NodW5rIj4KKyAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iY2h1bmsiLz4KKyAgPC94c2w6dmFyaWFibGU+CisgCisgIDx4c2w6dmFyaWFibGUgbmFtZT0iY2h1bmtmbiI+CisgICAgPHhzbDppZiB0ZXN0PSIkaXNjaHVuaz0nMSciPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iY2h1bmstZmlsZW5hbWUiIHNlbGVjdD0iLiIvPgorICAgIDwveHNsOmlmPgorICA8L3hzbDp2YXJpYWJsZT4KKyAKKyAgPHhzbDppZiB0ZXN0PSIkaXNjaHVuaz0nMCciPgorICAgIDx4c2w6bWVzc2FnZT4KKyAgICAgIDx4c2w6dGV4dD5FcnJvciA8L3hzbDp0ZXh0PgorICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Im5hbWUoLikiLz4KKyAgICAgIDx4c2w6dGV4dD4gaXMgbm90IGEgY2h1bmshPC94c2w6dGV4dD4KKyAgICA8L3hzbDptZXNzYWdlPgorICA8L3hzbDppZj4KKyAKKyAgPHhzbDp2YXJpYWJsZSBuYW1lPSJmaWxlbmFtZSI+CisgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9Im1ha2UtcmVsYXRpdmUtZmlsZW5hbWUiPgorICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9ImJhc2UuZGlyIiBzZWxlY3Q9IiRiYXNlLmRpciIvPgorICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9ImJhc2UubmFtZSIgc2VsZWN0PSIkY2h1bmtmbiIvPgorICAgIDwveHNsOmNhbGwtdGVtcGxhdGU+CisgIDwveHNsOnZhcmlhYmxlPgorIAorPCEtLSBGSVhNRTogdXNlIFN0cmljdCB3aGVuIHRoZSBwcm9ibGVtcyB3aXRoIHdpZHRoIG9uIHRkL3RoIGFyZQorICBzb3J0ZWQgb3V0LiBOb3QgeWV0LiAtLT4KKyAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9IndyaXRlLmNodW5rLndpdGguZG9jdHlwZSI+CisgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9ImZpbGVuYW1lIiBzZWxlY3Q9IiRmaWxlbmFtZSIvPgorICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJpbmRlbnQiIHNlbGVjdD0iJ3llcyciLz4KKyAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJkb2N0eXBlLXB1YmxpYyI+LS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU48L3hzbDp3aXRoLXBhcmFtPgorICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9ImRvY3R5cGUtc3lzdGVtIj5odHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkPC94c2w6d2l0aC1wYXJhbT4KKyAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0iY29udGVudCI+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iY2h1bmstZWxlbWVudC1jb250ZW50Ij4KKyAgICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9InByZXYiIHNlbGVjdD0iJHByZXYiLz4KKyAgICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9Im5leHQiIHNlbGVjdD0iJG5leHQiLz4KKyAgICAgIDwveHNsOmNhbGwtdGVtcGxhdGU+CisgICAgPC94c2w6d2l0aC1wYXJhbT4KKyAgPC94c2w6Y2FsbC10ZW1wbGF0ZT4KKzwveHNsOnRlbXBsYXRlPgorIAorPC94c2w6c3R5bGVzaGVldD4KZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2RvYy94c2wveGh0bWwtY29tbW9uLnhzbCBiL29wcm9maWxlLTAuOS43L2RvYy94c2wveGh0bWwtY29tbW9uLnhzbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OWYyYmY3Ci0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvZG9jL3hzbC94aHRtbC1jb21tb24ueHNsCkBAIC0wLDAgKzEsNTUgQEAKKzx4c2w6c3R5bGVzaGVldCB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSIKKyB2ZXJzaW9uPSIxLjAiPgorCis8eHNsOnBhcmFtIG5hbWU9InVzZS5pZC5hcy5maWxlbmFtZSIgc2VsZWN0PSIxIi8+Cis8eHNsOnBhcmFtIG5hbWU9InNlY3Rpb24uYXV0b2xhYmVsIiBzZWxlY3Q9IjEiLz4KKzx4c2w6cGFyYW0gbmFtZT0iY2hhcHRlci5hdXRvbGFiZWwiIHNlbGVjdD0iMSIvPgorPHhzbDpwYXJhbSBuYW1lPSJ1bGluay50YXJnZXQiIHNlbGVjdD0iJyciLz4KKyAKKzx4c2w6cGFyYW0gbmFtZT0idmVyc2lvbiIvPgorPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ib3Byb2ZpbGV2ZXJzaW9uIj4KKyAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IiR2ZXJzaW9uIi8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPCEtLSBDdXN0b20gdGVtcGxhdGUgZm9yIHByb2dyYW1saXN0aW5nLCBzY3JlZW4gYW5kIHN5bm9wc2lzIHRvIGdlbmVyYXRlIGEgZ3JheQorICAgICBiYWNrZ3JvdW5kIHRvIHRoZSBpdGVtLiAtLT4KKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InByb2dyYW1saXN0aW5nfHNjcmVlbnxzeW5vcHNpcyI+CisgIDx4c2w6cGFyYW0gbmFtZT0ic3VwcHJlc3MtbnVtYmVycyIgc2VsZWN0PSInMCciLz4KKyAgPHhzbDp2YXJpYWJsZSBuYW1lPSJ2ZW5kb3IiIHNlbGVjdD0ic3lzdGVtLXByb3BlcnR5KCd4c2w6dmVuZG9yJykiLz4KKyAgPHhzbDp2YXJpYWJsZSBuYW1lPSJpZCI+PHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9Im9iamVjdC5pZCIvPjwveHNsOnZhcmlhYmxlPgorIAorICA8eHNsOmlmIHRlc3Q9IkBpZCI+CisgICAgPGEgaHJlZj0ieyRpZH0iLz4KKyAgPC94c2w6aWY+CisgCisgIDx4c2w6Y2hvb3NlPgorICAgIDx4c2w6d2hlbiB0ZXN0PSIkc3VwcHJlc3MtbnVtYmVycyA9ICcwJworICAgICAgICAgICAgICAgICAgICBhbmQgQGxpbmVudW1iZXJpbmcgPSAnbnVtYmVyZWQnCisgICAgICAgICAgICAgICAgICAgIGFuZCAkdXNlLmV4dGVuc2lvbnMgIT0gJzAnCisgICAgICAgICAgICAgICAgICAgIGFuZCAkbGluZW51bWJlcmluZy5leHRlbnNpb24gIT0gJzAnIj4KKyAgICAgIDx4c2w6dmFyaWFibGUgbmFtZT0icnRmIj4KKyAgICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMvPgorICAgICAgPC94c2w6dmFyaWFibGU+CisgICAgICA8IS0tIENoYW5nZSB0aGUgY29sb3IgYmFja2dyb3VuZCBjb2xvciBpbiB0aGUgbGluZSBiZWxvdy4gLS0+CisgICAgICA8dGFibGUgYm9yZGVyPSIwIiBzdHlsZT0iYmFja2dyb3VuZDogI0UwRTBFMDsiIHdpZHRoPSI5MCUiPgorICAgICAgPHRyPjx0ZD4KKyAgICAgIDxwcmUgY2xhc3M9IntuYW1lKC4pfSI+CisgICAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJudW1iZXIucnRmLmxpbmVzIj4KKyAgICAgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0icnRmIiBzZWxlY3Q9IiRydGYiLz4KKyAgICAgICAgPC94c2w6Y2FsbC10ZW1wbGF0ZT4KKyAgICAgIDwvcHJlPgorICAgICAgPC90ZD48L3RyPjwvdGFibGU+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOm90aGVyd2lzZT4KKyAgICAgIDwhLS0gQ2hhbmdlIHRoZSBjb2xvciBiYWNrZ3JvdW5kIGNvbG9yIGluIHRoZSBsaW5lIGJlbG93LiAtLT4KKyAgICAgIDx0YWJsZSBib3JkZXI9IjAiIHN0eWxlPSJiYWNrZ3JvdW5kOiAjRTBFMEUwOyIgd2lkdGg9IjkwJSI+CisgICAgICA8dHI+PHRkPgorICAgICAgPHByZSBjbGFzcz0ie25hbWUoLil9Ij4KKyAgICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMvPgorICAgICAgPC9wcmU+CisgICAgICA8L3RkPjwvdHI+PC90YWJsZT4KKyAgICA8L3hzbDpvdGhlcndpc2U+CisgIDwveHNsOmNob29zZT4KKzwveHNsOnRlbXBsYXRlPiAKKyAKKzwveHNsOnN0eWxlc2hlZXQ+CmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9kb2MveHNsL3hodG1sLnhzbCBiL29wcm9maWxlLTAuOS43L2RvYy94c2wveGh0bWwueHNsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxMjE3YTYKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9kb2MveHNsL3hodG1sLnhzbApAQCAtMCwwICsxLDEzIEBACis8P3htbCB2ZXJzaW9uPScxLjAnPz4KKzx4c2w6c3R5bGVzaGVldCB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSIKK3htbG5zOmRvYz0iaHR0cDovL253YWxzaC5jb20veHNsL2RvY3VtZW50YXRpb24vMS4wIiB2ZXJzaW9uPSIxLjAiPgorIAorPHhzbDppbXBvcnQgaHJlZj0iaHR0cDovL2RvY2Jvb2suc291cmNlZm9yZ2UubmV0L3JlbGVhc2UveHNsL2N1cnJlbnQveGh0bWwvZG9jYm9vay54c2wiLz4KKzx4c2w6aW1wb3J0IGhyZWY9InhodG1sLWNvbW1vbi54c2wiLz4KKyAKKzx4c2w6b3V0cHV0IG1ldGhvZD0ieG1sIiBlbmNvZGluZz0iSVNPLTg4NTktMSIgaW5kZW50PSJ5ZXMiCitkb2N0eXBlLXB1YmxpYz0iLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFN0cmljdC8vRU4iCitkb2N0eXBlLXN5c3RlbT0iaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtc3RyaWN0LmR0ZCIKKy8+CisgCis8L3hzbDpzdHlsZXNoZWV0PgpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL01ha2VmaWxlLmFtIGIvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL01ha2VmaWxlLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0MTAxY2MKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9ldmVudHMvTWFrZWZpbGUuYW0KQEAgLTAsMCArMSw5NSBAQAorZXZlbnRfZmlsZXMgPSBcCisJYWxwaGEvZXY0L2V2ZW50cyBhbHBoYS9ldjQvdW5pdF9tYXNrcyBcCisJYWxwaGEvZXY1L2V2ZW50cyBhbHBoYS9ldjUvdW5pdF9tYXNrcyBcCisJYWxwaGEvZXY2Ny9ldmVudHMgYWxwaGEvZXY2Ny91bml0X21hc2tzIFwKKwlhbHBoYS9ldjYvZXZlbnRzIGFscGhhL2V2Ni91bml0X21hc2tzIFwKKwlhbHBoYS9wY2E1Ni9ldmVudHMgYWxwaGEvcGNhNTYvdW5pdF9tYXNrcyBcCisJaTM4Ni9hdGhsb24vZXZlbnRzIGkzODYvYXRobG9uL3VuaXRfbWFza3MgXAorCWkzODYvY29yZV8yL2V2ZW50cyBpMzg2L2NvcmVfMi91bml0X21hc2tzIFwKKwlpMzg2L3A0L2V2ZW50cyBpMzg2L3A0LWh0L2V2ZW50cyBcCisJaTM4Ni9wNC1odC91bml0X21hc2tzIGkzODYvcDQvdW5pdF9tYXNrcyBcCisJaTM4Ni9waWkvZXZlbnRzIGkzODYvcGlpL3VuaXRfbWFza3MgXAorCWkzODYvcGlpaS9ldmVudHMgaTM4Ni9waWlpL3VuaXRfbWFza3MgXAorCWkzODYvcHByby9ldmVudHMgaTM4Ni9wcHJvL3VuaXRfbWFza3MgXAorCWkzODYvcDZfbW9iaWxlL2V2ZW50cyBpMzg2L3A2X21vYmlsZS91bml0X21hc2tzIFwKKwlpMzg2L2NvcmUvZXZlbnRzIGkzODYvY29yZS91bml0X21hc2tzIFwKKwlpMzg2L2FyY2hfcGVyZm1vbi9ldmVudHMgaTM4Ni9hcmNoX3BlcmZtb24vdW5pdF9tYXNrcyBcCisJaTM4Ni9hdG9tL2V2ZW50cyBpMzg2L2F0b20vdW5pdF9tYXNrcyBcCisJaTM4Ni9jb3JlX2k3L2V2ZW50cyBpMzg2L2NvcmVfaTcvdW5pdF9tYXNrcyBcCisJaTM4Ni9uZWhhbGVtL2V2ZW50cyBpMzg2L25laGFsZW0vdW5pdF9tYXNrcyBcCisJaTM4Ni93ZXN0bWVyZS9ldmVudHMgaTM4Ni93ZXN0bWVyZS91bml0X21hc2tzIFwKKwlpMzg2L3NhbmR5YnJpZGdlL2V2ZW50cyBpMzg2L3NhbmR5YnJpZGdlL3VuaXRfbWFza3MgXAorCWlhNjQvaWE2NC9ldmVudHMgaWE2NC9pYTY0L3VuaXRfbWFza3MgXAorCWlhNjQvaXRhbml1bTIvZXZlbnRzIGlhNjQvaXRhbml1bTIvdW5pdF9tYXNrcyBcCisJaWE2NC9pdGFuaXVtL2V2ZW50cyBpYTY0L2l0YW5pdW0vdW5pdF9tYXNrcyBcCisJcHBjNjQvcG93ZXI0L2V2ZW50cyBwcGM2NC9wb3dlcjQvZXZlbnRfbWFwcGluZ3MgcHBjNjQvcG93ZXI0L3VuaXRfbWFza3MgXAorCXBwYzY0L3Bvd2VyNS9ldmVudHMgcHBjNjQvcG93ZXI1L2V2ZW50X21hcHBpbmdzIHBwYzY0L3Bvd2VyNS91bml0X21hc2tzIFwKKwlwcGM2NC9wb3dlcjUrL2V2ZW50cyBwcGM2NC9wb3dlcjUrL2V2ZW50X21hcHBpbmdzIHBwYzY0L3Bvd2VyNSsvdW5pdF9tYXNrcyBcCisJcHBjNjQvcG93ZXI1KysvZXZlbnRzIHBwYzY0L3Bvd2VyNSsrL2V2ZW50X21hcHBpbmdzIHBwYzY0L3Bvd2VyNSsrL3VuaXRfbWFza3MgXAorCXBwYzY0L3Bvd2VyNi9ldmVudHMgcHBjNjQvcG93ZXI2L2V2ZW50X21hcHBpbmdzIHBwYzY0L3Bvd2VyNi91bml0X21hc2tzIFwKKwlwcGM2NC9wb3dlcjcvZXZlbnRzIHBwYzY0L3Bvd2VyNy9ldmVudF9tYXBwaW5ncyBwcGM2NC9wb3dlcjcvdW5pdF9tYXNrcyBcCisJcHBjNjQvOTcwL2V2ZW50cyBwcGM2NC85NzAvZXZlbnRfbWFwcGluZ3MgcHBjNjQvOTcwL3VuaXRfbWFza3MgXAorCXBwYzY0Lzk3ME1QL2V2ZW50cyBwcGM2NC85NzBNUC9ldmVudF9tYXBwaW5ncyBwcGM2NC85NzBNUC91bml0X21hc2tzIFwKKwlwcGM2NC9pYm0tY29tcGF0LXYxL2V2ZW50cyBwcGM2NC9pYm0tY29tcGF0LXYxL2V2ZW50X21hcHBpbmdzIHBwYzY0L2libS1jb21wYXQtdjEvdW5pdF9tYXNrcyBcCisJcHBjNjQvcGE2dC9ldmVudHMgcHBjNjQvcGE2dC9ldmVudF9tYXBwaW5ncyBwcGM2NC9wYTZ0L3VuaXRfbWFza3MgXAorCXBwYzY0L2NlbGwtYmUvZXZlbnRzIHBwYzY0L2NlbGwtYmUvdW5pdF9tYXNrcyBcCisJcnRjL2V2ZW50cyBydGMvdW5pdF9tYXNrcyBcCisJeDg2LTY0L2hhbW1lci9ldmVudHMgeDg2LTY0L2hhbW1lci91bml0X21hc2tzIFwKKwl4ODYtNjQvZmFtaWx5MTAvZXZlbnRzIHg4Ni02NC9mYW1pbHkxMC91bml0X21hc2tzIFwKKwl4ODYtNjQvZmFtaWx5MTFoL2V2ZW50cyB4ODYtNjQvZmFtaWx5MTFoL3VuaXRfbWFza3MgXAorCXg4Ni02NC9mYW1pbHkxMmgvZXZlbnRzIHg4Ni02NC9mYW1pbHkxMmgvdW5pdF9tYXNrcyBcCisJeDg2LTY0L2ZhbWlseTE0aC9ldmVudHMgeDg2LTY0L2ZhbWlseTE0aC91bml0X21hc2tzIFwKKwl4ODYtNjQvZmFtaWx5MTVoL2V2ZW50cyB4ODYtNjQvZmFtaWx5MTVoL3VuaXRfbWFza3MgXAorCWFybS94c2NhbGUxL2V2ZW50cyBhcm0veHNjYWxlMS91bml0X21hc2tzIFwKKwlhcm0veHNjYWxlMi9ldmVudHMgYXJtL3hzY2FsZTIvdW5pdF9tYXNrcyBcCisJYXJtL2FybXY2L2V2ZW50cyBhcm0vYXJtdjYvdW5pdF9tYXNrcyBcCisJYXJtL2FybXY3LWNvbW1vbi9ldmVudHMgYXJtL2FybXY3LWNvbW1vbi91bml0X21hc2tzIFwKKwlhcm0vYXJtdjcvZXZlbnRzIGFybS9hcm12Ny91bml0X21hc2tzIFwKKwlhcm0vYXJtdjctc2NvcnBpb24vZXZlbnRzIGFybS9hcm12Ny1zY29ycGlvbi91bml0X21hc2tzIFwKKwlhcm0vYXJtdjctc2NvcnBpb25tcC9ldmVudHMgYXJtL2FybXY3LXNjb3JwaW9ubXAvdW5pdF9tYXNrcyBcCisJYXJtL2FybXY3LWNhOS9ldmVudHMgYXJtL2FybXY3LWNhOS91bml0X21hc2tzIFwKKwlhcm0vbXBjb3JlL2V2ZW50cyBhcm0vbXBjb3JlL3VuaXRfbWFza3MgXAorCWF2cjMyL2V2ZW50cyBhdnIzMi91bml0X21hc2tzIFwKKwltaXBzLzIwSy9ldmVudHMgbWlwcy8yMEsvdW5pdF9tYXNrcyBcCisJbWlwcy8yNEsvZXZlbnRzIG1pcHMvMjRLL3VuaXRfbWFza3MgXAorCW1pcHMvMjVLL2V2ZW50cyBtaXBzLzI1Sy91bml0X21hc2tzIFwKKwltaXBzLzM0Sy9ldmVudHMgbWlwcy8zNEsvdW5pdF9tYXNrcyBcCisJbWlwcy81Sy9ldmVudHMgbWlwcy81Sy91bml0X21hc2tzIFwKKwltaXBzL3JtNzAwMC9ldmVudHMgbWlwcy9ybTcwMDAvdW5pdF9tYXNrcyBcCisJbWlwcy9ybTkwMDAvZXZlbnRzIG1pcHMvcm05MDAwL3VuaXRfbWFza3MgXAorCW1pcHMvc2IxL2V2ZW50cyBtaXBzL3NiMS91bml0X21hc2tzIFwKKwltaXBzL3IxMDAwMC9ldmVudHMgbWlwcy9yMTAwMDAvdW5pdF9tYXNrcyBcCisJbWlwcy9yMTIwMDAvZXZlbnRzIG1pcHMvcjEyMDAwL3VuaXRfbWFza3MgXAorCW1pcHMvdnI1NDMyL2V2ZW50cyBtaXBzL3ZyNTQzMi91bml0X21hc2tzIFwKKwltaXBzL3ZyNTUwMC9ldmVudHMgbWlwcy92cjU1MDAvdW5pdF9tYXNrcyBcCisJbWlwcy9sb29uZ3NvbjIvZXZlbnRzIG1pcHMvbG9vbmdzb24yL3VuaXRfbWFza3MgXAorCW1pcHMvMTAwNEsvZXZlbnRzIG1pcHMvMTAwNEsvdW5pdF9tYXNrcyBcCisJbWlwcy83NEsvZXZlbnRzIG1pcHMvNzRLL3VuaXRfbWFza3MgXAorCXBwYy83NDUwL2V2ZW50cyBwcGMvNzQ1MC91bml0X21hc2tzIFwKKwlwcGMvZTUwMC9ldmVudHMgcHBjL2U1MDAvdW5pdF9tYXNrcyBcCisJcHBjL2U1MDB2Mi9ldmVudHMgcHBjL2U1MDB2Mi91bml0X21hc2tzIFwKKwlwcGMvZTMwMC9ldmVudHMgcHBjL2UzMDAvdW5pdF9tYXNrcworCitpbnN0YWxsLWRhdGEtbG9jYWw6CisJZm9yIGkgaW4gJHtldmVudF9maWxlc30gOyBkbyBcCisJCWRpcj1gZGlybmFtZSAkJGlgIDsgXAorCQlta2RpciAtcCAkKERFU1RESVIpJChwa2dkYXRhZGlyKS8kJGRpciA7IFwKKwkJJChJTlNUQUxMX0RBVEEpICQodG9wX3NyY2RpcikvZXZlbnRzLyQkaSAkKERFU1RESVIpJChwa2dkYXRhZGlyKS8kJGkgOyBcCisJZG9uZQorCit1bmluc3RhbGwtbG9jYWw6CisJZm9yIGkgaW4gJHtldmVudF9maWxlc30gOyBkbyBcCisJCWRpcj1gZGlybmFtZSAkJGlgIDsgXAorCQlhcmNoZGlyPWBkaXJuYW1lICQkZGlyYCA7IFwKKwkJaWYgdGVzdCAtZiAkKERFU1RESVIpJChwa2dkYXRhZGlyKS8kJGkgOyB0aGVuIFwKKwkJCXJtICQoREVTVERJUikkKHBrZ2RhdGFkaXIpLyQkaSA7IFwKKwkJZmk7ICBcCisJCWlmIHRlc3QgLWQgJChERVNURElSKSQocGtnZGF0YWRpcikvJCRkaXIgOyB0aGVuIFwKKwkJCXJtZGlyIC0taWdub3JlLWZhaWwtb24tbm9uLWVtcHR5ICQoREVTVERJUikkKHBrZ2RhdGFkaXIpLyQkZGlyIDsgXAorCQlmaTsgXAorCQlpZiB0ZXN0ICQkYXJjaGRpciAhPSAiLiIgLWEgLWQgJChERVNURElSKSQocGtnZGF0YWRpcikvJCRhcmNoZGlyIDsgdGhlbiBcCisJCQlybWRpciAtLWlnbm9yZS1mYWlsLW9uLW5vbi1lbXB0eSAkKERFU1RESVIpJChwa2dkYXRhZGlyKS8kJGFyY2hkaXIgOyBcCisJCWZpOyBcCisJZG9uZQorCitFWFRSQV9ESVNUID0gJChldmVudF9maWxlcykKZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2V2ZW50cy9NYWtlZmlsZS5pbiBiL29wcm9maWxlLTAuOS43L2V2ZW50cy9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZGQ3MGRiCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsNTA0IEBACisjIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjExLjEgZnJvbSBNYWtlZmlsZS5hbS4KKyMgQGNvbmZpZ3VyZV9pbnB1dEAKKworIyBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsCisjIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyMgSW5jLgorIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAorIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCisjIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworQFNFVF9NQUtFQAorVlBBVEggPSBAc3JjZGlyQAorcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACitwa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAorYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAoraW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKK2luc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKK2luc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYworSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKK3RyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKK05PUk1BTF9JTlNUQUxMID0gOgorUFJFX0lOU1RBTEwgPSA6CitQT1NUX0lOU1RBTEwgPSA6CitOT1JNQUxfVU5JTlNUQUxMID0gOgorUFJFX1VOSU5TVEFMTCA9IDoKK1BPU1RfVU5JTlNUQUxMID0gOgorYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKK2hvc3RfdHJpcGxldCA9IEBob3N0QAorc3ViZGlyID0gZXZlbnRzCitESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKHNyY2RpcikvTWFrZWZpbGUuaW4KK0FDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKK2FtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL200L2JpbnV0aWxzLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2J1aWx0aW5leHBlY3QubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY2VsbHNwdWJmZHN1cHBvcnQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY29tcGlsZXJvcHRpb24ubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY29uZmlnbW9kdWxlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2NvcHlpZmNoYW5nZS5tNCAkKHRvcF9zcmNkaXIpL200L2RvY2Jvb2subTQgXAorCSQodG9wX3NyY2RpcikvbTQvZXh0cmFkaXJzLm00ICQodG9wX3NyY2RpcikvbTQvZmluZGtlcm5lbC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9rZXJuZWxvcHRpb24ubTQgXAorCSQodG9wX3NyY2RpcikvbTQva2VybmVsdmVyc2lvbi5tNCAkKHRvcF9zcmNkaXIpL200L2xpYnRvb2wubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbHRvcHRpb25zLm00ICQodG9wX3NyY2RpcikvbTQvbHRzdWdhci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9sdHZlcnNpb24ubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdH5vYnNvbGV0ZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9tYWxsb2NhdHRyaWJ1dGUubTQgXAorCSQodG9wX3NyY2RpcikvbTQvcG9wdGNvbnN0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3ByZWNvbXBpbGVkaGVhZGVyLm00ICQodG9wX3NyY2RpcikvbTQvcXQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvcmVzdWx0eW4ubTQgJCh0b3Bfc3JjZGlyKS9tNC9zc3RyZWFtLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3R5cGVkZWYubTQgJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuaW4KK2FtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCisJJChBQ0xPQ0FMX000KQorbWtpbnN0YWxsZGlycyA9ICQoaW5zdGFsbF9zaCkgLWQKK0NPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvY29uZmlnLmgKK0NPTkZJR19DTEVBTl9GSUxFUyA9CitDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMgPQorU09VUkNFUyA9CitESVNUX1NPVVJDRVMgPQorRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKK0FDTE9DQUwgPSBAQUNMT0NBTEAKK0FNVEFSID0gQEFNVEFSQAorQVIgPSBAQVJACitBVVRPQ09ORiA9IEBBVVRPQ09ORkAKK0FVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKK0FVVE9NQUtFID0gQEFVVE9NQUtFQAorQVdLID0gQEFXS0AKK0JGRF9MSUJTID0gQEJGRF9MSUJTQAorQ0FUX0VOVFJZX0VORCA9IEBDQVRfRU5UUllfRU5EQAorQ0FUX0VOVFJZX1NUQVJUID0gQENBVF9FTlRSWV9TVEFSVEAKK0NDID0gQENDQAorQ0NERVBNT0RFID0gQENDREVQTU9ERUAKK0NGTEFHUyA9IEBDRkxBR1NACitDUFAgPSBAQ1BQQAorQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACitDWFggPSBAQ1hYQAorQ1hYQ1BQID0gQENYWENQUEAKK0NYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKK0NYWEZMQUdTID0gQENYWEZMQUdTQAorQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKK0RBVEUgPSBAREFURUAKK0RFRlMgPSBAREVGU0AKK0RFUERJUiA9IEBERVBESVJACitET0NCT09LX1JPT1QgPSBARE9DQk9PS19ST09UQAorRFNZTVVUSUwgPSBARFNZTVVUSUxACitEVU1QQklOID0gQERVTVBCSU5ACitFQ0hPX0MgPSBARUNIT19DQAorRUNIT19OID0gQEVDSE9fTkAKK0VDSE9fVCA9IEBFQ0hPX1RACitFR1JFUCA9IEBFR1JFUEAKK0VYRUVYVCA9IEBFWEVFWFRACitFWFRSQV9DRkxBR1NfTU9EVUxFID0gQEVYVFJBX0NGTEFHU19NT0RVTEVACitGR1JFUCA9IEBGR1JFUEAKK0dSRVAgPSBAR1JFUEAKK0lOU1RBTEwgPSBASU5TVEFMTEAKK0lOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACitJTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAorSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACitJTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAorSkFWQV9IT01FRElSID0gQEpBVkFfSE9NRURJUkAKK0tJTkMgPSBAS0lOQ0AKK0tTUkMgPSBAS1NSQ0AKK0tWRVJTID0gQEtWRVJTQAorTEQgPSBATERACitMREZMQUdTID0gQExERkxBR1NACitMSUJFUlRZX0xJQlMgPSBATElCRVJUWV9MSUJTQAorTElCT0JKUyA9IEBMSUJPQkpTQAorTElCUyA9IEBMSUJTQAorTElCVE9PTCA9IEBMSUJUT09MQAorTElQTyA9IEBMSVBPQAorTE5fUyA9IEBMTl9TQAorTFRMSUJPQkpTID0gQExUTElCT0JKU0AKK01BS0VJTkZPID0gQE1BS0VJTkZPQAorTUtESVJfUCA9IEBNS0RJUl9QQAorTU9DID0gQE1PQ0AKK01PRElOU1RBTExESVIgPSBATU9ESU5TVEFMTERJUkAKK05NID0gQE5NQAorTk1FRElUID0gQE5NRURJVEAKK09CSkRVTVAgPSBAT0JKRFVNUEAKK09CSkVYVCA9IEBPQkpFWFRACitPUFJPRklMRV9ESVIgPSBAT1BST0ZJTEVfRElSQAorT1BST0ZJTEVfTU9EVUxFX0FSQ0ggPSBAT1BST0ZJTEVfTU9EVUxFX0FSQ0hACitPUF9DRkxBR1MgPSBAT1BfQ0ZMQUdTQAorT1BfQ1hYRkxBR1MgPSBAT1BfQ1hYRkxBR1NACitPUF9ET0NESVIgPSBAT1BfRE9DRElSQAorT1RPT0wgPSBAT1RPT0xACitPVE9PTDY0ID0gQE9UT09MNjRACitQQUNLQUdFID0gQFBBQ0tBR0VACitQQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKK1BBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACitQQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKK1BBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACitQQUNLQUdFX1VSTCA9IEBQQUNLQUdFX1VSTEAKK1BBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACitQQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKK1BLR19DT05GSUcgPSBAUEtHX0NPTkZJR0AKK1BLR19DT05GSUdfTElCRElSID0gQFBLR19DT05GSUdfTElCRElSQAorUEtHX0NPTkZJR19QQVRIID0gQFBLR19DT05GSUdfUEFUSEAKK1BPUFRfTElCUyA9IEBQT1BUX0xJQlNACitQVFJESUZGX1RfVFlQRSA9IEBQVFJESUZGX1RfVFlQRUAKK1FUX0NGTEFHUyA9IEBRVF9DRkxBR1NACitRVF9JTkNMVURFUyA9IEBRVF9JTkNMVURFU0AKK1FUX0xERkxBR1MgPSBAUVRfTERGTEFHU0AKK1FUX0xJQiA9IEBRVF9MSUJACitRVF9MSUJTID0gQFFUX0xJQlNACitRVF9WRVJTSU9OID0gQFFUX1ZFUlNJT05ACitSQU5MSUIgPSBAUkFOTElCQAorU0VEID0gQFNFREAKK1NFVF9NQUtFID0gQFNFVF9NQUtFQAorU0hFTEwgPSBAU0hFTExACitTSVpFX1RfVFlQRSA9IEBTSVpFX1RfVFlQRUAKK1NUUklQID0gQFNUUklQQAorVUlDID0gQFVJQ0AKK1VJQ2hlbHAgPSBAVUlDaGVscEAKK1ZFUlNJT04gPSBAVkVSU0lPTkAKK1hNS01GID0gQFhNS01GQAorWE1MX0NBVEFMT0cgPSBAWE1MX0NBVEFMT0dACitYU0xUUFJPQyA9IEBYU0xUUFJPQ0AKK1hTTFRQUk9DX0ZMQUdTID0gQFhTTFRQUk9DX0ZMQUdTQAorWF9DRkxBR1MgPSBAWF9DRkxBR1NACitYX0VYVFJBX0xJQlMgPSBAWF9FWFRSQV9MSUJTQAorWF9MSUJTID0gQFhfTElCU0AKK1hfUFJFX0xJQlMgPSBAWF9QUkVfTElCU0AKK2Fic19idWlsZGRpciA9IEBhYnNfYnVpbGRkaXJACithYnNfc3JjZGlyID0gQGFic19zcmNkaXJACithYnNfdG9wX2J1aWxkZGlyID0gQGFic190b3BfYnVpbGRkaXJACithYnNfdG9wX3NyY2RpciA9IEBhYnNfdG9wX3NyY2RpckAKK2FjX2N0X0NDID0gQGFjX2N0X0NDQAorYWNfY3RfQ1hYID0gQGFjX2N0X0NYWEAKK2FjX2N0X0RVTVBCSU4gPSBAYWNfY3RfRFVNUEJJTkAKK2FtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAorYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKK2FtX19xdW90ZSA9IEBhbV9fcXVvdGVACithbV9fdGFyID0gQGFtX190YXJACithbV9fdW50YXIgPSBAYW1fX3VudGFyQAorYmluZGlyID0gQGJpbmRpckAKK2J1aWxkID0gQGJ1aWxkQAorYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACitidWlsZF9jcHUgPSBAYnVpbGRfY3B1QAorYnVpbGRfb3MgPSBAYnVpbGRfb3NACitidWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAorYnVpbGRkaXIgPSBAYnVpbGRkaXJACitkYXRhZGlyID0gQGRhdGFkaXJACitkYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKK2RvY2RpciA9IEBkb2NkaXJACitkdmlkaXIgPSBAZHZpZGlyQAorZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACitob3N0ID0gQGhvc3RACitob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACitob3N0X2NwdSA9IEBob3N0X2NwdUAKK2hvc3Rfb3MgPSBAaG9zdF9vc0AKK2hvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAoraHRtbGRpciA9IEBodG1sZGlyQAoraW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAoraW5mb2RpciA9IEBpbmZvZGlyQAoraW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAorbGliZGlyID0gQGxpYmRpckAKK2xpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKK2xvY2FsZWRpciA9IEBsb2NhbGVkaXJACitsb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACitsdF9FQ0hPID0gQGx0X0VDSE9ACittYW5kaXIgPSBAbWFuZGlyQAorbWtkaXJfcCA9IEBta2Rpcl9wQAorb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAorcGRmZGlyID0gQHBkZmRpckAKK3ByZWZpeCA9IEBwcmVmaXhACitwcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACitwc2RpciA9IEBwc2RpckAKK3NiaW5kaXIgPSBAc2JpbmRpckAKK3NoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAorc3JjZGlyID0gQHNyY2RpckAKK3N5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKK3RhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACit0b3BfYnVpbGRfcHJlZml4ID0gQHRvcF9idWlsZF9wcmVmaXhACit0b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAordG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAordG9wZGlyID0gQHRvcGRpckAKK2V2ZW50X2ZpbGVzID0gXAorCWFscGhhL2V2NC9ldmVudHMgYWxwaGEvZXY0L3VuaXRfbWFza3MgXAorCWFscGhhL2V2NS9ldmVudHMgYWxwaGEvZXY1L3VuaXRfbWFza3MgXAorCWFscGhhL2V2NjcvZXZlbnRzIGFscGhhL2V2NjcvdW5pdF9tYXNrcyBcCisJYWxwaGEvZXY2L2V2ZW50cyBhbHBoYS9ldjYvdW5pdF9tYXNrcyBcCisJYWxwaGEvcGNhNTYvZXZlbnRzIGFscGhhL3BjYTU2L3VuaXRfbWFza3MgXAorCWkzODYvYXRobG9uL2V2ZW50cyBpMzg2L2F0aGxvbi91bml0X21hc2tzIFwKKwlpMzg2L2NvcmVfMi9ldmVudHMgaTM4Ni9jb3JlXzIvdW5pdF9tYXNrcyBcCisJaTM4Ni9wNC9ldmVudHMgaTM4Ni9wNC1odC9ldmVudHMgXAorCWkzODYvcDQtaHQvdW5pdF9tYXNrcyBpMzg2L3A0L3VuaXRfbWFza3MgXAorCWkzODYvcGlpL2V2ZW50cyBpMzg2L3BpaS91bml0X21hc2tzIFwKKwlpMzg2L3BpaWkvZXZlbnRzIGkzODYvcGlpaS91bml0X21hc2tzIFwKKwlpMzg2L3Bwcm8vZXZlbnRzIGkzODYvcHByby91bml0X21hc2tzIFwKKwlpMzg2L3A2X21vYmlsZS9ldmVudHMgaTM4Ni9wNl9tb2JpbGUvdW5pdF9tYXNrcyBcCisJaTM4Ni9jb3JlL2V2ZW50cyBpMzg2L2NvcmUvdW5pdF9tYXNrcyBcCisJaTM4Ni9hcmNoX3BlcmZtb24vZXZlbnRzIGkzODYvYXJjaF9wZXJmbW9uL3VuaXRfbWFza3MgXAorCWkzODYvYXRvbS9ldmVudHMgaTM4Ni9hdG9tL3VuaXRfbWFza3MgXAorCWkzODYvY29yZV9pNy9ldmVudHMgaTM4Ni9jb3JlX2k3L3VuaXRfbWFza3MgXAorCWkzODYvbmVoYWxlbS9ldmVudHMgaTM4Ni9uZWhhbGVtL3VuaXRfbWFza3MgXAorCWkzODYvd2VzdG1lcmUvZXZlbnRzIGkzODYvd2VzdG1lcmUvdW5pdF9tYXNrcyBcCisJaTM4Ni9zYW5keWJyaWRnZS9ldmVudHMgaTM4Ni9zYW5keWJyaWRnZS91bml0X21hc2tzIFwKKwlpYTY0L2lhNjQvZXZlbnRzIGlhNjQvaWE2NC91bml0X21hc2tzIFwKKwlpYTY0L2l0YW5pdW0yL2V2ZW50cyBpYTY0L2l0YW5pdW0yL3VuaXRfbWFza3MgXAorCWlhNjQvaXRhbml1bS9ldmVudHMgaWE2NC9pdGFuaXVtL3VuaXRfbWFza3MgXAorCXBwYzY0L3Bvd2VyNC9ldmVudHMgcHBjNjQvcG93ZXI0L2V2ZW50X21hcHBpbmdzIHBwYzY0L3Bvd2VyNC91bml0X21hc2tzIFwKKwlwcGM2NC9wb3dlcjUvZXZlbnRzIHBwYzY0L3Bvd2VyNS9ldmVudF9tYXBwaW5ncyBwcGM2NC9wb3dlcjUvdW5pdF9tYXNrcyBcCisJcHBjNjQvcG93ZXI1Ky9ldmVudHMgcHBjNjQvcG93ZXI1Ky9ldmVudF9tYXBwaW5ncyBwcGM2NC9wb3dlcjUrL3VuaXRfbWFza3MgXAorCXBwYzY0L3Bvd2VyNSsrL2V2ZW50cyBwcGM2NC9wb3dlcjUrKy9ldmVudF9tYXBwaW5ncyBwcGM2NC9wb3dlcjUrKy91bml0X21hc2tzIFwKKwlwcGM2NC9wb3dlcjYvZXZlbnRzIHBwYzY0L3Bvd2VyNi9ldmVudF9tYXBwaW5ncyBwcGM2NC9wb3dlcjYvdW5pdF9tYXNrcyBcCisJcHBjNjQvcG93ZXI3L2V2ZW50cyBwcGM2NC9wb3dlcjcvZXZlbnRfbWFwcGluZ3MgcHBjNjQvcG93ZXI3L3VuaXRfbWFza3MgXAorCXBwYzY0Lzk3MC9ldmVudHMgcHBjNjQvOTcwL2V2ZW50X21hcHBpbmdzIHBwYzY0Lzk3MC91bml0X21hc2tzIFwKKwlwcGM2NC85NzBNUC9ldmVudHMgcHBjNjQvOTcwTVAvZXZlbnRfbWFwcGluZ3MgcHBjNjQvOTcwTVAvdW5pdF9tYXNrcyBcCisJcHBjNjQvaWJtLWNvbXBhdC12MS9ldmVudHMgcHBjNjQvaWJtLWNvbXBhdC12MS9ldmVudF9tYXBwaW5ncyBwcGM2NC9pYm0tY29tcGF0LXYxL3VuaXRfbWFza3MgXAorCXBwYzY0L3BhNnQvZXZlbnRzIHBwYzY0L3BhNnQvZXZlbnRfbWFwcGluZ3MgcHBjNjQvcGE2dC91bml0X21hc2tzIFwKKwlwcGM2NC9jZWxsLWJlL2V2ZW50cyBwcGM2NC9jZWxsLWJlL3VuaXRfbWFza3MgXAorCXJ0Yy9ldmVudHMgcnRjL3VuaXRfbWFza3MgXAorCXg4Ni02NC9oYW1tZXIvZXZlbnRzIHg4Ni02NC9oYW1tZXIvdW5pdF9tYXNrcyBcCisJeDg2LTY0L2ZhbWlseTEwL2V2ZW50cyB4ODYtNjQvZmFtaWx5MTAvdW5pdF9tYXNrcyBcCisJeDg2LTY0L2ZhbWlseTExaC9ldmVudHMgeDg2LTY0L2ZhbWlseTExaC91bml0X21hc2tzIFwKKwl4ODYtNjQvZmFtaWx5MTJoL2V2ZW50cyB4ODYtNjQvZmFtaWx5MTJoL3VuaXRfbWFza3MgXAorCXg4Ni02NC9mYW1pbHkxNGgvZXZlbnRzIHg4Ni02NC9mYW1pbHkxNGgvdW5pdF9tYXNrcyBcCisJeDg2LTY0L2ZhbWlseTE1aC9ldmVudHMgeDg2LTY0L2ZhbWlseTE1aC91bml0X21hc2tzIFwKKwlhcm0veHNjYWxlMS9ldmVudHMgYXJtL3hzY2FsZTEvdW5pdF9tYXNrcyBcCisJYXJtL3hzY2FsZTIvZXZlbnRzIGFybS94c2NhbGUyL3VuaXRfbWFza3MgXAorCWFybS9hcm12Ni9ldmVudHMgYXJtL2FybXY2L3VuaXRfbWFza3MgXAorCWFybS9hcm12Ny1jb21tb24vZXZlbnRzIGFybS9hcm12Ny1jb21tb24vdW5pdF9tYXNrcyBcCisJYXJtL2FybXY3L2V2ZW50cyBhcm0vYXJtdjcvdW5pdF9tYXNrcyBcCisJYXJtL2FybXY3LXNjb3JwaW9uL2V2ZW50cyBhcm0vYXJtdjctc2NvcnBpb24vdW5pdF9tYXNrcyBcCisJYXJtL2FybXY3LXNjb3JwaW9ubXAvZXZlbnRzIGFybS9hcm12Ny1zY29ycGlvbm1wL3VuaXRfbWFza3MgXAorCWFybS9hcm12Ny1jYTkvZXZlbnRzIGFybS9hcm12Ny1jYTkvdW5pdF9tYXNrcyBcCisJYXJtL21wY29yZS9ldmVudHMgYXJtL21wY29yZS91bml0X21hc2tzIFwKKwlhdnIzMi9ldmVudHMgYXZyMzIvdW5pdF9tYXNrcyBcCisJbWlwcy8yMEsvZXZlbnRzIG1pcHMvMjBLL3VuaXRfbWFza3MgXAorCW1pcHMvMjRLL2V2ZW50cyBtaXBzLzI0Sy91bml0X21hc2tzIFwKKwltaXBzLzI1Sy9ldmVudHMgbWlwcy8yNUsvdW5pdF9tYXNrcyBcCisJbWlwcy8zNEsvZXZlbnRzIG1pcHMvMzRLL3VuaXRfbWFza3MgXAorCW1pcHMvNUsvZXZlbnRzIG1pcHMvNUsvdW5pdF9tYXNrcyBcCisJbWlwcy9ybTcwMDAvZXZlbnRzIG1pcHMvcm03MDAwL3VuaXRfbWFza3MgXAorCW1pcHMvcm05MDAwL2V2ZW50cyBtaXBzL3JtOTAwMC91bml0X21hc2tzIFwKKwltaXBzL3NiMS9ldmVudHMgbWlwcy9zYjEvdW5pdF9tYXNrcyBcCisJbWlwcy9yMTAwMDAvZXZlbnRzIG1pcHMvcjEwMDAwL3VuaXRfbWFza3MgXAorCW1pcHMvcjEyMDAwL2V2ZW50cyBtaXBzL3IxMjAwMC91bml0X21hc2tzIFwKKwltaXBzL3ZyNTQzMi9ldmVudHMgbWlwcy92cjU0MzIvdW5pdF9tYXNrcyBcCisJbWlwcy92cjU1MDAvZXZlbnRzIG1pcHMvdnI1NTAwL3VuaXRfbWFza3MgXAorCW1pcHMvbG9vbmdzb24yL2V2ZW50cyBtaXBzL2xvb25nc29uMi91bml0X21hc2tzIFwKKwltaXBzLzEwMDRLL2V2ZW50cyBtaXBzLzEwMDRLL3VuaXRfbWFza3MgXAorCW1pcHMvNzRLL2V2ZW50cyBtaXBzLzc0Sy91bml0X21hc2tzIFwKKwlwcGMvNzQ1MC9ldmVudHMgcHBjLzc0NTAvdW5pdF9tYXNrcyBcCisJcHBjL2U1MDAvZXZlbnRzIHBwYy9lNTAwL3VuaXRfbWFza3MgXAorCXBwYy9lNTAwdjIvZXZlbnRzIHBwYy9lNTAwdjIvdW5pdF9tYXNrcyBcCisJcHBjL2UzMDAvZXZlbnRzIHBwYy9lMzAwL3VuaXRfbWFza3MKKworRVhUUkFfRElTVCA9ICQoZXZlbnRfZmlsZXMpCithbGw6IGFsbC1hbQorCisuU1VGRklYRVM6CiskKHNyY2RpcikvTWFrZWZpbGUuaW46ICAkKHNyY2RpcikvTWFrZWZpbGUuYW0gICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCUBmb3IgZGVwIGluICQ/OyBkbyBcCisJICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKKwkgICAgKiQkZGVwKikgXAorCSAgICAgICggY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoICkgXAorCSAgICAgICAgJiYgeyBpZiB0ZXN0IC1mICRAOyB0aGVuIGV4aXQgMDsgZWxzZSBicmVhazsgZmk7IH07IFwKKwkgICAgICBleGl0IDE7OyBcCisJICBlc2FjOyBcCisJZG9uZTsgXAorCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZm9yZWlnbiBldmVudHMvTWFrZWZpbGUnOyBcCisJJChhbV9fY2QpICQodG9wX3NyY2RpcikgJiYgXAorCSAgJChBVVRPTUFLRSkgLS1mb3JlaWduIGV2ZW50cy9NYWtlZmlsZQorLlBSRUNJT1VTOiBNYWtlZmlsZQorTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworCUBjYXNlICckPycgaW4gXAorCSAgKmNvbmZpZy5zdGF0dXMqKSBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKKwkgICopIFwKKwkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAorCWVzYWM7CisKKyQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorCiskKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorJChBQ0xPQ0FMX000KTogICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6CisKK21vc3RseWNsZWFuLWxpYnRvb2w6CisJLXJtIC1mICoubG8KKworY2xlYW4tbGlidG9vbDoKKwktcm0gLXJmIC5saWJzIF9saWJzCit0YWdzOiBUQUdTCitUQUdTOgorCitjdGFnczogQ1RBR1MKK0NUQUdTOgorCisKK2Rpc3RkaXI6ICQoRElTVEZJTEVTKQorCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisJbGlzdD0nJChESVNURklMRVMpJzsgXAorCSAgZGlzdF9maWxlcz1gZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8IFwKKwkgIHNlZCAtZSAic3xeJCRzcmNkaXJzdHJpcC98fDt0IiBcCisJICAgICAgLWUgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98O3QiYDsgXAorCWNhc2UgJCRkaXN0X2ZpbGVzIGluIFwKKwkgICovKikgJChNS0RJUl9QKSBgZWNobyAiJCRkaXN0X2ZpbGVzIiB8IFwKKwkJCSAgIHNlZCAnL1wvLyFkO3N8XnwkKGRpc3RkaXIpL3w7cywvW14vXSokJCwsJyB8IFwKKwkJCSAgIHNvcnQgLXVgIDs7IFwKKwllc2FjOyBcCisJZm9yIGZpbGUgaW4gJCRkaXN0X2ZpbGVzOyBkbyBcCisJICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCisJICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAorCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAorCSAgICBpZiB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkZmlsZSI7IHRoZW4gXAorCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAorCSAgICBmaTsgXAorCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKKwkgICAgICBjcCAtZnBSICQoc3JjZGlyKS8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCisJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisJICAgIGZpOyBcCisJICAgIGNwIC1mcFIgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKKwkgIGVsc2UgXAorCSAgICB0ZXN0IC1mICIkKGRpc3RkaXIpLyQkZmlsZSIgXAorCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICIkKGRpc3RkaXIpLyQkZmlsZSIgXAorCSAgICB8fCBleGl0IDE7IFwKKwkgIGZpOyBcCisJZG9uZQorY2hlY2stYW06IGFsbC1hbQorY2hlY2s6IGNoZWNrLWFtCithbGwtYW06IE1ha2VmaWxlCitpbnN0YWxsZGlyczoKK2luc3RhbGw6IGluc3RhbGwtYW0KK2luc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLWFtCitpbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1hbQordW5pbnN0YWxsOiB1bmluc3RhbGwtYW0KKworaW5zdGFsbC1hbTogYWxsLWFtCisJQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KKworaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KK2luc3RhbGwtc3RyaXA6CisJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKKwkgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorCSAgYHRlc3QgLXogJyQoU1RSSVApJyB8fCBcCisJICAgIGVjaG8gIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciYCBpbnN0YWxsCittb3N0bHljbGVhbi1nZW5lcmljOgorCitjbGVhbi1nZW5lcmljOgorCitkaXN0Y2xlYW4tZ2VuZXJpYzoKKwktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKKwktdGVzdCAuID0gIiQoc3JjZGlyKSIgfHwgdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykKKworbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgorCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKKwlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCitjbGVhbjogY2xlYW4tYW0KKworY2xlYW4tYW06IGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBtb3N0bHljbGVhbi1hbQorCitkaXN0Y2xlYW46IGRpc3RjbGVhbi1hbQorCS1ybSAtZiBNYWtlZmlsZQorZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tZ2VuZXJpYworCitkdmk6IGR2aS1hbQorCitkdmktYW06CisKK2h0bWw6IGh0bWwtYW0KKworaHRtbC1hbToKKworaW5mbzogaW5mby1hbQorCitpbmZvLWFtOgorCitpbnN0YWxsLWRhdGEtYW06IGluc3RhbGwtZGF0YS1sb2NhbAorCitpbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktYW0KKworaW5zdGFsbC1kdmktYW06CisKK2luc3RhbGwtZXhlYy1hbToKKworaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KKworaW5zdGFsbC1odG1sLWFtOgorCitpbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQorCitpbnN0YWxsLWluZm8tYW06CisKK2luc3RhbGwtbWFuOgorCitpbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KKworaW5zdGFsbC1wZGYtYW06CisKK2luc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KKworaW5zdGFsbC1wcy1hbToKKworaW5zdGFsbGNoZWNrLWFtOgorCittYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCisJLXJtIC1mIE1ha2VmaWxlCittYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCisKK21vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1hbQorCittb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sCisKK3BkZjogcGRmLWFtCisKK3BkZi1hbToKKworcHM6IHBzLWFtCisKK3BzLWFtOgorCit1bmluc3RhbGwtYW06IHVuaW5zdGFsbC1sb2NhbAorCisuTUFLRTogaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwCisKKy5QSE9OWTogYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgXAorCWRpc3RjbGVhbiBkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4tbGlidG9vbCBkaXN0ZGlyIGR2aSBcCisJZHZpLWFtIGh0bWwgaHRtbC1hbSBpbmZvIGluZm8tYW0gaW5zdGFsbCBpbnN0YWxsLWFtIFwKKwlpbnN0YWxsLWRhdGEgaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZGF0YS1sb2NhbCBpbnN0YWxsLWR2aSBcCisJaW5zdGFsbC1kdmktYW0gaW5zdGFsbC1leGVjIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgXAorCWluc3RhbGwtaHRtbC1hbSBpbnN0YWxsLWluZm8gaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIFwKKwlpbnN0YWxsLXBkZiBpbnN0YWxsLXBkZi1hbSBpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gXAorCWluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBcCisJbWFpbnRhaW5lci1jbGVhbiBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gXAorCW1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBwZGYgcGRmLWFtIHBzIHBzLWFtIFwKKwl1bmluc3RhbGwgdW5pbnN0YWxsLWFtIHVuaW5zdGFsbC1sb2NhbAorCisKK2luc3RhbGwtZGF0YS1sb2NhbDoKKwlmb3IgaSBpbiAke2V2ZW50X2ZpbGVzfSA7IGRvIFwKKwkJZGlyPWBkaXJuYW1lICQkaWAgOyBcCisJCW1rZGlyIC1wICQoREVTVERJUikkKHBrZ2RhdGFkaXIpLyQkZGlyIDsgXAorCQkkKElOU1RBTExfREFUQSkgJCh0b3Bfc3JjZGlyKS9ldmVudHMvJCRpICQoREVTVERJUikkKHBrZ2RhdGFkaXIpLyQkaSA7IFwKKwlkb25lCisKK3VuaW5zdGFsbC1sb2NhbDoKKwlmb3IgaSBpbiAke2V2ZW50X2ZpbGVzfSA7IGRvIFwKKwkJZGlyPWBkaXJuYW1lICQkaWAgOyBcCisJCWFyY2hkaXI9YGRpcm5hbWUgJCRkaXJgIDsgXAorCQlpZiB0ZXN0IC1mICQoREVTVERJUikkKHBrZ2RhdGFkaXIpLyQkaSA7IHRoZW4gXAorCQkJcm0gJChERVNURElSKSQocGtnZGF0YWRpcikvJCRpIDsgXAorCQlmaTsgIFwKKwkJaWYgdGVzdCAtZCAkKERFU1RESVIpJChwa2dkYXRhZGlyKS8kJGRpciA7IHRoZW4gXAorCQkJcm1kaXIgLS1pZ25vcmUtZmFpbC1vbi1ub24tZW1wdHkgJChERVNURElSKSQocGtnZGF0YWRpcikvJCRkaXIgOyBcCisJCWZpOyBcCisJCWlmIHRlc3QgJCRhcmNoZGlyICE9ICIuIiAtYSAtZCAkKERFU1RESVIpJChwa2dkYXRhZGlyKS8kJGFyY2hkaXIgOyB0aGVuIFwKKwkJCXJtZGlyIC0taWdub3JlLWZhaWwtb24tbm9uLWVtcHR5ICQoREVTVERJUikkKHBrZ2RhdGFkaXIpLyQkYXJjaGRpciA7IFwKKwkJZmk7IFwKKwlkb25lCisKKyMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCisjIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KKy5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2V2ZW50cy9hbHBoYS9ldjQvZXZlbnRzIGIvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL2FscGhhL2V2NC9ldmVudHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGIxOTNkMQotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2V2ZW50cy9hbHBoYS9ldjQvZXZlbnRzCkBAIC0wLDAgKzEsMTggQEAKKyMgQWxwaGEgRVY0IGV2ZW50cy4KKyMKK2V2ZW50OjB4MDAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06NDA5NiBuYW1lOklTU1VFUyA6IFRvdGFsIGlzc3VlcyBkaXZpZGVkIGJ5IDIKK2V2ZW50OjB4MDIgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06NDA5NiBuYW1lOlBJUEVMSU5FX0RSWSA6IE5vdGhpbmcgaXNzdWVkLCBubyB2YWxpZCBJLXN0cmVhbSBkYXRhCitldmVudDoweDA0IGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjQwOTYgbmFtZTpMT0FEX0lOU05TIDogQWxsIGxvYWQgaW5zdHJ1Y3Rpb25zCitldmVudDoweDA2IGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjQwOTYgbmFtZTpQSVBFTElORV9GUk9aRU4gOiBOb3RoaW5nIGlzc3VlZCwgcmVzb3VyY2UgY29uZmxpY3QKK2V2ZW50OjB4MDggY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06NDA5NiBuYW1lOkJSQU5DSF9JTlNOUyA6IEFsbCBicmFuY2hlcyAoY29uZGl0aW9uYWwsIHVuY29uZGl0aW9uYWwsIGpzciwgaHdfcmVpKQorZXZlbnQ6MHgwYSBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo0MDk2IG5hbWU6Q1lDTEVTIDogVG90YWwgY3ljbGVzCitldmVudDoweDBiIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjQwOTYgbmFtZTpQQUxfTU9ERSA6IEN5Y2xlcyB3aGlsZSBpbiBQQUxjb2RlIGVudmlyb25tZW50CitldmVudDoweDBjIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjQwOTYgbmFtZTpOT05fSVNTVUVTIDogVG90YWwgbm9uaXNzdWVzIGRpdmlkZWQgYnkgMgorZXZlbnQ6MHgxMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToyNTYgbmFtZTpEQ0FDSEVfTUlTU0VTIDogVG90YWwgRC1jYWNoZSBtaXNzZXMKK2V2ZW50OjB4MTEgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MjU2IG5hbWU6SUNBQ0hFX01JU1NFUyA6IFRvdGFsIEktY2FjaGUgbWlzc2VzCitldmVudDoweDEyIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjI1NiBuYW1lOkRVQUxfSVNTVUVfQ1lDTEVTIDogQ3ljbGVzIG9mIGR1YWwgaXNzdWUKK2V2ZW50OjB4MTMgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MjU2IG5hbWU6QlJBTkNIX01JU1BSRURJQ1RTIDogQnJhbmNoIG1pc3ByZWRpY3RzIChjb25kaXRpb25hbCwganNyLCBod19yZWkpCitldmVudDoweDE0IGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjI1NiBuYW1lOkZQX0lOU05TIDogRlAgb3BlcmF0ZSBpbnN0cnVjdGlvbnMgKG5vdCBiciwgbG9hZCwgc3RvcmUpCitldmVudDoweDE1IGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjI1NiBuYW1lOklOVEVHRVJfT1BFUkFURSA6IEludGVnZXIgb3BlcmF0ZSBpbnN0cnVjdGlvbnMKK2V2ZW50OjB4MTYgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MjU2IG5hbWU6U1RPUkVfSU5TTlMgOiBTdG9yZSBpbnN0cnVjdGlvbnMKKyMgVGhlcmUncyBhbHNvIEVYVEVSTkFMLCBieSB3aGljaCB3ZSBjb3VsZCBtb25pdG9yIHRoZSAyMTA2Ni8yMTA2OCBidXMgY29udHJvbGxlci4KZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2V2ZW50cy9hbHBoYS9ldjQvdW5pdF9tYXNrcyBiL29wcm9maWxlLTAuOS43L2V2ZW50cy9hbHBoYS9ldjQvdW5pdF9tYXNrcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzc3Y2M4Ci0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL2FscGhhL2V2NC91bml0X21hc2tzCkBAIC0wLDAgKzEsNCBAQAorIyBBbHBoYSBFVjQgcG9zc2libGUgdW5pdCBtYXNrcworIworbmFtZTp6ZXJvIHR5cGU6bWFuZGF0b3J5IGRlZmF1bHQ6MHgwCisJMHgwIE5vIHVuaXQgbWFzawpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL2FscGhhL2V2NS9ldmVudHMgYi9vcHJvZmlsZS0wLjkuNy9ldmVudHMvYWxwaGEvZXY1L2V2ZW50cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDllMDZhCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL2FscGhhL2V2NS9ldmVudHMKQEAgLTAsMCArMSw0OSBAQAorIyBBbHBoYSBFVjUgZXZlbnRzCisjCitldmVudDoweDAwIGNvdW50ZXJzOjAsMiB1bTp6ZXJvIG1pbmltdW06MjU2IG5hbWU6Q1lDTEVTIDogVG90YWwgY3ljbGVzCitldmVudDoweDAxIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjI1NiBuYW1lOklTU1VFUyA6IFRvdGFsIGlzc3VlcworZXZlbnQ6MHgwMiBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToyNTYgbmFtZTpOT05fSVNTVUVfQ1lDTEVTIDogTm90aGluZyBpc3N1ZWQsIHBpcGVsaW5lIGZyb3plbgorZXZlbnQ6MHgwMyBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToyNTYgbmFtZTpTUExJVF9JU1NVRV9DWUNMRVMgOiBTb21lIGJ1dCBub3QgYWxsIGlzc3VhYmxlIGluc3RydWN0aW9ucyBpc3N1ZWQKK2V2ZW50OjB4MDQgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MjU2IG5hbWU6UElQRUxJTkVfRFJZIDogTm90aGluZyBpc3N1ZWQsIHBpcGVsaW5lIGRyeQorZXZlbnQ6MHgwNSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToyNTYgbmFtZTpSRVBMQVlfVFJBUCA6IFJlcGxheSB0cmFwcyAobGR1LCB3Yi9tYWYsIGxpdG11cyB0ZXN0KQorZXZlbnQ6MHgwNiBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToyNTYgbmFtZTpTSU5HTEVfSVNTVUVfQ1lDTEVTIDogU2luZ2xlIGlzc3VlIGN5Y2xlcworZXZlbnQ6MHgwNyBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToyNTYgbmFtZTpEVUFMX0lTU1VFX0NZQ0xFUyA6IER1YWwgaXNzdWUgY3ljbGVzCitldmVudDoweDA4IGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjI1NiBuYW1lOlRSSVBMRV9JU1NVRV9DWUNMRVMgOiBUcmlwbGUgaXNzdWUgY3ljbGVzCitldmVudDoweDA5IGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjI1NiBuYW1lOlFVQURfSVNTVUVfQ1lDTEVTIDogUXVhZCBpc3N1ZSBjeWNsZXMKK2V2ZW50OjB4MGEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MjU2IG5hbWU6RkxPV19DSEFOR0UgOiBGbG93IGNoYW5nZSAobWVhbmluZyBkZXBlbmRzIG9uIGNvdW50ZXIgMikKKyMgPz8/IFRoaXMgb25lJ3MgZGVwZW5kZW50IG9uIHRoZSB2YWx1ZSBpbiBQQ1NFTDI6IElmIG1lYXN1cmluZyBQQ19NSVNQUiwKKyMgdGhpcyBpcyBqc3ItcmV0IGluc3RydWN0aW9ucywgaWYgbWVhc3VyaW5nIEJSQU5DSF9NSVNQUkVESUNUUywgdGhpcyBpcworIyBjb25kaXRpb25hbCBicmFuY2hlcywgb3RoZXJ3aXNlIHRoaXMgaXMgYWxsIGJyYW5jaCBpbnNucywgaW5jbHVkaW5nIGh3X3JlaS4KK2V2ZW50OjB4MGIgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MjU2IG5hbWU6SU5URUdFUl9PUEVSQVRFIDogSW50ZWdlciBvcGVyYXRlIGluc3RydWN0aW9ucworZXZlbnQ6MHgwYyBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToyNTYgbmFtZTpGUF9JTlNOUyA6IEZQIG9wZXJhdGUgaW5zdHJ1Y3Rpb25zIChub3QgYnIsIGxvYWQsIHN0b3JlKQorIyBGSVhNRTogQnVnIGNhcnJpZWQgb3ZlcgorZXZlbnQ6MHgwYyBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToyNTYgbmFtZTpMT0FEX0lOU05TIDogTG9hZCBpbnN0cnVjdGlvbnMKK2V2ZW50OjB4MGQgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MjU2IG5hbWU6U1RPUkVfSU5TTlMgOiBTdG9yZSBpbnN0cnVjdGlvbnMKK2V2ZW50OjB4MGUgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MjU2IG5hbWU6SUNBQ0hFX0FDQ0VTUyA6IEluc3RydWN0aW9uIGNhY2hlIGFjY2VzcworZXZlbnQ6MHgwZiB1bTp6ZXJvIG1pbmltdW06MjU2IG5hbWU6RENBQ0hFX0FDQ0VTUyA6IERhdGEgY2FjaGUgYWNjZXNzCitldmVudDoweDEwIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjI1NiBuYW1lOkxPTkdfU1RBTExTIDogU3RhbGxzIGxvbmdlciB0aGFuIDE1IGN5Y2xlcworZXZlbnQ6MHgxMSBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToyNTYgbmFtZTpQQ19NSVNQUiA6IFBDIG1pc3ByZWRpY3RzCitldmVudDoweDEyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjI1NiBuYW1lOkJSQU5DSF9NSVNQUkVESUNUUyA6IEJyYW5jaCBtaXNwcmVkaWN0cworZXZlbnQ6MHgxMyBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToyNTYgbmFtZTpJQ0FDSEVfTUlTU0VTIDogSW5zdHJ1Y3Rpb24gY2FjaGUgbWlzc2VzCitldmVudDoweDE0IGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjI1NiBuYW1lOklUQl9NSVNTIDogSW5zdHJ1Y3Rpb24gVExCIG1pc3MKK2V2ZW50OjB4MTUgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MjU2IG5hbWU6RENBQ0hFX01JU1NFUyA6IERhdGEgY2FjaGUgbWlzc2VzCitldmVudDoweDE2IGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjI1NiBuYW1lOkRUQl9NSVNTIDogRGF0YSBUTEIgbWlzcworZXZlbnQ6MHgxNyBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToyNTYgbmFtZTpMT0FEU19NRVJHRUQgOiBMb2FkcyBtZXJnZWQgaW4gTUFGCitldmVudDoweDE4IGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjI1NiBuYW1lOkxEVV9SRVBMQVlTIDogTERVIHJlcGxheSB0cmFwcworZXZlbnQ6MHgxOSBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToyNTYgbmFtZTpXQl9NQUZfRlVMTF9SRVBMQVlTIDogV0IvTUFGIGZ1bGwgcmVwbGF5IHRyYXBzCitldmVudDoweDFhIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjI1NiBuYW1lOk1FTV9CQVJSSUVSIDogTWVtb3J5IGJhcnJpZXIgaW5zdHJ1Y3Rpb25zCitldmVudDoweDFiIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjI1NiBuYW1lOkxPQURfTE9DS0VEIDogTER4L0wgaW5zdHJ1Y3Rpb25zCitldmVudDoweDFjIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjI1NiBuYW1lOlNDQUNIRV9BQ0NFU1MgOiBTLWNhY2hlIGFjY2VzcworZXZlbnQ6MHgxZCBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToyNTYgbmFtZTpTQ0FDSEVfUkVBRCA6IFMtY2FjaGUgcmVhZAorZXZlbnQ6MHgxZSBjb3VudGVyczoxLDIgdW06emVybyBtaW5pbXVtOjI1NiBuYW1lOlNDQUNIRV9XUklURSA6IFMtY2FjaGUgd3JpdGUKK2V2ZW50OjB4MWYgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MjU2IG5hbWU6U0NBQ0hFX1ZJQ1RJTSA6IFMtY2FjaGUgdmljdGltCitldmVudDoweDIwIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjI1NiBuYW1lOlNDQUNIRV9NSVNTIDogUy1jYWNoZSBtaXNzCitldmVudDoweDIxIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjI1NiBuYW1lOlNDQUNIRV9SRUFEX01JU1MgOiBTLWNhY2hlIHJlYWQgbWlzcworZXZlbnQ6MHgyMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToyNTYgbmFtZTpTQ0FDSEVfV1JJVEVfTUlTUyA6IFMtY2FjaGUgd3JpdGUgbWlzcworZXZlbnQ6MHgyMyBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToyNTYgbmFtZTpTQ0FDSEVfU0hfV1JJVEUgOiBTLWNhY2hlIHNoYXJlZCB3cml0ZXMKK2V2ZW50OjB4MjQgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MjU2IG5hbWU6QkNBQ0hFX0hJVCA6IEItY2FjaGUgaGl0CitldmVudDoweDI1IGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjI1NiBuYW1lOkJDQUNIRV9WSUNUSU0gOiBCLWNhY2hlIHZpY3RpbQorZXZlbnQ6MHgyNiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToyNTYgbmFtZTpCQ0FDSEVfTUlTUyA6IEItY2FjaGUgbWlzcworZXZlbnQ6MHgyNyBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToyNTYgbmFtZTpTWVNfUkVRIDogU3lzdGVtIHJlcXVlc3RzCitldmVudDoweDI4IGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjI1NiBuYW1lOlNZU19JTlYgOiBTeXN0ZW0gaW52YWxpZGF0ZXMKK2V2ZW50OjB4MjkgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MjU2IG5hbWU6U1lTX1JFQURfUkVRIDogU3lzdGVtIHJlYWQgcmVxdWVzdHMKZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2V2ZW50cy9hbHBoYS9ldjUvdW5pdF9tYXNrcyBiL29wcm9maWxlLTAuOS43L2V2ZW50cy9hbHBoYS9ldjUvdW5pdF9tYXNrcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZjI0ZmE5Ci0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL2FscGhhL2V2NS91bml0X21hc2tzCkBAIC0wLDAgKzEsNCBAQAorIyBBbHBoYSBFVi01IHBvc3NpYmxlIHVuaXQgbWFza3MKKyMKK25hbWU6emVybyB0eXBlOm1hbmRhdG9yeSBkZWZhdWx0OjB4MAorCTB4MCBObyB1bml0IG1hc2sKZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2V2ZW50cy9hbHBoYS9ldjYvZXZlbnRzIGIvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL2FscGhhL2V2Ni9ldmVudHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjAzOWNlZgotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2V2ZW50cy9hbHBoYS9ldjYvZXZlbnRzCkBAIC0wLDAgKzEsMTEgQEAKKyMgQWxwaGEgRVY2IGV2ZW50cworIworZXZlbnQ6MHgwMCBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkNZQ0xFUyA6IFRvdGFsIGN5Y2xlcworZXZlbnQ6MHgwMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpSRVRJUkVEIDogUmV0aXJlZCBpbnN0cnVjdGlvbnMKK2V2ZW50OjB4MDIgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6Q09ORF9CUkFOQ0hFUyA6IFJldGlyZWQgY29uZGl0aW9uYWwgYnJhbmNoZXMKK2V2ZW50OjB4MDMgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QlJBTkNIX01JU1BSRURJQ1RTIDogUmV0aXJlZCBicmFuY2ggbWlzcHJlZGljdHMKK2V2ZW50OjB4MDQgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RFRCX01JU1MgOiBSZXRpcmVkIERUQiBzaW5nbGUgbWlzc2VzICogMgorZXZlbnQ6MHgwNSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpEVEJfRERfTUlTUyA6IFJldGlyZWQgRFRCIGRvdWJsZSBkb3VibGUgbWlzc2VzCitldmVudDoweDA2IGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOklUQl9NSVNTIDogUmV0aXJlZCBJVEIgbWlzc2VzCitldmVudDoweDA3IGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlVOQUxJR05FRF9UUkFQIDogUmV0aXJlZCB1bmFsaWduZWQgdHJhcHMKK2V2ZW50OjB4MDggY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6UkVQTEFZX1RSQVAgOiBSZXBsYXkgdHJhcHMKZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2V2ZW50cy9hbHBoYS9ldjYvdW5pdF9tYXNrcyBiL29wcm9maWxlLTAuOS43L2V2ZW50cy9hbHBoYS9ldjYvdW5pdF9tYXNrcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYmUzOGM2Ci0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL2FscGhhL2V2Ni91bml0X21hc2tzCkBAIC0wLDAgKzEsNCBAQAorIyBBbHBoYSBFVi02IHBvc3NpYmxlIHVuaXQgbWFza3MKKyMKK25hbWU6emVybyB0eXBlOm1hbmRhdG9yeSBkZWZhdWx0OjB4MAorCTB4MCBObyB1bml0IG1hc2sKZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2V2ZW50cy9hbHBoYS9ldjY3L2V2ZW50cyBiL29wcm9maWxlLTAuOS43L2V2ZW50cy9hbHBoYS9ldjY3L2V2ZW50cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjAzODcxCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL2FscGhhL2V2NjcvZXZlbnRzCkBAIC0wLDAgKzEsMjcgQEAKKyMgQWxwaGEgRVYtNjcgRXZlbnRzCisjCitldmVudDoweDAwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkNZQ0xFUyA6IFRvdGFsIGN5Y2xlcworZXZlbnQ6MHgwMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpERUxBWUVEX0NZQ0xFUyA6IEN5Y2xlcyBvZiBkZWxheWVkIHJldGlyZSBwb2ludGVyIGFkdmFuY2UKKyMgRklYTUU6IGJ1ZyBjYXJyaWVkIG92ZXIKK2V2ZW50OjB4MDAgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpSRVRJUkVEIDogUmV0aXJlZCBpbnN0cnVjdGlvbnMKK2V2ZW50OjB4MDIgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QkNBQ0hFX01JU1MgOiBCY2FjaGUgbWlzc2VzL2xvbmcgcHJvYmUgbGF0ZW5jeQorZXZlbnQ6MHgwMyBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpNQk9YX1JFUExBWSA6IE1ib3ggcmVwbGF5IHRyYXBzCisjIEZJWE1FOiBhbGwgdGhlIGJlbG93IHVzZWQgUE1fQ1RSCitldmVudDoweDA0IGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlNUQUxMRURfMCA6IFBDVFIwIHRyaWdnZXJlZDsgc3RhbGxlZCBiZXR3ZWVuIGZldGNoIGFuZCBtYXAgc3RhZ2VzCitldmVudDoweDA1IGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlRBS0VOXzAgOiBQQ1RSMCB0cmlnZ2VyZWQ7IGJyYW5jaCB3YXMgbm90IG1pc3ByZWRpY3RlZCBhbmQgdGFrZW4KK2V2ZW50OjB4MDYgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6TUlTUFJFRElDVF8wIDogUENUUjAgdHJpZ2dlcmVkOyBicmFuY2ggd2FzIG1pc3ByZWRpY3RlZAorZXZlbnQ6MHgwNyBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJVEJfTUlTU18wIDogUENUUjAgdHJpZ2dlcmVkOyBJVEIgbWlzcworZXZlbnQ6MHgwOCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpEVEJfTUlTU18wIDogUENUUjAgdHJpZ2dlcmVkOyBEVEIgbWlzcworZXZlbnQ6MHgwOSBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpSRVBMQVlfMCA6IFBDVFIwIHRyaWdnZXJlZDsgcmVwbGF5IHRyYXAKK2V2ZW50OjB4MGEgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6TE9BRF9TVE9SRV8wIDogUENUUjAgdHJpZ2dlcmVkOyBsb2FkLXN0b3JlIG9yZGVyIHJlcGxheSB0cmFwCitldmVudDoweDBiIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOklDQUNIRV9NSVNTXzAgOiBQQ1RSMCB0cmlnZ2VyZWQ7IEljYWNoZSBtaXNzCitldmVudDoweDBjIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlVOQUxJR05FRF8wIDogUENUUjAgdHJpZ2dlcmVkOyB1bmFsaWduZWQgbG9hZC9zdG9yZSB0cmFwCitldmVudDoweDBkIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlNUQUxMRURfMSA6IFBDVFIxIHRyaWdnZXJlZDsgc3RhbGxlZCBiZXR3ZWVuIGZldGNoIGFuZCBtYXAgc3RhZ2VzCitldmVudDoweDBlIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlRBS0VOXzEgOiBQQ1RSMSB0cmlnZ2VyZWQ7IGJyYW5jaCB3YXMgbm90IG1pc3ByZWRpY3RlZCBhbmQgdGFrZW4KK2V2ZW50OjB4MGYgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6TUlTUFJFRElDVF8xIDogUENUUjEgdHJpZ2dlcmVkOyBicmFuY2ggd2FzIG1pc3ByZWRpY3RlZAorZXZlbnQ6MHgxMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJVEJfTUlTU18xIDogUENUUjEgdHJpZ2dlcmVkOyBJVEIgbWlzcworZXZlbnQ6MHgxMSBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpEVEJfTUlTU18xIDogUENUUjEgdHJpZ2dlcmVkOyBEVEIgbWlzcworZXZlbnQ6MHgxMiBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpSRVBMQVlfMSA6IFBDVFIxIHRyaWdnZXJlZDsgcmVwbGF5IHRyYXAKK2V2ZW50OjB4MTMgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6TE9BRF9TVE9SRV8xIDogUENUUjEgdHJpZ2dlcmVkOyBsb2FkLXN0b3JlIG9yZGVyIHJlcGxheSB0cmFwCitldmVudDoweDE0IGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOklDQUNIRV9NSVNTXzEgOiBQQ1RSMSB0cmlnZ2VyZWQ7IEljYWNoZSBtaXNzCitldmVudDoweDE1IGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlVOQUxJR05FRF8xIDogUENUUjEgdHJpZ2dlcmVkOyB1bmFsaWduZWQgbG9hZC9zdG9yZSB0cmFwCmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9ldmVudHMvYWxwaGEvZXY2Ny91bml0X21hc2tzIGIvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL2FscGhhL2V2NjcvdW5pdF9tYXNrcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDYxZTQ5Ci0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL2FscGhhL2V2NjcvdW5pdF9tYXNrcwpAQCAtMCwwICsxLDQgQEAKKyMgQWxwaGEgRVYtNjcgcG9zc2libGUgdW5pdCBtYXNrcworIworbmFtZTp6ZXJvIHR5cGU6bWFuZGF0b3J5IGRlZmF1bHQ6MHgwCisJMHgwIE5vIHVuaXQgbWFzawpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL2FscGhhL3BjYTU2L2V2ZW50cyBiL29wcm9maWxlLTAuOS43L2V2ZW50cy9hbHBoYS9wY2E1Ni9ldmVudHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzM0YmFiZQotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2V2ZW50cy9hbHBoYS9wY2E1Ni9ldmVudHMKQEAgLTAsMCArMSwyIEBACisjIFBDQS01NgorIyBGSVhNRTogbm8gZXZlbnRzID8gV2hhdCdzIGdvaW5nIG9uIGhlcmUgRmFsayA/CmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9ldmVudHMvYWxwaGEvcGNhNTYvdW5pdF9tYXNrcyBiL29wcm9maWxlLTAuOS43L2V2ZW50cy9hbHBoYS9wY2E1Ni91bml0X21hc2tzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiODA3YjcKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9ldmVudHMvYWxwaGEvcGNhNTYvdW5pdF9tYXNrcwpAQCAtMCwwICsxLDMgQEAKKyMgQWxwaGEgUENBLTU2IHBvc3NpYmxlIHVuaXQgbWFza3MKKyMKKyMgRklYTUU6IGFueSBldmVudHMgLi4uPwpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL2FybS9hcm12Ni9ldmVudHMgYi9vcHJvZmlsZS0wLjkuNy9ldmVudHMvYXJtL2FybXY2L2V2ZW50cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODg1MTE4Ci0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL2FybS9hcm12Ni9ldmVudHMKQEAgLTAsMCArMSwyMyBAQAorIyBBUk0gVjYgZXZlbnRzCisjCitldmVudDoweDAwIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SUZVX0lGRVRDSF9NSVNTIDogbnVtYmVyIG9mIGluc3RydWN0aW9uIGZldGNoIG1pc3NlcworZXZlbnQ6MHgwMSBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkNZQ0xFU19JRlVfTUVNX1NUQUxMIDogY3ljbGVzIGluc3RydWN0aW9uIGZldGNoIHBpcGUgaXMgc3RhbGxlZAorZXZlbnQ6MHgwMiBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkNZQ0xFU19EQVRBX1NUQUxMIDogY3ljbGVzIHN0YWxsIG9jY3VycyBmb3IgZHVlIHRvIGRhdGEgZGVwZW5kZW5jeQorZXZlbnQ6MHgwMyBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOklUTEJfTUlTUyA6IG51bWJlciBvZiBJbnN0cnVjdGlvbiBNaWNyb1RMQiBtaXNzZXMKK2V2ZW50OjB4MDQgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpEVExCX01JU1MgOiBudW1iZXIgb2YgRGF0YSBNaWNyb1RMQiBtaXNzZXMKK2V2ZW50OjB4MDUgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpCUl9JTlNUX0VYRUNVVEVEIDogYnJhbmNoIGluc3RydWN0aW9uIGV4ZWN1dGVkIHcvIG9yIHcvbyBwcm9ncmFtIGZsb3cgY2hhbmdlCitldmVudDoweDA2IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QlJfSU5TVF9NSVNTX1BSRUQgOiBicmFuY2ggbWlzcHJlZGljdGVkCitldmVudDoweDA3IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SU5TTl9FWEVDVVRFRCA6IGluc3RydWN0aW9ucyBleGVjdXRlZAorZXZlbnQ6MHgwOSBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRDQUNIRV9BQ0NFU1MgOiBkYXRhIGNhY2hlIGFjY2VzcywgY2FjaGVhYmxlIGxvY2F0aW9ucworZXZlbnQ6MHgwYSBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRDQUNIRV9BQ0NFU1NfQUxMIDogZGF0YSBjYWNoZSBhY2Nlc3MsIGFsbCBsb2NhdGlvbnMKK2V2ZW50OjB4MGIgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpEQ0FDSEVfTUlTUyA6IGRhdGEgY2FjaGUgbWlzcworZXZlbnQ6MHgwYyBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRDQUNIRV9XQiA6IGRhdGEgY2FjaGUgd3JpdGViYWNrLCAxIGV2ZW50IGZvciBldmVyeSBoYWxmIGNhY2hlbGluZQorZXZlbnQ6MHgwZCBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlBDX0NIQU5HRSA6IG51bWJlciBvZiB0aW1lcyB0aGUgcHJvZ3JhbSBjb3VudGVyIHdhcyBjaGFuZ2VkIHdpdGhvdXQgYSBtb2RlIHN3aXRjaAorZXZlbnQ6MHgwZiBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlRMQl9NSVNTIDogTWFpbiBUTEIgbWlzcworZXZlbnQ6MHgxMCBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkVYUF9FWFRFUk5BTCA6IEV4cGxpY3QgZXh0ZXJuYWwgZGF0YSBhY2Nlc3MKK2V2ZW50OjB4MTEgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpMU1VfU1RBTEwgOiBjeWNsZXMgc3RhbGxlZCBiZWNhdXNlIExvYWQgU3RvcmUgcmVxdWVzdCBxdWVxdWUgaXMgZnVsbAorZXZlbnQ6MHgxMiBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOldSSVRFX0RSQUlOIDogVGltZXMgd3JpdGUgYnVmZmVyIHdhcyBkcmFpbmVkCitldmVudDoweDIwIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RVRNRVhUT1VUMCA6IG51YmVyIG9mIGN5Y2xlcyBFVE1FWFRPVVRbMF0gc2lnbmFsIHdhcyBhc3NlcnRlZAorZXZlbnQ6MHgyMSBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkVUTUVYVE9VVDEgOiBudWJlciBvZiBjeWNsZXMgRVRNRVhUT1VUWzFdIHNpZ25hbCB3YXMgYXNzZXJ0ZWQKK2V2ZW50OjB4MjIgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpFVE1FWFRPVVRfQk9USCA6IG51YmVyIG9mIGN5Y2xlcyBib3RoIEVUTUVYVE9VVCBbMF0gYW5kIFsxXSB3ZXJlIGFzc2VydGVkICogMgorZXZlbnQ6MHhmZiBjb3VudGVyczowLDEsMiB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6Q1BVX0NZQ0xFUyA6IGNsb2NrIGN5Y2xlcyBjb3VudGVyCmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9ldmVudHMvYXJtL2FybXY2L3VuaXRfbWFza3MgYi9vcHJvZmlsZS0wLjkuNy9ldmVudHMvYXJtL2FybXY2L3VuaXRfbWFza3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGFkZDdlNAotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2V2ZW50cy9hcm0vYXJtdjYvdW5pdF9tYXNrcwpAQCAtMCwwICsxLDQgQEAKKyMgQVJNIFY2IFBNVSBwb3NzaWJsZSB1bml0IG1hc2tzCisjCituYW1lOnplcm8gdHlwZTptYW5kYXRvcnkgZGVmYXVsdDoweDAwCisJMHgwMCBObyB1bml0IG1hc2sKZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2V2ZW50cy9hcm0vYXJtdjctY2E5L2V2ZW50cyBiL29wcm9maWxlLTAuOS43L2V2ZW50cy9hcm0vYXJtdjctY2E5L2V2ZW50cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDA5NGI1Ci0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL2FybS9hcm12Ny1jYTkvZXZlbnRzCkBAIC0wLDAgKzEsNTEgQEAKKyMgQVJNIENvcnRleCBBOSBldmVudHMKKyMgRnJvbSBDb3J0ZXggQTkgVFJNCisjCitpbmNsdWRlOmFybS9hcm12Ny1jb21tb24KK2V2ZW50OjB4NDAgY291bnRlcnM6MSwyLDMsNCw1LDYgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkpBVkFfQkNfRVhFQyA6IE51bWJlciBvZiBKYXZhIGJ5dGVjb2RlcyBkZWNvZGVkLCBpbmNsdWRpbmcgc3BlY3VsYXRpdmUgb25lcworZXZlbnQ6MHg0MSBjb3VudGVyczoxLDIsMyw0LDUsNiB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SkFWQV9TRlRCQ19FWEVDIDogTnVtYmVyIG9mIHNvZnR3YXJlIEphdmEgYnl0ZWNvZGVzIGRlY29kZWQsIGluY2x1ZGluZyBzcGVjdWxhdGl2ZSBvbmVzCitldmVudDoweDQyIGNvdW50ZXJzOjEsMiwzLDQsNSw2IHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpKQVZBX0JCX0VYRUMgOiBOdW1iZXIgb2YgSmF6ZWxsZSB0YWtlbiBicmFuY2hlcyBleGVjdXRlZCwgaW5jbHVkaW5nIHRob3NlIGZsdXNoZWQgZHVlIHRvIGEgcHJldmlvdXMgbG9hZC9zdG9yZSB3aGljaCBhYm9ydHMgbGF0ZQorCitldmVudDoweDUwIGNvdW50ZXJzOjEsMiwzLDQsNSw2IHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpDT19MRl9NSVNTIDogTnVtYmVyIG9mIGNvaGVyZW50IGxpbmVmaWxsIHJlcXVlc3RzIHdoaWNoIG1pc3MgaW4gYWxsIG90aGVyIENQVXMsIG1lYW5pbmcgdGhhdCB0aGUgcmVxdWVzdCBpcyBzZW50IHRvIGV4dGVybmFsIG1lbW9yeQorZXZlbnQ6MHg1MSBjb3VudGVyczoxLDIsMyw0LDUsNiB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6Q09fTEZfSElUIDogTnVtYmVyIG9mIGNvaGVyZW50IGxpbmVmaWxsIHJlcXVlc3RzIHdoaWNoIGhpdCBpbiBhbm90aGVyIENQVSwgbWVhbmluZyB0aGF0IHRoZSBsaW5lZmlsbCBkYXRhIGlzIGZldGNoZWQgZGlyZWN0bHkgZnJvbSB0aGUgcmVsZXZhbnQgY2FjaGUKKworZXZlbnQ6MHg2MCBjb3VudGVyczoxLDIsMyw0LDUsNiB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SUNfREVQX1NUQUxMIDogTnVtYmVyIG9mIGN5Y2xlcyB3aGVyZSBDUFUgaXMgcmVhZHkgdG8gYWNjZXB0IG5ldyBpbnN0cnVjdGlvbnMgYnV0IGRvZXMgbm90IHJlY2VpdmUgYW55IGJlY2F1c2Ugb2YgdGhlIGluc3RydWN0aW9uIHNpZGUgbm90IGJlaW5nIGFibGUgdG8gcHJvdmlkZSBhbnkgYW5kIHRoZSBpbnN0cnVjdGlvbiBjYWNoZSBpcyBjdXJyZW50bHkgcGVyZm9ybWluZyBhdCBsZWFzdCBvbmUgbGluZWZpbGwKK2V2ZW50OjB4NjEgY291bnRlcnM6MSwyLDMsNCw1LDYgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRDX0RFUF9TVEFMTCA6IE51bWJlciBvZiBjeWNsZXMgd2hlcmUgQ1BVIGhhcyBzb21lIGluc3RydWN0aW9ucyB0aGF0IGl0IGNhbm5vdCBpc3N1ZSB0byBhbnkgcGlwZWxpbmUgYW5kIHRoZSBMU1UgaGFzIGF0IGxlYXN0IG9uZSBwZW5kaW5nIGxpbmVmaWxsIHJlcXVlc3QgYnV0IG5vIHBlbmRpbmcgVExCIHJlcXVlc3RzCitldmVudDoweDYyIGNvdW50ZXJzOjEsMiwzLDQsNSw2IHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpTVEFMTF9NQUlOX1RMQiA6IE51bWJlciBvZiBjeWNsZXMgd2hlcmUgQ1BVIGlzIHN0YWxsZWQgd2FpdGluZyBmb3IgY29tcGxldGlvbiBvZiB0cmFuc2xhdGlvbiB0YWJsZSB3YWxrIGZyb20gdGhlIG1haW4gVExCCitldmVudDoweDYzIGNvdW50ZXJzOjEsMiwzLDQsNSw2IHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpTVFJFWF9QQVNTIDogTnVtYmVyIG9mIFNUUkVYIGluc3RydWN0aW9ucyBhcmNoaXRlY3R1cmFsbHkgZXhlY3V0ZWQgYW5kIHBhc3NlZAorZXZlbnQ6MHg2NCBjb3VudGVyczoxLDIsMyw0LDUsNiB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6U1RSRVhfRkFJTFMgOiBOdW1iZXIgb2YgU1RSRVggaW5zdHJ1Y3Rpb25zIGFyY2hpdGVjdHVyYWxseSBleGVjdXRlZCBhbmQgZmFpbGVkCitldmVudDoweDY1IGNvdW50ZXJzOjEsMiwzLDQsNSw2IHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpEQVRBX0VWSUNUIDogTnVtYmVyIG9mIGV2aWN0aW9uIHJlcXVlc3RzIGR1ZSB0byBhIGxpbmVmaWxsIGluIHRoZSBkYXRhIGNhY2hlCitldmVudDoweDY2IGNvdW50ZXJzOjEsMiwzLDQsNSw2IHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJU1NfTk9fRElTUCA6IE51bWJlciBvZiBjeWNsZXMgd2hlcmUgdGhlIGlzc3VlIHN0YWdlIGRvZXMgbm90IGRpc3BhdGNoIGFueSBpbnN0cnVjdGlvbgorZXZlbnQ6MHg2NyBjb3VudGVyczoxLDIsMyw0LDUsNiB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SVNTX0VNUFRZIDogTnVtYmVyIG9mIGN5Y2xlcyB3aGVyZSB0aGUgaXNzdWUgc3RhZ2UgaXMgZW1wdHkKK2V2ZW50OjB4NjggY291bnRlcnM6MSwyLDMsNCw1LDYgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOklOU19SRU5BTUUgOiBOdW1iZXIgb2YgaW5zdHJ1Y3Rpb25zIGdvaW5nIHRocm91Z2ggdGhlIFJlZ2lzdGVyIFJlbmFtaW5nIHN0YWdlCisKK2V2ZW50OjB4NkUgY291bnRlcnM6MSwyLDMsNCw1LDYgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlBSRF9GTl9SRVQgOiBOdW1iZXIgb2YgcHJvY2VkdXJlIHJldHVybnMgd2hvc2UgY29uZGl0aW9uIGNvZGVzIGRvIG5vdCBmYWlsLCBleGNsdWRpbmcgYWxsIGV4Y2VwdGlvbiByZXR1cm5zCisKK2V2ZW50OjB4NzAgY291bnRlcnM6MSwyLDMsNCw1LDYgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOklOU19NQUlOX0VYRUMgOiBOdW1iZXIgb2YgaW5zdHJ1Y3Rpb25zIGJlaW5nIGV4ZWN1dGVkIGluIG1haW4gZXhlY3V0aW9uIHBpcGVsaW5lIG9mIHRoZSBDUFUsIHRoZSBtdWx0aXBseSBwaXBlbGluZSBhbmQgdGhlIEFMVSBwaXBlbGluZQorZXZlbnQ6MHg3MSBjb3VudGVyczoxLDIsMyw0LDUsNiB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SU5TX1NORF9FWEVDIDogTnVtYmVyIG9mIGluc3RydWN0aW9ucyBiZWluZyBleGVjdXRlZCBpbiB0aGUgc2Vjb25kIGV4ZWN1dGlvbiBwaXBlbGluZSAoQUxVKSBvZiB0aGUgQ1BVCitldmVudDoweDcyIGNvdW50ZXJzOjEsMiwzLDQsNSw2IHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJTlNfTFNVIDogTnVtYmVyIG9mIGluc3RydWN0aW9ucyBiZWluZyBleGVjdXRlZCBpbiB0aGUgTG9hZC9TdG9yZSB1bml0CitldmVudDoweDczIGNvdW50ZXJzOjEsMiwzLDQsNSw2IHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJTlNfRlBfUlIgOiBOdW1iZXIgb2YgZmxvYXRpbmctcG9pbnQgaW5zdHJ1Y3Rpb25zIGdvaW5nIHRocm91Z2ggdGhlIFJlZ2lzdGVyIFJlbmFtZSBzdGFnZQorZXZlbnQ6MHg3NCBjb3VudGVyczoxLDIsMyw0LDUsNiB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SU5TX05FT05fUlIgOiBOdW1iZXIgb2YgTkVPTiBpbnN0cnVjdGlvbnMgZ29pbmcgdGhyb3VnaCB0aGUgUmVnaXN0ZXIgUmVuYW1lIHN0YWdlCisKK2V2ZW50OjB4ODAgY291bnRlcnM6MSwyLDMsNCw1LDYgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlNUQUxMX1BMRCA6IE51bWJlciBvZiBjeWNsZXMgd2hlcmUgQ1BVIGlzIHN0YWxsZWQgYmVjYXVzZSBQTEQgc2xvdHMgYXJlIGFsbCBmdWxsCitldmVudDoweDgxIGNvdW50ZXJzOjEsMiwzLDQsNSw2IHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpTVEFMTF9XUklURSA6IE51bWJlciBvZiBjeWNsZXMgd2hlcmUgQ1BVIGlzIHN0YWxsZWQgYmVjYXVzZSBkYXRhIHNpZGUgaXMgZnVsbCBhbmQgZXhlY3V0aW5nIHdyaXRlcyB0byBleHRlcm5hbCBtZW1vcnkKK2V2ZW50OjB4ODIgY291bnRlcnM6MSwyLDMsNCw1LDYgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlNUQUxMX0lOU19UTEIgOiBOdW1iZXIgb2YgY3ljbGVzIHdoZXJlIENQVSBpcyBzdGFsbGVkIGJlY2F1c2Ugb2YgbWFpbiBUTEIgbWlzc2VzIG9uIHJlcXVlc3RzIGlzc3VlZCBieSB0aGUgaW5zdHJ1Y3Rpb24gc2lkZQorZXZlbnQ6MHg4MyBjb3VudGVyczoxLDIsMyw0LDUsNiB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6U1RBTExfREFUQV9UTEIgOiBOdW1iZXIgb2YgY3ljbGVzIHdoZXJlIENQVSBpcyBzdGFsbGVkIGJlY2F1c2Ugb2YgbWFpbiBUTEIgbWlzc2VzIG9uIHJlcXVlc3RzIGlzc3VlZCBieSB0aGUgZGF0YSBzaWRlCitldmVudDoweDg0IGNvdW50ZXJzOjEsMiwzLDQsNSw2IHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpTVEFMTF9JTlNfVVRMQiA6IE51bWJlciBvZiBjeWNsZXMgd2hlcmUgQ1BVIGlzIHN0YWxsZWQgYmVjYXVzZSBvZiBtaWNybyBUTEIgbWlzc2VzIG9uIHRoZSBpbnN0cnVjdGlvbiBzaWRlCitldmVudDoweDg1IGNvdW50ZXJzOjEsMiwzLDQsNSw2IHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpTVEFMTF9EQVRBX1VMVEIgOiBOdW1iZXIgb2YgY3ljbGVzIHdoZXJlIENQVSBpcyBzdGFsbGVkIGJlY2F1c2Ugb2YgbWljcm8gVExCIG1pc3NlcyBvbiB0aGUgZGF0YSBzaWRlCitldmVudDoweDg2IGNvdW50ZXJzOjEsMiwzLDQsNSw2IHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpTVEFMTF9ETUIgOiBOdW1iZXIgb2YgY3ljbGVzIHdoZXJlIENQVSBpcyBzdGFsbGVkIGR1ZSB0byBleGVjdXRlZCBvZiBhIERNQiBtZW1vcnkgYmFycmllcgorCitldmVudDoweDhBIGNvdW50ZXJzOjEsMiwzLDQsNSw2IHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpDTEtfSU5UX0VOIDogTnVtYmVyIG9mIGN5Y2xlcyBkdXJpbmcgd2hpY2ggdGhlIGludGVnZXIgY29yZSBjbG9jayBpcyBlbmFibGVkCitldmVudDoweDhCIGNvdW50ZXJzOjEsMiwzLDQsNSw2IHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpDTEtfREVfRU4gOiBOdW1iZXIgb2YgY3ljbGVzIGR1cmluZyB3aGljaCB0aGUgRGF0YSBFbmdpbmUgY2xvY2sgaXMgZW5hYmxlZAorCitldmVudDoweDkwIGNvdW50ZXJzOjEsMiwzLDQsNSw2IHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJTlNfSVNCIDogTnVtYmVyIG9mIElTQiBpbnN0cnVjdGlvbnMgYXJjaGl0ZWN0dXJhbGx5IGV4ZWN1dGVkCitldmVudDoweDkxIGNvdW50ZXJzOjEsMiwzLDQsNSw2IHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJTlNfRFNCIDogTnVtYmVyIG9mIERTQiBpbnN0cnVjdGlvbnMgYXJjaGl0ZWN0dXJhbGx5IGV4ZWN1dGVkCitldmVudDoweDkyIGNvdW50ZXJzOjEsMiwzLDQsNSw2IHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJTlNfRE1CIDogTnVtYmVyIG9mIERNQiBpbnN0cnVjdGlvbnMgc3BlY3VsYXRpdmVseSBleGVjdXRlZAorZXZlbnQ6MHg5MyBjb3VudGVyczoxLDIsMyw0LDUsNiB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RVhUX0lSUSA6IE51bWJlciBvZiBleHRlcm5hbCBpbnRlcnJ1cHRzIGV4ZWN1dGVkIGJ5IHRoZSBwcm9jZXNzb3IKKworZXZlbnQ6MHhBMCBjb3VudGVyczoxLDIsMyw0LDUsNiB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6UExFX0NMX1JFUV9DTVAgOiBQTEUgY2FjaGUgbGluZSByZXF1ZXN0IGNvbXBsZXRlZAorZXZlbnQ6MHhBMSBjb3VudGVyczoxLDIsMyw0LDUsNiB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6UExFX0NMX1JFUV9TS1AgOiBQTEUgY2FjaGUgbGluZSByZXF1ZXN0IHNraXBwZWQKK2V2ZW50OjB4QTIgY291bnRlcnM6MSwyLDMsNCw1LDYgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlBMRV9GSUZPX0ZMU0ggOiBQTEUgRklGTyBmbHVzaAorZXZlbnQ6MHhBMyBjb3VudGVyczoxLDIsMyw0LDUsNiB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6UExFX1JFUV9DT01QIDogUExFIHJlcXVlc3QgY29tcGxldGVkCitldmVudDoweEE0IGNvdW50ZXJzOjEsMiwzLDQsNSw2IHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpQTEVfRklGT19PRiA6IFBMRSBGSUZPIG92ZXJmbG93CitldmVudDoweEE1IGNvdW50ZXJzOjEsMiwzLDQsNSw2IHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpQTEVfUkVRX1BSRyA6IFBMRSByZXF1ZXN0IHByb2dyYW1tZWQKZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2V2ZW50cy9hcm0vYXJtdjctY2E5L3VuaXRfbWFza3MgYi9vcHJvZmlsZS0wLjkuNy9ldmVudHMvYXJtL2FybXY3LWNhOS91bml0X21hc2tzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwMjc0NjkKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9ldmVudHMvYXJtL2FybXY3LWNhOS91bml0X21hc2tzCkBAIC0wLDAgKzEsNCBAQAorIyBBUk0gVjcgUE1OQyBwb3NzaWJsZSB1bml0IG1hc2tzCisjCituYW1lOnplcm8gdHlwZTptYW5kYXRvcnkgZGVmYXVsdDoweDAwCisJMHgwMCBObyB1bml0IG1hc2sKZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2V2ZW50cy9hcm0vYXJtdjctY29tbW9uL2V2ZW50cyBiL29wcm9maWxlLTAuOS43L2V2ZW50cy9hcm0vYXJtdjctY29tbW9uL2V2ZW50cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNGZlOGM3Ci0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL2FybS9hcm12Ny1jb21tb24vZXZlbnRzCkBAIC0wLDAgKzEsMjIgQEAKKyMgQVJNIFY3IGV2ZW50cworIyBGcm9tIEFSTSBBUk0KKyMKK2V2ZW50OjB4MDAgY291bnRlcnM6MSwyLDMsNCw1LDYgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlBNTkNfU1dfSU5DUiA6IFNvZnR3YXJlIGluY3JlbWVudCBvZiBQTU5DIHJlZ2lzdGVycworZXZlbnQ6MHgwMSBjb3VudGVyczoxLDIsMyw0LDUsNiB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SUZFVENIX01JU1MgOiBJbnN0cnVjdGlvbiBmZXRjaCBtaXNzZXMgZnJvbSBjYWNoZSBvciBub3JtYWwgY2FjaGVhYmxlIG1lbW9yeQorZXZlbnQ6MHgwMiBjb3VudGVyczoxLDIsMyw0LDUsNiB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SVRMQl9NSVNTIDogSW5zdHJ1Y3Rpb24gZmV0Y2ggbWlzc2VzIGZyb20gVExCCitldmVudDoweDAzIGNvdW50ZXJzOjEsMiwzLDQsNSw2IHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpEQ0FDSEVfUkVGSUxMIDogRGF0YSBSL1cgb3BlcmF0aW9uIHRoYXQgY2F1c2VzIGEgcmVmaWxsIGZyb20gY2FjaGUgb3Igbm9ybWFsIGNhY2hlYWJsZSBtZW1vcnkKK2V2ZW50OjB4MDQgY291bnRlcnM6MSwyLDMsNCw1LDYgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRDQUNIRV9BQ0NFU1MgOiBEYXRhIFIvVyBmcm9tIGNhY2hlCitldmVudDoweDA1IGNvdW50ZXJzOjEsMiwzLDQsNSw2IHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpEVExCX1JFRklMTCA6IERhdGEgUi9XIHRoYXQgY2F1c2VzIGEgVExCIHJlZmlsbAorZXZlbnQ6MHgwNiBjb3VudGVyczoxLDIsMyw0LDUsNiB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RFJFQUQgOiBEYXRhIHJlYWQgYXJjaGl0ZWN0dXJhbGx5IGV4ZWN1dGVkIChub3RlOiBhcmNoaXRlY3R1cmFsbHkgZXhlY3V0ZWQgPSBmb3IgaW5zdHJ1Y3Rpb25zIHRoYXQgYXJlIHVuY29uZGl0aW9uYWwgb3IgdGhhdCBwYXNzIHRoZSBjb25kaXRpb24gY29kZSkKK2V2ZW50OjB4MDcgY291bnRlcnM6MSwyLDMsNCw1LDYgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRXUklURSA6IERhdGEgd3JpdGUgYXJjaGl0ZWN0dXJhbGx5IGV4ZWN1dGVkCitldmVudDoweDA4IGNvdW50ZXJzOjEsMiwzLDQsNSw2IHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJTlNUUl9FWEVDVVRFRCA6IEFsbCBleGVjdXRlZCBpbnN0cnVjdGlvbnMKK2V2ZW50OjB4MDkgY291bnRlcnM6MSwyLDMsNCw1LDYgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkVYQ19UQUtFTiA6IEV4Y2VwdGlvbiB0YWtlbgorZXZlbnQ6MHgwQSBjb3VudGVyczoxLDIsMyw0LDUsNiB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RVhDX0VYRUNVVEVEIDogRXhjZXB0aW9uIHJldHVybiBhcmNoaXRlY3R1cmFsbHkgZXhlY3V0ZWQKK2V2ZW50OjB4MEIgY291bnRlcnM6MSwyLDMsNCw1LDYgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkNJRF9XUklURSA6IEluc3RydWN0aW9uIHRoYXQgd3JpdGVzIHRvIHRoZSBDb250ZXh0IElEIFJlZ2lzdGVyIGFyY2hpdGVjdHVyYWxseSBleGVjdXRlZAorZXZlbnQ6MHgwQyBjb3VudGVyczoxLDIsMyw0LDUsNiB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6UENfV1JJVEUgOiBTVyBjaGFuZ2Ugb2YgUEMsIGFyY2hpdGVjdHVyYWxseSBleGVjdXRlZCAobm90IGJ5IGV4Y2VwdGlvbnMpCitldmVudDoweDBEIGNvdW50ZXJzOjEsMiwzLDQsNSw2IHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpQQ19JTU1fQlJBTkNIIDogSW1tZWRpYXRlIGJyYW5jaCBpbnN0cnVjdGlvbiBleGVjdXRlZCAodGFrZW4gb3Igbm90KQorZXZlbnQ6MHgwRSBjb3VudGVyczoxLDIsMyw0LDUsNiB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6UENfUFJPQ19SRVRVUk4gOiBQcm9jZWR1cmUgcmV0dXJuIGFyY2hpdGVjdHVyYWxseSBleGVjdXRlZCAobm90IGJ5IGV4Y2VwdGlvbnMpCitldmVudDoweDBGIGNvdW50ZXJzOjEsMiwzLDQsNSw2IHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpVTkFMSUdORURfQUNDRVNTIDogVW5hbGlnbmVkIGFjY2VzcyBhcmNoaXRlY3R1cmFsbHkgZXhlY3V0ZWQKK2V2ZW50OjB4MTAgY291bnRlcnM6MSwyLDMsNCw1LDYgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlBDX0JSQU5DSF9NSVNfUFJFRCA6IEJyYW5jaCBtaXNwcmVkaWN0ZWQgb3Igbm90IHByZWRpY3RlZC4gQ291bnRzIHBpcGVsaW5lIGZsdXNoZXMgYmVjYXVzZSBvZiBtaXNwcmVkaWN0aW9uCitldmVudDoweDEyIGNvdW50ZXJzOjEsMiwzLDQsNSw2IHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpQQ19CUkFOQ0hfTUlTX1VTRUQgOiBCcmFuY2ggb3IgY2hhbmdlIGluIHByb2dyYW0gZmxvdyB0aGF0IGNvdWxkIGhhdmUgYmVlbiBwcmVkaWN0ZWQKK2V2ZW50OjB4RkYgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6Q1BVX0NZQ0xFUyA6IE51bWJlciBvZiBDUFUgY3ljbGVzCmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9ldmVudHMvYXJtL2FybXY3LWNvbW1vbi91bml0X21hc2tzIGIvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL2FybS9hcm12Ny1jb21tb24vdW5pdF9tYXNrcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDI3NDY5Ci0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL2FybS9hcm12Ny1jb21tb24vdW5pdF9tYXNrcwpAQCAtMCwwICsxLDQgQEAKKyMgQVJNIFY3IFBNTkMgcG9zc2libGUgdW5pdCBtYXNrcworIworbmFtZTp6ZXJvIHR5cGU6bWFuZGF0b3J5IGRlZmF1bHQ6MHgwMAorCTB4MDAgTm8gdW5pdCBtYXNrCmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9ldmVudHMvYXJtL2FybXY3LXNjb3JwaW9uL2V2ZW50cyBiL29wcm9maWxlLTAuOS43L2V2ZW50cy9hcm0vYXJtdjctc2NvcnBpb24vZXZlbnRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5MjU0MjEKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9ldmVudHMvYXJtL2FybXY3LXNjb3JwaW9uL2V2ZW50cwpAQCAtMCwwICsxLDk0IEBACisjIEFSTSBWNyBldmVudHMKKyMgRnJvbSBTY29ycGlvbiBQcm9jZXNzb3IgRmFtaWx5IFByb2dyYW1tZXIncyBSZWZlcmVuY2UgTWFudWFsIChQUk0pCisjCitpbmNsdWRlOmFybS9hcm12Ny1jb21tb24KKworZXZlbnQ6MHg0YyBjb3VudGVyczoxLDIsMyw0IHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJQ0FDSEVfRVhQTF9JTlYgOiBJLWNhY2hlIGV4cGxpY2l0IGludmFsaWRhdGVzCitldmVudDoweDRkIGNvdW50ZXJzOjEsMiwzLDQgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOklDQUNIRV9NSVNTIDogSS1jYWNoZSBtaXNzZXMKK2V2ZW50OjB4NGUgY291bnRlcnM6MSwyLDMsNCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SUNBQ0hFX0FDQ0VTUyA6IEktY2FjaGUgYWNjZXNzZXMKK2V2ZW50OjB4NGYgY291bnRlcnM6MSwyLDMsNCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SUNBQ0hFX0NBQ0hFUkVRX0wyIDogSS1jYWNoZSBjYWNoZWFibGUgcmVxdWVzdHMgdG8gTDIKK2V2ZW50OjB4NTAgY291bnRlcnM6MSwyLDMsNCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SUNBQ0hFX05PQ0FDSEVfTDIgOiBJLWNhY2hlIG5vbi1jYWNoZWFibGUgcmVxdWVzdHMgdG8gTDIKK2V2ZW50OjB4NTEgY291bnRlcnM6MSwyLDMsNCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SElRVVBfTk9QRUQgOiBDb25kaXRpb25hbCBpbnN0cnVjdGlvbnMgSElRVVBzIE5PUGVkCitldmVudDoweDUyIGNvdW50ZXJzOjEsMiwzLDQgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRBVEFfQUJPUlQgOiBJbnRlcnJ1cHRzIGFuZCBFeGNlcHRpb25zIERhdGEgQWJvcnQKK2V2ZW50OjB4NTMgY291bnRlcnM6MSwyLDMsNCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SVJRIDogSW50ZXJydXB0cyBhbmQgRXhjZXB0aW9ucyBJUlEKK2V2ZW50OjB4NTQgY291bnRlcnM6MSwyLDMsNCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RklRIDogSW50ZXJydXB0cyBhbmQgRXhjZXB0aW9ucyBGSVEKK2V2ZW50OjB4NTUgY291bnRlcnM6MSwyLDMsNCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QUxMX0VYQ1BUIDogSW50ZXJydXB0cyBhbmQgRXhjZXB0aW9ucyBBbGwgaW50ZXJydXB0cworZXZlbnQ6MHg1NiBjb3VudGVyczoxLDIsMyw0IHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpVTkRFRiA6IEludGVycnVwdHMgYW5kIEV4Y2VwdGlvbnMgVW5kZWZpbmVkCitldmVudDoweDU3IGNvdW50ZXJzOjEsMiwzLDQgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlNWQyA6IEludGVycnVwdHMgYW5kIEV4Y2VwdGlvbnMgU1ZDCitldmVudDoweDU4IGNvdW50ZXJzOjEsMiwzLDQgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlNNQyA6IEludGVycnVwdHMgYW5kIEV4Y2VwdGlvbnMgU01DCitldmVudDoweDU5IGNvdW50ZXJzOjEsMiwzLDQgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlBSRUZFVENIX0FCT1JUIDogSW50ZXJydXB0cyBhbmQgRXhjZXB0aW9ucyBQcmVmZXRjaCBBYm9ydAorZXZlbnQ6MHg1YSBjb3VudGVyczoxLDIsMyw0IHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJTkRFWF9DSEVDSyA6IEludGVycnVwdHMgYW5kIEV4Y2VwdGlvbnMgSW5kZXggQ2hlY2sKK2V2ZW50OjB4NWIgY291bnRlcnM6MSwyLDMsNCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6TlVMTF9DSEVDSyA6IEludGVycnVwdHMgYW5kIEV4Y2VwdGlvbnMgTnVsbCBDaGVjaworZXZlbnQ6MHg1YyBjb3VudGVyczoxLDIsMyw0IHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpFWFBMX0lDSUFMTFUgOiBJLWNhY2hlIGFuZCBCVEFDIEludmFsaWRhdGVzIEV4cGxpY2l0IElDSUFMTFUKK2V2ZW50OjB4NWQgY291bnRlcnM6MSwyLDMsNCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SU1QTF9JQ0lBTExVIDogSS1jYWNoZSBhbmQgQlRBQyBJbnZhbGlkYXRlcyBJbXBsaWNpdCBJQ0lBTExVCitldmVudDoweDVlIGNvdW50ZXJzOjEsMiwzLDQgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOk5PTklDSUFMTFVfQlRBQ19JTlYgOiBJLWNhY2hlIGFuZCBCVEFDIEludmFsaWRhdGVzIE5vbi1JQ0lBTExVIEJUQUMgSW52YWxpZGF0ZQorZXZlbnQ6MHg1ZiBjb3VudGVyczoxLDIsMyw0IHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJQ0lNVkFVX0lNUExfSUNJQUxMVSA6IEktY2FjaGUgYW5kIEJUQUMgSW52YWxpZGF0ZXMgSUNJTVZBVS1pbXBsaWVkIElDSUFMTFUKKworZXZlbnQ6MHg2MCBjb3VudGVyczoxLDIsMyw0IHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpTUElQRV9PTkxZX0NZQ0xFUyA6IElzc3VlIFMtcGlwZSBvbmx5IGlzc3VlIGN5Y2xlcworZXZlbnQ6MHg2MSBjb3VudGVyczoxLDIsMyw0IHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpYUElQRV9PTkxZX0NZQ0xFUyA6IElzc3VlIFgtcGlwZSBvbmx5IGlzc3VlIGN5Y2xlcworZXZlbnQ6MHg2MiBjb3VudGVyczoxLDIsMyw0IHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpEVUFMX0NZQ0xFUyA6IElzc3VlIGR1YWwgaXNzdWUgY3ljbGVzCitldmVudDoweDYzIGNvdW50ZXJzOjEsMiwzLDQgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRJU1BBVENIX0FOWV9DWUNMRVMgOiBEaXNwYXRjaCBhbnkgZGlzcGF0Y2ggY3ljbGVzCitldmVudDoweDY0IGNvdW50ZXJzOjEsMiwzLDQgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkZJRk9fRlVMTEJMS19DTVQgOiBDb21taXRzIFRyYWNlIEZJRk8gZnVsbCBCbGsgQ01UCitldmVudDoweDY1IGNvdW50ZXJzOjEsMiwzLDQgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkZBSUxfQ09ORF9JTlNUIDogQ29uZGl0aW9uYWwgaW5zdHJ1Y3Rpb25zIGZhaWxpbmcgY29uZGl0aW9uYWwgaW5zdHJzIChleGNsdWRpbmcgYnJhbmNoZXMpCitldmVudDoweDY2IGNvdW50ZXJzOjEsMiwzLDQgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlBBU1NfQ09ORF9JTlNUIDogQ29uZGl0aW9uYWwgaW5zdHJ1Y3Rpb25zIHBhc3NpbmcgY29uZGl0aW9uYWwgaW5zdHJzIChleGNsdWRpbmcgYnJhbmNoZXMpCitldmVudDoweDY3IGNvdW50ZXJzOjEsMiwzLDQgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkFMTE9XX1ZVX0NMSyA6IFVuaXQgQ2xvY2sgR2F0aW5nIEFsbG93IFZVIENsa3MKK2V2ZW50OjB4NjggY291bnRlcnM6MSwyLDMsNCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6VlVfSURMRSA6IFVuaXQgQ2xvY2sgR2F0aW5nIFZVIElkbGUKK2V2ZW50OjB4NjkgY291bnRlcnM6MSwyLDMsNCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QUxMT1dfTDJfQ0xLIDogVW5pdCBDbG9jayBHYXRpbmcgQWxsb3cgTDIgQ2xrcworZXZlbnQ6MHg2YSBjb3VudGVyczoxLDIsMyw0IHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpMMl9JRExFIDogVW5pdCBDbG9jayBHYXRpbmcgTDIgSWRsZQorCitldmVudDoweDZiIGNvdW50ZXJzOjEsMiwzLDQgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRUTEJfSU1QTF9JTlZfU0NUTFJfREFDUiA6IERUTEIgaW1wbGljaXQgaW52YWxpZGF0ZXMgd3JpdGVzIHRvIFNDVExSIGFuZCBEQUNSCitldmVudDoweDZjIGNvdW50ZXJzOjEsMiwzLDQgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRUTEJfRVhQTF9JTlYgOiBEVExCIGV4cGxpY2l0IGludmFsaWRhdGVzCitldmVudDoweDZkIGNvdW50ZXJzOjEsMiwzLDQgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRUTEJfTUlTUyA6IERUTEIgbWlzc2VzCitldmVudDoweDZlIGNvdW50ZXJzOjEsMiwzLDQgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRUTEJfQUNDRVNTIDogRFRMQiBhY2Nlc3NlcworZXZlbnQ6MHg2ZiBjb3VudGVyczoxLDIsMyw0IHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJVExCX01JU1MgOiBJVExCIG1pc3NlcworZXZlbnQ6MHg3MCBjb3VudGVyczoxLDIsMyw0IHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJVExCX0lNUExfSU5WIDogSVRMQiBpbXBsaWNpdCBJVExCIGludmFsaWRhdGVzCitldmVudDoweDcxIGNvdW50ZXJzOjEsMiwzLDQgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOklUTEJfRVhQTF9JTlYgOiBJVExCIGV4cGxpY2l0IElUTEIgaW52YWxpZGF0ZXMKK2V2ZW50OjB4NzIgY291bnRlcnM6MSwyLDMsNCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6VVRMQl9EX01JU1MgOiBVVExCIGQtc2lkZSBtaXNzZXMKK2V2ZW50OjB4NzMgY291bnRlcnM6MSwyLDMsNCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6VVRMQl9EX0FDQ0VTUyA6IFVUTEIgZC1zaWRlIGFjY2Vzc2VzCitldmVudDoweDc0IGNvdW50ZXJzOjEsMiwzLDQgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlVUTEJfSV9NSVNTIDogVVRMQiBpLXNpZGUgbWlzc2VzCitldmVudDoweDc1IGNvdW50ZXJzOjEsMiwzLDQgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlVUTEJfSV9BQ0NFU1MgOiBVVExCIGktc2lkZSBhY2Nlc3NlcworZXZlbnQ6MHg3NiBjb3VudGVyczoxLDIsMyw0IHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpVVExCX0lOVl9BU0lEIDogVVRMQiBpbnZhbGlkYXRlIGJ5IEFTSUQKK2V2ZW50OjB4NzcgY291bnRlcnM6MSwyLDMsNCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6VVRMQl9JTlZfTVZBIDogVVRMQiBpbnZhbGlkYXRlIGJ5IE1WQQorZXZlbnQ6MHg3OCBjb3VudGVyczoxLDIsMyw0IHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpVVExCX0lOVl9BTEwgOiBVVExCIGludmFsaWRhdGUgYWxsCitldmVudDoweDc5IGNvdW50ZXJzOjEsMiwzLDQgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlMyX0hPTERfUkRRX1VOQVZBSUwgOiBTMiBob2xkIFJEUSB1bmF2YWlsCitldmVudDoweDdhIGNvdW50ZXJzOjEsMiwzLDQgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlMyX0hPTEQgOiBTMiBob2xkIFMyIGhvbGQKK2V2ZW50OjB4N2IgY291bnRlcnM6MSwyLDMsNCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6UzJfSE9MRF9ERVZfT1AgOiBTMiBob2xkIGRldmljZSBvcAorZXZlbnQ6MHg3YyBjb3VudGVyczoxLDIsMyw0IHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpTMl9IT0xEX09SREVSIDogUzIgaG9sZCBzdHJvbmdseSBvcmRlcmVkIG9wCitldmVudDoweDdkIGNvdW50ZXJzOjEsMiwzLDQgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlMyX0hPTERfQkFSUklFUiA6IFMyIGhvbGQgYmFycmllcgorCitldmVudDoweDdlIGNvdW50ZXJzOjEsMiwzLDQgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlNDT1JQSU9OX1ZJVV9EVUFMX0NZQ0xFIDogU2NvcnBpb24gVklVIGR1YWwgY3ljbGUKK2V2ZW50OjB4N2YgY291bnRlcnM6MSwyLDMsNCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6U0NPUlBJT05fVklVX1NJTkdMRV9DWUNMRSA6IFNjb3JwaW9uIFZJVSBzaW5nbGUgY3ljbGUKK2V2ZW50OjB4ODAgY291bnRlcnM6MSwyLDMsNCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6U0NPUlBJT05fVlhfUElQRV9XQVJfU1RBTExfQ1lDTEVTIDogU2NvcnBpb24gVlggcGlwZSBXQVIgY3ljbGVzCitldmVudDoweDgxIGNvdW50ZXJzOjEsMiwzLDQgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlNDT1JQSU9OX1ZYX1BJUEVfV0FXX1NUQUxMX0NZQ0xFUyA6IFNjb3JwaW9uIFZYIHBpcGUgV0FXIGN5Y2xlcworZXZlbnQ6MHg4MiBjb3VudGVyczoxLDIsMyw0IHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpTQ09SUElPTl9WWF9QSVBFX1JBV19TVEFMTF9DWUNMRVMgOiBTY29ycGlvbiBWWCBwaXBlIFJBVyBjeWNsZXMKK2V2ZW50OjB4ODMgY291bnRlcnM6MSwyLDMsNCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6U0NPUlBJT05fVlhfUElQRV9MT0FEX1VTRV9TVEFMTCA6IFNjb3JwaW9uIFZYIHBpcGUgbG9hZCB1c2Ugc3RhbGwKK2V2ZW50OjB4ODQgY291bnRlcnM6MSwyLDMsNCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6U0NPUlBJT05fVlNfUElQRV9XQVJfU1RBTExfQ1lDTEVTIDogU2NvcnBpb24gVlMgcGlwZSBXQVIgc3RhbGwgY3ljbGVzCitldmVudDoweDg1IGNvdW50ZXJzOjEsMiwzLDQgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlNDT1JQSU9OX1ZTX1BJUEVfV0FXX1NUQUxMX0NZQ0xFUyA6IFNjb3JwaW9uIFZTIHBpcGUgV0FXIHN0YWxsIGN5Y2xlcworZXZlbnQ6MHg4NiBjb3VudGVyczoxLDIsMyw0IHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpTQ09SUElPTl9WU19QSVBFX1JBV19TVEFMTF9DWUNMRVMgOiBTY29ycGlvbiBWUyBwaXBlIFJBVyBzdGFsbCBjeWNsZXMKK2V2ZW50OjB4ODcgY291bnRlcnM6MSwyLDMsNCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6U0NPUlBJT05fRVhDRVBUSU9OU19JTlZfT1BFUkFUSU9OIDogU2NvcnBpb24gaW52YWxpZCBvcGVyYXRpb24gZXhjZXB0aW9ucworZXZlbnQ6MHg4OCBjb3VudGVyczoxLDIsMyw0IHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpTQ09SUElPTl9FWENFUFRJT05TX0RJVl9CWV9aRVJPIDogU2NvcnBpb24gZGl2aWRlIGJ5IHplcm8gZXhjZXB0aW9ucworZXZlbnQ6MHg4OSBjb3VudGVyczoxLDIsMyw0IHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpTQ09SUElPTl9DT05EX0lOU1RfRkFJTF9WWF9QSVBFIDogU2NvcnBpb24gY29uZGl0aW9uYWwgaW5zdHJ1Y3Rpb24gZmFpbCBWWCBwaXBlCitldmVudDoweDhhIGNvdW50ZXJzOjEsMiwzLDQgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlNDT1JQSU9OX0NPTkRfSU5TVF9GQUlMX1ZTX1BJUEUgOiBTY29ycGlvbiBjb25kaXRpb25hbCBpbnN0cnVjdGlvbiBmYWlsIFZTIHBpcGUKK2V2ZW50OjB4OGIgY291bnRlcnM6MSwyLDMsNCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6U0NPUlBJT05fRVhDRVBUSU9OU19PVkVSRkxPVyA6IFNjb3JwaW9uIG92ZXJmbG93IGV4Y2VwdGlvbnMKK2V2ZW50OjB4OGMgY291bnRlcnM6MSwyLDMsNCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6U0NPUlBJT05fRVhDRVBUSU9OU19VTkRFUkZMT1cgOiBTY29ycGlvbiB1bmRlcmZsb3cgZXhjZXB0aW9ucworZXZlbnQ6MHg4ZCBjb3VudGVyczoxLDIsMyw0IHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpTQ09SUElPTl9FWENFUFRJT05TX0RFTk9STSA6IFNjb3JwaW9uIGRlbm9ybSBleGNlcHRpb25zCisKK2V2ZW50OjB4OGUgY291bnRlcnM6MSwyLDMsNCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QkFOS19BQl9ISVQgOiBMMiBoaXQgcmF0ZXMgYmFuayBBL0IgaGl0cworZXZlbnQ6MHg4ZiBjb3VudGVyczoxLDIsMyw0IHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpCQU5LX0FCX0FDQ0VTUyA6IEwyIGhpdCByYXRlcyBiYW5rIEEvQiBhY2Nlc3NlcworZXZlbnQ6MHg5MCBjb3VudGVyczoxLDIsMyw0IHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpCQU5LX0NEX0hJVCA6IEwyIGhpdCByYXRlcyBiYW5rIEMvRCBoaXRzCitldmVudDoweDkxIGNvdW50ZXJzOjEsMiwzLDQgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkJBTktfQ0RfQUNDRVNTIDogTDIgaGl0IHJhdGVzIGJhbmsgQy9EIGFjY2Vzc2VzCitldmVudDoweDkyIGNvdW50ZXJzOjEsMiwzLDQgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkJBTktfQUJfRFNJREVfSElUIDogTDIgaGl0IHJhdGVzIGJhbmsgQS9CIGQtc2lkZSBoaXRzCitldmVudDoweDkzIGNvdW50ZXJzOjEsMiwzLDQgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkJBTktfQUJfRFNJREVfQUNDRVNTIDogTDIgaGl0IHJhdGVzIGJhbmsgQS9CIGQtc2lkZSBhY2Nlc3NlcworZXZlbnQ6MHg5NCBjb3VudGVyczoxLDIsMyw0IHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpCQU5LX0NEX0RTSURFX0hJVCA6IEwyIGhpdCByYXRlcyBiYW5rIEMvRCBkLXNpZGUgaGl0cworZXZlbnQ6MHg5NSBjb3VudGVyczoxLDIsMyw0IHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpCQU5LX0NEX0RTSURFX0FDQ0VTUyA6IEwyIGhpdCByYXRlcyBiYW5rIEMvRCBkLXNpZGUgYWNjZXNzZXMKK2V2ZW50OjB4OTYgY291bnRlcnM6MSwyLDMsNCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QkFOS19BQl9JU0lERV9ISVQgOiBMMiBoaXQgcmF0ZXMgYmFuayBBL0IgaS1zaWRlIGhpdHMKK2V2ZW50OjB4OTcgY291bnRlcnM6MSwyLDMsNCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QkFOS19BQl9JU0lERV9BQ0NFU1MgOiBMMiBoaXQgcmF0ZXMgYmFuayBBL0IgaS1zaWRlIGFjY2Vzc2VzCitldmVudDoweDk4IGNvdW50ZXJzOjEsMiwzLDQgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkJBTktfQ0RfSVNJREVfSElUIDogTDIgaGl0IHJhdGVzIGJhbmsgQy9EIGktc2lkZSBoaXRzCitldmVudDoweDk5IGNvdW50ZXJzOjEsMiwzLDQgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkJBTktfQ0RfSVNJREVfQUNDRVNTIDogTDIgaGl0IHJhdGVzIGJhbmsgQy9EIGktc2lkZSBhY2Nlc3NlcworZXZlbnQ6MHg5YSBjb3VudGVyczoxLDIsMyw0IHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJU0lERV9SRF9XQUlUIDogZmlsbHMgYW5kIGNhc3RvdXRzIGN5Y2xlcyB0aGF0IGktc2lkZSBSRCByZXF1ZXN0cyB3YWl0IG9uIGRhdGEgZnJvbSBidXMKK2V2ZW50OjB4OWIgY291bnRlcnM6MSwyLDMsNCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RFNJREVfUkRfV0FJVCA6IGZpbGxzIGFuZCBjYXN0b3V0cyBjeWNsZXMgdGhhdCBkLXNpZGUgUkQgcmVxdWVzdHMgd2FpdCBvbiBkYXRhIGZyb20gYnVzCitldmVudDoweDljIGNvdW50ZXJzOjEsMiwzLDQgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkJBTktfQllQQVNTX1dSSVRFIDogZmlsbHMgYW5kIGNhc3RvdXRzIGJhbmsgYnlwYXNzIHdyaXRlcworZXZlbnQ6MHg5ZCBjb3VudGVyczoxLDIsMyw0IHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpCQU5LX0FCX05PTl9DQVNUT1VUIDogZmlsbHMgYW5kIGNhc3RvdXRzIGJhbmsgQS9CIG5vbi1jYXN0b3V0IHdyaXRlcyB0byBidXMKK2V2ZW50OjB4OWUgY291bnRlcnM6MSwyLDMsNCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QkFOS19BQl9MMl9DQVNUT1VUIDogZmlsbHMgYW5kIGNhc3RvdXRzIGJhbmsgQS9CIEwyIGNhc3RvdXRzIChncmFudWxlcykKK2V2ZW50OjB4OWYgY291bnRlcnM6MSwyLDMsNCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QkFOS19DRF9OT05fQ0FTVE9VVCA6IGZpbGxzIGFuZCBjYXN0b3V0cyBiYW5rIEMvRCBub24tY2FzdG91dCB3cml0ZXMgdG8gYnVzCitldmVudDoweGEwIGNvdW50ZXJzOjEsMiwzLDQgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkJBTktfQ0RfTDJfQ0FTVE9VVCA6IGZpbGxzIGFuZCBjYXN0b3V0cyBiYW5rIEMvRCBMMiBjYXN0b3V0cyAoZ3JhbnVsZXMpCmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9ldmVudHMvYXJtL2FybXY3LXNjb3JwaW9uL3VuaXRfbWFza3MgYi9vcHJvZmlsZS0wLjkuNy9ldmVudHMvYXJtL2FybXY3LXNjb3JwaW9uL3VuaXRfbWFza3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDAyNzQ2OQotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2V2ZW50cy9hcm0vYXJtdjctc2NvcnBpb24vdW5pdF9tYXNrcwpAQCAtMCwwICsxLDQgQEAKKyMgQVJNIFY3IFBNTkMgcG9zc2libGUgdW5pdCBtYXNrcworIworbmFtZTp6ZXJvIHR5cGU6bWFuZGF0b3J5IGRlZmF1bHQ6MHgwMAorCTB4MDAgTm8gdW5pdCBtYXNrCmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9ldmVudHMvYXJtL2FybXY3LXNjb3JwaW9ubXAvZXZlbnRzIGIvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL2FybS9hcm12Ny1zY29ycGlvbm1wL2V2ZW50cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZmQwNjkxCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL2FybS9hcm12Ny1zY29ycGlvbm1wL2V2ZW50cwpAQCAtMCwwICsxLDc3IEBACisjIEFSTSBWNyBldmVudHMKKyMgRnJvbSBTY29ycGlvbiBQcm9jZXNzb3IgRmFtaWx5IFByb2dyYW1tZXIncyBSZWZlcmVuY2UgTWFudWFsIChQUk0pCisjCitpbmNsdWRlOmFybS9hcm12Ny1jb21tb24KKworZXZlbnQ6MHg0YyBjb3VudGVyczoxLDIsMyw0IHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJQ0FDSEVfRVhQTF9JTlYgOiBJLWNhY2hlIGV4cGxpY2l0IGludmFsaWRhdGVzCitldmVudDoweDRkIGNvdW50ZXJzOjEsMiwzLDQgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOklDQUNIRV9NSVNTIDogSS1jYWNoZSBtaXNzZXMKK2V2ZW50OjB4NGUgY291bnRlcnM6MSwyLDMsNCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SUNBQ0hFX0FDQ0VTUyA6IEktY2FjaGUgYWNjZXNzZXMKK2V2ZW50OjB4NGYgY291bnRlcnM6MSwyLDMsNCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SUNBQ0hFX0NBQ0hFUkVRX0wyIDogSS1jYWNoZSBjYWNoZWFibGUgcmVxdWVzdHMgdG8gTDIKK2V2ZW50OjB4NTAgY291bnRlcnM6MSwyLDMsNCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SUNBQ0hFX05PQ0FDSEVfTDIgOiBJLWNhY2hlIG5vbi1jYWNoZWFibGUgcmVxdWVzdHMgdG8gTDIKK2V2ZW50OjB4NTEgY291bnRlcnM6MSwyLDMsNCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SElRVVBfTk9QRUQgOiBDb25kaXRpb25hbCBpbnN0cnVjdGlvbnMgSElRVVBzIE5PUGVkCitldmVudDoweDUyIGNvdW50ZXJzOjEsMiwzLDQgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRBVEFfQUJPUlQgOiBJbnRlcnJ1cHRzIGFuZCBFeGNlcHRpb25zIERhdGEgQWJvcnQKK2V2ZW50OjB4NTMgY291bnRlcnM6MSwyLDMsNCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SVJRIDogSW50ZXJydXB0cyBhbmQgRXhjZXB0aW9ucyBJUlEKK2V2ZW50OjB4NTQgY291bnRlcnM6MSwyLDMsNCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RklRIDogSW50ZXJydXB0cyBhbmQgRXhjZXB0aW9ucyBGSVEKK2V2ZW50OjB4NTUgY291bnRlcnM6MSwyLDMsNCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QUxMX0VYQ1BUIDogSW50ZXJydXB0cyBhbmQgRXhjZXB0aW9ucyBBbGwgaW50ZXJydXB0cworZXZlbnQ6MHg1NiBjb3VudGVyczoxLDIsMyw0IHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpVTkRFRiA6IEludGVycnVwdHMgYW5kIEV4Y2VwdGlvbnMgVW5kZWZpbmVkCitldmVudDoweDU3IGNvdW50ZXJzOjEsMiwzLDQgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlNWQyA6IEludGVycnVwdHMgYW5kIEV4Y2VwdGlvbnMgU1ZDCitldmVudDoweDU4IGNvdW50ZXJzOjEsMiwzLDQgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlNNQyA6IEludGVycnVwdHMgYW5kIEV4Y2VwdGlvbnMgU01DCitldmVudDoweDU5IGNvdW50ZXJzOjEsMiwzLDQgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlBSRUZFVENIX0FCT1JUIDogSW50ZXJydXB0cyBhbmQgRXhjZXB0aW9ucyBQcmVmZXRjaCBBYm9ydAorZXZlbnQ6MHg1YSBjb3VudGVyczoxLDIsMyw0IHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJTkRFWF9DSEVDSyA6IEludGVycnVwdHMgYW5kIEV4Y2VwdGlvbnMgSW5kZXggQ2hlY2sKK2V2ZW50OjB4NWIgY291bnRlcnM6MSwyLDMsNCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6TlVMTF9DSEVDSyA6IEludGVycnVwdHMgYW5kIEV4Y2VwdGlvbnMgTnVsbCBDaGVjaworZXZlbnQ6MHg1YyBjb3VudGVyczoxLDIsMyw0IHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpFWFBMX0lDSUFMTFUgOiBJLWNhY2hlIGFuZCBCVEFDIEludmFsaWRhdGVzIEV4cGxpY2l0IElDSUFMTFUKK2V2ZW50OjB4NWQgY291bnRlcnM6MSwyLDMsNCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SU1QTF9JQ0lBTExVIDogSS1jYWNoZSBhbmQgQlRBQyBJbnZhbGlkYXRlcyBJbXBsaWNpdCBJQ0lBTExVCitldmVudDoweDVlIGNvdW50ZXJzOjEsMiwzLDQgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOk5PTklDSUFMTFVfQlRBQ19JTlYgOiBJLWNhY2hlIGFuZCBCVEFDIEludmFsaWRhdGVzIE5vbi1JQ0lBTExVIEJUQUMgSW52YWxpZGF0ZQorZXZlbnQ6MHg1ZiBjb3VudGVyczoxLDIsMyw0IHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJQ0lNVkFVX0lNUExfSUNJQUxMVSA6IEktY2FjaGUgYW5kIEJUQUMgSW52YWxpZGF0ZXMgSUNJTVZBVS1pbXBsaWVkIElDSUFMTFUKKworZXZlbnQ6MHg2MCBjb3VudGVyczoxLDIsMyw0IHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpTUElQRV9PTkxZX0NZQ0xFUyA6IElzc3VlIFMtcGlwZSBvbmx5IGlzc3VlIGN5Y2xlcworZXZlbnQ6MHg2MSBjb3VudGVyczoxLDIsMyw0IHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpYUElQRV9PTkxZX0NZQ0xFUyA6IElzc3VlIFgtcGlwZSBvbmx5IGlzc3VlIGN5Y2xlcworZXZlbnQ6MHg2MiBjb3VudGVyczoxLDIsMyw0IHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpEVUFMX0NZQ0xFUyA6IElzc3VlIGR1YWwgaXNzdWUgY3ljbGVzCitldmVudDoweDYzIGNvdW50ZXJzOjEsMiwzLDQgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRJU1BBVENIX0FOWV9DWUNMRVMgOiBEaXNwYXRjaCBhbnkgZGlzcGF0Y2ggY3ljbGVzCitldmVudDoweDY0IGNvdW50ZXJzOjEsMiwzLDQgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkZJRk9fRlVMTEJMS19DTVQgOiBDb21taXRzIFRyYWNlIEZJRk8gZnVsbCBCbGsgQ01UCitldmVudDoweDY1IGNvdW50ZXJzOjEsMiwzLDQgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkZBSUxfQ09ORF9JTlNUIDogQ29uZGl0aW9uYWwgaW5zdHJ1Y3Rpb25zIGZhaWxpbmcgY29uZGl0aW9uYWwgaW5zdHJzIChleGNsdWRpbmcgYnJhbmNoZXMpCitldmVudDoweDY2IGNvdW50ZXJzOjEsMiwzLDQgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlBBU1NfQ09ORF9JTlNUIDogQ29uZGl0aW9uYWwgaW5zdHJ1Y3Rpb25zIHBhc3NpbmcgY29uZGl0aW9uYWwgaW5zdHJzIChleGNsdWRpbmcgYnJhbmNoZXMpCitldmVudDoweDY3IGNvdW50ZXJzOjEsMiwzLDQgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkFMTE9XX1ZVX0NMSyA6IFVuaXQgQ2xvY2sgR2F0aW5nIEFsbG93IFZVIENsa3MKK2V2ZW50OjB4NjggY291bnRlcnM6MSwyLDMsNCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6VlVfSURMRSA6IFVuaXQgQ2xvY2sgR2F0aW5nIFZVIElkbGUKK2V2ZW50OjB4NjkgY291bnRlcnM6MSwyLDMsNCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QUxMT1dfTDJfQ0xLIDogVW5pdCBDbG9jayBHYXRpbmcgQWxsb3cgTDIgQ2xrcworZXZlbnQ6MHg2YSBjb3VudGVyczoxLDIsMyw0IHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpMMl9JRExFIDogVW5pdCBDbG9jayBHYXRpbmcgTDIgSWRsZQorCitldmVudDoweDZiIGNvdW50ZXJzOjEsMiwzLDQgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRUTEJfSU1QTF9JTlZfU0NUTFJfREFDUiA6IERUTEIgaW1wbGljaXQgaW52YWxpZGF0ZXMgd3JpdGVzIHRvIFNDVExSIGFuZCBEQUNSCitldmVudDoweDZjIGNvdW50ZXJzOjEsMiwzLDQgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRUTEJfRVhQTF9JTlYgOiBEVExCIGV4cGxpY2l0IGludmFsaWRhdGVzCitldmVudDoweDZkIGNvdW50ZXJzOjEsMiwzLDQgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRUTEJfTUlTUyA6IERUTEIgbWlzc2VzCitldmVudDoweDZlIGNvdW50ZXJzOjEsMiwzLDQgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRUTEJfQUNDRVNTIDogRFRMQiBhY2Nlc3NlcworZXZlbnQ6MHg2ZiBjb3VudGVyczoxLDIsMyw0IHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJVExCX01JU1MgOiBJVExCIG1pc3NlcworZXZlbnQ6MHg3MCBjb3VudGVyczoxLDIsMyw0IHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJVExCX0lNUExfSU5WIDogSVRMQiBpbXBsaWNpdCBJVExCIGludmFsaWRhdGVzCitldmVudDoweDcxIGNvdW50ZXJzOjEsMiwzLDQgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOklUTEJfRVhQTF9JTlYgOiBJVExCIGV4cGxpY2l0IElUTEIgaW52YWxpZGF0ZXMKK2V2ZW50OjB4NzIgY291bnRlcnM6MSwyLDMsNCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6VVRMQl9EX01JU1MgOiBVVExCIGQtc2lkZSBtaXNzZXMKK2V2ZW50OjB4NzMgY291bnRlcnM6MSwyLDMsNCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6VVRMQl9EX0FDQ0VTUyA6IFVUTEIgZC1zaWRlIGFjY2Vzc2VzCitldmVudDoweDc0IGNvdW50ZXJzOjEsMiwzLDQgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlVUTEJfSV9NSVNTIDogVVRMQiBpLXNpZGUgbWlzc2VzCitldmVudDoweDc1IGNvdW50ZXJzOjEsMiwzLDQgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlVUTEJfSV9BQ0NFU1MgOiBVVExCIGktc2lkZSBhY2Nlc3NlcworZXZlbnQ6MHg3NiBjb3VudGVyczoxLDIsMyw0IHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpVVExCX0lOVl9BU0lEIDogVVRMQiBpbnZhbGlkYXRlIGJ5IEFTSUQKK2V2ZW50OjB4NzcgY291bnRlcnM6MSwyLDMsNCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6VVRMQl9JTlZfTVZBIDogVVRMQiBpbnZhbGlkYXRlIGJ5IE1WQQorZXZlbnQ6MHg3OCBjb3VudGVyczoxLDIsMyw0IHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpVVExCX0lOVl9BTEwgOiBVVExCIGludmFsaWRhdGUgYWxsCitldmVudDoweDc5IGNvdW50ZXJzOjEsMiwzLDQgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlMyX0hPTERfUkRRX1VOQVZBSUwgOiBTMiBob2xkIFJEUSB1bmF2YWlsCitldmVudDoweDdhIGNvdW50ZXJzOjEsMiwzLDQgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlMyX0hPTEQgOiBTMiBob2xkIFMyIGhvbGQKK2V2ZW50OjB4N2IgY291bnRlcnM6MSwyLDMsNCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6UzJfSE9MRF9ERVZfT1AgOiBTMiBob2xkIGRldmljZSBvcAorZXZlbnQ6MHg3YyBjb3VudGVyczoxLDIsMyw0IHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpTMl9IT0xEX09SREVSIDogUzIgaG9sZCBzdHJvbmdseSBvcmRlcmVkIG9wCitldmVudDoweDdkIGNvdW50ZXJzOjEsMiwzLDQgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlMyX0hPTERfQkFSUklFUiA6IFMyIGhvbGQgYmFycmllcgorCitldmVudDoweDdlIGNvdW50ZXJzOjEsMiwzLDQgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlNDT1JQSU9OX1ZJVV9EVUFMX0NZQ0xFIDogU2NvcnBpb24gVklVIGR1YWwgY3ljbGUKK2V2ZW50OjB4N2YgY291bnRlcnM6MSwyLDMsNCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6U0NPUlBJT05fVklVX1NJTkdMRV9DWUNMRSA6IFNjb3JwaW9uIFZJVSBzaW5nbGUgY3ljbGUKK2V2ZW50OjB4ODAgY291bnRlcnM6MSwyLDMsNCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6U0NPUlBJT05fVlhfUElQRV9XQVJfU1RBTExfQ1lDTEVTIDogU2NvcnBpb24gVlggcGlwZSBXQVIgY3ljbGVzCitldmVudDoweDgxIGNvdW50ZXJzOjEsMiwzLDQgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlNDT1JQSU9OX1ZYX1BJUEVfV0FXX1NUQUxMX0NZQ0xFUyA6IFNjb3JwaW9uIFZYIHBpcGUgV0FXIGN5Y2xlcworZXZlbnQ6MHg4MiBjb3VudGVyczoxLDIsMyw0IHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpTQ09SUElPTl9WWF9QSVBFX1JBV19TVEFMTF9DWUNMRVMgOiBTY29ycGlvbiBWWCBwaXBlIFJBVyBjeWNsZXMKK2V2ZW50OjB4ODMgY291bnRlcnM6MSwyLDMsNCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6U0NPUlBJT05fVlhfUElQRV9MT0FEX1VTRV9TVEFMTCA6IFNjb3JwaW9uIFZYIHBpcGUgbG9hZCB1c2Ugc3RhbGwKK2V2ZW50OjB4ODQgY291bnRlcnM6MSwyLDMsNCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6U0NPUlBJT05fVlNfUElQRV9XQVJfU1RBTExfQ1lDTEVTIDogU2NvcnBpb24gVlMgcGlwZSBXQVIgc3RhbGwgY3ljbGVzCitldmVudDoweDg1IGNvdW50ZXJzOjEsMiwzLDQgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlNDT1JQSU9OX1ZTX1BJUEVfV0FXX1NUQUxMX0NZQ0xFUyA6IFNjb3JwaW9uIFZTIHBpcGUgV0FXIHN0YWxsIGN5Y2xlcworZXZlbnQ6MHg4NiBjb3VudGVyczoxLDIsMyw0IHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpTQ09SUElPTl9WU19QSVBFX1JBV19TVEFMTF9DWUNMRVMgOiBTY29ycGlvbiBWUyBwaXBlIFJBVyBzdGFsbCBjeWNsZXMKK2V2ZW50OjB4ODcgY291bnRlcnM6MSwyLDMsNCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6U0NPUlBJT05fRVhDRVBUSU9OU19JTlZfT1BFUkFUSU9OIDogU2NvcnBpb24gaW52YWxpZCBvcGVyYXRpb24gZXhjZXB0aW9ucworZXZlbnQ6MHg4OCBjb3VudGVyczoxLDIsMyw0IHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpTQ09SUElPTl9FWENFUFRJT05TX0RJVl9CWV9aRVJPIDogU2NvcnBpb24gZGl2aWRlIGJ5IHplcm8gZXhjZXB0aW9ucworZXZlbnQ6MHg4OSBjb3VudGVyczoxLDIsMyw0IHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpTQ09SUElPTl9DT05EX0lOU1RfRkFJTF9WWF9QSVBFIDogU2NvcnBpb24gY29uZGl0aW9uYWwgaW5zdHJ1Y3Rpb24gZmFpbCBWWCBwaXBlCitldmVudDoweDhhIGNvdW50ZXJzOjEsMiwzLDQgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlNDT1JQSU9OX0NPTkRfSU5TVF9GQUlMX1ZTX1BJUEUgOiBTY29ycGlvbiBjb25kaXRpb25hbCBpbnN0cnVjdGlvbiBmYWlsIFZTIHBpcGUKK2V2ZW50OjB4OGIgY291bnRlcnM6MSwyLDMsNCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6U0NPUlBJT05fRVhDRVBUSU9OU19PVkVSRkxPVyA6IFNjb3JwaW9uIG92ZXJmbG93IGV4Y2VwdGlvbnMKK2V2ZW50OjB4OGMgY291bnRlcnM6MSwyLDMsNCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6U0NPUlBJT05fRVhDRVBUSU9OU19VTkRFUkZMT1cgOiBTY29ycGlvbiB1bmRlcmZsb3cgZXhjZXB0aW9ucworZXZlbnQ6MHg4ZCBjb3VudGVyczoxLDIsMyw0IHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpTQ09SUElPTl9FWENFUFRJT05TX0RFTk9STSA6IFNjb3JwaW9uIGRlbm9ybSBleGNlcHRpb25zCisKK2V2ZW50OjB4OGUgY291bnRlcnM6MSwyLDMsNCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6U0NPUlBJT05NUF9OVU1fQkFSUklFUlMgOiBCYXJyaWVycworZXZlbnQ6MHg4ZiBjb3VudGVyczoxLDIsMyw0IHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpTQ09SUElPTk1QX0JBUlJJRVJfQ1lDTEVTIDogQmFycmllciBjeWNsZXMKZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2V2ZW50cy9hcm0vYXJtdjctc2NvcnBpb25tcC91bml0X21hc2tzIGIvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL2FybS9hcm12Ny1zY29ycGlvbm1wL3VuaXRfbWFza3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDAyNzQ2OQotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2V2ZW50cy9hcm0vYXJtdjctc2NvcnBpb25tcC91bml0X21hc2tzCkBAIC0wLDAgKzEsNCBAQAorIyBBUk0gVjcgUE1OQyBwb3NzaWJsZSB1bml0IG1hc2tzCisjCituYW1lOnplcm8gdHlwZTptYW5kYXRvcnkgZGVmYXVsdDoweDAwCisJMHgwMCBObyB1bml0IG1hc2sKZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2V2ZW50cy9hcm0vYXJtdjcvZXZlbnRzIGIvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL2FybS9hcm12Ny9ldmVudHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDZkOTIyNwotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2V2ZW50cy9hcm0vYXJtdjcvZXZlbnRzCkBAIC0wLDAgKzEsMzQgQEAKKyMgQVJNIFY3IGV2ZW50cworIyBGcm9tIENvcnRleCBBOCBEREkgKEFSTSBEREkgMDM0NEIsIHJldmlzaW9uIHIxcDEpIAorIworaW5jbHVkZTphcm0vYXJtdjctY29tbW9uCitldmVudDoweDQwIGNvdW50ZXJzOjEsMiwzLDQgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOldSSVRFX0JVRkZFUl9GVUxMIDogQW55IHdyaXRlIGJ1ZmZlciBmdWxsIGN5Y2xlCitldmVudDoweDQxIGNvdW50ZXJzOjEsMiwzLDQgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkwyX1NUT1JFX01FUkdFRCA6IEFueSBzdG9yZSB0aGF0IGlzIG1lcmdlZCBpbiBMMiBjYWNoZQorZXZlbnQ6MHg0MiBjb3VudGVyczoxLDIsMyw0IHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpMMl9TVE9SRV9CVUZGIDogQW55IGJ1ZmZlcmFibGUgc3RvcmUgZnJvbSBsb2FkL3N0b3JlIHRvIEwyIGNhY2hlCitldmVudDoweDQzIGNvdW50ZXJzOjEsMiwzLDQgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkwyX0FDQ0VTUyA6IEFueSBhY2Nlc3MgdG8gTDIgY2FjaGUKK2V2ZW50OjB4NDQgY291bnRlcnM6MSwyLDMsNCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6TDJfQ0FDSF9NSVNTIDogQW55IGNhY2hlYWJsZSBtaXNzIGluIEwyIGNhY2hlCitldmVudDoweDQ1IGNvdW50ZXJzOjEsMiwzLDQgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkFYSV9SRUFEX0NZQ0xFUyA6IE51bWJlciBvZiBjeWNsZXMgZm9yIGFuIGFjdGl2ZSBBWEkgcmVhZAorZXZlbnQ6MHg0NiBjb3VudGVyczoxLDIsMyw0IHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpBWElfV1JJVEVfQ1lDTEVTIDogTnVtYmVyIG9mIGN5Y2xlcyBmb3IgYW4gYWN0aXZlIEFYSSB3cml0ZQorZXZlbnQ6MHg0NyBjb3VudGVyczoxLDIsMyw0IHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpNRU1PUllfUkVQTEFZIDogQW55IHJlcGxheSBldmVudCBpbiB0aGUgbWVtb3J5IHN1YnN5c3RlbQorZXZlbnQ6MHg0OCBjb3VudGVyczoxLDIsMyw0IHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpVTkFMSUdORURfQUNDRVNTX1JFUExBWSA6IFVuYWxpZ25lZCBhY2Nlc3MgdGhhdCBjYXVzZXMgYSByZXBsYXkKK2V2ZW50OjB4NDkgY291bnRlcnM6MSwyLDMsNCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6TDFfREFUQV9NSVNTIDogTDEgZGF0YSBjYWNoZSBtaXNzIGFzIGEgcmVzdWx0IG9mIHRoZSBoYXNoaW5nIGFsZ29yaXRobQorZXZlbnQ6MHg0QSBjb3VudGVyczoxLDIsMyw0IHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpMMV9JTlNUX01JU1MgOiBMMSBpbnN0cnVjdGlvbiBjYWNoZSBtaXNzIGFzIGEgcmVzdWx0IG9mIHRoZSBoYXNoaW5nIGFsZ29yaXRobQorZXZlbnQ6MHg0QiBjb3VudGVyczoxLDIsMyw0IHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpMMV9EQVRBX0NPTE9SSU5HIDogTDEgZGF0YSBhY2Nlc3MgaW4gd2hpY2ggYSBwYWdlIGNvbG9yaW5nIGFsaWFzIG9jY3VycworZXZlbnQ6MHg0QyBjb3VudGVyczoxLDIsMyw0IHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpMMV9ORU9OX0RBVEEgOiBORU9OIGRhdGEgYWNjZXNzIHRoYXQgaGl0cyBMMSBjYWNoZQorZXZlbnQ6MHg0RCBjb3VudGVyczoxLDIsMyw0IHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpMMV9ORU9OX0NBQ0hfREFUQSA6IE5FT04gY2FjaGVhYmxlIGRhdGEgYWNjZXNzIHRoYXQgaGl0cyBMMSBjYWNoZQorZXZlbnQ6MHg0RSBjb3VudGVyczoxLDIsMyw0IHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpMMl9ORU9OIDogTDIgYWNjZXNzIGFzIGEgcmVzdWx0IG9mIE5FT04gbWVtb3J5IGFjY2VzcworZXZlbnQ6MHg0RiBjb3VudGVyczoxLDIsMyw0IHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpMMl9ORU9OX0hJVCA6IEFueSBORU9OIGhpdCBpbiBMMiBjYWNoZQorZXZlbnQ6MHg1MCBjb3VudGVyczoxLDIsMyw0IHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpMMV9JTlNUIDogQW55IEwxIGluc3RydWN0aW9uIGNhY2hlIGFjY2VzcywgZXhjbHVkaW5nIENQMTUgY2FjaGUgYWNjZXNzZXMKK2V2ZW50OjB4NTEgY291bnRlcnM6MSwyLDMsNCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6UENfUkVUVVJOX01JU19QUkVEIDogUmV0dXJuIHN0YWNrIG1pc3ByZWRpY3Rpb24gYXQgcmV0dXJuIHN0YWNrIHBvcCAoaW5jb3JyZWN0IHRhcmdldCBhZGRyZXNzKQorZXZlbnQ6MHg1MiBjb3VudGVyczoxLDIsMyw0IHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpQQ19CUkFOQ0hfRkFJTEVEIDogQnJhbmNoIHByZWRpY3Rpb24gbWlzcHJlZGljdGlvbgorZXZlbnQ6MHg1MyBjb3VudGVyczoxLDIsMyw0IHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpQQ19CUkFOQ0hfVEFLRU4gOiBBbnkgcHJlZGljdGVkIGJyYW5jaCB0aGF0IGlzIHRha2VuCitldmVudDoweDU0IGNvdW50ZXJzOjEsMiwzLDQgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlBDX0JSQU5DSF9FWEVDVVRFRCA6IEFueSB0YWtlbiBicmFuY2ggdGhhdCBpcyBleGVjdXRlZAorZXZlbnQ6MHg1NSBjb3VudGVyczoxLDIsMyw0IHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpPUF9FWEVDVVRFRCA6IE51bWJlciBvZiBvcGVyYXRpb25zIGV4ZWN1dGVkIChpbiBpbnN0cnVjdGlvbiBvciBtdXRsaS1jeWNsZSBpbnN0cnVjdGlvbikKK2V2ZW50OjB4NTYgY291bnRlcnM6MSwyLDMsNCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6Q1lDTEVTX0lOU1RfU1RBTEwgOiBDeWNsZXMgd2hlcmUgbm8gaW5zdHJ1Y3Rpb24gYXZhaWxhYmxlCitldmVudDoweDU3IGNvdW50ZXJzOjEsMiwzLDQgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkNZQ0xFU19JTlNUIDogTnVtYmVyIG9mIGluc3RydWN0aW9ucyBpc3N1ZWQgaW4gYSBjeWNsZQorZXZlbnQ6MHg1OCBjb3VudGVyczoxLDIsMyw0IHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpDWUNMRVNfTkVPTl9EQVRBX1NUQUxMIDogTnVtYmVyIG9mIGN5Y2xlcyB0aGUgcHJvY2Vzc29yIHdhaXRzIG9uIE1SQyBkYXRhIGZyb20gTkVPTgorZXZlbnQ6MHg1OSBjb3VudGVyczoxLDIsMyw0IHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpDWUNMRVNfTkVPTl9JTlNUX1NUQUxMIDogTnVtYmVyIG9mIGN5Y2xlcyB0aGUgcHJvY2Vzc29yIHdhaXRzIG9uIE5FT04gaW5zdHJ1Y3Rpb24gcXVldWUgb3IgTkVPTiBsb2FkIHF1ZXVlCitldmVudDoweDVBIGNvdW50ZXJzOjEsMiwzLDQgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOk5FT05fQ1lDTEVTIDogTnVtYmVyIG9mIGN5Y2xlcyBORU9OIGFuZCBpbnRlZ2VyIHByb2Nlc3NvcnMgYXJlIG5vdCBpZGxlCitldmVudDoweDcwIGNvdW50ZXJzOjEsMiwzLDQgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlBNVTBfRVZFTlRTIDogTnVtYmVyIG9mIGV2ZW50cyBmcm9tIGV4dGVybmFsIGlucHV0IHNvdXJjZSBQTVVFWFRJTlswXQorZXZlbnQ6MHg3MSBjb3VudGVyczoxLDIsMyw0IHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpQTVUxX0VWRU5UUyA6IE51bWJlciBvZiBldmVudHMgZnJvbSBleHRlcm5hbCBpbnB1dCBzb3VyY2UgUE1VRVhUSU5bMV0KK2V2ZW50OjB4NzIgY291bnRlcnM6MSwyLDMsNCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6UE1VX0VWRU5UUyA6IE51bWJlciBvZiBldmVudHMgZnJvbSBib3RoIGV4dGVybmFsIGlucHV0IHNvdXJjZXMgUE1VRVhUSU5bMF0gYW5kIFBNVUVYVElOWzFdCmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9ldmVudHMvYXJtL2FybXY3L3VuaXRfbWFza3MgYi9vcHJvZmlsZS0wLjkuNy9ldmVudHMvYXJtL2FybXY3L3VuaXRfbWFza3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDAyNzQ2OQotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2V2ZW50cy9hcm0vYXJtdjcvdW5pdF9tYXNrcwpAQCAtMCwwICsxLDQgQEAKKyMgQVJNIFY3IFBNTkMgcG9zc2libGUgdW5pdCBtYXNrcworIworbmFtZTp6ZXJvIHR5cGU6bWFuZGF0b3J5IGRlZmF1bHQ6MHgwMAorCTB4MDAgTm8gdW5pdCBtYXNrCmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9ldmVudHMvYXJtL21wY29yZS9ldmVudHMgYi9vcHJvZmlsZS0wLjkuNy9ldmVudHMvYXJtL21wY29yZS9ldmVudHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzgwNmNmOQotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2V2ZW50cy9hcm0vbXBjb3JlL2V2ZW50cwpAQCAtMCwwICsxLDI4IEBACisjIE1QQ29yZSBldmVudHMKKyMKK2V2ZW50OjB4MDAgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJRlVfSUZFVENIX01JU1MgOiBudW1iZXIgb2YgaW5zdHJ1Y3Rpb24gZmV0Y2ggbWlzc2VzCitldmVudDoweDAxIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6Q1lDTEVTX0lGVV9NRU1fU1RBTEwgOiBjeWNsZXMgaW5zdHJ1Y3Rpb24gZmV0Y2ggcGlwZSBpcyBzdGFsbGVkCitldmVudDoweDAyIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6Q1lDTEVTX0RBVEFfU1RBTEwgOiBjeWNsZXMgc3RhbGwgb2NjdXJzIGZvciBkdWUgdG8gZGF0YSBkZXBlbmRlbmN5CitldmVudDoweDAzIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SVRMQl9NSVNTIDogbnVtYmVyIG9mIElUTEIgbWlzc2VzCitldmVudDoweDA0IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RFRMQl9NSVNTIDogbnVtYmVyIG9mIERUTEIgbWlzc2VzCitldmVudDoweDA1IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QlJfSU5TVF9FWEVDVVRFRCA6IGJyYW5jaCBpbnN0cnVjdGlvbiBleGVjdXRlZCB3LyBvciB3L28gcHJvZ3JhbSBmbG93IGNoYW5nZQorZXZlbnQ6MHgwNiBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkJSX0lOU1RfTk9UX1BSRUQgOiBicmFuY2ggbm90IHByZWRpY3RlZAorZXZlbnQ6MHgwNyBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkJSX0lOU1RfTUlTUFJFRCA6IGJyYW5jaCBtaXNwcmVkaWN0ZWQKK2V2ZW50OjB4MDggY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJTlNOX0VYRUNVVEVEIDogaW5zdHJ1Y3Rpb24gZXhlY3V0ZWQKK2V2ZW50OjB4MDkgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJTlNOX0ZPTERfRVhFQ1VURUQgOiBmb2xkZWQgaW5zdHJ1Y3Rpb24gZXhlY3V0ZWQKK2V2ZW50OjB4MGEgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpEQ0FDSEVfQUNDRVNTIDogZGF0YSBjYWNoZSByZWFkIGFjY2VzcworZXZlbnQ6MHgwYiBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRDQUNIRV9NSVNTIDogZGF0YSBjYWNoZSBtaXNzCitldmVudDoweDBjIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RENBQ0hFX1dBIDogZGF0YSBjYWNoZSB3cml0ZSBhY2Nlc3MKK2V2ZW50OjB4MGQgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpEQ0FDSEVfV00gOiBkYXRhIGNhY2hlIHdyaXRlIG1pc3MKK2V2ZW50OjB4MGUgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpEQ0FDSEVfTElORV9FViA6IGRhdGEgY2FjaGUgbGluZSBldmljdGlvbgorZXZlbnQ6MHgwZiBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlNPRlRfUENfQ0hBTkdFIDogc29mdHdhcmUgY2hhbmdlZCBQQyB3aXRob3V0IG1vZGUgY2hhbmdlCitldmVudDoweDEwIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6VExCX01JU1MgOiBtYWluIFRMQiBtaXNzCitldmVudDoweDExIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6TUVNX1JFUVVFU1QgOiBleHRlcm5hbCBtZW1vcnkgcmVxdWVzdCAoQ2FjaGUgcmVxdWVzdCwgd3JpdGUgYmFjaykKK2V2ZW50OjB4MTIgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpMU19RVUVVRV9GVUxMIDogc3RhbGwgYmVjYXVzZSBsb2FkIHN0b3JlIHVuaXQgcXVldWUgYmVpbmcgZnVsbAorZXZlbnQ6MHgxMyBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkxTX1FVRVVFX0RSQUlORUQgOiBudW1iZXIgb2YgdGltZXMgc3RvcmUgYnVmZmVyIGRyYWluZWQKK2V2ZW50OjB4MTQgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpMU19RVUVVRV9XTUVSR0UgOiBidWZmZXJlZCB3cml0ZSBtZXJnZWQgaW50byBhIHN0b3JlIGJ1ZmZlciBzbG90CitldmVudDoweDE1IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6TFNfU0FGRV9NT0RFIDogTFNVIGluIHNhZmUgbW9kZQorZXZlbnQ6MHhmZiBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkNQVV9DWUNMRVMgOiBjbG9jayBjeWNsZXMgY291bnRlcgorCisjc2VlIEFSTTExIE1QQ29yZSBUZWNoaWNhbCBSZWZlcmVuY2UgTWFudWFsIHJldi4gcjFwMCwgcGFnZSAzLTcwCisKZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2V2ZW50cy9hcm0vbXBjb3JlL3VuaXRfbWFza3MgYi9vcHJvZmlsZS0wLjkuNy9ldmVudHMvYXJtL21wY29yZS91bml0X21hc2tzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmMzkyM2EKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9ldmVudHMvYXJtL21wY29yZS91bml0X21hc2tzCkBAIC0wLDAgKzEsNCBAQAorIyBNUENvcmUgcG9zc2libGUgdW5pdCBtYXNrcworIworbmFtZTp6ZXJvIHR5cGU6bWFuZGF0b3J5IGRlZmF1bHQ6MHgwMAorCTB4MDAgTm8gdW5pdCBtYXNrCmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9ldmVudHMvYXJtL3hzY2FsZTEvZXZlbnRzIGIvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL2FybS94c2NhbGUxL2V2ZW50cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTkyMjNkCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL2FybS94c2NhbGUxL2V2ZW50cwpAQCAtMCwwICsxLDIzIEBACisjIFhTY2FsZSAxIGV2ZW50cworIworZXZlbnQ6MHgwMCBjb3VudGVyczoxLDIgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOklGVV9JRkVUQ0hfTUlTUyA6IG51bWJlciBvZiBpbnN0cnVjdGlvbiBmZXRjaCBtaXNzZXMKK2V2ZW50OjB4MDEgY291bnRlcnM6MSwyIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpDWUNMRVNfSUZVX01FTV9TVEFMTCA6IGN5Y2xlcyBpbnN0cnVjdGlvbiBmZXRjaCBwaXBlIGlzIHN0YWxsZWQKK2V2ZW50OjB4MDIgY291bnRlcnM6MSwyIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpDWUNMRVNfREFUQV9TVEFMTCA6IGN5Y2xlcyBzdGFsbCBvY2N1cnMgZm9yIGR1ZSB0byBkYXRhIGRlcGVuZGVuY3kKK2V2ZW50OjB4MDMgY291bnRlcnM6MSwyIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJVExCX01JU1MgOiBudW1iZXIgb2YgSVRMQiBtaXNzZXMKK2V2ZW50OjB4MDQgY291bnRlcnM6MSwyIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpEVExCX01JU1MgOiBudW1iZXIgb2YgRFRMQiBtaXNzZXMKK2V2ZW50OjB4MDUgY291bnRlcnM6MSwyIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpCUl9JTlNUX0VYRUNVVEVEIDogYnJhbmNoIGluc3RydWN0aW9uIGV4ZWN1dGVkIHcvIG9yIHcvbyBwcm9ncmFtIGZsb3cgY2hhbmdlCitldmVudDoweDA2IGNvdW50ZXJzOjEsMiB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QlJfSU5TVF9NSVNTX1BSRUQgOiBicmFuY2ggbWlzcHJlZGljdGVkCitldmVudDoweDA3IGNvdW50ZXJzOjEsMiB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SU5TTl9FWEVDVVRFRCA6IGluc3RydWN0aW9uIGV4ZWN1dGVkCitldmVudDoweDA4IGNvdW50ZXJzOjEsMiB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6Q1lDTEVTX0RDQUNIRV9GVUxMX1NUQUxMIDogY3ljbGVzIGluIHN0YWxsIGR1ZSB0byBmdWxsIGRjYWNoZQorZXZlbnQ6MHgwOSBjb3VudGVyczoxLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRDQUNIRV9GVUxMX1NUQUxMX0NOVCA6IG51bWJlciBvZiBzdGFsbHMgZHVlIHRvIGRjYWNoZSBmdWxsIGNvbmRpdGlvbgorZXZlbnQ6MHgwYSBjb3VudGVyczoxLDIgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRDQUNIRV9BQ0NFU1MgOiBkYXRhIGNhY2hlIGFjY2VzcworZXZlbnQ6MHgwYiBjb3VudGVyczoxLDIgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRDQUNIRV9NSVNTIDogZGF0YSBjYWNoZSBtaXNzCitldmVudDoweDBjIGNvdW50ZXJzOjEsMiB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RENBQ0hFX1dCIDogZGF0YSBjYWNoZSB3cml0ZWJhY2ssIDEgZXZlbnQgZm9yIGV2ZXJ5IGhhbGYgY2FjaGVsaW5lCitldmVudDoweDBkIGNvdW50ZXJzOjEsMiB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6UENfQ0hBTkdFIDogbnVtYmVyIG9mIHRpbWVzIHRoZSBwcm9ncmFtIGNvdW50ZXIgd2FzIGNoYW5nZWQgd2l0aG91dCBhIG1vZGUgc3dpdGNoCitldmVudDoweDEwIGNvdW50ZXJzOjEsMiB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QkNVX1JFUVVFU1QgOiBudW1iZXIgb2YgdGltZSB0aGUgQkNVIHJlY2VpdmVkIGEgbmV3IG1lbW9yeSByZXF1ZXN0IGZyb20gdGhlIGNvcmUKK2V2ZW50OjB4MTEgY291bnRlcnM6MSwyIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpCQ1VfRlVMTCA6IG51bWJlciBvZiBjeWNsZXMgdGhlIEJDVXMgcmVxdWVzdCBxdWV1ZSBpcyBmdWxsCitldmVudDoweDEyIGNvdW50ZXJzOjEsMiB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QkNVX0RSQUlOIDogbnVtYmVyIG9mIHRpbWVzIHRoZSBCQ1UgcXVldWVzIHdlcmUgZHJhaW5lZCBkdWUgdG8gYSBEcmFpbiBXcml0ZSBCdWZmZXIgY29tbWFuZCBvciBhbiBJL08gdHJhbnNhY3Rpb24gb24gYSBub24tY2FjaGVhYmxlIGFuZCBub24tYnVmZmVyYWJsZSBwYWdlCitldmVudDoweDE0IGNvdW50ZXJzOjEsMiB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QkNVX0VDQ19OT19FTE9HIDogbnVtYmVyIG9mIHRpbWVzIHRoZSBCQ1UgZGV0ZWN0ZWQgYW4gRUNDIGVycm9yLCBidXQgbm8gRUxPRyByZWdpc3RlciB3YXMgYXZhaWxhYmxlIGluIHdoaWNoIHRvIGxvZyB0aGUgZXJyb3IKK2V2ZW50OjB4MTUgY291bnRlcnM6MSwyIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpCQ1VfMV9CSVRfRVJSIDogbnVtYmVyIG9mIHRpbWVzIHRoZSBCQ1UgZGV0ZWN0ZWQgYSAxLWJpdCBlcnJvciB3aGlsZSByZWFkaW5nIGRhdGEgZnJvbSB0aGUgYnVzCitldmVudDoweDE2IGNvdW50ZXJzOjEsMiB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6Uk1XIDogbnVtYmVyIG9mIHRpbWVzIGFuIFJNVyBjeWNsZSBvY2N1cnJlZCBkdWUgdG8gbmFycm93IHdyaXRlIG9uIEVDQy1wcm90ZWN0ZWQgbWVtb3J5CitldmVudDoweGZlIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkNQVV9DWUNMRVMgOiBjbG9jayBjeWNsZXMgY291bnRlcgpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL2FybS94c2NhbGUxL3VuaXRfbWFza3MgYi9vcHJvZmlsZS0wLjkuNy9ldmVudHMvYXJtL3hzY2FsZTEvdW5pdF9tYXNrcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDVlYjEwCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL2FybS94c2NhbGUxL3VuaXRfbWFza3MKQEAgLTAsMCArMSw0IEBACisjIFhTY2FsZSAxIHBvc3NpYmxlIHVuaXQgbWFza3MKKyMKK25hbWU6emVybyB0eXBlOm1hbmRhdG9yeSBkZWZhdWx0OjB4MDAKKwkweDAwIE5vIHVuaXQgbWFzawpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL2FybS94c2NhbGUyL2V2ZW50cyBiL29wcm9maWxlLTAuOS43L2V2ZW50cy9hcm0veHNjYWxlMi9ldmVudHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTA1NWVmNAotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2V2ZW50cy9hcm0veHNjYWxlMi9ldmVudHMKQEAgLTAsMCArMSwyMyBAQAorIyBYU2NhbGUgMiBldmVudHMKKyMKK2V2ZW50OjB4MDAgY291bnRlcnM6MSwyLDMsNCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SUZVX0lGRVRDSF9NSVNTIDogbnVtYmVyIG9mIGluc3RydWN0aW9uIGZldGNoIG1pc3NlcworZXZlbnQ6MHgwMSBjb3VudGVyczoxLDIsMyw0IHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpDWUNMRVNfSUZVX01FTV9TVEFMTCA6IGN5Y2xlcyBpbnN0cnVjdGlvbiBmZXRjaCBwaXBlIGlzIHN0YWxsZWQKK2V2ZW50OjB4MDIgY291bnRlcnM6MSwyLDMsNCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6Q1lDTEVTX0RBVEFfU1RBTEwgOiBjeWNsZXMgc3RhbGwgb2NjdXJzIGZvciBkdWUgdG8gZGF0YSBkZXBlbmRlbmN5CitldmVudDoweDAzIGNvdW50ZXJzOjEsMiwzLDQgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOklUTEJfTUlTUyA6IG51bWJlciBvZiBJVExCIG1pc3NlcworZXZlbnQ6MHgwNCBjb3VudGVyczoxLDIsMyw0IHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpEVExCX01JU1MgOiBudW1iZXIgb2YgRFRMQiBtaXNzZXMKK2V2ZW50OjB4MDUgY291bnRlcnM6MSwyLDMsNCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QlJfSU5TVF9FWEVDVVRFRCA6IGJyYW5jaCBpbnN0cnVjdGlvbiBleGVjdXRlZCB3LyBvciB3L28gcHJvZ3JhbSBmbG93IGNoYW5nZQorZXZlbnQ6MHgwNiBjb3VudGVyczoxLDIsMyw0IHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpCUl9JTlNUX01JU1NfUFJFRCA6IGJyYW5jaCBtaXNwcmVkaWN0ZWQKK2V2ZW50OjB4MDcgY291bnRlcnM6MSwyLDMsNCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SU5TTl9FWEVDVVRFRCA6IGluc3RydWN0aW9uIGV4ZWN1dGVkCitldmVudDoweDA4IGNvdW50ZXJzOjEsMiwzLDQgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkNZQ0xFU19EQ0FDSEVfRlVMTF9TVEFMTCA6IGN5Y2xlcyBpbiBzdGFsbCBkdWUgdG8gZnVsbCBkY2FjaGUKK2V2ZW50OjB4MDkgY291bnRlcnM6MSwyLDMsNCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RENBQ0hFX0ZVTExfU1RBTExfQ05UIDogbnVtYmVyIG9mIHN0YWxscyBkdWUgdG8gZGNhY2hlIGZ1bGwgY29uZGl0aW9uCitldmVudDoweDBhIGNvdW50ZXJzOjEsMiwzLDQgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRDQUNIRV9BQ0NFU1MgOiBkYXRhIGNhY2hlIGFjY2VzcworZXZlbnQ6MHgwYiBjb3VudGVyczoxLDIsMyw0IHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpEQ0FDSEVfTUlTUyA6IGRhdGEgY2FjaGUgbWlzcworZXZlbnQ6MHgwYyBjb3VudGVyczoxLDIsMyw0IHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpEQ0FDSEVfV0IgOiBkYXRhIGNhY2hlIHdyaXRlYmFjaywgMSBldmVudCBmb3IgZXZlcnkgaGFsZiBjYWNoZWxpbmUKK2V2ZW50OjB4MGQgY291bnRlcnM6MSwyLDMsNCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6UENfQ0hBTkdFIDogbnVtYmVyIG9mIHRpbWVzIHRoZSBwcm9ncmFtIGNvdW50ZXIgd2FzIGNoYW5nZWQgd2l0aG91dCBhIG1vZGUgc3dpdGNoCitldmVudDoweDEwIGNvdW50ZXJzOjEsMiwzLDQgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkJDVV9SRVFVRVNUIDogbnVtYmVyIG9mIHRpbWUgdGhlIEJDVSByZWNlaXZlZCBhIG5ldyBtZW1vcnkgcmVxdWVzdCBmcm9tIHRoZSBjb3JlCitldmVudDoweDExIGNvdW50ZXJzOjEsMiwzLDQgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkJDVV9GVUxMIDogbnVtYmVyIG9mIGN5Y2xlcyB0aGUgQkNVcyByZXF1ZXN0IHF1ZXVlIGlzIGZ1bGwKK2V2ZW50OjB4MTIgY291bnRlcnM6MSwyLDMsNCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QkNVX0RSQUlOIDogbnVtYmVyIG9mIHRpbWVzIHRoZSBCQ1UgcXVldWVzIHdlcmUgZHJhaW5lZCBkdWUgdG8gYSBEcmFpbiBXcml0ZSBCdWZmZXIgY29tbWFuZCBvciBhbiBJL08gdHJhbnNhY3Rpb24gb24gYSBub24tY2FjaGVhYmxlIGFuZCBub24tYnVmZmVyYWJsZSBwYWdlCitldmVudDoweDE0IGNvdW50ZXJzOjEsMiwzLDQgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkJDVV9FQ0NfTk9fRUxPRyA6IG51bWJlciBvZiB0aW1lcyB0aGUgQkNVIGRldGVjdGVkIGFuIEVDQyBlcnJvciwgYnV0IG5vIEVMT0cgcmVnaXN0ZXIgd2FzIGF2YWlsYWJsZSBpbiB3aGljaCB0byBsb2cgdGhlIGVycm9yCitldmVudDoweDE1IGNvdW50ZXJzOjEsMiwzLDQgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkJDVV8xX0JJVF9FUlIgOiBudW1iZXIgb2YgdGltZXMgdGhlIEJDVSBkZXRlY3RlZCBhIDEtYml0IGVycm9yIHdoaWxlIHJlYWRpbmcgZGF0YSBmcm9tIHRoZSBidXMKK2V2ZW50OjB4MTYgY291bnRlcnM6MSwyLDMsNCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6Uk1XIDogbnVtYmVyIG9mIHRpbWVzIGFuIFJNVyBjeWNsZSBvY2N1cnJlZCBkdWUgdG8gbmFycm93IHdyaXRlIG9uIEVDQy1wcm90ZWN0ZWQgbWVtb3J5CitldmVudDoweGZlIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkNQVV9DWUNMRVMgOiBjbG9jayBjeWNsZXMgY291bnRlcgpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL2FybS94c2NhbGUyL3VuaXRfbWFza3MgYi9vcHJvZmlsZS0wLjkuNy9ldmVudHMvYXJtL3hzY2FsZTIvdW5pdF9tYXNrcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzdhYWI1Ci0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL2FybS94c2NhbGUyL3VuaXRfbWFza3MKQEAgLTAsMCArMSw0IEBACisjIFhTY2FsZSAyIHBvc3NpYmxlIHVuaXQgbWFza3MKKyMKK25hbWU6emVybyB0eXBlOm1hbmRhdG9yeSBkZWZhdWx0OjB4MDAKKwkweDAwIE5vIHVuaXQgbWFzawpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL2F2cjMyL2V2ZW50cyBiL29wcm9maWxlLTAuOS43L2V2ZW50cy9hdnIzMi9ldmVudHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDg5ZDkxNAotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2V2ZW50cy9hdnIzMi9ldmVudHMKQEAgLTAsMCArMSwyNyBAQAorIyBBVlIzMiBldmVudHMKKyMKK2V2ZW50OjB4MDAgY291bnRlcnM6MSwyIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJRlVfSUZFVENIX01JU1MgOiBudW1iZXIgb2YgaW5zdHJ1Y3Rpb24gZmV0Y2ggbWlzc2VzCitldmVudDoweDAxIGNvdW50ZXJzOjEsMiB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6Q1lDTEVTX0lGVV9NRU1fU1RBTEwgOiBjeWNsZXMgaW5zdHJ1Y3Rpb24gZmV0Y2ggcGlwZSBpcyBzdGFsbGVkCitldmVudDoweDAyIGNvdW50ZXJzOjEsMiB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6Q1lDTEVTX0RBVEFfU1RBTEwgOiBjeWNsZXMgc3RhbGwgZHVlIHRvIGRhdGEgZGVwZW5kZW5jeQorZXZlbnQ6MHgwMyBjb3VudGVyczoxLDIgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOklUTEJfTUlTUyA6IG51bWJlciBvZiBJbnN0cnVjdGlvbiBUTEIgbWlzc2VzCitldmVudDoweDA0IGNvdW50ZXJzOjEsMiB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RFRMQl9NSVNTIDogbnVtYmVyIG9mIERhdGEgVExCIG1pc3NlcworZXZlbnQ6MHgwNSBjb3VudGVyczoxLDIgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkJSX0lOU1RfRVhFQ1VURUQgOiBicmFuY2ggaW5zdHJ1Y3Rpb24gZXhlY3V0ZWQgdy8gb3Igdy9vIHByb2dyYW0gZmxvdyBjaGFuZ2UKK2V2ZW50OjB4MDYgY291bnRlcnM6MSwyIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpCUl9JTlNUX01JU1NfUFJFRCA6IGJyYW5jaCBtaXNwcmVkaWN0ZWQKK2V2ZW50OjB4MDcgY291bnRlcnM6MSwyIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJTlNOX0VYRUNVVEVEIDogaW5zdHJ1Y3Rpb25zIGV4ZWN1dGVkCitldmVudDoweDA4IGNvdW50ZXJzOjEsMiB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RENBQ0hFX1dCVUZfRlVMTCA6IGRhdGEgY2FjaGUgd3JpdGUgYnVmZmVycyBmdWxsCitldmVudDoweDA5IGNvdW50ZXJzOjEsMiB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6Q1lDTEVTX0RDQUNIRV9XQlVGX0ZVTEwgOiBjeWNsZXMgc3RhbGxlZCBkdWUgdG8gZGF0YSBjYWNoZSB3cml0ZSBidWZmZXJzIGZ1bGwKK2V2ZW50OjB4MGEgY291bnRlcnM6MSwyIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpEQ0FDSEVfUkVBRF9NSVNTIDogZGF0YSBjYWNoZSByZWFkIG1pc3MKK2V2ZW50OjB4MGIgY291bnRlcnM6MSwyIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpDWUNMRVNfRENBQ0hFX1JFQURfTUlTUyA6IGN5Y2xlcyBzdGFsbGVkIGR1ZSB0byBkYXRhIGNhY2hlIHJlYWQgbWlzcworZXZlbnQ6MHgwYyBjb3VudGVyczoxLDIgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOldSSVRFX0FDQ0VTUyA6IHdyaXRlIGFjY2VzcworZXZlbnQ6MHgwZCBjb3VudGVyczoxLDIgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkNZQ0xFU19XUklURV9BQ0NFU1MgOiBjeWNsZXMgd2hlbiB3cml0ZSBhY2Nlc3MgaXMgb25nb2luZworZXZlbnQ6MHgwZSBjb3VudGVyczoxLDIgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlJFQURfQUNDRVNTIDogcmVhZCBhY2Nlc3MKK2V2ZW50OjB4MGYgY291bnRlcnM6MSwyIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpDWUNMRVNfUkVBRF9BQ0NFU1MgOiBjeWNsZXMgd2hlbiByZWFkIGFjY2VzcyBpcyBvbmdvaW5nCitldmVudDoweDEwIGNvdW50ZXJzOjEsMiB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6Q0FDSEVfU1RBTEwgOiByZWFkIG9yIHdyaXRlIGFjY2VzcyB0aGF0IHN0YWxsZWQKK2V2ZW50OjB4MTEgY291bnRlcnM6MSwyIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpDWUNMRVNfQ0FDSEVfU1RBTEwgOiBjeWNsZXMgc3RhbGxlZCBkb2luZyByZWFkIG9yIHdyaXRlIGFjY2VzcworZXZlbnQ6MHgxMiBjb3VudGVyczoxLDIgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRDQUNIRV9BQ0NFU1MgOiBkYXRhIGNhY2hlIGFjY2VzcworZXZlbnQ6MHgxMyBjb3VudGVyczoxLDIgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkNZQ0xFU19EQ0FDSEVfQUNDRVNTIDogY3ljbGVzIHdoZW4gZGF0YSBjYWNoZSBhY2Nlc3MgaXMgb25nb2luZworZXZlbnQ6MHgxNCBjb3VudGVyczoxLDIgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRDQUNIRV9XQiA6IGRhdGEgY2FjaGUgbGluZSB3cml0ZWJhY2sKK2V2ZW50OjB4MTUgY291bnRlcnM6MSwyIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpBQ0NVTVVMQVRPUl9ISVQgOiBhY2N1bXVsYXRvciBjYWNoZSBoaXQKK2V2ZW50OjB4MTYgY291bnRlcnM6MSwyIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpBQ0NVTVVMQVRPUl9NSVNTIDogYWNjdW11bGF0b3IgY2FjaGUgbWlzcworZXZlbnQ6MHgxNyBjb3VudGVyczoxLDIgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkJUQl9ISVQgOiBicmFuY2ggdGFyZ2V0IGJ1ZmZlciBoaXQKK2V2ZW50OjB4ZmYgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6Q1BVX0NZQ0xFUyA6IGNsb2NrIGN5Y2xlcyBjb3VudGVyCmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9ldmVudHMvYXZyMzIvdW5pdF9tYXNrcyBiL29wcm9maWxlLTAuOS43L2V2ZW50cy9hdnIzMi91bml0X21hc2tzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3ZDk4MzkKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9ldmVudHMvYXZyMzIvdW5pdF9tYXNrcwpAQCAtMCwwICsxLDQgQEAKKyMgQVZSMzIgcGVyZm9ybWFuY2UgY291bnRlcnMgcG9zc2libGUgdW5pdCBtYXNrcworIworbmFtZTp6ZXJvIHR5cGU6bWFuZGF0b3J5IGRlZmF1bHQ6MHgwMAorCTB4MDAgTm8gdW5pdCBtYXNrCmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9ldmVudHMvaTM4Ni9hcmNoX3BlcmZtb24vZXZlbnRzIGIvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL2kzODYvYXJjaF9wZXJmbW9uL2V2ZW50cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjBlM2JiCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL2kzODYvYXJjaF9wZXJmbW9uL2V2ZW50cwpAQCAtMCwwICsxLDEwIEBACisjIAorIyBJbnRlbCBBcmNoaXRlY3R1cmFsIGV2ZW50cyBhcyBvZiBhcmNoIHBlcmZtb24gdjIKKyMgCitldmVudDoweDNjIGNvdW50ZXJzOmNwdWlkIHVtOnplcm8gbWluaW11bTo2MDAwIGZpbHRlcjowIG5hbWU6Q1BVX0NMS19VTkhBTFRFRCA6IENsb2NrIGN5Y2xlcyB3aGVuIG5vdCBoYWx0ZWQKK2V2ZW50OjB4M2MgY291bnRlcnM6Y3B1aWQgdW06b25lIG1pbmltdW06NjAwMCBmaWx0ZXI6MiBuYW1lOlVOSEFMVEVEX1JFRkVSRU5DRV9DWUNMRVMgOiBVbmhhbHRlZCByZWZlcmVuY2UgY3ljbGVzCitldmVudDoweGMwIGNvdW50ZXJzOmNwdWlkIHVtOnplcm8gbWluaW11bTo2MDAwIGZpbHRlcjoxIG5hbWU6SU5TVF9SRVRJUkVEIDogbnVtYmVyIG9mIGluc3RydWN0aW9ucyByZXRpcmVkCitldmVudDoweDJlIGNvdW50ZXJzOmNwdWlkIHVtOng0MSBtaW5pbXVtOjYwMDAgZmlsdGVyOjQgbmFtZTpMTENfTUlTU0VTIDogTGFzdCBsZXZlbCBjYWNoZSBkZW1hbmQgcmVxdWVzdHMgZnJvbSB0aGlzIGNvcmUgdGhhdCBtaXNzZWQgdGhlIExMQworZXZlbnQ6MHgyZSBjb3VudGVyczpjcHVpZCB1bTp4NGYgbWluaW11bTo2MDAwIGZpbHRlcjozIG5hbWU6TExDX1JFRlMgOiBMYXN0IGxldmVsIGNhY2hlIGRlbWFuZCByZXF1ZXN0cyBmcm9tIHRoaXMgY29yZQorZXZlbnQ6MHhjNCBjb3VudGVyczpjcHVpZCB1bTp6ZXJvIG1pbmltdW06NTAwIGZpbHRlcjo1IG5hbWU6QlJfSU5TVF9SRVRJUkVEIDogbnVtYmVyIG9mIGJyYW5jaCBpbnN0cnVjdGlvbnMgcmV0aXJlZAorZXZlbnQ6MHhjNSBjb3VudGVyczpjcHVpZCB1bTp6ZXJvIG1pbmltdW06NTAwIGZpbHRlcjo2IG5hbWU6QlJfTUlTU19QUkVEX1JFVElSRUQgOiBudW1iZXIgb2YgbWlzcHJlZGljdGVkIGJyYW5jaGVzIHJldGlyZWQgKHByZWNpc2UpCmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9ldmVudHMvaTM4Ni9hcmNoX3BlcmZtb24vdW5pdF9tYXNrcyBiL29wcm9maWxlLTAuOS43L2V2ZW50cy9pMzg2L2FyY2hfcGVyZm1vbi91bml0X21hc2tzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiMTIzYWQKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9ldmVudHMvaTM4Ni9hcmNoX3BlcmZtb24vdW5pdF9tYXNrcwpAQCAtMCwwICsxLDExIEBACisjIEludGVsIGFyY2hpdGVjdHVyYWwgcGVyZm1vbiB1bml0IG1hc2tzCisjCituYW1lOnplcm8gdHlwZTptYW5kYXRvcnkgZGVmYXVsdDoweDAKKwkweDAgTm8gdW5pdCBtYXNrCituYW1lOm9uZSB0eXBlOm1hbmRhdG9yeSBkZWZhdWx0OjB4MQorCTB4MSBObyB1bml0IG1hc2sKK25hbWU6eDQxIHR5cGU6bWFuZGF0b3J5IGRlZmF1bHQ6MHg0MQorCTB4NDEgTm8gdW5pdCBtYXNrCituYW1lOng0ZiB0eXBlOm1hbmRhdG9yeSBkZWZhdWx0OjB4NGYKKwkweDRmIE5vIHVuaXQgbWFzaworIwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2V2ZW50cy9pMzg2L2F0aGxvbi9ldmVudHMgYi9vcHJvZmlsZS0wLjkuNy9ldmVudHMvaTM4Ni9hdGhsb24vZXZlbnRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzMGY0ZjcKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9ldmVudHMvaTM4Ni9hdGhsb24vZXZlbnRzCkBAIC0wLDAgKzEsMjcgQEAKKyMgQXRobG9uIEV2ZW50cworIworZXZlbnQ6MHg3NiBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTozMDAwIG5hbWU6Q1BVX0NMS19VTkhBTFRFRCA6IEN5Y2xlcyBvdXRzaWRlIG9mIGhhbHQgc3RhdGUKK2V2ZW50OjB4YzAgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06MzAwMCBuYW1lOlJFVElSRURfSU5TTlMgOiBSZXRpcmVkIGluc3RydWN0aW9ucyAoaW5jbHVkZXMgZXhjZXB0aW9ucywgaW50ZXJydXB0cywgcmVzeW5jcykKK2V2ZW50OjB4YzEgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6UkVUSVJFRF9PUFMgOiBSZXRpcmVkIE9wcworZXZlbnQ6MHg4MCBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJQ0FDSEVfRkVUQ0hFUyA6IEluc3RydWN0aW9uIGNhY2hlIGZldGNoZXMKK2V2ZW50OjB4ODEgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SUNBQ0hFX01JU1NFUyA6IEluc3RydWN0aW9uIGNhY2hlIG1pc3NlcworZXZlbnQ6MHg0MCBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpEQVRBX0NBQ0hFX0FDQ0VTU0VTIDogRGF0YSBjYWNoZSBhY2Nlc3NlcworZXZlbnQ6MHg0MSBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpEQVRBX0NBQ0hFX01JU1NFUyA6IERhdGEgY2FjaGUgbWlzc2VzCitldmVudDoweDQyIGNvdW50ZXJzOjAsMSwyLDMgdW06bW9lc2kgbWluaW11bTo1MDAgbmFtZTpEQVRBX0NBQ0hFX1JFRklMTFNfRlJPTV9MMiA6IERhdGEgY2FjaGUgcmVmaWxscyBmcm9tIEwyCitldmVudDoweDQzIGNvdW50ZXJzOjAsMSwyLDMgdW06bW9lc2kgbWluaW11bTo1MDAgbmFtZTpEQVRBX0NBQ0hFX1JFRklMTFNfRlJPTV9TWVNURU0gOiBEYXRhIGNhY2hlIHJlZmlsbHMgZnJvbSBzeXN0ZW0KK2V2ZW50OjB4NDQgY291bnRlcnM6MCwxLDIsMyB1bTptb2VzaSBtaW5pbXVtOjUwMCBuYW1lOkRBVEFfQ0FDSEVfV1JJVEVCQUNLUyA6IERhdGEgY2FjaGUgd3JpdGUgYmFja3MKK2V2ZW50OjB4YzIgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6UkVUSVJFRF9CUkFOQ0hFUyA6IFJldGlyZWQgYnJhbmNoZXMgKGNvbmRpdGlvbmFsLCB1bmNvbmRpdGlvbmFsLCBleGNlcHRpb25zLCBpbnRlcnJ1cHRzKQorZXZlbnQ6MHhjMyBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpSRVRJUkVEX0JSQU5DSEVTX01JU1BSRURJQ1RFRCA6IFJldGlyZWQgYnJhbmNoZXMgbWlzcHJlZGljdGVkCitldmVudDoweGM0IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlJFVElSRURfVEFLRU5fQlJBTkNIRVMgOiBSZXRpcmVkIHRha2VuIGJyYW5jaGVzCitldmVudDoweGM1IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlJFVElSRURfVEFLRU5fQlJBTkNIRVNfTUlTUFJFRElDVEVEIDogUmV0aXJlZCB0YWtlbiBicmFuY2hlcyBtaXNwcmVkaWN0ZWQKK2V2ZW50OjB4NDUgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6TDFfRFRMQl9NSVNTRVNfTDJfRFRMRF9ISVRTIDogTDEgRFRMQiBtaXNzZXMgYW5kIEwyIERUTEIgaGl0cworZXZlbnQ6MHg0NiBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpMMV9BTkRfTDJfRFRMQl9NSVNTRVMgOiBMMSBhbmQgTDIgRFRMQiBtaXNzZXMKK2V2ZW50OjB4NDcgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6TUlTQUxJR05FRF9EQVRBX1JFRlMgOiBNaXNhbGlnbmVkIGRhdGEgcmVmZXJlbmNlcworZXZlbnQ6MHg4NCBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpMMV9JVExCX01JU1NFU19MMl9JVExCX0hJVFMgOiBMMSBJVExCIG1pc3NlcyAoYW5kIEwyIElUTEIgaGl0cykKK2V2ZW50OjB4ODUgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6TDFfQU5EX0wyX0lUTEJfTUlTU0VTIDogTDEgYW5kIEwyIElUTEIgbWlzc2VzCitldmVudDoweGM2IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlJFVElSRURfRkFSX0NPTlRST0xfVFJBTlNGRVJTIDogUmV0aXJlZCBmYXIgY29udHJvbCB0cmFuc2ZlcnMKK2V2ZW50OjB4YzcgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6UkVUSVJFRF9SRVNZTkNfQlJBTkNIRVMgOiBSZXRpcmVkIHJlc3luYyBicmFuY2hlcyAob25seSBub24tY29udHJvbCB0cmFuc2ZlciBicmFuY2hlcyBjb3VudGVkKQorZXZlbnQ6MHhjZCBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJTlRFUlJVUFRTX01BU0tFRCA6IEludGVycnVwdHMgbWFza2VkIGN5Y2xlcyAoSUY9MCkKK2V2ZW50OjB4Y2UgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SU5URVJSVVBUU19NQVNLRURfUEVORElORyA6IEludGVycnVwdHMgbWFza2VkIHdoaWxlIHBlbmRpbmcgY3ljbGVzIChJTlRSIHdoaWxlIElGPTApCitldmVudDoweGNmIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjEwIG5hbWU6SEFSRFdBUkVfSU5URVJSVVBUUyA6IE51bWJlciBvZiB0YWtlbiBoYXJkd2FyZSBpbnRlcnJ1cHRzCisjIFRoZXJlIGFyZSBvdGhlciBldmVudHMsIGJ1dCB0aGV5IHdlcmUgcmVtb3ZlZCBmcm9tIHRoZSBhcmNoaXRlY3R1cmUgbWFudWFscwpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL2kzODYvYXRobG9uL3VuaXRfbWFza3MgYi9vcHJvZmlsZS0wLjkuNy9ldmVudHMvaTM4Ni9hdGhsb24vdW5pdF9tYXNrcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNWIwZGE4Ci0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL2kzODYvYXRobG9uL3VuaXRfbWFza3MKQEAgLTAsMCArMSwxMSBAQAorIyBBdGhsb24gcG9zc2libGUgdW5pdCBtYXNrcworIworbmFtZTp6ZXJvIHR5cGU6bWFuZGF0b3J5IGRlZmF1bHQ6MHgwCisJMHgwIE5vIHVuaXQgbWFzaworbmFtZTptb2VzaSB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDFmCisJMHgxMCAoTSlvZGlmaWVkIGNhY2hlIHN0YXRlCisJMHgwOCAoTyl3bmVyIGNhY2hlIHN0YXRlCisJMHgwNCAoRSl4Y2x1c2l2ZSBjYWNoZSBzdGF0ZQorCTB4MDIgKFMpaGFyZWQgY2FjaGUgc3RhdGUKKwkweDAxIChJKW52YWxpZCBjYWNoZSBzdGF0ZQorCTB4MWYgQWxsIGNhY2hlIHN0YXRlcwpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL2kzODYvYXRvbS9ldmVudHMgYi9vcHJvZmlsZS0wLjkuNy9ldmVudHMvaTM4Ni9hdG9tL2V2ZW50cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDkzNDQ1Ci0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL2kzODYvYXRvbS9ldmVudHMKQEAgLTAsMCArMSw4MCBAQAorIworIyBJbnRlbCBBdG9tIChTaWx2ZXJ0aG9ybmUpIGV2ZW50cworIworIyBhcmNoaXRlY3R1cmFsIHBlcmZtb24gZXZlbnRzCitldmVudDoweDNjIGNvdW50ZXJzOjAsMSB1bTpjcHVfY2xrX3VuaGFsdGVkIG1pbmltdW06NjAwMCBuYW1lOkNQVV9DTEtfVU5IQUxURUQgOiBDbG9jayBjeWNsZXMgd2hlbiBub3QgaGFsdGVkCitldmVudDoweDNjIGNvdW50ZXJzOjAsMSB1bTpvbmUgbWluaW11bTo2MDAwIG5hbWU6VU5IQUxURURfUkVGRVJFTkNFX0NZQ0xFUyA6IFVuaGFsdGVkIHJlZmVyZW5jZSBjeWNsZXMKK2V2ZW50OjB4YzAgY291bnRlcnM6MCwxIHVtOm9uZSBtaW5pbXVtOjYwMDAgbmFtZTpJTlNUX1JFVElSRUQgOiBudW1iZXIgb2YgaW5zdHJ1Y3Rpb25zIHJldGlyZWQKK2V2ZW50OjB4MmUgY291bnRlcnM6MCwxIHVtOng0MSBtaW5pbXVtOjYwMDAgbmFtZTpMTENfTUlTU0VTIDogTGFzdCBsZXZlbCBjYWNoZSBkZW1hbmQgcmVxdWVzdHMgZnJvbSB0aGlzIGNvcmUgdGhhdCBtaXNzZWQgdGhlIExMQworZXZlbnQ6MHgyZSBjb3VudGVyczowLDEgdW06eDRmIG1pbmltdW06NjAwMCBuYW1lOkxMQ19SRUZTIDogTGFzdCBsZXZlbCBjYWNoZSBkZW1hbmQgcmVxdWVzdHMgZnJvbSB0aGlzIGNvcmUKK2V2ZW50OjB4YzQgY291bnRlcnM6MCwxIHVtOmJyX2luc3RfcmV0aXJlZCBtaW5pbXVtOjUwMCBuYW1lOkJSX0lOU1RfUkVUSVJFRCA6IG51bWJlciBvZiBicmFuY2ggaW5zdHJ1Y3Rpb25zIHJldGlyZWQKK2V2ZW50OjB4YzUgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpCUl9NSVNTX1BSRURfUkVUSVJFRCA6IG51bWJlciBvZiBtaXNwcmVkaWN0ZWQgYnJhbmNoZXMgcmV0aXJlZCAocHJlY2lzZSkKKyMKK2V2ZW50OjB4MDIgY291bnRlcnM6MCwxIHVtOnN0b3JlX2ZvcndhcmRzIG1pbmltdW06NjAwMCBuYW1lOlNUT1JFX0ZPUldBUkRTIDogR29vZCBzdG9yZSBmb3J3YXJkcworZXZlbnQ6MHgwNiBjb3VudGVyczowLDEgdW06c2VnbWVudF9yZWdfbG9hZHMgbWluaW11bTo2MDAwIG5hbWU6U0VHTUVOVF9SRUdfTE9BRFMgOiBOdW1iZXIgb2Ygc2VnbWVudCByZWdpc3RlciBsb2FkcworZXZlbnQ6MHgwNyBjb3VudGVyczowLDEgdW06c2ltZF9wcmVmZXRjaCBtaW5pbXVtOjYwMDAgbmFtZTpQUkVGRVRDSCA6IFN0cmVhbWluZyBTSU1EIEV4dGVuc2lvbnMgKFNTRSkgUHJlZmV0Y2ggaW5zdHJ1Y3Rpb25zIGV4ZWN1dGVkCitldmVudDoweDA4IGNvdW50ZXJzOjAsMSB1bTpkYXRhX3RsYl9taXNzZXMgbWluaW11bTo2MDAwIG5hbWU6REFUQV9UTEJfTUlTU0VTIDogTWVtb3J5IGFjY2Vzc2VzIHRoYXQgbWlzc2VkIHRoZSBEVExCCitldmVudDoweDBDIGNvdW50ZXJzOjAsMSB1bTpwYWdlX3dhbGtzIG1pbmltdW06NjAwMCBuYW1lOlBBR0VfV0FMS1MgOiBQYWdlIHdhbGtzCitldmVudDoweDEwIGNvdW50ZXJzOjAsMSB1bTp4ODdfY29tcF9vcHNfZXhlIG1pbmltdW06NjAwMCBuYW1lOlg4N19DT01QX09QU19FWEUgOiBGbG9hdGluZyBwb2ludCBjb21wdXRhdGlvbmFsIG1pY3JvLW9wcworZXZlbnQ6MHgxMSBjb3VudGVyczowLDEgdW06ZnBfYXNzaXN0IG1pbmltdW06NjAwMCBuYW1lOkZQX0FTU0lTVCA6IEZsb2F0aW5nIHBvaW50IGFzc2lzdHMKK2V2ZW50OjB4MTIgY291bnRlcnM6MCwxIHVtOm11bCBtaW5pbXVtOjYwMDAgbmFtZTpNVUwgOiBNdWx0aXBseSBvcGVyYXRpb25zCitldmVudDoweDEzIGNvdW50ZXJzOjAsMSB1bTpkaXYgbWluaW11bTo2MDAwIG5hbWU6RElWIDogRGl2aWRlIG9wZXJhdGlvbnMKK2V2ZW50OjB4MTQgY291bnRlcnM6MCwxIHVtOm9uZSBtaW5pbXVtOjYwMDAgbmFtZTpDWUNMRVNfRElWX0JVU1kgOiBDeWNsZXMgdGhlIGRyaXZlciBpcyBidXN5CitldmVudDoweDIxIGNvdW50ZXJzOjAsMSB1bTpjb3JlIG1pbmltdW06NjAwMCBuYW1lOkNPUkUgOiBDeWNsZXMgTDIgYWRkcmVzcyBidXMgaXMgaW4gdXNlCitldmVudDoweDIyIGNvdW50ZXJzOjAsMSB1bTpjb3JlIG1pbmltdW06NjAwMCBuYW1lOkwyX0RCVVNfQlVTWSA6IEN5Y2xlcyB0aGUgTDIgY2FjaGUgZGF0YSBidXMgaXMgYnVzeQorZXZlbnQ6MHgyNCBjb3VudGVyczowLDEgdW06Y29yZSxwcmVmZXRjaCBtaW5pbXVtOjUwMCBuYW1lOkwyX0xJTkVTX0lOIDogTDIgY2FjaGUgbWlzc2VzCitldmVudDoweDI1IGNvdW50ZXJzOjAsMSB1bTpjb3JlIG1pbmltdW06NTAwIG5hbWU6TDJfTV9MSU5FU19JTiA6IEwyIGNhY2hlIGxpbmUgbW9kaWZpY2F0aW9ucworZXZlbnQ6MHgyNiBjb3VudGVyczowLDEgdW06Y29yZSxwcmVmZXRjaCBtaW5pbXVtOjUwMCBuYW1lOkwyX0xJTkVTX09VVCA6IEwyIGNhY2hlIGxpbmVzIGV2aWN0ZWQKK2V2ZW50OjB4MjcgY291bnRlcnM6MCwxIHVtOmNvcmUscHJlZmV0Y2ggbWluaW11bTo1MDAgbmFtZTpMMl9NX0xJTkVTX09VVCA6IE1vZGlmaWVkIGxpbmVzIGV2aWN0ZWQgZnJvbSB0aGUgTDIgY2FjaGUKK2V2ZW50OjB4MjggY291bnRlcnM6MCwxIHVtOmNvcmUsbWVzaSBtaW5pbXVtOjYwMDAgbmFtZTpMMl9JRkVUQ0ggOiBMMiBjYWNoZWFibGUgaW5zdHJ1Y3Rpb24gZmV0Y2ggcmVxdWVzdHMKK2V2ZW50OjB4MjkgY291bnRlcnM6MCwxIHVtOmNvcmUscHJlZmV0Y2gsbWVzaSBtaW5pbXVtOjYwMDAgbmFtZTpMMl9MRCA6IEwyIGNhY2hlIHJlYWRzCitldmVudDoweDJBIGNvdW50ZXJzOjAsMSB1bTpjb3JlLG1lc2kgbWluaW11bTo2MDAwIG5hbWU6TDJfU1QgOiBMMiBzdG9yZSByZXF1ZXN0cworZXZlbnQ6MHgyQiBjb3VudGVyczowLDEgdW06Y29yZSxtZXNpIG1pbmltdW06NjAwMCBuYW1lOkwyX0xPQ0sgOiBMMiBsb2NrZWQgYWNjZXNzZXMKK2V2ZW50OjB4MkUgY291bnRlcnM6MCwxIHVtOmwyX3Jxc3RzLGNvcmUscHJlZmV0Y2gsbWVzaSBtaW5pbXVtOjYwMDAgbmFtZTpMMl9SUVNUUyA6IEwyIGNhY2hlIHJlcXVlc3RzCitldmVudDoweDMwIGNvdW50ZXJzOjAsMSB1bTpjb3JlLHByZWZldGNoLG1lc2kgbWluaW11bTo1MDAgbmFtZTpMMl9SRUpFQ1RfQlVTUSA6IFJlamVjdGVkIEwyIGNhY2hlIHJlcXVlc3RzCitldmVudDoweDMyIGNvdW50ZXJzOjAsMSB1bTpjb3JlIG1pbmltdW06NjAwMCBuYW1lOkwyX05PX1JFUSA6IEN5Y2xlcyBubyBMMiBjYWNoZSByZXF1ZXN0cyBhcmUgcGVuZGluZworZXZlbnQ6MHgzQSBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjYwMDAgbmFtZTpFSVNUX1RSQU5TIDogTnVtYmVyIG9mIEVuaGFuY2VkIEludGVsIFNwZWVkU3RlcChSKSBUZWNobm9sb2d5IChFSVNUKSB0cmFuc2l0aW9ucworZXZlbnQ6MHgzQiBjb3VudGVyczowLDEgdW06dGhlcm1hbF90cmlwIG1pbmltdW06NjAwMCBuYW1lOlRIRVJNQUxfVFJJUCA6IE51bWJlciBvZiB0aGVybWFsIHRyaXBzCitldmVudDoweDQwIGNvdW50ZXJzOjAsMSB1bTpsMWRfY2FjaGUgbWluaW11bTo2MDAwIG5hbWU6TDFEX0NBQ0hFIDogTDFkIENhY2hlIGFjY2Vzc2VzCitldmVudDoweDYwIGNvdW50ZXJzOjAsMSB1bTpjb3JlLGFnZW50IG1pbmltdW06NjAwMCBuYW1lOkJVU19SRVFVRVNUX09VVFNUQU5ESU5HIDogT3V0c3RhbmRpbmcgY2FjaGVhYmxlIGRhdGEgcmVhZCBidXMgcmVxdWVzdHMgZHVyYXRpb24KK2V2ZW50OjB4NjEgY291bnRlcnM6MCwxIHVtOmFnZW50IG1pbmltdW06NjAwMCBuYW1lOkJVU19CTlJfRFJWIDogTnVtYmVyIG9mIEJ1cyBOb3QgUmVhZHkgc2lnbmFscyBhc3NlcnRlZAorZXZlbnQ6MHg2MiBjb3VudGVyczowLDEgdW06YWdlbnQgbWluaW11bTo2MDAwIG5hbWU6QlVTX0RSRFlfQ0xPQ0tTIDogQnVzIGN5Y2xlcyB3aGVuIGRhdGEgaXMgc2VudCBvbiB0aGUgYnVzCitldmVudDoweDYzIGNvdW50ZXJzOjAsMSB1bTpjb3JlLGFnZW50IG1pbmltdW06NjAwMCBuYW1lOkJVU19MT0NLX0NMT0NLUyA6IEJ1cyBjeWNsZXMgd2hlbiBhIExPQ0sgc2lnbmFsIGlzIGFzc2VydGVkLgorZXZlbnQ6MHg2NCBjb3VudGVyczowLDEgdW06Y29yZSBtaW5pbXVtOjYwMDAgbmFtZTpCVVNfREFUQV9SQ1YgOiBCdXMgY3ljbGVzIHdoaWxlIHByb2Nlc3NvciByZWNlaXZlcyBkYXRhCitldmVudDoweDY1IGNvdW50ZXJzOjAsMSB1bTpjb3JlLGFnZW50IG1pbmltdW06NTAwIG5hbWU6QlVTX1RSQU5TX0JSRCA6IEJ1cnN0IHJlYWQgYnVzIHRyYW5zYWN0aW9ucworZXZlbnQ6MHg2NiBjb3VudGVyczowLDEgdW06Y29yZSxhZ2VudCBtaW5pbXVtOjUwMCBuYW1lOkJVU19UUkFOU19SRk8gOiBSRk8gYnVzIHRyYW5zYWN0aW9ucworZXZlbnQ6MHg2NyBjb3VudGVyczowLDEgdW06Y29yZSxhZ2VudCBtaW5pbXVtOjUwMCBuYW1lOkJVU19UUkFOU19XQiA6IEV4cGxpY2l0IHdyaXRlYmFjayBidXMgdHJhbnNhY3Rpb25zCitldmVudDoweDY4IGNvdW50ZXJzOjAsMSB1bTpjb3JlLGFnZW50IG1pbmltdW06NTAwIG5hbWU6QlVTX1RSQU5TX0lGRVRDSCA6IEluc3RydWN0aW9uLWZldGNoIGJ1cyB0cmFuc2FjdGlvbnMuCitldmVudDoweDY5IGNvdW50ZXJzOjAsMSB1bTpjb3JlLGFnZW50IG1pbmltdW06NTAwIG5hbWU6QlVTX1RSQU5TX0lOVkFMIDogSW52YWxpZGF0ZSBidXMgdHJhbnNhY3Rpb25zCitldmVudDoweDZBIGNvdW50ZXJzOjAsMSB1bTpjb3JlLGFnZW50IG1pbmltdW06NTAwIG5hbWU6QlVTX1RSQU5TX1BXUiA6IFBhcnRpYWwgd3JpdGUgYnVzIHRyYW5zYWN0aW9uLgorZXZlbnQ6MHg2QiBjb3VudGVyczowLDEgdW06Y29yZSxhZ2VudCBtaW5pbXVtOjUwMCBuYW1lOkJVU19UUkFOU19QIDogUGFydGlhbCBidXMgdHJhbnNhY3Rpb25zCitldmVudDoweDZDIGNvdW50ZXJzOjAsMSB1bTpjb3JlLGFnZW50IG1pbmltdW06NTAwIG5hbWU6QlVTX1RSQU5TX0lPIDogSU8gYnVzIHRyYW5zYWN0aW9ucworZXZlbnQ6MHg2RCBjb3VudGVyczowLDEgdW06Y29yZSxhZ2VudCBtaW5pbXVtOjUwMCBuYW1lOkJVU19UUkFOU19ERUYgOiBEZWZlcnJlZCBidXMgdHJhbnNhY3Rpb25zCitldmVudDoweDZFIGNvdW50ZXJzOjAsMSB1bTpjb3JlLGFnZW50IG1pbmltdW06NTAwIG5hbWU6QlVTX1RSQU5TX0JVUlNUIDogQnVyc3QgKGZ1bGwgY2FjaGUtbGluZSkgYnVzIHRyYW5zYWN0aW9ucy4KK2V2ZW50OjB4NkYgY291bnRlcnM6MCwxIHVtOmNvcmUsYWdlbnQgbWluaW11bTo1MDAgbmFtZTpCVVNfVFJBTlNfTUVNIDogTWVtb3J5IGJ1cyB0cmFuc2FjdGlvbnMKK2V2ZW50OjB4NzAgY291bnRlcnM6MCwxIHVtOmNvcmUsYWdlbnQgbWluaW11bTo1MDAgbmFtZTpCVVNfVFJBTlNfQU5ZIDogQWxsIGJ1cyB0cmFuc2FjdGlvbnMKK2V2ZW50OjB4NzcgY291bnRlcnM6MCwxIHVtOmNvcmUsbWVzaSBtaW5pbXVtOjUwMCBuYW1lOkVYVF9TTk9PUCA6IEV4dGVybmFsIHNub29wcworZXZlbnQ6MHg3QSBjb3VudGVyczowLDEgdW06YWdlbnQgbWluaW11bTo1MDAgbmFtZTpCVVNfSElUX0RSViA6IEhJVCBzaWduYWwgYXNzZXJ0ZWQKK2V2ZW50OjB4N0IgY291bnRlcnM6MCwxIHVtOmFnZW50IG1pbmltdW06NTAwIG5hbWU6QlVTX0hJVE1fRFJWIDogSElUTSBzaWduYWwgYXNzZXJ0ZWQKK2V2ZW50OjB4N0QgY291bnRlcnM6MCwxIHVtOmNvcmUgbWluaW11bTo1MDAgbmFtZTpCVVNRX0VNUFRZIDogQnVzIHF1ZXVlIGlzIGVtcHR5CitldmVudDoweDdFIGNvdW50ZXJzOjAsMSB1bTpjb3JlLGFnZW50IG1pbmltdW06NjAwMCBuYW1lOlNOT09QX1NUQUxMX0RSViA6IEJ1cyBzdGFsbGVkIGZvciBzbm9vcHMKK2V2ZW50OjB4N0YgY291bnRlcnM6MCwxIHVtOmNvcmUgbWluaW11bTo2MDAwIG5hbWU6QlVTX0lPX1dBSVQgOiBJTyByZXF1ZXN0cyB3YWl0aW5nIGluIHRoZSBidXMgcXVldWUKK2V2ZW50OjB4ODAgY291bnRlcnM6MCwxIHVtOmljYWNoZSBtaW5pbXVtOjYwMDAgbmFtZTpJQ0FDSEUgOiBJbnN0cnVjdGlvbiBjYWNoZSBhY2Nlc3NlcworZXZlbnQ6MHg4MiBjb3VudGVyczowLDEgdW06aXRsYiBtaW5pbXVtOjYwMDAgbmFtZTpJVExCIDogSVRMQiBldmVudHMKK2V2ZW50OjB4QUEgY291bnRlcnM6MCwxIHVtOm1hY3JvX2luc3RzIG1pbmltdW06NjAwMCBuYW1lOk1BQ1JPX0lOU1RTIDogaW5zdHJ1Y3Rpb25zIGRlY29kZWQKK2V2ZW50OjB4QjAgY291bnRlcnM6MCwxIHVtOnNpbWRfdW9wc19leGVjIG1pbmltdW06NjAwMCBuYW1lOlNJTURfVU9QU19FWEVDIDogU0lNRCBtaWNyby1vcHMgZXhlY3V0ZWQKK2V2ZW50OjB4QjEgY291bnRlcnM6MCwxIHVtOnNpbWRfc2F0X3VvcF9leGVjIG1pbmltdW06NjAwMCBuYW1lOlNJTURfU0FUX1VPUF9FWEVDIDogU0lNRCBzYXR1cmF0ZWQgYXJpdGhtZXRpYyBtaWNyby1vcHMgZXhlY3V0ZWQKK2V2ZW50OjB4QjMgY291bnRlcnM6MCwxIHVtOnNpbWRfdW9wX3R5cGVfZXhlYyBtaW5pbXVtOjYwMDAgbmFtZTpTSU1EX1VPUF9UWVBFX0VYRUMgOiBTSU1EIHBhY2tlZCBtaWNyb29wcyBleGVjdXRlZAorZXZlbnQ6MHhDMiBjb3VudGVyczowLDEgdW06dW9wc19yZXRpcmVkIG1pbmltdW06NjAwMCBuYW1lOlVPUFNfUkVUSVJFRCA6IE1pY3JvLW9wcyByZXRpcmVkCitldmVudDoweEMzIGNvdW50ZXJzOjAsMSB1bTpvbmUgbWluaW11bTo2MDAwIG5hbWU6TUFDSElORV9DTEVBUlMgOiBTZWxmLU1vZGlmeWluZyBDb2RlIGRldGVjdGVkCitldmVudDoweEM2IGNvdW50ZXJzOjAsMSB1bTpjeWNsZXNfaW50X21hc2tlZCBtaW5pbXVtOjYwMDAgbmFtZTpDWUNMRVNfSU5UX01BU0tFRCA6IEN5Y2xlcyBkdXJpbmcgd2hpY2ggaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQKK2V2ZW50OjB4QzcgY291bnRlcnM6MCwxIHVtOnNpbWRfaW5zdF9yZXRpcmVkIG1pbmltdW06NjAwMCBuYW1lOlNJTURfSU5TVF9SRVRJUkVEIDogUmV0aXJlZCBTdHJlYW1pbmcgU0lNRCBFeHRlbnNpb25zIChTU0UpIGluc3RydWN0aW9ucworZXZlbnQ6MHhDOCBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjYwMDAgbmFtZTpIV19JTlRfUkNWIDogSGFyZHdhcmUgaW50ZXJydXB0cyByZWNlaXZlZAorZXZlbnQ6MHhDQSBjb3VudGVyczowLDEgdW06c2ltZF9jb21wX2luc3RfcmV0aXJlZCBtaW5pbXVtOjYwMDAgbmFtZTpTSU1EX0NPTVBfSU5TVF9SRVRJUkVEIDogUmV0aXJlZCBjb21wdXRhdGlvbmFsIFN0cmVhbWluZyBTSU1EIEV4dGVuc2lvbnMgKFNTRSkgaW5zdHJ1Y3Rpb25zLgorZXZlbnQ6MHhDQiBjb3VudGVyczowLDEgdW06bWVtX2xvYWRfcmV0aXJlZCBtaW5pbXVtOjYwMDAgbmFtZTpNRU1fTE9BRF9SRVRJUkVEIDogUmV0aXJlZCBsb2FkcworZXZlbnQ6MHhDRCBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjYwMDAgbmFtZTpTSU1EX0FTU0lTVCA6IFNJTUQgYXNzaXN0cyBpbnZva2VkCitldmVudDoweENFIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NjAwMCBuYW1lOlNJTURfSU5TVFJfUkVUSVJFRCA6IFNJTUQgSW5zdHJ1Y3Rpb25zIHJldGlyZWQKK2V2ZW50OjB4Q0YgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo2MDAwIG5hbWU6U0lNRF9TQVRfSU5TVFJfUkVUSVJFRCA6IFNhdHVyYXRlZCBhcml0aG1ldGljIGluc3RydWN0aW9ucyByZXRpcmVkCitldmVudDoweEUwIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NjAwMCBuYW1lOkJSX0lOU1RfREVDT0RFRCA6IEJyYW5jaCBpbnN0cnVjdGlvbnMgZGVjb2RlZAorZXZlbnQ6MHhFNCBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjYwMDAgbmFtZTpCT0dVU19CUiA6IEJvZ3VzIGJyYW5jaGVzCitldmVudDoweEU2IGNvdW50ZXJzOjAsMSB1bTpvbmUgbWluaW11bTo2MDAwIG5hbWU6QkFDTEVBUlMgOiBCQUNMRUFSUyBhc3NlcnRlZApkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL2kzODYvYXRvbS91bml0X21hc2tzIGIvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL2kzODYvYXRvbS91bml0X21hc2tzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjYWVjMjMKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9ldmVudHMvaTM4Ni9hdG9tL3VuaXRfbWFza3MKQEAgLTAsMCArMSwxMjAgQEAKKyMKKyMgSW50ZWwgQXRvbSAoU2lsdmVydGhvcm5lKSB1bml0IG1hc2tzCisjCitpbmNsdWRlOmkzODYvYXJjaF9wZXJmbW9uCituYW1lOnN0b3JlX2ZvcndhcmRzIHR5cGU6bWFuZGF0b3J5IGRlZmF1bHQ6MHg4MQorCTB4ODEgZ29vZCBHb29kIHN0b3JlIGZvcndhcmRzCituYW1lOnNlZ21lbnRfcmVnX2xvYWRzIHR5cGU6bWFuZGF0b3J5IGRlZmF1bHQ6MHgwMAorCTB4MDAgYW55IE51bWJlciBvZiBzZWdtZW50IHJlZ2lzdGVyIGxvYWRzCituYW1lOnNpbWRfcHJlZmV0Y2ggdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwMQorCTB4MDEgcHJlZmV0Y2h0MCBTdHJlYW1pbmcgU0lNRCBFeHRlbnNpb25zIChTU0UpIFByZWZldGNoVDAgaW5zdHJ1Y3Rpb25zIGV4ZWN1dGVkCisJMHgwNiBzd19sMiBTdHJlYW1pbmcgU0lNRCBFeHRlbnNpb25zIChTU0UpIFByZWZldGNoVDEgYW5kIFByZWZldGNoVDIgaW5zdHJ1Y3Rpb25zIGV4ZWN1dGVkCisJMHgwOCBwcmVmZXRjaG50YSBTdHJlYW1pbmcgU0lNRCBFeHRlbnNpb25zIChTU0UpIFByZWZldGNoIE5UQSBpbnN0cnVjdGlvbnMgZXhlY3V0ZWQKK25hbWU6ZGF0YV90bGJfbWlzc2VzIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MDcKKwkweDA3IGR0bGJfbWlzcyBNZW1vcnkgYWNjZXNzZXMgdGhhdCBtaXNzZWQgdGhlIERUTEIKKwkweDA1IGR0bGJfbWlzc19sZCBEVExCIG1pc3NlcyBkdWUgdG8gbG9hZCBvcGVyYXRpb25zCisJMHgwOSBsMF9kdGxiX21pc3NfbGQgTDBfRFRMQiBtaXNzZXMgZHVlIHRvIGxvYWQgb3BlcmF0aW9ucworCTB4MDYgZHRsYl9taXNzX3N0IERUTEIgbWlzc2VzIGR1ZSB0byBzdG9yZSBvcGVyYXRpb25zCituYW1lOnBhZ2Vfd2Fsa3MgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwMworCTB4MDMgd2Fsa3MgTnVtYmVyIG9mIHBhZ2Utd2Fsa3MgZXhlY3V0ZWQKKwkweDAzIGN5Y2xlcyBEdXJhdGlvbiBvZiBwYWdlLXdhbGtzIGluIGNvcmUgY3ljbGVzCituYW1lOng4N19jb21wX29wc19leGUgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHg4MQorCTB4MDEgcyBGbG9hdGluZyBwb2ludCBjb21wdXRhdGlvbmFsIG1pY3JvLW9wcyBleGVjdXRlZAorCTB4ODEgYXIgRmxvYXRpbmcgcG9pbnQgY29tcHV0YXRpb25hbCBtaWNyby1vcHMgcmV0aXJlZAorbmFtZTpmcF9hc3Npc3QgdHlwZTptYW5kYXRvcnkgZGVmYXVsdDoweDgxCisJMHg4MSBhciBGbG9hdGluZyBwb2ludCBhc3Npc3RzCituYW1lOm11bCB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDAxCisJMHgwMSBzIE11bHRpcGx5IG9wZXJhdGlvbnMgZXhlY3V0ZWQKKwkweDgxIGFyIE11bHRpcGx5IG9wZXJhdGlvbnMgcmV0aXJlZAorbmFtZTpkaXYgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwMQorCTB4MDEgcyBEaXZpZGUgb3BlcmF0aW9ucyBleGVjdXRlZAorCTB4ODEgYXIgRGl2aWRlIG9wZXJhdGlvbnMgcmV0aXJlZAorbmFtZTpsMl9ycXN0cyB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDQxCisJMHg0MSBpX3N0YXRlIEwyIGNhY2hlIGRlbWFuZCByZXF1ZXN0cyBmcm9tIHRoaXMgY29yZSB0aGF0IG1pc3NlZCB0aGUgTDIKKwkweDRGIG1lc2kgTDIgY2FjaGUgZGVtYW5kIHJlcXVlc3RzIGZyb20gdGhpcyBjb3JlCituYW1lOmNwdV9jbGtfdW5oYWx0ZWQgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwMAorCTB4MDAgY29yZV9wIENvcmUgY3ljbGVzIHdoZW4gY29yZSBpcyBub3QgaGFsdGVkCisJMHgwMSBidXMgQnVzIGN5Y2xlcyB3aGVuIGNvcmUgaXMgbm90IGhhbHRlZAorCTB4MDIgbm9fb3RoZXIgQnVzIGN5Y2xlcyB3aGVuIGNvcmUgaXMgYWN0aXZlIGFuZCB0aGUgb3RoZXIgaXMgaGFsdGVkCituYW1lOmwxZF9jYWNoZSB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDIxCisJMHgyMSBsZCBMMSBDYWNoZWFibGUgRGF0YSBSZWFkcworCTB4MjIgc3QgTDEgQ2FjaGVhYmxlIERhdGEgV3JpdGVzCituYW1lOmljYWNoZSB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDAzCisJMHgwMyBhY2Nlc3NlcyBJbnN0cnVjdGlvbiBmZXRjaGVzCisJMHgwMiBtaXNzZXMgSWNhY2hlIG1pc3MKK25hbWU6aXRsYiB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDA0CisJMHgwNCBmbHVzaCBJVExCIGZsdXNoZXMKKwkweDAyIG1pc3NlcyBJVExCIG1pc3NlcworbmFtZTptYWNyb19pbnN0cyB0eXBlOmV4Y2x1c2l2ZSBkZWZhdWx0OjB4MDMKKwkweDAyIGNpc2NfZGVjb2RlZCBDSVNDIG1hY3JvIGluc3RydWN0aW9ucyBkZWNvZGVkCisJMHgwMyBhbGxfZGVjb2RlZCBBbGwgSW5zdHJ1Y3Rpb25zIGRlY29kZWQKK25hbWU6c2ltZF91b3BzX2V4ZWMgdHlwZTpleGNsdXNpdmUgZGVmYXVsdDoweDgwCisJMHgwMCBzIFNJTUQgbWljcm8tb3BzIGV4ZWN1dGVkIChleGNsdWRpbmcgc3RvcmVzKQorCTB4ODAgYXIgU0lNRCBtaWNyby1vcHMgcmV0aXJlZCAoZXhjbHVkaW5nIHN0b3JlcykKK25hbWU6c2ltZF9zYXRfdW9wX2V4ZWMgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwMAorCTB4MDAgcyBTSU1EIHNhdHVyYXRlZCBhcml0aG1ldGljIG1pY3JvLW9wcyBleGVjdXRlZAorCTB4ODAgYXIgU0lNRCBzYXR1cmF0ZWQgYXJpdGhtZXRpYyBtaWNyby1vcHMgcmV0aXJlZAorbmFtZTpzaW1kX3VvcF90eXBlX2V4ZWMgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwMQorCTB4MDEgcyBTSU1EIHBhY2tlZCBtdWx0aXBseSBtaWNyb29wcyBleGVjdXRlZAorCTB4ODEgYXIgU0lNRCBwYWNrZWQgbXVsdGlwbHkgbWljcm9vcHMgcmV0aXJlZAorCTB4MDIgcyBTSU1EIHBhY2tlZCBzaGlmdCBtaWNyby1vcHMgZXhlY3V0ZWQKKwkweDgyIGFyIFNJTUQgcGFja2VkIHNoaWZ0IG1pY3JvLW9wcyByZXRpcmVkCisJMHgwNCBzIFNJTUQgcGFjayBtaWNyby1vcHMgZXhlY3V0ZWQKKwkweDg0IGFyIFNJTUQgcGFjayBtaWNyby1vcHMgcmV0aXJlZAorCTB4MDggcyBTSU1EIHVucGFjayBtaWNyby1vcHMgZXhlY3V0ZWQKKwkweDg4IGFyIFNJTUQgdW5wYWNrIG1pY3JvLW9wcyByZXRpcmVkCisJMHgxMCBzIFNJTUQgcGFja2VkIGxvZ2ljYWwgbWljcm9vcHMgZXhlY3V0ZWQKKwkweDkwIGFyIFNJTUQgcGFja2VkIGxvZ2ljYWwgbWljcm9vcHMgcmV0aXJlZAorCTB4MjAgcyBTSU1EIHBhY2tlZCBhcml0aG1ldGljIG1pY3JvLW9wcyBleGVjdXRlZAorCTB4QTAgYXIgU0lNRCBwYWNrZWQgYXJpdGhtZXRpYyBtaWNyby1vcHMgcmV0aXJlZAorbmFtZTp1b3BzX3JldGlyZWQgdHlwZTptYW5kYXRvcnkgZGVmYXVsdDoweDEwCisJMHgxMCBhbnkgTWljcm8tb3BzIHJldGlyZWQKK25hbWU6YnJfaW5zdF9yZXRpcmVkIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MDAKKwkweDAwIGFueSBSZXRpcmVkIGJyYW5jaCBpbnN0cnVjdGlvbnMKKwkweDAxIHByZWRfbm90X3Rha2VuIFJldGlyZWQgYnJhbmNoIGluc3RydWN0aW9ucyB0aGF0IHdlcmUgcHJlZGljdGVkIG5vdC10YWtlbgorCTB4MDIgbWlzcHJlZF9ub3RfdGFrZW4gUmV0aXJlZCBicmFuY2ggaW5zdHJ1Y3Rpb25zIHRoYXQgd2VyZSBtaXNwcmVkaWN0ZWQgbm90LXRha2VuCisJMHgwNCBwcmVkX3Rha2VuIFJldGlyZWQgYnJhbmNoIGluc3RydWN0aW9ucyB0aGF0IHdlcmUgcHJlZGljdGVkIHRha2VuCisJMHgwOCBtaXNwcmVkX3Rha2VuIFJldGlyZWQgYnJhbmNoIGluc3RydWN0aW9ucyB0aGF0IHdlcmUgbWlzcHJlZGljdGVkIHRha2VuCisJMHgwQSBtaXNwcmVkIFJldGlyZWQgbWlzcHJlZGljdGVkIGJyYW5jaCBpbnN0cnVjdGlvbnMgKHByZWNpc2UgZXZlbnQpCisJMHgwQyB0YWtlbiBSZXRpcmVkIHRha2VuIGJyYW5jaCBpbnN0cnVjdGlvbnMKKwkweDBGIGFueTEgUmV0aXJlZCBicmFuY2ggaW5zdHJ1Y3Rpb25zCituYW1lOmN5Y2xlc19pbnRfbWFza2VkIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MDEKKwkweDAxIGN5Y2xlc19pbnRfbWFza2VkIEN5Y2xlcyBkdXJpbmcgd2hpY2ggaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQKKwkweDAyIGN5Y2xlc19pbnRfcGVuZGluZ19hbmRfbWFza2VkIEN5Y2xlcyBkdXJpbmcgd2hpY2ggaW50ZXJydXB0cyBhcmUgcGVuZGluZyBhbmQgZGlzYWJsZWQKK25hbWU6c2ltZF9pbnN0X3JldGlyZWQgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwMQorCTB4MDEgcGFja2VkX3NpbmdsZSBSZXRpcmVkIFN0cmVhbWluZyBTSU1EIEV4dGVuc2lvbnMgKFNTRSkgcGFja2VkLXNpbmdsZSBpbnN0cnVjdGlvbnMKKwkweDAyIHNjYWxhcl9zaW5nbGUgUmV0aXJlZCBTdHJlYW1pbmcgU0lNRCBFeHRlbnNpb25zIChTU0UpIHNjYWxhci1zaW5nbGUgaW5zdHJ1Y3Rpb25zCisJMHgwNCBwYWNrZWRfZG91YmxlIFJldGlyZWQgU3RyZWFtaW5nIFNJTUQgRXh0ZW5zaW9ucyAyIChTU0UyKSBwYWNrZWQtZG91YmxlIGluc3RydWN0aW9ucworCTB4MDggc2NhbGFyX2RvdWJsZSBSZXRpcmVkIFN0cmVhbWluZyBTSU1EIEV4dGVuc2lvbnMgMiAoU1NFMikgc2NhbGFyLWRvdWJsZSBpbnN0cnVjdGlvbnMKKwkweDEwIHZlY3RvciBSZXRpcmVkIFN0cmVhbWluZyBTSU1EIEV4dGVuc2lvbnMgMiAoU1NFMikgdmVjdG9yIGluc3RydWN0aW9ucworCTB4MUYgYW55IFJldGlyZWQgU3RyZWFtaW5nIFNJTUQgaW5zdHJ1Y3Rpb25zCituYW1lOnNpbWRfY29tcF9pbnN0X3JldGlyZWQgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwMQorCTB4MDEgcGFja2VkX3NpbmdsZSBSZXRpcmVkIGNvbXB1dGF0aW9uYWwgU3RyZWFtaW5nIFNJTUQgRXh0ZW5zaW9ucyAoU1NFKSBwYWNrZWQtc2luZ2xlIGluc3RydWN0aW9ucworCTB4MDIgc2NhbGFyX3NpbmdsZSBSZXRpcmVkIGNvbXB1dGF0aW9uYWwgU3RyZWFtaW5nIFNJTUQgRXh0ZW5zaW9ucyAoU1NFKSBzY2FsYXItc2luZ2xlIGluc3RydWN0aW9ucworCTB4MDQgcGFja2VkX2RvdWJsZSBSZXRpcmVkIGNvbXB1dGF0aW9uYWwgU3RyZWFtaW5nIFNJTUQgRXh0ZW5zaW9ucyAyIChTU0UyKSBwYWNrZWQtZG91YmxlIGluc3RydWN0aW9ucworCTB4MDggc2NhbGFyX2RvdWJsZSBSZXRpcmVkIGNvbXB1dGF0aW9uYWwgU3RyZWFtaW5nIFNJTUQgRXh0ZW5zaW9ucyAyIChTU0UyKSBzY2FsYXItZG91YmxlIGluc3RydWN0aW9ucworbmFtZTptZW1fbG9hZF9yZXRpcmVkIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MDEKKwkweDAxIGwyX2hpdCBSZXRpcmVkIGxvYWRzIHRoYXQgaGl0IHRoZSBMMiBjYWNoZSAocHJlY2lzZSBldmVudCkKKwkweDAyIGwyX21pc3MgUmV0aXJlZCBsb2FkcyB0aGF0IG1pc3MgdGhlIEwyIGNhY2hlIChwcmVjaXNlIGV2ZW50KQorCTB4MDQgZHRsYl9taXNzIFJldGlyZWQgbG9hZHMgdGhhdCBtaXNzIHRoZSBEVExCIChwcmVjaXNlIGV2ZW50KQorbmFtZTp0aGVybWFsX3RyaXAgdHlwZTptYW5kYXRvcnkgZGVmYXVsdDoweGMwCisJMHhjMCB0aGVybWFsX3RyaXAgTnVtYmVyIG9mIHRoZXJtYWwgdHJpcHMuCisjIDE4LTExCituYW1lOmNvcmUgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgxODAKKwkweDE4MCBhbGwgQWxsIGNvcmVzLgorCTB4MDgwIHRoaXMgVGhpcyBDb3JlLgorIyAxOC0xMgorbmFtZTphZ2VudCB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDAwCisJMHgwMCB0aGlzIFRoaXMgYWdlbnQKKwkweDQwIGFueSBJbmNsdWRlIGFueSBhZ2VudHMKKyMgMTgtMTMKK25hbWU6cHJlZmV0Y2ggdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHg2MAorCTB4NjAgYWxsIEFsbCBpbmNsdXNpdmUKKwkweDIwIGh3IEhhcmR3YXJlIHByZWZldGNoIG9ubHkKKwkweDAwIGV4Y2x1ZGVfaHcgRXhjbHVkZSBoYXJkd2FyZSBwcmVmZXRjaAorIyAxOC0xNAorbmFtZTptZXNpIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MGYKKwkweDA4IG1vZGlmaWVkIENvdW50cyBtb2RpZmllZCBzdGF0ZQorCTB4MDQgZXhjbHVzaXZlIENvdW50cyBleGNsdXNpdmUgc3RhdGUKKwkweDAyIHNoYXJlZCBDb3VudHMgc2hhcmVkIHN0YXRlCisJMHgwMSBpbnZhbGlkIENvdW50cyBpbnZhbGlkIHN0YXRlCmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9ldmVudHMvaTM4Ni9jb3JlL2V2ZW50cyBiL29wcm9maWxlLTAuOS43L2V2ZW50cy9pMzg2L2NvcmUvZXZlbnRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmMmZlODAKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9ldmVudHMvaTM4Ni9jb3JlL2V2ZW50cwpAQCAtMCwwICsxLDExNSBAQAorIyBDb3JlIFNvbG8gLyBEdW8gZXZlbnRzCisjCisjIEFyY2hpdGVjdHVyYWwgZXZlbnRzCisjCitldmVudDoweDNjIGNvdW50ZXJzOjAsMSB1bTpub25obHQgbWluaW11bTo2MDAwIG5hbWU6Q1BVX0NMS19VTkhBTFRFRCA6IFVuaGFsdGVkIGNsb2NrIGN5Y2xlcworZXZlbnQ6MHhjMCBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjYwMDAgbmFtZTpJTlNUX1JFVElSRUQgOiBudW1iZXIgb2YgaW5zdHJ1Y3Rpb25zIHJldGlyZWQKK2V2ZW50OjB4MmUgY291bnRlcnM6MCwxIHVtOm1lc2kgbWluaW11bTo2MDAwIG5hbWU6TDJfUlFTVFMgOiBudW1iZXIgb2YgTDIgcmVxdWVzdHMKKyMKKyMgTW9kZWwgc3BlY2lmaWMgZXZlbnRzCisjCitldmVudDoweDAzIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6TERfQkxPQ0tTIDogbnVtYmVyIG9mIHN0b3JlIGJ1ZmZlciBibG9ja3MKK2V2ZW50OjB4MDQgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpTQl9EUkFJTlMgOiBudW1iZXIgb2Ygc3RvcmUgYnVmZmVyIGRyYWluIGN5Y2xlcworZXZlbnQ6MHgwNSBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOk1JU0FMSUdOX01FTV9SRUYgOiBudW1iZXIgb2YgbWlzYWxpZ25lZCBkYXRhIG1lbW9yeSByZWZlcmVuY2VzCitldmVudDoweDA2IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6U0VHTUVOVF9SRUdfTE9BRFMgOiBudW1iZXIgb2Ygc2VnbWVudCByZWdpc3RlciBsb2FkcworZXZlbnQ6MHgwNyBjb3VudGVyczowLDEgdW06a25pX3ByZWZldGNoIG1pbmltdW06NTAwIG5hbWU6RU1PTl9LTklfUFJFRl9ESVNQQVRDSEVEIDogbnVtYmVyIG9mIFNTRSBwcmUtZmV0Y2gvd2Vha2x5IG9yZGVyZWQgaW5zbnMgcmV0aXJlZAorZXZlbnQ6MHgxMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTozMDAwIG5hbWU6RkxPUFMgOiBudW1iZXIgb2YgY29tcHV0YXRpb25hbCBGUCBvcGVyYXRpb25zIGV4ZWN1dGVkCitldmVudDoweDExIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkZQX0FTU0lTVCA6IG51bWJlciBvZiBGUCBleGNlcHRpb25zIGhhbmRsZWQgYnkgbWljcm9jb2RlCitldmVudDoweDEyIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpNVUwgOiBudW1iZXIgb2YgbXVsdGlwbGllcworZXZlbnQ6MHgxMyBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpESVYgOiBudW1iZXIgb2YgZGl2aWRlcworZXZlbnQ6MHgxNCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6Q1lDTEVTX0RJVl9CVVNZIDogY3ljbGVzIGRpdmlkZXIgaXMgYnVzeQorZXZlbnQ6MHgyMSBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkwyX0FEUyA6IG51bWJlciBvZiBMMiBhZGRyZXNzIHN0cm9iZXMKK2V2ZW50OjB4MjIgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpMMl9EQlVTX0JVU1kgOiBudW1iZXIgb2YgY3ljbGVzIGRhdGEgYnVzIHdhcyBidXN5CitldmVudDoweDIzIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6TDJfREJVU19CVVNZX1JEIDogY3ljbGVzIGRhdGEgYnVzIHdhcyBidXN5IGluIHhmZXIgZnJvbSBMMiB0byBDUFUKK2V2ZW50OjB4MjQgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpMMl9MSU5FU19JTiA6IG51bWJlciBvZiBhbGxvY2F0ZWQgbGluZXMgaW4gTDIKK2V2ZW50OjB4MjUgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpMMl9NX0xJTkVTX0lOTSA6IG51bWJlciBvZiBtb2RpZmllZCBsaW5lcyBhbGxvY2F0ZWQgaW4gTDIKK2V2ZW50OjB4MjYgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpMMl9MSU5FU19PVVQgOiBudW1iZXIgb2YgcmVjb3ZlcmVkIGxpbmVzIGZyb20gTDIKK2V2ZW50OjB4MjcgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpMMl9NX0xJTkVTX09VVE0gOiBudW1iZXIgb2YgbW9kaWZpZWQgbGluZXMgcmVtb3ZlZCBmcm9tIEwyCitldmVudDoweDI4IGNvdW50ZXJzOjAsMSB1bTptZXNpIG1pbmltdW06NTAwIG5hbWU6TDJfSUZFVENIIDogbnVtYmVyIG9mIEwyIGluc3RydWN0aW9uIGZldGNoZXMKK2V2ZW50OjB4MjkgY291bnRlcnM6MCwxIHVtOm1lc2kgbWluaW11bTo1MDAgbmFtZTpMMl9MRCA6IG51bWJlciBvZiBMMiBkYXRhIGxvYWRzCitldmVudDoweDJhIGNvdW50ZXJzOjAsMSB1bTptZXNpIG1pbmltdW06NTAwIG5hbWU6TDJfU1QgOiBudW1iZXIgb2YgTDIgZGF0YSBzdG9yZXMKK2V2ZW50OjB4MzAgY291bnRlcnM6MCwxIHVtOm1lc2kgbWluaW11bTo1MDAgbmFtZTpMMl9SRUpFQ1RfQ1lDTEVTIDogQ3ljbGVzIEwyIGlzIGJ1c3kgYW5kIHJlamVjdGluZyBuZXcgcmVxdWVzdHMKK2V2ZW50OjB4MzIgY291bnRlcnM6MCwxIHVtOm1lc2kgbWluaW11bTo1MDAgbmFtZTpMMl9OT19SRVFVRVNUX0NZQ0xFUyA6IEN5Y2xlcyB0aGVyZSBpcyBubyByZXF1ZXN0IHRvIGFjY2VzcyBMMgorZXZlbnQ6MHgzYSBjb3VudGVyczowLDEgdW06ZXN0X3RyYW5zIG1pbmltdW06NTAwIG5hbWU6RVNUX1RSQU5TX0FMTCA6IEludGVsKHRtKSBFbmhhbmNlZCBTcGVlZFN0ZXAocikgVGVjaG5vbG9neSB0cmFuc2l0aW9ucworZXZlbnQ6MHgzYiBjb3VudGVyczowLDEgdW06eGMwIG1pbmltdW06NTAwIG5hbWU6VEhFUk1BTF9UUklQIDogRHVyYXRpb24gaW4gYSB0aHJlbWFsIHRyaXAgYmFzZWQgb24gdGhlIGN1cnJlbnQgY29yZSBjbG9jaworZXZlbnQ6MHg0MCBjb3VudGVyczowLDEgdW06bWVzaSBtaW5pbXVtOjUwMCBuYW1lOkRDQUNIRV9DQUNIRV9MRCA6IEwxIGNhY2hlYWJsZSBkYXRhIHJlYWQgb3BlcmF0aW9ucworZXZlbnQ6MHg0MSBjb3VudGVyczowLDEgdW06bWVzaSBtaW5pbXVtOjUwMCBuYW1lOkRDQUNIRV9DQUNIRV9TVCA6IEwxIGNhY2hlYWJsZSBkYXRhIHdyaXRlIG9wZXJhdGlvbnMKK2V2ZW50OjB4NDIgY291bnRlcnM6MCwxIHVtOm1lc2kgbWluaW11bTo1MDAgbmFtZTpEQ0FDSEVfQ0FDSEVfTE9DSyA6IEwxIGNhY2hlYWJsZSBsb2NrIHJlYWQgb3BlcmF0aW9ucyB0byBpbnZhbGlkIHN0YXRlCitldmVudDoweDQzIGNvdW50ZXJzOjAsMSB1bTpvbmUgbWluaW11bTo1MDAgbmFtZTpEQVRBX01FTV9SRUZTIDogYWxsIEwxIG1lbW9yeSByZWZlcmVuY2VzLCBjYWNoYWJsZSBhbmQgbm9uCitldmVudDoweDQ0IGNvdW50ZXJzOjAsMSB1bTp0d28gbWluaW11bTo1MDAgbmFtZTpEQVRBX01FTV9DQUNIRV9SRUZTIDogTDEgZGF0YSBjYWNoZWFibGUgcmVhZCBhbmQgd3JpdGUgb3BlcmF0aW9ucworZXZlbnQ6MHg0NSBjb3VudGVyczowLDEgdW06eDBmIG1pbmltdW06NTAwIG5hbWU6RENBQ0hFX1JFUEwgOiBMMSBkYXRhIGNhY2hlIGxpbmUgcmVwbGFjZW1lbnRzCitldmVudDoweDQ2IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RENBQ0hFX01fUkVQTCA6IEwxIGRhdGEgTS1zdGF0ZSBjYWNoZSBsaW5lIGFsbG9jYXRlZAorZXZlbnQ6MHg0NyBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRDQUNIRV9NX0VWSUNUIDogTDEgZGF0YSBNLXN0YXRlIGNhY2hlIGxpbmUgZXZpY3RlZAorZXZlbnQ6MHg0OCBjb3VudGVyczowLDEgdW06ZGNfcGVuZF9taXNzIG1pbmltdW06NTAwIG5hbWU6RENBQ0hFX1BFTkRfTUlTUyA6IFdlaWdodGVkIGN5Y2xlcyBvZiBMMSBtaXNzIG91dHN0YW5kaW5nCitldmVudDoweDQ5IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RFRMQl9NSVNTIDogRGF0YSByZWZlcmVuY2VzIHRoYXQgbWlzc2VkIFRMQgorZXZlbnQ6MHg0YiBjb3VudGVyczowLDEgdW06c3NlX21pc3MgbWluaW11bTo1MDAgbmFtZTpTU0VfUFJFRl9NSVNTIDogU1NFIGluc3RydWN0aW9ucyB0aGF0IG1pc3NlZCBhbGwgY2FjaGVzCitldmVudDoweDRmIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6TDFfUFJFRl9SRVEgOiBMMSBwcmVmZXRjaCByZXF1ZXN0cyBkdWUgdG8gRENVIGNhY2hlIG1pc3NlcworIworZXZlbnQ6MHg2MCBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkJVU19SRVFfT1VUU1RBTkRJTkcgOiB3ZWlnaHRlZCBudW1iZXIgb2Ygb3V0c3RhbmRpbmcgYnVzIHJlcXVlc3RzCitldmVudDoweDYxIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QlVTX0JOUl9EUlYgOiBFeHRlcm5hbCBidXMgY3ljbGVzIHRoaXMgcHJvY2Vzc29yIGlzIGRyaXZpbmcgQk5SIHBpbgorZXZlbnQ6MHg2MiBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkJVU19EUkRZX0NMT0NLUyA6IEV4dGVybmFsIGJ1cyBjeWNsZXMgRFJEWSBpcyBhc3NlcnRlZAorZXZlbnQ6MHg2MyBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkJVU19MT0NLX0NMT0NLUyA6IEV4dGVybmFsIGJ1cyBjeWNsZXMgTE9DSyBpcyBhc3NlcnRlZAorZXZlbnQ6MHg2NCBjb3VudGVyczowLDEgdW06eDQwIG1pbmltdW06NTAwIG5hbWU6QlVTX0RBVEFfUkNWIDogRXh0ZXJuYWwgYnVzIGN5Y2xlcyB0aGlzIHByb2Nlc3NvciBpcyByZWNlaXZpbmcgZGF0YQorZXZlbnQ6MHg2NSBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkJVU19UUkFOX0JSRCA6IG51bWJlciBvZiBidXJzdCByZWFkIHRyYW5zYWN0aW9ucworZXZlbnQ6MHg2NiBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkJVU19UUkFOX1JGTyA6IG51bWJlciBvZiBjb21wbGV0ZWQgcmVhZCBmb3Igb3duZXJzaGlwIHRyYW5zYWN0aW9ucworZXZlbnQ6MHg2NyBjb3VudGVyczowLDEgdW06eGMwIG1pbmltdW06NTAwIG5hbWU6QlVTX1RSQU5fV0IgOiBudW1iZXIgb2YgY29tcGxldGVkIHdyaXRlYmFjayB0cmFuc2FjdGlvbnMKK2V2ZW50OjB4NjggY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpCVVNfVFJBTl9JRkVUQ0ggOiBudW1iZXIgb2YgY29tcGxldGVkIGluc3RydWN0aW9uIGZldGNoIHRyYW5zYWN0aW9ucworZXZlbnQ6MHg2OSBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkJVU19UUkFOX0lOVkFMIDogbnVtYmVyIG9mIGNvbXBsZXRlZCBpbnZhbGlkYXRlIHRyYW5zYWN0aW9ucworZXZlbnQ6MHg2YSBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkJVU19UUkFOX1BXUiA6IG51bWJlciBvZiBjb21wbGV0ZWQgcGFydGlhbCB3cml0ZSB0cmFuc2FjdGlvbnMKK2V2ZW50OjB4NmIgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpCVVNfVFJBTlNfUCA6IG51bWJlciBvZiBjb21wbGV0ZWQgcGFydGlhbCB0cmFuc2FjdGlvbnMKK2V2ZW50OjB4NmMgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpCVVNfVFJBTlNfSU8gOiBudW1iZXIgb2YgY29tcGxldGVkIEkvTyB0cmFuc2FjdGlvbnMKK2V2ZW50OjB4NmQgY291bnRlcnM6MCwxIHVtOngyMCBtaW5pbXVtOjUwMCBuYW1lOkJVU19UUkFOU19ERUYgOiBudW1iZXIgb2YgY29tcGxldGVkIGRlZmVyIHRyYW5zYWN0aW9ucworZXZlbnQ6MHg2ZSBjb3VudGVyczowLDEgdW06eGMwIG1pbmltdW06NTAwIG5hbWU6QlVTX1RSQU5fQlVSU1QgOiBudW1iZXIgb2YgY29tcGxldGVkIGJ1cnN0IHRyYW5zYWN0aW9ucworZXZlbnQ6MHg2ZiBjb3VudGVyczowLDEgdW06eGMwIG1pbmltdW06NTAwIG5hbWU6QlVTX1RSQU5fTUVNIDogbnVtYmVyIG9mIGNvbXBsZXRlZCBtZW1vcnkgdHJhbnNhY3Rpb25zCitldmVudDoweDcwIGNvdW50ZXJzOjAsMSB1bTp4YzAgbWluaW11bTo1MDAgbmFtZTpCVVNfVFJBTl9BTlkgOiBudW1iZXIgb2YgYW55IGNvbXBsZXRlZCBidXMgdHJhbnNhY3Rpb25zCitldmVudDoweDc3IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QlVTX1NOT09QUyA6IEV4dGVybmFsIGJ1cyBjeWNsZXMKK2V2ZW50OjB4NzggY291bnRlcnM6MCwxIHVtOm9uZSBtaW5pbXVtOjUwMCBuYW1lOkRDVV9TTk9PUF9UT19TSEFSRSA6IERDVSBzbm9vcHMgdG8gc2hhcmUtc3RhdGUgTDEgY2FjaGUgbGluZSBkdWUgdG8gTDEgbWlzc2VzCitldmVudDoweDdkIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QlVTX05PVF9JTl9VU0UgOiBOdW1iZXIgb2YgY3ljbGVzIHRoZXJlIGlzIG5vIHRyYW5zYWN0aW9uIGZyb20gdGhlIGNvcmUKK2V2ZW50OjB4N2UgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpCVVNfU05PT1BfU1RBTEwgOiBOdW1iZXIgb2YgYnVzIGN5Y2xlcyBkdXJpbmcgYnVzIHNub29wIHN0YWxsCitldmVudDoweDgwIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SUNBQ0hFX1JFQURTIDogbnVtYmVyIG9mIGluc3RydWN0aW9uIGZldGNoZXMKK2V2ZW50OjB4ODEgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJQ0FDSEVfTUlTU0VTIDogbnVtYmVyIG9mIGluc3RydWN0aW9uIGZldGNoIG1pc3NlcworZXZlbnQ6MHg4NSBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOklUTEJfTUlTUyA6IG51bWJlciBvZiBJVExCIG1pc3NlcworZXZlbnQ6MHg4NiBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOklGVV9NRU1fU1RBTEwgOiBjeWNsZXMgaW5zdHJ1Y3Rpb24gZmV0Y2ggcGlwZSBpcyBzdGFsbGVkCitldmVudDoweDg3IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SUxEX1NUQUxMIDogY3ljbGVzIGluc3RydWN0aW9uIGxlbmd0aCBkZWNvZGVyIGlzIHN0YWxsZWQKK2V2ZW50OjB4ODggY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTozMDAwIG5hbWU6QlJfSU5TVF9FWEVDIDogQnJhbmNoIGluc3RydWN0aW9ucyBleGVjdXRlZCAobm90IG5lY2Vzc2FyaWx5IHJldGlyZWQpCitldmVudDoweDg5IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06MzAwMCBuYW1lOkJSX01JU1NQX0VYRUMgOiBCcmFuY2ggaW5zdHJ1Y3Rpb25zIGV4ZWN1dGVkIHRoYXQgd2VyZSBtaXNwcmVkaWN0ZWQgYXQgZXhlY3V0aW9uCitldmVudDoweDhhIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06MzAwMCBuYW1lOkJSX0JBQ19NSVNTUF9FWEVDIDogQnJhbmNoIGluc3RydWN0aW9ucyBleGVjdXRlZCB0aGF0IHdlcmUgbWlzcHJlZGljdGVkIGF0IEZyb250IEVuZCAoQkFDKQorZXZlbnQ6MHg4YiBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjMwMDAgbmFtZTpCUl9DTkRfRVhFQyA6IENvbmRpdGlvbmFsIEJyYW5jaCBpbnN0cnVjdGlvbnMgZXhlY3V0ZWQKK2V2ZW50OjB4OGMgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTozMDAwIG5hbWU6QlJfQ05EX01JU1NQX0VYRUMgOiBDb25kaXRpb25hbCBCcmFuY2ggaW5zdHJ1Y3Rpb25zIGV4ZWN1dGVkIHRoYXQgd2VyZSBtaXNwcmVkaWN0ZWQKK2V2ZW50OjB4OGQgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTozMDAwIG5hbWU6QlJfSU5EX0VYRUMgOiBJbmRpcmVjdCBCcmFuY2ggaW5zdHJ1Y3Rpb25zIGV4ZWN1dGVkCitldmVudDoweDhlIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06MzAwMCBuYW1lOkJSX0lORF9NSVNTUF9FWEVDIDogSW5kaXJlY3QgQnJhbmNoIGluc3RydWN0aW9ucyBleGVjdXRlZCB0aGF0IHdlcmUgbWlzcHJlZGljdGVkCitldmVudDoweDhmIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06MzAwMCBuYW1lOkJSX1JFVF9FWEVDIDogUmV0dXJuIEJyYW5jaCBpbnN0cnVjdGlvbnMgZXhlY3V0ZWQKK2V2ZW50OjB4OTAgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTozMDAwIG5hbWU6QlJfUkVUX01JU1NQX0VYRUMgOiBSZXR1cm4gQnJhbmNoIGluc3RydWN0aW9ucyBleGVjdXRlZCB0aGF0IHdlcmUgbWlzcHJlZGljdGVkIGF0IEV4ZWN1dGlvbgorZXZlbnQ6MHg5MSBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjMwMDAgbmFtZTpCUl9SRVRfQkFDX01JU1NQX0VYRUMgOlJldHVybiBCcmFuY2ggaW5zdHJ1Y3Rpb25zIGV4ZWN1dGVkIHRoYXQgd2VyZSBtaXNwcmVkaWN0ZWQgYXQgRnJvbnQgRW5kIChCQUMpCitldmVudDoweDkyIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06MzAwMCBuYW1lOkJSX0NBTExfRVhFQyA6IENBTEwgaW5zdHJ1Y3Rpb24gZXhlY3V0ZWQKK2V2ZW50OjB4OTMgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTozMDAwIG5hbWU6QlJfQ0FMTF9NSVNTUF9FWEVDIDogQ0FMTCBpbnN0cnVjdGlvbiBleGVjdXRlZCBhbmQgbWlzcyBwcmVkaWN0ZWQKK2V2ZW50OjB4OTQgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTozMDAwIG5hbWU6QlJfSU5EX0NBTExfRVhFQyA6IEluZGlyZWN0IENBTEwgaW5zdHJ1Y3Rpb24gZXhlY3V0ZWQKK2V2ZW50OjB4YTIgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpSRVNPVVJDRV9TVEFMTFMgOiBjeWNsZXMgZHVyaW5nIHJlc291cmNlIHJlbGF0ZWQgc3RhbGxzCitldmVudDoweGIwIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6TU1YX0lOU1RSX0VYRUMgOiBudW1iZXIgb2YgTU1YIGluc3RydWN0aW9ucyBleGVjdXRlZCAobm90IE1PVlEgYW5kIE1PVkQpCitldmVudDoweGIxIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06MzAwMCBuYW1lOlNJTURfU0FUX0lOU1RSX0VYRUMgOiBudW1iZXIgb2YgU0lNRCBzYXR1cmF0aW5nIGluc3RydWN0aW9ucyBleGVjdXRlZAorZXZlbnQ6MHhiMyBjb3VudGVyczowLDEgdW06bW14X2luc3RyX3R5cGVfZXhlYyBtaW5pbXVtOjMwMDAgbmFtZTpNTVhfSU5TVFJfVFlQRV9FWEVDIDogbnVtYmVyIG9mIE1NWCBwYWNraW5nIGluc3RydWN0aW9ucworZXZlbnQ6MHhjMSBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTozMDAwIG5hbWU6Q09NUF9GTE9QX1JFVCA6IG51bWJlciBvZiBjb21wdXRhdGlvbmFsIEZQIG9wZXJhdGlvbnMgcmV0aXJlZAorZXZlbnQ6MHhjMiBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjYwMDAgbmFtZTpVT1BTX1JFVElSRUQgOiBudW1iZXIgb2YgVU9QcyByZXRpcmVkCitldmVudDoweGMzIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6U01DX0RFVEVDVEVEIDogbnVtYmVyIG9mIHRpbWVzIHNlbGYtbW9kaWZ5aW5nIGNvZGUgY29uZGl0aW9uIGlzIGRldGVjdGVkCitldmVudDoweGM0IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QlJfSU5TVF9SRVRJUkVEIDogbnVtYmVyIG9mIGJyYW5jaCBpbnN0cnVjdGlvbnMgcmV0aXJlZAorZXZlbnQ6MHhjNSBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkJSX01JU1NfUFJFRF9SRVRJUkVEIDogbnVtYmVyIG9mIG1pc3ByZWRpY3RlZCBicmFuY2hlcyByZXRpcmVkCitldmVudDoweGM2IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6Q1lDTEVTX0lOVF9NQVNLRUQgOiBjeWNsZXMgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQKK2V2ZW50OjB4YzcgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpDWUNMRVNfSU5UX1BFTkRJTkdfQU5EX01BU0tFRCA6IGN5Y2xlcyBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCB3aXRoIHBlbmRpbmcgaW50ZXJydXB0cworZXZlbnQ6MHhjOCBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkhXX0lOVF9SWCA6IG51bWJlciBvZiBoYXJkd2FyZSBpbnRlcnJ1cHRzIHJlY2VpdmVkCitldmVudDoweGM5IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QlJfVEFLRU5fUkVUSVJFRCA6IG51bWJlciBvZiB0YWtlbiBicmFuY2hlcyByZXRpcmVkCitldmVudDoweGNhIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QlJfTUlTU19QUkVEX1RBS0VOX1JFVCA6IG51bWJlciBvZiB0YWtlbiBtaXNwcmVkaWN0aW9ucyBicmFuY2hlcyByZXRpcmVkCitldmVudDoweGNjIGNvdW50ZXJzOjAsMSB1bTptbXhfdHJhbnMgbWluaW11bTozMDAwIG5hbWU6RlBfTU1YX1RSQU5TIDogTU1YLWZsb2F0aW5nIHBvaW50IHRyYW5zaXRpb25zCitldmVudDoweGNkIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6TU1YX0FTU0lTVCA6IG51bWJlciBvZiBFTU1TIGluc3RydWN0aW9ucyBleGVjdXRlZAorZXZlbnQ6MHhjZSBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjMwMDAgbmFtZTpNTVhfSU5TVFJfUkVUIDogbnVtYmVyIG9mIE1NWCBpbnN0cnVjdGlvbnMgcmV0aXJlZAorZXZlbnQ6MHhkMCBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjYwMDAgbmFtZTpJTlNUX0RFQ09ERUQgOiBudW1iZXIgb2YgaW5zdHJ1Y3Rpb25zIGRlY29kZWQKK2V2ZW50OjB4ZDcgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTozMDAwIG5hbWU6RVNQX1VPUFMgOiBOdW1iZXIgb2YgRVNQIGZvbGRpbmcgaW5zdHJ1Y3Rpb25zIGRlY29kZWQKK2V2ZW50OjB4ZDggY291bnRlcnM6MCwxIHVtOnNzZV9zc2UyX2luc3RfcmV0aXJlZCBtaW5pbXVtOjMwMDAgbmFtZTpFTU9OX1NTRV9TU0UyX0lOU1RfUkVUSVJFRCA6IFN0cmVhbWluZyBTSU1EIEV4dGVuc2lvbnMgSW5zdHJ1Y3Rpb25zIFJldGlyZWQKK2V2ZW50OjB4ZDkgY291bnRlcnM6MCwxIHVtOnNzZV9zc2UyX2luc3RfcmV0aXJlZCBtaW5pbXVtOjMwMDAgbmFtZTpFTU9OX1NTRV9TU0UyX0NPTVBfSU5TVF9SRVRJUkVEIDogQ29tcHV0YXRpb25hbCBTU0UgSW5zdHJ1Y3Rpb25zIFJldGlyZWQKK2V2ZW50OjB4ZGEgY291bnRlcnM6MCwxIHVtOmZ1c2VkIG1pbmltdW06MzAwMCBuYW1lOkVNT05fRlVTRURfVU9QU19SRVQgOiBOdW1iZXIgb2YgcmV0aXJlZCBmdXNlZCBtaWNyby1vcHMKK2V2ZW50OjB4ZGIgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTozMDAwIG5hbWU6RU1PTl9VTkZVU0lPTiA6IE51bWJlciBvZiB1bmZ1c2lvbiBldmVudHMgaW4gdGhlIFJPQiwgaGFwcGVuZWQgb24gYSBGUCBleGNlcHRpb24gdG8gYSBmdXNlZCB1T3AKK2V2ZW50OjB4ZTAgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpCUl9JTlNUX0RFQ09ERUQgOiBudW1iZXIgb2YgYnJhbmNoIGluc3RydWN0aW9ucyBkZWNvZGVkCitldmVudDoweGUyIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QlRCX01JU1NFUyA6IG51bWJlciBvZiBicmFuY2hlcyB0aGF0IG1pc3MgdGhlIEJUQgorZXZlbnQ6MHhlNCBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkJSX0JPR1VTIDogbnVtYmVyIG9mIGJvZ3VzIGJyYW5jaGVzCitldmVudDoweGU2IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QkFDTEVBUlMgOiBudW1iZXIgb2YgdGltZXMgQkFDTEVBUiBpcyBhc3NlcnRlZAorZXZlbnQ6MHhmMCBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjMwMDAgbmFtZTpFTU9OX1BSRUZfUlFTVFNfVVAgOiBOdW1iZXIgb2YgdXB3YXJkIHByZWZldGNoZXMgaXNzdWVkCitldmVudDoweGY4IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06MzAwMCBuYW1lOkVNT05fUFJFRl9SUVNUU19ETiA6IE51bWJlciBvZiBkb3dud2FyZCBwcmVmZXRjaGVzIGlzc3VlZApkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL2kzODYvY29yZS91bml0X21hc2tzIGIvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL2kzODYvY29yZS91bml0X21hc2tzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4ZGEwMWUKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9ldmVudHMvaTM4Ni9jb3JlL3VuaXRfbWFza3MKQEAgLTAsMCArMSw2NyBAQAorIyBDb3JlIFNvbG8gLyBDb3JlIER1byBwb3NzaWJsZSB1bml0IG1hc2tzCisjCituYW1lOnplcm8gdHlwZTptYW5kYXRvcnkgZGVmYXVsdDoweDAKKwkweDAgTm8gdW5pdCBtYXNrCituYW1lOm9uZSB0eXBlOm1hbmRhdG9yeSBkZWZhdWx0OjB4MQorCTB4MSBObyB1bml0IG1hc2sKK25hbWU6dHdvIHR5cGU6bWFuZGF0b3J5IGRlZmF1bHQ6MHgyCisJMHgyIE5vIHVuaXQgbWFzaworbmFtZTp4MGYgdHlwZTptYW5kYXRvcnkgZGVmYXVsdDoweGYKKwkweGYgTm8gdW5pdCBtYXNrCituYW1lOngyMCB0eXBlOm1hbmRhdG9yeSBkZWZhdWx0OjB4MjAKKwkweDIwIE5vIHVuaXQgbWFzaworbmFtZTp4NDAgdHlwZTptYW5kYXRvcnkgZGVmYXVsdDoweDQwCisJMHg0MCBObyB1bml0IG1hc2sKK25hbWU6eGMwIHR5cGU6bWFuZGF0b3J5IGRlZmF1bHQ6MHhjMAorCTB4YzAgTm8gdW5pdCBtYXNrCituYW1lOm5vbmhsdCB0eXBlOmV4Y2x1c2l2ZSBkZWZhdWx0OjB4MAorCTB4MCBVbmhhbHRlZCBjb3JlIGN5Y2xlcworCTB4MSBVbmhhbHRlZCBidXMgY3ljbGVzCisJMHgyIFVuaGFsdGVkIGJ1cyBjeWNsZXMgb2YgdGhpcyBjb3JlIHdoaWxlIHRoZSBvdGhlciBjb3JlIGlzIGhhbHRlZAorbmFtZTptZXNpIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MGYKKwkweDA4IChNKW9kaWZpZWQgY2FjaGUgc3RhdGUKKwkweDA0IChFKXhjbHVzaXZlIGNhY2hlIHN0YXRlCisJMHgwMiAoUyloYXJlZCBjYWNoZSBzdGF0ZQorCTB4MDEgKEkpbnZhbGlkIGNhY2hlIHN0YXRlCisJMHgwZiBBbGwgY2FjaGUgc3RhdGVzCisJMHgxMCBIVyBwcmVmZXRjaGVkIGxpbmUgb25seQorCTB4MjAgYWxsIHByZWZldGNoZWQgbGluZSB3L28gcmVnYXJkaW5nIG1hc2sgMHgxMC4KK25hbWU6ZXN0X3RyYW5zIHR5cGU6ZXhjbHVzaXZlIGRlZmF1bHQ6MHgwMAorCTB4MDAgYW55IHRyYW5zaXRpb25zCisJMHgxMCBJbnRlbCh0bSkgRW5oYW5jZWQgU3BlZWRTdGVwKHIpIFRlY2hub2xvZ3kgZnJlcXVlbmN5IHRyYW5zaXRpb25zCisJMHgyMCBhbnkgdHJhbnNhY3Rpb25zCituYW1lOmtuaV9wcmVmZXRjaCB0eXBlOmV4Y2x1c2l2ZSBkZWZhdWx0OjB4MAorCTB4MDAgcHJlZmV0Y2ggTlRBCisJMHgwMSBwcmVmZXRjaCBUMQorCTB4MDIgcHJlZmV0Y2ggVDIKKwkweDAzIHdlYWtseS1vcmRlcmVkIHN0b3JlcworIyB0aGlzIGJpdG1hc2sgY2FuIHNlZW1zIHdlaXJkcyBidXQgaXMgY29ycmVjdCwgbm90ZSB0aGVyZSBpcyBubyB3YXkgdG8gb25seQorIyBjb3VudCBzY2FsYXIgU0lNRCBpbnN0cnVjdGlvbnMKK25hbWU6c3NlX3NzZTJfaW5zdF9yZXRpcmVkIHR5cGU6ZXhjbHVzaXZlIGRlZmF1bHQ6MHgwCisJMHgwMCBTU0UgUGFja2VkIFNpbmdsZQorCTB4MDEgU1NFIFNjYWxhci1TaW5nbGUKKwkweDAyIFNTRTIgUGFja2VkLURvdWJsZQorCTB4MDMgU1NFMiBTY2FsYXItRG91YmxlCituYW1lOm1teF9pbnN0cl90eXBlX2V4ZWMgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgzZgorCTB4MDEgTU1YIHBhY2tlZCBtdWx0aXBsaWVzCisJMHgwMiBNTVggcGFja2VkIHNoaWZ0cworCTB4MDQgTU1YIHBhY2sgb3BlcmF0aW9ucworCTB4MDggTU1YIHVucGFjayBvcGVyYXRpb25zCisJMHgxMCBNTVggcGFja2VkIGxvZ2ljYWwKKwkweDIwIE1NWCBwYWNrZWQgYXJpdGhtZXRpYworCTB4M2YgYWxsIG9mIHRoZSBhYm92ZQorbmFtZTptbXhfdHJhbnMgdHlwZTpleGNsdXNpdmUgZGVmYXVsdDoweDAKKwkweDAwIE1NWC0+ZmxvYXQgb3BlcmF0aW9ucworCTB4MDEgZmxvYXQtPk1NWCBvcGVyYXRpb25zCituYW1lOmZ1c2VkIHR5cGU6ZXhjbHVzaXZlIGRlZmF1bHQ6MHgwCisJMHgwMCBBbGwgZnVzZWQgbWljcm8tb3BzCisJMHgwMSBPbmx5IGxvYWQrT3AgbWljcm8tb3BzCisJMHgwMiBPbmx5IHN0ZCtzdGEgbWljcm8tb3BzCituYW1lOmRjX3BlbmRfbWlzcyB0eXBlOmV4Y2x1c2l2ZSBkZWZhdWx0OjB4MAorCTB4MDAgV2VpZ2h0ZWQgY3ljbGVzCisJMHgwMSBEdXJhdGlvbiBvZiBjeWNsZXMKK25hbWU6c3NlX21pc3MgdHlwZTpleGNsdXNpdmUgZGVmYXVsdDoweDAKKwkweDAwIFBSRUZFVENITlRBCisJMHgwMSBQUkVGRVRDSFQxCisJMHgwMiBQUkVGRVRDSFQyCisJMHgwMyBTU0Ugc3RyZWFtaW5nIHN0b3JlIGluc3RydWN0aW9ucwpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL2kzODYvY29yZV8yL2V2ZW50cyBiL29wcm9maWxlLTAuOS43L2V2ZW50cy9pMzg2L2NvcmVfMi9ldmVudHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDdjMmZmZAotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2V2ZW50cy9pMzg2L2NvcmVfMi9ldmVudHMKQEAgLTAsMCArMSwxMzcgQEAKKyMgQ29yZSAyIGV2ZW50cworIworIyBBcmNoaXRlY3R1cmFsIGV2ZW50cworIworZXZlbnQ6MHgzYyBjb3VudGVyczowLDEgdW06bm9uaGx0IG1pbmltdW06NjAwMCBuYW1lOkNQVV9DTEtfVU5IQUxURUQgOiBDbG9jayBjeWNsZXMgd2hlbiBub3QgaGFsdGVkCitldmVudDoweGMwIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NjAwMCBuYW1lOklOU1RfUkVUSVJFRF9BTllfUCA6IG51bWJlciBvZiBpbnN0cnVjdGlvbnMgcmV0aXJlZAorZXZlbnQ6MHgyZSBjb3VudGVyczowLDEgdW06Y29yZV9wcmVmZXRjaF9tZXNpIG1pbmltdW06NTAwIG5hbWU6TDJfUlFTVFMgOiBudW1iZXIgb2YgTDIgY2FjaGUgcmVxdWVzdHMKK2V2ZW50OjB4MmUgY291bnRlcnM6MCwxIHVtOng0MSBtaW5pbXVtOjYwMDAgbmFtZTpMTENfTUlTU0VTIDogTDIgY2FjaGUgZGVtYW5kIHJlcXVlc3RzIGZyb20gdGhpcyBjb3JlIHRoYXQgbWlzc2VkIHRoZSBMMgorZXZlbnQ6MHgyZSBjb3VudGVyczowLDEgdW06eDRmIG1pbmltdW06NjAwMCBuYW1lOkxMQ19SRUZTIDogTDIgY2FjaGUgZGVtYW5kIHJlcXVlc3RzIGZyb20gdGhpcyBjb3JlCisjCisjIE1vZGVsIHNwZWNpZmljIGV2ZW50cworIworZXZlbnQ6MHgwMyBjb3VudGVyczowLDEgdW06bG9hZF9ibG9jayBtaW5pbXVtOjUwMCBuYW1lOkxPQURfQkxPQ0sgOiBldmVudHMgcGVydGFpbmluZyB0byBsb2FkcworZXZlbnQ6MHgwNCBjb3VudGVyczowLDEgdW06c3RvcmVfYmxvY2sgbWluaW11bTo1MDAgbmFtZTpTVE9SRV9CTE9DSyA6IGV2ZW50cyBwZXJ0YWluaW5nIHRvIHN0b3JlcworZXZlbnQ6MHgwNSBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOk1JU0FMSUdOX01FTV9SRUYgOiBudW1iZXIgb2YgbWlzYWxpZ25lZCBkYXRhIG1lbW9yeSByZWZlcmVuY2VzCitldmVudDoweDA2IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6U0VHTUVOVF9SRUdfTE9BRFMgOiBudW1iZXIgb2Ygc2VnbWVudCByZWdpc3RlciBsb2FkcworZXZlbnQ6MHgwNyBjb3VudGVyczowLDEgdW06c3NlX3ByZWZldGNoIG1pbmltdW06NTAwIG5hbWU6U1NFX1BSRV9FWEVDIDogbnVtYmVyIG9mIFNTRSBwcmUtZmV0Y2gvd2Vha2x5IG9yZGVyZWQgaW5zbnMgcmV0aXJlZAorZXZlbnQ6MHgwOCBjb3VudGVyczowLDEgdW06ZHRsYl9taXNzIG1pbmltdW06NTAwIG5hbWU6RFRMQl9NSVNTRVMgOiBEVExCIG1pc3MgZXZlbnRzCitldmVudDoweDA5IGNvdW50ZXJzOjAsMSB1bTptZW1vcnlfZGlzIG1pbmltdW06MTAwMCBuYW1lOk1FTU9SWV9ESVNBTUJJR1VBVElPTiA6IE1lbW9yeSBkaXNhbWJpZ3VhdGlvbiByZXNldCBjeWNsZXMuCitldmVudDoweDBjIGNvdW50ZXJzOjAsMSB1bTpwYWdlX3dhbGtzIG1pbmltdW06NTAwIG5hbWU6UEFHRV9XQUxLUyA6IFBhZ2UgdGFibGUgd2FsayBldmVudHMKK2V2ZW50OjB4MTAgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTozMDAwIG5hbWU6RkxPUFMgOiBudW1iZXIgb2YgRlAgY29tcHV0YXRpb25hbCBtaWNyby1vcHMgZXhlY3V0ZWQKK2V2ZW50OjB4MTEgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpGUF9BU1NJU1QgOiBudW1iZXIgb2YgRlAgYXNzaXN0cworZXZlbnQ6MHgxMiBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpNVUwgOiBudW1iZXIgb2YgbXVsdGlwbGllcworZXZlbnQ6MHgxMyBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRJViA6IG51bWJlciBvZiBkaXZpZGVzCitldmVudDoweDE0IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOkNZQ0xFU19ESVZfQlVTWSA6IGN5Y2xlcyBkaXZpZGVyIGlzIGJ1c3kKK2V2ZW50OjB4MTggY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6SURMRV9EVVJJTkdfRElWIDogY3ljbGVzIGRpdmlkZXIgaXMgYnVzeSBhbmQgYWxsIG90aGVyIGV4ZWN1dGlvbiB1bml0cyBhcmUgaWRsZS4KK2V2ZW50OjB4MTkgY291bnRlcnM6MCwxIHVtOmRlbGF5ZWRfYnlwYXNzIG1pbmltdW06MTAwMCBuYW1lOkRFTEFZRURfQllQQVNTIDogRGVsYXllZCBieXBhc3MgZXZlbnRzCitldmVudDoweDIxIGNvdW50ZXJzOjAsMSB1bTpjb3JlIG1pbmltdW06NTAwIG5hbWU6TDJfQURTIDogQ3ljbGVzIHRoZSBMMiBhZGRyZXNzIGJ1cyBpcyBpbiB1c2UuCitldmVudDoweDIzIGNvdW50ZXJzOjAsMSB1bTpjb3JlIG1pbmltdW06NTAwIG5hbWU6TDJfREJVU19CVVNZX1JEIDogQ3ljbGVzIHRoZSBMMiB0cmFuc2ZlcnMgZGF0YSB0byB0aGUgY29yZS4KK2V2ZW50OjB4MjQgY291bnRlcnM6MCwxIHVtOmNvcmVfcHJlZmV0Y2ggbWluaW11bTo1MDAgbmFtZTpMMl9MSU5FU19JTiA6IG51bWJlciBvZiBhbGxvY2F0ZWQgbGluZXMgaW4gTDIKK2V2ZW50OjB4MjUgY291bnRlcnM6MCwxIHVtOmNvcmUgbWluaW11bTo1MDAgbmFtZTpMMl9NX0xJTkVTX0lOIDogbnVtYmVyIG9mIG1vZGlmaWVkIGxpbmVzIGFsbG9jYXRlZCBpbiBMMgorZXZlbnQ6MHgyNiBjb3VudGVyczowLDEgdW06Y29yZV9wcmVmZXRjaCBtaW5pbXVtOjUwMCBuYW1lOkwyX0xJTkVTX09VVCA6IG51bWJlciBvZiByZWNvdmVyZWQgbGluZXMgZnJvbSBMMgorZXZlbnQ6MHgyNyBjb3VudGVyczowLDEgdW06Y29yZV9wcmVmZXRjaCBtaW5pbXVtOjUwMCBuYW1lOkwyX01fTElORVNfT1VUIDogbnVtYmVyIG9mIG1vZGlmaWVkIGxpbmVzIHJlbW92ZWQgZnJvbSBMMgorZXZlbnQ6MHgyOCBjb3VudGVyczowLDEgdW06Y29yZV9tZXNpIG1pbmltdW06NTAwIG5hbWU6TDJfSUZFVENIIDogbnVtYmVyIG9mIEwyIGNhY2hlYWJsZSBpbnN0cnVjdGlvbiBmZXRjaGVzCitldmVudDoweDI5IGNvdW50ZXJzOjAsMSB1bTpjb3JlX3ByZWZldGNoX21lc2kgbWluaW11bTo1MDAgbmFtZTpMMl9MRCA6IG51bWJlciBvZiBMMiBkYXRhIGxvYWRzCitldmVudDoweDJhIGNvdW50ZXJzOjAsMSB1bTpjb3JlX21lc2kgbWluaW11bTo1MDAgbmFtZTpMMl9TVCA6IG51bWJlciBvZiBMMiBkYXRhIHN0b3JlcworZXZlbnQ6MHgyYiBjb3VudGVyczowLDEgdW06Y29yZV9tZXNpIG1pbmltdW06NTAwIG5hbWU6TDJfTE9DSyA6IG51bWJlciBvZiBsb2NrZWQgTDIgZGF0YSBhY2Nlc3NlcworZXZlbnQ6MHgzMCBjb3VudGVyczowLDEgdW06Y29yZV9wcmVmZXRjaF9tZXNpIG1pbmltdW06NTAwIG5hbWU6TDJfUkVKRUNUX0JVU1EgOiBSZWplY3RlZCBMMiBjYWNoZSByZXF1ZXN0cworZXZlbnQ6MHgzMiBjb3VudGVyczowLDEgdW06Y29yZSBtaW5pbXVtOjUwMCBuYW1lOkwyX05PX1JFUSA6IEN5Y2xlcyBubyBMMiBjYWNoZSByZXF1ZXN0cyBhcmUgcGVuZGluZworZXZlbnQ6MHgzYSBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkVJU1RfVFJBTlNfQUxMIDogSW50ZWwodG0pIEVuaGFuY2VkIFNwZWVkU3RlcChyKSBUZWNobm9sb2d5IHRyYW5zaXRpb25zCitldmVudDoweDNiIGNvdW50ZXJzOjAsMSB1bTp4YzAgbWluaW11bTo1MDAgbmFtZTpUSEVSTUFMX1RSSVAgOiBOdW1iZXIgb2YgdGhlcm1hbCB0cmlwcworZXZlbnQ6MHg0MCBjb3VudGVyczowLDEgdW06bWVzaSBtaW5pbXVtOjUwMCBuYW1lOkwxRF9DQUNIRV9MRCA6IEwxIGNhY2hlYWJsZSBkYXRhIHJlYWQgb3BlcmF0aW9ucworZXZlbnQ6MHg0MSBjb3VudGVyczowLDEgdW06bWVzaSBtaW5pbXVtOjUwMCBuYW1lOkwxRF9DQUNIRV9TVCA6IEwxIGNhY2hlYWJsZSBkYXRhIHdyaXRlIG9wZXJhdGlvbnMKK2V2ZW50OjB4NDIgY291bnRlcnM6MCwxIHVtOm1lc2kgbWluaW11bTo1MDAgbmFtZTpMMURfQ0FDSEVfTE9DSyA6IEwxIGNhY2hlYWJsZSBsb2NrIHJlYWQgb3BlcmF0aW9ucworZXZlbnQ6MHg0MiBjb3VudGVyczowLDEgdW06eDEwIG1pbmltdW06NTAwIG5hbWU6TDFEX0NBQ0hFX0xPQ0tfRFVSQVRJT04gOiBEdXJhdGlvbiBvZiBMMSBkYXRhIGNhY2hlYWJsZSBsb2NrZWQgb3BlcmF0aW9ucworZXZlbnQ6MHg0MyBjb3VudGVyczowLDEgdW06eDEwIG1pbmltdW06NTAwIG5hbWU6TDFEX0FMTF9SRUYgOiBBbGwgcmVmZXJlbmNlcyB0byB0aGUgTDEgZGF0YSBjYWNoZQorZXZlbnQ6MHg0MyBjb3VudGVyczowLDEgdW06dHdvIG1pbmltdW06NTAwIG5hbWU6TDFEX0FMTF9DQUNIRV9SRUYgOiBMMSBkYXRhIGNhY2hlYWJsZSByZWFkcyBhbmQgd3JpdGVzCitldmVudDoweDQ1IGNvdW50ZXJzOjAsMSB1bTp4MGYgbWluaW11bTo1MDAgbmFtZTpMMURfUkVQTCA6IENhY2hlIGxpbmVzIGFsbG9jYXRlZCBpbiB0aGUgTDEgZGF0YSBjYWNoZQorZXZlbnQ6MHg0NiBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkwxRF9NX1JFUEwgOiBNb2RpZmllZCBjYWNoZSBsaW5lcyBhbGxvY2F0ZWQgaW4gdGhlIEwxIGRhdGEgY2FjaGUKK2V2ZW50OjB4NDcgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpMMURfTV9FVklDVCA6IE1vZGlmaWVkIGNhY2hlIGxpbmVzIGV2aWN0ZWQgZnJvbSB0aGUgTDEgZGF0YSBjYWNoZQorZXZlbnQ6MHg0OCBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkwxRF9QRU5EX01JU1MgOiBUb3RhbCBudW1iZXIgb2Ygb3V0c3RhbmRpbmcgTDEgZGF0YSBjYWNoZSBtaXNzZXMgYXQgYW55IGN5Y2xlCitldmVudDoweDQ5IGNvdW50ZXJzOjAsMSB1bTpsMWRfc3BsaXQgbWluaW11bTo1MDAgbmFtZTpMMURfU1BMSVQgOiBDYWNoZSBsaW5lIHNwbGl0IGxvYWQvc3RvcmVzCitldmVudDoweDRiIGNvdW50ZXJzOjAsMSB1bTpzc2VfbWlzcyBtaW5pbXVtOjUwMCBuYW1lOlNTRV9QUkVGX01JU1MgOiBTU0UgaW5zdHJ1Y3Rpb25zIHRoYXQgbWlzc2VkIGFsbCBjYWNoZXMKK2V2ZW50OjB4NGMgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpMT0FEX0hJVF9QUkUgOiBMb2FkIG9wZXJhdGlvbnMgY29uZmxpY3Rpbmcgd2l0aCBhIHNvZnR3YXJlIHByZWZldGNoIHRvIHRoZSBzYW1lIGFkZHJlc3MKK2V2ZW50OjB4NGUgY291bnRlcnM6MCwxIHVtOngxMCBtaW5pbXVtOjUwMCBuYW1lOkwxRF9QUkVGRVRDSCA6IEwxIGRhdGEgY2FjaGUgcHJlZmV0Y2ggcmVxdWVzdHMKKyMKK2V2ZW50OjB4NjAgY291bnRlcnM6MCwxIHVtOmNvcmVfYW5kX2J1c19hZ2VudHMgbWluaW11bTo1MDAgbmFtZTpCVVNfUkVRX09VVFNUQU5ESU5HIDogT3V0c3RhbmRpbmcgY2FjaGVhYmxlIGRhdGEgcmVhZCBidXMgcmVxdWVzdHMgZHVyYXRpb24KK2V2ZW50OjB4NjEgY291bnRlcnM6MCwxIHVtOmJ1c19hZ2VudHMgbWluaW11bTo1MDAgbmFtZTpCVVNfQk5SX0RSViA6IE51bWJlciBvZiBCdXMgTm90IFJlYWR5IHNpZ25hbHMgYXNzZXJ0ZWQKK2V2ZW50OjB4NjIgY291bnRlcnM6MCwxIHVtOmJ1c19hZ2VudHMgbWluaW11bTo1MDAgbmFtZTpCVVNfRFJEWV9DTE9DS1MgOiBCdXMgY3ljbGVzIHdoZW4gZGF0YSBpcyBzZW50IG9uIHRoZSBidXMKK2V2ZW50OjB4NjMgY291bnRlcnM6MCwxIHVtOmNvcmVfYW5kX2J1c19hZ2VudHMgbWluaW11bTo1MDAgbmFtZTpCVVNfTE9DS19DTE9DS1MgOiBCdXMgY3ljbGVzIHdoZW4gYSBMT0NLIHNpZ25hbCBpcyBhc3NlcnRlZAorZXZlbnQ6MHg2NCBjb3VudGVyczowLDEgdW06Y29yZV9hbmRfYnVzX2FnZW50cyBtaW5pbXVtOjUwMCBuYW1lOkJVU19EQVRBX1JDViA6IEJ1cyBjeWNsZXMgd2hpbGUgcHJvY2Vzc29yIHJlY2VpdmVzIGRhdGEKK2V2ZW50OjB4NjUgY291bnRlcnM6MCwxIHVtOmNvcmVfYW5kX2J1c19hZ2VudHMgbWluaW11bTo1MDAgbmFtZTpCVVNfVFJBTl9CUkQgOiBCdXJzdCByZWFkIGJ1cyB0cmFuc2FjdGlvbnMKK2V2ZW50OjB4NjYgY291bnRlcnM6MCwxIHVtOmNvcmVfYW5kX2J1c19hZ2VudHMgbWluaW11bTo1MDAgbmFtZTpCVVNfVFJBTl9SRk8gOiBudW1iZXIgb2YgY29tcGxldGVkIHJlYWQgZm9yIG93bmVyc2hpcCB0cmFuc2FjdGlvbnMKK2V2ZW50OjB4NjcgY291bnRlcnM6MCwxIHVtOmNvcmVfYW5kX2J1c19hZ2VudHMgbWluaW11bTo1MDAgbmFtZTpCVVNfVFJBTl9XQiA6IG51bWJlciBvZiBleHBsaWNpdCB3cml0ZWJhY2sgYnVzIHRyYW5zYWN0aW9ucworZXZlbnQ6MHg2OCBjb3VudGVyczowLDEgdW06Y29yZV9hbmRfYnVzX2FnZW50cyBtaW5pbXVtOjUwMCBuYW1lOkJVU19UUkFOX0lGRVRDSCA6IG51bWJlciBvZiBpbnN0cnVjdGlvbiBmZXRjaCB0cmFuc2FjdGlvbnMKK2V2ZW50OjB4NjkgY291bnRlcnM6MCwxIHVtOmNvcmVfYW5kX2J1c19hZ2VudHMgbWluaW11bTo1MDAgbmFtZTpCVVNfVFJBTl9JTlZBTCA6IG51bWJlciBvZiBpbnZhbGlkYXRlIHRyYW5zYWN0aW9ucworZXZlbnQ6MHg2YSBjb3VudGVyczowLDEgdW06Y29yZV9hbmRfYnVzX2FnZW50cyBtaW5pbXVtOjUwMCBuYW1lOkJVU19UUkFOX1BXUiA6IG51bWJlciBvZiBwYXJ0aWFsIHdyaXRlIGJ1cyB0cmFuc2FjdGlvbnMKK2V2ZW50OjB4NmIgY291bnRlcnM6MCwxIHVtOmNvcmVfYW5kX2J1c19hZ2VudHMgbWluaW11bTo1MDAgbmFtZTpCVVNfVFJBTlNfUCA6IG51bWJlciBvZiBwYXJ0aWFsIGJ1cyB0cmFuc2FjdGlvbnMKK2V2ZW50OjB4NmMgY291bnRlcnM6MCwxIHVtOmNvcmVfYW5kX2J1c19hZ2VudHMgbWluaW11bTo1MDAgbmFtZTpCVVNfVFJBTlNfSU8gOiBudW1iZXIgb2YgSS9PIGJ1cyB0cmFuc2FjdGlvbnMKK2V2ZW50OjB4NmQgY291bnRlcnM6MCwxIHVtOmNvcmVfYW5kX2J1c19hZ2VudHMgbWluaW11bTo1MDAgbmFtZTpCVVNfVFJBTlNfREVGIDogbnVtYmVyIG9mIGNvbXBsZXRlZCBkZWZlciB0cmFuc2FjdGlvbnMKK2V2ZW50OjB4NmUgY291bnRlcnM6MCwxIHVtOmNvcmVfYW5kX2J1c19hZ2VudHMgbWluaW11bTo1MDAgbmFtZTpCVVNfVFJBTl9CVVJTVCA6IG51bWJlciBvZiBjb21wbGV0ZWQgYnVyc3QgdHJhbnNhY3Rpb25zCitldmVudDoweDZmIGNvdW50ZXJzOjAsMSB1bTpjb3JlX2FuZF9idXNfYWdlbnRzIG1pbmltdW06NTAwIG5hbWU6QlVTX1RSQU5fTUVNIDogbnVtYmVyIG9mIGNvbXBsZXRlZCBtZW1vcnkgdHJhbnNhY3Rpb25zCitldmVudDoweDcwIGNvdW50ZXJzOjAsMSB1bTpjb3JlX2FuZF9idXNfYWdlbnRzIG1pbmltdW06NTAwIG5hbWU6QlVTX1RSQU5fQU5ZIDogbnVtYmVyIG9mIGFueSBjb21wbGV0ZWQgYnVzIHRyYW5zYWN0aW9ucworZXZlbnQ6MHg3NyBjb3VudGVyczowLDEgdW06YnVzX2FnZW50c19hbmRfc25vb3AgbWluaW11bTo1MDAgbmFtZTpFWFRfU05PT1AgOiBFeHRlcm5hbCBzbm9vcHMKK2V2ZW50OjB4NzggY291bnRlcnM6MCwxIHVtOmNvcmVfYW5kX3Nub29wIG1pbmltdW06NTAwIG5hbWU6Q01QX1NOT09QIDogTDEgZGF0YSBjYWNoZSBpcyBzbm9vcGVkIGJ5IG90aGVyIGNvcmUKK2V2ZW50OjB4N2EgY291bnRlcnM6MCwxIHVtOmJ1c19hZ2VudHMgbWluaW11bTo1MDAgbmFtZTpCVVNfSElUX0RSViA6IEhJVCBzaWduYWwgYXNzZXJ0ZWQKK2V2ZW50OjB4N2IgY291bnRlcnM6MCwxIHVtOmJ1c19hZ2VudHMgbWluaW11bTo1MDAgbmFtZTpCVVNfSElUTV9EUlYgOiBISVRNIHNpZ25hbCBhc3NlcnRlZAorZXZlbnQ6MHg3ZCBjb3VudGVyczowLDEgdW06Y29yZSBtaW5pbXVtOjUwMCBuYW1lOkJVU1FfRU1QVFkgOiBCdXMgcXVldWUgaXMgZW1wdHkKK2V2ZW50OjB4N2UgY291bnRlcnM6MCwxIHVtOmNvcmVfYW5kX2J1c19hZ2VudHMgbWluaW11bTo1MDAgbmFtZTpTTk9PUF9TVEFMTF9EUlYgOiBCdXMgc3RhbGxlZCBmb3Igc25vb3BzCitldmVudDoweDdmIGNvdW50ZXJzOjAsMSB1bTpjb3JlIG1pbmltdW06NTAwIG5hbWU6QlVTX0lPX1dBSVQgOiBJTyByZXF1ZXN0cyB3YWl0aW5nIGluIHRoZSBidXMgcXVldWUKK2V2ZW50OjB4ODAgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpMMUlfUkVBRFMgOiBudW1iZXIgb2YgaW5zdHJ1Y3Rpb24gZmV0Y2hlcworZXZlbnQ6MHg4MSBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkwxSV9NSVNTRVMgOiBudW1iZXIgb2YgaW5zdHJ1Y3Rpb24gZmV0Y2ggbWlzc2VzCitldmVudDoweDgyIGNvdW50ZXJzOjAsMSB1bTppdGxiX21pc3MgbWluaW11bTo1MDAgbmFtZTpJVExCIDogbnVtYmVyIG9mIElUTEIgbWlzc2VzCitldmVudDoweDgzIGNvdW50ZXJzOjAsMSB1bTp0d28gbWluaW11bTo1MDAgbmFtZTpJTlNUX1FVRVVFX0ZVTEwgOiBjeWNsZXMgZHVyaW5nIHdoaWNoIHRoZSBpbnN0cnVjdGlvbiBxdWV1ZSBpcyBmdWxsCitldmVudDoweDg2IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SUZVX01FTV9TVEFMTCA6IGN5Y2xlcyBpbnN0cnVjdGlvbiBmZXRjaCBwaXBlIGlzIHN0YWxsZWQKK2V2ZW50OjB4ODcgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJTERfU1RBTEwgOiBjeWNsZXMgaW5zdHJ1Y3Rpb24gbGVuZ3RoIGRlY29kZXIgaXMgc3RhbGxlZAorZXZlbnQ6MHg4OCBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjMwMDAgbmFtZTpCUl9JTlNUX0VYRUMgOiBCcmFuY2ggaW5zdHJ1Y3Rpb25zIGV4ZWN1dGVkIChub3QgbmVjZXNzYXJpbHkgcmV0aXJlZCkKK2V2ZW50OjB4ODkgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTozMDAwIG5hbWU6QlJfTUlTU1BfRVhFQyA6IEJyYW5jaCBpbnN0cnVjdGlvbnMgZXhlY3V0ZWQgdGhhdCB3ZXJlIG1pc3ByZWRpY3RlZCBhdCBleGVjdXRpb24KK2V2ZW50OjB4OGEgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTozMDAwIG5hbWU6QlJfQkFDX01JU1NQX0VYRUMgOiBCcmFuY2ggaW5zdHJ1Y3Rpb25zIGV4ZWN1dGVkIHRoYXQgd2VyZSBtaXNwcmVkaWN0ZWQgYXQgRnJvbnQgRW5kIChCQUMpCitldmVudDoweDhiIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06MzAwMCBuYW1lOkJSX0NORF9FWEVDIDogQ29uZGl0aW9uYWwgQnJhbmNoIGluc3RydWN0aW9ucyBleGVjdXRlZAorZXZlbnQ6MHg4YyBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjMwMDAgbmFtZTpCUl9DTkRfTUlTU1BfRVhFQyA6IENvbmRpdGlvbmFsIEJyYW5jaCBpbnN0cnVjdGlvbnMgZXhlY3V0ZWQgdGhhdCB3ZXJlIG1pc3ByZWRpY3RlZAorZXZlbnQ6MHg4ZCBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjMwMDAgbmFtZTpCUl9JTkRfRVhFQyA6IEluZGlyZWN0IEJyYW5jaCBpbnN0cnVjdGlvbnMgZXhlY3V0ZWQKK2V2ZW50OjB4OGUgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTozMDAwIG5hbWU6QlJfSU5EX01JU1NQX0VYRUMgOiBJbmRpcmVjdCBCcmFuY2ggaW5zdHJ1Y3Rpb25zIGV4ZWN1dGVkIHRoYXQgd2VyZSBtaXNwcmVkaWN0ZWQKK2V2ZW50OjB4OGYgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTozMDAwIG5hbWU6QlJfUkVUX0VYRUMgOiBSZXR1cm4gQnJhbmNoIGluc3RydWN0aW9ucyBleGVjdXRlZAorZXZlbnQ6MHg5MCBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjMwMDAgbmFtZTpCUl9SRVRfTUlTU1BfRVhFQyA6IFJldHVybiBCcmFuY2ggaW5zdHJ1Y3Rpb25zIGV4ZWN1dGVkIHRoYXQgd2VyZSBtaXNwcmVkaWN0ZWQgYXQgRXhlY3V0aW9uCitldmVudDoweDkxIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06MzAwMCBuYW1lOkJSX1JFVF9CQUNfTUlTU1BfRVhFQyA6UmV0dXJuIEJyYW5jaCBpbnN0cnVjdGlvbnMgZXhlY3V0ZWQgdGhhdCB3ZXJlIG1pc3ByZWRpY3RlZCBhdCBGcm9udCBFbmQgKEJBQykKK2V2ZW50OjB4OTIgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTozMDAwIG5hbWU6QlJfQ0FMTF9FWEVDIDogQ0FMTCBpbnN0cnVjdGlvbiBleGVjdXRlZAorZXZlbnQ6MHg5MyBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjMwMDAgbmFtZTpCUl9DQUxMX01JU1NQX0VYRUMgOiBDQUxMIGluc3RydWN0aW9uIGV4ZWN1dGVkIGFuZCBtaXNzIHByZWRpY3RlZAorZXZlbnQ6MHg5NCBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjMwMDAgbmFtZTpCUl9JTkRfQ0FMTF9FWEVDIDogSW5kaXJlY3QgQ0FMTCBpbnN0cnVjdGlvbiBleGVjdXRlZAorZXZlbnQ6MHg5NyBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjMwMDAgbmFtZTpCUl9US05fQlVCQkxFXzEgOiBCcmFuY2ggcHJlZGljdGVkIHRha2VuIHdpdGggYnViYmxlIDEKK2V2ZW50OjB4OTggY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTozMDAwIG5hbWU6QlJfVEtOX0JVQkJMRV8yIDogQnJhbmNoIHByZWRpY3RlZCB0YWtlbiB3aXRoIGJ1YmJsZSAyCitldmVudDoweGEwIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlJTX1VPUFNfRElTUEFUQ0hFRCA6IE1pY3JvLW9wcyBkaXNwYXRjaGVkIGZvciBleGVjdXRpb24KKyMgU2V0IGJvdGggdGhlIENNQVNLIGFuZCBJTlYgZmllbGRzIHRvIDEgLS0gd2hpY2ggY2F1c2VzIHRoZSBjb3VudGVyIHRvCisjIGluY3JlbWVudCBvbiBjeWNsZXMgaW4gd2hpY2ggZmV3ZXIgdGhhbiAxIHVvcCBkaXNwYXRjaGVzLiAgaS5lLiBzdGFsbCBjeWNsZXMuCisjIEl0J3MgYSBiaXQgb2YgYSBoYWNrLCBidXQgcGFzc2VzIHRocm91Z2ggdGhlIG9wcm9maWxlIGluZnJhc3RydWN0dXJlIGp1c3QKKyMgZmluZS4KK2V2ZW50OjB4MTgwMDBhMCBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpSU19VT1BTX0RJU1BBVENIRURfTk9ORSA6IE5vIE1pY3JvLW9wcyBkaXNwYXRjaGVkIGZvciBleGVjdXRpb24KK2V2ZW50OjB4YWEgY291bnRlcnM6MCwxIHVtOm1hY3JvX2luc3RzIG1pbmltdW06NTAwIG5hbWU6TUFDUk9fSU5TVFMgOiBpbnN0cnVjdGlvbnMgZGVjb2RlZAorZXZlbnQ6MHhhYiBjb3VudGVyczowLDEgdW06ZXNwIG1pbmltdW06NTAwIG5hbWU6RVNQIDogRVNQIHJlZ2lzdGVyIGV2ZW50cworZXZlbnQ6MHhiMCBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlNJTURfVU9QU19FWEVDIDogU0lNRCBtaWNyby1vcHMgZXhlY3V0ZWQgKGV4Y2x1ZGluZyBzdG9yZXMpCitldmVudDoweGIxIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06MzAwMCBuYW1lOlNJTURfU0FUX1VPUF9FWEVDIDogbnVtYmVyIG9mIFNJTUQgc2F0dXJhdGluZyBpbnN0cnVjdGlvbnMgZXhlY3V0ZWQKK2V2ZW50OjB4YjMgY291bnRlcnM6MCwxIHVtOnNpbWRfaW5zdHJfdHlwZV9leGVjIG1pbmltdW06MzAwMCBuYW1lOlNJTURfVU9QX1RZUEVfRVhFQyA6IG51bWJlciBvZiBTSU1EIHBhY2tpbmcgaW5zdHJ1Y3Rpb25zCitldmVudDoweGMwIGNvdW50ZXJzOjAsMSB1bTppbnN0X3JldGlyZWQgbWluaW11bTo2MDAwIG5hbWU6SU5TVF9SRVRJUkVEIDogbnVtYmVyIG9mIGluc3RydWN0aW9ucyByZXRpcmVkCitldmVudDoweGMxIGNvdW50ZXJzOjAsMSB1bTp4ODdfb3BzX3JldGlyZWQgbWluaW11bTo1MDAgbmFtZTpYODdfT1BTX1JFVElSRUQgOiBudW1iZXIgb2YgY29tcHV0YXRpb25hbCBGUCBvcGVyYXRpb25zIHJldGlyZWQKK2V2ZW50OjB4YzIgY291bnRlcnM6MCwxIHVtOnVvcHNfcmV0aXJlZCBtaW5pbXVtOjYwMDAgbmFtZTpVT1BTX1JFVElSRUQgOiBudW1iZXIgb2YgVU9QcyByZXRpcmVkCitldmVudDoweGMzIGNvdW50ZXJzOjAsMSB1bTptYWNoaW5lX251a2VzIG1pbmltdW06NTAwIG5hbWU6TUFDSElORV9OVUtFU19TTUMgOiBudW1iZXIgb2YgcGlwZWxpbmUgZmx1c2hpbmcgZXZlbnRzCitldmVudDoweGM0IGNvdW50ZXJzOjAsMSB1bTpicl9pbnN0X3JldGlyZWQgbWluaW11bTo1MDAgbmFtZTpCUl9JTlNUX1JFVElSRUQgOiBudW1iZXIgb2YgYnJhbmNoIGluc3RydWN0aW9ucyByZXRpcmVkCitldmVudDoweGM1IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QlJfTUlTU19QUkVEX1JFVElSRUQgOiBudW1iZXIgb2YgbWlzcHJlZGljdGVkIGJyYW5jaGVzIHJldGlyZWQgKHByZWNpc2UpCitldmVudDoweGM2IGNvdW50ZXJzOjAsMSB1bTpjeWNsZXNfaW50X21hc2tlZCBtaW5pbXVtOjUwMCBuYW1lOkNZQ0xFU19JTlRfTUFTS0VEIDogY3ljbGVzIGludGVycnVwdHMgYXJlIGRpc2FibGVkCitldmVudDoweGM3IGNvdW50ZXJzOjAsMSB1bTpzaW1kX2luc3RfcmV0aXJlZCBtaW5pbXVtOjUwMCBuYW1lOlNJTURfSU5TVF9SRVRJUkVEIDogU1NFL1NTRTIgaW5zdHJ1Y3Rpb25zIHJldGlyZWQKK2V2ZW50OjB4YzggY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpIV19JTlRfUkNWIDogbnVtYmVyIG9mIGhhcmR3YXJlIGludGVycnVwdHMgcmVjZWl2ZWQKK2V2ZW50OjB4YzkgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SVRMQl9NSVNTX1JFVElSRUQgOiBSZXRpcmVkIGluc3RydWN0aW9ucyB0aGF0IG1pc3NlZCB0aGUgSVRMQgorZXZlbnQ6MHhjYSBjb3VudGVyczowLDEgdW06c2ltZF9jb21wX2luc3RfcmV0aXJlZCBtaW5pbXVtOjUwMCBuYW1lOlNJTURfQ09NUF9JTlNUX1JFVElSRUQgOiBSZXRpcmVkIGNvbXB1dGF0aW9uYWwgU1NFL1NTRTIgaW5zdHJ1Y3Rpb25zCitldmVudDoweGNiIGNvdW50ZXJzOjAgdW06bWVtX2xvYWRfcmV0aXJlZCBtaW5pbXVtOjUwMCBuYW1lOk1FTV9MT0FEX1JFVElSRUQgOiBSZXRpcmVkIGxvYWRzCitldmVudDoweGNjIGNvdW50ZXJzOjAsMSB1bTptbXhfdHJhbnMgbWluaW11bTozMDAwIG5hbWU6RlBfTU1YX1RSQU5TIDogTU1YLWZsb2F0aW5nIHBvaW50IHRyYW5zaXRpb25zCitldmVudDoweGNkIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6TU1YX0FTU0lTVCA6IG51bWJlciBvZiBFTU1TIGluc3RydWN0aW9ucyBleGVjdXRlZAorZXZlbnQ6MHhjZSBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlNJTURfSU5TVFJfUkVUIDogbnVtYmVyIG9mIFNJTUQgaW5zdHJ1Y3Rpb25zIHJldGlyZWQKK2V2ZW50OjB4Y2YgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpTSU1EX1NBVF9JTlNUUl9SRVQgOiBudW1iZXIgb2Ygc2F0dXJhdGVkIGFyaXRobWV0aWMgaW5zdHJ1Y3Rpb25zIHJldGlyZWQKK2V2ZW50OjB4ZDIgY291bnRlcnM6MCwxIHVtOnJhdF9zdGFsbHMgbWluaW11bTo2MDAwIG5hbWU6UkFUX1NUQUxMUyA6IFBhcnRpYWwgcmVnaXN0ZXIgc3RhbGwgY3ljbGVzCitldmVudDoweGQ0IGNvdW50ZXJzOjAsMSB1bTpzZWdfcmVncyBtaW5pbXVtOjUwMCBuYW1lOlNFR19SRU5BTUVfU1RBTExTIDogU2VnbWVudCByZW5hbWUgc3RhbGxzCitldmVudDoweGQ1IGNvdW50ZXJzOjAsMSB1bTpzZWdfcmVncyBtaW5pbXVtOjUwMCBuYW1lOlNFR19SRU5BTUVTIDogU2VnbWVudCByZW5hbWVzCitldmVudDoweGRjIGNvdW50ZXJzOjAsMSB1bTpyZXNvdXJjZV9zdGFsbHMgbWluaW11bTozMDAwIG5hbWU6UkVTT1VSQ0VfU1RBTExTIDogQ3ljbGVzIGR1cmluZyB3aGljaCByZXNvdXJjZSBzdGFsbHMgb2NjdXIKK2V2ZW50OjB4ZTAgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpCUl9JTlNUX0RFQ09ERUQgOiBudW1iZXIgb2YgYnJhbmNoIGluc3RydWN0aW9ucyBkZWNvZGVkCitldmVudDoweGU0IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QlJfQk9HVVMgOiBudW1iZXIgb2YgYm9ndXMgYnJhbmNoZXMKK2V2ZW50OjB4ZTYgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpCQUNMRUFSUyA6IG51bWJlciBvZiB0aW1lcyBCQUNMRUFSIGlzIGFzc2VydGVkCitldmVudDoweGYwIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06MzAwMCBuYW1lOlBSRUZfUlFTVFNfVVAgOiBOdW1iZXIgb2YgdXB3YXJkIHByZWZldGNoZXMgaXNzdWVkCitldmVudDoweGY4IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06MzAwMCBuYW1lOlBSRUZfUlFTVFNfRE4gOiBOdW1iZXIgb2YgZG93bndhcmQgcHJlZmV0Y2hlcyBpc3N1ZWQKZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2V2ZW50cy9pMzg2L2NvcmVfMi91bml0X21hc2tzIGIvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL2kzODYvY29yZV8yL3VuaXRfbWFza3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDUyOGYxNwotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2V2ZW50cy9pMzg2L2NvcmVfMi91bml0X21hc2tzCkBAIC0wLDAgKzEsMTk1IEBACisjIENvcmUgMiBwb3NzaWJsZSB1bml0IG1hc2tzCisjCituYW1lOnplcm8gdHlwZTptYW5kYXRvcnkgZGVmYXVsdDoweDAKKwkweDAgTm8gdW5pdCBtYXNrCisjbmFtZTpvbmUgdHlwZTptYW5kYXRvcnkgZGVmYXVsdDoweDEKKyMJMHgxIE5vIHVuaXQgbWFzaworbmFtZTp0d28gdHlwZTptYW5kYXRvcnkgZGVmYXVsdDoweDIKKwkweDIgTm8gdW5pdCBtYXNrCituYW1lOngwZiB0eXBlOm1hbmRhdG9yeSBkZWZhdWx0OjB4ZgorCTB4ZiBObyB1bml0IG1hc2sKK25hbWU6eDEwIHR5cGU6bWFuZGF0b3J5IGRlZmF1bHQ6MHgxMAorCTB4MTAgTm8gdW5pdCBtYXNrCisjbmFtZTp4MjAgdHlwZTptYW5kYXRvcnkgZGVmYXVsdDoweDIwCisjCTB4MjAgTm8gdW5pdCBtYXNrCisjbmFtZTp4NDAgdHlwZTptYW5kYXRvcnkgZGVmYXVsdDoweDQwCisjCTB4NDAgTm8gdW5pdCBtYXNrCituYW1lOng0MSB0eXBlOm1hbmRhdG9yeSBkZWZhdWx0OjB4NDEKKwkweDQxIE5vIHVuaXQgbWFzaworbmFtZTp4NGYgdHlwZTptYW5kYXRvcnkgZGVmYXVsdDoweDRmCisJMHg0ZiBObyB1bml0IG1hc2sKK25hbWU6eGMwIHR5cGU6bWFuZGF0b3J5IGRlZmF1bHQ6MHhjMAorCTB4YzAgTm8gdW5pdCBtYXNrCituYW1lOm5vbmhsdCB0eXBlOmV4Y2x1c2l2ZSBkZWZhdWx0OjB4MAorCTB4MCBVbmhhbHRlZCBjb3JlIGN5Y2xlcworCTB4MSBVbmhhbHRlZCBidXMgY3ljbGVzCisJMHgyIFVuaGFsdGVkIGJ1cyBjeWNsZXMgb2YgdGhpcyBjb3JlIHdoaWxlIHRoZSBvdGhlciBjb3JlIGlzIGhhbHRlZAorbmFtZTptZXNpIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MGYKKwkweDA4CShNKUVTSTogTW9kaWZpZWQKKwkweDA0CU0oRSlTSTogRXhjbHVzaXZlCisJMHgwMglNRShTKUk6IFNoYXJlZAorCTB4MDEJTUVTKEkpOiBJbnZhbGlkCituYW1lOnNzZV9wcmVmZXRjaCB0eXBlOmV4Y2x1c2l2ZSBkZWZhdWx0OjB4MAorCTB4MDAgcHJlZmV0Y2ggTlRBIGluc3RydWN0aW9ucyBleGVjdXRlZC4KKwkweDAxIHByZWZldGNoIFQxIGluc3RydWN0aW9ucyBleGVjdXRlZC4KKwkweDAyIHByZWZldGNoIFQxIGFuZCBUMiBpbnN0cnVjdGlvbnMgZXhlY3V0ZWQuCisJMHgwMyBTU0Ugd2Vha2x5LW9yZGVyZWQgc3RvcmVzCituYW1lOnNpbWRfaW5zdHJfdHlwZV9leGVjIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4M2YKKwkweDAxIFNJTUQgcGFja2VkIG11bHRpcGxpZXMKKwkweDAyIFNJTUQgcGFja2VkIHNoaWZ0cworCTB4MDQgU0lNRCBwYWNrIG9wZXJhdGlvbnMKKwkweDA4IFNJTUQgdW5wYWNrIG9wZXJhdGlvbnMKKwkweDEwIFNJTUQgcGFja2VkIGxvZ2ljYWwKKwkweDIwIFNJTUQgcGFja2VkIGFyaXRobWV0aWMKKwkweDNmIGFsbCBvZiB0aGUgYWJvdmUKK25hbWU6bW14X3RyYW5zIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MworCTB4MDEgZmxvYXQtPk1NWCB0cmFuc2l0aW9ucworCTB4MDIgTU1YLT5mbG9hdCB0cmFuc2l0aW9ucworbmFtZTpzc2VfbWlzcyB0eXBlOmV4Y2x1c2l2ZSBkZWZhdWx0OjB4MAorCTB4MDAgUFJFRkVUQ0hOVEEKKwkweDAxIFBSRUZFVENIVDAKKwkweDAyIFBSRUZFVENIVDEvUFJFRkVUQ0hUMgorbmFtZTpsb2FkX2Jsb2NrIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4M2UKKwkweDAyIFNUQSAgTG9hZHMgYmxvY2tlZCBieSBhIHByZWNlZGluZyBzdG9yZSB3aXRoIHVua25vd24gYWRkcmVzcy4KKwkweDA0IFNURCAgTG9hZHMgYmxvY2tlZCBieSBhIHByZWNlZGluZyBzdG9yZSB3aXRoIHVua25vd24gZGF0YS4KKwkweDA4IE9WRVJMQVBfU1RPUkUgIExvYWRzIHRoYXQgcGFydGlhbGx5IG92ZXJsYXAgYW4gZWFybGllciBzdG9yZSwgb3IgNEsgYWxpYXNlZCB3aXRoIGEgcHJldmlvdXMgc3RvcmUuCisJMHgxMCBVTlRJTF9SRVRJUkUgIExvYWRzIGJsb2NrZWQgdW50aWwgcmV0aXJlbWVudC4KKwkweDIwIEwxRCAgTG9hZHMgYmxvY2tlZCBieSB0aGUgTDEgZGF0YSBjYWNoZS4KK25hbWU6c3RvcmVfYmxvY2sgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwYgorCTB4MDEgU0JfRFJBSU5fQ1lDTEVTCUN5Y2xlcyB3aGlsZSBzdG9yZXMgYXJlIGJsb2NrZWQgZHVlIHRvIHN0b3JlIGJ1ZmZlciBkcmFpbi4KKwkweDAyIE9SREVSCUN5Y2xlcyB3aGlsZSBzdG9yZSBpcyB3YWl0aW5nIGZvciBhIHByZWNlZGluZyBzdG9yZSB0byBiZSBnbG9iYWxseSBvYnNlcnZlZC4KKwkweDA4IE5PT1AJQSBzdG9yZSBpcyBibG9ja2VkIGR1ZSB0byBhIGNvbmZsaWN0IHdpdGggYW4gZXh0ZXJuYWwgb3IgaW50ZXJuYWwgc25vb3AuCituYW1lOmR0bGJfbWlzcyB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDBmCisJMHgwMSBBTlkJTWVtb3J5IGFjY2Vzc2VzIHRoYXQgbWlzc2VkIHRoZSBEVExCLgorCTB4MDIgTUlTU19MRAlEVExCIG1pc3NlcyBkdWUgdG8gbG9hZCBvcGVyYXRpb25zLgorCTB4MDQgTDBfTUlTU19MRCBMMCBEVExCIG1pc3NlcyBkdWUgdG8gbG9hZCBvcGVyYXRpb25zLgorCTB4MDggTUlTU19TVAlUTEIgbWlzc2VzIGR1ZSB0byBzdG9yZSBvcGVyYXRpb25zLgorbmFtZTptZW1vcnlfZGlzIHR5cGU6ZXhjbHVzaXZlIGRlZmF1bHQ6MHgwMQorCTB4MDEgUkVTRVQJTWVtb3J5IGRpc2FtYmlndWF0aW9uIHJlc2V0IGN5Y2xlcy4KKwkweDAyIFNVQ0NFU1MJTnVtYmVyIG9mIGxvYWRzIHRoYXQgd2VyZSBzdWNjZXNzZnVsbHkgZGlzYW1iaWd1YXRlZC4KK25hbWU6cGFnZV93YWxrcyB0eXBlOmV4Y2x1c2l2ZSBkZWZhdWx0OjB4MDIKKwkweDAxIENPVU5UCU51bWJlciBvZiBwYWdlLXdhbGtzIGV4ZWN1dGVkLgorCTB4MDIgQ1lDTEVTCUR1cmF0aW9uIG9mIHBhZ2Utd2Fsa3MgaW4gY29yZSBjeWNsZXMuCituYW1lOmRlbGF5ZWRfYnlwYXNzIHR5cGU6ZXhjbHVzaXZlIGRlZmF1bHQ6MHgwMAorCTB4MDAgRlAJCURlbGF5ZWQgYnlwYXNzIHRvIEZQIG9wZXJhdGlvbi4KKwkweDAxIFNJTUQJRGVsYXllZCBieXBhc3MgdG8gU0lNRCBvcGVyYXRpb24uCisJMHgwMiBMT0FECURlbGF5ZWQgYnlwYXNzIHRvIGxvYWQgb3BlcmF0aW9uLgorbmFtZTpjb3JlIHR5cGU6ZXhjbHVzaXZlIGRlZmF1bHQ6MHg0MAorCTB4YzAJQWxsIGNvcmVzCisJMHg0MAlUaGlzIGNvcmUKK25hbWU6Y29yZV9wcmVmZXRjaCB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDcwCisJMHhjMAljb3JlOiBhbGwgY29yZXMKKwkweDQwCWNvcmU6IHRoaXMgY29yZQorCTB4MzAJcHJlZmV0Y2g6IGFsbCBpbmNsdXNpdmUKKwkweDEwCXByZWZldGNoOiBIYXJkd2FyZSBwcmVmZXRjaCBvbmx5CisJMHgwMAlwcmVmZXRjaDogZXhjbHVkZSBoYXJkd2FyZSBwcmVmZXRjaAorbmFtZTpjb3JlX21lc2kgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHg0ZgorCTB4YzAJY29yZTogYWxsIGNvcmVzCisJMHg0MAljb3JlOiB0aGlzIGNvcmUKKwkweDA4CShNKUVTSTogTW9kaWZpZWQKKwkweDA0CU0oRSlTSTogRXhjbHVzaXZlCisJMHgwMglNRShTKUk6IFNoYXJlZAorCTB4MDEJTUVTKEkpOiBJbnZhbGlkCituYW1lOmNvcmVfcHJlZmV0Y2hfbWVzaSB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDdmCisJMHhjMAljb3JlOiBhbGwgY29yZXMKKwkweDQwCWNvcmU6IHRoaXMgY29yZQorCTB4MzAJcHJlZmV0Y2g6IGFsbCBpbmNsdXNpdmUKKwkweDEwCXByZWZldGNoOiBIYXJkd2FyZSBwcmVmZXRjaCBvbmx5CisJMHgwMAlwcmVmZXRjaDogZXhjbHVkZSBoYXJkd2FyZSBwcmVmZXRjaAorCTB4MDgJKE0pRVNJOiBNb2RpZmllZAorCTB4MDQJTShFKVNJOiBFeGNsdXNpdmUKKwkweDAyCU1FKFMpSTogU2hhcmVkCisJMHgwMQlNRVMoSSk6IEludmFsaWQKK25hbWU6bDFkX3NwbGl0IHR5cGU6ZXhjbHVzaXZlIGRlZmF1bHQ6MHgxCisJMHgxCXNwbGl0IGxvYWRzCisJMHgyCXNwbGl0IHN0b3JlcworbmFtZTpidXNfYWdlbnRzIHR5cGU6ZXhjbHVzaXZlIGRlZmF1bHQ6MHgwMAorCTB4MDAJdGhpcyBhZ2VudAorCTB4MjAJaW5jbHVkZSBhbGwgYWdlbnRzCituYW1lOmNvcmVfYW5kX2J1c19hZ2VudHMgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHg0MAorCTB4YzAJY29yZTogYWxsIGNvcmVzCisJMHg0MAljb3JlOiB0aGlzIGNvcmUKKwkweDAwCWJ1czogdGhpcyBhZ2VudAorCTB4MjAJYnVzOiBpbmNsdWRlIGFsbCBhZ2VudHMKK25hbWU6YnVzX2FnZW50c19hbmRfc25vb3AgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwYgorCTB4MDAJYnVzOiB0aGlzIGFnZW50CisJMHgyMAlidXM6IGluY2x1ZGUgYWxsIGFnZW50cworCTB4MDgJc25vb3A6IEhJVE0gc25vb3BzCisJMHgwMglzbm9vcDogSElUIHNub29wcworCTB4MDEJc25vb3A6IENMRUFOIHNub29wcworbmFtZTpjb3JlX2FuZF9zbm9vcCB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDQwCisJMHhjMAljb3JlOiBhbGwgY29yZXMKKwkweDQwCWNvcmU6IHRoaXMgY29yZQorCTB4MDEJc25vb3A6IENNUDJJIHNub29wcworCTB4MDIJc25vb3A6IENNUDJTIHNub29wcworbmFtZTppdGxiX21pc3MgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgxMgorCTB4MDIJSVRMQiBzbWFsbCBwYWdlIG1pc3NlcworCTB4MTAJSVRMQiBsYXJnZSBwYWdlIG1pc3NlcworCTB4NDAJSVRMQiBmbHVzaGVzCituYW1lOm1hY3JvX2luc3RzIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MDkKKwkweDAxCUluc3RydWN0aW9ucyBkZWNvZGVkCisJMHgwOAlDSVNDIEluc3RydWN0aW9ucyBkZWNvZGVkCituYW1lOmVzcCB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDAxCisJMHgwMQlFU1AgcmVnaXN0ZXIgY29udGVudCBzeW5jaHJvbml6YXRpb25zCisJMHgwMglFU1AgcmVnaXN0ZXIgYXV0b21hdGljIGFkZGl0aW9ucworbmFtZTppbnN0X3JldGlyZWQgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwMAorCTB4MDAJQW55CisJMHgwMQlMb2FkcworCTB4MDIJU3RvcmVzCisJMHgwNAlPdGhlcgorbmFtZTp4ODdfb3BzX3JldGlyZWQgdHlwZTpleGNsdXNpdmUgZGVmYXVsdDoweGZlCisJMHgwMQlGWENIIGluc3RydWN0aW9ucyByZXRpcmVkCisJMHhmZQlSZXRpcmVkIGZsb2F0aW5nLXBvaW50IGNvbXB1dGF0aW9uYWwgb3BlcmF0aW9ucyAocHJlY2lzZSkKK25hbWU6dW9wc19yZXRpcmVkIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MGYKKwkweDAxCUZ1c2VkIGxvYWQrb3Agb3IgbG9hZCtpbmRpcmVjdCBicmFuY2ggcmV0aXJlZAorCTB4MDIJRnVzZWQgc3RvcmUgYWRkcmVzcyArIGRhdGEgcmV0aXJlZAorCTB4MDQJUmV0aXJlZCBpbnN0cnVjdGlvbiBwYWlycyBmdXNlZCBpbnRvIG9uZSBtaWNyby1vcAorCTB4MDcJRnVzZWQgbWljcm8tb3BzIHJldGlyZWQKKwkweDA4CU5vbi1mdXNlZCBtaWNyby1vcHMgcmV0aXJlZAorCTB4MGYJTWljcm8tb3BzIHJldGlyZWQKK25hbWU6bWFjaGluZV9udWtlcyB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDA1CisJMHgwMQlTZWxmLU1vZGlmeWluZyBDb2RlIGRldGVjdGVkCisJMHgwNAlFeGVjdXRpb24gcGlwZWxpbmUgcmVzdGFydCBkdWUgdG8gbWVtb3J5IG9yZGVyaW5nIGNvbmZsaWN0IG9yIG1lbW9yeSBkaXNhbWJpZ3VhdGlvbiBtaXNwcmVkaWN0aW9uCituYW1lOmJyX2luc3RfcmV0aXJlZCB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweGEKKwkweDAxCXByZWRpY3RlZCBub3QtdGFrZW4KKwkweDAyCW1pc3ByZWRpY3RlZCBub3QtdGFrZW4KKwkweDA0CXByZWRpY3RlZCB0YWtlbgorCTB4MDgJbWlzcHJlZGljdGVkIHRha2VuCituYW1lOmN5Y2xlc19pbnRfbWFza2VkIHR5cGU6ZXhjbHVzaXZlIGRlZmF1bHQ6MHgwMgorCTB4MDEJSW50ZXJydXB0cyBkaXNhYmxlZAorCTB4MDIJSW50ZXJydXB0cyBwZW5kaW5nIGFuZCBkaXNhYmxlZAorbmFtZTpzaW1kX2luc3RfcmV0aXJlZCB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDFmCisJMHgwMQlSZXRpcmVkIFNTRSBwYWNrZWQtc2luZ2xlIGluc3RydWN0aW9ucworCTB4MDIJUmV0aXJlZCBTU0Ugc2NhbGFyLXNpbmdsZSBpbnN0cnVjdGlvbnMKKwkweDA0CVJldGlyZWQgU1NFMiBwYWNrZWQtZG91YmxlIGluc3RydWN0aW9ucworCTB4MDgJUmV0aXJlZCBTU0UyIHNjYWxhci1kb3VibGUgaW5zdHJ1Y3Rpb25zCisJMHgxMAlSZXRpcmVkIFNTRTIgdmVjdG9yIGludGVnZXIgaW5zdHJ1Y3Rpb25zCisJMHgxZglSZXRpcmVkIFN0cmVhbWluZyBTSU1EIGluc3RydWN0aW9ucyAocHJlY2lzZSBldmVudCkKK25hbWU6c2ltZF9jb21wX2luc3RfcmV0aXJlZCB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweGYKKwkweDAxCVJldGlyZWQgY29tcHV0YXRpb25hbCBTU0UgcGFja2VkLXNpbmdsZSBpbnN0cnVjdGlvbnMKKwkweDAyCVJldGlyZWQgY29tcHV0YXRpb25hbCBTU0Ugc2NhbGFyLXNpbmdsZSBpbnN0cnVjdGlvbnMKKwkweDA0CVJldGlyZWQgY29tcHV0YXRpb25hbCBTU0UyIHBhY2tlZC1kb3VibGUgaW5zdHJ1Y3Rpb25zCisJMHgwOAlSZXRpcmVkIGNvbXB1dGF0aW9uYWwgU1NFMiBzY2FsYXItZG91YmxlIGluc3RydWN0aW9ucworbmFtZTptZW1fbG9hZF9yZXRpcmVkIHR5cGU6ZXhjbHVzaXZlIGRlZmF1bHQ6MHgwMQorCTB4MDEJUmV0aXJlZCBsb2FkcyB0aGF0IG1pc3MgdGhlIEwxIGRhdGEgY2FjaGUgKHByZWNpc2UgZXZlbnQpCisJMHgwMglMMSBkYXRhIGNhY2hlIGxpbmUgbWlzc2VkIGJ5IHJldGlyZWQgbG9hZHMgKHByZWNpc2UgZXZlbnQpCisJMHgwNAlSZXRpcmVkIGxvYWRzIHRoYXQgbWlzcyB0aGUgTDIgY2FjaGUgKHByZWNpc2UgZXZlbnQpCisJMHgwOAlMMiBjYWNoZSBsaW5lIG1pc3NlZCBieSByZXRpcmVkIGxvYWRzIChwcmVjaXNlIGV2ZW50KQorCTB4MTAJUmV0aXJlZCBsb2FkcyB0aGF0IG1pc3MgdGhlIERUTEIgKHByZWNpc2UgZXZlbnQpCituYW1lOnJhdF9zdGFsbHMgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHhmCisJMHgwMQlST0IgcmVhZCBwb3J0CisJMHgwMglQYXJ0aWFsIHJlZ2lzdGVyCisJMHgwNAlGbGFnCisJMHgwOAlGUFUgc3RhdHVzIHdvcmQKKwkweDBmCUFsbCBSQVQKK25hbWU6c2VnX3JlZ3MgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwZgorCTB4MDEJRVMKKwkweDAyCURTCisJMHgwNAlGUworCTB4MDgJR1MKK25hbWU6cmVzb3VyY2Vfc3RhbGxzIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MGYKKwkweDAxCXdoZW4gdGhlIFJPQiBpcyBmdWxsCisJMHgwMglkdXJpbmcgd2hpY2ggdGhlIFJTIGlzIGZ1bGwKKwkweDA0CWR1cmluZyB3aGljaCB0aGUgcGlwZWxpbmUgaGFzIGV4Y2VlZGVkIHRoZSBsb2FkIG9yIHN0b3JlIGxpbWl0IG9yIGlzIHdhaXRpbmcgdG8gY29tbWl0IGFsbCBzdG9yZXMKKwkweDA4CWR1ZSB0byBGUFUgY29udHJvbCB3b3JkIHdyaXRlCisJMHgxMAlkdWUgdG8gYnJhbmNoIG1pc3ByZWRpY3Rpb24KZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2V2ZW50cy9pMzg2L2NvcmVfaTcvZXZlbnRzIGIvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL2kzODYvY29yZV9pNy9ldmVudHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWI1MzQyMgotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2V2ZW50cy9pMzg2L2NvcmVfaTcvZXZlbnRzCkBAIC0wLDAgKzEsNiBAQAorIworIyBJbnRlbCBDb3JlIGk3ICJCbG9vbWZpZWxkIiAvIFhlb24gRVAgNzV4eCBldmVudHMKKyMgcmlnaHQgbm93IHRoaXMgaXMgb25seSB0aGUgc2hhcmVkIGV2ZW50cyBpbmNsdWRlZCBmb3IgdGhlIE5laGFsZW0gY29yZSwKKyMgYnV0IGxhdGVyIHdlJ2xsIGFkZCBoZXJlIHRoZSB1bmNvcmUgZXZlbnRzIHNwZWNpZmljIHRvIHRoaXMgY2hpcAorIworaW5jbHVkZTppMzg2L25laGFsZW0KZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2V2ZW50cy9pMzg2L2NvcmVfaTcvdW5pdF9tYXNrcyBiL29wcm9maWxlLTAuOS43L2V2ZW50cy9pMzg2L2NvcmVfaTcvdW5pdF9tYXNrcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZmMzNWQzCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL2kzODYvY29yZV9pNy91bml0X21hc2tzCkBAIC0wLDAgKzEgQEAKK2luY2x1ZGU6aTM4Ni9uZWhhbGVtCmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9ldmVudHMvaTM4Ni9uZWhhbGVtL2V2ZW50cyBiL29wcm9maWxlLTAuOS43L2V2ZW50cy9pMzg2L25laGFsZW0vZXZlbnRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxYTA4YjYKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9ldmVudHMvaTM4Ni9uZWhhbGVtL2V2ZW50cwpAQCAtMCwwICsxLDEwNyBAQAorIworIyBJbnRlbCAiTmVoYWxlbSIgbWljcm9hcmNoaXRlY3R1cmUgKENvcmUgaTc7IFhlb24gNzV4eCBldGMuKSBjb3JlIGV2ZW50cworIyB0aGUgdW5jb3JlIChtZW1vcnkgY29udHJvbGxlci9RUEkpIGV2ZW50cyBhcmUgaW4gc2VwYXJhdGUgZmlsZXMgYmVjYXVzZQorIyB0aGV5IHZhcnkgYmV0d2VlbiBpbXBsZW1lbnRhdGlvbnMgKHJpZ2h0IG5vdyB0aGV5IGFyZSBub3QgaW1wbGVtZW50ZWQKKyMgaW4gb3Byb2ZpbGUpCisjCisjIE5vdGUgdGhlIG1pbmltdW0gY291bnRzIGFyZSBub3QgZGlzY292ZXJlZCBleHBlcmltZW50YWxseSBhbmQgY291bGQgYmUgbGlrZWx5CisjIGxvd2VyZWQgaW4gbWFueSBjYXNlcyB3aXRob3V0IGlsbCBlZmZlY3QuCisjCitldmVudDoweDNjIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjYwMDAgbmFtZTpDUFVfQ0xLX1VOSEFMVEVEIDogQ2xvY2sgY3ljbGVzIHdoZW4gbm90IGhhbHRlZAorZXZlbnQ6MHgzYyBjb3VudGVyczowLDEsMiwzIHVtOm9uZSBtaW5pbXVtOjYwMDAgbmFtZTpVTkhBTFRFRF9SRUZFUkVOQ0VfQ1lDTEVTIDogVW5oYWx0ZWQgcmVmZXJlbmNlIGN5Y2xlcworZXZlbnQ6MHgyZSBjb3VudGVyczowLDEsMiwzIHVtOng0MSBtaW5pbXVtOjYwMDAgbmFtZTpMTENfTUlTU0VTIDogTGFzdCBsZXZlbCBjYWNoZSBkZW1hbmQgcmVxdWVzdHMgZnJvbSB0aGlzIGNvcmUgdGhhdCBtaXNzZWQgdGhlIExMQworZXZlbnQ6MHgyZSBjb3VudGVyczowLDEsMiwzIHVtOng0ZiBtaW5pbXVtOjYwMDAgbmFtZTpMTENfUkVGUyA6IExhc3QgbGV2ZWwgY2FjaGUgZGVtYW5kIHJlcXVlc3RzIGZyb20gdGhpcyBjb3JlCitldmVudDoweGMwIGNvdW50ZXJzOjAsMSwyLDMgdW06aW5zdF9yZXRpcmVkIG1pbmltdW06NjAwMCBuYW1lOklOU1RfUkVUSVJFRCA6IG51bWJlciBvZiBpbnN0cnVjdGlvbnMgcmV0aXJlZAorZXZlbnQ6MHhjNCBjb3VudGVyczowLDEsMiwzIHVtOmJyX2luc3RfcmV0aXJlZCBtaW5pbXVtOjUwMCBuYW1lOkJSX0lOU1RfUkVUSVJFRCA6IG51bWJlciBvZiBicmFuY2ggaW5zdHJ1Y3Rpb25zIHJldGlyZWQKK2V2ZW50OjB4YzUgY291bnRlcnM6MCwxLDIsMyB1bTpicl9taXNwX3JldGlyZWQgbWluaW11bTo1MDAgbmFtZTpCUl9NSVNTX1BSRURfUkVUSVJFRCA6IG51bWJlciBvZiBtaXNwcmVkaWN0ZWQgYnJhbmNoZXMgcmV0aXJlZCAocHJlY2lzZSkKKyMKK2V2ZW50OjB4MDIgY291bnRlcnM6MCwxLDIsMyB1bTpzYl9mb3J3YXJkIG1pbmltdW06NjAwMCBuYW1lOlNCX0ZPUldBUkQgOiBDb3VudHMgdGhlIG51bWJlciBvZiBzdG9yZSBmb3J3YXJkcy4KK2V2ZW50OjB4MDMgY291bnRlcnM6MCwxLDIsMyB1bTpsb2FkX2Jsb2NrIG1pbmltdW06NjAwMCBuYW1lOkxPQURfQkxPQ0sgOiBDb3VudHMgdGhlIG51bWJlciBvZiBsb2FkcyBibG9ja2VkCitldmVudDoweDA0IGNvdW50ZXJzOjAsMSwyLDMgdW06c2JfZHJhaW4gbWluaW11bTo2MDAwIG5hbWU6U0JfRFJBSU4gOiBDb3VudHMgdGhlIGN5Y2xlcyBvZiBzdG9yZSBidWZmZXIgZHJhaW5zLgorZXZlbnQ6MHgwNSBjb3VudGVyczowLDEsMiwzIHVtOm1pc2FsaWduX21lbV9yZWYgbWluaW11bTo2MDAwIG5hbWU6TUlTQUxJR05fTUVNX1JFRiA6IENvdW50cyB0aGUgbnVtYmVyIG9mIG1pc2FsaWduZWQgbG9hZCByZWZlcmVuY2VzCitldmVudDoweDA2IGNvdW50ZXJzOjAsMSwyLDMgdW06c3RvcmVfYmxvY2tzIG1pbmltdW06NjAwMCBuYW1lOlNUT1JFX0JMT0NLUyA6IFRoaXMgZXZlbnQgY291bnRzIHRoZSBudW1iZXIgb2YgbG9hZCBvcGVyYXRpb25zIGRlbGF5ZWQgY2F1c2VkIGJ5IHByZWNlZGluZyBzdG9yZXMuCitldmVudDoweDA3IGNvdW50ZXJzOjAsMSwyLDMgdW06b25lIG1pbmltdW06NjAwMCBuYW1lOlBBUlRJQUxfQUREUkVTU19BTElBUyA6IENvdW50cyBmYWxzZSBkZXBlbmRlbmN5IGR1ZSB0byBwYXJ0aWFsIGFkZHJlc3MgYWxpYXNpbmcKK2V2ZW50OjB4MDggY291bnRlcnM6MCwxLDIsMyB1bTpkdGxiX2xvYWRfbWlzc2VzIG1pbmltdW06NjAwMCBuYW1lOkRUTEJfTE9BRF9NSVNTRVMgOiBDb3VudHMgZHRsYiBwYWdlIHdhbGtzCitldmVudDoweDA5IGNvdW50ZXJzOjAsMSwyLDMgdW06bWVtb3J5X2Rpc2FtYmlndXJhdGlvbiBtaW5pbXVtOjYwMDAgbmFtZTpNRU1PUllfRElTQU1CSUdVUkFUSU9OIDogQ291bnRzIG1lbW9yeSBkaXNhbWJpZ3VyYXRpb24gZXZlbnRzCitldmVudDoweDBCIGNvdW50ZXJzOjAsMSwyLDMgdW06bWVtX2luc3RfcmV0aXJlZCBtaW5pbXVtOjYwMDAgbmFtZTpNRU1fSU5TVF9SRVRJUkVEIDogQ291bnRzIHRoZSBudW1iZXIgb2YgaW5zdHJ1Y3Rpb25zIHdpdGggYW4gYXJjaGl0ZWN0dXJhbGx5LXZpc2libGUgbG9hZC9zdG9yZSByZXRpcmVkIG9uIHRoZSBhcmNoaXRlY3RlZCBwYXRoLgorZXZlbnQ6MHgwQyBjb3VudGVyczowLDEsMiwzIHVtOm1lbV9zdG9yZV9yZXRpcmVkIG1pbmltdW06NjAwMCBuYW1lOk1FTV9TVE9SRV9SRVRJUkVEIDogVGhlIGV2ZW50IGNvdW50cyB0aGUgbnVtYmVyIG9mIHJldGlyZWQgc3RvcmVzIHRoYXQgbWlzc2VkIHRoZSBEVExCLiBUaGUgRFRMQiBtaXNzIGlzIG5vdCBjb3VudGVkIGlmIHRoZSBzdG9yZSBvcGVyYXRpb24gY2F1c2VzIGEgZmF1bHQuIERvZXMgbm90IGNvdW50IHByZWZldGNoZXMuIENvdW50cyBib3RoIHByaW1hcnkgYW5kIHNlY29uZGFyeSBtaXNzZXMgdG8gdGhlIFRMQgorZXZlbnQ6MHgwRSBjb3VudGVyczowLDEsMiwzIHVtOnVvcHNfaXNzdWVkIG1pbmltdW06NjAwMCBuYW1lOlVPUFNfSVNTVUVEIDogQ291bnRzIHRoZSBudW1iZXIgb2YgVW9wcyBpc3N1ZWQgYnkgdGhlIFJlZ2lzdGVyIEFsbG9jYXRpb24gVGFibGUgdG8gdGhlIFJlc2VydmF0aW9uIFN0YXRpb24sIGkuZS4gdGhlIFVPUHMgaXNzdWVkIGZyb20gdGhlIGZyb250IGVuZCB0byB0aGUgYmFjayBlbmQuCitldmVudDoweDBGIGNvdW50ZXJzOjAsMSwyLDMgdW06bWVtX3VuY29yZV9yZXRpcmVkIG1pbmltdW06NjAwMCBuYW1lOk1FTV9VTkNPUkVfUkVUSVJFRCA6IENvdW50cyBudW1iZXIgb2YgbWVtb3J5IGxvYWQgaW5zdHJ1Y3Rpb25zIHJldGlyZWQgd2hlcmUgdGhlIG1lbW9yeSByZWZlcmVuY2UgaGl0IG1vZGlmaWVkIGRhdGEgaW4gYW5vdGhlciBjb3JlCitldmVudDoweDEwIGNvdW50ZXJzOjAsMSwyLDMgdW06ZnBfY29tcF9vcHNfZXhlIG1pbmltdW06NjAwMCBuYW1lOkZQX0NPTVBfT1BTX0VYRSA6IENvdW50cyB0aGUgbnVtYmVyIG9mIEZQIENvbXB1dGF0aW9uYWwgVW9wcyBFeGVjdXRlZC4KK2V2ZW50OjB4MTIgY291bnRlcnM6MCwxLDIsMyB1bTpzaW1kX2ludF8xMjggbWluaW11bTo2MDAwIG5hbWU6U0lNRF9JTlRfMTI4IDogQ291bnRzIG51bWJlciBvZiAxMjggYml0IFNJTUQgaW50ZWdlciBvcGVyYXRpb25zLgorZXZlbnQ6MHgxMyBjb3VudGVyczowLDEsMiwzIHVtOmxvYWRfZGlzcGF0Y2ggbWluaW11bTo2MDAwIG5hbWU6TE9BRF9ESVNQQVRDSCA6IENvdW50cyBudW1iZXIgb2YgbG9hZHMgZGlzcGF0Y2hlZCBmcm9tIHRoZSBSZXNlcnZhdGlvbiBTdGF0aW9uIHRoYXQgYnlwYXNzLgorZXZlbnQ6MHgxNCBjb3VudGVyczowLDEsMiwzIHVtOmFyaXRoIG1pbmltdW06NjAwMCBuYW1lOkFSSVRIIDogQ291bnRzIGRpdmlzaW9uIGN5Y2xlcyBhbmQgbnVtYmVyIG9mIG11bHRpcGxpZXMuIEluY2x1ZGVzIGludGVnZXIgYW5kIEZQLCBidXQgZXhjbHVkZXMgRFBQUy9NUFNBRC4KK2V2ZW50OjB4MTcgY291bnRlcnM6MCwxLDIsMyB1bTpvbmUgbWluaW11bTo2MDAwIG5hbWU6SU5TVF9RVUVVRV9XUklURVMgOiBDb3VudHMgdGhlIG51bWJlciBvZiBpbnN0cnVjdGlvbnMgd3JpdHRlbiBpbnRvIHRoZSBpbnN0cnVjdGlvbiBxdWV1ZSBldmVyeSBjeWNsZS4KK2V2ZW50OjB4MTggY291bnRlcnM6MCwxLDIsMyB1bTppbnN0X2RlY29kZWQgbWluaW11bTo2MDAwIG5hbWU6SU5TVF9ERUNPREVEIDogQ291bnRzIG51bWJlciBvZiBpbnN0cnVjdGlvbnMgdGhhdCByZXF1aXJlICBkZWNvZGVyIDAgdG8gYmUgZGVjb2RlZC4gVXN1YWxseSwgdGhpcyBtZWFucyB0aGF0IHRoZSBpbnN0cnVjdGlvbiBtYXBzIHRvIG1vcmUgdGhhbiAxIHVvcAorZXZlbnQ6MHgxOSBjb3VudGVyczowLDEsMiwzIHVtOm9uZSBtaW5pbXVtOjYwMDAgbmFtZTpUV09fVU9QX0lOU1RTX0RFQ09ERUQgOiBBbiBpbnN0cnVjdGlvbiB0aGF0IGdlbmVyYXRlcyB0d28gdW9wcyB3YXMgZGVjb2RlZAorZXZlbnQ6MHgxRCBjb3VudGVyczowLDEsMiwzIHVtOmh3X2ludCBtaW5pbXVtOjEwMCBuYW1lOkhXX0lOVCA6IENvdW50cyBoYXJkd2FyZSBpbnRlcnJ1cHQgZXZlbnRzLgorZXZlbnQ6MHgxRSBjb3VudGVyczowLDEsMiwzIHVtOm9uZSBtaW5pbXVtOjYwMDAgbmFtZTpJTlNUX1FVRVVFX1dSSVRFX0NZQ0xFUyA6IFRoaXMgZXZlbnQgY291bnRzIHRoZSBudW1iZXIgb2YgY3ljbGVzIGR1cmluZyB3aGljaCBpbnN0cnVjdGlvbnMgYXJlIHdyaXR0ZW4gdG8gdGhlIGluc3RydWN0aW9uIHF1ZXVlLiAgRGl2aWRpbmcgdGhpcyBjb3VudGVyIGJ5IHRoZSBudW1iZXIgb2YgaW5zdHJ1Y3Rpb25zIHdyaXR0ZW4gdG8gdGhlIGluc3RydWN0aW9uIHF1ZXVlIChJTlNUX1FVRVVFX1dSSVRFUykgeWllbGRzIHRoZSBhdmVyYWdlIG51bWJlciBvZiBpbnN0cnVjdGlvbnMgZGVjb2RlZCBlYWNoIGN5Y2xlLiBJZiB0aGlzIG51bWJlciBpcyAgbGVzcyB0aGFuIGZvdXIgYW5kIHRoZSBwaXBlIHN0YWxscywgdGhpcyBpbmRpY2F0ZXMgdGhhdCB0aGUgZGVjb2RlciBpcyBmYWlsaW5nIHRvIGRlY29kZSBlbm91Z2ggaW5zdHJ1Y3Rpb25zIHBlciBjeWNsZSB0byBzdXN0YWluIHRoZSA0LXdpZGUgcGlwZWxpbmUuCitldmVudDoweDI0IGNvdW50ZXJzOjAsMSwyLDMgdW06bDJfcnFzdHMgbWluaW11bTo1MDAgbmFtZTpMMl9SUVNUUyA6IENvdW50cyBudW1iZXIgb2YgTDIgZGF0YSBsb2FkcworZXZlbnQ6MHgyNiBjb3VudGVyczowLDEsMiwzIHVtOmwyX2RhdGFfcnFzdHMgbWluaW11bTo1MDAgbmFtZTpMMl9EQVRBX1JRU1RTIDogTW9yZSBMMiBkYXRhIGxvYWRzLgorZXZlbnQ6MHgyNyBjb3VudGVyczowLDEsMiwzIHVtOmwyX3dyaXRlIG1pbmltdW06NTAwIG5hbWU6TDJfV1JJVEUgOiBDb3VudHMgbnVtYmVyIG9mIEwyIHdyaXRlcworZXZlbnQ6MHgyOCBjb3VudGVyczowLDEsMiwzIHVtOmwxZF93Yl9sMiBtaW5pbXVtOjUwMCBuYW1lOkwxRF9XQl9MMiA6IENvdW50cyBudW1iZXIgb2YgTDEgd3JpdGViYWNrcyB0byB0aGUgTDIuCitldmVudDoweDJFIGNvdW50ZXJzOjAsMSwyLDMgdW06bG9uZ2VzdF9sYXRfY2FjaGUgbWluaW11bTo2MDAwIG5hbWU6TE9OR0VTVF9MQVRfQ0FDSEUgOiBDb3VudCBMTEMgY2FjaGUgcmVmZXJlbmNlIGxhdGVuY2llcy4KK2V2ZW50OjB4M0MgY291bnRlcnM6MCwxLDIsMyB1bTpjcHVfY2xrX3VuaGFsdGVkIG1pbmltdW06NjAwMCBuYW1lOkNQVV9DTEtfVU5IQUxURUQgOiBDb3VudHMgdGhlIG51bWJlciBvZiB0aHJlYWQgY3ljbGVzIHdoaWxlIHRoZSB0aHJlYWQgaXMgbm90IGluIGEgaGFsdCBzdGF0ZS4KK2V2ZW50OjB4M0QgY291bnRlcnM6MCwxLDIsMyB1bTpvbmUgbWluaW11bTo2MDAwIG5hbWU6VU9QU19ERUNPREVEX0RFQzAgOiBDb3VudHMgbWljcm8tb3BzIGRlY29kZWQgYnkgZGVjb2RlciAwLgorZXZlbnQ6MHg0MCBjb3VudGVyczowLDEgdW06bDFkX2NhY2hlX2xkIG1pbmltdW06NjAwMCBuYW1lOkwxRF9DQUNIRV9MRCA6IENvdW50cyBMMSBkYXRhIGNhY2hlIHJlYWQgcmVxdWVzdHMuCitldmVudDoweDQxIGNvdW50ZXJzOjAsMSB1bTpsMWRfY2FjaGVfc3QgbWluaW11bTo2MDAwIG5hbWU6TDFEX0NBQ0hFX1NUIDogQ291bnRzIEwxIGRhdGEgY2FjaGUgc3RvcmVzLgorZXZlbnQ6MHg0MiBjb3VudGVyczowLDEgdW06bDFkX2NhY2hlX2xvY2sgbWluaW11bTo2MDAwIG5hbWU6TDFEX0NBQ0hFX0xPQ0sgOiBDb3VudHMgcmV0aXJlZCBsb2FkIGxvY2tzIGluIHRoZSBMMUQgY2FjaGUuCitldmVudDoweDQzIGNvdW50ZXJzOjAsMSB1bTpsMWRfYWxsX3JlZiBtaW5pbXVtOjYwMDAgbmFtZTpMMURfQUxMX1JFRiA6IENvdW50cyBhbGwgcmVmZXJlbmNlcyB0byB0aGUgTDEgZGF0YSBjYWNoZSwKK2V2ZW50OjB4NDkgY291bnRlcnM6MCwxLDIsMyB1bTpkdGxiX21pc3NlcyBtaW5pbXVtOjYwMDAgbmFtZTpEVExCX01JU1NFUyA6IENvdW50cyB0aGUgbnVtYmVyIG9mIG1pc3NlcyBpbiB0aGUgU1RMQgorZXZlbnQ6MHg0QiBjb3VudGVyczowLDEsMiwzIHVtOnNzZV9tZW1fZXhlYyBtaW5pbXVtOjYwMDAgbmFtZTpTU0VfTUVNX0VYRUMgOiBDb3VudHMgbnVtYmVyIG9mIFNTRSBpbnN0cnVjdGlvbnMgd2hpY2ggbWlzc2VkIHRoZSBMMSBkYXRhIGNhY2hlLgorZXZlbnQ6MHg0QyBjb3VudGVyczowLDEsMiwzIHVtOm9uZSBtaW5pbXVtOjYwMDAgbmFtZTpMT0FEX0hJVF9QUkUgOiBDb3VudHMgbG9hZCBvcGVyYXRpb25zIHNlbnQgdG8gdGhlIEwxIGRhdGEgY2FjaGUgd2hpbGUgYSBwcmV2aW91cyBTU0UgcHJlZmV0Y2ggaW5zdHJ1Y3Rpb24gdG8gdGhlIHNhbWUgY2FjaGUgbGluZSBoYXMgc3RhcnRlZCBwcmVmZXRjaGluZyBidXQgaGFzIG5vdCB5ZXQgZmluaXNoZWQuCitldmVudDoweDREIGNvdW50ZXJzOjAsMSwyLDMgdW06b25lIG1pbmltdW06NjAwMCBuYW1lOlNGRU5DRV9DWUNMRVMgOiBDb3VudHMgc3RvcmUgZmVuY2UgY3ljbGVzCitldmVudDoweDRFIGNvdW50ZXJzOjAsMSwyLDMgdW06bDFkX3ByZWZldGNoIG1pbmltdW06NjAwMCBuYW1lOkwxRF9QUkVGRVRDSCA6IENvdW50cyBudW1iZXIgb2YgaGFyZHdhcmUgcHJlZmV0Y2ggcmVxdWVzdHMuCitldmVudDoweDRGIGNvdW50ZXJzOjAsMSwyLDMgdW06ZXB0IG1pbmltdW06NjAwMCBuYW1lOkVQVCA6IENvdW50cyBFeHRlbmRlZCBQYWdlIERpcmVjdG9yeSBFbnRyeSBhY2Nlc3Nlcy4gVGhlIEV4dGVuZGVkIFBhZ2UgRGlyZWN0b3J5IGNhY2hlIGlzIHVzZWQgYnkgVmlydHVhbCBNYWNoaW5lIG9wZXJhdGluZyBzeXN0ZW1zIHdoaWxlIHRoZSBndWVzdCBvcGVyYXRpbmcgc3lzdGVtcyB1c2UgdGhlIHN0YW5kYXJkIFRMQiBjYWNoZXMuCitldmVudDoweDUxIGNvdW50ZXJzOjAsMSB1bTpsMWQgbWluaW11bTo2MDAwIG5hbWU6TDFEIDogQ291bnRzIHRoZSBudW1iZXIgb2YgbGluZXMgYnJvdWdodCBmcm9tL3RvIHRoZSBMMSBkYXRhIGNhY2hlLgorZXZlbnQ6MHg1MiBjb3VudGVyczowLDEsMiwzIHVtOm9uZSBtaW5pbXVtOjYwMDAgbmFtZTpMMURfQ0FDSEVfUFJFRkVUQ0hfTE9DS19GQl9ISVQgOiBDb3VudHMgdGhlIG51bWJlciBvZiBjYWNoZWFibGUgbG9hZCBsb2NrIHNwZWN1bGF0ZWQgaW5zdHJ1Y3Rpb25zIGFjY2VwdGVkIGludG8gdGhlIGZpbGwgYnVmZmVyLgorZXZlbnQ6MHg1MyBjb3VudGVyczowLDEsMiwzIHVtOm9uZSBtaW5pbXVtOjYwMDAgbmFtZTpMMURfQ0FDSEVfTE9DS19GQl9ISVQgOiBDb3VudHMgdGhlIG51bWJlciBvZiBjYWNoZWFibGUgbG9hZCBsb2NrIHNwZWN1bGF0ZWQgb3IgcmV0aXJlZCBpbnN0cnVjdGlvbnMgYWNjZXB0ZWQgaW50byB0aGUgZmlsbCBidWZmZXIuCitldmVudDoweDYwIGNvdW50ZXJzOjAsMSwyLDMgdW06b2ZmY29yZV9yZXF1ZXN0c19vdXRzdGFuZGluZyBtaW5pbXVtOjYwMDAgbmFtZTpPRkZDT1JFX1JFUVVFU1RTX09VVFNUQU5ESU5HIDogQ291bnRzIHdlaWdodGVkIGN5Y2xlcyBvZiBvZmZjb3JlIHJlcXVlc3RzLgorZXZlbnQ6MHg2MyBjb3VudGVyczowLDEgdW06Y2FjaGVfbG9ja19jeWNsZXMgbWluaW11bTo2MDAwIG5hbWU6Q0FDSEVfTE9DS19DWUNMRVMgOiBDeWNsZSBjb3VudCBkdXJpbmcgd2hpY2ggdGhlIEwxL0wyIGNhY2hlcyBhcmUgbG9ja2VkLiAgQSBsb2NrIGlzIGFzc2VydGVkIHdoZW4gdGhlcmUgaXMgYSBsb2NrZWQgbWVtb3J5IGFjY2VzcywgZHVlIHRvIHVuY2FjaGVhYmxlIG1lbW9yeSwgYSBsb2NrZWQgb3BlcmF0aW9uIHRoYXQgc3BhbnMgdHdvIGNhY2hlIGxpbmVzLCBvciBhIHBhZ2Ugd2FsayBmcm9tIGFuIHVuY2FjaGVhYmxlIHBhZ2UgdGFibGUuCitldmVudDoweDZDIGNvdW50ZXJzOjAsMSwyLDMgdW06b25lIG1pbmltdW06NjAwMCBuYW1lOklPX1RSQU5TQUNUSU9OUyA6IENvdW50cyB0aGUgbnVtYmVyIG9mIGNvbXBsZXRlZCBJL08gdHJhbnNhY3Rpb25zLgorZXZlbnQ6MHg4MCBjb3VudGVyczowLDEsMiwzIHVtOmwxaSBtaW5pbXVtOjYwMDAgbmFtZTpMMUkgOiBDb3VudHMgTDFpIGluc3RydWN0aW9uIGNhY2hlIGFjY2Vzc2VzLgorZXZlbnQ6MHg4MSBjb3VudGVyczowLDEsMiwzIHVtOmlmdV9pdmMgbWluaW11bTo2MDAwIG5hbWU6SUZVX0lWQyA6IEluc3RydWN0aW9uIEZldGNoIHVuaXQgZXZlbnRzCitldmVudDoweDgyIGNvdW50ZXJzOjAsMSwyLDMgdW06bGFyZ2VfaXRsYiBtaW5pbXVtOjYwMDAgbmFtZTpMQVJHRV9JVExCIDogQ291bnRzIG51bWJlciBvZiBsYXJnZSBJVExCIGFjY2Vzc2VzCitldmVudDoweDgzIGNvdW50ZXJzOjAsMSwyLDMgdW06b25lIG1pbmltdW06NjAwMCBuYW1lOkwxSV9PUFBPUlRVTklTVElDX0hJVFMgOiBPcHBvcnR1bmlzdGljIGhpdHMgaW4gc3RyZWFtaW5nLgorZXZlbnQ6MHg4NSBjb3VudGVyczowLDEsMiwzIHVtOml0bGJfbWlzc2VzIG1pbmltdW06NjAwMCBuYW1lOklUTEJfTUlTU0VTIDogQ291bnRzIHRoZSBudW1iZXIgb2YgSVRMQiBtaXNzZXMgaW4gdmFyaW91cyB2YXJpYW50cworZXZlbnQ6MHg4NyBjb3VudGVyczowLDEsMiwzIHVtOmlsZF9zdGFsbCBtaW5pbXVtOjYwMDAgbmFtZTpJTERfU1RBTEwgOiBDeWNsZXMgSW5zdHJ1Y3Rpb24gTGVuZ3RoIERlY29kZXIgc3RhbGxzCitldmVudDoweDg4IGNvdW50ZXJzOjAsMSwyLDMgdW06YnJfaW5zdF9leGVjIG1pbmltdW06NjAwMCBuYW1lOkJSX0lOU1RfRVhFQyA6IENvdW50cyB0aGUgbnVtYmVyIG9mIG5lYXIgYnJhbmNoIGluc3RydWN0aW9ucyBleGVjdXRlZCwgYnV0IG5vdCBuZWNlc3NhcmlseSByZXRpcmVkLgorZXZlbnQ6MHg4OSBjb3VudGVyczowLDEsMiwzIHVtOmJyX21pc3BfZXhlYyBtaW5pbXVtOjYwMDAgbmFtZTpCUl9NSVNQX0VYRUMgOiBDb3VudHMgdGhlIG51bWJlciBvZiBtaXNwcmVkaWN0ZWQgY29uZGl0aW9uYWwgbmVhciBicmFuY2ggaW5zdHJ1Y3Rpb25zIGV4ZWN1dGVkLCBidXQgbm90IG5lY2Vzc2FyaWx5IHJldGlyZWQuCitldmVudDoweEEyIGNvdW50ZXJzOjAsMSwyLDMgdW06cmVzb3VyY2Vfc3RhbGxzIG1pbmltdW06NjAwMCBuYW1lOlJFU09VUkNFX1NUQUxMUyA6IENvdW50cyB0aGUgbnVtYmVyIG9mIEFsbG9jYXRvciByZXNvdXJjZSByZWxhdGVkIHN0YWxscy4gSW5jbHVkZXMgcmVnaXN0ZXIgcmVuYW1pbmcgYnVmZmVyIGVudHJpZXMsIG1lbW9yeSBidWZmZXIgZW50cmllcy4gSW4gYWRkaXRpb24gdG8gcmVzb3VyY2UgcmVsYXRlZCBzdGFsbHMsIHRoaXMgZXZlbnQgY291bnRzIHNvbWUgb3RoZXIgZXZlbnRzLiBJbmNsdWRlcyBzdGFsbHMgYXJpc2luZyBkdXJpbmcgYnJhbmNoIG1pc3ByZWRpY3Rpb24gcmVjb3ZlcnksIHN1Y2ggYXMgaWYgcmV0aXJlbWVudCBvZiB0aGUgbWlzcHJlZGljdGVkIGJyYW5jaCBpcyBkZWxheWVkIGFuZCBzdGFsbHMgYXJpc2luZyB3aGlsZSBzdG9yZSBidWZmZXIgaXMgZHJhaW5pbmcgZnJvbSBzeW5jaHJvbml6aW5nIG9wZXJhdGlvbnMuCitldmVudDoweEE2IGNvdW50ZXJzOjAsMSwyLDMgdW06b25lIG1pbmltdW06NjAwMCBuYW1lOk1BQ1JPX0lOU1RTIDogQ291bnRzIHRoZSBudW1iZXIgb2YgaW5zdHJ1Y3Rpb25zIGRlY29kZWQgdGhhdCBhcmUgbWFjcm8tZnVzZWQgYnV0IG5vdCBuZWNlc3NhcmlseSBleGVjdXRlZCBvciByZXRpcmVkLgorZXZlbnQ6MHhBNyBjb3VudGVyczowLDEsMiwzIHVtOm9uZSBtaW5pbXVtOjYwMDAgbmFtZTpCQUNMRUFSX0ZPUkNFX0lRIDogQ291bnRzIG51bWJlciBvZiB0aW1lcyBhIEJBQ0xFQVIgd2FzIGZvcmNlZCBieSB0aGUgSW5zdHJ1Y3Rpb24gUXVldWUuIFRoZSBJUSBpcyBhbHNvIHJlc3BvbnNpYmxlIGZvciBwcm92aWRpbmcgY29uZGl0aW9uYWwgYnJhbmNoIHByZWRpY2l0b24gZGlyZWN0aW9uIGJhc2VkIG9uIGEgc3RhdGljIHNjaGVtZSBhbmQgZHluYW1pYyBkYXRhIHByb3ZpZGVkIGJ5IHRoZSBMMiBCcmFuY2ggUHJlZGljdGlvbiBVbml0LiBJZiB0aGUgY29uZGl0aW9uYWwgYnJhbmNoIHRhcmdldCBpcyBub3QgZm91bmQgaW4gdGhlIFRhcmdldCBBcnJheSBhbmQgdGhlIElRIHByZWRpY3RzIHRoYXQgdGhlIGJyYW5jaCBpcyB0YWtlbiwgdGhlbiB0aGUgSVEgd2lsbCBmb3JjZSB0aGUgQnJhbmNoIEFkZHJlc3MgQ2FsY3VsYXRvciB0byBpc3N1ZSBhIEJBQ0xFQVIuIEVhY2ggQkFDTEVBUiBhc3NlcnRlZCBieSB0aGUgQkFDIGdlbmVyYXRlcyBhcHByb3hpbWF0ZWx5IGFuIDggY3ljbGUgYnViYmxlIGluIHRoZSBpbnN0cnVjdGlvbiBmZXRjaCBwaXBlbGluZS4KK2V2ZW50OjB4QTggY291bnRlcnM6MCwxLDIsMyB1bTpvbmUgbWluaW11bTo2MDAwIG5hbWU6TFNEIDogQ291bnRzIHRoZSBudW1iZXIgb2YgbWljcm8tb3BzIGRlbGl2ZXJlZCBieSBsb29wIHN0cmVhbSBkZXRlY3RvcgorZXZlbnQ6MHhBRSBjb3VudGVyczowLDEsMiwzIHVtOm9uZSBtaW5pbXVtOjYwMDAgbmFtZTpJVExCX0ZMVVNIIDogQ291bnRzIHRoZSBudW1iZXIgb2YgSVRMQiBmbHVzaGVzCitldmVudDoweEIwIGNvdW50ZXJzOjAsMSwyLDMgdW06b2ZmY29yZV9yZXF1ZXN0cyBtaW5pbXVtOjYwMDAgbmFtZTpPRkZDT1JFX1JFUVVFU1RTIDogQ291bnRzIG51bWJlciBvZiBvZmZjb3JlIGRhdGEgcmVxdWVzdHMuCitldmVudDoweEIxIGNvdW50ZXJzOjAsMSwyLDMgdW06dW9wc19leGVjdXRlZCBtaW5pbXVtOjYwMDAgbmFtZTpVT1BTX0VYRUNVVEVEIDogQ291bnRzIG51bWJlciBvZiBVb3BzIGV4ZWN1dGVkIHRoYXQgd2VyZSBpc3N1ZWQgb24gdmFyaW91cyBwb3J0cworZXZlbnQ6MHhCMiBjb3VudGVyczowLDEsMiwzIHVtOm9uZSBtaW5pbXVtOjYwMDAgbmFtZTpPRkZDT1JFX1JFUVVFU1RTX1NRX0ZVTEwgOiBDb3VudHMgbnVtYmVyIG9mIGN5Y2xlcyB0aGUgU1EgaXMgZnVsbCB0byBoYW5kbGUgb2ZmLWNvcmUgcmVxdWVzdHMuCitldmVudDoweEIzIGNvdW50ZXJzOjAsMSwyLDMgdW06c25vb3BxX3JlcXVlc3RzX291dHN0YW5kaW5nIG1pbmltdW06NjAwMCBuYW1lOlNOT09QUV9SRVFVRVNUU19PVVRTVEFORElORyA6IENvdW50cyB3ZWlnaHRlZCBjeWNsZXMgb2Ygc25vb3BxIHJlcXVlc3RzLgorZXZlbnQ6MHhCNyBjb3VudGVyczowLDEsMiwzIHVtOm9uZSBtaW5pbXVtOjYwMDAgbmFtZTpPT0ZfQ09SRV9SRVNQT05TRV8wIDogT2ZmLWNvcmUgUmVzcG9uc2UgUGVyZm9ybWFuY2UgTW9uaXRvcmluZyBpbiB0aGUgUHJvY2Vzc29yIENvcmUuIFJlcXVpcmVzIHNwZWNpYWwgc2V0dXAuCitldmVudDoweEI4IGNvdW50ZXJzOjAsMSwyLDMgdW06c25vb3BfcmVzcG9uc2UgbWluaW11bTo2MDAwIG5hbWU6U05PT1BfUkVTUE9OU0UgOiBDb3VudHMgSElUIHNub29wIHJlc3BvbnNlIHNlbnQgYnkgdGhpcyB0aHJlYWQgaW4gcmVzcG9uc2UgdG8gYSBzbm9vcCByZXF1ZXN0LgorZXZlbnQ6MHhCQSBjb3VudGVyczowLDEsMiwzIHVtOnBpY19hY2Nlc3NlcyBtaW5pbXVtOjYwMDAgbmFtZTpQSUNfQUNDRVNTRVMgOiBDb3VudHMgbnVtYmVyIG9mIFRQUiBhY2Nlc3NlcworZXZlbnQ6MHhDMiBjb3VudGVyczowLDEsMiwzIHVtOnVvcHNfcmV0aXJlZCBtaW5pbXVtOjYwMDAgbmFtZTpVT1BTX1JFVElSRUQgOiBDb3VudHMgdGhlIG51bWJlciBvZiBtaWNyby1vcHMgcmV0aXJlZCwgKG1hY3JvLWZ1c2VkPTEsIG1pY3JvLWZ1c2VkPTIsIG90aGVycz0xOyBtYXhpbXVtIGNvdW50IG9mIDggcGVyIGN5Y2xlKS4gTW9zdCBpbnN0cnVjdGlvbnMgYXJlIGNvbXBvc2VkIG9mIG9uZSBvciB0d28gbWljcm9vcHMuIFNvbWUgaW5zdHJ1Y3Rpb25zIGFyZSBkZWNvZGVkIGludG8gbG9uZ2VyIHNlcXVlbmNlcyBzdWNoIGFzIHJlcGVhdCBpbnN0cnVjdGlvbnMsIGZsb2F0aW5nIHBvaW50IHRyYW5zY2VuZGVudGFsIGluc3RydWN0aW9ucywgYW5kIGFzc2lzdHMKK2V2ZW50OjB4QzMgY291bnRlcnM6MCwxLDIsMyB1bTptYWNoaW5lX2NsZWFycyBtaW5pbXVtOjYwMDAgbmFtZTpNQUNISU5FX0NMRUFSUyA6IENvdW50cyB0aGUgY3ljbGVzIG1hY2hpbmUgY2xlYXIgaXMgYXNzZXJ0ZWQuCitldmVudDoweEM3IGNvdW50ZXJzOjAsMSwyLDMgdW06c3NleF91b3BzX3JldGlyZWQgbWluaW11bTo2MDAwIG5hbWU6U1NFWF9VT1BTX1JFVElSRUQgOiBDb3VudHMgU0lNRCBwYWNrZWQgc2luZ2xlLXByZWNpc2lvbiBmbG9hdGluZyBwb2ludCBVb3BzIHJldGlyZWQuCitldmVudDoweEM4IGNvdW50ZXJzOjAsMSwyLDMgdW06eDIwIG1pbmltdW06NjAwMCBuYW1lOklUTEJfTUlTU19SRVRJUkVEIDogQ291bnRzIHRoZSBudW1iZXIgb2YgcmV0aXJlZCBpbnN0cnVjdGlvbnMgdGhhdCBtaXNzZWQgdGhlIElUTEIgd2hlbiB0aGUgaW5zdHJ1Y3Rpb24gd2FzIGZldGNoZWQuCitldmVudDoweENCIGNvdW50ZXJzOjAsMSwyLDMgdW06bWVtX2xvYWRfcmV0aXJlZCBtaW5pbXVtOjYwMDAgbmFtZTpNRU1fTE9BRF9SRVRJUkVEIDogQ291bnRzIG51bWJlciBvZiByZXRpcmVkIGxvYWRzLgorZXZlbnQ6MHhDQyBjb3VudGVyczowLDEsMiwzIHVtOmZwX21teF90cmFucyBtaW5pbXVtOjYwMDAgbmFtZTpGUF9NTVhfVFJBTlMgOiBDb3VudHMgdHJhbnNpdGlvbnMgYmV0d2VlbiBNTVggYW5kIHg4NyBzdGF0ZS4KK2V2ZW50OjB4RDAgY291bnRlcnM6MCwxLDIsMyB1bTptYWNyb19pbnN0cyBtaW5pbXVtOjYwMDAgbmFtZTpNQUNST19JTlNUUyA6IENvdW50cyB0aGUgbnVtYmVyIG9mIGluc3RydWN0aW9ucyBkZWNvZGVkLCAoYnV0IG5vdCBuZWNlc3NhcmlseSBleGVjdXRlZCBvciByZXRpcmVkKS4KK2V2ZW50OjB4RDEgY291bnRlcnM6MCwxLDIsMyB1bTp1b3BzX2RlY29kZWQgbWluaW11bTo2MDAwIG5hbWU6VU9QU19ERUNPREVEIDogQ291bnRzIHRoZSBudW1iZXIgb2YgVW9wcyBkZWNvZGVkIGJ5IHZhcmlvdXMgc3Vic3lzdGVtcy4KK2V2ZW50OjB4RDIgY291bnRlcnM6MCwxLDIsMyB1bTpyYXRfc3RhbGxzIG1pbmltdW06NjAwMCBuYW1lOlJBVF9TVEFMTFMgOiBDb3VudHMgdGhlIG51bWJlciBvZiBjeWNsZXMgZHVyaW5nIHdoaWNoIGV4ZWN1dGlvbiBzdGFsbGVkIGR1ZSB0byBzZXZlcmFsIHJlYXNvbgorZXZlbnQ6MHhENCBjb3VudGVyczowLDEsMiwzIHVtOm9uZSBtaW5pbXVtOjYwMDAgbmFtZTpTRUdfUkVOQU1FX1NUQUxMUyA6IENvdW50cyB0aGUgbnVtYmVyIG9mIHN0YWxsIGN5Y2xlcyBkdWUgdG8gdGhlIGxhY2sgb2YgcmVuYW1pbmcgcmVzb3VyY2VzIGZvciB0aGUgRVMsIERTLCBGUywgYW5kIEdTIHNlZ21lbnQgcmVnaXN0ZXJzLiBJZiBhIHNlZ21lbnQgaXMgcmVuYW1lZCBidXQgbm90IHJldGlyZWQgYW5kIGEgc2Vjb25kIHVwZGF0ZSB0byB0aGUgc2FtZSBzZWdtZW50IG9jY3VycywgYSBzdGFsbCBvY2N1cnMgaW4gdGhlIGZyb250LWVuZCBvZiB0aGUgcGlwZWxpbmUgdW50aWwgdGhlIHJlbmFtZWQgc2VnbWVudCByZXRpcmVzLgorZXZlbnQ6MHhENSBjb3VudGVyczowLDEsMiwzIHVtOm9uZSBtaW5pbXVtOjYwMDAgbmFtZTpFU19SRUdfUkVOQU1FUyA6IENvdW50cyB0aGUgbnVtYmVyIG9mIHRpbWVzIHRoZSBFUyBzZWdtZW50IHJlZ2lzdGVyIGlzIHJlbmFtZWQuCitldmVudDoweERCIGNvdW50ZXJzOjAsMSwyLDMgdW06b25lIG1pbmltdW06NjAwMCBuYW1lOlVPUF9VTkZVU0lPTiA6IENvdW50cyB1bmZ1c2lvbiBldmVudHMgZHVlIHRvIGZsb2F0aW5nIHBvaW50IGV4Y2VwdGlvbiB0byBhIGZ1c2VkIHVvcC4KK2V2ZW50OjB4RTAgY291bnRlcnM6MCwxLDIsMyB1bTpvbmUgbWluaW11bTo2MDAwIG5hbWU6QlJfSU5TVF9ERUNPREVEIDogQ291bnRzIHRoZSBudW1iZXIgb2YgYnJhbmNoIGluc3RydWN0aW9ucyBkZWNvZGVkLgorZXZlbnQ6MHhFNCBjb3VudGVyczowLDEsMiwzIHVtOm9uZSBtaW5pbXVtOjYwMDAgbmFtZTpCT0dVU19CUiA6IENvdW50cyB0aGUgbnVtYmVyIG9mIGJvZ3VzIGJyYW5jaGVzLgorZXZlbnQ6MHhFNSBjb3VudGVyczowLDEsMiwzIHVtOm9uZSBtaW5pbXVtOjYwMDAgbmFtZTpCUFVfTUlTU0VEX0NBTExfUkVUIDogQ291bnRzIG51bWJlciBvZiB0aW1lcyB0aGUgQnJhbmNoIFByZWRpY2l0b24gVW5pdCBtaXNzZWQgcHJlZGljdGluZyBhIGNhbGwgb3IgcmV0dXJuIGJyYW5jaC4KK2V2ZW50OjB4RTYgY291bnRlcnM6MCwxLDIsMyB1bTpiYWNsZWFyIG1pbmltdW06NjAwMCBuYW1lOkJBQ0xFQVIgOiBDb3VudHMgdGhlIG51bWJlciBvZiB0aW1lcyB0aGUgZnJvbnQgZW5kIGlzIHJlc3RlZXJlZCwKK2V2ZW50OjB4RTggY291bnRlcnM6MCwxLDIsMyB1bTpicHVfY2xlYXJzIG1pbmltdW06NjAwMCBuYW1lOkJQVV9DTEVBUlMgOiBDb3VudHMgQnJhbmNoIFByZWRpY3Rpb24gVW5pdCBjbGVhcnMuCitldmVudDoweEYwIGNvdW50ZXJzOjAsMSwyLDMgdW06bDJfdHJhbnNhY3Rpb25zIG1pbmltdW06NjAwMCBuYW1lOkwyX1RSQU5TQUNUSU9OUyA6IENvdW50cyBMMiB0cmFuc2FjdGlvbnMKK2V2ZW50OjB4RjEgY291bnRlcnM6MCwxLDIsMyB1bTpsMl9saW5lc19pbiBtaW5pbXVtOjYwMDAgbmFtZTpMMl9MSU5FU19JTiA6IENvdW50cyB0aGUgbnVtYmVyIG9mIGNhY2hlIGxpbmVzIGFsbG9jYXRlZCBpbiB0aGUgTDIgY2FjaGUgaW4gdmFyaW91cyBzdGF0ZXMuCitldmVudDoweEYyIGNvdW50ZXJzOjAsMSwyLDMgdW06bDJfbGluZXNfb3V0IG1pbmltdW06NjAwMCBuYW1lOkwyX0xJTkVTX09VVCA6IENvdW50cyBMMiBjYWNoZSBsaW5lcyBldmljdGVkLgorZXZlbnQ6MHhGMyBjb3VudGVyczowLDEsMiwzIHVtOmwyX2h3X3ByZWZldGNoIG1pbmltdW06NjAwMCBuYW1lOkwyX0hXX1BSRUZFVENIIDogQ291bnQgTDIgSFcgcHJlZmV0Y2hlciBldmVudHMKK2V2ZW50OjB4RjQgY291bnRlcnM6MCwxLDIsMyB1bTpzcV9taXNjIG1pbmltdW06NjAwMCBuYW1lOlNRX01JU0MgOiBDb3VudHMgZXZlbnRzIGluIHRoZSBTdXBlciBRdWV1ZSBiZWxvdyB0aGUgTDIuCitldmVudDoweEY2IGNvdW50ZXJzOjAsMSwyLDMgdW06b25lIG1pbmltdW06NjAwMCBuYW1lOlNRX0ZVTExfU1RBTExfQ1lDTEVTIDogQ291bnRzIGN5Y2xlcyB0aGUgU3VwZXIgUXVldWUgaXMgZnVsbC4gTmVpdGhlciBvZiB0aGUgdGhyZWFkcyBvbiB0aGlzIGNvcmUgd2lsbCBiZSBhYmxlIHRvIGFjY2VzcyB0aGUgdW5jb3JlLgorZXZlbnQ6MHhGNyBjb3VudGVyczowLDEsMiwzIHVtOmZwX2Fzc2lzdCBtaW5pbXVtOjYwMDAgbmFtZTpGUF9BU1NJU1QgOiBDb3VudHMgdGhlIG51bWJlciBvZiBmbG9hdGluZyBwb2ludCBvcGVyYXRpb25zIGV4ZWN1dGVkIHRoYXQgcmVxdWlyZWQgbWljcm8tY29kZSBhc3Npc3QgaW50ZXJ2ZW50aW9uLgorZXZlbnQ6MHhGOCBjb3VudGVyczowLDEsMiwzIHVtOm9uZSBtaW5pbXVtOjYwMDAgbmFtZTpTRUdNRU5UX1JFR19MT0FEUyA6IENvdW50cyBudW1iZXIgb2Ygc2VnbWVudCByZWdpc3RlciBsb2FkcworZXZlbnQ6MHhGRCBjb3VudGVyczowLDEsMiwzIHVtOnNpbWRfaW50XzY0IG1pbmltdW06NjAwMCBuYW1lOlNJTURfSU5UXzY0IDogQ291bnRzIG51bWJlciBvZiBTSUQgaW50ZWdlciA2NCBiaXQgcGFja2VkIG11bHRpcGx5IG9wZXJhdGlvbnMuCmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9ldmVudHMvaTM4Ni9uZWhhbGVtL3VuaXRfbWFza3MgYi9vcHJvZmlsZS0wLjkuNy9ldmVudHMvaTM4Ni9uZWhhbGVtL3VuaXRfbWFza3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDgwMGU1ZAotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2V2ZW50cy9pMzg2L25laGFsZW0vdW5pdF9tYXNrcwpAQCAtMCwwICsxLDM3MiBAQAorIworIyBVbml0IG1hc2tzIGZvciB0aGUgSW50ZWwgIk5laGFsZW0iIG1pY3JvIGFyY2hpdGVjdHVyZQorIyAoSW50ZWwgQ29yZSBpNyAiQmxvb21maWVsZCI7IFhlb24gNzV4eCkKKyMKK2luY2x1ZGU6aTM4Ni9hcmNoX3BlcmZtb24KK25hbWU6c2JfZm9yd2FyZCB0eXBlOm1hbmRhdG9yeSBkZWZhdWx0OjB4MDEKKwkweDAxIGFueSBDb3VudHMgdGhlIG51bWJlciBvZiBzdG9yZSBmb3J3YXJkcworbmFtZTpsb2FkX2Jsb2NrIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MDEKKwkweDAxIHN0ZCBDb3VudHMgdGhlIG51bWJlciBvZiBsb2FkcyBibG9ja2VkIGJ5IGEgcHJlY2VkaW5nIHN0b3JlIHdpdGggdW5rbm93biBkYXRhCisJMHgwNCBhZGRyZXNzX29mZnNldCBDb3VudHMgdGhlIG51bWJlciBvZiBsb2FkcyBibG9ja2VkIGJ5IGEgcHJlY2VkaW5nIHN0b3JlIGFkZHJlc3MKK25hbWU6c2JfZHJhaW4gdHlwZTptYW5kYXRvcnkgZGVmYXVsdDoweDAxCisJMHgwMSBjeWNsZXMgQ291bnRzIHRoZSBjeWNsZXMgb2Ygc3RvcmUgYnVmZmVyIGRyYWlucworbmFtZTptaXNhbGlnbl9tZW1fcmVmIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MDMKKwkweDAxIGxvYWQgQ291bnRzIHRoZSBudW1iZXIgb2YgbWlzYWxpZ25lZCBsb2FkIHJlZmVyZW5jZXMKKwkweDAyIHN0b3JlIENvdW50cyB0aGUgbnVtYmVyIG9mIG1pc2FsaWduZWQgc3RvcmUgcmVmZXJlbmNlcworCTB4MDMgYW55IENvdW50cyB0aGUgbnVtYmVyIG9mIG1pc2FsaWduZWQgbWVtb3J5IHJlZmVyZW5jZXMKK25hbWU6c3RvcmVfYmxvY2tzIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MGYKKwkweDAxIG5vdF9zdGEgVGhpcyBldmVudCBjb3VudHMgdGhlIG51bWJlciBvZiBsb2FkIG9wZXJhdGlvbnMgZGVsYXllZCBjYXVzZWQgYnkgcHJlY2VkaW5nIHN0b3JlcyB3aG9zZSBhZGRyZXNzZXMgYXJlIGtub3duIGJ1dCB3aG9zZSBkYXRhIGlzIHVua25vd24sIGFuZCBwcmVjZWRpbmcgc3RvcmVzIHRoYXQgY29uZmxpY3Qgd2l0aCB0aGUgbG9hZCBidXQgd2hpY2ggaW5jb21wbGV0ZWx5IG92ZXJsYXAgdGhlIGxvYWQKKwkweDAyIHN0YSBUaGlzIGV2ZW50IGNvdW50cyBsb2FkIG9wZXJhdGlvbnMgZGVsYXllZCBjYXVzZWQgYnkgcHJlY2VkaW5nIHN0b3JlcyB3aG9zZSBhZGRyZXNzZXMgYXJlIHVua25vd24gKFNUQSBibG9jaykKKwkweDA0IGF0X3JldCBDb3VudHMgbnVtYmVyIG9mIGxvYWRzIGRlbGF5ZWQgd2l0aCBhdC1SZXRpcmVtZW50IGJsb2NrIGNvZGUKKwkweDA4IGwxZF9ibG9jayBDYWNoZWFibGUgIGxvYWRzIGRlbGF5ZWQgd2l0aCBMMUQgYmxvY2sgY29kZQorCTB4MEYgYW55IEFsbCBsb2FkcyBkZWxheWVkIGR1ZSB0byBzdG9yZSBibG9ja3MKK25hbWU6ZHRsYl9sb2FkX21pc3NlcyB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDAxCisJMHgwMSBhbnkgQ291bnRzIGFsbCBsb2FkIG1pc3NlcyB0aGF0IGNhdXNlIGEgcGFnZSB3YWxrCisJMHgwMiB3YWxrX2NvbXBsZXRlZCBDb3VudHMgbnVtYmVyIG9mIGNvbXBsZXRlZCBwYWdlIHdhbGtzIGR1ZSB0byBsb2FkIG1pc3MgaW4gdGhlIFNUTEIKKwkweDEwIHN0bGJfaGl0IE51bWJlciBvZiBjYWNoZSBsb2FkIFNUTEIgaGl0cworCTB4MjAgcGRlX21pc3MgTnVtYmVyIG9mIERUTEIgY2FjaGUgbG9hZCBtaXNzZXMgd2hlcmUgdGhlIGxvdyBwYXJ0IG9mIHRoZSBsaW5lYXIgdG8gcGh5c2ljYWwgYWRkcmVzcyB0cmFuc2xhdGlvbiB3YXMgbWlzc2VkCisJMHg0MCBwZHBfbWlzcyBOdW1iZXIgb2YgRFRMQiBjYWNoZSBsb2FkIG1pc3NlcyB3aGVyZSB0aGUgaGlnaCBwYXJ0IG9mIHRoZSBsaW5lYXIgdG8gcGh5c2ljYWwgYWRkcmVzcyB0cmFuc2xhdGlvbiB3YXMgbWlzc2VkCisJMHg4MCBsYXJnZV93YWxrX2NvbXBsZXRlZCBDb3VudHMgbnVtYmVyIG9mIGNvbXBsZXRlZCBsYXJnZSBwYWdlIHdhbGtzIGR1ZSB0byBsb2FkIG1pc3MgaW4gdGhlIFNUTEIKK25hbWU6bWVtb3J5X2Rpc2FtYmlndXJhdGlvbiB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDAxCisJMHgwMSByZXNldCBDb3VudHMgbWVtb3J5IGRpc2FtYmlndXJhdGlvbiByZXNldCBjeWNsZXMKKwkweDAyIHN1Y2Nlc3MgQ291bnRzIHRoZSBudW1iZXIgb2YgbG9hZHMgdGhhdCBtZW1vcnkgZGlzYW1iaWd1cmF0aW9uIHN1Y2NlZWRlZAorCTB4MDQgd2F0Y2hkb2cgQ291bnRzIHRoZSBudW1iZXIgb2YgdGltZXMgdGhlIG1lbW9yeSBkaXNhbWJpZ3VyYXRpb24gd2F0Y2hkb2cga2lja2VkIGluCisJMHgwOCB3YXRjaF9jeWNsZXMgQ291bnRzIHRoZSBjeWNsZXMgdGhhdCB0aGUgbWVtb3J5IGRpc2FtYmlndXJhdGlvbiB3YXRjaGRvZyBpcyBhY3RpdmUKK25hbWU6bWVtX2luc3RfcmV0aXJlZCB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDAxCisJMHgwMSBsb2FkcyBDb3VudHMgdGhlIG51bWJlciBvZiBpbnN0cnVjdGlvbnMgd2l0aCBhbiBhcmNoaXRlY3R1cmFsbHktdmlzaWJsZSBzdG9yZSByZXRpcmVkIG9uIHRoZSBhcmNoaXRlY3RlZCBwYXRoCisJMHgwMiBzdG9yZXMgQ291bnRzIHRoZSBudW1iZXIgb2YgaW5zdHJ1Y3Rpb25zIHdpdGggYW4gYXJjaGl0ZWN0dXJhbGx5LXZpc2libGUgc3RvcmUgcmV0aXJlZCBvbiB0aGUgYXJjaGl0ZWN0ZWQgcGF0aAorbmFtZTptZW1fc3RvcmVfcmV0aXJlZCB0eXBlOm1hbmRhdG9yeSBkZWZhdWx0OjB4MDEKKwkweDAxIGR0bGJfbWlzcyBUaGUgZXZlbnQgY291bnRzIHRoZSBudW1iZXIgb2YgcmV0aXJlZCBzdG9yZXMgdGhhdCBtaXNzZWQgdGhlIERUTEIKK25hbWU6dW9wc19pc3N1ZWQgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwMQorCTB4MDEgYW55IENvdW50cyB0aGUgbnVtYmVyIG9mIFVvcHMgaXNzdWVkIGJ5IHRoZSBSZWdpc3RlciBBbGxvY2F0aW9uIFRhYmxlIHRvIHRoZSBSZXNlcnZhdGlvbiBTdGF0aW9uLCBpCisJMHgwMSBzdGFsbGVkX2N5Y2xlcyBDb3VudHMgdGhlIG51bWJlciBvZiBjeWNsZXMgbm8gVW9wcyBpc3N1ZWQgYnkgdGhlIFJlZ2lzdGVyIEFsbG9jYXRpb24gVGFibGUgdG8gdGhlIFJlc2VydmF0aW9uIFN0YXRpb24sIGkKKwkweDAyIGZ1c2VkIENvdW50cyB0aGUgbnVtYmVyIG9mIGZ1c2VkIFVvcHMgdGhhdCB3ZXJlIGlzc3VlZCBmcm9tIHRoZSBSZWdpc3RlciBBbGxvY2F0aW9uIFRhYmxlIHRvIHRoZSBSZXNlcnZhdGlvbiBTdGF0aW9uCituYW1lOm1lbV91bmNvcmVfcmV0aXJlZCB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDAyCisJMHgwMiBvdGhlcl9jb3JlX2wyX2hpdG0gQ291bnRzIG51bWJlciBvZiBtZW1vcnkgbG9hZCBpbnN0cnVjdGlvbnMgcmV0aXJlZCB3aGVyZSB0aGUgbWVtb3J5IHJlZmVyZW5jZSBoaXQgbW9kaWZpZWQgZGF0YSBpbiBhIHNpYmxpbmcgY29yZSByZXNpZGluZyBvbiB0aGUgc2FtZSBzb2NrZXQKKwkweDA4IHJlbW90ZV9jYWNoZV9sb2NhbF9ob21lX2hpdCBDb3VudHMgbnVtYmVyIG9mIG1lbW9yeSBsb2FkIGluc3RydWN0aW9ucyByZXRpcmVkIHdoZXJlIHRoZSBtZW1vcnkgcmVmZXJlbmNlIG1pc3NlZCB0aGUgTDEsIEwyIGFuZCBMTEMgY2FjaGVzIGFuZCBISVQgaW4gYSByZW1vdGUgc29ja2V0J3MgY2FjaGUKKwkweDEwIHJlbW90ZV9kcmFtIENvdW50cyBudW1iZXIgb2YgbWVtb3J5IGxvYWQgaW5zdHJ1Y3Rpb25zIHJldGlyZWQgd2hlcmUgdGhlIG1lbW9yeSByZWZlcmVuY2UgbWlzc2VkIHRoZSBMMSwgTDIgYW5kIExMQyBjYWNoZXMgYW5kIHdhcyByZW1vdGVseSBob21lZAorCTB4MjAgbG9jYWxfZHJhbSBDb3VudHMgbnVtYmVyIG9mIG1lbW9yeSBsb2FkIGluc3RydWN0aW9ucyByZXRpcmVkIHdoZXJlIHRoZSBtZW1vcnkgcmVmZXJlbmNlIG1pc3NlZCB0aGUgTDEsIEwyIGFuZCBMTEMgY2FjaGVzIGFuZCByZXF1aXJlZCBhIGxvY2FsIHNvY2tldCBtZW1vcnkgcmVmZXJlbmNlCituYW1lOmZwX2NvbXBfb3BzX2V4ZSB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDAxCisJMHgwMSB4ODcgQ291bnRzIHRoZSBudW1iZXIgb2YgRlAgQ29tcHV0YXRpb25hbCBVb3BzIEV4ZWN1dGVkCisJMHgwMiBtbXggQ291bnRzIG51bWJlciBvZiBNTVggVW9wcyBleGVjdXRlZAorCTB4MDQgc3NlX2ZwIENvdW50cyBudW1iZXIgb2YgU1NFIGFuZCBTU0UyIEZQIHVvcHMgZXhlY3V0ZWQKKwkweDA4IHNzZTJfaW50ZWdlciBDb3VudHMgbnVtYmVyIG9mIFNTRTIgaW50ZWdlciB1b3BzIGV4ZWN1dGVkCisJMHgxMCBzc2VfZnBfcGFja2VkIENvdW50cyBudW1iZXIgb2YgU1NFIEZQIHBhY2tlZCB1b3BzIGV4ZWN1dGVkCisJMHgyMCBzc2VfZnBfc2NhbGFyIENvdW50cyBudW1iZXIgb2YgU1NFIEZQIHNjYWxhciB1b3BzIGV4ZWN1dGVkCisJMHg0MCBzc2Vfc2luZ2xlX3ByZWNpc2lvbiBDb3VudHMgbnVtYmVyIG9mIFNTRSogRlAgc2luZ2xlIHByZWNpc2lvbiB1b3BzIGV4ZWN1dGVkCisJMHg4MCBzc2VfZG91YmxlX3ByZWNpc2lvbiBDb3VudHMgbnVtYmVyIG9mIFNTRSogRlAgZG91YmxlIHByZWNpc2lvbiB1b3BzIGV4ZWN1dGVkCituYW1lOnNpbWRfaW50XzEyOCB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDAxCisJMHgwMSBwYWNrZWRfbXB5IENvdW50cyBudW1iZXIgb2YgMTI4IGJpdCBTSU1EIGludGVnZXIgbXVsdGlwbHkgb3BlcmF0aW9ucworCTB4MDIgcGFja2VkX3NoaWZ0IENvdW50cyBudW1iZXIgb2YgMTI4IGJpdCBTSU1EIGludGVnZXIgc2hpZnQgb3BlcmF0aW9ucworCTB4MDQgcGFjayBDb3VudHMgbnVtYmVyIG9mIDEyOCBiaXQgU0lNRCBpbnRlZ2VyIHBhY2sgb3BlcmF0aW9ucworCTB4MDggdW5wYWNrIENvdW50cyBudW1iZXIgb2YgMTI4IGJpdCBTSU1EIGludGVnZXIgdW5wYWNrIG9wZXJhdGlvbnMKKwkweDEwIHBhY2tlZF9sb2dpY2FsIENvdW50cyBudW1iZXIgb2YgMTI4IGJpdCBTSU1EIGludGVnZXIgbG9naWNhbCAgb3BlcmF0aW9ucworCTB4MjAgcGFja2VkX2FyaXRoIENvdW50cyBudW1iZXIgb2YgMTI4IGJpdCBTSU1EIGludGVnZXIgYXJpdGhtZXRpYyBvcGVyYXRpb25zCisJMHg0MCBzaHVmZmxlX21vdmUgQ291bnRzIG51bWJlciBvZiAxMjggYml0IFNJTUQgaW50ZWdlciBzaHVmZmxlIGFuZCBtb3ZlIG9wZXJhdGlvbnMKK25hbWU6bG9hZF9kaXNwYXRjaCB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDA3CisJMHgwMSBycyBDb3VudHMgbnVtYmVyIG9mIGxvYWRzIGRpc3BhdGNoZWQgZnJvbSB0aGUgUmVzZXJ2YXRpb24gU3RhdGlvbiB0aGF0IGJ5cGFzcyB0aGUgTWVtb3J5IE9yZGVyIEJ1ZmZlcgorCTB4MDIgcnNfZGVsYXllZCBDb3VudHMgdGhlIG51bWJlciBvZiBkZWxheWVkIFJTIGRpc3BhdGNoZXMgYXQgdGhlIHN0YWdlIGxhdGNoCisJMHgwNCBtb2IgQ291bnRzIHRoZSBudW1iZXIgb2YgbG9hZHMgZGlzcGF0Y2hlZCBmcm9tIHRoZSBSZXNlcnZhdGlvbiBTdGF0aW9uIHRvIHRoZSBNZW1vcnkgT3JkZXIgQnVmZmVyCisJMHgwNyBhbnkgQ291bnRzIGFsbCBsb2FkcyBkaXNwYXRjaGVkIGZyb20gdGhlIFJlc2VydmF0aW9uIFN0YXRpb24KK25hbWU6YXJpdGggdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwMQorCTB4MDEgY3ljbGVzX2Rpdl9idXN5IENvdW50cyB0aGUgbnVtYmVyIG9mIGN5Y2xlcyB0aGUgZGl2aWRlciBpcyBidXN5IGV4ZWN1dGluZyBkaXZpZGUgb3Igc3F1YXJlIHJvb3Qgb3BlcmF0aW9ucworCTB4MDIgbXVsIENvdW50cyB0aGUgbnVtYmVyIG9mIG11bHRpcGx5IG9wZXJhdGlvbnMgZXhlY3V0ZWQKK25hbWU6aW5zdF9kZWNvZGVkIHR5cGU6bWFuZGF0b3J5IGRlZmF1bHQ6MHgwMQorCTB4MDEgZGVjMCBDb3VudHMgbnVtYmVyIG9mIGluc3RydWN0aW9ucyB0aGF0IHJlcXVpcmUgIGRlY29kZXIgMCB0byBiZSBkZWNvZGVkCituYW1lOmh3X2ludCB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDAxCisJMHgwMSByY3YgTnVtYmVyIG9mIGludGVycnVwdCByZWNlaXZlZAorCTB4MDIgY3ljbGVzX21hc2tlZCBOdW1iZXIgb2YgY3ljbGVzIGludGVycnVwdCBhcmUgbWFza2VkCisJMHgwNCBjeWNsZXNfcGVuZGluZ19hbmRfbWFza2VkIE51bWJlciBvZiBjeWNsZXMgaW50ZXJydXB0cyBhcmUgcGVuZGluZyBhbmQgbWFza2VkCituYW1lOmwyX3Jxc3RzIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MDEKKwkweDAxIGxkX2hpdCBDb3VudHMgbnVtYmVyIG9mIGxvYWRzIHRoYXQgaGl0IHRoZSBMMiBjYWNoZQorCTB4MDIgbGRfbWlzcyBDb3VudHMgdGhlIG51bWJlciBvZiBsb2FkcyB0aGF0IG1pc3MgdGhlIEwyIGNhY2hlCisJMHgwMyBsb2FkcyBDb3VudHMgYWxsIEwyIGxvYWQgcmVxdWVzdHMKKwkweDA0IHJmb19oaXQgQ291bnRzIHRoZSBudW1iZXIgb2Ygc3RvcmUgUkZPIHJlcXVlc3RzIHRoYXQgaGl0IHRoZSBMMiBjYWNoZQorCTB4MDggcmZvX21pc3MgQ291bnRzIHRoZSBudW1iZXIgb2Ygc3RvcmUgUkZPIHJlcXVlc3RzIHRoYXQgbWlzcyB0aGUgTDIgY2FjaGUKKwkweDBDIHJmb3MgQ291bnRzIGFsbCBMMiBzdG9yZSBSRk8gcmVxdWVzdHMKKwkweDEwIGlmZXRjaF9oaXQgQ291bnRzIG51bWJlciBvZiBpbnN0cnVjdGlvbiBmZXRjaGVzIHRoYXQgaGl0IHRoZSBMMiBjYWNoZQorCTB4MjAgaWZldGNoX21pc3MgQ291bnRzIG51bWJlciBvZiBpbnN0cnVjdGlvbiBmZXRjaGVzIHRoYXQgbWlzcyB0aGUgTDIgY2FjaGUKKwkweDMwIGlmZXRjaGVzIENvdW50cyBhbGwgaW5zdHJ1Y3Rpb24gZmV0Y2hlcworCTB4NDAgcHJlZmV0Y2hfaGl0IENvdW50cyBMMiBwcmVmZXRjaCBoaXRzIGZvciBib3RoIGNvZGUgYW5kIGRhdGEKKwkweDgwIHByZWZldGNoX21pc3MgQ291bnRzIEwyIHByZWZldGNoIG1pc3NlcyBmb3IgYm90aCBjb2RlIGFuZCBkYXRhCisJMHhDMCBwcmVmZXRjaGVzIENvdW50cyBhbGwgTDIgcHJlZmV0Y2hlcyBmb3IgYm90aCBjb2RlIGFuZCBkYXRhCisJMHhBQSBtaXNzIENvdW50cyBhbGwgTDIgbWlzc2VzIGZvciBib3RoIGNvZGUgYW5kIGRhdGEKKwkweEZGIHJlZmVyZW5jZXMgQ291bnRzIGFsbCBMMiByZXF1ZXN0cyBmb3IgYm90aCBjb2RlIGFuZCBkYXRhCituYW1lOmwyX2RhdGFfcnFzdHMgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHhmZgorCTB4MDEgaV9zdGF0ZSBDb3VudHMgbnVtYmVyIG9mIEwyIGRhdGEgZGVtYW5kIGxvYWRzIHdoZXJlIHRoZSBjYWNoZSBsaW5lIHRvIGJlIGxvYWRlZCBpcyBpbiB0aGUgSSAoaW52YWxpZCkgc3RhdGUsIGkKKwkweDAyIHNfc3RhdGUgQ291bnRzIG51bWJlciBvZiBMMiBkYXRhIGRlbWFuZCBsb2FkcyB3aGVyZSB0aGUgY2FjaGUgbGluZSB0byBiZSBsb2FkZWQgaXMgaW4gdGhlIFMgKHNoYXJlZCkgc3RhdGUKKwkweDA0IGVfc3RhdGUgQ291bnRzIG51bWJlciBvZiBMMiBkYXRhIGRlbWFuZCBsb2FkcyB3aGVyZSB0aGUgY2FjaGUgbGluZSB0byBiZSBsb2FkZWQgaXMgaW4gdGhlIEUgKGV4Y2x1c2l2ZSkgc3RhdGUKKwkweDA4IG1fc3RhdGUgQ291bnRzIG51bWJlciBvZiBMMiBkYXRhIGRlbWFuZCBsb2FkcyB3aGVyZSB0aGUgY2FjaGUgbGluZSB0byBiZSBsb2FkZWQgaXMgaW4gdGhlIE0gKG1vZGlmaWVkKSBzdGF0ZQorCTB4MEYgbWVzaSBDb3VudHMgYWxsIEwyIGRhdGEgZGVtYW5kIHJlcXVlc3RzCisJMHgxMCBpX3N0YXRlIENvdW50cyBudW1iZXIgb2YgTDIgcHJlZmV0Y2ggZGF0YSBsb2FkcyB3aGVyZSB0aGUgY2FjaGUgbGluZSB0byBiZSBsb2FkZWQgaXMgaW4gdGhlIEkgKGludmFsaWQpIHN0YXRlLCBpCisJMHgyMCBzX3N0YXRlIENvdW50cyBudW1iZXIgb2YgTDIgcHJlZmV0Y2ggZGF0YSBsb2FkcyB3aGVyZSB0aGUgY2FjaGUgbGluZSB0byBiZSBsb2FkZWQgaXMgaW4gdGhlIFMgKHNoYXJlZCkgc3RhdGUKKwkweDQwIGVfc3RhdGUgQ291bnRzIG51bWJlciBvZiBMMiBwcmVmZXRjaCBkYXRhIGxvYWRzIHdoZXJlIHRoZSBjYWNoZSBsaW5lIHRvIGJlIGxvYWRlZCBpcyBpbiB0aGUgRSAoZXhjbHVzaXZlKSBzdGF0ZQorCTB4ODAgbV9zdGF0ZSBDb3VudHMgbnVtYmVyIG9mIEwyIHByZWZldGNoIGRhdGEgbG9hZHMgd2hlcmUgdGhlIGNhY2hlIGxpbmUgdG8gYmUgbG9hZGVkIGlzIGluIHRoZSBNIChtb2RpZmllZCkgc3RhdGUKKwkweEYwIG1lc2kgQ291bnRzIGFsbCBMMiBwcmVmZXRjaCByZXF1ZXN0cworCTB4RkYgYW55IENvdW50cyBhbGwgTDIgZGF0YSByZXF1ZXN0cworbmFtZTpsMl93cml0ZSB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDAxCisJMHgwMSBpX3N0YXRlIENvdW50cyBudW1iZXIgb2YgTDIgZGVtYW5kIHN0b3JlIFJGTyByZXF1ZXN0cyB3aGVyZSB0aGUgY2FjaGUgbGluZSB0byBiZSBsb2FkZWQgaXMgaW4gdGhlIEkgKGludmFsaWQpIHN0YXRlLCBpCisJMHgwMiBzX3N0YXRlIENvdW50cyBudW1iZXIgb2YgTDIgc3RvcmUgUkZPIHJlcXVlc3RzIHdoZXJlIHRoZSBjYWNoZSBsaW5lIHRvIGJlIGxvYWRlZCBpcyBpbiB0aGUgUyAoc2hhcmVkKSBzdGF0ZQorCTB4MDQgZV9zdGF0ZSBDb3VudHMgbnVtYmVyIG9mIEwyIHN0b3JlIFJGTyByZXF1ZXN0cyB3aGVyZSB0aGUgY2FjaGUgbGluZSB0byBiZSBsb2FkZWQgaXMgaW4gdGhlIEUgKGV4Y2x1c2l2ZSkgc3RhdGUKKwkweDA4IG1fc3RhdGUgQ291bnRzIG51bWJlciBvZiBMMiBzdG9yZSBSRk8gcmVxdWVzdHMgd2hlcmUgdGhlIGNhY2hlIGxpbmUgdG8gYmUgbG9hZGVkIGlzIGluIHRoZSBNIChtb2RpZmllZCkgc3RhdGUKKwkweDBFIGhpdCBDb3VudHMgbnVtYmVyIG9mIEwyIHN0b3JlIFJGTyByZXF1ZXN0cyB3aGVyZSB0aGUgY2FjaGUgbGluZSB0byBiZSBsb2FkZWQgaXMgaW4gZWl0aGVyIHRoZSBTLCBFIG9yIE0gc3RhdGVzCisJMHgwRiBtZXNpIENvdW50cyBhbGwgTDIgc3RvcmUgUkZPIHJlcXVlc3RzCisJMHgxMCBpX3N0YXRlIENvdW50cyBudW1iZXIgb2YgTDIgZGVtYW5kIGxvY2sgUkZPIHJlcXVlc3RzIHdoZXJlIHRoZSBjYWNoZSBsaW5lIHRvIGJlIGxvYWRlZCBpcyBpbiB0aGUgSSAoaW52YWxpZCkgc3RhdGUsIGkKKwkweDIwIHNfc3RhdGUgQ291bnRzIG51bWJlciBvZiBMMiBsb2NrIFJGTyByZXF1ZXN0cyB3aGVyZSB0aGUgY2FjaGUgbGluZSB0byBiZSBsb2FkZWQgaXMgaW4gdGhlIFMgKHNoYXJlZCkgc3RhdGUKKwkweDQwIGVfc3RhdGUgQ291bnRzIG51bWJlciBvZiBMMiBkZW1hbmQgbG9jayBSRk8gcmVxdWVzdHMgd2hlcmUgdGhlIGNhY2hlIGxpbmUgdG8gYmUgbG9hZGVkIGlzIGluIHRoZSBFIChleGNsdXNpdmUpIHN0YXRlCisJMHg4MCBtX3N0YXRlIENvdW50cyBudW1iZXIgb2YgTDIgZGVtYW5kIGxvY2sgUkZPIHJlcXVlc3RzIHdoZXJlIHRoZSBjYWNoZSBsaW5lIHRvIGJlIGxvYWRlZCBpcyBpbiB0aGUgTSAobW9kaWZpZWQpIHN0YXRlCisJMHhFMCBoaXQgQ291bnRzIG51bWJlciBvZiBMMiBkZW1hbmQgbG9jayBSRk8gcmVxdWVzdHMgd2hlcmUgdGhlIGNhY2hlIGxpbmUgdG8gYmUgbG9hZGVkIGlzIGluIGVpdGhlciB0aGUgUywgRSwgb3IgTSBzdGF0ZQorCTB4RjAgbWVzaSBDb3VudHMgYWxsIEwyIGRlbWFuZCBsb2NrIFJGTyByZXF1ZXN0cworbmFtZTpsMWRfd2JfbDIgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwMQorCTB4MDEgaV9zdGF0ZSBDb3VudHMgbnVtYmVyIG9mIEwxIHdyaXRlYmFja3MgdG8gdGhlIEwyIHdoZXJlIHRoZSBjYWNoZSBsaW5lIHRvIGJlIHdyaXR0ZW4gaXMgaW4gdGhlIEkgKGludmFsaWQpIHN0YXRlLCBpCisJMHgwMiBzX3N0YXRlIENvdW50cyBudW1iZXIgb2YgTDEgd3JpdGViYWNrcyB0byB0aGUgTDIgd2hlcmUgdGhlIGNhY2hlIGxpbmUgdG8gYmUgd3JpdHRlbiBpcyBpbiB0aGUgUyBzdGF0ZQorCTB4MDQgZV9zdGF0ZSBDb3VudHMgbnVtYmVyIG9mIEwxIHdyaXRlYmFja3MgdG8gdGhlIEwyIHdoZXJlIHRoZSBjYWNoZSBsaW5lIHRvIGJlIHdyaXR0ZW4gaXMgaW4gdGhlIEUgKGV4Y2x1c2l2ZSkgc3RhdGUKKwkweDA4IG1fc3RhdGUgQ291bnRzIG51bWJlciBvZiBMMSB3cml0ZWJhY2tzIHRvIHRoZSBMMiB3aGVyZSB0aGUgY2FjaGUgbGluZSB0byBiZSB3cml0dGVuIGlzIGluIHRoZSBNIChtb2RpZmllZCkgc3RhdGUKKwkweDBGIG1lc2kgQ291bnRzIGFsbCBMMSB3cml0ZWJhY2tzIHRvIHRoZSBMMgorbmFtZTpsb25nZXN0X2xhdF9jYWNoZSB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDRGCisJMHg0RiByZWZlcmVuY2UgVGhpcyBldmVudCBjb3VudHMgcmVxdWVzdHMgb3JpZ2luYXRpbmcgZnJvbSB0aGUgY29yZSB0aGF0IHJlZmVyZW5jZSBhIGNhY2hlIGxpbmUgaW4gdGhlIGxhc3QgbGV2ZWwgY2FjaGUKKwkweDQxIG1pc3MgVGhpcyBldmVudCBjb3VudHMgZWFjaCBjYWNoZSBtaXNzIGNvbmRpdGlvbiBmb3IgcmVmZXJlbmNlcyB0byB0aGUgbGFzdCBsZXZlbCBjYWNoZQorbmFtZTpjcHVfY2xrX3VuaGFsdGVkIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MDAKKwkweDAwIHRocmVhZF9wIENvdW50cyB0aGUgbnVtYmVyIG9mIHRocmVhZCBjeWNsZXMgd2hpbGUgdGhlIHRocmVhZCBpcyBub3QgaW4gYSBoYWx0IHN0YXRlCisJMHgwMSByZWZfcCBJbmNyZW1lbnRzIGF0IHRoZSBmcmVxdWVuY3kgb2YgYSBzbG93ZXIgcmVmZXJlbmNlIGNsb2NrIHdoZW4gbm90IGhhbHRlZAorbmFtZTpsMWRfY2FjaGVfbGQgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwMQorCTB4MDEgaV9zdGF0ZSBDb3VudHMgTDEgZGF0YSBjYWNoZSByZWFkIHJlcXVlc3RzIHdoZXJlIHRoZSBjYWNoZSBsaW5lIHRvIGJlIGxvYWRlZCBpcyBpbiB0aGUgSSAoaW52YWxpZCkgc3RhdGUsIGkKKwkweDAyIHNfc3RhdGUgQ291bnRzIEwxIGRhdGEgY2FjaGUgcmVhZCByZXF1ZXN0cyB3aGVyZSB0aGUgY2FjaGUgbGluZSB0byBiZSBsb2FkZWQgaXMgaW4gdGhlIFMgKHNoYXJlZCkgc3RhdGUKKwkweDA0IGVfc3RhdGUgQ291bnRzIEwxIGRhdGEgY2FjaGUgcmVhZCByZXF1ZXN0cyB3aGVyZSB0aGUgY2FjaGUgbGluZSB0byBiZSBsb2FkZWQgaXMgaW4gdGhlIEUgKGV4Y2x1c2l2ZSkgc3RhdGUKKwkweDA4IG1fc3RhdGUgQ291bnRzIEwxIGRhdGEgY2FjaGUgcmVhZCByZXF1ZXN0cyB3aGVyZSB0aGUgY2FjaGUgbGluZSB0byBiZSBsb2FkZWQgaXMgaW4gdGhlIE0gKG1vZGlmaWVkKSBzdGF0ZQorCTB4MEYgbWVzaSBDb3VudHMgTDEgZGF0YSBjYWNoZSByZWFkIHJlcXVlc3RzCituYW1lOmwxZF9jYWNoZV9zdCB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDAxCisJMHgwMSBpX3N0YXRlIENvdW50cyBMMSBkYXRhIGNhY2hlIHN0b3JlIFJGTyByZXF1ZXN0cyB3aGVyZSB0aGUgY2FjaGUgbGluZSB0byBiZSBsb2FkZWQgaXMgaW4gdGhlIEkgc3RhdGUKKwkweDAyIHNfc3RhdGUgQ291bnRzIEwxIGRhdGEgY2FjaGUgc3RvcmUgUkZPIHJlcXVlc3RzIHdoZXJlIHRoZSBjYWNoZSBsaW5lIHRvIGJlIGxvYWRlZCBpcyBpbiB0aGUgUyAoc2hhcmVkKSBzdGF0ZQorCTB4MDQgZV9zdGF0ZSBDb3VudHMgTDEgZGF0YSBjYWNoZSBzdG9yZSBSRk8gcmVxdWVzdHMgd2hlcmUgdGhlIGNhY2hlIGxpbmUgdG8gYmUgbG9hZGVkIGlzIGluIHRoZSBFIChleGNsdXNpdmUpIHN0YXRlCisJMHgwOCBtX3N0YXRlIENvdW50cyBMMSBkYXRhIGNhY2hlIHN0b3JlIFJGTyByZXF1ZXN0cyB3aGVyZSBjYWNoZSBsaW5lIHRvIGJlIGxvYWRlZCBpcyBpbiB0aGUgTSAobW9kaWZpZWQpIHN0YXRlCisJMHgwRiBtZXNpIENvdW50cyBMMSBkYXRhIGNhY2hlIHN0b3JlIFJGTyByZXF1ZXN0cworbmFtZTpsMWRfY2FjaGVfbG9jayB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDAxCisJMHgwMSBoaXQgQ291bnRzIHJldGlyZWQgbG9hZCBsb2NrcyB0aGF0IGhpdCBpbiB0aGUgTDEgZGF0YSBjYWNoZSBvciBoaXQgaW4gYW4gYWxyZWFkeSBhbGxvY2F0ZWQgZmlsbCBidWZmZXIKKwkweDAyIHNfc3RhdGUgQ291bnRzIEwxIGRhdGEgY2FjaGUgcmV0aXJlZCBsb2FkIGxvY2tzIHRoYXQgaGl0IHRoZSB0YXJnZXQgY2FjaGUgbGluZSBpbiB0aGUgc2hhcmVkIHN0YXRlCisJMHgwNCBlX3N0YXRlIENvdW50cyBMMSBkYXRhIGNhY2hlIHJldGlyZWQgbG9hZCBsb2NrcyB0aGF0IGhpdCB0aGUgdGFyZ2V0IGNhY2hlIGxpbmUgaW4gdGhlIGV4Y2x1c2l2ZSBzdGF0ZQorCTB4MDggbV9zdGF0ZSBDb3VudHMgTDEgZGF0YSBjYWNoZSByZXRpcmVkIGxvYWQgbG9ja3MgdGhhdCBoaXQgdGhlIHRhcmdldCBjYWNoZSBsaW5lIGluIHRoZSBtb2RpZmllZCBzdGF0ZQorbmFtZTpsMWRfYWxsX3JlZiB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDAxCisJMHgwMSBhbnkgQ291bnRzIGFsbCByZWZlcmVuY2VzICh1bmNhY2hlZCwgc3BlY3VsYXRlZCBhbmQgcmV0aXJlZCkgdG8gdGhlIEwxIGRhdGEgY2FjaGUsIGluY2x1ZGluZyBhbGwgbG9hZHMgYW5kIHN0b3JlcyB3aXRoIGFueSBtZW1vcnkgdHlwZXMKKwkweDAyIGNhY2hlYWJsZSBDb3VudHMgYWxsIGRhdGEgcmVhZHMgYW5kIHdyaXRlcyAoc3BlY3VsYXRlZCBhbmQgcmV0aXJlZCkgZnJvbSBjYWNoZWFibGUgbWVtb3J5LCBpbmNsdWRpbmcgbG9ja2VkIG9wZXJhdGlvbnMKKyNuYW1lOmwxZF9wZW5kX21pc3MgdHlwZTptYW5kYXRvcnkgZGVmYXVsdDoweDAyCisjCTB4MDIgbG9hZF9idWZmZXJzX2Z1bGwgQ291bnRzIGN5Y2xlcyBvZiBMMSBkYXRhIGNhY2hlIGxvYWQgZmlsbCBidWZmZXJzIGZ1bGwKK25hbWU6ZHRsYl9taXNzZXMgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwMQorCTB4MDEgYW55IENvdW50cyB0aGUgbnVtYmVyIG9mIG1pc3NlcyBpbiB0aGUgU1RMQiB3aGljaCBjYXVzZXMgYSBwYWdlIHdhbGsKKwkweDAyIHdhbGtfY29tcGxldGVkIENvdW50cyBudW1iZXIgb2YgbWlzc2VzIGluIHRoZSBTVExCIHdoaWNoIHJlc3VsdGVkIGluIGEgY29tcGxldGVkIHBhZ2Ugd2FsaworCTB4MTAgc3RsYl9oaXQgQ291bnRzIHRoZSBudW1iZXIgb2YgRFRMQiBmaXJzdCBsZXZlbCBtaXNzZXMgdGhhdCBoaXQgaW4gdGhlIHNlY29uZCBsZXZlbCBUTEIKKwkweDIwIHBkZV9taXNzIE51bWJlciBvZiBEVExCIGNhY2hlIG1pc3NlcyB3aGVyZSB0aGUgbG93IHBhcnQgb2YgdGhlIGxpbmVhciB0byBwaHlzaWNhbCBhZGRyZXNzIHRyYW5zbGF0aW9uIHdhcyBtaXNzZWQKKwkweDQwIHBkcF9taXNzIE51bWJlciBvZiBEVExCIG1pc3NlcyB3aGVyZSB0aGUgaGlnaCBwYXJ0IG9mIHRoZSBsaW5lYXIgdG8gcGh5c2ljYWwgYWRkcmVzcyB0cmFuc2xhdGlvbiB3YXMgbWlzc2VkCisJMHg4MCBsYXJnZV93YWxrX2NvbXBsZXRlZCBDb3VudHMgbnVtYmVyIG9mIGNvbXBsZXRlZCBsYXJnZSBwYWdlIHdhbGtzIGR1ZSB0byBtaXNzZXMgaW4gdGhlIFNUTEIKK25hbWU6c3NlX21lbV9leGVjIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MDEKKwkweDAxIG50YSBDb3VudHMgbnVtYmVyIG9mIFNTRSBOVEEgcHJlZmV0Y2gvd2Vha2x5LW9yZGVyZWQgaW5zdHJ1Y3Rpb25zIHdoaWNoIG1pc3NlZCB0aGUgTDEgZGF0YSBjYWNoZQorCTB4MDggc3RyZWFtaW5nX3N0b3JlcyBDb3VudHMgbnVtYmVyIG9mIFNTRSBub250ZW1wb3JhbCBzdG9yZXMKK25hbWU6bDFkX3ByZWZldGNoIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MDEKKwkweDAxIHJlcXVlc3RzIENvdW50cyBudW1iZXIgb2YgaGFyZHdhcmUgcHJlZmV0Y2ggcmVxdWVzdHMgZGlzcGF0Y2hlZCBvdXQgb2YgdGhlIHByZWZldGNoIEZJRk8KKwkweDAyIG1pc3MgQ291bnRzIG51bWJlciBvZiBoYXJkd2FyZSBwcmVmZXRjaCByZXF1ZXN0cyB0aGF0IG1pc3MgdGhlIEwxRAorCTB4MDQgdHJpZ2dlcnMgQ291bnRzIG51bWJlciBvZiBwcmVmZXRjaCByZXF1ZXN0cyB0cmlnZ2VyZWQgYnkgdGhlIEZpbml0ZSBTdGF0ZSBNYWNoaW5lIGFuZCBwdXNoZWQgaW50byB0aGUgcHJlZmV0Y2ggRklGTworbmFtZTplcHQgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwMgorCTB4MDIgZXBkZV9taXNzIENvdW50cyBFeHRlbmRlZCBQYWdlIERpcmVjdG9yeSBFbnRyeSBtaXNzZXMKKwkweDA0IGVwZHBlX2hpdCBDb3VudHMgRXh0ZW5kZWQgUGFnZSBEaXJlY3RvcnkgUG9pbnRlciBFbnRyeSBoaXRzCisJMHgwOCBlcGRwZV9taXNzIENvdW50cyBFeHRlbmRlZCBQYWdlIERpcmVjdG9yeSBQb2ludGVyIEVudHJ5IG1pc3NlcworbmFtZTpsMWQgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwMQorCTB4MDEgcmVwbCBDb3VudHMgdGhlIG51bWJlciBvZiBsaW5lcyBicm91Z2h0IGludG8gdGhlIEwxIGRhdGEgY2FjaGUKKwkweDAyIG1fcmVwbCBDb3VudHMgdGhlIG51bWJlciBvZiBtb2RpZmllZCBsaW5lcyBicm91Z2h0IGludG8gdGhlIEwxIGRhdGEgY2FjaGUKKwkweDA0IG1fZXZpY3QgQ291bnRzIHRoZSBudW1iZXIgb2YgbW9kaWZpZWQgbGluZXMgZXZpY3RlZCBmcm9tIHRoZSBMMSBkYXRhIGNhY2hlIGR1ZSB0byByZXBsYWNlbWVudAorCTB4MDggbV9zbm9vcF9ldmljdCBDb3VudHMgdGhlIG51bWJlciBvZiBtb2RpZmllZCBsaW5lcyBldmljdGVkIGZyb20gdGhlIEwxIGRhdGEgY2FjaGUgZHVlIHRvIHNub29wIEhJVE0gaW50ZXJ2ZW50aW9uCituYW1lOm9mZmNvcmVfcmVxdWVzdHNfb3V0c3RhbmRpbmcgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwMQorCTB4MDEgcmVhZF9kYXRhIENvdW50cyB3ZWlnaHRlZCBjeWNsZXMgb2Ygb2ZmY29yZSBkZW1hbmQgZGF0YSByZWFkIHJlcXVlc3RzCisJMHgwMiByZWFkX2NvZGUgQ291bnRzIHdlaWdodGVkIGN5Y2xlcyBvZiBvZmZjb3JlIGRlbWFuZCBjb2RlIHJlYWQgcmVxdWVzdHMKKwkweDA0IHJmbyBDb3VudHMgd2VpZ2h0ZWQgY3ljbGVzIG9mIG9mZmNvcmUgZGVtYW5kIFJGTyByZXF1ZXN0cworCTB4MDggcmVhZCBDb3VudHMgd2VpZ2h0ZWQgY3ljbGVzIG9mIG9mZmNvcmUgcmVhZCByZXF1ZXN0cyBvZiBhbnkga2luZAorbmFtZTpjYWNoZV9sb2NrX2N5Y2xlcyB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDAxCisJMHgwMSBsMWRfbDIgQ3ljbGUgY291bnQgZHVyaW5nIHdoaWNoIHRoZSBMMUQgYW5kIEwyIGFyZSBsb2NrZWQKKwkweDAyIGwxZCBDb3VudHMgdGhlIG51bWJlciBvZiBjeWNsZXMgdGhhdCBjYWNoZWxpbmUgaW4gdGhlIEwxIGRhdGEgY2FjaGUgdW5pdCBpcyBsb2NrZWQKK25hbWU6bDFpIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MDEKKwkweDAxIGhpdHMgQ291bnRzIGFsbCBpbnN0cnVjdGlvbiBmZXRjaGVzIHRoYXQgaGl0IHRoZSBMMSBpbnN0cnVjdGlvbiBjYWNoZQorCTB4MDIgbWlzc2VzIENvdW50cyBhbGwgaW5zdHJ1Y3Rpb24gZmV0Y2hlcyB0aGF0IG1pc3MgdGhlIEwxSSBjYWNoZQorCTB4MDMgcmVhZHMgQ291bnRzIGFsbCBpbnN0cnVjdGlvbiBmZXRjaGVzLCBpbmNsdWRpbmcgdW5jYWNoZWFibGUgZmV0Y2hlcyB0aGF0IGJ5cGFzcyB0aGUgTDFJCisJMHgwNCBjeWNsZXNfc3RhbGxlZCBDeWNsZSBjb3VudHMgZm9yIHdoaWNoIGFuIGluc3RydWN0aW9uIGZldGNoIHN0YWxscyBkdWUgdG8gYSBMMUkgY2FjaGUgbWlzcywgSVRMQiBtaXNzIG9yIElUTEIgZmF1bHQKK25hbWU6aWZ1X2l2YyB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDAxCisJMHgwMSBmdWxsIEluc3RydWN0aW9uIEZldGNoZSB1bml0IHZpY3RpbSBjYWNoZSBmdWxsCisJMHgwMiBsMWlfZXZpY3Rpb24gTDEgSW5zdHJ1Y3Rpb24gY2FjaGUgZXZpY3Rpb25zCituYW1lOmxhcmdlX2l0bGIgdHlwZTptYW5kYXRvcnkgZGVmYXVsdDoweDAxCisJMHgwMSBoaXQgQ291bnRzIG51bWJlciBvZiBsYXJnZSBJVExCIGhpdHMKK25hbWU6aXRsYl9taXNzZXMgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwMQorCTB4MDEgYW55IENvdW50cyB0aGUgbnVtYmVyIG9mIG1pc3NlcyBpbiBhbGwgbGV2ZWxzIG9mIHRoZSBJVExCIHdoaWNoIGNhdXNlcyBhIHBhZ2Ugd2FsaworCTB4MDIgd2Fsa19jb21wbGV0ZWQgQ291bnRzIG51bWJlciBvZiBtaXNzZXMgaW4gYWxsIGxldmVscyBvZiB0aGUgSVRMQiB3aGljaCByZXN1bHRlZCBpbiBhIGNvbXBsZXRlZCBwYWdlIHdhbGsKKwkweDA0IHdhbGtfY3ljbGVzIENvdW50cyBJVExCIG1pc3MgcGFnZSB3YWxrIGN5Y2xlcworCTB4MDQgcG1oX2J1c3lfY3ljbGVzIENvdW50cyBQTUggYnVzeSBjeWNsZXMKKwkweDEwIHN0bGJfaGl0IENvdW50cyB0aGUgbnVtYmVyIG9mIElUTEIgbWlzc2VzIHRoYXQgaGl0IGluIHRoZSBzZWNvbmQgbGV2ZWwgVExCCisJMHgyMCBwZGVfbWlzcyBOdW1iZXIgb2YgSVRMQiBtaXNzZXMgd2hlcmUgdGhlIGxvdyBwYXJ0IG9mIHRoZSBsaW5lYXIgdG8gcGh5c2ljYWwgYWRkcmVzcyB0cmFuc2xhdGlvbiB3YXMgbWlzc2VkCisJMHg0MCBwZHBfbWlzcyBOdW1iZXIgb2YgSVRMQiBtaXNzZXMgd2hlcmUgdGhlIGhpZ2ggcGFydCBvZiB0aGUgbGluZWFyIHRvIHBoeXNpY2FsIGFkZHJlc3MgdHJhbnNsYXRpb24gd2FzIG1pc3NlZAorCTB4ODAgbGFyZ2Vfd2Fsa19jb21wbGV0ZWQgQ291bnRzIG51bWJlciBvZiBjb21wbGV0ZWQgbGFyZ2UgcGFnZSB3YWxrcyBkdWUgdG8gbWlzc2VzIGluIHRoZSBTVExCCituYW1lOmlsZF9zdGFsbCB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDBmCisJMHgwMSBsY3AgQ3ljbGVzIEluc3RydWN0aW9uIExlbmd0aCBEZWNvZGVyIHN0YWxscyBkdWUgdG8gbGVuZ3RoIGNoYW5naW5nIHByZWZpeGVzOiA2NiwgNjcgb3IgUkVYCisJMHgwMiBtcnUgSW5zdHJ1Y3Rpb24gTGVuZ3RoIERlY29kZXIgc3RhbGwgY3ljbGVzIGR1ZSB0byBCcmFuZCBQcmVkaWN0aW9uIFVuaXQgKFBCVSkgTW9zdCBSZWNlbnRseSBVc2VkIChNUlUpIGJ5cGFzcworCTB4MDQgaXFfZnVsbCBTdGFsbCBjeWNsZXMgZHVlIHRvIGEgZnVsbCBpbnN0cnVjdGlvbiBxdWV1ZQorCTB4MDggcmVnZW4gQ291bnRzIHRoZSBudW1iZXIgb2YgcmVnZW4gc3RhbGxzCisJMHgwRiBhbnkgQ291bnRzIGFueSBjeWNsZXMgdGhlIEluc3RydWN0aW9uIExlbmd0aCBEZWNvZGVyIGlzIHN0YWxsZWQKK25hbWU6YnJfaW5zdF9leGVjIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4N2YKKwkweDAxIGNvbmQgQ291bnRzIHRoZSBudW1iZXIgb2YgY29uZGl0aW9uYWwgbmVhciBicmFuY2ggaW5zdHJ1Y3Rpb25zIGV4ZWN1dGVkLCBidXQgbm90IG5lY2Vzc2FyaWx5IHJldGlyZWQKKwkweDAyIGRpcmVjdCBDb3VudHMgYWxsIHVuY29uZGl0aW9uYWwgbmVhciBicmFuY2ggaW5zdHJ1Y3Rpb25zIGV4Y2x1ZGluZyBjYWxscyBhbmQgaW5kaXJlY3QgYnJhbmNoZXMKKwkweDA0IGluZGlyZWN0X25vbl9jYWxsIENvdW50cyB0aGUgbnVtYmVyIG9mIGV4ZWN1dGVkIGluZGlyZWN0IG5lYXIgYnJhbmNoIGluc3RydWN0aW9ucyB0aGF0IGFyZSBub3QgY2FsbHMKKwkweDA3IG5vbl9jYWxscyBDb3VudHMgYWxsIG5vbiBjYWxsIG5lYXIgYnJhbmNoIGluc3RydWN0aW9ucyBleGVjdXRlZCwgYnV0IG5vdCBuZWNlc3NhcmlseSByZXRpcmVkCisJMHgwOCByZXR1cm5fbmVhciBDb3VudHMgaW5kaXJlY3QgbmVhciBicmFuY2hlcyB0aGF0IGhhdmUgYSByZXR1cm4gbW5lbW9uaWMKKwkweDEwIGRpcmVjdF9uZWFyX2NhbGwgQ291bnRzIHVuY29uZGl0aW9uYWwgbmVhciBjYWxsIGJyYW5jaCBpbnN0cnVjdGlvbnMsIGV4Y2x1ZGluZyBub24gY2FsbCBicmFuY2gsIGV4ZWN1dGVkCisJMHgyMCBpbmRpcmVjdF9uZWFyX2NhbGwgQ291bnRzIGluZGlyZWN0IG5lYXIgY2FsbHMsIGluY2x1ZGluZyBib3RoIHJlZ2lzdGVyIGFuZCBtZW1vcnkgaW5kaXJlY3QsIGV4ZWN1dGVkCisJMHgzMCBuZWFyX2NhbGxzIENvdW50cyBhbGwgbmVhciBjYWxsIGJyYW5jaGVzIGV4ZWN1dGVkLCAgYnV0IG5vdCBuZWNlc3NhcmlseSByZXRpcmVkCisJMHg0MCB0YWtlbiBDb3VudHMgdGFrZW4gbmVhciBicmFuY2hlcyBleGVjdXRlZCwgYnV0IG5vdCBuZWNlc3NhcmlseSByZXRpcmVkCisJMHg3RiBhbnkgQ291bnRzIGFsbCBuZWFyIGV4ZWN1dGVkIGJyYW5jaGVzIChub3QgbmVjZXNzYXJpbHkgcmV0aXJlZCkKK25hbWU6YnJfbWlzcF9leGVjIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4N2YKKwkweDAxIGNvbmQgQ291bnRzIHRoZSBudW1iZXIgb2YgbWlzcHJlZGljdGVkIGNvbmRpdGlvbmFsIG5lYXIgYnJhbmNoIGluc3RydWN0aW9ucyBleGVjdXRlZCwgYnV0IG5vdCBuZWNlc3NhcmlseSByZXRpcmVkCisJMHgwMiBkaXJlY3QgQ291bnRzIG1pc3ByZWRpY3RlZCBtYWNybyB1bmNvbmRpdGlvbmFsIG5lYXIgYnJhbmNoIGluc3RydWN0aW9ucywgZXhjbHVkaW5nIGNhbGxzIGFuZCBpbmRpcmVjdCBicmFuY2hlcyAoc2hvdWxkIGFsd2F5cyBiZSAwKQorCTB4MDQgaW5kaXJlY3Rfbm9uX2NhbGwgQ291bnRzIHRoZSBudW1iZXIgb2YgZXhlY3V0ZWQgbWlzcHJlZGljdGVkIGluZGlyZWN0IG5lYXIgYnJhbmNoIGluc3RydWN0aW9ucyB0aGF0IGFyZSBub3QgY2FsbHMKKwkweDA3IG5vbl9jYWxscyBDb3VudHMgbWlzcHJlZGljdGVkIG5vbiBjYWxsIG5lYXIgYnJhbmNoZXMgZXhlY3V0ZWQsICBidXQgbm90IG5lY2Vzc2FyaWx5IHJldGlyZWQKKwkweDA4IHJldHVybl9uZWFyIENvdW50cyBtaXNwcmVkaWN0ZWQgaW5kaXJlY3QgYnJhbmNoZXMgdGhhdCBoYXZlIGEgcmVhciByZXR1cm4gbW5lbW9uaWMKKwkweDEwIGRpcmVjdF9uZWFyX2NhbGwgQ291bnRzIG1pc3ByZWRpY3RlZCBub24taW5kaXJlY3QgbmVhciBjYWxscyBleGVjdXRlZCwgKHNob3VsZCBhbHdheXMgYmUgMCkKKwkweDIwIGluZGlyZWN0X25lYXJfY2FsbCBDb3VudHMgbWlzcHJlZGljdGVkIGluZGlyZWN0IG5lYXIgY2FsbHMgZXhldWN0ZWQsIGluY2x1ZGluZyBib3RoIHJlZ2lzdGVyIGFuZCBtZW1vcnkgaW5kaXJlY3QKKwkweDMwIG5lYXJfY2FsbHMgQ291bnRzIGFsbCBtaXNwcmVkaWN0ZWQgbmVhciBjYWxsIGJyYW5jaGVzIGV4ZWN1dGVkLCBidXQgbm90IG5lY2Vzc2FyaWx5IHJldGlyZWQKKwkweDQwIHRha2VuIENvdW50cyBleGVjdXRlZCBtaXNwcmVkaWN0ZWQgbmVhciBicmFuY2hlcyB0aGF0IGFyZSB0YWtlbiwgYnV0IG5vdCBuZWNlc3NhcmlseSByZXRpcmVkCisJMHg3RiBhbnkgQ291bnRzIHRoZSBudW1iZXIgb2YgbWlzcHJlZGljdGVkIG5lYXIgYnJhbmNoIGluc3RydWN0aW9ucyB0aGF0IHdlcmUgZXhlY3V0ZWQsIGJ1dCBub3QgbmVjZXNzYXJpbHkgcmV0aXJlZAorbmFtZTpyZXNvdXJjZV9zdGFsbHMgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwMQorCTB4MDEgYW55IENvdW50cyB0aGUgbnVtYmVyIG9mIEFsbG9jYXRvciByZXNvdXJjZSByZWxhdGVkIHN0YWxscworCTB4MDIgbG9hZCBDb3VudHMgdGhlIGN5Y2xlcyBvZiBzdGFsbCBkdWUgdG8gbGFjayBvZiBsb2FkIGJ1ZmZlciBmb3IgbG9hZCBvcGVyYXRpb24KKwkweDA0IHJzX2Z1bGwgVGhpcyBldmVudCBjb3VudHMgdGhlIG51bWJlciBvZiBjeWNsZXMgd2hlbiB0aGUgbnVtYmVyIG9mIGluc3RydWN0aW9ucyBpbiB0aGUgcGlwZWxpbmUgd2FpdGluZyBmb3IgZXhlY3V0aW9uIHJlYWNoZXMgdGhlIGxpbWl0IHRoZSBwcm9jZXNzb3IgY2FuIGhhbmRsZQorCTB4MDggc3RvcmUgVGhpcyBldmVudCBjb3VudHMgdGhlIG51bWJlciBvZiBjeWNsZXMgdGhhdCBhIHJlc291cmNlIHJlbGF0ZWQgc3RhbGwgd2lsbCBvY2N1ciBkdWUgdG8gdGhlIG51bWJlciBvZiBzdG9yZSBpbnN0cnVjdGlvbnMgcmVhY2hpbmcgdGhlIGxpbWl0IG9mIHRoZSBwaXBlbGluZSwgKGkKKwkweDEwIHJvYl9mdWxsIENvdW50cyB0aGUgY3ljbGVzIG9mIHN0YWxsIGR1ZSB0byByZW9yZGVyIGJ1ZmZlciBmdWxsCisJMHgyMCBmcGN3IENvdW50cyB0aGUgbnVtYmVyIG9mIGN5Y2xlcyB3aGlsZSBleGVjdXRpb24gd2FzIHN0YWxsZWQgZHVlIHRvIHdyaXRpbmcgdGhlIGZsb2F0aW5nLXBvaW50IHVuaXQgKEZQVSkgY29udHJvbCB3b3JkCisJMHg0MCBteGNzciBTdGFsbHMgZHVlIHRvIHRoZSBNWENTUiByZWdpc3RlciByZW5hbWUgb2NjdXJyaW5nIHRvIGNsb3NlIHRvIGEgcHJldmlvdXMgTVhDU1IgcmVuYW1lCisJMHg4MCBvdGhlciBDb3VudHMgdGhlIG51bWJlciBvZiBjeWNsZXMgd2hpbGUgZXhlY3V0aW9uIHdhcyBzdGFsbGVkIGR1ZSB0byBvdGhlciByZXNvdXJjZSBpc3N1ZXMKK25hbWU6b2ZmY29yZV9yZXF1ZXN0cyB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDgwCisJMHgwMSBkZW1hbmRfcmVhZF9kYXRhIENvdW50cyBudW1iZXIgb2Ygb2ZmY29yZSBkZW1hbmQgZGF0YSByZWFkIHJlcXVlc3RzCisJMHgwMiBkZW1hbmRfcmVhZF9jb2RlIENvdW50cyBudW1iZXIgb2Ygb2ZmY29yZSBkZW1hbmQgY29kZSByZWFkIHJlcXVlc3RzCisJMHgwNCBkZW1hbmRfcmZvIENvdW50cyBudW1iZXIgb2Ygb2ZmY29yZSBkZW1hbmQgUkZPIHJlcXVlc3RzCisJMHgwOCBhbnlfcmVhZCBDb3VudHMgbnVtYmVyIG9mIG9mZmNvcmUgcmVhZCByZXF1ZXN0cworCTB4MTAgYW55X3JmbyBDb3VudHMgbnVtYmVyIG9mIG9mZmNvcmUgUkZPIHJlcXVlc3RzCisJMHgyMCB1bmNhY2hlZF9tZW0gQ291bnRzIG51bWJlciBvZiBvZmZjb3JlIHVuY2FjaGVkIG1lbW9yeSByZXF1ZXN0cworCTB4NDAgbDFkX3dyaXRlYmFjayBDb3VudHMgbnVtYmVyIG9mIEwxRCB3cml0ZWJhY2tzIHRvIHRoZSB1bmNvcmUKKwkweDgwIGFueSBDb3VudHMgYWxsIG9mZmNvcmUgcmVxdWVzdHMKK25hbWU6dW9wc19leGVjdXRlZCB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDNmCisJMHgwMSBwb3J0MCBDb3VudHMgbnVtYmVyIG9mIFVvcHMgZXhlY3V0ZWQgdGhhdCB3ZXJlIGlzc3VlZCBvbiBwb3J0IDAKKwkweDAyIHBvcnQxIENvdW50cyBudW1iZXIgb2YgVW9wcyBleGVjdXRlZCB0aGF0IHdlcmUgaXNzdWVkIG9uIHBvcnQgMQorCTB4MDQgcG9ydDJfY29yZSBDb3VudHMgbnVtYmVyIG9mIFVvcHMgZXhlY3V0ZWQgdGhhdCB3ZXJlIGlzc3VlZCBvbiBwb3J0IDIKKwkweDA4IHBvcnQzX2NvcmUgQ291bnRzIG51bWJlciBvZiBVb3BzIGV4ZWN1dGVkIHRoYXQgd2VyZSBpc3N1ZWQgb24gcG9ydCAzCisJMHgxMCBwb3J0NF9jb3JlIENvdW50cyBudW1iZXIgb2YgVW9wcyBleGVjdXRlZCB0aGF0IHdoZXJlIGlzc3VlZCBvbiBwb3J0ICA0CisJMHgyMCBwb3J0NSBDb3VudHMgbnVtYmVyIG9mIFVvcHMgZXhlY3V0ZWQgdGhhdCB3aGVyZSBpc3N1ZWQgb24gcG9ydCA1CisJMHg0MCBwb3J0MDE1IENvdW50cyBudW1iZXIgb2YgVW9wcyBleGVjdXRlZCB0aGF0IHdoZXJlIGlzc3VlZCBvbiBwb3J0ICAwLCAxLCBvciA1CisJMHg4MCBwb3J0MjM0IENvdW50cyBudW1iZXIgb2YgVW9wcyBleGVjdXRlZCB0aGF0IHdoZXJlIGlzc3VlZCBvbiBwb3J0IDIsIDMsIG9yIDQKK25hbWU6c25vb3BxX3JlcXVlc3RzX291dHN0YW5kaW5nIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MDEKKwkweDAxIGRhdGEgQ291bnRzIHdlaWdodGVkIGN5Y2xlcyBvZiBzbm9vcHEgcmVxdWVzdHMgZm9yIGRhdGEKKwkweDAyIGludmFsaWRhdGUgQ291bnRzIHdlaWdodGVkIGN5Y2xlcyBvZiBzbm9vcHEgaW52YWxpZGF0ZSByZXF1ZXN0cworCTB4MDQgY29kZSBDb3VudHMgd2VpZ2h0ZWQgY3ljbGVzIG9mIHNub29wcSByZXF1ZXN0cyBmb3IgY29kZQorbmFtZTpzbm9vcF9yZXNwb25zZSB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDAxCisJMHgwMSBoaXQgQ291bnRzIEhJVCBzbm9vcCByZXNwb25zZSBzZW50IGJ5IHRoaXMgdGhyZWFkIGluIHJlc3BvbnNlIHRvIGEgc25vb3AgcmVxdWVzdAorCTB4MDIgaGl0ZSBDb3VudHMgSElUIEUgc25vb3AgcmVzcG9uc2Ugc2VudCBieSB0aGlzIHRocmVhZCBpbiByZXNwb25zZSB0byBhIHNub29wIHJlcXVlc3QKKwkweDA0IGhpdG0gQ291bnRzIEhJVCBNIHNub29wIHJlc3BvbnNlIHNlbnQgYnkgdGhpcyB0aHJlYWQgaW4gcmVzcG9uc2UgdG8gYSBzbm9vcCByZXF1ZXN0CituYW1lOnBpY19hY2Nlc3NlcyB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDAxCisJMHgwMSB0cHJfcmVhZHMgQ291bnRzIG51bWJlciBvZiBUUFIgcmVhZHMKKwkweDAyIHRwcl93cml0ZXMgQ291bnRzIG51bWJlciBvZiBUUFIgd3JpdGVzCituYW1lOmluc3RfcmV0aXJlZCB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDAxCisJMHgwMSBhbnlfcCBpbnN0cnVjdGlvbnMgcmV0aXJlZAorCTB4MDIgeDg3IENvdW50cyB0aGUgbnVtYmVyIG9mIGZsb2F0aW5nIHBvaW50IGNvbXB1dGF0aW9uYWwgb3BlcmF0aW9ucyByZXRpcmVkOiBmbG9hdGluZyBwb2ludCBjb21wdXRhdGlvbmFsIG9wZXJhdGlvbnMgZXhlY3V0ZWQgYnkgdGhlIGFzc2lzdCBoYW5kbGVyIGFuZCBzdWItb3BlcmF0aW9ucyBvZiBjb21wbGV4IGZsb2F0aW5nIHBvaW50IGluc3RydWN0aW9ucyBsaWtlIHRyYW5zY2VuZGVudGFsIGluc3RydWN0aW9ucworbmFtZTp1b3BzX3JldGlyZWQgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwMQorCTB4MDEgYW55IENvdW50cyB0aGUgbnVtYmVyIG9mIG1pY3JvLW9wcyByZXRpcmVkLCAobWFjcm8tZnVzZWQ9MSwgbWljcm8tZnVzZWQ9Miwgb3RoZXJzPTE7IG1heGltdW0gY291bnQgb2YgOCBwZXIgY3ljbGUpCisJMHgwMiByZXRpcmVfc2xvdHMgQ291bnRzIHRoZSBudW1iZXIgb2YgcmV0aXJlbWVudCBzbG90cyB1c2VkIGVhY2ggY3ljbGUKKwkweDA0IG1hY3JvX2Z1c2VkIENvdW50cyBudW1iZXIgb2YgbWFjcm8tZnVzZWQgdW9wcyByZXRpcmVkCituYW1lOm1hY2hpbmVfY2xlYXJzIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MDEKKwkweDAxIGN5Y2xlcyBDb3VudHMgdGhlIGN5Y2xlcyBtYWNoaW5lIGNsZWFyIGlzIGFzc2VydGVkCisJMHgwMiBtZW1fb3JkZXIgQ291bnRzIHRoZSBudW1iZXIgb2YgbWFjaGluZSBjbGVhcnMgZHVlIHRvIG1lbW9yeSBvcmRlciBjb25mbGljdHMKKwkweDA0IHNtYyBDb3VudHMgdGhlIG51bWJlciBvZiB0aW1lcyB0aGF0IGEgcHJvZ3JhbSB3cml0ZXMgdG8gYSBjb2RlIHNlY3Rpb24KKwkweDEwIGZ1c2lvbl9hc3Npc3QgQ291bnRzIHRoZSBudW1iZXIgb2YgbWFjcm8tZnVzaW9uIGFzc2lzdHMKK25hbWU6YnJfaW5zdF9yZXRpcmVkIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MDAKKwkweDAwIGFsbF9icmFuY2hlcyBTZWUgVGFibGUgQS0xCisJMHgwMSBjb25kaXRpb25hbCBDb3VudHMgdGhlIG51bWJlciBvZiBjb25kaXRpb25hbCBicmFuY2ggaW5zdHJ1Y3Rpb25zIHJldGlyZWQKKwkweDAyIG5lYXJfY2FsbCBDb3VudHMgdGhlIG51bWJlciBvZiBkaXJlY3QgJiBpbmRpcmVjdCBuZWFyIHVuY29uZGl0aW9uYWwgY2FsbHMgcmV0aXJlZAorCTB4MDQgYWxsX2JyYW5jaGVzIENvdW50cyB0aGUgbnVtYmVyIG9mIGJyYW5jaCBpbnN0cnVjdGlvbnMgcmV0aXJlZAorbmFtZTpicl9taXNwX3JldGlyZWQgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwMAorCTB4MDAgYWxsX2JyYW5jaGVzIFNlZSBUYWJsZSBBLTEKKwkweDAyIG5lYXJfY2FsbCBDb3VudHMgbWlzcHJlZGljdGVkIGRpcmVjdCAmIGluZGlyZWN0IG5lYXIgdW5jb25kaXRpb25hbCByZXRpcmVkIGNhbGxzCituYW1lOnNzZXhfdW9wc19yZXRpcmVkIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MDEKKwkweDAxIHBhY2tlZF9zaW5nbGUgQ291bnRzIFNJTUQgcGFja2VkIHNpbmdsZS1wcmVjaXNpb24gZmxvYXRpbmcgcG9pbnQgVW9wcyByZXRpcmVkCisJMHgwMiBzY2FsYXJfc2luZ2xlIENvdW50cyBTSU1EIGNhbGFyIHNpbmdsZS1wcmVjaXNpb24gZmxvYXRpbmcgcG9pbnQgVW9wcyByZXRpcmVkCisJMHgwNCBwYWNrZWRfZG91YmxlIENvdW50cyBTSU1EIHBhY2tlZCBkb3VibGUtcHJlY2lzaW9uIGZsb2F0aW5nIHBvaW50IFVvcHMgcmV0aXJlZAorCTB4MDggc2NhbGFyX2RvdWJsZSBDb3VudHMgU0lNRCBzY2FsYXIgZG91YmxlLXByZWNpc2lvbiBmbG9hdGluZyBwb2ludCBVb3BzIHJldGlyZWQKKwkweDEwIHZlY3Rvcl9pbnRlZ2VyIENvdW50cyAxMjgtYml0IFNJTUQgdmVjdG9yIGludGVnZXIgVW9wcyByZXRpcmVkCituYW1lOm1lbV9sb2FkX3JldGlyZWQgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwMQorCTB4MDEgbDFkX2hpdCBDb3VudHMgbnVtYmVyIG9mIHJldGlyZWQgbG9hZHMgdGhhdCBoaXQgdGhlIEwxIGRhdGEgY2FjaGUKKwkweDAyIGwyX2hpdCBDb3VudHMgbnVtYmVyIG9mIHJldGlyZWQgbG9hZHMgdGhhdCBoaXQgdGhlIEwyIGRhdGEgY2FjaGUKKwkweDA0IGxsY191bnNoYXJlZF9oaXQgQ291bnRzIG51bWJlciBvZiByZXRpcmVkIGxvYWRzIHRoYXQgaGl0IHRoZWlyIG93biwgdW5zaGFyZWQgbGluZXMgaW4gdGhlIExMQyBjYWNoZQorCTB4MDggb3RoZXJfY29yZV9sMl9oaXRfaGl0bSBDb3VudHMgbnVtYmVyIG9mIHJldGlyZWQgbG9hZHMgdGhhdCBoaXQgaW4gYSBzaWJsaW5nIGNvcmUncyBMMiAob24gZGllIGNvcmUpCisJMHgxMCBsbGNfbWlzcyBDb3VudHMgbnVtYmVyIG9mIHJldGlyZWQgbG9hZHMgdGhhdCBtaXNzIHRoZSBMTEMgY2FjaGUKKwkweDQwIGhpdF9sZmIgQ291bnRzIG51bWJlciBvZiByZXRpcmVkIGxvYWRzIHRoYXQgbWlzcyB0aGUgTDFEIGFuZCB0aGUgYWRkcmVzcyBpcyBsb2NhdGVkIGluIGFuIGFsbG9jYXRlZCBsaW5lIGZpbGwgYnVmZmVyIGFuZCB3aWxsIHNvb24gYmUgY29tbWl0dGVkIHRvIGNhY2hlCisJMHg4MCBkdGxiX21pc3MgQ291bnRzIHRoZSBudW1iZXIgb2YgcmV0aXJlZCBsb2FkcyB0aGF0IG1pc3NlZCB0aGUgRFRMQgorbmFtZTpmcF9tbXhfdHJhbnMgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwMworCTB4MDEgdG9fZnAgQ291bnRzIHRoZSBmaXJzdCBmbG9hdGluZy1wb2ludCBpbnN0cnVjdGlvbiBmb2xsb3dpbmcgYW55IE1NWCBpbnN0cnVjdGlvbgorCTB4MDIgdG9fbW14IENvdW50cyB0aGUgZmlyc3QgTU1YIGluc3RydWN0aW9uIGZvbGxvd2luZyBhIGZsb2F0aW5nLXBvaW50IGluc3RydWN0aW9uCisJMHgwMyBhbnkgQ291bnRzIGFsbCB0cmFuc2l0aW9ucyBmcm9tIGZsb2F0aW5nIHBvaW50IHRvIE1NWCBpbnN0cnVjdGlvbnMgYW5kIGZyb20gTU1YIGluc3RydWN0aW9ucyB0byBmbG9hdGluZyBwb2ludCBpbnN0cnVjdGlvbnMKK25hbWU6bWFjcm9faW5zdHMgdHlwZTptYW5kYXRvcnkgZGVmYXVsdDoweDAxCisJMHgwMSBkZWNvZGVkIENvdW50cyB0aGUgbnVtYmVyIG9mIGluc3RydWN0aW9ucyBkZWNvZGVkLCAoYnV0IG5vdCBuZWNlc3NhcmlseSBleGVjdXRlZCBvciByZXRpcmVkKQorbmFtZTp1b3BzX2RlY29kZWQgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwZQorCTB4MDIgbXMgQ291bnRzIHRoZSBudW1iZXIgb2YgVW9wcyBkZWNvZGVkIGJ5IHRoZSBNaWNyb2NvZGUgU2VxdWVuY2VyLCBNUworCTB4MDQgZXNwX2ZvbGRpbmcgQ291bnRzIG51bWJlciBvZiBzdGFjayBwb2ludGVyIChFU1ApIGluc3RydWN0aW9ucyBkZWNvZGVkOiBwdXNoICwgcG9wICwgY2FsbCAsIHJldCwgZXRjCisJMHgwOCBlc3Bfc3luYyBDb3VudHMgbnVtYmVyIG9mIHN0YWNrIHBvaW50ZXIgKEVTUCkgc3luYyBvcGVyYXRpb25zIHdoZXJlIGFuIEVTUCBpbnN0cnVjdGlvbiBpcyBjb3JyZWN0ZWQgIGJ5IGFkZGluZyB0aGUgRVNQIG9mZnNldCByZWdpc3RlciB0byB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgRVNQIHJlZ2lzdGVyCituYW1lOnJhdF9zdGFsbHMgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwZgorCTB4MDEgZmxhZ3MgQ291bnRzIHRoZSBudW1iZXIgb2YgY3ljbGVzIGR1cmluZyB3aGljaCBleGVjdXRpb24gc3RhbGxlZCBkdWUgdG8gc2V2ZXJhbCByZWFzb25zLCBvbmUgb2Ygd2hpY2ggaXMgYSBwYXJ0aWFsIGZsYWcgcmVnaXN0ZXIgc3RhbGwKKwkweDAyIHJlZ2lzdGVycyBUaGlzIGV2ZW50IGNvdW50cyB0aGUgbnVtYmVyIG9mIGN5Y2xlcyBpbnN0cnVjdGlvbiBleGVjdXRpb24gbGF0ZW5jeSBiZWNhbWUgbG9uZ2VyIHRoYW4gdGhlIGRlZmluZWQgbGF0ZW5jeSBiZWNhdXNlIHRoZSBpbnN0cnVjdGlvbiB1c2VkIGEgcmVnaXN0ZXIgdGhhdCB3YXMgcGFydGlhbGx5IHdyaXR0ZW4gYnkgcHJldmlvdXMgaW5zdHJ1Y3Rpb24KKwkweDA0IHJvYl9yZWFkX3BvcnQgQ291bnRzIHRoZSBudW1iZXIgb2YgY3ljbGVzIHdoZW4gUk9CIHJlYWQgcG9ydCBzdGFsbHMgb2NjdXJyZWQsIHdoaWNoIGRpZCBub3QgYWxsb3cgbmV3IG1pY3JvLW9wcyB0byBlbnRlciB0aGUgb3V0LW9mLW9yZGVyIHBpcGVsaW5lCisJMHgwOCBzY29yZWJvYXJkIENvdW50cyB0aGUgY3ljbGVzIHdoZXJlIHdlIHN0YWxsIGR1ZSB0byBtaWNyb2FyY2hpdGVjdHVyYWxseSByZXF1aXJlZCBzZXJpYWxpemF0aW9uCisJMHgwRiBhbnkgQ291bnRzIGFsbCBSZWdpc3RlciBBbGxvY2F0aW9uIFRhYmxlIHN0YWxsIGN5Y2xlcyBkdWUgdG86ICBDeWNsZXMgd2hlbiBST0IgcmVhZCBwb3J0IHN0YWxscyBvY2N1cnJlZCwgd2hpY2ggZGlkIG5vdCBhbGxvdyBuZXcgbWljcm8tb3BzIHRvIGVudGVyIHRoZSBleGVjdXRpb24gcGlwZQorbmFtZTpiYWNsZWFyIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MDEKKwkweDAxIGNsZWFyIENvdW50cyB0aGUgbnVtYmVyIG9mIHRpbWVzIHRoZSBmcm9udCBlbmQgaXMgcmVzdGVlcmVkLCBtYWlubHkgd2hlbiB0aGUgQnJhbmNoIFByZWRpY3Rpb24gVW5pdCBjYW5ub3QgcHJvdmlkZSBhIGNvcnJlY3QgcHJlZGljdGlvbiBhbmQgdGhpcyBpcyBjb3JyZWN0ZWQgYnkgdGhlIEJyYW5jaCBBZGRyZXNzIENhbGN1bGF0b3IgYXQgdGhlIGZyb250IGVuZAorCTB4MDIgYmFkX3RhcmdldCBDb3VudHMgbnVtYmVyIG9mIEJyYW5jaCBBZGRyZXNzIENhbGN1bGF0b3IgY2xlYXJzIChCQUNMRUFSKSBhc3NlcnRlZCBkdWUgdG8gY29uZGl0aW9uYWwgYnJhbmNoIGluc3RydWN0aW9ucyBpbiB3aGljaCB0aGVyZSB3YXMgYSB0YXJnZXQgaGl0IGJ1dCB0aGUgZGlyZWN0aW9uIHdhcyB3cm9uZworbmFtZTpicHVfY2xlYXJzIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MDMKKwkweDAxIGVhcmx5IENvdW50cyBlYXJseSAobm9ybWFsKSBCcmFuY2ggUHJlZGljdGlvbiBVbml0IGNsZWFyczogQlBVIHByZWRpY3RlZCBhIHRha2VuIGJyYW5jaCBhZnRlciBpbmNvcnJlY3RseSBhc3N1bWluZyB0aGF0IGl0IHdhcyBub3QgdGFrZW4KKwkweDAyIGxhdGUgQ291bnRzIGxhdGUgQnJhbmNoIFByZWRpY3Rpb24gVW5pdCBjbGVhcnMgZHVlIHRvIE1vc3QgUmVjZW50bHkgVXNlZCBjb25mbGljdHMKKwkweDAzIGFueSBDb3VudHMgYWxsIEJQVSBjbGVhcnMKK25hbWU6bDJfdHJhbnNhY3Rpb25zIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4ODAKKwkweDAxIGxvYWQgQ291bnRzIEwyIGxvYWQgb3BlcmF0aW9ucyBkdWUgdG8gSFcgcHJlZmV0Y2ggb3IgZGVtYW5kIGxvYWRzCisJMHgwMiByZm8gQ291bnRzIEwyIFJGTyBvcGVyYXRpb25zIGR1ZSB0byBIVyBwcmVmZXRjaCBvciBkZW1hbmQgUkZPcworCTB4MDQgaWZldGNoIENvdW50cyBMMiBpbnN0cnVjdGlvbiBmZXRjaCBvcGVyYXRpb25zIGR1ZSB0byBIVyBwcmVmZXRjaCBvciBkZW1hbmQgaWZldGNoCisJMHgwOCBwcmVmZXRjaCBDb3VudHMgTDIgcHJlZmV0Y2ggb3BlcmF0aW9ucworCTB4MTAgbDFkX3diIENvdW50cyBMMUQgd3JpdGViYWNrIG9wZXJhdGlvbnMgdG8gdGhlIEwyCisJMHgyMCBmaWxsIENvdW50cyBMMiBjYWNoZSBsaW5lIGZpbGwgb3BlcmF0aW9ucyBkdWUgdG8gbG9hZCwgUkZPLCBMMUQgd3JpdGViYWNrIG9yIHByZWZldGNoCisJMHg0MCB3YiBDb3VudHMgTDIgd3JpdGViYWNrIG9wZXJhdGlvbnMgdG8gdGhlIExMQworCTB4ODAgYW55IENvdW50cyBhbGwgTDIgY2FjaGUgb3BlcmF0aW9ucworbmFtZTpsMl9saW5lc19pbiB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDA3CisJMHgwMiBzX3N0YXRlIENvdW50cyB0aGUgbnVtYmVyIG9mIGNhY2hlIGxpbmVzIGFsbG9jYXRlZCBpbiB0aGUgTDIgY2FjaGUgaW4gdGhlIFMgKHNoYXJlZCkgc3RhdGUKKwkweDA0IGVfc3RhdGUgQ291bnRzIHRoZSBudW1iZXIgb2YgY2FjaGUgbGluZXMgYWxsb2NhdGVkIGluIHRoZSBMMiBjYWNoZSBpbiB0aGUgRSAoZXhjbHVzaXZlKSBzdGF0ZQorCTB4MDcgYW55IENvdW50cyB0aGUgbnVtYmVyIG9mIGNhY2hlIGxpbmVzIGFsbG9jYXRlZCBpbiB0aGUgTDIgY2FjaGUKK25hbWU6bDJfbGluZXNfb3V0IHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MGYKKwkweDAxIGRlbWFuZF9jbGVhbiBDb3VudHMgTDIgY2xlYW4gY2FjaGUgbGluZXMgZXZpY3RlZCBieSBhIGRlbWFuZCByZXF1ZXN0CisJMHgwMiBkZW1hbmRfZGlydHkgQ291bnRzIEwyIGRpcnR5IChtb2RpZmllZCkgY2FjaGUgbGluZXMgZXZpY3RlZCBieSBhIGRlbWFuZCByZXF1ZXN0CisJMHgwNCBwcmVmZXRjaF9jbGVhbiBDb3VudHMgTDIgY2xlYW4gY2FjaGUgbGluZSBldmljdGVkIGJ5IGEgcHJlZmV0Y2ggcmVxdWVzdAorCTB4MDggcHJlZmV0Y2hfZGlydHkgQ291bnRzIEwyIG1vZGlmaWVkIGNhY2hlIGxpbmUgZXZpY3RlZCBieSBhIHByZWZldGNoIHJlcXVlc3QKKwkweDBGIGFueSBDb3VudHMgYWxsIEwyIGNhY2hlIGxpbmVzIGV2aWN0ZWQgZm9yIGFueSByZWFzb24KK25hbWU6bDJfaHdfcHJlZmV0Y2ggdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwMQorCTB4MDEgaGl0IENvdW50IEwyIEhXIHByZWZldGNoZXIgZGV0ZWN0b3IgaGl0cworCTB4MDIgYWxsb2MgQ291bnQgTDIgSFcgcHJlZmV0Y2hlciBhbGxvY2F0aW9ucworCTB4MDQgZGF0YV90cmlnZ2VyIENvdW50IEwyIEhXIGRhdGEgcHJlZmV0Y2hlciB0cmlnZ2VyZWQKKwkweDA4IGNvZGVfdHJpZ2dlciBDb3VudCBMMiBIVyBjb2RlIHByZWZldGNoZXIgdHJpZ2dlcmVkCisJMHgxMCBkY2FfdHJpZ2dlciBDb3VudCBMMiBIVyBEQ0EgcHJlZmV0Y2hlciB0cmlnZ2VyZWQKKwkweDIwIGtpY2tfc3RhcnQgQ291bnQgTDIgSFcgcHJlZmV0Y2hlciBraWNrIHN0YXJ0ZWQKK25hbWU6c3FfbWlzYyB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDAxCisJMHgwMSBwcm9tb3Rpb24gQ291bnRzIHRoZSBudW1iZXIgb2YgTDIgc2Vjb25kYXJ5IG1pc3NlcyB0aGF0IGhpdCB0aGUgU3VwZXIgUXVldWUKKwkweDAyIHByb21vdGlvbl9wb3N0X2dvIENvdW50cyB0aGUgbnVtYmVyIG9mIEwyIHNlY29uZGFyeSBtaXNzZXMgZHVyaW5nIHRoZSBTdXBlciBRdWV1ZSBmaWxsaW5nIEwyCisJMHgwNCBscnVfaGludHMgQ291bnRzIG51bWJlciBvZiBTdXBlciBRdWV1ZSBMUlUgaGludHMgc2VudCB0byBMMworCTB4MDggZmlsbF9kcm9wcGVkIENvdW50cyB0aGUgbnVtYmVyIG9mIFNRIEwyIGZpbGxzIGRyb3BwZWQgZHVlIHRvIEwyIGJ1c3kKKwkweDEwIHNwbGl0X2xvY2sgQ291bnRzIHRoZSBudW1iZXIgb2YgU1EgbG9jayBzcGxpdHMgYWNyb3NzIGEgY2FjaGUgbGluZQorbmFtZTpmcF9hc3Npc3QgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwMQorCTB4MDEgYWxsIENvdW50cyB0aGUgbnVtYmVyIG9mIGZsb2F0aW5nIHBvaW50IG9wZXJhdGlvbnMgZXhlY3V0ZWQgdGhhdCByZXF1aXJlZCBtaWNyby1jb2RlIGFzc2lzdCBpbnRlcnZlbnRpb24KKwkweDAyIG91dHB1dCBDb3VudHMgbnVtYmVyIG9mIGZsb2F0aW5nIHBvaW50IG1pY3JvLWNvZGUgYXNzaXN0IHdoZW4gdGhlIG91dHB1dCB2YWx1ZSAoZGVzdGluYXRpb24gcmVnaXN0ZXIpIGlzIGludmFsaWQKKwkweDA0IGlucHV0IENvdW50cyBudW1iZXIgb2YgZmxvYXRpbmcgcG9pbnQgbWljcm8tY29kZSBhc3Npc3Qgd2hlbiB0aGUgaW5wdXQgdmFsdWUgKG9uZSBvZiB0aGUgc291cmNlIG9wZXJhbmRzIHRvIGFuIEZQIGluc3RydWN0aW9uKSBpcyBpbnZhbGlkCituYW1lOnNpbWRfaW50XzY0IHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MDEKKwkweDAxIHBhY2tlZF9tcHkgQ291bnRzIG51bWJlciBvZiBTSUQgaW50ZWdlciA2NCBiaXQgcGFja2VkIG11bHRpcGx5IG9wZXJhdGlvbnMKKwkweDAyIHBhY2tlZF9zaGlmdCBDb3VudHMgbnVtYmVyIG9mIFNJRCBpbnRlZ2VyIDY0IGJpdCBwYWNrZWQgc2hpZnQgb3BlcmF0aW9ucworCTB4MDQgcGFjayBDb3VudHMgbnVtYmVyIG9mIFNJRCBpbnRlZ2VyIDY0IGJpdCBwYWNrIG9wZXJhdGlvbnMKKwkweDA4IHVucGFjayBDb3VudHMgbnVtYmVyIG9mIFNJRCBpbnRlZ2VyIDY0IGJpdCB1bnBhY2sgb3BlcmF0aW9ucworCTB4MTAgcGFja2VkX2xvZ2ljYWwgQ291bnRzIG51bWJlciBvZiBTSUQgaW50ZWdlciA2NCBiaXQgbG9naWNhbCBvcGVyYXRpb25zCisJMHgyMCBwYWNrZWRfYXJpdGggQ291bnRzIG51bWJlciBvZiBTSUQgaW50ZWdlciA2NCBiaXQgYXJpdGhtZXRpYyBvcGVyYXRpb25zCisJMHg0MCBzaHVmZmxlX21vdmUgQ291bnRzIG51bWJlciBvZiBTSUQgaW50ZWdlciA2NCBiaXQgc2hpZnQgb3IgbW92ZSBvcGVyYXRpb25zCituYW1lOngyMCB0eXBlOm1hbmRhdG9yeSBkZWZhdWx0OjB4MjAKKwkweDIwIE5vIHVuaXQgbWFzawpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL2kzODYvcDQtaHQvZXZlbnRzIGIvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL2kzODYvcDQtaHQvZXZlbnRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwYzZiYzkKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9ldmVudHMvaTM4Ni9wNC1odC9ldmVudHMKQEAgLTAsMCArMSwyNSBAQAorIyBQZW50aXVtIElWIEh5cGVyVGhyZWFkaW5nIGV2ZW50cworIworIyBOT1RFOiBldmVudHMgY2Fubm90IGN1cnJlbnRseSBiZSAweDAwIGR1ZSB0byBldmVudCBiaW5kaW5nIGNoZWNrcyBpbgorIyBkcml2ZXIKKyMKK2V2ZW50OjB4MWQgY291bnRlcnM6MCB1bTpnbG9iYWxfcG93ZXJfZXZlbnRzIG1pbmltdW06NjAwMCBuYW1lOkdMT0JBTF9QT1dFUl9FVkVOVFMgOiB0aW1lIGR1cmluZyB3aGljaCBwcm9jZXNzb3IgaXMgbm90IHN0b3BwZWQKK2V2ZW50OjB4MDEgY291bnRlcnM6MyB1bTpicmFuY2hfcmV0aXJlZCBtaW5pbXVtOjYwMDAgbmFtZTpCUkFOQ0hfUkVUSVJFRCA6IHJldGlyZWQgYnJhbmNoZXMKK2V2ZW50OjB4MDIgY291bnRlcnM6MyB1bTptaXNwcmVkX2JyYW5jaF9yZXRpcmVkIG1pbmltdW06NjAwMCBuYW1lOk1JU1BSRURfQlJBTkNIX1JFVElSRUQgOiByZXRpcmVkIG1pc3ByZWRpY3RlZCBicmFuY2hlcworZXZlbnQ6MHgwNCBjb3VudGVyczowIHVtOmJwdV9mZXRjaF9yZXF1ZXN0IG1pbmltdW06NjAwMCBuYW1lOkJQVV9GRVRDSF9SRVFVRVNUIDogaW5zdHJ1Y3Rpb24gZmV0Y2ggcmVxdWVzdHMgZnJvbSB0aGUgYnJhbmNoIHByZWRpY3QgdW5pdAorZXZlbnQ6MHgwNSBjb3VudGVyczowIHVtOml0bGJfcmVmZXJlbmNlIG1pbmltdW06NjAwMCBuYW1lOklUTEJfUkVGRVJFTkNFIDogdHJhbnNsYXRpb25zIHVzaW5nIHRoZSBpbnN0cnVjdGlvbiB0cmFuc2xhdGlvbiBsb29rYXNpZGUgYnVmZmVyCitldmVudDoweDA2IGNvdW50ZXJzOjIgdW06bWVtb3J5X2NhbmNlbCBtaW5pbXVtOjYwMDAgbmFtZTpNRU1PUllfQ0FOQ0VMIDogY2FuY2VsbGVkIHJlcXVlc2V0cyBpbiBkYXRhIGNhY2hlIGFkZHJlc3MgY29udHJvbCB1bml0CitldmVudDoweDA3IGNvdW50ZXJzOjIgdW06bWVtb3J5X2NvbXBsZXRlIG1pbmltdW06NjAwMCBuYW1lOk1FTU9SWV9DT01QTEVURSA6IGNvbXBsZXRlZCBzcGxpdAorZXZlbnQ6MHgwOCBjb3VudGVyczoyIHVtOmxvYWRfcG9ydF9yZXBsYXkgbWluaW11bTo2MDAwIG5hbWU6TE9BRF9QT1JUX1JFUExBWSA6IHJlcGxheWVkIGV2ZW50cyBhdCB0aGUgbG9hZCBwb3J0CitldmVudDoweDA5IGNvdW50ZXJzOjIgdW06c3RvcmVfcG9ydF9yZXBsYXkgbWluaW11bTo2MDAwIG5hbWU6U1RPUkVfUE9SVF9SRVBMQVkgOiByZXBsYXllZCBldmVudHMgYXQgdGhlIHN0b3JlIHBvcnQKK2V2ZW50OjB4MGEgY291bnRlcnM6MCB1bTptb2JfbG9hZF9yZXBsYXkgbWluaW11bTo2MDAwIG5hbWU6TU9CX0xPQURfUkVQTEFZIDogcmVwbGF5ZWQgbG9hZHMgZnJvbSB0aGUgbWVtb3J5IG9yZGVyIGJ1ZmZlcgorZXZlbnQ6MHgwYyBjb3VudGVyczowIHVtOmJzcV9jYWNoZV9yZWZlcmVuY2UgbWluaW11bTo2MDAwIG5hbWU6QlNRX0NBQ0hFX1JFRkVSRU5DRSA6IGNhY2hlIHJlZmVyZW5jZXMgc2VlbiBieSB0aGUgYnVzIHVuaXQKK2V2ZW50OjB4MTIgY291bnRlcnM6MyB1bTp4ODdfYXNzaXN0IG1pbmltdW06NjAwMCBuYW1lOlg4N19BU1NJU1QgOiByZXRpcmVkIHg4NyBpbnN0cnVjdGlvbnMgd2hpY2ggcmVxdWlyZWQgc3BlY2lhbCBoYW5kbGluZworZXZlbnQ6MHgxYyBjb3VudGVyczozIHVtOm1hY2hpbmVfY2xlYXIgbWluaW11bTo2MDAwIG5hbWU6TUFDSElORV9DTEVBUiA6IGN5Y2xlcyB3aXRoIGVudGlyZSBtYWNoaW5lIHBpcGVsaW5lIGNsZWFyZWQKK2V2ZW50OjB4MWUgY291bnRlcnM6MSB1bTp0Y19tc194ZmVyIG1pbmltdW06NjAwMCBuYW1lOlRDX01TX1hGRVIgOiBudW1iZXIgb2YgdGltZXMgdW9wcyBkZWxpdmVyIGNoYW5nZWQgZnJvbSBUQyB0byBNUyBST00KK2V2ZW50OjB4MWYgY291bnRlcnM6MSB1bTp1b3BfcXVldWVfd3JpdGVzIG1pbmltdW06NjAwMCBuYW1lOlVPUF9RVUVVRV9XUklURVMgOiBudW1iZXIgb2YgdmFsaWQgdW9wcyB3cml0dGVuIHRvIHRoZSB1b3AgcXVldWUKK2V2ZW50OjB4MjMgY291bnRlcnM6MyB1bTppbnN0cl9yZXRpcmVkIG1pbmltdW06NjAwMCBuYW1lOklOU1RSX1JFVElSRUQgOiByZXRpcmVkIGluc3RydWN0aW9ucworZXZlbnQ6MHgyNCBjb3VudGVyczozIHVtOnVvcHNfcmV0aXJlZCBtaW5pbXVtOjYwMDAgbmFtZTpVT1BTX1JFVElSRUQgOiByZXRpcmVkIHVvcHMKK2V2ZW50OjB4MjUgY291bnRlcnM6MyB1bTp1b3BfdHlwZSBtaW5pbXVtOjYwMDAgbmFtZTpVT1BfVFlQRSA6IHR5cGUgb2YgdW9wIHRhZ2dlZCBieSBmcm9udC1lbmQgdGFnZ2luZworZXZlbnQ6MHgyNiBjb3VudGVyczoxIHVtOmJyYW5jaF90eXBlIG1pbmltdW06NjAwMCBuYW1lOlJFVElSRURfTUlTUFJFRF9CUkFOQ0hfVFlQRSA6IHJldGlyZWQgbWlzcHJlZGljdGVkIGJyYW5jaGVkLCBzZWxlY3RlZCBieSB0eXBlCitldmVudDoweDI3IGNvdW50ZXJzOjEgdW06YnJhbmNoX3R5cGUgbWluaW11bTo2MDAwIG5hbWU6UkVUSVJFRF9CUkFOQ0hfVFlQRSA6IHJldGlyZWQgYnJhbmNoZXMsIHNlbGVjdGVkIGJ5IHR5cGUKZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2V2ZW50cy9pMzg2L3A0LWh0L3VuaXRfbWFza3MgYi9vcHJvZmlsZS0wLjkuNy9ldmVudHMvaTM4Ni9wNC1odC91bml0X21hc2tzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiZmM2ZmEKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9ldmVudHMvaTM4Ni9wNC1odC91bml0X21hc2tzCkBAIC0wLDAgKzEsNzkgQEAKKyMgUGVudGl1bSBJViBIeXBlclRocmVhZGluZyBwb3NzaWJsZSB1bml0IG1hc2tzCisjCituYW1lOmJyYW5jaF9yZXRpcmVkIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MGMKKwkweDAxIGJyYW5jaCBub3QtdGFrZW4gcHJlZGljdGVkCisJMHgwMiBicmFuY2ggbm90LXRha2VuIG1pc3ByZWRpY3RlZAorCTB4MDQgYnJhbmNoIHRha2VuIHByZWRpY3RlZAorCTB4MDggYnJhbmNoIHRha2VuIG1pc3ByZWRpY3RlZAorbmFtZTptaXNwcmVkX2JyYW5jaF9yZXRpcmVkIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MDEKKwkweDAxIHJldGlyZWQgaW5zdHJ1Y3Rpb24gaXMgbm9uLWJvZ3VzCisjIEZJWE1FOiAwIGNvdW50IG5vdGhpbmcsIDB4ZmYgY291bnQgbW9yZSB0aGFuIDB4MDEsIGRvY3Mgc2F5cyBpdCdzIGEgYml0bWFzazoKKyMgc29tZXRoaW5nIHdyb25nIGluIGRvY3VtZW50YXRpb24gPworbmFtZTpicHVfZmV0Y2hfcmVxdWVzdCB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDAxCisJMHgwMSB0cmFjZSBjYWNoZSBsb29rdXAgbWlzcworbmFtZTppdGxiX3JlZmVyZW5jZSB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDA3CisJMHgwMSBJVExCIGhpdAorCTB4MDIgSVRMQiBtaXNzCisJMHgwNCB1bmNhY2hlYWJsZSBJVExCIGhpdAorbmFtZTptZW1vcnlfY2FuY2VsIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MDgKKwkweDA0IHJlcGxheWVkIGJlY2F1c2Ugbm8gc3RvcmUgcmVxdWVzdCBidWZmZXIgYXZhaWxhYmxlCisJMHgwOCBjb25mbGljdHMgZHVlIHRvIDY0ayBhbGlhc2luZworbmFtZTptZW1vcnlfY29tcGxldGUgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwMworCTB4MDEgbG9hZCBzcGxpdCBjb21wbGV0ZWQsIGV4Y2x1ZGluZyBVQy9XQyBsb2FkcworCTB4MDIgYW55IHNwbGl0IHN0b3JlcyBjb21wbGV0ZWQKKwkweDA0IHVuY2FjaGVhYmxlIGxvYWQgc3BsaXQgY29tcGxldGVkCisJMHgwOCB1bmNhY2hlYWJsZSBzdG9yZSBzcGxpdCBjb21wbGV0ZQorbmFtZTpsb2FkX3BvcnRfcmVwbGF5IHR5cGU6bWFuZGF0b3J5IGRlZmF1bHQ6MHgwMgorCTB4MDIgc3BsaXQgbG9hZAorbmFtZTpzdG9yZV9wb3J0X3JlcGxheSB0eXBlOm1hbmRhdG9yeSBkZWZhdWx0OjB4MDIKKwkweDAyIHNwbGl0IHN0b3JlCituYW1lOm1vYl9sb2FkX3JlcGxheSB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDNhCisJMHgwMiByZXBsYXkgY2F1c2U6IHVua25vd24gc3RvcmUgYWRkcmVzcworCTB4MDggcmVwbGF5IGNhdXNlOiB1bmtub3duIHN0b3JlIGRhdGEKKwkweDEwIHJlcGxheSBjYXVzZTogcGFydGlhbCBvdmVybGFwIGJldHdlZW4gbG9hZCBhbmQgc3RvcmUKKwkweDIwIHJlcGxheSBjYXVzZTogbWlzbWF0Y2hlZCBsb3cgNCBiaXRzIGJldHdlZW4gbG9hZCBhbmQgc3RvcmUgYWRkcgorbmFtZTpic3FfY2FjaGVfcmVmZXJlbmNlIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MDczZgorCTB4MDEgcmVhZCAybmQgbGV2ZWwgY2FjaGUgaGl0IHNoYXJlZAorCTB4MDIgcmVhZCAybmQgbGV2ZWwgY2FjaGUgaGl0IGV4Y2x1c2l2ZQorCTB4MDQgcmVhZCAybmQgbGV2ZWwgY2FjaGUgaGl0IG1vZGlmaWVkCisJMHgwOCByZWFkIDNyZCBsZXZlbCBjYWNoZSBoaXQgc2hhcmVkCisJMHgxMCByZWFkIDNyZCBsZXZlbCBjYWNoZSBoaXQgZXhjbHVzaXZlCisJMHgyMCByZWFkIDNyZCBsZXZlbCBjYWNoZSBoaXQgbW9kaWZpZWQKKwkweDEwMCByZWFkIDJuZCBsZXZlbCBjYWNoZSBtaXNzCisJMHgyMDAgcmVhZCAzcmQgbGV2ZWwgY2FjaGUgbWlzcworCTB4NDAwIHdyaXRlYmFjayBsb29rdXAgZnJvbSBEQUMgbWlzc2VzIDJuZCBsZXZlbCBjYWNoZQorbmFtZTp4ODdfYXNzaXN0IHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MWYKKwkweDAxIGhhbmRsZSBGUCBzdGFjayB1bmRlcmZsb3cKKwkweDAyIGhhbmRsZSBGUCBzdGFjayBvdmVyZmxvdworCTB4MDQgaGFuZGxlIHg4NyBvdXRwdXQgb3ZlcmZsb3cKKwkweDA4IGhhbmRsZSB4ODcgb3V0cHV0IHVuZGVyZmxvdworCTB4MTAgaGFuZGxlIHg4NyBpbnB1dCBhc3Npc3QKK25hbWU6bWFjaGluZV9jbGVhciB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDAxCisJMHgwMSBjb3VudCBhIHBvcnRpb24gb2YgY3ljbGVzIHRoZSBtYWNoaW5lIGlzIGNsZWFyZWQgZm9yIGFueSBjYXVzZQorCTB4MDQgY291bnQgZWFjaCB0aW1lIHRoZSBtYWNoaW5lIGlzIGNsZWFyZWQgZHVlIHRvIG1lbW9yeSBvcmRlcmluZyBpc3N1ZXMKKwkweDQwIGNvdW50IGVhY2ggdGltZSB0aGUgbWFjaGluZSBpcyBjbGVhcmVkIGR1ZSB0byBzZWxmIG1vZGlmeWluZyBjb2RlCituYW1lOmdsb2JhbF9wb3dlcl9ldmVudHMgdHlwZTptYW5kYXRvcnkgZGVmYXVsdDoweDAxCisJMHgwMSBtYW5kYXRvcnkKK25hbWU6dGNfbXNfeGZlciB0eXBlOm1hbmRhdG9yeSBkZWZhdWx0OjB4MDEKKwkweDAxIGNvdW50IFRDIHRvIE1TIHRyYW5zZmVycworbmFtZTp1b3BfcXVldWVfd3JpdGVzIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MDcKKwkweDAxIGNvdW50IHVvcHMgd3JpdHRlbiB0byBxdWV1ZSBmcm9tIFRDIGJ1aWxkIG1vZGUKKwkweDAyIGNvdW50IHVvcHMgd3JpdHRlbiB0byBxdWV1ZSBmcm9tIFRDIGRlbGl2ZXIgbW9kZQorCTB4MDQgY291bnQgdW9wcyB3cml0dGVuIHRvIHF1ZXVlIGZyb20gbWljcm9jb2RlIFJPTQorbmFtZTppbnN0cl9yZXRpcmVkIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MDEKKwkweDAxIGNvdW50IG5vbi1ib2d1cyBpbnN0cnVjdGlvbnMgd2hpY2ggYXJlIG5vdCB0YWdnZWQKKwkweDAyIGNvdW50IG5vbi1ib2d1cyBpbnN0cnVjdGlvbnMgd2hpY2ggYXJlIHRhZ2dlZAorCTB4MDQgY291bnQgYm9ndXMgaW5zdHJ1Y3Rpb25zIHdoaWNoIGFyZSBub3QgdGFnZ2VkCisJMHgwOCBjb3VudCBib2d1cyBpbnN0cnVjdGlvbnMgd2hpY2ggYXJlIHRhZ2dlZAorbmFtZTp1b3BzX3JldGlyZWQgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwMQorCTB4MDEgY291bnQgbWFya2VkIHVvcHMgd2hpY2ggYXJlIG5vbi1ib2d1cworCTB4MDIgY291bnQgbWFya2VkIHVvcHMgd2hpY2ggYXJlIGJvZ3VzCituYW1lOnVvcF90eXBlIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MDIKKwkweDAyIGNvdW50IHVvcHMgd2hpY2ggYXJlIGxvYWQgb3BlcmF0aW9ucworCTB4MDQgY291bnQgdW9wcyB3aGljaCBhcmUgc3RvcmUgb3BlcmF0aW9ucworbmFtZTpicmFuY2hfdHlwZSB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDFmCisJMHgwMSBjb3VudCB1bmNvbmRpdGlvbmFsIGp1bXBzCisJMHgwMiBjb3VudCBjb25kaXRpb25hbCBqdW1wcworCTB4MDQgY291bnQgY2FsbCBicmFuY2hlcworCTB4MDggY291bnQgcmV0dXJuIGJyYW5jaGVzCisJMHgxMCBjb3VudCBpbmRpcmVjdCBqdW1wcwpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL2kzODYvcDQvZXZlbnRzIGIvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL2kzODYvcDQvZXZlbnRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5NzhmZDUKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9ldmVudHMvaTM4Ni9wNC9ldmVudHMKQEAgLTAsMCArMSw0NCBAQAorIyBQZW50aXVtIElWIGV2ZW50cworIworIyBOT1RFOiBldmVudHMgY2Fubm90IGN1cnJlbnRseSBiZSAweDAwIGR1ZSB0byBldmVudCBiaW5kaW5nIGNoZWNrcyBpbgorIyBkcml2ZXIKKyMKK2V2ZW50OjB4MWQgY291bnRlcnM6MCw0IHVtOmdsb2JhbF9wb3dlcl9ldmVudHMgbWluaW11bTozMDAwIG5hbWU6R0xPQkFMX1BPV0VSX0VWRU5UUyA6IHRpbWUgZHVyaW5nIHdoaWNoIHByb2Nlc3NvciBpcyBub3Qgc3RvcHBlZAorZXZlbnQ6MHgwMSBjb3VudGVyczozLDcgdW06YnJhbmNoX3JldGlyZWQgbWluaW11bTozMDAwIG5hbWU6QlJBTkNIX1JFVElSRUQgOiByZXRpcmVkIGJyYW5jaGVzCitldmVudDoweDAyIGNvdW50ZXJzOjMsNyB1bTptaXNwcmVkX2JyYW5jaF9yZXRpcmVkIG1pbmltdW06MzAwMCBuYW1lOk1JU1BSRURfQlJBTkNIX1JFVElSRUQgOiByZXRpcmVkIG1pc3ByZWRpY3RlZCBicmFuY2hlcworZXZlbnQ6MHgwNCBjb3VudGVyczowLDQgdW06YnB1X2ZldGNoX3JlcXVlc3QgbWluaW11bTozMDAwIG5hbWU6QlBVX0ZFVENIX1JFUVVFU1QgOiBpbnN0cnVjdGlvbiBmZXRjaCByZXF1ZXN0cyBmcm9tIHRoZSBicmFuY2ggcHJlZGljdCB1bml0CitldmVudDoweDA1IGNvdW50ZXJzOjAsNCB1bTppdGxiX3JlZmVyZW5jZSBtaW5pbXVtOjMwMDAgbmFtZTpJVExCX1JFRkVSRU5DRSA6IHRyYW5zbGF0aW9ucyB1c2luZyB0aGUgaW5zdHJ1Y3Rpb24gdHJhbnNsYXRpb24gbG9va2FzaWRlIGJ1ZmZlcgorZXZlbnQ6MHgwNiBjb3VudGVyczoyLDYgdW06bWVtb3J5X2NhbmNlbCBtaW5pbXVtOjMwMDAgbmFtZTpNRU1PUllfQ0FOQ0VMIDogY2FuY2VsbGVkIHJlcXVlc2V0cyBpbiBkYXRhIGNhY2hlIGFkZHJlc3MgY29udHJvbCB1bml0CitldmVudDoweDA3IGNvdW50ZXJzOjIsNiB1bTptZW1vcnlfY29tcGxldGUgbWluaW11bTozMDAwIG5hbWU6TUVNT1JZX0NPTVBMRVRFIDogY29tcGxldGVkIHNwbGl0CitldmVudDoweDA4IGNvdW50ZXJzOjIsNiB1bTpsb2FkX3BvcnRfcmVwbGF5IG1pbmltdW06MzAwMCBuYW1lOkxPQURfUE9SVF9SRVBMQVkgOiByZXBsYXllZCBldmVudHMgYXQgdGhlIGxvYWQgcG9ydAorZXZlbnQ6MHgwOSBjb3VudGVyczoyLDYgdW06c3RvcmVfcG9ydF9yZXBsYXkgbWluaW11bTozMDAwIG5hbWU6U1RPUkVfUE9SVF9SRVBMQVkgOiByZXBsYXllZCBldmVudHMgYXQgdGhlIHN0b3JlIHBvcnQKK2V2ZW50OjB4MGEgY291bnRlcnM6MCw0IHVtOm1vYl9sb2FkX3JlcGxheSBtaW5pbXVtOjMwMDAgbmFtZTpNT0JfTE9BRF9SRVBMQVkgOiByZXBsYXllZCBsb2FkcyBmcm9tIHRoZSBtZW1vcnkgb3JkZXIgYnVmZmVyCitldmVudDoweDBjIGNvdW50ZXJzOjAsNCB1bTpic3FfY2FjaGVfcmVmZXJlbmNlIG1pbmltdW06MzAwMCBuYW1lOkJTUV9DQUNIRV9SRUZFUkVOQ0UgOiBjYWNoZSByZWZlcmVuY2VzIHNlZW4gYnkgdGhlIGJ1cyB1bml0CisjIGludGVsIGRvYyB2b2wgMyB0YWJsZSBBLTEgUDQgYW5kIHhlb24gd2l0aCBjcHVpZCBzaWduYXR1cmUgPCAweGYyNyBkb2VuJ3QgYWxsb3cgTVNSX0ZTQl9FU0NSMSBzbyBvbiBvbmx5IGNvdW50ZXIgMCBpcyBhdmFpbGFibGUKK2V2ZW50OjB4MGQgY291bnRlcnM6MCB1bTppb3EgbWluaW11bTozMDAwIG5hbWU6SU9RX0FMTE9DQVRJT04gOiBidXMgdHJhbnNhY3Rpb25zCisjIEZJWE1FIHRoZSB1bml0IG1hc2sgYXNzb2NpYXRlZCBpcyBrbm93biB0byBnZXQgZGlmZmVyZW50IGJlaGF2aW9yIGJldHdlZW4gY3B1CisjIHN0ZXAgaWQsIGl0IG5lZWQgdG8gYmUgZG9jdW1lbnRlZCBpbiBQNCBldmVudHMgZG9jCitldmVudDoweDBlIGNvdW50ZXJzOjQgdW06aW9xIG1pbmltdW06MzAwMCBuYW1lOklPUV9BQ1RJVkVfRU5UUklFUyA6IG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBJT1Egd2hpY2ggYXJlIGFjdGl2ZQorZXZlbnQ6MHgxMCBjb3VudGVyczowIHVtOmJzcSBtaW5pbXVtOjMwMDAgbmFtZTpCU1FfQUxMT0NBVElPTiA6IGFsbG9jYXRpb25zIGluIHRoZSBidXMgc2VxdWVuY2UgdW5pdAorZXZlbnQ6MHgxMiBjb3VudGVyczozLDcgdW06eDg3X2Fzc2lzdCBtaW5pbXVtOjMwMDAgbmFtZTpYODdfQVNTSVNUIDogcmV0aXJlZCB4ODcgaW5zdHJ1Y3Rpb25zIHdoaWNoIHJlcXVpcmVkIHNwZWNpYWwgaGFuZGxpbmcKK2V2ZW50OjB4MWMgY291bnRlcnM6Myw3IHVtOm1hY2hpbmVfY2xlYXIgbWluaW11bTozMDAwIG5hbWU6TUFDSElORV9DTEVBUiA6IGN5Y2xlcyB3aXRoIGVudGlyZSBtYWNoaW5lIHBpcGVsaW5lIGNsZWFyZWQKK2V2ZW50OjB4MWUgY291bnRlcnM6MSw1IHVtOnRjX21zX3hmZXIgbWluaW11bTozMDAwIG5hbWU6VENfTVNfWEZFUiA6IG51bWJlciBvZiB0aW1lcyB1b3BzIGRlbGl2ZXIgY2hhbmdlZCBmcm9tIFRDIHRvIE1TIFJPTQorZXZlbnQ6MHgxZiBjb3VudGVyczoxLDUgdW06dW9wX3F1ZXVlX3dyaXRlcyBtaW5pbXVtOjMwMDAgbmFtZTpVT1BfUVVFVUVfV1JJVEVTIDogbnVtYmVyIG9mIHZhbGlkIHVvcHMgd3JpdHRlbiB0byB0aGUgdW9wIHF1ZXVlCitldmVudDoweDIzIGNvdW50ZXJzOjMsNyB1bTppbnN0cl9yZXRpcmVkIG1pbmltdW06MzAwMCBuYW1lOklOU1RSX1JFVElSRUQgOiByZXRpcmVkIGluc3RydWN0aW9ucworZXZlbnQ6MHgyNCBjb3VudGVyczozLDcgdW06dW9wc19yZXRpcmVkIG1pbmltdW06MzAwMCBuYW1lOlVPUFNfUkVUSVJFRCA6IHJldGlyZWQgdW9wcworZXZlbnQ6MHgyNSBjb3VudGVyczozLDcgdW06dW9wX3R5cGUgbWluaW11bTozMDAwIG5hbWU6VU9QX1RZUEUgOiB0eXBlIG9mIHVvcCB0YWdnZWQgYnkgZnJvbnQtZW5kIHRhZ2dpbmcKK2V2ZW50OjB4MjYgY291bnRlcnM6MSw1IHVtOmJyYW5jaF90eXBlIG1pbmltdW06MzAwMCBuYW1lOlJFVElSRURfTUlTUFJFRF9CUkFOQ0hfVFlQRSA6IHJldGlyZWQgbWlzcHJlZGljdGVkIGJyYW5jaGVkLCBzZWxlY3RlZCBieSB0eXBlCitldmVudDoweDI3IGNvdW50ZXJzOjEsNSB1bTpicmFuY2hfdHlwZSBtaW5pbXVtOjMwMDAgbmFtZTpSRVRJUkVEX0JSQU5DSF9UWVBFIDogcmV0aXJlZCBicmFuY2hlcywgc2VsZWN0ZWQgYnkgdHlwZQorZXZlbnQ6MHgwMyBjb3VudGVyczoxLDUgdW06dGNfZGVsaXZlcl9tb2RlIG1pbmltdW06MzAwMCBuYW1lOlRDX0RFTElWRVJfTU9ERSA6IGR1cmF0aW9uIChpbiBjbG9jayBjeWNsZXMpIGluIHRoZSB0cmFjZSBjYWNoZSBhbmQgZGVjb2RlIGVuZ2luZQorZXZlbnQ6MHgwYiBjb3VudGVyczowLDQgdW06cGFnZV93YWxrX3R5cGUgbWluaW11bTozMDAwIG5hbWU6UEFHRV9XQUxLX1RZUEUgOiBwYWdlIHdhbGtzIGJ5IHRoZSBwYWdlIG1pc3MgaGFuZGxlcgorZXZlbnQ6MHgwZiBjb3VudGVyczowLDQgdW06ZnNiX2RhdGFfYWN0aXZpdHkgbWluaW11bTozMDAwIG5hbWU6RlNCX0RBVEFfQUNUSVZJVFkgOiBEUkRZIG9yIERCU1kgZXZlbnRzIG9uIHRoZSBmcm9udCBzaWRlIGJ1cworZXZlbnQ6MHgxMSBjb3VudGVyczo0IHVtOmJzcSBtaW5pbXVtOjMwMDAgbmFtZTpCU1FfQUNUSVZFX0VOVFJJRVMgOiBudW1iZXIgb2YgZW50cmllcyBpbiB0aGUgYnVzIHNlcXVlbmNlIHVuaXQgd2hpY2ggYXJlIGFjdGl2ZQorZXZlbnQ6MHgxMyBjb3VudGVyczoyLDYgdW06ZmxhbWVfdW9wIG1pbmltdW06MzAwMCBuYW1lOlNTRV9JTlBVVF9BU1NJU1QgOiBpbnB1dCBhc3Npc3RzIHJlcXVlc3RlZCBmb3IgU1NFIG9yIFNTRTIgb3BlcmFuZHMKK2V2ZW50OjB4MTQgY291bnRlcnM6Miw2IHVtOmZsYW1lX3VvcCBtaW5pbXVtOjMwMDAgbmFtZTpQQUNLRURfU1BfVU9QIDogcGFja2VkIHNpbmdsZSBwcmVjaXNpb24gdW9wcworZXZlbnQ6MHgxNSBjb3VudGVyczoyLDYgdW06ZmxhbWVfdW9wIG1pbmltdW06MzAwMCBuYW1lOlBBQ0tFRF9EUF9VT1AgOiBwYWNrZWQgZG91YmxlIHByZWNpc2lvbiB1b3BzCitldmVudDoweDE2IGNvdW50ZXJzOjIsNiB1bTpmbGFtZV91b3AgbWluaW11bTozMDAwIG5hbWU6U0NBTEFSX1NQX1VPUCA6IHNjYWxhciBzaW5nbGUgcHJlY2lzaW9uIHVvcHMKK2V2ZW50OjB4MTcgY291bnRlcnM6Miw2IHVtOmZsYW1lX3VvcCBtaW5pbXVtOjMwMDAgbmFtZTpTQ0FMQVJfRFBfVU9QIDogc2NhbGFyIGRvdWJsZSBwcmVzaXNpb24gdW9wcworZXZlbnQ6MHgxOCBjb3VudGVyczoyLDYgdW06ZmxhbWVfdW9wIG1pbmltdW06MzAwMCBuYW1lOjY0QklUX01NWF9VT1AgOiA2NCBiaXQgaW50ZWdlciBTSU1EIE1NWCB1b3BzCitldmVudDoweDE5IGNvdW50ZXJzOjIsNiB1bTpmbGFtZV91b3AgbWluaW11bTozMDAwIG5hbWU6MTI4QklUX01NWF9VT1AgOiAxMjggYml0IGludGVnZXIgU0lNRCBTU0UyIHVvcHMKK2V2ZW50OjB4MWEgY291bnRlcnM6Miw2IHVtOmZsYW1lX3VvcCBtaW5pbXVtOjMwMDAgbmFtZTpYODdfRlBfVU9QIDogeDg3IGZsb2F0aW5nIHBvaW50IHVvcHMKK2V2ZW50OjB4MWIgY291bnRlcnM6Miw2IHVtOng4N19zaW1kX21vdmVzX3VvcCBtaW5pbXVtOjMwMDAgbmFtZTpYODdfU0lNRF9NT1ZFU19VT1AgOiB4ODcgRlBVLCBNTVgsIFNTRSwgb3IgU1NFMiBsb2Fkcywgc3RvcmVzIGFuZCByZWctdG8tcmVnIG1vdmVzCmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9ldmVudHMvaTM4Ni9wNC91bml0X21hc2tzIGIvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL2kzODYvcDQvdW5pdF9tYXNrcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTQ2ZmRkCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL2kzODYvcDQvdW5pdF9tYXNrcwpAQCAtMCwwICsxLDEyNyBAQAorIyBQZW50aXVtIElWIHBvc3NpYmxlIHVuaXQgbWFza3MKKyMKK25hbWU6YnJhbmNoX3JldGlyZWQgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwYworCTB4MDEgYnJhbmNoIG5vdC10YWtlbiBwcmVkaWN0ZWQKKwkweDAyIGJyYW5jaCBub3QtdGFrZW4gbWlzcHJlZGljdGVkCisJMHgwNCBicmFuY2ggdGFrZW4gcHJlZGljdGVkCisJMHgwOCBicmFuY2ggdGFrZW4gbWlzcHJlZGljdGVkCituYW1lOm1pc3ByZWRfYnJhbmNoX3JldGlyZWQgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwMQorCTB4MDEgcmV0aXJlZCBpbnN0cnVjdGlvbiBpcyBub24tYm9ndXMKKyMgRklYTUU6IDAgY291bnQgbm90aGluZywgMHhmZiBjb3VudCBtb3JlIHRoYW4gMHgwMSwgZG9jcyBzYXlzIGl0J3MgYSBiaXRtYXNrOgorIyBzb21ldGhpbmcgd3JvbmcgaW4gZG9jdW1lbnRhdGlvbiA/CituYW1lOmJwdV9mZXRjaF9yZXF1ZXN0IHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MDEKKwkweDAxIHRyYWNlIGNhY2hlIGxvb2t1cCBtaXNzCituYW1lOml0bGJfcmVmZXJlbmNlIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MDcKKwkweDAxIElUTEIgaGl0CisJMHgwMiBJVExCIG1pc3MKKwkweDA0IHVuY2FjaGVhYmxlIElUTEIgaGl0CituYW1lOm1lbW9yeV9jYW5jZWwgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwOAorCTB4MDQgcmVwbGF5ZWQgYmVjYXVzZSBubyBzdG9yZSByZXF1ZXN0IGJ1ZmZlciBhdmFpbGFibGUKKwkweDA4IGNvbmZsaWN0cyBkdWUgdG8gNjRrIGFsaWFzaW5nCituYW1lOm1lbW9yeV9jb21wbGV0ZSB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDAzCisJMHgwMSBsb2FkIHNwbGl0IGNvbXBsZXRlZCwgZXhjbHVkaW5nIFVDL1dDIGxvYWRzCisJMHgwMiBhbnkgc3BsaXQgc3RvcmVzIGNvbXBsZXRlZAorCTB4MDQgdW5jYWNoZWFibGUgbG9hZCBzcGxpdCBjb21wbGV0ZWQKKwkweDA4IHVuY2FjaGVhYmxlIHN0b3JlIHNwbGl0IGNvbXBsZXRlCituYW1lOmxvYWRfcG9ydF9yZXBsYXkgdHlwZTptYW5kYXRvcnkgZGVmYXVsdDoweDAyCisJMHgwMiBzcGxpdCBsb2FkCituYW1lOnN0b3JlX3BvcnRfcmVwbGF5IHR5cGU6bWFuZGF0b3J5IGRlZmF1bHQ6MHgwMgorCTB4MDIgc3BsaXQgc3RvcmUKK25hbWU6bW9iX2xvYWRfcmVwbGF5IHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4M2EKKwkweDAyIHJlcGxheSBjYXVzZTogdW5rbm93biBzdG9yZSBhZGRyZXNzCisJMHgwOCByZXBsYXkgY2F1c2U6IHVua25vd24gc3RvcmUgZGF0YQorCTB4MTAgcmVwbGF5IGNhdXNlOiBwYXJ0aWFsIG92ZXJsYXAgYmV0d2VlbiBsb2FkIGFuZCBzdG9yZQorCTB4MjAgcmVwbGF5IGNhdXNlOiBtaXNtYXRjaGVkIGxvdyA0IGJpdHMgYmV0d2VlbiBsb2FkIGFuZCBzdG9yZSBhZGRyCituYW1lOmJzcV9jYWNoZV9yZWZlcmVuY2UgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwNzNmCisJMHgwMSByZWFkIDJuZCBsZXZlbCBjYWNoZSBoaXQgc2hhcmVkCisJMHgwMiByZWFkIDJuZCBsZXZlbCBjYWNoZSBoaXQgZXhjbHVzaXZlCisJMHgwNCByZWFkIDJuZCBsZXZlbCBjYWNoZSBoaXQgbW9kaWZpZWQKKwkweDA4IHJlYWQgM3JkIGxldmVsIGNhY2hlIGhpdCBzaGFyZWQKKwkweDEwIHJlYWQgM3JkIGxldmVsIGNhY2hlIGhpdCBleGNsdXNpdmUKKwkweDIwIHJlYWQgM3JkIGxldmVsIGNhY2hlIGhpdCBtb2RpZmllZAorCTB4MTAwIHJlYWQgMm5kIGxldmVsIGNhY2hlIG1pc3MKKwkweDIwMCByZWFkIDNyZCBsZXZlbCBjYWNoZSBtaXNzCisJMHg0MDAgd3JpdGViYWNrIGxvb2t1cCBmcm9tIERBQyBtaXNzZXMgMm5kIGxldmVsIGNhY2hlCituYW1lOmlvcSB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweGVmZTEKKwkweDAxIGJ1cyByZXF1ZXN0IHR5cGUgYml0IDAKKwkweDAyIGJ1cyByZXF1ZXN0IHR5cGUgYml0IDEKKwkweDA0IGJ1cyByZXF1ZXN0IHR5cGUgYml0IDIKKwkweDA4IGJ1cyByZXF1ZXN0IHR5cGUgYml0IDMKKwkweDEwIGJ1cyByZXF1ZXN0IHR5cGUgYml0IDQKKwkweDIwIGNvdW50IHJlYWQgZW50cmllcworCTB4NDAgY291bnQgd3JpdGUgZW50cmllcworCTB4ODAgY291bnQgVUMgbWVtb3J5IGFjY2VzcyBlbnRyaWVzCisJMHgxMDAgY291bnQgV0MgbWVtb3J5IGFjY2VzcyBlbnRyaWVzCisJMHgyMDAgY291bnQgd3JpdGUtdGhyb3VnaCBtZW1vcnkgYWNjZXNzIGVudHJpZXMKKwkweDQwMCBjb3VudCB3cml0ZS1wcm90ZWN0ZWQgbWVtb3J5IGFjY2VzcyBlbnRyaWVzCisJMHg4MDAgY291bnQgV0IgbWVtb3J5IGFjY2VzcyBlbnRyaWVzCisJMHgyMDAwIGNvdW50IG93biBzdG9yZSByZXF1ZXN0cworCTB4NDAwMCBjb3VudCBvdGhlciAvIERNQSBzdG9yZSByZXF1ZXN0cworCTB4ODAwMCBjb3VudCBIVy9TVyBwcmVmZXRjaCByZXF1ZXN0cworbmFtZTpic3EgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgyMQorCTB4MDEgKHIpZXEgKHQpeXBlIChlKW5jb2RpbmcsIGJpdCAwOiBzZWUgbmV4dCBiaXQKKwkweDAyIHJ0ZSBiaXQgMTogMDA9cmVhZCwgMDE9cmVhZCBpbnZhbGlkYXRlLCAxMD13cml0ZSwgMTE9d3JpdGViYWNrCisJMHgwNCByZXEgbGVuIGJpdCAwCisJMHgwOCByZXEgbGVuIGJpdCAxCisJMHgyMCByZXF1ZXN0IHR5cGUgaXMgaW5wdXQgKDA9b3V0cHV0KQorCTB4NDAgcmVxdWVzdCB0eXBlIGlzIGJ1cyBsb2NrCisJMHg4MCByZXF1ZXN0IHR5cGUgaXMgY2FjaGVhYmxlCisJMHgxMDAgcmVxdWVzdCB0eXBlIGlzIDgtYnl0ZSBjaHVuayBzcGxpdCBhY3Jvc3MgOC1ieXRlIGJvdW5kYXJ5CisJMHgyMDAgcmVxdWVzdCB0eXBlIGlzIGRlbWFuZCAoMD1wcmVmZXRjaCkKKwkweDQwMCByZXF1ZXN0IHR5cGUgaXMgb3JkZXJlZAorCTB4ODAwIChtKWVtb3J5ICh0KXlwZSAoZSluY29kaW5nLCBiaXQgMDogc2VlIG5leHQgYml0cworCTB4MTAwMCBtdGUgYml0IDE6IHNlZSBuZXh0IGJpdHMKKwkweDIwMDAgbXRlIGJpdCAyOiAwMDA9VUMsIDAwMT1VU1dDLCAxMDA9V1QsIDEwMT1XUCwgMTEwPVdCCituYW1lOng4N19hc3Npc3QgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgxZgorCTB4MDEgaGFuZGxlIEZQIHN0YWNrIHVuZGVyZmxvdworCTB4MDIgaGFuZGxlIEZQIHN0YWNrIG92ZXJmbG93CisJMHgwNCBoYW5kbGUgeDg3IG91dHB1dCBvdmVyZmxvdworCTB4MDggaGFuZGxlIHg4NyBvdXRwdXQgdW5kZXJmbG93CisJMHgxMCBoYW5kbGUgeDg3IGlucHV0IGFzc2lzdAorbmFtZTptYWNoaW5lX2NsZWFyIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MDEKKwkweDAxIGNvdW50IGEgcG9ydGlvbiBvZiBjeWNsZXMgdGhlIG1hY2hpbmUgaXMgY2xlYXJlZCBmb3IgYW55IGNhdXNlCisJMHgwNCBjb3VudCBlYWNoIHRpbWUgdGhlIG1hY2hpbmUgaXMgY2xlYXJlZCBkdWUgdG8gbWVtb3J5IG9yZGVyaW5nIGlzc3VlcworCTB4NDAgY291bnQgZWFjaCB0aW1lIHRoZSBtYWNoaW5lIGlzIGNsZWFyZWQgZHVlIHRvIHNlbGYgbW9kaWZ5aW5nIGNvZGUKK25hbWU6Z2xvYmFsX3Bvd2VyX2V2ZW50cyB0eXBlOm1hbmRhdG9yeSBkZWZhdWx0OjB4MDEKKwkweDAxIG1hbmRhdG9yeQorbmFtZTp0Y19tc194ZmVyIHR5cGU6bWFuZGF0b3J5IGRlZmF1bHQ6MHgwMQorCTB4MDEgY291bnQgVEMgdG8gTVMgdHJhbnNmZXJzCituYW1lOnVvcF9xdWV1ZV93cml0ZXMgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwNworCTB4MDEgY291bnQgdW9wcyB3cml0dGVuIHRvIHF1ZXVlIGZyb20gVEMgYnVpbGQgbW9kZQorCTB4MDIgY291bnQgdW9wcyB3cml0dGVuIHRvIHF1ZXVlIGZyb20gVEMgZGVsaXZlciBtb2RlCisJMHgwNCBjb3VudCB1b3BzIHdyaXR0ZW4gdG8gcXVldWUgZnJvbSBtaWNyb2NvZGUgUk9NCituYW1lOmluc3RyX3JldGlyZWQgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwMQorCTB4MDEgY291bnQgbm9uLWJvZ3VzIGluc3RydWN0aW9ucyB3aGljaCBhcmUgbm90IHRhZ2dlZAorCTB4MDIgY291bnQgbm9uLWJvZ3VzIGluc3RydWN0aW9ucyB3aGljaCBhcmUgdGFnZ2VkCisJMHgwNCBjb3VudCBib2d1cyBpbnN0cnVjdGlvbnMgd2hpY2ggYXJlIG5vdCB0YWdnZWQKKwkweDA4IGNvdW50IGJvZ3VzIGluc3RydWN0aW9ucyB3aGljaCBhcmUgdGFnZ2VkCituYW1lOnVvcHNfcmV0aXJlZCB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDAxCisJMHgwMSBjb3VudCBtYXJrZWQgdW9wcyB3aGljaCBhcmUgbm9uLWJvZ3VzCisJMHgwMiBjb3VudCBtYXJrZWQgdW9wcyB3aGljaCBhcmUgYm9ndXMKK25hbWU6dW9wX3R5cGUgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwMgorCTB4MDIgY291bnQgdW9wcyB3aGljaCBhcmUgbG9hZCBvcGVyYXRpb25zCisJMHgwNCBjb3VudCB1b3BzIHdoaWNoIGFyZSBzdG9yZSBvcGVyYXRpb25zCituYW1lOmJyYW5jaF90eXBlIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MWYKKwkweDAxIGNvdW50IHVuY29uZGl0aW9uYWwganVtcHMKKwkweDAyIGNvdW50IGNvbmRpdGlvbmFsIGp1bXBzCisJMHgwNCBjb3VudCBjYWxsIGJyYW5jaGVzCisJMHgwOCBjb3VudCByZXR1cm4gYnJhbmNoZXMKKwkweDEwIGNvdW50IGluZGlyZWN0IGp1bXBzCituYW1lOnRjX2RlbGl2ZXJfbW9kZSB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDA0CisJMHgwNCBwcm9jZXNzb3IgaXMgaW4gZGVsaXZlciBtb2RlCisJMHgyMCBwcm9jZXNzb3IgaXMgaW4gYnVpbGQgbW9kZQorbmFtZTpwYWdlX3dhbGtfdHlwZSB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDAxCisJMHgwMSBwYWdlIHdhbGsgZm9yIGRhdGEgVExCIG1pc3MKKwkweDAyIHBhZ2Ugd2FsayBmb3IgaW5zdHJ1Y3Rpb24gVExCIG1pc3MKK25hbWU6ZnNiX2RhdGFfYWN0aXZpdHkgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgzZgorCTB4MDEgY291bnQgd2hlbiB0aGlzIHByb2Nlc3NvciBkcml2ZXMgZGF0YSBvbnRvIGJ1cworCTB4MDIgY291bnQgd2hlbiB0aGlzIHByb2Nlc3NvciByZWFkcyBkYXRhIGZyb20gYnVzCisJMHgwNCBjb3VudCB3aGVuIGRhdGEgaXMgb24gYnVzIGJ1dCBub3Qgc2FtcGxlZCBieSB0aGlzIHByb2Nlc3NvcgorCTB4MDggY291bnQgd2hlbiB0aGlzIHByb2Nlc3NvciByZXNlcnZlcyBidXMgZm9yIGRyaXZpbmcKKwkweDEwIGNvdW50IHdoZW4gb3RoZXIgcmVzZXJ2ZXMgYnVzIGFuZCB0aGlzIHByb2Nlc3NvciB3aWxsIHNhbXBsZQorCTB4MjAgY291bnQgd2hlbiBvdGhlciByZXNlcnZlcyBidXMgYW5kIHRoaXMgcHJvY2Vzc29yIHdpbGwgbm90IHNhbXBsZQorbmFtZTpmbGFtZV91b3AgdHlwZTptYW5kYXRvcnkgZGVmYXVsdDoweDgwMDAKKwkweDgwMDAgY291bnQgYWxsIHVvcHMgb2YgdGhpcyB0eXBlCituYW1lOng4N19zaW1kX21vdmVzX3VvcCB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDE4CisJMHgwOCBjb3VudCBhbGwgeDg3IFNJTUQgc3RvcmUvbW92ZSB1b3BzCisJMHgxMCBjb3VudCBhbGwgeDg3IFNJTUQgbG9hZCB1b3BzCmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9ldmVudHMvaTM4Ni9wNl9tb2JpbGUvZXZlbnRzIGIvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL2kzODYvcDZfbW9iaWxlL2V2ZW50cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NmRlN2JiCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL2kzODYvcDZfbW9iaWxlL2V2ZW50cwpAQCAtMCwwICsxLDExNSBAQAorIyBQZW50aXVtIE0gZXZlbnRzCisjCitldmVudDoweDc5IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NjAwMCBuYW1lOkNQVV9DTEtfVU5IQUxURUQgOiBjbG9ja3MgcHJvY2Vzc29yIGlzIG5vdCBoYWx0ZWQsIGFuZCBub3QgaW4gYSB0aGVybWFsIHRyaXAKK2V2ZW50OjB4NDMgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpEQVRBX01FTV9SRUZTIDogYWxsIG1lbW9yeSByZWZlcmVuY2VzLCBjYWNoYWJsZSBhbmQgbm9uCitldmVudDoweDQ1IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RENVX0xJTkVTX0lOIDogdG90YWwgbGluZXMgYWxsb2NhdGVkIGluIHRoZSBEQ1UKK2V2ZW50OjB4NDYgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpEQ1VfTV9MSU5FU19JTiA6IG51bWJlciBvZiBNIHN0YXRlIGxpbmVzIGFsbG9jYXRlZCBpbiBEQ1UKK2V2ZW50OjB4NDcgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpEQ1VfTV9MSU5FU19PVVQgOiBudW1iZXIgb2YgTSBsaW5lcyBldmljdGVkIGZyb20gdGhlIERDVQorZXZlbnQ6MHg0OCBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRDVV9NSVNTX09VVFNUQU5ESU5HIDogbnVtYmVyIG9mIGN5Y2xlcyB3aGlsZSBEQ1UgbWlzcyBvdXRzdGFuZGluZworZXZlbnQ6MHg4MCBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOklGVV9JRkVUQ0ggOiBudW1iZXIgb2Ygbm9uL2NhY2hhYmxlIGluc3RydWN0aW9uIGZldGNoZXMKK2V2ZW50OjB4ODEgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJRlVfSUZFVENIX01JU1MgOiBudW1iZXIgb2YgaW5zdHJ1Y3Rpb24gZmV0Y2ggbWlzc2VzCitldmVudDoweDg1IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SVRMQl9NSVNTIDogbnVtYmVyIG9mIElUTEIgbWlzc2VzCitldmVudDoweDg2IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SUZVX01FTV9TVEFMTCA6IGN5Y2xlcyBpbnN0cnVjdGlvbiBmZXRjaCBwaXBlIGlzIHN0YWxsZWQKK2V2ZW50OjB4ODcgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJTERfU1RBTEwgOiBjeWNsZXMgaW5zdHJ1Y3Rpb24gbGVuZ3RoIGRlY29kZXIgaXMgc3RhbGxlZAorZXZlbnQ6MHgyOCBjb3VudGVyczowLDEgdW06bWVzaSBtaW5pbXVtOjUwMCBuYW1lOkwyX0lGRVRDSCA6IG51bWJlciBvZiBMMiBpbnN0cnVjdGlvbiBmZXRjaGVzCitldmVudDoweDI5IGNvdW50ZXJzOjAsMSB1bTptZXNpIG1pbmltdW06NTAwIG5hbWU6TDJfTEQgOiBudW1iZXIgb2YgTDIgZGF0YSBsb2FkcworZXZlbnQ6MHgyYSBjb3VudGVyczowLDEgdW06bWVzaSBtaW5pbXVtOjUwMCBuYW1lOkwyX1NUIDogbnVtYmVyIG9mIEwyIGRhdGEgc3RvcmVzCitldmVudDoweDI0IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6TDJfTElORVNfSU4gOiBudW1iZXIgb2YgYWxsb2NhdGVkIGxpbmVzIGluIEwyCitldmVudDoweDI2IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6TDJfTElORVNfT1VUIDogbnVtYmVyIG9mIHJlY292ZXJlZCBsaW5lcyBmcm9tIEwyCitldmVudDoweDI1IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6TDJfTV9MSU5FU19JTk0gOiBudW1iZXIgb2YgbW9kaWZpZWQgbGluZXMgYWxsb2NhdGVkIGluIEwyCitldmVudDoweDI3IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6TDJfTV9MSU5FU19PVVRNIDogbnVtYmVyIG9mIG1vZGlmaWVkIGxpbmVzIHJlbW92ZWQgZnJvbSBMMgorZXZlbnQ6MHgyZSBjb3VudGVyczowLDEgdW06bWVzaSBtaW5pbXVtOjUwMCBuYW1lOkwyX1JRU1RTIDogbnVtYmVyIG9mIEwyIHJlcXVlc3RzCitldmVudDoweDIxIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6TDJfQURTIDogbnVtYmVyIG9mIEwyIGFkZHJlc3Mgc3Ryb2JlcworZXZlbnQ6MHgyMiBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkwyX0RCVVNfQlVTWSA6IG51bWJlciBvZiBjeWNsZXMgZGF0YSBidXMgd2FzIGJ1c3kKK2V2ZW50OjB4MjMgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpMMl9EQlVTX0JVU1lfUkQgOiBjeWNsZXMgZGF0YSBidXMgd2FzIGJ1c3kgaW4geGZlciBmcm9tIEwyIHRvIENQVQorZXZlbnQ6MHg2MiBjb3VudGVyczowLDEgdW06ZWJsIG1pbmltdW06NTAwIG5hbWU6QlVTX0RSRFlfQ0xPQ0tTIDogbnVtYmVyIG9mIGNsb2NrcyBEUkRZIGlzIGFzc2VydGVkCitldmVudDoweDYzIGNvdW50ZXJzOjAsMSB1bTplYmwgbWluaW11bTo1MDAgbmFtZTpCVVNfTE9DS19DTE9DS1MgOiBudW1iZXIgb2YgY2xvY2tzIExPQ0sgaXMgYXNzZXJ0ZWQKK2V2ZW50OjB4NjAgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpCVVNfUkVRX09VVFNUQU5ESU5HIDogbnVtYmVyIG9mIG91dHN0YW5kaW5nIGJ1cyByZXF1ZXN0cworZXZlbnQ6MHg2NSBjb3VudGVyczowLDEgdW06ZWJsIG1pbmltdW06NTAwIG5hbWU6QlVTX1RSQU5fQlJEIDogbnVtYmVyIG9mIGJ1cnN0IHJlYWQgdHJhbnNhY3Rpb25zCitldmVudDoweDY2IGNvdW50ZXJzOjAsMSB1bTplYmwgbWluaW11bTo1MDAgbmFtZTpCVVNfVFJBTl9SRk8gOiBudW1iZXIgb2YgcmVhZCBmb3Igb3duZXJzaGlwIHRyYW5zYWN0aW9ucworZXZlbnQ6MHg2NyBjb3VudGVyczowLDEgdW06ZWJsIG1pbmltdW06NTAwIG5hbWU6QlVTX1RSQU5TX1dCIDogbnVtYmVyIG9mIHdyaXRlIGJhY2sgdHJhbnNhY3Rpb25zCitldmVudDoweDY4IGNvdW50ZXJzOjAsMSB1bTplYmwgbWluaW11bTo1MDAgbmFtZTpCVVNfVFJBTl9JRkVUQ0ggOiBudW1iZXIgb2YgaW5zdHJ1Y3Rpb24gZmV0Y2ggdHJhbnNhY3Rpb25zCitldmVudDoweDY5IGNvdW50ZXJzOjAsMSB1bTplYmwgbWluaW11bTo1MDAgbmFtZTpCVVNfVFJBTl9JTlZBTCA6IG51bWJlciBvZiBpbnZhbGlkYXRlIHRyYW5zYWN0aW9ucworZXZlbnQ6MHg2YSBjb3VudGVyczowLDEgdW06ZWJsIG1pbmltdW06NTAwIG5hbWU6QlVTX1RSQU5fUFdSIDogbnVtYmVyIG9mIHBhcnRpYWwgd3JpdGUgdHJhbnNhY3Rpb25zCitldmVudDoweDZiIGNvdW50ZXJzOjAsMSB1bTplYmwgbWluaW11bTo1MDAgbmFtZTpCVVNfVFJBTlNfUCA6IG51bWJlciBvZiBwYXJ0aWFsIHRyYW5zYWN0aW9ucworZXZlbnQ6MHg2YyBjb3VudGVyczowLDEgdW06ZWJsIG1pbmltdW06NTAwIG5hbWU6QlVTX1RSQU5TX0lPIDogbnVtYmVyIG9mIEkvTyB0cmFuc2FjdGlvbnMKK2V2ZW50OjB4NmQgY291bnRlcnM6MCwxIHVtOmVibCBtaW5pbXVtOjUwMCBuYW1lOkJVU19UUkFOU19ERUYgOiBudW1iZXIgb2YgZGVmZXJyZWQgdHJhbnNhY3Rpb25zCitldmVudDoweDZlIGNvdW50ZXJzOjAsMSB1bTplYmwgbWluaW11bTo1MDAgbmFtZTpCVVNfVFJBTl9CVVJTVCA6IG51bWJlciBvZiBidXJzdCB0cmFuc2FjdGlvbnMKK2V2ZW50OjB4NzAgY291bnRlcnM6MCwxIHVtOmVibCBtaW5pbXVtOjUwMCBuYW1lOkJVU19UUkFOX0FOWSA6IG51bWJlciBvZiBhbGwgdHJhbnNhY3Rpb25zCitldmVudDoweDZmIGNvdW50ZXJzOjAsMSB1bTplYmwgbWluaW11bTo1MDAgbmFtZTpCVVNfVFJBTl9NRU0gOiBudW1iZXIgb2YgbWVtb3J5IHRyYW5zYWN0aW9ucworZXZlbnQ6MHg2NCBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkJVU19EQVRBX1JDViA6IGJ1cyBjeWNsZXMgdGhpcyBwcm9jZXNzb3IgaXMgcmVjZWl2aW5nIGRhdGEKK2V2ZW50OjB4NjEgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpCVVNfQk5SX0RSViA6IGJ1cyBjeWNsZXMgdGhpcyBwcm9jZXNzb3IgaXMgZHJpdmluZyBCTlIgcGluCitldmVudDoweDdhIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QlVTX0hJVF9EUlYgOiBidXMgY3ljbGVzIHRoaXMgcHJvY2Vzc29yIGlzIGRyaXZpbmcgSElUIHBpbgorZXZlbnQ6MHg3YiBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkJVU19ISVRNX0RSViA6IGJ1cyBjeWNsZXMgdGhpcyBwcm9jZXNzb3IgaXMgZHJpdmluZyBISVRNIHBpbgorZXZlbnQ6MHg3ZSBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkJVU19TTk9PUF9TVEFMTCA6IGN5Y2xlcyBkdXJpbmcgYnVzIHNub29wIHN0YWxsCitldmVudDoweGMxIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjMwMDAgbmFtZTpDT01QX0ZMT1BfUkVUIDogbnVtYmVyIG9mIGNvbXB1dGF0aW9uYWwgRlAgb3BlcmF0aW9ucyByZXRpcmVkCitldmVudDoweDEwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjMwMDAgbmFtZTpGTE9QUyA6IG51bWJlciBvZiBjb21wdXRhdGlvbmFsIEZQIG9wZXJhdGlvbnMgZXhlY3V0ZWQKK2V2ZW50OjB4MTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RlBfQVNTSVNUIDogbnVtYmVyIG9mIEZQIGV4Y2VwdGlvbnMgaGFuZGxlZCBieSBtaWNyb2NvZGUKK2V2ZW50OjB4MTIgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOk1VTCA6IG51bWJlciBvZiBtdWx0aXBsaWVzCitldmVudDoweDEzIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRJViA6IG51bWJlciBvZiBkaXZpZGVzCitldmVudDoweDE0IGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpDWUNMRVNfRElWX0JVU1kgOiBjeWNsZXMgZGl2aWRlciBpcyBidXN5CitldmVudDoweDAzIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6TERfQkxPQ0tTIDogbnVtYmVyIG9mIHN0b3JlIGJ1ZmZlciBibG9ja3MKK2V2ZW50OjB4MDQgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpTQl9EUkFJTlMgOiBudW1iZXIgb2Ygc3RvcmUgYnVmZmVyIGRyYWluIGN5Y2xlcworZXZlbnQ6MHgwNSBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOk1JU0FMSUdOX01FTV9SRUYgOiBudW1iZXIgb2YgbWlzYWxpZ25lZCBkYXRhIG1lbW9yeSByZWZlcmVuY2VzCitldmVudDoweDA3IGNvdW50ZXJzOjAsMSB1bTprbmlfcHJlZmV0Y2ggbWluaW11bTo1MDAgbmFtZTpFTU9OX0tOSV9QUkVGX0RJU1BBVENIRUQgOiBudW1iZXIgb2YgS05JIHByZS1mZXRjaC93ZWFrbHkgb3JkZXJlZCBpbnNucyBkaXNwYXRjaGVkCitldmVudDoweDRiIGNvdW50ZXJzOjAsMSB1bTprbmlfcHJlZmV0Y2ggbWluaW11bTo1MDAgbmFtZTpFTU9OX0tOSV9QUkVGX01JU1MgOiBudW1iZXIgb2YgS05JIHByZS1mZXRjaC93ZWFrbHkgb3JkZXJlZCBpbnNucyB0aGF0IG1pc3MgYWxsIGNhY2hlcworZXZlbnQ6MHhjMCBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjYwMDAgbmFtZTpJTlNUX1JFVElSRUQgOiBudW1iZXIgb2YgaW5zdHJ1Y3Rpb25zIHJldGlyZWQKK2V2ZW50OjB4YzIgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo2MDAwIG5hbWU6VU9QU19SRVRJUkVEIDogbnVtYmVyIG9mIFVPUHMgcmV0aXJlZAorIyBFcnJhdGEgIGxpc3RzIElOU1RfREVDT0RFIGFzIG5vdCBhY2N1cmF0ZS4gU2VlIDI1MjY2NTA3LnBkZi4KK2V2ZW50OjB4ZDAgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo2MDAwIG5hbWU6SU5TVF9ERUNPREVEIDogbnVtYmVyIG9mIGluc3RydWN0aW9ucyBkZWNvZGVkCitldmVudDoweGQ4IGNvdW50ZXJzOjAsMSB1bTpzc2Vfc3NlMl9pbnN0X3JldGlyZWQgbWluaW11bTozMDAwIG5hbWU6RU1PTl9TU0VfU1NFMl9JTlNUX1JFVElSRUQgOiBTdHJlYW1pbmcgU0lNRCBFeHRlbnNpb25zIEluc3RydWN0aW9ucyBSZXRpcmVkCitldmVudDoweGQ5IGNvdW50ZXJzOjAsMSB1bTpzc2Vfc3NlMl9pbnN0X3JldGlyZWQgbWluaW11bTozMDAwIG5hbWU6RU1PTl9TU0VfU1NFMl9DT01QX0lOU1RfUkVUSVJFRCA6IENvbXB1dGF0aW9uYWwgU1NFIEluc3RydWN0aW9ucyBSZXRpcmVkCitldmVudDoweGM4IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SFdfSU5UX1JYIDogbnVtYmVyIG9mIGhhcmR3YXJlIGludGVycnVwdHMgcmVjZWl2ZWQKK2V2ZW50OjB4YzYgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpDWUNMRVNfSU5UX01BU0tFRCA6IGN5Y2xlcyBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZAorZXZlbnQ6MHhjNyBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkNZQ0xFU19JTlRfUEVORElOR19BTkRfTUFTS0VEIDogY3ljbGVzIGludGVycnVwdHMgYXJlIGRpc2FibGVkIHdpdGggcGVuZGluZyBpbnRlcnJ1cHRzCitldmVudDoweGM0IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QlJfSU5TVF9SRVRJUkVEIDogbnVtYmVyIG9mIGJyYW5jaCBpbnN0cnVjdGlvbnMgcmV0aXJlZAorZXZlbnQ6MHhjNSBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkJSX01JU1NfUFJFRF9SRVRJUkVEIDogbnVtYmVyIG9mIG1pc3ByZWRpY3RlZCBicmFuY2hlcyByZXRpcmVkCitldmVudDoweGM5IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QlJfVEFLRU5fUkVUSVJFRCA6IG51bWJlciBvZiB0YWtlbiBicmFuY2hlcyByZXRpcmVkCitldmVudDoweGNhIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QlJfTUlTU19QUkVEX1RBS0VOX1JFVCA6IG51bWJlciBvZiB0YWtlbiBtaXNwcmVkaWN0aW9ucyBicmFuY2hlcyByZXRpcmVkCitldmVudDoweGUwIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QlJfSU5TVF9ERUNPREVEIDogbnVtYmVyIG9mIGJyYW5jaCBpbnN0cnVjdGlvbnMgZGVjb2RlZAorZXZlbnQ6MHhlMiBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkJUQl9NSVNTRVMgOiBudW1iZXIgb2YgYnJhbmNoZXMgdGhhdCBtaXNzIHRoZSBCVEIKK2V2ZW50OjB4ZTQgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpCUl9CT0dVUyA6IG51bWJlciBvZiBib2d1cyBicmFuY2hlcworZXZlbnQ6MHhlNiBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkJBQ0xFQVJTIDogbnVtYmVyIG9mIHRpbWVzIEJBQ0xFQVIgaXMgYXNzZXJ0ZWQKK2V2ZW50OjB4YTIgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpSRVNPVVJDRV9TVEFMTFMgOiBjeWNsZXMgZHVyaW5nIHJlc291cmNlIHJlbGF0ZWQgc3RhbGxzCitldmVudDoweGQyIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6UEFSVElBTF9SQVRfU1RBTExTIDogY3ljbGVzIG9yIGV2ZW50cyBmb3IgcGFydGlhbCBzdGFsbHMKK2V2ZW50OjB4MDYgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpTRUdNRU5UX1JFR19MT0FEUyA6IG51bWJlciBvZiBzZWdtZW50IHJlZ2lzdGVyIGxvYWRzCitldmVudDoweGIxIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06MzAwMCBuYW1lOk1NWF9TQVRfSU5TVFJfRVhFQyA6IG51bWJlciBvZiBNTVggc2F0dXJhdGluZyBpbnN0cnVjdGlvbnMgZXhlY3V0ZWQKK2V2ZW50OjB4YjIgY291bnRlcnM6MCwxIHVtOm1teF91b3BzIG1pbmltdW06MzAwMCBuYW1lOk1NWF9VT1BTX0VYRUMgOiBudW1iZXIgb2YgTU1YIFVPUFMgZXhlY3V0ZWQKK2V2ZW50OjB4YjMgY291bnRlcnM6MCwxIHVtOm1teF9pbnN0cl90eXBlX2V4ZWMgbWluaW11bTozMDAwIG5hbWU6TU1YX0lOU1RSX1RZUEVfRVhFQyA6IG51bWJlciBvZiBNTVggcGFja2luZyBpbnN0cnVjdGlvbnMKK2V2ZW50OjB4Y2MgY291bnRlcnM6MCwxIHVtOm1teF90cmFucyBtaW5pbXVtOjMwMDAgbmFtZTpGUF9NTVhfVFJBTlMgOiBNTVgtZmxvYXRpbmcgcG9pbnQgdHJhbnNpdGlvbnMKK2V2ZW50OjB4Y2QgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpNTVhfQVNTSVNUIDogbnVtYmVyIG9mIEVNTVMgaW5zdHJ1Y3Rpb25zIGV4ZWN1dGVkCitldmVudDoweGNlIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06MzAwMCBuYW1lOk1NWF9JTlNUUl9SRVQgOiBudW1iZXIgb2YgTU1YIGluc3RydWN0aW9ucyByZXRpcmVkCisjCisjIFBlbnRpdW0gTSBTcGVjaWZpYyBldmVudHMgZnJvbSBBLTcKKyMKKyMKKyMgUG93ZXIgTWFuYWdlbWVudAorZXZlbnQ6MHg1OCBjb3VudGVyczowLDEgdW06ZnJlcSBtaW5pbXVtOjMwMDAgbmFtZTpFTU9OX0VTVF9UUkFOUyA6IE51bWJlciBvZiBFbmhhbmNlZCBJbnRlbCBTcGVlZFN0ZXAKKyMgRXJyYXRhIGxpc3RzIEVNT05fVEhFUk1BTF9UUklQIGFzIG5vdCBhY2N1cmF0ZS4gU2VlIDI1MjY2NTA3LnBkZi4KK2V2ZW50OjB4NTkgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTozMDAwIG5hbWU6RU1PTl9USEVSTUFMX1RSSVAgOiBEdXJhdGlvbi9PY2N1cnJlbmNlcyBpbiB0aGVybWFsIHRyaXAKKyMKKyMgQlBVCitldmVudDoweDg4IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06MzAwMCBuYW1lOkJSX0lOU1RfRVhFQyA6IEJyYW5jaCBpbnN0cnVjdGlvbnMgZXhlY3V0ZWQgKG5vdCBuZWNlc3NhcmlseSByZXRpcmVkKQorZXZlbnQ6MHg4OSBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjMwMDAgbmFtZTpCUl9NSVNTUF9FWEVDIDogQnJhbmNoIGluc3RydWN0aW9ucyBleGVjdXRlZCB0aGF0IHdlcmUgbWlzcHJlZGljdGVkIGF0IGV4ZWN1dGlvbgorZXZlbnQ6MHg4YSBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjMwMDAgbmFtZTpCUl9CQUNfTUlTU1BfRVhFQyA6IEJyYW5jaCBpbnN0cnVjdGlvbnMgZXhlY3V0ZWQgdGhhdCB3ZXJlIG1pc3ByZWRpY3RlZCBhdCBGcm9udCBFbmQgKEJBQykKK2V2ZW50OjB4OGIgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTozMDAwIG5hbWU6QlJfQ05EX0VYRUMgOiBDb25kaXRpb25hbCBCcmFuY2ggaW5zdHJ1Y3Rpb25zIGV4ZWN1dGVkCitldmVudDoweDhjIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06MzAwMCBuYW1lOkJSX0NORF9NSVNTUF9FWEVDIDogQ29uZGl0aW9uYWwgQnJhbmNoIGluc3RydWN0aW9ucyBleGVjdXRlZCB0aGF0IHdlcmUgbWlzcHJlZGljdGVkCitldmVudDoweDhkIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06MzAwMCBuYW1lOkJSX0lORF9FWEVDIDogSW5kaXJlY3QgQnJhbmNoIGluc3RydWN0aW9ucyBleGVjdXRlZAorZXZlbnQ6MHg4ZSBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjMwMDAgbmFtZTpCUl9JTkRfTUlTU1BfRVhFQyA6IEluZGlyZWN0IEJyYW5jaCBpbnN0cnVjdGlvbnMgZXhlY3V0ZWQgdGhhdCB3ZXJlIG1pc3ByZWRpY3RlZAorZXZlbnQ6MHg4ZiBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjMwMDAgbmFtZTpCUl9SRVRfRVhFQyA6IFJldHVybiBCcmFuY2ggaW5zdHJ1Y3Rpb25zIGV4ZWN1dGVkCitldmVudDoweDkwIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06MzAwMCBuYW1lOkJSX1JFVF9NSVNTUF9FWEVDIDogUmV0dXJuIEJyYW5jaCBpbnN0cnVjdGlvbnMgZXhlY3V0ZWQgdGhhdCB3ZXJlIG1pc3ByZWRpY3RlZCBhdCBFeGVjdXRpb24KK2V2ZW50OjB4OTEgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTozMDAwIG5hbWU6QlJfUkVUX0JBQ19NSVNTUF9FWEVDIDpSZXR1cm4gQnJhbmNoIGluc3RydWN0aW9ucyBleGVjdXRlZCB0aGF0IHdlcmUgbWlzcHJlZGljdGVkIGF0IEZyb250IEVuZCAoQkFDKQorZXZlbnQ6MHg5MiBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjMwMDAgbmFtZTpCUl9DQUxMX0VYRUMgOiBDQUxMIGluc3RydWN0aW9uIGV4ZWN1dGVkCitldmVudDoweDkzIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06MzAwMCBuYW1lOkJSX0NBTExfTUlTU1BfRVhFQyA6IENBTEwgaW5zdHJ1Y3Rpb24gZXhlY3V0ZWQgYW5kIG1pc3MgcHJlZGljdGVkCitldmVudDoweDk0IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06MzAwMCBuYW1lOkJSX0lORF9DQUxMX0VYRUMgOiBJbmRpcmVjdCBDQUxMIGluc3RydWN0aW9uIGV4ZWN1dGVkCisjCisjIERlY29kZXIKK2V2ZW50OjB4Y2UgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTozMDAwIG5hbWU6RU1PTl9TSU1EX0lOU1RSX1JFVElSRUQgOiBOdW1iZXIgb2YgcmV0aXJlZCBNTVggaW5zdHJ1Y3Rpb25zCitldmVudDoweGQzIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06MzAwMCBuYW1lOkVNT05fU1lOQ0hfVU9QUyA6IFN5bmMgbWljcm8tb3BzCitldmVudDoweGQ3IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06MzAwMCBuYW1lOkVNT05fU1lOQ0hfVU9QUyA6IFRvdGFsIG51bWJlciBvZiBtaWNyby1vcHMKK2V2ZW50OjB4ZGEgY291bnRlcnM6MCwxIHVtOmZ1c2VkIG1pbmltdW06MzAwMCBuYW1lOkVNT05fRlVTRURfVU9QU19SRVQgOiBOdW1iZXIgb2YgcmV0aXJlZCBmdXNlZCBtaWNyby1vcHMKK2V2ZW50OjB4ZGIgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTozMDAwIG5hbWU6RU1PTl9VTkZVU0lPTiA6IE51bWJlciBvZiB1bmZ1c2lvbiBldmVudHMgaW4gdGhlIFJPQiwgaGFwcGVuZWQgb24gYSBGUCBleGNlcHRpb24gdG8gYSBmdXNlZCB1T3AKKyMKKyMgUHJlZmV0Y2hlcgorZXZlbnQ6MHhmMCBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjMwMDAgbmFtZTpFTU9OX1BSRUZfUlFTVFNfVVAgOiBOdW1iZXIgb2YgdXB3YXJkIHByZWZldGNoZXMgaXNzdWVkCitldmVudDoweGY4IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06MzAwMCBuYW1lOkVNT05fUFJFRl9SUVNUU19ETiA6IE51bWJlciBvZiBkb3dud2FyZCBwcmVmZXRjaGVzIGlzc3VlZApkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL2kzODYvcDZfbW9iaWxlL3VuaXRfbWFza3MgYi9vcHJvZmlsZS0wLjkuNy9ldmVudHMvaTM4Ni9wNl9tb2JpbGUvdW5pdF9tYXNrcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTA1YTJiCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL2kzODYvcDZfbW9iaWxlL3VuaXRfbWFza3MKQEAgLTAsMCArMSw0NyBAQAorIyBQZW50aXVtIE0gcG9zc2libGUgdW5pdCBtYXNrcworIworbmFtZTp6ZXJvIHR5cGU6bWFuZGF0b3J5IGRlZmF1bHQ6MHgwCisJMHgwIE5vIHVuaXQgbWFzaworbmFtZTptZXNpIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MGYKKwkweDA4IChNKW9kaWZpZWQgY2FjaGUgc3RhdGUKKwkweDA0IChFKXhjbHVzaXZlIGNhY2hlIHN0YXRlCisJMHgwMiAoUyloYXJlZCBjYWNoZSBzdGF0ZQorCTB4MDEgKEkpbnZhbGlkIGNhY2hlIHN0YXRlCisJMHgwZiBBbGwgY2FjaGUgc3RhdGVzCisJMHgxMCBIVyBwcmVmZXRjaGVkIGxpbmUgb25seQorCTB4MjAgYWxsIHByZWZldGNoZWQgbGluZSB3L28gcmVnYXJkaW5nIG1hc2sgMHgxMC4KK25hbWU6ZWJsIHR5cGU6ZXhjbHVzaXZlIGRlZmF1bHQ6MHgyMAorCTB4MDAgc2VsZi1nZW5lcmF0ZWQgdHJhbnNhY3Rpb25zCisJMHgyMCBhbnkgdHJhbnNhY3Rpb25zCituYW1lOmtuaV9wcmVmZXRjaCB0eXBlOmV4Y2x1c2l2ZSBkZWZhdWx0OjB4MAorCTB4MDAgcHJlZmV0Y2ggTlRBCisJMHgwMSBwcmVmZXRjaCBUMQorCTB4MDIgcHJlZmV0Y2ggVDIKKwkweDAzIHdlYWtseS1vcmRlcmVkIHN0b3JlcworIyB0aGlzIGJpdG1hc2sgY2FuIHNlZW1zIHdlaXJkcyBidXQgaXMgY29ycmVjdCwgbm90ZSB0aGVyZSBpcyBubyB3YXkgdG8gb25seQorIyBjb3VudCBzY2FsYXIgU0lNRCBpbnN0cnVjdGlvbnMKK25hbWU6c3NlX3NzZTJfaW5zdF9yZXRpcmVkIHR5cGU6ZXhjbHVzaXZlIGRlZmF1bHQ6MHgwCisJMHgwMCBTU0UgUGFja2VkIFNpbmdsZQorCTB4MDEgU1NFIFNjYWxhci1TaW5nbGUKKwkweDAyIFNTRTIgUGFja2VkLURvdWJsZQorCTB4MDMgU1NFMiBTY2FsYXItRG91YmxlCituYW1lOm1teF91b3BzIHR5cGU6bWFuZGF0b3J5IGRlZmF1bHQ6MHhmCisJMHgwZiBtYW5kYXRvcnkKK25hbWU6bW14X2luc3RyX3R5cGVfZXhlYyB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDNmCisJMHgwMSBNTVggcGFja2VkIG11bHRpcGxpZXMKKwkweDAyIE1NWCBwYWNrZWQgc2hpZnRzCisJMHgwNCBNTVggcGFjayBvcGVyYXRpb25zCisJMHgwOCBNTVggdW5wYWNrIG9wZXJhdGlvbnMKKwkweDEwIE1NWCBwYWNrZWQgbG9naWNhbAorCTB4MjAgTU1YIHBhY2tlZCBhcml0aG1ldGljCisJMHgzZiBhbGwgb2YgdGhlIGFib3ZlCituYW1lOm1teF90cmFucyB0eXBlOmV4Y2x1c2l2ZSBkZWZhdWx0OjB4MAorCTB4MDAgTU1YLT5mbG9hdCBvcGVyYXRpb25zCisJMHgwMSBmbG9hdC0+TU1YIG9wZXJhdGlvbnMKK25hbWU6ZnJlcSB0eXBlOmV4Y2x1c2l2ZSBkZWZhdWx0OjB4MAorCTB4MDAgQWxsIHRyYW5zaXRpb25zCisJMHgwMiBPbmx5IEZyZXF1ZW5jeSB0cmFuc2l0aW9ucworbmFtZTpmdXNlZCB0eXBlOmV4Y2x1c2l2ZSBkZWZhdWx0OjB4MAorCTB4MDAgQWxsIGZ1c2VkIG1pY3JvLW9wcworCTB4MDEgT25seSBsb2FkK09wIG1pY3JvLW9wcworCTB4MDIgT25seSBzdGQrc3RhIG1pY3JvLW9wcwpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL2kzODYvcGlpL2V2ZW50cyBiL29wcm9maWxlLTAuOS43L2V2ZW50cy9pMzg2L3BpaS9ldmVudHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzViM2JlYgotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2V2ZW50cy9pMzg2L3BpaS9ldmVudHMKQEAgLTAsMCArMSw4MCBAQAorIyBQZW50aXVtIElJIGV2ZW50cworIworZXZlbnQ6MHg3OSBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjYwMDAgbmFtZTpDUFVfQ0xLX1VOSEFMVEVEIDogY2xvY2tzIHByb2Nlc3NvciBpcyBub3QgaGFsdGVkCitldmVudDoweDQzIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6REFUQV9NRU1fUkVGUyA6IGFsbCBtZW1vcnkgcmVmZXJlbmNlcywgY2FjaGFibGUgYW5kIG5vbgorZXZlbnQ6MHg0NSBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRDVV9MSU5FU19JTiA6IHRvdGFsIGxpbmVzIGFsbG9jYXRlZCBpbiB0aGUgRENVCitldmVudDoweDQ2IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RENVX01fTElORVNfSU4gOiBudW1iZXIgb2YgTSBzdGF0ZSBsaW5lcyBhbGxvY2F0ZWQgaW4gRENVCitldmVudDoweDQ3IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RENVX01fTElORVNfT1VUIDogbnVtYmVyIG9mIE0gbGluZXMgZXZpY3RlZCBmcm9tIHRoZSBEQ1UKK2V2ZW50OjB4NDggY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpEQ1VfTUlTU19PVVRTVEFORElORyA6IG51bWJlciBvZiBjeWNsZXMgd2hpbGUgRENVIG1pc3Mgb3V0c3RhbmRpbmcKK2V2ZW50OjB4ODAgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJRlVfSUZFVENIIDogbnVtYmVyIG9mIG5vbi9jYWNoYWJsZSBpbnN0cnVjdGlvbiBmZXRjaGVzCitldmVudDoweDgxIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SUZVX0lGRVRDSF9NSVNTIDogbnVtYmVyIG9mIGluc3RydWN0aW9uIGZldGNoIG1pc3NlcworZXZlbnQ6MHg4NSBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOklUTEJfTUlTUyA6IG51bWJlciBvZiBJVExCIG1pc3NlcworZXZlbnQ6MHg4NiBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOklGVV9NRU1fU1RBTEwgOiBjeWNsZXMgaW5zdHJ1Y3Rpb24gZmV0Y2ggcGlwZSBpcyBzdGFsbGVkCitldmVudDoweDg3IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SUxEX1NUQUxMIDogY3ljbGVzIGluc3RydWN0aW9uIGxlbmd0aCBkZWNvZGVyIGlzIHN0YWxsZWQKK2V2ZW50OjB4MjggY291bnRlcnM6MCwxIHVtOm1lc2kgbWluaW11bTo1MDAgbmFtZTpMMl9JRkVUQ0ggOiBudW1iZXIgb2YgTDIgaW5zdHJ1Y3Rpb24gZmV0Y2hlcworZXZlbnQ6MHgyOSBjb3VudGVyczowLDEgdW06bWVzaSBtaW5pbXVtOjUwMCBuYW1lOkwyX0xEIDogbnVtYmVyIG9mIEwyIGRhdGEgbG9hZHMKK2V2ZW50OjB4MmEgY291bnRlcnM6MCwxIHVtOm1lc2kgbWluaW11bTo1MDAgbmFtZTpMMl9TVCA6IG51bWJlciBvZiBMMiBkYXRhIHN0b3JlcworZXZlbnQ6MHgyNCBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkwyX0xJTkVTX0lOIDogbnVtYmVyIG9mIGFsbG9jYXRlZCBsaW5lcyBpbiBMMgorZXZlbnQ6MHgyNiBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkwyX0xJTkVTX09VVCA6IG51bWJlciBvZiByZWNvdmVyZWQgbGluZXMgZnJvbSBMMgorZXZlbnQ6MHgyNSBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkwyX01fTElORVNfSU5NIDogbnVtYmVyIG9mIG1vZGlmaWVkIGxpbmVzIGFsbG9jYXRlZCBpbiBMMgorZXZlbnQ6MHgyNyBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkwyX01fTElORVNfT1VUTSA6IG51bWJlciBvZiBtb2RpZmllZCBsaW5lcyByZW1vdmVkIGZyb20gTDIKK2V2ZW50OjB4MmUgY291bnRlcnM6MCwxIHVtOm1lc2kgbWluaW11bTo1MDAgbmFtZTpMMl9SUVNUUyA6IG51bWJlciBvZiBMMiByZXF1ZXN0cworZXZlbnQ6MHgyMSBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkwyX0FEUyA6IG51bWJlciBvZiBMMiBhZGRyZXNzIHN0cm9iZXMKK2V2ZW50OjB4MjIgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpMMl9EQlVTX0JVU1kgOiBudW1iZXIgb2YgY3ljbGVzIGRhdGEgYnVzIHdhcyBidXN5CitldmVudDoweDIzIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6TDJfREJVU19CVVNZX1JEIDogY3ljbGVzIGRhdGEgYnVzIHdhcyBidXN5IGluIHhmZXIgZnJvbSBMMiB0byBDUFUKK2V2ZW50OjB4NjIgY291bnRlcnM6MCwxIHVtOmVibCBtaW5pbXVtOjUwMCBuYW1lOkJVU19EUkRZX0NMT0NLUyA6IG51bWJlciBvZiBjbG9ja3MgRFJEWSBpcyBhc3NlcnRlZAorZXZlbnQ6MHg2MyBjb3VudGVyczowLDEgdW06ZWJsIG1pbmltdW06NTAwIG5hbWU6QlVTX0xPQ0tfQ0xPQ0tTIDogbnVtYmVyIG9mIGNsb2NrcyBMT0NLIGlzIGFzc2VydGVkCitldmVudDoweDYwIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QlVTX1JFUV9PVVRTVEFORElORyA6IG51bWJlciBvZiBvdXRzdGFuZGluZyBidXMgcmVxdWVzdHMKK2V2ZW50OjB4NjUgY291bnRlcnM6MCwxIHVtOmVibCBtaW5pbXVtOjUwMCBuYW1lOkJVU19UUkFOX0JSRCA6IG51bWJlciBvZiBidXJzdCByZWFkIHRyYW5zYWN0aW9ucworZXZlbnQ6MHg2NiBjb3VudGVyczowLDEgdW06ZWJsIG1pbmltdW06NTAwIG5hbWU6QlVTX1RSQU5fUkZPIDogbnVtYmVyIG9mIHJlYWQgZm9yIG93bmVyc2hpcCB0cmFuc2FjdGlvbnMKK2V2ZW50OjB4NjcgY291bnRlcnM6MCwxIHVtOmVibCBtaW5pbXVtOjUwMCBuYW1lOkJVU19UUkFOU19XQiA6IG51bWJlciBvZiB3cml0ZSBiYWNrIHRyYW5zYWN0aW9ucworZXZlbnQ6MHg2OCBjb3VudGVyczowLDEgdW06ZWJsIG1pbmltdW06NTAwIG5hbWU6QlVTX1RSQU5fSUZFVENIIDogbnVtYmVyIG9mIGluc3RydWN0aW9uIGZldGNoIHRyYW5zYWN0aW9ucworZXZlbnQ6MHg2OSBjb3VudGVyczowLDEgdW06ZWJsIG1pbmltdW06NTAwIG5hbWU6QlVTX1RSQU5fSU5WQUwgOiBudW1iZXIgb2YgaW52YWxpZGF0ZSB0cmFuc2FjdGlvbnMKK2V2ZW50OjB4NmEgY291bnRlcnM6MCwxIHVtOmVibCBtaW5pbXVtOjUwMCBuYW1lOkJVU19UUkFOX1BXUiA6IG51bWJlciBvZiBwYXJ0aWFsIHdyaXRlIHRyYW5zYWN0aW9ucworZXZlbnQ6MHg2YiBjb3VudGVyczowLDEgdW06ZWJsIG1pbmltdW06NTAwIG5hbWU6QlVTX1RSQU5TX1AgOiBudW1iZXIgb2YgcGFydGlhbCB0cmFuc2FjdGlvbnMKK2V2ZW50OjB4NmMgY291bnRlcnM6MCwxIHVtOmVibCBtaW5pbXVtOjUwMCBuYW1lOkJVU19UUkFOU19JTyA6IG51bWJlciBvZiBJL08gdHJhbnNhY3Rpb25zCitldmVudDoweDZkIGNvdW50ZXJzOjAsMSB1bTplYmwgbWluaW11bTo1MDAgbmFtZTpCVVNfVFJBTlNfREVGIDogbnVtYmVyIG9mIGRlZmVycmVkIHRyYW5zYWN0aW9ucworZXZlbnQ6MHg2ZSBjb3VudGVyczowLDEgdW06ZWJsIG1pbmltdW06NTAwIG5hbWU6QlVTX1RSQU5fQlVSU1QgOiBudW1iZXIgb2YgYnVyc3QgdHJhbnNhY3Rpb25zCitldmVudDoweDcwIGNvdW50ZXJzOjAsMSB1bTplYmwgbWluaW11bTo1MDAgbmFtZTpCVVNfVFJBTl9BTlkgOiBudW1iZXIgb2YgYWxsIHRyYW5zYWN0aW9ucworZXZlbnQ6MHg2ZiBjb3VudGVyczowLDEgdW06ZWJsIG1pbmltdW06NTAwIG5hbWU6QlVTX1RSQU5fTUVNIDogbnVtYmVyIG9mIG1lbW9yeSB0cmFuc2FjdGlvbnMKK2V2ZW50OjB4NjQgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpCVVNfREFUQV9SQ1YgOiBidXMgY3ljbGVzIHRoaXMgcHJvY2Vzc29yIGlzIHJlY2VpdmluZyBkYXRhCitldmVudDoweDYxIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QlVTX0JOUl9EUlYgOiBidXMgY3ljbGVzIHRoaXMgcHJvY2Vzc29yIGlzIGRyaXZpbmcgQk5SIHBpbgorZXZlbnQ6MHg3YSBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkJVU19ISVRfRFJWIDogYnVzIGN5Y2xlcyB0aGlzIHByb2Nlc3NvciBpcyBkcml2aW5nIEhJVCBwaW4KK2V2ZW50OjB4N2IgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpCVVNfSElUTV9EUlYgOiBidXMgY3ljbGVzIHRoaXMgcHJvY2Vzc29yIGlzIGRyaXZpbmcgSElUTSBwaW4KK2V2ZW50OjB4N2UgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpCVVNfU05PT1BfU1RBTEwgOiBjeWNsZXMgZHVyaW5nIGJ1cyBzbm9vcCBzdGFsbAorZXZlbnQ6MHhjMSBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTozMDAwIG5hbWU6Q09NUF9GTE9QX1JFVCA6IG51bWJlciBvZiBjb21wdXRhdGlvbmFsIEZQIG9wZXJhdGlvbnMgcmV0aXJlZAorZXZlbnQ6MHgxMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTozMDAwIG5hbWU6RkxPUFMgOiBudW1iZXIgb2YgY29tcHV0YXRpb25hbCBGUCBvcGVyYXRpb25zIGV4ZWN1dGVkCitldmVudDoweDExIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkZQX0FTU0lTVCA6IG51bWJlciBvZiBGUCBleGNlcHRpb25zIGhhbmRsZWQgYnkgbWljcm9jb2RlCitldmVudDoweDEyIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpNVUwgOiBudW1iZXIgb2YgbXVsdGlwbGllcworZXZlbnQ6MHgxMyBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpESVYgOiBudW1iZXIgb2YgZGl2aWRlcworZXZlbnQ6MHgxNCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6Q1lDTEVTX0RJVl9CVVNZIDogY3ljbGVzIGRpdmlkZXIgaXMgYnVzeQorZXZlbnQ6MHgwMyBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkxEX0JMT0NLUyA6IG51bWJlciBvZiBzdG9yZSBidWZmZXIgYmxvY2tzCitldmVudDoweDA0IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6U0JfRFJBSU5TIDogbnVtYmVyIG9mIHN0b3JlIGJ1ZmZlciBkcmFpbiBjeWNsZXMKK2V2ZW50OjB4MDUgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpNSVNBTElHTl9NRU1fUkVGIDogbnVtYmVyIG9mIG1pc2FsaWduZWQgZGF0YSBtZW1vcnkgcmVmZXJlbmNlcworZXZlbnQ6MHhjMCBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjYwMDAgbmFtZTpJTlNUX1JFVElSRUQgOiBudW1iZXIgb2YgaW5zdHJ1Y3Rpb25zIHJldGlyZWQKK2V2ZW50OjB4YzIgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo2MDAwIG5hbWU6VU9QU19SRVRJUkVEIDogbnVtYmVyIG9mIFVPUHMgcmV0aXJlZAorZXZlbnQ6MHhkMCBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjYwMDAgbmFtZTpJTlNUX0RFQ09ERUQgOiBudW1iZXIgb2YgaW5zdHJ1Y3Rpb25zIGRlY29kZWQKK2V2ZW50OjB4YzggY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpIV19JTlRfUlggOiBudW1iZXIgb2YgaGFyZHdhcmUgaW50ZXJydXB0cyByZWNlaXZlZAorZXZlbnQ6MHhjNiBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkNZQ0xFU19JTlRfTUFTS0VEIDogY3ljbGVzIGludGVycnVwdHMgYXJlIGRpc2FibGVkCitldmVudDoweGM3IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6Q1lDTEVTX0lOVF9QRU5ESU5HX0FORF9NQVNLRUQgOiBjeWNsZXMgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgd2l0aCBwZW5kaW5nIGludGVycnVwdHMKK2V2ZW50OjB4YzQgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpCUl9JTlNUX1JFVElSRUQgOiBudW1iZXIgb2YgYnJhbmNoIGluc3RydWN0aW9ucyByZXRpcmVkCitldmVudDoweGM1IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QlJfTUlTU19QUkVEX1JFVElSRUQgOiBudW1iZXIgb2YgbWlzcHJlZGljdGVkIGJyYW5jaGVzIHJldGlyZWQKK2V2ZW50OjB4YzkgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpCUl9UQUtFTl9SRVRJUkVEIDogbnVtYmVyIG9mIHRha2VuIGJyYW5jaGVzIHJldGlyZWQKK2V2ZW50OjB4Y2EgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpCUl9NSVNTX1BSRURfVEFLRU5fUkVUIDogbnVtYmVyIG9mIHRha2VuIG1pc3ByZWRpY3Rpb25zIGJyYW5jaGVzIHJldGlyZWQKK2V2ZW50OjB4ZTAgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpCUl9JTlNUX0RFQ09ERUQgOiBudW1iZXIgb2YgYnJhbmNoIGluc3RydWN0aW9ucyBkZWNvZGVkCitldmVudDoweGUyIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QlRCX01JU1NFUyA6IG51bWJlciBvZiBicmFuY2hlcyB0aGF0IG1pc3MgdGhlIEJUQgorZXZlbnQ6MHhlNCBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkJSX0JPR1VTIDogbnVtYmVyIG9mIGJvZ3VzIGJyYW5jaGVzCitldmVudDoweGU2IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QkFDTEVBUlMgOiBudW1iZXIgb2YgdGltZXMgQkFDTEVBUiBpcyBhc3NlcnRlZAorZXZlbnQ6MHhhMiBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlJFU09VUkNFX1NUQUxMUyA6IGN5Y2xlcyBkdXJpbmcgcmVzb3VyY2UgcmVsYXRlZCBzdGFsbHMKK2V2ZW50OjB4ZDIgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpQQVJUSUFMX1JBVF9TVEFMTFMgOiBjeWNsZXMgb3IgZXZlbnRzIGZvciBwYXJ0aWFsIHN0YWxscworZXZlbnQ6MHgwNiBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlNFR01FTlRfUkVHX0xPQURTIDogbnVtYmVyIG9mIHNlZ21lbnQgcmVnaXN0ZXIgbG9hZHMKK2V2ZW50OjB4YjAgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTozMDAwIG5hbWU6TU1YX0lOU1RSX0VYRUMgOiBudW1iZXIgb2YgTU1YIGluc3RydWN0aW9ucyBleGVjdXRlZAorZXZlbnQ6MHhiMSBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjMwMDAgbmFtZTpNTVhfU0FUX0lOU1RSX0VYRUMgOiBudW1iZXIgb2YgTU1YIHNhdHVyYXRpbmcgaW5zdHJ1Y3Rpb25zIGV4ZWN1dGVkCitldmVudDoweGIyIGNvdW50ZXJzOjAsMSB1bTptbXhfdW9wcyBtaW5pbXVtOjMwMDAgbmFtZTpNTVhfVU9QU19FWEVDIDogbnVtYmVyIG9mIE1NWCBVT1BTIGV4ZWN1dGVkCitldmVudDoweGIzIGNvdW50ZXJzOjAsMSB1bTptbXhfaW5zdHJfdHlwZV9leGVjIG1pbmltdW06MzAwMCBuYW1lOk1NWF9JTlNUUl9UWVBFX0VYRUMgOiBudW1iZXIgb2YgTU1YIHBhY2tpbmcgaW5zdHJ1Y3Rpb25zCitldmVudDoweGNjIGNvdW50ZXJzOjAsMSB1bTptbXhfdHJhbnMgbWluaW11bTozMDAwIG5hbWU6RlBfTU1YX1RSQU5TIDogTU1YLWZsb2F0aW5nIHBvaW50IHRyYW5zaXRpb25zCitldmVudDoweGNkIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6TU1YX0FTU0lTVCA6IG51bWJlciBvZiBFTU1TIGluc3RydWN0aW9ucyBleGVjdXRlZAorZXZlbnQ6MHhjZSBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjMwMDAgbmFtZTpNTVhfSU5TVFJfUkVUIDogbnVtYmVyIG9mIE1NWCBpbnN0cnVjdGlvbnMgcmV0aXJlZAorZXZlbnQ6MHhkNCBjb3VudGVyczowLDEgdW06c2VnX3JlbmFtZSBtaW5pbXVtOjUwMCBuYW1lOlNFR19SRU5BTUVfU1RBTExTIDogbnVtYmVyIG9mIHNlZ21lbnQgcmVnaXN0ZXIgcmVuYW1pbmcgc3RhbGxzCitldmVudDoweGQ1IGNvdW50ZXJzOjAsMSB1bTpzZWdfcmVuYW1lIG1pbmltdW06NTAwIG5hbWU6U0VHX1JFR19SRU5BTUVTIDogbnVtYmVyIG9mIHNlZ21lbnQgcmVnaXN0ZXIgcmVuYW1lcworZXZlbnQ6MHhkNiBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlJFVF9TRUdfUkVOQU1FUyA6IG51bWJlciBvZiBzZWdtZW50IHJlZ2lzdGVyIHJlbmFtZSBldmVudHMgcmV0aXJlZApkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL2kzODYvcGlpL3VuaXRfbWFza3MgYi9vcHJvZmlsZS0wLjkuNy9ldmVudHMvaTM4Ni9waWkvdW5pdF9tYXNrcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDU1ODY3Ci0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL2kzODYvcGlpL3VuaXRfbWFza3MKQEAgLTAsMCArMSwzNCBAQAorIyBQZW50aXVtIElJIHBvc3NpYmxlIHVuaXQgbWFza3MKKyMKK25hbWU6emVybyB0eXBlOm1hbmRhdG9yeSBkZWZhdWx0OjB4MAorCTB4MCBObyB1bml0IG1hc2sKK25hbWU6bWVzaSB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDBmCisJMHgwOCAoTSlvZGlmaWVkIGNhY2hlIHN0YXRlCisJMHgwNCAoRSl4Y2x1c2l2ZSBjYWNoZSBzdGF0ZQorCTB4MDIgKFMpaGFyZWQgY2FjaGUgc3RhdGUKKwkweDAxIChJKW52YWxpZCBjYWNoZSBzdGF0ZQorCTB4MGYgQWxsIGNhY2hlIHN0YXRlcworbmFtZTplYmwgdHlwZTpleGNsdXNpdmUgZGVmYXVsdDoweDIwCisJMHgwMCBzZWxmLWdlbmVyYXRlZCB0cmFuc2FjdGlvbnMKKwkweDIwIGFueSB0cmFuc2FjdGlvbnMKK25hbWU6bW14X3VvcHMgdHlwZTptYW5kYXRvcnkgZGVmYXVsdDoweGYKKwkweDBmIG1hbmRhdG9yeQorbmFtZTptbXhfaW5zdHJfdHlwZV9leGVjIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4M2YKKwkweDAxIE1NWCBwYWNrZWQgbXVsdGlwbGllcworCTB4MDIgTU1YIHBhY2tlZCBzaGlmdHMKKwkweDA0IE1NWCBwYWNrIG9wZXJhdGlvbnMKKwkweDA4IE1NWCB1bnBhY2sgb3BlcmF0aW9ucworCTB4MTAgTU1YIHBhY2tlZCBsb2dpY2FsCisJMHgyMCBNTVggcGFja2VkIGFyaXRobWV0aWMKKwkweDNmIGFsbCBvZiB0aGUgYWJvdmUKK25hbWU6bW14X3RyYW5zIHR5cGU6ZXhjbHVzaXZlIGRlZmF1bHQ6MHgwCisJMHgwMCBNTVgtPmZsb2F0IG9wZXJhdGlvbnMKKwkweDAxIGZsb2F0LT5NTVggb3BlcmF0aW9ucworbmFtZTpzZWdfcmVuYW1lIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4ZgorCTB4MSBFUyByZWdpc3RlcgorCTB4MiBEUyByZWdpc3RlcgorCTB4NCBGUyByZWdpc3RlcgorIyBJQSBtYW51YWwgc2F5cyB0aGlzIGlzIGFjdHVhbGx5IEZTIGFnYWluIC0gbm8gbWVudGlvbiBpbiBlcnJhdGEKKyMgYnV0IHRlc3Qgc2hvdyB0aGF0IGlzIHJlYWxseSBhIHR5cG8gZXJyb3IgZnJvbSBJQSBtYW51YWwKKwkweDggR1MgcmVnaXN0ZXIKKwkweGYgRVMsIERTLCBGUywgR1MgcmVnaXN0ZXJzCmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9ldmVudHMvaTM4Ni9waWlpL2V2ZW50cyBiL29wcm9maWxlLTAuOS43L2V2ZW50cy9pMzg2L3BpaWkvZXZlbnRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1YmI0MWYKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9ldmVudHMvaTM4Ni9waWlpL2V2ZW50cwpAQCAtMCwwICsxLDgwIEBACisjIFBlbnRpdW0gSUlJIGV2ZW50cworIworZXZlbnQ6MHg3OSBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjYwMDAgbmFtZTpDUFVfQ0xLX1VOSEFMVEVEIDogY2xvY2tzIHByb2Nlc3NvciBpcyBub3QgaGFsdGVkCitldmVudDoweDQzIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6REFUQV9NRU1fUkVGUyA6IGFsbCBtZW1vcnkgcmVmZXJlbmNlcywgY2FjaGFibGUgYW5kIG5vbgorZXZlbnQ6MHg0NSBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRDVV9MSU5FU19JTiA6IHRvdGFsIGxpbmVzIGFsbG9jYXRlZCBpbiB0aGUgRENVCitldmVudDoweDQ2IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RENVX01fTElORVNfSU4gOiBudW1iZXIgb2YgTSBzdGF0ZSBsaW5lcyBhbGxvY2F0ZWQgaW4gRENVCitldmVudDoweDQ3IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RENVX01fTElORVNfT1VUIDogbnVtYmVyIG9mIE0gbGluZXMgZXZpY3RlZCBmcm9tIHRoZSBEQ1UKK2V2ZW50OjB4NDggY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpEQ1VfTUlTU19PVVRTVEFORElORyA6IG51bWJlciBvZiBjeWNsZXMgd2hpbGUgRENVIG1pc3Mgb3V0c3RhbmRpbmcKK2V2ZW50OjB4ODAgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJRlVfSUZFVENIIDogbnVtYmVyIG9mIG5vbi9jYWNoYWJsZSBpbnN0cnVjdGlvbiBmZXRjaGVzCitldmVudDoweDgxIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SUZVX0lGRVRDSF9NSVNTIDogbnVtYmVyIG9mIGluc3RydWN0aW9uIGZldGNoIG1pc3NlcworZXZlbnQ6MHg4NSBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOklUTEJfTUlTUyA6IG51bWJlciBvZiBJVExCIG1pc3NlcworZXZlbnQ6MHg4NiBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOklGVV9NRU1fU1RBTEwgOiBjeWNsZXMgaW5zdHJ1Y3Rpb24gZmV0Y2ggcGlwZSBpcyBzdGFsbGVkCitldmVudDoweDg3IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SUxEX1NUQUxMIDogY3ljbGVzIGluc3RydWN0aW9uIGxlbmd0aCBkZWNvZGVyIGlzIHN0YWxsZWQKK2V2ZW50OjB4MjggY291bnRlcnM6MCwxIHVtOm1lc2kgbWluaW11bTo1MDAgbmFtZTpMMl9JRkVUQ0ggOiBudW1iZXIgb2YgTDIgaW5zdHJ1Y3Rpb24gZmV0Y2hlcworZXZlbnQ6MHgyOSBjb3VudGVyczowLDEgdW06bWVzaSBtaW5pbXVtOjUwMCBuYW1lOkwyX0xEIDogbnVtYmVyIG9mIEwyIGRhdGEgbG9hZHMKK2V2ZW50OjB4MmEgY291bnRlcnM6MCwxIHVtOm1lc2kgbWluaW11bTo1MDAgbmFtZTpMMl9TVCA6IG51bWJlciBvZiBMMiBkYXRhIHN0b3JlcworZXZlbnQ6MHgyNCBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkwyX0xJTkVTX0lOIDogbnVtYmVyIG9mIGFsbG9jYXRlZCBsaW5lcyBpbiBMMgorZXZlbnQ6MHgyNiBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkwyX0xJTkVTX09VVCA6IG51bWJlciBvZiByZWNvdmVyZWQgbGluZXMgZnJvbSBMMgorZXZlbnQ6MHgyNSBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkwyX01fTElORVNfSU5NIDogbnVtYmVyIG9mIG1vZGlmaWVkIGxpbmVzIGFsbG9jYXRlZCBpbiBMMgorZXZlbnQ6MHgyNyBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkwyX01fTElORVNfT1VUTSA6IG51bWJlciBvZiBtb2RpZmllZCBsaW5lcyByZW1vdmVkIGZyb20gTDIKK2V2ZW50OjB4MmUgY291bnRlcnM6MCwxIHVtOm1lc2kgbWluaW11bTo1MDAgbmFtZTpMMl9SUVNUUyA6IG51bWJlciBvZiBMMiByZXF1ZXN0cworZXZlbnQ6MHgyMSBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkwyX0FEUyA6IG51bWJlciBvZiBMMiBhZGRyZXNzIHN0cm9iZXMKK2V2ZW50OjB4MjIgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpMMl9EQlVTX0JVU1kgOiBudW1iZXIgb2YgY3ljbGVzIGRhdGEgYnVzIHdhcyBidXN5CitldmVudDoweDIzIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6TDJfREJVU19CVVNZX1JEIDogY3ljbGVzIGRhdGEgYnVzIHdhcyBidXN5IGluIHhmZXIgZnJvbSBMMiB0byBDUFUKK2V2ZW50OjB4NjIgY291bnRlcnM6MCwxIHVtOmVibCBtaW5pbXVtOjUwMCBuYW1lOkJVU19EUkRZX0NMT0NLUyA6IG51bWJlciBvZiBjbG9ja3MgRFJEWSBpcyBhc3NlcnRlZAorZXZlbnQ6MHg2MyBjb3VudGVyczowLDEgdW06ZWJsIG1pbmltdW06NTAwIG5hbWU6QlVTX0xPQ0tfQ0xPQ0tTIDogbnVtYmVyIG9mIGNsb2NrcyBMT0NLIGlzIGFzc2VydGVkCitldmVudDoweDYwIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QlVTX1JFUV9PVVRTVEFORElORyA6IG51bWJlciBvZiBvdXRzdGFuZGluZyBidXMgcmVxdWVzdHMKK2V2ZW50OjB4NjUgY291bnRlcnM6MCwxIHVtOmVibCBtaW5pbXVtOjUwMCBuYW1lOkJVU19UUkFOX0JSRCA6IG51bWJlciBvZiBidXJzdCByZWFkIHRyYW5zYWN0aW9ucworZXZlbnQ6MHg2NiBjb3VudGVyczowLDEgdW06ZWJsIG1pbmltdW06NTAwIG5hbWU6QlVTX1RSQU5fUkZPIDogbnVtYmVyIG9mIHJlYWQgZm9yIG93bmVyc2hpcCB0cmFuc2FjdGlvbnMKK2V2ZW50OjB4NjcgY291bnRlcnM6MCwxIHVtOmVibCBtaW5pbXVtOjUwMCBuYW1lOkJVU19UUkFOU19XQiA6IG51bWJlciBvZiB3cml0ZSBiYWNrIHRyYW5zYWN0aW9ucworZXZlbnQ6MHg2OCBjb3VudGVyczowLDEgdW06ZWJsIG1pbmltdW06NTAwIG5hbWU6QlVTX1RSQU5fSUZFVENIIDogbnVtYmVyIG9mIGluc3RydWN0aW9uIGZldGNoIHRyYW5zYWN0aW9ucworZXZlbnQ6MHg2OSBjb3VudGVyczowLDEgdW06ZWJsIG1pbmltdW06NTAwIG5hbWU6QlVTX1RSQU5fSU5WQUwgOiBudW1iZXIgb2YgaW52YWxpZGF0ZSB0cmFuc2FjdGlvbnMKK2V2ZW50OjB4NmEgY291bnRlcnM6MCwxIHVtOmVibCBtaW5pbXVtOjUwMCBuYW1lOkJVU19UUkFOX1BXUiA6IG51bWJlciBvZiBwYXJ0aWFsIHdyaXRlIHRyYW5zYWN0aW9ucworZXZlbnQ6MHg2YiBjb3VudGVyczowLDEgdW06ZWJsIG1pbmltdW06NTAwIG5hbWU6QlVTX1RSQU5TX1AgOiBudW1iZXIgb2YgcGFydGlhbCB0cmFuc2FjdGlvbnMKK2V2ZW50OjB4NmMgY291bnRlcnM6MCwxIHVtOmVibCBtaW5pbXVtOjUwMCBuYW1lOkJVU19UUkFOU19JTyA6IG51bWJlciBvZiBJL08gdHJhbnNhY3Rpb25zCitldmVudDoweDZkIGNvdW50ZXJzOjAsMSB1bTplYmwgbWluaW11bTo1MDAgbmFtZTpCVVNfVFJBTlNfREVGIDogbnVtYmVyIG9mIGRlZmVycmVkIHRyYW5zYWN0aW9ucworZXZlbnQ6MHg2ZSBjb3VudGVyczowLDEgdW06ZWJsIG1pbmltdW06NTAwIG5hbWU6QlVTX1RSQU5fQlVSU1QgOiBudW1iZXIgb2YgYnVyc3QgdHJhbnNhY3Rpb25zCitldmVudDoweDcwIGNvdW50ZXJzOjAsMSB1bTplYmwgbWluaW11bTo1MDAgbmFtZTpCVVNfVFJBTl9BTlkgOiBudW1iZXIgb2YgYWxsIHRyYW5zYWN0aW9ucworZXZlbnQ6MHg2ZiBjb3VudGVyczowLDEgdW06ZWJsIG1pbmltdW06NTAwIG5hbWU6QlVTX1RSQU5fTUVNIDogbnVtYmVyIG9mIG1lbW9yeSB0cmFuc2FjdGlvbnMKK2V2ZW50OjB4NjQgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpCVVNfREFUQV9SQ1YgOiBidXMgY3ljbGVzIHRoaXMgcHJvY2Vzc29yIGlzIHJlY2VpdmluZyBkYXRhCitldmVudDoweDYxIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QlVTX0JOUl9EUlYgOiBidXMgY3ljbGVzIHRoaXMgcHJvY2Vzc29yIGlzIGRyaXZpbmcgQk5SIHBpbgorZXZlbnQ6MHg3YSBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkJVU19ISVRfRFJWIDogYnVzIGN5Y2xlcyB0aGlzIHByb2Nlc3NvciBpcyBkcml2aW5nIEhJVCBwaW4KK2V2ZW50OjB4N2IgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpCVVNfSElUTV9EUlYgOiBidXMgY3ljbGVzIHRoaXMgcHJvY2Vzc29yIGlzIGRyaXZpbmcgSElUTSBwaW4KK2V2ZW50OjB4N2UgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpCVVNfU05PT1BfU1RBTEwgOiBjeWNsZXMgZHVyaW5nIGJ1cyBzbm9vcCBzdGFsbAorZXZlbnQ6MHhjMSBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTozMDAwIG5hbWU6Q09NUF9GTE9QX1JFVCA6IG51bWJlciBvZiBjb21wdXRhdGlvbmFsIEZQIG9wZXJhdGlvbnMgcmV0aXJlZAorZXZlbnQ6MHgxMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTozMDAwIG5hbWU6RkxPUFMgOiBudW1iZXIgb2YgY29tcHV0YXRpb25hbCBGUCBvcGVyYXRpb25zIGV4ZWN1dGVkCitldmVudDoweDExIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkZQX0FTU0lTVCA6IG51bWJlciBvZiBGUCBleGNlcHRpb25zIGhhbmRsZWQgYnkgbWljcm9jb2RlCitldmVudDoweDEyIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpNVUwgOiBudW1iZXIgb2YgbXVsdGlwbGllcworZXZlbnQ6MHgxMyBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpESVYgOiBudW1iZXIgb2YgZGl2aWRlcworZXZlbnQ6MHgxNCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6Q1lDTEVTX0RJVl9CVVNZIDogY3ljbGVzIGRpdmlkZXIgaXMgYnVzeQorZXZlbnQ6MHgwMyBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkxEX0JMT0NLUyA6IG51bWJlciBvZiBzdG9yZSBidWZmZXIgYmxvY2tzCitldmVudDoweDA0IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6U0JfRFJBSU5TIDogbnVtYmVyIG9mIHN0b3JlIGJ1ZmZlciBkcmFpbiBjeWNsZXMKK2V2ZW50OjB4MDUgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpNSVNBTElHTl9NRU1fUkVGIDogbnVtYmVyIG9mIG1pc2FsaWduZWQgZGF0YSBtZW1vcnkgcmVmZXJlbmNlcworZXZlbnQ6MHgwNyBjb3VudGVyczowLDEgdW06a25pX3ByZWZldGNoIG1pbmltdW06NTAwIG5hbWU6RU1PTl9LTklfUFJFRl9ESVNQQVRDSEVEIDogbnVtYmVyIG9mIEtOSSBwcmUtZmV0Y2gvd2Vha2x5IG9yZGVyZWQgaW5zbnMgZGlzcGF0Y2hlZAorZXZlbnQ6MHg0YiBjb3VudGVyczowLDEgdW06a25pX3ByZWZldGNoIG1pbmltdW06NTAwIG5hbWU6RU1PTl9LTklfUFJFRl9NSVNTIDogbnVtYmVyIG9mIEtOSSBwcmUtZmV0Y2gvd2Vha2x5IG9yZGVyZWQgaW5zbnMgdGhhdCBtaXNzIGFsbCBjYWNoZXMKK2V2ZW50OjB4YzAgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo2MDAwIG5hbWU6SU5TVF9SRVRJUkVEIDogbnVtYmVyIG9mIGluc3RydWN0aW9ucyByZXRpcmVkCitldmVudDoweGMyIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NjAwMCBuYW1lOlVPUFNfUkVUSVJFRCA6IG51bWJlciBvZiBVT1BzIHJldGlyZWQKK2V2ZW50OjB4ZDAgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo2MDAwIG5hbWU6SU5TVF9ERUNPREVEIDogbnVtYmVyIG9mIGluc3RydWN0aW9ucyBkZWNvZGVkCitldmVudDoweGQ4IGNvdW50ZXJzOjAsMSB1bTprbmlfaW5zdF9yZXRpcmVkIG1pbmltdW06MzAwMCBuYW1lOkVNT05fS05JX0lOU1RfUkVUSVJFRCA6IG51bWJlciBvZiBLTkkgaW5zdHJ1Y3Rpb25zIHJldGlyZWQKK2V2ZW50OjB4ZDkgY291bnRlcnM6MCwxIHVtOmtuaV9pbnN0X3JldGlyZWQgbWluaW11bTozMDAwIG5hbWU6RU1PTl9LTklfQ09NUF9JTlNUX1JFVCA6IG51bWJlciBvZiBLTkkgY29tcHV0YXRpb24gaW5zdHJ1Y3Rpb25zIHJldGlyZWQKK2V2ZW50OjB4YzggY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpIV19JTlRfUlggOiBudW1iZXIgb2YgaGFyZHdhcmUgaW50ZXJydXB0cyByZWNlaXZlZAorZXZlbnQ6MHhjNiBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkNZQ0xFU19JTlRfTUFTS0VEIDogY3ljbGVzIGludGVycnVwdHMgYXJlIGRpc2FibGVkCitldmVudDoweGM3IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6Q1lDTEVTX0lOVF9QRU5ESU5HX0FORF9NQVNLRUQgOiBjeWNsZXMgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgd2l0aCBwZW5kaW5nIGludGVycnVwdHMKK2V2ZW50OjB4YzQgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpCUl9JTlNUX1JFVElSRUQgOiBudW1iZXIgb2YgYnJhbmNoIGluc3RydWN0aW9ucyByZXRpcmVkCitldmVudDoweGM1IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QlJfTUlTU19QUkVEX1JFVElSRUQgOiBudW1iZXIgb2YgbWlzcHJlZGljdGVkIGJyYW5jaGVzIHJldGlyZWQKK2V2ZW50OjB4YzkgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpCUl9UQUtFTl9SRVRJUkVEIDogbnVtYmVyIG9mIHRha2VuIGJyYW5jaGVzIHJldGlyZWQKK2V2ZW50OjB4Y2EgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpCUl9NSVNTX1BSRURfVEFLRU5fUkVUIDogbnVtYmVyIG9mIHRha2VuIG1pc3ByZWRpY3Rpb25zIGJyYW5jaGVzIHJldGlyZWQKK2V2ZW50OjB4ZTAgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpCUl9JTlNUX0RFQ09ERUQgOiBudW1iZXIgb2YgYnJhbmNoIGluc3RydWN0aW9ucyBkZWNvZGVkCitldmVudDoweGUyIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QlRCX01JU1NFUyA6IG51bWJlciBvZiBicmFuY2hlcyB0aGF0IG1pc3MgdGhlIEJUQgorZXZlbnQ6MHhlNCBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkJSX0JPR1VTIDogbnVtYmVyIG9mIGJvZ3VzIGJyYW5jaGVzCitldmVudDoweGU2IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QkFDTEVBUlMgOiBudW1iZXIgb2YgdGltZXMgQkFDTEVBUiBpcyBhc3NlcnRlZAorZXZlbnQ6MHhhMiBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlJFU09VUkNFX1NUQUxMUyA6IGN5Y2xlcyBkdXJpbmcgcmVzb3VyY2UgcmVsYXRlZCBzdGFsbHMKK2V2ZW50OjB4ZDIgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpQQVJUSUFMX1JBVF9TVEFMTFMgOiBjeWNsZXMgb3IgZXZlbnRzIGZvciBwYXJ0aWFsIHN0YWxscworZXZlbnQ6MHgwNiBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlNFR01FTlRfUkVHX0xPQURTIDogbnVtYmVyIG9mIHNlZ21lbnQgcmVnaXN0ZXIgbG9hZHMKK2V2ZW50OjB4YjEgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTozMDAwIG5hbWU6TU1YX1NBVF9JTlNUUl9FWEVDIDogbnVtYmVyIG9mIE1NWCBzYXR1cmF0aW5nIGluc3RydWN0aW9ucyBleGVjdXRlZAorZXZlbnQ6MHhiMiBjb3VudGVyczowLDEgdW06bW14X3VvcHMgbWluaW11bTozMDAwIG5hbWU6TU1YX1VPUFNfRVhFQyA6IG51bWJlciBvZiBNTVggVU9QUyBleGVjdXRlZAorZXZlbnQ6MHhiMyBjb3VudGVyczowLDEgdW06bW14X2luc3RyX3R5cGVfZXhlYyBtaW5pbXVtOjMwMDAgbmFtZTpNTVhfSU5TVFJfVFlQRV9FWEVDIDogbnVtYmVyIG9mIE1NWCBwYWNraW5nIGluc3RydWN0aW9ucworZXZlbnQ6MHhjYyBjb3VudGVyczowLDEgdW06bW14X3RyYW5zIG1pbmltdW06MzAwMCBuYW1lOkZQX01NWF9UUkFOUyA6IE1NWC1mbG9hdGluZyBwb2ludCB0cmFuc2l0aW9ucworZXZlbnQ6MHhjZCBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOk1NWF9BU1NJU1QgOiBudW1iZXIgb2YgRU1NUyBpbnN0cnVjdGlvbnMgZXhlY3V0ZWQKK2V2ZW50OjB4Y2UgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTozMDAwIG5hbWU6TU1YX0lOU1RSX1JFVCA6IG51bWJlciBvZiBNTVggaW5zdHJ1Y3Rpb25zIHJldGlyZWQKZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2V2ZW50cy9pMzg2L3BpaWkvdW5pdF9tYXNrcyBiL29wcm9maWxlLTAuOS43L2V2ZW50cy9pMzg2L3BpaWkvdW5pdF9tYXNrcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZmVhOTgwCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL2kzODYvcGlpaS91bml0X21hc2tzCkBAIC0wLDAgKzEsMzYgQEAKKyMgUGVudGl1bSBJSUkgcG9zc2libGUgdW5pdCBtYXNrcworIworbmFtZTp6ZXJvIHR5cGU6bWFuZGF0b3J5IGRlZmF1bHQ6MHgwCisJMHgwIE5vIHVuaXQgbWFzaworbmFtZTptZXNpIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MGYKKwkweDA4IChNKW9kaWZpZWQgY2FjaGUgc3RhdGUKKwkweDA0IChFKXhjbHVzaXZlIGNhY2hlIHN0YXRlCisJMHgwMiAoUyloYXJlZCBjYWNoZSBzdGF0ZQorCTB4MDEgKEkpbnZhbGlkIGNhY2hlIHN0YXRlCisJMHgwZiBBbGwgY2FjaGUgc3RhdGVzCituYW1lOmVibCB0eXBlOmV4Y2x1c2l2ZSBkZWZhdWx0OjB4MjAKKwkweDAwIHNlbGYtZ2VuZXJhdGVkIHRyYW5zYWN0aW9ucworCTB4MjAgYW55IHRyYW5zYWN0aW9ucworbmFtZTprbmlfcHJlZmV0Y2ggdHlwZTpleGNsdXNpdmUgZGVmYXVsdDoweDAKKwkweDAwIHByZWZldGNoIE5UQQorCTB4MDEgcHJlZmV0Y2ggVDEKKwkweDAyIHByZWZldGNoIFQyCisJMHgwMyB3ZWFrbHktb3JkZXJlZCBzdG9yZXMKKyMgdGhpcyBiaXRtYXNrIGNhbiBzZWVtcyB3ZWlyZHMgYnV0IGlzIGNvcnJlY3QsIG5vdGUgdGhlcmUgaXMgbm8gd2F5IHRvIG9ubHkKKyMgY291bnQgc2NhbGFyIFNJTUQgaW5zdHJ1Y3Rpb25zCituYW1lOmtuaV9pbnN0X3JldGlyZWQgdHlwZTpleGNsdXNpdmUgZGVmYXVsdDoweDAKKwkweDAwIHBhY2tlZCBhbmQgc2NhbGFyCisJMHgwMSBwYWNrZWQKK25hbWU6bW14X3VvcHMgdHlwZTptYW5kYXRvcnkgZGVmYXVsdDoweGYKKwkweDBmIG1hbmRhdG9yeQorbmFtZTptbXhfaW5zdHJfdHlwZV9leGVjIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4M2YKKwkweDAxIE1NWCBwYWNrZWQgbXVsdGlwbGllcworCTB4MDIgTU1YIHBhY2tlZCBzaGlmdHMKKwkweDA0IE1NWCBwYWNrIG9wZXJhdGlvbnMKKwkweDA4IE1NWCB1bnBhY2sgb3BlcmF0aW9ucworCTB4MTAgTU1YIHBhY2tlZCBsb2dpY2FsCisJMHgyMCBNTVggcGFja2VkIGFyaXRobWV0aWMKKwkweDNmIGFsbCBvZiB0aGUgYWJvdmUKK25hbWU6bW14X3RyYW5zIHR5cGU6ZXhjbHVzaXZlIGRlZmF1bHQ6MHgwCisJMHgwMCBNTVgtPmZsb2F0IG9wZXJhdGlvbnMKKwkweDAxIGZsb2F0LT5NTVggb3BlcmF0aW9ucwpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL2kzODYvcHByby9ldmVudHMgYi9vcHJvZmlsZS0wLjkuNy9ldmVudHMvaTM4Ni9wcHJvL2V2ZW50cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTgyYmMzCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL2kzODYvcHByby9ldmVudHMKQEAgLTAsMCArMSw3MCBAQAorIyBQZW50aXVtIFBybyBldmVudHMKKyMKK2V2ZW50OjB4NzkgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo2MDAwIG5hbWU6Q1BVX0NMS19VTkhBTFRFRCA6IGNsb2NrcyBwcm9jZXNzb3IgaXMgbm90IGhhbHRlZAorZXZlbnQ6MHg0MyBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRBVEFfTUVNX1JFRlMgOiBhbGwgbWVtb3J5IHJlZmVyZW5jZXMsIGNhY2hhYmxlIGFuZCBub24KK2V2ZW50OjB4NDUgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpEQ1VfTElORVNfSU4gOiB0b3RhbCBsaW5lcyBhbGxvY2F0ZWQgaW4gdGhlIERDVQorZXZlbnQ6MHg0NiBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRDVV9NX0xJTkVTX0lOIDogbnVtYmVyIG9mIE0gc3RhdGUgbGluZXMgYWxsb2NhdGVkIGluIERDVQorZXZlbnQ6MHg0NyBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRDVV9NX0xJTkVTX09VVCA6IG51bWJlciBvZiBNIGxpbmVzIGV2aWN0ZWQgZnJvbSB0aGUgRENVCitldmVudDoweDQ4IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RENVX01JU1NfT1VUU1RBTkRJTkcgOiBudW1iZXIgb2YgY3ljbGVzIHdoaWxlIERDVSBtaXNzIG91dHN0YW5kaW5nCitldmVudDoweDgwIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SUZVX0lGRVRDSCA6IG51bWJlciBvZiBub24vY2FjaGFibGUgaW5zdHJ1Y3Rpb24gZmV0Y2hlcworZXZlbnQ6MHg4MSBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOklGVV9JRkVUQ0hfTUlTUyA6IG51bWJlciBvZiBpbnN0cnVjdGlvbiBmZXRjaCBtaXNzZXMKK2V2ZW50OjB4ODUgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJVExCX01JU1MgOiBudW1iZXIgb2YgSVRMQiBtaXNzZXMKK2V2ZW50OjB4ODYgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJRlVfTUVNX1NUQUxMIDogY3ljbGVzIGluc3RydWN0aW9uIGZldGNoIHBpcGUgaXMgc3RhbGxlZAorZXZlbnQ6MHg4NyBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOklMRF9TVEFMTCA6IGN5Y2xlcyBpbnN0cnVjdGlvbiBsZW5ndGggZGVjb2RlciBpcyBzdGFsbGVkCitldmVudDoweDI4IGNvdW50ZXJzOjAsMSB1bTptZXNpIG1pbmltdW06NTAwIG5hbWU6TDJfSUZFVENIIDogbnVtYmVyIG9mIEwyIGluc3RydWN0aW9uIGZldGNoZXMKK2V2ZW50OjB4MjkgY291bnRlcnM6MCwxIHVtOm1lc2kgbWluaW11bTo1MDAgbmFtZTpMMl9MRCA6IG51bWJlciBvZiBMMiBkYXRhIGxvYWRzCitldmVudDoweDJhIGNvdW50ZXJzOjAsMSB1bTptZXNpIG1pbmltdW06NTAwIG5hbWU6TDJfU1QgOiBudW1iZXIgb2YgTDIgZGF0YSBzdG9yZXMKK2V2ZW50OjB4MjQgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpMMl9MSU5FU19JTiA6IG51bWJlciBvZiBhbGxvY2F0ZWQgbGluZXMgaW4gTDIKK2V2ZW50OjB4MjYgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpMMl9MSU5FU19PVVQgOiBudW1iZXIgb2YgcmVjb3ZlcmVkIGxpbmVzIGZyb20gTDIKK2V2ZW50OjB4MjUgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpMMl9NX0xJTkVTX0lOTSA6IG51bWJlciBvZiBtb2RpZmllZCBsaW5lcyBhbGxvY2F0ZWQgaW4gTDIKK2V2ZW50OjB4MjcgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpMMl9NX0xJTkVTX09VVE0gOiBudW1iZXIgb2YgbW9kaWZpZWQgbGluZXMgcmVtb3ZlZCBmcm9tIEwyCitldmVudDoweDJlIGNvdW50ZXJzOjAsMSB1bTptZXNpIG1pbmltdW06NTAwIG5hbWU6TDJfUlFTVFMgOiBudW1iZXIgb2YgTDIgcmVxdWVzdHMKK2V2ZW50OjB4MjEgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpMMl9BRFMgOiBudW1iZXIgb2YgTDIgYWRkcmVzcyBzdHJvYmVzCitldmVudDoweDIyIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6TDJfREJVU19CVVNZIDogbnVtYmVyIG9mIGN5Y2xlcyBkYXRhIGJ1cyB3YXMgYnVzeQorZXZlbnQ6MHgyMyBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkwyX0RCVVNfQlVTWV9SRCA6IGN5Y2xlcyBkYXRhIGJ1cyB3YXMgYnVzeSBpbiB4ZmVyIGZyb20gTDIgdG8gQ1BVCitldmVudDoweDYyIGNvdW50ZXJzOjAsMSB1bTplYmwgbWluaW11bTo1MDAgbmFtZTpCVVNfRFJEWV9DTE9DS1MgOiBudW1iZXIgb2YgY2xvY2tzIERSRFkgaXMgYXNzZXJ0ZWQKK2V2ZW50OjB4NjMgY291bnRlcnM6MCwxIHVtOmVibCBtaW5pbXVtOjUwMCBuYW1lOkJVU19MT0NLX0NMT0NLUyA6IG51bWJlciBvZiBjbG9ja3MgTE9DSyBpcyBhc3NlcnRlZAorZXZlbnQ6MHg2MCBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkJVU19SRVFfT1VUU1RBTkRJTkcgOiBudW1iZXIgb2Ygb3V0c3RhbmRpbmcgYnVzIHJlcXVlc3RzCitldmVudDoweDY1IGNvdW50ZXJzOjAsMSB1bTplYmwgbWluaW11bTo1MDAgbmFtZTpCVVNfVFJBTl9CUkQgOiBudW1iZXIgb2YgYnVyc3QgcmVhZCB0cmFuc2FjdGlvbnMKK2V2ZW50OjB4NjYgY291bnRlcnM6MCwxIHVtOmVibCBtaW5pbXVtOjUwMCBuYW1lOkJVU19UUkFOX1JGTyA6IG51bWJlciBvZiByZWFkIGZvciBvd25lcnNoaXAgdHJhbnNhY3Rpb25zCitldmVudDoweDY3IGNvdW50ZXJzOjAsMSB1bTplYmwgbWluaW11bTo1MDAgbmFtZTpCVVNfVFJBTlNfV0IgOiBudW1iZXIgb2Ygd3JpdGUgYmFjayB0cmFuc2FjdGlvbnMKK2V2ZW50OjB4NjggY291bnRlcnM6MCwxIHVtOmVibCBtaW5pbXVtOjUwMCBuYW1lOkJVU19UUkFOX0lGRVRDSCA6IG51bWJlciBvZiBpbnN0cnVjdGlvbiBmZXRjaCB0cmFuc2FjdGlvbnMKK2V2ZW50OjB4NjkgY291bnRlcnM6MCwxIHVtOmVibCBtaW5pbXVtOjUwMCBuYW1lOkJVU19UUkFOX0lOVkFMIDogbnVtYmVyIG9mIGludmFsaWRhdGUgdHJhbnNhY3Rpb25zCitldmVudDoweDZhIGNvdW50ZXJzOjAsMSB1bTplYmwgbWluaW11bTo1MDAgbmFtZTpCVVNfVFJBTl9QV1IgOiBudW1iZXIgb2YgcGFydGlhbCB3cml0ZSB0cmFuc2FjdGlvbnMKK2V2ZW50OjB4NmIgY291bnRlcnM6MCwxIHVtOmVibCBtaW5pbXVtOjUwMCBuYW1lOkJVU19UUkFOU19QIDogbnVtYmVyIG9mIHBhcnRpYWwgdHJhbnNhY3Rpb25zCitldmVudDoweDZjIGNvdW50ZXJzOjAsMSB1bTplYmwgbWluaW11bTo1MDAgbmFtZTpCVVNfVFJBTlNfSU8gOiBudW1iZXIgb2YgSS9PIHRyYW5zYWN0aW9ucworZXZlbnQ6MHg2ZCBjb3VudGVyczowLDEgdW06ZWJsIG1pbmltdW06NTAwIG5hbWU6QlVTX1RSQU5TX0RFRiA6IG51bWJlciBvZiBkZWZlcnJlZCB0cmFuc2FjdGlvbnMKK2V2ZW50OjB4NmUgY291bnRlcnM6MCwxIHVtOmVibCBtaW5pbXVtOjUwMCBuYW1lOkJVU19UUkFOX0JVUlNUIDogbnVtYmVyIG9mIGJ1cnN0IHRyYW5zYWN0aW9ucworZXZlbnQ6MHg3MCBjb3VudGVyczowLDEgdW06ZWJsIG1pbmltdW06NTAwIG5hbWU6QlVTX1RSQU5fQU5ZIDogbnVtYmVyIG9mIGFsbCB0cmFuc2FjdGlvbnMKK2V2ZW50OjB4NmYgY291bnRlcnM6MCwxIHVtOmVibCBtaW5pbXVtOjUwMCBuYW1lOkJVU19UUkFOX01FTSA6IG51bWJlciBvZiBtZW1vcnkgdHJhbnNhY3Rpb25zCitldmVudDoweDY0IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QlVTX0RBVEFfUkNWIDogYnVzIGN5Y2xlcyB0aGlzIHByb2Nlc3NvciBpcyByZWNlaXZpbmcgZGF0YQorZXZlbnQ6MHg2MSBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkJVU19CTlJfRFJWIDogYnVzIGN5Y2xlcyB0aGlzIHByb2Nlc3NvciBpcyBkcml2aW5nIEJOUiBwaW4KK2V2ZW50OjB4N2EgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpCVVNfSElUX0RSViA6IGJ1cyBjeWNsZXMgdGhpcyBwcm9jZXNzb3IgaXMgZHJpdmluZyBISVQgcGluCitldmVudDoweDdiIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QlVTX0hJVE1fRFJWIDogYnVzIGN5Y2xlcyB0aGlzIHByb2Nlc3NvciBpcyBkcml2aW5nIEhJVE0gcGluCitldmVudDoweDdlIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QlVTX1NOT09QX1NUQUxMIDogY3ljbGVzIGR1cmluZyBidXMgc25vb3Agc3RhbGwKK2V2ZW50OjB4YzEgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MzAwMCBuYW1lOkNPTVBfRkxPUF9SRVQgOiBudW1iZXIgb2YgY29tcHV0YXRpb25hbCBGUCBvcGVyYXRpb25zIHJldGlyZWQKK2V2ZW50OjB4MTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MzAwMCBuYW1lOkZMT1BTIDogbnVtYmVyIG9mIGNvbXB1dGF0aW9uYWwgRlAgb3BlcmF0aW9ucyBleGVjdXRlZAorZXZlbnQ6MHgxMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpGUF9BU1NJU1QgOiBudW1iZXIgb2YgRlAgZXhjZXB0aW9ucyBoYW5kbGVkIGJ5IG1pY3JvY29kZQorZXZlbnQ6MHgxMiBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6TVVMIDogbnVtYmVyIG9mIG11bHRpcGxpZXMKK2V2ZW50OjB4MTMgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RElWIDogbnVtYmVyIG9mIGRpdmlkZXMKK2V2ZW50OjB4MTQgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOkNZQ0xFU19ESVZfQlVTWSA6IGN5Y2xlcyBkaXZpZGVyIGlzIGJ1c3kKK2V2ZW50OjB4MDMgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpMRF9CTE9DS1MgOiBudW1iZXIgb2Ygc3RvcmUgYnVmZmVyIGJsb2NrcworZXZlbnQ6MHgwNCBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlNCX0RSQUlOUyA6IG51bWJlciBvZiBzdG9yZSBidWZmZXIgZHJhaW4gY3ljbGVzCitldmVudDoweDA1IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6TUlTQUxJR05fTUVNX1JFRiA6IG51bWJlciBvZiBtaXNhbGlnbmVkIGRhdGEgbWVtb3J5IHJlZmVyZW5jZXMKK2V2ZW50OjB4YzAgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo2MDAwIG5hbWU6SU5TVF9SRVRJUkVEIDogbnVtYmVyIG9mIGluc3RydWN0aW9ucyByZXRpcmVkCitldmVudDoweGMyIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NjAwMCBuYW1lOlVPUFNfUkVUSVJFRCA6IG51bWJlciBvZiBVT1BzIHJldGlyZWQKK2V2ZW50OjB4ZDAgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo2MDAwIG5hbWU6SU5TVF9ERUNPREVEIDogbnVtYmVyIG9mIGluc3RydWN0aW9ucyBkZWNvZGVkCitldmVudDoweGM4IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SFdfSU5UX1JYIDogbnVtYmVyIG9mIGhhcmR3YXJlIGludGVycnVwdHMgcmVjZWl2ZWQKK2V2ZW50OjB4YzYgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpDWUNMRVNfSU5UX01BU0tFRCA6IGN5Y2xlcyBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZAorZXZlbnQ6MHhjNyBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkNZQ0xFU19JTlRfUEVORElOR19BTkRfTUFTS0VEIDogY3ljbGVzIGludGVycnVwdHMgYXJlIGRpc2FibGVkIHdpdGggcGVuZGluZyBpbnRlcnJ1cHRzCitldmVudDoweGM0IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QlJfSU5TVF9SRVRJUkVEIDogbnVtYmVyIG9mIGJyYW5jaCBpbnN0cnVjdGlvbnMgcmV0aXJlZAorZXZlbnQ6MHhjNSBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkJSX01JU1NfUFJFRF9SRVRJUkVEIDogbnVtYmVyIG9mIG1pc3ByZWRpY3RlZCBicmFuY2hlcyByZXRpcmVkCitldmVudDoweGM5IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QlJfVEFLRU5fUkVUSVJFRCA6IG51bWJlciBvZiB0YWtlbiBicmFuY2hlcyByZXRpcmVkCitldmVudDoweGNhIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QlJfTUlTU19QUkVEX1RBS0VOX1JFVCA6IG51bWJlciBvZiB0YWtlbiBtaXNwcmVkaWN0aW9ucyBicmFuY2hlcyByZXRpcmVkCitldmVudDoweGUwIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QlJfSU5TVF9ERUNPREVEIDogbnVtYmVyIG9mIGJyYW5jaCBpbnN0cnVjdGlvbnMgZGVjb2RlZAorZXZlbnQ6MHhlMiBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkJUQl9NSVNTRVMgOiBudW1iZXIgb2YgYnJhbmNoZXMgdGhhdCBtaXNzIHRoZSBCVEIKK2V2ZW50OjB4ZTQgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpCUl9CT0dVUyA6IG51bWJlciBvZiBib2d1cyBicmFuY2hlcworZXZlbnQ6MHhlNiBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkJBQ0xFQVJTIDogbnVtYmVyIG9mIHRpbWVzIEJBQ0xFQVIgaXMgYXNzZXJ0ZWQKK2V2ZW50OjB4YTIgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpSRVNPVVJDRV9TVEFMTFMgOiBjeWNsZXMgZHVyaW5nIHJlc291cmNlIHJlbGF0ZWQgc3RhbGxzCitldmVudDoweGQyIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6UEFSVElBTF9SQVRfU1RBTExTIDogY3ljbGVzIG9yIGV2ZW50cyBmb3IgcGFydGlhbCBzdGFsbHMKK2V2ZW50OjB4MDYgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpTRUdNRU5UX1JFR19MT0FEUyA6IG51bWJlciBvZiBzZWdtZW50IHJlZ2lzdGVyIGxvYWRzCmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9ldmVudHMvaTM4Ni9wcHJvL3VuaXRfbWFza3MgYi9vcHJvZmlsZS0wLjkuNy9ldmVudHMvaTM4Ni9wcHJvL3VuaXRfbWFza3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTU5YjhiNQotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2V2ZW50cy9pMzg2L3Bwcm8vdW5pdF9tYXNrcwpAQCAtMCwwICsxLDEzIEBACisjIFBlbnRpdW0gUHJvIHBvc3NpYmxlIHVuaXQgbWFza3MKKyMKK25hbWU6emVybyB0eXBlOm1hbmRhdG9yeSBkZWZhdWx0OjB4MAorCTB4MCBObyB1bml0IG1hc2sKK25hbWU6bWVzaSB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDBmCisJMHgwOCAoTSlvZGlmaWVkIGNhY2hlIHN0YXRlCisJMHgwNCAoRSl4Y2x1c2l2ZSBjYWNoZSBzdGF0ZQorCTB4MDIgKFMpaGFyZWQgY2FjaGUgc3RhdGUKKwkweDAxIChJKW52YWxpZCBjYWNoZSBzdGF0ZQorCTB4MGYgQWxsIGNhY2hlIHN0YXRlcworbmFtZTplYmwgdHlwZTpleGNsdXNpdmUgZGVmYXVsdDoweDIwCisJMHgwMCBzZWxmLWdlbmVyYXRlZCB0cmFuc2FjdGlvbnMKKwkweDIwIGFueSB0cmFuc2FjdGlvbnMKZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2V2ZW50cy9pMzg2L3NhbmR5YnJpZGdlL2V2ZW50cyBiL29wcm9maWxlLTAuOS43L2V2ZW50cy9pMzg2L3NhbmR5YnJpZGdlL2V2ZW50cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDRjMWUzCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL2kzODYvc2FuZHlicmlkZ2UvZXZlbnRzCkBAIC0wLDAgKzEsNjcgQEAKKyMKKyMgSW50ZWwgInNhbmR5LWJyaWRnZSIgbWljcm9hcmNoaXRlY3R1cmUgY29yZSBldmVudHMuCisjCisjIFNlZSBodHRwOi8vYXJrLmludGVsLmNvbS8gZm9yIGhlbHAgaW4gaWRlbnRpZnlpbmcgc2FuZHktYnJpZGdlIGJhc2VkIENQVXMKKyMKKyMgTm90ZSB0aGUgbWluaW11bSBjb3VudHMgYXJlIG5vdCBkaXNjb3ZlcmVkIGV4cGVyaW1lbnRhbGx5IGFuZCBjb3VsZCBiZSBsaWtlbHkKKyMgbG93ZXJlZCBpbiBtYW55IGNhc2VzIHdpdGhvdXQgaWxsIGVmZmVjdC4KKyMKK2luY2x1ZGU6aTM4Ni9hcmNoX3BlcmZtb24KK2V2ZW50OjB4MDMgY291bnRlcnM6Y3B1aWQgdW06bGRfYmxvY2tzIG1pbmltdW06MTAwMDAwIG5hbWU6bGRfYmxvY2tzIDogYmxvY2tlZCBsb2FkcworZXZlbnQ6MHgwNSBjb3VudGVyczpjcHVpZCB1bTptaXNhbGlnbl9tZW1fcmVmIG1pbmltdW06MjAwMDAwMCBuYW1lOm1pc2FsaWduX21lbV9yZWYgOiBNaXNhbGlnbmVkIG1lbW9yeSByZWZlcmVuY2VzCitldmVudDoweDA3IGNvdW50ZXJzOmNwdWlkIHVtOmxkX2Jsb2Nrc19wYXJ0aWFsIG1pbmltdW06MTAwMDAwIG5hbWU6bGRfYmxvY2tzX3BhcnRpYWwgOiBQYXJ0aWFsIGxvYWRzCitldmVudDoweDA4IGNvdW50ZXJzOmNwdWlkIHVtOmR0bGJfbG9hZF9taXNzZXMgbWluaW11bToyMDAwMDAwIG5hbWU6ZHRsYl9sb2FkX21pc3NlcyA6IEQtVExCIG1pc3NlcworZXZlbnQ6MHgwZCBjb3VudGVyczpjcHVpZCB1bTppbnRfbWlzYyBtaW5pbXVtOjIwMDAwMDAgbmFtZTppbnRfbWlzYyA6IEluc3RydWN0aW9uIGRlY29kZXIgZXZlbnRzCitldmVudDoweDBlIGNvdW50ZXJzOjAsMSwyLDMgdW06dW9wc19pc3N1ZWQgbWluaW11bToyMDAwMDAwIG5hbWU6dW9wc19pc3N1ZWQgOiBOdW1iZXIgb2YgVW9wcyBpc3N1ZWQKK2V2ZW50OjB4MTQgY291bnRlcnM6Y3B1aWQgdW06YXJpdGggbWluaW11bToyMDAwMDAwIG5hbWU6YXJpdGggOiBNaXNjIEFMVSBldmVudHMKK2V2ZW50OjB4MTcgY291bnRlcnM6Y3B1aWQgdW06b25lIG1pbmltdW06MjAwMDAwMCBuYW1lOmluc3RzX3dyaXR0ZW5fdG9faXEgOiBOdW1iZXIgb2YgaW5zdHJ1Y3Rpb25zIHdyaXR0ZW4gdG8gSW5zdHJ1Y3Rpb24gUXVldWUgKElRKSB0aGlzIGN5Y2xlLgorZXZlbnQ6MHgyNCBjb3VudGVyczpjcHVpZCB1bTpsMl9ycXN0cyBtaW5pbXVtOjIwMDAwMCBuYW1lOmwyX3Jxc3RzIDogUmVxdWVzdHMgZnJvbSBMMiBjYWNoZQorZXZlbnQ6MHgyNyBjb3VudGVyczpjcHVpZCB1bTpsMl9zdG9yZV9sb2NrX3Jxc3RzIG1pbmltdW06MjAwMDAwIG5hbWU6bDJfc3RvcmVfbG9ja19ycXN0cyA6IEwyIGNhY2hlIHN0b3JlIGxvY2sgcmVxdWVzdHMKK2V2ZW50OjB4MjggY291bnRlcnM6Y3B1aWQgdW06bDJfbDFkX3diX3Jxc3RzIG1pbmltdW06MjAwMDAwIG5hbWU6bDJfbDFkX3diX3Jxc3RzIDogd3JpdGViYWNrcyBmcm9tIEwxRCB0byB0aGUgTDIgY2FjaGUKK2V2ZW50OjB4NDggY291bnRlcnM6MiB1bTpsMWRfcGVuZF9taXNzIG1pbmltdW06MjAwMDAwMCBuYW1lOmwxZF9wZW5kX21pc3MgOiBDeWNsZXMgd2l0aCBMMUQgbG9hZCBNaXNzZXMgb3V0c3RhbmRpbmcuCitldmVudDoweDQ5IGNvdW50ZXJzOmNwdWlkIHVtOmR0bGJfc3RvcmVfbWlzc2VzIG1pbmltdW06MjAwMDAwMCBuYW1lOmR0bGJfc3RvcmVfbWlzc2VzIDogRC1UTEIgc3RvcmUgbWlzc2VzCitldmVudDoweDRjIGNvdW50ZXJzOmNwdWlkIHVtOmxvYWRfaGl0X3ByZSBtaW5pbXVtOjEwMDAwMCBuYW1lOmxvYWRfaGl0X3ByZSA6IExvYWQgIGRpc3BhdGNoZXMgdGhhdCBoaXQgZmlsbCBidWZmZXIKK2V2ZW50OjB4NGUgY291bnRlcnM6Y3B1aWQgdW06eDAyIG1pbmltdW06MjAwMDAwMCBuYW1lOmh3X3ByZV9yZXEgOiBIYXJkd2FyZSBQcmVmZXRjaCByZXF1ZXN0cworZXZlbnQ6MHg1MSBjb3VudGVyczpjcHVpZCB1bTpsMWQgbWluaW11bToyMDAwMDAwIG5hbWU6bDFkIDogTDFEIGNhY2hlIGV2ZW50cworZXZlbnQ6MHg1OSBjb3VudGVyczpjcHVpZCB1bTpwYXJ0aWFsX3JhdF9zdGFsbHMgbWluaW11bToyMDAwMDAwIG5hbWU6cGFydGlhbF9yYXRfc3RhbGxzIDogUGFydGlhbCBSQVQgc3RhbGxzCitldmVudDoweDViIGNvdW50ZXJzOjAsMSwyLDMgdW06cmVzb3VyY2Vfc3RhbGxzMiBtaW5pbXVtOjIwMDAwMDAgbmFtZTpyZXNvdXJjZV9zdGFsbHMyIDogTWlzYyByZXNvdXJjZSBzdGFsbHMKK2V2ZW50OjB4NWMgY291bnRlcnM6Y3B1aWQgdW06Y3BsX2N5Y2xlcyBtaW5pbXVtOjIwMDAwMDAgbmFtZTpjcGxfY3ljbGVzIDogVW5oYWx0ZWQgY29yZSBjeWNsZXMgaW4gc3BlY2lmaWMgcmluZ3MKK2V2ZW50OjB4NWUgY291bnRlcnM6MCwxLDIsMyB1bTpvbmUgbWluaW11bToyMDAwMDAwIG5hbWU6cnNfZXZlbnRzIDogRXZlbnRzIGZvciB0aGUgcmVzZXJ2YXRpb24gc3RhdGlvbgorZXZlbnQ6MHg2MCBjb3VudGVyczpjcHVpZCB1bTpvZmZjb3JlX3JlcXVlc3RzX291dHN0YW5kaW5nIG1pbmltdW06MjAwMDAwMCBuYW1lOm9mZmNvcmVfcmVxdWVzdHNfb3V0c3RhbmRpbmcgOiBPZmZjb3JlIG91dHN0YW5kaW5nIHRyYW5zYWN0aW9ucworZXZlbnQ6MHg2MyBjb3VudGVyczpjcHVpZCB1bTpsb2NrX2N5Y2xlcyBtaW5pbXVtOjIwMDAwMDAgbmFtZTpsb2NrX2N5Y2xlcyA6IEN5Y2xlcyBkdWUgdG8gTE9DSyBwcmVmaXhlcy4KK2V2ZW50OjB4NzkgY291bnRlcnM6MCwxLDIsMyB1bTppZHEgbWluaW11bToyMDAwMDAwIG5hbWU6aWRxIDogSW5zdHJ1Y3Rpb24gRGVjb2RlIFF1ZXVlIGV2ZW50cworZXZlbnQ6MHg4MCBjb3VudGVyczpjcHVpZCB1bTp4MDIgbWluaW11bToyMDAwMDAgbmFtZTppY2FjaGUgOiBJbnN0cnVjdGlvbiBjYWNoZSBldmVudHMKK2V2ZW50OjB4ODUgY291bnRlcnM6Y3B1aWQgdW06aXRsYl9taXNzZXMgbWluaW11bToyMDAwMDAwIG5hbWU6aXRsYl9taXNzZXMgOiBJLVRMQiBtaXNzZXMKK2V2ZW50OjB4ODcgY291bnRlcnM6Y3B1aWQgdW06aWxkX3N0YWxsIG1pbmltdW06MjAwMDAwMCBuYW1lOmlsZF9zdGFsbCA6IEluc3RydWN0aW9uIGRlY29kaW5nIHN0YWxscworZXZlbnQ6MHg4OCBjb3VudGVyczpjcHVpZCB1bTpicl9pbnN0X2V4ZWMgbWluaW11bToyMDAwMDAgbmFtZTpicl9pbnN0X2V4ZWMgOiBCcmFuY2ggaW5zdHJ1Y3Rpb25zCitldmVudDoweDg5IGNvdW50ZXJzOmNwdWlkIHVtOmJyX21pc3BfZXhlYyBtaW5pbXVtOjIwMDAwMCBuYW1lOmJyX21pc3BfZXhlYyA6IE1pc3ByZWRpY3RlZCBicmFuY2ggaW5zdHJ1Y3Rpb25zCitldmVudDoweDljIGNvdW50ZXJzOjAsMSwyLDMgdW06aWRxX3VvcHNfbm90X2RlbGl2ZXJlZCBtaW5pbXVtOjIwMDAwMDAgbmFtZTppZHFfdW9wc19ub3RfZGVsaXZlcmVkIDogdW9wcyBub3QgZGVsaXZlcmVkIHRvIElEUS4KK2V2ZW50OjB4YTEgY291bnRlcnM6Y3B1aWQgdW06dW9wc19kaXNwYXRjaGVkX3BvcnQgbWluaW11bToyMDAwMDAwIG5hbWU6dW9wc19kaXNwYXRjaGVkX3BvcnQgOiBDb3VudCBvbiB3aGljaCBwb3J0cyB1b3BzIGFyZSBkaXNwYXRjaGVkLgorZXZlbnQ6MHhhMiBjb3VudGVyczpjcHVpZCB1bTpyZXNvdXJjZV9zdGFsbHMgbWluaW11bToyMDAwMDAwIG5hbWU6cmVzb3VyY2Vfc3RhbGxzIDogQ29yZSByZXNvdXJjZSBzdGFsbHMKK2V2ZW50OjB4YWIgY291bnRlcnM6Y3B1aWQgdW06ZHNiMm1pdGVfc3dpdGNoZXMgbWluaW11bToyMDAwMDAwIG5hbWU6ZHNiMm1pdGVfc3dpdGNoZXMgOiBOdW1iZXIgb2YgRGVjb2RlIFN0cmVhbSBCdWZmZXIgKERTQikgdG8gTUlURSBzd2l0Y2hlcworZXZlbnQ6MHhhYyBjb3VudGVyczpjcHVpZCB1bTpkc2JfZmlsbCBtaW5pbXVtOjIwMDAwMDAgbmFtZTpkc2JfZmlsbCA6IERTQiBmaWxsIGV2ZW50cworZXZlbnQ6MHhhZSBjb3VudGVyczpjcHVpZCB1bTpvbmUgbWluaW11bToxMDAwMCBuYW1lOml0bGIgOiBJVExCIGV2ZW50cworZXZlbnQ6MHhiMCBjb3VudGVyczpjcHVpZCB1bTpvZmZjb3JlX3JlcXVlc3RzIG1pbmltdW06MTAwMDAwIG5hbWU6b2ZmY29yZV9yZXF1ZXN0cyA6IFJlcXVlc3RzIHNlbnQgb3V0c2lkZSB0aGUgY29yZQorZXZlbnQ6MHhiMSBjb3VudGVyczowLDEsMiwzIHVtOnVvcHNfZGlzcGF0Y2hlZCBtaW5pbXVtOjIwMDAwMDAgbmFtZTp1b3BzX2Rpc3BhdGNoZWQgOiB1b3BzIGRpc3BhdGNoZWQKK2V2ZW50OjB4YjIgY291bnRlcnM6Y3B1aWQgdW06b25lIG1pbmltdW06MjAwMDAwMCBuYW1lOm9mZmNvcmVfcmVxdWVzdHNfYnVmZmVyIDogT2ZmY29yZSByZXF1ZXN0cyBidWZmZXIgZXZlbnRzCitldmVudDoweGI2IGNvdW50ZXJzOmNwdWlkIHVtOm9uZSBtaW5pbXVtOjEwMDAwMCBuYW1lOmFndV9ieXBhc3NfY2FuY2VsIDogQUdVIGJ5cGFzcyBjYW5jZWwKK2V2ZW50OjB4YmQgY291bnRlcnM6Y3B1aWQgdW06dGxiX2ZsdXNoIG1pbmltdW06MTAwMDAgbmFtZTp0bGJfZmx1c2ggOiBUTEIgZmx1c2hlcworZXZlbnQ6MHhiZiBjb3VudGVyczpjcHVpZCB1bTpsMWRfYmxvY2tzIG1pbmltdW06MTAwMDAwIG5hbWU6bDFkX2Jsb2NrcyA6IEwxRCBjYWNoZSBibG9ja2luZyBldmVudHMKK2V2ZW50OjB4YzAgY291bnRlcnM6MSB1bTpvbmUgbWluaW11bToyMDAwMDAwIG5hbWU6aW5zdF9yZXRpcmVkIDogSW5zdHJ1Y3Rpb25zIHJldGlyZWQKK2V2ZW50OjB4YzEgY291bnRlcnM6Y3B1aWQgdW06b3RoZXJfYXNzaXN0cyBtaW5pbXVtOjEwMDAwMCBuYW1lOm90aGVyX2Fzc2lzdHMgOiBJbnN0cnVjdGlvbnMgdGhhdCBuZWVkZWQgYW4gYXNzaXN0CitldmVudDoweGMyIGNvdW50ZXJzOjAsMSwyLDMgdW06dW9wc19yZXRpcmVkIG1pbmltdW06MjAwMDAwMCBuYW1lOnVvcHNfcmV0aXJlZCA6IHVvcHMgdGhhdCBhY3R1YWxseSByZXRpcmVkLgorZXZlbnQ6MHhjMyBjb3VudGVyczpjcHVpZCB1bTptYWNoaW5lX2NsZWFycyBtaW5pbXVtOjEwMDAwMCBuYW1lOm1hY2hpbmVfY2xlYXJzIDogTnVtYmVyIG9mIE1hY2hpbmUgQ2xlYXJzIGRldGVjdGVkLgorZXZlbnQ6MHhjNCBjb3VudGVyczowLDEsMiwzIHVtOmJyX2luc3RfcmV0aXJlZCBtaW5pbXVtOjQwMDAwMCBuYW1lOmJyX2luc3RfcmV0aXJlZCA6IENvdW50cyBicmFuY2ggaW5zdHJ1Y3Rpb25zIHJldGlyZWQKK2V2ZW50OjB4YzUgY291bnRlcnM6MCwxLDIsMyB1bTpicl9taXNwX3JldGlyZWQgbWluaW11bTo0MDAwMDAgbmFtZTpicl9taXNwX3JldGlyZWQgOiBDb3VudHMgbWlzcHJlZGljdGVkIGJyYW5jaCBpbnN0cnVjdGlvbnMKK2V2ZW50OjB4Y2EgY291bnRlcnM6MCwxLDIsMyB1bTpmcF9hc3Npc3QgbWluaW11bToxMDAwMDAgbmFtZTpmcF9hc3Npc3QgOiBDb3VudHMgZmxvYXRpbmcgcG9pbnQgYXNzaXN0cworZXZlbnQ6MHhjYiBjb3VudGVyczpjcHVpZCB1bTpvbmUgbWluaW11bToxMDAwMDAgbmFtZTpod19pbnRlcnJ1cHRzIDogTnVtYmVyIG9mIGhhcmR3YXJlIGludGVycnVwdHMgcmVjZWl2ZWQgYnkgdGhlIHByb2Nlc3Nvci4KK2V2ZW50OjB4Y2MgY291bnRlcnM6Y3B1aWQgdW06eDIwIG1pbmltdW06MjAwMDAwMCBuYW1lOnJvYl9taXNjX2V2ZW50cyA6IENvdW50IFJPQiAoUmVnaXN0ZXIgUmVvcmRlciBCdWZmZXIpIGV2ZW50cy4KK2V2ZW50OjB4Y2QgY291bnRlcnM6MyB1bTp4MDIgbWluaW11bToyMDAwMDAwIG5hbWU6bWVtX3RyYW5zX3JldGlyZWQgOiBDb3VudCBtZW1vcnkgdHJhbnNhY3Rpb25zCitldmVudDoweGQwIGNvdW50ZXJzOjAsMSwyLDMgdW06bWVtX3VvcHNfcmV0aXJlZCBtaW5pbXVtOjIwMDAwMDAgbmFtZTptZW1fdW9wc19yZXRpcmVkIDogQ291bnQgdW9wcyB3aXRoIG1lbW9yeSBhY2Nlc3NlZCByZXRpcmVkCitldmVudDoweGQxIGNvdW50ZXJzOjAsMSwyLDMgdW06bWVtX2xvYWRfdW9wc19yZXRpcmVkIG1pbmltdW06MjAwMDAwMCBuYW1lOm1lbV9sb2FkX3VvcHNfcmV0aXJlZCA6IE1lbW9yeSBsb2FkIHVvcHMuCitldmVudDoweGQyIGNvdW50ZXJzOjAsMSwyLDMgdW06bWVtX2xvYWRfdW9wc19sbGNfaGl0X3JldGlyZWQgbWluaW11bToxMDAwMDAgbmFtZTptZW1fbG9hZF91b3BzX2xsY19oaXRfcmV0aXJlZCA6IE1lbW9yeSBsb2FkIHVvcHMgd2l0aCBMTEMgKExhc3QgbGV2ZWwgY2FjaGUpIGhpdAorZXZlbnQ6MHhkNCBjb3VudGVyczowLDEsMiwzIHVtOngwMiBtaW5pbXVtOjEwMDAwIG5hbWU6bWVtX2xvYWRfdW9wc19taXNjX3JldGlyZWQgOiBNZW1vcnkgbG9hZCB1b3BzIHJldGlyZWQKK2V2ZW50OjB4ZjAgY291bnRlcnM6Y3B1aWQgdW06bDJfdHJhbnMgbWluaW11bToyMDAwMDAgbmFtZTpsMl90cmFucyA6IEwyIGNhY2hlIGFjY2Vzc2VzCitldmVudDoweGYxIGNvdW50ZXJzOmNwdWlkIHVtOmwyX2xpbmVzX2luIG1pbmltdW06MTAwMDAwIG5hbWU6bDJfbGluZXNfaW4gOiBMMiBjYWNoZSBsaW5lcyBpbgorZXZlbnQ6MHhmMiBjb3VudGVyczpjcHVpZCB1bTpsMl9saW5lc19vdXQgbWluaW11bToxMDAwMDAgbmFtZTpsMl9saW5lc19vdXQgOiBMMiBjYWNoZSBsaW5lcyBvdXQKK2V2ZW50OjB4ZjQgY291bnRlcnM6Y3B1aWQgdW06eDEwIG1pbmltdW06MTAwMDAwIG5hbWU6c3FfbWlzYyA6IFN0b3JlIHF1ZXVlIG1pc2MgZXZlbnRzCmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9ldmVudHMvaTM4Ni9zYW5keWJyaWRnZS91bml0X21hc2tzIGIvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL2kzODYvc2FuZHlicmlkZ2UvdW5pdF9tYXNrcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDJiYjMzCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL2kzODYvc2FuZHlicmlkZ2UvdW5pdF9tYXNrcwpAQCAtMCwwICsxLDI3NSBAQAorIworIyBVbml0IG1hc2tzIGZvciB0aGUgSW50ZWwgInNhbmR5LWJyaWRnZSIgbWljcm8gYXJjaGl0ZWN0dXJlCisjCisjIFNlZSBodHRwOi8vYXJrLmludGVsLmNvbS8gZm9yIGhlbHAgaW4gaWRlbnRpZnlpbmcgc2FuZHktYnJpZGdlIGJhc2VkIENQVXMKKyMKK2luY2x1ZGU6aTM4Ni9hcmNoX3BlcmZtb24KK25hbWU6eDAyIHR5cGU6bWFuZGF0b3J5IGRlZmF1bHQ6MHgyCisJMHgyIE5vIHVuaXQgbWFzaworbmFtZTp4MTAgdHlwZTptYW5kYXRvcnkgZGVmYXVsdDoweDEwCisJMHgxMCBObyB1bml0IG1hc2sKK25hbWU6eDIwIHR5cGU6bWFuZGF0b3J5IGRlZmF1bHQ6MHgyMAorCTB4MjAgTm8gdW5pdCBtYXNrCituYW1lOmxkX2Jsb2NrcyB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDEKKwkweDEgZGF0YV91bmtub3duIGJsb2NrZWQgbG9hZHMgZHVlIHRvIHN0b3JlIGJ1ZmZlciBibG9ja3Mgd2l0aCB1bmtub3duIGRhdGEuCisJMHgyIHN0b3JlX2ZvcndhcmQgbG9hZHMgYmxvY2tlZCBieSBvdmVybGFwcGluZyB3aXRoIHN0b3JlIGJ1ZmZlciB0aGF0IGNhbm5vdCBiZSBmb3J3YXJkZWQKKwkweDggbm9fc3IgVGhpcyBldmVudCBjb3VudHMgdGhlIG51bWJlciBvZiB0aW1lcyB0aGF0IHNwbGl0IGxvYWQgb3BlcmF0aW9ucyBhcmUgdGVtcG9yYXJpbHkgYmxvY2tlZCBiZWNhdXNlIGFsbCByZXNvdXJjZXMgZm9yIGhhbmRsaW5nIHRoZSBzcGxpdCBhY2Nlc3NlcyBhcmUgaW4gdXNlLgorCTB4MTAgYWxsX2Jsb2NrIE51bWJlciBvZiBjYXNlcyB3aGVyZSBhbnkgbG9hZCBpcyBibG9ja2VkIGJ1dCBoYXMgbm8gRENVIG1pc3MuCituYW1lOm1pc2FsaWduX21lbV9yZWYgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgxCisJMHgxIGxvYWRzIFNwZWN1bGF0aXZlIGNhY2hlLWxpbmUgc3BsaXQgbG9hZCB1b3BzIGRpc3BhdGNoZWQgdG8gdGhlIEwxRC4KKwkweDIgc3RvcmVzIFNwZWN1bGF0aXZlIGNhY2hlLWxpbmUgc3BsaXQgU3RvcmUtYWRkcmVzcyB1b3BzIGRpc3BhdGNoZWQgdG8gTDFECituYW1lOmxkX2Jsb2Nrc19wYXJ0aWFsIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MQorCTB4MSBhZGRyZXNzX2FsaWFzIEZhbHNlIGRlcGVuZGVuY2llcyBpbiBNT0IgZHVlIHRvIHBhcnRpYWwgY29tcGFyZSBvbiBhZGRyZXNzCisJMHg4IGFsbF9zdGFfYmxvY2sgVGhpcyBldmVudCBjb3VudHMgdGhlIG51bWJlciBvZiB0aW1lcyB0aGF0IGxvYWQgb3BlcmF0aW9ucyBhcmUgdGVtcG9yYXJpbHkgYmxvY2tlZCBiZWNhdXNlIG9mIG9sZGVyIHN0b3Jlcywgd2l0aCBhZGRyZXNzZXMgdGhhdCBhcmUgbm90IHlldCBrbm93bi4gQSBsb2FkIG9wZXJhdGlvbiBtYXkgaW5jdXIgbW9yZSB0aGFuIG9uZSBibG9jayBvZiB0aGlzIHR5cGUuCituYW1lOmR0bGJfbG9hZF9taXNzZXMgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgxCisJMHgxIG1pc3NfY2F1c2VzX2Ffd2FsayBNaXNzIGluIGFsbCBUTEIgbGV2ZWxzIGNhdXNlcyBhbiBwYWdlIHdhbGsgb2YgYW55IHBhZ2Ugc2l6ZSAoNEsvMk0vNE0vMUcpCisJMHgyIHdhbGtfY29tcGxldGVkIE1pc3MgaW4gYWxsIFRMQiBsZXZlbHMgY2F1c2VzIGEgcGFnZSB3YWxrIHRoYXQgY29tcGxldGVzIG9mIGFueSBwYWdlIHNpemUgKDRLLzJNLzRNLzFHKQorCTB4NCB3YWxrX2R1cmF0aW9uIEN5Y2xlcyBQTUggaXMgYnVzeSB3aXRoIHRoaXMgd2FsaworCTB4MTAgc3RsYl9oaXQgRmlyc3QgbGV2ZWwgbWlzcyBidXQgc2Vjb25kIGxldmVsIGhpdDsgbm8gcGFnZSB3YWxrLgorbmFtZTppbnRfbWlzYyB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDQwCisJMHg0MCByYXRfc3RhbGxfY3ljbGVzIEN5Y2xlcyBSZXNvdXJjZSBBbGxvY2F0aW9uIFRhYmxlIChSQVQpIGV4dGVybmFsIHN0YWxsIGlzIHNlbnQgdG8gSW5zdHJ1Y3Rpb24gRGVjb2RlIFF1ZXVlIChJRFEpIGZvciB0aGlzIHRocmVhZC4KKwkweDMgZXh0cmE6Y21hc2s9MSByZWNvdmVyeV9jeWNsZXMgTnVtYmVyIG9mIGN5Y2xlcyB3YWl0aW5nIHRvIGJlIHJlY292ZXIgYWZ0ZXIgTnVrZSBkdWUgdG8gYWxsIG90aGVyIGNhc2VzIGV4Y2VwdCBKRUNsZWFyLgorCTB4MyBleHRyYTpjbWFzaz0xLGVkZ2UgcmVjb3Zlcnlfc3RhbGxzX2NvdW50IEVkZ2UgYXBwbGllZCB0byByZWNvdmVyeV9jeWNsZXMsIHRodXMgY291bnRzIG9jY3VycmVuY2VzLgorbmFtZTp1b3BzX2lzc3VlZCB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDEKKwkweDEgYW55IE51bWJlciBvZiBVb3BzIGlzc3VlZCBieSB0aGUgUmVzb3VyY2UgQWxsb2NhdGlvbiBUYWJsZSAoUkFUKSB0byB0aGUgUmVzZXJ2YXRpb24gU3RhdGlvbiAoUlMpCisJMHgxIGV4dHJhOmNtYXNrPTEsaW52IHN0YWxsX2N5Y2xlcyBjeWNsZXMgbm8gdW9wcyBpc3N1ZWQgYnkgdGhpcyB0aHJlYWQuCituYW1lOmFyaXRoIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MQorCTB4MSBmcHVfZGl2X2FjdGl2ZSBDeWNsZXMgdGhhdCB0aGUgZGl2aWRlciBpcyBidXN5IHdpdGggYW55IGRpdmlkZSBvciBzcXJ0IG9wZXJhdGlvbi4KKwkweDEgZXh0cmE6Y21hc2s9MSxlZGdlIGZwdV9kaXYgTnVtYmVyIG9mIHRpbWVzIHRoYXQgdGhlIGRpdmlkZXIgaXMgYWN0aXZlZCwgaW5jbHVkZXMgSU5ULCBTSU1EIGFuZCBGUC4KK25hbWU6bDJfcnFzdHMgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgxCisJMHgxIGRlbWFuZF9kYXRhX3JkX2hpdCBEZW1hbmQgRGF0YSBSZWFkIGhpdCBMMiwgbm8gcmVqZWN0cworCTB4NCByZm9faGl0IFJGTyByZXF1ZXN0cyB0aGF0IGhpdCBMMiBjYWNoZQorCTB4OCByZm9fbWlzcyBSRk8gcmVxdWVzdHMgdGhhdCBtaXNzIEwyIGNhY2hlCisJMHgxMCBjb2RlX3JkX2hpdCBMMiBjYWNoZSBoaXRzIHdoZW4gZmV0Y2hpbmcgaW5zdHJ1Y3Rpb25zLCBjb2RlIHJlYWRzLgorCTB4MjAgY29kZV9yZF9taXNzIEwyIGNhY2hlIG1pc3NlcyB3aGVuIGZldGNoaW5nIGluc3RydWN0aW9ucworCTB4NDAgcGZfaGl0IFJlcXVlc3RzIGZyb20gdGhlIEwyIGhhcmR3YXJlIHByZWZldGNoZXJzIHRoYXQgaGl0IEwyIGNhY2hlCisJMHg4MCBwZl9taXNzIFJlcXVlc3RzIGZyb20gdGhlIEwyIGhhcmR3YXJlIHByZWZldGNoZXJzIHRoYXQgbWlzcyBMMiBjYWNoZQorCTB4MyBhbGxfZGVtYW5kX2RhdGFfcmQgQW55IGRhdGEgcmVhZCByZXF1ZXN0IHRvIEwyIGNhY2hlCisJMHhjIGFsbF9yZm8gQW55IGRhdGEgUkZPIHJlcXVlc3QgdG8gTDIgY2FjaGUKKwkweDMwIGFsbF9jb2RlX3JkIEFueSBjb2RlIHJlYWQgcmVxdWVzdCB0byBMMiBjYWNoZQorCTB4YzAgYWxsX3BmIEFueSBMMiBIVyBwcmVmZXRjaCByZXF1ZXN0IHRvIEwyIGNhY2hlCituYW1lOmwyX3N0b3JlX2xvY2tfcnFzdHMgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHhmCisJMHhmIGFsbCBSRk9zIHRoYXQgYWNjZXNzIGNhY2hlIGxpbmVzIGluIGFueSBzdGF0ZQorCTB4MSBtaXNzIFJGTyAoYXMgYSByZXN1bHQgb2YgcmVndWxhciBSRk8gb3IgTG9jayByZXF1ZXN0KSBtaXNzIGNhY2hlIC0gSSBzdGF0ZQorCTB4NCBoaXRfZSBSRk8gKGFzIGEgcmVzdWx0IG9mIHJlZ3VsYXIgUkZPIG9yIExvY2sgcmVxdWVzdCkgaGl0cyBjYWNoZSBpbiBFIHN0YXRlCisJMHg4IGhpdF9tIFJGTyAoYXMgYSByZXN1bHQgb2YgcmVndWxhciBSRk8gb3IgTG9jayByZXF1ZXN0KSBoaXRzIGNhY2hlIGluIE0gc3RhdGUKK25hbWU6bDJfbDFkX3diX3Jxc3RzIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4NAorCTB4NCBoaXRfZSB3cml0ZWJhY2tzIGZyb20gTDFEIHRvIEwyIGNhY2hlIGxpbmVzIGluIEUgc3RhdGUKKwkweDggaGl0X20gd3JpdGViYWNrcyBmcm9tIEwxRCB0byBMMiBjYWNoZSBsaW5lcyBpbiBNIHN0YXRlCituYW1lOmwxZF9wZW5kX21pc3MgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgxCisJMHgxIHBlbmRpbmcgQ3ljbGVzIHdpdGggTDFEIGxvYWQgTWlzc2VzIG91dHN0YW5kaW5nLgorCTB4MSBleHRyYTpjbWFzaz0xLGVkZ2Ugb2NjdXJlbmNlcyBUaGlzIGV2ZW50IGNvdW50cyB0aGUgbnVtYmVyIG9mIEwxRCBtaXNzZXMgb3V0c3RhbmRpbmcgb2NjdXJlbmNlcy4KK25hbWU6ZHRsYl9zdG9yZV9taXNzZXMgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgxCisJMHgxIG1pc3NfY2F1c2VzX2Ffd2FsayBNaXNzIGluIGFsbCBUTEIgbGV2ZWxzIGNhdXNlcyBhbiBwYWdlIHdhbGsgb2YgYW55IHBhZ2Ugc2l6ZSAoNEsvMk0vNE0vMUcpCisJMHgyIHdhbGtfY29tcGxldGVkIE1pc3MgaW4gYWxsIFRMQiBsZXZlbHMgY2F1c2VzIGEgcGFnZSB3YWxrIHRoYXQgY29tcGxldGVzIG9mIGFueSBwYWdlIHNpemUgKDRLLzJNLzRNLzFHKQorCTB4NCB3YWxrX2R1cmF0aW9uIEN5Y2xlcyBQTUggaXMgYnVzeSB3aXRoIHRoaXMgd2FsaworCTB4MTAgc3RsYl9oaXQgRmlyc3QgbGV2ZWwgbWlzcyBidXQgc2Vjb25kIGxldmVsIGhpdDsgbm8gcGFnZSB3YWxrLiAgT25seSByZWxldmFudCBpZiBtdWx0aXBsZSBsZXZlbHMuCituYW1lOmxvYWRfaGl0X3ByZSB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDEKKwkweDEgc3dfcGYgTG9hZCAgZGlzcGF0Y2hlcyB0aGF0IGhpdCBmaWxsIGJ1ZmZlciBhbGxvY2F0ZWQgZm9yIFMvVyBwcmVmZXRjaC4KKwkweDIgaHdfcGYgTG9hZCAgZGlzcGF0Y2hlcyB0aGF0IGhpdCBmaWxsIGJ1ZmZlciBhbGxvY2F0ZWQgZm9yIEhXIHByZWZldGNoLgorbmFtZTpsMWQgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgxCisJMHgxIHJlcGxhY2VtZW50IEwxRCBEYXRhIGxpbmUgcmVwbGFjZW1lbnRzLgorCTB4MiBhbGxvY2F0ZWRfaW5fbSBMMUQgTS1zdGF0ZSBEYXRhIENhY2hlIExpbmVzIEFsbG9jYXRlZAorCTB4NCBldmljdGlvbiBMMUQgTS1zdGF0ZSBEYXRhIENhY2hlIExpbmVzIEV2aWN0ZWQgZHVlIHRvIHJlcGxhY2VtZW50IChvbmx5KQorCTB4OCBhbGxfbV9yZXBsYWNlbWVudCBBbGwgTW9kaWZpZWQgbGluZXMgZXZpY3RlZCBvdXQgb2YgTDFECituYW1lOnBhcnRpYWxfcmF0X3N0YWxscyB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDIwCisJMHgyMCBmbGFnc19tZXJnZV91b3AgTnVtYmVyIG9mIHBlcmYgc2Vuc2l0aXZlIGZsYWdzLW1lcmdlIHVvcHMgYWRkZWQgYnkgU2FuZHkgQnJpZGdlIHUtYXJjaC4KKwkweDQwIHNsb3dfbGVhX3dpbmRvdyBOdW1iZXIgb2YgY3ljbGVzIHdpdGggYXQgbGVhc3QgMSBzbG93IExvYWQgRWZmZWN0aXZlIEFkZHJlc3MgKExFQSkgdW9wIGJlaW5nIGFsbG9jYXRlZC4KKwkweDgwIG11bF9zaW5nbGVfdW9wIE51bWJlciBvZiBNdWx0aXBseSBwYWNrZWQvc2NhbGFyIHNpbmdsZSBwcmVjaXNpb24gdW9wcyBhbGxvY2F0ZWQKKwkweDIwIGV4dHJhOmNtYXNrPTEgZmxhZ3NfbWVyZ2VfdW9wX2N5Y2xlcyBDeWNsZXMgd2l0aCBwZXJmIHNlbnNpdGl2ZSBmbGFncy1tZXJnZSB1b3BzIGFkZGVkIGJ5IFNhbmR5QnJpZGdlIHUtYXJjaC4KK25hbWU6cmVzb3VyY2Vfc3RhbGxzMiB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDQwCisJMHg0MCBib2JfZnVsbCBDeWNsZXMgQWxsb2NhdG9yIGlzIHN0YWxsZWQgZHVlIEJyYW5jaCBPcmRlciBCdWZmZXIgKEJPQikuCisJMHhmIGFsbF9wcmZfY29udHJvbCBSZXNvdXJjZSBzdGFsbHMyIGNvbnRyb2wgc3RydWN0dXJlcyBmdWxsIGZvciBwaHlzaWNhbCByZWdpc3RlcnMKKwkweGMgYWxsX2ZsX2VtcHR5IEN5Y2xlcyB3aXRoIGVpdGhlciBmcmVlIGxpc3QgaXMgZW1wdHkKKwkweDRmIG9vb19yc3JjIFJlc291cmNlIHN0YWxsczIgY29udHJvbCBzdHJ1Y3R1cmVzIGZ1bGwgUGh5c2ljYWwgUmVnaXN0ZXIgUmVjbGFpbSBUYWJsZSAoUFJSVCksICBQaHlzaWNhbCBIaXN0b3J5IFRhYmxlIChQSFQpLCBJTlQgb3IgU0lNRCBGcmVlIExpc3QgKEZMKSwgQnJhbmNoIE9yZGVyIEJ1ZmZlciAoQk9CKQorbmFtZTpjcGxfY3ljbGVzIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MQorCTB4MSByaW5nMCBVbmhhbHRlZCBjb3JlIGN5Y2xlcyB0aGUgVGhyZWFkIHdhcyBpbiBSaW5ncyAwLgorCTB4MSBleHRyYTpjbWFzaz0xLGVkZ2UgcmluZzBfdHJhbnMgVHJhbnNpdGlvbnMgZnJvbSByaW5nMTIzIHRvIFJpbmcwLgorCTB4MiByaW5nMTIzIFVuaGFsdGVkIGNvcmUgY3ljbGVzIHRoZSBUaHJlYWQgd2FzIGluIFJpbmdzIDEvMi8zLgorbmFtZTpvZmZjb3JlX3JlcXVlc3RzX291dHN0YW5kaW5nIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MQorCTB4MSBkZW1hbmRfZGF0YV9yZCBPZmZjb3JlIG91dHN0YW5kaW5nIERlbWFuZCBEYXRhIFJlYWQgdHJhbnNhY3Rpb25zIGluIHRoZSBTdXBlclF1ZXVlIChTUSksIHF1ZXVlIHRvIHVuY29yZSwgZXZlcnkgY3ljbGUuIEluY2x1ZGVzIEwxRCBkYXRhIGhhcmR3YXJlIHByZWZldGNoZXMuCisJMHgxIGV4dHJhOmNtYXNrPTEgY3ljbGVzX3dpdGhfZGVtYW5kX2RhdGFfcmQgY3ljbGVzIHRoZXJlIGFyZSBPZmZjb3JlIG91dHN0YW5kaW5nIFJEIGRhdGEgdHJhbnNhY3Rpb25zIGluIHRoZSBTdXBlclF1ZXVlIChTUSksIHF1ZXVlIHRvIHVuY29yZS4KKwkweDIgZGVtYW5kX2NvZGVfcmQgT2ZmY29yZSBvdXRzdGFuZGluZyBDb2RlIFJlYWRzIHRyYW5zYWN0aW9ucyBpbiB0aGUgU3VwZXJRdWV1ZSAoU1EpLCBxdWV1ZSB0byB1bmNvcmUsIGV2ZXJ5IGN5Y2xlLgorCTB4NCBkZW1hbmRfcmZvIE9mZmNvcmUgb3V0c3RhbmRpbmcgUkZPIChzdG9yZSkgdHJhbnNhY3Rpb25zIGluIHRoZSBTdXBlclF1ZXVlIChTUSksIHF1ZXVlIHRvIHVuY29yZSwgZXZlcnkgY3ljbGUuCisJMHg4IGFsbF9kYXRhX3JkIE9mZmNvcmUgb3V0c3RhbmRpbmcgYWxsIGNhY2hlYWJsZSBDb3JlIERhdGEgUmVhZCB0cmFuc2FjdGlvbnMgaW4gdGhlIFN1cGVyUXVldWUgKFNRKSwgcXVldWUgdG8gdW5jb3JlLCBldmVyeSBjeWNsZS4KKwkweDggZXh0cmE6Y21hc2s9MSBjeWNsZXNfd2l0aF9kYXRhX3JkIEN5Y2xlcyB0aGVyZSBhcmUgT2ZmY29yZSBvdXRzdGFuZGluZyBhbGwgRGF0YSByZWFkIHRyYW5zYWN0aW9ucyBpbiB0aGUgU3VwZXJRdWV1ZSAoU1EpLCBxdWV1ZSB0byB1bmNvcmUsIGV2ZXJ5IGN5Y2xlLgorCTB4MiBleHRyYTpjbWFzaz0xIGN5Y2xlc193aXRoX2RlbWFuZF9jb2RlX3JkIEN5Y2xlcyB3aXRoIG9mZmNvcmUgb3V0c3RhbmRpbmcgQ29kZSBSZWFkcyB0cmFuc2FjdGlvbnMgaW4gdGhlIFN1cGVyUXVldWUgKFNRKSwgcXVldWUgdG8gdW5jb3JlLCBldmVyeSBjeWNsZS4KKwkweDQgZXh0cmE6Y21hc2s9MSBjeWNsZXNfd2l0aF9kZW1hbmRfcmZvIEN5Y2xlcyB3aXRoIG9mZmNvcmUgb3V0c3RhbmRpbmcgZGVtYW5kIFJGTyBSZWFkcyB0cmFuc2FjdGlvbnMgaW4gdGhlIFN1cGVyUXVldWUgKFNRKSwgcXVldWUgdG8gdW5jb3JlLCBldmVyeSBjeWNsZS4KK25hbWU6bG9ja19jeWNsZXMgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgxCisJMHgxIHNwbGl0X2xvY2tfdWNfbG9ja19kdXJhdGlvbiBDeWNsZXMgaW4gd2hpY2ggdGhlIEwxRCBhbmQgTDIgIGFyZSBsb2NrZWQsIGR1ZSB0byBhIFVDIGxvY2sgb3Igc3BsaXQgbG9jaworCTB4MiBjYWNoZV9sb2NrX2R1cmF0aW9uIGN5Y2xlcyB0aGF0IHRoZUwxRCBpcyBsb2NrZWQKK25hbWU6aWRxIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MgorCTB4MiBlbXB0eSBDeWNsZXMgdGhlIEluc3RydWN0aW9uIERlY29kZSBRdWV1ZSAoSURRKSBpcyBlbXB0eS4KKwkweDQgbWl0ZV91b3BzIE51bWJlciBvZiB1b3BzIGRlbGl2ZXJlZCB0byBJbnN0cnVjdGlvbiBEZWNvZGUgUXVldWUgKElEUSkgZnJvbSBNSVRFIHBhdGguCisJMHg4IGRzYl91b3BzIE51bWJlciBvZiB1b3BzIGRlbGl2ZXJlZCB0byBJbnN0cnVjdGlvbiBEZWNvZGUgUXVldWUgKElEUSkgZnJvbSBEZWNvZGUgU3RyZWFtIEJ1ZmZlciAoRFNCKSBwYXRoLgorCTB4MTAgbXNfZHNiX3VvcHMgTnVtYmVyIG9mIFVvcHMgZGVsaXZlcmVkIGludG8gSW5zdHJ1Y3Rpb24gRGVjb2RlIFF1ZXVlIChJRFEpIHdoZW4gTVNfQnVzeSwgaW5pdGlhdGVkIGJ5IERlY29kZSBTdHJlYW0gQnVmZmVyIChEU0IpLgorCTB4MjAgbXNfbWl0ZV91b3BzIE51bWJlciBvZiBVb3BzIGRlbGl2ZXJlZCBpbnRvIEluc3RydWN0aW9uIERlY29kZSBRdWV1ZSAoSURRKSB3aGVuIE1TX0J1c3ksIGluaXRpYXRlZCBieSBNSVRFLgorCTB4MzAgbXNfdW9wcyBOdW1iZXIgb2YgVW9wcyB3ZXJlIGRlbGl2ZXJlZCBpbnRvIEluc3RydWN0aW9uIERlY29kZSBRdWV1ZSAoSURRKSBmcm9tIE1TLCBpbml0aWF0ZWQgYnkgRGVjb2RlIFN0cmVhbSBCdWZmZXIgKERTQikgb3IgTUlURS4KKwkweDMwIGV4dHJhOmNtYXNrPTEgbXNfY3ljbGVzIE51bWJlciBvZiBjeWNsZXMgdGhhdCBVb3BzIHdlcmUgZGVsaXZlcmVkIGludG8gSW5zdHJ1Y3Rpb24gRGVjb2RlIFF1ZXVlIChJRFEpIHdoZW4gTVNfQnVzeSwgaW5pdGlhdGVkIGJ5IERlY29kZSBTdHJlYW0gQnVmZmVyIChEU0IpIG9yIE1JVEUuCisJMHg0IGV4dHJhOmNtYXNrPTEgbWl0ZV9jeWNsZXMgQ3ljbGVzIE1JVEUgaXMgYWN0aXZlCisJMHg4IGV4dHJhOmNtYXNrPTEgZHNiX2N5Y2xlcyBDeWNsZXMgRGVjb2RlIFN0cmVhbSBCdWZmZXIgKERTQikgaXMgYWN0aXZlCisJMHgxMCBleHRyYTpjbWFzaz0xIG1zX2RzYl9jeWNsZXMgQ3ljbGVzIERlY29kZSBTdHJlYW0gQnVmZmVyIChEU0IpIE1pY3JvY29kZSBTZXF1ZW5zZXIgKE1TKSBpcyBhY3RpdmUKKwkweDEwIGV4dHJhOmNtYXNrPTEsZWRnZSBtc19kc2Jfb2NjdXIgT2NjdXJlbmNlcyBvZiAgRGVjb2RlIFN0cmVhbSBCdWZmZXIgKERTQikgTWljcm9jb2RlIFNlcXVlbnNlciAoTVMpIGdvaW5nIGFjdGl2ZQorCTB4MTggZXh0cmE6Y21hc2s9MSBhbGxfZHNiX2N5Y2xlc19hbnlfdW9wcyBDeWNsZXMgRGVjb2RlIFN0cmVhbSBCdWZmZXIgKERTQikgaXMgZGVsaXZlcmluZyBhbnl0aGluZworCTB4MTggZXh0cmE6Y21hc2s9NCBhbGxfZHNiX2N5Y2xlc180X3VvcHMgQ3ljbGVzIERlY29kZSBTdHJlYW0gQnVmZmVyIChEU0IpIGlzIGRlbGl2ZXJpbmcgNCBVb3BzCisJMHgyNCBleHRyYTpjbWFzaz0xIGFsbF9taXRlX2N5Y2xlc19hbnlfdW9wcyBDeWNsZXMgTUlURSBpcyBkZWxpdmVyaW5nIGFueXRoaW5nCisJMHgyNCBleHRyYTpjbWFzaz00IGFsbF9taXRlX2N5Y2xlc180X3VvcHMgQ3ljbGVzIE1JVEUgaXMgZGVsaXZlcmluZyA0IFVvcHMKKwkweDNjIG1pdGVfYWxsX3VvcHMgTnVtYmVyIG9mIHVvcHMgZGVsaXZlcmVkIHRvIEluc3RydWN0aW9uIERlY29kZSBRdWV1ZSAoSURRKSBmcm9tIGFueSBwYXRoLgorbmFtZTppdGxiX21pc3NlcyB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDEKKwkweDEgbWlzc19jYXVzZXNfYV93YWxrIE1pc3MgaW4gYWxsIFRMQiBsZXZlbHMgY2F1c2VzIGFuIHBhZ2Ugd2FsayBvZiBhbnkgcGFnZSBzaXplICg0Sy8yTS80TSkKKwkweDIgd2Fsa19jb21wbGV0ZWQgTWlzcyBpbiBhbGwgVExCIGxldmVscyBjYXVzZXMgYSBwYWdlIHdhbGsgdGhhdCBjb21wbGV0ZXMgb2YgYW55IHBhZ2Ugc2l6ZSAoNEsvMk0vNE0pCisJMHg0IHdhbGtfZHVyYXRpb24gQ3ljbGVzIFBNSCBpcyBidXN5IHdpdGggdGhpcyB3YWxrLgorCTB4MTAgc3RsYl9oaXQgRmlyc3QgbGV2ZWwgbWlzcyBidXQgc2Vjb25kIGxldmVsIGhpdDsgbm8gcGFnZSB3YWxrLgorbmFtZTppbGRfc3RhbGwgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgxCisJMHgxIGxjcCBTdGFsbCAib2NjdXJyZW5jZXMiIGR1ZSB0byBsZW5ndGggY2hhbmdpbmcgcHJlZml4ZXMgKExDUCkuCisJMHg0IGlxX2Z1bGwgU3RhbGwgY3ljbGVzIHdoZW4gaW5zdHJ1Y3Rpb25zIGNhbm5vdCBiZSB3cml0dGVuIGJlY2F1c2UgdGhlIEluc3RydWN0aW9uIFF1ZXVlIChJUSkgaXMgZnVsbC4KK25hbWU6YnJfaW5zdF9leGVjIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4ZmYKKwkweGZmIGFsbF9icmFuY2hlcyBBbGwgYnJhbmNoIGluc3RydWN0aW9ucyBleGVjdXRlZC4KKwkweDQxIG5vbnRha2VuX2NvbmRpdGlvbmFsIEFsbCBtYWNybyBjb25kaXRpb25hbCBub250YWtlbiBicmFuY2ggaW5zdHJ1Y3Rpb25zLgorCTB4ODEgdGFrZW5fY29uZGl0aW9uYWwgQWxsIG1hY3JvIGNvbmRpdGlvbmFsIHRha2VuIGJyYW5jaCBpbnN0cnVjdGlvbnMuCisJMHg4MiB0YWtlbl9kaXJlY3RfanVtcCBBbGwgbWFjcm8gdW5jb25kaXRpb25hbCB0YWtlbiBicmFuY2ggaW5zdHJ1Y3Rpb25zLCBleGNsdWRpbmcgY2FsbHMgYW5kIGluZGlyZWN0cy4KKwkweDg0IHRha2VuX2luZGlyZWN0X2p1bXBfbm9uX2NhbGxfcmV0IEFsbCB0YWtlbiBpbmRpcmVjdCBicmFuY2hlcyB0aGF0IGFyZSBub3QgY2FsbHMgbm9yIHJldHVybnMuCisJMHg4OCB0YWtlbl9pbmRpcmVjdF9uZWFyX3JldHVybiBBbGwgdGFrZW4gaW5kaXJlY3QgYnJhbmNoZXMgdGhhdCBoYXZlIGEgcmV0dXJuIG1uZW1vbmljLgorCTB4OTAgdGFrZW5fZGlyZWN0X25lYXJfY2FsbCBBbGwgdGFrZW4gbm9uLWluZGlyZWN0IGNhbGxzLgorCTB4YTAgdGFrZW5faW5kaXJlY3RfbmVhcl9jYWxsIEFsbCB0YWtlbiBpbmRpcmVjdCBjYWxscywgaW5jbHVkaW5nIGJvdGggcmVnaXN0ZXIgYW5kIG1lbW9yeSBpbmRpcmVjdC4KKwkweGMxIGFsbF9jb25kaXRpb25hbCBBbGwgbWFjcm8gY29uZGl0aW9uYWwgYnJhbmNoIGluc3RydWN0aW9ucy4KKwkweGMyIGFsbF9kaXJlY3Rfam1wIEFsbCBtYWNybyB1bmNvbmRpdGlvbmFsIGJyYW5jaCBpbnN0cnVjdGlvbnMsIGV4Y2x1ZGluZyBjYWxscyBhbmQgaW5kaXJlY3RzCisJMHhjNCBhbGxfaW5kaXJlY3RfanVtcF9ub25fY2FsbF9yZXQgQWxsIGluZGlyZWN0IGJyYW5jaGVzIHRoYXQgYXJlIG5vdCBjYWxscyBub3IgcmV0dXJucy4KKwkweGM4IGFsbF9pbmRpcmVjdF9uZWFyX3JldHVybiBBbGwgaW5kaXJlY3QgcmV0dXJuIGJyYW5jaGVzLgorCTB4ZDAgYWxsX2RpcmVjdF9uZWFyX2NhbGwgQWxsIG5vbi1pbmRpcmVjdCBjYWxscyBleGVjdXRlZC4KK25hbWU6YnJfbWlzcF9leGVjIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4ZmYKKwkweGZmIGFsbF9icmFuY2hlcyBBbGwgbWlzcHJlZGljdGVkIGJyYW5jaCBpbnN0cnVjdGlvbnMgZXhlY3V0ZWQuCisJMHg0MSBub250YWtlbl9jb25kaXRpb25hbCBBbGwgbm9udGFrZW4gbWlzcHJlZGljdGVkIG1hY3JvIGNvbmRpdGlvbmFsIGJyYW5jaCBpbnN0cnVjdGlvbnMuCisJMHg4MSB0YWtlbl9jb25kaXRpb25hbCBBbGwgdGFrZW4gbWlzcHJlZGljdGVkIG1hY3JvIGNvbmRpdGlvbmFsIGJyYW5jaCBpbnN0cnVjdGlvbnMuCisJMHg4NCB0YWtlbl9pbmRpcmVjdF9qdW1wX25vbl9jYWxsX3JldCBBbGwgdGFrZW4gbWlzcHJlZGljdGVkIGluZGlyZWN0IGJyYW5jaGVzIHRoYXQgYXJlIG5vdCBjYWxscyBub3IgcmV0dXJucy4KKwkweDg4IHRha2VuX3JldHVybl9uZWFyIEFsbCB0YWtlbiBtaXNwcmVkaWN0ZWQgaW5kaXJlY3QgYnJhbmNoZXMgdGhhdCBoYXZlIGEgcmV0dXJuIG1uZW1vbmljLgorCTB4OTAgdGFrZW5fZGlyZWN0X25lYXJfY2FsbCBBbGwgdGFrZW4gbWlzcHJlZGljdGVkIG5vbi1pbmRpcmVjdCBjYWxscy4KKwkweGEwIHRha2VuX2luZGlyZWN0X25lYXJfY2FsbCBBbGwgdGFrZW4gbWlzcHJlZGljdGVkIGluZGlyZWN0IGNhbGxzLCBpbmNsdWRpbmcgYm90aCByZWdpc3RlciBhbmQgbWVtb3J5IGluZGlyZWN0LgorCTB4YzEgYWxsX2NvbmRpdGlvbmFsIEFsbCBtaXNwcmVkaWN0ZWQgbWFjcm8gY29uZGl0aW9uYWwgYnJhbmNoIGluc3RydWN0aW9ucy4KKwkweGM0IGFsbF9pbmRpcmVjdF9qdW1wX25vbl9jYWxsX3JldCBBbGwgbWlzcHJlZGljdGVkIGluZGlyZWN0IGJyYW5jaGVzIHRoYXQgYXJlIG5vdCBjYWxscyBub3IgcmV0dXJucy4KKwkweGQwIGFsbF9kaXJlY3RfbmVhcl9jYWxsIEFsbCBtaXNwcmVkaWN0ZWQgbm9uLWluZGlyZWN0IGNhbGxzCituYW1lOmlkcV91b3BzX25vdF9kZWxpdmVyZWQgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgxCisJMHgxIGNvcmUgQ291bnQgbnVtYmVyIG9mIG5vbi1kZWxpdmVyZWQgdW9wcyB0byBSZXNvdXJjZSBBbGxvY2F0aW9uIFRhYmxlIChSQVQpLgorCTB4MSBleHRyYTpjbWFzaz00IGN5Y2xlc18wX3VvcHNfZGVsaXYuY29yZSBDb3VudHMgdGhlIGN5Y2xlcyBubyB1b3BzIHdlcmUgZGVsaXZlcmVkCisJMHgxIGV4dHJhOmNtYXNrPTMgY3ljbGVzX2xlXzFfdW9wX2RlbGl2LmNvcmUgQ291bnRzIHRoZSBjeWNsZXMgbGVzcyB0aGFuIDEgdW9wcyB3ZXJlIGRlbGl2ZXJlZAorCTB4MSBleHRyYTpjbWFzaz0yIGN5Y2xlc19sZV8yX3VvcF9kZWxpdi5jb3JlIENvdW50cyB0aGUgY3ljbGVzIGxlc3MgdGhhbiAyIHVvcHMgd2VyZSBkZWxpdmVyZWQKKwkweDEgZXh0cmE6Y21hc2s9MSBjeWNsZXNfbGVfM191b3BfZGVsaXYuY29yZSBDb3VudHMgdGhlIGN5Y2xlcyBsZXNzIHRoYW4gMyB1b3BzIHdlcmUgZGVsaXZlcmVkCisJMHgxIGV4dHJhOmNtYXNrPTQsaW52IGN5Y2xlc19nZV8xX3VvcF9kZWxpdi5jb3JlIEN5Y2xlcyB3aGVuIDEgb3IgbW9yZSB1b3BzIHdlcmUgZGVsaXZlcmVkIHRvIHRoZSBieSB0aGUgZnJvbnQgZW5kLgorCTB4MSBleHRyYTpjbWFzaz0xLGludiBjeWNsZXNfZmVfd2FzX29rIENvdW50cyBjeWNsZXMgRkUgZGVsaXZlcmVkIDQgdW9wcyBvciBSZXNvdXJjZSBBbGxvY2F0aW9uIFRhYmxlIChSQVQpIHdhcyBzdGFsbGluZyBGRS4KK25hbWU6dW9wc19kaXNwYXRjaGVkX3BvcnQgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgxCisJMHgxIHBvcnRfMCBDeWNsZXMgd2hpY2ggYSBVb3AgaXMgZGlzcGF0Y2hlZCBvbiBwb3J0IDAKKwkweDIgcG9ydF8xIEN5Y2xlcyB3aGljaCBhIFVvcCBpcyBkaXNwYXRjaGVkIG9uIHBvcnQgMQorCTB4NCBwb3J0XzJfbGQgQ3ljbGVzIHdoaWNoIGEgbG9hZCBVb3AgaXMgZGlzcGF0Y2hlZCBvbiBwb3J0IDIKKwkweDggcG9ydF8yX3N0YSBDeWNsZXMgd2hpY2ggYSBTVEEgVW9wIGlzIGRpc3BhdGNoZWQgb24gcG9ydCAyCisJMHgxMCBwb3J0XzNfbGQgQ3ljbGVzIHdoaWNoIGEgbG9hZCBVb3AgaXMgZGlzcGF0Y2hlZCBvbiBwb3J0IDMKKwkweDIwIHBvcnRfM19zdGEgQ3ljbGVzIHdoaWNoIGEgU1RBIFVvcCBpcyBkaXNwYXRjaGVkIG9uIHBvcnQgMworCTB4NDAgcG9ydF80IEN5Y2xlcyB3aGljaCBhIFVvcCBpcyBkaXNwYXRjaGVkIG9uIHBvcnQgNAorCTB4ODAgcG9ydF81IEN5Y2xlcyB3aGljaCBhIFVvcCBpcyBkaXNwYXRjaGVkIG9uIHBvcnQgNQorCTB4YyBwb3J0XzIgVW9wcyBkaXNwdGFjaGVkIHRvIHBvcnQgMiwgbG9hZHMgYW5kIHN0b3JlcyAoc3BlY3VsYXRpdmUgYW5kIHJldGlyZWQpCisJMHgzMCBwb3J0XzMgVW9wcyBkaXNwdGFjaGVkIHRvIHBvcnQgMywgbG9hZHMgYW5kIHN0b3JlcyAoc3BlY3VsYXRpdmUgYW5kIHJldGlyZWQpCisJMHhjIHBvcnRfMl9jb3JlIFVvcHMgZGlzcHRhY2hlZCB0byBwb3J0IDIsIGxvYWRzIGFuZCBzdG9yZXMgcGVyIGNvcmUgKHNwZWN1bGF0aXZlIGFuZCByZXRpcmVkKQorCTB4MzAgcG9ydF8zX2NvcmUgVW9wcyBkaXNwdGFjaGVkIHRvIHBvcnQgMywgbG9hZHMgYW5kIHN0b3JlcyBwZXIgY29yZSAoc3BlY3VsYXRpdmUgYW5kIHJldGlyZWQpCituYW1lOnJlc291cmNlX3N0YWxscyB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDEKKwkweDEgYW55IEN5Y2xlcyBBbGxvY2F0aW9uIGlzIHN0YWxsZWQgZHVlIHRvIFJlc291cmNlIFJlbGF0ZWQgcmVhc29uLgorCTB4MiBsYiBDeWNsZXMgQWxsb2NhdG9yIGlzIHN0YWxsZWQgZHVlIHRvIExvYWQgQnVmZmVyIGZ1bGwKKwkweDQgcnMgU3RhbGwgZHVlIHRvIG5vIGVsaWdpYmxlIFJlc2VydmF0aW9uIFN0YXRpb24gKFJTKSBlbnRyeSBhdmFpbGFibGUuCisJMHg4IHNiIEN5Y2xlcyBBbGxvY2F0b3IgaXMgc3RhbGxlZCBkdWUgdG8gU3RvcmUgQnVmZmVyIGZ1bGwgKG5vdCBpbmNsdWRpbmcgZHJhaW5pbmcgZnJvbSBzeW5jaCkuCisJMHgxMCByb2IgUk9CIGZ1bGwgY3ljbGVzLgorCTB4ZSBtZW1fcnMgUmVzb3VyY2Ugc3RhbGxzIGR1ZSB0byBMQiwgU0Igb3IgUmVzZXJ2YXRpb24gU3RhdGlvbiAoUlMpIGJlaW5nIGNvbXBsZXRlbHkgaW4gdXNlCisJMHhmMCBvb29fcnNyYyBSZXNvdXJjZSBzdGFsbHMgZHVlIHRvIFJvYiBiZWluZyBmdWxsLCBGQ1NXLCBNWENTUiBhbmQgT1RIRVIKKwkweGEgbGJfc2IgUmVzb3VyY2Ugc3RhbGxzIGR1ZSB0byBsb2FkIG9yIHN0b3JlIGJ1ZmZlcnMKK25hbWU6ZHNiMm1pdGVfc3dpdGNoZXMgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgxCisJMHgxIGNvdW50IE51bWJlciBvZiBEZWNvZGUgU3RyZWFtIEJ1ZmZlciAoRFNCKSB0byBNSVRFIHN3aXRjaGVzCisJMHgyIHBlbmFsdHlfY3ljbGVzIERlY29kZSBTdHJlYW0gQnVmZmVyIChEU0IpLXRvLU1JVEUgc3dpdGNoIHRydWUgcGVuYWx0eSBjeWNsZXMuCituYW1lOmRzYl9maWxsIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MgorCTB4MiBvdGhlcl9jYW5jZWwgQ291bnQgbnVtYmVyIG9mIHRpbWVzIGEgdmFsaWQgRFNCIGZpbGwgaGFzIGJlZW4gYWN0dWFsbHkgY2FuY2VsbGVkIGZvciBhbnkgcmVhc29uLgorCTB4OCBleGNlZWRfZHNiX2xpbmVzIERlY29kZSBTdHJlYW0gQnVmZmVyIChEU0IpIEZpbGwgZW5jb3VudGVyZWQgPiAzIERlY29kZSBTdHJlYW0gQnVmZmVyIChEU0IpIGxpbmVzLgorCTB4YSBhbGxfY2FuY2VsIENvdW50IG51bWJlciBvZiB0aW1lcyBhIHZhbGlkIERlY29kZSBTdHJlYW0gQnVmZmVyIChEU0IpIGZpbGwgaGFzIGJlZW4gYWN0dWFsbHkgY2FuY2VsbGVkIGZvciBhbnkgcmVhc29uLgorbmFtZTpvZmZjb3JlX3JlcXVlc3RzIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MQorCTB4MSBkZW1hbmRfZGF0YV9yZCBEZW1hbmQgRGF0YSBSZWFkIHJlcXVlc3RzIHNlbnQgdG8gdW5jb3JlCisJMHgyIGRlbWFuZF9jb2RlX3JkIE9mZmNvcmUgQ29kZSByZWFkIHJlcXVlc3RzLiBJbmNsdWRlcyBDYWNoZWFibGUgYW5kIFVuLWNhY2hlYWJsZXMuCisJMHg0IGRlbWFuZF9yZm8gT2ZmY29yZSBEZW1hbmQgUkZPcy4gSW5jbHVkZXMgcmVndWxhciBSRk8sIExvY2tzLCBJdG9NLgorCTB4OCBhbGxfZGF0YV9yZCBPZmZjb3JlIERlbWFuZCBhbmQgcHJlZmV0Y2ggZGF0YSByZWFkcyByZXR1cm5lZCB0byB0aGUgY29yZS4KK25hbWU6dW9wc19kaXNwYXRjaGVkIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MQorCTB4MSB0aHJlYWQgQ291bnRzIHRvdGFsIG51bWJlciBvZiB1b3BzIHRvIGJlIGRpc3BhdGNoZWQgcGVyLXRocmVhZCBlYWNoIGN5Y2xlLgorCTB4MSBleHRyYTpjbWFzaz0xLGludiBzdGFsbF9jeWNsZXMgQ291bnRzIG51bWJlciBvZiBjeWNsZXMgbm8gdW9wcyB3ZXJlIGRpc3BhdGNlZCB0byBiZSBleGVjdXRlZCBvbiB0aGlzIHRocmVhZC4KKwkweDIgY29yZSBDb3VudHMgdG90YWwgbnVtYmVyIG9mIHVvcHMgZGlzcGF0Y2hlZCBmcm9tIGFueSB0aHJlYWQKK25hbWU6dGxiX2ZsdXNoIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MQorCTB4MSBkdGxiX3RocmVhZCBDb3VudCBudW1iZXIgb2YgRFRMQiBmbHVzaGVzIG9mIHRocmVhZC1zcGVjaWZpYyBlbnRyaWVzLgorCTB4MjAgc3RsYl9hbnkgQ291bnQgbnVtYmVyIG9mIGFueSBTVExCIGZsdXNoZXMKK25hbWU6bDFkX2Jsb2NrcyB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDEKKwkweDEgbGRfYmFua19jb25mbGljdCBBbnkgZGlzcGF0Y2hlZCBsb2FkcyBjYW5jZWxsZWQgZHVlIHRvIERDVSBiYW5rIGNvbmZsaWN0CisJMHg1IGV4dHJhOmNtYXNrPTEgYmFua19jb25mbGljdF9jeWNsZXMgQ3ljbGVzIHdpdGggbDFkIGJsb2NrcyBkdWUgdG8gYmFuayBjb25mbGljdHMKK25hbWU6b3RoZXJfYXNzaXN0cyB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDIKKwkweDIgaXRsYl9taXNzX3JldGlyZWQgSW5zdHJ1Y3Rpb25zIHRoYXQgZXhwZXJpZW5jZWQgYW4gSVRMQiBtaXNzLiAgTm9uIFBlYnMKKwkweDEwIGF2eF90b19zc2UgTnVtYmVyIG9mIHRyYW5zaXRpb25zIGZyb20gQVZYLTI1NiB0byBsZWdhY3kgU1NFIHdoZW4gcGVuYWx0eSBhcHBsaWNhYmxlIE5vbiBQZWJzCisJMHgyMCBzc2VfdG9fYXZ4IE51bWJlciBvZiB0cmFuc2l0aW9ucyBmcm9tIGxlZ2FjeSBTU0UgdG8gQVZYLTI1NiB3aGVuIHBlbmFsdHkgYXBwbGljYWJsZSBOb24gUGVicworbmFtZTp1b3BzX3JldGlyZWQgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgxCisJMHgxIGFsbCBBbGwgdW9wcyB0aGF0IGFjdHVhbGx5IHJldGlyZWQuCisJMHgyIHJldGlyZV9zbG90cyBudW1iZXIgb2YgcmV0aXJlbWVudCBzbG90cyB1c2VkIG5vbiBQRUJTCisJMHgxIGV4dHJhOmNtYXNrPTEsaW52IHN0YWxsX2N5Y2xlcyBDeWNsZXMgbm8gZXhlY3V0YWJsZSB1b3BzIHJldGlyZWQKKwkweDEgZXh0cmE6Y21hc2s9MTAsaW52IHRvdGFsX2N5Y2xlcyBOdW1iZXIgb2YgY3ljbGVzIHVzaW5nIGFsd2F5cyB0cnVlIGNvbmRpdGlvbiBhcHBsaWVkIHRvICBub24gUEVCUyB1b3BzIHJldGlyZWQgZXZlbnQuCituYW1lOm1hY2hpbmVfY2xlYXJzIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MgorCTB4MiBtZW1vcnlfb3JkZXJpbmcgTnVtYmVyIG9mIE1lbW9yeSBPcmRlcmluZyBNYWNoaW5lIENsZWFycyBkZXRlY3RlZC4KKwkweDQgc21jIE51bWJlciBvZiBTZWxmLW1vZGlmeWluZyBjb2RlIChTTUMpIE1hY2hpbmUgQ2xlYXJzIGRldGVjdGVkLgorCTB4MjAgbWFza21vdiBOdW1iZXIgb2YgQVZYIG1hc2tlZCBtb3YgTWFjaGluZSBDbGVhcnMgZGV0ZWN0ZWQuCituYW1lOmJyX2luc3RfcmV0aXJlZCB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDEKKwkweDEgY29uZGl0aW9uYWwgQ291bnRzIGFsbCB0YWtlbiBhbmQgbm90IHRha2VuIG1hY3JvIGNvbmRpdGlvbmFsIGJyYW5jaCBpbnN0cnVjdGlvbnMuCisJMHgyIG5lYXJfY2FsbCBDb3VudHMgYWxsIG1hY3JvIGRpcmVjdCBhbmQgaW5kaXJlY3QgbmVhciBjYWxscy4gbm9uIFBFQlMKKwkweDggbmVhcl9yZXR1cm4gVGhpcyBldmVudCBjb3VudHMgdGhlIG51bWJlciBvZiBuZWFyIHJldCBpbnN0cnVjdGlvbnMgcmV0aXJlZC4KKwkweDEwIG5vdF90YWtlbiBDb3VudHMgYWxsIG5vdCB0YWtlbiBtYWNybyBicmFuY2ggaW5zdHJ1Y3Rpb25zIHJldGlyZWQuCisJMHgyMCBuZWFyX3Rha2VuIENvdW50cyB0aGUgbnVtYmVyIG9mIG5lYXIgYnJhbmNoIHRha2VuIGluc3RydWN0aW9ucyByZXRpcmVkLgorCTB4NDAgZmFyX2JyYW5jaCBDb3VudHMgdGhlIG51bWJlciBvZiBmYXIgYnJhbmNoICBpbnN0cnVjdGlvbnMgcmV0aXJlZC4KKwkweDQgYWxsX2JyYW5jaGVzX3BzIENvdW50cyBhbGwgdGFrZW4gYW5kIG5vdCB0YWtlbiBtYWNybyBicmFuY2hlcyBpbmNsdWRpbmcgZmFyIGJyYW5jaGVzLihQcmVjaXNlIEV2ZW50KQorCTB4MiBuZWFyX2NhbGxfcjMgUmluZzEyMyBvbmx5IG5lYXIgY2FsbHMgKG5vbiBwcmVjaXNlKQorCTB4MiBuZWFyX2NhbGxfcjNfcHMgUmluZzEyMyBvbmx5IG5lYXIgY2FsbHMgKHByZWNpc2UgZXZlbnQpCituYW1lOmJyX21pc3BfcmV0aXJlZCB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDEKKwkweDEgY29uZGl0aW9uYWwgQWxsIG1pc3ByZWRpY3RlZCBtYWNybyBjb25kaXRpb25hbCBicmFuY2ggaW5zdHJ1Y3Rpb25zLgorCTB4MiBuZWFyX2NhbGwgQWxsIG1hY3JvIGRpcmVjdCBhbmQgaW5kaXJlY3QgbmVhciBjYWxscworCTB4MTAgbm90X3Rha2VuIG51bWJlciBvZiBicmFuY2ggaW5zdHJ1Y3Rpb25zIHJldGlyZWQgdGhhdCB3ZXJlIG1pc3ByZWRpY3RlZCBhbmQgbm90LXRha2VuLgorCTB4MjAgdGFrZW4gbnVtYmVyIG9mIGJyYW5jaCBpbnN0cnVjdGlvbnMgcmV0aXJlZCB0aGF0IHdlcmUgbWlzcHJlZGljdGVkIGFuZCB0YWtlbi4KKwkweDQgYWxsX2JyYW5jaGVzX3BzIGFsbCBtYWNybyBicmFuY2hlcyAoUHJlY2lzZSBFdmVudCkKK25hbWU6ZnBfYXNzaXN0IHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MWUKKwkweDFlIGV4dHJhOmNtYXNrPTEgYW55IENvdW50cyBhbnkgRlBfQVNTSVNUIHVtYXNrIHdhcyBpbmNyZW1lbnRpbmcuCisJMHgyIHg4N19vdXRwdXQgb3V0cHV0IC0gTnVtZXJpYyBPdmVyZmxvdywgTnVtZXJpYyBVbmRlcmZsb3csIEluZXhhY3QgUmVzdWx0CisJMHg0IHg4N19pbnB1dCBpbnB1dCAtIEludmFsaWQgT3BlcmF0aW9uLCBEZW5vcm1hbCBPcGVyYW5kLCBTTmFOIE9wZXJhbmQKKwkweDggc2ltZF9vdXRwdXQgQW55IG91dHB1dCBTU0UqIEZQIEFzc2lzdCAtIE51bWVyaWMgT3ZlcmZsb3csIE51bWVyaWMgVW5kZXJmbG93LgorCTB4MTAgc2ltZF9pbnB1dCBBbnkgaW5wdXQgU1NFKiBGUCBBc3Npc3QKK25hbWU6bWVtX3VvcHNfcmV0aXJlZCB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDExCisJMHgxMSBzdGxiX21pc3NfbG9hZHMgU1RMQiBtaXNzZXMgZHVlcyB0byByZXRpcmVkIGxvYWRzCisJMHgxMiBzdGxiX21pc3Nfc3RvcmVzIFNUTEIgbWlzc2VzIGR1ZXMgdG8gcmV0aXJlZCBzdG9yZXMKKwkweDIxIGxvY2tfbG9hZHMgTG9ja2VkIHJldGlyZWQgbG9hZHMKKwkweDQxIHNwbGl0X2xvYWRzIFJldGlyZWQgbG9hZHMgY2F1c2luZyBjYWNoZWxpbmUgc3BsaXRzCisJMHg0MiBzcGxpdF9zdG9yZXMgUmV0aXJlZCBzdG9yZXMgY2F1c2luZyBjYWNoZWxpbmUgc3BsaXRzCisJMHg4MSBhbGxfbG9hZHMgQW55IHJldGlyZWQgbG9hZHMKKwkweDgyIGFsbF9zdG9yZXMgQW55IHJldGlyZWQgc3RvcmVzCituYW1lOm1lbV9sb2FkX3VvcHNfcmV0aXJlZCB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDEKKwkweDEgbDFfaGl0IExvYWQgaGl0IGluIG5lYXJlc3QtbGV2ZWwgKEwxRCkgY2FjaGUKKwkweDIgbDJfaGl0IExvYWQgaGl0IGluIG1pZC1sZXZlbCAoTDIpIGNhY2hlCisJMHg0IGxsY19oaXQgTG9hZCBoaXQgaW4gbGFzdC1sZXZlbCAoTDMpIGNhY2hlIHdpdGggbm8gc25vb3AgbmVlZGVkCisJMHg0MCBoaXRfbGZiIEEgbG9hZCBtaXNzZWQgTDFEIGJ1dCBoaXQgdGhlIEZpbGwgQnVmZmVyCituYW1lOm1lbV9sb2FkX3VvcHNfbGxjX2hpdF9yZXRpcmVkIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MQorCTB4MSB4c25wX21pc3MgTG9hZCBMTEMgSGl0IGFuZCBhIGNyb3NzLWNvcmUgU25vb3AgbWlzc2VkIGluIG9uLXBrZyBjb3JlIGNhY2hlCisJMHgyIHhzbnBfaGl0IExvYWQgTExDIEhpdCBhbmQgYSBjcm9zcy1jb3JlIFNub29wIGhpdHMgaW4gb24tcGtnIGNvcmUgY2FjaGUKKwkweDQgeHNucF9oaXRtIExvYWQgaGFkIEhpdE0gUmVzcG9uc2UgZnJvbSBhIGNvcmUgb24gc2FtZSBzb2NrZXQgKHNoYXJlZCBMTEMpLgorCTB4OCB4c25wX25vbmUgTG9hZCBoaXQgaW4gbGFzdC1sZXZlbCAoTDMpIGNhY2hlIHdpdGggbm8gc25vb3AgbmVlZGVkLgorbmFtZTpsMl90cmFucyB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDgwCisJMHg4MCBhbGxfcmVxdWVzdHMgVHJhbnNhY3Rpb25zIGFjY2Vzc2luZyBMMiBwaXBlCisJMHgxIGRlbWFuZF9kYXRhX3JkIERlbWFuZCBEYXRhIFJlYWQgcmVxdWVzdHMgdGhhdCBhY2Nlc3MgTDIgY2FjaGUsIGluY2x1ZGVzIEwxRCBwcmVmZXRjaGVzLgorCTB4MiByZm8gUkZPIHJlcXVlc3RzIHRoYXQgYWNjZXNzIEwyIGNhY2hlCisJMHg0IGNvZGVfcmQgTDIgY2FjaGUgYWNjZXNzZXMgd2hlbiBmZXRjaGluZyBpbnN0cnVjdGlvbnMgaW5jbHVkaW5nIEwxRCBjb2RlIHByZWZldGNoZXMKKwkweDggYWxsX3BmIEwyIG9yIExMQyBIVyBwcmVmZXRjaGVzIHRoYXQgYWNjZXNzIEwyIGNhY2hlCisJMHgxMCBsMWRfd2IgTDFEIHdyaXRlYmFja3MgdGhhdCBhY2Nlc3MgTDIgY2FjaGUKKwkweDIwIGwyX2ZpbGwgTDIgZmlsbCByZXF1ZXN0cyB0aGF0IGFjY2VzcyBMMiBjYWNoZQorCTB4NDAgbDJfd2IgTDIgd3JpdGViYWNrcyB0aGF0IGFjY2VzcyBMMiBjYWNoZQorbmFtZTpsMl9saW5lc19pbiB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDcKKwkweDcgYWxsIEwyIGNhY2hlIGxpbmVzIGZpbGxpbmcgTDIKKwkweDEgaSBMMiBjYWNoZSBsaW5lcyBpbiBJIHN0YXRlIGZpbGxpbmcgTDIKKwkweDIgcyBMMiBjYWNoZSBsaW5lcyBpbiBTIHN0YXRlIGZpbGxpbmcgTDIKKwkweDQgZSBMMiBjYWNoZSBsaW5lcyBpbiBFIHN0YXRlIGZpbGxpbmcgTDIKK25hbWU6bDJfbGluZXNfb3V0IHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MQorCTB4MSBkZW1hbmRfY2xlYW4gQ2xlYW4gbGluZSBldmljdGVkIGJ5IGEgZGVtYW5kCisJMHgyIGRlbWFuZF9kaXJ0eSBEaXJ0eSBsaW5lIGV2aWN0ZWQgYnkgYSBkZW1hbmQKKwkweDQgcGZfY2xlYW4gQ2xlYW4gbGluZSBldmljdGVkIGJ5IGFuIEwyIFByZWZldGNoCisJMHg4IHBmX2RpcnR5IERpcnR5IGxpbmUgZXZpY3RlZCBieSBhbiBMMiBQcmVmZXRjaAorCTB4YSBkaXJ0eV9hbGwgQW55IERpcnR5IGxpbmUgZXZpY3RlZApkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL2kzODYvd2VzdG1lcmUvZXZlbnRzIGIvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL2kzODYvd2VzdG1lcmUvZXZlbnRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5MTk4NjcKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9ldmVudHMvaTM4Ni93ZXN0bWVyZS9ldmVudHMKQEAgLTAsMCArMSw4OCBAQAorIworIyBJbnRlbCAiV2VzdG1lcmUiIG1pY3JvYXJjaGl0ZWN0dXJlIGNvcmUgZXZlbnRzLgorIworIyBTZWUgaHR0cDovL2Fyay5pbnRlbC5jb20vIGZvciBoZWxwIGluIGlkZW50aWZ5aW5nIFdlc3RtZXJlIGJhc2VkIENQVXMKKyMKKyMgTm90ZSB0aGUgbWluaW11bSBjb3VudHMgYXJlIG5vdCBkaXNjb3ZlcmVkIGV4cGVyaW1lbnRhbGx5IGFuZCBjb3VsZCBiZSBsaWtlbHkKKyMgbG93ZXJlZCBpbiBtYW55IGNhc2VzIHdpdGhvdXQgaWxsIGVmZmVjdC4KKyMKK2luY2x1ZGU6aTM4Ni9hcmNoX3BlcmZtb24KK2V2ZW50OjB4MDMgY291bnRlcnM6MCwxLDIsMyB1bTp4MDIgbWluaW11bToyMDAwMDAgbmFtZTpMT0FEX0JMT0NLIDogTG9hZHMgdGhhdCBwYXJ0aWFsbHkgb3ZlcmxhcCBhbiBlYXJsaWVyIHN0b3JlCitldmVudDoweDA0IGNvdW50ZXJzOjAsMSwyLDMgdW06eDA3IG1pbmltdW06MjAwMDAwIG5hbWU6U0JfRFJBSU4gOiBBbGwgU3RvcmUgYnVmZmVyIHN0YWxsIGN5Y2xlcworZXZlbnQ6MHgwNSBjb3VudGVyczowLDEsMiwzIHVtOngwMiBtaW5pbXVtOjIwMDAwMCBuYW1lOk1JU0FMSUdOX01FTV9SRUYgOiBNaXNhbGlnbmVkIHN0b3JlIHJlZmVyZW5jZXMKK2V2ZW50OjB4MDYgY291bnRlcnM6MCwxLDIsMyB1bTpzdG9yZV9ibG9ja3MgbWluaW11bToyMDAwMDAgbmFtZTpTVE9SRV9CTE9DS1MgOiBMb2FkcyBkZWxheWVkIHdpdGggYXQtUmV0aXJlbWVudCBibG9jayBjb2RlCitldmVudDoweDA3IGNvdW50ZXJzOjAsMSwyLDMgdW06eDAxIG1pbmltdW06MjAwMDAwIG5hbWU6UEFSVElBTF9BRERSRVNTX0FMSUFTIDogRmFsc2UgZGVwZW5kZW5jaWVzIGR1ZSB0byBwYXJ0aWFsIGFkZHJlc3MgYWxpYXNpbmcKK2V2ZW50OjB4MDggY291bnRlcnM6MCwxLDIsMyB1bTpkdGxiX2xvYWRfbWlzc2VzIG1pbmltdW06MjAwMDAwIG5hbWU6RFRMQl9MT0FEX01JU1NFUyA6IERUTEIgbG9hZCBtaXNzZXMKK2V2ZW50OjB4MGIgY291bnRlcnM6MCwxLDIsMyB1bTptZW1faW5zdF9yZXRpcmVkIG1pbmltdW06MjAwMDAwMCBuYW1lOk1FTV9JTlNUX1JFVElSRUQgOiBNZW1vcnkgaW5zdHJ1Y3Rpb25zIHJldGlyZWQgYWJvdmUgMCBjbG9ja3MgKFByZWNpc2UgRXZlbnQpCitldmVudDoweDBjIGNvdW50ZXJzOjAsMSwyLDMgdW06eDAxIG1pbmltdW06MjAwMDAwIG5hbWU6TUVNX1NUT1JFX1JFVElSRUQgOiBSZXRpcmVkIHN0b3JlcyB0aGF0IG1pc3MgdGhlIERUTEIgKFByZWNpc2UgRXZlbnQpCitldmVudDoweDBlIGNvdW50ZXJzOjAsMSwyLDMgdW06dW9wc19pc3N1ZWQgbWluaW11bToyMDAwMDAwIG5hbWU6VU9QU19JU1NVRUQgOiBVb3BzIGlzc3VlZAorZXZlbnQ6MHgwZiBjb3VudGVyczowLDEsMiwzIHVtOm1lbV91bmNvcmVfcmV0aXJlZCBtaW5pbXVtOjQwMDAwIG5hbWU6TUVNX1VOQ09SRV9SRVRJUkVEIDogTG9hZCBpbnN0cnVjdGlvbnMgcmV0aXJlZCB0aGF0IEhJVCBtb2RpZmllZCBkYXRhIGluIHNpYmxpbmcgY29yZSAoUHJlY2lzZSBFdmVudCkKK2V2ZW50OjB4MTAgY291bnRlcnM6MCwxLDIsMyB1bTpmcF9jb21wX29wc19leGUgbWluaW11bToyMDAwMDAwIG5hbWU6RlBfQ09NUF9PUFNfRVhFIDogTU1YIFVvcHMKK2V2ZW50OjB4MTIgY291bnRlcnM6MCwxLDIsMyB1bTpzaW1kX2ludF8xMjggbWluaW11bToyMDAwMDAgbmFtZTpTSU1EX0lOVF8xMjggOiAxMjggYml0IFNJTUQgaW50ZWdlciBwYWNrIG9wZXJhdGlvbnMKK2V2ZW50OjB4MTMgY291bnRlcnM6MCwxLDIsMyB1bTpsb2FkX2Rpc3BhdGNoIG1pbmltdW06MjAwMDAwMCBuYW1lOkxPQURfRElTUEFUQ0ggOiBBbGwgbG9hZHMgZGlzcGF0Y2hlZAorZXZlbnQ6MHgxNCBjb3VudGVyczowLDEsMiwzIHVtOmFyaXRoIG1pbmltdW06MjAwMDAwMCBuYW1lOkFSSVRIIDogQ3ljbGVzIHRoZSBkaXZpZGVyIGlzIGJ1c3kKK2V2ZW50OjB4MTcgY291bnRlcnM6MCwxLDIsMyB1bTp4MDEgbWluaW11bToyMDAwMDAwIG5hbWU6SU5TVF9RVUVVRV9XUklURVMgOiBJbnN0cnVjdGlvbnMgd3JpdHRlbiB0byBpbnN0cnVjdGlvbiBxdWV1ZS4KK2V2ZW50OjB4MTggY291bnRlcnM6MCwxLDIsMyB1bTp4MDEgbWluaW11bToyMDAwMDAwIG5hbWU6SU5TVF9ERUNPREVEIDogSW5zdHJ1Y3Rpb25zIHRoYXQgbXVzdCBiZSBkZWNvZGVkIGJ5IGRlY29kZXIgMAorZXZlbnQ6MHgxOSBjb3VudGVyczowLDEsMiwzIHVtOngwMSBtaW5pbXVtOjIwMDAwMDAgbmFtZTpUV09fVU9QX0lOU1RTX0RFQ09ERUQgOiBUd28gVW9wIGluc3RydWN0aW9ucyBkZWNvZGVkCitldmVudDoweDFlIGNvdW50ZXJzOjAsMSwyLDMgdW06eDAxIG1pbmltdW06MjAwMDAwMCBuYW1lOklOU1RfUVVFVUVfV1JJVEVfQ1lDTEVTIDogQ3ljbGVzIGluc3RydWN0aW9ucyBhcmUgd3JpdHRlbiB0byB0aGUgaW5zdHJ1Y3Rpb24gcXVldWUKK2V2ZW50OjB4MjAgY291bnRlcnM6MCwxLDIsMyB1bTp4MDEgbWluaW11bToyMDAwMDAwIG5hbWU6TFNEX09WRVJGTE9XIDogTG9vcHMgdGhhdCBjYW4ndCBzdHJlYW0gZnJvbSB0aGUgaW5zdHJ1Y3Rpb24gcXVldWUKK2V2ZW50OjB4MjQgY291bnRlcnM6MCwxLDIsMyB1bTpsMl9ycXN0cyBtaW5pbXVtOjIwMDAwMCBuYW1lOkwyX1JRU1RTIDogTDIgaW5zdHJ1Y3Rpb24gZmV0Y2ggaGl0cworZXZlbnQ6MHgyNiBjb3VudGVyczowLDEsMiwzIHVtOmwyX2RhdGFfcnFzdHMgbWluaW11bToyMDAwMDAgbmFtZTpMMl9EQVRBX1JRU1RTIDogQWxsIEwyIGRhdGEgcmVxdWVzdHMKK2V2ZW50OjB4MjcgY291bnRlcnM6MCwxLDIsMyB1bTpsMl93cml0ZSBtaW5pbXVtOjEwMDAwMCBuYW1lOkwyX1dSSVRFIDogTDIgZGVtYW5kIGxvY2sgUkZPcyBpbiBFIHN0YXRlCitldmVudDoweDI4IGNvdW50ZXJzOjAsMSwyLDMgdW06bDFkX3diX2wyIG1pbmltdW06MTAwMDAwIG5hbWU6TDFEX1dCX0wyIDogTDEgd3JpdGViYWNrcyB0byBMMiBpbiBFIHN0YXRlCitldmVudDoweDJlIGNvdW50ZXJzOjAsMSwyLDMgdW06bG9uZ2VzdF9sYXRfY2FjaGUgbWluaW11bToxMDAwMDAgbmFtZTpMT05HRVNUX0xBVF9DQUNIRSA6IExvbmdlc3QgbGF0ZW5jeSBjYWNoZSBtaXNzCitldmVudDoweDNjIGNvdW50ZXJzOjAsMSwyLDMgdW06Y3B1X2Nsa191bmhhbHRlZCBtaW5pbXVtOjEwMDAwMCBuYW1lOkNQVV9DTEtfVU5IQUxURUQgOiBSZWZlcmVuY2UgYmFzZSBjbG9jayAoMTMzIE1oeikgY3ljbGVzIHdoZW4gdGhyZWFkIGlzIG5vdCBoYWx0ZWQgKHByb2dyYW1tYWJsZSBjb3VudGVyKQorZXZlbnQ6MHg0OSBjb3VudGVyczowLDEsMiwzIHVtOmR0bGJfbWlzc2VzIG1pbmltdW06MjAwMDAwIG5hbWU6RFRMQl9NSVNTRVMgOiBEVExCIG1pc3NlcworZXZlbnQ6MHg0YyBjb3VudGVyczowLDEgdW06eDAxIG1pbmltdW06MjAwMDAwIG5hbWU6TE9BRF9ISVRfUFJFIDogTG9hZCBvcGVyYXRpb25zIGNvbmZsaWN0aW5nIHdpdGggc29mdHdhcmUgcHJlZmV0Y2hlcworZXZlbnQ6MHg0ZSBjb3VudGVyczowLDEgdW06bDFkX3ByZWZldGNoIG1pbmltdW06MjAwMDAwIG5hbWU6TDFEX1BSRUZFVENIIDogTDFEIGhhcmR3YXJlIHByZWZldGNoIG1pc3NlcworZXZlbnQ6MHg0ZiBjb3VudGVyczowLDEsMiwzIHVtOngxMCBtaW5pbXVtOjIwMDAwMDAgbmFtZTpFUFQgOiBFeHRlbmRlZCBQYWdlIFRhYmxlIHdhbGsgY3ljbGVzCitldmVudDoweDUxIGNvdW50ZXJzOjAsMSB1bTpsMWQgbWluaW11bToyMDAwMDAwIG5hbWU6TDFEIDogTDFEIGNhY2hlIGxpbmVzIHJlcGxhY2VkIGluIE0gc3RhdGUgCitldmVudDoweDUyIGNvdW50ZXJzOjAsMSB1bTp4MDEgbWluaW11bToyMDAwMDAwIG5hbWU6TDFEX0NBQ0hFX1BSRUZFVENIX0xPQ0tfRkJfSElUIDogTDFEIHByZWZldGNoIGxvYWQgbG9jayBhY2NlcHRlZCBpbiBmaWxsIGJ1ZmZlcgorZXZlbnQ6MHg2MCBjb3VudGVyczowIHVtOm9mZmNvcmVfcmVxdWVzdHNfb3V0c3RhbmRpbmcgbWluaW11bToyMDAwMDAwIG5hbWU6T0ZGQ09SRV9SRVFVRVNUU19PVVRTVEFORElORyA6IE91dHN0YW5kaW5nIG9mZmNvcmUgcmVhZHMKK2V2ZW50OjB4NjMgY291bnRlcnM6MCwxIHVtOmNhY2hlX2xvY2tfY3ljbGVzIG1pbmltdW06MjAwMDAwMCBuYW1lOkNBQ0hFX0xPQ0tfQ1lDTEVTIDogQ3ljbGVzIEwxRCBsb2NrZWQKK2V2ZW50OjB4NmMgY291bnRlcnM6MCwxLDIsMyB1bTp4MDEgbWluaW11bToyMDAwMDAwIG5hbWU6SU9fVFJBTlNBQ1RJT05TIDogSS9PIHRyYW5zYWN0aW9ucworZXZlbnQ6MHg4MCBjb3VudGVyczowLDEsMiwzIHVtOmwxaSBtaW5pbXVtOjIwMDAwMDAgbmFtZTpMMUkgOiBMMUkgaW5zdHJ1Y3Rpb24gZmV0Y2ggc3RhbGwgY3ljbGVzCitldmVudDoweDgyIGNvdW50ZXJzOjAsMSwyLDMgdW06eDAxIG1pbmltdW06MjAwMDAwIG5hbWU6TEFSR0VfSVRMQiA6IExhcmdlIElUTEIgaGl0CitldmVudDoweDg1IGNvdW50ZXJzOjAsMSwyLDMgdW06aXRsYl9taXNzZXMgbWluaW11bToyMDAwMDAgbmFtZTpJVExCX01JU1NFUyA6IElUTEIgbWlzcworZXZlbnQ6MHg4NyBjb3VudGVyczowLDEsMiwzIHVtOmlsZF9zdGFsbCBtaW5pbXVtOjIwMDAwMDAgbmFtZTpJTERfU1RBTEwgOiBBbnkgSW5zdHJ1Y3Rpb24gTGVuZ3RoIERlY29kZXIgc3RhbGwgY3ljbGVzCitldmVudDoweDg4IGNvdW50ZXJzOjAsMSwyLDMgdW06YnJfaW5zdF9leGVjIG1pbmltdW06MjAwMDAwIG5hbWU6QlJfSU5TVF9FWEVDIDogQnJhbmNoIGluc3RydWN0aW9ucyBleGVjdXRlZAorZXZlbnQ6MHg4OSBjb3VudGVyczowLDEsMiwzIHVtOmJyX21pc3BfZXhlYyBtaW5pbXVtOjIwMDAwIG5hbWU6QlJfTUlTUF9FWEVDIDogTWlzcHJlZGljdGVkIGJyYW5jaGVzIGV4ZWN1dGVkCitldmVudDoweGEyIGNvdW50ZXJzOjAsMSwyLDMgdW06cmVzb3VyY2Vfc3RhbGxzIG1pbmltdW06MjAwMDAwMCBuYW1lOlJFU09VUkNFX1NUQUxMUyA6IFJlc291cmNlIHJlbGF0ZWQgc3RhbGwgY3ljbGVzCitldmVudDoweGE2IGNvdW50ZXJzOjAsMSwyLDMgdW06eDAxIG1pbmltdW06MjAwMDAwMCBuYW1lOk1BQ1JPX0lOU1RTIDogTWFjcm8tZnVzZWQgaW5zdHJ1Y3Rpb25zIGRlY29kZWQKK2V2ZW50OjB4YTcgY291bnRlcnM6MCwxLDIsMyB1bTp4MDEgbWluaW11bToyMDAwMDAwIG5hbWU6QkFDTEVBUl9GT1JDRV9JUSA6IEluc3RydWN0aW9uIHF1ZXVlIGZvcmNlZCBCQUNMRUFSCitldmVudDoweGE4IGNvdW50ZXJzOjAsMSwyLDMgdW06eDAxIG1pbmltdW06MjAwMDAwMCBuYW1lOkxTRCA6IEN5Y2xlcyB3aGVuIHVvcHMgd2VyZSBkZWxpdmVyZWQgYnkgdGhlIExTRAorZXZlbnQ6MHhhZSBjb3VudGVyczowLDEsMiwzIHVtOngwMSBtaW5pbXVtOjIwMDAwMDAgbmFtZTpJVExCX0ZMVVNIIDogSVRMQiBmbHVzaGVzCitldmVudDoweGIwIGNvdW50ZXJzOjAsMSwyLDMgdW06b2ZmY29yZV9yZXF1ZXN0cyBtaW5pbXVtOjEwMDAwMCBuYW1lOk9GRkNPUkVfUkVRVUVTVFMgOiBBbGwgb2ZmY29yZSByZXF1ZXN0cworZXZlbnQ6MHhiMSBjb3VudGVyczowLDEsMiwzIHVtOnVvcHNfZXhlY3V0ZWQgbWluaW11bToyMDAwMDAwIG5hbWU6VU9QU19FWEVDVVRFRCA6IEN5Y2xlcyBVb3BzIGV4ZWN1dGVkIG9uIGFueSBwb3J0IChjb3JlIGNvdW50KQorZXZlbnQ6MHhiMiBjb3VudGVyczowLDEsMiwzIHVtOngwMSBtaW5pbXVtOjEwMDAwMCBuYW1lOk9GRkNPUkVfUkVRVUVTVFNfU1FfRlVMTCA6IE9mZmNvcmUgcmVxdWVzdHMgYmxvY2tlZCBkdWUgdG8gU3VwZXIgUXVldWUgZnVsbAorZXZlbnQ6MHhiMyBjb3VudGVyczowIHVtOnNub29wcV9yZXF1ZXN0c19vdXRzdGFuZGluZyBtaW5pbXVtOjIwMDAwMDAgbmFtZTpTTk9PUFFfUkVRVUVTVFNfT1VUU1RBTkRJTkcgOiBPdXRzdGFuZGluZyBzbm9vcCBjb2RlIHJlcXVlc3RzCitldmVudDoweGI0IGNvdW50ZXJzOjAsMSwyLDMgdW06c25vb3BxX3JlcXVlc3RzIG1pbmltdW06MTAwMDAwIG5hbWU6U05PT1BRX1JFUVVFU1RTIDogU25vb3AgY29kZSByZXF1ZXN0cworZXZlbnQ6MHhiNyBjb3VudGVyczoyIHVtOngwMSBtaW5pbXVtOjEwMDAwMCBuYW1lOk9GRkNPUkVfUkVTUE9OU0VfQU5ZX0RBVEEgOiBSRVFVRVNUID0gQU5ZX0RBVEEgcmVhZCBhbmQgUkVTUE9OU0UgPSBBTllfQ0FDSEVfRFJBTQorZXZlbnQ6MHhiOCBjb3VudGVyczowLDEsMiwzIHVtOnNub29wX3Jlc3BvbnNlIG1pbmltdW06MTAwMDAwIG5hbWU6U05PT1BfUkVTUE9OU0UgOiBUaHJlYWQgcmVzcG9uZGVkIEhJVCB0byBzbm9vcAorZXZlbnQ6MHhiYiBjb3VudGVyczoxIHVtOngwMSBtaW5pbXVtOjEwMDAwMCBuYW1lOk9GRkNPUkVfUkVTUE9OU0VfQU5ZX0RBVEEgOiBSRVFVRVNUID0gQU5ZX0RBVEEgcmVhZCBhbmQgUkVTUE9OU0UgPSBBTllfQ0FDSEVfRFJBTQorZXZlbnQ6MHhjMCBjb3VudGVyczowLDEsMiwzIHVtOmluc3RfcmV0aXJlZCBtaW5pbXVtOjIwMDAwMDAgbmFtZTpJTlNUX1JFVElSRUQgOiBJbnN0cnVjdGlvbnMgcmV0aXJlZCAoUHJvZ3JhbW1hYmxlIGNvdW50ZXIgYW5kIFByZWNpc2UgRXZlbnQpCitldmVudDoweGMyIGNvdW50ZXJzOjAsMSwyLDMgdW06dW9wc19yZXRpcmVkIG1pbmltdW06MjAwMDAwMCBuYW1lOlVPUFNfUkVUSVJFRCA6IEN5Y2xlcyBVb3BzIGFyZSBiZWluZyByZXRpcmVkCitldmVudDoweGMzIGNvdW50ZXJzOjAsMSwyLDMgdW06bWFjaGluZV9jbGVhcnMgbWluaW11bToyMDAwMCBuYW1lOk1BQ0hJTkVfQ0xFQVJTIDogQ3ljbGVzIG1hY2hpbmUgY2xlYXIgYXNzZXJ0ZWQKK2V2ZW50OjB4YzQgY291bnRlcnM6MCwxLDIsMyB1bTpicl9pbnN0X3JldGlyZWQgbWluaW11bToyMDAwMDAgbmFtZTpCUl9JTlNUX1JFVElSRUQgOiBSZXRpcmVkIGJyYW5jaCBpbnN0cnVjdGlvbnMgKFByZWNpc2UgRXZlbnQpCitldmVudDoweGM1IGNvdW50ZXJzOjAsMSwyLDMgdW06YnJfbWlzcF9yZXRpcmVkIG1pbmltdW06MjAwMDAgbmFtZTpCUl9NSVNQX1JFVElSRUQgOiBNaXNwcmVkaWN0ZWQgcmV0aXJlZCBicmFuY2ggaW5zdHJ1Y3Rpb25zIChQcmVjaXNlIEV2ZW50KQorZXZlbnQ6MHhjNyBjb3VudGVyczowLDEsMiwzIHVtOnNzZXhfdW9wc19yZXRpcmVkIG1pbmltdW06MjAwMDAwIG5hbWU6U1NFWF9VT1BTX1JFVElSRUQgOiBTSU1EIFBhY2tlZC1Eb3VibGUgVW9wcyByZXRpcmVkIChQcmVjaXNlIEV2ZW50KQorZXZlbnQ6MHhjOCBjb3VudGVyczowLDEsMiwzIHVtOngyMCBtaW5pbXVtOjIwMDAwMCBuYW1lOklUTEJfTUlTU19SRVRJUkVEIDogUmV0aXJlZCBpbnN0cnVjdGlvbnMgdGhhdCBtaXNzZWQgdGhlIElUTEIgKFByZWNpc2UgRXZlbnQpCitldmVudDoweGNiIGNvdW50ZXJzOjAsMSwyLDMgdW06bWVtX2xvYWRfcmV0aXJlZCBtaW5pbXVtOjIwMDAwMCBuYW1lOk1FTV9MT0FEX1JFVElSRUQgOiBSZXRpcmVkIGxvYWRzIHRoYXQgbWlzcyB0aGUgRFRMQiAoUHJlY2lzZSBFdmVudCkKK2V2ZW50OjB4Y2MgY291bnRlcnM6MCwxLDIsMyB1bTpmcF9tbXhfdHJhbnMgbWluaW11bToyMDAwMDAwIG5hbWU6RlBfTU1YX1RSQU5TIDogQWxsIEZsb2F0aW5nIFBvaW50IHRvIGFuZCBmcm9tIE1NWCB0cmFuc2l0aW9ucworZXZlbnQ6MHhkMCBjb3VudGVyczowLDEsMiwzIHVtOngwMSBtaW5pbXVtOjIwMDAwMDAgbmFtZTpNQUNST19JTlNUUyA6IEluc3RydWN0aW9ucyBkZWNvZGVkCitldmVudDoweGQxIGNvdW50ZXJzOjAsMSwyLDMgdW06dW9wc19kZWNvZGVkIG1pbmltdW06MjAwMDAwMCBuYW1lOlVPUFNfREVDT0RFRCA6IFN0YWNrIHBvaW50ZXIgaW5zdHJ1Y3Rpb25zIGRlY29kZWQKK2V2ZW50OjB4ZDIgY291bnRlcnM6MCwxLDIsMyB1bTpyYXRfc3RhbGxzIG1pbmltdW06MjAwMDAwMCBuYW1lOlJBVF9TVEFMTFMgOiBBbGwgUkFUIHN0YWxsIGN5Y2xlcworZXZlbnQ6MHhkNCBjb3VudGVyczowLDEsMiwzIHVtOngwMSBtaW5pbXVtOjIwMDAwMDAgbmFtZTpTRUdfUkVOQU1FX1NUQUxMUyA6IFNlZ21lbnQgcmVuYW1lIHN0YWxsIGN5Y2xlcworZXZlbnQ6MHhkNSBjb3VudGVyczowLDEsMiwzIHVtOngwMSBtaW5pbXVtOjIwMDAwMDAgbmFtZTpFU19SRUdfUkVOQU1FUyA6IEVTIHNlZ21lbnQgcmVuYW1lcworZXZlbnQ6MHhkYiBjb3VudGVyczowLDEsMiwzIHVtOngwMSBtaW5pbXVtOjIwMDAwMDAgbmFtZTpVT1BfVU5GVVNJT04gOiBVb3AgdW5mdXNpb25zIGR1ZSB0byBGUCBleGNlcHRpb25zCitldmVudDoweGUwIGNvdW50ZXJzOjAsMSwyLDMgdW06eDAxIG1pbmltdW06MjAwMDAwMCBuYW1lOkJSX0lOU1RfREVDT0RFRCA6IEJyYW5jaCBpbnN0cnVjdGlvbnMgZGVjb2RlZAorZXZlbnQ6MHhlNSBjb3VudGVyczowLDEsMiwzIHVtOngwMSBtaW5pbXVtOjIwMDAwMDAgbmFtZTpCUFVfTUlTU0VEX0NBTExfUkVUIDogQnJhbmNoIHByZWRpY3Rpb24gdW5pdCBtaXNzZWQgY2FsbCBvciByZXR1cm4KK2V2ZW50OjB4ZTYgY291bnRlcnM6MCwxLDIsMyB1bTpiYWNsZWFyIG1pbmltdW06MjAwMDAwMCBuYW1lOkJBQ0xFQVIgOiBCQUNMRUFSIGFzc2VydGVkIHdpdGggYmFkIHRhcmdldCBhZGRyZXNzCitldmVudDoweGU4IGNvdW50ZXJzOjAsMSwyLDMgdW06YnB1X2NsZWFycyBtaW5pbXVtOjIwMDAwMDAgbmFtZTpCUFVfQ0xFQVJTIDogRWFybHkgQnJhbmNoIFByZWRpY3Rpb24gVW5pdCBjbGVhcnMKK2V2ZW50OjB4ZjAgY291bnRlcnM6MCwxLDIsMyB1bTpsMl90cmFuc2FjdGlvbnMgbWluaW11bToyMDAwMDAgbmFtZTpMMl9UUkFOU0FDVElPTlMgOiBBbGwgTDIgdHJhbnNhY3Rpb25zCitldmVudDoweGYxIGNvdW50ZXJzOjAsMSwyLDMgdW06bDJfbGluZXNfaW4gbWluaW11bToxMDAwMDAgbmFtZTpMMl9MSU5FU19JTiA6IEwyIGxpbmVzIGFsbG9hY2F0ZWQKK2V2ZW50OjB4ZjIgY291bnRlcnM6MCwxLDIsMyB1bTpsMl9saW5lc19vdXQgbWluaW11bToxMDAwMDAgbmFtZTpMMl9MSU5FU19PVVQgOiBMMiBsaW5lcyBldmljdGVkCitldmVudDoweGY0IGNvdW50ZXJzOjAsMSwyLDMgdW06c3FfbWlzYyBtaW5pbXVtOjIwMDAwMDAgbmFtZTpTUV9NSVNDIDogU3VwZXIgUXVldWUgTFJVIGhpbnRzIHNlbnQgdG8gTExDCitldmVudDoweGY2IGNvdW50ZXJzOjAsMSwyLDMgdW06eDAxIG1pbmltdW06MjAwMDAwMCBuYW1lOlNRX0ZVTExfU1RBTExfQ1lDTEVTIDogU3VwZXIgUXVldWUgZnVsbCBzdGFsbCBjeWNsZXMKK2V2ZW50OjB4ZjcgY291bnRlcnM6MCwxLDIsMyB1bTpmcF9hc3Npc3QgbWluaW11bToyMDAwMCBuYW1lOkZQX0FTU0lTVCA6IFg4NyBGbG9hdGluZyBwb2ludCBhc3Npc3RzIChQcmVjaXNlIEV2ZW50KQorZXZlbnQ6MHhmZCBjb3VudGVyczowLDEsMiwzIHVtOnNpbWRfaW50XzY0IG1pbmltdW06MjAwMDAwIG5hbWU6U0lNRF9JTlRfNjQgOiBTSU1EIGludGVnZXIgNjQgYml0IHBhY2sgb3BlcmF0aW9ucwpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL2kzODYvd2VzdG1lcmUvdW5pdF9tYXNrcyBiL29wcm9maWxlLTAuOS43L2V2ZW50cy9pMzg2L3dlc3RtZXJlL3VuaXRfbWFza3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzk4ZDgxYQotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2V2ZW50cy9pMzg2L3dlc3RtZXJlL3VuaXRfbWFza3MKQEAgLTAsMCArMSwzMDYgQEAKKyMKKyMgVW5pdCBtYXNrcyBmb3IgdGhlIEludGVsICJXZXN0bWVyZSIgbWljcm8gYXJjaGl0ZWN0dXJlCisjCisjIFNlZSBodHRwOi8vYXJrLmludGVsLmNvbS8gZm9yIGhlbHAgaW4gaWRlbnRpZnlpbmcgV2VzdG1lcmUgYmFzZWQgQ1BVcworIworaW5jbHVkZTppMzg2L2FyY2hfcGVyZm1vbgorCituYW1lOngwMSB0eXBlOm1hbmRhdG9yeSBkZWZhdWx0OjB4MDEKKwkweDAxIE5vIHVuaXQgbWFzaworbmFtZTp4MDIgdHlwZTptYW5kYXRvcnkgZGVmYXVsdDoweDAyCisJMHgwMiBObyB1bml0IG1hc2sKK25hbWU6eDA3IHR5cGU6bWFuZGF0b3J5IGRlZmF1bHQ6MHgwNworCTB4MDcgTm8gdW5pdCBtYXNrCituYW1lOngxMCB0eXBlOm1hbmRhdG9yeSBkZWZhdWx0OjB4MTAKKwkweDEwIE5vIHVuaXQgbWFzaworbmFtZTp4MjAgdHlwZTptYW5kYXRvcnkgZGVmYXVsdDoweDIwCisJMHgyMCBObyB1bml0IG1hc2sKK25hbWU6YXJpdGggdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwMQorCTB4MDEgY3ljbGVzX2Rpdl9idXN5IEN5Y2xlcyB0aGUgZGl2aWRlciBpcyBidXN5CisJMHgwMiBtdWwgTXVsdGlwbHkgb3BlcmF0aW9ucyBleGVjdXRlZAorbmFtZTpiYWNsZWFyIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MDEKKwkweDAxIGNsZWFyIEJBQ0xFQVIgYXNzZXJ0ZWQsIHJlZ2FyZGxlc3Mgb2YgY2F1c2UgCisJMHgwMiBiYWRfdGFyZ2V0IEJBQ0xFQVIgYXNzZXJ0ZWQgd2l0aCBiYWQgdGFyZ2V0IGFkZHJlc3MKK25hbWU6YnB1X2NsZWFycyB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDAxCisJMHgwMSBlYXJseSBFYXJseSBCcmFuY2ggUHJlZGljdGlvbiBVbml0IGNsZWFycworCTB4MDIgbGF0ZSBMYXRlIEJyYW5jaCBQcmVkaWN0aW9uIFVuaXQgY2xlYXJzCituYW1lOmJyX2luc3RfZXhlYyB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDdmCisJMHgwMSBjb25kIENvbmRpdGlvbmFsIGJyYW5jaCBpbnN0cnVjdGlvbnMgZXhlY3V0ZWQKKwkweDAyIGRpcmVjdCBVbmNvbmRpdGlvbmFsIGJyYW5jaGVzIGV4ZWN1dGVkCisJMHgwNCBpbmRpcmVjdF9ub25fY2FsbCBJbmRpcmVjdCBub24gY2FsbCBicmFuY2hlcyBleGVjdXRlZAorCTB4MDcgbm9uX2NhbGxzIEFsbCBub24gY2FsbCBicmFuY2hlcyBleGVjdXRlZAorCTB4MDggcmV0dXJuX25lYXIgSW5kaXJlY3QgcmV0dXJuIGJyYW5jaGVzIGV4ZWN1dGVkCisJMHgxMCBkaXJlY3RfbmVhcl9jYWxsIFVuY29uZGl0aW9uYWwgY2FsbCBicmFuY2hlcyBleGVjdXRlZAorCTB4MjAgaW5kaXJlY3RfbmVhcl9jYWxsIEluZGlyZWN0IGNhbGwgYnJhbmNoZXMgZXhlY3V0ZWQKKwkweDMwIG5lYXJfY2FsbHMgQ2FsbCBicmFuY2hlcyBleGVjdXRlZAorCTB4NDAgdGFrZW4gVGFrZW4gYnJhbmNoZXMgZXhlY3V0ZWQKKwkweDdmIGFueSBCcmFuY2ggaW5zdHJ1Y3Rpb25zIGV4ZWN1dGVkCituYW1lOmJyX2luc3RfcmV0aXJlZCB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDA0CisJMHgwMSBjb25kaXRpb25hbCBSZXRpcmVkIGNvbmRpdGlvbmFsIGJyYW5jaCBpbnN0cnVjdGlvbnMgKFByZWNpc2UgRXZlbnQpCisJMHgwMiBuZWFyX2NhbGwgUmV0aXJlZCBuZWFyIGNhbGwgaW5zdHJ1Y3Rpb25zIChQcmVjaXNlIEV2ZW50KQorCTB4MDQgYWxsX2JyYW5jaGVzIFJldGlyZWQgYnJhbmNoIGluc3RydWN0aW9ucyAoUHJlY2lzZSBFdmVudCkKK25hbWU6YnJfbWlzcF9leGVjIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4N2YKKwkweDAxIGNvbmQgTWlzcHJlZGljdGVkIGNvbmRpdGlvbmFsIGJyYW5jaGVzIGV4ZWN1dGVkCisJMHgwMiBkaXJlY3QgTWlzcHJlZGljdGVkIHVuY29uZGl0aW9uYWwgYnJhbmNoZXMgZXhlY3V0ZWQKKwkweDA0IGluZGlyZWN0X25vbl9jYWxsIE1pc3ByZWRpY3RlZCBpbmRpcmVjdCBub24gY2FsbCBicmFuY2hlcyBleGVjdXRlZAorCTB4MDcgbm9uX2NhbGxzIE1pc3ByZWRpY3RlZCBub24gY2FsbCBicmFuY2hlcyBleGVjdXRlZAorCTB4MDggcmV0dXJuX25lYXIgTWlzcHJlZGljdGVkIHJldHVybiBicmFuY2hlcyBleGVjdXRlZAorCTB4MTAgZGlyZWN0X25lYXJfY2FsbCBNaXNwcmVkaWN0ZWQgbm9uIGNhbGwgYnJhbmNoZXMgZXhlY3V0ZWQKKwkweDIwIGluZGlyZWN0X25lYXJfY2FsbCBNaXNwcmVkaWN0ZWQgaW5kaXJlY3QgY2FsbCBicmFuY2hlcyBleGVjdXRlZAorCTB4MzAgbmVhcl9jYWxscyBNaXNwcmVkaWN0ZWQgY2FsbCBicmFuY2hlcyBleGVjdXRlZAorCTB4NDAgdGFrZW4gTWlzcHJlZGljdGVkIHRha2VuIGJyYW5jaGVzIGV4ZWN1dGVkCisJMHg3ZiBhbnkgTWlzcHJlZGljdGVkIGJyYW5jaGVzIGV4ZWN1dGVkCituYW1lOmJyX21pc3BfcmV0aXJlZCB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDA0CisJMHgwMSBjb25kaXRpb25hbCBNaXNwcmVkaWN0ZWQgY29uZGl0aW9uYWwgcmV0aXJlZCBicmFuY2hlcyAoUHJlY2lzZSBFdmVudCkKKwkweDAyIG5lYXJfY2FsbCBNaXNwcmVkaWN0ZWQgbmVhciByZXRpcmVkIGNhbGxzIChQcmVjaXNlIEV2ZW50KQorCTB4MDQgYWxsX2JyYW5jaGVzIE1pc3ByZWRpY3RlZCByZXRpcmVkIGJyYW5jaCBpbnN0cnVjdGlvbnMgKFByZWNpc2UgRXZlbnQpCituYW1lOmNhY2hlX2xvY2tfY3ljbGVzIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MDEKKwkweDAxIGwxZF9sMiBDeWNsZXMgTDFEIGFuZCBMMiBsb2NrZWQKKwkweDAyIGwxZCBDeWNsZXMgTDFEIGxvY2tlZAorbmFtZTpjcHVfY2xrX3VuaGFsdGVkIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MDAKKwkweDAwIHRocmVhZF9wIEN5Y2xlcyB3aGVuIHRocmVhZCBpcyBub3QgaGFsdGVkIChwcm9ncmFtbWFibGUgY291bnRlcikKKwkweDAxIHJlZl9wIFJlZmVyZW5jZSBiYXNlIGNsb2NrICgxMzMgTWh6KSBjeWNsZXMgd2hlbiB0aHJlYWQgaXMgbm90IGhhbHRlZCAocHJvZ3JhbW1hYmxlIGNvdW50ZXIpCituYW1lOmR0bGJfbG9hZF9taXNzZXMgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwMQorCTB4MDEgYW55IERUTEIgbG9hZCBtaXNzZXMKKwkweDAyIHdhbGtfY29tcGxldGVkIERUTEIgbG9hZCBtaXNzIHBhZ2Ugd2Fsa3MgY29tcGxldGUKKwkweDA0IHdhbGtfY3ljbGVzIERUTEIgbG9hZCBtaXNzIHBhZ2Ugd2FsayBjeWNsZXMKKwkweDEwIHN0bGJfaGl0IERUTEIgc2Vjb25kIGxldmVsIGhpdAorCTB4MjAgcGRlX21pc3MgRFRMQiBsb2FkIG1pc3MgY2F1c2VkIGJ5IGxvdyBwYXJ0IG9mIGFkZHJlc3MKKwkweDgwIGxhcmdlX3dhbGtfY29tcGxldGVkIERUTEIgbG9hZCBtaXNzIGxhcmdlIHBhZ2Ugd2Fsa3MKK25hbWU6ZHRsYl9taXNzZXMgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwMQorCTB4MDEgYW55IERUTEIgbWlzc2VzCisJMHgwMiB3YWxrX2NvbXBsZXRlZCBEVExCIG1pc3MgcGFnZSB3YWxrcworCTB4MDQgd2Fsa19jeWNsZXMgRFRMQiBtaXNzIHBhZ2Ugd2FsayBjeWNsZXMKKwkweDEwIHN0bGJfaGl0IERUTEIgZmlyc3QgbGV2ZWwgbWlzc2VzIGJ1dCBzZWNvbmQgbGV2ZWwgaGl0CisJMHgyMCBwZGVfbWlzcyBEVExCIG1pc3NlcyBjYXN1ZWQgYnkgbG93IHBhcnQgb2YgYWRkcmVzcworCTB4ODAgbGFyZ2Vfd2Fsa19jb21wbGV0ZWQgRFRMQiBtaXNzIGxhcmdlIHBhZ2Ugd2Fsa3MKK25hbWU6ZnBfYXNzaXN0IHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MDEKKwkweDAxIGFsbCBYODcgRmxvYXRpbmcgcG9pbnQgYXNzaXN0cyAoUHJlY2lzZSBFdmVudCkKKwkweDAyIG91dHB1dCBYODcgRmxvYXRpbmcgcG9pbnQgYXNzaXN0cyBmb3IgaW52YWxpZCBvdXRwdXQgdmFsdWUgKFByZWNpc2UgRXZlbnQpCisJMHgwNCBpbnB1dCBYODcgRmxvYXRpbmcgcG9paW50IGFzc2lzdHMgZm9yIGludmFsaWQgaW5wdXQgdmFsdWUgKFByZWNpc2UgRXZlbnQpCituYW1lOmZwX2NvbXBfb3BzX2V4ZSB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDAxCisJMHgwMSB4ODcgQ29tcHV0YXRpb25hbCBmbG9hdGluZy1wb2ludCBvcGVyYXRpb25zIGV4ZWN1dGVkCisJMHgwMiBtbXggTU1YIFVvcHMKKwkweDA0IHNzZV9mcCBTU0UgYW5kIFNTRTIgRlAgVW9wcworCTB4MDggc3NlMl9pbnRlZ2VyIFNTRTIgaW50ZWdlciBVb3BzCisJMHgxMCBzc2VfZnBfcGFja2VkIFNTRSBGUCBwYWNrZWQgVW9wcworCTB4MjAgc3NlX2ZwX3NjYWxhciBTU0UgRlAgc2NhbGFyIFVvcHMKKwkweDQwIHNzZV9zaW5nbGVfcHJlY2lzaW9uIFNTRSogRlAgc2luZ2xlIHByZWNpc2lvbiBVb3BzCisJMHg4MCBzc2VfZG91YmxlX3ByZWNpc2lvbiBTU0UqIEZQIGRvdWJsZSBwcmVjaXNpb24gVW9wcworbmFtZTpmcF9tbXhfdHJhbnMgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwMworCTB4MDEgdG9fZnAgVHJhbnNpdGlvbnMgZnJvbSBNTVggdG8gRmxvYXRpbmcgUG9pbnQgaW5zdHJ1Y3Rpb25zCisJMHgwMiB0b19tbXggVHJhbnNpdGlvbnMgZnJvbSBGbG9hdGluZyBQb2ludCB0byBNTVggaW5zdHJ1Y3Rpb25zCisJMHgwMyBhbnkgQWxsIEZsb2F0aW5nIFBvaW50IHRvIGFuZCBmcm9tIE1NWCB0cmFuc2l0aW9ucworbmFtZTppbGRfc3RhbGwgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwZgorCTB4MDEgbGNwIExlbmd0aCBDaGFuZ2UgUHJlZml4IHN0YWxsIGN5Y2xlcworCTB4MDIgbXJ1IFN0YWxsIGN5Y2xlcyBkdWUgdG8gQlBVIE1SVSBieXBhc3MKKwkweDA0IGlxX2Z1bGwgSW5zdHJ1Y3Rpb24gUXVldWUgZnVsbCBzdGFsbCBjeWNsZXMKKwkweDA4IHJlZ2VuIFJlZ2VuIHN0YWxsIGN5Y2xlcworCTB4MGYgYW55IEFueSBJbnN0cnVjdGlvbiBMZW5ndGggRGVjb2RlciBzdGFsbCBjeWNsZXMKK25hbWU6aW5zdF9yZXRpcmVkIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MDEKKwkweDAxIGFueV9wIEluc3RydWN0aW9ucyByZXRpcmVkIChQcm9ncmFtbWFibGUgY291bnRlciBhbmQgUHJlY2lzZSBFdmVudCkKKwkweDAyIHg4NyBSZXRpcmVkIGZsb2F0aW5nLXBvaW50IG9wZXJhdGlvbnMgKFByZWNpc2UgRXZlbnQpCisJMHgwNCBtbXggUmV0aXJlZCBNTVggaW5zdHJ1Y3Rpb25zIChQcmVjaXNlIEV2ZW50KQorbmFtZTppdGxiX21pc3NlcyB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDAxCisJMHgwMSBhbnkgSVRMQiBtaXNzCisJMHgwMiB3YWxrX2NvbXBsZXRlZCBJVExCIG1pc3MgcGFnZSB3YWxrcworCTB4MDQgd2Fsa19jeWNsZXMgSVRMQiBtaXNzIHBhZ2Ugd2FsayBjeWNsZXMKKwkweDgwIGxhcmdlX3dhbGtfY29tcGxldGVkIElUTEIgbWlzcyBsYXJnZSBwYWdlIHdhbGtzCituYW1lOmwxZCB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDAxCisJMHgwMSByZXBsIEwxIGRhdGEgY2FjaGUgbGluZXMgYWxsb2NhdGVkCisJMHgwMiBtX3JlcGwgTDFEIGNhY2hlIGxpbmVzIGFsbG9jYXRlZCBpbiB0aGUgTSBzdGF0ZQorCTB4MDQgbV9ldmljdCBMMUQgY2FjaGUgbGluZXMgcmVwbGFjZWQgaW4gTSBzdGF0ZSAKKwkweDA4IG1fc25vb3BfZXZpY3QgTDFEIHNub29wIGV2aWN0aW9uIG9mIGNhY2hlIGxpbmVzIGluIE0gc3RhdGUKK25hbWU6bDFkX3ByZWZldGNoIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MDEKKwkweDAxIHJlcXVlc3RzIEwxRCBoYXJkd2FyZSBwcmVmZXRjaCByZXF1ZXN0cworCTB4MDIgbWlzcyBMMUQgaGFyZHdhcmUgcHJlZmV0Y2ggbWlzc2VzCisJMHgwNCB0cmlnZ2VycyBMMUQgaGFyZHdhcmUgcHJlZmV0Y2ggcmVxdWVzdHMgdHJpZ2dlcmVkCituYW1lOmwxZF93Yl9sMiB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDBmCisJMHgwMSBpX3N0YXRlIEwxIHdyaXRlYmFja3MgdG8gTDIgaW4gSSBzdGF0ZSAobWlzc2VzKQorCTB4MDIgc19zdGF0ZSBMMSB3cml0ZWJhY2tzIHRvIEwyIGluIFMgc3RhdGUKKwkweDA0IGVfc3RhdGUgTDEgd3JpdGViYWNrcyB0byBMMiBpbiBFIHN0YXRlCisJMHgwOCBtX3N0YXRlIEwxIHdyaXRlYmFja3MgdG8gTDIgaW4gTSBzdGF0ZQorCTB4MGYgbWVzaSBBbGwgTDEgd3JpdGViYWNrcyB0byBMMgorbmFtZTpsMWkgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwMQorCTB4MDEgaGl0cyBMMUkgaW5zdHJ1Y3Rpb24gZmV0Y2ggaGl0cworCTB4MDIgbWlzc2VzIEwxSSBpbnN0cnVjdGlvbiBmZXRjaCBtaXNzZXMKKwkweDAzIHJlYWRzIEwxSSBJbnN0cnVjdGlvbiBmZXRjaGVzCisJMHgwNCBjeWNsZXNfc3RhbGxlZCBMMUkgaW5zdHJ1Y3Rpb24gZmV0Y2ggc3RhbGwgY3ljbGVzCituYW1lOmwyX2RhdGFfcnFzdHMgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHhmZgorCTB4MDEgZGVtYW5kX2lfc3RhdGUgTDIgZGF0YSBkZW1hbmQgbG9hZHMgaW4gSSBzdGF0ZSAobWlzc2VzKQorCTB4MDIgZGVtYW5kX3Nfc3RhdGUgTDIgZGF0YSBkZW1hbmQgbG9hZHMgaW4gUyBzdGF0ZQorCTB4MDQgZGVtYW5kX2Vfc3RhdGUgTDIgZGF0YSBkZW1hbmQgbG9hZHMgaW4gRSBzdGF0ZQorCTB4MDggZGVtYW5kX21fc3RhdGUgTDIgZGF0YSBkZW1hbmQgbG9hZHMgaW4gTSBzdGF0ZQorCTB4MGYgZGVtYW5kX21lc2kgTDIgZGF0YSBkZW1hbmQgcmVxdWVzdHMKKwkweDEwIHByZWZldGNoX2lfc3RhdGUgTDIgZGF0YSBwcmVmZXRjaGVzIGluIHRoZSBJIHN0YXRlIChtaXNzZXMpCisJMHgyMCBwcmVmZXRjaF9zX3N0YXRlIEwyIGRhdGEgcHJlZmV0Y2hlcyBpbiB0aGUgUyBzdGF0ZQorCTB4NDAgcHJlZmV0Y2hfZV9zdGF0ZSBMMiBkYXRhIHByZWZldGNoZXMgaW4gRSBzdGF0ZQorCTB4ODAgcHJlZmV0Y2hfbV9zdGF0ZSBMMiBkYXRhIHByZWZldGNoZXMgaW4gTSBzdGF0ZQorCTB4ZjAgcHJlZmV0Y2hfbWVzaSBBbGwgTDIgZGF0YSBwcmVmZXRjaGVzCisJMHhmZiBhbnkgQWxsIEwyIGRhdGEgcmVxdWVzdHMKK25hbWU6bDJfbGluZXNfaW4gdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwNworCTB4MDIgc19zdGF0ZSBMMiBsaW5lcyBhbGxvY2F0ZWQgaW4gdGhlIFMgc3RhdGUKKwkweDA0IGVfc3RhdGUgTDIgbGluZXMgYWxsb2NhdGVkIGluIHRoZSBFIHN0YXRlCisJMHgwNyBhbnkgTDIgbGluZXMgYWxsb2FjYXRlZAorbmFtZTpsMl9saW5lc19vdXQgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwZgorCTB4MDEgZGVtYW5kX2NsZWFuIEwyIGxpbmVzIGV2aWN0ZWQgYnkgYSBkZW1hbmQgcmVxdWVzdAorCTB4MDIgZGVtYW5kX2RpcnR5IEwyIG1vZGlmaWVkIGxpbmVzIGV2aWN0ZWQgYnkgYSBkZW1hbmQgcmVxdWVzdAorCTB4MDQgcHJlZmV0Y2hfY2xlYW4gTDIgbGluZXMgZXZpY3RlZCBieSBhIHByZWZldGNoIHJlcXVlc3QKKwkweDA4IHByZWZldGNoX2RpcnR5IEwyIG1vZGlmaWVkIGxpbmVzIGV2aWN0ZWQgYnkgYSBwcmVmZXRjaCByZXF1ZXN0CisJMHgwZiBhbnkgTDIgbGluZXMgZXZpY3RlZAorbmFtZTpsMl9ycXN0cyB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDAxCisJMHgwMSBsZF9oaXQgTDIgbG9hZCBoaXRzCisJMHgwMiBsZF9taXNzIEwyIGxvYWQgbWlzc2VzCisJMHgwMyBsb2FkcyBMMiByZXF1ZXN0cworCTB4MDQgcmZvX2hpdCBMMiBSRk8gaGl0cworCTB4MDggcmZvX21pc3MgTDIgUkZPIG1pc3NlcworCTB4MGMgcmZvcyBMMiBSRk8gcmVxdWVzdHMKKwkweDEwIGlmZXRjaF9oaXQgTDIgaW5zdHJ1Y3Rpb24gZmV0Y2ggaGl0cworCTB4MjAgaWZldGNoX21pc3MgTDIgaW5zdHJ1Y3Rpb24gZmV0Y2ggbWlzc2VzCisJMHgzMCBpZmV0Y2hlcyBMMiBpbnN0cnVjdGlvbiBmZXRjaGVzCisJMHg0MCBwcmVmZXRjaF9oaXQgTDIgcHJlZmV0Y2ggaGl0cworCTB4ODAgcHJlZmV0Y2hfbWlzcyBMMiBwcmVmZXRjaCBtaXNzZXMKKwkweGFhIG1pc3MgQWxsIEwyIG1pc3NlcworCTB4YzAgcHJlZmV0Y2hlcyBBbGwgTDIgcHJlZmV0Y2hlcworCTB4ZmYgcmVmZXJlbmNlcyBBbGwgTDIgcmVxdWVzdHMKK25hbWU6bDJfdHJhbnNhY3Rpb25zIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4ODAKKwkweDAxIGxvYWQgTDIgTG9hZCB0cmFuc2FjdGlvbnMKKwkweDAyIHJmbyBMMiBSRk8gdHJhbnNhY3Rpb25zCisJMHgwNCBpZmV0Y2ggTDIgaW5zdHJ1Y3Rpb24gZmV0Y2ggdHJhbnNhY3Rpb25zCisJMHgwOCBwcmVmZXRjaCBMMiBwcmVmZXRjaCB0cmFuc2FjdGlvbnMKKwkweDEwIGwxZF93YiBMMUQgd3JpdGViYWNrIHRvIEwyIHRyYW5zYWN0aW9ucworCTB4MjAgZmlsbCBMMiBmaWxsIHRyYW5zYWN0aW9ucworCTB4NDAgd2IgTDIgd3JpdGViYWNrIHRvIExMQyB0cmFuc2FjdGlvbnMKKwkweDgwIGFueSBBbGwgTDIgdHJhbnNhY3Rpb25zCituYW1lOmwyX3dyaXRlIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MDEKKwkweDAxIHJmb19pX3N0YXRlIEwyIGRlbWFuZCBzdG9yZSBSRk9zIGluIEkgc3RhdGUgKG1pc3NlcykKKwkweDAyIHJmb19zX3N0YXRlIEwyIGRlbWFuZCBzdG9yZSBSRk9zIGluIFMgc3RhdGUKKwkweDA4IHJmb19tX3N0YXRlIEwyIGRlbWFuZCBzdG9yZSBSRk9zIGluIE0gc3RhdGUKKwkweDBlIHJmb19oaXQgQWxsIEwyIGRlbWFuZCBzdG9yZSBSRk9zIHRoYXQgaGl0IHRoZSBjYWNoZQorCTB4MGYgcmZvX21lc2kgQWxsIEwyIGRlbWFuZCBzdG9yZSBSRk9zCisJMHgxMCBsb2NrX2lfc3RhdGUgTDIgZGVtYW5kIGxvY2sgUkZPcyBpbiBJIHN0YXRlIChtaXNzZXMpCisJMHgyMCBsb2NrX3Nfc3RhdGUgTDIgZGVtYW5kIGxvY2sgUkZPcyBpbiBTIHN0YXRlCisJMHg0MCBsb2NrX2Vfc3RhdGUgTDIgZGVtYW5kIGxvY2sgUkZPcyBpbiBFIHN0YXRlCisJMHg4MCBsb2NrX21fc3RhdGUgTDIgZGVtYW5kIGxvY2sgUkZPcyBpbiBNIHN0YXRlCisJMHhlMCBsb2NrX2hpdCBBbGwgZGVtYW5kIEwyIGxvY2sgUkZPcyB0aGF0IGhpdCB0aGUgY2FjaGUKKwkweGYwIGxvY2tfbWVzaSBBbGwgZGVtYW5kIEwyIGxvY2sgUkZPcworbmFtZTpsb2FkX2Rpc3BhdGNoIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MDcKKwkweDAxIHJzIExvYWRzIGRpc3BhdGNoZWQgdGhhdCBieXBhc3MgdGhlIE1PQgorCTB4MDIgcnNfZGVsYXllZCBMb2FkcyBkaXNwYXRjaGVkIGZyb20gc3RhZ2UgMzA1CisJMHgwNCBtb2IgTG9hZHMgZGlzcGF0Y2hlZCBmcm9tIHRoZSBNT0IKKwkweDA3IGFueSBBbGwgbG9hZHMgZGlzcGF0Y2hlZAorbmFtZTpsb25nZXN0X2xhdF9jYWNoZSB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDAxCisJMHgwMSBtaXNzIExvbmdlc3QgbGF0ZW5jeSBjYWNoZSBtaXNzCisJMHgwMiByZWZlcmVuY2UgTG9uZ2VzdCBsYXRlbmN5IGNhY2hlIHJlZmVyZW5jZQorbmFtZTptYWNoaW5lX2NsZWFycyB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDAxCisJMHgwMSBjeWNsZXMgQ3ljbGVzIG1hY2hpbmUgY2xlYXIgYXNzZXJ0ZWQKKwkweDAyIG1lbV9vcmRlciBFeGVjdXRpb24gcGlwZWxpbmUgcmVzdGFydCBkdWUgdG8gTWVtb3J5IG9yZGVyaW5nIGNvbmZsaWN0cyAKKwkweDA0IHNtYyBTZWxmLU1vZGlmeWluZyBDb2RlIGRldGVjdGVkCituYW1lOm1lbV9pbnN0X3JldGlyZWQgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwMQorCTB4MDEgbG9hZHMgSW5zdHJ1Y3Rpb25zIHJldGlyZWQgd2hpY2ggY29udGFpbnMgYSBsb2FkIChQcmVjaXNlIEV2ZW50KQorCTB4MDIgc3RvcmVzIEluc3RydWN0aW9ucyByZXRpcmVkIHdoaWNoIGNvbnRhaW5zIGEgc3RvcmUgKFByZWNpc2UgRXZlbnQpCituYW1lOm1lbV9sb2FkX3JldGlyZWQgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwMQorCTB4MDEgbDFkX2hpdCBSZXRpcmVkIGxvYWRzIHRoYXQgaGl0IHRoZSBMMSBkYXRhIGNhY2hlIChQcmVjaXNlIEV2ZW50KQorCTB4MDIgbDJfaGl0IFJldGlyZWQgbG9hZHMgdGhhdCBoaXQgdGhlIEwyIGNhY2hlIChQcmVjaXNlIEV2ZW50KQorCTB4MDQgbGxjX3Vuc2hhcmVkX2hpdCBSZXRpcmVkIGxvYWRzIHRoYXQgaGl0IHZhbGlkIHZlcnNpb25zIGluIHRoZSBMTEMgY2FjaGUgKFByZWNpc2UgRXZlbnQpCisJMHgwOCBvdGhlcl9jb3JlX2wyX2hpdF9oaXRtIFJldGlyZWQgbG9hZHMgdGhhdCBoaXQgc2libGluZyBjb3JlJ3MgTDIgaW4gbW9kaWZpZWQgb3IgdW5tb2RpZmllZCBzdGF0ZXMgKFByZWNpc2UgRXZlbnQpCisJMHgxMCBsbGNfbWlzcyBSZXRpcmVkIGxvYWRzIHRoYXQgbWlzcyB0aGUgTExDIGNhY2hlIChQcmVjaXNlIEV2ZW50KQorCTB4NDAgaGl0X2xmYiBSZXRpcmVkIGxvYWRzIHRoYXQgbWlzcyBMMUQgYW5kIGhpdCBhbiBwcmV2aW91c2x5IGFsbG9jYXRlZCBMRkIgKFByZWNpc2UgRXZlbnQpCisJMHg4MCBkdGxiX21pc3MgUmV0aXJlZCBsb2FkcyB0aGF0IG1pc3MgdGhlIERUTEIgKFByZWNpc2UgRXZlbnQpCituYW1lOm1lbV91bmNvcmVfcmV0aXJlZCB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDAyCisJMHgwMiBsb2NhbF9oaXRtIExvYWQgaW5zdHJ1Y3Rpb25zIHJldGlyZWQgdGhhdCBISVQgbW9kaWZpZWQgZGF0YSBpbiBzaWJsaW5nIGNvcmUgKFByZWNpc2UgRXZlbnQpCisJMHgwNCByZW1vdGVfaGl0bSBSZXRpcmVkIGxvYWRzIHRoYXQgaGl0IHJlbW90ZSBzb2NrZXQgaW4gbW9kaWZpZWQgc3RhdGUgKFByZWNpc2UgRXZlbnQpCisJMHgwOCBsb2NhbF9kcmFtX2FuZF9yZW1vdGVfY2FjaGVfaGl0IExvYWQgaW5zdHJ1Y3Rpb25zIHJldGlyZWQgbG9jYWwgZHJhbSBhbmQgcmVtb3RlIGNhY2hlIEhJVCBkYXRhIHNvdXJjZXMgKFByZWNpc2UgRXZlbnQpCisJMHgxMCByZW1vdGVfZHJhbSBMb2FkIGluc3RydWN0aW9ucyByZXRpcmVkIHJlbW90ZSBEUkFNIGFuZCByZW1vdGUgaG9tZS1yZW1vdGUgY2FjaGUgSElUTSAoUHJlY2lzZSBFdmVudCkKKwkweDgwIHVuY2FjaGVhYmxlIExvYWQgaW5zdHJ1Y3Rpb25zIHJldGlyZWQgSU8gKFByZWNpc2UgRXZlbnQpCituYW1lOm9mZmNvcmVfcmVxdWVzdHMgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHg4MAorCTB4MDEgZGVtYW5kX3JlYWRfZGF0YSBPZmZjb3JlIGRlbWFuZCBkYXRhIHJlYWQgcmVxdWVzdHMKKwkweDAyIGRlbWFuZF9yZWFkX2NvZGUgT2ZmY29yZSBkZW1hbmQgY29kZSByZWFkIHJlcXVlc3RzCisJMHgwNCBkZW1hbmRfcmZvIE9mZmNvcmUgZGVtYW5kIFJGTyByZXF1ZXN0cworCTB4MDggYW55X3JlYWQgT2ZmY29yZSByZWFkIHJlcXVlc3RzCisJMHgxMCBhbnlfcmZvIE9mZmNvcmUgUkZPIHJlcXVlc3RzCisJMHg0MCBsMWRfd3JpdGViYWNrIE9mZmNvcmUgTDEgZGF0YSBjYWNoZSB3cml0ZWJhY2tzCisJMHg4MCBhbnkgQWxsIG9mZmNvcmUgcmVxdWVzdHMKK25hbWU6b2ZmY29yZV9yZXF1ZXN0c19vdXRzdGFuZGluZyB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDA4CisJMHgwMSBkZW1hbmRfcmVhZF9kYXRhIE91dHN0YW5kaW5nIG9mZmNvcmUgZGVtYW5kIGRhdGEgcmVhZHMKKwkweDAyIGRlbWFuZF9yZWFkX2NvZGUgT3V0c3RhbmRpbmcgb2ZmY29yZSBkZW1hbmQgY29kZSByZWFkcworCTB4MDQgZGVtYW5kX3JmbyBPdXRzdGFuZGluZyBvZmZjb3JlIGRlbWFuZCBSRk9zCisJMHgwOCBhbnlfcmVhZCBPdXRzdGFuZGluZyBvZmZjb3JlIHJlYWRzCituYW1lOnJhdF9zdGFsbHMgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwZgorCTB4MDEgZmxhZ3MgRmxhZyBzdGFsbCBjeWNsZXMKKwkweDAyIHJlZ2lzdGVycyBQYXJ0aWFsIHJlZ2lzdGVyIHN0YWxsIGN5Y2xlcworCTB4MDQgcm9iX3JlYWRfcG9ydCBST0IgcmVhZCBwb3J0IHN0YWxscyBjeWNsZXMKKwkweDA4IHNjb3JlYm9hcmQgU2NvcmVib2FyZCBzdGFsbCBjeWNsZXMKKwkweDBmIGFueSBBbGwgUkFUIHN0YWxsIGN5Y2xlcworbmFtZTpyZXNvdXJjZV9zdGFsbHMgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwMQorCTB4MDEgYW55IFJlc291cmNlIHJlbGF0ZWQgc3RhbGwgY3ljbGVzCisJMHgwMiBsb2FkIExvYWQgYnVmZmVyIHN0YWxsIGN5Y2xlcworCTB4MDQgcnNfZnVsbCBSZXNlcnZhdGlvbiBTdGF0aW9uIGZ1bGwgc3RhbGwgY3ljbGVzCisJMHgwOCBzdG9yZSBTdG9yZSBidWZmZXIgc3RhbGwgY3ljbGVzCisJMHgxMCByb2JfZnVsbCBST0IgZnVsbCBzdGFsbCBjeWNsZXMKKwkweDIwIGZwY3cgRlBVIGNvbnRyb2wgd29yZCB3cml0ZSBzdGFsbCBjeWNsZXMKKwkweDQwIG14Y3NyIE1YQ1NSIHJlbmFtZSBzdGFsbCBjeWNsZXMKKwkweDgwIG90aGVyIE90aGVyIFJlc291cmNlIHJlbGF0ZWQgc3RhbGwgY3ljbGVzCituYW1lOnNpbWRfaW50XzEyOCB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDAxCisJMHgwMSBwYWNrZWRfbXB5IDEyOCBiaXQgU0lNRCBpbnRlZ2VyIG11bHRpcGx5IG9wZXJhdGlvbnMKKwkweDAyIHBhY2tlZF9zaGlmdCAxMjggYml0IFNJTUQgaW50ZWdlciBzaGlmdCBvcGVyYXRpb25zCisJMHgwNCBwYWNrIDEyOCBiaXQgU0lNRCBpbnRlZ2VyIHBhY2sgb3BlcmF0aW9ucworCTB4MDggdW5wYWNrIDEyOCBiaXQgU0lNRCBpbnRlZ2VyIHVucGFjayBvcGVyYXRpb25zCisJMHgxMCBwYWNrZWRfbG9naWNhbCAxMjggYml0IFNJTUQgaW50ZWdlciBsb2dpY2FsIG9wZXJhdGlvbnMKKwkweDIwIHBhY2tlZF9hcml0aCAxMjggYml0IFNJTUQgaW50ZWdlciBhcml0aG1ldGljIG9wZXJhdGlvbnMKKwkweDQwIHNodWZmbGVfbW92ZSAxMjggYml0IFNJTUQgaW50ZWdlciBzaHVmZmxlL21vdmUgb3BlcmF0aW9ucworbmFtZTpzaW1kX2ludF82NCB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDAxCisJMHgwMSBwYWNrZWRfbXB5IFNJTUQgaW50ZWdlciA2NCBiaXQgcGFja2VkIG11bHRpcGx5IG9wZXJhdGlvbnMKKwkweDAyIHBhY2tlZF9zaGlmdCBTSU1EIGludGVnZXIgNjQgYml0IHNoaWZ0IG9wZXJhdGlvbnMKKwkweDA0IHBhY2sgU0lNRCBpbnRlZ2VyIDY0IGJpdCBwYWNrIG9wZXJhdGlvbnMKKwkweDA4IHVucGFjayBTSU1EIGludGVnZXIgNjQgYml0IHVucGFjayBvcGVyYXRpb25zCisJMHgxMCBwYWNrZWRfbG9naWNhbCBTSU1EIGludGVnZXIgNjQgYml0IGxvZ2ljYWwgb3BlcmF0aW9ucworCTB4MjAgcGFja2VkX2FyaXRoIFNJTUQgaW50ZWdlciA2NCBiaXQgYXJpdGhtZXRpYyBvcGVyYXRpb25zCisJMHg0MCBzaHVmZmxlX21vdmUgU0lNRCBpbnRlZ2VyIDY0IGJpdCBzaHVmZmxlL21vdmUgb3BlcmF0aW9ucworbmFtZTpzbm9vcHFfcmVxdWVzdHMgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwMQorCTB4MDEgZGF0YSBTbm9vcCBkYXRhIHJlcXVlc3RzCisJMHgwMiBpbnZhbGlkYXRlIFNub29wIGludmFsaWRhdGUgcmVxdWVzdHMKKwkweDA0IGNvZGUgU25vb3AgY29kZSByZXF1ZXN0cworbmFtZTpzbm9vcHFfcmVxdWVzdHNfb3V0c3RhbmRpbmcgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwMQorCTB4MDEgZGF0YSBPdXRzdGFuZGluZyBzbm9vcCBkYXRhIHJlcXVlc3RzCisJMHgwMiBpbnZhbGlkYXRlIE91dHN0YW5kaW5nIHNub29wIGludmFsaWRhdGUgcmVxdWVzdHMKKwkweDA0IGNvZGUgT3V0c3RhbmRpbmcgc25vb3AgY29kZSByZXF1ZXN0cworbmFtZTpzbm9vcF9yZXNwb25zZSB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDAxCisJMHgwMSBoaXQgVGhyZWFkIHJlc3BvbmRlZCBISVQgdG8gc25vb3AKKwkweDAyIGhpdGUgVGhyZWFkIHJlc3BvbmRlZCBISVRFIHRvIHNub29wCisJMHgwNCBoaXRtIFRocmVhZCByZXNwb25kZWQgSElUTSB0byBzbm9vcAorbmFtZTpzcV9taXNjIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MDQKKwkweDA0IGxydV9oaW50cyBTdXBlciBRdWV1ZSBMUlUgaGludHMgc2VudCB0byBMTEMKKwkweDEwIHNwbGl0X2xvY2sgU3VwZXIgUXVldWUgbG9jayBzcGxpdHMgYWNyb3NzIGEgY2FjaGUgbGluZQorbmFtZTpzc2V4X3VvcHNfcmV0aXJlZCB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDAxCisJMHgwMSBwYWNrZWRfc2luZ2xlIFNJTUQgUGFja2VkLVNpbmdsZSBVb3BzIHJldGlyZWQgKFByZWNpc2UgRXZlbnQpCisJMHgwMiBzY2FsYXJfc2luZ2xlIFNJTUQgU2NhbGFyLVNpbmdsZSBVb3BzIHJldGlyZWQgKFByZWNpc2UgRXZlbnQpCisJMHgwNCBwYWNrZWRfZG91YmxlIFNJTUQgUGFja2VkLURvdWJsZSBVb3BzIHJldGlyZWQgKFByZWNpc2UgRXZlbnQpCisJMHgwOCBzY2FsYXJfZG91YmxlIFNJTUQgU2NhbGFyLURvdWJsZSBVb3BzIHJldGlyZWQgKFByZWNpc2UgRXZlbnQpCisJMHgxMCB2ZWN0b3JfaW50ZWdlciBTSU1EIFZlY3RvciBJbnRlZ2VyIFVvcHMgcmV0aXJlZCAoUHJlY2lzZSBFdmVudCkKK25hbWU6c3RvcmVfYmxvY2tzIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MDQKKwkweDA0IGF0X3JldCBMb2FkcyBkZWxheWVkIHdpdGggYXQtUmV0aXJlbWVudCBibG9jayBjb2RlCisJMHgwOCBsMWRfYmxvY2sgQ2FjaGVhYmxlIGxvYWRzIGRlbGF5ZWQgd2l0aCBMMUQgYmxvY2sgY29kZQorbmFtZTp1b3BzX2RlY29kZWQgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwMQorCTB4MDEgc3RhbGxfY3ljbGVzIEN5Y2xlcyBubyBVb3BzIGFyZSBkZWNvZGVkCisJMHgwMiBtc19jeWNsZXNfYWN0aXZlIFVvcHMgZGVjb2RlZCBieSBNaWNyb2NvZGUgU2VxdWVuY2VyCisJMHgwNCBlc3BfZm9sZGluZyBTdGFjayBwb2ludGVyIGluc3RydWN0aW9ucyBkZWNvZGVkCisJMHgwOCBlc3Bfc3luYyBTdGFjayBwb2ludGVyIHN5bmMgb3BlcmF0aW9ucworbmFtZTp1b3BzX2V4ZWN1dGVkIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4M2YKKwkweDAxIHBvcnQwIFVvcHMgZXhlY3V0ZWQgb24gcG9ydCAwCisJMHgwMiBwb3J0MSBVb3BzIGV4ZWN1dGVkIG9uIHBvcnQgMQorCTB4MDQgcG9ydDJfY29yZSBVb3BzIGV4ZWN1dGVkIG9uIHBvcnQgMiAoY29yZSBjb3VudCkKKwkweDA4IHBvcnQzX2NvcmUgVW9wcyBleGVjdXRlZCBvbiBwb3J0IDMgKGNvcmUgY291bnQpCisJMHgxMCBwb3J0NF9jb3JlIFVvcHMgZXhlY3V0ZWQgb24gcG9ydCA0IChjb3JlIGNvdW50KQorCTB4MWYgY29yZV9hY3RpdmVfY3ljbGVzX25vX3BvcnQ1IEN5Y2xlcyBVb3BzIGV4ZWN1dGVkIG9uIHBvcnRzIDAtNCAoY29yZSBjb3VudCkKKwkweDIwIHBvcnQ1IFVvcHMgZXhlY3V0ZWQgb24gcG9ydCA1CisJMHgzZiBjb3JlX2FjdGl2ZV9jeWNsZXMgQ3ljbGVzIFVvcHMgZXhlY3V0ZWQgb24gYW55IHBvcnQgKGNvcmUgY291bnQpCisJMHg0MCBwb3J0MDE1IFVvcHMgaXNzdWVkIG9uIHBvcnRzIDAsIDEgb3IgNQorCTB4ODAgcG9ydDIzNF9jb3JlIFVvcHMgaXNzdWVkIG9uIHBvcnRzIDIsIDMgb3IgNAorbmFtZTp1b3BzX2lzc3VlZCB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDAxCisJMHgwMSBhbnkgVW9wcyBpc3N1ZWQKKwkweDAyIGZ1c2VkIEZ1c2VkIFVvcHMgaXNzdWVkCituYW1lOnVvcHNfcmV0aXJlZCB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDAxCisJMHgwMSBhY3RpdmVfY3ljbGVzIEN5Y2xlcyBVb3BzIGFyZSBiZWluZyByZXRpcmVkCisJMHgwMiByZXRpcmVfc2xvdHMgUmV0aXJlbWVudCBzbG90cyB1c2VkIChQcmVjaXNlIEV2ZW50KQorCTB4MDQgbWFjcm9fZnVzZWQgTWFjcm8tZnVzZWQgVW9wcyByZXRpcmVkIChQcmVjaXNlIEV2ZW50KQpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL2lhNjQvaWE2NC9ldmVudHMgYi9vcHJvZmlsZS0wLjkuNy9ldmVudHMvaWE2NC9pYTY0L2V2ZW50cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YWU0MWRkCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL2lhNjQvaWE2NC9ldmVudHMKQEAgLTAsMCArMSwzIEBACisjIElBLTY0IGV2ZW50cworZXZlbnQ6MHgxMiBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpDUFVfQ1lDTEVTIDogQ1BVIEN5Y2xlcworZXZlbnQ6MHgwOCBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJQTY0X0lOU1RfUkVUSVJFRCA6IElBLTY0IEluc3RydWN0aW9ucyBSZXRpcmVkCmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9ldmVudHMvaWE2NC9pYTY0L3VuaXRfbWFza3MgYi9vcHJvZmlsZS0wLjkuNy9ldmVudHMvaWE2NC9pYTY0L3VuaXRfbWFza3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2RkODU0YQotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2V2ZW50cy9pYTY0L2lhNjQvdW5pdF9tYXNrcwpAQCAtMCwwICsxLDQgQEAKKyMgSUEtNjQgcG9zc2libGUgdW5pdCBtYXNrcworIworbmFtZTp6ZXJvIHR5cGU6bWFuZGF0b3J5IGRlZmF1bHQ6MHgwCisJMHgwIE5vIHVuaXQgbWFzawpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL2lhNjQvaXRhbml1bS9ldmVudHMgYi9vcHJvZmlsZS0wLjkuNy9ldmVudHMvaWE2NC9pdGFuaXVtL2V2ZW50cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMGNlMTBmCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL2lhNjQvaXRhbml1bS9ldmVudHMKQEAgLTAsMCArMSw1IEBACisjIElBLTY0IEl0YW5pdW0gMSBldmVudHMKK2V2ZW50OjB4MTIgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6Q1BVX0NZQ0xFUyA6IENQVSBDeWNsZXMKK2V2ZW50OjB4MDggY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJQTY0X0lOU1RfUkVUSVJFRCA6IElBLTY0IEluc3RydWN0aW9ucyBSZXRpcmVkCitldmVudDoweDE1IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOklBMzJfSU5TVF9SRVRJUkVEIDogSUEtMzIgSW5zdHJ1Y3Rpb25zIFJldGlyZWQKKyMgRklYTUU6IGl0YW5pdW0gZG9jIGRlc2NyaWJlIGEgbG90IG9mIG90aGVyIGV2ZW50cywgc2hvdWxkIHdlIGFkZCB0aGVtIHcvbyBhbnkgdGVzdGluZyA/CmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9ldmVudHMvaWE2NC9pdGFuaXVtL3VuaXRfbWFza3MgYi9vcHJvZmlsZS0wLjkuNy9ldmVudHMvaWE2NC9pdGFuaXVtL3VuaXRfbWFza3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmE5Zjc3YgotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2V2ZW50cy9pYTY0L2l0YW5pdW0vdW5pdF9tYXNrcwpAQCAtMCwwICsxLDQgQEAKKyMgSUEtNjQgSXRhbml1bSAxIHBvc3NpYmxlIHVuaXQgbWFza3MKKyMKK25hbWU6emVybyB0eXBlOm1hbmRhdG9yeSBkZWZhdWx0OjB4MAorCTB4MCBObyB1bml0IG1hc2sKZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2V2ZW50cy9pYTY0L2l0YW5pdW0yL2V2ZW50cyBiL29wcm9maWxlLTAuOS43L2V2ZW50cy9pYTY0L2l0YW5pdW0yL2V2ZW50cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTc5MDIyCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL2lhNjQvaXRhbml1bTIvZXZlbnRzCkBAIC0wLDAgKzEsMjY3IEBACisjIElBLTY0IEl0YW5pdW0gMiBldmVudHMKKworIyBJQTY0XzIgQmFzaWMgRXZlbnRzLCBUYWJsZSAxMS0xCitldmVudDoweDEyIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkNQVV9DWUNMRVMgOiBDUFUgQ3ljbGVzCitldmVudDoweDA4IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOklBNjRfSU5TVF9SRVRJUkVEIDogSUEtNjQgSW5zdHJ1Y3Rpb25zIFJldGlyZWQKK2V2ZW50OjB4NTkgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwMCBuYW1lOklBMzJfSU5TVF9SRVRJUkVEIDogSUEtMzIgSW5zdHJ1Y3Rpb25zIFJldGlyZWQKK2V2ZW50OjB4MDcgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SUEzMl9JU0FfVFJBTlNJVElPTlMgOiBJdGFuaXVtIHRvL2Zyb20gSUEtMzIgSVNBIFRyYW5zaXRpb25zCisKKyMgSUE2NF8yIEluc3RydWN0aW9uIERpc3BlcmFsIEV2ZW50cywgVGFibGUgMTEtMworZXZlbnQ6MHg0OSBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAwIG5hbWU6RElTUF9TVEFMTEVEIDogTnVtYmVyIG9mIGN5Y2xlcyBkaXNwZXJzYWwgc3RhbGxlZAorZXZlbnQ6MHg0ZCBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAwIG5hbWU6SU5TVF9ESVNQRVJTRUQgOiBTeWxsYWJsZXMgRGlzcGVyc2VkIGZyb20gUkVOIHRvIFJFRyBzdGFnZQorZXZlbnQ6MHg0ZSBjb3VudGVyczowLDEsMiwzIHVtOnN5bGxfbm90X2Rpc3BlcnNlZCBtaW5pbXVtOjUwMDAgbmFtZTpTWUxMX05PVF9ESVNQRVJTRUQgOiBTeWxsYWJsZXMgbm90IGRpc3BlcnNlZAorZXZlbnQ6MHg0ZiBjb3VudGVyczowLDEsMiwzIHVtOnN5bGxfb3ZlcmNvdW50IG1pbmltdW06NTAwMCBuYW1lOlNZTExfT1ZFUkNPVU5UIDogU3lsbGFibGVzIG92ZXJjb3VudGVkCisKKyMgSUE2NF8yIEluc3RydWN0aW9uIEV4ZWN1dGlvbiBFdmVudHMsIFRhYmxlIDExLTQKK2V2ZW50OjB4NTggY291bnRlcnM6MCwxLDIsMyB1bTphbGF0X2NhcGFjaXR5X21pc3MgbWluaW11bTo1MDAwIG5hbWU6QUxBVF9DQVBBQ0lUWV9NSVNTIDogQUxBVCBFbnRyeSBSZXBsYWNlZAorZXZlbnQ6MHgwNiBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAwIG5hbWU6RlBfRkFJTEVEX0ZDSEtGIDogRmFpbGVkIGZjaGtmCitldmVudDoweDA1IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMDAgbmFtZTpGUF9GQUxTRV9TSVJTVEFMTCA6IFNJUiBzdGFsbCB3aXRob3V0IGEgdHJhcAorZXZlbnQ6MHgwYiBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAwIG5hbWU6RlBfRkxVU0hfVE9fWkVSTyA6IFJlc3VsdCBGbHVzaGVkIHRvIFplcm8KK2V2ZW50OjB4MDkgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwMCBuYW1lOkZQX09QU19SRVRJUkVEIDogUmV0aXJlZCBGUCBvcGVyYXRpb25zCitldmVudDoweDAzIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMDAgbmFtZTpGUF9UUlVFX1NJUlNUQUxMIDogU0lSIHN0YWxsIGFzc2VydGVkIGFuZCBsZWFkcyB0byBhIHRyYXAKK2V2ZW50OjB4MDggY291bnRlcnM6MCwxLDIsMyB1bTp0YWdnZWRfaW5zdF9yZXRpcmVkIG1pbmltdW06NTAwMCBuYW1lOklBNjRfVEFHR0VEX0lOU1RfUkVUSVJFRCA6IFJldGlyZWQgVGFnZ2VkIEluc3RydWN0aW9ucworZXZlbnQ6MHg1NiBjb3VudGVyczowLDEsMiwzIHVtOmFsYXRfY2FwYWNpdHlfbWlzcyBtaW5pbXVtOjUwMDAgbmFtZTpJTlNUX0NIS0FfTERDX0FMQVQgOiBBZHZhbmNlZCBDaGVjayBMb2FkcworZXZlbnQ6MHg1NyBjb3VudGVyczowLDEsMiwzIHVtOmFsYXRfY2FwYWNpdHlfbWlzcyBtaW5pbXVtOjUwMDAgbmFtZTpJTlNUX0ZBSUxFRF9DSEtBX0xEQ19BTEFUIDogRmFpbGVkIEFkdmFuY2VkIENoZWNrIExvYWRzCitldmVudDoweDU1IGNvdW50ZXJzOjAsMSwyLDMgdW06YWxhdF9jYXBhY2l0eV9taXNzIG1pbmltdW06NTAwMCBuYW1lOklOU1RfRkFJTEVEX0NIS1NfUkVUSVJFRCA6IEZhaWxlZCBTcGVjdWxhdGl2ZSBDaGVjayBMb2FkcworIyBUbyBhdm9pZCBkdXBsaWNhdGlvbiBmcm9tIG90aGVyIHRhYmxlcyB0aGUgZm9sbG93aW5nIGV2ZW50cyBjb21tZW50ZWQgb3V0CisjZXZlbnQ6MHhjZCBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAwIG5hbWU6TE9BRFNfUkVUSVJFRCA6IFJldGlyZWQgTG9hZHMKKyNldmVudDoweGNlIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMDAgbmFtZTpNSVNBTElHTkVEX0xPQURTX1JFVElSRUQgOiBSZXRpcmVkIE1pc2FsaWduZWQgTG9hZCBJbnN0cnVjdGlvbnMKKyNldmVudDoweGNmIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMDAgbmFtZTpVQ19MT0FEU19SRVRJUkVEIDogUmV0aXJlZCBVbmNhY2hlYWJsZSBMb2FkcworI2V2ZW50OjB4ZDEgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwMCBuYW1lOlNUT1JFU19SRVRJUkVEIDogUmV0aXJlZCBTdG9yZXMKKyNldmVudDoweGQyIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMDAgbmFtZTpNSVNBTElHTkVEX1NUT1JFU19SRVRJUkVEIDogUmV0aXJlZCBNaXNhbGlnbmVkIFN0b3JlIEluc3RydWN0aW9ucworI2V2ZW50OjB4ZDAgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwMCBuYW1lOlVDX1NUT1JFU19SRVRJUkVEIDogUmV0aXJlZCBVbmNhY2hlYWJsZSBTdG9yZXMKK2V2ZW50OjB4NTAgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwMCBuYW1lOk5PUFNfUkVUSVJFRCA6IFJldGlyZWQgTk9QIEluc3RydWN0aW9ucworZXZlbnQ6MHg1MSBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAwIG5hbWU6UFJFRElDQVRFX1NRVUFTSEVEX1JFVElSRUQgOiBJbnN0cnVjdGlvbnMgU3F1YXNoZWQgRHVlIHRvIFByZWRpY2F0ZSBPZmZgCisKKyMgSUE2NF8yIFN0YWxsIEV2ZW50cywgVGFibGUgMTEtNgorZXZlbnQ6MHgwMCBjb3VudGVyczowLDEsMiwzIHVtOmJhY2tfZW5kX2J1YmJsZSBtaW5pbXVtOjUwMDAgbmFtZTpCQUNLX0VORF9CVUJCTEUgOiBGdWxsIHBpcGUgYnViYmxlcyBpbiBtYWluIHBpcGUKK2V2ZW50OjB4MDIgY291bnRlcnM6MCwxLDIsMyB1bTpiZV9leGVfYnViYmxlIG1pbmltdW06NTAwMCBuYW1lOkJFX0VYRV9CVUJCTEUgOiBGdWxsIHBpcGUgYnViYmxlcyBpbiBtYWluIHBpcGUgZHVlIHRvIEV4ZWN1dGlvbiB1bml0IHN0YWxscworZXZlbnQ6MHgwNCBjb3VudGVyczowLDEsMiwzIHVtOmJlX2ZsdXNoX2J1YmJsZSBtaW5pbXVtOjUwMDAgbmFtZTpCRV9GTFVTSF9CVUJCTEUgOiBGdWxsIHBpcGUgYnViYmxlcyBpbiBtYWluIHBpcGUgZHVlIHRvIGZsdXNoZXMKK2V2ZW50OjB4Y2EgY291bnRlcnM6MCwxLDIsMyB1bTpiZV9sMWRfZnB1X2J1YmJsZSBtaW5pbXVtOjUwMDAgbmFtZTpCRV9MMURfRlBVX0JVQkJMRSA6IEZ1bGwgcGlwZSBidWJibGVzIGluIG1haW4gcGlwZSBkdWUgdG8gRlAgb3IgTDEgZGNhY2hlCisjIFRvIGF2b2lkIGR1cGxpY2F0aW9uIGZyb20gb3RoZXIgdGFibGVzIHRoZSBmb2xsb3dpbmcgZXZlbnRzIGNvbW1lbnRlZCBvdXQKKyNldmVudDoweDcyIGNvdW50ZXJzOjAsMSwyLDMgdW06YmVfbG9zdF9id19kdWVfdG9fZmUgbWluaW11bTo1MDAwIG5hbWU6QkVfTE9TVF9CV19EVUVfVE9fRkUgOiBJbnZhbGlkIGJ1bmRsZXMgaWYgQkUgbm90IHN0YWxsZWQgZm9yIG90aGVyIHJlYXNvbnMKK2V2ZW50OjB4MDEgY291bnRlcnM6MCwxLDIsMyB1bTpiZV9yc2VfYnViYmxlIG1pbmltdW06NTAwMCBuYW1lOkJFX1JTRV9CVUJCTEUgOiBGdWxsIHBpcGUgYnViYmxlcyBpbiBtYWluIHBpcGUgZHVlIHRvIFJTRSBzdGFsbHMKK2V2ZW50OjB4NzEgY291bnRlcnM6MCwxLDIsMyB1bTpmZV9idWJibGUgbWluaW11bTo1MDAwIG5hbWU6RkVfQlVCQkxFIDogQnViYmxlcyBzZWVuIGJ5IEZFCitldmVudDoweDcwIGNvdW50ZXJzOjAsMSwyLDMgdW06ZmVfbG9zdCBtaW5pbXVtOjUwMDAgbmFtZTpGRV9MT1NUX0JXIDogSW52YWxpZCBidW5kbGVzIGF0IHRoZSBlbnRyYW5jZSB0byBJQgorZXZlbnQ6MHg3MyBjb3VudGVyczowLDEsMiwzIHVtOmZlX2xvc3QgbWluaW11bTo1MDAwIG5hbWU6SURFQUxfQkVfTE9TVF9CV19EVUVfVE9fRkUgOiBJbnZhbGlkIGJ1bmRsZXMgYXQgdGhlIGV4aXQgZnJvbSBJQgorCisjIElBNjRfMiBCcmFuY2ggRXZlbnRzLCBUYWJsZSAxMS03CitldmVudDoweDYxIGNvdW50ZXJzOjAsMSwyLDMgdW06YmVfYnJfbWlzcHJlZGljdF9kZXRhaWwgbWluaW11bTo1MDAwIG5hbWU6QkVfQlJfTUlTUFJFRF9ERVRBSUwgOiBCRSBicmFuY2ggbWlzcHJlZGljdGlvbiBkZXRhaWwKK2V2ZW50OjB4MTEgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwMCBuYW1lOkJSQU5DSF9FVkVOVCA6IEJyYW5jaCBFdmVudCBDYXB0dXJlZAorZXZlbnQ6MHg1YiBjb3VudGVyczowLDEsMiwzIHVtOmJyX21pc3ByZWRfZGV0YWlsIG1pbmltdW06NTAwMCBuYW1lOkJSX01JU1BSRURfREVUQUlMIDogQnJhbmNoIE1pc3ByZWRpY3QgRGV0YWlsCitldmVudDoweDY4IGNvdW50ZXJzOjAsMSwyLDMgdW06YnJfbWlzcHJlZGljdF9kZXRhaWwyIG1pbmltdW06NTAwMCBuYW1lOkJSX01JU1BSRURfREVUQUlMMiA6IEZFIEJyYW5jaCBNaXNwcmVkaWN0IERldGFpbCAoVW5rbm93biBwYXRoIGNvbXBvbmVudCkKK2V2ZW50OjB4NTQgY291bnRlcnM6MCwxLDIsMyB1bTpicl9wYXRoX3ByZWQgbWluaW11bTo1MDAwIG5hbWU6QlJfUEFUSF9QUkVEIDogRkUgQnJhbmNoIFBhdGggUHJlZGljdGlvbiBEZXRhaWwKK2V2ZW50OjB4NmEgY291bnRlcnM6MCwxLDIsMyB1bTpicl9wYXRoX3ByZWQyIG1pbmltdW06NTAwMCBuYW1lOkJSX1BBVEhfUFJFRDIgOiBGRSBCcmFuY2ggUGF0aCBQcmVkaWN0aW9uIERldGFpbCAoVW5rbm93biBwcmVkaWN0aW9uIGNvbXBvbmVudCkKK2V2ZW50OjB4NjMgY291bnRlcnM6MCwxLDIsMyB1bTplbmNicl9taXNwcmVkX2RldGFpbCBtaW5pbXVtOjUwMDAgbmFtZTpFTkNCUl9NSVNQUkVEX0RFVEFJTCA6IE51bWJlciBvZiBlbmNvZGVkIGJyYW5jaGVzIHJldGlyZWQKKworIyBJQTY0XzIgTDEgSW5zdHJ1Y3Rpb24gQ2FjaGUgYW5kIFByZWZldGNoIEV2ZW50cywgVGFibGUgMTEtOAorZXZlbnQ6MHg0NiBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAwIG5hbWU6SVNCX0JVTlBBSVJTX0lOIDogQnVuZGxlIHBhaXJzIHdyaXR0ZW4gZnJvbSBMMiBpbnRvIEZFCitldmVudDoweDQzIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMDAgbmFtZTpMMUlfRUFSX0VWRU5UUyA6IEluc3RydWN0aW9uIEVBUiBFdmVudHMKK2V2ZW50OjB4NjYgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwMCBuYW1lOkwxSV9GRVRDSF9JU0JfSElUIDogIlwiSnVzdC1pbi10aW1lXCIgaW5zdHJ1Y3Rpb24gZmV0Y2ggaGl0dGluZyBpbiBhbmQgYmVpbmcgYnlwYXNzZWQgZnJvbSBJU0IKK2V2ZW50OjB4NjUgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwMCBuYW1lOkwxSV9GRVRDSF9SQUJfSElUIDogSW5zdHJ1Y3Rpb24gZmV0Y2ggaGl0dGluZyBpbiBSQUIKK2V2ZW50OjB4NDEgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwMCBuYW1lOkwxSV9GSUxMUyA6IEwxIEluc3RydWN0aW9uIENhY2hlIEZpbGxzCitldmVudDoweDQ0IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMDAgbmFtZTpMMUlfUFJFRkVUQ0hFUyA6IEluc3RydWN0aW9uIFByZWZldGNoIFJlcXVlc3RzCitldmVudDoweDQyIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMDAgbmFtZTpMMl9JTlNUX0RFTUFORF9SRUFEUyA6IEwxIEluc3RydWN0aW9uIENhY2hlIGFuZCBJU0IgTWlzc2VzCitldmVudDoweDY3IGNvdW50ZXJzOjAsMSwyLDMgdW06bDFpX3ByZWZldGNoX3N0YWxsIG1pbmltdW06NTAwMCBuYW1lOkwxSV9QUkVGRVRDSF9TVEFMTCA6IFdoeSBwcmVmZXRjaCBwaXBlbGluZSBpcyBzdGFsbGVkPworZXZlbnQ6MHg0YiBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAwIG5hbWU6TDFJX1BVUkdFIDogTDFJVExCIHB1cmdlcyBoYW5kbGVkIGJ5IEwxSQorZXZlbnQ6MHg2OSBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAwIG5hbWU6TDFJX1BWQUJfT1ZFUkZMT1cgOiBQVkFCIG92ZXJmbG93CitldmVudDoweDY0IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMDAgbmFtZTpMMUlfUkFCX0FMTU9TVF9GVUxMIDogSXMgUkFCIGFsbW9zdCBmdWxsPworZXZlbnQ6MHg2MCBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpMMUlfUkFCX0ZVTEwgOiBJcyBSQUIgZnVsbD8KK2V2ZW50OjB4NDAgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwMCBuYW1lOkwxSV9SRUFEUyA6IEwxIEluc3RydWN0aW9uIENhY2hlIFJlYWQKK2V2ZW50OjB4NGEgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwMCBuYW1lOkwxSV9TTk9PUCA6IFNub29wIHJlcXVlc3RzIGhhbmRsZWQgYnkgTDFJCitldmVudDoweDVmIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMDAgbmFtZTpMMUlfU1RSTV9QUkVGRVRDSEVTIDogTDEgSW5zdHJ1Y3Rpb24gQ2FjaGUgbGluZSBwcmVmZXRjaCByZXF1ZXN0cworZXZlbnQ6MHg0NSBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAwIG5hbWU6TDJfSU5TVF9QUkVGRVRDSEVTIDogSW5zdHJ1Y3Rpb24gUHJlZmV0Y2ggUmVxdWVzdHMKKworIyBJQTY0XzIgTDEgRGF0YSBDYWNoZSBFdmVudHMsIFRhYmxlIDExLTEwCitldmVudDoweGM4IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMDAgbmFtZTpEQVRBX0VBUl9FVkVOVFMgOiBEYXRhIENhY2hlIEVBUiBFdmVudHMKKyMgVG8gYXZvaWQgZHVwbGljYXRpb24gZnJvbSBvdGhlciB0YWJsZXMgdGhlIGZvbGxvd2luZyBldmVudHMgY29tbWVudGVkIG91dAorI2V2ZW50OjB4YzIgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwMCBuYW1lOkwxRF9SRUFEU19TRVQwIDogTDEgRGF0YSBDYWNoZSBSZWFkcworI2V2ZW50OjB4YzMgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwMCBuYW1lOkRBVEFfUkVGRVJFTkNFU19TRVQwIDogRGF0YSBtZW1vcnkgcmVmZXJlbmNlcyBpc3N1ZWQgdG8gbWVtb3J5IHBpcGVsaW5lCisjZXZlbnQ6MHhjNCBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAwIG5hbWU6TDFEX1JFQURTX1NFVDEgOiBMMSBEYXRhIENhY2hlIFJlYWRzCisjZXZlbnQ6MHhjNSBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAwIG5hbWU6REFUQV9SRUZFUkVOQ0VTX1NFVDEgOiBEYXRhIG1lbW9yeSByZWZlcmVuY2VzIGlzc3VlZCB0byBtZW1vcnkgcGlwZWxpbmUKKyNldmVudDoweGM3IGNvdW50ZXJzOjAsMSwyLDMgdW06bDFkX3JlYWRfbWlzc2VzIG1pbmltdW06NTAwMCBuYW1lOkwxRF9SRUFEX01JU1NFUyA6IEwxIERhdGEgQ2FjaGUgUmVhZCBNaXNzZXMKKworIyBJQTY0XzIgTDEgRGF0YSBDYWNoZSBTZXQgMCBFdmVudHMsIFRhYmxlIDExLTExCitldmVudDoweGMwIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjUwMDAgbmFtZTpMMURUTEJfVFJBTlNGRVIgOiBMMURUTEIgbWlzc2VzIHRoYXQgaGl0IGluIHRoZSBMMkRUTEIgZm9yIGFjY2Vzc2VzIGNvdW50ZWQgaW4gTDFEX1JFQURTCitldmVudDoweGMxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjUwMDAgbmFtZTpMMkRUTEJfTUlTU0VTIDogTDJEVExCIE1pc3NlcworZXZlbnQ6MHhjMiBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bTo1MDAwIG5hbWU6TDFEX1JFQURTX1NFVDAgOiBMMSBEYXRhIENhY2hlIFJlYWRzCitldmVudDoweGMzIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjUwMDAgbmFtZTpEQVRBX1JFRkVSRU5DRVNfU0VUMCA6IERhdGEgbWVtb3J5IHJlZmVyZW5jZXMgaXNzdWVkIHRvIG1lbW9yeSBwaXBlbGluZQorCisjIElBNjRfMiBMMSBEYXRhIENhY2hlIFNldCAxIEV2ZW50cywgVGFibGUgMTEtMTIKK2V2ZW50OjB4YzQgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06NTAwMCBuYW1lOkwxRF9SRUFEU19TRVQxIDogTDEgRGF0YSBDYWNoZSBSZWFkcworZXZlbnQ6MHhjNSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bTo1MDAwIG5hbWU6REFUQV9SRUZFUkVOQ0VTX1NFVDEgOiBEYXRhIG1lbW9yeSByZWZlcmVuY2VzIGlzc3VlZCB0byBtZW1vcnkgcGlwZWxpbmUKK2V2ZW50OjB4YzcgY291bnRlcnM6MSB1bTpsMWRfcmVhZF9taXNzZXMgbWluaW11bTo1MDAwIG5hbWU6TDFEX1JFQURfTUlTU0VTIDogTDEgRGF0YSBDYWNoZSBSZWFkIE1pc3NlcworCisjIElBNjRfMiBMMSBEYXRhIENhY2hlIFNldCAyIEV2ZW50cywgVGFibGUgMTEtMTMKK2V2ZW50OjB4Y2EgY291bnRlcnM6MSB1bTpiZV9sMWRfZnB1X2J1YmJsZSBtaW5pbXVtOjUwMDAgbmFtZTpCRV9MMURfRlBVX0JVQkJMRSA6IEZ1bGwgcGlwZSBidWJibGVzIGluIG1haW4gcGlwZSBkdWUgdG8gRlAgb3IgTDEgZGNhY2hlCisKKyMgSUE2NF8yIEwxIERhdGEgQ2FjaGUgU2V0IDMgRXZlbnRzLCBUYWJsZSAxMS0xNAorZXZlbnQ6MHhjZCBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bTo1MDAwIG5hbWU6TE9BRFNfUkVUSVJFRCA6IFJldGlyZWQgTG9hZHMKK2V2ZW50OjB4Y2UgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06NTAwMCBuYW1lOk1JU0FMSUdORURfTE9BRFNfUkVUSVJFRCA6IFJldGlyZWQgTWlzYWxpZ25lZCBMb2FkIEluc3RydWN0aW9ucworZXZlbnQ6MHhjZiBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bTo1MDAwIG5hbWU6VUNfTE9BRFNfUkVUSVJFRCA6IFJldGlyZWQgVW5jYWNoZWFibGUgTG9hZHMKKworIyBJQTY0XzIgTDEgRGF0YSBDYWNoZSBTZXQgNCBFdmVudHMsIFRhYmxlIDExLTE1CitldmVudDoweGQxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjUwMDAgbmFtZTpTVE9SRVNfUkVUSVJFRCA6IFJldGlyZWQgU3RvcmVzCitldmVudDoweGQyIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjUwMDAgbmFtZTpNSVNBTElHTkVEX1NUT1JFU19SRVRJUkVEIDogUmV0aXJlZCBNaXNhbGlnbmVkIFN0b3JlIEluc3RydWN0aW9ucworZXZlbnQ6MHhkMCBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bTo1MDAwIG5hbWU6VUNfU1RPUkVTX1JFVElSRUQgOiBSZXRpcmVkIFVuY2FjaGVhYmxlIFN0b3JlcworCisjIElBNjRfMiBMMiBVbmlmaWVkIENhY2hlIEV2ZW50cywgVGFibGUgMTEtMTYKKyMgVG8gYXZvaWQgZHVwbGljYXRpb24gZnJvbSBvdGhlciB0YWJsZXMgdGhlIGZvbGxvd2luZyBldmVudHMgY29tbWVudGVkIG91dAorI2V2ZW50OjB4YjkgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwMCBuYW1lOkwyX0JBRF9MSU5FU19TRUxFQ1RFRCA6IFZhbGlkIGxpbmUgcmVwbGFjZWQgd2hlbiBpbnZhbGlkIGxpbmUgaXMgYXZhaWxhYmxlCisjZXZlbnQ6MHhiOCBjb3VudGVyczowLDEsMiwzIHVtOmwyX2J5cGFzcyBtaW5pbXVtOjUwMDAgbmFtZTpMMl9CWVBBU1MgOiBDb3VudCBieXBhc3MKKyNldmVudDoweGIyIGNvdW50ZXJzOjAsMSwyLDMgdW06bDJfZGF0YV9yZWZlcmVuY2VzIG1pbmltdW06NTAwMCBuYW1lOkwyX0RBVEFfUkVGRVJFTkNFUyA6IERhdGEgcmVhZC93cml0ZSBhY2Nlc3MgdG8gTDIKK2V2ZW50OjB4YmYgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwMCBuYW1lOkwyX0ZJTExCX0ZVTEwgOiBMMkQgRmlsbCBidWZmZXIgaXMgZnVsbAorI2V2ZW50OjB4YjQgY291bnRlcnM6MCwxLDIsMyB1bTpsMl9mb3JjZV9yZWNpcmMgbWluaW11bTo1MDAwIG5hbWU6TDJfRk9SQ0VfUkVDSVJDIDogRm9yY2VkIHJlY2lyY3VsYXRlcworZXZlbnQ6MHhiYSBjb3VudGVyczowLDEsMiwzIHVtOnJlY2lyY19pZmV0Y2ggbWluaW11bTo1MDAwIG5hbWU6TDJfR09UX1JFQ0lSQ19JRkVUQ0ggOiBJbnN0cnVjdGlvbiBmZXRjaCByZWNpcmN1bGF0ZXMgcmVjZWl2ZWQgYnkgTDJECisjZXZlbnQ6MHhiNiBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAwIG5hbWU6TDJfR09UX1JFQ0lSQ19PWlFfQUNDIDogQ291bnRzIG51bWJlciBvZiBPWlEgYWNjZXNzZXMgcmVjaXJjdWxhdGVkIGJhY2sgdG8gTDFECisjZXZlbnQ6MHhhMSBjb3VudGVyczowLDEsMiwzIHVtOmwyX2lmZXRfY2FuY2VscyBtaW5pbXVtOjUwMDAgbmFtZTpMMl9JRkVUX0NBTkNFTFMgOiBJbnN0cnVjdGlvbiBmZXRjaCBjYW5jZWxzIGJ5IHRoZSBMMi4KKyNldmVudDoweGE1IGNvdW50ZXJzOjAsMSwyLDMgdW06bDJfaWZldF9jYW5jZWxzIG1pbmltdW06NTAwMCBuYW1lOkwyX0lGRVRfQ0FOQ0VMUyA6IEluc3RydWN0aW9uIGZldGNoIGNhbmNlbHMgYnkgdGhlIEwyLgorI2V2ZW50OjB4YTkgY291bnRlcnM6MCwxLDIsMyB1bTpsMl9pZmV0X2NhbmNlbHMgbWluaW11bTo1MDAwIG5hbWU6TDJfSUZFVF9DQU5DRUxTIDogSW5zdHJ1Y3Rpb24gZmV0Y2ggY2FuY2VscyBieSB0aGUgTDIuCisjZXZlbnQ6MHhhZCBjb3VudGVyczowLDEsMiwzIHVtOmwyX2lmZXRfY2FuY2VscyBtaW5pbXVtOjUwMDAgbmFtZTpMMl9JRkVUX0NBTkNFTFMgOiBJbnN0cnVjdGlvbiBmZXRjaCBjYW5jZWxzIGJ5IHRoZSBMMi4KK2V2ZW50OjB4YjkgY291bnRlcnM6MCwxLDIsMyB1bTpyZWNpcmNfaWZldGNoIG1pbmltdW06NTAwMCBuYW1lOkwyX0lTU1VFRF9SRUNJUkNfSUZFVENIIDogSW5zdHJ1Y3Rpb24gZmV0Y2ggcmVjaXJjdWxhdGVzIGlzc3VlZCBieSBMMkQKKyNldmVudDoweGI1IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMDAgbmFtZTpMMl9JU1NVRURfUkVDSVJDX09aUV9BQ0MgOiBDb3VudCBudW1iZXIgb2YgdGltZXMgYSByZWNpcmN1bGF0ZSBpc3N1ZSB3YXMgYXR0ZW1wdGVkIGFuZCBub3QgcHJlZW1wdGVkCisjZXZlbnQ6MHhiMCBjb3VudGVyczowLDEsMiwzIHVtOmwyX2wzX2FjY2Vzc19jYW5jZWwgbWluaW11bTo1MDAwIG5hbWU6TDJfTDNBQ0NFU1NfQ0FOQ0VMIDogQ2FuY2VsZWQgTDMgYWNjZXNzZXMKK2V2ZW50OjB4Y2IgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwMCBuYW1lOkwyX01JU1NFUyA6IEwyIE1pc3NlcworZXZlbnQ6MHhiOCBjb3VudGVyczowLDEsMiwzIHVtOmwyX29wc19pc3N1ZWQgbWluaW11bTo1MDAwIG5hbWU6TDJfT1BTX0lTU1VFRCA6IERpZmZlcmVudCBvcGVyYXRpb25zIGlzc3VlZCBieSBMMkQKKyNldmVudDoweGJkIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMDAgbmFtZTpMMl9PWkRCX0ZVTEwgOiBMMkQgT1pRIGlzIGZ1bGwKKyNldmVudDoweGEyIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMDAgbmFtZTpMMl9PWlFfQUNRVUlSRSA6IENsb2NrcyB3aXRoIGFjcXVpcmUgb3JkZXJpbmcgYXR0cmlidXRlIGV4aXN0ZWQgaW4gTDIgT1pRCisjZXZlbnQ6MHhhNiBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAwIG5hbWU6TDJfT1pRX0FDUVVJUkUgOiBDbG9ja3Mgd2l0aCBhY3F1aXJlIG9yZGVyaW5nIGF0dHJpYnV0ZSBleGlzdGVkIGluIEwyIE9aUQorI2V2ZW50OjB4YWEgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwMCBuYW1lOkwyX09aUV9BQ1FVSVJFIDogQ2xvY2tzIHdpdGggYWNxdWlyZSBvcmRlcmluZyBhdHRyaWJ1dGUgZXhpc3RlZCBpbiBMMiBPWlEKKyNldmVudDoweGFlIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMDAgbmFtZTpMMl9PWlFfQUNRVUlSRSA6IENsb2NrcyB3aXRoIGFjcXVpcmUgb3JkZXJpbmcgYXR0cmlidXRlIGV4aXN0ZWQgaW4gTDIgT1pRCisjZXZlbnQ6MHhhMCBjb3VudGVyczowLDEsMiwzIHVtOmwyX296cV9jYW5jZWxzMCBtaW5pbXVtOjUwMDAgbmFtZTpMMl9PWlFfQ0FOQ0VMUzAgOiBMMiBPWlEgY2FuY2VscworI2V2ZW50OjB4YWMgY291bnRlcnM6MCwxLDIsMyB1bTpsMl9venFfY2FuY2VsczEgbWluaW11bTo1MDAwIG5hbWU6TDJfT1pRX0NBTkNFTFMxIDogTDIgT1pRIGNhbmNlbHMKKyNldmVudDoweGE4IGNvdW50ZXJzOjAsMSwyLDMgdW06bDJfb3pxX2NhbmNlbHMyIG1pbmltdW06NTAwMCBuYW1lOkwyX09aUV9DQU5DRUxTMiA6IEwyIE9aUSBjYW5jZWxzCisjZXZlbnQ6MHhiYyBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAwIG5hbWU6TDJfT1pRX0ZVTEwgOiBMMkQgT1pRIGlzIGZ1bGwKKyNldmVudDoweGEzIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMDAgbmFtZTpMMl9PWlFfUkVMRUFTRSA6IENsb2NrcyB3aXRoIHJlbGVhc2Ugb3JkZXJpbmcgYXR0cmlidXRlIGV4aXN0ZWQgaW4gTDIgT1pRCisjZXZlbnQ6MHhhNyBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAwIG5hbWU6TDJfT1pRX1JFTEVBU0UgOiBDbG9ja3Mgd2l0aCByZWxlYXNlIG9yZGVyaW5nIGF0dHJpYnV0ZSBleGlzdGVkIGluIEwyIE9aUQorI2V2ZW50OjB4YWIgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwMCBuYW1lOkwyX09aUV9SRUxFQVNFIDogQ2xvY2tzIHdpdGggcmVsZWFzZSBvcmRlcmluZyBhdHRyaWJ1dGUgZXhpc3RlZCBpbiBMMiBPWlEKKyNldmVudDoweGFmIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMDAgbmFtZTpMMl9PWlFfUkVMRUFTRSA6IENsb2NrcyB3aXRoIHJlbGVhc2Ugb3JkZXJpbmcgYXR0cmlidXRlIGV4aXN0ZWQgaW4gTDIgT1pRCisjZXZlbnQ6MHhiMSBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAwIG5hbWU6TDJfUkVGRVJFTkNFUyA6IFJlcXVlc3RzIG1hZGUgZnJvbSBMMgorI2V2ZW50OjB4YmEgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwMCBuYW1lOkwyX1NUT1JFX0hJVF9TSEFSRUQgOiBTdG9yZSBoaXQgYSBzaGFyZWQgbGluZQorI2V2ZW50OjB4YjcgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwMCBuYW1lOkwyX1NZTlRIX1BST0JFIDogU3ludGhlc2l6ZWQgUHJvYmUKKyNldmVudDoweGJlIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMDAgbmFtZTpMMl9WSUNUSU1CX0ZVTEwgOiBMMkQgdmljdGltIGJ1ZmZlciBpcyBmdWxsCisKKyMgSUE2NF8yIEwyIENhY2hlIEV2ZW50cyBTZXQgMCwgVGFibGUgMTEtMTgKKyMgRklYTUUgYWxsIHNvcnRzIG9mIHJlc3RyaWN0aW9ucyBvbiBob3cgdGhlc2UgY2FuIGJlIGNvbWJpbmVkCitldmVudDoweGExIGNvdW50ZXJzOjAgdW06bDJfaWZldF9jYW5jZWxzIG1pbmltdW06NTAwMCBuYW1lOkwyX0lGRVRfQ0FOQ0VMUyA6IEluc3RydWN0aW9uIGZldGNoIGNhbmNlbHMgYnkgdGhlIEwyLgorZXZlbnQ6MHhhNSBjb3VudGVyczowIHVtOmwyX2lmZXRfY2FuY2VscyBtaW5pbXVtOjUwMDAgbmFtZTpMMl9JRkVUX0NBTkNFTFMgOiBJbnN0cnVjdGlvbiBmZXRjaCBjYW5jZWxzIGJ5IHRoZSBMMi4KK2V2ZW50OjB4YTkgY291bnRlcnM6MCB1bTpsMl9pZmV0X2NhbmNlbHMgbWluaW11bTo1MDAwIG5hbWU6TDJfSUZFVF9DQU5DRUxTIDogSW5zdHJ1Y3Rpb24gZmV0Y2ggY2FuY2VscyBieSB0aGUgTDIuCitldmVudDoweGFkIGNvdW50ZXJzOjAgdW06bDJfaWZldF9jYW5jZWxzIG1pbmltdW06NTAwMCBuYW1lOkwyX0lGRVRfQ0FOQ0VMUyA6IEluc3RydWN0aW9uIGZldGNoIGNhbmNlbHMgYnkgdGhlIEwyLgorZXZlbnQ6MHhhMiBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAwIG5hbWU6TDJfT1pRX0FDUVVJUkUgOiBDbG9ja3Mgd2l0aCBhY3F1aXJlIG9yZGVyaW5nIGF0dHJpYnV0ZSBleGlzdGVkIGluIEwyIE9aUQorZXZlbnQ6MHhhNiBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAwIG5hbWU6TDJfT1pRX0FDUVVJUkUgOiBDbG9ja3Mgd2l0aCBhY3F1aXJlIG9yZGVyaW5nIGF0dHJpYnV0ZSBleGlzdGVkIGluIEwyIE9aUQorZXZlbnQ6MHhhYSBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAwIG5hbWU6TDJfT1pRX0FDUVVJUkUgOiBDbG9ja3Mgd2l0aCBhY3F1aXJlIG9yZGVyaW5nIGF0dHJpYnV0ZSBleGlzdGVkIGluIEwyIE9aUQorZXZlbnQ6MHhhZSBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAwIG5hbWU6TDJfT1pRX0FDUVVJUkUgOiBDbG9ja3Mgd2l0aCBhY3F1aXJlIG9yZGVyaW5nIGF0dHJpYnV0ZSBleGlzdGVkIGluIEwyIE9aUQorZXZlbnQ6MHhhMCBjb3VudGVyczowIHVtOmwyX296cV9jYW5jZWxzMCBtaW5pbXVtOjUwMDAgbmFtZTpMMl9PWlFfQ0FOQ0VMUzAgOiBMMiBPWlEgY2FuY2VscworZXZlbnQ6MHhhYyBjb3VudGVyczowIHVtOmwyX296cV9jYW5jZWxzMSBtaW5pbXVtOjUwMDAgbmFtZTpMMl9PWlFfQ0FOQ0VMUzEgOiBMMiBPWlEgY2FuY2VscworZXZlbnQ6MHhhOCBjb3VudGVyczowIHVtOmwyX296cV9jYW5jZWxzMiBtaW5pbXVtOjUwMDAgbmFtZTpMMl9PWlFfQ0FOQ0VMUzIgOiBMMiBPWlEgY2FuY2VscworZXZlbnQ6MHhhMyBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAwIG5hbWU6TDJfT1pRX1JFTEVBU0UgOiBDbG9ja3Mgd2l0aCByZWxlYXNlIG9yZGVyaW5nIGF0dHJpYnV0ZSBleGlzdGVkIGluIEwyIE9aUQorZXZlbnQ6MHhhNyBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAwIG5hbWU6TDJfT1pRX1JFTEVBU0UgOiBDbG9ja3Mgd2l0aCByZWxlYXNlIG9yZGVyaW5nIGF0dHJpYnV0ZSBleGlzdGVkIGluIEwyIE9aUQorZXZlbnQ6MHhhYiBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAwIG5hbWU6TDJfT1pRX1JFTEVBU0UgOiBDbG9ja3Mgd2l0aCByZWxlYXNlIG9yZGVyaW5nIGF0dHJpYnV0ZSBleGlzdGVkIGluIEwyIE9aUQorZXZlbnQ6MHhhZiBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAwIG5hbWU6TDJfT1pRX1JFTEVBU0UgOiBDbG9ja3Mgd2l0aCByZWxlYXNlIG9yZGVyaW5nIGF0dHJpYnV0ZSBleGlzdGVkIGluIEwyIE9aUQorCisjIElBNjRfMiBMMiBDYWNoZSBFdmVudHMgU2V0IDEsIFRhYmxlIDExLTE5CisjIG1hbnVhbCBzdGF0ZXMgdGhhdCBMMl9MM0FDQ0VTU19DQU5DRUwgbXVzdCBiZSBtZWFzdXJlZCBpbiBQTUQ0LgorIyBGSVhNRSBEb24ndCBoYXZlIGFueSB3YXkgb2YgZW5mb3JjaW5nIHRoZSBjb25zdHJhaW50cworIyBzbyBvbmx5IGwyX2wzX2FjY2Vzc19jYW5jZWwgYWxsb3dlZC4KK2V2ZW50OjB4YjAgY291bnRlcnM6MCB1bTpsMl9sM19hY2Nlc3NfY2FuY2VsIG1pbmltdW06NTAwMCBuYW1lOkwyX0wzQUNDRVNTX0NBTkNFTCA6IENhbmNlbGVkIEwzIGFjY2Vzc2VzCisjZXZlbnQ6MHhiMiBjb3VudGVyczowLDEsMiwzIHVtOmwyX2RhdGFfcmVmZXJlbmNlcyBtaW5pbXVtOjUwMDAgbmFtZTpMMl9EQVRBX1JFRkVSRU5DRVMgOiBEYXRhIHJlYWQvd3JpdGUgYWNjZXNzIHRvIEwyCisjZXZlbnQ6MHhiMSBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAwIG5hbWU6TDJfUkVGRVJFTkNFUyA6IFJlcXVlc3RzIG1hZGUgZnJvbSBMMgorCisjIElBNjRfMiBMMiBDYWNoZSBFdmVudHMgU2V0IDIsIFRhYmxlIDExLTIwCisjIG1hbnVhbCBzdGF0ZXMgdGhhdCBMMl9GT1JDRV9SRUNJUkMgbXVzdCBiZSBtZWFzdXJlZCBpbiBQTUQ0LgorIyBGSVhNRSBEb24ndCBoYXZlIGFueXdheSBvZiBlbmZvcmNpbmcgdGhlcyBjb25zdHJhaW50CisjIHNvIG9ubHkgTDJfRk9SQ0VfUkVDSVJDIGFsbG93ZWQuCitldmVudDoweGI0IGNvdW50ZXJzOjAgdW06bDJfZm9yY2VfcmVjaXJjIG1pbmltdW06NTAwMCBuYW1lOkwyX0ZPUkNFX1JFQ0lSQyA6IEZvcmNlZCByZWNpcmN1bGF0ZXMKKyNldmVudDoweGI1IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMDAgbmFtZTpMMl9JU1NVRURfUkVDSVJDX09aUV9BQ0MgOiBDb3VudCBudW1iZXIgb2YgdGltZXMgYSByZWNpcmN1bGF0ZSBpc3N1ZSB3YXMgYXR0ZW1wdGVkIGFuZCBub3QgcHJlZW1wdGVkCisjZXZlbnQ6MHhiNiBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAwIG5hbWU6TDJfR09UX1JFQ0lSQ19PWlFfQUNDIDogQ291bnRzIG51bWJlciBvZiBPWlEgYWNjZXNzZXMgcmVjaXJjdWxhdGVkIGJhY2sgdG8gTDFECisjZXZlbnQ6MHhiNyBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAwIG5hbWU6TDJfU1lOVEhfUFJPQkUgOiBTeW50aGVzaXplZCBQcm9iZQorCisjIElBNjRfMiBMMiBDYWNoZSBFdmVudHMgU2V0IDMsIFRhYmxlIDExLTIxCisjIFRoZSBtYW51YWwgc3RhdGVzIHRoYXQgYWxsIGV2ZW50cyBpbiB0aGlzIHNldCBzaGFyZSB0aGUgc2FtZSB1bWFzay4KK2V2ZW50OjB4YjkgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06NTAwMCBuYW1lOkwyX0JBRF9MSU5FU19TRUxFQ1RFRCA6IFZhbGlkIGxpbmUgcmVwbGFjZWQgd2hlbiBpbnZhbGlkIGxpbmUgaXMgYXZhaWxhYmxlCitldmVudDoweGI4IGNvdW50ZXJzOjAgdW06bDJfYnlwYXNzIG1pbmltdW06NTAwMCBuYW1lOkwyX0JZUEFTUyA6IENvdW50IGJ5cGFzcworZXZlbnQ6MHhiYSBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAwIG5hbWU6TDJfU1RPUkVfSElUX1NIQVJFRCA6IFN0b3JlIGhpdCBhIHNoYXJlZCBsaW5lCisKKyMgSUE2NF8yIEwyIENhY2hlIEV2ZW50cyBTZXQgNCwgVGFibGUgMTEtMjIKKyMgVGhlIG1hbnVhbCBzdGF0ZXMgb25lIG9mIHRoZSBmb2xsb3dpbmcgbmVlZHMgdG8gYmUgaW4gcG1kNCBhbmQgdGhlc2UgZXZlbnRzCisjIHNoYXJlIHRoZSBzYW1lIHVtYXNrLgorZXZlbnQ6MHhiYSBjb3VudGVyczowIHVtOnJlY2lyY19pZmV0Y2ggbWluaW11bTo1MDAwIG5hbWU6TDJfR09UX1JFQ0lSQ19JRkVUQ0ggOiBJbnN0cnVjdGlvbiBmZXRjaCByZWNpcmN1bGF0ZXMgcmVjZWl2ZWQgYnkgTDJECitldmVudDoweGI5IGNvdW50ZXJzOjAgdW06cmVjaXJjX2lmZXRjaCBtaW5pbXVtOjUwMDAgbmFtZTpMMl9JU1NVRURfUkVDSVJDX0lGRVRDSCA6IEluc3RydWN0aW9uIGZldGNoIHJlY2lyY3VsYXRlcyBpc3N1ZWQgYnkgTDJECitldmVudDoweGI4IGNvdW50ZXJzOjAgdW06bDJfb3BzX2lzc3VlZCBtaW5pbXVtOjUwMDAgbmFtZTpMMl9PUFNfSVNTVUVEIDogRGlmZmVyZW50IG9wZXJhdGlvbnMgaXNzdWVkIGJ5IEwyRAorCisjIElBNjRfMiBMMiBDYWNoZSBFdmVudHMgU2V0IDUsIFRhYmxlIDExLTIzCisjIG1hbnVhbCBzdGF0ZXMgb25lIG9mIHRoZSBmb2xsb3dpbmcgbmVlZHMgdG8gYmUgaW4gcG1kNCBhbmQKKyMgICAgICAgdGhlc2UgZXZlbnRzIHNoYXJlIHRoZSBzYW1lIHVtYXNrCitldmVudDoweGJjIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjUwMDAgbmFtZTpMMl9PWlFfRlVMTCA6IEwyRCBPWlEgaXMgZnVsbAorZXZlbnQ6MHhiZCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAwIG5hbWU6TDJfT1pEQl9GVUxMIDogTDJEIE9aUSBpcyBmdWxsCitldmVudDoweGJlIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjUwMDAgbmFtZTpMMl9WSUNUSU1CX0ZVTEwgOiBMMkQgdmljdGltIGJ1ZmZlciBpcyBmdWxsCitldmVudDoweGJmIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjUwMDAgbmFtZTpMMl9GSUxMQl9GVUxMIDogTDJEIEZpbGwgYnVmZmVyIGlzIGZ1bGwKKworIyBJQTY0XzIgTDMgQ2FjaGUgRXZlbnRzLCBUYWJsZSAxMS0yNAorZXZlbnQ6MHhkZiBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAwIG5hbWU6TDNfTElORVNfUkVQTEFDRUQgOiBDYWNoZSBMaW5lcyBSZXBsYWNlZAorZXZlbnQ6MHhkYyBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAwIG5hbWU6TDNfTUlTU0VTIDogTDMgTWlzc2VzCitldmVudDoweGRiIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMDAgbmFtZTpMM19SRUZFUkVOQ0VTIDogTDMgUmVmZXJlbmNlcworZXZlbnQ6MHhkZCBjb3VudGVyczowLDEsMiwzIHVtOmwzX3JlYWRzIG1pbmltdW06NTAwMCBuYW1lOkwzX1JFQURTIDogTDMgUmVhZHMKK2V2ZW50OjB4ZGUgY291bnRlcnM6MCwxLDIsMyB1bTpsM193cml0ZXMgbWluaW11bTo1MDAwIG5hbWU6TDNfV1JJVEVTIDogTDMgV3JpdGVzCisKKyMgSUE2NF8yIFN5c3RlbSBFdmVudHMsIFRhYmxlIDExLTI2CitldmVudDoweDEzIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMDAgbmFtZTpDUFVfQ1BMX0NIQU5HRVMgOiBQcml2aWxlZ2UgTGV2ZWwgQ2hhbmdlcworZXZlbnQ6MHg1MiBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAwIG5hbWU6REFUQV9ERUJVR19SRUdJU1RFUl9GQVVMVCA6IEZhdWx0IGR1ZSB0byBkYXRhIGRlYnVnIHJlZy4gTWF0Y2ggdG8gbG9hZC9zdG9yZSBpbnN0cnVjdGlvbgorZXZlbnQ6MHhjNiBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAwIG5hbWU6REFUQV9ERUJVR19SRUdJU1RFUl9NQVRDSEVTIDogRGF0YSBkZWJ1ZyByZWdpc3RlciBtYXRjaGVzIGRhdGEgYWRkcmVzcyBvZiBtZW1vcnkgcmVmZXJlbmNlCitldmVudDoweDllIGNvdW50ZXJzOjAsMSwyLDMgdW06ZXh0ZXJuX2RwX3BpbnNfMF90b18zIG1pbmltdW06NTAwMCBuYW1lOkVYVEVSTl9EUF9QSU5TXzBfVE9fMyA6IERQIHBpbnMgMC0zIGFzc2VydGVkCitldmVudDoweDlmIGNvdW50ZXJzOjAsMSwyLDMgdW06ZXh0ZXJuX2RwX3BpbnNfNF90b181IG1pbmltdW06NTAwMCBuYW1lOkVYVEVSTl9EUF9QSU5TXzRfVE9fNSA6IERQIHBpbnMgNC01IGFzc2VydGVkCitldmVudDoweDUzIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMDAgbmFtZTpTRVJJQUxJWkFUSU9OX0VWRU5UUyA6IE51bWJlciBvZiBzcmx6LkkgaW5zdHJ1Y3Rpb25zCisKKyMgSUE2NF8yIFRMQiBFdmVudHMsIFRhYmxlIDExLTI4CitldmVudDoweGM5IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMDAgbmFtZTpEVExCX0lOU0VSVFNfSFBXIDogSGFyZHdhcmUgUGFnZSBXYWxrZXIgSW5zdGFsbHMgdG8gRFRMQiIKK2V2ZW50OjB4MmMgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RFRMQl9JTlNFUlRTX0hQV19SRVRJUkVEIDogVkhQVCBlbnRyaWVzIGluc2VydGVkIGludG8gRFRMQiBieSBIVyBQVworZXZlbnQ6MHgyZCBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpIUFdfREFUQV9SRUZFUkVOQ0VTIDogRGF0YSBtZW1vcnkgcmVmZXJlbmNlcyB0byBWSFBUCisjZXZlbnQ6MHhjMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bTo1MDAwIG5hbWU6TDJEVExCX01JU1NFUyA6IEwyRFRMQiBNaXNzZXMKK2V2ZW50OjB4NDggY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwMCBuYW1lOkwxSVRMQl9JTlNFUlRTX0hQVyA6IEwxSVRMQiBIYXJkd2FyZSBQYWdlIFdhbGtlciBJbnNlcnRzCitldmVudDoweDQ3IGNvdW50ZXJzOjAsMSwyLDMgdW06aXRsYl9taXNzZXNfZmV0Y2ggbWluaW11bTo1MDAwIG5hbWU6SVRMQl9NSVNTRVNfRkVUQ0ggOiBJVExCIE1pc3NlcyBEZW1hbmQgRmV0Y2gKKyNldmVudDoweGMwIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjUwMDAgbmFtZTpMMURUTEJfVFJBTlNGRVIgOiBMMURUTEIgbWlzc2VzIHRoYXQgaGl0IGluIHRoZSBMMkRUTEIgZm9yIGFjY2Vzc2VzIGNvdW50ZWQgaW4gTDFEX1JFQURTCisKKyMgSUE2NF8yIFN5c3RlbSBCdXMgRXZlbnRzLCBUYWJsZSAxMS0zMAorZXZlbnQ6MHg4NyBjb3VudGVyczowLDEsMiwzIHVtOmJ1cyBtaW5pbXVtOjUwMDAgbmFtZTpCVVNfQUxMIDogQnVzIFRyYW5zYWN0aW9ucworZXZlbnQ6MHg5YyBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAwIG5hbWU6QlVTX0JSUV9MSVZFX1JFUV9ISSA6IEJSUSBMaXZlIFJlcXVlc3RzICh0d28gbW9zdC1zaWduaWZpY2FudC1iaXQgb2YgdGhlIDUtYml0IG91dHN0YW5kaW5nIEJSUSByZXF1ZXN0IGNvdW50KQorZXZlbnQ6MHg5YiBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAwIG5hbWU6QlVTX0JSUV9MSVZFX1JFUV9MTyA6IEJSUSBMaXZlIFJlcXVlc3RzICh0aHJlZSBsZWFzdC1zaWduaWZpY2FudC1iaXQgb2YgdGhlIDUtYml0IG91dHN0YW5kaW5nIEJSUSByZXF1ZXN0IGNvdW50CitldmVudDoweDlkIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMDAgbmFtZTpCVVNfQlJRX1JFUV9JTlNFUlRFRCA6IEJSUSBSZXF1ZXN0cyBJbnNlcnRlZAorZXZlbnQ6MHg4OCBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAwIG5hbWU6QlVTX0RBVEFfQ1lDTEUgOiBWYWxpZCBkYXRhIGN5Y2xlIG9uIHRoZSBCdXMKK2V2ZW50OjB4ODQgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwMCBuYW1lOkJVU19ISVRNIDogQnVzIEhpdCBNb2RpZmllZCBMaW5lIFRyYW5zYWN0aW9ucworZXZlbnQ6MHg5MCBjb3VudGVyczowLDEsMiwzIHVtOmJ1cyBtaW5pbXVtOjUwMDAgbmFtZTpCVVNfSU8gOiBJQS0zMiBDb21wYXRpYmxlIElPIEJ1cyBUcmFuc2FjdGlvbnMKK2V2ZW50OjB4OTggY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwMCBuYW1lOkJVU19JT1FfTElWRV9SRVFfSEkgOiBJbm9yZGVyIEJ1cyBRdWV1ZSBSZXF1ZXN0cyAodHdvIG1vc3Qtc2lnbmlmaWNhbnQtYml0IG9mIHRoZSA0LWJpdCBvdXRzdGFuZGluZyBJT1EgcmVxdWVzdCBjb3VudCkKK2V2ZW50OjB4OTcgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwMCBuYW1lOkJVU19JT1FfTElWRV9SRVFfTE8gOiBJbm9yZGVyIEJ1cyBRdWV1ZSBSZXF1ZXN0cyAodHdvIGxlYXN0LXNpZ25pZmljYW50LWJpdCBvZiB0aGUgNC1iaXQgb3V0c3RhbmRpbmcgSU9RIHJlcXVlc3QgY291bnQpCitldmVudDoweDkzIGNvdW50ZXJzOjAsMSwyLDMgdW06YnVzX2xvY2sgbWluaW11bTo1MDAwIG5hbWU6QlVTX0xPQ0sgOiBJQS0zMiBDb21wYXRpYmxlIEJ1cyBMb2NrIFRyYW5zYWN0aW9ucworZXZlbnQ6MHg4ZSBjb3VudGVyczowLDEsMiwzIHVtOmJ1c19iYWNrc25wX3JlcSBtaW5pbXVtOjUwMDAgbmFtZTpCVVNfQkFDS1NOUF9SRVEgOiBCdXMgQmFjayBTbm9vcCBSZXF1ZXN0cworZXZlbnQ6MHg4YSBjb3VudGVyczowLDEsMiwzIHVtOmJ1c19tZW1vcnkgbWluaW11bTo1MDAwIG5hbWU6QlVTX01FTU9SWSA6IEJ1cyBNZW1vcnkgVHJhbnNhY3Rpb25zCitldmVudDoweDhiIGNvdW50ZXJzOjAsMSwyLDMgdW06YnVzX21lbV9yZWFkIG1pbmltdW06NTAwMCBuYW1lOkJVU19NRU1fUkVBRCA6IEZ1bGwgQ2FjaGUgbGluZSBEL0kgbWVtb3J5IFJELCBSRCBpbnZhbGlkYXRlLCBhbmQgQlJJTAorZXZlbnQ6MHg5NCBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAwIG5hbWU6QlVTX01FTV9SRUFEX09VVF9ISSA6IE91dHN0YW5kaW5nIG1lbW9yeSBSRCB0cmFuc2FjdGlvbnMKK2V2ZW50OjB4OTUgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwMCBuYW1lOkJVU19NRU1fUkVBRF9PVVRfTE8gOiBPdXRzdGFuZGluZyBtZW1vcnkgUkQgdHJhbnNhY3Rpb25zCitldmVudDoweDlhIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMDAgbmFtZTpCVVNfT09RX0xJVkVfUkVRX0hJIDogT3V0LW9mLW9yZGVyIEJ1cyBRdWV1ZSBSZXF1ZXN0cyAodHdvIG1vc3Qtc2lnbmlmaWNhbnQtYml0IG9mIHRoZSA0LWJpdCBvdXRzdGFuZGluZyBPT1EgcmVxdWVzdCBjb3VudCkKK2V2ZW50OjB4OTkgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwMCBuYW1lOkJVU19PT1FfTElWRV9SRVFfTE8gOiBPdXQtb2Ytb3JkZXIgQnVzIFF1ZXVlIFJlcXVlc3RzICh0aHJlZSBsZWFzdC1zaWduaWZpY2FudC1iaXQgb2YgdGhlIDQtYml0IG91dHN0YW5kaW5nIE9PUSByZXF1ZXN0IGNvdW50KQorZXZlbnQ6MHg4YyBjb3VudGVyczowLDEsMiwzIHVtOmJ1cyBtaW5pbXVtOjUwMDAgbmFtZTpCVVNfUkRfREFUQSA6IEJ1cyBSZWFkIERhdGEgVHJhbnNhY3Rpb25zCitldmVudDoweDgwIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMDAgbmFtZTpCVVNfUkRfSElUIDogQnVzIFJlYWQgSGl0IENsZWFuIE5vbi1sb2NhbCBDYWNoZSBUcmFuc2FjdGlvbnMKK2V2ZW50OjB4ODEgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwMCBuYW1lOkJVU19SRF9ISVRNIDogQnVzIFJlYWQgSGl0IE1vZGlmaWVkIE5vbi1sb2NhbCBDYWNoZSBUcmFuc2FjdGlvbnMKK2V2ZW50OjB4ODMgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwMCBuYW1lOkJVU19SRF9JTlZBTF9BTExfSElUTSA6IEJ1cyBCSUwgb3IgQlJJTCBUcmFuc2FjdGlvbiBSZXN1bHRzIGluIEhJVE0KK2V2ZW50OjB4ODIgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwMCBuYW1lOkJVU19SRF9JTlZBTF9ISVRNIDogQnVzIEJJTCBUcmFuc2FjdGlvbiBSZXN1bHRzIGluIEhJVE0KK2V2ZW50OjB4OTEgY291bnRlcnM6MCwxLDIsMyB1bTpidXMgbWluaW11bTo1MDAwIG5hbWU6QlVTX1JEX0lPIDogSUEtMzIgQ29tcGF0aWJsZSBJTyBSZWFkIFRyYW5zYWN0aW9ucworZXZlbnQ6MHg4ZCBjb3VudGVyczowLDEsMiwzIHVtOmJ1cyBtaW5pbXVtOjUwMDAgbmFtZTpCVVNfUkRfUFJUTCA6IEJ1cyBSZWFkIFBhcnRpYWwgVHJhbnNhY3Rpb25zCitldmVudDoweDk2IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMDAgbmFtZTpCVVNfU05PT1BRX1JFUSA6IEJ1cyBTbm9vcCBRdWV1ZSBSZXF1ZXN0cworZXZlbnQ6MHg4NiBjb3VudGVyczowLDEsMiwzIHVtOmJ1cyBtaW5pbXVtOjUwMDAgbmFtZTpCVVNfU05PT1BTIDogQnVzIFNub29wcyBUb3RhbAorZXZlbnQ6MHg4NSBjb3VudGVyczowLDEsMiwzIHVtOmJ1c19zbm9vcCBtaW5pbXVtOjUwMDAgbmFtZTpCVVNfU05PT1BTX0hJVE0gOiBCdXMgU25vb3BzIEhJVCBNb2RpZmllZCBDYWNoZSBMaW5lCitldmVudDoweDhmIGNvdW50ZXJzOjAsMSwyLDMgdW06YnVzX3Nub29wIG1pbmltdW06NTAwMCBuYW1lOkJVU19TTk9PUF9TVEFMTF9DWUNMRVMgOiBCdXMgU25vb3AgU3RhbGwgQ3ljbGVzIChmcm9tIGFueSBhZ2VudCkKK2V2ZW50OjB4OTIgY291bnRlcnM6MCwxLDIsMyB1bTpidXNfd3Jfd2IgbWluaW11bTo1MDAwIG5hbWU6QlVTX1dSX1dCIDogQnVzIFdyaXRlIEJhY2sgVHJhbnNhY3Rpb25zCitldmVudDoweDg5IGNvdW50ZXJzOjAsMSwyLDMgdW06bWVtX3JlYWRfY3VycmVudCBtaW5pbXVtOjUwMDAgbmFtZTpNRU1fUkVBRF9DVVJSRU5UIDogQ3VycmVudCBNZW0gUmVhZCBUcmFuc2FjdGlvbnMgT24gQnVzCisKKyMgUlNFIEV2ZW50cywgVGFibGUgMTEtMzQKK2V2ZW50OjB4MmIgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6UlNFX0NVUlJFTlRfUkVHU18yX1RPXzAgOiBDdXJyZW50IFJTRSByZWdpc3RlcnMKK2V2ZW50OjB4MmEgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6UlNFX0NVUlJFTlRfUkVHU181X1RPXzMgOiBDdXJyZW50IFJTRSByZWdpc3RlcnMKK2V2ZW50OjB4MjYgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6UlNFX0NVUlJFTlRfUkVHU182IDogQ3VycmVudCBSU0UgcmVnaXN0ZXJzCitldmVudDoweDI5IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlJTRV9ESVJUWV9SRUdTXzJfVE9fMCA6IERpcnR5IFJTRSByZWdpc3RlcnMKK2V2ZW50OjB4MjggY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6UlNFX0RJUlRZX1JFR1NfNV9UT18zIDogRGlydHkgUlNFIHJlZ2lzdGVycworZXZlbnQ6MHgyNCBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpSU0VfRElSVFlfUkVHU182IDogRGlydHkgUlNFIHJlZ2lzdGVycworZXZlbnQ6MHgzMiBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpSU0VfRVZFTlRfUkVUSVJFRCA6IFJldGlyZWQgUlNFIG9wZXJhdGlvbnMKK2V2ZW50OjB4MjAgY291bnRlcnM6MCwxLDIsMyB1bTpyc2VfcmVmZXJlbmNlc19yZXRpcmVkIG1pbmltdW06NTAwIG5hbWU6UlNFX1JFRkVSRU5DRVNfUkVUSVJFRCA6IFJTRSBBY2Nlc3NlcworCisjIElBNjQgUGVyZm9ybWFuY2UgTW9uaXRvcnMgT3JkZXJlZCBieSBDb2RlLCBUYWJsZSAxMS0zNgorZXZlbnQ6MHhiYiBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAwIG5hbWU6VEFHR0VEX0wyX0RBVEFfUkVUVVJOX1BPUiA6IFRhZ2dlZCBMMiBEYXRhIFJldHVybiBQb3J0cyAwLzEKZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2V2ZW50cy9pYTY0L2l0YW5pdW0yL3VuaXRfbWFza3MgYi9vcHJvZmlsZS0wLjkuNy9ldmVudHMvaWE2NC9pdGFuaXVtMi91bml0X21hc2tzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjNzRmNWQKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9ldmVudHMvaWE2NC9pdGFuaXVtMi91bml0X21hc2tzCkBAIC0wLDAgKzEsNDY1IEBACisjIElBLTY0IEl0YW5pdW0gMiBwb3NzaWJsZSB1bml0IG1hc2tzCisjCisjIFRoZSBpbmZvcm1hdGlvbiBmb3IgdGhlIGZvbGxvd2luZyBlbnRyaWVzIGZvciB0aGUgSXRhbml1bSAyCisjIGNhbWUgZnJvbSBJbnRlbCBJdGFuaXVtIDIgUHJvY2Vzc29yIFJlZmVyZW5jZSBNYW51YWwgRm9yCisjIFNvZnR3YXJlIERldmVsb3BtZW50IGFuZCBPcHRpbWl6YXRpb24sIEp1bmUgMjAwMiwgRG9jdW1lbnQKKyMgbnVtYmVyIDI1MTExMC0wMDEuCisKK25hbWU6emVybyB0eXBlOm1hbmRhdG9yeSBkZWZhdWx0OjB4MAorCTB4MCBObyB1bml0IG1hc2sKKworIyBDUFVfSUE2NF8yIFRhYmxlIDExLTM3LCAxMS03MgorbmFtZTphbGF0X2NhcGFjaXR5X21pc3MgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwMworCTB4MSBJTlQKKwkweDIgRlAKKwkweDMgQUxMCisKKyMgQ1BVX0lBNjRfMiBUYWJsZSAxMS0zOAorbmFtZTpiYWNrX2VuZF9idWJibGUgdHlwZTpleGNsdXNpdmUgZGVmYXVsdDoweDAwCisJMHgwIEFMTAorCTB4MSBGRQorCTB4MiBMMURfRlBVX1JTRQorCisjIENQVV9JQTY0XzIgVGFibGUgMTEtMzkKK25hbWU6YmVfYnJfbWlzcHJlZGljdF9kZXRhaWwgdHlwZTpleGNsdXNpdmUgZGVmYXVsdDoweDAwCisJMHgwIEFOWQorCTB4MSBTVEcKKwkweDIgUk9UCisJMHgzIFBGUworCisjIENQVV9JQTY0XzIgVGFibGUgMTEtNDAKK25hbWU6YmVfZXhlX2J1YmJsZSB0eXBlOmV4Y2x1c2l2ZSBkZWZhdWx0OjB4MDAKKwkweDAgQUxMCisJMHgxIEdSQUxMCisJMHgyIEZSQUxMCisJMHgzIFBSCisJMHg0IEFSQ1IKKwkweDUgR1JDUgorCTB4NiBDQU5DRUwKKwkweDcgQkFOS19TV0lUQ0gKKwkweDggQVJDUl9QUl9DQU5DRUxfQkFOSworCisjIENQVV9JQTY0XzIgVGFibGUgMTEtNDEKK25hbWU6YmVfZmx1c2hfYnViYmxlIHR5cGU6ZXhjbHVzaXZlIGRlZmF1bHQ6MHgwMAorCTB4MCBBTEwKKwkweDEgQlJVCisJMHgyIFhQTgorCisjIENQVV9JQTY0XzIgVGFibGUgMTEtNDIKK25hbWU6YmVfbDFkX2ZwdV9idWJibGUgdHlwZTpleGNsdXNpdmUgZGVmYXVsdDoweDAwCisJMHgwIEFMTAorCTB4MSBGUFUKKwkweDIgTDFECisJMHgzIEwxRF9GVUxMU1RCVUYKKwkweDQgTDFEX0RDVVJFQ0lSCisJMHg1IEwxRF9IUFcKKwkweDcgTDFEX0ZJTExDT05GCisJMHg4IEwxRF9EQ1MKKwkweDkgTDFEX0wyQlBSRVNTCisJMHhhIEwxRF9UTEIKKwkweGIgTDFEX0xEQ09ORgorCTB4YyBMMURfTERDSEsKKwkweGQgTDFEX05BVAorCTB4ZSBMMURfU1RCVUZSRUNJUgorCTB4ZiBMMURfTkFUQ09ORgorCisjIENQVV9JQTY0XzIgVGFibGUgMTEtNDMKKyMgRklYTUU6IGV2ZW50cyB1c2luZyB0aGlzIGlzIGNvbW1lbnRlZCBvdXQgaW4gZXZlbnRzCisjbmFtZTpiZV9sb3N0X2J3X2R1ZV90b19mZSB0eXBlOmV4Y2x1c2l2ZSBkZWZhdWx0OjB4MDAKKyMJMHgwIEFMTAorIwkweDEgRkVGTFVTSAorIwkweDQgVU5SRUFDSEVECisjCTB4NSBJQkZVTEwKKyMJMHg2IElNSVNTCisjCTB4NyBUTEJNSVNTCisjCTB4OCBGSUxMX1JFQ0lSQworIwkweDkgQkkKKyMJMHhhIEJSUQorIwkweGIgUExQCisjCTB4YyBCUl9JTE9DSworIwkweGQgQlVCQkxFCisKKyMgQ1BVX0lBNjRfMiBUYWJsZSAxMS00NAorbmFtZTpiZV9yc2VfYnViYmxlIHR5cGU6ZXhjbHVzaXZlIGRlZmF1bHQ6MHgwMAorCTB4MCBBTEwKKwkweDEgQkFOS19TV0lUQ0gKKwkweDIgQVJfREVQCisJMHgzIE9WRVJGTE9XCisJMHg0IFVOREVSRkxPVworCTB4NSBMT0FEUlMKKworIyBDUFVfSUE2NF8yIFRhYmxlIDExLTQ1CituYW1lOmJyX21pc3ByZWRfZGV0YWlsIHR5cGU6ZXhjbHVzaXZlIGRlZmF1bHQ6MHgwMAorCTB4MCBBTEwuQUxMX1BSRUQKKwkweDEgQUxMLkNPUlJFQ1RfUFJFRAorCTB4MiBBTEwuV1JPTkdfUEFUSAorCTB4MyBBTEwuV1JPTkdfVEFSR0VUCisJMHg0IElQUkVMLkFMTF9QUkVECisJMHg1IElQUkVMLkNPUlJFQ1RfUFJFRAorCTB4NiBJUFJFTC5XUk9OR19QQVRICisJMHg3IElQUkVMLldST05HX1RBUkdFVAorCTB4OCBSRVRVUk4uQUxMX1BSRUQKKwkweDkgUkVUVVJOLkNPUlJFQ1RfUFJFRAorCTB4YSBSRVRVUk4uV1JPTkdfUEFUSAorCTB4YiBSRVRVUk4uV1JPTkdfVEFSR0VUCisJMHhjIE5SRVRJTkQuQUxMX1BSRUQKKwkweGQgTlJFVElORC5DT1JSRUNUX1BSRUQKKwkweGUgTlJFVElORC5XUk9OR19QQVRICisJMHhmIE5SRVRJTkQuV1JPTkdfVEFSR0VUCisKKyMgQ1BVX0lBNjRfMiBUYWJsZSAxMS00NgorbmFtZTpicl9taXNwcmVkaWN0X2RldGFpbDIgdHlwZTpleGNsdXNpdmUgZGVmYXVsdDoweDAwCisJMHgwIEFMTC5BTExfVU5LTk9XTl9QUkVECisJMHgxIEFMTC5VS05PV05fUEFUSF9DT1JSRUNUX1BSRUQKKwkweDIgQUxMLlVLTk9XTl9QQVRIX1dST05HX1BBVEgKKwkweDQgSVBSRUwuQUxMX1VOS05PV05fUFJFRAorCTB4NSBJUFJFTC5VTktOT1dOX1BBVEhfQ09SUkVDVF9QUkVECisJMHg2IElQUkVMLlVOS05PV05fUEFUSF9XUk9OR19QQVRICisJMHg4IFJFVFVSTi5BTExfVU5LTk9XTl9QUkVECisJMHg5IFJFVFVSTi5VTktOT1dOX1BBVEhfQ09SUkVDVF9QUkVECisJMHhhIFJFVFVSTi5VTktOT1dOX1BBVEhfV1JPTkdfUEFUSAorCTB4YyBOUkVUSU5ELkFMTF9VTktOT1dOX1BSRUQKKwkweGQgTlJFVElORC5VTktOT1dOX1BBVEhfQ09SUkVDVF9QUkVECisJMHhlIE5SRVRJTkQuVU5LTk9XTl9QQVRIX1dST05HX1BBVEgKKworIyBDUFVfSUE2NF8yIFRhYmxlIDExLTQ3CituYW1lOmJyX3BhdGhfcHJlZCB0eXBlOmV4Y2x1c2l2ZSBkZWZhdWx0OjB4MDAKKwkweDAgQUxMLk1JU1BSRURfTk9UVEFLRU4KKwkweDEgQUxMLk1JU1BSRURfVEFLRU4KKwkweDIgQUxMLk9LUFJFRF9OT1RUQUtFTgorCTB4MyBBTEwuT0tQUkVEX1RBS0VOCisJMHg0IElQUkVMLk1JU1BSRURfTk9UVEFLRU4KKwkweDUgSVBSRUwuTUlTUFJFRF9UQUtFTgorCTB4NiBJUFJFTC5PS1BSRURfTk9UVEFLRU4KKwkweDcgSVBSRUwuT0tQUkVEX1RBS0VOCisJMHg4IFJFVFVSTi5NSVNQUkVEX05PVFRBS0VOCisJMHg5IFJFVFVSTi5NSVNQUkVEX1RBS0VOCisJMHhhIFJFVFVSTi5PS1BSRURfTk9UVEFLRU4KKwkweGIgUkVUVVJOLk9LUFJFRF9UQUtFTgorCTB4YyBOUkVUSU5ELk1JU1BSRURfTk9UVEFLRU4KKwkweGQgTlJFVElORC5NSVNQUkVEX1RBS0VOCisJMHhlIE5SRVRJTkQuT0tQUkVEX05PVFRBS0VOCisJMHhmIE5SRVRJTkQuT0tQUkVEX1RBS0VOCisKKyMgQ1BVX0lBNjRfMiBUYWJsZSAxMS00OAorbmFtZTpicl9wYXRoX3ByZWQyIHR5cGU6ZXhjbHVzaXZlIGRlZmF1bHQ6MHgwMAorCTB4MCBBTEwuVU5LTk9XTlBSRURfTk9UVEFLRU4KKwkweDEgQUxMLlVOS05PV05QUkVEX1RBS0VOCisJMHg0IElQUkVMLlVOS05PV05QUkVEX05PVFRBS0VOCisJMHg1IElQUkVMLlVOS05PV05QUkVEX19UQUtFTgorCTB4OCBSRVRVUk4uVU5LTk9XTlBSRURfTk9UVEFLRU4KKwkweDkgUkVUVVJOLlVOS05PV05QUkVEX1RBS0VOCisJMHhjIE5SRVRJTkQuVU5LTk9XTlBSRURfTk9UVEFLRU4KKwkweGQgTlJFVElORC5VTktOT1dOUFJFRF9UQUtFTgorCisjIENQVV9JQTY0XzIgVGFibGUgMTEtNDksIDExLTUxLCAxMS01NSwgMTEtNTYsIDExLTU3LCAxMS01OAorbmFtZTpidXMgdHlwZTpleGNsdXNpdmUgZGVmYXVsdDoweDAzCisJMHgxIElPCisJMHgyIFNFTEYKKwkweDMgQU5ZCisKKyMgQ1BVX0lBNjRfMiBUYWJsZSAxMS01MCAgYjAwMDEKK25hbWU6YnVzX2JhY2tzbnBfcmVxIHR5cGU6bWFuZGF0b3J5IGRlZmF1bHQ6MHgwMQorCTB4MSAweDAKKworIyBDUFVfSUE2NF8yIFRhYmxlIDExLTUyCituYW1lOmJ1c19sb2NrIHR5cGU6ZXhjbHVzaXZlIGRlZmF1bHQ6MHgwMworCTB4MiBTRUxGCisJMHgzIEFOWQorCisjIENQVV9JQTY0XzIgVGFibGUgMTEtNTMKK25hbWU6YnVzX21lbW9yeSB0eXBlOmV4Y2x1c2l2ZSBkZWZhdWx0OjB4MGYKKwkweDUgRVFfMTI4QllURUlPCisJMHg2IEVRXzEyOEJZVEVfU0VMRgorCTB4NyBFUV8xMjhCWVRFX0FOWQorCTB4OSBMVF8xMjhCWVRFSU8KKwkweGEgTFRfMTI4QllURV9TRUxGCisJMHhiIExUXzEyOEJZVEVfQU5ZCisJMHhkIEFMTCBJTworCTB4ZSBBTEwgU0VMRgorCTB4ZiBBTEwgQU5ZCisKKyMgQ1BVX0lBNjRfMiBUYWJsZSAxMS01NAorbmFtZTpidXNfbWVtX3JlYWQgdHlwZTpleGNsdXNpdmUgZGVmYXVsdDoweDBmCisJMHgxIEJJTCBJTworCTB4MiBCSUwgU0VMRgorCTB4MyBCSUwgQU5ZCisJMHg1IEJSTCBJTworCTB4NiBCUkwgU0VMRgorCTB4NyBCUkxfQU5ZCisJMHg5IEJSSUwgSU8KKwkweGEgQlJJTCBTRUxGCisJMHhiIEJSSUwgQU5ZCisJMHhkIEFMTCBJTworCTB4ZSBBTEwgU0VMRgorCTB4ZiBBTEwgQU5ZCisKKyMgQ1BVX0lBNjRfMiBUYWJsZSAxMS01OSwgMTEtNjAKK25hbWU6YnVzX3Nub29wIHR5cGU6ZXhjbHVzaXZlIGRlZmF1bHQ6MHgwMworCTB4MiBTRUxGCisJMHgzIEFOWQorCisjIENQVV9JQTY0XzIgVGFibGUgMTEtNjEKK25hbWU6YnVzX3dyX3diIHR5cGU6ZXhjbHVzaXZlIGRlZmF1bHQ6MHgwZgorCTB4NSBFUV8xMjhCWVRFIElPCisJMHg2IEVRXzEyOEJZVEUgU0VMRgorCTB4NyBFUV8xMjhCWVRFIEFOWQorCTB4YSBDQ0FTVE9VVCBTRUxGCisJMHhiIENDQVNUT1VUIEFOWQorCTB4ZCBBTEwgSU8KKwkweGUgQUxMIFNFTEYKKwkweGYgQUxMIEFOWQorCisjIENQVV9JQTY0XzIgVGFibGUgMTEtNjIKK25hbWU6ZW5jYnJfbWlzcHJlZF9kZXRhaWwgdHlwZTpleGNsdXNpdmUgZGVmYXVsdDoweDAKKwkweDAgQUxMLkFMTF9QUkVECisJMHgxIEFMTC5DT1JSRUNUX1BSRUQKKwkweDIgQUxMLldST05HX1BBVEgKKwkweDMgQUxMLldST05HX1RBUkdFVAorCTB4OCBPVkVSU1VCLkFMTF9QUkVECisJMHg5IE9WRVJTVUIuQ09SUkVDVF9QUkVECisJMHhhIE9WRVJTVUIuQ09SUkVDVF9QUkVECisJMHhiIE9WRVJTVUIuV1JPTkdQQVRICisJMHhjIEFMTDIuQUxMX1BSRUQKKwkweGQgQUxMMi5DT1JSRUNUX1BSRUQKKwkweGUgQUxMMi5XUk9OR19QQVRICisJMHhmIEFMTDIuV1JPTkdfVEFSR0VUCisKKyMgQ1BVX0lBNjRfMiBUYWJsZSAxMS02MworbmFtZTpleHRlcm5fZHBfcGluc18wX3RvXzMgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHhmCisJMHgxIFBJTjAKKwkweDIgUElOMQorCTB4NCBQSU4yCisJMHg4IFBJTjMKKwkweGYgQUxMCisKKyMgQ1BVX0lBNjRfMiBUYWJsZSAxMS02NAorbmFtZTpleHRlcm5fZHBfcGluc180X3RvXzUgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwMworCTB4MSBQSU40CisJMHgyIFBJTjUKKwkweGYgQUxMCisKKyMgQ1BVX0lBNjRfMiBUYWJsZSAxMS02NQorbmFtZTpmZV9idWJibGUgdHlwZTpleGNsdXNpdmUgZGVmYXVsdDoweDAKKwkweDAgQUxMCisJMHgxIEZFRkxVU0gKKwkweDMgR1JPVVAxCisJMHg0IEdST1VQMgorCTB4NSBJQkZVTEwKKwkweDYgSU1JU1MKKwkweDcgVExCTUlTUworCTB4OCBGSUxMX1JFQ0lSQworCTB4OSBCUkFOQ0gKKwkweGEgR1JPVVAzCisJMHhiIEFMTEJVVF9GRUZMVVNIX0JVQkJMRQorCTB4YyBBTExCVVRfSUJGVUxMCisJMHhkIEJVQkJMRQorCisjIENQVV9JQTY0XzIgVGFibGUgMTEtNjYsIDExLTY5Ki8KK25hbWU6ZmVfbG9zdCB0eXBlOmV4Y2x1c2l2ZSBkZWZhdWx0OjB4MAorCTB4MCBBTEwKKwkweDEgRkVGTFVTSAorCTB4NCBVTlJFQUNIRUQKKwkweDUgSUJGVUxMCisJMHg2IElNSVNTCisJMHg3IFRMQk1JU1MKKwkweDggRklMTF9SRUNJUkMKKwkweDkgQkkKKwkweGEgQlJRCisJMHhiIFBMUAorCTB4YyBCUl9JTE9DSworCTB4ZCBCVUJCTEUKKworIyBDUFVfSUE2NF8yIFRhYmxlIDExLTY3LCAxMS03OSwgMTEtODYsIDExLTkwLCAxMS05MiBiMDAwMCAKKyMgRklYTUU6IGV2ZW50cyB1c2luZyB0aGlzIGlzIGNvbW1lbnRlZCBvdXQgaW4gZXZlbnRzCisjbmFtZTp0aGlzIHR5cGU6ZXhjbHVzaXZlIGRlZmF1bHQ6MHgwIAorIwkweDAgVEhJUworCisjIENQVV9JQTY0XzIgVGFibGUgMTEtNjgKK25hbWU6dGFnZ2VkX2luc3RfcmV0aXJlZCB0eXBlOmV4Y2x1c2l2ZSBkZWZhdWx0OjB4MCAKKwkweDAgSUJSUDBfUE1COAorCTB4MSBJQlJQMV9QTUI5CisJMHgyIElCUlAyX1BNQzgKKwkweDMgSUJSUDNfUE1DOQorCisjIENQVV9JQTY0XzIgVGFibGUgMTEtNzMKK25hbWU6aXRsYl9taXNzZXNfZmV0Y2ggdHlwZTpleGNsdXNpdmUgZGVmYXVsdDoweDMKKwkweDEgTDFJVExCCisJMHgyIEwySVRMQgorCTB4MyBBTEwKKworIyBDUFVfSUE2NF8yIFRhYmxlIDExLTc0CituYW1lOmwxZF9yZWFkX21pc3NlcyB0eXBlOmV4Y2x1c2l2ZSBkZWZhdWx0OjB4MAorCTB4MCBBTEwKKwkweDEgUlNFX0ZJTEwKKworIyBDUFVfSUE2NF8yIFRhYmxlIDExLTc1CituYW1lOmwxaV9wcmVmZXRjaF9zdGFsbCB0eXBlOmV4Y2x1c2l2ZSBkZWZhdWx0OjB4MworCTB4MiBGTE9XCisJMHgzIEFMTAorCisjIENQVV9JQTY0XzIgVGFibGUgMTEtNzYsIDExLTkxIGIwMDAwCisjIEZJWE1FOiBldmVudHMgdXNpbmcgdGhpcyBpcyBjb21tZW50ZWQgb3V0IGluIGV2ZW50cworI25hbWU6bDJfbGluZXMgdHlwZTpleGNsdXNpdmUgZGVmYXVsdDoweDAKKyMJMHgwIEFOWQorCisjIENQVV9JQTY0XzIgVGFibGUgMTEtNzcKK25hbWU6bDJfYnlwYXNzIHR5cGU6ZXhjbHVzaXZlIGRlZmF1bHQ6MHgwCisJMHgwIEwyX0RBVEExCisJMHgxIEwyX0RBVEEyCisJMHgyIEwzX0RBVEExCisJMHg0IEwyX0lOU1QxCisJMHg1IEwyX0lOU1QyCisJMHg2IEwzX0lOU1QxCisKKyMgQ1BVX0lBNjRfMiBUYWJsZSAxMS03OAorIyBGSVhNRTogZXZlbnRzIHVzaW5nIHRoaXMgaXMgY29tbWVudGVkIG91dCBpbiBldmVudHMKKyNuYW1lOmwyX2RhdGFfcmVmZXJlbmNlcyB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDMKKyMJMHgxIEwyX0RBVEFfUkVBRFMKKyMJMHgyIEwyX0RBVEFfV1JJVEVTCisjCTB4MyBMMl9BTEwKKworIyBDUFVfSUE2NF8yIFRhYmxlIDExLTgwCituYW1lOmwyX2ZvcmNlX3JlY2lyYyB0eXBlOmV4Y2x1c2l2ZSBkZWZhdWx0OjB4MAorCTB4MCBBTlkKKwkweDEgU01DX0hJVAorCTB4MiBMMVcKKwkweDQgVEFHX05PVE9LCisJMHg1IFRSQU5fUFJFRgorCTB4NiBTTlBfT1JfTDMgCisJMHg4IFZJQ19QRU5ECisJMHg5IEZJTExfSElUCisJMHhhIElQRl9NSVNTCisJMHhiIFZJQ19CVUZfRlVMTAorCTB4YyBPWlFfTUlTUworCTB4ZCBTQU1FX0lOREVYCisJMHhlIEZSQ19SRUNJUkMKKworIyBDUFVfSUE2NF8yIFRhYmxlIDExLTgxLCAxMS04MyBiMTAwMAorbmFtZTpyZWNpcmNfaWZldGNoIHR5cGU6bWFuZGF0b3J5IGRlZmF1bHQ6MHg4CisJMHg4IGRlZmF1bHQ6MHgwfSB9IH07CisKKyMgQ1BVX0lBNjRfMiBUYWJsZSAxMS04MgorbmFtZTpsMl9pZmV0X2NhbmNlbHMgdHlwZTpleGNsdXNpdmUgZGVmYXVsdDoweDAKKwkweDAgQU5ZCisJMHgyIEJZUEFTUworCTB4NCBESUROVF9SRUNJUgorCTB4NSBSRUNJUkNfT1ZFUl9TVUIKKwkweDYgU1RfRklMTF9XQgorCTB4NyBEQVRBX1JECisJMHg4IFBSRUVNUFQKKwkweGMgQ0hHX1BSSU8KKwkweGQgSUZFVENIX0JZUAorCisjIENQVV9JQTY0XzIgVGFibGUgMTEtODQKK25hbWU6bDJfbDNfYWNjZXNzX2NhbmNlbCB0eXBlOmV4Y2x1c2l2ZSBkZWZhdWx0OjB4OQorCTB4MSBTUEVDX0wzX0JZUAorCTB4MiBGSUxMRF9GVUxMCisJMHg1IFVDX0JMT0NLRUQKKwkweDYgSU5WX0wzX0JZUAorCTB4OCBFQkxfUkVKRUNUCisJMHg5IEFOWQorCTB4YSBERkVUQ0gKKwkweGIgSUZFVENICisKKyMgQ1BVX0lBNjRfMiBUYWJsZSAxMS04NQorbmFtZTpsMl9vcHNfaXNzdWVkIHR5cGU6ZXhjbHVzaXZlIGRlZmF1bHQ6MHg4CisJMHg4IElOVF9MT0FECisJMHg5IEZQX0xPQUQKKwkweGEgUk1XCisJMHhiIFNUT1JFCisJMHhjIE5TVF9OTEQKKworIyBDUFVfSUE2NF8yIFRhYmxlIDExLTg3CituYW1lOmwyX296cV9jYW5jZWxzMCB0eXBlOmV4Y2x1c2l2ZSBkZWZhdWx0OjB4MAorCTB4MCBBTlkKKwkweDEgTEFURV9TUEVDX0JZUAorCTB4MiBMQVRFX1JFTEVBU0UKKwkweDMgTEFURV9BQ1FVSVJFCisJMHg0IExBVEVfQllQX0VGRlJFTEVBU0UKKworIyBDUFVfSUE2NF8yIFRhYmxlIDExLTg4CituYW1lOmwyX296cV9jYW5jZWxzMSB0eXBlOmV4Y2x1c2l2ZSBkZWZhdWx0OjB4MQorCTB4MCBSRUwKKwkweDEgQkFOS19DT05GCisJMHgyIEwyRF9TVF9NQVQKKwkweDQgU1lOQworCTB4NSBIUFdfSUZFVENIX0NPTkYKKwkweDYgQ0FOQ19MMk1fU1QKKwkweDcgTDFfRklMTF9DT05GCisJMHg4IFNUX0ZJTExfQ09ORgorCTB4OSBDQ1YKKwkweGEgU0VNCisJMHhiIEwyTV9TVF9NQVQKKwkweGMgTUZBCisJMHhkIEwyQV9TVF9NQVQKKwkweGUgTDFERl9MMk0KKwkweGYgRUNDCisKKyMgQ1BVX0lBNjRfMiBUYWJsZSAxMS04OQorbmFtZTpsMl9venFfY2FuY2VsczIgdHlwZTpleGNsdXNpdmUgZGVmYXVsdDoweDAKKwkweDAgUkVDSVJDX09WRVJfU1VCCisJMHgxIENBTkNfTDJDX1NUCisJMHgyIEwyQ19TVF9NQVQKKwkweDMgU0NSVUIKKwkweDQgQUNRCisJMHg1IFJFQURfV0JfQ09ORgorCTB4NiBPWl9EQVRBX0NPTkYKKwkweDggTDJGSUxMX1NUX0NPTkYKKwkweDkgRElETlRfUkVDSVJDCisJMHhhIFdFSVJECisJMHhjIE9WRVJfU1VCCisJMHhkIENBTkNfTDJEX1NUCisJMHhmIERfSUZFVAorCisjIENQVV9JQTY0XzIgVGFibGUgMTEtOTMKK25hbWU6bDNfcmVhZHMgdHlwZTpleGNsdXNpdmUgZGVmYXVsdDoweDMKKwkweDEgRElOU1RfRkVUQ0guSElUCisJMHgyIERJTlNUX0ZFVENILk1JU1MKKwkweDMgRElOU1RfRkVUQ0guQUxMCisJMHg1IElOU1RfRkVUQ0guSElUCisJMHg2IElOU1RfRkVUQ0guTUlTUworCTB4NyBJTlNUX0ZFVENILkFMTAorCTB4OSBEQVRBX1JFQUQuSElUCisJMHhhIERBVEFfUkVBRC5NSVNTCisJMHhiIERBVEFfUkVBRC5BTEwKKwkweGQgQUxMLkhJVAorCTB4ZSBBTEwuTUlTUworCTB4ZiBBTEwuQUxMCisKKyMgQ1BVX0lBNjRfMiBUYWJsZSAxMS05NAorbmFtZTpsM193cml0ZXMgdHlwZTpleGNsdXNpdmUgZGVmYXVsdDoweDcKKwkweDUgREFUQV9XUklURS5ISVQKKwkweDYgREFUQV9XUklURS5NSVNTCisJMHg3IERBVEFfV1JJVEUuQUxMCisJMHg5IEwyX1dCLkhJVAorCTB4YSBMMl9XQi5NSVNTCisJMHhiIEwyX1dCLkFMTAorCTB4ZCBBTEwuSElUCisJMHhlIEFMTC5NSVNTCisJMHhmIEFMTC5BTEwKKworIyBDUFVfSUE2NF8yIFRhYmxlIDExLTk1CituYW1lOm1lbV9yZWFkX2N1cnJlbnQgdHlwZTpleGNsdXNpdmUgZGVmYXVsdDoweDMKKwkweDEgSU8KKwkweDMgQU5ZCisKKyMgQ1BVX0lBNjRfMiBUYWJsZSAxMS05NgorbmFtZTpyc2VfcmVmZXJlbmNlc19yZXRpcmVkIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MworCTB4MSBMT0FECisJMHgyIFNUT1JFCisJMHgzIEFMTAorCisjIENQVV9JQTY0XzIgVGFibGUgMTEtOTcgYml0bWFzaworbmFtZTpzeWxsX25vdF9kaXNwZXJzZWQgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHhmCisJMHgxIEVYUEwKKwkweDIgSU1QTAorCTB4NCBGRQorCTB4OCBNTEkKKwkweGYgQUxMCisKKyMgQ1BVX0lBNjRfMiBUYWJsZSAxMS05OAorbmFtZTpzeWxsX292ZXJjb3VudCB0eXBlOmV4Y2x1c2l2ZSBkZWZhdWx0OjB4MworCTB4MSBFWFBMCisJMHgyIElNUEwKKwkweDMgQUxMCmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9ldmVudHMvbWlwcy8xMDA0Sy9ldmVudHMgYi9vcHJvZmlsZS0wLjkuNy9ldmVudHMvbWlwcy8xMDA0Sy9ldmVudHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjk4Y2E4OQotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2V2ZW50cy9taXBzLzEwMDRLL2V2ZW50cwpAQCAtMCwwICsxLDE3MyBAQAorIworIyBNSVBTIDEwMDRLCisjCisKKyMgVGhlIDEwMDRLIENQVXMgaGF2ZSB0d28gcGVyZm9ybWFuY2UgY291bnRlcnMuCisjCisjIEV2ZW4vb2RkIGNvdW50ZXJzIGFyZSBkaXN0aW5ndWlzaGVkIGJ5IHNldHRpbmcgYml0IDEwIGluIHRoZSBldmVudAorIyBtYXNrLiBUaGUga2VybmVsIG1hc2tzIHRoaXMgYml0IG91dCBiZWZvcmUgd3JpdGluZyB0aGUgY29udHJvbAorIyByZWdpc3Rlci4KKworIworIyBFdmVudHMgc3BlY2lmaWMgdG8gYm90aCBjb3VudGVycworIworZXZlbnQ6MHgwIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6Q1lDTEVTIDogMC0wIEN5Y2xlcworZXZlbnQ6MHgxIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SU5TVFJVQ1RJT05TIDogMS0wIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjB4YiBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRDQUNIRV9NSVNTRVMgOiAxMS0wIERhdGEgY2FjaGUgbWlzc2VzCisKKyMKKyMgRXZlbnRzIHNwZWNpZmljIHRvIGNvdW50ZXIgMAorIworZXZlbnQ6MHgyIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkJSQU5DSF9JTlNOUyA6IDItMCBCcmFuY2ggaW5zdHJ1Y3Rpb25zICh3aGV0aGVyIGNvbXBsZXRlZCBvciBtaXNwcmVkaWN0ZWQpCitldmVudDoweDMgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SlJfMzFfSU5TTlMgOiAzLTAgSlIgJDMxIChyZXR1cm4pIGluc3RydWN0aW9ucyBleGVjdXRlZAorZXZlbnQ6MHg0IGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkpSX05PTl8zMV9JTlNOUyA6IDQtMCBKUiAkeHggKG5vdCAkMzEpIGluc3RydWN0aW9ucyBleGVjdXRlZCAoYXQgc2FtZSBjb3N0IGFzIGEgbWlzcHJlZGljdCkKK2V2ZW50OjB4NSBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJVExCX0FDQ0VTU0VTIDogNS0wIEluc3RydWN0aW9uIG1pY3JvLVRMQiBhY2Nlc3NlcworZXZlbnQ6MHg2IGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRUTEJfQUNDRVNTRVMgOiA2LTAgRGF0YSBtaWNyby1UTEIgYWNjZXNzZXMKK2V2ZW50OjB4NyBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpKVExCX0lOU05fQUNDRVNTRVMgOiA3LTAgSm9pbnQgVExCIGluc3RydWN0aW9uIGFjY2Vzc2VzCitldmVudDoweDggY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SlRMQl9EQVRBX0FDQ0VTU0VTIDogOC0wIEpvaW50IFRMQiBkYXRhIChub24taW5zdHJ1Y3Rpb24pIGFjY2Vzc2VzCitldmVudDoweDkgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SUNBQ0hFX0FDQ0VTU0VTIDogOS0wIEluc3RydWN0aW9uIGNhY2hlIGFjY2Vzc2VzCitldmVudDoweGEgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RENBQ0hFX0FDQ0VTU0VTIDogMTAtMCBEYXRhIGNhY2hlIGFjY2Vzc2VzCisKK2V2ZW50OjB4ZCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpTVE9SRV9NSVNTX0lOU05TIDogMTMtMCBDYWNoZWFibGUgc3RvcmVzIHRoYXQgbWlzcyBpbiB0aGUgY2FjaGUKK2V2ZW50OjB4ZSBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJTlRFR0VSX0lOU05TIDogMTQtMCBJbnRlZ2VyIGluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjB4ZiBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpMT0FEX0lOU05TIDogMTUtMCBMb2FkIGluc3RydWN0aW9ucyBjb21wbGV0ZWQgKGluY2x1ZGluZyBGUCkKK2V2ZW50OjB4MTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6Sl9KQUxfSU5TTlMgOiAxNi0wIEovSkFMIGluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjB4MTEgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6Tk9fT1BTX0lOU05TIDogMTctMCBuby1vcHMgY29tcGxldGVkLCBpZSBpbnN0cnVjdGlvbnMgd3JpdGluZyAkMAorZXZlbnQ6MHgxMiBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpBTExfU1RBTExTIDogMTgtMCBTdGFsbCBjeWNsZXMsIGluY2x1ZGluZyBBTFUgYW5kIElGVQorZXZlbnQ6MHgxMyBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpTQ19JTlNOUyA6IDE5LTAgU0MgaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MHgxNCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpQUkVGRVRDSF9JTlNOUyA6IDIwLTAgUFJFRkVUQ0ggaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MHgxNSBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpMMl9DQUNIRV9XUklURUJBQ0tTIDogMjEtMCBMMiBjYWNoZSBsaW5lcyB3cml0dGVuIGJhY2sgdG8gbWVtb3J5CitldmVudDoweDE2IGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkwyX0NBQ0hFX01JU1NFUyA6IDIyLTAgTDIgY2FjaGUgYWNjZXNzZXMgdGhhdCBtaXNzZWQgaW4gdGhlIGNhY2hlCitldmVudDoweDE3IGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkVYQ0VQVElPTlNfVEFLRU4gOiAyMy0wIEV4Y2VwdGlvbnMgdGFrZW4KK2V2ZW50OjB4MTggY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6Q0FDSEVfRklYVVBfQ1lDTEVTIDogMjQtMCBDYWNoZSBmaXh1cCBjeWNsZXMgKHNwZWNpZmljIHRvIHRoZSAzNEsgZmFtaWx5IG1pY3JvYXJjaGl0ZWN0dXJlKQorZXZlbnQ6MHgxOSBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJRlVfU1RBTExTIDogMjUtMCBJRlUgc3RhbGwgY3ljbGVzCitldmVudDoweDFhIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRTUF9JTlNOUyA6IDI2LTAgRFNQIGluc3RydWN0aW9ucyBjb21wbGV0ZWQKKworZXZlbnQ6MHgxYyBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpQT0xJQ1lfRVZFTlRTIDogMjgtMCBJbXBsZW1lbnRhdGlvbiBzcGVjaWZpYyBwb2xpY3kgbWFuYWdlciBldmVudHMKK2V2ZW50OjB4MWQgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SVNQUkFNX0VWRU5UUyA6IDI5LTAgSW1wbGVtZW50YXRpb24gc3BlY2lmaWMgSVNQUkFNIGV2ZW50cworZXZlbnQ6MHgxZSBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpDT1JFRVhURU5EX0VWRU5UUyA6IDMwLTAgSW1wbGVtZW50YXRpb24gc3BlY2lmaWMgQ29yRXh0ZW5kIGV2ZW50cworZXZlbnQ6MHgxZiBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpZSUVMRF9FVkVOVFMgOiAzMS0wIEltcGxlbWVudGF0aW9uIHNwZWNpZmljIHlpZWxkIGV2ZW50cworCitldmVudDoweDIwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOklUQ19MT0FEUyA6IDMyLTAgSVRDIExvYWRzCitldmVudDoweDIxIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlVOQ0FDSEVEX0xPQURfSU5TTlMgOiAzMy0wIFVuY2FjaGVkIGxvYWQgaW5zdHJ1Y3Rpb25zCitldmVudDoweDIyIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkZPUktfSU5TTlMgOiAzNC0wIEZvcmsgaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MHgyMyBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpDUDJfQVJJVEhfSU5TTlMgOiAzNS0wIENQMiBhcml0aG1ldGljIGluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjB4MjQgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SU5URVJWRU5USU9OX1NUQUxMUyA6IDM2LTAgQ2FjaGUgY29oZXJlbmNlIGludGVydmVudGlvbiBwcm9jZXNzaW5nIHN0YWxsIGN5Y2xlcworCisjCisjICBDb3VudCBudW1iZXIgb2YgY3ljbGVzIChtb3N0IG9mdGVuIGBgc3RhbGwgY3ljbGVzJycsIGllIHRpbWUgbG9zdCksIG5vdCBqdXN0IG51bWJlciBvZiBldmVudHMuCisjCitldmVudDoweDI1IGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOklDQUNIRV9NSVNTX1NUQUxMUyA6IDM3LTAgU3RhbGwgY3ljbGVzIGR1ZSB0byBhbiBpbnN0cnVjdGlvbiBjYWNoZSBtaXNzCisKK2V2ZW50OjB4MjcgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RENBQ0hFX01JU1NfQ1lDTEVTIDogMzktMCBDeWNsZXMgYSBkYXRhIGNhY2hlIG1pc3MgaXMgb3V0c3RhbmRpbmcsIGJ1dCBub3QgbmVjZXNzYXJpbHkgc3RhbGxpbmcgdGhlIHBpcGVsaW5lCitldmVudDoweDI4IGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlVOQ0FDSEVEX1NUQUxMUyA6IDQwLTAgVW5jYWNoZWQgc3RhbGwgY3ljbGVzCitldmVudDoweDI5IGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOk1EVV9TVEFMTFMgOiA0MS0wIE1EVSBzdGFsbCBjeWNsZXMKK2V2ZW50OjB4MmEgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6Q1AyX1NUQUxMUyA6IDQyLTAgQ1AyIHN0YWxsIGN5Y2xlcworZXZlbnQ6MHgyYiBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJU1BSQU1fU1RBTExTIDogNDMtMCBJU1BSQU0gc3RhbGwgY3ljbGVzCitldmVudDoweDJjIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkNBQ0hFX0lOU05fU1RBTExTIDogNDQtMCBTdGFsbCBjeWNsZXNzIGR1ZSB0byBDQUNIRSBpbnN0cnVjdGlvbnMKK2V2ZW50OjB4MmQgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6TE9BRF9VU0VfU1RBTExTIDogNDUtMCBMb2FkIHRvIHVzZSBzdGFsbCBjeWNsZXMKK2V2ZW50OjB4MmUgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SU5URVJMT0NLX1NUQUxMUyA6IDQ2LTAgU3RhbGwgY3ljbGVzIGR1ZSB0byByZXR1cm4gZGF0YSBmcm9tIE1GQzAsIFJESFdSLCBhbmQgTUZUUiBpbnN0cnVjdGlvbnMKK2V2ZW50OjB4MmYgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6UkVMQVhfU1RBTExTIDogNDctMCBMb3cgcG93ZXIgc3RhbGwgY3ljbGVzIChvcGVyYXRpb25zKSBhcyByZXF1ZXN0ZWQgYnkgdGhlIHBvbGljeSBtYW5hZ2VyCisKK2V2ZW50OjB4MzAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SUZVX0ZCX0ZVTExfUkVGRVRDSEVTIDogNDgtMCBSZWZldGNoZXMgZHVlIHRvIGNhY2hlIG1pc3NlcyB3aGlsZSBib3RoIGZpbGwgYnVmZmVycyBhbHJlYWR5IGFsbG9jYXRlZAorZXZlbnQ6MHgzMSBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpFSlRBR19JTlNOX1RSSUdHRVJTIDogNDktMCBFSlRBRyBpbnN0cnVjdGlvbiB0cmlnZ2VycG9pbnRzCisKKyMKKyMKKyMgIE1vbml0b3IgdGhlIHN0YXRlIG9mIHZhcmlvdXMgRklGTyBxdWV1ZXMgaW4gdGhlIGxvYWQvc3RvcmUgdW5pdDogCisjICBGU0IgKGBgZmlsbC9zdG9yZSBidWZmZXInJykKKyMgIExEUSAoYGBsb2FkIHF1ZXVlJycpCisjICBXQkIgKGBgd3JpdGUtYmFjayBidWZmZXInJykKKyMgIFNvbWUgY291bnQgZXZlbnRzLCBvdGhlcnMgY291bnQgc3RhbGwgY3ljbGVzLgorIworZXZlbnQ6MHgzMiBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpGU0JfTEVTU18yNV9GVUxMIDogNTAtMCBGU0IgPCAyNSUgZnVsbAorZXZlbnQ6MHgzMyBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpGU0JfT1ZFUl81MF9GVUxMIDogNTEtMCBGU0IgPiA1MCUgZnVsbAorZXZlbnQ6MHgzNCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpMRFFfTEVTU18yNV9GVUxMIDogNTItMCBMRFEgPCAyNSUgZnVsbAorZXZlbnQ6MHgzNSBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpMRFFfT1ZFUl81MF9GVUxMIDogNTMtMCBMRFEgPiA1MCUgZnVsbAorZXZlbnQ6MHgzNiBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpXQkJfTEVTU18yNV9GVUxMIDogNTQtMCBXQkIgPCAyNSUgZnVsbAorZXZlbnQ6MHgzNyBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpXQkJfT1ZFUl81MF9GVUxMIDogNTUtMCBXQkIgPiA1MCUgZnVsbAorCitldmVudDoweDM4IGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOklOVEVSVkVOVElPTl9ISVRfQ09VTlQgOiA1Ni0wIEV4dGVybmFsIGludGVydmVudGlvbnMgdGhhdCBoaXQgaW4gdGhlIGNhY2hlIAorZXZlbnQ6MHgzOSBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJTlZBTElEQVRFX0lOVEVSVkVOVElPTl9DT1VOVCA6IDU3LTAgRXh0ZXJuYWwgaW52YWxpZGF0ZSAoaS5lLiBsZWF2aW5nIGEgY2FjaGUgbGluZSBpbiB0aGUgaW52YWxpZCBzdGF0ZSkgaW50ZXJ2ZW50aW9ucworZXZlbnQ6MHgzYSBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpFVklDVElPTl9DT1VOVCA6IDU4LTAgICBDYWNoZSBsaW5lcyB3cml0dGVuIGJhY2sgZHVlIHRvIGNhY2hlIHJlcGxhY2VtZW50IG9yIG5vbi1jb2hlcmVudCBjYWNoZSBvcGVyYXRpb24KK2V2ZW50OjB4M2IgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6TUVTSV9JTlZBTF9DT1VOVCA6IDU5LTAgTUVTSSBwcm90b2NvbCB0cmFuc2l0aW9ucyBpbnRvIGludmFsaWQgc3RhdGUKK2V2ZW50OjB4M2MgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6TUVTSV9NT0RJRklFRF9DT1VOVCA6IDYwLTAgTUVTSSBwcm90b2NvbCB0cmFuc2l0aW9ucyBpbnRvIG1vZGlmaWVkIHN0YXRlCitldmVudDoweDNkIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlNFTEZfSU5URVJWRU5USU9OX0xBVEVOQ1kgOiA2MS0wIExhdGVuY3kgZnJvbSBtaXNzIGRldGVjdGlvbiB0byBzZWxmIGludGVydmVudGlvbgorZXZlbnQ6MHgzZSBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpSRUFEX1JFU1BPTlNFX0xBVEVOQ1kgOiA2Mi0wIFJlYWQgbGF0ZW5jeSBmcm9tIG1pc3MgZGV0ZWN0aW9uIHVudGlsIGNyaXRpY2FsIGR3b3JkIG9mIHJlc3BvbnNlIGlzIHJldHVybmVkCisKKyMKKyMgRXZlbnRzIHNwZWNpZmljIHRvIGNvdW50ZXIgMQorIworZXZlbnQ6MHg0MDIgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6TUlTUFJFRElDVEVEX0JSQU5DSF9JTlNOUyA6IDItMSBCcmFuY2ggbWlzcHJlZGljdGlvbnMKK2V2ZW50OjB4NDAzIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkpSXzMxX01JU1BSRURJQ1RJT05TIDogMy0xIEpSICQzMSBtaXNwcmVkaWN0aW9ucworZXZlbnQ6MHg0MDQgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SlJfMzFfTk9fUFJFRElDVElPTlMgOiA0LTEgSlIgJDMxIG5vdCBwcmVkaWN0ZWQgKHN0YWNrIG1pc21hdGNoKS4KK2V2ZW50OjB4NDA1IGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOklUTEJfTUlTU0VTIDogNS0xIEluc3RydWN0aW9uIG1pY3JvLVRMQiBtaXNzZXMKK2V2ZW50OjB4NDA2IGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRUTEJfTUlTU0VTIDogNi0xIERhdGEgbWljcm8tVExCIG1pc3NlcworZXZlbnQ6MHg0MDcgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SlRMQl9JTlNOX01JU1NFUyA6IDctMSBKb2ludCBUTEIgaW5zdHJ1Y3Rpb24gbWlzc2VzCitldmVudDoweDQwOCBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpKVExCX0RBVEFfTUlTU0VTIDogOC0xIEpvaW50IFRMQiBkYXRhIChub24taW5zdHJ1Y3Rpb24pIG1pc3NlcworZXZlbnQ6MHg0MDkgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SUNBQ0hFX01JU1NFUyA6IDktMSBJbnN0cnVjdGlvbiBjYWNoZSBtaXNzZXMKK2V2ZW50OjB4NDBhIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRDQUNIRV9XUklURUJBQ0tTIDogMTAtMSBEYXRhIGNhY2hlIGxpbmVzIHdyaXR0ZW4gYmFjayB0byBtZW1vcnkKKworZXZlbnQ6MHg0MGQgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6TE9BRF9NSVNTX0lOU05TIDogMTMtMSBDYWNoZWFibGUgbG9hZCBpbnN0cnVjdGlvbnMgdGhhdCBtaXNzIGluIHRoZSBjYWNoZQorZXZlbnQ6MHg0MGUgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RlBVX0lOU05TIDogMTQtMSBGUFUgaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZCAobm90IGluY2x1ZGluZyBsb2Fkcy9zdG9yZXMpCitldmVudDoweDQwZiBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpTVE9SRV9JTlNOUyA6IDE1LTEgU3RvcmVzIGNvbXBsZXRlZCAoaW5jbHVkaW5nIEZQKQorZXZlbnQ6MHg0MTAgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6TUlQUzE2X0lOU05TIDogMTYtMSBNSVBTMTYgaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MHg0MTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SU5UX01VTF9ESVZfSU5TTlMgOiAxNy0xIEludGVnZXIgbXVsdGlwbHkvZGl2aWRlIGluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjB4NDEyIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlJFUExBWUVEX0lOU05TIDogMTgtMSBSZXBsYXllZCBpbnN0cnVjdGlvbnMKK2V2ZW50OjB4NDEzIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlNDX0lOU05TX0ZBSUxFRCA6IDE5LTEgU0MgaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZCwgYnV0IHN0b3JlIGZhaWxlZCAoYmVjYXVzZSB0aGUgbGluayBiaXQgaGFkIGJlZW4gY2xlYXJlZCkKK2V2ZW50OjB4NDE0IGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkNBQ0hFX0hJVF9QUkVGRVRDSF9JTlNOUyA6IDIwLTEgUFJFRkVUQ0ggaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZCB3aXRoIGNhY2hlIGhpdAorZXZlbnQ6MHg0MTUgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6TDJfQ0FDSEVfQUNDRVNTRVMgOiAyMS0xIEFjY2Vzc2VzIHRvIHRoZSBMMiBjYWNoZQorZXZlbnQ6MHg0MTYgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6TDJfQ0FDSEVfU0lOR0xFX0JJVF9FUlJPUlMgOiAyMi0xIFNpbmdsZSBiaXQgZXJyb3JzIGNvcnJlY3RlZCBpbiBMMgorZXZlbnQ6MHg0MTcgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6U0lOR0xFX1RIUkVBREVEX0NZQ0xFUyA6IDIzLTEgQ3ljbGVzIHdoaWxlIG9uZSBhbmQgb25seSBvbmUgVEMgaXMgZWxpZ2libGUgZm9yIHNjaGVkdWxpbmcKK2V2ZW50OjB4NDE4IGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlJFRkVUQ0hFRF9JTlNOUyA6IDI0LTEgUmVwbGF5ZWQgaW5zdHJ1Y3Rpb25zIHNlbnQgYmFjayB0byBJRlUgdG8gYmUgcmVmZXRjaGVkCitldmVudDoweDQxOSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpBTFVfU1RBTExTIDogMjUtMSBBTFUgc3RhbGwgY3ljbGVzCitldmVudDoweDQxYSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpBTFVfRFNQX1NBVFVSQVRJT05fSU5TTlMgOiAyNi0xIEFMVS1EU1Agc2F0dXJhdGlvbiBpbnN0cnVjdGlvbnMKK2V2ZW50OjB4NDFiIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOk1EVV9EU1BfU0FUVVJBVElPTl9JTlNOUyA6IDI3LTEgTURVLURTUCBzYXR1cmF0aW9uIGluc3RydWN0aW9ucworCitldmVudDoweDQxYyBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpDUDJfRVZFTlRTIDogMjgtMSBJbXBsZW1lbnRhdGlvbiBzcGVjaWZpYyBDUDIgZXZlbnRzCitldmVudDoweDQxZCBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpEU1BSQU1fRVZFTlRTIDogMjktMSBJbXBsZW1lbnRhdGlvbiBzcGVjaWZpYyBEU1BSQU0gZXZlbnRzCisKK2V2ZW50OjB4NDFmIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOklUQ19FVkVOVCA6IDMxLTEgSW1wbGVtZW50YXRpb24gc3BlY2lmaWMgeWllbGQgZXZlbnQKKworZXZlbnQ6MHg0MjEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6VU5DQUNIRURfU1RPUkVfSU5TTlMgOiAzMy0xIFVuY2FjaGVkIHN0b3JlIGluc3RydWN0aW9ucworZXZlbnQ6MHg0MjMgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6Q1AyX1RPX0ZST01fSU5TTlMgOiAzNS0xIENQMiB0by9mcm9tIGluc3RydWN0aW9ucyAobW92ZXMsIGNvbnRyb2wsIGxvYWRzLCBzdG9yZXMpCitldmVudDoweDQyNCBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJTlRFUlZFTlRJT05fTUlTU19TVEFMTFMgOiAzNi0xIENhY2hlIGNvaGVyZW5jZSBpbnRlcnZlbnRpb24gcHJvY2Vzc2luZyBzdGFsbCBjeWNsZXMgZHVlIHRvIGFuIGVhcmxpZXIgbWlzcworCisjCisjICBDb3VudCBudW1iZXIgb2YgY3ljbGVzIChtb3N0IG9mdGVuIGBgc3RhbGwgY3ljbGVzJycsIGllIHRpbWUgbG9zdCksIG5vdCBqdXN0IG51bWJlciBvZiBldmVudHMuCisjCitldmVudDoweDQyNSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpEQ0FDSEVfTUlTU19TVEFMTFMgOiAzNy0xIFN0YWxsIGN5Y2xlcyBkdWUgdG8gYSBkYXRhIGNhY2hlIG1pc3MKK2V2ZW50OjB4NDI2IGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkZTQl9JTkRFWF9DT05GTElDVF9TVEFMTFMgOiAzOC0xIEZTQiAoZmlsbC9zdG9yZSBidWZmZXIpIGluZGV4IGNvbmZsaWN0IHN0YWxsIGN5Y2xlcworZXZlbnQ6MHg0MjcgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6TDJfQ0FDSEVfTUlTU19DWUNMRVMgOiAzOS0xIEN5Y2xlcyBhIEwyIG1pc3MgaXMgb3V0c3RhbmRpbmcsIGJ1dCBub3QgbmVjZXNzYXJpbHkgc3RhbGxpbmcgdGhlIHBpcGVsaW5lCitldmVudDoweDQyOCBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJVENfU1RBTExTIDogNDAtMSBJVEMgc3RhbGwgY3ljbGVzCitldmVudDoweDQyOSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpGUFVfU1RBTExTIDogNDEtMSBGUFUgc3RhbGwgY3ljbGVzCitldmVudDoweDQyYSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpDT1JFRVhURU5EX1NUQUxMUyA6IDQyLTEgQ29yRXh0ZW5kIHN0YWxsIGN5Y2xlcworZXZlbnQ6MHg0MmIgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RFNQUkFNX1NUQUxMUyA6IDQzLTEgRFNQUkFNIHN0YWxsIGN5Y2xlcworCitldmVudDoweDQyZCBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpBTFVfVE9fQUdFTl9TVEFMTFMgOiA0NS0xIEFMVSB0byBBR0VOIHN0YWxsIGN5Y2xlcworZXZlbnQ6MHg0MmUgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6TUlTUFJFRElDVElPTl9TVEFMTFMgOiA0Ni0xIEJyYW5jaCBtaXNwcmVkaWN0IHN0YWxsIGN5Y2xlcworCitldmVudDoweDQzMCBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpGQl9FTlRSWV9BTExPQ0FURURfQ1lDTEVTIDogNDgtMSBDeWNsZXMgd2hpbGUgYXQgbGVhc3Qgb25lIElGVSBmaWxsIGJ1ZmZlciBpcyBhbGxvY2F0ZWQKK2V2ZW50OjB4NDMxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkVKVEFHX0RBVEFfVFJJR0dFUlMgOiA0OS0xIEVKVEFHIERhdGEgdHJpZ2dlcnBvaW50cworCisjCisjICBNb25pdG9yIHRoZSBzdGF0ZSBvZiB2YXJpb3VzIEZJRk8gcXVldWVzIGluIHRoZSBsb2FkL3N0b3JlIHVuaXQ6IAorIyAgRlNCIChgYGZpbGwvc3RvcmUgYnVmZmVyJycpCisjICBMRFEgKGBgbG9hZCBxdWV1ZScnKQorIyAgV0JCIChgYHdyaXRlLWJhY2sgYnVmZmVyJycpCisjICBTb21lIGNvdW50IGV2ZW50cywgb3RoZXJzIGNvdW50IHN0YWxsIGN5Y2xlcy4KKyMKK2V2ZW50OjB4NDMyIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkZTQl8yNV81MF9GVUxMIDogNTAtMSBGU0IgMjUtNTAlIGZ1bGwKK2V2ZW50OjB4NDMzIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkZTQl9GVUxMX1NUQUxMUyA6IDUxLTEgRlNCIGZ1bGwgcGlwZWxpbmUgc3RhbGwgY3ljbGVzCitldmVudDoweDQzNCBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpMRFFfMjVfNTBfRlVMTCA6IDUyLTEgTERRIDI1LTUwJSBmdWxsCitldmVudDoweDQzNSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpMRFFfRlVMTF9TVEFMTFMgOiA1My0xIExEUSBmdWxsIHBpcGVsaW5lIHN0YWxsIGN5Y2xlcworZXZlbnQ6MHg0MzYgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6V0JCXzI1XzUwX0ZVTEwgOiA1NC0xIFdCQiAyNS01MCUgZnVsbAorZXZlbnQ6MHg0MzcgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6V0JCX0ZVTExfU1RBTExTIDogNTUtMSBXQkIgZnVsbCBwaXBlbGluZSBzdGFsbCBjeWNsZXMKKworZXZlbnQ6MHg0MzggY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SU5URVJWRU5USU9OX0NPVU5UIDogNTYtMSBFeHRlcm5hbCBpbnRlcnZlbnRpb25zCitldmVudDoweDQzOSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJTlZBTElEQVRFX0lOVEVSVkVOVElPTl9ISVRfQ09VTlQgOiA1Ny0xIEV4dGVybmFsIGludmFsaWRhdGUgaW50ZXJ2ZW50aW9ucyB0aGF0IGhpdCBpbiB0aGUgY2FjaGUKK2V2ZW50OjB4NDNhIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOldSSVRFQkFDS19DT1VOVCA6IDU4LTEgQ2FjaGUgbGluZXMgd3JpdHRlbiBiYWNrIGR1ZSB0byBjYWNoZSByZXBsYWNlbWVudCBvciBhbnkgY2FjaGUgb3BlcmF0aW9uIChub24tY29oZXJlbnQsIHNlbGYsIG9yIGV4dGVybmFsIGNvaGVyZW50KQorZXZlbnQ6MHg0M2IgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6TUVTSV9FWENMVVNJVkVfQ09VTlQgOiA1OS0xIE1FU0kgcHJvdG9jb2wgdHJhbnNpdGlvbnMgaW50byBleGNsdXNpdmUgc3RhdGUKK2V2ZW50OjB4NDNjIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOk1FU0lfU0hBUkVEX0NPVU5UIDogNjAtMSBNRVNJIHByb3RvY29sIHRyYW5zaXRpb25zIGludG8gc2hhcmVkIHN0YXRlCitldmVudDoweDQzZCBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpTRUxGX0lOVEVSVkVOVElPTl9DT1VOVCA6IDYxLTEgU2VsZiBpbnRlcnZlbnRpb24gcmVxdWVzdHMgb24gbWlzcyBkZXRlY3Rpb24KK2V2ZW50OjB4NDNlIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlJFQURfUkVTUE9OU0VfQ09VTlQgOiA2Mi0xIFJlYWQgcmVxdWVzdHMgb24gbWlzcyBkZXRlY3Rpb24KZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2V2ZW50cy9taXBzLzEwMDRLL3VuaXRfbWFza3MgYi9vcHJvZmlsZS0wLjkuNy9ldmVudHMvbWlwcy8xMDA0Sy91bml0X21hc2tzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiYmEwZjkKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9ldmVudHMvbWlwcy8xMDA0Sy91bml0X21hc2tzCkBAIC0wLDAgKzEsNSBAQAorIworIyBNSVBTIDEwMDRLIHBvc3NpYmxlIHVuaXQgbWFza3MKKyMKK25hbWU6emVybyB0eXBlOm1hbmRhdG9yeSBkZWZhdWx0OjB4MAorCTB4MCBObyB1bml0IG1hc2sKZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2V2ZW50cy9taXBzLzIwSy9ldmVudHMgYi9vcHJvZmlsZS0wLjkuNy9ldmVudHMvbWlwcy8yMEsvZXZlbnRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1NDI4ZTkKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9ldmVudHMvbWlwcy8yMEsvZXZlbnRzCkBAIC0wLDAgKzEsMjEgQEAKKyMKKyMgTUlQUyAyMEsKKyMKKyMgVGhlIDIwSyBzdXBwb3J0cyBvbmx5IG9uZSBwZXJmb3JtYW5jZSBjb3VudGVyLgorIworZXZlbnQ6MHgwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkNZQ0xFUyA6IENQVSBjeWNsZXMKK2V2ZW50OjB4MSBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJTlNOX0lTU1VFRCA6IERpc3BhdGNoZWQvaXNzdWVkIGluc3RydWN0aW9ucworZXZlbnQ6MHgyIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkZFVENIX0dST1VQUyA6IEZldGNoIGdyb3VwcyBlbnRlcmluZyBDUFUgZXhlY3V0aW9uIHBpcGVzCitldmVudDoweDMgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RlBfSU5TTlNfQ09NUExFVEVEIDogSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZCBpbiBGUFUgZGF0YXBhdGggKGNvbXB1dGF0aW9uYWwgZXZlbnQ6aW5zdHJ1Y3Rpb25zIG9ubHkpCitldmVudDoweDQgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6VExCX1JFRklMTFNfVEFLRU4gOiBUYWtlbiBUTEIgcmVmaWxsIGV4Y2VwdGlvbnMKK2V2ZW50OjB4NSBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpCUkFOQ0hFU19NSVNTUFJFRElDVEVEIDogQnJhbmNoZXMgdGhhdCBtaXNwcmVkaWN0ZWQgYmVmb3JlIGNvbXBsZXRpbmcgZXhlY3V0aW9uCitldmVudDoweDYgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QlJBTkNIRVNfQ09NUExFVEVEIDogQnJhbmNoZXMgdGhhdCBjb21wbGV0ZWQgZXhlY3V0aW9uCitldmVudDoweDcgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SlRMQl9FWENFUFRJT05TIDogVGFrZW4gSm9pbnQtVExCIGV4Y2VwdGlvbnMKK2V2ZW50OjB4OCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpSRVBMQVlfRFVFX1RPX0xPQURfREVQRU5ERU5UX1NQRUNfRElTUEFUQ0ggOiBSZXBsYXlzIGR1ZSB0byBsb2FkLWRlcGVuZGVudCBzcGVjdWxhdGl2ZSBkaXNwYXRjaAorZXZlbnQ6MHg5IGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOklOU05fUkVRX0ZST01fSUZVX1RPX0JJVSA6IEluc3RydWN0aW9uIHJlcXVlc3RzIGZyb20gdGhlIElGVSB0byB0aGUgQklVCitldmVudDoweGEgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RlBVX0VYQ0VQVElPTlNfVEFLRU4gOiBUYWtlbiBGUFUgZXhjZXB0aW9ucworZXZlbnQ6MHhiIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlJFUExBWVMgOiBUb3RhbCBudW1iZXIgb2YgTFNVIHJlcXVlc3RlZCByZXBsYXlzLCBMb2FkLWRlcGVuZGVudCBzcGVjdWxhdGl2ZSBkaXNwYXRjaCBvciBGUFUgZXhjZXB0aW9uIHByZWRpY3Rpb24gcmVwbGF5cy4KK2V2ZW50OjB4YyBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpSUFNfTUlTU1BSRURJQ1RTIDogSlIgaW5zdHJ1Y3Rpb25zIHRoYXQgbWlzcHJlZGljdGVkIHVzaW5nIHRoZSBSZXR1cm4gUHJlZGljdGlvbiBTdGFjayAoUlBTKQorZXZlbnQ6MHhkIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkpSX0lOU05TX0NPTVBMRVRFRCA6IEpSIGluc3RydWN0aW9uIHRoYXQgY29tcGxldGVkIGV4ZWN1dGlvbgorZXZlbnQ6MHhlIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkxTVV9SRVBMQVlTIDogTFNVIHJlcXVlc3RlZCByZXBsYXlzCitldmVudDoweGYgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SU5TTlNfQ09NUExFVEVEIDogSW5zdHJ1Y3Rpb24gdGhhdCBjb21wbGV0ZWQgZXhlY3V0aW9uICh3aXRoIG9yIHdpdGhvdXQgZXhjZXB0aW9uKQpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL21pcHMvMjBLL3VuaXRfbWFza3MgYi9vcHJvZmlsZS0wLjkuNy9ldmVudHMvbWlwcy8yMEsvdW5pdF9tYXNrcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTcxYTZiCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL21pcHMvMjBLL3VuaXRfbWFza3MKQEAgLTAsMCArMSw1IEBACisjCisjIE1JUFMgMjBLYyBwb3NzaWJsZSB1bml0IG1hc2tzCisjCituYW1lOnplcm8gdHlwZTptYW5kYXRvcnkgZGVmYXVsdDoweDAKKwkweDAgTm8gdW5pdCBtYXNrCmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9ldmVudHMvbWlwcy8yNEsvZXZlbnRzIGIvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL21pcHMvMjRLL2V2ZW50cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OGIwZTE3Ci0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL21pcHMvMjRLL2V2ZW50cwpAQCAtMCwwICsxLDE0NCBAQAorIworIyBNSVBTIDI0SworIworCisjIFRoZSAyNEsgQ1BVcyBoYXZlIHR3byBwZXJmb3JtYW5jZSBjb3VudGVycy4KKyMKKyMgRXZlbi9vZGQgY291bnRlcnMgYXJlIGRpc3Rpbmd1aXNoZWQgYnkgc2V0dGluZyBiaXQgMTAgaW4gdGhlIGV2ZW50CisjIG1hc2suIFRoZSBrZXJuZWwgbWFza3MgdGhpcyBiaXQgb3V0IGJlZm9yZSB3cml0aW5nIHRoZSBjb250cm9sCisjIHJlZ2lzdGVyLgorCisjCisjIEV2ZW50cyBzcGVjaWZpYyB0byBib3RoIGNvdW50ZXJzCisjCitldmVudDoweDAgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpDWUNMRVMgOiAwLTAgQ3ljbGVzCitldmVudDoweDEgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJTlNUUlVDVElPTlMgOiAxLTAgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MHhiIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RENBQ0hFX01JU1NFUyA6IDExLTAgRGF0YSBjYWNoZSBtaXNzZXMKKworIworIyBFdmVudHMgc3BlY2lmaWMgdG8gY291bnRlciAwCisjCitldmVudDoweDIgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QlJBTkNIX0lOU05TIDogMi0wIEJyYW5jaCBpbnN0cnVjdGlvbnMgKHdoZXRoZXIgY29tcGxldGVkIG9yIG1pc3ByZWRpY3RlZCkKK2V2ZW50OjB4MyBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpKUl8zMV9JTlNOUyA6IDMtMCBKUiAkMzEgKHJldHVybikgaW5zdHJ1Y3Rpb25zIGV4ZWN1dGVkCitldmVudDoweDQgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SlJfTk9OXzMxX0lOU05TIDogNC0wIEpSICR4eCAobm90ICQzMSkgaW5zdHJ1Y3Rpb25zIGV4ZWN1dGVkIChhdCBzYW1lIGNvc3QgYXMgYSBtaXNwcmVkaWN0KQorZXZlbnQ6MHg1IGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOklUTEJfQUNDRVNTRVMgOiA1LTAgSW5zdHJ1Y3Rpb24gbWljcm8tVExCIGFjY2Vzc2VzCitldmVudDoweDYgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RFRMQl9BQ0NFU1NFUyA6IDYtMCBEYXRhIG1pY3JvLVRMQiBhY2Nlc3NlcworZXZlbnQ6MHg3IGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkpUTEJfSU5TTl9BQ0NFU1NFUyA6IDctMCBKb2ludCBUTEIgaW5zdHJ1Y3Rpb24gYWNjZXNzZXMKK2V2ZW50OjB4OCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpKVExCX0RBVEFfQUNDRVNTRVMgOiA4LTAgSm9pbnQgVExCIGRhdGEgKG5vbi1pbnN0cnVjdGlvbikgYWNjZXNzZXMKK2V2ZW50OjB4OSBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJQ0FDSEVfQUNDRVNTRVMgOiA5LTAgSW5zdHJ1Y3Rpb24gY2FjaGUgYWNjZXNzZXMKK2V2ZW50OjB4YSBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpEQ0FDSEVfQUNDRVNTRVMgOiAxMC0wIERhdGEgY2FjaGUgYWNjZXNzZXMKKworZXZlbnQ6MHhkIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlNUT1JFX01JU1NfSU5TTlMgOiAxMy0wIENhY2hlYWJsZSBzdG9yZXMgdGhhdCBtaXNzIGluIHRoZSBjYWNoZQorZXZlbnQ6MHhlIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOklOVEVHRVJfSU5TTlMgOiAxNC0wIEludGVnZXIgaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MHhmIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkxPQURfSU5TTlMgOiAxNS0wIExvYWQgaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZCAoaW5jbHVkaW5nIEZQKQorZXZlbnQ6MHgxMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpKX0pBTF9JTlNOUyA6IDE2LTAgSi9KQUwgaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MHgxMSBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpOT19PUFNfSU5TTlMgOiAxNy0wIG5vLW9wcyBjb21wbGV0ZWQsIGllIGluc3RydWN0aW9ucyB3cml0aW5nICQwCitldmVudDoweDEyIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkFMTF9TVEFMTFMgOiAxOC0wIFN0YWxsIGN5Y2xlcywgaW5jbHVkaW5nIEFMVSBhbmQgSUZVCitldmVudDoweDEzIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlNDX0lOU05TIDogMTktMCBTQyBpbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDoweDE0IGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlBSRUZFVENIX0lOU05TIDogMjAtMCBQUkVGRVRDSCBpbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDoweDE1IGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkwyX0NBQ0hFX1dSSVRFQkFDS1MgOiAyMS0wIEwyIGNhY2hlIGxpbmVzIHdyaXR0ZW4gYmFjayB0byBtZW1vcnkKK2V2ZW50OjB4MTYgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6TDJfQ0FDSEVfTUlTU0VTIDogMjItMCBMMiBjYWNoZSBhY2Nlc3NlcyB0aGF0IG1pc3NlZCBpbiB0aGUgY2FjaGUKK2V2ZW50OjB4MTcgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RVhDRVBUSU9OU19UQUtFTiA6IDIzLTAgRXhjZXB0aW9ucyB0YWtlbgorZXZlbnQ6MHgxOCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpDQUNIRV9GSVhVUF9DWUNMRVMgOiAyNC0wIENhY2hlIGZpeHVwIGN5Y2xlcyAoc3BlY2lmaWMgdG8gdGhlIDI0SyBmYW1pbHkgbWljcm9hcmNoaXRlY3R1cmUpCitldmVudDoweDE5IGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOklGVV9TVEFMTFMgOiAyNS0wIElGVSBzdGFsbCBjeWNsZXMKK2V2ZW50OjB4MWEgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RFNQX0lOU05TIDogMjYtMCBEU1AgaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorCitldmVudDoweDFkIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOklTUFJBTV9FVkVOVFMgOiAyOS0wIEltcGxlbWVudGF0aW9uIHNwZWNpZmljIElTUFJBTSBldmVudHMKK2V2ZW50OjB4MWUgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6Q09SRUVYVEVORF9FVkVOVFMgOiAzMC0wIEltcGxlbWVudGF0aW9uIHNwZWNpZmljIENvckV4dGVuZCBldmVudHMKKworZXZlbnQ6MHgyMSBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpVTkNBQ0hFRF9MT0FEX0lOU05TIDogMzMtMCBVbmNhY2hlZCBsb2FkIGluc3RydWN0aW9ucworZXZlbnQ6MHgyMyBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpDUDJfQVJJVEhfSU5TTlMgOiAzNS0wIENQMiBhcml0aG1ldGljIGluc3RydWN0aW9ucyBjb21wbGV0ZWQKKworIworIyAgQ291bnQgbnVtYmVyIG9mIGN5Y2xlcyAobW9zdCBvZnRlbiBgYHN0YWxsIGN5Y2xlcycnLCBpZSB0aW1lIGxvc3QpLCBub3QganVzdCBudW1iZXIgb2YgZXZlbnRzLgorIworZXZlbnQ6MHgyNSBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJQ0FDSEVfTUlTU19TVEFMTFMgOiAzNy0wIFN0YWxsIGN5Y2xlcyBkdWUgdG8gYW4gaW5zdHJ1Y3Rpb24gY2FjaGUgbWlzcworZXZlbnQ6MHgyNiBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpTWU5DX1NUQUxMUyA6IDM4LTAgU1lOQyBzdGFsbCBjeWNsZXMKK2V2ZW50OjB4MjcgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RENBQ0hFX01JU1NfQ1lDTEVTIDogMzktMCBDeWNsZXMgYSBkYXRhIGNhY2hlIG1pc3MgaXMgb3V0c3RhbmRpbmcsIGJ1dCBub3QgbmVjZXNzYXJpbHkgc3RhbGxpbmcgdGhlIHBpcGVsaW5lCitldmVudDoweDI4IGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlVOQ0FDSEVEX1NUQUxMUyA6IDQwLTAgVW5jYWNoZWQgc3RhbGwgY3ljbGVzCitldmVudDoweDI5IGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOk1EVV9TVEFMTFMgOiA0MS0wIE1EVSBzdGFsbCBjeWNsZXMKK2V2ZW50OjB4MmEgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6Q1AyX1NUQUxMUyA6IDQyLTAgQ1AyIHN0YWxsIGN5Y2xlcworZXZlbnQ6MHgyYiBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJU1BSQU1fU1RBTExTIDogNDMtMCBJU1BSQU0gc3RhbGwgY3ljbGVzCitldmVudDoweDJjIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkNBQ0hFX0lOU05fU1RBTExTIDogNDQtMCBTdGFsbCBjeWNsZXNzIGR1ZSB0byBDQUNIRSBpbnN0cnVjdGlvbnMKK2V2ZW50OjB4MmQgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6TE9BRF9VU0VfU1RBTExTIDogNDUtMCBMb2FkIHRvIHVzZSBzdGFsbCBjeWNsZXMKK2V2ZW50OjB4MmUgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SU5URVJMT0NLX1NUQUxMUyA6IDQ2LTAgU3RhbGwgY3ljbGVzIGR1ZSB0byByZXR1cm4gZGF0YSBmcm9tIE1GQzAgYW5kIFJESFdSIGluc3RydWN0aW9ucworCitldmVudDoweDMwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOklGVV9GQl9GVUxMX1JFRkVUQ0hFUyA6IDQ4LTAgUmVmZXRjaGVzIGR1ZSB0byBjYWNoZSBtaXNzZXMgd2hpbGUgYm90aCBmaWxsIGJ1ZmZlcnMgYWxyZWFkeSBhbGxvY2F0ZWQKK2V2ZW50OjB4MzEgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RUpUQUdfSU5TTl9UUklHR0VSUyA6IDQ5LTAgRUpUQUcgaW5zdHJ1Y3Rpb24gdHJpZ2dlcnBvaW50cworCisjCisjCisjICBNb25pdG9yIHRoZSBzdGF0ZSBvZiB2YXJpb3VzIEZJRk8gcXVldWVzIGluIHRoZSBsb2FkL3N0b3JlIHVuaXQ6IAorIyAgRlNCIChgYGZpbGwvc3RvcmUgYnVmZmVyJycpCisjICBMRFEgKGBgbG9hZCBxdWV1ZScnKQorIyAgV0JCIChgYHdyaXRlLWJhY2sgYnVmZmVyJycpCisjCitldmVudDoweDMyIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkZTQl9MRVNTXzI1X0ZVTEwgOiA1MC0wIEZTQiA8IDI1JSBmdWxsCitldmVudDoweDMzIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkZTQl9PVkVSXzUwX0ZVTEwgOiA1MS0wIEZTQiA+IDUwJSBmdWxsCitldmVudDoweDM0IGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkxEUV9MRVNTXzI1X0ZVTEwgOiA1Mi0wIExEUSA8IDI1JSBmdWxsCitldmVudDoweDM1IGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkxEUV9PVkVSXzUwX0ZVTEwgOiA1My0wIExEUSA+IDUwJSBmdWxsCitldmVudDoweDM2IGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOldCQl9MRVNTXzI1X0ZVTEwgOiA1NC0wIFdCQiA8IDI1JSBmdWxsCitldmVudDoweDM3IGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOldCQl9PVkVSXzUwX0ZVTEwgOiA1NS0wIFdCQiA+IDUwJSBmdWxsCisKKyMKKyMgRXZlbnRzIHNwZWNpZmljIHRvIGNvdW50ZXIgMQorIworZXZlbnQ6MHg0MDIgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6TUlTUFJFRElDVEVEX0JSQU5DSF9JTlNOUyA6IDItMSBCcmFuY2ggbWlzcHJlZGljdGlvbnMKK2V2ZW50OjB4NDAzIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkpSXzMxX01JU1BSRURJQ1RJT05TIDogMy0xIEpSICQzMSBtaXNwcmVkaWN0aW9ucworZXZlbnQ6MHg0MDQgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SlJfMzFfTk9fUFJFRElDVElPTlMgOiA0LTEgSlIgJDMxIG5vdCBwcmVkaWN0ZWQgKHN0YWNrIG1pc21hdGNoKS4KK2V2ZW50OjB4NDA1IGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOklUTEJfTUlTU0VTIDogNS0xIEluc3RydWN0aW9uIG1pY3JvLVRMQiBtaXNzZXMKK2V2ZW50OjB4NDA2IGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRUTEJfTUlTU0VTIDogNi0xIERhdGEgbWljcm8tVExCIG1pc3NlcworZXZlbnQ6MHg0MDcgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SlRMQl9JTlNOX01JU1NFUyA6IDctMSBKb2ludCBUTEIgaW5zdHJ1Y3Rpb24gbWlzc2VzCitldmVudDoweDQwOCBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpKVExCX0RBVEFfTUlTU0VTIDogOC0xIEpvaW50IFRMQiBkYXRhIChub24taW5zdHJ1Y3Rpb24pIG1pc3NlcworZXZlbnQ6MHg0MDkgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SUNBQ0hFX01JU1NFUyA6IDktMSBJbnN0cnVjdGlvbiBjYWNoZSBtaXNzZXMKK2V2ZW50OjB4NDBhIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRDQUNIRV9XUklURUJBQ0tTIDogMTAtMSBEYXRhIGNhY2hlIGxpbmVzIHdyaXR0ZW4gYmFjayB0byBtZW1vcnkKK2V2ZW50OjB4NDBkIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkxPQURfTUlTU19JTlNOUyA6IDEzLTEgQ2FjaGVhYmxlIGxvYWQgaW5zdHJ1Y3Rpb25zIHRoYXQgbWlzcyBpbiB0aGUgY2FjaGUKK2V2ZW50OjB4NDBlIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkZQVV9JTlNOUyA6IDE0LTEgRlBVIGluc3RydWN0aW9ucyBjb21wbGV0ZWQgKG5vdCBpbmNsdWRpbmcgbG9hZHMvc3RvcmVzKQorZXZlbnQ6MHg0MGYgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6U1RPUkVfSU5TTlMgOiAxNS0xIFN0b3JlcyBjb21wbGV0ZWQgKGluY2x1ZGluZyBGUCkKK2V2ZW50OjB4NDEwIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOk1JUFMxNl9JTlNOUyA6IDE2LTEgTUlQUzE2IGluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjB4NDExIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOklOVF9NVUxfRElWX0lOU05TIDogMTctMSBJbnRlZ2VyIG11bHRpcGx5L2RpdmlkZSBpbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDoweDQxMiBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpSRVBMQVlFRF9JTlNOUyA6IDE4LTEgUmVwbGF5ZWQgaW5zdHJ1Y3Rpb25zCitldmVudDoweDQxMyBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpTQ19JTlNOU19GQUlMRUQgOiAxOS0xIFNDIGluc3RydWN0aW9ucyBjb21wbGV0ZWQsIGJ1dCBzdG9yZSBmYWlsZWQgKGJlY2F1c2UgdGhlIGxpbmsgYml0IGhhZCBiZWVuIGNsZWFyZWQpCitldmVudDoweDQxNCBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpDQUNIRV9ISVRfUFJFRkVUQ0hfSU5TTlMgOiAyMC0xIFBSRUZFVENIIGluc3RydWN0aW9ucyBjb21wbGV0ZWQgd2l0aCBjYWNoZSBoaXQKK2V2ZW50OjB4NDE1IGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkwyX0NBQ0hFX0FDQ0VTU0VTIDogMjEtMSBBY2Nlc3NlcyB0byB0aGUgTDIgY2FjaGUKK2V2ZW50OjB4NDE2IGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkwyX0NBQ0hFX1NJTkdMRV9CSVRfRVJST1JTIDogMjItMSBTaW5nbGUgYml0IGVycm9ycyBjb3JyZWN0ZWQgaW4gTDIKKworZXZlbnQ6MHg0MTkgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QUxVX1NUQUxMUyA6IDI1LTEgQUxVIHN0YWxsIGN5Y2xlcworZXZlbnQ6MHg0MWEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QUxVX0RTUF9TQVRVUkFUSU9OX0lOU05TIDogMjYtMSBBTFUtRFNQIHNhdHVyYXRpb24gaW5zdHJ1Y3Rpb25zCitldmVudDoweDQxYiBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpNRFVfRFNQX1NBVFVSQVRJT05fSU5TTlMgOiAyNy0xIE1EVS1EU1Agc2F0dXJhdGlvbiBpbnN0cnVjdGlvbnMKKworZXZlbnQ6MHg0MWMgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6Q1AyX0VWRU5UUyA6IDI4LTEgSW1wbGVtZW50YXRpb24gc3BlY2lmaWMgQ1AyIGV2ZW50cworZXZlbnQ6MHg0MWQgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RFNQUkFNX0VWRU5UUyA6IDI5LTEgSW1wbGVtZW50YXRpb24gc3BlY2lmaWMgRFNQUkFNIGV2ZW50cworCitldmVudDoweDQyMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpVTkNBQ0hFRF9TVE9SRV9JTlNOUyA6IDMzLTEgVW5jYWNoZWQgc3RvcmUgaW5zdHJ1Y3Rpb25zCitldmVudDoweDQyMyBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpDUDJfVE9fRlJPTV9JTlNOUyA6IDM1LTEgQ1AyIHRvL2Zyb20gaW5zdHJ1Y3Rpb25zIChtb3ZlcywgY29udHJvbCwgbG9hZHMsIHN0b3JlcykKKworIworIyAgQ291bnQgbnVtYmVyIG9mIGN5Y2xlcyAobW9zdCBvZnRlbiBgYHN0YWxsIGN5Y2xlcycnLCBpZSB0aW1lIGxvc3QpLCBub3QganVzdCBudW1iZXIgb2YgZXZlbnRzLgorIworZXZlbnQ6MHg0MjUgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RENBQ0hFX01JU1NfU1RBTExTIDogMzctMSBTdGFsbCBjeWNsZXMgZHVlIHRvIGEgZGF0YSBjYWNoZSBtaXNzCitldmVudDoweDQyNiBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpGU0JfSU5ERVhfQ09ORkxJQ1RfU1RBTExTIDogMzgtMSBGU0IgKGZpbGwvc3RvcmUgYnVmZmVyKSBpbmRleCBjb25mbGljdCBzdGFsbCBjeWNsZXMKK2V2ZW50OjB4NDI3IGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkwyX0NBQ0hFX01JU1NfQ1lDTEVTIDogMzktMSBDeWNsZXMgYSBMMiBtaXNzIGlzIG91dHN0YW5kaW5nLCBidXQgbm90IG5lY2Vzc2FyaWx5IHN0YWxsaW5nIHRoZSBwaXBlbGluZQorZXZlbnQ6MHg0MjkgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RlBVX1NUQUxMUyA6IDQxLTEgRlBVIHN0YWxsIGN5Y2xlcworZXZlbnQ6MHg0MmEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6Q09SRUVYVEVORF9TVEFMTFMgOiA0Mi0xIENvckV4dGVuZCBzdGFsbCBjeWNsZXMKK2V2ZW50OjB4NDJiIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRTUFJBTV9TVEFMTFMgOiA0My0xIERTUFJBTSBzdGFsbCBjeWNsZXMKKworZXZlbnQ6MHg0MmQgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QUxVX1RPX0FHRU5fU1RBTExTIDogNDUtMSBBTFUgdG8gQUdFTiBzdGFsbCBjeWNsZXMKK2V2ZW50OjB4NDJlIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOk1JU1BSRURJQ1RJT05fU1RBTExTIDogNDYtMSBCcmFuY2ggbWlzcHJlZGljdCBzdGFsbCBjeWNsZXMKKworZXZlbnQ6MHg0MzAgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RkJfRU5UUllfQUxMT0NBVEVEX0NZQ0xFUyA6IDQ4LTEgQ3ljbGVzIHdoaWxlIGF0IGxlYXN0IG9uZSBJRlUgZmlsbCBidWZmZXIgaXMgYWxsb2NhdGVkCitldmVudDoweDQzMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpFSlRBR19EQVRBX1RSSUdHRVJTIDogNDktMSBFSlRBRyBEYXRhIHRyaWdnZXJwb2ludHMKKworIworIyAgTW9uaXRvciB0aGUgc3RhdGUgb2YgdmFyaW91cyBGSUZPIHF1ZXVlcyBpbiB0aGUgbG9hZC9zdG9yZSB1bml0OiAKKyMgIEZTQiAoYGBmaWxsL3N0b3JlIGJ1ZmZlcicnKQorIyAgTERRIChgYGxvYWQgcXVldWUnJykKKyMgIFdCQiAoYGB3cml0ZS1iYWNrIGJ1ZmZlcicnKQorIyAgU29tZSBjb3VudCBldmVudHMsIG90aGVycyBjb3VudCBzdGFsbCBjeWNsZXMuCisjCitldmVudDoweDQzMiBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpGU0JfMjVfNTBfRlVMTCA6IDUwLTEgRlNCIDI1LTUwJSBmdWxsCitldmVudDoweDQzMyBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpGU0JfRlVMTF9TVEFMTFMgOiA1MS0xIEZTQiBmdWxsIHBpcGVsaW5lIHN0YWxsIGN5Y2xlcworZXZlbnQ6MHg0MzQgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6TERRXzI1XzUwX0ZVTEwgOiA1Mi0xIExEUSAyNS01MCUgZnVsbAorZXZlbnQ6MHg0MzUgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6TERRX0ZVTExfU1RBTExTIDogNTMtMSBMRFEgZnVsbCBwaXBlbGluZSBzdGFsbCBjeWNsZXMKK2V2ZW50OjB4NDM2IGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOldCQl8yNV81MF9GVUxMIDogNTQtMSBXQkIgMjUtNTAlIGZ1bGwKK2V2ZW50OjB4NDM3IGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOldCQl9GVUxMX1NUQUxMUyA6IDU1LTEgV0JCIGZ1bGwgcGlwZWxpbmUgc3RhbGwgY3ljbGVzCmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9ldmVudHMvbWlwcy8yNEsvdW5pdF9tYXNrcyBiL29wcm9maWxlLTAuOS43L2V2ZW50cy9taXBzLzI0Sy91bml0X21hc2tzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwZDAyOGEKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9ldmVudHMvbWlwcy8yNEsvdW5pdF9tYXNrcwpAQCAtMCwwICsxLDUgQEAKKyMKKyMgTUlQUyAyNEsgcG9zc2libGUgdW5pdCBtYXNrcworIworbmFtZTp6ZXJvIHR5cGU6bWFuZGF0b3J5IGRlZmF1bHQ6MHgwCisJMHgwIE5vIHVuaXQgbWFzawpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL21pcHMvMjVLL2V2ZW50cyBiL29wcm9maWxlLTAuOS43L2V2ZW50cy9taXBzLzI1Sy9ldmVudHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDAwMDY3OAotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2V2ZW50cy9taXBzLzI1Sy9ldmVudHMKQEAgLTAsMCArMSw4MSBAQAorIworIyBNSVBTIDI1S2YKKyMKKyMgVGhlIDI1S2YgaGFzIHR3byBwZXJmb3JtYW5jZSBjb3VudGVycworIworZXZlbnQ6MHgwIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6Q1lDTEVTIDogQ1BVIGN5Y2xlcworZXZlbnQ6MHgxIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SU5TTl9JU1NVRUQgOiBEaXNwYXRjaGVkL2lzc3VlZCBpbnN0cnVjdGlvbnMKK2V2ZW50OjB4MiBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkZQX0lOU05TX0lTU1VFRCA6IEZQVSBpbnN0cnVjdGlvbnMgaXNzdWVkCitldmVudDoweDMgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJTlRfSU5TTlNfSVNTVUVEIDogSW50ZWdlciBpbnN0cnVjdGlvbnMgaXNzdWVkCitldmVudDoweDQgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpMT0FEX0lOU05TX0lTU1VFRCA6IExvYWQgaW5zdHJ1Y3Rpb25zIGlzc3VlZAorZXZlbnQ6MHg1IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6U1RPUkVfSU5TTlNfSVNTVUVEIDogU3RvcmUgaW5zdHJ1Y3Rpb25zIGlzc3VlZAorZXZlbnQ6MHg2IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QlJBTkNIRVNfSlVNUFNfSVNTVUVEIDogQnJhbmNoL0p1bXAgaW5zdHJ1Y3Rpb25zIGlzc3VlZAorZXZlbnQ6MHg3IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RFVBTF9JU1NVRURfUEFJUlMgOiBEdWFsLWlzc3VlZCBwYWlycworZXZlbnQ6MHg4IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SU5TTlNfQ09NUExFVEUgOiBJbnN0cnVjdGlvbiB0aGF0IGNvbXBsZXRlZCBleGVjdXRpb24gKHdpdGggb3Igd2l0aG91dCBleGNlcHRpb24pCitldmVudDoweDkgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpGRVRDSF9HUk9VUFNfSU5fUElQRSA6IEZldGNoIGdyb3VwcyBlbnRlcmluZyBDUFUgZXhlY3V0aW9uIHBpcGVzCisKKyMKKyMgRlBVOgorIworZXZlbnQ6MHhhIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SU5TTl9GUF9EQVRBUEFUSF9DT01QTEVURUQgOiBJbnN0cnVjdGlvbnMgY29tcGxldGVkIGluIEZQVSBkYXRhcGF0aCAoY29tcHV0YXRpb25hbCBpbnN0cnVjdGlvbnMgb25seSkKK2V2ZW50OjB4YiBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkZQX0VYQ0VQVElPTlNfVEFLRU4gOiBUYWtlbiBGUFUgZXhjZXB0aW9ucworZXZlbnQ6MHhjIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RlBfRVhDRVBUSU9OX1BSRURJQ1RFRCA6IFByZWRpY3RlZCBGUFUgZXhjZXB0aW9ucworCisjCisjIEJyYW5jaC9KdW1wIFByZWRpY3Rpb246CisjCitldmVudDoweGQgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpCUkFOQ0hFU19NSVNTUFJFRElDVEVEIDogQnJhbmNoZXMgdGhhdCBtaXNwcmVkaWN0ZWQgYmVmb3JlIGNvbXBsZXRpbmcgZXhlY3V0aW9uCitldmVudDoweGUgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpCUkFOQ0hFU19DT01QTEVURUQgOiBCcmFuY2hlcyB0aGF0IGNvbXBsZXRlZCBleGVjdXRpb24KK2V2ZW50OjB4ZiBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkpSX1JQRF9NSVNTUFJFRElDVEVEIDogSlIgaW5zdHJ1Y3Rpb25zIHRoYXQgbWlzcHJlZGljdGVkIHVzaW5nIHRoZSBSZXR1cm4gUHJlZGljdGlvbiBTdGFjaworZXZlbnQ6MHgxMCBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkpSX0NPTVBMRVRFRCA6IEpSIGluc3RydWN0aW9uIHRoYXQgY29tcGxldGVkIGV4ZWN1dGlvbgorCisjCisjIE1lbW9yeSBNYW5hZ2VtZW50OgorIworZXZlbnQ6MHgxMSBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlVUTEJfTUlTU0VTIDogVS1UTEIgbWlzc2VzCitldmVudDoweDEyIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SlRMQl9NSVNTRVNfSUZFVENIIDogUmF3IGNvdW50IG9mIEpvaW50LVRMQiBtaXNzZXMgZm9yIGluc3RydWN0aW9uIGZldGNoCitldmVudDoweDEzIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SlRMQl9NSVNTRVNfTE9BRFNfU1RPUkVTIDogUmF3IGNvdW50IG9mIEpvaW50LVRMQiBtaXNzZXMgZm9yIGxvYWRzL3N0b3JlcworZXZlbnQ6MHgxNCBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkpUTEJfRVhDRVBUSU9OUyA6IFJlZmlsbCwgSW52YWxpZCBhbmQgTW9kaWZpZWQgVExCIGV4Y2VwdGlvbnMKKworIworIyBNYWNoaW5lIENoZWNrCisjCitldmVudDoweDE1IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SlRMQl9JRkVUQ0hfUkVGSUxMX0VYQ0VQVElPTlMgOiBKb2ludC1UTEIgcmVmaWxsIGV4Y2VwdGlvbnMgZHVlIHRvIGluc3RydWN0aW9uIGZldGNoCitldmVudDoweDE2IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SlRMQl9EQVRBX0FDQ0VTU19SRUZJTExfRVhDRVBUSU9OUyA6IEpvaW50LVRMQiByZWZpbGwgZXhjZXB0aW9ucyBkdWUgdG8gZGF0YSBhY2Nlc3MKK2V2ZW50OjB4MTcgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpKVExCX1JFRklMTF9FWENFUFRJT05TIDogdG90YWwgSm9pbnQtVExCIEluc3RydWN0aW9uIGV4Y2VwdGlvbnMgKHJlZmlsbCkKKworIworIyBJLUNhY2hlIEVmZmljaWVuY3k6CisjCitldmVudDoweDE4IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SU5TTlNfRkVUQ0hFRF9GUk9NX0lDQUNIRSA6IFRvdGFsIG51bWJlciBvZiBpbnN0cnVjdGlvbnMgZmV0Y2hlZCBmcm9tIHRoZSBJLUNhY2hlCitldmVudDoweDE5IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SU5TTl9SRVFfRlJPTV9JRlVfQklVIDogaW5zdHJ1Y3Rpb24gcmVxdWVzdHMgZnJvbSB0aGUgSUZVIHRvIHRoZSBCSVUKK2V2ZW50OjB4MWEgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJQ0FDSEVfTUlTU0VTIDogSS1DYWNoZSBtaXNzCisKKyMKKyMgRC1DYWNoZSBFZmZpY2llbmN5OgorIworZXZlbnQ6MHgxYiBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRDQUNIRV9NSVNTRVMgOiBELUNhY2hlIG1pc3MKK2V2ZW50OjB4MWMgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpEQ0FDSEVfV1JJVEVCQUNLUyA6IEQtQ2FjaGUgbnVtYmVyIG9mIHdyaXRlLWJhY2tzCitldmVudDoweDFkIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6Q0FDSEVBQkxFX0RDQUNIRV9SRVFVRVNUIDogbnVtYmVyIG9mIGNhY2hlYWJsZSByZXF1ZXN0cyB0byBELUNhY2hlCisKKyMKKyMgTGV2ZWwgMiBDYWNoZSBFZmZpY2llbmN5OgorIworZXZlbnQ6MHgxZSBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkwyX01JU1NFUyA6IEwyIENhY2hlIG1pc3MKK2V2ZW50OjB4MWYgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpMMl9XQkFDS1MgOiBMMiBDYWNoZSBudW1iZXIgb2Ygd3JpdGUtYmFja3MKK2V2ZW50OjB4MjAgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpDQUNIRUFCTEVfTDJfUkVRUyA6IE51bWJlciBvZiBjYWNoZWFibGUgcmVxdWVzdHMgdG8gTDIKKworIworIyBSZXBsYXlzOgorIworZXZlbnQ6MHgyMSBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlJFUExBWVNfTFNVX0xPQURfREVQX0ZQVSA6IExTVSByZXF1ZXN0ZWQgcmVwbGF5cywgbG9hZC1kZXBlbmRlbnQgc3BlY3VsYXRpdmUgZGlzcGF0Y2gsIEZQVSBleGNlcHRpb24gcHJlZGljdGlvbgorZXZlbnQ6MHgyMiBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkxTVV9SRVFfUkVQTEFZUyA6IExTVSByZXF1ZXN0ZWQgcmVwbGF5cworZXZlbnQ6MHgyMyBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlJFUExBWVNfTE9BRF9ERVBfRElTUEFUQ0ggOiByZXBsYXlzIGR1ZSB0byBsb2FkLWRlcGVuZGVudCBzcGVjdWxhdGl2ZSBkaXNwYXRjaAorZXZlbnQ6MHgyNCBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlJFUExBWVNfV0JCX0ZVTEwgOiByZXBsYXlzIGR1ZSB0byBXQkIgZnVsbAorZXZlbnQ6MHgyNSBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkZTQl9GVUxMX1JFUExBWVMgOiByZXBsYXlzIGR1ZSB0byBGU0IgZnVsbAorCisjCisjIE1pc2M6CisjCitldmVudDoweDI2IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SUNBQ0hFX1BTRVVET19ISVRTIDogSS1DYWNoZSBwc2V1ZG8taGl0cworZXZlbnQ6MHgyNyBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkxPQURfU1RPUkVfSVNTVUVEIDogTG9hZC9zdG9yZSBpbnN0cnVjdGlvbnMgaXNzdWVkCmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9ldmVudHMvbWlwcy8yNUsvdW5pdF9tYXNrcyBiL29wcm9maWxlLTAuOS43L2V2ZW50cy9taXBzLzI1Sy91bml0X21hc2tzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4NTQ3ODEKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9ldmVudHMvbWlwcy8yNUsvdW5pdF9tYXNrcwpAQCAtMCwwICsxLDUgQEAKKyMKKyMgTUlQUyAyNUtmIHBvc3NpYmxlIHVuaXQgbWFza3MKKyMKK25hbWU6emVybyB0eXBlOm1hbmRhdG9yeSBkZWZhdWx0OjB4MAorCTB4MCBObyB1bml0IG1hc2sKZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2V2ZW50cy9taXBzLzM0Sy9ldmVudHMgYi9vcHJvZmlsZS0wLjkuNy9ldmVudHMvbWlwcy8zNEsvZXZlbnRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxNjE1NTYKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9ldmVudHMvbWlwcy8zNEsvZXZlbnRzCkBAIC0wLDAgKzEsMTU4IEBACisjCisjIE1JUFMgMzRLCisjCisKKyMgVGhlIDM0SyBDUFVzIGhhdmUgdHdvIHBlcmZvcm1hbmNlIGNvdW50ZXJzLgorIworIyBFdmVuL29kZCBjb3VudGVycyBhcmUgZGlzdGluZ3Vpc2hlZCBieSBzZXR0aW5nIGJpdCAxMCBpbiB0aGUgZXZlbnQKKyMgbWFzay4gVGhlIGtlcm5lbCBtYXNrcyB0aGlzIGJpdCBvdXQgYmVmb3JlIHdyaXRpbmcgdGhlIGNvbnRyb2wKKyMgcmVnaXN0ZXIuCisKKyMKKyMgRXZlbnRzIHNwZWNpZmljIHRvIGJvdGggY291bnRlcnMKKyMKK2V2ZW50OjB4MCBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkNZQ0xFUyA6IDAtMCBDeWNsZXMKK2V2ZW50OjB4MSBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOklOU1RSVUNUSU9OUyA6IDEtMCBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDoweGIgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpEQ0FDSEVfTUlTU0VTIDogMTEtMCBEYXRhIGNhY2hlIG1pc3NlcworCisjCisjIEV2ZW50cyBzcGVjaWZpYyB0byBjb3VudGVyIDAKKyMKK2V2ZW50OjB4MiBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpCUkFOQ0hfSU5TTlMgOiAyLTAgQnJhbmNoIGluc3RydWN0aW9ucyAod2hldGhlciBjb21wbGV0ZWQgb3IgbWlzcHJlZGljdGVkKQorZXZlbnQ6MHgzIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkpSXzMxX0lOU05TIDogMy0wIEpSICQzMSAocmV0dXJuKSBpbnN0cnVjdGlvbnMgZXhlY3V0ZWQKK2V2ZW50OjB4NCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpKUl9OT05fMzFfSU5TTlMgOiA0LTAgSlIgJHh4IChub3QgJDMxKSBpbnN0cnVjdGlvbnMgZXhlY3V0ZWQgKGF0IHNhbWUgY29zdCBhcyBhIG1pc3ByZWRpY3QpCitldmVudDoweDUgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SVRMQl9BQ0NFU1NFUyA6IDUtMCBJbnN0cnVjdGlvbiBtaWNyby1UTEIgYWNjZXNzZXMKK2V2ZW50OjB4NiBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpEVExCX0FDQ0VTU0VTIDogNi0wIERhdGEgbWljcm8tVExCIGFjY2Vzc2VzCitldmVudDoweDcgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SlRMQl9JTlNOX0FDQ0VTU0VTIDogNy0wIEpvaW50IFRMQiBpbnN0cnVjdGlvbiBhY2Nlc3NlcworZXZlbnQ6MHg4IGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkpUTEJfREFUQV9BQ0NFU1NFUyA6IDgtMCBKb2ludCBUTEIgZGF0YSAobm9uLWluc3RydWN0aW9uKSBhY2Nlc3NlcworZXZlbnQ6MHg5IGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOklDQUNIRV9BQ0NFU1NFUyA6IDktMCBJbnN0cnVjdGlvbiBjYWNoZSBhY2Nlc3NlcworZXZlbnQ6MHhhIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRDQUNIRV9BQ0NFU1NFUyA6IDEwLTAgRGF0YSBjYWNoZSBhY2Nlc3NlcworCitldmVudDoweGQgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6U1RPUkVfTUlTU19JTlNOUyA6IDEzLTAgQ2FjaGVhYmxlIHN0b3JlcyB0aGF0IG1pc3MgaW4gdGhlIGNhY2hlCitldmVudDoweGUgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SU5URUdFUl9JTlNOUyA6IDE0LTAgSW50ZWdlciBpbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDoweGYgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6TE9BRF9JTlNOUyA6IDE1LTAgTG9hZCBpbnN0cnVjdGlvbnMgY29tcGxldGVkIChpbmNsdWRpbmcgRlApCitldmVudDoweDEwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkpfSkFMX0lOU05TIDogMTYtMCBKL0pBTCBpbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDoweDExIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOk5PX09QU19JTlNOUyA6IDE3LTAgbm8tb3BzIGNvbXBsZXRlZCwgaWUgaW5zdHJ1Y3Rpb25zIHdyaXRpbmcgJDAKK2V2ZW50OjB4MTIgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QUxMX1NUQUxMUyA6IDE4LTAgU3RhbGwgY3ljbGVzLCBpbmNsdWRpbmcgQUxVIGFuZCBJRlUKK2V2ZW50OjB4MTMgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6U0NfSU5TTlMgOiAxOS0wIFNDIGluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjB4MTQgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6UFJFRkVUQ0hfSU5TTlMgOiAyMC0wIFBSRUZFVENIIGluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjB4MTUgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6TDJfQ0FDSEVfV1JJVEVCQUNLUyA6IDIxLTAgTDIgY2FjaGUgbGluZXMgd3JpdHRlbiBiYWNrIHRvIG1lbW9yeQorZXZlbnQ6MHgxNiBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpMMl9DQUNIRV9NSVNTRVMgOiAyMi0wIEwyIGNhY2hlIGFjY2Vzc2VzIHRoYXQgbWlzc2VkIGluIHRoZSBjYWNoZQorZXZlbnQ6MHgxNyBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpFWENFUFRJT05TX1RBS0VOIDogMjMtMCBFeGNlcHRpb25zIHRha2VuCitldmVudDoweDE4IGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkNBQ0hFX0ZJWFVQX0NZQ0xFUyA6IDI0LTAgQ2FjaGUgZml4dXAgY3ljbGVzIChzcGVjaWZpYyB0byB0aGUgMzRLIGZhbWlseSBtaWNyb2FyY2hpdGVjdHVyZSkKK2V2ZW50OjB4MTkgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SUZVX1NUQUxMUyA6IDI1LTAgSUZVIHN0YWxsIGN5Y2xlcworZXZlbnQ6MHgxYSBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpEU1BfSU5TTlMgOiAyNi0wIERTUCBpbnN0cnVjdGlvbnMgY29tcGxldGVkCisKK2V2ZW50OjB4MWMgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6UE9MSUNZX0VWRU5UUyA6IDI4LTAgSW1wbGVtZW50YXRpb24gc3BlY2lmaWMgcG9saWN5IG1hbmFnZXIgZXZlbnRzCitldmVudDoweDFkIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOklTUFJBTV9FVkVOVFMgOiAyOS0wIEltcGxlbWVudGF0aW9uIHNwZWNpZmljIElTUFJBTSBldmVudHMKK2V2ZW50OjB4MWUgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6Q09SRUVYVEVORF9FVkVOVFMgOiAzMC0wIEltcGxlbWVudGF0aW9uIHNwZWNpZmljIENvckV4dGVuZCBldmVudHMKK2V2ZW50OjB4MWYgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6WUlFTERfRVZFTlRTIDogMzEtMCBJbXBsZW1lbnRhdGlvbiBzcGVjaWZpYyB5aWVsZCBldmVudHMKKworZXZlbnQ6MHgyMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJVENfTE9BRFMgOiAzMi0wIElUQyBMb2FkcworZXZlbnQ6MHgyMSBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpVTkNBQ0hFRF9MT0FEX0lOU05TIDogMzMtMCBVbmNhY2hlZCBsb2FkIGluc3RydWN0aW9ucworZXZlbnQ6MHgyMiBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpGT1JLX0lOU05TIDogMzQtMCBGb3JrIGluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjB4MjMgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6Q1AyX0FSSVRIX0lOU05TIDogMzUtMCBDUDIgYXJpdGhtZXRpYyBpbnN0cnVjdGlvbnMgY29tcGxldGVkCisKKyMKKyMgIENvdW50IG51bWJlciBvZiBjeWNsZXMgKG1vc3Qgb2Z0ZW4gYGBzdGFsbCBjeWNsZXMnJywgaWUgdGltZSBsb3N0KSwgbm90IGp1c3QgbnVtYmVyIG9mIGV2ZW50cy4KKyMKK2V2ZW50OjB4MjUgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SUNBQ0hFX01JU1NfU1RBTExTIDogMzctMCBTdGFsbCBjeWNsZXMgZHVlIHRvIGFuIGluc3RydWN0aW9uIGNhY2hlIG1pc3MKKworZXZlbnQ6MHgyNyBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpEQ0FDSEVfTUlTU19DWUNMRVMgOiAzOS0wIEN5Y2xlcyBhIGRhdGEgY2FjaGUgbWlzcyBpcyBvdXRzdGFuZGluZywgYnV0IG5vdCBuZWNlc3NhcmlseSBzdGFsbGluZyB0aGUgcGlwZWxpbmUKK2V2ZW50OjB4MjggY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6VU5DQUNIRURfU1RBTExTIDogNDAtMCBVbmNhY2hlZCBzdGFsbCBjeWNsZXMKK2V2ZW50OjB4MjkgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6TURVX1NUQUxMUyA6IDQxLTAgTURVIHN0YWxsIGN5Y2xlcworZXZlbnQ6MHgyYSBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpDUDJfU1RBTExTIDogNDItMCBDUDIgc3RhbGwgY3ljbGVzCitldmVudDoweDJiIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOklTUFJBTV9TVEFMTFMgOiA0My0wIElTUFJBTSBzdGFsbCBjeWNsZXMKK2V2ZW50OjB4MmMgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6Q0FDSEVfSU5TTl9TVEFMTFMgOiA0NC0wIFN0YWxsIGN5Y2xlc3MgZHVlIHRvIENBQ0hFIGluc3RydWN0aW9ucworZXZlbnQ6MHgyZCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpMT0FEX1VTRV9TVEFMTFMgOiA0NS0wIExvYWQgdG8gdXNlIHN0YWxsIGN5Y2xlcworZXZlbnQ6MHgyZSBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJTlRFUkxPQ0tfU1RBTExTIDogNDYtMCBTdGFsbCBjeWNsZXMgZHVlIHRvIHJldHVybiBkYXRhIGZyb20gTUZDMCwgUkRIV1IsIGFuZCBNRlRSIGluc3RydWN0aW9ucworZXZlbnQ6MHgyZiBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpSRUxBWF9TVEFMTFMgOiA0Ny0wIExvdyBwb3dlciBzdGFsbCBjeWNsZXMgKG9wZXJhdGlvbnMpIGFzIHJlcXVlc3RlZCBieSB0aGUgcG9saWN5IG1hbmFnZXIKKworZXZlbnQ6MHgzMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJRlVfRkJfRlVMTF9SRUZFVENIRVMgOiA0OC0wIFJlZmV0Y2hlcyBkdWUgdG8gY2FjaGUgbWlzc2VzIHdoaWxlIGJvdGggZmlsbCBidWZmZXJzIGFscmVhZHkgYWxsb2NhdGVkCitldmVudDoweDMxIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkVKVEFHX0lOU05fVFJJR0dFUlMgOiA0OS0wIEVKVEFHIGluc3RydWN0aW9uIHRyaWdnZXJwb2ludHMKKworIworIworIyAgTW9uaXRvciB0aGUgc3RhdGUgb2YgdmFyaW91cyBGSUZPIHF1ZXVlcyBpbiB0aGUgbG9hZC9zdG9yZSB1bml0OiAKKyMgIEZTQiAoYGBmaWxsL3N0b3JlIGJ1ZmZlcicnKQorIyAgTERRIChgYGxvYWQgcXVldWUnJykKKyMgIFdCQiAoYGB3cml0ZS1iYWNrIGJ1ZmZlcicnKQorIworZXZlbnQ6MHgzMiBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpGU0JfTEVTU18yNV9GVUxMIDogNTAtMCBGU0IgPCAyNSUgZnVsbAorZXZlbnQ6MHgzMyBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpGU0JfT1ZFUl81MF9GVUxMIDogNTEtMCBGU0IgPiA1MCUgZnVsbAorZXZlbnQ6MHgzNCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpMRFFfTEVTU18yNV9GVUxMIDogNTItMCBMRFEgPCAyNSUgZnVsbAorZXZlbnQ6MHgzNSBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpMRFFfT1ZFUl81MF9GVUxMIDogNTMtMCBMRFEgPiA1MCUgZnVsbAorZXZlbnQ6MHgzNiBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpXQkJfTEVTU18yNV9GVUxMIDogNTQtMCBXQkIgPCAyNSUgZnVsbAorZXZlbnQ6MHgzNyBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpXQkJfT1ZFUl81MF9GVUxMIDogNTUtMCBXQkIgPiA1MCUgZnVsbAorCitldmVudDoweDNlIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlJFQURfUkVTUE9OU0VfTEFURU5DWSA6IDYyLTAgUmVhZCBsYXRlbmN5IGZyb20gbWlzcyBkZXRlY3Rpb24gdW50aWwgY3JpdGljYWwgZHdvcmQgb2YgcmVzcG9uc2UgaXMgcmV0dXJuZWQKKworIworIyBFdmVudHMgc3BlY2lmaWMgdG8gY291bnRlciAxCisjCitldmVudDoweDQwMiBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpNSVNQUkVESUNURURfQlJBTkNIX0lOU05TIDogMi0xIEJyYW5jaCBtaXNwcmVkaWN0aW9ucworZXZlbnQ6MHg0MDMgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SlJfMzFfTUlTUFJFRElDVElPTlMgOiAzLTEgSlIgJDMxIG1pc3ByZWRpY3Rpb25zCitldmVudDoweDQwNCBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpKUl8zMV9OT19QUkVESUNUSU9OUyA6IDQtMSBKUiAkMzEgbm90IHByZWRpY3RlZCAoc3RhY2sgbWlzbWF0Y2gpLgorZXZlbnQ6MHg0MDUgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SVRMQl9NSVNTRVMgOiA1LTEgSW5zdHJ1Y3Rpb24gbWljcm8tVExCIG1pc3NlcworZXZlbnQ6MHg0MDYgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RFRMQl9NSVNTRVMgOiA2LTEgRGF0YSBtaWNyby1UTEIgbWlzc2VzCitldmVudDoweDQwNyBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpKVExCX0lOU05fTUlTU0VTIDogNy0xIEpvaW50IFRMQiBpbnN0cnVjdGlvbiBtaXNzZXMKK2V2ZW50OjB4NDA4IGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkpUTEJfREFUQV9NSVNTRVMgOiA4LTEgSm9pbnQgVExCIGRhdGEgKG5vbi1pbnN0cnVjdGlvbikgbWlzc2VzCitldmVudDoweDQwOSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJQ0FDSEVfTUlTU0VTIDogOS0xIEluc3RydWN0aW9uIGNhY2hlIG1pc3NlcworZXZlbnQ6MHg0MGEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RENBQ0hFX1dSSVRFQkFDS1MgOiAxMC0xIERhdGEgY2FjaGUgbGluZXMgd3JpdHRlbiBiYWNrIHRvIG1lbW9yeQorCitldmVudDoweDQwZCBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpMT0FEX01JU1NfSU5TTlMgOiAxMy0xIENhY2hlYWJsZSBsb2FkIGluc3RydWN0aW9ucyB0aGF0IG1pc3MgaW4gdGhlIGNhY2hlCitldmVudDoweDQwZSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpGUFVfSU5TTlMgOiAxNC0xIEZQVSBpbnN0cnVjdGlvbnMgY29tcGxldGVkIChub3QgaW5jbHVkaW5nIGxvYWRzL3N0b3JlcykKK2V2ZW50OjB4NDBmIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlNUT1JFX0lOU05TIDogMTUtMSBTdG9yZXMgY29tcGxldGVkIChpbmNsdWRpbmcgRlApCitldmVudDoweDQxMCBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpNSVBTMTZfSU5TTlMgOiAxNi0xIE1JUFMxNiBpbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDoweDQxMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJTlRfTVVMX0RJVl9JTlNOUyA6IDE3LTEgSW50ZWdlciBtdWx0aXBseS9kaXZpZGUgaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MHg0MTIgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6UkVQTEFZRURfSU5TTlMgOiAxOC0xIFJlcGxheWVkIGluc3RydWN0aW9ucworZXZlbnQ6MHg0MTMgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6U0NfSU5TTlNfRkFJTEVEIDogMTktMSBTQyBpbnN0cnVjdGlvbnMgY29tcGxldGVkLCBidXQgc3RvcmUgZmFpbGVkIChiZWNhdXNlIHRoZSBsaW5rIGJpdCBoYWQgYmVlbiBjbGVhcmVkKQorZXZlbnQ6MHg0MTQgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6Q0FDSEVfSElUX1BSRUZFVENIX0lOU05TIDogMjAtMSBQUkVGRVRDSCBpbnN0cnVjdGlvbnMgY29tcGxldGVkIHdpdGggY2FjaGUgaGl0CitldmVudDoweDQxNSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpMMl9DQUNIRV9BQ0NFU1NFUyA6IDIxLTEgQWNjZXNzZXMgdG8gdGhlIEwyIGNhY2hlCitldmVudDoweDQxNiBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpMMl9DQUNIRV9TSU5HTEVfQklUX0VSUk9SUyA6IDIyLTEgU2luZ2xlIGJpdCBlcnJvcnMgY29ycmVjdGVkIGluIEwyCitldmVudDoweDQxNyBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpTSU5HTEVfVEhSRUFERURfQ1lDTEVTIDogMjMtMSBDeWNsZXMgd2hpbGUgb25lIGFuZCBvbmx5IG9uZSBUQyBpcyBlbGlnaWJsZSBmb3Igc2NoZWR1bGluZworZXZlbnQ6MHg0MTggY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6UkVGRVRDSEVEX0lOU05TIDogMjQtMSBSZXBsYXllZCBpbnN0cnVjdGlvbnMgc2VudCBiYWNrIHRvIElGVSB0byBiZSByZWZldGNoZWQKK2V2ZW50OjB4NDE5IGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkFMVV9TVEFMTFMgOiAyNS0xIEFMVSBzdGFsbCBjeWNsZXMKK2V2ZW50OjB4NDFhIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkFMVV9EU1BfU0FUVVJBVElPTl9JTlNOUyA6IDI2LTEgQUxVLURTUCBzYXR1cmF0aW9uIGluc3RydWN0aW9ucworZXZlbnQ6MHg0MWIgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6TURVX0RTUF9TQVRVUkFUSU9OX0lOU05TIDogMjctMSBNRFUtRFNQIHNhdHVyYXRpb24gaW5zdHJ1Y3Rpb25zCisKK2V2ZW50OjB4NDFjIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkNQMl9FVkVOVFMgOiAyOC0xIEltcGxlbWVudGF0aW9uIHNwZWNpZmljIENQMiBldmVudHMKK2V2ZW50OjB4NDFkIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRTUFJBTV9FVkVOVFMgOiAyOS0xIEltcGxlbWVudGF0aW9uIHNwZWNpZmljIERTUFJBTSBldmVudHMKKworZXZlbnQ6MHg0MWYgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SVRDX0VWRU5UIDogMzEtMSBJbXBsZW1lbnRhdGlvbiBzcGVjaWZpYyB5aWVsZCBldmVudAorCitldmVudDoweDQyMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpVTkNBQ0hFRF9TVE9SRV9JTlNOUyA6IDMzLTEgVW5jYWNoZWQgc3RvcmUgaW5zdHJ1Y3Rpb25zCitldmVudDoweDQyMyBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpDUDJfVE9fRlJPTV9JTlNOUyA6IDM1LTEgQ1AyIHRvL2Zyb20gaW5zdHJ1Y3Rpb25zIChtb3ZlcywgY29udHJvbCwgbG9hZHMsIHN0b3JlcykKKworIworIyAgQ291bnQgbnVtYmVyIG9mIGN5Y2xlcyAobW9zdCBvZnRlbiBgYHN0YWxsIGN5Y2xlcycnLCBpZSB0aW1lIGxvc3QpLCBub3QganVzdCBudW1iZXIgb2YgZXZlbnRzLgorIworZXZlbnQ6MHg0MjUgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RENBQ0hFX01JU1NfU1RBTExTIDogMzctMSBTdGFsbCBjeWNsZXMgZHVlIHRvIGEgZGF0YSBjYWNoZSBtaXNzCisKK2V2ZW50OjB4NDI3IGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkwyX0NBQ0hFX01JU1NfQ1lDTEVTIDogMzktMSBDeWNsZXMgYSBMMiBtaXNzIGlzIG91dHN0YW5kaW5nLCBidXQgbm90IG5lY2Vzc2FyaWx5IHN0YWxsaW5nIHRoZSBwaXBlbGluZQorZXZlbnQ6MHg0MjggY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SVRDX1NUQUxMUyA6IDQwLTEgSVRDIHN0YWxsIGN5Y2xlcworZXZlbnQ6MHg0MjkgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RlBVX1NUQUxMUyA6IDQxLTEgRlBVIHN0YWxsIGN5Y2xlcworZXZlbnQ6MHg0MmEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6Q09SRUVYVEVORF9TVEFMTFMgOiA0Mi0xIENvckV4dGVuZCBzdGFsbCBjeWNsZXMKK2V2ZW50OjB4NDJiIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRTUFJBTV9TVEFMTFMgOiA0My0xIERTUFJBTSBzdGFsbCBjeWNsZXMKKworZXZlbnQ6MHg0MmQgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QUxVX1RPX0FHRU5fU1RBTExTIDogNDUtMSBBTFUgdG8gQUdFTiBzdGFsbCBjeWNsZXMKK2V2ZW50OjB4NDJlIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOk1JU1BSRURJQ1RJT05fU1RBTExTIDogNDYtMSBCcmFuY2ggbWlzcHJlZGljdCBzdGFsbCBjeWNsZXMKKworZXZlbnQ6MHg0MzAgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RkJfRU5UUllfQUxMT0NBVEVEX0NZQ0xFUyA6IDQ4LTEgQ3ljbGVzIHdoaWxlIGF0IGxlYXN0IG9uZSBJRlUgZmlsbCBidWZmZXIgaXMgYWxsb2NhdGVkCitldmVudDoweDQzMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpFSlRBR19EQVRBX1RSSUdHRVJTIDogNDktMSBFSlRBRyBEYXRhIHRyaWdnZXJwb2ludHMKKworIworIyAgTW9uaXRvciB0aGUgc3RhdGUgb2YgdmFyaW91cyBGSUZPIHF1ZXVlcyBpbiB0aGUgbG9hZC9zdG9yZSB1bml0OiAKKyMgIEZTQiAoYGBmaWxsL3N0b3JlIGJ1ZmZlcicnKQorIyAgTERRIChgYGxvYWQgcXVldWUnJykKKyMgIFdCQiAoYGB3cml0ZS1iYWNrIGJ1ZmZlcicnKQorIyAgU29tZSBjb3VudCBldmVudHMsIG90aGVycyBjb3VudCBzdGFsbCBjeWNsZXMuCisjCitldmVudDoweDQzMiBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpGU0JfMjVfNTBfRlVMTCA6IDUwLTEgRlNCIDI1LTUwJSBmdWxsCitldmVudDoweDQzMyBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpGU0JfRlVMTF9TVEFMTFMgOiA1MS0xIEZTQiBmdWxsIHBpcGVsaW5lIHN0YWxsIGN5Y2xlcworZXZlbnQ6MHg0MzQgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6TERRXzI1XzUwX0ZVTEwgOiA1Mi0xIExEUSAyNS01MCUgZnVsbAorZXZlbnQ6MHg0MzUgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6TERRX0ZVTExfU1RBTExTIDogNTMtMSBMRFEgZnVsbCBwaXBlbGluZSBzdGFsbCBjeWNsZXMKK2V2ZW50OjB4NDM2IGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOldCQl8yNV81MF9GVUxMIDogNTQtMSBXQkIgMjUtNTAlIGZ1bGwKK2V2ZW50OjB4NDM3IGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOldCQl9GVUxMX1NUQUxMUyA6IDU1LTEgV0JCIGZ1bGwgcGlwZWxpbmUgc3RhbGwgY3ljbGVzCisKK2V2ZW50OjB4NDNlIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlJFQURfUkVTUE9OU0VfQ09VTlQgOiA2Mi0xIFJlYWQgcmVxdWVzdHMgb24gbWlzcyBkZXRlY3Rpb24KZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2V2ZW50cy9taXBzLzM0Sy91bml0X21hc2tzIGIvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL21pcHMvMzRLL3VuaXRfbWFza3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQzMWFmOAotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2V2ZW50cy9taXBzLzM0Sy91bml0X21hc2tzCkBAIC0wLDAgKzEsNSBAQAorIworIyBNSVBTIDM0SyBwb3NzaWJsZSB1bml0IG1hc2tzCisjCituYW1lOnplcm8gdHlwZTptYW5kYXRvcnkgZGVmYXVsdDoweDAKKwkweDAgTm8gdW5pdCBtYXNrCmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9ldmVudHMvbWlwcy81Sy9ldmVudHMgYi9vcHJvZmlsZS0wLjkuNy9ldmVudHMvbWlwcy81Sy9ldmVudHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDU4NzRmZAotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2V2ZW50cy9taXBzLzVLL2V2ZW50cwpAQCAtMCwwICsxLDM2IEBACisjCisjIE1JUFMgNUsKKyMKKyMgQXMgc3RhbmRhcmQgdGhlIENQVSBzdXBwb3J0cyAyIHBlcmZvcm1hbmNlIGNvdW50ZXJzLiAgRXZlbnQgMCwgMiwgMyBhbmQgNAorIyBhcmUgYXZhaWxhYmxlIG9uIGJvdGggY291bnRlcnM7IHRoZSBJTlNOU19FWEVDRUQgaXMgYXZhaWxhYmxlIG9uIGNvdW50ZXIgMAorIyBhcyBldmVudCAwIGFuZCBvbiBjb3VudGVyIDEgYXMgZXZlbnQgMTsgdGhlIHJlbWFpbmluZyBhcmUgY291bnRlci1zcGVjaWZpYy4KKyMKK2V2ZW50OjB4MCBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkNZQ0xFUyA6IEN5Y2xlcworZXZlbnQ6MHgyIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6TE9BRFNfRVhFQ0VEIDogTG9hZC9wcmVmKHgpL3N5bmMvY2FjaGUtb3BzIGV4ZWN1dGVkCitldmVudDoweDMgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpTVE9SRVNfRVhFQ0VEIDogU3RvcmVzIChpbmNsdWRpbmcgY29uZGl0aW9uYWwgc3RvcmVzKSBleGVjdXRlZAorZXZlbnQ6MHg0IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6Q09ORF9TVE9SRVNfRVhFQ0VEIDogQ29uZGl0aW9uYWwgc3RvcmVzIGV4ZWN1dGVkCisKKyMKKyMgRXZlbnRzIHNwZWNpZmljIHRvIGNvdW50ZXIgMAorIworZXZlbnQ6MHgxIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOklOU05fRkVUQ0hFRCA6IEluc3RydWN0aW9ucyBmZXRjaGVkCitldmVudDoweDUgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RkFJTEVEX0NPTkRfU1RPUkVTIDogRmFpbGVkIGNvbmRpdGlvbmFsIHN0b3JlcworZXZlbnQ6MHg2IGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkJSQU5DSEVTX0VYRUNFRCA6IEJyYW5jaGVzIGV4ZWN1dGVkCitldmVudDoweDcgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SVRMQl9NSVNTRVMgOiBJVExCIG1pc3MKK2V2ZW50OjB4OCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpEVExCX01JU1NFUyA6IERUTEIgbWlzcworZXZlbnQ6MHg5IGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOklDQUNIRV9NSVNTIDogSW5zdHJ1Y3Rpb24gY2FjaGUgbWlzcworZXZlbnQ6MHhhIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOklOU05fU0NIRURVTEVEIDogSW5zdHJ1Y3Rpb24gc2NoZWR1bGVkCitldmVudDoweGUgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RFVBTF9JU1NVRURfSU5TTlMgOiBEdWFsIGlzc3VlZCBpbnN0cnVjdGlvbnMgZXhlY3V0ZWQKK2V2ZW50OjB4ZiBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJTlNOU19FWEVDRUQgOiBJbnN0cnVjdGlvbnMgZXhlY3V0ZWQKKworIworIyBFdmVudHMgc3BlY2lmaWMgdG8gY291bnRlciAxCisjCitldmVudDoweDEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SU5TTlNfRVhFQ0VEIDogSW5zdHJ1Y3Rpb25zIGV4ZWN1dGVkCitldmVudDoweDUgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RlBfSU5TTlNfRVhFQ0VEIDogRmxvYXRpbmctcG9pbnQgaW5zdHJ1Y3Rpb25zIGV4ZWN1dGVkCitldmVudDoweDYgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RENBQ0hFX0xJTkVfRVZJQ1RFRCA6IERhdGEgY2FjaGUgbGluZSBldmljdGVkCitldmVudDoweDcgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6VExCX01JU1NfRVhDRVBUSU9OUyA6IFRMQiBtaXNzIGV4Y2VwdGlvbnMKK2V2ZW50OjB4OCBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpCUkFOQ0hFU19NSVNTUFJFRElDVEVEIDogQnJhbmNoIG1pc3ByZWRpY3RlZAorZXZlbnQ6MHg5IGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRDQUNIRV9NSVNTIDogRGF0YSBjYWNoZSBtaXNzCitldmVudDoweGEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6Q09ORkxJQ1RfU1RBTExfTV9TVEFHRSA6IEluc3RydWN0aW9uIHN0YWxsIGluIE0gc3RhZ2UgZHVlIHRvIHNjaGVkdWxpbmcgY29uZmxpY3RzCitldmVudDoweGYgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6Q09QMl9JTlNOU19FWEVDRUQgOiBDT1AyIGluc3RydWN0aW9ucyBleGVjdXRlZApkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL21pcHMvNUsvdW5pdF9tYXNrcyBiL29wcm9maWxlLTAuOS43L2V2ZW50cy9taXBzLzVLL3VuaXRfbWFza3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTNmMjZlNAotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2V2ZW50cy9taXBzLzVLL3VuaXRfbWFza3MKQEAgLTAsMCArMSw1IEBACisjCisjIE1JUFMgNUsgcG9zc2libGUgdW5pdCBtYXNrcworIworbmFtZTp6ZXJvIHR5cGU6bWFuZGF0b3J5IGRlZmF1bHQ6MHgwCisJMHgwIE5vIHVuaXQgbWFzawpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL21pcHMvNzRLL2V2ZW50cyBiL29wcm9maWxlLTAuOS43L2V2ZW50cy9taXBzLzc0Sy9ldmVudHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODE3MDBmOAotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2V2ZW50cy9taXBzLzc0Sy9ldmVudHMKQEAgLTAsMCArMSwxNTkgQEAKKyMKKyMgTUlQUyA3NEsKKyMKKworIyBUaGUgNzRLIENQVXMgaGF2ZSBmb3VyIHBlcmZvcm1hbmNlIGNvdW50ZXJzLgorIworIyBFdmVuL29kZCBjb3VudGVycyBhcmUgZGlzdGluZ3Vpc2hlZCBieSBzZXR0aW5nIGJpdCAxMCBpbiB0aGUgZXZlbnQKKyMgbWFzay4gVGhlIGtlcm5lbCBtYXNrcyB0aGlzIGJpdCBvdXQgYmVmb3JlIHdyaXRpbmcgdGhlIGNvbnRyb2wKKyMgcmVnaXN0ZXIuCisKKyMKKyMgRXZlbnRzIHNwZWNpZmljIHRvIGFsbCBjb3VudGVycworIworZXZlbnQ6MHgwIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkNZQ0xFUyA6IDAtMCBDeWNsZXMKK2V2ZW50OjB4MSBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJTlNUUlVDVElPTlMgOiAxLTAgSW5zdHJ1Y3Rpb25zIGdyYWR1YXRlZAorCisjCisjIEV2ZW50cyBzcGVjaWZpYyB0byBjb3VudGVycyAwIGFuZCAyCisjCitldmVudDoweDIgY291bnRlcnM6MCwyIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpQUkVESUNURURfSlJfMzEgOiAyLTAgSlIgJDMxIChyZXR1cm4pIGluc3RydWN0aW9ucyBwcmVkaWN0ZWQgaW5jbHVkaW5nIHNwZWN1bGF0aXZlIGluc3RydWN0aW9ucworZXZlbnQ6MHgzIGNvdW50ZXJzOjAsMiB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6UkVESVJFQ1RfU1RBTExTIDogMy0wIFN0YWxsIGN5Y2xlcyBkdWUgdG8gcmVnaXN0ZXIgaW5kaXJlY3QganVtcHMgKGluY2x1ZGluZyBub24tcHJlZGljdGVkIEpSICQzMSksIEVSRVQvV0FJVCBpbnN0cnVjdGlvbnMsIGFuZCBJRlUgZGV0ZXJtaW5lZCBleGNlcHRpb24KK2V2ZW50OjB4NCBjb3VudGVyczowLDIgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOklUTEJfQUNDRVNTRVMgOiA0LTAgSW5zdHJ1Y3Rpb24gbWljcm8tVExCIGFjY2Vzc2VzCisKK2V2ZW50OjB4NiBjb3VudGVyczowLDIgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOklDQUNIRV9BQ0NFU1NFUyA6IDYtMCBJbnN0cnVjdGlvbiBjYWNoZSBhY2Nlc3NlcyBpbmNsdWRpbmcgc3BlY3VsYXRpdmUgaW5zdHJ1Y3Rpb25zCitldmVudDoweDcgY291bnRlcnM6MCwyIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJQ0FDSEVfTUlTU19TVEFMTFMgOiA3LTAgSW5zdHJ1Y3Rpb24gY2FjaGUgbWlzcyBzdGFsbCBjeWNsZXMKK2V2ZW50OjB4OCBjb3VudGVyczowLDIgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlVOQ0FDSEVEX0lGRVRDSF9TVEFMTFMgOiA4LTAgVW5jYWNoZWQgaW5zdHJ1Y3Rpb24gZmV0Y2ggc3RhbGwgY3ljbGVzCitldmVudDoweDkgY291bnRlcnM6MCwyIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJRlVfUkVQTEFZUyA6IDktMCBSZXBsYXlzIHdpdGhpbiB0aGUgSUZVIGR1ZSB0byBmdWxsIEluc3RydWN0aW9uIEJ1ZmZlcgorCitldmVudDoweGIgY291bnRlcnM6MCwyIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJRlVfSURVX01JU1NfUFJFRF9VUFNUUkVBTV9DWUNMRVMgOiAxMS0wIEN5Y2xlcyBJRlUtSURVIGdhdGUgaXMgY2xvc2VkICh0byBwcmV2ZW50IHVwc3RyZWFtIGZyb20gZ2V0dGluZyBhaGVhZCkgZHVlIHRvIG1pc3ByZWRpY3RlZCBicmFuY2ggCitldmVudDoweGMgY291bnRlcnM6MCwyIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJRlVfSURVX0NMT0dFRF9ET1dOU1RSRUFNX0NZQ0xFUyA6IDEyLTAgQ3ljbGVzIElGVS1JRFUgZ2F0ZSBpcyBjbG9zZWQgKHdhaXRpbmcgZm9yIGRvd25zdHJlYW0gdG8gdW5jbG9nKSBkdWUgdG8gTVRDMC9NRkMwIHNlcXVlbmNlIGluIHBpcGUsIEVIQiwgb3IgYmxvY2tlZCBERCwgRFIsIG9yIERTCitldmVudDoweGQgY291bnRlcnM6MCwyIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpERFEwX0ZVTExfRFJfU1RBTExTIDogMTMtMCBEUiBzdGFnZSBzdGFsbCBjeWNsZXMgZHVlIHRvIEREUTAgKEFMVSBvdXQtb2Ytb3JkZXIgZGlzcGF0Y2ggcXVldWUpIGZ1bGwKK2V2ZW50OjB4ZSBjb3VudGVyczowLDIgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkFMQ0JfRlVMTF9EUl9TVEFMTFMgOiAxNC0wIERSIHN0YWdlIHN0YWxsIGN5Y2xlcyBkdWUgdG8gQUxDQiAoQUxVIGNvbXBsZXRpb24gYnVmZmVycykgZnVsbAorZXZlbnQ6MHhmIGNvdW50ZXJzOjAsMiB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6Q0xEUV9GVUxMX0RSX1NUQUxMUyA6IDE1LTAgRFIgc3RhZ2Ugc3RhbGwgY3ljbGVzIGR1ZSB0byBDTERRIChkYXRhIGNvbW1pbmcgYmFjayBmcm9tIEZQVSkgZnVsbAorZXZlbnQ6MHgxMCBjb3VudGVyczowLDIgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkFMVV9FTVBUWV9DWUNMRVMgOiAxNi0wIEREUTAgKEFMVSBvdXQtb2Ytb3JkZXIgZGlzcGF0Y2ggcXVldWUpIGVtcHR5IGN5Y2xlcworZXZlbnQ6MHgxMSBjb3VudGVyczowLDIgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkFMVV9PUEVSQU5EU19OT1RfUkVBRFlfQ1lDTEVTIDogMTctMCBERFEwIChBTFUgb3V0LW9mLW9yZGVyIGRpc3BhdGNoIHF1ZXVlKSBubyBpc3N1ZSBjeWNsZXMgd2l0aCB2YWxpZCBpbnN0cnVjdGlvbnMgYnV0IG9wZXJhbmRzIG5vdCByZWFkeQorZXZlbnQ6MHgxMiBjb3VudGVyczowLDIgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkFMVV9OT19JU1NVRVNfQ1lDTEVTIDogMTgtMCBERFEwIChBTFUgb3V0LW9mLW9yZGVyIGRpc3BhdGNoIHF1ZXVlKSBubyBpc3N1ZSBjeWNsZXMgd2l0aCB2YWxpZCBpbnN0cnVjdGlvbnMgZHVlIHRvIG9wZXJhbmQocykgbm90IGF2YWlsYWJsZSwgTURVIGJ1c3ksIG9yIENvckV4dCByZXNvdXJjZSBidXN5CitldmVudDoweDEzIGNvdW50ZXJzOjAsMiB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QUxVX0JVQkJMRV9DWUNMRVMgOiAxOS0wIEREUTAgKEFMVSBvdXQtb2Ytb3JkZXIgZGlzcGF0Y2ggcXVldWUpIGJ1YmJsZXMgZHVlIHRvIE1GQzEgZGF0YSB3cml0ZQorZXZlbnQ6MHgxNCBjb3VudGVyczowLDIgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlNJTkdMRV9JU1NVRV9DWUNMRVMgOiAyMC0wIEVpdGhlciBERFEwIChBTFUgb3V0LW9mLW9yZGVyIGRpc3BhdGNoIHF1ZXVlKSBvciBERFExIChBR0VOIG91dC1vZi1vcmRlciBkaXNwYXRjaCBxdWV1ZSkgdmFsaWQgaW5zdHJ1Y3Rpb24gaXNzdWUgY3ljbGVzCitldmVudDoweDE1IGNvdW50ZXJzOjAsMiB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6T09PX0FMVV9JU1NVRV9DWUNMRVMgOiAyMS0wIE91dC1vZi1vcmRlciBBTFUgaXNzdWUgY3ljbGVzIChpc3N1ZWQgaW5zdHJ1Y3Rpb24gaXMgbm90IHRoZSBvbGRlc3QgaW4gdGhlIHBvb2wpCitldmVudDoweDE2IGNvdW50ZXJzOjAsMiB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SkFMUl9KQUxSX0hCX0lOU05TIDogMjItMCAgR3JhZHVhdGVkIEpBTFIvSkFMUi5IQiBpbnN0cnVjdGlvbnMKK2V2ZW50OjB4MTcgY291bnRlcnM6MCwyIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpEQ0FDSEVfTE9BRF9BQ0NFU1NFUyA6IDIzLTAgQ291bnRzIGFsbCBhY2Nlc3NlcyB0byB0aGUgZGF0YSBjYWNoZSBjYXVzZWQgYnkgbG9hZCBpbnN0cnVjdGlvbnMKK2V2ZW50OjB4MTggY291bnRlcnM6MCwyIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpEQ0FDSEVfV1JJVEVCQUNLUyA6IDI0LTAgRGF0YSBjYWNoZSB3cml0ZWJhY2tzCitldmVudDoweDE5IGNvdW50ZXJzOjAsMiB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SlRMQl9EQVRBX0FDQ0VTU0VTIDogMjUtMCBKb2ludCBUTEIgZGF0YSAobm9uLWluc3RydWN0aW9uKSBhY2Nlc3NlcworZXZlbnQ6MHgxYSBjb3VudGVyczowLDIgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkxPQURfU1RPUkVfUkVQTEFZUyA6IDI2LTAgTG9hZC9zdG9yZSBnZW5lcmF0ZWQgcmVwbGF5cyAtIGxvYWQvc3RvcmUgZm9sbG93cyB0b28gY2xvc2VseSBhIG1hdGNoaW5nIENBQ0hFT1AKK2V2ZW50OjB4MWIgY291bnRlcnM6MCwyIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpMT0FEX1NUT1JFX0JMT0NLRURfQ1lDTEVTIDogMjctMCBMb2FkL3N0b3JlIGdyYWR1YXRpb24gYmxvY2tlZCBjeWNsZXMgZHVlIHRvIENQMS8yIHN0b3JlIGRhdGEgbm90IHJlYWR5LCBTWU5DL1NZTkNJL1NDL0NBQ0hFT1AgYXQgdGhlIGhlYWQsIG9yIEZTQi9MRFEvV0JCL0lUVSBGSUZPIGZ1bGwKK2V2ZW50OjB4MWMgY291bnRlcnM6MCwyIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpMMl9DQUNIRV9XUklURUJBQ0tTIDogMjgtMCBMMiBDYWNoZSBXcml0ZWJhY2tzCitldmVudDoweDFkIGNvdW50ZXJzOjAsMiB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6TDJfQ0FDSEVfTUlTU0VTIDogMjktMCBMMiBDYWNoZSBNaXNzZXMKK2V2ZW50OjB4MWUgY291bnRlcnM6MCwyIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpGU0JfRlVMTF9TVEFMTFMgOiAzMC0wIFBpcGUgc3RhbGwgY3ljbGVzIGR1ZSB0byBGU0IgZnVsbAorZXZlbnQ6MHgxZiBjb3VudGVyczowLDIgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkxEUV9GVUxMX1NUQUxMUyA6IDMxLTAgUGlwZSBzdGFsbCBjeWNsZXMgZHVlIHRvIExEUSBmdWxsCitldmVudDoweDIwIGNvdW50ZXJzOjAsMiB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6V0JCX0ZVTExfU1RBTExTIDogMzItMCBQaXBlIHN0YWxsIGN5Y2xlcyBkdWUgdG8gV0JCIGZ1bGwKKworZXZlbnQ6MHgyMyBjb3VudGVyczowLDIgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkxPQURfTUlTU19DT05TVU1FUl9SRVBMQVlTIDogMzUtMCBSZXBsYXlzIGZvbGxvd2luZyBvcHRpbWlzdGljIGlzc3VlIG9mIGluc3RydWN0aW9uIGRlcGVuZGVudCBvbiBsb2FkIHdoaWNoIG1pc3NlZCwgY291bnRlZCBvbmx5IHdoZW4gdGhlIGRlcGVuZGVudCBpbnN0cnVjdGlvbiBncmFkdWF0ZXMKK2V2ZW50OjB4MjQgY291bnRlcnM6MCwyIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpKUl9OT05fMzFfSU5TTlMgOiAzNi0wIGpyICR4eCAobm90ICQzMSkgaW5zdHJ1Y3Rpb25zIGdyYWR1YXRlZCAoYXQgc2FtZSBjb3N0IGFzIGEgbWlzcHJlZGljdCkKK2V2ZW50OjB4MjUgY291bnRlcnM6MCwyIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpCUkFOQ0hfSU5TTlMgOiAzNy0wIEJyYW5jaCBpbnN0cnVjdGlvbnMgZ3JhZHVhdGVkLCBleGNsdWRpbmcgQ1AxL0NQMiBjb25kaXRpb25hbCBicmFuY2hlcworZXZlbnQ6MHgyNiBjb3VudGVyczowLDIgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkJSQU5DSF9MSUtFTFlfSU5TTlMgOiAzOC0wIEJyYW5jaCBsaWtlbHkgaW5zdHJ1Y3Rpb25zIGdyYWR1YXRlZCBpbmNsdWRpbmcgQ1AxIGFuZCBDUDIgYnJhbmNoIGxpa2VseSBpbnN0cnVjdGlvbnMKK2V2ZW50OjB4MjcgY291bnRlcnM6MCwyIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpDT05EX0JSQU5DSF9JTlNOUyA6IDM5LTAgQ29uZGl0aW9uYWwgYnJhbmNoZXMgZ3JhZHVhdGVkCitldmVudDoweDI4IGNvdW50ZXJzOjAsMiB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SU5URUdFUl9JTlNOUyA6IDQwLTAgSW50ZWdlciBpbnN0cnVjdGlvbnMgZ3JhZHVhdGVkIGluY2x1ZGluZyBOT1AsIFNTTk9QLCBNT1ZDSSwgYW5kIEVIQgorZXZlbnQ6MHgyOSBjb3VudGVyczowLDIgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkxPQURfSU5TTlMgOiA0MS0wIExvYWRzIGdyYWR1YXRlZCBpbmNsdWRpbmcgQ1AxIGFucyBDUDIgbG9hZHMgCitldmVudDoweDJhIGNvdW50ZXJzOjAsMiB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6Sl9KQUxfSU5TTlMgOiA0Mi0wIEovSkFMIGdyYWR1YXRlZAorZXZlbnQ6MHgyYiBjb3VudGVyczowLDIgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOk5PUF9JTlNOUyA6IDQzLTAgTk9QIGluc3RydWN0aW9ucyBncmFkdWF0ZWQgLSBTTEwgMCwgTk9QLCBTU05PUCwgYW5kIEVIQgorZXZlbnQ6MHgyYyBjb3VudGVyczowLDIgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRTUF9JTlNOUyA6IDQ0LTAgRFNQIGluc3RydWN0aW9ucyBncmFkdWF0ZWQKK2V2ZW50OjB4MmQgY291bnRlcnM6MCwyIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpEU1BfQlJBTkNIX0lOU05TIDogNDUtMCBEU1AgYnJhbmNoIGluc3RydWN0aW9ucyBncmFkdWF0ZWQKK2V2ZW50OjB4MmUgY291bnRlcnM6MCwyIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpVTkNBQ0hFRF9MT0FEX0lOU05TIDogNDYtMCBVbmNhY2hlZCBsb2FkcyBncmFkdWF0ZWQKKworZXZlbnQ6MHgzMSBjb3VudGVyczowLDIgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkVKVEFHX0lOU05fVFJJR0dFUlMgOiA0OS0wIEVKVEFHIGluc3RydWN0aW9uIHRyaWdnZXJwb2ludHMKK2V2ZW50OjB4MzIgY291bnRlcnM6MCwyIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpDUDFfQlJBTkNIX01JU1BSRURJQ1RJT05TIDogNTAtMCBDUDEgYnJhbmNoZXMgbWlzcHJlZGljdGVkCitldmVudDoweDMzIGNvdW50ZXJzOjAsMiB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6U0NfSU5TTlMgOiA1MS0wIFNDIGluc3RydWN0aW9ucyBncmFkdWF0ZWQKK2V2ZW50OjB4MzQgY291bnRlcnM6MCwyIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpQUkVGRVRDSF9JTlNOUyA6IDUyLTAgUHJlZmV0Y2ggaW5zdHJ1Y3Rpb25zIGdyYWR1YXRlZAorZXZlbnQ6MHgzNSBjb3VudGVyczowLDIgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOk5PX0lOU05fQ1lDTEVTIDogNTMtMCBObyBpbnN0cnVjdGlvbnMgZ3JhZHVhdGVkIGN5Y2xlcworZXZlbnQ6MHgzNiBjb3VudGVyczowLDIgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOk9ORV9JTlNOX0NZQ0xFUyA6IDU0LTAgT25lIGluc3RydWN0aW9uIGdyYWR1YXRlZCBjeWNsZXMKK2V2ZW50OjB4MzcgY291bnRlcnM6MCwyIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpHRklGT19CTE9DS0VEX0NZQ0xFUyA6IDU1LTAgR0ZJRk8gYmxvY2tlZCBjeWNsZXMKK2V2ZW50OjB4MzggY291bnRlcnM6MCwyIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpNSVNQUkVESUNUSU9OX1NUQUxMUyA6IDU2LTAgQ3ljbGVzIGZyb20gdGhlIHRpbWUgb2YgYSBwaXBlIGtpbGwgZHVlIHRvIG1pc3ByZWRpY3QgdW50aWwgdGhlIGZpcnN0IG5ldyBpbnN0cnVjdGlvbiBncmFkdWF0ZXMKK2V2ZW50OjB4MzkgY291bnRlcnM6MCwyIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpNSVNQUkVESUNURURfQlJBTkNIX0lOU05TX0NZQ0xFUyA6IDU3LTAgTWlzcHJlZGljdGVkIGJyYW5jaCBpbnN0cnVjdGlvbiBncmFkdWF0aW9uIGN5Y2xlcyB3aXRob3V0IHRoZSBkZWxheSBzbG90IAorZXZlbnQ6MHgzYSBjb3VudGVyczowLDIgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkVYQ0VQVElPTlNfVEFLRU4gOiA1OC0wIEV4Y2VwdGlvbnMgdGFrZW4KK2V2ZW50OjB4M2IgY291bnRlcnM6MCwyIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpDT1JFRVhURU5EX0VWRU5UUyA6IDU5LTAgSW1wbGVtZW50YXRpb24gc3BlY2lmaWMgQ29yRXh0ZW5kIGV2ZW50cworCitldmVudDoweDNlIGNvdW50ZXJzOjAsMiB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SVNQUkFNX0VWRU5UUyA6IDYyLTAgSW1wbGVtZW50YXRpb24gc3BlY2lmaWMgSVNQUkFNIGV2ZW50cworZXZlbnQ6MHgzZiBjb3VudGVyczowLDIgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkwyX0NBQ0hFX1NJTkdMRV9CSVRfRVJST1JTIDogNjMtMCBTaW5nbGUgYml0IGVycm9ycyBjb3JyZWN0ZWQgaW4gTDIKK2V2ZW50OjB4NDAgY291bnRlcnM6MCwyIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpTWVNURU1fRVZFTlRfMCA6IDY0LTAgSW1wbGVtZW50YXRpb24gc3BlY2lmaWMgc3lzdGVtIGV2ZW50IDAKK2V2ZW50OjB4NDEgY291bnRlcnM6MCwyIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpTWVNURU1fRVZFTlRfMiA6IDY1LTAgSW1wbGVtZW50YXRpb24gc3BlY2lmaWMgc3lzdGVtIGV2ZW50IDIKK2V2ZW50OjB4NDIgY291bnRlcnM6MCwyIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpTWVNURU1fRVZFTlRfNCA6IDY2LTAgSW1wbGVtZW50YXRpb24gc3BlY2lmaWMgc3lzdGVtIGV2ZW50IDQKK2V2ZW50OjB4NDMgY291bnRlcnM6MCwyIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpTWVNURU1fRVZFTlRfNiA6IDY3LTAgSW1wbGVtZW50YXRpb24gc3BlY2lmaWMgc3lzdGVtIGV2ZW50IDYKK2V2ZW50OjB4NDQgY291bnRlcnM6MCwyIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpPQ1BfQUxMX1JFUVVFU1RTIDogNjgtMCBBbGwgT0NQIHJlcXVlc3RzIGFjY2VwdGVkCitldmVudDoweDQ1IGNvdW50ZXJzOjAsMiB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6T0NQX1JFQURfUkVRVUVTVFMgOiA2OS0wIE9DUCByZWFkIHJlcXVlc3RzIGFjY2VwdGVkCitldmVudDoweDQ2IGNvdW50ZXJzOjAsMiB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6T0NQX1dSSVRFX1JFUVVFU1RTIDogNzAtMCBPQ1Agd3JpdGUgcmVxdWVzdHMgYWNjZXB0ZWQKKworZXZlbnQ6MHg0YSBjb3VudGVyczowLDIgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkZTQl9MRVNTXzI1X0ZVTEwgOiA3NC0wIEZTQiA8IDI1JSBmdWxsCitldmVudDoweDRiIGNvdW50ZXJzOjAsMiB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6TERRX0xFU1NfMjVfRlVMTCA6IDc1LTAgTERRIDwgMjUlIGZ1bGwKK2V2ZW50OjB4NGMgY291bnRlcnM6MCwyIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpXQkJfTEVTU18yNV9GVUxMIDogNzYtMCBXQkIgPCAyNSUgZnVsbAorCisKKyMKKyMgRXZlbnRzIHNwZWNpZmljIHRvIGNvdW50ZXJzIDEgYW5kIDMKKyMKKworZXZlbnQ6MHg0MDIgY291bnRlcnM6MSwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpKUl8zMV9NSVNQUkVESUNUSU9OUyA6IDItMSBKUiAkMzEgKHJldHVybikgaW5zdHJ1Y3Rpb25zIG1pc3ByZWRpY3RlZAorZXZlbnQ6MHg0MDMgY291bnRlcnM6MSwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpKUl8zMV9OT19QUkVESUNUSU9OUyA6IDMtMSBKUiAkMzEgKHJldHVybikgaW5zdHJ1Y3Rpb25zIG5vdCBwcmVkaWN0ZWQKK2V2ZW50OjB4NDA0IGNvdW50ZXJzOjEsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SVRMQl9NSVNTRVMgOiA0LTEgSW5zdHJ1Y3Rpb24gbWljcm8tVExCIG1pc3NlcworZXZlbnQ6MHg0MDUgY291bnRlcnM6MSwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpKVExCX0lOU05fTUlTU0VTIDogNS0xIEpvaW50IFRMQiBpbnN0cnVjdGlvbiBtaXNzZXMKK2V2ZW50OjB4NDA2IGNvdW50ZXJzOjEsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SUNBQ0hFX01JU1NFUyA6IDYtMSBJbnN0cnVjdGlvbiBjYWNoZSBtaXNzZXMsIGluY2x1ZGVzIG1pc3NlcyBmcm9tIGZldGNoLWFoZWFkIGFuZCBzcGVjdWxhdGlvbgorCitldmVudDoweDQwOCBjb3VudGVyczoxLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlBEVFJBQ0VfQkFDS19TVEFMTFMgOiA4LTEgUER0cmFjZSBiYWNrIHN0YWxscworZXZlbnQ6MHg0MDkgY291bnRlcnM6MSwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpLSUxMRURfRkVUQ0hfU0xPVFMgOiA5LTEgVmFsaWQgZmV0Y2ggc2xvdHMga2lsbGVkIGR1ZSB0byB0YWtlbiBicmFuY2hlcy9qdW1wcyBvciBzdGFsbGluZyBpbnN0cnVjdGlvbnMKKworZXZlbnQ6MHg0MGIgY291bnRlcnM6MSwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJRlVfSURVX05PX0ZFVENIX0NZQ0xFUyA6IDExLTEgQ3ljbGVzIElGVS1JRFUgZ2F0ZSBvcGVuIGJ1dCBubyBpbnN0cnVjdGlvbnMgZmV0Y2hlZCBieSBJRlUKKworZXZlbnQ6MHg0MGQgY291bnRlcnM6MSwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpERFExX0ZVTExfRFJfU1RBTExTIDogMTMtMSBEUiBzdGFnZSBzdGFsbCBjeWNsZXMgZHVlIHRvIEREUTEgKEFHRU4gb3V0LW9mLW9yZGVyIGRpc3BhdGNoIHF1ZXVlKSBmdWxsCitldmVudDoweDQwZSBjb3VudGVyczoxLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkFHQ0JfRlVMTF9EUl9TVEFMTFMgOiAxNC0xIERSIHN0YWdlIHN0YWxsIGN5Y2xlcyBkdWUgdG8gQUdDQiAoQUdFTiBjb21wbGV0aW9uIGJ1ZmZlcnMpIGZ1bGwKK2V2ZW50OjB4NDBmIGNvdW50ZXJzOjEsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SU9EUV9GVUxMX0RSX1NUQUxMUyA6IDE1LTEgRFIgc3RhZ2Ugc3RhbGwgY3ljbGVzIGR1ZSB0byBJT0RRIChkYXRhIGNvbW1pbmcgYmFjayBmcm9tIElPKSBmdWxsCitldmVudDoweDQxMCBjb3VudGVyczoxLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkFHRU5fRU1QVFlfQ1lDTEVTIDogMTYtMSBERFExIChBR0VOIG91dC1vZi1vcmRlciBkaXNwYXRjaCBxdWV1ZSkgZW1wdHkgY3ljbGVzCitldmVudDoweDQxMSBjb3VudGVyczoxLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkFHRU5fT1BFUkFORFNfTk9UX1JFQURZX0NZQ0xFUyA6IDE3LTEgRERRMSAoQUdFTiBvdXQtb2Ytb3JkZXIgZGlzcGF0Y2ggcXVldWUpIG5vIGlzc3VlIGN5Y2xlcyB3aXRoIHZhbGlkIGluc3RydWN0aW9ucyBidXQgb3BlcmFuZHMgbm90IHJlYWR5CitldmVudDoweDQxMiBjb3VudGVyczoxLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkFHRU5fTk9fSVNTVUVTX0NZQ0xFUyA6IDE4LTEgRERRMSAoQUdFTiBvdXQtb2Ytb3JkZXIgZGlzcGF0Y2ggcXVldWUpIG5vIGlzc3VlIGN5Y2xlcyB3aXRoIHZhbGlkIGluc3RydWN0aW9ucyBkdWUgdG8gb3BlcmFuZChzKSBub3QgYXZhaWxhYmxlLCBub24taXNzdWVkIHN0b3JlcyBibG9ja2luZyByZWFkeSB0byBpc3N1ZSBsb2Fkcywgb3Igbm9uLWlzc3VlZCBDQUNIRU9QcyBibG9ja2luZyByZWFkeSB0byBpc3N1ZSBsb2FkcworZXZlbnQ6MHg0MTMgY291bnRlcnM6MSwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpBR0VOX0JVQkJMRV9DWUNMRVMgOiAxOS0xIEREUTEgKEFHRU4gb3V0LW9mLW9yZGVyIGRpc3BhdGNoIHF1ZXVlKSBidWJibGVzIGR1ZSB0byBNRkMyIGRhdGEgd3JpdGUgb3IgY2FjaGUgYWNjZXNzIGZyb20gRlNCCitldmVudDoweDQxNCBjb3VudGVyczoxLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRVQUxfSVNTVUVfQ1lDTEVTIDogMjAtMSBCb3RoIEREUTAgKEFMVSBvdXQtb2Ytb3JkZXIgZGlzcGF0Y2ggcXVldWUpIGFuZCBERFExIChBR0VOIG91dC1vZi1vcmRlciBkaXNwYXRjaCBxdWV1ZSkgdmFsaWQgaW5zdHJ1Y3Rpb24gaXNzdWUgY3ljbGVzCitldmVudDoweDQxNSBjb3VudGVyczoxLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOk9PT19BR0VOX0lTU1VFX0NZQ0xFUyA6IDIxLTEgT3V0LW9mLW9yZGVyIEFHRU4gaXNzdWUgY3ljbGVzIChpc3N1ZWQgaW5zdHJ1Y3Rpb24gaXMgbm90IHRoZSBvbGRlc3QgaW4gdGhlIHBvb2wpCitldmVudDoweDQxNiBjb3VudGVyczoxLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRDQUNIRV9MSU5FX1JFRklMTF9SRVFVRVNUUyA6IDIyLTEgRGF0YSBjYWNoZSBsaW5lIGxvYWRzIChsaW5lIHJlZmlsbCByZXF1ZXN0cykKK2V2ZW50OjB4NDE3IGNvdW50ZXJzOjEsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RENBQ0hFX0FDQ0VTU0VTIDogMjMtMSBEYXRhIGNhY2hlIGFjY2Vzc2VzCitldmVudDoweDQxOCBjb3VudGVyczoxLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRDQUNIRV9NSVNTRVMgOiAyNC0xIERhdGEgY2FjaGUgbWlzc2VzCitldmVudDoweDQxOSBjb3VudGVyczoxLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkpUTEJfREFUQV9NSVNTRVMgOiAyNS0xIEpvaW50IFRMQiBkYXRhIChub24taW5zdHJ1Y3Rpb24pIG1pc3NlcworZXZlbnQ6MHg0MWEgY291bnRlcnM6MSwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpWQV9UUkFOU0FMVElPTl9DT1JORVJfQ0FTRVMgOiAyNi0xIFZpcnR1YWwgbWVtb3J5IGFkZHJlc3MgdHJhbnNsYXRpb24gc3lub255bXMsIGhvbW9ueW1zLCBhbmQgYWxpYXNlcyAobG9hZHMvc3RvcmVzIHRyZWF0ZWQgYXMgbWlzcyBpbiB0aGUgY2FjaGUpCitldmVudDoweDQxYiBjb3VudGVyczoxLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkxPQURfU1RPUkVfTk9fRklMTF9SRVFVRVNUUyA6IDI3LTEgTG9hZC9zdG9yZSBncmFkdWF0aW9ucyBub3QgcmVzdWx0aW5nIGluIGEgYnVzIHJlcXVlc3QgYmVjYXVzZSBtaXNzZXMgYXQgaW50ZWdlciBwaXBlIGdyYWR1YXRpb24gdHVybiBpbnRvIGhpdCBvciBtZXJnZSB3aXRoIG91dHN0YW5kaW5nIGZpbGwgcmVxdWVzdAorZXZlbnQ6MHg0MWMgY291bnRlcnM6MSwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpMMl9DQUNIRV9BQ0NFU1NFUyA6IDI4LTEgQWNjZXNzZXMgdG8gdGhlIEwyIGNhY2hlCitldmVudDoweDQxZCBjb3VudGVyczoxLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkwyX0NBQ0hFX01JU1NfQ1lDTEVTIDogMjktMSBDeWNsZXMgYSBMMiBtaXNzIGlzIG91dHN0YW5kaW5nLCBidXQgbm90IG5lY2Vzc2FyaWx5IHN0YWxsaW5nIHRoZSBwaXBlbGluZQorZXZlbnQ6MHg0MWUgY291bnRlcnM6MSwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpGU0JfT1ZFUl81MF9GVUxMIDogMzAtMSBGU0IgPiA1MCUgZnVsbAorZXZlbnQ6MHg0MWYgY291bnRlcnM6MSwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpMRFFfT1ZFUl81MF9GVUxMIDogMzEtMSBMRFEgPiA1MCUgZnVsbAorZXZlbnQ6MHg0MjAgY291bnRlcnM6MSwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpXQkJfT1ZFUl81MF9GVUxMIDogMzItMSBXQkIgPiA1MCUgZnVsbAorCitldmVudDoweDQyMyBjb3VudGVyczoxLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkNQMV9DUDJfTE9BRF9JTlNOUyA6IDM1LTEgQ1AxL0NQMiBsb2FkIGluc3RydWN0aW9ucyBncmFkdWF0ZWQKK2V2ZW50OjB4NDI0IGNvdW50ZXJzOjEsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6TUlTUFJFRElDVEVEX0pSXzMxX0lOU05TIDogMzYtMSBqciAkMzEgaW5zdHJ1Y3Rpb25zIGdyYWR1YXRlZCBhZnRlciBtaXNwcmVkaWN0CitldmVudDoweDQyNSBjb3VudGVyczoxLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkNQMV9DUDJfQ09ORF9CUkFOQ0hfSU5TTlMgOiAzNy0xIENQMS9DUDIgY29uZGl0aW9uYWwgYnJhbmNoIGluc3RydWN0aW9ucyBncmFkdWF0ZWQKK2V2ZW50OjB4NDI2IGNvdW50ZXJzOjEsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6TUlTUFJFRElDVEVEX0JSQU5DSF9MSUtFTFlfSU5TTlMgOiAzOC0xIE1pc3ByZWRpY3RlZCBicmFuY2ggbGlrZWx5IGluc3RydWN0aW9ucyBncmFkdWF0ZWQKK2V2ZW50OjB4NDI3IGNvdW50ZXJzOjEsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6TUlTUFJFRElDVEVEX0JSQU5DSF9JTlNOUyA6IDM5LTEgTWlzcHJlZGljdGVkIGJyYW5jaGVzIGdyYWR1YXRlZAorZXZlbnQ6MHg0MjggY291bnRlcnM6MSwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpGUFVfSU5TTlMgOiA0MC0xIEZQVSBpbnN0cnVjdGlvbnMgZ3JhZHVhdGVkCitldmVudDoweDQyOSBjb3VudGVyczoxLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlNUT1JFX0lOU05TIDogNDEtMSBTdG9yZSBpbnN0cnVjdGlvbnMgZ3JhZHVhdGVkIGluY2x1ZGluZyBDUDEgYW5zIENQMiBzdG9yZXMKK2V2ZW50OjB4NDJhIGNvdW50ZXJzOjEsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6TUlQUzE2X0lOU05TIDogNDItMSBNSVBTMTYgaW5zdHJ1Y3Rpb25zIGdyYWR1YXRlZAorZXZlbnQ6MHg0MmIgY291bnRlcnM6MSwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpOVF9NVUxfRElWX0lOU05TIDogNDMtMSBJbnRlZ2VyIG11bHRpcGx5L2RpdmlkZSBpbnN0cnVjdGlvbnMgZ3JhZHVhdGVkCitldmVudDoweDQyYyBjb3VudGVyczoxLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkFMVV9EU1BfU0FUVVJBVElPTl9JTlNOUyA6IDQ0LTEgQUxVLURTUCBncmFkdWF0ZWQsIHJlc3VsdCB3YXMgc2F0dXJhdGVkCitldmVudDoweDQyZCBjb3VudGVyczoxLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOk1EVV9EU1BfU0FUVVJBVElPTl9JTlNOUyA6IDQ1LTEgTURVLURTUCBncmFkdWF0ZWQsIHJlc3VsdCB3YXMgc2F0dXJhdGVkCitldmVudDoweDQyZSBjb3VudGVyczoxLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlVOQ0FDSEVEX1NUT1JFX0lOU05TIDogNDYtMSBVbmNhY2hlZCBzdG9yZXMgZ3JhZHVhdGVkCisKK2V2ZW50OjB4NDMzIGNvdW50ZXJzOjEsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RkFJTEVEX1NDX0lOU05TIDogNTEtMSBTQyBpbnN0cnVjdGlvbnMgZmFpbGVkCitldmVudDoweDQzNCBjb3VudGVyczoxLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkNBQ0hFX0hJVF9QUkVGRVRDSF9JTlNOUyA6IDUyLTEgUFJFRkVUQ0ggaW5zdHJ1Y3Rpb25zIHdoaWNoIGRpZCBub3RoaW5nLCBiZWNhdXNlIHRoZXkgaGl0IGluIHRoZSBjYWNoZQorZXZlbnQ6MHg0MzUgY291bnRlcnM6MSwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpMT0FEX01JU1NfSU5TTlMgOiA1My0xIENhY2hlYWJsZSBsb2FkIGluc3RydWN0aW9ucyB0aGF0IG1pc3MgaW4gdGhlIGNhY2hlIGdyYWR1YXRlZAorZXZlbnQ6MHg0MzYgY291bnRlcnM6MSwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpUV09fSU5TTlNfQ1lDTEVTIDogNTQtMSBUd28gaW5zdHJ1Y3Rpb25zIGdyYWR1YXRlZCBjeWNsZXMKK2V2ZW50OjB4NDM3IGNvdW50ZXJzOjEsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6Q1AxX0NQMl9TVE9SRV9JTlNOUyA6IDU1LTEgQ1AxL0NQMiBTdG9yZSBncmFkdWF0ZWQKK2V2ZW50OjB4NDNhIGNvdW50ZXJzOjEsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6R1JBRFVBVElPTl9SRVBMQVlTIDogNTgtMSBSZXBsYXlzIGluaXRpYXRlZCBmcm9tIGdyYWR1YXRpb24KK2V2ZW50OjB4NDNlIGNvdW50ZXJzOjEsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RFNQUkFNX0VWRU5UUyA6IDYyLTEgSW1wbGVtZW50YXRpb24gc3BlY2lmaWMgZXZlbnRzIGZyb20gdGhlIERTUFJBTSBibG9jaworCitldmVudDoweDQ0MCBjb3VudGVyczowLDIgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlNZU1RFTV9FVkVOVF8xIDogNjQtMSBJbXBsZW1lbnRhdGlvbiBzcGVjaWZpYyBzeXN0ZW0gZXZlbnQgMQorZXZlbnQ6MHg0NDEgY291bnRlcnM6MCwyIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpTWVNURU1fRVZFTlRfMyA6IDY1LTEgSW1wbGVtZW50YXRpb24gc3BlY2lmaWMgc3lzdGVtIGV2ZW50IDMKK2V2ZW50OjB4NDQyIGNvdW50ZXJzOjAsMiB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6U1lTVEVNX0VWRU5UXzUgOiA2Ni0xIEltcGxlbWVudGF0aW9uIHNwZWNpZmljIHN5c3RlbSBldmVudCA1CitldmVudDoweDQ0MyBjb3VudGVyczowLDIgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlNZU1RFTV9FVkVOVF83IDogNjctMSBJbXBsZW1lbnRhdGlvbiBzcGVjaWZpYyBzeXN0ZW0gZXZlbnQgNworZXZlbnQ6MHg0NDQgY291bnRlcnM6MCwyIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpPQ1BfQUxMX0NBQ0hFQUJMRV9SRVFVRVNUUyA6IDY4LTEgQWxsIE9DUCBjYWNoZWFibGUgcmVxdWVzdHMgYWNjZXB0ZWQKK2V2ZW50OjB4NDQ1IGNvdW50ZXJzOjAsMiB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6T0NQX1JFQURfQ0FDSEVBQkxFX1JFUVVFU1RTIDogNjktMSBPQ1AgY2FjaGVhYmxlIHJlYWQgcmVxdWVzdCBhY2NlcHRlZAorZXZlbnQ6MHg0NDYgY291bnRlcnM6MCwyIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpPQ1BfV1JJVEVfQ0FDSEVBQkxFX1JFUVVFU1RTIDogNzAtMSBPQ1AgY2FjaGVhYmxlIHdyaXRlIHJlcXVlc3QgYWNjZXB0ZWQKKworZXZlbnQ6MHg0NGEgY291bnRlcnM6MCwyIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpGU0JfMjVfNTBfRlVMTCA6IDc0LTEgRlNCIDI1LTUwJSBmdWxsCitldmVudDoweDQ0YiBjb3VudGVyczowLDIgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkxEUV8yNV81MF9GVUxMIDogNzUtMSBMRFEgMjUtNTAlIGZ1bGwKK2V2ZW50OjB4NDRjIGNvdW50ZXJzOjAsMiB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6V0JCXzI1XzUwX0ZVTEwgOiA3Ni0xIFdCQiAyNS01MCUgZnVsbApkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL21pcHMvNzRLL3VuaXRfbWFza3MgYi9vcHJvZmlsZS0wLjkuNy9ldmVudHMvbWlwcy83NEsvdW5pdF9tYXNrcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzc5ZGNmCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL21pcHMvNzRLL3VuaXRfbWFza3MKQEAgLTAsMCArMSw1IEBACisjCisjIE1JUFMgNzRLIHBvc3NpYmxlIHVuaXQgbWFza3MKKyMKK25hbWU6emVybyB0eXBlOm1hbmRhdG9yeSBkZWZhdWx0OjB4MAorCTB4MCBObyB1bml0IG1hc2sKZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2V2ZW50cy9taXBzL2xvb25nc29uMi9ldmVudHMgYi9vcHJvZmlsZS0wLjkuNy9ldmVudHMvbWlwcy9sb29uZ3NvbjIvZXZlbnRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4YTQ3MmIKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9ldmVudHMvbWlwcy9sb29uZ3NvbjIvZXZlbnRzCkBAIC0wLDAgKzEsMzQgQEAKKyMgbG9vbmdzb24yIEV2ZW50cworIworZXZlbnQ6MHgwMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOkNQVV9DTEtfVU5IQUxURUQgOiBDeWNsZXMgb3V0c2lkZSBvZiBoYWx0c3RhdGUKK2V2ZW50OjB4MDEgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06NTAwMCBuYW1lOkJSQU5DSF9JTlNUUlVDVElPTlMgOiBCcmFuY2ggaW5zdHJ1Y3Rpb25zCitldmVudDoweDAyIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjQwMCBuYW1lOkpVTVBfSU5TVFJVQ1RJT05TIDogSlIgaW5zdHJ1Y3Rpb25zCitldmVudDoweDAzIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkpSMzFfSU5TVFJVQ1RJT05TIDogSlIocnM9MzEpIGluc3RydWN0aW9ucworZXZlbnQ6MHgwNCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJQ0FDSEVfTUlTU0VTIDogSW5zdHJ1Y3Rpb24gY2FjaGUgbWlzc2VzCitldmVudDoweDA1IGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkFMVTFfSVNTVUVEIDogQUxVMSBvcGVyYXRpb24gaXNzdWVkCitldmVudDoweDA2IGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjgwMDAgbmFtZTpNRU1fSVNTVUVEIDogTWVtb3J5IHJlYWQvd3JpdGUgaXNzdWVkCitldmVudDoweDA3IGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjMwMCBuYW1lOkZBTFUxX0lTU1VFRCA6IEZsb2F0IEFMVTEgb3BlcmF0aW9uIGlzc3VlZAorZXZlbnQ6MHgwOCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToyMDAgbmFtZTpCSFRfQlJBTkNIX0lOU1RSVUNUSU9OUyA6IEJIVCBwcmVkaWN0aW9uIGluc3RydWN0aW9ucworZXZlbnQ6MHgwOSBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToyMDAgbmFtZTpNRU1fUkVBRCA6IFJlYWQgZnJvbSBwcmltYXJ5IG1lbW9yeQorZXZlbnQ6MHgwYSBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTozMDAgbmFtZTpGUVVFVUVfRlVMTCA6IEZpeCBxdWV1ZSBmdWxsCitldmVudDoweDBiIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjMwMCBuYW1lOlJPUV9GVUxMIDogUmVvcmRlciBxdWV1ZSBmdWxsCitldmVudDoweDBjIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjMwMCBuYW1lOkNQMF9RVUVVRV9GVUxMIDogQ1AwIHF1ZXVlIGZ1bGwKK2V2ZW50OjB4MGQgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MzAwIG5hbWU6VExCX1JFRklMTCA6IFRMQiByZWZpbGwgZXhjZXB0aW9uCitldmVudDoweDBlIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjUgbmFtZTpFWENFUFRJT04gOiBFeGNlcHRpb25zCitldmVudDoweDBmIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjMwMCBuYW1lOklOVEVSTkFMX0VYQ0VQVElPTiA6IEludGVybmFsIGV4Y2VwdGlvbnMKK2V2ZW50OjB4MTAgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06NTAwMCBuYW1lOklOU1RSVUNUSU9OX0NPTU1JVFRFRCA6IEluc3RydWN0aW9uIGNvbW1pdHRlZCAKK2V2ZW50OjB4MTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QlJBTkNIRVNfTUlTUFJFRElDVEVEIDogQnJhbmNoIG1pc3ByZWRpY3RlZAorZXZlbnQ6MHgxMiBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToyMDAgbmFtZTpKUl9NSVNQUkVESUNURUQgOiBKUiBtaXNwcmVkaWN0ZWQKK2V2ZW50OjB4MTMgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MjAwIG5hbWU6SlIzMV9NSVNQUkVESUNURUQgOiBKUjMxIG1pc3ByZWRpY3RlZAorZXZlbnQ6MHgxNCBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpEQ0FDSEVfTUlTU0VTIDogRGF0YSBjYWNoZSBtaXNzZXMKK2V2ZW50OjB4MTUgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QUxVMl9JU1NVRUQgOiBBTFUyIG9wZXJhdGlvbiBpc3N1ZWQKK2V2ZW50OjB4MTYgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RkFMVTJfSVNTVUVEIDogRkFMVTIgb3BlcmF0aW9uIGlzc3VlZAorZXZlbnQ6MHgxNyBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpVTkNBQ0hFRF9BQ0NFU1MgOiBVbmNhY2hlZCBhY2Nlc3NlcworZXZlbnQ6MHgxOCBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpCSFRfTUlTUFJFRElDVEVEIDogQnJhbmNoIGhpc3RvcnkgdGFibGUgbWlzcHJlZGljdGVkCitldmVudDoweDE5IGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjUwMDAgbmFtZTpNRU1fV1JJVEUgOiBXcml0ZSB0byBtZW1vcnkKK2V2ZW50OjB4MWEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RlRRX0ZVTEwgOiBGbG9hdCBxdWV1ZSBmdWxsCitldmVudDoweDFiIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkJSQU5DSF9RVUVVRV9GVUxMIDogQnJhbmNoIHF1ZXVlIGZ1bGwKK2V2ZW50OjB4MWMgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SVRMQl9NSVNTRVMgOiBJbnN0cnVjdGlvbiBUTEIgbWlzc2VzCitldmVudDoweDFkIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlRPVEFMX0VYQ0VQVElPTlMgOiBUb3RhbCBleGNlcHRpb25zCitldmVudDoweDFlIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkxPQURfU1BFQ1VMQVRJT05fTUlTU0VTIDogTG9hZCBzcGVjdWxhdGlvbiBtaXNzZXMKK2V2ZW50OjB4MWYgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6Q1AwUV9GT1JXQVJEX1ZBTElEIDogQ1AwIHF1ZXVlIGZvcndhcmQgdmFsaWQKZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2V2ZW50cy9taXBzL2xvb25nc29uMi91bml0X21hc2tzIGIvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL21pcHMvbG9vbmdzb24yL3VuaXRfbWFza3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQ0Y2U1YgotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2V2ZW50cy9taXBzL2xvb25nc29uMi91bml0X21hc2tzCkBAIC0wLDAgKzEsNCBAQAorIyBsb29uZ3NvbjIgcG9zc2libGUgdW5pdCBtYXNrcworIworbmFtZTp6ZXJvIHR5cGU6bWFuZGF0b3J5IGRlZmF1bHQ6MHgwCisJMHgwIE5vIHVuaXQgbWFzawpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL21pcHMvcjEwMDAwL2V2ZW50cyBiL29wcm9maWxlLTAuOS43L2V2ZW50cy9taXBzL3IxMDAwMC9ldmVudHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjM3Y2MwNgotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2V2ZW50cy9taXBzL3IxMDAwMC9ldmVudHMKQEAgLTAsMCArMSwzNiBAQAorIworIyBSMTAwMDAgZXZlbnRzCisjCisjIFRoZSBzYW1lIGV2ZW50IG51bWJlcnMgbWVhbiBkaWZmZXJlbnQgdGhpbmdzIG9uIHRoZSB0d28gY291bnRlcnMKKyMKK2V2ZW50OjB4MDAgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpDWUNMRVMgOiBDeWNsZXMKK2V2ZW50OjB4MDEgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SU5TVFJVQ1RJT05TX0lTU1VFRCA6IEluc3RydWN0aW9ucyBpc3N1ZWQKK2V2ZW50OjB4MDEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SU5TVFJVQ1RJT05TX0dSQURVQVRFRCA6IEluc3RydWN0aW9ucyBncmFkdWF0ZWQKK2V2ZW50OjB4MDIgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6TE9BRF9QUkVGRVRDX1NZTkNfQ0FDSEVPUF9JU1NVRUQgOiBMb2FkIC8gcHJlZmV0Y2ggLyBzeW5jIC8gQ2FjaGVPcCBpc3N1ZWQKK2V2ZW50OjB4MDIgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6TE9BRF9QUkVGRVRDX1NZTkNfQ0FDSEVPUF9HUkFEVUFURUQgOiBMb2FkIC8gcHJlZmV0Y2ggLyBzeW5jIC8gQ2FjaGVPcCBncmFkdWF0ZWQKK2V2ZW50OjB4MDMgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6U1RPUkVTX0lTU1VFRCA6IFN0b3JlcyBpc3N1ZWQKK2V2ZW50OjB4MDMgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6U1RPUkVTX0dSQURVQVRFRCA6IFN0b3JlcyBncmFkdWF0ZWQKK2V2ZW50OjB4MDQgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6U1RPUkVfQ09ORF9JU1NVRUQgOiBTdG9yZSBjb25kaXRpb25hbCBpc3N1ZWQKK2V2ZW50OjB4MDQgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6U1RPUkVfQ09ORF9HUkFEVUFURUQgOiBTdG9yZSBjb25kaXRpb25hbCBncmFkdWF0ZWQKK2V2ZW50OjB4MDUgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RkFJTEVEX1NUT1JFX0NPTkRJVElPTkFMIDogRmFpbGVkIHN0b3JlIGNvbmRpdGlvbmFsCitldmVudDoweDA1IGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkZQX0lOU1RSVUNUT05fR1JBRFVBVEVEIDogRmxvYXRpbmctcG9pbnQgaW5zdHJ1Y3Rpb25zIGdyYWR1YXRlZAorZXZlbnQ6MHgwNiBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpCUkFOQ0hFU19SRVNPTFZFRCA6IEJyYW5jaGVzIHJlc29sdmVkCitldmVudDoweDA2IGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlFVQURXT1JEU19XQl9GUk9NX1BSSU1BUllfRENBQ0hFIDogUXVhZHdvcmRzIHdyaXR0ZW4gYmFjayBmcm9tIHByaW1hcnkgZGF0YSBjYWNoZQorZXZlbnQ6MHgwNyBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpRVUFEV09SRFNfV0JfRlJPTV9TQ0FDSEUgOiBRdWFkd29yZHMgd3JpdHRlbiBiYWNrIGZyb20gc2Vjb25kYXJ5IGNhY2hlCitldmVudDoweDA3IGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlRMQl9SRUZJTExfRVhDRVBUSU9OUyA6IFRMQiByZWZpbGwgZXhjZXB0aW9ucworZXZlbnQ6MHgwOCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpDT1JSRUNUQUJMRV9FQ0NfRVJST1JTX1NDQUNIRSA6IENvcnJlY3RhYmxlIEVDQyBlcnJvcnMgb24gc2Vjb25kYXJ5IGNhY2hlIGRhdGEKK2V2ZW50OjB4MDggY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QlJBTkNIRVNfTUlTUFJFRElDVEVEIDogQnJhbmNoZXMgbWlzcHJlZGljdGVkCitldmVudDoweDA5IGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOklOU1RSVUNUSU9OX0NBQ0hFX01JU1NFUyA6IEluc3RydWN0aW9uIGNhY2hlIG1pc3NlcworZXZlbnQ6MHgwOSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpTQ0FDSEVfTE9BRF9TVE9SRV9DQUNIRU9QX09QRVJBVElPTlMgOiBTZWNvbmRhcnkgY2FjaGUgbG9hZCAvIHN0b3JlIGFuZCBjYWNoZS1vcHMgb3BlcmF0aW9ucworZXZlbnQ6MHgwYSBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpTQ0FDSEVfTUlTU0VTX0lOU1RSVUNUSU9OIDogU2Vjb25kYXJ5IGNhY2hlIG1pc3NlcyAoaW5zdHJ1Y3Rpb24pCitldmVudDoweDBhIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlNDQUNIRV9NSVNTRVNfREFUQSA6IFNlY29uZGFyeSBjYWNoZSBtaXNzZXMgKGRhdGEpCitldmVudDoweDBiIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlNDQUNIRV9XQVlfTUlTUFJFRElDVEVEX0lOU04gOiBTZWNvbmRhcnkgY2FjaGUgd2F5IG1pc3ByZWRpY3RlZCAoaW5zdHJ1Y3Rpb24pCitldmVudDoweDBiIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlNDQUNIRV9XQVlfTUlTUFJFRElDVEVEX0RBVEEgOiBTZWNvbmRhcnkgY2FjaGUgd2F5IG1pc3ByZWRpY3RlZCAoZGF0YSkKK2V2ZW50OjB4MGMgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RVhURVJOQUxfSU5URVJWRU5USU9OX1JRIDogRXh0ZXJuYWwgaW50ZXJ2ZW50aW9uIHJlcXVlc3RzCitldmVudDoweDBjIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkVYVEVSTkFMX0lOVEVSVkVOVElPTl9SUV9ISVRTX1NDQUNIRSA6IEV4dGVybmFsIGludGVydmVudGlvbiByZXF1ZXN0IGlzIGRldGVybWluZWQgdG8gaGF2ZSBoaXQgaW4gc2Vjb25kYXJ5IGNhY2hlCitldmVudDoweDBkIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkVYVEVSTkFMX0lOVkFMSURBVEVfUlEgOiBFeHRlcm5hbCBpbnZhbGlkYXRlIHJlcXVlc3RzCitldmVudDoweDBkIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkVYVEVSTkFMX0lOVkFMSURBVEVfUlFfSElUU19TQ0FDSEUgOiBFeHRlcm5hbCBpbnZhbGlkYXRlIHJlcXVlc3QgaXMgZGV0ZXJtaW5lZCB0byBoYXZlIGhpdCBpbiBzZWNvbmRhcnkgY2FjaGUKK2V2ZW50OjB4MGUgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RlVOQ1RJT05BTF9VTklUX0NPTVBMRVRJT05fQ1lDTEVTIDogRnVuY3Rpb25hbCB1bml0IGNvbXBsZXRpb24gY3ljbGVzCitldmVudDoweDBlIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlNUT1JFU19PUl9TVE9SRV9QUkVGX1RPX0NMRUFORVhDTFVTSVZFX1NDQUNIRV9CTE9DS1MgOiBTdG9yZXMgb3IgcHJlZmV0Y2hlcyB3aXRoIHN0b3JlIGhpbnQgdG8gQ2xlYW5FeGNsdXNpdmUgc2Vjb25kYXJ5IGNhY2hlIGJsb2NrcworZXZlbnQ6MHgwZiBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJTlNUUlVDVElPTl9HUkFEVUFURUQgOiBJbnN0cnVjdGlvbnMgZ3JhZHVhdGVkCitldmVudDoweDBmIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlNUT1JFU19PUl9TVE9SRV9QUkVGX1RPX1NIRF9TQ0FDSEVfQkxPQ0tTIDogU3RvcmVzIG9yIHByZWZldGNoZXMgd2l0aCBzdG9yZSBoaW50IHRvIFNoYXJlZCBzZWNvbmRhcnkgY2FjaGUgYmxvY2tzCmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9ldmVudHMvbWlwcy9yMTAwMDAvdW5pdF9tYXNrcyBiL29wcm9maWxlLTAuOS43L2V2ZW50cy9taXBzL3IxMDAwMC91bml0X21hc2tzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhYjdkODMKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9ldmVudHMvbWlwcy9yMTAwMDAvdW5pdF9tYXNrcwpAQCAtMCwwICsxLDUgQEAKKyMKKyMgTUlQUyBSMTAwMDAgcG9zc2libGUgdW5pdCBtYXNrcworIworbmFtZTp6ZXJvIHR5cGU6bWFuZGF0b3J5IGRlZmF1bHQ6MHgwCisJMHgwIE5vIHVuaXQgbWFzawpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL21pcHMvcjEyMDAwL2V2ZW50cyBiL29wcm9maWxlLTAuOS43L2V2ZW50cy9taXBzL3IxMjAwMC9ldmVudHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWZhNjc3OQotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2V2ZW50cy9taXBzL3IxMjAwMC9ldmVudHMKQEAgLTAsMCArMSwzNSBAQAorIworIyBSMTIwMDAgZXZlbnRzCisjCitldmVudDoweDAgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6Q1lDTEVTIDogQ3ljbGVzCitldmVudDoweDEgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6REVDT0RFRF9JTlNUUlVDVElPTlMgOiBEZWNvZGVkIGluc3RydWN0aW9ucworZXZlbnQ6MHgyIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRFQ09ERURfTE9BRFMgOiBEZWNvZGVkIGxvYWRzCitldmVudDoweDMgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6REVDT0RFRF9TVE9SRVMgOiBEZWNvZGVkIHN0b3JlcworZXZlbnQ6MHg0IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOk1JU1NfVEFCTEVfT0NDVVBBTkNZIDogTWlzcyBIYW5kbGluZyBUYWJsZSBPY2N1cGFuY3kKK2V2ZW50OjB4NSBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpGQUlMRURfU1RPUkVfQ09ORElUSU9OQUwgOiBGYWlsZWQgc3RvcmUgY29uZGl0aW9uYWwKK2V2ZW50OjB4NiBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpSRVNPTFZFRF9CUkFOQ0hfQ09ORElUSU9OQUwgOiBSZXNvbHZlZCBjb25kaXRpb25hbCBicmFuY2hlcworZXZlbnQ6MHg3IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlFVQURXT1JSRFNfV1JJVEVCQUNLX0ZST01fU0MgOiBRdWFkd29yZHMgd3JpdHRlbiBiYWNrIGZyb20gc2Vjb25kYXJ5IGNhY2hlCitldmVudDoweDggY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6Q09SUkVDVEFCTEVfRUNDX0VSUk9SUyA6IENvcnJlY3RhYmxlIEVDQyBlcnJvcnMgb24gc2Vjb25kYXJ5IGNhY2hlIGRhdGEKK2V2ZW50OjB4OSBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJQ0FDSEVfTUlTU0VTIDogSW5zdHJ1Y3Rpb24gY2FjaGUgbWlzc2VzCitldmVudDoweGEgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SU5TVFJVQ1RJT05fU0VDT05EQVJZX0NBQ0hFX01JU1NFUyA6IFNlY29uZGFyeSBjYWNoZSBtaXNzZXMgKGluc3RydWN0aW9uKQorZXZlbnQ6MHhiIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlNFQ09OREFSWV9DQUNIRV9XQVlfTUlTU1BSRURJQ1RFRCA6IFNlY29uZGFyeSBjYWNoZSB3YXkgbWlzcHJlZGljdGVkIChpbnN0cnVjdGlvbikKK2V2ZW50OjB4YyBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJTlRFUlZFTlRJT05fUkVRVUVTVFMgOiBFeHRlcm5hbCBpbnRlcnZlbnRpb24gcmVxdWVzdHMKK2V2ZW50OjB4ZCBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpFWFRFUk5BTF9SRVFVRVNUUyA6IEV4dGVybmFsIGludmFsaWRhdGUgcmVxdWVzdHMKKworZXZlbnQ6MHhmIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOklOU1RSVUNUSU9OU19HUkFEVUFURUQgOiBJbnN0cnVjdGlvbnMgZ3JhZHVhdGVkCitldmVudDoweDEwIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlBSRUZFVENIX0lOU1RSVUNUSU9OU19FWEVDVVRFRCA6IEV4ZWN1dGVkIHByZWZldGNoIGluc3RydWN0aW9ucworZXZlbnQ6MHgxMSBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpQUkVGRVRDSF9NSVNTRVNfSU5fRENBQ0hFIDogUHJpbWFyeSBkYXRhIGNhY2hlIG1pc3NlcyBieSBwcmVmZXRjaCBpbnN0cnVjdGlvbnMKK2V2ZW50OjB4MTIgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6R1JBRFVBVEVEX0xPQURTIDogR3JhZHVhdGVkIGxvYWRzCitldmVudDoweDEzIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkdSQURVQVRFRF9TVE9SRVMgOiBHcmFkdWF0ZWQgc3RvcmVzCitldmVudDoweDE0IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkdSQURVQVRFRF9TVE9SRV9DT05ESVRJT05BTFMgOiBHcmFkdWF0ZWQgc3RvcmUgY29uZGl0aW9uYWxzCitldmVudDoweDE1IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkdSQURVQVRFRF9GUF9JTlNUUlVDVElPTlMgOiBHcmFkdWF0ZWQgZmxvYXRpbmcgcG9pbnQgaW5zdHJ1Y3Rpb25zCitldmVudDoweDE2IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlFVQURXT1JEUyA6IFF1YWR3b3JkcyB3cml0dGVuIGJhY2sgZnJvbSBwcmltYXJ5IGRhdGEgY2FjaGUKK2V2ZW50OjB4MTcgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6VExCX01JU1NFUyA6IFRMQiBtaXNzZXMKK2V2ZW50OjB4MTggY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6TUlTUFJFRElDVEVEX0JSQU5DSEVTIDogTWlzcHJlZGljdGVkIGJyYW5jaGVzCitldmVudDoweDE5IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRDQUNIRV9NSVNTRVMgOiBQcmltYXJ5IGRhdGEgY2FjaGUgbWlzc2VzCitldmVudDoweDFhIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlNDQUNIRV9NSVNTRVMgOiBTZWNvbmRhcnkgY2FjaGUgbWlzc2VzIChkYXRhKQorZXZlbnQ6MHgxYiBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpTQ0FDSEVfV0FZX01JU1BSRURJQ1RJT04gOiBNaXNwcmVkaWN0aW9uIGZyb20gc2NhY2hlIHdheSBwcmVkaWN0aW9uIHRhYmxlIChkYXRhKQorZXZlbnQ6MHgxYyBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpTVEFURV9PRl9TQ0FDSEVfSU5URVJWRU5USU9OX0hJVCA6IFN0YXRlIG9mIGV4dGVybmFsIGludGVydmVudGlvbiBoaXQgaW4gc2Vjb25kYXJ5IGNhY2hlCitldmVudDoweDFkIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlNUQVRFX09GX0VYVEVSTkFMX0lOVkFMSURBVElPTl9ISVQgOiBTdGF0ZSBvZiBleHRlcm5hbCBpbnZhbGlkYXRpb24gaGl0cyBpbiBzZWNvbmRhcnkgY2FjaGUKK2V2ZW50OjB4MWUgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6U1RPUkVfUFJFRkVUQ0hfRVhDTFVTSVZFX1RPX0NMRUFOX1NDX0JMT0NLIDogU3RvcmUvcHJlZmV0Y2ggZXhjbHVzaXZlIHRvIGNsZWFuIGJsb2NrIGluIHNlY29uZGFyeSBjYWNoZQorZXZlbnQ6MHgxZiBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpTVE9SRV9QUkVGRVRDSF9FWENMVVNJVkVfU0hBUkVEX1NDX0JMT0NLIDogU3RvcmUvcHJlZmV0Y2ggZXhjbHVzaXZlIHRvIHNoYXJlZCBibG9jayBpbiBzZWNvbmRhcnkKZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2V2ZW50cy9taXBzL3IxMjAwMC91bml0X21hc2tzIGIvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL21pcHMvcjEyMDAwL3VuaXRfbWFza3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjBjODI1MAotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2V2ZW50cy9taXBzL3IxMjAwMC91bml0X21hc2tzCkBAIC0wLDAgKzEsNyBAQAorIworIyBNSVBTIFIxMjAwMCBwb3NzaWJsZSB1bml0IG1hc2tzCisjCisjIFdlIGRvbid0IHN1cHBvcnQgdGhlIFIxMjAwMCBjb25kaXRpb25hbCBjb3VudCBmZWF0dXJlIHlldC4KKyMKK25hbWU6emVybyB0eXBlOm1hbmRhdG9yeSBkZWZhdWx0OjB4MAorCTB4MCBObyB1bml0IG1hc2sKZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2V2ZW50cy9taXBzL3JtNzAwMC9ldmVudHMgYi9vcHJvZmlsZS0wLjkuNy9ldmVudHMvbWlwcy9ybTcwMDAvZXZlbnRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmY2RlN2EKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9ldmVudHMvbWlwcy9ybTcwMDAvZXZlbnRzCkBAIC0wLDAgKzEsMzQgQEAKKyMKKyMgUk03MDAwIGV2ZW50cworIworZXZlbnQ6MHgwMCBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkNZQ0xFUyA6IENsb2NrIGN5Y2xlcworZXZlbnQ6MHgwMSBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOklOU1RSVUNUSU9OU19JU1NVRUQgOiBUb3RhbCBpbnN0cnVjdGlvbnMgaXNzdWVkCitldmVudDoweDAyIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RlBfSU5TVFJVQ1RJT05TX0lTU1VFRCA6IEZsb2F0aW5nLXBvaW50IGluc3RydWN0aW9ucyBpc3N1ZWQKK2V2ZW50OjB4MDMgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJTlRFR0VSX0lOU1RSVUNUSU9OU19JU1NVRUQgOiBJbnRlZ2VyIGluc3RydWN0aW9ucyBpc3N1ZWQKK2V2ZW50OjB4MDQgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpMT0FEX0lOU1RSVUNUSU9OU19JU1NVRUQgOiBMb2FkIGluc3RydWN0aW9ucyBpc3N1ZWQKK2V2ZW50OjB4MDUgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpTVE9SRV9JTlNUUlVDVElPTlNfSVNTVUVEIDogU3RvcmUgaW5zdHJ1Y3Rpb25zIGlzc3VlZAorZXZlbnQ6MHgwNiBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRVQUxfSVNTVUVEX1BBSVJTIDogRHVhbCBpc3N1ZWQgcGFpcnMKK2V2ZW50OjB4MDcgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpCUkFOQ0hfUFJFRkVUQ0hFUyA6IEJyYW5jaCBwcmVmZXRjaGVzCitldmVudDoweDA4IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RVhURVJOQUxfQ0FDSEVfTUlTU0VTIDogRXh0ZXJuYWwgQ2FjaGUgTWlzc2VzCitldmVudDoweDA5IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6U1RBTExfQ1lDTEVTIDogU3RhbGwgY3ljbGVzCitldmVudDoweDBhIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6U0NBQ0hFX01JU1NFUyA6IFNlY29uZGFyeSBjYWNoZSBtaXNzZXMKK2V2ZW50OjB4MGIgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJQ0FDSEVfTUlTU0VTIDogSW5zdHJ1Y3Rpb24gY2FjaGUgbWlzc2VzCitldmVudDoweDBjIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RENBQ0hFX01JU1NFUyA6IERhdGEgY2FjaGUgbWlzc2VzCitldmVudDoweDBkIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RFRMQl9NSVNTRVMgOiBEYXRhIFRMQiBtaXNzZXMKK2V2ZW50OjB4MGUgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJVExCX01JU1NFUyA6IEluc3RydWN0aW9uIFRMQiBtaXNzZXMKK2V2ZW50OjB4MGYgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpKVExCX0lOU1RSVUNUSU9OX01JU1NFUyA6IEpvaW50IFRMQiBpbnN0cnVjdGlvbiBtaXNzZXMKK2V2ZW50OjB4MTAgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpKVExCX0RBVEFfTUlTU0VTIDogSm9pbnQgVExCIGRhdGEgbWlzc2VzCitldmVudDoweDExIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QlJBTkNIRVNfVEFLRU4gOiBCcmFuY2hlcyB0YWtlbgorZXZlbnQ6MHgxMiBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkJSQU5DSEVTX0lTU1VFRCA6IEJyYW5jaGVzIGlzc3VlZAorZXZlbnQ6MHgxMyBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlNDQUNIRV9XUklURUJBQ0tTIDogU2Vjb25kYXJ5IGNhY2hlIHdyaXRlYmFja3MKK2V2ZW50OjB4MTQgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpQQ0FDSEVfV1JJVEVCQUNLUyA6IFByaW1hcnkgY2FjaGUgd3JpdGViYWNrcworZXZlbnQ6MHgxNSBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRDQUNIRV9NSVNTX1NUQUxMX0NZQ0xFUyA6IERjYWNoZSBtaXNzIHN0YWxsIGN5Y2xlcyAoY3ljbGVzIHdoZXJlIGJvdGggY2FjaGUgbWlzcyB0b2tlbnMgdGFrZW4gYW5kIGEgdGhpcmQgdHJ5IGlzIHJlcXVlc3RlZCkKK2V2ZW50OjB4MTYgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpDQUNIRV9NSVNTRVMgOiBDYWNoZSBtaXNzZXMKK2V2ZW50OjB4MTcgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpGUF9FWENFUFRJT05fU1RBTExfQ1lDTEVTIDogRlAgcG9zc2libGUgZXhjZXB0aW9uIGN5Y2xlcworZXZlbnQ6MHgxOCBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlNMSVBfQ1lDTEVTX0RVRV9NVUxUSVBMSUVSX0JVU1kgOiBTbGlwIEN5Y2xlcyBkdWUgdG8gbXVsdGlwbGllciBidXN5CitldmVudDoweDE5IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6Q09QMF9TTElQX0NZQ0xFUyA6IENvcHJvY2Vzc29yIDAgc2xpcCBjeWNsZXMKK2V2ZW50OjB4MWEgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpTTElQX0NZQ0xFU19QRU5ESU5HX05PTl9CTEtJTkdfTE9BRCA6IFNsaXAgY3ljbGVzIGR1ZSB0byBwZW5kaW5nIG5vbi1ibG9ja2luZyBsb2FkcworZXZlbnQ6MHgxYyBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOldSSVRFX0JVRkZFUl9GVUxMX1NUQUxMX0NZQ0xFUyA6IFdyaXRlIGJ1ZmZlciBmdWxsIHN0YWxsIGN5Y2xlcworZXZlbnQ6MHgxZCBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkNBQ0hFX0lOU1RSVUNUSU9OX1NUQUxMX0NZQ0xFUyA6IENhY2hlIGluc3RydWN0aW9uIHN0YWxsIGN5Y2xlcworZXZlbnQ6MHgxZSBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOk1VTFRJUExJRVJfU1RBTExfQ1lDTEVTIDogTXVsdGlwbGllciBzdGFsbCBjeWNsZXMKK2V2ZW50OjB4MWYgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpTVEFMTF9DWUNMRVNfUEVORElOR19OT05fQkxLSU5HX0xPQUQgOiBTdGFsbCBjeWNsZXMgZHVlIHRvIHBlbmRpbmcgbm9uLWJsb2NraW5nIGxvYWRzIC0gc3RhbGwgc3RhcnQgb2YgZXhjZXB0aW9uCmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9ldmVudHMvbWlwcy9ybTcwMDAvdW5pdF9tYXNrcyBiL29wcm9maWxlLTAuOS43L2V2ZW50cy9taXBzL3JtNzAwMC91bml0X21hc2tzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiMTFiN2MKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9ldmVudHMvbWlwcy9ybTcwMDAvdW5pdF9tYXNrcwpAQCAtMCwwICsxLDUgQEAKKyMKKyMgTUlQUyBSTTcwMDAgcG9zc2libGUgdW5pdCBtYXNrcworIworbmFtZTp6ZXJvIHR5cGU6bWFuZGF0b3J5IGRlZmF1bHQ6MHgwCisJMHgwIE5vIHVuaXQgbWFzawpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL21pcHMvcm05MDAwL2V2ZW50cyBiL29wcm9maWxlLTAuOS43L2V2ZW50cy9taXBzL3JtOTAwMC9ldmVudHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzFkODQ5MQotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2V2ZW50cy9taXBzL3JtOTAwMC9ldmVudHMKQEAgLTAsMCArMSwzMiBAQAorIworIyBSTTkwMDAgZXZlbnRzCisjCitldmVudDoweDAwIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6Q1lDTEVTIDogUHJvY2Vzc29yIGNsb2NrIGN5Y2xlcworZXZlbnQ6MHgwMSBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOklOU1RSVUNUSU9OU19JU1NVRUQgOiBJbnN0cnVjdGlvbnMgaXNzdWVkCitldmVudDoweDAyIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RlBfSU5TVFJVQ1RJT05TX0lTU1VFRCA6IEZsb2F0aW5nLXBvaW50IGluc3RydWN0aW9ucyBpc3N1ZWQKK2V2ZW50OjB4MDMgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJTlRfSU5TVFJVQ1RJT05TX0lTU1VFRCA6IEludGVnZXIgaW5zdHJ1Y3Rpb25zIGlzc3VlZAorZXZlbnQ6MHgwNCBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkxPQURfSU5TVFJVQ1RJT05TX0lTU1VFRCA6IExvYWQgaW5zdHJ1Y3Rpb25zIGlzc3VlZAorZXZlbnQ6MHgwNSBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlNUT1JFX0lOU1RSVUNUSU9OU19JU1NVRUQgOiBTdG9yZSBpbnN0cnVjdGlvbnMgaXNzdWVkCitldmVudDoweDA2IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SU5TVFJVQ1RJT05TX0RVQUxfSVNTVUVEIDogRHVhbC1pc3N1ZWQgaW5zdHJ1Y3Rpb24gcGFpcnMKK2V2ZW50OjB4MDcgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpCUkFOQ0hfTUlTU1BSRURJQ1RTIDogQnJhbmNoIG1pc3ByZWRpY3Rpb25zCitldmVudDoweDA5IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6U1RBTExfQ1lDTEVTIDogU3RhbGwgY3ljbGVzCitldmVudDoweDBhIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6TDJfQ0FDSEVfTUlTU0VTIDogTDIgY2FjaGUgbWlzc2VzCitldmVudDoweDBiIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SUNBQ0hFX01JU1NFUyA6IEljYWNoZSBtaXNzZXMKK2V2ZW50OjB4MGMgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpEQ0FDSEVfTUlTU0VTIDogRGNhY2hlIG1pc3NlcworZXZlbnQ6MHgwZCBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRUTEJfTUlTU0VTIDogRGF0YSBUTEIgbWlzc2VzCitldmVudDoweDBlIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SVRMQl9NSVNTRVMgOiBJbnN0cnVjdGlvbiBUTEIgbWlzc2VzCitldmVudDoweDBmIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SlRMQl9JTlNUUlVDVElPTl9NSVNTRVMgOiBKb2ludCBUTEIgaW5zdHJ1Y3Rpb24gbWlzc2VzCitldmVudDoweDEwIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SlRMQl9EQVRBX01JU1NFUyA6IEpvaW50IFRMQiBkYXRhIG1pc3NlcworZXZlbnQ6MHgxMSBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkJSQU5DSEVTX1RBS0VOIDogQnJhbmNoZXMgdGFrZW4KK2V2ZW50OjB4MTIgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpCUkFOQ0hFU19JU1NVRUQgOiBCcmFuY2ggaW5zdHJ1Y3Rpb25zIGlzc3VlZAorZXZlbnQ6MHgxMyBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkwyX1dSSVRFQkFDS1MgOiBMMiBjYWNoZSB3cml0ZWJhY2tzCitldmVudDoweDE0IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RENBQ0hFX1dSSVRFQkFDS1MgOiBEY2FjaGUgd3JpdGViYWNrcworZXZlbnQ6MHgxNSBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRDQUNIRV9NSVNTX1NUQUxMX0NZQ0xFUyA6IERjYWNoZS1taXNzIHN0YWxsIGN5Y2xlcworZXZlbnQ6MHgxNiBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkNBQ0hFX1JFTUlTU0VTIDogQ2FjaGUgcmVtaXNzZXMKK2V2ZW50OjB4MTcgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpGUF9QT1NTSUJMRV9FWENFUFRJT05fQ1lDTEVTIDogRmxvYXRpbmctcG9pbnQgcG9zc2libGUgZXhjZXB0aW9uIGN5Y2xlcworZXZlbnQ6MHgxOCBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOk1VTFRJUExJRVJfQlVTWV9TTElQX0NZQ0xFUyA6IFNsaXAgY3ljbGVzIGR1ZSB0byBidXN5IG11bHRpcGxpZXIKK2V2ZW50OjB4MTkgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpDT1AwX1NMSVBfQ1lDTEVTIDogQ28tcHJvY2Vzc29yIDAgc2xpcCBjeWNsZXMKK2V2ZW50OjB4MWEgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpOT05CTE9DS0lOR19MT0FEX1NMSVBfQ1lDTEVTIDogU2xpcCBjeWNsZXMgZHVlIHRvIHBlbmRpbmcgbm9uLWJsb2NraW5nIGxvYWRzCitldmVudDoweDFiIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6V1JJVEVfQlVGRkVSX0ZVTExfU1RBTExfQ1lDTEVTIDogU3RhbGwgY3ljbGVzIGR1ZSB0byBhIGZ1bGwgd3JpdGUgYnVmZmVyCitldmVudDoweDFjIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6Q0FDSEVfSU5TTl9TVEFMTF9DWUNMRVMgOiBTdGFsbCBjeWNsZXMgZHVlIHRvIGNhY2hlIGluc3RydWN0aW9ucworZXZlbnQ6MHgxZSBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOk5PTkJMT0NLSU5HX0xPQURfUEVORElOR19FWENFUFRJT05fU1RBTExfQ1lDTEVTIDogU3RhbGwgY3ljbGVzIGR1ZSB0byBwZW5kaW5nIG5vbi1ibG9ja2luZyBsb2FkcyAtIHN0YWxsIHN0YXJ0IG9mIGV4Y2VwdGlvbgpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL21pcHMvcm05MDAwL3VuaXRfbWFza3MgYi9vcHJvZmlsZS0wLjkuNy9ldmVudHMvbWlwcy9ybTkwMDAvdW5pdF9tYXNrcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42M2JhOWRhCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL21pcHMvcm05MDAwL3VuaXRfbWFza3MKQEAgLTAsMCArMSw1IEBACisjCisjIE1JUFMgUk05MDAwIHBvc3NpYmxlIHVuaXQgbWFza3MKKyMKK25hbWU6emVybyB0eXBlOm1hbmRhdG9yeSBkZWZhdWx0OjB4MAorCTB4MCBObyB1bml0IG1hc2sKZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2V2ZW50cy9taXBzL3NiMS9ldmVudHMgYi9vcHJvZmlsZS0wLjkuNy9ldmVudHMvbWlwcy9zYjEvZXZlbnRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmYzI4Y2UKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9ldmVudHMvbWlwcy9zYjEvZXZlbnRzCkBAIC0wLDAgKzEsNzMgQEAKKyMKKyMgU2lieXRlIFNCMSBldmVudHMKKyMKKworZXZlbnQ6MHgxMCBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpDWUNMRVMgOkVsYXBzZWQgY3ljbGVzCisKKyMgRXhlY3V0aW9uIENvdW50cyBhbmQgSW5zdHJ1Y3Rpb24gU2xvdHRpbmcKK2V2ZW50OjB4MjggY291bnRlcnM6MSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOklTU1VFX0wwIDpJc3N1ZSB0byBMMAorZXZlbnQ6MHgyOSBjb3VudGVyczoxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SVNTVUVfTDEgOklzc3VlIHRvIEwwCitldmVudDoweDJhIGNvdW50ZXJzOjEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJU1NVRV9FMCA6SXNzdWUgdG8gRTAKK2V2ZW50OjB4MmIgY291bnRlcnM6MSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOklTU1VFX0UxIDpJc3N1ZSB0byBFMQorCisjIEV4cGxhaW5pbmcgU3ViLVBlYWsgUGVyZm9ybWFuY2U6IFBpcGVsaW5lIFRyYXBzCitldmVudDoweDJmIGNvdW50ZXJzOjEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpCUkFOQ0hfTUlTU1BSRURJQ1RTIDpCcmFuY2ggbWlzcHJlZGljdHMKK2V2ZW50OjB4MWQgY291bnRlcnM6MSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOk1CT1hfUkVQTEFZIDpNQk9YIHJlcGxheQorZXZlbnQ6MHgxYyBjb3VudGVyczoxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RENGSUZPIDpEQ0ZJRk8KK2V2ZW50OjB4MWUgY291bnRlcnM6MSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRBVEFfREVQRU5ERU5DWV9SRVBMQVkgOkRhdGEgZGVwZW5kZW5jeSByZXBsYXkKK2V2ZW50OjB4MWIgY291bnRlcnM6MSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRDQUNIRV9GSUxMX1JFUExBWSA6RGNhY2hlIGZpbGwgcmVwbGF5CitldmVudDoweDFmIGNvdW50ZXJzOjEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpBTllfUkVQTEFZIDpBbnkgcmVwbGF5IGV4Y2VwdCBtaXNwcmVkaWN0CisKKworIyBFeHBsYWluaW5nIFN1Yi1QZWFrIFBlcmZvcm1hbmNlOiBzdGF0aWMgYW5kIGR5bmFtaWMgc3RhbGxzCitldmVudDoweDIwIGNvdW50ZXJzOjEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpNQVhfSVNTVUUgOk1heCBpc3N1ZQorZXZlbnQ6MHgyMSBjb3VudGVyczoxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6Tk9fVkFMSURfSU5TTiA6Tm8gdmFsaWQgaW5zdHIgdG8gaXNzdWUKK2V2ZW50OjB4MjIgY291bnRlcnM6MSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkNPTlNVTUVSX1dBSVRJTkdfRk9SX0xPQUQgOmxvYWQgY29uc3VtZXIgd2FpdGluZyBmb3IgZGZpbGwKK2V2ZW50OjB4MjMgY291bnRlcnM6MSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOk5PVF9EQVRBX1JFQURZIDpOb3QgZGF0YSByZWFkeQorZXZlbnQ6MHgyNCBjb3VudGVyczoxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6UkVTT1VSQ0VfQ09OU1RSQUlOVCA6UmVzb3VyY2UgKEwwLzEgRTAvMSkgY29uc3RyYWludAorZXZlbnQ6MHgyNSBjb3VudGVyczoxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SVNTVUVfQ09ORkxJQ1RfRFVFX0lNSVNTIDppc3N1ZSBjb25mbGljdCBkdWUgdG8gaW1pc3MgdXNpbmcgTFMwCitldmVudDoweDI2IGNvdW50ZXJzOjEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJU1NVRV9DT05GTElDVF9EVUVfREZJTEwgOmlzc3VlIGNvbmZsaWN0IGR1ZSB0byBkZmlsbCB1c2luZyBMUzAvMQorCisjIEdyb3VwaW5nIENvLWlzc3VlZCBJbnN0cnVjdGlvbnMKK2V2ZW50OjB4MjcgY291bnRlcnM6MSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOklOU05fU1RBR0U0IDpPbmUgb3IgbW9yZSBpbnN0cnVjdGlvbnMgc3Vydml2ZXMgc3RhZ2UgNAorCisjIEJyYW5jaCBpbmZvcm1hdGlvbgorZXZlbnQ6MHgyYyBjb3VudGVyczoxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QlJBTkNIX1NUQUdFNCA6QnJhbmNoIHN1cnZpdmVkIHN0YWdlIDQKK2V2ZW50OjB4MmQgY291bnRlcnM6MSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkJSQU5DSF9SRUFMTFlfVEFLRU4gOkNvbmRpdGlvbmFsIGJyYW5jaCB3YXMgcmVhbGx5IHRha2VuCitldmVudDoweDJlIGNvdW50ZXJzOjEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpCUkFOQ0hfUFJFRElDVEVEX1RBS0VOIDpQcmVkaWN0ZWQgdGFrZW4gY29uZGl0aW9uYWwgYnJhbmNoCisKKyMgQ2FjaGUgYWNjZXNzCitldmVudDoweDEgY291bnRlcnM6MSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlJRX0xFTkdUSCA6UmVhZCBxdWV1ZSBsZW5ndGgKK2V2ZW50OjB4MiBjb3VudGVyczoxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6VU5DQUNIRURfUlFfTEVOR1RIIDpOdW1iZXIgb2YgdmFsaWQgdW5jYWNoZWQgZW50cmllcyBpbiByZWFkIHF1ZXVlCitldmVudDoweDMgY291bnRlcnM6MSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRDQUNIRV9SRUFEX01JU1MgOkRjYWNoZSByZWFkIHJlc3VsdHMgaW4gYSBtaXNzCisKK2V2ZW50OjB4YSBjb3VudGVyczoxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RENBQ0hFX0ZJTExFRF9TSERfTk9OQ19FWEMgOkRjYWNoZSBpcyBmaWxsZWQgKHNoYXJlZCwgbm9uYywgZXhjbHVzaXZlKQorZXZlbnQ6MHhiIGNvdW50ZXJzOjEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpEQ0FDSEVfRklMTF9TSEFSRURfTElORSA6RGNhY2hlIGlzIGZpbGxlZCB3aXRoIHNoYXJlZCBsaW5lCitldmVudDoweGMgY291bnRlcnM6MSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRDQUNIRV9SRUFEX01JU1MgOkRjYWNoZSByZWFkIHJlc3VsdHMgaW4gYSBtaXNzCitldmVudDoweGYgY291bnRlcnM6MSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOldSSVRFQkFDS19SRVRVUk5TIDpOdW1iZXIgb2YgaW5zdHJ1Y3Rpb24gcmV0dXJucworZXZlbnQ6MHhkIGNvdW50ZXJzOjEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpWSUNUSU1fV1JJVEVCQUNLIDpBIHdyaXRlYmFjayBvY2N1cnMgZHVlIHRvIHJlcGxhY2VtZW50CitldmVudDoweDcgY291bnRlcnM6MSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlVQR1JBREVfU0hBUkVEX1RPX0VYQ0xVU0lWRSA6QSBsaW5lIGlzIHVwZ3JhZGVkIGZyb20gc2hhcmVkIHRvIGV4Y2x1c2l2ZQorZXZlbnQ6MHg2IGNvdW50ZXJzOjEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpMRF9TVF9ISVRTX1BSRUZFVENIX0lOX1FVRVVFIDpMb2FkL3N0b3JlIGhpdHMgcHJlZmV0Y2ggaW4gcmVhZCBxdWV1ZQorZXZlbnQ6MHg1IGNvdW50ZXJzOjEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpQUkVGRVRDSF9ISVRTX0NBQ0hFX09SX1JFQURfUSA6UHJlZmV0Y2ggaGl0cyBpbiBjYWNoZSBvciByZWFkIHF1ZXVlCitldmVudDoweDQgY291bnRlcnM6MSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlJFQURfSElUU19SRUFEX1EgOlJlYWQgaGl0cyBpbiByZWFkIHF1ZXVlCisKKyMgQklVCisKK2V2ZW50OjB4MTEgY291bnRlcnM6MSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkJJVV9TVEFMTFNfT05fWkJfQUREUl9CVVMgOkJJVSBzdGFsbHMgb24gWkIgYWRkciBidXMKK2V2ZW50OjB4MTIgY291bnRlcnM6MSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkJJVV9TVEFMTFNfT05fWkJfREFUQV9CVVMgOkJJVSBzdGFsbHMgb24gWkIgZGF0YSBidXMKK2V2ZW50OjB4MTMgY291bnRlcnM6MSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlJFQURfUlFfU0VOVF9UT19BQlVTIDpSZXF1ZXN0cyBzZW50IHRvIFpCIEFidXMKK2V2ZW50OjB4MTQgY291bnRlcnM6MSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlJFQURfUlFfTk9QU19TRU5UX1RPX0FCVVMgOlJlYWQgcmVxdWVzdHMgYW5kIE5PUHMgc2VudCB0byBaQiBBYnVzCitldmVudDoweDE1IGNvdW50ZXJzOjEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpSRUFEX1JRX1NFTlRfVE9fQUJVUyA6UmVhZCByZXF1ZXN0cyBzZW50IHRvIFpCIEFidXMKK2V2ZW50OjB4MTYgY291bnRlcnM6MSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOk1CT1hfUlFfV0hFTl9CSVVfQlVTWSA6TUJPWCByZXF1ZXN0cyB0byBCSVUgd2hlbiBCSVUgYnVzeQorCisjIE11bHRpcHJvY2Vzc29yCitldmVudDoweDFhIGNvdW50ZXJzOjEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpTVE9SRV9DT05EX0ZBSUxFRCA6RmFpbGVkIHN0b3JlIGNvbmRpdGlvbmFsCitldmVudDoweDE2IGNvdW50ZXJzOjEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpTTk9PUF9SUV9ISVRTIDpTbm9vcCByZXF1ZXN0IGhpdHMgYW55d2hlcmUKK2V2ZW50OjB4MTcgY291bnRlcnM6MSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlNOT09QX0FERFJfUV9GVUxMIDpTbm9vcCBhZGRyZXNzIHF1ZXVlIGlzIGZ1bGwKK2V2ZW50OjB4MTggY291bnRlcnM6MSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlJfUkVTUF9PVEhFUl9DT1JFIDpSZWFkIHJlc3BvbnNlIGNvbWVzIGZyb20gdGhlIG90aGVyIGNvcmUKK2V2ZW50OjB4MTkgY291bnRlcnM6MSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlJfUkVTUF9PVEhFUl9DT1JFX0RfTU9EIDpSZWFkIHJlc3BvbnNlIGNvbWVzIGZyb20gdGhlIG90aGVyIGNvcmUgd2l0aCBEX01PRCBzZXQKKworIyBJbnN0cnVjdGlvbiBDb3VudHMKK2V2ZW50OjB4OCBjb3VudGVyczoxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6TE9BRF9TVVJWSVZFRF9TVEFHRTQgOkxvYWQgc3Vydml2ZWQgc3RhZ2UgNAorZXZlbnQ6MHg5IGNvdW50ZXJzOjEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpTVE9SRV9TVVJWSVZFRF9TVEFHRTQgIDpTdG9yZSBzdXJ2aXZlZCBzdGFnZSA0CitldmVudDoweDAgY291bnRlcnM6MSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOklOU05fU1VSVklWRURfU1RBR0U3IDpJbnN0cnVjdGlvbiBzdXJ2aXZlZCBzdGFnZSA3CmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9ldmVudHMvbWlwcy9zYjEvdW5pdF9tYXNrcyBiL29wcm9maWxlLTAuOS43L2V2ZW50cy9taXBzL3NiMS91bml0X21hc2tzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmZDQxZmIKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9ldmVudHMvbWlwcy9zYjEvdW5pdF9tYXNrcwpAQCAtMCwwICsxLDUgQEAKKyMKKyMgU2lieXRlIFNCMSBwb3NzaWJsZSB1bml0IG1hc2tzCisjCituYW1lOnplcm8gdHlwZTptYW5kYXRvcnkgZGVmYXVsdDoweDAKKwkweDAgTm8gdW5pdCBtYXNrCmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9ldmVudHMvbWlwcy92cjU0MzIvZXZlbnRzIGIvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL21pcHMvdnI1NDMyL2V2ZW50cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMWJkODI3Ci0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL21pcHMvdnI1NDMyL2V2ZW50cwpAQCAtMCwwICsxLDE0IEBACisjCisjIFZSNTQzMiBldmVudHMKKyMKK2V2ZW50OjB4MCBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkNZQ0xFUyA6IFByb2Nlc3NvciBjeWNsZXMgKFBDbG9jaykKK2V2ZW50OjB4MSBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOklOU1RSVUNUSU9OU19FWEVDVVRFRCA6IChJbnN0cnVjdGlvbnMgZXhlY3V0ZWQpLzIgYW5kIHRydW5jYXRlZAorZXZlbnQ6MHgyIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6TE9BRF9QUkVGX0NBQ0hFX0lOU1RSVUNUSU9OUyA6IExvYWQsIHByZWZldGNoL0NhY2hlT3BzIGV4ZWN1dGlvbiAobm8gc3luYykKK2V2ZW50OjB4MyBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlNUT1JFUyA6IFN0b3JlIGV4ZWN1dGlvbgorZXZlbnQ6MHg0IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QlJBTkNIRVMgOiBCcmFuY2ggZXhlY3V0aW9uIChubyBqdW1wcyBvciBqdW1wIHJlZ2lzdGVycykKK2V2ZW50OjB4NSBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkZQX0lOU1RSVUNUSU9OUyA6IChGUCBpbnN0cnVjdGlvbiBleGVjdXRpb24pIC8gMiBhbmQgdHJ1bmNhdGVkIGV4Y2x1ZGluZyBjcDEgbG9hZHMgYW5kIHN0b3JlcworZXZlbnQ6MHg2IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RE9VQkxFV09SRFNfRkxVU0hFRCA6IERvdWJsZXdvcmRzIGZsdXNoZWQgdG8gbWFpbiBtZW1vcnkgKG5vIHVuY2FjaGVkIHN0b3JlcykKK2V2ZW50OjB4NyBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkpUTEJfUkVGSUxMUyA6IEpUTEIgcmVmaWxscworZXZlbnQ6MHg4IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RENBQ0hFX01JU1NFUyA6IERhdGEgY2FjaGUgbWlzc2VzIChubyBJLWNhY2hlIG1pc3NlcykKK2V2ZW50OjB4OSBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOklDQUNIRV9NSVNTRVMgOiBJbnN0cnVjdGlvbiBjYWNoZSBtaXNzZXMgKG5vIEQtY2FjaGUgbWlzc2VzKQorZXZlbnQ6MHhhIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QlJBTkNIRVNfTUlTUFJFRElDVEVEIDogQnJhbmNoZXMgbWlzcHJlZGljdGVkCmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9ldmVudHMvbWlwcy92cjU0MzIvdW5pdF9tYXNrcyBiL29wcm9maWxlLTAuOS43L2V2ZW50cy9taXBzL3ZyNTQzMi91bml0X21hc2tzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyMzlkMTIKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9ldmVudHMvbWlwcy92cjU0MzIvdW5pdF9tYXNrcwpAQCAtMCwwICsxLDUgQEAKKyMKKyMgTUlQUyBWUjU0MzIgcG9zc2libGUgdW5pdCBtYXNrcworIworbmFtZTp6ZXJvIHR5cGU6bWFuZGF0b3J5IGRlZmF1bHQ6MHgwCisJMHgwIE5vIHVuaXQgbWFzawpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL21pcHMvdnI1NTAwL2V2ZW50cyBiL29wcm9maWxlLTAuOS43L2V2ZW50cy9taXBzL3ZyNTUwMC9ldmVudHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzU0MDE3NgotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2V2ZW50cy9taXBzL3ZyNTUwMC9ldmVudHMKQEAgLTAsMCArMSwxNiBAQAorIworIyBWUjU1MDAsIFZSNTUzMiBhbmQgVlI3NzAxIGV2ZW50cworIworIyBWZXJ5IHNpbWlsYXIgdG8gd2hhdCB0aGUgVlI1NDMyIHByb3ZpZGVzLgorIworZXZlbnQ6MHgwIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6Q1lDTEVTIDogUHJvY2Vzc29yIGNsb2NrIGN5Y2xlcworZXZlbnQ6MHgxIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SU5TVFJVQ1RJT05TX0VYRUNVVEVEIDogSW5zdHJ1Y3Rpb25zIGV4ZWN1dGVkCitldmVudDoweDIgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpMT0FEX1BSRUZfQ0FDSEVfSU5TVFJVQ1RJT05TIDogRXhlY3V0aW9uIG9mIGxvYWQvcHJlZmV0Y2gvY2FjaGUgaW5zdHJ1Y3Rpb24KK2V2ZW50OjB4MyBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlNUT1JFUyA6IEV4ZWN1dGlvbiBvZiBzdG9yZSBpbnN0cnVjdGlvbgorZXZlbnQ6MHg0IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QlJBTkNIRVMgOiBFeGVjdXRpb24gb2YgYnJhbmNoIGluc3RydWN0aW9uCitldmVudDoweDUgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpGUF9JTlNUUlVDVElPTlMgOiBFeGVjdXRpb24gb2YgZmxvYXRpbmctcG9pbnQgaW5zdHJ1Y3Rpb24KK2V2ZW50OjB4NiBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRPVUJMRVdPUkRTX0ZMVVNIRUQgOiBEb3VibGV3b3JkIGZsdXNoIHRvIG1haW4gbWVtb3J5CitldmVudDoweDcgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpKVExCX1JFRklMTFMgOiBUTEIgcmVmaWxsCitldmVudDoweDggY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpEQ0FDSEVfTUlTU0VTIDogRGF0YSBjYWNoZSBtaXNzCitldmVudDoweDkgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJQ0FDSEVfTUlTU0VTIDogSW5zdHJ1Y3Rpb24gY2FjaGUgbWlzcworZXZlbnQ6MHhhIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QlJBTkNIRVNfTUlTUFJFRElDVEVEIDogQnJhbmNoIHByZWRpY3Rpb24gbWlzcwpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL21pcHMvdnI1NTAwL3VuaXRfbWFza3MgYi9vcHJvZmlsZS0wLjkuNy9ldmVudHMvbWlwcy92cjU1MDAvdW5pdF9tYXNrcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjY5YTdhCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL21pcHMvdnI1NTAwL3VuaXRfbWFza3MKQEAgLTAsMCArMSw1IEBACisjCisjIE1JUFMgVlI1NTAwIHBvc3NpYmxlIHVuaXQgbWFza3MKKyMKK25hbWU6emVybyB0eXBlOm1hbmRhdG9yeSBkZWZhdWx0OjB4MAorCTB4MCBObyB1bml0IG1hc2sKZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2V2ZW50cy9wcGMvNzQ1MC9ldmVudHMgYi9vcHJvZmlsZS0wLjkuNy9ldmVudHMvcHBjLzc0NTAvZXZlbnRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyNzA0NmYKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9ldmVudHMvcHBjLzc0NTAvZXZlbnRzCkBAIC0wLDAgKzEsMzkgQEAKKyMgNzQ1eCBFdmVudHMKKyMKK2V2ZW50OjB4MSBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTozMDAwIG5hbWU6Q1lDTEVTIDogUHJvY2Vzc29yIGN5Y2xlcworZXZlbnQ6MHgyIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjMwMDAgbmFtZTpDT01QTEVURURfSU5TTlMgOiBDb21wbGV0ZWQgSW5zdHJ1Y3Rpb25zCitldmVudDoweDMgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06MzAwMCBuYW1lOlRCTF9CSVRfVFJBTlNUTlMgOiBUQkwgQml0IFRyYW5zaXRpb25zCitldmVudDoweDQgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06MzAwMCBuYW1lOkRJU1BBVENIRURfSU5TTlMgOiBEaXNwYXRjaGVkIEluc3RydWN0aW9ucworZXZlbnQ6MHg1IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjMwMDAgbmFtZTpQUk9DX1BFUkZNT05fRVhDIDogUHJvY2VzcyBQZXJmb3JtYW5jZSBNb25pdG9yIEV4Y2VwdGlvbgorZXZlbnQ6MHg4IGNvdW50ZXJzOjAsMSwzIHVtOnplcm8gbWluaW11bTozMDAwIG5hbWU6VlBVX0lOU05TIDogVlBVIEluc3RydWN0aW9ucyBDb21wbGV0ZWQKK2V2ZW50OjB4OSBjb3VudGVyczowLDEsMyB1bTp6ZXJvIG1pbmltdW06MzAwMCBuYW1lOlZGUFVfSU5TTlMgOiBWRlBVIEluc3RydWN0aW9ucyBDb21wbGV0ZWQKK2V2ZW50OjB4YSBjb3VudGVyczowLDEsMyB1bTp6ZXJvIG1pbmltdW06MzAwMCBuYW1lOlZJVTFfSU5TTlMgOiBWSVUxIEluc3RydWN0aW9ucyBDb21wbGV0ZWQKK2V2ZW50OjB4YiBjb3VudGVyczowLDEsMyB1bTp6ZXJvIG1pbmltdW06MzAwMCBuYW1lOlZJVTJfSU5TTlMgOiBWSVUyIEluc3RydWN0aW9ucyBDb21wbGV0ZWQKK2V2ZW50OjB4ZSBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjMwMDAgbmFtZTpWUFVfQ1lDTEVTIDogQ3ljbGVzIGEgVlBVIEluc3RydWN0aW9uCitldmVudDoweGYgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTozMDAwIG5hbWU6VkZQVV9DWUNMRVMgOiBDeWNsZXMgYSBWRlBVIEluc3RydWN0aW9uCitldmVudDoweDEwIGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06MzAwMCBuYW1lOlZJVTFfQ1lDTEVTIDogQ3ljbGVzIGEgVklVMSBJbnN0cnVjdGlvbgorZXZlbnQ6MHgxMSBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjMwMDAgbmFtZTpWSVUyX0NZQ0xFUyA6IEN5Y2xlcyBhIFZJVTIgSW5zdHJ1Y3Rpb24KK2V2ZW50OjB4MTIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MzAwMCBuYW1lOkRUTEJfTUlTU0VTIDogRFRMQiBtaXNzZXMKK2V2ZW50OjB4MTQgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTozMDAwIG5hbWU6U1RPUkVfSU5TTlMgOiBTdG9yZSBJbnN0cnVjdGlvbnMKK2V2ZW50OjB4MTUgY291bnRlcnM6MCwxIHVtOnplcm8gbWluaW11bTozMDAwIG5hbWU6TDFfSUNBQ0hFX01JU1NFUyA6IEwxIEluc3RydWN0aW9uIENhY2hlIE1pc3NlcworZXZlbnQ6MHgxNiBjb3VudGVyczowLDEgdW06emVybyBtaW5pbXVtOjMwMDAgbmFtZTpMMV9EQVRBX1NOT09QUyA6IEwxIERhdGEgU25vb3BzCitldmVudDoweDE3IGNvdW50ZXJzOjAsMSB1bTp6ZXJvIG1pbmltdW06MzAwMCBuYW1lOlVOUkVTT0xWRURfQlJBTkNIRVMgOiBVbnJlc29sdmVkIEJyYW5jaGVzCitldmVudDoweDFjIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjMwMDAgbmFtZTpNSVNQUkVESUNURURfQlJBTkNIRVMgOiBNaXNwcmVkaWN0ZWQgYnJhbmNoZXMKK2V2ZW50OjB4MWQgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MzAwMCBuYW1lOkZPTERFRF9CUkFOQ0hFUyA6IEZvbGRlZCBicmFuY2hlcworZXZlbnQ6MHgxZiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bTozMDAwIG5hbWU6QlJfTE5fU1RBQ0tfTUlTIDogQnJhbmNoIExpbmsgU3RhY2sgTWlzcHJlZGljdGVkCitldmVudDoweDI3IGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjMwMDAgbmFtZTpJVExCX1RBQkxFX0NZQ0xFUyA6IElUTE0gSGFyZHdhcmUgVGFibGUgU2VhcmNoIEN5Y2xlcworZXZlbnQ6MHgyOSBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTozMDAwIG5hbWU6TDFfSUNBQ0hFX0FDQ0VTU0VTIDogTDEgSW5zdHJ1Y3Rpb24gQ2FjaGUgQWNjZXNzZXMKK2V2ZW50OjB4MmEgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MzAwMCBuYW1lOklOU05fQlBfTUFUQ0hFUyA6IEluc3RydWN0aW9uIEJyZWFrcG9pbnQgTWF0Y2hlcworZXZlbnQ6MHgzMiBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTozMDAwIG5hbWU6TDFfRFNOT09QX0hJVFMgOiBMMSBkYXRhIHNub29wIGhpdHMKK2V2ZW50OjB4MzMgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MzAwMCBuYW1lOldSSVRFVEhSVV9TVE9SRVMgOiBXcml0ZS10aHJvdWdoIHN0b3JlcworZXZlbnQ6MHgzNCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTozMDAwIG5hbWU6Q0FDSEVJTkhfU1RPUkVTIDogQ2FjaGUtaW5oaWJpdGVkIHN0b3JlcworZXZlbnQ6MHgzNSBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTozMDAwIG5hbWU6TDFfRExPQURfSElUIDogTDEgZGF0YSBsb2FkIGhpdAorZXZlbnQ6MHgzNiBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTozMDAwIG5hbWU6TDFfRFRPVUNIX0hJVCA6IEwxIGRhdGEgdG91Y2ggaGl0CitldmVudDoweDM3IGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjMwMDAgbmFtZTpMMV9EU1RPUkVfSElUIDogTDEgZGF0YSBzdG9yZSBoaXQKK2V2ZW50OjB4MzggY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MzAwMCBuYW1lOkwxX0RBVEFfSElUUyA6IEwxIGRhdGEgdG90YWwgaGl0cworZXZlbnQ6MHg0MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTozMDAwIG5hbWU6QUxUSVZFQ19MRF9JTlNOU19DT01QTEVURUQgOiBBbHRpdmVjIGxvYWQgaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MHg0MSBjb3VudGVyczowIHVtOnplcm8gbWluaW11bTozMDAwIG5hbWU6RlBfU1RPUkVfSU5TTlNfQ09NUExFVEVEX0xTVSA6IEZsb2F0aW5nIHBvaW50IHN0b3JlIGluc3RydWN0aW9ucyBjb21wbGV0ZWQgaW4gTFNVCitldmVudDoweDRmIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjMwMDAgbmFtZTpGUF9MT0FEX0lOU05TX0NPTVBMRVRFRF9MU1UgOiBGbG9hdGluZyBwb2ludCBsb2FkIGluc3RydWN0aW9ucyBjb21wbGV0ZWQgaW4gTFNVCitldmVudDoweDUwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjMwMDAgbmFtZTpGUF9MRFNJTkdMRV9JTlNOU19DT01QTEVURURfTFNVIDogRmxvYXRpbmcgcG9pbnQgbG9hZCBzaW5nbGUgaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZCBpbiBMU1UKK2V2ZW50OjB4NWUgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MzAwMCBuYW1lOkZQX0RFTk9STUFMSVpFRF9SRVNVTFQgOiBGbG9hdGluZyBwb2ludCBkZW5vcm1hbGl6ZWQgcmVzdWx0CisKZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2V2ZW50cy9wcGMvNzQ1MC91bml0X21hc2tzIGIvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL3BwYy83NDUwL3VuaXRfbWFza3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzNjMTVjMgotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2V2ZW50cy9wcGMvNzQ1MC91bml0X21hc2tzCkBAIC0wLDAgKzEsNCBAQAorIyA3NDV4IHBvc3NpYmxlIHVuaXQgbWFza3MKKyMKK25hbWU6emVybyB0eXBlOm1hbmRhdG9yeSBkZWZhdWx0OjB4MAorCTB4MCBObyB1bml0IG1hc2sKZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2V2ZW50cy9wcGMvZTMwMC9ldmVudHMgYi9vcHJvZmlsZS0wLjkuNy9ldmVudHMvcHBjL2UzMDAvZXZlbnRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3NjkyM2MKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9ldmVudHMvcHBjL2UzMDAvZXZlbnRzCkBAIC0wLDAgKzEsNDAgQEAKKyMgZTMwMCBFdmVudHMKKyMKK2V2ZW50OjB4MSBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTozMDAwIG5hbWU6Q1BVX0NMSyA6IEN5Y2xlcworZXZlbnQ6MHgyIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjMwMDAgbmFtZTpDT01QTEVURURfSU5TTlMgOiBDb21wbGV0ZWQgSW5zdHJ1Y3Rpb25zICgwLCAxLCBvciAyIHBlciBjeWNsZSkKK2V2ZW50OjB4NCBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJTlNUUlVDVElPTl9GRVRDSEVTIDogSW5zdHJ1Y3Rpb24gZmV0Y2hlcworZXZlbnQ6MHg2IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlBNX0VWRU5UX1RSQU5TIDogMCB0byAxIHRyYW5zbGF0aW9ucyBvbiB0aGUgcG1fZXZlbnQgaW5wdXQKK2V2ZW50OjB4NyBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpQTV9FVkVOVF9DWUNMRVMgOiBwcm9jZXNzb3IgYnVzIGN5Y2xlCitldmVudDoweDggY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6Q09NUExFVEVEX0JSQU5DSEVTIDogQnJhbmNoIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjB4OSBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpDT01QTEVURURfTE9BRF9PUFMgOiBMb2FkIG1pY3JvLW9wcyBjb21wbGV0ZWQKK2V2ZW50OjB4YSBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpDT01QTEVURURfU1RPUkVfT1BTIDogU3RvcmUgbWljcm8tb3BzIGNvbXBsZXRlZAorZXZlbnQ6MHhjIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkJSQU5DSEVTX0ZJTklTSEVEIDogQnJhbmNoZXMgZmluaXNoZWQKK2V2ZW50OjB4ZCBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpUQUtFTl9CUkFOQ0hFU19GSU5JU0hFRCA6IFRha2VuIGJyYW5jaGVzIGZpbmlzaGVkCitldmVudDoweGYgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QlJBTkNIRVNfTUlTUFJFRElDVEVEIDogQnJhbmNoIGluc3RydWN0aW9ucyBtaXNwcmVkaWN0ZWQgZHVlIHRvIGRpcmVjdGlvbiwgdGFyZ2V0LCBvciBJQUIgcHJlZGljdGlvbgorZXZlbnQ6MHgxMiBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpERUNPREVfU1RBTExFRCA6IEN5Y2xlcyB0aGUgaW5zdHJ1Y3Rpb24gYnVmZmVyIHdhcyBub3QgZW1wdHksIGJ1dCAwIGluc3RydWN0aW9ucyBkZWNvZGVkCitldmVudDoweDEzIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOklTU1VFX1NUQUxMRUQgOiBDeWNsZXMgdGhlIGlzc3VlIGJ1ZmZlciBpcyBub3QgZW1wdHkgYnV0IDAgaW5zdHJ1Y3Rpb25zIGlzc3VlZCAKK2V2ZW50OjB4MWYgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6Q0FDSEVJTkhJQklURURfQUNDRVNTRVNfVFJBTlNMQVRFRCA6IE51bWJlciBvZiBjYWNoZSBpbmhpYml0ZWQgYWNjZXNzZXMgdHJhbnNsYXRlZCAKK2V2ZW50OjB4M2QgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RkVUQ0hFUyA6IENvdW50cyB0aGUgbnVtYmVyIG9mIGZldGNoZXMgdGhhdCB3cml0ZSBhdCBsZWFzdCBvbmUgaW5zdHJ1Y3Rpb24gdG8gdGhlIGluc3RydWN0aW9uIGJ1ZmZlci4gKFdpdGggaW5zdHJ1Y3Rpb24gZmV0Y2hlZCwgY2FuIHVzZWQgdG8gY29tcHV0ZSBpbnN0cnVjdGlvbnMtcGVyLWZldGNoKSAKK2V2ZW50OjB4M2UgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6TU1VX01JU1NFUyA6IENvdW50cyBpbnN0cnVjdGlvbiBUTEIgbWlzcyBleGNlcHRpb25zIAorZXZlbnQ6MHg0MyBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpCSVVfTUFTVEVSX1JFUVVFU1RTIDogTnVtYmVyIG9mIG1hc3RlciB0cmFuc2FjdGlvbnMuIChOdW1iZXIgb2YgbWFzdGVyIFRTcy4pIAorZXZlbnQ6MHg0NCBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpCSVVfTUFTVEVSX0lfUkVRVUVTVFMgOiBOdW1iZXIgb2YgbWFzdGVyIEktU2lkZSB0cmFuc2FjdGlvbnMuIChOdW1iZXIgb2YgbWFzdGVyIEktU2lkZSBUU3MuKSAKK2V2ZW50OjB4NDUgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QklVX01BU1RFUl9EX1JFUVVFU1RTIDogTnVtYmVyIG9mIG1hc3RlciBELVNpZGUgdHJhbnNhY3Rpb25zLiAoTnVtYmVyIG9mIG1hc3RlciBELVNpZGUgVFNzLikgCitldmVudDoweDQ3IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkJJVV9NQVNURVJfUkVUUklFUyA6IE51bWJlciBvZiB0cmFuc2FjdGlvbnMgd2hpY2ggd2VyZSBpbml0aWF0ZWQgYnkgdGhpcyBwcm9jZXNzb3Igd2hpY2ggd2VyZSByZXRyaWVkIG9uIHRoZSBCSVUgaW50ZXJmYWNlLiAoTnVtYmVyIG9mIG1hc3RlciBBUlRSWXMuKSAKK2V2ZW50OjB4NGEgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6U05PT1BfUFVTSEVTIDogTnVtYmVyIG9mIHNub29wIHB1c2hlcyBmcm9tIGFsbCBELXNpZGUgcmVzb3VyY2VzLiAoQ291bnRzIHNub29wIEFSVFJZL1dPUHMuKSAKK2V2ZW50OjB4NTIgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6UE1DMF9PVkVSRkxPVyA6IENvdW50cyB0aGUgbnVtYmVyIG9mIHRpbWVzIFBNQzBbMzJdIHRyYW5zaXRpb25lZCBmcm9tIDEgdG8gMC4gCitldmVudDoweDUzIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlBNQzFfT1ZFUkZMT1cgOiBDb3VudHMgdGhlIG51bWJlciBvZiB0aW1lcyBQTUMxWzMyXSB0cmFuc2l0aW9uZWQgZnJvbSAxIHRvIDAuIAorZXZlbnQ6MHg1NCBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpQTUMyX09WRVJGTE9XIDogQ291bnRzIHRoZSBudW1iZXIgb2YgdGltZXMgUE1DMlszMl0gdHJhbnNpdGlvbmVkIGZyb20gMSB0byAwLiAKK2V2ZW50OjB4NTUgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6UE1DM19PVkVSRkxPVyA6IENvdW50cyB0aGUgbnVtYmVyIG9mIHRpbWVzIFBNQzNbMzJdIHRyYW5zaXRpb25lZCBmcm9tIDEgdG8gMC4KK2V2ZW50OjB4NTYgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SU5URVJSVVBUUyA6IE51bWJlciBvZiBpbnRlcnJ1cHRzIHRha2VuCitldmVudDoweDU3IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkVYVEVSTkFMX0lOVEVSUlVQVFMgOiBOdW1iZXIgb2YgZXh0ZXJuYWwgaW5wdXQgaW50ZXJydXB0cyB0YWtlbgorZXZlbnQ6MHg1OCBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpDUklUSUNBTF9JTlRFUlJVUFRTIDogTnVtYmVyIG9mIGNyaXRpY2FsIGlucHV0IGludGVycnVwdHMgdGFrZW4KK2V2ZW50OjB4NTkgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6U0NfVFJBUF9JTlRFUlJVUFRTIDogTnVtYmVyIG9mIHN5c3RlbSBjYWxsIGFuZCB0cmFwIGludGVycnVwdHMKK2V2ZW50OjB4NWEgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6VFJBTlNfVEJMIDogQ291bnRzIHRyYW5zaXRpb25zIG9mIHRoZSBUQkwgYml0IHNlbGVjdGVkIGJ5IFBNR0MwW1RCU0VMXQorZXZlbnQ6MHg2MCBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJX0NBQ0hFX0hJVCA6IE51bWJlciBpZiBmZXRjaGVzIHRoYXQgaGl0IGluIGktY2FjaGUgCitldmVudDoweDYxIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOklOU1RSVUNUSU9OU19GT0xERUQgOiBOdW1iZXIgb2YgaW5zdHJ1Y3Rpb25zIGZvbGRlZAorZXZlbnQ6MHg2NCBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpTVEFMTFNfQ09NX0JVRkZFUiA6IEN5Y2xlcyBpc3N1ZSBzdGFsbGVkIGR1ZSB0byBmdWxsIGNvbXBsZXRpb24gYnVmZmVyCitldmVudDoweDY4IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlNUQUxMRURfQ09NUExFVElPTiA6IEN5Y2xlcyB0aGF0IGNvbXBsZXRpb24gaXMgc3RhbGxlZAorZXZlbnQ6MHg2OSBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpTVEFMTEVEX0xPQUQgOiBDeWNsZXMgdGhhdCBjb21wbGV0aW9uIGlzIHN0YWxsZWQgZHVlIHRvIGxvYWQKK2V2ZW50OjB4NmEgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6U1RBTExFRF9GTE9BVCA6IEN5Y2xlcyB0aGF0IGNvbXBsZXRpb24gaXMgc3RhbGxlZCBkdWUgdG8gZnAgaW5zdHJ1Y3Rpb24KK2V2ZW50OjB4NmMgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6TF9TX1NQQUNFIDogTnVtYmVyIG9mIGxvYWRzIGFuZCBzdG9yZXMgdG8gY2FjaGVhYmxlIHNwYWNlIGluIEQgY2FjaGUKK2V2ZW50OjB4NmQgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6TF9TX0hJVCA6IE51bWJlciBvZiBsb2FkcyBhbmQgc3RvcmVzIHRoYXQgaGl0IGluIHRoZSBEIGNhY2hlCmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9ldmVudHMvcHBjL2UzMDAvdW5pdF9tYXNrcyBiL29wcm9maWxlLTAuOS43L2V2ZW50cy9wcGMvZTMwMC91bml0X21hc2tzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlNmE4NjYKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9ldmVudHMvcHBjL2UzMDAvdW5pdF9tYXNrcwpAQCAtMCwwICsxLDQgQEAKKyMgZTMwMCBwb3NzaWJsZSB1bml0IG1hc2tzCisjCituYW1lOnplcm8gdHlwZTptYW5kYXRvcnkgZGVmYXVsdDoweDAKKwkweDAgTm8gdW5pdCBtYXNrCmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9ldmVudHMvcHBjL2U1MDAvZXZlbnRzIGIvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL3BwYy9lNTAwL2V2ZW50cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODFmOGI1Ci0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL3BwYy9lNTAwL2V2ZW50cwpAQCAtMCwwICsxLDgzIEBACisjIGU1MDAgRXZlbnRzCisjCitldmVudDoweDEgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06MzAwMCBuYW1lOkNQVV9DTEsgOiBDeWNsZXMKK2V2ZW50OjB4MiBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTozMDAwIG5hbWU6Q09NUExFVEVEX0lOU05TIDogQ29tcGxldGVkIEluc3RydWN0aW9ucyAoMCwgMSwgb3IgMiBwZXIgY3ljbGUpCitldmVudDoweDMgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6Q09NUExFVEVEX09QUyA6IENvbXBsZXRlZCBNaWNyby1vcHMgKGNvdW50cyAyIGZvciBsb2FkL3N0b3JlIHcvdXBkYXRlKQorZXZlbnQ6MHg0IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOklOU1RSVUNUSU9OX0ZFVENIRVMgOiBJbnN0cnVjdGlvbiBmZXRjaGVzCitldmVudDoweDUgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6REVDT0RFRF9PUFMgOiBNaWNyby1vcHMgZGVjb2RlZAorZXZlbnQ6MHg4IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkNPTVBMRVRFRF9CUkFOQ0hFUyA6IEJyYW5jaCBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDoweDkgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6Q09NUExFVEVEX0xPQURfT1BTIDogTG9hZCBtaWNyby1vcHMgY29tcGxldGVkCitldmVudDoweGEgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6Q09NUExFVEVEX1NUT1JFX09QUyA6IFN0b3JlIG1pY3JvLW9wcyBjb21wbGV0ZWQKK2V2ZW50OjB4YiBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpDT01QTEVUSU9OX1JFRElSRUNUUyA6IE51bWJlciBvZiBjb21wbGV0aW9uIGJ1ZmZlciByZWRpcmVjdHMKK2V2ZW50OjB4YyBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpCUkFOQ0hFU19GSU5JU0hFRCA6IEJyYW5jaGVzIGZpbmlzaGVkCitldmVudDoweGQgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6VEFLRU5fQlJBTkNIRVNfRklOSVNIRUQgOiBUYWtlbiBicmFuY2hlcyBmaW5pc2hlZAorZXZlbnQ6MHhlIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkJJRkZFRF9CUkFOQ0hFU19GSU5JU0hFRCA6IEJpZmZlZCBicmFuY2hlcyBmaW5pc2hlZAorZXZlbnQ6MHhmIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkJSQU5DSEVTX01JU1BSRURJQ1RFRCA6IEJyYW5jaCBpbnN0cnVjdGlvbnMgbWlzcHJlZGljdGVkIGR1ZSB0byBkaXJlY3Rpb24sIHRhcmdldCwgb3IgSUFCIHByZWRpY3Rpb24KK2V2ZW50OjB4MTAgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QlJBTkNIRVNfTUlTUFJFRElDVEVEX0RJUkVDVElPTiA6IEJyYW5jaGVzIG1pc3ByZWRpY3RlZCBkdWUgdG8gZGlyZWN0aW9uIHByZWRpY3Rpb24KK2V2ZW50OjB4MTEgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QlRCX0hJVFMgOiBCcmFuY2hlcyB0aGF0IGhpdCBpbiB0aGUgQlRCLCBvciBtaXNzZWQgYnV0IGFyZSBub3QgdGFrZW4KK2V2ZW50OjB4MTIgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6REVDT0RFX1NUQUxMRUQgOiBDeWNsZXMgdGhlIGluc3RydWN0aW9uIGJ1ZmZlciB3YXMgbm90IGVtcHR5LCBidXQgMCBpbnN0cnVjdGlvbnMgZGVjb2RlZAorZXZlbnQ6MHgxMyBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJU1NVRV9TVEFMTEVEIDogQ3ljbGVzIHRoZSBpc3N1ZSBidWZmZXIgaXMgbm90IGVtcHR5IGJ1dCAwIGluc3RydWN0aW9ucyBpc3N1ZWQgCitldmVudDoweDE0IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkJSQU5DSF9JU1NVRV9TVEFMTEVEIDogQ3ljbGVzIHRoZSBicmFuY2ggYnVmZmVyIGlzIG5vdCBlbXB0eSBidXQgMCBpbnN0cnVjdGlvbnMgaXNzdWVkIAorZXZlbnQ6MHgxNSBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpTUlMwX1NDSEVEVUxFX1NUQUxMRUQgOiBDeWNsZXMgU1JTMCBpcyBub3QgZW1wdHkgYnV0IDAgaW5zdHJ1Y3Rpb25zIHNjaGVkdWxlZCAKK2V2ZW50OjB4MTYgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6U1JTMV9TQ0hFRFVMRV9TVEFMTEVEIDogQ3ljbGVzIFNSUzEgaXMgbm90IGVtcHR5IGJ1dCAwIGluc3RydWN0aW9ucyBzY2hlZHVsZWQgCitldmVudDoweDE3IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlZSU19TQ0hFRFVMRV9TVEFMTEVEIDogQ3ljbGVzIFZSUyBpcyBub3QgZW1wdHkgYnV0IDAgaW5zdHJ1Y3Rpb25zIHNjaGVkdWxlZCAKK2V2ZW50OjB4MTggY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6TFJTX1NDSEVEVUxFX1NUQUxMRUQgOiBDeWNsZXMgTFJTIGlzIG5vdCBlbXB0eSBidXQgMCBpbnN0cnVjdGlvbnMgc2NoZWR1bGVkIAorZXZlbnQ6MHgxOSBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpCUlNfU0NIRURVTEVfU1RBTExFRCA6IEN5Y2xlcyBCUlMgaXMgbm90IGVtcHR5IGJ1dCAwIGluc3RydWN0aW9ucyBzY2hlZHVsZWQgTG9hZC9TdG9yZSwgRGF0YSBDYWNoZSwgYW5kIGRMRkIgRXZlbnRzIAorZXZlbnQ6MHgxYSBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpUT1RBTF9UUkFOU0xBVEVEIDogVG90YWwgTGRzdCBtaWNyb29wcyB0cmFuc2xhdGVkLiAKK2V2ZW50OjB4MWIgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6TE9BRFNfVFJBTlNMQVRFRCA6IE51bWJlciBvZiBjYWNoZWFibGUgTCogb3IgRVZMKiBtaWNyb29wcyB0cmFuc2xhdGVkLiAoVGhpcyBpbmNsdWRlcyBtaWNyb29wcyBmcm9tIGxvYWQtbXVsdGlwbGUsIGxvYWQtdXBkYXRlLCBhbmQgbG9hZC1jb250ZXh0IGluc3RydWN0aW9ucy4pIAorZXZlbnQ6MHgxYyBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpTVE9SRVNfVFJBTlNMQVRFRCA6IE51bWJlciBvZiBjYWNoZWFibGUgU1QqIG9yIEVWU1QqIG1pY3Jvb3BzIHRyYW5zbGF0ZWQuIChUaGlzIGluY2x1ZGVzIG1pY3Jvb3BzIGZyb20gc3RvcmUtbXVsdGlwbGUsIHN0b3JlLXVwZGF0ZSwgYW5kIHNhdmUtY29udGV4dCBpbnN0cnVjdGlvbnMuKSAKK2V2ZW50OjB4MWQgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6VE9VQ0hFU19UUkFOU0xBVEVEIDogTnVtYmVyIG9mIGNhY2hlYWJsZSBEQ0JUIGFuZCBEQ0JUU1QgaW5zdHJ1Y3Rpb25zIHRyYW5zbGF0ZWQgKEwxIG9ubHkpIChEb2VzIG5vdCBjb3VudCB0b3VjaGVzIHRoYXQgYXJlIGNvbnZlcnRlZCB0byBub3BzIGkuZS4gZXhjZXB0aW9ucywgbm9uY2FjaGVhYmxlLCBoaWQwW25vcHRpXSBiaXQgaXMgc2V0LikgCitldmVudDoweDFlIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkNBQ0hFT1BTX1RSQU5TTEFURUQgOiBOdW1iZXIgb2YgZGNiYSwgZGNiZiwgZGNic3QsIGFuZCBkY2J6IGluc3RydWN0aW9ucyB0cmFuc2xhdGVkIChlNTAwIHRyYXBzIG9uIGRjYmkpIAorZXZlbnQ6MHgxZiBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpDQUNIRUlOSElCSVRFRF9BQ0NFU1NFU19UUkFOU0xBVEVEIDogTnVtYmVyIG9mIGNhY2hlIGluaGliaXRlZCBhY2Nlc3NlcyB0cmFuc2xhdGVkIAorZXZlbnQ6MHgyMCBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpHVUFSREVEX0xPQURTX1RSQU5TTEFURUQgOiBOdW1iZXIgb2YgZ3VhcmRlZCBsb2FkcyB0cmFuc2xhdGVkIAorZXZlbnQ6MHgyMSBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpXUklURVRIUk9VR0hfU1RPUkVTX1RSQU5TTEFURUQgOiBOdW1iZXIgb2Ygd3JpdGUtdGhyb3VnaCBzdG9yZXMgdHJhbnNsYXRlZCAKK2V2ZW50OjB4MjIgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6TUlTQUxJR05FRF9BQ0NFU1NFU19UUkFOU0xBVEVEIDogTnVtYmVyIG9mIG1pc2FsaWduZWQgbG9hZCBvciBzdG9yZSBhY2Nlc3NlcyB0cmFuc2xhdGVkLiAKK2V2ZW50OjB4MjMgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6VE9UQUxfQUxMT0NBVEVEX0RMRkIgOiBUb3RhbCBhbGxvY2F0ZWQgdG8gZExGQgorZXZlbnQ6MHgyNCBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpMT0FEU19UUkFOU0xBVEVEX0FMTE9DQVRFRF9ETEZCIDogTG9hZHMgdHJhbnNsYXRlZCBhbmQgYWxsb2NhdGVkIHRvIGRMRkIgKEFwcGxpZXMgdG8gc2FtZSBjbGFzcyBvZiBpbnN0cnVjdGlvbnMgYXMgbG9hZHMgdHJhbnNsYXRlZC4pIAorZXZlbnQ6MHgyNSBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpTVE9SRVNfQ09NUExFVEVEX0FMTE9DQVRFRF9ETEZCIDogU3RvcmVzIGNvbXBsZXRlZCBhbmQgYWxsb2NhdGVkIHRvIGRMRkIgKEFwcGxpZXMgdG8gc2FtZSBjbGFzcyBvZiBpbnN0cnVjdGlvbnMgYXMgc3RvcmVzIHRyYW5zbGF0ZWQuKSAKK2V2ZW50OjB4MjYgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6VE9VQ0hFU19UUkFOU0xBVEVEX0FMTE9DQVRFRF9ETEZCIDogVG91Y2hlcyB0cmFuc2xhdGVkIGFuZCBhbGxvY2F0ZWQgdG8gZExGQiAoQXBwbGllcyB0byBzYW1lIGNsYXNzIG9mIGluc3RydWN0aW9ucyBhcyB0b3VjaGVzIHRyYW5zbGF0ZWQuKSAKK2V2ZW50OjB4MjcgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6U1RPUkVTX0NPTVBMRVRFRCA6IE51bWJlciBvZiBjYWNoZWFibGUgU1QqIG9yIEVWU1QqIG1pY3Jvb3BzIGNvbXBsZXRlZC4gKEFwcGxpZXMgdG8gdGhlIHNhbWUgY2xhc3Mgb2YgaW5zdHJ1Y3Rpb25zIGFzIHN0b3JlcyB0cmFuc2xhdGVkLikgCitldmVudDoweDI4IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRMMV9MT0NLUyA6IE51bWJlciBvZiBjYWNoZSBsaW5lcyBsb2NrZWQgaW4gdGhlIGRMMS4gKENvdW50cyBhIGxvY2sgZXZlbiBpZiBhbiBvdmVybG9jayBjb25kaXRpb24gaXMgZW5jb3VudGVyZWQuKSAKK2V2ZW50OjB4MjkgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6REwxX1JFTE9BRFMgOiBUaGlzIGlzIGhpc3RvcmljYWxseSB1c2VkIHRvIGRldGVybWluZSBkY2FjaGUgbWlzcyByYXRlIChhbG9uZyB3aXRoIGxvYWRzL3N0b3JlcyBjb21wbGV0ZWQpLiBUaGlzIGNvdW50cyBkTDEgcmVsb2FkcyBmb3IgYW55IHJlYXNvbi4gCitldmVudDoweDJhIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRMMV9DQVNUT1VUUyA6IGRMMSBjYXN0b3V0cy4gRG9lcyBub3QgY291bnQgY2FzdG91dHMgZHVlIHRvIERDQkYuIAorZXZlbnQ6MHgyYiBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpERVRFQ1RFRF9SRVBMQVlTIDogVGltZXMgZGV0ZWN0ZWQgcmVwbGF5IGNvbmRpdGlvbiAtIExvYWQgbWlzcyB3aXRoIGRMRkIgZnVsbC4gCitldmVudDoweDJjIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkxPQURfTUlTU19RVUVVRV9GVUxMX1JFUExBWVMgOiBMb2FkIG1pc3Mgd2l0aCBsb2FkIHF1ZXVlIGZ1bGwuIAorZXZlbnQ6MHgyZCBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpMT0FEX0dVQVJERURfTUlTU19OT1RfTEFTVF9SRVBMQVlTIDogTG9hZCBndWFyZGVkIG1pc3Mgd2hlbiB0aGUgbG9hZCBpcyBub3QgeWV0IGF0IHRoZSBib3R0b20gb2YgdGhlIGNvbXBsZXRpb24gYnVmZmVyLgorZXZlbnQ6MHgyZSBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpTVE9SRV9UUkFOU0xBVEVEX1FVRVVFX0ZVTExfUkVQTEFZUyA6IFRyYW5zbGF0ZSBhIHN0b3JlIHdoZW4gdGhlIFN0USBpcyBmdWxsLgorZXZlbnQ6MHgyZiBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpBRERSRVNTX0NPTExJU0lPTl9SRVBMQVlTIDogQWRkcmVzcyBjb2xsaXNpb24uCitldmVudDoweDMwIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRNTVVfTUlTU19SRVBMQVlTIDogRE1NVV9NSVNTX1JFUExBWVMgOiBETU1VIG1pc3MuCitldmVudDoweDMxIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRNTVVfQlVTWV9SRVBMQVlTIDogRE1NVV9CVVNZX1JFUExBWVMgOiBETU1VIGJ1c3kuCitldmVudDoweDMyIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlNFQ09ORF9QQVJUX01JU0FMSUdORURfQUZURVJfTUlTU19SRVBMQVlTIDogU2Vjb25kIHBhcnQgb2YgbWlzYWxpZ25lZCBhY2Nlc3Mgd2hlbiBmaXJzdCBwYXJ0IG1pc3NlZCBpbiBjYWNoZS4KK2V2ZW50OjB4MzMgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6TE9BRF9NSVNTX0RMRkJfRlVMTF9DWUNMRVMgOiBDeWNsZXMgc3RhbGxlZCBvbiByZXBsYXkgY29uZGl0aW9uIC0gTG9hZCBtaXNzIHdpdGggZExGQiBmdWxsLgorZXZlbnQ6MHgzNCBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpMT0FEX01JU1NfUVVFVUVfRlVMTF9DWUNMRVMgOiBDeWNsZXMgc3RhbGxlZCBvbiByZXBsYXkgY29uZGl0aW9uIC0gTG9hZCBtaXNzIHdpdGggbG9hZCBxdWV1ZSBmdWxsLgorZXZlbnQ6MHgzNSBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpMT0FEX0dVQVJERURfTUlTU19OT1RfTEFTVF9DWUNMRVMgOiBDeWNsZXMgc3RhbGxlZCBvbiByZXBsYXkgY29uZGl0aW9uIC0gTG9hZCBndWFyZGVkIG1pc3Mgd2hlbiB0aGUgbG9hZCBpcyBub3QgeWV0IGF0IHRoZSBib3R0b20gb2YgdGhlIGNvbXBsZXRpb24gYnVmZmVyLgorZXZlbnQ6MHgzNiBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpTVE9SRV9UUkFOU0xBVEVEX1FVRVVFX0ZVTExfQ1lDTEVTIDogQ3ljbGVzIHN0YWxsZWQgb24gcmVwbGF5IGNvbmRpdGlvbiAtIFRyYW5zbGF0ZSBhIHN0b3JlIHdoZW4gdGhlIFN0USBpcyBmdWxsLgorZXZlbnQ6MHgzNyBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpBRERSRVNTX0NPTExJU0lPTl9DWUNMRVMgOiBDeWNsZXMgc3RhbGxlZCBvbiByZXBsYXkgY29uZGl0aW9uIC0gQWRkcmVzcyBjb2xsaXNpb24uCitldmVudDoweDM4IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRNTVVfTUlTU19DWUNMRVMgOiBDeWNsZXMgc3RhbGxlZCBvbiByZXBsYXkgY29uZGl0aW9uIC0gRE1NVSBtaXNzLgorZXZlbnQ6MHgzOSBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpETU1VX0JVU1lfQ1lDTEVTIDogQ3ljbGVzIHN0YWxsZWQgb24gcmVwbGF5IGNvbmRpdGlvbiAtIERNTVUgYnVzeS4KK2V2ZW50OjB4M2EgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6U0VDT05EX1BBUlRfTUlTQUxJR05FRF9BRlRFUl9NSVNTX0NZQ0xFUyA6IEN5Y2xlcyBzdGFsbGVkIG9uIHJlcGxheSBjb25kaXRpb24gLSBTZWNvbmQgcGFydCBvZiBtaXNhbGlnbmVkIGFjY2VzcyB3aGVuIGZpcnN0IHBhcnQgbWlzc2VkIGluIGNhY2hlLgorZXZlbnQ6MHgzYiBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJTDFfTE9DS1MgOiBOdW1iZXIgb2YgY2FjaGUgbGluZXMgbG9ja2VkIGluIHRoZSBpTDEuIChDb3VudHMgYSBsb2NrIGV2ZW4gaWYgYW4gb3ZlcmxvY2sgY29uZGl0aW9uIGlzIGVuY291bnRlcmVkLikgCitldmVudDoweDNjIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOklMMV9GRVRDSF9SRUxPQURTIDogVGhpcyBpcyBoaXN0b3JpY2FsbHkgdXNlZCB0byBkZXRlcm1pbmUgaWNhY2hlIG1pc3MgcmF0ZSAoYWxvbmcgd2l0aCBpbnN0cnVjdGlvbnMgY29tcGxldGVkKSBSZWxvYWRzIGR1ZSB0byBkZW1hbmQgZmV0Y2guIAorZXZlbnQ6MHgzZCBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpGRVRDSEVTIDogQ291bnRzIHRoZSBudW1iZXIgb2YgZmV0Y2hlcyB0aGF0IHdyaXRlIGF0IGxlYXN0IG9uZSBpbnN0cnVjdGlvbiB0byB0aGUgaW5zdHJ1Y3Rpb24gYnVmZmVyLiAoV2l0aCBpbnN0cnVjdGlvbiBmZXRjaGVkLCBjYW4gdXNlZCB0byBjb21wdXRlIGluc3RydWN0aW9ucy1wZXItZmV0Y2gpIAorZXZlbnQ6MHgzZSBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJTU1VX1RMQjRLX1JFTE9BRFMgOiBpTU1VIFRMQjRLIHJlbG9hZHMKK2V2ZW50OjB4M2YgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SU1NVV9WU1BfUkVMT0FEUyA6IGlNTVUgVlNQIHJlbG9hZHMKK2V2ZW50OjB4NDAgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RE1NVV9UTEI0S19SRUxPQURTIDogZE1NVSBUTEI0SyByZWxvYWRzCitldmVudDoweDQxIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRNTVVfVlNQX1JFTE9BRFMgOiBkTU1VIFZTUCByZWxvYWRzCitldmVudDoweDQyIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkwyTU1VX01JU1NFUyA6IENvdW50cyBpVExCL2RUTEIgZXJyb3IgaW50ZXJydXB0IAorZXZlbnQ6MHg0MyBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpCSVVfTUFTVEVSX1JFUVVFU1RTIDogTnVtYmVyIG9mIG1hc3RlciB0cmFuc2FjdGlvbnMuIChOdW1iZXIgb2YgbWFzdGVyIFRTcy4pIAorZXZlbnQ6MHg0NCBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpCSVVfTUFTVEVSX0lfUkVRVUVTVFMgOiBOdW1iZXIgb2YgbWFzdGVyIEktU2lkZSB0cmFuc2FjdGlvbnMuIChOdW1iZXIgb2YgbWFzdGVyIEktU2lkZSBUU3MuKSAKK2V2ZW50OjB4NDUgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QklVX01BU1RFUl9EX1JFUVVFU1RTIDogTnVtYmVyIG9mIG1hc3RlciBELVNpZGUgdHJhbnNhY3Rpb25zLiAoTnVtYmVyIG9mIG1hc3RlciBELVNpZGUgVFNzLikgCitldmVudDoweDQ2IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkJJVV9NQVNURVJfRF9DQVNUT1VUX1JFUVVFU1RTIDogTnVtYmVyIG9mIG1hc3RlciBELVNpZGUgbm9uLXByb2dyYW0tZGVtYW5kIGNhc3RvdXQgdHJhbnNhY3Rpb25zLiBUaGlzIGNvdW50cyByZXBsYWNlbWVudCBwdXNoZXMgYW5kIHNub29wIHB1c2hlcy4gVGhpcyBkb2VzIG5vdCBjb3VudCBEQ0JGIGNhc3RvdXRzLiAoTnVtYmVyIG9mIG1hc3RlciBELXNpZGUgbm9uLXByb2dyYW0tZGVtYW5kIGNhc3RvdXQgVFNzLikgCitldmVudDoweDQ3IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkJJVV9NQVNURVJfUkVUUklFUyA6IE51bWJlciBvZiB0cmFuc2FjdGlvbnMgd2hpY2ggd2VyZSBpbml0aWF0ZWQgYnkgdGhpcyBwcm9jZXNzb3Igd2hpY2ggd2VyZSByZXRyaWVkIG9uIHRoZSBCSVUgaW50ZXJmYWNlLiAoTnVtYmVyIG9mIG1hc3RlciBBUlRSWXMuKSAKK2V2ZW50OjB4NDggY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6U05PT1BfUkVRVUVTVFMgOiBOdW1iZXIgb2YgZXh0ZXJuYWxseSBnZW5lcmF0ZWQgc25vb3AgcmVxdWVzdHMuIChDb3VudHMgc25vb3AgVFNzLikgCitldmVudDoweDQ5IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlNOT09QX0hJVFMgOiBOdW1iZXIgb2Ygc25vb3AgaGl0cyBvbiBhbGwgRC1zaWRlIHJlc291cmNlcyByZWdhcmRsZXNzIG9mIHRoZSBjYWNoZSBzdGF0ZSAobW9kaWZpZWQsIGV4Y2x1c2l2ZSwgb3Igc2hhcmVkKSAKK2V2ZW50OjB4NGEgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6U05PT1BfUFVTSEVTIDogTnVtYmVyIG9mIHNub29wIHB1c2hlcyBmcm9tIGFsbCBELXNpZGUgcmVzb3VyY2VzLiAoQ291bnRzIHNub29wIEFSVFJZL1dPUHMuKSAKK2V2ZW50OjB4NGIgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6U05PT1BfUkVUUklFUyA6IE51bWJlciBvZiBzbm9vcCByZXF1ZXN0cyByZXRyaWVkLiAoQ291bnRzIHNub29wIEFSVFJZcy4pIAorZXZlbnQ6MHg1MiBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpQTUMwX09WRVJGTE9XIDogQ291bnRzIHRoZSBudW1iZXIgb2YgdGltZXMgUE1DMFszMl0gdHJhbnNpdGlvbmVkIGZyb20gMSB0byAwLiAKK2V2ZW50OjB4NTMgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6UE1DMV9PVkVSRkxPVyA6IENvdW50cyB0aGUgbnVtYmVyIG9mIHRpbWVzIFBNQzFbMzJdIHRyYW5zaXRpb25lZCBmcm9tIDEgdG8gMC4gCitldmVudDoweDU0IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlBNQzJfT1ZFUkZMT1cgOiBDb3VudHMgdGhlIG51bWJlciBvZiB0aW1lcyBQTUMyWzMyXSB0cmFuc2l0aW9uZWQgZnJvbSAxIHRvIDAuIAorZXZlbnQ6MHg1NSBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpQTUMzX09WRVJGTE9XIDogQ291bnRzIHRoZSBudW1iZXIgb2YgdGltZXMgUE1DM1szMl0gdHJhbnNpdGlvbmVkIGZyb20gMSB0byAwLgorZXZlbnQ6MHg1NiBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJTlRFUlJVUFRTIDogTnVtYmVyIG9mIGludGVycnVwdHMgdGFrZW4KK2V2ZW50OjB4NTcgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RVhURVJOQUxfSU5URVJSVVBUUyA6IE51bWJlciBvZiBleHRlcm5hbCBpbnB1dCBpbnRlcnJ1cHRzIHRha2VuCitldmVudDoweDU4IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkNSSVRJQ0FMX0lOVEVSUlVQVFMgOiBOdW1iZXIgb2YgY3JpdGljYWwgaW5wdXQgaW50ZXJydXB0cyB0YWtlbgorZXZlbnQ6MHg1OSBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpTQ19UUkFQX0lOVEVSUlVQVFMgOiBOdW1iZXIgb2Ygc3lzdGVtIGNhbGwgYW5kIHRyYXAgaW50ZXJydXB0cwpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL3BwYy9lNTAwL3VuaXRfbWFza3MgYi9vcHJvZmlsZS0wLjkuNy9ldmVudHMvcHBjL2U1MDAvdW5pdF9tYXNrcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTVjNjUzCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL3BwYy9lNTAwL3VuaXRfbWFza3MKQEAgLTAsMCArMSw0IEBACisjIGU1MDAgcG9zc2libGUgdW5pdCBtYXNrcworIworbmFtZTp6ZXJvIHR5cGU6bWFuZGF0b3J5IGRlZmF1bHQ6MHgwCisJMHgwIE5vIHVuaXQgbWFzawpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL3BwYy9lNTAwdjIvZXZlbnRzIGIvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL3BwYy9lNTAwdjIvZXZlbnRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1MWZkNmEKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9ldmVudHMvcHBjL2U1MDB2Mi9ldmVudHMKQEAgLTAsMCArMSw4MyBAQAorIyBlNTAwIEV2ZW50cworIworZXZlbnQ6MHgxIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjEwMCBuYW1lOkNQVV9DTEsgOiBDeWNsZXMKK2V2ZW50OjB4MiBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpDT01QTEVURURfSU5TTlMgOiBDb21wbGV0ZWQgSW5zdHJ1Y3Rpb25zICgwLCAxLCBvciAyIHBlciBjeWNsZSkKK2V2ZW50OjB4MyBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpDT01QTEVURURfT1BTIDogQ29tcGxldGVkIE1pY3JvLW9wcyAoY291bnRzIDIgZm9yIGxvYWQvc3RvcmUgdy91cGRhdGUpCitldmVudDoweDQgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SU5TVFJVQ1RJT05fRkVUQ0hFUyA6IEluc3RydWN0aW9uIGZldGNoZXMKK2V2ZW50OjB4NSBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpERUNPREVEX09QUyA6IE1pY3JvLW9wcyBkZWNvZGVkCitldmVudDoweDggY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6Q09NUExFVEVEX0JSQU5DSEVTIDogQnJhbmNoIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjB4OSBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpDT01QTEVURURfTE9BRF9PUFMgOiBMb2FkIG1pY3JvLW9wcyBjb21wbGV0ZWQKK2V2ZW50OjB4YSBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpDT01QTEVURURfU1RPUkVfT1BTIDogU3RvcmUgbWljcm8tb3BzIGNvbXBsZXRlZAorZXZlbnQ6MHhiIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkNPTVBMRVRJT05fUkVESVJFQ1RTIDogTnVtYmVyIG9mIGNvbXBsZXRpb24gYnVmZmVyIHJlZGlyZWN0cworZXZlbnQ6MHhjIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkJSQU5DSEVTX0ZJTklTSEVEIDogQnJhbmNoZXMgZmluaXNoZWQKK2V2ZW50OjB4ZCBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpUQUtFTl9CUkFOQ0hFU19GSU5JU0hFRCA6IFRha2VuIGJyYW5jaGVzIGZpbmlzaGVkCitldmVudDoweGUgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QklGRkVEX0JSQU5DSEVTX0ZJTklTSEVEIDogQmlmZmVkIGJyYW5jaGVzIGZpbmlzaGVkCitldmVudDoweGYgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QlJBTkNIRVNfTUlTUFJFRElDVEVEIDogQnJhbmNoIGluc3RydWN0aW9ucyBtaXNwcmVkaWN0ZWQgZHVlIHRvIGRpcmVjdGlvbiwgdGFyZ2V0LCBvciBJQUIgcHJlZGljdGlvbgorZXZlbnQ6MHgxMCBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpCUkFOQ0hFU19NSVNQUkVESUNURURfRElSRUNUSU9OIDogQnJhbmNoZXMgbWlzcHJlZGljdGVkIGR1ZSB0byBkaXJlY3Rpb24gcHJlZGljdGlvbgorZXZlbnQ6MHgxMSBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpCVEJfSElUUyA6IEJyYW5jaGVzIHRoYXQgaGl0IGluIHRoZSBCVEIsIG9yIG1pc3NlZCBidXQgYXJlIG5vdCB0YWtlbgorZXZlbnQ6MHgxMiBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpERUNPREVfU1RBTExFRCA6IEN5Y2xlcyB0aGUgaW5zdHJ1Y3Rpb24gYnVmZmVyIHdhcyBub3QgZW1wdHksIGJ1dCAwIGluc3RydWN0aW9ucyBkZWNvZGVkCitldmVudDoweDEzIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOklTU1VFX1NUQUxMRUQgOiBDeWNsZXMgdGhlIGlzc3VlIGJ1ZmZlciBpcyBub3QgZW1wdHkgYnV0IDAgaW5zdHJ1Y3Rpb25zIGlzc3VlZCAKK2V2ZW50OjB4MTQgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QlJBTkNIX0lTU1VFX1NUQUxMRUQgOiBDeWNsZXMgdGhlIGJyYW5jaCBidWZmZXIgaXMgbm90IGVtcHR5IGJ1dCAwIGluc3RydWN0aW9ucyBpc3N1ZWQgCitldmVudDoweDE1IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlNSUzBfU0NIRURVTEVfU1RBTExFRCA6IEN5Y2xlcyBTUlMwIGlzIG5vdCBlbXB0eSBidXQgMCBpbnN0cnVjdGlvbnMgc2NoZWR1bGVkIAorZXZlbnQ6MHgxNiBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpTUlMxX1NDSEVEVUxFX1NUQUxMRUQgOiBDeWNsZXMgU1JTMSBpcyBub3QgZW1wdHkgYnV0IDAgaW5zdHJ1Y3Rpb25zIHNjaGVkdWxlZCAKK2V2ZW50OjB4MTcgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6VlJTX1NDSEVEVUxFX1NUQUxMRUQgOiBDeWNsZXMgVlJTIGlzIG5vdCBlbXB0eSBidXQgMCBpbnN0cnVjdGlvbnMgc2NoZWR1bGVkIAorZXZlbnQ6MHgxOCBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpMUlNfU0NIRURVTEVfU1RBTExFRCA6IEN5Y2xlcyBMUlMgaXMgbm90IGVtcHR5IGJ1dCAwIGluc3RydWN0aW9ucyBzY2hlZHVsZWQgCitldmVudDoweDE5IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkJSU19TQ0hFRFVMRV9TVEFMTEVEIDogQ3ljbGVzIEJSUyBpcyBub3QgZW1wdHkgYnV0IDAgaW5zdHJ1Y3Rpb25zIHNjaGVkdWxlZCBMb2FkL1N0b3JlLCBEYXRhIENhY2hlLCBhbmQgZExGQiBFdmVudHMgCitldmVudDoweDFhIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlRPVEFMX1RSQU5TTEFURUQgOiBUb3RhbCBMZHN0IG1pY3Jvb3BzIHRyYW5zbGF0ZWQuIAorZXZlbnQ6MHgxYiBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpMT0FEU19UUkFOU0xBVEVEIDogTnVtYmVyIG9mIGNhY2hlYWJsZSBMKiBvciBFVkwqIG1pY3Jvb3BzIHRyYW5zbGF0ZWQuIChUaGlzIGluY2x1ZGVzIG1pY3Jvb3BzIGZyb20gbG9hZC1tdWx0aXBsZSwgbG9hZC11cGRhdGUsIGFuZCBsb2FkLWNvbnRleHQgaW5zdHJ1Y3Rpb25zLikgCitldmVudDoweDFjIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlNUT1JFU19UUkFOU0xBVEVEIDogTnVtYmVyIG9mIGNhY2hlYWJsZSBTVCogb3IgRVZTVCogbWljcm9vcHMgdHJhbnNsYXRlZC4gKFRoaXMgaW5jbHVkZXMgbWljcm9vcHMgZnJvbSBzdG9yZS1tdWx0aXBsZSwgc3RvcmUtdXBkYXRlLCBhbmQgc2F2ZS1jb250ZXh0IGluc3RydWN0aW9ucy4pIAorZXZlbnQ6MHgxZCBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpUT1VDSEVTX1RSQU5TTEFURUQgOiBOdW1iZXIgb2YgY2FjaGVhYmxlIERDQlQgYW5kIERDQlRTVCBpbnN0cnVjdGlvbnMgdHJhbnNsYXRlZCAoTDEgb25seSkgKERvZXMgbm90IGNvdW50IHRvdWNoZXMgdGhhdCBhcmUgY29udmVydGVkIHRvIG5vcHMgaS5lLiBleGNlcHRpb25zLCBub25jYWNoZWFibGUsIGhpZDBbbm9wdGldIGJpdCBpcyBzZXQuKSAKK2V2ZW50OjB4MWUgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6Q0FDSEVPUFNfVFJBTlNMQVRFRCA6IE51bWJlciBvZiBkY2JhLCBkY2JmLCBkY2JzdCwgYW5kIGRjYnogaW5zdHJ1Y3Rpb25zIHRyYW5zbGF0ZWQgKGU1MDAgdHJhcHMgb24gZGNiaSkgCitldmVudDoweDFmIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkNBQ0hFSU5ISUJJVEVEX0FDQ0VTU0VTX1RSQU5TTEFURUQgOiBOdW1iZXIgb2YgY2FjaGUgaW5oaWJpdGVkIGFjY2Vzc2VzIHRyYW5zbGF0ZWQgCitldmVudDoweDIwIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkdVQVJERURfTE9BRFNfVFJBTlNMQVRFRCA6IE51bWJlciBvZiBndWFyZGVkIGxvYWRzIHRyYW5zbGF0ZWQgCitldmVudDoweDIxIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOldSSVRFVEhST1VHSF9TVE9SRVNfVFJBTlNMQVRFRCA6IE51bWJlciBvZiB3cml0ZS10aHJvdWdoIHN0b3JlcyB0cmFuc2xhdGVkIAorZXZlbnQ6MHgyMiBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpNSVNBTElHTkVEX0FDQ0VTU0VTX1RSQU5TTEFURUQgOiBOdW1iZXIgb2YgbWlzYWxpZ25lZCBsb2FkIG9yIHN0b3JlIGFjY2Vzc2VzIHRyYW5zbGF0ZWQuIAorZXZlbnQ6MHgyMyBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpUT1RBTF9BTExPQ0FURURfRExGQiA6IFRvdGFsIGFsbG9jYXRlZCB0byBkTEZCCitldmVudDoweDI0IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkxPQURTX1RSQU5TTEFURURfQUxMT0NBVEVEX0RMRkIgOiBMb2FkcyB0cmFuc2xhdGVkIGFuZCBhbGxvY2F0ZWQgdG8gZExGQiAoQXBwbGllcyB0byBzYW1lIGNsYXNzIG9mIGluc3RydWN0aW9ucyBhcyBsb2FkcyB0cmFuc2xhdGVkLikgCitldmVudDoweDI1IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlNUT1JFU19DT01QTEVURURfQUxMT0NBVEVEX0RMRkIgOiBTdG9yZXMgY29tcGxldGVkIGFuZCBhbGxvY2F0ZWQgdG8gZExGQiAoQXBwbGllcyB0byBzYW1lIGNsYXNzIG9mIGluc3RydWN0aW9ucyBhcyBzdG9yZXMgdHJhbnNsYXRlZC4pIAorZXZlbnQ6MHgyNiBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpUT1VDSEVTX1RSQU5TTEFURURfQUxMT0NBVEVEX0RMRkIgOiBUb3VjaGVzIHRyYW5zbGF0ZWQgYW5kIGFsbG9jYXRlZCB0byBkTEZCIChBcHBsaWVzIHRvIHNhbWUgY2xhc3Mgb2YgaW5zdHJ1Y3Rpb25zIGFzIHRvdWNoZXMgdHJhbnNsYXRlZC4pIAorZXZlbnQ6MHgyNyBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpTVE9SRVNfQ09NUExFVEVEIDogTnVtYmVyIG9mIGNhY2hlYWJsZSBTVCogb3IgRVZTVCogbWljcm9vcHMgY29tcGxldGVkLiAoQXBwbGllcyB0byB0aGUgc2FtZSBjbGFzcyBvZiBpbnN0cnVjdGlvbnMgYXMgc3RvcmVzIHRyYW5zbGF0ZWQuKSAKK2V2ZW50OjB4MjggY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6REwxX0xPQ0tTIDogTnVtYmVyIG9mIGNhY2hlIGxpbmVzIGxvY2tlZCBpbiB0aGUgZEwxLiAoQ291bnRzIGEgbG9jayBldmVuIGlmIGFuIG92ZXJsb2NrIGNvbmRpdGlvbiBpcyBlbmNvdW50ZXJlZC4pIAorZXZlbnQ6MHgyOSBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpETDFfUkVMT0FEUyA6IFRoaXMgaXMgaGlzdG9yaWNhbGx5IHVzZWQgdG8gZGV0ZXJtaW5lIGRjYWNoZSBtaXNzIHJhdGUgKGFsb25nIHdpdGggbG9hZHMvc3RvcmVzIGNvbXBsZXRlZCkuIFRoaXMgY291bnRzIGRMMSByZWxvYWRzIGZvciBhbnkgcmVhc29uLiAKK2V2ZW50OjB4MmEgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6REwxX0NBU1RPVVRTIDogZEwxIGNhc3RvdXRzLiBEb2VzIG5vdCBjb3VudCBjYXN0b3V0cyBkdWUgdG8gRENCRi4gCitldmVudDoweDJiIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRFVEVDVEVEX1JFUExBWVMgOiBUaW1lcyBkZXRlY3RlZCByZXBsYXkgY29uZGl0aW9uIC0gTG9hZCBtaXNzIHdpdGggZExGQiBmdWxsLiAKK2V2ZW50OjB4MmMgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6TE9BRF9NSVNTX1FVRVVFX0ZVTExfUkVQTEFZUyA6IExvYWQgbWlzcyB3aXRoIGxvYWQgcXVldWUgZnVsbC4gCitldmVudDoweDJkIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkxPQURfR1VBUkRFRF9NSVNTX05PVF9MQVNUX1JFUExBWVMgOiBMb2FkIGd1YXJkZWQgbWlzcyB3aGVuIHRoZSBsb2FkIGlzIG5vdCB5ZXQgYXQgdGhlIGJvdHRvbSBvZiB0aGUgY29tcGxldGlvbiBidWZmZXIuCitldmVudDoweDJlIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlNUT1JFX1RSQU5TTEFURURfUVVFVUVfRlVMTF9SRVBMQVlTIDogVHJhbnNsYXRlIGEgc3RvcmUgd2hlbiB0aGUgU3RRIGlzIGZ1bGwuCitldmVudDoweDJmIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkFERFJFU1NfQ09MTElTSU9OX1JFUExBWVMgOiBBZGRyZXNzIGNvbGxpc2lvbi4KK2V2ZW50OjB4MzAgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RE1NVV9NSVNTX1JFUExBWVMgOiBETU1VX01JU1NfUkVQTEFZUyA6IERNTVUgbWlzcy4KK2V2ZW50OjB4MzEgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RE1NVV9CVVNZX1JFUExBWVMgOiBETU1VX0JVU1lfUkVQTEFZUyA6IERNTVUgYnVzeS4KK2V2ZW50OjB4MzIgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6U0VDT05EX1BBUlRfTUlTQUxJR05FRF9BRlRFUl9NSVNTX1JFUExBWVMgOiBTZWNvbmQgcGFydCBvZiBtaXNhbGlnbmVkIGFjY2VzcyB3aGVuIGZpcnN0IHBhcnQgbWlzc2VkIGluIGNhY2hlLgorZXZlbnQ6MHgzMyBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpMT0FEX01JU1NfRExGQl9GVUxMX0NZQ0xFUyA6IEN5Y2xlcyBzdGFsbGVkIG9uIHJlcGxheSBjb25kaXRpb24gLSBMb2FkIG1pc3Mgd2l0aCBkTEZCIGZ1bGwuCitldmVudDoweDM0IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkxPQURfTUlTU19RVUVVRV9GVUxMX0NZQ0xFUyA6IEN5Y2xlcyBzdGFsbGVkIG9uIHJlcGxheSBjb25kaXRpb24gLSBMb2FkIG1pc3Mgd2l0aCBsb2FkIHF1ZXVlIGZ1bGwuCitldmVudDoweDM1IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkxPQURfR1VBUkRFRF9NSVNTX05PVF9MQVNUX0NZQ0xFUyA6IEN5Y2xlcyBzdGFsbGVkIG9uIHJlcGxheSBjb25kaXRpb24gLSBMb2FkIGd1YXJkZWQgbWlzcyB3aGVuIHRoZSBsb2FkIGlzIG5vdCB5ZXQgYXQgdGhlIGJvdHRvbSBvZiB0aGUgY29tcGxldGlvbiBidWZmZXIuCitldmVudDoweDM2IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlNUT1JFX1RSQU5TTEFURURfUVVFVUVfRlVMTF9DWUNMRVMgOiBDeWNsZXMgc3RhbGxlZCBvbiByZXBsYXkgY29uZGl0aW9uIC0gVHJhbnNsYXRlIGEgc3RvcmUgd2hlbiB0aGUgU3RRIGlzIGZ1bGwuCitldmVudDoweDM3IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkFERFJFU1NfQ09MTElTSU9OX0NZQ0xFUyA6IEN5Y2xlcyBzdGFsbGVkIG9uIHJlcGxheSBjb25kaXRpb24gLSBBZGRyZXNzIGNvbGxpc2lvbi4KK2V2ZW50OjB4MzggY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RE1NVV9NSVNTX0NZQ0xFUyA6IEN5Y2xlcyBzdGFsbGVkIG9uIHJlcGxheSBjb25kaXRpb24gLSBETU1VIG1pc3MuCitldmVudDoweDM5IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRNTVVfQlVTWV9DWUNMRVMgOiBDeWNsZXMgc3RhbGxlZCBvbiByZXBsYXkgY29uZGl0aW9uIC0gRE1NVSBidXN5LgorZXZlbnQ6MHgzYSBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpTRUNPTkRfUEFSVF9NSVNBTElHTkVEX0FGVEVSX01JU1NfQ1lDTEVTIDogQ3ljbGVzIHN0YWxsZWQgb24gcmVwbGF5IGNvbmRpdGlvbiAtIFNlY29uZCBwYXJ0IG9mIG1pc2FsaWduZWQgYWNjZXNzIHdoZW4gZmlyc3QgcGFydCBtaXNzZWQgaW4gY2FjaGUuCitldmVudDoweDNiIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOklMMV9MT0NLUyA6IE51bWJlciBvZiBjYWNoZSBsaW5lcyBsb2NrZWQgaW4gdGhlIGlMMS4gKENvdW50cyBhIGxvY2sgZXZlbiBpZiBhbiBvdmVybG9jayBjb25kaXRpb24gaXMgZW5jb3VudGVyZWQuKSAKK2V2ZW50OjB4M2MgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SUwxX0ZFVENIX1JFTE9BRFMgOiBUaGlzIGlzIGhpc3RvcmljYWxseSB1c2VkIHRvIGRldGVybWluZSBpY2FjaGUgbWlzcyByYXRlIChhbG9uZyB3aXRoIGluc3RydWN0aW9ucyBjb21wbGV0ZWQpIFJlbG9hZHMgZHVlIHRvIGRlbWFuZCBmZXRjaC4gCitldmVudDoweDNkIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkZFVENIRVMgOiBDb3VudHMgdGhlIG51bWJlciBvZiBmZXRjaGVzIHRoYXQgd3JpdGUgYXQgbGVhc3Qgb25lIGluc3RydWN0aW9uIHRvIHRoZSBpbnN0cnVjdGlvbiBidWZmZXIuIChXaXRoIGluc3RydWN0aW9uIGZldGNoZWQsIGNhbiB1c2VkIHRvIGNvbXB1dGUgaW5zdHJ1Y3Rpb25zLXBlci1mZXRjaCkgCitldmVudDoweDNlIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOklNTVVfVExCNEtfUkVMT0FEUyA6IGlNTVUgVExCNEsgcmVsb2FkcworZXZlbnQ6MHgzZiBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJTU1VX1ZTUF9SRUxPQURTIDogaU1NVSBWU1AgcmVsb2FkcworZXZlbnQ6MHg0MCBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpETU1VX1RMQjRLX1JFTE9BRFMgOiBkTU1VIFRMQjRLIHJlbG9hZHMKK2V2ZW50OjB4NDEgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RE1NVV9WU1BfUkVMT0FEUyA6IGRNTVUgVlNQIHJlbG9hZHMKK2V2ZW50OjB4NDIgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6TDJNTVVfTUlTU0VTIDogQ291bnRzIGlUTEIvZFRMQiBlcnJvciBpbnRlcnJ1cHQgCitldmVudDoweDQzIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkJJVV9NQVNURVJfUkVRVUVTVFMgOiBOdW1iZXIgb2YgbWFzdGVyIHRyYW5zYWN0aW9ucy4gKE51bWJlciBvZiBtYXN0ZXIgVFNzLikgCitldmVudDoweDQ0IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkJJVV9NQVNURVJfSV9SRVFVRVNUUyA6IE51bWJlciBvZiBtYXN0ZXIgSS1TaWRlIHRyYW5zYWN0aW9ucy4gKE51bWJlciBvZiBtYXN0ZXIgSS1TaWRlIFRTcy4pIAorZXZlbnQ6MHg0NSBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpCSVVfTUFTVEVSX0RfUkVRVUVTVFMgOiBOdW1iZXIgb2YgbWFzdGVyIEQtU2lkZSB0cmFuc2FjdGlvbnMuIChOdW1iZXIgb2YgbWFzdGVyIEQtU2lkZSBUU3MuKSAKK2V2ZW50OjB4NDYgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QklVX01BU1RFUl9EX0NBU1RPVVRfUkVRVUVTVFMgOiBOdW1iZXIgb2YgbWFzdGVyIEQtU2lkZSBub24tcHJvZ3JhbS1kZW1hbmQgY2FzdG91dCB0cmFuc2FjdGlvbnMuIFRoaXMgY291bnRzIHJlcGxhY2VtZW50IHB1c2hlcyBhbmQgc25vb3AgcHVzaGVzLiBUaGlzIGRvZXMgbm90IGNvdW50IERDQkYgY2FzdG91dHMuIChOdW1iZXIgb2YgbWFzdGVyIEQtc2lkZSBub24tcHJvZ3JhbS1kZW1hbmQgY2FzdG91dCBUU3MuKSAKK2V2ZW50OjB4NDcgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6QklVX01BU1RFUl9SRVRSSUVTIDogTnVtYmVyIG9mIHRyYW5zYWN0aW9ucyB3aGljaCB3ZXJlIGluaXRpYXRlZCBieSB0aGlzIHByb2Nlc3NvciB3aGljaCB3ZXJlIHJldHJpZWQgb24gdGhlIEJJVSBpbnRlcmZhY2UuIChOdW1iZXIgb2YgbWFzdGVyIEFSVFJZcy4pIAorZXZlbnQ6MHg0OCBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpTTk9PUF9SRVFVRVNUUyA6IE51bWJlciBvZiBleHRlcm5hbGx5IGdlbmVyYXRlZCBzbm9vcCByZXF1ZXN0cy4gKENvdW50cyBzbm9vcCBUU3MuKSAKK2V2ZW50OjB4NDkgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6U05PT1BfSElUUyA6IE51bWJlciBvZiBzbm9vcCBoaXRzIG9uIGFsbCBELXNpZGUgcmVzb3VyY2VzIHJlZ2FyZGxlc3Mgb2YgdGhlIGNhY2hlIHN0YXRlIChtb2RpZmllZCwgZXhjbHVzaXZlLCBvciBzaGFyZWQpIAorZXZlbnQ6MHg0YSBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpTTk9PUF9QVVNIRVMgOiBOdW1iZXIgb2Ygc25vb3AgcHVzaGVzIGZyb20gYWxsIEQtc2lkZSByZXNvdXJjZXMuIChDb3VudHMgc25vb3AgQVJUUlkvV09Qcy4pIAorZXZlbnQ6MHg0YiBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpTTk9PUF9SRVRSSUVTIDogTnVtYmVyIG9mIHNub29wIHJlcXVlc3RzIHJldHJpZWQuIChDb3VudHMgc25vb3AgQVJUUllzLikgCitldmVudDoweDUyIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlBNQzBfT1ZFUkZMT1cgOiBDb3VudHMgdGhlIG51bWJlciBvZiB0aW1lcyBQTUMwWzMyXSB0cmFuc2l0aW9uZWQgZnJvbSAxIHRvIDAuIAorZXZlbnQ6MHg1MyBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpQTUMxX09WRVJGTE9XIDogQ291bnRzIHRoZSBudW1iZXIgb2YgdGltZXMgUE1DMVszMl0gdHJhbnNpdGlvbmVkIGZyb20gMSB0byAwLiAKK2V2ZW50OjB4NTQgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6UE1DMl9PVkVSRkxPVyA6IENvdW50cyB0aGUgbnVtYmVyIG9mIHRpbWVzIFBNQzJbMzJdIHRyYW5zaXRpb25lZCBmcm9tIDEgdG8gMC4gCitldmVudDoweDU1IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlBNQzNfT1ZFUkZMT1cgOiBDb3VudHMgdGhlIG51bWJlciBvZiB0aW1lcyBQTUMzWzMyXSB0cmFuc2l0aW9uZWQgZnJvbSAxIHRvIDAuCitldmVudDoweDU2IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOklOVEVSUlVQVFMgOiBOdW1iZXIgb2YgaW50ZXJydXB0cyB0YWtlbgorZXZlbnQ6MHg1NyBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpFWFRFUk5BTF9JTlRFUlJVUFRTIDogTnVtYmVyIG9mIGV4dGVybmFsIGlucHV0IGludGVycnVwdHMgdGFrZW4KK2V2ZW50OjB4NTggY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6Q1JJVElDQUxfSU5URVJSVVBUUyA6IE51bWJlciBvZiBjcml0aWNhbCBpbnB1dCBpbnRlcnJ1cHRzIHRha2VuCitldmVudDoweDU5IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlNDX1RSQVBfSU5URVJSVVBUUyA6IE51bWJlciBvZiBzeXN0ZW0gY2FsbCBhbmQgdHJhcCBpbnRlcnJ1cHRzCmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9ldmVudHMvcHBjL2U1MDB2Mi91bml0X21hc2tzIGIvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL3BwYy9lNTAwdjIvdW5pdF9tYXNrcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTVjNjUzCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL3BwYy9lNTAwdjIvdW5pdF9tYXNrcwpAQCAtMCwwICsxLDQgQEAKKyMgZTUwMCBwb3NzaWJsZSB1bml0IG1hc2tzCisjCituYW1lOnplcm8gdHlwZTptYW5kYXRvcnkgZGVmYXVsdDoweDAKKwkweDAgTm8gdW5pdCBtYXNrCmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9ldmVudHMvcHBjNjQvOTcwL2V2ZW50X21hcHBpbmdzIGIvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL3BwYzY0Lzk3MC9ldmVudF9tYXBwaW5ncwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43M2NlOWQ1Ci0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL3BwYzY0Lzk3MC9ldmVudF9tYXBwaW5ncwpAQCAtMCwwICsxLDQ5NCBAQAorI01hcHBpbmcgb2YgZXZlbnQgZ3JvdXBzIHRvIE1NQ1IgdmFsdWVzCisKKyNHcm91cCBEZWZhdWx0CitldmVudDowWDAwMSBtbWNyMDowWDA0MDBDNTFFIG1tY3IxOjBYMDAwMDAwMDAwQTQ2RjE4QyBtbWNyYTowWDAwMDAyMDAxCisKKyNHcm91cCAxIHBtX3NsaWNlMCwgVGltZSBTbGljZSAwCitldmVudDowWDAxMCBtbWNyMDowWDAwMDAwNTFFIG1tY3IxOjBYMDAwMDAwMDAwQTQ2RjE4QyBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDAxMSBtbWNyMDowWDAwMDAwNTFFIG1tY3IxOjBYMDAwMDAwMDAwQTQ2RjE4QyBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDAxMiBtbWNyMDowWDAwMDAwNTFFIG1tY3IxOjBYMDAwMDAwMDAwQTQ2RjE4QyBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDAxMyBtbWNyMDowWDAwMDAwNTFFIG1tY3IxOjBYMDAwMDAwMDAwQTQ2RjE4QyBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDAxNCBtbWNyMDowWDAwMDAwNTFFIG1tY3IxOjBYMDAwMDAwMDAwQTQ2RjE4QyBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDAxNSBtbWNyMDowWDAwMDAwNTFFIG1tY3IxOjBYMDAwMDAwMDAwQTQ2RjE4QyBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDAxNiBtbWNyMDowWDAwMDAwNTFFIG1tY3IxOjBYMDAwMDAwMDAwQTQ2RjE4QyBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDAxNyBtbWNyMDowWDAwMDAwNTFFIG1tY3IxOjBYMDAwMDAwMDAwQTQ2RjE4QyBtbWNyYTowWDAwMDAyMDAxCisKKyNHcm91cCAyIHBtX2Vwcm9mLCBHcm91cCBmb3IgdXNlIHdpdGggZXByb2YKK2V2ZW50OjBYMDIwIG1tY3IwOjBYMDAwMDBGMUUgbW1jcjE6MFg0MDAzMDAxMDA1RjA5MDAwIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMDIxIG1tY3IwOjBYMDAwMDBGMUUgbW1jcjE6MFg0MDAzMDAxMDA1RjA5MDAwIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMDIyIG1tY3IwOjBYMDAwMDBGMUUgbW1jcjE6MFg0MDAzMDAxMDA1RjA5MDAwIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMDIzIG1tY3IwOjBYMDAwMDBGMUUgbW1jcjE6MFg0MDAzMDAxMDA1RjA5MDAwIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMDI0IG1tY3IwOjBYMDAwMDBGMUUgbW1jcjE6MFg0MDAzMDAxMDA1RjA5MDAwIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMDI1IG1tY3IwOjBYMDAwMDBGMUUgbW1jcjE6MFg0MDAzMDAxMDA1RjA5MDAwIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMDI2IG1tY3IwOjBYMDAwMDBGMUUgbW1jcjE6MFg0MDAzMDAxMDA1RjA5MDAwIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMDI3IG1tY3IwOjBYMDAwMDBGMUUgbW1jcjE6MFg0MDAzMDAxMDA1RjA5MDAwIG1tY3JhOjBYMDAwMDIwMDEKKworI0dyb3VwIDMgcG1fYmFzaWMsIEJhc2ljIHBlcmZvcm1hbmNlIGluZGljYXRvcnMKK2V2ZW50OjBYMDMwIG1tY3IwOjBYMDAwMDA5MUUgbW1jcjE6MFg0MDAzMDAxMDA1RjA5MDAwIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMDMxIG1tY3IwOjBYMDAwMDA5MUUgbW1jcjE6MFg0MDAzMDAxMDA1RjA5MDAwIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMDMyIG1tY3IwOjBYMDAwMDA5MUUgbW1jcjE6MFg0MDAzMDAxMDA1RjA5MDAwIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMDMzIG1tY3IwOjBYMDAwMDA5MUUgbW1jcjE6MFg0MDAzMDAxMDA1RjA5MDAwIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMDM0IG1tY3IwOjBYMDAwMDA5MUUgbW1jcjE6MFg0MDAzMDAxMDA1RjA5MDAwIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMDM1IG1tY3IwOjBYMDAwMDA5MUUgbW1jcjE6MFg0MDAzMDAxMDA1RjA5MDAwIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMDM2IG1tY3IwOjBYMDAwMDA5MUUgbW1jcjE6MFg0MDAzMDAxMDA1RjA5MDAwIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMDM3IG1tY3IwOjBYMDAwMDA5MUUgbW1jcjE6MFg0MDAzMDAxMDA1RjA5MDAwIG1tY3JhOjBYMDAwMDIwMDEKKworI0dyb3VwIDQgcG1fbHN1LCBJbmZvcm1hdGlvbiBvbiB0aGUgTG9hZCBTdG9yZSBVbml0CitldmVudDowWDA0MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwRjAwMDA3QTQwMDAwMCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDA0MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwRjAwMDA3QTQwMDAwMCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDA0MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwRjAwMDA3QTQwMDAwMCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDA0MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwRjAwMDA3QTQwMDAwMCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDA0NCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwRjAwMDA3QTQwMDAwMCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDA0NSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwRjAwMDA3QTQwMDAwMCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDA0NiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwRjAwMDA3QTQwMDAwMCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDA0NyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwRjAwMDA3QTQwMDAwMCBtbWNyYTowWDAwMDAyMDAxCisKKyNHcm91cCA1IHBtX2ZwdTEsIEZsb2F0aW5nIFBvaW50IGV2ZW50cworZXZlbnQ6MFgwNTAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMDAxRTA0ODAgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgwNTEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMDAxRTA0ODAgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgwNTIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMDAxRTA0ODAgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgwNTMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMDAxRTA0ODAgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgwNTQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMDAxRTA0ODAgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgwNTUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMDAxRTA0ODAgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgwNTYgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMDAxRTA0ODAgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgwNTcgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMDAxRTA0ODAgbW1jcmE6MFgwMDAwMjAwMQorCisjR3JvdXAgNiBwbV9mcHUyLCBGbG9hdGluZyBQb2ludCBldmVudHMKK2V2ZW50OjBYMDYwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMjBFODdBNDAwMDAwIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMDYxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMjBFODdBNDAwMDAwIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMDYyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMjBFODdBNDAwMDAwIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMDYzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMjBFODdBNDAwMDAwIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMDY0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMjBFODdBNDAwMDAwIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMDY1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMjBFODdBNDAwMDAwIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMDY2IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMjBFODdBNDAwMDAwIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMDY3IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMjBFODdBNDAwMDAwIG1tY3JhOjBYMDAwMDIwMDEKKworI0dyb3VwIDcgcG1faXN1X3JlbmFtZSwgSVNVIFJlbmFtZSBQb29sIEV2ZW50cworZXZlbnQ6MFgwNzAgbW1jcjA6MFgwMDAwMTIyOCBtbWNyMTowWDQwMDAwMDIxOEU2RDg0QkMgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgwNzEgbW1jcjA6MFgwMDAwMTIyOCBtbWNyMTowWDQwMDAwMDIxOEU2RDg0QkMgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgwNzIgbW1jcjA6MFgwMDAwMTIyOCBtbWNyMTowWDQwMDAwMDIxOEU2RDg0QkMgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgwNzMgbW1jcjA6MFgwMDAwMTIyOCBtbWNyMTowWDQwMDAwMDIxOEU2RDg0QkMgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgwNzQgbW1jcjA6MFgwMDAwMTIyOCBtbWNyMTowWDQwMDAwMDIxOEU2RDg0QkMgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgwNzUgbW1jcjA6MFgwMDAwMTIyOCBtbWNyMTowWDQwMDAwMDIxOEU2RDg0QkMgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgwNzYgbW1jcjA6MFgwMDAwMTIyOCBtbWNyMTowWDQwMDAwMDIxOEU2RDg0QkMgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgwNzcgbW1jcjA6MFgwMDAwMTIyOCBtbWNyMTowWDQwMDAwMDIxOEU2RDg0QkMgbW1jcmE6MFgwMDAwMjAwMQorCisjR3JvdXAgOCBwbV9pc3VfcXVldWVzMSwgSVNVIFJlbmFtZSBQb29sIEV2ZW50cworZXZlbnQ6MFgwODAgbW1jcjA6MFgwMDAwMTMyRSBtbWNyMTowWDQwMDAwMDAwODUxRTk5NEMgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgwODEgbW1jcjA6MFgwMDAwMTMyRSBtbWNyMTowWDQwMDAwMDAwODUxRTk5NEMgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgwODIgbW1jcjA6MFgwMDAwMTMyRSBtbWNyMTowWDQwMDAwMDAwODUxRTk5NEMgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgwODMgbW1jcjA6MFgwMDAwMTMyRSBtbWNyMTowWDQwMDAwMDAwODUxRTk5NEMgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgwODQgbW1jcjA6MFgwMDAwMTMyRSBtbWNyMTowWDQwMDAwMDAwODUxRTk5NEMgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgwODUgbW1jcjA6MFgwMDAwMTMyRSBtbWNyMTowWDQwMDAwMDAwODUxRTk5NEMgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgwODYgbW1jcjA6MFgwMDAwMTMyRSBtbWNyMTowWDQwMDAwMDAwODUxRTk5NEMgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgwODcgbW1jcjA6MFgwMDAwMTMyRSBtbWNyMTowWDQwMDAwMDAwODUxRTk5NEMgbW1jcmE6MFgwMDAwMjAwMQorCisjR3JvdXAgOSBwbV9pc3VfZmxvdywgSVNVIEluc3RydWN0aW9uIEZsb3cgRXZlbnRzCitldmVudDowWDA5MCBtbWNyMDowWDAwMDAxODFFIG1tY3IxOjBYNDAwMDAwQjNEN0I3QzRCQyBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDA5MSBtbWNyMDowWDAwMDAxODFFIG1tY3IxOjBYNDAwMDAwQjNEN0I3QzRCQyBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDA5MiBtbWNyMDowWDAwMDAxODFFIG1tY3IxOjBYNDAwMDAwQjNEN0I3QzRCQyBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDA5MyBtbWNyMDowWDAwMDAxODFFIG1tY3IxOjBYNDAwMDAwQjNEN0I3QzRCQyBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDA5NCBtbWNyMDowWDAwMDAxODFFIG1tY3IxOjBYNDAwMDAwQjNEN0I3QzRCQyBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDA5NSBtbWNyMDowWDAwMDAxODFFIG1tY3IxOjBYNDAwMDAwQjNEN0I3QzRCQyBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDA5NiBtbWNyMDowWDAwMDAxODFFIG1tY3IxOjBYNDAwMDAwQjNEN0I3QzRCQyBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDA5NyBtbWNyMDowWDAwMDAxODFFIG1tY3IxOjBYNDAwMDAwQjNEN0I3QzRCQyBtbWNyYTowWDAwMDAyMDAxCisKKyNHcm91cCAxMCBwbV9pc3Vfd29yaywgSVNVIEluZGljYXRvcnMgb2YgV29yayBCbG9ja2FnZQorZXZlbnQ6MFgwQTAgbW1jcjA6MFgwMDAwMDQwMiBtbWNyMTowWDQwMDAwMDA1MEZERTlEODggbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgwQTEgbW1jcjA6MFgwMDAwMDQwMiBtbWNyMTowWDQwMDAwMDA1MEZERTlEODggbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgwQTIgbW1jcjA6MFgwMDAwMDQwMiBtbWNyMTowWDQwMDAwMDA1MEZERTlEODggbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgwQTMgbW1jcjA6MFgwMDAwMDQwMiBtbWNyMTowWDQwMDAwMDA1MEZERTlEODggbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgwQTQgbW1jcjA6MFgwMDAwMDQwMiBtbWNyMTowWDQwMDAwMDA1MEZERTlEODggbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgwQTUgbW1jcjA6MFgwMDAwMDQwMiBtbWNyMTowWDQwMDAwMDA1MEZERTlEODggbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgwQTYgbW1jcjA6MFgwMDAwMDQwMiBtbWNyMTowWDQwMDAwMDA1MEZERTlEODggbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgwQTcgbW1jcjA6MFgwMDAwMDQwMiBtbWNyMTowWDQwMDAwMDA1MEZERTlEODggbW1jcmE6MFgwMDAwMjAwMQorCisjR3JvdXAgMTEgcG1fZnB1MywgRmxvYXRpbmcgUG9pbnQgZXZlbnRzIGJ5IHVuaXQKK2V2ZW50OjBYMEIwIG1tY3IwOjBYMDAwMDEwMjggbW1jcjE6MFgwMDAwMDAwMDhENjM1NEJDIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMEIxIG1tY3IwOjBYMDAwMDEwMjggbW1jcjE6MFgwMDAwMDAwMDhENjM1NEJDIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMEIyIG1tY3IwOjBYMDAwMDEwMjggbW1jcjE6MFgwMDAwMDAwMDhENjM1NEJDIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMEIzIG1tY3IwOjBYMDAwMDEwMjggbW1jcjE6MFgwMDAwMDAwMDhENjM1NEJDIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMEI0IG1tY3IwOjBYMDAwMDEwMjggbW1jcjE6MFgwMDAwMDAwMDhENjM1NEJDIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMEI1IG1tY3IwOjBYMDAwMDEwMjggbW1jcjE6MFgwMDAwMDAwMDhENjM1NEJDIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMEI2IG1tY3IwOjBYMDAwMDEwMjggbW1jcjE6MFgwMDAwMDAwMDhENjM1NEJDIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMEI3IG1tY3IwOjBYMDAwMDEwMjggbW1jcjE6MFgwMDAwMDAwMDhENjM1NEJDIG1tY3JhOjBYMDAwMDIwMDEKKworI0dyb3VwIDEyIHBtX2ZwdTQsIEZsb2F0aW5nIFBvaW50IGV2ZW50cyBieSB1bml0CitldmVudDowWDBDMCBtbWNyMDowWDAwMDAxMjJDIG1tY3IxOjBYMDAwMDAwMDA5REU3NzRCQyBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDBDMSBtbWNyMDowWDAwMDAxMjJDIG1tY3IxOjBYMDAwMDAwMDA5REU3NzRCQyBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDBDMiBtbWNyMDowWDAwMDAxMjJDIG1tY3IxOjBYMDAwMDAwMDA5REU3NzRCQyBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDBDMyBtbWNyMDowWDAwMDAxMjJDIG1tY3IxOjBYMDAwMDAwMDA5REU3NzRCQyBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDBDNCBtbWNyMDowWDAwMDAxMjJDIG1tY3IxOjBYMDAwMDAwMDA5REU3NzRCQyBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDBDNSBtbWNyMDowWDAwMDAxMjJDIG1tY3IxOjBYMDAwMDAwMDA5REU3NzRCQyBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDBDNiBtbWNyMDowWDAwMDAxMjJDIG1tY3IxOjBYMDAwMDAwMDA5REU3NzRCQyBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDBDNyBtbWNyMDowWDAwMDAxMjJDIG1tY3IxOjBYMDAwMDAwMDA5REU3NzRCQyBtbWNyYTowWDAwMDAyMDAxCisKKyNHcm91cCAxMyBwbV9mcHU1LCBGbG9hdGluZyBQb2ludCBldmVudHMgYnkgdW5pdAorZXZlbnQ6MFgwRDAgbW1jcjA6MFgwMDAwMTgzOCBtbWNyMTowWDAwMDAwMEMwODUxRTk5NTggbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgwRDEgbW1jcjA6MFgwMDAwMTgzOCBtbWNyMTowWDAwMDAwMEMwODUxRTk5NTggbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgwRDIgbW1jcjA6MFgwMDAwMTgzOCBtbWNyMTowWDAwMDAwMEMwODUxRTk5NTggbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgwRDMgbW1jcjA6MFgwMDAwMTgzOCBtbWNyMTowWDAwMDAwMEMwODUxRTk5NTggbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgwRDQgbW1jcjA6MFgwMDAwMTgzOCBtbWNyMTowWDAwMDAwMEMwODUxRTk5NTggbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgwRDUgbW1jcjA6MFgwMDAwMTgzOCBtbWNyMTowWDAwMDAwMEMwODUxRTk5NTggbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgwRDYgbW1jcjA6MFgwMDAwMTgzOCBtbWNyMTowWDAwMDAwMEMwODUxRTk5NTggbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgwRDcgbW1jcjA6MFgwMDAwMTgzOCBtbWNyMTowWDAwMDAwMEMwODUxRTk5NTggbW1jcmE6MFgwMDAwMjAwMQorCisjR3JvdXAgMTQgcG1fZnB1NywgRmxvYXRpbmcgUG9pbnQgZXZlbnRzIGJ5IHVuaXQKK2V2ZW50OjBYMEUwIG1tY3IwOjBYMDAwMDE5M0EgbW1jcjE6MFgwMDAwMDBDODlEREU5N0UwIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMEUxIG1tY3IwOjBYMDAwMDE5M0EgbW1jcjE6MFgwMDAwMDBDODlEREU5N0UwIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMEUyIG1tY3IwOjBYMDAwMDE5M0EgbW1jcjE6MFgwMDAwMDBDODlEREU5N0UwIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMEUzIG1tY3IwOjBYMDAwMDE5M0EgbW1jcjE6MFgwMDAwMDBDODlEREU5N0UwIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMEU0IG1tY3IwOjBYMDAwMDE5M0EgbW1jcjE6MFgwMDAwMDBDODlEREU5N0UwIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMEU1IG1tY3IwOjBYMDAwMDE5M0EgbW1jcjE6MFgwMDAwMDBDODlEREU5N0UwIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMEU2IG1tY3IwOjBYMDAwMDE5M0EgbW1jcjE6MFgwMDAwMDBDODlEREU5N0UwIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMEU3IG1tY3IwOjBYMDAwMDE5M0EgbW1jcjE6MFgwMDAwMDBDODlEREU5N0UwIG1tY3JhOjBYMDAwMDIwMDEKKworI0dyb3VwIDE1IHBtX2xzdV9mbHVzaCwgTFNVIEZsdXNoIEV2ZW50cworZXZlbnQ6MFgwRjAgbW1jcjA6MFgwMDAwMTIyQyBtbWNyMTowWDAwMEMwMDAwN0JFNzc0QkMgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgwRjEgbW1jcjA6MFgwMDAwMTIyQyBtbWNyMTowWDAwMEMwMDAwN0JFNzc0QkMgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgwRjIgbW1jcjA6MFgwMDAwMTIyQyBtbWNyMTowWDAwMEMwMDAwN0JFNzc0QkMgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgwRjMgbW1jcjA6MFgwMDAwMTIyQyBtbWNyMTowWDAwMEMwMDAwN0JFNzc0QkMgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgwRjQgbW1jcjA6MFgwMDAwMTIyQyBtbWNyMTowWDAwMEMwMDAwN0JFNzc0QkMgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgwRjUgbW1jcjA6MFgwMDAwMTIyQyBtbWNyMTowWDAwMEMwMDAwN0JFNzc0QkMgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgwRjYgbW1jcjA6MFgwMDAwMTIyQyBtbWNyMTowWDAwMEMwMDAwN0JFNzc0QkMgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgwRjcgbW1jcjA6MFgwMDAwMTIyQyBtbWNyMTowWDAwMEMwMDAwN0JFNzc0QkMgbW1jcmE6MFgwMDAwMjAwMQorCisjR3JvdXAgMTYgcG1fbHN1X2xvYWQxLCBMU1UgTG9hZCBFdmVudHMKK2V2ZW50OjBYMTAwIG1tY3IwOjBYMDAwMDEwMjggbW1jcjE6MFgwMDBGMDAwMDg1MUU5OTU4IG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMTAxIG1tY3IwOjBYMDAwMDEwMjggbW1jcjE6MFgwMDBGMDAwMDg1MUU5OTU4IG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMTAyIG1tY3IwOjBYMDAwMDEwMjggbW1jcjE6MFgwMDBGMDAwMDg1MUU5OTU4IG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMTAzIG1tY3IwOjBYMDAwMDEwMjggbW1jcjE6MFgwMDBGMDAwMDg1MUU5OTU4IG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMTA0IG1tY3IwOjBYMDAwMDEwMjggbW1jcjE6MFgwMDBGMDAwMDg1MUU5OTU4IG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMTA1IG1tY3IwOjBYMDAwMDEwMjggbW1jcjE6MFgwMDBGMDAwMDg1MUU5OTU4IG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMTA2IG1tY3IwOjBYMDAwMDEwMjggbW1jcjE6MFgwMDBGMDAwMDg1MUU5OTU4IG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMTA3IG1tY3IwOjBYMDAwMDEwMjggbW1jcjE6MFgwMDBGMDAwMDg1MUU5OTU4IG1tY3JhOjBYMDAwMDIwMDEKKworI0dyb3VwIDE3IHBtX2xzdV9zdG9yZTEsIExTVSBTdG9yZSBFdmVudHMKK2V2ZW50OjBYMTEwIG1tY3IwOjBYMDAwMDExMkEgbW1jcjE6MFgwMDBGMDAwMDhENUU5OURDIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMTExIG1tY3IwOjBYMDAwMDExMkEgbW1jcjE6MFgwMDBGMDAwMDhENUU5OURDIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMTEyIG1tY3IwOjBYMDAwMDExMkEgbW1jcjE6MFgwMDBGMDAwMDhENUU5OURDIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMTEzIG1tY3IwOjBYMDAwMDExMkEgbW1jcjE6MFgwMDBGMDAwMDhENUU5OURDIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMTE0IG1tY3IwOjBYMDAwMDExMkEgbW1jcjE6MFgwMDBGMDAwMDhENUU5OURDIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMTE1IG1tY3IwOjBYMDAwMDExMkEgbW1jcjE6MFgwMDBGMDAwMDhENUU5OURDIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMTE2IG1tY3IwOjBYMDAwMDExMkEgbW1jcjE6MFgwMDBGMDAwMDhENUU5OURDIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMTE3IG1tY3IwOjBYMDAwMDExMkEgbW1jcjE6MFgwMDBGMDAwMDhENUU5OURDIG1tY3JhOjBYMDAwMDIwMDEKKworI0dyb3VwIDE4IHBtX2xzdV9zdG9yZTIsIExTVSBTdG9yZSBFdmVudHMKK2V2ZW50OjBYMTIwIG1tY3IwOjBYMDAwMDE4MzggbW1jcjE6MFgwMDAzQzBEMDhENzZGNEJDIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMTIxIG1tY3IwOjBYMDAwMDE4MzggbW1jcjE6MFgwMDAzQzBEMDhENzZGNEJDIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMTIyIG1tY3IwOjBYMDAwMDE4MzggbW1jcjE6MFgwMDAzQzBEMDhENzZGNEJDIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMTIzIG1tY3IwOjBYMDAwMDE4MzggbW1jcjE6MFgwMDAzQzBEMDhENzZGNEJDIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMTI0IG1tY3IwOjBYMDAwMDE4MzggbW1jcjE6MFgwMDAzQzBEMDhENzZGNEJDIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMTI1IG1tY3IwOjBYMDAwMDE4MzggbW1jcjE6MFgwMDAzQzBEMDhENzZGNEJDIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMTI2IG1tY3IwOjBYMDAwMDE4MzggbW1jcjE6MFgwMDAzQzBEMDhENzZGNEJDIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMTI3IG1tY3IwOjBYMDAwMDE4MzggbW1jcjE6MFgwMDAzQzBEMDhENzZGNEJDIG1tY3JhOjBYMDAwMDIwMDEKKworI0dyb3VwIDE5IHBtX2xzdTcsIEluZm9ybWF0aW9uIG9uIHRoZSBMb2FkIFN0b3JlIFVuaXQKK2V2ZW50OjBYMTMwIG1tY3IwOjBYMDAwMDEyMkMgbW1jcjE6MFgwMDA4MzAwNDdCRDJGRTNDIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMTMxIG1tY3IwOjBYMDAwMDEyMkMgbW1jcjE6MFgwMDA4MzAwNDdCRDJGRTNDIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMTMyIG1tY3IwOjBYMDAwMDEyMkMgbW1jcjE6MFgwMDA4MzAwNDdCRDJGRTNDIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMTMzIG1tY3IwOjBYMDAwMDEyMkMgbW1jcjE6MFgwMDA4MzAwNDdCRDJGRTNDIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMTM0IG1tY3IwOjBYMDAwMDEyMkMgbW1jcjE6MFgwMDA4MzAwNDdCRDJGRTNDIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMTM1IG1tY3IwOjBYMDAwMDEyMkMgbW1jcjE6MFgwMDA4MzAwNDdCRDJGRTNDIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMTM2IG1tY3IwOjBYMDAwMDEyMkMgbW1jcjE6MFgwMDA4MzAwNDdCRDJGRTNDIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMTM3IG1tY3IwOjBYMDAwMDEyMkMgbW1jcjE6MFgwMDA4MzAwNDdCRDJGRTNDIG1tY3JhOjBYMDAwMDIwMDEKKworI0dyb3VwIDIwIHBtX21pc2MsIE1pc2MgRXZlbnRzIGZvciB0ZXN0aW5nCitldmVudDowWDE0MCBtbWNyMDowWDAwMDAwNDA0IG1tY3IxOjBYMDAwMDAwMDAyM0M2OTE5NCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDE0MSBtbWNyMDowWDAwMDAwNDA0IG1tY3IxOjBYMDAwMDAwMDAyM0M2OTE5NCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDE0MiBtbWNyMDowWDAwMDAwNDA0IG1tY3IxOjBYMDAwMDAwMDAyM0M2OTE5NCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDE0MyBtbWNyMDowWDAwMDAwNDA0IG1tY3IxOjBYMDAwMDAwMDAyM0M2OTE5NCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDE0NCBtbWNyMDowWDAwMDAwNDA0IG1tY3IxOjBYMDAwMDAwMDAyM0M2OTE5NCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDE0NSBtbWNyMDowWDAwMDAwNDA0IG1tY3IxOjBYMDAwMDAwMDAyM0M2OTE5NCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDE0NiBtbWNyMDowWDAwMDAwNDA0IG1tY3IxOjBYMDAwMDAwMDAyM0M2OTE5NCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDE0NyBtbWNyMDowWDAwMDAwNDA0IG1tY3IxOjBYMDAwMDAwMDAyM0M2OTE5NCBtbWNyYTowWDAwMDAyMDAxCisKKyNHcm91cCAyMSBwbV9wZV9iZW5jaDEsIFBFIEJlbmNobWFya2VyIGdyb3VwIGZvciBGUCBhbmFseXNpcworZXZlbnQ6MFgxNTAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDEwMDAxMDAyMDAxRTA0ODAgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgxNTEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDEwMDAxMDAyMDAxRTA0ODAgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgxNTIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDEwMDAxMDAyMDAxRTA0ODAgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgxNTMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDEwMDAxMDAyMDAxRTA0ODAgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgxNTQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDEwMDAxMDAyMDAxRTA0ODAgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgxNTUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDEwMDAxMDAyMDAxRTA0ODAgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgxNTYgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDEwMDAxMDAyMDAxRTA0ODAgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgxNTcgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDEwMDAxMDAyMDAxRTA0ODAgbW1jcmE6MFgwMDAwMjAwMQorCisjR3JvdXAgMjIgcG1fcGVfYmVuY2g0LCBQRSBCZW5jaG1hcmtlciBncm91cCBmb3IgTDEgYW5kIFRMQgorZXZlbnQ6MFgxNjAgbW1jcjA6MFgwMDAwMTQyMCBtbWNyMTowWDAwMEIwMDAwMDRERTkwMDAgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgxNjEgbW1jcjA6MFgwMDAwMTQyMCBtbWNyMTowWDAwMEIwMDAwMDRERTkwMDAgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgxNjIgbW1jcjA6MFgwMDAwMTQyMCBtbWNyMTowWDAwMEIwMDAwMDRERTkwMDAgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgxNjMgbW1jcjA6MFgwMDAwMTQyMCBtbWNyMTowWDAwMEIwMDAwMDRERTkwMDAgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgxNjQgbW1jcjA6MFgwMDAwMTQyMCBtbWNyMTowWDAwMEIwMDAwMDRERTkwMDAgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgxNjUgbW1jcjA6MFgwMDAwMTQyMCBtbWNyMTowWDAwMEIwMDAwMDRERTkwMDAgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgxNjYgbW1jcjA6MFgwMDAwMTQyMCBtbWNyMTowWDAwMEIwMDAwMDRERTkwMDAgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgxNjcgbW1jcjA6MFgwMDAwMTQyMCBtbWNyMTowWDAwMEIwMDAwMDRERTkwMDAgbW1jcmE6MFgwMDAwMjAwMQorCisjR3JvdXAgMjMgcG1faHBtY291bnQxLCBIcG1jb3VudCBncm91cCBmb3IgTDEgYW5kIFRMQiBiZWhhdmlvcgorZXZlbnQ6MFgxNzAgbW1jcjA6MFgwMDAwMTQwNCBtbWNyMTowWDAwMEIwMDAwMDRERTkwMDAgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgxNzEgbW1jcjA6MFgwMDAwMTQwNCBtbWNyMTowWDAwMEIwMDAwMDRERTkwMDAgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgxNzIgbW1jcjA6MFgwMDAwMTQwNCBtbWNyMTowWDAwMEIwMDAwMDRERTkwMDAgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgxNzMgbW1jcjA6MFgwMDAwMTQwNCBtbWNyMTowWDAwMEIwMDAwMDRERTkwMDAgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgxNzQgbW1jcjA6MFgwMDAwMTQwNCBtbWNyMTowWDAwMEIwMDAwMDRERTkwMDAgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgxNzUgbW1jcjA6MFgwMDAwMTQwNCBtbWNyMTowWDAwMEIwMDAwMDRERTkwMDAgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgxNzYgbW1jcjA6MFgwMDAwMTQwNCBtbWNyMTowWDAwMEIwMDAwMDRERTkwMDAgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgxNzcgbW1jcjA6MFgwMDAwMTQwNCBtbWNyMTowWDAwMEIwMDAwMDRERTkwMDAgbW1jcmE6MFgwMDAwMjAwMQorCisjR3JvdXAgMjQgcG1faHBtY291bnQyLCBIcG1jb3VudCBncm91cCBmb3IgY29tcHV0YXRpb24KK2V2ZW50OjBYMTgwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMjAyODlEREUwNDgwIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMTgxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMjAyODlEREUwNDgwIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMTgyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMjAyODlEREUwNDgwIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMTgzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMjAyODlEREUwNDgwIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMTg0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMjAyODlEREUwNDgwIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMTg1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMjAyODlEREUwNDgwIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMTg2IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMjAyODlEREUwNDgwIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMTg3IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMjAyODlEREUwNDgwIG1tY3JhOjBYMDAwMDIwMDEKKworI0dyb3VwIDI1IHBtX2wxYW5kYnIsIEwxIG1pc3NlcyBhbmQgYnJhbmNoIG1pc3NwcmVkaWN0IGFuYWx5c2lzCitldmVudDowWDE5MCBtbWNyMDowWDAwMDAwOTFFIG1tY3IxOjBYODAwM0MwMUQwNjc2RkQ2QyBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDE5MSBtbWNyMDowWDAwMDAwOTFFIG1tY3IxOjBYODAwM0MwMUQwNjc2RkQ2QyBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDE5MiBtbWNyMDowWDAwMDAwOTFFIG1tY3IxOjBYODAwM0MwMUQwNjc2RkQ2QyBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDE5MyBtbWNyMDowWDAwMDAwOTFFIG1tY3IxOjBYODAwM0MwMUQwNjc2RkQ2QyBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDE5NCBtbWNyMDowWDAwMDAwOTFFIG1tY3IxOjBYODAwM0MwMUQwNjc2RkQ2QyBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDE5NSBtbWNyMDowWDAwMDAwOTFFIG1tY3IxOjBYODAwM0MwMUQwNjc2RkQ2QyBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDE5NiBtbWNyMDowWDAwMDAwOTFFIG1tY3IxOjBYODAwM0MwMUQwNjc2RkQ2QyBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDE5NyBtbWNyMDowWDAwMDAwOTFFIG1tY3IxOjBYODAwM0MwMUQwNjc2RkQ2QyBtbWNyYTowWDAwMDAyMDAxCisKKyNHcm91cCAyNiBwbV9pbWl4LCBJbnN0cnVjdGlvbiBtaXg6IGxvYWRzLCBzdG9yZXMgYW5kIGJyYW5jaGVzCitldmVudDowWDFBMCBtbWNyMDowWDAwMDAwOTFFIG1tY3IxOjBYODAwM0MwMjEwNjVGQjAwMCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDFBMSBtbWNyMDowWDAwMDAwOTFFIG1tY3IxOjBYODAwM0MwMjEwNjVGQjAwMCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDFBMiBtbWNyMDowWDAwMDAwOTFFIG1tY3IxOjBYODAwM0MwMjEwNjVGQjAwMCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDFBMyBtbWNyMDowWDAwMDAwOTFFIG1tY3IxOjBYODAwM0MwMjEwNjVGQjAwMCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDFBNCBtbWNyMDowWDAwMDAwOTFFIG1tY3IxOjBYODAwM0MwMjEwNjVGQjAwMCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDFBNSBtbWNyMDowWDAwMDAwOTFFIG1tY3IxOjBYODAwM0MwMjEwNjVGQjAwMCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDFBNiBtbWNyMDowWDAwMDAwOTFFIG1tY3IxOjBYODAwM0MwMjEwNjVGQjAwMCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDFBNyBtbWNyMDowWDAwMDAwOTFFIG1tY3IxOjBYODAwM0MwMjEwNjVGQjAwMCBtbWNyYTowWDAwMDAyMDAxCisKKyNHcm91cCAyNyBwbV9icmFuY2gsIFNMQiBhbmQgYnJhbmNoIG1pc3NwcmVkaWN0IGFuYWx5c2lzCitldmVudDowWDFCMCBtbWNyMDowWDAwMDAwNTJBIG1tY3IxOjBYODAwODAwMEJDRUEyRjRFQyBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDFCMSBtbWNyMDowWDAwMDAwNTJBIG1tY3IxOjBYODAwODAwMEJDRUEyRjRFQyBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDFCMiBtbWNyMDowWDAwMDAwNTJBIG1tY3IxOjBYODAwODAwMEJDRUEyRjRFQyBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDFCMyBtbWNyMDowWDAwMDAwNTJBIG1tY3IxOjBYODAwODAwMEJDRUEyRjRFQyBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDFCNCBtbWNyMDowWDAwMDAwNTJBIG1tY3IxOjBYODAwODAwMEJDRUEyRjRFQyBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDFCNSBtbWNyMDowWDAwMDAwNTJBIG1tY3IxOjBYODAwODAwMEJDRUEyRjRFQyBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDFCNiBtbWNyMDowWDAwMDAwNTJBIG1tY3IxOjBYODAwODAwMEJDRUEyRjRFQyBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDFCNyBtbWNyMDowWDAwMDAwNTJBIG1tY3IxOjBYODAwODAwMEJDRUEyRjRFQyBtbWNyYTowWDAwMDAyMDAxCisKKyNHcm91cCAyOCBwbV9kYXRhLCBkYXRhIHNvdXJjZSBhbmQgTE1RCitldmVudDowWDFDMCBtbWNyMDowWDAwMDAwNzEyIG1tY3IxOjBYMDAwMDMwMEUzQkQyRkY3NCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDFDMSBtbWNyMDowWDAwMDAwNzEyIG1tY3IxOjBYMDAwMDMwMEUzQkQyRkY3NCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDFDMiBtbWNyMDowWDAwMDAwNzEyIG1tY3IxOjBYMDAwMDMwMEUzQkQyRkY3NCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDFDMyBtbWNyMDowWDAwMDAwNzEyIG1tY3IxOjBYMDAwMDMwMEUzQkQyRkY3NCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDFDNCBtbWNyMDowWDAwMDAwNzEyIG1tY3IxOjBYMDAwMDMwMEUzQkQyRkY3NCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDFDNSBtbWNyMDowWDAwMDAwNzEyIG1tY3IxOjBYMDAwMDMwMEUzQkQyRkY3NCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDFDNiBtbWNyMDowWDAwMDAwNzEyIG1tY3IxOjBYMDAwMDMwMEUzQkQyRkY3NCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDFDNyBtbWNyMDowWDAwMDAwNzEyIG1tY3IxOjBYMDAwMDMwMEUzQkQyRkY3NCBtbWNyYTowWDAwMDAyMDAxCisKKyNHcm91cCAyOSBwbV90bGIsIFRMQiBhbmQgTFJRIHBsdXMgZGF0YSBwcmVmZXRjaAorZXZlbnQ6MFgxRDAgbW1jcjA6MFgwMDAwMTQyMCBtbWNyMTowWDAwMDhFMDNDNEJGREFDRUMgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgxRDEgbW1jcjA6MFgwMDAwMTQyMCBtbWNyMTowWDAwMDhFMDNDNEJGREFDRUMgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgxRDIgbW1jcjA6MFgwMDAwMTQyMCBtbWNyMTowWDAwMDhFMDNDNEJGREFDRUMgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgxRDMgbW1jcjA6MFgwMDAwMTQyMCBtbWNyMTowWDAwMDhFMDNDNEJGREFDRUMgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgxRDQgbW1jcjA6MFgwMDAwMTQyMCBtbWNyMTowWDAwMDhFMDNDNEJGREFDRUMgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgxRDUgbW1jcjA6MFgwMDAwMTQyMCBtbWNyMTowWDAwMDhFMDNDNEJGREFDRUMgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgxRDYgbW1jcjA6MFgwMDAwMTQyMCBtbWNyMTowWDAwMDhFMDNDNEJGREFDRUMgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgxRDcgbW1jcjA6MFgwMDAwMTQyMCBtbWNyMTowWDAwMDhFMDNDNEJGREFDRUMgbW1jcmE6MFgwMDAwMjAwMQorCisjR3JvdXAgMzAgcG1faXNvdXJjZSwgaW5zdCBzb3VyY2UgYW5kIHRhYmxld2FsaworZXZlbnQ6MFgxRTAgbW1jcjA6MFgwMDAwMDYwQyBtbWNyMTowWDgwMEIwMEMwMjI2RUYxREMgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgxRTEgbW1jcjA6MFgwMDAwMDYwQyBtbWNyMTowWDgwMEIwMEMwMjI2RUYxREMgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgxRTIgbW1jcjA6MFgwMDAwMDYwQyBtbWNyMTowWDgwMEIwMEMwMjI2RUYxREMgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgxRTMgbW1jcjA6MFgwMDAwMDYwQyBtbWNyMTowWDgwMEIwMEMwMjI2RUYxREMgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgxRTQgbW1jcjA6MFgwMDAwMDYwQyBtbWNyMTowWDgwMEIwMEMwMjI2RUYxREMgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgxRTUgbW1jcjA6MFgwMDAwMDYwQyBtbWNyMTowWDgwMEIwMEMwMjI2RUYxREMgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgxRTYgbW1jcjA6MFgwMDAwMDYwQyBtbWNyMTowWDgwMEIwMEMwMjI2RUYxREMgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgxRTcgbW1jcjA6MFgwMDAwMDYwQyBtbWNyMTowWDgwMEIwMEMwMjI2RUYxREMgbW1jcmE6MFgwMDAwMjAwMQorCisjR3JvdXAgMzEgcG1fc3luYywgU3luYyBhbmQgU1JRCitldmVudDowWDFGMCBtbWNyMDowWDAwMDAxRDMyIG1tY3IxOjBYMDAwM0UwQzEwNzUyOTc4MCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDFGMSBtbWNyMDowWDAwMDAxRDMyIG1tY3IxOjBYMDAwM0UwQzEwNzUyOTc4MCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDFGMiBtbWNyMDowWDAwMDAxRDMyIG1tY3IxOjBYMDAwM0UwQzEwNzUyOTc4MCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDFGMyBtbWNyMDowWDAwMDAxRDMyIG1tY3IxOjBYMDAwM0UwQzEwNzUyOTc4MCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDFGNCBtbWNyMDowWDAwMDAxRDMyIG1tY3IxOjBYMDAwM0UwQzEwNzUyOTc4MCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDFGNSBtbWNyMDowWDAwMDAxRDMyIG1tY3IxOjBYMDAwM0UwQzEwNzUyOTc4MCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDFGNiBtbWNyMDowWDAwMDAxRDMyIG1tY3IxOjBYMDAwM0UwQzEwNzUyOTc4MCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDFGNyBtbWNyMDowWDAwMDAxRDMyIG1tY3IxOjBYMDAwM0UwQzEwNzUyOTc4MCBtbWNyYTowWDAwMDAyMDAxCisKKyNHcm91cCAzMiBwbV9pZXJhdCwgSUVSQVQKK2V2ZW50OjBYMjAwIG1tY3IwOjBYMDAwMDBEMTIgbW1jcjE6MFg4MDAwMDA4MkMzRDJGNEJDIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMjAxIG1tY3IwOjBYMDAwMDBEMTIgbW1jcjE6MFg4MDAwMDA4MkMzRDJGNEJDIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMjAyIG1tY3IwOjBYMDAwMDBEMTIgbW1jcjE6MFg4MDAwMDA4MkMzRDJGNEJDIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMjAzIG1tY3IwOjBYMDAwMDBEMTIgbW1jcjE6MFg4MDAwMDA4MkMzRDJGNEJDIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMjA0IG1tY3IwOjBYMDAwMDBEMTIgbW1jcjE6MFg4MDAwMDA4MkMzRDJGNEJDIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMjA1IG1tY3IwOjBYMDAwMDBEMTIgbW1jcjE6MFg4MDAwMDA4MkMzRDJGNEJDIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMjA2IG1tY3IwOjBYMDAwMDBEMTIgbW1jcjE6MFg4MDAwMDA4MkMzRDJGNEJDIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMjA3IG1tY3IwOjBYMDAwMDBEMTIgbW1jcjE6MFg4MDAwMDA4MkMzRDJGNEJDIG1tY3JhOjBYMDAwMDIwMDEKKworI0dyb3VwIDMzIHBtX2RlcmF0LCBERVJBVAorZXZlbnQ6MFgyMTAgbW1jcjA6MFgwMDAwMDQzNiBtbWNyMTowWDEwMEI3MDUyRTI3NDAwM0MgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgyMTEgbW1jcjA6MFgwMDAwMDQzNiBtbWNyMTowWDEwMEI3MDUyRTI3NDAwM0MgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgyMTIgbW1jcjA6MFgwMDAwMDQzNiBtbWNyMTowWDEwMEI3MDUyRTI3NDAwM0MgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgyMTMgbW1jcjA6MFgwMDAwMDQzNiBtbWNyMTowWDEwMEI3MDUyRTI3NDAwM0MgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgyMTQgbW1jcjA6MFgwMDAwMDQzNiBtbWNyMTowWDEwMEI3MDUyRTI3NDAwM0MgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgyMTUgbW1jcjA6MFgwMDAwMDQzNiBtbWNyMTowWDEwMEI3MDUyRTI3NDAwM0MgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgyMTYgbW1jcjA6MFgwMDAwMDQzNiBtbWNyMTowWDEwMEI3MDUyRTI3NDAwM0MgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgyMTcgbW1jcjA6MFgwMDAwMDQzNiBtbWNyMTowWDEwMEI3MDUyRTI3NDAwM0MgbW1jcmE6MFgwMDAwMjAwMQorCisjR3JvdXAgMzQgcG1fbWFyazEsIEluZm9ybWF0aW9uIG9uIG1hcmtlZCBpbnN0cnVjdGlvbnMKK2V2ZW50OjBYMjIwIG1tY3IwOjBYMDAwMDAwMDYgbW1jcjE6MFgwMDAwODA4MDc5MDg1MkE0IG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMjIxIG1tY3IwOjBYMDAwMDAwMDYgbW1jcjE6MFgwMDAwODA4MDc5MDg1MkE0IG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMjIyIG1tY3IwOjBYMDAwMDAwMDYgbW1jcjE6MFgwMDAwODA4MDc5MDg1MkE0IG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMjIzIG1tY3IwOjBYMDAwMDAwMDYgbW1jcjE6MFgwMDAwODA4MDc5MDg1MkE0IG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMjI0IG1tY3IwOjBYMDAwMDAwMDYgbW1jcjE6MFgwMDAwODA4MDc5MDg1MkE0IG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMjI1IG1tY3IwOjBYMDAwMDAwMDYgbW1jcjE6MFgwMDAwODA4MDc5MDg1MkE0IG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMjI2IG1tY3IwOjBYMDAwMDAwMDYgbW1jcjE6MFgwMDAwODA4MDc5MDg1MkE0IG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMjI3IG1tY3IwOjBYMDAwMDAwMDYgbW1jcjE6MFgwMDAwODA4MDc5MDg1MkE0IG1tY3JhOjBYMDAwMDIwMDEKKworI0dyb3VwIDM1IHBtX21hcmsyLCBNYXJrZWQgSW5zdHJ1Y3Rpb25zIFByb2Nlc3NpbmcgRmxvdworZXZlbnQ6MFgyMzAgbW1jcjA6MFgwMDAwMDIwQSBtbWNyMTowWDAwMDAwMDAwNzk0ODQyMTAgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgyMzEgbW1jcjA6MFgwMDAwMDIwQSBtbWNyMTowWDAwMDAwMDAwNzk0ODQyMTAgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgyMzIgbW1jcjA6MFgwMDAwMDIwQSBtbWNyMTowWDAwMDAwMDAwNzk0ODQyMTAgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgyMzMgbW1jcjA6MFgwMDAwMDIwQSBtbWNyMTowWDAwMDAwMDAwNzk0ODQyMTAgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgyMzQgbW1jcjA6MFgwMDAwMDIwQSBtbWNyMTowWDAwMDAwMDAwNzk0ODQyMTAgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgyMzUgbW1jcjA6MFgwMDAwMDIwQSBtbWNyMTowWDAwMDAwMDAwNzk0ODQyMTAgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgyMzYgbW1jcjA6MFgwMDAwMDIwQSBtbWNyMTowWDAwMDAwMDAwNzk0ODQyMTAgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgyMzcgbW1jcjA6MFgwMDAwMDIwQSBtbWNyMTowWDAwMDAwMDAwNzk0ODQyMTAgbW1jcmE6MFgwMDAwMjAwMQorCisjR3JvdXAgMzYgcG1fbWFyazMsIE1hcmtlZCBTdG9yZXMgUHJvY2Vzc2luZyBGbG93CitldmVudDowWDI0MCBtbWNyMDowWDAwMDAwMzFFIG1tY3IxOjBYMDAyMDMwMDQxOTBBM0YyNCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDI0MSBtbWNyMDowWDAwMDAwMzFFIG1tY3IxOjBYMDAyMDMwMDQxOTBBM0YyNCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDI0MiBtbWNyMDowWDAwMDAwMzFFIG1tY3IxOjBYMDAyMDMwMDQxOTBBM0YyNCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDI0MyBtbWNyMDowWDAwMDAwMzFFIG1tY3IxOjBYMDAyMDMwMDQxOTBBM0YyNCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDI0NCBtbWNyMDowWDAwMDAwMzFFIG1tY3IxOjBYMDAyMDMwMDQxOTBBM0YyNCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDI0NSBtbWNyMDowWDAwMDAwMzFFIG1tY3IxOjBYMDAyMDMwMDQxOTBBM0YyNCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDI0NiBtbWNyMDowWDAwMDAwMzFFIG1tY3IxOjBYMDAyMDMwMDQxOTBBM0YyNCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDI0NyBtbWNyMDowWDAwMDAwMzFFIG1tY3IxOjBYMDAyMDMwMDQxOTBBM0YyNCBtbWNyYTowWDAwMDAyMDAxCisKKyNHcm91cCAzNyBwbV9sc3VfbWFyazEsIExvYWQgU3RvcmUgVW5pdCBNYXJrZWQgRXZlbnRzCitldmVudDowWDI1MCBtbWNyMDowWDAwMDAxQjM0IG1tY3IxOjBYMDAwMjgwQzA4RDVFOTg1MCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDI1MSBtbWNyMDowWDAwMDAxQjM0IG1tY3IxOjBYMDAwMjgwQzA4RDVFOTg1MCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDI1MiBtbWNyMDowWDAwMDAxQjM0IG1tY3IxOjBYMDAwMjgwQzA4RDVFOTg1MCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDI1MyBtbWNyMDowWDAwMDAxQjM0IG1tY3IxOjBYMDAwMjgwQzA4RDVFOTg1MCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDI1NCBtbWNyMDowWDAwMDAxQjM0IG1tY3IxOjBYMDAwMjgwQzA4RDVFOTg1MCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDI1NSBtbWNyMDowWDAwMDAxQjM0IG1tY3IxOjBYMDAwMjgwQzA4RDVFOTg1MCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDI1NiBtbWNyMDowWDAwMDAxQjM0IG1tY3IxOjBYMDAwMjgwQzA4RDVFOTg1MCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDI1NyBtbWNyMDowWDAwMDAxQjM0IG1tY3IxOjBYMDAwMjgwQzA4RDVFOTg1MCBtbWNyYTowWDAwMDAyMDAxCisKKyNHcm91cCAzOCBwbV9sc3VfbWFyazIsIExvYWQgU3RvcmUgVW5pdCBNYXJrZWQgRXZlbnRzCitldmVudDowWDI2MCBtbWNyMDowWDAwMDAxODM4IG1tY3IxOjBYMDAwMjgwQzA5NTlFOTlEQyBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDI2MSBtbWNyMDowWDAwMDAxODM4IG1tY3IxOjBYMDAwMjgwQzA5NTlFOTlEQyBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDI2MiBtbWNyMDowWDAwMDAxODM4IG1tY3IxOjBYMDAwMjgwQzA5NTlFOTlEQyBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDI2MyBtbWNyMDowWDAwMDAxODM4IG1tY3IxOjBYMDAwMjgwQzA5NTlFOTlEQyBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDI2NCBtbWNyMDowWDAwMDAxODM4IG1tY3IxOjBYMDAwMjgwQzA5NTlFOTlEQyBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDI2NSBtbWNyMDowWDAwMDAxODM4IG1tY3IxOjBYMDAwMjgwQzA5NTlFOTlEQyBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDI2NiBtbWNyMDowWDAwMDAxODM4IG1tY3IxOjBYMDAwMjgwQzA5NTlFOTlEQyBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDI2NyBtbWNyMDowWDAwMDAxODM4IG1tY3IxOjBYMDAwMjgwQzA5NTlFOTlEQyBtbWNyYTowWDAwMDAyMDAxCisKKyNHcm91cCAzOSBwbV9meHUxLCBGaXhlZCBQb2ludCBldmVudHMgYnkgdW5pdAorZXZlbnQ6MFgyNzAgbW1jcjA6MFgwMDAwMDkxMiBtbWNyMTowWDEwMDAxMDAyMDA4NDIxM0MgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgyNzEgbW1jcjA6MFgwMDAwMDkxMiBtbWNyMTowWDEwMDAxMDAyMDA4NDIxM0MgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgyNzIgbW1jcjA6MFgwMDAwMDkxMiBtbWNyMTowWDEwMDAxMDAyMDA4NDIxM0MgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgyNzMgbW1jcjA6MFgwMDAwMDkxMiBtbWNyMTowWDEwMDAxMDAyMDA4NDIxM0MgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgyNzQgbW1jcjA6MFgwMDAwMDkxMiBtbWNyMTowWDEwMDAxMDAyMDA4NDIxM0MgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgyNzUgbW1jcjA6MFgwMDAwMDkxMiBtbWNyMTowWDEwMDAxMDAyMDA4NDIxM0MgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgyNzYgbW1jcjA6MFgwMDAwMDkxMiBtbWNyMTowWDEwMDAxMDAyMDA4NDIxM0MgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgyNzcgbW1jcjA6MFgwMDAwMDkxMiBtbWNyMTowWDEwMDAxMDAyMDA4NDIxM0MgbW1jcmE6MFgwMDAwMjAwMQorCisjR3JvdXAgNDAgcG1fZnh1MiwgRml4ZWQgUG9pbnQgZXZlbnRzIGJ5IHVuaXQKK2V2ZW50OjBYMjgwIG1tY3IwOjBYMDAwMDA5MUUgbW1jcjE6MFg0MDAwMDAwQ0E0MDQyRDc4IG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMjgxIG1tY3IwOjBYMDAwMDA5MUUgbW1jcjE6MFg0MDAwMDAwQ0E0MDQyRDc4IG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMjgyIG1tY3IwOjBYMDAwMDA5MUUgbW1jcjE6MFg0MDAwMDAwQ0E0MDQyRDc4IG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMjgzIG1tY3IwOjBYMDAwMDA5MUUgbW1jcjE6MFg0MDAwMDAwQ0E0MDQyRDc4IG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMjg0IG1tY3IwOjBYMDAwMDA5MUUgbW1jcjE6MFg0MDAwMDAwQ0E0MDQyRDc4IG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMjg1IG1tY3IwOjBYMDAwMDA5MUUgbW1jcjE6MFg0MDAwMDAwQ0E0MDQyRDc4IG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMjg2IG1tY3IwOjBYMDAwMDA5MUUgbW1jcjE6MFg0MDAwMDAwQ0E0MDQyRDc4IG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMjg3IG1tY3IwOjBYMDAwMDA5MUUgbW1jcjE6MFg0MDAwMDAwQ0E0MDQyRDc4IG1tY3JhOjBYMDAwMDIwMDEKKworI0dyb3VwIDQxIHBtX2lmdSwgcG1faWZ1CitldmVudDowWDI5MCBtbWNyMDowWDAwMDAwRDBDIG1tY3IxOjBYODAwMDAwRjA2Qjc4NjdBNCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDI5MSBtbWNyMDowWDAwMDAwRDBDIG1tY3IxOjBYODAwMDAwRjA2Qjc4NjdBNCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDI5MiBtbWNyMDowWDAwMDAwRDBDIG1tY3IxOjBYODAwMDAwRjA2Qjc4NjdBNCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDI5MyBtbWNyMDowWDAwMDAwRDBDIG1tY3IxOjBYODAwMDAwRjA2Qjc4NjdBNCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDI5NCBtbWNyMDowWDAwMDAwRDBDIG1tY3IxOjBYODAwMDAwRjA2Qjc4NjdBNCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDI5NSBtbWNyMDowWDAwMDAwRDBDIG1tY3IxOjBYODAwMDAwRjA2Qjc4NjdBNCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDI5NiBtbWNyMDowWDAwMDAwRDBDIG1tY3IxOjBYODAwMDAwRjA2Qjc4NjdBNCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDI5NyBtbWNyMDowWDAwMDAwRDBDIG1tY3IxOjBYODAwMDAwRjA2Qjc4NjdBNCBtbWNyYTowWDAwMDAyMDAxCisKKyNHcm91cCA0MiBwbV9jcGlfc3RhY2sxLCBDUEkgc3RhY2sgYW5hbHlzaXMKK2V2ZW50OjBYMkEwIG1tY3IwOjBYMDAwMDFCM0UgbW1jcjE6MFg0MDAwQzBDMEFERDY5NjNEIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMkExIG1tY3IwOjBYMDAwMDFCM0UgbW1jcjE6MFg0MDAwQzBDMEFERDY5NjNEIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMkEyIG1tY3IwOjBYMDAwMDFCM0UgbW1jcjE6MFg0MDAwQzBDMEFERDY5NjNEIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMkEzIG1tY3IwOjBYMDAwMDFCM0UgbW1jcjE6MFg0MDAwQzBDMEFERDY5NjNEIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMkE0IG1tY3IwOjBYMDAwMDFCM0UgbW1jcjE6MFg0MDAwQzBDMEFERDY5NjNEIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMkE1IG1tY3IwOjBYMDAwMDFCM0UgbW1jcjE6MFg0MDAwQzBDMEFERDY5NjNEIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMkE2IG1tY3IwOjBYMDAwMDFCM0UgbW1jcjE6MFg0MDAwQzBDMEFERDY5NjNEIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMkE3IG1tY3IwOjBYMDAwMDFCM0UgbW1jcjE6MFg0MDAwQzBDMEFERDY5NjNEIG1tY3JhOjBYMDAwMDIwMDEKKworI0dyb3VwIDQzIHBtX2NwaV9zdGFjazIsIENQSSBzdGFjayBhbmFseXNpcworZXZlbnQ6MFgyQjAgbW1jcjA6MFgwMDAwMEIxMiBtbWNyMTowWDAwMEIwMDAwMDNENjA1ODMgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgyQjEgbW1jcjA6MFgwMDAwMEIxMiBtbWNyMTowWDAwMEIwMDAwMDNENjA1ODMgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgyQjIgbW1jcjA6MFgwMDAwMEIxMiBtbWNyMTowWDAwMEIwMDAwMDNENjA1ODMgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgyQjMgbW1jcjA6MFgwMDAwMEIxMiBtbWNyMTowWDAwMEIwMDAwMDNENjA1ODMgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgyQjQgbW1jcjA6MFgwMDAwMEIxMiBtbWNyMTowWDAwMEIwMDAwMDNENjA1ODMgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgyQjUgbW1jcjA6MFgwMDAwMEIxMiBtbWNyMTowWDAwMEIwMDAwMDNENjA1ODMgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgyQjYgbW1jcjA6MFgwMDAwMEIxMiBtbWNyMTowWDAwMEIwMDAwMDNENjA1ODMgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgyQjcgbW1jcjA6MFgwMDAwMEIxMiBtbWNyMTowWDAwMEIwMDAwMDNENjA1ODMgbW1jcmE6MFgwMDAwMjAwMQorCisjR3JvdXAgNDQgcG1fY3BpX3N0YWNrMywgQ1BJIHN0YWNrIGFuYWx5c2lzCitldmVudDowWDJDMCBtbWNyMDowWDAwMDAwOTE2IG1tY3IxOjBYMTAwMDEwMDIwMDE2MjVCRSBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDJDMSBtbWNyMDowWDAwMDAwOTE2IG1tY3IxOjBYMTAwMDEwMDIwMDE2MjVCRSBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDJDMiBtbWNyMDowWDAwMDAwOTE2IG1tY3IxOjBYMTAwMDEwMDIwMDE2MjVCRSBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDJDMyBtbWNyMDowWDAwMDAwOTE2IG1tY3IxOjBYMTAwMDEwMDIwMDE2MjVCRSBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDJDNCBtbWNyMDowWDAwMDAwOTE2IG1tY3IxOjBYMTAwMDEwMDIwMDE2MjVCRSBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDJDNSBtbWNyMDowWDAwMDAwOTE2IG1tY3IxOjBYMTAwMDEwMDIwMDE2MjVCRSBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDJDNiBtbWNyMDowWDAwMDAwOTE2IG1tY3IxOjBYMTAwMDEwMDIwMDE2MjVCRSBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDJDNyBtbWNyMDowWDAwMDAwOTE2IG1tY3IxOjBYMTAwMDEwMDIwMDE2MjVCRSBtbWNyYTowWDAwMDAyMDAxCisKKyNHcm91cCA0NSBwbV9jcGlfc3RhY2s0LCBDUEkgc3RhY2sgYW5hbHlzaXMKK2V2ZW50OjBYMkQwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDQ4NTgwNUJEIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMkQxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDQ4NTgwNUJEIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMkQyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDQ4NTgwNUJEIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMkQzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDQ4NTgwNUJEIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMkQ0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDQ4NTgwNUJEIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMkQ1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDQ4NTgwNUJEIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMkQ2IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDQ4NTgwNUJEIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMkQ3IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDQ4NTgwNUJEIG1tY3JhOjBYMDAwMDIwMDEKKworI0dyb3VwIDQ2IHBtX2NwaV9zdGFjazUsIENQSSBzdGFjayBhbmFseXNpcworZXZlbnQ6MFgyRTAgbW1jcjA6MFgwMDAwMDQxMiBtbWNyMTowWDkwMDEwMDA5QjZEOEY2NzIgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgyRTEgbW1jcjA6MFgwMDAwMDQxMiBtbWNyMTowWDkwMDEwMDA5QjZEOEY2NzIgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgyRTIgbW1jcjA6MFgwMDAwMDQxMiBtbWNyMTowWDkwMDEwMDA5QjZEOEY2NzIgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgyRTMgbW1jcjA6MFgwMDAwMDQxMiBtbWNyMTowWDkwMDEwMDA5QjZEOEY2NzIgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgyRTQgbW1jcjA6MFgwMDAwMDQxMiBtbWNyMTowWDkwMDEwMDA5QjZEOEY2NzIgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgyRTUgbW1jcjA6MFgwMDAwMDQxMiBtbWNyMTowWDkwMDEwMDA5QjZEOEY2NzIgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgyRTYgbW1jcjA6MFgwMDAwMDQxMiBtbWNyMTowWDkwMDEwMDA5QjZEOEY2NzIgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgyRTcgbW1jcjA6MFgwMDAwMDQxMiBtbWNyMTowWDkwMDEwMDA5QjZEOEY2NzIgbW1jcmE6MFgwMDAwMjAwMQorCisjR3JvdXAgNDcgcG1fZGF0YTIsIGRhdGEgc291cmNlIGFuZCBMTVEKK2V2ZW50OjBYMkYwIG1tY3IwOjBYMDAwMDBEMTIgbW1jcjE6MFgwMDAwMzAwRTZCRDJGRjc0IG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMkYxIG1tY3IwOjBYMDAwMDBEMTIgbW1jcjE6MFgwMDAwMzAwRTZCRDJGRjc0IG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMkYyIG1tY3IwOjBYMDAwMDBEMTIgbW1jcjE6MFgwMDAwMzAwRTZCRDJGRjc0IG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMkYzIG1tY3IwOjBYMDAwMDBEMTIgbW1jcjE6MFgwMDAwMzAwRTZCRDJGRjc0IG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMkY0IG1tY3IwOjBYMDAwMDBEMTIgbW1jcjE6MFgwMDAwMzAwRTZCRDJGRjc0IG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMkY1IG1tY3IwOjBYMDAwMDBEMTIgbW1jcjE6MFgwMDAwMzAwRTZCRDJGRjc0IG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMkY2IG1tY3IwOjBYMDAwMDBEMTIgbW1jcjE6MFgwMDAwMzAwRTZCRDJGRjc0IG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMkY3IG1tY3IwOjBYMDAwMDBEMTIgbW1jcjE6MFgwMDAwMzAwRTZCRDJGRjc0IG1tY3JhOjBYMDAwMDIwMDEKKworI0dyb3VwIDQ4IHBtX2ZldGNoX2JyYW5jaCwgSW5zdHJ1Y3Rpb24gZmV0Y2ggYW5kIGJyYW5jaCBldmVudHMKK2V2ZW50OjBYMzAwIG1tY3IwOjBYMDAwMDA2MEMgbW1jcjE6MFg4MDAwMDBDRDZFNUU5RDZDIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMzAxIG1tY3IwOjBYMDAwMDA2MEMgbW1jcjE6MFg4MDAwMDBDRDZFNUU5RDZDIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMzAyIG1tY3IwOjBYMDAwMDA2MEMgbW1jcjE6MFg4MDAwMDBDRDZFNUU5RDZDIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMzAzIG1tY3IwOjBYMDAwMDA2MEMgbW1jcjE6MFg4MDAwMDBDRDZFNUU5RDZDIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMzA0IG1tY3IwOjBYMDAwMDA2MEMgbW1jcjE6MFg4MDAwMDBDRDZFNUU5RDZDIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMzA1IG1tY3IwOjBYMDAwMDA2MEMgbW1jcjE6MFg4MDAwMDBDRDZFNUU5RDZDIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMzA2IG1tY3IwOjBYMDAwMDA2MEMgbW1jcjE6MFg4MDAwMDBDRDZFNUU5RDZDIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMzA3IG1tY3IwOjBYMDAwMDA2MEMgbW1jcjE6MFg4MDAwMDBDRDZFNUU5RDZDIG1tY3JhOjBYMDAwMDIwMDEKKworI0dyb3VwIDQ5IHBtX2wxbDJfbWlzcywgTDEgYW5kIEwyIG1pc3MgZXZlbnRzCitldmVudDowWDMxMCBtbWNyMDowWDAwMDAwNzEyIG1tY3IxOjBYMDAwMzMwMDIzQzg2RkIwMCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDMxMSBtbWNyMDowWDAwMDAwNzEyIG1tY3IxOjBYMDAwMzMwMDIzQzg2RkIwMCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDMxMiBtbWNyMDowWDAwMDAwNzEyIG1tY3IxOjBYMDAwMzMwMDIzQzg2RkIwMCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDMxMyBtbWNyMDowWDAwMDAwNzEyIG1tY3IxOjBYMDAwMzMwMDIzQzg2RkIwMCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDMxNCBtbWNyMDowWDAwMDAwNzEyIG1tY3IxOjBYMDAwMzMwMDIzQzg2RkIwMCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDMxNSBtbWNyMDowWDAwMDAwNzEyIG1tY3IxOjBYMDAwMzMwMDIzQzg2RkIwMCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDMxNiBtbWNyMDowWDAwMDAwNzEyIG1tY3IxOjBYMDAwMzMwMDIzQzg2RkIwMCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDMxNyBtbWNyMDowWDAwMDAwNzEyIG1tY3IxOjBYMDAwMzMwMDIzQzg2RkIwMCBtbWNyYTowWDAwMDAyMDAxCmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9ldmVudHMvcHBjNjQvOTcwL2V2ZW50cyBiL29wcm9maWxlLTAuOS43L2V2ZW50cy9wcGM2NC85NzAvZXZlbnRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxYzYwNTcKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9ldmVudHMvcHBjNjQvOTcwL2V2ZW50cwpAQCAtMCwwICsxLDUwNSBAQAorI1BQQzY0IFBvd2VyUEM5NzAgZXZlbnRzCisjCisjICBXaXRoaW4gZWFjaCBncm91cCB0aGUgZXZlbnQgbmFtZXMgbXVzdCBiZSB1bmlxdWUuICBFYWNoIGV2ZW50IGluIGEgZ3JvdXAgaXMKKyMgIGFzc2lnbmVkIHRvIGEgdW5pcXVlIGNvdW50ZXIuICBUaGUgZ3JvdXBzIGFyZSBmcm9tIHRoZSBncm91cHMgZGVmaW5lZCBpbiB0aGUKKyMgIFBlcmZvcm1hbmNlIE1vbml0b3IgVW5pdCB1c2VyIGd1aWRlIGZvciB0aGlzIHByb2Nlc3Nvci4KKyMKKyMgIE9ubHkgZXZlbnRzIHdpdGhpbiB0aGUgc2FtZSBncm91cCBjYW4gYmUgc2VsZWN0ZWQgc2ltdWx0YW5lb3VzbHkuCisjICBFYWNoIGV2ZW50IGlzIGdpdmVuIGEgdW5pcXVlIGV2ZW50IG51bWJlci4gIFRoZSBldmVudCBudW1iZXIgaXMgdXNlZCBieSB0aGUKKyMgIE9Qcm9maWxlIGNvZGUgdG8gcmVzb2x2ZSBldmVudCBuYW1lcyBmb3IgdGhlIHBvc3QtcHJvY2Vzc2luZy4gIFRoaXMgaXMgZG9uZQorIyAgdG8gcHJlc2VydmUgY29tcGF0aWJpbGl0eSB3aXRoIHRoZSByZXN0IG9mIHRoZSBPUHJvZmlsZSBjb2RlLiAgVGhlIGV2ZW50CisjICBudW1iZXJzIGFyZSBmb3JtYXR0ZWQgYXMgZm9sbG93czogPGdyb3VwX251bT5jb25jYXQoPGNvdW50ZXIgZm9yIHRoZSBldmVudD4pLgorCisjR3JvdXAgRGVmYXVsdAorZXZlbnQ6MFgwMDEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpDWUNMRVMgOiBQcm9jZXNzb3IgQ3ljbGVzCisKKworI0dyb3VwIDEgcG1fc2xpY2UwLCBUaW1lIFNsaWNlIDAKK2V2ZW50OjBYMDEwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxIDogKEdyb3VwIDEgcG1fc2xpY2UwKSBSdW4gY3ljbGVzCitldmVudDowWDAxMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlAxIDogKEdyb3VwIDEgcG1fc2xpY2UwKSBQcm9jZXNzb3IgY3ljbGVzCitldmVudDowWDAxMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fU1RPUF9DT01QTEVUSU9OX0dSUDEgOiAoR3JvdXAgMSBwbV9zbGljZTApIENvbXBsZXRpb24gc3RvcHBlZAorZXZlbnQ6MFgwMTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMSA6IChHcm91cCAxIHBtX3NsaWNlMCkgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgwMTQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNXzFQTFVTX1BQQ19DTVBMX0dSUDEgOiAoR3JvdXAgMSBwbV9zbGljZTApIE9uZSBvciBtb3JlIFBQQyBpbnN0cnVjdGlvbiBjb21wbGV0ZWQKK2V2ZW50OjBYMDE1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDEgOiAoR3JvdXAgMSBwbV9zbGljZTApIFByb2Nlc3NvciBjeWNsZXMKK2V2ZW50OjBYMDE2IGNvdW50ZXJzOjYgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9HUlBfQ01QTF9HUlAxIDogKEdyb3VwIDEgcG1fc2xpY2UwKSBHcm91cCBjb21wbGV0ZWQKK2V2ZW50OjBYMDE3IGNvdW50ZXJzOjcgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9HUlBfRElTUF9SRUpFQ1RfR1JQMSA6IChHcm91cCAxIHBtX3NsaWNlMCkgR3JvdXAgZGlzcGF0Y2ggcmVqZWN0ZWQKKworI0dyb3VwIDIgcG1fZXByb2YsIEdyb3VwIGZvciB1c2Ugd2l0aCBlcHJvZgorZXZlbnQ6MFgwMjAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQMiA6IChHcm91cCAyIHBtX2Vwcm9mKSBQcm9jZXNzb3IgY3ljbGVzCitldmVudDowWDAyMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlAyIDogKEdyb3VwIDIgcG1fZXByb2YpIFByb2Nlc3NvciBjeWNsZXMKK2V2ZW50OjBYMDIyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MRF9NSVNTX0wxX0dSUDIgOiAoR3JvdXAgMiBwbV9lcHJvZikgTDEgRCBjYWNoZSBsb2FkIG1pc3NlcworZXZlbnQ6MFgwMjMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RDX0lOVl9MMl9HUlAyIDogKEdyb3VwIDIgcG1fZXByb2YpIEwxIEQgY2FjaGUgZW50cmllcyBpbnZhbGlkYXRlZCBmcm9tIEwyCitldmVudDowWDAyNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU5TVF9ESVNQX0dSUDIgOiAoR3JvdXAgMiBwbV9lcHJvZikgSW5zdHJ1Y3Rpb25zIGRpc3BhdGNoZWQKK2V2ZW50OjBYMDI1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDIgOiAoR3JvdXAgMiBwbV9lcHJvZikgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgwMjYgY291bnRlcnM6NiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1NUX1JFRl9MMV9HUlAyIDogKEdyb3VwIDIgcG1fZXByb2YpIEwxIEQgY2FjaGUgc3RvcmUgcmVmZXJlbmNlcworZXZlbnQ6MFgwMjcgY291bnRlcnM6NyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xEX1JFRl9MMV9HUlAyIDogKEdyb3VwIDIgcG1fZXByb2YpIEwxIEQgY2FjaGUgbG9hZCByZWZlcmVuY2VzCisKKyNHcm91cCAzIHBtX2Jhc2ljLCBCYXNpYyBwZXJmb3JtYW5jZSBpbmRpY2F0b3JzCitldmVudDowWDAzMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAzIDogKEdyb3VwIDMgcG1fYmFzaWMpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMDMxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDMgOiAoR3JvdXAgMyBwbV9iYXNpYykgUHJvY2Vzc29yIGN5Y2xlcworZXZlbnQ6MFgwMzIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xEX01JU1NfTDFfR1JQMyA6IChHcm91cCAzIHBtX2Jhc2ljKSBMMSBEIGNhY2hlIGxvYWQgbWlzc2VzCitldmVudDowWDAzMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRENfSU5WX0wyX0dSUDMgOiAoR3JvdXAgMyBwbV9iYXNpYykgTDEgRCBjYWNoZSBlbnRyaWVzIGludmFsaWRhdGVkIGZyb20gTDIKK2V2ZW50OjBYMDM0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JTlNUX0RJU1BfR1JQMyA6IChHcm91cCAzIHBtX2Jhc2ljKSBJbnN0cnVjdGlvbnMgZGlzcGF0Y2hlZAorZXZlbnQ6MFgwMzUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMyA6IChHcm91cCAzIHBtX2Jhc2ljKSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDAzNiBjb3VudGVyczo2IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fU1RfUkVGX0wxX0dSUDMgOiAoR3JvdXAgMyBwbV9iYXNpYykgTDEgRCBjYWNoZSBzdG9yZSByZWZlcmVuY2VzCitldmVudDowWDAzNyBjb3VudGVyczo3IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTERfUkVGX0wxX0dSUDMgOiAoR3JvdXAgMyBwbV9iYXNpYykgTDEgRCBjYWNoZSBsb2FkIHJlZmVyZW5jZXMKKworI0dyb3VwIDQgcG1fbHN1LCBJbmZvcm1hdGlvbiBvbiB0aGUgTG9hZCBTdG9yZSBVbml0CitldmVudDowWDA0MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVX0ZMVVNIX1VMRF9HUlA0IDogKEdyb3VwIDQgcG1fbHN1KSBMUlEgdW5hbGlnbmVkIGxvYWQgZmx1c2hlcworZXZlbnQ6MFgwNDEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9GTFVTSF9VU1RfR1JQNCA6IChHcm91cCA0IHBtX2xzdSkgU1JRIHVuYWxpZ25lZCBzdG9yZSBmbHVzaGVzCitldmVudDowWDA0MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlA0IDogKEdyb3VwIDQgcG1fbHN1KSBQcm9jZXNzb3IgY3ljbGVzCitldmVudDowWDA0MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlA0IDogKEdyb3VwIDQgcG1fbHN1KSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDA0NCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVX0ZMVVNIX1NSUV9HUlA0IDogKEdyb3VwIDQgcG1fbHN1KSBTUlEgZmx1c2hlcworZXZlbnQ6MFgwNDUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9GTFVTSF9MUlFfR1JQNCA6IChHcm91cCA0IHBtX2xzdSkgTFJRIGZsdXNoZXMKK2V2ZW50OjBYMDQ2IGNvdW50ZXJzOjYgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9TVF9SRUZfTDFfR1JQNCA6IChHcm91cCA0IHBtX2xzdSkgTDEgRCBjYWNoZSBzdG9yZSByZWZlcmVuY2VzCitldmVudDowWDA0NyBjb3VudGVyczo3IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTERfUkVGX0wxX0dSUDQgOiAoR3JvdXAgNCBwbV9sc3UpIEwxIEQgY2FjaGUgbG9hZCByZWZlcmVuY2VzCisKKyNHcm91cCA1IHBtX2ZwdTEsIEZsb2F0aW5nIFBvaW50IGV2ZW50cworZXZlbnQ6MFgwNTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVV9GRElWX0dSUDUgOiAoR3JvdXAgNSBwbV9mcHUxKSBGUFUgZXhlY3V0ZWQgRkRJViBpbnN0cnVjdGlvbgorZXZlbnQ6MFgwNTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVV9GTUFfR1JQNSA6IChHcm91cCA1IHBtX2ZwdTEpIEZQVSBleGVjdXRlZCBtdWx0aXBseS1hZGQgaW5zdHJ1Y3Rpb24KK2V2ZW50OjBYMDUyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFVfRkVTVF9HUlA1IDogKEdyb3VwIDUgcG1fZnB1MSkgRlBVIGV4ZWN1dGVkIEZFU1QgaW5zdHJ1Y3Rpb24KK2V2ZW50OjBYMDUzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFVfRklOX0dSUDUgOiAoR3JvdXAgNSBwbV9mcHUxKSBGUFUgcHJvZHVjZWQgYSByZXN1bHQKK2V2ZW50OjBYMDU0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDUgOiAoR3JvdXAgNSBwbV9mcHUxKSBQcm9jZXNzb3IgY3ljbGVzCitldmVudDowWDA1NSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVX0ZTUVJUX0dSUDUgOiAoR3JvdXAgNSBwbV9mcHUxKSBGUFUgZXhlY3V0ZWQgRlNRUlQgaW5zdHJ1Y3Rpb24KK2V2ZW50OjBYMDU2IGNvdW50ZXJzOjYgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDUgOiAoR3JvdXAgNSBwbV9mcHUxKSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDA1NyBjb3VudGVyczo3IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVX0ZNT1ZfRkVTVF9HUlA1IDogKEdyb3VwIDUgcG1fZnB1MSkgRlBVIGV4ZWN1dGluZyBGTU9WIG9yIEZFU1QgaW5zdHJ1Y3Rpb25zCisKKyNHcm91cCA2IHBtX2ZwdTIsIEZsb2F0aW5nIFBvaW50IGV2ZW50cworZXZlbnQ6MFgwNjAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVV9ERU5PUk1fR1JQNiA6IChHcm91cCA2IHBtX2ZwdTIpIEZQVSByZWNlaXZlZCBkZW5vcm1hbGl6ZWQgZGF0YQorZXZlbnQ6MFgwNjEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVV9TVEFMTDNfR1JQNiA6IChHcm91cCA2IHBtX2ZwdTIpIEZQVSBzdGFsbGVkIGluIHBpcGUzCitldmVudDowWDA2MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlA2IDogKEdyb3VwIDYgcG1fZnB1MikgUHJvY2Vzc29yIGN5Y2xlcworZXZlbnQ6MFgwNjMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQNiA6IChHcm91cCA2IHBtX2ZwdTIpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMDY0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFVfQUxMX0dSUDYgOiAoR3JvdXAgNiBwbV9mcHUyKSBGUFUgZXhlY3V0ZWQgYWRkLCBtdWx0LCBzdWIsIGNtcCBvciBzZWwgaW5zdHJ1Y3Rpb24KK2V2ZW50OjBYMDY1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFVfU1RGX0dSUDYgOiAoR3JvdXAgNiBwbV9mcHUyKSBGUFUgZXhlY3V0ZWQgc3RvcmUgaW5zdHJ1Y3Rpb24KK2V2ZW50OjBYMDY2IGNvdW50ZXJzOjYgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFVfRlJTUF9GQ09OVl9HUlA2IDogKEdyb3VwIDYgcG1fZnB1MikgRlBVIGV4ZWN1dGVkIEZSU1Agb3IgRkNPTlYgaW5zdHJ1Y3Rpb25zCitldmVudDowWDA2NyBjb3VudGVyczo3IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVX0xERl9HUlA2IDogKEdyb3VwIDYgcG1fZnB1MikgTFNVIGV4ZWN1dGVkIEZsb2F0aW5nIFBvaW50IGxvYWQgaW5zdHJ1Y3Rpb24KKworI0dyb3VwIDcgcG1faXN1X3JlbmFtZSwgSVNVIFJlbmFtZSBQb29sIEV2ZW50cworZXZlbnQ6MFgwNzAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1hFUl9NQVBfRlVMTF9DWUNfR1JQNyA6IChHcm91cCA3IHBtX2lzdV9yZW5hbWUpIEN5Y2xlcyBYRVIgbWFwcGVyIGZ1bGwKK2V2ZW50OjBYMDcxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9DUl9NQVBfRlVMTF9DWUNfR1JQNyA6IChHcm91cCA3IHBtX2lzdV9yZW5hbWUpIEN5Y2xlcyBDUiBsb2dpY2FsIG9wZXJhdGlvbiBtYXBwZXIgZnVsbAorZXZlbnQ6MFgwNzIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0NSUV9GVUxMX0NZQ19HUlA3IDogKEdyb3VwIDcgcG1faXN1X3JlbmFtZSkgQ3ljbGVzIENSIGlzc3VlIHF1ZXVlIGZ1bGwKK2V2ZW50OjBYMDczIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9HUlBfRElTUF9CTEtfU0JfQ1lDX0dSUDcgOiAoR3JvdXAgNyBwbV9pc3VfcmVuYW1lKSBDeWNsZXMgZ3JvdXAgZGlzcGF0Y2ggYmxvY2tlZCBieSBzY29yZWJvYXJkCitldmVudDowWDA3NCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFJfQ1RSX01BUF9GVUxMX0NZQ19HUlA3IDogKEdyb3VwIDcgcG1faXN1X3JlbmFtZSkgQ3ljbGVzIExSL0NUUiBtYXBwZXIgZnVsbAorZXZlbnQ6MFgwNzUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lOU1RfRElTUF9HUlA3IDogKEdyb3VwIDcgcG1faXN1X3JlbmFtZSkgSW5zdHJ1Y3Rpb25zIGRpc3BhdGNoZWQKK2V2ZW50OjBYMDc2IGNvdW50ZXJzOjYgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDcgOiAoR3JvdXAgNyBwbV9pc3VfcmVuYW1lKSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDA3NyBjb3VudGVyczo3IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlA3IDogKEdyb3VwIDcgcG1faXN1X3JlbmFtZSkgUHJvY2Vzc29yIGN5Y2xlcworCisjR3JvdXAgOCBwbV9pc3VfcXVldWVzMSwgSVNVIFJlbmFtZSBQb29sIEV2ZW50cworZXZlbnQ6MFgwODAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVTBfRlVMTF9DWUNfR1JQOCA6IChHcm91cCA4IHBtX2lzdV9xdWV1ZXMxKSBDeWNsZXMgRlBVMCBpc3N1ZSBxdWV1ZSBmdWxsCitldmVudDowWDA4MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVMV9GVUxMX0NZQ19HUlA4IDogKEdyb3VwIDggcG1faXN1X3F1ZXVlczEpIEN5Y2xlcyBGUFUxIGlzc3VlIHF1ZXVlIGZ1bGwKK2V2ZW50OjBYMDgyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GWExTMF9GVUxMX0NZQ19HUlA4IDogKEdyb3VwIDggcG1faXN1X3F1ZXVlczEpIEN5Y2xlcyBGWFUwL0xTMCBxdWV1ZSBmdWxsCitldmVudDowWDA4MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlhMUzFfRlVMTF9DWUNfR1JQOCA6IChHcm91cCA4IHBtX2lzdV9xdWV1ZXMxKSBDeWNsZXMgRlhVMS9MUzEgcXVldWUgZnVsbAorZXZlbnQ6MFgwODQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQOCA6IChHcm91cCA4IHBtX2lzdV9xdWV1ZXMxKSBQcm9jZXNzb3IgY3ljbGVzCitldmVudDowWDA4NSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlA4IDogKEdyb3VwIDggcG1faXN1X3F1ZXVlczEpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMDg2IGNvdW50ZXJzOjYgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1VfTFJRX0ZVTExfQ1lDX0dSUDggOiAoR3JvdXAgOCBwbV9pc3VfcXVldWVzMSkgQ3ljbGVzIExSUSBmdWxsCitldmVudDowWDA4NyBjb3VudGVyczo3IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVX1NSUV9GVUxMX0NZQ19HUlA4IDogKEdyb3VwIDggcG1faXN1X3F1ZXVlczEpIEN5Y2xlcyBTUlEgZnVsbAorCisjR3JvdXAgOSBwbV9pc3VfZmxvdywgSVNVIEluc3RydWN0aW9uIEZsb3cgRXZlbnRzCitldmVudDowWDA5MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU5TVF9ESVNQX0dSUDkgOiAoR3JvdXAgOSBwbV9pc3VfZmxvdykgSW5zdHJ1Y3Rpb25zIGRpc3BhdGNoZWQKK2V2ZW50OjBYMDkxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDkgOiAoR3JvdXAgOSBwbV9pc3VfZmxvdykgUHJvY2Vzc29yIGN5Y2xlcworZXZlbnQ6MFgwOTIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZYVTBfRklOX0dSUDkgOiAoR3JvdXAgOSBwbV9pc3VfZmxvdykgRlhVMCBwcm9kdWNlZCBhIHJlc3VsdAorZXZlbnQ6MFgwOTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZYVTFfRklOX0dSUDkgOiAoR3JvdXAgOSBwbV9pc3VfZmxvdykgRlhVMSBwcm9kdWNlZCBhIHJlc3VsdAorZXZlbnQ6MFgwOTQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0dSUF9ESVNQX1ZBTElEX0dSUDkgOiAoR3JvdXAgOSBwbV9pc3VfZmxvdykgR3JvdXAgZGlzcGF0Y2ggdmFsaWQKK2V2ZW50OjBYMDk1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9HUlBfRElTUF9SRUpFQ1RfR1JQOSA6IChHcm91cCA5IHBtX2lzdV9mbG93KSBHcm91cCBkaXNwYXRjaCByZWplY3RlZAorZXZlbnQ6MFgwOTYgY291bnRlcnM6NiB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQOSA6IChHcm91cCA5IHBtX2lzdV9mbG93KSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDA5NyBjb3VudGVyczo3IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlA5IDogKEdyb3VwIDkgcG1faXN1X2Zsb3cpIFByb2Nlc3NvciBjeWNsZXMKKworI0dyb3VwIDEwIHBtX2lzdV93b3JrLCBJU1UgSW5kaWNhdG9ycyBvZiBXb3JrIEJsb2NrYWdlCitldmVudDowWDBBMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fR0NUX0VNUFRZX0NZQ19HUlAxMCA6IChHcm91cCAxMCBwbV9pc3Vfd29yaykgQ3ljbGVzIEdDVCBlbXB0eQorZXZlbnQ6MFgwQTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1dPUktfSEVMRF9HUlAxMCA6IChHcm91cCAxMCBwbV9pc3Vfd29yaykgV29yayBoZWxkCitldmVudDowWDBBMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fU1RPUF9DT01QTEVUSU9OX0dSUDEwIDogKEdyb3VwIDEwIHBtX2lzdV93b3JrKSBDb21wbGV0aW9uIHN0b3BwZWQKK2V2ZW50OjBYMEEzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9FRV9PRkZfRVhUX0lOVF9HUlAxMCA6IChHcm91cCAxMCBwbV9pc3Vfd29yaykgQ3ljbGVzIE1TUihFRSkgYml0IG9mZiBhbmQgZXh0ZXJuYWwgaW50ZXJydXB0IHBlbmRpbmcKK2V2ZW50OjBYMEE0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDEwIDogKEdyb3VwIDEwIHBtX2lzdV93b3JrKSBQcm9jZXNzb3IgY3ljbGVzCitldmVudDowWDBBNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAxMCA6IChHcm91cCAxMCBwbV9pc3Vfd29yaykgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgwQTYgY291bnRlcnM6NiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0VFX09GRl9HUlAxMCA6IChHcm91cCAxMCBwbV9pc3Vfd29yaykgQ3ljbGVzIE1TUihFRSkgYml0IG9mZgorZXZlbnQ6MFgwQTcgY291bnRlcnM6NyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0VYVF9JTlRfR1JQMTAgOiAoR3JvdXAgMTAgcG1faXN1X3dvcmspIEV4dGVybmFsIGludGVycnVwdHMKKworI0dyb3VwIDExIHBtX2ZwdTMsIEZsb2F0aW5nIFBvaW50IGV2ZW50cyBieSB1bml0CitldmVudDowWDBCMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVMF9GRElWX0dSUDExIDogKEdyb3VwIDExIHBtX2ZwdTMpIEZQVTAgZXhlY3V0ZWQgRkRJViBpbnN0cnVjdGlvbgorZXZlbnQ6MFgwQjEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVTFfRkRJVl9HUlAxMSA6IChHcm91cCAxMSBwbV9mcHUzKSBGUFUxIGV4ZWN1dGVkIEZESVYgaW5zdHJ1Y3Rpb24KK2V2ZW50OjBYMEIyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFUwX0ZSU1BfRkNPTlZfR1JQMTEgOiAoR3JvdXAgMTEgcG1fZnB1MykgRlBVMCBleGVjdXRlZCBGUlNQIG9yIEZDT05WIGluc3RydWN0aW9ucworZXZlbnQ6MFgwQjMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVTFfRlJTUF9GQ09OVl9HUlAxMSA6IChHcm91cCAxMSBwbV9mcHUzKSBGUFUxIGV4ZWN1dGVkIEZSU1Agb3IgRkNPTlYgaW5zdHJ1Y3Rpb25zCitldmVudDowWDBCNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVMF9GTUFfR1JQMTEgOiAoR3JvdXAgMTEgcG1fZnB1MykgRlBVMCBleGVjdXRlZCBtdWx0aXBseS1hZGQgaW5zdHJ1Y3Rpb24KK2V2ZW50OjBYMEI1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFUxX0ZNQV9HUlAxMSA6IChHcm91cCAxMSBwbV9mcHUzKSBGUFUxIGV4ZWN1dGVkIG11bHRpcGx5LWFkZCBpbnN0cnVjdGlvbgorZXZlbnQ6MFgwQjYgY291bnRlcnM6NiB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMTEgOiAoR3JvdXAgMTEgcG1fZnB1MykgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgwQjcgY291bnRlcnM6NyB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQMTEgOiAoR3JvdXAgMTEgcG1fZnB1MykgUHJvY2Vzc29yIGN5Y2xlcworCisjR3JvdXAgMTIgcG1fZnB1NCwgRmxvYXRpbmcgUG9pbnQgZXZlbnRzIGJ5IHVuaXQKK2V2ZW50OjBYMEMwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFUwX0ZTUVJUX0dSUDEyIDogKEdyb3VwIDEyIHBtX2ZwdTQpIEZQVTAgZXhlY3V0ZWQgRlNRUlQgaW5zdHJ1Y3Rpb24KK2V2ZW50OjBYMEMxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFUxX0ZTUVJUX0dSUDEyIDogKEdyb3VwIDEyIHBtX2ZwdTQpIEZQVTEgZXhlY3V0ZWQgRlNRUlQgaW5zdHJ1Y3Rpb24KK2V2ZW50OjBYMEMyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFUwX0ZJTl9HUlAxMiA6IChHcm91cCAxMiBwbV9mcHU0KSBGUFUwIHByb2R1Y2VkIGEgcmVzdWx0CitldmVudDowWDBDMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVMV9GSU5fR1JQMTIgOiAoR3JvdXAgMTIgcG1fZnB1NCkgRlBVMSBwcm9kdWNlZCBhIHJlc3VsdAorZXZlbnQ6MFgwQzQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVTBfQUxMX0dSUDEyIDogKEdyb3VwIDEyIHBtX2ZwdTQpIEZQVTAgZXhlY3V0ZWQgYWRkLCBtdWx0LCBzdWIsIGNtcCBvciBzZWwgaW5zdHJ1Y3Rpb24KK2V2ZW50OjBYMEM1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFUxX0FMTF9HUlAxMiA6IChHcm91cCAxMiBwbV9mcHU0KSBGUFUxIGV4ZWN1dGVkIGFkZCwgbXVsdCwgc3ViLCBjbXAgb3Igc2VsIGluc3RydWN0aW9uCitldmVudDowWDBDNiBjb3VudGVyczo2IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAxMiA6IChHcm91cCAxMiBwbV9mcHU0KSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDBDNyBjb3VudGVyczo3IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlAxMiA6IChHcm91cCAxMiBwbV9mcHU0KSBQcm9jZXNzb3IgY3ljbGVzCisKKyNHcm91cCAxMyBwbV9mcHU1LCBGbG9hdGluZyBQb2ludCBldmVudHMgYnkgdW5pdAorZXZlbnQ6MFgwRDAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVTBfREVOT1JNX0dSUDEzIDogKEdyb3VwIDEzIHBtX2ZwdTUpIEZQVTAgcmVjZWl2ZWQgZGVub3JtYWxpemVkIGRhdGEKK2V2ZW50OjBYMEQxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFUxX0RFTk9STV9HUlAxMyA6IChHcm91cCAxMyBwbV9mcHU1KSBGUFUxIHJlY2VpdmVkIGRlbm9ybWFsaXplZCBkYXRhCitldmVudDowWDBEMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVMF9GTU9WX0ZFU1RfR1JQMTMgOiAoR3JvdXAgMTMgcG1fZnB1NSkgRlBVMCBleGVjdXRlZCBGTU9WIG9yIEZFU1QgaW5zdHJ1Y3Rpb25zCitldmVudDowWDBEMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVMV9GTU9WX0ZFU1RfR1JQMTMgOiAoR3JvdXAgMTMgcG1fZnB1NSkgRlBVMSBleGVjdXRpbmcgRk1PViBvciBGRVNUIGluc3RydWN0aW9ucworZXZlbnQ6MFgwRDQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQMTMgOiAoR3JvdXAgMTMgcG1fZnB1NSkgUHJvY2Vzc29yIGN5Y2xlcworZXZlbnQ6MFgwRDUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMTMgOiAoR3JvdXAgMTMgcG1fZnB1NSkgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgwRDYgY291bnRlcnM6NiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVTBfRkVTVF9HUlAxMyA6IChHcm91cCAxMyBwbV9mcHU1KSBGUFUwIGV4ZWN1dGVkIEZFU1QgaW5zdHJ1Y3Rpb24KK2V2ZW50OjBYMEQ3IGNvdW50ZXJzOjcgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFUxX0ZFU1RfR1JQMTMgOiAoR3JvdXAgMTMgcG1fZnB1NSkgRlBVMSBleGVjdXRlZCBGRVNUIGluc3RydWN0aW9uCisKKyNHcm91cCAxNCBwbV9mcHU3LCBGbG9hdGluZyBQb2ludCBldmVudHMgYnkgdW5pdAorZXZlbnQ6MFgwRTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVTBfU1RBTEwzX0dSUDE0IDogKEdyb3VwIDE0IHBtX2ZwdTcpIEZQVTAgc3RhbGxlZCBpbiBwaXBlMworZXZlbnQ6MFgwRTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVTFfU1RBTEwzX0dSUDE0IDogKEdyb3VwIDE0IHBtX2ZwdTcpIEZQVTEgc3RhbGxlZCBpbiBwaXBlMworZXZlbnQ6MFgwRTIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVTBfRklOX0dSUDE0IDogKEdyb3VwIDE0IHBtX2ZwdTcpIEZQVTAgcHJvZHVjZWQgYSByZXN1bHQKK2V2ZW50OjBYMEUzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFUxX0ZJTl9HUlAxNCA6IChHcm91cCAxNCBwbV9mcHU3KSBGUFUxIHByb2R1Y2VkIGEgcmVzdWx0CitldmVudDowWDBFNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlAxNCA6IChHcm91cCAxNCBwbV9mcHU3KSBQcm9jZXNzb3IgY3ljbGVzCitldmVudDowWDBFNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAxNCA6IChHcm91cCAxNCBwbV9mcHU3KSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDBFNiBjb3VudGVyczo2IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlAxNCA6IChHcm91cCAxNCBwbV9mcHU3KSBQcm9jZXNzb3IgY3ljbGVzCitldmVudDowWDBFNyBjb3VudGVyczo3IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVMF9GUFNDUl9HUlAxNCA6IChHcm91cCAxNCBwbV9mcHU3KSBGUFUwIGV4ZWN1dGVkIEZQU0NSIGluc3RydWN0aW9uCisKKyNHcm91cCAxNSBwbV9sc3VfZmx1c2gsIExTVSBGbHVzaCBFdmVudHMKK2V2ZW50OjBYMEYwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1UwX0ZMVVNIX0xSUV9HUlAxNSA6IChHcm91cCAxNSBwbV9sc3VfZmx1c2gpIExTVTAgTFJRIGZsdXNoZXMKK2V2ZW50OjBYMEYxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1UxX0ZMVVNIX0xSUV9HUlAxNSA6IChHcm91cCAxNSBwbV9sc3VfZmx1c2gpIExTVTEgTFJRIGZsdXNoZXMKK2V2ZW50OjBYMEYyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDE1IDogKEdyb3VwIDE1IHBtX2xzdV9mbHVzaCkgUHJvY2Vzc29yIGN5Y2xlcworZXZlbnQ6MFgwRjMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQMTUgOiAoR3JvdXAgMTUgcG1fbHN1X2ZsdXNoKSBQcm9jZXNzb3IgY3ljbGVzCitldmVudDowWDBGNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVMF9GTFVTSF9TUlFfR1JQMTUgOiAoR3JvdXAgMTUgcG1fbHN1X2ZsdXNoKSBMU1UwIFNSUSBmbHVzaGVzCitldmVudDowWDBGNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVMV9GTFVTSF9TUlFfR1JQMTUgOiAoR3JvdXAgMTUgcG1fbHN1X2ZsdXNoKSBMU1UxIFNSUSBmbHVzaGVzCitldmVudDowWDBGNiBjb3VudGVyczo2IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAxNSA6IChHcm91cCAxNSBwbV9sc3VfZmx1c2gpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMEY3IGNvdW50ZXJzOjcgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDE1IDogKEdyb3VwIDE1IHBtX2xzdV9mbHVzaCkgUHJvY2Vzc29yIGN5Y2xlcworCisjR3JvdXAgMTYgcG1fbHN1X2xvYWQxLCBMU1UgTG9hZCBFdmVudHMKK2V2ZW50OjBYMTAwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1UwX0ZMVVNIX1VMRF9HUlAxNiA6IChHcm91cCAxNiBwbV9sc3VfbG9hZDEpIExTVTAgdW5hbGlnbmVkIGxvYWQgZmx1c2hlcworZXZlbnQ6MFgxMDEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVTFfRkxVU0hfVUxEX0dSUDE2IDogKEdyb3VwIDE2IHBtX2xzdV9sb2FkMSkgTFNVMSB1bmFsaWduZWQgbG9hZCBmbHVzaGVzCitldmVudDowWDEwMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTERfUkVGX0wxX0xTVTBfR1JQMTYgOiAoR3JvdXAgMTYgcG1fbHN1X2xvYWQxKSBMU1UwIEwxIEQgY2FjaGUgbG9hZCByZWZlcmVuY2VzCitldmVudDowWDEwMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTERfUkVGX0wxX0xTVTFfR1JQMTYgOiAoR3JvdXAgMTYgcG1fbHN1X2xvYWQxKSBMU1UxIEwxIEQgY2FjaGUgbG9hZCByZWZlcmVuY2VzCitldmVudDowWDEwNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlAxNiA6IChHcm91cCAxNiBwbV9sc3VfbG9hZDEpIFByb2Nlc3NvciBjeWNsZXMKK2V2ZW50OjBYMTA1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDE2IDogKEdyb3VwIDE2IHBtX2xzdV9sb2FkMSkgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgxMDYgY291bnRlcnM6NiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xEX01JU1NfTDFfTFNVMF9HUlAxNiA6IChHcm91cCAxNiBwbV9sc3VfbG9hZDEpIExTVTAgTDEgRCBjYWNoZSBsb2FkIG1pc3NlcworZXZlbnQ6MFgxMDcgY291bnRlcnM6NyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xEX01JU1NfTDFfTFNVMV9HUlAxNiA6IChHcm91cCAxNiBwbV9sc3VfbG9hZDEpIExTVTEgTDEgRCBjYWNoZSBsb2FkIG1pc3NlcworCisjR3JvdXAgMTcgcG1fbHN1X3N0b3JlMSwgTFNVIFN0b3JlIEV2ZW50cworZXZlbnQ6MFgxMTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVTBfRkxVU0hfVVNUX0dSUDE3IDogKEdyb3VwIDE3IHBtX2xzdV9zdG9yZTEpIExTVTAgdW5hbGlnbmVkIHN0b3JlIGZsdXNoZXMKK2V2ZW50OjBYMTExIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1UxX0ZMVVNIX1VTVF9HUlAxNyA6IChHcm91cCAxNyBwbV9sc3Vfc3RvcmUxKSBMU1UxIHVuYWxpZ25lZCBzdG9yZSBmbHVzaGVzCitldmVudDowWDExMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fU1RfUkVGX0wxX0xTVTBfR1JQMTcgOiAoR3JvdXAgMTcgcG1fbHN1X3N0b3JlMSkgTFNVMCBMMSBEIGNhY2hlIHN0b3JlIHJlZmVyZW5jZXMKK2V2ZW50OjBYMTEzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9TVF9SRUZfTDFfTFNVMV9HUlAxNyA6IChHcm91cCAxNyBwbV9sc3Vfc3RvcmUxKSBMU1UxIEwxIEQgY2FjaGUgc3RvcmUgcmVmZXJlbmNlcworZXZlbnQ6MFgxMTQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQMTcgOiAoR3JvdXAgMTcgcG1fbHN1X3N0b3JlMSkgUHJvY2Vzc29yIGN5Y2xlcworZXZlbnQ6MFgxMTUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMTcgOiAoR3JvdXAgMTcgcG1fbHN1X3N0b3JlMSkgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgxMTYgY291bnRlcnM6NiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1NUX01JU1NfTDFfR1JQMTcgOiAoR3JvdXAgMTcgcG1fbHN1X3N0b3JlMSkgTDEgRCBjYWNoZSBzdG9yZSBtaXNzZXMKK2V2ZW50OjBYMTE3IGNvdW50ZXJzOjcgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQ19JTlZfTDJfR1JQMTcgOiAoR3JvdXAgMTcgcG1fbHN1X3N0b3JlMSkgTDEgRCBjYWNoZSBlbnRyaWVzIGludmFsaWRhdGVkIGZyb20gTDIKKworI0dyb3VwIDE4IHBtX2xzdV9zdG9yZTIsIExTVSBTdG9yZSBFdmVudHMKK2V2ZW50OjBYMTIwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1UwX1NSUV9TVEZXRF9HUlAxOCA6IChHcm91cCAxOCBwbV9sc3Vfc3RvcmUyKSBMU1UwIFNSUSBzdG9yZSBmb3J3YXJkZWQKK2V2ZW50OjBYMTIxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1UxX1NSUV9TVEZXRF9HUlAxOCA6IChHcm91cCAxOCBwbV9sc3Vfc3RvcmUyKSBMU1UxIFNSUSBzdG9yZSBmb3J3YXJkZWQKK2V2ZW50OjBYMTIyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9TVF9SRUZfTDFfTFNVMF9HUlAxOCA6IChHcm91cCAxOCBwbV9sc3Vfc3RvcmUyKSBMU1UwIEwxIEQgY2FjaGUgc3RvcmUgcmVmZXJlbmNlcworZXZlbnQ6MFgxMjMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1NUX1JFRl9MMV9MU1UxX0dSUDE4IDogKEdyb3VwIDE4IHBtX2xzdV9zdG9yZTIpIExTVTEgTDEgRCBjYWNoZSBzdG9yZSByZWZlcmVuY2VzCitldmVudDowWDEyNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVMF9CVVNZX0dSUDE4IDogKEdyb3VwIDE4IHBtX2xzdV9zdG9yZTIpIExTVTAgYnVzeQorZXZlbnQ6MFgxMjUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQMTggOiAoR3JvdXAgMTggcG1fbHN1X3N0b3JlMikgUHJvY2Vzc29yIGN5Y2xlcworZXZlbnQ6MFgxMjYgY291bnRlcnM6NiB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMTggOiAoR3JvdXAgMTggcG1fbHN1X3N0b3JlMikgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgxMjcgY291bnRlcnM6NyB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQMTggOiAoR3JvdXAgMTggcG1fbHN1X3N0b3JlMikgUHJvY2Vzc29yIGN5Y2xlcworCisjR3JvdXAgMTkgcG1fbHN1NywgSW5mb3JtYXRpb24gb24gdGhlIExvYWQgU3RvcmUgVW5pdAorZXZlbnQ6MFgxMzAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVTBfREVSQVRfTUlTU19HUlAxOSA6IChHcm91cCAxOSBwbV9sc3U3KSBMU1UwIERFUkFUIG1pc3NlcworZXZlbnQ6MFgxMzEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVTFfREVSQVRfTUlTU19HUlAxOSA6IChHcm91cCAxOSBwbV9sc3U3KSBMU1UxIERFUkFUIG1pc3NlcworZXZlbnQ6MFgxMzIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQMTkgOiAoR3JvdXAgMTkgcG1fbHN1NykgUHJvY2Vzc29yIGN5Y2xlcworZXZlbnQ6MFgxMzMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQMTkgOiAoR3JvdXAgMTkgcG1fbHN1NykgUHJvY2Vzc29yIGN5Y2xlcworZXZlbnQ6MFgxMzQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMTkgOiAoR3JvdXAgMTkgcG1fbHN1NykgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgxMzUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQMTkgOiAoR3JvdXAgMTkgcG1fbHN1NykgUHJvY2Vzc29yIGN5Y2xlcworZXZlbnQ6MFgxMzYgY291bnRlcnM6NiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wxX0RDQUNIRV9SRUxPQURfVkFMSURfR1JQMTkgOiAoR3JvdXAgMTkgcG1fbHN1NykgTDEgcmVsb2FkIGRhdGEgc291cmNlIHZhbGlkCitldmVudDowWDEzNyBjb3VudGVyczo3IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlAxOSA6IChHcm91cCAxOSBwbV9sc3U3KSBQcm9jZXNzb3IgY3ljbGVzCisKKyNHcm91cCAyMCBwbV9taXNjLCBNaXNjIEV2ZW50cyBmb3IgdGVzdGluZworZXZlbnQ6MFgxNDAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0dDVF9FTVBUWV9DWUNfR1JQMjAgOiAoR3JvdXAgMjAgcG1fbWlzYykgQ3ljbGVzIEdDVCBlbXB0eQorZXZlbnQ6MFgxNDEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9MTVFfU1JRX0VNUFRZX0NZQ19HUlAyMCA6IChHcm91cCAyMCBwbV9taXNjKSBDeWNsZXMgTE1RIGFuZCBTUlEgZW1wdHkKK2V2ZW50OjBYMTQyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9IVl9DWUNfR1JQMjAgOiAoR3JvdXAgMjAgcG1fbWlzYykgSHlwZXJ2aXNvciBDeWNsZXMKK2V2ZW50OjBYMTQzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDIwIDogKEdyb3VwIDIwIHBtX21pc2MpIFByb2Nlc3NvciBjeWNsZXMKK2V2ZW50OjBYMTQ0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV8xUExVU19QUENfQ01QTF9HUlAyMCA6IChHcm91cCAyMCBwbV9taXNjKSBPbmUgb3IgbW9yZSBQUEMgaW5zdHJ1Y3Rpb24gY29tcGxldGVkCitldmVudDowWDE0NSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAyMCA6IChHcm91cCAyMCBwbV9taXNjKSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDE0NiBjb3VudGVyczo2IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fR1JQX0NNUExfR1JQMjAgOiAoR3JvdXAgMjAgcG1fbWlzYykgR3JvdXAgY29tcGxldGVkCitldmVudDowWDE0NyBjb3VudGVyczo3IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fVEJfQklUX1RSQU5TX0dSUDIwIDogKEdyb3VwIDIwIHBtX21pc2MpIFRpbWUgQmFzZSBiaXQgdHJhbnNpdGlvbgorCisjR3JvdXAgMjEgcG1fcGVfYmVuY2gxLCBQRSBCZW5jaG1hcmtlciBncm91cCBmb3IgRlAgYW5hbHlzaXMKK2V2ZW50OjBYMTUwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFVfRkRJVl9HUlAyMSA6IChHcm91cCAyMSBwbV9wZV9iZW5jaDEpIEZQVSBleGVjdXRlZCBGRElWIGluc3RydWN0aW9uCitldmVudDowWDE1MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVX0ZNQV9HUlAyMSA6IChHcm91cCAyMSBwbV9wZV9iZW5jaDEpIEZQVSBleGVjdXRlZCBtdWx0aXBseS1hZGQgaW5zdHJ1Y3Rpb24KK2V2ZW50OjBYMTUyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GWFVfRklOX0dSUDIxIDogKEdyb3VwIDIxIHBtX3BlX2JlbmNoMSkgRlhVIHByb2R1Y2VkIGEgcmVzdWx0CitldmVudDowWDE1MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVX0ZJTl9HUlAyMSA6IChHcm91cCAyMSBwbV9wZV9iZW5jaDEpIEZQVSBwcm9kdWNlZCBhIHJlc3VsdAorZXZlbnQ6MFgxNTQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQMjEgOiAoR3JvdXAgMjEgcG1fcGVfYmVuY2gxKSBQcm9jZXNzb3IgY3ljbGVzCitldmVudDowWDE1NSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVX0ZTUVJUX0dSUDIxIDogKEdyb3VwIDIxIHBtX3BlX2JlbmNoMSkgRlBVIGV4ZWN1dGVkIEZTUVJUIGluc3RydWN0aW9uCitldmVudDowWDE1NiBjb3VudGVyczo2IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAyMSA6IChHcm91cCAyMSBwbV9wZV9iZW5jaDEpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMTU3IGNvdW50ZXJzOjcgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFVfRk1PVl9GRVNUX0dSUDIxIDogKEdyb3VwIDIxIHBtX3BlX2JlbmNoMSkgRlBVIGV4ZWN1dGluZyBGTU9WIG9yIEZFU1QgaW5zdHJ1Y3Rpb25zCisKKyNHcm91cCAyMiBwbV9wZV9iZW5jaDQsIFBFIEJlbmNobWFya2VyIGdyb3VwIGZvciBMMSBhbmQgVExCCitldmVudDowWDE2MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRFRMQl9NSVNTX0dSUDIyIDogKEdyb3VwIDIyIHBtX3BlX2JlbmNoNCkgRGF0YSBUTEIgbWlzc2VzCitldmVudDowWDE2MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSVRMQl9NSVNTX0dSUDIyIDogKEdyb3VwIDIyIHBtX3BlX2JlbmNoNCkgSW5zdHJ1Y3Rpb24gVExCIG1pc3NlcworZXZlbnQ6MFgxNjIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xEX01JU1NfTDFfR1JQMjIgOiAoR3JvdXAgMjIgcG1fcGVfYmVuY2g0KSBMMSBEIGNhY2hlIGxvYWQgbWlzc2VzCitldmVudDowWDE2MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fU1RfTUlTU19MMV9HUlAyMiA6IChHcm91cCAyMiBwbV9wZV9iZW5jaDQpIEwxIEQgY2FjaGUgc3RvcmUgbWlzc2VzCitldmVudDowWDE2NCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlAyMiA6IChHcm91cCAyMiBwbV9wZV9iZW5jaDQpIFByb2Nlc3NvciBjeWNsZXMKK2V2ZW50OjBYMTY1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDIyIDogKEdyb3VwIDIyIHBtX3BlX2JlbmNoNCkgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgxNjYgY291bnRlcnM6NiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1NUX1JFRl9MMV9HUlAyMiA6IChHcm91cCAyMiBwbV9wZV9iZW5jaDQpIEwxIEQgY2FjaGUgc3RvcmUgcmVmZXJlbmNlcworZXZlbnQ6MFgxNjcgY291bnRlcnM6NyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xEX1JFRl9MMV9HUlAyMiA6IChHcm91cCAyMiBwbV9wZV9iZW5jaDQpIEwxIEQgY2FjaGUgbG9hZCByZWZlcmVuY2VzCisKKyNHcm91cCAyMyBwbV9ocG1jb3VudDEsIEhwbWNvdW50IGdyb3VwIGZvciBMMSBhbmQgVExCIGJlaGF2aW9yCitldmVudDowWDE3MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRFRMQl9NSVNTX0dSUDIzIDogKEdyb3VwIDIzIHBtX2hwbWNvdW50MSkgRGF0YSBUTEIgbWlzc2VzCitldmVudDowWDE3MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVX0xNUV9TUlFfRU1QVFlfQ1lDX0dSUDIzIDogKEdyb3VwIDIzIHBtX2hwbWNvdW50MSkgQ3ljbGVzIExNUSBhbmQgU1JRIGVtcHR5CitldmVudDowWDE3MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTERfTUlTU19MMV9HUlAyMyA6IChHcm91cCAyMyBwbV9ocG1jb3VudDEpIEwxIEQgY2FjaGUgbG9hZCBtaXNzZXMKK2V2ZW50OjBYMTczIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9TVF9NSVNTX0wxX0dSUDIzIDogKEdyb3VwIDIzIHBtX2hwbWNvdW50MSkgTDEgRCBjYWNoZSBzdG9yZSBtaXNzZXMKK2V2ZW50OjBYMTc0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDIzIDogKEdyb3VwIDIzIHBtX2hwbWNvdW50MSkgUHJvY2Vzc29yIGN5Y2xlcworZXZlbnQ6MFgxNzUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMjMgOiAoR3JvdXAgMjMgcG1faHBtY291bnQxKSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDE3NiBjb3VudGVyczo2IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fU1RfUkVGX0wxX0dSUDIzIDogKEdyb3VwIDIzIHBtX2hwbWNvdW50MSkgTDEgRCBjYWNoZSBzdG9yZSByZWZlcmVuY2VzCitldmVudDowWDE3NyBjb3VudGVyczo3IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTERfUkVGX0wxX0dSUDIzIDogKEdyb3VwIDIzIHBtX2hwbWNvdW50MSkgTDEgRCBjYWNoZSBsb2FkIHJlZmVyZW5jZXMKKworI0dyb3VwIDI0IHBtX2hwbWNvdW50MiwgSHBtY291bnQgZ3JvdXAgZm9yIGNvbXB1dGF0aW9uCitldmVudDowWDE4MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVX0ZESVZfR1JQMjQgOiAoR3JvdXAgMjQgcG1faHBtY291bnQyKSBGUFUgZXhlY3V0ZWQgRkRJViBpbnN0cnVjdGlvbgorZXZlbnQ6MFgxODEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVV9GTUFfR1JQMjQgOiAoR3JvdXAgMjQgcG1faHBtY291bnQyKSBGUFUgZXhlY3V0ZWQgbXVsdGlwbHktYWRkIGluc3RydWN0aW9uCitldmVudDowWDE4MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVMF9GSU5fR1JQMjQgOiAoR3JvdXAgMjQgcG1faHBtY291bnQyKSBGUFUwIHByb2R1Y2VkIGEgcmVzdWx0CitldmVudDowWDE4MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVMV9GSU5fR1JQMjQgOiAoR3JvdXAgMjQgcG1faHBtY291bnQyKSBGUFUxIHByb2R1Y2VkIGEgcmVzdWx0CitldmVudDowWDE4NCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlAyNCA6IChHcm91cCAyNCBwbV9ocG1jb3VudDIpIFByb2Nlc3NvciBjeWNsZXMKK2V2ZW50OjBYMTg1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFVfU1RGX0dSUDI0IDogKEdyb3VwIDI0IHBtX2hwbWNvdW50MikgRlBVIGV4ZWN1dGVkIHN0b3JlIGluc3RydWN0aW9uCitldmVudDowWDE4NiBjb3VudGVyczo2IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAyNCA6IChHcm91cCAyNCBwbV9ocG1jb3VudDIpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMTg3IGNvdW50ZXJzOjcgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1VfTERGX0dSUDI0IDogKEdyb3VwIDI0IHBtX2hwbWNvdW50MikgTFNVIGV4ZWN1dGVkIEZsb2F0aW5nIFBvaW50IGxvYWQgaW5zdHJ1Y3Rpb24KKworI0dyb3VwIDI1IHBtX2wxYW5kYnIsIEwxIG1pc3NlcyBhbmQgYnJhbmNoIG1pc3NwcmVkaWN0IGFuYWx5c2lzCitldmVudDowWDE5MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAyNSA6IChHcm91cCAyNSBwbV9sMWFuZGJyKSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDE5MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlAyNSA6IChHcm91cCAyNSBwbV9sMWFuZGJyKSBQcm9jZXNzb3IgY3ljbGVzCitldmVudDowWDE5MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTERfTUlTU19MMV9HUlAyNSA6IChHcm91cCAyNSBwbV9sMWFuZGJyKSBMMSBEIGNhY2hlIGxvYWQgbWlzc2VzCitldmVudDowWDE5MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fQlJfSVNTVUVEX0dSUDI1IDogKEdyb3VwIDI1IHBtX2wxYW5kYnIpIEJyYW5jaGVzIGlzc3VlZAorZXZlbnQ6MFgxOTQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVTBfQlVTWV9HUlAyNSA6IChHcm91cCAyNSBwbV9sMWFuZGJyKSBMU1UwIGJ1c3kKK2V2ZW50OjBYMTk1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDI1IDogKEdyb3VwIDI1IHBtX2wxYW5kYnIpIFByb2Nlc3NvciBjeWNsZXMKK2V2ZW50OjBYMTk2IGNvdW50ZXJzOjYgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9CUl9NUFJFRF9DUl9HUlAyNSA6IChHcm91cCAyNSBwbV9sMWFuZGJyKSBCcmFuY2ggbWlzcHJlZGljdGlvbnMgZHVlIHRvIENSIGJpdCBzZXR0aW5nCitldmVudDowWDE5NyBjb3VudGVyczo3IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fQlJfTVBSRURfVEFfR1JQMjUgOiAoR3JvdXAgMjUgcG1fbDFhbmRicikgQnJhbmNoIG1pc3ByZWRpY3Rpb25zIGR1ZSB0byB0YXJnZXQgYWRkcmVzcworCisjR3JvdXAgMjYgcG1faW1peCwgSW5zdHJ1Y3Rpb24gbWl4OiBsb2Fkcywgc3RvcmVzIGFuZCBicmFuY2hlcworZXZlbnQ6MFgxQTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMjYgOiAoR3JvdXAgMjYgcG1faW1peCkgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgxQTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQMjYgOiAoR3JvdXAgMjYgcG1faW1peCkgUHJvY2Vzc29yIGN5Y2xlcworZXZlbnQ6MFgxQTIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xEX01JU1NfTDFfR1JQMjYgOiAoR3JvdXAgMjYgcG1faW1peCkgTDEgRCBjYWNoZSBsb2FkIG1pc3NlcworZXZlbnQ6MFgxQTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0JSX0lTU1VFRF9HUlAyNiA6IChHcm91cCAyNiBwbV9pbWl4KSBCcmFuY2hlcyBpc3N1ZWQKK2V2ZW50OjBYMUE0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDI2IDogKEdyb3VwIDI2IHBtX2ltaXgpIFByb2Nlc3NvciBjeWNsZXMKK2V2ZW50OjBYMUE1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1UwX0JVU1lfR1JQMjYgOiAoR3JvdXAgMjYgcG1faW1peCkgTFNVMCBidXN5CitldmVudDowWDFBNiBjb3VudGVyczo2IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fU1RfUkVGX0wxX0dSUDI2IDogKEdyb3VwIDI2IHBtX2ltaXgpIEwxIEQgY2FjaGUgc3RvcmUgcmVmZXJlbmNlcworZXZlbnQ6MFgxQTcgY291bnRlcnM6NyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xEX1JFRl9MMV9HUlAyNiA6IChHcm91cCAyNiBwbV9pbWl4KSBMMSBEIGNhY2hlIGxvYWQgcmVmZXJlbmNlcworCisjR3JvdXAgMjcgcG1fYnJhbmNoLCBTTEIgYW5kIGJyYW5jaCBtaXNzcHJlZGljdCBhbmFseXNpcworZXZlbnQ6MFgxQjAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDI3IDogKEdyb3VwIDI3IHBtX2JyYW5jaCkgUnVuIGN5Y2xlcworZXZlbnQ6MFgxQjEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RTTEJfTUlTU19HUlAyNyA6IChHcm91cCAyNyBwbV9icmFuY2gpIERhdGEgU0xCIG1pc3NlcworZXZlbnQ6MFgxQjIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0JSX0lTU1VFRF9HUlAyNyA6IChHcm91cCAyNyBwbV9icmFuY2gpIEJyYW5jaGVzIGlzc3VlZAorZXZlbnQ6MFgxQjMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0JSX01QUkVEX0NSX0dSUDI3IDogKEdyb3VwIDI3IHBtX2JyYW5jaCkgQnJhbmNoIG1pc3ByZWRpY3Rpb25zIGR1ZSB0byBDUiBiaXQgc2V0dGluZworZXZlbnQ6MFgxQjQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lTTEJfTUlTU19HUlAyNyA6IChHcm91cCAyNyBwbV9icmFuY2gpIEluc3RydWN0aW9uIFNMQiBtaXNzZXMKK2V2ZW50OjBYMUI1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDI3IDogKEdyb3VwIDI3IHBtX2JyYW5jaCkgUHJvY2Vzc29yIGN5Y2xlcworZXZlbnQ6MFgxQjYgY291bnRlcnM6NiB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMjcgOiAoR3JvdXAgMjcgcG1fYnJhbmNoKSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDFCNyBjb3VudGVyczo3IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fQlJfTVBSRURfVEFfR1JQMjcgOiAoR3JvdXAgMjcgcG1fYnJhbmNoKSBCcmFuY2ggbWlzcHJlZGljdGlvbnMgZHVlIHRvIHRhcmdldCBhZGRyZXNzCisKKyNHcm91cCAyOCBwbV9kYXRhLCBkYXRhIHNvdXJjZSBhbmQgTE1RCitldmVudDowWDFDMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fREFUQV9GUk9NX0wyX0dSUDI4IDogKEdyb3VwIDI4IHBtX2RhdGEpIERhdGEgbG9hZGVkIGZyb20gTDIKK2V2ZW50OjBYMUMxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDI4IDogKEdyb3VwIDI4IHBtX2RhdGEpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMUMyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQVRBX0ZST01fTUVNX0dSUDI4IDogKEdyb3VwIDI4IHBtX2RhdGEpIERhdGEgbG9hZGVkIGZyb20gbWVtb3J5CitldmVudDowWDFDMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlAyOCA6IChHcm91cCAyOCBwbV9kYXRhKSBQcm9jZXNzb3IgY3ljbGVzCitldmVudDowWDFDNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAyOCA6IChHcm91cCAyOCBwbV9kYXRhKSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDFDNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlAyOCA6IChHcm91cCAyOCBwbV9kYXRhKSBQcm9jZXNzb3IgY3ljbGVzCitldmVudDowWDFDNiBjb3VudGVyczo2IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVX0xNUV9TMF9BTExPQ19HUlAyOCA6IChHcm91cCAyOCBwbV9kYXRhKSBMTVEgc2xvdCAwIGFsbG9jYXRlZAorZXZlbnQ6MFgxQzcgY291bnRlcnM6NyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9MTVFfUzBfVkFMSURfR1JQMjggOiAoR3JvdXAgMjggcG1fZGF0YSkgTE1RIHNsb3QgMCB2YWxpZAorCisjR3JvdXAgMjkgcG1fdGxiLCBUTEIgYW5kIExSUSBwbHVzIGRhdGEgcHJlZmV0Y2gKK2V2ZW50OjBYMUQwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EVExCX01JU1NfR1JQMjkgOiAoR3JvdXAgMjkgcG1fdGxiKSBEYXRhIFRMQiBtaXNzZXMKK2V2ZW50OjBYMUQxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JVExCX01JU1NfR1JQMjkgOiAoR3JvdXAgMjkgcG1fdGxiKSBJbnN0cnVjdGlvbiBUTEIgbWlzc2VzCitldmVudDowWDFEMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAyOSA6IChHcm91cCAyOSBwbV90bGIpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMUQzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDI5IDogKEdyb3VwIDI5IHBtX3RsYikgUHJvY2Vzc29yIGN5Y2xlcworZXZlbnQ6MFgxRDQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9MUlFfUzBfQUxMT0NfR1JQMjkgOiAoR3JvdXAgMjkgcG1fdGxiKSBMUlEgc2xvdCAwIGFsbG9jYXRlZAorZXZlbnQ6MFgxRDUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9MUlFfUzBfVkFMSURfR1JQMjkgOiAoR3JvdXAgMjkgcG1fdGxiKSBMUlEgc2xvdCAwIHZhbGlkCitldmVudDowWDFENiBjb3VudGVyczo2IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDFfUFJFRl9HUlAyOSA6IChHcm91cCAyOSBwbV90bGIpIEwxIGNhY2hlIGRhdGEgcHJlZmV0Y2hlcworZXZlbnQ6MFgxRDcgY291bnRlcnM6NyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wyX1BSRUZfR1JQMjkgOiAoR3JvdXAgMjkgcG1fdGxiKSBMMiBjYWNoZSBwcmVmZXRjaGVzCisKKyNHcm91cCAzMCBwbV9pc291cmNlLCBpbnN0IHNvdXJjZSBhbmQgdGFibGV3YWxrCitldmVudDowWDFFMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU5TVF9GUk9NX0wyX0dSUDMwIDogKEdyb3VwIDMwIHBtX2lzb3VyY2UpIEluc3RydWN0aW9ucyBmZXRjaGVkIGZyb20gTDIKK2V2ZW50OjBYMUUxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JTlNUX0ZST01fTUVNX0dSUDMwIDogKEdyb3VwIDMwIHBtX2lzb3VyY2UpIEluc3RydWN0aW9uIGZldGNoZWQgZnJvbSBtZW1vcnkKK2V2ZW50OjBYMUUyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9IVl9DWUNfR1JQMzAgOiAoR3JvdXAgMzAgcG1faXNvdXJjZSkgSHlwZXJ2aXNvciBDeWNsZXMKK2V2ZW50OjBYMUUzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDMwIDogKEdyb3VwIDMwIHBtX2lzb3VyY2UpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMUU0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQVRBX1RBQkxFV0FMS19DWUNfR1JQMzAgOiAoR3JvdXAgMzAgcG1faXNvdXJjZSkgQ3ljbGVzIGRvaW5nIGRhdGEgdGFibGV3YWxrcworZXZlbnQ6MFgxRTUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQMzAgOiAoR3JvdXAgMzAgcG1faXNvdXJjZSkgUHJvY2Vzc29yIGN5Y2xlcworZXZlbnQ6MFgxRTYgY291bnRlcnM6NiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0dSUF9DTVBMX0dSUDMwIDogKEdyb3VwIDMwIHBtX2lzb3VyY2UpIEdyb3VwIGNvbXBsZXRlZAorZXZlbnQ6MFgxRTcgY291bnRlcnM6NyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RDX0lOVl9MMl9HUlAzMCA6IChHcm91cCAzMCBwbV9pc291cmNlKSBMMSBEIGNhY2hlIGVudHJpZXMgaW52YWxpZGF0ZWQgZnJvbSBMMgorCisjR3JvdXAgMzEgcG1fc3luYywgU3luYyBhbmQgU1JRCitldmVudDowWDFGMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVX1NSUV9TMF9BTExPQ19HUlAzMSA6IChHcm91cCAzMSBwbV9zeW5jKSBTUlEgc2xvdCAwIGFsbG9jYXRlZAorZXZlbnQ6MFgxRjEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9TUlFfUzBfVkFMSURfR1JQMzEgOiAoR3JvdXAgMzEgcG1fc3luYykgU1JRIHNsb3QgMCB2YWxpZAorZXZlbnQ6MFgxRjIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xEX01JU1NfTDFfR1JQMzEgOiAoR3JvdXAgMzEgcG1fc3luYykgTDEgRCBjYWNoZSBsb2FkIG1pc3NlcworZXZlbnQ6MFgxRjMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9TUlFfU1lOQ19DWUNfR1JQMzEgOiAoR3JvdXAgMzEgcG1fc3luYykgU1JRIHN5bmMgZHVyYXRpb24KK2V2ZW50OjBYMUY0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDMxIDogKEdyb3VwIDMxIHBtX3N5bmMpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMUY1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDMxIDogKEdyb3VwIDMxIHBtX3N5bmMpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMUY2IGNvdW50ZXJzOjYgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDMxIDogKEdyb3VwIDMxIHBtX3N5bmMpIFByb2Nlc3NvciBjeWNsZXMKK2V2ZW50OjBYMUY3IGNvdW50ZXJzOjcgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MRF9SRUZfTDFfR1JQMzEgOiAoR3JvdXAgMzEgcG1fc3luYykgTDEgRCBjYWNoZSBsb2FkIHJlZmVyZW5jZXMKKworI0dyb3VwIDMyIHBtX2llcmF0LCBJRVJBVAorZXZlbnQ6MFgyMDAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lOU1RfRlJPTV9MMV9HUlAzMiA6IChHcm91cCAzMiBwbV9pZXJhdCkgSW5zdHJ1Y3Rpb24gZmV0Y2hlZCBmcm9tIEwxCitldmVudDowWDIwMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAzMiA6IChHcm91cCAzMiBwbV9pZXJhdCkgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgyMDIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lFUkFUX1hMQVRFX1dSX0dSUDMyIDogKEdyb3VwIDMyIHBtX2llcmF0KSBUcmFuc2xhdGlvbiB3cml0dGVuIHRvIGllcmF0CitldmVudDowWDIwMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlAzMiA6IChHcm91cCAzMiBwbV9pZXJhdCkgUHJvY2Vzc29yIGN5Y2xlcworZXZlbnQ6MFgyMDQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMzIgOiAoR3JvdXAgMzIgcG1faWVyYXQpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMjA1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDMyIDogKEdyb3VwIDMyIHBtX2llcmF0KSBQcm9jZXNzb3IgY3ljbGVzCitldmVudDowWDIwNiBjb3VudGVyczo2IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAzMiA6IChHcm91cCAzMiBwbV9pZXJhdCkgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgyMDcgY291bnRlcnM6NyB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQMzIgOiAoR3JvdXAgMzIgcG1faWVyYXQpIFByb2Nlc3NvciBjeWNsZXMKKworI0dyb3VwIDMzIHBtX2RlcmF0LCBERVJBVAorZXZlbnQ6MFgyMTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0dDVF9FTVBUWV9DWUNfR1JQMzMgOiAoR3JvdXAgMzMgcG1fZGVyYXQpIEN5Y2xlcyBHQ1QgZW1wdHkKK2V2ZW50OjBYMjExIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9HUlBfRElTUF9WQUxJRF9HUlAzMyA6IChHcm91cCAzMyBwbV9kZXJhdCkgR3JvdXAgZGlzcGF0Y2ggdmFsaWQKK2V2ZW50OjBYMjEyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMV9EQ0FDSEVfUkVMT0FEX1ZBTElEX0dSUDMzIDogKEdyb3VwIDMzIHBtX2RlcmF0KSBMMSByZWxvYWQgZGF0YSBzb3VyY2UgdmFsaWQKK2V2ZW50OjBYMjEzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDMzIDogKEdyb3VwIDMzIHBtX2RlcmF0KSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDIxNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU5TVF9ESVNQX0dSUDMzIDogKEdyb3VwIDMzIHBtX2RlcmF0KSBJbnN0cnVjdGlvbnMgZGlzcGF0Y2hlZAorZXZlbnQ6MFgyMTUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9ERVJBVF9NSVNTX0dSUDMzIDogKEdyb3VwIDMzIHBtX2RlcmF0KSBERVJBVCBtaXNzZXMKK2V2ZW50OjBYMjE2IGNvdW50ZXJzOjYgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9TVF9SRUZfTDFfR1JQMzMgOiAoR3JvdXAgMzMgcG1fZGVyYXQpIEwxIEQgY2FjaGUgc3RvcmUgcmVmZXJlbmNlcworZXZlbnQ6MFgyMTcgY291bnRlcnM6NyB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQMzMgOiAoR3JvdXAgMzMgcG1fZGVyYXQpIFByb2Nlc3NvciBjeWNsZXMKKworI0dyb3VwIDM0IHBtX21hcmsxLCBJbmZvcm1hdGlvbiBvbiBtYXJrZWQgaW5zdHJ1Y3Rpb25zCitldmVudDowWDIyMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0xEX01JU1NfTDFfR1JQMzQgOiAoR3JvdXAgMzQgcG1fbWFyazEpIE1hcmtlZCBMMSBEIGNhY2hlIGxvYWQgbWlzc2VzCitldmVudDowWDIyMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fVEhSRVNIX1RJTUVPX0dSUDM0IDogKEdyb3VwIDM0IHBtX21hcmsxKSBUaHJlc2hvbGQgdGltZW91dAorZXZlbnQ6MFgyMjIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQMzQgOiAoR3JvdXAgMzQgcG1fbWFyazEpIFByb2Nlc3NvciBjeWNsZXMKK2V2ZW50OjBYMjIzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfR1JQX0NNUExfR1JQMzQgOiAoR3JvdXAgMzQgcG1fbWFyazEpIE1hcmtlZCBncm91cCBjb21wbGV0ZWQKK2V2ZW50OjBYMjI0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9HUlBfTVJLX0dSUDM0IDogKEdyb3VwIDM0IHBtX21hcmsxKSBHcm91cCBtYXJrZWQgaW4gSURVCitldmVudDowWDIyNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0dSUF9JU1NVRURfR1JQMzQgOiAoR3JvdXAgMzQgcG1fbWFyazEpIE1hcmtlZCBncm91cCBpc3N1ZWQKK2V2ZW50OjBYMjI2IGNvdW50ZXJzOjYgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfSU5TVF9GSU5fR1JQMzQgOiAoR3JvdXAgMzQgcG1fbWFyazEpIE1hcmtlZCBpbnN0cnVjdGlvbiBmaW5pc2hlZAorZXZlbnQ6MFgyMjcgY291bnRlcnM6NyB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMzQgOiAoR3JvdXAgMzQgcG1fbWFyazEpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKKworI0dyb3VwIDM1IHBtX21hcmsyLCBNYXJrZWQgSW5zdHJ1Y3Rpb25zIFByb2Nlc3NpbmcgRmxvdworZXZlbnQ6MFgyMzAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19HUlBfRElTUF9HUlAzNSA6IChHcm91cCAzNSBwbV9tYXJrMikgTWFya2VkIGdyb3VwIGRpc3BhdGNoZWQKK2V2ZW50OjBYMjMxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfQlJVX0ZJTl9HUlAzNSA6IChHcm91cCAzNSBwbV9tYXJrMikgTWFya2VkIGluc3RydWN0aW9uIEJSVSBwcm9jZXNzaW5nIGZpbmlzaGVkCitldmVudDowWDIzMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlAzNSA6IChHcm91cCAzNSBwbV9tYXJrMikgUHJvY2Vzc29yIGN5Y2xlcworZXZlbnQ6MFgyMzMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19DUlVfRklOX0dSUDM1IDogKEdyb3VwIDM1IHBtX21hcmsyKSBNYXJrZWQgaW5zdHJ1Y3Rpb24gQ1JVIHByb2Nlc3NpbmcgZmluaXNoZWQKK2V2ZW50OjBYMjM0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9HUlBfTVJLX0dSUDM1IDogKEdyb3VwIDM1IHBtX21hcmsyKSBHcm91cCBtYXJrZWQgaW4gSURVCitldmVudDowWDIzNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0ZYVV9GSU5fR1JQMzUgOiAoR3JvdXAgMzUgcG1fbWFyazIpIE1hcmtlZCBpbnN0cnVjdGlvbiBGWFUgcHJvY2Vzc2luZyBmaW5pc2hlZAorZXZlbnQ6MFgyMzYgY291bnRlcnM6NiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19GUFVfRklOX0dSUDM1IDogKEdyb3VwIDM1IHBtX21hcmsyKSBNYXJrZWQgaW5zdHJ1Y3Rpb24gRlBVIHByb2Nlc3NpbmcgZmluaXNoZWQKK2V2ZW50OjBYMjM3IGNvdW50ZXJzOjcgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfTFNVX0ZJTl9HUlAzNSA6IChHcm91cCAzNSBwbV9tYXJrMikgTWFya2VkIGluc3RydWN0aW9uIExTVSBwcm9jZXNzaW5nIGZpbmlzaGVkCisKKyNHcm91cCAzNiBwbV9tYXJrMywgTWFya2VkIFN0b3JlcyBQcm9jZXNzaW5nIEZsb3cKK2V2ZW50OjBYMjQwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfU1RfQ01QTF9HUlAzNiA6IChHcm91cCAzNiBwbV9tYXJrMykgTWFya2VkIHN0b3JlIGluc3RydWN0aW9uIGNvbXBsZXRlZAorZXZlbnQ6MFgyNDEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQMzYgOiAoR3JvdXAgMzYgcG1fbWFyazMpIFByb2Nlc3NvciBjeWNsZXMKK2V2ZW50OjBYMjQyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfU1RfQ01QTF9JTlRfR1JQMzYgOiAoR3JvdXAgMzYgcG1fbWFyazMpIE1hcmtlZCBzdG9yZSBjb21wbGV0ZWQgd2l0aCBpbnRlcnZlbnRpb24KK2V2ZW50OjBYMjQzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfR1JQX0NNUExfR1JQMzYgOiAoR3JvdXAgMzYgcG1fbWFyazMpIE1hcmtlZCBncm91cCBjb21wbGV0ZWQKK2V2ZW50OjBYMjQ0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfR1JQX1RJTUVPX0dSUDM2IDogKEdyb3VwIDM2IHBtX21hcmszKSBNYXJrZWQgZ3JvdXAgY29tcGxldGlvbiB0aW1lb3V0CitldmVudDowWDI0NSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX1NUX0dQU19HUlAzNiA6IChHcm91cCAzNiBwbV9tYXJrMykgTWFya2VkIHN0b3JlIHNlbnQgdG8gR1BTCitldmVudDowWDI0NiBjb3VudGVyczo2IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0xTVV9TUlFfSU5TVF9WQUxJRF9HUlAzNiA6IChHcm91cCAzNiBwbV9tYXJrMykgTWFya2VkIGluc3RydWN0aW9uIHZhbGlkIGluIFNSUQorZXZlbnQ6MFgyNDcgY291bnRlcnM6NyB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMzYgOiAoR3JvdXAgMzYgcG1fbWFyazMpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKKworI0dyb3VwIDM3IHBtX2xzdV9tYXJrMSwgTG9hZCBTdG9yZSBVbml0IE1hcmtlZCBFdmVudHMKK2V2ZW50OjBYMjUwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfU1RfTUlTU19MMV9HUlAzNyA6IChHcm91cCAzNyBwbV9sc3VfbWFyazEpIE1hcmtlZCBMMSBEIGNhY2hlIHN0b3JlIG1pc3NlcworZXZlbnQ6MFgyNTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19JTVJfUkVMT0FEX0dSUDM3IDogKEdyb3VwIDM3IHBtX2xzdV9tYXJrMSkgTWFya2VkIElNUiByZWxvYWRlZAorZXZlbnQ6MFgyNTIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19MU1UwX0ZMVVNIX1VTVF9HUlAzNyA6IChHcm91cCAzNyBwbV9sc3VfbWFyazEpIExTVTAgbWFya2VkIHVuYWxpZ25lZCBzdG9yZSBmbHVzaGVzCitldmVudDowWDI1MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0xTVTFfRkxVU0hfVVNUX0dSUDM3IDogKEdyb3VwIDM3IHBtX2xzdV9tYXJrMSkgTFNVMSBtYXJrZWQgdW5hbGlnbmVkIHN0b3JlIGZsdXNoZXMKK2V2ZW50OjBYMjU0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDM3IDogKEdyb3VwIDM3IHBtX2xzdV9tYXJrMSkgUHJvY2Vzc29yIGN5Y2xlcworZXZlbnQ6MFgyNTUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMzcgOiAoR3JvdXAgMzcgcG1fbHN1X21hcmsxKSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDI1NiBjb3VudGVyczo2IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0xTVTBfRkxVU0hfVUxEX0dSUDM3IDogKEdyb3VwIDM3IHBtX2xzdV9tYXJrMSkgTFNVMCBtYXJrZWQgdW5hbGlnbmVkIGxvYWQgZmx1c2hlcworZXZlbnQ6MFgyNTcgY291bnRlcnM6NyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19MU1UxX0ZMVVNIX1VMRF9HUlAzNyA6IChHcm91cCAzNyBwbV9sc3VfbWFyazEpIExTVTEgbWFya2VkIHVuYWxpZ25lZCBsb2FkIGZsdXNoZXMKKworI0dyb3VwIDM4IHBtX2xzdV9tYXJrMiwgTG9hZCBTdG9yZSBVbml0IE1hcmtlZCBFdmVudHMKK2V2ZW50OjBYMjYwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfTERfTUlTU19MMV9MU1UwX0dSUDM4IDogKEdyb3VwIDM4IHBtX2xzdV9tYXJrMikgTFNVMCBMMSBEIGNhY2hlIGxvYWQgbWlzc2VzCitldmVudDowWDI2MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0xEX01JU1NfTDFfTFNVMV9HUlAzOCA6IChHcm91cCAzOCBwbV9sc3VfbWFyazIpIExTVTEgTDEgRCBjYWNoZSBsb2FkIG1pc3NlcworZXZlbnQ6MFgyNjIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19MU1UwX0ZMVVNIX0xSUV9HUlAzOCA6IChHcm91cCAzOCBwbV9sc3VfbWFyazIpIExTVTAgbWFya2VkIExSUSBmbHVzaGVzCitldmVudDowWDI2MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0xTVTFfRkxVU0hfTFJRX0dSUDM4IDogKEdyb3VwIDM4IHBtX2xzdV9tYXJrMikgTFNVMSBtYXJrZWQgTFJRIGZsdXNoZXMKK2V2ZW50OjBYMjY0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDM4IDogKEdyb3VwIDM4IHBtX2xzdV9tYXJrMikgUHJvY2Vzc29yIGN5Y2xlcworZXZlbnQ6MFgyNjUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMzggOiAoR3JvdXAgMzggcG1fbHN1X21hcmsyKSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDI2NiBjb3VudGVyczo2IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0xTVTBfRkxVU0hfU1JRX0dSUDM4IDogKEdyb3VwIDM4IHBtX2xzdV9tYXJrMikgTFNVMCBtYXJrZWQgU1JRIGZsdXNoZXMKK2V2ZW50OjBYMjY3IGNvdW50ZXJzOjcgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfTFNVMV9GTFVTSF9TUlFfR1JQMzggOiAoR3JvdXAgMzggcG1fbHN1X21hcmsyKSBMU1UxIG1hcmtlZCBTUlEgZmx1c2hlcworCisjR3JvdXAgMzkgcG1fZnh1MSwgRml4ZWQgUG9pbnQgZXZlbnRzIGJ5IHVuaXQKK2V2ZW50OjBYMjcwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDM5IDogKEdyb3VwIDM5IHBtX2Z4dTEpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMjcxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDM5IDogKEdyb3VwIDM5IHBtX2Z4dTEpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMjcyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GWFVfRklOX0dSUDM5IDogKEdyb3VwIDM5IHBtX2Z4dTEpIEZYVSBwcm9kdWNlZCBhIHJlc3VsdAorZXZlbnQ6MFgyNzMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZYVTFfQlVTWV9GWFUwX0lETEVfR1JQMzkgOiAoR3JvdXAgMzkgcG1fZnh1MSkgRlhVMSBidXN5IEZYVTAgaWRsZQorZXZlbnQ6MFgyNzQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZYVV9JRExFX0dSUDM5IDogKEdyb3VwIDM5IHBtX2Z4dTEpIEZYVSBpZGxlCitldmVudDowWDI3NSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlhVX0JVU1lfR1JQMzkgOiAoR3JvdXAgMzkgcG1fZnh1MSkgRlhVIGJ1c3kKK2V2ZW50OjBYMjc2IGNvdW50ZXJzOjYgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GWFUwX0JVU1lfRlhVMV9JRExFX0dSUDM5IDogKEdyb3VwIDM5IHBtX2Z4dTEpIEZYVTAgYnVzeSBGWFUxIGlkbGUKK2V2ZW50OjBYMjc3IGNvdW50ZXJzOjcgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDM5IDogKEdyb3VwIDM5IHBtX2Z4dTEpIFByb2Nlc3NvciBjeWNsZXMKKworI0dyb3VwIDQwIHBtX2Z4dTIsIEZpeGVkIFBvaW50IGV2ZW50cyBieSB1bml0CitldmVudDowWDI4MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlA0MCA6IChHcm91cCA0MCBwbV9meHUyKSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDI4MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlA0MCA6IChHcm91cCA0MCBwbV9meHUyKSBQcm9jZXNzb3IgY3ljbGVzCitldmVudDowWDI4MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlhMUzFfRlVMTF9DWUNfR1JQNDAgOiAoR3JvdXAgNDAgcG1fZnh1MikgQ3ljbGVzIEZYVTEvTFMxIHF1ZXVlIGZ1bGwKK2V2ZW50OjBYMjgzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GWExTMF9GVUxMX0NZQ19HUlA0MCA6IChHcm91cCA0MCBwbV9meHUyKSBDeWNsZXMgRlhVMC9MUzAgcXVldWUgZnVsbAorZXZlbnQ6MFgyODQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZYVV9JRExFX0dSUDQwIDogKEdyb3VwIDQwIHBtX2Z4dTIpIEZYVSBpZGxlCitldmVudDowWDI4NSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlhVX0JVU1lfR1JQNDAgOiAoR3JvdXAgNDAgcG1fZnh1MikgRlhVIGJ1c3kKK2V2ZW50OjBYMjg2IGNvdW50ZXJzOjYgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GWFUwX0ZJTl9HUlA0MCA6IChHcm91cCA0MCBwbV9meHUyKSBGWFUwIHByb2R1Y2VkIGEgcmVzdWx0CitldmVudDowWDI4NyBjb3VudGVyczo3IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlhVMV9GSU5fR1JQNDAgOiAoR3JvdXAgNDAgcG1fZnh1MikgRlhVMSBwcm9kdWNlZCBhIHJlc3VsdAorCisjR3JvdXAgNDEgcG1faWZ1LCBwbV9pZnUKK2V2ZW50OjBYMjkwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JTlNUX0ZST01fTDFfR1JQNDEgOiAoR3JvdXAgNDEgcG1faWZ1KSBJbnN0cnVjdGlvbiBmZXRjaGVkIGZyb20gTDEKK2V2ZW50OjBYMjkxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JTlNUX0ZST01fTUVNX0dSUDQxIDogKEdyb3VwIDQxIHBtX2lmdSkgSW5zdHJ1Y3Rpb24gZmV0Y2hlZCBmcm9tIG1lbW9yeQorZXZlbnQ6MFgyOTIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lOU1RfRlJPTV9QUkVGX0dSUDQxIDogKEdyb3VwIDQxIHBtX2lmdSkgSW5zdHJ1Y3Rpb25zIGZldGNoZWQgZnJvbSBwcmVmZXRjaAorZXZlbnQ6MFgyOTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNXzBJTlNUX0ZFVENIX0dSUDQxIDogKEdyb3VwIDQxIHBtX2lmdSkgTm8gaW5zdHJ1Y3Rpb25zIGZldGNoZWQKK2V2ZW50OjBYMjk0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JTlNUX0ZFVENIX0NZQ19HUlA0MSA6IChHcm91cCA0MSBwbV9pZnUpIEN5Y2xlcyBhdCBsZWFzdCAxIGluc3RydWN0aW9uIGZldGNoZWQKK2V2ZW50OjBYMjk1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JTlNUX0ZST01fTDI1X01PRF9HUlA0MSA6IChHcm91cCA0MSBwbV9pZnUpIEluc3RydWN0aW9uIGZldGNoZWQgZnJvbSBMMi41IG1vZGlmaWVkCitldmVudDowWDI5NiBjb3VudGVyczo2IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlA0MSA6IChHcm91cCA0MSBwbV9pZnUpIFByb2Nlc3NvciBjeWNsZXMKK2V2ZW50OjBYMjk3IGNvdW50ZXJzOjcgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDQxIDogKEdyb3VwIDQxIHBtX2lmdSkgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorCisjR3JvdXAgNDIgcG1fY3BpX3N0YWNrMSwgQ1BJIHN0YWNrIGFuYWx5c2lzCitldmVudDowWDJBMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVMF9CVVNZX0dSUDQyIDogKEdyb3VwIDQyIHBtX2NwaV9zdGFjazEpIExTVTAgYnVzeQorZXZlbnQ6MFgyQTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVTFfQlVTWV9HUlA0MiA6IChHcm91cCA0MiBwbV9jcGlfc3RhY2sxKSBMU1UxIGJ1c3kKK2V2ZW50OjBYMkEyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1VfRkxVU0hfR1JQNDIgOiAoR3JvdXAgNDIgcG1fY3BpX3N0YWNrMSkgRmx1c2ggaW5pdGlhdGVkIGJ5IExTVQorZXZlbnQ6MFgyQTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZMVVNIX0xTVV9CUl9NUFJFRF9HUlA0MiA6IChHcm91cCA0MiBwbV9jcGlfc3RhY2sxKSBGbHVzaCBjYXVzZWQgYnkgTFNVIG9yIGJyYW5jaCBtaXNwcmVkaWN0CitldmVudDowWDJBNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fQ01QTFVfU1RBTExfTFNVX0dSUDQyIDogKEdyb3VwIDQyIHBtX2NwaV9zdGFjazEpIENvbXBsZXRpb24gc3RhbGwgY2F1c2VkIGJ5IExTVSBpbnN0cnVjdGlvbgorZXZlbnQ6MFgyQTUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQNDIgOiAoR3JvdXAgNDIgcG1fY3BpX3N0YWNrMSkgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgyQTYgY291bnRlcnM6NiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0NNUExVX1NUQUxMX0VSQVRfTUlTU19HUlA0MiA6IChHcm91cCA0MiBwbV9jcGlfc3RhY2sxKSBDb21wbGV0aW9uIHN0YWxsIGNhdXNlZCBieSBFUkFUIG1pc3MKK2V2ZW50OjBYMkE3IGNvdW50ZXJzOjcgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDQyIDogKEdyb3VwIDQyIHBtX2NwaV9zdGFjazEpIFByb2Nlc3NvciBjeWNsZXMKKworI0dyb3VwIDQzIHBtX2NwaV9zdGFjazIsIENQSSBzdGFjayBhbmFseXNpcworZXZlbnQ6MFgyQjAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0NNUExVX1NUQUxMX09USEVSX0dSUDQzIDogKEdyb3VwIDQzIHBtX2NwaV9zdGFjazIpIENvbXBsZXRpb24gc3RhbGwgY2F1c2VkIGJ5IG90aGVyIHJlYXNvbgorZXZlbnQ6MFgyQjEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQNDMgOiAoR3JvdXAgNDMgcG1fY3BpX3N0YWNrMikgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgyQjIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xEX01JU1NfTDFfR1JQNDMgOiAoR3JvdXAgNDMgcG1fY3BpX3N0YWNrMikgTDEgRCBjYWNoZSBsb2FkIG1pc3NlcworZXZlbnQ6MFgyQjMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQNDMgOiAoR3JvdXAgNDMgcG1fY3BpX3N0YWNrMikgUHJvY2Vzc29yIGN5Y2xlcworZXZlbnQ6MFgyQjQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0NNUExVX1NUQUxMX0RDQUNIRV9NSVNTX0dSUDQzIDogKEdyb3VwIDQzIHBtX2NwaV9zdGFjazIpIENvbXBsZXRpb24gc3RhbGwgY2F1c2VkIGJ5IEQgY2FjaGUgbWlzcworZXZlbnQ6MFgyQjUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9ERVJBVF9NSVNTX0dSUDQzIDogKEdyb3VwIDQzIHBtX2NwaV9zdGFjazIpIERFUkFUIG1pc3NlcworZXZlbnQ6MFgyQjYgY291bnRlcnM6NiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0NNUExVX1NUQUxMX1JFSkVDVF9HUlA0MyA6IChHcm91cCA0MyBwbV9jcGlfc3RhY2syKSBDb21wbGV0aW9uIHN0YWxsIGNhdXNlZCBieSByZWplY3QKK2V2ZW50OjBYMkI3IGNvdW50ZXJzOjcgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MRF9SRUZfTDFfR1JQNDMgOiAoR3JvdXAgNDMgcG1fY3BpX3N0YWNrMikgTDEgRCBjYWNoZSBsb2FkIHJlZmVyZW5jZXMKKworI0dyb3VwIDQ0IHBtX2NwaV9zdGFjazMsIENQSSBzdGFjayBhbmFseXNpcworZXZlbnQ6MFgyQzAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQNDQgOiAoR3JvdXAgNDQgcG1fY3BpX3N0YWNrMykgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgyQzEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0dDVF9FTVBUWV9TUlFfRlVMTF9HUlA0NCA6IChHcm91cCA0NCBwbV9jcGlfc3RhY2szKSBHQ1QgZW1wdHkgY2F1c2VkIGJ5IFNSUSBmdWxsCitldmVudDowWDJDMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlhVX0ZJTl9HUlA0NCA6IChHcm91cCA0NCBwbV9jcGlfc3RhY2szKSBGWFUgcHJvZHVjZWQgYSByZXN1bHQKK2V2ZW50OjBYMkMzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFVfRklOX0dSUDQ0IDogKEdyb3VwIDQ0IHBtX2NwaV9zdGFjazMpIEZQVSBwcm9kdWNlZCBhIHJlc3VsdAorZXZlbnQ6MFgyQzQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0NNUExVX1NUQUxMX0ZYVV9HUlA0NCA6IChHcm91cCA0NCBwbV9jcGlfc3RhY2szKSBDb21wbGV0aW9uIHN0YWxsIGNhdXNlZCBieSBGWFUgaW5zdHJ1Y3Rpb24KK2V2ZW50OjBYMkM1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GWFVfQlVTWV9HUlA0NCA6IChHcm91cCA0NCBwbV9jcGlfc3RhY2szKSBGWFUgYnVzeQorZXZlbnQ6MFgyQzYgY291bnRlcnM6NiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0NNUExVX1NUQUxMX0RJVl9HUlA0NCA6IChHcm91cCA0NCBwbV9jcGlfc3RhY2szKSBDb21wbGV0aW9uIHN0YWxsIGNhdXNlZCBieSBESVYgaW5zdHJ1Y3Rpb24KK2V2ZW50OjBYMkM3IGNvdW50ZXJzOjcgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDQ0IDogKEdyb3VwIDQ0IHBtX2NwaV9zdGFjazMpIFByb2Nlc3NvciBjeWNsZXMKKworI0dyb3VwIDQ1IHBtX2NwaV9zdGFjazQsIENQSSBzdGFjayBhbmFseXNpcworZXZlbnQ6MFgyRDAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVV9GRElWX0dSUDQ1IDogKEdyb3VwIDQ1IHBtX2NwaV9zdGFjazQpIEZQVSBleGVjdXRlZCBGRElWIGluc3RydWN0aW9uCitldmVudDowWDJEMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVX0ZNQV9HUlA0NSA6IChHcm91cCA0NSBwbV9jcGlfc3RhY2s0KSBGUFUgZXhlY3V0ZWQgbXVsdGlwbHktYWRkIGluc3RydWN0aW9uCitldmVudDowWDJEMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlA0NSA6IChHcm91cCA0NSBwbV9jcGlfc3RhY2s0KSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDJEMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlA0NSA6IChHcm91cCA0NSBwbV9jcGlfc3RhY2s0KSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDJENCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fQ01QTFVfU1RBTExfRkRJVl9HUlA0NSA6IChHcm91cCA0NSBwbV9jcGlfc3RhY2s0KSBDb21wbGV0aW9uIHN0YWxsIGNhdXNlZCBieSBGRElWIG9yIEZRUlQgaW5zdHJ1Y3Rpb24KK2V2ZW50OjBYMkQ1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFVfRlNRUlRfR1JQNDUgOiAoR3JvdXAgNDUgcG1fY3BpX3N0YWNrNCkgRlBVIGV4ZWN1dGVkIEZTUVJUIGluc3RydWN0aW9uCitldmVudDowWDJENiBjb3VudGVyczo2IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fQ01QTFVfU1RBTExfRlBVX0dSUDQ1IDogKEdyb3VwIDQ1IHBtX2NwaV9zdGFjazQpIENvbXBsZXRpb24gc3RhbGwgY2F1c2VkIGJ5IEZQVSBpbnN0cnVjdGlvbgorZXZlbnQ6MFgyRDcgY291bnRlcnM6NyB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQNDUgOiAoR3JvdXAgNDUgcG1fY3BpX3N0YWNrNCkgUHJvY2Vzc29yIGN5Y2xlcworCisjR3JvdXAgNDYgcG1fY3BpX3N0YWNrNSwgQ1BJIHN0YWNrIGFuYWx5c2lzCitldmVudDowWDJFMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fR0NUX0VNUFRZX0NZQ19HUlA0NiA6IChHcm91cCA0NiBwbV9jcGlfc3RhY2s1KSBDeWNsZXMgR0NUIGVtcHR5CitldmVudDowWDJFMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlA0NiA6IChHcm91cCA0NiBwbV9jcGlfc3RhY2s1KSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDJFMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRkxVU0hfQlJfTVBSRURfR1JQNDYgOiAoR3JvdXAgNDYgcG1fY3BpX3N0YWNrNSkgRmx1c2ggY2F1c2VkIGJ5IGJyYW5jaCBtaXNwcmVkaWN0CitldmVudDowWDJFMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fQlJfTVBSRURfVEFfR1JQNDYgOiAoR3JvdXAgNDYgcG1fY3BpX3N0YWNrNSkgQnJhbmNoIG1pc3ByZWRpY3Rpb25zIGR1ZSB0byB0YXJnZXQgYWRkcmVzcworZXZlbnQ6MFgyRTQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0dDVF9FTVBUWV9JQ19NSVNTX0dSUDQ2IDogKEdyb3VwIDQ2IHBtX2NwaV9zdGFjazUpIEdDVCBlbXB0eSBkdWUgdG8gSSBjYWNoZSBtaXNzCitldmVudDowWDJFNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlA0NiA6IChHcm91cCA0NiBwbV9jcGlfc3RhY2s1KSBQcm9jZXNzb3IgY3ljbGVzCitldmVudDowWDJFNiBjb3VudGVyczo2IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fR0NUX0VNUFRZX0JSX01QUkVEX0dSUDQ2IDogKEdyb3VwIDQ2IHBtX2NwaV9zdGFjazUpIEdDVCBlbXB0eSBkdWUgdG8gYnJhbmNoIG1pc3ByZWRpY3QKK2V2ZW50OjBYMkU3IGNvdW50ZXJzOjcgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMV9XUklURV9DWUNfR1JQNDYgOiAoR3JvdXAgNDYgcG1fY3BpX3N0YWNrNSkgQ3ljbGVzIHdyaXRpbmcgdG8gaW5zdHJ1Y3Rpb24gTDEKKworI0dyb3VwIDQ3IHBtX2RhdGEyLCBkYXRhIHNvdXJjZSBhbmQgTE1RCitldmVudDowWDJGMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fREFUQV9GUk9NX0wyNV9TSFJfR1JQNDcgOiAoR3JvdXAgNDcgcG1fZGF0YTIpIERhdGEgbG9hZGVkIGZyb20gTDIuNSBzaGFyZWQKK2V2ZW50OjBYMkYxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDQ3IDogKEdyb3VwIDQ3IHBtX2RhdGEyKSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDJGMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fREFUQV9GUk9NX0wyNV9NT0RfR1JQNDcgOiAoR3JvdXAgNDcgcG1fZGF0YTIpIERhdGEgbG9hZGVkIGZyb20gTDIuNSBtb2RpZmllZAorZXZlbnQ6MFgyRjMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQNDcgOiAoR3JvdXAgNDcgcG1fZGF0YTIpIFByb2Nlc3NvciBjeWNsZXMKK2V2ZW50OjBYMkY0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDQ3IDogKEdyb3VwIDQ3IHBtX2RhdGEyKSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDJGNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlA0NyA6IChHcm91cCA0NyBwbV9kYXRhMikgUHJvY2Vzc29yIGN5Y2xlcworZXZlbnQ6MFgyRjYgY291bnRlcnM6NiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9MTVFfUzBfQUxMT0NfR1JQNDcgOiAoR3JvdXAgNDcgcG1fZGF0YTIpIExNUSBzbG90IDAgYWxsb2NhdGVkCitldmVudDowWDJGNyBjb3VudGVyczo3IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVX0xNUV9TMF9WQUxJRF9HUlA0NyA6IChHcm91cCA0NyBwbV9kYXRhMikgTE1RIHNsb3QgMCB2YWxpZAorCisjR3JvdXAgNDggcG1fZmV0Y2hfYnJhbmNoLCBJbnN0cnVjdGlvbiBmZXRjaCBhbmQgYnJhbmNoIGV2ZW50cworZXZlbnQ6MFgzMDAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lOU1RfRlJPTV9MMl9HUlA0OCA6IChHcm91cCA0OCBwbV9mZXRjaF9icmFuY2gpIEluc3RydWN0aW9ucyBmZXRjaGVkIGZyb20gTDIKK2V2ZW50OjBYMzAxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JTlNUX0ZST01fTUVNX0dSUDQ4IDogKEdyb3VwIDQ4IHBtX2ZldGNoX2JyYW5jaCkgSW5zdHJ1Y3Rpb24gZmV0Y2hlZCBmcm9tIG1lbW9yeQorZXZlbnQ6MFgzMDIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lOU1RfRlJPTV9QUkVGX0dSUDQ4IDogKEdyb3VwIDQ4IHBtX2ZldGNoX2JyYW5jaCkgSW5zdHJ1Y3Rpb25zIGZldGNoZWQgZnJvbSBwcmVmZXRjaAorZXZlbnQ6MFgzMDMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0JSX0lTU1VFRF9HUlA0OCA6IChHcm91cCA0OCBwbV9mZXRjaF9icmFuY2gpIEJyYW5jaGVzIGlzc3VlZAorZXZlbnQ6MFgzMDQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQNDggOiAoR3JvdXAgNDggcG1fZmV0Y2hfYnJhbmNoKSBQcm9jZXNzb3IgY3ljbGVzCitldmVudDowWDMwNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlA0OCA6IChHcm91cCA0OCBwbV9mZXRjaF9icmFuY2gpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMzA2IGNvdW50ZXJzOjYgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9CUl9NUFJFRF9DUl9HUlA0OCA6IChHcm91cCA0OCBwbV9mZXRjaF9icmFuY2gpIEJyYW5jaCBtaXNwcmVkaWN0aW9ucyBkdWUgdG8gQ1IgYml0IHNldHRpbmcKK2V2ZW50OjBYMzA3IGNvdW50ZXJzOjcgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9CUl9NUFJFRF9UQV9HUlA0OCA6IChHcm91cCA0OCBwbV9mZXRjaF9icmFuY2gpIEJyYW5jaCBtaXNwcmVkaWN0aW9ucyBkdWUgdG8gdGFyZ2V0IGFkZHJlc3MKKworI0dyb3VwIDQ5IHBtX2wxbDJfbWlzcywgTDEgYW5kIEwyIG1pc3MgZXZlbnRzCitldmVudDowWDMxMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fREFUQV9GUk9NX0wyX0dSUDQ5IDogKEdyb3VwIDQ5IHBtX2wxbDJfbWlzcykgRGF0YSBsb2FkZWQgZnJvbSBMMgorZXZlbnQ6MFgzMTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQNDkgOiAoR3JvdXAgNDkgcG1fbDFsMl9taXNzKSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDMxMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fREFUQV9GUk9NX01FTV9HUlA0OSA6IChHcm91cCA0OSBwbV9sMWwyX21pc3MpIERhdGEgbG9hZGVkIGZyb20gbWVtb3J5CitldmVudDowWDMxMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTERfTUlTU19MMV9MU1UwX0dSUDQ5IDogKEdyb3VwIDQ5IHBtX2wxbDJfbWlzcykgTFNVMCBMMSBEIGNhY2hlIGxvYWQgbWlzc2VzCitldmVudDowWDMxNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fMVBMVVNfUFBDX0NNUExfR1JQNDkgOiAoR3JvdXAgNDkgcG1fbDFsMl9taXNzKSBPbmUgb3IgbW9yZSBQUEMgaW5zdHJ1Y3Rpb24gY29tcGxldGVkCitldmVudDowWDMxNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlA0OSA6IChHcm91cCA0OSBwbV9sMWwyX21pc3MpIFByb2Nlc3NvciBjeWNsZXMKK2V2ZW50OjBYMzE2IGNvdW50ZXJzOjYgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MRF9NSVNTX0wxX0xTVTFfR1JQNDkgOiAoR3JvdXAgNDkgcG1fbDFsMl9taXNzKSBMU1UxIEwxIEQgY2FjaGUgbG9hZCBtaXNzZXMKK2V2ZW50OjBYMzE3IGNvdW50ZXJzOjcgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MRF9SRUZfTDFfR1JQNDkgOiAoR3JvdXAgNDkgcG1fbDFsMl9taXNzKSBMMSBEIGNhY2hlIGxvYWQgcmVmZXJlbmNlcwpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL3BwYzY0Lzk3MC91bml0X21hc2tzIGIvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL3BwYzY0Lzk3MC91bml0X21hc2tzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhYWJkY2EKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9ldmVudHMvcHBjNjQvOTcwL3VuaXRfbWFza3MKQEAgLTAsMCArMSw0IEBACisjIHBwYzY0IDk3MCBwb3NzaWJsZSB1bml0IG1hc2tzCisjCituYW1lOnplcm8gdHlwZTptYW5kYXRvcnkgZGVmYXVsdDoweDAKKwkJIDB4MCBObyB1bml0IG1hc2sKZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2V2ZW50cy9wcGM2NC85NzBNUC9ldmVudF9tYXBwaW5ncyBiL29wcm9maWxlLTAuOS43L2V2ZW50cy9wcGM2NC85NzBNUC9ldmVudF9tYXBwaW5ncwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOGQ4MTEzCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL3BwYzY0Lzk3ME1QL2V2ZW50X21hcHBpbmdzCkBAIC0wLDAgKzEsNTE5IEBACisjCisjIENvcHlyaWdodCBPUHJvZmlsZSBhdXRob3JzCisjIENvcHlyaWdodCAoYykgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcywgMjAwNy4KKyMgQ29udHJpYnV0ZWQgYnkgRGF2ZSBOb211cmEgPGRjbmx0Y0B1cy5pYm0uY29tPi4KKyMKKyNNYXBwaW5nIG9mIGV2ZW50IGdyb3VwcyB0byBNTUNSIHZhbHVlcworCisjR3JvdXAgRGVmYXVsdAorZXZlbnQ6MFgwMDEgbW1jcjA6MFgwNDAwQzUxRiBtbWNyMTowWDAwMDAwMDAwMEE0NkYxOEMgbW1jcmE6MFgwMDAwMjAwMQorCisjR3JvdXAgMSBwbV9zbGljZTAsIFRpbWUgU2xpY2UgMAorZXZlbnQ6MFgwMDEwIG1tY3IwOjBYMDAwMDA1MUYgbW1jcjE6MFgwMDAwMDAwMDBBNDZGMThDIG1tY3JhOjBYMDAwMDIwMDAKK2V2ZW50OjBYMDAxMSBtbWNyMDowWDAwMDAwNTFGIG1tY3IxOjBYMDAwMDAwMDAwQTQ2RjE4QyBtbWNyYTowWDAwMDAyMDAwCitldmVudDowWDAwMTIgbW1jcjA6MFgwMDAwMDUxRiBtbWNyMTowWDAwMDAwMDAwMEE0NkYxOEMgbW1jcmE6MFgwMDAwMjAwMAorZXZlbnQ6MFgwMDEzIG1tY3IwOjBYMDAwMDA1MUYgbW1jcjE6MFgwMDAwMDAwMDBBNDZGMThDIG1tY3JhOjBYMDAwMDIwMDAKK2V2ZW50OjBYMDAxNCBtbWNyMDowWDAwMDAwNTFGIG1tY3IxOjBYMDAwMDAwMDAwQTQ2RjE4QyBtbWNyYTowWDAwMDAyMDAwCitldmVudDowWDAwMTUgbW1jcjA6MFgwMDAwMDUxRiBtbWNyMTowWDAwMDAwMDAwMEE0NkYxOEMgbW1jcmE6MFgwMDAwMjAwMAorZXZlbnQ6MFgwMDE2IG1tY3IwOjBYMDAwMDA1MUYgbW1jcjE6MFgwMDAwMDAwMDBBNDZGMThDIG1tY3JhOjBYMDAwMDIwMDAKK2V2ZW50OjBYMDAxNyBtbWNyMDowWDAwMDAwNTFGIG1tY3IxOjBYMDAwMDAwMDAwQTQ2RjE4QyBtbWNyYTowWDAwMDAyMDAwCisKKyNHcm91cCAyIHBtX2Vwcm9mLCBHcm91cCBmb3IgdXNlIHdpdGggZXByb2YKK2V2ZW50OjBYMDAyMCBtbWNyMDowWDAwMDAwRjFGIG1tY3IxOjBYNDAwMzAwMTAwNUYwOTAwMCBtbWNyYTowWDAwMDAyMDAwCitldmVudDowWDAwMjEgbW1jcjA6MFgwMDAwMEYxRiBtbWNyMTowWDQwMDMwMDEwMDVGMDkwMDAgbW1jcmE6MFgwMDAwMjAwMAorZXZlbnQ6MFgwMDIyIG1tY3IwOjBYMDAwMDBGMUYgbW1jcjE6MFg0MDAzMDAxMDA1RjA5MDAwIG1tY3JhOjBYMDAwMDIwMDAKK2V2ZW50OjBYMDAyMyBtbWNyMDowWDAwMDAwRjFGIG1tY3IxOjBYNDAwMzAwMTAwNUYwOTAwMCBtbWNyYTowWDAwMDAyMDAwCitldmVudDowWDAwMjQgbW1jcjA6MFgwMDAwMEYxRiBtbWNyMTowWDQwMDMwMDEwMDVGMDkwMDAgbW1jcmE6MFgwMDAwMjAwMAorZXZlbnQ6MFgwMDI1IG1tY3IwOjBYMDAwMDBGMUYgbW1jcjE6MFg0MDAzMDAxMDA1RjA5MDAwIG1tY3JhOjBYMDAwMDIwMDAKK2V2ZW50OjBYMDAyNiBtbWNyMDowWDAwMDAwRjFGIG1tY3IxOjBYNDAwMzAwMTAwNUYwOTAwMCBtbWNyYTowWDAwMDAyMDAwCitldmVudDowWDAwMjcgbW1jcjA6MFgwMDAwMEYxRiBtbWNyMTowWDQwMDMwMDEwMDVGMDkwMDAgbW1jcmE6MFgwMDAwMjAwMAorCisjR3JvdXAgMyBwbV9iYXNpYywgQmFzaWMgcGVyZm9ybWFuY2UgaW5kaWNhdG9ycworZXZlbnQ6MFgwMDMwIG1tY3IwOjBYMDAwMDA5MUYgbW1jcjE6MFg0MDAzMDAxMDA1RjA5MDAwIG1tY3JhOjBYMDAwMDIwMDAKK2V2ZW50OjBYMDAzMSBtbWNyMDowWDAwMDAwOTFGIG1tY3IxOjBYNDAwMzAwMTAwNUYwOTAwMCBtbWNyYTowWDAwMDAyMDAwCitldmVudDowWDAwMzIgbW1jcjA6MFgwMDAwMDkxRiBtbWNyMTowWDQwMDMwMDEwMDVGMDkwMDAgbW1jcmE6MFgwMDAwMjAwMAorZXZlbnQ6MFgwMDMzIG1tY3IwOjBYMDAwMDA5MUYgbW1jcjE6MFg0MDAzMDAxMDA1RjA5MDAwIG1tY3JhOjBYMDAwMDIwMDAKK2V2ZW50OjBYMDAzNCBtbWNyMDowWDAwMDAwOTFGIG1tY3IxOjBYNDAwMzAwMTAwNUYwOTAwMCBtbWNyYTowWDAwMDAyMDAwCitldmVudDowWDAwMzUgbW1jcjA6MFgwMDAwMDkxRiBtbWNyMTowWDQwMDMwMDEwMDVGMDkwMDAgbW1jcmE6MFgwMDAwMjAwMAorZXZlbnQ6MFgwMDM2IG1tY3IwOjBYMDAwMDA5MUYgbW1jcjE6MFg0MDAzMDAxMDA1RjA5MDAwIG1tY3JhOjBYMDAwMDIwMDAKK2V2ZW50OjBYMDAzNyBtbWNyMDowWDAwMDAwOTFGIG1tY3IxOjBYNDAwMzAwMTAwNUYwOTAwMCBtbWNyYTowWDAwMDAyMDAwCisKKyNHcm91cCA0IHBtX2xzdSwgSW5mb3JtYXRpb24gb24gdGhlIExvYWQgU3RvcmUgVW5pdAorZXZlbnQ6MFgwMDQwIG1tY3IwOjBYMDAwMDAwMDEgbW1jcjE6MFgwMDBGMDAwMDdBNDAwMDAwIG1tY3JhOjBYMDAwMDIwMDAKK2V2ZW50OjBYMDA0MSBtbWNyMDowWDAwMDAwMDAxIG1tY3IxOjBYMDAwRjAwMDA3QTQwMDAwMCBtbWNyYTowWDAwMDAyMDAwCitldmVudDowWDAwNDIgbW1jcjA6MFgwMDAwMDAwMSBtbWNyMTowWDAwMEYwMDAwN0E0MDAwMDAgbW1jcmE6MFgwMDAwMjAwMAorZXZlbnQ6MFgwMDQzIG1tY3IwOjBYMDAwMDAwMDEgbW1jcjE6MFgwMDBGMDAwMDdBNDAwMDAwIG1tY3JhOjBYMDAwMDIwMDAKK2V2ZW50OjBYMDA0NCBtbWNyMDowWDAwMDAwMDAxIG1tY3IxOjBYMDAwRjAwMDA3QTQwMDAwMCBtbWNyYTowWDAwMDAyMDAwCitldmVudDowWDAwNDUgbW1jcjA6MFgwMDAwMDAwMSBtbWNyMTowWDAwMEYwMDAwN0E0MDAwMDAgbW1jcmE6MFgwMDAwMjAwMAorZXZlbnQ6MFgwMDQ2IG1tY3IwOjBYMDAwMDAwMDEgbW1jcjE6MFgwMDBGMDAwMDdBNDAwMDAwIG1tY3JhOjBYMDAwMDIwMDAKK2V2ZW50OjBYMDA0NyBtbWNyMDowWDAwMDAwMDAxIG1tY3IxOjBYMDAwRjAwMDA3QTQwMDAwMCBtbWNyYTowWDAwMDAyMDAwCisKKyNHcm91cCA1IHBtX2ZwdTEsIEZsb2F0aW5nIFBvaW50IGV2ZW50cworZXZlbnQ6MFgwMDUwIG1tY3IwOjBYMDAwMDAwMDEgbW1jcjE6MFgwMDAwMDAwMDAwMUUwNDgwIG1tY3JhOjBYMDAwMDIwMDAKK2V2ZW50OjBYMDA1MSBtbWNyMDowWDAwMDAwMDAxIG1tY3IxOjBYMDAwMDAwMDAwMDFFMDQ4MCBtbWNyYTowWDAwMDAyMDAwCitldmVudDowWDAwNTIgbW1jcjA6MFgwMDAwMDAwMSBtbWNyMTowWDAwMDAwMDAwMDAxRTA0ODAgbW1jcmE6MFgwMDAwMjAwMAorZXZlbnQ6MFgwMDUzIG1tY3IwOjBYMDAwMDAwMDEgbW1jcjE6MFgwMDAwMDAwMDAwMUUwNDgwIG1tY3JhOjBYMDAwMDIwMDAKK2V2ZW50OjBYMDA1NCBtbWNyMDowWDAwMDAwMDAxIG1tY3IxOjBYMDAwMDAwMDAwMDFFMDQ4MCBtbWNyYTowWDAwMDAyMDAwCitldmVudDowWDAwNTUgbW1jcjA6MFgwMDAwMDAwMSBtbWNyMTowWDAwMDAwMDAwMDAxRTA0ODAgbW1jcmE6MFgwMDAwMjAwMAorZXZlbnQ6MFgwMDU2IG1tY3IwOjBYMDAwMDAwMDEgbW1jcjE6MFgwMDAwMDAwMDAwMUUwNDgwIG1tY3JhOjBYMDAwMDIwMDAKK2V2ZW50OjBYMDA1NyBtbWNyMDowWDAwMDAwMDAxIG1tY3IxOjBYMDAwMDAwMDAwMDFFMDQ4MCBtbWNyYTowWDAwMDAyMDAwCisKKyNHcm91cCA2IHBtX2ZwdTIsIEZsb2F0aW5nIFBvaW50IGV2ZW50cworZXZlbnQ6MFgwMDYwIG1tY3IwOjBYMDAwMDAwMDEgbW1jcjE6MFgwMDAwMjBFODdBNDAwMDAwIG1tY3JhOjBYMDAwMDIwMDAKK2V2ZW50OjBYMDA2MSBtbWNyMDowWDAwMDAwMDAxIG1tY3IxOjBYMDAwMDIwRTg3QTQwMDAwMCBtbWNyYTowWDAwMDAyMDAwCitldmVudDowWDAwNjIgbW1jcjA6MFgwMDAwMDAwMSBtbWNyMTowWDAwMDAyMEU4N0E0MDAwMDAgbW1jcmE6MFgwMDAwMjAwMAorZXZlbnQ6MFgwMDYzIG1tY3IwOjBYMDAwMDAwMDEgbW1jcjE6MFgwMDAwMjBFODdBNDAwMDAwIG1tY3JhOjBYMDAwMDIwMDAKK2V2ZW50OjBYMDA2NCBtbWNyMDowWDAwMDAwMDAxIG1tY3IxOjBYMDAwMDIwRTg3QTQwMDAwMCBtbWNyYTowWDAwMDAyMDAwCitldmVudDowWDAwNjUgbW1jcjA6MFgwMDAwMDAwMSBtbWNyMTowWDAwMDAyMEU4N0E0MDAwMDAgbW1jcmE6MFgwMDAwMjAwMAorZXZlbnQ6MFgwMDY2IG1tY3IwOjBYMDAwMDAwMDEgbW1jcjE6MFgwMDAwMjBFODdBNDAwMDAwIG1tY3JhOjBYMDAwMDIwMDAKK2V2ZW50OjBYMDA2NyBtbWNyMDowWDAwMDAwMDAxIG1tY3IxOjBYMDAwMDIwRTg3QTQwMDAwMCBtbWNyYTowWDAwMDAyMDAwCisKKyNHcm91cCA3IHBtX2lzdV9yZW5hbWUsIElTVSBSZW5hbWUgUG9vbCBFdmVudHMKK2V2ZW50OjBYMDA3MCBtbWNyMDowWDAwMDAxMjI5IG1tY3IxOjBYNDAwMDAwMjE4RTZEODRCQyBtbWNyYTowWDAwMDAyMDAwCitldmVudDowWDAwNzEgbW1jcjA6MFgwMDAwMTIyOSBtbWNyMTowWDQwMDAwMDIxOEU2RDg0QkMgbW1jcmE6MFgwMDAwMjAwMAorZXZlbnQ6MFgwMDcyIG1tY3IwOjBYMDAwMDEyMjkgbW1jcjE6MFg0MDAwMDAyMThFNkQ4NEJDIG1tY3JhOjBYMDAwMDIwMDAKK2V2ZW50OjBYMDA3MyBtbWNyMDowWDAwMDAxMjI5IG1tY3IxOjBYNDAwMDAwMjE4RTZEODRCQyBtbWNyYTowWDAwMDAyMDAwCitldmVudDowWDAwNzQgbW1jcjA6MFgwMDAwMTIyOSBtbWNyMTowWDQwMDAwMDIxOEU2RDg0QkMgbW1jcmE6MFgwMDAwMjAwMAorZXZlbnQ6MFgwMDc1IG1tY3IwOjBYMDAwMDEyMjkgbW1jcjE6MFg0MDAwMDAyMThFNkQ4NEJDIG1tY3JhOjBYMDAwMDIwMDAKK2V2ZW50OjBYMDA3NiBtbWNyMDowWDAwMDAxMjI5IG1tY3IxOjBYNDAwMDAwMjE4RTZEODRCQyBtbWNyYTowWDAwMDAyMDAwCitldmVudDowWDAwNzcgbW1jcjA6MFgwMDAwMTIyOSBtbWNyMTowWDQwMDAwMDIxOEU2RDg0QkMgbW1jcmE6MFgwMDAwMjAwMAorCisjR3JvdXAgOCBwbV9pc3VfcXVldWVzMSwgSVNVIFJlbmFtZSBQb29sIEV2ZW50cworZXZlbnQ6MFgwMDgwIG1tY3IwOjBYMDAwMDEzMkYgbW1jcjE6MFg0MDAwMDAwMDg1MUU5OTRDIG1tY3JhOjBYMDAwMDIwMDAKK2V2ZW50OjBYMDA4MSBtbWNyMDowWDAwMDAxMzJGIG1tY3IxOjBYNDAwMDAwMDA4NTFFOTk0QyBtbWNyYTowWDAwMDAyMDAwCitldmVudDowWDAwODIgbW1jcjA6MFgwMDAwMTMyRiBtbWNyMTowWDQwMDAwMDAwODUxRTk5NEMgbW1jcmE6MFgwMDAwMjAwMAorZXZlbnQ6MFgwMDgzIG1tY3IwOjBYMDAwMDEzMkYgbW1jcjE6MFg0MDAwMDAwMDg1MUU5OTRDIG1tY3JhOjBYMDAwMDIwMDAKK2V2ZW50OjBYMDA4NCBtbWNyMDowWDAwMDAxMzJGIG1tY3IxOjBYNDAwMDAwMDA4NTFFOTk0QyBtbWNyYTowWDAwMDAyMDAwCitldmVudDowWDAwODUgbW1jcjA6MFgwMDAwMTMyRiBtbWNyMTowWDQwMDAwMDAwODUxRTk5NEMgbW1jcmE6MFgwMDAwMjAwMAorZXZlbnQ6MFgwMDg2IG1tY3IwOjBYMDAwMDEzMkYgbW1jcjE6MFg0MDAwMDAwMDg1MUU5OTRDIG1tY3JhOjBYMDAwMDIwMDAKK2V2ZW50OjBYMDA4NyBtbWNyMDowWDAwMDAxMzJGIG1tY3IxOjBYNDAwMDAwMDA4NTFFOTk0QyBtbWNyYTowWDAwMDAyMDAwCisKKyNHcm91cCA5IHBtX2lzdV9mbG93LCBJU1UgSW5zdHJ1Y3Rpb24gRmxvdyBFdmVudHMKK2V2ZW50OjBYMDA5MCBtbWNyMDowWDAwMDAxODFGIG1tY3IxOjBYNDAwMDAwQjNEN0I3QzRCQyBtbWNyYTowWDAwMDAyMDAwCitldmVudDowWDAwOTEgbW1jcjA6MFgwMDAwMTgxRiBtbWNyMTowWDQwMDAwMEIzRDdCN0M0QkMgbW1jcmE6MFgwMDAwMjAwMAorZXZlbnQ6MFgwMDkyIG1tY3IwOjBYMDAwMDE4MUYgbW1jcjE6MFg0MDAwMDBCM0Q3QjdDNEJDIG1tY3JhOjBYMDAwMDIwMDAKK2V2ZW50OjBYMDA5MyBtbWNyMDowWDAwMDAxODFGIG1tY3IxOjBYNDAwMDAwQjNEN0I3QzRCQyBtbWNyYTowWDAwMDAyMDAwCitldmVudDowWDAwOTQgbW1jcjA6MFgwMDAwMTgxRiBtbWNyMTowWDQwMDAwMEIzRDdCN0M0QkMgbW1jcmE6MFgwMDAwMjAwMAorZXZlbnQ6MFgwMDk1IG1tY3IwOjBYMDAwMDE4MUYgbW1jcjE6MFg0MDAwMDBCM0Q3QjdDNEJDIG1tY3JhOjBYMDAwMDIwMDAKK2V2ZW50OjBYMDA5NiBtbWNyMDowWDAwMDAxODFGIG1tY3IxOjBYNDAwMDAwQjNEN0I3QzRCQyBtbWNyYTowWDAwMDAyMDAwCitldmVudDowWDAwOTcgbW1jcjA6MFgwMDAwMTgxRiBtbWNyMTowWDQwMDAwMEIzRDdCN0M0QkMgbW1jcmE6MFgwMDAwMjAwMAorCisjR3JvdXAgMTAgcG1faXN1X3dvcmssIElTVSBJbmRpY2F0b3JzIG9mIFdvcmsgQmxvY2thZ2UKK2V2ZW50OjBYMDBBMCBtbWNyMDowWDAwMDAwNDAzIG1tY3IxOjBYNDAwMDAwMDUwRkRFOUQ4OCBtbWNyYTowWDAwMDAyMDAwCitldmVudDowWDAwQTEgbW1jcjA6MFgwMDAwMDQwMyBtbWNyMTowWDQwMDAwMDA1MEZERTlEODggbW1jcmE6MFgwMDAwMjAwMAorZXZlbnQ6MFgwMEEyIG1tY3IwOjBYMDAwMDA0MDMgbW1jcjE6MFg0MDAwMDAwNTBGREU5RDg4IG1tY3JhOjBYMDAwMDIwMDAKK2V2ZW50OjBYMDBBMyBtbWNyMDowWDAwMDAwNDAzIG1tY3IxOjBYNDAwMDAwMDUwRkRFOUQ4OCBtbWNyYTowWDAwMDAyMDAwCitldmVudDowWDAwQTQgbW1jcjA6MFgwMDAwMDQwMyBtbWNyMTowWDQwMDAwMDA1MEZERTlEODggbW1jcmE6MFgwMDAwMjAwMAorZXZlbnQ6MFgwMEE1IG1tY3IwOjBYMDAwMDA0MDMgbW1jcjE6MFg0MDAwMDAwNTBGREU5RDg4IG1tY3JhOjBYMDAwMDIwMDAKK2V2ZW50OjBYMDBBNiBtbWNyMDowWDAwMDAwNDAzIG1tY3IxOjBYNDAwMDAwMDUwRkRFOUQ4OCBtbWNyYTowWDAwMDAyMDAwCitldmVudDowWDAwQTcgbW1jcjA6MFgwMDAwMDQwMyBtbWNyMTowWDQwMDAwMDA1MEZERTlEODggbW1jcmE6MFgwMDAwMjAwMAorCisjR3JvdXAgMTEgcG1fZnB1MywgRmxvYXRpbmcgUG9pbnQgZXZlbnRzIGJ5IHVuaXQKK2V2ZW50OjBYMDBCMCBtbWNyMDowWDAwMDAxMDI5IG1tY3IxOjBYMDAwMDAwMDA4RDYzNTRCQyBtbWNyYTowWDAwMDAyMDAwCitldmVudDowWDAwQjEgbW1jcjA6MFgwMDAwMTAyOSBtbWNyMTowWDAwMDAwMDAwOEQ2MzU0QkMgbW1jcmE6MFgwMDAwMjAwMAorZXZlbnQ6MFgwMEIyIG1tY3IwOjBYMDAwMDEwMjkgbW1jcjE6MFgwMDAwMDAwMDhENjM1NEJDIG1tY3JhOjBYMDAwMDIwMDAKK2V2ZW50OjBYMDBCMyBtbWNyMDowWDAwMDAxMDI5IG1tY3IxOjBYMDAwMDAwMDA4RDYzNTRCQyBtbWNyYTowWDAwMDAyMDAwCitldmVudDowWDAwQjQgbW1jcjA6MFgwMDAwMTAyOSBtbWNyMTowWDAwMDAwMDAwOEQ2MzU0QkMgbW1jcmE6MFgwMDAwMjAwMAorZXZlbnQ6MFgwMEI1IG1tY3IwOjBYMDAwMDEwMjkgbW1jcjE6MFgwMDAwMDAwMDhENjM1NEJDIG1tY3JhOjBYMDAwMDIwMDAKK2V2ZW50OjBYMDBCNiBtbWNyMDowWDAwMDAxMDI5IG1tY3IxOjBYMDAwMDAwMDA4RDYzNTRCQyBtbWNyYTowWDAwMDAyMDAwCitldmVudDowWDAwQjcgbW1jcjA6MFgwMDAwMTAyOSBtbWNyMTowWDAwMDAwMDAwOEQ2MzU0QkMgbW1jcmE6MFgwMDAwMjAwMAorCisjR3JvdXAgMTIgcG1fZnB1NCwgRmxvYXRpbmcgUG9pbnQgZXZlbnRzIGJ5IHVuaXQKK2V2ZW50OjBYMDBDMCBtbWNyMDowWDAwMDAxMjJEIG1tY3IxOjBYMDAwMDAwMDA5REU3NzRCQyBtbWNyYTowWDAwMDAyMDAwCitldmVudDowWDAwQzEgbW1jcjA6MFgwMDAwMTIyRCBtbWNyMTowWDAwMDAwMDAwOURFNzc0QkMgbW1jcmE6MFgwMDAwMjAwMAorZXZlbnQ6MFgwMEMyIG1tY3IwOjBYMDAwMDEyMkQgbW1jcjE6MFgwMDAwMDAwMDlERTc3NEJDIG1tY3JhOjBYMDAwMDIwMDAKK2V2ZW50OjBYMDBDMyBtbWNyMDowWDAwMDAxMjJEIG1tY3IxOjBYMDAwMDAwMDA5REU3NzRCQyBtbWNyYTowWDAwMDAyMDAwCitldmVudDowWDAwQzQgbW1jcjA6MFgwMDAwMTIyRCBtbWNyMTowWDAwMDAwMDAwOURFNzc0QkMgbW1jcmE6MFgwMDAwMjAwMAorZXZlbnQ6MFgwMEM1IG1tY3IwOjBYMDAwMDEyMkQgbW1jcjE6MFgwMDAwMDAwMDlERTc3NEJDIG1tY3JhOjBYMDAwMDIwMDAKK2V2ZW50OjBYMDBDNiBtbWNyMDowWDAwMDAxMjJEIG1tY3IxOjBYMDAwMDAwMDA5REU3NzRCQyBtbWNyYTowWDAwMDAyMDAwCitldmVudDowWDAwQzcgbW1jcjA6MFgwMDAwMTIyRCBtbWNyMTowWDAwMDAwMDAwOURFNzc0QkMgbW1jcmE6MFgwMDAwMjAwMAorCisjR3JvdXAgMTMgcG1fZnB1NSwgRmxvYXRpbmcgUG9pbnQgZXZlbnRzIGJ5IHVuaXQKK2V2ZW50OjBYMDBEMCBtbWNyMDowWDAwMDAxODM5IG1tY3IxOjBYMDAwMDAwQzA4NTFFOTk1OCBtbWNyYTowWDAwMDAyMDAwCitldmVudDowWDAwRDEgbW1jcjA6MFgwMDAwMTgzOSBtbWNyMTowWDAwMDAwMEMwODUxRTk5NTggbW1jcmE6MFgwMDAwMjAwMAorZXZlbnQ6MFgwMEQyIG1tY3IwOjBYMDAwMDE4MzkgbW1jcjE6MFgwMDAwMDBDMDg1MUU5OTU4IG1tY3JhOjBYMDAwMDIwMDAKK2V2ZW50OjBYMDBEMyBtbWNyMDowWDAwMDAxODM5IG1tY3IxOjBYMDAwMDAwQzA4NTFFOTk1OCBtbWNyYTowWDAwMDAyMDAwCitldmVudDowWDAwRDQgbW1jcjA6MFgwMDAwMTgzOSBtbWNyMTowWDAwMDAwMEMwODUxRTk5NTggbW1jcmE6MFgwMDAwMjAwMAorZXZlbnQ6MFgwMEQ1IG1tY3IwOjBYMDAwMDE4MzkgbW1jcjE6MFgwMDAwMDBDMDg1MUU5OTU4IG1tY3JhOjBYMDAwMDIwMDAKK2V2ZW50OjBYMDBENiBtbWNyMDowWDAwMDAxODM5IG1tY3IxOjBYMDAwMDAwQzA4NTFFOTk1OCBtbWNyYTowWDAwMDAyMDAwCitldmVudDowWDAwRDcgbW1jcjA6MFgwMDAwMTgzOSBtbWNyMTowWDAwMDAwMEMwODUxRTk5NTggbW1jcmE6MFgwMDAwMjAwMAorCisjR3JvdXAgMTQgcG1fZnB1NywgRmxvYXRpbmcgUG9pbnQgZXZlbnRzIGJ5IHVuaXQKK2V2ZW50OjBYMDBFMCBtbWNyMDowWDAwMDAxOTNCIG1tY3IxOjBYMDAwMDAwQzg5RERFOTdFMCBtbWNyYTowWDAwMDAyMDAwCitldmVudDowWDAwRTEgbW1jcjA6MFgwMDAwMTkzQiBtbWNyMTowWDAwMDAwMEM4OURERTk3RTAgbW1jcmE6MFgwMDAwMjAwMAorZXZlbnQ6MFgwMEUyIG1tY3IwOjBYMDAwMDE5M0IgbW1jcjE6MFgwMDAwMDBDODlEREU5N0UwIG1tY3JhOjBYMDAwMDIwMDAKK2V2ZW50OjBYMDBFMyBtbWNyMDowWDAwMDAxOTNCIG1tY3IxOjBYMDAwMDAwQzg5RERFOTdFMCBtbWNyYTowWDAwMDAyMDAwCitldmVudDowWDAwRTQgbW1jcjA6MFgwMDAwMTkzQiBtbWNyMTowWDAwMDAwMEM4OURERTk3RTAgbW1jcmE6MFgwMDAwMjAwMAorZXZlbnQ6MFgwMEU1IG1tY3IwOjBYMDAwMDE5M0IgbW1jcjE6MFgwMDAwMDBDODlEREU5N0UwIG1tY3JhOjBYMDAwMDIwMDAKK2V2ZW50OjBYMDBFNiBtbWNyMDowWDAwMDAxOTNCIG1tY3IxOjBYMDAwMDAwQzg5RERFOTdFMCBtbWNyYTowWDAwMDAyMDAwCitldmVudDowWDAwRTcgbW1jcjA6MFgwMDAwMTkzQiBtbWNyMTowWDAwMDAwMEM4OURERTk3RTAgbW1jcmE6MFgwMDAwMjAwMAorCisjR3JvdXAgMTUgcG1fbHN1X2ZsdXNoLCBMU1UgRmx1c2ggRXZlbnRzCitldmVudDowWDAwRjAgbW1jcjA6MFgwMDAwMTIyRCBtbWNyMTowWDAwMEMwMDAwN0JFNzc0QkMgbW1jcmE6MFgwMDAwMjAwMAorZXZlbnQ6MFgwMEYxIG1tY3IwOjBYMDAwMDEyMkQgbW1jcjE6MFgwMDBDMDAwMDdCRTc3NEJDIG1tY3JhOjBYMDAwMDIwMDAKK2V2ZW50OjBYMDBGMiBtbWNyMDowWDAwMDAxMjJEIG1tY3IxOjBYMDAwQzAwMDA3QkU3NzRCQyBtbWNyYTowWDAwMDAyMDAwCitldmVudDowWDAwRjMgbW1jcjA6MFgwMDAwMTIyRCBtbWNyMTowWDAwMEMwMDAwN0JFNzc0QkMgbW1jcmE6MFgwMDAwMjAwMAorZXZlbnQ6MFgwMEY0IG1tY3IwOjBYMDAwMDEyMkQgbW1jcjE6MFgwMDBDMDAwMDdCRTc3NEJDIG1tY3JhOjBYMDAwMDIwMDAKK2V2ZW50OjBYMDBGNSBtbWNyMDowWDAwMDAxMjJEIG1tY3IxOjBYMDAwQzAwMDA3QkU3NzRCQyBtbWNyYTowWDAwMDAyMDAwCitldmVudDowWDAwRjYgbW1jcjA6MFgwMDAwMTIyRCBtbWNyMTowWDAwMEMwMDAwN0JFNzc0QkMgbW1jcmE6MFgwMDAwMjAwMAorZXZlbnQ6MFgwMEY3IG1tY3IwOjBYMDAwMDEyMkQgbW1jcjE6MFgwMDBDMDAwMDdCRTc3NEJDIG1tY3JhOjBYMDAwMDIwMDAKKworI0dyb3VwIDE2IHBtX2xzdV9sb2FkMSwgTFNVIExvYWQgRXZlbnRzCitldmVudDowWDAxMDAgbW1jcjA6MFgwMDAwMTAyOSBtbWNyMTowWDAwMEYwMDAwODUxRTk5NTggbW1jcmE6MFgwMDAwMjAwMAorZXZlbnQ6MFgwMTAxIG1tY3IwOjBYMDAwMDEwMjkgbW1jcjE6MFgwMDBGMDAwMDg1MUU5OTU4IG1tY3JhOjBYMDAwMDIwMDAKK2V2ZW50OjBYMDEwMiBtbWNyMDowWDAwMDAxMDI5IG1tY3IxOjBYMDAwRjAwMDA4NTFFOTk1OCBtbWNyYTowWDAwMDAyMDAwCitldmVudDowWDAxMDMgbW1jcjA6MFgwMDAwMTAyOSBtbWNyMTowWDAwMEYwMDAwODUxRTk5NTggbW1jcmE6MFgwMDAwMjAwMAorZXZlbnQ6MFgwMTA0IG1tY3IwOjBYMDAwMDEwMjkgbW1jcjE6MFgwMDBGMDAwMDg1MUU5OTU4IG1tY3JhOjBYMDAwMDIwMDAKK2V2ZW50OjBYMDEwNSBtbWNyMDowWDAwMDAxMDI5IG1tY3IxOjBYMDAwRjAwMDA4NTFFOTk1OCBtbWNyYTowWDAwMDAyMDAwCitldmVudDowWDAxMDYgbW1jcjA6MFgwMDAwMTAyOSBtbWNyMTowWDAwMEYwMDAwODUxRTk5NTggbW1jcmE6MFgwMDAwMjAwMAorZXZlbnQ6MFgwMTA3IG1tY3IwOjBYMDAwMDEwMjkgbW1jcjE6MFgwMDBGMDAwMDg1MUU5OTU4IG1tY3JhOjBYMDAwMDIwMDAKKworI0dyb3VwIDE3IHBtX2xzdV9zdG9yZTEsIExTVSBTdG9yZSBFdmVudHMKK2V2ZW50OjBYMDExMCBtbWNyMDowWDAwMDAxMTJCIG1tY3IxOjBYMDAwRjAwMDA4RDVFOTlEQyBtbWNyYTowWDAwMDAyMDAwCitldmVudDowWDAxMTEgbW1jcjA6MFgwMDAwMTEyQiBtbWNyMTowWDAwMEYwMDAwOEQ1RTk5REMgbW1jcmE6MFgwMDAwMjAwMAorZXZlbnQ6MFgwMTEyIG1tY3IwOjBYMDAwMDExMkIgbW1jcjE6MFgwMDBGMDAwMDhENUU5OURDIG1tY3JhOjBYMDAwMDIwMDAKK2V2ZW50OjBYMDExMyBtbWNyMDowWDAwMDAxMTJCIG1tY3IxOjBYMDAwRjAwMDA4RDVFOTlEQyBtbWNyYTowWDAwMDAyMDAwCitldmVudDowWDAxMTQgbW1jcjA6MFgwMDAwMTEyQiBtbWNyMTowWDAwMEYwMDAwOEQ1RTk5REMgbW1jcmE6MFgwMDAwMjAwMAorZXZlbnQ6MFgwMTE1IG1tY3IwOjBYMDAwMDExMkIgbW1jcjE6MFgwMDBGMDAwMDhENUU5OURDIG1tY3JhOjBYMDAwMDIwMDAKK2V2ZW50OjBYMDExNiBtbWNyMDowWDAwMDAxMTJCIG1tY3IxOjBYMDAwRjAwMDA4RDVFOTlEQyBtbWNyYTowWDAwMDAyMDAwCitldmVudDowWDAxMTcgbW1jcjA6MFgwMDAwMTEyQiBtbWNyMTowWDAwMEYwMDAwOEQ1RTk5REMgbW1jcmE6MFgwMDAwMjAwMAorCisjR3JvdXAgMTggcG1fbHN1X3N0b3JlMiwgTFNVIFN0b3JlIEV2ZW50cworZXZlbnQ6MFgwMTIwIG1tY3IwOjBYMDAwMDE4MzkgbW1jcjE6MFgwMDAzQzBEMDhENzZGNEJDIG1tY3JhOjBYMDAwMDIwMDAKK2V2ZW50OjBYMDEyMSBtbWNyMDowWDAwMDAxODM5IG1tY3IxOjBYMDAwM0MwRDA4RDc2RjRCQyBtbWNyYTowWDAwMDAyMDAwCitldmVudDowWDAxMjIgbW1jcjA6MFgwMDAwMTgzOSBtbWNyMTowWDAwMDNDMEQwOEQ3NkY0QkMgbW1jcmE6MFgwMDAwMjAwMAorZXZlbnQ6MFgwMTIzIG1tY3IwOjBYMDAwMDE4MzkgbW1jcjE6MFgwMDAzQzBEMDhENzZGNEJDIG1tY3JhOjBYMDAwMDIwMDAKK2V2ZW50OjBYMDEyNCBtbWNyMDowWDAwMDAxODM5IG1tY3IxOjBYMDAwM0MwRDA4RDc2RjRCQyBtbWNyYTowWDAwMDAyMDAwCitldmVudDowWDAxMjUgbW1jcjA6MFgwMDAwMTgzOSBtbWNyMTowWDAwMDNDMEQwOEQ3NkY0QkMgbW1jcmE6MFgwMDAwMjAwMAorZXZlbnQ6MFgwMTI2IG1tY3IwOjBYMDAwMDE4MzkgbW1jcjE6MFgwMDAzQzBEMDhENzZGNEJDIG1tY3JhOjBYMDAwMDIwMDAKK2V2ZW50OjBYMDEyNyBtbWNyMDowWDAwMDAxODM5IG1tY3IxOjBYMDAwM0MwRDA4RDc2RjRCQyBtbWNyYTowWDAwMDAyMDAwCisKKyNHcm91cCAxOSBwbV9sc3U3LCBJbmZvcm1hdGlvbiBvbiB0aGUgTG9hZCBTdG9yZSBVbml0CitldmVudDowWDAxMzAgbW1jcjA6MFgwMDAwMTIyRCBtbWNyMTowWDAwMDgzMDA0N0JEMkZFM0MgbW1jcmE6MFgwMDAwMjAwMAorZXZlbnQ6MFgwMTMxIG1tY3IwOjBYMDAwMDEyMkQgbW1jcjE6MFgwMDA4MzAwNDdCRDJGRTNDIG1tY3JhOjBYMDAwMDIwMDAKK2V2ZW50OjBYMDEzMiBtbWNyMDowWDAwMDAxMjJEIG1tY3IxOjBYMDAwODMwMDQ3QkQyRkUzQyBtbWNyYTowWDAwMDAyMDAwCitldmVudDowWDAxMzMgbW1jcjA6MFgwMDAwMTIyRCBtbWNyMTowWDAwMDgzMDA0N0JEMkZFM0MgbW1jcmE6MFgwMDAwMjAwMAorZXZlbnQ6MFgwMTM0IG1tY3IwOjBYMDAwMDEyMkQgbW1jcjE6MFgwMDA4MzAwNDdCRDJGRTNDIG1tY3JhOjBYMDAwMDIwMDAKK2V2ZW50OjBYMDEzNSBtbWNyMDowWDAwMDAxMjJEIG1tY3IxOjBYMDAwODMwMDQ3QkQyRkUzQyBtbWNyYTowWDAwMDAyMDAwCitldmVudDowWDAxMzYgbW1jcjA6MFgwMDAwMTIyRCBtbWNyMTowWDAwMDgzMDA0N0JEMkZFM0MgbW1jcmE6MFgwMDAwMjAwMAorZXZlbnQ6MFgwMTM3IG1tY3IwOjBYMDAwMDEyMkQgbW1jcjE6MFgwMDA4MzAwNDdCRDJGRTNDIG1tY3JhOjBYMDAwMDIwMDAKKworI0dyb3VwIDIwIHBtX21pc2MsIE1pc2MgRXZlbnRzIGZvciB0ZXN0aW5nCitldmVudDowWDAxNDAgbW1jcjA6MFgwMDAwMDQwNSBtbWNyMTowWDAwMDAwMDAwMjNDNjkxOTQgbW1jcmE6MFgwMDAwMjAwMAorZXZlbnQ6MFgwMTQxIG1tY3IwOjBYMDAwMDA0MDUgbW1jcjE6MFgwMDAwMDAwMDIzQzY5MTk0IG1tY3JhOjBYMDAwMDIwMDAKK2V2ZW50OjBYMDE0MiBtbWNyMDowWDAwMDAwNDA1IG1tY3IxOjBYMDAwMDAwMDAyM0M2OTE5NCBtbWNyYTowWDAwMDAyMDAwCitldmVudDowWDAxNDMgbW1jcjA6MFgwMDAwMDQwNSBtbWNyMTowWDAwMDAwMDAwMjNDNjkxOTQgbW1jcmE6MFgwMDAwMjAwMAorZXZlbnQ6MFgwMTQ0IG1tY3IwOjBYMDAwMDA0MDUgbW1jcjE6MFgwMDAwMDAwMDIzQzY5MTk0IG1tY3JhOjBYMDAwMDIwMDAKK2V2ZW50OjBYMDE0NSBtbWNyMDowWDAwMDAwNDA1IG1tY3IxOjBYMDAwMDAwMDAyM0M2OTE5NCBtbWNyYTowWDAwMDAyMDAwCitldmVudDowWDAxNDYgbW1jcjA6MFgwMDAwMDQwNSBtbWNyMTowWDAwMDAwMDAwMjNDNjkxOTQgbW1jcmE6MFgwMDAwMjAwMAorZXZlbnQ6MFgwMTQ3IG1tY3IwOjBYMDAwMDA0MDUgbW1jcjE6MFgwMDAwMDAwMDIzQzY5MTk0IG1tY3JhOjBYMDAwMDIwMDAKKworI0dyb3VwIDIxIHBtX3BlX2JlbmNoMSwgUEUgQmVuY2htYXJrZXIgZ3JvdXAgZm9yIEZQIGFuYWx5c2lzCitldmVudDowWDAxNTAgbW1jcjA6MFgwMDAwMDAwMSBtbWNyMTowWDEwMDAxMDAyMDAxRTA0ODAgbW1jcmE6MFgwMDAwMjAwMAorZXZlbnQ6MFgwMTUxIG1tY3IwOjBYMDAwMDAwMDEgbW1jcjE6MFgxMDAwMTAwMjAwMUUwNDgwIG1tY3JhOjBYMDAwMDIwMDAKK2V2ZW50OjBYMDE1MiBtbWNyMDowWDAwMDAwMDAxIG1tY3IxOjBYMTAwMDEwMDIwMDFFMDQ4MCBtbWNyYTowWDAwMDAyMDAwCitldmVudDowWDAxNTMgbW1jcjA6MFgwMDAwMDAwMSBtbWNyMTowWDEwMDAxMDAyMDAxRTA0ODAgbW1jcmE6MFgwMDAwMjAwMAorZXZlbnQ6MFgwMTU0IG1tY3IwOjBYMDAwMDAwMDEgbW1jcjE6MFgxMDAwMTAwMjAwMUUwNDgwIG1tY3JhOjBYMDAwMDIwMDAKK2V2ZW50OjBYMDE1NSBtbWNyMDowWDAwMDAwMDAxIG1tY3IxOjBYMTAwMDEwMDIwMDFFMDQ4MCBtbWNyYTowWDAwMDAyMDAwCitldmVudDowWDAxNTYgbW1jcjA6MFgwMDAwMDAwMSBtbWNyMTowWDEwMDAxMDAyMDAxRTA0ODAgbW1jcmE6MFgwMDAwMjAwMAorZXZlbnQ6MFgwMTU3IG1tY3IwOjBYMDAwMDAwMDEgbW1jcjE6MFgxMDAwMTAwMjAwMUUwNDgwIG1tY3JhOjBYMDAwMDIwMDAKKworI0dyb3VwIDIyIHBtX3BlX2JlbmNoNCwgUEUgQmVuY2htYXJrZXIgZ3JvdXAgZm9yIEwxIGFuZCBUTEIKK2V2ZW50OjBYMDE2MCBtbWNyMDowWDAwMDAxNDIxIG1tY3IxOjBYMDAwQjAwMDAwNERFOTAwMCBtbWNyYTowWDAwMDAyMDAwCitldmVudDowWDAxNjEgbW1jcjA6MFgwMDAwMTQyMSBtbWNyMTowWDAwMEIwMDAwMDRERTkwMDAgbW1jcmE6MFgwMDAwMjAwMAorZXZlbnQ6MFgwMTYyIG1tY3IwOjBYMDAwMDE0MjEgbW1jcjE6MFgwMDBCMDAwMDA0REU5MDAwIG1tY3JhOjBYMDAwMDIwMDAKK2V2ZW50OjBYMDE2MyBtbWNyMDowWDAwMDAxNDIxIG1tY3IxOjBYMDAwQjAwMDAwNERFOTAwMCBtbWNyYTowWDAwMDAyMDAwCitldmVudDowWDAxNjQgbW1jcjA6MFgwMDAwMTQyMSBtbWNyMTowWDAwMEIwMDAwMDRERTkwMDAgbW1jcmE6MFgwMDAwMjAwMAorZXZlbnQ6MFgwMTY1IG1tY3IwOjBYMDAwMDE0MjEgbW1jcjE6MFgwMDBCMDAwMDA0REU5MDAwIG1tY3JhOjBYMDAwMDIwMDAKK2V2ZW50OjBYMDE2NiBtbWNyMDowWDAwMDAxNDIxIG1tY3IxOjBYMDAwQjAwMDAwNERFOTAwMCBtbWNyYTowWDAwMDAyMDAwCitldmVudDowWDAxNjcgbW1jcjA6MFgwMDAwMTQyMSBtbWNyMTowWDAwMEIwMDAwMDRERTkwMDAgbW1jcmE6MFgwMDAwMjAwMAorCisjR3JvdXAgMjMgcG1faHBtY291bnQxLCBIcG1jb3VudCBncm91cCBmb3IgTDEgYW5kIFRMQiBiZWhhdmlvcgorZXZlbnQ6MFgwMTcwIG1tY3IwOjBYMDAwMDE0MDUgbW1jcjE6MFgwMDBCMDAwMDA0REU5MDAwIG1tY3JhOjBYMDAwMDIwMDAKK2V2ZW50OjBYMDE3MSBtbWNyMDowWDAwMDAxNDA1IG1tY3IxOjBYMDAwQjAwMDAwNERFOTAwMCBtbWNyYTowWDAwMDAyMDAwCitldmVudDowWDAxNzIgbW1jcjA6MFgwMDAwMTQwNSBtbWNyMTowWDAwMEIwMDAwMDRERTkwMDAgbW1jcmE6MFgwMDAwMjAwMAorZXZlbnQ6MFgwMTczIG1tY3IwOjBYMDAwMDE0MDUgbW1jcjE6MFgwMDBCMDAwMDA0REU5MDAwIG1tY3JhOjBYMDAwMDIwMDAKK2V2ZW50OjBYMDE3NCBtbWNyMDowWDAwMDAxNDA1IG1tY3IxOjBYMDAwQjAwMDAwNERFOTAwMCBtbWNyYTowWDAwMDAyMDAwCitldmVudDowWDAxNzUgbW1jcjA6MFgwMDAwMTQwNSBtbWNyMTowWDAwMEIwMDAwMDRERTkwMDAgbW1jcmE6MFgwMDAwMjAwMAorZXZlbnQ6MFgwMTc2IG1tY3IwOjBYMDAwMDE0MDUgbW1jcjE6MFgwMDBCMDAwMDA0REU5MDAwIG1tY3JhOjBYMDAwMDIwMDAKK2V2ZW50OjBYMDE3NyBtbWNyMDowWDAwMDAxNDA1IG1tY3IxOjBYMDAwQjAwMDAwNERFOTAwMCBtbWNyYTowWDAwMDAyMDAwCisKKyNHcm91cCAyNCBwbV9ocG1jb3VudDIsIEhwbWNvdW50IGdyb3VwIGZvciBjb21wdXRhdGlvbgorZXZlbnQ6MFgwMTgwIG1tY3IwOjBYMDAwMDAwMDEgbW1jcjE6MFgwMDAwMjAyODlEREUwNDgwIG1tY3JhOjBYMDAwMDIwMDAKK2V2ZW50OjBYMDE4MSBtbWNyMDowWDAwMDAwMDAxIG1tY3IxOjBYMDAwMDIwMjg5RERFMDQ4MCBtbWNyYTowWDAwMDAyMDAwCitldmVudDowWDAxODIgbW1jcjA6MFgwMDAwMDAwMSBtbWNyMTowWDAwMDAyMDI4OURERTA0ODAgbW1jcmE6MFgwMDAwMjAwMAorZXZlbnQ6MFgwMTgzIG1tY3IwOjBYMDAwMDAwMDEgbW1jcjE6MFgwMDAwMjAyODlEREUwNDgwIG1tY3JhOjBYMDAwMDIwMDAKK2V2ZW50OjBYMDE4NCBtbWNyMDowWDAwMDAwMDAxIG1tY3IxOjBYMDAwMDIwMjg5RERFMDQ4MCBtbWNyYTowWDAwMDAyMDAwCitldmVudDowWDAxODUgbW1jcjA6MFgwMDAwMDAwMSBtbWNyMTowWDAwMDAyMDI4OURERTA0ODAgbW1jcmE6MFgwMDAwMjAwMAorZXZlbnQ6MFgwMTg2IG1tY3IwOjBYMDAwMDAwMDEgbW1jcjE6MFgwMDAwMjAyODlEREUwNDgwIG1tY3JhOjBYMDAwMDIwMDAKK2V2ZW50OjBYMDE4NyBtbWNyMDowWDAwMDAwMDAxIG1tY3IxOjBYMDAwMDIwMjg5RERFMDQ4MCBtbWNyYTowWDAwMDAyMDAwCisKKyNHcm91cCAyNSBwbV9sMWFuZGJyLCBMMSBtaXNzZXMgYW5kIGJyYW5jaCBtaXNzcHJlZGljdCBhbmFseXNpcworZXZlbnQ6MFgwMTkwIG1tY3IwOjBYMDAwMDA5MUYgbW1jcjE6MFg4MDAzQzAxRDA2NzZGRDZDIG1tY3JhOjBYMDAwMDIwMDAKK2V2ZW50OjBYMDE5MSBtbWNyMDowWDAwMDAwOTFGIG1tY3IxOjBYODAwM0MwMUQwNjc2RkQ2QyBtbWNyYTowWDAwMDAyMDAwCitldmVudDowWDAxOTIgbW1jcjA6MFgwMDAwMDkxRiBtbWNyMTowWDgwMDNDMDFEMDY3NkZENkMgbW1jcmE6MFgwMDAwMjAwMAorZXZlbnQ6MFgwMTkzIG1tY3IwOjBYMDAwMDA5MUYgbW1jcjE6MFg4MDAzQzAxRDA2NzZGRDZDIG1tY3JhOjBYMDAwMDIwMDAKK2V2ZW50OjBYMDE5NCBtbWNyMDowWDAwMDAwOTFGIG1tY3IxOjBYODAwM0MwMUQwNjc2RkQ2QyBtbWNyYTowWDAwMDAyMDAwCitldmVudDowWDAxOTUgbW1jcjA6MFgwMDAwMDkxRiBtbWNyMTowWDgwMDNDMDFEMDY3NkZENkMgbW1jcmE6MFgwMDAwMjAwMAorZXZlbnQ6MFgwMTk2IG1tY3IwOjBYMDAwMDA5MUYgbW1jcjE6MFg4MDAzQzAxRDA2NzZGRDZDIG1tY3JhOjBYMDAwMDIwMDAKK2V2ZW50OjBYMDE5NyBtbWNyMDowWDAwMDAwOTFGIG1tY3IxOjBYODAwM0MwMUQwNjc2RkQ2QyBtbWNyYTowWDAwMDAyMDAwCisKKyNHcm91cCAyNiBwbV9pbWl4LCBJbnN0cnVjdGlvbiBtaXg6IGxvYWRzLCBzdG9yZXMgYW5kIGJyYW5jaGVzCitldmVudDowWDAxQTAgbW1jcjA6MFgwMDAwMDkxRiBtbWNyMTowWDgwMDNDMDIxMDY1RkIwMDAgbW1jcmE6MFgwMDAwMjAwMAorZXZlbnQ6MFgwMUExIG1tY3IwOjBYMDAwMDA5MUYgbW1jcjE6MFg4MDAzQzAyMTA2NUZCMDAwIG1tY3JhOjBYMDAwMDIwMDAKK2V2ZW50OjBYMDFBMiBtbWNyMDowWDAwMDAwOTFGIG1tY3IxOjBYODAwM0MwMjEwNjVGQjAwMCBtbWNyYTowWDAwMDAyMDAwCitldmVudDowWDAxQTMgbW1jcjA6MFgwMDAwMDkxRiBtbWNyMTowWDgwMDNDMDIxMDY1RkIwMDAgbW1jcmE6MFgwMDAwMjAwMAorZXZlbnQ6MFgwMUE0IG1tY3IwOjBYMDAwMDA5MUYgbW1jcjE6MFg4MDAzQzAyMTA2NUZCMDAwIG1tY3JhOjBYMDAwMDIwMDAKK2V2ZW50OjBYMDFBNSBtbWNyMDowWDAwMDAwOTFGIG1tY3IxOjBYODAwM0MwMjEwNjVGQjAwMCBtbWNyYTowWDAwMDAyMDAwCitldmVudDowWDAxQTYgbW1jcjA6MFgwMDAwMDkxRiBtbWNyMTowWDgwMDNDMDIxMDY1RkIwMDAgbW1jcmE6MFgwMDAwMjAwMAorZXZlbnQ6MFgwMUE3IG1tY3IwOjBYMDAwMDA5MUYgbW1jcjE6MFg4MDAzQzAyMTA2NUZCMDAwIG1tY3JhOjBYMDAwMDIwMDAKKworI0dyb3VwIDI3IHBtX2JyYW5jaCwgU0xCIGFuZCBicmFuY2ggbWlzc3ByZWRpY3QgYW5hbHlzaXMKK2V2ZW50OjBYMDFCMCBtbWNyMDowWDAwMDAwNTJCIG1tY3IxOjBYODAwODAwMEJDRUEyRjRFQyBtbWNyYTowWDAwMDAyMDAwCitldmVudDowWDAxQjEgbW1jcjA6MFgwMDAwMDUyQiBtbWNyMTowWDgwMDgwMDBCQ0VBMkY0RUMgbW1jcmE6MFgwMDAwMjAwMAorZXZlbnQ6MFgwMUIyIG1tY3IwOjBYMDAwMDA1MkIgbW1jcjE6MFg4MDA4MDAwQkNFQTJGNEVDIG1tY3JhOjBYMDAwMDIwMDAKK2V2ZW50OjBYMDFCMyBtbWNyMDowWDAwMDAwNTJCIG1tY3IxOjBYODAwODAwMEJDRUEyRjRFQyBtbWNyYTowWDAwMDAyMDAwCitldmVudDowWDAxQjQgbW1jcjA6MFgwMDAwMDUyQiBtbWNyMTowWDgwMDgwMDBCQ0VBMkY0RUMgbW1jcmE6MFgwMDAwMjAwMAorZXZlbnQ6MFgwMUI1IG1tY3IwOjBYMDAwMDA1MkIgbW1jcjE6MFg4MDA4MDAwQkNFQTJGNEVDIG1tY3JhOjBYMDAwMDIwMDAKK2V2ZW50OjBYMDFCNiBtbWNyMDowWDAwMDAwNTJCIG1tY3IxOjBYODAwODAwMEJDRUEyRjRFQyBtbWNyYTowWDAwMDAyMDAwCitldmVudDowWDAxQjcgbW1jcjA6MFgwMDAwMDUyQiBtbWNyMTowWDgwMDgwMDBCQ0VBMkY0RUMgbW1jcmE6MFgwMDAwMjAwMAorCisjR3JvdXAgMjggcG1fZGF0YSwgZGF0YSBzb3VyY2UgYW5kIExNUQorZXZlbnQ6MFgwMUMwIG1tY3IwOjBYMDAwMDA3MEYgbW1jcjE6MFgwMDAwMzAwQzRCRDJGRjc0IG1tY3JhOjBYMDAwMDIwMDAKK2V2ZW50OjBYMDFDMSBtbWNyMDowWDAwMDAwNzBGIG1tY3IxOjBYMDAwMDMwMEM0QkQyRkY3NCBtbWNyYTowWDAwMDAyMDAwCitldmVudDowWDAxQzIgbW1jcjA6MFgwMDAwMDcwRiBtbWNyMTowWDAwMDAzMDBDNEJEMkZGNzQgbW1jcmE6MFgwMDAwMjAwMAorZXZlbnQ6MFgwMUMzIG1tY3IwOjBYMDAwMDA3MEYgbW1jcjE6MFgwMDAwMzAwQzRCRDJGRjc0IG1tY3JhOjBYMDAwMDIwMDAKK2V2ZW50OjBYMDFDNCBtbWNyMDowWDAwMDAwNzBGIG1tY3IxOjBYMDAwMDMwMEM0QkQyRkY3NCBtbWNyYTowWDAwMDAyMDAwCitldmVudDowWDAxQzUgbW1jcjA6MFgwMDAwMDcwRiBtbWNyMTowWDAwMDAzMDBDNEJEMkZGNzQgbW1jcmE6MFgwMDAwMjAwMAorZXZlbnQ6MFgwMUM2IG1tY3IwOjBYMDAwMDA3MEYgbW1jcjE6MFgwMDAwMzAwQzRCRDJGRjc0IG1tY3JhOjBYMDAwMDIwMDAKK2V2ZW50OjBYMDFDNyBtbWNyMDowWDAwMDAwNzBGIG1tY3IxOjBYMDAwMDMwMEM0QkQyRkY3NCBtbWNyYTowWDAwMDAyMDAwCisKKyNHcm91cCAyOSBwbV90bGIsIFRMQiBhbmQgTFJRIHBsdXMgZGF0YSBwcmVmZXRjaAorZXZlbnQ6MFgwMUQwIG1tY3IwOjBYMDAwMDE0MjEgbW1jcjE6MFgwMDA4RTAzQzRCRkRBQ0VDIG1tY3JhOjBYMDAwMDIwMDAKK2V2ZW50OjBYMDFEMSBtbWNyMDowWDAwMDAxNDIxIG1tY3IxOjBYMDAwOEUwM0M0QkZEQUNFQyBtbWNyYTowWDAwMDAyMDAwCitldmVudDowWDAxRDIgbW1jcjA6MFgwMDAwMTQyMSBtbWNyMTowWDAwMDhFMDNDNEJGREFDRUMgbW1jcmE6MFgwMDAwMjAwMAorZXZlbnQ6MFgwMUQzIG1tY3IwOjBYMDAwMDE0MjEgbW1jcjE6MFgwMDA4RTAzQzRCRkRBQ0VDIG1tY3JhOjBYMDAwMDIwMDAKK2V2ZW50OjBYMDFENCBtbWNyMDowWDAwMDAxNDIxIG1tY3IxOjBYMDAwOEUwM0M0QkZEQUNFQyBtbWNyYTowWDAwMDAyMDAwCitldmVudDowWDAxRDUgbW1jcjA6MFgwMDAwMTQyMSBtbWNyMTowWDAwMDhFMDNDNEJGREFDRUMgbW1jcmE6MFgwMDAwMjAwMAorZXZlbnQ6MFgwMUQ2IG1tY3IwOjBYMDAwMDE0MjEgbW1jcjE6MFgwMDA4RTAzQzRCRkRBQ0VDIG1tY3JhOjBYMDAwMDIwMDAKK2V2ZW50OjBYMDFENyBtbWNyMDowWDAwMDAxNDIxIG1tY3IxOjBYMDAwOEUwM0M0QkZEQUNFQyBtbWNyYTowWDAwMDAyMDAwCisKKyNHcm91cCAzMCBwbV9pc291cmNlLCBpbnN0IHNvdXJjZSBhbmQgdGFibGV3YWxrCitldmVudDowWDAxRTAgbW1jcjA6MFgwMDAwMDYwRCBtbWNyMTowWDgwMEIwMEMwMjI2RUYxREMgbW1jcmE6MFgwMDAwMjAwMAorZXZlbnQ6MFgwMUUxIG1tY3IwOjBYMDAwMDA2MEQgbW1jcjE6MFg4MDBCMDBDMDIyNkVGMURDIG1tY3JhOjBYMDAwMDIwMDAKK2V2ZW50OjBYMDFFMiBtbWNyMDowWDAwMDAwNjBEIG1tY3IxOjBYODAwQjAwQzAyMjZFRjFEQyBtbWNyYTowWDAwMDAyMDAwCitldmVudDowWDAxRTMgbW1jcjA6MFgwMDAwMDYwRCBtbWNyMTowWDgwMEIwMEMwMjI2RUYxREMgbW1jcmE6MFgwMDAwMjAwMAorZXZlbnQ6MFgwMUU0IG1tY3IwOjBYMDAwMDA2MEQgbW1jcjE6MFg4MDBCMDBDMDIyNkVGMURDIG1tY3JhOjBYMDAwMDIwMDAKK2V2ZW50OjBYMDFFNSBtbWNyMDowWDAwMDAwNjBEIG1tY3IxOjBYODAwQjAwQzAyMjZFRjFEQyBtbWNyYTowWDAwMDAyMDAwCitldmVudDowWDAxRTYgbW1jcjA6MFgwMDAwMDYwRCBtbWNyMTowWDgwMEIwMEMwMjI2RUYxREMgbW1jcmE6MFgwMDAwMjAwMAorZXZlbnQ6MFgwMUU3IG1tY3IwOjBYMDAwMDA2MEQgbW1jcjE6MFg4MDBCMDBDMDIyNkVGMURDIG1tY3JhOjBYMDAwMDIwMDAKKworI0dyb3VwIDMxIHBtX3N5bmMsIFN5bmMgYW5kIFNSUQorZXZlbnQ6MFgwMUYwIG1tY3IwOjBYMDAwMDFEMzMgbW1jcjE6MFgwMDAzRTBDMTA3NTI5NzgwIG1tY3JhOjBYMDAwMDIwMDAKK2V2ZW50OjBYMDFGMSBtbWNyMDowWDAwMDAxRDMzIG1tY3IxOjBYMDAwM0UwQzEwNzUyOTc4MCBtbWNyYTowWDAwMDAyMDAwCitldmVudDowWDAxRjIgbW1jcjA6MFgwMDAwMUQzMyBtbWNyMTowWDAwMDNFMEMxMDc1Mjk3ODAgbW1jcmE6MFgwMDAwMjAwMAorZXZlbnQ6MFgwMUYzIG1tY3IwOjBYMDAwMDFEMzMgbW1jcjE6MFgwMDAzRTBDMTA3NTI5NzgwIG1tY3JhOjBYMDAwMDIwMDAKK2V2ZW50OjBYMDFGNCBtbWNyMDowWDAwMDAxRDMzIG1tY3IxOjBYMDAwM0UwQzEwNzUyOTc4MCBtbWNyYTowWDAwMDAyMDAwCitldmVudDowWDAxRjUgbW1jcjA6MFgwMDAwMUQzMyBtbWNyMTowWDAwMDNFMEMxMDc1Mjk3ODAgbW1jcmE6MFgwMDAwMjAwMAorZXZlbnQ6MFgwMUY2IG1tY3IwOjBYMDAwMDFEMzMgbW1jcjE6MFgwMDAzRTBDMTA3NTI5NzgwIG1tY3JhOjBYMDAwMDIwMDAKK2V2ZW50OjBYMDFGNyBtbWNyMDowWDAwMDAxRDMzIG1tY3IxOjBYMDAwM0UwQzEwNzUyOTc4MCBtbWNyYTowWDAwMDAyMDAwCisKKyNHcm91cCAzMiBwbV9pZXJhdCwgSUVSQVQKK2V2ZW50OjBYMDIwMCBtbWNyMDowWDAwMDAwRDEzIG1tY3IxOjBYODAwMDAwODJDM0QyRjRCQyBtbWNyYTowWDAwMDAyMDAwCitldmVudDowWDAyMDEgbW1jcjA6MFgwMDAwMEQxMyBtbWNyMTowWDgwMDAwMDgyQzNEMkY0QkMgbW1jcmE6MFgwMDAwMjAwMAorZXZlbnQ6MFgwMjAyIG1tY3IwOjBYMDAwMDBEMTMgbW1jcjE6MFg4MDAwMDA4MkMzRDJGNEJDIG1tY3JhOjBYMDAwMDIwMDAKK2V2ZW50OjBYMDIwMyBtbWNyMDowWDAwMDAwRDEzIG1tY3IxOjBYODAwMDAwODJDM0QyRjRCQyBtbWNyYTowWDAwMDAyMDAwCitldmVudDowWDAyMDQgbW1jcjA6MFgwMDAwMEQxMyBtbWNyMTowWDgwMDAwMDgyQzNEMkY0QkMgbW1jcmE6MFgwMDAwMjAwMAorZXZlbnQ6MFgwMjA1IG1tY3IwOjBYMDAwMDBEMTMgbW1jcjE6MFg4MDAwMDA4MkMzRDJGNEJDIG1tY3JhOjBYMDAwMDIwMDAKK2V2ZW50OjBYMDIwNiBtbWNyMDowWDAwMDAwRDEzIG1tY3IxOjBYODAwMDAwODJDM0QyRjRCQyBtbWNyYTowWDAwMDAyMDAwCitldmVudDowWDAyMDcgbW1jcjA6MFgwMDAwMEQxMyBtbWNyMTowWDgwMDAwMDgyQzNEMkY0QkMgbW1jcmE6MFgwMDAwMjAwMAorCisjR3JvdXAgMzMgcG1fZGVyYXQsIERFUkFUCitldmVudDowWDAyMTAgbW1jcjA6MFgwMDAwMDQzNyBtbWNyMTowWDEwMEI3MDUyRTI3NDAwM0MgbW1jcmE6MFgwMDAwMjAwMAorZXZlbnQ6MFgwMjExIG1tY3IwOjBYMDAwMDA0MzcgbW1jcjE6MFgxMDBCNzA1MkUyNzQwMDNDIG1tY3JhOjBYMDAwMDIwMDAKK2V2ZW50OjBYMDIxMiBtbWNyMDowWDAwMDAwNDM3IG1tY3IxOjBYMTAwQjcwNTJFMjc0MDAzQyBtbWNyYTowWDAwMDAyMDAwCitldmVudDowWDAyMTMgbW1jcjA6MFgwMDAwMDQzNyBtbWNyMTowWDEwMEI3MDUyRTI3NDAwM0MgbW1jcmE6MFgwMDAwMjAwMAorZXZlbnQ6MFgwMjE0IG1tY3IwOjBYMDAwMDA0MzcgbW1jcjE6MFgxMDBCNzA1MkUyNzQwMDNDIG1tY3JhOjBYMDAwMDIwMDAKK2V2ZW50OjBYMDIxNSBtbWNyMDowWDAwMDAwNDM3IG1tY3IxOjBYMTAwQjcwNTJFMjc0MDAzQyBtbWNyYTowWDAwMDAyMDAwCitldmVudDowWDAyMTYgbW1jcjA6MFgwMDAwMDQzNyBtbWNyMTowWDEwMEI3MDUyRTI3NDAwM0MgbW1jcmE6MFgwMDAwMjAwMAorZXZlbnQ6MFgwMjE3IG1tY3IwOjBYMDAwMDA0MzcgbW1jcjE6MFgxMDBCNzA1MkUyNzQwMDNDIG1tY3JhOjBYMDAwMDIwMDAKKworI0dyb3VwIDM0IHBtX21hcmsxLCBJbmZvcm1hdGlvbiBvbiBtYXJrZWQgaW5zdHJ1Y3Rpb25zCitldmVudDowWDAyMjAgbW1jcjA6MFgwMDAwMDAwNyBtbWNyMTowWDAwMDA4MDgwNzkwODUyQTQgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgwMjIxIG1tY3IwOjBYMDAwMDAwMDcgbW1jcjE6MFgwMDAwODA4MDc5MDg1MkE0IG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMDIyMiBtbWNyMDowWDAwMDAwMDA3IG1tY3IxOjBYMDAwMDgwODA3OTA4NTJBNCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDAyMjMgbW1jcjA6MFgwMDAwMDAwNyBtbWNyMTowWDAwMDA4MDgwNzkwODUyQTQgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgwMjI0IG1tY3IwOjBYMDAwMDAwMDcgbW1jcjE6MFgwMDAwODA4MDc5MDg1MkE0IG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMDIyNSBtbWNyMDowWDAwMDAwMDA3IG1tY3IxOjBYMDAwMDgwODA3OTA4NTJBNCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDAyMjYgbW1jcjA6MFgwMDAwMDAwNyBtbWNyMTowWDAwMDA4MDgwNzkwODUyQTQgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgwMjI3IG1tY3IwOjBYMDAwMDAwMDcgbW1jcjE6MFgwMDAwODA4MDc5MDg1MkE0IG1tY3JhOjBYMDAwMDIwMDEKKworI0dyb3VwIDM1IHBtX21hcmsyLCBNYXJrZWQgSW5zdHJ1Y3Rpb25zIFByb2Nlc3NpbmcgRmxvdworZXZlbnQ6MFgwMjMwIG1tY3IwOjBYMDAwMDAyMEIgbW1jcjE6MFgwMDAwMDAwMDc5NDg0MjEwIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMDIzMSBtbWNyMDowWDAwMDAwMjBCIG1tY3IxOjBYMDAwMDAwMDA3OTQ4NDIxMCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDAyMzIgbW1jcjA6MFgwMDAwMDIwQiBtbWNyMTowWDAwMDAwMDAwNzk0ODQyMTAgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgwMjMzIG1tY3IwOjBYMDAwMDAyMEIgbW1jcjE6MFgwMDAwMDAwMDc5NDg0MjEwIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMDIzNCBtbWNyMDowWDAwMDAwMjBCIG1tY3IxOjBYMDAwMDAwMDA3OTQ4NDIxMCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDAyMzUgbW1jcjA6MFgwMDAwMDIwQiBtbWNyMTowWDAwMDAwMDAwNzk0ODQyMTAgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgwMjM2IG1tY3IwOjBYMDAwMDAyMEIgbW1jcjE6MFgwMDAwMDAwMDc5NDg0MjEwIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMDIzNyBtbWNyMDowWDAwMDAwMjBCIG1tY3IxOjBYMDAwMDAwMDA3OTQ4NDIxMCBtbWNyYTowWDAwMDAyMDAxCisKKyNHcm91cCAzNiBwbV9tYXJrMywgTWFya2VkIFN0b3JlcyBQcm9jZXNzaW5nIEZsb3cKK2V2ZW50OjBYMDI0MCBtbWNyMDowWDAwMDAwMzFGIG1tY3IxOjBYMDAyMDMwMDQxOTBBM0YyNCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDAyNDEgbW1jcjA6MFgwMDAwMDMxRiBtbWNyMTowWDAwMjAzMDA0MTkwQTNGMjQgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgwMjQyIG1tY3IwOjBYMDAwMDAzMUYgbW1jcjE6MFgwMDIwMzAwNDE5MEEzRjI0IG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMDI0MyBtbWNyMDowWDAwMDAwMzFGIG1tY3IxOjBYMDAyMDMwMDQxOTBBM0YyNCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDAyNDQgbW1jcjA6MFgwMDAwMDMxRiBtbWNyMTowWDAwMjAzMDA0MTkwQTNGMjQgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgwMjQ1IG1tY3IwOjBYMDAwMDAzMUYgbW1jcjE6MFgwMDIwMzAwNDE5MEEzRjI0IG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMDI0NiBtbWNyMDowWDAwMDAwMzFGIG1tY3IxOjBYMDAyMDMwMDQxOTBBM0YyNCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDAyNDcgbW1jcjA6MFgwMDAwMDMxRiBtbWNyMTowWDAwMjAzMDA0MTkwQTNGMjQgbW1jcmE6MFgwMDAwMjAwMQorCisjR3JvdXAgMzcgcG1fbHN1X21hcmsxLCBMb2FkIFN0b3JlIFVuaXQgTWFya2VkIEV2ZW50cworZXZlbnQ6MFgwMjUwIG1tY3IwOjBYMDAwMDFCMzUgbW1jcjE6MFgwMDAyODBDMDhENUU5ODUwIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMDI1MSBtbWNyMDowWDAwMDAxQjM1IG1tY3IxOjBYMDAwMjgwQzA4RDVFOTg1MCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDAyNTIgbW1jcjA6MFgwMDAwMUIzNSBtbWNyMTowWDAwMDI4MEMwOEQ1RTk4NTAgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgwMjUzIG1tY3IwOjBYMDAwMDFCMzUgbW1jcjE6MFgwMDAyODBDMDhENUU5ODUwIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMDI1NCBtbWNyMDowWDAwMDAxQjM1IG1tY3IxOjBYMDAwMjgwQzA4RDVFOTg1MCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDAyNTUgbW1jcjA6MFgwMDAwMUIzNSBtbWNyMTowWDAwMDI4MEMwOEQ1RTk4NTAgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgwMjU2IG1tY3IwOjBYMDAwMDFCMzUgbW1jcjE6MFgwMDAyODBDMDhENUU5ODUwIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMDI1NyBtbWNyMDowWDAwMDAxQjM1IG1tY3IxOjBYMDAwMjgwQzA4RDVFOTg1MCBtbWNyYTowWDAwMDAyMDAxCisKKyNHcm91cCAzOCBwbV9sc3VfbWFyazIsIExvYWQgU3RvcmUgVW5pdCBNYXJrZWQgRXZlbnRzCitldmVudDowWDAyNjAgbW1jcjA6MFgwMDAwMTgzOSBtbWNyMTowWDAwMDI4MEMwOTU5RTk5REMgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgwMjYxIG1tY3IwOjBYMDAwMDE4MzkgbW1jcjE6MFgwMDAyODBDMDk1OUU5OURDIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMDI2MiBtbWNyMDowWDAwMDAxODM5IG1tY3IxOjBYMDAwMjgwQzA5NTlFOTlEQyBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDAyNjMgbW1jcjA6MFgwMDAwMTgzOSBtbWNyMTowWDAwMDI4MEMwOTU5RTk5REMgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgwMjY0IG1tY3IwOjBYMDAwMDE4MzkgbW1jcjE6MFgwMDAyODBDMDk1OUU5OURDIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMDI2NSBtbWNyMDowWDAwMDAxODM5IG1tY3IxOjBYMDAwMjgwQzA5NTlFOTlEQyBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDAyNjYgbW1jcjA6MFgwMDAwMTgzOSBtbWNyMTowWDAwMDI4MEMwOTU5RTk5REMgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgwMjY3IG1tY3IwOjBYMDAwMDE4MzkgbW1jcjE6MFgwMDAyODBDMDk1OUU5OURDIG1tY3JhOjBYMDAwMDIwMDEKKworI0dyb3VwIDM5IHBtX2Z4dTEsIEZpeGVkIFBvaW50IGV2ZW50cyBieSB1bml0CitldmVudDowWDAyNzAgbW1jcjA6MFgwMDAwMDkxMyBtbWNyMTowWDEwMDAxMDAyMDA4NDIxM0MgbW1jcmE6MFgwMDAwMjAwMAorZXZlbnQ6MFgwMjcxIG1tY3IwOjBYMDAwMDA5MTMgbW1jcjE6MFgxMDAwMTAwMjAwODQyMTNDIG1tY3JhOjBYMDAwMDIwMDAKK2V2ZW50OjBYMDI3MiBtbWNyMDowWDAwMDAwOTEzIG1tY3IxOjBYMTAwMDEwMDIwMDg0MjEzQyBtbWNyYTowWDAwMDAyMDAwCitldmVudDowWDAyNzMgbW1jcjA6MFgwMDAwMDkxMyBtbWNyMTowWDEwMDAxMDAyMDA4NDIxM0MgbW1jcmE6MFgwMDAwMjAwMAorZXZlbnQ6MFgwMjc0IG1tY3IwOjBYMDAwMDA5MTMgbW1jcjE6MFgxMDAwMTAwMjAwODQyMTNDIG1tY3JhOjBYMDAwMDIwMDAKK2V2ZW50OjBYMDI3NSBtbWNyMDowWDAwMDAwOTEzIG1tY3IxOjBYMTAwMDEwMDIwMDg0MjEzQyBtbWNyYTowWDAwMDAyMDAwCitldmVudDowWDAyNzYgbW1jcjA6MFgwMDAwMDkxMyBtbWNyMTowWDEwMDAxMDAyMDA4NDIxM0MgbW1jcmE6MFgwMDAwMjAwMAorZXZlbnQ6MFgwMjc3IG1tY3IwOjBYMDAwMDA5MTMgbW1jcjE6MFgxMDAwMTAwMjAwODQyMTNDIG1tY3JhOjBYMDAwMDIwMDAKKworI0dyb3VwIDQwIHBtX2Z4dTIsIEZpeGVkIFBvaW50IGV2ZW50cyBieSB1bml0CitldmVudDowWDAyODAgbW1jcjA6MFgwMDAwMDkxRiBtbWNyMTowWDQwMDAwMDBDQTQwNDJENzggbW1jcmE6MFgwMDAwMjAwMAorZXZlbnQ6MFgwMjgxIG1tY3IwOjBYMDAwMDA5MUYgbW1jcjE6MFg0MDAwMDAwQ0E0MDQyRDc4IG1tY3JhOjBYMDAwMDIwMDAKK2V2ZW50OjBYMDI4MiBtbWNyMDowWDAwMDAwOTFGIG1tY3IxOjBYNDAwMDAwMENBNDA0MkQ3OCBtbWNyYTowWDAwMDAyMDAwCitldmVudDowWDAyODMgbW1jcjA6MFgwMDAwMDkxRiBtbWNyMTowWDQwMDAwMDBDQTQwNDJENzggbW1jcmE6MFgwMDAwMjAwMAorZXZlbnQ6MFgwMjg0IG1tY3IwOjBYMDAwMDA5MUYgbW1jcjE6MFg0MDAwMDAwQ0E0MDQyRDc4IG1tY3JhOjBYMDAwMDIwMDAKK2V2ZW50OjBYMDI4NSBtbWNyMDowWDAwMDAwOTFGIG1tY3IxOjBYNDAwMDAwMENBNDA0MkQ3OCBtbWNyYTowWDAwMDAyMDAwCitldmVudDowWDAyODYgbW1jcjA6MFgwMDAwMDkxRiBtbWNyMTowWDQwMDAwMDBDQTQwNDJENzggbW1jcmE6MFgwMDAwMjAwMAorZXZlbnQ6MFgwMjg3IG1tY3IwOjBYMDAwMDA5MUYgbW1jcjE6MFg0MDAwMDAwQ0E0MDQyRDc4IG1tY3JhOjBYMDAwMDIwMDAKKworI0dyb3VwIDQxIHBtX2lmdSwgcG1faWZ1CitldmVudDowWDAyOTAgbW1jcjA6MFgwMDAwMEQwRCBtbWNyMTowWDgwMDAwMEYwNkI3ODY3QTQgbW1jcmE6MFgwMDAwMjAwMAorZXZlbnQ6MFgwMjkxIG1tY3IwOjBYMDAwMDBEMEQgbW1jcjE6MFg4MDAwMDBGMDZCNzg2N0E0IG1tY3JhOjBYMDAwMDIwMDAKK2V2ZW50OjBYMDI5MiBtbWNyMDowWDAwMDAwRDBEIG1tY3IxOjBYODAwMDAwRjA2Qjc4NjdBNCBtbWNyYTowWDAwMDAyMDAwCitldmVudDowWDAyOTMgbW1jcjA6MFgwMDAwMEQwRCBtbWNyMTowWDgwMDAwMEYwNkI3ODY3QTQgbW1jcmE6MFgwMDAwMjAwMAorZXZlbnQ6MFgwMjk0IG1tY3IwOjBYMDAwMDBEMEQgbW1jcjE6MFg4MDAwMDBGMDZCNzg2N0E0IG1tY3JhOjBYMDAwMDIwMDAKK2V2ZW50OjBYMDI5NSBtbWNyMDowWDAwMDAwRDBEIG1tY3IxOjBYODAwMDAwRjA2Qjc4NjdBNCBtbWNyYTowWDAwMDAyMDAwCitldmVudDowWDAyOTYgbW1jcjA6MFgwMDAwMEQwRCBtbWNyMTowWDgwMDAwMEYwNkI3ODY3QTQgbW1jcmE6MFgwMDAwMjAwMAorZXZlbnQ6MFgwMjk3IG1tY3IwOjBYMDAwMDBEMEQgbW1jcjE6MFg4MDAwMDBGMDZCNzg2N0E0IG1tY3JhOjBYMDAwMDIwMDAKKworI0dyb3VwIDQyIHBtX2NwaV9zdGFjazEsIENQSSBzdGFjayBhbmFseXNpcworZXZlbnQ6MFgwMkEwIG1tY3IwOjBYMDAwMDFCM0YgbW1jcjE6MFg0MDAwQzBDMEFERDY5NjNEIG1tY3JhOjBYMDAwMDIwMDAKK2V2ZW50OjBYMDJBMSBtbWNyMDowWDAwMDAxQjNGIG1tY3IxOjBYNDAwMEMwQzBBREQ2OTYzRCBtbWNyYTowWDAwMDAyMDAwCitldmVudDowWDAyQTIgbW1jcjA6MFgwMDAwMUIzRiBtbWNyMTowWDQwMDBDMEMwQURENjk2M0QgbW1jcmE6MFgwMDAwMjAwMAorZXZlbnQ6MFgwMkEzIG1tY3IwOjBYMDAwMDFCM0YgbW1jcjE6MFg0MDAwQzBDMEFERDY5NjNEIG1tY3JhOjBYMDAwMDIwMDAKK2V2ZW50OjBYMDJBNCBtbWNyMDowWDAwMDAxQjNGIG1tY3IxOjBYNDAwMEMwQzBBREQ2OTYzRCBtbWNyYTowWDAwMDAyMDAwCitldmVudDowWDAyQTUgbW1jcjA6MFgwMDAwMUIzRiBtbWNyMTowWDQwMDBDMEMwQURENjk2M0QgbW1jcmE6MFgwMDAwMjAwMAorZXZlbnQ6MFgwMkE2IG1tY3IwOjBYMDAwMDFCM0YgbW1jcjE6MFg0MDAwQzBDMEFERDY5NjNEIG1tY3JhOjBYMDAwMDIwMDAKK2V2ZW50OjBYMDJBNyBtbWNyMDowWDAwMDAxQjNGIG1tY3IxOjBYNDAwMEMwQzBBREQ2OTYzRCBtbWNyYTowWDAwMDAyMDAwCisKKyNHcm91cCA0MyBwbV9jcGlfc3RhY2syLCBDUEkgc3RhY2sgYW5hbHlzaXMKK2V2ZW50OjBYMDJCMCBtbWNyMDowWDAwMDAwQjEzIG1tY3IxOjBYMDAwQjAwMDAwM0Q2MDU4MyBtbWNyYTowWDAwMDAyMDAwCitldmVudDowWDAyQjEgbW1jcjA6MFgwMDAwMEIxMyBtbWNyMTowWDAwMEIwMDAwMDNENjA1ODMgbW1jcmE6MFgwMDAwMjAwMAorZXZlbnQ6MFgwMkIyIG1tY3IwOjBYMDAwMDBCMTMgbW1jcjE6MFgwMDBCMDAwMDAzRDYwNTgzIG1tY3JhOjBYMDAwMDIwMDAKK2V2ZW50OjBYMDJCMyBtbWNyMDowWDAwMDAwQjEzIG1tY3IxOjBYMDAwQjAwMDAwM0Q2MDU4MyBtbWNyYTowWDAwMDAyMDAwCitldmVudDowWDAyQjQgbW1jcjA6MFgwMDAwMEIxMyBtbWNyMTowWDAwMEIwMDAwMDNENjA1ODMgbW1jcmE6MFgwMDAwMjAwMAorZXZlbnQ6MFgwMkI1IG1tY3IwOjBYMDAwMDBCMTMgbW1jcjE6MFgwMDBCMDAwMDAzRDYwNTgzIG1tY3JhOjBYMDAwMDIwMDAKK2V2ZW50OjBYMDJCNiBtbWNyMDowWDAwMDAwQjEzIG1tY3IxOjBYMDAwQjAwMDAwM0Q2MDU4MyBtbWNyYTowWDAwMDAyMDAwCitldmVudDowWDAyQjcgbW1jcjA6MFgwMDAwMEIxMyBtbWNyMTowWDAwMEIwMDAwMDNENjA1ODMgbW1jcmE6MFgwMDAwMjAwMAorCisjR3JvdXAgNDQgcG1fY3BpX3N0YWNrMywgQ1BJIHN0YWNrIGFuYWx5c2lzCitldmVudDowWDAyQzAgbW1jcjA6MFgwMDAwMDkxNyBtbWNyMTowWDEwMDAxMDAyMDAxNjI1QkUgbW1jcmE6MFgwMDAwMjAwMAorZXZlbnQ6MFgwMkMxIG1tY3IwOjBYMDAwMDA5MTcgbW1jcjE6MFgxMDAwMTAwMjAwMTYyNUJFIG1tY3JhOjBYMDAwMDIwMDAKK2V2ZW50OjBYMDJDMiBtbWNyMDowWDAwMDAwOTE3IG1tY3IxOjBYMTAwMDEwMDIwMDE2MjVCRSBtbWNyYTowWDAwMDAyMDAwCitldmVudDowWDAyQzMgbW1jcjA6MFgwMDAwMDkxNyBtbWNyMTowWDEwMDAxMDAyMDAxNjI1QkUgbW1jcmE6MFgwMDAwMjAwMAorZXZlbnQ6MFgwMkM0IG1tY3IwOjBYMDAwMDA5MTcgbW1jcjE6MFgxMDAwMTAwMjAwMTYyNUJFIG1tY3JhOjBYMDAwMDIwMDAKK2V2ZW50OjBYMDJDNSBtbWNyMDowWDAwMDAwOTE3IG1tY3IxOjBYMTAwMDEwMDIwMDE2MjVCRSBtbWNyYTowWDAwMDAyMDAwCitldmVudDowWDAyQzYgbW1jcjA6MFgwMDAwMDkxNyBtbWNyMTowWDEwMDAxMDAyMDAxNjI1QkUgbW1jcmE6MFgwMDAwMjAwMAorZXZlbnQ6MFgwMkM3IG1tY3IwOjBYMDAwMDA5MTcgbW1jcjE6MFgxMDAwMTAwMjAwMTYyNUJFIG1tY3JhOjBYMDAwMDIwMDAKKworI0dyb3VwIDQ1IHBtX2NwaV9zdGFjazQsIENQSSBzdGFjayBhbmFseXNpcworZXZlbnQ6MFgwMkQwIG1tY3IwOjBYMDAwMDAwMDEgbW1jcjE6MFgwMDAwMDAwMDQ4NTgwNUJEIG1tY3JhOjBYMDAwMDIwMDAKK2V2ZW50OjBYMDJEMSBtbWNyMDowWDAwMDAwMDAxIG1tY3IxOjBYMDAwMDAwMDA0ODU4MDVCRCBtbWNyYTowWDAwMDAyMDAwCitldmVudDowWDAyRDIgbW1jcjA6MFgwMDAwMDAwMSBtbWNyMTowWDAwMDAwMDAwNDg1ODA1QkQgbW1jcmE6MFgwMDAwMjAwMAorZXZlbnQ6MFgwMkQzIG1tY3IwOjBYMDAwMDAwMDEgbW1jcjE6MFgwMDAwMDAwMDQ4NTgwNUJEIG1tY3JhOjBYMDAwMDIwMDAKK2V2ZW50OjBYMDJENCBtbWNyMDowWDAwMDAwMDAxIG1tY3IxOjBYMDAwMDAwMDA0ODU4MDVCRCBtbWNyYTowWDAwMDAyMDAwCitldmVudDowWDAyRDUgbW1jcjA6MFgwMDAwMDAwMSBtbWNyMTowWDAwMDAwMDAwNDg1ODA1QkQgbW1jcmE6MFgwMDAwMjAwMAorZXZlbnQ6MFgwMkQ2IG1tY3IwOjBYMDAwMDAwMDEgbW1jcjE6MFgwMDAwMDAwMDQ4NTgwNUJEIG1tY3JhOjBYMDAwMDIwMDAKK2V2ZW50OjBYMDJENyBtbWNyMDowWDAwMDAwMDAxIG1tY3IxOjBYMDAwMDAwMDA0ODU4MDVCRCBtbWNyYTowWDAwMDAyMDAwCisKKyNHcm91cCA0NiBwbV9jcGlfc3RhY2s1LCBDUEkgc3RhY2sgYW5hbHlzaXMKK2V2ZW50OjBYMDJFMCBtbWNyMDowWDAwMDAwNDEzIG1tY3IxOjBYOTAwMTQwMDlCNkQ4RjY3MiBtbWNyYTowWDAwMDAyMDAwCitldmVudDowWDAyRTEgbW1jcjA6MFgwMDAwMDQxMyBtbWNyMTowWDkwMDE0MDA5QjZEOEY2NzIgbW1jcmE6MFgwMDAwMjAwMAorZXZlbnQ6MFgwMkUyIG1tY3IwOjBYMDAwMDA0MTMgbW1jcjE6MFg5MDAxNDAwOUI2RDhGNjcyIG1tY3JhOjBYMDAwMDIwMDAKK2V2ZW50OjBYMDJFMyBtbWNyMDowWDAwMDAwNDEzIG1tY3IxOjBYOTAwMTQwMDlCNkQ4RjY3MiBtbWNyYTowWDAwMDAyMDAwCitldmVudDowWDAyRTQgbW1jcjA6MFgwMDAwMDQxMyBtbWNyMTowWDkwMDE0MDA5QjZEOEY2NzIgbW1jcmE6MFgwMDAwMjAwMAorZXZlbnQ6MFgwMkU1IG1tY3IwOjBYMDAwMDA0MTMgbW1jcjE6MFg5MDAxNDAwOUI2RDhGNjcyIG1tY3JhOjBYMDAwMDIwMDAKK2V2ZW50OjBYMDJFNiBtbWNyMDowWDAwMDAwNDEzIG1tY3IxOjBYOTAwMTQwMDlCNkQ4RjY3MiBtbWNyYTowWDAwMDAyMDAwCitldmVudDowWDAyRTcgbW1jcjA6MFgwMDAwMDQxMyBtbWNyMTowWDkwMDE0MDA5QjZEOEY2NzIgbW1jcmE6MFgwMDAwMjAwMAorCisjR3JvdXAgNDcgcG1fZGF0YTIsIGRhdGEgc291cmNlIGFuZCBMTVEKK2V2ZW50OjBYMDJGMCBtbWNyMDowWDAwMDAwOTEzIG1tY3IxOjBYMDAwMDMwMEM3QkNFN0Y3NCBtbWNyYTowWDAwMDAyMDAwCitldmVudDowWDAyRjEgbW1jcjA6MFgwMDAwMDkxMyBtbWNyMTowWDAwMDAzMDBDN0JDRTdGNzQgbW1jcmE6MFgwMDAwMjAwMAorZXZlbnQ6MFgwMkYyIG1tY3IwOjBYMDAwMDA5MTMgbW1jcjE6MFgwMDAwMzAwQzdCQ0U3Rjc0IG1tY3JhOjBYMDAwMDIwMDAKK2V2ZW50OjBYMDJGMyBtbWNyMDowWDAwMDAwOTEzIG1tY3IxOjBYMDAwMDMwMEM3QkNFN0Y3NCBtbWNyYTowWDAwMDAyMDAwCitldmVudDowWDAyRjQgbW1jcjA6MFgwMDAwMDkxMyBtbWNyMTowWDAwMDAzMDBDN0JDRTdGNzQgbW1jcmE6MFgwMDAwMjAwMAorZXZlbnQ6MFgwMkY1IG1tY3IwOjBYMDAwMDA5MTMgbW1jcjE6MFgwMDAwMzAwQzdCQ0U3Rjc0IG1tY3JhOjBYMDAwMDIwMDAKK2V2ZW50OjBYMDJGNiBtbWNyMDowWDAwMDAwOTEzIG1tY3IxOjBYMDAwMDMwMEM3QkNFN0Y3NCBtbWNyYTowWDAwMDAyMDAwCitldmVudDowWDAyRjcgbW1jcjA6MFgwMDAwMDkxMyBtbWNyMTowWDAwMDAzMDBDN0JDRTdGNzQgbW1jcmE6MFgwMDAwMjAwMAorCisjR3JvdXAgNDggcG1fZmV0Y2hfYnJhbmNoLCBJbnN0cnVjdGlvbiBmZXRjaCBhbmQgYnJhbmNoIGV2ZW50cworZXZlbnQ6MFgwMzAwIG1tY3IwOjBYMDAwMDA2MEQgbW1jcjE6MFg4MDAwMDBDRDZFNUU5RDZDIG1tY3JhOjBYMDAwMDIwMDAKK2V2ZW50OjBYMDMwMSBtbWNyMDowWDAwMDAwNjBEIG1tY3IxOjBYODAwMDAwQ0Q2RTVFOUQ2QyBtbWNyYTowWDAwMDAyMDAwCitldmVudDowWDAzMDIgbW1jcjA6MFgwMDAwMDYwRCBtbWNyMTowWDgwMDAwMENENkU1RTlENkMgbW1jcmE6MFgwMDAwMjAwMAorZXZlbnQ6MFgwMzAzIG1tY3IwOjBYMDAwMDA2MEQgbW1jcjE6MFg4MDAwMDBDRDZFNUU5RDZDIG1tY3JhOjBYMDAwMDIwMDAKK2V2ZW50OjBYMDMwNCBtbWNyMDowWDAwMDAwNjBEIG1tY3IxOjBYODAwMDAwQ0Q2RTVFOUQ2QyBtbWNyYTowWDAwMDAyMDAwCitldmVudDowWDAzMDUgbW1jcjA6MFgwMDAwMDYwRCBtbWNyMTowWDgwMDAwMENENkU1RTlENkMgbW1jcmE6MFgwMDAwMjAwMAorZXZlbnQ6MFgwMzA2IG1tY3IwOjBYMDAwMDA2MEQgbW1jcjE6MFg4MDAwMDBDRDZFNUU5RDZDIG1tY3JhOjBYMDAwMDIwMDAKK2V2ZW50OjBYMDMwNyBtbWNyMDowWDAwMDAwNjBEIG1tY3IxOjBYODAwMDAwQ0Q2RTVFOUQ2QyBtbWNyYTowWDAwMDAyMDAwCisKKyNHcm91cCA0OSBwbV9sMWwyX21pc3MsIEwxIGFuZCBMMiBtaXNzIGV2ZW50cworZXZlbnQ6MFgwMzEwIG1tY3IwOjBYMDAwMDA3MEYgbW1jcjE6MFgwMDAzMzAwMDRDODZGQjAwIG1tY3JhOjBYMDAwMDIwMDAKK2V2ZW50OjBYMDMxMSBtbWNyMDowWDAwMDAwNzBGIG1tY3IxOjBYMDAwMzMwMDA0Qzg2RkIwMCBtbWNyYTowWDAwMDAyMDAwCitldmVudDowWDAzMTIgbW1jcjA6MFgwMDAwMDcwRiBtbWNyMTowWDAwMDMzMDAwNEM4NkZCMDAgbW1jcmE6MFgwMDAwMjAwMAorZXZlbnQ6MFgwMzEzIG1tY3IwOjBYMDAwMDA3MEYgbW1jcjE6MFgwMDAzMzAwMDRDODZGQjAwIG1tY3JhOjBYMDAwMDIwMDAKK2V2ZW50OjBYMDMxNCBtbWNyMDowWDAwMDAwNzBGIG1tY3IxOjBYMDAwMzMwMDA0Qzg2RkIwMCBtbWNyYTowWDAwMDAyMDAwCitldmVudDowWDAzMTUgbW1jcjA6MFgwMDAwMDcwRiBtbWNyMTowWDAwMDMzMDAwNEM4NkZCMDAgbW1jcmE6MFgwMDAwMjAwMAorZXZlbnQ6MFgwMzE2IG1tY3IwOjBYMDAwMDA3MEYgbW1jcjE6MFgwMDAzMzAwMDRDODZGQjAwIG1tY3JhOjBYMDAwMDIwMDAKK2V2ZW50OjBYMDMxNyBtbWNyMDowWDAwMDAwNzBGIG1tY3IxOjBYMDAwMzMwMDA0Qzg2RkIwMCBtbWNyYTowWDAwMDAyMDAwCisKKyNHcm91cCA1MCBwbV9kYXRhX2Zyb20sIERhdGEgRnJvbSBMMiBpbnN0cnVjdGlvbnMKK2V2ZW50OjBYMDMyMCBtbWNyMDowWDAwMDAwNzBGIG1tY3IxOjBYMDAwMzMwMDA0QkNFN0IwMCBtbWNyYTowWDAwMDAyMDAwCitldmVudDowWDAzMjEgbW1jcjA6MFgwMDAwMDcwRiBtbWNyMTowWDAwMDMzMDAwNEJDRTdCMDAgbW1jcmE6MFgwMDAwMjAwMAorZXZlbnQ6MFgwMzIyIG1tY3IwOjBYMDAwMDA3MEYgbW1jcjE6MFgwMDAzMzAwMDRCQ0U3QjAwIG1tY3JhOjBYMDAwMDIwMDAKK2V2ZW50OjBYMDMyMyBtbWNyMDowWDAwMDAwNzBGIG1tY3IxOjBYMDAwMzMwMDA0QkNFN0IwMCBtbWNyYTowWDAwMDAyMDAwCitldmVudDowWDAzMjQgbW1jcjA6MFgwMDAwMDcwRiBtbWNyMTowWDAwMDMzMDAwNEJDRTdCMDAgbW1jcmE6MFgwMDAwMjAwMAorZXZlbnQ6MFgwMzI1IG1tY3IwOjBYMDAwMDA3MEYgbW1jcjE6MFgwMDAzMzAwMDRCQ0U3QjAwIG1tY3JhOjBYMDAwMDIwMDAKK2V2ZW50OjBYMDMyNiBtbWNyMDowWDAwMDAwNzBGIG1tY3IxOjBYMDAwMzMwMDA0QkNFN0IwMCBtbWNyYTowWDAwMDAyMDAwCitldmVudDowWDAzMjcgbW1jcjA6MFgwMDAwMDcwRiBtbWNyMTowWDAwMDMzMDAwNEJDRTdCMDAgbW1jcmE6MFgwMDAwMjAwMAorCisjR3JvdXAgNTEgcG1fbWFya19kYXRhX2Zyb20sIE1hcmtlZCBEYXRhIEZyb20gTDIgaW5zdHJ1Y3Rpb25zCitldmVudDowWDAzMzAgbW1jcjA6MFgwMDAwMDcwRiBtbWNyMTowWDAwMjAzMDA4NEJDRTcyRjAgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgwMzMxIG1tY3IwOjBYMDAwMDA3MEYgbW1jcjE6MFgwMDIwMzAwODRCQ0U3MkYwIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMDMzMiBtbWNyMDowWDAwMDAwNzBGIG1tY3IxOjBYMDAyMDMwMDg0QkNFNzJGMCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDAzMzMgbW1jcjA6MFgwMDAwMDcwRiBtbWNyMTowWDAwMjAzMDA4NEJDRTcyRjAgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgwMzM0IG1tY3IwOjBYMDAwMDA3MEYgbW1jcjE6MFgwMDIwMzAwODRCQ0U3MkYwIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMDMzNSBtbWNyMDowWDAwMDAwNzBGIG1tY3IxOjBYMDAyMDMwMDg0QkNFNzJGMCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDAzMzYgbW1jcjA6MFgwMDAwMDcwRiBtbWNyMTowWDAwMjAzMDA4NEJDRTcyRjAgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgwMzM3IG1tY3IwOjBYMDAwMDA3MEYgbW1jcjE6MFgwMDIwMzAwODRCQ0U3MkYwIG1tY3JhOjBYMDAwMDIwMDEKZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2V2ZW50cy9wcGM2NC85NzBNUC9ldmVudHMgYi9vcHJvZmlsZS0wLjkuNy9ldmVudHMvcHBjNjQvOTcwTVAvZXZlbnRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwMjEzMGYKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9ldmVudHMvcHBjNjQvOTcwTVAvZXZlbnRzCkBAIC0wLDAgKzEsNTMwIEBACisjUFBDNjQgUG93ZXJQQzk3ME1QIGV2ZW50cworIworIyBDb3B5cmlnaHQgT1Byb2ZpbGUgYXV0aG9ycworIyBDb3B5cmlnaHQgKGMpIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMsIDIwMDcuCisjIENvbnRyaWJ1dGVkIGJ5IERhdmUgTm9tdXJhIDxkY25sdGNAdXMuaWJtLmNvbT4uCisjCisjCisjICBXaXRoaW4gZWFjaCBncm91cCB0aGUgZXZlbnQgbmFtZXMgbXVzdCBiZSB1bmlxdWUuICBFYWNoIGV2ZW50IGluIGEgZ3JvdXAgaXMKKyMgIGFzc2lnbmVkIHRvIGEgdW5pcXVlIGNvdW50ZXIuICBUaGUgZ3JvdXBzIGFyZSBmcm9tIHRoZSBncm91cHMgZGVmaW5lZCBpbiB0aGUKKyMgIFBlcmZvcm1hbmNlIE1vbml0b3IgVW5pdCB1c2VyIGd1aWRlIGZvciB0aGlzIHByb2Nlc3Nvci4KKyMKKyMgIE9ubHkgZXZlbnRzIHdpdGhpbiB0aGUgc2FtZSBncm91cCBjYW4gYmUgc2VsZWN0ZWQgc2ltdWx0YW5lb3VzbHkuCisjICBFYWNoIGV2ZW50IGlzIGdpdmVuIGEgdW5pcXVlIGV2ZW50IG51bWJlci4gIFRoZSBldmVudCBudW1iZXIgaXMgdXNlZCBieSB0aGUKKyMgIE9Qcm9maWxlIGNvZGUgdG8gcmVzb2x2ZSBldmVudCBuYW1lcyBmb3IgdGhlIHBvc3QtcHJvY2Vzc2luZy4gIFRoaXMgaXMgZG9uZQorIyAgdG8gcHJlc2VydmUgY29tcGF0aWJpbGl0eSB3aXRoIHRoZSByZXN0IG9mIHRoZSBPUHJvZmlsZSBjb2RlLiAgVGhlIGV2ZW50CisjICBudW1iZXJzIGFyZSBmb3JtYXR0ZWQgYXMgZm9sbG93czogPGdyb3VwX251bT5jb25jYXQoPGNvdW50ZXIgZm9yIHRoZSBldmVudD4pLgorCisjR3JvdXAgRGVmYXVsdAorZXZlbnQ6MFgwMDEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpDWUNMRVMgOiBQcm9jZXNzb3IgQ3ljbGVzCisKKworI0dyb3VwIDEgcG1fc2xpY2UwLCBUaW1lIFNsaWNlIDAKK2V2ZW50OjBYMDAxMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQMSA6IChHcm91cCAxIHBtX3NsaWNlMCkgUnVuIGN5Y2xlcworZXZlbnQ6MFgwMDExIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDEgOiAoR3JvdXAgMSBwbV9zbGljZTApIFByb2Nlc3NvciBjeWNsZXMKK2V2ZW50OjBYMDAxMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fU1RPUF9DT01QTEVUSU9OX0dSUDEgOiAoR3JvdXAgMSBwbV9zbGljZTApIENvbXBsZXRpb24gc3RvcHBlZAorZXZlbnQ6MFgwMDEzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDEgOiAoR3JvdXAgMSBwbV9zbGljZTApIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMDAxNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fMVBMVVNfUFBDX0NNUExfR1JQMSA6IChHcm91cCAxIHBtX3NsaWNlMCkgT25lIG9yIG1vcmUgUFBDIGluc3RydWN0aW9uIGNvbXBsZXRlZAorZXZlbnQ6MFgwMDE1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDEgOiAoR3JvdXAgMSBwbV9zbGljZTApIFByb2Nlc3NvciBjeWNsZXMKK2V2ZW50OjBYMDAxNiBjb3VudGVyczo2IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fR1JQX0NNUExfR1JQMSA6IChHcm91cCAxIHBtX3NsaWNlMCkgR3JvdXAgY29tcGxldGVkCitldmVudDowWDAwMTcgY291bnRlcnM6NyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0dSUF9ESVNQX1JFSkVDVF9HUlAxIDogKEdyb3VwIDEgcG1fc2xpY2UwKSBHcm91cCBkaXNwYXRjaCByZWplY3RlZAorCisjR3JvdXAgMiBwbV9lcHJvZiwgR3JvdXAgZm9yIHVzZSB3aXRoIGVwcm9mCitldmVudDowWDAwMjAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQMiA6IChHcm91cCAyIHBtX2Vwcm9mKSBQcm9jZXNzb3IgY3ljbGVzCitldmVudDowWDAwMjEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQMiA6IChHcm91cCAyIHBtX2Vwcm9mKSBQcm9jZXNzb3IgY3ljbGVzCitldmVudDowWDAwMjIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xEX01JU1NfTDFfR1JQMiA6IChHcm91cCAyIHBtX2Vwcm9mKSBMMSBEIGNhY2hlIGxvYWQgbWlzc2VzCitldmVudDowWDAwMjMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RDX0lOVl9MMl9HUlAyIDogKEdyb3VwIDIgcG1fZXByb2YpIEwxIEQgY2FjaGUgZW50cmllcyBpbnZhbGlkYXRlZCBmcm9tIEwyCitldmVudDowWDAwMjQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lOU1RfRElTUF9HUlAyIDogKEdyb3VwIDIgcG1fZXByb2YpIEluc3RydWN0aW9ucyBkaXNwYXRjaGVkCitldmVudDowWDAwMjUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMiA6IChHcm91cCAyIHBtX2Vwcm9mKSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDAwMjYgY291bnRlcnM6NiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1NUX1JFRl9MMV9HUlAyIDogKEdyb3VwIDIgcG1fZXByb2YpIEwxIEQgY2FjaGUgc3RvcmUgcmVmZXJlbmNlcworZXZlbnQ6MFgwMDI3IGNvdW50ZXJzOjcgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MRF9SRUZfTDFfR1JQMiA6IChHcm91cCAyIHBtX2Vwcm9mKSBMMSBEIGNhY2hlIGxvYWQgcmVmZXJlbmNlcworCisjR3JvdXAgMyBwbV9iYXNpYywgQmFzaWMgcGVyZm9ybWFuY2UgaW5kaWNhdG9ycworZXZlbnQ6MFgwMDMwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDMgOiAoR3JvdXAgMyBwbV9iYXNpYykgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgwMDMxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDMgOiAoR3JvdXAgMyBwbV9iYXNpYykgUHJvY2Vzc29yIGN5Y2xlcworZXZlbnQ6MFgwMDMyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MRF9NSVNTX0wxX0dSUDMgOiAoR3JvdXAgMyBwbV9iYXNpYykgTDEgRCBjYWNoZSBsb2FkIG1pc3NlcworZXZlbnQ6MFgwMDMzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQ19JTlZfTDJfR1JQMyA6IChHcm91cCAzIHBtX2Jhc2ljKSBMMSBEIGNhY2hlIGVudHJpZXMgaW52YWxpZGF0ZWQgZnJvbSBMMgorZXZlbnQ6MFgwMDM0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JTlNUX0RJU1BfR1JQMyA6IChHcm91cCAzIHBtX2Jhc2ljKSBJbnN0cnVjdGlvbnMgZGlzcGF0Y2hlZAorZXZlbnQ6MFgwMDM1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDMgOiAoR3JvdXAgMyBwbV9iYXNpYykgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgwMDM2IGNvdW50ZXJzOjYgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9TVF9SRUZfTDFfR1JQMyA6IChHcm91cCAzIHBtX2Jhc2ljKSBMMSBEIGNhY2hlIHN0b3JlIHJlZmVyZW5jZXMKK2V2ZW50OjBYMDAzNyBjb3VudGVyczo3IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTERfUkVGX0wxX0dSUDMgOiAoR3JvdXAgMyBwbV9iYXNpYykgTDEgRCBjYWNoZSBsb2FkIHJlZmVyZW5jZXMKKworI0dyb3VwIDQgcG1fbHN1LCBJbmZvcm1hdGlvbiBvbiB0aGUgTG9hZCBTdG9yZSBVbml0CitldmVudDowWDAwNDAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9GTFVTSF9VTERfR1JQNCA6IChHcm91cCA0IHBtX2xzdSkgTFJRIHVuYWxpZ25lZCBsb2FkIGZsdXNoZXMKK2V2ZW50OjBYMDA0MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVX0ZMVVNIX1VTVF9HUlA0IDogKEdyb3VwIDQgcG1fbHN1KSBTUlEgdW5hbGlnbmVkIHN0b3JlIGZsdXNoZXMKK2V2ZW50OjBYMDA0MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlA0IDogKEdyb3VwIDQgcG1fbHN1KSBQcm9jZXNzb3IgY3ljbGVzCitldmVudDowWDAwNDMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQNCA6IChHcm91cCA0IHBtX2xzdSkgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgwMDQ0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1VfRkxVU0hfU1JRX0dSUDQgOiAoR3JvdXAgNCBwbV9sc3UpIFNSUSBmbHVzaGVzCitldmVudDowWDAwNDUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9GTFVTSF9MUlFfR1JQNCA6IChHcm91cCA0IHBtX2xzdSkgTFJRIGZsdXNoZXMKK2V2ZW50OjBYMDA0NiBjb3VudGVyczo2IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fU1RfUkVGX0wxX0dSUDQgOiAoR3JvdXAgNCBwbV9sc3UpIEwxIEQgY2FjaGUgc3RvcmUgcmVmZXJlbmNlcworZXZlbnQ6MFgwMDQ3IGNvdW50ZXJzOjcgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MRF9SRUZfTDFfR1JQNCA6IChHcm91cCA0IHBtX2xzdSkgTDEgRCBjYWNoZSBsb2FkIHJlZmVyZW5jZXMKKworI0dyb3VwIDUgcG1fZnB1MSwgRmxvYXRpbmcgUG9pbnQgZXZlbnRzCitldmVudDowWDAwNTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVV9GRElWX0dSUDUgOiAoR3JvdXAgNSBwbV9mcHUxKSBGUFUgZXhlY3V0ZWQgRkRJViBpbnN0cnVjdGlvbgorZXZlbnQ6MFgwMDUxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFVfRk1BX0dSUDUgOiAoR3JvdXAgNSBwbV9mcHUxKSBGUFUgZXhlY3V0ZWQgbXVsdGlwbHktYWRkIGluc3RydWN0aW9uCitldmVudDowWDAwNTIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVV9GRVNUX0dSUDUgOiAoR3JvdXAgNSBwbV9mcHUxKSBGUFUgZXhlY3V0ZWQgRkVTVCBpbnN0cnVjdGlvbgorZXZlbnQ6MFgwMDUzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFVfRklOX0dSUDUgOiAoR3JvdXAgNSBwbV9mcHUxKSBGUFUgcHJvZHVjZWQgYSByZXN1bHQKK2V2ZW50OjBYMDA1NCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlA1IDogKEdyb3VwIDUgcG1fZnB1MSkgUHJvY2Vzc29yIGN5Y2xlcworZXZlbnQ6MFgwMDU1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFVfRlNRUlRfR1JQNSA6IChHcm91cCA1IHBtX2ZwdTEpIEZQVSBleGVjdXRlZCBGU1FSVCBpbnN0cnVjdGlvbgorZXZlbnQ6MFgwMDU2IGNvdW50ZXJzOjYgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDUgOiAoR3JvdXAgNSBwbV9mcHUxKSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDAwNTcgY291bnRlcnM6NyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVV9GTU9WX0ZFU1RfR1JQNSA6IChHcm91cCA1IHBtX2ZwdTEpIEZQVSBleGVjdXRpbmcgRk1PViBvciBGRVNUIGluc3RydWN0aW9ucworCisjR3JvdXAgNiBwbV9mcHUyLCBGbG9hdGluZyBQb2ludCBldmVudHMKK2V2ZW50OjBYMDA2MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVX0RFTk9STV9HUlA2IDogKEdyb3VwIDYgcG1fZnB1MikgRlBVIHJlY2VpdmVkIGRlbm9ybWFsaXplZCBkYXRhCitldmVudDowWDAwNjEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVV9TVEFMTDNfR1JQNiA6IChHcm91cCA2IHBtX2ZwdTIpIEZQVSBzdGFsbGVkIGluIHBpcGUzCitldmVudDowWDAwNjIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQNiA6IChHcm91cCA2IHBtX2ZwdTIpIFByb2Nlc3NvciBjeWNsZXMKK2V2ZW50OjBYMDA2MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlA2IDogKEdyb3VwIDYgcG1fZnB1MikgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgwMDY0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFVfQUxMX0dSUDYgOiAoR3JvdXAgNiBwbV9mcHUyKSBGUFUgZXhlY3V0ZWQgYWRkLCBtdWx0LCBzdWIsIGNtcCBvciBzZWwgaW5zdHJ1Y3Rpb24KK2V2ZW50OjBYMDA2NSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVX1NURl9HUlA2IDogKEdyb3VwIDYgcG1fZnB1MikgRlBVIGV4ZWN1dGVkIHN0b3JlIGluc3RydWN0aW9uCitldmVudDowWDAwNjYgY291bnRlcnM6NiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVV9GUlNQX0ZDT05WX0dSUDYgOiAoR3JvdXAgNiBwbV9mcHUyKSBGUFUgZXhlY3V0ZWQgRlJTUCBvciBGQ09OViBpbnN0cnVjdGlvbnMKK2V2ZW50OjBYMDA2NyBjb3VudGVyczo3IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVX0xERl9HUlA2IDogKEdyb3VwIDYgcG1fZnB1MikgTFNVIGV4ZWN1dGVkIEZsb2F0aW5nIFBvaW50IGxvYWQgaW5zdHJ1Y3Rpb24KKworI0dyb3VwIDcgcG1faXN1X3JlbmFtZSwgSVNVIFJlbmFtZSBQb29sIEV2ZW50cworZXZlbnQ6MFgwMDcwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9YRVJfTUFQX0ZVTExfQ1lDX0dSUDcgOiAoR3JvdXAgNyBwbV9pc3VfcmVuYW1lKSBDeWNsZXMgWEVSIG1hcHBlciBmdWxsCitldmVudDowWDAwNzEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0NSX01BUF9GVUxMX0NZQ19HUlA3IDogKEdyb3VwIDcgcG1faXN1X3JlbmFtZSkgQ3ljbGVzIENSIGxvZ2ljYWwgb3BlcmF0aW9uIG1hcHBlciBmdWxsCitldmVudDowWDAwNzIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0NSUV9GVUxMX0NZQ19HUlA3IDogKEdyb3VwIDcgcG1faXN1X3JlbmFtZSkgQ3ljbGVzIENSIGlzc3VlIHF1ZXVlIGZ1bGwKK2V2ZW50OjBYMDA3MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fR1JQX0RJU1BfQkxLX1NCX0NZQ19HUlA3IDogKEdyb3VwIDcgcG1faXN1X3JlbmFtZSkgQ3ljbGVzIGdyb3VwIGRpc3BhdGNoIGJsb2NrZWQgYnkgc2NvcmVib2FyZAorZXZlbnQ6MFgwMDc0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MUl9DVFJfTUFQX0ZVTExfQ1lDX0dSUDcgOiAoR3JvdXAgNyBwbV9pc3VfcmVuYW1lKSBDeWNsZXMgTFIvQ1RSIG1hcHBlciBmdWxsCitldmVudDowWDAwNzUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lOU1RfRElTUF9HUlA3IDogKEdyb3VwIDcgcG1faXN1X3JlbmFtZSkgSW5zdHJ1Y3Rpb25zIGRpc3BhdGNoZWQKK2V2ZW50OjBYMDA3NiBjb3VudGVyczo2IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlA3IDogKEdyb3VwIDcgcG1faXN1X3JlbmFtZSkgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgwMDc3IGNvdW50ZXJzOjcgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDcgOiAoR3JvdXAgNyBwbV9pc3VfcmVuYW1lKSBQcm9jZXNzb3IgY3ljbGVzCisKKyNHcm91cCA4IHBtX2lzdV9xdWV1ZXMxLCBJU1UgUmVuYW1lIFBvb2wgRXZlbnRzCitldmVudDowWDAwODAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVTBfRlVMTF9DWUNfR1JQOCA6IChHcm91cCA4IHBtX2lzdV9xdWV1ZXMxKSBDeWNsZXMgRlBVMCBpc3N1ZSBxdWV1ZSBmdWxsCitldmVudDowWDAwODEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVTFfRlVMTF9DWUNfR1JQOCA6IChHcm91cCA4IHBtX2lzdV9xdWV1ZXMxKSBDeWNsZXMgRlBVMSBpc3N1ZSBxdWV1ZSBmdWxsCitldmVudDowWDAwODIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZYTFMwX0ZVTExfQ1lDX0dSUDggOiAoR3JvdXAgOCBwbV9pc3VfcXVldWVzMSkgQ3ljbGVzIEZYVTAvTFMwIHF1ZXVlIGZ1bGwKK2V2ZW50OjBYMDA4MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlhMUzFfRlVMTF9DWUNfR1JQOCA6IChHcm91cCA4IHBtX2lzdV9xdWV1ZXMxKSBDeWNsZXMgRlhVMS9MUzEgcXVldWUgZnVsbAorZXZlbnQ6MFgwMDg0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDggOiAoR3JvdXAgOCBwbV9pc3VfcXVldWVzMSkgUHJvY2Vzc29yIGN5Y2xlcworZXZlbnQ6MFgwMDg1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDggOiAoR3JvdXAgOCBwbV9pc3VfcXVldWVzMSkgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgwMDg2IGNvdW50ZXJzOjYgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1VfTFJRX0ZVTExfQ1lDX0dSUDggOiAoR3JvdXAgOCBwbV9pc3VfcXVldWVzMSkgQ3ljbGVzIExSUSBmdWxsCitldmVudDowWDAwODcgY291bnRlcnM6NyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9TUlFfRlVMTF9DWUNfR1JQOCA6IChHcm91cCA4IHBtX2lzdV9xdWV1ZXMxKSBDeWNsZXMgU1JRIGZ1bGwKKworI0dyb3VwIDkgcG1faXN1X2Zsb3csIElTVSBJbnN0cnVjdGlvbiBGbG93IEV2ZW50cworZXZlbnQ6MFgwMDkwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JTlNUX0RJU1BfR1JQOSA6IChHcm91cCA5IHBtX2lzdV9mbG93KSBJbnN0cnVjdGlvbnMgZGlzcGF0Y2hlZAorZXZlbnQ6MFgwMDkxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDkgOiAoR3JvdXAgOSBwbV9pc3VfZmxvdykgUHJvY2Vzc29yIGN5Y2xlcworZXZlbnQ6MFgwMDkyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GWFUwX0ZJTl9HUlA5IDogKEdyb3VwIDkgcG1faXN1X2Zsb3cpIEZYVTAgcHJvZHVjZWQgYSByZXN1bHQKK2V2ZW50OjBYMDA5MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlhVMV9GSU5fR1JQOSA6IChHcm91cCA5IHBtX2lzdV9mbG93KSBGWFUxIHByb2R1Y2VkIGEgcmVzdWx0CitldmVudDowWDAwOTQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0dSUF9ESVNQX1ZBTElEX0dSUDkgOiAoR3JvdXAgOSBwbV9pc3VfZmxvdykgR3JvdXAgZGlzcGF0Y2ggdmFsaWQKK2V2ZW50OjBYMDA5NSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fR1JQX0RJU1BfUkVKRUNUX0dSUDkgOiAoR3JvdXAgOSBwbV9pc3VfZmxvdykgR3JvdXAgZGlzcGF0Y2ggcmVqZWN0ZWQKK2V2ZW50OjBYMDA5NiBjb3VudGVyczo2IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlA5IDogKEdyb3VwIDkgcG1faXN1X2Zsb3cpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMDA5NyBjb3VudGVyczo3IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlA5IDogKEdyb3VwIDkgcG1faXN1X2Zsb3cpIFByb2Nlc3NvciBjeWNsZXMKKworI0dyb3VwIDEwIHBtX2lzdV93b3JrLCBJU1UgSW5kaWNhdG9ycyBvZiBXb3JrIEJsb2NrYWdlCitldmVudDowWDAwQTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0dDVF9FTVBUWV9DWUNfR1JQMTAgOiAoR3JvdXAgMTAgcG1faXN1X3dvcmspIEN5Y2xlcyBHQ1QgZW1wdHkKK2V2ZW50OjBYMDBBMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fV09SS19IRUxEX0dSUDEwIDogKEdyb3VwIDEwIHBtX2lzdV93b3JrKSBXb3JrIGhlbGQKK2V2ZW50OjBYMDBBMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fU1RPUF9DT01QTEVUSU9OX0dSUDEwIDogKEdyb3VwIDEwIHBtX2lzdV93b3JrKSBDb21wbGV0aW9uIHN0b3BwZWQKK2V2ZW50OjBYMDBBMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRUVfT0ZGX0VYVF9JTlRfR1JQMTAgOiAoR3JvdXAgMTAgcG1faXN1X3dvcmspIEN5Y2xlcyBNU1IoRUUpIGJpdCBvZmYgYW5kIGV4dGVybmFsIGludGVycnVwdCBwZW5kaW5nCitldmVudDowWDAwQTQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQMTAgOiAoR3JvdXAgMTAgcG1faXN1X3dvcmspIFByb2Nlc3NvciBjeWNsZXMKK2V2ZW50OjBYMDBBNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAxMCA6IChHcm91cCAxMCBwbV9pc3Vfd29yaykgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgwMEE2IGNvdW50ZXJzOjYgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9FRV9PRkZfR1JQMTAgOiAoR3JvdXAgMTAgcG1faXN1X3dvcmspIEN5Y2xlcyBNU1IoRUUpIGJpdCBvZmYKK2V2ZW50OjBYMDBBNyBjb3VudGVyczo3IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRVhUX0lOVF9HUlAxMCA6IChHcm91cCAxMCBwbV9pc3Vfd29yaykgRXh0ZXJuYWwgaW50ZXJydXB0cworCisjR3JvdXAgMTEgcG1fZnB1MywgRmxvYXRpbmcgUG9pbnQgZXZlbnRzIGJ5IHVuaXQKK2V2ZW50OjBYMDBCMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVMF9GRElWX0dSUDExIDogKEdyb3VwIDExIHBtX2ZwdTMpIEZQVTAgZXhlY3V0ZWQgRkRJViBpbnN0cnVjdGlvbgorZXZlbnQ6MFgwMEIxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFUxX0ZESVZfR1JQMTEgOiAoR3JvdXAgMTEgcG1fZnB1MykgRlBVMSBleGVjdXRlZCBGRElWIGluc3RydWN0aW9uCitldmVudDowWDAwQjIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVTBfRlJTUF9GQ09OVl9HUlAxMSA6IChHcm91cCAxMSBwbV9mcHUzKSBGUFUwIGV4ZWN1dGVkIEZSU1Agb3IgRkNPTlYgaW5zdHJ1Y3Rpb25zCitldmVudDowWDAwQjMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVTFfRlJTUF9GQ09OVl9HUlAxMSA6IChHcm91cCAxMSBwbV9mcHUzKSBGUFUxIGV4ZWN1dGVkIEZSU1Agb3IgRkNPTlYgaW5zdHJ1Y3Rpb25zCitldmVudDowWDAwQjQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVTBfRk1BX0dSUDExIDogKEdyb3VwIDExIHBtX2ZwdTMpIEZQVTAgZXhlY3V0ZWQgbXVsdGlwbHktYWRkIGluc3RydWN0aW9uCitldmVudDowWDAwQjUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVTFfRk1BX0dSUDExIDogKEdyb3VwIDExIHBtX2ZwdTMpIEZQVTEgZXhlY3V0ZWQgbXVsdGlwbHktYWRkIGluc3RydWN0aW9uCitldmVudDowWDAwQjYgY291bnRlcnM6NiB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMTEgOiAoR3JvdXAgMTEgcG1fZnB1MykgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgwMEI3IGNvdW50ZXJzOjcgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDExIDogKEdyb3VwIDExIHBtX2ZwdTMpIFByb2Nlc3NvciBjeWNsZXMKKworI0dyb3VwIDEyIHBtX2ZwdTQsIEZsb2F0aW5nIFBvaW50IGV2ZW50cyBieSB1bml0CitldmVudDowWDAwQzAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVTBfRlNRUlRfR1JQMTIgOiAoR3JvdXAgMTIgcG1fZnB1NCkgRlBVMCBleGVjdXRlZCBGU1FSVCBpbnN0cnVjdGlvbgorZXZlbnQ6MFgwMEMxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFUxX0ZTUVJUX0dSUDEyIDogKEdyb3VwIDEyIHBtX2ZwdTQpIEZQVTEgZXhlY3V0ZWQgRlNRUlQgaW5zdHJ1Y3Rpb24KK2V2ZW50OjBYMDBDMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVMF9GSU5fR1JQMTIgOiAoR3JvdXAgMTIgcG1fZnB1NCkgRlBVMCBwcm9kdWNlZCBhIHJlc3VsdAorZXZlbnQ6MFgwMEMzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFUxX0ZJTl9HUlAxMiA6IChHcm91cCAxMiBwbV9mcHU0KSBGUFUxIHByb2R1Y2VkIGEgcmVzdWx0CitldmVudDowWDAwQzQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVTBfQUxMX0dSUDEyIDogKEdyb3VwIDEyIHBtX2ZwdTQpIEZQVTAgZXhlY3V0ZWQgYWRkLCBtdWx0LCBzdWIsIGNtcCBvciBzZWwgaW5zdHJ1Y3Rpb24KK2V2ZW50OjBYMDBDNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVMV9BTExfR1JQMTIgOiAoR3JvdXAgMTIgcG1fZnB1NCkgRlBVMSBleGVjdXRlZCBhZGQsIG11bHQsIHN1YiwgY21wIG9yIHNlbCBpbnN0cnVjdGlvbgorZXZlbnQ6MFgwMEM2IGNvdW50ZXJzOjYgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDEyIDogKEdyb3VwIDEyIHBtX2ZwdTQpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMDBDNyBjb3VudGVyczo3IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlAxMiA6IChHcm91cCAxMiBwbV9mcHU0KSBQcm9jZXNzb3IgY3ljbGVzCisKKyNHcm91cCAxMyBwbV9mcHU1LCBGbG9hdGluZyBQb2ludCBldmVudHMgYnkgdW5pdAorZXZlbnQ6MFgwMEQwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFUwX0RFTk9STV9HUlAxMyA6IChHcm91cCAxMyBwbV9mcHU1KSBGUFUwIHJlY2VpdmVkIGRlbm9ybWFsaXplZCBkYXRhCitldmVudDowWDAwRDEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVTFfREVOT1JNX0dSUDEzIDogKEdyb3VwIDEzIHBtX2ZwdTUpIEZQVTEgcmVjZWl2ZWQgZGVub3JtYWxpemVkIGRhdGEKK2V2ZW50OjBYMDBEMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVMF9GTU9WX0ZFU1RfR1JQMTMgOiAoR3JvdXAgMTMgcG1fZnB1NSkgRlBVMCBleGVjdXRlZCBGTU9WIG9yIEZFU1QgaW5zdHJ1Y3Rpb25zCitldmVudDowWDAwRDMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVTFfRk1PVl9GRVNUX0dSUDEzIDogKEdyb3VwIDEzIHBtX2ZwdTUpIEZQVTEgZXhlY3V0aW5nIEZNT1Ygb3IgRkVTVCBpbnN0cnVjdGlvbnMKK2V2ZW50OjBYMDBENCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlAxMyA6IChHcm91cCAxMyBwbV9mcHU1KSBQcm9jZXNzb3IgY3ljbGVzCitldmVudDowWDAwRDUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMTMgOiAoR3JvdXAgMTMgcG1fZnB1NSkgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgwMEQ2IGNvdW50ZXJzOjYgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFUwX0ZFU1RfR1JQMTMgOiAoR3JvdXAgMTMgcG1fZnB1NSkgRlBVMCBleGVjdXRlZCBGRVNUIGluc3RydWN0aW9uCitldmVudDowWDAwRDcgY291bnRlcnM6NyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVTFfRkVTVF9HUlAxMyA6IChHcm91cCAxMyBwbV9mcHU1KSBGUFUxIGV4ZWN1dGVkIEZFU1QgaW5zdHJ1Y3Rpb24KKworI0dyb3VwIDE0IHBtX2ZwdTcsIEZsb2F0aW5nIFBvaW50IGV2ZW50cyBieSB1bml0CitldmVudDowWDAwRTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVTBfU1RBTEwzX0dSUDE0IDogKEdyb3VwIDE0IHBtX2ZwdTcpIEZQVTAgc3RhbGxlZCBpbiBwaXBlMworZXZlbnQ6MFgwMEUxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFUxX1NUQUxMM19HUlAxNCA6IChHcm91cCAxNCBwbV9mcHU3KSBGUFUxIHN0YWxsZWQgaW4gcGlwZTMKK2V2ZW50OjBYMDBFMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVMF9GSU5fR1JQMTQgOiAoR3JvdXAgMTQgcG1fZnB1NykgRlBVMCBwcm9kdWNlZCBhIHJlc3VsdAorZXZlbnQ6MFgwMEUzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFUxX0ZJTl9HUlAxNCA6IChHcm91cCAxNCBwbV9mcHU3KSBGUFUxIHByb2R1Y2VkIGEgcmVzdWx0CitldmVudDowWDAwRTQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQMTQgOiAoR3JvdXAgMTQgcG1fZnB1NykgUHJvY2Vzc29yIGN5Y2xlcworZXZlbnQ6MFgwMEU1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDE0IDogKEdyb3VwIDE0IHBtX2ZwdTcpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMDBFNiBjb3VudGVyczo2IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlAxNCA6IChHcm91cCAxNCBwbV9mcHU3KSBQcm9jZXNzb3IgY3ljbGVzCitldmVudDowWDAwRTcgY291bnRlcnM6NyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVTBfRlBTQ1JfR1JQMTQgOiAoR3JvdXAgMTQgcG1fZnB1NykgRlBVMCBleGVjdXRlZCBGUFNDUiBpbnN0cnVjdGlvbgorCisjR3JvdXAgMTUgcG1fbHN1X2ZsdXNoLCBMU1UgRmx1c2ggRXZlbnRzCitldmVudDowWDAwRjAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVTBfRkxVU0hfTFJRX0dSUDE1IDogKEdyb3VwIDE1IHBtX2xzdV9mbHVzaCkgTFNVMCBMUlEgZmx1c2hlcworZXZlbnQ6MFgwMEYxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1UxX0ZMVVNIX0xSUV9HUlAxNSA6IChHcm91cCAxNSBwbV9sc3VfZmx1c2gpIExTVTEgTFJRIGZsdXNoZXMKK2V2ZW50OjBYMDBGMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlAxNSA6IChHcm91cCAxNSBwbV9sc3VfZmx1c2gpIFByb2Nlc3NvciBjeWNsZXMKK2V2ZW50OjBYMDBGMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlAxNSA6IChHcm91cCAxNSBwbV9sc3VfZmx1c2gpIFByb2Nlc3NvciBjeWNsZXMKK2V2ZW50OjBYMDBGNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVMF9GTFVTSF9TUlFfR1JQMTUgOiAoR3JvdXAgMTUgcG1fbHN1X2ZsdXNoKSBMU1UwIFNSUSBmbHVzaGVzCitldmVudDowWDAwRjUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVTFfRkxVU0hfU1JRX0dSUDE1IDogKEdyb3VwIDE1IHBtX2xzdV9mbHVzaCkgTFNVMSBTUlEgZmx1c2hlcworZXZlbnQ6MFgwMEY2IGNvdW50ZXJzOjYgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDE1IDogKEdyb3VwIDE1IHBtX2xzdV9mbHVzaCkgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgwMEY3IGNvdW50ZXJzOjcgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDE1IDogKEdyb3VwIDE1IHBtX2xzdV9mbHVzaCkgUHJvY2Vzc29yIGN5Y2xlcworCisjR3JvdXAgMTYgcG1fbHN1X2xvYWQxLCBMU1UgTG9hZCBFdmVudHMKK2V2ZW50OjBYMDEwMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVMF9GTFVTSF9VTERfR1JQMTYgOiAoR3JvdXAgMTYgcG1fbHN1X2xvYWQxKSBMU1UwIHVuYWxpZ25lZCBsb2FkIGZsdXNoZXMKK2V2ZW50OjBYMDEwMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVMV9GTFVTSF9VTERfR1JQMTYgOiAoR3JvdXAgMTYgcG1fbHN1X2xvYWQxKSBMU1UxIHVuYWxpZ25lZCBsb2FkIGZsdXNoZXMKK2V2ZW50OjBYMDEwMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTERfUkVGX0wxX0xTVTBfR1JQMTYgOiAoR3JvdXAgMTYgcG1fbHN1X2xvYWQxKSBMU1UwIEwxIEQgY2FjaGUgbG9hZCByZWZlcmVuY2VzCitldmVudDowWDAxMDMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xEX1JFRl9MMV9MU1UxX0dSUDE2IDogKEdyb3VwIDE2IHBtX2xzdV9sb2FkMSkgTFNVMSBMMSBEIGNhY2hlIGxvYWQgcmVmZXJlbmNlcworZXZlbnQ6MFgwMTA0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDE2IDogKEdyb3VwIDE2IHBtX2xzdV9sb2FkMSkgUHJvY2Vzc29yIGN5Y2xlcworZXZlbnQ6MFgwMTA1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDE2IDogKEdyb3VwIDE2IHBtX2xzdV9sb2FkMSkgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgwMTA2IGNvdW50ZXJzOjYgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MRF9NSVNTX0wxX0xTVTBfR1JQMTYgOiAoR3JvdXAgMTYgcG1fbHN1X2xvYWQxKSBMU1UwIEwxIEQgY2FjaGUgbG9hZCBtaXNzZXMKK2V2ZW50OjBYMDEwNyBjb3VudGVyczo3IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTERfTUlTU19MMV9MU1UxX0dSUDE2IDogKEdyb3VwIDE2IHBtX2xzdV9sb2FkMSkgTFNVMSBMMSBEIGNhY2hlIGxvYWQgbWlzc2VzCisKKyNHcm91cCAxNyBwbV9sc3Vfc3RvcmUxLCBMU1UgU3RvcmUgRXZlbnRzCitldmVudDowWDAxMTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVTBfRkxVU0hfVVNUX0dSUDE3IDogKEdyb3VwIDE3IHBtX2xzdV9zdG9yZTEpIExTVTAgdW5hbGlnbmVkIHN0b3JlIGZsdXNoZXMKK2V2ZW50OjBYMDExMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVMV9GTFVTSF9VU1RfR1JQMTcgOiAoR3JvdXAgMTcgcG1fbHN1X3N0b3JlMSkgTFNVMSB1bmFsaWduZWQgc3RvcmUgZmx1c2hlcworZXZlbnQ6MFgwMTEyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9TVF9SRUZfTDFfTFNVMF9HUlAxNyA6IChHcm91cCAxNyBwbV9sc3Vfc3RvcmUxKSBMU1UwIEwxIEQgY2FjaGUgc3RvcmUgcmVmZXJlbmNlcworZXZlbnQ6MFgwMTEzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9TVF9SRUZfTDFfTFNVMV9HUlAxNyA6IChHcm91cCAxNyBwbV9sc3Vfc3RvcmUxKSBMU1UxIEwxIEQgY2FjaGUgc3RvcmUgcmVmZXJlbmNlcworZXZlbnQ6MFgwMTE0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDE3IDogKEdyb3VwIDE3IHBtX2xzdV9zdG9yZTEpIFByb2Nlc3NvciBjeWNsZXMKK2V2ZW50OjBYMDExNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAxNyA6IChHcm91cCAxNyBwbV9sc3Vfc3RvcmUxKSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDAxMTYgY291bnRlcnM6NiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1NUX01JU1NfTDFfR1JQMTcgOiAoR3JvdXAgMTcgcG1fbHN1X3N0b3JlMSkgTDEgRCBjYWNoZSBzdG9yZSBtaXNzZXMKK2V2ZW50OjBYMDExNyBjb3VudGVyczo3IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRENfSU5WX0wyX0dSUDE3IDogKEdyb3VwIDE3IHBtX2xzdV9zdG9yZTEpIEwxIEQgY2FjaGUgZW50cmllcyBpbnZhbGlkYXRlZCBmcm9tIEwyCisKKyNHcm91cCAxOCBwbV9sc3Vfc3RvcmUyLCBMU1UgU3RvcmUgRXZlbnRzCitldmVudDowWDAxMjAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVTBfU1JRX1NURldEX0dSUDE4IDogKEdyb3VwIDE4IHBtX2xzdV9zdG9yZTIpIExTVTAgU1JRIHN0b3JlIGZvcndhcmRlZAorZXZlbnQ6MFgwMTIxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1UxX1NSUV9TVEZXRF9HUlAxOCA6IChHcm91cCAxOCBwbV9sc3Vfc3RvcmUyKSBMU1UxIFNSUSBzdG9yZSBmb3J3YXJkZWQKK2V2ZW50OjBYMDEyMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fU1RfUkVGX0wxX0xTVTBfR1JQMTggOiAoR3JvdXAgMTggcG1fbHN1X3N0b3JlMikgTFNVMCBMMSBEIGNhY2hlIHN0b3JlIHJlZmVyZW5jZXMKK2V2ZW50OjBYMDEyMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fU1RfUkVGX0wxX0xTVTFfR1JQMTggOiAoR3JvdXAgMTggcG1fbHN1X3N0b3JlMikgTFNVMSBMMSBEIGNhY2hlIHN0b3JlIHJlZmVyZW5jZXMKK2V2ZW50OjBYMDEyNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVMF9CVVNZX0dSUDE4IDogKEdyb3VwIDE4IHBtX2xzdV9zdG9yZTIpIExTVTAgYnVzeQorZXZlbnQ6MFgwMTI1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDE4IDogKEdyb3VwIDE4IHBtX2xzdV9zdG9yZTIpIFByb2Nlc3NvciBjeWNsZXMKK2V2ZW50OjBYMDEyNiBjb3VudGVyczo2IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAxOCA6IChHcm91cCAxOCBwbV9sc3Vfc3RvcmUyKSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDAxMjcgY291bnRlcnM6NyB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQMTggOiAoR3JvdXAgMTggcG1fbHN1X3N0b3JlMikgUHJvY2Vzc29yIGN5Y2xlcworCisjR3JvdXAgMTkgcG1fbHN1NywgSW5mb3JtYXRpb24gb24gdGhlIExvYWQgU3RvcmUgVW5pdAorZXZlbnQ6MFgwMTMwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1UwX0RFUkFUX01JU1NfR1JQMTkgOiAoR3JvdXAgMTkgcG1fbHN1NykgTFNVMCBERVJBVCBtaXNzZXMKK2V2ZW50OjBYMDEzMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVMV9ERVJBVF9NSVNTX0dSUDE5IDogKEdyb3VwIDE5IHBtX2xzdTcpIExTVTEgREVSQVQgbWlzc2VzCitldmVudDowWDAxMzIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQMTkgOiAoR3JvdXAgMTkgcG1fbHN1NykgUHJvY2Vzc29yIGN5Y2xlcworZXZlbnQ6MFgwMTMzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDE5IDogKEdyb3VwIDE5IHBtX2xzdTcpIFByb2Nlc3NvciBjeWNsZXMKK2V2ZW50OjBYMDEzNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAxOSA6IChHcm91cCAxOSBwbV9sc3U3KSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDAxMzUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQMTkgOiAoR3JvdXAgMTkgcG1fbHN1NykgUHJvY2Vzc29yIGN5Y2xlcworZXZlbnQ6MFgwMTM2IGNvdW50ZXJzOjYgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMV9EQ0FDSEVfUkVMT0FEX1ZBTElEX0dSUDE5IDogKEdyb3VwIDE5IHBtX2xzdTcpIEwxIHJlbG9hZCBkYXRhIHNvdXJjZSB2YWxpZAorZXZlbnQ6MFgwMTM3IGNvdW50ZXJzOjcgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDE5IDogKEdyb3VwIDE5IHBtX2xzdTcpIFByb2Nlc3NvciBjeWNsZXMKKworI0dyb3VwIDIwIHBtX21pc2MsIE1pc2MgRXZlbnRzIGZvciB0ZXN0aW5nCitldmVudDowWDAxNDAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0dDVF9FTVBUWV9DWUNfR1JQMjAgOiAoR3JvdXAgMjAgcG1fbWlzYykgQ3ljbGVzIEdDVCBlbXB0eQorZXZlbnQ6MFgwMTQxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1VfTE1RX1NSUV9FTVBUWV9DWUNfR1JQMjAgOiAoR3JvdXAgMjAgcG1fbWlzYykgQ3ljbGVzIExNUSBhbmQgU1JRIGVtcHR5CitldmVudDowWDAxNDIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0hWX0NZQ19HUlAyMCA6IChHcm91cCAyMCBwbV9taXNjKSBIeXBlcnZpc29yIEN5Y2xlcworZXZlbnQ6MFgwMTQzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDIwIDogKEdyb3VwIDIwIHBtX21pc2MpIFByb2Nlc3NvciBjeWNsZXMKK2V2ZW50OjBYMDE0NCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fMVBMVVNfUFBDX0NNUExfR1JQMjAgOiAoR3JvdXAgMjAgcG1fbWlzYykgT25lIG9yIG1vcmUgUFBDIGluc3RydWN0aW9uIGNvbXBsZXRlZAorZXZlbnQ6MFgwMTQ1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDIwIDogKEdyb3VwIDIwIHBtX21pc2MpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMDE0NiBjb3VudGVyczo2IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fR1JQX0NNUExfR1JQMjAgOiAoR3JvdXAgMjAgcG1fbWlzYykgR3JvdXAgY29tcGxldGVkCitldmVudDowWDAxNDcgY291bnRlcnM6NyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1RCX0JJVF9UUkFOU19HUlAyMCA6IChHcm91cCAyMCBwbV9taXNjKSBUaW1lIEJhc2UgYml0IHRyYW5zaXRpb24KKworI0dyb3VwIDIxIHBtX3BlX2JlbmNoMSwgUEUgQmVuY2htYXJrZXIgZ3JvdXAgZm9yIEZQIGFuYWx5c2lzCitldmVudDowWDAxNTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVV9GRElWX0dSUDIxIDogKEdyb3VwIDIxIHBtX3BlX2JlbmNoMSkgRlBVIGV4ZWN1dGVkIEZESVYgaW5zdHJ1Y3Rpb24KK2V2ZW50OjBYMDE1MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVX0ZNQV9HUlAyMSA6IChHcm91cCAyMSBwbV9wZV9iZW5jaDEpIEZQVSBleGVjdXRlZCBtdWx0aXBseS1hZGQgaW5zdHJ1Y3Rpb24KK2V2ZW50OjBYMDE1MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlhVX0ZJTl9HUlAyMSA6IChHcm91cCAyMSBwbV9wZV9iZW5jaDEpIEZYVSBwcm9kdWNlZCBhIHJlc3VsdAorZXZlbnQ6MFgwMTUzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFVfRklOX0dSUDIxIDogKEdyb3VwIDIxIHBtX3BlX2JlbmNoMSkgRlBVIHByb2R1Y2VkIGEgcmVzdWx0CitldmVudDowWDAxNTQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQMjEgOiAoR3JvdXAgMjEgcG1fcGVfYmVuY2gxKSBQcm9jZXNzb3IgY3ljbGVzCitldmVudDowWDAxNTUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVV9GU1FSVF9HUlAyMSA6IChHcm91cCAyMSBwbV9wZV9iZW5jaDEpIEZQVSBleGVjdXRlZCBGU1FSVCBpbnN0cnVjdGlvbgorZXZlbnQ6MFgwMTU2IGNvdW50ZXJzOjYgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDIxIDogKEdyb3VwIDIxIHBtX3BlX2JlbmNoMSkgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgwMTU3IGNvdW50ZXJzOjcgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFVfRk1PVl9GRVNUX0dSUDIxIDogKEdyb3VwIDIxIHBtX3BlX2JlbmNoMSkgRlBVIGV4ZWN1dGluZyBGTU9WIG9yIEZFU1QgaW5zdHJ1Y3Rpb25zCisKKyNHcm91cCAyMiBwbV9wZV9iZW5jaDQsIFBFIEJlbmNobWFya2VyIGdyb3VwIGZvciBMMSBhbmQgVExCCitldmVudDowWDAxNjAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RUTEJfTUlTU19HUlAyMiA6IChHcm91cCAyMiBwbV9wZV9iZW5jaDQpIERhdGEgVExCIG1pc3NlcworZXZlbnQ6MFgwMTYxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JVExCX01JU1NfR1JQMjIgOiAoR3JvdXAgMjIgcG1fcGVfYmVuY2g0KSBJbnN0cnVjdGlvbiBUTEIgbWlzc2VzCitldmVudDowWDAxNjIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xEX01JU1NfTDFfR1JQMjIgOiAoR3JvdXAgMjIgcG1fcGVfYmVuY2g0KSBMMSBEIGNhY2hlIGxvYWQgbWlzc2VzCitldmVudDowWDAxNjMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1NUX01JU1NfTDFfR1JQMjIgOiAoR3JvdXAgMjIgcG1fcGVfYmVuY2g0KSBMMSBEIGNhY2hlIHN0b3JlIG1pc3NlcworZXZlbnQ6MFgwMTY0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDIyIDogKEdyb3VwIDIyIHBtX3BlX2JlbmNoNCkgUHJvY2Vzc29yIGN5Y2xlcworZXZlbnQ6MFgwMTY1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDIyIDogKEdyb3VwIDIyIHBtX3BlX2JlbmNoNCkgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgwMTY2IGNvdW50ZXJzOjYgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9TVF9SRUZfTDFfR1JQMjIgOiAoR3JvdXAgMjIgcG1fcGVfYmVuY2g0KSBMMSBEIGNhY2hlIHN0b3JlIHJlZmVyZW5jZXMKK2V2ZW50OjBYMDE2NyBjb3VudGVyczo3IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTERfUkVGX0wxX0dSUDIyIDogKEdyb3VwIDIyIHBtX3BlX2JlbmNoNCkgTDEgRCBjYWNoZSBsb2FkIHJlZmVyZW5jZXMKKworI0dyb3VwIDIzIHBtX2hwbWNvdW50MSwgSHBtY291bnQgZ3JvdXAgZm9yIEwxIGFuZCBUTEIgYmVoYXZpb3IKK2V2ZW50OjBYMDE3MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRFRMQl9NSVNTX0dSUDIzIDogKEdyb3VwIDIzIHBtX2hwbWNvdW50MSkgRGF0YSBUTEIgbWlzc2VzCitldmVudDowWDAxNzEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9MTVFfU1JRX0VNUFRZX0NZQ19HUlAyMyA6IChHcm91cCAyMyBwbV9ocG1jb3VudDEpIEN5Y2xlcyBMTVEgYW5kIFNSUSBlbXB0eQorZXZlbnQ6MFgwMTcyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MRF9NSVNTX0wxX0dSUDIzIDogKEdyb3VwIDIzIHBtX2hwbWNvdW50MSkgTDEgRCBjYWNoZSBsb2FkIG1pc3NlcworZXZlbnQ6MFgwMTczIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9TVF9NSVNTX0wxX0dSUDIzIDogKEdyb3VwIDIzIHBtX2hwbWNvdW50MSkgTDEgRCBjYWNoZSBzdG9yZSBtaXNzZXMKK2V2ZW50OjBYMDE3NCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlAyMyA6IChHcm91cCAyMyBwbV9ocG1jb3VudDEpIFByb2Nlc3NvciBjeWNsZXMKK2V2ZW50OjBYMDE3NSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAyMyA6IChHcm91cCAyMyBwbV9ocG1jb3VudDEpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMDE3NiBjb3VudGVyczo2IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fU1RfUkVGX0wxX0dSUDIzIDogKEdyb3VwIDIzIHBtX2hwbWNvdW50MSkgTDEgRCBjYWNoZSBzdG9yZSByZWZlcmVuY2VzCitldmVudDowWDAxNzcgY291bnRlcnM6NyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xEX1JFRl9MMV9HUlAyMyA6IChHcm91cCAyMyBwbV9ocG1jb3VudDEpIEwxIEQgY2FjaGUgbG9hZCByZWZlcmVuY2VzCisKKyNHcm91cCAyNCBwbV9ocG1jb3VudDIsIEhwbWNvdW50IGdyb3VwIGZvciBjb21wdXRhdGlvbgorZXZlbnQ6MFgwMTgwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFVfRkRJVl9HUlAyNCA6IChHcm91cCAyNCBwbV9ocG1jb3VudDIpIEZQVSBleGVjdXRlZCBGRElWIGluc3RydWN0aW9uCitldmVudDowWDAxODEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVV9GTUFfR1JQMjQgOiAoR3JvdXAgMjQgcG1faHBtY291bnQyKSBGUFUgZXhlY3V0ZWQgbXVsdGlwbHktYWRkIGluc3RydWN0aW9uCitldmVudDowWDAxODIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVTBfRklOX0dSUDI0IDogKEdyb3VwIDI0IHBtX2hwbWNvdW50MikgRlBVMCBwcm9kdWNlZCBhIHJlc3VsdAorZXZlbnQ6MFgwMTgzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFUxX0ZJTl9HUlAyNCA6IChHcm91cCAyNCBwbV9ocG1jb3VudDIpIEZQVTEgcHJvZHVjZWQgYSByZXN1bHQKK2V2ZW50OjBYMDE4NCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlAyNCA6IChHcm91cCAyNCBwbV9ocG1jb3VudDIpIFByb2Nlc3NvciBjeWNsZXMKK2V2ZW50OjBYMDE4NSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVX1NURl9HUlAyNCA6IChHcm91cCAyNCBwbV9ocG1jb3VudDIpIEZQVSBleGVjdXRlZCBzdG9yZSBpbnN0cnVjdGlvbgorZXZlbnQ6MFgwMTg2IGNvdW50ZXJzOjYgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDI0IDogKEdyb3VwIDI0IHBtX2hwbWNvdW50MikgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgwMTg3IGNvdW50ZXJzOjcgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1VfTERGX0dSUDI0IDogKEdyb3VwIDI0IHBtX2hwbWNvdW50MikgTFNVIGV4ZWN1dGVkIEZsb2F0aW5nIFBvaW50IGxvYWQgaW5zdHJ1Y3Rpb24KKworI0dyb3VwIDI1IHBtX2wxYW5kYnIsIEwxIG1pc3NlcyBhbmQgYnJhbmNoIG1pc3NwcmVkaWN0IGFuYWx5c2lzCitldmVudDowWDAxOTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMjUgOiAoR3JvdXAgMjUgcG1fbDFhbmRicikgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgwMTkxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDI1IDogKEdyb3VwIDI1IHBtX2wxYW5kYnIpIFByb2Nlc3NvciBjeWNsZXMKK2V2ZW50OjBYMDE5MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTERfTUlTU19MMV9HUlAyNSA6IChHcm91cCAyNSBwbV9sMWFuZGJyKSBMMSBEIGNhY2hlIGxvYWQgbWlzc2VzCitldmVudDowWDAxOTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0JSX0lTU1VFRF9HUlAyNSA6IChHcm91cCAyNSBwbV9sMWFuZGJyKSBCcmFuY2hlcyBpc3N1ZWQKK2V2ZW50OjBYMDE5NCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVMF9CVVNZX0dSUDI1IDogKEdyb3VwIDI1IHBtX2wxYW5kYnIpIExTVTAgYnVzeQorZXZlbnQ6MFgwMTk1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDI1IDogKEdyb3VwIDI1IHBtX2wxYW5kYnIpIFByb2Nlc3NvciBjeWNsZXMKK2V2ZW50OjBYMDE5NiBjb3VudGVyczo2IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fQlJfTVBSRURfQ1JfR1JQMjUgOiAoR3JvdXAgMjUgcG1fbDFhbmRicikgQnJhbmNoIG1pc3ByZWRpY3Rpb25zIGR1ZSB0byBDUiBiaXQgc2V0dGluZworZXZlbnQ6MFgwMTk3IGNvdW50ZXJzOjcgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9CUl9NUFJFRF9UQV9HUlAyNSA6IChHcm91cCAyNSBwbV9sMWFuZGJyKSBCcmFuY2ggbWlzcHJlZGljdGlvbnMgZHVlIHRvIHRhcmdldCBhZGRyZXNzCisKKyNHcm91cCAyNiBwbV9pbWl4LCBJbnN0cnVjdGlvbiBtaXg6IGxvYWRzLCBzdG9yZXMgYW5kIGJyYW5jaGVzCitldmVudDowWDAxQTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMjYgOiAoR3JvdXAgMjYgcG1faW1peCkgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgwMUExIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDI2IDogKEdyb3VwIDI2IHBtX2ltaXgpIFByb2Nlc3NvciBjeWNsZXMKK2V2ZW50OjBYMDFBMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTERfTUlTU19MMV9HUlAyNiA6IChHcm91cCAyNiBwbV9pbWl4KSBMMSBEIGNhY2hlIGxvYWQgbWlzc2VzCitldmVudDowWDAxQTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0JSX0lTU1VFRF9HUlAyNiA6IChHcm91cCAyNiBwbV9pbWl4KSBCcmFuY2hlcyBpc3N1ZWQKK2V2ZW50OjBYMDFBNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlAyNiA6IChHcm91cCAyNiBwbV9pbWl4KSBQcm9jZXNzb3IgY3ljbGVzCitldmVudDowWDAxQTUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVTBfQlVTWV9HUlAyNiA6IChHcm91cCAyNiBwbV9pbWl4KSBMU1UwIGJ1c3kKK2V2ZW50OjBYMDFBNiBjb3VudGVyczo2IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fU1RfUkVGX0wxX0dSUDI2IDogKEdyb3VwIDI2IHBtX2ltaXgpIEwxIEQgY2FjaGUgc3RvcmUgcmVmZXJlbmNlcworZXZlbnQ6MFgwMUE3IGNvdW50ZXJzOjcgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MRF9SRUZfTDFfR1JQMjYgOiAoR3JvdXAgMjYgcG1faW1peCkgTDEgRCBjYWNoZSBsb2FkIHJlZmVyZW5jZXMKKworI0dyb3VwIDI3IHBtX2JyYW5jaCwgU0xCIGFuZCBicmFuY2ggbWlzc3ByZWRpY3QgYW5hbHlzaXMKK2V2ZW50OjBYMDFCMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQMjcgOiAoR3JvdXAgMjcgcG1fYnJhbmNoKSBSdW4gY3ljbGVzCitldmVudDowWDAxQjEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RTTEJfTUlTU19HUlAyNyA6IChHcm91cCAyNyBwbV9icmFuY2gpIERhdGEgU0xCIG1pc3NlcworZXZlbnQ6MFgwMUIyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9CUl9JU1NVRURfR1JQMjcgOiAoR3JvdXAgMjcgcG1fYnJhbmNoKSBCcmFuY2hlcyBpc3N1ZWQKK2V2ZW50OjBYMDFCMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fQlJfTVBSRURfQ1JfR1JQMjcgOiAoR3JvdXAgMjcgcG1fYnJhbmNoKSBCcmFuY2ggbWlzcHJlZGljdGlvbnMgZHVlIHRvIENSIGJpdCBzZXR0aW5nCitldmVudDowWDAxQjQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lTTEJfTUlTU19HUlAyNyA6IChHcm91cCAyNyBwbV9icmFuY2gpIEluc3RydWN0aW9uIFNMQiBtaXNzZXMKK2V2ZW50OjBYMDFCNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlAyNyA6IChHcm91cCAyNyBwbV9icmFuY2gpIFByb2Nlc3NvciBjeWNsZXMKK2V2ZW50OjBYMDFCNiBjb3VudGVyczo2IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAyNyA6IChHcm91cCAyNyBwbV9icmFuY2gpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMDFCNyBjb3VudGVyczo3IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fQlJfTVBSRURfVEFfR1JQMjcgOiAoR3JvdXAgMjcgcG1fYnJhbmNoKSBCcmFuY2ggbWlzcHJlZGljdGlvbnMgZHVlIHRvIHRhcmdldCBhZGRyZXNzCisKKyNHcm91cCAyOCBwbV9kYXRhLCBkYXRhIHNvdXJjZSBhbmQgTE1RCitldmVudDowWDAxQzAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RBVEFfRlJPTV9MMl9HUlAyOCA6IChHcm91cCAyOCBwbV9kYXRhKSBEYXRhIGxvYWRlZCBmcm9tIEwyCitldmVudDowWDAxQzEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RBVEFfRlJPTV9NRU1fR1JQMjggOiAoR3JvdXAgMjggcG1fZGF0YSkgRGF0YSBsb2FkZWQgZnJvbSBtZW1vcnkKK2V2ZW50OjBYMDFDMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAyOCA6IChHcm91cCAyOCBwbV9kYXRhKSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDAxQzMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQMjggOiAoR3JvdXAgMjggcG1fZGF0YSkgUHJvY2Vzc29yIGN5Y2xlcworZXZlbnQ6MFgwMUM0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDI4IDogKEdyb3VwIDI4IHBtX2RhdGEpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMDFDNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlAyOCA6IChHcm91cCAyOCBwbV9kYXRhKSBQcm9jZXNzb3IgY3ljbGVzCitldmVudDowWDAxQzYgY291bnRlcnM6NiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9MTVFfUzBfQUxMT0NfR1JQMjggOiAoR3JvdXAgMjggcG1fZGF0YSkgTE1RIHNsb3QgMCBhbGxvY2F0ZWQKK2V2ZW50OjBYMDFDNyBjb3VudGVyczo3IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVX0xNUV9TMF9WQUxJRF9HUlAyOCA6IChHcm91cCAyOCBwbV9kYXRhKSBMTVEgc2xvdCAwIHZhbGlkCisKKyNHcm91cCAyOSBwbV90bGIsIFRMQiBhbmQgTFJRIHBsdXMgZGF0YSBwcmVmZXRjaAorZXZlbnQ6MFgwMUQwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EVExCX01JU1NfR1JQMjkgOiAoR3JvdXAgMjkgcG1fdGxiKSBEYXRhIFRMQiBtaXNzZXMKK2V2ZW50OjBYMDFEMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSVRMQl9NSVNTX0dSUDI5IDogKEdyb3VwIDI5IHBtX3RsYikgSW5zdHJ1Y3Rpb24gVExCIG1pc3NlcworZXZlbnQ6MFgwMUQyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDI5IDogKEdyb3VwIDI5IHBtX3RsYikgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgwMUQzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDI5IDogKEdyb3VwIDI5IHBtX3RsYikgUHJvY2Vzc29yIGN5Y2xlcworZXZlbnQ6MFgwMUQ0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1VfTFJRX1MwX0FMTE9DX0dSUDI5IDogKEdyb3VwIDI5IHBtX3RsYikgTFJRIHNsb3QgMCBhbGxvY2F0ZWQKK2V2ZW50OjBYMDFENSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVX0xSUV9TMF9WQUxJRF9HUlAyOSA6IChHcm91cCAyOSBwbV90bGIpIExSUSBzbG90IDAgdmFsaWQKK2V2ZW50OjBYMDFENiBjb3VudGVyczo2IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDFfUFJFRl9HUlAyOSA6IChHcm91cCAyOSBwbV90bGIpIEwxIGNhY2hlIGRhdGEgcHJlZmV0Y2hlcworZXZlbnQ6MFgwMUQ3IGNvdW50ZXJzOjcgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMl9QUkVGX0dSUDI5IDogKEdyb3VwIDI5IHBtX3RsYikgTDIgY2FjaGUgcHJlZmV0Y2hlcworCisjR3JvdXAgMzAgcG1faXNvdXJjZSwgaW5zdCBzb3VyY2UgYW5kIHRhYmxld2FsaworZXZlbnQ6MFgwMUUwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JTlNUX0ZST01fTDJfR1JQMzAgOiAoR3JvdXAgMzAgcG1faXNvdXJjZSkgSW5zdHJ1Y3Rpb25zIGZldGNoZWQgZnJvbSBMMgorZXZlbnQ6MFgwMUUxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JTlNUX0ZST01fTUVNX0dSUDMwIDogKEdyb3VwIDMwIHBtX2lzb3VyY2UpIEluc3RydWN0aW9uIGZldGNoZWQgZnJvbSBtZW1vcnkKK2V2ZW50OjBYMDFFMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSFZfQ1lDX0dSUDMwIDogKEdyb3VwIDMwIHBtX2lzb3VyY2UpIEh5cGVydmlzb3IgQ3ljbGVzCitldmVudDowWDAxRTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMzAgOiAoR3JvdXAgMzAgcG1faXNvdXJjZSkgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgwMUU0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQVRBX1RBQkxFV0FMS19DWUNfR1JQMzAgOiAoR3JvdXAgMzAgcG1faXNvdXJjZSkgQ3ljbGVzIGRvaW5nIGRhdGEgdGFibGV3YWxrcworZXZlbnQ6MFgwMUU1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDMwIDogKEdyb3VwIDMwIHBtX2lzb3VyY2UpIFByb2Nlc3NvciBjeWNsZXMKK2V2ZW50OjBYMDFFNiBjb3VudGVyczo2IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fR1JQX0NNUExfR1JQMzAgOiAoR3JvdXAgMzAgcG1faXNvdXJjZSkgR3JvdXAgY29tcGxldGVkCitldmVudDowWDAxRTcgY291bnRlcnM6NyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RDX0lOVl9MMl9HUlAzMCA6IChHcm91cCAzMCBwbV9pc291cmNlKSBMMSBEIGNhY2hlIGVudHJpZXMgaW52YWxpZGF0ZWQgZnJvbSBMMgorCisjR3JvdXAgMzEgcG1fc3luYywgU3luYyBhbmQgU1JRCitldmVudDowWDAxRjAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9TUlFfUzBfQUxMT0NfR1JQMzEgOiAoR3JvdXAgMzEgcG1fc3luYykgU1JRIHNsb3QgMCBhbGxvY2F0ZWQKK2V2ZW50OjBYMDFGMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVX1NSUV9TMF9WQUxJRF9HUlAzMSA6IChHcm91cCAzMSBwbV9zeW5jKSBTUlEgc2xvdCAwIHZhbGlkCitldmVudDowWDAxRjIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xEX01JU1NfTDFfR1JQMzEgOiAoR3JvdXAgMzEgcG1fc3luYykgTDEgRCBjYWNoZSBsb2FkIG1pc3NlcworZXZlbnQ6MFgwMUYzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1VfU1JRX1NZTkNfQ1lDX0dSUDMxIDogKEdyb3VwIDMxIHBtX3N5bmMpIFNSUSBzeW5jIGR1cmF0aW9uCitldmVudDowWDAxRjQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMzEgOiAoR3JvdXAgMzEgcG1fc3luYykgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgwMUY1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDMxIDogKEdyb3VwIDMxIHBtX3N5bmMpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMDFGNiBjb3VudGVyczo2IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlAzMSA6IChHcm91cCAzMSBwbV9zeW5jKSBQcm9jZXNzb3IgY3ljbGVzCitldmVudDowWDAxRjcgY291bnRlcnM6NyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xEX1JFRl9MMV9HUlAzMSA6IChHcm91cCAzMSBwbV9zeW5jKSBMMSBEIGNhY2hlIGxvYWQgcmVmZXJlbmNlcworCisjR3JvdXAgMzIgcG1faWVyYXQsIElFUkFUCitldmVudDowWDAyMDAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lOU1RfRlJPTV9MMV9HUlAzMiA6IChHcm91cCAzMiBwbV9pZXJhdCkgSW5zdHJ1Y3Rpb24gZmV0Y2hlZCBmcm9tIEwxCitldmVudDowWDAyMDEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMzIgOiAoR3JvdXAgMzIgcG1faWVyYXQpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMDIwMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSUVSQVRfWExBVEVfV1JfR1JQMzIgOiAoR3JvdXAgMzIgcG1faWVyYXQpIFRyYW5zbGF0aW9uIHdyaXR0ZW4gdG8gaWVyYXQKK2V2ZW50OjBYMDIwMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlAzMiA6IChHcm91cCAzMiBwbV9pZXJhdCkgUHJvY2Vzc29yIGN5Y2xlcworZXZlbnQ6MFgwMjA0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDMyIDogKEdyb3VwIDMyIHBtX2llcmF0KSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDAyMDUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQMzIgOiAoR3JvdXAgMzIgcG1faWVyYXQpIFByb2Nlc3NvciBjeWNsZXMKK2V2ZW50OjBYMDIwNiBjb3VudGVyczo2IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAzMiA6IChHcm91cCAzMiBwbV9pZXJhdCkgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgwMjA3IGNvdW50ZXJzOjcgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDMyIDogKEdyb3VwIDMyIHBtX2llcmF0KSBQcm9jZXNzb3IgY3ljbGVzCisKKyNHcm91cCAzMyBwbV9kZXJhdCwgREVSQVQKK2V2ZW50OjBYMDIxMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fR0NUX0VNUFRZX0NZQ19HUlAzMyA6IChHcm91cCAzMyBwbV9kZXJhdCkgQ3ljbGVzIEdDVCBlbXB0eQorZXZlbnQ6MFgwMjExIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9HUlBfRElTUF9WQUxJRF9HUlAzMyA6IChHcm91cCAzMyBwbV9kZXJhdCkgR3JvdXAgZGlzcGF0Y2ggdmFsaWQKK2V2ZW50OjBYMDIxMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDFfRENBQ0hFX1JFTE9BRF9WQUxJRF9HUlAzMyA6IChHcm91cCAzMyBwbV9kZXJhdCkgTDEgcmVsb2FkIGRhdGEgc291cmNlIHZhbGlkCitldmVudDowWDAyMTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMzMgOiAoR3JvdXAgMzMgcG1fZGVyYXQpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMDIxNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU5TVF9ESVNQX0dSUDMzIDogKEdyb3VwIDMzIHBtX2RlcmF0KSBJbnN0cnVjdGlvbnMgZGlzcGF0Y2hlZAorZXZlbnQ6MFgwMjE1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1VfREVSQVRfTUlTU19HUlAzMyA6IChHcm91cCAzMyBwbV9kZXJhdCkgREVSQVQgbWlzc2VzCitldmVudDowWDAyMTYgY291bnRlcnM6NiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1NUX1JFRl9MMV9HUlAzMyA6IChHcm91cCAzMyBwbV9kZXJhdCkgTDEgRCBjYWNoZSBzdG9yZSByZWZlcmVuY2VzCitldmVudDowWDAyMTcgY291bnRlcnM6NyB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQMzMgOiAoR3JvdXAgMzMgcG1fZGVyYXQpIFByb2Nlc3NvciBjeWNsZXMKKworI0dyb3VwIDM0IHBtX21hcmsxLCBJbmZvcm1hdGlvbiBvbiBtYXJrZWQgaW5zdHJ1Y3Rpb25zCitldmVudDowWDAyMjAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19MRF9NSVNTX0wxX0dSUDM0IDogKEdyb3VwIDM0IHBtX21hcmsxKSBNYXJrZWQgTDEgRCBjYWNoZSBsb2FkIG1pc3NlcworZXZlbnQ6MFgwMjIxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9USFJFU0hfVElNRU9fR1JQMzQgOiAoR3JvdXAgMzQgcG1fbWFyazEpIFRocmVzaG9sZCB0aW1lb3V0CitldmVudDowWDAyMjIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQMzQgOiAoR3JvdXAgMzQgcG1fbWFyazEpIFByb2Nlc3NvciBjeWNsZXMKK2V2ZW50OjBYMDIyMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0dSUF9DTVBMX0dSUDM0IDogKEdyb3VwIDM0IHBtX21hcmsxKSBNYXJrZWQgZ3JvdXAgY29tcGxldGVkCitldmVudDowWDAyMjQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0dSUF9NUktfR1JQMzQgOiAoR3JvdXAgMzQgcG1fbWFyazEpIEdyb3VwIG1hcmtlZCBpbiBJRFUKK2V2ZW50OjBYMDIyNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0dSUF9JU1NVRURfR1JQMzQgOiAoR3JvdXAgMzQgcG1fbWFyazEpIE1hcmtlZCBncm91cCBpc3N1ZWQKK2V2ZW50OjBYMDIyNiBjb3VudGVyczo2IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0lOU1RfRklOX0dSUDM0IDogKEdyb3VwIDM0IHBtX21hcmsxKSBNYXJrZWQgaW5zdHJ1Y3Rpb24gZmluaXNoZWQKK2V2ZW50OjBYMDIyNyBjb3VudGVyczo3IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAzNCA6IChHcm91cCAzNCBwbV9tYXJrMSkgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorCisjR3JvdXAgMzUgcG1fbWFyazIsIE1hcmtlZCBJbnN0cnVjdGlvbnMgUHJvY2Vzc2luZyBGbG93CitldmVudDowWDAyMzAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19HUlBfRElTUF9HUlAzNSA6IChHcm91cCAzNSBwbV9tYXJrMikgTWFya2VkIGdyb3VwIGRpc3BhdGNoZWQKK2V2ZW50OjBYMDIzMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0JSVV9GSU5fR1JQMzUgOiAoR3JvdXAgMzUgcG1fbWFyazIpIE1hcmtlZCBpbnN0cnVjdGlvbiBCUlUgcHJvY2Vzc2luZyBmaW5pc2hlZAorZXZlbnQ6MFgwMjMyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDM1IDogKEdyb3VwIDM1IHBtX21hcmsyKSBQcm9jZXNzb3IgY3ljbGVzCitldmVudDowWDAyMzMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19DUlVfRklOX0dSUDM1IDogKEdyb3VwIDM1IHBtX21hcmsyKSBNYXJrZWQgaW5zdHJ1Y3Rpb24gQ1JVIHByb2Nlc3NpbmcgZmluaXNoZWQKK2V2ZW50OjBYMDIzNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fR1JQX01SS19HUlAzNSA6IChHcm91cCAzNSBwbV9tYXJrMikgR3JvdXAgbWFya2VkIGluIElEVQorZXZlbnQ6MFgwMjM1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfRlhVX0ZJTl9HUlAzNSA6IChHcm91cCAzNSBwbV9tYXJrMikgTWFya2VkIGluc3RydWN0aW9uIEZYVSBwcm9jZXNzaW5nIGZpbmlzaGVkCitldmVudDowWDAyMzYgY291bnRlcnM6NiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19GUFVfRklOX0dSUDM1IDogKEdyb3VwIDM1IHBtX21hcmsyKSBNYXJrZWQgaW5zdHJ1Y3Rpb24gRlBVIHByb2Nlc3NpbmcgZmluaXNoZWQKK2V2ZW50OjBYMDIzNyBjb3VudGVyczo3IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0xTVV9GSU5fR1JQMzUgOiAoR3JvdXAgMzUgcG1fbWFyazIpIE1hcmtlZCBpbnN0cnVjdGlvbiBMU1UgcHJvY2Vzc2luZyBmaW5pc2hlZAorCisjR3JvdXAgMzYgcG1fbWFyazMsIE1hcmtlZCBTdG9yZXMgUHJvY2Vzc2luZyBGbG93CitldmVudDowWDAyNDAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19TVF9DTVBMX0dSUDM2IDogKEdyb3VwIDM2IHBtX21hcmszKSBNYXJrZWQgc3RvcmUgaW5zdHJ1Y3Rpb24gY29tcGxldGVkCitldmVudDowWDAyNDEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQMzYgOiAoR3JvdXAgMzYgcG1fbWFyazMpIFByb2Nlc3NvciBjeWNsZXMKK2V2ZW50OjBYMDI0MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX1NUX0NNUExfSU5UX0dSUDM2IDogKEdyb3VwIDM2IHBtX21hcmszKSBNYXJrZWQgc3RvcmUgY29tcGxldGVkIHdpdGggaW50ZXJ2ZW50aW9uCitldmVudDowWDAyNDMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19HUlBfQ01QTF9HUlAzNiA6IChHcm91cCAzNiBwbV9tYXJrMykgTWFya2VkIGdyb3VwIGNvbXBsZXRlZAorZXZlbnQ6MFgwMjQ0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfR1JQX1RJTUVPX0dSUDM2IDogKEdyb3VwIDM2IHBtX21hcmszKSBNYXJrZWQgZ3JvdXAgY29tcGxldGlvbiB0aW1lb3V0CitldmVudDowWDAyNDUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19TVF9HUFNfR1JQMzYgOiAoR3JvdXAgMzYgcG1fbWFyazMpIE1hcmtlZCBzdG9yZSBzZW50IHRvIEdQUworZXZlbnQ6MFgwMjQ2IGNvdW50ZXJzOjYgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfTFNVX1NSUV9JTlNUX1ZBTElEX0dSUDM2IDogKEdyb3VwIDM2IHBtX21hcmszKSBNYXJrZWQgaW5zdHJ1Y3Rpb24gdmFsaWQgaW4gU1JRCitldmVudDowWDAyNDcgY291bnRlcnM6NyB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMzYgOiAoR3JvdXAgMzYgcG1fbWFyazMpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKKworI0dyb3VwIDM3IHBtX2xzdV9tYXJrMSwgTG9hZCBTdG9yZSBVbml0IE1hcmtlZCBFdmVudHMKK2V2ZW50OjBYMDI1MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX1NUX01JU1NfTDFfR1JQMzcgOiAoR3JvdXAgMzcgcG1fbHN1X21hcmsxKSBNYXJrZWQgTDEgRCBjYWNoZSBzdG9yZSBtaXNzZXMKK2V2ZW50OjBYMDI1MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0lNUl9SRUxPQURfR1JQMzcgOiAoR3JvdXAgMzcgcG1fbHN1X21hcmsxKSBNYXJrZWQgSU1SIHJlbG9hZGVkCitldmVudDowWDAyNTIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19MU1UwX0ZMVVNIX1VTVF9HUlAzNyA6IChHcm91cCAzNyBwbV9sc3VfbWFyazEpIExTVTAgbWFya2VkIHVuYWxpZ25lZCBzdG9yZSBmbHVzaGVzCitldmVudDowWDAyNTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19MU1UxX0ZMVVNIX1VTVF9HUlAzNyA6IChHcm91cCAzNyBwbV9sc3VfbWFyazEpIExTVTEgbWFya2VkIHVuYWxpZ25lZCBzdG9yZSBmbHVzaGVzCitldmVudDowWDAyNTQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQMzcgOiAoR3JvdXAgMzcgcG1fbHN1X21hcmsxKSBQcm9jZXNzb3IgY3ljbGVzCitldmVudDowWDAyNTUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMzcgOiAoR3JvdXAgMzcgcG1fbHN1X21hcmsxKSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDAyNTYgY291bnRlcnM6NiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19MU1UwX0ZMVVNIX1VMRF9HUlAzNyA6IChHcm91cCAzNyBwbV9sc3VfbWFyazEpIExTVTAgbWFya2VkIHVuYWxpZ25lZCBsb2FkIGZsdXNoZXMKK2V2ZW50OjBYMDI1NyBjb3VudGVyczo3IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0xTVTFfRkxVU0hfVUxEX0dSUDM3IDogKEdyb3VwIDM3IHBtX2xzdV9tYXJrMSkgTFNVMSBtYXJrZWQgdW5hbGlnbmVkIGxvYWQgZmx1c2hlcworCisjR3JvdXAgMzggcG1fbHN1X21hcmsyLCBMb2FkIFN0b3JlIFVuaXQgTWFya2VkIEV2ZW50cworZXZlbnQ6MFgwMjYwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfTERfTUlTU19MMV9MU1UwX0dSUDM4IDogKEdyb3VwIDM4IHBtX2xzdV9tYXJrMikgTFNVMCBMMSBEIGNhY2hlIGxvYWQgbWlzc2VzCitldmVudDowWDAyNjEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19MRF9NSVNTX0wxX0xTVTFfR1JQMzggOiAoR3JvdXAgMzggcG1fbHN1X21hcmsyKSBMU1UxIEwxIEQgY2FjaGUgbG9hZCBtaXNzZXMKK2V2ZW50OjBYMDI2MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0xTVTBfRkxVU0hfTFJRX0dSUDM4IDogKEdyb3VwIDM4IHBtX2xzdV9tYXJrMikgTFNVMCBtYXJrZWQgTFJRIGZsdXNoZXMKK2V2ZW50OjBYMDI2MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0xTVTFfRkxVU0hfTFJRX0dSUDM4IDogKEdyb3VwIDM4IHBtX2xzdV9tYXJrMikgTFNVMSBtYXJrZWQgTFJRIGZsdXNoZXMKK2V2ZW50OjBYMDI2NCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlAzOCA6IChHcm91cCAzOCBwbV9sc3VfbWFyazIpIFByb2Nlc3NvciBjeWNsZXMKK2V2ZW50OjBYMDI2NSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAzOCA6IChHcm91cCAzOCBwbV9sc3VfbWFyazIpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMDI2NiBjb3VudGVyczo2IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0xTVTBfRkxVU0hfU1JRX0dSUDM4IDogKEdyb3VwIDM4IHBtX2xzdV9tYXJrMikgTFNVMCBtYXJrZWQgU1JRIGZsdXNoZXMKK2V2ZW50OjBYMDI2NyBjb3VudGVyczo3IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0xTVTFfRkxVU0hfU1JRX0dSUDM4IDogKEdyb3VwIDM4IHBtX2xzdV9tYXJrMikgTFNVMSBtYXJrZWQgU1JRIGZsdXNoZXMKKworI0dyb3VwIDM5IHBtX2Z4dTEsIEZpeGVkIFBvaW50IGV2ZW50cyBieSB1bml0CitldmVudDowWDAyNzAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMzkgOiAoR3JvdXAgMzkgcG1fZnh1MSkgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgwMjcxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDM5IDogKEdyb3VwIDM5IHBtX2Z4dTEpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMDI3MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlhVX0ZJTl9HUlAzOSA6IChHcm91cCAzOSBwbV9meHUxKSBGWFUgcHJvZHVjZWQgYSByZXN1bHQKK2V2ZW50OjBYMDI3MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlhVMV9CVVNZX0ZYVTBfSURMRV9HUlAzOSA6IChHcm91cCAzOSBwbV9meHUxKSBGWFUxIGJ1c3kgRlhVMCBpZGxlCitldmVudDowWDAyNzQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZYVV9JRExFX0dSUDM5IDogKEdyb3VwIDM5IHBtX2Z4dTEpIEZYVSBpZGxlCitldmVudDowWDAyNzUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZYVV9CVVNZX0dSUDM5IDogKEdyb3VwIDM5IHBtX2Z4dTEpIEZYVSBidXN5CitldmVudDowWDAyNzYgY291bnRlcnM6NiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZYVTBfQlVTWV9GWFUxX0lETEVfR1JQMzkgOiAoR3JvdXAgMzkgcG1fZnh1MSkgRlhVMCBidXN5IEZYVTEgaWRsZQorZXZlbnQ6MFgwMjc3IGNvdW50ZXJzOjcgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDM5IDogKEdyb3VwIDM5IHBtX2Z4dTEpIFByb2Nlc3NvciBjeWNsZXMKKworI0dyb3VwIDQwIHBtX2Z4dTIsIEZpeGVkIFBvaW50IGV2ZW50cyBieSB1bml0CitldmVudDowWDAyODAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQNDAgOiAoR3JvdXAgNDAgcG1fZnh1MikgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgwMjgxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDQwIDogKEdyb3VwIDQwIHBtX2Z4dTIpIFByb2Nlc3NvciBjeWNsZXMKK2V2ZW50OjBYMDI4MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlhMUzFfRlVMTF9DWUNfR1JQNDAgOiAoR3JvdXAgNDAgcG1fZnh1MikgQ3ljbGVzIEZYVTEvTFMxIHF1ZXVlIGZ1bGwKK2V2ZW50OjBYMDI4MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlhMUzBfRlVMTF9DWUNfR1JQNDAgOiAoR3JvdXAgNDAgcG1fZnh1MikgQ3ljbGVzIEZYVTAvTFMwIHF1ZXVlIGZ1bGwKK2V2ZW50OjBYMDI4NCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlhVX0lETEVfR1JQNDAgOiAoR3JvdXAgNDAgcG1fZnh1MikgRlhVIGlkbGUKK2V2ZW50OjBYMDI4NSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlhVX0JVU1lfR1JQNDAgOiAoR3JvdXAgNDAgcG1fZnh1MikgRlhVIGJ1c3kKK2V2ZW50OjBYMDI4NiBjb3VudGVyczo2IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlhVMF9GSU5fR1JQNDAgOiAoR3JvdXAgNDAgcG1fZnh1MikgRlhVMCBwcm9kdWNlZCBhIHJlc3VsdAorZXZlbnQ6MFgwMjg3IGNvdW50ZXJzOjcgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GWFUxX0ZJTl9HUlA0MCA6IChHcm91cCA0MCBwbV9meHUyKSBGWFUxIHByb2R1Y2VkIGEgcmVzdWx0CisKKyNHcm91cCA0MSBwbV9pZnUsIHBtX2lmdQorZXZlbnQ6MFgwMjkwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JTlNUX0ZST01fTDFfR1JQNDEgOiAoR3JvdXAgNDEgcG1faWZ1KSBJbnN0cnVjdGlvbiBmZXRjaGVkIGZyb20gTDEKK2V2ZW50OjBYMDI5MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU5TVF9GUk9NX01FTV9HUlA0MSA6IChHcm91cCA0MSBwbV9pZnUpIEluc3RydWN0aW9uIGZldGNoZWQgZnJvbSBtZW1vcnkKK2V2ZW50OjBYMDI5MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU5TVF9GUk9NX1BSRUZfR1JQNDEgOiAoR3JvdXAgNDEgcG1faWZ1KSBJbnN0cnVjdGlvbnMgZmV0Y2hlZCBmcm9tIHByZWZldGNoCitldmVudDowWDAyOTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNXzBJTlNUX0ZFVENIX0dSUDQxIDogKEdyb3VwIDQxIHBtX2lmdSkgTm8gaW5zdHJ1Y3Rpb25zIGZldGNoZWQKK2V2ZW50OjBYMDI5NCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU5TVF9GRVRDSF9DWUNfR1JQNDEgOiAoR3JvdXAgNDEgcG1faWZ1KSBDeWNsZXMgYXQgbGVhc3QgMSBpbnN0cnVjdGlvbiBmZXRjaGVkCitldmVudDowWDAyOTUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lOU1RfRlJPTV9MMjVfTU9EX0dSUDQxIDogKEdyb3VwIDQxIHBtX2lmdSkgSW5zdHJ1Y3Rpb24gZmV0Y2hlZCBmcm9tIEwyLjUgbW9kaWZpZWQKK2V2ZW50OjBYMDI5NiBjb3VudGVyczo2IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlA0MSA6IChHcm91cCA0MSBwbV9pZnUpIFByb2Nlc3NvciBjeWNsZXMKK2V2ZW50OjBYMDI5NyBjb3VudGVyczo3IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlA0MSA6IChHcm91cCA0MSBwbV9pZnUpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKKworI0dyb3VwIDQyIHBtX2NwaV9zdGFjazEsIENQSSBzdGFjayBhbmFseXNpcworZXZlbnQ6MFgwMkEwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1UwX0JVU1lfR1JQNDIgOiAoR3JvdXAgNDIgcG1fY3BpX3N0YWNrMSkgTFNVMCBidXN5CitldmVudDowWDAyQTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVTFfQlVTWV9HUlA0MiA6IChHcm91cCA0MiBwbV9jcGlfc3RhY2sxKSBMU1UxIGJ1c3kKK2V2ZW50OjBYMDJBMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVX0ZMVVNIX0dSUDQyIDogKEdyb3VwIDQyIHBtX2NwaV9zdGFjazEpIEZsdXNoIGluaXRpYXRlZCBieSBMU1UKK2V2ZW50OjBYMDJBMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRkxVU0hfTFNVX0JSX01QUkVEX0dSUDQyIDogKEdyb3VwIDQyIHBtX2NwaV9zdGFjazEpIEZsdXNoIGNhdXNlZCBieSBMU1Ugb3IgYnJhbmNoIG1pc3ByZWRpY3QKK2V2ZW50OjBYMDJBNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fQ01QTFVfU1RBTExfTFNVX0dSUDQyIDogKEdyb3VwIDQyIHBtX2NwaV9zdGFjazEpIENvbXBsZXRpb24gc3RhbGwgY2F1c2VkIGJ5IExTVSBpbnN0cnVjdGlvbgorZXZlbnQ6MFgwMkE1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDQyIDogKEdyb3VwIDQyIHBtX2NwaV9zdGFjazEpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMDJBNiBjb3VudGVyczo2IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fQ01QTFVfU1RBTExfRVJBVF9NSVNTX0dSUDQyIDogKEdyb3VwIDQyIHBtX2NwaV9zdGFjazEpIENvbXBsZXRpb24gc3RhbGwgY2F1c2VkIGJ5IEVSQVQgbWlzcworZXZlbnQ6MFgwMkE3IGNvdW50ZXJzOjcgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDQyIDogKEdyb3VwIDQyIHBtX2NwaV9zdGFjazEpIFByb2Nlc3NvciBjeWNsZXMKKworI0dyb3VwIDQzIHBtX2NwaV9zdGFjazIsIENQSSBzdGFjayBhbmFseXNpcworZXZlbnQ6MFgwMkIwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9DTVBMVV9TVEFMTF9PVEhFUl9HUlA0MyA6IChHcm91cCA0MyBwbV9jcGlfc3RhY2syKSBDb21wbGV0aW9uIHN0YWxsIGNhdXNlZCBieSBvdGhlciByZWFzb24KK2V2ZW50OjBYMDJCMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlA0MyA6IChHcm91cCA0MyBwbV9jcGlfc3RhY2syKSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDAyQjIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xEX01JU1NfTDFfR1JQNDMgOiAoR3JvdXAgNDMgcG1fY3BpX3N0YWNrMikgTDEgRCBjYWNoZSBsb2FkIG1pc3NlcworZXZlbnQ6MFgwMkIzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDQzIDogKEdyb3VwIDQzIHBtX2NwaV9zdGFjazIpIFByb2Nlc3NvciBjeWNsZXMKK2V2ZW50OjBYMDJCNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fQ01QTFVfU1RBTExfRENBQ0hFX01JU1NfR1JQNDMgOiAoR3JvdXAgNDMgcG1fY3BpX3N0YWNrMikgQ29tcGxldGlvbiBzdGFsbCBjYXVzZWQgYnkgRCBjYWNoZSBtaXNzCitldmVudDowWDAyQjUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9ERVJBVF9NSVNTX0dSUDQzIDogKEdyb3VwIDQzIHBtX2NwaV9zdGFjazIpIERFUkFUIG1pc3NlcworZXZlbnQ6MFgwMkI2IGNvdW50ZXJzOjYgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9DTVBMVV9TVEFMTF9SRUpFQ1RfR1JQNDMgOiAoR3JvdXAgNDMgcG1fY3BpX3N0YWNrMikgQ29tcGxldGlvbiBzdGFsbCBjYXVzZWQgYnkgcmVqZWN0CitldmVudDowWDAyQjcgY291bnRlcnM6NyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xEX1JFRl9MMV9HUlA0MyA6IChHcm91cCA0MyBwbV9jcGlfc3RhY2syKSBMMSBEIGNhY2hlIGxvYWQgcmVmZXJlbmNlcworCisjR3JvdXAgNDQgcG1fY3BpX3N0YWNrMywgQ1BJIHN0YWNrIGFuYWx5c2lzCitldmVudDowWDAyQzAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQNDQgOiAoR3JvdXAgNDQgcG1fY3BpX3N0YWNrMykgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgwMkMxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9HQ1RfRU1QVFlfU1JRX0ZVTExfR1JQNDQgOiAoR3JvdXAgNDQgcG1fY3BpX3N0YWNrMykgR0NUIGVtcHR5IGNhdXNlZCBieSBTUlEgZnVsbAorZXZlbnQ6MFgwMkMyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GWFVfRklOX0dSUDQ0IDogKEdyb3VwIDQ0IHBtX2NwaV9zdGFjazMpIEZYVSBwcm9kdWNlZCBhIHJlc3VsdAorZXZlbnQ6MFgwMkMzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFVfRklOX0dSUDQ0IDogKEdyb3VwIDQ0IHBtX2NwaV9zdGFjazMpIEZQVSBwcm9kdWNlZCBhIHJlc3VsdAorZXZlbnQ6MFgwMkM0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9DTVBMVV9TVEFMTF9GWFVfR1JQNDQgOiAoR3JvdXAgNDQgcG1fY3BpX3N0YWNrMykgQ29tcGxldGlvbiBzdGFsbCBjYXVzZWQgYnkgRlhVIGluc3RydWN0aW9uCitldmVudDowWDAyQzUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZYVV9CVVNZX0dSUDQ0IDogKEdyb3VwIDQ0IHBtX2NwaV9zdGFjazMpIEZYVSBidXN5CitldmVudDowWDAyQzYgY291bnRlcnM6NiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0NNUExVX1NUQUxMX0RJVl9HUlA0NCA6IChHcm91cCA0NCBwbV9jcGlfc3RhY2szKSBDb21wbGV0aW9uIHN0YWxsIGNhdXNlZCBieSBESVYgaW5zdHJ1Y3Rpb24KK2V2ZW50OjBYMDJDNyBjb3VudGVyczo3IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlA0NCA6IChHcm91cCA0NCBwbV9jcGlfc3RhY2szKSBQcm9jZXNzb3IgY3ljbGVzCisKKyNHcm91cCA0NSBwbV9jcGlfc3RhY2s0LCBDUEkgc3RhY2sgYW5hbHlzaXMKK2V2ZW50OjBYMDJEMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVX0ZESVZfR1JQNDUgOiAoR3JvdXAgNDUgcG1fY3BpX3N0YWNrNCkgRlBVIGV4ZWN1dGVkIEZESVYgaW5zdHJ1Y3Rpb24KK2V2ZW50OjBYMDJEMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVX0ZNQV9HUlA0NSA6IChHcm91cCA0NSBwbV9jcGlfc3RhY2s0KSBGUFUgZXhlY3V0ZWQgbXVsdGlwbHktYWRkIGluc3RydWN0aW9uCitldmVudDowWDAyRDIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQNDUgOiAoR3JvdXAgNDUgcG1fY3BpX3N0YWNrNCkgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgwMkQzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JT1BTX0NNUExfR1JQNDUgOiAoR3JvdXAgNDUgcG1fY3BpX3N0YWNrNCkgSU9QUyBpbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDAyRDQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0NNUExVX1NUQUxMX0ZESVZfR1JQNDUgOiAoR3JvdXAgNDUgcG1fY3BpX3N0YWNrNCkgQ29tcGxldGlvbiBzdGFsbCBjYXVzZWQgYnkgRkRJViBvciBGUVJUIGluc3RydWN0aW9uCitldmVudDowWDAyRDUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVV9GU1FSVF9HUlA0NSA6IChHcm91cCA0NSBwbV9jcGlfc3RhY2s0KSBGUFUgZXhlY3V0ZWQgRlNRUlQgaW5zdHJ1Y3Rpb24KK2V2ZW50OjBYMDJENiBjb3VudGVyczo2IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fQ01QTFVfU1RBTExfRlBVX0dSUDQ1IDogKEdyb3VwIDQ1IHBtX2NwaV9zdGFjazQpIENvbXBsZXRpb24gc3RhbGwgY2F1c2VkIGJ5IEZQVSBpbnN0cnVjdGlvbgorZXZlbnQ6MFgwMkQ3IGNvdW50ZXJzOjcgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDQ1IDogKEdyb3VwIDQ1IHBtX2NwaV9zdGFjazQpIFByb2Nlc3NvciBjeWNsZXMKKworI0dyb3VwIDQ2IHBtX2NwaV9zdGFjazUsIENQSSBzdGFjayBhbmFseXNpcworZXZlbnQ6MFgwMkUwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9HQ1RfRU1QVFlfQ1lDX0dSUDQ2IDogKEdyb3VwIDQ2IHBtX2NwaV9zdGFjazUpIEN5Y2xlcyBHQ1QgZW1wdHkKK2V2ZW50OjBYMDJFMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlA0NiA6IChHcm91cCA0NiBwbV9jcGlfc3RhY2s1KSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDAyRTIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZMVVNIX0JSX01QUkVEX0dSUDQ2IDogKEdyb3VwIDQ2IHBtX2NwaV9zdGFjazUpIEZsdXNoIGNhdXNlZCBieSBicmFuY2ggbWlzcHJlZGljdAorZXZlbnQ6MFgwMkUzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9CUl9NUFJFRF9UQV9HUlA0NiA6IChHcm91cCA0NiBwbV9jcGlfc3RhY2s1KSBCcmFuY2ggbWlzcHJlZGljdGlvbnMgZHVlIHRvIHRhcmdldCBhZGRyZXNzCitldmVudDowWDAyRTQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0dDVF9FTVBUWV9JQ19NSVNTX0dSUDQ2IDogKEdyb3VwIDQ2IHBtX2NwaV9zdGFjazUpIEdDVCBlbXB0eSBkdWUgdG8gSSBjYWNoZSBtaXNzCitldmVudDowWDAyRTUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQNDYgOiAoR3JvdXAgNDYgcG1fY3BpX3N0YWNrNSkgUHJvY2Vzc29yIGN5Y2xlcworZXZlbnQ6MFgwMkU2IGNvdW50ZXJzOjYgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9HQ1RfRU1QVFlfQlJfTVBSRURfR1JQNDYgOiAoR3JvdXAgNDYgcG1fY3BpX3N0YWNrNSkgR0NUIGVtcHR5IGR1ZSB0byBicmFuY2ggbWlzcHJlZGljdAorZXZlbnQ6MFgwMkU3IGNvdW50ZXJzOjcgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMV9XUklURV9DWUNfR1JQNDYgOiAoR3JvdXAgNDYgcG1fY3BpX3N0YWNrNSkgQ3ljbGVzIHdyaXRpbmcgdG8gaW5zdHJ1Y3Rpb24gTDEKKworI0dyb3VwIDQ3IHBtX2RhdGEyLCBkYXRhIHNvdXJjZSBhbmQgTE1RCitldmVudDowWDAyRjAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQNDcgOiAoR3JvdXAgNDcgcG1fZGF0YTIpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMDJGMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlA0NyA6IChHcm91cCA0NyBwbV9kYXRhMikgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgwMkYyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDQ3IDogKEdyb3VwIDQ3IHBtX2RhdGEyKSBQcm9jZXNzb3IgY3ljbGVzCitldmVudDowWDAyRjMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQNDcgOiAoR3JvdXAgNDcgcG1fZGF0YTIpIFByb2Nlc3NvciBjeWNsZXMKK2V2ZW50OjBYMDJGNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fREFUQV9GUk9NX0wyNV9TSFJfR1JQNDcgOiAoR3JvdXAgNDcgcG1fZGF0YTIpIERhdGEgbG9hZGVkIGZyb20gTDIuNSBzaGFyZWQKK2V2ZW50OjBYMDJGNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fREFUQV9GUk9NX0wyNV9NT0RfR1JQNDcgOiAoR3JvdXAgNDcgcG1fZGF0YTIpIERhdGEgbG9hZGVkIGZyb20gTDIuNSBtb2RpZmllZAorZXZlbnQ6MFgwMkY2IGNvdW50ZXJzOjYgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1VfTE1RX1MwX0FMTE9DX0dSUDQ3IDogKEdyb3VwIDQ3IHBtX2RhdGEyKSBMTVEgc2xvdCAwIGFsbG9jYXRlZAorZXZlbnQ6MFgwMkY3IGNvdW50ZXJzOjcgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1VfTE1RX1MwX1ZBTElEX0dSUDQ3IDogKEdyb3VwIDQ3IHBtX2RhdGEyKSBMTVEgc2xvdCAwIHZhbGlkCisKKyNHcm91cCA0OCBwbV9mZXRjaF9icmFuY2gsIEluc3RydWN0aW9uIGZldGNoIGFuZCBicmFuY2ggZXZlbnRzCitldmVudDowWDAzMDAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lOU1RfRlJPTV9MMl9HUlA0OCA6IChHcm91cCA0OCBwbV9mZXRjaF9icmFuY2gpIEluc3RydWN0aW9ucyBmZXRjaGVkIGZyb20gTDIKK2V2ZW50OjBYMDMwMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU5TVF9GUk9NX01FTV9HUlA0OCA6IChHcm91cCA0OCBwbV9mZXRjaF9icmFuY2gpIEluc3RydWN0aW9uIGZldGNoZWQgZnJvbSBtZW1vcnkKK2V2ZW50OjBYMDMwMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU5TVF9GUk9NX1BSRUZfR1JQNDggOiAoR3JvdXAgNDggcG1fZmV0Y2hfYnJhbmNoKSBJbnN0cnVjdGlvbnMgZmV0Y2hlZCBmcm9tIHByZWZldGNoCitldmVudDowWDAzMDMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0JSX0lTU1VFRF9HUlA0OCA6IChHcm91cCA0OCBwbV9mZXRjaF9icmFuY2gpIEJyYW5jaGVzIGlzc3VlZAorZXZlbnQ6MFgwMzA0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDQ4IDogKEdyb3VwIDQ4IHBtX2ZldGNoX2JyYW5jaCkgUHJvY2Vzc29yIGN5Y2xlcworZXZlbnQ6MFgwMzA1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDQ4IDogKEdyb3VwIDQ4IHBtX2ZldGNoX2JyYW5jaCkgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgwMzA2IGNvdW50ZXJzOjYgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9CUl9NUFJFRF9DUl9HUlA0OCA6IChHcm91cCA0OCBwbV9mZXRjaF9icmFuY2gpIEJyYW5jaCBtaXNwcmVkaWN0aW9ucyBkdWUgdG8gQ1IgYml0IHNldHRpbmcKK2V2ZW50OjBYMDMwNyBjb3VudGVyczo3IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fQlJfTVBSRURfVEFfR1JQNDggOiAoR3JvdXAgNDggcG1fZmV0Y2hfYnJhbmNoKSBCcmFuY2ggbWlzcHJlZGljdGlvbnMgZHVlIHRvIHRhcmdldCBhZGRyZXNzCisKKyNHcm91cCA0OSBwbV9sMWwyX21pc3MsIEwxIGFuZCBMMiBtaXNzIGV2ZW50cworZXZlbnQ6MFgwMzEwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQVRBX0ZST01fTDJfR1JQNDkgOiAoR3JvdXAgNDkgcG1fbDFsMl9taXNzKSBEYXRhIGxvYWRlZCBmcm9tIEwyCitldmVudDowWDAzMTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RBVEFfRlJPTV9NRU1fR1JQNDkgOiAoR3JvdXAgNDkgcG1fbDFsMl9taXNzKSBEYXRhIGxvYWRlZCBmcm9tIG1lbW9yeQorZXZlbnQ6MFgwMzEyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDQ5IDogKEdyb3VwIDQ5IHBtX2wxbDJfbWlzcykgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgwMzEzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MRF9NSVNTX0wxX0xTVTBfR1JQNDkgOiAoR3JvdXAgNDkgcG1fbDFsMl9taXNzKSBMU1UwIEwxIEQgY2FjaGUgbG9hZCBtaXNzZXMKK2V2ZW50OjBYMDMxNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fMVBMVVNfUFBDX0NNUExfR1JQNDkgOiAoR3JvdXAgNDkgcG1fbDFsMl9taXNzKSBPbmUgb3IgbW9yZSBQUEMgaW5zdHJ1Y3Rpb24gY29tcGxldGVkCitldmVudDowWDAzMTUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQNDkgOiAoR3JvdXAgNDkgcG1fbDFsMl9taXNzKSBQcm9jZXNzb3IgY3ljbGVzCitldmVudDowWDAzMTYgY291bnRlcnM6NiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xEX01JU1NfTDFfTFNVMV9HUlA0OSA6IChHcm91cCA0OSBwbV9sMWwyX21pc3MpIExTVTEgTDEgRCBjYWNoZSBsb2FkIG1pc3NlcworZXZlbnQ6MFgwMzE3IGNvdW50ZXJzOjcgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MRF9SRUZfTDFfR1JQNDkgOiAoR3JvdXAgNDkgcG1fbDFsMl9taXNzKSBMMSBEIGNhY2hlIGxvYWQgcmVmZXJlbmNlcworCisjR3JvdXAgNTAgcG1fZGF0YV9mcm9tLCBEYXRhIEZyb20gTDIgaW5zdHJ1Y3Rpb25zCitldmVudDowWDAzMjAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RBVEFfRlJPTV9MMl9HUlA1MCA6IChHcm91cCA1MCBwbV9kYXRhX2Zyb20pIERhdGEgbG9hZGVkIGZyb20gTDIKK2V2ZW50OjBYMDMyMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fREFUQV9GUk9NX01FTV9HUlA1MCA6IChHcm91cCA1MCBwbV9kYXRhX2Zyb20pIERhdGEgbG9hZGVkIGZyb20gbWVtb3J5CitldmVudDowWDAzMjIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQNTAgOiAoR3JvdXAgNTAgcG1fZGF0YV9mcm9tKSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDAzMjMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQNTAgOiAoR3JvdXAgNTAgcG1fZGF0YV9mcm9tKSBQcm9jZXNzb3IgY3ljbGVzCitldmVudDowWDAzMjQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RBVEFfRlJPTV9MMjVfU0hSX0dSUDUwIDogKEdyb3VwIDUwIHBtX2RhdGFfZnJvbSkgRGF0YSBsb2FkZWQgZnJvbSBMMi41IHNoYXJlZAorZXZlbnQ6MFgwMzI1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQVRBX0ZST01fTDI1X01PRF9HUlA1MCA6IChHcm91cCA1MCBwbV9kYXRhX2Zyb20pIERhdGEgbG9hZGVkIGZyb20gTDIuNSBtb2RpZmllZAorZXZlbnQ6MFgwMzI2IGNvdW50ZXJzOjYgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MRF9NSVNTX0wxX0xTVTFfR1JQNTAgOiAoR3JvdXAgNTAgcG1fZGF0YV9mcm9tKSBMU1UxIEwxIEQgY2FjaGUgbG9hZCBtaXNzZXMKK2V2ZW50OjBYMDMyNyBjb3VudGVyczo3IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTERfUkVGX0wxX0dSUDUwIDogKEdyb3VwIDUwIHBtX2RhdGFfZnJvbSkgTDEgRCBjYWNoZSBsb2FkIHJlZmVyZW5jZXMKKworI0dyb3VwIDUxIHBtX21hcmtfZGF0YV9mcm9tLCBNYXJrZWQgRGF0YSBGcm9tIEwyIGluc3RydWN0aW9ucworZXZlbnQ6MFgwMzMwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfREFUQV9GUk9NX0wyX0dSUDUxIDogKEdyb3VwIDUxIHBtX21hcmtfZGF0YV9mcm9tKSBNYXJrZWQgZGF0YSBsb2FkZWQgZnJvbSBMMgorZXZlbnQ6MFgwMzMxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfREFUQV9GUk9NX01FTV9HUlA1MSA6IChHcm91cCA1MSBwbV9tYXJrX2RhdGFfZnJvbSkgTWFya2VkIGRhdGEgbG9hZGVkIGZyb20gbWVtb3J5CitldmVudDowWDAzMzIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQNTEgOiAoR3JvdXAgNTEgcG1fbWFya19kYXRhX2Zyb20pIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMDMzMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlA1MSA6IChHcm91cCA1MSBwbV9tYXJrX2RhdGFfZnJvbSkgUHJvY2Vzc29yIGN5Y2xlcworZXZlbnQ6MFgwMzM0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfREFUQV9GUk9NX0wyNV9TSFJfR1JQNTEgOiAoR3JvdXAgNTEgcG1fbWFya19kYXRhX2Zyb20pIE1hcmtlZCBkYXRhIGxvYWRlZCBmcm9tIEwyLjUgc2hhcmVkCitldmVudDowWDAzMzUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19EQVRBX0ZST01fTDI1X01PRF9HUlA1MSA6IChHcm91cCA1MSBwbV9tYXJrX2RhdGFfZnJvbSkgTWFya2VkIGRhdGEgbG9hZGVkIGZyb20gTDIuNSBtb2RpZmllZAorZXZlbnQ6MFgwMzM2IGNvdW50ZXJzOjYgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfSU5TVF9GSU5fR1JQNTEgOiAoR3JvdXAgNTEgcG1fbWFya19kYXRhX2Zyb20pIE1hcmtlZCBpbnN0cnVjdGlvbiBmaW5pc2hlZAorZXZlbnQ6MFgwMzM3IGNvdW50ZXJzOjcgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfTDFfUkVMT0FEX1ZBTElEX0dSUDUxIDogKEdyb3VwIDUxIHBtX21hcmtfZGF0YV9mcm9tKSBNYXJrZWQgTDEgcmVsb2FkIGRhdGEgc291cmNlIHZhbGlkCmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9ldmVudHMvcHBjNjQvOTcwTVAvdW5pdF9tYXNrcyBiL29wcm9maWxlLTAuOS43L2V2ZW50cy9wcGM2NC85NzBNUC91bml0X21hc2tzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxMmZlNTQKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9ldmVudHMvcHBjNjQvOTcwTVAvdW5pdF9tYXNrcwpAQCAtMCwwICsxLDkgQEAKKyMKKyMgQ29weXJpZ2h0IE9Qcm9maWxlIGF1dGhvcnMKKyMgQ29weXJpZ2h0IChjKSBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzLCAyMDA2LgorIyBDb250cmlidXRlZCBieSBEYXZlIE5vbXVyYSA8ZGNubHRjQHVzLmlibS5jb20+LgorIworIyBwcGM2NCA5NzAgcG9zc2libGUgdW5pdCBtYXNrcworIworbmFtZTp6ZXJvIHR5cGU6bWFuZGF0b3J5IGRlZmF1bHQ6MHgwCisJCSAweDAgTm8gdW5pdCBtYXNrCmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9ldmVudHMvcHBjNjQvY2VsbC1iZS9ldmVudHMgYi9vcHJvZmlsZS0wLjkuNy9ldmVudHMvcHBjNjQvY2VsbC1iZS9ldmVudHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2JjYjM5MwotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2V2ZW50cy9wcGM2NC9jZWxsLWJlL2V2ZW50cwpAQCAtMCwwICsxLDUxNyBAQAorI3BwYzY0IENlbGwgQnJvYWRiYW5kIEVuZ2luZSBldmVudHMKKyMKKyMgQ29weXJpZ2h0IE9Qcm9maWxlIGF1dGhvcnMKKyMKKyMoQykgQ09QWVJJR0hUIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycC4gMjAwNgorIyBDb250cmlidXRlZCBieSBNYXluYXJkIEpvaG5zb24gPG1heW5hcmRqQHVzLmlibS5jb20+CisjCisjCisjICBBcyBtYW55IGFzIDQgc2lnbmFscyBtYXkgYmUgc3BlY2lmaWVkIHdoZW4gdGhleSBhcmUgZnJvbSB0aGUgc2FtZSBncm91cC4KKyMgIEluIHNvbWUgaW5zdGFuY2VzLCBzaWduYWxzIGZyb20gb3RoZXIgZ3JvdXBzIGluIHRoZSBzYW1lIGlzbGFuZCBvciBvbmUKKyMgIG90aGVyIGlzbGFuZCBtYXkgYWxzbyBiZSBzcGVjaWZpZWQuCisjCisjICBFYWNoIHNpZ25hbCBpcyBhc3NpZ25lZCB0byBhIHVuaXF1ZSBjb3VudGVyLiAgVGhlcmUgYXJlIDQgMzItYml0IGhhcmR3YXJlCisjICBjb3VudGVycy4gIFRoZSBzaWduYWxzIGFyZSBkZWZpbmVkIGluIHRoZSBDZWxsIEJyb2FkYmFuZCBFbmdpbmUKKyMgIFBlcmZvcm1hbmNlIG1hbnVhbC4KKyMKKyMgIEVhY2ggZXZlbnQgaXMgZ2l2ZW4gYSB1bmlxdWUgZXZlbnQgbnVtYmVyLiAgVGhlIGV2ZW50IG51bWJlciBpcyB1c2VkIGJ5IHRoZQorIyAgT3Byb2ZpbGUgY29kZSB0byByZXNvbHZlIGV2ZW50IG5hbWVzIGZvciB0aGUgcG9zdHByb2Nlc3NpbmcuICBUaGlzIGlzIGRvbmUKKyMgIHRvIHByZXNlcnZlIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgcmVzdCBvZiB0aGUgT3Byb2ZpbGUgY29kZS4gIFRoZSBldmVudAorIyAgbnVtYmVyIGZvcm1hdCBncm91cF9udW0gZm9sbG93ZWQgYnkgdGhlIGNvdW50ZXIgbnVtYmVyIGZvciB0aGUgZXZlbnQgd2l0aGluCisjICB0aGUgZ3JvdXAuCisKKyMgU2lnbmFsIERlZmF1bHQKK2V2ZW50OjB4MSBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bToxMDAwMDAgbmFtZTpDWUNMRVMgOiBQcm9jZXNzb3IgQ3ljbGVzCitldmVudDoweDIgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NjAwMDAgbmFtZTpTUFVfQ1lDTEVTIDogU1BVIFByb2Nlc3NvciBDeWNsZXMKKworCisjIENlbGwgQkUgSXNsYW5kIDIgLSBQb3dlclBDIFByb2Nlc3NpbmcgVW5pdCAoUFBVKQorCisjIENCRSBTaWduYWwgR3JvdXAgMjEgLSBQUFUgSW5zdHJ1Y3Rpb24gVW5pdCAtIEdyb3VwIDEgKE5DbGspCitldmVudDoweDgzNCBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8wMV9lZGdlcyAgICAgICAgICAgbWluaW11bToxMDAwMCAJbmFtZTpCcmFuY2hfQ29tbWl0CQk6IEJyYW5jaCBpbnN0cnVjdGlvbiBjb21taXR0ZWQuIAorZXZlbnQ6MHg4MzUgY291bnRlcnM6MCwxLDIsMyB1bTpQUFVfMDFfZWRnZXMgICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpCcmFuY2hfRmx1c2gJCTogQnJhbmNoIGluc3RydWN0aW9uIHRoYXQgY2F1c2VkIGEgbWlzcHJlZGljdGlvbiBmbHVzaCBpcyBjb21taXR0ZWQuIEJyYW5jaCBtaXNwcmVkaWN0aW9uIGluY2x1ZGVzOiAoMSkgbWlzcHJlZGljdGlvbiBvZiB0YWtlbiBvciBub3QtdGFrZW4gb24gY29uZGl0aW9uYWwgYnJhbmNoLCAoMikgbWlzcHJlZGljdGlvbiBvZiBicmFuY2ggdGFyZ2V0IGFkZHJlc3Mgb24gYmNsclsxXSBhbmQgYmNjdHJbMV0uIAorZXZlbnQ6MHg4MzYgY291bnRlcnM6MCwxLDIsMyB1bTpQUFVfMDFfY3ljbGVzICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpJYnVmX0VtcHR5CQk6IEluc3RydWN0aW9uIGJ1ZmZlciBlbXB0eS4gCitldmVudDoweDgzNyBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8wMV9lZGdlcyAgICAgICAgICAgbWluaW11bToxMDAwMAluYW1lOklFUkFUX01pc3MJCTogSW5zdHJ1Y3Rpb24gZWZmZWN0aXZlLWFkZHJlc3MtdG8tcmVhbC1hZGRyZXNzIHRyYW5zbGF0aW9uIChJLUVSQVQpIG1pc3MuIAorZXZlbnQ6MHg4MzggY291bnRlcnM6MCwxLDIsMyB1bTpQUFVfMDFfY3ljbGVzX29yX2VkZ2VzIG1pbmltdW06MTAwMDAJbmFtZTpJTDFfTWlzc19DeWNsZXMJOiBMMSBJbnN0cnVjdGlvbiBjYWNoZSBtaXNzIGN5Y2xlcy4gQ291bnRzIHRoZSBjeWNsZXMgZnJvbSB0aGUgbWlzcyBldmVudCB1bnRpbCB0aGUgcmV0dXJuZWQgaW5zdHJ1Y3Rpb24gaXMgZGlzcGF0Y2hlZCBvciBjYW5jZWxsZWQgZHVlIHRvIGJyYW5jaCBtaXNwcmVkaWN0aW9uLCBjb21wbGV0aW9uIHJlc3RhcnQsIG9yIGV4Y2VwdGlvbnMgKHNlZSBOb3RlIDEpLiAKK2V2ZW50OjB4ODNhIGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzAxX2N5Y2xlcyAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6RGlzcGF0Y2hfQmxvY2tlZAk6IFZhbGlkIGluc3RydWN0aW9uIGF2YWlsYWJsZSBmb3IgZGlzcGF0Y2gsIGJ1dCBkaXNwYXRjaCBpcyBibG9ja2VkLgorZXZlbnQ6MHg4M2QgY291bnRlcnM6MCwxLDIsMyB1bTpQUFVfMDFfZWRnZXMgICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpJbnN0cl9GbHVzaGVkCQk6IEluc3RydWN0aW9uIGluIHBpcGVsaW5lIHN0YWdlIEVYNyBjYXVzZXMgYSBmbHVzaC4gCitldmVudDoweDgzZiBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8wMV9lZGdlcyAgICAgICAgICAgbWluaW11bToxMDAwMAluYW1lOlBQQ19Db21taXQJCTogVHdvIFBvd2VyUEMgaW5zdHJ1Y3Rpb25zIGNvbW1pdHRlZC4gRm9yIG1pY3JvY29kZSBzZXF1ZW5jZXMsIG9ubHkgdGhlIGxhc3QgbWljcm9jb2RlIG9wZXJhdGlvbiBpcyBjb3VudGVkLiBDb21taXR0ZWQgaW5zdHJ1Y3Rpb25zIGFyZSBjb3VudGVkIHR3byBhdCBhIHRpbWUuIElmIG9ubHkgb25lIGluc3RydWN0aW9uIGhhcyBjb21taXR0ZWQgZm9yIGEgZ2l2ZW4gY3ljbGUsIHRoaXMgZXZlbnQgd2lsbCBub3QgYmUgcmFpc2VkIHVudGlsIGFub3RoZXIgaW5zdHJ1Y3Rpb24gaGFzIGJlZW4gY29tbWl0dGVkIGluIGEgZnV0dXJlIGN5Y2xlLiAKKworCisjIENCRSBTaWduYWwgR3JvdXAgMjIgLSBQUFUgRXhlY3V0aW9uIFVuaXQgKE5DbGspCitldmVudDoweDg5YSBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8wMV9jeWNsZXMgICAgICAgICAgbWluaW11bToxMDAwMAluYW1lOkRFUkFUX01pc3MJCTogRGF0YSBlZmZlY3RpdmUtYWRkcmVzcy10by1yZWFsLWFkZHJlc3MgdHJhbnNsYXRpb24gKEQtRVJBVCkgbWlzcy4gTm90IHNwZWN1bGF0aXZlLiAKK2V2ZW50OjB4ODliIGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzAxX2N5Y2xlcyAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6U3RvcmVfUmVxdWVzdAkJOiBTdG9yZSByZXF1ZXN0IGNvdW50ZWQgYXQgdGhlIEwyIGludGVyZmFjZS4gQ291bnRzIG1pY3JvY29kZWQgUFBFIHNlcXVlbmNlcyBtb3JlIHRoYW4gb25jZSAoc2VlIE5vdGUgMSBmb3IgZXhjZXB0aW9ucykuIChUaHJlYWQgMCBhbmQgMSkKK2V2ZW50OjB4ODljIGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzAxX2N5Y2xlcyAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6TG9hZF9WYWxpZAkJOiBMb2FkIHZhbGlkIGF0IGEgcGFydGljdWxhciBwaXBlIHN0YWdlLiBTcGVjdWxhdGl2ZSwgc2luY2UgZmx1c2hlZCBvcGVyYXRpb25zIGFyZSBjb3VudGVkIGFzIHdlbGwuIENvdW50cyBtaWNyb2NvZGVkIFBQRSBzZXF1ZW5jZXMgbW9yZSB0aGFuIG9uY2UuIE1pc2FsaWduZWQgZmx1c2hlcyBtaWdodCBiZSBjb3VudGVkIHRoZSBmaXJzdCB0aW1lIGFzIHdlbGwuIExvYWQgb3BlcmF0aW9ucyBpbmNsdWRlIGFsbCBsb2FkcyB0aGF0IHJlYWQgZGF0YSBmcm9tIHRoZSBjYWNoZSwgZGNidCBhbmQgZGNidHN0LiBEb2VzIG5vdCBpbmNsdWRlIGxvYWQgVmVjdG9yL1NJTUQgbXVsdGltZWRpYSBleHRlbnNpb24gcGF0dGVybiBpbnN0cnVjdGlvbnMuIAorZXZlbnQ6MHg4OWQgY291bnRlcnM6MCwxLDIsMyB1bTpQUFVfMDFfY3ljbGVzICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpETDFfTWlzcwkJOiBMMSBELWNhY2hlIGxvYWQgbWlzcy4gUHVsc2VkIHdoZW4gdGhlcmUgaXMgYSBtaXNzIHJlcXVlc3QgdGhhdCBoYXMgYSB0YWcgbWlzcyBidXQgbm90IGFuIEVSQVQgbWlzcy4gU3BlY3VsYXRpdmUsIHNpbmNlIGZsdXNoZWQgb3BlcmF0aW9ucyBhcmUgY291bnRlZCBhcyB3ZWxsLiAKKworCisjIENlbGwgQkUgSXNsYW5kIDMgLSBQb3dlclBDIFN0b3JhZ2UgU3Vic3lzdGVtIChQUFNTKQorCisjIENCRSBTaWduYWwgR3JvdXAgMzEgLSBQUFNTIEJ1cyBJbnRlcmZhY2UgVW5pdCAoTkNsay8yKQorZXZlbnQ6MHhjMWMgY291bnRlcnM6MCwxLDIsMyB1bTpQUFVfMl9lZGdlcyAgICAgICAgICAgbWluaW11bToxMDAwMAluYW1lOnJjdl9tbWlvX3JkX2V2CTogTG9hZCBmcm9tIE1GQyBtZW1vcnktbWFwcGVkIEkvTyAoTU1JTykgc3BhY2UuCitldmVudDoweGMxZCBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8yX2VkZ2VzICAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6cmN2X21taW9fd3JfZXYJOiBTdG9yZXMgdG8gTUZDIE1NSU8gc3BhY2UuCitldmVudDoweGMyMiBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8yX2VkZ2VzICAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6ZXZlbl90b2tlbl9yZXFfZXYJOiBSZXF1ZXN0IHRva2VuIGZvciBldmVuIG1lbW9yeSBiYW5rIG51bWJlcnMgMC0xNC4KK2V2ZW50OjB4YzJiIGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzJfZWRnZXMgICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpyY3ZfZGF0YV9ldgkJOiBSZWNlaXZlIDgtYmVhdCBkYXRhIGZyb20gdGhlIEVsZW1lbnQgSW50ZXJjb25uZWN0IEJ1cyAoRUlCKS4KK2V2ZW50OjB4YzJjIGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzJfZWRnZXMgICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpzZW5kX2RhdGFfZXYJCTogU2VuZCA4LWJlYXQgZGF0YSB0byB0aGUgRUlCLgorZXZlbnQ6MHhjMmQgY291bnRlcnM6MCwxLDIsMyB1bTpQUFVfMl9lZGdlcyAgICAgICAgICAgbWluaW11bToxMDAwMAluYW1lOnNlbmRfY21kX2V2CQk6IFNlbmQgYSBjb21tYW5kIHRvIHRoZSBFSUI7IGluY2x1ZGVzIHJldHJpZWQgY29tbWFuZHMuCitldmVudDoweGMyZSBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8yX2N5Y2xlcyAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6ZGdudF9kbHlfY3kJCTogQ3ljbGVzIGJldHdlZW4gZGF0YSByZXF1ZXN0IGFuZCBkYXRhIGdyYW50LgorZXZlbnQ6MHhjMzMgY291bnRlcnM6MCwxLDIsMyB1bTpQUFVfMl9jeWNsZXMgICAgICAgICAgbWluaW11bToxMDAwMAluYW1lOm5jX3dyX25vdF9lbXBfY3kJOiBUaGUgZml2ZS1lbnRyeSBOb24tQ2FjaGVhYmxlIFVuaXQgKE5DVSkgU3RvcmUgQ29tbWFuZCBxdWV1ZSBub3QgZW1wdHkuCisKKworIyBDQkUgU2lnbmFsIEdyb3VwIDMyIC0gUFBTUyBMMiBDYWNoZSBDb250cm9sbGVyIC0gR3JvdXAgMSAoTkNsay8yKQorZXZlbnQ6MHhjODAgY291bnRlcnM6MCwxLDIsMyB1bTpQUFVfMDJfZWRnZXMgICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpjYWNoZV9oaXQJCTogQ2FjaGUgaGl0IGZvciBjb3JlIGludGVyZmFjZSB1bml0IChDSVUpIGxvYWRzIGFuZCBzdG9yZXMuCitldmVudDoweGM4MSBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8wMl9lZGdlcyAgICAgICAgICAgbWluaW11bToxMDAwMAluYW1lOmNhY2hlX21pc3MJCTogQ2FjaGUgbWlzcyBmb3IgQ0lVIGxvYWRzIGFuZCBzdG9yZXMuCitldmVudDoweGM4NCBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8wMl9lZGdlcyAgICAgICAgICAgbWluaW11bToxMDAwMAluYW1lOmxvYWRfbWlzcwkJOiBDSVUgbG9hZCBtaXNzLgorZXZlbnQ6MHhjODUgY291bnRlcnM6MCwxLDIsMyB1bTpQUFVfMDJfZWRnZXMgICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpzdG9yZV9taXNzCQk6IENJVSBzdG9yZSB0byBJbnZhbGlkIHN0YXRlIChtaXNzKS4KK2V2ZW50OjB4Yzg3IGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzAyX2VkZ2VzICAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6bGFyeF9taXNzX3RoMQkJOiBMb2FkIHdvcmQgYW5kIHJlc2VydmUgaW5kZXhlZCAobHdhcngvbGRhcngpIGZvciBUaHJlYWQgMCBoaXRzIEludmFsaWQgY2FjaGUgc3RhdGUKK2V2ZW50OjB4YzhlIGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzAyX2VkZ2VzICAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6c3RjeF9taXNzX3RoMQkJOiBTdG9yZSB3b3JkIGNvbmRpdGlvbmFsIGluZGV4ZWQgKHN0d2N4L3N0ZGN4KSBmb3IgVGhyZWFkIDAgaGl0cyBJbnZhbGlkIGNhY2hlIHN0YXRlIHdoZW4gcmVzZXJ2YXRpb24gaXMgc2V0LgorZXZlbnQ6MHhjOTkgY291bnRlcnM6MCwxLDIsMyB1bTpQUFVfMDJfY3ljbGVzICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTphbGxfc25wX2J1c3kJCTogQWxsIGZvdXIgc25vb3Agc3RhdGUgbWFjaGluZXMgYnVzeS4KKworIyBDQkUgU2lnbmFsIEdyb3VwIDMzIC0gUFBTUyBMMiBDYWNoZSBDb250cm9sbGVyIC0gR3JvdXAgMiAoTkNsay8yKQorZXZlbnQ6MHhjZTggY291bnRlcnM6MCwxLDIsMyB1bTpQUFVfMDJfZWRnZXMgICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpkY2xhaW1fc3J0CQk6IERhdGEgbGluZSBjbGFpbSAoZGNsYWltKSB0aGF0IHJlY2VpdmVkIGdvb2QgY29tYmluZWQgcmVzcG9uc2U7IGluY2x1ZGVzIHN0b3JlL3N0Y3gvZGNieiB0byBTaGFyZWQgKFMpLCBTaGFyZWQgTGFzdCAoU0wpLG9yIFRhZ2dlZCAoVCkgY2FjaGUgc3RhdGU7IGRvZXMgbm90IGluY2x1ZGUgZGNieiB0byBJbnZhbGlkIChJKSBjYWNoZSBzdGF0ZSAoc2VlIE5vdGUgMSkuCitldmVudDoweGNlZiBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8wMl9lZGdlcyAgICAgICAgICAgbWluaW11bToxMDAwMAluYW1lOmRjbGFpbV90b19yd2l0bQk6IERjbGFpbSBjb252ZXJ0ZWQgaW50byByd2l0bTsgbWF5IHN0aWxsIG5vdCBnZXQgdG8gdGhlIGJ1cyBpZiBzdGN4IGlzIGFib3J0ZWQgKHNlZSBOb3RlIDIpLgorZXZlbnQ6MHhjZjAgY291bnRlcnM6MCwxLDIsMyB1bTpQUFVfMDJfZWRnZXMgICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpzdG9yZV9teGUJCTogU3RvcmUgdG8gbW9kaWZpZWQgKE0pLCBtb2RpZmllZCB1bnNvbGljaXRlZCAoTVUpLCBvciBleGNsdXNpdmUgKEUpIGNhY2hlIHN0YXRlLgorZXZlbnQ6MHhjZjEgY291bnRlcnM6MCwxLDIsMyB1bTpQUFVfMDJfY3ljbGVzICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpzdHFfZnVsbAkJOiA4LWVudHJ5IHN0b3JlIHF1ZXVlIChTVFEpIGZ1bGwuCitldmVudDoweGNmMiBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8wMl9lZGdlcyAgICAgICAgICAgbWluaW11bToxMDAwMAluYW1lOnN0b3JlX3JjX2FjawkJOiBTdG9yZSBkaXNwYXRjaGVkIHRvIFJDIG1hY2hpbmUgaXMgYWNrbm93bGVkZ2VkLgorZXZlbnQ6MHhjZjMgY291bnRlcnM6MCwxLDIsMyB1bTpQUFVfMDJfZWRnZXMgICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpnYXRoZXJfc3RvcmUJCTogR2F0aGVyYWJsZSBzdG9yZSAodHlwZSA9IDAwMDAwKSByZWNlaXZlZCBmcm9tIENJVS4KK2V2ZW50OjB4Y2Y2IGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzAyX2VkZ2VzICAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6c25wX3B1c2gJCTogU25vb3AgcHVzaC4KK2V2ZW50OjB4Y2Y3IGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzAyX2VkZ2VzICAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6aW50dl9zbm9kZV9lcgkJOiBTZW5kIGludGVydmVudGlvbiBmcm9tIChTTCB8IEUpIGNhY2hlIHN0YXRlIHRvIGEgZGVzdGluYXRpb24gd2l0aGluIHRoZSBzYW1lIENCRSBjaGlwLgorZXZlbnQ6MHhjZjggY291bnRlcnM6MCwxLDIsMyB1bTpQUFVfMDJfZWRnZXMgICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTppbnR2X3Nub2RlX214CQk6IFNlbmQgaW50ZXJ2ZW50aW9uIGZyb20gKE0gfCBNVSkgY2FjaGUgc3RhdGUgdG8gYSBkZXN0aW5hdGlvbiB3aXRoaW4gdGhlIHNhbWUgQ0JFIGNoaXAuCitldmVudDoweGNmZCBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8wMl9lZGdlcyAgICAgICAgICAgbWluaW11bToxMDAwMAluYW1lOnNucF9yZXRyeQkJOiBSZXNwb25kIHdpdGggUmV0cnkgdG8gYSBzbm9vcGVkIHJlcXVlc3QgZHVlIHRvIG9uZSBvZiB0aGUgZm9sbG93aW5nIGNvbmZsaWN0czogcmVhZC1hbmQtY2xhaW0gc3RhdGUgbWFjaGluZSAoUkMpIGZ1bGwgYWRkcmVzcywgY2FzdG91dCAoQ08pIGNvbmdydWVuY2UgY2xhc3MsIHNub29wIChTTlApIG1hY2hpbmUgZnVsbCBhZGRyZXNzLCBhbGwgc25vb3AgbWFjaGluZXMgYnVzeSwgZGlyZWN0b3J5IGxvY2tvdXQsIG9yIHBhcml0eSBlcnJvci4KK2V2ZW50OjB4Y2ZlIGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzAyX2VkZ2VzICAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6c25wX2J1c3lfcmV0cnkJOiBSZXNwb25kIHdpdGggUmV0cnkgdG8gYSBzbm9vcGVkIHJlcXVlc3QgYmVjYXVzZSBhbGwgc25vb3AgbWFjaGluZXMgYXJlIGJ1c3kuCitldmVudDoweGNmZiBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8wMl9lZGdlcyAgICAgICAgICAgbWluaW11bToxMDAwMAluYW1lOnNucF9teF90b19lc3QJCTogU25vb3BlZCByZXNwb25zZSBjYXVzZXMgYSBjYWNoZSBzdGF0ZSB0cmFuc2l0aW9uIGZyb20gKE0gfCBNVSkgdG8gKEUgfCBTIHwgVCkuCitldmVudDoweGQwMCBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8wMl9lZGdlcyAgICAgICAgICAgbWluaW11bToxMDAwMAluYW1lOnNucF9lX3RvX3MJCTogU25vb3BlZCByZXNwb25zZSBjYXVzZXMgYSBjYWNoZSBzdGF0ZSB0cmFuc2l0aW9uIGZyb20gRSB0byBTLgorZXZlbnQ6MHhkMDEgY291bnRlcnM6MCwxLDIsMyB1bTpQUFVfMDJfZWRnZXMgICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpzbnBfZXNydF90b19pCQk6IFNub29wZWQgcmVzcG9uc2UgY2F1c2VzIGEgY2FjaGUgc3RhdGUgdHJhbnNpdGlvbiBmcm9tIChFIHwgU0wgfCBTIHwgVCkgdG8gSW52YWxpZCAoSSkuCitldmVudDoweGQwMiBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8wMl9lZGdlcyAgICAgICAgICAgbWluaW11bToxMDAwMAluYW1lOnNucF9teF90b19pCQk6IFNub29wZWQgcmVzcG9uc2UgY2F1c2VzIGEgY2FjaGUgc3RhdGUgdHJhbnNpdGlvbiBmcm9tIChNIHwgTVUpIHRvIEkuCisKKyMgQ0JFIFNpZ25hbCBHcm91cCAzNCAtIFBQU1MgTDIgQ2FjaGUgQ29udHJvbGxlciAtIEdyb3VwIDMgKE5DbGsvMikKK2V2ZW50OjB4ZDU0IGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzAyX2VkZ2VzICAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6bGFyeF9taXNzCQk6IExvYWQgYW5kIHJlc2VydmUgaW5kZXhlZCAobHdhcngvbGRhcngpIGZvciBUaHJlYWQgMSBoaXRzIEludmFsaWQgY2FjaGUgc3RhdGUuCitldmVudDoweGQ1YiBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8wMl9lZGdlcyAgICAgICAgICAgbWluaW11bToxMDAwMAluYW1lOnN0Y3hfbWlzc190aDIJCTogU3RvcmUgY29uZGl0aW9uYWwgaW5kZXhlZCAoc3R3Y3gvc3RkY3gpIGZvciBUaHJlYWQgMSBoaXRzIEludmFsaWQgY2FjaGUgc3RhdGUuCisKKyMgQ0JFIFNpZ25hbCBHcm91cCAzNSAtIFBQU1MgTm9uLUNhY2hlYWJsZSBVbml0IChOQ2xrLzIpCitldmVudDoweGRhYyBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8wX2VkZ2VzICAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6c3RfcmVxX2FueQkJOiBOb24tY2FjaGVhYmxlIHN0b3JlIHJlcXVlc3QgcmVjZWl2ZWQgZnJvbSBDSVU7IGluY2x1ZGVzIGFsbCBzeW5jaHJvbml6YXRpb24gb3BlcmF0aW9ucyBzdWNoIGFzIHN5bmMgYW5kIGVpZWlvLgorZXZlbnQ6MHhkYWQgY291bnRlcnM6MCwxLDIsMyB1bTpQUFVfMF9lZGdlcyAgICAgICAgICAgbWluaW11bToxMDAwMAluYW1lOnN0X3JlcV9zeW5jCQk6IHN5bmMgcmVjZWl2ZWQgZnJvbSBDSVUuCitldmVudDoweGRiMCBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8wX2VkZ2VzICAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6c3RfcmVxX3N0b3JlCQk6IE5vbi1jYWNoZWFibGUgc3RvcmUgcmVxdWVzdCByZWNlaXZlZCBmcm9tIENJVTsgaW5jbHVkZXMgb25seSBzdG9yZXMuCitldmVudDoweGRiMiBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8wX2VkZ2VzICAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6c3RfcmVxX2VpZWlvCQk6IGVpZWlvIHJlY2VpdmVkIGZyb20gQ0lVLgorZXZlbnQ6MHhkYjMgY291bnRlcnM6MCwxLDIsMyB1bTpQUFVfMF9lZGdlcyAgICAgICAgICAgbWluaW11bToxMDAwMAluYW1lOnN0X3JlcV90bGJpZQkJOiB0bGJpZSByZWNlaXZlZCBmcm9tIENJVS4KK2V2ZW50OjB4ZGI0IGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzBfY3ljbGVzICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpzdHFfYm90X3N5bmMJCTogc3luYyBhdCB0aGUgYm90dG9tIG9mIHRoZSBzdG9yZSBxdWV1ZSwgd2hpbGUgd2FpdGluZyBvbiBzdF9kb25lIHNpZ25hbCBmcm9tIHRoZSBCdXMgSW50ZXJmYWNlIFVuaXQgKEJJVSkgYW5kIHN5bmNfZG9uZSBzaWduYWwgZnJvbSBMMi4KK2V2ZW50OjB4ZGI1IGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzBfY3ljbGVzICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpzdHFfYm90X2xzeW5jCQk6IGx3c3luYyBhdCB0aGUgYm90dG9tIG9mIHRoZSBzdG9yZSBxdWV1ZSwgd2hpbGUgd2FpdGluZyBmb3IgYSBzeW5jX2RvbmUgc2lnbmFsIGZyb20gdGhlIEwyLgorZXZlbnQ6MHhkYjYgY291bnRlcnM6MCwxLDIsMyB1bTpQUFVfMF9jeWNsZXMgICAgICAgICAgbWluaW11bToxMDAwMAluYW1lOnN0cV9ib3RfZWllaW8JCTogZWllaW8gYXQgdGhlIGJvdHRvbSBvZiB0aGUgc3RvcmUgcXVldWUsIHdoaWxlIHdhaXRpbmcgZm9yIGEgc3RfZG9uZSBzaWduYWwgZnJvbSB0aGUgQklVIGFuZCBhIHN5bmNfZG9uZSBzaWduYWwgZnJvbSB0aGUgTDIuCitldmVudDoweGRiNyBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8wX2N5Y2xlcyAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6c3RxX2JvdF90bGJpZWcJOiB0bGJpZSBhdCB0aGUgYm90dG9tIG9mIHRoZSBzdG9yZSBxdWV1ZSwgd2hpbGUgd2FpdGluZyBmb3IgYSBzdF9kb25lIHNpZ25hbCBmcm9tIHRoZSBCSVUuCitldmVudDoweGRiOCBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8wX2VkZ2VzICAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6c3RfY29tYmluZWQJCTogTm9uLWNhY2hlYWJsZSBzdG9yZSBjb21iaW5lZCB3aXRoIHRoZSBwcmV2aW91cyBub24tY2FjaGVhYmxlIHN0b3JlIHdpdGggYSBjb250aWd1b3VzIGFkZHJlc3MuCitldmVudDoweGRiOSBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8wX2VkZ2VzICAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6bGRfY2FuY2VsCQk6IExvYWQgcmVxdWVzdCBjYW5jZWxlZCBieSBDSVUgZHVlIHRvIGxhdGUgZGV0ZWN0aW9uIG9mIGxvYWQtaGl0LXN0b3JlIGNvbmRpdGlvbiAoMTI4QiBib3VuZGFyeSkuCitldmVudDoweGRiYSBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8wX2VkZ2VzICAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6bGRfaGl0X3N0CQk6IE5DVSBkZXRlY3RzIGEgbG9hZCBoaXR0aW5nIGEgcHJldmlvdXMgc3RvcmUgdG8gYW4gb3ZlcmxhcHBpbmcgYWRkcmVzcyAoMzJCIGJvdW5kYXJ5KS4KK2V2ZW50OjB4ZGJiIGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzBfY3ljbGVzICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpzdGJfZnVsbAkJOiBBbGwgZm91ciBzdG9yZS1nYXRoZXIgYnVmZmVycyBmdWxsLgorZXZlbnQ6MHhkYmMgY291bnRlcnM6MCwxLDIsMyB1bTpQUFVfMF9lZGdlcyAgICAgICAgICAgbWluaW11bToxMDAwMAluYW1lOmxkX3JlcQkJOiBOb24tY2FjaGVhYmxlIGxvYWQgcmVxdWVzdCByZWNlaXZlZCBmcm9tIENJVTsgaW5jbHVkZXMgaW5zdHJ1Y3Rpb24gYW5kIGRhdGEgZmV0Y2hlcy4KK2V2ZW50OjB4ZGJkIGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzBfY3ljbGVzICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpzdHFfbm90X2VtcHR5CQk6IFRoZSBmb3VyLWRlZXAgc3RvcmUgcXVldWUgbm90IGVtcHR5LgorZXZlbnQ6MHhkYmUgY291bnRlcnM6MCwxLDIsMyB1bTpQUFVfMF9jeWNsZXMgICAgICAgICAgbWluaW11bToxMDAwMAluYW1lOnN0cV9mdWxsCQk6IFRoZSBmb3VyLWRlZXAgc3RvcmUgcXVldWUgZnVsbC4KK2V2ZW50OjB4ZGJmIGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzBfY3ljbGVzICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpzdGJfbm90X2VtcHR5CQk6IEF0IGxlYXN0IG9uZSBzdG9yZSBnYXRoZXIgYnVmZmVyIG5vdCBlbXB0eS4KKworIyBDZWxsIEJFIElzbGFuZCA0IC0gU3luZXJnaXN0aWMgUHJvY2Vzc29yIFVuaXQgKFNQVSkKKyMKKyMgT1BST0ZJTEUgRk9SIENFTEwgT05MWSBTVVBQT1JUUyBQUk9GSUxJTkcgT04gT05FIFNQVSBFVkVOVCBBVCBBIFRJTUUKKyMKKyMgQ0JFIFNpZ25hbCBHcm91cCA0MSAtIFNQVSAoTkNsaykKK2V2ZW50OjB4MTAwNCBjb3VudGVyczowIHVtOlNQVV8wMl9jeWNsZXMgICAgICAgICAgbWluaW11bToxMDAwMAluYW1lOmR1YWxfaW5zdHJjdG5fY29tbWl0CTogRHVhbCBpbnN0cnVjdGlvbiBjb21taXR0ZWQuCitldmVudDoweDEwMDUgY291bnRlcnM6MCB1bTpTUFVfMDJfY3ljbGVzICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpzbmdsX2luc3RyY3RuX2NvbW1pdAk6IFNpbmdsZSBpbnN0cnVjdGlvbiBjb21taXR0ZWQuCitldmVudDoweDEwMDYgY291bnRlcnM6MCB1bTpTUFVfMDJfY3ljbGVzICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpwcGxuMF9pbnN0cmN0bl9jb21taXQJOiBQaXBlbGluZSAwIGluc3RydWN0aW9uIGNvbW1pdHRlZC4KK2V2ZW50OjB4MTAwNyBjb3VudGVyczowIHVtOlNQVV8wMl9jeWNsZXMgICAgICAgICAgbWluaW11bToxMDAwMAluYW1lOnBwbG4xX2luc3RyY3RuX2NvbW1pdAk6IFBpcGVsaW5lIDEgaW5zdHJ1Y3Rpb24gY29tbWl0dGVkLgorZXZlbnQ6MHgxMDA4IGNvdW50ZXJzOjAgdW06U1BVXzAyX2N5Y2xlc19vcl9lZGdlcyBtaW5pbXVtOjEwMDAwCW5hbWU6aW5zdHJjdG5fZnRjaF9zdGxsCTogSW5zdHJ1Y3Rpb24gZmV0Y2ggc3RhbGwuCitldmVudDoweDEwMDkgY291bnRlcnM6MCB1bTpTUFVfMDJfY3ljbGVzX29yX2VkZ2VzIG1pbmltdW06MTAwMDAJbmFtZTpsY2xfc3RyZ19ic3kJCTogTG9jYWwgc3RvcmFnZSBidXN5LgorZXZlbnQ6MHgxMDBBIGNvdW50ZXJzOjAgdW06U1BVXzAyX2N5Y2xlcyAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6ZG1hX2NuZmxjdF9sZF9zdAk6IERNQSBtYXkgY29uZmxpY3Qgd2l0aCBsb2FkIG9yIHN0b3JlLgorZXZlbnQ6MHgxMDBCIGNvdW50ZXJzOjAgdW06U1BVXzAyX2N5Y2xlcyAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6c3RyX3RvX2xjbF9zdHJnCTogU3RvcmUgaW5zdHJ1Y3Rpb24gdG8gbG9jYWwgc3RvcmFnZSBpc3N1ZWQuCitldmVudDoweDEwMEMgY291bnRlcnM6MCB1bTpTUFVfMDJfY3ljbGVzICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpsZF9mcm1fbGNsX3N0cmcJOiBMb2FkIGludHJ1Y3Rpb24gZnJvbSBsb2NhbCBzdG9yYWdlIGlzc3VlZC4KK2V2ZW50OjB4MTAwRCBjb3VudGVyczowIHVtOlNQVV8wMl9jeWNsZXMgICAgICAgICAgbWluaW11bToxMDAwMAluYW1lOmZwdV9leGN0bgkJOiBGbG9hdGluZy1Qb2ludCBVbml0IChGUFUpIGV4Y2VwdGlvbi4KK2V2ZW50OjB4MTAwRSBjb3VudGVyczowIHVtOlNQVV8wMl9jeWNsZXMgICAgICAgICAgbWluaW11bToxMDAwMAluYW1lOmJybmNoX2luc3RyY3RuX2NvbW1pdAk6IEJyYW5jaCBpbnN0cnVjdGlvbiBjb21taXR0ZWQuCitldmVudDoweDEwMEYgY291bnRlcnM6MCB1bTpTUFVfMDJfY3ljbGVzICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpjaGFuZ2Vfb2ZfZmxvdwk6IE5vbi1zZXF1ZW50aWFsIGNoYW5nZSBvZiB0aGUgU1BVIHByb2dyYW0gY291bnRlciwgd2hpY2ggY2FuIGJlIGNhdXNlZCBieSBicmFuY2gsIGFzeW5jaHJvbm91cyBpbnRlcnJ1cHQsIHN0YWxsZWQgd2FpdCBvbiBjaGFubmVsLCBlcnJvciBjb3JyZWN0aW9uIGNvZGUgKEVDQykgZXJyb3IsIGFuZCBzbyBmb3J0aC4KK2V2ZW50OjB4MTAxMCBjb3VudGVyczowIHVtOlNQVV8wMl9jeWNsZXMgICAgICAgICAgbWluaW11bToxMDAwMAluYW1lOmJybmNoX25vdF90a24JCTogQnJhbmNoIG5vdCB0YWtlbi4KK2V2ZW50OjB4MTAxMSBjb3VudGVyczowIHVtOlNQVV8wMl9jeWNsZXMgICAgICAgICAgbWluaW11bToxMDAwMAluYW1lOmJybmNoX21zc19wcmRjdG4JOiBCcmFuY2ggbWlzcyBwcmVkaWN0aW9uOyBub3QgZXhhY3QuIENlcnRhaW4gb3RoZXIgY29kZSBzZXF1ZW5jZXMgY2FuIGNhdXNlIGFkZGl0aW9uYWwgcHVsc2VzIG9uIHRoaXMgc2lnbmFsIChzZWUgTm90ZSAyKS4KK2V2ZW50OjB4MTAxMiBjb3VudGVyczowIHVtOlNQVV8wMl9jeWNsZXMgICAgICAgICAgbWluaW11bToxMDAwMAluYW1lOmJybmNoX2hudF9tc3NfcHJkY3RuCTogQnJhbmNoIGhpbnQgbWlzcyBwcmVkaWN0aW9uOyBub3QgZXhhY3QuIENlcnRhaW4gb3RoZXIgY29kZSBzZXF1ZW5jZXMgY2FuIGNhdXNlIGFkZGl0aW9uYWwgcHVsc2VzIG9uIHRoaXMgc2lnbmFsIChzZWUgTm90ZSAyKS4KK2V2ZW50OjB4MTAxMyBjb3VudGVyczowIHVtOlNQVV8wMl9jeWNsZXMgICAgICAgICAgbWluaW11bToxMDAwMAluYW1lOmluc3RyY3RuX3NlcW5jX2Vycgk6IEluc3RydWN0aW9uIHNlcXVlbmNlIGVycm9yLgorZXZlbnQ6MHgxMDE1IGNvdW50ZXJzOjAgdW06U1BVXzAyX2N5Y2xlc19vcl9lZGdlcyBtaW5pbXVtOjEwMDAwCW5hbWU6c3RsbGRfd2FpdF9vbl9jaG5sX3dydAk6IFN0YWxsZWQgd2FpdGluZyBvbiBhbnkgYmxvY2tpbmcgY2hhbm5lbCB3cml0ZSAoc2VlIE5vdGUgMykuCitldmVudDoweDEwMTYgY291bnRlcnM6MCB1bTpTUFVfMDJfY3ljbGVzX29yX2VkZ2VzIG1pbmltdW06MTAwMDAJbmFtZTpzdGxsZF93YWl0X29uX2NobmwwCTogU3RhbGxlZCB3YWl0aW5nIG9uIEV4dGVybmFsIEV2ZW50IFN0YXR1cyAoQ2hhbm5lbCAwKSAoc2VlIE5vdGUgMykuCitldmVudDoweDEwMTcgY291bnRlcnM6MCB1bTpTUFVfMDJfY3ljbGVzX29yX2VkZ2VzIG1pbmltdW06MTAwMDAJbmFtZTpzdGxsZF93YWl0X29uX2NobmwzCTogU3RhbGxlZCB3YWl0aW5nIG9uIFNpZ25hbCBOb3RpZmljYXRpb24gMSAoQ2hhbm5lbCAzKSAoc2VlIE5vdGUgMykuCitldmVudDoweDEwMTggY291bnRlcnM6MCB1bTpTUFVfMDJfY3ljbGVzX29yX2VkZ2VzIG1pbmltdW06MTAwMDAJbmFtZTpzdGxsZF93YWl0X29uX2Nobmw0CTogU3RhbGxlZCB3YWl0aW5nIG9uIFNpZ25hbCBOb3RpZmljYXRpb24gMiAoQ2hhbm5lbCA0KSAoc2VlIE5vdGUgMykuCitldmVudDoweDEwMTkgY291bnRlcnM6MCB1bTpTUFVfMDJfY3ljbGVzX29yX2VkZ2VzIG1pbmltdW06MTAwMDAJbmFtZTpzdGxsZF93YWl0X29uX2NobmwyMQk6IFN0YWxsZWQgd2FpdGluZyBvbiBETUEgQ29tbWFuZCBPcGNvZGUgb3IgQ2xhc3NJRCBSZWdpc3RlciAoQ2hhbm5lbCAyMSkgKHNlZSBOb3RlIDMpLgorZXZlbnQ6MHgxMDFBIGNvdW50ZXJzOjAgdW06U1BVXzAyX2N5Y2xlc19vcl9lZGdlcyBtaW5pbXVtOjEwMDAwCW5hbWU6c3RsbGRfd2FpdF9vbl9jaG5sMjQJOiBTdGFsbGVkIHdhaXRpbmcgb24gVGFnIEdyb3VwIFN0YXR1cyAoQ2hhbm5lbCAyNCkgKHNlZSBOb3RlIDMpLgorZXZlbnQ6MHgxMDFCIGNvdW50ZXJzOjAgdW06U1BVXzAyX2N5Y2xlc19vcl9lZGdlcyBtaW5pbXVtOjEwMDAwCW5hbWU6c3RsbGRfd2FpdF9vbl9jaG5sMjUJOiBTdGFsbGVkIHdhaXRpbmcgb24gTGlzdCBTdGFsbC1hbmQtTm90aWZ5IFRhZyBTdGF0dXMgKENoYW5uZWwgMjUpIChzZWUgTm90ZSAzKS4KK2V2ZW50OjB4MTAxQyBjb3VudGVyczowIHVtOlNQVV8wMl9jeWNsZXNfb3JfZWRnZXMgbWluaW11bToxMDAwMAluYW1lOnN0bGxkX3dhaXRfb25fY2hubDI4CTogU3RhbGxlZCB3YWl0aW5nIG9uIFBQVSBNYWlsYm94IChDaGFubmVsIDI4KSAoc2VlIE5vdGUgMykuCitldmVudDoweDEwMjIgY291bnRlcnM6MCB1bTpTUFVfMDJfY3ljbGVzX29yX2VkZ2VzIG1pbmltdW06MTAwMDAJbmFtZTpzdGxsZF93YWl0X29uX2NobmwyOQk6IFN0YWxsZWQgd2FpdGluZyBvbiBTUFUgTWFpbGJveCAoQ2hhbm5lbCAyOSkgKHNlZSBOb3RlIDMpLgorCisKKyMgQ0JFIFNpZ25hbCBHcm91cCA0MiAtIFNQVSBUcmlnZ2VyIChOQ2xrKQorZXZlbnQ6MHgxMEExIGNvdW50ZXJzOjAgdW06U1BVX1RyaWdnZXJfY3ljbGVzX29yX2VkZ2VzIG1pbmltdW06MTAwMDAJbmFtZTpzdGxkX3dhaXRfY2hubF9vcAk6IFN0YWxsZWQgd2FpdGluZyBvbiBjaGFubmVsIG9wZXJhdGlvbiAoU2VlIE5vdGUgMikuCisKKyMgQ0JFIFNpZ25hbCBHcm91cCA0MyAtIFNQVSBFdmVudCAoTkNsaykKK2V2ZW50OjB4MTEwNyBjb3VudGVyczowIHVtOlNQVV9FdmVudF9jeWNsZXNfb3JfZWRnZXMgbWluaW11bToxMDAwMAluYW1lOmluc3RyY3RuX2Z0Y2hfc3RsbAk6IEluc3RydWN0aW9uIGZldGNoIHN0YWxsLgorCisjIENlbGwgQkUgSXNsYW5kIDYgLSBFbGVtZW50IEludGVyY29ubmVjdCBCdXMgKEVJQikKKworIyBDQkUgU2lnbmFsIEdyb3VwIDYxIC0gRUlCIEFkZHJlc3MgQ29uY2VudHJhdG9yIDAgKE5DbGsvMikKK2V2ZW50OjB4MTdkNCBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8wMl9lZGdlcyAgICAgICAgICAgbWluaW11bToxMDAwMAluYW1lOldBQzBfV19JQ01EX1BFUkYoMCkJOiBOdW1iZXIgb2YgcmVhZCBhbmQgcndpdG0gY29tbWFuZHMgKGluY2x1ZGluZyBhdG9taWMpIEFDMSB0byBBQzAuIChHcm91cCAxKQorZXZlbnQ6MHgxN2Q1IGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzAyX2VkZ2VzICAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6V0FDMF9XX0lDTURfUEVSRigxKQk6IE51bWJlciBvZiBkY2xhaW0gY29tbWFuZHMgKGluY2x1ZGluZyBhdG9taWMpIEFDMSB0byBBQzAuIChHcm91cCAxKQorZXZlbnQ6MHgxN2Q2IGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzAyX2VkZ2VzICAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6V0FDMF9XX0lDTURfUEVSRigyKQk6IE51bWJlciBvZiB3d2ssIHd3YywgYW5kIHd3ZiBjb21tYW5kcyBmcm9tIEFDMSB0byBBQzAuIChHcm91cCAxKQorZXZlbnQ6MHgxN2Q3IGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzAyX2VkZ2VzICAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6V0FDMF9XX0lDTURfUEVSRigzKQk6IE51bWJlciBvZiBzeW5jLCB0bGJzeW5jLCBhbmQgZWllaW8gY29tbWFuZHMgZnJvbSBBQzEgdG8gQUMwLiAoR3JvdXAgMSkKK2V2ZW50OjB4MTdkOCBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8wMl9lZGdlcyAgICAgICAgICAgbWluaW11bToxMDAwMAluYW1lOldBQzBfV19JQ01EX1BFUkYoNCkJOiBOdW1iZXIgb2YgdGxiaWUgY29tbWFuZHMgZnJvbSBBQzEgdG8gQUMwLiAoR3JvdXAgMSkKK2V2ZW50OjB4MTdkZiBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8wMl9lZGdlcyAgICAgICAgICAgbWluaW11bToxMDAwMAluYW1lOldBQzBfV19DQU1fUEVSRigxKQk6IFByZXZpb3VzIGFkamFjZW50IGFkZHJlc3MgbWF0Y2ggKFBBQU0pIENvbnRlbnQgQWRkcmVzc2FibGUgTWVtb3J5IChDQU0pIGhpdC4gKEdyb3VwIDEpCitldmVudDoweDE3ZTAgY291bnRlcnM6MCwxLDIsMyB1bTpQUFVfMDJfZWRnZXMgICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpXQUMwX1dfQ0FNX1BFUkYoMikJOiBQQUFNIENBTSBtaXNzLiAoR3JvdXAgMSkKK2V2ZW50OjB4MTdlMiBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8wMl9lZGdlcyAgICAgICAgICAgbWluaW11bToxMDAwMAluYW1lOldBQzBfV19DQU1fQ01EX1JFRkxFQ1RFRAk6IENvbW1hbmQgcmVmbGVjdGVkLiAoR3JvdXAgMSkKK2V2ZW50OjB4MTdlNCBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8wMl9lZGdlcyAgICAgICAgICAgbWluaW11bToxMDAwMAluYW1lOldBQzBfV19JQ01EX1BFUkYoMCkJOiBOdW1iZXIgb2YgcmVhZCBhbmQgcndpdG0gY29tbWFuZHMgKGluY2x1ZGluZyBhdG9taWMpIEFDMSB0byBBQzAuIChHcm91cCAyKQorZXZlbnQ6MHgxN2U1IGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzAyX2VkZ2VzICAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6V0FDMF9XX0lDTURfUEVSRigxKQk6IE51bWJlciBvZiBkY2xhaW0gY29tbWFuZHMgKGluY2x1ZGluZyBhdG9taWMpIEFDMSB0byBBQzAuIChHcm91cCAyKQorZXZlbnQ6MHgxN2U2IGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzAyX2VkZ2VzICAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6V0FDMF9XX0lDTURfUEVSRigyKQk6IE51bWJlciBvZiB3d2ssIHd3YywgYW5kIHd3ZiBjb21tYW5kcyBmcm9tIEFDMSB0byBBQzAuIChHcm91cCAyKQorZXZlbnQ6MHgxN2U3IGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzAyX2VkZ2VzICAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6V0FDMF9XX0lDTURfUEVSRigzKQk6IE51bWJlciBvZiBzeW5jLCB0bGJzeW5jLCBhbmQgZWllaW8gY29tbWFuZHMgZnJvbSBBQzEgdG8gQUMwLiAoR3JvdXAgMikKK2V2ZW50OjB4MTdlOCBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8wMl9lZGdlcyAgICAgICAgICAgbWluaW11bToxMDAwMAluYW1lOldBQzBfV19JQ01EX1BFUkYoNCkJOiBOdW1iZXIgb2YgdGxiaWUgY29tbWFuZHMgZnJvbSBBQzEgdG8gQUMwLiAoR3JvdXAgMikKK2V2ZW50OjB4MTdlZiBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8wMl9lZGdlcyAgICAgICAgICAgbWluaW11bToxMDAwMAluYW1lOldBQzBfV19DQU1fUEVSRigxKQk6IFBBQU0gQ0FNIGhpdC4gKEdyb3VwIDIpCitldmVudDoweDE3ZjAgY291bnRlcnM6MCwxLDIsMyB1bTpQUFVfMDJfZWRnZXMgICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpXQUMwX1dfQ0FNX1BFUkYoMikJOiBQQUFNIENBTSBtaXNzLiAoR3JvdXAgMikKK2V2ZW50OjB4MTdmMiBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8wMl9lZGdlcyAgICAgICAgICAgbWluaW11bToxMDAwMAluYW1lOldBQzBfV19DQU1fQ01EX1JFRkxFQ1RFRAk6IENvbW1hbmQgcmVmbGVjdGVkLiAoR3JvdXAgMikKKworIyBDQkUgU2lnbmFsIEdyb3VwIDYyIC0gRUlCIEFkZHJlc3MgQ29uY2VudHJhdG9yIDEgKE5DbGsvMikKK2V2ZW50OjB4MTgzOSBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8wMl9lZGdlcyAgICAgICAgICAgbWluaW11bToxMDAwMAluYW1lOldBQzFfV0FDMV9UUkNNVVhfV19UUkNHUlBfQUNQRVJGKDEpIDogTG9jYWwgY29tbWFuZCBmcm9tIFNQRSA2LgorZXZlbnQ6MHgxODNhIGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzAyX2VkZ2VzICAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6V0FDMV9XQUMxX1RSQ01VWF9XX1RSQ0dSUF9BQ1BFUkYoMikgOiBMb2NhbCBjb21tYW5kIGZyb20gU1BFIDQuCitldmVudDoweDE4M2IgY291bnRlcnM6MCwxLDIsMyB1bTpQUFVfMDJfZWRnZXMgICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpXQUMxX1dBQzFfVFJDTVVYX1dfVFJDR1JQX0FDUEVSRigzKSA6IExvY2FsIGNvbW1hbmQgZnJvbSBTUEUgMi4KK2V2ZW50OjB4MTgzYyBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8wMl9lZGdlcyAgICAgICAgICAgbWluaW11bToxMDAwMAluYW1lOldBQzFfV0FDMV9UUkNNVVhfV19UUkNHUlBfQUNQRVJGKDQpIDogTG9jYWwgY29tbWFuZCBmcm9tIFNQRSAwLgorZXZlbnQ6MHgxODNkIGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzAyX2VkZ2VzICAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6V0FDMV9XQUMxX1RSQ01VWF9XX1RSQ0dSUF9BQ1BFUkYoNSkgOiBMb2NhbCBjb21tYW5kIGZyb20gUFBFLgorZXZlbnQ6MHgxODNlIGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzAyX2VkZ2VzICAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6V0FDMV9XQUMxX1RSQ01VWF9XX1RSQ0dSUF9BQ1BFUkYoNikgOiBMb2NhbCBjb21tYW5kIGZyb20gU1BFIDEuCitldmVudDoweDE4M2YgY291bnRlcnM6MCwxLDIsMyB1bTpQUFVfMDJfZWRnZXMgICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpXQUMxX1dBQzFfVFJDTVVYX1dfVFJDR1JQX0FDUEVSRig3KSA6IExvY2FsIGNvbW1hbmQgZnJvbSBTUEUgMy4KK2V2ZW50OjB4MTg0MCBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8wMl9lZGdlcyAgICAgICAgICAgbWluaW11bToxMDAwMAluYW1lOldBQzFfV0FDMV9UUkNNVVhfV19UUkNHUlBfQUNQRVJGKDgpIDogTG9jYWwgY29tbWFuZCBmcm9tIFNQRSA1LgorZXZlbnQ6MHgxODQxIGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzAyX2VkZ2VzICAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6V0FDMV9XQUMxX1RSQ01VWF9XX1RSQ0dSUF9BQ1BFUkYoOSkgOiBMb2NhbCBjb21tYW5kIGZyb20gU1BFIDcuCitldmVudDoweDE4NDQgY291bnRlcnM6MCwxLDIsMyB1bTpQUFVfMDJfZWRnZXMgICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpXQUMxX1dBQzFfVFJDTVVYX1dfVFJDR1JQX0FDUEVSRigxMikgOiBBQzEtdG8tQUMwIGdsb2JhbCBjb21tYW5kIGZyb20gU1BFIDYuCitldmVudDoweDE4NDUgY291bnRlcnM6MCwxLDIsMyB1bTpQUFVfMDJfZWRnZXMgICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpXQUMxX1dBQzFfVFJDTVVYX1dfVFJDR1JQX0FDUEVSRigxMykgOiBBQzEtdG8tQUMwIGdsb2JhbCBjb21tYW5kIGZyb20gU1BFIDQuCitldmVudDoweDE4NDYgY291bnRlcnM6MCwxLDIsMyB1bTpQUFVfMDJfZWRnZXMgICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpXQUMxX1dBQzFfVFJDTVVYX1dfVFJDR1JQX0FDUEVSRigxNCkgOiBBQzEtdG8tQUMwIGdsb2JhbCBjb21tYW5kIGZyb20gU1BFIDIuCitldmVudDoweDE4NDcgY291bnRlcnM6MCwxLDIsMyB1bTpQUFVfMDJfZWRnZXMgICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpXQUMxX1dBQzFfVFJDTVVYX1dfVFJDR1JQX0FDUEVSRigxNSkgOiBBQzEtdG8tQUMwIGdsb2JhbCBjb21tYW5kIGZyb20gU1BFIDAuCitldmVudDoweDE4NDggY291bnRlcnM6MCwxLDIsMyB1bTpQUFVfMDJfZWRnZXMgICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpXQUMxX1dBQzFfVFJDTVVYX1dfVFJDR1JQX0FDUEVSRigxNikgOiBBQzEtdG8tQUMwIGdsb2JhbCBjb21tYW5kIGZyb20gUFBFLgorZXZlbnQ6MHgxODQ5IGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzAyX2VkZ2VzICAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6V0FDMV9XQUMxX1RSQ01VWF9XX1RSQ0dSUF9BQ1BFUkYoMTcpIDogQUMxLXRvLUFDMCBnbG9iYWwgY29tbWFuZCBmcm9tIFNQRSAxLgorZXZlbnQ6MHgxODRhIGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzAyX2VkZ2VzICAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6V0FDMV9XQUMxX1RSQ01VWF9XX1RSQ0dSUF9BQ1BFUkYoMTgpIDogQUMxLXRvLUFDMCBnbG9iYWwgY29tbWFuZCBmcm9tIFNQRSAzLgorZXZlbnQ6MHgxODRiIGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzAyX2VkZ2VzICAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6V0FDMV9XQUMxX1RSQ01VWF9XX1RSQ0dSUF9BQ1BFUkYoMTkpIDogQUMxLXRvLUFDMCBnbG9iYWwgY29tbWFuZCBmcm9tIFNQRSA1LgorZXZlbnQ6MHgxODRjIGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzAyX2VkZ2VzICAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6V0FDMV9XQUMxX1RSQ01VWF9XX1RSQ0dSUF9BQ1BFUkYoMjApIDogQUMxLXRvLUFDMCBnbG9iYWwgY29tbWFuZCBmcm9tIFNQRSA3LgorZXZlbnQ6MHgxODRmIGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzAyX2VkZ2VzICAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6V0FDMV9XQUMxX1RSQ01VWF9XX1RSQ0dSUF9BQ1BFUkYoMjMpIDogQUMxIHNlbmRzIGEgZ2xvYmFsIGNvbW1hbmQgdG8gQUMwLgorZXZlbnQ6MHgxODUwIGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzAyX2VkZ2VzICAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6V0FDMV9XQUMxX1RSQ01VWF9XX1RSQ0dSUF9BQ1BFUkYoMjQpIDogQUMwIHJlZmxlY3RzIGEgZ2xvYmFsIGNvbW1hbmQgYmFjayB0byBBQzEuCitldmVudDoweDE4NTEgY291bnRlcnM6MCwxLDIsMyB1bTpQUFVfMDJfZWRnZXMgICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpXQUMxX1dBQzFfVFJDTVVYX1dfVFJDR1JQX0FDUEVSRigyNSkgOiBBQzEgcmVmbGVjdHMgYSBjb21tYW5kIGJhY2sgdG8gdGhlIGJ1cyBtYXN0ZXJzLgorCisjIENCRSBTaWduYWwgR3JvdXAgNjMgLSBFSUIgRGF0YSBSaW5nIEFyYml0cmF0b3IgLSBHcm91cCAxIChOQ2xrLzIpCitldmVudDoweDE4OWMgY291bnRlcnM6MCwxLDIsMyB1bTpQUFVfMDJfZWRnZXMgICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpXREFfRFRSQ19UUkNHUlBFKDApCTogR3JhbnQgb24gZGF0YSByaW5nIDAuCitldmVudDoweDE4OWQgY291bnRlcnM6MCwxLDIsMyB1bTpQUFVfMDJfZWRnZXMgICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpXREFfRFRSQ19UUkNHUlBFKDEpCTogR3JhbnQgb24gZGF0YSByaW5nIDEuCitldmVudDoweDE4OWUgY291bnRlcnM6MCwxLDIsMyB1bTpQUFVfMDJfZWRnZXMgICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpXREFfRFRSQ19UUkNHUlBFKDIpCTogR3JhbnQgb24gZGF0YSByaW5nIDIuCitldmVudDoweDE4OWYgY291bnRlcnM6MCwxLDIsMyB1bTpQUFVfMDJfZWRnZXMgICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpXREFfRFRSQ19UUkNHUlBFKDMpCTogR3JhbnQgb24gZGF0YSByaW5nIDMuCitldmVudDoweDE4YTAgY291bnRlcnM6MCwxLDIsMyB1bTpQUFVfMDJfY3ljbGVzICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpXREFfRFRSQ19UUkNHUlBFKDQpCTogRGF0YSByaW5nIDAgaXMgaW4gdXNlLgorZXZlbnQ6MHgxOGExIGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzAyX2N5Y2xlcyAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6V0RBX0RUUkNfVFJDR1JQRSg1KQk6IERhdGEgcmluZyAxIGlzIGluIHVzZS4KK2V2ZW50OjB4MThhMiBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8wMl9jeWNsZXMgICAgICAgICAgbWluaW11bToxMDAwMAluYW1lOldEQV9EVFJDX1RSQ0dSUEUoNikJOiBEYXRhIHJpbmcgMiBpcyBpbiB1c2UuCitldmVudDoweDE4YTMgY291bnRlcnM6MCwxLDIsMyB1bTpQUFVfMDJfY3ljbGVzICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpXREFfRFRSQ19UUkNHUlBFKDcpCTogRGF0YSByaW5nIDMgaXMgaW4gdXNlLgorZXZlbnQ6MHgxOGE0IGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzAyX2N5Y2xlcyAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6V0RBX0RUUkNfVFJDR1JQRSg4KQk6IEFsbCBkYXRhIHJpbmdzIGFyZSBpZGxlLgorZXZlbnQ6MHgxOGE1IGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzAyX2N5Y2xlcyAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6V0RBX0RUUkNfVFJDR1JQRSg5KQk6IE9uZSBkYXRhIHJpbmcgaXMgYnVzeS4KK2V2ZW50OjB4MThhNiBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8wMl9jeWNsZXMgICAgICAgICAgbWluaW11bToxMDAwMAluYW1lOldEQV9EVFJDX1RSQ0dSUEUoMTApCTogVHdvIG9yIHRocmVlIGRhdGEgcmluZ3MgYXJlIGJ1c3kuCitldmVudDoweDE4YTcgY291bnRlcnM6MCwxLDIsMyB1bTpQUFVfMDJfY3ljbGVzICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpXREFfRFRSQ19UUkNHUlBFKDExKQk6IEFsbCBkYXRhIHJpbmdzIGFyZSBidXN5LgorZXZlbnQ6MHgxOGE4IGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzAyX2N5Y2xlc19vcl9lZGdlcyBtaW5pbXVtOjEwMDAwCW5hbWU6V0RBX0RUUkNfVFJDR1JQRSgxMikJOiBCSUMgZGF0YSByZXF1ZXN0IHBlbmRpbmcuCitldmVudDoweDE4YTkgY291bnRlcnM6MCwxLDIsMyB1bTpQUFVfMDJfY3ljbGVzX29yX2VkZ2VzIG1pbmltdW06MTAwMDAJbmFtZTpXREFfRFRSQ19UUkNHUlBFKDEzKQk6IFNQRSA2IGRhdGEgcmVxdWVzdCBwZW5kaW5nLgorZXZlbnQ6MHgxOGFhIGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzAyX2N5Y2xlc19vcl9lZGdlcyBtaW5pbXVtOjEwMDAwCW5hbWU6V0RBX0RUUkNfVFJDR1JQRSgxNCkJOiBTUEUgNCBkYXRhIHJlcXVlc3QgcGVuZGluZy4KK2V2ZW50OjB4MThhYiBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8wMl9jeWNsZXNfb3JfZWRnZXMgbWluaW11bToxMDAwMAluYW1lOldEQV9EVFJDX1RSQ0dSUEUoMTUpCTogU1BFIDIgZGF0YSByZXF1ZXN0IHBlbmRpbmcuCitldmVudDoweDE4YWMgY291bnRlcnM6MCwxLDIsMyB1bTpQUFVfMDJfY3ljbGVzX29yX2VkZ2VzIG1pbmltdW06MTAwMDAJbmFtZTpXREFfRFRSQ19UUkNHUlBFKDE2KQk6IFNQRSAwIGRhdGEgcmVxdWVzdCBwZW5kaW5nLgorZXZlbnQ6MHgxOGFkIGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzAyX2N5Y2xlc19vcl9lZGdlcyBtaW5pbXVtOjEwMDAwCW5hbWU6V0RBX0RUUkNfVFJDR1JQRSgxNykJOiBNSUMgZGF0YSByZXF1ZXN0IHBlbmRpbmcuCitldmVudDoweDE4YWUgY291bnRlcnM6MCwxLDIsMyB1bTpQUFVfMDJfY3ljbGVzX29yX2VkZ2VzIG1pbmltdW06MTAwMDAJbmFtZTpXREFfRFRSQ19UUkNHUlBFKDE4KQk6IFBQRSBkYXRhIHJlcXVlc3QgcGVuZGluZy4KK2V2ZW50OjB4MThhZiBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8wMl9jeWNsZXNfb3JfZWRnZXMgbWluaW11bToxMDAwMAluYW1lOldEQV9EVFJDX1RSQ0dSUEUoMTkpCTogU1BFIDEgZGF0YSByZXF1ZXN0IHBlbmRpbmcuCitldmVudDoweDE4YjAgY291bnRlcnM6MCwxLDIsMyB1bTpQUFVfMDJfY3ljbGVzX29yX2VkZ2VzIG1pbmltdW06MTAwMDAJbmFtZTpXREFfRFRSQ19UUkNHUlBFKDIwKQk6IFNQRSAzIGRhdGEgcmVxdWVzdCBwZW5kaW5nLgorZXZlbnQ6MHgxOGIxIGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzAyX2N5Y2xlc19vcl9lZGdlcyBtaW5pbXVtOjEwMDAwCW5hbWU6V0RBX0RUUkNfVFJDR1JQRSgyMSkJOiBTUEUgNSBkYXRhIHJlcXVlc3QgcGVuZGluZy4KK2V2ZW50OjB4MThiMiBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8wMl9jeWNsZXNfb3JfZWRnZXMgbWluaW11bToxMDAwMAluYW1lOldEQV9EVFJDX1RSQ0dSUEUoMjIpCTogU1BFIDcgZGF0YSByZXF1ZXN0IHBlbmRpbmcuCitldmVudDoweDE4YjMgY291bnRlcnM6MCwxLDIsMyB1bTpQUFVfMDJfY3ljbGVzX29yX2VkZ2VzIG1pbmltdW06MTAwMDAJbmFtZTpXREFfRFRSQ19UUkNHUlBFKDIzKQk6IElPQyBkYXRhIHJlcXVlc3QgcGVuZGluZy4KK2V2ZW50OjB4MThiNCBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8wMl9lZGdlcyAgICAgICAgICAgbWluaW11bToxMDAwMAluYW1lOldEQV9EVFJDX1RSQ0dSUEUoMjQpCTogQklDIGlzIGRhdGEgZGVzdGluYXRpb24uCitldmVudDoweDE4YjUgY291bnRlcnM6MCwxLDIsMyB1bTpQUFVfMDJfZWRnZXMgICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpXREFfRFRSQ19UUkNHUlBFKDI1KQk6IFNQRSA2IGlzIGRhdGEgZGVzdGluYXRpb24uCitldmVudDoweDE4YjYgY291bnRlcnM6MCwxLDIsMyB1bTpQUFVfMDJfZWRnZXMgICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpXREFfRFRSQ19UUkNHUlBFKDI2KQk6IFNQRSA0IGlzIGRhdGEgZGVzdGluYXRpb24uCitldmVudDoweDE4YjcgY291bnRlcnM6MCwxLDIsMyB1bTpQUFVfMDJfZWRnZXMgICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpXREFfRFRSQ19UUkNHUlBFKDI3KQk6IFNQRSAyIGlzIGRhdGEgZGVzdGluYXRpb24uCitldmVudDoweDE4YjggY291bnRlcnM6MCwxLDIsMyB1bTpQUFVfMDJfZWRnZXMgICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpXREFfRFRSQ19UUkNHUlBFKDI4KQk6IFNQRSAwIGlzIGRhdGEgZGVzdGluYXRpb24uCitldmVudDoweDE4YjkgY291bnRlcnM6MCwxLDIsMyB1bTpQUFVfMDJfZWRnZXMgICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpXREFfRFRSQ19UUkNHUlBFKDI5KQk6IE1JQyBpcyBkYXRhIGRlc3RpbmF0aW9uLgorZXZlbnQ6MHgxOGJhIGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzAyX2VkZ2VzICAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6V0RBX0RUUkNfVFJDR1JQRSgzMCkJOiBQUEUgaXMgZGF0YSBkZXN0aW5hdGlvbi4KK2V2ZW50OjB4MThiYiBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8wMl9lZGdlcyAgICAgICAgICAgbWluaW11bToxMDAwMAluYW1lOldEQV9EVFJDX1RSQ0dSUEUoMzEpCTogU1BFIDEgaXMgZGF0YSBkZXN0aW5hdGlvbi4KKworIyBDQkUgU2lnbmFsIEdyb3VwIDY0IC0gRUlCIERhdGEgUmluZyBBcmJpdHJhdG9yIC0gR3JvdXAgMiAoTkNsay8yKQorZXZlbnQ6MHgxOTAwIGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzAyX2N5Y2xlc19vcl9lZGdlcyBtaW5pbXVtOjEwMDAwCW5hbWU6V0RBX0RUUkNfVFJDR1JQRigwKQk6IEJJQyBkYXRhIHJlcXVlc3QgcGVuZGluZy4KK2V2ZW50OjB4MTkwMSBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8wMl9jeWNsZXNfb3JfZWRnZXMgbWluaW11bToxMDAwMAluYW1lOldEQV9EVFJDX1RSQ0dSUEYoMSkJOiBTUEUgNiBkYXRhIHJlcXVlc3QgcGVuZGluZy4KK2V2ZW50OjB4MTkwMiBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8wMl9jeWNsZXNfb3JfZWRnZXMgbWluaW11bToxMDAwMAluYW1lOldEQV9EVFJDX1RSQ0dSUEYoMikJOiBTUEUgNCBkYXRhIHJlcXVlc3QgcGVuZGluZy4KK2V2ZW50OjB4MTkwMyBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8wMl9jeWNsZXNfb3JfZWRnZXMgbWluaW11bToxMDAwMAluYW1lOldEQV9EVFJDX1RSQ0dSUEYoMykJOiBTUEUgMiBkYXRhIHJlcXVlc3QgcGVuZGluZy4KK2V2ZW50OjB4MTkwNCBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8wMl9jeWNsZXNfb3JfZWRnZXMgbWluaW11bToxMDAwMAluYW1lOldEQV9EVFJDX1RSQ0dSUEYoNCkJOiBTUEUgMCBkYXRhIHJlcXVlc3QgcGVuZGluZy4KK2V2ZW50OjB4MTkwNSBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8wMl9jeWNsZXNfb3JfZWRnZXMgbWluaW11bToxMDAwMAluYW1lOldEQV9EVFJDX1RSQ0dSUEYoNSkJOiBNSUMgZGF0YSByZXF1ZXN0IHBlbmRpbmcuCitldmVudDoweDE5MDYgY291bnRlcnM6MCwxLDIsMyB1bTpQUFVfMDJfY3ljbGVzX29yX2VkZ2VzIG1pbmltdW06MTAwMDAJbmFtZTpXREFfRFRSQ19UUkNHUlBGKDYpCTogUFBFIGRhdGEgcmVxdWVzdCBwZW5kaW5nLgorZXZlbnQ6MHgxOTA3IGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzAyX2N5Y2xlc19vcl9lZGdlcyBtaW5pbXVtOjEwMDAwCW5hbWU6V0RBX0RUUkNfVFJDR1JQRig3KQk6IFNQRSAxIGRhdGEgcmVxdWVzdCBwZW5kaW5nLgorZXZlbnQ6MHgxOTA4IGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzAyX2N5Y2xlc19vcl9lZGdlcyBtaW5pbXVtOjEwMDAwCW5hbWU6V0RBX0RUUkNfVFJDR1JQRig4KQk6IFNQRSAzIGRhdGEgcmVxdWVzdCBwZW5kaW5nLgorZXZlbnQ6MHgxOTA5IGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzAyX2N5Y2xlc19vcl9lZGdlcyBtaW5pbXVtOjEwMDAwCW5hbWU6V0RBX0RUUkNfVFJDR1JQRig5KQk6IFNQRSA1IGRhdGEgcmVxdWVzdCBwZW5kaW5nLgorZXZlbnQ6MHgxOTBhIGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzAyX2N5Y2xlc19vcl9lZGdlcyBtaW5pbXVtOjEwMDAwCW5hbWU6V0RBX0RUUkNfVFJDR1JQRigxMCkJOiBTUEUgNyBkYXRhIHJlcXVlc3QgcGVuZGluZy4KK2V2ZW50OjB4MTkwYiBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8wMl9jeWNsZXNfb3JfZWRnZXMgbWluaW11bToxMDAwMAluYW1lOldEQV9EVFJDX1RSQ0dSUEYoMTEpCTogSU9DIGRhdGEgcmVxdWVzdCBwZW5kaW5nLgorZXZlbnQ6MHgxOTBjIGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzAyX2VkZ2VzICAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6V0RBX0RUUkNfVFJDR1JQRigxMikJOiBCSUMgaXMgZGF0YSBkZXN0aW5hdGlvbi4KK2V2ZW50OjB4MTkwZCBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8wMl9lZGdlcyAgICAgICAgICAgbWluaW11bToxMDAwMAluYW1lOldEQV9EVFJDX1RSQ0dSUEYoMTMpCTogU1BFIDYgaXMgZGF0YSBkZXN0aW5hdGlvbi4KK2V2ZW50OjB4MTkwZSBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8wMl9lZGdlcyAgICAgICAgICAgbWluaW11bToxMDAwMAluYW1lOldEQV9EVFJDX1RSQ0dSUEYoMTQpCTogU1BFIDQgaXMgZGF0YSBkZXN0aW5hdGlvbi4KK2V2ZW50OjB4MTkwZiBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8wMl9lZGdlcyAgICAgICAgICAgbWluaW11bToxMDAwMAluYW1lOldEQV9EVFJDX1RSQ0dSUEYoMTUpCTogU1BFIDIgaXMgZGF0YSBkZXN0aW5hdGlvbi4KK2V2ZW50OjB4MTkxMCBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8wMl9lZGdlcyAgICAgICAgICAgbWluaW11bToxMDAwMAluYW1lOldEQV9EVFJDX1RSQ0dSUEYoMTYpCTogU1BFIDAgaXMgZGF0YSBkZXN0aW5hdGlvbi4KK2V2ZW50OjB4MTkxMSBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8wMl9lZGdlcyAgICAgICAgICAgbWluaW11bToxMDAwMAluYW1lOldEQV9EVFJDX1RSQ0dSUEYoMTcpCTogTUlDIGlzIGRhdGEgZGVzdGluYXRpb24uCitldmVudDoweDE5MTIgY291bnRlcnM6MCwxLDIsMyB1bTpQUFVfMDJfZWRnZXMgICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpXREFfRFRSQ19UUkNHUlBGKDE4KQk6IFBQRSBpcyBkYXRhIGRlc3RpbmF0aW9uLgorZXZlbnQ6MHgxOTEzIGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzAyX2VkZ2VzICAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6V0RBX0RUUkNfVFJDR1JQRigxOSkJOiBTUEUgMSBpcyBkYXRhIGRlc3RpbmF0aW9uLgorZXZlbnQ6MHgxOTE0IGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzAyX2VkZ2VzICAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6V0RBX0RUUkNfVFJDR1JQRigyMCkJOiBTUEUgMyBpcyBkYXRhIGRlc3RpbmF0aW9uLgorZXZlbnQ6MHgxOTE1IGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzAyX2VkZ2VzICAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6V0RBX0RUUkNfVFJDR1JQRigyMSkJOiBTUEUgNSBpcyBkYXRhIGRlc3RpbmF0aW9uLgorZXZlbnQ6MHgxOTE2IGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzAyX2VkZ2VzICAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6V0RBX0RUUkNfVFJDR1JQRigyMikJOiBTUEUgNyBpcyBkYXRhIGRlc3RpbmF0aW9uLgorZXZlbnQ6MHgxOTE3IGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzAyX2VkZ2VzICAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6V0RBX0RUUkNfVFJDR1JQRigyMykJOiBJT0MgaXMgZGF0YSBkZXN0aW5hdGlvbi4KK2V2ZW50OjB4MTkxOCBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8wMl9lZGdlcyAgICAgICAgICAgbWluaW11bToxMDAwMAluYW1lOldEQV9EVFJDX1RSQ0dSUEYoMjQpCTogR3JhbnQgb24gZGF0YSByaW5nIDAuCitldmVudDoweDE5MTkgY291bnRlcnM6MCwxLDIsMyB1bTpQUFVfMDJfZWRnZXMgICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpXREFfRFRSQ19UUkNHUlBGKDI1KQk6IEdyYW50IG9uIGRhdGEgcmluZyAxLgorZXZlbnQ6MHgxOTFhIGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzAyX2VkZ2VzICAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6V0RBX0RUUkNfVFJDR1JQRigyNikJOiBHcmFudCBvbiBkYXRhIHJpbmcgMi4KK2V2ZW50OjB4MTkxYiBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8wMl9lZGdlcyAgICAgICAgICAgbWluaW11bToxMDAwMAluYW1lOldEQV9EVFJDX1RSQ0dSUEYoMjcpCTogR3JhbnQgb24gZGF0YSByaW5nIDMuCitldmVudDoweDE5MWMgY291bnRlcnM6MCwxLDIsMyB1bTpQUFVfMDJfY3ljbGVzICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpXREFfRFRSQ19UUkNHUlBGKDI4KQk6IEFsbCBkYXRhIHJpbmdzIGFyZSBpZGxlLgorZXZlbnQ6MHgxOTFkIGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzAyX2N5Y2xlcyAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6V0RBX0RUUkNfVFJDR1JQRigyOSkJOiBPbmUgZGF0YSByaW5nIGlzIGJ1c3kuCitldmVudDoweDE5MWUgY291bnRlcnM6MCwxLDIsMyB1bTpQUFVfMDJfY3ljbGVzICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpXREFfRFRSQ19UUkNHUlBGKDMwKQk6IFR3byBvciB0aHJlZSBkYXRhIHJpbmdzIGFyZSBidXN5LgorZXZlbnQ6MHgxOTFmIGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzAyX2N5Y2xlcyAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6V0RBX0RUUkNfVFJDR1JQRigzMSkJOiBBbGwgZm91ciBkYXRhIHJpbmdzIGFyZSBidXN5LgorCisjIENCRSBTaWduYWwgR3JvdXAgNjUxIC0gRUlCIFRva2VuIE1hbmFnZXIgLSBHcm91cCBBMC9CMCAoTkNsay8yKQorZXZlbnQ6MHhmZTRjIGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzBfY3ljbGVzICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpyYWcwX3hpb19lX3VudXNlZAk6IEV2ZW4gWElPIHRva2VuIHVudXNlZCBieSBSQUcgMC4KK2V2ZW50OjB4ZmU0ZCBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8wX2N5Y2xlcyAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6cmFnMF94aW9fb191bnVzZWQJOiBPZGQgWElPIHRva2VuIHVudXNlZCBieSBSQUcgMC4KK2V2ZW50OjB4ZmU0ZSBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8wX2N5Y2xlcyAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6cmFnMF9iYW5rX2VfdW51c2VkCTogRXZlbiBiYW5rIHRva2VuIHVudXNlZCBieSBSQUcgMC4KK2V2ZW50OjB4ZmU0ZiBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8wX2N5Y2xlcyAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6cmFnMF9iYW5rX29fdW51c2VkCTogT2RkIGJhbmsgdG9rZW4gdW51c2VkIGJ5IFJBRyAwLgorZXZlbnQ6MHhmZTU0IGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzBfY3ljbGVzICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTp0b2tlbl9ncmFudGVkX3NwYzAJOiBUb2tlbiBncmFudGVkIGZvciBTUEUgMC4KK2V2ZW50OjB4ZmU1NSBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8wX2N5Y2xlcyAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6dG9rZW5fZ3JhbnRlZF9zcGMxCTogVG9rZW4gZ3JhbnRlZCBmb3IgU1BFIDEuCitldmVudDoweGZlNTYgY291bnRlcnM6MCwxLDIsMyB1bTpQUFVfMF9jeWNsZXMgICAgICAgICAgbWluaW11bToxMDAwMAluYW1lOnRva2VuX2dyYW50ZWRfc3BjMgk6IFRva2VuIGdyYW50ZWQgZm9yIFNQRSAyLgorZXZlbnQ6MHhmZTU3IGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzBfY3ljbGVzICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTp0b2tlbl9ncmFudGVkX3NwYzMJOiBUb2tlbiBncmFudGVkIGZvciBTUEUgMy4KK2V2ZW50OjB4ZmU1OCBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8wX2N5Y2xlcyAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6dG9rZW5fZ3JhbnRlZF9zcGM0CTogVG9rZW4gZ3JhbnRlZCBmb3IgU1BFIDQuCitldmVudDoweGZlNTkgY291bnRlcnM6MCwxLDIsMyB1bTpQUFVfMF9jeWNsZXMgICAgICAgICAgbWluaW11bToxMDAwMAluYW1lOnRva2VuX2dyYW50ZWRfc3BjNQk6IFRva2VuIGdyYW50ZWQgZm9yIFNQRSA1LgorZXZlbnQ6MHhmZTVhIGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzBfY3ljbGVzICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTp0b2tlbl9ncmFudGVkX3NwYzYJOiBUb2tlbiBncmFudGVkIGZvciBTUEUgNi4KK2V2ZW50OjB4ZmU1YiBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8wX2N5Y2xlcyAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6dG9rZW5fZ3JhbnRlZF9zcGM3CTogVG9rZW4gZ3JhbnRlZCBmb3IgU1BFIDcuCisKKworIyBDQkUgU2lnbmFsIEdyb3VwIDY1MiAtIEVJQiBUb2tlbiBNYW5hZ2VyIC0gR3JvdXAgQTEvQjEgKE5DbGsvMikKK2V2ZW50OjB4ZmViMCBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8wX2N5Y2xlcyAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6cmFnMF94aW9fZV93YXN0ZWQJOiBFdmVuIFhJTyB0b2tlbiB3YXN0ZWQgYnkgUkFHIDA7IHZhbGlkIG9ubHkgd2hlbiBVbnVzZWQgRW5hYmxlIChVRSkgPSAxIGluIFRLTV9DUiByZWdpc3Rlci4KK2V2ZW50OjB4ZmViMSBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8wX2N5Y2xlcyAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6cmFnMF94aW9fb193YXN0ZWQJOiBPZGQgWElPIHRva2VuIHdhc3RlZCBieSBSQUcgMDsgdmFsaWQgb25seSB3aGVuIFVudXNlZCBFbmFibGUgKFVFKSA9IDEgaW4gVEtNX0NSIHJlZ2lzdGVyLgorZXZlbnQ6MHhmZWIyIGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzBfY3ljbGVzICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpyYWcwX2JhbmtfZV93YXN0ZWQJOiBFdmVuIGJhbmsgdG9rZW4gd2FzdGVkIGJ5IFJBRyAwOyB2YWxpZCBvbmx5IHdoZW4gVW51c2VkIEVuYWJsZSAoVUUpID0gMSBpbiBUS01fQ1IgcmVnaXN0ZXIuCitldmVudDoweGZlYjMgY291bnRlcnM6MCwxLDIsMyB1bTpQUFVfMF9jeWNsZXMgICAgICAgICAgbWluaW11bToxMDAwMAluYW1lOnJhZzBfYmFua19vX3dhc3RlZAk6IE9kZCBiYW5rIHRva2VuIHdhc3RlZCBieSBSQUcgMDsgdmFsaWQgb25seSB3aGVuIFVudXNlZCBFbmFibGUgKFVFKSA9IDEgaW4gVEtNX0NSIHJlZ2lzdGVyLgorZXZlbnQ6MHhmZWJjIGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzBfY3ljbGVzICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpyYWd1X3hpb19lX3dhc3RlZAk6IEV2ZW4gWElPIHRva2VuIHdhc3RlZCBieSBSQUcgVS4KK2V2ZW50OjB4ZmViZCBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8wX2N5Y2xlcyAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6cmFndV94aW9fb193YXN0ZWQJOiBPZGQgWElPIHRva2VuIHdhc3RlZCBieSBSQUcgVS4KK2V2ZW50OjB4ZmViZSBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8wX2N5Y2xlcyAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6cmFndV9iYW5rX2Vfd2FzdGVkCTogRXZlbiBiYW5rIHRva2VuIHdhc3RlZCBieSBSQUcgVS4KK2V2ZW50OjB4ZmViZiBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8wX2N5Y2xlcyAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6cmFndV9iYW5rX29fd2FzdGVkCTogT2RkIGJhbmsgdG9rZW4gd2FzdGVkIGJ5IFJBRyBVLgorCisjIENCRSBTaWduYWwgR3JvdXAgNjUzIC0gRUlCIFRva2VuIE1hbmFnZXIgLSBHcm91cCBBMi9CMiAoTkNsay8yKQorZXZlbnQ6MHhmZjE0IGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzBfY3ljbGVzICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpyYWcwX3hpb19lX3NoYXJlZF90b19yYWcxCTogRXZlbiBYSU8gdG9rZW4gZnJvbSBSQUcgMCBzaGFyZWQgd2l0aCBSQUcgMQorZXZlbnQ6MHhmZjE1IGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzBfY3ljbGVzICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpyYWcwX3hpb19lX3NoYXJlZF90b19yYWcyCTogRXZlbiBYSU8gdG9rZW4gZnJvbSBSQUcgMCBzaGFyZWQgd2l0aCBSQUcgMgorZXZlbnQ6MHhmZjE2IGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzBfY3ljbGVzICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpyYWcwX3hpb19lX3NoYXJlZF90b19yYWczCTogRXZlbiBYSU8gdG9rZW4gZnJvbSBSQUcgMCBzaGFyZWQgd2l0aCBSQUcgMworZXZlbnQ6MHhmZjE3IGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzBfY3ljbGVzICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpyYWcwX3hpb19vX3NoYXJlZF90b19yYWcxCTogT2RkIFhJTyB0b2tlbiBmcm9tIFJBRyAwIHNoYXJlZCB3aXRoIFJBRyAxCitldmVudDoweGZmMTggY291bnRlcnM6MCwxLDIsMyB1bTpQUFVfMF9jeWNsZXMgICAgICAgICAgbWluaW11bToxMDAwMAluYW1lOnJhZzBfeGlvX29fc2hhcmVkX3RvX3JhZzIJOiBPZGQgWElPIHRva2VuIGZyb20gUkFHIDAgc2hhcmVkIHdpdGggUkFHIDIKK2V2ZW50OjB4ZmYxOSBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8wX2N5Y2xlcyAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6cmFnMF94aW9fb19zaGFyZWRfdG9fcmFnMwk6IE9kZCBYSU8gdG9rZW4gZnJvbSBSQUcgMCBzaGFyZWQgd2l0aCBSQUcgMworZXZlbnQ6MHhmZjFhIGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzBfY3ljbGVzICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpyYWcwX2JhbmtfZV9zaGFyZWRfdG9fcmFnMQk6IEV2ZW4gYmFuayB0b2tlbiBmcm9tIFJBRyAwIHNoYXJlZCB3aXRoIFJBRyAxCitldmVudDoweGZmMWIgY291bnRlcnM6MCwxLDIsMyB1bTpQUFVfMF9jeWNsZXMgICAgICAgICAgbWluaW11bToxMDAwMAluYW1lOnJhZzBfYmFua19lX3NoYXJlZF90b19yYWcyCTogRXZlbiBiYW5rIHRva2VuIGZyb20gUkFHIDAgc2hhcmVkIHdpdGggUkFHIDIKK2V2ZW50OjB4ZmYxYyBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8wX2N5Y2xlcyAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6cmFnMF9iYW5rX2Vfc2hhcmVkX3RvX3JhZzMJOiBFdmVuIGJhbmsgdG9rZW4gZnJvbSBSQUcgMCBzaGFyZWQgd2l0aCBSQUcgMworZXZlbnQ6MHhmZjFkIGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzBfY3ljbGVzICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpyYWcwX2Jhbmtfb19zaGFyZWRfdG9fcmFnMQk6IE9kZCBiYW5rIHRva2VuIGZyb20gUkFHIDAgc2hhcmVkIHdpdGggUkFHIDEKK2V2ZW50OjB4ZmYxZSBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8wX2N5Y2xlcyAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6cmFnMF9iYW5rX29fc2hhcmVkX3RvX3JhZzIJOiBPZGQgYmFuayB0b2tlbiBmcm9tIFJBRyAwIHNoYXJlZCB3aXRoIFJBRyAyCitldmVudDoweGZmMWYgY291bnRlcnM6MCwxLDIsMyB1bTpQUFVfMF9jeWNsZXMgICAgICAgICAgbWluaW11bToxMDAwMAluYW1lOnJhZzBfYmFua19vX3NoYXJlZF90b19yYWczCTogT2RkIGJhbmsgdG9rZW4gZnJvbSBSQUcgMCBzaGFyZWQgd2l0aCBSQUcgMworCisKKyMgQ0JFIFNpZ25hbCBHcm91cCA2NTQgLSBFSUIgVG9rZW4gTWFuYWdlciAtIEdyb3VwIEEwL0IwIChOQ2xrLzIpCisjIFJlcGVhdCBvZiB0aGUgNjU0MDAsIDY1NDAxLCA2NTQwMiwgNjU0MDMsIDY1NDE2LCA2NTQxNywgNjU0MTgsIDY1NDE5IGV2ZW50cworCisKKyMgQ0JFIFNpZ25hbCBHcm91cCA2NTUgLSBFSUIgVG9rZW4gTWFuYWdlciAtIEdyb3VwIEExL0IxIChOQ2xrLzIpCisjcmVwZWF0IG9mIHRoZSA2NTIwMCBldmVudHMKKworCisjIENCRSBTaWduYWwgR3JvdXAgNjU2IC0gRUlCIFRva2VuIE1hbmFnZXIgLSBHcm91cCBBMi9CMiAoTkNsay8yKQorZXZlbnQ6MHgxMDA0ZiBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8wX2N5Y2xlcyAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6cmFndV9iYW5rX29fc2hhcmVkX3RvX3JhZzAJOiBPZGQgYmFuayB0b2tlbiBmcm9tIFJBRyBVIHNoYXJlZCB3aXRoIFJBRyAwCitldmVudDoweDEwMDUwIGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzBfY3ljbGVzICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpyYWcxX3hpb19lX3NoYXJlZF90b19yYWcwCTogRXZlbiBYSU8gdG9rZW4gZnJvbSBSQUcgMSBzaGFyZWQgd2l0aCBSQUcgMAorZXZlbnQ6MHgxMDA1MSBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8wX2N5Y2xlcyAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6cmFnMV94aW9fZV9zaGFyZWRfdG9fcmFnMgk6IEV2ZW4gWElPIHRva2VuIGZyb20gUkFHIDEgc2hhcmVkIHdpdGggUkFHIDIKK2V2ZW50OjB4MTAwNTIgY291bnRlcnM6MCwxLDIsMyB1bTpQUFVfMF9jeWNsZXMgICAgICAgICAgbWluaW11bToxMDAwMAluYW1lOnJhZzFfeGlvX2Vfc2hhcmVkX3RvX3JhZzMJOiBFdmVuIFhJTyB0b2tlbiBmcm9tIFJBRyAxIHNoYXJlZCB3aXRoIFJBRyAzCitldmVudDoweDEwMDUzIGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzBfY3ljbGVzICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpyYWcxX3hpb19vX3NoYXJlZF90b19yYWcwCTogT2RkIFhJTyB0b2tlbiBmcm9tIFJBRyAxIHNoYXJlZCB3aXRoIFJBRyAwCitldmVudDoweDEwMDU0IGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzBfY3ljbGVzICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpyYWcxX3hpb19vX3NoYXJlZF90b19yYWcyCTogT2RkIFhJTyB0b2tlbiBmcm9tIFJBRyAxIHNoYXJlZCB3aXRoIFJBRyAyCitldmVudDoweDEwMDU1IGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzBfY3ljbGVzICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpyYWcxX3hpb19vX3NoYXJlZF90b19yYWczCTogT2RkIFhJTyB0b2tlbiBmcm9tIFJBRyAxIHNoYXJlZCB3aXRoIFJBRyAzCitldmVudDoweDEwMDU2IGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzBfY3ljbGVzICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpyYWcxX2JhbmtfZV9zaGFyZWRfdG9fcmFnMAk6IEV2ZW4gYmFuayB0b2tlbiBmcm9tIFJBRyAxIHNoYXJlZCB3aXRoIFJBRyAwCitldmVudDoweDEwMDU3IGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzBfY3ljbGVzICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpyYWcxX2JhbmtfZV9zaGFyZWRfdG9fcmFnMgk6IEV2ZW4gYmFuayB0b2tlbiBmcm9tIFJBRyAxIHNoYXJlZCB3aXRoIFJBRyAyCitldmVudDoweDEwMDU4IGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzBfY3ljbGVzICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpyYWcxX2JhbmtfZV9zaGFyZWRfdG9fcmFnMwk6IEV2ZW4gYmFuayB0b2tlbiBmcm9tIFJBRyAxIHNoYXJlZCB3aXRoIFJBRyAzCitldmVudDoweDEwMDU5IGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzBfY3ljbGVzICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpyYWcxX2Jhbmtfb19zaGFyZWRfdG9fcmFnMAk6IE9kZCBiYW5rIHRva2VuIGZyb20gUkFHIDEgc2hhcmVkIHdpdGggUkFHIDAKK2V2ZW50OjB4MTAwNWEgY291bnRlcnM6MCwxLDIsMyB1bTpQUFVfMF9jeWNsZXMgICAgICAgICAgbWluaW11bToxMDAwMAluYW1lOnJhZzFfYmFua19vX3NoYXJlZF90b19yYWcyCTogT2RkIGJhbmsgdG9rZW4gZnJvbSBSQUcgMSBzaGFyZWQgd2l0aCBSQUcgMgorZXZlbnQ6MHgxMDA1YiBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8wX2N5Y2xlcyAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6cmFnMV9iYW5rX29fc2hhcmVkX3RvX3JhZzMJOiBPZGQgYmFuayB0b2tlbiBmcm9tIFJBRyAxIHNoYXJlZCB3aXRoIFJBRyAzCitldmVudDoweDEwMDVjIGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzBfY3ljbGVzICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpyYWd1X3hpb19lX3NoYXJlZF90b19yYWcxCTogRXZlbiBYSU8gdG9rZW4gZnJvbSBSQUcgVSBzaGFyZWQgd2l0aCBSQUcgMQorZXZlbnQ6MHgxMDA1ZCBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8wX2N5Y2xlcyAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6cmFndV94aW9fb19zaGFyZWRfdG9fcmFnMQk6IE9kZCBYSU8gdG9rZW4gZnJvbSBSQUcgVSBzaGFyZWQgd2l0aCBSQUcgMQorZXZlbnQ6MHgxMDA1ZSBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8wX2N5Y2xlcyAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6cmFndV9iYW5rX2Vfc2hhcmVkX3RvX3JhZzEJOiBFdmVuIGJhbmsgdG9rZW4gZnJvbSBSQUcgVSBzaGFyZWQgd2l0aCBSQUcgMQorZXZlbnQ6MHgxMDA1ZiBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8wX2N5Y2xlcyAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6cmFndV9iYW5rX29fc2hhcmVkX3RvX3JhZzEJOiBPZGQgYmFuayB0b2tlbiBmcm9tIFJBRyBVIHNoYXJlZCB3aXRoIFJBRyAxCisKKyMgQ0JFIFNpZ25hbCBHcm91cCA2NTcgLSBFSUIgVG9rZW4gTWFuYWdlciAtIEdyb3VwIEMwL0QwIChOQ2xrLzIpCitldmVudDoweDEwMGU0IGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzJfY3ljbGVzICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpyYWcyX3hpb19lX3VudXNlZAk6IEV2ZW4gWElPIHRva2VuIHVudXNlZCBieSBSQUcgMgorZXZlbnQ6MHgxMDBlNSBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8yX2N5Y2xlcyAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6cmFnMl94aW9fb191bnVzZWQJOiBPZGQgWElPIHRva2VuIHVudXNlZCBieSBSQUcgMgorZXZlbnQ6MHgxMDBlNiBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8yX2N5Y2xlcyAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6cmFnMl9iYW5rX2VfdW51c2VkCTogRXZlbiBiYW5rIHRva2VuIHVudXNlZCBieSBSQUcgMgorZXZlbnQ6MHgxMDBlNyBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8yX2N5Y2xlcyAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6cmFnMl9iYW5rX29fdW51c2VkCTogT2RkIGJhbmsgdG9rZW4gdW51c2VkIGJ5IFJBRyAyCitldmVudDoweDEwMGU4IGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzJfY3ljbGVzICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpyYWcwX2lvaWYwX2luX3VudXNlZAk6IElPSUYwIEluIHRva2VuIHVudXNlZCBieSBSQUcgMAorZXZlbnQ6MHgxMDBlOSBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8yX2N5Y2xlcyAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6cmFnMF9pb2lmMF9vdXRfdW51c2VkCTogSU9JRjAgT3V0IHRva2VuIHVudXNlZCBieSBSQUcgMAorZXZlbnQ6MHgxMDBlYSBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8yX2N5Y2xlcyAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6cmFnMF9pb2lmMV9pbl91bnVzZWQJOiBJT0lGMSBJbiB0b2tlbiB1bnVzZWQgYnkgUkFHIDAKK2V2ZW50OjB4MTAwZWIgY291bnRlcnM6MCwxLDIsMyB1bTpQUFVfMl9jeWNsZXMgICAgICAgICAgbWluaW11bToxMDAwMAluYW1lOnJhZzBfaW9pZjFfb3V0X3VudXNlZAk6IElPSUYxIE91dCB0b2tlbiB1bnVzZWQgYnkgUkFHIDAKKworCisjIENCRSBTaWduYWwgR3JvdXAgNjU4IC0gRUlCIFRva2VuIE1hbmFnZXIgLSBHcm91cCBDMS9EMSAoTkNsay8yKQorZXZlbnQ6MHgxMDE0OCBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8yX2N5Y2xlcyAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6cmFnMl94aW9fZV93YXN0ZWQJOiBFdmVuIFhJTyB0b2tlbiB3YXN0ZWQgYnkgUkFHIDIKK2V2ZW50OjB4MTAxNDkgY291bnRlcnM6MCwxLDIsMyB1bTpQUFVfMl9jeWNsZXMgICAgICAgICAgbWluaW11bToxMDAwMAluYW1lOnJhZzJfeGlvX29fd2FzdGVkCTogT2RkIFhJTyB0b2tlbiB3YXN0ZWQgYnkgUkFHIDIKK2V2ZW50OjB4MTAxNGEgY291bnRlcnM6MCwxLDIsMyB1bTpQUFVfMl9jeWNsZXMgICAgICAgICAgbWluaW11bToxMDAwMAluYW1lOnJhZzJfYmFua19lX3dhc3RlZAk6IEV2ZW4gYmFuayB0b2tlbiB3YXN0ZWQgYnkgUkFHIDIKK2V2ZW50OjB4MTAxNGIgY291bnRlcnM6MCwxLDIsMyB1bTpQUFVfMl9jeWNsZXMgICAgICAgICAgbWluaW11bToxMDAwMAluYW1lOnJhZzJfYmFua19vX3dhc3RlZAk6IE9kZCBiYW5rIHRva2VuIHdhc3RlZCBieSBSQUcgMgorCisKKyMgQ0JFIFNpZ25hbCBHcm91cCA2NTkgLSBFSUIgVG9rZW4gTWFuYWdlciAtIEdyb3VwIEMyL0QyIChOQ2xrLzIpCitldmVudDoweDEwMWFjIGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzJfY3ljbGVzICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpyYWcyX3hpb19lX3NoYXJlZF90b19yYWcwCTogRXZlbiBYSU8gdG9rZW4gZnJvbSBSQUcgMiBzaGFyZWQgd2l0aCBSQUcgMAorZXZlbnQ6MHgxMDFhZCBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8yX2N5Y2xlcyAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6cmFnMl94aW9fZV9zaGFyZWRfdG9fcmFnMQk6IEV2ZW4gWElPIHRva2VuIGZyb20gUkFHIDIgc2hhcmVkIHdpdGggUkFHIDEKK2V2ZW50OjB4MTAxYWUgY291bnRlcnM6MCwxLDIsMyB1bTpQUFVfMl9jeWNsZXMgICAgICAgICAgbWluaW11bToxMDAwMAluYW1lOnJhZzJfeGlvX2Vfc2hhcmVkX3RvX3JhZzMJOiBFdmVuIFhJTyB0b2tlbiBmcm9tIFJBRyAyIHNoYXJlZCB3aXRoIFJBRyAzCitldmVudDoweDEwMWFmIGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzJfY3ljbGVzICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpyYWcyX3hpb19vX3NoYXJlZF90b19yYWcwCTogT2RkIFhJTyB0b2tlbiBmcm9tIFJBRyAyIHNoYXJlZCB3aXRoIFJBRyAwCitldmVudDoweDEwMWIwIGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzJfY3ljbGVzICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpyYWcyX3hpb19vX3NoYXJlZF90b19yYWcxCTogT2RkIFhJTyB0b2tlbiBmcm9tIFJBRyAyIHNoYXJlZCB3aXRoIFJBRyAxCitldmVudDoweDEwMWIxIGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzJfY3ljbGVzICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpyYWcyX3hpb19vX3NoYXJlZF90b19yYWczCTogT2RkIFhJTyB0b2tlbiBmcm9tIFJBRyAyIHNoYXJlZCB3aXRoIFJBRyAzCitldmVudDoweDEwMWIyIGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzJfY3ljbGVzICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpyYWcyX2JhbmtfZV9zaGFyZWRfdG9fcmFnMAk6IEV2ZW4gYmFuayB0b2tlbiBmcm9tIFJBRyAyIHNoYXJlZCB3aXRoIFJBRyAwCitldmVudDoweDEwMWIzIGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzJfY3ljbGVzICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpyYWcyX2JhbmtfZV9zaGFyZWRfdG9fcmFnMQk6IEV2ZW4gYmFuayB0b2tlbiBmcm9tIFJBRyAyIHNoYXJlZCB3aXRoIFJBRyAxCitldmVudDoweDEwMWI0IGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzJfY3ljbGVzICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpyYWcyX2JhbmtfZV9zaGFyZWRfdG9fcmFnMwk6IEV2ZW4gYmFuayB0b2tlbiBmcm9tIFJBRyAyIHNoYXJlZCB3aXRoIFJBRyAzCitldmVudDoweDEwMWI1IGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzJfY3ljbGVzICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpyYWcyX2Jhbmtfb19zaGFyZWRfdG9fcmFnMAk6IE9kZCBiYW5rIHRva2VuIGZyb20gUkFHIDIgc2hhcmVkIHdpdGggUkFHIDAKK2V2ZW50OjB4MTAxYjYgY291bnRlcnM6MCwxLDIsMyB1bTpQUFVfMl9jeWNsZXMgICAgICAgICAgbWluaW11bToxMDAwMAluYW1lOnJhZzJfYmFua19vX3NoYXJlZF90b19yYWcxCTogT2RkIGJhbmsgdG9rZW4gZnJvbSBSQUcgMiBzaGFyZWQgd2l0aCBSQUcgMQorZXZlbnQ6MHgxMDFiNyBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8yX2N5Y2xlcyAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6cmFnMl9iYW5rX29fc2hhcmVkX3RvX3JhZzMJOiBPZGQgYmFuayB0b2tlbiBmcm9tIFJBRyAyIHNoYXJlZCB3aXRoIFJBRyAzCisKKworIyBDQkUgU2lnbmFsIEdyb3VwIDY1MTAgLSBFSUIgVG9rZW4gTWFuYWdlciAtIEdyb3VwIEMzIChOQ2xrLzIpCitldmVudDoweDllZjM4IGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzJfY3ljbGVzICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpyYWcwX2lvaWYwX2luX3dhc3RlZAk6IElPSUYwIEluIHRva2VuIHdhc3RlZCBieSBSQUcgMAorZXZlbnQ6MHg5ZWYzOSBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8yX2N5Y2xlcyAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6cmFnMF9pb2lmMF9vdXRfd2FzdGVkCTogSU9JRjAgT3V0IHRva2VuIHdhc3RlZCBieSBSQUcgMAorZXZlbnQ6MHg5ZWYzYSBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8yX2N5Y2xlcyAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6cmFnMF9pb2lmMV9pbl93YXN0ZWQJOiBJT0lGMSBJbiB0b2tlbiB3YXN0ZWQgYnkgUkFHIDAKK2V2ZW50OjB4OWVmM2IgY291bnRlcnM6MCwxLDIsMyB1bTpQUFVfMl9jeWNsZXMgICAgICAgICAgbWluaW11bToxMDAwMAluYW1lOnJhZzBfaW9pZjFfb3V0X3dhc3RlZAk6IElPSUYxIE91dCB0b2tlbiB3YXN0ZWQgYnkgUkFHIDAKKworCisjIENCRSBTaWduYWwgR3JvdXAgNjUxMSAtIEVJQiBUb2tlbiBNYW5hZ2VyIC0gR3JvdXAgQzAvRDAgKE5DbGsvMikKKyMgcmVwZWF0IG9mIHRoZSBldmVudHMgNjU3NjQgLSA2NTc3MQorCisjIENCRSBTaWduYWwgR3JvdXAgNjUxMiAtIEVJQiBUb2tlbiBNYW5hZ2VyIC0gR3JvdXAgQzEvRDEgKE5DbGsvMikKK2V2ZW50OjB4OWYwMTAgY291bnRlcnM6MCwxLDIsMyB1bTpQUFVfMl9jeWNsZXMgICAgICAgICAgbWluaW11bToxMDAwMAluYW1lOnJhZzNfeGlvX2Vfd2FzdGVkCTogRXZlbiBYSU8gdG9rZW4gd2FzdGVkIGJ5IFJBRyAzCitldmVudDoweDlmMDExIGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzJfY3ljbGVzICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpyYWczX3hpb19vX3dhc3RlZAk6IE9kZCBYSU8gdG9rZW4gd2FzdGVkIGJ5IFJBRyAzCitldmVudDoweDlmMDEyIGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzJfY3ljbGVzICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpyYWczX2JhbmtfZV93YXN0ZWQJOiBFdmVuIGJhbmsgdG9rZW4gd2FzdGVkIGJ5IFJBRyAzCitldmVudDoweDlmMDEzIGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzJfY3ljbGVzICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpyYWczX2Jhbmtfb193YXN0ZWQJOiBPZGQgYmFuayB0b2tlbiB3YXN0ZWQgYnkgUkFHIDMKKworIyBDQkUgU2lnbmFsIEdyb3VwIDY1MTMgLSBFSUIgVG9rZW4gTWFuYWdlciAtIEdyb3VwIEMyL0QyIChOQ2xrLzIpCitldmVudDoweDlmMDc0IGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzJfY3ljbGVzICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpyYWczX3hpb19lX3NoYXJlZF90b19yYWcwCTogRXZlbiBYSU8gdG9rZW4gZnJvbSBSQUcgMyBzaGFyZWQgd2l0aCBSQUcgMAorZXZlbnQ6MHg5ZjA3NSBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8yX2N5Y2xlcyAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6cmFnM194aW9fZV9zaGFyZWRfdG9fcmFnMQk6IEV2ZW4gWElPIHRva2VuIGZyb20gUkFHIDMgc2hhcmVkIHdpdGggUkFHIDEKK2V2ZW50OjB4OWYwNzYgY291bnRlcnM6MCwxLDIsMyB1bTpQUFVfMl9jeWNsZXMgICAgICAgICAgbWluaW11bToxMDAwMAluYW1lOnJhZzNfeGlvX2Vfc2hhcmVkX3RvX3JhZzIJOiBFdmVuIFhJTyB0b2tlbiBmcm9tIFJBRyAzIHNoYXJlZCB3aXRoIFJBRyAyCitldmVudDoweDlmMDc3IGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzJfY3ljbGVzICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpyYWczX3hpb19vX3NoYXJlZF90b19yYWcwCTogT2RkIFhJTyB0b2tlbiBmcm9tIFJBRyAzIHNoYXJlZCB3aXRoIFJBRyAwCitldmVudDoweDlmMDc4IGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzJfY3ljbGVzICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpyYWczX3hpb19vX3NoYXJlZF90b19yYWcxCTogT2RkIFhJTyB0b2tlbiBmcm9tIFJBRyAzIHNoYXJlZCB3aXRoIFJBRyAxCitldmVudDoweDlmMDc5IGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzJfY3ljbGVzICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpyYWczX3hpb19vX3NoYXJlZF90b19yYWcyCTogT2RkIFhJTyB0b2tlbiBmcm9tIFJBRyAzIHNoYXJlZCB3aXRoIFJBRyAyCitldmVudDoweDlmMDdhIGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzJfY3ljbGVzICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpyYWczX2JhbmtfZV9zaGFyZWRfdG9fcmFnMAk6IEV2ZW4gYmFuayB0b2tlbiBmcm9tIFJBRyAzIHNoYXJlZCB3aXRoIFJBRyAwCitldmVudDoweDlmMDdiIGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzJfY3ljbGVzICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpyYWczX2JhbmtfZV9zaGFyZWRfdG9fcmFnMQk6IEV2ZW4gYmFuayB0b2tlbiBmcm9tIFJBRyAzIHNoYXJlZCB3aXRoIFJBRyAxCitldmVudDoweDlmMDdjIGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzJfY3ljbGVzICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpyYWczX2JhbmtfZV9zaGFyZWRfdG9fcmFnMgk6IEV2ZW4gYmFuayB0b2tlbiBmcm9tIFJBRyAzIHNoYXJlZCB3aXRoIFJBRyAyCitldmVudDoweDlmMDdkIGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzJfY3ljbGVzICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpyYWczX2Jhbmtfb19zaGFyZWRfdG9fcmFnMAk6IE9kZCBiYW5rIHRva2VuIGZyb20gUkFHIDMgc2hhcmVkIHdpdGggUkFHIDAKK2V2ZW50OjB4OWYwN2UgY291bnRlcnM6MCwxLDIsMyB1bTpQUFVfMl9jeWNsZXMgICAgICAgICAgbWluaW11bToxMDAwMAluYW1lOnJhZzNfYmFua19vX3NoYXJlZF90b19yYWcxCTogT2RkIGJhbmsgdG9rZW4gZnJvbSBSQUcgMyBzaGFyZWQgd2l0aCBSQUcgMQorZXZlbnQ6MHg5ZjA3ZiBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8yX2N5Y2xlcyAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6cmFnM19iYW5rX29fc2hhcmVkX3RvX3JhZzIJOiBPZGQgYmFuayB0b2tlbiBmcm9tIFJBRyAzIHNoYXJlZCB3aXRoIFJBRyAyCisKKworIyBDZWxsIEJFIElzbGFuZCA3IC0gTWVtb3J5IEludGVyZmFjZSBDb250cm9sbGVyIChNSUMpCisKKyMgQ0JFIFNpZ25hbCBHcm91cCA3MSAtIE1JQyBHcm91cCAxIChOQ2xrLzIpCitldmVudDoweDFiYzUgY291bnRlcnM6MCwxLDIsMyB1bTpQUFVfMDEyM19jeWNsZXMgICAgICAgICAgbWluaW11bToxMDAwMAluYW1lOllNX0NPTU1PTl9ZTUJfQ1NSX1BFUkZPUk0xKDEpCTogWElPMSAtIFJlYWQgY29tbWFuZCBxdWV1ZSBpcyBlbXB0eS4KK2V2ZW50OjB4MWJjNiBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8wMTIzX2N5Y2xlcyAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6WU1fQ09NTU9OX1lNQl9DU1JfUEVSRk9STTEoMikJOiBYSU8xIC0gV3JpdGUgY29tbWFuZCBxdWV1ZSBpcyBlbXB0eS4KK2V2ZW50OjB4MWJjOCBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8wMTIzX2N5Y2xlcyAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6WU1fQ09NTU9OX1lNQl9DU1JfUEVSRk9STTEoNCkJOiBYSU8xIC0gUmVhZCBjb21tYW5kIHF1ZXVlIGlzIGZ1bGwuCitldmVudDoweDFiYzkgY291bnRlcnM6MCwxLDIsMyB1bTpQUFVfMDEyM19jeWNsZXMgICAgICAgICAgbWluaW11bToxMDAwMAluYW1lOllNX0NPTU1PTl9ZTUJfQ1NSX1BFUkZPUk0xKDUpCTogWElPMSAtIE1JQyByZXNwb25kcyB3aXRoIGEgUmV0cnkgZm9yIGEgcmVhZCBjb21tYW5kIGJlY2F1c2UgdGhlIHJlYWQgY29tbWFuZCBxdWV1ZSBpcyBmdWxsLgorZXZlbnQ6MHgxYmNhIGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzAxMjNfY3ljbGVzICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpZTV9DT01NT05fWU1CX0NTUl9QRVJGT1JNMSg2KQk6IFhJTzEgLSBXcml0ZSBjb21tYW5kIHF1ZXVlIGlzIGZ1bGwuCitldmVudDoweDFiY2IgY291bnRlcnM6MCwxLDIsMyB1bTpQUFVfMDEyM19jeWNsZXMgICAgICAgICAgbWluaW11bToxMDAwMAluYW1lOllNX0NPTU1PTl9ZTUJfQ1NSX1BFUkZPUk0xKDcpCTogWElPMSAtIE1JQyByZXNwb25kcyB3aXRoIGEgUmV0cnkgZm9yIGEgd3JpdGUgY29tbWFuZCBiZWNhdXNlIHRoZSB3cml0ZSBjb21tYW5kIHF1ZXVlIGlzIGZ1bGwuCitldmVudDoweDFiZGUgY291bnRlcnM6MCwxLDIsMyB1bTpQUFVfMDEyM19jeWNsZXMgICAgICAgICAgbWluaW11bToxMDAwMAluYW1lOllNX0NUTDFfWU1NX0NDU19QRVJGT1JNKDIpCTogWElPMSAtIFJlYWQgY29tbWFuZCBkaXNwYXRjaGVkOyBpbmNsdWRlcyBoaWdoLXByaW9yaXR5IGFuZCBmYXN0LXBhdGggcmVhZHMgKHNlZSBOb3RlIDEpLgorZXZlbnQ6MHgxYmRmIGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzAxMjNfY3ljbGVzICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpZTV9DVEwxX1lNTV9DQ1NfUEVSRk9STSgzKQk6IFhJTzEgLSBXcml0ZSBjb21tYW5kIGRpc3BhdGNoZWQgKHNlZSBOb3RlIDEpLgorZXZlbnQ6MHgxYmUwIGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzAxMjNfY3ljbGVzICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpZTV9DVEwxX1lNTV9DQ1NfUEVSRk9STSg0KQk6IFhJTzEgLSBSZWFkLU1vZGlmeS1Xcml0ZSBjb21tYW5kIChkYXRhIHNpemUgPCAxNiBieXRlcykgZGlzcGF0Y2hlZCAoc2VlIE5vdGUgMSkuCitldmVudDoweDFiZTEgY291bnRlcnM6MCwxLDIsMyB1bTpQUFVfMDEyM19jeWNsZXMgICAgICAgICAgbWluaW11bToxMDAwMAluYW1lOllNX0NUTDFfWU1NX0NDU19QRVJGT1JNKDUpCTogWElPMSAtIFJlZnJlc2ggZGlzcGF0Y2hlZCAoc2VlIE5vdGUgMSkuCitldmVudDoweDFiZTMgY291bnRlcnM6MCwxLDIsMyB1bTpQUFVfMDEyM19jeWNsZXMgICAgICAgICAgbWluaW11bToxMDAwMAluYW1lOllNX0NUTDFfWU1NX0NDU19QRVJGT1JNKDcpCTogWElPMSAtIEJ5dGUtbWFza2luZyB3cml0ZSBjb21tYW5kIChkYXRhIHNpemUgPj0gMTYgYnl0ZXMpIGRpc3BhdGNoZWQgKHNlZSBOb3RlIDEpLgorZXZlbnQ6MHgxYmU1IGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzAxMjNfY3ljbGVzICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpZTV9DVEwxX1lNTV9DUldfUEVSRk9STSgxKQk6IFhJTzEgLSBXcml0ZSBjb21tYW5kIGRpc3BhdGNoZWQgYWZ0ZXIgYSByZWFkIGNvbW1hbmQgd2FzIHByZXZpb3VzbHkgZGlzcGF0Y2hlZCAoc2VlIE5vdGUgMSkuCitldmVudDoweDFiZTYgY291bnRlcnM6MCwxLDIsMyB1bTpQUFVfMDEyM19jeWNsZXMgICAgICAgICAgbWluaW11bToxMDAwMAluYW1lOllNX0NUTDFfWU1NX0NSV19QRVJGT1JNKDIpCTogWElPMSAtIFJlYWQgY29tbWFuZCBkaXNwYXRjaGVkIGFmdGVyIGEgd3JpdGUgY29tbWFuZCB3YXMgcHJldmlvdXNseSBkaXNwYXRjaGVkIChzZWUgTm90ZSAxKS4KKworCisjIENCRSBTaWduYWwgR3JvdXAgNzIgLSBNSUMgR3JvdXAgMiAoTkNsay8yKQorZXZlbnQ6MHgxYzI5IGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzAxMjNfY3ljbGVzICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpZTV9DT01NT05fWU1CX0NTUl9QRVJGT1JNMigxKQk6IFhJTzAgLSBSZWFkIGNvbW1hbmQgcXVldWUgaXMgZW1wdHkuCitldmVudDoweDFjMmEgY291bnRlcnM6MCwxLDIsMyB1bTpQUFVfMDEyM19jeWNsZXMgICAgICAgICAgbWluaW11bToxMDAwMAluYW1lOllNX0NPTU1PTl9ZTUJfQ1NSX1BFUkZPUk0yKDIpCTogWElPMCAtIFdyaXRlIGNvbW1hbmQgcXVldWUgaXMgZW1wdHkuCitldmVudDoweDFjMmMgY291bnRlcnM6MCwxLDIsMyB1bTpQUFVfMDEyM19jeWNsZXMgICAgICAgICAgbWluaW11bToxMDAwMAluYW1lOllNX0NPTU1PTl9ZTUJfQ1NSX1BFUkZPUk0yKDQpCTogWElPMCAtIFJlYWQgY29tbWFuZCBxdWV1ZSBpcyBmdWxsLgorZXZlbnQ6MHgxYzJkIGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzAxMjNfY3ljbGVzICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpZTV9DT01NT05fWU1CX0NTUl9QRVJGT1JNMig1KQk6IFhJTzAgLSBNSUMgcmVzcG9uZHMgd2l0aCBhIFJldHJ5IGZvciBhIHJlYWQgY29tbWFuZCBiZWNhdXNlIHRoZSByZWFkIGNvbW1hbmQgcXVldWUgaXMgZnVsbC4KK2V2ZW50OjB4MWMyZSBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8wMTIzX2N5Y2xlcyAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6WU1fQ09NTU9OX1lNQl9DU1JfUEVSRk9STTIoNikJOiBYSU8wIC0gV3JpdGUgY29tbWFuZCBxdWV1ZSBpcyBmdWxsLgorZXZlbnQ6MHgxYzJmIGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzAxMjNfY3ljbGVzICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpZTV9DT01NT05fWU1CX0NTUl9QRVJGT1JNMig3KQk6IFhJTzAgLSBNSUMgcmVzcG9uZHMgd2l0aCBhIFJldHJ5IGZvciBhIHdyaXRlIGNvbW1hbmQgYmVjYXVzZSB0aGUgd3JpdGUgY29tbWFuZCBxdWV1ZSBpcyBmdWxsLgorZXZlbnQ6MHgxYzQyIGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzAxMjNfY3ljbGVzICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpZTV9DVEwwX1lNTV9DQ1NfUEVSRk9STSgyKQk6IFhJTzAgLSBSZWFkIGNvbW1hbmQgZGlzcGF0Y2hlZDsgaW5jbHVkZXMgaGlnaC1wcmlvcml0eSBhbmQgZmFzdC1wYXRoIHJlYWRzIChzZWUgTm90ZSAxKS4KK2V2ZW50OjB4MWM0MyBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8wMTIzX2N5Y2xlcyAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6WU1fQ1RMMF9ZTU1fQ0NTX1BFUkZPUk0oMykJOiBYSU8wIC0gV3JpdGUgY29tbWFuZCBkaXNwYXRjaGVkIChzZWUgTm90ZSAxKS4KK2V2ZW50OjB4MWM0NCBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8wMTIzX2N5Y2xlcyAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6WU1fQ1RMMF9ZTU1fQ0NTX1BFUkZPUk0oNCkJOiBYSU8wIC0gUmVhZC1Nb2RpZnktV3JpdGUgY29tbWFuZCAoZGF0YSBzaXplIDwgMTYgYnl0ZXMpIGRpc3BhdGNoZWQgKHNlZSBOb3RlIDEpLgorZXZlbnQ6MHgxYzQ1IGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzAxMjNfY3ljbGVzICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpZTV9DVEwwX1lNTV9DQ1NfUEVSRk9STSg1KQk6IFhJTzAgLSBSZWZyZXNoIGRpc3BhdGNoZWQgKHNlZSBOb3RlIDEpLgorZXZlbnQ6MHgxYzQ5IGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzAxMjNfY3ljbGVzICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpZTV9DVEwwX1lNTV9DUldfUEVSRk9STSgxKQk6IFhJTzAgLSBXcml0ZSBjb21tYW5kIGRpc3BhdGNoZWQgYWZ0ZXIgYSByZWFkIGNvbW1hbmQgd2FzIHByZXZpb3VzbHkgZGlzcGF0Y2hlZCAoc2VlIE5vdGUgMSkuCitldmVudDoweDFjNGEgY291bnRlcnM6MCwxLDIsMyB1bTpQUFVfMDEyM19jeWNsZXMgICAgICAgICAgbWluaW11bToxMDAwMAluYW1lOllNX0NUTDBfWU1NX0NSV19QRVJGT1JNKDIpCTogWElPMCAtIFJlYWQgY29tbWFuZCBkaXNwYXRjaGVkIGFmdGVyIGEgd3JpdGUgY29tbWFuZCB3YXMgcHJldmlvdXNseSBkaXNwYXRjaGVkIChzZWUgTm90ZSAxKS4KKworIyBDQkUgU2lnbmFsIEdyb3VwIDczIC0gTUlDIEdyb3VwIDMgKE5DbGsvMikKK2V2ZW50OjB4MWNhNyBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8wMTIzX2N5Y2xlcyAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6WU1fQ1RMMF9ZTU1fQ0NTX1BFUkZPUk0oMykJOiBYSU8wIC0gV3JpdGUgY29tbWFuZCBkaXNwYXRjaGVkIChzZWUgTm90ZSAxKS4KK2V2ZW50OjB4MWNhOCBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8wMTIzX2N5Y2xlcyAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6WU1fQ1RMMF9ZTU1fQ0NTX1BFUkZPUk0oNCkJOiBYSU8wIC0gUmVhZC1Nb2RpZnktV3JpdGUgY29tbWFuZCAoZGF0YSBzaXplIDwgMTYgYnl0ZXMpIGRpc3BhdGNoZWQgKHNlZSBOb3RlIDEpLgorZXZlbnQ6MHgxY2E5IGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzAxMjNfY3ljbGVzICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpZTV9DVEwwX1lNTV9DQ1NfUEVSRk9STSg1KQk6IFhJTzAgLSBSZWZyZXNoIGRpc3BhdGNoZWQgKHNlZSBOb3RlIDEpLgorZXZlbnQ6MHgxY2FiIGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzAxMjNfY3ljbGVzICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpZTV9DVEwwX1lNTV9DQ1NfUEVSRk9STSg3KQk6IFhJTzAgLSBCeXRlLW1hc2tpbmcgd3JpdGUgY29tbWFuZCAoZGF0YSBzaXplID49IDE2IGJ5dGVzKSBkaXNwYXRjaGVkIChzZWUgTm90ZSAxKS4KKworCisjIENlbGwgQkUgSXNsYW5kIDggLSBCcm9hZGJhbmQgRW5naW5lIEludGVyZmFjZSAoQkVJKQorCisjIENCRSBTaWduYWwgR3JvdXAgODEgLSBCSUYgQ29udHJvbGxlciAtIElPSUYwIFdvcmQgMCAoTkNsay8yKQorZXZlbnQ6MHgxZmIwIGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzAyX2N5Y2xlcyAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6QjJGX1R5cGVfQV9EYXRhCTogVHlwZSBBIGRhdGEgcGh5c2ljYWwgbGF5ZXIgZ3JvdXAgKFBMRykuIERvZXMgbm90IGluY2x1ZGUgaGVhZGVyLW9ubHkgb3IgY3JlZGl0LW9ubHkgZGF0YSBQTEdzLiBJbiBJT0lGIG1vZGUsIGNvdW50cyBJL08gZGV2aWNlIHJlYWQgZGF0YTsgaW4gQklGIG1vZGUsIGNvdW50cyBhbGwgb3V0Ym91bmQgZGF0YS4KK2V2ZW50OjB4MWZiMSBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8wMl9jeWNsZXMgICAgICAgICAgbWluaW11bToxMDAwMAluYW1lOkIyRl9UeXBlX0JfRGF0YQk6IFR5cGUgQiBkYXRhIFBMRy4gSW4gSU9JRiBtb2RlLCBjb3VudHMgSS9PIGRldmljZSByZWFkIGRhdGE7IGluIEJJRiBtb2RlLCBjb3VudHMgYWxsIG91dGJvdW5kIGRhdGEuCitldmVudDoweDFmYjIgY291bnRlcnM6MCwxLDIsMyB1bTpQUFVfMDJfY3ljbGVzICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpJT0NfVHlwZV9BX0RhdGEJOiBUeXBlIEEgZGF0YSBQTEcuIERvZXMgbm90IGluY2x1ZGUgaGVhZGVyLW9ubHkgb3IgY3JlZGl0LW9ubHkgUExHcy4gSW4gSU9JRiBtb2RlLCBjb3VudHMgQ0JFIHN0b3JlIGRhdGEgdG8gSS9PIGRldmljZS4gRG9lcyBub3QgYXBwbHkgaW4gQklGIG1vZGUuCitldmVudDoweDFmYjMgY291bnRlcnM6MCwxLDIsMyB1bTpQUFVfMDJfY3ljbGVzICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpJT0NfVHlwZV9CX0RhdGEJOiBUeXBlIEIgZGF0YSBQTEcuIEluIElPSUYgbW9kZSwgY291bnRzIENCRSBzdG9yZSBkYXRhIHRvIGFuIEkvTyBkZXZpY2UuIERvZXMgbm90IGFwcGx5IGluIEJJRiBtb2RlLgorZXZlbnQ6MHgxZmI0IGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzAyX2N5Y2xlcyAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6RGF0YV9QTEcJCTogRGF0YSBQTEcuIERvZXMgbm90IGluY2x1ZGUgaGVhZGVyLW9ubHkgb3IgY3JlZGl0LW9ubHkgUExHcy4KK2V2ZW50OjB4MWZiNSBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8wMl9jeWNsZXMgICAgICAgICAgbWluaW11bToxMDAwMAluYW1lOkNvbW1hbmRfUExHCQk6IENvbW1hbmQgUExHIChubyBjcmVkaXQtb25seSBQTEcpLiBJbiBJT0lGIG1vZGUsIGNvdW50cyBJL08gY29tbWFuZCBvciByZXBseSBQTEdzLiBJbiBCSUYgbW9kZSwgY291bnRzIGNvbW1hbmQvIHJlZmxlY3RlZCBjb21tYW5kIG9yIHNub29wL2NvbWJpbmVkIHJlc3BvbnNlcy4KK2V2ZW50OjB4MWZiNiBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8wMl9jeWNsZXMgICAgICAgICAgbWluaW11bToxMDAwMAluYW1lOlR5cGVfQV9UcmFuc2Zlcgk6IFR5cGUgQSBkYXRhIHRyYW5zZmVyIHJlZ2FyZGxlc3Mgb2YgbGVuZ3RoLiBDYW4gYWxzbyBiZSB1c2VkIHRvIGNvdW50IFR5cGUgQSBkYXRhIGhlYWRlciBQTEdzIChidXQgbm90IGNyZWRpdC1vbmx5IFBMR3MpLgorZXZlbnQ6MHgxZmI3IGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzAyX2N5Y2xlcyAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6VHlwZV9CX1RyYW5zZmVyCTogVHlwZSBCIGRhdGEgdHJhbnNmZXIuCitldmVudDoweDFmYjggY291bnRlcnM6MCwxLDIsMyB1bTpQUFVfMDJfY3ljbGVzICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpDbWRfQ3JlZGl0X09ubHlfUExHCTogQ29tbWFuZC1jcmVkaXQtb25seSBjb21tYW5kIFBMRyBpbiBlaXRoZXIgSU9JRiBvciBCSUYgbW9kZS4KK2V2ZW50OjB4MWZiOSBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8wMl9jeWNsZXMgICAgICAgICAgbWluaW11bToxMDAwMAluYW1lOkRhdGFfQ3JlZGl0X09ubHlfUExHCTogRGF0YS1jcmVkaXQtb25seSBkYXRhIFBMRyBzZW50IGluIGVpdGhlciBJT0lGIG9yIEJJRiBtb2RlLgorZXZlbnQ6MHgxZmJhIGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzAyX2N5Y2xlcyAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6Tm9uLU51bGxfRW52ZWxvcGVzCTogTm9uLW51bGwgZW52ZWxvcGUgc2VudCAoZG9lcyBub3QgaW5jbHVkZSBsb25nIGVudmVsb3BlcykuCitldmVudDoweDFmYmMgY291bnRlcnM6MCwxLDIsMyB1bTpQUFVfMDJfZWRnZXMgICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpudWxsX2Vudl9zZW50CQk6IE51bGwgZW52ZWxvcGUgc2VudCAoc2VlIE5vdGUgMSkuCitldmVudDoweDFmYmQgY291bnRlcnM6MCwxLDIsMyB1bTpQUFVfMDJfZWRnZXMgICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpub192YWxpZF9kYXRhCQk6IE5vIHZhbGlkIGRhdGEgc2VudCB0aGlzIGN5Y2xlIChzZWUgTm90ZSAxKS4KK2V2ZW50OjB4MWZiZSBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8wMl9lZGdlcyAgICAgICAgICAgbWluaW11bToxMDAwMAluYW1lOm5vcm1fZW52X3NlbnQJCTogTm9ybWFsIGVudmVsb3BlIHNlbnQgKHNlZSBOb3RlIDEpLgorZXZlbnQ6MHgxZmJmIGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzAyX2VkZ2VzICAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6bG5vZ19lbnZfc2VudAkJOiBMb25nIGVudmVsb3BlIHNlbnQgKHNlZSBOb3RlIDEpLgorZXZlbnQ6MHgxZmMwIGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzAyX2VkZ2VzICAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6cGVyX21vbl9udWxsX3NlbnQJOiBBIE51bGwgUExHIGluc2VydGVkIGluIGFuIG91dGdvaW5nIGVudmVsb3BlLgorZXZlbnQ6MHgxZmMxIGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzAyX2N5Y2xlcyAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6cGVyX21vbl9hcnJheV9mdWxsCTogT3V0Ym91bmQgZW52ZWxvcGUgYXJyYXkgaXMgZnVsbC4KKworIyBDQkUgU2lnbmFsIEdyb3VwIDgyIC0gQklGIENvbnRyb2xsZXIgLSBJT0lGMSBXb3JkIDAgKE5DbGsvMikKK2V2ZW50OjB4MjAxYiBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8wMl9jeWNsZXMgICAgICAgICAgbWluaW11bToxMDAwMAluYW1lOlR5cGVfQl9UcmFuc2Zlcgk6IFR5cGUgQiBkYXRhIHRyYW5zZmVyLgorCisKKyMgQ0JFIFNpZ25hbCBHcm91cCA4MyAtIEJJRiBDb250cm9sbGVyIC0gSU9JRjAgV29yZCAyIChOQ2xrLzIpCitldmVudDoweDIwNmQgY291bnRlcnM6MCwxLDIsMyB1bTpQUFVfMDJfZWRnZXMgICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpudWxsX2Vudl9yY3ZkCQk6IE51bGwgZW52ZWxvcGUgcmVjZWl2ZWQgKHNlZSBOb3RlIDEpLgorZXZlbnQ6MHgyMDdhIGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzAyX2N5Y2xlcyAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6Q29tbWFuZF9QTEcJCTogQ29tbWFuZCBQTEcsIGJ1dCBub3QgY3JlZGl0LW9ubHkgUExHLiBJbiBJT0lGIG1vZGUsIGNvdW50cyBJL08gY29tbWFuZCBvciByZXBseSBQTEdzLiBJbiBCSUYgbW9kZSwgY291bnRzIGNvbW1hbmQvcmVmbGVjdGVkIGNvbW1hbmQgb3Igc25vb3AvY29tYmluZWQgcmVzcG9uc2VzLgorZXZlbnQ6MHgyMDdiIGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzAyX2N5Y2xlcyAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6Q29tbWFuZF9DcmVkaXRfT25seV9QTEcJOiBDb21tYW5kLWNyZWRpdC1vbmx5IGNvbW1hbmQgUExHLgorZXZlbnQ6MHgyMDgwIGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzAyX2VkZ2VzICAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6bm9ybV9lbnZfcmN2ZF9nb29kCTogTm9ybWFsIGVudmVsb3BlIHJlY2VpdmVkIGlzIGdvb2QgKHNlZSBOb3RlIDEpLgorZXZlbnQ6MHgyMDgxIGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzAyX2VkZ2VzICAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6bG9uZ19lbnZfcmN2ZF9nb29kCTogTG9uZyBlbnZlbG9wZSByZWNlaXZlZCBpcyBnb29kIChzZWUgTm90ZSAxKS4KK2V2ZW50OjB4MjA4MiBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8wMl9jeWNsZXMgICAgICAgICAgbWluaW11bToxMDAwMAluYW1lOmNtZF9jcmVkaXRfb25seV9QTEcJOiBEYXRhLWNyZWRpdC1vbmx5IGRhdGEgUExHIGluIGVpdGhlciBJT0lGIG9yIEJJRiBtb2RlOyB3aWxsIGNvdW50IGEgbWF4aW11bSBvZiBvbmUgcGVyIGVudmVsb3BlIChzZWUgTm90ZSAxKS4KK2V2ZW50OjB4MjA4MyBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8wMl9jeWNsZXMgICAgICAgICAgbWluaW11bToxMDAwMAluYW1lOm5vbi1udWxsX2VudmVsb3BlCTogTm9uLW51bGwgZW52ZWxvcGU7IGRvZXMgbm90IGluY2x1ZGUgbG9uZyBlbnZlbG9wZXM7IGluY2x1ZGVzIHJldHJpZWQgZW52ZWxvcGVzIChzZWUgTm90ZSAxKS4KK2V2ZW50OjB4MjA4NCBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8wMl9jeWNsZXMgICAgICAgICAgbWluaW11bToxMDAwMAluYW1lOmRhdGFfZ3JudF9yY3ZkCTogRGF0YSBncmFudCByZWNlaXZlZC4KK2V2ZW50OjB4MjA4OCBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8wMl9jeWNsZXMgICAgICAgICAgbWluaW11bToxMDAwMAluYW1lOkRhdGFfUExHCQk6IERhdGEgUExHLiBEb2VzIG5vdCBpbmNsdWRlIGhlYWRlci1vbmx5IG9yIGNyZWRpdC1vbmx5IFBMR3MuCitldmVudDoweDIwODkgY291bnRlcnM6MCwxLDIsMyB1bTpQUFVfMDJfY3ljbGVzICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpUeXBlX0FfdHJhbnNmZXIJOiBUeXBlIEEgZGF0YSB0cmFuc2ZlciByZWdhcmRsZXNzIG9mIGxlbmd0aC4gQ2FuIGFsc28gYmUgdXNlZCB0byBjb3VudCBUeXBlIEEgZGF0YSBoZWFkZXIgUExHcywgYnV0IG5vdCBjcmVkaXQtb25seSBQTEdzLgorZXZlbnQ6MHgyMDhhIGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzAyX2N5Y2xlcyAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6VHlwZV9CX3RyYW5zZmVyCTogVHlwZSBCIGRhdGEgdHJhbnNmZXIuCisKKyMgQ0JFIFNpZ25hbCBHcm91cCA4NCAtIEJJRiBDb250cm9sbGVyIC0gSU9JRjEgV29yZCAyIChOQ2xrLzIpCitldmVudDoweDIwZDEgY291bnRlcnM6MCwxLDIsMyB1bTpQUFVfMDJfZWRnZXMgICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpudWxsX2Vudl9yY3ZkCQk6IE51bGwgZW52ZWxvcGUgcmVjZWl2ZWQgKHNlZSBOb3RlIDEpLgorZXZlbnQ6MHgyMGRlIGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzAyX2N5Y2xlcyAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6Q29tbWFuZF9QTEcJCTogQ29tbWFuZCBQTEcgKG5vIGNyZWRpdC1vbmx5IFBMRykuIENvdW50cyBJL08gY29tbWFuZCBvciByZXBseSBQTEdzLgorZXZlbnQ6MHgyMGRmIGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzAyX2N5Y2xlcyAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6Q29tbWFuZF9DcmVkaXRfT25seV9QTEcJOiBDb21tYW5kLWNyZWRpdC1vbmx5IGNvbW1hbmQgUExHLgorZXZlbnQ6MHgyMGU0IGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzAyX2VkZ2VzICAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6bm9ybV9lbnZfcmN2ZF9nb29kCTogTm9ybWFsIGVudmVsb3BlIHJlY2VpdmVkIGlzIGdvb2QgKHNlZSBOb3RlIDEpLgorZXZlbnQ6MHgyMGU1IGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzAyX2VkZ2VzICAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6bG9uZ19lbnZfcmN2ZF9nb29kCTogTG9uZyBlbnZlbG9wZSByZWNlaXZlZCBpcyBnb29kIChzZWUgTm90ZSAxKS4KK2V2ZW50OjB4MjBlNiBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8wMl9jeWNsZXMgICAgICAgICAgbWluaW11bToxMDAwMAluYW1lOmNtZF9jcmVkaXRfb25seV9QTEcJOiBEYXRhLWNyZWRpdC1vbmx5IGRhdGEgUExHIHJlY2VpdmVkOyB3aWxsIGNvdW50IGEgbWF4aW11bSBvZiBvbmUgcGVyIGVudmVsb3BlIChzZWUgTm90ZSAxKS4KK2V2ZW50OjB4MjBlNyBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8wMl9jeWNsZXMgICAgICAgICAgbWluaW11bToxMDAwMAluYW1lOm5vbi1udWxsX2VudmVsb3BlCTogTm9uLU51bGwgZW52ZWxvcGUgcmVjZWl2ZWQ7IGRvZXMgbm90IGluY2x1ZGUgbG9uZyBlbnZlbG9wZXM7IGluY2x1ZGVzIHJldHJpZWQgZW52ZWxvcGVzIChzZWUgTm90ZSAxKS4KK2V2ZW50OjB4MjBlOCBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8wMl9jeWNsZXMgICAgICAgICAgbWluaW11bToxMDAwMAluYW1lOmRhdGFfZ3JudF9yY3ZkCTogRGF0YSBncmFudCByZWNlaXZlZC4KK2V2ZW50OjB4MjBlYyBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8wMl9jeWNsZXMgICAgICAgICAgbWluaW11bToxMDAwMAluYW1lOkRhdGFfUExHCQk6IERhdGEgUExHIHJlY2VpdmVkLiBEb2VzIG5vdCBpbmNsdWRlIGhlYWRlci1vbmx5IG9yIGNyZWRpdC1vbmx5IFBMR3MuCitldmVudDoweDIwZWQgY291bnRlcnM6MCwxLDIsMyB1bTpQUFVfMDJfY3ljbGVzICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpUeXBlX0FfdHJhbnNmZXIJOiBUeXBlIEkgQSBkYXRhIHRyYW5zZmVyIHJlZ2FyZGxlc3Mgb2YgbGVuZ3RoLiBDYW4gYWxzbyBiZSB1c2VkIHRvIGNvdW50IFR5cGUgQSBkYXRhIGhlYWRlciBQTEdzIChidXQgbm90IGNyZWRpdC1vbmx5IFBMR3MpLgorZXZlbnQ6MHgyMGVlIGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzAyX2N5Y2xlcyAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6VHlwZV9CX3RyYW5zZmVyCTogVHlwZSBCIGRhdGEgdHJhbnNmZXIgcmVjZWl2ZWQuCisKKyMgQ0JFIFNpZ25hbCBHcm91cCA4NSAtIEkvTyBDb250cm9sbGVyIFdvcmQgMCAtIEdyb3VwIDEgKE5DbGsvMikKK2V2ZW50OjB4MjEzYyBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8wMl9lZGdlcyAgICAgICAgICAgbWluaW11bToxMDAwMAluYW1lOm1taW9fcmRfdG9faW9pZjEJOiBSZWNlaXZlZCBNTUlPIHJlYWQgdGFyZ2V0ZWQgdG8gSU9JRjEuCitldmVudDoweDIxM2QgY291bnRlcnM6MCwxLDIsMyB1bTpQUFVfMDJfZWRnZXMgICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTptbWlvX3dydF90b19pb2lmMQk6IFJlY2VpdmVkIE1NSU8gd3JpdGUgdGFyZ2V0ZWQgdG8gSU9JRjEuCitldmVudDoweDIxM2UgY291bnRlcnM6MCwxLDIsMyB1bTpQUFVfMDJfZWRnZXMgICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTptbWlvX3JkX3RvX2lvaWYwCTogUmVjZWl2ZWQgTU1JTyByZWFkIHRhcmdldGVkIHRvIElPSUYwLgorZXZlbnQ6MHgyMTNmIGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzAyX2VkZ2VzICAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6bW1pb193cnRfdG9faW9pZjAJOiBSZWNlaXZlZCBNTUlPIHdyaXRlIHRhcmdldGVkIHRvIElPSUYwLgorZXZlbnQ6MHgyMTQwIGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzAyX2N5Y2xlcyAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6Y21kX3RvX3NsaWNlMAkJOiBTZW50IGNvbW1hbmQgdG8gSU9JRjAuCitldmVudDoweDIxNDEgY291bnRlcnM6MCwxLDIsMyB1bTpQUFVfMDJfY3ljbGVzICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpjbWRfdG9fc2xpY2UxCQk6IFNlbnQgY29tbWFuZCB0byBJT0lGMS4KKworIyBDQkUgU2lnbmFsIEdyb3VwIDg2IC0gSS9PIENvbnRyb2xsZXIgV29yZCAyIC0gR3JvdXAgMiAoTkNsay8yKQorZXZlbnQ6MHgyMTlkIGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzAyX2N5Y2xlc19vcl9lZGdlcyBtaW5pbXVtOjEwMDAwCW5hbWU6cmVfZGVwX2RtMwkJOiBJT0lGMCBEZXBlbmRlbmN5IE1hdHJpeCAzIGlzIG9jY3VwaWVkIGJ5IGEgZGVwZW5kZW50IGNvbW1hbmQgKHNlZSBOb3RlIDEpLgorZXZlbnQ6MHgyMTllIGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzAyX2N5Y2xlc19vcl9lZGdlcyBtaW5pbXVtOjEwMDAwCW5hbWU6cmVfZGVwX2RtNAkJOiBJT0lGMCBEZXBlbmRlbmN5IE1hdHJpeCA0IGlzIG9jY3VwaWVkIGJ5IGEgZGVwZW5kZW50IGNvbW1hbmQgKHNlZSBOb3RlIDEpLgorZXZlbnQ6MHgyMTlmIGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzAyX2N5Y2xlc19vcl9lZGdlcyBtaW5pbXVtOjEwMDAwCW5hbWU6cmVfZGVwX2RtNQkJOiBJT0lGMCBEZXBlbmRlbmN5IE1hdHJpeCA1IGlzIG9jY3VwaWVkIGJ5IGEgZGVwZW5kZW50IGNvbW1hbmQgKHNlZSBOb3RlIDEpLgorZXZlbnQ6MHgyMWEyIGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzAyX2VkZ2VzICAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6c2xpY2UwX2xkX3Jxc3QJOiBSZWNlaXZlZCByZWFkIHJlcXVlc3QgZnJvbSBJT0lGMC4KK2V2ZW50OjB4MjFhMyBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8wMl9lZGdlcyAgICAgICAgICAgbWluaW11bToxMDAwMAluYW1lOnNsaWNlMF9zdHJfcnFzdAk6IFJlY2VpdmVkIHdyaXRlIHJlcXVlc3QgZnJvbSBJT0lGMC4KK2V2ZW50OjB4MjFhNiBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8wMl9lZGdlcyAgICAgICAgICAgbWluaW11bToxMDAwMAluYW1lOmludHJwdF9mcm9tX3JlYWxpemVyCTogUmVjZWl2ZWQgaW50ZXJydXB0IGZyb20gdGhlIElPSUYwLgorCisjIENCRSBTaWduYWwgR3JvdXAgODcgLSBJL08gQ29udHJvbGxlciAtIEdyb3VwIDMgKE5DbGsvMikKK2V2ZW50OjB4MjIwYyBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8wMl9jeWNsZXMgICAgICAgICAgbWluaW11bToxMDAwMAluYW1lOnNsaWNlMF9ycXN0X3Rrbl9ldmVuCTogSU9JRjAgcmVxdWVzdCBmb3IgdG9rZW4gZm9yIGV2ZW4gbWVtb3J5IGJhbmtzIDAtMTQgKHNlZSBOb3RlIDEpLgorZXZlbnQ6MHgyMjBkIGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzAyX2N5Y2xlcyAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6c2xpY2UwX3Jxc3RfdGtuX29kZAk6IElPSUYwIHJlcXVlc3QgZm9yIHRva2VuIGZvciBvZGQgbWVtb3J5IGJhbmtzIDEtMTUgKHNlZSBOb3RlIDEpLgorZXZlbnQ6MHgyMjBlIGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzAyX2N5Y2xlcyAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6c2xpY2UwX3Jxc3RfdGtuMV8zXzVfNwk6IElPSUYwIHJlcXVlc3QgZm9yIHRva2VuIHR5cGUgMSwgMywgNSwgb3IgNyAoc2VlIE5vdGUgMSkuCitldmVudDoweDIyMGYgY291bnRlcnM6MCwxLDIsMyB1bTpQUFVfMDJfY3ljbGVzICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpzbGljZTBfcnFzdF90a245XzExXzEzXzE1CTogSU9JRjAgcmVxdWVzdCBmb3IgdG9rZW4gdHlwZSA5LCAxMSwgMTMsIG9yIDE1IChzZWUgTm90ZSAxKS4KK2V2ZW50OjB4MjIxNCBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8wMl9jeWNsZXMgICAgICAgICAgbWluaW11bToxMDAwMAluYW1lOnNsaWNlMF9ycXN0X3RrbjE2CTogSU9JRjAgcmVxdWVzdCBmb3IgdG9rZW4gdHlwZSAxNiAoc2VlIE5vdGUgMSkuCitldmVudDoweDIyMTUgY291bnRlcnM6MCwxLDIsMyB1bTpQUFVfMDJfY3ljbGVzICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpzbGljZTBfcnFzdF90a24xNwk6IElPSUYwIHJlcXVlc3QgZm9yIHRva2VuIHR5cGUgMTcgKHNlZSBOb3RlIDEpLgorZXZlbnQ6MHgyMjE2IGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzAyX2N5Y2xlcyAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6c2xpY2UwX3Jxc3RfdGtuMTgJOiBJT0lGMCByZXF1ZXN0IGZvciB0b2tlbiB0eXBlIDE4IChzZWUgTm90ZSAxKS4KK2V2ZW50OjB4MjIxNyBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8wMl9jeWNsZXMgICAgICAgICAgbWluaW11bToxMDAwMAluYW1lOnNsaWNlMF9ycXN0X3RrbjE5CTogSU9JRjAgcmVxdWVzdCBmb3IgdG9rZW4gdHlwZSAxOSAoc2VlIE5vdGUgMSkuCisKKworIyBDQkUgU2lnbmFsIEdyb3VwIDg4IC0gSS9PIENvbnRyb2xsZXIgV29yZCAwIC0gR3JvdXAgNCAoTkNsay8yKQorZXZlbnQ6MHgyMjYwIGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzAyX2VkZ2VzICAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6aW9fcHRfaGl0CQk6IEkvTyBwYWdlIHRhYmxlIGNhY2hlIGhpdCBmb3IgY29tbWFuZHMgZnJvbSBJT0lGLgorZXZlbnQ6MHgyMjYxIGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzAyX2VkZ2VzICAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6aW9fcHRfbWlzcwkJOiBJL08gcGFnZSB0YWJsZSBjYWNoZSBtaXNzIGZvciBjb21tYW5kcyBmcm9tIElPSUYuCitldmVudDoweDIyNjMgY291bnRlcnM6MCwxLDIsMyB1bTpQUFVfMDJfZWRnZXMgICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTppb19zZWdfdGJsX2hpdAk6IEkvTyBzZWdtZW50IHRhYmxlIGNhY2hlIGhpdC4KK2V2ZW50OjB4MjI2NCBjb3VudGVyczowLDEsMiwzIHVtOlBQVV8wMl9lZGdlcyAgICAgICAgICAgbWluaW11bToxMDAwMAluYW1lOmlvX3NlZ190YmxfbWlzcwk6IEkvTyBzZWdtZW50IHRhYmxlIGNhY2hlIG1pc3MuCitldmVudDoweDIyNzggY291bnRlcnM6MCwxLDIsMyB1bTpQUFVfMDJfZWRnZXMgICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTppbnRycnB0X2ZybV9zcHUJOiBJbnRlcnJ1cHQgcmVjZWl2ZWQgZnJvbSBhbnkgU1BVIChyZWZsZWN0ZWQgY21kIHdoZW4gSUlDIGhhcyBzZW50IEFDSyByZXNwb25zZSkuCitldmVudDoweDIyNzkgY291bnRlcnM6MCwxLDIsMyB1bTpQUFVfMDJfZWRnZXMgICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTppaWNfaW50cnJwdF90b19wdV90aHJkMAk6IEludGVybmFsIGludGVycnVwdCBjb250cm9sbGVyIChJSUMpIGdlbmVyYXRlZCBpbnRlcnJ1cHQgdG8gUFBVIHRocmVhZCAwLgorZXZlbnQ6MHgyMjdhIGNvdW50ZXJzOjAsMSwyLDMgdW06UFBVXzAyX2VkZ2VzICAgICAgICAgICBtaW5pbXVtOjEwMDAwCW5hbWU6aWljX2ludHJycHRfdG9fcHVfdGhyZDEJOiBJSUMgZ2VuZXJhdGVkIGludGVycnVwdCB0byBQUFUgdGhyZWFkIDEuCitldmVudDoweDIyN2IgY291bnRlcnM6MCwxLDIsMyB1bTpQUFVfMDJfZWRnZXMgICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpwdV9pbnRycnB0X3RvX3B1X3RocmQwCTogUmVjZWl2ZWQgZXh0ZXJuYWwgaW50ZXJydXB0ICh1c2luZyBNTUlPKSBmcm9tIFBQVSB0byBQUFUgdGhyZWFkIDAuCitldmVudDoweDIyN2MgY291bnRlcnM6MCwxLDIsMyB1bTpQUFVfMDJfZWRnZXMgICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpwdV9pbnRycnB0X3RvX3B1X3RocmQxCTogUmVjZWl2ZWQgZXh0ZXJuYWwgaW50ZXJydXB0ICh1c2luZyBNTUlPKSBmcm9tIFBQVSB0byBQUFUgdGhyZWFkIDEuCitldmVudDoweDIyN2MgY291bnRlcnM6MCwxLDIsMyB1bTpQUFVfMDJfZWRnZXMgICAgICAgICAgIG1pbmltdW06MTAwMDAJbmFtZTpwdV9pbnRycnB0X3RvX3B1X3RocmQxCTogUmVjZWl2ZWQgZXh0ZXJuYWwgaW50ZXJydXB0ICh1c2luZyBNTUlPKSBmcm9tIFBQVSB0byBQUFUgdGhyZWFkIDEuCmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9ldmVudHMvcHBjNjQvY2VsbC1iZS91bml0X21hc2tzIGIvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL3BwYzY0L2NlbGwtYmUvdW5pdF9tYXNrcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NGE0OTU5Ci0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL3BwYzY0L2NlbGwtYmUvdW5pdF9tYXNrcwpAQCAtMCwwICsxLDEzNyBAQAorIyBDZWxsIEJyb2FkYmFuZCBFbmdpbmUgcG9zc2libGUgdW5pdCBtYXNrcworIworIyBDb3B5cmlnaHQgT1Byb2ZpbGUgYXV0aG9ycworIworIyhDKSBDT1BZUklHSFQgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3JwLiAyMDA2CisjIENvbnRyaWJ1dGVkIGJ5IE1heW5hcmQgSm9obnNvbiA8bWF5bmFyZGpAdXMuaWJtLmNvbT4KKyMKKyMKK25hbWU6emVybyB0eXBlOm1hbmRhdG9yeSBkZWZhdWx0OjB4MAorCTB4MDAwIENvdW50IGN5Y2xlcwkJCQlbbWFuZGF0b3J5XQorbmFtZTpQUFVfMF9jeWNsZXMgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwMTMKKwkweDAwMSBDb3VudCBjeWNsZXMJCQkJW21hbmRhdG9yeV0KKwkweDAwMCBOZWdhdGl2ZSBwb2xhcml0eQkJCQlbb3B0aW9uYWwgXQorCTB4MDAyIFBvc2l0aXZlIHBvbGFyaXR5CQkJCVtkZWZhdWx0ICBdCisJMHgwMTAgUFBVIEJ1cyBXb3JkIDAJCQkJW21hbmRhdG9yeV0KK25hbWU6UFBVXzBfZWRnZXMgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwMTIKKwkweDAwMCBDb3VudCBlZGdlcwkJCQlbbWFuZGF0b3J5XQorCTB4MDAwIE5lZ2F0aXZlIHBvbGFyaXR5CQkJCVtvcHRpb25hbCBdCisJMHgwMDIgUG9zaXRpdmUgcG9sYXJpdHkJCQkJW2RlZmF1bHQgIF0KKwkweDAxMCBQUFUgQnVzIFdvcmQgMAkJCQlbbWFuZGF0b3J5XQorbmFtZTpQUFVfMl9jeWNsZXMgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwNDMKKwkweDAwMSBDb3VudCBjeWNsZXMJCQkJW21hbmRhdG9yeV0KKwkweDAwMCBOZWdhdGl2ZSBwb2xhcml0eQkJCQlbb3B0aW9uYWwgXQorCTB4MDAyIFBvc2l0aXZlIHBvbGFyaXR5CQkJCVtkZWZhdWx0ICBdCisJMHgwNDAgUFBVIEJ1cyBXb3JkIDIJCQkJW21hbmRhdG9yeV0KK25hbWU6UFBVXzJfZWRnZXMgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwNDIKKwkweDAwMCBDb3VudCBlZGdlcwkJCQlbbWFuZGF0b3J5XQorCTB4MDAwIE5lZ2F0aXZlIHBvbGFyaXR5CQkJCVtvcHRpb25hbCBdCisJMHgwMDIgUG9zaXRpdmUgcG9sYXJpdHkJCQkJW2RlZmF1bHQgIF0KKwkweDA0MCBQUFUgQnVzIFdvcmQgMgkJCQlbbWFuZGF0b3J5XQorbmFtZTpQUFVfMDFfY3ljbGVzIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MDIzCisJMHgwMDEgQ291bnQgY3ljbGVzCQkJCVttYW5kYXRvcnldCisJMHgwMDAgTmVnYXRpdmUgcG9sYXJpdHkJCQkJW29wdGlvbmFsIF0KKwkweDAwMiBQb3NpdGl2ZSBwb2xhcml0eQkJCQlbZGVmYXVsdCAgXQorCTB4MDEwIFBQVSBCdXMgV29yZCAwCQkJCVtvcHRpb25hbCBdCisJMHgwMjAgUFBVIEJ1cyBXb3JkIDEJCQkJW2RlZmF1bHQgIF0KK25hbWU6UFBVXzAxX2VkZ2VzIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MDIyCisJMHgwMDAgQ291bnQgZWRnZXMJCQkJW21hbmRhdG9yeV0KKwkweDAwMCBOZWdhdGl2ZSBwb2xhcml0eQkJCQlbb3B0aW9uYWwgXQorCTB4MDAyIFBvc2l0aXZlIHBvbGFyaXR5CQkJCVtkZWZhdWx0ICBdCisJMHgwMTAgUFBVIEJ1cyBXb3JkIDAJCQkJW29wdGlvbmFsIF0KKwkweDAyMCBQUFUgQnVzIFdvcmQgMQkJCQlbZGVmYXVsdCAgXQorbmFtZTpQUFVfMDFfY3ljbGVzX29yX2VkZ2VzIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MDIzCisJMHgwMDAgQ291bnQgZWRnZXMJCQkJW29wdGlvbmFsIF0KKwkweDAwMSBDb3VudCBjeWNsZXMJCQkJW2RlZmF1bHQgIF0KKwkweDAwMCBOZWdhdGl2ZSBwb2xhcml0eQkJCQlbb3B0aW9uYWwgXQorCTB4MDAyIFBvc2l0aXZlIHBvbGFyaXR5CQkJCVtkZWZhdWx0ICBdCisJMHgwMTAgUFBVIEJ1cyBXb3JkIDAJCQkJW29wdGlvbmFsIF0KKwkweDAyMCBQUFUgQnVzIFdvcmQgMQkJCQlbZGVmYXVsdCAgXQorbmFtZTpQUFVfMDJfY3ljbGVzIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MDEzCisJMHgwMDEgQ291bnQgY3ljbGVzCQkJCVttYW5kYXRvcnldCisJMHgwMDAgTmVnYXRpdmUgcG9sYXJpdHkJCQkJW29wdGlvbmFsIF0KKwkweDAwMiBQb3NpdGl2ZSBwb2xhcml0eQkJCQlbZGVmYXVsdCAgXQorCTB4MDEwIFBQVSBCdXMgV29yZCAwCQkJCVtkZWZhdWx0ICBdCisJMHgwNDAgUFBVIEJ1cyBXb3JkIDIJCQkJW29wdGlvbmFsIF0KK25hbWU6UFBVXzAyX2VkZ2VzIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MDEyCisJMHgwMDAgQ291bnQgZWRnZXMJCQkJW21hbmRhdG9yeV0KKwkweDAwMCBOZWdhdGl2ZSBwb2xhcml0eQkJCQlbb3B0aW9uYWwgXQorCTB4MDAyIFBvc2l0aXZlIHBvbGFyaXR5CQkJCVtkZWZhdWx0ICBdCisJMHgwMTAgUFBVIEJ1cyBXb3JkIDAJCQkJW2RlZmF1bHQgIF0KKwkweDA0MCBQUFUgQnVzIFdvcmQgMgkJCQlbb3B0aW9uYWwgXQorbmFtZTpQUFVfMDJfY3ljbGVzX29yX2VkZ2VzIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MDEzCisJMHgwMDAgQ291bnQgZWRnZXMJCQkJW29wdGlvbmFsIF0KKwkweDAwMSBDb3VudCBjeWNsZXMJCQkJW2RlZmF1bHQgIF0KKwkweDAwMCBOZWdhdGl2ZSBwb2xhcml0eQkJCQlbb3B0aW9uYWwgXQorCTB4MDAyIFBvc2l0aXZlIHBvbGFyaXR5CQkJCVtkZWZhdWx0ICBdCisJMHgwMTAgUFBVIEJ1cyBXb3JkIDAJCQkJW2RlZmF1bHQgIF0KKwkweDA0MCBQUFUgQnVzIFdvcmQgMgkJCQlbb3B0aW9uYWwgXQorbmFtZTpQUFVfMDEyM19jeWNsZXMgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwMzMKKwkweDAwMSBDb3VudCBjeWNsZXMJCQkJW21hbmRhdG9yeV0KKwkweDAwMCBOZWdhdGl2ZSBwb2xhcml0eQkJCQlbb3B0aW9uYWwgXQorCTB4MDAyIFBvc2l0aXZlIHBvbGFyaXR5CQkJCVtkZWZhdWx0ICBdCisJMHgwMzAgUFBVIEJ1cyBXb3JkIDAvMQkJCQlbZGVmYXVsdCAgXQorCTB4MGMwIFBQVSBCdXMgV29yZCAyLzMJCQkJW29wdGlvbmFsIF0KK25hbWU6U1BVXzAyX2N5Y2xlcyB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDAxMTMKKwkweDAwMDEgQ291bnQgY3ljbGVzCQkJCVttYW5kYXRvcnldCisJMHgwMDAwIE5lZ2F0aXZlIHBvbGFyaXR5CQkJW29wdGlvbmFsIF0KKwkweDAwMDIgUG9zaXRpdmUgcG9sYXJpdHkJCQlbZGVmYXVsdCAgXQorCTB4MDExMCBTUFUgQnVzIFdvcmQgMAkJCQlbZGVmYXVsdCAgXQorCTB4MDE0MCBTUFUgQnVzIFdvcmQgMgkJCQlbb3B0aW9uYWwgXQorCTB4MDAwMCBTUFUgMAkJCQkJW2RlZmF1bHQgIF0KKwkweDEwMDAgU1BVIDEJCQkJCVtvcHRpb25hbCBdCisJMHgyMDAwIFNQVSAyCQkJCQlbb3B0aW9uYWwgXQorCTB4MzAwMCBTUFUgMwkJCQkJW29wdGlvbmFsIF0KKwkweDQwMDAgU1BVIDQJCQkJCVtvcHRpb25hbCBdCisJMHg1MDAwIFNQVSA1CQkJCQlbb3B0aW9uYWwgXQorCTB4NjAwMCBTUFUgNgkJCQkJW29wdGlvbmFsIF0KKwkweDcwMDAgU1BVIDcJCQkJCVtvcHRpb25hbCBdCituYW1lOlNQVV8wMl9jeWNsZXNfb3JfZWRnZXMgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwMTEzCisJMHgwMDAwIENvdW50IGVkZ2VzCQkJCVtvcHRpb25hbCBdCisJMHgwMDAxIENvdW50IGN5Y2xlcwkJCQlbZGVmYXVsdCAgXQorCTB4MDAwMCBOZWdhdGl2ZSBwb2xhcml0eQkJCVtvcHRpb25hbCBdCisJMHgwMDAyIFBvc2l0aXZlIHBvbGFyaXR5CQkJW2RlZmF1bHQgIF0KKwkweDAxMTAgU1BVIEJ1cyBXb3JkIDAJCQkJW2RlZmF1bHQgIF0KKwkweDAxNDAgU1BVIEJ1cyBXb3JkIDIJCQkJW29wdGlvbmFsIF0KKwkweDAwMDAgU1BVIDAJCQkJCVtkZWZhdWx0ICBdCisJMHgxMDAwIFNQVSAxCQkJCQlbb3B0aW9uYWwgXQorCTB4MjAwMCBTUFUgMgkJCQkJW29wdGlvbmFsIF0KKwkweDMwMDAgU1BVIDMJCQkJCVtvcHRpb25hbCBdCisJMHg0MDAwIFNQVSA0CQkJCQlbb3B0aW9uYWwgXQorCTB4NTAwMCBTUFUgNQkJCQkJW29wdGlvbmFsIF0KKwkweDYwMDAgU1BVIDYJCQkJCVtvcHRpb25hbCBdCisJMHg3MDAwIFNQVSA3CQkJCQlbb3B0aW9uYWwgXQorbmFtZTpTUFVfVHJpZ2dlcl9jeWNsZXNfb3JfZWRnZXMgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwMTA3CisJMHgwMDAwIENvdW50IGVkZ2VzCQkJCVtvcHRpb25hbCBdCisJMHgwMDAxIENvdW50IGN5Y2xlcwkJCQlbZGVmYXVsdCAgXQorCTB4MDAwMCBOZWdhdGl2ZSBwb2xhcml0eQkJCVtvcHRpb25hbCBdCisJMHgwMDAyIFBvc2l0aXZlIHBvbGFyaXR5CQkJW2RlZmF1bHQgIF0KKwkweDAxMDQgU1BVIFRyaWdnZXIgMAkJCQlbZGVmYXVsdCAgXQorCTB4MDExNCBTUFUgVHJpZ2dlciAxCQkJCVtvcHRpb25hbCBdCisJMHgwMTI0IFNQVSBUcmlnZ2VyIDIJCQkJW29wdGlvbmFsIF0KKwkweDAxMzQgU1BVIFRyaWdnZXIgMwkJCQlbb3B0aW9uYWwgXQorCTB4MDAwMCBTUFUgMAkJCQkJW2RlZmF1bHQgIF0KKwkweDEwMDAgU1BVIDEJCQkJCVtvcHRpb25hbCBdCisJMHgyMDAwIFNQVSAyCQkJCQlbb3B0aW9uYWwgXQorCTB4MzAwMCBTUFUgMwkJCQkJW29wdGlvbmFsIF0KKwkweDQwMDAgU1BVIDQJCQkJCVtvcHRpb25hbCBdCisJMHg1MDAwIFNQVSA1CQkJCQlbb3B0aW9uYWwgXQorCTB4NjAwMCBTUFUgNgkJCQkJW29wdGlvbmFsIF0KKwkweDcwMDAgU1BVIDcJCQkJCVtvcHRpb25hbCBdCituYW1lOlNQVV9FdmVudF9jeWNsZXNfb3JfZWRnZXMgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwMTQ3CisJMHgwMDAwIENvdW50IGVkZ2VzCQkJCVtvcHRpb25hbCBdCisJMHgwMDAxIENvdW50IGN5Y2xlcwkJCQlbZGVmYXVsdCAgXQorCTB4MDAwMCBOZWdhdGl2ZSBwb2xhcml0eQkJCVtvcHRpb25hbCBdCisJMHgwMDAyIFBvc2l0aXZlIHBvbGFyaXR5CQkJW2RlZmF1bHQgIF0KKwkweDAxNDQgU1BVIEV2ZW50IDAJCQkJW2RlZmF1bHQgIF0KKwkweDAxNTQgU1BVIEV2ZW50IDEJCQkJW29wdGlvbmFsIF0KKwkweDAxNjQgU1BVIEV2ZW50IDIJCQkJW29wdGlvbmFsIF0KKwkweDAxNzQgU1BVIEV2ZW50IDMJCQkJW29wdGlvbmFsIF0KKwkweDAwMDAgU1BVIDAJCQkJCVtkZWZhdWx0ICBdCisJMHgxMDAwIFNQVSAxCQkJCQlbb3B0aW9uYWwgXQorCTB4MjAwMCBTUFUgMgkJCQkJW29wdGlvbmFsIF0KKwkweDMwMDAgU1BVIDMJCQkJCVtvcHRpb25hbCBdCisJMHg0MDAwIFNQVSA0CQkJCQlbb3B0aW9uYWwgXQorCTB4NTAwMCBTUFUgNQkJCQkJW29wdGlvbmFsIF0KKwkweDYwMDAgU1BVIDYJCQkJCVtvcHRpb25hbCBdCisJMHg3MDAwIFNQVSA3CQkJCQlbb3B0aW9uYWwgXQpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL3BwYzY0L2libS1jb21wYXQtdjEvZXZlbnRfbWFwcGluZ3MgYi9vcHJvZmlsZS0wLjkuNy9ldmVudHMvcHBjNjQvaWJtLWNvbXBhdC12MS9ldmVudF9tYXBwaW5ncwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODA1NjA0Ci0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL3BwYzY0L2libS1jb21wYXQtdjEvZXZlbnRfbWFwcGluZ3MKQEAgLTAsMCArMSw4MiBAQAorI1BQQzY0IHBtdS1jb21wYXQgZXZlbnQgbWFwcGluZ3MsIHZlcnNpb24gMQorIworIyBDb3B5cmlnaHQgT1Byb2ZpbGUgYXV0aG9ycworIyBDb3B5cmlnaHQgKGMpIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMsIDIwMDkuCisjIENvbnRyaWJ1dGVkIGJ5IE1heW5hcmQgSm9obnNvbiA8bWF5bmFyZGpAdXMuaWJtLmNvbT4uCisjCisjTWFwcGluZyBvZiBldmVudCBncm91cHMgdG8gTU1DUiB2YWx1ZXMKKworI0dyb3VwIERlZmF1bHQKK2V2ZW50OjBYMDAxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMEZBRjQxRUY0IG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDEgcG1fY29tcGF0X3V0aWxpemF0aW9uMSwgQmFzaWMgQ1BVIHV0aWxpemF0aW9uCitldmVudDowWDAwMTAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwRkFGNDFFRjQgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMDExIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMEZBRjQxRUY0IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDAxMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDBGQUY0MUVGNCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAwMTMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwRkFGNDFFRjQgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMiBwbV9jb21wYXRfdXRpbGl6YXRpb24yLCBDUEkgYW5kIHV0aWxpemF0aW9uIGRhdGEKK2V2ZW50OjBYMDAyMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDBGNEY0MUVGQSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAwMjEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwRjRGNDFFRkEgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMDIyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMEY0RjQxRUZBIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDAyMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDBGNEY0MUVGQSBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAzIHBtX2NvbXBhdF9kc291cmNlLCBEYXRhIEFjY2VzcyBzb3VyY2VzCitldmVudDowWDAwMzAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwRkVGRUZFRkEgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMDMxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMEZFRkVGRUZBIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDAzMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDBGRUZFRkVGQSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAwMzMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwRkVGRUZFRkEgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgNCBwbV9jb21wYXRfbDFfZGNhY2hlX2xvYWRfc3RvcmVfbWlzcywgTDEgRC1DYWNoZSBsb2FkL3N0b3JlIG1pc3MKK2V2ZW50OjBYMDA0MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAwMkYwRjBGMCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAwNDEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMDJGMEYwRjAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMDQyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDAyRjBGMEYwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDA0MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAwMkYwRjBGMCBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCA1IHBtX2NvbXBhdF9sMV9jYWNoZV9sb2FkLCBMMSBDYWNoZSBsb2FkcworZXZlbnQ6MFgwMDUwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDAyRkVGNkYwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDA1MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAwMkZFRjZGMCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAwNTIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMDJGRUY2RjAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMDUzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDAyRkVGNkYwIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDYgcG1fY29tcGF0X2luc3RydWN0aW9uX2RpcmVjdG9yeSwgSW5zdHJ1Y3Rpb24gRGlyZWN0b3J5CitldmVudDowWDAwNjAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwRjZGQzAyRkMgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMDYxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMEY2RkMwMkZDIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDA2MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDBGNkZDMDJGQyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAwNjMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwRjZGQzAyRkMgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgNyBwbV9jb21wYXRfZGF0YV9kaXJlY3RvcnksIERhdGEgRGlyZWN0b3J5CitldmVudDowWDAwNzAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwRkNGNkZDRkEgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMDcxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMEZDRjZGQ0ZBIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDA3MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDBGQ0Y2RkNGQSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAwNzMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwRkNGNkZDRkEgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgOCBwbV9jb21wYXRfY3BpXzFwbHVzX3BwYywgTWlzYyBDUEkgYW5kIHV0aWxpemF0aW9uIGRhdGEKK2V2ZW50OjBYMDA4MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDBGMkY0RjJGMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAwODEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwRjJGNEYyRjIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMDgyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMEYyRjRGMkYyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDA4MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDBGMkY0RjJGMiBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCA5IHBtX2NvbXBhdF9taXNjX2V2ZW50czEsIE1pc2MgRXZlbnRzCitldmVudDowWDAwOTAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMDJGOEY4MUUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMDkxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDAyRjhGODFFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDA5MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAwMkY4RjgxRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAwOTMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMDJGOEY4MUUgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMTAgcG1fY29tcGF0X21pc2NfZXZlbnRzMiwgTWlzYyBFdmVudHMKK2V2ZW50OjBYMDBBMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDBGMEYyRjRGOCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAwQTEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwRjBGMkY0RjggbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMEEyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMEYwRjJGNEY4IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDBBMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDBGMEYyRjRGOCBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxMSBwbV9jb21wYXRfbWlzY19ldmVudHMzLCBNaXNjIEV2ZW50cworZXZlbnQ6MFgwMEIwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMEY4RjJGOEY2IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDBCMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDBGOEYyRjhGNiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAwQjIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwRjhGMkY4RjYgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMEIzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMEY4RjJGOEY2IG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDEyIHBtX2NvbXBhdF9zdXNwZW5kLCBTdXNwZW5kIEV2ZW50cworZXZlbnQ6MFgwMEMwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDAwMDAwMDAwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDBDMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAwMDAwMDAwMCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAwQzIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMDAwMDAwMDAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMEMzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDAwMDAwMDAwIG1tY3JhOjBYMDAwMDAwMDAKZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2V2ZW50cy9wcGM2NC9pYm0tY29tcGF0LXYxL2V2ZW50cyBiL29wcm9maWxlLTAuOS43L2V2ZW50cy9wcGM2NC9pYm0tY29tcGF0LXYxL2V2ZW50cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDVlOWM2Ci0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL3BwYzY0L2libS1jb21wYXQtdjEvZXZlbnRzCkBAIC0wLDAgKzEsOTEgQEAKKyNQUEM2NCBwbXUtY29tcGF0IGV2ZW50cywgdmVyc2lvbiAxCisjCisjIENvcHlyaWdodCBPUHJvZmlsZSBhdXRob3JzCisjIENvcHlyaWdodCAoYykgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcywgMjAwOS4KKyMgQ29udHJpYnV0ZWQgYnkgTWF5bmFyZCBKb2huc29uIDxtYXluYXJkakB1cy5pYm0uY29tPi4KKyMKKyMKKyMgIFdpdGhpbiBlYWNoIGdyb3VwLCB0aGUgZXZlbnQgbmFtZXMgbXVzdCBiZSB1bmlxdWUuICBFYWNoIGV2ZW50IGluIGEgZ3JvdXAgaXMKKyMgIGFzc2lnbmVkIHRvIGEgdW5pcXVlIGNvdW50ZXIuCisjCisjICBPbmx5IGV2ZW50cyB3aXRoaW4gdGhlIHNhbWUgZ3JvdXAgY2FuIGJlIHNlbGVjdGVkIHNpbXVsdGFuZW91c2x5LgorIyAgRWFjaCBldmVudCBpcyBnaXZlbiBhIHVuaXF1ZSBldmVudCBudW1iZXIuICBUaGUgZXZlbnQgbnVtYmVyIGlzIHVzZWQgYnkgdGhlCisjICBPUHJvZmlsZSBjb2RlIHRvIHJlc29sdmUgZXZlbnQgbmFtZXMgZm9yIHRoZSBwb3N0LXByb2Nlc3NpbmcuICBUaGlzIGlzIGRvbmUKKyMgIHRvIHByZXNlcnZlIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgcmVzdCBvZiB0aGUgT1Byb2ZpbGUgY29kZS4gIFRoZSBldmVudAorIyAgbnVtYmVycyBhcmUgZm9ybWF0dGVkIGFzIGZvbGxvd3M6IDxncm91cF9udW0+Y29uY2F0KDxjb3VudGVyIGZvciB0aGUgZXZlbnQ+KS4KKworI0dyb3VwIERlZmF1bHQKK2V2ZW50OjBYMDAxIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6Q1lDTEVTIDogUHJvY2Vzc29yIEN5Y2xlcworCisKKyNHcm91cCAxIHBtX2NvbXBhdF91dGlsaXphdGlvbjEsIEJhc2ljIENQVSB1dGlsaXphdGlvbgorZXZlbnQ6MFgwMDEwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9USFJEX09ORV9SVU5fQ1lDX0dSUDEgOiAoR3JvdXAgMSBwbV9jb21wYXRfdXRpbGl6YXRpb24xKSBBdCBsZWFzdCBvbmUgdGhyZWFkIGluIHJ1biBjeWNsZXMKK2V2ZW50OjBYMDAxMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQMSA6IChHcm91cCAxIHBtX2NvbXBhdF91dGlsaXphdGlvbjEpIFJ1biBjeWNsZXMKK2V2ZW50OjBYMDAxMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlAxIDogKEdyb3VwIDEgcG1fY29tcGF0X3V0aWxpemF0aW9uMSkgUHJvY2Vzc29yIGN5Y2xlcworZXZlbnQ6MFgwMDEzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fUFVSUl9HUlAxIDogKEdyb3VwIDEgcG1fY29tcGF0X3V0aWxpemF0aW9uMSkgUnVuIFBVUlIgRXZlbgorCisjR3JvdXAgMiBwbV9jb21wYXRfdXRpbGl6YXRpb24yLCBDUEkgYW5kIHV0aWxpemF0aW9uIGRhdGEKK2V2ZW50OjBYMDAyMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVX0ZMT1BfR1JQMiA6IChHcm91cCAyIHBtX2NvbXBhdF91dGlsaXphdGlvbjIpIEZQVSBleGVjdXRlZCAxRkxPUCwgRk1BLCBGU1FSVCBvciBGRElWIGluc3RydWN0aW9uCitldmVudDowWDAwMjEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDIgOiAoR3JvdXAgMiBwbV9jb21wYXRfdXRpbGl6YXRpb24yKSBSdW4gY3ljbGVzCitldmVudDowWDAwMjIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQMiA6IChHcm91cCAyIHBtX2NvbXBhdF91dGlsaXphdGlvbjIpIFByb2Nlc3NvciBjeWNsZXMKK2V2ZW50OjBYMDAyMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlAyIDogKEdyb3VwIDIgcG1fY29tcGF0X3V0aWxpemF0aW9uMikgUnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQKKworI0dyb3VwIDMgcG1fY29tcGF0X2Rzb3VyY2UsIERhdGEgQWNjZXNzIHNvdXJjZXMKK2V2ZW50OjBYMDAzMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fREFUQV9GUk9NX0wxLTVfR1JQMyA6IChHcm91cCAzIHBtX2NvbXBhdF9kc291cmNlKSBEYXRhIGxvYWRlZCBmcm9tIEwxLjUKK2V2ZW50OjBYMDAzMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fREFUQV9GUk9NX0wyTUlTU19HUlAzIDogKEdyb3VwIDMgcG1fY29tcGF0X2Rzb3VyY2UpIERhdGEgbG9hZGVkIG1pc3NlZCBMMgorZXZlbnQ6MFgwMDMyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQVRBX0ZST01fTDNNSVNTX0dSUDMgOiAoR3JvdXAgMyBwbV9jb21wYXRfZHNvdXJjZSkgRGF0YSBsb2FkZWQgZnJvbSBwcml2YXRlIEwzIG1pc3MKK2V2ZW50OjBYMDAzMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlAzIDogKEdyb3VwIDMgcG1fY29tcGF0X2Rzb3VyY2UpIFJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkCisKKyNHcm91cCA0IHBtX2NvbXBhdF9sMV9kY2FjaGVfbG9hZF9zdG9yZV9taXNzLCBMMSBELUNhY2hlIGxvYWQvc3RvcmUgbWlzcworZXZlbnQ6MFgwMDQwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDQgOiAoR3JvdXAgNCBwbV9jb21wYXRfbDFfZGNhY2hlX2xvYWRfc3RvcmVfbWlzcykgSW5zdHJ1Y3Rpb24gY29tcGxldGVkCitldmVudDowWDAwNDEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1NUX0ZJTl9HUlA0IDogKEdyb3VwIDQgcG1fY29tcGF0X2wxX2RjYWNoZV9sb2FkX3N0b3JlX21pc3MpIFN0b3JlIGluc3RydWN0aW9ucyBmaW5pc2hlZAorZXZlbnQ6MFgwMDQyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9TVF9NSVNTX0wxX0dSUDQgOiAoR3JvdXAgNCBwbV9jb21wYXRfbDFfZGNhY2hlX2xvYWRfc3RvcmVfbWlzcykgTDEgRCBjYWNoZSBzdG9yZSBtaXNzZXMKK2V2ZW50OjBYMDA0MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTERfTUlTU19MMV9HUlA0IDogKEdyb3VwIDQgcG1fY29tcGF0X2wxX2RjYWNoZV9sb2FkX3N0b3JlX21pc3MpIEwxIEQgY2FjaGUgbG9hZCBtaXNzZXMKKworI0dyb3VwIDUgcG1fY29tcGF0X2wxX2NhY2hlX2xvYWQsIEwxIENhY2hlIGxvYWRzCitldmVudDowWDAwNTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQNSA6IChHcm91cCA1IHBtX2NvbXBhdF9sMV9jYWNoZV9sb2FkKSBJbnN0cnVjdGlvbiBjb21wbGV0ZWQKK2V2ZW50OjBYMDA1MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fREFUQV9GUk9NX0wyTUlTU19HUlA1IDogKEdyb3VwIDUgcG1fY29tcGF0X2wxX2NhY2hlX2xvYWQpIERhdGEgbG9hZGVkIG1pc3NlZCBMMgorZXZlbnQ6MFgwMDUyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMV9EQ0FDSEVfUkVMT0FEX1ZBTElEX0dSUDUgOiAoR3JvdXAgNSBwbV9jb21wYXRfbDFfY2FjaGVfbG9hZCkgTDEgcmVsb2FkIGRhdGEgc291cmNlIHZhbGlkCitldmVudDowWDAwNTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xEX01JU1NfTDFfR1JQNSA6IChHcm91cCA1IHBtX2NvbXBhdF9sMV9jYWNoZV9sb2FkKSBMMSBEIGNhY2hlIGxvYWQgbWlzc2VzCisKKyNHcm91cCA2IHBtX2NvbXBhdF9pbnN0cnVjdGlvbl9kaXJlY3RvcnksIEluc3RydWN0aW9uIERpcmVjdG9yeQorZXZlbnQ6MFgwMDYwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JRVJBVF9NSVNTX0dSUDYgOiAoR3JvdXAgNiBwbV9jb21wYXRfaW5zdHJ1Y3Rpb25fZGlyZWN0b3J5KSBJRVJBVCBtaXNzIGNvdW4KK2V2ZW50OjBYMDA2MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDFfSUNBQ0hFX01JU1NfR1JQNiA6IChHcm91cCA2IHBtX2NvbXBhdF9pbnN0cnVjdGlvbl9kaXJlY3RvcnkpIEwxIEkgY2FjaGUgbWlzcyBjb3VuCitldmVudDowWDAwNjIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQNiA6IChHcm91cCA2IHBtX2NvbXBhdF9pbnN0cnVjdGlvbl9kaXJlY3RvcnkpIEluc3RydWN0aW9uIGNvbXBsZXRlZAorZXZlbnQ6MFgwMDYzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JVExCX01JU1NfR1JQNiA6IChHcm91cCA2IHBtX2NvbXBhdF9pbnN0cnVjdGlvbl9kaXJlY3RvcnkpIEluc3RydWN0aW9uIFRMQiBtaXNzZXMKKworI0dyb3VwIDcgcG1fY29tcGF0X2RhdGFfZGlyZWN0b3J5LCBEYXRhIERpcmVjdG9yeQorZXZlbnQ6MFgwMDcwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1VfREVSQVRfTUlTU19DWUNfR1JQNyA6IChHcm91cCA3IHBtX2NvbXBhdF9kYXRhX2RpcmVjdG9yeSkgREVSQVQgbWlzcyBsYXRlbmN5CitldmVudDowWDAwNzEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9ERVJBVF9NSVNTX0dSUDcgOiAoR3JvdXAgNyBwbV9jb21wYXRfZGF0YV9kaXJlY3RvcnkpIERFUkFUIG1pc3NlcworZXZlbnQ6MFgwMDcyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EVExCX01JU1NfR1JQNyA6IChHcm91cCA3IHBtX2NvbXBhdF9kYXRhX2RpcmVjdG9yeSkgRGF0YSBUTEIgbWlzc2VzCitldmVudDowWDAwNzMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQNyA6IChHcm91cCA3IHBtX2NvbXBhdF9kYXRhX2RpcmVjdG9yeSkgUnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQKKworI0dyb3VwIDggcG1fY29tcGF0X2NwaV8xcGx1c19wcGMsIE1pc2MgQ1BJIGFuZCB1dGlsaXphdGlvbiBkYXRhCitldmVudDowWDAwODAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNXzFQTFVTX1BQQ19DTVBMX0dSUDggOiAoR3JvdXAgOCBwbV9jb21wYXRfY3BpXzFwbHVzX3BwYykgT25lIG9yIG1vcmUgUFBDIGluc3RydWN0aW9uIGNvbXBsZXRlZAorZXZlbnQ6MFgwMDgxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlA4IDogKEdyb3VwIDggcG1fY29tcGF0X2NwaV8xcGx1c19wcGMpIFJ1biBjeWNsZXMKK2V2ZW50OjBYMDA4MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU5TVF9ESVNQX0dSUDggOiAoR3JvdXAgOCBwbV9jb21wYXRfY3BpXzFwbHVzX3BwYykgSW5zdHJ1Y3Rpb25zIGRpc3BhdGNoZWQKK2V2ZW50OjBYMDA4MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fMVBMVVNfUFBDX0RJU1BfR1JQOCA6IChHcm91cCA4IHBtX2NvbXBhdF9jcGlfMXBsdXNfcHBjKSBDeWNsZXMgYXQgbGVhc3Qgb25lIGluc3RydWN0aW9uIGRpc3BhdGNoZWQKKworI0dyb3VwIDkgcG1fY29tcGF0X21pc2NfZXZlbnRzMSwgTWlzYyBFdmVudHMKK2V2ZW50OjBYMDA5MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlA5IDogKEdyb3VwIDkgcG1fY29tcGF0X21pc2NfZXZlbnRzMSkgSW5zdHJ1Y3Rpb24gY29tcGxldGVkCitldmVudDowWDAwOTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0VYVF9JTlRfR1JQOSA6IChHcm91cCA5IHBtX2NvbXBhdF9taXNjX2V2ZW50czEpIEV4dGVybmFsIGludGVycnVwdHMKK2V2ZW50OjBYMDA5MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fVEJfQklUX1RSQU5TX0dSUDkgOiAoR3JvdXAgOSBwbV9jb21wYXRfbWlzY19ldmVudHMxKSBUaW1lIEJhc2UgYml0IHRyYW5zaXRpb24KK2V2ZW50OjBYMDA5MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlA5IDogKEdyb3VwIDkgcG1fY29tcGF0X21pc2NfZXZlbnRzMSkgUHJvY2Vzc29yIGN5Y2xlcworCisjR3JvdXAgMTAgcG1fY29tcGF0X21pc2NfZXZlbnRzMiwgTWlzYyBFdmVudHMKK2V2ZW50OjBYMDBBMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU5TVF9JTUNfTUFUQ0hfQ01QTF9HUlAxMCA6IChHcm91cCAxMCBwbV9jb21wYXRfbWlzY19ldmVudHMyKSBJTUMgbWF0Y2hlZCBpbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDAwQTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lOU1RfRElTUF9HUlAxMCA6IChHcm91cCAxMCBwbV9jb21wYXRfbWlzY19ldmVudHMyKSBJbnN0cnVjdGlvbnMgZGlzcGF0Y2hlZAorZXZlbnQ6MFgwMEEyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9USFJEX0NPTkNfUlVOX0lOU1RfR1JQMTAgOiAoR3JvdXAgMTAgcG1fY29tcGF0X21pc2NfZXZlbnRzMikgQ29uY3VycmVudCBydW4gaW5zdHJ1Y3Rpb25zCitldmVudDowWDAwQTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZMVVNIX0dSUDEwIDogKEdyb3VwIDEwIHBtX2NvbXBhdF9taXNjX2V2ZW50czIpIEZsdXNoZXMKKworI0dyb3VwIDExIHBtX2NvbXBhdF9taXNjX2V2ZW50czMsIE1pc2MgRXZlbnRzCitldmVudDowWDAwQjAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0dDVF9FTVBUWV9DWUNfR1JQMTEgOiAoR3JvdXAgMTEgcG1fY29tcGF0X21pc2NfZXZlbnRzMykgQ3ljbGVzIEdDVCBlbXB0eQorZXZlbnQ6MFgwMEIxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JTlNUX0RJU1BfR1JQMTEgOiAoR3JvdXAgMTEgcG1fY29tcGF0X21pc2NfZXZlbnRzMykgSW5zdHJ1Y3Rpb25zIGRpc3BhdGNoZWQKK2V2ZW50OjBYMDBCMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fVEJfQklUX1RSQU5TX0dSUDExIDogKEdyb3VwIDExIHBtX2NvbXBhdF9taXNjX2V2ZW50czMpIFRpbWUgQmFzZSBiaXQgdHJhbnNpdGlvbgorZXZlbnQ6MFgwMEIzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9CUl9NUFJFRF9HUlAxMSA6IChHcm91cCAxMSBwbV9jb21wYXRfbWlzY19ldmVudHMzKSBCcmFuY2hlcyBpbmNvcnJlY3RseSBwcmVkaWN0ZWQKKworI0dyb3VwIDEyIHBtX2NvbXBhdF9zdXNwZW5kLCBTdXNwZW5kIEV2ZW50cworZXZlbnQ6MFgwMEMwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9TVVNQRU5ERURfR1JQMTIgOiAoR3JvdXAgMTIgcG1fY29tcGF0X3N1c3BlbmQpIFN1c3BlbmRlZAorZXZlbnQ6MFgwMEMxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9TVVNQRU5ERURfR1JQMTIgOiAoR3JvdXAgMTIgcG1fY29tcGF0X3N1c3BlbmQpIFN1c3BlbmRlZAorZXZlbnQ6MFgwMEMyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9TVVNQRU5ERURfR1JQMTIgOiAoR3JvdXAgMTIgcG1fY29tcGF0X3N1c3BlbmQpIFN1c3BlbmRlZAorZXZlbnQ6MFgwMEMzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9TVVNQRU5ERURfR1JQMTIgOiAoR3JvdXAgMTIgcG1fY29tcGF0X3N1c3BlbmQpIFN1c3BlbmRlZApkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL3BwYzY0L2libS1jb21wYXQtdjEvdW5pdF9tYXNrcyBiL29wcm9maWxlLTAuOS43L2V2ZW50cy9wcGM2NC9pYm0tY29tcGF0LXYxL3VuaXRfbWFza3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTcwYzUzYgotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2V2ZW50cy9wcGM2NC9pYm0tY29tcGF0LXYxL3VuaXRfbWFza3MKQEAgLTAsMCArMSw5IEBACisjCisjIENvcHlyaWdodCBPUHJvZmlsZSBhdXRob3JzCisjIENvcHlyaWdodCAoYykgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcywgMjAwOS4KKyMgQ29udHJpYnV0ZWQgYnkgTWF5bmFyZCBKb2huc29uIDxtYXluYXJkakB1cy5pYm0uY29tPi4KKyMKKyMgcHBjNjQgY29tcGF0IG1vZGUgdmVyc2lvbiAxIHBvc3NpYmxlIHVuaXQgbWFza3MKKyMKK25hbWU6emVybyB0eXBlOm1hbmRhdG9yeSBkZWZhdWx0OjB4MAorCTB4MCBObyB1bml0IG1hc2sKZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2V2ZW50cy9wcGM2NC9wYTZ0L2V2ZW50X21hcHBpbmdzIGIvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL3BwYzY0L3BhNnQvZXZlbnRfbWFwcGluZ3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGJiZGRjYgotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2V2ZW50cy9wcGM2NC9wYTZ0L2V2ZW50X21hcHBpbmdzCkBAIC0wLDAgKzEsNDggQEAKKyMgcGE2dCBkb2VzIG5vdCBoYXZlIGFuIG1tY3JhLiBtbWNyMCBoYXMgYWxsIHRoZSBlbmFibGVzIGFuZCBjb25maWcKKyMgYml0cy4gbW1jcjEgY29udGFpbnMgdGhlIGV2ZW50IHNlbGVjdG9ycyBmb3IgdGhlIGZvdXIgcHJvZ3JhbW1hYmxlCisjIGV2ZW50cworCisjIEdyb3VwIERlZmF1bHQKK2V2ZW50OjB4MSBtbWNyMDoweDAwMDAwMDAwMDAwNWI4MWIgbW1jcjE6MHgwMDAwMDAwMDAwOTQ5ZjAwIG1tY3JhOjB4MAorZXZlbnQ6MHgzIG1tY3IwOjB4MDAwMDAwMDAwMDA1YjgxYiBtbWNyMToweDAwMDAwMDAwMDA5NDlmMDAgbW1jcmE6MHgwCitldmVudDoweDQgbW1jcjA6MHgwMDAwMDAwMDAwMDViODFiIG1tY3IxOjB4MDAwMDAwMDAwMDk0OWYwMCBtbWNyYToweDAKKworIyBHcm91cCAxLCBMb2FkL1N0b3JlCitldmVudDoweDEwIG1tY3IwOjB4MDAwMDAwMDAwMDA3ZjgzZiBtbWNyMToweDAwMDAwMDAwYThjMGNhYjEgbW1jcmE6MHgwCitldmVudDoweDExIG1tY3IwOjB4MDAwMDAwMDAwMDA3ZjgzZiBtbWNyMToweDAwMDAwMDAwYThjMGNhYjEgbW1jcmE6MHgwCitldmVudDoweDEyIG1tY3IwOjB4MDAwMDAwMDAwMDA3ZjgzZiBtbWNyMToweDAwMDAwMDAwYThjMGNhYjEgbW1jcmE6MHgwCitldmVudDoweDEzIG1tY3IwOjB4MDAwMDAwMDAwMDA3ZjgzZiBtbWNyMToweDAwMDAwMDAwYThjMGNhYjEgbW1jcmE6MHgwCitldmVudDoweDE0IG1tY3IwOjB4MDAwMDAwMDAwMDA3ZjgzZiBtbWNyMToweDAwMDAwMDAwYThjMGNhYjEgbW1jcmE6MHgwCitldmVudDoweDE1IG1tY3IwOjB4MDAwMDAwMDAwMDA3ZjgzZiBtbWNyMToweDAwMDAwMDAwYThjMGNhYjEgbW1jcmE6MHgwCisKKyMgR3JvdXAgMiwgRnJvbnRlbmQKK2V2ZW50OjB4MjAgbW1jcjA6MHgwMDAwMDAwMDAwMDdmODNmIG1tY3IxOjB4MDAwMDAwMDAwMjA1ODQwMSBtbWNyYToweDAKK2V2ZW50OjB4MjEgbW1jcjA6MHgwMDAwMDAwMDAwMDdmODNmIG1tY3IxOjB4MDAwMDAwMDAwMjA1ODQwMSBtbWNyYToweDAKK2V2ZW50OjB4MjIgbW1jcjA6MHgwMDAwMDAwMDAwMDdmODNmIG1tY3IxOjB4MDAwMDAwMDAwMjA1ODQwMSBtbWNyYToweDAKK2V2ZW50OjB4MjMgbW1jcjA6MHgwMDAwMDAwMDAwMDdmODNmIG1tY3IxOjB4MDAwMDAwMDAwMjA1ODQwMSBtbWNyYToweDAKK2V2ZW50OjB4MjQgbW1jcjA6MHgwMDAwMDAwMDAwMDdmODNmIG1tY3IxOjB4MDAwMDAwMDAwMjA1ODQwMSBtbWNyYToweDAKK2V2ZW50OjB4MjUgbW1jcjA6MHgwMDAwMDAwMDAwMDdmODNmIG1tY3IxOjB4MDAwMDAwMDAwMjA1ODQwMSBtbWNyYToweDAKKworIyBHcm91cCAzLCBCcmFuY2hlcworZXZlbnQ6MHgzMCBtbWNyMDoweDAwMDAwMDAwMDAwN2Y4M2YgbW1jcjE6MHgwMDAwMDAwMDhkOGI4OTg4IG1tY3JhOjB4MAorZXZlbnQ6MHgzMSBtbWNyMDoweDAwMDAwMDAwMDAwN2Y4M2YgbW1jcjE6MHgwMDAwMDAwMDhkOGI4OTg4IG1tY3JhOjB4MAorZXZlbnQ6MHgzMiBtbWNyMDoweDAwMDAwMDAwMDAwN2Y4M2YgbW1jcjE6MHgwMDAwMDAwMDhkOGI4OTg4IG1tY3JhOjB4MAorZXZlbnQ6MHgzMyBtbWNyMDoweDAwMDAwMDAwMDAwN2Y4M2YgbW1jcjE6MHgwMDAwMDAwMDhkOGI4OTg4IG1tY3JhOjB4MAorZXZlbnQ6MHgzNCBtbWNyMDoweDAwMDAwMDAwMDAwN2Y4M2YgbW1jcjE6MHgwMDAwMDAwMDhkOGI4OTg4IG1tY3JhOjB4MAorZXZlbnQ6MHgzNSBtbWNyMDoweDAwMDAwMDAwMDAwN2Y4M2YgbW1jcjE6MHgwMDAwMDAwMDhkOGI4OTg4IG1tY3JhOjB4MAorCisjIEdyb3VwIDQsIFRyYW5zbGF0aW9uCitldmVudDoweDQwIG1tY3IwOjB4MDAwMDAwMDAwMDA3ZjgzZiBtbWNyMToweDAwMDAwMDAwODZiYWE3YTggbW1jcmE6MHgwCitldmVudDoweDQxIG1tY3IwOjB4MDAwMDAwMDAwMDA3ZjgzZiBtbWNyMToweDAwMDAwMDAwODZiYWE3YTggbW1jcmE6MHgwCitldmVudDoweDQyIG1tY3IwOjB4MDAwMDAwMDAwMDA3ZjgzZiBtbWNyMToweDAwMDAwMDAwODZiYWE3YTggbW1jcmE6MHgwCitldmVudDoweDQzIG1tY3IwOjB4MDAwMDAwMDAwMDA3ZjgzZiBtbWNyMToweDAwMDAwMDAwODZiYWE3YTggbW1jcmE6MHgwCitldmVudDoweDQ0IG1tY3IwOjB4MDAwMDAwMDAwMDA3ZjgzZiBtbWNyMToweDAwMDAwMDAwODZiYWE3YTggbW1jcmE6MHgwCitldmVudDoweDQ1IG1tY3IwOjB4MDAwMDAwMDAwMDA3ZjgzZiBtbWNyMToweDAwMDAwMDAwODZiYWE3YTggbW1jcmE6MHgwCisKKyMgR3JvdXAgNSwgTWVtb3J5CitldmVudDoweDUwIG1tY3IwOjB4MDAwMDAwMDAwMDA3ZjgzZiBtbWNyMToweDAwMDAwMDAwYzAzMGNhYjEgbW1jcmE6MHgwCitldmVudDoweDUxIG1tY3IwOjB4MDAwMDAwMDAwMDA3ZjgzZiBtbWNyMToweDAwMDAwMDAwYzAzMGNhYjEgbW1jcmE6MHgwCitldmVudDoweDUyIG1tY3IwOjB4MDAwMDAwMDAwMDA3ZjgzZiBtbWNyMToweDAwMDAwMDAwYzAzMGNhYjEgbW1jcmE6MHgwCitldmVudDoweDUzIG1tY3IwOjB4MDAwMDAwMDAwMDA3ZjgzZiBtbWNyMToweDAwMDAwMDAwYzAzMGNhYjEgbW1jcmE6MHgwCitldmVudDoweDU0IG1tY3IwOjB4MDAwMDAwMDAwMDA3ZjgzZiBtbWNyMToweDAwMDAwMDAwYzAzMGNhYjEgbW1jcmE6MHgwCitldmVudDoweDU1IG1tY3IwOjB4MDAwMDAwMDAwMDA3ZjgzZiBtbWNyMToweDAwMDAwMDAwYzAzMGNhYjEgbW1jcmE6MHgwCmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9ldmVudHMvcHBjNjQvcGE2dC9ldmVudHMgYi9vcHJvZmlsZS0wLjkuNy9ldmVudHMvcHBjNjQvcGE2dC9ldmVudHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWUyYmMyZgotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2V2ZW50cy9wcGM2NC9wYTZ0L2V2ZW50cwpAQCAtMCwwICsxLDUyIEBACisjIHBwYzY0IHBhNnQgZXZlbnRzCisjCisjIFVubGlrZSB0aGUgSUJNIHBwYzY0IGNoaXBzLCBhbnkgb2YgcGE2dCdzIGV2ZW50cyBjYW4gYmUgcHJvZ3JhbW1lZCBpbnRvIGFueQorIyBvZiB0aGUgY291bnRlcnMgKHBtYzItNSkuIFRoZSBub3Rpb24gb2YgZ3JvdXBzIG9uIHBhNnQgaXMgdGh1cworIyBhcnRpZmljaWFsLiBUaGF0IHNhaWQsIHdlIGNhbiBzdGlsbCBkZWZpbmUgdXNlZnVsIGFnZ3JlZ2F0aW9ucyB0byBndWlkZSB0aGUKKyMgdXNlciBpbiBoaXMgY2hvaWNlIG9mIGdyb3VwIGZvciBhIHByb2ZpbGluZyBzZXNzaW9uLgorCisjIEdyb3VwIERlZmF1bHQKK2V2ZW50OjB4MSBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOkNZQ0xFUyA6IFByb2Nlc3NvciBDeWNsZXMKK2V2ZW50OjB4MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOklTU19DWUNMRVMgOiBQcm9jZXNzb3IgQ3ljbGVzIHdpdGggaW5zdHJ1Y3Rpb25zIGlzc3VlZAorZXZlbnQ6MHg0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UkVUX1VPUCA6IFJldGlyZWQgTWljcm8tb3BlcmF0aW9pbnMKKworIyBHcm91cCAxLCBMb2FkL1N0b3JlCitldmVudDoweDEwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6R1JQMV9DWUNMRVMgOiBQcm9jZXNzb3IgQ3ljbGVzCitldmVudDoweDExIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6R1JQMV9JTlNUX1JFVElSRUQgOiBJbnN0cnVjdGlvbnMgcmV0aXJlZAorZXZlbnQ6MHgxMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6R1JQMV9EQ0FDSEVfUkRfTUlTU19fTlMgOiBEY2FjaGUgcmVhZCBtaXNzZXMgTlMKK2V2ZW50OjB4MTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6R1JQMV9NUkJfTERfTUlTU19MMl9fTlMgOiBMb2FkIG1pc3NlcyBmaWxsaW5nIGZyb20gbWVtb3J5CitldmVudDoweDE0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkdSUDFfTVJCX1NUX01JU1NfQUxMT0NfX05TIDogU3RvcmUgbWlzc2VzIGluIEwxRCBhbmQgYWxsb2NhdGVzIGFuIE1SQiBlbnRyeQorZXZlbnQ6MHgxNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpHUlAxX1RMQl9NSVNTX0RfX05TIDogVExCIG1pc3NlcyBOUyAoRC0gb25seSkKKworIyBHcm91cCAyLCBGcm9udGVuZAorZXZlbnQ6MHgyMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOkdSUDJfQ1lDTEVTIDogUHJvY2Vzc29yIEN5Y2xlcworZXZlbnQ6MHgyMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOkdSUDJfSU5TVF9SRVRJUkVEIDogSW5zdHJ1Y3Rpb25zIHJldGlyZWQKK2V2ZW50OjB4MjIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MjAwMCBuYW1lOkdSUDJfRkVUQ0hfUkVRIDogRGVtYW5kIGZldGNoIHJlcXVlc3RzIG1hZGUgdG8gdGhlIEljYWNoZQorZXZlbnQ6MHgyMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpHUlAyX0lDQUNIRV9NSVNTX0RFTV9fTlMgOiBEZW1hbmQgZmV0Y2ggcmVxdWVzdHMgbWlzc2luZyBpbiB0aGUgSWNhY2hlCitldmVudDoweDI0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkdSUDJfSUNBQ0hFX01JU1NfQUxMIDogRGVtYW5kIGFuZCBzcGVjIGZldGNoIHJlcXVlc3RzIG1pc3NpbmcgaW4gdGhlIEljYWNoZQorZXZlbnQ6MHgyNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToyMDAwIG5hbWU6R1JQMl9JQ0FDSEVfQUNDIDogSWNhY2hlIGFjY2Vzc2VzCisKKyMgR3JvdXAgMywgQnJhbmNoZXMKK2V2ZW50OjB4MzAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpHUlAzX0NZQ0xFUyA6IFByb2Nlc3NvciBDeWNsZXMKK2V2ZW50OjB4MzEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpHUlAzX0lOU1RfUkVUSVJFRCA6IEluc3RydWN0aW9ucyByZXRpcmVkCitldmVudDoweDMyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkdSUDNfTlhUX0xJTkVfTUlTUFJFRF9fTlMgOiBOZXh0IGZldGNoIGFkZHJlc3MgbWlzcHJlZGljdAorZXZlbnQ6MHgzMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpHUlAzX0RJUk5fTUlTUFJFRF9fTlMgOiBCcmFuY2ggZGlyZWN0aW9uIG1pc3ByZWRpY3QKK2V2ZW50OjB4MzQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6R1JQM19UR1RfQUREUl9NSVNQUkVEX19OUyA6IEJyYW5jaCB0YXJnZXQgYWRkcmVzcyBtaXNwcmVkaWN0CitldmVudDoweDM1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjIwMDAgbmFtZTpHUlAzX0JSQV9UQUtFTl9fTlMgOiBUYWtlbiBicmFuY2hlcworCisjIEdyb3VwIDQsIFRyYW5zbGF0aW9uCitldmVudDoweDQwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6R1JQNF9DWUNMRVMgOiBQcm9jZXNzb3IgQ3ljbGVzCitldmVudDoweDQxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6R1JQNF9JTlNUX1JFVElSRUQgOiBJbnN0cnVjdGlvbnMgcmV0aXJlZAorZXZlbnQ6MHg0MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpHUlA0X1RMQl9NSVNTX0RfX05TIDogVExCIE1pc3NlcyAoRC0pCitldmVudDoweDQzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkdSUDRfVExCX01JU1NfSV9fTlMgOiBUTEIgTUlzc2VzIChJLSkKK2V2ZW50OjB4NDQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6R1JQNF9ERVJBVF9NSVNTX19OUyA6IERFUkFUIE1pc3NlcworZXZlbnQ6MHg0NSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpHUlA0X0lFUkFUX01JU1NfX05TIDogSUVSQVQgTWlzc2VzCisKKyMgR3JvdXAgNSwgTWVtb3J5CitldmVudDoweDUwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6R1JQNV9DWUNMRVMgOiBQcm9jZXNzb3IgQ3ljbGVzCitldmVudDoweDUxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6R1JQNV9JTlNUX1JFVElSRUQgOiBJbnN0cnVjdGlvbnMgcmV0aXJlZAorZXZlbnQ6MHg1MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpHUlA1X0RDQUNIRV9SRF9NSVNTX19OUyA6IERjYWNoZSByZWFkIG1pc3NlcyBOUworZXZlbnQ6MHg1MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpHUlA1X01SQl9MRF9NSVNTX0wyX19OUyA6IExvYWQgbWlzc2VzIGZpbGxpbmcgZnJvbSBtZW1vcnkKK2V2ZW50OjB4NTQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6R1JQNV9EQ0FDSEVfVklDIDogRGNhY2hlIGxpbmUgZXZpY3RlZCAoc25vb3BzIG5vdCBpbmNsdWRlZCkKK2V2ZW50OjB4NTUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6R1JQNV9NUkJfU1RfTUlTU19BTExPQ19fTlMgOiBTdG9yZSBtaXNzZXMgaW4gTDFEIGFuZCBhbGxvY2F0ZXMgYW4gTVJCIGVudHJ5CisKZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2V2ZW50cy9wcGM2NC9wYTZ0L3VuaXRfbWFza3MgYi9vcHJvZmlsZS0wLjkuNy9ldmVudHMvcHBjNjQvcGE2dC91bml0X21hc2tzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjYzNkZGQKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9ldmVudHMvcHBjNjQvcGE2dC91bml0X21hc2tzCkBAIC0wLDAgKzEsNCBAQAorIyBwcGM2NCBwYTZ0IHBvc3NpYmxlIHVuaXQgbWFza3MKKyMKK25hbWU6emVybyB0eXBlOm1hbmRhdG9yeSBkZWZhdWx0OjB4MAorCQkgMHgwIE5vIHVuaXQgbWFzawpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL3BwYzY0L3Bvd2VyNC9ldmVudF9tYXBwaW5ncyBiL29wcm9maWxlLTAuOS43L2V2ZW50cy9wcGM2NC9wb3dlcjQvZXZlbnRfbWFwcGluZ3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTBjYWEwNQotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2V2ZW50cy9wcGM2NC9wb3dlcjQvZXZlbnRfbWFwcGluZ3MKQEAgLTAsMCArMSw2MzQgQEAKKyNNYXBwaW5nIG9mIGV2ZW50IGdyb3VwcyB0byBNTUNSIHZhbHVlcworCisjR3JvdXAgRGVmYXVsdAorZXZlbnQ6MFgwMDEgbW1jcjA6MFgwMDAwMEQwRSBtbWNyMTowWDAwMDAwMDAwNEE1Njc1QUMgbW1jcmE6MFgwMDAyMjAwMQorCisjR3JvdXAgMSBwbV9zbGljZTAsIFRpbWUgU2xpY2UgMAorZXZlbnQ6MFgwMTAgbW1jcjA6MFgwMDAwMEQwRSBtbWNyMTowWDAwMDAwMDAwNEE1Njc1QUMgbW1jcmE6MFgwMDAyMjAwMQorZXZlbnQ6MFgwMTEgbW1jcjA6MFgwMDAwMEQwRSBtbWNyMTowWDAwMDAwMDAwNEE1Njc1QUMgbW1jcmE6MFgwMDAyMjAwMQorZXZlbnQ6MFgwMTIgbW1jcjA6MFgwMDAwMEQwRSBtbWNyMTowWDAwMDAwMDAwNEE1Njc1QUMgbW1jcmE6MFgwMDAyMjAwMQorZXZlbnQ6MFgwMTMgbW1jcjA6MFgwMDAwMEQwRSBtbWNyMTowWDAwMDAwMDAwNEE1Njc1QUMgbW1jcmE6MFgwMDAyMjAwMQorZXZlbnQ6MFgwMTQgbW1jcjA6MFgwMDAwMEQwRSBtbWNyMTowWDAwMDAwMDAwNEE1Njc1QUMgbW1jcmE6MFgwMDAyMjAwMQorZXZlbnQ6MFgwMTUgbW1jcjA6MFgwMDAwMEQwRSBtbWNyMTowWDAwMDAwMDAwNEE1Njc1QUMgbW1jcmE6MFgwMDAyMjAwMQorZXZlbnQ6MFgwMTYgbW1jcjA6MFgwMDAwMEQwRSBtbWNyMTowWDAwMDAwMDAwNEE1Njc1QUMgbW1jcmE6MFgwMDAyMjAwMQorZXZlbnQ6MFgwMTcgbW1jcjA6MFgwMDAwMEQwRSBtbWNyMTowWDAwMDAwMDAwNEE1Njc1QUMgbW1jcmE6MFgwMDAyMjAwMQorCisjR3JvdXAgMiBwbV9lcHJvZiwgR3JvdXAgZm9yIHVzZSB3aXRoIGVwcm9mCitldmVudDowWDAyMCBtbWNyMDowWDAwMDAwNzBFIG1tY3IxOjBYMTAwMzQwMDA0NUYyOTQyMCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDAyMSBtbWNyMDowWDAwMDAwNzBFIG1tY3IxOjBYMTAwMzQwMDA0NUYyOTQyMCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDAyMiBtbWNyMDowWDAwMDAwNzBFIG1tY3IxOjBYMTAwMzQwMDA0NUYyOTQyMCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDAyMyBtbWNyMDowWDAwMDAwNzBFIG1tY3IxOjBYMTAwMzQwMDA0NUYyOTQyMCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDAyNCBtbWNyMDowWDAwMDAwNzBFIG1tY3IxOjBYMTAwMzQwMDA0NUYyOTQyMCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDAyNSBtbWNyMDowWDAwMDAwNzBFIG1tY3IxOjBYMTAwMzQwMDA0NUYyOTQyMCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDAyNiBtbWNyMDowWDAwMDAwNzBFIG1tY3IxOjBYMTAwMzQwMDA0NUYyOTQyMCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDAyNyBtbWNyMDowWDAwMDAwNzBFIG1tY3IxOjBYMTAwMzQwMDA0NUYyOTQyMCBtbWNyYTowWDAwMDAyMDAxCisKKyNHcm91cCAzIHBtX2Jhc2ljLCBCYXNpYyBwZXJmb3JtYW5jZSBpbmRpY2F0b3JzCitldmVudDowWDAzMCBtbWNyMDowWDAwMDAwOTBFIG1tY3IxOjBYMTAwMzQwMDA0NUYyOTQyMCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDAzMSBtbWNyMDowWDAwMDAwOTBFIG1tY3IxOjBYMTAwMzQwMDA0NUYyOTQyMCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDAzMiBtbWNyMDowWDAwMDAwOTBFIG1tY3IxOjBYMTAwMzQwMDA0NUYyOTQyMCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDAzMyBtbWNyMDowWDAwMDAwOTBFIG1tY3IxOjBYMTAwMzQwMDA0NUYyOTQyMCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDAzNCBtbWNyMDowWDAwMDAwOTBFIG1tY3IxOjBYMTAwMzQwMDA0NUYyOTQyMCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDAzNSBtbWNyMDowWDAwMDAwOTBFIG1tY3IxOjBYMTAwMzQwMDA0NUYyOTQyMCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDAzNiBtbWNyMDowWDAwMDAwOTBFIG1tY3IxOjBYMTAwMzQwMDA0NUYyOTQyMCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDAzNyBtbWNyMDowWDAwMDAwOTBFIG1tY3IxOjBYMTAwMzQwMDA0NUYyOTQyMCBtbWNyYTowWDAwMDAyMDAxCisKKyNHcm91cCA0IHBtX2lmdSwgSUZVIGV2ZW50cworZXZlbnQ6MFgwNDAgbW1jcjA6MFgwMDAwMDkzOCBtbWNyMTowWDgwMDAwMDAwQzY3NjdENkMgbW1jcmE6MFgwMDAyMjAwMQorZXZlbnQ6MFgwNDEgbW1jcjA6MFgwMDAwMDkzOCBtbWNyMTowWDgwMDAwMDAwQzY3NjdENkMgbW1jcmE6MFgwMDAyMjAwMQorZXZlbnQ6MFgwNDIgbW1jcjA6MFgwMDAwMDkzOCBtbWNyMTowWDgwMDAwMDAwQzY3NjdENkMgbW1jcmE6MFgwMDAyMjAwMQorZXZlbnQ6MFgwNDMgbW1jcjA6MFgwMDAwMDkzOCBtbWNyMTowWDgwMDAwMDAwQzY3NjdENkMgbW1jcmE6MFgwMDAyMjAwMQorZXZlbnQ6MFgwNDQgbW1jcjA6MFgwMDAwMDkzOCBtbWNyMTowWDgwMDAwMDAwQzY3NjdENkMgbW1jcmE6MFgwMDAyMjAwMQorZXZlbnQ6MFgwNDUgbW1jcjA6MFgwMDAwMDkzOCBtbWNyMTowWDgwMDAwMDAwQzY3NjdENkMgbW1jcmE6MFgwMDAyMjAwMQorZXZlbnQ6MFgwNDYgbW1jcjA6MFgwMDAwMDkzOCBtbWNyMTowWDgwMDAwMDAwQzY3NjdENkMgbW1jcmE6MFgwMDAyMjAwMQorZXZlbnQ6MFgwNDcgbW1jcjA6MFgwMDAwMDkzOCBtbWNyMTowWDgwMDAwMDAwQzY3NjdENkMgbW1jcmE6MFgwMDAyMjAwMQorCisjR3JvdXAgNSBwbV9pc3UsIElTVSBRdWV1ZSBmdWxsIGV2ZW50cworZXZlbnQ6MFgwNTAgbW1jcjA6MFgwMDAwMTEyQSBtbWNyMTowWDUwMDQxMDAwRUE1MTAzQTAgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgwNTEgbW1jcjA6MFgwMDAwMTEyQSBtbWNyMTowWDUwMDQxMDAwRUE1MTAzQTAgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgwNTIgbW1jcjA6MFgwMDAwMTEyQSBtbWNyMTowWDUwMDQxMDAwRUE1MTAzQTAgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgwNTMgbW1jcjA6MFgwMDAwMTEyQSBtbWNyMTowWDUwMDQxMDAwRUE1MTAzQTAgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgwNTQgbW1jcjA6MFgwMDAwMTEyQSBtbWNyMTowWDUwMDQxMDAwRUE1MTAzQTAgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgwNTUgbW1jcjA6MFgwMDAwMTEyQSBtbWNyMTowWDUwMDQxMDAwRUE1MTAzQTAgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgwNTYgbW1jcjA6MFgwMDAwMTEyQSBtbWNyMTowWDUwMDQxMDAwRUE1MTAzQTAgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgwNTcgbW1jcjA6MFgwMDAwMTEyQSBtbWNyMTowWDUwMDQxMDAwRUE1MTAzQTAgbW1jcmE6MFgwMDAwMjAwMQorCisjR3JvdXAgNiBwbV9sc291cmNlLCBJbmZvcm1hdGlvbiBvbiBkYXRhIHNvdXJjZQorZXZlbnQ6MFgwNjAgbW1jcjA6MFgwMDAwMEUxQyBtbWNyMTowWDAwMTBDMDAwNzM5Q0U3MzggbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgwNjEgbW1jcjA6MFgwMDAwMEUxQyBtbWNyMTowWDAwMTBDMDAwNzM5Q0U3MzggbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgwNjIgbW1jcjA6MFgwMDAwMEUxQyBtbWNyMTowWDAwMTBDMDAwNzM5Q0U3MzggbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgwNjMgbW1jcjA6MFgwMDAwMEUxQyBtbWNyMTowWDAwMTBDMDAwNzM5Q0U3MzggbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgwNjQgbW1jcjA6MFgwMDAwMEUxQyBtbWNyMTowWDAwMTBDMDAwNzM5Q0U3MzggbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgwNjUgbW1jcjA6MFgwMDAwMEUxQyBtbWNyMTowWDAwMTBDMDAwNzM5Q0U3MzggbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgwNjYgbW1jcjA6MFgwMDAwMEUxQyBtbWNyMTowWDAwMTBDMDAwNzM5Q0U3MzggbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgwNjcgbW1jcjA6MFgwMDAwMEUxQyBtbWNyMTowWDAwMTBDMDAwNzM5Q0U3MzggbW1jcmE6MFgwMDAwMjAwMQorCisjR3JvdXAgNyBwbV9pc291cmNlLCBJbnN0cnVjdGlvbiBTb3VyY2UgaW5mb3JtYXRpb24KK2V2ZW50OjBYMDcwIG1tY3IwOjBYMDAwMDBGMUUgbW1jcjE6MFg4MDAwMDAwMDdCREVGN0JDIG1tY3JhOjBYMDAwMjIwMDEKK2V2ZW50OjBYMDcxIG1tY3IwOjBYMDAwMDBGMUUgbW1jcjE6MFg4MDAwMDAwMDdCREVGN0JDIG1tY3JhOjBYMDAwMjIwMDEKK2V2ZW50OjBYMDcyIG1tY3IwOjBYMDAwMDBGMUUgbW1jcjE6MFg4MDAwMDAwMDdCREVGN0JDIG1tY3JhOjBYMDAwMjIwMDEKK2V2ZW50OjBYMDczIG1tY3IwOjBYMDAwMDBGMUUgbW1jcjE6MFg4MDAwMDAwMDdCREVGN0JDIG1tY3JhOjBYMDAwMjIwMDEKK2V2ZW50OjBYMDc0IG1tY3IwOjBYMDAwMDBGMUUgbW1jcjE6MFg4MDAwMDAwMDdCREVGN0JDIG1tY3JhOjBYMDAwMjIwMDEKK2V2ZW50OjBYMDc1IG1tY3IwOjBYMDAwMDBGMUUgbW1jcjE6MFg4MDAwMDAwMDdCREVGN0JDIG1tY3JhOjBYMDAwMjIwMDEKK2V2ZW50OjBYMDc2IG1tY3IwOjBYMDAwMDBGMUUgbW1jcjE6MFg4MDAwMDAwMDdCREVGN0JDIG1tY3JhOjBYMDAwMjIwMDEKK2V2ZW50OjBYMDc3IG1tY3IwOjBYMDAwMDBGMUUgbW1jcjE6MFg4MDAwMDAwMDdCREVGN0JDIG1tY3JhOjBYMDAwMjIwMDEKKworI0dyb3VwIDggcG1fbHN1LCBJbmZvcm1hdGlvbiBvbiB0aGUgTG9hZCBTdG9yZSBVbml0CitldmVudDowWDA4MCBtbWNyMDowWDAwMDAwODEwIG1tY3IxOjBYMDAwRjAwMDAzQTUwODQyMCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDA4MSBtbWNyMDowWDAwMDAwODEwIG1tY3IxOjBYMDAwRjAwMDAzQTUwODQyMCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDA4MiBtbWNyMDowWDAwMDAwODEwIG1tY3IxOjBYMDAwRjAwMDAzQTUwODQyMCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDA4MyBtbWNyMDowWDAwMDAwODEwIG1tY3IxOjBYMDAwRjAwMDAzQTUwODQyMCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDA4NCBtbWNyMDowWDAwMDAwODEwIG1tY3IxOjBYMDAwRjAwMDAzQTUwODQyMCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDA4NSBtbWNyMDowWDAwMDAwODEwIG1tY3IxOjBYMDAwRjAwMDAzQTUwODQyMCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDA4NiBtbWNyMDowWDAwMDAwODEwIG1tY3IxOjBYMDAwRjAwMDAzQTUwODQyMCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDA4NyBtbWNyMDowWDAwMDAwODEwIG1tY3IxOjBYMDAwRjAwMDAzQTUwODQyMCBtbWNyYTowWDAwMDAyMDAxCisKKyNHcm91cCA5IHBtX3hsYXRlMSwgVHJhbnNsYXRpb24gRXZlbnRzCitldmVudDowWDA5MCBtbWNyMDowWDAwMDAxMDI4IG1tY3IxOjBYODEwODIwMDBGNjdFODQ5QyBtbWNyYTowWDAwMDIyMDAxCitldmVudDowWDA5MSBtbWNyMDowWDAwMDAxMDI4IG1tY3IxOjBYODEwODIwMDBGNjdFODQ5QyBtbWNyYTowWDAwMDIyMDAxCitldmVudDowWDA5MiBtbWNyMDowWDAwMDAxMDI4IG1tY3IxOjBYODEwODIwMDBGNjdFODQ5QyBtbWNyYTowWDAwMDIyMDAxCitldmVudDowWDA5MyBtbWNyMDowWDAwMDAxMDI4IG1tY3IxOjBYODEwODIwMDBGNjdFODQ5QyBtbWNyYTowWDAwMDIyMDAxCitldmVudDowWDA5NCBtbWNyMDowWDAwMDAxMDI4IG1tY3IxOjBYODEwODIwMDBGNjdFODQ5QyBtbWNyYTowWDAwMDIyMDAxCitldmVudDowWDA5NSBtbWNyMDowWDAwMDAxMDI4IG1tY3IxOjBYODEwODIwMDBGNjdFODQ5QyBtbWNyYTowWDAwMDIyMDAxCitldmVudDowWDA5NiBtbWNyMDowWDAwMDAxMDI4IG1tY3IxOjBYODEwODIwMDBGNjdFODQ5QyBtbWNyYTowWDAwMDIyMDAxCitldmVudDowWDA5NyBtbWNyMDowWDAwMDAxMDI4IG1tY3IxOjBYODEwODIwMDBGNjdFODQ5QyBtbWNyYTowWDAwMDIyMDAxCisKKyNHcm91cCAxMCBwbV94bGF0ZTIsIFRyYW5zbGF0aW9uIEV2ZW50cworZXZlbnQ6MFgwQTAgbW1jcjA6MFgwMDAwMTEyQSBtbWNyMTowWDgxMDgyMDAwRDc3RTg0OUMgbW1jcmE6MFgwMDAyMjAwMQorZXZlbnQ6MFgwQTEgbW1jcjA6MFgwMDAwMTEyQSBtbWNyMTowWDgxMDgyMDAwRDc3RTg0OUMgbW1jcmE6MFgwMDAyMjAwMQorZXZlbnQ6MFgwQTIgbW1jcjA6MFgwMDAwMTEyQSBtbWNyMTowWDgxMDgyMDAwRDc3RTg0OUMgbW1jcmE6MFgwMDAyMjAwMQorZXZlbnQ6MFgwQTMgbW1jcjA6MFgwMDAwMTEyQSBtbWNyMTowWDgxMDgyMDAwRDc3RTg0OUMgbW1jcmE6MFgwMDAyMjAwMQorZXZlbnQ6MFgwQTQgbW1jcjA6MFgwMDAwMTEyQSBtbWNyMTowWDgxMDgyMDAwRDc3RTg0OUMgbW1jcmE6MFgwMDAyMjAwMQorZXZlbnQ6MFgwQTUgbW1jcjA6MFgwMDAwMTEyQSBtbWNyMTowWDgxMDgyMDAwRDc3RTg0OUMgbW1jcmE6MFgwMDAyMjAwMQorZXZlbnQ6MFgwQTYgbW1jcjA6MFgwMDAwMTEyQSBtbWNyMTowWDgxMDgyMDAwRDc3RTg0OUMgbW1jcmE6MFgwMDAyMjAwMQorZXZlbnQ6MFgwQTcgbW1jcjA6MFgwMDAwMTEyQSBtbWNyMTowWDgxMDgyMDAwRDc3RTg0OUMgbW1jcmE6MFgwMDAyMjAwMQorCisjR3JvdXAgMTEgcG1fZ3BzMSwgTDMgRXZlbnRzCitldmVudDowWDBCMCBtbWNyMDowWDAwMDAxMDIyIG1tY3IxOjBYMDAwMDBDMDBCNUU1MzQ5QyBtbWNyYTowWDAwMDIyMDAxCitldmVudDowWDBCMSBtbWNyMDowWDAwMDAxMDIyIG1tY3IxOjBYMDAwMDBDMDBCNUU1MzQ5QyBtbWNyYTowWDAwMDIyMDAxCitldmVudDowWDBCMiBtbWNyMDowWDAwMDAxMDIyIG1tY3IxOjBYMDAwMDBDMDBCNUU1MzQ5QyBtbWNyYTowWDAwMDIyMDAxCitldmVudDowWDBCMyBtbWNyMDowWDAwMDAxMDIyIG1tY3IxOjBYMDAwMDBDMDBCNUU1MzQ5QyBtbWNyYTowWDAwMDIyMDAxCitldmVudDowWDBCNCBtbWNyMDowWDAwMDAxMDIyIG1tY3IxOjBYMDAwMDBDMDBCNUU1MzQ5QyBtbWNyYTowWDAwMDIyMDAxCitldmVudDowWDBCNSBtbWNyMDowWDAwMDAxMDIyIG1tY3IxOjBYMDAwMDBDMDBCNUU1MzQ5QyBtbWNyYTowWDAwMDIyMDAxCitldmVudDowWDBCNiBtbWNyMDowWDAwMDAxMDIyIG1tY3IxOjBYMDAwMDBDMDBCNUU1MzQ5QyBtbWNyYTowWDAwMDIyMDAxCitldmVudDowWDBCNyBtbWNyMDowWDAwMDAxMDIyIG1tY3IxOjBYMDAwMDBDMDBCNUU1MzQ5QyBtbWNyYTowWDAwMDIyMDAxCisKKyNHcm91cCAxMiBwbV9sMmEsIEwyIFNsaWNlQSBldmVudHMKK2V2ZW50OjBYMEMwIG1tY3IwOjBYMDAwMDE2MkEgbW1jcjE6MFgwMDAwMEMwMDg0Njk3NDlDIG1tY3JhOjBYMDAwMjIwMDEKK2V2ZW50OjBYMEMxIG1tY3IwOjBYMDAwMDE2MkEgbW1jcjE6MFgwMDAwMEMwMDg0Njk3NDlDIG1tY3JhOjBYMDAwMjIwMDEKK2V2ZW50OjBYMEMyIG1tY3IwOjBYMDAwMDE2MkEgbW1jcjE6MFgwMDAwMEMwMDg0Njk3NDlDIG1tY3JhOjBYMDAwMjIwMDEKK2V2ZW50OjBYMEMzIG1tY3IwOjBYMDAwMDE2MkEgbW1jcjE6MFgwMDAwMEMwMDg0Njk3NDlDIG1tY3JhOjBYMDAwMjIwMDEKK2V2ZW50OjBYMEM0IG1tY3IwOjBYMDAwMDE2MkEgbW1jcjE6MFgwMDAwMEMwMDg0Njk3NDlDIG1tY3JhOjBYMDAwMjIwMDEKK2V2ZW50OjBYMEM1IG1tY3IwOjBYMDAwMDE2MkEgbW1jcjE6MFgwMDAwMEMwMDg0Njk3NDlDIG1tY3JhOjBYMDAwMjIwMDEKK2V2ZW50OjBYMEM2IG1tY3IwOjBYMDAwMDE2MkEgbW1jcjE6MFgwMDAwMEMwMDg0Njk3NDlDIG1tY3JhOjBYMDAwMjIwMDEKK2V2ZW50OjBYMEM3IG1tY3IwOjBYMDAwMDE2MkEgbW1jcjE6MFgwMDAwMEMwMDg0Njk3NDlDIG1tY3JhOjBYMDAwMjIwMDEKKworI0dyb3VwIDEzIHBtX2wyYiwgTDIgU2xpY2VCIGV2ZW50cworZXZlbnQ6MFgwRDAgbW1jcjA6MFgwMDAwMUEzMiBtbWNyMTowWDAwMDAwNjAwOTRGMUI0OUMgbW1jcmE6MFgwMDAyMjAwMQorZXZlbnQ6MFgwRDEgbW1jcjA6MFgwMDAwMUEzMiBtbWNyMTowWDAwMDAwNjAwOTRGMUI0OUMgbW1jcmE6MFgwMDAyMjAwMQorZXZlbnQ6MFgwRDIgbW1jcjA6MFgwMDAwMUEzMiBtbWNyMTowWDAwMDAwNjAwOTRGMUI0OUMgbW1jcmE6MFgwMDAyMjAwMQorZXZlbnQ6MFgwRDMgbW1jcjA6MFgwMDAwMUEzMiBtbWNyMTowWDAwMDAwNjAwOTRGMUI0OUMgbW1jcmE6MFgwMDAyMjAwMQorZXZlbnQ6MFgwRDQgbW1jcjA6MFgwMDAwMUEzMiBtbWNyMTowWDAwMDAwNjAwOTRGMUI0OUMgbW1jcmE6MFgwMDAyMjAwMQorZXZlbnQ6MFgwRDUgbW1jcjA6MFgwMDAwMUEzMiBtbWNyMTowWDAwMDAwNjAwOTRGMUI0OUMgbW1jcmE6MFgwMDAyMjAwMQorZXZlbnQ6MFgwRDYgbW1jcjA6MFgwMDAwMUEzMiBtbWNyMTowWDAwMDAwNjAwOTRGMUI0OUMgbW1jcmE6MFgwMDAyMjAwMQorZXZlbnQ6MFgwRDcgbW1jcjA6MFgwMDAwMUEzMiBtbWNyMTowWDAwMDAwNjAwOTRGMUI0OUMgbW1jcmE6MFgwMDAyMjAwMQorCisjR3JvdXAgMTQgcG1fbDJjLCBMMiBTbGljZUMgZXZlbnRzCitldmVudDowWDBFMCBtbWNyMDowWDAwMDAxRTNBIG1tY3IxOjBYMDAwMDA2MDBBNTc5RjQ5QyBtbWNyYTowWDAwMDIyMDAxCitldmVudDowWDBFMSBtbWNyMDowWDAwMDAxRTNBIG1tY3IxOjBYMDAwMDA2MDBBNTc5RjQ5QyBtbWNyYTowWDAwMDIyMDAxCitldmVudDowWDBFMiBtbWNyMDowWDAwMDAxRTNBIG1tY3IxOjBYMDAwMDA2MDBBNTc5RjQ5QyBtbWNyYTowWDAwMDIyMDAxCitldmVudDowWDBFMyBtbWNyMDowWDAwMDAxRTNBIG1tY3IxOjBYMDAwMDA2MDBBNTc5RjQ5QyBtbWNyYTowWDAwMDIyMDAxCitldmVudDowWDBFNCBtbWNyMDowWDAwMDAxRTNBIG1tY3IxOjBYMDAwMDA2MDBBNTc5RjQ5QyBtbWNyYTowWDAwMDIyMDAxCitldmVudDowWDBFNSBtbWNyMDowWDAwMDAxRTNBIG1tY3IxOjBYMDAwMDA2MDBBNTc5RjQ5QyBtbWNyYTowWDAwMDIyMDAxCitldmVudDowWDBFNiBtbWNyMDowWDAwMDAxRTNBIG1tY3IxOjBYMDAwMDA2MDBBNTc5RjQ5QyBtbWNyYTowWDAwMDIyMDAxCitldmVudDowWDBFNyBtbWNyMDowWDAwMDAxRTNBIG1tY3IxOjBYMDAwMDA2MDBBNTc5RjQ5QyBtbWNyYTowWDAwMDIyMDAxCisKKyNHcm91cCAxNSBwbV9mcHUxLCBGbG9hdGluZyBQb2ludCBldmVudHMKK2V2ZW50OjBYMEYwIG1tY3IwOjBYMDAwMDA4MTAgbW1jcjE6MFgwMDAwMDAwMDQyMEU4NEEwIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMEYxIG1tY3IwOjBYMDAwMDA4MTAgbW1jcjE6MFgwMDAwMDAwMDQyMEU4NEEwIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMEYyIG1tY3IwOjBYMDAwMDA4MTAgbW1jcjE6MFgwMDAwMDAwMDQyMEU4NEEwIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMEYzIG1tY3IwOjBYMDAwMDA4MTAgbW1jcjE6MFgwMDAwMDAwMDQyMEU4NEEwIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMEY0IG1tY3IwOjBYMDAwMDA4MTAgbW1jcjE6MFgwMDAwMDAwMDQyMEU4NEEwIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMEY1IG1tY3IwOjBYMDAwMDA4MTAgbW1jcjE6MFgwMDAwMDAwMDQyMEU4NEEwIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMEY2IG1tY3IwOjBYMDAwMDA4MTAgbW1jcjE6MFgwMDAwMDAwMDQyMEU4NEEwIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMEY3IG1tY3IwOjBYMDAwMDA4MTAgbW1jcjE6MFgwMDAwMDAwMDQyMEU4NEEwIG1tY3JhOjBYMDAwMDIwMDEKKworI0dyb3VwIDE2IHBtX2ZwdTIsIEZsb2F0aW5nIFBvaW50IGV2ZW50cworZXZlbnQ6MFgxMDAgbW1jcjA6MFgwMDAwMDgxMCBtbWNyMTowWDAxMDAyMEU4M0E1MDg0MjAgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgxMDEgbW1jcjA6MFgwMDAwMDgxMCBtbWNyMTowWDAxMDAyMEU4M0E1MDg0MjAgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgxMDIgbW1jcjA6MFgwMDAwMDgxMCBtbWNyMTowWDAxMDAyMEU4M0E1MDg0MjAgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgxMDMgbW1jcjA6MFgwMDAwMDgxMCBtbWNyMTowWDAxMDAyMEU4M0E1MDg0MjAgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgxMDQgbW1jcjA6MFgwMDAwMDgxMCBtbWNyMTowWDAxMDAyMEU4M0E1MDg0MjAgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgxMDUgbW1jcjA6MFgwMDAwMDgxMCBtbWNyMTowWDAxMDAyMEU4M0E1MDg0MjAgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgxMDYgbW1jcjA6MFgwMDAwMDgxMCBtbWNyMTowWDAxMDAyMEU4M0E1MDg0MjAgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgxMDcgbW1jcjA6MFgwMDAwMDgxMCBtbWNyMTowWDAxMDAyMEU4M0E1MDg0MjAgbW1jcmE6MFgwMDAwMjAwMQorCisjR3JvdXAgMTcgcG1faWR1MSwgSW5zdHJ1Y3Rpb24gRGVjb2RlIFVuaXQgZXZlbnRzCitldmVudDowWDExMCBtbWNyMDowWDAwMDAwOTBFIG1tY3IxOjBYMDQwMTAwMDA4NDU2Nzk0QyBtbWNyYTowWDAwMDIyMDAxCitldmVudDowWDExMSBtbWNyMDowWDAwMDAwOTBFIG1tY3IxOjBYMDQwMTAwMDA4NDU2Nzk0QyBtbWNyYTowWDAwMDIyMDAxCitldmVudDowWDExMiBtbWNyMDowWDAwMDAwOTBFIG1tY3IxOjBYMDQwMTAwMDA4NDU2Nzk0QyBtbWNyYTowWDAwMDIyMDAxCitldmVudDowWDExMyBtbWNyMDowWDAwMDAwOTBFIG1tY3IxOjBYMDQwMTAwMDA4NDU2Nzk0QyBtbWNyYTowWDAwMDIyMDAxCitldmVudDowWDExNCBtbWNyMDowWDAwMDAwOTBFIG1tY3IxOjBYMDQwMTAwMDA4NDU2Nzk0QyBtbWNyYTowWDAwMDIyMDAxCitldmVudDowWDExNSBtbWNyMDowWDAwMDAwOTBFIG1tY3IxOjBYMDQwMTAwMDA4NDU2Nzk0QyBtbWNyYTowWDAwMDIyMDAxCitldmVudDowWDExNiBtbWNyMDowWDAwMDAwOTBFIG1tY3IxOjBYMDQwMTAwMDA4NDU2Nzk0QyBtbWNyYTowWDAwMDIyMDAxCitldmVudDowWDExNyBtbWNyMDowWDAwMDAwOTBFIG1tY3IxOjBYMDQwMTAwMDA4NDU2Nzk0QyBtbWNyYTowWDAwMDIyMDAxCisKKyNHcm91cCAxOCBwbV9pZHUyLCBJbnN0cnVjdGlvbiBEZWNvZGUgVW5pdCBldmVudHMKK2V2ZW50OjBYMTIwIG1tY3IwOjBYMDAwMDA5MEUgbW1jcjE6MFgwNDAxMDAwMEE1NTI3QjVDIG1tY3JhOjBYMDAwMjIwMDEKK2V2ZW50OjBYMTIxIG1tY3IwOjBYMDAwMDA5MEUgbW1jcjE6MFgwNDAxMDAwMEE1NTI3QjVDIG1tY3JhOjBYMDAwMjIwMDEKK2V2ZW50OjBYMTIyIG1tY3IwOjBYMDAwMDA5MEUgbW1jcjE6MFgwNDAxMDAwMEE1NTI3QjVDIG1tY3JhOjBYMDAwMjIwMDEKK2V2ZW50OjBYMTIzIG1tY3IwOjBYMDAwMDA5MEUgbW1jcjE6MFgwNDAxMDAwMEE1NTI3QjVDIG1tY3JhOjBYMDAwMjIwMDEKK2V2ZW50OjBYMTI0IG1tY3IwOjBYMDAwMDA5MEUgbW1jcjE6MFgwNDAxMDAwMEE1NTI3QjVDIG1tY3JhOjBYMDAwMjIwMDEKK2V2ZW50OjBYMTI1IG1tY3IwOjBYMDAwMDA5MEUgbW1jcjE6MFgwNDAxMDAwMEE1NTI3QjVDIG1tY3JhOjBYMDAwMjIwMDEKK2V2ZW50OjBYMTI2IG1tY3IwOjBYMDAwMDA5MEUgbW1jcjE6MFgwNDAxMDAwMEE1NTI3QjVDIG1tY3JhOjBYMDAwMjIwMDEKK2V2ZW50OjBYMTI3IG1tY3IwOjBYMDAwMDA5MEUgbW1jcjE6MFgwNDAxMDAwMEE1NTI3QjVDIG1tY3JhOjBYMDAwMjIwMDEKKworI0dyb3VwIDE5IHBtX2lzdV9yZW5hbWUsIElTVSBSZW5hbWUgUG9vbCBFdmVudHMKK2V2ZW50OjBYMTMwIG1tY3IwOjBYMDAwMDEyMjggbW1jcjE6MFgxMDA1NTAwMDhFNkQ5NDlDIG1tY3JhOjBYMDAwMjIwMDEKK2V2ZW50OjBYMTMxIG1tY3IwOjBYMDAwMDEyMjggbW1jcjE6MFgxMDA1NTAwMDhFNkQ5NDlDIG1tY3JhOjBYMDAwMjIwMDEKK2V2ZW50OjBYMTMyIG1tY3IwOjBYMDAwMDEyMjggbW1jcjE6MFgxMDA1NTAwMDhFNkQ5NDlDIG1tY3JhOjBYMDAwMjIwMDEKK2V2ZW50OjBYMTMzIG1tY3IwOjBYMDAwMDEyMjggbW1jcjE6MFgxMDA1NTAwMDhFNkQ5NDlDIG1tY3JhOjBYMDAwMjIwMDEKK2V2ZW50OjBYMTM0IG1tY3IwOjBYMDAwMDEyMjggbW1jcjE6MFgxMDA1NTAwMDhFNkQ5NDlDIG1tY3JhOjBYMDAwMjIwMDEKK2V2ZW50OjBYMTM1IG1tY3IwOjBYMDAwMDEyMjggbW1jcjE6MFgxMDA1NTAwMDhFNkQ5NDlDIG1tY3JhOjBYMDAwMjIwMDEKK2V2ZW50OjBYMTM2IG1tY3IwOjBYMDAwMDEyMjggbW1jcjE6MFgxMDA1NTAwMDhFNkQ5NDlDIG1tY3JhOjBYMDAwMjIwMDEKK2V2ZW50OjBYMTM3IG1tY3IwOjBYMDAwMDEyMjggbW1jcjE6MFgxMDA1NTAwMDhFNkQ5NDlDIG1tY3JhOjBYMDAwMjIwMDEKKworI0dyb3VwIDIwIHBtX2lzdV9xdWV1ZXMxLCBJU1UgUXVldWUgRnVsbCBFdmVudHMKK2V2ZW50OjBYMTQwIG1tY3IwOjBYMDAwMDEzMkUgbW1jcjE6MFgxMDA1MDAwMDg1MEU5OTRDIG1tY3JhOjBYMDAwMjIwMDEKK2V2ZW50OjBYMTQxIG1tY3IwOjBYMDAwMDEzMkUgbW1jcjE6MFgxMDA1MDAwMDg1MEU5OTRDIG1tY3JhOjBYMDAwMjIwMDEKK2V2ZW50OjBYMTQyIG1tY3IwOjBYMDAwMDEzMkUgbW1jcjE6MFgxMDA1MDAwMDg1MEU5OTRDIG1tY3JhOjBYMDAwMjIwMDEKK2V2ZW50OjBYMTQzIG1tY3IwOjBYMDAwMDEzMkUgbW1jcjE6MFgxMDA1MDAwMDg1MEU5OTRDIG1tY3JhOjBYMDAwMjIwMDEKK2V2ZW50OjBYMTQ0IG1tY3IwOjBYMDAwMDEzMkUgbW1jcjE6MFgxMDA1MDAwMDg1MEU5OTRDIG1tY3JhOjBYMDAwMjIwMDEKK2V2ZW50OjBYMTQ1IG1tY3IwOjBYMDAwMDEzMkUgbW1jcjE6MFgxMDA1MDAwMDg1MEU5OTRDIG1tY3JhOjBYMDAwMjIwMDEKK2V2ZW50OjBYMTQ2IG1tY3IwOjBYMDAwMDEzMkUgbW1jcjE6MFgxMDA1MDAwMDg1MEU5OTRDIG1tY3JhOjBYMDAwMjIwMDEKK2V2ZW50OjBYMTQ3IG1tY3IwOjBYMDAwMDEzMkUgbW1jcjE6MFgxMDA1MDAwMDg1MEU5OTRDIG1tY3JhOjBYMDAwMjIwMDEKKworI0dyb3VwIDIxIHBtX2lzdV9mbG93LCBJU1UgSW5zdHJ1Y3Rpb24gRmxvdyBFdmVudHMKK2V2ZW50OjBYMTUwIG1tY3IwOjBYMDAwMDE5MEUgbW1jcjE6MFgxMDAwNTAwMEQ3QjdDNDlDIG1tY3JhOjBYMDAwMjIwMDEKK2V2ZW50OjBYMTUxIG1tY3IwOjBYMDAwMDE5MEUgbW1jcjE6MFgxMDAwNTAwMEQ3QjdDNDlDIG1tY3JhOjBYMDAwMjIwMDEKK2V2ZW50OjBYMTUyIG1tY3IwOjBYMDAwMDE5MEUgbW1jcjE6MFgxMDAwNTAwMEQ3QjdDNDlDIG1tY3JhOjBYMDAwMjIwMDEKK2V2ZW50OjBYMTUzIG1tY3IwOjBYMDAwMDE5MEUgbW1jcjE6MFgxMDAwNTAwMEQ3QjdDNDlDIG1tY3JhOjBYMDAwMjIwMDEKK2V2ZW50OjBYMTU0IG1tY3IwOjBYMDAwMDE5MEUgbW1jcjE6MFgxMDAwNTAwMEQ3QjdDNDlDIG1tY3JhOjBYMDAwMjIwMDEKK2V2ZW50OjBYMTU1IG1tY3IwOjBYMDAwMDE5MEUgbW1jcjE6MFgxMDAwNTAwMEQ3QjdDNDlDIG1tY3JhOjBYMDAwMjIwMDEKK2V2ZW50OjBYMTU2IG1tY3IwOjBYMDAwMDE5MEUgbW1jcjE6MFgxMDAwNTAwMEQ3QjdDNDlDIG1tY3JhOjBYMDAwMjIwMDEKK2V2ZW50OjBYMTU3IG1tY3IwOjBYMDAwMDE5MEUgbW1jcjE6MFgxMDAwNTAwMEQ3QjdDNDlDIG1tY3JhOjBYMDAwMjIwMDEKKworI0dyb3VwIDIyIHBtX2lzdV93b3JrLCBJU1UgSW5kaWNhdG9ycyBvZiBXb3JrIEJsb2NrYWdlCitldmVudDowWDE2MCBtbWNyMDowWDAwMDAwQzEyIG1tY3IxOjBYMTAwMDEwMDA0RkNFOURBOCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDE2MSBtbWNyMDowWDAwMDAwQzEyIG1tY3IxOjBYMTAwMDEwMDA0RkNFOURBOCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDE2MiBtbWNyMDowWDAwMDAwQzEyIG1tY3IxOjBYMTAwMDEwMDA0RkNFOURBOCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDE2MyBtbWNyMDowWDAwMDAwQzEyIG1tY3IxOjBYMTAwMDEwMDA0RkNFOURBOCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDE2NCBtbWNyMDowWDAwMDAwQzEyIG1tY3IxOjBYMTAwMDEwMDA0RkNFOURBOCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDE2NSBtbWNyMDowWDAwMDAwQzEyIG1tY3IxOjBYMTAwMDEwMDA0RkNFOURBOCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDE2NiBtbWNyMDowWDAwMDAwQzEyIG1tY3IxOjBYMTAwMDEwMDA0RkNFOURBOCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDE2NyBtbWNyMDowWDAwMDAwQzEyIG1tY3IxOjBYMTAwMDEwMDA0RkNFOURBOCBtbWNyYTowWDAwMDAyMDAxCisKKyNHcm91cCAyMyBwbV9zZXJpYWxpemUsIExTVSBTZXJpYWxpemluZyBFdmVudHMKK2V2ZW50OjBYMTcwIG1tY3IwOjBYMDAwMDEzMzIgbW1jcjE6MFgwMTE4QjAwMEU5RDY5REZDIG1tY3JhOjBYMDAwMjIwMDEKK2V2ZW50OjBYMTcxIG1tY3IwOjBYMDAwMDEzMzIgbW1jcjE6MFgwMTE4QjAwMEU5RDY5REZDIG1tY3JhOjBYMDAwMjIwMDEKK2V2ZW50OjBYMTcyIG1tY3IwOjBYMDAwMDEzMzIgbW1jcjE6MFgwMTE4QjAwMEU5RDY5REZDIG1tY3JhOjBYMDAwMjIwMDEKK2V2ZW50OjBYMTczIG1tY3IwOjBYMDAwMDEzMzIgbW1jcjE6MFgwMTE4QjAwMEU5RDY5REZDIG1tY3JhOjBYMDAwMjIwMDEKK2V2ZW50OjBYMTc0IG1tY3IwOjBYMDAwMDEzMzIgbW1jcjE6MFgwMTE4QjAwMEU5RDY5REZDIG1tY3JhOjBYMDAwMjIwMDEKK2V2ZW50OjBYMTc1IG1tY3IwOjBYMDAwMDEzMzIgbW1jcjE6MFgwMTE4QjAwMEU5RDY5REZDIG1tY3JhOjBYMDAwMjIwMDEKK2V2ZW50OjBYMTc2IG1tY3IwOjBYMDAwMDEzMzIgbW1jcjE6MFgwMTE4QjAwMEU5RDY5REZDIG1tY3JhOjBYMDAwMjIwMDEKK2V2ZW50OjBYMTc3IG1tY3IwOjBYMDAwMDEzMzIgbW1jcjE6MFgwMTE4QjAwMEU5RDY5REZDIG1tY3JhOjBYMDAwMjIwMDEKKworI0dyb3VwIDI0IHBtX2xzdWJ1c3ksIExTVSBCdXN5IEV2ZW50cworZXZlbnQ6MFgxODAgbW1jcjA6MFgwMDAwMTkzQSBtbWNyMTowWDAwMDBGMDAwREZGNUU0OUMgbW1jcmE6MFgwMDAyMjAwMQorZXZlbnQ6MFgxODEgbW1jcjA6MFgwMDAwMTkzQSBtbWNyMTowWDAwMDBGMDAwREZGNUU0OUMgbW1jcmE6MFgwMDAyMjAwMQorZXZlbnQ6MFgxODIgbW1jcjA6MFgwMDAwMTkzQSBtbWNyMTowWDAwMDBGMDAwREZGNUU0OUMgbW1jcmE6MFgwMDAyMjAwMQorZXZlbnQ6MFgxODMgbW1jcjA6MFgwMDAwMTkzQSBtbWNyMTowWDAwMDBGMDAwREZGNUU0OUMgbW1jcmE6MFgwMDAyMjAwMQorZXZlbnQ6MFgxODQgbW1jcjA6MFgwMDAwMTkzQSBtbWNyMTowWDAwMDBGMDAwREZGNUU0OUMgbW1jcmE6MFgwMDAyMjAwMQorZXZlbnQ6MFgxODUgbW1jcjA6MFgwMDAwMTkzQSBtbWNyMTowWDAwMDBGMDAwREZGNUU0OUMgbW1jcmE6MFgwMDAyMjAwMQorZXZlbnQ6MFgxODYgbW1jcjA6MFgwMDAwMTkzQSBtbWNyMTowWDAwMDBGMDAwREZGNUU0OUMgbW1jcmE6MFgwMDAyMjAwMQorZXZlbnQ6MFgxODcgbW1jcjA6MFgwMDAwMTkzQSBtbWNyMTowWDAwMDBGMDAwREZGNUU0OUMgbW1jcmE6MFgwMDAyMjAwMQorCisjR3JvdXAgMjUgcG1fbHNvdXJjZTIsIEluZm9ybWF0aW9uIG9uIGRhdGEgc291cmNlCitldmVudDowWDE5MCBtbWNyMDowWDAwMDAwOTM4IG1tY3IxOjBYMDAxMEMwMDAzQjlDRTczOCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDE5MSBtbWNyMDowWDAwMDAwOTM4IG1tY3IxOjBYMDAxMEMwMDAzQjlDRTczOCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDE5MiBtbWNyMDowWDAwMDAwOTM4IG1tY3IxOjBYMDAxMEMwMDAzQjlDRTczOCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDE5MyBtbWNyMDowWDAwMDAwOTM4IG1tY3IxOjBYMDAxMEMwMDAzQjlDRTczOCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDE5NCBtbWNyMDowWDAwMDAwOTM4IG1tY3IxOjBYMDAxMEMwMDAzQjlDRTczOCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDE5NSBtbWNyMDowWDAwMDAwOTM4IG1tY3IxOjBYMDAxMEMwMDAzQjlDRTczOCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDE5NiBtbWNyMDowWDAwMDAwOTM4IG1tY3IxOjBYMDAxMEMwMDAzQjlDRTczOCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDE5NyBtbWNyMDowWDAwMDAwOTM4IG1tY3IxOjBYMDAxMEMwMDAzQjlDRTczOCBtbWNyYTowWDAwMDAyMDAxCisKKyNHcm91cCAyNiBwbV9sc291cmNlMywgSW5mb3JtYXRpb24gb24gZGF0YSBzb3VyY2UKK2V2ZW50OjBYMUEwIG1tY3IwOjBYMDAwMDBFMUMgbW1jcjE6MFgwMDEwQzAwMDczQjg3NzI0IG1tY3JhOjBYMDAwMjIwMDEKK2V2ZW50OjBYMUExIG1tY3IwOjBYMDAwMDBFMUMgbW1jcjE6MFgwMDEwQzAwMDczQjg3NzI0IG1tY3JhOjBYMDAwMjIwMDEKK2V2ZW50OjBYMUEyIG1tY3IwOjBYMDAwMDBFMUMgbW1jcjE6MFgwMDEwQzAwMDczQjg3NzI0IG1tY3JhOjBYMDAwMjIwMDEKK2V2ZW50OjBYMUEzIG1tY3IwOjBYMDAwMDBFMUMgbW1jcjE6MFgwMDEwQzAwMDczQjg3NzI0IG1tY3JhOjBYMDAwMjIwMDEKK2V2ZW50OjBYMUE0IG1tY3IwOjBYMDAwMDBFMUMgbW1jcjE6MFgwMDEwQzAwMDczQjg3NzI0IG1tY3JhOjBYMDAwMjIwMDEKK2V2ZW50OjBYMUE1IG1tY3IwOjBYMDAwMDBFMUMgbW1jcjE6MFgwMDEwQzAwMDczQjg3NzI0IG1tY3JhOjBYMDAwMjIwMDEKK2V2ZW50OjBYMUE2IG1tY3IwOjBYMDAwMDBFMUMgbW1jcjE6MFgwMDEwQzAwMDczQjg3NzI0IG1tY3JhOjBYMDAwMjIwMDEKK2V2ZW50OjBYMUE3IG1tY3IwOjBYMDAwMDBFMUMgbW1jcjE6MFgwMDEwQzAwMDczQjg3NzI0IG1tY3JhOjBYMDAwMjIwMDEKKworI0dyb3VwIDI3IHBtX2lzb3VyY2UyLCBJbnN0cnVjdGlvbiBTb3VyY2UgaW5mb3JtYXRpb24KK2V2ZW50OjBYMUIwIG1tY3IwOjBYMDAwMDA5MEUgbW1jcjE6MFg4MDAwMDAwMDdCREVGN0JDIG1tY3JhOjBYMDAwMjIwMDEKK2V2ZW50OjBYMUIxIG1tY3IwOjBYMDAwMDA5MEUgbW1jcjE6MFg4MDAwMDAwMDdCREVGN0JDIG1tY3JhOjBYMDAwMjIwMDEKK2V2ZW50OjBYMUIyIG1tY3IwOjBYMDAwMDA5MEUgbW1jcjE6MFg4MDAwMDAwMDdCREVGN0JDIG1tY3JhOjBYMDAwMjIwMDEKK2V2ZW50OjBYMUIzIG1tY3IwOjBYMDAwMDA5MEUgbW1jcjE6MFg4MDAwMDAwMDdCREVGN0JDIG1tY3JhOjBYMDAwMjIwMDEKK2V2ZW50OjBYMUI0IG1tY3IwOjBYMDAwMDA5MEUgbW1jcjE6MFg4MDAwMDAwMDdCREVGN0JDIG1tY3JhOjBYMDAwMjIwMDEKK2V2ZW50OjBYMUI1IG1tY3IwOjBYMDAwMDA5MEUgbW1jcjE6MFg4MDAwMDAwMDdCREVGN0JDIG1tY3JhOjBYMDAwMjIwMDEKK2V2ZW50OjBYMUI2IG1tY3IwOjBYMDAwMDA5MEUgbW1jcjE6MFg4MDAwMDAwMDdCREVGN0JDIG1tY3JhOjBYMDAwMjIwMDEKK2V2ZW50OjBYMUI3IG1tY3IwOjBYMDAwMDA5MEUgbW1jcjE6MFg4MDAwMDAwMDdCREVGN0JDIG1tY3JhOjBYMDAwMjIwMDEKKworI0dyb3VwIDI4IHBtX2lzb3VyY2UzLCBJbnN0cnVjdGlvbiBTb3VyY2UgaW5mb3JtYXRpb24KK2V2ZW50OjBYMUMwIG1tY3IwOjBYMDAwMDBGMUUgbW1jcjE6MFg4MDAwMDAwMDdCREVGM0E0IG1tY3JhOjBYMDAwMjIwMDEKK2V2ZW50OjBYMUMxIG1tY3IwOjBYMDAwMDBGMUUgbW1jcjE6MFg4MDAwMDAwMDdCREVGM0E0IG1tY3JhOjBYMDAwMjIwMDEKK2V2ZW50OjBYMUMyIG1tY3IwOjBYMDAwMDBGMUUgbW1jcjE6MFg4MDAwMDAwMDdCREVGM0E0IG1tY3JhOjBYMDAwMjIwMDEKK2V2ZW50OjBYMUMzIG1tY3IwOjBYMDAwMDBGMUUgbW1jcjE6MFg4MDAwMDAwMDdCREVGM0E0IG1tY3JhOjBYMDAwMjIwMDEKK2V2ZW50OjBYMUM0IG1tY3IwOjBYMDAwMDBGMUUgbW1jcjE6MFg4MDAwMDAwMDdCREVGM0E0IG1tY3JhOjBYMDAwMjIwMDEKK2V2ZW50OjBYMUM1IG1tY3IwOjBYMDAwMDBGMUUgbW1jcjE6MFg4MDAwMDAwMDdCREVGM0E0IG1tY3JhOjBYMDAwMjIwMDEKK2V2ZW50OjBYMUM2IG1tY3IwOjBYMDAwMDBGMUUgbW1jcjE6MFg4MDAwMDAwMDdCREVGM0E0IG1tY3JhOjBYMDAwMjIwMDEKK2V2ZW50OjBYMUM3IG1tY3IwOjBYMDAwMDBGMUUgbW1jcjE6MFg4MDAwMDAwMDdCREVGM0E0IG1tY3JhOjBYMDAwMjIwMDEKKworI0dyb3VwIDI5IHBtX2ZwdTMsIEZsb2F0aW5nIFBvaW50IGV2ZW50cyBieSB1bml0CitldmVudDowWDFEMCBtbWNyMDowWDAwMDAxMDI4IG1tY3IxOjBYMDAwMDAwMDA4RDYzNTQ5QyBtbWNyYTowWDAwMDIyMDAxCitldmVudDowWDFEMSBtbWNyMDowWDAwMDAxMDI4IG1tY3IxOjBYMDAwMDAwMDA4RDYzNTQ5QyBtbWNyYTowWDAwMDIyMDAxCitldmVudDowWDFEMiBtbWNyMDowWDAwMDAxMDI4IG1tY3IxOjBYMDAwMDAwMDA4RDYzNTQ5QyBtbWNyYTowWDAwMDIyMDAxCitldmVudDowWDFEMyBtbWNyMDowWDAwMDAxMDI4IG1tY3IxOjBYMDAwMDAwMDA4RDYzNTQ5QyBtbWNyYTowWDAwMDIyMDAxCitldmVudDowWDFENCBtbWNyMDowWDAwMDAxMDI4IG1tY3IxOjBYMDAwMDAwMDA4RDYzNTQ5QyBtbWNyYTowWDAwMDIyMDAxCitldmVudDowWDFENSBtbWNyMDowWDAwMDAxMDI4IG1tY3IxOjBYMDAwMDAwMDA4RDYzNTQ5QyBtbWNyYTowWDAwMDIyMDAxCitldmVudDowWDFENiBtbWNyMDowWDAwMDAxMDI4IG1tY3IxOjBYMDAwMDAwMDA4RDYzNTQ5QyBtbWNyYTowWDAwMDIyMDAxCitldmVudDowWDFENyBtbWNyMDowWDAwMDAxMDI4IG1tY3IxOjBYMDAwMDAwMDA4RDYzNTQ5QyBtbWNyYTowWDAwMDIyMDAxCisKKyNHcm91cCAzMCBwbV9mcHU0LCBGbG9hdGluZyBQb2ludCBldmVudHMgYnkgdW5pdAorZXZlbnQ6MFgxRTAgbW1jcjA6MFgwMDAwMTIyQyBtbWNyMTowWDAwMDAwMDAwOURFNzc0OUMgbW1jcmE6MFgwMDAyMjAwMQorZXZlbnQ6MFgxRTEgbW1jcjA6MFgwMDAwMTIyQyBtbWNyMTowWDAwMDAwMDAwOURFNzc0OUMgbW1jcmE6MFgwMDAyMjAwMQorZXZlbnQ6MFgxRTIgbW1jcjA6MFgwMDAwMTIyQyBtbWNyMTowWDAwMDAwMDAwOURFNzc0OUMgbW1jcmE6MFgwMDAyMjAwMQorZXZlbnQ6MFgxRTMgbW1jcjA6MFgwMDAwMTIyQyBtbWNyMTowWDAwMDAwMDAwOURFNzc0OUMgbW1jcmE6MFgwMDAyMjAwMQorZXZlbnQ6MFgxRTQgbW1jcjA6MFgwMDAwMTIyQyBtbWNyMTowWDAwMDAwMDAwOURFNzc0OUMgbW1jcmE6MFgwMDAyMjAwMQorZXZlbnQ6MFgxRTUgbW1jcjA6MFgwMDAwMTIyQyBtbWNyMTowWDAwMDAwMDAwOURFNzc0OUMgbW1jcmE6MFgwMDAyMjAwMQorZXZlbnQ6MFgxRTYgbW1jcjA6MFgwMDAwMTIyQyBtbWNyMTowWDAwMDAwMDAwOURFNzc0OUMgbW1jcmE6MFgwMDAyMjAwMQorZXZlbnQ6MFgxRTcgbW1jcjA6MFgwMDAwMTIyQyBtbWNyMTowWDAwMDAwMDAwOURFNzc0OUMgbW1jcmE6MFgwMDAyMjAwMQorCisjR3JvdXAgMzEgcG1fZnB1NSwgRmxvYXRpbmcgUG9pbnQgZXZlbnRzIGJ5IHVuaXQKK2V2ZW50OjBYMUYwIG1tY3IwOjBYMDAwMDE4MzggbW1jcjE6MFgwMDAwMDAwMDg1MEU5OTU4IG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMUYxIG1tY3IwOjBYMDAwMDE4MzggbW1jcjE6MFgwMDAwMDAwMDg1MEU5OTU4IG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMUYyIG1tY3IwOjBYMDAwMDE4MzggbW1jcjE6MFgwMDAwMDAwMDg1MEU5OTU4IG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMUYzIG1tY3IwOjBYMDAwMDE4MzggbW1jcjE6MFgwMDAwMDAwMDg1MEU5OTU4IG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMUY0IG1tY3IwOjBYMDAwMDE4MzggbW1jcjE6MFgwMDAwMDAwMDg1MEU5OTU4IG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMUY1IG1tY3IwOjBYMDAwMDE4MzggbW1jcjE6MFgwMDAwMDAwMDg1MEU5OTU4IG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMUY2IG1tY3IwOjBYMDAwMDE4MzggbW1jcjE6MFgwMDAwMDAwMDg1MEU5OTU4IG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMUY3IG1tY3IwOjBYMDAwMDE4MzggbW1jcjE6MFgwMDAwMDAwMDg1MEU5OTU4IG1tY3JhOjBYMDAwMDIwMDEKKworI0dyb3VwIDMyIHBtX2ZwdTYsIEZsb2F0aW5nIFBvaW50IGV2ZW50cyBieSB1bml0CitldmVudDowWDIwMCBtbWNyMDowWDAwMDAxQjNFIG1tY3IxOjBYMDEwMDIwMDBDNzM1RTNBNCBtbWNyYTowWDAwMDIyMDAxCitldmVudDowWDIwMSBtbWNyMDowWDAwMDAxQjNFIG1tY3IxOjBYMDEwMDIwMDBDNzM1RTNBNCBtbWNyYTowWDAwMDIyMDAxCitldmVudDowWDIwMiBtbWNyMDowWDAwMDAxQjNFIG1tY3IxOjBYMDEwMDIwMDBDNzM1RTNBNCBtbWNyYTowWDAwMDIyMDAxCitldmVudDowWDIwMyBtbWNyMDowWDAwMDAxQjNFIG1tY3IxOjBYMDEwMDIwMDBDNzM1RTNBNCBtbWNyYTowWDAwMDIyMDAxCitldmVudDowWDIwNCBtbWNyMDowWDAwMDAxQjNFIG1tY3IxOjBYMDEwMDIwMDBDNzM1RTNBNCBtbWNyYTowWDAwMDIyMDAxCitldmVudDowWDIwNSBtbWNyMDowWDAwMDAxQjNFIG1tY3IxOjBYMDEwMDIwMDBDNzM1RTNBNCBtbWNyYTowWDAwMDIyMDAxCitldmVudDowWDIwNiBtbWNyMDowWDAwMDAxQjNFIG1tY3IxOjBYMDEwMDIwMDBDNzM1RTNBNCBtbWNyYTowWDAwMDIyMDAxCitldmVudDowWDIwNyBtbWNyMDowWDAwMDAxQjNFIG1tY3IxOjBYMDEwMDIwMDBDNzM1RTNBNCBtbWNyYTowWDAwMDIyMDAxCisKKyNHcm91cCAzMyBwbV9mcHU3LCBGbG9hdGluZyBQb2ludCBldmVudHMgYnkgdW5pdAorZXZlbnQ6MFgyMTAgbW1jcjA6MFgwMDAwMTkzQSBtbWNyMTowWDAwMDAwMDAwOURDRTkzRTAgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgyMTEgbW1jcjA6MFgwMDAwMTkzQSBtbWNyMTowWDAwMDAwMDAwOURDRTkzRTAgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgyMTIgbW1jcjA6MFgwMDAwMTkzQSBtbWNyMTowWDAwMDAwMDAwOURDRTkzRTAgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgyMTMgbW1jcjA6MFgwMDAwMTkzQSBtbWNyMTowWDAwMDAwMDAwOURDRTkzRTAgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgyMTQgbW1jcjA6MFgwMDAwMTkzQSBtbWNyMTowWDAwMDAwMDAwOURDRTkzRTAgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgyMTUgbW1jcjA6MFgwMDAwMTkzQSBtbWNyMTowWDAwMDAwMDAwOURDRTkzRTAgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgyMTYgbW1jcjA6MFgwMDAwMTkzQSBtbWNyMTowWDAwMDAwMDAwOURDRTkzRTAgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgyMTcgbW1jcjA6MFgwMDAwMTkzQSBtbWNyMTowWDAwMDAwMDAwOURDRTkzRTAgbW1jcmE6MFgwMDAwMjAwMQorCisjR3JvdXAgMzQgcG1fZnh1LCBGaXggUG9pbnQgVW5pdCBldmVudHMKK2V2ZW50OjBYMjIwIG1tY3IwOjBYMDAwMDA5MEUgbW1jcjE6MFg0MDAwMDAwMjQyOTRBNTIwIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMjIxIG1tY3IwOjBYMDAwMDA5MEUgbW1jcjE6MFg0MDAwMDAwMjQyOTRBNTIwIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMjIyIG1tY3IwOjBYMDAwMDA5MEUgbW1jcjE6MFg0MDAwMDAwMjQyOTRBNTIwIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMjIzIG1tY3IwOjBYMDAwMDA5MEUgbW1jcjE6MFg0MDAwMDAwMjQyOTRBNTIwIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMjI0IG1tY3IwOjBYMDAwMDA5MEUgbW1jcjE6MFg0MDAwMDAwMjQyOTRBNTIwIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMjI1IG1tY3IwOjBYMDAwMDA5MEUgbW1jcjE6MFg0MDAwMDAwMjQyOTRBNTIwIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMjI2IG1tY3IwOjBYMDAwMDA5MEUgbW1jcjE6MFg0MDAwMDAwMjQyOTRBNTIwIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMjI3IG1tY3IwOjBYMDAwMDA5MEUgbW1jcjE6MFg0MDAwMDAwMjQyOTRBNTIwIG1tY3JhOjBYMDAwMDIwMDEKKworI0dyb3VwIDM1IHBtX2xzdV9sbXEsIExTVSBMb2FkIE1pc3MgUXVldWUgRXZlbnRzCitldmVudDowWDIzMCBtbWNyMDowWDAwMDAxRTNFIG1tY3IxOjBYMDEwMEEwMDBFRTRFOUQ3OCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDIzMSBtbWNyMDowWDAwMDAxRTNFIG1tY3IxOjBYMDEwMEEwMDBFRTRFOUQ3OCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDIzMiBtbWNyMDowWDAwMDAxRTNFIG1tY3IxOjBYMDEwMEEwMDBFRTRFOUQ3OCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDIzMyBtbWNyMDowWDAwMDAxRTNFIG1tY3IxOjBYMDEwMEEwMDBFRTRFOUQ3OCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDIzNCBtbWNyMDowWDAwMDAxRTNFIG1tY3IxOjBYMDEwMEEwMDBFRTRFOUQ3OCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDIzNSBtbWNyMDowWDAwMDAxRTNFIG1tY3IxOjBYMDEwMEEwMDBFRTRFOUQ3OCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDIzNiBtbWNyMDowWDAwMDAxRTNFIG1tY3IxOjBYMDEwMEEwMDBFRTRFOUQ3OCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDIzNyBtbWNyMDowWDAwMDAxRTNFIG1tY3IxOjBYMDEwMEEwMDBFRTRFOUQ3OCBtbWNyYTowWDAwMDAyMDAxCisKKyNHcm91cCAzNiBwbV9sc3VfZmx1c2gsIExTVSBGbHVzaCBFdmVudHMKK2V2ZW50OjBYMjQwIG1tY3IwOjBYMDAwMDEyMkMgbW1jcjE6MFgwMDBDMDAwMDM5RTc3NDlDIG1tY3JhOjBYMDAwMjIwMDEKK2V2ZW50OjBYMjQxIG1tY3IwOjBYMDAwMDEyMkMgbW1jcjE6MFgwMDBDMDAwMDM5RTc3NDlDIG1tY3JhOjBYMDAwMjIwMDEKK2V2ZW50OjBYMjQyIG1tY3IwOjBYMDAwMDEyMkMgbW1jcjE6MFgwMDBDMDAwMDM5RTc3NDlDIG1tY3JhOjBYMDAwMjIwMDEKK2V2ZW50OjBYMjQzIG1tY3IwOjBYMDAwMDEyMkMgbW1jcjE6MFgwMDBDMDAwMDM5RTc3NDlDIG1tY3JhOjBYMDAwMjIwMDEKK2V2ZW50OjBYMjQ0IG1tY3IwOjBYMDAwMDEyMkMgbW1jcjE6MFgwMDBDMDAwMDM5RTc3NDlDIG1tY3JhOjBYMDAwMjIwMDEKK2V2ZW50OjBYMjQ1IG1tY3IwOjBYMDAwMDEyMkMgbW1jcjE6MFgwMDBDMDAwMDM5RTc3NDlDIG1tY3JhOjBYMDAwMjIwMDEKK2V2ZW50OjBYMjQ2IG1tY3IwOjBYMDAwMDEyMkMgbW1jcjE6MFgwMDBDMDAwMDM5RTc3NDlDIG1tY3JhOjBYMDAwMjIwMDEKK2V2ZW50OjBYMjQ3IG1tY3IwOjBYMDAwMDEyMkMgbW1jcjE6MFgwMDBDMDAwMDM5RTc3NDlDIG1tY3JhOjBYMDAwMjIwMDEKKworI0dyb3VwIDM3IHBtX2xzdV9sb2FkMSwgTFNVIExvYWQgRXZlbnRzCitldmVudDowWDI1MCBtbWNyMDowWDAwMDAxMDI4IG1tY3IxOjBYMDAwRjAwMDA4NTBFOTk1OCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDI1MSBtbWNyMDowWDAwMDAxMDI4IG1tY3IxOjBYMDAwRjAwMDA4NTBFOTk1OCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDI1MiBtbWNyMDowWDAwMDAxMDI4IG1tY3IxOjBYMDAwRjAwMDA4NTBFOTk1OCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDI1MyBtbWNyMDowWDAwMDAxMDI4IG1tY3IxOjBYMDAwRjAwMDA4NTBFOTk1OCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDI1NCBtbWNyMDowWDAwMDAxMDI4IG1tY3IxOjBYMDAwRjAwMDA4NTBFOTk1OCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDI1NSBtbWNyMDowWDAwMDAxMDI4IG1tY3IxOjBYMDAwRjAwMDA4NTBFOTk1OCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDI1NiBtbWNyMDowWDAwMDAxMDI4IG1tY3IxOjBYMDAwRjAwMDA4NTBFOTk1OCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDI1NyBtbWNyMDowWDAwMDAxMDI4IG1tY3IxOjBYMDAwRjAwMDA4NTBFOTk1OCBtbWNyYTowWDAwMDAyMDAxCisKKyNHcm91cCAzOCBwbV9sc3Vfc3RvcmUxLCBMU1UgU3RvcmUgRXZlbnRzCitldmVudDowWDI2MCBtbWNyMDowWDAwMDAxMTJBIG1tY3IxOjBYMDAwRjAwMDA4RDRFOTlEQyBtbWNyYTowWDAwMDIyMDAxCitldmVudDowWDI2MSBtbWNyMDowWDAwMDAxMTJBIG1tY3IxOjBYMDAwRjAwMDA4RDRFOTlEQyBtbWNyYTowWDAwMDIyMDAxCitldmVudDowWDI2MiBtbWNyMDowWDAwMDAxMTJBIG1tY3IxOjBYMDAwRjAwMDA4RDRFOTlEQyBtbWNyYTowWDAwMDIyMDAxCitldmVudDowWDI2MyBtbWNyMDowWDAwMDAxMTJBIG1tY3IxOjBYMDAwRjAwMDA4RDRFOTlEQyBtbWNyYTowWDAwMDIyMDAxCitldmVudDowWDI2NCBtbWNyMDowWDAwMDAxMTJBIG1tY3IxOjBYMDAwRjAwMDA4RDRFOTlEQyBtbWNyYTowWDAwMDIyMDAxCitldmVudDowWDI2NSBtbWNyMDowWDAwMDAxMTJBIG1tY3IxOjBYMDAwRjAwMDA4RDRFOTlEQyBtbWNyYTowWDAwMDIyMDAxCitldmVudDowWDI2NiBtbWNyMDowWDAwMDAxMTJBIG1tY3IxOjBYMDAwRjAwMDA4RDRFOTlEQyBtbWNyYTowWDAwMDIyMDAxCitldmVudDowWDI2NyBtbWNyMDowWDAwMDAxMTJBIG1tY3IxOjBYMDAwRjAwMDA4RDRFOTlEQyBtbWNyYTowWDAwMDIyMDAxCisKKyNHcm91cCAzOSBwbV9sc3Vfc3RvcmUyLCBMU1UgU3RvcmUgRXZlbnRzCitldmVudDowWDI3MCBtbWNyMDowWDAwMDAxODM4IG1tY3IxOjBYMDAwM0MwMDA4RDc2NzQ5QyBtbWNyYTowWDAwMDIyMDAxCitldmVudDowWDI3MSBtbWNyMDowWDAwMDAxODM4IG1tY3IxOjBYMDAwM0MwMDA4RDc2NzQ5QyBtbWNyYTowWDAwMDIyMDAxCitldmVudDowWDI3MiBtbWNyMDowWDAwMDAxODM4IG1tY3IxOjBYMDAwM0MwMDA4RDc2NzQ5QyBtbWNyYTowWDAwMDIyMDAxCitldmVudDowWDI3MyBtbWNyMDowWDAwMDAxODM4IG1tY3IxOjBYMDAwM0MwMDA4RDc2NzQ5QyBtbWNyYTowWDAwMDIyMDAxCitldmVudDowWDI3NCBtbWNyMDowWDAwMDAxODM4IG1tY3IxOjBYMDAwM0MwMDA4RDc2NzQ5QyBtbWNyYTowWDAwMDIyMDAxCitldmVudDowWDI3NSBtbWNyMDowWDAwMDAxODM4IG1tY3IxOjBYMDAwM0MwMDA4RDc2NzQ5QyBtbWNyYTowWDAwMDIyMDAxCitldmVudDowWDI3NiBtbWNyMDowWDAwMDAxODM4IG1tY3IxOjBYMDAwM0MwMDA4RDc2NzQ5QyBtbWNyYTowWDAwMDIyMDAxCitldmVudDowWDI3NyBtbWNyMDowWDAwMDAxODM4IG1tY3IxOjBYMDAwM0MwMDA4RDc2NzQ5QyBtbWNyYTowWDAwMDIyMDAxCisKKyNHcm91cCA0MCBwbV9sc3U3LCBJbmZvcm1hdGlvbiBvbiB0aGUgTG9hZCBTdG9yZSBVbml0CitldmVudDowWDI4MCBtbWNyMDowWDAwMDAxMjJDIG1tY3IxOjBYMDExOEMwMDAzOUY4NzQ5QyBtbWNyYTowWDAwMDIyMDAxCitldmVudDowWDI4MSBtbWNyMDowWDAwMDAxMjJDIG1tY3IxOjBYMDExOEMwMDAzOUY4NzQ5QyBtbWNyYTowWDAwMDIyMDAxCitldmVudDowWDI4MiBtbWNyMDowWDAwMDAxMjJDIG1tY3IxOjBYMDExOEMwMDAzOUY4NzQ5QyBtbWNyYTowWDAwMDIyMDAxCitldmVudDowWDI4MyBtbWNyMDowWDAwMDAxMjJDIG1tY3IxOjBYMDExOEMwMDAzOUY4NzQ5QyBtbWNyYTowWDAwMDIyMDAxCitldmVudDowWDI4NCBtbWNyMDowWDAwMDAxMjJDIG1tY3IxOjBYMDExOEMwMDAzOUY4NzQ5QyBtbWNyYTowWDAwMDIyMDAxCitldmVudDowWDI4NSBtbWNyMDowWDAwMDAxMjJDIG1tY3IxOjBYMDExOEMwMDAzOUY4NzQ5QyBtbWNyYTowWDAwMDIyMDAxCitldmVudDowWDI4NiBtbWNyMDowWDAwMDAxMjJDIG1tY3IxOjBYMDExOEMwMDAzOUY4NzQ5QyBtbWNyYTowWDAwMDIyMDAxCitldmVudDowWDI4NyBtbWNyMDowWDAwMDAxMjJDIG1tY3IxOjBYMDExOEMwMDAzOUY4NzQ5QyBtbWNyYTowWDAwMDIyMDAxCisKKyNHcm91cCA0MSBwbV9kcGZldGNoLCBEYXRhIFByZWZldGNoIEV2ZW50cworZXZlbnQ6MFgyOTAgbW1jcjA6MFgwMDAwMTczRSBtbWNyMTowWDAxMDhGMDAwRTc0RTkzRjggbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgyOTEgbW1jcjA6MFgwMDAwMTczRSBtbWNyMTowWDAxMDhGMDAwRTc0RTkzRjggbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgyOTIgbW1jcjA6MFgwMDAwMTczRSBtbWNyMTowWDAxMDhGMDAwRTc0RTkzRjggbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgyOTMgbW1jcjA6MFgwMDAwMTczRSBtbWNyMTowWDAxMDhGMDAwRTc0RTkzRjggbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgyOTQgbW1jcjA6MFgwMDAwMTczRSBtbWNyMTowWDAxMDhGMDAwRTc0RTkzRjggbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgyOTUgbW1jcjA6MFgwMDAwMTczRSBtbWNyMTowWDAxMDhGMDAwRTc0RTkzRjggbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgyOTYgbW1jcjA6MFgwMDAwMTczRSBtbWNyMTowWDAxMDhGMDAwRTc0RTkzRjggbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgyOTcgbW1jcjA6MFgwMDAwMTczRSBtbWNyMTowWDAxMDhGMDAwRTc0RTkzRjggbW1jcmE6MFgwMDAwMjAwMQorCisjR3JvdXAgNDIgcG1fbWlzYywgTWlzYyBFdmVudHMgZm9yIHRlc3RpbmcKK2V2ZW50OjBYMkEwIG1tY3IwOjBYMDAwMDBDMTQgbW1jcjE6MFgwMDAwMDAwMDYxRDY5NUI0IG1tY3JhOjBYMDAwMjIwMDEKK2V2ZW50OjBYMkExIG1tY3IwOjBYMDAwMDBDMTQgbW1jcjE6MFgwMDAwMDAwMDYxRDY5NUI0IG1tY3JhOjBYMDAwMjIwMDEKK2V2ZW50OjBYMkEyIG1tY3IwOjBYMDAwMDBDMTQgbW1jcjE6MFgwMDAwMDAwMDYxRDY5NUI0IG1tY3JhOjBYMDAwMjIwMDEKK2V2ZW50OjBYMkEzIG1tY3IwOjBYMDAwMDBDMTQgbW1jcjE6MFgwMDAwMDAwMDYxRDY5NUI0IG1tY3JhOjBYMDAwMjIwMDEKK2V2ZW50OjBYMkE0IG1tY3IwOjBYMDAwMDBDMTQgbW1jcjE6MFgwMDAwMDAwMDYxRDY5NUI0IG1tY3JhOjBYMDAwMjIwMDEKK2V2ZW50OjBYMkE1IG1tY3IwOjBYMDAwMDBDMTQgbW1jcjE6MFgwMDAwMDAwMDYxRDY5NUI0IG1tY3JhOjBYMDAwMjIwMDEKK2V2ZW50OjBYMkE2IG1tY3IwOjBYMDAwMDBDMTQgbW1jcjE6MFgwMDAwMDAwMDYxRDY5NUI0IG1tY3JhOjBYMDAwMjIwMDEKK2V2ZW50OjBYMkE3IG1tY3IwOjBYMDAwMDBDMTQgbW1jcjE6MFgwMDAwMDAwMDYxRDY5NUI0IG1tY3JhOjBYMDAwMjIwMDEKKworI0dyb3VwIDQzIHBtX21hcmsxLCBJbmZvcm1hdGlvbiBvbiBtYXJrZWQgaW5zdHJ1Y3Rpb25zCitldmVudDowWDJCMCBtbWNyMDowWDAwMDAwODE2IG1tY3IxOjBYMDEwMDgwODAzQjE4RDZBNCBtbWNyYTowWDAwNzIyMDAxCitldmVudDowWDJCMSBtbWNyMDowWDAwMDAwODE2IG1tY3IxOjBYMDEwMDgwODAzQjE4RDZBNCBtbWNyYTowWDAwNzIyMDAxCitldmVudDowWDJCMiBtbWNyMDowWDAwMDAwODE2IG1tY3IxOjBYMDEwMDgwODAzQjE4RDZBNCBtbWNyYTowWDAwNzIyMDAxCitldmVudDowWDJCMyBtbWNyMDowWDAwMDAwODE2IG1tY3IxOjBYMDEwMDgwODAzQjE4RDZBNCBtbWNyYTowWDAwNzIyMDAxCitldmVudDowWDJCNCBtbWNyMDowWDAwMDAwODE2IG1tY3IxOjBYMDEwMDgwODAzQjE4RDZBNCBtbWNyYTowWDAwNzIyMDAxCitldmVudDowWDJCNSBtbWNyMDowWDAwMDAwODE2IG1tY3IxOjBYMDEwMDgwODAzQjE4RDZBNCBtbWNyYTowWDAwNzIyMDAxCitldmVudDowWDJCNiBtbWNyMDowWDAwMDAwODE2IG1tY3IxOjBYMDEwMDgwODAzQjE4RDZBNCBtbWNyYTowWDAwNzIyMDAxCitldmVudDowWDJCNyBtbWNyMDowWDAwMDAwODE2IG1tY3IxOjBYMDEwMDgwODAzQjE4RDZBNCBtbWNyYTowWDAwNzIyMDAxCisKKyNHcm91cCA0NCBwbV9tYXJrMiwgTWFya2VkIEluc3RydWN0aW9ucyBQcm9jZXNzaW5nIEZsb3cKK2V2ZW50OjBYMkMwIG1tY3IwOjBYMDAwMDBBMUEgbW1jcjE6MFgwMDAwMDAwMDNCNThDNjMwIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMkMxIG1tY3IwOjBYMDAwMDBBMUEgbW1jcjE6MFgwMDAwMDAwMDNCNThDNjMwIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMkMyIG1tY3IwOjBYMDAwMDBBMUEgbW1jcjE6MFgwMDAwMDAwMDNCNThDNjMwIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMkMzIG1tY3IwOjBYMDAwMDBBMUEgbW1jcjE6MFgwMDAwMDAwMDNCNThDNjMwIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMkM0IG1tY3IwOjBYMDAwMDBBMUEgbW1jcjE6MFgwMDAwMDAwMDNCNThDNjMwIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMkM1IG1tY3IwOjBYMDAwMDBBMUEgbW1jcjE6MFgwMDAwMDAwMDNCNThDNjMwIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMkM2IG1tY3IwOjBYMDAwMDBBMUEgbW1jcjE6MFgwMDAwMDAwMDNCNThDNjMwIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMkM3IG1tY3IwOjBYMDAwMDBBMUEgbW1jcjE6MFgwMDAwMDAwMDNCNThDNjMwIG1tY3JhOjBYMDAwMDIwMDEKKworI0dyb3VwIDQ1IHBtX21hcmszLCBNYXJrZWQgU3RvcmVzIFByb2Nlc3NpbmcgRmxvdworZXZlbnQ6MFgyRDAgbW1jcjA6MFgwMDAwMEIwRSBtbWNyMTowWDAxMDAyMDAwNUIxQUJEQTQgbW1jcmE6MFgwMDAyMjAwMQorZXZlbnQ6MFgyRDEgbW1jcjA6MFgwMDAwMEIwRSBtbWNyMTowWDAxMDAyMDAwNUIxQUJEQTQgbW1jcmE6MFgwMDAyMjAwMQorZXZlbnQ6MFgyRDIgbW1jcjA6MFgwMDAwMEIwRSBtbWNyMTowWDAxMDAyMDAwNUIxQUJEQTQgbW1jcmE6MFgwMDAyMjAwMQorZXZlbnQ6MFgyRDMgbW1jcjA6MFgwMDAwMEIwRSBtbWNyMTowWDAxMDAyMDAwNUIxQUJEQTQgbW1jcmE6MFgwMDAyMjAwMQorZXZlbnQ6MFgyRDQgbW1jcjA6MFgwMDAwMEIwRSBtbWNyMTowWDAxMDAyMDAwNUIxQUJEQTQgbW1jcmE6MFgwMDAyMjAwMQorZXZlbnQ6MFgyRDUgbW1jcjA6MFgwMDAwMEIwRSBtbWNyMTowWDAxMDAyMDAwNUIxQUJEQTQgbW1jcmE6MFgwMDAyMjAwMQorZXZlbnQ6MFgyRDYgbW1jcjA6MFgwMDAwMEIwRSBtbWNyMTowWDAxMDAyMDAwNUIxQUJEQTQgbW1jcmE6MFgwMDAyMjAwMQorZXZlbnQ6MFgyRDcgbW1jcjA6MFgwMDAwMEIwRSBtbWNyMTowWDAxMDAyMDAwNUIxQUJEQTQgbW1jcmE6MFgwMDAyMjAwMQorCisjR3JvdXAgNDYgcG1fbWFyazQsIE1hcmtlZCBMb2FkcyBQcm9jZXNzaW5nIEZMb3cKK2V2ZW50OjBYMkUwIG1tY3IwOjBYMDAwMDA4MEUgbW1jcjE6MFgwMTAyODA4MDQyMUFENEEwIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMkUxIG1tY3IwOjBYMDAwMDA4MEUgbW1jcjE6MFgwMTAyODA4MDQyMUFENEEwIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMkUyIG1tY3IwOjBYMDAwMDA4MEUgbW1jcjE6MFgwMTAyODA4MDQyMUFENEEwIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMkUzIG1tY3IwOjBYMDAwMDA4MEUgbW1jcjE6MFgwMTAyODA4MDQyMUFENEEwIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMkU0IG1tY3IwOjBYMDAwMDA4MEUgbW1jcjE6MFgwMTAyODA4MDQyMUFENEEwIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMkU1IG1tY3IwOjBYMDAwMDA4MEUgbW1jcjE6MFgwMTAyODA4MDQyMUFENEEwIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMkU2IG1tY3IwOjBYMDAwMDA4MEUgbW1jcjE6MFgwMTAyODA4MDQyMUFENEEwIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMkU3IG1tY3IwOjBYMDAwMDA4MEUgbW1jcjE6MFgwMTAyODA4MDQyMUFENEEwIG1tY3JhOjBYMDAwMDIwMDEKKworI0dyb3VwIDQ3IHBtX21hcmtfbHNvdXJjZSwgSW5mb3JtYXRpb24gb24gbWFya2VkIGRhdGEgc291cmNlCitldmVudDowWDJGMCBtbWNyMDowWDAwMDAwRTFDIG1tY3IxOjBYMDAxMDMwMDA3MzlDRTczOCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDJGMSBtbWNyMDowWDAwMDAwRTFDIG1tY3IxOjBYMDAxMDMwMDA3MzlDRTczOCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDJGMiBtbWNyMDowWDAwMDAwRTFDIG1tY3IxOjBYMDAxMDMwMDA3MzlDRTczOCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDJGMyBtbWNyMDowWDAwMDAwRTFDIG1tY3IxOjBYMDAxMDMwMDA3MzlDRTczOCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDJGNCBtbWNyMDowWDAwMDAwRTFDIG1tY3IxOjBYMDAxMDMwMDA3MzlDRTczOCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDJGNSBtbWNyMDowWDAwMDAwRTFDIG1tY3IxOjBYMDAxMDMwMDA3MzlDRTczOCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDJGNiBtbWNyMDowWDAwMDAwRTFDIG1tY3IxOjBYMDAxMDMwMDA3MzlDRTczOCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDJGNyBtbWNyMDowWDAwMDAwRTFDIG1tY3IxOjBYMDAxMDMwMDA3MzlDRTczOCBtbWNyYTowWDAwMDAyMDAxCisKKyNHcm91cCA0OCBwbV9tYXJrX2xzb3VyY2UyLCBJbmZvcm1hdGlvbiBvbiBtYXJrZWQgZGF0YSBzb3VyY2UKK2V2ZW50OjBYMzAwIG1tY3IwOjBYMDAwMDA5MEUgbW1jcjE6MFgwMDEwMzAwMEUzOUNFNzM4IG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMzAxIG1tY3IwOjBYMDAwMDA5MEUgbW1jcjE6MFgwMDEwMzAwMEUzOUNFNzM4IG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMzAyIG1tY3IwOjBYMDAwMDA5MEUgbW1jcjE6MFgwMDEwMzAwMEUzOUNFNzM4IG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMzAzIG1tY3IwOjBYMDAwMDA5MEUgbW1jcjE6MFgwMDEwMzAwMEUzOUNFNzM4IG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMzA0IG1tY3IwOjBYMDAwMDA5MEUgbW1jcjE6MFgwMDEwMzAwMEUzOUNFNzM4IG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMzA1IG1tY3IwOjBYMDAwMDA5MEUgbW1jcjE6MFgwMDEwMzAwMEUzOUNFNzM4IG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMzA2IG1tY3IwOjBYMDAwMDA5MEUgbW1jcjE6MFgwMDEwMzAwMEUzOUNFNzM4IG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMzA3IG1tY3IwOjBYMDAwMDA5MEUgbW1jcjE6MFgwMDEwMzAwMEUzOUNFNzM4IG1tY3JhOjBYMDAwMDIwMDEKKworI0dyb3VwIDQ5IHBtX21hcmtfbHNvdXJjZTMsIEluZm9ybWF0aW9uIG9uIG1hcmtlZCBkYXRhIHNvdXJjZQorZXZlbnQ6MFgzMTAgbW1jcjA6MFgwMDAwMEUxQyBtbWNyMTowWDAwMTAzMDAwNzM4RTk3NzAgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgzMTEgbW1jcjA6MFgwMDAwMEUxQyBtbWNyMTowWDAwMTAzMDAwNzM4RTk3NzAgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgzMTIgbW1jcjA6MFgwMDAwMEUxQyBtbWNyMTowWDAwMTAzMDAwNzM4RTk3NzAgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgzMTMgbW1jcjA6MFgwMDAwMEUxQyBtbWNyMTowWDAwMTAzMDAwNzM4RTk3NzAgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgzMTQgbW1jcjA6MFgwMDAwMEUxQyBtbWNyMTowWDAwMTAzMDAwNzM4RTk3NzAgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgzMTUgbW1jcjA6MFgwMDAwMEUxQyBtbWNyMTowWDAwMTAzMDAwNzM4RTk3NzAgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgzMTYgbW1jcjA6MFgwMDAwMEUxQyBtbWNyMTowWDAwMTAzMDAwNzM4RTk3NzAgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgzMTcgbW1jcjA6MFgwMDAwMEUxQyBtbWNyMTowWDAwMTAzMDAwNzM4RTk3NzAgbW1jcmE6MFgwMDAwMjAwMQorCisjR3JvdXAgNTAgcG1fbHN1X21hcmsxLCBMb2FkIFN0b3JlIFVuaXQgTWFya2VkIEV2ZW50cworZXZlbnQ6MFgzMjAgbW1jcjA6MFgwMDAwMUIzNCBtbWNyMTowWDAxMDI4MDAwODUwRTk4RDQgbW1jcmE6MFgwMDAyMjAwMQorZXZlbnQ6MFgzMjEgbW1jcjA6MFgwMDAwMUIzNCBtbWNyMTowWDAxMDI4MDAwODUwRTk4RDQgbW1jcmE6MFgwMDAyMjAwMQorZXZlbnQ6MFgzMjIgbW1jcjA6MFgwMDAwMUIzNCBtbWNyMTowWDAxMDI4MDAwODUwRTk4RDQgbW1jcmE6MFgwMDAyMjAwMQorZXZlbnQ6MFgzMjMgbW1jcjA6MFgwMDAwMUIzNCBtbWNyMTowWDAxMDI4MDAwODUwRTk4RDQgbW1jcmE6MFgwMDAyMjAwMQorZXZlbnQ6MFgzMjQgbW1jcjA6MFgwMDAwMUIzNCBtbWNyMTowWDAxMDI4MDAwODUwRTk4RDQgbW1jcmE6MFgwMDAyMjAwMQorZXZlbnQ6MFgzMjUgbW1jcjA6MFgwMDAwMUIzNCBtbWNyMTowWDAxMDI4MDAwODUwRTk4RDQgbW1jcmE6MFgwMDAyMjAwMQorZXZlbnQ6MFgzMjYgbW1jcjA6MFgwMDAwMUIzNCBtbWNyMTowWDAxMDI4MDAwODUwRTk4RDQgbW1jcmE6MFgwMDAyMjAwMQorZXZlbnQ6MFgzMjcgbW1jcjA6MFgwMDAwMUIzNCBtbWNyMTowWDAxMDI4MDAwODUwRTk4RDQgbW1jcmE6MFgwMDAyMjAwMQorCisjR3JvdXAgNTEgcG1fbHN1X21hcmsyLCBMb2FkIFN0b3JlIFVuaXQgTWFya2VkIEV2ZW50cworZXZlbnQ6MFgzMzAgbW1jcjA6MFgwMDAwMTgzOCBtbWNyMTowWDAxMDI4MDAwOTU4RTk5REMgbW1jcmE6MFgwMDAyMjAwMQorZXZlbnQ6MFgzMzEgbW1jcjA6MFgwMDAwMTgzOCBtbWNyMTowWDAxMDI4MDAwOTU4RTk5REMgbW1jcmE6MFgwMDAyMjAwMQorZXZlbnQ6MFgzMzIgbW1jcjA6MFgwMDAwMTgzOCBtbWNyMTowWDAxMDI4MDAwOTU4RTk5REMgbW1jcmE6MFgwMDAyMjAwMQorZXZlbnQ6MFgzMzMgbW1jcjA6MFgwMDAwMTgzOCBtbWNyMTowWDAxMDI4MDAwOTU4RTk5REMgbW1jcmE6MFgwMDAyMjAwMQorZXZlbnQ6MFgzMzQgbW1jcjA6MFgwMDAwMTgzOCBtbWNyMTowWDAxMDI4MDAwOTU4RTk5REMgbW1jcmE6MFgwMDAyMjAwMQorZXZlbnQ6MFgzMzUgbW1jcjA6MFgwMDAwMTgzOCBtbWNyMTowWDAxMDI4MDAwOTU4RTk5REMgbW1jcmE6MFgwMDAyMjAwMQorZXZlbnQ6MFgzMzYgbW1jcjA6MFgwMDAwMTgzOCBtbWNyMTowWDAxMDI4MDAwOTU4RTk5REMgbW1jcmE6MFgwMDAyMjAwMQorZXZlbnQ6MFgzMzcgbW1jcjA6MFgwMDAwMTgzOCBtbWNyMTowWDAxMDI4MDAwOTU4RTk5REMgbW1jcmE6MFgwMDAyMjAwMQorCisjR3JvdXAgNTIgcG1fbHN1X21hcmszLCBMb2FkIFN0b3JlIFVuaXQgTWFya2VkIEV2ZW50cworZXZlbnQ6MFgzNDAgbW1jcjA6MFgwMDAwMUQwRSBtbWNyMTowWDAxMDBCMDAwQ0U4RUQ2QTQgbW1jcmE6MFgwMDAyMjAwMQorZXZlbnQ6MFgzNDEgbW1jcjA6MFgwMDAwMUQwRSBtbWNyMTowWDAxMDBCMDAwQ0U4RUQ2QTQgbW1jcmE6MFgwMDAyMjAwMQorZXZlbnQ6MFgzNDIgbW1jcjA6MFgwMDAwMUQwRSBtbWNyMTowWDAxMDBCMDAwQ0U4RUQ2QTQgbW1jcmE6MFgwMDAyMjAwMQorZXZlbnQ6MFgzNDMgbW1jcjA6MFgwMDAwMUQwRSBtbWNyMTowWDAxMDBCMDAwQ0U4RUQ2QTQgbW1jcmE6MFgwMDAyMjAwMQorZXZlbnQ6MFgzNDQgbW1jcjA6MFgwMDAwMUQwRSBtbWNyMTowWDAxMDBCMDAwQ0U4RUQ2QTQgbW1jcmE6MFgwMDAyMjAwMQorZXZlbnQ6MFgzNDUgbW1jcjA6MFgwMDAwMUQwRSBtbWNyMTowWDAxMDBCMDAwQ0U4RUQ2QTQgbW1jcmE6MFgwMDAyMjAwMQorZXZlbnQ6MFgzNDYgbW1jcjA6MFgwMDAwMUQwRSBtbWNyMTowWDAxMDBCMDAwQ0U4RUQ2QTQgbW1jcmE6MFgwMDAyMjAwMQorZXZlbnQ6MFgzNDcgbW1jcjA6MFgwMDAwMUQwRSBtbWNyMTowWDAxMDBCMDAwQ0U4RUQ2QTQgbW1jcmE6MFgwMDAyMjAwMQorCisjR3JvdXAgNTMgcG1fdGhyZXNob2xkLCBHcm91cCBmb3IgcGlwZWxpbmUgdGhyZXNob2xkIHN0dWRpZXMKK2V2ZW50OjBYMzUwIG1tY3IwOjBYMDAwMDFFMTYgbW1jcjE6MFgwMTAwQTAwMENBNEVENUY0IG1tY3JhOjBYMDA3MjIwMDEKK2V2ZW50OjBYMzUxIG1tY3IwOjBYMDAwMDFFMTYgbW1jcjE6MFgwMTAwQTAwMENBNEVENUY0IG1tY3JhOjBYMDA3MjIwMDEKK2V2ZW50OjBYMzUyIG1tY3IwOjBYMDAwMDFFMTYgbW1jcjE6MFgwMTAwQTAwMENBNEVENUY0IG1tY3JhOjBYMDA3MjIwMDEKK2V2ZW50OjBYMzUzIG1tY3IwOjBYMDAwMDFFMTYgbW1jcjE6MFgwMTAwQTAwMENBNEVENUY0IG1tY3JhOjBYMDA3MjIwMDEKK2V2ZW50OjBYMzU0IG1tY3IwOjBYMDAwMDFFMTYgbW1jcjE6MFgwMTAwQTAwMENBNEVENUY0IG1tY3JhOjBYMDA3MjIwMDEKK2V2ZW50OjBYMzU1IG1tY3IwOjBYMDAwMDFFMTYgbW1jcjE6MFgwMTAwQTAwMENBNEVENUY0IG1tY3JhOjBYMDA3MjIwMDEKK2V2ZW50OjBYMzU2IG1tY3IwOjBYMDAwMDFFMTYgbW1jcjE6MFgwMTAwQTAwMENBNEVENUY0IG1tY3JhOjBYMDA3MjIwMDEKK2V2ZW50OjBYMzU3IG1tY3IwOjBYMDAwMDFFMTYgbW1jcjE6MFgwMTAwQTAwMENBNEVENUY0IG1tY3JhOjBYMDA3MjIwMDEKKworI0dyb3VwIDU0IHBtX3BlX2JlbmNoMSwgUEUgQmVuY2htYXJrZXIgZ3JvdXAgZm9yIEZQIGFuYWx5c2lzCitldmVudDowWDM2MCBtbWNyMDowWDAwMDAwODEwIG1tY3IxOjBYMTAwMDEwMDI0MjBFODRBMCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDM2MSBtbWNyMDowWDAwMDAwODEwIG1tY3IxOjBYMTAwMDEwMDI0MjBFODRBMCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDM2MiBtbWNyMDowWDAwMDAwODEwIG1tY3IxOjBYMTAwMDEwMDI0MjBFODRBMCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDM2MyBtbWNyMDowWDAwMDAwODEwIG1tY3IxOjBYMTAwMDEwMDI0MjBFODRBMCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDM2NCBtbWNyMDowWDAwMDAwODEwIG1tY3IxOjBYMTAwMDEwMDI0MjBFODRBMCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDM2NSBtbWNyMDowWDAwMDAwODEwIG1tY3IxOjBYMTAwMDEwMDI0MjBFODRBMCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDM2NiBtbWNyMDowWDAwMDAwODEwIG1tY3IxOjBYMTAwMDEwMDI0MjBFODRBMCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDM2NyBtbWNyMDowWDAwMDAwODEwIG1tY3IxOjBYMTAwMDEwMDI0MjBFODRBMCBtbWNyYTowWDAwMDAyMDAxCisKKyNHcm91cCA1NSBwbV9wZV9iZW5jaDIsIFBFIEJlbmNobWFya2VyIGdyb3VwIGZvciBGUCBzdGFsbHMgYW5hbHlzaXMKK2V2ZW50OjBYMzcwIG1tY3IwOjBYMDAwMDA3MTAgbW1jcjE6MFgxMTA0MjA2ODlBNTA4QkEwIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMzcxIG1tY3IwOjBYMDAwMDA3MTAgbW1jcjE6MFgxMTA0MjA2ODlBNTA4QkEwIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMzcyIG1tY3IwOjBYMDAwMDA3MTAgbW1jcjE6MFgxMTA0MjA2ODlBNTA4QkEwIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMzczIG1tY3IwOjBYMDAwMDA3MTAgbW1jcjE6MFgxMTA0MjA2ODlBNTA4QkEwIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMzc0IG1tY3IwOjBYMDAwMDA3MTAgbW1jcjE6MFgxMTA0MjA2ODlBNTA4QkEwIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMzc1IG1tY3IwOjBYMDAwMDA3MTAgbW1jcjE6MFgxMTA0MjA2ODlBNTA4QkEwIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMzc2IG1tY3IwOjBYMDAwMDA3MTAgbW1jcjE6MFgxMTA0MjA2ODlBNTA4QkEwIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYMzc3IG1tY3IwOjBYMDAwMDA3MTAgbW1jcjE6MFgxMTA0MjA2ODlBNTA4QkEwIG1tY3JhOjBYMDAwMDIwMDEKKworI0dyb3VwIDU2IHBtX3BlX2JlbmNoMywgUEUgQmVuY2htYXJrZXIgZ3JvdXAgZm9yIGJyYW5jaCBhbmFseXNpcworZXZlbnQ6MFgzODAgbW1jcjA6MFgwMDAwMDkzOCBtbWNyMTowWDkwMDQwMDAwQzY2QTdENkMgbW1jcmE6MFgwMDAyMjAwMQorZXZlbnQ6MFgzODEgbW1jcjA6MFgwMDAwMDkzOCBtbWNyMTowWDkwMDQwMDAwQzY2QTdENkMgbW1jcmE6MFgwMDAyMjAwMQorZXZlbnQ6MFgzODIgbW1jcjA6MFgwMDAwMDkzOCBtbWNyMTowWDkwMDQwMDAwQzY2QTdENkMgbW1jcmE6MFgwMDAyMjAwMQorZXZlbnQ6MFgzODMgbW1jcjA6MFgwMDAwMDkzOCBtbWNyMTowWDkwMDQwMDAwQzY2QTdENkMgbW1jcmE6MFgwMDAyMjAwMQorZXZlbnQ6MFgzODQgbW1jcjA6MFgwMDAwMDkzOCBtbWNyMTowWDkwMDQwMDAwQzY2QTdENkMgbW1jcmE6MFgwMDAyMjAwMQorZXZlbnQ6MFgzODUgbW1jcjA6MFgwMDAwMDkzOCBtbWNyMTowWDkwMDQwMDAwQzY2QTdENkMgbW1jcmE6MFgwMDAyMjAwMQorZXZlbnQ6MFgzODYgbW1jcjA6MFgwMDAwMDkzOCBtbWNyMTowWDkwMDQwMDAwQzY2QTdENkMgbW1jcmE6MFgwMDAyMjAwMQorZXZlbnQ6MFgzODcgbW1jcjA6MFgwMDAwMDkzOCBtbWNyMTowWDkwMDQwMDAwQzY2QTdENkMgbW1jcmE6MFgwMDAyMjAwMQorCisjR3JvdXAgNTcgcG1fcGVfYmVuY2g0LCBQRSBCZW5jaG1hcmtlciBncm91cCBmb3IgTDEgYW5kIFRMQiBhbmFseXNpcworZXZlbnQ6MFgzOTAgbW1jcjA6MFgwMDAwMTQyMCBtbWNyMTowWDAxMEIwMDAwNDRDRTk0MjAgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgzOTEgbW1jcjA6MFgwMDAwMTQyMCBtbWNyMTowWDAxMEIwMDAwNDRDRTk0MjAgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgzOTIgbW1jcjA6MFgwMDAwMTQyMCBtbWNyMTowWDAxMEIwMDAwNDRDRTk0MjAgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgzOTMgbW1jcjA6MFgwMDAwMTQyMCBtbWNyMTowWDAxMEIwMDAwNDRDRTk0MjAgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgzOTQgbW1jcjA6MFgwMDAwMTQyMCBtbWNyMTowWDAxMEIwMDAwNDRDRTk0MjAgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgzOTUgbW1jcjA6MFgwMDAwMTQyMCBtbWNyMTowWDAxMEIwMDAwNDRDRTk0MjAgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgzOTYgbW1jcjA6MFgwMDAwMTQyMCBtbWNyMTowWDAxMEIwMDAwNDRDRTk0MjAgbW1jcmE6MFgwMDAwMjAwMQorZXZlbnQ6MFgzOTcgbW1jcjA6MFgwMDAwMTQyMCBtbWNyMTowWDAxMEIwMDAwNDRDRTk0MjAgbW1jcmE6MFgwMDAwMjAwMQorCisjR3JvdXAgNTggcG1fcGVfYmVuY2g1LCBQRSBCZW5jaG1hcmtlciBncm91cCBmb3IgTDIgYW5hbHlzaXMKK2V2ZW50OjBYM0EwIG1tY3IwOjBYMDAwMDA5MEUgbW1jcjE6MFgwMDEwQzAwMDczOUNFNzM4IG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYM0ExIG1tY3IwOjBYMDAwMDA5MEUgbW1jcjE6MFgwMDEwQzAwMDczOUNFNzM4IG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYM0EyIG1tY3IwOjBYMDAwMDA5MEUgbW1jcjE6MFgwMDEwQzAwMDczOUNFNzM4IG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYM0EzIG1tY3IwOjBYMDAwMDA5MEUgbW1jcjE6MFgwMDEwQzAwMDczOUNFNzM4IG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYM0E0IG1tY3IwOjBYMDAwMDA5MEUgbW1jcjE6MFgwMDEwQzAwMDczOUNFNzM4IG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYM0E1IG1tY3IwOjBYMDAwMDA5MEUgbW1jcjE6MFgwMDEwQzAwMDczOUNFNzM4IG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYM0E2IG1tY3IwOjBYMDAwMDA5MEUgbW1jcjE6MFgwMDEwQzAwMDczOUNFNzM4IG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYM0E3IG1tY3IwOjBYMDAwMDA5MEUgbW1jcjE6MFgwMDEwQzAwMDczOUNFNzM4IG1tY3JhOjBYMDAwMDIwMDEKKworI0dyb3VwIDU5IHBtX3BlX2JlbmNoNiwgUEUgQmVuY2htYXJrZXIgZ3JvdXAgZm9yIEwzIGFuYWx5c2lzCitldmVudDowWDNCMCBtbWNyMDowWDAwMDAwRTFDIG1tY3IxOjBYMDAxMEMwMDA3MzlDNzRCOCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDNCMSBtbWNyMDowWDAwMDAwRTFDIG1tY3IxOjBYMDAxMEMwMDA3MzlDNzRCOCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDNCMiBtbWNyMDowWDAwMDAwRTFDIG1tY3IxOjBYMDAxMEMwMDA3MzlDNzRCOCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDNCMyBtbWNyMDowWDAwMDAwRTFDIG1tY3IxOjBYMDAxMEMwMDA3MzlDNzRCOCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDNCNCBtbWNyMDowWDAwMDAwRTFDIG1tY3IxOjBYMDAxMEMwMDA3MzlDNzRCOCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDNCNSBtbWNyMDowWDAwMDAwRTFDIG1tY3IxOjBYMDAxMEMwMDA3MzlDNzRCOCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDNCNiBtbWNyMDowWDAwMDAwRTFDIG1tY3IxOjBYMDAxMEMwMDA3MzlDNzRCOCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDNCNyBtbWNyMDowWDAwMDAwRTFDIG1tY3IxOjBYMDAxMEMwMDA3MzlDNzRCOCBtbWNyYTowWDAwMDAyMDAxCisKKyNHcm91cCA2MCBwbV9ocG1jb3VudDEsIEhwbWNvdW50IGdyb3VwIGZvciBMMSBhbmQgVExCIGJlaGF2aW9yIGFuYWx5c2lzCitldmVudDowWDNDMCBtbWNyMDowWDAwMDAxNDE0IG1tY3IxOjBYMDEwQjAwMDA0NENFOTQyMCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDNDMSBtbWNyMDowWDAwMDAxNDE0IG1tY3IxOjBYMDEwQjAwMDA0NENFOTQyMCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDNDMiBtbWNyMDowWDAwMDAxNDE0IG1tY3IxOjBYMDEwQjAwMDA0NENFOTQyMCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDNDMyBtbWNyMDowWDAwMDAxNDE0IG1tY3IxOjBYMDEwQjAwMDA0NENFOTQyMCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDNDNCBtbWNyMDowWDAwMDAxNDE0IG1tY3IxOjBYMDEwQjAwMDA0NENFOTQyMCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDNDNSBtbWNyMDowWDAwMDAxNDE0IG1tY3IxOjBYMDEwQjAwMDA0NENFOTQyMCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDNDNiBtbWNyMDowWDAwMDAxNDE0IG1tY3IxOjBYMDEwQjAwMDA0NENFOTQyMCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDNDNyBtbWNyMDowWDAwMDAxNDE0IG1tY3IxOjBYMDEwQjAwMDA0NENFOTQyMCBtbWNyYTowWDAwMDAyMDAxCisKKyNHcm91cCA2MSBwbV9ocG1jb3VudDIsIEhwbWNvdW50IGdyb3VwIGZvciBjb21wdXRhdGlvbiBpbnRlbnNpdHkgYW5hbHlzaXMKK2V2ZW50OjBYM0QwIG1tY3IwOjBYMDAwMDA4MTAgbW1jcjE6MFgwMTAwMjAyODlEQ0U4NEEwIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYM0QxIG1tY3IwOjBYMDAwMDA4MTAgbW1jcjE6MFgwMTAwMjAyODlEQ0U4NEEwIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYM0QyIG1tY3IwOjBYMDAwMDA4MTAgbW1jcjE6MFgwMTAwMjAyODlEQ0U4NEEwIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYM0QzIG1tY3IwOjBYMDAwMDA4MTAgbW1jcjE6MFgwMTAwMjAyODlEQ0U4NEEwIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYM0Q0IG1tY3IwOjBYMDAwMDA4MTAgbW1jcjE6MFgwMTAwMjAyODlEQ0U4NEEwIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYM0Q1IG1tY3IwOjBYMDAwMDA4MTAgbW1jcjE6MFgwMTAwMjAyODlEQ0U4NEEwIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYM0Q2IG1tY3IwOjBYMDAwMDA4MTAgbW1jcjE6MFgwMTAwMjAyODlEQ0U4NEEwIG1tY3JhOjBYMDAwMDIwMDEKK2V2ZW50OjBYM0Q3IG1tY3IwOjBYMDAwMDA4MTAgbW1jcjE6MFgwMTAwMjAyODlEQ0U4NEEwIG1tY3JhOjBYMDAwMDIwMDEKKworI0dyb3VwIDYyIHBtX2wxYW5kYnIsIEwxIG1pc3NlcyBhbmQgYnJhbmNoIG1pc3NwcmVkaWN0IGFuYWx5c2lzCitldmVudDowWDNFMCBtbWNyMDowWDAwMDAwOTBFIG1tY3IxOjBYODAwM0MwMDA0NjM2N0NFOCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDNFMSBtbWNyMDowWDAwMDAwOTBFIG1tY3IxOjBYODAwM0MwMDA0NjM2N0NFOCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDNFMiBtbWNyMDowWDAwMDAwOTBFIG1tY3IxOjBYODAwM0MwMDA0NjM2N0NFOCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDNFMyBtbWNyMDowWDAwMDAwOTBFIG1tY3IxOjBYODAwM0MwMDA0NjM2N0NFOCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDNFNCBtbWNyMDowWDAwMDAwOTBFIG1tY3IxOjBYODAwM0MwMDA0NjM2N0NFOCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDNFNSBtbWNyMDowWDAwMDAwOTBFIG1tY3IxOjBYODAwM0MwMDA0NjM2N0NFOCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDNFNiBtbWNyMDowWDAwMDAwOTBFIG1tY3IxOjBYODAwM0MwMDA0NjM2N0NFOCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDNFNyBtbWNyMDowWDAwMDAwOTBFIG1tY3IxOjBYODAwM0MwMDA0NjM2N0NFOCBtbWNyYTowWDAwMDAyMDAxCisKKyNHcm91cCA2MyBwbV9pbWl4LCBJbnN0cnVjdGlvbiBtaXg6IGxvYWRzLCBzdG9yZXMgYW5kIGJyYW5jaGVzCitldmVudDowWDNGMCBtbWNyMDowWDAwMDAwOTBFIG1tY3IxOjBYODAwM0MwMDA0NjBGQjQyMCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDNGMSBtbWNyMDowWDAwMDAwOTBFIG1tY3IxOjBYODAwM0MwMDA0NjBGQjQyMCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDNGMiBtbWNyMDowWDAwMDAwOTBFIG1tY3IxOjBYODAwM0MwMDA0NjBGQjQyMCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDNGMyBtbWNyMDowWDAwMDAwOTBFIG1tY3IxOjBYODAwM0MwMDA0NjBGQjQyMCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDNGNCBtbWNyMDowWDAwMDAwOTBFIG1tY3IxOjBYODAwM0MwMDA0NjBGQjQyMCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDNGNSBtbWNyMDowWDAwMDAwOTBFIG1tY3IxOjBYODAwM0MwMDA0NjBGQjQyMCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDNGNiBtbWNyMDowWDAwMDAwOTBFIG1tY3IxOjBYODAwM0MwMDA0NjBGQjQyMCBtbWNyYTowWDAwMDAyMDAxCitldmVudDowWDNGNyBtbWNyMDowWDAwMDAwOTBFIG1tY3IxOjBYODAwM0MwMDA0NjBGQjQyMCBtbWNyYTowWDAwMDAyMDAxCmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9ldmVudHMvcHBjNjQvcG93ZXI0L2V2ZW50cyBiL29wcm9maWxlLTAuOS43L2V2ZW50cy9wcGM2NC9wb3dlcjQvZXZlbnRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjNTUzZDMKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9ldmVudHMvcHBjNjQvcG93ZXI0L2V2ZW50cwpAQCAtMCwwICsxLDY0NSBAQAorI1BQQzY0IFBPV0VSNCBldmVudHMKKyMKKyMgIFdpdGhpbiBlYWNoIGdyb3VwIHRoZSBldmVudCBuYW1lcyBtdXN0IGJlIHVuaXF1ZS4gIEVhY2ggZXZlbnQgaW4gYSBncm91cCBpcworIyAgYXNzaWduZWQgdG8gYSB1bmlxdWUgY291bnRlci4gIFRoZSBncm91cHMgYXJlIGZyb20gdGhlIGdyb3VwcyBkZWZpbmVkIGluIHRoZQorIyAgUGVyZm9ybWFuY2UgTW9uaXRvciBVbml0IHVzZXIgZ3VpZGUgZm9yIHRoaXMgcHJvY2Vzc29yLgorIworIyAgT25seSBldmVudHMgd2l0aGluIHRoZSBzYW1lIGdyb3VwIGNhbiBiZSBzZWxlY3RlZCBzaW11bHRhbmVvdXNseS4KKyMgIEVhY2ggZXZlbnQgaXMgZ2l2ZW4gYSB1bmlxdWUgZXZlbnQgbnVtYmVyLiAgVGhlIGV2ZW50IG51bWJlciBpcyB1c2VkIGJ5IHRoZQorIyAgT1Byb2ZpbGUgY29kZSB0byByZXNvbHZlIGV2ZW50IG5hbWVzIGZvciB0aGUgcG9zdC1wcm9jZXNzaW5nLiAgVGhpcyBpcyBkb25lCisjICB0byBwcmVzZXJ2ZSBjb21wYXRpYmlsaXR5IHdpdGggdGhlIHJlc3Qgb2YgdGhlIE9Qcm9maWxlIGNvZGUuICBUaGUgZXZlbnQKKyMgIG51bWJlcnMgYXJlIGZvcm1hdHRlZCBhcyBmb2xsb3dzOiA8Z3JvdXBfbnVtPmNvbmNhdCg8Y291bnRlciBmb3IgdGhlIGV2ZW50PikuCisKKyNHcm91cCBEZWZhdWx0CitldmVudDowWDAwMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOkNZQ0xFUyA6IFByb2Nlc3NvciBDeWNsZXMKKworCisjR3JvdXAgMSBwbV9zbGljZTAsIFRpbWUgU2xpY2UgMAorZXZlbnQ6MFgwMTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDEgOiAoR3JvdXAgMSBwbV9zbGljZTApIFJ1biBjeWNsZXMKK2V2ZW50OjBYMDExIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDEgOiAoR3JvdXAgMSBwbV9zbGljZTApIFByb2Nlc3NvciBjeWNsZXMKK2V2ZW50OjBYMDEyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9TVE9QX0NPTVBMRVRJT05fR1JQMSA6IChHcm91cCAxIHBtX3NsaWNlMCkgQ29tcGxldGlvbiBzdG9wcGVkCitldmVudDowWDAxMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAxIDogKEdyb3VwIDEgcG1fc2xpY2UwKSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDAxNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fMVBMVVNfUFBDX0NNUExfR1JQMSA6IChHcm91cCAxIHBtX3NsaWNlMCkgT25lIG9yIG1vcmUgUFBDIGluc3RydWN0aW9uIGNvbXBsZXRlZAorZXZlbnQ6MFgwMTUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQMSA6IChHcm91cCAxIHBtX3NsaWNlMCkgUHJvY2Vzc29yIGN5Y2xlcworZXZlbnQ6MFgwMTYgY291bnRlcnM6NiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0dSUF9DTVBMX0dSUDEgOiAoR3JvdXAgMSBwbV9zbGljZTApIEdyb3VwIGNvbXBsZXRlZAorZXZlbnQ6MFgwMTcgY291bnRlcnM6NyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0dSUF9ESVNQX1JFSkVDVF9HUlAxIDogKEdyb3VwIDEgcG1fc2xpY2UwKSBHcm91cCBkaXNwYXRjaCByZWplY3RlZAorCisjR3JvdXAgMiBwbV9lcHJvZiwgR3JvdXAgZm9yIHVzZSB3aXRoIGVwcm9mCitldmVudDowWDAyMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlAyIDogKEdyb3VwIDIgcG1fZXByb2YpIFByb2Nlc3NvciBjeWNsZXMKK2V2ZW50OjBYMDIxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDIgOiAoR3JvdXAgMiBwbV9lcHJvZikgUHJvY2Vzc29yIGN5Y2xlcworZXZlbnQ6MFgwMjIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xEX01JU1NfTDFfR1JQMiA6IChHcm91cCAyIHBtX2Vwcm9mKSBMMSBEIGNhY2hlIGxvYWQgbWlzc2VzCitldmVudDowWDAyMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRENfSU5WX0wyX0dSUDIgOiAoR3JvdXAgMiBwbV9lcHJvZikgTDEgRCBjYWNoZSBlbnRyaWVzIGludmFsaWRhdGVkIGZyb20gTDIKK2V2ZW50OjBYMDI0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JTlNUX0RJU1BfR1JQMiA6IChHcm91cCAyIHBtX2Vwcm9mKSBJbnN0cnVjdGlvbnMgZGlzcGF0Y2hlZAorZXZlbnQ6MFgwMjUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMiA6IChHcm91cCAyIHBtX2Vwcm9mKSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDAyNiBjb3VudGVyczo2IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fU1RfUkVGX0wxX0dSUDIgOiAoR3JvdXAgMiBwbV9lcHJvZikgTDEgRCBjYWNoZSBzdG9yZSByZWZlcmVuY2VzCitldmVudDowWDAyNyBjb3VudGVyczo3IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTERfUkVGX0wxX0dSUDIgOiAoR3JvdXAgMiBwbV9lcHJvZikgTDEgRCBjYWNoZSBsb2FkIHJlZmVyZW5jZXMKKworI0dyb3VwIDMgcG1fYmFzaWMsIEJhc2ljIHBlcmZvcm1hbmNlIGluZGljYXRvcnMKK2V2ZW50OjBYMDMwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDMgOiAoR3JvdXAgMyBwbV9iYXNpYykgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgwMzEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQMyA6IChHcm91cCAzIHBtX2Jhc2ljKSBQcm9jZXNzb3IgY3ljbGVzCitldmVudDowWDAzMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTERfTUlTU19MMV9HUlAzIDogKEdyb3VwIDMgcG1fYmFzaWMpIEwxIEQgY2FjaGUgbG9hZCBtaXNzZXMKK2V2ZW50OjBYMDMzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQ19JTlZfTDJfR1JQMyA6IChHcm91cCAzIHBtX2Jhc2ljKSBMMSBEIGNhY2hlIGVudHJpZXMgaW52YWxpZGF0ZWQgZnJvbSBMMgorZXZlbnQ6MFgwMzQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lOU1RfRElTUF9HUlAzIDogKEdyb3VwIDMgcG1fYmFzaWMpIEluc3RydWN0aW9ucyBkaXNwYXRjaGVkCitldmVudDowWDAzNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAzIDogKEdyb3VwIDMgcG1fYmFzaWMpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMDM2IGNvdW50ZXJzOjYgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9TVF9SRUZfTDFfR1JQMyA6IChHcm91cCAzIHBtX2Jhc2ljKSBMMSBEIGNhY2hlIHN0b3JlIHJlZmVyZW5jZXMKK2V2ZW50OjBYMDM3IGNvdW50ZXJzOjcgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MRF9SRUZfTDFfR1JQMyA6IChHcm91cCAzIHBtX2Jhc2ljKSBMMSBEIGNhY2hlIGxvYWQgcmVmZXJlbmNlcworCisjR3JvdXAgNCBwbV9pZnUsIElGVSBldmVudHMKK2V2ZW50OjBYMDQwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDQgOiAoR3JvdXAgNCBwbV9pZnUpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMDQxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9CSVFfSURVX0ZVTExfQ1lDX0dSUDQgOiAoR3JvdXAgNCBwbV9pZnUpIEN5Y2xlcyBCSVEgb3IgSURVIGZ1bGwKK2V2ZW50OjBYMDQyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9CUl9JU1NVRURfR1JQNCA6IChHcm91cCA0IHBtX2lmdSkgQnJhbmNoZXMgaXNzdWVkCitldmVudDowWDA0MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fQlJfTVBSRURfQ1JfR1JQNCA6IChHcm91cCA0IHBtX2lmdSkgQnJhbmNoIG1pc3ByZWRpY3Rpb25zIGR1ZSBDUiBiaXQgc2V0dGluZworZXZlbnQ6MFgwNDQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lOU1RfRkVUQ0hfQ1lDX0dSUDQgOiAoR3JvdXAgNCBwbV9pZnUpIEN5Y2xlcyBhdCBsZWFzdCAxIGluc3RydWN0aW9uIGZldGNoZWQKK2V2ZW50OjBYMDQ1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDQgOiAoR3JvdXAgNCBwbV9pZnUpIFByb2Nlc3NvciBjeWNsZXMKK2V2ZW50OjBYMDQ2IGNvdW50ZXJzOjYgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9CUl9NUFJFRF9UQV9HUlA0IDogKEdyb3VwIDQgcG1faWZ1KSBCcmFuY2ggbWlzcHJlZGljdGlvbnMgZHVlIHRvIHRhcmdldCBhZGRyZXNzCitldmVudDowWDA0NyBjb3VudGVyczo3IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDFfV1JJVEVfQ1lDX0dSUDQgOiAoR3JvdXAgNCBwbV9pZnUpIEN5Y2xlcyB3cml0aW5nIHRvIGluc3RydWN0aW9uIEwxCisKKyNHcm91cCA1IHBtX2lzdSwgSVNVIFF1ZXVlIGZ1bGwgZXZlbnRzCitldmVudDowWDA1MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBSX01BUF9GVUxMX0NZQ19HUlA1IDogKEdyb3VwIDUgcG1faXN1KSBDeWNsZXMgRlBSIG1hcHBlciBmdWxsCitldmVudDowWDA1MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fQlJRX0ZVTExfQ1lDX0dSUDUgOiAoR3JvdXAgNSBwbV9pc3UpIEN5Y2xlcyBicmFuY2ggcXVldWUgZnVsbAorZXZlbnQ6MFgwNTIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0dQUl9NQVBfRlVMTF9DWUNfR1JQNSA6IChHcm91cCA1IHBtX2lzdSkgQ3ljbGVzIEdQUiBtYXBwZXIgZnVsbAorZXZlbnQ6MFgwNTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQNSA6IChHcm91cCA1IHBtX2lzdSkgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgwNTQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVV9GVUxMX0NZQ19HUlA1IDogKEdyb3VwIDUgcG1faXN1KSBDeWNsZXMgRlBVIGlzc3VlIHF1ZXVlIGZ1bGwKK2V2ZW50OjBYMDU1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9HQ1RfRlVMTF9DWUNfR1JQNSA6IChHcm91cCA1IHBtX2lzdSkgQ3ljbGVzIEdDVCBmdWxsCitldmVudDowWDA1NiBjb3VudGVyczo2IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlA1IDogKEdyb3VwIDUgcG1faXN1KSBQcm9jZXNzb3IgY3ljbGVzCitldmVudDowWDA1NyBjb3VudGVyczo3IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlhMU19GVUxMX0NZQ19HUlA1IDogKEdyb3VwIDUgcG1faXN1KSBDeWNsZXMgRlhMUyBxdWV1ZSBpcyBmdWxsCisKKyNHcm91cCA2IHBtX2xzb3VyY2UsIEluZm9ybWF0aW9uIG9uIGRhdGEgc291cmNlCitldmVudDowWDA2MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fREFUQV9GUk9NX0wzX0dSUDYgOiAoR3JvdXAgNiBwbV9sc291cmNlKSBEYXRhIGxvYWRlZCBmcm9tIEwzCitldmVudDowWDA2MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fREFUQV9GUk9NX01FTV9HUlA2IDogKEdyb3VwIDYgcG1fbHNvdXJjZSkgRGF0YSBsb2FkZWQgZnJvbSBtZW1vcnkKK2V2ZW50OjBYMDYyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQVRBX0ZST01fTDM1X0dSUDYgOiAoR3JvdXAgNiBwbV9sc291cmNlKSBEYXRhIGxvYWRlZCBmcm9tIEwzLjUKK2V2ZW50OjBYMDYzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQVRBX0ZST01fTDJfR1JQNiA6IChHcm91cCA2IHBtX2xzb3VyY2UpIERhdGEgbG9hZGVkIGZyb20gTDIKK2V2ZW50OjBYMDY0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQVRBX0ZST01fTDI1X1NIUl9HUlA2IDogKEdyb3VwIDYgcG1fbHNvdXJjZSkgRGF0YSBsb2FkZWQgZnJvbSBMMi41IHNoYXJlZAorZXZlbnQ6MFgwNjUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RBVEFfRlJPTV9MMjc1X1NIUl9HUlA2IDogKEdyb3VwIDYgcG1fbHNvdXJjZSkgRGF0YSBsb2FkZWQgZnJvbSBMMi43NSBzaGFyZWQKK2V2ZW50OjBYMDY2IGNvdW50ZXJzOjYgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQVRBX0ZST01fTDI3NV9NT0RfR1JQNiA6IChHcm91cCA2IHBtX2xzb3VyY2UpIERhdGEgbG9hZGVkIGZyb20gTDIuNzUgbW9kaWZpZWQKK2V2ZW50OjBYMDY3IGNvdW50ZXJzOjcgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQVRBX0ZST01fTDI1X01PRF9HUlA2IDogKEdyb3VwIDYgcG1fbHNvdXJjZSkgRGF0YSBsb2FkZWQgZnJvbSBMMi41IG1vZGlmaWVkCisKKyNHcm91cCA3IHBtX2lzb3VyY2UsIEluc3RydWN0aW9uIFNvdXJjZSBpbmZvcm1hdGlvbgorZXZlbnQ6MFgwNzAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lOU1RfRlJPTV9NRU1fR1JQNyA6IChHcm91cCA3IHBtX2lzb3VyY2UpIEluc3RydWN0aW9uIGZldGNoZWQgZnJvbSBtZW1vcnkKK2V2ZW50OjBYMDcxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JTlNUX0ZST01fTDI1X0wyNzVfR1JQNyA6IChHcm91cCA3IHBtX2lzb3VyY2UpIEluc3RydWN0aW9uIGZldGNoZWQgZnJvbSBMMi41L0wyLjc1CitldmVudDowWDA3MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU5TVF9GUk9NX0wyX0dSUDcgOiAoR3JvdXAgNyBwbV9pc291cmNlKSBJbnN0cnVjdGlvbnMgZmV0Y2hlZCBmcm9tIEwyCitldmVudDowWDA3MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU5TVF9GUk9NX0wzNV9HUlA3IDogKEdyb3VwIDcgcG1faXNvdXJjZSkgSW5zdHJ1Y3Rpb25zIGZldGNoZWQgZnJvbSBMMy41CitldmVudDowWDA3NCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU5TVF9GUk9NX0wzX0dSUDcgOiAoR3JvdXAgNyBwbV9pc291cmNlKSBJbnN0cnVjdGlvbiBmZXRjaGVkIGZyb20gTDMKK2V2ZW50OjBYMDc1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JTlNUX0ZST01fTDFfR1JQNyA6IChHcm91cCA3IHBtX2lzb3VyY2UpIEluc3RydWN0aW9uIGZldGNoZWQgZnJvbSBMMQorZXZlbnQ6MFgwNzYgY291bnRlcnM6NiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lOU1RfRlJPTV9QUkVGX0dSUDcgOiAoR3JvdXAgNyBwbV9pc291cmNlKSBJbnN0cnVjdGlvbnMgZmV0Y2hlZCBmcm9tIHByZWZldGNoCitldmVudDowWDA3NyBjb3VudGVyczo3IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fMElOU1RfRkVUQ0hfR1JQNyA6IChHcm91cCA3IHBtX2lzb3VyY2UpIE5vIGluc3RydWN0aW9ucyBmZXRjaGVkCisKKyNHcm91cCA4IHBtX2xzdSwgSW5mb3JtYXRpb24gb24gdGhlIExvYWQgU3RvcmUgVW5pdAorZXZlbnQ6MFgwODAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9GTFVTSF9VTERfR1JQOCA6IChHcm91cCA4IHBtX2xzdSkgTFJRIHVuYWxpZ25lZCBsb2FkIGZsdXNoZXMKK2V2ZW50OjBYMDgxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1VfRkxVU0hfVVNUX0dSUDggOiAoR3JvdXAgOCBwbV9sc3UpIFNSUSB1bmFsaWduZWQgc3RvcmUgZmx1c2hlcworZXZlbnQ6MFgwODIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQOCA6IChHcm91cCA4IHBtX2xzdSkgUHJvY2Vzc29yIGN5Y2xlcworZXZlbnQ6MFgwODMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQOCA6IChHcm91cCA4IHBtX2xzdSkgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgwODQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9GTFVTSF9TUlFfR1JQOCA6IChHcm91cCA4IHBtX2xzdSkgU1JRIGZsdXNoZXMKK2V2ZW50OjBYMDg1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1VfRkxVU0hfTFJRX0dSUDggOiAoR3JvdXAgOCBwbV9sc3UpIExSUSBmbHVzaGVzCitldmVudDowWDA4NiBjb3VudGVyczo2IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fU1RfUkVGX0wxX0dSUDggOiAoR3JvdXAgOCBwbV9sc3UpIEwxIEQgY2FjaGUgc3RvcmUgcmVmZXJlbmNlcworZXZlbnQ6MFgwODcgY291bnRlcnM6NyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xEX1JFRl9MMV9HUlA4IDogKEdyb3VwIDggcG1fbHN1KSBMMSBEIGNhY2hlIGxvYWQgcmVmZXJlbmNlcworCisjR3JvdXAgOSBwbV94bGF0ZTEsIFRyYW5zbGF0aW9uIEV2ZW50cworZXZlbnQ6MFgwOTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lUTEJfTUlTU19HUlA5IDogKEdyb3VwIDkgcG1feGxhdGUxKSBJbnN0cnVjdGlvbiBUTEIgbWlzc2VzCitldmVudDowWDA5MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRFRMQl9NSVNTX0dSUDkgOiAoR3JvdXAgOSBwbV94bGF0ZTEpIERhdGEgVExCIG1pc3NlcworZXZlbnQ6MFgwOTIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RBVEFfVEFCTEVXQUxLX0NZQ19HUlA5IDogKEdyb3VwIDkgcG1feGxhdGUxKSBDeWNsZXMgZG9pbmcgZGF0YSB0YWJsZXdhbGtzCitldmVudDowWDA5MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVX0xNUV9TMF9WQUxJRF9HUlA5IDogKEdyb3VwIDkgcG1feGxhdGUxKSBMTVEgc2xvdCAwIHZhbGlkCitldmVudDowWDA5NCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSUVSQVRfWExBVEVfV1JfR1JQOSA6IChHcm91cCA5IHBtX3hsYXRlMSkgVHJhbnNsYXRpb24gd3JpdHRlbiB0byBpZXJhdAorZXZlbnQ6MFgwOTUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9ERVJBVF9NSVNTX0dSUDkgOiAoR3JvdXAgOSBwbV94bGF0ZTEpIERFUkFUIG1pc3NlcworZXZlbnQ6MFgwOTYgY291bnRlcnM6NiB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQOSA6IChHcm91cCA5IHBtX3hsYXRlMSkgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgwOTcgY291bnRlcnM6NyB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQOSA6IChHcm91cCA5IHBtX3hsYXRlMSkgUHJvY2Vzc29yIGN5Y2xlcworCisjR3JvdXAgMTAgcG1feGxhdGUyLCBUcmFuc2xhdGlvbiBFdmVudHMKK2V2ZW50OjBYMEEwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JU0xCX01JU1NfR1JQMTAgOiAoR3JvdXAgMTAgcG1feGxhdGUyKSBJbnN0cnVjdGlvbiBTTEIgbWlzc2VzCitldmVudDowWDBBMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRFNMQl9NSVNTX0dSUDEwIDogKEdyb3VwIDEwIHBtX3hsYXRlMikgRGF0YSBTTEIgbWlzc2VzCitldmVudDowWDBBMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVX1NSUV9TWU5DX0NZQ19HUlAxMCA6IChHcm91cCAxMCBwbV94bGF0ZTIpIFNSUSBzeW5jIGR1cmF0aW9uCitldmVudDowWDBBMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVX0xNUV9TMF9BTExPQ19HUlAxMCA6IChHcm91cCAxMCBwbV94bGF0ZTIpIExNUSBzbG90IDAgYWxsb2NhdGVkCitldmVudDowWDBBNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSUVSQVRfWExBVEVfV1JfR1JQMTAgOiAoR3JvdXAgMTAgcG1feGxhdGUyKSBUcmFuc2xhdGlvbiB3cml0dGVuIHRvIGllcmF0CitldmVudDowWDBBNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVX0RFUkFUX01JU1NfR1JQMTAgOiAoR3JvdXAgMTAgcG1feGxhdGUyKSBERVJBVCBtaXNzZXMKK2V2ZW50OjBYMEE2IGNvdW50ZXJzOjYgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDEwIDogKEdyb3VwIDEwIHBtX3hsYXRlMikgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgwQTcgY291bnRlcnM6NyB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQMTAgOiAoR3JvdXAgMTAgcG1feGxhdGUyKSBQcm9jZXNzb3IgY3ljbGVzCisKKyNHcm91cCAxMSBwbV9ncHMxLCBMMyBFdmVudHMKK2V2ZW50OjBYMEIwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MM0IwX0RJUl9SRUZfR1JQMTEgOiAoR3JvdXAgMTEgcG1fZ3BzMSkgTDMgYmFuayAwIGRpcmVjdG9yeSByZWZlcmVuY2VzCitldmVudDowWDBCMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDNCMF9ESVJfTUlTX0dSUDExIDogKEdyb3VwIDExIHBtX2dwczEpIEwzIGJhbmsgMCBkaXJlY3RvcnkgbWlzc2VzCitldmVudDowWDBCMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRkFCX0NNRF9JU1NVRURfR1JQMTEgOiAoR3JvdXAgMTEgcG1fZ3BzMSkgRmFicmljIGNvbW1hbmQgaXNzdWVkCitldmVudDowWDBCMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRkFCX0NNRF9SRVRSSUVEX0dSUDExIDogKEdyb3VwIDExIHBtX2dwczEpIEZhYnJpYyBjb21tYW5kIHJldHJpZWQKK2V2ZW50OjBYMEI0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MM0IxX0RJUl9SRUZfR1JQMTEgOiAoR3JvdXAgMTEgcG1fZ3BzMSkgTDMgYmFuayAxIGRpcmVjdG9yeSByZWZlcmVuY2VzCitldmVudDowWDBCNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDNCMV9ESVJfTUlTX0dSUDExIDogKEdyb3VwIDExIHBtX2dwczEpIEwzIGJhbmsgMSBkaXJlY3RvcnkgbWlzc2VzCitldmVudDowWDBCNiBjb3VudGVyczo2IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAxMSA6IChHcm91cCAxMSBwbV9ncHMxKSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDBCNyBjb3VudGVyczo3IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlAxMSA6IChHcm91cCAxMSBwbV9ncHMxKSBQcm9jZXNzb3IgY3ljbGVzCisKKyNHcm91cCAxMiBwbV9sMmEsIEwyIFNsaWNlQSBldmVudHMKK2V2ZW50OjBYMEMwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMlNBX01PRF9UQUdfR1JQMTIgOiAoR3JvdXAgMTIgcG1fbDJhKSBMMiBzbGljZSBBIHRyYW5zaXRpb24gZnJvbSBtb2RpZmllZCB0byB0YWdnZWQKK2V2ZW50OjBYMEMxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMlNBX1NIUl9JTlZfR1JQMTIgOiAoR3JvdXAgMTIgcG1fbDJhKSBMMiBzbGljZSBBIHRyYW5zaXRpb24gZnJvbSBzaGFyZWQgdG8gaW52YWxpZAorZXZlbnQ6MFgwQzIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wyU0FfU1RfUkVRX0dSUDEyIDogKEdyb3VwIDEyIHBtX2wyYSkgTDIgc2xpY2UgQSBzdG9yZSByZXF1ZXN0cworZXZlbnQ6MFgwQzMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wyU0FfU1RfSElUX0dSUDEyIDogKEdyb3VwIDEyIHBtX2wyYSkgTDIgc2xpY2UgQSBzdG9yZSBoaXRzCitldmVudDowWDBDNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDJTQV9TSFJfTU9EX0dSUDEyIDogKEdyb3VwIDEyIHBtX2wyYSkgTDIgc2xpY2UgQSB0cmFuc2l0aW9uIGZyb20gc2hhcmVkIHRvIG1vZGlmaWVkCitldmVudDowWDBDNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDJTQV9NT0RfSU5WX0dSUDEyIDogKEdyb3VwIDEyIHBtX2wyYSkgTDIgc2xpY2UgQSB0cmFuc2l0aW9uIGZyb20gbW9kaWZpZWQgdG8gaW52YWxpZAorZXZlbnQ6MFgwQzYgY291bnRlcnM6NiB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMTIgOiAoR3JvdXAgMTIgcG1fbDJhKSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDBDNyBjb3VudGVyczo3IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlAxMiA6IChHcm91cCAxMiBwbV9sMmEpIFByb2Nlc3NvciBjeWNsZXMKKworI0dyb3VwIDEzIHBtX2wyYiwgTDIgU2xpY2VCIGV2ZW50cworZXZlbnQ6MFgwRDAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wyU0JfTU9EX1RBR19HUlAxMyA6IChHcm91cCAxMyBwbV9sMmIpIEwyIHNsaWNlIEIgdHJhbnNpdGlvbiBmcm9tIG1vZGlmaWVkIHRvIHRhZ2dlZAorZXZlbnQ6MFgwRDEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wyU0JfU0hSX0lOVl9HUlAxMyA6IChHcm91cCAxMyBwbV9sMmIpIEwyIHNsaWNlIEIgdHJhbnNpdGlvbiBmcm9tIHNoYXJlZCB0byBpbnZhbGlkCitldmVudDowWDBEMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDJTQl9TVF9SRVFfR1JQMTMgOiAoR3JvdXAgMTMgcG1fbDJiKSBMMiBzbGljZSBCIHN0b3JlIHJlcXVlc3RzCitldmVudDowWDBEMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDJTQl9TVF9ISVRfR1JQMTMgOiAoR3JvdXAgMTMgcG1fbDJiKSBMMiBzbGljZSBCIHN0b3JlIGhpdHMKK2V2ZW50OjBYMEQ0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMlNCX1NIUl9NT0RfR1JQMTMgOiAoR3JvdXAgMTMgcG1fbDJiKSBMMiBzbGljZSBCIHRyYW5zaXRpb24gZnJvbSBzaGFyZWQgdG8gbW9kaWZpZWQKK2V2ZW50OjBYMEQ1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMlNCX01PRF9JTlZfR1JQMTMgOiAoR3JvdXAgMTMgcG1fbDJiKSBMMiBzbGljZSBCIHRyYW5zaXRpb24gZnJvbSBtb2RpZmllZCB0byBpbnZhbGlkCitldmVudDowWDBENiBjb3VudGVyczo2IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAxMyA6IChHcm91cCAxMyBwbV9sMmIpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMEQ3IGNvdW50ZXJzOjcgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDEzIDogKEdyb3VwIDEzIHBtX2wyYikgUHJvY2Vzc29yIGN5Y2xlcworCisjR3JvdXAgMTQgcG1fbDJjLCBMMiBTbGljZUMgZXZlbnRzCitldmVudDowWDBFMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDJTQ19NT0RfVEFHX0dSUDE0IDogKEdyb3VwIDE0IHBtX2wyYykgTDIgc2xpY2UgQyB0cmFuc2l0aW9uIGZyb20gbW9kaWZpZWQgdG8gdGFnZ2VkCitldmVudDowWDBFMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDJTQ19TSFJfSU5WX0dSUDE0IDogKEdyb3VwIDE0IHBtX2wyYykgTDIgc2xpY2UgQyB0cmFuc2l0aW9uIGZyb20gc2hhcmVkIHRvIGludmFsaWQKK2V2ZW50OjBYMEUyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMlNDX1NUX1JFUV9HUlAxNCA6IChHcm91cCAxNCBwbV9sMmMpIEwyIHNsaWNlIEMgc3RvcmUgcmVxdWVzdHMKK2V2ZW50OjBYMEUzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMlNDX1NUX0hJVF9HUlAxNCA6IChHcm91cCAxNCBwbV9sMmMpIEwyIHNsaWNlIEMgc3RvcmUgaGl0cworZXZlbnQ6MFgwRTQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wyU0NfU0hSX01PRF9HUlAxNCA6IChHcm91cCAxNCBwbV9sMmMpIEwyIHNsaWNlIEMgdHJhbnNpdGlvbiBmcm9tIHNoYXJlZCB0byBtb2RpZmllZAorZXZlbnQ6MFgwRTUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wyU0NfTU9EX0lOVl9HUlAxNCA6IChHcm91cCAxNCBwbV9sMmMpIEwyIHNsaWNlIEMgdHJhbnNpdGlvbiBmcm9tIG1vZGlmaWVkIHRvIGludmFsaWQKK2V2ZW50OjBYMEU2IGNvdW50ZXJzOjYgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDE0IDogKEdyb3VwIDE0IHBtX2wyYykgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgwRTcgY291bnRlcnM6NyB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQMTQgOiAoR3JvdXAgMTQgcG1fbDJjKSBQcm9jZXNzb3IgY3ljbGVzCisKKyNHcm91cCAxNSBwbV9mcHUxLCBGbG9hdGluZyBQb2ludCBldmVudHMKK2V2ZW50OjBYMEYwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFVfRkRJVl9HUlAxNSA6IChHcm91cCAxNSBwbV9mcHUxKSBGUFUgZXhlY3V0ZWQgRkRJViBpbnN0cnVjdGlvbgorZXZlbnQ6MFgwRjEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVV9GTUFfR1JQMTUgOiAoR3JvdXAgMTUgcG1fZnB1MSkgRlBVIGV4ZWN1dGVkIG11bHRpcGx5LWFkZCBpbnN0cnVjdGlvbgorZXZlbnQ6MFgwRjIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVV9GRVNUX0dSUDE1IDogKEdyb3VwIDE1IHBtX2ZwdTEpIEZQVSBleGVjdXRlZCBGRVNUIGluc3RydWN0aW9uCitldmVudDowWDBGMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVX0ZJTl9HUlAxNSA6IChHcm91cCAxNSBwbV9mcHUxKSBGUFUgcHJvZHVjZWQgYSByZXN1bHQKK2V2ZW50OjBYMEY0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDE1IDogKEdyb3VwIDE1IHBtX2ZwdTEpIFByb2Nlc3NvciBjeWNsZXMKK2V2ZW50OjBYMEY1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFVfRlNRUlRfR1JQMTUgOiAoR3JvdXAgMTUgcG1fZnB1MSkgRlBVIGV4ZWN1dGVkIEZTUVJUIGluc3RydWN0aW9uCitldmVudDowWDBGNiBjb3VudGVyczo2IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAxNSA6IChHcm91cCAxNSBwbV9mcHUxKSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDBGNyBjb3VudGVyczo3IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVX0ZNT1ZfRkVTVF9HUlAxNSA6IChHcm91cCAxNSBwbV9mcHUxKSBGUFUgZXhlY3V0aW5nIEZNT1Ygb3IgRkVTVCBpbnN0cnVjdGlvbnMKKworI0dyb3VwIDE2IHBtX2ZwdTIsIEZsb2F0aW5nIFBvaW50IGV2ZW50cworZXZlbnQ6MFgxMDAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVV9ERU5PUk1fR1JQMTYgOiAoR3JvdXAgMTYgcG1fZnB1MikgRlBVIHJlY2VpdmVkIGRlbm9ybWFsaXplZCBkYXRhCitldmVudDowWDEwMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVX1NUQUxMM19HUlAxNiA6IChHcm91cCAxNiBwbV9mcHUyKSBGUFUgc3RhbGxlZCBpbiBwaXBlMworZXZlbnQ6MFgxMDIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQMTYgOiAoR3JvdXAgMTYgcG1fZnB1MikgUHJvY2Vzc29yIGN5Y2xlcworZXZlbnQ6MFgxMDMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMTYgOiAoR3JvdXAgMTYgcG1fZnB1MikgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgxMDQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVV9BTExfR1JQMTYgOiAoR3JvdXAgMTYgcG1fZnB1MikgRlBVIGV4ZWN1dGVkIGFkZCwgbXVsdCwgc3ViLCBjbXAgb3Igc2VsIGluc3RydWN0aW9uCitldmVudDowWDEwNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVX1NURl9HUlAxNiA6IChHcm91cCAxNiBwbV9mcHUyKSBGUFUgZXhlY3V0ZWQgc3RvcmUgaW5zdHJ1Y3Rpb24KK2V2ZW50OjBYMTA2IGNvdW50ZXJzOjYgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFVfRlJTUF9GQ09OVl9HUlAxNiA6IChHcm91cCAxNiBwbV9mcHUyKSBGUFUgZXhlY3V0ZWQgRlJTUCBvciBGQ09OViBpbnN0cnVjdGlvbnMKK2V2ZW50OjBYMTA3IGNvdW50ZXJzOjcgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1VfTERGX0dSUDE2IDogKEdyb3VwIDE2IHBtX2ZwdTIpIExTVSBleGVjdXRlZCBGbG9hdGluZyBQb2ludCBsb2FkIGluc3RydWN0aW9uCisKKyNHcm91cCAxNyBwbV9pZHUxLCBJbnN0cnVjdGlvbiBEZWNvZGUgVW5pdCBldmVudHMKK2V2ZW50OjBYMTEwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDE3IDogKEdyb3VwIDE3IHBtX2lkdTEpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMTExIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDE3IDogKEdyb3VwIDE3IHBtX2lkdTEpIFByb2Nlc3NvciBjeWNsZXMKK2V2ZW50OjBYMTEyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV8xSU5TVF9DTEJfQ1lDX0dSUDE3IDogKEdyb3VwIDE3IHBtX2lkdTEpIEN5Y2xlcyAxIGluc3RydWN0aW9uIGluIENMQgorZXZlbnQ6MFgxMTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNXzJJTlNUX0NMQl9DWUNfR1JQMTcgOiAoR3JvdXAgMTcgcG1faWR1MSkgQ3ljbGVzIDIgaW5zdHJ1Y3Rpb25zIGluIENMQgorZXZlbnQ6MFgxMTQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNXzFQTFVTX1BQQ19DTVBMX0dSUDE3IDogKEdyb3VwIDE3IHBtX2lkdTEpIE9uZSBvciBtb3JlIFBQQyBpbnN0cnVjdGlvbiBjb21wbGV0ZWQKK2V2ZW50OjBYMTE1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDE3IDogKEdyb3VwIDE3IHBtX2lkdTEpIFByb2Nlc3NvciBjeWNsZXMKK2V2ZW50OjBYMTE2IGNvdW50ZXJzOjYgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV8zSU5TVF9DTEJfQ1lDX0dSUDE3IDogKEdyb3VwIDE3IHBtX2lkdTEpIEN5Y2xlcyAzIGluc3RydWN0aW9ucyBpbiBDTEIKK2V2ZW50OjBYMTE3IGNvdW50ZXJzOjcgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV80SU5TVF9DTEJfQ1lDX0dSUDE3IDogKEdyb3VwIDE3IHBtX2lkdTEpIEN5Y2xlcyA0IGluc3RydWN0aW9ucyBpbiBDTEIKKworI0dyb3VwIDE4IHBtX2lkdTIsIEluc3RydWN0aW9uIERlY29kZSBVbml0IGV2ZW50cworZXZlbnQ6MFgxMjAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMTggOiAoR3JvdXAgMTggcG1faWR1MikgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgxMjEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQMTggOiAoR3JvdXAgMTggcG1faWR1MikgUHJvY2Vzc29yIGN5Y2xlcworZXZlbnQ6MFgxMjIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNXzVJTlNUX0NMQl9DWUNfR1JQMTggOiAoR3JvdXAgMTggcG1faWR1MikgQ3ljbGVzIDUgaW5zdHJ1Y3Rpb25zIGluIENMQgorZXZlbnQ6MFgxMjMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNXzZJTlNUX0NMQl9DWUNfR1JQMTggOiAoR3JvdXAgMTggcG1faWR1MikgQ3ljbGVzIDYgaW5zdHJ1Y3Rpb25zIGluIENMQgorZXZlbnQ6MFgxMjQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0dSUF9ESVNQX1NVQ0NFU1NfR1JQMTggOiAoR3JvdXAgMTggcG1faWR1MikgR3JvdXAgZGlzcGF0Y2ggc3VjY2VzcworZXZlbnQ6MFgxMjUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQMTggOiAoR3JvdXAgMTggcG1faWR1MikgUHJvY2Vzc29yIGN5Y2xlcworZXZlbnQ6MFgxMjYgY291bnRlcnM6NiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNXzdJTlNUX0NMQl9DWUNfR1JQMTggOiAoR3JvdXAgMTggcG1faWR1MikgQ3ljbGVzIDcgaW5zdHJ1Y3Rpb25zIGluIENMQgorZXZlbnQ6MFgxMjcgY291bnRlcnM6NyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNXzhJTlNUX0NMQl9DWUNfR1JQMTggOiAoR3JvdXAgMTggcG1faWR1MikgQ3ljbGVzIDggaW5zdHJ1Y3Rpb25zIGluIENMQgorCisjR3JvdXAgMTkgcG1faXN1X3JlbmFtZSwgSVNVIFJlbmFtZSBQb29sIEV2ZW50cworZXZlbnQ6MFgxMzAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1hFUl9NQVBfRlVMTF9DWUNfR1JQMTkgOiAoR3JvdXAgMTkgcG1faXN1X3JlbmFtZSkgQ3ljbGVzIFhFUiBtYXBwZXIgZnVsbAorZXZlbnQ6MFgxMzEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0NSX01BUF9GVUxMX0NZQ19HUlAxOSA6IChHcm91cCAxOSBwbV9pc3VfcmVuYW1lKSBDeWNsZXMgQ1IgbG9naWNhbCBvcGVyYXRpb24gbWFwcGVyIGZ1bGwKK2V2ZW50OjBYMTMyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9DUlFfRlVMTF9DWUNfR1JQMTkgOiAoR3JvdXAgMTkgcG1faXN1X3JlbmFtZSkgQ3ljbGVzIENSIGlzc3VlIHF1ZXVlIGZ1bGwKK2V2ZW50OjBYMTMzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9HUlBfRElTUF9CTEtfU0JfQ1lDX0dSUDE5IDogKEdyb3VwIDE5IHBtX2lzdV9yZW5hbWUpIEN5Y2xlcyBncm91cCBkaXNwYXRjaCBibG9ja2VkIGJ5IHNjb3JlYm9hcmQKK2V2ZW50OjBYMTM0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MUl9DVFJfTUFQX0ZVTExfQ1lDX0dSUDE5IDogKEdyb3VwIDE5IHBtX2lzdV9yZW5hbWUpIEN5Y2xlcyBMUi9DVFIgbWFwcGVyIGZ1bGwKK2V2ZW50OjBYMTM1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JTlNUX0RJU1BfR1JQMTkgOiAoR3JvdXAgMTkgcG1faXN1X3JlbmFtZSkgSW5zdHJ1Y3Rpb25zIGRpc3BhdGNoZWQKK2V2ZW50OjBYMTM2IGNvdW50ZXJzOjYgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDE5IDogKEdyb3VwIDE5IHBtX2lzdV9yZW5hbWUpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMTM3IGNvdW50ZXJzOjcgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDE5IDogKEdyb3VwIDE5IHBtX2lzdV9yZW5hbWUpIFByb2Nlc3NvciBjeWNsZXMKKworI0dyb3VwIDIwIHBtX2lzdV9xdWV1ZXMxLCBJU1UgUXVldWUgRnVsbCBFdmVudHMKK2V2ZW50OjBYMTQwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFUwX0ZVTExfQ1lDX0dSUDIwIDogKEdyb3VwIDIwIHBtX2lzdV9xdWV1ZXMxKSBDeWNsZXMgRlBVMCBpc3N1ZSBxdWV1ZSBmdWxsCitldmVudDowWDE0MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVMV9GVUxMX0NZQ19HUlAyMCA6IChHcm91cCAyMCBwbV9pc3VfcXVldWVzMSkgQ3ljbGVzIEZQVTEgaXNzdWUgcXVldWUgZnVsbAorZXZlbnQ6MFgxNDIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZYTFMwX0ZVTExfQ1lDX0dSUDIwIDogKEdyb3VwIDIwIHBtX2lzdV9xdWV1ZXMxKSBDeWNsZXMgRlhVMC9MUzAgcXVldWUgZnVsbAorZXZlbnQ6MFgxNDMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZYTFMxX0ZVTExfQ1lDX0dSUDIwIDogKEdyb3VwIDIwIHBtX2lzdV9xdWV1ZXMxKSBDeWNsZXMgRlhVMS9MUzEgcXVldWUgZnVsbAorZXZlbnQ6MFgxNDQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQMjAgOiAoR3JvdXAgMjAgcG1faXN1X3F1ZXVlczEpIFByb2Nlc3NvciBjeWNsZXMKK2V2ZW50OjBYMTQ1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDIwIDogKEdyb3VwIDIwIHBtX2lzdV9xdWV1ZXMxKSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDE0NiBjb3VudGVyczo2IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVX0xSUV9GVUxMX0NZQ19HUlAyMCA6IChHcm91cCAyMCBwbV9pc3VfcXVldWVzMSkgQ3ljbGVzIExSUSBmdWxsCitldmVudDowWDE0NyBjb3VudGVyczo3IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVX1NSUV9GVUxMX0NZQ19HUlAyMCA6IChHcm91cCAyMCBwbV9pc3VfcXVldWVzMSkgQ3ljbGVzIFNSUSBmdWxsCisKKyNHcm91cCAyMSBwbV9pc3VfZmxvdywgSVNVIEluc3RydWN0aW9uIEZsb3cgRXZlbnRzCitldmVudDowWDE1MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU5TVF9ESVNQX0dSUDIxIDogKEdyb3VwIDIxIHBtX2lzdV9mbG93KSBJbnN0cnVjdGlvbnMgZGlzcGF0Y2hlZAorZXZlbnQ6MFgxNTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQMjEgOiAoR3JvdXAgMjEgcG1faXN1X2Zsb3cpIFByb2Nlc3NvciBjeWNsZXMKK2V2ZW50OjBYMTUyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GWFUwX0ZJTl9HUlAyMSA6IChHcm91cCAyMSBwbV9pc3VfZmxvdykgRlhVMCBwcm9kdWNlZCBhIHJlc3VsdAorZXZlbnQ6MFgxNTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZYVTFfRklOX0dSUDIxIDogKEdyb3VwIDIxIHBtX2lzdV9mbG93KSBGWFUxIHByb2R1Y2VkIGEgcmVzdWx0CitldmVudDowWDE1NCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fR1JQX0RJU1BfVkFMSURfR1JQMjEgOiAoR3JvdXAgMjEgcG1faXN1X2Zsb3cpIEdyb3VwIGRpc3BhdGNoIHZhbGlkCitldmVudDowWDE1NSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fR1JQX0RJU1BfUkVKRUNUX0dSUDIxIDogKEdyb3VwIDIxIHBtX2lzdV9mbG93KSBHcm91cCBkaXNwYXRjaCByZWplY3RlZAorZXZlbnQ6MFgxNTYgY291bnRlcnM6NiB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMjEgOiAoR3JvdXAgMjEgcG1faXN1X2Zsb3cpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMTU3IGNvdW50ZXJzOjcgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDIxIDogKEdyb3VwIDIxIHBtX2lzdV9mbG93KSBQcm9jZXNzb3IgY3ljbGVzCisKKyNHcm91cCAyMiBwbV9pc3Vfd29yaywgSVNVIEluZGljYXRvcnMgb2YgV29yayBCbG9ja2FnZQorZXZlbnQ6MFgxNjAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0dDVF9FTVBUWV9DWUNfR1JQMjIgOiAoR3JvdXAgMjIgcG1faXN1X3dvcmspIEN5Y2xlcyBHQ1QgZW1wdHkKK2V2ZW50OjBYMTYxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9XT1JLX0hFTERfR1JQMjIgOiAoR3JvdXAgMjIgcG1faXN1X3dvcmspIFdvcmsgaGVsZAorZXZlbnQ6MFgxNjIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1NUT1BfQ09NUExFVElPTl9HUlAyMiA6IChHcm91cCAyMiBwbV9pc3Vfd29yaykgQ29tcGxldGlvbiBzdG9wcGVkCitldmVudDowWDE2MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRUVfT0ZGX0VYVF9JTlRfR1JQMjIgOiAoR3JvdXAgMjIgcG1faXN1X3dvcmspIEN5Y2xlcyBNU1IoRUUpIGJpdCBvZmYgYW5kIGV4dGVybmFsIGludGVycnVwdCBwZW5kaW5nCitldmVudDowWDE2NCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlAyMiA6IChHcm91cCAyMiBwbV9pc3Vfd29yaykgUHJvY2Vzc29yIGN5Y2xlcworZXZlbnQ6MFgxNjUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMjIgOiAoR3JvdXAgMjIgcG1faXN1X3dvcmspIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMTY2IGNvdW50ZXJzOjYgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9FRV9PRkZfR1JQMjIgOiAoR3JvdXAgMjIgcG1faXN1X3dvcmspIEN5Y2xlcyBNU1IoRUUpIGJpdCBvZmYKK2V2ZW50OjBYMTY3IGNvdW50ZXJzOjcgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9FWFRfSU5UX0dSUDIyIDogKEdyb3VwIDIyIHBtX2lzdV93b3JrKSBFeHRlcm5hbCBpbnRlcnJ1cHRzCisKKyNHcm91cCAyMyBwbV9zZXJpYWxpemUsIExTVSBTZXJpYWxpemluZyBFdmVudHMKK2V2ZW50OjBYMTcwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9TTk9PUF9UTEJJRV9HUlAyMyA6IChHcm91cCAyMyBwbV9zZXJpYWxpemUpIFNub29wIFRMQklFCitldmVudDowWDE3MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fU1RDWF9GQUlMX0dSUDIzIDogKEdyb3VwIDIzIHBtX3NlcmlhbGl6ZSkgU1RDWCBmYWlsZWQKK2V2ZW50OjBYMTcyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9TVENYX1BBU1NfR1JQMjMgOiAoR3JvdXAgMjMgcG1fc2VyaWFsaXplKSBTdGN4IHBhc3NlcworZXZlbnQ6MFgxNzMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQMjMgOiAoR3JvdXAgMjMgcG1fc2VyaWFsaXplKSBQcm9jZXNzb3IgY3ljbGVzCitldmVudDowWDE3NCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fMVBMVVNfUFBDX0NNUExfR1JQMjMgOiAoR3JvdXAgMjMgcG1fc2VyaWFsaXplKSBPbmUgb3IgbW9yZSBQUEMgaW5zdHJ1Y3Rpb24gY29tcGxldGVkCitldmVudDowWDE3NSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAyMyA6IChHcm91cCAyMyBwbV9zZXJpYWxpemUpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMTc2IGNvdW50ZXJzOjYgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MQVJYX0xTVTBfR1JQMjMgOiAoR3JvdXAgMjMgcG1fc2VyaWFsaXplKSBMYXJ4IGV4ZWN1dGVkIG9uIExTVTAKK2V2ZW50OjBYMTc3IGNvdW50ZXJzOjcgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MQVJYX0xTVTFfR1JQMjMgOiAoR3JvdXAgMjMgcG1fc2VyaWFsaXplKSBMYXJ4IGV4ZWN1dGVkIG9uIExTVTEKKworI0dyb3VwIDI0IHBtX2xzdWJ1c3ksIExTVSBCdXN5IEV2ZW50cworZXZlbnQ6MFgxODAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9TUlFfUzBfVkFMSURfR1JQMjQgOiAoR3JvdXAgMjQgcG1fbHN1YnVzeSkgU1JRIHNsb3QgMCB2YWxpZAorZXZlbnQ6MFgxODEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9TUlFfUzBfQUxMT0NfR1JQMjQgOiAoR3JvdXAgMjQgcG1fbHN1YnVzeSkgU1JRIHNsb3QgMCBhbGxvY2F0ZWQKK2V2ZW50OjBYMTgyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1UwX0JVU1lfR1JQMjQgOiAoR3JvdXAgMjQgcG1fbHN1YnVzeSkgTFNVMCBidXN5CitldmVudDowWDE4MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVMV9CVVNZX0dSUDI0IDogKEdyb3VwIDI0IHBtX2xzdWJ1c3kpIExTVTEgYnVzeQorZXZlbnQ6MFgxODQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9MUlFfUzBfVkFMSURfR1JQMjQgOiAoR3JvdXAgMjQgcG1fbHN1YnVzeSkgTFJRIHNsb3QgMCB2YWxpZAorZXZlbnQ6MFgxODUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9MUlFfUzBfQUxMT0NfR1JQMjQgOiAoR3JvdXAgMjQgcG1fbHN1YnVzeSkgTFJRIHNsb3QgMCBhbGxvY2F0ZWQKK2V2ZW50OjBYMTg2IGNvdW50ZXJzOjYgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDI0IDogKEdyb3VwIDI0IHBtX2xzdWJ1c3kpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMTg3IGNvdW50ZXJzOjcgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDI0IDogKEdyb3VwIDI0IHBtX2xzdWJ1c3kpIFByb2Nlc3NvciBjeWNsZXMKKworI0dyb3VwIDI1IHBtX2xzb3VyY2UyLCBJbmZvcm1hdGlvbiBvbiBkYXRhIHNvdXJjZQorZXZlbnQ6MFgxOTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMjUgOiAoR3JvdXAgMjUgcG1fbHNvdXJjZTIpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMTkxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMV9EQ0FDSEVfUkVMT0FEX1ZBTElEX0dSUDI1IDogKEdyb3VwIDI1IHBtX2xzb3VyY2UyKSBMMSByZWxvYWQgZGF0YSBzb3VyY2UgdmFsaWQKK2V2ZW50OjBYMTkyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDI1IDogKEdyb3VwIDI1IHBtX2xzb3VyY2UyKSBQcm9jZXNzb3IgY3ljbGVzCitldmVudDowWDE5MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fREFUQV9GUk9NX0wyX0dSUDI1IDogKEdyb3VwIDI1IHBtX2xzb3VyY2UyKSBEYXRhIGxvYWRlZCBmcm9tIEwyCitldmVudDowWDE5NCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fREFUQV9GUk9NX0wyNV9TSFJfR1JQMjUgOiAoR3JvdXAgMjUgcG1fbHNvdXJjZTIpIERhdGEgbG9hZGVkIGZyb20gTDIuNSBzaGFyZWQKK2V2ZW50OjBYMTk1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQVRBX0ZST01fTDI3NV9TSFJfR1JQMjUgOiAoR3JvdXAgMjUgcG1fbHNvdXJjZTIpIERhdGEgbG9hZGVkIGZyb20gTDIuNzUgc2hhcmVkCitldmVudDowWDE5NiBjb3VudGVyczo2IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fREFUQV9GUk9NX0wyNzVfTU9EX0dSUDI1IDogKEdyb3VwIDI1IHBtX2xzb3VyY2UyKSBEYXRhIGxvYWRlZCBmcm9tIEwyLjc1IG1vZGlmaWVkCitldmVudDowWDE5NyBjb3VudGVyczo3IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fREFUQV9GUk9NX0wyNV9NT0RfR1JQMjUgOiAoR3JvdXAgMjUgcG1fbHNvdXJjZTIpIERhdGEgbG9hZGVkIGZyb20gTDIuNSBtb2RpZmllZAorCisjR3JvdXAgMjYgcG1fbHNvdXJjZTMsIEluZm9ybWF0aW9uIG9uIGRhdGEgc291cmNlCitldmVudDowWDFBMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fREFUQV9GUk9NX0wzX0dSUDI2IDogKEdyb3VwIDI2IHBtX2xzb3VyY2UzKSBEYXRhIGxvYWRlZCBmcm9tIEwzCitldmVudDowWDFBMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fREFUQV9GUk9NX01FTV9HUlAyNiA6IChHcm91cCAyNiBwbV9sc291cmNlMykgRGF0YSBsb2FkZWQgZnJvbSBtZW1vcnkKK2V2ZW50OjBYMUEyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQVRBX0ZST01fTDM1X0dSUDI2IDogKEdyb3VwIDI2IHBtX2xzb3VyY2UzKSBEYXRhIGxvYWRlZCBmcm9tIEwzLjUKK2V2ZW50OjBYMUEzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQVRBX0ZST01fTDJfR1JQMjYgOiAoR3JvdXAgMjYgcG1fbHNvdXJjZTMpIERhdGEgbG9hZGVkIGZyb20gTDIKK2V2ZW50OjBYMUE0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMV9EQ0FDSEVfUkVMT0FEX1ZBTElEX0dSUDI2IDogKEdyb3VwIDI2IHBtX2xzb3VyY2UzKSBMMSByZWxvYWQgZGF0YSBzb3VyY2UgdmFsaWQKK2V2ZW50OjBYMUE1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDI2IDogKEdyb3VwIDI2IHBtX2xzb3VyY2UzKSBQcm9jZXNzb3IgY3ljbGVzCitldmVudDowWDFBNiBjb3VudGVyczo2IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fREFUQV9GUk9NX0wyNzVfTU9EX0dSUDI2IDogKEdyb3VwIDI2IHBtX2xzb3VyY2UzKSBEYXRhIGxvYWRlZCBmcm9tIEwyLjc1IG1vZGlmaWVkCitldmVudDowWDFBNyBjb3VudGVyczo3IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAyNiA6IChHcm91cCAyNiBwbV9sc291cmNlMykgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorCisjR3JvdXAgMjcgcG1faXNvdXJjZTIsIEluc3RydWN0aW9uIFNvdXJjZSBpbmZvcm1hdGlvbgorZXZlbnQ6MFgxQjAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMjcgOiAoR3JvdXAgMjcgcG1faXNvdXJjZTIpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMUIxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDI3IDogKEdyb3VwIDI3IHBtX2lzb3VyY2UyKSBQcm9jZXNzb3IgY3ljbGVzCitldmVudDowWDFCMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU5TVF9GUk9NX0wyX0dSUDI3IDogKEdyb3VwIDI3IHBtX2lzb3VyY2UyKSBJbnN0cnVjdGlvbnMgZmV0Y2hlZCBmcm9tIEwyCitldmVudDowWDFCMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU5TVF9GUk9NX0wzNV9HUlAyNyA6IChHcm91cCAyNyBwbV9pc291cmNlMikgSW5zdHJ1Y3Rpb25zIGZldGNoZWQgZnJvbSBMMy41CitldmVudDowWDFCNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU5TVF9GUk9NX0wzX0dSUDI3IDogKEdyb3VwIDI3IHBtX2lzb3VyY2UyKSBJbnN0cnVjdGlvbiBmZXRjaGVkIGZyb20gTDMKK2V2ZW50OjBYMUI1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JTlNUX0ZST01fTDFfR1JQMjcgOiAoR3JvdXAgMjcgcG1faXNvdXJjZTIpIEluc3RydWN0aW9uIGZldGNoZWQgZnJvbSBMMQorZXZlbnQ6MFgxQjYgY291bnRlcnM6NiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lOU1RfRlJPTV9QUkVGX0dSUDI3IDogKEdyb3VwIDI3IHBtX2lzb3VyY2UyKSBJbnN0cnVjdGlvbnMgZmV0Y2hlZCBmcm9tIHByZWZldGNoCitldmVudDowWDFCNyBjb3VudGVyczo3IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fMElOU1RfRkVUQ0hfR1JQMjcgOiAoR3JvdXAgMjcgcG1faXNvdXJjZTIpIE5vIGluc3RydWN0aW9ucyBmZXRjaGVkCisKKyNHcm91cCAyOCBwbV9pc291cmNlMywgSW5zdHJ1Y3Rpb24gU291cmNlIGluZm9ybWF0aW9uCitldmVudDowWDFDMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU5TVF9GUk9NX01FTV9HUlAyOCA6IChHcm91cCAyOCBwbV9pc291cmNlMykgSW5zdHJ1Y3Rpb24gZmV0Y2hlZCBmcm9tIG1lbW9yeQorZXZlbnQ6MFgxQzEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lOU1RfRlJPTV9MMjVfTDI3NV9HUlAyOCA6IChHcm91cCAyOCBwbV9pc291cmNlMykgSW5zdHJ1Y3Rpb24gZmV0Y2hlZCBmcm9tIEwyLjUvTDIuNzUKK2V2ZW50OjBYMUMyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JTlNUX0ZST01fTDJfR1JQMjggOiAoR3JvdXAgMjggcG1faXNvdXJjZTMpIEluc3RydWN0aW9ucyBmZXRjaGVkIGZyb20gTDIKK2V2ZW50OjBYMUMzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JTlNUX0ZST01fTDM1X0dSUDI4IDogKEdyb3VwIDI4IHBtX2lzb3VyY2UzKSBJbnN0cnVjdGlvbnMgZmV0Y2hlZCBmcm9tIEwzLjUKK2V2ZW50OjBYMUM0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JTlNUX0ZST01fTDNfR1JQMjggOiAoR3JvdXAgMjggcG1faXNvdXJjZTMpIEluc3RydWN0aW9uIGZldGNoZWQgZnJvbSBMMworZXZlbnQ6MFgxQzUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lOU1RfRlJPTV9MMV9HUlAyOCA6IChHcm91cCAyOCBwbV9pc291cmNlMykgSW5zdHJ1Y3Rpb24gZmV0Y2hlZCBmcm9tIEwxCitldmVudDowWDFDNiBjb3VudGVyczo2IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlAyOCA6IChHcm91cCAyOCBwbV9pc291cmNlMykgUHJvY2Vzc29yIGN5Y2xlcworZXZlbnQ6MFgxQzcgY291bnRlcnM6NyB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMjggOiAoR3JvdXAgMjggcG1faXNvdXJjZTMpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKKworI0dyb3VwIDI5IHBtX2ZwdTMsIEZsb2F0aW5nIFBvaW50IGV2ZW50cyBieSB1bml0CitldmVudDowWDFEMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVMF9GRElWX0dSUDI5IDogKEdyb3VwIDI5IHBtX2ZwdTMpIEZQVTAgZXhlY3V0ZWQgRkRJViBpbnN0cnVjdGlvbgorZXZlbnQ6MFgxRDEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVTFfRkRJVl9HUlAyOSA6IChHcm91cCAyOSBwbV9mcHUzKSBGUFUxIGV4ZWN1dGVkIEZESVYgaW5zdHJ1Y3Rpb24KK2V2ZW50OjBYMUQyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFUwX0ZSU1BfRkNPTlZfR1JQMjkgOiAoR3JvdXAgMjkgcG1fZnB1MykgRlBVMCBleGVjdXRlZCBGUlNQIG9yIEZDT05WIGluc3RydWN0aW9ucworZXZlbnQ6MFgxRDMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVTFfRlJTUF9GQ09OVl9HUlAyOSA6IChHcm91cCAyOSBwbV9mcHUzKSBGUFUxIGV4ZWN1dGVkIEZSU1Agb3IgRkNPTlYgaW5zdHJ1Y3Rpb25zCitldmVudDowWDFENCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVMF9GTUFfR1JQMjkgOiAoR3JvdXAgMjkgcG1fZnB1MykgRlBVMCBleGVjdXRlZCBtdWx0aXBseS1hZGQgaW5zdHJ1Y3Rpb24KK2V2ZW50OjBYMUQ1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFUxX0ZNQV9HUlAyOSA6IChHcm91cCAyOSBwbV9mcHUzKSBGUFUxIGV4ZWN1dGVkIG11bHRpcGx5LWFkZCBpbnN0cnVjdGlvbgorZXZlbnQ6MFgxRDYgY291bnRlcnM6NiB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMjkgOiAoR3JvdXAgMjkgcG1fZnB1MykgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgxRDcgY291bnRlcnM6NyB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQMjkgOiAoR3JvdXAgMjkgcG1fZnB1MykgUHJvY2Vzc29yIGN5Y2xlcworCisjR3JvdXAgMzAgcG1fZnB1NCwgRmxvYXRpbmcgUG9pbnQgZXZlbnRzIGJ5IHVuaXQKK2V2ZW50OjBYMUUwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFUwX0ZTUVJUX0dSUDMwIDogKEdyb3VwIDMwIHBtX2ZwdTQpIEZQVTAgZXhlY3V0ZWQgRlNRUlQgaW5zdHJ1Y3Rpb24KK2V2ZW50OjBYMUUxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFUxX0ZTUVJUX0dSUDMwIDogKEdyb3VwIDMwIHBtX2ZwdTQpIEZQVTEgZXhlY3V0ZWQgRlNRUlQgaW5zdHJ1Y3Rpb24KK2V2ZW50OjBYMUUyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFUwX0ZJTl9HUlAzMCA6IChHcm91cCAzMCBwbV9mcHU0KSBGUFUwIHByb2R1Y2VkIGEgcmVzdWx0CitldmVudDowWDFFMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVMV9GSU5fR1JQMzAgOiAoR3JvdXAgMzAgcG1fZnB1NCkgRlBVMSBwcm9kdWNlZCBhIHJlc3VsdAorZXZlbnQ6MFgxRTQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVTBfQUxMX0dSUDMwIDogKEdyb3VwIDMwIHBtX2ZwdTQpIEZQVTAgZXhlY3V0ZWQgYWRkLCBtdWx0LCBzdWIsIGNtcCBvciBzZWwgaW5zdHJ1Y3Rpb24KK2V2ZW50OjBYMUU1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFUxX0FMTF9HUlAzMCA6IChHcm91cCAzMCBwbV9mcHU0KSBGUFUxIGV4ZWN1dGVkIGFkZCwgbXVsdCwgc3ViLCBjbXAgb3Igc2VsIGluc3RydWN0aW9uCitldmVudDowWDFFNiBjb3VudGVyczo2IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAzMCA6IChHcm91cCAzMCBwbV9mcHU0KSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDFFNyBjb3VudGVyczo3IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlAzMCA6IChHcm91cCAzMCBwbV9mcHU0KSBQcm9jZXNzb3IgY3ljbGVzCisKKyNHcm91cCAzMSBwbV9mcHU1LCBGbG9hdGluZyBQb2ludCBldmVudHMgYnkgdW5pdAorZXZlbnQ6MFgxRjAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVTBfREVOT1JNX0dSUDMxIDogKEdyb3VwIDMxIHBtX2ZwdTUpIEZQVTAgcmVjZWl2ZWQgZGVub3JtYWxpemVkIGRhdGEKK2V2ZW50OjBYMUYxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFUxX0RFTk9STV9HUlAzMSA6IChHcm91cCAzMSBwbV9mcHU1KSBGUFUxIHJlY2VpdmVkIGRlbm9ybWFsaXplZCBkYXRhCitldmVudDowWDFGMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVMF9GTU9WX0ZFU1RfR1JQMzEgOiAoR3JvdXAgMzEgcG1fZnB1NSkgRlBVMCBleGVjdXRlZCBGTU9WIG9yIEZFU1QgaW5zdHJ1Y3Rpb25zCitldmVudDowWDFGMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVMV9GTU9WX0ZFU1RfR1JQMzEgOiAoR3JvdXAgMzEgcG1fZnB1NSkgRlBVMSBleGVjdXRpbmcgRk1PViBvciBGRVNUIGluc3RydWN0aW9ucworZXZlbnQ6MFgxRjQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQMzEgOiAoR3JvdXAgMzEgcG1fZnB1NSkgUHJvY2Vzc29yIGN5Y2xlcworZXZlbnQ6MFgxRjUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMzEgOiAoR3JvdXAgMzEgcG1fZnB1NSkgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgxRjYgY291bnRlcnM6NiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVTBfRkVTVF9HUlAzMSA6IChHcm91cCAzMSBwbV9mcHU1KSBGUFUwIGV4ZWN1dGVkIEZFU1QgaW5zdHJ1Y3Rpb24KK2V2ZW50OjBYMUY3IGNvdW50ZXJzOjcgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFUxX0ZFU1RfR1JQMzEgOiAoR3JvdXAgMzEgcG1fZnB1NSkgRlBVMSBleGVjdXRlZCBGRVNUIGluc3RydWN0aW9uCisKKyNHcm91cCAzMiBwbV9mcHU2LCBGbG9hdGluZyBQb2ludCBldmVudHMgYnkgdW5pdAorZXZlbnQ6MFgyMDAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVTBfU0lOR0xFX0dSUDMyIDogKEdyb3VwIDMyIHBtX2ZwdTYpIEZQVTAgZXhlY3V0ZWQgc2luZ2xlIHByZWNpc2lvbiBpbnN0cnVjdGlvbgorZXZlbnQ6MFgyMDEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVTFfU0lOR0xFX0dSUDMyIDogKEdyb3VwIDMyIHBtX2ZwdTYpIEZQVTEgZXhlY3V0ZWQgc2luZ2xlIHByZWNpc2lvbiBpbnN0cnVjdGlvbgorZXZlbnQ6MFgyMDIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVTBfTERGX0dSUDMyIDogKEdyb3VwIDMyIHBtX2ZwdTYpIExTVTAgZXhlY3V0ZWQgRmxvYXRpbmcgUG9pbnQgbG9hZCBpbnN0cnVjdGlvbgorZXZlbnQ6MFgyMDMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVTFfTERGX0dSUDMyIDogKEdyb3VwIDMyIHBtX2ZwdTYpIExTVTEgZXhlY3V0ZWQgRmxvYXRpbmcgUG9pbnQgbG9hZCBpbnN0cnVjdGlvbgorZXZlbnQ6MFgyMDQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVTBfU1RGX0dSUDMyIDogKEdyb3VwIDMyIHBtX2ZwdTYpIEZQVTAgZXhlY3V0ZWQgc3RvcmUgaW5zdHJ1Y3Rpb24KK2V2ZW50OjBYMjA1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFUxX1NURl9HUlAzMiA6IChHcm91cCAzMiBwbV9mcHU2KSBGUFUxIGV4ZWN1dGVkIHN0b3JlIGluc3RydWN0aW9uCitldmVudDowWDIwNiBjb3VudGVyczo2IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlAzMiA6IChHcm91cCAzMiBwbV9mcHU2KSBQcm9jZXNzb3IgY3ljbGVzCitldmVudDowWDIwNyBjb3VudGVyczo3IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAzMiA6IChHcm91cCAzMiBwbV9mcHU2KSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCisKKyNHcm91cCAzMyBwbV9mcHU3LCBGbG9hdGluZyBQb2ludCBldmVudHMgYnkgdW5pdAorZXZlbnQ6MFgyMTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVTBfU1RBTEwzX0dSUDMzIDogKEdyb3VwIDMzIHBtX2ZwdTcpIEZQVTAgc3RhbGxlZCBpbiBwaXBlMworZXZlbnQ6MFgyMTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVTFfU1RBTEwzX0dSUDMzIDogKEdyb3VwIDMzIHBtX2ZwdTcpIEZQVTEgc3RhbGxlZCBpbiBwaXBlMworZXZlbnQ6MFgyMTIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVTBfRklOX0dSUDMzIDogKEdyb3VwIDMzIHBtX2ZwdTcpIEZQVTAgcHJvZHVjZWQgYSByZXN1bHQKK2V2ZW50OjBYMjEzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFUxX0ZJTl9HUlAzMyA6IChHcm91cCAzMyBwbV9mcHU3KSBGUFUxIHByb2R1Y2VkIGEgcmVzdWx0CitldmVudDowWDIxNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlAzMyA6IChHcm91cCAzMyBwbV9mcHU3KSBQcm9jZXNzb3IgY3ljbGVzCitldmVudDowWDIxNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAzMyA6IChHcm91cCAzMyBwbV9mcHU3KSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDIxNiBjb3VudGVyczo2IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlAzMyA6IChHcm91cCAzMyBwbV9mcHU3KSBQcm9jZXNzb3IgY3ljbGVzCitldmVudDowWDIxNyBjb3VudGVyczo3IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVMF9GUFNDUl9HUlAzMyA6IChHcm91cCAzMyBwbV9mcHU3KSBGUFUwIGV4ZWN1dGVkIEZQU0NSIGluc3RydWN0aW9uCisKKyNHcm91cCAzNCBwbV9meHUsIEZpeCBQb2ludCBVbml0IGV2ZW50cworZXZlbnQ6MFgyMjAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMzQgOiAoR3JvdXAgMzQgcG1fZnh1KSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDIyMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlAzNCA6IChHcm91cCAzNCBwbV9meHUpIFByb2Nlc3NvciBjeWNsZXMKK2V2ZW50OjBYMjIyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GWFVfRklOX0dSUDM0IDogKEdyb3VwIDM0IHBtX2Z4dSkgRlhVIHByb2R1Y2VkIGEgcmVzdWx0CitldmVudDowWDIyMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlhVMV9CVVNZX0ZYVTBfSURMRV9HUlAzNCA6IChHcm91cCAzNCBwbV9meHUpIEZYVTEgYnVzeSBGWFUwIGlkbGUKK2V2ZW50OjBYMjI0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GWFVfSURMRV9HUlAzNCA6IChHcm91cCAzNCBwbV9meHUpIEZYVSBpZGxlCitldmVudDowWDIyNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlhVX0JVU1lfR1JQMzQgOiAoR3JvdXAgMzQgcG1fZnh1KSBGWFUgYnVzeQorZXZlbnQ6MFgyMjYgY291bnRlcnM6NiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZYVTBfQlVTWV9GWFUxX0lETEVfR1JQMzQgOiAoR3JvdXAgMzQgcG1fZnh1KSBGWFUwIGJ1c3kgRlhVMSBpZGxlCitldmVudDowWDIyNyBjb3VudGVyczo3IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlhMU19GVUxMX0NZQ19HUlAzNCA6IChHcm91cCAzNCBwbV9meHUpIEN5Y2xlcyBGWExTIHF1ZXVlIGlzIGZ1bGwKKworI0dyb3VwIDM1IHBtX2xzdV9sbXEsIExTVSBMb2FkIE1pc3MgUXVldWUgRXZlbnRzCitldmVudDowWDIzMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVX0xNUV9MSFJfTUVSR0VfR1JQMzUgOiAoR3JvdXAgMzUgcG1fbHN1X2xtcSkgTE1RIExIUiBtZXJnZXMKK2V2ZW50OjBYMjMxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1VfTE1RX0ZVTExfQ1lDX0dSUDM1IDogKEdyb3VwIDM1IHBtX2xzdV9sbXEpIEN5Y2xlcyBMTVEgZnVsbAorZXZlbnQ6MFgyMzIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9MTVFfUzBfQUxMT0NfR1JQMzUgOiAoR3JvdXAgMzUgcG1fbHN1X2xtcSkgTE1RIHNsb3QgMCBhbGxvY2F0ZWQKK2V2ZW50OjBYMjMzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1VfTE1RX1MwX1ZBTElEX0dSUDM1IDogKEdyb3VwIDM1IHBtX2xzdV9sbXEpIExNUSBzbG90IDAgdmFsaWQKK2V2ZW50OjBYMjM0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDM1IDogKEdyb3VwIDM1IHBtX2xzdV9sbXEpIFByb2Nlc3NvciBjeWNsZXMKK2V2ZW50OjBYMjM1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDM1IDogKEdyb3VwIDM1IHBtX2xzdV9sbXEpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMjM2IGNvdW50ZXJzOjYgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1VfU1JRX1NZTkNfQ1lDX0dSUDM1IDogKEdyb3VwIDM1IHBtX2xzdV9sbXEpIFNSUSBzeW5jIGR1cmF0aW9uCitldmVudDowWDIzNyBjb3VudGVyczo3IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fREFUQV9UQUJMRVdBTEtfQ1lDX0dSUDM1IDogKEdyb3VwIDM1IHBtX2xzdV9sbXEpIEN5Y2xlcyBkb2luZyBkYXRhIHRhYmxld2Fsa3MKKworI0dyb3VwIDM2IHBtX2xzdV9mbHVzaCwgTFNVIEZsdXNoIEV2ZW50cworZXZlbnQ6MFgyNDAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVTBfRkxVU0hfTFJRX0dSUDM2IDogKEdyb3VwIDM2IHBtX2xzdV9mbHVzaCkgTFNVMCBMUlEgZmx1c2hlcworZXZlbnQ6MFgyNDEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVTFfRkxVU0hfTFJRX0dSUDM2IDogKEdyb3VwIDM2IHBtX2xzdV9mbHVzaCkgTFNVMSBMUlEgZmx1c2hlcworZXZlbnQ6MFgyNDIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQMzYgOiAoR3JvdXAgMzYgcG1fbHN1X2ZsdXNoKSBQcm9jZXNzb3IgY3ljbGVzCitldmVudDowWDI0MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlAzNiA6IChHcm91cCAzNiBwbV9sc3VfZmx1c2gpIFByb2Nlc3NvciBjeWNsZXMKK2V2ZW50OjBYMjQ0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1UwX0ZMVVNIX1NSUV9HUlAzNiA6IChHcm91cCAzNiBwbV9sc3VfZmx1c2gpIExTVTAgU1JRIGZsdXNoZXMKK2V2ZW50OjBYMjQ1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1UxX0ZMVVNIX1NSUV9HUlAzNiA6IChHcm91cCAzNiBwbV9sc3VfZmx1c2gpIExTVTEgU1JRIGZsdXNoZXMKK2V2ZW50OjBYMjQ2IGNvdW50ZXJzOjYgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDM2IDogKEdyb3VwIDM2IHBtX2xzdV9mbHVzaCkgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgyNDcgY291bnRlcnM6NyB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQMzYgOiAoR3JvdXAgMzYgcG1fbHN1X2ZsdXNoKSBQcm9jZXNzb3IgY3ljbGVzCisKKyNHcm91cCAzNyBwbV9sc3VfbG9hZDEsIExTVSBMb2FkIEV2ZW50cworZXZlbnQ6MFgyNTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVTBfRkxVU0hfVUxEX0dSUDM3IDogKEdyb3VwIDM3IHBtX2xzdV9sb2FkMSkgTFNVMCB1bmFsaWduZWQgbG9hZCBmbHVzaGVzCitldmVudDowWDI1MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVMV9GTFVTSF9VTERfR1JQMzcgOiAoR3JvdXAgMzcgcG1fbHN1X2xvYWQxKSBMU1UxIHVuYWxpZ25lZCBsb2FkIGZsdXNoZXMKK2V2ZW50OjBYMjUyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MRF9SRUZfTDFfTFNVMF9HUlAzNyA6IChHcm91cCAzNyBwbV9sc3VfbG9hZDEpIExTVTAgTDEgRCBjYWNoZSBsb2FkIHJlZmVyZW5jZXMKK2V2ZW50OjBYMjUzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MRF9SRUZfTDFfTFNVMV9HUlAzNyA6IChHcm91cCAzNyBwbV9sc3VfbG9hZDEpIExTVTEgTDEgRCBjYWNoZSBsb2FkIHJlZmVyZW5jZXMKK2V2ZW50OjBYMjU0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDM3IDogKEdyb3VwIDM3IHBtX2xzdV9sb2FkMSkgUHJvY2Vzc29yIGN5Y2xlcworZXZlbnQ6MFgyNTUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMzcgOiAoR3JvdXAgMzcgcG1fbHN1X2xvYWQxKSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDI1NiBjb3VudGVyczo2IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTERfTUlTU19MMV9MU1UwX0dSUDM3IDogKEdyb3VwIDM3IHBtX2xzdV9sb2FkMSkgTFNVMCBMMSBEIGNhY2hlIGxvYWQgbWlzc2VzCitldmVudDowWDI1NyBjb3VudGVyczo3IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTERfTUlTU19MMV9MU1UxX0dSUDM3IDogKEdyb3VwIDM3IHBtX2xzdV9sb2FkMSkgTFNVMSBMMSBEIGNhY2hlIGxvYWQgbWlzc2VzCisKKyNHcm91cCAzOCBwbV9sc3Vfc3RvcmUxLCBMU1UgU3RvcmUgRXZlbnRzCitldmVudDowWDI2MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVMF9GTFVTSF9VU1RfR1JQMzggOiAoR3JvdXAgMzggcG1fbHN1X3N0b3JlMSkgTFNVMCB1bmFsaWduZWQgc3RvcmUgZmx1c2hlcworZXZlbnQ6MFgyNjEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVTFfRkxVU0hfVVNUX0dSUDM4IDogKEdyb3VwIDM4IHBtX2xzdV9zdG9yZTEpIExTVTEgdW5hbGlnbmVkIHN0b3JlIGZsdXNoZXMKK2V2ZW50OjBYMjYyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9TVF9SRUZfTDFfTFNVMF9HUlAzOCA6IChHcm91cCAzOCBwbV9sc3Vfc3RvcmUxKSBMU1UwIEwxIEQgY2FjaGUgc3RvcmUgcmVmZXJlbmNlcworZXZlbnQ6MFgyNjMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1NUX1JFRl9MMV9MU1UxX0dSUDM4IDogKEdyb3VwIDM4IHBtX2xzdV9zdG9yZTEpIExTVTEgTDEgRCBjYWNoZSBzdG9yZSByZWZlcmVuY2VzCitldmVudDowWDI2NCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlAzOCA6IChHcm91cCAzOCBwbV9sc3Vfc3RvcmUxKSBQcm9jZXNzb3IgY3ljbGVzCitldmVudDowWDI2NSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAzOCA6IChHcm91cCAzOCBwbV9sc3Vfc3RvcmUxKSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDI2NiBjb3VudGVyczo2IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fU1RfTUlTU19MMV9HUlAzOCA6IChHcm91cCAzOCBwbV9sc3Vfc3RvcmUxKSBMMSBEIGNhY2hlIHN0b3JlIG1pc3NlcworZXZlbnQ6MFgyNjcgY291bnRlcnM6NyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RDX0lOVl9MMl9HUlAzOCA6IChHcm91cCAzOCBwbV9sc3Vfc3RvcmUxKSBMMSBEIGNhY2hlIGVudHJpZXMgaW52YWxpZGF0ZWQgZnJvbSBMMgorCisjR3JvdXAgMzkgcG1fbHN1X3N0b3JlMiwgTFNVIFN0b3JlIEV2ZW50cworZXZlbnQ6MFgyNzAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVTBfU1JRX1NURldEX0dSUDM5IDogKEdyb3VwIDM5IHBtX2xzdV9zdG9yZTIpIExTVTAgU1JRIHN0b3JlIGZvcndhcmRlZAorZXZlbnQ6MFgyNzEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVTFfU1JRX1NURldEX0dSUDM5IDogKEdyb3VwIDM5IHBtX2xzdV9zdG9yZTIpIExTVTEgU1JRIHN0b3JlIGZvcndhcmRlZAorZXZlbnQ6MFgyNzIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1NUX1JFRl9MMV9MU1UwX0dSUDM5IDogKEdyb3VwIDM5IHBtX2xzdV9zdG9yZTIpIExTVTAgTDEgRCBjYWNoZSBzdG9yZSByZWZlcmVuY2VzCitldmVudDowWDI3MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fU1RfUkVGX0wxX0xTVTFfR1JQMzkgOiAoR3JvdXAgMzkgcG1fbHN1X3N0b3JlMikgTFNVMSBMMSBEIGNhY2hlIHN0b3JlIHJlZmVyZW5jZXMKK2V2ZW50OjBYMjc0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9TVF9NSVNTX0wxX0dSUDM5IDogKEdyb3VwIDM5IHBtX2xzdV9zdG9yZTIpIEwxIEQgY2FjaGUgc3RvcmUgbWlzc2VzCitldmVudDowWDI3NSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlAzOSA6IChHcm91cCAzOSBwbV9sc3Vfc3RvcmUyKSBQcm9jZXNzb3IgY3ljbGVzCitldmVudDowWDI3NiBjb3VudGVyczo2IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAzOSA6IChHcm91cCAzOSBwbV9sc3Vfc3RvcmUyKSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDI3NyBjb3VudGVyczo3IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlAzOSA6IChHcm91cCAzOSBwbV9sc3Vfc3RvcmUyKSBQcm9jZXNzb3IgY3ljbGVzCisKKyNHcm91cCA0MCBwbV9sc3U3LCBJbmZvcm1hdGlvbiBvbiB0aGUgTG9hZCBTdG9yZSBVbml0CitldmVudDowWDI4MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVMF9ERVJBVF9NSVNTX0dSUDQwIDogKEdyb3VwIDQwIHBtX2xzdTcpIExTVTAgREVSQVQgbWlzc2VzCitldmVudDowWDI4MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVMV9ERVJBVF9NSVNTX0dSUDQwIDogKEdyb3VwIDQwIHBtX2xzdTcpIExTVTEgREVSQVQgbWlzc2VzCitldmVudDowWDI4MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlA0MCA6IChHcm91cCA0MCBwbV9sc3U3KSBQcm9jZXNzb3IgY3ljbGVzCitldmVudDowWDI4MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlA0MCA6IChHcm91cCA0MCBwbV9sc3U3KSBQcm9jZXNzb3IgY3ljbGVzCitldmVudDowWDI4NCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDFfRENBQ0hFX1JFTE9BRF9WQUxJRF9HUlA0MCA6IChHcm91cCA0MCBwbV9sc3U3KSBMMSByZWxvYWQgZGF0YSBzb3VyY2UgdmFsaWQKK2V2ZW50OjBYMjg1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDQwIDogKEdyb3VwIDQwIHBtX2xzdTcpIFByb2Nlc3NvciBjeWNsZXMKK2V2ZW50OjBYMjg2IGNvdW50ZXJzOjYgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDQwIDogKEdyb3VwIDQwIHBtX2xzdTcpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMjg3IGNvdW50ZXJzOjcgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDQwIDogKEdyb3VwIDQwIHBtX2xzdTcpIFByb2Nlc3NvciBjeWNsZXMKKworI0dyb3VwIDQxIHBtX2RwZmV0Y2gsIERhdGEgUHJlZmV0Y2ggRXZlbnRzCitldmVudDowWDI5MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRENfUFJFRl9TVFJFQU1fQUxMT0NfR1JQNDEgOiAoR3JvdXAgNDEgcG1fZHBmZXRjaCkgRCBjYWNoZSBuZXcgcHJlZmV0Y2ggc3RyZWFtIGFsbG9jYXRlZAorZXZlbnQ6MFgyOTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RDX1BSRUZfTDJfQ0xPTkVfTDNfR1JQNDEgOiAoR3JvdXAgNDEgcG1fZHBmZXRjaCkgTDIgcHJlZmV0Y2ggY2xvbmVkIHdpdGggTDMKK2V2ZW50OjBYMjkyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMl9QUkVGX0dSUDQxIDogKEdyb3VwIDQxIHBtX2RwZmV0Y2gpIEwyIGNhY2hlIHByZWZldGNoZXMKK2V2ZW50OjBYMjkzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMV9QUkVGX0dSUDQxIDogKEdyb3VwIDQxIHBtX2RwZmV0Y2gpIEwxIGNhY2hlIGRhdGEgcHJlZmV0Y2hlcworZXZlbnQ6MFgyOTQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQNDEgOiAoR3JvdXAgNDEgcG1fZHBmZXRjaCkgUHJvY2Vzc29yIGN5Y2xlcworZXZlbnQ6MFgyOTUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQNDEgOiAoR3JvdXAgNDEgcG1fZHBmZXRjaCkgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgyOTYgY291bnRlcnM6NiB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQNDEgOiAoR3JvdXAgNDEgcG1fZHBmZXRjaCkgUHJvY2Vzc29yIGN5Y2xlcworZXZlbnQ6MFgyOTcgY291bnRlcnM6NyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RDX1BSRUZfT1VUX1NUUkVBTVNfR1JQNDEgOiAoR3JvdXAgNDEgcG1fZHBmZXRjaCkgT3V0IG9mIHByZWZldGNoIHN0cmVhbXMKKworI0dyb3VwIDQyIHBtX21pc2MsIE1pc2MgRXZlbnRzIGZvciB0ZXN0aW5nCitldmVudDowWDJBMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fR0NUX0VNUFRZX0NZQ19HUlA0MiA6IChHcm91cCA0MiBwbV9taXNjKSBDeWNsZXMgR0NUIGVtcHR5CitldmVudDowWDJBMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVX0xNUV9TUlFfRU1QVFlfQ1lDX0dSUDQyIDogKEdyb3VwIDQyIHBtX21pc2MpIEN5Y2xlcyBMTVEgYW5kIFNSUSBlbXB0eQorZXZlbnQ6MFgyQTIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0hWX0NZQ19HUlA0MiA6IChHcm91cCA0MiBwbV9taXNjKSBIeXBlcnZpc29yIEN5Y2xlcworZXZlbnQ6MFgyQTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQNDIgOiAoR3JvdXAgNDIgcG1fbWlzYykgUHJvY2Vzc29yIGN5Y2xlcworZXZlbnQ6MFgyQTQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNXzFQTFVTX1BQQ19DTVBMX0dSUDQyIDogKEdyb3VwIDQyIHBtX21pc2MpIE9uZSBvciBtb3JlIFBQQyBpbnN0cnVjdGlvbiBjb21wbGV0ZWQKK2V2ZW50OjBYMkE1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDQyIDogKEdyb3VwIDQyIHBtX21pc2MpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMkE2IGNvdW50ZXJzOjYgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9HUlBfQ01QTF9HUlA0MiA6IChHcm91cCA0MiBwbV9taXNjKSBHcm91cCBjb21wbGV0ZWQKK2V2ZW50OjBYMkE3IGNvdW50ZXJzOjcgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9UQl9CSVRfVFJBTlNfR1JQNDIgOiAoR3JvdXAgNDIgcG1fbWlzYykgVGltZSBCYXNlIGJpdCB0cmFuc2l0aW9uCisKKyNHcm91cCA0MyBwbV9tYXJrMSwgSW5mb3JtYXRpb24gb24gbWFya2VkIGluc3RydWN0aW9ucworZXZlbnQ6MFgyQjAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19MRF9NSVNTX0wxX0dSUDQzIDogKEdyb3VwIDQzIHBtX21hcmsxKSBNYXJrZWQgTDEgRCBjYWNoZSBsb2FkIG1pc3NlcworZXZlbnQ6MFgyQjEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1RIUkVTSF9USU1FT19HUlA0MyA6IChHcm91cCA0MyBwbV9tYXJrMSkgVGhyZXNob2xkIHRpbWVvdXQKK2V2ZW50OjBYMkIyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDQzIDogKEdyb3VwIDQzIHBtX21hcmsxKSBQcm9jZXNzb3IgY3ljbGVzCitldmVudDowWDJCMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0dSUF9DTVBMX0dSUDQzIDogKEdyb3VwIDQzIHBtX21hcmsxKSBNYXJrZWQgZ3JvdXAgY29tcGxldGVkCitldmVudDowWDJCNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fR1JQX01SS19HUlA0MyA6IChHcm91cCA0MyBwbV9tYXJrMSkgR3JvdXAgbWFya2VkIGluIElEVQorZXZlbnQ6MFgyQjUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19HUlBfSVNTVUVEX0dSUDQzIDogKEdyb3VwIDQzIHBtX21hcmsxKSBNYXJrZWQgZ3JvdXAgaXNzdWVkCitldmVudDowWDJCNiBjb3VudGVyczo2IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0lOU1RfRklOX0dSUDQzIDogKEdyb3VwIDQzIHBtX21hcmsxKSBNYXJrZWQgaW5zdHJ1Y3Rpb24gZmluaXNoZWQKK2V2ZW50OjBYMkI3IGNvdW50ZXJzOjcgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDQzIDogKEdyb3VwIDQzIHBtX21hcmsxKSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCisKKyNHcm91cCA0NCBwbV9tYXJrMiwgTWFya2VkIEluc3RydWN0aW9ucyBQcm9jZXNzaW5nIEZsb3cKK2V2ZW50OjBYMkMwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfR1JQX0RJU1BfR1JQNDQgOiAoR3JvdXAgNDQgcG1fbWFyazIpIE1hcmtlZCBncm91cCBkaXNwYXRjaGVkCitldmVudDowWDJDMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0JSVV9GSU5fR1JQNDQgOiAoR3JvdXAgNDQgcG1fbWFyazIpIE1hcmtlZCBpbnN0cnVjdGlvbiBCUlUgcHJvY2Vzc2luZyBmaW5pc2hlZAorZXZlbnQ6MFgyQzIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQNDQgOiAoR3JvdXAgNDQgcG1fbWFyazIpIFByb2Nlc3NvciBjeWNsZXMKK2V2ZW50OjBYMkMzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfQ1JVX0ZJTl9HUlA0NCA6IChHcm91cCA0NCBwbV9tYXJrMikgTWFya2VkIGluc3RydWN0aW9uIENSVSBwcm9jZXNzaW5nIGZpbmlzaGVkCitldmVudDowWDJDNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fR1JQX01SS19HUlA0NCA6IChHcm91cCA0NCBwbV9tYXJrMikgR3JvdXAgbWFya2VkIGluIElEVQorZXZlbnQ6MFgyQzUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19GWFVfRklOX0dSUDQ0IDogKEdyb3VwIDQ0IHBtX21hcmsyKSBNYXJrZWQgaW5zdHJ1Y3Rpb24gRlhVIHByb2Nlc3NpbmcgZmluaXNoZWQKK2V2ZW50OjBYMkM2IGNvdW50ZXJzOjYgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfRlBVX0ZJTl9HUlA0NCA6IChHcm91cCA0NCBwbV9tYXJrMikgTWFya2VkIGluc3RydWN0aW9uIEZQVSBwcm9jZXNzaW5nIGZpbmlzaGVkCitldmVudDowWDJDNyBjb3VudGVyczo3IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0xTVV9GSU5fR1JQNDQgOiAoR3JvdXAgNDQgcG1fbWFyazIpIE1hcmtlZCBpbnN0cnVjdGlvbiBMU1UgcHJvY2Vzc2luZyBmaW5pc2hlZAorCisjR3JvdXAgNDUgcG1fbWFyazMsIE1hcmtlZCBTdG9yZXMgUHJvY2Vzc2luZyBGbG93CitldmVudDowWDJEMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX1NUX0NNUExfR1JQNDUgOiAoR3JvdXAgNDUgcG1fbWFyazMpIE1hcmtlZCBzdG9yZSBpbnN0cnVjdGlvbiBjb21wbGV0ZWQKK2V2ZW50OjBYMkQxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDQ1IDogKEdyb3VwIDQ1IHBtX21hcmszKSBQcm9jZXNzb3IgY3ljbGVzCitldmVudDowWDJEMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX1NUX0NNUExfSU5UX0dSUDQ1IDogKEdyb3VwIDQ1IHBtX21hcmszKSBNYXJrZWQgc3RvcmUgY29tcGxldGVkIHdpdGggaW50ZXJ2ZW50aW9uCitldmVudDowWDJEMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0dSUF9DTVBMX0dSUDQ1IDogKEdyb3VwIDQ1IHBtX21hcmszKSBNYXJrZWQgZ3JvdXAgY29tcGxldGVkCitldmVudDowWDJENCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0dSUF9USU1FT19HUlA0NSA6IChHcm91cCA0NSBwbV9tYXJrMykgTWFya2VkIGdyb3VwIGNvbXBsZXRpb24gdGltZW91dAorZXZlbnQ6MFgyRDUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19TVF9HUFNfR1JQNDUgOiAoR3JvdXAgNDUgcG1fbWFyazMpIE1hcmtlZCBzdG9yZSBzZW50IHRvIEdQUworZXZlbnQ6MFgyRDYgY291bnRlcnM6NiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19MU1VfU1JRX0lOU1RfVkFMSURfR1JQNDUgOiAoR3JvdXAgNDUgcG1fbWFyazMpIE1hcmtlZCBpbnN0cnVjdGlvbiB2YWxpZCBpbiBTUlEKK2V2ZW50OjBYMkQ3IGNvdW50ZXJzOjcgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDQ1IDogKEdyb3VwIDQ1IHBtX21hcmszKSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCisKKyNHcm91cCA0NiBwbV9tYXJrNCwgTWFya2VkIExvYWRzIFByb2Nlc3NpbmcgRkxvdworZXZlbnQ6MFgyRTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19MRF9NSVNTX0wxX0dSUDQ2IDogKEdyb3VwIDQ2IHBtX21hcms0KSBNYXJrZWQgTDEgRCBjYWNoZSBsb2FkIG1pc3NlcworZXZlbnQ6MFgyRTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQNDYgOiAoR3JvdXAgNDYgcG1fbWFyazQpIFByb2Nlc3NvciBjeWNsZXMKK2V2ZW50OjBYMkUyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfTFNVX0ZMVVNIX0xSUV9HUlA0NiA6IChHcm91cCA0NiBwbV9tYXJrNCkgTWFya2VkIExSUSBmbHVzaGVzCitldmVudDowWDJFMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0xTVV9GTFVTSF9TUlFfR1JQNDYgOiAoR3JvdXAgNDYgcG1fbWFyazQpIE1hcmtlZCBTUlEgZmx1c2hlcworZXZlbnQ6MFgyRTQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19HUlBfVElNRU9fR1JQNDYgOiAoR3JvdXAgNDYgcG1fbWFyazQpIE1hcmtlZCBncm91cCBjb21wbGV0aW9uIHRpbWVvdXQKK2V2ZW50OjBYMkU1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfR1JQX0lTU1VFRF9HUlA0NiA6IChHcm91cCA0NiBwbV9tYXJrNCkgTWFya2VkIGdyb3VwIGlzc3VlZAorZXZlbnQ6MFgyRTYgY291bnRlcnM6NiB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQNDYgOiAoR3JvdXAgNDYgcG1fbWFyazQpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMkU3IGNvdW50ZXJzOjcgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfTFNVX0ZMVVNIX1VMRF9HUlA0NiA6IChHcm91cCA0NiBwbV9tYXJrNCkgTWFya2VkIHVuYWxpZ25lZCBsb2FkIGZsdXNoZXMKKworI0dyb3VwIDQ3IHBtX21hcmtfbHNvdXJjZSwgSW5mb3JtYXRpb24gb24gbWFya2VkIGRhdGEgc291cmNlCitldmVudDowWDJGMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0RBVEFfRlJPTV9MM19HUlA0NyA6IChHcm91cCA0NyBwbV9tYXJrX2xzb3VyY2UpIE1hcmtlZCBkYXRhIGxvYWRlZCBmcm9tIEwzCitldmVudDowWDJGMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0RBVEFfRlJPTV9NRU1fR1JQNDcgOiAoR3JvdXAgNDcgcG1fbWFya19sc291cmNlKSBNYXJrZWQgZGF0YSBsb2FkZWQgZnJvbSBtZW1vcnkKK2V2ZW50OjBYMkYyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfREFUQV9GUk9NX0wzNV9HUlA0NyA6IChHcm91cCA0NyBwbV9tYXJrX2xzb3VyY2UpIE1hcmtlZCBkYXRhIGxvYWRlZCBmcm9tIEwzLjUKK2V2ZW50OjBYMkYzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfREFUQV9GUk9NX0wyX0dSUDQ3IDogKEdyb3VwIDQ3IHBtX21hcmtfbHNvdXJjZSkgTWFya2VkIGRhdGEgbG9hZGVkIGZyb20gTDIKK2V2ZW50OjBYMkY0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfREFUQV9GUk9NX0wyNV9TSFJfR1JQNDcgOiAoR3JvdXAgNDcgcG1fbWFya19sc291cmNlKSBNYXJrZWQgZGF0YSBsb2FkZWQgZnJvbSBMMi41IHNoYXJlZAorZXZlbnQ6MFgyRjUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19EQVRBX0ZST01fTDI3NV9TSFJfR1JQNDcgOiAoR3JvdXAgNDcgcG1fbWFya19sc291cmNlKSBNYXJrZWQgZGF0YSBsb2FkZWQgZnJvbSBMMi43NSBzaGFyZWQKK2V2ZW50OjBYMkY2IGNvdW50ZXJzOjYgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfREFUQV9GUk9NX0wyNzVfTU9EX0dSUDQ3IDogKEdyb3VwIDQ3IHBtX21hcmtfbHNvdXJjZSkgTWFya2VkIGRhdGEgbG9hZGVkIGZyb20gTDIuNzUgbW9kaWZpZWQKK2V2ZW50OjBYMkY3IGNvdW50ZXJzOjcgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfREFUQV9GUk9NX0wyNV9NT0RfR1JQNDcgOiAoR3JvdXAgNDcgcG1fbWFya19sc291cmNlKSBNYXJrZWQgZGF0YSBsb2FkZWQgZnJvbSBMMi41IG1vZGlmaWVkCisKKyNHcm91cCA0OCBwbV9tYXJrX2xzb3VyY2UyLCBJbmZvcm1hdGlvbiBvbiBtYXJrZWQgZGF0YSBzb3VyY2UKK2V2ZW50OjBYMzAwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDQ4IDogKEdyb3VwIDQ4IHBtX21hcmtfbHNvdXJjZTIpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMzAxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDQ4IDogKEdyb3VwIDQ4IHBtX21hcmtfbHNvdXJjZTIpIFByb2Nlc3NvciBjeWNsZXMKK2V2ZW50OjBYMzAyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfTDFfUkVMT0FEX1ZBTElEX0dSUDQ4IDogKEdyb3VwIDQ4IHBtX21hcmtfbHNvdXJjZTIpIE1hcmtlZCBMMSByZWxvYWQgZGF0YSBzb3VyY2UgdmFsaWQKK2V2ZW50OjBYMzAzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfREFUQV9GUk9NX0wyX0dSUDQ4IDogKEdyb3VwIDQ4IHBtX21hcmtfbHNvdXJjZTIpIE1hcmtlZCBkYXRhIGxvYWRlZCBmcm9tIEwyCitldmVudDowWDMwNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0RBVEFfRlJPTV9MMjVfU0hSX0dSUDQ4IDogKEdyb3VwIDQ4IHBtX21hcmtfbHNvdXJjZTIpIE1hcmtlZCBkYXRhIGxvYWRlZCBmcm9tIEwyLjUgc2hhcmVkCitldmVudDowWDMwNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0RBVEFfRlJPTV9MMjc1X1NIUl9HUlA0OCA6IChHcm91cCA0OCBwbV9tYXJrX2xzb3VyY2UyKSBNYXJrZWQgZGF0YSBsb2FkZWQgZnJvbSBMMi43NSBzaGFyZWQKK2V2ZW50OjBYMzA2IGNvdW50ZXJzOjYgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfREFUQV9GUk9NX0wyNzVfTU9EX0dSUDQ4IDogKEdyb3VwIDQ4IHBtX21hcmtfbHNvdXJjZTIpIE1hcmtlZCBkYXRhIGxvYWRlZCBmcm9tIEwyLjc1IG1vZGlmaWVkCitldmVudDowWDMwNyBjb3VudGVyczo3IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0RBVEFfRlJPTV9MMjVfTU9EX0dSUDQ4IDogKEdyb3VwIDQ4IHBtX21hcmtfbHNvdXJjZTIpIE1hcmtlZCBkYXRhIGxvYWRlZCBmcm9tIEwyLjUgbW9kaWZpZWQKKworI0dyb3VwIDQ5IHBtX21hcmtfbHNvdXJjZTMsIEluZm9ybWF0aW9uIG9uIG1hcmtlZCBkYXRhIHNvdXJjZQorZXZlbnQ6MFgzMTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19EQVRBX0ZST01fTDNfR1JQNDkgOiAoR3JvdXAgNDkgcG1fbWFya19sc291cmNlMykgTWFya2VkIGRhdGEgbG9hZGVkIGZyb20gTDMKK2V2ZW50OjBYMzExIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfREFUQV9GUk9NX01FTV9HUlA0OSA6IChHcm91cCA0OSBwbV9tYXJrX2xzb3VyY2UzKSBNYXJrZWQgZGF0YSBsb2FkZWQgZnJvbSBtZW1vcnkKK2V2ZW50OjBYMzEyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfREFUQV9GUk9NX0wzNV9HUlA0OSA6IChHcm91cCA0OSBwbV9tYXJrX2xzb3VyY2UzKSBNYXJrZWQgZGF0YSBsb2FkZWQgZnJvbSBMMy41CitldmVudDowWDMxMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0RBVEFfRlJPTV9MMl9HUlA0OSA6IChHcm91cCA0OSBwbV9tYXJrX2xzb3VyY2UzKSBNYXJrZWQgZGF0YSBsb2FkZWQgZnJvbSBMMgorZXZlbnQ6MFgzMTQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQNDkgOiAoR3JvdXAgNDkgcG1fbWFya19sc291cmNlMykgUHJvY2Vzc29yIGN5Y2xlcworZXZlbnQ6MFgzMTUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQNDkgOiAoR3JvdXAgNDkgcG1fbWFya19sc291cmNlMykgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgzMTYgY291bnRlcnM6NiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19EQVRBX0ZST01fTDI3NV9NT0RfR1JQNDkgOiAoR3JvdXAgNDkgcG1fbWFya19sc291cmNlMykgTWFya2VkIGRhdGEgbG9hZGVkIGZyb20gTDIuNzUgbW9kaWZpZWQKK2V2ZW50OjBYMzE3IGNvdW50ZXJzOjcgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfTDFfUkVMT0FEX1ZBTElEX0dSUDQ5IDogKEdyb3VwIDQ5IHBtX21hcmtfbHNvdXJjZTMpIE1hcmtlZCBMMSByZWxvYWQgZGF0YSBzb3VyY2UgdmFsaWQKKworI0dyb3VwIDUwIHBtX2xzdV9tYXJrMSwgTG9hZCBTdG9yZSBVbml0IE1hcmtlZCBFdmVudHMKK2V2ZW50OjBYMzIwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfU1RfTUlTU19MMV9HUlA1MCA6IChHcm91cCA1MCBwbV9sc3VfbWFyazEpIE1hcmtlZCBMMSBEIGNhY2hlIHN0b3JlIG1pc3NlcworZXZlbnQ6MFgzMjEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19JTVJfUkVMT0FEX0dSUDUwIDogKEdyb3VwIDUwIHBtX2xzdV9tYXJrMSkgTWFya2VkIElNUiByZWxvYWRlZAorZXZlbnQ6MFgzMjIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19MU1UwX0ZMVVNIX1VMRF9HUlA1MCA6IChHcm91cCA1MCBwbV9sc3VfbWFyazEpIExTVTAgbWFya2VkIHVuYWxpZ25lZCBsb2FkIGZsdXNoZXMKK2V2ZW50OjBYMzIzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfTFNVMV9GTFVTSF9VTERfR1JQNTAgOiAoR3JvdXAgNTAgcG1fbHN1X21hcmsxKSBMU1UxIG1hcmtlZCB1bmFsaWduZWQgbG9hZCBmbHVzaGVzCitldmVudDowWDMyNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlA1MCA6IChHcm91cCA1MCBwbV9sc3VfbWFyazEpIFByb2Nlc3NvciBjeWNsZXMKK2V2ZW50OjBYMzI1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDUwIDogKEdyb3VwIDUwIHBtX2xzdV9tYXJrMSkgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgzMjYgY291bnRlcnM6NiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19MU1UwX0ZMVVNIX1VTVF9HUlA1MCA6IChHcm91cCA1MCBwbV9sc3VfbWFyazEpIExTVTAgbWFya2VkIHVuYWxpZ25lZCBzdG9yZSBmbHVzaGVzCitldmVudDowWDMyNyBjb3VudGVyczo3IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0xTVTFfRkxVU0hfVVNUX0dSUDUwIDogKEdyb3VwIDUwIHBtX2xzdV9tYXJrMSkgTFNVMSBtYXJrZWQgdW5hbGlnbmVkIHN0b3JlIGZsdXNoZXMKKworI0dyb3VwIDUxIHBtX2xzdV9tYXJrMiwgTG9hZCBTdG9yZSBVbml0IE1hcmtlZCBFdmVudHMKK2V2ZW50OjBYMzMwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfTERfTUlTU19MMV9MU1UwX0dSUDUxIDogKEdyb3VwIDUxIHBtX2xzdV9tYXJrMikgTFNVMCBMMSBEIGNhY2hlIGxvYWQgbWlzc2VzCitldmVudDowWDMzMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0xEX01JU1NfTDFfTFNVMV9HUlA1MSA6IChHcm91cCA1MSBwbV9sc3VfbWFyazIpIExTVTEgTDEgRCBjYWNoZSBsb2FkIG1pc3NlcworZXZlbnQ6MFgzMzIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19MU1UwX0ZMVVNIX0xSUV9HUlA1MSA6IChHcm91cCA1MSBwbV9sc3VfbWFyazIpIExTVTAgbWFya2VkIExSUSBmbHVzaGVzCitldmVudDowWDMzMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0xTVTFfRkxVU0hfTFJRX0dSUDUxIDogKEdyb3VwIDUxIHBtX2xzdV9tYXJrMikgTFNVMSBtYXJrZWQgTFJRIGZsdXNoZXMKK2V2ZW50OjBYMzM0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDUxIDogKEdyb3VwIDUxIHBtX2xzdV9tYXJrMikgUHJvY2Vzc29yIGN5Y2xlcworZXZlbnQ6MFgzMzUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQNTEgOiAoR3JvdXAgNTEgcG1fbHN1X21hcmsyKSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDMzNiBjb3VudGVyczo2IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0xTVTBfRkxVU0hfU1JRX0dSUDUxIDogKEdyb3VwIDUxIHBtX2xzdV9tYXJrMikgTFNVMCBtYXJrZWQgU1JRIGZsdXNoZXMKK2V2ZW50OjBYMzM3IGNvdW50ZXJzOjcgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfTFNVMV9GTFVTSF9TUlFfR1JQNTEgOiAoR3JvdXAgNTEgcG1fbHN1X21hcmsyKSBMU1UxIG1hcmtlZCBTUlEgZmx1c2hlcworCisjR3JvdXAgNTIgcG1fbHN1X21hcmszLCBMb2FkIFN0b3JlIFVuaXQgTWFya2VkIEV2ZW50cworZXZlbnQ6MFgzNDAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19TVENYX0ZBSUxfR1JQNTIgOiAoR3JvdXAgNTIgcG1fbHN1X21hcmszKSBNYXJrZWQgU1RDWCBmYWlsZWQKK2V2ZW50OjBYMzQxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDUyIDogKEdyb3VwIDUyIHBtX2xzdV9tYXJrMykgUHJvY2Vzc29yIGN5Y2xlcworZXZlbnQ6MFgzNDIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19MU1UwX0lOU1RfRklOX0dSUDUyIDogKEdyb3VwIDUyIHBtX2xzdV9tYXJrMykgTFNVMCBmaW5pc2hlZCBhIG1hcmtlZCBpbnN0cnVjdGlvbgorZXZlbnQ6MFgzNDMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19MU1UxX0lOU1RfRklOX0dSUDUyIDogKEdyb3VwIDUyIHBtX2xzdV9tYXJrMykgTFNVMSBmaW5pc2hlZCBhIG1hcmtlZCBpbnN0cnVjdGlvbgorZXZlbnQ6MFgzNDQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQNTIgOiAoR3JvdXAgNTIgcG1fbHN1X21hcmszKSBQcm9jZXNzb3IgY3ljbGVzCitldmVudDowWDM0NSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0dSUF9JU1NVRURfR1JQNTIgOiAoR3JvdXAgNTIgcG1fbHN1X21hcmszKSBNYXJrZWQgZ3JvdXAgaXNzdWVkCitldmVudDowWDM0NiBjb3VudGVyczo2IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0lOU1RfRklOX0dSUDUyIDogKEdyb3VwIDUyIHBtX2xzdV9tYXJrMykgTWFya2VkIGluc3RydWN0aW9uIGZpbmlzaGVkCitldmVudDowWDM0NyBjb3VudGVyczo3IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlA1MiA6IChHcm91cCA1MiBwbV9sc3VfbWFyazMpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKKworI0dyb3VwIDUzIHBtX3RocmVzaG9sZCwgR3JvdXAgZm9yIHBpcGVsaW5lIHRocmVzaG9sZCBzdHVkaWVzCitldmVudDowWDM1MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVX0xNUV9MSFJfTUVSR0VfR1JQNTMgOiAoR3JvdXAgNTMgcG1fdGhyZXNob2xkKSBMTVEgTEhSIG1lcmdlcworZXZlbnQ6MFgzNTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1RIUkVTSF9USU1FT19HUlA1MyA6IChHcm91cCA1MyBwbV90aHJlc2hvbGQpIFRocmVzaG9sZCB0aW1lb3V0CitldmVudDowWDM1MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVX0xNUV9TMF9WQUxJRF9HUlA1MyA6IChHcm91cCA1MyBwbV90aHJlc2hvbGQpIExNUSBzbG90IDAgdmFsaWQKK2V2ZW50OjBYMzUzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDUzIDogKEdyb3VwIDUzIHBtX3RocmVzaG9sZCkgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgzNTQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQNTMgOiAoR3JvdXAgNTMgcG1fdGhyZXNob2xkKSBQcm9jZXNzb3IgY3ljbGVzCitldmVudDowWDM1NSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0dSUF9JU1NVRURfR1JQNTMgOiAoR3JvdXAgNTMgcG1fdGhyZXNob2xkKSBNYXJrZWQgZ3JvdXAgaXNzdWVkCitldmVudDowWDM1NiBjb3VudGVyczo2IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fR1JQX0NNUExfR1JQNTMgOiAoR3JvdXAgNTMgcG1fdGhyZXNob2xkKSBHcm91cCBjb21wbGV0ZWQKK2V2ZW50OjBYMzU3IGNvdW50ZXJzOjcgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1VfTE1RX1MwX0FMTE9DX0dSUDUzIDogKEdyb3VwIDUzIHBtX3RocmVzaG9sZCkgTE1RIHNsb3QgMCBhbGxvY2F0ZWQKKworI0dyb3VwIDU0IHBtX3BlX2JlbmNoMSwgUEUgQmVuY2htYXJrZXIgZ3JvdXAgZm9yIEZQIGFuYWx5c2lzCitldmVudDowWDM2MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVX0ZESVZfR1JQNTQgOiAoR3JvdXAgNTQgcG1fcGVfYmVuY2gxKSBGUFUgZXhlY3V0ZWQgRkRJViBpbnN0cnVjdGlvbgorZXZlbnQ6MFgzNjEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVV9GTUFfR1JQNTQgOiAoR3JvdXAgNTQgcG1fcGVfYmVuY2gxKSBGUFUgZXhlY3V0ZWQgbXVsdGlwbHktYWRkIGluc3RydWN0aW9uCitldmVudDowWDM2MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlhVX0ZJTl9HUlA1NCA6IChHcm91cCA1NCBwbV9wZV9iZW5jaDEpIEZYVSBwcm9kdWNlZCBhIHJlc3VsdAorZXZlbnQ6MFgzNjMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVV9GSU5fR1JQNTQgOiAoR3JvdXAgNTQgcG1fcGVfYmVuY2gxKSBGUFUgcHJvZHVjZWQgYSByZXN1bHQKK2V2ZW50OjBYMzY0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDU0IDogKEdyb3VwIDU0IHBtX3BlX2JlbmNoMSkgUHJvY2Vzc29yIGN5Y2xlcworZXZlbnQ6MFgzNjUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVV9GU1FSVF9HUlA1NCA6IChHcm91cCA1NCBwbV9wZV9iZW5jaDEpIEZQVSBleGVjdXRlZCBGU1FSVCBpbnN0cnVjdGlvbgorZXZlbnQ6MFgzNjYgY291bnRlcnM6NiB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQNTQgOiAoR3JvdXAgNTQgcG1fcGVfYmVuY2gxKSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDM2NyBjb3VudGVyczo3IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVX0ZNT1ZfRkVTVF9HUlA1NCA6IChHcm91cCA1NCBwbV9wZV9iZW5jaDEpIEZQVSBleGVjdXRpbmcgRk1PViBvciBGRVNUIGluc3RydWN0aW9ucworCisjR3JvdXAgNTUgcG1fcGVfYmVuY2gyLCBQRSBCZW5jaG1hcmtlciBncm91cCBmb3IgRlAgc3RhbGxzIGFuYWx5c2lzCitldmVudDowWDM3MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlA1NSA6IChHcm91cCA1NSBwbV9wZV9iZW5jaDIpIFByb2Nlc3NvciBjeWNsZXMKK2V2ZW50OjBYMzcxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFVfU1RBTEwzX0dSUDU1IDogKEdyb3VwIDU1IHBtX3BlX2JlbmNoMikgRlBVIHN0YWxsZWQgaW4gcGlwZTMKK2V2ZW50OjBYMzcyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFUwX0ZJTl9HUlA1NSA6IChHcm91cCA1NSBwbV9wZV9iZW5jaDIpIEZQVTAgcHJvZHVjZWQgYSByZXN1bHQKK2V2ZW50OjBYMzczIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDU1IDogKEdyb3VwIDU1IHBtX3BlX2JlbmNoMikgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgzNzQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVV9GVUxMX0NZQ19HUlA1NSA6IChHcm91cCA1NSBwbV9wZV9iZW5jaDIpIEN5Y2xlcyBGUFUgaXNzdWUgcXVldWUgZnVsbAorZXZlbnQ6MFgzNzUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVV9TVEZfR1JQNTUgOiAoR3JvdXAgNTUgcG1fcGVfYmVuY2gyKSBGUFUgZXhlY3V0ZWQgc3RvcmUgaW5zdHJ1Y3Rpb24KK2V2ZW50OjBYMzc2IGNvdW50ZXJzOjYgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFUxX0ZJTl9HUlA1NSA6IChHcm91cCA1NSBwbV9wZV9iZW5jaDIpIEZQVTEgcHJvZHVjZWQgYSByZXN1bHQKK2V2ZW50OjBYMzc3IGNvdW50ZXJzOjcgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1VfTERGX0dSUDU1IDogKEdyb3VwIDU1IHBtX3BlX2JlbmNoMikgTFNVIGV4ZWN1dGVkIEZsb2F0aW5nIFBvaW50IGxvYWQgaW5zdHJ1Y3Rpb24KKworI0dyb3VwIDU2IHBtX3BlX2JlbmNoMywgUEUgQmVuY2htYXJrZXIgZ3JvdXAgZm9yIGJyYW5jaCBhbmFseXNpcworZXZlbnQ6MFgzODAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQNTYgOiAoR3JvdXAgNTYgcG1fcGVfYmVuY2gzKSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDM4MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fQklRX0lEVV9GVUxMX0NZQ19HUlA1NiA6IChHcm91cCA1NiBwbV9wZV9iZW5jaDMpIEN5Y2xlcyBCSVEgb3IgSURVIGZ1bGwKK2V2ZW50OjBYMzgyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9CUl9JU1NVRURfR1JQNTYgOiAoR3JvdXAgNTYgcG1fcGVfYmVuY2gzKSBCcmFuY2hlcyBpc3N1ZWQKK2V2ZW50OjBYMzgzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9CUl9NUFJFRF9DUl9HUlA1NiA6IChHcm91cCA1NiBwbV9wZV9iZW5jaDMpIEJyYW5jaCBtaXNwcmVkaWN0aW9ucyBkdWUgQ1IgYml0IHNldHRpbmcKK2V2ZW50OjBYMzg0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9CUlFfRlVMTF9DWUNfR1JQNTYgOiAoR3JvdXAgNTYgcG1fcGVfYmVuY2gzKSBDeWNsZXMgYnJhbmNoIHF1ZXVlIGZ1bGwKK2V2ZW50OjBYMzg1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDU2IDogKEdyb3VwIDU2IHBtX3BlX2JlbmNoMykgUHJvY2Vzc29yIGN5Y2xlcworZXZlbnQ6MFgzODYgY291bnRlcnM6NiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0JSX01QUkVEX1RBX0dSUDU2IDogKEdyb3VwIDU2IHBtX3BlX2JlbmNoMykgQnJhbmNoIG1pc3ByZWRpY3Rpb25zIGR1ZSB0byB0YXJnZXQgYWRkcmVzcworZXZlbnQ6MFgzODcgY291bnRlcnM6NyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wxX1dSSVRFX0NZQ19HUlA1NiA6IChHcm91cCA1NiBwbV9wZV9iZW5jaDMpIEN5Y2xlcyB3cml0aW5nIHRvIGluc3RydWN0aW9uIEwxCisKKyNHcm91cCA1NyBwbV9wZV9iZW5jaDQsIFBFIEJlbmNobWFya2VyIGdyb3VwIGZvciBMMSBhbmQgVExCIGFuYWx5c2lzCitldmVudDowWDM5MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRFRMQl9NSVNTX0dSUDU3IDogKEdyb3VwIDU3IHBtX3BlX2JlbmNoNCkgRGF0YSBUTEIgbWlzc2VzCitldmVudDowWDM5MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSVRMQl9NSVNTX0dSUDU3IDogKEdyb3VwIDU3IHBtX3BlX2JlbmNoNCkgSW5zdHJ1Y3Rpb24gVExCIG1pc3NlcworZXZlbnQ6MFgzOTIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xEX01JU1NfTDFfR1JQNTcgOiAoR3JvdXAgNTcgcG1fcGVfYmVuY2g0KSBMMSBEIGNhY2hlIGxvYWQgbWlzc2VzCitldmVudDowWDM5MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fU1RfTUlTU19MMV9HUlA1NyA6IChHcm91cCA1NyBwbV9wZV9iZW5jaDQpIEwxIEQgY2FjaGUgc3RvcmUgbWlzc2VzCitldmVudDowWDM5NCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlA1NyA6IChHcm91cCA1NyBwbV9wZV9iZW5jaDQpIFByb2Nlc3NvciBjeWNsZXMKK2V2ZW50OjBYMzk1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDU3IDogKEdyb3VwIDU3IHBtX3BlX2JlbmNoNCkgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgzOTYgY291bnRlcnM6NiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1NUX1JFRl9MMV9HUlA1NyA6IChHcm91cCA1NyBwbV9wZV9iZW5jaDQpIEwxIEQgY2FjaGUgc3RvcmUgcmVmZXJlbmNlcworZXZlbnQ6MFgzOTcgY291bnRlcnM6NyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xEX1JFRl9MMV9HUlA1NyA6IChHcm91cCA1NyBwbV9wZV9iZW5jaDQpIEwxIEQgY2FjaGUgbG9hZCByZWZlcmVuY2VzCisKKyNHcm91cCA1OCBwbV9wZV9iZW5jaDUsIFBFIEJlbmNobWFya2VyIGdyb3VwIGZvciBMMiBhbmFseXNpcworZXZlbnQ6MFgzQTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQNTggOiAoR3JvdXAgNTggcG1fcGVfYmVuY2g1KSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDNBMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlA1OCA6IChHcm91cCA1OCBwbV9wZV9iZW5jaDUpIFByb2Nlc3NvciBjeWNsZXMKK2V2ZW50OjBYM0EyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQVRBX0ZST01fTDM1X0dSUDU4IDogKEdyb3VwIDU4IHBtX3BlX2JlbmNoNSkgRGF0YSBsb2FkZWQgZnJvbSBMMy41CitldmVudDowWDNBMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fREFUQV9GUk9NX0wyX0dSUDU4IDogKEdyb3VwIDU4IHBtX3BlX2JlbmNoNSkgRGF0YSBsb2FkZWQgZnJvbSBMMgorZXZlbnQ6MFgzQTQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RBVEFfRlJPTV9MMjVfU0hSX0dSUDU4IDogKEdyb3VwIDU4IHBtX3BlX2JlbmNoNSkgRGF0YSBsb2FkZWQgZnJvbSBMMi41IHNoYXJlZAorZXZlbnQ6MFgzQTUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RBVEFfRlJPTV9MMjc1X1NIUl9HUlA1OCA6IChHcm91cCA1OCBwbV9wZV9iZW5jaDUpIERhdGEgbG9hZGVkIGZyb20gTDIuNzUgc2hhcmVkCitldmVudDowWDNBNiBjb3VudGVyczo2IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fREFUQV9GUk9NX0wyNzVfTU9EX0dSUDU4IDogKEdyb3VwIDU4IHBtX3BlX2JlbmNoNSkgRGF0YSBsb2FkZWQgZnJvbSBMMi43NSBtb2RpZmllZAorZXZlbnQ6MFgzQTcgY291bnRlcnM6NyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RBVEFfRlJPTV9MMjVfTU9EX0dSUDU4IDogKEdyb3VwIDU4IHBtX3BlX2JlbmNoNSkgRGF0YSBsb2FkZWQgZnJvbSBMMi41IG1vZGlmaWVkCisKKyNHcm91cCA1OSBwbV9wZV9iZW5jaDYsIFBFIEJlbmNobWFya2VyIGdyb3VwIGZvciBMMyBhbmFseXNpcworZXZlbnQ6MFgzQjAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RBVEFfRlJPTV9MM19HUlA1OSA6IChHcm91cCA1OSBwbV9wZV9iZW5jaDYpIERhdGEgbG9hZGVkIGZyb20gTDMKK2V2ZW50OjBYM0IxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQVRBX0ZST01fTUVNX0dSUDU5IDogKEdyb3VwIDU5IHBtX3BlX2JlbmNoNikgRGF0YSBsb2FkZWQgZnJvbSBtZW1vcnkKK2V2ZW50OjBYM0IyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQVRBX0ZST01fTDM1X0dSUDU5IDogKEdyb3VwIDU5IHBtX3BlX2JlbmNoNikgRGF0YSBsb2FkZWQgZnJvbSBMMy41CitldmVudDowWDNCMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fREFUQV9GUk9NX0wyX0dSUDU5IDogKEdyb3VwIDU5IHBtX3BlX2JlbmNoNikgRGF0YSBsb2FkZWQgZnJvbSBMMgorZXZlbnQ6MFgzQjQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RBVEFfRlJPTV9MMjVfU0hSX0dSUDU5IDogKEdyb3VwIDU5IHBtX3BlX2JlbmNoNikgRGF0YSBsb2FkZWQgZnJvbSBMMi41IHNoYXJlZAorZXZlbnQ6MFgzQjUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQNTkgOiAoR3JvdXAgNTkgcG1fcGVfYmVuY2g2KSBQcm9jZXNzb3IgY3ljbGVzCitldmVudDowWDNCNiBjb3VudGVyczo2IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlA1OSA6IChHcm91cCA1OSBwbV9wZV9iZW5jaDYpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYM0I3IGNvdW50ZXJzOjcgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQVRBX0ZST01fTDI1X01PRF9HUlA1OSA6IChHcm91cCA1OSBwbV9wZV9iZW5jaDYpIERhdGEgbG9hZGVkIGZyb20gTDIuNSBtb2RpZmllZAorCisjR3JvdXAgNjAgcG1faHBtY291bnQxLCBIcG1jb3VudCBncm91cCBmb3IgTDEgYW5kIFRMQiBiZWhhdmlvciBhbmFseXNpcworZXZlbnQ6MFgzQzAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RUTEJfTUlTU19HUlA2MCA6IChHcm91cCA2MCBwbV9ocG1jb3VudDEpIERhdGEgVExCIG1pc3NlcworZXZlbnQ6MFgzQzEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9MTVFfU1JRX0VNUFRZX0NZQ19HUlA2MCA6IChHcm91cCA2MCBwbV9ocG1jb3VudDEpIEN5Y2xlcyBMTVEgYW5kIFNSUSBlbXB0eQorZXZlbnQ6MFgzQzIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xEX01JU1NfTDFfR1JQNjAgOiAoR3JvdXAgNjAgcG1faHBtY291bnQxKSBMMSBEIGNhY2hlIGxvYWQgbWlzc2VzCitldmVudDowWDNDMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fU1RfTUlTU19MMV9HUlA2MCA6IChHcm91cCA2MCBwbV9ocG1jb3VudDEpIEwxIEQgY2FjaGUgc3RvcmUgbWlzc2VzCitldmVudDowWDNDNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlA2MCA6IChHcm91cCA2MCBwbV9ocG1jb3VudDEpIFByb2Nlc3NvciBjeWNsZXMKK2V2ZW50OjBYM0M1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDYwIDogKEdyb3VwIDYwIHBtX2hwbWNvdW50MSkgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgzQzYgY291bnRlcnM6NiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1NUX1JFRl9MMV9HUlA2MCA6IChHcm91cCA2MCBwbV9ocG1jb3VudDEpIEwxIEQgY2FjaGUgc3RvcmUgcmVmZXJlbmNlcworZXZlbnQ6MFgzQzcgY291bnRlcnM6NyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xEX1JFRl9MMV9HUlA2MCA6IChHcm91cCA2MCBwbV9ocG1jb3VudDEpIEwxIEQgY2FjaGUgbG9hZCByZWZlcmVuY2VzCisKKyNHcm91cCA2MSBwbV9ocG1jb3VudDIsIEhwbWNvdW50IGdyb3VwIGZvciBjb21wdXRhdGlvbiBpbnRlbnNpdHkgYW5hbHlzaXMKK2V2ZW50OjBYM0QwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFVfRkRJVl9HUlA2MSA6IChHcm91cCA2MSBwbV9ocG1jb3VudDIpIEZQVSBleGVjdXRlZCBGRElWIGluc3RydWN0aW9uCitldmVudDowWDNEMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVX0ZNQV9HUlA2MSA6IChHcm91cCA2MSBwbV9ocG1jb3VudDIpIEZQVSBleGVjdXRlZCBtdWx0aXBseS1hZGQgaW5zdHJ1Y3Rpb24KK2V2ZW50OjBYM0QyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFUwX0ZJTl9HUlA2MSA6IChHcm91cCA2MSBwbV9ocG1jb3VudDIpIEZQVTAgcHJvZHVjZWQgYSByZXN1bHQKK2V2ZW50OjBYM0QzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFUxX0ZJTl9HUlA2MSA6IChHcm91cCA2MSBwbV9ocG1jb3VudDIpIEZQVTEgcHJvZHVjZWQgYSByZXN1bHQKK2V2ZW50OjBYM0Q0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDYxIDogKEdyb3VwIDYxIHBtX2hwbWNvdW50MikgUHJvY2Vzc29yIGN5Y2xlcworZXZlbnQ6MFgzRDUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVV9TVEZfR1JQNjEgOiAoR3JvdXAgNjEgcG1faHBtY291bnQyKSBGUFUgZXhlY3V0ZWQgc3RvcmUgaW5zdHJ1Y3Rpb24KK2V2ZW50OjBYM0Q2IGNvdW50ZXJzOjYgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDYxIDogKEdyb3VwIDYxIHBtX2hwbWNvdW50MikgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgzRDcgY291bnRlcnM6NyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9MREZfR1JQNjEgOiAoR3JvdXAgNjEgcG1faHBtY291bnQyKSBMU1UgZXhlY3V0ZWQgRmxvYXRpbmcgUG9pbnQgbG9hZCBpbnN0cnVjdGlvbgorCisjR3JvdXAgNjIgcG1fbDFhbmRiciwgTDEgbWlzc2VzIGFuZCBicmFuY2ggbWlzc3ByZWRpY3QgYW5hbHlzaXMKK2V2ZW50OjBYM0UwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDYyIDogKEdyb3VwIDYyIHBtX2wxYW5kYnIpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYM0UxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDYyIDogKEdyb3VwIDYyIHBtX2wxYW5kYnIpIFByb2Nlc3NvciBjeWNsZXMKK2V2ZW50OjBYM0UyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MRF9NSVNTX0wxX0dSUDYyIDogKEdyb3VwIDYyIHBtX2wxYW5kYnIpIEwxIEQgY2FjaGUgbG9hZCBtaXNzZXMKK2V2ZW50OjBYM0UzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9CUl9JU1NVRURfR1JQNjIgOiAoR3JvdXAgNjIgcG1fbDFhbmRicikgQnJhbmNoZXMgaXNzdWVkCitldmVudDowWDNFNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fU1RfTUlTU19MMV9HUlA2MiA6IChHcm91cCA2MiBwbV9sMWFuZGJyKSBMMSBEIGNhY2hlIHN0b3JlIG1pc3NlcworZXZlbnQ6MFgzRTUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQNjIgOiAoR3JvdXAgNjIgcG1fbDFhbmRicikgUHJvY2Vzc29yIGN5Y2xlcworZXZlbnQ6MFgzRTYgY291bnRlcnM6NiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0JSX01QUkVEX0NSX0dSUDYyIDogKEdyb3VwIDYyIHBtX2wxYW5kYnIpIEJyYW5jaCBtaXNwcmVkaWN0aW9ucyBkdWUgQ1IgYml0IHNldHRpbmcKK2V2ZW50OjBYM0U3IGNvdW50ZXJzOjcgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9CUl9NUFJFRF9UQV9HUlA2MiA6IChHcm91cCA2MiBwbV9sMWFuZGJyKSBCcmFuY2ggbWlzcHJlZGljdGlvbnMgZHVlIHRvIHRhcmdldCBhZGRyZXNzCisKKyNHcm91cCA2MyBwbV9pbWl4LCBJbnN0cnVjdGlvbiBtaXg6IGxvYWRzLCBzdG9yZXMgYW5kIGJyYW5jaGVzCitldmVudDowWDNGMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlA2MyA6IChHcm91cCA2MyBwbV9pbWl4KSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDNGMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlA2MyA6IChHcm91cCA2MyBwbV9pbWl4KSBQcm9jZXNzb3IgY3ljbGVzCitldmVudDowWDNGMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTERfTUlTU19MMV9HUlA2MyA6IChHcm91cCA2MyBwbV9pbWl4KSBMMSBEIGNhY2hlIGxvYWQgbWlzc2VzCitldmVudDowWDNGMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fQlJfSVNTVUVEX0dSUDYzIDogKEdyb3VwIDYzIHBtX2ltaXgpIEJyYW5jaGVzIGlzc3VlZAorZXZlbnQ6MFgzRjQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQNjMgOiAoR3JvdXAgNjMgcG1faW1peCkgUHJvY2Vzc29yIGN5Y2xlcworZXZlbnQ6MFgzRjUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1NUX01JU1NfTDFfR1JQNjMgOiAoR3JvdXAgNjMgcG1faW1peCkgTDEgRCBjYWNoZSBzdG9yZSBtaXNzZXMKK2V2ZW50OjBYM0Y2IGNvdW50ZXJzOjYgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9TVF9SRUZfTDFfR1JQNjMgOiAoR3JvdXAgNjMgcG1faW1peCkgTDEgRCBjYWNoZSBzdG9yZSByZWZlcmVuY2VzCitldmVudDowWDNGNyBjb3VudGVyczo3IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTERfUkVGX0wxX0dSUDYzIDogKEdyb3VwIDYzIHBtX2ltaXgpIEwxIEQgY2FjaGUgbG9hZCByZWZlcmVuY2VzCmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9ldmVudHMvcHBjNjQvcG93ZXI0L3VuaXRfbWFza3MgYi9vcHJvZmlsZS0wLjkuNy9ldmVudHMvcHBjNjQvcG93ZXI0L3VuaXRfbWFza3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzY0M2YwNQotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2V2ZW50cy9wcGM2NC9wb3dlcjQvdW5pdF9tYXNrcwpAQCAtMCwwICsxLDUgQEAKKyMgcHBjNjQgUE9XRVI0IHBvc3NpYmxlIHVuaXQgbWFza3MKKyMKK25hbWU6emVybyB0eXBlOm1hbmRhdG9yeSBkZWZhdWx0OjB4MAorCTB4MCBObyB1bml0IG1hc2sKKwpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL3BwYzY0L3Bvd2VyNSsrL2V2ZW50X21hcHBpbmdzIGIvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL3BwYzY0L3Bvd2VyNSsrL2V2ZW50X21hcHBpbmdzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3ZWQxN2IKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9ldmVudHMvcHBjNjQvcG93ZXI1KysvZXZlbnRfbWFwcGluZ3MKQEAgLTAsMCArMSwxMTQwIEBACisjCisjIENvcHlyaWdodCBPUHJvZmlsZSBhdXRob3JzCisjIENvcHlyaWdodCAoYykgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcywgMjAwNy4KKyMgQ29udHJpYnV0ZWQgYnkgTWF5bmFyZCBKb2huc29uIDxtYXluYXJkakB1cy5pYm0uY29tPi4KKyMKKyNNYXBwaW5nIG9mIGV2ZW50IGdyb3VwcyB0byBNTUNSIHZhbHVlcworCisjR3JvdXAgRGVmYXVsdAorZXZlbnQ6MFgwMDEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMEEwMjEyMUUgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMCB3aXRoIHJhbmRvbSBzYW1wbGluZworZXZlbnQ6MFgwMDIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwMDAwMDAwMDIzNDFFMzYgbW1jcmE6MFgwMDAwMDAwMQorCisjR3JvdXAgMSBwbV91dGlsaXphdGlvbiwgQ1BJIGFuZCB1dGlsaXphdGlvbiBkYXRhCitldmVudDowWDAwMTAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMEExMjEyMUUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMDExIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDBBMTIxMjFFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDAxMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAwQTEyMTIxRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAwMTMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMEExMjEyMUUgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMiBwbV9jb21wbGV0aW9uLCBDb21wbGV0aW9uIGFuZCBjeWNsZSBjb3VudHMKK2V2ZW50OjBYMDAyMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAyNjA4MjYxRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAwMjEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMjYwODI2MUUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMDIyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDI2MDgyNjFFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDAyMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAyNjA4MjYxRSBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAzIHBtX2dyb3VwX2Rpc3BhdGNoLCBHcm91cCBkaXNwYXRjaCBldmVudHMKK2V2ZW50OjBYMDAzMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMDAwMEVDNkM4QzIxMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAwMzEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwMDAwMDBFQzZDOEMyMTIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMDMyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MDAwMDAwRUM2QzhDMjEyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDAzMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMDAwMEVDNkM4QzIxMiBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCA0IHBtX2NsYjEsIENMQiBmdWxsbmVzcworZXZlbnQ6MFgwMDQwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMTVCMDAwMTgwODQ4QzRDIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMDA0MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDE1QjAwMDE4MDg0OEM0QyBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDAwNDIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAxNUIwMDAxODA4NDhDNEMgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwMDQzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMTVCMDAwMTgwODQ4QzRDIG1tY3JhOjBYMDAwMDAwMDEKKworI0dyb3VwIDUgcG1fY2xiMiwgQ0xCIGZ1bGxuZXNzCitldmVudDowWDAwNTAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAxNDMwMDAyOEE4Q0NDMDIgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwMDUxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMTQzMDAwMjhBOENDQzAyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMDA1MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDE0MzAwMDI4QThDQ0MwMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDAwNTMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAxNDMwMDAyOEE4Q0NDMDIgbW1jcmE6MFgwMDAwMDAwMQorCisjR3JvdXAgNiBwbV9nY3RfZW1wdHksIEdDVCBlbXB0eSByZWFzb25zCitldmVudDowWDAwNjAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwMDAwMDAwMDgzODA4MzggbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMDYxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MDAwMDAwMDA4MzgwODM4IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDA2MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMDAwMDAwODM4MDgzOCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAwNjMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwMDAwMDAwMDgzODA4MzggbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgNyBwbV9nY3RfdXNhZ2UsIEdDVCBVc2FnZQorZXZlbnQ6MFgwMDcwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDNFM0UzRTNFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDA3MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAzRTNFM0UzRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAwNzIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwM0UzRTNFM0UgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMDczIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDNFM0UzRTNFIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDggcG1fbHN1MSwgTFNVIExSUSBhbmQgTE1RIGV2ZW50cworZXZlbnQ6MFgwMDgwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMjBGMDAwRkNFQ0NDQ0NBIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDA4MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDIwRjAwMEZDRUNDQ0NDQSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAwODIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAyMEYwMDBGQ0VDQ0NDQ0EgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMDgzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMjBGMDAwRkNFQ0NDQ0NBIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDkgcG1fbHN1MiwgTFNVIFNSUSBldmVudHMKK2V2ZW50OjBYMDA5MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwRTAwMEVDRUNDQ0E4NiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAwOTEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwMEUwMDBFQ0VDQ0NBODYgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMDkyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MDBFMDAwRUNFQ0NDQTg2IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDA5MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwRTAwMEVDRUNDQ0E4NiBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxMCBwbV9sc3UzLCBMU1UgU1JRIGFuZCBMTVEgZXZlbnRzCitldmVudDowWDAwQTAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAzMEYwMDA0RUExMDJBMkEgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMEExIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMzBGMDAwNEVBMTAyQTJBIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDBBMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDMwRjAwMDRFQTEwMkEyQSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAwQTMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAzMEYwMDA0RUExMDJBMkEgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMTEgcG1fbHN1NCwgTFNVIFNSUSBhbmQgTE1RIGV2ZW50cworZXZlbnQ6MFgwMEIwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MDAzMDAwMEVFQTYyQTJBIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDBCMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMzAwMDBFRUE2MkEyQSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAwQjIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwMDMwMDAwRUVBNjJBMkEgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMEIzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MDAzMDAwMEVFQTYyQTJBIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDEyIHBtX3ByZWZldGNoMSwgUHJlZmV0Y2ggc3RyZWFtIGFsbG9jYXRpb24KK2V2ZW50OjBYMDBDMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYODQzMjAwMEQzNkM4ODRDRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAwQzEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDg0MzIwMDBEMzZDODg0Q0UgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMEMyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg4NDMyMDAwRDM2Qzg4NENFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDBDMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYODQzMjAwMEQzNkM4ODRDRSBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxMyBwbV9wcmVmZXRjaDIsIFByZWZldGNoIGV2ZW50cworZXZlbnQ6MFgwMEQwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg4MTAzMDAwNjAyQ0FDRThFIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMDBEMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYODEwMzAwMDYwMkNBQ0U4RSBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDAwRDIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDgxMDMwMDA2MDJDQUNFOEUgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwMEQzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg4MTAzMDAwNjAyQ0FDRThFIG1tY3JhOjBYMDAwMDAwMDEKKworI0dyb3VwIDE0IHBtX3ByZWZldGNoMywgTDIgcHJlZmV0Y2ggYW5kIG1pc2MgZXZlbnRzCitldmVudDowWDAwRTAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDA0N0MwMDA0ODIxMDg2MDIgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwMEUxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwNDdDMDAwNDgyMTA4NjAyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMDBFMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDQ3QzAwMDQ4MjEwODYwMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDAwRTMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDA0N0MwMDA0ODIxMDg2MDIgbW1jcmE6MFgwMDAwMDAwMQorCisjR3JvdXAgMTUgcG1fcHJlZmV0Y2g0LCBNaXNjIHByZWZldGNoIGFuZCByZWplY3QgZXZlbnRzCitldmVudDowWDAwRjAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDBDRjIwMDAyODA4OENDODYgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMEYxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwQ0YyMDAwMjgwODhDQzg2IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDBGMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMENGMjAwMDI4MDg4Q0M4NiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAwRjMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDBDRjIwMDAyODA4OENDODYgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMTYgcG1fbHN1X3JlamVjdDEsIExTVSByZWplY3QgZXZlbnRzCitldmVudDowWDAxMDAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEM4RTAwMDAyMjAxMEM2MTAgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwMTAxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhDOEUwMDAwMjIwMTBDNjEwIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMDEwMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQzhFMDAwMDIyMDEwQzYxMCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDAxMDMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEM4RTAwMDAyMjAxMEM2MTAgbW1jcmE6MFgwMDAwMDAwMQorCisjR3JvdXAgMTcgcG1fbHN1X3JlamVjdDIsIExTVSByZWplY3RzIGR1ZSB0byByZWxvYWQgQ0RGIG9yIHRhZyB1cGRhdGUgY29sbGlzaW9uCitldmVudDowWDAxMTAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDg4QzAwMDAxODQ4QzAyQ0UgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwMTExIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg4OEMwMDAwMTg0OEMwMkNFIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMDExMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYODhDMDAwMDE4NDhDMDJDRSBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDAxMTMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDg4QzAwMDAxODQ4QzAyQ0UgbW1jcmE6MFgwMDAwMDAwMQorCisjR3JvdXAgMTggcG1fbHN1X3JlamVjdDMsIExTVSByZWplY3RzIGR1ZSB0byBFUkFULCBoZWxkIGluc3R1Y3Rpb25zCitldmVudDowWDAxMjAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQ4QzAwMDAzODY4RUMwQzggbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMTIxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0OEMwMDAwMzg2OEVDMEM4IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDEyMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDhDMDAwMDM4NjhFQzBDOCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAxMjMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQ4QzAwMDAzODY4RUMwQzggbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMTkgcG1fbHN1X3JlamVjdDQsIExTVTAvMSByZWplY3QgTE1RIGZ1bGwKK2V2ZW50OjBYMDEzMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYODhDMDAwMDE4MjhBMDJDOCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDAxMzEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDg4QzAwMDAxODI4QTAyQzggbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwMTMyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg4OEMwMDAwMTgyOEEwMkM4IG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMDEzMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYODhDMDAwMDE4MjhBMDJDOCBtbWNyYTowWDAwMDAwMDAxCisKKyNHcm91cCAyMCBwbV9sc3VfcmVqZWN0NSwgTFNVIG1pc2MgcmVqZWN0IGFuZCBmbHVzaCBldmVudHMKK2V2ZW50OjBYMDE0MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDhDMDAwMDAxMDIwOEE4RSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAxNDEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQ4QzAwMDAwMTAyMDhBOEUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMTQyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0OEMwMDAwMDEwMjA4QThFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDE0MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDhDMDAwMDAxMDIwOEE4RSBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAyMSBwbV9mbHVzaDEsIE1pc2MgZmx1c2ggZXZlbnRzCitldmVudDowWDAxNTAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEMwRjAwMDAyMDIxMEM2OEUgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwMTUxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhDMEYwMDAwMjAyMTBDNjhFIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMDE1MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQzBGMDAwMDIwMjEwQzY4RSBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDAxNTMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEMwRjAwMDAyMDIxMEM2OEUgbW1jcmE6MFgwMDAwMDAwMQorCisjR3JvdXAgMjIgcG1fZmx1c2gyLCBGbHVzaGVzIGR1ZSB0byBzY29yZWJvYXJkIGFuZCBzeW5jCitldmVudDowWDAxNjAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEMwODAwMDAzODAwMkM0QzIgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwMTYxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhDMDgwMDAwMzgwMDJDNEMyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMDE2MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQzA4MDAwMDM4MDAyQzRDMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDAxNjMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEMwODAwMDAzODAwMkM0QzIgbW1jcmE6MFgwMDAwMDAwMQorCisjR3JvdXAgMjMgcG1fbHN1X2ZsdXNoX3NycV9scnEsIExTVSBmbHVzaCBieSBTUlEgYW5kIExSUSBldmVudHMKK2V2ZW50OjBYMDE3MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDBDMDAwMDAyMDIwMDI4QSBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDAxNzEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwQzAwMDAwMjAyMDAyOEEgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwMTcyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MEMwMDAwMDIwMjAwMjhBIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMDE3MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDBDMDAwMDAyMDIwMDI4QSBtbWNyYTowWDAwMDAwMDAxCisKKyNHcm91cCAyNCBwbV9sc3VfZmx1c2hfbHJxLCBMU1UwLzEgZmx1c2ggZHVlIHRvIExSUQorZXZlbnQ6MFgwMTgwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MEMwMDAwMDg0OEM4QTAyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMDE4MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDBDMDAwMDA4NDhDOEEwMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDAxODIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwQzAwMDAwODQ4QzhBMDIgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwMTgzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MEMwMDAwMDg0OEM4QTAyIG1tY3JhOjBYMDAwMDAwMDEKKworI0dyb3VwIDI1IHBtX2xzdV9mbHVzaF9zcnEsIExTVTAvMSBmbHVzaCBkdWUgdG8gU1JRCitldmVudDowWDAxOTAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwQzAwMDAwODY4RTAyOEEgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwMTkxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MEMwMDAwMDg2OEUwMjhBIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMDE5MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDBDMDAwMDA4NjhFMDI4QSBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDAxOTMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwQzAwMDAwODY4RTAyOEEgbW1jcmE6MFgwMDAwMDAwMQorCisjR3JvdXAgMjYgcG1fbHN1X2ZsdXNoX3VuYWxpZ25lZCwgTFNVIGZsdXNoIGR1ZSB0byB1bmFsaWduZWQgZGF0YQorZXZlbnQ6MFgwMUEwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg4MEMwMDAwMjEwMTBDODAyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMDFBMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYODBDMDAwMDIxMDEwQzgwMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDAxQTIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDgwQzAwMDAyMTAxMEM4MDIgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwMUEzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg4MEMwMDAwMjEwMTBDODAyIG1tY3JhOjBYMDAwMDAwMDEKKworI0dyb3VwIDI3IHBtX2xzdV9mbHVzaF91bGQsIExTVTAvMSBmbHVzaCBkdWUgdG8gdW5hbGlnbmVkIGxvYWQKK2V2ZW50OjBYMDFCMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDBDMDAwMDA4MDg4OEEwMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDAxQjEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwQzAwMDAwODA4ODhBMDIgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwMUIyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MEMwMDAwMDgwODg4QTAyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMDFCMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDBDMDAwMDA4MDg4OEEwMiBtbWNyYTowWDAwMDAwMDAxCisKKyNHcm91cCAyOCBwbV9sc3VfZmx1c2hfdXN0LCBMU1UwLzEgZmx1c2ggZHVlIHRvIHVuYWxpZ25lZCBzdG9yZQorZXZlbnQ6MFgwMUMwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MEMwMDAwMDgyOEEwMjhBIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMDFDMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDBDMDAwMDA4MjhBMDI4QSBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDAxQzIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwQzAwMDAwODI4QTAyOEEgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwMUMzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MEMwMDAwMDgyOEEwMjhBIG1tY3JhOjBYMDAwMDAwMDEKKworI0dyb3VwIDI5IHBtX2xzdV9mbHVzaF9mdWxsLCBMU1UgZmx1c2ggZHVlIHRvIExSUS9TUlEgZnVsbAorZXZlbnQ6MFgwMUQwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhDMDIwMDAwOUNFMDIxMEMwIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMDFEMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQzAyMDAwMDlDRTAyMTBDMCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDAxRDIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEMwMjAwMDA5Q0UwMjEwQzAgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwMUQzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhDMDIwMDAwOUNFMDIxMEMwIG1tY3JhOjBYMDAwMDAwMDEKKworI0dyb3VwIDMwIHBtX2xzdV9zdGFsbDEsIExTVSBTdGFsbHMKK2V2ZW50OjBYMDFFMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMDAwMDAyODMwMDIzNCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDAxRTEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwMDAwMDAwMjgzMDAyMzQgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwMUUyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MDAwMDAwMDI4MzAwMjM0IG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMDFFMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMDAwMDAyODMwMDIzNCBtbWNyYTowWDAwMDAwMDAxCisKKyNHcm91cCAzMSBwbV9sc3Vfc3RhbGwyLCBMU1UgU3RhbGxzCitldmVudDowWDAxRjAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwMDAwMDAwMDIzNDFFMzYgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwMUYxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MDAwMDAwMDAyMzQxRTM2IG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMDFGMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMDAwMDAwMjM0MUUzNiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDAxRjMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwMDAwMDAwMDIzNDFFMzYgbW1jcmE6MFgwMDAwMDAwMQorCisjR3JvdXAgMzIgcG1fZnh1X3N0YWxsLCBGWFUgU3RhbGxzCitldmVudDowWDAyMDAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwMDAwMDA4Q0EzMjAyMzIgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwMjAxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MDAwMDAwOENBMzIwMjMyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMDIwMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMDAwMDhDQTMyMDIzMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDAyMDMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwMDAwMDA4Q0EzMjAyMzIgbW1jcmE6MFgwMDAwMDAwMQorCisjR3JvdXAgMzMgcG1fZnB1X3N0YWxsLCBGUFUgU3RhbGxzCitldmVudDowWDAyMTAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwMDAwMDAwMjAzNjAyMzAgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwMjExIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MDAwMDAwMDIwMzYwMjMwIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMDIxMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMDAwMDAyMDM2MDIzMCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDAyMTMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwMDAwMDAwMjAzNjAyMzAgbW1jcmE6MFgwMDAwMDAwMQorCisjR3JvdXAgMzQgcG1fcXVldWVfZnVsbCwgQlJRIExSUSBMTVEgcXVldWUgZnVsbAorZXZlbnQ6MFgwMjIwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MDBCMDAwOUNFOEE4NENFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDIyMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwQjAwMDlDRThBODRDRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAyMjIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwMEIwMDA5Q0U4QTg0Q0UgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMjIzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MDBCMDAwOUNFOEE4NENFIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDM1IHBtX2lzc3VlcV9mdWxsLCBGUFUgRlggZnVsbAorZXZlbnQ6MFgwMjMwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MDAwMDAwMDg2OEU4MDg4IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDIzMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMDAwMDA4NjhFODA4OCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAyMzIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwMDAwMDAwODY4RTgwODggbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMjMzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MDAwMDAwMDg2OEU4MDg4IG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDM2IHBtX21hcHBlcl9mdWxsMSwgQ1IgQ1RSIEdQUiBtYXBwZXIgZnVsbAorZXZlbnQ6MFgwMjQwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MDAwMDAwMjg4OENDQTgyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDI0MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMDAwMDI4ODhDQ0E4MiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAyNDIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwMDAwMDAyODg4Q0NBODIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMjQzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MDAwMDAwMjg4OENDQTgyIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDM3IHBtX21hcHBlcl9mdWxsMiwgRlBSIFhFUiBtYXBwZXIgZnVsbAorZXZlbnQ6MFgwMjUwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MTAzMDAwMjgyODQzNjAyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMDI1MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDEwMzAwMDI4Mjg0MzYwMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDAyNTIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQxMDMwMDAyODI4NDM2MDIgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwMjUzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MTAzMDAwMjgyODQzNjAyIG1tY3JhOjBYMDAwMDAwMDEKKworI0dyb3VwIDM4IHBtX21pc2NfbG9hZCwgTm9uLWNhY2hhYmxlIGxvYWRzIGFuZCBzdGN4IGV2ZW50cworZXZlbnQ6MFgwMjYwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwNDM4MDAwQ0MyQ0E4MjhBIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMDI2MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDQzODAwMENDMkNBODI4QSBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDAyNjIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDA0MzgwMDBDQzJDQTgyOEEgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwMjYzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwNDM4MDAwQ0MyQ0E4MjhBIG1tY3JhOjBYMDAwMDAwMDEKKworI0dyb3VwIDM5IHBtX2ljX2RlbWFuZCwgSUNhY2hlIGRlbWFuZCBmcm9tIEJSIHJlZGlyZWN0CitldmVudDowWDAyNzAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDgwMEMwMDBGQzJDQUMwQzIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMjcxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg4MDBDMDAwRkMyQ0FDMEMyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDI3MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYODAwQzAwMEZDMkNBQzBDMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAyNzMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDgwMEMwMDBGQzJDQUMwQzIgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgNDAgcG1faWNfcHJlZiwgSUNhY2hlIHByZWZldGNoCitldmVudDowWDAyODAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDgwMDAwMDBEQ0VDQzhFMUEgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMjgxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg4MDAwMDAwRENFQ0M4RTFBIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDI4MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYODAwMDAwMERDRUNDOEUxQSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAyODMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDgwMDAwMDBEQ0VDQzhFMUEgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgNDEgcG1faWNfbWlzcywgSUNhY2hlIG1pc3NlcworZXZlbnQ6MFgwMjkwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MDAzMDAwRTMyQ0VDODAyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMDI5MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMzAwMEUzMkNFQzgwMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDAyOTIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwMDMwMDBFMzJDRUM4MDIgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwMjkzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MDAzMDAwRTMyQ0VDODAyIG1tY3JhOjBYMDAwMDAwMDEKKworI0dyb3VwIDQyIHBtX2JyYW5jaF9taXNzLCBCcmFuY2ggbWlzcHJlZGljdCwgVExCIGFuZCBTTEIgbWlzc2VzCitldmVudDowWDAyQTAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDgwODAwMDAzMTAxMENBQ0MgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMkExIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg4MDgwMDAwMzEwMTBDQUNDIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDJBMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYODA4MDAwMDMxMDEwQ0FDQyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAyQTMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDgwODAwMDAzMTAxMENBQ0MgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgNDMgcG1fYnJhbmNoMSwgQnJhbmNoIG9wZXJhdGlvbnMKK2V2ZW50OjBYMDJCMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYODAwMDAwMEYwRTBFMEUwRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAyQjEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDgwMDAwMDBGMEUwRTBFMEUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMkIyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg4MDAwMDAwRjBFMEUwRTBFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDJCMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYODAwMDAwMEYwRTBFMEUwRSBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCA0NCBwbV9icmFuY2gyLCBCcmFuY2ggb3BlcmF0aW9ucworZXZlbnQ6MFgwMkMwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MDAwMDAwQzIyQ0M4QzAyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMDJDMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMDAwMEMyMkNDOEMwMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDAyQzIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwMDAwMDBDMjJDQzhDMDIgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwMkMzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MDAwMDAwQzIyQ0M4QzAyIG1tY3JhOjBYMDAwMDAwMDEKKworI0dyb3VwIDQ1IHBtX0wxX3RsYm1pc3MsIEwxIGxvYWQgYW5kIFRMQiBtaXNzZXMKK2V2ZW50OjBYMDJEMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDBCMDAwMDA4RTg4MTAyMCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAyRDEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwQjAwMDAwOEU4ODEwMjAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMkQyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMEIwMDAwMDhFODgxMDIwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDJEMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDBCMDAwMDA4RTg4MTAyMCBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCA0NiBwbV9MMV9ERVJBVF9taXNzLCBMMSBzdG9yZSBhbmQgREVSQVQgbWlzc2VzCitldmVudDowWDAyRTAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwQjMwMDA4MEUyMDIwODYgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMkUxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMEIzMDAwODBFMjAyMDg2IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDJFMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDBCMzAwMDgwRTIwMjA4NiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAyRTMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwQjMwMDA4MEUyMDIwODYgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgNDcgcG1fTDFfc2xibWlzcywgTDEgbG9hZCBhbmQgU0xCIG1pc3NlcworZXZlbnQ6MFgwMkYwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMEIwMDAwMDhBODI4NDhDIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDJGMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDBCMDAwMDA4QTgyODQ4QyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAyRjIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwQjAwMDAwOEE4Mjg0OEMgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMkYzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMEIwMDAwMDhBODI4NDhDIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDQ4IHBtX2R0bGJyZWYsIERhdGEgVExCIHJlZmVyZW5jZXMKK2V2ZW50OjBYMDMwMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwQzAwMEYwQzBDMEMwQyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAzMDEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMEMwMDBGMEMwQzBDMEMgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMzAyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDBDMDAwRjBDMEMwQzBDIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDMwMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwQzAwMEYwQzBDMEMwQyBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCA0OSBwbV9kdGxibWlzcywgRGF0YSBUTEIgbWlzc2VzCitldmVudDowWDAzMTAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMEMwMDBGMUExQTFBMUEgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMzExIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDBDMDAwRjFBMUExQTFBIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDMxMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwQzAwMEYxQTFBMUExQSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAzMTMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMEMwMDBGMUExQTFBMUEgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgNTAgcG1fZHRsYiwgRGF0YSBUTEIgcmVmZXJlbmNlcyBhbmQgbWlzc2VzCitldmVudDowWDAzMjAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwOEMwMDA4Qzg4ODFFMUUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMzIxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDhDMDAwOEM4ODgxRTFFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDMyMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDA4QzAwMDhDODg4MUUxRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAzMjMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwOEMwMDA4Qzg4ODFFMUUgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgNTEgcG1fTDFfcmVmbWlzcywgTDEgbG9hZCByZWZlcmVuY2VzIGFuZCBtaXNzZXMgYW5kIHN0b3JlIHJlZmVyZW5jZXMgYW5kIG1pc3NlcworZXZlbnQ6MFgwMzMwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDMwMDAwMDUwNTAxMDg2IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDMzMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAzMDAwMDA1MDUwMTA4NiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAzMzIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMzAwMDAwNTA1MDEwODYgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMzMzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDMwMDAwMDUwNTAxMDg2IG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDUyIHBtX2Rzb3VyY2UxLCBMMyBjYWNoZSBhbmQgbWVtb3J5IGRhdGEgYWNjZXNzCitldmVudDowWDAzNDAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwMDMwMDBDMUMwRThFMDIgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwMzQxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MDAzMDAwQzFDMEU4RTAyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMDM0MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMzAwMEMxQzBFOEUwMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDAzNDMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwMDMwMDBDMUMwRThFMDIgbW1jcmE6MFgwMDAwMDAwMQorCisjR3JvdXAgNTMgcG1fZHNvdXJjZTIsIEwzIGNhY2hlIGFuZCBtZW1vcnkgZGF0YSBhY2Nlc3MKK2V2ZW50OjBYMDM1MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMzAwMEYxQzBFMzYwRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAzNTEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDMwMDBGMUMwRTM2MEUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMzUyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAzMDAwRjFDMEUzNjBFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDM1MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMzAwMEYxQzBFMzYwRSBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCA1NCBwbV9kc291cmNlX0wyLCBMMiBjYWNoZSBkYXRhIGFjY2VzcworZXZlbnQ6MFgwMzYwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAzMDAwRjJFMkUyRTJFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDM2MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMzAwMEYyRTJFMkUyRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAzNjIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDMwMDBGMkUyRTJFMkUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMzYzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAzMDAwRjJFMkUyRTJFIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDU1IHBtX2Rzb3VyY2VfTDMsIEwzIGNhY2hlIGRhdGEgYWNjZXNzCitldmVudDowWDAzNzAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDMwMDBGM0MzQzNDM0MgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMzcxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAzMDAwRjNDM0MzQzNDIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDM3MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMzAwMEYzQzNDM0MzQyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAzNzMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDMwMDBGM0MzQzNDM0MgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgNTYgcG1faXNvdXJjZTEsIEluc3RydWN0aW9uIHNvdXJjZSBpbmZvcm1hdGlvbgorZXZlbnQ6MFgwMzgwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg4MDAwMDAwRjFBMUExQTBDIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDM4MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYODAwMDAwMEYxQTFBMUEwQyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAzODIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDgwMDAwMDBGMUExQTFBMEMgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMzgzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg4MDAwMDAwRjFBMUExQTBDIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDU3IHBtX2lzb3VyY2UyLCBJbnN0cnVjdGlvbiBzb3VyY2UgaW5mb3JtYXRpb24KK2V2ZW50OjBYMDM5MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYODAwMDAwMEQwQzBDMDIxQSBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDAzOTEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDgwMDAwMDBEMEMwQzAyMUEgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwMzkyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg4MDAwMDAwRDBDMEMwMjFBIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMDM5MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYODAwMDAwMEQwQzBDMDIxQSBtbWNyYTowWDAwMDAwMDAxCisKKyNHcm91cCA1OCBwbV9pc291cmNlX0wyLCBMMiBpbnN0cnVjdGlvbiBzb3VyY2UgaW5mb3JtYXRpb24KK2V2ZW50OjBYMDNBMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYODAwMDAwMEYyQzJDMkMyQyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAzQTEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDgwMDAwMDBGMkMyQzJDMkMgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwM0EyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg4MDAwMDAwRjJDMkMyQzJDIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDNBMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYODAwMDAwMEYyQzJDMkMyQyBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCA1OSBwbV9pc291cmNlX0wzLCBMMyBpbnN0cnVjdGlvbiBzb3VyY2UgaW5mb3JtYXRpb24KK2V2ZW50OjBYMDNCMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYODAwMDAwMEYzQTNBM0EzQSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAzQjEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDgwMDAwMDBGM0EzQTNBM0EgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwM0IyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg4MDAwMDAwRjNBM0EzQTNBIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDNCMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYODAwMDAwMEYzQTNBM0EzQSBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCA2MCBwbV9wdGVnX3NvdXJjZTEsIFBURUcgc291cmNlIGluZm9ybWF0aW9uCitldmVudDowWDAzQzAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDIwMDBGMkUyRTJFMkUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwM0MxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAyMDAwRjJFMkUyRTJFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDNDMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMjAwMEYyRTJFMkUyRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAzQzMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDIwMDBGMkUyRTJFMkUgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgNjEgcG1fcHRlZ19zb3VyY2UyLCBQVEVHIHNvdXJjZSBpbmZvcm1hdGlvbgorZXZlbnQ6MFgwM0QwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAyMDAwRjNDM0MzQzNDIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDNEMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMjAwMEYzQzNDM0MzQyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAzRDIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDIwMDBGM0MzQzNDM0MgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwM0QzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAyMDAwRjNDM0MzQzNDIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDYyIHBtX3B0ZWdfc291cmNlMywgUFRFRyBzb3VyY2UgaW5mb3JtYXRpb24KK2V2ZW50OjBYMDNFMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMjAwMEYwRTBFMzYwRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAzRTEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDIwMDBGMEUwRTM2MEUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwM0UyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAyMDAwRjBFMEUzNjBFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDNFMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMjAwMEYwRTBFMzYwRSBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCA2MyBwbV9wdGVnX3NvdXJjZTQsIEwzIFBURUcgYW5kIGdyb3VwIGRpc3B0YWNoIGV2ZW50cworZXZlbnQ6MFgwM0YwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDMyMDAwODFDMDQwNDhFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDNGMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAzMjAwMDgxQzA0MDQ4RSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAzRjIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMzIwMDA4MUMwNDA0OEUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwM0YzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDMyMDAwODFDMDQwNDhFIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDY0IHBtX0wyU0FfbGQsIEwyIHNsaWNlIEEgbG9hZCBldmVudHMKK2V2ZW50OjBYMDQwMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzA1NTQwMDU4MEMwODBDMCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA0MDEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTU0MDA1ODBDMDgwQzAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNDAyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1NDAwNTgwQzA4MEMwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDQwMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzA1NTQwMDU4MEMwODBDMCBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCA2NSBwbV9MMlNBX3N0LCBMMiBzbGljZSBBIHN0b3JlIGV2ZW50cworZXZlbnQ6MFgwNDEwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1ODAwNTgwQzA4MEMwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDQxMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzA1NTgwMDU4MEMwODBDMCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA0MTIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTU4MDA1ODBDMDgwQzAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNDEzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1ODAwNTgwQzA4MEMwIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDY2IHBtX0wyU0Ffc3QyLCBMMiBzbGljZSBBIHN0b3JlIGV2ZW50cworZXZlbnQ6MFgwNDIwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1QzAwNTgwQzA4MEMwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDQyMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzA1NUMwMDU4MEMwODBDMCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA0MjIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTVDMDA1ODBDMDgwQzAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNDIzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1QzAwNTgwQzA4MEMwIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDY3IHBtX0wyU0JfbGQsIEwyIHNsaWNlIEIgbG9hZCBldmVudHMKK2V2ZW50OjBYMDQzMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzA1NTQwMDU4MkMyODJDMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA0MzEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTU0MDA1ODJDMjgyQzIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNDMyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1NDAwNTgyQzI4MkMyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDQzMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzA1NTQwMDU4MkMyODJDMiBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCA2OCBwbV9MMlNCX3N0LCBMMiBzbGljZSBCIHN0b3JlIGV2ZW50cworZXZlbnQ6MFgwNDQwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1ODAwNTgyQzQ4MkMyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDQ0MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzA1NTgwMDU4MkM0ODJDMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA0NDIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTU4MDA1ODJDNDgyQzIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNDQzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1ODAwNTgyQzQ4MkMyIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDY5IHBtX0wyU0Jfc3QyLCBMMiBzbGljZSBCIHN0b3JlIGV2ZW50cworZXZlbnQ6MFgwNDUwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1QzAwNTgyQzI4MkMyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDQ1MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzA1NUMwMDU4MkMyODJDMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA0NTIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTVDMDA1ODJDMjgyQzIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNDUzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1QzAwNTgyQzI4MkMyIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDcwIHBtX0wyU0NfbGQsIEwyIHNsaWNlIEMgbG9hZCBldmVudHMKK2V2ZW50OjBYMDQ2MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzA1NTQwMDU4NEM0ODRDNCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA0NjEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTU0MDA1ODRDNDg0QzQgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNDYyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1NDAwNTg0QzQ4NEM0IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDQ2MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzA1NTQwMDU4NEM0ODRDNCBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCA3MSBwbV9MMlNDX3N0LCBMMiBzbGljZSBDIHN0b3JlIGV2ZW50cworZXZlbnQ6MFgwNDcwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1ODAwNTg0QzI4NEM0IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDQ3MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzA1NTgwMDU4NEMyODRDNCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA0NzIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTU4MDA1ODRDMjg0QzQgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNDczIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1ODAwNTg0QzI4NEM0IG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDcyIHBtX0wyU0Nfc3QyLCBMMiBzbGljZSBDIHN0b3JlIGV2ZW50cworZXZlbnQ6MFgwNDgwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1QzAwNTg0QzQ4NEM0IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDQ4MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzA1NUMwMDU4NEM0ODRDNCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA0ODIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTVDMDA1ODRDNDg0QzQgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNDgzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1QzAwNTg0QzQ4NEM0IG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDczIHBtX0wzU0FfdHJhbnMsIEwzIHNsaWNlIEEgc3RhdGUgdHJhbnNpc3Rpb25zCitldmVudDowWDA0OTAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwMTUwMDBBQzYwMkM2ODYgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwNDkxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDE1MDAwQUM2MDJDNjg2IG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMDQ5MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzAxNTAwMEFDNjAyQzY4NiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDA0OTMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwMTUwMDBBQzYwMkM2ODYgbW1jcmE6MFgwMDAwMDAwMQorCisjR3JvdXAgNzQgcG1fTDNTQl90cmFucywgTDMgc2xpY2UgQiBzdGF0ZSB0cmFuc2lzdGlvbnMKK2V2ZW50OjBYMDRBMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzAxNTAwMDYwMkM4Qzg4OCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDA0QTEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwMTUwMDA2MDJDOEM4ODggbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwNEEyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDE1MDAwNjAyQzhDODg4IG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMDRBMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzAxNTAwMDYwMkM4Qzg4OCBtbWNyYTowWDAwMDAwMDAxCisKKyNHcm91cCA3NSBwbV9MM1NDX3RyYW5zLCBMMyBzbGljZSBDIHN0YXRlIHRyYW5zaXN0aW9ucworZXZlbnQ6MFgwNEIwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDE1MDAwNjAyQ0FDQThBIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMDRCMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzAxNTAwMDYwMkNBQ0E4QSBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDA0QjIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwMTUwMDA2MDJDQUNBOEEgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwNEIzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDE1MDAwNjAyQ0FDQThBIG1tY3JhOjBYMDAwMDAwMDEKKworI0dyb3VwIDc2IHBtX0wyU0FfdHJhbnMsIEwyIHNsaWNlIEEgc3RhdGUgdHJhbnNpc3Rpb25zCitldmVudDowWDA0QzAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTUwMDBBQzA4MEMwODAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNEMxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1MDAwQUMwODBDMDgwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDRDMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzA1NTAwMEFDMDgwQzA4MCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA0QzMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTUwMDBBQzA4MEMwODAgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgNzcgcG1fTDJTQl90cmFucywgTDIgc2xpY2UgQiBzdGF0ZSB0cmFuc2lzdGlvbnMKK2V2ZW50OjBYMDREMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzA1NTAwMEFDMjgyQzI4MiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA0RDEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTUwMDBBQzI4MkMyODIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNEQyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1MDAwQUMyODJDMjgyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDREMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzA1NTAwMEFDMjgyQzI4MiBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCA3OCBwbV9MMlNDX3RyYW5zLCBMMiBzbGljZSBDIHN0YXRlIHRyYW5zaXN0aW9ucworZXZlbnQ6MFgwNEUwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1MDAwQUM0ODRDNDg0IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDRFMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzA1NTAwMEFDNDg0QzQ4NCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA0RTIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTUwMDBBQzQ4NEM0ODQgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNEUzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1MDAwQUM0ODRDNDg0IG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDc5IHBtX0wzU0FCX3JldHJ5LCBMMyBzbGljZSBBL0Igc25vb3AgcmV0cnkgYW5kIGFsbCBDSS9DTyBidXN5CitldmVudDowWDA0RjAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwMDUxMDBGQzZDOEM2QzggbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNEYxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDA1MTAwRkM2QzhDNkM4IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDRGMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzAwNTEwMEZDNkM4QzZDOCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA0RjMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwMDUxMDBGQzZDOEM2QzggbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgODAgcG1fTDNTQUJfaGl0LCBMMyBzbGljZSBBL0IgaGl0IGFuZCByZWZlcmVuY2UKK2V2ZW50OjBYMDUwMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzA1MDEwMDA4Njg4ODY4OCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA1MDEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTAxMDAwODY4ODg2ODggbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNTAyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDUwMTAwMDg2ODg4Njg4IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDUwMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzA1MDEwMDA4Njg4ODY4OCBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCA4MSBwbV9MM1NDX3JldHJ5X2hpdCwgTDMgc2xpY2UgQyBoaXQgJiBzbm9vcCByZXRyeQorZXZlbnQ6MFgwNTEwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1MTAwQUNBOEFDQThBIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDUxMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzA1NTEwMEFDQThBQ0E4QSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA1MTIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTUxMDBBQ0E4QUNBOEEgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNTEzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1MTAwQUNBOEFDQThBIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDgyIHBtX2ZwdTEsIEZsb2F0aW5nIFBvaW50IGV2ZW50cworZXZlbnQ6MFgwNTIwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDEwMTAxMDIwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDUyMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAxMDEwMTAyMCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA1MjIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMTAxMDEwMjAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNTIzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDEwMTAxMDIwIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDgzIHBtX2ZwdTIsIEZsb2F0aW5nIFBvaW50IGV2ZW50cworZXZlbnQ6MFgwNTMwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDIwMjAyMDEwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDUzMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAyMDIwMjAxMCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA1MzIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMjAyMDIwMTAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNTMzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDIwMjAyMDEwIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDg0IHBtX2ZwdTMsIEZsb2F0aW5nIHBvaW50IGV2ZW50cworZXZlbnQ6MFgwNTQwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwQzEwMTA4NjhFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDU0MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMEMxMDEwODY4RSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA1NDIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDBDMTAxMDg2OEUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNTQzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwQzEwMTA4NjhFIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDg1IHBtX2ZwdTQsIEZsb2F0aW5nIHBvaW50IGV2ZW50cworZXZlbnQ6MFgwNTUwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwNDMwMDAwQzIwMjAwMjIwIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMDU1MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDQzMDAwMEMyMDIwMDIyMCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDA1NTIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDA0MzAwMDBDMjAyMDAyMjAgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwNTUzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwNDMwMDAwQzIwMjAwMjIwIG1tY3JhOjBYMDAwMDAwMDEKKworI0dyb3VwIDg2IHBtX2ZwdTUsIEZsb2F0aW5nIHBvaW50IGV2ZW50cyBieSB1bml0CitldmVudDowWDA1NjAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwODQ4Qzg0OEMgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNTYxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDg0OEM4NDhDIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDU2MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDA4NDhDODQ4QyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA1NjMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwODQ4Qzg0OEMgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgODcgcG1fZnB1NiwgRmxvYXRpbmcgcG9pbnQgZXZlbnRzIGJ5IHVuaXQKK2V2ZW50OjBYMDU3MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMENDMEM4ODA4OCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA1NzEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDBDQzBDODgwODggbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNTcyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwQ0MwQzg4MDg4IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDU3MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMENDMEM4ODA4OCBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCA4OCBwbV9mcHU3LCBGbG9hdGluZyBwb2ludCBldmVudHMgYnkgdW5pdAorZXZlbnQ6MFgwNTgwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDgwODg4MjhBIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDU4MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDA4MDg4ODI4QSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA1ODIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwODA4ODgyOEEgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNTgzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDgwODg4MjhBIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDg5IHBtX2ZwdTgsIEZsb2F0aW5nIHBvaW50IGV2ZW50cyBieSB1bml0CitldmVudDowWDA1OTAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDBEQzJDQTAyQzAgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwNTkxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwREMyQ0EwMkMwIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMDU5MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMERDMkNBMDJDMCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDA1OTMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDBEQzJDQTAyQzAgbW1jcmE6MFgwMDAwMDAwMQorCisjR3JvdXAgOTAgcG1fZnB1OSwgRmxvYXRpbmcgcG9pbnQgZXZlbnRzIGJ5IHVuaXQKK2V2ZW50OjBYMDVBMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDQzMDAwMENDNkNFODA4OCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA1QTEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDA0MzAwMDBDQzZDRTgwODggbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNUEyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwNDMwMDAwQ0M2Q0U4MDg4IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDVBMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDQzMDAwMENDNkNFODA4OCBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCA5MSBwbV9mcHUxMCwgRmxvYXRpbmcgcG9pbnQgZXZlbnRzIGJ5IHVuaXQKK2V2ZW50OjBYMDVCMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDA4MjhBMDI4QSBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDA1QjEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwODI4QTAyOEEgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwNUIyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDgyOEEwMjhBIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMDVCMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDA4MjhBMDI4QSBtbWNyYTowWDAwMDAwMDAxCisKKyNHcm91cCA5MiBwbV9mcHUxMSwgRmxvYXRpbmcgcG9pbnQgZXZlbnRzIGJ5IHVuaXQKK2V2ZW50OjBYMDVDMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDA4NjhFODYwMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDA1QzEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwODY4RTg2MDIgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwNUMyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDg2OEU4NjAyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMDVDMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDA4NjhFODYwMiBtbWNyYTowWDAwMDAwMDAxCisKKyNHcm91cCA5MyBwbV9mcHUxMiwgRmxvYXRpbmcgcG9pbnQgZXZlbnRzIGJ5IHVuaXQKK2V2ZW50OjBYMDVEMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDQzMDAwMENDNENDODAwMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDA1RDEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDA0MzAwMDBDQzRDQzgwMDIgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwNUQyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwNDMwMDAwQ0M0Q0M4MDAyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMDVEMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDQzMDAwMENDNENDODAwMiBtbWNyYTowWDAwMDAwMDAxCisKKyNHcm91cCA5NCBwbV9meHUxLCBGaXhlZCBQb2ludCBldmVudHMKK2V2ZW50OjBYMDVFMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAyNDI0MjQyNCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA1RTEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMjQyNDI0MjQgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNUUyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDI0MjQyNDI0IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDVFMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAyNDI0MjQyNCBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCA5NSBwbV9meHUyLCBGaXhlZCBQb2ludCBldmVudHMKK2V2ZW50OjBYMDVGMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMDAwMDYwNDIyMTAyMCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDA1RjEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwMDAwMDA2MDQyMjEwMjAgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwNUYyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MDAwMDAwNjA0MjIxMDIwIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMDVGMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMDAwMDYwNDIyMTAyMCBtbWNyYTowWDAwMDAwMDAxCisKKyNHcm91cCA5NiBwbV9meHUzLCBGaXhlZCBQb2ludCBldmVudHMKK2V2ZW50OjBYMDYwMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDA0MDAwMDM4Njg4QzRDQyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA2MDEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwNDAwMDAzODY4OEM0Q0MgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNjAyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MDQwMDAwMzg2ODhDNENDIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDYwMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDA0MDAwMDM4Njg4QzRDQyBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCA5NyBwbV9zbXRfcHJpb3JpdGllczEsIFRocmVhZCBwcmlvcml0eSBldmVudHMKK2V2ZW50OjBYMDYxMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwNTAwMEZDNkNDQzZDOCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA2MTEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDUwMDBGQzZDQ0M2QzggbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNjEyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDA1MDAwRkM2Q0NDNkM4IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDYxMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwNTAwMEZDNkNDQzZDOCBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCA5OCBwbV9zbXRfcHJpb3JpdGllczIsIFRocmVhZCBwcmlvcml0eSBldmVudHMKK2V2ZW50OjBYMDYyMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwNTAwMEZDNENBQ0FDQyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA2MjEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDUwMDBGQzRDQUNBQ0MgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNjIyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDA1MDAwRkM0Q0FDQUNDIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDYyMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwNTAwMEZDNENBQ0FDQyBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCA5OSBwbV9zbXRfcHJpb3JpdGllczMsIFRocmVhZCBwcmlvcml0eSBldmVudHMKK2V2ZW50OjBYMDYzMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwNTAwMEZDMkM4QzRDMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA2MzEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDUwMDBGQzJDOEM0QzIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNjMyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDA1MDAwRkMyQzhDNEMyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDYzMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwNTAwMEZDMkM4QzRDMiBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxMDAgcG1fc210X3ByaW9yaXRpZXM0LCBUaHJlYWQgcHJpb3JpdHkgZXZlbnRzCitldmVudDowWDA2NDAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDUwMDBBQzAxNkMwMDIgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwNjQxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDA1MDAwQUMwMTZDMDAyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMDY0MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwNTAwMEFDMDE2QzAwMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDA2NDMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDUwMDBBQzAxNkMwMDIgbW1jcmE6MFgwMDAwMDAwMQorCisjR3JvdXAgMTAxIHBtX3NtdF9ib3RoLCBUaHJlYWQgY29tbW9uIGV2ZW50cworZXZlbnQ6MFgwNjUwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDEwMDAwMDE2MjYwMjA4IG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMDY1MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAxMDAwMDAxNjI2MDIwOCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDA2NTIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMTAwMDAwMTYyNjAyMDggbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwNjUzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDEwMDAwMDE2MjYwMjA4IG1tY3JhOjBYMDAwMDAwMDEKKworI0dyb3VwIDEwMiBwbV9zbXRfc2VsZWN0aW9uLCBUaHJlYWQgc2VsZWN0aW9uCitldmVudDowWDA2NjAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwOTAwMDAwODYwMjgwODIgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwNjYxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDkwMDAwMDg2MDI4MDgyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMDY2MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDA5MDAwMDA4NjAyODA4MiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDA2NjMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwOTAwMDAwODYwMjgwODIgbW1jcmE6MFgwMDAwMDAwMQorCisjR3JvdXAgMTAzIHBtX3NtdF9zZWxlY3RvdmVyMSwgVGhyZWFkIHNlbGVjdGlvbiBvdmVyaWRlCitldmVudDowWDA2NzAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwNTAwMDAwMDI4MDg0ODggbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwNjcxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDUwMDAwMDAyODA4NDg4IG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMDY3MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDA1MDAwMDAwMjgwODQ4OCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDA2NzMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwNTAwMDAwMDI4MDg0ODggbW1jcmE6MFgwMDAwMDAwMQorCisjR3JvdXAgMTA0IHBtX3NtdF9zZWxlY3RvdmVyMiwgVGhyZWFkIHNlbGVjdGlvbiBvdmVyaWRlCitldmVudDowWDA2ODAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMTAwMDAwMDIxRThBODYgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwNjgxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDEwMDAwMDAyMUU4QTg2IG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMDY4MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAxMDAwMDAwMjFFOEE4NiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDA2ODMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMTAwMDAwMDIxRThBODYgbW1jcmE6MFgwMDAwMDAwMQorCisjR3JvdXAgMTA1IHBtX2ZhYnJpYzEsIEZhYnJpYyBldmVudHMKK2V2ZW50OjBYMDY5MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzA1NTAwMDU4RUNFOEVDRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA2OTEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTUwMDA1OEVDRThFQ0UgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNjkyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1MDAwNThFQ0U4RUNFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDY5MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzA1NTAwMDU4RUNFOEVDRSBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxMDYgcG1fZmFicmljMiwgRmFicmljIGRhdGEgbW92ZW1lbnQKK2V2ZW50OjBYMDZBMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzA1NTAwODU4RUNFOEVDRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA2QTEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTUwMDg1OEVDRThFQ0UgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNkEyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1MDA4NThFQ0U4RUNFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDZBMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzA1NTAwODU4RUNFOEVDRSBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxMDcgcG1fZmFicmljMywgRmFicmljIGRhdGEgbW92ZW1lbnQKK2V2ZW50OjBYMDZCMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzA1NTAxODU4RUNFOEVDRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA2QjEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTUwMTg1OEVDRThFQ0UgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNkIyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1MDE4NThFQ0U4RUNFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDZCMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzA1NTAxODU4RUNFOEVDRSBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxMDggcG1fZmFicmljNCwgRmFicmljIGRhdGEgbW92ZW1lbnQKK2V2ZW50OjBYMDZDMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNzA1NDAxMDY4RUNFQzY4RSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA2QzEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDcwNTQwMTA2OEVDRUM2OEUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNkMyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg3MDU0MDEwNjhFQ0VDNjhFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDZDMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNzA1NDAxMDY4RUNFQzY4RSBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxMDkgcG1fc25vb3AxLCBTbm9vcCByZXRyeQorZXZlbnQ6MFgwNkQwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1MDAwNThDQ0M4Q0NDIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDZEMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzA1NTAwMDU4Q0NDOENDQyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA2RDIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTUwMDA1OENDQzhDQ0MgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNkQzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1MDAwNThDQ0M4Q0NDIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDExMCBwbV9zbm9vcDIsIFNub29wIHJlYWQgcmV0cnkKK2V2ZW50OjBYMDZFMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzA1NDBBMDQ4Q0NDOEMwMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDA2RTEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTQwQTA0OENDQzhDMDIgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwNkUyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU0MEEwNDhDQ0M4QzAyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMDZFMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzA1NDBBMDQ4Q0NDOEMwMiBtbWNyYTowWDAwMDAwMDAxCisKKyNHcm91cCAxMTEgcG1fc25vb3AzLCBTbm9vcCB3cml0ZSByZXRyeQorZXZlbnQ6MFgwNkYwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1MEMwNThDQ0M4Q0NDIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDZGMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzA1NTBDMDU4Q0NDOENDQyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA2RjIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTUwQzA1OENDQzhDQ0MgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNkYzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1MEMwNThDQ0M4Q0NDIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDExMiBwbV9zbm9vcDQsIFNub29wIHBhcnRpYWwgd3JpdGUgcmV0cnkKK2V2ZW50OjBYMDcwMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzA1NDBFMDQ4Q0NDOENBQyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA3MDEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTQwRTA0OENDQzhDQUMgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNzAyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU0MEUwNDhDQ0M4Q0FDIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDcwMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzA1NDBFMDQ4Q0NDOENBQyBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxMTMgcG1fbWVtX3JxLCBNZW1vcnkgcmVhZCBxdWV1ZSBkaXNwYXRjaAorZXZlbnQ6MFgwNzEwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg3MDU0MDIwNThDQ0M4Q0NFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDcxMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNzA1NDAyMDU4Q0NDOENDRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA3MTIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDcwNTQwMjA1OENDQzhDQ0UgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNzEzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg3MDU0MDIwNThDQ0M4Q0NFIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDExNCBwbV9tZW1fcmVhZCwgTWVtb3J5IHJlYWQgY29tcGxldGUgYW5kIGNhbmNlbAorZXZlbnQ6MFgwNzIwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU0MDQwNDhDQ0M4QzA2IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDcyMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzA1NDA0MDQ4Q0NDOEMwNiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA3MjIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTQwNDA0OENDQzhDMDYgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNzIzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU0MDQwNDhDQ0M4QzA2IG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDExNSBwbV9tZW1fd3EsIE1lbW9yeSB3cml0ZSBxdWV1ZSBkaXNwYXRjaAorZXZlbnQ6MFgwNzMwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1MDYwNThDQ0M4Q0NDIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDczMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzA1NTA2MDU4Q0NDOENDQyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA3MzIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTUwNjA1OENDQzhDQ0MgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNzMzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1MDYwNThDQ0M4Q0NDIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDExNiBwbV9tZW1fcHdxLCBNZW1vcnkgcGFydGlhbCB3cml0ZSBxdWV1ZQorZXZlbnQ6MFgwNzQwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1MDgwNThDQ0M4Q0NDIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDc0MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzA1NTA4MDU4Q0NDOENDQyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA3NDIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTUwODA1OENDQzhDQ0MgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNzQzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1MDgwNThDQ0M4Q0NDIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDExNyBwbV90aHJlc2hvbGQsIFRocmVzaG9sZGluZworZXZlbnQ6MFgwNzUwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDA4MDAwNDA0QzQxNjI4IG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMDc1MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwODAwMDQwNEM0MTYyOCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDA3NTIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDgwMDA0MDRDNDE2MjggbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwNzUzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDA4MDAwNDA0QzQxNjI4IG1tY3JhOjBYMDAwMDAwMDEKKworI0dyb3VwIDExOCBwbV9tcmtfZ3JwMSwgTWFya2VkIGdyb3VwIGV2ZW50cworZXZlbnQ6MFgwNzYwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDA4MDAwNDA0QzYwQTI2IG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMDc2MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwODAwMDQwNEM2MEEyNiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDA3NjIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDgwMDA0MDRDNjBBMjYgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwNzYzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDA4MDAwNDA0QzYwQTI2IG1tY3JhOjBYMDAwMDAwMDEKKworI0dyb3VwIDExOSBwbV9tcmtfZ3JwMiwgTWFya2VkIGdyb3VwIGV2ZW50cworZXZlbnQ6MFgwNzcwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MTAzMDAwMzJBMEFDODIyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMDc3MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDEwMzAwMDMyQTBBQzgyMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDA3NzIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQxMDMwMDAzMkEwQUM4MjIgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwNzczIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MTAzMDAwMzJBMEFDODIyIG1tY3JhOjBYMDAwMDAwMDEKKworI0dyb3VwIDEyMCBwbV9tcmtfZHNvdXJjZTEsIE1hcmtlZCBkYXRhIGZyb20gCitldmVudDowWDA3ODAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAxMEIwMDBGMEU0MDQ0NDQgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwNzgxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMTBCMDAwRjBFNDA0NDQ0IG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMDc4MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDEwQjAwMEYwRTQwNDQ0NCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDA3ODMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAxMEIwMDBGMEU0MDQ0NDQgbW1jcmE6MFgwMDAwMDAwMQorCisjR3JvdXAgMTIxIHBtX21ya19kc291cmNlMiwgTWFya2VkIGRhdGEgZnJvbQorZXZlbnQ6MFgwNzkwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMTBCMDAwQzJFNDQwMjEwIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMDc5MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDEwQjAwMEMyRTQ0MDIxMCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDA3OTIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAxMEIwMDBDMkU0NDAyMTAgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwNzkzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMTBCMDAwQzJFNDQwMjEwIG1tY3JhOjBYMDAwMDAwMDEKKworI0dyb3VwIDEyMiBwbV9tcmtfZHNvdXJjZTMsIE1hcmtlZCBkYXRhIGZyb20KK2V2ZW50OjBYMDdBMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDEwQjAwMEYxQzQ4NEM0QyBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDA3QTEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAxMEIwMDBGMUM0ODRDNEMgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwN0EyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMTBCMDAwRjFDNDg0QzRDIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMDdBMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDEwQjAwMEYxQzQ4NEM0QyBtbWNyYTowWDAwMDAwMDAxCisKKyNHcm91cCAxMjMgcG1fbXJrX2Rzb3VyY2U0LCBNYXJrZWQgZGF0YSBmcm9tCitldmVudDowWDA3QjAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAxMEIwMDBGNDI0NjJFNDIgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwN0IxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMTBCMDAwRjQyNDYyRTQyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMDdCMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDEwQjAwMEY0MjQ2MkU0MiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDA3QjMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAxMEIwMDBGNDI0NjJFNDIgbW1jcmE6MFgwMDAwMDAwMQorCisjR3JvdXAgMTI0IHBtX21ya19kc291cmNlNSwgTWFya2VkIGRhdGEgZnJvbQorZXZlbnQ6MFgwN0MwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMTBCMDAwRjNDNEM0MDQwIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMDdDMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDEwQjAwMEYzQzRDNDA0MCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDA3QzIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAxMEIwMDBGM0M0QzQwNDAgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwN0MzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMTBCMDAwRjNDNEM0MDQwIG1tY3JhOjBYMDAwMDAwMDEKKworI0dyb3VwIDEyNSBwbV9tcmtfZHNvdXJjZTYsIE1hcmtlZCBkYXRhIGZyb20KK2V2ZW50OjBYMDdEMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDEwQjAwMEQ0NjQ2MDI0NiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDA3RDEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAxMEIwMDBENDY0NjAyNDYgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwN0QyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMTBCMDAwRDQ2NDYwMjQ2IG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMDdEMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDEwQjAwMEQ0NjQ2MDI0NiBtbWNyYTowWDAwMDAwMDAxCisKKyNHcm91cCAxMjYgcG1fbXJrX2Rzb3VyY2U3LCBNYXJrZWQgZGF0YSBmcm9tCitldmVudDowWDA3RTAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAxMEIwMDBGNEU0RTNDNEUgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwN0UxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMTBCMDAwRjRFNEUzQzRFIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMDdFMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDEwQjAwMEY0RTRFM0M0RSBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDA3RTMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAxMEIwMDBGNEU0RTNDNEUgbW1jcmE6MFgwMDAwMDAwMQorCisjR3JvdXAgMTI3IHBtX21ya19kdGxicmVmLCBNYXJrZWQgZGF0YSBUTEIgcmVmZXJlbmNlcworZXZlbnQ6MFgwN0YwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMjBDMDAwRjBDMEMwQzBDIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMDdGMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDIwQzAwMEYwQzBDMEMwQyBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDA3RjIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAyMEMwMDBGMEMwQzBDMEMgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwN0YzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMjBDMDAwRjBDMEMwQzBDIG1tY3JhOjBYMDAwMDAwMDEKKworI0dyb3VwIDEyOCBwbV9tcmtfZHRsYm1pc3MsIE1hcmtlZCBkYXRhIFRMQiBtaXNzZXMKK2V2ZW50OjBYMDgwMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDIwQzAwMEYxQTFBMUExQSBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDA4MDEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAyMEMwMDBGMUExQTFBMUEgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwODAyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMjBDMDAwRjFBMUExQTFBIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMDgwMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDIwQzAwMEYxQTFBMUExQSBtbWNyYTowWDAwMDAwMDAxCisKKyNHcm91cCAxMjkgcG1fbXJrX2R0bGJfZHNsYiwgTWFya2VkIGRhdGEgVExCIHJlZmVyZW5jZXMgYW5kIG1pc3NlcyBhbmQgbWFya2VkIGRhdGEgU0xCIG1pc3NlcworZXZlbnQ6MFgwODEwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwNjNDMDAwOEM4QUM4RTFFIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMDgxMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDYzQzAwMDhDOEFDOEUxRSBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDA4MTIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDA2M0MwMDA4QzhBQzhFMUUgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwODEzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwNjNDMDAwOEM4QUM4RTFFIG1tY3JhOjBYMDAwMDAwMDEKKworI0dyb3VwIDEzMCBwbV9tcmtfbGJyZWYsIE1hcmtlZCBUTEIgYW5kIFNMQiByZWZlcmVuY2VzCitldmVudDowWDA4MjAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDA2M0MwMDBBMEMwMjBDOEUgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwODIxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwNjNDMDAwQTBDMDIwQzhFIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMDgyMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDYzQzAwMEEwQzAyMEM4RSBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDA4MjMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDA2M0MwMDBBMEMwMjBDOEUgbW1jcmE6MFgwMDAwMDAwMQorCisjR3JvdXAgMTMxIHBtX21ya19sc21pc3MsIE1hcmtlZCBsb2FkIGFuZCBzdG9yZSBtaXNzCitldmVudDowWDA4MzAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDgwMDA4MTAwMjA2MEEgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwODMxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDA4MDAwODEwMDIwNjBBIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMDgzMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwODAwMDgxMDAyMDYwQSBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDA4MzMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDgwMDA4MTAwMjA2MEEgbW1jcmE6MFgwMDAwMDAwMQorCisjR3JvdXAgMTMyIHBtX21ya191bHNmbHVzaCwgTWFyayB1bmFsaWduZWQgbG9hZCBhbmQgc3RvcmUgZmx1c2hlcworZXZlbnQ6MFgwODQwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDI4MDAwNDA2QzYyMDIwIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMDg0MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAyODAwMDQwNkM2MjAyMCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDA4NDIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMjgwMDA0MDZDNjIwMjAgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwODQzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDI4MDAwNDA2QzYyMDIwIG1tY3JhOjBYMDAwMDAwMDEKKworI0dyb3VwIDEzMyBwbV9tcmtfbWlzYywgTWlzYyBtYXJrZWQgaW5zdHJ1Y3Rpb25zCitldmVudDowWDA4NTAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDgwMDA4Q0MwNjI4MTYgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwODUxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDA4MDAwOENDMDYyODE2IG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMDg1MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwODAwMDhDQzA2MjgxNiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDA4NTMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDgwMDA4Q0MwNjI4MTYgbW1jcmE6MFgwMDAwMDAwMQorCisjR3JvdXAgMTM0IHBtX2xzcmVmX0wxLCBMb2FkL1N0b3JlIG9wZXJhdGlvbnMgYW5kIEwxIGFjdGl2aXR5CitldmVudDowWDA4NjAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDgwMzMwMDBDMEUxQTIwMjAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwODYxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg4MDMzMDAwQzBFMUEyMDIwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDg2MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYODAzMzAwMEMwRTFBMjAyMCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA4NjMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDgwMzMwMDBDMEUxQTIwMjAgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMTM1IHBtX2xzcmVmX0wyTDMsIExvYWQvU3RvcmUgb3BlcmF0aW9ucyBhbmQgTDIsIEwzIGFjdGl2aXR5CitldmVudDowWDA4NzAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMzMwMDBDMUMwRTIwMjAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwODcxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDMzMDAwQzFDMEUyMDIwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDg3MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAzMzAwMEMxQzBFMjAyMCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA4NzMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMzMwMDBDMUMwRTIwMjAgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMTM2IHBtX2xzcmVmX3RsYm1pc3MsIExvYWQvU3RvcmUgb3BlcmF0aW9ucyBhbmQgVExCIG1pc3NlcworZXZlbnQ6MFgwODgwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMEIwMDAwMDgwODgyMDIwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDg4MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDBCMDAwMDA4MDg4MjAyMCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA4ODIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwQjAwMDAwODA4ODIwMjAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwODgzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMEIwMDAwMDgwODgyMDIwIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDEzNyBwbV9EbWlzcywgRGF0YSBjYWNoZSBtaXNzZXMKK2V2ZW50OjBYMDg5MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAzMzAwMEMxQzBFMTA4NiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA4OTEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMzMwMDBDMUMwRTEwODYgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwODkyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDMzMDAwQzFDMEUxMDg2IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDg5MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAzMzAwMEMxQzBFMTA4NiBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxMzggcG1fcHJlZmV0Y2hYLCBQcmVmZXRjaCBldmVudHMKK2V2ZW50OjBYMDhBMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYODUzMzAwMDYxRUNDQ0U4NiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA4QTEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDg1MzMwMDA2MUVDQ0NFODYgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwOEEyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg4NTMzMDAwNjFFQ0NDRTg2IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDhBMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYODUzMzAwMDYxRUNDQ0U4NiBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxMzkgcG1fYnJhbmNoWCwgQnJhbmNoIG9wZXJhdGlvbnMKK2V2ZW50OjBYMDhCMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYODAwMDAwMEYwRTBFMEVDOCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA4QjEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDgwMDAwMDBGMEUwRTBFQzggbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwOEIyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg4MDAwMDAwRjBFMEUwRUM4IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDhCMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYODAwMDAwMEYwRTBFMEVDOCBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxNDAgcG1fZnB1WDEsIEZsb2F0aW5nIHBvaW50IGV2ZW50cyBieSB1bml0CitldmVudDowWDA4QzAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDBEQzJDQTg2QzAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwOEMxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwREMyQ0E4NkMwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDhDMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMERDMkNBODZDMCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA4QzMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDBEQzJDQTg2QzAgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMTQxIHBtX2ZwdVgyLCBGbG9hdGluZyBwb2ludCBldmVudHMgYnkgdW5pdAorZXZlbnQ6MFgwOEQwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDgyOEE4MjhBIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDhEMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDA4MjhBODI4QSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA4RDIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwODI4QTgyOEEgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwOEQzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDgyOEE4MjhBIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDE0MiBwbV9mcHVYMywgRmxvYXRpbmcgcG9pbnQgZXZlbnRzIGJ5IHVuaXQKK2V2ZW50OjBYMDhFMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDA4NjhFODY4RSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA4RTEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwODY4RTg2OEUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwOEUyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDg2OEU4NjhFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDhFMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDA4NjhFODY4RSBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxNDMgcG1fZnB1WDQsIEZsb2F0aW5nIHBvaW50IGFuZCBMMSBldmVudHMKK2V2ZW50OjBYMDhGMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAzMDAwMDAyMDEwMjAyMCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA4RjEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMzAwMDAwMjAxMDIwMjAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwOEYyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDMwMDAwMDIwMTAyMDIwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDhGMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAzMDAwMDAyMDEwMjAyMCBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxNDQgcG1fZnB1WDUsIEZsb2F0aW5nIHBvaW50IGV2ZW50cworZXZlbnQ6MFgwOTAwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwQzIwMjA4NjhFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDkwMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMEMyMDIwODY4RSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA5MDIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDBDMjAyMDg2OEUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwOTAzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwQzIwMjA4NjhFIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDE0NSBwbV9mcHVYNiwgRmxvYXRpbmcgcG9pbnQgZXZlbnRzCitldmVudDowWDA5MTAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMTAyMDIwMTAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwOTExIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDEwMjAyMDEwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDkxMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAxMDIwMjAxMCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA5MTMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMTAyMDIwMTAgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMTQ2IHBtX2ZwdVg3LCBGbG9hdGluZyBwb2ludCBldmVudHMKK2V2ZW50OjBYMDkyMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDIyMDEwNTAxMCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA5MjEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAyMjAxMDUwMTAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwOTIyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMjIwMTA1MDEwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDkyMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDIyMDEwNTAxMCBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxNDcgcG1faHBtY291bnQ4LCBIUE0gZ3JvdXAgZm9yIHNldCA5IAorZXZlbnQ6MFgwOTMwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDFFMjgxRTEwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDkzMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAxRTI4MUUxMCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA5MzIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMUUyODFFMTAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwOTMzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDFFMjgxRTEwIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDE0OCBwbV9ocG1jb3VudDIsIEhQTSBncm91cCBmb3Igc2V0IDIKK2V2ZW50OjBYMDk0MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDQzMDAwMDQxMjIwMTIyMCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA5NDEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDA0MzAwMDA0MTIyMDEyMjAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwOTQyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwNDMwMDAwNDEyMjAxMjIwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDk0MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDQzMDAwMDQxMjIwMTIyMCBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxNDkgcG1faHBtY291bnQzLCBIUE0gZ3JvdXAgZm9yIHNldCAzIAorZXZlbnQ6MFgwOTUwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MDMwMDAwNDFFQzIxMDg2IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDk1MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAzMDAwMDQxRUMyMTA4NiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA5NTIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwMzAwMDA0MUVDMjEwODYgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwOTUzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MDMwMDAwNDFFQzIxMDg2IG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDE1MCBwbV9ocG1jb3VudDQsIEhQTSBncm91cCBmb3Igc2V0IDcKK2V2ZW50OjBYMDk2MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDBCMDAwMDAxMDFFMjAyMCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA5NjEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwQjAwMDAwMTAxRTIwMjAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwOTYyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMEIwMDAwMDEwMUUyMDIwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDk2MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDBCMDAwMDAxMDFFMjAyMCBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxNTEgcG1fZmxvcCwgRmxvYXRpbmcgcG9pbnQgb3BlcmF0aW9ucworZXZlbnQ6MFgwOTcwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDEwMTA1MDUwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDk3MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAxMDEwNTA1MCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA5NzIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMTAxMDUwNTAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwOTczIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDEwMTA1MDUwIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDE1MiBwbV9lcHJvZjEsIEdyb3VwIGZvciB1c2Ugd2l0aCBlcHJvZgorZXZlbnQ6MFgwOTgwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDMwMDAwMDEyMUUxMDhFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDk4MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAzMDAwMDAxMjFFMTA4RSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA5ODIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMzAwMDAwMTIxRTEwOEUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwOTgzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDMwMDAwMDEyMUUxMDhFIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDE1MyBwbV9lcHJvZjIsIEdyb3VwIGZvciB1c2Ugd2l0aCBlcHJvZgorZXZlbnQ6MFgwOTkwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDMwMDAwMDEyNTAxMjIwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDk5MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAzMDAwMDAxMjUwMTIyMCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA5OTIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMzAwMDAwMTI1MDEyMjAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwOTkzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDMwMDAwMDEyNTAxMjIwIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDE1NCBwbV9mbGlwLCBHcm91cCBmb3IgZmxpcHMKK2V2ZW50OjBYMDlBMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDIxRTEwNTAxMCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA5QTEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAyMUUxMDUwMTAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwOUEyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMjFFMTA1MDEwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDlBMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDIxRTEwNTAxMCBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxNTUgcG1faHBtY291bnQ1LCBIUE0gZ3JvdXAgZm9yIHNldCA1CitldmVudDowWDA5QjAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwQjAwMDAwMUU4ODEwMjAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwOUIxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMEIwMDAwMDFFODgxMDIwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDlCMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDBCMDAwMDAxRTg4MTAyMCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA5QjMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwQjAwMDAwMUU4ODEwMjAgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMTU2IHBtX2hwbWNvdW50NiwgSFBNIGdyb3VwIGZvciBzZXQgNgorZXZlbnQ6MFgwOUMwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDMwMDAwMDFFMTIyMDg2IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDlDMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAzMDAwMDAxRTEyMjA4NiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA5QzIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMzAwMDAwMUUxMjIwODYgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwOUMzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDMwMDAwMDFFMTIyMDg2IG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDE1NyBwbV9ocG1jb3VudDcsIEhQTSBncm91cCBmb3Igc2V0IDgKK2V2ZW50OjBYMDlEMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMzAwMDUxMjBFMUUwRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA5RDEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDMwMDA1MTIwRTFFMEUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwOUQyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAzMDAwNTEyMEUxRTBFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDlEMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMzAwMDUxMjBFMUUwRSBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxNTggcG1fZXBfdGhyZXNob2xkLCBUaHJlc2hvbGRpbmcKK2V2ZW50OjBYMDlFMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAwNDEyMTYyOCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDA5RTEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMDQxMjE2MjggbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwOUUyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDA0MTIxNjI4IG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMDlFMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAwNDEyMTYyOCBtbWNyYTowWDAwMDAwMDAxCisKKyNHcm91cCAxNTkgcG1fZXBfbXJrX2dycDEsIE1hcmtlZCBncm91cCBldmVudHMKK2V2ZW50OjBYMDlGMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAwNDEyMEEyNiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDA5RjEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMDQxMjBBMjYgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwOUYyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDA0MTIwQTI2IG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMDlGMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAwNDEyMEEyNiBtbWNyYTowWDAwMDAwMDAxCisKKyNHcm91cCAxNjAgcG1fZXBfbXJrX2dycDIsIE1hcmtlZCBncm91cCBldmVudHMKK2V2ZW50OjBYMEEwMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDEwMzAwMDMyQTEyQzgyMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDBBMDEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQxMDMwMDAzMkExMkM4MjIgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwQTAyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MTAzMDAwMzJBMTJDODIyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMEEwMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDEwMzAwMDMyQTEyQzgyMiBtbWNyYTowWDAwMDAwMDAxCisKKyNHcm91cCAxNjEgcG1fZXBfbXJrX2Rzb3VyY2UxLCBNYXJrZWQgZGF0YSBmcm9tCitldmVudDowWDBBMTAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAxMEIwMDBCMEUxMjQ0NDQgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwQTExIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMTBCMDAwQjBFMTI0NDQ0IG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMEExMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDEwQjAwMEIwRTEyNDQ0NCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDBBMTMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAxMEIwMDBCMEUxMjQ0NDQgbW1jcmE6MFgwMDAwMDAwMQorCisjR3JvdXAgMTYyIHBtX2VwX21ya19kc291cmNlMiwgTWFya2VkIGRhdGEgZnJvbQorZXZlbnQ6MFgwQTIwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMTBCMDAwODJFMTJFNDEwIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMEEyMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDEwQjAwMDgyRTEyRTQxMCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDBBMjIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAxMEIwMDA4MkUxMkU0MTAgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwQTIzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMTBCMDAwODJFMTJFNDEwIG1tY3JhOjBYMDAwMDAwMDEKKworI0dyb3VwIDE2MyBwbV9lcF9tcmtfZHNvdXJjZTMsIE1hcmtlZCBkYXRhIGZyb20KK2V2ZW50OjBYMEEzMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDEwQjAwMDcxMjQ4NEM0QyBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDBBMzEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAxMEIwMDA3MTI0ODRDNEMgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwQTMyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMTBCMDAwNzEyNDg0QzRDIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMEEzMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDEwQjAwMDcxMjQ4NEM0QyBtbWNyYTowWDAwMDAwMDAxCisKKyNHcm91cCAxNjQgcG1fZXBfbXJrX2Rzb3VyY2U0LCBNYXJrZWQgZGF0YSBmcm9tCitldmVudDowWDBBNDAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAxMEIwMDA3MTI0NjJFNDIgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwQTQxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMTBCMDAwNzEyNDYyRTQyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMEE0MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDEwQjAwMDcxMjQ2MkU0MiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDBBNDMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAxMEIwMDA3MTI0NjJFNDIgbW1jcmE6MFgwMDAwMDAwMQorCisjR3JvdXAgMTY1IHBtX2VwX21ya19kc291cmNlNSwgTWFya2VkIGRhdGEgZnJvbQorZXZlbnQ6MFgwQTUwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMTBCMDAwQjNDMTI0MDQwIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMEE1MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDEwQjAwMEIzQzEyNDA0MCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDBBNTIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAxMEIwMDBCM0MxMjQwNDAgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwQTUzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMTBCMDAwQjNDMTI0MDQwIG1tY3JhOjBYMDAwMDAwMDEKKworI0dyb3VwIDE2NiBwbV9lcF9tcmtfZHNvdXJjZTYsIE1hcmtlZCBkYXRhIGZyb20KK2V2ZW50OjBYMEE2MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDEwQjAwMDUxMjQ2MDI0NiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDBBNjEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAxMEIwMDA1MTI0NjAyNDYgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwQTYyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMTBCMDAwNTEyNDYwMjQ2IG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMEE2MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDEwQjAwMDUxMjQ2MDI0NiBtbWNyYTowWDAwMDAwMDAxCisKKyNHcm91cCAxNjcgcG1fZXBfbXJrX2Rzb3VyY2U3LCBNYXJrZWQgZGF0YSBmcm9tCitldmVudDowWDBBNzAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAxMEIwMDA3MTI0RTNDNEUgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwQTcxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMTBCMDAwNzEyNEUzQzRFIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMEE3MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDEwQjAwMDcxMjRFM0M0RSBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDBBNzMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAxMEIwMDA3MTI0RTNDNEUgbW1jcmE6MFgwMDAwMDAwMQorCisjR3JvdXAgMTY4IHBtX2VwX21ya19sYm1pc3MsIE1hcmtlZCBUTEIgYW5kIFNMQiBtaXNzZXMKK2V2ZW50OjBYMEE4MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDIwQzAwMDcxMjFBMUExQSBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDBBODEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAyMEMwMDA3MTIxQTFBMUEgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwQTgyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMjBDMDAwNzEyMUExQTFBIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMEE4MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDIwQzAwMDcxMjFBMUExQSBtbWNyYTowWDAwMDAwMDAxCisKKyNHcm91cCAxNjkgcG1fZXBfbXJrX2R0bGJyZWYsIE1hcmtlZCBkYXRhIFRMQiByZWZlcmVuY2VzCitldmVudDowWDBBOTAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAyMEMwMDA3MTIwQzBDMEMgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwQTkxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMjBDMDAwNzEyMEMwQzBDIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMEE5MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDIwQzAwMDcxMjBDMEMwQyBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDBBOTMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAyMEMwMDA3MTIwQzBDMEMgbW1jcmE6MFgwMDAwMDAwMQorCisjR3JvdXAgMTcwIHBtX2VwX21ya19kdGxibWlzcywgTWFya2VkIGRhdGEgVExCIG1pc3NlcworZXZlbnQ6MFgwQUEwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMjBDMDAwNzEyMUExQTFBIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMEFBMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDIwQzAwMDcxMjFBMUExQSBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDBBQTIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAyMEMwMDA3MTIxQTFBMUEgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwQUEzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMjBDMDAwNzEyMUExQTFBIG1tY3JhOjBYMDAwMDAwMDEKKworI0dyb3VwIDE3MSBwbV9lcF9tcmtfbGJyZWYsIE1hcmtlZCBUTEIgYW5kIFNMQiByZWZlcmVuY2VzCitldmVudDowWDBBQjAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDA2M0MwMDBBMEMxMjBDOEUgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwQUIxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwNjNDMDAwQTBDMTIwQzhFIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMEFCMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDYzQzAwMEEwQzEyMEM4RSBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDBBQjMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDA2M0MwMDBBMEMxMjBDOEUgbW1jcmE6MFgwMDAwMDAwMQorCisjR3JvdXAgMTcyIHBtX2VwX21ya19sc21pc3MsIE1hcmtlZCBsb2FkIGFuZCBzdG9yZSBtaXNzCitldmVudDowWDBBQzAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDgwMDA4MTAxMjA2MEEgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwQUMxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDA4MDAwODEwMTIwNjBBIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMEFDMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwODAwMDgxMDEyMDYwQSBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDBBQzMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDgwMDA4MTAxMjA2MEEgbW1jcmE6MFgwMDAwMDAwMQorCisjR3JvdXAgMTczIHBtX2VwX21ya191bHNmbHVzaCwgTWFyayB1bmFsaWduZWQgbG9hZCBhbmQgc3RvcmUgZmx1c2hlcworZXZlbnQ6MFgwQUQwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDIwMDAwMDA2MTIyMDIwIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMEFEMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAyMDAwMDAwNjEyMjAyMCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDBBRDIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMjAwMDAwMDYxMjIwMjAgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwQUQzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDIwMDAwMDA2MTIyMDIwIG1tY3JhOjBYMDAwMDAwMDEKKworI0dyb3VwIDE3NCBwbV9lcF9tcmtfbWlzYzEsIE1pc2MgbWFya2VkIGluc3RydWN0aW9ucworZXZlbnQ6MFgwQUUwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDEyMDYyODE2IG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMEFFMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAxMjA2MjgxNiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDBBRTIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMTIwNjI4MTYgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwQUUzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDEyMDYyODE2IG1tY3JhOjBYMDAwMDAwMDEKKworI0dyb3VwIDE3NSBwbV9lcF9tcmtfbWlzYzIsIE1pc2MgbWFya2VkIGluc3RydWN0aW9ucworZXZlbnQ6MFgwQUYwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMTBCMDAwNjEyNDQ1RUU0IG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMEFGMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDEwQjAwMDYxMjQ0NUVFNCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDBBRjIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAxMEIwMDA2MTI0NDVFRTQgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwQUYzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMTBCMDAwNjEyNDQ1RUU0IG1tY3JhOjBYMDAwMDAwMDEKKworI0dyb3VwIDE3NiBwbV9lcF9tcmtfbWlzYzMsIE1pc2MgbWFya2VkIGluc3RydWN0aW9ucworZXZlbnQ6MFgwQjAwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwNTNCMDAwNTEyNEM4QzBFIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMEIwMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDUzQjAwMDUxMjRDOEMwRSBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDBCMDIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDA1M0IwMDA1MTI0QzhDMEUgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwQjAzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwNTNCMDAwNTEyNEM4QzBFIG1tY3JhOjBYMDAwMDAwMDEKKworI0dyb3VwIDE3NyBwbV9lcF9tcmtfbWlzYzQsIE1pc2MgbWFya2VkIGluc3RydWN0aW9ucworZXZlbnQ6MFgwQjEwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMzBGMDAwOTFBMTJFODJFIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMEIxMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDMwRjAwMDkxQTEyRTgyRSBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDBCMTIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAzMEYwMDA5MUExMkU4MkUgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwQjEzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMzBGMDAwOTFBMTJFODJFIG1tY3JhOjBYMDAwMDAwMDEKKworI0dyb3VwIDE3OCBwbV9lcF9tcmtfbWlzYzUsIE1pc2MgbWFya2VkIGluc3RydWN0aW9ucworZXZlbnQ6MFgwQjIwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMjJDMDAwODBDMTIwMjg2IG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMEIyMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDIyQzAwMDgwQzEyMDI4NiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDBCMjIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAyMkMwMDA4MEMxMjAyODYgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwQjIzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMjJDMDAwODBDMTIwMjg2IG1tY3JhOjBYMDAwMDAwMDEKKworI0dyb3VwIDE3OSBwbV9lcF9tcmtfbWlzYzYsIE1pc2MgbWFya2VkIGluc3RydWN0aW9ucworZXZlbnQ6MFgwQjMwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMjJDMDAwODFBMTI4ODhBIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMEIzMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDIyQzAwMDgxQTEyODg4QSBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDBCMzIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAyMkMwMDA4MUExMjg4OEEgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwQjMzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMjJDMDAwODFBMTI4ODhBIG1tY3JhOjBYMDAwMDAwMDEKKworI0dyb3VwIDE4MCBwbV9lcF9tcmtfbWlzYzcsIE1pc2MgbWFya2VkIGluc3RydWN0aW9ucworZXZlbnQ6MFgwQjQwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMTJCMDAwNDEyNDA4MjgwIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMEI0MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDEyQjAwMDQxMjQwODI4MCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDBCNDIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAxMkIwMDA0MTI0MDgyODAgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwQjQzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMTJCMDAwNDEyNDA4MjgwIG1tY3JhOjBYMDAwMDAwMDEKKworI0dyb3VwIDE4MSBwbV9lcF9tcmtfbWlzYzgsIE1pc2MgbWFya2VkIGluc3RydWN0aW9ucworZXZlbnQ6MFgwQjUwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDIwMDAwMDEyMEE4NDg2IG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMEI1MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAyMDAwMDAxMjBBODQ4NiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDBCNTIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMjAwMDAwMTIwQTg0ODYgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwQjUzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDIwMDAwMDEyMEE4NDg2IG1tY3JhOjBYMDAwMDAwMDEKKworI0dyb3VwIDE4MiBwbV9lcF9tcmtfbWlzYzksIE1pc2MgbWFya2VkIGluc3RydWN0aW9ucworZXZlbnQ6MFgwQjYwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDI4MDAwMDEyQUM4RUVDIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMEI2MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAyODAwMDAxMkFDOEVFQyBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDBCNjIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMjgwMDAwMTJBQzhFRUMgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwQjYzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDI4MDAwMDEyQUM4RUVDIG1tY3JhOjBYMDAwMDAwMDEKKworI0dyb3VwIDE4MyBwbV9lcF9tcmtfbWlzYzEwLCBNaXNjIG1hcmtlZCBpbnN0cnVjdGlvbnMKK2V2ZW50OjBYMEI3MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwODAwMDQxMkMwRThFNiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDBCNzEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDgwMDA0MTJDMEU4RTYgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwQjcyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDA4MDAwNDEyQzBFOEU2IG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMEI3MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwODAwMDQxMkMwRThFNiBtbWNyYTowWDAwMDAwMDAxCisKKyNHcm91cCAxODQgcG1fZXBfbXJrX21pc2MxMSwgTWlzYyBtYXJrZWQgaW5zdHJ1Y3Rpb25zCitldmVudDowWDBCODAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAxMDMwMDAzMTIwQTQ0M0MgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwQjgxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMTAzMDAwMzEyMEE0NDNDIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMEI4MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDEwMzAwMDMxMjBBNDQzQyBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDBCODMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAxMDMwMDAzMTIwQTQ0M0MgbW1jcmE6MFgwMDAwMDAwMQorCisjR3JvdXAgMTg1IHBtX2VwX21ya19taXNjMTIsIE1pc2MgbWFya2VkIGluc3RydWN0aW9ucworZXZlbnQ6MFgwQjkwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDIwMDAwMDEyNTAxMDEwIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMEI5MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAyMDAwMDAxMjUwMTAxMCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDBCOTIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMjAwMDAwMTI1MDEwMTAgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwQjkzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDIwMDAwMDEyNTAxMDEwIG1tY3JhOjBYMDAwMDAwMDEKKworI0dyb3VwIDE4NiBwbV9lcF9tcmtfbWlzYzEzLCBNaXNjIG1hcmtlZCBpbnN0cnVjdGlvbnMKK2V2ZW50OjBYMEJBMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDEwMzAwMEIwRTEyMzZDQyBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDBCQTEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAxMDMwMDBCMEUxMjM2Q0MgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwQkEyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMTAzMDAwQjBFMTIzNkNDIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMEJBMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDEwMzAwMEIwRTEyMzZDQyBtbWNyYTowWDAwMDAwMDAxCisKKyNHcm91cCAxODcgcG1fZXBfbXJrX21pc2MxNCwgTWlzYyBtYXJrZWQgaW5zdHJ1Y3Rpb25zCitldmVudDowWDBCQjAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMTIyODI4MjggbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwQkIxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDEyMjgyODI4IG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMEJCMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAxMjI4MjgyOCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDBCQjMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMTIyODI4MjggbW1jcmE6MFgwMDAwMDAwMQorCisjR3JvdXAgMTg4IHBtX2VwX21ya19taXNjMTUsIE1pc2MgbWFya2VkIGluc3RydWN0aW9ucworZXZlbnQ6MFgwQkMwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MDAwMDAwNDEyMjIwQTI2IG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMEJDMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMDAwMDQxMjIyMEEyNiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDBCQzIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwMDAwMDA0MTIyMjBBMjYgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwQkMzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MDAwMDAwNDEyMjIwQTI2IG1tY3JhOjBYMDAwMDAwMDEKZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2V2ZW50cy9wcGM2NC9wb3dlcjUrKy9ldmVudHMgYi9vcHJvZmlsZS0wLjkuNy9ldmVudHMvcHBjNjQvcG93ZXI1KysvZXZlbnRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0ZDA1NWIKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9ldmVudHMvcHBjNjQvcG93ZXI1KysvZXZlbnRzCkBAIC0wLDAgKzEsMTE1MSBAQAorI1BQQzY0IFBPV0VSNSsrIGV2ZW50cworIworIyBDb3B5cmlnaHQgT1Byb2ZpbGUgYXV0aG9ycworIyBDb3B5cmlnaHQgKGMpIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMsIDIwMDcuCisjIENvbnRyaWJ1dGVkIGJ5IE1heW5hcmQgSm9obnNvbiA8bWF5bmFyZGpAdXMuaWJtLmNvbT4uCisjCisjCisjICBXaXRoaW4gZWFjaCBncm91cCB0aGUgZXZlbnQgbmFtZXMgbXVzdCBiZSB1bmlxdWUuICBFYWNoIGV2ZW50IGluIGEgZ3JvdXAgaXMKKyMgIGFzc2lnbmVkIHRvIGEgdW5pcXVlIGNvdW50ZXIuICBUaGUgZ3JvdXBzIGFyZSBmcm9tIHRoZSBncm91cHMgZGVmaW5lZCBpbiB0aGUKKyMgIFBlcmZvcm1hbmNlIE1vbml0b3IgVW5pdCB1c2VyIGd1aWRlIGZvciB0aGlzIHByb2Nlc3Nvci4KKyMKKyMgIE9ubHkgZXZlbnRzIHdpdGhpbiB0aGUgc2FtZSBncm91cCBjYW4gYmUgc2VsZWN0ZWQgc2ltdWx0YW5lb3VzbHkuCisjICBFYWNoIGV2ZW50IGlzIGdpdmVuIGEgdW5pcXVlIGV2ZW50IG51bWJlci4gIFRoZSBldmVudCBudW1iZXIgaXMgdXNlZCBieSB0aGUKKyMgIE9Qcm9maWxlIGNvZGUgdG8gcmVzb2x2ZSBldmVudCBuYW1lcyBmb3IgdGhlIHBvc3QtcHJvY2Vzc2luZy4gIFRoaXMgaXMgZG9uZQorIyAgdG8gcHJlc2VydmUgY29tcGF0aWJpbGl0eSB3aXRoIHRoZSByZXN0IG9mIHRoZSBPUHJvZmlsZSBjb2RlLiAgVGhlIGV2ZW50CisjICBudW1iZXJzIGFyZSBmb3JtYXR0ZWQgYXMgZm9sbG93czogPGdyb3VwX251bT5jb25jYXQoPGNvdW50ZXIgZm9yIHRoZSBldmVudD4pLgorCisjR3JvdXAgRGVmYXVsdAorZXZlbnQ6MFgwMDEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpDWUNMRVMgOiBQcm9jZXNzb3IgQ3ljbGVzCisKKyNHcm91cCAwIHdpdGggcmFuZG9tIHNhbXBsaW5nCitldmVudDowWDAwMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOkNZQ0xFU19STkRfU01QTCA6IFByb2Nlc3NvciBDeWNsZXMgd2l0aCByYW5kb20gc2FtcGxpbmcKKworCisjR3JvdXAgMSBwbV91dGlsaXphdGlvbiwgQ1BJIGFuZCB1dGlsaXphdGlvbiBkYXRhCitldmVudDowWDAwMTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDEgOiAoR3JvdXAgMSBwbV91dGlsaXphdGlvbikgUnVuIGN5Y2xlcworZXZlbnQ6MFgwMDExIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDEgOiAoR3JvdXAgMSBwbV91dGlsaXphdGlvbikgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgwMDEyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JTlNUX0RJU1BfR1JQMSA6IChHcm91cCAxIHBtX3V0aWxpemF0aW9uKSBJbnN0cnVjdGlvbnMgZGlzcGF0Y2hlZAorZXZlbnQ6MFgwMDEzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDEgOiAoR3JvdXAgMSBwbV91dGlsaXphdGlvbikgUHJvY2Vzc29yIGN5Y2xlcworCisjR3JvdXAgMiBwbV9jb21wbGV0aW9uLCBDb21wbGV0aW9uIGFuZCBjeWNsZSBjb3VudHMKK2V2ZW50OjBYMDAyMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fMVBMVVNfUFBDX0NNUExfR1JQMiA6IChHcm91cCAyIHBtX2NvbXBsZXRpb24pIE9uZSBvciBtb3JlIFBQQyBpbnN0cnVjdGlvbiBjb21wbGV0ZWQKK2V2ZW50OjBYMDAyMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fR0NUX0VNUFRZX0NZQ19HUlAyIDogKEdyb3VwIDIgcG1fY29tcGxldGlvbikgQ3ljbGVzIEdDVCBlbXB0eQorZXZlbnQ6MFgwMDIyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9HUlBfQ01QTF9HUlAyIDogKEdyb3VwIDIgcG1fY29tcGxldGlvbikgR3JvdXAgY29tcGxldGVkCitldmVudDowWDAwMjMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQMiA6IChHcm91cCAyIHBtX2NvbXBsZXRpb24pIFByb2Nlc3NvciBjeWNsZXMKKworI0dyb3VwIDMgcG1fZ3JvdXBfZGlzcGF0Y2gsIEdyb3VwIGRpc3BhdGNoIGV2ZW50cworZXZlbnQ6MFgwMDMwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9HUlBfRElTUF9WQUxJRF9HUlAzIDogKEdyb3VwIDMgcG1fZ3JvdXBfZGlzcGF0Y2gpIEdyb3VwIGRpc3BhdGNoIHZhbGlkCitldmVudDowWDAwMzEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0dSUF9ESVNQX1JFSkVDVF9HUlAzIDogKEdyb3VwIDMgcG1fZ3JvdXBfZGlzcGF0Y2gpIEdyb3VwIGRpc3BhdGNoIHJlamVjdGVkCitldmVudDowWDAwMzIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0dSUF9ESVNQX0JMS19TQl9DWUNfR1JQMyA6IChHcm91cCAzIHBtX2dyb3VwX2Rpc3BhdGNoKSBDeWNsZXMgZ3JvdXAgZGlzcGF0Y2ggYmxvY2tlZCBieSBzY29yZWJvYXJkCitldmVudDowWDAwMzMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lOU1RfRElTUF9HUlAzIDogKEdyb3VwIDMgcG1fZ3JvdXBfZGlzcGF0Y2gpIEluc3RydWN0aW9ucyBkaXNwYXRjaGVkCisKKyNHcm91cCA0IHBtX2NsYjEsIENMQiBmdWxsbmVzcworZXZlbnQ6MFgwMDQwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV8wSU5TVF9DTEJfQ1lDX0dSUDQgOiAoR3JvdXAgNCBwbV9jbGIxKSBDeWNsZXMgbm8gaW5zdHJ1Y3Rpb25zIGluIENMQgorZXZlbnQ6MFgwMDQxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV8ySU5TVF9DTEJfQ1lDX0dSUDQgOiAoR3JvdXAgNCBwbV9jbGIxKSBDeWNsZXMgMiBpbnN0cnVjdGlvbnMgaW4gQ0xCCitldmVudDowWDAwNDIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0NMQl9FTVBUWV9DWUNfR1JQNCA6IChHcm91cCA0IHBtX2NsYjEpIEN5Y2xlcyBDTEIgZW1wdHkKK2V2ZW50OjBYMDA0MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0RBVEFfRlJPTV9MMzVfTU9EX0NZQ19HUlA0IDogKEdyb3VwIDQgcG1fY2xiMSkgTWFya2VkIGxvYWQgbGF0ZW5jeSBmcm9tIEwzLjUgbW9kaWZpZWQKKworI0dyb3VwIDUgcG1fY2xiMiwgQ0xCIGZ1bGxuZXNzCitldmVudDowWDAwNTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNXzVJTlNUX0NMQl9DWUNfR1JQNSA6IChHcm91cCA1IHBtX2NsYjIpIEN5Y2xlcyA1IGluc3RydWN0aW9ucyBpbiBDTEIKK2V2ZW50OjBYMDA1MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fNklOU1RfQ0xCX0NZQ19HUlA1IDogKEdyb3VwIDUgcG1fY2xiMikgQ3ljbGVzIDYgaW5zdHJ1Y3Rpb25zIGluIENMQgorZXZlbnQ6MFgwMDUyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfTFNVX1NSUV9JTlNUX1ZBTElEX0dSUDUgOiAoR3JvdXAgNSBwbV9jbGIyKSBNYXJrZWQgaW5zdHJ1Y3Rpb24gdmFsaWQgaW4gU1JRCitldmVudDowWDAwNTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lPUFNfQ01QTF9HUlA1IDogKEdyb3VwIDUgcG1fY2xiMikgSW50ZXJuYWwgb3BlcmF0aW9ucyBjb21wbGV0ZWQKKworI0dyb3VwIDYgcG1fZ2N0X2VtcHR5LCBHQ1QgZW1wdHkgcmVhc29ucworZXZlbnQ6MFgwMDYwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9HQ1RfTk9TTE9UX0NZQ19HUlA2IDogKEdyb3VwIDYgcG1fZ2N0X2VtcHR5KSBDeWNsZXMgbm8gR0NUIHNsb3QgYWxsb2NhdGVkCitldmVudDowWDAwNjEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0dDVF9OT1NMT1RfSUNfTUlTU19HUlA2IDogKEdyb3VwIDYgcG1fZ2N0X2VtcHR5KSBObyBzbG90IGluIEdDVCBjYXVzZWQgYnkgSSBjYWNoZSBtaXNzCitldmVudDowWDAwNjIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0dDVF9OT1NMT1RfU1JRX0ZVTExfR1JQNiA6IChHcm91cCA2IHBtX2djdF9lbXB0eSkgTm8gc2xvdCBpbiBHQ1QgY2F1c2VkIGJ5IFNSUSBmdWxsCitldmVudDowWDAwNjMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0dDVF9OT1NMT1RfQlJfTVBSRURfR1JQNiA6IChHcm91cCA2IHBtX2djdF9lbXB0eSkgTm8gc2xvdCBpbiBHQ1QgY2F1c2VkIGJ5IGJyYW5jaCBtaXNwcmVkaWN0CisKKyNHcm91cCA3IHBtX2djdF91c2FnZSwgR0NUIFVzYWdlCitldmVudDowWDAwNzAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0dDVF9VU0FHRV8wMHRvNTlfQ1lDX0dSUDcgOiAoR3JvdXAgNyBwbV9nY3RfdXNhZ2UpIEN5Y2xlcyBHQ1QgbGVzcyB0aGFuIDYwJSBmdWxsCitldmVudDowWDAwNzEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0dDVF9VU0FHRV82MHRvNzlfQ1lDX0dSUDcgOiAoR3JvdXAgNyBwbV9nY3RfdXNhZ2UpIEN5Y2xlcyBHQ1QgNjAtNzklIGZ1bGwKK2V2ZW50OjBYMDA3MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fR0NUX1VTQUdFXzgwdG85OV9DWUNfR1JQNyA6IChHcm91cCA3IHBtX2djdF91c2FnZSkgQ3ljbGVzIEdDVCA4MC05OSUgZnVsbAorZXZlbnQ6MFgwMDczIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9HQ1RfRlVMTF9DWUNfR1JQNyA6IChHcm91cCA3IHBtX2djdF91c2FnZSkgQ3ljbGVzIEdDVCBmdWxsCisKKyNHcm91cCA4IHBtX2xzdTEsIExTVSBMUlEgYW5kIExNUSBldmVudHMKK2V2ZW50OjBYMDA4MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVX0xSUV9TMF9BTExPQ19HUlA4IDogKEdyb3VwIDggcG1fbHN1MSkgTFJRIHNsb3QgMCBhbGxvY2F0ZWQKK2V2ZW50OjBYMDA4MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVX0xSUV9TMF9WQUxJRF9HUlA4IDogKEdyb3VwIDggcG1fbHN1MSkgTFJRIHNsb3QgMCB2YWxpZAorZXZlbnQ6MFgwMDgyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1VfTE1RX1MwX0FMTE9DX0dSUDggOiAoR3JvdXAgOCBwbV9sc3UxKSBMTVEgc2xvdCAwIGFsbG9jYXRlZAorZXZlbnQ6MFgwMDgzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1VfTE1RX1MwX1ZBTElEX0dSUDggOiAoR3JvdXAgOCBwbV9sc3UxKSBMTVEgc2xvdCAwIHZhbGlkCisKKyNHcm91cCA5IHBtX2xzdTIsIExTVSBTUlEgZXZlbnRzCitldmVudDowWDAwOTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9TUlFfUzBfQUxMT0NfR1JQOSA6IChHcm91cCA5IHBtX2xzdTIpIFNSUSBzbG90IDAgYWxsb2NhdGVkCitldmVudDowWDAwOTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9TUlFfUzBfVkFMSURfR1JQOSA6IChHcm91cCA5IHBtX2xzdTIpIFNSUSBzbG90IDAgdmFsaWQKK2V2ZW50OjBYMDA5MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVX1NSUV9TWU5DX0NZQ19HUlA5IDogKEdyb3VwIDkgcG1fbHN1MikgU1JRIHN5bmMgZHVyYXRpb24KK2V2ZW50OjBYMDA5MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVX1NSUV9GVUxMX0NZQ19HUlA5IDogKEdyb3VwIDkgcG1fbHN1MikgQ3ljbGVzIFNSUSBmdWxsCisKKyNHcm91cCAxMCBwbV9sc3UzLCBMU1UgU1JRIGFuZCBMTVEgZXZlbnRzCitldmVudDowWDAwQTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9MTVFfTEhSX01FUkdFX0dSUDEwIDogKEdyb3VwIDEwIHBtX2xzdTMpIExNUSBMSFIgbWVyZ2VzCitldmVudDowWDAwQTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9TUlFfU1RGV0RfR1JQMTAgOiAoR3JvdXAgMTAgcG1fbHN1MykgU1JRIHN0b3JlIGZvcndhcmRlZAorZXZlbnQ6MFgwMEEyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1VfTE1RX1NSUV9FTVBUWV9DWUNfR1JQMTAgOiAoR3JvdXAgMTAgcG1fbHN1MykgQ3ljbGVzIExNUSBhbmQgU1JRIGVtcHR5CitldmVudDowWDAwQTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9TUlFfRU1QVFlfQ1lDX0dSUDEwIDogKEdyb3VwIDEwIHBtX2xzdTMpIEN5Y2xlcyBTUlEgZW1wdHkKKworI0dyb3VwIDExIHBtX2xzdTQsIExTVSBTUlEgYW5kIExNUSBldmVudHMKK2V2ZW50OjBYMDBCMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVX0xNUV9GVUxMX0NZQ19HUlAxMSA6IChHcm91cCAxMSBwbV9sc3U0KSBDeWNsZXMgTE1RIGZ1bGwKK2V2ZW50OjBYMDBCMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVX1NSUV9GVUxMX0NZQ19HUlAxMSA6IChHcm91cCAxMSBwbV9sc3U0KSBDeWNsZXMgU1JRIGZ1bGwKK2V2ZW50OjBYMDBCMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVX0xNUV9TUlFfRU1QVFlfQ1lDX0dSUDExIDogKEdyb3VwIDExIHBtX2xzdTQpIEN5Y2xlcyBMTVEgYW5kIFNSUSBlbXB0eQorZXZlbnQ6MFgwMEIzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1VfU1JRX0VNUFRZX0NZQ19HUlAxMSA6IChHcm91cCAxMSBwbV9sc3U0KSBDeWNsZXMgU1JRIGVtcHR5CisKKyNHcm91cCAxMiBwbV9wcmVmZXRjaDEsIFByZWZldGNoIHN0cmVhbSBhbGxvY2F0aW9uCitldmVudDowWDAwQzAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lOU1RfRlJPTV9MMk1JU1NfR1JQMTIgOiAoR3JvdXAgMTIgcG1fcHJlZmV0Y2gxKSBJbnN0cnVjdGlvbiBmZXRjaGVkIG1pc3NlZCBMMgorZXZlbnQ6MFgwMEMxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JTlNUX0ZFVENIX0NZQ19HUlAxMiA6IChHcm91cCAxMiBwbV9wcmVmZXRjaDEpIEN5Y2xlcyBhdCBsZWFzdCAxIGluc3RydWN0aW9uIGZldGNoZWQKK2V2ZW50OjBYMDBDMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRENfUFJFRl9PVVRfT0ZfU1RSRUFNU19HUlAxMiA6IChHcm91cCAxMiBwbV9wcmVmZXRjaDEpIEQgY2FjaGUgb3V0IG9mIHByZWZldGNoIHN0cmVhbXMKK2V2ZW50OjBYMDBDMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRENfUFJFRl9TVFJFQU1fQUxMT0NfR1JQMTIgOiAoR3JvdXAgMTIgcG1fcHJlZmV0Y2gxKSBEIGNhY2hlIG5ldyBwcmVmZXRjaCBzdHJlYW0gYWxsb2NhdGVkCisKKyNHcm91cCAxMyBwbV9wcmVmZXRjaDIsIFByZWZldGNoIGV2ZW50cworZXZlbnQ6MFgwMEQwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JT1BTX0NNUExfR1JQMTMgOiAoR3JvdXAgMTMgcG1fcHJlZmV0Y2gyKSBJbnRlcm5hbCBvcGVyYXRpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgwMEQxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9DTEJfRlVMTF9DWUNfR1JQMTMgOiAoR3JvdXAgMTMgcG1fcHJlZmV0Y2gyKSBDeWNsZXMgQ0xCIGZ1bGwKK2V2ZW50OjBYMDBEMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDFfUFJFRl9HUlAxMyA6IChHcm91cCAxMyBwbV9wcmVmZXRjaDIpIEwxIGNhY2hlIGRhdGEgcHJlZmV0Y2hlcworZXZlbnQ6MFgwMEQzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JQ19QUkVGX0lOU1RBTExfR1JQMTMgOiAoR3JvdXAgMTMgcG1fcHJlZmV0Y2gyKSBJbnN0cnVjdGlvbiBwcmVmZXRjaGVkIGluc3RhbGxlZCBpbiBwcmVmZXRjaCBidWZmZXIKKworI0dyb3VwIDE0IHBtX3ByZWZldGNoMywgTDIgcHJlZmV0Y2ggYW5kIG1pc2MgZXZlbnRzCitldmVudDowWDAwRTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNXzFJTlNUX0NMQl9DWUNfR1JQMTQgOiAoR3JvdXAgMTQgcG1fcHJlZmV0Y2gzKSBDeWNsZXMgMSBpbnN0cnVjdGlvbiBpbiBDTEIKK2V2ZW50OjBYMDBFMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVX0JVU1lfUkVKRUNUX0dSUDE0IDogKEdyb3VwIDE0IHBtX3ByZWZldGNoMykgTFNVIGJ1c3kgZHVlIHRvIHJlamVjdAorZXZlbnQ6MFgwMEUyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMl9QUkVGX0dSUDE0IDogKEdyb3VwIDE0IHBtX3ByZWZldGNoMykgTDIgY2FjaGUgcHJlZmV0Y2hlcworZXZlbnQ6MFgwMEUzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JT1BTX0NNUExfR1JQMTQgOiAoR3JvdXAgMTQgcG1fcHJlZmV0Y2gzKSBJbnRlcm5hbCBvcGVyYXRpb25zIGNvbXBsZXRlZAorCisjR3JvdXAgMTUgcG1fcHJlZmV0Y2g0LCBNaXNjIHByZWZldGNoIGFuZCByZWplY3QgZXZlbnRzCitldmVudDowWDAwRjAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVTBfUkVKRUNUX1NSUV9HUlAxNSA6IChHcm91cCAxNSBwbV9wcmVmZXRjaDQpIExTVTAgU1JRIGxocyByZWplY3RzCitldmVudDowWDAwRjEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVTFfUkVKRUNUX1NSUV9HUlAxNSA6IChHcm91cCAxNSBwbV9wcmVmZXRjaDQpIExTVTEgU1JRIGxocyByZWplY3RzCitldmVudDowWDAwRjIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RDX1BSRUZfRFNUX0dSUDE1IDogKEdyb3VwIDE1IHBtX3ByZWZldGNoNCkgRFNUIChEYXRhIFN0cmVhbSBUb3VjaCkgc3RyZWFtIHN0YXJ0CitldmVudDowWDAwRjMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wyX1BSRUZfR1JQMTUgOiAoR3JvdXAgMTUgcG1fcHJlZmV0Y2g0KSBMMiBjYWNoZSBwcmVmZXRjaGVzCisKKyNHcm91cCAxNiBwbV9sc3VfcmVqZWN0MSwgTFNVIHJlamVjdCBldmVudHMKK2V2ZW50OjBYMDEwMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVX1JFSkVDVF9FUkFUX01JU1NfR1JQMTYgOiAoR3JvdXAgMTYgcG1fbHN1X3JlamVjdDEpIExTVSByZWplY3QgZHVlIHRvIEVSQVQgbWlzcworZXZlbnQ6MFgwMTAxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1VfUkVKRUNUX0xNUV9GVUxMX0dSUDE2IDogKEdyb3VwIDE2IHBtX2xzdV9yZWplY3QxKSBMU1UgcmVqZWN0IGR1ZSB0byBMTVEgZnVsbCBvciBtaXNzZWQgZGF0YSBjb21pbmcKK2V2ZW50OjBYMDEwMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRkxVU0hfSU1CQUxfR1JQMTYgOiAoR3JvdXAgMTYgcG1fbHN1X3JlamVjdDEpIEZsdXNoIGNhdXNlZCBieSB0aHJlYWQgR0NUIGltYmFsYW5jZQorZXZlbnQ6MFgwMTAzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfTFNVX0ZMVVNIX1NSUV9HUlAxNiA6IChHcm91cCAxNiBwbV9sc3VfcmVqZWN0MSkgTWFya2VkIFNSUSBsaHMgZmx1c2hlcworCisjR3JvdXAgMTcgcG1fbHN1X3JlamVjdDIsIExTVSByZWplY3RzIGR1ZSB0byByZWxvYWQgQ0RGIG9yIHRhZyB1cGRhdGUgY29sbGlzaW9uCitldmVudDowWDAxMTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVTBfUkVKRUNUX1JFTE9BRF9DREZfR1JQMTcgOiAoR3JvdXAgMTcgcG1fbHN1X3JlamVjdDIpIExTVTAgcmVqZWN0IGR1ZSB0byByZWxvYWQgQ0RGIG9yIHRhZyB1cGRhdGUgY29sbGlzaW9uCitldmVudDowWDAxMTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVTFfUkVKRUNUX1JFTE9BRF9DREZfR1JQMTcgOiAoR3JvdXAgMTcgcG1fbHN1X3JlamVjdDIpIExTVTEgcmVqZWN0IGR1ZSB0byByZWxvYWQgQ0RGIG9yIHRhZyB1cGRhdGUgY29sbGlzaW9uCitldmVudDowWDAxMTIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lPUFNfQ01QTF9HUlAxNyA6IChHcm91cCAxNyBwbV9sc3VfcmVqZWN0MikgSW50ZXJuYWwgb3BlcmF0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMDExMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDFfV1JJVEVfQ1lDX0dSUDE3IDogKEdyb3VwIDE3IHBtX2xzdV9yZWplY3QyKSBDeWNsZXMgd3JpdGluZyB0byBpbnN0cnVjdGlvbiBMMQorCisjR3JvdXAgMTggcG1fbHN1X3JlamVjdDMsIExTVSByZWplY3RzIGR1ZSB0byBFUkFULCBoZWxkIGluc3R1Y3Rpb25zCitldmVudDowWDAxMjAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVTBfUkVKRUNUX0VSQVRfTUlTU19HUlAxOCA6IChHcm91cCAxOCBwbV9sc3VfcmVqZWN0MykgTFNVMCByZWplY3QgZHVlIHRvIEVSQVQgbWlzcworZXZlbnQ6MFgwMTIxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1UxX1JFSkVDVF9FUkFUX01JU1NfR1JQMTggOiAoR3JvdXAgMTggcG1fbHN1X3JlamVjdDMpIExTVTEgcmVqZWN0IGR1ZSB0byBFUkFUIG1pc3MKK2V2ZW50OjBYMDEyMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFdTWU5DX0hFTERfR1JQMTggOiAoR3JvdXAgMTggcG1fbHN1X3JlamVjdDMpIExXU1lOQyBoZWxkIGF0IGRpc3BhdGNoCitldmVudDowWDAxMjMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1RMQklFX0hFTERfR1JQMTggOiAoR3JvdXAgMTggcG1fbHN1X3JlamVjdDMpIFRMQklFIGhlbGQgYXQgZGlzcGF0Y2gKKworI0dyb3VwIDE5IHBtX2xzdV9yZWplY3Q0LCBMU1UwLzEgcmVqZWN0IExNUSBmdWxsCitldmVudDowWDAxMzAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVTBfUkVKRUNUX0xNUV9GVUxMX0dSUDE5IDogKEdyb3VwIDE5IHBtX2xzdV9yZWplY3Q0KSBMU1UwIHJlamVjdCBkdWUgdG8gTE1RIGZ1bGwgb3IgbWlzc2VkIGRhdGEgY29taW5nCitldmVudDowWDAxMzEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVTFfUkVKRUNUX0xNUV9GVUxMX0dSUDE5IDogKEdyb3VwIDE5IHBtX2xzdV9yZWplY3Q0KSBMU1UxIHJlamVjdCBkdWUgdG8gTE1RIGZ1bGwgb3IgbWlzc2VkIGRhdGEgY29taW5nCitldmVudDowWDAxMzIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lPUFNfQ01QTF9HUlAxOSA6IChHcm91cCAxOSBwbV9sc3VfcmVqZWN0NCkgSW50ZXJuYWwgb3BlcmF0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMDEzMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fQlJfSVNTVUVEX0dSUDE5IDogKEdyb3VwIDE5IHBtX2xzdV9yZWplY3Q0KSBCcmFuY2hlcyBpc3N1ZWQKKworI0dyb3VwIDIwIHBtX2xzdV9yZWplY3Q1LCBMU1UgbWlzYyByZWplY3QgYW5kIGZsdXNoIGV2ZW50cworZXZlbnQ6MFgwMTQwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1VfUkVKRUNUX1NSUV9HUlAyMCA6IChHcm91cCAyMCBwbV9sc3VfcmVqZWN0NSkgTFNVIFNSUSBsaHMgcmVqZWN0cworZXZlbnQ6MFgwMTQxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1VfUkVKRUNUX1JFTE9BRF9DREZfR1JQMjAgOiAoR3JvdXAgMjAgcG1fbHN1X3JlamVjdDUpIExTVSByZWplY3QgZHVlIHRvIHJlbG9hZCBDREYgb3IgdGFnIHVwZGF0ZSBjb2xsaXNpb24KK2V2ZW50OjBYMDE0MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVX0ZMVVNIX0dSUDIwIDogKEdyb3VwIDIwIHBtX2xzdV9yZWplY3Q1KSBGbHVzaCBpbml0aWF0ZWQgYnkgTFNVCitldmVudDowWDAxNDMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZMVVNIX0dSUDIwIDogKEdyb3VwIDIwIHBtX2xzdV9yZWplY3Q1KSBGbHVzaGVzCisKKyNHcm91cCAyMSBwbV9mbHVzaDEsIE1pc2MgZmx1c2ggZXZlbnRzCitldmVudDowWDAxNTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lPUFNfQ01QTF9HUlAyMSA6IChHcm91cCAyMSBwbV9mbHVzaDEpIEludGVybmFsIG9wZXJhdGlvbnMgY29tcGxldGVkCitldmVudDowWDAxNTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9GTFVTSF9VU1RfR1JQMjEgOiAoR3JvdXAgMjEgcG1fZmx1c2gxKSBTUlEgdW5hbGlnbmVkIHN0b3JlIGZsdXNoZXMKK2V2ZW50OjBYMDE1MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRkxVU0hfSU1CQUxfR1JQMjEgOiAoR3JvdXAgMjEgcG1fZmx1c2gxKSBGbHVzaCBjYXVzZWQgYnkgdGhyZWFkIEdDVCBpbWJhbGFuY2UKK2V2ZW50OjBYMDE1MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRENfSU5WX0wyX0dSUDIxIDogKEdyb3VwIDIxIHBtX2ZsdXNoMSkgTDEgRCBjYWNoZSBlbnRyaWVzIGludmFsaWRhdGVkIGZyb20gTDIKKworI0dyb3VwIDIyIHBtX2ZsdXNoMiwgRmx1c2hlcyBkdWUgdG8gc2NvcmVib2FyZCBhbmQgc3luYworZXZlbnQ6MFgwMTYwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JVExCX01JU1NfR1JQMjIgOiAoR3JvdXAgMjIgcG1fZmx1c2gyKSBJbnN0cnVjdGlvbiBUTEIgbWlzc2VzCitldmVudDowWDAxNjEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lPUFNfQ01QTF9HUlAyMiA6IChHcm91cCAyMiBwbV9mbHVzaDIpIEludGVybmFsIG9wZXJhdGlvbnMgY29tcGxldGVkCitldmVudDowWDAxNjIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZMVVNIX1NCX0dSUDIyIDogKEdyb3VwIDIyIHBtX2ZsdXNoMikgRmx1c2ggY2F1c2VkIGJ5IHNjb3JlYm9hcmQgb3BlcmF0aW9uCitldmVudDowWDAxNjMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZMVVNIX1NZTkNfR1JQMjIgOiAoR3JvdXAgMjIgcG1fZmx1c2gyKSBGbHVzaCBjYXVzZWQgYnkgc3luYworCisjR3JvdXAgMjMgcG1fbHN1X2ZsdXNoX3NycV9scnEsIExTVSBmbHVzaCBieSBTUlEgYW5kIExSUSBldmVudHMKK2V2ZW50OjBYMDE3MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVX0ZMVVNIX1NSUV9HUlAyMyA6IChHcm91cCAyMyBwbV9sc3VfZmx1c2hfc3JxX2xycSkgU1JRIGZsdXNoZXMKK2V2ZW50OjBYMDE3MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVX0ZMVVNIX0xSUV9HUlAyMyA6IChHcm91cCAyMyBwbV9sc3VfZmx1c2hfc3JxX2xycSkgTFJRIGZsdXNoZXMKK2V2ZW50OjBYMDE3MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU9QU19DTVBMX0dSUDIzIDogKEdyb3VwIDIzIHBtX2xzdV9mbHVzaF9zcnFfbHJxKSBJbnRlcm5hbCBvcGVyYXRpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgwMTczIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1VfRkxVU0hfR1JQMjMgOiAoR3JvdXAgMjMgcG1fbHN1X2ZsdXNoX3NycV9scnEpIEZsdXNoIGluaXRpYXRlZCBieSBMU1UKKworI0dyb3VwIDI0IHBtX2xzdV9mbHVzaF9scnEsIExTVTAvMSBmbHVzaCBkdWUgdG8gTFJRCitldmVudDowWDAxODAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVTBfRkxVU0hfTFJRX0dSUDI0IDogKEdyb3VwIDI0IHBtX2xzdV9mbHVzaF9scnEpIExTVTAgTFJRIGZsdXNoZXMKK2V2ZW50OjBYMDE4MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVMV9GTFVTSF9MUlFfR1JQMjQgOiAoR3JvdXAgMjQgcG1fbHN1X2ZsdXNoX2xycSkgTFNVMSBMUlEgZmx1c2hlcworZXZlbnQ6MFgwMTgyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1VfRkxVU0hfR1JQMjQgOiAoR3JvdXAgMjQgcG1fbHN1X2ZsdXNoX2xycSkgRmx1c2ggaW5pdGlhdGVkIGJ5IExTVQorZXZlbnQ6MFgwMTgzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JT1BTX0NNUExfR1JQMjQgOiAoR3JvdXAgMjQgcG1fbHN1X2ZsdXNoX2xycSkgSW50ZXJuYWwgb3BlcmF0aW9ucyBjb21wbGV0ZWQKKworI0dyb3VwIDI1IHBtX2xzdV9mbHVzaF9zcnEsIExTVTAvMSBmbHVzaCBkdWUgdG8gU1JRCitldmVudDowWDAxOTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVTBfRkxVU0hfU1JRX0dSUDI1IDogKEdyb3VwIDI1IHBtX2xzdV9mbHVzaF9zcnEpIExTVTAgU1JRIGxocyBmbHVzaGVzCitldmVudDowWDAxOTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVTFfRkxVU0hfU1JRX0dSUDI1IDogKEdyb3VwIDI1IHBtX2xzdV9mbHVzaF9zcnEpIExTVTEgU1JRIGxocyBmbHVzaGVzCitldmVudDowWDAxOTIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lPUFNfQ01QTF9HUlAyNSA6IChHcm91cCAyNSBwbV9sc3VfZmx1c2hfc3JxKSBJbnRlcm5hbCBvcGVyYXRpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgwMTkzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1VfRkxVU0hfR1JQMjUgOiAoR3JvdXAgMjUgcG1fbHN1X2ZsdXNoX3NycSkgRmx1c2ggaW5pdGlhdGVkIGJ5IExTVQorCisjR3JvdXAgMjYgcG1fbHN1X2ZsdXNoX3VuYWxpZ25lZCwgTFNVIGZsdXNoIGR1ZSB0byB1bmFsaWduZWQgZGF0YQorZXZlbnQ6MFgwMUEwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1VfRkxVU0hfVUxEX0dSUDI2IDogKEdyb3VwIDI2IHBtX2xzdV9mbHVzaF91bmFsaWduZWQpIExSUSB1bmFsaWduZWQgbG9hZCBmbHVzaGVzCitldmVudDowWDAxQTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9GTFVTSF9VU1RfR1JQMjYgOiAoR3JvdXAgMjYgcG1fbHN1X2ZsdXNoX3VuYWxpZ25lZCkgU1JRIHVuYWxpZ25lZCBzdG9yZSBmbHVzaGVzCitldmVudDowWDAxQTIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0JSX0lTU1VFRF9HUlAyNiA6IChHcm91cCAyNiBwbV9sc3VfZmx1c2hfdW5hbGlnbmVkKSBCcmFuY2hlcyBpc3N1ZWQKK2V2ZW50OjBYMDFBMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU9QU19DTVBMX0dSUDI2IDogKEdyb3VwIDI2IHBtX2xzdV9mbHVzaF91bmFsaWduZWQpIEludGVybmFsIG9wZXJhdGlvbnMgY29tcGxldGVkCisKKyNHcm91cCAyNyBwbV9sc3VfZmx1c2hfdWxkLCBMU1UwLzEgZmx1c2ggZHVlIHRvIHVuYWxpZ25lZCBsb2FkCitldmVudDowWDAxQjAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVTBfRkxVU0hfVUxEX0dSUDI3IDogKEdyb3VwIDI3IHBtX2xzdV9mbHVzaF91bGQpIExTVTAgdW5hbGlnbmVkIGxvYWQgZmx1c2hlcworZXZlbnQ6MFgwMUIxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1UxX0ZMVVNIX1VMRF9HUlAyNyA6IChHcm91cCAyNyBwbV9sc3VfZmx1c2hfdWxkKSBMU1UxIHVuYWxpZ25lZCBsb2FkIGZsdXNoZXMKK2V2ZW50OjBYMDFCMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVX0ZMVVNIX0dSUDI3IDogKEdyb3VwIDI3IHBtX2xzdV9mbHVzaF91bGQpIEZsdXNoIGluaXRpYXRlZCBieSBMU1UKK2V2ZW50OjBYMDFCMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU9QU19DTVBMX0dSUDI3IDogKEdyb3VwIDI3IHBtX2xzdV9mbHVzaF91bGQpIEludGVybmFsIG9wZXJhdGlvbnMgY29tcGxldGVkCisKKyNHcm91cCAyOCBwbV9sc3VfZmx1c2hfdXN0LCBMU1UwLzEgZmx1c2ggZHVlIHRvIHVuYWxpZ25lZCBzdG9yZQorZXZlbnQ6MFgwMUMwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1UwX0ZMVVNIX1VTVF9HUlAyOCA6IChHcm91cCAyOCBwbV9sc3VfZmx1c2hfdXN0KSBMU1UwIHVuYWxpZ25lZCBzdG9yZSBmbHVzaGVzCitldmVudDowWDAxQzEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVTFfRkxVU0hfVVNUX0dSUDI4IDogKEdyb3VwIDI4IHBtX2xzdV9mbHVzaF91c3QpIExTVTEgdW5hbGlnbmVkIHN0b3JlIGZsdXNoZXMKK2V2ZW50OjBYMDFDMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU9QU19DTVBMX0dSUDI4IDogKEdyb3VwIDI4IHBtX2xzdV9mbHVzaF91c3QpIEludGVybmFsIG9wZXJhdGlvbnMgY29tcGxldGVkCitldmVudDowWDAxQzMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9GTFVTSF9HUlAyOCA6IChHcm91cCAyOCBwbV9sc3VfZmx1c2hfdXN0KSBGbHVzaCBpbml0aWF0ZWQgYnkgTFNVCisKKyNHcm91cCAyOSBwbV9sc3VfZmx1c2hfZnVsbCwgTFNVIGZsdXNoIGR1ZSB0byBMUlEvU1JRIGZ1bGwKK2V2ZW50OjBYMDFEMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVX0ZMVVNIX0xSUV9GVUxMX0dSUDI5IDogKEdyb3VwIDI5IHBtX2xzdV9mbHVzaF9mdWxsKSBGbHVzaCBjYXVzZWQgYnkgTFJRIGZ1bGwKK2V2ZW50OjBYMDFEMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU9QU19DTVBMX0dSUDI5IDogKEdyb3VwIDI5IHBtX2xzdV9mbHVzaF9mdWxsKSBJbnRlcm5hbCBvcGVyYXRpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgwMUQyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfTFNVX0ZMVVNIX0xSUV9HUlAyOSA6IChHcm91cCAyOSBwbV9sc3VfZmx1c2hfZnVsbCkgTWFya2VkIExSUSBmbHVzaGVzCitldmVudDowWDAxRDMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9GTFVTSF9TUlFfRlVMTF9HUlAyOSA6IChHcm91cCAyOSBwbV9sc3VfZmx1c2hfZnVsbCkgRmx1c2ggY2F1c2VkIGJ5IFNSUSBmdWxsCisKKyNHcm91cCAzMCBwbV9sc3Vfc3RhbGwxLCBMU1UgU3RhbGxzCitldmVudDowWDAxRTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0dSUF9NUktfR1JQMzAgOiAoR3JvdXAgMzAgcG1fbHN1X3N0YWxsMSkgR3JvdXAgbWFya2VkIGluIElEVQorZXZlbnQ6MFgwMUUxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9DTVBMVV9TVEFMTF9MU1VfR1JQMzAgOiAoR3JvdXAgMzAgcG1fbHN1X3N0YWxsMSkgQ29tcGxldGlvbiBzdGFsbCBjYXVzZWQgYnkgTFNVIGluc3RydWN0aW9uCitldmVudDowWDAxRTIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lPUFNfQ01QTF9HUlAzMCA6IChHcm91cCAzMCBwbV9sc3Vfc3RhbGwxKSBJbnRlcm5hbCBvcGVyYXRpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgwMUUzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9DTVBMVV9TVEFMTF9SRUpFQ1RfR1JQMzAgOiAoR3JvdXAgMzAgcG1fbHN1X3N0YWxsMSkgQ29tcGxldGlvbiBzdGFsbCBjYXVzZWQgYnkgcmVqZWN0CisKKyNHcm91cCAzMSBwbV9sc3Vfc3RhbGwyLCBMU1UgU3RhbGxzCitldmVudDowWDAxRjAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lPUFNfQ01QTF9HUlAzMSA6IChHcm91cCAzMSBwbV9sc3Vfc3RhbGwyKSBJbnRlcm5hbCBvcGVyYXRpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgwMUYxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9DTVBMVV9TVEFMTF9EQ0FDSEVfTUlTU19HUlAzMSA6IChHcm91cCAzMSBwbV9sc3Vfc3RhbGwyKSBDb21wbGV0aW9uIHN0YWxsIGNhdXNlZCBieSBEIGNhY2hlIG1pc3MKK2V2ZW50OjBYMDFGMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlAzMSA6IChHcm91cCAzMSBwbV9sc3Vfc3RhbGwyKSBQcm9jZXNzb3IgY3ljbGVzCitldmVudDowWDAxRjMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0NNUExVX1NUQUxMX0VSQVRfTUlTU19HUlAzMSA6IChHcm91cCAzMSBwbV9sc3Vfc3RhbGwyKSBDb21wbGV0aW9uIHN0YWxsIGNhdXNlZCBieSBFUkFUIG1pc3MKKworI0dyb3VwIDMyIHBtX2Z4dV9zdGFsbCwgRlhVIFN0YWxscworZXZlbnQ6MFgwMjAwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9HUlBfSUNfTUlTU19CUl9SRURJUl9OT05TUEVDX0dSUDMyIDogKEdyb3VwIDMyIHBtX2Z4dV9zdGFsbCkgR3JvdXAgZXhwZXJpZW5jZWQgbm9uLXNwZWN1bGF0aXZlIEkgY2FjaGUgbWlzcyBvciBicmFuY2ggcmVkaXJlY3QKK2V2ZW50OjBYMDIwMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fQ01QTFVfU1RBTExfRlhVX0dSUDMyIDogKEdyb3VwIDMyIHBtX2Z4dV9zdGFsbCkgQ29tcGxldGlvbiBzdGFsbCBjYXVzZWQgYnkgRlhVIGluc3RydWN0aW9uCitldmVudDowWDAyMDIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lPUFNfQ01QTF9HUlAzMiA6IChHcm91cCAzMiBwbV9meHVfc3RhbGwpIEludGVybmFsIG9wZXJhdGlvbnMgY29tcGxldGVkCitldmVudDowWDAyMDMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0NNUExVX1NUQUxMX0RJVl9HUlAzMiA6IChHcm91cCAzMiBwbV9meHVfc3RhbGwpIENvbXBsZXRpb24gc3RhbGwgY2F1c2VkIGJ5IERJViBpbnN0cnVjdGlvbgorCisjR3JvdXAgMzMgcG1fZnB1X3N0YWxsLCBGUFUgU3RhbGxzCitldmVudDowWDAyMTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVV9GVUxMX0NZQ19HUlAzMyA6IChHcm91cCAzMyBwbV9mcHVfc3RhbGwpIEN5Y2xlcyBGUFUgaXNzdWUgcXVldWUgZnVsbAorZXZlbnQ6MFgwMjExIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9DTVBMVV9TVEFMTF9GRElWX0dSUDMzIDogKEdyb3VwIDMzIHBtX2ZwdV9zdGFsbCkgQ29tcGxldGlvbiBzdGFsbCBjYXVzZWQgYnkgRkRJViBvciBGUVJUIGluc3RydWN0aW9uCitldmVudDowWDAyMTIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lPUFNfQ01QTF9HUlAzMyA6IChHcm91cCAzMyBwbV9mcHVfc3RhbGwpIEludGVybmFsIG9wZXJhdGlvbnMgY29tcGxldGVkCitldmVudDowWDAyMTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0NNUExVX1NUQUxMX0ZQVV9HUlAzMyA6IChHcm91cCAzMyBwbV9mcHVfc3RhbGwpIENvbXBsZXRpb24gc3RhbGwgY2F1c2VkIGJ5IEZQVSBpbnN0cnVjdGlvbgorCisjR3JvdXAgMzQgcG1fcXVldWVfZnVsbCwgQlJRIExSUSBMTVEgcXVldWUgZnVsbAorZXZlbnQ6MFgwMjIwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MQVJYX0xTVTBfR1JQMzQgOiAoR3JvdXAgMzQgcG1fcXVldWVfZnVsbCkgTGFyeCBleGVjdXRlZCBvbiBMU1UwCitldmVudDowWDAyMjEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0JSUV9GVUxMX0NZQ19HUlAzNCA6IChHcm91cCAzNCBwbV9xdWV1ZV9mdWxsKSBDeWNsZXMgYnJhbmNoIHF1ZXVlIGZ1bGwKK2V2ZW50OjBYMDIyMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVX0xSUV9GVUxMX0NZQ19HUlAzNCA6IChHcm91cCAzNCBwbV9xdWV1ZV9mdWxsKSBDeWNsZXMgTFJRIGZ1bGwKK2V2ZW50OjBYMDIyMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVX0xNUV9GVUxMX0NZQ19HUlAzNCA6IChHcm91cCAzNCBwbV9xdWV1ZV9mdWxsKSBDeWNsZXMgTE1RIGZ1bGwKKworI0dyb3VwIDM1IHBtX2lzc3VlcV9mdWxsLCBGUFUgRlggZnVsbAorZXZlbnQ6MFgwMjMwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFUwX0ZVTExfQ1lDX0dSUDM1IDogKEdyb3VwIDM1IHBtX2lzc3VlcV9mdWxsKSBDeWNsZXMgRlBVMCBpc3N1ZSBxdWV1ZSBmdWxsCitldmVudDowWDAyMzEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVTFfRlVMTF9DWUNfR1JQMzUgOiAoR3JvdXAgMzUgcG1faXNzdWVxX2Z1bGwpIEN5Y2xlcyBGUFUxIGlzc3VlIHF1ZXVlIGZ1bGwKK2V2ZW50OjBYMDIzMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlhMUzBfRlVMTF9DWUNfR1JQMzUgOiAoR3JvdXAgMzUgcG1faXNzdWVxX2Z1bGwpIEN5Y2xlcyBGWFUwL0xTMCBxdWV1ZSBmdWxsCitldmVudDowWDAyMzMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZYTFMxX0ZVTExfQ1lDX0dSUDM1IDogKEdyb3VwIDM1IHBtX2lzc3VlcV9mdWxsKSBDeWNsZXMgRlhVMS9MUzEgcXVldWUgZnVsbAorCisjR3JvdXAgMzYgcG1fbWFwcGVyX2Z1bGwxLCBDUiBDVFIgR1BSIG1hcHBlciBmdWxsCitldmVudDowWDAyNDAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0NSX01BUF9GVUxMX0NZQ19HUlAzNiA6IChHcm91cCAzNiBwbV9tYXBwZXJfZnVsbDEpIEN5Y2xlcyBDUiBsb2dpY2FsIG9wZXJhdGlvbiBtYXBwZXIgZnVsbAorZXZlbnQ6MFgwMjQxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MUl9DVFJfTUFQX0ZVTExfQ1lDX0dSUDM2IDogKEdyb3VwIDM2IHBtX21hcHBlcl9mdWxsMSkgQ3ljbGVzIExSL0NUUiBtYXBwZXIgZnVsbAorZXZlbnQ6MFgwMjQyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9HUFJfTUFQX0ZVTExfQ1lDX0dSUDM2IDogKEdyb3VwIDM2IHBtX21hcHBlcl9mdWxsMSkgQ3ljbGVzIEdQUiBtYXBwZXIgZnVsbAorZXZlbnQ6MFgwMjQzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9DUlFfRlVMTF9DWUNfR1JQMzYgOiAoR3JvdXAgMzYgcG1fbWFwcGVyX2Z1bGwxKSBDeWNsZXMgQ1IgaXNzdWUgcXVldWUgZnVsbAorCisjR3JvdXAgMzcgcG1fbWFwcGVyX2Z1bGwyLCBGUFIgWEVSIG1hcHBlciBmdWxsCitldmVudDowWDAyNTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQUl9NQVBfRlVMTF9DWUNfR1JQMzcgOiAoR3JvdXAgMzcgcG1fbWFwcGVyX2Z1bGwyKSBDeWNsZXMgRlBSIG1hcHBlciBmdWxsCitldmVudDowWDAyNTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1hFUl9NQVBfRlVMTF9DWUNfR1JQMzcgOiAoR3JvdXAgMzcgcG1fbWFwcGVyX2Z1bGwyKSBDeWNsZXMgWEVSIG1hcHBlciBmdWxsCitldmVudDowWDAyNTIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19EQVRBX0ZST01fTDJNSVNTX0dSUDM3IDogKEdyb3VwIDM3IHBtX21hcHBlcl9mdWxsMikgTWFya2VkIGRhdGEgbG9hZGVkIG1pc3NlZCBMMgorZXZlbnQ6MFgwMjUzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JT1BTX0NNUExfR1JQMzcgOiAoR3JvdXAgMzcgcG1fbWFwcGVyX2Z1bGwyKSBJbnRlcm5hbCBvcGVyYXRpb25zIGNvbXBsZXRlZAorCisjR3JvdXAgMzggcG1fbWlzY19sb2FkLCBOb24tY2FjaGFibGUgbG9hZHMgYW5kIHN0Y3ggZXZlbnRzCitldmVudDowWDAyNjAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1NUQ1hfRkFJTF9HUlAzOCA6IChHcm91cCAzOCBwbV9taXNjX2xvYWQpIFNUQ1ggZmFpbGVkCitldmVudDowWDAyNjEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1NUQ1hfUEFTU19HUlAzOCA6IChHcm91cCAzOCBwbV9taXNjX2xvYWQpIFN0Y3ggcGFzc2VzCitldmVudDowWDAyNjIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVTBfTkNMRF9HUlAzOCA6IChHcm91cCAzOCBwbV9taXNjX2xvYWQpIExTVTAgbm9uLWNhY2hlYWJsZSBsb2FkcworZXZlbnQ6MFgwMjYzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1UxX05DTERfR1JQMzggOiAoR3JvdXAgMzggcG1fbWlzY19sb2FkKSBMU1UxIG5vbi1jYWNoZWFibGUgbG9hZHMKKworI0dyb3VwIDM5IHBtX2ljX2RlbWFuZCwgSUNhY2hlIGRlbWFuZCBmcm9tIEJSIHJlZGlyZWN0CitldmVudDowWDAyNzAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVTBfQlVTWV9SRUpFQ1RfR1JQMzkgOiAoR3JvdXAgMzkgcG1faWNfZGVtYW5kKSBMU1UwIGJ1c3kgZHVlIHRvIHJlamVjdAorZXZlbnQ6MFgwMjcxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1UxX0JVU1lfUkVKRUNUX0dSUDM5IDogKEdyb3VwIDM5IHBtX2ljX2RlbWFuZCkgTFNVMSBidXN5IGR1ZSB0byByZWplY3QKK2V2ZW50OjBYMDI3MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSUNfREVNQU5EX0wyX0JIVF9SRURJUkVDVF9HUlAzOSA6IChHcm91cCAzOSBwbV9pY19kZW1hbmQpIEwyIEkgY2FjaGUgZGVtYW5kIHJlcXVlc3QgZHVlIHRvIEJIVCByZWRpcmVjdAorZXZlbnQ6MFgwMjczIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JQ19ERU1BTkRfTDJfQlJfUkVESVJFQ1RfR1JQMzkgOiAoR3JvdXAgMzkgcG1faWNfZGVtYW5kKSBMMiBJIGNhY2hlIGRlbWFuZCByZXF1ZXN0IGR1ZSB0byBicmFuY2ggcmVkaXJlY3QKKworI0dyb3VwIDQwIHBtX2ljX3ByZWYsIElDYWNoZSBwcmVmZXRjaAorZXZlbnQ6MFgwMjgwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JRVJBVF9YTEFURV9XUl9HUlA0MCA6IChHcm91cCA0MCBwbV9pY19wcmVmKSBUcmFuc2xhdGlvbiB3cml0dGVuIHRvIGllcmF0CitldmVudDowWDAyODEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lDX1BSRUZfUkVRX0dSUDQwIDogKEdyb3VwIDQwIHBtX2ljX3ByZWYpIEluc3RydWN0aW9uIHByZWZldGNoIHJlcXVlc3RzCitldmVudDowWDAyODIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lDX1BSRUZfSU5TVEFMTF9HUlA0MCA6IChHcm91cCA0MCBwbV9pY19wcmVmKSBJbnN0cnVjdGlvbiBwcmVmZXRjaGVkIGluc3RhbGxlZCBpbiBwcmVmZXRjaCBidWZmZXIKK2V2ZW50OjBYMDI4MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fMElOU1RfRkVUQ0hfR1JQNDAgOiAoR3JvdXAgNDAgcG1faWNfcHJlZikgTm8gaW5zdHJ1Y3Rpb25zIGZldGNoZWQKKworI0dyb3VwIDQxIHBtX2ljX21pc3MsIElDYWNoZSBtaXNzZXMKK2V2ZW50OjBYMDI5MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fR1JQX0lDX01JU1NfTk9OU1BFQ19HUlA0MSA6IChHcm91cCA0MSBwbV9pY19taXNzKSBHcm91cCBleHBlcmllbmNlZCBub24tc3BlY3VsYXRpdmUgSSBjYWNoZSBtaXNzCitldmVudDowWDAyOTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0dSUF9JQ19NSVNTX0dSUDQxIDogKEdyb3VwIDQxIHBtX2ljX21pc3MpIEdyb3VwIGV4cGVyaWVuY2VkIEkgY2FjaGUgbWlzcworZXZlbnQ6MFgwMjkyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMV9EQ0FDSEVfUkVMT0FEX1ZBTElEX0dSUDQxIDogKEdyb3VwIDQxIHBtX2ljX21pc3MpIEwxIHJlbG9hZCBkYXRhIHNvdXJjZSB2YWxpZAorZXZlbnQ6MFgwMjkzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JT1BTX0NNUExfR1JQNDEgOiAoR3JvdXAgNDEgcG1faWNfbWlzcykgSW50ZXJuYWwgb3BlcmF0aW9ucyBjb21wbGV0ZWQKKworI0dyb3VwIDQyIHBtX2JyYW5jaF9taXNzLCBCcmFuY2ggbWlzcHJlZGljdCwgVExCIGFuZCBTTEIgbWlzc2VzCitldmVudDowWDAyQTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1RMQl9NSVNTX0dSUDQyIDogKEdyb3VwIDQyIHBtX2JyYW5jaF9taXNzKSBUTEIgbWlzc2VzCitldmVudDowWDAyQTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1NMQl9NSVNTX0dSUDQyIDogKEdyb3VwIDQyIHBtX2JyYW5jaF9taXNzKSBTTEIgbWlzc2VzCitldmVudDowWDAyQTIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0JSX01QUkVEX0NSX0dSUDQyIDogKEdyb3VwIDQyIHBtX2JyYW5jaF9taXNzKSBCcmFuY2ggbWlzcHJlZGljdGlvbnMgZHVlIHRvIENSIGJpdCBzZXR0aW5nCitldmVudDowWDAyQTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0JSX01QUkVEX1RBX0dSUDQyIDogKEdyb3VwIDQyIHBtX2JyYW5jaF9taXNzKSBCcmFuY2ggbWlzcHJlZGljdGlvbnMgZHVlIHRvIHRhcmdldCBhZGRyZXNzCisKKyNHcm91cCA0MyBwbV9icmFuY2gxLCBCcmFuY2ggb3BlcmF0aW9ucworZXZlbnQ6MFgwMkIwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9CUl9VTkNPTkRfR1JQNDMgOiAoR3JvdXAgNDMgcG1fYnJhbmNoMSkgVW5jb25kaXRpb25hbCBicmFuY2gKK2V2ZW50OjBYMDJCMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fQlJfUFJFRF9UQV9HUlA0MyA6IChHcm91cCA0MyBwbV9icmFuY2gxKSBBIGNvbmRpdGlvbmFsIGJyYW5jaCB3YXMgcHJlZGljdGVkLCB0YXJnZXQgcHJlZGljdGlvbgorZXZlbnQ6MFgwMkIyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9CUl9QUkVEX0NSX0dSUDQzIDogKEdyb3VwIDQzIHBtX2JyYW5jaDEpIEEgY29uZGl0aW9uYWwgYnJhbmNoIHdhcyBwcmVkaWN0ZWQsIENSIHByZWRpY3Rpb24KK2V2ZW50OjBYMDJCMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fQlJfUFJFRF9DUl9UQV9HUlA0MyA6IChHcm91cCA0MyBwbV9icmFuY2gxKSBBIGNvbmRpdGlvbmFsIGJyYW5jaCB3YXMgcHJlZGljdGVkLCBDUiBhbmQgdGFyZ2V0IHByZWRpY3Rpb24KKworI0dyb3VwIDQ0IHBtX2JyYW5jaDIsIEJyYW5jaCBvcGVyYXRpb25zCitldmVudDowWDAyQzAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0dSUF9CUl9SRURJUl9OT05TUEVDX0dSUDQ0IDogKEdyb3VwIDQ0IHBtX2JyYW5jaDIpIEdyb3VwIGV4cGVyaWVuY2VkIG5vbi1zcGVjdWxhdGl2ZSBicmFuY2ggcmVkaXJlY3QKK2V2ZW50OjBYMDJDMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fR1JQX0JSX1JFRElSX0dSUDQ0IDogKEdyb3VwIDQ0IHBtX2JyYW5jaDIpIEdyb3VwIGV4cGVyaWVuY2VkIGJyYW5jaCByZWRpcmVjdAorZXZlbnQ6MFgwMkMyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GTFVTSF9CUl9NUFJFRF9HUlA0NCA6IChHcm91cCA0NCBwbV9icmFuY2gyKSBGbHVzaCBjYXVzZWQgYnkgYnJhbmNoIG1pc3ByZWRpY3QKK2V2ZW50OjBYMDJDMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU9QU19DTVBMX0dSUDQ0IDogKEdyb3VwIDQ0IHBtX2JyYW5jaDIpIEludGVybmFsIG9wZXJhdGlvbnMgY29tcGxldGVkCisKKyNHcm91cCA0NSBwbV9MMV90bGJtaXNzLCBMMSBsb2FkIGFuZCBUTEIgbWlzc2VzCitldmVudDowWDAyRDAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RBVEFfVEFCTEVXQUxLX0NZQ19HUlA0NSA6IChHcm91cCA0NSBwbV9MMV90bGJtaXNzKSBDeWNsZXMgZG9pbmcgZGF0YSB0YWJsZXdhbGtzCitldmVudDowWDAyRDEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RUTEJfTUlTU19HUlA0NSA6IChHcm91cCA0NSBwbV9MMV90bGJtaXNzKSBEYXRhIFRMQiBtaXNzZXMKK2V2ZW50OjBYMDJEMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTERfTUlTU19MMV9HUlA0NSA6IChHcm91cCA0NSBwbV9MMV90bGJtaXNzKSBMMSBEIGNhY2hlIGxvYWQgbWlzc2VzCitldmVudDowWDAyRDMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xEX1JFRl9MMV9HUlA0NSA6IChHcm91cCA0NSBwbV9MMV90bGJtaXNzKSBMMSBEIGNhY2hlIGxvYWQgcmVmZXJlbmNlcworCisjR3JvdXAgNDYgcG1fTDFfREVSQVRfbWlzcywgTDEgc3RvcmUgYW5kIERFUkFUIG1pc3NlcworZXZlbnQ6MFgwMkUwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQVRBX0ZST01fTDJfR1JQNDYgOiAoR3JvdXAgNDYgcG1fTDFfREVSQVRfbWlzcykgRGF0YSBsb2FkZWQgZnJvbSBMMgorZXZlbnQ6MFgwMkUxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1VfREVSQVRfTUlTU19HUlA0NiA6IChHcm91cCA0NiBwbV9MMV9ERVJBVF9taXNzKSBERVJBVCBtaXNzZXMKK2V2ZW50OjBYMDJFMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fU1RfUkVGX0wxX0dSUDQ2IDogKEdyb3VwIDQ2IHBtX0wxX0RFUkFUX21pc3MpIEwxIEQgY2FjaGUgc3RvcmUgcmVmZXJlbmNlcworZXZlbnQ6MFgwMkUzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9TVF9NSVNTX0wxX0dSUDQ2IDogKEdyb3VwIDQ2IHBtX0wxX0RFUkFUX21pc3MpIEwxIEQgY2FjaGUgc3RvcmUgbWlzc2VzCisKKyNHcm91cCA0NyBwbV9MMV9zbGJtaXNzLCBMMSBsb2FkIGFuZCBTTEIgbWlzc2VzCitldmVudDowWDAyRjAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RTTEJfTUlTU19HUlA0NyA6IChHcm91cCA0NyBwbV9MMV9zbGJtaXNzKSBEYXRhIFNMQiBtaXNzZXMKK2V2ZW50OjBYMDJGMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSVNMQl9NSVNTX0dSUDQ3IDogKEdyb3VwIDQ3IHBtX0wxX3NsYm1pc3MpIEluc3RydWN0aW9uIFNMQiBtaXNzZXMKK2V2ZW50OjBYMDJGMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTERfTUlTU19MMV9MU1UwX0dSUDQ3IDogKEdyb3VwIDQ3IHBtX0wxX3NsYm1pc3MpIExTVTAgTDEgRCBjYWNoZSBsb2FkIG1pc3NlcworZXZlbnQ6MFgwMkYzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MRF9NSVNTX0wxX0xTVTFfR1JQNDcgOiAoR3JvdXAgNDcgcG1fTDFfc2xibWlzcykgTFNVMSBMMSBEIGNhY2hlIGxvYWQgbWlzc2VzCisKKyNHcm91cCA0OCBwbV9kdGxicmVmLCBEYXRhIFRMQiByZWZlcmVuY2VzCitldmVudDowWDAzMDAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RUTEJfUkVGXzRLX0dSUDQ4IDogKEdyb3VwIDQ4IHBtX2R0bGJyZWYpIERhdGEgVExCIHJlZmVyZW5jZSBmb3IgNEsgcGFnZQorZXZlbnQ6MFgwMzAxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EVExCX1JFRl82NEtfR1JQNDggOiAoR3JvdXAgNDggcG1fZHRsYnJlZikgRGF0YSBUTEIgcmVmZXJlbmNlIGZvciA2NEsgcGFnZQorZXZlbnQ6MFgwMzAyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EVExCX1JFRl8xNk1fR1JQNDggOiAoR3JvdXAgNDggcG1fZHRsYnJlZikgRGF0YSBUTEIgcmVmZXJlbmNlIGZvciAxNk0gcGFnZQorZXZlbnQ6MFgwMzAzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EVExCX1JFRl8xNkdfR1JQNDggOiAoR3JvdXAgNDggcG1fZHRsYnJlZikgRGF0YSBUTEIgcmVmZXJlbmNlIGZvciAxNkcgcGFnZQorCisjR3JvdXAgNDkgcG1fZHRsYm1pc3MsIERhdGEgVExCIG1pc3NlcworZXZlbnQ6MFgwMzEwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EVExCX01JU1NfNEtfR1JQNDkgOiAoR3JvdXAgNDkgcG1fZHRsYm1pc3MpIERhdGEgVExCIG1pc3MgZm9yIDRLIHBhZ2UKK2V2ZW50OjBYMDMxMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRFRMQl9NSVNTXzY0S19HUlA0OSA6IChHcm91cCA0OSBwbV9kdGxibWlzcykgRGF0YSBUTEIgbWlzcyBmb3IgNjRLIHBhZ2UKK2V2ZW50OjBYMDMxMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRFRMQl9NSVNTXzE2TV9HUlA0OSA6IChHcm91cCA0OSBwbV9kdGxibWlzcykgRGF0YSBUTEIgbWlzcyBmb3IgMTZNIHBhZ2UKK2V2ZW50OjBYMDMxMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRFRMQl9NSVNTXzE2R19HUlA0OSA6IChHcm91cCA0OSBwbV9kdGxibWlzcykgRGF0YSBUTEIgbWlzcyBmb3IgMTZHIHBhZ2UKKworI0dyb3VwIDUwIHBtX2R0bGIsIERhdGEgVExCIHJlZmVyZW5jZXMgYW5kIG1pc3NlcworZXZlbnQ6MFgwMzIwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EVExCX1JFRl9HUlA1MCA6IChHcm91cCA1MCBwbV9kdGxiKSBEYXRhIFRMQiByZWZlcmVuY2VzCitldmVudDowWDAzMjEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RUTEJfTUlTU19HUlA1MCA6IChHcm91cCA1MCBwbV9kdGxiKSBEYXRhIFRMQiBtaXNzZXMKK2V2ZW50OjBYMDMyMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlA1MCA6IChHcm91cCA1MCBwbV9kdGxiKSBQcm9jZXNzb3IgY3ljbGVzCitldmVudDowWDAzMjMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQNTAgOiAoR3JvdXAgNTAgcG1fZHRsYikgUHJvY2Vzc29yIGN5Y2xlcworCisjR3JvdXAgNTEgcG1fTDFfcmVmbWlzcywgTDEgbG9hZCByZWZlcmVuY2VzIGFuZCBtaXNzZXMgYW5kIHN0b3JlIHJlZmVyZW5jZXMgYW5kIG1pc3NlcworZXZlbnQ6MFgwMzMwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MRF9SRUZfTDFfR1JQNTEgOiAoR3JvdXAgNTEgcG1fTDFfcmVmbWlzcykgTDEgRCBjYWNoZSBsb2FkIHJlZmVyZW5jZXMKK2V2ZW50OjBYMDMzMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fU1RfUkVGX0wxX0dSUDUxIDogKEdyb3VwIDUxIHBtX0wxX3JlZm1pc3MpIEwxIEQgY2FjaGUgc3RvcmUgcmVmZXJlbmNlcworZXZlbnQ6MFgwMzMyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MRF9NSVNTX0wxX0dSUDUxIDogKEdyb3VwIDUxIHBtX0wxX3JlZm1pc3MpIEwxIEQgY2FjaGUgbG9hZCBtaXNzZXMKK2V2ZW50OjBYMDMzMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fU1RfTUlTU19MMV9HUlA1MSA6IChHcm91cCA1MSBwbV9MMV9yZWZtaXNzKSBMMSBEIGNhY2hlIHN0b3JlIG1pc3NlcworCisjR3JvdXAgNTIgcG1fZHNvdXJjZTEsIEwzIGNhY2hlIGFuZCBtZW1vcnkgZGF0YSBhY2Nlc3MKK2V2ZW50OjBYMDM0MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fREFUQV9GUk9NX0wzX0dSUDUyIDogKEdyb3VwIDUyIHBtX2Rzb3VyY2UxKSBEYXRhIGxvYWRlZCBmcm9tIEwzCitldmVudDowWDAzNDEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RBVEFfRlJPTV9MTUVNX0dSUDUyIDogKEdyb3VwIDUyIHBtX2Rzb3VyY2UxKSBEYXRhIGxvYWRlZCBmcm9tIGxvY2FsIG1lbW9yeQorZXZlbnQ6MFgwMzQyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GTFVTSF9HUlA1MiA6IChHcm91cCA1MiBwbV9kc291cmNlMSkgRmx1c2hlcworZXZlbnQ6MFgwMzQzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JT1BTX0NNUExfR1JQNTIgOiAoR3JvdXAgNTIgcG1fZHNvdXJjZTEpIEludGVybmFsIG9wZXJhdGlvbnMgY29tcGxldGVkCisKKyNHcm91cCA1MyBwbV9kc291cmNlMiwgTDMgY2FjaGUgYW5kIG1lbW9yeSBkYXRhIGFjY2VzcworZXZlbnQ6MFgwMzUwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQVRBX0ZST01fTDNfR1JQNTMgOiAoR3JvdXAgNTMgcG1fZHNvdXJjZTIpIERhdGEgbG9hZGVkIGZyb20gTDMKK2V2ZW50OjBYMDM1MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fREFUQV9GUk9NX0xNRU1fR1JQNTMgOiAoR3JvdXAgNTMgcG1fZHNvdXJjZTIpIERhdGEgbG9hZGVkIGZyb20gbG9jYWwgbWVtb3J5CitldmVudDowWDAzNTIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RBVEFfRlJPTV9MMk1JU1NfR1JQNTMgOiAoR3JvdXAgNTMgcG1fZHNvdXJjZTIpIERhdGEgbG9hZGVkIG1pc3NlZCBMMgorZXZlbnQ6MFgwMzUzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQVRBX0ZST01fUk1FTV9HUlA1MyA6IChHcm91cCA1MyBwbV9kc291cmNlMikgRGF0YSBsb2FkZWQgZnJvbSByZW1vdGUgbWVtb3J5CisKKyNHcm91cCA1NCBwbV9kc291cmNlX0wyLCBMMiBjYWNoZSBkYXRhIGFjY2VzcworZXZlbnQ6MFgwMzYwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQVRBX0ZST01fTDI1X1NIUl9HUlA1NCA6IChHcm91cCA1NCBwbV9kc291cmNlX0wyKSBEYXRhIGxvYWRlZCBmcm9tIEwyLjUgc2hhcmVkCitldmVudDowWDAzNjEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RBVEFfRlJPTV9MMjVfTU9EX0dSUDU0IDogKEdyb3VwIDU0IHBtX2Rzb3VyY2VfTDIpIERhdGEgbG9hZGVkIGZyb20gTDIuNSBtb2RpZmllZAorZXZlbnQ6MFgwMzYyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQVRBX0ZST01fTDI3NV9TSFJfR1JQNTQgOiAoR3JvdXAgNTQgcG1fZHNvdXJjZV9MMikgRGF0YSBsb2FkZWQgZnJvbSBMMi43NSBzaGFyZWQKK2V2ZW50OjBYMDM2MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fREFUQV9GUk9NX0wyNzVfTU9EX0dSUDU0IDogKEdyb3VwIDU0IHBtX2Rzb3VyY2VfTDIpIERhdGEgbG9hZGVkIGZyb20gTDIuNzUgbW9kaWZpZWQKKworI0dyb3VwIDU1IHBtX2Rzb3VyY2VfTDMsIEwzIGNhY2hlIGRhdGEgYWNjZXNzCitldmVudDowWDAzNzAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RBVEFfRlJPTV9MMzVfU0hSX0dSUDU1IDogKEdyb3VwIDU1IHBtX2Rzb3VyY2VfTDMpIERhdGEgbG9hZGVkIGZyb20gTDMuNSBzaGFyZWQKK2V2ZW50OjBYMDM3MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fREFUQV9GUk9NX0wzNV9NT0RfR1JQNTUgOiAoR3JvdXAgNTUgcG1fZHNvdXJjZV9MMykgRGF0YSBsb2FkZWQgZnJvbSBMMy41IG1vZGlmaWVkCitldmVudDowWDAzNzIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RBVEFfRlJPTV9MMzc1X1NIUl9HUlA1NSA6IChHcm91cCA1NSBwbV9kc291cmNlX0wzKSBEYXRhIGxvYWRlZCBmcm9tIEwzLjc1IHNoYXJlZAorZXZlbnQ6MFgwMzczIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQVRBX0ZST01fTDM3NV9NT0RfR1JQNTUgOiAoR3JvdXAgNTUgcG1fZHNvdXJjZV9MMykgRGF0YSBsb2FkZWQgZnJvbSBMMy43NSBtb2RpZmllZAorCisjR3JvdXAgNTYgcG1faXNvdXJjZTEsIEluc3RydWN0aW9uIHNvdXJjZSBpbmZvcm1hdGlvbgorZXZlbnQ6MFgwMzgwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JTlNUX0ZST01fTDNfR1JQNTYgOiAoR3JvdXAgNTYgcG1faXNvdXJjZTEpIEluc3RydWN0aW9uIGZldGNoZWQgZnJvbSBMMworZXZlbnQ6MFgwMzgxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JTlNUX0ZST01fTDFfR1JQNTYgOiAoR3JvdXAgNTYgcG1faXNvdXJjZTEpIEluc3RydWN0aW9uIGZldGNoZWQgZnJvbSBMMQorZXZlbnQ6MFgwMzgyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JTlNUX0ZST01fUFJFRl9HUlA1NiA6IChHcm91cCA1NiBwbV9pc291cmNlMSkgSW5zdHJ1Y3Rpb24gZmV0Y2hlZCBmcm9tIHByZWZldGNoCitldmVudDowWDAzODMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lOU1RfRlJPTV9STUVNX0dSUDU2IDogKEdyb3VwIDU2IHBtX2lzb3VyY2UxKSBJbnN0cnVjdGlvbiBmZXRjaGVkIGZyb20gcmVtb3RlIG1lbW9yeQorCisjR3JvdXAgNTcgcG1faXNvdXJjZTIsIEluc3RydWN0aW9uIHNvdXJjZSBpbmZvcm1hdGlvbgorZXZlbnQ6MFgwMzkwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JTlNUX0ZST01fTDJfR1JQNTcgOiAoR3JvdXAgNTcgcG1faXNvdXJjZTIpIEluc3RydWN0aW9uIGZldGNoZWQgZnJvbSBMMgorZXZlbnQ6MFgwMzkxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JTlNUX0ZST01fTE1FTV9HUlA1NyA6IChHcm91cCA1NyBwbV9pc291cmNlMikgSW5zdHJ1Y3Rpb24gZmV0Y2hlZCBmcm9tIGxvY2FsIG1lbW9yeQorZXZlbnQ6MFgwMzkyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JT1BTX0NNUExfR1JQNTcgOiAoR3JvdXAgNTcgcG1faXNvdXJjZTIpIEludGVybmFsIG9wZXJhdGlvbnMgY29tcGxldGVkCitldmVudDowWDAzOTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNXzBJTlNUX0ZFVENIX0dSUDU3IDogKEdyb3VwIDU3IHBtX2lzb3VyY2UyKSBObyBpbnN0cnVjdGlvbnMgZmV0Y2hlZAorCisjR3JvdXAgNTggcG1faXNvdXJjZV9MMiwgTDIgaW5zdHJ1Y3Rpb24gc291cmNlIGluZm9ybWF0aW9uCitldmVudDowWDAzQTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lOU1RfRlJPTV9MMjVfU0hSX0dSUDU4IDogKEdyb3VwIDU4IHBtX2lzb3VyY2VfTDIpIEluc3RydWN0aW9uIGZldGNoZWQgZnJvbSBMMi41IHNoYXJlZAorZXZlbnQ6MFgwM0ExIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JTlNUX0ZST01fTDI1X01PRF9HUlA1OCA6IChHcm91cCA1OCBwbV9pc291cmNlX0wyKSBJbnN0cnVjdGlvbiBmZXRjaGVkIGZyb20gTDIuNSBtb2RpZmllZAorZXZlbnQ6MFgwM0EyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JTlNUX0ZST01fTDI3NV9TSFJfR1JQNTggOiAoR3JvdXAgNTggcG1faXNvdXJjZV9MMikgSW5zdHJ1Y3Rpb24gZmV0Y2hlZCBmcm9tIEwyLjc1IHNoYXJlZAorZXZlbnQ6MFgwM0EzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JTlNUX0ZST01fTDI3NV9NT0RfR1JQNTggOiAoR3JvdXAgNTggcG1faXNvdXJjZV9MMikgSW5zdHJ1Y3Rpb24gZmV0Y2hlZCBmcm9tIEwyLjc1IG1vZGlmaWVkCisKKyNHcm91cCA1OSBwbV9pc291cmNlX0wzLCBMMyBpbnN0cnVjdGlvbiBzb3VyY2UgaW5mb3JtYXRpb24KK2V2ZW50OjBYMDNCMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU5TVF9GUk9NX0wzNV9TSFJfR1JQNTkgOiAoR3JvdXAgNTkgcG1faXNvdXJjZV9MMykgSW5zdHJ1Y3Rpb24gZmV0Y2hlZCBmcm9tIEwzLjUgc2hhcmVkCitldmVudDowWDAzQjEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lOU1RfRlJPTV9MMzVfTU9EX0dSUDU5IDogKEdyb3VwIDU5IHBtX2lzb3VyY2VfTDMpIEluc3RydWN0aW9uIGZldGNoZWQgZnJvbSBMMy41IG1vZGlmaWVkCitldmVudDowWDAzQjIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lOU1RfRlJPTV9MMzc1X1NIUl9HUlA1OSA6IChHcm91cCA1OSBwbV9pc291cmNlX0wzKSBJbnN0cnVjdGlvbiBmZXRjaGVkIGZyb20gTDMuNzUgc2hhcmVkCitldmVudDowWDAzQjMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lOU1RfRlJPTV9MMzc1X01PRF9HUlA1OSA6IChHcm91cCA1OSBwbV9pc291cmNlX0wzKSBJbnN0cnVjdGlvbiBmZXRjaGVkIGZyb20gTDMuNzUgbW9kaWZpZWQKKworI0dyb3VwIDYwIHBtX3B0ZWdfc291cmNlMSwgUFRFRyBzb3VyY2UgaW5mb3JtYXRpb24KK2V2ZW50OjBYMDNDMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUFRFR19GUk9NX0wyNV9TSFJfR1JQNjAgOiAoR3JvdXAgNjAgcG1fcHRlZ19zb3VyY2UxKSBQVEVHIGxvYWRlZCBmcm9tIEwyLjUgc2hhcmVkCitldmVudDowWDAzQzEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1BURUdfRlJPTV9MMjVfTU9EX0dSUDYwIDogKEdyb3VwIDYwIHBtX3B0ZWdfc291cmNlMSkgUFRFRyBsb2FkZWQgZnJvbSBMMi41IG1vZGlmaWVkCitldmVudDowWDAzQzIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1BURUdfRlJPTV9MMjc1X1NIUl9HUlA2MCA6IChHcm91cCA2MCBwbV9wdGVnX3NvdXJjZTEpIFBURUcgbG9hZGVkIGZyb20gTDIuNzUgc2hhcmVkCitldmVudDowWDAzQzMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1BURUdfRlJPTV9MMjc1X01PRF9HUlA2MCA6IChHcm91cCA2MCBwbV9wdGVnX3NvdXJjZTEpIFBURUcgbG9hZGVkIGZyb20gTDIuNzUgbW9kaWZpZWQKKworI0dyb3VwIDYxIHBtX3B0ZWdfc291cmNlMiwgUFRFRyBzb3VyY2UgaW5mb3JtYXRpb24KK2V2ZW50OjBYMDNEMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUFRFR19GUk9NX0wzNV9TSFJfR1JQNjEgOiAoR3JvdXAgNjEgcG1fcHRlZ19zb3VyY2UyKSBQVEVHIGxvYWRlZCBmcm9tIEwzLjUgc2hhcmVkCitldmVudDowWDAzRDEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1BURUdfRlJPTV9MMzVfTU9EX0dSUDYxIDogKEdyb3VwIDYxIHBtX3B0ZWdfc291cmNlMikgUFRFRyBsb2FkZWQgZnJvbSBMMy41IG1vZGlmaWVkCitldmVudDowWDAzRDIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1BURUdfRlJPTV9MMzc1X1NIUl9HUlA2MSA6IChHcm91cCA2MSBwbV9wdGVnX3NvdXJjZTIpIFBURUcgbG9hZGVkIGZyb20gTDMuNzUgc2hhcmVkCitldmVudDowWDAzRDMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1BURUdfRlJPTV9MMzc1X01PRF9HUlA2MSA6IChHcm91cCA2MSBwbV9wdGVnX3NvdXJjZTIpIFBURUcgbG9hZGVkIGZyb20gTDMuNzUgbW9kaWZpZWQKKworI0dyb3VwIDYyIHBtX3B0ZWdfc291cmNlMywgUFRFRyBzb3VyY2UgaW5mb3JtYXRpb24KK2V2ZW50OjBYMDNFMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUFRFR19GUk9NX0wyX0dSUDYyIDogKEdyb3VwIDYyIHBtX3B0ZWdfc291cmNlMykgUFRFRyBsb2FkZWQgZnJvbSBMMgorZXZlbnQ6MFgwM0UxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9QVEVHX0ZST01fTE1FTV9HUlA2MiA6IChHcm91cCA2MiBwbV9wdGVnX3NvdXJjZTMpIFBURUcgbG9hZGVkIGZyb20gbG9jYWwgbWVtb3J5CitldmVudDowWDAzRTIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1BURUdfRlJPTV9MMk1JU1NfR1JQNjIgOiAoR3JvdXAgNjIgcG1fcHRlZ19zb3VyY2UzKSBQVEVHIGxvYWRlZCBmcm9tIEwyIG1pc3MKK2V2ZW50OjBYMDNFMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUFRFR19GUk9NX1JNRU1fR1JQNjIgOiAoR3JvdXAgNjIgcG1fcHRlZ19zb3VyY2UzKSBQVEVHIGxvYWRlZCBmcm9tIHJlbW90ZSBtZW1vcnkKKworI0dyb3VwIDYzIHBtX3B0ZWdfc291cmNlNCwgTDMgUFRFRyBhbmQgZ3JvdXAgZGlzcHRhY2ggZXZlbnRzCitldmVudDowWDAzRjAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1BURUdfRlJPTV9MM19HUlA2MyA6IChHcm91cCA2MyBwbV9wdGVnX3NvdXJjZTQpIFBURUcgbG9hZGVkIGZyb20gTDMKK2V2ZW50OjBYMDNGMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fR1JQX0RJU1BfR1JQNjMgOiAoR3JvdXAgNjMgcG1fcHRlZ19zb3VyY2U0KSBHcm91cCBkaXNwYXRjaGVzCitldmVudDowWDAzRjIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0dSUF9ESVNQX1NVQ0NFU1NfR1JQNjMgOiAoR3JvdXAgNjMgcG1fcHRlZ19zb3VyY2U0KSBHcm91cCBkaXNwYXRjaCBzdWNjZXNzCitldmVudDowWDAzRjMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RDX0lOVl9MMl9HUlA2MyA6IChHcm91cCA2MyBwbV9wdGVnX3NvdXJjZTQpIEwxIEQgY2FjaGUgZW50cmllcyBpbnZhbGlkYXRlZCBmcm9tIEwyCisKKyNHcm91cCA2NCBwbV9MMlNBX2xkLCBMMiBzbGljZSBBIGxvYWQgZXZlbnRzCitldmVudDowWDA0MDAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wyU0FfUkNMRF9ESVNQX0dSUDY0IDogKEdyb3VwIDY0IHBtX0wyU0FfbGQpIEwyIHNsaWNlIEEgUkMgbG9hZCBkaXNwYXRjaCBhdHRlbXB0CitldmVudDowWDA0MDEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wyU0FfUkNMRF9ESVNQX0ZBSUxfUkNfRlVMTF9HUlA2NCA6IChHcm91cCA2NCBwbV9MMlNBX2xkKSBMMiBzbGljZSBBIFJDIGxvYWQgZGlzcGF0Y2ggYXR0ZW1wdCBmYWlsZWQgZHVlIHRvIGFsbCBSQyBmdWxsCitldmVudDowWDA0MDIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wyU0FfUkNMRF9ESVNQX0ZBSUxfQUREUl9HUlA2NCA6IChHcm91cCA2NCBwbV9MMlNBX2xkKSBMMiBzbGljZSBBIFJDIGxvYWQgZGlzcGF0Y2ggYXR0ZW1wdCBmYWlsZWQgZHVlIHRvIGFkZHJlc3MgY29sbGlzaW9uIHdpdGggUkMvQ08vU04vU1EKK2V2ZW50OjBYMDQwMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDJTQV9SQ0xEX0RJU1BfRkFJTF9PVEhFUl9HUlA2NCA6IChHcm91cCA2NCBwbV9MMlNBX2xkKSBMMiBzbGljZSBBIFJDIGxvYWQgZGlzcGF0Y2ggYXR0ZW1wdCBmYWlsZWQgZHVlIHRvIG90aGVyIHJlYXNvbnMKKworI0dyb3VwIDY1IHBtX0wyU0Ffc3QsIEwyIHNsaWNlIEEgc3RvcmUgZXZlbnRzCitldmVudDowWDA0MTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wyU0FfUkNTVF9ESVNQX0dSUDY1IDogKEdyb3VwIDY1IHBtX0wyU0Ffc3QpIEwyIHNsaWNlIEEgUkMgc3RvcmUgZGlzcGF0Y2ggYXR0ZW1wdAorZXZlbnQ6MFgwNDExIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMlNBX1JDU1RfRElTUF9GQUlMX1JDX0ZVTExfR1JQNjUgOiAoR3JvdXAgNjUgcG1fTDJTQV9zdCkgTDIgc2xpY2UgQSBSQyBzdG9yZSBkaXNwYXRjaCBhdHRlbXB0IGZhaWxlZCBkdWUgdG8gYWxsIFJDIGZ1bGwKK2V2ZW50OjBYMDQxMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDJTQV9SQ1NUX0RJU1BfRkFJTF9BRERSX0dSUDY1IDogKEdyb3VwIDY1IHBtX0wyU0Ffc3QpIEwyIHNsaWNlIEEgUkMgc3RvcmUgZGlzcGF0Y2ggYXR0ZW1wdCBmYWlsZWQgZHVlIHRvIGFkZHJlc3MgY29sbGlzaW9uIHdpdGggUkMvQ08vU04vU1EKK2V2ZW50OjBYMDQxMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDJTQV9SQ1NUX0RJU1BfRkFJTF9PVEhFUl9HUlA2NSA6IChHcm91cCA2NSBwbV9MMlNBX3N0KSBMMiBzbGljZSBBIFJDIHN0b3JlIGRpc3BhdGNoIGF0dGVtcHQgZmFpbGVkIGR1ZSB0byBvdGhlciByZWFzb25zCisKKyNHcm91cCA2NiBwbV9MMlNBX3N0MiwgTDIgc2xpY2UgQSBzdG9yZSBldmVudHMKK2V2ZW50OjBYMDQyMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDJTQV9SQ19ESVNQX0ZBSUxfQ09fQlVTWV9HUlA2NiA6IChHcm91cCA2NiBwbV9MMlNBX3N0MikgTDIgc2xpY2UgQSBSQyBkaXNwYXRjaCBhdHRlbXB0IGZhaWxlZCBkdWUgdG8gUkMvQ08gcGFpciBjaG9zZW4gd2FzIG1pc3MgYW5kIENPIGFscmVhZHkgYnVzeQorZXZlbnQ6MFgwNDIxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMlNBX1NUX1JFUV9HUlA2NiA6IChHcm91cCA2NiBwbV9MMlNBX3N0MikgTDIgc2xpY2UgQSBzdG9yZSByZXF1ZXN0cworZXZlbnQ6MFgwNDIyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMlNBX1JDX0RJU1BfRkFJTF9DT19CVVNZX0FMTF9HUlA2NiA6IChHcm91cCA2NiBwbV9MMlNBX3N0MikgTDIgc2xpY2UgQSBSQyBkaXNwYXRjaCBhdHRlbXB0IGZhaWxlZCBkdWUgdG8gYWxsIENPIGJ1c3kKK2V2ZW50OjBYMDQyMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDJTQV9TVF9ISVRfR1JQNjYgOiAoR3JvdXAgNjYgcG1fTDJTQV9zdDIpIEwyIHNsaWNlIEEgc3RvcmUgaGl0cworCisjR3JvdXAgNjcgcG1fTDJTQl9sZCwgTDIgc2xpY2UgQiBsb2FkIGV2ZW50cworZXZlbnQ6MFgwNDMwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMlNCX1JDTERfRElTUF9HUlA2NyA6IChHcm91cCA2NyBwbV9MMlNCX2xkKSBMMiBzbGljZSBCIFJDIGxvYWQgZGlzcGF0Y2ggYXR0ZW1wdAorZXZlbnQ6MFgwNDMxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMlNCX1JDTERfRElTUF9GQUlMX1JDX0ZVTExfR1JQNjcgOiAoR3JvdXAgNjcgcG1fTDJTQl9sZCkgTDIgc2xpY2UgQiBSQyBsb2FkIGRpc3BhdGNoIGF0dGVtcHQgZmFpbGVkIGR1ZSB0byBhbGwgUkMgZnVsbAorZXZlbnQ6MFgwNDMyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMlNCX1JDTERfRElTUF9GQUlMX0FERFJfR1JQNjcgOiAoR3JvdXAgNjcgcG1fTDJTQl9sZCkgTDIgc2xpY2UgQiBSQyBsb2FkIGRpc3BhdGNoIGF0dGVtcHQgZmFpbGVkIGR1ZSB0byBhZGRyZXNzIGNvbGxpc2lvbiB3aXRoIFJDL0NPL1NOL1NRCitldmVudDowWDA0MzMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wyU0JfUkNMRF9ESVNQX0ZBSUxfT1RIRVJfR1JQNjcgOiAoR3JvdXAgNjcgcG1fTDJTQl9sZCkgTDIgc2xpY2UgQiBSQyBsb2FkIGRpc3BhdGNoIGF0dGVtcHQgZmFpbGVkIGR1ZSB0byBvdGhlciByZWFzb25zCisKKyNHcm91cCA2OCBwbV9MMlNCX3N0LCBMMiBzbGljZSBCIHN0b3JlIGV2ZW50cworZXZlbnQ6MFgwNDQwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMlNCX1JDU1RfRElTUF9HUlA2OCA6IChHcm91cCA2OCBwbV9MMlNCX3N0KSBMMiBzbGljZSBCIFJDIHN0b3JlIGRpc3BhdGNoIGF0dGVtcHQKK2V2ZW50OjBYMDQ0MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDJTQl9SQ1NUX0RJU1BfRkFJTF9SQ19GVUxMX0dSUDY4IDogKEdyb3VwIDY4IHBtX0wyU0Jfc3QpIEwyIHNsaWNlIEIgUkMgc3RvcmUgZGlzcGF0Y2ggYXR0ZW1wdCBmYWlsZWQgZHVlIHRvIGFsbCBSQyBmdWxsCitldmVudDowWDA0NDIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wyU0JfUkNTVF9ESVNQX0ZBSUxfQUREUl9HUlA2OCA6IChHcm91cCA2OCBwbV9MMlNCX3N0KSBMMiBzbGljZSBCIFJDIHN0b3JlIGRpc3BhdGNoIGF0dGVtcHQgZmFpbGVkIGR1ZSB0byBhZGRyZXNzIGNvbGxpc2lvbiB3aXRoIFJDL0NPL1NOL1NRCitldmVudDowWDA0NDMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wyU0JfUkNTVF9ESVNQX0ZBSUxfT1RIRVJfR1JQNjggOiAoR3JvdXAgNjggcG1fTDJTQl9zdCkgTDIgc2xpY2UgQiBSQyBzdG9yZSBkaXNwYXRjaCBhdHRlbXB0IGZhaWxlZCBkdWUgdG8gb3RoZXIgcmVhc29ucworCisjR3JvdXAgNjkgcG1fTDJTQl9zdDIsIEwyIHNsaWNlIEIgc3RvcmUgZXZlbnRzCitldmVudDowWDA0NTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wyU0JfUkNfRElTUF9GQUlMX0NPX0JVU1lfR1JQNjkgOiAoR3JvdXAgNjkgcG1fTDJTQl9zdDIpIEwyIHNsaWNlIEIgUkMgZGlzcGF0Y2ggYXR0ZW1wdCBmYWlsZWQgZHVlIHRvIFJDL0NPIHBhaXIgY2hvc2VuIHdhcyBtaXNzIGFuZCBDTyBhbHJlYWR5IGJ1c3kKK2V2ZW50OjBYMDQ1MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDJTQl9TVF9SRVFfR1JQNjkgOiAoR3JvdXAgNjkgcG1fTDJTQl9zdDIpIEwyIHNsaWNlIEIgc3RvcmUgcmVxdWVzdHMKK2V2ZW50OjBYMDQ1MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDJTQl9SQ19ESVNQX0ZBSUxfQ09fQlVTWV9BTExfR1JQNjkgOiAoR3JvdXAgNjkgcG1fTDJTQl9zdDIpIEwyIHNsaWNlIEIgUkMgZGlzcGF0Y2ggYXR0ZW1wdCBmYWlsZWQgZHVlIHRvIGFsbCBDTyBidXN5CitldmVudDowWDA0NTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wyU0JfU1RfSElUX0dSUDY5IDogKEdyb3VwIDY5IHBtX0wyU0Jfc3QyKSBMMiBzbGljZSBCIHN0b3JlIGhpdHMKKworI0dyb3VwIDcwIHBtX0wyU0NfbGQsIEwyIHNsaWNlIEMgbG9hZCBldmVudHMKK2V2ZW50OjBYMDQ2MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDJTQ19SQ0xEX0RJU1BfR1JQNzAgOiAoR3JvdXAgNzAgcG1fTDJTQ19sZCkgTDIgc2xpY2UgQyBSQyBsb2FkIGRpc3BhdGNoIGF0dGVtcHQKK2V2ZW50OjBYMDQ2MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDJTQ19SQ0xEX0RJU1BfRkFJTF9SQ19GVUxMX0dSUDcwIDogKEdyb3VwIDcwIHBtX0wyU0NfbGQpIEwyIHNsaWNlIEMgUkMgbG9hZCBkaXNwYXRjaCBhdHRlbXB0IGZhaWxlZCBkdWUgdG8gYWxsIFJDIGZ1bGwKK2V2ZW50OjBYMDQ2MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDJTQ19SQ0xEX0RJU1BfRkFJTF9BRERSX0dSUDcwIDogKEdyb3VwIDcwIHBtX0wyU0NfbGQpIEwyIHNsaWNlIEMgUkMgbG9hZCBkaXNwYXRjaCBhdHRlbXB0IGZhaWxlZCBkdWUgdG8gYWRkcmVzcyBjb2xsaXNpb24gd2l0aCBSQy9DTy9TTi9TUQorZXZlbnQ6MFgwNDYzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMlNDX1JDTERfRElTUF9GQUlMX09USEVSX0dSUDcwIDogKEdyb3VwIDcwIHBtX0wyU0NfbGQpIEwyIHNsaWNlIEMgUkMgbG9hZCBkaXNwYXRjaCBhdHRlbXB0IGZhaWxlZCBkdWUgdG8gb3RoZXIgcmVhc29ucworCisjR3JvdXAgNzEgcG1fTDJTQ19zdCwgTDIgc2xpY2UgQyBzdG9yZSBldmVudHMKK2V2ZW50OjBYMDQ3MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDJTQ19SQ1NUX0RJU1BfR1JQNzEgOiAoR3JvdXAgNzEgcG1fTDJTQ19zdCkgTDIgc2xpY2UgQyBSQyBzdG9yZSBkaXNwYXRjaCBhdHRlbXB0CitldmVudDowWDA0NzEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wyU0NfUkNTVF9ESVNQX0ZBSUxfUkNfRlVMTF9HUlA3MSA6IChHcm91cCA3MSBwbV9MMlNDX3N0KSBMMiBzbGljZSBDIFJDIHN0b3JlIGRpc3BhdGNoIGF0dGVtcHQgZmFpbGVkIGR1ZSB0byBhbGwgUkMgZnVsbAorZXZlbnQ6MFgwNDcyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMlNDX1JDU1RfRElTUF9GQUlMX0FERFJfR1JQNzEgOiAoR3JvdXAgNzEgcG1fTDJTQ19zdCkgTDIgc2xpY2UgQyBSQyBzdG9yZSBkaXNwYXRjaCBhdHRlbXB0IGZhaWxlZCBkdWUgdG8gYWRkcmVzcyBjb2xsaXNpb24gd2l0aCBSQy9DTy9TTi9TUQorZXZlbnQ6MFgwNDczIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMlNDX1JDU1RfRElTUF9GQUlMX09USEVSX0dSUDcxIDogKEdyb3VwIDcxIHBtX0wyU0Nfc3QpIEwyIHNsaWNlIEMgUkMgc3RvcmUgZGlzcGF0Y2ggYXR0ZW1wdCBmYWlsZWQgZHVlIHRvIG90aGVyIHJlYXNvbnMKKworI0dyb3VwIDcyIHBtX0wyU0Nfc3QyLCBMMiBzbGljZSBDIHN0b3JlIGV2ZW50cworZXZlbnQ6MFgwNDgwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMlNDX1JDX0RJU1BfRkFJTF9DT19CVVNZX0dSUDcyIDogKEdyb3VwIDcyIHBtX0wyU0Nfc3QyKSBMMiBzbGljZSBDIFJDIGRpc3BhdGNoIGF0dGVtcHQgZmFpbGVkIGR1ZSB0byBSQy9DTyBwYWlyIGNob3NlbiB3YXMgbWlzcyBhbmQgQ08gYWxyZWFkeSBidXN5CitldmVudDowWDA0ODEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wyU0NfU1RfUkVRX0dSUDcyIDogKEdyb3VwIDcyIHBtX0wyU0Nfc3QyKSBMMiBzbGljZSBDIHN0b3JlIHJlcXVlc3RzCitldmVudDowWDA0ODIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wyU0NfUkNfRElTUF9GQUlMX0NPX0JVU1lfQUxMX0dSUDcyIDogKEdyb3VwIDcyIHBtX0wyU0Nfc3QyKSBMMiBzbGljZSBDIFJDIGRpc3BhdGNoIGF0dGVtcHQgZmFpbGVkIGR1ZSB0byBhbGwgQ08gYnVzeQorZXZlbnQ6MFgwNDgzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMlNDX1NUX0hJVF9HUlA3MiA6IChHcm91cCA3MiBwbV9MMlNDX3N0MikgTDIgc2xpY2UgQyBzdG9yZSBoaXRzCisKKyNHcm91cCA3MyBwbV9MM1NBX3RyYW5zLCBMMyBzbGljZSBBIHN0YXRlIHRyYW5zaXN0aW9ucworZXZlbnQ6MFgwNDkwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MM1NBX01PRF9UQUdfR1JQNzMgOiAoR3JvdXAgNzMgcG1fTDNTQV90cmFucykgTDMgc2xpY2UgQSB0cmFuc2l0aW9uIGZyb20gbW9kaWZpZWQgdG8gVEFHCitldmVudDowWDA0OTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lPUFNfQ01QTF9HUlA3MyA6IChHcm91cCA3MyBwbV9MM1NBX3RyYW5zKSBJbnRlcm5hbCBvcGVyYXRpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgwNDkyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MM1NBX01PRF9JTlZfR1JQNzMgOiAoR3JvdXAgNzMgcG1fTDNTQV90cmFucykgTDMgc2xpY2UgQSB0cmFuc2l0aW9uIGZyb20gbW9kaWZpZWQgdG8gaW52YWxpZAorZXZlbnQ6MFgwNDkzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MM1NBX1NIUl9JTlZfR1JQNzMgOiAoR3JvdXAgNzMgcG1fTDNTQV90cmFucykgTDMgc2xpY2UgQSB0cmFuc2l0aW9uIGZyb20gc2hhcmVkIHRvIGludmFsaWQKKworI0dyb3VwIDc0IHBtX0wzU0JfdHJhbnMsIEwzIHNsaWNlIEIgc3RhdGUgdHJhbnNpc3Rpb25zCitldmVudDowWDA0QTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lPUFNfQ01QTF9HUlA3NCA6IChHcm91cCA3NCBwbV9MM1NCX3RyYW5zKSBJbnRlcm5hbCBvcGVyYXRpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgwNEExIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MM1NCX01PRF9UQUdfR1JQNzQgOiAoR3JvdXAgNzQgcG1fTDNTQl90cmFucykgTDMgc2xpY2UgQiB0cmFuc2l0aW9uIGZyb20gbW9kaWZpZWQgdG8gVEFHCitldmVudDowWDA0QTIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wzU0JfTU9EX0lOVl9HUlA3NCA6IChHcm91cCA3NCBwbV9MM1NCX3RyYW5zKSBMMyBzbGljZSBCIHRyYW5zaXRpb24gZnJvbSBtb2RpZmllZCB0byBpbnZhbGlkCitldmVudDowWDA0QTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wzU0JfU0hSX0lOVl9HUlA3NCA6IChHcm91cCA3NCBwbV9MM1NCX3RyYW5zKSBMMyBzbGljZSBCIHRyYW5zaXRpb24gZnJvbSBzaGFyZWQgdG8gaW52YWxpZAorCisjR3JvdXAgNzUgcG1fTDNTQ190cmFucywgTDMgc2xpY2UgQyBzdGF0ZSB0cmFuc2lzdGlvbnMKK2V2ZW50OjBYMDRCMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU9QU19DTVBMX0dSUDc1IDogKEdyb3VwIDc1IHBtX0wzU0NfdHJhbnMpIEludGVybmFsIG9wZXJhdGlvbnMgY29tcGxldGVkCitldmVudDowWDA0QjEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wzU0NfTU9EX1RBR19HUlA3NSA6IChHcm91cCA3NSBwbV9MM1NDX3RyYW5zKSBMMyBzbGljZSBDIHRyYW5zaXRpb24gZnJvbSBtb2RpZmllZCB0byBUQUcKK2V2ZW50OjBYMDRCMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDNTQ19NT0RfSU5WX0dSUDc1IDogKEdyb3VwIDc1IHBtX0wzU0NfdHJhbnMpIEwzIHNsaWNlIEMgdHJhbnNpdGlvbiBmcm9tIG1vZGlmaWVkIHRvIGludmFsaWQKK2V2ZW50OjBYMDRCMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDNTQ19TSFJfSU5WX0dSUDc1IDogKEdyb3VwIDc1IHBtX0wzU0NfdHJhbnMpIEwzIHNsaWNlIEMgdHJhbnNpdGlvbiBmcm9tIHNoYXJlZCB0byBpbnZhbGlkCisKKyNHcm91cCA3NiBwbV9MMlNBX3RyYW5zLCBMMiBzbGljZSBBIHN0YXRlIHRyYW5zaXN0aW9ucworZXZlbnQ6MFgwNEMwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMlNBX01PRF9UQUdfR1JQNzYgOiAoR3JvdXAgNzYgcG1fTDJTQV90cmFucykgTDIgc2xpY2UgQSB0cmFuc2l0aW9uIGZyb20gbW9kaWZpZWQgdG8gdGFnZ2VkCitldmVudDowWDA0QzEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wyU0FfU0hSX01PRF9HUlA3NiA6IChHcm91cCA3NiBwbV9MMlNBX3RyYW5zKSBMMiBzbGljZSBBIHRyYW5zaXRpb24gZnJvbSBzaGFyZWQgdG8gbW9kaWZpZWQKK2V2ZW50OjBYMDRDMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDJTQV9NT0RfSU5WX0dSUDc2IDogKEdyb3VwIDc2IHBtX0wyU0FfdHJhbnMpIEwyIHNsaWNlIEEgdHJhbnNpdGlvbiBmcm9tIG1vZGlmaWVkIHRvIGludmFsaWQKK2V2ZW50OjBYMDRDMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDJTQV9TSFJfSU5WX0dSUDc2IDogKEdyb3VwIDc2IHBtX0wyU0FfdHJhbnMpIEwyIHNsaWNlIEEgdHJhbnNpdGlvbiBmcm9tIHNoYXJlZCB0byBpbnZhbGlkCisKKyNHcm91cCA3NyBwbV9MMlNCX3RyYW5zLCBMMiBzbGljZSBCIHN0YXRlIHRyYW5zaXN0aW9ucworZXZlbnQ6MFgwNEQwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMlNCX01PRF9UQUdfR1JQNzcgOiAoR3JvdXAgNzcgcG1fTDJTQl90cmFucykgTDIgc2xpY2UgQiB0cmFuc2l0aW9uIGZyb20gbW9kaWZpZWQgdG8gdGFnZ2VkCitldmVudDowWDA0RDEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wyU0JfU0hSX01PRF9HUlA3NyA6IChHcm91cCA3NyBwbV9MMlNCX3RyYW5zKSBMMiBzbGljZSBCIHRyYW5zaXRpb24gZnJvbSBzaGFyZWQgdG8gbW9kaWZpZWQKK2V2ZW50OjBYMDREMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDJTQl9NT0RfSU5WX0dSUDc3IDogKEdyb3VwIDc3IHBtX0wyU0JfdHJhbnMpIEwyIHNsaWNlIEIgdHJhbnNpdGlvbiBmcm9tIG1vZGlmaWVkIHRvIGludmFsaWQKK2V2ZW50OjBYMDREMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDJTQl9TSFJfSU5WX0dSUDc3IDogKEdyb3VwIDc3IHBtX0wyU0JfdHJhbnMpIEwyIHNsaWNlIEIgdHJhbnNpdGlvbiBmcm9tIHNoYXJlZCB0byBpbnZhbGlkCisKKyNHcm91cCA3OCBwbV9MMlNDX3RyYW5zLCBMMiBzbGljZSBDIHN0YXRlIHRyYW5zaXN0aW9ucworZXZlbnQ6MFgwNEUwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMlNDX01PRF9UQUdfR1JQNzggOiAoR3JvdXAgNzggcG1fTDJTQ190cmFucykgTDIgc2xpY2UgQyB0cmFuc2l0aW9uIGZyb20gbW9kaWZpZWQgdG8gdGFnZ2VkCitldmVudDowWDA0RTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wyU0NfU0hSX01PRF9HUlA3OCA6IChHcm91cCA3OCBwbV9MMlNDX3RyYW5zKSBMMiBzbGljZSBDIHRyYW5zaXRpb24gZnJvbSBzaGFyZWQgdG8gbW9kaWZpZWQKK2V2ZW50OjBYMDRFMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDJTQ19NT0RfSU5WX0dSUDc4IDogKEdyb3VwIDc4IHBtX0wyU0NfdHJhbnMpIEwyIHNsaWNlIEMgdHJhbnNpdGlvbiBmcm9tIG1vZGlmaWVkIHRvIGludmFsaWQKK2V2ZW50OjBYMDRFMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDJTQ19TSFJfSU5WX0dSUDc4IDogKEdyb3VwIDc4IHBtX0wyU0NfdHJhbnMpIEwyIHNsaWNlIEMgdHJhbnNpdGlvbiBmcm9tIHNoYXJlZCB0byBpbnZhbGlkCisKKyNHcm91cCA3OSBwbV9MM1NBQl9yZXRyeSwgTDMgc2xpY2UgQS9CIHNub29wIHJldHJ5IGFuZCBhbGwgQ0kvQ08gYnVzeQorZXZlbnQ6MFgwNEYwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MM1NBX0FMTF9CVVNZX0dSUDc5IDogKEdyb3VwIDc5IHBtX0wzU0FCX3JldHJ5KSBMMyBzbGljZSBBIGFjdGl2ZSBmb3IgZXZlcnkgY3ljbGUgYWxsIENJL0NPIG1hY2hpbmVzIGJ1c3kKK2V2ZW50OjBYMDRGMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDNTQl9BTExfQlVTWV9HUlA3OSA6IChHcm91cCA3OSBwbV9MM1NBQl9yZXRyeSkgTDMgc2xpY2UgQiBhY3RpdmUgZm9yIGV2ZXJ5IGN5Y2xlIGFsbCBDSS9DTyBtYWNoaW5lcyBidXN5CitldmVudDowWDA0RjIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wzU0FfU05PT1BfUkVUUllfR1JQNzkgOiAoR3JvdXAgNzkgcG1fTDNTQUJfcmV0cnkpIEwzIHNsaWNlIEEgc25vb3AgcmV0cmllcworZXZlbnQ6MFgwNEYzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MM1NCX1NOT09QX1JFVFJZX0dSUDc5IDogKEdyb3VwIDc5IHBtX0wzU0FCX3JldHJ5KSBMMyBzbGljZSBCIHNub29wIHJldHJpZXMKKworI0dyb3VwIDgwIHBtX0wzU0FCX2hpdCwgTDMgc2xpY2UgQS9CIGhpdCBhbmQgcmVmZXJlbmNlCitldmVudDowWDA1MDAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wzU0FfUkVGX0dSUDgwIDogKEdyb3VwIDgwIHBtX0wzU0FCX2hpdCkgTDMgc2xpY2UgQSByZWZlcmVuY2VzCitldmVudDowWDA1MDEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wzU0JfUkVGX0dSUDgwIDogKEdyb3VwIDgwIHBtX0wzU0FCX2hpdCkgTDMgc2xpY2UgQiByZWZlcmVuY2VzCitldmVudDowWDA1MDIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wzU0FfSElUX0dSUDgwIDogKEdyb3VwIDgwIHBtX0wzU0FCX2hpdCkgTDMgc2xpY2UgQSBoaXRzCitldmVudDowWDA1MDMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wzU0JfSElUX0dSUDgwIDogKEdyb3VwIDgwIHBtX0wzU0FCX2hpdCkgTDMgc2xpY2UgQiBoaXRzCisKKyNHcm91cCA4MSBwbV9MM1NDX3JldHJ5X2hpdCwgTDMgc2xpY2UgQyBoaXQgJiBzbm9vcCByZXRyeQorZXZlbnQ6MFgwNTEwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MM1NDX0FMTF9CVVNZX0dSUDgxIDogKEdyb3VwIDgxIHBtX0wzU0NfcmV0cnlfaGl0KSBMMyBzbGljZSBDIGFjdGl2ZSBmb3IgZXZlcnkgY3ljbGUgYWxsIENJL0NPIG1hY2hpbmVzIGJ1c3kKK2V2ZW50OjBYMDUxMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDNTQ19SRUZfR1JQODEgOiAoR3JvdXAgODEgcG1fTDNTQ19yZXRyeV9oaXQpIEwzIHNsaWNlIEMgcmVmZXJlbmNlcworZXZlbnQ6MFgwNTEyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MM1NDX1NOT09QX1JFVFJZX0dSUDgxIDogKEdyb3VwIDgxIHBtX0wzU0NfcmV0cnlfaGl0KSBMMyBzbGljZSBDIHNub29wIHJldHJpZXMKK2V2ZW50OjBYMDUxMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDNTQ19ISVRfR1JQODEgOiAoR3JvdXAgODEgcG1fTDNTQ19yZXRyeV9oaXQpIEwzIHNsaWNlIEMgaGl0cworCisjR3JvdXAgODIgcG1fZnB1MSwgRmxvYXRpbmcgUG9pbnQgZXZlbnRzCitldmVudDowWDA1MjAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVV9GRElWX0dSUDgyIDogKEdyb3VwIDgyIHBtX2ZwdTEpIEZQVSBleGVjdXRlZCBGRElWIGluc3RydWN0aW9uCitldmVudDowWDA1MjEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVV9GTUFfR1JQODIgOiAoR3JvdXAgODIgcG1fZnB1MSkgRlBVIGV4ZWN1dGVkIG11bHRpcGx5LWFkZCBpbnN0cnVjdGlvbgorZXZlbnQ6MFgwNTIyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFVfRk1PVl9GRVNUX0dSUDgyIDogKEdyb3VwIDgyIHBtX2ZwdTEpIEZQVSBleGVjdXRlZCBGTU9WIG9yIEZFU1QgaW5zdHJ1Y3Rpb25zCitldmVudDowWDA1MjMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVV9GRVNUX0dSUDgyIDogKEdyb3VwIDgyIHBtX2ZwdTEpIEZQVSBleGVjdXRlZCBGRVNUIGluc3RydWN0aW9uCisKKyNHcm91cCA4MyBwbV9mcHUyLCBGbG9hdGluZyBQb2ludCBldmVudHMKK2V2ZW50OjBYMDUzMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVXzFGTE9QX0dSUDgzIDogKEdyb3VwIDgzIHBtX2ZwdTIpIEZQVSBleGVjdXRlZCBvbmUgZmxvcCBpbnN0cnVjdGlvbgorZXZlbnQ6MFgwNTMxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFVfRlNRUlRfR1JQODMgOiAoR3JvdXAgODMgcG1fZnB1MikgRlBVIGV4ZWN1dGVkIEZTUVJUIGluc3RydWN0aW9uCitldmVudDowWDA1MzIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVV9GUlNQX0ZDT05WX0dSUDgzIDogKEdyb3VwIDgzIHBtX2ZwdTIpIEZQVSBleGVjdXRlZCBGUlNQIG9yIEZDT05WIGluc3RydWN0aW9ucworZXZlbnQ6MFgwNTMzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFVfRklOX0dSUDgzIDogKEdyb3VwIDgzIHBtX2ZwdTIpIEZQVSBwcm9kdWNlZCBhIHJlc3VsdAorCisjR3JvdXAgODQgcG1fZnB1MywgRmxvYXRpbmcgcG9pbnQgZXZlbnRzCitldmVudDowWDA1NDAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVV9ERU5PUk1fR1JQODQgOiAoR3JvdXAgODQgcG1fZnB1MykgRlBVIHJlY2VpdmVkIGRlbm9ybWFsaXplZCBkYXRhCitldmVudDowWDA1NDEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVV9TVEFMTDNfR1JQODQgOiAoR3JvdXAgODQgcG1fZnB1MykgRlBVIHN0YWxsZWQgaW4gcGlwZTMKK2V2ZW50OjBYMDU0MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVMF9GSU5fR1JQODQgOiAoR3JvdXAgODQgcG1fZnB1MykgRlBVMCBwcm9kdWNlZCBhIHJlc3VsdAorZXZlbnQ6MFgwNTQzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFUxX0ZJTl9HUlA4NCA6IChHcm91cCA4NCBwbV9mcHUzKSBGUFUxIHByb2R1Y2VkIGEgcmVzdWx0CisKKyNHcm91cCA4NSBwbV9mcHU0LCBGbG9hdGluZyBwb2ludCBldmVudHMKK2V2ZW50OjBYMDU1MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVX1NJTkdMRV9HUlA4NSA6IChHcm91cCA4NSBwbV9mcHU0KSBGUFUgZXhlY3V0ZWQgc2luZ2xlIHByZWNpc2lvbiBpbnN0cnVjdGlvbgorZXZlbnQ6MFgwNTUxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFVfU1RGX0dSUDg1IDogKEdyb3VwIDg1IHBtX2ZwdTQpIEZQVSBleGVjdXRlZCBzdG9yZSBpbnN0cnVjdGlvbgorZXZlbnQ6MFgwNTUyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JT1BTX0NNUExfR1JQODUgOiAoR3JvdXAgODUgcG1fZnB1NCkgSW50ZXJuYWwgb3BlcmF0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMDU1MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVX0xERl9HUlA4NSA6IChHcm91cCA4NSBwbV9mcHU0KSBMU1UgZXhlY3V0ZWQgRmxvYXRpbmcgUG9pbnQgbG9hZCBpbnN0cnVjdGlvbgorCisjR3JvdXAgODYgcG1fZnB1NSwgRmxvYXRpbmcgcG9pbnQgZXZlbnRzIGJ5IHVuaXQKK2V2ZW50OjBYMDU2MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVMF9GU1FSVF9HUlA4NiA6IChHcm91cCA4NiBwbV9mcHU1KSBGUFUwIGV4ZWN1dGVkIEZTUVJUIGluc3RydWN0aW9uCitldmVudDowWDA1NjEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVTFfRlNRUlRfR1JQODYgOiAoR3JvdXAgODYgcG1fZnB1NSkgRlBVMSBleGVjdXRlZCBGU1FSVCBpbnN0cnVjdGlvbgorZXZlbnQ6MFgwNTYyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFUwX0ZFU1RfR1JQODYgOiAoR3JvdXAgODYgcG1fZnB1NSkgRlBVMCBleGVjdXRlZCBGRVNUIGluc3RydWN0aW9uCitldmVudDowWDA1NjMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVTFfRkVTVF9HUlA4NiA6IChHcm91cCA4NiBwbV9mcHU1KSBGUFUxIGV4ZWN1dGVkIEZFU1QgaW5zdHJ1Y3Rpb24KKworI0dyb3VwIDg3IHBtX2ZwdTYsIEZsb2F0aW5nIHBvaW50IGV2ZW50cyBieSB1bml0CitldmVudDowWDA1NzAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVTBfREVOT1JNX0dSUDg3IDogKEdyb3VwIDg3IHBtX2ZwdTYpIEZQVTAgcmVjZWl2ZWQgZGVub3JtYWxpemVkIGRhdGEKK2V2ZW50OjBYMDU3MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVMV9ERU5PUk1fR1JQODcgOiAoR3JvdXAgODcgcG1fZnB1NikgRlBVMSByZWNlaXZlZCBkZW5vcm1hbGl6ZWQgZGF0YQorZXZlbnQ6MFgwNTcyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFUwX0ZNT1ZfRkVTVF9HUlA4NyA6IChHcm91cCA4NyBwbV9mcHU2KSBGUFUwIGV4ZWN1dGVkIEZNT1Ygb3IgRkVTVCBpbnN0cnVjdGlvbnMKK2V2ZW50OjBYMDU3MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVMV9GTU9WX0ZFU1RfR1JQODcgOiAoR3JvdXAgODcgcG1fZnB1NikgRlBVMSBleGVjdXRlZCBGTU9WIG9yIEZFU1QgaW5zdHJ1Y3Rpb25zCisKKyNHcm91cCA4OCBwbV9mcHU3LCBGbG9hdGluZyBwb2ludCBldmVudHMgYnkgdW5pdAorZXZlbnQ6MFgwNTgwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFUwX0ZESVZfR1JQODggOiAoR3JvdXAgODggcG1fZnB1NykgRlBVMCBleGVjdXRlZCBGRElWIGluc3RydWN0aW9uCitldmVudDowWDA1ODEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVTFfRkRJVl9HUlA4OCA6IChHcm91cCA4OCBwbV9mcHU3KSBGUFUxIGV4ZWN1dGVkIEZESVYgaW5zdHJ1Y3Rpb24KK2V2ZW50OjBYMDU4MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVMF9GUlNQX0ZDT05WX0dSUDg4IDogKEdyb3VwIDg4IHBtX2ZwdTcpIEZQVTAgZXhlY3V0ZWQgRlJTUCBvciBGQ09OViBpbnN0cnVjdGlvbnMKK2V2ZW50OjBYMDU4MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVMV9GUlNQX0ZDT05WX0dSUDg4IDogKEdyb3VwIDg4IHBtX2ZwdTcpIEZQVTEgZXhlY3V0ZWQgRlJTUCBvciBGQ09OViBpbnN0cnVjdGlvbnMKKworI0dyb3VwIDg5IHBtX2ZwdTgsIEZsb2F0aW5nIHBvaW50IGV2ZW50cyBieSB1bml0CitldmVudDowWDA1OTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVTBfU1RBTEwzX0dSUDg5IDogKEdyb3VwIDg5IHBtX2ZwdTgpIEZQVTAgc3RhbGxlZCBpbiBwaXBlMworZXZlbnQ6MFgwNTkxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFUxX1NUQUxMM19HUlA4OSA6IChHcm91cCA4OSBwbV9mcHU4KSBGUFUxIHN0YWxsZWQgaW4gcGlwZTMKK2V2ZW50OjBYMDU5MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU9QU19DTVBMX0dSUDg5IDogKEdyb3VwIDg5IHBtX2ZwdTgpIEludGVybmFsIG9wZXJhdGlvbnMgY29tcGxldGVkCitldmVudDowWDA1OTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVTBfRlBTQ1JfR1JQODkgOiAoR3JvdXAgODkgcG1fZnB1OCkgRlBVMCBleGVjdXRlZCBGUFNDUiBpbnN0cnVjdGlvbgorCisjR3JvdXAgOTAgcG1fZnB1OSwgRmxvYXRpbmcgcG9pbnQgZXZlbnRzIGJ5IHVuaXQKK2V2ZW50OjBYMDVBMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVMF9TSU5HTEVfR1JQOTAgOiAoR3JvdXAgOTAgcG1fZnB1OSkgRlBVMCBleGVjdXRlZCBzaW5nbGUgcHJlY2lzaW9uIGluc3RydWN0aW9uCitldmVudDowWDA1QTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVTFfU0lOR0xFX0dSUDkwIDogKEdyb3VwIDkwIHBtX2ZwdTkpIEZQVTEgZXhlY3V0ZWQgc2luZ2xlIHByZWNpc2lvbiBpbnN0cnVjdGlvbgorZXZlbnQ6MFgwNUEyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1UwX0xERl9HUlA5MCA6IChHcm91cCA5MCBwbV9mcHU5KSBMU1UwIGV4ZWN1dGVkIEZsb2F0aW5nIFBvaW50IGxvYWQgaW5zdHJ1Y3Rpb24KK2V2ZW50OjBYMDVBMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVMV9MREZfR1JQOTAgOiAoR3JvdXAgOTAgcG1fZnB1OSkgTFNVMSBleGVjdXRlZCBGbG9hdGluZyBQb2ludCBsb2FkIGluc3RydWN0aW9uCisKKyNHcm91cCA5MSBwbV9mcHUxMCwgRmxvYXRpbmcgcG9pbnQgZXZlbnRzIGJ5IHVuaXQKK2V2ZW50OjBYMDVCMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVMF9GTUFfR1JQOTEgOiAoR3JvdXAgOTEgcG1fZnB1MTApIEZQVTAgZXhlY3V0ZWQgbXVsdGlwbHktYWRkIGluc3RydWN0aW9uCitldmVudDowWDA1QjEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVTFfRk1BX0dSUDkxIDogKEdyb3VwIDkxIHBtX2ZwdTEwKSBGUFUxIGV4ZWN1dGVkIG11bHRpcGx5LWFkZCBpbnN0cnVjdGlvbgorZXZlbnQ6MFgwNUIyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JT1BTX0NNUExfR1JQOTEgOiAoR3JvdXAgOTEgcG1fZnB1MTApIEludGVybmFsIG9wZXJhdGlvbnMgY29tcGxldGVkCitldmVudDowWDA1QjMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVTFfRlJTUF9GQ09OVl9HUlA5MSA6IChHcm91cCA5MSBwbV9mcHUxMCkgRlBVMSBleGVjdXRlZCBGUlNQIG9yIEZDT05WIGluc3RydWN0aW9ucworCisjR3JvdXAgOTIgcG1fZnB1MTEsIEZsb2F0aW5nIHBvaW50IGV2ZW50cyBieSB1bml0CitldmVudDowWDA1QzAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVTBfMUZMT1BfR1JQOTIgOiAoR3JvdXAgOTIgcG1fZnB1MTEpIEZQVTAgZXhlY3V0ZWQgYWRkLCBtdWx0LCBzdWIsIGNtcCBvciBzZWwgaW5zdHJ1Y3Rpb24KK2V2ZW50OjBYMDVDMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVMV8xRkxPUF9HUlA5MiA6IChHcm91cCA5MiBwbV9mcHUxMSkgRlBVMSBleGVjdXRlZCBhZGQsIG11bHQsIHN1YiwgY21wIG9yIHNlbCBpbnN0cnVjdGlvbgorZXZlbnQ6MFgwNUMyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFUwX0ZJTl9HUlA5MiA6IChHcm91cCA5MiBwbV9mcHUxMSkgRlBVMCBwcm9kdWNlZCBhIHJlc3VsdAorZXZlbnQ6MFgwNUMzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JT1BTX0NNUExfR1JQOTIgOiAoR3JvdXAgOTIgcG1fZnB1MTEpIEludGVybmFsIG9wZXJhdGlvbnMgY29tcGxldGVkCisKKyNHcm91cCA5MyBwbV9mcHUxMiwgRmxvYXRpbmcgcG9pbnQgZXZlbnRzIGJ5IHVuaXQKK2V2ZW50OjBYMDVEMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVMF9TVEZfR1JQOTMgOiAoR3JvdXAgOTMgcG1fZnB1MTIpIEZQVTAgZXhlY3V0ZWQgc3RvcmUgaW5zdHJ1Y3Rpb24KK2V2ZW50OjBYMDVEMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVMV9TVEZfR1JQOTMgOiAoR3JvdXAgOTMgcG1fZnB1MTIpIEZQVTEgZXhlY3V0ZWQgc3RvcmUgaW5zdHJ1Y3Rpb24KK2V2ZW50OjBYMDVEMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVMF9MREZfR1JQOTMgOiAoR3JvdXAgOTMgcG1fZnB1MTIpIExTVTAgZXhlY3V0ZWQgRmxvYXRpbmcgUG9pbnQgbG9hZCBpbnN0cnVjdGlvbgorZXZlbnQ6MFgwNUQzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JT1BTX0NNUExfR1JQOTMgOiAoR3JvdXAgOTMgcG1fZnB1MTIpIEludGVybmFsIG9wZXJhdGlvbnMgY29tcGxldGVkCisKKyNHcm91cCA5NCBwbV9meHUxLCBGaXhlZCBQb2ludCBldmVudHMKK2V2ZW50OjBYMDVFMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlhVX0lETEVfR1JQOTQgOiAoR3JvdXAgOTQgcG1fZnh1MSkgRlhVIGlkbGUKK2V2ZW50OjBYMDVFMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlhVX0JVU1lfR1JQOTQgOiAoR3JvdXAgOTQgcG1fZnh1MSkgRlhVIGJ1c3kKK2V2ZW50OjBYMDVFMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlhVMF9CVVNZX0ZYVTFfSURMRV9HUlA5NCA6IChHcm91cCA5NCBwbV9meHUxKSBGWFUwIGJ1c3kgRlhVMSBpZGxlCitldmVudDowWDA1RTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZYVTFfQlVTWV9GWFUwX0lETEVfR1JQOTQgOiAoR3JvdXAgOTQgcG1fZnh1MSkgRlhVMSBidXN5IEZYVTAgaWRsZQorCisjR3JvdXAgOTUgcG1fZnh1MiwgRml4ZWQgUG9pbnQgZXZlbnRzCitldmVudDowWDA1RjAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19HUlBfRElTUF9HUlA5NSA6IChHcm91cCA5NSBwbV9meHUyKSBNYXJrZWQgZ3JvdXAgZGlzcGF0Y2hlZAorZXZlbnQ6MFgwNUYxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfR1JQX0JSX1JFRElSX0dSUDk1IDogKEdyb3VwIDk1IHBtX2Z4dTIpIEdyb3VwIGV4cGVyaWVuY2VkIG1hcmtlZCBicmFuY2ggcmVkaXJlY3QKK2V2ZW50OjBYMDVGMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlhVX0ZJTl9HUlA5NSA6IChHcm91cCA5NSBwbV9meHUyKSBGWFUgcHJvZHVjZWQgYSByZXN1bHQKK2V2ZW50OjBYMDVGMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlhMU19GVUxMX0NZQ19HUlA5NSA6IChHcm91cCA5NSBwbV9meHUyKSBDeWNsZXMgRlhMUyBxdWV1ZSBpcyBmdWxsCisKKyNHcm91cCA5NiBwbV9meHUzLCBGaXhlZCBQb2ludCBldmVudHMKK2V2ZW50OjBYMDYwMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fM0lOU1RfQ0xCX0NZQ19HUlA5NiA6IChHcm91cCA5NiBwbV9meHUzKSBDeWNsZXMgMyBpbnN0cnVjdGlvbnMgaW4gQ0xCCitldmVudDowWDA2MDEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNXzRJTlNUX0NMQl9DWUNfR1JQOTYgOiAoR3JvdXAgOTYgcG1fZnh1MykgQ3ljbGVzIDQgaW5zdHJ1Y3Rpb25zIGluIENMQgorZXZlbnQ6MFgwNjAyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GWFUwX0ZJTl9HUlA5NiA6IChHcm91cCA5NiBwbV9meHUzKSBGWFUwIHByb2R1Y2VkIGEgcmVzdWx0CitldmVudDowWDA2MDMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZYVTFfRklOX0dSUDk2IDogKEdyb3VwIDk2IHBtX2Z4dTMpIEZYVTEgcHJvZHVjZWQgYSByZXN1bHQKKworI0dyb3VwIDk3IHBtX3NtdF9wcmlvcml0aWVzMSwgVGhyZWFkIHByaW9yaXR5IGV2ZW50cworZXZlbnQ6MFgwNjEwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9USFJEX1BSSU9fNF9DWUNfR1JQOTcgOiAoR3JvdXAgOTcgcG1fc210X3ByaW9yaXRpZXMxKSBDeWNsZXMgdGhyZWFkIHJ1bm5pbmcgYXQgcHJpb3JpdHkgbGV2ZWwgNAorZXZlbnQ6MFgwNjExIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9USFJEX1BSSU9fN19DWUNfR1JQOTcgOiAoR3JvdXAgOTcgcG1fc210X3ByaW9yaXRpZXMxKSBDeWNsZXMgdGhyZWFkIHJ1bm5pbmcgYXQgcHJpb3JpdHkgbGV2ZWwgNworZXZlbnQ6MFgwNjEyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9USFJEX1BSSU9fRElGRl8wX0NZQ19HUlA5NyA6IChHcm91cCA5NyBwbV9zbXRfcHJpb3JpdGllczEpIEN5Y2xlcyBubyB0aHJlYWQgcHJpb3JpdHkgZGlmZmVyZW5jZQorZXZlbnQ6MFgwNjEzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9USFJEX1BSSU9fRElGRl8xb3IyX0NZQ19HUlA5NyA6IChHcm91cCA5NyBwbV9zbXRfcHJpb3JpdGllczEpIEN5Y2xlcyB0aHJlYWQgcHJpb3JpdHkgZGlmZmVyZW5jZSBpcyAxIG9yIDIKKworI0dyb3VwIDk4IHBtX3NtdF9wcmlvcml0aWVzMiwgVGhyZWFkIHByaW9yaXR5IGV2ZW50cworZXZlbnQ6MFgwNjIwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9USFJEX1BSSU9fM19DWUNfR1JQOTggOiAoR3JvdXAgOTggcG1fc210X3ByaW9yaXRpZXMyKSBDeWNsZXMgdGhyZWFkIHJ1bm5pbmcgYXQgcHJpb3JpdHkgbGV2ZWwgMworZXZlbnQ6MFgwNjIxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9USFJEX1BSSU9fNl9DWUNfR1JQOTggOiAoR3JvdXAgOTggcG1fc210X3ByaW9yaXRpZXMyKSBDeWNsZXMgdGhyZWFkIHJ1bm5pbmcgYXQgcHJpb3JpdHkgbGV2ZWwgNgorZXZlbnQ6MFgwNjIyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9USFJEX1BSSU9fRElGRl8zb3I0X0NZQ19HUlA5OCA6IChHcm91cCA5OCBwbV9zbXRfcHJpb3JpdGllczIpIEN5Y2xlcyB0aHJlYWQgcHJpb3JpdHkgZGlmZmVyZW5jZSBpcyAzIG9yIDQKK2V2ZW50OjBYMDYyMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fVEhSRF9QUklPX0RJRkZfNW9yNl9DWUNfR1JQOTggOiAoR3JvdXAgOTggcG1fc210X3ByaW9yaXRpZXMyKSBDeWNsZXMgdGhyZWFkIHByaW9yaXR5IGRpZmZlcmVuY2UgaXMgNSBvciA2CisKKyNHcm91cCA5OSBwbV9zbXRfcHJpb3JpdGllczMsIFRocmVhZCBwcmlvcml0eSBldmVudHMKK2V2ZW50OjBYMDYzMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fVEhSRF9QUklPXzJfQ1lDX0dSUDk5IDogKEdyb3VwIDk5IHBtX3NtdF9wcmlvcml0aWVzMykgQ3ljbGVzIHRocmVhZCBydW5uaW5nIGF0IHByaW9yaXR5IGxldmVsIDIKK2V2ZW50OjBYMDYzMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fVEhSRF9QUklPXzVfQ1lDX0dSUDk5IDogKEdyb3VwIDk5IHBtX3NtdF9wcmlvcml0aWVzMykgQ3ljbGVzIHRocmVhZCBydW5uaW5nIGF0IHByaW9yaXR5IGxldmVsIDUKK2V2ZW50OjBYMDYzMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fVEhSRF9QUklPX0RJRkZfbWludXMxb3IyX0NZQ19HUlA5OSA6IChHcm91cCA5OSBwbV9zbXRfcHJpb3JpdGllczMpIEN5Y2xlcyB0aHJlYWQgcHJpb3JpdHkgZGlmZmVyZW5jZSBpcyAtMSBvciAtMgorZXZlbnQ6MFgwNjMzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9USFJEX1BSSU9fRElGRl9taW51czNvcjRfQ1lDX0dSUDk5IDogKEdyb3VwIDk5IHBtX3NtdF9wcmlvcml0aWVzMykgQ3ljbGVzIHRocmVhZCBwcmlvcml0eSBkaWZmZXJlbmNlIGlzIC0zIG9yIC00CisKKyNHcm91cCAxMDAgcG1fc210X3ByaW9yaXRpZXM0LCBUaHJlYWQgcHJpb3JpdHkgZXZlbnRzCitldmVudDowWDA2NDAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1RIUkRfUFJJT18xX0NZQ19HUlAxMDAgOiAoR3JvdXAgMTAwIHBtX3NtdF9wcmlvcml0aWVzNCkgQ3ljbGVzIHRocmVhZCBydW5uaW5nIGF0IHByaW9yaXR5IGxldmVsIDEKK2V2ZW50OjBYMDY0MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSFZfQ1lDX0dSUDEwMCA6IChHcm91cCAxMDAgcG1fc210X3ByaW9yaXRpZXM0KSBIeXBlcnZpc29yIEN5Y2xlcworZXZlbnQ6MFgwNjQyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9USFJEX1BSSU9fRElGRl9taW51czVvcjZfQ1lDX0dSUDEwMCA6IChHcm91cCAxMDAgcG1fc210X3ByaW9yaXRpZXM0KSBDeWNsZXMgdGhyZWFkIHByaW9yaXR5IGRpZmZlcmVuY2UgaXMgLTUgb3IgLTYKK2V2ZW50OjBYMDY0MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU9QU19DTVBMX0dSUDEwMCA6IChHcm91cCAxMDAgcG1fc210X3ByaW9yaXRpZXM0KSBJbnRlcm5hbCBvcGVyYXRpb25zIGNvbXBsZXRlZAorCisjR3JvdXAgMTAxIHBtX3NtdF9ib3RoLCBUaHJlYWQgY29tbW9uIGV2ZW50cworZXZlbnQ6MFgwNjUwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9USFJEX09ORV9SVU5fQ1lDX0dSUDEwMSA6IChHcm91cCAxMDEgcG1fc210X2JvdGgpIE9uZSBvZiB0aGUgdGhyZWFkcyBpbiBydW4gY3ljbGVzCitldmVudDowWDA2NTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1RIUkRfR1JQX0NNUExfQk9USF9DWUNfR1JQMTAxIDogKEdyb3VwIDEwMSBwbV9zbXRfYm90aCkgQ3ljbGVzIGdyb3VwIGNvbXBsZXRlZCBieSBib3RoIHRocmVhZHMKK2V2ZW50OjBYMDY1MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU9QU19DTVBMX0dSUDEwMSA6IChHcm91cCAxMDEgcG1fc210X2JvdGgpIEludGVybmFsIG9wZXJhdGlvbnMgY29tcGxldGVkCitldmVudDowWDA2NTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1RIUkRfTDJNSVNTX0JPVEhfQ1lDX0dSUDEwMSA6IChHcm91cCAxMDEgcG1fc210X2JvdGgpIEN5Y2xlcyBib3RoIHRocmVhZHMgaW4gTDIgbWlzc2VzCisKKyNHcm91cCAxMDIgcG1fc210X3NlbGVjdGlvbiwgVGhyZWFkIHNlbGVjdGlvbgorZXZlbnQ6MFgwNjYwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9TTk9PUF9UTEJJRV9HUlAxMDIgOiAoR3JvdXAgMTAyIHBtX3NtdF9zZWxlY3Rpb24pIFNub29wIFRMQklFCitldmVudDowWDA2NjEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lPUFNfQ01QTF9HUlAxMDIgOiAoR3JvdXAgMTAyIHBtX3NtdF9zZWxlY3Rpb24pIEludGVybmFsIG9wZXJhdGlvbnMgY29tcGxldGVkCitldmVudDowWDA2NjIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1RIUkRfU0VMX1QwX0dSUDEwMiA6IChHcm91cCAxMDIgcG1fc210X3NlbGVjdGlvbikgRGVjb2RlIHNlbGVjdGVkIHRocmVhZCAwCitldmVudDowWDA2NjMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1RIUkRfU0VMX1QxX0dSUDEwMiA6IChHcm91cCAxMDIgcG1fc210X3NlbGVjdGlvbikgRGVjb2RlIHNlbGVjdGVkIHRocmVhZCAxCisKKyNHcm91cCAxMDMgcG1fc210X3NlbGVjdG92ZXIxLCBUaHJlYWQgc2VsZWN0aW9uIG92ZXJpZGUKK2V2ZW50OjBYMDY3MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU9QU19DTVBMX0dSUDEwMyA6IChHcm91cCAxMDMgcG1fc210X3NlbGVjdG92ZXIxKSBJbnRlcm5hbCBvcGVyYXRpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgwNjcxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV8wSU5TVF9DTEJfQ1lDX0dSUDEwMyA6IChHcm91cCAxMDMgcG1fc210X3NlbGVjdG92ZXIxKSBDeWNsZXMgbm8gaW5zdHJ1Y3Rpb25zIGluIENMQgorZXZlbnQ6MFgwNjcyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9USFJEX1NFTF9PVkVSX0NMQl9FTVBUWV9HUlAxMDMgOiAoR3JvdXAgMTAzIHBtX3NtdF9zZWxlY3RvdmVyMSkgVGhyZWFkIHNlbGVjdGlvbiBvdmVycmlkZXMgY2F1c2VkIGJ5IENMQiBlbXB0eQorZXZlbnQ6MFgwNjczIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9USFJEX1NFTF9PVkVSX0dDVF9JTUJBTF9HUlAxMDMgOiAoR3JvdXAgMTAzIHBtX3NtdF9zZWxlY3RvdmVyMSkgVGhyZWFkIHNlbGVjdGlvbiBvdmVycmlkZXMgY2F1c2VkIGJ5IEdDVCBpbWJhbGFuY2UKKworI0dyb3VwIDEwNCBwbV9zbXRfc2VsZWN0b3ZlcjIsIFRocmVhZCBzZWxlY3Rpb24gb3ZlcmlkZQorZXZlbnQ6MFgwNjgwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JT1BTX0NNUExfR1JQMTA0IDogKEdyb3VwIDEwNCBwbV9zbXRfc2VsZWN0b3ZlcjIpIEludGVybmFsIG9wZXJhdGlvbnMgY29tcGxldGVkCitldmVudDowWDA2ODEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQMTA0IDogKEdyb3VwIDEwNCBwbV9zbXRfc2VsZWN0b3ZlcjIpIFByb2Nlc3NvciBjeWNsZXMKK2V2ZW50OjBYMDY4MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fVEhSRF9TRUxfT1ZFUl9JU1VfSE9MRF9HUlAxMDQgOiAoR3JvdXAgMTA0IHBtX3NtdF9zZWxlY3RvdmVyMikgVGhyZWFkIHNlbGVjdGlvbiBvdmVycmlkZXMgY2F1c2VkIGJ5IElTVSBob2xkcworZXZlbnQ6MFgwNjgzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9USFJEX1NFTF9PVkVSX0wyTUlTU19HUlAxMDQgOiAoR3JvdXAgMTA0IHBtX3NtdF9zZWxlY3RvdmVyMikgVGhyZWFkIHNlbGVjdGlvbiBvdmVycmlkZXMgY2F1c2VkIGJ5IEwyIG1pc3NlcworCisjR3JvdXAgMTA1IHBtX2ZhYnJpYzEsIEZhYnJpYyBldmVudHMKK2V2ZW50OjBYMDY5MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRkFCX0NNRF9JU1NVRURfR1JQMTA1IDogKEdyb3VwIDEwNSBwbV9mYWJyaWMxKSBGYWJyaWMgY29tbWFuZCBpc3N1ZWQKK2V2ZW50OjBYMDY5MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRkFCX0RDTEFJTV9JU1NVRURfR1JQMTA1IDogKEdyb3VwIDEwNSBwbV9mYWJyaWMxKSBkY2xhaW0gaXNzdWVkCitldmVudDowWDA2OTIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZBQl9DTURfUkVUUklFRF9HUlAxMDUgOiAoR3JvdXAgMTA1IHBtX2ZhYnJpYzEpIEZhYnJpYyBjb21tYW5kIHJldHJpZWQKK2V2ZW50OjBYMDY5MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRkFCX0RDTEFJTV9SRVRSSUVEX0dSUDEwNSA6IChHcm91cCAxMDUgcG1fZmFicmljMSkgZGNsYWltIHJldHJpZWQKKworI0dyb3VwIDEwNiBwbV9mYWJyaWMyLCBGYWJyaWMgZGF0YSBtb3ZlbWVudAorZXZlbnQ6MFgwNkEwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GQUJfUDF0b00xX1NJREVDQVJfRU1QVFlfR1JQMTA2IDogKEdyb3VwIDEwNiBwbV9mYWJyaWMyKSBQMSB0byBNMSBzaWRlY2FyIGVtcHR5CitldmVudDowWDA2QTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZBQl9IT0xEdG9WTl9FTVBUWV9HUlAxMDYgOiAoR3JvdXAgMTA2IHBtX2ZhYnJpYzIpIEhvbGQgYnVmZmVyIHRvIFZOIGVtcHR5CitldmVudDowWDA2QTIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZBQl9QMXRvVk5vck5OX1NJREVDQVJfRU1QVFlfR1JQMTA2IDogKEdyb3VwIDEwNiBwbV9mYWJyaWMyKSBQMSB0byBWTi9OTiBzaWRlY2FyIGVtcHR5CitldmVudDowWDA2QTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZBQl9WQllQQVNTX0VNUFRZX0dSUDEwNiA6IChHcm91cCAxMDYgcG1fZmFicmljMikgVmVydGljYWwgYnlwYXNzIGJ1ZmZlciBlbXB0eQorCisjR3JvdXAgMTA3IHBtX2ZhYnJpYzMsIEZhYnJpYyBkYXRhIG1vdmVtZW50CitldmVudDowWDA2QjAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZBQl9QTnRvTk5fRElSRUNUX0dSUDEwNyA6IChHcm91cCAxMDcgcG1fZmFicmljMykgUE4gdG8gTk4gYmVhdCB3ZW50IHN0cmFpZ2h0IHRvIGl0cyBkZXN0aW5hdGlvbgorZXZlbnQ6MFgwNkIxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GQUJfUE50b1ZOX0RJUkVDVF9HUlAxMDcgOiAoR3JvdXAgMTA3IHBtX2ZhYnJpYzMpIFBOIHRvIFZOIGJlYXQgd2VudCBzdHJhaWdodCB0byBpdHMgZGVzdGluYXRpb24KK2V2ZW50OjBYMDZCMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRkFCX1BOdG9OTl9TSURFQ0FSX0dSUDEwNyA6IChHcm91cCAxMDcgcG1fZmFicmljMykgUE4gdG8gTk4gYmVhdCB3ZW50IHRvIHNpZGVjYXIgZmlyc3QKK2V2ZW50OjBYMDZCMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRkFCX1BOdG9WTl9TSURFQ0FSX0dSUDEwNyA6IChHcm91cCAxMDcgcG1fZmFicmljMykgUE4gdG8gVk4gYmVhdCB3ZW50IHRvIHNpZGVjYXIgZmlyc3QKKworI0dyb3VwIDEwOCBwbV9mYWJyaWM0LCBGYWJyaWMgZGF0YSBtb3ZlbWVudAorZXZlbnQ6MFgwNkMwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GQUJfTTF0b1AxX1NJREVDQVJfRU1QVFlfR1JQMTA4IDogKEdyb3VwIDEwOCBwbV9mYWJyaWM0KSBNMSB0byBQMSBzaWRlY2FyIGVtcHR5CitldmVudDowWDA2QzEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZBQl9IT0xEdG9OTl9FTVBUWV9HUlAxMDggOiAoR3JvdXAgMTA4IHBtX2ZhYnJpYzQpIEhvbGQgYnVmZmVyIHRvIE5OIGVtcHR5CitldmVudDowWDA2QzIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0VFX09GRl9HUlAxMDggOiAoR3JvdXAgMTA4IHBtX2ZhYnJpYzQpIEN5Y2xlcyBNU1IoRUUpIGJpdCBvZmYKK2V2ZW50OjBYMDZDMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRkFCX00xdG9WTm9yTk5fU0lERUNBUl9FTVBUWV9HUlAxMDggOiAoR3JvdXAgMTA4IHBtX2ZhYnJpYzQpIE0xIHRvIFZOL05OIHNpZGVjYXIgZW1wdHkKKworI0dyb3VwIDEwOSBwbV9zbm9vcDEsIFNub29wIHJldHJ5CitldmVudDowWDA2RDAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1NOT09QX1JEX1JFVFJZX1FGVUxMX0dSUDEwOSA6IChHcm91cCAxMDkgcG1fc25vb3AxKSBTbm9vcCByZWFkIHJldHJ5IGR1ZSB0byByZWFkIHF1ZXVlIGZ1bGwKK2V2ZW50OjBYMDZEMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fU05PT1BfRENMQUlNX1JFVFJZX1FGVUxMX0dSUDEwOSA6IChHcm91cCAxMDkgcG1fc25vb3AxKSBTbm9vcCBkY2xhaW0vZmx1c2ggcmV0cnkgZHVlIHRvIHdyaXRlL2RjbGFpbSBxdWV1ZXMgZnVsbAorZXZlbnQ6MFgwNkQyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9TTk9PUF9XUl9SRVRSWV9RRlVMTF9HUlAxMDkgOiAoR3JvdXAgMTA5IHBtX3Nub29wMSkgU25vb3AgcmVhZCByZXRyeSBkdWUgdG8gcmVhZCBxdWV1ZSBmdWxsCitldmVudDowWDA2RDMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1NOT09QX1BBUlRJQUxfUlRSWV9RRlVMTF9HUlAxMDkgOiAoR3JvdXAgMTA5IHBtX3Nub29wMSkgU25vb3AgcGFydGlhbCB3cml0ZSByZXRyeSBkdWUgdG8gcGFydGlhbC13cml0ZSBxdWV1ZXMgZnVsbAorCisjR3JvdXAgMTEwIHBtX3Nub29wMiwgU25vb3AgcmVhZCByZXRyeQorZXZlbnQ6MFgwNkUwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9TTk9PUF9SRF9SRVRSWV9SUV9HUlAxMTAgOiAoR3JvdXAgMTEwIHBtX3Nub29wMikgU25vb3AgcmVhZCByZXRyeSBkdWUgdG8gY29sbGlzaW9uIHdpdGggYWN0aXZlIHJlYWQgcXVldWUKK2V2ZW50OjBYMDZFMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fU05PT1BfUkVUUllfMUFIRUFEX0dSUDExMCA6IChHcm91cCAxMTAgcG1fc25vb3AyKSBTbm9vcCByZXRyeSBkdWUgdG8gb25lIGFoZWFkIGNvbGxpc2lvbgorZXZlbnQ6MFgwNkUyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9TTk9PUF9SRF9SRVRSWV9XUV9HUlAxMTAgOiAoR3JvdXAgMTEwIHBtX3Nub29wMikgU25vb3AgcmVhZCByZXRyeSBkdWUgdG8gY29sbGlzaW9uIHdpdGggYWN0aXZlIHdyaXRlIHF1ZXVlCitldmVudDowWDA2RTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lPUFNfQ01QTF9HUlAxMTAgOiAoR3JvdXAgMTEwIHBtX3Nub29wMikgSW50ZXJuYWwgb3BlcmF0aW9ucyBjb21wbGV0ZWQKKworI0dyb3VwIDExMSBwbV9zbm9vcDMsIFNub29wIHdyaXRlIHJldHJ5CitldmVudDowWDA2RjAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1NOT09QX1dSX1JFVFJZX1JRX0dSUDExMSA6IChHcm91cCAxMTEgcG1fc25vb3AzKSBTbm9vcCB3cml0ZS9kY2xhaW0gcmV0cnkgZHVlIHRvIGNvbGxpc2lvbiB3aXRoIGFjdGl2ZSByZWFkIHF1ZXVlCitldmVudDowWDA2RjEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01FTV9ISV9QUklPX1dSX0NNUExfR1JQMTExIDogKEdyb3VwIDExMSBwbV9zbm9vcDMpIEhpZ2ggcHJpb3JpdHkgd3JpdGUgY29tcGxldGVkCitldmVudDowWDA2RjIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1NOT09QX1dSX1JFVFJZX1dRX0dSUDExMSA6IChHcm91cCAxMTEgcG1fc25vb3AzKSBTbm9vcCB3cml0ZS9kY2xhaW0gcmV0cnkgZHVlIHRvIGNvbGxpc2lvbiB3aXRoIGFjdGl2ZSB3cml0ZSBxdWV1ZQorZXZlbnQ6MFgwNkYzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NRU1fTE9fUFJJT19XUl9DTVBMX0dSUDExMSA6IChHcm91cCAxMTEgcG1fc25vb3AzKSBMb3cgcHJpb3JpdHkgd3JpdGUgY29tcGxldGVkCisKKyNHcm91cCAxMTIgcG1fc25vb3A0LCBTbm9vcCBwYXJ0aWFsIHdyaXRlIHJldHJ5CitldmVudDowWDA3MDAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1NOT09QX1BXX1JFVFJZX1JRX0dSUDExMiA6IChHcm91cCAxMTIgcG1fc25vb3A0KSBTbm9vcCBwYXJ0aWFsLXdyaXRlIHJldHJ5IGR1ZSB0byBjb2xsaXNpb24gd2l0aCBhY3RpdmUgcmVhZCBxdWV1ZQorZXZlbnQ6MFgwNzAxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NRU1fUlFfRElTUF9RMTZ0bzE5X0dSUDExMiA6IChHcm91cCAxMTIgcG1fc25vb3A0KSBNZW1vcnkgcmVhZCBxdWV1ZSBkaXNwYXRjaGVkIHRvIHF1ZXVlcyAxNi0xOQorZXZlbnQ6MFgwNzAyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9TTk9PUF9QV19SRVRSWV9XUV9QV1FfR1JQMTEyIDogKEdyb3VwIDExMiBwbV9zbm9vcDQpIFNub29wIHBhcnRpYWwtd3JpdGUgcmV0cnkgZHVlIHRvIGNvbGxpc2lvbiB3aXRoIGFjdGl2ZSB3cml0ZSBvciBwYXJ0aWFsLXdyaXRlIHF1ZXVlCitldmVudDowWDA3MDMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1NOT09QX1BXX1JFVFJZX1JRX0dSUDExMiA6IChHcm91cCAxMTIgcG1fc25vb3A0KSBTbm9vcCBwYXJ0aWFsLXdyaXRlIHJldHJ5IGR1ZSB0byBjb2xsaXNpb24gd2l0aCBhY3RpdmUgcmVhZCBxdWV1ZQorCisjR3JvdXAgMTEzIHBtX21lbV9ycSwgTWVtb3J5IHJlYWQgcXVldWUgZGlzcGF0Y2gKK2V2ZW50OjBYMDcxMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTUVNX1JRX0RJU1BfR1JQMTEzIDogKEdyb3VwIDExMyBwbV9tZW1fcnEpIE1lbW9yeSByZWFkIHF1ZXVlIGRpc3BhdGNoZWQKK2V2ZW50OjBYMDcxMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTUVNX1NQRUNfUkRfQ0FOQ0VMX0dSUDExMyA6IChHcm91cCAxMTMgcG1fbWVtX3JxKSBTcGVjdWxhdGl2ZSBtZW1vcnkgcmVhZCBjYW5jZWxsZWQKK2V2ZW50OjBYMDcxMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTUVNX05PTlNQRUNfUkRfQ0FOQ0VMX0dSUDExMyA6IChHcm91cCAxMTMgcG1fbWVtX3JxKSBOb24gc3BlY3VsYXRpdmUgbWVtb3J5IHJlYWQgY2FuY2VsbGVkCitldmVudDowWDA3MTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0VFX09GRl9FWFRfSU5UX0dSUDExMyA6IChHcm91cCAxMTMgcG1fbWVtX3JxKSBDeWNsZXMgTVNSKEVFKSBiaXQgb2ZmIGFuZCBleHRlcm5hbCBpbnRlcnJ1cHQgcGVuZGluZworCisjR3JvdXAgMTE0IHBtX21lbV9yZWFkLCBNZW1vcnkgcmVhZCBjb21wbGV0ZSBhbmQgY2FuY2VsCitldmVudDowWDA3MjAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01FTV9SUV9ESVNQX1EwdG8zX0dSUDExNCA6IChHcm91cCAxMTQgcG1fbWVtX3JlYWQpIE1lbW9yeSByZWFkIHF1ZXVlIGRpc3BhdGNoZWQgdG8gcXVldWVzIDAtMworZXZlbnQ6MFgwNzIxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NRU1fUlFfRElTUF9ROHRvMTFfR1JQMTE0IDogKEdyb3VwIDExNCBwbV9tZW1fcmVhZCkgTWVtb3J5IHJlYWQgcXVldWUgZGlzcGF0Y2hlZCB0byBxdWV1ZXMgOC0xMQorZXZlbnQ6MFgwNzIyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NRU1fUlFfRElTUF9RNHRvN19HUlAxMTQgOiAoR3JvdXAgMTE0IHBtX21lbV9yZWFkKSBNZW1vcnkgcmVhZCBxdWV1ZSBkaXNwYXRjaGVkIHRvIHF1ZXVlcyA0LTcKK2V2ZW50OjBYMDcyMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRVhUX0lOVF9HUlAxMTQgOiAoR3JvdXAgMTE0IHBtX21lbV9yZWFkKSBFeHRlcm5hbCBpbnRlcnJ1cHRzCisKKyNHcm91cCAxMTUgcG1fbWVtX3dxLCBNZW1vcnkgd3JpdGUgcXVldWUgZGlzcGF0Y2gKK2V2ZW50OjBYMDczMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTUVNX1dRX0RJU1BfV1JJVEVfR1JQMTE1IDogKEdyb3VwIDExNSBwbV9tZW1fd3EpIE1lbW9yeSB3cml0ZSBxdWV1ZSBkaXNwYXRjaGVkIGR1ZSB0byB3cml0ZQorZXZlbnQ6MFgwNzMxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NRU1fV1FfRElTUF9RMHRvN19HUlAxMTUgOiAoR3JvdXAgMTE1IHBtX21lbV93cSkgTWVtb3J5IHdyaXRlIHF1ZXVlIGRpc3BhdGNoZWQgdG8gcXVldWVzIDAtNworZXZlbnQ6MFgwNzMyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NRU1fV1FfRElTUF9EQ0xBSU1fR1JQMTE1IDogKEdyb3VwIDExNSBwbV9tZW1fd3EpIE1lbW9yeSB3cml0ZSBxdWV1ZSBkaXNwYXRjaGVkIGR1ZSB0byBkY2xhaW0vZmx1c2gKK2V2ZW50OjBYMDczMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTUVNX1dRX0RJU1BfUTh0bzE1X0dSUDExNSA6IChHcm91cCAxMTUgcG1fbWVtX3dxKSBNZW1vcnkgd3JpdGUgcXVldWUgZGlzcGF0Y2hlZCB0byBxdWV1ZXMgOC0xNQorCisjR3JvdXAgMTE2IHBtX21lbV9wd3EsIE1lbW9yeSBwYXJ0aWFsIHdyaXRlIHF1ZXVlCitldmVudDowWDA3NDAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01FTV9QV1FfRElTUF9HUlAxMTYgOiAoR3JvdXAgMTE2IHBtX21lbV9wd3EpIE1lbW9yeSBwYXJ0aWFsLXdyaXRlIHF1ZXVlIGRpc3BhdGNoZWQKK2V2ZW50OjBYMDc0MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTUVNX1BXX0NNUExfR1JQMTE2IDogKEdyb3VwIDExNiBwbV9tZW1fcHdxKSBNZW1vcnkgcGFydGlhbC13cml0ZSBjb21wbGV0ZWQKK2V2ZW50OjBYMDc0MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTUVNX1BXX0dBVEhfR1JQMTE2IDogKEdyb3VwIDExNiBwbV9tZW1fcHdxKSBNZW1vcnkgcGFydGlhbC13cml0ZSBnYXRoZXJlZAorZXZlbnQ6MFgwNzQzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NRU1fUFdRX0RJU1BfUTJvcjNfR1JQMTE2IDogKEdyb3VwIDExNiBwbV9tZW1fcHdxKSBNZW1vcnkgcGFydGlhbC13cml0ZSBxdWV1ZSBkaXNwYXRjaGVkIHRvIFdyaXRlIFF1ZXVlIDIgb3IgMworCisjR3JvdXAgMTE3IHBtX3RocmVzaG9sZCwgVGhyZXNob2xkaW5nCitldmVudDowWDA3NTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19HUlBfRElTUF9HUlAxMTcgOiAoR3JvdXAgMTE3IHBtX3RocmVzaG9sZCkgTWFya2VkIGdyb3VwIGRpc3BhdGNoZWQKK2V2ZW50OjBYMDc1MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0lNUl9SRUxPQURfR1JQMTE3IDogKEdyb3VwIDExNyBwbV90aHJlc2hvbGQpIE1hcmtlZCBJTVIgcmVsb2FkZWQKK2V2ZW50OjBYMDc1MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fVEhSRVNIX1RJTUVPX0dSUDExNyA6IChHcm91cCAxMTcgcG1fdGhyZXNob2xkKSBUaHJlc2hvbGQgdGltZW91dAorZXZlbnQ6MFgwNzUzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfTFNVX0ZJTl9HUlAxMTcgOiAoR3JvdXAgMTE3IHBtX3RocmVzaG9sZCkgTWFya2VkIGluc3RydWN0aW9uIExTVSBwcm9jZXNzaW5nIGZpbmlzaGVkCisKKyNHcm91cCAxMTggcG1fbXJrX2dycDEsIE1hcmtlZCBncm91cCBldmVudHMKK2V2ZW50OjBYMDc2MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0dSUF9ESVNQX0dSUDExOCA6IChHcm91cCAxMTggcG1fbXJrX2dycDEpIE1hcmtlZCBncm91cCBkaXNwYXRjaGVkCitldmVudDowWDA3NjEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19TVF9NSVNTX0wxX0dSUDExOCA6IChHcm91cCAxMTggcG1fbXJrX2dycDEpIE1hcmtlZCBMMSBEIGNhY2hlIHN0b3JlIG1pc3NlcworZXZlbnQ6MFgwNzYyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfSU5TVF9GSU5fR1JQMTE4IDogKEdyb3VwIDExOCBwbV9tcmtfZ3JwMSkgTWFya2VkIGluc3RydWN0aW9uIGZpbmlzaGVkCitldmVudDowWDA3NjMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19HUlBfQ01QTF9HUlAxMTggOiAoR3JvdXAgMTE4IHBtX21ya19ncnAxKSBNYXJrZWQgZ3JvdXAgY29tcGxldGVkCisKKyNHcm91cCAxMTkgcG1fbXJrX2dycDIsIE1hcmtlZCBncm91cCBldmVudHMKK2V2ZW50OjBYMDc3MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0dSUF9JU1NVRURfR1JQMTE5IDogKEdyb3VwIDExOSBwbV9tcmtfZ3JwMikgTWFya2VkIGdyb3VwIGlzc3VlZAorZXZlbnQ6MFgwNzcxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfQlJVX0ZJTl9HUlAxMTkgOiAoR3JvdXAgMTE5IHBtX21ya19ncnAyKSBNYXJrZWQgaW5zdHJ1Y3Rpb24gQlJVIHByb2Nlc3NpbmcgZmluaXNoZWQKK2V2ZW50OjBYMDc3MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0wxX1JFTE9BRF9WQUxJRF9HUlAxMTkgOiAoR3JvdXAgMTE5IHBtX21ya19ncnAyKSBNYXJrZWQgTDEgcmVsb2FkIGRhdGEgc291cmNlIHZhbGlkCitldmVudDowWDA3NzMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19HUlBfSUNfTUlTU19HUlAxMTkgOiAoR3JvdXAgMTE5IHBtX21ya19ncnAyKSBHcm91cCBleHBlcmllbmNlZCBtYXJrZWQgSSBjYWNoZSBtaXNzCisKKyNHcm91cCAxMjAgcG1fbXJrX2Rzb3VyY2UxLCBNYXJrZWQgZGF0YSBmcm9tIAorZXZlbnQ6MFgwNzgwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfREFUQV9GUk9NX0wyX0dSUDEyMCA6IChHcm91cCAxMjAgcG1fbXJrX2Rzb3VyY2UxKSBNYXJrZWQgZGF0YSBsb2FkZWQgZnJvbSBMMgorZXZlbnQ6MFgwNzgxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfREFUQV9GUk9NX0wyX0NZQ19HUlAxMjAgOiAoR3JvdXAgMTIwIHBtX21ya19kc291cmNlMSkgTWFya2VkIGxvYWQgbGF0ZW5jeSBmcm9tIEwyCitldmVudDowWDA3ODIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19EQVRBX0ZST01fTDI1X01PRF9HUlAxMjAgOiAoR3JvdXAgMTIwIHBtX21ya19kc291cmNlMSkgTWFya2VkIGRhdGEgbG9hZGVkIGZyb20gTDIuNSBtb2RpZmllZAorZXZlbnQ6MFgwNzgzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfREFUQV9GUk9NX0wyNV9NT0RfQ1lDX0dSUDEyMCA6IChHcm91cCAxMjAgcG1fbXJrX2Rzb3VyY2UxKSBNYXJrZWQgbG9hZCBsYXRlbmN5IGZyb20gTDIuNSBtb2RpZmllZAorCisjR3JvdXAgMTIxIHBtX21ya19kc291cmNlMiwgTWFya2VkIGRhdGEgZnJvbQorZXZlbnQ6MFgwNzkwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfREFUQV9GUk9NX0wyNV9TSFJfR1JQMTIxIDogKEdyb3VwIDEyMSBwbV9tcmtfZHNvdXJjZTIpIE1hcmtlZCBkYXRhIGxvYWRlZCBmcm9tIEwyLjUgc2hhcmVkCitldmVudDowWDA3OTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19EQVRBX0ZST01fTDI1X1NIUl9DWUNfR1JQMTIxIDogKEdyb3VwIDEyMSBwbV9tcmtfZHNvdXJjZTIpIE1hcmtlZCBsb2FkIGxhdGVuY3kgZnJvbSBMMi41IHNoYXJlZAorZXZlbnQ6MFgwNzkyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JT1BTX0NNUExfR1JQMTIxIDogKEdyb3VwIDEyMSBwbV9tcmtfZHNvdXJjZTIpIEludGVybmFsIG9wZXJhdGlvbnMgY29tcGxldGVkCitldmVudDowWDA3OTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVV9GSU5fR1JQMTIxIDogKEdyb3VwIDEyMSBwbV9tcmtfZHNvdXJjZTIpIEZQVSBwcm9kdWNlZCBhIHJlc3VsdAorCisjR3JvdXAgMTIyIHBtX21ya19kc291cmNlMywgTWFya2VkIGRhdGEgZnJvbQorZXZlbnQ6MFgwN0EwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfREFUQV9GUk9NX0wzX0dSUDEyMiA6IChHcm91cCAxMjIgcG1fbXJrX2Rzb3VyY2UzKSBNYXJrZWQgZGF0YSBsb2FkZWQgZnJvbSBMMworZXZlbnQ6MFgwN0ExIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfREFUQV9GUk9NX0wzX0NZQ19HUlAxMjIgOiAoR3JvdXAgMTIyIHBtX21ya19kc291cmNlMykgTWFya2VkIGxvYWQgbGF0ZW5jeSBmcm9tIEwzCitldmVudDowWDA3QTIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19EQVRBX0ZST01fTDM1X01PRF9HUlAxMjIgOiAoR3JvdXAgMTIyIHBtX21ya19kc291cmNlMykgTWFya2VkIGRhdGEgbG9hZGVkIGZyb20gTDMuNSBtb2RpZmllZAorZXZlbnQ6MFgwN0EzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfREFUQV9GUk9NX0wzNV9NT0RfQ1lDX0dSUDEyMiA6IChHcm91cCAxMjIgcG1fbXJrX2Rzb3VyY2UzKSBNYXJrZWQgbG9hZCBsYXRlbmN5IGZyb20gTDMuNSBtb2RpZmllZAorCisjR3JvdXAgMTIzIHBtX21ya19kc291cmNlNCwgTWFya2VkIGRhdGEgZnJvbQorZXZlbnQ6MFgwN0IwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfREFUQV9GUk9NX1JNRU1fR1JQMTIzIDogKEdyb3VwIDEyMyBwbV9tcmtfZHNvdXJjZTQpIE1hcmtlZCBkYXRhIGxvYWRlZCBmcm9tIHJlbW90ZSBtZW1vcnkKK2V2ZW50OjBYMDdCMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0RBVEFfRlJPTV9MMjc1X1NIUl9DWUNfR1JQMTIzIDogKEdyb3VwIDEyMyBwbV9tcmtfZHNvdXJjZTQpIE1hcmtlZCBsb2FkIGxhdGVuY3kgZnJvbSBMMi43NSBzaGFyZWQKK2V2ZW50OjBYMDdCMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0RBVEFfRlJPTV9MMjc1X1NIUl9HUlAxMjMgOiAoR3JvdXAgMTIzIHBtX21ya19kc291cmNlNCkgTWFya2VkIGRhdGEgbG9hZGVkIGZyb20gTDIuNzUgc2hhcmVkCitldmVudDowWDA3QjMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19EQVRBX0ZST01fUk1FTV9DWUNfR1JQMTIzIDogKEdyb3VwIDEyMyBwbV9tcmtfZHNvdXJjZTQpIE1hcmtlZCBsb2FkIGxhdGVuY3kgZnJvbSByZW1vdGUgbWVtb3J5CisKKyNHcm91cCAxMjQgcG1fbXJrX2Rzb3VyY2U1LCBNYXJrZWQgZGF0YSBmcm9tCitldmVudDowWDA3QzAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19EQVRBX0ZST01fTDM1X1NIUl9HUlAxMjQgOiAoR3JvdXAgMTI0IHBtX21ya19kc291cmNlNSkgTWFya2VkIGRhdGEgbG9hZGVkIGZyb20gTDMuNSBzaGFyZWQKK2V2ZW50OjBYMDdDMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0RBVEFfRlJPTV9MMzVfU0hSX0NZQ19HUlAxMjQgOiAoR3JvdXAgMTI0IHBtX21ya19kc291cmNlNSkgTWFya2VkIGxvYWQgbGF0ZW5jeSBmcm9tIEwzLjUgc2hhcmVkCitldmVudDowWDA3QzIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19EQVRBX0ZST01fTE1FTV9HUlAxMjQgOiAoR3JvdXAgMTI0IHBtX21ya19kc291cmNlNSkgTWFya2VkIGRhdGEgbG9hZGVkIGZyb20gbG9jYWwgbWVtb3J5CitldmVudDowWDA3QzMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19EQVRBX0ZST01fTE1FTV9DWUNfR1JQMTI0IDogKEdyb3VwIDEyNCBwbV9tcmtfZHNvdXJjZTUpIE1hcmtlZCBsb2FkIGxhdGVuY3kgZnJvbSBsb2NhbCBtZW1vcnkKKworI0dyb3VwIDEyNSBwbV9tcmtfZHNvdXJjZTYsIE1hcmtlZCBkYXRhIGZyb20KK2V2ZW50OjBYMDdEMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0RBVEFfRlJPTV9MMjc1X01PRF9HUlAxMjUgOiAoR3JvdXAgMTI1IHBtX21ya19kc291cmNlNikgTWFya2VkIGRhdGEgbG9hZGVkIGZyb20gTDIuNzUgbW9kaWZpZWQKK2V2ZW50OjBYMDdEMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0RBVEFfRlJPTV9MMjc1X1NIUl9DWUNfR1JQMTI1IDogKEdyb3VwIDEyNSBwbV9tcmtfZHNvdXJjZTYpIE1hcmtlZCBsb2FkIGxhdGVuY3kgZnJvbSBMMi43NSBzaGFyZWQKK2V2ZW50OjBYMDdEMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU9QU19DTVBMX0dSUDEyNSA6IChHcm91cCAxMjUgcG1fbXJrX2Rzb3VyY2U2KSBJbnRlcm5hbCBvcGVyYXRpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgwN0QzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfREFUQV9GUk9NX0wyNzVfTU9EX0NZQ19HUlAxMjUgOiAoR3JvdXAgMTI1IHBtX21ya19kc291cmNlNikgTWFya2VkIGxvYWQgbGF0ZW5jeSBmcm9tIEwyLjc1IG1vZGlmaWVkCisKKyNHcm91cCAxMjYgcG1fbXJrX2Rzb3VyY2U3LCBNYXJrZWQgZGF0YSBmcm9tCitldmVudDowWDA3RTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19EQVRBX0ZST01fTDM3NV9NT0RfR1JQMTI2IDogKEdyb3VwIDEyNiBwbV9tcmtfZHNvdXJjZTcpIE1hcmtlZCBkYXRhIGxvYWRlZCBmcm9tIEwzLjc1IG1vZGlmaWVkCitldmVudDowWDA3RTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19EQVRBX0ZST01fTDM3NV9TSFJfQ1lDX0dSUDEyNiA6IChHcm91cCAxMjYgcG1fbXJrX2Rzb3VyY2U3KSBNYXJrZWQgbG9hZCBsYXRlbmN5IGZyb20gTDMuNzUgc2hhcmVkCitldmVudDowWDA3RTIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19EQVRBX0ZST01fTDM3NV9TSFJfR1JQMTI2IDogKEdyb3VwIDEyNiBwbV9tcmtfZHNvdXJjZTcpIE1hcmtlZCBkYXRhIGxvYWRlZCBmcm9tIEwzLjc1IHNoYXJlZAorZXZlbnQ6MFgwN0UzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfREFUQV9GUk9NX0wzNzVfTU9EX0NZQ19HUlAxMjYgOiAoR3JvdXAgMTI2IHBtX21ya19kc291cmNlNykgTWFya2VkIGxvYWQgbGF0ZW5jeSBmcm9tIEwzLjc1IG1vZGlmaWVkCisKKyNHcm91cCAxMjcgcG1fbXJrX2R0bGJyZWYsIE1hcmtlZCBkYXRhIFRMQiByZWZlcmVuY2VzCitldmVudDowWDA3RjAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19EVExCX1JFRl80S19HUlAxMjcgOiAoR3JvdXAgMTI3IHBtX21ya19kdGxicmVmKSBNYXJrZWQgRGF0YSBUTEIgcmVmZXJlbmNlIGZvciA0SyBwYWdlCitldmVudDowWDA3RjEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19EVExCX1JFRl82NEtfR1JQMTI3IDogKEdyb3VwIDEyNyBwbV9tcmtfZHRsYnJlZikgTWFya2VkIERhdGEgVExCIHJlZmVyZW5jZSBmb3IgNjRLIHBhZ2UKK2V2ZW50OjBYMDdGMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0RUTEJfUkVGXzE2TV9HUlAxMjcgOiAoR3JvdXAgMTI3IHBtX21ya19kdGxicmVmKSBNYXJrZWQgRGF0YSBUTEIgcmVmZXJlbmNlIGZvciAxNk0gcGFnZQorZXZlbnQ6MFgwN0YzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfRFRMQl9SRUZfMTZHX0dSUDEyNyA6IChHcm91cCAxMjcgcG1fbXJrX2R0bGJyZWYpIE1hcmtlZCBEYXRhIFRMQiByZWZlcmVuY2UgZm9yIDE2RyBwYWdlCisKKyNHcm91cCAxMjggcG1fbXJrX2R0bGJtaXNzLCBNYXJrZWQgZGF0YSBUTEIgbWlzc2VzCitldmVudDowWDA4MDAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19EVExCX01JU1NfNEtfR1JQMTI4IDogKEdyb3VwIDEyOCBwbV9tcmtfZHRsYm1pc3MpIE1hcmtlZCBEYXRhIFRMQiBtaXNzZXMgZm9yIDRLIHBhZ2UKK2V2ZW50OjBYMDgwMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0RUTEJfTUlTU182NEtfR1JQMTI4IDogKEdyb3VwIDEyOCBwbV9tcmtfZHRsYm1pc3MpIE1hcmtlZCBEYXRhIFRMQiBtaXNzZXMgZm9yIDY0SyBwYWdlCitldmVudDowWDA4MDIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19EVExCX01JU1NfMTZNX0dSUDEyOCA6IChHcm91cCAxMjggcG1fbXJrX2R0bGJtaXNzKSBNYXJrZWQgRGF0YSBUTEIgbWlzc2VzIGZvciAxNk0gcGFnZQorZXZlbnQ6MFgwODAzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfRFRMQl9NSVNTXzE2R19HUlAxMjggOiAoR3JvdXAgMTI4IHBtX21ya19kdGxibWlzcykgTWFya2VkIERhdGEgVExCIG1pc3NlcyBmb3IgMTZHIHBhZ2UKKworI0dyb3VwIDEyOSBwbV9tcmtfZHRsYl9kc2xiLCBNYXJrZWQgZGF0YSBUTEIgcmVmZXJlbmNlcyBhbmQgbWlzc2VzIGFuZCBtYXJrZWQgZGF0YSBTTEIgbWlzc2VzCitldmVudDowWDA4MTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19EVExCX1JFRl9HUlAxMjkgOiAoR3JvdXAgMTI5IHBtX21ya19kdGxiX2RzbGIpIE1hcmtlZCBEYXRhIFRMQiByZWZlcmVuY2UKK2V2ZW50OjBYMDgxMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0RUTEJfTUlTU19HUlAxMjkgOiAoR3JvdXAgMTI5IHBtX21ya19kdGxiX2RzbGIpIE1hcmtlZCBEYXRhIFRMQiBtaXNzZXMKK2V2ZW50OjBYMDgxMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0RTTEJfTUlTU19HUlAxMjkgOiAoR3JvdXAgMTI5IHBtX21ya19kdGxiX2RzbGIpIE1hcmtlZCBEYXRhIFNMQiBtaXNzZXMKK2V2ZW50OjBYMDgxMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlAxMjkgOiAoR3JvdXAgMTI5IHBtX21ya19kdGxiX2RzbGIpIFByb2Nlc3NvciBjeWNsZXMKKworI0dyb3VwIDEzMCBwbV9tcmtfbGJyZWYsIE1hcmtlZCBUTEIgYW5kIFNMQiByZWZlcmVuY2VzCitldmVudDowWDA4MjAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19EVExCX1JFRl80S19HUlAxMzAgOiAoR3JvdXAgMTMwIHBtX21ya19sYnJlZikgTWFya2VkIERhdGEgVExCIHJlZmVyZW5jZSBmb3IgNEsgcGFnZQorZXZlbnQ6MFgwODIxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JT1BTX0NNUExfR1JQMTMwIDogKEdyb3VwIDEzMCBwbV9tcmtfbGJyZWYpIEludGVybmFsIG9wZXJhdGlvbnMgY29tcGxldGVkCitldmVudDowWDA4MjIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19EVExCX1JFRl8xNk1fR1JQMTMwIDogKEdyb3VwIDEzMCBwbV9tcmtfbGJyZWYpIE1hcmtlZCBEYXRhIFRMQiByZWZlcmVuY2UgZm9yIDE2TSBwYWdlCitldmVudDowWDA4MjMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19EU0xCX01JU1NfR1JQMTMwIDogKEdyb3VwIDEzMCBwbV9tcmtfbGJyZWYpIE1hcmtlZCBEYXRhIFNMQiBtaXNzZXMKKworI0dyb3VwIDEzMSBwbV9tcmtfbHNtaXNzLCBNYXJrZWQgbG9hZCBhbmQgc3RvcmUgbWlzcworZXZlbnQ6MFgwODMwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfTERfTUlTU19MMV9HUlAxMzEgOiAoR3JvdXAgMTMxIHBtX21ya19sc21pc3MpIE1hcmtlZCBMMSBEIGNhY2hlIGxvYWQgbWlzc2VzCitldmVudDowWDA4MzEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lPUFNfQ01QTF9HUlAxMzEgOiAoR3JvdXAgMTMxIHBtX21ya19sc21pc3MpIEludGVybmFsIG9wZXJhdGlvbnMgY29tcGxldGVkCitldmVudDowWDA4MzIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19TVF9DTVBMX0lOVF9HUlAxMzEgOiAoR3JvdXAgMTMxIHBtX21ya19sc21pc3MpIE1hcmtlZCBzdG9yZSBjb21wbGV0ZWQgd2l0aCBpbnRlcnZlbnRpb24KK2V2ZW50OjBYMDgzMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0NSVV9GSU5fR1JQMTMxIDogKEdyb3VwIDEzMSBwbV9tcmtfbHNtaXNzKSBNYXJrZWQgaW5zdHJ1Y3Rpb24gQ1JVIHByb2Nlc3NpbmcgZmluaXNoZWQKKworI0dyb3VwIDEzMiBwbV9tcmtfdWxzZmx1c2gsIE1hcmsgdW5hbGlnbmVkIGxvYWQgYW5kIHN0b3JlIGZsdXNoZXMKK2V2ZW50OjBYMDg0MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX1NUX0NNUExfR1JQMTMyIDogKEdyb3VwIDEzMiBwbV9tcmtfdWxzZmx1c2gpIE1hcmtlZCBzdG9yZSBpbnN0cnVjdGlvbiBjb21wbGV0ZWQKK2V2ZW50OjBYMDg0MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX1NUX01JU1NfTDFfR1JQMTMyIDogKEdyb3VwIDEzMiBwbV9tcmtfdWxzZmx1c2gpIE1hcmtlZCBMMSBEIGNhY2hlIHN0b3JlIG1pc3NlcworZXZlbnQ6MFgwODQyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfTFNVX0ZMVVNIX1VTVF9HUlAxMzIgOiAoR3JvdXAgMTMyIHBtX21ya191bHNmbHVzaCkgTWFya2VkIHVuYWxpZ25lZCBzdG9yZSBmbHVzaGVzCitldmVudDowWDA4NDMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19MU1VfRkxVU0hfVUxEX0dSUDEzMiA6IChHcm91cCAxMzIgcG1fbXJrX3Vsc2ZsdXNoKSBNYXJrZWQgdW5hbGlnbmVkIGxvYWQgZmx1c2hlcworCisjR3JvdXAgMTMzIHBtX21ya19taXNjLCBNaXNjIG1hcmtlZCBpbnN0cnVjdGlvbnMKK2V2ZW50OjBYMDg1MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX1NUQ1hfRkFJTF9HUlAxMzMgOiAoR3JvdXAgMTMzIHBtX21ya19taXNjKSBNYXJrZWQgU1RDWCBmYWlsZWQKK2V2ZW50OjBYMDg1MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX1NUX0dQU19HUlAxMzMgOiAoR3JvdXAgMTMzIHBtX21ya19taXNjKSBNYXJrZWQgc3RvcmUgc2VudCB0byBHUFMKK2V2ZW50OjBYMDg1MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0ZQVV9GSU5fR1JQMTMzIDogKEdyb3VwIDEzMyBwbV9tcmtfbWlzYykgTWFya2VkIGluc3RydWN0aW9uIEZQVSBwcm9jZXNzaW5nIGZpbmlzaGVkCitldmVudDowWDA4NTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19HUlBfVElNRU9fR1JQMTMzIDogKEdyb3VwIDEzMyBwbV9tcmtfbWlzYykgTWFya2VkIGdyb3VwIGNvbXBsZXRpb24gdGltZW91dAorCisjR3JvdXAgMTM0IHBtX2xzcmVmX0wxLCBMb2FkL1N0b3JlIG9wZXJhdGlvbnMgYW5kIEwxIGFjdGl2aXR5CitldmVudDowWDA4NjAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RBVEFfRlJPTV9MMl9HUlAxMzQgOiAoR3JvdXAgMTM0IHBtX2xzcmVmX0wxKSBEYXRhIGxvYWRlZCBmcm9tIEwyCitldmVudDowWDA4NjEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lOU1RfRlJPTV9MMV9HUlAxMzQgOiAoR3JvdXAgMTM0IHBtX2xzcmVmX0wxKSBJbnN0cnVjdGlvbiBmZXRjaGVkIGZyb20gTDEKK2V2ZW50OjBYMDg2MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fU1RfUkVGX0wxX0dSUDEzNCA6IChHcm91cCAxMzQgcG1fbHNyZWZfTDEpIEwxIEQgY2FjaGUgc3RvcmUgcmVmZXJlbmNlcworZXZlbnQ6MFgwODYzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MRF9SRUZfTDFfR1JQMTM0IDogKEdyb3VwIDEzNCBwbV9sc3JlZl9MMSkgTDEgRCBjYWNoZSBsb2FkIHJlZmVyZW5jZXMKKworI0dyb3VwIDEzNSBwbV9sc3JlZl9MMkwzLCBMb2FkL1N0b3JlIG9wZXJhdGlvbnMgYW5kIEwyLCBMMyBhY3Rpdml0eQorZXZlbnQ6MFgwODcwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQVRBX0ZST01fTDNfR1JQMTM1IDogKEdyb3VwIDEzNSBwbV9sc3JlZl9MMkwzKSBEYXRhIGxvYWRlZCBmcm9tIEwzCitldmVudDowWDA4NzEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RBVEFfRlJPTV9MTUVNX0dSUDEzNSA6IChHcm91cCAxMzUgcG1fbHNyZWZfTDJMMykgRGF0YSBsb2FkZWQgZnJvbSBsb2NhbCBtZW1vcnkKK2V2ZW50OjBYMDg3MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fU1RfUkVGX0wxX0dSUDEzNSA6IChHcm91cCAxMzUgcG1fbHNyZWZfTDJMMykgTDEgRCBjYWNoZSBzdG9yZSByZWZlcmVuY2VzCitldmVudDowWDA4NzMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xEX1JFRl9MMV9HUlAxMzUgOiAoR3JvdXAgMTM1IHBtX2xzcmVmX0wyTDMpIEwxIEQgY2FjaGUgbG9hZCByZWZlcmVuY2VzCisKKyNHcm91cCAxMzYgcG1fbHNyZWZfdGxibWlzcywgTG9hZC9TdG9yZSBvcGVyYXRpb25zIGFuZCBUTEIgbWlzc2VzCitldmVudDowWDA4ODAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lUTEJfTUlTU19HUlAxMzYgOiAoR3JvdXAgMTM2IHBtX2xzcmVmX3RsYm1pc3MpIEluc3RydWN0aW9uIFRMQiBtaXNzZXMKK2V2ZW50OjBYMDg4MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRFRMQl9NSVNTX0dSUDEzNiA6IChHcm91cCAxMzYgcG1fbHNyZWZfdGxibWlzcykgRGF0YSBUTEIgbWlzc2VzCitldmVudDowWDA4ODIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1NUX1JFRl9MMV9HUlAxMzYgOiAoR3JvdXAgMTM2IHBtX2xzcmVmX3RsYm1pc3MpIEwxIEQgY2FjaGUgc3RvcmUgcmVmZXJlbmNlcworZXZlbnQ6MFgwODgzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MRF9SRUZfTDFfR1JQMTM2IDogKEdyb3VwIDEzNiBwbV9sc3JlZl90bGJtaXNzKSBMMSBEIGNhY2hlIGxvYWQgcmVmZXJlbmNlcworCisjR3JvdXAgMTM3IHBtX0RtaXNzLCBEYXRhIGNhY2hlIG1pc3NlcworZXZlbnQ6MFgwODkwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQVRBX0ZST01fTDNfR1JQMTM3IDogKEdyb3VwIDEzNyBwbV9EbWlzcykgRGF0YSBsb2FkZWQgZnJvbSBMMworZXZlbnQ6MFgwODkxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQVRBX0ZST01fTE1FTV9HUlAxMzcgOiAoR3JvdXAgMTM3IHBtX0RtaXNzKSBEYXRhIGxvYWRlZCBmcm9tIGxvY2FsIG1lbW9yeQorZXZlbnQ6MFgwODkyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MRF9NSVNTX0wxX0dSUDEzNyA6IChHcm91cCAxMzcgcG1fRG1pc3MpIEwxIEQgY2FjaGUgbG9hZCBtaXNzZXMKK2V2ZW50OjBYMDg5MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fU1RfTUlTU19MMV9HUlAxMzcgOiAoR3JvdXAgMTM3IHBtX0RtaXNzKSBMMSBEIGNhY2hlIHN0b3JlIG1pc3NlcworCisjR3JvdXAgMTM4IHBtX3ByZWZldGNoWCwgUHJlZmV0Y2ggZXZlbnRzCitldmVudDowWDA4QTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQMTM4IDogKEdyb3VwIDEzOCBwbV9wcmVmZXRjaFgpIFByb2Nlc3NvciBjeWNsZXMKK2V2ZW50OjBYMDhBMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSUNfUFJFRl9SRVFfR1JQMTM4IDogKEdyb3VwIDEzOCBwbV9wcmVmZXRjaFgpIEluc3RydWN0aW9uIHByZWZldGNoIHJlcXVlc3RzCitldmVudDowWDA4QTIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wxX1BSRUZfR1JQMTM4IDogKEdyb3VwIDEzOCBwbV9wcmVmZXRjaFgpIEwxIGNhY2hlIGRhdGEgcHJlZmV0Y2hlcworZXZlbnQ6MFgwOEEzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMl9QUkVGX0dSUDEzOCA6IChHcm91cCAxMzggcG1fcHJlZmV0Y2hYKSBMMiBjYWNoZSBwcmVmZXRjaGVzCisKKyNHcm91cCAxMzkgcG1fYnJhbmNoWCwgQnJhbmNoIG9wZXJhdGlvbnMKK2V2ZW50OjBYMDhCMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fQlJfVU5DT05EX0dSUDEzOSA6IChHcm91cCAxMzkgcG1fYnJhbmNoWCkgVW5jb25kaXRpb25hbCBicmFuY2gKK2V2ZW50OjBYMDhCMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fQlJfUFJFRF9UQV9HUlAxMzkgOiAoR3JvdXAgMTM5IHBtX2JyYW5jaFgpIEEgY29uZGl0aW9uYWwgYnJhbmNoIHdhcyBwcmVkaWN0ZWQsIHRhcmdldCBwcmVkaWN0aW9uCitldmVudDowWDA4QjIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0JSX1BSRURfQ1JfR1JQMTM5IDogKEdyb3VwIDEzOSBwbV9icmFuY2hYKSBBIGNvbmRpdGlvbmFsIGJyYW5jaCB3YXMgcHJlZGljdGVkLCBDUiBwcmVkaWN0aW9uCitldmVudDowWDA4QjMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0JSX0lTU1VFRF9HUlAxMzkgOiAoR3JvdXAgMTM5IHBtX2JyYW5jaFgpIEJyYW5jaGVzIGlzc3VlZAorCisjR3JvdXAgMTQwIHBtX2ZwdVgxLCBGbG9hdGluZyBwb2ludCBldmVudHMgYnkgdW5pdAorZXZlbnQ6MFgwOEMwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFUwX1NUQUxMM19HUlAxNDAgOiAoR3JvdXAgMTQwIHBtX2ZwdVgxKSBGUFUwIHN0YWxsZWQgaW4gcGlwZTMKK2V2ZW50OjBYMDhDMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVMV9TVEFMTDNfR1JQMTQwIDogKEdyb3VwIDE0MCBwbV9mcHVYMSkgRlBVMSBzdGFsbGVkIGluIHBpcGUzCitldmVudDowWDA4QzIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVTBfRklOX0dSUDE0MCA6IChHcm91cCAxNDAgcG1fZnB1WDEpIEZQVTAgcHJvZHVjZWQgYSByZXN1bHQKK2V2ZW50OjBYMDhDMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVMF9GUFNDUl9HUlAxNDAgOiAoR3JvdXAgMTQwIHBtX2ZwdVgxKSBGUFUwIGV4ZWN1dGVkIEZQU0NSIGluc3RydWN0aW9uCisKKyNHcm91cCAxNDEgcG1fZnB1WDIsIEZsb2F0aW5nIHBvaW50IGV2ZW50cyBieSB1bml0CitldmVudDowWDA4RDAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVTBfRk1BX0dSUDE0MSA6IChHcm91cCAxNDEgcG1fZnB1WDIpIEZQVTAgZXhlY3V0ZWQgbXVsdGlwbHktYWRkIGluc3RydWN0aW9uCitldmVudDowWDA4RDEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVTFfRk1BX0dSUDE0MSA6IChHcm91cCAxNDEgcG1fZnB1WDIpIEZQVTEgZXhlY3V0ZWQgbXVsdGlwbHktYWRkIGluc3RydWN0aW9uCitldmVudDowWDA4RDIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVTBfRlJTUF9GQ09OVl9HUlAxNDEgOiAoR3JvdXAgMTQxIHBtX2ZwdVgyKSBGUFUwIGV4ZWN1dGVkIEZSU1Agb3IgRkNPTlYgaW5zdHJ1Y3Rpb25zCitldmVudDowWDA4RDMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVTFfRlJTUF9GQ09OVl9HUlAxNDEgOiAoR3JvdXAgMTQxIHBtX2ZwdVgyKSBGUFUxIGV4ZWN1dGVkIEZSU1Agb3IgRkNPTlYgaW5zdHJ1Y3Rpb25zCisKKyNHcm91cCAxNDIgcG1fZnB1WDMsIEZsb2F0aW5nIHBvaW50IGV2ZW50cyBieSB1bml0CitldmVudDowWDA4RTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVTBfMUZMT1BfR1JQMTQyIDogKEdyb3VwIDE0MiBwbV9mcHVYMykgRlBVMCBleGVjdXRlZCBhZGQsIG11bHQsIHN1YiwgY21wIG9yIHNlbCBpbnN0cnVjdGlvbgorZXZlbnQ6MFgwOEUxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFUxXzFGTE9QX0dSUDE0MiA6IChHcm91cCAxNDIgcG1fZnB1WDMpIEZQVTEgZXhlY3V0ZWQgYWRkLCBtdWx0LCBzdWIsIGNtcCBvciBzZWwgaW5zdHJ1Y3Rpb24KK2V2ZW50OjBYMDhFMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVMF9GSU5fR1JQMTQyIDogKEdyb3VwIDE0MiBwbV9mcHVYMykgRlBVMCBwcm9kdWNlZCBhIHJlc3VsdAorZXZlbnQ6MFgwOEUzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFUxX0ZJTl9HUlAxNDIgOiAoR3JvdXAgMTQyIHBtX2ZwdVgzKSBGUFUxIHByb2R1Y2VkIGEgcmVzdWx0CisKKyNHcm91cCAxNDMgcG1fZnB1WDQsIEZsb2F0aW5nIHBvaW50IGFuZCBMMSBldmVudHMKK2V2ZW50OjBYMDhGMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVXzFGTE9QX0dSUDE0MyA6IChHcm91cCAxNDMgcG1fZnB1WDQpIEZQVSBleGVjdXRlZCBvbmUgZmxvcCBpbnN0cnVjdGlvbgorZXZlbnQ6MFgwOEYxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFVfRk1BX0dSUDE0MyA6IChHcm91cCAxNDMgcG1fZnB1WDQpIEZQVSBleGVjdXRlZCBtdWx0aXBseS1hZGQgaW5zdHJ1Y3Rpb24KK2V2ZW50OjBYMDhGMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fU1RfUkVGX0wxX0dSUDE0MyA6IChHcm91cCAxNDMgcG1fZnB1WDQpIEwxIEQgY2FjaGUgc3RvcmUgcmVmZXJlbmNlcworZXZlbnQ6MFgwOEYzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MRF9SRUZfTDFfR1JQMTQzIDogKEdyb3VwIDE0MyBwbV9mcHVYNCkgTDEgRCBjYWNoZSBsb2FkIHJlZmVyZW5jZXMKKworI0dyb3VwIDE0NCBwbV9mcHVYNSwgRmxvYXRpbmcgcG9pbnQgZXZlbnRzCitldmVudDowWDA5MDAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVV9TSU5HTEVfR1JQMTQ0IDogKEdyb3VwIDE0NCBwbV9mcHVYNSkgRlBVIGV4ZWN1dGVkIHNpbmdsZSBwcmVjaXNpb24gaW5zdHJ1Y3Rpb24KK2V2ZW50OjBYMDkwMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVX1NURl9HUlAxNDQgOiAoR3JvdXAgMTQ0IHBtX2ZwdVg1KSBGUFUgZXhlY3V0ZWQgc3RvcmUgaW5zdHJ1Y3Rpb24KK2V2ZW50OjBYMDkwMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVMF9GSU5fR1JQMTQ0IDogKEdyb3VwIDE0NCBwbV9mcHVYNSkgRlBVMCBwcm9kdWNlZCBhIHJlc3VsdAorZXZlbnQ6MFgwOTAzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFUxX0ZJTl9HUlAxNDQgOiAoR3JvdXAgMTQ0IHBtX2ZwdVg1KSBGUFUxIHByb2R1Y2VkIGEgcmVzdWx0CisKKyNHcm91cCAxNDUgcG1fZnB1WDYsIEZsb2F0aW5nIHBvaW50IGV2ZW50cworZXZlbnQ6MFgwOTEwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFVfRkRJVl9HUlAxNDUgOiAoR3JvdXAgMTQ1IHBtX2ZwdVg2KSBGUFUgZXhlY3V0ZWQgRkRJViBpbnN0cnVjdGlvbgorZXZlbnQ6MFgwOTExIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFVfRlNRUlRfR1JQMTQ1IDogKEdyb3VwIDE0NSBwbV9mcHVYNikgRlBVIGV4ZWN1dGVkIEZTUVJUIGluc3RydWN0aW9uCitldmVudDowWDA5MTIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVV9GUlNQX0ZDT05WX0dSUDE0NSA6IChHcm91cCAxNDUgcG1fZnB1WDYpIEZQVSBleGVjdXRlZCBGUlNQIG9yIEZDT05WIGluc3RydWN0aW9ucworZXZlbnQ6MFgwOTEzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFVfRklOX0dSUDE0NSA6IChHcm91cCAxNDUgcG1fZnB1WDYpIEZQVSBwcm9kdWNlZCBhIHJlc3VsdAorCisjR3JvdXAgMTQ2IHBtX2ZwdVg3LCBGbG9hdGluZyBwb2ludCBldmVudHMKK2V2ZW50OjBYMDkyMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVXzFGTE9QX0dSUDE0NiA6IChHcm91cCAxNDYgcG1fZnB1WDcpIEZQVSBleGVjdXRlZCBvbmUgZmxvcCBpbnN0cnVjdGlvbgorZXZlbnQ6MFgwOTIxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFVfRk1BX0dSUDE0NiA6IChHcm91cCAxNDYgcG1fZnB1WDcpIEZQVSBleGVjdXRlZCBtdWx0aXBseS1hZGQgaW5zdHJ1Y3Rpb24KK2V2ZW50OjBYMDkyMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVX1NURl9HUlAxNDYgOiAoR3JvdXAgMTQ2IHBtX2ZwdVg3KSBGUFUgZXhlY3V0ZWQgc3RvcmUgaW5zdHJ1Y3Rpb24KK2V2ZW50OjBYMDkyMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVX0ZJTl9HUlAxNDYgOiAoR3JvdXAgMTQ2IHBtX2ZwdVg3KSBGUFUgcHJvZHVjZWQgYSByZXN1bHQKKworI0dyb3VwIDE0NyBwbV9ocG1jb3VudDgsIEhQTSBncm91cCBmb3Igc2V0IDkgCitldmVudDowWDA5MzAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQMTQ3IDogKEdyb3VwIDE0NyBwbV9ocG1jb3VudDgpIFByb2Nlc3NvciBjeWNsZXMKK2V2ZW50OjBYMDkzMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0ZYVV9GSU5fR1JQMTQ3IDogKEdyb3VwIDE0NyBwbV9ocG1jb3VudDgpIE1hcmtlZCBpbnN0cnVjdGlvbiBGWFUgcHJvY2Vzc2luZyBmaW5pc2hlZAorZXZlbnQ6MFgwOTMyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDE0NyA6IChHcm91cCAxNDcgcG1faHBtY291bnQ4KSBQcm9jZXNzb3IgY3ljbGVzCitldmVudDowWDA5MzMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVV9GSU5fR1JQMTQ3IDogKEdyb3VwIDE0NyBwbV9ocG1jb3VudDgpIEZQVSBwcm9kdWNlZCBhIHJlc3VsdAorCisjR3JvdXAgMTQ4IHBtX2hwbWNvdW50MiwgSFBNIGdyb3VwIGZvciBzZXQgMgorZXZlbnQ6MFgwOTQwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDE0OCA6IChHcm91cCAxNDggcG1faHBtY291bnQyKSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDA5NDEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVV9TVEZfR1JQMTQ4IDogKEdyb3VwIDE0OCBwbV9ocG1jb3VudDIpIEZQVSBleGVjdXRlZCBzdG9yZSBpbnN0cnVjdGlvbgorZXZlbnQ6MFgwOTQyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JTlNUX0RJU1BfR1JQMTQ4IDogKEdyb3VwIDE0OCBwbV9ocG1jb3VudDIpIEluc3RydWN0aW9ucyBkaXNwYXRjaGVkCitldmVudDowWDA5NDMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9MREZfR1JQMTQ4IDogKEdyb3VwIDE0OCBwbV9ocG1jb3VudDIpIExTVSBleGVjdXRlZCBGbG9hdGluZyBQb2ludCBsb2FkIGluc3RydWN0aW9uCisKKyNHcm91cCAxNDkgcG1faHBtY291bnQzLCBIUE0gZ3JvdXAgZm9yIHNldCAzIAorZXZlbnQ6MFgwOTUwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDE0OSA6IChHcm91cCAxNDkgcG1faHBtY291bnQzKSBQcm9jZXNzb3IgY3ljbGVzCitldmVudDowWDA5NTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lOU1RfRElTUF9BVFRFTVBUX0dSUDE0OSA6IChHcm91cCAxNDkgcG1faHBtY291bnQzKSBJbnN0cnVjdGlvbnMgZGlzcGF0Y2ggYXR0ZW1wdGVkCitldmVudDowWDA5NTIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xEX01JU1NfTDFfR1JQMTQ5IDogKEdyb3VwIDE0OSBwbV9ocG1jb3VudDMpIEwxIEQgY2FjaGUgbG9hZCBtaXNzZXMKK2V2ZW50OjBYMDk1MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fU1RfTUlTU19MMV9HUlAxNDkgOiAoR3JvdXAgMTQ5IHBtX2hwbWNvdW50MykgTDEgRCBjYWNoZSBzdG9yZSBtaXNzZXMKKworI0dyb3VwIDE1MCBwbV9ocG1jb3VudDQsIEhQTSBncm91cCBmb3Igc2V0IDcKK2V2ZW50OjBYMDk2MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fVExCX01JU1NfR1JQMTUwIDogKEdyb3VwIDE1MCBwbV9ocG1jb3VudDQpIFRMQiBtaXNzZXMKK2V2ZW50OjBYMDk2MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlAxNTAgOiAoR3JvdXAgMTUwIHBtX2hwbWNvdW50NCkgUHJvY2Vzc29yIGN5Y2xlcworZXZlbnQ6MFgwOTYyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9TVF9SRUZfTDFfR1JQMTUwIDogKEdyb3VwIDE1MCBwbV9ocG1jb3VudDQpIEwxIEQgY2FjaGUgc3RvcmUgcmVmZXJlbmNlcworZXZlbnQ6MFgwOTYzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MRF9SRUZfTDFfR1JQMTUwIDogKEdyb3VwIDE1MCBwbV9ocG1jb3VudDQpIEwxIEQgY2FjaGUgbG9hZCByZWZlcmVuY2VzCisKKyNHcm91cCAxNTEgcG1fZmxvcCwgRmxvYXRpbmcgcG9pbnQgb3BlcmF0aW9ucworZXZlbnQ6MFgwOTcwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFVfRkRJVl9HUlAxNTEgOiAoR3JvdXAgMTUxIHBtX2Zsb3ApIEZQVSBleGVjdXRlZCBGRElWIGluc3RydWN0aW9uCitldmVudDowWDA5NzEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVV9GTUFfR1JQMTUxIDogKEdyb3VwIDE1MSBwbV9mbG9wKSBGUFUgZXhlY3V0ZWQgbXVsdGlwbHktYWRkIGluc3RydWN0aW9uCitldmVudDowWDA5NzIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVV9GU1FSVF9HUlAxNTEgOiAoR3JvdXAgMTUxIHBtX2Zsb3ApIEZQVSBleGVjdXRlZCBGU1FSVCBpbnN0cnVjdGlvbgorZXZlbnQ6MFgwOTczIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFVfMUZMT1BfR1JQMTUxIDogKEdyb3VwIDE1MSBwbV9mbG9wKSBGUFUgZXhlY3V0ZWQgb25lIGZsb3AgaW5zdHJ1Y3Rpb24KKworI0dyb3VwIDE1MiBwbV9lcHJvZjEsIEdyb3VwIGZvciB1c2Ugd2l0aCBlcHJvZgorZXZlbnQ6MFgwOTgwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDE1MiA6IChHcm91cCAxNTIgcG1fZXByb2YxKSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDA5ODEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQMTUyIDogKEdyb3VwIDE1MiBwbV9lcHJvZjEpIFByb2Nlc3NvciBjeWNsZXMKK2V2ZW50OjBYMDk4MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTERfTUlTU19MMV9HUlAxNTIgOiAoR3JvdXAgMTUyIHBtX2Vwcm9mMSkgTDEgRCBjYWNoZSBsb2FkIG1pc3NlcworZXZlbnQ6MFgwOTgzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQ19JTlZfTDJfR1JQMTUyIDogKEdyb3VwIDE1MiBwbV9lcHJvZjEpIEwxIEQgY2FjaGUgZW50cmllcyBpbnZhbGlkYXRlZCBmcm9tIEwyCisKKyNHcm91cCAxNTMgcG1fZXByb2YyLCBHcm91cCBmb3IgdXNlIHdpdGggZXByb2YKK2V2ZW50OjBYMDk5MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAxNTMgOiAoR3JvdXAgMTUzIHBtX2Vwcm9mMikgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgwOTkxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9TVF9SRUZfTDFfR1JQMTUzIDogKEdyb3VwIDE1MyBwbV9lcHJvZjIpIEwxIEQgY2FjaGUgc3RvcmUgcmVmZXJlbmNlcworZXZlbnQ6MFgwOTkyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JTlNUX0RJU1BfR1JQMTUzIDogKEdyb3VwIDE1MyBwbV9lcHJvZjIpIEluc3RydWN0aW9ucyBkaXNwYXRjaGVkCitldmVudDowWDA5OTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xEX1JFRl9MMV9HUlAxNTMgOiAoR3JvdXAgMTUzIHBtX2Vwcm9mMikgTDEgRCBjYWNoZSBsb2FkIHJlZmVyZW5jZXMKKworI0dyb3VwIDE1NCBwbV9mbGlwLCBHcm91cCBmb3IgZmxpcHMKK2V2ZW50OjBYMDlBMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlAxNTQgOiAoR3JvdXAgMTU0IHBtX2ZsaXApIFByb2Nlc3NvciBjeWNsZXMKK2V2ZW50OjBYMDlBMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVX0ZNQV9HUlAxNTQgOiAoR3JvdXAgMTU0IHBtX2ZsaXApIEZQVSBleGVjdXRlZCBtdWx0aXBseS1hZGQgaW5zdHJ1Y3Rpb24KK2V2ZW50OjBYMDlBMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVX1NURl9HUlAxNTQgOiAoR3JvdXAgMTU0IHBtX2ZsaXApIEZQVSBleGVjdXRlZCBzdG9yZSBpbnN0cnVjdGlvbgorZXZlbnQ6MFgwOUEzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFVfRklOX0dSUDE1NCA6IChHcm91cCAxNTQgcG1fZmxpcCkgRlBVIHByb2R1Y2VkIGEgcmVzdWx0CisKKyNHcm91cCAxNTUgcG1faHBtY291bnQ1LCBIUE0gZ3JvdXAgZm9yIHNldCA1CitldmVudDowWDA5QjAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQMTU1IDogKEdyb3VwIDE1NSBwbV9ocG1jb3VudDUpIFByb2Nlc3NvciBjeWNsZXMKK2V2ZW50OjBYMDlCMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRFRMQl9NSVNTX0dSUDE1NSA6IChHcm91cCAxNTUgcG1faHBtY291bnQ1KSBEYXRhIFRMQiBtaXNzZXMKK2V2ZW50OjBYMDlCMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTERfTUlTU19MMV9HUlAxNTUgOiAoR3JvdXAgMTU1IHBtX2hwbWNvdW50NSkgTDEgRCBjYWNoZSBsb2FkIG1pc3NlcworZXZlbnQ6MFgwOUIzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MRF9SRUZfTDFfR1JQMTU1IDogKEdyb3VwIDE1NSBwbV9ocG1jb3VudDUpIEwxIEQgY2FjaGUgbG9hZCByZWZlcmVuY2VzCisKKyNHcm91cCAxNTYgcG1faHBtY291bnQ2LCBIUE0gZ3JvdXAgZm9yIHNldCA2CitldmVudDowWDA5QzAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQMTU2IDogKEdyb3VwIDE1NiBwbV9ocG1jb3VudDYpIFByb2Nlc3NvciBjeWNsZXMKK2V2ZW50OjBYMDlDMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAxNTYgOiAoR3JvdXAgMTU2IHBtX2hwbWNvdW50NikgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgwOUMyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9TVF9SRUZfTDFfR1JQMTU2IDogKEdyb3VwIDE1NiBwbV9ocG1jb3VudDYpIEwxIEQgY2FjaGUgc3RvcmUgcmVmZXJlbmNlcworZXZlbnQ6MFgwOUMzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9TVF9NSVNTX0wxX0dSUDE1NiA6IChHcm91cCAxNTYgcG1faHBtY291bnQ2KSBMMSBEIGNhY2hlIHN0b3JlIG1pc3NlcworCisjR3JvdXAgMTU3IHBtX2hwbWNvdW50NywgSFBNIGdyb3VwIGZvciBzZXQgOAorZXZlbnQ6MFgwOUQwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDE1NyA6IChHcm91cCAxNTcgcG1faHBtY291bnQ3KSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDA5RDEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RBVEFfRlJPTV9MTUVNX0dSUDE1NyA6IChHcm91cCAxNTcgcG1faHBtY291bnQ3KSBEYXRhIGxvYWRlZCBmcm9tIGxvY2FsIG1lbW9yeQorZXZlbnQ6MFgwOUQyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDE1NyA6IChHcm91cCAxNTcgcG1faHBtY291bnQ3KSBQcm9jZXNzb3IgY3ljbGVzCitldmVudDowWDA5RDMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RBVEFfRlJPTV9STUVNX0dSUDE1NyA6IChHcm91cCAxNTcgcG1faHBtY291bnQ3KSBEYXRhIGxvYWRlZCBmcm9tIHJlbW90ZSBtZW1vcnkKKworI0dyb3VwIDE1OCBwbV9lcF90aHJlc2hvbGQsIFRocmVzaG9sZGluZworZXZlbnQ6MFgwOUUwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfR1JQX0RJU1BfR1JQMTU4IDogKEdyb3VwIDE1OCBwbV9lcF90aHJlc2hvbGQpIE1hcmtlZCBncm91cCBkaXNwYXRjaGVkCitldmVudDowWDA5RTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMTU4IDogKEdyb3VwIDE1OCBwbV9lcF90aHJlc2hvbGQpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMDlFMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fVEhSRVNIX1RJTUVPX0dSUDE1OCA6IChHcm91cCAxNTggcG1fZXBfdGhyZXNob2xkKSBUaHJlc2hvbGQgdGltZW91dAorZXZlbnQ6MFgwOUUzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfTFNVX0ZJTl9HUlAxNTggOiAoR3JvdXAgMTU4IHBtX2VwX3RocmVzaG9sZCkgTWFya2VkIGluc3RydWN0aW9uIExTVSBwcm9jZXNzaW5nIGZpbmlzaGVkCisKKyNHcm91cCAxNTkgcG1fZXBfbXJrX2dycDEsIE1hcmtlZCBncm91cCBldmVudHMKK2V2ZW50OjBYMDlGMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0dSUF9ESVNQX0dSUDE1OSA6IChHcm91cCAxNTkgcG1fZXBfbXJrX2dycDEpIE1hcmtlZCBncm91cCBkaXNwYXRjaGVkCitldmVudDowWDA5RjEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMTU5IDogKEdyb3VwIDE1OSBwbV9lcF9tcmtfZ3JwMSkgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgwOUYyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfSU5TVF9GSU5fR1JQMTU5IDogKEdyb3VwIDE1OSBwbV9lcF9tcmtfZ3JwMSkgTWFya2VkIGluc3RydWN0aW9uIGZpbmlzaGVkCitldmVudDowWDA5RjMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19HUlBfQ01QTF9HUlAxNTkgOiAoR3JvdXAgMTU5IHBtX2VwX21ya19ncnAxKSBNYXJrZWQgZ3JvdXAgY29tcGxldGVkCisKKyNHcm91cCAxNjAgcG1fZXBfbXJrX2dycDIsIE1hcmtlZCBncm91cCBldmVudHMKK2V2ZW50OjBYMEEwMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0dSUF9JU1NVRURfR1JQMTYwIDogKEdyb3VwIDE2MCBwbV9lcF9tcmtfZ3JwMikgTWFya2VkIGdyb3VwIGlzc3VlZAorZXZlbnQ6MFgwQTAxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDE2MCA6IChHcm91cCAxNjAgcG1fZXBfbXJrX2dycDIpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMEEwMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0wxX1JFTE9BRF9WQUxJRF9HUlAxNjAgOiAoR3JvdXAgMTYwIHBtX2VwX21ya19ncnAyKSBNYXJrZWQgTDEgcmVsb2FkIGRhdGEgc291cmNlIHZhbGlkCitldmVudDowWDBBMDMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19HUlBfSUNfTUlTU19HUlAxNjAgOiAoR3JvdXAgMTYwIHBtX2VwX21ya19ncnAyKSBHcm91cCBleHBlcmllbmNlZCBtYXJrZWQgSSBjYWNoZSBtaXNzCisKKyNHcm91cCAxNjEgcG1fZXBfbXJrX2Rzb3VyY2UxLCBNYXJrZWQgZGF0YSBmcm9tCitldmVudDowWDBBMTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19EQVRBX0ZST01fTDJfR1JQMTYxIDogKEdyb3VwIDE2MSBwbV9lcF9tcmtfZHNvdXJjZTEpIE1hcmtlZCBkYXRhIGxvYWRlZCBmcm9tIEwyCitldmVudDowWDBBMTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMTYxIDogKEdyb3VwIDE2MSBwbV9lcF9tcmtfZHNvdXJjZTEpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMEExMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0RBVEFfRlJPTV9MMjVfTU9EX0dSUDE2MSA6IChHcm91cCAxNjEgcG1fZXBfbXJrX2Rzb3VyY2UxKSBNYXJrZWQgZGF0YSBsb2FkZWQgZnJvbSBMMi41IG1vZGlmaWVkCitldmVudDowWDBBMTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19EQVRBX0ZST01fTDI1X01PRF9DWUNfR1JQMTYxIDogKEdyb3VwIDE2MSBwbV9lcF9tcmtfZHNvdXJjZTEpIE1hcmtlZCBsb2FkIGxhdGVuY3kgZnJvbSBMMi41IG1vZGlmaWVkCisKKyNHcm91cCAxNjIgcG1fZXBfbXJrX2Rzb3VyY2UyLCBNYXJrZWQgZGF0YSBmcm9tCitldmVudDowWDBBMjAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19EQVRBX0ZST01fTDI1X1NIUl9HUlAxNjIgOiAoR3JvdXAgMTYyIHBtX2VwX21ya19kc291cmNlMikgTWFya2VkIGRhdGEgbG9hZGVkIGZyb20gTDIuNSBzaGFyZWQKK2V2ZW50OjBYMEEyMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAxNjIgOiAoR3JvdXAgMTYyIHBtX2VwX21ya19kc291cmNlMikgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgwQTIyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfSU1SX1JFTE9BRF9HUlAxNjIgOiAoR3JvdXAgMTYyIHBtX2VwX21ya19kc291cmNlMikgTWFya2VkIElNUiByZWxvYWRlZAorZXZlbnQ6MFgwQTIzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFVfRklOX0dSUDE2MiA6IChHcm91cCAxNjIgcG1fZXBfbXJrX2Rzb3VyY2UyKSBGUFUgcHJvZHVjZWQgYSByZXN1bHQKKworI0dyb3VwIDE2MyBwbV9lcF9tcmtfZHNvdXJjZTMsIE1hcmtlZCBkYXRhIGZyb20KK2V2ZW50OjBYMEEzMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAxNjMgOiAoR3JvdXAgMTYzIHBtX2VwX21ya19kc291cmNlMykgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgwQTMxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfREFUQV9GUk9NX0wzX0NZQ19HUlAxNjMgOiAoR3JvdXAgMTYzIHBtX2VwX21ya19kc291cmNlMykgTWFya2VkIGxvYWQgbGF0ZW5jeSBmcm9tIEwzCitldmVudDowWDBBMzIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19EQVRBX0ZST01fTDM1X01PRF9HUlAxNjMgOiAoR3JvdXAgMTYzIHBtX2VwX21ya19kc291cmNlMykgTWFya2VkIGRhdGEgbG9hZGVkIGZyb20gTDMuNSBtb2RpZmllZAorZXZlbnQ6MFgwQTMzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfREFUQV9GUk9NX0wzNV9NT0RfQ1lDX0dSUDE2MyA6IChHcm91cCAxNjMgcG1fZXBfbXJrX2Rzb3VyY2UzKSBNYXJrZWQgbG9hZCBsYXRlbmN5IGZyb20gTDMuNSBtb2RpZmllZAorCisjR3JvdXAgMTY0IHBtX2VwX21ya19kc291cmNlNCwgTWFya2VkIGRhdGEgZnJvbQorZXZlbnQ6MFgwQTQwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDE2NCA6IChHcm91cCAxNjQgcG1fZXBfbXJrX2Rzb3VyY2U0KSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDBBNDEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19EQVRBX0ZST01fTDI3NV9TSFJfQ1lDX0dSUDE2NCA6IChHcm91cCAxNjQgcG1fZXBfbXJrX2Rzb3VyY2U0KSBNYXJrZWQgbG9hZCBsYXRlbmN5IGZyb20gTDIuNzUgc2hhcmVkCitldmVudDowWDBBNDIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19EQVRBX0ZST01fTDI3NV9TSFJfR1JQMTY0IDogKEdyb3VwIDE2NCBwbV9lcF9tcmtfZHNvdXJjZTQpIE1hcmtlZCBkYXRhIGxvYWRlZCBmcm9tIEwyLjc1IHNoYXJlZAorZXZlbnQ6MFgwQTQzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfREFUQV9GUk9NX1JNRU1fQ1lDX0dSUDE2NCA6IChHcm91cCAxNjQgcG1fZXBfbXJrX2Rzb3VyY2U0KSBNYXJrZWQgbG9hZCBsYXRlbmN5IGZyb20gcmVtb3RlIG1lbW9yeQorCisjR3JvdXAgMTY1IHBtX2VwX21ya19kc291cmNlNSwgTWFya2VkIGRhdGEgZnJvbQorZXZlbnQ6MFgwQTUwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfREFUQV9GUk9NX0wzNV9TSFJfR1JQMTY1IDogKEdyb3VwIDE2NSBwbV9lcF9tcmtfZHNvdXJjZTUpIE1hcmtlZCBkYXRhIGxvYWRlZCBmcm9tIEwzLjUgc2hhcmVkCitldmVudDowWDBBNTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMTY1IDogKEdyb3VwIDE2NSBwbV9lcF9tcmtfZHNvdXJjZTUpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMEE1MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0RBVEFfRlJPTV9MTUVNX0dSUDE2NSA6IChHcm91cCAxNjUgcG1fZXBfbXJrX2Rzb3VyY2U1KSBNYXJrZWQgZGF0YSBsb2FkZWQgZnJvbSBsb2NhbCBtZW1vcnkKK2V2ZW50OjBYMEE1MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0RBVEFfRlJPTV9MTUVNX0NZQ19HUlAxNjUgOiAoR3JvdXAgMTY1IHBtX2VwX21ya19kc291cmNlNSkgTWFya2VkIGxvYWQgbGF0ZW5jeSBmcm9tIGxvY2FsIG1lbW9yeQorCisjR3JvdXAgMTY2IHBtX2VwX21ya19kc291cmNlNiwgTWFya2VkIGRhdGEgZnJvbQorZXZlbnQ6MFgwQTYwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDE2NiA6IChHcm91cCAxNjYgcG1fZXBfbXJrX2Rzb3VyY2U2KSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDBBNjEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19EQVRBX0ZST01fTDI3NV9TSFJfQ1lDX0dSUDE2NiA6IChHcm91cCAxNjYgcG1fZXBfbXJrX2Rzb3VyY2U2KSBNYXJrZWQgbG9hZCBsYXRlbmN5IGZyb20gTDIuNzUgc2hhcmVkCitldmVudDowWDBBNjIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lPUFNfQ01QTF9HUlAxNjYgOiAoR3JvdXAgMTY2IHBtX2VwX21ya19kc291cmNlNikgSW50ZXJuYWwgb3BlcmF0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMEE2MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0RBVEFfRlJPTV9MMjc1X01PRF9DWUNfR1JQMTY2IDogKEdyb3VwIDE2NiBwbV9lcF9tcmtfZHNvdXJjZTYpIE1hcmtlZCBsb2FkIGxhdGVuY3kgZnJvbSBMMi43NSBtb2RpZmllZAorCisjR3JvdXAgMTY3IHBtX2VwX21ya19kc291cmNlNywgTWFya2VkIGRhdGEgZnJvbQorZXZlbnQ6MFgwQTcwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDE2NyA6IChHcm91cCAxNjcgcG1fZXBfbXJrX2Rzb3VyY2U3KSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDBBNzEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19EQVRBX0ZST01fTDM3NV9TSFJfQ1lDX0dSUDE2NyA6IChHcm91cCAxNjcgcG1fZXBfbXJrX2Rzb3VyY2U3KSBNYXJrZWQgbG9hZCBsYXRlbmN5IGZyb20gTDMuNzUgc2hhcmVkCitldmVudDowWDBBNzIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19EQVRBX0ZST01fTDM3NV9TSFJfR1JQMTY3IDogKEdyb3VwIDE2NyBwbV9lcF9tcmtfZHNvdXJjZTcpIE1hcmtlZCBkYXRhIGxvYWRlZCBmcm9tIEwzLjc1IHNoYXJlZAorZXZlbnQ6MFgwQTczIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfREFUQV9GUk9NX0wzNzVfTU9EX0NZQ19HUlAxNjcgOiAoR3JvdXAgMTY3IHBtX2VwX21ya19kc291cmNlNykgTWFya2VkIGxvYWQgbGF0ZW5jeSBmcm9tIEwzLjc1IG1vZGlmaWVkCisKKyNHcm91cCAxNjggcG1fZXBfbXJrX2xibWlzcywgTWFya2VkIFRMQiBhbmQgU0xCIG1pc3NlcworZXZlbnQ6MFgwQTgwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDE2OCA6IChHcm91cCAxNjggcG1fZXBfbXJrX2xibWlzcykgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgwQTgxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfRFRMQl9NSVNTXzY0S19HUlAxNjggOiAoR3JvdXAgMTY4IHBtX2VwX21ya19sYm1pc3MpIE1hcmtlZCBEYXRhIFRMQiBtaXNzZXMgZm9yIDY0SyBwYWdlCitldmVudDowWDBBODIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19EVExCX01JU1NfMTZNX0dSUDE2OCA6IChHcm91cCAxNjggcG1fZXBfbXJrX2xibWlzcykgTWFya2VkIERhdGEgVExCIG1pc3NlcyBmb3IgMTZNIHBhZ2UKK2V2ZW50OjBYMEE4MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0RUTEJfTUlTU18xNkdfR1JQMTY4IDogKEdyb3VwIDE2OCBwbV9lcF9tcmtfbGJtaXNzKSBNYXJrZWQgRGF0YSBUTEIgbWlzc2VzIGZvciAxNkcgcGFnZQorCisjR3JvdXAgMTY5IHBtX2VwX21ya19kdGxicmVmLCBNYXJrZWQgZGF0YSBUTEIgcmVmZXJlbmNlcworZXZlbnQ6MFgwQTkwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDE2OSA6IChHcm91cCAxNjkgcG1fZXBfbXJrX2R0bGJyZWYpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMEE5MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0RUTEJfUkVGXzY0S19HUlAxNjkgOiAoR3JvdXAgMTY5IHBtX2VwX21ya19kdGxicmVmKSBNYXJrZWQgRGF0YSBUTEIgcmVmZXJlbmNlIGZvciA2NEsgcGFnZQorZXZlbnQ6MFgwQTkyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfRFRMQl9SRUZfMTZNX0dSUDE2OSA6IChHcm91cCAxNjkgcG1fZXBfbXJrX2R0bGJyZWYpIE1hcmtlZCBEYXRhIFRMQiByZWZlcmVuY2UgZm9yIDE2TSBwYWdlCitldmVudDowWDBBOTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19EVExCX1JFRl8xNkdfR1JQMTY5IDogKEdyb3VwIDE2OSBwbV9lcF9tcmtfZHRsYnJlZikgTWFya2VkIERhdGEgVExCIHJlZmVyZW5jZSBmb3IgMTZHIHBhZ2UKKworI0dyb3VwIDE3MCBwbV9lcF9tcmtfZHRsYm1pc3MsIE1hcmtlZCBkYXRhIFRMQiBtaXNzZXMKK2V2ZW50OjBYMEFBMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAxNzAgOiAoR3JvdXAgMTcwIHBtX2VwX21ya19kdGxibWlzcykgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgwQUExIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfRFRMQl9NSVNTXzY0S19HUlAxNzAgOiAoR3JvdXAgMTcwIHBtX2VwX21ya19kdGxibWlzcykgTWFya2VkIERhdGEgVExCIG1pc3NlcyBmb3IgNjRLIHBhZ2UKK2V2ZW50OjBYMEFBMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0RUTEJfTUlTU18xNk1fR1JQMTcwIDogKEdyb3VwIDE3MCBwbV9lcF9tcmtfZHRsYm1pc3MpIE1hcmtlZCBEYXRhIFRMQiBtaXNzZXMgZm9yIDE2TSBwYWdlCitldmVudDowWDBBQTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19EVExCX01JU1NfMTZHX0dSUDE3MCA6IChHcm91cCAxNzAgcG1fZXBfbXJrX2R0bGJtaXNzKSBNYXJrZWQgRGF0YSBUTEIgbWlzc2VzIGZvciAxNkcgcGFnZQorCisjR3JvdXAgMTcxIHBtX2VwX21ya19sYnJlZiwgTWFya2VkIFRMQiBhbmQgU0xCIHJlZmVyZW5jZXMKK2V2ZW50OjBYMEFCMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0RUTEJfUkVGXzRLX0dSUDE3MSA6IChHcm91cCAxNzEgcG1fZXBfbXJrX2xicmVmKSBNYXJrZWQgRGF0YSBUTEIgcmVmZXJlbmNlIGZvciA0SyBwYWdlCitldmVudDowWDBBQjEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMTcxIDogKEdyb3VwIDE3MSBwbV9lcF9tcmtfbGJyZWYpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMEFCMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0RUTEJfUkVGXzE2TV9HUlAxNzEgOiAoR3JvdXAgMTcxIHBtX2VwX21ya19sYnJlZikgTWFya2VkIERhdGEgVExCIHJlZmVyZW5jZSBmb3IgMTZNIHBhZ2UKK2V2ZW50OjBYMEFCMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0RTTEJfTUlTU19HUlAxNzEgOiAoR3JvdXAgMTcxIHBtX2VwX21ya19sYnJlZikgTWFya2VkIERhdGEgU0xCIG1pc3NlcworCisjR3JvdXAgMTcyIHBtX2VwX21ya19sc21pc3MsIE1hcmtlZCBsb2FkIGFuZCBzdG9yZSBtaXNzCitldmVudDowWDBBQzAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19MRF9NSVNTX0wxX0dSUDE3MiA6IChHcm91cCAxNzIgcG1fZXBfbXJrX2xzbWlzcykgTWFya2VkIEwxIEQgY2FjaGUgbG9hZCBtaXNzZXMKK2V2ZW50OjBYMEFDMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAxNzIgOiAoR3JvdXAgMTcyIHBtX2VwX21ya19sc21pc3MpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMEFDMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX1NUX0NNUExfSU5UX0dSUDE3MiA6IChHcm91cCAxNzIgcG1fZXBfbXJrX2xzbWlzcykgTWFya2VkIHN0b3JlIGNvbXBsZXRlZCB3aXRoIGludGVydmVudGlvbgorZXZlbnQ6MFgwQUMzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfQ1JVX0ZJTl9HUlAxNzIgOiAoR3JvdXAgMTcyIHBtX2VwX21ya19sc21pc3MpIE1hcmtlZCBpbnN0cnVjdGlvbiBDUlUgcHJvY2Vzc2luZyBmaW5pc2hlZAorCisjR3JvdXAgMTczIHBtX2VwX21ya191bHNmbHVzaCwgTWFyayB1bmFsaWduZWQgbG9hZCBhbmQgc3RvcmUgZmx1c2hlcworZXZlbnQ6MFgwQUQwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfU1RfQ01QTF9HUlAxNzMgOiAoR3JvdXAgMTczIHBtX2VwX21ya191bHNmbHVzaCkgTWFya2VkIHN0b3JlIGluc3RydWN0aW9uIGNvbXBsZXRlZAorZXZlbnQ6MFgwQUQxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDE3MyA6IChHcm91cCAxNzMgcG1fZXBfbXJrX3Vsc2ZsdXNoKSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDBBRDIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19MU1VfRkxVU0hfVVNUX0dSUDE3MyA6IChHcm91cCAxNzMgcG1fZXBfbXJrX3Vsc2ZsdXNoKSBNYXJrZWQgdW5hbGlnbmVkIHN0b3JlIGZsdXNoZXMKK2V2ZW50OjBYMEFEMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0xTVV9GTFVTSF9VTERfR1JQMTczIDogKEdyb3VwIDE3MyBwbV9lcF9tcmtfdWxzZmx1c2gpIE1hcmtlZCB1bmFsaWduZWQgbG9hZCBmbHVzaGVzCisKKyNHcm91cCAxNzQgcG1fZXBfbXJrX21pc2MxLCBNaXNjIG1hcmtlZCBpbnN0cnVjdGlvbnMKK2V2ZW50OjBYMEFFMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAxNzQgOiAoR3JvdXAgMTc0IHBtX2VwX21ya19taXNjMSkgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgwQUUxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfU1RfR1BTX0dSUDE3NCA6IChHcm91cCAxNzQgcG1fZXBfbXJrX21pc2MxKSBNYXJrZWQgc3RvcmUgc2VudCB0byBHUFMKK2V2ZW50OjBYMEFFMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0ZQVV9GSU5fR1JQMTc0IDogKEdyb3VwIDE3NCBwbV9lcF9tcmtfbWlzYzEpIE1hcmtlZCBpbnN0cnVjdGlvbiBGUFUgcHJvY2Vzc2luZyBmaW5pc2hlZAorZXZlbnQ6MFgwQUUzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfR1JQX1RJTUVPX0dSUDE3NCA6IChHcm91cCAxNzQgcG1fZXBfbXJrX21pc2MxKSBNYXJrZWQgZ3JvdXAgY29tcGxldGlvbiB0aW1lb3V0CisKKyNHcm91cCAxNzUgcG1fZXBfbXJrX21pc2MyLCBNaXNjIG1hcmtlZCBpbnN0cnVjdGlvbnMKK2V2ZW50OjBYMEFGMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAxNzUgOiAoR3JvdXAgMTc1IHBtX2VwX21ya19taXNjMikgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgwQUYxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfREFUQV9GUk9NX0wyNV9TSFJfQ1lDX0dSUDE3NSA6IChHcm91cCAxNzUgcG1fZXBfbXJrX21pc2MyKSBNYXJrZWQgbG9hZCBsYXRlbmN5IGZyb20gTDIuNSBzaGFyZWQKK2V2ZW50OjBYMEFGMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0RBVEFfRlJPTV9MM19HUlAxNzUgOiAoR3JvdXAgMTc1IHBtX2VwX21ya19taXNjMikgTWFya2VkIGRhdGEgbG9hZGVkIGZyb20gTDMKK2V2ZW50OjBYMEFGMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0lNUl9SRUxPQURfR1JQMTc1IDogKEdyb3VwIDE3NSBwbV9lcF9tcmtfbWlzYzIpIE1hcmtlZCBJTVIgcmVsb2FkZWQKKworI0dyb3VwIDE3NiBwbV9lcF9tcmtfbWlzYzMsIE1pc2MgbWFya2VkIGluc3RydWN0aW9ucworZXZlbnQ6MFgwQjAwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDE3NiA6IChHcm91cCAxNzYgcG1fZXBfbXJrX21pc2MzKSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDBCMDEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19EQVRBX0ZST01fTDM1X1NIUl9DWUNfR1JQMTc2IDogKEdyb3VwIDE3NiBwbV9lcF9tcmtfbWlzYzMpIE1hcmtlZCBsb2FkIGxhdGVuY3kgZnJvbSBMMy41IHNoYXJlZAorZXZlbnQ6MFgwQjAyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfRFRMQl9NSVNTX0dSUDE3NiA6IChHcm91cCAxNzYgcG1fZXBfbXJrX21pc2MzKSBNYXJrZWQgRGF0YSBUTEIgbWlzc2VzCitldmVudDowWDBCMDMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19EQVRBX0ZST01fUk1FTV9HUlAxNzYgOiAoR3JvdXAgMTc2IHBtX2VwX21ya19taXNjMykgTWFya2VkIGRhdGEgbG9hZGVkIGZyb20gcmVtb3RlIG1lbW9yeQorCisjR3JvdXAgMTc3IHBtX2VwX21ya19taXNjNCwgTWlzYyBtYXJrZWQgaW5zdHJ1Y3Rpb25zCitldmVudDowWDBCMTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19EVExCX01JU1NfNEtfR1JQMTc3IDogKEdyb3VwIDE3NyBwbV9lcF9tcmtfbWlzYzQpIE1hcmtlZCBEYXRhIFRMQiBtaXNzZXMgZm9yIDRLIHBhZ2UKK2V2ZW50OjBYMEIxMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAxNzcgOiAoR3JvdXAgMTc3IHBtX2VwX21ya19taXNjNCkgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgwQjEyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfRFRMQl9SRUZfR1JQMTc3IDogKEdyb3VwIDE3NyBwbV9lcF9tcmtfbWlzYzQpIE1hcmtlZCBEYXRhIFRMQiByZWZlcmVuY2UKK2V2ZW50OjBYMEIxMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0RBVEFfRlJPTV9MMjc1X01PRF9HUlAxNzcgOiAoR3JvdXAgMTc3IHBtX2VwX21ya19taXNjNCkgTWFya2VkIGRhdGEgbG9hZGVkIGZyb20gTDIuNzUgbW9kaWZpZWQKKworI0dyb3VwIDE3OCBwbV9lcF9tcmtfbWlzYzUsIE1pc2MgbWFya2VkIGluc3RydWN0aW9ucworZXZlbnQ6MFgwQjIwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfRFRMQl9SRUZfNEtfR1JQMTc4IDogKEdyb3VwIDE3OCBwbV9lcF9tcmtfbWlzYzUpIE1hcmtlZCBEYXRhIFRMQiByZWZlcmVuY2UgZm9yIDRLIHBhZ2UKK2V2ZW50OjBYMEIyMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAxNzggOiAoR3JvdXAgMTc4IHBtX2VwX21ya19taXNjNSkgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgwQjIyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JT1BTX0NNUExfR1JQMTc4IDogKEdyb3VwIDE3OCBwbV9lcF9tcmtfbWlzYzUpIEludGVybmFsIG9wZXJhdGlvbnMgY29tcGxldGVkCitldmVudDowWDBCMjMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19MU1UwX0ZMVVNIX1NSUV9HUlAxNzggOiAoR3JvdXAgMTc4IHBtX2VwX21ya19taXNjNSkgTFNVMCBtYXJrZWQgU1JRIGxocyBmbHVzaGVzCisKKyNHcm91cCAxNzkgcG1fZXBfbXJrX21pc2M2LCBNaXNjIG1hcmtlZCBpbnN0cnVjdGlvbnMKK2V2ZW50OjBYMEIzMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0RUTEJfTUlTU180S19HUlAxNzkgOiAoR3JvdXAgMTc5IHBtX2VwX21ya19taXNjNikgTWFya2VkIERhdGEgVExCIG1pc3NlcyBmb3IgNEsgcGFnZQorZXZlbnQ6MFgwQjMxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDE3OSA6IChHcm91cCAxNzkgcG1fZXBfbXJrX21pc2M2KSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDBCMzIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19MU1UxX0ZMVVNIX1VMRF9HUlAxNzkgOiAoR3JvdXAgMTc5IHBtX2VwX21ya19taXNjNikgTFNVMSBtYXJrZWQgdW5hbGlnbmVkIGxvYWQgZmx1c2hlcworZXZlbnQ6MFgwQjMzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfTFNVMV9GTFVTSF9VU1RfR1JQMTc5IDogKEdyb3VwIDE3OSBwbV9lcF9tcmtfbWlzYzYpIExTVTEgbWFya2VkIHVuYWxpZ25lZCBzdG9yZSBmbHVzaGVzCisKKyNHcm91cCAxODAgcG1fZXBfbXJrX21pc2M3LCBNaXNjIG1hcmtlZCBpbnN0cnVjdGlvbnMKK2V2ZW50OjBYMEI0MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAxODAgOiAoR3JvdXAgMTgwIHBtX2VwX21ya19taXNjNykgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgwQjQxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfREFUQV9GUk9NX0wyX0NZQ19HUlAxODAgOiAoR3JvdXAgMTgwIHBtX2VwX21ya19taXNjNykgTWFya2VkIGxvYWQgbGF0ZW5jeSBmcm9tIEwyCitldmVudDowWDBCNDIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19MU1UwX0ZMVVNIX1VMRF9HUlAxODAgOiAoR3JvdXAgMTgwIHBtX2VwX21ya19taXNjNykgTFNVMCBtYXJrZWQgdW5hbGlnbmVkIGxvYWQgZmx1c2hlcworZXZlbnQ6MFgwQjQzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfTFNVMF9GTFVTSF9VU1RfR1JQMTgwIDogKEdyb3VwIDE4MCBwbV9lcF9tcmtfbWlzYzcpIExTVTAgbWFya2VkIHVuYWxpZ25lZCBzdG9yZSBmbHVzaGVzCisKKyNHcm91cCAxODEgcG1fZXBfbXJrX21pc2M4LCBNaXNjIG1hcmtlZCBpbnN0cnVjdGlvbnMKK2V2ZW50OjBYMEI1MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAxODEgOiAoR3JvdXAgMTgxIHBtX2VwX21ya19taXNjOCkgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgwQjUxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfQlJVX0ZJTl9HUlAxODEgOiAoR3JvdXAgMTgxIHBtX2VwX21ya19taXNjOCkgTWFya2VkIGluc3RydWN0aW9uIEJSVSBwcm9jZXNzaW5nIGZpbmlzaGVkCitldmVudDowWDBCNTIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19MU1UwX0ZMVVNIX0xSUV9HUlAxODEgOiAoR3JvdXAgMTgxIHBtX2VwX21ya19taXNjOCkgTFNVMCBtYXJrZWQgTFJRIGZsdXNoZXMKK2V2ZW50OjBYMEI1MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0xTVTBfRkxVU0hfU1JRX0dSUDE4MSA6IChHcm91cCAxODEgcG1fZXBfbXJrX21pc2M4KSBMU1UwIG1hcmtlZCBTUlEgbGhzIGZsdXNoZXMKKworI0dyb3VwIDE4MiBwbV9lcF9tcmtfbWlzYzksIE1pc2MgbWFya2VkIGluc3RydWN0aW9ucworZXZlbnQ6MFgwQjYwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDE4MiA6IChHcm91cCAxODIgcG1fZXBfbXJrX21pc2M5KSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDBCNjEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19MU1UxX0ZMVVNIX0xSUV9HUlAxODIgOiAoR3JvdXAgMTgyIHBtX2VwX21ya19taXNjOSkgTFNVMSBtYXJrZWQgTFJRIGZsdXNoZXMKK2V2ZW50OjBYMEI2MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0xTVTFfRkxVU0hfU1JRX0dSUDE4MiA6IChHcm91cCAxODIgcG1fZXBfbXJrX21pc2M5KSBMU1UxIG1hcmtlZCBTUlEgbGhzIGZsdXNoZXMKK2V2ZW50OjBYMEI2MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX1NUQ1hfRkFJTF9HUlAxODIgOiAoR3JvdXAgMTgyIHBtX2VwX21ya19taXNjOSkgTWFya2VkIFNUQ1ggZmFpbGVkCisKKyNHcm91cCAxODMgcG1fZXBfbXJrX21pc2MxMCwgTWlzYyBtYXJrZWQgaW5zdHJ1Y3Rpb25zCitldmVudDowWDBCNzAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMTgzIDogKEdyb3VwIDE4MyBwbV9lcF9tcmtfbWlzYzEwKSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDBCNzEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19MRF9NSVNTX0wxX0xTVTBfR1JQMTgzIDogKEdyb3VwIDE4MyBwbV9lcF9tcmtfbWlzYzEwKSBMU1UwIG1hcmtlZCBMMSBEIGNhY2hlIGxvYWQgbWlzc2VzCitldmVudDowWDBCNzIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19MRF9NSVNTX0wxX0xTVTFfR1JQMTgzIDogKEdyb3VwIDE4MyBwbV9lcF9tcmtfbWlzYzEwKSBMU1UxIG1hcmtlZCBMMSBEIGNhY2hlIGxvYWQgbWlzc2VzCitldmVudDowWDBCNzMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19TVF9NSVNTX0wxX0dSUDE4MyA6IChHcm91cCAxODMgcG1fZXBfbXJrX21pc2MxMCkgTWFya2VkIEwxIEQgY2FjaGUgc3RvcmUgbWlzc2VzCisKKyNHcm91cCAxODQgcG1fZXBfbXJrX21pc2MxMSwgTWlzYyBtYXJrZWQgaW5zdHJ1Y3Rpb25zCitldmVudDowWDBCODAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMTg0IDogKEdyb3VwIDE4NCBwbV9lcF9tcmtfbWlzYzExKSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDBCODEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19CUlVfRklOX0dSUDE4NCA6IChHcm91cCAxODQgcG1fZXBfbXJrX21pc2MxMSkgTWFya2VkIGluc3RydWN0aW9uIEJSVSBwcm9jZXNzaW5nIGZpbmlzaGVkCitldmVudDowWDBCODIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19EQVRBX0ZST01fTDI1X01PRF9HUlAxODQgOiAoR3JvdXAgMTg0IHBtX2VwX21ya19taXNjMTEpIE1hcmtlZCBkYXRhIGxvYWRlZCBmcm9tIEwyLjUgbW9kaWZpZWQKK2V2ZW50OjBYMEI4MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0RBVEFfRlJPTV9MMzc1X01PRF9HUlAxODQgOiAoR3JvdXAgMTg0IHBtX2VwX21ya19taXNjMTEpIE1hcmtlZCBkYXRhIGxvYWRlZCBmcm9tIEwzLjc1IG1vZGlmaWVkCisKKyNHcm91cCAxODUgcG1fZXBfbXJrX21pc2MxMiwgTWlzYyBtYXJrZWQgaW5zdHJ1Y3Rpb25zCitldmVudDowWDBCOTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMTg1IDogKEdyb3VwIDE4NSBwbV9lcF9tcmtfbWlzYzEyKSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDBCOTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19MU1VfRkxVU0hfVVNUX0dSUDE4NSA6IChHcm91cCAxODUgcG1fZXBfbXJrX21pc2MxMikgTWFya2VkIHVuYWxpZ25lZCBzdG9yZSBmbHVzaGVzCitldmVudDowWDBCOTIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19MU1VfRkxVU0hfTFJRX0dSUDE4NSA6IChHcm91cCAxODUgcG1fZXBfbXJrX21pc2MxMikgTWFya2VkIExSUSBmbHVzaGVzCitldmVudDowWDBCOTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19MU1VfRkxVU0hfU1JRX0dSUDE4NSA6IChHcm91cCAxODUgcG1fZXBfbXJrX21pc2MxMikgTWFya2VkIFNSUSBsaHMgZmx1c2hlcworCisjR3JvdXAgMTg2IHBtX2VwX21ya19taXNjMTMsIE1pc2MgbWFya2VkIGluc3RydWN0aW9ucworZXZlbnQ6MFgwQkEwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfREFUQV9GUk9NX0wyX0dSUDE4NiA6IChHcm91cCAxODYgcG1fZXBfbXJrX21pc2MxMykgTWFya2VkIGRhdGEgbG9hZGVkIGZyb20gTDIKK2V2ZW50OjBYMEJBMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAxODYgOiAoR3JvdXAgMTg2IHBtX2VwX21ya19taXNjMTMpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMEJBMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0RBVEFfRlJPTV9MMk1JU1NfR1JQMTg2IDogKEdyb3VwIDE4NiBwbV9lcF9tcmtfbWlzYzEzKSBNYXJrZWQgZGF0YSBsb2FkZWQgbWlzc2VkIEwyCitldmVudDowWDBCQTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19MU1VfU1JRX0lOU1RfVkFMSURfR1JQMTg2IDogKEdyb3VwIDE4NiBwbV9lcF9tcmtfbWlzYzEzKSBNYXJrZWQgaW5zdHJ1Y3Rpb24gdmFsaWQgaW4gU1JRCisKKyNHcm91cCAxODcgcG1fZXBfbXJrX21pc2MxNCwgTWlzYyBtYXJrZWQgaW5zdHJ1Y3Rpb25zCitldmVudDowWDBCQjAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMTg3IDogKEdyb3VwIDE4NyBwbV9lcF9tcmtfbWlzYzE0KSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDBCQjEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19GWFVfRklOX0dSUDE4NyA6IChHcm91cCAxODcgcG1fZXBfbXJrX21pc2MxNCkgTWFya2VkIGluc3RydWN0aW9uIEZYVSBwcm9jZXNzaW5nIGZpbmlzaGVkCitldmVudDowWDBCQjIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19GUFVfRklOX0dSUDE4NyA6IChHcm91cCAxODcgcG1fZXBfbXJrX21pc2MxNCkgTWFya2VkIGluc3RydWN0aW9uIEZQVSBwcm9jZXNzaW5nIGZpbmlzaGVkCitldmVudDowWDBCQjMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19MU1VfRklOX0dSUDE4NyA6IChHcm91cCAxODcgcG1fZXBfbXJrX21pc2MxNCkgTWFya2VkIGluc3RydWN0aW9uIExTVSBwcm9jZXNzaW5nIGZpbmlzaGVkCisKKyNHcm91cCAxODggcG1fZXBfbXJrX21pc2MxNSwgTWlzYyBtYXJrZWQgaW5zdHJ1Y3Rpb25zCitldmVudDowWDBCQzAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMTg4IDogKEdyb3VwIDE4OCBwbV9lcF9tcmtfbWlzYzE1KSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDBCQzEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19HUlBfQlJfUkVESVJfR1JQMTg4IDogKEdyb3VwIDE4OCBwbV9lcF9tcmtfbWlzYzE1KSBHcm91cCBleHBlcmllbmNlZCBtYXJrZWQgYnJhbmNoIHJlZGlyZWN0CitldmVudDowWDBCQzIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19JTlNUX0ZJTl9HUlAxODggOiAoR3JvdXAgMTg4IHBtX2VwX21ya19taXNjMTUpIE1hcmtlZCBpbnN0cnVjdGlvbiBmaW5pc2hlZAorZXZlbnQ6MFgwQkMzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfR1JQX0NNUExfR1JQMTg4IDogKEdyb3VwIDE4OCBwbV9lcF9tcmtfbWlzYzE1KSBNYXJrZWQgZ3JvdXAgY29tcGxldGVkCmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9ldmVudHMvcHBjNjQvcG93ZXI1KysvdW5pdF9tYXNrcyBiL29wcm9maWxlLTAuOS43L2V2ZW50cy9wcGM2NC9wb3dlcjUrKy91bml0X21hc2tzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkNTczMTkKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9ldmVudHMvcHBjNjQvcG93ZXI1KysvdW5pdF9tYXNrcwpAQCAtMCwwICsxLDQgQEAKKyMgcHBjNjQgUG93ZXI1KysgcG9zc2libGUgdW5pdCBtYXNrcworIworbmFtZTp6ZXJvIHR5cGU6bWFuZGF0b3J5IGRlZmF1bHQ6MHgwCisJMHgwIE5vIHVuaXQgbWFzawpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL3BwYzY0L3Bvd2VyNSsvZXZlbnRfbWFwcGluZ3MgYi9vcHJvZmlsZS0wLjkuNy9ldmVudHMvcHBjNjQvcG93ZXI1Ky9ldmVudF9tYXBwaW5ncwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzVkMmQxCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL3BwYzY0L3Bvd2VyNSsvZXZlbnRfbWFwcGluZ3MKQEAgLTAsMCArMSwxMjMyIEBACisjTWFwcGluZyBvZiBldmVudCBncm91cHMgdG8gTU1DUiB2YWx1ZXMKKworI0dyb3VwIERlZmF1bHQKK2V2ZW50OjBYMDAxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDBBMDIxMjFFIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDAgd2l0aCByYW5kb20gc2FtcGxpbmcKK2V2ZW50OjBYMDAyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MDAwMDAwMDAyMzQxRTM2IG1tY3JhOjBYMDAwMDAwMDEKKworCisjR3JvdXAgMSBwbV91dGlsaXphdGlvbiwgQ1BJIGFuZCB1dGlsaXphdGlvbiBkYXRhCitldmVudDowWDAxMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAwQTEyMTIxRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAxMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAwQTEyMTIxRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAxMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAwQTEyMTIxRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAxMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAwQTEyMTIxRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAxNCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAwQTEyMTIxRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAxNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAwQTEyMTIxRSBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAyIHBtX2NvbXBsZXRpb24sIENvbXBsZXRpb24gYW5kIGN5Y2xlIGNvdW50cworZXZlbnQ6MFgwMjAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMjYwODI2MUUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMjEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMjYwODI2MUUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMjIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMjYwODI2MUUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMjMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMjYwODI2MUUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMjQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMjYwODI2MUUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMjUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMjYwODI2MUUgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMyBwbV9ncm91cF9kaXNwYXRjaCwgR3JvdXAgZGlzcGF0Y2ggZXZlbnRzCitldmVudDowWDAzMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMDAwMEVDNkM4QzIxMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAzMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMDAwMEVDNkM4QzIxMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAzMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMDAwMEVDNkM4QzIxMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAzMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMDAwMEVDNkM4QzIxMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAzNCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMDAwMEVDNkM4QzIxMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAzNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMDAwMEVDNkM4QzIxMiBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCA0IHBtX2NsYjEsIENMQiBmdWxsbmVzcworZXZlbnQ6MFgwNDAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAxNUIwMDAxODA4NDhDNEMgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwNDEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAxNUIwMDAxODA4NDhDNEMgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwNDIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAxNUIwMDAxODA4NDhDNEMgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwNDMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAxNUIwMDAxODA4NDhDNEMgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwNDQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAxNUIwMDAxODA4NDhDNEMgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwNDUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAxNUIwMDAxODA4NDhDNEMgbW1jcmE6MFgwMDAwMDAwMQorCisjR3JvdXAgNSBwbV9jbGIyLCBDTEIgZnVsbG5lc3MKK2V2ZW50OjBYMDUwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMTQzMDAwMjhBOENDQzAyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMDUxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMTQzMDAwMjhBOENDQzAyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMDUyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMTQzMDAwMjhBOENDQzAyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMDUzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMTQzMDAwMjhBOENDQzAyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMDU0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMTQzMDAwMjhBOENDQzAyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMDU1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMTQzMDAwMjhBOENDQzAyIG1tY3JhOjBYMDAwMDAwMDEKKworI0dyb3VwIDYgcG1fZ2N0X2VtcHR5LCBHQ1QgZW1wdHkgcmVhc29ucworZXZlbnQ6MFgwNjAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwMDAwMDAwMDgzODA4MzggbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNjEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwMDAwMDAwMDgzODA4MzggbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNjIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwMDAwMDAwMDgzODA4MzggbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNjMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwMDAwMDAwMDgzODA4MzggbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNjQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwMDAwMDAwMDgzODA4MzggbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNjUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwMDAwMDAwMDgzODA4MzggbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgNyBwbV9nY3RfdXNhZ2UsIEdDVCBVc2FnZQorZXZlbnQ6MFgwNzAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwM0UzRTNFM0UgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNzEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwM0UzRTNFM0UgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNzIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwM0UzRTNFM0UgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNzMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwM0UzRTNFM0UgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNzQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwM0UzRTNFM0UgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNzUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwM0UzRTNFM0UgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgOCBwbV9sc3UxLCBMU1UgTFJRIGFuZCBMTVEgZXZlbnRzCitldmVudDowWDA4MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDIwRjAwMEZDRUNDQ0NDQSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA4MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDIwRjAwMEZDRUNDQ0NDQSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA4MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDIwRjAwMEZDRUNDQ0NDQSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA4MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDIwRjAwMEZDRUNDQ0NDQSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA4NCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDIwRjAwMEZDRUNDQ0NDQSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA4NSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDIwRjAwMEZDRUNDQ0NDQSBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCA5IHBtX2xzdTIsIExTVSBTUlEgZXZlbnRzCitldmVudDowWDA5MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwRTAwMEVDRUNDQ0E4NiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA5MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwRTAwMEVDRUNDQ0E4NiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA5MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwRTAwMEVDRUNDQ0E4NiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA5MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwRTAwMEVDRUNDQ0E4NiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA5NCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwRTAwMEVDRUNDQ0E4NiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA5NSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwRTAwMEVDRUNDQ0E4NiBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxMCBwbV9sc3UzLCBMU1UgU1JRIGFuZCBMTVEgZXZlbnRzCitldmVudDowWDBBMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDMwRjAwMDRFQTEwMkEyQSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBBMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDMwRjAwMDRFQTEwMkEyQSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBBMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDMwRjAwMDRFQTEwMkEyQSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBBMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDMwRjAwMDRFQTEwMkEyQSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBBNCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDMwRjAwMDRFQTEwMkEyQSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBBNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDMwRjAwMDRFQTEwMkEyQSBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxMSBwbV9sc3U0LCBMU1UgU1JRIGFuZCBMTVEgZXZlbnRzCitldmVudDowWDBCMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMzAwMDBFRUE2MkEyQSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBCMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMzAwMDBFRUE2MkEyQSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBCMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMzAwMDBFRUE2MkEyQSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBCMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMzAwMDBFRUE2MkEyQSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBCNCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMzAwMDBFRUE2MkEyQSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBCNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMzAwMDBFRUE2MkEyQSBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxMiBwbV9wcmVmZXRjaDEsIFByZWZldGNoIHN0cmVhbSBhbGxvY2F0aW9uCitldmVudDowWDBDMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYODQzMjAwMEQzQUM4ODRDRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBDMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYODQzMjAwMEQzQUM4ODRDRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBDMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYODQzMjAwMEQzQUM4ODRDRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBDMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYODQzMjAwMEQzQUM4ODRDRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBDNCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYODQzMjAwMEQzQUM4ODRDRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBDNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYODQzMjAwMEQzQUM4ODRDRSBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxMyBwbV9wcmVmZXRjaDIsIFByZWZldGNoIGV2ZW50cworZXZlbnQ6MFgwRDAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDgxMDMwMDA2MDJDQUNFOEUgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwRDEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDgxMDMwMDA2MDJDQUNFOEUgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwRDIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDgxMDMwMDA2MDJDQUNFOEUgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwRDMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDgxMDMwMDA2MDJDQUNFOEUgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwRDQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDgxMDMwMDA2MDJDQUNFOEUgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwRDUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDgxMDMwMDA2MDJDQUNFOEUgbW1jcmE6MFgwMDAwMDAwMQorCisjR3JvdXAgMTQgcG1fcHJlZmV0Y2gzLCBMMiBwcmVmZXRjaCBhbmQgbWlzYyBldmVudHMKK2V2ZW50OjBYMEUwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwNDdDMDAwNDgyMTA4NjAyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMEUxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwNDdDMDAwNDgyMTA4NjAyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMEUyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwNDdDMDAwNDgyMTA4NjAyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMEUzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwNDdDMDAwNDgyMTA4NjAyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMEU0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwNDdDMDAwNDgyMTA4NjAyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMEU1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwNDdDMDAwNDgyMTA4NjAyIG1tY3JhOjBYMDAwMDAwMDEKKworI0dyb3VwIDE1IHBtX3ByZWZldGNoNCwgTWlzYyBwcmVmZXRjaCBhbmQgcmVqZWN0IGV2ZW50cworZXZlbnQ6MFgwRjAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDBDRjIwMDAyODA4OENDODYgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwRjEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDBDRjIwMDAyODA4OENDODYgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwRjIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDBDRjIwMDAyODA4OENDODYgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwRjMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDBDRjIwMDAyODA4OENDODYgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwRjQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDBDRjIwMDAyODA4OENDODYgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwRjUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDBDRjIwMDAyODA4OENDODYgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMTYgcG1fbHN1X3JlamVjdDEsIExTVSByZWplY3QgZXZlbnRzCitldmVudDowWDEwMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQzhFMDAwMDIyMDEwQzYxMCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDEwMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQzhFMDAwMDIyMDEwQzYxMCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDEwMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQzhFMDAwMDIyMDEwQzYxMCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDEwMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQzhFMDAwMDIyMDEwQzYxMCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDEwNCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQzhFMDAwMDIyMDEwQzYxMCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDEwNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQzhFMDAwMDIyMDEwQzYxMCBtbWNyYTowWDAwMDAwMDAxCisKKyNHcm91cCAxNyBwbV9sc3VfcmVqZWN0MiwgTFNVIHJlamVjdHMgZHVlIHRvIHJlbG9hZCBDREYgb3IgdGFnIHVwZGF0ZSBjb2xsaXNpb24KK2V2ZW50OjBYMTEwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg4OEMwMDAwMTg0OEMwMkNFIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMTExIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg4OEMwMDAwMTg0OEMwMkNFIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMTEyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg4OEMwMDAwMTg0OEMwMkNFIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMTEzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg4OEMwMDAwMTg0OEMwMkNFIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMTE0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg4OEMwMDAwMTg0OEMwMkNFIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMTE1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg4OEMwMDAwMTg0OEMwMkNFIG1tY3JhOjBYMDAwMDAwMDEKKworI0dyb3VwIDE4IHBtX2xzdV9yZWplY3QzLCBMU1UgcmVqZWN0cyBkdWUgdG8gRVJBVCwgaGVsZCBpbnN0dWN0aW9ucworZXZlbnQ6MFgxMjAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQ4QzAwMDAzODY4RUMwQzggbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgxMjEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQ4QzAwMDAzODY4RUMwQzggbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgxMjIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQ4QzAwMDAzODY4RUMwQzggbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgxMjMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQ4QzAwMDAzODY4RUMwQzggbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgxMjQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQ4QzAwMDAzODY4RUMwQzggbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgxMjUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQ4QzAwMDAzODY4RUMwQzggbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMTkgcG1fbHN1X3JlamVjdDQsIExTVTAvMSByZWplY3QgTE1RIGZ1bGwKK2V2ZW50OjBYMTMwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg4OEMwMDAwMTgyOEEwMkM4IG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMTMxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg4OEMwMDAwMTgyOEEwMkM4IG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMTMyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg4OEMwMDAwMTgyOEEwMkM4IG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMTMzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg4OEMwMDAwMTgyOEEwMkM4IG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMTM0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg4OEMwMDAwMTgyOEEwMkM4IG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMTM1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg4OEMwMDAwMTgyOEEwMkM4IG1tY3JhOjBYMDAwMDAwMDEKKworI0dyb3VwIDIwIHBtX2xzdV9yZWplY3Q1LCBMU1UgbWlzYyByZWplY3QgYW5kIGZsdXNoIGV2ZW50cworZXZlbnQ6MFgxNDAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQ4QzAwMDAwMTAyMDhBOEUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgxNDEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQ4QzAwMDAwMTAyMDhBOEUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgxNDIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQ4QzAwMDAwMTAyMDhBOEUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgxNDMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQ4QzAwMDAwMTAyMDhBOEUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgxNDQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQ4QzAwMDAwMTAyMDhBOEUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgxNDUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQ4QzAwMDAwMTAyMDhBOEUgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMjEgcG1fZmx1c2gxLCBNaXNjIGZsdXNoIGV2ZW50cworZXZlbnQ6MFgxNTAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEMwRjAwMDAyMDIxMEM2OEUgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgxNTEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEMwRjAwMDAyMDIxMEM2OEUgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgxNTIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEMwRjAwMDAyMDIxMEM2OEUgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgxNTMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEMwRjAwMDAyMDIxMEM2OEUgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgxNTQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEMwRjAwMDAyMDIxMEM2OEUgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgxNTUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEMwRjAwMDAyMDIxMEM2OEUgbW1jcmE6MFgwMDAwMDAwMQorCisjR3JvdXAgMjIgcG1fZmx1c2gyLCBGbHVzaGVzIGR1ZSB0byBzY29yZWJvYXJkIGFuZCBzeW5jCitldmVudDowWDE2MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQzA4MDAwMDM4MDAyQzRDMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDE2MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQzA4MDAwMDM4MDAyQzRDMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDE2MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQzA4MDAwMDM4MDAyQzRDMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDE2MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQzA4MDAwMDM4MDAyQzRDMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDE2NCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQzA4MDAwMDM4MDAyQzRDMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDE2NSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQzA4MDAwMDM4MDAyQzRDMiBtbWNyYTowWDAwMDAwMDAxCisKKyNHcm91cCAyMyBwbV9sc3VfZmx1c2hfc3JxX2xycSwgTFNVIGZsdXNoIGJ5IFNSUSBhbmQgTFJRIGV2ZW50cworZXZlbnQ6MFgxNzAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwQzAwMDAwMjAyMDAyOEEgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgxNzEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwQzAwMDAwMjAyMDAyOEEgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgxNzIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwQzAwMDAwMjAyMDAyOEEgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgxNzMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwQzAwMDAwMjAyMDAyOEEgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgxNzQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwQzAwMDAwMjAyMDAyOEEgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgxNzUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwQzAwMDAwMjAyMDAyOEEgbW1jcmE6MFgwMDAwMDAwMQorCisjR3JvdXAgMjQgcG1fbHN1X2ZsdXNoX2xycSwgTFNVMC8xIGZsdXNoIGR1ZSB0byBMUlEKK2V2ZW50OjBYMTgwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MEMwMDAwMDg0OEM4QTAyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMTgxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MEMwMDAwMDg0OEM4QTAyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMTgyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MEMwMDAwMDg0OEM4QTAyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMTgzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MEMwMDAwMDg0OEM4QTAyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMTg0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MEMwMDAwMDg0OEM4QTAyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMTg1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MEMwMDAwMDg0OEM4QTAyIG1tY3JhOjBYMDAwMDAwMDEKKworI0dyb3VwIDI1IHBtX2xzdV9mbHVzaF9zcnEsIExTVTAvMSBmbHVzaCBkdWUgdG8gU1JRCitldmVudDowWDE5MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDBDMDAwMDA4NjhFMDI4QSBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDE5MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDBDMDAwMDA4NjhFMDI4QSBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDE5MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDBDMDAwMDA4NjhFMDI4QSBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDE5MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDBDMDAwMDA4NjhFMDI4QSBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDE5NCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDBDMDAwMDA4NjhFMDI4QSBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDE5NSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDBDMDAwMDA4NjhFMDI4QSBtbWNyYTowWDAwMDAwMDAxCisKKyNHcm91cCAyNiBwbV9sc3VfZmx1c2hfdW5hbGlnbmVkLCBMU1UgZmx1c2ggZHVlIHRvIHVuYWxpZ25lZCBkYXRhCitldmVudDowWDFBMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYODBDMDAwMDIxMDEwQzgwMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDFBMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYODBDMDAwMDIxMDEwQzgwMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDFBMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYODBDMDAwMDIxMDEwQzgwMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDFBMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYODBDMDAwMDIxMDEwQzgwMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDFBNCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYODBDMDAwMDIxMDEwQzgwMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDFBNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYODBDMDAwMDIxMDEwQzgwMiBtbWNyYTowWDAwMDAwMDAxCisKKyNHcm91cCAyNyBwbV9sc3VfZmx1c2hfdWxkLCBMU1UwLzEgZmx1c2ggZHVlIHRvIHVuYWxpZ25lZCBsb2FkCitldmVudDowWDFCMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDBDMDAwMDA4MDg4OEEwMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDFCMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDBDMDAwMDA4MDg4OEEwMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDFCMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDBDMDAwMDA4MDg4OEEwMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDFCMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDBDMDAwMDA4MDg4OEEwMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDFCNCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDBDMDAwMDA4MDg4OEEwMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDFCNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDBDMDAwMDA4MDg4OEEwMiBtbWNyYTowWDAwMDAwMDAxCisKKyNHcm91cCAyOCBwbV9sc3VfZmx1c2hfdXN0LCBMU1UwLzEgZmx1c2ggZHVlIHRvIHVuYWxpZ25lZCBzdG9yZQorZXZlbnQ6MFgxQzAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwQzAwMDAwODI4QTAyOEEgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgxQzEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwQzAwMDAwODI4QTAyOEEgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgxQzIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwQzAwMDAwODI4QTAyOEEgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgxQzMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwQzAwMDAwODI4QTAyOEEgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgxQzQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwQzAwMDAwODI4QTAyOEEgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgxQzUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwQzAwMDAwODI4QTAyOEEgbW1jcmE6MFgwMDAwMDAwMQorCisjR3JvdXAgMjkgcG1fbHN1X2ZsdXNoX2Z1bGwsIExTVSBmbHVzaCBkdWUgdG8gTFJRL1NSUSBmdWxsCitldmVudDowWDFEMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQzAyMDAwMDlDRTAyMTBDMCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDFEMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQzAyMDAwMDlDRTAyMTBDMCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDFEMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQzAyMDAwMDlDRTAyMTBDMCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDFEMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQzAyMDAwMDlDRTAyMTBDMCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDFENCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQzAyMDAwMDlDRTAyMTBDMCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDFENSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQzAyMDAwMDlDRTAyMTBDMCBtbWNyYTowWDAwMDAwMDAxCisKKyNHcm91cCAzMCBwbV9sc3Vfc3RhbGwxLCBMU1UgU3RhbGxzCitldmVudDowWDFFMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMDAwMDAyODMwMDIzNCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDFFMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMDAwMDAyODMwMDIzNCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDFFMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMDAwMDAyODMwMDIzNCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDFFMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMDAwMDAyODMwMDIzNCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDFFNCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMDAwMDAyODMwMDIzNCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDFFNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMDAwMDAyODMwMDIzNCBtbWNyYTowWDAwMDAwMDAxCisKKyNHcm91cCAzMSBwbV9sc3Vfc3RhbGwyLCBMU1UgU3RhbGxzCitldmVudDowWDFGMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMDAwMDAwMjM0MUUzNiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDFGMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMDAwMDAwMjM0MUUzNiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDFGMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMDAwMDAwMjM0MUUzNiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDFGMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMDAwMDAwMjM0MUUzNiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDFGNCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMDAwMDAwMjM0MUUzNiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDFGNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMDAwMDAwMjM0MUUzNiBtbWNyYTowWDAwMDAwMDAxCisKKyNHcm91cCAzMiBwbV9meHVfc3RhbGwsIEZYVSBTdGFsbHMKK2V2ZW50OjBYMjAwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MDAwMDAwODIyMzIwMjMyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMjAxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MDAwMDAwODIyMzIwMjMyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMjAyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MDAwMDAwODIyMzIwMjMyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMjAzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MDAwMDAwODIyMzIwMjMyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMjA0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MDAwMDAwODIyMzIwMjMyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMjA1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MDAwMDAwODIyMzIwMjMyIG1tY3JhOjBYMDAwMDAwMDEKKworI0dyb3VwIDMzIHBtX2ZwdV9zdGFsbCwgRlBVIFN0YWxscworZXZlbnQ6MFgyMTAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwMDAwMDAwMjAzNjAyMzAgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgyMTEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwMDAwMDAwMjAzNjAyMzAgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgyMTIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwMDAwMDAwMjAzNjAyMzAgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgyMTMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwMDAwMDAwMjAzNjAyMzAgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgyMTQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwMDAwMDAwMjAzNjAyMzAgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgyMTUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwMDAwMDAwMjAzNjAyMzAgbW1jcmE6MFgwMDAwMDAwMQorCisjR3JvdXAgMzQgcG1fcXVldWVfZnVsbCwgQlJRIExSUSBMTVEgcXVldWUgZnVsbAorZXZlbnQ6MFgyMjAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwMEIwMDA5Q0U4QTg0Q0UgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgyMjEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwMEIwMDA5Q0U4QTg0Q0UgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgyMjIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwMEIwMDA5Q0U4QTg0Q0UgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgyMjMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwMEIwMDA5Q0U4QTg0Q0UgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgyMjQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwMEIwMDA5Q0U4QTg0Q0UgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgyMjUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwMEIwMDA5Q0U4QTg0Q0UgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMzUgcG1faXNzdWVxX2Z1bGwsIEZQVSBGWCBmdWxsCitldmVudDowWDIzMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMDAwMDA4NjhFODA4OCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDIzMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMDAwMDA4NjhFODA4OCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDIzMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMDAwMDA4NjhFODA4OCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDIzMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMDAwMDA4NjhFODA4OCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDIzNCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMDAwMDA4NjhFODA4OCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDIzNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMDAwMDA4NjhFODA4OCBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAzNiBwbV9tYXBwZXJfZnVsbDEsIENSIENUUiBHUFIgbWFwcGVyIGZ1bGwKK2V2ZW50OjBYMjQwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MDAwMDAwMjg4OENDQTgyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMjQxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MDAwMDAwMjg4OENDQTgyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMjQyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MDAwMDAwMjg4OENDQTgyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMjQzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MDAwMDAwMjg4OENDQTgyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMjQ0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MDAwMDAwMjg4OENDQTgyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMjQ1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MDAwMDAwMjg4OENDQTgyIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDM3IHBtX21hcHBlcl9mdWxsMiwgRlBSIFhFUiBtYXBwZXIgZnVsbAorZXZlbnQ6MFgyNTAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQxMDMwMDAyODI4NDM2MDIgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgyNTEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQxMDMwMDAyODI4NDM2MDIgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgyNTIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQxMDMwMDAyODI4NDM2MDIgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgyNTMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQxMDMwMDAyODI4NDM2MDIgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgyNTQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQxMDMwMDAyODI4NDM2MDIgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgyNTUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQxMDMwMDAyODI4NDM2MDIgbW1jcmE6MFgwMDAwMDAwMQorCisjR3JvdXAgMzggcG1fbWlzY19sb2FkLCBOb24tY2FjaGFibGUgbG9hZHMgYW5kIHN0Y3ggZXZlbnRzCitldmVudDowWDI2MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDQzODAwMENDMkNBODI4QSBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDI2MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDQzODAwMENDMkNBODI4QSBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDI2MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDQzODAwMENDMkNBODI4QSBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDI2MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDQzODAwMENDMkNBODI4QSBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDI2NCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDQzODAwMENDMkNBODI4QSBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDI2NSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDQzODAwMENDMkNBODI4QSBtbWNyYTowWDAwMDAwMDAxCisKKyNHcm91cCAzOSBwbV9pY19kZW1hbmQsIElDYWNoZSBkZW1hbmQgZnJvbSBCUiByZWRpcmVjdAorZXZlbnQ6MFgyNzAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDgwMEMwMDBGQzJDQUMwQzIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgyNzEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDgwMEMwMDBGQzJDQUMwQzIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgyNzIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDgwMEMwMDBGQzJDQUMwQzIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgyNzMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDgwMEMwMDBGQzJDQUMwQzIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgyNzQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDgwMEMwMDBGQzJDQUMwQzIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgyNzUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDgwMEMwMDBGQzJDQUMwQzIgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgNDAgcG1faWNfcHJlZiwgSUNhY2hlIHByZWZldGNoCitldmVudDowWDI4MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYODAwMDAwMERDRUNDOEUxQSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDI4MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYODAwMDAwMERDRUNDOEUxQSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDI4MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYODAwMDAwMERDRUNDOEUxQSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDI4MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYODAwMDAwMERDRUNDOEUxQSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDI4NCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYODAwMDAwMERDRUNDOEUxQSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDI4NSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYODAwMDAwMERDRUNDOEUxQSBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCA0MSBwbV9pY19taXNzLCBJQ2FjaGUgbWlzc2VzCitldmVudDowWDI5MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMzAwMEUzMkNFQzgwMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDI5MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMzAwMEUzMkNFQzgwMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDI5MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMzAwMEUzMkNFQzgwMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDI5MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMzAwMEUzMkNFQzgwMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDI5NCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMzAwMEUzMkNFQzgwMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDI5NSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMzAwMEUzMkNFQzgwMiBtbWNyYTowWDAwMDAwMDAxCisKKyNHcm91cCA0MiBwbV9icmFuY2hfbWlzcywgQnJhbmNoIG1pc3ByZWRpY3QsIFRMQiBhbmQgU0xCIG1pc3NlcworZXZlbnQ6MFgyQTAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDgwODAwMDAzMTAxMENBQ0MgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgyQTEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDgwODAwMDAzMTAxMENBQ0MgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgyQTIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDgwODAwMDAzMTAxMENBQ0MgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgyQTMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDgwODAwMDAzMTAxMENBQ0MgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgyQTQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDgwODAwMDAzMTAxMENBQ0MgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgyQTUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDgwODAwMDAzMTAxMENBQ0MgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgNDMgcG1fYnJhbmNoMSwgQnJhbmNoIG9wZXJhdGlvbnMKK2V2ZW50OjBYMkIwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg4MDAwMDAwRjBFMEUwRTBFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMkIxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg4MDAwMDAwRjBFMEUwRTBFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMkIyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg4MDAwMDAwRjBFMEUwRTBFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMkIzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg4MDAwMDAwRjBFMEUwRTBFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMkI0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg4MDAwMDAwRjBFMEUwRTBFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMkI1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg4MDAwMDAwRjBFMEUwRTBFIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDQ0IHBtX2JyYW5jaDIsIEJyYW5jaCBvcGVyYXRpb25zCitldmVudDowWDJDMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMDAwMENDQUNDOEMwMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDJDMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMDAwMENDQUNDOEMwMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDJDMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMDAwMENDQUNDOEMwMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDJDMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMDAwMENDQUNDOEMwMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDJDNCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMDAwMENDQUNDOEMwMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDJDNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMDAwMENDQUNDOEMwMiBtbWNyYTowWDAwMDAwMDAxCisKKyNHcm91cCA0NSBwbV9MMV90bGJtaXNzLCBMMSBsb2FkIGFuZCBUTEIgbWlzc2VzCitldmVudDowWDJEMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDBCMDAwMDA4RTg4MTAyMCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDJEMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDBCMDAwMDA4RTg4MTAyMCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDJEMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDBCMDAwMDA4RTg4MTAyMCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDJEMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDBCMDAwMDA4RTg4MTAyMCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDJENCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDBCMDAwMDA4RTg4MTAyMCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDJENSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDBCMDAwMDA4RTg4MTAyMCBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCA0NiBwbV9MMV9ERVJBVF9taXNzLCBMMSBzdG9yZSBhbmQgREVSQVQgbWlzc2VzCitldmVudDowWDJFMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDBCMzAwMDgwRTIwMjA4NiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDJFMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDBCMzAwMDgwRTIwMjA4NiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDJFMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDBCMzAwMDgwRTIwMjA4NiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDJFMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDBCMzAwMDgwRTIwMjA4NiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDJFNCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDBCMzAwMDgwRTIwMjA4NiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDJFNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDBCMzAwMDgwRTIwMjA4NiBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCA0NyBwbV9MMV9zbGJtaXNzLCBMMSBsb2FkIGFuZCBTTEIgbWlzc2VzCitldmVudDowWDJGMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDBCMDAwMDA4QTgyODQ4QyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDJGMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDBCMDAwMDA4QTgyODQ4QyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDJGMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDBCMDAwMDA4QTgyODQ4QyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDJGMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDBCMDAwMDA4QTgyODQ4QyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDJGNCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDBCMDAwMDA4QTgyODQ4QyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDJGNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDBCMDAwMDA4QTgyODQ4QyBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCA0OCBwbV9kdGxicmVmLCBEYXRhIFRMQiByZWZlcmVuY2VzCitldmVudDowWDMwMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwQzAwMEYwQzBDMEMwQyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDMwMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwQzAwMEYwQzBDMEMwQyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDMwMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwQzAwMEYwQzBDMEMwQyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDMwMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwQzAwMEYwQzBDMEMwQyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDMwNCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwQzAwMEYwQzBDMEMwQyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDMwNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwQzAwMEYwQzBDMEMwQyBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCA0OSBwbV9kdGxibWlzcywgRGF0YSBUTEIgbWlzc2VzCitldmVudDowWDMxMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwQzAwMEYxQTFBMUExQSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDMxMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwQzAwMEYxQTFBMUExQSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDMxMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwQzAwMEYxQTFBMUExQSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDMxMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwQzAwMEYxQTFBMUExQSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDMxNCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwQzAwMEYxQTFBMUExQSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDMxNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwQzAwMEYxQTFBMUExQSBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCA1MCBwbV9kdGxiLCBEYXRhIFRMQiByZWZlcmVuY2VzIGFuZCBtaXNzZXMKK2V2ZW50OjBYMzIwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDhDMDAwOEM4ODgxRTFFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMzIxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDhDMDAwOEM4ODgxRTFFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMzIyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDhDMDAwOEM4ODgxRTFFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMzIzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDhDMDAwOEM4ODgxRTFFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMzI0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDhDMDAwOEM4ODgxRTFFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMzI1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDhDMDAwOEM4ODgxRTFFIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDUxIHBtX0wxX3JlZm1pc3MsIEwxIGxvYWQgcmVmZXJlbmNlcyBhbmQgbWlzc2VzIGFuZCBzdG9yZSByZWZlcmVuY2VzIGFuZCBtaXNzZXMKK2V2ZW50OjBYMzMwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDMwMDAwMDUwNTAxMDg2IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMzMxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDMwMDAwMDUwNTAxMDg2IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMzMyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDMwMDAwMDUwNTAxMDg2IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMzMzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDMwMDAwMDUwNTAxMDg2IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMzM0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDMwMDAwMDUwNTAxMDg2IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMzM1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDMwMDAwMDUwNTAxMDg2IG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDUyIHBtX2Rzb3VyY2UxLCBMMyBjYWNoZSBhbmQgbWVtb3J5IGRhdGEgYWNjZXNzCitldmVudDowWDM0MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMzAwMEMxQzBFOEUwMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDM0MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMzAwMEMxQzBFOEUwMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDM0MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMzAwMEMxQzBFOEUwMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDM0MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMzAwMEMxQzBFOEUwMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDM0NCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMzAwMEMxQzBFOEUwMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDM0NSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMzAwMEMxQzBFOEUwMiBtbWNyYTowWDAwMDAwMDAxCisKKyNHcm91cCA1MyBwbV9kc291cmNlMiwgTDMgY2FjaGUgYW5kIG1lbW9yeSBkYXRhIGFjY2VzcworZXZlbnQ6MFgzNTAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDMwMDBGMUMwRTM2MEUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgzNTEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDMwMDBGMUMwRTM2MEUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgzNTIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDMwMDBGMUMwRTM2MEUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgzNTMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDMwMDBGMUMwRTM2MEUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgzNTQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDMwMDBGMUMwRTM2MEUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgzNTUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDMwMDBGMUMwRTM2MEUgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgNTQgcG1fZHNvdXJjZV9MMiwgTDIgY2FjaGUgZGF0YSBhY2Nlc3MKK2V2ZW50OjBYMzYwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAzMDAwRjJFMkUyRTJFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMzYxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAzMDAwRjJFMkUyRTJFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMzYyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAzMDAwRjJFMkUyRTJFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMzYzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAzMDAwRjJFMkUyRTJFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMzY0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAzMDAwRjJFMkUyRTJFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMzY1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAzMDAwRjJFMkUyRTJFIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDU1IHBtX2Rzb3VyY2VfTDMsIEwzIGNhY2hlIGRhdGEgYWNjZXNzCitldmVudDowWDM3MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMzAwMEYzQzNDM0MzQyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDM3MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMzAwMEYzQzNDM0MzQyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDM3MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMzAwMEYzQzNDM0MzQyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDM3MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMzAwMEYzQzNDM0MzQyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDM3NCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMzAwMEYzQzNDM0MzQyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDM3NSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMzAwMEYzQzNDM0MzQyBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCA1NiBwbV9pc291cmNlMSwgSW5zdHJ1Y3Rpb24gc291cmNlIGluZm9ybWF0aW9uCitldmVudDowWDM4MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYODAwMDAwMEYxQTFBMUEwQyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDM4MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYODAwMDAwMEYxQTFBMUEwQyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDM4MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYODAwMDAwMEYxQTFBMUEwQyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDM4MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYODAwMDAwMEYxQTFBMUEwQyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDM4NCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYODAwMDAwMEYxQTFBMUEwQyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDM4NSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYODAwMDAwMEYxQTFBMUEwQyBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCA1NyBwbV9pc291cmNlMiwgSW5zdHJ1Y3Rpb24gc291cmNlIGluZm9ybWF0aW9uCitldmVudDowWDM5MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYODAwMDAwMEQwQzBDMDIxQSBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDM5MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYODAwMDAwMEQwQzBDMDIxQSBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDM5MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYODAwMDAwMEQwQzBDMDIxQSBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDM5MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYODAwMDAwMEQwQzBDMDIxQSBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDM5NCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYODAwMDAwMEQwQzBDMDIxQSBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDM5NSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYODAwMDAwMEQwQzBDMDIxQSBtbWNyYTowWDAwMDAwMDAxCisKKyNHcm91cCA1OCBwbV9pc291cmNlX0wyLCBMMiBpbnN0cnVjdGlvbiBzb3VyY2UgaW5mb3JtYXRpb24KK2V2ZW50OjBYM0EwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg4MDAwMDAwRjJDMkMyQzJDIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYM0ExIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg4MDAwMDAwRjJDMkMyQzJDIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYM0EyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg4MDAwMDAwRjJDMkMyQzJDIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYM0EzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg4MDAwMDAwRjJDMkMyQzJDIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYM0E0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg4MDAwMDAwRjJDMkMyQzJDIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYM0E1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg4MDAwMDAwRjJDMkMyQzJDIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDU5IHBtX2lzb3VyY2VfTDMsIEwzIGluc3RydWN0aW9uIHNvdXJjZSBpbmZvcm1hdGlvbgorZXZlbnQ6MFgzQjAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDgwMDAwMDBGM0EzQTNBM0EgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgzQjEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDgwMDAwMDBGM0EzQTNBM0EgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgzQjIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDgwMDAwMDBGM0EzQTNBM0EgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgzQjMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDgwMDAwMDBGM0EzQTNBM0EgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgzQjQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDgwMDAwMDBGM0EzQTNBM0EgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgzQjUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDgwMDAwMDBGM0EzQTNBM0EgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgNjAgcG1fcHRlZ19zb3VyY2UxLCBQVEVHIHNvdXJjZSBpbmZvcm1hdGlvbgorZXZlbnQ6MFgzQzAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDIwMDBGMkUyRTJFMkUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgzQzEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDIwMDBGMkUyRTJFMkUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgzQzIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDIwMDBGMkUyRTJFMkUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgzQzMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDIwMDBGMkUyRTJFMkUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgzQzQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDIwMDBGMkUyRTJFMkUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgzQzUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDIwMDBGMkUyRTJFMkUgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgNjEgcG1fcHRlZ19zb3VyY2UyLCBQVEVHIHNvdXJjZSBpbmZvcm1hdGlvbgorZXZlbnQ6MFgzRDAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDIwMDBGM0MzQzNDM0MgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgzRDEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDIwMDBGM0MzQzNDM0MgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgzRDIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDIwMDBGM0MzQzNDM0MgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgzRDMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDIwMDBGM0MzQzNDM0MgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgzRDQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDIwMDBGM0MzQzNDM0MgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgzRDUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDIwMDBGM0MzQzNDM0MgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgNjIgcG1fcHRlZ19zb3VyY2UzLCBQVEVHIHNvdXJjZSBpbmZvcm1hdGlvbgorZXZlbnQ6MFgzRTAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDIwMDBGMEUwRTM2MEUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgzRTEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDIwMDBGMEUwRTM2MEUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgzRTIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDIwMDBGMEUwRTM2MEUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgzRTMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDIwMDBGMEUwRTM2MEUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgzRTQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDIwMDBGMEUwRTM2MEUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgzRTUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDIwMDBGMEUwRTM2MEUgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgNjMgcG1fcHRlZ19zb3VyY2U0LCBMMyBQVEVHIGFuZCBncm91cCBkaXNwdGFjaCBldmVudHMKK2V2ZW50OjBYM0YwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDMyMDAwODFDMDQwNDhFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYM0YxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDMyMDAwODFDMDQwNDhFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYM0YyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDMyMDAwODFDMDQwNDhFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYM0YzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDMyMDAwODFDMDQwNDhFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYM0Y0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDMyMDAwODFDMDQwNDhFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYM0Y1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDMyMDAwODFDMDQwNDhFIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDY0IHBtX0wyU0FfbGQsIEwyIHNsaWNlIEEgbG9hZCBldmVudHMKK2V2ZW50OjBYNDAwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1NDAwNTgwQzA4MEMwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNDAxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1NDAwNTgwQzA4MEMwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNDAyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1NDAwNTgwQzA4MEMwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNDAzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1NDAwNTgwQzA4MEMwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNDA0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1NDAwNTgwQzA4MEMwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNDA1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1NDAwNTgwQzA4MEMwIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDY1IHBtX0wyU0Ffc3QsIEwyIHNsaWNlIEEgc3RvcmUgZXZlbnRzCitldmVudDowWDQxMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzA1NTgwMDU4MEMwODBDMCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDQxMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzA1NTgwMDU4MEMwODBDMCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDQxMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzA1NTgwMDU4MEMwODBDMCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDQxMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzA1NTgwMDU4MEMwODBDMCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDQxNCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzA1NTgwMDU4MEMwODBDMCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDQxNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzA1NTgwMDU4MEMwODBDMCBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCA2NiBwbV9MMlNBX3N0MiwgTDIgc2xpY2UgQSBzdG9yZSBldmVudHMKK2V2ZW50OjBYNDIwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1QzAwNTgwQzA4MEMwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNDIxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1QzAwNTgwQzA4MEMwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNDIyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1QzAwNTgwQzA4MEMwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNDIzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1QzAwNTgwQzA4MEMwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNDI0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1QzAwNTgwQzA4MEMwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNDI1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1QzAwNTgwQzA4MEMwIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDY3IHBtX0wyU0JfbGQsIEwyIHNsaWNlIEIgbG9hZCBldmVudHMKK2V2ZW50OjBYNDMwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1NDAwNTgyQzI4MkMyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNDMxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1NDAwNTgyQzI4MkMyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNDMyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1NDAwNTgyQzI4MkMyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNDMzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1NDAwNTgyQzI4MkMyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNDM0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1NDAwNTgyQzI4MkMyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNDM1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1NDAwNTgyQzI4MkMyIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDY4IHBtX0wyU0Jfc3QsIEwyIHNsaWNlIEIgc3RvcmUgZXZlbnRzCitldmVudDowWDQ0MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzA1NTgwMDU4MkM0ODJDMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDQ0MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzA1NTgwMDU4MkM0ODJDMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDQ0MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzA1NTgwMDU4MkM0ODJDMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDQ0MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzA1NTgwMDU4MkM0ODJDMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDQ0NCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzA1NTgwMDU4MkM0ODJDMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDQ0NSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzA1NTgwMDU4MkM0ODJDMiBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCA2OSBwbV9MMlNCX3N0MiwgTDIgc2xpY2UgQiBzdG9yZSBldmVudHMKK2V2ZW50OjBYNDUwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1QzAwNTgyQzI4MkMyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNDUxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1QzAwNTgyQzI4MkMyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNDUyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1QzAwNTgyQzI4MkMyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNDUzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1QzAwNTgyQzI4MkMyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNDU0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1QzAwNTgyQzI4MkMyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNDU1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1QzAwNTgyQzI4MkMyIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDcwIHBtX0wyU0JfbGQsIEwyIHNsaWNlIEMgbG9hZCBldmVudHMKK2V2ZW50OjBYNDYwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1NDAwNTg0QzQ4NEM0IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNDYxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1NDAwNTg0QzQ4NEM0IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNDYyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1NDAwNTg0QzQ4NEM0IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNDYzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1NDAwNTg0QzQ4NEM0IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNDY0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1NDAwNTg0QzQ4NEM0IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNDY1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1NDAwNTg0QzQ4NEM0IG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDcxIHBtX0wyU0Jfc3QsIEwyIHNsaWNlIEMgc3RvcmUgZXZlbnRzCitldmVudDowWDQ3MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzA1NTgwMDU4NEMyODRDNCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDQ3MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzA1NTgwMDU4NEMyODRDNCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDQ3MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzA1NTgwMDU4NEMyODRDNCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDQ3MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzA1NTgwMDU4NEMyODRDNCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDQ3NCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzA1NTgwMDU4NEMyODRDNCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDQ3NSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzA1NTgwMDU4NEMyODRDNCBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCA3MiBwbV9MMlNCX3N0MiwgTDIgc2xpY2UgQyBzdG9yZSBldmVudHMKK2V2ZW50OjBYNDgwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1QzAwNTg0QzQ4NEM0IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNDgxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1QzAwNTg0QzQ4NEM0IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNDgyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1QzAwNTg0QzQ4NEM0IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNDgzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1QzAwNTg0QzQ4NEM0IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNDg0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1QzAwNTg0QzQ4NEM0IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNDg1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1QzAwNTg0QzQ4NEM0IG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDczIHBtX0wzU0FfdHJhbnMsIEwzIHNsaWNlIEEgc3RhdGUgdHJhbnNpc3Rpb25zCitldmVudDowWDQ5MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzAxNTAwMEFDNjAyQzY4NiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDQ5MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzAxNTAwMEFDNjAyQzY4NiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDQ5MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzAxNTAwMEFDNjAyQzY4NiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDQ5MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzAxNTAwMEFDNjAyQzY4NiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDQ5NCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzAxNTAwMEFDNjAyQzY4NiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDQ5NSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzAxNTAwMEFDNjAyQzY4NiBtbWNyYTowWDAwMDAwMDAxCisKKyNHcm91cCA3NCBwbV9MM1NCX3RyYW5zLCBMMyBzbGljZSBCIHN0YXRlIHRyYW5zaXN0aW9ucworZXZlbnQ6MFg0QTAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwMTUwMDA2MDJDOEM4ODggbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg0QTEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwMTUwMDA2MDJDOEM4ODggbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg0QTIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwMTUwMDA2MDJDOEM4ODggbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg0QTMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwMTUwMDA2MDJDOEM4ODggbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg0QTQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwMTUwMDA2MDJDOEM4ODggbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg0QTUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwMTUwMDA2MDJDOEM4ODggbW1jcmE6MFgwMDAwMDAwMQorCisjR3JvdXAgNzUgcG1fTDNTQ190cmFucywgTDMgc2xpY2UgQyBzdGF0ZSB0cmFuc2lzdGlvbnMKK2V2ZW50OjBYNEIwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDE1MDAwNjAyQ0FDQThBIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYNEIxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDE1MDAwNjAyQ0FDQThBIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYNEIyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDE1MDAwNjAyQ0FDQThBIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYNEIzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDE1MDAwNjAyQ0FDQThBIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYNEI0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDE1MDAwNjAyQ0FDQThBIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYNEI1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDE1MDAwNjAyQ0FDQThBIG1tY3JhOjBYMDAwMDAwMDEKKworI0dyb3VwIDc2IHBtX0wyU0FfdHJhbnMsIEwyIHNsaWNlIEEgc3RhdGUgdHJhbnNpc3Rpb25zCitldmVudDowWDRDMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzA1NTAwMEFDMDgwQzA4MCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDRDMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzA1NTAwMEFDMDgwQzA4MCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDRDMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzA1NTAwMEFDMDgwQzA4MCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDRDMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzA1NTAwMEFDMDgwQzA4MCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDRDNCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzA1NTAwMEFDMDgwQzA4MCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDRDNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzA1NTAwMEFDMDgwQzA4MCBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCA3NyBwbV9MMlNCX3RyYW5zLCBMMiBzbGljZSBCIHN0YXRlIHRyYW5zaXN0aW9ucworZXZlbnQ6MFg0RDAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTUwMDBBQzI4MkMyODIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg0RDEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTUwMDBBQzI4MkMyODIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg0RDIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTUwMDBBQzI4MkMyODIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg0RDMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTUwMDBBQzI4MkMyODIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg0RDQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTUwMDBBQzI4MkMyODIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg0RDUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTUwMDBBQzI4MkMyODIgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgNzggcG1fTDJTQ190cmFucywgTDIgc2xpY2UgQyBzdGF0ZSB0cmFuc2lzdGlvbnMKK2V2ZW50OjBYNEUwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1MDAwQUM0ODRDNDg0IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNEUxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1MDAwQUM0ODRDNDg0IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNEUyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1MDAwQUM0ODRDNDg0IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNEUzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1MDAwQUM0ODRDNDg0IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNEU0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1MDAwQUM0ODRDNDg0IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNEU1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1MDAwQUM0ODRDNDg0IG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDc5IHBtX0wzU0FCX3JldHJ5LCBMMyBzbGljZSBBL0Igc25vb3AgcmV0cnkgYW5kIGFsbCBDSS9DTyBidXN5CitldmVudDowWDRGMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzAwNTEwMEZDNkM4QzZDOCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDRGMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzAwNTEwMEZDNkM4QzZDOCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDRGMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzAwNTEwMEZDNkM4QzZDOCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDRGMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzAwNTEwMEZDNkM4QzZDOCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDRGNCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzAwNTEwMEZDNkM4QzZDOCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDRGNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzAwNTEwMEZDNkM4QzZDOCBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCA4MCBwbV9MM1NBQl9oaXQsIEwzIHNsaWNlIEEvQiBoaXQgYW5kIHJlZmVyZW5jZQorZXZlbnQ6MFg1MDAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTAxMDAwODY4ODg2ODggbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg1MDEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTAxMDAwODY4ODg2ODggbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg1MDIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTAxMDAwODY4ODg2ODggbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg1MDMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTAxMDAwODY4ODg2ODggbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg1MDQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTAxMDAwODY4ODg2ODggbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg1MDUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTAxMDAwODY4ODg2ODggbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgODEgcG1fTDNTQ19yZXRyeV9oaXQsIEwzIHNsaWNlIEMgaGl0ICYgc25vb3AgcmV0cnkKK2V2ZW50OjBYNTEwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1MTAwQUNBOEFDQThBIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNTExIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1MTAwQUNBOEFDQThBIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNTEyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1MTAwQUNBOEFDQThBIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNTEzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1MTAwQUNBOEFDQThBIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNTE0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1MTAwQUNBOEFDQThBIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNTE1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1MTAwQUNBOEFDQThBIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDgyIHBtX2ZwdTEsIEZsb2F0aW5nIFBvaW50IGV2ZW50cworZXZlbnQ6MFg1MjAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMTAxMDEwMjAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg1MjEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMTAxMDEwMjAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg1MjIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMTAxMDEwMjAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg1MjMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMTAxMDEwMjAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg1MjQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMTAxMDEwMjAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg1MjUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMTAxMDEwMjAgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgODMgcG1fZnB1MiwgRmxvYXRpbmcgUG9pbnQgZXZlbnRzCitldmVudDowWDUzMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAyMDIwMjAxMCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDUzMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAyMDIwMjAxMCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDUzMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAyMDIwMjAxMCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDUzMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAyMDIwMjAxMCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDUzNCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAyMDIwMjAxMCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDUzNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAyMDIwMjAxMCBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCA4NCBwbV9mcHUzLCBGbG9hdGluZyBwb2ludCBldmVudHMKK2V2ZW50OjBYNTQwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwQzEwMTA4NjhFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNTQxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwQzEwMTA4NjhFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNTQyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwQzEwMTA4NjhFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNTQzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwQzEwMTA4NjhFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNTQ0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwQzEwMTA4NjhFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNTQ1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwQzEwMTA4NjhFIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDg1IHBtX2ZwdTQsIEZsb2F0aW5nIHBvaW50IGV2ZW50cworZXZlbnQ6MFg1NTAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDA0MzAwMDBDMjAyMDAyMjAgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg1NTEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDA0MzAwMDBDMjAyMDAyMjAgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg1NTIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDA0MzAwMDBDMjAyMDAyMjAgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg1NTMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDA0MzAwMDBDMjAyMDAyMjAgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg1NTQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDA0MzAwMDBDMjAyMDAyMjAgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg1NTUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDA0MzAwMDBDMjAyMDAyMjAgbW1jcmE6MFgwMDAwMDAwMQorCisjR3JvdXAgODYgcG1fZnB1NSwgRmxvYXRpbmcgcG9pbnQgZXZlbnRzIGJ5IHVuaXQKK2V2ZW50OjBYNTYwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDg0OEM4NDhDIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNTYxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDg0OEM4NDhDIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNTYyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDg0OEM4NDhDIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNTYzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDg0OEM4NDhDIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNTY0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDg0OEM4NDhDIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNTY1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDg0OEM4NDhDIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDg3IHBtX2ZwdTYsIEZsb2F0aW5nIHBvaW50IGV2ZW50cyBieSB1bml0CitldmVudDowWDU3MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMENDMEM4ODA4OCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDU3MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMENDMEM4ODA4OCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDU3MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMENDMEM4ODA4OCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDU3MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMENDMEM4ODA4OCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDU3NCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMENDMEM4ODA4OCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDU3NSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMENDMEM4ODA4OCBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCA4OCBwbV9mcHU3LCBGbG9hdGluZyBwb2ludCBldmVudHMgYnkgdW5pdAorZXZlbnQ6MFg1ODAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwODA4ODgyOEEgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg1ODEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwODA4ODgyOEEgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg1ODIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwODA4ODgyOEEgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg1ODMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwODA4ODgyOEEgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg1ODQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwODA4ODgyOEEgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg1ODUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwODA4ODgyOEEgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgODkgcG1fZnB1OCwgRmxvYXRpbmcgcG9pbnQgZXZlbnRzIGJ5IHVuaXQKK2V2ZW50OjBYNTkwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwREMyQ0EwMkMwIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYNTkxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwREMyQ0EwMkMwIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYNTkyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwREMyQ0EwMkMwIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYNTkzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwREMyQ0EwMkMwIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYNTk0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwREMyQ0EwMkMwIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYNTk1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwREMyQ0EwMkMwIG1tY3JhOjBYMDAwMDAwMDEKKworI0dyb3VwIDkwIHBtX2ZwdTksIEZsb2F0aW5nIHBvaW50IGV2ZW50cyBieSB1bml0CitldmVudDowWDVBMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDQzMDAwMENDNkNFODA4OCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDVBMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDQzMDAwMENDNkNFODA4OCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDVBMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDQzMDAwMENDNkNFODA4OCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDVBMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDQzMDAwMENDNkNFODA4OCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDVBNCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDQzMDAwMENDNkNFODA4OCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDVBNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDQzMDAwMENDNkNFODA4OCBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCA5MSBwbV9mcHUxMCwgRmxvYXRpbmcgcG9pbnQgZXZlbnRzIGJ5IHVuaXQKK2V2ZW50OjBYNUIwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDgyOEEwMjhBIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYNUIxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDgyOEEwMjhBIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYNUIyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDgyOEEwMjhBIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYNUIzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDgyOEEwMjhBIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYNUI0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDgyOEEwMjhBIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYNUI1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDgyOEEwMjhBIG1tY3JhOjBYMDAwMDAwMDEKKworI0dyb3VwIDkyIHBtX2ZwdTExLCBGbG9hdGluZyBwb2ludCBldmVudHMgYnkgdW5pdAorZXZlbnQ6MFg1QzAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwODY4RTg2MDIgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg1QzEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwODY4RTg2MDIgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg1QzIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwODY4RTg2MDIgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg1QzMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwODY4RTg2MDIgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg1QzQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwODY4RTg2MDIgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg1QzUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwODY4RTg2MDIgbW1jcmE6MFgwMDAwMDAwMQorCisjR3JvdXAgOTMgcG1fZnB1MTIsIEZsb2F0aW5nIHBvaW50IGV2ZW50cyBieSB1bml0CitldmVudDowWDVEMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDQzMDAwMENDNENDODAwMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDVEMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDQzMDAwMENDNENDODAwMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDVEMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDQzMDAwMENDNENDODAwMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDVEMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDQzMDAwMENDNENDODAwMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDVENCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDQzMDAwMENDNENDODAwMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDVENSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDQzMDAwMENDNENDODAwMiBtbWNyYTowWDAwMDAwMDAxCisKKyNHcm91cCA5NCBwbV9meHUxLCBGaXhlZCBQb2ludCBldmVudHMKK2V2ZW50OjBYNUUwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDI0MjQyNDI0IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNUUxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDI0MjQyNDI0IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNUUyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDI0MjQyNDI0IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNUUzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDI0MjQyNDI0IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNUU0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDI0MjQyNDI0IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNUU1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDI0MjQyNDI0IG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDk1IHBtX2Z4dTIsIEZpeGVkIFBvaW50IGV2ZW50cworZXZlbnQ6MFg1RjAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwMDAwMDA2MDQyMjEwMjAgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg1RjEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwMDAwMDA2MDQyMjEwMjAgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg1RjIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwMDAwMDA2MDQyMjEwMjAgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg1RjMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwMDAwMDA2MDQyMjEwMjAgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg1RjQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwMDAwMDA2MDQyMjEwMjAgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg1RjUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwMDAwMDA2MDQyMjEwMjAgbW1jcmE6MFgwMDAwMDAwMQorCisjR3JvdXAgOTYgcG1fZnh1MywgRml4ZWQgUG9pbnQgZXZlbnRzCitldmVudDowWDYwMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDA0MDAwMDM4Njg4QzRDQyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDYwMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDA0MDAwMDM4Njg4QzRDQyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDYwMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDA0MDAwMDM4Njg4QzRDQyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDYwMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDA0MDAwMDM4Njg4QzRDQyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDYwNCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDA0MDAwMDM4Njg4QzRDQyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDYwNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDA0MDAwMDM4Njg4QzRDQyBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCA5NyBwbV9zbXRfcHJpb3JpdGllczEsIFRocmVhZCBwcmlvcml0eSBldmVudHMKK2V2ZW50OjBYNjEwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDA1MDAwRkM2Q0NDNkM4IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNjExIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDA1MDAwRkM2Q0NDNkM4IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNjEyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDA1MDAwRkM2Q0NDNkM4IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNjEzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDA1MDAwRkM2Q0NDNkM4IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNjE0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDA1MDAwRkM2Q0NDNkM4IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNjE1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDA1MDAwRkM2Q0NDNkM4IG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDk4IHBtX3NtdF9wcmlvcml0aWVzMiwgVGhyZWFkIHByaW9yaXR5IGV2ZW50cworZXZlbnQ6MFg2MjAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDUwMDBGQzRDQUNBQ0MgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg2MjEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDUwMDBGQzRDQUNBQ0MgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg2MjIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDUwMDBGQzRDQUNBQ0MgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg2MjMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDUwMDBGQzRDQUNBQ0MgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg2MjQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDUwMDBGQzRDQUNBQ0MgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg2MjUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDUwMDBGQzRDQUNBQ0MgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgOTkgcG1fc210X3ByaW9yaXRpZXMzLCBUaHJlYWQgcHJpb3JpdHkgZXZlbnRzCitldmVudDowWDYzMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwNTAwMEZDMkM4QzRDMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDYzMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwNTAwMEZDMkM4QzRDMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDYzMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwNTAwMEZDMkM4QzRDMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDYzMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwNTAwMEZDMkM4QzRDMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDYzNCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwNTAwMEZDMkM4QzRDMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDYzNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwNTAwMEZDMkM4QzRDMiBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxMDAgcG1fc210X3ByaW9yaXRpZXM0LCBUaHJlYWQgcHJpb3JpdHkgZXZlbnRzCitldmVudDowWDY0MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwNTAwMEFDMDE2QzAwMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDY0MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwNTAwMEFDMDE2QzAwMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDY0MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwNTAwMEFDMDE2QzAwMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDY0MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwNTAwMEFDMDE2QzAwMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDY0NCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwNTAwMEFDMDE2QzAwMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDY0NSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwNTAwMEFDMDE2QzAwMiBtbWNyYTowWDAwMDAwMDAxCisKKyNHcm91cCAxMDEgcG1fc210X2JvdGgsIFRocmVhZCBjb21tb24gZXZlbnRzCitldmVudDowWDY1MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAxMDAwMDAxNjI2MDIwOCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDY1MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAxMDAwMDAxNjI2MDIwOCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDY1MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAxMDAwMDAxNjI2MDIwOCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDY1MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAxMDAwMDAxNjI2MDIwOCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDY1NCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAxMDAwMDAxNjI2MDIwOCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDY1NSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAxMDAwMDAxNjI2MDIwOCBtbWNyYTowWDAwMDAwMDAxCisKKyNHcm91cCAxMDIgcG1fc210X3NlbGVjdGlvbiwgVGhyZWFkIHNlbGVjdGlvbgorZXZlbnQ6MFg2NjAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwOTAwMDAwODYwMjgwODIgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg2NjEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwOTAwMDAwODYwMjgwODIgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg2NjIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwOTAwMDAwODYwMjgwODIgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg2NjMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwOTAwMDAwODYwMjgwODIgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg2NjQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwOTAwMDAwODYwMjgwODIgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg2NjUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwOTAwMDAwODYwMjgwODIgbW1jcmE6MFgwMDAwMDAwMQorCisjR3JvdXAgMTAzIHBtX3NtdF9zZWxlY3RvdmVyMSwgVGhyZWFkIHNlbGVjdGlvbiBvdmVyaWRlCitldmVudDowWDY3MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDA1MDAwMDAwMjgwODQ4OCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDY3MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDA1MDAwMDAwMjgwODQ4OCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDY3MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDA1MDAwMDAwMjgwODQ4OCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDY3MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDA1MDAwMDAwMjgwODQ4OCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDY3NCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDA1MDAwMDAwMjgwODQ4OCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDY3NSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDA1MDAwMDAwMjgwODQ4OCBtbWNyYTowWDAwMDAwMDAxCisKKyNHcm91cCAxMDQgcG1fc210X3NlbGVjdG92ZXIyLCBUaHJlYWQgc2VsZWN0aW9uIG92ZXJpZGUKK2V2ZW50OjBYNjgwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDEwMDAwMDAyMUU4QTg2IG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYNjgxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDEwMDAwMDAyMUU4QTg2IG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYNjgyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDEwMDAwMDAyMUU4QTg2IG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYNjgzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDEwMDAwMDAyMUU4QTg2IG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYNjg0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDEwMDAwMDAyMUU4QTg2IG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYNjg1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDEwMDAwMDAyMUU4QTg2IG1tY3JhOjBYMDAwMDAwMDEKKworI0dyb3VwIDEwNSBwbV9mYWJyaWMxLCBGYWJyaWMgZXZlbnRzCitldmVudDowWDY5MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzA1NTAwMDU4RUNFOEVDRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDY5MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzA1NTAwMDU4RUNFOEVDRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDY5MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzA1NTAwMDU4RUNFOEVDRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDY5MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzA1NTAwMDU4RUNFOEVDRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDY5NCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzA1NTAwMDU4RUNFOEVDRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDY5NSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzA1NTAwMDU4RUNFOEVDRSBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxMDYgcG1fZmFicmljMiwgRmFicmljIGRhdGEgbW92ZW1lbnQKK2V2ZW50OjBYNkEwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1MDA4NThFQ0U4RUNFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNkExIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1MDA4NThFQ0U4RUNFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNkEyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1MDA4NThFQ0U4RUNFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNkEzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1MDA4NThFQ0U4RUNFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNkE0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1MDA4NThFQ0U4RUNFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNkE1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1MDA4NThFQ0U4RUNFIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDEwNyBwbV9mYWJyaWMzLCBGYWJyaWMgZGF0YSBtb3ZlbWVudAorZXZlbnQ6MFg2QjAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTUwMTg1OEVDRThFQ0UgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg2QjEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTUwMTg1OEVDRThFQ0UgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg2QjIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTUwMTg1OEVDRThFQ0UgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg2QjMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTUwMTg1OEVDRThFQ0UgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg2QjQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTUwMTg1OEVDRThFQ0UgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg2QjUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTUwMTg1OEVDRThFQ0UgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMTA4IHBtX2ZhYnJpYzQsIEZhYnJpYyBkYXRhIG1vdmVtZW50CitldmVudDowWDZDMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNzA1NDAxMDY4RUNFQzY4RSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDZDMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNzA1NDAxMDY4RUNFQzY4RSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDZDMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNzA1NDAxMDY4RUNFQzY4RSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDZDMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNzA1NDAxMDY4RUNFQzY4RSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDZDNCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNzA1NDAxMDY4RUNFQzY4RSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDZDNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNzA1NDAxMDY4RUNFQzY4RSBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxMDkgcG1fc25vb3AxLCBTbm9vcCByZXRyeQorZXZlbnQ6MFg2RDAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTUwMDA1OENDQzhDQ0MgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg2RDEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTUwMDA1OENDQzhDQ0MgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg2RDIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTUwMDA1OENDQzhDQ0MgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg2RDMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTUwMDA1OENDQzhDQ0MgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg2RDQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTUwMDA1OENDQzhDQ0MgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg2RDUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTUwMDA1OENDQzhDQ0MgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMTEwIHBtX3Nub29wMiwgU25vb3AgcmVhZCByZXRyeQorZXZlbnQ6MFg2RTAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTQwQTA0OENDQzhDMDIgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg2RTEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTQwQTA0OENDQzhDMDIgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg2RTIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTQwQTA0OENDQzhDMDIgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg2RTMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTQwQTA0OENDQzhDMDIgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg2RTQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTQwQTA0OENDQzhDMDIgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg2RTUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTQwQTA0OENDQzhDMDIgbW1jcmE6MFgwMDAwMDAwMQorCisjR3JvdXAgMTExIHBtX3Nub29wMywgU25vb3Agd3JpdGUgcmV0cnkKK2V2ZW50OjBYNkYwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1MEMwNThDQ0M4Q0NDIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNkYxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1MEMwNThDQ0M4Q0NDIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNkYyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1MEMwNThDQ0M4Q0NDIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNkYzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1MEMwNThDQ0M4Q0NDIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNkY0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1MEMwNThDQ0M4Q0NDIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNkY1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1MEMwNThDQ0M4Q0NDIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDExMiBwbV9zbm9vcDQsIFNub29wIHBhcnRpYWwgd3JpdGUgcmV0cnkKK2V2ZW50OjBYNzAwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1MEUwNThDQ0M4Q0NDIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNzAxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1MEUwNThDQ0M4Q0NDIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNzAyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1MEUwNThDQ0M4Q0NDIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNzAzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1MEUwNThDQ0M4Q0NDIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNzA0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1MEUwNThDQ0M4Q0NDIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNzA1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1MEUwNThDQ0M4Q0NDIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDExMyBwbV9tZW1fcnEsIE1lbW9yeSByZWFkIHF1ZXVlIGRpc3BhdGNoCitldmVudDowWDcxMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNzA1NDAyMDU4Q0NDOENDRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDcxMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNzA1NDAyMDU4Q0NDOENDRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDcxMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNzA1NDAyMDU4Q0NDOENDRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDcxMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNzA1NDAyMDU4Q0NDOENDRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDcxNCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNzA1NDAyMDU4Q0NDOENDRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDcxNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNzA1NDAyMDU4Q0NDOENDRSBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxMTQgcG1fbWVtX3JlYWQsIE1lbW9yeSByZWFkIGNvbXBsZXRlIGFuZCBjYW5jZWwKK2V2ZW50OjBYNzIwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU0MDQwNDhDQ0M4QzA2IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNzIxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU0MDQwNDhDQ0M4QzA2IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNzIyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU0MDQwNDhDQ0M4QzA2IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNzIzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU0MDQwNDhDQ0M4QzA2IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNzI0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU0MDQwNDhDQ0M4QzA2IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNzI1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU0MDQwNDhDQ0M4QzA2IG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDExNSBwbV9tZW1fd3EsIE1lbW9yeSB3cml0ZSBxdWV1ZSBkaXNwYXRjaAorZXZlbnQ6MFg3MzAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTUwNjA1OENDQzhDQ0MgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg3MzEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTUwNjA1OENDQzhDQ0MgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg3MzIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTUwNjA1OENDQzhDQ0MgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg3MzMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTUwNjA1OENDQzhDQ0MgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg3MzQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTUwNjA1OENDQzhDQ0MgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg3MzUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTUwNjA1OENDQzhDQ0MgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMTE2IHBtX21lbV9wd3EsIE1lbW9yeSBwYXJ0aWFsIHdyaXRlIHF1ZXVlCitldmVudDowWDc0MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzA1NTA4MDU4Q0NDOENDQyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDc0MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzA1NTA4MDU4Q0NDOENDQyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDc0MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzA1NTA4MDU4Q0NDOENDQyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDc0MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzA1NTA4MDU4Q0NDOENDQyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDc0NCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzA1NTA4MDU4Q0NDOENDQyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDc0NSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzA1NTA4MDU4Q0NDOENDQyBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxMTcgcG1fdGhyZXNob2xkLCBUaHJlc2hvbGRpbmcKK2V2ZW50OjBYNzUwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDA4MDAwNDA0QzQxNjI4IG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYNzUxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDA4MDAwNDA0QzQxNjI4IG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYNzUyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDA4MDAwNDA0QzQxNjI4IG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYNzUzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDA4MDAwNDA0QzQxNjI4IG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYNzU0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDA4MDAwNDA0QzQxNjI4IG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYNzU1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDA4MDAwNDA0QzQxNjI4IG1tY3JhOjBYMDAwMDAwMDEKKworI0dyb3VwIDExOCBwbV9tcmtfZ3JwMSwgTWFya2VkIGdyb3VwIGV2ZW50cworZXZlbnQ6MFg3NjAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDgwMDA0MDRDNjBBMjYgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg3NjEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDgwMDA0MDRDNjBBMjYgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg3NjIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDgwMDA0MDRDNjBBMjYgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg3NjMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDgwMDA0MDRDNjBBMjYgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg3NjQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDgwMDA0MDRDNjBBMjYgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg3NjUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDgwMDA0MDRDNjBBMjYgbW1jcmE6MFgwMDAwMDAwMQorCisjR3JvdXAgMTE5IHBtX21ya19ncnAyLCBNYXJrZWQgZ3JvdXAgZXZlbnRzCitldmVudDowWDc3MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDEwMzAwMDMyQTBBQzgyMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDc3MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDEwMzAwMDMyQTBBQzgyMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDc3MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDEwMzAwMDMyQTBBQzgyMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDc3MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDEwMzAwMDMyQTBBQzgyMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDc3NCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDEwMzAwMDMyQTBBQzgyMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDc3NSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDEwMzAwMDMyQTBBQzgyMiBtbWNyYTowWDAwMDAwMDAxCisKKyNHcm91cCAxMjAgcG1fbXJrX2Rzb3VyY2UxLCBNYXJrZWQgZGF0YSBmcm9tIAorZXZlbnQ6MFg3ODAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAxMEIwMDBGMEU0MDQ0NDQgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg3ODEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAxMEIwMDBGMEU0MDQ0NDQgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg3ODIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAxMEIwMDBGMEU0MDQ0NDQgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg3ODMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAxMEIwMDBGMEU0MDQ0NDQgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg3ODQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAxMEIwMDBGMEU0MDQ0NDQgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg3ODUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAxMEIwMDBGMEU0MDQ0NDQgbW1jcmE6MFgwMDAwMDAwMQorCisjR3JvdXAgMTIxIHBtX21ya19kc291cmNlMiwgTWFya2VkIGRhdGEgZnJvbQorZXZlbnQ6MFg3OTAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAxMEIwMDBDMkU0NDAyMTAgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg3OTEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAxMEIwMDBDMkU0NDAyMTAgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg3OTIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAxMEIwMDBDMkU0NDAyMTAgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg3OTMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAxMEIwMDBDMkU0NDAyMTAgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg3OTQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAxMEIwMDBDMkU0NDAyMTAgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg3OTUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAxMEIwMDBDMkU0NDAyMTAgbW1jcmE6MFgwMDAwMDAwMQorCisjR3JvdXAgMTIyIHBtX21ya19kc291cmNlMywgTWFya2VkIGRhdGEgZnJvbQorZXZlbnQ6MFg3QTAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAxMEIwMDBGMUM0ODRDNEMgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg3QTEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAxMEIwMDBGMUM0ODRDNEMgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg3QTIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAxMEIwMDBGMUM0ODRDNEMgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg3QTMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAxMEIwMDBGMUM0ODRDNEMgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg3QTQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAxMEIwMDBGMUM0ODRDNEMgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg3QTUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAxMEIwMDBGMUM0ODRDNEMgbW1jcmE6MFgwMDAwMDAwMQorCisjR3JvdXAgMTIzIHBtX21ya19kc291cmNlNCwgTWFya2VkIGRhdGEgZnJvbQorZXZlbnQ6MFg3QjAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAxMEIwMDBGNDI0NjJFNDIgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg3QjEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAxMEIwMDBGNDI0NjJFNDIgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg3QjIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAxMEIwMDBGNDI0NjJFNDIgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg3QjMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAxMEIwMDBGNDI0NjJFNDIgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg3QjQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAxMEIwMDBGNDI0NjJFNDIgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg3QjUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAxMEIwMDBGNDI0NjJFNDIgbW1jcmE6MFgwMDAwMDAwMQorCisjR3JvdXAgMTI0IHBtX21ya19kc291cmNlNSwgTWFya2VkIGRhdGEgZnJvbQorZXZlbnQ6MFg3QzAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAxMEIwMDBGM0M0QzQwNDAgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg3QzEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAxMEIwMDBGM0M0QzQwNDAgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg3QzIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAxMEIwMDBGM0M0QzQwNDAgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg3QzMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAxMEIwMDBGM0M0QzQwNDAgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg3QzQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAxMEIwMDBGM0M0QzQwNDAgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg3QzUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAxMEIwMDBGM0M0QzQwNDAgbW1jcmE6MFgwMDAwMDAwMQorCisjR3JvdXAgMTI1IHBtX21ya19kc291cmNlNiwgTWFya2VkIGRhdGEgZnJvbQorZXZlbnQ6MFg3RDAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAxMEIwMDBENDY0NjAyNDYgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg3RDEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAxMEIwMDBENDY0NjAyNDYgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg3RDIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAxMEIwMDBENDY0NjAyNDYgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg3RDMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAxMEIwMDBENDY0NjAyNDYgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg3RDQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAxMEIwMDBENDY0NjAyNDYgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg3RDUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAxMEIwMDBENDY0NjAyNDYgbW1jcmE6MFgwMDAwMDAwMQorCisjR3JvdXAgMTI2IHBtX21ya19kc291cmNlNywgTWFya2VkIGRhdGEgZnJvbQorZXZlbnQ6MFg3RTAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAxMEIwMDBGNEU0RTNDNEUgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg3RTEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAxMEIwMDBGNEU0RTNDNEUgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg3RTIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAxMEIwMDBGNEU0RTNDNEUgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg3RTMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAxMEIwMDBGNEU0RTNDNEUgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg3RTQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAxMEIwMDBGNEU0RTNDNEUgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg3RTUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAxMEIwMDBGNEU0RTNDNEUgbW1jcmE6MFgwMDAwMDAwMQorCisjR3JvdXAgMTI3IHBtX21ya19kdGxicmVmLCBNYXJrZWQgZGF0YSBUTEIgcmVmZXJlbmNlcworZXZlbnQ6MFg3RjAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAyMEMwMDBGMEMwQzBDMEMgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg3RjEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAyMEMwMDBGMEMwQzBDMEMgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg3RjIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAyMEMwMDBGMEMwQzBDMEMgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg3RjMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAyMEMwMDBGMEMwQzBDMEMgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg3RjQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAyMEMwMDBGMEMwQzBDMEMgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg3RjUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAyMEMwMDBGMEMwQzBDMEMgbW1jcmE6MFgwMDAwMDAwMQorCisjR3JvdXAgMTI4IHBtX21ya19kdGxibWlzcywgTWFya2VkIGRhdGEgVExCIG1pc3NlcworZXZlbnQ6MFg4MDAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAyMEMwMDBGMUExQTFBMUEgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg4MDEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAyMEMwMDBGMUExQTFBMUEgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg4MDIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAyMEMwMDBGMUExQTFBMUEgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg4MDMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAyMEMwMDBGMUExQTFBMUEgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg4MDQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAyMEMwMDBGMUExQTFBMUEgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg4MDUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAyMEMwMDBGMUExQTFBMUEgbW1jcmE6MFgwMDAwMDAwMQorCisjR3JvdXAgMTI5IHBtX21ya19kdGxiX2RzbGIsIE1hcmtlZCBkYXRhIFRMQiByZWZlcmVuY2VzIGFuZCBtaXNzZXMgYW5kIG1hcmtlZCBkYXRhIFNMQiBtaXNzZXMKK2V2ZW50OjBYODEwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwNjNDMDAwOEM4QUM4RTFFIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYODExIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwNjNDMDAwOEM4QUM4RTFFIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYODEyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwNjNDMDAwOEM4QUM4RTFFIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYODEzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwNjNDMDAwOEM4QUM4RTFFIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYODE0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwNjNDMDAwOEM4QUM4RTFFIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYODE1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwNjNDMDAwOEM4QUM4RTFFIG1tY3JhOjBYMDAwMDAwMDEKKworI0dyb3VwIDEzMCBwbV9tcmtfbGJyZWYsIE1hcmtlZCBUTEIgYW5kIFNMQiByZWZlcmVuY2VzCitldmVudDowWDgyMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDYzQzAwMEEwQzAyMEM4RSBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDgyMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDYzQzAwMEEwQzAyMEM4RSBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDgyMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDYzQzAwMEEwQzAyMEM4RSBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDgyMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDYzQzAwMEEwQzAyMEM4RSBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDgyNCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDYzQzAwMEEwQzAyMEM4RSBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDgyNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDYzQzAwMEEwQzAyMEM4RSBtbWNyYTowWDAwMDAwMDAxCisKKyNHcm91cCAxMzEgcG1fbXJrX2xzbWlzcywgTWFya2VkIGxvYWQgYW5kIHN0b3JlIG1pc3MKK2V2ZW50OjBYODMwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDA4MDAwODEwMDIwNjBBIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYODMxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDA4MDAwODEwMDIwNjBBIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYODMyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDA4MDAwODEwMDIwNjBBIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYODMzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDA4MDAwODEwMDIwNjBBIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYODM0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDA4MDAwODEwMDIwNjBBIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYODM1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDA4MDAwODEwMDIwNjBBIG1tY3JhOjBYMDAwMDAwMDEKKworI0dyb3VwIDEzMiBwbV9tcmtfdWxzZmx1c2gsIE1hcmsgdW5hbGlnbmVkIGxvYWQgYW5kIHN0b3JlIGZsdXNoZXMKK2V2ZW50OjBYODQwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDI4MDAwNDA2QzYyMDIwIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYODQxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDI4MDAwNDA2QzYyMDIwIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYODQyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDI4MDAwNDA2QzYyMDIwIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYODQzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDI4MDAwNDA2QzYyMDIwIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYODQ0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDI4MDAwNDA2QzYyMDIwIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYODQ1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDI4MDAwNDA2QzYyMDIwIG1tY3JhOjBYMDAwMDAwMDEKKworI0dyb3VwIDEzMyBwbV9tcmtfbWlzYywgTWlzYyBtYXJrZWQgaW5zdHJ1Y3Rpb25zCitldmVudDowWDg1MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwODAwMDhDQzA2MjgxNiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDg1MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwODAwMDhDQzA2MjgxNiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDg1MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwODAwMDhDQzA2MjgxNiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDg1MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwODAwMDhDQzA2MjgxNiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDg1NCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwODAwMDhDQzA2MjgxNiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDg1NSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwODAwMDhDQzA2MjgxNiBtbWNyYTowWDAwMDAwMDAxCisKKyNHcm91cCAxMzQgcG1fbHNyZWZfTDEsIExvYWQvU3RvcmUgb3BlcmF0aW9ucyBhbmQgTDEgYWN0aXZpdHkKK2V2ZW50OjBYODYwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg4MDMzMDAwQzBFMUEyMDIwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYODYxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg4MDMzMDAwQzBFMUEyMDIwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYODYyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg4MDMzMDAwQzBFMUEyMDIwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYODYzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg4MDMzMDAwQzBFMUEyMDIwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYODY0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg4MDMzMDAwQzBFMUEyMDIwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYODY1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg4MDMzMDAwQzBFMUEyMDIwIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDEzNSBwbV9sc3JlZl9MMkwzLCBMb2FkL1N0b3JlIG9wZXJhdGlvbnMgYW5kIEwyLEwzIGFjdGl2aXR5CitldmVudDowWDg3MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAzMzAwMEMxQzBFMjAyMCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDg3MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAzMzAwMEMxQzBFMjAyMCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDg3MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAzMzAwMEMxQzBFMjAyMCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDg3MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAzMzAwMEMxQzBFMjAyMCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDg3NCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAzMzAwMEMxQzBFMjAyMCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDg3NSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAzMzAwMEMxQzBFMjAyMCBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxMzYgcG1fbHNyZWZfdGxibWlzcywgTG9hZC9TdG9yZSBvcGVyYXRpb25zIGFuZCBUTEIgbWlzc2VzCitldmVudDowWDg4MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDBCMDAwMDA4MDg4MjAyMCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDg4MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDBCMDAwMDA4MDg4MjAyMCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDg4MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDBCMDAwMDA4MDg4MjAyMCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDg4MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDBCMDAwMDA4MDg4MjAyMCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDg4NCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDBCMDAwMDA4MDg4MjAyMCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDg4NSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDBCMDAwMDA4MDg4MjAyMCBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxMzcgcG1fRG1pc3MsIERhdGEgY2FjaGUgbWlzc2VzCitldmVudDowWDg5MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAzMzAwMEMxQzBFMTA4NiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDg5MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAzMzAwMEMxQzBFMTA4NiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDg5MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAzMzAwMEMxQzBFMTA4NiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDg5MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAzMzAwMEMxQzBFMTA4NiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDg5NCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAzMzAwMEMxQzBFMTA4NiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDg5NSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAzMzAwMEMxQzBFMTA4NiBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxMzggcG1fcHJlZmV0Y2hYLCBQcmVmZXRjaCBldmVudHMKK2V2ZW50OjBYOEEwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg4NTMzMDAwNjFFQ0NDRTg2IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYOEExIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg4NTMzMDAwNjFFQ0NDRTg2IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYOEEyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg4NTMzMDAwNjFFQ0NDRTg2IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYOEEzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg4NTMzMDAwNjFFQ0NDRTg2IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYOEE0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg4NTMzMDAwNjFFQ0NDRTg2IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYOEE1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg4NTMzMDAwNjFFQ0NDRTg2IG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDEzOSBwbV9icmFuY2hYLCBCcmFuY2ggb3BlcmF0aW9ucworZXZlbnQ6MFg4QjAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDgwMDAwMDBGMEUwRTBFQzggbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg4QjEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDgwMDAwMDBGMEUwRTBFQzggbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg4QjIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDgwMDAwMDBGMEUwRTBFQzggbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg4QjMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDgwMDAwMDBGMEUwRTBFQzggbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg4QjQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDgwMDAwMDBGMEUwRTBFQzggbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg4QjUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDgwMDAwMDBGMEUwRTBFQzggbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMTQwIHBtX2ZwdVgxLCBGbG9hdGluZyBwb2ludCBldmVudHMgYnkgdW5pdAorZXZlbnQ6MFg4QzAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDBEQzJDQTg2QzAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg4QzEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDBEQzJDQTg2QzAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg4QzIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDBEQzJDQTg2QzAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg4QzMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDBEQzJDQTg2QzAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg4QzQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDBEQzJDQTg2QzAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg4QzUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDBEQzJDQTg2QzAgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMTQxIHBtX2ZwdVgyLCBGbG9hdGluZyBwb2ludCBldmVudHMgYnkgdW5pdAorZXZlbnQ6MFg4RDAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwODI4QTgyOEEgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg4RDEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwODI4QTgyOEEgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg4RDIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwODI4QTgyOEEgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg4RDMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwODI4QTgyOEEgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg4RDQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwODI4QTgyOEEgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg4RDUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwODI4QTgyOEEgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMTQyIHBtX2ZwdVgzLCBGbG9hdGluZyBwb2ludCBldmVudHMgYnkgdW5pdAorZXZlbnQ6MFg4RTAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwODY4RTg2OEUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg4RTEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwODY4RTg2OEUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg4RTIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwODY4RTg2OEUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg4RTMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwODY4RTg2OEUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg4RTQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwODY4RTg2OEUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg4RTUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwODY4RTg2OEUgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMTQzIHBtX2ZwdVg0LCBGbG9hdGluZyBwb2ludCBhbmQgTDEgZXZlbnRzCitldmVudDowWDhGMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAzMDAwMDAyMDEwMjAyMCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDhGMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAzMDAwMDAyMDEwMjAyMCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDhGMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAzMDAwMDAyMDEwMjAyMCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDhGMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAzMDAwMDAyMDEwMjAyMCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDhGNCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAzMDAwMDAyMDEwMjAyMCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDhGNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAzMDAwMDAyMDEwMjAyMCBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxNDQgcG1fZnB1WDUsIEZsb2F0aW5nIHBvaW50IGV2ZW50cworZXZlbnQ6MFg5MDAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDBDMjAyMDg2OEUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg5MDEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDBDMjAyMDg2OEUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg5MDIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDBDMjAyMDg2OEUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg5MDMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDBDMjAyMDg2OEUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg5MDQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDBDMjAyMDg2OEUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg5MDUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDBDMjAyMDg2OEUgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMTQ1IHBtX2ZwdVg2LCBGbG9hdGluZyBwb2ludCBldmVudHMKK2V2ZW50OjBYOTEwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDEwMjAyMDEwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYOTExIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDEwMjAyMDEwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYOTEyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDEwMjAyMDEwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYOTEzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDEwMjAyMDEwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYOTE0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDEwMjAyMDEwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYOTE1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDEwMjAyMDEwIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDE0NiBwbV9mcHVYNywgRmxvYXRpbmcgcG9pbnQgZXZlbnRzCitldmVudDowWDkyMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDIyMDEwNTAxMCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDkyMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDIyMDEwNTAxMCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDkyMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDIyMDEwNTAxMCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDkyMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDIyMDEwNTAxMCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDkyNCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDIyMDEwNTAxMCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDkyNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDIyMDEwNTAxMCBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxNDcgcG1faHBtY291bnQxLCBIUE0gZ3JvdXAgZm9yIHNldCAxIAorZXZlbnQ6MFg5MzAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMUUyODFFMTAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg5MzEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMUUyODFFMTAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg5MzIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMUUyODFFMTAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg5MzMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMUUyODFFMTAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg5MzQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMUUyODFFMTAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg5MzUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMUUyODFFMTAgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMTQ4IHBtX2hwbWNvdW50MiwgSFBNIGdyb3VwIGZvciBzZXQgMgorZXZlbnQ6MFg5NDAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDA0MzAwMDA0MUUyMDEyMjAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg5NDEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDA0MzAwMDA0MUUyMDEyMjAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg5NDIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDA0MzAwMDA0MUUyMDEyMjAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg5NDMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDA0MzAwMDA0MUUyMDEyMjAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg5NDQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDA0MzAwMDA0MUUyMDEyMjAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg5NDUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDA0MzAwMDA0MUUyMDEyMjAgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMTQ5IHBtX2hwbWNvdW50MywgSFBNIGdyb3VwIGZvciBzZXQgMyAKK2V2ZW50OjBYOTUwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MDMwMDAwNDFFQzAxMDg2IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYOTUxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MDMwMDAwNDFFQzAxMDg2IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYOTUyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MDMwMDAwNDFFQzAxMDg2IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYOTUzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MDMwMDAwNDFFQzAxMDg2IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYOTU0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MDMwMDAwNDFFQzAxMDg2IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYOTU1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MDMwMDAwNDFFQzAxMDg2IG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDE1MCBwbV9ocG1jb3VudDQsIEhQTSBncm91cCBmb3Igc2V0IDcKK2V2ZW50OjBYOTYwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMEIwMDAwMDEwMUUyMDIwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYOTYxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMEIwMDAwMDEwMUUyMDIwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYOTYyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMEIwMDAwMDEwMUUyMDIwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYOTYzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMEIwMDAwMDEwMUUyMDIwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYOTY0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMEIwMDAwMDEwMUUyMDIwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYOTY1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMEIwMDAwMDEwMUUyMDIwIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDE1MSBwbV9mbG9wLCBGbG9hdGluZyBwb2ludCBvcGVyYXRpb25zCitldmVudDowWDk3MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAxMDEwNTA1MCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDk3MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAxMDEwNTA1MCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDk3MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAxMDEwNTA1MCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDk3MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAxMDEwNTA1MCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDk3NCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAxMDEwNTA1MCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDk3NSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAxMDEwNTA1MCBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxNTIgcG1fZXByb2YxLCBHcm91cCBmb3IgdXNlIHdpdGggZXByb2YKK2V2ZW50OjBYOTgwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDMwMDAwMDEyMUUxMDhFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYOTgxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDMwMDAwMDEyMUUxMDhFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYOTgyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDMwMDAwMDEyMUUxMDhFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYOTgzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDMwMDAwMDEyMUUxMDhFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYOTg0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDMwMDAwMDEyMUUxMDhFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYOTg1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDMwMDAwMDEyMUUxMDhFIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDE1MyBwbV9lcHJvZjIsIEdyb3VwIGZvciB1c2Ugd2l0aCBlcHJvZgorZXZlbnQ6MFg5OTAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMzAwMDAwMTI1MDEyMjAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg5OTEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMzAwMDAwMTI1MDEyMjAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg5OTIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMzAwMDAwMTI1MDEyMjAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg5OTMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMzAwMDAwMTI1MDEyMjAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg5OTQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMzAwMDAwMTI1MDEyMjAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg5OTUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMzAwMDAwMTI1MDEyMjAgbW1jcmE6MFgwMDAwMDAwMApkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL3BwYzY0L3Bvd2VyNSsvZXZlbnRzIGIvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL3BwYzY0L3Bvd2VyNSsvZXZlbnRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2MjRjMzkKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9ldmVudHMvcHBjNjQvcG93ZXI1Ky9ldmVudHMKQEAgLTAsMCArMSwxMjQyIEBACisjUFBDNjQgUG93ZXI1KyBldmVudHMKKyMKKyMgIFdpdGhpbiBlYWNoIGdyb3VwIHRoZSBldmVudCBuYW1lcyBtdXN0IGJlIHVuaXF1ZS4gIEVhY2ggZXZlbnQgaW4gYSBncm91cCBpcworIyAgYXNzaWduZWQgdG8gYSB1bmlxdWUgY291bnRlci4gIFRoZSBncm91cHMgYXJlIGZyb20gdGhlIGdyb3VwcyBkZWZpbmVkIGluIHRoZQorIyAgUGVyZm9ybWFuY2UgTW9uaXRvciBVbml0IHVzZXIgZ3VpZGUgZm9yIHRoaXMgcHJvY2Vzc29yLgorIworIyAgT25seSBldmVudHMgd2l0aGluIHRoZSBzYW1lIGdyb3VwIGNhbiBiZSBzZWxlY3RlZCBzaW11bHRhbmVvdXNseS4KKyMgIEVhY2ggZXZlbnQgaXMgZ2l2ZW4gYSB1bmlxdWUgZXZlbnQgbnVtYmVyLiAgVGhlIGV2ZW50IG51bWJlciBpcyB1c2VkIGJ5IHRoZQorIyAgT1Byb2ZpbGUgY29kZSB0byByZXNvbHZlIGV2ZW50IG5hbWVzIGZvciB0aGUgcG9zdC1wcm9jZXNzaW5nLiAgVGhpcyBpcyBkb25lCisjICB0byBwcmVzZXJ2ZSBjb21wYXRpYmlsaXR5IHdpdGggdGhlIHJlc3Qgb2YgdGhlIE9Qcm9maWxlIGNvZGUuICBUaGUgZXZlbnQKKyMgIG51bWJlcnMgYXJlIGZvcm1hdHRlZCBhcyBmb2xsb3dzOiA8Z3JvdXBfbnVtPmNvbmNhdCg8Y291bnRlciBmb3IgdGhlIGV2ZW50PikuCisKKyNHcm91cCBEZWZhdWx0CitldmVudDowWDAwMSBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOkNZQ0xFUyA6IFByb2Nlc3NvciBDeWNsZXMgdXNpbmcgY29udGludW91cyBzYW1wbGluZworCisjR3JvdXAgMCB3aXRoIHJhbmRvbSBzYW1wbGluZworZXZlbnQ6MFgwMDIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpDWUNMRVNfUk5EX1NNUEwgOiBQcm9jZXNzb3IgQ3ljbGVzIHdpdGggcmFuZG9tIHNhbXBsaW5nCisKKworI0dyb3VwIDEgcG1fdXRpbGl6YXRpb24sIENQSSBhbmQgdXRpbGl6YXRpb24gZGF0YQorZXZlbnQ6MFgwMTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDEgOiAoR3JvdXAgMSBwbV91dGlsaXphdGlvbikgUnVuIGN5Y2xlcworZXZlbnQ6MFgwMTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMSA6IChHcm91cCAxIHBtX3V0aWxpemF0aW9uKSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDAxMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU5TVF9ESVNQX0dSUDEgOiAoR3JvdXAgMSBwbV91dGlsaXphdGlvbikgSW5zdHJ1Y3Rpb25zIGRpc3BhdGNoZWQKK2V2ZW50OjBYMDEzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDEgOiAoR3JvdXAgMSBwbV91dGlsaXphdGlvbikgUHJvY2Vzc29yIGN5Y2xlcworZXZlbnQ6MFgwMTQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQMSA6IChHcm91cCAxIHBtX3V0aWxpemF0aW9uKSBSdW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgwMTUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDEgOiAoR3JvdXAgMSBwbV91dGlsaXphdGlvbikgUnVuIGN5Y2xlcworCisjR3JvdXAgMiBwbV9jb21wbGV0aW9uLCBDb21wbGV0aW9uIGFuZCBjeWNsZSBjb3VudHMKK2V2ZW50OjBYMDIwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV8xUExVU19QUENfQ01QTF9HUlAyIDogKEdyb3VwIDIgcG1fY29tcGxldGlvbikgT25lIG9yIG1vcmUgUFBDIGluc3RydWN0aW9uIGNvbXBsZXRlZAorZXZlbnQ6MFgwMjEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0dDVF9FTVBUWV9DWUNfR1JQMiA6IChHcm91cCAyIHBtX2NvbXBsZXRpb24pIEN5Y2xlcyBHQ1QgZW1wdHkKK2V2ZW50OjBYMDIyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9HUlBfQ01QTF9HUlAyIDogKEdyb3VwIDIgcG1fY29tcGxldGlvbikgR3JvdXAgY29tcGxldGVkCitldmVudDowWDAyMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlAyIDogKEdyb3VwIDIgcG1fY29tcGxldGlvbikgUHJvY2Vzc29yIGN5Y2xlcworZXZlbnQ6MFgwMjQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQMiA6IChHcm91cCAyIHBtX2NvbXBsZXRpb24pIFJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDAyNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQMiA6IChHcm91cCAyIHBtX2NvbXBsZXRpb24pIFJ1biBjeWNsZXMKKworI0dyb3VwIDMgcG1fZ3JvdXBfZGlzcGF0Y2gsIEdyb3VwIGRpc3BhdGNoIGV2ZW50cworZXZlbnQ6MFgwMzAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0dSUF9ESVNQX1ZBTElEX0dSUDMgOiAoR3JvdXAgMyBwbV9ncm91cF9kaXNwYXRjaCkgR3JvdXAgZGlzcGF0Y2ggdmFsaWQKK2V2ZW50OjBYMDMxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9HUlBfRElTUF9SRUpFQ1RfR1JQMyA6IChHcm91cCAzIHBtX2dyb3VwX2Rpc3BhdGNoKSBHcm91cCBkaXNwYXRjaCByZWplY3RlZAorZXZlbnQ6MFgwMzIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0dSUF9ESVNQX0JMS19TQl9DWUNfR1JQMyA6IChHcm91cCAzIHBtX2dyb3VwX2Rpc3BhdGNoKSBDeWNsZXMgZ3JvdXAgZGlzcGF0Y2ggYmxvY2tlZCBieSBzY29yZWJvYXJkCitldmVudDowWDAzMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU5TVF9ESVNQX0dSUDMgOiAoR3JvdXAgMyBwbV9ncm91cF9kaXNwYXRjaCkgSW5zdHJ1Y3Rpb25zIGRpc3BhdGNoZWQKK2V2ZW50OjBYMDM0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDMgOiAoR3JvdXAgMyBwbV9ncm91cF9kaXNwYXRjaCkgUnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMDM1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAzIDogKEdyb3VwIDMgcG1fZ3JvdXBfZGlzcGF0Y2gpIFJ1biBjeWNsZXMKKworI0dyb3VwIDQgcG1fY2xiMSwgQ0xCIGZ1bGxuZXNzCitldmVudDowWDA0MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fMElOU1RfQ0xCX0NZQ19HUlA0IDogKEdyb3VwIDQgcG1fY2xiMSkgQ3ljbGVzIG5vIGluc3RydWN0aW9ucyBpbiBDTEIKK2V2ZW50OjBYMDQxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV8ySU5TVF9DTEJfQ1lDX0dSUDQgOiAoR3JvdXAgNCBwbV9jbGIxKSBDeWNsZXMgMiBpbnN0cnVjdGlvbnMgaW4gQ0xCCitldmVudDowWDA0MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fQ0xCX0VNUFRZX0NZQ19HUlA0IDogKEdyb3VwIDQgcG1fY2xiMSkgQ3ljbGVzIENMQiBlbXB0eQorZXZlbnQ6MFgwNDMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19EQVRBX0ZST01fTDM1X01PRF9DWUNfR1JQNCA6IChHcm91cCA0IHBtX2NsYjEpIE1hcmtlZCBsb2FkIGxhdGVuY3kgZnJvbSBMMy41IG1vZGlmaWVkCitldmVudDowWDA0NCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlA0IDogKEdyb3VwIDQgcG1fY2xiMSkgUnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMDQ1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlA0IDogKEdyb3VwIDQgcG1fY2xiMSkgUnVuIGN5Y2xlcworCisjR3JvdXAgNSBwbV9jbGIyLCBDTEIgZnVsbG5lc3MKK2V2ZW50OjBYMDUwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV81SU5TVF9DTEJfQ1lDX0dSUDUgOiAoR3JvdXAgNSBwbV9jbGIyKSBDeWNsZXMgNSBpbnN0cnVjdGlvbnMgaW4gQ0xCCitldmVudDowWDA1MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fNklOU1RfQ0xCX0NZQ19HUlA1IDogKEdyb3VwIDUgcG1fY2xiMikgQ3ljbGVzIDYgaW5zdHJ1Y3Rpb25zIGluIENMQgorZXZlbnQ6MFgwNTIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19MU1VfU1JRX0lOU1RfVkFMSURfR1JQNSA6IChHcm91cCA1IHBtX2NsYjIpIE1hcmtlZCBpbnN0cnVjdGlvbiB2YWxpZCBpbiBTUlEKK2V2ZW50OjBYMDUzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JT1BTX0NNUExfR1JQNSA6IChHcm91cCA1IHBtX2NsYjIpIElPUFMgaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgwNTQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQNSA6IChHcm91cCA1IHBtX2NsYjIpIFJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDA1NSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQNSA6IChHcm91cCA1IHBtX2NsYjIpIFJ1biBjeWNsZXMKKworI0dyb3VwIDYgcG1fZ2N0X2VtcHR5LCBHQ1QgZW1wdHkgcmVhc29ucworZXZlbnQ6MFgwNjAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0dDVF9OT1NMT1RfQ1lDX0dSUDYgOiAoR3JvdXAgNiBwbV9nY3RfZW1wdHkpIEN5Y2xlcyBubyBHQ1Qgc2xvdCBhbGxvY2F0ZWQKK2V2ZW50OjBYMDYxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9HQ1RfTk9TTE9UX0lDX01JU1NfR1JQNiA6IChHcm91cCA2IHBtX2djdF9lbXB0eSkgTm8gc2xvdCBpbiBHQ1QgY2F1c2VkIGJ5IEkgY2FjaGUgbWlzcworZXZlbnQ6MFgwNjIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0dDVF9OT1NMT1RfU1JRX0ZVTExfR1JQNiA6IChHcm91cCA2IHBtX2djdF9lbXB0eSkgTm8gc2xvdCBpbiBHQ1QgY2F1c2VkIGJ5IFNSUSBmdWxsCitldmVudDowWDA2MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fR0NUX05PU0xPVF9CUl9NUFJFRF9HUlA2IDogKEdyb3VwIDYgcG1fZ2N0X2VtcHR5KSBObyBzbG90IGluIEdDVCBjYXVzZWQgYnkgYnJhbmNoIG1pc3ByZWRpY3QKK2V2ZW50OjBYMDY0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDYgOiAoR3JvdXAgNiBwbV9nY3RfZW1wdHkpIFJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDA2NSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQNiA6IChHcm91cCA2IHBtX2djdF9lbXB0eSkgUnVuIGN5Y2xlcworCisjR3JvdXAgNyBwbV9nY3RfdXNhZ2UsIEdDVCBVc2FnZQorZXZlbnQ6MFgwNzAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0dDVF9VU0FHRV8wMHRvNTlfQ1lDX0dSUDcgOiAoR3JvdXAgNyBwbV9nY3RfdXNhZ2UpIEN5Y2xlcyBHQ1QgbGVzcyB0aGFuIDYwJSBmdWxsCitldmVudDowWDA3MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fR0NUX1VTQUdFXzYwdG83OV9DWUNfR1JQNyA6IChHcm91cCA3IHBtX2djdF91c2FnZSkgQ3ljbGVzIEdDVCA2MC03OSUgZnVsbAorZXZlbnQ6MFgwNzIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0dDVF9VU0FHRV84MHRvOTlfQ1lDX0dSUDcgOiAoR3JvdXAgNyBwbV9nY3RfdXNhZ2UpIEN5Y2xlcyBHQ1QgODAtOTklIGZ1bGwKK2V2ZW50OjBYMDczIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9HQ1RfRlVMTF9DWUNfR1JQNyA6IChHcm91cCA3IHBtX2djdF91c2FnZSkgQ3ljbGVzIEdDVCBmdWxsCitldmVudDowWDA3NCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlA3IDogKEdyb3VwIDcgcG1fZ2N0X3VzYWdlKSBSdW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgwNzUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDcgOiAoR3JvdXAgNyBwbV9nY3RfdXNhZ2UpIFJ1biBjeWNsZXMKKworI0dyb3VwIDggcG1fbHN1MSwgTFNVIExSUSBhbmQgTE1RIGV2ZW50cworZXZlbnQ6MFgwODAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9MUlFfUzBfQUxMT0NfR1JQOCA6IChHcm91cCA4IHBtX2xzdTEpIExSUSBzbG90IDAgYWxsb2NhdGVkCitldmVudDowWDA4MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVX0xSUV9TMF9WQUxJRF9HUlA4IDogKEdyb3VwIDggcG1fbHN1MSkgTFJRIHNsb3QgMCB2YWxpZAorZXZlbnQ6MFgwODIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9MTVFfUzBfQUxMT0NfR1JQOCA6IChHcm91cCA4IHBtX2xzdTEpIExNUSBzbG90IDAgYWxsb2NhdGVkCitldmVudDowWDA4MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVX0xNUV9TMF9WQUxJRF9HUlA4IDogKEdyb3VwIDggcG1fbHN1MSkgTE1RIHNsb3QgMCB2YWxpZAorZXZlbnQ6MFgwODQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQOCA6IChHcm91cCA4IHBtX2xzdTEpIFJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDA4NSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQOCA6IChHcm91cCA4IHBtX2xzdTEpIFJ1biBjeWNsZXMKKworI0dyb3VwIDkgcG1fbHN1MiwgTFNVIFNSUSBldmVudHMKK2V2ZW50OjBYMDkwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1VfU1JRX1MwX0FMTE9DX0dSUDkgOiAoR3JvdXAgOSBwbV9sc3UyKSBTUlEgc2xvdCAwIGFsbG9jYXRlZAorZXZlbnQ6MFgwOTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9TUlFfUzBfVkFMSURfR1JQOSA6IChHcm91cCA5IHBtX2xzdTIpIFNSUSBzbG90IDAgdmFsaWQKK2V2ZW50OjBYMDkyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1VfU1JRX1NZTkNfQ1lDX0dSUDkgOiAoR3JvdXAgOSBwbV9sc3UyKSBTUlEgc3luYyBkdXJhdGlvbgorZXZlbnQ6MFgwOTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9TUlFfRlVMTF9DWUNfR1JQOSA6IChHcm91cCA5IHBtX2xzdTIpIEN5Y2xlcyBTUlEgZnVsbAorZXZlbnQ6MFgwOTQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQOSA6IChHcm91cCA5IHBtX2xzdTIpIFJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDA5NSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQOSA6IChHcm91cCA5IHBtX2xzdTIpIFJ1biBjeWNsZXMKKworI0dyb3VwIDEwIHBtX2xzdTMsIExTVSBTUlEgYW5kIExNUSBldmVudHMKK2V2ZW50OjBYMEEwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1VfTE1RX0xIUl9NRVJHRV9HUlAxMCA6IChHcm91cCAxMCBwbV9sc3UzKSBMTVEgTEhSIG1lcmdlcworZXZlbnQ6MFgwQTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9TUlFfU1RGV0RfR1JQMTAgOiAoR3JvdXAgMTAgcG1fbHN1MykgU1JRIHN0b3JlIGZvcndhcmRlZAorZXZlbnQ6MFgwQTIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9MTVFfU1JRX0VNUFRZX0NZQ19HUlAxMCA6IChHcm91cCAxMCBwbV9sc3UzKSBDeWNsZXMgTE1RIGFuZCBTUlEgZW1wdHkKK2V2ZW50OjBYMEEzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1VfU1JRX0VNUFRZX0NZQ19HUlAxMCA6IChHcm91cCAxMCBwbV9sc3UzKSBDeWNsZXMgU1JRIGVtcHR5CitldmVudDowWDBBNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlAxMCA6IChHcm91cCAxMCBwbV9sc3UzKSBSdW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgwQTUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDEwIDogKEdyb3VwIDEwIHBtX2xzdTMpIFJ1biBjeWNsZXMKKworI0dyb3VwIDExIHBtX2xzdTQsIExTVSBTUlEgYW5kIExNUSBldmVudHMKK2V2ZW50OjBYMEIwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1VfTE1RX0ZVTExfQ1lDX0dSUDExIDogKEdyb3VwIDExIHBtX2xzdTQpIEN5Y2xlcyBMTVEgZnVsbAorZXZlbnQ6MFgwQjEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9TUlFfRlVMTF9DWUNfR1JQMTEgOiAoR3JvdXAgMTEgcG1fbHN1NCkgQ3ljbGVzIFNSUSBmdWxsCitldmVudDowWDBCMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVX0xNUV9TUlFfRU1QVFlfQ1lDX0dSUDExIDogKEdyb3VwIDExIHBtX2xzdTQpIEN5Y2xlcyBMTVEgYW5kIFNSUSBlbXB0eQorZXZlbnQ6MFgwQjMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9TUlFfRU1QVFlfQ1lDX0dSUDExIDogKEdyb3VwIDExIHBtX2xzdTQpIEN5Y2xlcyBTUlEgZW1wdHkKK2V2ZW50OjBYMEI0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDExIDogKEdyb3VwIDExIHBtX2xzdTQpIFJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDBCNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQMTEgOiAoR3JvdXAgMTEgcG1fbHN1NCkgUnVuIGN5Y2xlcworCisjR3JvdXAgMTIgcG1fcHJlZmV0Y2gxLCBQcmVmZXRjaCBzdHJlYW0gYWxsb2NhdGlvbgorZXZlbnQ6MFgwQzAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lOU1RfRlJPTV9MMk1JU1NfR1JQMTIgOiAoR3JvdXAgMTIgcG1fcHJlZmV0Y2gxKSBJbnN0cnVjdGlvbnMgZmV0Y2hlZCBtaXNzZWQgTDIKK2V2ZW50OjBYMEMxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JTlNUX0ZFVENIX0NZQ19HUlAxMiA6IChHcm91cCAxMiBwbV9wcmVmZXRjaDEpIEN5Y2xlcyBhdCBsZWFzdCAxIGluc3RydWN0aW9uIGZldGNoZWQKK2V2ZW50OjBYMEMyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQ19PVVRfT0ZfU1RSRUFNU19HUlAxMiA6IChHcm91cCAxMiBwbV9wcmVmZXRjaDEpIExTVSBEYXRhIHByZWZldGNoIG91dCBvZiBzdHJlYW1zCitldmVudDowWDBDMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRENfUFJFRl9TVFJFQU1fQUxMT0NfR1JQMTIgOiAoR3JvdXAgMTIgcG1fcHJlZmV0Y2gxKSBEIGNhY2hlIG5ldyBwcmVmZXRjaCBzdHJlYW0gYWxsb2NhdGVkCitldmVudDowWDBDNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlAxMiA6IChHcm91cCAxMiBwbV9wcmVmZXRjaDEpIFJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDBDNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQMTIgOiAoR3JvdXAgMTIgcG1fcHJlZmV0Y2gxKSBSdW4gY3ljbGVzCisKKyNHcm91cCAxMyBwbV9wcmVmZXRjaDIsIFByZWZldGNoIGV2ZW50cworZXZlbnQ6MFgwRDAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lPUFNfQ01QTF9HUlAxMyA6IChHcm91cCAxMyBwbV9wcmVmZXRjaDIpIElPUFMgaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgwRDEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0NMQl9GVUxMX0NZQ19HUlAxMyA6IChHcm91cCAxMyBwbV9wcmVmZXRjaDIpIEN5Y2xlcyBDTEIgZnVsbAorZXZlbnQ6MFgwRDIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wxX1BSRUZfR1JQMTMgOiAoR3JvdXAgMTMgcG1fcHJlZmV0Y2gyKSBMMSBjYWNoZSBkYXRhIHByZWZldGNoZXMKK2V2ZW50OjBYMEQzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JQ19QUkVGX0lOU1RBTExfR1JQMTMgOiAoR3JvdXAgMTMgcG1fcHJlZmV0Y2gyKSBJbnN0cnVjdGlvbiBwcmVmZXRjaGVkIGluc3RhbGxlZCBpbiBwcmVmZXRjaAorZXZlbnQ6MFgwRDQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQMTMgOiAoR3JvdXAgMTMgcG1fcHJlZmV0Y2gyKSBSdW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgwRDUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDEzIDogKEdyb3VwIDEzIHBtX3ByZWZldGNoMikgUnVuIGN5Y2xlcworCisjR3JvdXAgMTQgcG1fcHJlZmV0Y2gzLCBMMiBwcmVmZXRjaCBhbmQgbWlzYyBldmVudHMKK2V2ZW50OjBYMEUwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV8xSU5TVF9DTEJfQ1lDX0dSUDE0IDogKEdyb3VwIDE0IHBtX3ByZWZldGNoMykgQ3ljbGVzIDEgaW5zdHJ1Y3Rpb24gaW4gQ0xCCitldmVudDowWDBFMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVX0JVU1lfUkVKRUNUX0dSUDE0IDogKEdyb3VwIDE0IHBtX3ByZWZldGNoMykgTFNVIGJ1c3kgZHVlIHRvIHJlamVjdAorZXZlbnQ6MFgwRTIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wyX1BSRUZfR1JQMTQgOiAoR3JvdXAgMTQgcG1fcHJlZmV0Y2gzKSBMMiBjYWNoZSBwcmVmZXRjaGVzCitldmVudDowWDBFMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU9QU19DTVBMX0dSUDE0IDogKEdyb3VwIDE0IHBtX3ByZWZldGNoMykgSU9QUyBpbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDBFNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlAxNCA6IChHcm91cCAxNCBwbV9wcmVmZXRjaDMpIFJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDBFNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQMTQgOiAoR3JvdXAgMTQgcG1fcHJlZmV0Y2gzKSBSdW4gY3ljbGVzCisKKyNHcm91cCAxNSBwbV9wcmVmZXRjaDQsIE1pc2MgcHJlZmV0Y2ggYW5kIHJlamVjdCBldmVudHMKK2V2ZW50OjBYMEYwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1UwX1JFSkVDVF9TUlFfTEhTX0dSUDE1IDogKEdyb3VwIDE1IHBtX3ByZWZldGNoNCkgTFNVMCBTUlEgcmVqZWN0cworZXZlbnQ6MFgwRjEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVTFfUkVKRUNUX1NSUV9MSFNfR1JQMTUgOiAoR3JvdXAgMTUgcG1fcHJlZmV0Y2g0KSBMU1UxIFNSUSByZWplY3RzCitldmVudDowWDBGMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRENfUFJFRl9EU1RfR1JQMTUgOiAoR3JvdXAgMTUgcG1fcHJlZmV0Y2g0KSBEU1QgKERhdGEgU3RyZWFtIFRvdWNoKSBzdHJlYW0gc3RhcnQKK2V2ZW50OjBYMEYzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMl9QUkVGX0dSUDE1IDogKEdyb3VwIDE1IHBtX3ByZWZldGNoNCkgTDIgY2FjaGUgcHJlZmV0Y2hlcworZXZlbnQ6MFgwRjQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQMTUgOiAoR3JvdXAgMTUgcG1fcHJlZmV0Y2g0KSBSdW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgwRjUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDE1IDogKEdyb3VwIDE1IHBtX3ByZWZldGNoNCkgUnVuIGN5Y2xlcworCisjR3JvdXAgMTYgcG1fbHN1X3JlamVjdDEsIExTVSByZWplY3QgZXZlbnRzCitldmVudDowWDEwMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVX1JFSkVDVF9FUkFUX01JU1NfR1JQMTYgOiAoR3JvdXAgMTYgcG1fbHN1X3JlamVjdDEpIExTVSByZWplY3QgZHVlIHRvIEVSQVQgbWlzcworZXZlbnQ6MFgxMDEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9SRUpFQ1RfTE1RX0ZVTExfR1JQMTYgOiAoR3JvdXAgMTYgcG1fbHN1X3JlamVjdDEpIExTVSByZWplY3QgZHVlIHRvIExNUSBmdWxsIG9yIG1pc3NlZCBkYXRhIGNvbWluZworZXZlbnQ6MFgxMDIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZMVVNIX0lNQkFMX0dSUDE2IDogKEdyb3VwIDE2IHBtX2xzdV9yZWplY3QxKSBGbHVzaCBjYXVzZWQgYnkgdGhyZWFkIEdDVCBpbWJhbGFuY2UKK2V2ZW50OjBYMTAzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfTFNVX0ZMVVNIX1NSUV9HUlAxNiA6IChHcm91cCAxNiBwbV9sc3VfcmVqZWN0MSkgTWFya2VkIFNSUSBmbHVzaGVzCitldmVudDowWDEwNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlAxNiA6IChHcm91cCAxNiBwbV9sc3VfcmVqZWN0MSkgUnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMTA1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxNiA6IChHcm91cCAxNiBwbV9sc3VfcmVqZWN0MSkgUnVuIGN5Y2xlcworCisjR3JvdXAgMTcgcG1fbHN1X3JlamVjdDIsIExTVSByZWplY3RzIGR1ZSB0byByZWxvYWQgQ0RGIG9yIHRhZyB1cGRhdGUgY29sbGlzaW9uCitldmVudDowWDExMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVMF9SRUpFQ1RfUkVMT0FEX0NERl9HUlAxNyA6IChHcm91cCAxNyBwbV9sc3VfcmVqZWN0MikgTFNVMCByZWplY3QgZHVlIHRvIHJlbG9hZCBDREYgb3IgdGFnIHVwZGF0ZSBjb2xsaXNpb24KK2V2ZW50OjBYMTExIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1UxX1JFSkVDVF9SRUxPQURfQ0RGX0dSUDE3IDogKEdyb3VwIDE3IHBtX2xzdV9yZWplY3QyKSBMU1UxIHJlamVjdCBkdWUgdG8gcmVsb2FkIENERiBvciB0YWcgdXBkYXRlIGNvbGxpc2lvbgorZXZlbnQ6MFgxMTIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lPUFNfQ01QTF9HUlAxNyA6IChHcm91cCAxNyBwbV9sc3VfcmVqZWN0MikgSU9QUyBpbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDExMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDFfV1JJVEVfQ1lDX0dSUDE3IDogKEdyb3VwIDE3IHBtX2xzdV9yZWplY3QyKSBDeWNsZXMgd3JpdGluZyB0byBpbnN0cnVjdGlvbiBMMQorZXZlbnQ6MFgxMTQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQMTcgOiAoR3JvdXAgMTcgcG1fbHN1X3JlamVjdDIpIFJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDExNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQMTcgOiAoR3JvdXAgMTcgcG1fbHN1X3JlamVjdDIpIFJ1biBjeWNsZXMKKworI0dyb3VwIDE4IHBtX2xzdV9yZWplY3QzLCBMU1UgcmVqZWN0cyBkdWUgdG8gRVJBVCwgaGVsZCBpbnN0dWN0aW9ucworZXZlbnQ6MFgxMjAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVTBfUkVKRUNUX0VSQVRfTUlTU19HUlAxOCA6IChHcm91cCAxOCBwbV9sc3VfcmVqZWN0MykgTFNVMCByZWplY3QgZHVlIHRvIEVSQVQgbWlzcworZXZlbnQ6MFgxMjEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVTFfUkVKRUNUX0VSQVRfTUlTU19HUlAxOCA6IChHcm91cCAxOCBwbV9sc3VfcmVqZWN0MykgTFNVMSByZWplY3QgZHVlIHRvIEVSQVQgbWlzcworZXZlbnQ6MFgxMjIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xXU1lOQ19IRUxEX0dSUDE4IDogKEdyb3VwIDE4IHBtX2xzdV9yZWplY3QzKSBMV1NZTkMgaGVsZCBhdCBkaXNwYXRjaAorZXZlbnQ6MFgxMjMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1RMQklFX0hFTERfR1JQMTggOiAoR3JvdXAgMTggcG1fbHN1X3JlamVjdDMpIFRMQklFIGhlbGQgYXQgZGlzcGF0Y2gKK2V2ZW50OjBYMTI0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDE4IDogKEdyb3VwIDE4IHBtX2xzdV9yZWplY3QzKSBSdW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgxMjUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDE4IDogKEdyb3VwIDE4IHBtX2xzdV9yZWplY3QzKSBSdW4gY3ljbGVzCisKKyNHcm91cCAxOSBwbV9sc3VfcmVqZWN0NCwgTFNVMC8xIHJlamVjdCBMTVEgZnVsbAorZXZlbnQ6MFgxMzAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVTBfUkVKRUNUX0xNUV9GVUxMX0dSUDE5IDogKEdyb3VwIDE5IHBtX2xzdV9yZWplY3Q0KSBMU1UwIHJlamVjdCBkdWUgdG8gTE1RIGZ1bGwgb3IgbWlzc2VkIGRhdGEgY29taW5nCitldmVudDowWDEzMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVMV9SRUpFQ1RfTE1RX0ZVTExfR1JQMTkgOiAoR3JvdXAgMTkgcG1fbHN1X3JlamVjdDQpIExTVTEgcmVqZWN0IGR1ZSB0byBMTVEgZnVsbCBvciBtaXNzZWQgZGF0YSBjb21pbmcKK2V2ZW50OjBYMTMyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JT1BTX0NNUExfR1JQMTkgOiAoR3JvdXAgMTkgcG1fbHN1X3JlamVjdDQpIElPUFMgaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgxMzMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0JSX0lTU1VFRF9HUlAxOSA6IChHcm91cCAxOSBwbV9sc3VfcmVqZWN0NCkgQnJhbmNoZXMgaXNzdWVkCitldmVudDowWDEzNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlAxOSA6IChHcm91cCAxOSBwbV9sc3VfcmVqZWN0NCkgUnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMTM1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxOSA6IChHcm91cCAxOSBwbV9sc3VfcmVqZWN0NCkgUnVuIGN5Y2xlcworCisjR3JvdXAgMjAgcG1fbHN1X3JlamVjdDUsIExTVSBtaXNjIHJlamVjdCBhbmQgZmx1c2ggZXZlbnRzCitldmVudDowWDE0MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVX1JFSkVDVF9TUlFfTEhTX0dSUDIwIDogKEdyb3VwIDIwIHBtX2xzdV9yZWplY3Q1KSBMU1UgU1JRIHJlamVjdHMKK2V2ZW50OjBYMTQxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1VfUkVKRUNUX1JFTE9BRF9DREZfR1JQMjAgOiAoR3JvdXAgMjAgcG1fbHN1X3JlamVjdDUpIExTVSByZWplY3QgZHVlIHRvIHJlbG9hZCBDREYgb3IgdGFnIHVwZGF0ZSBjb2xsaXNpb24KK2V2ZW50OjBYMTQyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1VfRkxVU0hfR1JQMjAgOiAoR3JvdXAgMjAgcG1fbHN1X3JlamVjdDUpIEZsdXNoIGluaXRpYXRlZCBieSBMU1UKK2V2ZW50OjBYMTQzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GTFVTSF9HUlAyMCA6IChHcm91cCAyMCBwbV9sc3VfcmVqZWN0NSkgRmx1c2hlcworZXZlbnQ6MFgxNDQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQMjAgOiAoR3JvdXAgMjAgcG1fbHN1X3JlamVjdDUpIFJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDE0NSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQMjAgOiAoR3JvdXAgMjAgcG1fbHN1X3JlamVjdDUpIFJ1biBjeWNsZXMKKworI0dyb3VwIDIxIHBtX2ZsdXNoMSwgTWlzYyBmbHVzaCBldmVudHMKK2V2ZW50OjBYMTUwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JT1BTX0NNUExfR1JQMjEgOiAoR3JvdXAgMjEgcG1fZmx1c2gxKSBJT1BTIGluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMTUxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1VfRkxVU0hfVVNUX0dSUDIxIDogKEdyb3VwIDIxIHBtX2ZsdXNoMSkgU1JRIHVuYWxpZ25lZCBzdG9yZSBmbHVzaGVzCitldmVudDowWDE1MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRkxVU0hfSU1CQUxfR1JQMjEgOiAoR3JvdXAgMjEgcG1fZmx1c2gxKSBGbHVzaCBjYXVzZWQgYnkgdGhyZWFkIEdDVCBpbWJhbGFuY2UKK2V2ZW50OjBYMTUzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQ19JTlZfTDJfR1JQMjEgOiAoR3JvdXAgMjEgcG1fZmx1c2gxKSBMMSBEIGNhY2hlIGVudHJpZXMgaW52YWxpZGF0ZWQgZnJvbSBMMgorZXZlbnQ6MFgxNTQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQMjEgOiAoR3JvdXAgMjEgcG1fZmx1c2gxKSBSdW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgxNTUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDIxIDogKEdyb3VwIDIxIHBtX2ZsdXNoMSkgUnVuIGN5Y2xlcworCisjR3JvdXAgMjIgcG1fZmx1c2gyLCBGbHVzaGVzIGR1ZSB0byBzY29yZWJvYXJkIGFuZCBzeW5jCitldmVudDowWDE2MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSVRMQl9NSVNTX0dSUDIyIDogKEdyb3VwIDIyIHBtX2ZsdXNoMikgSW5zdHJ1Y3Rpb24gVExCIG1pc3NlcworZXZlbnQ6MFgxNjEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lPUFNfQ01QTF9HUlAyMiA6IChHcm91cCAyMiBwbV9mbHVzaDIpIElPUFMgaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgxNjIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZMVVNIX1NCX0dSUDIyIDogKEdyb3VwIDIyIHBtX2ZsdXNoMikgRmx1c2ggY2F1c2VkIGJ5IHNjb3JlYm9hcmQgb3BlcmF0aW9uCitldmVudDowWDE2MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRkxVU0hfU1lOQ19HUlAyMiA6IChHcm91cCAyMiBwbV9mbHVzaDIpIEZsdXNoIGNhdXNlZCBieSBzeW5jCitldmVudDowWDE2NCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlAyMiA6IChHcm91cCAyMiBwbV9mbHVzaDIpIFJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDE2NSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQMjIgOiAoR3JvdXAgMjIgcG1fZmx1c2gyKSBSdW4gY3ljbGVzCisKKyNHcm91cCAyMyBwbV9sc3VfZmx1c2hfc3JxX2xycSwgTFNVIGZsdXNoIGJ5IFNSUSBhbmQgTFJRIGV2ZW50cworZXZlbnQ6MFgxNzAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9GTFVTSF9TUlFfR1JQMjMgOiAoR3JvdXAgMjMgcG1fbHN1X2ZsdXNoX3NycV9scnEpIFNSUSBmbHVzaGVzCitldmVudDowWDE3MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVX0ZMVVNIX0xSUV9HUlAyMyA6IChHcm91cCAyMyBwbV9sc3VfZmx1c2hfc3JxX2xycSkgTFJRIGZsdXNoZXMKK2V2ZW50OjBYMTcyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JT1BTX0NNUExfR1JQMjMgOiAoR3JvdXAgMjMgcG1fbHN1X2ZsdXNoX3NycV9scnEpIElPUFMgaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgxNzMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9GTFVTSF9HUlAyMyA6IChHcm91cCAyMyBwbV9sc3VfZmx1c2hfc3JxX2xycSkgRmx1c2ggaW5pdGlhdGVkIGJ5IExTVQorZXZlbnQ6MFgxNzQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQMjMgOiAoR3JvdXAgMjMgcG1fbHN1X2ZsdXNoX3NycV9scnEpIFJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDE3NSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQMjMgOiAoR3JvdXAgMjMgcG1fbHN1X2ZsdXNoX3NycV9scnEpIFJ1biBjeWNsZXMKKworI0dyb3VwIDI0IHBtX2xzdV9mbHVzaF9scnEsIExTVTAvMSBmbHVzaCBkdWUgdG8gTFJRCitldmVudDowWDE4MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVMF9GTFVTSF9MUlFfR1JQMjQgOiAoR3JvdXAgMjQgcG1fbHN1X2ZsdXNoX2xycSkgTFNVMCBMUlEgZmx1c2hlcworZXZlbnQ6MFgxODEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVTFfRkxVU0hfTFJRX0dSUDI0IDogKEdyb3VwIDI0IHBtX2xzdV9mbHVzaF9scnEpIExTVTEgTFJRIGZsdXNoZXMKK2V2ZW50OjBYMTgyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1VfRkxVU0hfR1JQMjQgOiAoR3JvdXAgMjQgcG1fbHN1X2ZsdXNoX2xycSkgRmx1c2ggaW5pdGlhdGVkIGJ5IExTVQorZXZlbnQ6MFgxODMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lPUFNfQ01QTF9HUlAyNCA6IChHcm91cCAyNCBwbV9sc3VfZmx1c2hfbHJxKSBJT1BTIGluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMTg0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDI0IDogKEdyb3VwIDI0IHBtX2xzdV9mbHVzaF9scnEpIFJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDE4NSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQMjQgOiAoR3JvdXAgMjQgcG1fbHN1X2ZsdXNoX2xycSkgUnVuIGN5Y2xlcworCisjR3JvdXAgMjUgcG1fbHN1X2ZsdXNoX3NycSwgTFNVMC8xIGZsdXNoIGR1ZSB0byBTUlEKK2V2ZW50OjBYMTkwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1UwX0ZMVVNIX1NSUV9HUlAyNSA6IChHcm91cCAyNSBwbV9sc3VfZmx1c2hfc3JxKSBMU1UwIFNSUSBmbHVzaGVzCitldmVudDowWDE5MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVMV9GTFVTSF9TUlFfR1JQMjUgOiAoR3JvdXAgMjUgcG1fbHN1X2ZsdXNoX3NycSkgTFNVMSBTUlEgZmx1c2hlcworZXZlbnQ6MFgxOTIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lPUFNfQ01QTF9HUlAyNSA6IChHcm91cCAyNSBwbV9sc3VfZmx1c2hfc3JxKSBJT1BTIGluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMTkzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1VfRkxVU0hfR1JQMjUgOiAoR3JvdXAgMjUgcG1fbHN1X2ZsdXNoX3NycSkgRmx1c2ggaW5pdGlhdGVkIGJ5IExTVQorZXZlbnQ6MFgxOTQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQMjUgOiAoR3JvdXAgMjUgcG1fbHN1X2ZsdXNoX3NycSkgUnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMTk1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAyNSA6IChHcm91cCAyNSBwbV9sc3VfZmx1c2hfc3JxKSBSdW4gY3ljbGVzCisKKyNHcm91cCAyNiBwbV9sc3VfZmx1c2hfdW5hbGlnbmVkLCBMU1UgZmx1c2ggZHVlIHRvIHVuYWxpZ25lZCBkYXRhCitldmVudDowWDFBMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVX0ZMVVNIX1VMRF9HUlAyNiA6IChHcm91cCAyNiBwbV9sc3VfZmx1c2hfdW5hbGlnbmVkKSBMUlEgdW5hbGlnbmVkIGxvYWQgZmx1c2hlcworZXZlbnQ6MFgxQTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9GTFVTSF9VU1RfR1JQMjYgOiAoR3JvdXAgMjYgcG1fbHN1X2ZsdXNoX3VuYWxpZ25lZCkgU1JRIHVuYWxpZ25lZCBzdG9yZSBmbHVzaGVzCitldmVudDowWDFBMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fQlJfSVNTVUVEX0dSUDI2IDogKEdyb3VwIDI2IHBtX2xzdV9mbHVzaF91bmFsaWduZWQpIEJyYW5jaGVzIGlzc3VlZAorZXZlbnQ6MFgxQTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lPUFNfQ01QTF9HUlAyNiA6IChHcm91cCAyNiBwbV9sc3VfZmx1c2hfdW5hbGlnbmVkKSBJT1BTIGluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMUE0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDI2IDogKEdyb3VwIDI2IHBtX2xzdV9mbHVzaF91bmFsaWduZWQpIFJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDFBNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQMjYgOiAoR3JvdXAgMjYgcG1fbHN1X2ZsdXNoX3VuYWxpZ25lZCkgUnVuIGN5Y2xlcworCisjR3JvdXAgMjcgcG1fbHN1X2ZsdXNoX3VsZCwgTFNVMC8xIGZsdXNoIGR1ZSB0byB1bmFsaWduZWQgbG9hZAorZXZlbnQ6MFgxQjAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVTBfRkxVU0hfVUxEX0dSUDI3IDogKEdyb3VwIDI3IHBtX2xzdV9mbHVzaF91bGQpIExTVTAgdW5hbGlnbmVkIGxvYWQgZmx1c2hlcworZXZlbnQ6MFgxQjEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVTFfRkxVU0hfVUxEX0dSUDI3IDogKEdyb3VwIDI3IHBtX2xzdV9mbHVzaF91bGQpIExTVTEgdW5hbGlnbmVkIGxvYWQgZmx1c2hlcworZXZlbnQ6MFgxQjIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9GTFVTSF9HUlAyNyA6IChHcm91cCAyNyBwbV9sc3VfZmx1c2hfdWxkKSBGbHVzaCBpbml0aWF0ZWQgYnkgTFNVCitldmVudDowWDFCMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU9QU19DTVBMX0dSUDI3IDogKEdyb3VwIDI3IHBtX2xzdV9mbHVzaF91bGQpIElPUFMgaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgxQjQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQMjcgOiAoR3JvdXAgMjcgcG1fbHN1X2ZsdXNoX3VsZCkgUnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMUI1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAyNyA6IChHcm91cCAyNyBwbV9sc3VfZmx1c2hfdWxkKSBSdW4gY3ljbGVzCisKKyNHcm91cCAyOCBwbV9sc3VfZmx1c2hfdXN0LCBMU1UwLzEgZmx1c2ggZHVlIHRvIHVuYWxpZ25lZCBzdG9yZQorZXZlbnQ6MFgxQzAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVTBfRkxVU0hfVVNUX0dSUDI4IDogKEdyb3VwIDI4IHBtX2xzdV9mbHVzaF91c3QpIExTVTAgdW5hbGlnbmVkIHN0b3JlIGZsdXNoZXMKK2V2ZW50OjBYMUMxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1UxX0ZMVVNIX1VTVF9HUlAyOCA6IChHcm91cCAyOCBwbV9sc3VfZmx1c2hfdXN0KSBMU1UxIHVuYWxpZ25lZCBzdG9yZSBmbHVzaGVzCitldmVudDowWDFDMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU9QU19DTVBMX0dSUDI4IDogKEdyb3VwIDI4IHBtX2xzdV9mbHVzaF91c3QpIElPUFMgaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgxQzMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9GTFVTSF9HUlAyOCA6IChHcm91cCAyOCBwbV9sc3VfZmx1c2hfdXN0KSBGbHVzaCBpbml0aWF0ZWQgYnkgTFNVCitldmVudDowWDFDNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlAyOCA6IChHcm91cCAyOCBwbV9sc3VfZmx1c2hfdXN0KSBSdW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgxQzUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDI4IDogKEdyb3VwIDI4IHBtX2xzdV9mbHVzaF91c3QpIFJ1biBjeWNsZXMKKworI0dyb3VwIDI5IHBtX2xzdV9mbHVzaF9mdWxsLCBMU1UgZmx1c2ggZHVlIHRvIExSUS9TUlEgZnVsbAorZXZlbnQ6MFgxRDAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9GTFVTSF9MUlFfRlVMTF9HUlAyOSA6IChHcm91cCAyOSBwbV9sc3VfZmx1c2hfZnVsbCkgRmx1c2ggY2F1c2VkIGJ5IExSUSBmdWxsCitldmVudDowWDFEMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU9QU19DTVBMX0dSUDI5IDogKEdyb3VwIDI5IHBtX2xzdV9mbHVzaF9mdWxsKSBJT1BTIGluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMUQyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfTFNVX0ZMVVNIX0xSUV9HUlAyOSA6IChHcm91cCAyOSBwbV9sc3VfZmx1c2hfZnVsbCkgTWFya2VkIExSUSBmbHVzaGVzCitldmVudDowWDFEMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVX0ZMVVNIX1NSUV9GVUxMX0dSUDI5IDogKEdyb3VwIDI5IHBtX2xzdV9mbHVzaF9mdWxsKSBGbHVzaCBjYXVzZWQgYnkgU1JRIGZ1bGwKK2V2ZW50OjBYMUQ0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDI5IDogKEdyb3VwIDI5IHBtX2xzdV9mbHVzaF9mdWxsKSBSdW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgxRDUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDI5IDogKEdyb3VwIDI5IHBtX2xzdV9mbHVzaF9mdWxsKSBSdW4gY3ljbGVzCisKKyNHcm91cCAzMCBwbV9sc3Vfc3RhbGwxLCBMU1UgU3RhbGxzCitldmVudDowWDFFMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fR1JQX01SS19HUlAzMCA6IChHcm91cCAzMCBwbV9sc3Vfc3RhbGwxKSBHcm91cCBtYXJrZWQgaW4gSURVCitldmVudDowWDFFMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fQ01QTFVfU1RBTExfTFNVX0dSUDMwIDogKEdyb3VwIDMwIHBtX2xzdV9zdGFsbDEpIENvbXBsZXRpb24gc3RhbGwgY2F1c2VkIGJ5IExTVSBpbnN0cnVjdGlvbgorZXZlbnQ6MFgxRTIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lPUFNfQ01QTF9HUlAzMCA6IChHcm91cCAzMCBwbV9sc3Vfc3RhbGwxKSBJT1BTIGluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMUUzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9DTVBMVV9TVEFMTF9SRUpFQ1RfR1JQMzAgOiAoR3JvdXAgMzAgcG1fbHN1X3N0YWxsMSkgQ29tcGxldGlvbiBzdGFsbCBjYXVzZWQgYnkgcmVqZWN0CitldmVudDowWDFFNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlAzMCA6IChHcm91cCAzMCBwbV9sc3Vfc3RhbGwxKSBSdW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgxRTUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDMwIDogKEdyb3VwIDMwIHBtX2xzdV9zdGFsbDEpIFJ1biBjeWNsZXMKKworI0dyb3VwIDMxIHBtX2xzdV9zdGFsbDIsIExTVSBTdGFsbHMKK2V2ZW50OjBYMUYwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JT1BTX0NNUExfR1JQMzEgOiAoR3JvdXAgMzEgcG1fbHN1X3N0YWxsMikgSU9QUyBpbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDFGMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fQ01QTFVfU1RBTExfRENBQ0hFX01JU1NfR1JQMzEgOiAoR3JvdXAgMzEgcG1fbHN1X3N0YWxsMikgQ29tcGxldGlvbiBzdGFsbCBjYXVzZWQgYnkgRCBjYWNoZSBtaXNzCitldmVudDowWDFGMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlAzMSA6IChHcm91cCAzMSBwbV9sc3Vfc3RhbGwyKSBQcm9jZXNzb3IgY3ljbGVzCitldmVudDowWDFGMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fQ01QTFVfU1RBTExfRVJBVF9NSVNTX0dSUDMxIDogKEdyb3VwIDMxIHBtX2xzdV9zdGFsbDIpIENvbXBsZXRpb24gc3RhbGwgY2F1c2VkIGJ5IEVSQVQgbWlzcworZXZlbnQ6MFgxRjQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQMzEgOiAoR3JvdXAgMzEgcG1fbHN1X3N0YWxsMikgUnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMUY1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAzMSA6IChHcm91cCAzMSBwbV9sc3Vfc3RhbGwyKSBSdW4gY3ljbGVzCisKKyNHcm91cCAzMiBwbV9meHVfc3RhbGwsIEZYVSBTdGFsbHMKK2V2ZW50OjBYMjAwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9HUlBfSUNfTUlTU19CUl9SRURJUl9OT05TUEVDX0dSUDMyIDogKEdyb3VwIDMyIHBtX2Z4dV9zdGFsbCkgR3JvdXAgZXhwZXJpZW5jZWQgbm9uLXNwZWN1bGF0aXZlIEkgY2FjaGUgbWlzcyBvciBicmFuY2ggcmVkaXJlY3QKK2V2ZW50OjBYMjAxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9DTVBMVV9TVEFMTF9GWFVfR1JQMzIgOiAoR3JvdXAgMzIgcG1fZnh1X3N0YWxsKSBDb21wbGV0aW9uIHN0YWxsIGNhdXNlZCBieSBGWFUgaW5zdHJ1Y3Rpb24KK2V2ZW50OjBYMjAyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JT1BTX0NNUExfR1JQMzIgOiAoR3JvdXAgMzIgcG1fZnh1X3N0YWxsKSBJT1BTIGluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMjAzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9DTVBMVV9TVEFMTF9ESVZfR1JQMzIgOiAoR3JvdXAgMzIgcG1fZnh1X3N0YWxsKSBDb21wbGV0aW9uIHN0YWxsIGNhdXNlZCBieSBESVYgaW5zdHJ1Y3Rpb24KK2V2ZW50OjBYMjA0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDMyIDogKEdyb3VwIDMyIHBtX2Z4dV9zdGFsbCkgUnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMjA1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAzMiA6IChHcm91cCAzMiBwbV9meHVfc3RhbGwpIFJ1biBjeWNsZXMKKworI0dyb3VwIDMzIHBtX2ZwdV9zdGFsbCwgRlBVIFN0YWxscworZXZlbnQ6MFgyMTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVV9GVUxMX0NZQ19HUlAzMyA6IChHcm91cCAzMyBwbV9mcHVfc3RhbGwpIEN5Y2xlcyBGUFUgaXNzdWUgcXVldWUgZnVsbAorZXZlbnQ6MFgyMTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0NNUExVX1NUQUxMX0ZESVZfR1JQMzMgOiAoR3JvdXAgMzMgcG1fZnB1X3N0YWxsKSBDb21wbGV0aW9uIHN0YWxsIGNhdXNlZCBieSBGRElWIG9yIEZRUlQgaW5zdHJ1Y3Rpb24KK2V2ZW50OjBYMjEyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JT1BTX0NNUExfR1JQMzMgOiAoR3JvdXAgMzMgcG1fZnB1X3N0YWxsKSBJT1BTIGluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMjEzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9DTVBMVV9TVEFMTF9GUFVfR1JQMzMgOiAoR3JvdXAgMzMgcG1fZnB1X3N0YWxsKSBDb21wbGV0aW9uIHN0YWxsIGNhdXNlZCBieSBGUFUgaW5zdHJ1Y3Rpb24KK2V2ZW50OjBYMjE0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDMzIDogKEdyb3VwIDMzIHBtX2ZwdV9zdGFsbCkgUnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMjE1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAzMyA6IChHcm91cCAzMyBwbV9mcHVfc3RhbGwpIFJ1biBjeWNsZXMKKworI0dyb3VwIDM0IHBtX3F1ZXVlX2Z1bGwsIEJSUSBMUlEgTE1RIHF1ZXVlIGZ1bGwKK2V2ZW50OjBYMjIwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MQVJYX0xTVTBfR1JQMzQgOiAoR3JvdXAgMzQgcG1fcXVldWVfZnVsbCkgTGFyeCBleGVjdXRlZCBvbiBMU1UwCitldmVudDowWDIyMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fQlJRX0ZVTExfQ1lDX0dSUDM0IDogKEdyb3VwIDM0IHBtX3F1ZXVlX2Z1bGwpIEN5Y2xlcyBicmFuY2ggcXVldWUgZnVsbAorZXZlbnQ6MFgyMjIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9MUlFfRlVMTF9DWUNfR1JQMzQgOiAoR3JvdXAgMzQgcG1fcXVldWVfZnVsbCkgQ3ljbGVzIExSUSBmdWxsCitldmVudDowWDIyMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVX0xNUV9GVUxMX0NZQ19HUlAzNCA6IChHcm91cCAzNCBwbV9xdWV1ZV9mdWxsKSBDeWNsZXMgTE1RIGZ1bGwKK2V2ZW50OjBYMjI0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDM0IDogKEdyb3VwIDM0IHBtX3F1ZXVlX2Z1bGwpIFJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDIyNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQMzQgOiAoR3JvdXAgMzQgcG1fcXVldWVfZnVsbCkgUnVuIGN5Y2xlcworCisjR3JvdXAgMzUgcG1faXNzdWVxX2Z1bGwsIEZQVSBGWCBmdWxsCitldmVudDowWDIzMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVMF9GVUxMX0NZQ19HUlAzNSA6IChHcm91cCAzNSBwbV9pc3N1ZXFfZnVsbCkgQ3ljbGVzIEZQVTAgaXNzdWUgcXVldWUgZnVsbAorZXZlbnQ6MFgyMzEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVTFfRlVMTF9DWUNfR1JQMzUgOiAoR3JvdXAgMzUgcG1faXNzdWVxX2Z1bGwpIEN5Y2xlcyBGUFUxIGlzc3VlIHF1ZXVlIGZ1bGwKK2V2ZW50OjBYMjMyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GWExTMF9GVUxMX0NZQ19HUlAzNSA6IChHcm91cCAzNSBwbV9pc3N1ZXFfZnVsbCkgQ3ljbGVzIEZYVTAvTFMwIHF1ZXVlIGZ1bGwKK2V2ZW50OjBYMjMzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GWExTMV9GVUxMX0NZQ19HUlAzNSA6IChHcm91cCAzNSBwbV9pc3N1ZXFfZnVsbCkgQ3ljbGVzIEZYVTEvTFMxIHF1ZXVlIGZ1bGwKK2V2ZW50OjBYMjM0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDM1IDogKEdyb3VwIDM1IHBtX2lzc3VlcV9mdWxsKSBSdW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgyMzUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDM1IDogKEdyb3VwIDM1IHBtX2lzc3VlcV9mdWxsKSBSdW4gY3ljbGVzCisKKyNHcm91cCAzNiBwbV9tYXBwZXJfZnVsbDEsIENSIENUUiBHUFIgbWFwcGVyIGZ1bGwKK2V2ZW50OjBYMjQwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9DUl9NQVBfRlVMTF9DWUNfR1JQMzYgOiAoR3JvdXAgMzYgcG1fbWFwcGVyX2Z1bGwxKSBDeWNsZXMgQ1IgbG9naWNhbCBvcGVyYXRpb24gbWFwcGVyIGZ1bGwKK2V2ZW50OjBYMjQxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MUl9DVFJfTUFQX0ZVTExfQ1lDX0dSUDM2IDogKEdyb3VwIDM2IHBtX21hcHBlcl9mdWxsMSkgQ3ljbGVzIExSL0NUUiBtYXBwZXIgZnVsbAorZXZlbnQ6MFgyNDIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0dQUl9NQVBfRlVMTF9DWUNfR1JQMzYgOiAoR3JvdXAgMzYgcG1fbWFwcGVyX2Z1bGwxKSBDeWNsZXMgR1BSIG1hcHBlciBmdWxsCitldmVudDowWDI0MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fQ1JRX0ZVTExfQ1lDX0dSUDM2IDogKEdyb3VwIDM2IHBtX21hcHBlcl9mdWxsMSkgQ3ljbGVzIENSIGlzc3VlIHF1ZXVlIGZ1bGwKK2V2ZW50OjBYMjQ0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDM2IDogKEdyb3VwIDM2IHBtX21hcHBlcl9mdWxsMSkgUnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMjQ1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAzNiA6IChHcm91cCAzNiBwbV9tYXBwZXJfZnVsbDEpIFJ1biBjeWNsZXMKKworI0dyb3VwIDM3IHBtX21hcHBlcl9mdWxsMiwgRlBSIFhFUiBtYXBwZXIgZnVsbAorZXZlbnQ6MFgyNTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQUl9NQVBfRlVMTF9DWUNfR1JQMzcgOiAoR3JvdXAgMzcgcG1fbWFwcGVyX2Z1bGwyKSBDeWNsZXMgRlBSIG1hcHBlciBmdWxsCitldmVudDowWDI1MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fWEVSX01BUF9GVUxMX0NZQ19HUlAzNyA6IChHcm91cCAzNyBwbV9tYXBwZXJfZnVsbDIpIEN5Y2xlcyBYRVIgbWFwcGVyIGZ1bGwKK2V2ZW50OjBYMjUyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfREFUQV9GUk9NX0wyTUlTU19HUlAzNyA6IChHcm91cCAzNyBwbV9tYXBwZXJfZnVsbDIpIE1hcmtlZCBkYXRhIGxvYWRlZCBtaXNzZWQgTDIKK2V2ZW50OjBYMjUzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JT1BTX0NNUExfR1JQMzcgOiAoR3JvdXAgMzcgcG1fbWFwcGVyX2Z1bGwyKSBJT1BTIGluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMjU0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDM3IDogKEdyb3VwIDM3IHBtX21hcHBlcl9mdWxsMikgUnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMjU1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAzNyA6IChHcm91cCAzNyBwbV9tYXBwZXJfZnVsbDIpIFJ1biBjeWNsZXMKKworI0dyb3VwIDM4IHBtX21pc2NfbG9hZCwgTm9uLWNhY2hhYmxlIGxvYWRzIGFuZCBzdGN4IGV2ZW50cworZXZlbnQ6MFgyNjAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1NUQ1hfRkFJTF9HUlAzOCA6IChHcm91cCAzOCBwbV9taXNjX2xvYWQpIFNUQ1ggZmFpbGVkCitldmVudDowWDI2MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fU1RDWF9QQVNTX0dSUDM4IDogKEdyb3VwIDM4IHBtX21pc2NfbG9hZCkgU3RjeCBwYXNzZXMKK2V2ZW50OjBYMjYyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1UwX05DTERfR1JQMzggOiAoR3JvdXAgMzggcG1fbWlzY19sb2FkKSBMU1UwIG5vbi1jYWNoZWFibGUgbG9hZHMKK2V2ZW50OjBYMjYzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1UxX05DTERfR1JQMzggOiAoR3JvdXAgMzggcG1fbWlzY19sb2FkKSBMU1UxIG5vbi1jYWNoZWFibGUgbG9hZHMKK2V2ZW50OjBYMjY0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDM4IDogKEdyb3VwIDM4IHBtX21pc2NfbG9hZCkgUnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMjY1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAzOCA6IChHcm91cCAzOCBwbV9taXNjX2xvYWQpIFJ1biBjeWNsZXMKKworI0dyb3VwIDM5IHBtX2ljX2RlbWFuZCwgSUNhY2hlIGRlbWFuZCBmcm9tIEJSIHJlZGlyZWN0CitldmVudDowWDI3MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVMF9CVVNZX1JFSkVDVF9HUlAzOSA6IChHcm91cCAzOSBwbV9pY19kZW1hbmQpIExTVTAgYnVzeSBkdWUgdG8gcmVqZWN0CitldmVudDowWDI3MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVMV9CVVNZX1JFSkVDVF9HUlAzOSA6IChHcm91cCAzOSBwbV9pY19kZW1hbmQpIExTVTEgYnVzeSBkdWUgdG8gcmVqZWN0CitldmVudDowWDI3MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSUNfREVNQU5EX0wyX0JIVF9SRURJUkVDVF9HUlAzOSA6IChHcm91cCAzOSBwbV9pY19kZW1hbmQpIEwyIEkgY2FjaGUgZGVtYW5kIHJlcXVlc3QgZHVlIHRvIEJIVCByZWRpcmVjdAorZXZlbnQ6MFgyNzMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lDX0RFTUFORF9MMl9CUl9SRURJUkVDVF9HUlAzOSA6IChHcm91cCAzOSBwbV9pY19kZW1hbmQpIEwyIEkgY2FjaGUgZGVtYW5kIHJlcXVlc3QgZHVlIHRvIGJyYW5jaCByZWRpcmVjdAorZXZlbnQ6MFgyNzQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQMzkgOiAoR3JvdXAgMzkgcG1faWNfZGVtYW5kKSBSdW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgyNzUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDM5IDogKEdyb3VwIDM5IHBtX2ljX2RlbWFuZCkgUnVuIGN5Y2xlcworCisjR3JvdXAgNDAgcG1faWNfcHJlZiwgSUNhY2hlIHByZWZldGNoCitldmVudDowWDI4MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSUVSQVRfWExBVEVfV1JfR1JQNDAgOiAoR3JvdXAgNDAgcG1faWNfcHJlZikgVHJhbnNsYXRpb24gd3JpdHRlbiB0byBpZXJhdAorZXZlbnQ6MFgyODEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lDX1BSRUZfUkVRX0dSUDQwIDogKEdyb3VwIDQwIHBtX2ljX3ByZWYpIEluc3RydWN0aW9uIHByZWZldGNoIHJlcXVlc3RzCitldmVudDowWDI4MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSUNfUFJFRl9JTlNUQUxMX0dSUDQwIDogKEdyb3VwIDQwIHBtX2ljX3ByZWYpIEluc3RydWN0aW9uIHByZWZldGNoZWQgaW5zdGFsbGVkIGluIHByZWZldGNoCitldmVudDowWDI4MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fMElOU1RfRkVUQ0hfR1JQNDAgOiAoR3JvdXAgNDAgcG1faWNfcHJlZikgTm8gaW5zdHJ1Y3Rpb25zIGZldGNoZWQKK2V2ZW50OjBYMjg0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDQwIDogKEdyb3VwIDQwIHBtX2ljX3ByZWYpIFJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDI4NSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQNDAgOiAoR3JvdXAgNDAgcG1faWNfcHJlZikgUnVuIGN5Y2xlcworCisjR3JvdXAgNDEgcG1faWNfbWlzcywgSUNhY2hlIG1pc3NlcworZXZlbnQ6MFgyOTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0dSUF9JQ19NSVNTX05PTlNQRUNfR1JQNDEgOiAoR3JvdXAgNDEgcG1faWNfbWlzcykgR3JvdXAgZXhwZXJpZW5jZWQgbm9uLXNwZWN1bGF0aXZlIEkgY2FjaGUgbWlzcworZXZlbnQ6MFgyOTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0dSUF9JQ19NSVNTX0dSUDQxIDogKEdyb3VwIDQxIHBtX2ljX21pc3MpIEdyb3VwIGV4cGVyaWVuY2VkIEkgY2FjaGUgbWlzcworZXZlbnQ6MFgyOTIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wxX0RDQUNIRV9SRUxPQURfVkFMSURfR1JQNDEgOiAoR3JvdXAgNDEgcG1faWNfbWlzcykgTDEgcmVsb2FkIGRhdGEgc291cmNlIHZhbGlkCitldmVudDowWDI5MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU9QU19DTVBMX0dSUDQxIDogKEdyb3VwIDQxIHBtX2ljX21pc3MpIElPUFMgaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgyOTQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQNDEgOiAoR3JvdXAgNDEgcG1faWNfbWlzcykgUnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMjk1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlA0MSA6IChHcm91cCA0MSBwbV9pY19taXNzKSBSdW4gY3ljbGVzCisKKyNHcm91cCA0MiBwbV9icmFuY2hfbWlzcywgQnJhbmNoIG1pc3ByZWRpY3QsIFRMQiBhbmQgU0xCIG1pc3NlcworZXZlbnQ6MFgyQTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1RMQl9NSVNTX0dSUDQyIDogKEdyb3VwIDQyIHBtX2JyYW5jaF9taXNzKSBUTEIgbWlzc2VzCitldmVudDowWDJBMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fU0xCX01JU1NfR1JQNDIgOiAoR3JvdXAgNDIgcG1fYnJhbmNoX21pc3MpIFNMQiBtaXNzZXMKK2V2ZW50OjBYMkEyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9CUl9NUFJFRF9DUl9HUlA0MiA6IChHcm91cCA0MiBwbV9icmFuY2hfbWlzcykgQnJhbmNoIG1pc3ByZWRpY3Rpb25zIGR1ZSB0byBDUiBiaXQgc2V0dGluZworZXZlbnQ6MFgyQTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0JSX01QUkVEX1RBX0dSUDQyIDogKEdyb3VwIDQyIHBtX2JyYW5jaF9taXNzKSBCcmFuY2ggbWlzcHJlZGljdGlvbnMgZHVlIHRvIHRhcmdldCBhZGRyZXNzCitldmVudDowWDJBNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlA0MiA6IChHcm91cCA0MiBwbV9icmFuY2hfbWlzcykgUnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMkE1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlA0MiA6IChHcm91cCA0MiBwbV9icmFuY2hfbWlzcykgUnVuIGN5Y2xlcworCisjR3JvdXAgNDMgcG1fYnJhbmNoMSwgQnJhbmNoIG9wZXJhdGlvbnMKK2V2ZW50OjBYMkIwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9CUl9VTkNPTkRfR1JQNDMgOiAoR3JvdXAgNDMgcG1fYnJhbmNoMSkgVW5jb25kaXRpb25hbCBicmFuY2gKK2V2ZW50OjBYMkIxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9CUl9QUkVEX1RBX0dSUDQzIDogKEdyb3VwIDQzIHBtX2JyYW5jaDEpIEEgY29uZGl0aW9uYWwgYnJhbmNoIHdhcyBwcmVkaWN0ZWQsIHRhcmdldCBwcmVkaWN0aW9uCitldmVudDowWDJCMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fQlJfUFJFRF9DUl9HUlA0MyA6IChHcm91cCA0MyBwbV9icmFuY2gxKSBBIGNvbmRpdGlvbmFsIGJyYW5jaCB3YXMgcHJlZGljdGVkLCBDUiBwcmVkaWN0aW9uCitldmVudDowWDJCMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fQlJfUFJFRF9DUl9UQV9HUlA0MyA6IChHcm91cCA0MyBwbV9icmFuY2gxKSBBIGNvbmRpdGlvbmFsIGJyYW5jaCB3YXMgcHJlZGljdGVkLCBDUiBhbmQgdGFyZ2V0IHByZWRpY3Rpb24KK2V2ZW50OjBYMkI0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDQzIDogKEdyb3VwIDQzIHBtX2JyYW5jaDEpIFJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDJCNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQNDMgOiAoR3JvdXAgNDMgcG1fYnJhbmNoMSkgUnVuIGN5Y2xlcworCisjR3JvdXAgNDQgcG1fYnJhbmNoMiwgQnJhbmNoIG9wZXJhdGlvbnMKK2V2ZW50OjBYMkMwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9HUlBfQlJfUkVESVJfTk9OU1BFQ19HUlA0NCA6IChHcm91cCA0NCBwbV9icmFuY2gyKSBHcm91cCBleHBlcmllbmNlZCBub24tc3BlY3VsYXRpdmUgYnJhbmNoIHJlZGlyZWN0CitldmVudDowWDJDMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fR1JQX0JSX1JFRElSX0dSUDQ0IDogKEdyb3VwIDQ0IHBtX2JyYW5jaDIpIEdyb3VwIGV4cGVyaWVuY2VkIGJyYW5jaCByZWRpcmVjdAorZXZlbnQ6MFgyQzIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZMVVNIX0JSX01QUkVEX0dSUDQ0IDogKEdyb3VwIDQ0IHBtX2JyYW5jaDIpIEZsdXNoIGNhdXNlZCBieSBicmFuY2ggbWlzcHJlZGljdAorZXZlbnQ6MFgyQzMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lPUFNfQ01QTF9HUlA0NCA6IChHcm91cCA0NCBwbV9icmFuY2gyKSBJT1BTIGluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMkM0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDQ0IDogKEdyb3VwIDQ0IHBtX2JyYW5jaDIpIFJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDJDNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQNDQgOiAoR3JvdXAgNDQgcG1fYnJhbmNoMikgUnVuIGN5Y2xlcworCisjR3JvdXAgNDUgcG1fTDFfdGxibWlzcywgTDEgbG9hZCBhbmQgVExCIG1pc3NlcworZXZlbnQ6MFgyRDAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RBVEFfVEFCTEVXQUxLX0NZQ19HUlA0NSA6IChHcm91cCA0NSBwbV9MMV90bGJtaXNzKSBDeWNsZXMgZG9pbmcgZGF0YSB0YWJsZXdhbGtzCitldmVudDowWDJEMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRFRMQl9NSVNTX0dSUDQ1IDogKEdyb3VwIDQ1IHBtX0wxX3RsYm1pc3MpIERhdGEgVExCIG1pc3NlcworZXZlbnQ6MFgyRDIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xEX01JU1NfTDFfR1JQNDUgOiAoR3JvdXAgNDUgcG1fTDFfdGxibWlzcykgTDEgRCBjYWNoZSBsb2FkIG1pc3NlcworZXZlbnQ6MFgyRDMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xEX1JFRl9MMV9HUlA0NSA6IChHcm91cCA0NSBwbV9MMV90bGJtaXNzKSBMMSBEIGNhY2hlIGxvYWQgcmVmZXJlbmNlcworZXZlbnQ6MFgyRDQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQNDUgOiAoR3JvdXAgNDUgcG1fTDFfdGxibWlzcykgUnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMkQ1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlA0NSA6IChHcm91cCA0NSBwbV9MMV90bGJtaXNzKSBSdW4gY3ljbGVzCisKKyNHcm91cCA0NiBwbV9MMV9ERVJBVF9taXNzLCBMMSBzdG9yZSBhbmQgREVSQVQgbWlzc2VzCitldmVudDowWDJFMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fREFUQV9GUk9NX0wyX0dSUDQ2IDogKEdyb3VwIDQ2IHBtX0wxX0RFUkFUX21pc3MpIERhdGEgbG9hZGVkIGZyb20gTDIKK2V2ZW50OjBYMkUxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1VfREVSQVRfTUlTU19HUlA0NiA6IChHcm91cCA0NiBwbV9MMV9ERVJBVF9taXNzKSBERVJBVCBtaXNzZXMKK2V2ZW50OjBYMkUyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9TVF9SRUZfTDFfR1JQNDYgOiAoR3JvdXAgNDYgcG1fTDFfREVSQVRfbWlzcykgTDEgRCBjYWNoZSBzdG9yZSByZWZlcmVuY2VzCitldmVudDowWDJFMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fU1RfTUlTU19MMV9HUlA0NiA6IChHcm91cCA0NiBwbV9MMV9ERVJBVF9taXNzKSBMMSBEIGNhY2hlIHN0b3JlIG1pc3NlcworZXZlbnQ6MFgyRTQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQNDYgOiAoR3JvdXAgNDYgcG1fTDFfREVSQVRfbWlzcykgUnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMkU1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlA0NiA6IChHcm91cCA0NiBwbV9MMV9ERVJBVF9taXNzKSBSdW4gY3ljbGVzCisKKyNHcm91cCA0NyBwbV9MMV9zbGJtaXNzLCBMMSBsb2FkIGFuZCBTTEIgbWlzc2VzCitldmVudDowWDJGMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRFNMQl9NSVNTX0dSUDQ3IDogKEdyb3VwIDQ3IHBtX0wxX3NsYm1pc3MpIERhdGEgU0xCIG1pc3NlcworZXZlbnQ6MFgyRjEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lTTEJfTUlTU19HUlA0NyA6IChHcm91cCA0NyBwbV9MMV9zbGJtaXNzKSBJbnN0cnVjdGlvbiBTTEIgbWlzc2VzCitldmVudDowWDJGMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTERfTUlTU19MMV9MU1UwX0dSUDQ3IDogKEdyb3VwIDQ3IHBtX0wxX3NsYm1pc3MpIExTVTAgTDEgRCBjYWNoZSBsb2FkIG1pc3NlcworZXZlbnQ6MFgyRjMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xEX01JU1NfTDFfTFNVMV9HUlA0NyA6IChHcm91cCA0NyBwbV9MMV9zbGJtaXNzKSBMU1UxIEwxIEQgY2FjaGUgbG9hZCBtaXNzZXMKK2V2ZW50OjBYMkY0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDQ3IDogKEdyb3VwIDQ3IHBtX0wxX3NsYm1pc3MpIFJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDJGNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQNDcgOiAoR3JvdXAgNDcgcG1fTDFfc2xibWlzcykgUnVuIGN5Y2xlcworCisjR3JvdXAgNDggcG1fZHRsYnJlZiwgRGF0YSBUTEIgcmVmZXJlbmNlcworZXZlbnQ6MFgzMDAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RUTEJfUkVGXzRLX0dSUDQ4IDogKEdyb3VwIDQ4IHBtX2R0bGJyZWYpIERhdGEgVExCIHJlZmVyZW5jZSBmb3IgNEsgcGFnZQorZXZlbnQ6MFgzMDEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RUTEJfUkVGXzY0S19HUlA0OCA6IChHcm91cCA0OCBwbV9kdGxicmVmKSBEYXRhIFRMQiByZWZlcmVuY2UgZm9yIDY0SyBwYWdlCitldmVudDowWDMwMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRFRMQl9SRUZfMTZNX0dSUDQ4IDogKEdyb3VwIDQ4IHBtX2R0bGJyZWYpIERhdGEgVExCIHJlZmVyZW5jZSBmb3IgMTZNIHBhZ2UKK2V2ZW50OjBYMzAzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EVExCX1JFRl8xNkdfR1JQNDggOiAoR3JvdXAgNDggcG1fZHRsYnJlZikgRGF0YSBUTEIgcmVmZXJlbmNlIGZvciAxNkcgcGFnZQorZXZlbnQ6MFgzMDQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQNDggOiAoR3JvdXAgNDggcG1fZHRsYnJlZikgUnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMzA1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlA0OCA6IChHcm91cCA0OCBwbV9kdGxicmVmKSBSdW4gY3ljbGVzCisKKyNHcm91cCA0OSBwbV9kdGxibWlzcywgRGF0YSBUTEIgbWlzc2VzCitldmVudDowWDMxMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRFRMQl9NSVNTXzRLX0dSUDQ5IDogKEdyb3VwIDQ5IHBtX2R0bGJtaXNzKSBEYXRhIFRMQiBtaXNzIGZvciA0SyBwYWdlCitldmVudDowWDMxMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRFRMQl9NSVNTXzY0S19HUlA0OSA6IChHcm91cCA0OSBwbV9kdGxibWlzcykgRGF0YSBUTEIgbWlzcyBmb3IgNjRLIHBhZ2UKK2V2ZW50OjBYMzEyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EVExCX01JU1NfMTZNX0dSUDQ5IDogKEdyb3VwIDQ5IHBtX2R0bGJtaXNzKSBEYXRhIFRMQiBtaXNzIGZvciAxNk0gcGFnZQorZXZlbnQ6MFgzMTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RUTEJfTUlTU18xNkdfR1JQNDkgOiAoR3JvdXAgNDkgcG1fZHRsYm1pc3MpIERhdGEgVExCIG1pc3MgZm9yIDE2RyBwYWdlCitldmVudDowWDMxNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlA0OSA6IChHcm91cCA0OSBwbV9kdGxibWlzcykgUnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMzE1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlA0OSA6IChHcm91cCA0OSBwbV9kdGxibWlzcykgUnVuIGN5Y2xlcworCisjR3JvdXAgNTAgcG1fZHRsYiwgRGF0YSBUTEIgcmVmZXJlbmNlcyBhbmQgbWlzc2VzCitldmVudDowWDMyMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRFRMQl9SRUZfR1JQNTAgOiAoR3JvdXAgNTAgcG1fZHRsYikgRGF0YSBUTEIgcmVmZXJlbmNlcworZXZlbnQ6MFgzMjEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RUTEJfTUlTU19HUlA1MCA6IChHcm91cCA1MCBwbV9kdGxiKSBEYXRhIFRMQiBtaXNzZXMKK2V2ZW50OjBYMzIyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDUwIDogKEdyb3VwIDUwIHBtX2R0bGIpIFByb2Nlc3NvciBjeWNsZXMKK2V2ZW50OjBYMzIzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDUwIDogKEdyb3VwIDUwIHBtX2R0bGIpIFByb2Nlc3NvciBjeWNsZXMKK2V2ZW50OjBYMzI0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDUwIDogKEdyb3VwIDUwIHBtX2R0bGIpIFJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDMyNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQNTAgOiAoR3JvdXAgNTAgcG1fZHRsYikgUnVuIGN5Y2xlcworCisjR3JvdXAgNTEgcG1fTDFfcmVmbWlzcywgTDEgbG9hZCByZWZlcmVuY2VzIGFuZCBtaXNzZXMgYW5kIHN0b3JlIHJlZmVyZW5jZXMgYW5kIG1pc3NlcworZXZlbnQ6MFgzMzAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xEX1JFRl9MMV9HUlA1MSA6IChHcm91cCA1MSBwbV9MMV9yZWZtaXNzKSBMMSBEIGNhY2hlIGxvYWQgcmVmZXJlbmNlcworZXZlbnQ6MFgzMzEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1NUX1JFRl9MMV9HUlA1MSA6IChHcm91cCA1MSBwbV9MMV9yZWZtaXNzKSBMMSBEIGNhY2hlIHN0b3JlIHJlZmVyZW5jZXMKK2V2ZW50OjBYMzMyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MRF9NSVNTX0wxX0dSUDUxIDogKEdyb3VwIDUxIHBtX0wxX3JlZm1pc3MpIEwxIEQgY2FjaGUgbG9hZCBtaXNzZXMKK2V2ZW50OjBYMzMzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9TVF9NSVNTX0wxX0dSUDUxIDogKEdyb3VwIDUxIHBtX0wxX3JlZm1pc3MpIEwxIEQgY2FjaGUgc3RvcmUgbWlzc2VzCitldmVudDowWDMzNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlA1MSA6IChHcm91cCA1MSBwbV9MMV9yZWZtaXNzKSBSdW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgzMzUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDUxIDogKEdyb3VwIDUxIHBtX0wxX3JlZm1pc3MpIFJ1biBjeWNsZXMKKworI0dyb3VwIDUyIHBtX2Rzb3VyY2UxLCBMMyBjYWNoZSBhbmQgbWVtb3J5IGRhdGEgYWNjZXNzCitldmVudDowWDM0MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fREFUQV9GUk9NX0wzX0dSUDUyIDogKEdyb3VwIDUyIHBtX2Rzb3VyY2UxKSBEYXRhIGxvYWRlZCBmcm9tIEwzCitldmVudDowWDM0MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fREFUQV9GUk9NX0xNRU1fR1JQNTIgOiAoR3JvdXAgNTIgcG1fZHNvdXJjZTEpIERhdGEgbG9hZGVkIGZyb20gbG9jYWwgbWVtb3J5CitldmVudDowWDM0MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRkxVU0hfR1JQNTIgOiAoR3JvdXAgNTIgcG1fZHNvdXJjZTEpIEZsdXNoZXMKK2V2ZW50OjBYMzQzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JT1BTX0NNUExfR1JQNTIgOiAoR3JvdXAgNTIgcG1fZHNvdXJjZTEpIElPUFMgaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgzNDQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQNTIgOiAoR3JvdXAgNTIgcG1fZHNvdXJjZTEpIFJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDM0NSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQNTIgOiAoR3JvdXAgNTIgcG1fZHNvdXJjZTEpIFJ1biBjeWNsZXMKKworI0dyb3VwIDUzIHBtX2Rzb3VyY2UyLCBMMyBjYWNoZSBhbmQgbWVtb3J5IGRhdGEgYWNjZXNzCitldmVudDowWDM1MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fREFUQV9GUk9NX0wzX0dSUDUzIDogKEdyb3VwIDUzIHBtX2Rzb3VyY2UyKSBEYXRhIGxvYWRlZCBmcm9tIEwzCitldmVudDowWDM1MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fREFUQV9GUk9NX0xNRU1fR1JQNTMgOiAoR3JvdXAgNTMgcG1fZHNvdXJjZTIpIERhdGEgbG9hZGVkIGZyb20gbG9jYWwgbWVtb3J5CitldmVudDowWDM1MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fREFUQV9GUk9NX0wyTUlTU19HUlA1MyA6IChHcm91cCA1MyBwbV9kc291cmNlMikgRGF0YSBsb2FkZWQgbWlzc2VkIEwyCitldmVudDowWDM1MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fREFUQV9GUk9NX1JNRU1fR1JQNTMgOiAoR3JvdXAgNTMgcG1fZHNvdXJjZTIpIERhdGEgbG9hZGVkIGZyb20gcmVtb3RlIG1lbW9yeQorZXZlbnQ6MFgzNTQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQNTMgOiAoR3JvdXAgNTMgcG1fZHNvdXJjZTIpIFJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDM1NSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQNTMgOiAoR3JvdXAgNTMgcG1fZHNvdXJjZTIpIFJ1biBjeWNsZXMKKworI0dyb3VwIDU0IHBtX2Rzb3VyY2VfTDIsIEwyIGNhY2hlIGRhdGEgYWNjZXNzCitldmVudDowWDM2MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fREFUQV9GUk9NX0wyNV9TSFJfR1JQNTQgOiAoR3JvdXAgNTQgcG1fZHNvdXJjZV9MMikgRGF0YSBsb2FkZWQgZnJvbSBMMi41IHNoYXJlZAorZXZlbnQ6MFgzNjEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RBVEFfRlJPTV9MMjVfTU9EX0dSUDU0IDogKEdyb3VwIDU0IHBtX2Rzb3VyY2VfTDIpIERhdGEgbG9hZGVkIGZyb20gTDIuNSBtb2RpZmllZAorZXZlbnQ6MFgzNjIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RBVEFfRlJPTV9MMjc1X1NIUl9HUlA1NCA6IChHcm91cCA1NCBwbV9kc291cmNlX0wyKSBEYXRhIGxvYWRlZCBmcm9tIEwyLjc1IHNoYXJlZAorZXZlbnQ6MFgzNjMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RBVEFfRlJPTV9MMjc1X01PRF9HUlA1NCA6IChHcm91cCA1NCBwbV9kc291cmNlX0wyKSBEYXRhIGxvYWRlZCBmcm9tIEwyLjc1IG1vZGlmaWVkCitldmVudDowWDM2NCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlA1NCA6IChHcm91cCA1NCBwbV9kc291cmNlX0wyKSBSdW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgzNjUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDU0IDogKEdyb3VwIDU0IHBtX2Rzb3VyY2VfTDIpIFJ1biBjeWNsZXMKKworI0dyb3VwIDU1IHBtX2Rzb3VyY2VfTDMsIEwzIGNhY2hlIGRhdGEgYWNjZXNzCitldmVudDowWDM3MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fREFUQV9GUk9NX0wzNV9TSFJfR1JQNTUgOiAoR3JvdXAgNTUgcG1fZHNvdXJjZV9MMykgRGF0YSBsb2FkZWQgZnJvbSBMMy41IHNoYXJlZAorZXZlbnQ6MFgzNzEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RBVEFfRlJPTV9MMzVfTU9EX0dSUDU1IDogKEdyb3VwIDU1IHBtX2Rzb3VyY2VfTDMpIERhdGEgbG9hZGVkIGZyb20gTDMuNSBtb2RpZmllZAorZXZlbnQ6MFgzNzIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RBVEFfRlJPTV9MMzc1X1NIUl9HUlA1NSA6IChHcm91cCA1NSBwbV9kc291cmNlX0wzKSBEYXRhIGxvYWRlZCBmcm9tIEwzLjc1IHNoYXJlZAorZXZlbnQ6MFgzNzMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RBVEFfRlJPTV9MMzc1X01PRF9HUlA1NSA6IChHcm91cCA1NSBwbV9kc291cmNlX0wzKSBEYXRhIGxvYWRlZCBmcm9tIEwzLjc1IG1vZGlmaWVkCitldmVudDowWDM3NCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlA1NSA6IChHcm91cCA1NSBwbV9kc291cmNlX0wzKSBSdW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgzNzUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDU1IDogKEdyb3VwIDU1IHBtX2Rzb3VyY2VfTDMpIFJ1biBjeWNsZXMKKworI0dyb3VwIDU2IHBtX2lzb3VyY2UxLCBJbnN0cnVjdGlvbiBzb3VyY2UgaW5mb3JtYXRpb24KK2V2ZW50OjBYMzgwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JTlNUX0ZST01fTDNfR1JQNTYgOiAoR3JvdXAgNTYgcG1faXNvdXJjZTEpIEluc3RydWN0aW9uIGZldGNoZWQgZnJvbSBMMworZXZlbnQ6MFgzODEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lOU1RfRlJPTV9MMV9HUlA1NiA6IChHcm91cCA1NiBwbV9pc291cmNlMSkgSW5zdHJ1Y3Rpb24gZmV0Y2hlZCBmcm9tIEwxCitldmVudDowWDM4MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU5TVF9GUk9NX1BSRUZfR1JQNTYgOiAoR3JvdXAgNTYgcG1faXNvdXJjZTEpIEluc3RydWN0aW9ucyBmZXRjaGVkIGZyb20gcHJlZmV0Y2gKK2V2ZW50OjBYMzgzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JTlNUX0ZST01fUk1FTV9HUlA1NiA6IChHcm91cCA1NiBwbV9pc291cmNlMSkgSW5zdHJ1Y3Rpb24gZmV0Y2hlZCBmcm9tIHJlbW90ZSBtZW1vcnkKK2V2ZW50OjBYMzg0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDU2IDogKEdyb3VwIDU2IHBtX2lzb3VyY2UxKSBSdW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgzODUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDU2IDogKEdyb3VwIDU2IHBtX2lzb3VyY2UxKSBSdW4gY3ljbGVzCisKKyNHcm91cCA1NyBwbV9pc291cmNlMiwgSW5zdHJ1Y3Rpb24gc291cmNlIGluZm9ybWF0aW9uCitldmVudDowWDM5MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU5TVF9GUk9NX0wyX0dSUDU3IDogKEdyb3VwIDU3IHBtX2lzb3VyY2UyKSBJbnN0cnVjdGlvbnMgZmV0Y2hlZCBmcm9tIEwyCitldmVudDowWDM5MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU5TVF9GUk9NX0xNRU1fR1JQNTcgOiAoR3JvdXAgNTcgcG1faXNvdXJjZTIpIEluc3RydWN0aW9uIGZldGNoZWQgZnJvbSBsb2NhbCBtZW1vcnkKK2V2ZW50OjBYMzkyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JT1BTX0NNUExfR1JQNTcgOiAoR3JvdXAgNTcgcG1faXNvdXJjZTIpIElPUFMgaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgzOTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNXzBJTlNUX0ZFVENIX0dSUDU3IDogKEdyb3VwIDU3IHBtX2lzb3VyY2UyKSBObyBpbnN0cnVjdGlvbnMgZmV0Y2hlZAorZXZlbnQ6MFgzOTQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQNTcgOiAoR3JvdXAgNTcgcG1faXNvdXJjZTIpIFJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDM5NSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQNTcgOiAoR3JvdXAgNTcgcG1faXNvdXJjZTIpIFJ1biBjeWNsZXMKKworI0dyb3VwIDU4IHBtX2lzb3VyY2VfTDIsIEwyIGluc3RydWN0aW9uIHNvdXJjZSBpbmZvcm1hdGlvbgorZXZlbnQ6MFgzQTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lOU1RfRlJPTV9MMjVfU0hSX0dSUDU4IDogKEdyb3VwIDU4IHBtX2lzb3VyY2VfTDIpIEluc3RydWN0aW9uIGZldGNoZWQgZnJvbSBMMi41IHNoYXJlZAorZXZlbnQ6MFgzQTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lOU1RfRlJPTV9MMjVfTU9EX0dSUDU4IDogKEdyb3VwIDU4IHBtX2lzb3VyY2VfTDIpIEluc3RydWN0aW9uIGZldGNoZWQgZnJvbSBMMi41IG1vZGlmaWVkCitldmVudDowWDNBMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU5TVF9GUk9NX0wyNzVfU0hSX0dSUDU4IDogKEdyb3VwIDU4IHBtX2lzb3VyY2VfTDIpIEluc3RydWN0aW9uIGZldGNoZWQgZnJvbSBMMi43NSBzaGFyZWQKK2V2ZW50OjBYM0EzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JTlNUX0ZST01fTDI3NV9NT0RfR1JQNTggOiAoR3JvdXAgNTggcG1faXNvdXJjZV9MMikgSW5zdHJ1Y3Rpb24gZmV0Y2hlZCBmcm9tIEwyLjc1IG1vZGlmaWVkCitldmVudDowWDNBNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlA1OCA6IChHcm91cCA1OCBwbV9pc291cmNlX0wyKSBSdW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgzQTUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDU4IDogKEdyb3VwIDU4IHBtX2lzb3VyY2VfTDIpIFJ1biBjeWNsZXMKKworI0dyb3VwIDU5IHBtX2lzb3VyY2VfTDMsIEwzIGluc3RydWN0aW9uIHNvdXJjZSBpbmZvcm1hdGlvbgorZXZlbnQ6MFgzQjAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lOU1RfRlJPTV9MMk1JU1NfR1JQNTkgOiAoR3JvdXAgNTkgcG1faXNvdXJjZV9MMykgSW5zdHJ1Y3Rpb25zIGZldGNoZWQgbWlzc2VkIEwyCitldmVudDowWDNCMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU5TVF9GUk9NX0wzNV9NT0RfR1JQNTkgOiAoR3JvdXAgNTkgcG1faXNvdXJjZV9MMykgSW5zdHJ1Y3Rpb24gZmV0Y2hlZCBmcm9tIEwzLjUgbW9kaWZpZWQKK2V2ZW50OjBYM0IyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JTlNUX0ZST01fTDM3NV9TSFJfR1JQNTkgOiAoR3JvdXAgNTkgcG1faXNvdXJjZV9MMykgSW5zdHJ1Y3Rpb24gZmV0Y2hlZCBmcm9tIEwzLjc1IHNoYXJlZAorZXZlbnQ6MFgzQjMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lOU1RfRlJPTV9MMzc1X01PRF9HUlA1OSA6IChHcm91cCA1OSBwbV9pc291cmNlX0wzKSBJbnN0cnVjdGlvbiBmZXRjaGVkIGZyb20gTDMuNzUgbW9kaWZpZWQKK2V2ZW50OjBYM0I0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDU5IDogKEdyb3VwIDU5IHBtX2lzb3VyY2VfTDMpIFJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDNCNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQNTkgOiAoR3JvdXAgNTkgcG1faXNvdXJjZV9MMykgUnVuIGN5Y2xlcworCisjR3JvdXAgNjAgcG1fcHRlZ19zb3VyY2UxLCBQVEVHIHNvdXJjZSBpbmZvcm1hdGlvbgorZXZlbnQ6MFgzQzAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1BURUdfRlJPTV9MMjVfU0hSX0dSUDYwIDogKEdyb3VwIDYwIHBtX3B0ZWdfc291cmNlMSkgUFRFRyBsb2FkZWQgZnJvbSBMMi41IHNoYXJlZAorZXZlbnQ6MFgzQzEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1BURUdfRlJPTV9MMjVfTU9EX0dSUDYwIDogKEdyb3VwIDYwIHBtX3B0ZWdfc291cmNlMSkgUFRFRyBsb2FkZWQgZnJvbSBMMi41IG1vZGlmaWVkCitldmVudDowWDNDMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUFRFR19GUk9NX0wyNzVfU0hSX0dSUDYwIDogKEdyb3VwIDYwIHBtX3B0ZWdfc291cmNlMSkgUFRFRyBsb2FkZWQgZnJvbSBMMi43NSBzaGFyZWQKK2V2ZW50OjBYM0MzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9QVEVHX0ZST01fTDI3NV9NT0RfR1JQNjAgOiAoR3JvdXAgNjAgcG1fcHRlZ19zb3VyY2UxKSBQVEVHIGxvYWRlZCBmcm9tIEwyLjc1IG1vZGlmaWVkCitldmVudDowWDNDNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlA2MCA6IChHcm91cCA2MCBwbV9wdGVnX3NvdXJjZTEpIFJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDNDNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQNjAgOiAoR3JvdXAgNjAgcG1fcHRlZ19zb3VyY2UxKSBSdW4gY3ljbGVzCisKKyNHcm91cCA2MSBwbV9wdGVnX3NvdXJjZTIsIFBURUcgc291cmNlIGluZm9ybWF0aW9uCitldmVudDowWDNEMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUFRFR19GUk9NX0wzNV9TSFJfR1JQNjEgOiAoR3JvdXAgNjEgcG1fcHRlZ19zb3VyY2UyKSBQVEVHIGxvYWRlZCBmcm9tIEwzLjUgc2hhcmVkCitldmVudDowWDNEMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUFRFR19GUk9NX0wzNV9NT0RfR1JQNjEgOiAoR3JvdXAgNjEgcG1fcHRlZ19zb3VyY2UyKSBQVEVHIGxvYWRlZCBmcm9tIEwzLjUgbW9kaWZpZWQKK2V2ZW50OjBYM0QyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9QVEVHX0ZST01fTDM3NV9TSFJfR1JQNjEgOiAoR3JvdXAgNjEgcG1fcHRlZ19zb3VyY2UyKSBQVEVHIGxvYWRlZCBmcm9tIEwzLjc1IHNoYXJlZAorZXZlbnQ6MFgzRDMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1BURUdfRlJPTV9MMzc1X01PRF9HUlA2MSA6IChHcm91cCA2MSBwbV9wdGVnX3NvdXJjZTIpIFBURUcgbG9hZGVkIGZyb20gTDMuNzUgbW9kaWZpZWQKK2V2ZW50OjBYM0Q0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDYxIDogKEdyb3VwIDYxIHBtX3B0ZWdfc291cmNlMikgUnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYM0Q1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlA2MSA6IChHcm91cCA2MSBwbV9wdGVnX3NvdXJjZTIpIFJ1biBjeWNsZXMKKworI0dyb3VwIDYyIHBtX3B0ZWdfc291cmNlMywgUFRFRyBzb3VyY2UgaW5mb3JtYXRpb24KK2V2ZW50OjBYM0UwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9QVEVHX0ZST01fTDJfR1JQNjIgOiAoR3JvdXAgNjIgcG1fcHRlZ19zb3VyY2UzKSBQVEVHIGxvYWRlZCBmcm9tIEwyCitldmVudDowWDNFMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUFRFR19GUk9NX0xNRU1fR1JQNjIgOiAoR3JvdXAgNjIgcG1fcHRlZ19zb3VyY2UzKSBQVEVHIGxvYWRlZCBmcm9tIGxvY2FsIG1lbW9yeQorZXZlbnQ6MFgzRTIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1BURUdfRlJPTV9MMk1JU1NfR1JQNjIgOiAoR3JvdXAgNjIgcG1fcHRlZ19zb3VyY2UzKSBQVEVHIGxvYWRlZCBmcm9tIEwyIG1pc3MKK2V2ZW50OjBYM0UzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9QVEVHX0ZST01fUk1FTV9HUlA2MiA6IChHcm91cCA2MiBwbV9wdGVnX3NvdXJjZTMpIFBURUcgbG9hZGVkIGZyb20gcmVtb3RlIG1lbW9yeQorZXZlbnQ6MFgzRTQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQNjIgOiAoR3JvdXAgNjIgcG1fcHRlZ19zb3VyY2UzKSBSdW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgzRTUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDYyIDogKEdyb3VwIDYyIHBtX3B0ZWdfc291cmNlMykgUnVuIGN5Y2xlcworCisjR3JvdXAgNjMgcG1fcHRlZ19zb3VyY2U0LCBMMyBQVEVHIGFuZCBncm91cCBkaXNwdGFjaCBldmVudHMKK2V2ZW50OjBYM0YwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9QVEVHX0ZST01fTDNfR1JQNjMgOiAoR3JvdXAgNjMgcG1fcHRlZ19zb3VyY2U0KSBQVEVHIGxvYWRlZCBmcm9tIEwzCitldmVudDowWDNGMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fR1JQX0RJU1BfR1JQNjMgOiAoR3JvdXAgNjMgcG1fcHRlZ19zb3VyY2U0KSBHcm91cCBkaXNwYXRjaGVzCitldmVudDowWDNGMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fR1JQX0RJU1BfU1VDQ0VTU19HUlA2MyA6IChHcm91cCA2MyBwbV9wdGVnX3NvdXJjZTQpIEdyb3VwIGRpc3BhdGNoIHN1Y2Nlc3MKK2V2ZW50OjBYM0YzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQ19JTlZfTDJfR1JQNjMgOiAoR3JvdXAgNjMgcG1fcHRlZ19zb3VyY2U0KSBMMSBEIGNhY2hlIGVudHJpZXMgaW52YWxpZGF0ZWQgZnJvbSBMMgorZXZlbnQ6MFgzRjQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQNjMgOiAoR3JvdXAgNjMgcG1fcHRlZ19zb3VyY2U0KSBSdW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgzRjUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDYzIDogKEdyb3VwIDYzIHBtX3B0ZWdfc291cmNlNCkgUnVuIGN5Y2xlcworCisjR3JvdXAgNjQgcG1fTDJTQV9sZCwgTDIgc2xpY2UgQSBsb2FkIGV2ZW50cworZXZlbnQ6MFg0MDAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wyU0FfUkNMRF9ESVNQX0dSUDY0IDogKEdyb3VwIDY0IHBtX0wyU0FfbGQpIEwyIFNsaWNlIEEgUkMgbG9hZCBkaXNwYXRjaCBhdHRlbXB0CitldmVudDowWDQwMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDJTQV9SQ0xEX0RJU1BfRkFJTF9SQ19GVUxMX0dSUDY0IDogKEdyb3VwIDY0IHBtX0wyU0FfbGQpIEwyIFNsaWNlIEEgUkMgbG9hZCBkaXNwYXRjaCBhdHRlbXB0IGZhaWxlZCBkdWUgdG8gYWxsIFJDIGZ1bGwKK2V2ZW50OjBYNDAyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMlNBX1JDTERfRElTUF9GQUlMX0FERFJfR1JQNjQgOiAoR3JvdXAgNjQgcG1fTDJTQV9sZCkgTDIgU2xpY2UgQSBSQyBsb2FkIGRpc3BhdGNoIGF0dGVtcHQgZmFpbGVkIGR1ZSB0byBhZGRyZXNzIGNvbGxpc2lvbiB3aXRoIFJDL0NPL1NOL1NRCitldmVudDowWDQwMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDJTQV9SQ0xEX0RJU1BfRkFJTF9PVEhFUl9HUlA2NCA6IChHcm91cCA2NCBwbV9MMlNBX2xkKSBMMiBTbGljZSBBIFJDIGxvYWQgZGlzcGF0Y2ggYXR0ZW1wdCBmYWlsZWQgZHVlIHRvIG90aGVyIHJlYXNvbnMKK2V2ZW50OjBYNDA0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDY0IDogKEdyb3VwIDY0IHBtX0wyU0FfbGQpIFJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDQwNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQNjQgOiAoR3JvdXAgNjQgcG1fTDJTQV9sZCkgUnVuIGN5Y2xlcworCisjR3JvdXAgNjUgcG1fTDJTQV9zdCwgTDIgc2xpY2UgQSBzdG9yZSBldmVudHMKK2V2ZW50OjBYNDEwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMlNBX1JDU1RfRElTUF9HUlA2NSA6IChHcm91cCA2NSBwbV9MMlNBX3N0KSBMMiBTbGljZSBBIFJDIHN0b3JlIGRpc3BhdGNoIGF0dGVtcHQKK2V2ZW50OjBYNDExIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMlNBX1JDU1RfRElTUF9GQUlMX1JDX0ZVTExfR1JQNjUgOiAoR3JvdXAgNjUgcG1fTDJTQV9zdCkgTDIgU2xpY2UgQSBSQyBzdG9yZSBkaXNwYXRjaCBhdHRlbXB0IGZhaWxlZCBkdWUgdG8gYWxsIFJDIGZ1bGwKK2V2ZW50OjBYNDEyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMlNBX1JDU1RfRElTUF9GQUlMX0FERFJfR1JQNjUgOiAoR3JvdXAgNjUgcG1fTDJTQV9zdCkgTDIgU2xpY2UgQSBSQyBzdG9yZSBkaXNwYXRjaCBhdHRlbXB0IGZhaWxlZCBkdWUgdG8gYWRkcmVzcyBjb2xsaXNpb24gd2l0aCBSQy9DTy9TTi9TUQorZXZlbnQ6MFg0MTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wyU0FfUkNTVF9ESVNQX0ZBSUxfT1RIRVJfR1JQNjUgOiAoR3JvdXAgNjUgcG1fTDJTQV9zdCkgTDIgU2xpY2UgQSBSQyBzdG9yZSBkaXNwYXRjaCBhdHRlbXB0IGZhaWxlZCBkdWUgdG8gb3RoZXIgcmVhc29ucworZXZlbnQ6MFg0MTQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQNjUgOiAoR3JvdXAgNjUgcG1fTDJTQV9zdCkgUnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYNDE1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlA2NSA6IChHcm91cCA2NSBwbV9MMlNBX3N0KSBSdW4gY3ljbGVzCisKKyNHcm91cCA2NiBwbV9MMlNBX3N0MiwgTDIgc2xpY2UgQSBzdG9yZSBldmVudHMKK2V2ZW50OjBYNDIwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMlNBX1JDX0RJU1BfRkFJTF9DT19CVVNZX0dSUDY2IDogKEdyb3VwIDY2IHBtX0wyU0Ffc3QyKSBMMiBTbGljZSBBIFJDIGRpc3BhdGNoIGF0dGVtcHQgZmFpbGVkIGR1ZSB0byBSQy9DTyBwYWlyIGNob3NlbiB3YXMgbWlzcyBhbmQgQ08gYWxyZWFkeSBidXN5CitldmVudDowWDQyMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDJTQV9TVF9SRVFfR1JQNjYgOiAoR3JvdXAgNjYgcG1fTDJTQV9zdDIpIEwyIHNsaWNlIEEgc3RvcmUgcmVxdWVzdHMKK2V2ZW50OjBYNDIyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMlNBX1JDX0RJU1BfRkFJTF9DT19CVVNZX0FMTF9HUlA2NiA6IChHcm91cCA2NiBwbV9MMlNBX3N0MikgTDIgU2xpY2UgQSBSQyBkaXNwYXRjaCBhdHRlbXB0IGZhaWxlZCBkdWUgdG8gYWxsIENPIGJ1c3kKK2V2ZW50OjBYNDIzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMlNBX1NUX0hJVF9HUlA2NiA6IChHcm91cCA2NiBwbV9MMlNBX3N0MikgTDIgc2xpY2UgQSBzdG9yZSBoaXRzCitldmVudDowWDQyNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlA2NiA6IChHcm91cCA2NiBwbV9MMlNBX3N0MikgUnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYNDI1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlA2NiA6IChHcm91cCA2NiBwbV9MMlNBX3N0MikgUnVuIGN5Y2xlcworCisjR3JvdXAgNjcgcG1fTDJTQl9sZCwgTDIgc2xpY2UgQiBsb2FkIGV2ZW50cworZXZlbnQ6MFg0MzAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wyU0JfUkNMRF9ESVNQX0dSUDY3IDogKEdyb3VwIDY3IHBtX0wyU0JfbGQpIEwyIFNsaWNlIEIgUkMgbG9hZCBkaXNwYXRjaCBhdHRlbXB0CitldmVudDowWDQzMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDJTQl9SQ0xEX0RJU1BfRkFJTF9SQ19GVUxMX0dSUDY3IDogKEdyb3VwIDY3IHBtX0wyU0JfbGQpIEwyIFNsaWNlIEIgUkMgbG9hZCBkaXNwYXRjaCBhdHRlbXB0IGZhaWxlZCBkdWUgdG8gYWxsIFJDIGZ1bGwKK2V2ZW50OjBYNDMyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMlNCX1JDTERfRElTUF9GQUlMX0FERFJfR1JQNjcgOiAoR3JvdXAgNjcgcG1fTDJTQl9sZCkgTDIgU2xpY2UgQiBSQyBsb2FkIGRpc3BhdGNoIGF0dGVtcHQgZmFpbGVkIGR1ZSB0byBhZGRyZXNzIGNvbGxpc2lvbiB3aXRoIFJDL0NPL1NOL1NRCitldmVudDowWDQzMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDJTQl9SQ0xEX0RJU1BfRkFJTF9PVEhFUl9HUlA2NyA6IChHcm91cCA2NyBwbV9MMlNCX2xkKSBMMiBTbGljZSBCIFJDIGxvYWQgZGlzcGF0Y2ggYXR0ZW1wdCBmYWlsZWQgZHVlIHRvIG90aGVyIHJlYXNvbnMKK2V2ZW50OjBYNDM0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDY3IDogKEdyb3VwIDY3IHBtX0wyU0JfbGQpIFJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDQzNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQNjcgOiAoR3JvdXAgNjcgcG1fTDJTQl9sZCkgUnVuIGN5Y2xlcworCisjR3JvdXAgNjggcG1fTDJTQl9zdCwgTDIgc2xpY2UgQiBzdG9yZSBldmVudHMKK2V2ZW50OjBYNDQwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMlNCX1JDU1RfRElTUF9HUlA2OCA6IChHcm91cCA2OCBwbV9MMlNCX3N0KSBMMiBTbGljZSBCIFJDIHN0b3JlIGRpc3BhdGNoIGF0dGVtcHQKK2V2ZW50OjBYNDQxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMlNCX1JDU1RfRElTUF9GQUlMX1JDX0ZVTExfR1JQNjggOiAoR3JvdXAgNjggcG1fTDJTQl9zdCkgTDIgU2xpY2UgQiBSQyBzdG9yZSBkaXNwYXRjaCBhdHRlbXB0IGZhaWxlZCBkdWUgdG8gYWxsIFJDIGZ1bGwKK2V2ZW50OjBYNDQyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMlNCX1JDU1RfRElTUF9GQUlMX0FERFJfR1JQNjggOiAoR3JvdXAgNjggcG1fTDJTQl9zdCkgTDIgU2xpY2UgQiBSQyBzdG9yZSBkaXNwYXRjaCBhdHRlbXB0IGZhaWxlZCBkdWUgdG8gYWRkcmVzcyBjb2xsaXNpb24gd2l0aCBSQy9DTy9TTi9TUQorZXZlbnQ6MFg0NDMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wyU0JfUkNTVF9ESVNQX0ZBSUxfT1RIRVJfR1JQNjggOiAoR3JvdXAgNjggcG1fTDJTQl9zdCkgTDIgU2xpY2UgQiBSQyBzdG9yZSBkaXNwYXRjaCBhdHRlbXB0IGZhaWxlZCBkdWUgdG8gb3RoZXIgcmVhc29ucworZXZlbnQ6MFg0NDQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQNjggOiAoR3JvdXAgNjggcG1fTDJTQl9zdCkgUnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYNDQ1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlA2OCA6IChHcm91cCA2OCBwbV9MMlNCX3N0KSBSdW4gY3ljbGVzCisKKyNHcm91cCA2OSBwbV9MMlNCX3N0MiwgTDIgc2xpY2UgQiBzdG9yZSBldmVudHMKK2V2ZW50OjBYNDUwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMlNCX1JDX0RJU1BfRkFJTF9DT19CVVNZX0dSUDY5IDogKEdyb3VwIDY5IHBtX0wyU0Jfc3QyKSBMMiBTbGljZSBCIFJDIGRpc3BhdGNoIGF0dGVtcHQgZmFpbGVkIGR1ZSB0byBSQy9DTyBwYWlyIGNob3NlbiB3YXMgbWlzcyBhbmQgQ08gYWxyZWFkeSBidXN5CitldmVudDowWDQ1MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDJTQl9TVF9SRVFfR1JQNjkgOiAoR3JvdXAgNjkgcG1fTDJTQl9zdDIpIEwyIHNsaWNlIEIgc3RvcmUgcmVxdWVzdHMKK2V2ZW50OjBYNDUyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMlNCX1JDX0RJU1BfRkFJTF9DT19CVVNZX0FMTF9HUlA2OSA6IChHcm91cCA2OSBwbV9MMlNCX3N0MikgTDIgU2xpY2UgQiBSQyBkaXNwYXRjaCBhdHRlbXB0IGZhaWxlZCBkdWUgdG8gYWxsIENPIGJ1c3kKK2V2ZW50OjBYNDUzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMlNCX1NUX0hJVF9HUlA2OSA6IChHcm91cCA2OSBwbV9MMlNCX3N0MikgTDIgc2xpY2UgQiBzdG9yZSBoaXRzCitldmVudDowWDQ1NCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlA2OSA6IChHcm91cCA2OSBwbV9MMlNCX3N0MikgUnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYNDU1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlA2OSA6IChHcm91cCA2OSBwbV9MMlNCX3N0MikgUnVuIGN5Y2xlcworCisjR3JvdXAgNzAgcG1fTDJTQl9sZCwgTDIgc2xpY2UgQyBsb2FkIGV2ZW50cworZXZlbnQ6MFg0NjAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wyU0NfUkNMRF9ESVNQX0dSUDcwIDogKEdyb3VwIDcwIHBtX0wyU0JfbGQpIEwyIFNsaWNlIEMgUkMgbG9hZCBkaXNwYXRjaCBhdHRlbXB0CitldmVudDowWDQ2MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDJTQ19SQ0xEX0RJU1BfRkFJTF9SQ19GVUxMX0dSUDcwIDogKEdyb3VwIDcwIHBtX0wyU0JfbGQpIEwyIFNsaWNlIEMgUkMgbG9hZCBkaXNwYXRjaCBhdHRlbXB0IGZhaWxlZCBkdWUgdG8gYWxsIFJDIGZ1bGwKK2V2ZW50OjBYNDYyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMlNDX1JDTERfRElTUF9GQUlMX0FERFJfR1JQNzAgOiAoR3JvdXAgNzAgcG1fTDJTQl9sZCkgTDIgU2xpY2UgQyBSQyBsb2FkIGRpc3BhdGNoIGF0dGVtcHQgZmFpbGVkIGR1ZSB0byBhZGRyZXNzIGNvbGxpc2lvbiB3aXRoIFJDL0NPL1NOL1NRCitldmVudDowWDQ2MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDJTQ19SQ0xEX0RJU1BfRkFJTF9PVEhFUl9HUlA3MCA6IChHcm91cCA3MCBwbV9MMlNCX2xkKSBMMiBTbGljZSBDIFJDIGxvYWQgZGlzcGF0Y2ggYXR0ZW1wdCBmYWlsZWQgZHVlIHRvIG90aGVyIHJlYXNvbnMKK2V2ZW50OjBYNDY0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDcwIDogKEdyb3VwIDcwIHBtX0wyU0JfbGQpIFJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDQ2NSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQNzAgOiAoR3JvdXAgNzAgcG1fTDJTQl9sZCkgUnVuIGN5Y2xlcworCisjR3JvdXAgNzEgcG1fTDJTQl9zdCwgTDIgc2xpY2UgQyBzdG9yZSBldmVudHMKK2V2ZW50OjBYNDcwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMlNDX1JDU1RfRElTUF9HUlA3MSA6IChHcm91cCA3MSBwbV9MMlNCX3N0KSBMMiBTbGljZSBDIFJDIHN0b3JlIGRpc3BhdGNoIGF0dGVtcHQKK2V2ZW50OjBYNDcxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMlNDX1JDU1RfRElTUF9GQUlMX1JDX0ZVTExfR1JQNzEgOiAoR3JvdXAgNzEgcG1fTDJTQl9zdCkgTDIgU2xpY2UgQyBSQyBzdG9yZSBkaXNwYXRjaCBhdHRlbXB0IGZhaWxlZCBkdWUgdG8gYWxsIFJDIGZ1bGwKK2V2ZW50OjBYNDcyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMlNDX1JDU1RfRElTUF9GQUlMX0FERFJfR1JQNzEgOiAoR3JvdXAgNzEgcG1fTDJTQl9zdCkgTDIgU2xpY2UgQyBSQyBzdG9yZSBkaXNwYXRjaCBhdHRlbXB0IGZhaWxlZCBkdWUgdG8gYWRkcmVzcyBjb2xsaXNpb24gd2l0aCBSQy9DTy9TTi9TUQorZXZlbnQ6MFg0NzMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wyU0NfUkNTVF9ESVNQX0ZBSUxfT1RIRVJfR1JQNzEgOiAoR3JvdXAgNzEgcG1fTDJTQl9zdCkgTDIgU2xpY2UgQyBSQyBzdG9yZSBkaXNwYXRjaCBhdHRlbXB0IGZhaWxlZCBkdWUgdG8gb3RoZXIgcmVhc29ucworZXZlbnQ6MFg0NzQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQNzEgOiAoR3JvdXAgNzEgcG1fTDJTQl9zdCkgUnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYNDc1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlA3MSA6IChHcm91cCA3MSBwbV9MMlNCX3N0KSBSdW4gY3ljbGVzCisKKyNHcm91cCA3MiBwbV9MMlNCX3N0MiwgTDIgc2xpY2UgQyBzdG9yZSBldmVudHMKK2V2ZW50OjBYNDgwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMlNDX1JDX0RJU1BfRkFJTF9DT19CVVNZX0dSUDcyIDogKEdyb3VwIDcyIHBtX0wyU0Jfc3QyKSBMMiBTbGljZSBDIFJDIGRpc3BhdGNoIGF0dGVtcHQgZmFpbGVkIGR1ZSB0byBSQy9DTyBwYWlyIGNob3NlbiB3YXMgbWlzcyBhbmQgQ08gYWxyZWFkeSBidXN5CitldmVudDowWDQ4MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDJTQ19TVF9SRVFfR1JQNzIgOiAoR3JvdXAgNzIgcG1fTDJTQl9zdDIpIEwyIHNsaWNlIEMgc3RvcmUgcmVxdWVzdHMKK2V2ZW50OjBYNDgyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMlNDX1JDX0RJU1BfRkFJTF9DT19CVVNZX0FMTF9HUlA3MiA6IChHcm91cCA3MiBwbV9MMlNCX3N0MikgTDIgU2xpY2UgQyBSQyBkaXNwYXRjaCBhdHRlbXB0IGZhaWxlZCBkdWUgdG8gYWxsIENPIGJ1c3kKK2V2ZW50OjBYNDgzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMlNDX1NUX0hJVF9HUlA3MiA6IChHcm91cCA3MiBwbV9MMlNCX3N0MikgTDIgc2xpY2UgQyBzdG9yZSBoaXRzCitldmVudDowWDQ4NCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlA3MiA6IChHcm91cCA3MiBwbV9MMlNCX3N0MikgUnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYNDg1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlA3MiA6IChHcm91cCA3MiBwbV9MMlNCX3N0MikgUnVuIGN5Y2xlcworCisjR3JvdXAgNzMgcG1fTDNTQV90cmFucywgTDMgc2xpY2UgQSBzdGF0ZSB0cmFuc2lzdGlvbnMKK2V2ZW50OjBYNDkwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MM1NBX01PRF9UQUdfR1JQNzMgOiAoR3JvdXAgNzMgcG1fTDNTQV90cmFucykgTDMgc2xpY2UgQSB0cmFuc2l0aW9uIGZyb20gbW9kaWZpZWQgdG8gVEFHCitldmVudDowWDQ5MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU9QU19DTVBMX0dSUDczIDogKEdyb3VwIDczIHBtX0wzU0FfdHJhbnMpIElPUFMgaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFg0OTIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wzU0FfTU9EX0lOVl9HUlA3MyA6IChHcm91cCA3MyBwbV9MM1NBX3RyYW5zKSBMMyBzbGljZSBBIHRyYW5zaXRpb24gZnJvbSBtb2RpZmllZCB0byBpbnZhbGlkCitldmVudDowWDQ5MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDNTQV9TSFJfSU5WX0dSUDczIDogKEdyb3VwIDczIHBtX0wzU0FfdHJhbnMpIEwzIHNsaWNlIEEgdHJhbnNpdGlvbiBmcm9tIHNoYXJlZCB0byBpbnZhbGlkCitldmVudDowWDQ5NCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlA3MyA6IChHcm91cCA3MyBwbV9MM1NBX3RyYW5zKSBSdW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFg0OTUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDczIDogKEdyb3VwIDczIHBtX0wzU0FfdHJhbnMpIFJ1biBjeWNsZXMKKworI0dyb3VwIDc0IHBtX0wzU0JfdHJhbnMsIEwzIHNsaWNlIEIgc3RhdGUgdHJhbnNpc3Rpb25zCitldmVudDowWDRBMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU9QU19DTVBMX0dSUDc0IDogKEdyb3VwIDc0IHBtX0wzU0JfdHJhbnMpIElPUFMgaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFg0QTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wzU0JfTU9EX1RBR19HUlA3NCA6IChHcm91cCA3NCBwbV9MM1NCX3RyYW5zKSBMMyBzbGljZSBCIHRyYW5zaXRpb24gZnJvbSBtb2RpZmllZCB0byBUQUcKK2V2ZW50OjBYNEEyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MM1NCX01PRF9JTlZfR1JQNzQgOiAoR3JvdXAgNzQgcG1fTDNTQl90cmFucykgTDMgc2xpY2UgQiB0cmFuc2l0aW9uIGZyb20gbW9kaWZpZWQgdG8gaW52YWxpZAorZXZlbnQ6MFg0QTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wzU0JfU0hSX0lOVl9HUlA3NCA6IChHcm91cCA3NCBwbV9MM1NCX3RyYW5zKSBMMyBzbGljZSBCIHRyYW5zaXRpb24gZnJvbSBzaGFyZWQgdG8gaW52YWxpZAorZXZlbnQ6MFg0QTQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQNzQgOiAoR3JvdXAgNzQgcG1fTDNTQl90cmFucykgUnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYNEE1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlA3NCA6IChHcm91cCA3NCBwbV9MM1NCX3RyYW5zKSBSdW4gY3ljbGVzCisKKyNHcm91cCA3NSBwbV9MM1NDX3RyYW5zLCBMMyBzbGljZSBDIHN0YXRlIHRyYW5zaXN0aW9ucworZXZlbnQ6MFg0QjAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lPUFNfQ01QTF9HUlA3NSA6IChHcm91cCA3NSBwbV9MM1NDX3RyYW5zKSBJT1BTIGluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYNEIxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MM1NDX01PRF9UQUdfR1JQNzUgOiAoR3JvdXAgNzUgcG1fTDNTQ190cmFucykgTDMgc2xpY2UgQyB0cmFuc2l0aW9uIGZyb20gbW9kaWZpZWQgdG8gVEFHCitldmVudDowWDRCMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDNTQ19NT0RfSU5WX0dSUDc1IDogKEdyb3VwIDc1IHBtX0wzU0NfdHJhbnMpIEwzIHNsaWNlIEMgdHJhbnNpdGlvbiBmcm9tIG1vZGlmaWVkIHRvIGludmFsaWQKK2V2ZW50OjBYNEIzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MM1NDX1NIUl9JTlZfR1JQNzUgOiAoR3JvdXAgNzUgcG1fTDNTQ190cmFucykgTDMgc2xpY2UgQyB0cmFuc2l0aW9uIGZyb20gc2hhcmVkIHRvIGludmFsaWQKK2V2ZW50OjBYNEI0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDc1IDogKEdyb3VwIDc1IHBtX0wzU0NfdHJhbnMpIFJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDRCNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQNzUgOiAoR3JvdXAgNzUgcG1fTDNTQ190cmFucykgUnVuIGN5Y2xlcworCisjR3JvdXAgNzYgcG1fTDJTQV90cmFucywgTDIgc2xpY2UgQSBzdGF0ZSB0cmFuc2lzdGlvbnMKK2V2ZW50OjBYNEMwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMlNBX01PRF9UQUdfR1JQNzYgOiAoR3JvdXAgNzYgcG1fTDJTQV90cmFucykgTDIgc2xpY2UgQSB0cmFuc2l0aW9uIGZyb20gbW9kaWZpZWQgdG8gdGFnZ2VkCitldmVudDowWDRDMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDJTQV9TSFJfTU9EX0dSUDc2IDogKEdyb3VwIDc2IHBtX0wyU0FfdHJhbnMpIEwyIHNsaWNlIEEgdHJhbnNpdGlvbiBmcm9tIHNoYXJlZCB0byBtb2RpZmllZAorZXZlbnQ6MFg0QzIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wyU0FfTU9EX0lOVl9HUlA3NiA6IChHcm91cCA3NiBwbV9MMlNBX3RyYW5zKSBMMiBzbGljZSBBIHRyYW5zaXRpb24gZnJvbSBtb2RpZmllZCB0byBpbnZhbGlkCitldmVudDowWDRDMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDJTQV9TSFJfSU5WX0dSUDc2IDogKEdyb3VwIDc2IHBtX0wyU0FfdHJhbnMpIEwyIHNsaWNlIEEgdHJhbnNpdGlvbiBmcm9tIHNoYXJlZCB0byBpbnZhbGlkCitldmVudDowWDRDNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlA3NiA6IChHcm91cCA3NiBwbV9MMlNBX3RyYW5zKSBSdW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFg0QzUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDc2IDogKEdyb3VwIDc2IHBtX0wyU0FfdHJhbnMpIFJ1biBjeWNsZXMKKworI0dyb3VwIDc3IHBtX0wyU0JfdHJhbnMsIEwyIHNsaWNlIEIgc3RhdGUgdHJhbnNpc3Rpb25zCitldmVudDowWDREMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDJTQl9NT0RfVEFHX0dSUDc3IDogKEdyb3VwIDc3IHBtX0wyU0JfdHJhbnMpIEwyIHNsaWNlIEIgdHJhbnNpdGlvbiBmcm9tIG1vZGlmaWVkIHRvIHRhZ2dlZAorZXZlbnQ6MFg0RDEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wyU0JfU0hSX01PRF9HUlA3NyA6IChHcm91cCA3NyBwbV9MMlNCX3RyYW5zKSBMMiBzbGljZSBCIHRyYW5zaXRpb24gZnJvbSBzaGFyZWQgdG8gbW9kaWZpZWQKK2V2ZW50OjBYNEQyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMlNCX01PRF9JTlZfR1JQNzcgOiAoR3JvdXAgNzcgcG1fTDJTQl90cmFucykgTDIgc2xpY2UgQiB0cmFuc2l0aW9uIGZyb20gbW9kaWZpZWQgdG8gaW52YWxpZAorZXZlbnQ6MFg0RDMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wyU0JfU0hSX0lOVl9HUlA3NyA6IChHcm91cCA3NyBwbV9MMlNCX3RyYW5zKSBMMiBzbGljZSBCIHRyYW5zaXRpb24gZnJvbSBzaGFyZWQgdG8gaW52YWxpZAorZXZlbnQ6MFg0RDQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQNzcgOiAoR3JvdXAgNzcgcG1fTDJTQl90cmFucykgUnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYNEQ1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlA3NyA6IChHcm91cCA3NyBwbV9MMlNCX3RyYW5zKSBSdW4gY3ljbGVzCisKKyNHcm91cCA3OCBwbV9MMlNDX3RyYW5zLCBMMiBzbGljZSBDIHN0YXRlIHRyYW5zaXN0aW9ucworZXZlbnQ6MFg0RTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wyU0NfTU9EX1RBR19HUlA3OCA6IChHcm91cCA3OCBwbV9MMlNDX3RyYW5zKSBMMiBzbGljZSBDIHRyYW5zaXRpb24gZnJvbSBtb2RpZmllZCB0byB0YWdnZWQKK2V2ZW50OjBYNEUxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMlNDX1NIUl9NT0RfR1JQNzggOiAoR3JvdXAgNzggcG1fTDJTQ190cmFucykgTDIgc2xpY2UgQyB0cmFuc2l0aW9uIGZyb20gc2hhcmVkIHRvIG1vZGlmaWVkCitldmVudDowWDRFMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDJTQ19NT0RfSU5WX0dSUDc4IDogKEdyb3VwIDc4IHBtX0wyU0NfdHJhbnMpIEwyIHNsaWNlIEMgdHJhbnNpdGlvbiBmcm9tIG1vZGlmaWVkIHRvIGludmFsaWQKK2V2ZW50OjBYNEUzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMlNDX1NIUl9JTlZfR1JQNzggOiAoR3JvdXAgNzggcG1fTDJTQ190cmFucykgTDIgc2xpY2UgQyB0cmFuc2l0aW9uIGZyb20gc2hhcmVkIHRvIGludmFsaWQKK2V2ZW50OjBYNEU0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDc4IDogKEdyb3VwIDc4IHBtX0wyU0NfdHJhbnMpIFJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDRFNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQNzggOiAoR3JvdXAgNzggcG1fTDJTQ190cmFucykgUnVuIGN5Y2xlcworCisjR3JvdXAgNzkgcG1fTDNTQUJfcmV0cnksIEwzIHNsaWNlIEEvQiBzbm9vcCByZXRyeSBhbmQgYWxsIENJL0NPIGJ1c3kKK2V2ZW50OjBYNEYwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MM1NBX0FMTF9CVVNZX0dSUDc5IDogKEdyb3VwIDc5IHBtX0wzU0FCX3JldHJ5KSBMMyBzbGljZSBBIGFjdGl2ZSBmb3IgZXZlcnkgY3ljbGUgYWxsIENJL0NPIG1hY2hpbmVzIGJ1c3kKK2V2ZW50OjBYNEYxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MM1NCX0FMTF9CVVNZX0dSUDc5IDogKEdyb3VwIDc5IHBtX0wzU0FCX3JldHJ5KSBMMyBzbGljZSBCIGFjdGl2ZSBmb3IgZXZlcnkgY3ljbGUgYWxsIENJL0NPIG1hY2hpbmVzIGJ1c3kKK2V2ZW50OjBYNEYyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MM1NBX1NOT09QX1JFVFJZX0dSUDc5IDogKEdyb3VwIDc5IHBtX0wzU0FCX3JldHJ5KSBMMyBzbGljZSBBIHNub29wIHJldHJpZXMKK2V2ZW50OjBYNEYzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MM1NCX1NOT09QX1JFVFJZX0dSUDc5IDogKEdyb3VwIDc5IHBtX0wzU0FCX3JldHJ5KSBMMyBzbGljZSBCIHNub29wIHJldHJpZXMKK2V2ZW50OjBYNEY0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDc5IDogKEdyb3VwIDc5IHBtX0wzU0FCX3JldHJ5KSBSdW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFg0RjUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDc5IDogKEdyb3VwIDc5IHBtX0wzU0FCX3JldHJ5KSBSdW4gY3ljbGVzCisKKyNHcm91cCA4MCBwbV9MM1NBQl9oaXQsIEwzIHNsaWNlIEEvQiBoaXQgYW5kIHJlZmVyZW5jZQorZXZlbnQ6MFg1MDAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wzU0FfUkVGX0dSUDgwIDogKEdyb3VwIDgwIHBtX0wzU0FCX2hpdCkgTDMgc2xpY2UgQSByZWZlcmVuY2VzCitldmVudDowWDUwMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDNTQl9SRUZfR1JQODAgOiAoR3JvdXAgODAgcG1fTDNTQUJfaGl0KSBMMyBzbGljZSBCIHJlZmVyZW5jZXMKK2V2ZW50OjBYNTAyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MM1NBX0hJVF9HUlA4MCA6IChHcm91cCA4MCBwbV9MM1NBQl9oaXQpIEwzIHNsaWNlIEEgaGl0cworZXZlbnQ6MFg1MDMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wzU0JfSElUX0dSUDgwIDogKEdyb3VwIDgwIHBtX0wzU0FCX2hpdCkgTDMgc2xpY2UgQiBoaXRzCitldmVudDowWDUwNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlA4MCA6IChHcm91cCA4MCBwbV9MM1NBQl9oaXQpIFJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDUwNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQODAgOiAoR3JvdXAgODAgcG1fTDNTQUJfaGl0KSBSdW4gY3ljbGVzCisKKyNHcm91cCA4MSBwbV9MM1NDX3JldHJ5X2hpdCwgTDMgc2xpY2UgQyBoaXQgJiBzbm9vcCByZXRyeQorZXZlbnQ6MFg1MTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wzU0NfQUxMX0JVU1lfR1JQODEgOiAoR3JvdXAgODEgcG1fTDNTQ19yZXRyeV9oaXQpIEwzIHNsaWNlIEMgYWN0aXZlIGZvciBldmVyeSBjeWNsZSBhbGwgQ0kvQ08gbWFjaGluZXMgYnVzeQorZXZlbnQ6MFg1MTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wzU0NfUkVGX0dSUDgxIDogKEdyb3VwIDgxIHBtX0wzU0NfcmV0cnlfaGl0KSBMMyBzbGljZSBDIHJlZmVyZW5jZXMKK2V2ZW50OjBYNTEyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MM1NDX1NOT09QX1JFVFJZX0dSUDgxIDogKEdyb3VwIDgxIHBtX0wzU0NfcmV0cnlfaGl0KSBMMyBzbGljZSBDIHNub29wIHJldHJpZXMKK2V2ZW50OjBYNTEzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MM1NDX0hJVF9HUlA4MSA6IChHcm91cCA4MSBwbV9MM1NDX3JldHJ5X2hpdCkgTDMgU2xpY2UgQyBoaXRzCitldmVudDowWDUxNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlA4MSA6IChHcm91cCA4MSBwbV9MM1NDX3JldHJ5X2hpdCkgUnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYNTE1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlA4MSA6IChHcm91cCA4MSBwbV9MM1NDX3JldHJ5X2hpdCkgUnVuIGN5Y2xlcworCisjR3JvdXAgODIgcG1fZnB1MSwgRmxvYXRpbmcgUG9pbnQgZXZlbnRzCitldmVudDowWDUyMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVX0ZESVZfR1JQODIgOiAoR3JvdXAgODIgcG1fZnB1MSkgRlBVIGV4ZWN1dGVkIEZESVYgaW5zdHJ1Y3Rpb24KK2V2ZW50OjBYNTIxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFVfRk1BX0dSUDgyIDogKEdyb3VwIDgyIHBtX2ZwdTEpIEZQVSBleGVjdXRlZCBtdWx0aXBseS1hZGQgaW5zdHJ1Y3Rpb24KK2V2ZW50OjBYNTIyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFVfRk1PVl9GRVNUX0dSUDgyIDogKEdyb3VwIDgyIHBtX2ZwdTEpIEZQVSBleGVjdXRpbmcgRk1PViBvciBGRVNUIGluc3RydWN0aW9ucworZXZlbnQ6MFg1MjMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVV9GRVNUX0dSUDgyIDogKEdyb3VwIDgyIHBtX2ZwdTEpIEZQVSBleGVjdXRlZCBGRVNUIGluc3RydWN0aW9uCitldmVudDowWDUyNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlA4MiA6IChHcm91cCA4MiBwbV9mcHUxKSBSdW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFg1MjUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDgyIDogKEdyb3VwIDgyIHBtX2ZwdTEpIFJ1biBjeWNsZXMKKworI0dyb3VwIDgzIHBtX2ZwdTIsIEZsb2F0aW5nIFBvaW50IGV2ZW50cworZXZlbnQ6MFg1MzAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVV8xRkxPUF9HUlA4MyA6IChHcm91cCA4MyBwbV9mcHUyKSBGUFUgZXhlY3V0ZWQgb25lIGZsb3AgaW5zdHJ1Y3Rpb24gCitldmVudDowWDUzMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVX0ZTUVJUX0dSUDgzIDogKEdyb3VwIDgzIHBtX2ZwdTIpIEZQVSBleGVjdXRlZCBGU1FSVCBpbnN0cnVjdGlvbgorZXZlbnQ6MFg1MzIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVV9GUlNQX0ZDT05WX0dSUDgzIDogKEdyb3VwIDgzIHBtX2ZwdTIpIEZQVSBleGVjdXRlZCBGUlNQIG9yIEZDT05WIGluc3RydWN0aW9ucworZXZlbnQ6MFg1MzMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVV9GSU5fR1JQODMgOiAoR3JvdXAgODMgcG1fZnB1MikgRlBVIHByb2R1Y2VkIGEgcmVzdWx0CitldmVudDowWDUzNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlA4MyA6IChHcm91cCA4MyBwbV9mcHUyKSBSdW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFg1MzUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDgzIDogKEdyb3VwIDgzIHBtX2ZwdTIpIFJ1biBjeWNsZXMKKworI0dyb3VwIDg0IHBtX2ZwdTMsIEZsb2F0aW5nIHBvaW50IGV2ZW50cworZXZlbnQ6MFg1NDAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVV9ERU5PUk1fR1JQODQgOiAoR3JvdXAgODQgcG1fZnB1MykgRlBVIHJlY2VpdmVkIGRlbm9ybWFsaXplZCBkYXRhCitldmVudDowWDU0MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVX1NUQUxMM19HUlA4NCA6IChHcm91cCA4NCBwbV9mcHUzKSBGUFUgc3RhbGxlZCBpbiBwaXBlMworZXZlbnQ6MFg1NDIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVTBfRklOX0dSUDg0IDogKEdyb3VwIDg0IHBtX2ZwdTMpIEZQVTAgcHJvZHVjZWQgYSByZXN1bHQKK2V2ZW50OjBYNTQzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFUxX0ZJTl9HUlA4NCA6IChHcm91cCA4NCBwbV9mcHUzKSBGUFUxIHByb2R1Y2VkIGEgcmVzdWx0CitldmVudDowWDU0NCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlA4NCA6IChHcm91cCA4NCBwbV9mcHUzKSBSdW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFg1NDUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDg0IDogKEdyb3VwIDg0IHBtX2ZwdTMpIFJ1biBjeWNsZXMKKworI0dyb3VwIDg1IHBtX2ZwdTQsIEZsb2F0aW5nIHBvaW50IGV2ZW50cworZXZlbnQ6MFg1NTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVV9TSU5HTEVfR1JQODUgOiAoR3JvdXAgODUgcG1fZnB1NCkgRlBVIGV4ZWN1dGVkIHNpbmdsZSBwcmVjaXNpb24gaW5zdHJ1Y3Rpb24KK2V2ZW50OjBYNTUxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFVfU1RGX0dSUDg1IDogKEdyb3VwIDg1IHBtX2ZwdTQpIEZQVSBleGVjdXRlZCBzdG9yZSBpbnN0cnVjdGlvbgorZXZlbnQ6MFg1NTIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lPUFNfQ01QTF9HUlA4NSA6IChHcm91cCA4NSBwbV9mcHU0KSBJT1BTIGluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYNTUzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1VfTERGX0dSUDg1IDogKEdyb3VwIDg1IHBtX2ZwdTQpIExTVSBleGVjdXRlZCBGbG9hdGluZyBQb2ludCBsb2FkIGluc3RydWN0aW9uCitldmVudDowWDU1NCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlA4NSA6IChHcm91cCA4NSBwbV9mcHU0KSBSdW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFg1NTUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDg1IDogKEdyb3VwIDg1IHBtX2ZwdTQpIFJ1biBjeWNsZXMKKworI0dyb3VwIDg2IHBtX2ZwdTUsIEZsb2F0aW5nIHBvaW50IGV2ZW50cyBieSB1bml0CitldmVudDowWDU2MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVMF9GU1FSVF9HUlA4NiA6IChHcm91cCA4NiBwbV9mcHU1KSBGUFUwIGV4ZWN1dGVkIEZTUVJUIGluc3RydWN0aW9uCitldmVudDowWDU2MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVMV9GU1FSVF9HUlA4NiA6IChHcm91cCA4NiBwbV9mcHU1KSBGUFUxIGV4ZWN1dGVkIEZTUVJUIGluc3RydWN0aW9uCitldmVudDowWDU2MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVMF9GRVNUX0dSUDg2IDogKEdyb3VwIDg2IHBtX2ZwdTUpIEZQVTAgZXhlY3V0ZWQgRkVTVCBpbnN0cnVjdGlvbgorZXZlbnQ6MFg1NjMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVTFfRkVTVF9HUlA4NiA6IChHcm91cCA4NiBwbV9mcHU1KSBGUFUxIGV4ZWN1dGVkIEZFU1QgaW5zdHJ1Y3Rpb24KK2V2ZW50OjBYNTY0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDg2IDogKEdyb3VwIDg2IHBtX2ZwdTUpIFJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDU2NSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQODYgOiAoR3JvdXAgODYgcG1fZnB1NSkgUnVuIGN5Y2xlcworCisjR3JvdXAgODcgcG1fZnB1NiwgRmxvYXRpbmcgcG9pbnQgZXZlbnRzIGJ5IHVuaXQKK2V2ZW50OjBYNTcwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFUwX0RFTk9STV9HUlA4NyA6IChHcm91cCA4NyBwbV9mcHU2KSBGUFUwIHJlY2VpdmVkIGRlbm9ybWFsaXplZCBkYXRhCitldmVudDowWDU3MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVMV9ERU5PUk1fR1JQODcgOiAoR3JvdXAgODcgcG1fZnB1NikgRlBVMSByZWNlaXZlZCBkZW5vcm1hbGl6ZWQgZGF0YQorZXZlbnQ6MFg1NzIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVTBfRk1PVl9GRVNUX0dSUDg3IDogKEdyb3VwIDg3IHBtX2ZwdTYpIEZQVTAgZXhlY3V0ZWQgRk1PViBvciBGRVNUIGluc3RydWN0aW9ucworZXZlbnQ6MFg1NzMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVTFfRk1PVl9GRVNUX0dSUDg3IDogKEdyb3VwIDg3IHBtX2ZwdTYpIEZQVTEgZXhlY3V0aW5nIEZNT1Ygb3IgRkVTVCBpbnN0cnVjdGlvbnMKK2V2ZW50OjBYNTc0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDg3IDogKEdyb3VwIDg3IHBtX2ZwdTYpIFJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDU3NSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQODcgOiAoR3JvdXAgODcgcG1fZnB1NikgUnVuIGN5Y2xlcworCisjR3JvdXAgODggcG1fZnB1NywgRmxvYXRpbmcgcG9pbnQgZXZlbnRzIGJ5IHVuaXQKK2V2ZW50OjBYNTgwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFUwX0ZESVZfR1JQODggOiAoR3JvdXAgODggcG1fZnB1NykgRlBVMCBleGVjdXRlZCBGRElWIGluc3RydWN0aW9uCitldmVudDowWDU4MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVMV9GRElWX0dSUDg4IDogKEdyb3VwIDg4IHBtX2ZwdTcpIEZQVTEgZXhlY3V0ZWQgRkRJViBpbnN0cnVjdGlvbgorZXZlbnQ6MFg1ODIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVTBfRlJTUF9GQ09OVl9HUlA4OCA6IChHcm91cCA4OCBwbV9mcHU3KSBGUFUwIGV4ZWN1dGVkIEZSU1Agb3IgRkNPTlYgaW5zdHJ1Y3Rpb25zCitldmVudDowWDU4MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVMV9GUlNQX0ZDT05WX0dSUDg4IDogKEdyb3VwIDg4IHBtX2ZwdTcpIEZQVTEgZXhlY3V0ZWQgRlJTUCBvciBGQ09OViBpbnN0cnVjdGlvbnMKK2V2ZW50OjBYNTg0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDg4IDogKEdyb3VwIDg4IHBtX2ZwdTcpIFJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDU4NSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQODggOiAoR3JvdXAgODggcG1fZnB1NykgUnVuIGN5Y2xlcworCisjR3JvdXAgODkgcG1fZnB1OCwgRmxvYXRpbmcgcG9pbnQgZXZlbnRzIGJ5IHVuaXQKK2V2ZW50OjBYNTkwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFUwX1NUQUxMM19HUlA4OSA6IChHcm91cCA4OSBwbV9mcHU4KSBGUFUwIHN0YWxsZWQgaW4gcGlwZTMKK2V2ZW50OjBYNTkxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFUxX1NUQUxMM19HUlA4OSA6IChHcm91cCA4OSBwbV9mcHU4KSBGUFUxIHN0YWxsZWQgaW4gcGlwZTMKK2V2ZW50OjBYNTkyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JT1BTX0NNUExfR1JQODkgOiAoR3JvdXAgODkgcG1fZnB1OCkgSU9QUyBpbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDU5MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVMF9GUFNDUl9HUlA4OSA6IChHcm91cCA4OSBwbV9mcHU4KSBGUFUwIGV4ZWN1dGVkIEZQU0NSIGluc3RydWN0aW9uCitldmVudDowWDU5NCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlA4OSA6IChHcm91cCA4OSBwbV9mcHU4KSBSdW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFg1OTUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDg5IDogKEdyb3VwIDg5IHBtX2ZwdTgpIFJ1biBjeWNsZXMKKworI0dyb3VwIDkwIHBtX2ZwdTksIEZsb2F0aW5nIHBvaW50IGV2ZW50cyBieSB1bml0CitldmVudDowWDVBMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVMF9TSU5HTEVfR1JQOTAgOiAoR3JvdXAgOTAgcG1fZnB1OSkgRlBVMCBleGVjdXRlZCBzaW5nbGUgcHJlY2lzaW9uIGluc3RydWN0aW9uCitldmVudDowWDVBMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVMV9TSU5HTEVfR1JQOTAgOiAoR3JvdXAgOTAgcG1fZnB1OSkgRlBVMSBleGVjdXRlZCBzaW5nbGUgcHJlY2lzaW9uIGluc3RydWN0aW9uCitldmVudDowWDVBMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVMF9MREZfR1JQOTAgOiAoR3JvdXAgOTAgcG1fZnB1OSkgTFNVMCBleGVjdXRlZCBGbG9hdGluZyBQb2ludCBsb2FkIGluc3RydWN0aW9uCitldmVudDowWDVBMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVMV9MREZfR1JQOTAgOiAoR3JvdXAgOTAgcG1fZnB1OSkgTFNVMSBleGVjdXRlZCBGbG9hdGluZyBQb2ludCBsb2FkIGluc3RydWN0aW9uCitldmVudDowWDVBNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlA5MCA6IChHcm91cCA5MCBwbV9mcHU5KSBSdW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFg1QTUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDkwIDogKEdyb3VwIDkwIHBtX2ZwdTkpIFJ1biBjeWNsZXMKKworI0dyb3VwIDkxIHBtX2ZwdTEwLCBGbG9hdGluZyBwb2ludCBldmVudHMgYnkgdW5pdAorZXZlbnQ6MFg1QjAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVTBfRk1BX0dSUDkxIDogKEdyb3VwIDkxIHBtX2ZwdTEwKSBGUFUwIGV4ZWN1dGVkIG11bHRpcGx5LWFkZCBpbnN0cnVjdGlvbgorZXZlbnQ6MFg1QjEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVTFfRk1BX0dSUDkxIDogKEdyb3VwIDkxIHBtX2ZwdTEwKSBGUFUxIGV4ZWN1dGVkIG11bHRpcGx5LWFkZCBpbnN0cnVjdGlvbgorZXZlbnQ6MFg1QjIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lPUFNfQ01QTF9HUlA5MSA6IChHcm91cCA5MSBwbV9mcHUxMCkgSU9QUyBpbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDVCMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVMV9GUlNQX0ZDT05WX0dSUDkxIDogKEdyb3VwIDkxIHBtX2ZwdTEwKSBGUFUxIGV4ZWN1dGVkIEZSU1Agb3IgRkNPTlYgaW5zdHJ1Y3Rpb25zCitldmVudDowWDVCNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlA5MSA6IChHcm91cCA5MSBwbV9mcHUxMCkgUnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYNUI1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlA5MSA6IChHcm91cCA5MSBwbV9mcHUxMCkgUnVuIGN5Y2xlcworCisjR3JvdXAgOTIgcG1fZnB1MTEsIEZsb2F0aW5nIHBvaW50IGV2ZW50cyBieSB1bml0CitldmVudDowWDVDMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVMF8xRkxPUF9HUlA5MiA6IChHcm91cCA5MiBwbV9mcHUxMSkgRlBVMCBleGVjdXRlZCBhZGQsIG11bHQsIHN1YiwgY21wIG9yIHNlbCBpbnN0cnVjdGlvbgorZXZlbnQ6MFg1QzEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVTFfMUZMT1BfR1JQOTIgOiAoR3JvdXAgOTIgcG1fZnB1MTEpIEZQVTEgZXhlY3V0ZWQgYWRkLCBtdWx0LCBzdWIsIGNtcCBvciBzZWwgaW5zdHJ1Y3Rpb24KK2V2ZW50OjBYNUMyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFUwX0ZJTl9HUlA5MiA6IChHcm91cCA5MiBwbV9mcHUxMSkgRlBVMCBwcm9kdWNlZCBhIHJlc3VsdAorZXZlbnQ6MFg1QzMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lPUFNfQ01QTF9HUlA5MiA6IChHcm91cCA5MiBwbV9mcHUxMSkgSU9QUyBpbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDVDNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlA5MiA6IChHcm91cCA5MiBwbV9mcHUxMSkgUnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYNUM1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlA5MiA6IChHcm91cCA5MiBwbV9mcHUxMSkgUnVuIGN5Y2xlcworCisjR3JvdXAgOTMgcG1fZnB1MTIsIEZsb2F0aW5nIHBvaW50IGV2ZW50cyBieSB1bml0CitldmVudDowWDVEMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVMF9TVEZfR1JQOTMgOiAoR3JvdXAgOTMgcG1fZnB1MTIpIEZQVTAgZXhlY3V0ZWQgc3RvcmUgaW5zdHJ1Y3Rpb24KK2V2ZW50OjBYNUQxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFUxX1NURl9HUlA5MyA6IChHcm91cCA5MyBwbV9mcHUxMikgRlBVMSBleGVjdXRlZCBzdG9yZSBpbnN0cnVjdGlvbgorZXZlbnQ6MFg1RDIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVTBfTERGX0dSUDkzIDogKEdyb3VwIDkzIHBtX2ZwdTEyKSBMU1UwIGV4ZWN1dGVkIEZsb2F0aW5nIFBvaW50IGxvYWQgaW5zdHJ1Y3Rpb24KK2V2ZW50OjBYNUQzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JT1BTX0NNUExfR1JQOTMgOiAoR3JvdXAgOTMgcG1fZnB1MTIpIElPUFMgaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFg1RDQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQOTMgOiAoR3JvdXAgOTMgcG1fZnB1MTIpIFJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDVENSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQOTMgOiAoR3JvdXAgOTMgcG1fZnB1MTIpIFJ1biBjeWNsZXMKKworI0dyb3VwIDk0IHBtX2Z4dTEsIEZpeGVkIFBvaW50IGV2ZW50cworZXZlbnQ6MFg1RTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZYVV9JRExFX0dSUDk0IDogKEdyb3VwIDk0IHBtX2Z4dTEpIEZYVSBpZGxlCitldmVudDowWDVFMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlhVX0JVU1lfR1JQOTQgOiAoR3JvdXAgOTQgcG1fZnh1MSkgRlhVIGJ1c3kKK2V2ZW50OjBYNUUyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GWFUwX0JVU1lfRlhVMV9JRExFX0dSUDk0IDogKEdyb3VwIDk0IHBtX2Z4dTEpIEZYVTAgYnVzeSBGWFUxIGlkbGUKK2V2ZW50OjBYNUUzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GWFUxX0JVU1lfRlhVMF9JRExFX0dSUDk0IDogKEdyb3VwIDk0IHBtX2Z4dTEpIEZYVTEgYnVzeSBGWFUwIGlkbGUKK2V2ZW50OjBYNUU0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDk0IDogKEdyb3VwIDk0IHBtX2Z4dTEpIFJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDVFNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQOTQgOiAoR3JvdXAgOTQgcG1fZnh1MSkgUnVuIGN5Y2xlcworCisjR3JvdXAgOTUgcG1fZnh1MiwgRml4ZWQgUG9pbnQgZXZlbnRzCitldmVudDowWDVGMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0dSUF9ESVNQX0dSUDk1IDogKEdyb3VwIDk1IHBtX2Z4dTIpIE1hcmtlZCBncm91cCBkaXNwYXRjaGVkCitldmVudDowWDVGMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0dSUF9CUl9SRURJUl9HUlA5NSA6IChHcm91cCA5NSBwbV9meHUyKSBHcm91cCBleHBlcmllbmNlZCBtYXJrZWQgYnJhbmNoIHJlZGlyZWN0CitldmVudDowWDVGMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlhVX0ZJTl9HUlA5NSA6IChHcm91cCA5NSBwbV9meHUyKSBGWFUgcHJvZHVjZWQgYSByZXN1bHQKK2V2ZW50OjBYNUYzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GWExTX0ZVTExfQ1lDX0dSUDk1IDogKEdyb3VwIDk1IHBtX2Z4dTIpIEN5Y2xlcyBGWExTIHF1ZXVlIGlzIGZ1bGwKK2V2ZW50OjBYNUY0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDk1IDogKEdyb3VwIDk1IHBtX2Z4dTIpIFJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDVGNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQOTUgOiAoR3JvdXAgOTUgcG1fZnh1MikgUnVuIGN5Y2xlcworCisjR3JvdXAgOTYgcG1fZnh1MywgRml4ZWQgUG9pbnQgZXZlbnRzCitldmVudDowWDYwMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fM0lOU1RfQ0xCX0NZQ19HUlA5NiA6IChHcm91cCA5NiBwbV9meHUzKSBDeWNsZXMgMyBpbnN0cnVjdGlvbnMgaW4gQ0xCCitldmVudDowWDYwMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fNElOU1RfQ0xCX0NZQ19HUlA5NiA6IChHcm91cCA5NiBwbV9meHUzKSBDeWNsZXMgNCBpbnN0cnVjdGlvbnMgaW4gQ0xCCitldmVudDowWDYwMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlhVMF9GSU5fR1JQOTYgOiAoR3JvdXAgOTYgcG1fZnh1MykgRlhVMCBwcm9kdWNlZCBhIHJlc3VsdAorZXZlbnQ6MFg2MDMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZYVTFfRklOX0dSUDk2IDogKEdyb3VwIDk2IHBtX2Z4dTMpIEZYVTEgcHJvZHVjZWQgYSByZXN1bHQKK2V2ZW50OjBYNjA0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDk2IDogKEdyb3VwIDk2IHBtX2Z4dTMpIFJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDYwNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQOTYgOiAoR3JvdXAgOTYgcG1fZnh1MykgUnVuIGN5Y2xlcworCisjR3JvdXAgOTcgcG1fc210X3ByaW9yaXRpZXMxLCBUaHJlYWQgcHJpb3JpdHkgZXZlbnRzCitldmVudDowWDYxMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fVEhSRF9QUklPXzRfQ1lDX0dSUDk3IDogKEdyb3VwIDk3IHBtX3NtdF9wcmlvcml0aWVzMSkgQ3ljbGVzIHRocmVhZCBydW5uaW5nIGF0IHByaW9yaXR5IGxldmVsIDQKK2V2ZW50OjBYNjExIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9USFJEX1BSSU9fN19DWUNfR1JQOTcgOiAoR3JvdXAgOTcgcG1fc210X3ByaW9yaXRpZXMxKSBDeWNsZXMgdGhyZWFkIHJ1bm5pbmcgYXQgcHJpb3JpdHkgbGV2ZWwgNworZXZlbnQ6MFg2MTIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1RIUkRfUFJJT19ESUZGXzBfQ1lDX0dSUDk3IDogKEdyb3VwIDk3IHBtX3NtdF9wcmlvcml0aWVzMSkgQ3ljbGVzIG5vIHRocmVhZCBwcmlvcml0eSBkaWZmZXJlbmNlCitldmVudDowWDYxMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fVEhSRF9QUklPX0RJRkZfMW9yMl9DWUNfR1JQOTcgOiAoR3JvdXAgOTcgcG1fc210X3ByaW9yaXRpZXMxKSBDeWNsZXMgdGhyZWFkIHByaW9yaXR5IGRpZmZlcmVuY2UgaXMgMSBvciAyCitldmVudDowWDYxNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlA5NyA6IChHcm91cCA5NyBwbV9zbXRfcHJpb3JpdGllczEpIFJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDYxNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQOTcgOiAoR3JvdXAgOTcgcG1fc210X3ByaW9yaXRpZXMxKSBSdW4gY3ljbGVzCisKKyNHcm91cCA5OCBwbV9zbXRfcHJpb3JpdGllczIsIFRocmVhZCBwcmlvcml0eSBldmVudHMKK2V2ZW50OjBYNjIwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9USFJEX1BSSU9fM19DWUNfR1JQOTggOiAoR3JvdXAgOTggcG1fc210X3ByaW9yaXRpZXMyKSBDeWNsZXMgdGhyZWFkIHJ1bm5pbmcgYXQgcHJpb3JpdHkgbGV2ZWwgMworZXZlbnQ6MFg2MjEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1RIUkRfUFJJT182X0NZQ19HUlA5OCA6IChHcm91cCA5OCBwbV9zbXRfcHJpb3JpdGllczIpIEN5Y2xlcyB0aHJlYWQgcnVubmluZyBhdCBwcmlvcml0eSBsZXZlbCA2CitldmVudDowWDYyMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fVEhSRF9QUklPX0RJRkZfM29yNF9DWUNfR1JQOTggOiAoR3JvdXAgOTggcG1fc210X3ByaW9yaXRpZXMyKSBDeWNsZXMgdGhyZWFkIHByaW9yaXR5IGRpZmZlcmVuY2UgaXMgMyBvciA0CitldmVudDowWDYyMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fVEhSRF9QUklPX0RJRkZfNW9yNl9DWUNfR1JQOTggOiAoR3JvdXAgOTggcG1fc210X3ByaW9yaXRpZXMyKSBDeWNsZXMgdGhyZWFkIHByaW9yaXR5IGRpZmZlcmVuY2UgaXMgNSBvciA2CitldmVudDowWDYyNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlA5OCA6IChHcm91cCA5OCBwbV9zbXRfcHJpb3JpdGllczIpIFJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDYyNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQOTggOiAoR3JvdXAgOTggcG1fc210X3ByaW9yaXRpZXMyKSBSdW4gY3ljbGVzCisKKyNHcm91cCA5OSBwbV9zbXRfcHJpb3JpdGllczMsIFRocmVhZCBwcmlvcml0eSBldmVudHMKK2V2ZW50OjBYNjMwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9USFJEX1BSSU9fMl9DWUNfR1JQOTkgOiAoR3JvdXAgOTkgcG1fc210X3ByaW9yaXRpZXMzKSBDeWNsZXMgdGhyZWFkIHJ1bm5pbmcgYXQgcHJpb3JpdHkgbGV2ZWwgMgorZXZlbnQ6MFg2MzEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1RIUkRfUFJJT181X0NZQ19HUlA5OSA6IChHcm91cCA5OSBwbV9zbXRfcHJpb3JpdGllczMpIEN5Y2xlcyB0aHJlYWQgcnVubmluZyBhdCBwcmlvcml0eSBsZXZlbCA1CitldmVudDowWDYzMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fVEhSRF9QUklPX0RJRkZfbWludXMxb3IyX0NZQ19HUlA5OSA6IChHcm91cCA5OSBwbV9zbXRfcHJpb3JpdGllczMpIEN5Y2xlcyB0aHJlYWQgcHJpb3JpdHkgZGlmZmVyZW5jZSBpcyAtMSBvciAtMgorZXZlbnQ6MFg2MzMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1RIUkRfUFJJT19ESUZGX21pbnVzM29yNF9DWUNfR1JQOTkgOiAoR3JvdXAgOTkgcG1fc210X3ByaW9yaXRpZXMzKSBDeWNsZXMgdGhyZWFkIHByaW9yaXR5IGRpZmZlcmVuY2UgaXMgLTMgb3IgLTQKK2V2ZW50OjBYNjM0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDk5IDogKEdyb3VwIDk5IHBtX3NtdF9wcmlvcml0aWVzMykgUnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYNjM1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlA5OSA6IChHcm91cCA5OSBwbV9zbXRfcHJpb3JpdGllczMpIFJ1biBjeWNsZXMKKworI0dyb3VwIDEwMCBwbV9zbXRfcHJpb3JpdGllczQsIFRocmVhZCBwcmlvcml0eSBldmVudHMKK2V2ZW50OjBYNjQwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9USFJEX1BSSU9fMV9DWUNfR1JQMTAwIDogKEdyb3VwIDEwMCBwbV9zbXRfcHJpb3JpdGllczQpIEN5Y2xlcyB0aHJlYWQgcnVubmluZyBhdCBwcmlvcml0eSBsZXZlbCAxCitldmVudDowWDY0MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSFZfQ1lDX0dSUDEwMCA6IChHcm91cCAxMDAgcG1fc210X3ByaW9yaXRpZXM0KSBIeXBlcnZpc29yIEN5Y2xlcworZXZlbnQ6MFg2NDIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1RIUkRfUFJJT19ESUZGX21pbnVzNW9yNl9DWUNfR1JQMTAwIDogKEdyb3VwIDEwMCBwbV9zbXRfcHJpb3JpdGllczQpIEN5Y2xlcyB0aHJlYWQgcHJpb3JpdHkgZGlmZmVyZW5jZSBpcyAtNSBvciAtNgorZXZlbnQ6MFg2NDMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lPUFNfQ01QTF9HUlAxMDAgOiAoR3JvdXAgMTAwIHBtX3NtdF9wcmlvcml0aWVzNCkgSU9QUyBpbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDY0NCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlAxMDAgOiAoR3JvdXAgMTAwIHBtX3NtdF9wcmlvcml0aWVzNCkgUnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYNjQ1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxMDAgOiAoR3JvdXAgMTAwIHBtX3NtdF9wcmlvcml0aWVzNCkgUnVuIGN5Y2xlcworCisjR3JvdXAgMTAxIHBtX3NtdF9ib3RoLCBUaHJlYWQgY29tbW9uIGV2ZW50cworZXZlbnQ6MFg2NTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1RIUkRfT05FX1JVTl9DWUNfR1JQMTAxIDogKEdyb3VwIDEwMSBwbV9zbXRfYm90aCkgT25lIG9mIHRoZSB0aHJlYWRzIGluIHJ1biBjeWNsZXMKK2V2ZW50OjBYNjUxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9USFJEX0dSUF9DTVBMX0JPVEhfQ1lDX0dSUDEwMSA6IChHcm91cCAxMDEgcG1fc210X2JvdGgpIEN5Y2xlcyBncm91cCBjb21wbGV0ZWQgYnkgYm90aCB0aHJlYWRzCitldmVudDowWDY1MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU9QU19DTVBMX0dSUDEwMSA6IChHcm91cCAxMDEgcG1fc210X2JvdGgpIElPUFMgaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFg2NTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1RIUkRfTDJNSVNTX0JPVEhfQ1lDX0dSUDEwMSA6IChHcm91cCAxMDEgcG1fc210X2JvdGgpIEN5Y2xlcyBib3RoIHRocmVhZHMgaW4gTDIgbWlzc2VzCitldmVudDowWDY1NCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlAxMDEgOiAoR3JvdXAgMTAxIHBtX3NtdF9ib3RoKSBSdW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFg2NTUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDEwMSA6IChHcm91cCAxMDEgcG1fc210X2JvdGgpIFJ1biBjeWNsZXMKKworI0dyb3VwIDEwMiBwbV9zbXRfc2VsZWN0aW9uLCBUaHJlYWQgc2VsZWN0aW9uCitldmVudDowWDY2MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fU05PT1BfVExCSUVfR1JQMTAyIDogKEdyb3VwIDEwMiBwbV9zbXRfc2VsZWN0aW9uKSBTbm9vcCBUTEJJRQorZXZlbnQ6MFg2NjEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lPUFNfQ01QTF9HUlAxMDIgOiAoR3JvdXAgMTAyIHBtX3NtdF9zZWxlY3Rpb24pIElPUFMgaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFg2NjIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1RIUkRfU0VMX1QwX0dSUDEwMiA6IChHcm91cCAxMDIgcG1fc210X3NlbGVjdGlvbikgRGVjb2RlIHNlbGVjdGVkIHRocmVhZCAwCitldmVudDowWDY2MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fVEhSRF9TRUxfVDFfR1JQMTAyIDogKEdyb3VwIDEwMiBwbV9zbXRfc2VsZWN0aW9uKSBEZWNvZGUgc2VsZWN0ZWQgdGhyZWFkIDEKK2V2ZW50OjBYNjY0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDEwMiA6IChHcm91cCAxMDIgcG1fc210X3NlbGVjdGlvbikgUnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYNjY1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxMDIgOiAoR3JvdXAgMTAyIHBtX3NtdF9zZWxlY3Rpb24pIFJ1biBjeWNsZXMKKworI0dyb3VwIDEwMyBwbV9zbXRfc2VsZWN0b3ZlcjEsIFRocmVhZCBzZWxlY3Rpb24gb3ZlcmlkZQorZXZlbnQ6MFg2NzAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lPUFNfQ01QTF9HUlAxMDMgOiAoR3JvdXAgMTAzIHBtX3NtdF9zZWxlY3RvdmVyMSkgSU9QUyBpbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDY3MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fMElOU1RfQ0xCX0NZQ19HUlAxMDMgOiAoR3JvdXAgMTAzIHBtX3NtdF9zZWxlY3RvdmVyMSkgQ3ljbGVzIG5vIGluc3RydWN0aW9ucyBpbiBDTEIKK2V2ZW50OjBYNjcyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9USFJEX1NFTF9PVkVSX0NMQl9FTVBUWV9HUlAxMDMgOiAoR3JvdXAgMTAzIHBtX3NtdF9zZWxlY3RvdmVyMSkgVGhyZWFkIHNlbGVjdGlvbiBvdmVyaWRlcyBjYXVzZWQgYnkgQ0xCIGVtcHR5CitldmVudDowWDY3MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fVEhSRF9TRUxfT1ZFUl9HQ1RfSU1CQUxfR1JQMTAzIDogKEdyb3VwIDEwMyBwbV9zbXRfc2VsZWN0b3ZlcjEpIFRocmVhZCBzZWxlY3Rpb24gb3ZlcmlkZXMgY2F1c2VkIGJ5IEdDVCBpbWJhbGFuY2UKK2V2ZW50OjBYNjc0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDEwMyA6IChHcm91cCAxMDMgcG1fc210X3NlbGVjdG92ZXIxKSBSdW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFg2NzUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDEwMyA6IChHcm91cCAxMDMgcG1fc210X3NlbGVjdG92ZXIxKSBSdW4gY3ljbGVzCisKKyNHcm91cCAxMDQgcG1fc210X3NlbGVjdG92ZXIyLCBUaHJlYWQgc2VsZWN0aW9uIG92ZXJpZGUKK2V2ZW50OjBYNjgwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JT1BTX0NNUExfR1JQMTA0IDogKEdyb3VwIDEwNCBwbV9zbXRfc2VsZWN0b3ZlcjIpIElPUFMgaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFg2ODEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQMTA0IDogKEdyb3VwIDEwNCBwbV9zbXRfc2VsZWN0b3ZlcjIpIFByb2Nlc3NvciBjeWNsZXMKK2V2ZW50OjBYNjgyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9USFJEX1NFTF9PVkVSX0lTVV9IT0xEX0dSUDEwNCA6IChHcm91cCAxMDQgcG1fc210X3NlbGVjdG92ZXIyKSBUaHJlYWQgc2VsZWN0aW9uIG92ZXJpZGVzIGNhdXNlZCBieSBJU1UgaG9sZHMKK2V2ZW50OjBYNjgzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9USFJEX1NFTF9PVkVSX0wyTUlTU19HUlAxMDQgOiAoR3JvdXAgMTA0IHBtX3NtdF9zZWxlY3RvdmVyMikgVGhyZWFkIHNlbGVjdGlvbiBvdmVyaWRlcyBjYXVzZWQgYnkgTDIgbWlzc2VzCitldmVudDowWDY4NCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlAxMDQgOiAoR3JvdXAgMTA0IHBtX3NtdF9zZWxlY3RvdmVyMikgUnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYNjg1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxMDQgOiAoR3JvdXAgMTA0IHBtX3NtdF9zZWxlY3RvdmVyMikgUnVuIGN5Y2xlcworCisjR3JvdXAgMTA1IHBtX2ZhYnJpYzEsIEZhYnJpYyBldmVudHMKK2V2ZW50OjBYNjkwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GQUJfQ01EX0lTU1VFRF9HUlAxMDUgOiAoR3JvdXAgMTA1IHBtX2ZhYnJpYzEpIEZhYnJpYyBjb21tYW5kIGlzc3VlZAorZXZlbnQ6MFg2OTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZBQl9EQ0xBSU1fSVNTVUVEX0dSUDEwNSA6IChHcm91cCAxMDUgcG1fZmFicmljMSkgZGNsYWltIGlzc3VlZAorZXZlbnQ6MFg2OTIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZBQl9DTURfUkVUUklFRF9HUlAxMDUgOiAoR3JvdXAgMTA1IHBtX2ZhYnJpYzEpIEZhYnJpYyBjb21tYW5kIHJldHJpZWQKK2V2ZW50OjBYNjkzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GQUJfRENMQUlNX1JFVFJJRURfR1JQMTA1IDogKEdyb3VwIDEwNSBwbV9mYWJyaWMxKSBkY2xhaW0gcmV0cmllZAorZXZlbnQ6MFg2OTQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQMTA1IDogKEdyb3VwIDEwNSBwbV9mYWJyaWMxKSBSdW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFg2OTUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDEwNSA6IChHcm91cCAxMDUgcG1fZmFicmljMSkgUnVuIGN5Y2xlcworCisjR3JvdXAgMTA2IHBtX2ZhYnJpYzIsIEZhYnJpYyBkYXRhIG1vdmVtZW50CitldmVudDowWDZBMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRkFCX1AxdG9NMV9TSURFQ0FSX0VNUFRZX0dSUDEwNiA6IChHcm91cCAxMDYgcG1fZmFicmljMikgUDEgdG8gTTEgc2lkZWNhciBlbXB0eQorZXZlbnQ6MFg2QTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZBQl9IT0xEdG9WTl9FTVBUWV9HUlAxMDYgOiAoR3JvdXAgMTA2IHBtX2ZhYnJpYzIpIEhvbGQgYnVmZmVyIHRvIFZOIGVtcHR5CitldmVudDowWDZBMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRkFCX1AxdG9WTm9yTk5fU0lERUNBUl9FTVBUWV9HUlAxMDYgOiAoR3JvdXAgMTA2IHBtX2ZhYnJpYzIpIFAxIHRvIFZOL05OIHNpZGVjYXIgZW1wdHkKK2V2ZW50OjBYNkEzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GQUJfVkJZUEFTU19FTVBUWV9HUlAxMDYgOiAoR3JvdXAgMTA2IHBtX2ZhYnJpYzIpIFZlcnRpY2FsIGJ5cGFzcyBidWZmZXIgZW1wdHkKK2V2ZW50OjBYNkE0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDEwNiA6IChHcm91cCAxMDYgcG1fZmFicmljMikgUnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYNkE1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxMDYgOiAoR3JvdXAgMTA2IHBtX2ZhYnJpYzIpIFJ1biBjeWNsZXMKKworI0dyb3VwIDEwNyBwbV9mYWJyaWMzLCBGYWJyaWMgZGF0YSBtb3ZlbWVudAorZXZlbnQ6MFg2QjAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZBQl9QTnRvTk5fRElSRUNUX0dSUDEwNyA6IChHcm91cCAxMDcgcG1fZmFicmljMykgUE4gdG8gTk4gYmVhdCB3ZW50IHN0cmFpZ2h0IHRvIGl0cyBkZXN0aW5hdGlvbgorZXZlbnQ6MFg2QjEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZBQl9QTnRvVk5fRElSRUNUX0dSUDEwNyA6IChHcm91cCAxMDcgcG1fZmFicmljMykgUE4gdG8gVk4gYmVhdCB3ZW50IHN0cmFpZ2h0IHRvIGl0cyBkZXN0aW5hdGlvbgorZXZlbnQ6MFg2QjIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZBQl9QTnRvTk5fU0lERUNBUl9HUlAxMDcgOiAoR3JvdXAgMTA3IHBtX2ZhYnJpYzMpIFBOIHRvIE5OIGJlYXQgd2VudCB0byBzaWRlY2FyIGZpcnN0CitldmVudDowWDZCMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRkFCX1BOdG9WTl9TSURFQ0FSX0dSUDEwNyA6IChHcm91cCAxMDcgcG1fZmFicmljMykgUE4gdG8gVk4gYmVhdCB3ZW50IHRvIHNpZGVjYXIgZmlyc3QKK2V2ZW50OjBYNkI0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDEwNyA6IChHcm91cCAxMDcgcG1fZmFicmljMykgUnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYNkI1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxMDcgOiAoR3JvdXAgMTA3IHBtX2ZhYnJpYzMpIFJ1biBjeWNsZXMKKworI0dyb3VwIDEwOCBwbV9mYWJyaWM0LCBGYWJyaWMgZGF0YSBtb3ZlbWVudAorZXZlbnQ6MFg2QzAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZBQl9NMXRvUDFfU0lERUNBUl9FTVBUWV9HUlAxMDggOiAoR3JvdXAgMTA4IHBtX2ZhYnJpYzQpIE0xIHRvIFAxIHNpZGVjYXIgZW1wdHkKK2V2ZW50OjBYNkMxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GQUJfSE9MRHRvTk5fRU1QVFlfR1JQMTA4IDogKEdyb3VwIDEwOCBwbV9mYWJyaWM0KSBIb2xkIGJ1ZmZlciB0byBOTiBlbXB0eQorZXZlbnQ6MFg2QzIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0VFX09GRl9HUlAxMDggOiAoR3JvdXAgMTA4IHBtX2ZhYnJpYzQpIEN5Y2xlcyBNU1IoRUUpIGJpdCBvZmYKK2V2ZW50OjBYNkMzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GQUJfTTF0b1ZOb3JOTl9TSURFQ0FSX0VNUFRZX0dSUDEwOCA6IChHcm91cCAxMDggcG1fZmFicmljNCkgTTEgdG8gVk4vTk4gc2lkZWNhciBlbXB0eQorZXZlbnQ6MFg2QzQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQMTA4IDogKEdyb3VwIDEwOCBwbV9mYWJyaWM0KSBSdW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFg2QzUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDEwOCA6IChHcm91cCAxMDggcG1fZmFicmljNCkgUnVuIGN5Y2xlcworCisjR3JvdXAgMTA5IHBtX3Nub29wMSwgU25vb3AgcmV0cnkKK2V2ZW50OjBYNkQwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9TTk9PUF9SRF9SRVRSWV9RRlVMTF9HUlAxMDkgOiAoR3JvdXAgMTA5IHBtX3Nub29wMSkgU25vb3AgcmVhZCByZXRyeSBkdWUgdG8gcmVhZCBxdWV1ZSBmdWxsCitldmVudDowWDZEMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fU05PT1BfRENMQUlNX1JFVFJZX1FGVUxMX0dSUDEwOSA6IChHcm91cCAxMDkgcG1fc25vb3AxKSBTbm9vcCBkY2xhaW0vZmx1c2ggcmV0cnkgZHVlIHRvIHdyaXRlL2RjbGFpbSBxdWV1ZXMgZnVsbAorZXZlbnQ6MFg2RDIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1NOT09QX1dSX1JFVFJZX1FGVUxMX0dSUDEwOSA6IChHcm91cCAxMDkgcG1fc25vb3AxKSBTbm9vcCByZWFkIHJldHJ5IGR1ZSB0byByZWFkIHF1ZXVlIGZ1bGwKK2V2ZW50OjBYNkQzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9TTk9PUF9QQVJUSUFMX1JUUllfUUZVTExfR1JQMTA5IDogKEdyb3VwIDEwOSBwbV9zbm9vcDEpIFNub29wIHBhcnRpYWwgd3JpdGUgcmV0cnkgZHVlIHRvIHBhcnRpYWwtd3JpdGUgcXVldWVzIGZ1bGwKK2V2ZW50OjBYNkQ0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDEwOSA6IChHcm91cCAxMDkgcG1fc25vb3AxKSBSdW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFg2RDUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDEwOSA6IChHcm91cCAxMDkgcG1fc25vb3AxKSBSdW4gY3ljbGVzCisKKyNHcm91cCAxMTAgcG1fc25vb3AyLCBTbm9vcCByZWFkIHJldHJ5CitldmVudDowWDZFMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fU05PT1BfUkRfUkVUUllfUlFfR1JQMTEwIDogKEdyb3VwIDExMCBwbV9zbm9vcDIpIFNub29wIHJlYWQgcmV0cnkgZHVlIHRvIGNvbGxpc2lvbiB3aXRoIGFjdGl2ZSByZWFkIHF1ZXVlCitldmVudDowWDZFMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fU05PT1BfUkVUUllfMUFIRUFEX0dSUDExMCA6IChHcm91cCAxMTAgcG1fc25vb3AyKSBTbm9vcCByZXRyeSBkdWUgdG8gb25lIGFoZWFkIGNvbGxpc2lvbgorZXZlbnQ6MFg2RTIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1NOT09QX1JEX1JFVFJZX1dRX0dSUDExMCA6IChHcm91cCAxMTAgcG1fc25vb3AyKSBTbm9vcCByZWFkIHJldHJ5IGR1ZSB0byBjb2xsaXNpb24gd2l0aCBhY3RpdmUgd3JpdGUgcXVldWUKK2V2ZW50OjBYNkUzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JT1BTX0NNUExfR1JQMTEwIDogKEdyb3VwIDExMCBwbV9zbm9vcDIpIElPUFMgaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFg2RTQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQMTEwIDogKEdyb3VwIDExMCBwbV9zbm9vcDIpIFJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDZFNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQMTEwIDogKEdyb3VwIDExMCBwbV9zbm9vcDIpIFJ1biBjeWNsZXMKKworI0dyb3VwIDExMSBwbV9zbm9vcDMsIFNub29wIHdyaXRlIHJldHJ5CitldmVudDowWDZGMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fU05PT1BfV1JfUkVUUllfUlFfR1JQMTExIDogKEdyb3VwIDExMSBwbV9zbm9vcDMpIFNub29wIHdyaXRlL2RjbGFpbSByZXRyeSBkdWUgdG8gY29sbGlzaW9uIHdpdGggYWN0aXZlIHJlYWQgcXVldWUKK2V2ZW50OjBYNkYxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NRU1fSElfUFJJT19XUl9DTVBMX0dSUDExMSA6IChHcm91cCAxMTEgcG1fc25vb3AzKSBIaWdoIHByaW9yaXR5IHdyaXRlIGNvbXBsZXRlZAorZXZlbnQ6MFg2RjIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1NOT09QX1dSX1JFVFJZX1dRX0dSUDExMSA6IChHcm91cCAxMTEgcG1fc25vb3AzKSBTbm9vcCB3cml0ZS9kY2xhaW0gcmV0cnkgZHVlIHRvIGNvbGxpc2lvbiB3aXRoIGFjdGl2ZSB3cml0ZSBxdWV1ZQorZXZlbnQ6MFg2RjMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01FTV9MT19QUklPX1dSX0NNUExfR1JQMTExIDogKEdyb3VwIDExMSBwbV9zbm9vcDMpIExvdyBwcmlvcml0eSB3cml0ZSBjb21wbGV0ZWQKK2V2ZW50OjBYNkY0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDExMSA6IChHcm91cCAxMTEgcG1fc25vb3AzKSBSdW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFg2RjUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDExMSA6IChHcm91cCAxMTEgcG1fc25vb3AzKSBSdW4gY3ljbGVzCisKKyNHcm91cCAxMTIgcG1fc25vb3A0LCBTbm9vcCBwYXJ0aWFsIHdyaXRlIHJldHJ5CitldmVudDowWDcwMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fU05PT1BfUFdfUkVUUllfUlFfR1JQMTEyIDogKEdyb3VwIDExMiBwbV9zbm9vcDQpIFNub29wIHBhcnRpYWwtd3JpdGUgcmV0cnkgZHVlIHRvIGNvbGxpc2lvbiB3aXRoIGFjdGl2ZSByZWFkIHF1ZXVlCitldmVudDowWDcwMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTUVNX0hJX1BSSU9fUFdfQ01QTF9HUlAxMTIgOiAoR3JvdXAgMTEyIHBtX3Nub29wNCkgSGlnaCBwcmlvcml0eSBwYXJ0aWFsLXdyaXRlIGNvbXBsZXRlZAorZXZlbnQ6MFg3MDIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1NOT09QX1BXX1JFVFJZX1dRX1BXUV9HUlAxMTIgOiAoR3JvdXAgMTEyIHBtX3Nub29wNCkgU25vb3AgcGFydGlhbC13cml0ZSByZXRyeSBkdWUgdG8gY29sbGlzaW9uIHdpdGggYWN0aXZlIHdyaXRlIG9yIHBhcnRpYWwtd3JpdGUgcXVldWUKK2V2ZW50OjBYNzAzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NRU1fTE9fUFJJT19QV19DTVBMX0dSUDExMiA6IChHcm91cCAxMTIgcG1fc25vb3A0KSBMb3cgcHJpb3JpdHkgcGFydGlhbC13cml0ZSBjb21wbGV0ZWQKK2V2ZW50OjBYNzA0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDExMiA6IChHcm91cCAxMTIgcG1fc25vb3A0KSBSdW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFg3MDUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDExMiA6IChHcm91cCAxMTIgcG1fc25vb3A0KSBSdW4gY3ljbGVzCisKKyNHcm91cCAxMTMgcG1fbWVtX3JxLCBNZW1vcnkgcmVhZCBxdWV1ZSBkaXNwYXRjaAorZXZlbnQ6MFg3MTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01FTV9SUV9ESVNQX0dSUDExMyA6IChHcm91cCAxMTMgcG1fbWVtX3JxKSBNZW1vcnkgcmVhZCBxdWV1ZSBkaXNwYXRjaGVkCitldmVudDowWDcxMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTUVNX1JRX0RJU1BfQlVTWTh0bzE1X0dSUDExMyA6IChHcm91cCAxMTMgcG1fbWVtX3JxKSBNZW1vcnkgcmVhZCBxdWV1ZSBkaXNwYXRjaGVkIHdpdGggOC0xNSBxdWV1ZXMgYnVzeQorZXZlbnQ6MFg3MTIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01FTV9SUV9ESVNQX0JVU1kxdG83X0dSUDExMyA6IChHcm91cCAxMTMgcG1fbWVtX3JxKSBNZW1vcnkgcmVhZCBxdWV1ZSBkaXNwYXRjaGVkIHdpdGggMS03IHF1ZXVlcyBidXN5CitldmVudDowWDcxMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRUVfT0ZGX0VYVF9JTlRfR1JQMTEzIDogKEdyb3VwIDExMyBwbV9tZW1fcnEpIEN5Y2xlcyBNU1IoRUUpIGJpdCBvZmYgYW5kIGV4dGVybmFsIGludGVycnVwdCBwZW5kaW5nCitldmVudDowWDcxNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlAxMTMgOiAoR3JvdXAgMTEzIHBtX21lbV9ycSkgUnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYNzE1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxMTMgOiAoR3JvdXAgMTEzIHBtX21lbV9ycSkgUnVuIGN5Y2xlcworCisjR3JvdXAgMTE0IHBtX21lbV9yZWFkLCBNZW1vcnkgcmVhZCBjb21wbGV0ZSBhbmQgY2FuY2VsCitldmVudDowWDcyMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTUVNX1JFQURfQ01QTF9HUlAxMTQgOiAoR3JvdXAgMTE0IHBtX21lbV9yZWFkKSBNZW1vcnkgcmVhZCBjb21wbGV0ZWQgb3IgY2FuY2VsZWQKK2V2ZW50OjBYNzIxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NRU1fRkFTVF9QQVRIX1JEX0NNUExfR1JQMTE0IDogKEdyb3VwIDExNCBwbV9tZW1fcmVhZCkgRmFzdCBwYXRoIG1lbW9yeSByZWFkIGNvbXBsZXRlZAorZXZlbnQ6MFg3MjIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01FTV9TUEVDX1JEX0NBTkNFTF9HUlAxMTQgOiAoR3JvdXAgMTE0IHBtX21lbV9yZWFkKSBTcGVjdWxhdGl2ZSBtZW1vcnkgcmVhZCBjYW5jZWxlZAorZXZlbnQ6MFg3MjMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0VYVF9JTlRfR1JQMTE0IDogKEdyb3VwIDExNCBwbV9tZW1fcmVhZCkgRXh0ZXJuYWwgaW50ZXJydXB0cworZXZlbnQ6MFg3MjQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQMTE0IDogKEdyb3VwIDExNCBwbV9tZW1fcmVhZCkgUnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYNzI1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxMTQgOiAoR3JvdXAgMTE0IHBtX21lbV9yZWFkKSBSdW4gY3ljbGVzCisKKyNHcm91cCAxMTUgcG1fbWVtX3dxLCBNZW1vcnkgd3JpdGUgcXVldWUgZGlzcGF0Y2gKK2V2ZW50OjBYNzMwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NRU1fV1FfRElTUF9XUklURV9HUlAxMTUgOiAoR3JvdXAgMTE1IHBtX21lbV93cSkgTWVtb3J5IHdyaXRlIHF1ZXVlIGRpc3BhdGNoZWQgZHVlIHRvIHdyaXRlCitldmVudDowWDczMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTUVNX1dRX0RJU1BfQlVTWTF0bzdfR1JQMTE1IDogKEdyb3VwIDExNSBwbV9tZW1fd3EpIE1lbW9yeSB3cml0ZSBxdWV1ZSBkaXNwYXRjaGVkIHdpdGggMS03IHF1ZXVlcyBidXN5CitldmVudDowWDczMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTUVNX1dRX0RJU1BfRENMQUlNX0dSUDExNSA6IChHcm91cCAxMTUgcG1fbWVtX3dxKSBNZW1vcnkgd3JpdGUgcXVldWUgZGlzcGF0Y2hlZCBkdWUgdG8gZGNsYWltL2ZsdXNoCitldmVudDowWDczMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTUVNX1dRX0RJU1BfQlVTWTh0bzE1X0dSUDExNSA6IChHcm91cCAxMTUgcG1fbWVtX3dxKSBNZW1vcnkgd3JpdGUgcXVldWUgZGlzcGF0Y2hlZCB3aXRoIDgtMTUgcXVldWVzIGJ1c3kKK2V2ZW50OjBYNzM0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDExNSA6IChHcm91cCAxMTUgcG1fbWVtX3dxKSBSdW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFg3MzUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDExNSA6IChHcm91cCAxMTUgcG1fbWVtX3dxKSBSdW4gY3ljbGVzCisKKyNHcm91cCAxMTYgcG1fbWVtX3B3cSwgTWVtb3J5IHBhcnRpYWwgd3JpdGUgcXVldWUKK2V2ZW50OjBYNzQwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NRU1fUFdRX0RJU1BfR1JQMTE2IDogKEdyb3VwIDExNiBwbV9tZW1fcHdxKSBNZW1vcnkgcGFydGlhbC13cml0ZSBxdWV1ZSBkaXNwYXRjaGVkCitldmVudDowWDc0MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTUVNX1BXUV9ESVNQX0JVU1kyb3IzX0dSUDExNiA6IChHcm91cCAxMTYgcG1fbWVtX3B3cSkgTWVtb3J5IHBhcnRpYWwtd3JpdGUgcXVldWUgZGlzcGF0Y2hlZCB3aXRoIDItMyBxdWV1ZXMgYnVzeQorZXZlbnQ6MFg3NDIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01FTV9QV19HQVRIX0dSUDExNiA6IChHcm91cCAxMTYgcG1fbWVtX3B3cSkgTWVtb3J5IHBhcnRpYWwtd3JpdGUgZ2F0aGVyZWQKK2V2ZW50OjBYNzQzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NRU1fUFdfQ01QTF9HUlAxMTYgOiAoR3JvdXAgMTE2IHBtX21lbV9wd3EpIE1lbW9yeSBwYXJ0aWFsLXdyaXRlIGNvbXBsZXRlZAorZXZlbnQ6MFg3NDQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQMTE2IDogKEdyb3VwIDExNiBwbV9tZW1fcHdxKSBSdW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFg3NDUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDExNiA6IChHcm91cCAxMTYgcG1fbWVtX3B3cSkgUnVuIGN5Y2xlcworCisjR3JvdXAgMTE3IHBtX3RocmVzaG9sZCwgVGhyZXNob2xkaW5nCitldmVudDowWDc1MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0dSUF9ESVNQX0dSUDExNyA6IChHcm91cCAxMTcgcG1fdGhyZXNob2xkKSBNYXJrZWQgZ3JvdXAgZGlzcGF0Y2hlZAorZXZlbnQ6MFg3NTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19JTVJfUkVMT0FEX0dSUDExNyA6IChHcm91cCAxMTcgcG1fdGhyZXNob2xkKSBNYXJrZWQgSU1SIHJlbG9hZGVkCitldmVudDowWDc1MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fVEhSRVNIX1RJTUVPX0dSUDExNyA6IChHcm91cCAxMTcgcG1fdGhyZXNob2xkKSBUaHJlc2hvbGQgdGltZW91dAorZXZlbnQ6MFg3NTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19MU1VfRklOX0dSUDExNyA6IChHcm91cCAxMTcgcG1fdGhyZXNob2xkKSBNYXJrZWQgaW5zdHJ1Y3Rpb24gTFNVIHByb2Nlc3NpbmcgZmluaXNoZWQKK2V2ZW50OjBYNzU0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDExNyA6IChHcm91cCAxMTcgcG1fdGhyZXNob2xkKSBSdW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFg3NTUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDExNyA6IChHcm91cCAxMTcgcG1fdGhyZXNob2xkKSBSdW4gY3ljbGVzCisKKyNHcm91cCAxMTggcG1fbXJrX2dycDEsIE1hcmtlZCBncm91cCBldmVudHMKK2V2ZW50OjBYNzYwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfR1JQX0RJU1BfR1JQMTE4IDogKEdyb3VwIDExOCBwbV9tcmtfZ3JwMSkgTWFya2VkIGdyb3VwIGRpc3BhdGNoZWQKK2V2ZW50OjBYNzYxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfU1RfTUlTU19MMV9HUlAxMTggOiAoR3JvdXAgMTE4IHBtX21ya19ncnAxKSBNYXJrZWQgTDEgRCBjYWNoZSBzdG9yZSBtaXNzZXMKK2V2ZW50OjBYNzYyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfSU5TVF9GSU5fR1JQMTE4IDogKEdyb3VwIDExOCBwbV9tcmtfZ3JwMSkgTWFya2VkIGluc3RydWN0aW9uIGZpbmlzaGVkCitldmVudDowWDc2MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0dSUF9DTVBMX0dSUDExOCA6IChHcm91cCAxMTggcG1fbXJrX2dycDEpIE1hcmtlZCBncm91cCBjb21wbGV0ZWQKK2V2ZW50OjBYNzY0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDExOCA6IChHcm91cCAxMTggcG1fbXJrX2dycDEpIFJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDc2NSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQMTE4IDogKEdyb3VwIDExOCBwbV9tcmtfZ3JwMSkgUnVuIGN5Y2xlcworCisjR3JvdXAgMTE5IHBtX21ya19ncnAyLCBNYXJrZWQgZ3JvdXAgZXZlbnRzCitldmVudDowWDc3MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0dSUF9JU1NVRURfR1JQMTE5IDogKEdyb3VwIDExOSBwbV9tcmtfZ3JwMikgTWFya2VkIGdyb3VwIGlzc3VlZAorZXZlbnQ6MFg3NzEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19CUlVfRklOX0dSUDExOSA6IChHcm91cCAxMTkgcG1fbXJrX2dycDIpIE1hcmtlZCBpbnN0cnVjdGlvbiBCUlUgcHJvY2Vzc2luZyBmaW5pc2hlZAorZXZlbnQ6MFg3NzIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19MMV9SRUxPQURfVkFMSURfR1JQMTE5IDogKEdyb3VwIDExOSBwbV9tcmtfZ3JwMikgTWFya2VkIEwxIHJlbG9hZCBkYXRhIHNvdXJjZSB2YWxpZAorZXZlbnQ6MFg3NzMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19HUlBfSUNfTUlTU19HUlAxMTkgOiAoR3JvdXAgMTE5IHBtX21ya19ncnAyKSBHcm91cCBleHBlcmllbmNlZCBtYXJrZWQgSSBjYWNoZSBtaXNzCitldmVudDowWDc3NCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlAxMTkgOiAoR3JvdXAgMTE5IHBtX21ya19ncnAyKSBSdW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFg3NzUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDExOSA6IChHcm91cCAxMTkgcG1fbXJrX2dycDIpIFJ1biBjeWNsZXMKKworI0dyb3VwIDEyMCBwbV9tcmtfZHNvdXJjZTEsIE1hcmtlZCBkYXRhIGZyb20gCitldmVudDowWDc4MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0RBVEFfRlJPTV9MMl9HUlAxMjAgOiAoR3JvdXAgMTIwIHBtX21ya19kc291cmNlMSkgTWFya2VkIGRhdGEgbG9hZGVkIGZyb20gTDIKK2V2ZW50OjBYNzgxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfREFUQV9GUk9NX0wyX0NZQ19HUlAxMjAgOiAoR3JvdXAgMTIwIHBtX21ya19kc291cmNlMSkgTWFya2VkIGxvYWQgbGF0ZW5jeSBmcm9tIEwyCitldmVudDowWDc4MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0RBVEFfRlJPTV9MMjVfTU9EX0dSUDEyMCA6IChHcm91cCAxMjAgcG1fbXJrX2Rzb3VyY2UxKSBNYXJrZWQgZGF0YSBsb2FkZWQgZnJvbSBMMi41IG1vZGlmaWVkCitldmVudDowWDc4MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0RBVEFfRlJPTV9MMjVfTU9EX0NZQ19HUlAxMjAgOiAoR3JvdXAgMTIwIHBtX21ya19kc291cmNlMSkgTWFya2VkIGxvYWQgbGF0ZW5jeSBmcm9tIEwyLjUgbW9kaWZpZWQKK2V2ZW50OjBYNzg0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDEyMCA6IChHcm91cCAxMjAgcG1fbXJrX2Rzb3VyY2UxKSBSdW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFg3ODUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDEyMCA6IChHcm91cCAxMjAgcG1fbXJrX2Rzb3VyY2UxKSBSdW4gY3ljbGVzCisKKyNHcm91cCAxMjEgcG1fbXJrX2Rzb3VyY2UyLCBNYXJrZWQgZGF0YSBmcm9tCitldmVudDowWDc5MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0RBVEFfRlJPTV9MMjVfU0hSX0dSUDEyMSA6IChHcm91cCAxMjEgcG1fbXJrX2Rzb3VyY2UyKSBNYXJrZWQgZGF0YSBsb2FkZWQgZnJvbSBMMi41IHNoYXJlZAorZXZlbnQ6MFg3OTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19EQVRBX0ZST01fTDI1X1NIUl9DWUNfR1JQMTIxIDogKEdyb3VwIDEyMSBwbV9tcmtfZHNvdXJjZTIpIE1hcmtlZCBsb2FkIGxhdGVuY3kgZnJvbSBMMi41IHNoYXJlZAorZXZlbnQ6MFg3OTIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lPUFNfQ01QTF9HUlAxMjEgOiAoR3JvdXAgMTIxIHBtX21ya19kc291cmNlMikgSU9QUyBpbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDc5MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVX0ZJTl9HUlAxMjEgOiAoR3JvdXAgMTIxIHBtX21ya19kc291cmNlMikgRlBVIHByb2R1Y2VkIGEgcmVzdWx0CitldmVudDowWDc5NCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlAxMjEgOiAoR3JvdXAgMTIxIHBtX21ya19kc291cmNlMikgUnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYNzk1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxMjEgOiAoR3JvdXAgMTIxIHBtX21ya19kc291cmNlMikgUnVuIGN5Y2xlcworCisjR3JvdXAgMTIyIHBtX21ya19kc291cmNlMywgTWFya2VkIGRhdGEgZnJvbQorZXZlbnQ6MFg3QTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19EQVRBX0ZST01fTDNfR1JQMTIyIDogKEdyb3VwIDEyMiBwbV9tcmtfZHNvdXJjZTMpIE1hcmtlZCBkYXRhIGxvYWRlZCBmcm9tIEwzCitldmVudDowWDdBMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0RBVEFfRlJPTV9MM19DWUNfR1JQMTIyIDogKEdyb3VwIDEyMiBwbV9tcmtfZHNvdXJjZTMpIE1hcmtlZCBsb2FkIGxhdGVuY3kgZnJvbSBMMworZXZlbnQ6MFg3QTIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19EQVRBX0ZST01fTDM1X01PRF9HUlAxMjIgOiAoR3JvdXAgMTIyIHBtX21ya19kc291cmNlMykgTWFya2VkIGRhdGEgbG9hZGVkIGZyb20gTDMuNSBtb2RpZmllZAorZXZlbnQ6MFg3QTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19EQVRBX0ZST01fTDM1X01PRF9DWUNfR1JQMTIyIDogKEdyb3VwIDEyMiBwbV9tcmtfZHNvdXJjZTMpIE1hcmtlZCBsb2FkIGxhdGVuY3kgZnJvbSBMMy41IG1vZGlmaWVkCitldmVudDowWDdBNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlAxMjIgOiAoR3JvdXAgMTIyIHBtX21ya19kc291cmNlMykgUnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYN0E1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxMjIgOiAoR3JvdXAgMTIyIHBtX21ya19kc291cmNlMykgUnVuIGN5Y2xlcworCisjR3JvdXAgMTIzIHBtX21ya19kc291cmNlNCwgTWFya2VkIGRhdGEgZnJvbQorZXZlbnQ6MFg3QjAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19EQVRBX0ZST01fUk1FTV9HUlAxMjMgOiAoR3JvdXAgMTIzIHBtX21ya19kc291cmNlNCkgTWFya2VkIGRhdGEgbG9hZGVkIGZyb20gcmVtb3RlIG1lbW9yeQorZXZlbnQ6MFg3QjEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19EQVRBX0ZST01fTDI3NV9TSFJfQ1lDX0dSUDEyMyA6IChHcm91cCAxMjMgcG1fbXJrX2Rzb3VyY2U0KSBNYXJrZWQgbG9hZCBsYXRlbmN5IGZyb20gTDIuNzUgc2hhcmVkCitldmVudDowWDdCMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0RBVEFfRlJPTV9MMjc1X1NIUl9HUlAxMjMgOiAoR3JvdXAgMTIzIHBtX21ya19kc291cmNlNCkgTWFya2VkIGRhdGEgbG9hZGVkIGZyb20gTDIuNzUgc2hhcmVkCitldmVudDowWDdCMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0RBVEFfRlJPTV9STUVNX0NZQ19HUlAxMjMgOiAoR3JvdXAgMTIzIHBtX21ya19kc291cmNlNCkgTWFya2VkIGxvYWQgbGF0ZW5jeSBmcm9tIHJlbW90ZSBtZW1vcnkKK2V2ZW50OjBYN0I0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDEyMyA6IChHcm91cCAxMjMgcG1fbXJrX2Rzb3VyY2U0KSBSdW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFg3QjUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDEyMyA6IChHcm91cCAxMjMgcG1fbXJrX2Rzb3VyY2U0KSBSdW4gY3ljbGVzCisKKyNHcm91cCAxMjQgcG1fbXJrX2Rzb3VyY2U1LCBNYXJrZWQgZGF0YSBmcm9tCitldmVudDowWDdDMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0RBVEFfRlJPTV9MMzVfU0hSX0dSUDEyNCA6IChHcm91cCAxMjQgcG1fbXJrX2Rzb3VyY2U1KSBNYXJrZWQgZGF0YSBsb2FkZWQgZnJvbSBMMy41IHNoYXJlZAorZXZlbnQ6MFg3QzEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19EQVRBX0ZST01fTDM1X1NIUl9DWUNfR1JQMTI0IDogKEdyb3VwIDEyNCBwbV9tcmtfZHNvdXJjZTUpIE1hcmtlZCBsb2FkIGxhdGVuY3kgZnJvbSBMMy41IHNoYXJlZAorZXZlbnQ6MFg3QzIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19EQVRBX0ZST01fTE1FTV9HUlAxMjQgOiAoR3JvdXAgMTI0IHBtX21ya19kc291cmNlNSkgTWFya2VkIGRhdGEgbG9hZGVkIGZyb20gbG9jYWwgbWVtb3J5CitldmVudDowWDdDMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0RBVEFfRlJPTV9MTUVNX0NZQ19HUlAxMjQgOiAoR3JvdXAgMTI0IHBtX21ya19kc291cmNlNSkgTWFya2VkIGxvYWQgbGF0ZW5jeSBmcm9tIGxvY2FsIG1lbW9yeQorZXZlbnQ6MFg3QzQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQMTI0IDogKEdyb3VwIDEyNCBwbV9tcmtfZHNvdXJjZTUpIFJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDdDNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQMTI0IDogKEdyb3VwIDEyNCBwbV9tcmtfZHNvdXJjZTUpIFJ1biBjeWNsZXMKKworI0dyb3VwIDEyNSBwbV9tcmtfZHNvdXJjZTYsIE1hcmtlZCBkYXRhIGZyb20KK2V2ZW50OjBYN0QwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfREFUQV9GUk9NX0wyNzVfTU9EX0dSUDEyNSA6IChHcm91cCAxMjUgcG1fbXJrX2Rzb3VyY2U2KSBNYXJrZWQgZGF0YSBsb2FkZWQgZnJvbSBMMi43NSBtb2RpZmllZAorZXZlbnQ6MFg3RDEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19EQVRBX0ZST01fTDI3NV9TSFJfQ1lDX0dSUDEyNSA6IChHcm91cCAxMjUgcG1fbXJrX2Rzb3VyY2U2KSBNYXJrZWQgbG9hZCBsYXRlbmN5IGZyb20gTDIuNzUgc2hhcmVkCitldmVudDowWDdEMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU9QU19DTVBMX0dSUDEyNSA6IChHcm91cCAxMjUgcG1fbXJrX2Rzb3VyY2U2KSBJT1BTIGluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYN0QzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfREFUQV9GUk9NX0wyNzVfTU9EX0NZQ19HUlAxMjUgOiAoR3JvdXAgMTI1IHBtX21ya19kc291cmNlNikgTWFya2VkIGxvYWQgbGF0ZW5jeSBmcm9tIEwyLjc1IG1vZGlmaWVkCitldmVudDowWDdENCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlAxMjUgOiAoR3JvdXAgMTI1IHBtX21ya19kc291cmNlNikgUnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYN0Q1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxMjUgOiAoR3JvdXAgMTI1IHBtX21ya19kc291cmNlNikgUnVuIGN5Y2xlcworCisjR3JvdXAgMTI2IHBtX21ya19kc291cmNlNywgTWFya2VkIGRhdGEgZnJvbQorZXZlbnQ6MFg3RTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19EQVRBX0ZST01fTDM3NV9NT0RfR1JQMTI2IDogKEdyb3VwIDEyNiBwbV9tcmtfZHNvdXJjZTcpIE1hcmtlZCBkYXRhIGxvYWRlZCBmcm9tIEwzLjc1IG1vZGlmaWVkCitldmVudDowWDdFMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0RBVEFfRlJPTV9MMzc1X1NIUl9DWUNfR1JQMTI2IDogKEdyb3VwIDEyNiBwbV9tcmtfZHNvdXJjZTcpIE1hcmtlZCBsb2FkIGxhdGVuY3kgZnJvbSBMMy43NSBzaGFyZWQKK2V2ZW50OjBYN0UyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfREFUQV9GUk9NX0wzNzVfU0hSX0dSUDEyNiA6IChHcm91cCAxMjYgcG1fbXJrX2Rzb3VyY2U3KSBNYXJrZWQgZGF0YSBsb2FkZWQgZnJvbSBMMy43NSBzaGFyZWQKK2V2ZW50OjBYN0UzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfREFUQV9GUk9NX0wzNzVfTU9EX0NZQ19HUlAxMjYgOiAoR3JvdXAgMTI2IHBtX21ya19kc291cmNlNykgTWFya2VkIGxvYWQgbGF0ZW5jeSBmcm9tIEwzLjc1IG1vZGlmaWVkCitldmVudDowWDdFNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlAxMjYgOiAoR3JvdXAgMTI2IHBtX21ya19kc291cmNlNykgUnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYN0U1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxMjYgOiAoR3JvdXAgMTI2IHBtX21ya19kc291cmNlNykgUnVuIGN5Y2xlcworCisjR3JvdXAgMTI3IHBtX21ya19kdGxicmVmLCBNYXJrZWQgZGF0YSBUTEIgcmVmZXJlbmNlcworZXZlbnQ6MFg3RjAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19EVExCX1JFRl80S19HUlAxMjcgOiAoR3JvdXAgMTI3IHBtX21ya19kdGxicmVmKSBNYXJrZWQgRGF0YSBUTEIgcmVmZXJlbmNlIGZvciA0SyBwYWdlCitldmVudDowWDdGMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0RUTEJfUkVGXzY0S19HUlAxMjcgOiAoR3JvdXAgMTI3IHBtX21ya19kdGxicmVmKSBNYXJrZWQgRGF0YSBUTEIgcmVmZXJlbmNlIGZvciA2NEsgcGFnZQorZXZlbnQ6MFg3RjIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19EVExCX1JFRl8xNk1fR1JQMTI3IDogKEdyb3VwIDEyNyBwbV9tcmtfZHRsYnJlZikgTWFya2VkIERhdGEgVExCIHJlZmVyZW5jZSBmb3IgMTZNIHBhZ2UKK2V2ZW50OjBYN0YzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfRFRMQl9SRUZfMTZHX0dSUDEyNyA6IChHcm91cCAxMjcgcG1fbXJrX2R0bGJyZWYpIE1hcmtlZCBEYXRhIFRMQiByZWZlcmVuY2UgZm9yIDE2RyBwYWdlCitldmVudDowWDdGNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlAxMjcgOiAoR3JvdXAgMTI3IHBtX21ya19kdGxicmVmKSBSdW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFg3RjUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDEyNyA6IChHcm91cCAxMjcgcG1fbXJrX2R0bGJyZWYpIFJ1biBjeWNsZXMKKworI0dyb3VwIDEyOCBwbV9tcmtfZHRsYm1pc3MsIE1hcmtlZCBkYXRhIFRMQiBtaXNzZXMKK2V2ZW50OjBYODAwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfRFRMQl9NSVNTXzRLX0dSUDEyOCA6IChHcm91cCAxMjggcG1fbXJrX2R0bGJtaXNzKSBNYXJrZWQgRGF0YSBUTEIgbWlzc2VzIGZvciA0SyBwYWdlCitldmVudDowWDgwMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0RUTEJfTUlTU182NEtfR1JQMTI4IDogKEdyb3VwIDEyOCBwbV9tcmtfZHRsYm1pc3MpIE1hcmtlZCBEYXRhIFRMQiBtaXNzZXMgZm9yIDY0SyBwYWdlCitldmVudDowWDgwMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0RUTEJfTUlTU18xNk1fR1JQMTI4IDogKEdyb3VwIDEyOCBwbV9tcmtfZHRsYm1pc3MpIE1hcmtlZCBEYXRhIFRMQiBtaXNzZXMgZm9yIDE2TSBwYWdlCitldmVudDowWDgwMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0RUTEJfTUlTU18xNkdfR1JQMTI4IDogKEdyb3VwIDEyOCBwbV9tcmtfZHRsYm1pc3MpIE1hcmtlZCBEYXRhIFRMQiBtaXNzZXMgZm9yIDE2RyBwYWdlCitldmVudDowWDgwNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlAxMjggOiAoR3JvdXAgMTI4IHBtX21ya19kdGxibWlzcykgUnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYODA1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxMjggOiAoR3JvdXAgMTI4IHBtX21ya19kdGxibWlzcykgUnVuIGN5Y2xlcworCisjR3JvdXAgMTI5IHBtX21ya19kdGxiX2RzbGIsIE1hcmtlZCBkYXRhIFRMQiByZWZlcmVuY2VzIGFuZCBtaXNzZXMgYW5kIG1hcmtlZCBkYXRhIFNMQiBtaXNzZXMKK2V2ZW50OjBYODEwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfRFRMQl9SRUZfR1JQMTI5IDogKEdyb3VwIDEyOSBwbV9tcmtfZHRsYl9kc2xiKSBNYXJrZWQgRGF0YSBUTEIgcmVmZXJlbmNlCitldmVudDowWDgxMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0RUTEJfTUlTU19HUlAxMjkgOiAoR3JvdXAgMTI5IHBtX21ya19kdGxiX2RzbGIpIE1hcmtlZCBEYXRhIFRMQiBtaXNzZXMKK2V2ZW50OjBYODEyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfRFNMQl9NSVNTX0dSUDEyOSA6IChHcm91cCAxMjkgcG1fbXJrX2R0bGJfZHNsYikgTWFya2VkIERhdGEgU0xCIG1pc3NlcworZXZlbnQ6MFg4MTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQMTI5IDogKEdyb3VwIDEyOSBwbV9tcmtfZHRsYl9kc2xiKSBQcm9jZXNzb3IgY3ljbGVzCitldmVudDowWDgxNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlAxMjkgOiAoR3JvdXAgMTI5IHBtX21ya19kdGxiX2RzbGIpIFJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDgxNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQMTI5IDogKEdyb3VwIDEyOSBwbV9tcmtfZHRsYl9kc2xiKSBSdW4gY3ljbGVzCisKKyNHcm91cCAxMzAgcG1fbXJrX2xicmVmLCBNYXJrZWQgVExCIGFuZCBTTEIgcmVmZXJlbmNlcworZXZlbnQ6MFg4MjAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19EVExCX1JFRl80S19HUlAxMzAgOiAoR3JvdXAgMTMwIHBtX21ya19sYnJlZikgTWFya2VkIERhdGEgVExCIHJlZmVyZW5jZSBmb3IgNEsgcGFnZQorZXZlbnQ6MFg4MjEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lPUFNfQ01QTF9HUlAxMzAgOiAoR3JvdXAgMTMwIHBtX21ya19sYnJlZikgSU9QUyBpbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDgyMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0RUTEJfUkVGXzE2TV9HUlAxMzAgOiAoR3JvdXAgMTMwIHBtX21ya19sYnJlZikgTWFya2VkIERhdGEgVExCIHJlZmVyZW5jZSBmb3IgMTZNIHBhZ2UKK2V2ZW50OjBYODIzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfRFNMQl9NSVNTX0dSUDEzMCA6IChHcm91cCAxMzAgcG1fbXJrX2xicmVmKSBNYXJrZWQgRGF0YSBTTEIgbWlzc2VzCitldmVudDowWDgyNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlAxMzAgOiAoR3JvdXAgMTMwIHBtX21ya19sYnJlZikgUnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYODI1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxMzAgOiAoR3JvdXAgMTMwIHBtX21ya19sYnJlZikgUnVuIGN5Y2xlcworCisjR3JvdXAgMTMxIHBtX21ya19sc21pc3MsIE1hcmtlZCBsb2FkIGFuZCBzdG9yZSBtaXNzCitldmVudDowWDgzMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0xEX01JU1NfTDFfR1JQMTMxIDogKEdyb3VwIDEzMSBwbV9tcmtfbHNtaXNzKSBNYXJrZWQgTDEgRCBjYWNoZSBsb2FkIG1pc3NlcworZXZlbnQ6MFg4MzEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lPUFNfQ01QTF9HUlAxMzEgOiAoR3JvdXAgMTMxIHBtX21ya19sc21pc3MpIElPUFMgaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFg4MzIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19TVF9DTVBMX0lOVF9HUlAxMzEgOiAoR3JvdXAgMTMxIHBtX21ya19sc21pc3MpIE1hcmtlZCBzdG9yZSBjb21wbGV0ZWQgd2l0aCBpbnRlcnZlbnRpb24KK2V2ZW50OjBYODMzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfQ1JVX0ZJTl9HUlAxMzEgOiAoR3JvdXAgMTMxIHBtX21ya19sc21pc3MpIE1hcmtlZCBpbnN0cnVjdGlvbiBDUlUgcHJvY2Vzc2luZyBmaW5pc2hlZAorZXZlbnQ6MFg4MzQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQMTMxIDogKEdyb3VwIDEzMSBwbV9tcmtfbHNtaXNzKSBSdW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFg4MzUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDEzMSA6IChHcm91cCAxMzEgcG1fbXJrX2xzbWlzcykgUnVuIGN5Y2xlcworCisjR3JvdXAgMTMyIHBtX21ya191bHNmbHVzaCwgTWFyayB1bmFsaWduZWQgbG9hZCBhbmQgc3RvcmUgZmx1c2hlcworZXZlbnQ6MFg4NDAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19TVF9DTVBMX0dSUDEzMiA6IChHcm91cCAxMzIgcG1fbXJrX3Vsc2ZsdXNoKSBNYXJrZWQgc3RvcmUgaW5zdHJ1Y3Rpb24gY29tcGxldGVkCitldmVudDowWDg0MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX1NUX01JU1NfTDFfR1JQMTMyIDogKEdyb3VwIDEzMiBwbV9tcmtfdWxzZmx1c2gpIE1hcmtlZCBMMSBEIGNhY2hlIHN0b3JlIG1pc3NlcworZXZlbnQ6MFg4NDIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19MU1VfRkxVU0hfVVNUX0dSUDEzMiA6IChHcm91cCAxMzIgcG1fbXJrX3Vsc2ZsdXNoKSBNYXJrZWQgdW5hbGlnbmVkIHN0b3JlIGZsdXNoZXMKK2V2ZW50OjBYODQzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfTFNVX0ZMVVNIX1VMRF9HUlAxMzIgOiAoR3JvdXAgMTMyIHBtX21ya191bHNmbHVzaCkgTWFya2VkIHVuYWxpZ25lZCBsb2FkIGZsdXNoZXMKK2V2ZW50OjBYODQ0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDEzMiA6IChHcm91cCAxMzIgcG1fbXJrX3Vsc2ZsdXNoKSBSdW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFg4NDUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDEzMiA6IChHcm91cCAxMzIgcG1fbXJrX3Vsc2ZsdXNoKSBSdW4gY3ljbGVzCisKKyNHcm91cCAxMzMgcG1fbXJrX21pc2MsIE1pc2MgbWFya2VkIGluc3RydWN0aW9ucworZXZlbnQ6MFg4NTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19TVENYX0ZBSUxfR1JQMTMzIDogKEdyb3VwIDEzMyBwbV9tcmtfbWlzYykgTWFya2VkIFNUQ1ggZmFpbGVkCitldmVudDowWDg1MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX1NUX0dQU19HUlAxMzMgOiAoR3JvdXAgMTMzIHBtX21ya19taXNjKSBNYXJrZWQgc3RvcmUgc2VudCB0byBHUFMKK2V2ZW50OjBYODUyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfRlBVX0ZJTl9HUlAxMzMgOiAoR3JvdXAgMTMzIHBtX21ya19taXNjKSBNYXJrZWQgaW5zdHJ1Y3Rpb24gRlBVIHByb2Nlc3NpbmcgZmluaXNoZWQKK2V2ZW50OjBYODUzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfR1JQX1RJTUVPX0dSUDEzMyA6IChHcm91cCAxMzMgcG1fbXJrX21pc2MpIE1hcmtlZCBncm91cCBjb21wbGV0aW9uIHRpbWVvdXQKK2V2ZW50OjBYODU0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDEzMyA6IChHcm91cCAxMzMgcG1fbXJrX21pc2MpIFJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDg1NSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQMTMzIDogKEdyb3VwIDEzMyBwbV9tcmtfbWlzYykgUnVuIGN5Y2xlcworCisjR3JvdXAgMTM0IHBtX2xzcmVmX0wxLCBMb2FkL1N0b3JlIG9wZXJhdGlvbnMgYW5kIEwxIGFjdGl2aXR5CitldmVudDowWDg2MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fREFUQV9GUk9NX0wyX0dSUDEzNCA6IChHcm91cCAxMzQgcG1fbHNyZWZfTDEpIERhdGEgbG9hZGVkIGZyb20gTDIKK2V2ZW50OjBYODYxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JTlNUX0ZST01fTDFfR1JQMTM0IDogKEdyb3VwIDEzNCBwbV9sc3JlZl9MMSkgSW5zdHJ1Y3Rpb24gZmV0Y2hlZCBmcm9tIEwxCitldmVudDowWDg2MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fU1RfUkVGX0wxX0dSUDEzNCA6IChHcm91cCAxMzQgcG1fbHNyZWZfTDEpIEwxIEQgY2FjaGUgc3RvcmUgcmVmZXJlbmNlcworZXZlbnQ6MFg4NjMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xEX1JFRl9MMV9HUlAxMzQgOiAoR3JvdXAgMTM0IHBtX2xzcmVmX0wxKSBMMSBEIGNhY2hlIGxvYWQgcmVmZXJlbmNlcworZXZlbnQ6MFg4NjQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQMTM0IDogKEdyb3VwIDEzNCBwbV9sc3JlZl9MMSkgUnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYODY1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxMzQgOiAoR3JvdXAgMTM0IHBtX2xzcmVmX0wxKSBSdW4gY3ljbGVzCisKKyNHcm91cCAxMzUgcG1fbHNyZWZfTDJMMywgTG9hZC9TdG9yZSBvcGVyYXRpb25zIGFuZCBMMixMMyBhY3Rpdml0eQorZXZlbnQ6MFg4NzAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RBVEFfRlJPTV9MM19HUlAxMzUgOiAoR3JvdXAgMTM1IHBtX2xzcmVmX0wyTDMpIERhdGEgbG9hZGVkIGZyb20gTDMKK2V2ZW50OjBYODcxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQVRBX0ZST01fTE1FTV9HUlAxMzUgOiAoR3JvdXAgMTM1IHBtX2xzcmVmX0wyTDMpIERhdGEgbG9hZGVkIGZyb20gbG9jYWwgbWVtb3J5CitldmVudDowWDg3MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fU1RfUkVGX0wxX0dSUDEzNSA6IChHcm91cCAxMzUgcG1fbHNyZWZfTDJMMykgTDEgRCBjYWNoZSBzdG9yZSByZWZlcmVuY2VzCitldmVudDowWDg3MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTERfUkVGX0wxX0dSUDEzNSA6IChHcm91cCAxMzUgcG1fbHNyZWZfTDJMMykgTDEgRCBjYWNoZSBsb2FkIHJlZmVyZW5jZXMKK2V2ZW50OjBYODc0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDEzNSA6IChHcm91cCAxMzUgcG1fbHNyZWZfTDJMMykgUnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYODc1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxMzUgOiAoR3JvdXAgMTM1IHBtX2xzcmVmX0wyTDMpIFJ1biBjeWNsZXMKKworI0dyb3VwIDEzNiBwbV9sc3JlZl90bGJtaXNzLCBMb2FkL1N0b3JlIG9wZXJhdGlvbnMgYW5kIFRMQiBtaXNzZXMKK2V2ZW50OjBYODgwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JVExCX01JU1NfR1JQMTM2IDogKEdyb3VwIDEzNiBwbV9sc3JlZl90bGJtaXNzKSBJbnN0cnVjdGlvbiBUTEIgbWlzc2VzCitldmVudDowWDg4MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRFRMQl9NSVNTX0dSUDEzNiA6IChHcm91cCAxMzYgcG1fbHNyZWZfdGxibWlzcykgRGF0YSBUTEIgbWlzc2VzCitldmVudDowWDg4MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fU1RfUkVGX0wxX0dSUDEzNiA6IChHcm91cCAxMzYgcG1fbHNyZWZfdGxibWlzcykgTDEgRCBjYWNoZSBzdG9yZSByZWZlcmVuY2VzCitldmVudDowWDg4MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTERfUkVGX0wxX0dSUDEzNiA6IChHcm91cCAxMzYgcG1fbHNyZWZfdGxibWlzcykgTDEgRCBjYWNoZSBsb2FkIHJlZmVyZW5jZXMKK2V2ZW50OjBYODg0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDEzNiA6IChHcm91cCAxMzYgcG1fbHNyZWZfdGxibWlzcykgUnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYODg1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxMzYgOiAoR3JvdXAgMTM2IHBtX2xzcmVmX3RsYm1pc3MpIFJ1biBjeWNsZXMKKworI0dyb3VwIDEzNyBwbV9EbWlzcywgRGF0YSBjYWNoZSBtaXNzZXMKK2V2ZW50OjBYODkwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQVRBX0ZST01fTDNfR1JQMTM3IDogKEdyb3VwIDEzNyBwbV9EbWlzcykgRGF0YSBsb2FkZWQgZnJvbSBMMworZXZlbnQ6MFg4OTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RBVEFfRlJPTV9MTUVNX0dSUDEzNyA6IChHcm91cCAxMzcgcG1fRG1pc3MpIERhdGEgbG9hZGVkIGZyb20gbG9jYWwgbWVtb3J5CitldmVudDowWDg5MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTERfTUlTU19MMV9HUlAxMzcgOiAoR3JvdXAgMTM3IHBtX0RtaXNzKSBMMSBEIGNhY2hlIGxvYWQgbWlzc2VzCitldmVudDowWDg5MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fU1RfTUlTU19MMV9HUlAxMzcgOiAoR3JvdXAgMTM3IHBtX0RtaXNzKSBMMSBEIGNhY2hlIHN0b3JlIG1pc3NlcworZXZlbnQ6MFg4OTQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQMTM3IDogKEdyb3VwIDEzNyBwbV9EbWlzcykgUnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYODk1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxMzcgOiAoR3JvdXAgMTM3IHBtX0RtaXNzKSBSdW4gY3ljbGVzCisKKyNHcm91cCAxMzggcG1fcHJlZmV0Y2hYLCBQcmVmZXRjaCBldmVudHMKK2V2ZW50OjBYOEEwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDEzOCA6IChHcm91cCAxMzggcG1fcHJlZmV0Y2hYKSBQcm9jZXNzb3IgY3ljbGVzCitldmVudDowWDhBMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSUNfUFJFRl9SRVFfR1JQMTM4IDogKEdyb3VwIDEzOCBwbV9wcmVmZXRjaFgpIEluc3RydWN0aW9uIHByZWZldGNoIHJlcXVlc3RzCitldmVudDowWDhBMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDFfUFJFRl9HUlAxMzggOiAoR3JvdXAgMTM4IHBtX3ByZWZldGNoWCkgTDEgY2FjaGUgZGF0YSBwcmVmZXRjaGVzCitldmVudDowWDhBMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDJfUFJFRl9HUlAxMzggOiAoR3JvdXAgMTM4IHBtX3ByZWZldGNoWCkgTDIgY2FjaGUgcHJlZmV0Y2hlcworZXZlbnQ6MFg4QTQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQMTM4IDogKEdyb3VwIDEzOCBwbV9wcmVmZXRjaFgpIFJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDhBNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQMTM4IDogKEdyb3VwIDEzOCBwbV9wcmVmZXRjaFgpIFJ1biBjeWNsZXMKKworI0dyb3VwIDEzOSBwbV9icmFuY2hYLCBCcmFuY2ggb3BlcmF0aW9ucworZXZlbnQ6MFg4QjAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0JSX1VOQ09ORF9HUlAxMzkgOiAoR3JvdXAgMTM5IHBtX2JyYW5jaFgpIFVuY29uZGl0aW9uYWwgYnJhbmNoCitldmVudDowWDhCMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fQlJfUFJFRF9UQV9HUlAxMzkgOiAoR3JvdXAgMTM5IHBtX2JyYW5jaFgpIEEgY29uZGl0aW9uYWwgYnJhbmNoIHdhcyBwcmVkaWN0ZWQsIHRhcmdldCBwcmVkaWN0aW9uCitldmVudDowWDhCMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fQlJfUFJFRF9DUl9HUlAxMzkgOiAoR3JvdXAgMTM5IHBtX2JyYW5jaFgpIEEgY29uZGl0aW9uYWwgYnJhbmNoIHdhcyBwcmVkaWN0ZWQsIENSIHByZWRpY3Rpb24KK2V2ZW50OjBYOEIzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9CUl9JU1NVRURfR1JQMTM5IDogKEdyb3VwIDEzOSBwbV9icmFuY2hYKSBCcmFuY2hlcyBpc3N1ZWQKK2V2ZW50OjBYOEI0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDEzOSA6IChHcm91cCAxMzkgcG1fYnJhbmNoWCkgUnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYOEI1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxMzkgOiAoR3JvdXAgMTM5IHBtX2JyYW5jaFgpIFJ1biBjeWNsZXMKKworI0dyb3VwIDE0MCBwbV9mcHVYMSwgRmxvYXRpbmcgcG9pbnQgZXZlbnRzIGJ5IHVuaXQKK2V2ZW50OjBYOEMwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFUwX1NUQUxMM19HUlAxNDAgOiAoR3JvdXAgMTQwIHBtX2ZwdVgxKSBGUFUwIHN0YWxsZWQgaW4gcGlwZTMKK2V2ZW50OjBYOEMxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFUxX1NUQUxMM19HUlAxNDAgOiAoR3JvdXAgMTQwIHBtX2ZwdVgxKSBGUFUxIHN0YWxsZWQgaW4gcGlwZTMKK2V2ZW50OjBYOEMyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFUwX0ZJTl9HUlAxNDAgOiAoR3JvdXAgMTQwIHBtX2ZwdVgxKSBGUFUwIHByb2R1Y2VkIGEgcmVzdWx0CitldmVudDowWDhDMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVMF9GUFNDUl9HUlAxNDAgOiAoR3JvdXAgMTQwIHBtX2ZwdVgxKSBGUFUwIGV4ZWN1dGVkIEZQU0NSIGluc3RydWN0aW9uCitldmVudDowWDhDNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlAxNDAgOiAoR3JvdXAgMTQwIHBtX2ZwdVgxKSBSdW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFg4QzUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDE0MCA6IChHcm91cCAxNDAgcG1fZnB1WDEpIFJ1biBjeWNsZXMKKworI0dyb3VwIDE0MSBwbV9mcHVYMiwgRmxvYXRpbmcgcG9pbnQgZXZlbnRzIGJ5IHVuaXQKK2V2ZW50OjBYOEQwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFUwX0ZNQV9HUlAxNDEgOiAoR3JvdXAgMTQxIHBtX2ZwdVgyKSBGUFUwIGV4ZWN1dGVkIG11bHRpcGx5LWFkZCBpbnN0cnVjdGlvbgorZXZlbnQ6MFg4RDEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVTFfRk1BX0dSUDE0MSA6IChHcm91cCAxNDEgcG1fZnB1WDIpIEZQVTEgZXhlY3V0ZWQgbXVsdGlwbHktYWRkIGluc3RydWN0aW9uCitldmVudDowWDhEMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVMF9GUlNQX0ZDT05WX0dSUDE0MSA6IChHcm91cCAxNDEgcG1fZnB1WDIpIEZQVTAgZXhlY3V0ZWQgRlJTUCBvciBGQ09OViBpbnN0cnVjdGlvbnMKK2V2ZW50OjBYOEQzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFUxX0ZSU1BfRkNPTlZfR1JQMTQxIDogKEdyb3VwIDE0MSBwbV9mcHVYMikgRlBVMSBleGVjdXRlZCBGUlNQIG9yIEZDT05WIGluc3RydWN0aW9ucworZXZlbnQ6MFg4RDQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQMTQxIDogKEdyb3VwIDE0MSBwbV9mcHVYMikgUnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYOEQ1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxNDEgOiAoR3JvdXAgMTQxIHBtX2ZwdVgyKSBSdW4gY3ljbGVzCisKKyNHcm91cCAxNDIgcG1fZnB1WDMsIEZsb2F0aW5nIHBvaW50IGV2ZW50cyBieSB1bml0CitldmVudDowWDhFMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVMF8xRkxPUF9HUlAxNDIgOiAoR3JvdXAgMTQyIHBtX2ZwdVgzKSBGUFUwIGV4ZWN1dGVkIGFkZCwgbXVsdCwgc3ViLCBjbXAgb3Igc2VsIGluc3RydWN0aW9uCitldmVudDowWDhFMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVMV8xRkxPUF9HUlAxNDIgOiAoR3JvdXAgMTQyIHBtX2ZwdVgzKSBGUFUxIGV4ZWN1dGVkIGFkZCwgbXVsdCwgc3ViLCBjbXAgb3Igc2VsIGluc3RydWN0aW9uCitldmVudDowWDhFMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVMF9GSU5fR1JQMTQyIDogKEdyb3VwIDE0MiBwbV9mcHVYMykgRlBVMCBwcm9kdWNlZCBhIHJlc3VsdAorZXZlbnQ6MFg4RTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVTFfRklOX0dSUDE0MiA6IChHcm91cCAxNDIgcG1fZnB1WDMpIEZQVTEgcHJvZHVjZWQgYSByZXN1bHQKK2V2ZW50OjBYOEU0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDE0MiA6IChHcm91cCAxNDIgcG1fZnB1WDMpIFJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDhFNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQMTQyIDogKEdyb3VwIDE0MiBwbV9mcHVYMykgUnVuIGN5Y2xlcworCisjR3JvdXAgMTQzIHBtX2ZwdVg0LCBGbG9hdGluZyBwb2ludCBhbmQgTDEgZXZlbnRzCitldmVudDowWDhGMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVXzFGTE9QX0dSUDE0MyA6IChHcm91cCAxNDMgcG1fZnB1WDQpIEZQVSBleGVjdXRlZCBvbmUgZmxvcCBpbnN0cnVjdGlvbiAKK2V2ZW50OjBYOEYxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFVfRk1BX0dSUDE0MyA6IChHcm91cCAxNDMgcG1fZnB1WDQpIEZQVSBleGVjdXRlZCBtdWx0aXBseS1hZGQgaW5zdHJ1Y3Rpb24KK2V2ZW50OjBYOEYyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9TVF9SRUZfTDFfR1JQMTQzIDogKEdyb3VwIDE0MyBwbV9mcHVYNCkgTDEgRCBjYWNoZSBzdG9yZSByZWZlcmVuY2VzCitldmVudDowWDhGMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTERfUkVGX0wxX0dSUDE0MyA6IChHcm91cCAxNDMgcG1fZnB1WDQpIEwxIEQgY2FjaGUgbG9hZCByZWZlcmVuY2VzCitldmVudDowWDhGNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlAxNDMgOiAoR3JvdXAgMTQzIHBtX2ZwdVg0KSBSdW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFg4RjUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDE0MyA6IChHcm91cCAxNDMgcG1fZnB1WDQpIFJ1biBjeWNsZXMKKworI0dyb3VwIDE0NCBwbV9mcHVYNSwgRmxvYXRpbmcgcG9pbnQgZXZlbnRzCitldmVudDowWDkwMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVX1NJTkdMRV9HUlAxNDQgOiAoR3JvdXAgMTQ0IHBtX2ZwdVg1KSBGUFUgZXhlY3V0ZWQgc2luZ2xlIHByZWNpc2lvbiBpbnN0cnVjdGlvbgorZXZlbnQ6MFg5MDEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVV9TVEZfR1JQMTQ0IDogKEdyb3VwIDE0NCBwbV9mcHVYNSkgRlBVIGV4ZWN1dGVkIHN0b3JlIGluc3RydWN0aW9uCitldmVudDowWDkwMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVMF9GSU5fR1JQMTQ0IDogKEdyb3VwIDE0NCBwbV9mcHVYNSkgRlBVMCBwcm9kdWNlZCBhIHJlc3VsdAorZXZlbnQ6MFg5MDMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVTFfRklOX0dSUDE0NCA6IChHcm91cCAxNDQgcG1fZnB1WDUpIEZQVTEgcHJvZHVjZWQgYSByZXN1bHQKK2V2ZW50OjBYOTA0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDE0NCA6IChHcm91cCAxNDQgcG1fZnB1WDUpIFJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDkwNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQMTQ0IDogKEdyb3VwIDE0NCBwbV9mcHVYNSkgUnVuIGN5Y2xlcworCisjR3JvdXAgMTQ1IHBtX2ZwdVg2LCBGbG9hdGluZyBwb2ludCBldmVudHMKK2V2ZW50OjBYOTEwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFVfRkRJVl9HUlAxNDUgOiAoR3JvdXAgMTQ1IHBtX2ZwdVg2KSBGUFUgZXhlY3V0ZWQgRkRJViBpbnN0cnVjdGlvbgorZXZlbnQ6MFg5MTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVV9GU1FSVF9HUlAxNDUgOiAoR3JvdXAgMTQ1IHBtX2ZwdVg2KSBGUFUgZXhlY3V0ZWQgRlNRUlQgaW5zdHJ1Y3Rpb24KK2V2ZW50OjBYOTEyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFVfRlJTUF9GQ09OVl9HUlAxNDUgOiAoR3JvdXAgMTQ1IHBtX2ZwdVg2KSBGUFUgZXhlY3V0ZWQgRlJTUCBvciBGQ09OViBpbnN0cnVjdGlvbnMKK2V2ZW50OjBYOTEzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFVfRklOX0dSUDE0NSA6IChHcm91cCAxNDUgcG1fZnB1WDYpIEZQVSBwcm9kdWNlZCBhIHJlc3VsdAorZXZlbnQ6MFg5MTQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQMTQ1IDogKEdyb3VwIDE0NSBwbV9mcHVYNikgUnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYOTE1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxNDUgOiAoR3JvdXAgMTQ1IHBtX2ZwdVg2KSBSdW4gY3ljbGVzCisKKyNHcm91cCAxNDYgcG1fZnB1WDcsIEZsb2F0aW5nIHBvaW50IGV2ZW50cworZXZlbnQ6MFg5MjAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVV8xRkxPUF9HUlAxNDYgOiAoR3JvdXAgMTQ2IHBtX2ZwdVg3KSBGUFUgZXhlY3V0ZWQgb25lIGZsb3AgaW5zdHJ1Y3Rpb24gCitldmVudDowWDkyMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVX0ZNQV9HUlAxNDYgOiAoR3JvdXAgMTQ2IHBtX2ZwdVg3KSBGUFUgZXhlY3V0ZWQgbXVsdGlwbHktYWRkIGluc3RydWN0aW9uCitldmVudDowWDkyMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVX1NURl9HUlAxNDYgOiAoR3JvdXAgMTQ2IHBtX2ZwdVg3KSBGUFUgZXhlY3V0ZWQgc3RvcmUgaW5zdHJ1Y3Rpb24KK2V2ZW50OjBYOTIzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFVfRklOX0dSUDE0NiA6IChHcm91cCAxNDYgcG1fZnB1WDcpIEZQVSBwcm9kdWNlZCBhIHJlc3VsdAorZXZlbnQ6MFg5MjQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQMTQ2IDogKEdyb3VwIDE0NiBwbV9mcHVYNykgUnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYOTI1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxNDYgOiAoR3JvdXAgMTQ2IHBtX2ZwdVg3KSBSdW4gY3ljbGVzCisKKyNHcm91cCAxNDcgcG1faHBtY291bnQxLCBIUE0gZ3JvdXAgZm9yIHNldCAxIAorZXZlbnQ6MFg5MzAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQMTQ3IDogKEdyb3VwIDE0NyBwbV9ocG1jb3VudDEpIFByb2Nlc3NvciBjeWNsZXMKK2V2ZW50OjBYOTMxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GWFVfRklOX0dSUDE0NyA6IChHcm91cCAxNDcgcG1faHBtY291bnQxKSBGWFUgcHJvZHVjZWQgYSByZXN1bHQKK2V2ZW50OjBYOTMyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDE0NyA6IChHcm91cCAxNDcgcG1faHBtY291bnQxKSBQcm9jZXNzb3IgY3ljbGVzCitldmVudDowWDkzMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVX0ZJTl9HUlAxNDcgOiAoR3JvdXAgMTQ3IHBtX2hwbWNvdW50MSkgRlBVIHByb2R1Y2VkIGEgcmVzdWx0CitldmVudDowWDkzNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlAxNDcgOiAoR3JvdXAgMTQ3IHBtX2hwbWNvdW50MSkgUnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYOTM1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxNDcgOiAoR3JvdXAgMTQ3IHBtX2hwbWNvdW50MSkgUnVuIGN5Y2xlcworCisjR3JvdXAgMTQ4IHBtX2hwbWNvdW50MiwgSFBNIGdyb3VwIGZvciBzZXQgMgorZXZlbnQ6MFg5NDAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQMTQ4IDogKEdyb3VwIDE0OCBwbV9ocG1jb3VudDIpIFByb2Nlc3NvciBjeWNsZXMKK2V2ZW50OjBYOTQxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFVfU1RGX0dSUDE0OCA6IChHcm91cCAxNDggcG1faHBtY291bnQyKSBGUFUgZXhlY3V0ZWQgc3RvcmUgaW5zdHJ1Y3Rpb24KK2V2ZW50OjBYOTQyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JTlNUX0RJU1BfR1JQMTQ4IDogKEdyb3VwIDE0OCBwbV9ocG1jb3VudDIpIEluc3RydWN0aW9ucyBkaXNwYXRjaGVkCitldmVudDowWDk0MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVX0xERl9HUlAxNDggOiAoR3JvdXAgMTQ4IHBtX2hwbWNvdW50MikgTFNVIGV4ZWN1dGVkIEZsb2F0aW5nIFBvaW50IGxvYWQgaW5zdHJ1Y3Rpb24KK2V2ZW50OjBYOTQ0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDE0OCA6IChHcm91cCAxNDggcG1faHBtY291bnQyKSBSdW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFg5NDUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDE0OCA6IChHcm91cCAxNDggcG1faHBtY291bnQyKSBSdW4gY3ljbGVzCisKKyNHcm91cCAxNDkgcG1faHBtY291bnQzLCBIUE0gZ3JvdXAgZm9yIHNldCAzIAorZXZlbnQ6MFg5NTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQMTQ5IDogKEdyb3VwIDE0OSBwbV9ocG1jb3VudDMpIFByb2Nlc3NvciBjeWNsZXMKK2V2ZW50OjBYOTUxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JTlNUX0RJU1BfR1JQMTQ5IDogKEdyb3VwIDE0OSBwbV9ocG1jb3VudDMpIEluc3RydWN0aW9ucyBkaXNwYXRjaGVkCitldmVudDowWDk1MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTERfTUlTU19MMV9HUlAxNDkgOiAoR3JvdXAgMTQ5IHBtX2hwbWNvdW50MykgTDEgRCBjYWNoZSBsb2FkIG1pc3NlcworZXZlbnQ6MFg5NTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1NUX01JU1NfTDFfR1JQMTQ5IDogKEdyb3VwIDE0OSBwbV9ocG1jb3VudDMpIEwxIEQgY2FjaGUgc3RvcmUgbWlzc2VzCitldmVudDowWDk1NCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlAxNDkgOiAoR3JvdXAgMTQ5IHBtX2hwbWNvdW50MykgUnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYOTU1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxNDkgOiAoR3JvdXAgMTQ5IHBtX2hwbWNvdW50MykgUnVuIGN5Y2xlcworCisjR3JvdXAgMTUwIHBtX2hwbWNvdW50NCwgSFBNIGdyb3VwIGZvciBzZXQgNworZXZlbnQ6MFg5NjAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1RMQl9NSVNTX0dSUDE1MCA6IChHcm91cCAxNTAgcG1faHBtY291bnQ0KSBUTEIgbWlzc2VzCitldmVudDowWDk2MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlAxNTAgOiAoR3JvdXAgMTUwIHBtX2hwbWNvdW50NCkgUHJvY2Vzc29yIGN5Y2xlcworZXZlbnQ6MFg5NjIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1NUX1JFRl9MMV9HUlAxNTAgOiAoR3JvdXAgMTUwIHBtX2hwbWNvdW50NCkgTDEgRCBjYWNoZSBzdG9yZSByZWZlcmVuY2VzCitldmVudDowWDk2MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTERfUkVGX0wxX0dSUDE1MCA6IChHcm91cCAxNTAgcG1faHBtY291bnQ0KSBMMSBEIGNhY2hlIGxvYWQgcmVmZXJlbmNlcworZXZlbnQ6MFg5NjQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQMTUwIDogKEdyb3VwIDE1MCBwbV9ocG1jb3VudDQpIFJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDk2NSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQMTUwIDogKEdyb3VwIDE1MCBwbV9ocG1jb3VudDQpIFJ1biBjeWNsZXMKKworI0dyb3VwIDE1MSBwbV9mbG9wLCBGbG9hdGluZyBwb2ludCBvcGVyYXRpb25zCitldmVudDowWDk3MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVX0ZESVZfR1JQMTUxIDogKEdyb3VwIDE1MSBwbV9mbG9wKSBGUFUgZXhlY3V0ZWQgRkRJViBpbnN0cnVjdGlvbgorZXZlbnQ6MFg5NzEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVV9GTUFfR1JQMTUxIDogKEdyb3VwIDE1MSBwbV9mbG9wKSBGUFUgZXhlY3V0ZWQgbXVsdGlwbHktYWRkIGluc3RydWN0aW9uCitldmVudDowWDk3MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVX0ZTUVJUX0dSUDE1MSA6IChHcm91cCAxNTEgcG1fZmxvcCkgRlBVIGV4ZWN1dGVkIEZTUVJUIGluc3RydWN0aW9uCitldmVudDowWDk3MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVXzFGTE9QX0dSUDE1MSA6IChHcm91cCAxNTEgcG1fZmxvcCkgRlBVIGV4ZWN1dGVkIG9uZSBmbG9wIGluc3RydWN0aW9uIAorZXZlbnQ6MFg5NzQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQMTUxIDogKEdyb3VwIDE1MSBwbV9mbG9wKSBSdW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFg5NzUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDE1MSA6IChHcm91cCAxNTEgcG1fZmxvcCkgUnVuIGN5Y2xlcworCisjR3JvdXAgMTUyIHBtX2Vwcm9mMSwgR3JvdXAgZm9yIHVzZSB3aXRoIGVwcm9mCitldmVudDowWDk4MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAxNTIgOiAoR3JvdXAgMTUyIHBtX2Vwcm9mMSkgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFg5ODEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQMTUyIDogKEdyb3VwIDE1MiBwbV9lcHJvZjEpIFByb2Nlc3NvciBjeWNsZXMKK2V2ZW50OjBYOTgyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MRF9NSVNTX0wxX0dSUDE1MiA6IChHcm91cCAxNTIgcG1fZXByb2YxKSBMMSBEIGNhY2hlIGxvYWQgbWlzc2VzCitldmVudDowWDk4MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRENfSU5WX0wyX0dSUDE1MiA6IChHcm91cCAxNTIgcG1fZXByb2YxKSBMMSBEIGNhY2hlIGVudHJpZXMgaW52YWxpZGF0ZWQgZnJvbSBMMgorZXZlbnQ6MFg5ODQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQMTUyIDogKEdyb3VwIDE1MiBwbV9lcHJvZjEpIFJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDk4NSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQMTUyIDogKEdyb3VwIDE1MiBwbV9lcHJvZjEpIFJ1biBjeWNsZXMKKworI0dyb3VwIDE1MyBwbV9lcHJvZjIsIEdyb3VwIGZvciB1c2Ugd2l0aCBlcHJvZgorZXZlbnQ6MFg5OTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMTUzIDogKEdyb3VwIDE1MyBwbV9lcHJvZjIpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYOTkxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9TVF9SRUZfTDFfR1JQMTUzIDogKEdyb3VwIDE1MyBwbV9lcHJvZjIpIEwxIEQgY2FjaGUgc3RvcmUgcmVmZXJlbmNlcworZXZlbnQ6MFg5OTIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lOU1RfRElTUF9HUlAxNTMgOiAoR3JvdXAgMTUzIHBtX2Vwcm9mMikgSW5zdHJ1Y3Rpb25zIGRpc3BhdGNoZWQKK2V2ZW50OjBYOTkzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MRF9SRUZfTDFfR1JQMTUzIDogKEdyb3VwIDE1MyBwbV9lcHJvZjIpIEwxIEQgY2FjaGUgbG9hZCByZWZlcmVuY2VzCitldmVudDowWDk5NCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlAxNTMgOiAoR3JvdXAgMTUzIHBtX2Vwcm9mMikgUnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYOTk1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxNTMgOiAoR3JvdXAgMTUzIHBtX2Vwcm9mMikgUnVuIGN5Y2xlcwpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL3BwYzY0L3Bvd2VyNSsvdW5pdF9tYXNrcyBiL29wcm9maWxlLTAuOS43L2V2ZW50cy9wcGM2NC9wb3dlcjUrL3VuaXRfbWFza3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzc5MjFhZQotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2V2ZW50cy9wcGM2NC9wb3dlcjUrL3VuaXRfbWFza3MKQEAgLTAsMCArMSw0IEBACisjIHBwYzY0IFBvd2VyNSsgcG9zc2libGUgdW5pdCBtYXNrcworIworbmFtZTp6ZXJvIHR5cGU6bWFuZGF0b3J5IGRlZmF1bHQ6MHgwCisJMHgwIE5vIHVuaXQgbWFzawpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL3BwYzY0L3Bvd2VyNS9ldmVudF9tYXBwaW5ncyBiL29wcm9maWxlLTAuOS43L2V2ZW50cy9wcGM2NC9wb3dlcjUvZXZlbnRfbWFwcGluZ3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQzYzc3OQotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2V2ZW50cy9wcGM2NC9wb3dlcjUvZXZlbnRfbWFwcGluZ3MKQEAgLTAsMCArMSwxMTkyIEBACisjTWFwcGluZyBvZiBldmVudCBncm91cHMgdG8gTU1DUiB2YWx1ZXMKKworI0dyb3VwIERlZmF1bHQKK2V2ZW50OjBYMDAxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDBBMDIxMjFFIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDAgd2l0aCByYW5kb20gc2FtcGxpbmcKK2V2ZW50OjBYMDAyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MDAwMDAwMDAyMzQxRTM2IG1tY3JhOjBYMDAwMDAwMDEKKworCisjR3JvdXAgMSBwbV91dGlsaXphdGlvbiwgQ1BJIGFuZCB1dGlsaXphdGlvbiBkYXRhCitldmVudDowWDAxMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAwQTAyMTIxRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAxMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAwQTAyMTIxRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAxMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAwQTAyMTIxRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAxMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAwQTAyMTIxRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAxNCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAwQTAyMTIxRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAxNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAwQTAyMTIxRSBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAyIHBtX2NvbXBsZXRpb24sIENvbXBsZXRpb24gYW5kIGN5Y2xlIGNvdW50cworZXZlbnQ6MFgwMjAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMjYwODI2MUUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMjEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMjYwODI2MUUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMjIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMjYwODI2MUUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMjMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMjYwODI2MUUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMjQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMjYwODI2MUUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMjUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMjYwODI2MUUgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMyBwbV9ncm91cF9kaXNwYXRjaCwgR3JvdXAgZGlzcGF0Y2ggZXZlbnRzCitldmVudDowWDAzMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMDAwMEVDNkM4QzIxMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAzMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMDAwMEVDNkM4QzIxMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAzMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMDAwMEVDNkM4QzIxMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAzMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMDAwMEVDNkM4QzIxMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAzNCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMDAwMEVDNkM4QzIxMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAzNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMDAwMEVDNkM4QzIxMiBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCA0IHBtX2NsYjEsIENMQiBmdWxsbmVzcworZXZlbnQ6MFgwNDAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAxNUIwMDAxODA4NDhDNEMgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwNDEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAxNUIwMDAxODA4NDhDNEMgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwNDIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAxNUIwMDAxODA4NDhDNEMgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwNDMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAxNUIwMDAxODA4NDhDNEMgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwNDQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAxNUIwMDAxODA4NDhDNEMgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwNDUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAxNUIwMDAxODA4NDhDNEMgbW1jcmE6MFgwMDAwMDAwMQorCisjR3JvdXAgNSBwbV9jbGIyLCBDTEIgZnVsbG5lc3MKK2V2ZW50OjBYMDUwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMTQzMDAwMjhBOENDQzAyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMDUxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMTQzMDAwMjhBOENDQzAyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMDUyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMTQzMDAwMjhBOENDQzAyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMDUzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMTQzMDAwMjhBOENDQzAyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMDU0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMTQzMDAwMjhBOENDQzAyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMDU1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMTQzMDAwMjhBOENDQzAyIG1tY3JhOjBYMDAwMDAwMDEKKworI0dyb3VwIDYgcG1fZ2N0X2VtcHR5LCBHQ1QgZW1wdHkgcmVhc29ucworZXZlbnQ6MFgwNjAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwMDAwMDAwMDgzODA4MzggbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNjEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwMDAwMDAwMDgzODA4MzggbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNjIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwMDAwMDAwMDgzODA4MzggbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNjMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwMDAwMDAwMDgzODA4MzggbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNjQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwMDAwMDAwMDgzODA4MzggbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNjUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwMDAwMDAwMDgzODA4MzggbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgNyBwbV9nY3RfdXNhZ2UsIEdDVCBVc2FnZQorZXZlbnQ6MFgwNzAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwM0UzRTNFM0UgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNzEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwM0UzRTNFM0UgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNzIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwM0UzRTNFM0UgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNzMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwM0UzRTNFM0UgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNzQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwM0UzRTNFM0UgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNzUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwM0UzRTNFM0UgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgOCBwbV9sc3UxLCBMU1UgTFJRIGFuZCBMTVEgZXZlbnRzCitldmVudDowWDA4MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwRjAwMEZDQ0M0Q0NDQSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA4MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwRjAwMEZDQ0M0Q0NDQSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA4MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwRjAwMEZDQ0M0Q0NDQSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA4MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwRjAwMEZDQ0M0Q0NDQSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA4NCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwRjAwMEZDQ0M0Q0NDQSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA4NSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwRjAwMEZDQ0M0Q0NDQSBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCA5IHBtX2xzdTIsIExTVSBTUlEgZXZlbnRzCitldmVudDowWDA5MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwRTAwMEVDQUMyQ0E4NiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA5MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwRTAwMEVDQUMyQ0E4NiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA5MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwRTAwMEVDQUMyQ0E4NiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA5MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwRTAwMEVDQUMyQ0E4NiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA5NCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwRTAwMEVDQUMyQ0E4NiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA5NSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwRTAwMEVDQUMyQ0E4NiBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxMCBwbV9sc3UzLCBMU1UgU1JRIGFuZCBMTVEgZXZlbnRzCitldmVudDowWDBBMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDEwRjAwMEExMDJBQ0EyQSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBBMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDEwRjAwMEExMDJBQ0EyQSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBBMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDEwRjAwMEExMDJBQ0EyQSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBBMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDEwRjAwMEExMDJBQ0EyQSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBBNCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDEwRjAwMEExMDJBQ0EyQSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBBNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDEwRjAwMEExMDJBQ0EyQSBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxMSBwbV9wcmVmZXRjaDEsIFByZWZldGNoIHN0cmVhbSBhbGxvY2F0aW9uCitldmVudDowWDBCMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYODQzMjAwMEQzNkM4ODRDRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBCMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYODQzMjAwMEQzNkM4ODRDRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBCMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYODQzMjAwMEQzNkM4ODRDRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBCMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYODQzMjAwMEQzNkM4ODRDRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBCNCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYODQzMjAwMEQzNkM4ODRDRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBCNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYODQzMjAwMEQzNkM4ODRDRSBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxMiBwbV9wcmVmZXRjaDIsIFByZWZldGNoIGV2ZW50cworZXZlbnQ6MFgwQzAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDgxMDMwMDA2MDJDQUNFOEUgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwQzEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDgxMDMwMDA2MDJDQUNFOEUgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwQzIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDgxMDMwMDA2MDJDQUNFOEUgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwQzMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDgxMDMwMDA2MDJDQUNFOEUgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwQzQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDgxMDMwMDA2MDJDQUNFOEUgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwQzUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDgxMDMwMDA2MDJDQUNFOEUgbW1jcmE6MFgwMDAwMDAwMQorCisjR3JvdXAgMTMgcG1fcHJlZmV0Y2gzLCBMMiBwcmVmZXRjaCBhbmQgbWlzYyBldmVudHMKK2V2ZW50OjBYMEQwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwNDdDMDAwODIwODI4NjAyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMEQxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwNDdDMDAwODIwODI4NjAyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMEQyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwNDdDMDAwODIwODI4NjAyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMEQzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwNDdDMDAwODIwODI4NjAyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMEQ0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwNDdDMDAwODIwODI4NjAyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMEQ1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwNDdDMDAwODIwODI4NjAyIG1tY3JhOjBYMDAwMDAwMDEKKworI0dyb3VwIDE0IHBtX3ByZWZldGNoNCwgTWlzYyBwcmVmZXRjaCBhbmQgcmVqZWN0IGV2ZW50cworZXZlbnQ6MFgwRTAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDA2M0UwMDBFQzBDOENDODYgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwRTEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDA2M0UwMDBFQzBDOENDODYgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwRTIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDA2M0UwMDBFQzBDOENDODYgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwRTMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDA2M0UwMDBFQzBDOENDODYgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwRTQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDA2M0UwMDBFQzBDOENDODYgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwRTUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDA2M0UwMDBFQzBDOENDODYgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMTUgcG1fbHN1X3JlamVjdDEsIExTVSByZWplY3QgZXZlbnRzCitldmVudDowWDBGMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQzIyQzAwMEUyMDEwQzYxMCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDBGMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQzIyQzAwMEUyMDEwQzYxMCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDBGMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQzIyQzAwMEUyMDEwQzYxMCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDBGMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQzIyQzAwMEUyMDEwQzYxMCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDBGNCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQzIyQzAwMEUyMDEwQzYxMCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDBGNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQzIyQzAwMEUyMDEwQzYxMCBtbWNyYTowWDAwMDAwMDAxCisKKyNHcm91cCAxNiBwbV9sc3VfcmVqZWN0MiwgTFNVIHJlamVjdHMgZHVlIHRvIHJlbG9hZCBDREYgb3IgdGFnIHVwZGF0ZSBjb2xsaXNpb24KK2V2ZW50OjBYMTAwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg4MjBDMDAwREM0Q0MwMkNFIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMTAxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg4MjBDMDAwREM0Q0MwMkNFIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMTAyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg4MjBDMDAwREM0Q0MwMkNFIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMTAzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg4MjBDMDAwREM0Q0MwMkNFIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMTA0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg4MjBDMDAwREM0Q0MwMkNFIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMTA1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg4MjBDMDAwREM0Q0MwMkNFIG1tY3JhOjBYMDAwMDAwMDEKKworI0dyb3VwIDE3IHBtX2xzdV9yZWplY3QzLCBMU1UgcmVqZWN0cyBkdWUgdG8gRVJBVCwgaGVsZCBpbnN0dWN0aW9ucworZXZlbnQ6MFgxMTAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQyMEMwMDBGQzZDRUMwQzggbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgxMTEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQyMEMwMDBGQzZDRUMwQzggbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgxMTIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQyMEMwMDBGQzZDRUMwQzggbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgxMTMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQyMEMwMDBGQzZDRUMwQzggbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgxMTQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQyMEMwMDBGQzZDRUMwQzggbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgxMTUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQyMEMwMDBGQzZDRUMwQzggbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMTggcG1fbHN1X3JlamVjdDQsIExTVTAvMSByZWplY3QgTE1RIGZ1bGwKK2V2ZW50OjBYMTIwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg4MjBDMDAwREMyQ0EwMkM4IG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMTIxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg4MjBDMDAwREMyQ0EwMkM4IG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMTIyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg4MjBDMDAwREMyQ0EwMkM4IG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMTIzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg4MjBDMDAwREMyQ0EwMkM4IG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMTI0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg4MjBDMDAwREMyQ0EwMkM4IG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMTI1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg4MjBDMDAwREMyQ0EwMkM4IG1tY3JhOjBYMDAwMDAwMDEKKworI0dyb3VwIDE5IHBtX2xzdV9yZWplY3Q1LCBMU1UgbWlzYyByZWplY3QgYW5kIGZsdXNoIGV2ZW50cworZXZlbnQ6MFgxMzAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQyMEMwMDBDMTAyMDhBOEUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgxMzEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQyMEMwMDBDMTAyMDhBOEUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgxMzIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQyMEMwMDBDMTAyMDhBOEUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgxMzMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQyMEMwMDBDMTAyMDhBOEUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgxMzQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQyMEMwMDBDMTAyMDhBOEUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgxMzUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQyMEMwMDBDMTAyMDhBOEUgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMjAgcG1fZmx1c2gxLCBNaXNjIGZsdXNoIGV2ZW50cworZXZlbnQ6MFgxNDAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEMwRjAwMDAyMDIxMEM2OEUgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgxNDEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEMwRjAwMDAyMDIxMEM2OEUgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgxNDIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEMwRjAwMDAyMDIxMEM2OEUgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgxNDMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEMwRjAwMDAyMDIxMEM2OEUgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgxNDQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEMwRjAwMDAyMDIxMEM2OEUgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgxNDUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEMwRjAwMDAyMDIxMEM2OEUgbW1jcmE6MFgwMDAwMDAwMQorCisjR3JvdXAgMjEgcG1fZmx1c2gyLCBGbHVzaGVzIGR1ZSB0byBzY29yZWJvYXJkIGFuZCBzeW5jCitldmVudDowWDE1MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQzA4MDAwMDM4MDAyQzRDMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDE1MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQzA4MDAwMDM4MDAyQzRDMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDE1MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQzA4MDAwMDM4MDAyQzRDMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDE1MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQzA4MDAwMDM4MDAyQzRDMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDE1NCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQzA4MDAwMDM4MDAyQzRDMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDE1NSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQzA4MDAwMDM4MDAyQzRDMiBtbWNyYTowWDAwMDAwMDAxCisKKyNHcm91cCAyMiBwbV9sc3VfZmx1c2hfc3JxX2xycSwgTFNVIGZsdXNoIGJ5IFNSUSBhbmQgTFJRIGV2ZW50cworZXZlbnQ6MFgxNjAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwQzAwMDAwMjAyMDAyOEEgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgxNjEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwQzAwMDAwMjAyMDAyOEEgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgxNjIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwQzAwMDAwMjAyMDAyOEEgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgxNjMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwQzAwMDAwMjAyMDAyOEEgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgxNjQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwQzAwMDAwMjAyMDAyOEEgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgxNjUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwQzAwMDAwMjAyMDAyOEEgbW1jcmE6MFgwMDAwMDAwMQorCisjR3JvdXAgMjMgcG1fbHN1X2ZsdXNoX2xycSwgTFNVMC8xIGZsdXNoIGR1ZSB0byBMUlEKK2V2ZW50OjBYMTcwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MEMwMDAwMDg0OEM4QTAyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMTcxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MEMwMDAwMDg0OEM4QTAyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMTcyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MEMwMDAwMDg0OEM4QTAyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMTczIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MEMwMDAwMDg0OEM4QTAyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMTc0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MEMwMDAwMDg0OEM4QTAyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMTc1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MEMwMDAwMDg0OEM4QTAyIG1tY3JhOjBYMDAwMDAwMDEKKworI0dyb3VwIDI0IHBtX2xzdV9mbHVzaF9zcnEsIExTVTAvMSBmbHVzaCBkdWUgdG8gU1JRCitldmVudDowWDE4MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDBDMDAwMDA4NjhFMDI4QSBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDE4MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDBDMDAwMDA4NjhFMDI4QSBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDE4MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDBDMDAwMDA4NjhFMDI4QSBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDE4MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDBDMDAwMDA4NjhFMDI4QSBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDE4NCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDBDMDAwMDA4NjhFMDI4QSBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDE4NSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDBDMDAwMDA4NjhFMDI4QSBtbWNyYTowWDAwMDAwMDAxCisKKyNHcm91cCAyNSBwbV9sc3VfZmx1c2hfdW5hbGlnbmVkLCBMU1UgZmx1c2ggZHVlIHRvIHVuYWxpZ25lZCBkYXRhCitldmVudDowWDE5MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYODBDMDAwMDIxMDEwQzgwMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDE5MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYODBDMDAwMDIxMDEwQzgwMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDE5MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYODBDMDAwMDIxMDEwQzgwMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDE5MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYODBDMDAwMDIxMDEwQzgwMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDE5NCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYODBDMDAwMDIxMDEwQzgwMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDE5NSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYODBDMDAwMDIxMDEwQzgwMiBtbWNyYTowWDAwMDAwMDAxCisKKyNHcm91cCAyNiBwbV9sc3VfZmx1c2hfdWxkLCBMU1UwLzEgZmx1c2ggZHVlIHRvIHVuYWxpZ25lZCBsb2FkCitldmVudDowWDFBMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDBDMDAwMDA4MDg4OEEwMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDFBMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDBDMDAwMDA4MDg4OEEwMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDFBMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDBDMDAwMDA4MDg4OEEwMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDFBMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDBDMDAwMDA4MDg4OEEwMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDFBNCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDBDMDAwMDA4MDg4OEEwMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDFBNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDBDMDAwMDA4MDg4OEEwMiBtbWNyYTowWDAwMDAwMDAxCisKKyNHcm91cCAyNyBwbV9sc3VfZmx1c2hfdXN0LCBMU1UwLzEgZmx1c2ggZHVlIHRvIHVuYWxpZ25lZCBzdG9yZQorZXZlbnQ6MFgxQjAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwQzAwMDAwODI4QTAyOEEgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgxQjEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwQzAwMDAwODI4QTAyOEEgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgxQjIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwQzAwMDAwODI4QTAyOEEgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgxQjMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwQzAwMDAwODI4QTAyOEEgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgxQjQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwQzAwMDAwODI4QTAyOEEgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgxQjUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwQzAwMDAwODI4QTAyOEEgbW1jcmE6MFgwMDAwMDAwMQorCisjR3JvdXAgMjggcG1fbHN1X2ZsdXNoX2Z1bGwsIExTVSBmbHVzaCBkdWUgdG8gTFJRL1NSUSBmdWxsCitldmVudDowWDFDMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQzAyMDAwMDlDRTAyMTBDMCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDFDMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQzAyMDAwMDlDRTAyMTBDMCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDFDMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQzAyMDAwMDlDRTAyMTBDMCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDFDMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQzAyMDAwMDlDRTAyMTBDMCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDFDNCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQzAyMDAwMDlDRTAyMTBDMCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDFDNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQzAyMDAwMDlDRTAyMTBDMCBtbWNyYTowWDAwMDAwMDAxCisKKyNHcm91cCAyOSBwbV9sc3Vfc3RhbGwxLCBMU1UgU3RhbGxzCitldmVudDowWDFEMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMDAwMDAyODMwMDIzNCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDFEMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMDAwMDAyODMwMDIzNCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDFEMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMDAwMDAyODMwMDIzNCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDFEMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMDAwMDAyODMwMDIzNCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDFENCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMDAwMDAyODMwMDIzNCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDFENSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMDAwMDAyODMwMDIzNCBtbWNyYTowWDAwMDAwMDAxCisKKyNHcm91cCAzMCBwbV9sc3Vfc3RhbGwyLCBMU1UgU3RhbGxzCitldmVudDowWDFFMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMDAwMDAwMjM0MUUzNiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDFFMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMDAwMDAwMjM0MUUzNiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDFFMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMDAwMDAwMjM0MUUzNiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDFFMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMDAwMDAwMjM0MUUzNiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDFFNCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMDAwMDAwMjM0MUUzNiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDFFNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMDAwMDAwMjM0MUUzNiBtbWNyYTowWDAwMDAwMDAxCisKKyNHcm91cCAzMSBwbV9meHVfc3RhbGwsIEZYVSBTdGFsbHMKK2V2ZW50OjBYMUYwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MDAwMDAwODIyMzIwMjMyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMUYxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MDAwMDAwODIyMzIwMjMyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMUYyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MDAwMDAwODIyMzIwMjMyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMUYzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MDAwMDAwODIyMzIwMjMyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMUY0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MDAwMDAwODIyMzIwMjMyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMUY1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MDAwMDAwODIyMzIwMjMyIG1tY3JhOjBYMDAwMDAwMDEKKworI0dyb3VwIDMyIHBtX2ZwdV9zdGFsbCwgRlBVIFN0YWxscworZXZlbnQ6MFgyMDAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwMDAwMDAwMjAzNjAyMzAgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgyMDEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwMDAwMDAwMjAzNjAyMzAgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgyMDIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwMDAwMDAwMjAzNjAyMzAgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgyMDMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwMDAwMDAwMjAzNjAyMzAgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgyMDQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwMDAwMDAwMjAzNjAyMzAgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgyMDUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwMDAwMDAwMjAzNjAyMzAgbW1jcmE6MFgwMDAwMDAwMQorCisjR3JvdXAgMzMgcG1fcXVldWVfZnVsbCwgQlJRIExSUSBMTVEgcXVldWUgZnVsbAorZXZlbnQ6MFgyMTAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwMEIwMDA5Q0U4QTg0Q0UgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgyMTEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwMEIwMDA5Q0U4QTg0Q0UgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgyMTIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwMEIwMDA5Q0U4QTg0Q0UgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgyMTMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwMEIwMDA5Q0U4QTg0Q0UgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgyMTQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwMEIwMDA5Q0U4QTg0Q0UgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgyMTUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwMEIwMDA5Q0U4QTg0Q0UgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMzQgcG1faXNzdWVxX2Z1bGwsIEZQVSBGWCBmdWxsCitldmVudDowWDIyMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMDAwMDA4NjhFODA4OCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDIyMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMDAwMDA4NjhFODA4OCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDIyMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMDAwMDA4NjhFODA4OCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDIyMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMDAwMDA4NjhFODA4OCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDIyNCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMDAwMDA4NjhFODA4OCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDIyNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMDAwMDA4NjhFODA4OCBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAzNSBwbV9tYXBwZXJfZnVsbDEsIENSIENUUiBHUFIgbWFwcGVyIGZ1bGwKK2V2ZW50OjBYMjMwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MDAwMDAwMjg4OENDQTgyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMjMxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MDAwMDAwMjg4OENDQTgyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMjMyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MDAwMDAwMjg4OENDQTgyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMjMzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MDAwMDAwMjg4OENDQTgyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMjM0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MDAwMDAwMjg4OENDQTgyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMjM1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MDAwMDAwMjg4OENDQTgyIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDM2IHBtX21hcHBlcl9mdWxsMiwgRlBSIFhFUiBtYXBwZXIgZnVsbAorZXZlbnQ6MFgyNDAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQxMDMwMDAyODI4NDM2MDIgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgyNDEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQxMDMwMDAyODI4NDM2MDIgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgyNDIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQxMDMwMDAyODI4NDM2MDIgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgyNDMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQxMDMwMDAyODI4NDM2MDIgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgyNDQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQxMDMwMDAyODI4NDM2MDIgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgyNDUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQxMDMwMDAyODI4NDM2MDIgbW1jcmE6MFgwMDAwMDAwMQorCisjR3JvdXAgMzcgcG1fbWlzY19sb2FkLCBOb24tY2FjaGFibGUgbG9hZHMgYW5kIHN0Y3ggZXZlbnRzCitldmVudDowWDI1MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDQzODAwMENDMkNBODI4QSBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDI1MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDQzODAwMENDMkNBODI4QSBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDI1MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDQzODAwMENDMkNBODI4QSBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDI1MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDQzODAwMENDMkNBODI4QSBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDI1NCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDQzODAwMENDMkNBODI4QSBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDI1NSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDQzODAwMENDMkNBODI4QSBtbWNyYTowWDAwMDAwMDAxCisKKyNHcm91cCAzOCBwbV9pY19kZW1hbmQsIElDYWNoZSBkZW1hbmQgZnJvbSBCUiByZWRpcmVjdAorZXZlbnQ6MFgyNjAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDgwMEMwMDBGQzZDRUMwQzIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgyNjEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDgwMEMwMDBGQzZDRUMwQzIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgyNjIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDgwMEMwMDBGQzZDRUMwQzIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgyNjMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDgwMEMwMDBGQzZDRUMwQzIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgyNjQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDgwMEMwMDBGQzZDRUMwQzIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgyNjUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDgwMEMwMDBGQzZDRUMwQzIgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMzkgcG1faWNfcHJlZiwgSUNhY2hlIHByZWZldGNoCitldmVudDowWDI3MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYODAwMDAwMENDRUNDOEUxQSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDI3MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYODAwMDAwMENDRUNDOEUxQSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDI3MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYODAwMDAwMENDRUNDOEUxQSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDI3MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYODAwMDAwMENDRUNDOEUxQSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDI3NCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYODAwMDAwMENDRUNDOEUxQSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDI3NSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYODAwMDAwMENDRUNDOEUxQSBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCA0MCBwbV9pY19taXNzLCBJQ2FjaGUgbWlzc2VzCitldmVudDowWDI4MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMzAwMEUzMkNFQzgwMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDI4MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMzAwMEUzMkNFQzgwMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDI4MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMzAwMEUzMkNFQzgwMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDI4MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMzAwMEUzMkNFQzgwMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDI4NCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMzAwMEUzMkNFQzgwMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDI4NSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMzAwMEUzMkNFQzgwMiBtbWNyYTowWDAwMDAwMDAxCisKKyNHcm91cCA0MSBwbV9icmFuY2hfbWlzcywgQnJhbmNoIG1pc3ByZWRpY3QsIFRMQiBhbmQgU0xCIG1pc3NlcworZXZlbnQ6MFgyOTAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDgwODAwMDAzMTAxMENBQ0MgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgyOTEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDgwODAwMDAzMTAxMENBQ0MgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgyOTIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDgwODAwMDAzMTAxMENBQ0MgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgyOTMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDgwODAwMDAzMTAxMENBQ0MgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgyOTQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDgwODAwMDAzMTAxMENBQ0MgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgyOTUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDgwODAwMDAzMTAxMENBQ0MgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgNDIgcG1fYnJhbmNoMSwgQnJhbmNoIG9wZXJhdGlvbnMKK2V2ZW50OjBYMkEwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg4MDAwMDAwMzBFMEUwRTBFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMkExIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg4MDAwMDAwMzBFMEUwRTBFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMkEyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg4MDAwMDAwMzBFMEUwRTBFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMkEzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg4MDAwMDAwMzBFMEUwRTBFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMkE0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg4MDAwMDAwMzBFMEUwRTBFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMkE1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg4MDAwMDAwMzBFMEUwRTBFIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDQzIHBtX2JyYW5jaDIsIEJyYW5jaCBvcGVyYXRpb25zCitldmVudDowWDJCMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMDAwMENDQUNDOEMwMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDJCMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMDAwMENDQUNDOEMwMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDJCMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMDAwMENDQUNDOEMwMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDJCMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMDAwMENDQUNDOEMwMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDJCNCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMDAwMENDQUNDOEMwMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDJCNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMDAwMENDQUNDOEMwMiBtbWNyYTowWDAwMDAwMDAxCisKKyNHcm91cCA0NCBwbV9MMV90bGJtaXNzLCBMMSBsb2FkIGFuZCBUTEIgbWlzc2VzCitldmVudDowWDJDMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDBCMDAwMDA4RTg4MTAyMCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDJDMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDBCMDAwMDA4RTg4MTAyMCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDJDMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDBCMDAwMDA4RTg4MTAyMCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDJDMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDBCMDAwMDA4RTg4MTAyMCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDJDNCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDBCMDAwMDA4RTg4MTAyMCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDJDNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDBCMDAwMDA4RTg4MTAyMCBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCA0NSBwbV9MMV9ERVJBVF9taXNzLCBMMSBzdG9yZSBhbmQgREVSQVQgbWlzc2VzCitldmVudDowWDJEMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDBCMzAwMDAwRTIwMjA4NiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDJEMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDBCMzAwMDAwRTIwMjA4NiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDJEMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDBCMzAwMDAwRTIwMjA4NiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDJEMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDBCMzAwMDAwRTIwMjA4NiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDJENCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDBCMzAwMDAwRTIwMjA4NiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDJENSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDBCMzAwMDAwRTIwMjA4NiBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCA0NiBwbV9MMV9zbGJtaXNzLCBMMSBsb2FkIGFuZCBTTEIgbWlzc2VzCitldmVudDowWDJFMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDBCMDAwMDA4QTgyODQ4QyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDJFMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDBCMDAwMDA4QTgyODQ4QyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDJFMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDBCMDAwMDA4QTgyODQ4QyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDJFMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDBCMDAwMDA4QTgyODQ4QyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDJFNCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDBCMDAwMDA4QTgyODQ4QyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDJFNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDBCMDAwMDA4QTgyODQ4QyBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCA0NyBwbV9MMV9kdGxibWlzc180SywgTDEgbG9hZCByZWZlcmVuY2VzIGFuZCA0SyBEYXRhIFRMQiByZWZlcmVuY2VzIGFuZCBtaXNzZXMKK2V2ZW50OjBYMkYwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwOEYwMDAwMDg0ODA4MDg4IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMkYxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwOEYwMDAwMDg0ODA4MDg4IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMkYyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwOEYwMDAwMDg0ODA4MDg4IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMkYzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwOEYwMDAwMDg0ODA4MDg4IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMkY0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwOEYwMDAwMDg0ODA4MDg4IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMkY1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwOEYwMDAwMDg0ODA4MDg4IG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDQ4IHBtX0wxX2R0bGJtaXNzXzE2TSwgTDEgc3RvcmUgcmVmZXJlbmNlcyBhbmQgMTZNIERhdGEgVExCIHJlZmVyZW5jZXMgYW5kIG1pc3NlcworZXZlbnQ6MFgzMDAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDA4RjAwMDAwOEM4ODgyOEEgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgzMDEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDA4RjAwMDAwOEM4ODgyOEEgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgzMDIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDA4RjAwMDAwOEM4ODgyOEEgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgzMDMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDA4RjAwMDAwOEM4ODgyOEEgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgzMDQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDA4RjAwMDAwOEM4ODgyOEEgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgzMDUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDA4RjAwMDAwOEM4ODgyOEEgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgNDkgcG1fZHNvdXJjZTEsIEwzIGNhY2hlIGFuZCBtZW1vcnkgZGF0YSBhY2Nlc3MKK2V2ZW50OjBYMzEwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MDAzMDAwMDFDMEU4RTAyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMzExIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MDAzMDAwMDFDMEU4RTAyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMzEyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MDAzMDAwMDFDMEU4RTAyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMzEzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MDAzMDAwMDFDMEU4RTAyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMzE0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MDAzMDAwMDFDMEU4RTAyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMzE1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MDAzMDAwMDFDMEU4RTAyIG1tY3JhOjBYMDAwMDAwMDEKKworI0dyb3VwIDUwIHBtX2Rzb3VyY2UyLCBMMyBjYWNoZSBhbmQgbWVtb3J5IGRhdGEgYWNjZXNzCitldmVudDowWDMyMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMzAwMDMxQzBFMzYwRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDMyMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMzAwMDMxQzBFMzYwRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDMyMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMzAwMDMxQzBFMzYwRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDMyMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMzAwMDMxQzBFMzYwRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDMyNCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMzAwMDMxQzBFMzYwRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDMyNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMzAwMDMxQzBFMzYwRSBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCA1MSBwbV9kc291cmNlX0wyLCBMMiBjYWNoZSBkYXRhIGFjY2VzcworZXZlbnQ6MFgzMzAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDMwMDAzMkUyRTJFMkUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgzMzEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDMwMDAzMkUyRTJFMkUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgzMzIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDMwMDAzMkUyRTJFMkUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgzMzMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDMwMDAzMkUyRTJFMkUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgzMzQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDMwMDAzMkUyRTJFMkUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgzMzUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDMwMDAzMkUyRTJFMkUgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgNTIgcG1fZHNvdXJjZV9MMywgTDMgY2FjaGUgZGF0YSBhY2Nlc3MKK2V2ZW50OjBYMzQwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAzMDAwMzNDM0MzQzNDIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMzQxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAzMDAwMzNDM0MzQzNDIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMzQyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAzMDAwMzNDM0MzQzNDIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMzQzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAzMDAwMzNDM0MzQzNDIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMzQ0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAzMDAwMzNDM0MzQzNDIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMzQ1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAzMDAwMzNDM0MzQzNDIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDUzIHBtX2lzb3VyY2UxLCBJbnN0cnVjdGlvbiBzb3VyY2UgaW5mb3JtYXRpb24KK2V2ZW50OjBYMzUwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg4MDAwMDAwQzFBMUExQTBDIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMzUxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg4MDAwMDAwQzFBMUExQTBDIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMzUyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg4MDAwMDAwQzFBMUExQTBDIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMzUzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg4MDAwMDAwQzFBMUExQTBDIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMzU0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg4MDAwMDAwQzFBMUExQTBDIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMzU1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg4MDAwMDAwQzFBMUExQTBDIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDU0IHBtX2lzb3VyY2UyLCBJbnN0cnVjdGlvbiBzb3VyY2UgaW5mb3JtYXRpb24KK2V2ZW50OjBYMzYwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg4MDAwMDAwQzBDMEMwMjFBIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMzYxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg4MDAwMDAwQzBDMEMwMjFBIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMzYyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg4MDAwMDAwQzBDMEMwMjFBIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMzYzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg4MDAwMDAwQzBDMEMwMjFBIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMzY0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg4MDAwMDAwQzBDMEMwMjFBIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMzY1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg4MDAwMDAwQzBDMEMwMjFBIG1tY3JhOjBYMDAwMDAwMDEKKworI0dyb3VwIDU1IHBtX2lzb3VyY2VfTDIsIEwyIGluc3RydWN0aW9uIHNvdXJjZSBpbmZvcm1hdGlvbgorZXZlbnQ6MFgzNzAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDgwMDAwMDBDMkMyQzJDMkMgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgzNzEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDgwMDAwMDBDMkMyQzJDMkMgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgzNzIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDgwMDAwMDBDMkMyQzJDMkMgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgzNzMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDgwMDAwMDBDMkMyQzJDMkMgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgzNzQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDgwMDAwMDBDMkMyQzJDMkMgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgzNzUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDgwMDAwMDBDMkMyQzJDMkMgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgNTYgcG1faXNvdXJjZV9MMywgTDMgaW5zdHJ1Y3Rpb24gc291cmNlIGluZm9ybWF0aW9uCitldmVudDowWDM4MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYODAwMDAwMEMzQTNBM0EzQSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDM4MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYODAwMDAwMEMzQTNBM0EzQSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDM4MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYODAwMDAwMEMzQTNBM0EzQSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDM4MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYODAwMDAwMEMzQTNBM0EzQSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDM4NCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYODAwMDAwMEMzQTNBM0EzQSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDM4NSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYODAwMDAwMEMzQTNBM0EzQSBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCA1NyBwbV9wdGVnX3NvdXJjZTEsIFBURUcgc291cmNlIGluZm9ybWF0aW9uCitldmVudDowWDM5MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMjAwMDMyRTJFMkUyRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDM5MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMjAwMDMyRTJFMkUyRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDM5MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMjAwMDMyRTJFMkUyRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDM5MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMjAwMDMyRTJFMkUyRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDM5NCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMjAwMDMyRTJFMkUyRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDM5NSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMjAwMDMyRTJFMkUyRSBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCA1OCBwbV9wdGVnX3NvdXJjZTIsIFBURUcgc291cmNlIGluZm9ybWF0aW9uCitldmVudDowWDNBMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMjAwMDMzQzNDM0MzQyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDNBMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMjAwMDMzQzNDM0MzQyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDNBMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMjAwMDMzQzNDM0MzQyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDNBMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMjAwMDMzQzNDM0MzQyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDNBNCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMjAwMDMzQzNDM0MzQyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDNBNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMjAwMDMzQzNDM0MzQyBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCA1OSBwbV9wdGVnX3NvdXJjZTMsIFBURUcgc291cmNlIGluZm9ybWF0aW9uCitldmVudDowWDNCMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMjAwMDMwRTBFMzYwRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDNCMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMjAwMDMwRTBFMzYwRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDNCMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMjAwMDMwRTBFMzYwRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDNCMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMjAwMDMwRTBFMzYwRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDNCNCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMjAwMDMwRTBFMzYwRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDNCNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMjAwMDMwRTBFMzYwRSBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCA2MCBwbV9wdGVnX3NvdXJjZTQsIEwzIFBURUcgYW5kIGdyb3VwIGRpc3B0YWNoIGV2ZW50cworZXZlbnQ6MFgzQzAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMzIwMDAwMUMwNDA0OEUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgzQzEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMzIwMDAwMUMwNDA0OEUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgzQzIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMzIwMDAwMUMwNDA0OEUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgzQzMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMzIwMDAwMUMwNDA0OEUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgzQzQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMzIwMDAwMUMwNDA0OEUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgzQzUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMzIwMDAwMUMwNDA0OEUgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgNjEgcG1fTDJTQV9sZCwgTDIgc2xpY2UgQSBsb2FkIGV2ZW50cworZXZlbnQ6MFgzRDAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTU0MDA1ODBDMDgwQzAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgzRDEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTU0MDA1ODBDMDgwQzAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgzRDIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTU0MDA1ODBDMDgwQzAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgzRDMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTU0MDA1ODBDMDgwQzAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgzRDQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTU0MDA1ODBDMDgwQzAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgzRDUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTU0MDA1ODBDMDgwQzAgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgNjIgcG1fTDJTQV9zdCwgTDIgc2xpY2UgQSBzdG9yZSBldmVudHMKK2V2ZW50OjBYM0UwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1ODAwNTgwQzA4MEMwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYM0UxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1ODAwNTgwQzA4MEMwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYM0UyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1ODAwNTgwQzA4MEMwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYM0UzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1ODAwNTgwQzA4MEMwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYM0U0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1ODAwNTgwQzA4MEMwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYM0U1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1ODAwNTgwQzA4MEMwIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDYzIHBtX0wyU0Ffc3QyLCBMMiBzbGljZSBBIHN0b3JlIGV2ZW50cworZXZlbnQ6MFgzRjAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTVDMDA1ODBDMDgwQzAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgzRjEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTVDMDA1ODBDMDgwQzAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgzRjIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTVDMDA1ODBDMDgwQzAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgzRjMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTVDMDA1ODBDMDgwQzAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgzRjQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTVDMDA1ODBDMDgwQzAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgzRjUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTVDMDA1ODBDMDgwQzAgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgNjQgcG1fTDJTQl9sZCwgTDIgc2xpY2UgQiBsb2FkIGV2ZW50cworZXZlbnQ6MFg0MDAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTU0MDA1ODJDMjgyQzIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg0MDEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTU0MDA1ODJDMjgyQzIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg0MDIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTU0MDA1ODJDMjgyQzIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg0MDMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTU0MDA1ODJDMjgyQzIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg0MDQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTU0MDA1ODJDMjgyQzIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg0MDUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTU0MDA1ODJDMjgyQzIgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgNjUgcG1fTDJTQl9zdCwgTDIgc2xpY2UgQiBzdG9yZSBldmVudHMKK2V2ZW50OjBYNDEwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1ODAwNTgyQzI4MkMyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNDExIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1ODAwNTgyQzI4MkMyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNDEyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1ODAwNTgyQzI4MkMyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNDEzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1ODAwNTgyQzI4MkMyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNDE0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1ODAwNTgyQzI4MkMyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNDE1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1ODAwNTgyQzI4MkMyIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDY2IHBtX0wyU0Jfc3QyLCBMMiBzbGljZSBCIHN0b3JlIGV2ZW50cworZXZlbnQ6MFg0MjAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTVDMDA1ODJDMjgyQzIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg0MjEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTVDMDA1ODJDMjgyQzIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg0MjIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTVDMDA1ODJDMjgyQzIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg0MjMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTVDMDA1ODJDMjgyQzIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg0MjQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTVDMDA1ODJDMjgyQzIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg0MjUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTVDMDA1ODJDMjgyQzIgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgNjcgcG1fTDJTQl9sZCwgTDIgc2xpY2UgQyBsb2FkIGV2ZW50cworZXZlbnQ6MFg0MzAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTU0MDA1ODRDNDg0QzQgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg0MzEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTU0MDA1ODRDNDg0QzQgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg0MzIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTU0MDA1ODRDNDg0QzQgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg0MzMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTU0MDA1ODRDNDg0QzQgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg0MzQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTU0MDA1ODRDNDg0QzQgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg0MzUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTU0MDA1ODRDNDg0QzQgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgNjggcG1fTDJTQl9zdCwgTDIgc2xpY2UgQyBzdG9yZSBldmVudHMKK2V2ZW50OjBYNDQwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1ODAwNTg0QzQ4NEM0IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNDQxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1ODAwNTg0QzQ4NEM0IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNDQyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1ODAwNTg0QzQ4NEM0IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNDQzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1ODAwNTg0QzQ4NEM0IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNDQ0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1ODAwNTg0QzQ4NEM0IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNDQ1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1ODAwNTg0QzQ4NEM0IG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDY5IHBtX0wyU0Jfc3QyLCBMMiBzbGljZSBDIHN0b3JlIGV2ZW50cworZXZlbnQ6MFg0NTAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTVDMDA1ODRDNDg0QzQgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg0NTEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTVDMDA1ODRDNDg0QzQgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg0NTIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTVDMDA1ODRDNDg0QzQgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg0NTMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTVDMDA1ODRDNDg0QzQgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg0NTQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTVDMDA1ODRDNDg0QzQgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg0NTUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTVDMDA1ODRDNDg0QzQgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgNzAgcG1fTDNTQV90cmFucywgTDMgc2xpY2UgQSBzdGF0ZSB0cmFuc2lzdGlvbnMKK2V2ZW50OjBYNDYwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDE1MDAwQUM2MDJDNjg2IG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYNDYxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDE1MDAwQUM2MDJDNjg2IG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYNDYyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDE1MDAwQUM2MDJDNjg2IG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYNDYzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDE1MDAwQUM2MDJDNjg2IG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYNDY0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDE1MDAwQUM2MDJDNjg2IG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYNDY1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDE1MDAwQUM2MDJDNjg2IG1tY3JhOjBYMDAwMDAwMDEKKworI0dyb3VwIDcxIHBtX0wzU0JfdHJhbnMsIEwzIHNsaWNlIEIgc3RhdGUgdHJhbnNpc3Rpb25zCitldmVudDowWDQ3MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzAxNTAwMDYwMkM4Qzg4OCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDQ3MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzAxNTAwMDYwMkM4Qzg4OCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDQ3MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzAxNTAwMDYwMkM4Qzg4OCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDQ3MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzAxNTAwMDYwMkM4Qzg4OCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDQ3NCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzAxNTAwMDYwMkM4Qzg4OCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDQ3NSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzAxNTAwMDYwMkM4Qzg4OCBtbWNyYTowWDAwMDAwMDAxCisKKyNHcm91cCA3MiBwbV9MM1NDX3RyYW5zLCBMMyBzbGljZSBDIHN0YXRlIHRyYW5zaXN0aW9ucworZXZlbnQ6MFg0ODAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwMTUwMDA2MDJDQUNBOEEgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg0ODEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwMTUwMDA2MDJDQUNBOEEgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg0ODIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwMTUwMDA2MDJDQUNBOEEgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg0ODMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwMTUwMDA2MDJDQUNBOEEgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg0ODQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwMTUwMDA2MDJDQUNBOEEgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg0ODUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwMTUwMDA2MDJDQUNBOEEgbW1jcmE6MFgwMDAwMDAwMQorCisjR3JvdXAgNzMgcG1fTDJTQV90cmFucywgTDIgc2xpY2UgQSBzdGF0ZSB0cmFuc2lzdGlvbnMKK2V2ZW50OjBYNDkwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1MDAwQUMwODBDMDgwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNDkxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1MDAwQUMwODBDMDgwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNDkyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1MDAwQUMwODBDMDgwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNDkzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1MDAwQUMwODBDMDgwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNDk0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1MDAwQUMwODBDMDgwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNDk1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1MDAwQUMwODBDMDgwIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDc0IHBtX0wyU0JfdHJhbnMsIEwyIHNsaWNlIEIgc3RhdGUgdHJhbnNpc3Rpb25zCitldmVudDowWDRBMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzA1NTAwMEFDMjgyQzI4MiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDRBMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzA1NTAwMEFDMjgyQzI4MiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDRBMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzA1NTAwMEFDMjgyQzI4MiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDRBMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzA1NTAwMEFDMjgyQzI4MiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDRBNCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzA1NTAwMEFDMjgyQzI4MiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDRBNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzA1NTAwMEFDMjgyQzI4MiBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCA3NSBwbV9MMlNDX3RyYW5zLCBMMiBzbGljZSBDIHN0YXRlIHRyYW5zaXN0aW9ucworZXZlbnQ6MFg0QjAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTUwMDBBQzQ4NEM0ODQgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg0QjEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTUwMDBBQzQ4NEM0ODQgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg0QjIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTUwMDBBQzQ4NEM0ODQgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg0QjMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTUwMDBBQzQ4NEM0ODQgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg0QjQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTUwMDBBQzQ4NEM0ODQgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg0QjUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTUwMDBBQzQ4NEM0ODQgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgNzYgcG1fTDNTQUJfcmV0cnksIEwzIHNsaWNlIEEvQiBzbm9vcCByZXRyeSBhbmQgYWxsIENJL0NPIGJ1c3kKK2V2ZW50OjBYNEMwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDA1MTAwRkM2QzhDNkM4IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNEMxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDA1MTAwRkM2QzhDNkM4IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNEMyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDA1MTAwRkM2QzhDNkM4IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNEMzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDA1MTAwRkM2QzhDNkM4IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNEM0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDA1MTAwRkM2QzhDNkM4IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNEM1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDA1MTAwRkM2QzhDNkM4IG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDc3IHBtX0wzU0FCX2hpdCwgTDMgc2xpY2UgQS9CIGhpdCBhbmQgcmVmZXJlbmNlCitldmVudDowWDREMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzA1MDEwMDA4Njg4ODY4OCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDREMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzA1MDEwMDA4Njg4ODY4OCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDREMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzA1MDEwMDA4Njg4ODY4OCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDREMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzA1MDEwMDA4Njg4ODY4OCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDRENCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzA1MDEwMDA4Njg4ODY4OCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDRENSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzA1MDEwMDA4Njg4ODY4OCBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCA3OCBwbV9MM1NDX3JldHJ5X2hpdCwgTDMgc2xpY2UgQyBoaXQgJiBzbm9vcCByZXRyeQorZXZlbnQ6MFg0RTAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTUxMDBBQ0E4QUNBOEEgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg0RTEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTUxMDBBQ0E4QUNBOEEgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg0RTIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTUxMDBBQ0E4QUNBOEEgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg0RTMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTUxMDBBQ0E4QUNBOEEgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg0RTQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTUxMDBBQ0E4QUNBOEEgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg0RTUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTUxMDBBQ0E4QUNBOEEgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgNzkgcG1fZnB1MSwgRmxvYXRpbmcgUG9pbnQgZXZlbnRzCitldmVudDowWDRGMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAxMDEwMTAyMCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDRGMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAxMDEwMTAyMCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDRGMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAxMDEwMTAyMCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDRGMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAxMDEwMTAyMCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDRGNCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAxMDEwMTAyMCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDRGNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAxMDEwMTAyMCBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCA4MCBwbV9mcHUyLCBGbG9hdGluZyBQb2ludCBldmVudHMKK2V2ZW50OjBYNTAwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDIwMjAyMDEwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNTAxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDIwMjAyMDEwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNTAyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDIwMjAyMDEwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNTAzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDIwMjAyMDEwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNTA0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDIwMjAyMDEwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNTA1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDIwMjAyMDEwIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDgxIHBtX2ZwdTMsIEZsb2F0aW5nIHBvaW50IGV2ZW50cworZXZlbnQ6MFg1MTAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDBDMTAxMDg2OEUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg1MTEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDBDMTAxMDg2OEUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg1MTIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDBDMTAxMDg2OEUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg1MTMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDBDMTAxMDg2OEUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg1MTQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDBDMTAxMDg2OEUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg1MTUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDBDMTAxMDg2OEUgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgODIgcG1fZnB1NCwgRmxvYXRpbmcgcG9pbnQgZXZlbnRzCitldmVudDowWDUyMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDQzMDAwMEMyMDIwMDIyMCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDUyMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDQzMDAwMEMyMDIwMDIyMCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDUyMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDQzMDAwMEMyMDIwMDIyMCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDUyMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDQzMDAwMEMyMDIwMDIyMCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDUyNCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDQzMDAwMEMyMDIwMDIyMCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDUyNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDQzMDAwMEMyMDIwMDIyMCBtbWNyYTowWDAwMDAwMDAxCisKKyNHcm91cCA4MyBwbV9mcHU1LCBGbG9hdGluZyBwb2ludCBldmVudHMgYnkgdW5pdAorZXZlbnQ6MFg1MzAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwODQ4Qzg0OEMgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg1MzEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwODQ4Qzg0OEMgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg1MzIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwODQ4Qzg0OEMgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg1MzMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwODQ4Qzg0OEMgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg1MzQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwODQ4Qzg0OEMgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg1MzUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwODQ4Qzg0OEMgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgODQgcG1fZnB1NiwgRmxvYXRpbmcgcG9pbnQgZXZlbnRzIGJ5IHVuaXQKK2V2ZW50OjBYNTQwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwQ0MwQzg4MDg4IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNTQxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwQ0MwQzg4MDg4IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNTQyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwQ0MwQzg4MDg4IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNTQzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwQ0MwQzg4MDg4IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNTQ0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwQ0MwQzg4MDg4IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNTQ1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwQ0MwQzg4MDg4IG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDg1IHBtX2ZwdTcsIEZsb2F0aW5nIHBvaW50IGV2ZW50cyBieSB1bml0CitldmVudDowWDU1MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDA4MDg4ODI4QSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDU1MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDA4MDg4ODI4QSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDU1MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDA4MDg4ODI4QSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDU1MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDA4MDg4ODI4QSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDU1NCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDA4MDg4ODI4QSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDU1NSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDA4MDg4ODI4QSBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCA4NiBwbV9mcHU4LCBGbG9hdGluZyBwb2ludCBldmVudHMgYnkgdW5pdAorZXZlbnQ6MFg1NjAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDBEQzJDQTAyQzAgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg1NjEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDBEQzJDQTAyQzAgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg1NjIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDBEQzJDQTAyQzAgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg1NjMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDBEQzJDQTAyQzAgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg1NjQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDBEQzJDQTAyQzAgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg1NjUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDBEQzJDQTAyQzAgbW1jcmE6MFgwMDAwMDAwMQorCisjR3JvdXAgODcgcG1fZnB1OSwgRmxvYXRpbmcgcG9pbnQgZXZlbnRzIGJ5IHVuaXQKK2V2ZW50OjBYNTcwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwNDMwMDAwQ0M2Q0U4MDg4IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNTcxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwNDMwMDAwQ0M2Q0U4MDg4IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNTcyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwNDMwMDAwQ0M2Q0U4MDg4IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNTczIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwNDMwMDAwQ0M2Q0U4MDg4IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNTc0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwNDMwMDAwQ0M2Q0U4MDg4IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNTc1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwNDMwMDAwQ0M2Q0U4MDg4IG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDg4IHBtX2ZwdTEwLCBGbG9hdGluZyBwb2ludCBldmVudHMgYnkgdW5pdAorZXZlbnQ6MFg1ODAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwODI4QTAyOEEgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg1ODEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwODI4QTAyOEEgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg1ODIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwODI4QTAyOEEgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg1ODMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwODI4QTAyOEEgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg1ODQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwODI4QTAyOEEgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg1ODUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwODI4QTAyOEEgbW1jcmE6MFgwMDAwMDAwMQorCisjR3JvdXAgODkgcG1fZnB1MTEsIEZsb2F0aW5nIHBvaW50IGV2ZW50cyBieSB1bml0CitldmVudDowWDU5MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDA4NjhFODYwMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDU5MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDA4NjhFODYwMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDU5MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDA4NjhFODYwMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDU5MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDA4NjhFODYwMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDU5NCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDA4NjhFODYwMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDU5NSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDA4NjhFODYwMiBtbWNyYTowWDAwMDAwMDAxCisKKyNHcm91cCA5MCBwbV9mcHUxMiwgRmxvYXRpbmcgcG9pbnQgZXZlbnRzIGJ5IHVuaXQKK2V2ZW50OjBYNUEwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwNDMwMDAwQ0M0Q0M4MDAyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYNUExIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwNDMwMDAwQ0M0Q0M4MDAyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYNUEyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwNDMwMDAwQ0M0Q0M4MDAyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYNUEzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwNDMwMDAwQ0M0Q0M4MDAyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYNUE0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwNDMwMDAwQ0M0Q0M4MDAyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYNUE1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwNDMwMDAwQ0M0Q0M4MDAyIG1tY3JhOjBYMDAwMDAwMDEKKworI0dyb3VwIDkxIHBtX2Z4dTEsIEZpeGVkIFBvaW50IGV2ZW50cworZXZlbnQ6MFg1QjAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMjQyNDI0MjQgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg1QjEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMjQyNDI0MjQgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg1QjIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMjQyNDI0MjQgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg1QjMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMjQyNDI0MjQgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg1QjQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMjQyNDI0MjQgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg1QjUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMjQyNDI0MjQgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgOTIgcG1fZnh1MiwgRml4ZWQgUG9pbnQgZXZlbnRzCitldmVudDowWDVDMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMDAwMDYwNDIyMTAyMCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDVDMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMDAwMDYwNDIyMTAyMCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDVDMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMDAwMDYwNDIyMTAyMCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDVDMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMDAwMDYwNDIyMTAyMCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDVDNCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMDAwMDYwNDIyMTAyMCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDVDNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMDAwMDYwNDIyMTAyMCBtbWNyYTowWDAwMDAwMDAxCisKKyNHcm91cCA5MyBwbV9meHUzLCBGaXhlZCBQb2ludCBldmVudHMKK2V2ZW50OjBYNUQwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MDQwMDAwMzg2ODhDNENDIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNUQxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MDQwMDAwMzg2ODhDNENDIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNUQyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MDQwMDAwMzg2ODhDNENDIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNUQzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MDQwMDAwMzg2ODhDNENDIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNUQ0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MDQwMDAwMzg2ODhDNENDIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNUQ1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MDQwMDAwMzg2ODhDNENDIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDk0IHBtX3NtdF9wcmlvcml0aWVzMSwgVGhyZWFkIHByaW9yaXR5IGV2ZW50cworZXZlbnQ6MFg1RTAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDUwMDBGQzZDQ0M2QzggbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg1RTEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDUwMDBGQzZDQ0M2QzggbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg1RTIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDUwMDBGQzZDQ0M2QzggbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg1RTMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDUwMDBGQzZDQ0M2QzggbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg1RTQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDUwMDBGQzZDQ0M2QzggbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg1RTUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDUwMDBGQzZDQ0M2QzggbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgOTUgcG1fc210X3ByaW9yaXRpZXMyLCBUaHJlYWQgcHJpb3JpdHkgZXZlbnRzCitldmVudDowWDVGMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwNTAwMEZDNENBQ0FDQyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDVGMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwNTAwMEZDNENBQ0FDQyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDVGMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwNTAwMEZDNENBQ0FDQyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDVGMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwNTAwMEZDNENBQ0FDQyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDVGNCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwNTAwMEZDNENBQ0FDQyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDVGNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwNTAwMEZDNENBQ0FDQyBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCA5NiBwbV9zbXRfcHJpb3JpdGllczMsIFRocmVhZCBwcmlvcml0eSBldmVudHMKK2V2ZW50OjBYNjAwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDA1MDAwRkMyQzhDNEMyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNjAxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDA1MDAwRkMyQzhDNEMyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNjAyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDA1MDAwRkMyQzhDNEMyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNjAzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDA1MDAwRkMyQzhDNEMyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNjA0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDA1MDAwRkMyQzhDNEMyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNjA1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDA1MDAwRkMyQzhDNEMyIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDk3IHBtX3NtdF9wcmlvcml0aWVzNCwgVGhyZWFkIHByaW9yaXR5IGV2ZW50cworZXZlbnQ6MFg2MTAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDUwMDBBQzAxNkMwMDIgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg2MTEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDUwMDBBQzAxNkMwMDIgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg2MTIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDUwMDBBQzAxNkMwMDIgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg2MTMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDUwMDBBQzAxNkMwMDIgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg2MTQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDUwMDBBQzAxNkMwMDIgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg2MTUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDUwMDBBQzAxNkMwMDIgbW1jcmE6MFgwMDAwMDAwMQorCisjR3JvdXAgOTggcG1fc210X2JvdGgsIFRocmVhZCBjb21tb24gZXZlbnRzCitldmVudDowWDYyMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAxMDAwMDAxNjI2MDIwOCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDYyMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAxMDAwMDAxNjI2MDIwOCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDYyMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAxMDAwMDAxNjI2MDIwOCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDYyMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAxMDAwMDAxNjI2MDIwOCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDYyNCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAxMDAwMDAxNjI2MDIwOCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDYyNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAxMDAwMDAxNjI2MDIwOCBtbWNyYTowWDAwMDAwMDAxCisKKyNHcm91cCA5OSBwbV9zbXRfc2VsZWN0aW9uLCBUaHJlYWQgc2VsZWN0aW9uCitldmVudDowWDYzMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDA5MDAwMDA4NjAyODA4MiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDYzMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDA5MDAwMDA4NjAyODA4MiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDYzMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDA5MDAwMDA4NjAyODA4MiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDYzMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDA5MDAwMDA4NjAyODA4MiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDYzNCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDA5MDAwMDA4NjAyODA4MiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDYzNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDA5MDAwMDA4NjAyODA4MiBtbWNyYTowWDAwMDAwMDAxCisKKyNHcm91cCAxMDAgcG1fc210X3NlbGVjdG92ZXIxLCBUaHJlYWQgc2VsZWN0aW9uIG92ZXJpZGUKK2V2ZW50OjBYNjQwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDUwMDAwMDAyODA4NDg4IG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYNjQxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDUwMDAwMDAyODA4NDg4IG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYNjQyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDUwMDAwMDAyODA4NDg4IG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYNjQzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDUwMDAwMDAyODA4NDg4IG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYNjQ0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDUwMDAwMDAyODA4NDg4IG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYNjQ1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDUwMDAwMDAyODA4NDg4IG1tY3JhOjBYMDAwMDAwMDEKKworI0dyb3VwIDEwMSBwbV9zbXRfc2VsZWN0b3ZlcjIsIFRocmVhZCBzZWxlY3Rpb24gb3ZlcmlkZQorZXZlbnQ6MFg2NTAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMTAwMDAwMDIxRThBODYgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg2NTEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMTAwMDAwMDIxRThBODYgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg2NTIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMTAwMDAwMDIxRThBODYgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg2NTMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMTAwMDAwMDIxRThBODYgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg2NTQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMTAwMDAwMDIxRThBODYgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg2NTUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMTAwMDAwMDIxRThBODYgbW1jcmE6MFgwMDAwMDAwMQorCisjR3JvdXAgMTAyIHBtX2ZhYnJpYzEsIEZhYnJpYyBldmVudHMKK2V2ZW50OjBYNjYwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1MDAwNThFQ0U4RUNFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNjYxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1MDAwNThFQ0U4RUNFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNjYyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1MDAwNThFQ0U4RUNFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNjYzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1MDAwNThFQ0U4RUNFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNjY0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1MDAwNThFQ0U4RUNFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNjY1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1MDAwNThFQ0U4RUNFIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDEwMyBwbV9mYWJyaWMyLCBGYWJyaWMgZGF0YSBtb3ZlbWVudAorZXZlbnQ6MFg2NzAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTUwMDg1OEVDRThFQ0UgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg2NzEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTUwMDg1OEVDRThFQ0UgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg2NzIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTUwMDg1OEVDRThFQ0UgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg2NzMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTUwMDg1OEVDRThFQ0UgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg2NzQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTUwMDg1OEVDRThFQ0UgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg2NzUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTUwMDg1OEVDRThFQ0UgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMTA0IHBtX2ZhYnJpYzMsIEZhYnJpYyBkYXRhIG1vdmVtZW50CitldmVudDowWDY4MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzA1NTAxODU4RUNFOEVDRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDY4MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzA1NTAxODU4RUNFOEVDRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDY4MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzA1NTAxODU4RUNFOEVDRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDY4MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzA1NTAxODU4RUNFOEVDRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDY4NCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzA1NTAxODU4RUNFOEVDRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDY4NSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzA1NTAxODU4RUNFOEVDRSBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxMDUgcG1fZmFicmljNCwgRmFicmljIGRhdGEgbW92ZW1lbnQKK2V2ZW50OjBYNjkwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg3MDU0MDEwNjhFQ0VDNjhFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNjkxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg3MDU0MDEwNjhFQ0VDNjhFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNjkyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg3MDU0MDEwNjhFQ0VDNjhFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNjkzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg3MDU0MDEwNjhFQ0VDNjhFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNjk0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg3MDU0MDEwNjhFQ0VDNjhFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNjk1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg3MDU0MDEwNjhFQ0VDNjhFIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDEwNiBwbV9zbm9vcDEsIFNub29wIHJldHJ5CitldmVudDowWDZBMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzA1NTAwMDU4Q0NDOENDQyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDZBMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzA1NTAwMDU4Q0NDOENDQyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDZBMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzA1NTAwMDU4Q0NDOENDQyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDZBMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzA1NTAwMDU4Q0NDOENDQyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDZBNCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzA1NTAwMDU4Q0NDOENDQyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDZBNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzA1NTAwMDU4Q0NDOENDQyBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxMDcgcG1fc25vb3AyLCBTbm9vcCByZWFkIHJldHJ5CitldmVudDowWDZCMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzA1NDBBMDQ4Q0NDOEMwMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDZCMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzA1NDBBMDQ4Q0NDOEMwMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDZCMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzA1NDBBMDQ4Q0NDOEMwMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDZCMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzA1NDBBMDQ4Q0NDOEMwMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDZCNCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzA1NDBBMDQ4Q0NDOEMwMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDZCNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzA1NDBBMDQ4Q0NDOEMwMiBtbWNyYTowWDAwMDAwMDAxCisKKyNHcm91cCAxMDggcG1fc25vb3AzLCBTbm9vcCB3cml0ZSByZXRyeQorZXZlbnQ6MFg2QzAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTUwQzA1OENDQzhDQ0MgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg2QzEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTUwQzA1OENDQzhDQ0MgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg2QzIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTUwQzA1OENDQzhDQ0MgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg2QzMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTUwQzA1OENDQzhDQ0MgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg2QzQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTUwQzA1OENDQzhDQ0MgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg2QzUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTUwQzA1OENDQzhDQ0MgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMTA5IHBtX3Nub29wNCwgU25vb3AgcGFydGlhbCB3cml0ZSByZXRyeQorZXZlbnQ6MFg2RDAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTUwRTA1OENDQzhDQ0MgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg2RDEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTUwRTA1OENDQzhDQ0MgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg2RDIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTUwRTA1OENDQzhDQ0MgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg2RDMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTUwRTA1OENDQzhDQ0MgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg2RDQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTUwRTA1OENDQzhDQ0MgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg2RDUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTUwRTA1OENDQzhDQ0MgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMTEwIHBtX21lbV9ycSwgTWVtb3J5IHJlYWQgcXVldWUgZGlzcGF0Y2gKK2V2ZW50OjBYNkUwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg3MDU0MDIwNThDQ0M4Q0NFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNkUxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg3MDU0MDIwNThDQ0M4Q0NFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNkUyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg3MDU0MDIwNThDQ0M4Q0NFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNkUzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg3MDU0MDIwNThDQ0M4Q0NFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNkU0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg3MDU0MDIwNThDQ0M4Q0NFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNkU1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg3MDU0MDIwNThDQ0M4Q0NFIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDExMSBwbV9tZW1fcmVhZCwgTWVtb3J5IHJlYWQgY29tcGxldGUgYW5kIGNhbmNlbAorZXZlbnQ6MFg2RjAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTQwNDA0OENDQzhDMDYgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg2RjEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTQwNDA0OENDQzhDMDYgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg2RjIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTQwNDA0OENDQzhDMDYgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg2RjMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTQwNDA0OENDQzhDMDYgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg2RjQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTQwNDA0OENDQzhDMDYgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg2RjUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwNTQwNDA0OENDQzhDMDYgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMTEyIHBtX21lbV93cSwgTWVtb3J5IHdyaXRlIHF1ZXVlIGRpc3BhdGNoCitldmVudDowWDcwMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzA1NTA2MDU4Q0NDOENDQyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDcwMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzA1NTA2MDU4Q0NDOENDQyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDcwMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzA1NTA2MDU4Q0NDOENDQyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDcwMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzA1NTA2MDU4Q0NDOENDQyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDcwNCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzA1NTA2MDU4Q0NDOENDQyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDcwNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzA1NTA2MDU4Q0NDOENDQyBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxMTMgcG1fbWVtX3B3cSwgTWVtb3J5IHBhcnRpYWwgd3JpdGUgcXVldWUKK2V2ZW50OjBYNzEwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1MDgwNThDQ0M4Q0NDIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNzExIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1MDgwNThDQ0M4Q0NDIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNzEyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1MDgwNThDQ0M4Q0NDIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNzEzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1MDgwNThDQ0M4Q0NDIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNzE0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1MDgwNThDQ0M4Q0NDIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYNzE1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDU1MDgwNThDQ0M4Q0NDIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDExNCBwbV90aHJlc2hvbGQsIFRocmVzaG9sZGluZworZXZlbnQ6MFg3MjAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDgwMDA0MDRDNDE2MjggbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg3MjEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDgwMDA0MDRDNDE2MjggbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg3MjIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDgwMDA0MDRDNDE2MjggbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg3MjMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDgwMDA0MDRDNDE2MjggbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg3MjQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDgwMDA0MDRDNDE2MjggbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg3MjUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDgwMDA0MDRDNDE2MjggbW1jcmE6MFgwMDAwMDAwMQorCisjR3JvdXAgMTE1IHBtX21ya19ncnAxLCBNYXJrZWQgZ3JvdXAgZXZlbnRzCitldmVudDowWDczMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwODAwMDQwNEM2MEEyNiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDczMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwODAwMDQwNEM2MEEyNiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDczMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwODAwMDQwNEM2MEEyNiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDczMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwODAwMDQwNEM2MEEyNiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDczNCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwODAwMDQwNEM2MEEyNiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDczNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwODAwMDQwNEM2MEEyNiBtbWNyYTowWDAwMDAwMDAxCisKKyNHcm91cCAxMTYgcG1fbXJrX2dycDIsIE1hcmtlZCBncm91cCBldmVudHMKK2V2ZW50OjBYNzQwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MTAzMDAwMjJBMEFDODIyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYNzQxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MTAzMDAwMjJBMEFDODIyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYNzQyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MTAzMDAwMjJBMEFDODIyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYNzQzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MTAzMDAwMjJBMEFDODIyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYNzQ0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MTAzMDAwMjJBMEFDODIyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYNzQ1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MTAzMDAwMjJBMEFDODIyIG1tY3JhOjBYMDAwMDAwMDEKKworI0dyb3VwIDExNyBwbV9tcmtfZHNvdXJjZTEsIE1hcmtlZCBkYXRhIGZyb20gCitldmVudDowWDc1MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDEwQjAwMDMwRTQwNDQ0NCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDc1MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDEwQjAwMDMwRTQwNDQ0NCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDc1MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDEwQjAwMDMwRTQwNDQ0NCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDc1MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDEwQjAwMDMwRTQwNDQ0NCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDc1NCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDEwQjAwMDMwRTQwNDQ0NCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDc1NSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDEwQjAwMDMwRTQwNDQ0NCBtbWNyYTowWDAwMDAwMDAxCisKKyNHcm91cCAxMTggcG1fbXJrX2Rzb3VyY2UyLCBNYXJrZWQgZGF0YSBmcm9tCitldmVudDowWDc2MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDEwQjAwMDAyRTQ0MDIxMCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDc2MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDEwQjAwMDAyRTQ0MDIxMCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDc2MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDEwQjAwMDAyRTQ0MDIxMCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDc2MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDEwQjAwMDAyRTQ0MDIxMCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDc2NCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDEwQjAwMDAyRTQ0MDIxMCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDc2NSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDEwQjAwMDAyRTQ0MDIxMCBtbWNyYTowWDAwMDAwMDAxCisKKyNHcm91cCAxMTkgcG1fbXJrX2Rzb3VyY2UzLCBNYXJrZWQgZGF0YSBmcm9tCitldmVudDowWDc3MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDEwQjAwMDMxQzQ4NEM0QyBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDc3MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDEwQjAwMDMxQzQ4NEM0QyBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDc3MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDEwQjAwMDMxQzQ4NEM0QyBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDc3MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDEwQjAwMDMxQzQ4NEM0QyBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDc3NCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDEwQjAwMDMxQzQ4NEM0QyBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDc3NSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDEwQjAwMDMxQzQ4NEM0QyBtbWNyYTowWDAwMDAwMDAxCisKKyNHcm91cCAxMjAgcG1fbXJrX2Rzb3VyY2U0LCBNYXJrZWQgZGF0YSBmcm9tCitldmVudDowWDc4MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDEwQjAwMDM0MjQ2MkU0MiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDc4MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDEwQjAwMDM0MjQ2MkU0MiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDc4MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDEwQjAwMDM0MjQ2MkU0MiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDc4MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDEwQjAwMDM0MjQ2MkU0MiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDc4NCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDEwQjAwMDM0MjQ2MkU0MiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDc4NSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDEwQjAwMDM0MjQ2MkU0MiBtbWNyYTowWDAwMDAwMDAxCisKKyNHcm91cCAxMjEgcG1fbXJrX2Rzb3VyY2U1LCBNYXJrZWQgZGF0YSBmcm9tCitldmVudDowWDc5MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDEwQjAwMDMzQzRDNDA0MCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDc5MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDEwQjAwMDMzQzRDNDA0MCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDc5MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDEwQjAwMDMzQzRDNDA0MCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDc5MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDEwQjAwMDMzQzRDNDA0MCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDc5NCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDEwQjAwMDMzQzRDNDA0MCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDc5NSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDEwQjAwMDMzQzRDNDA0MCBtbWNyYTowWDAwMDAwMDAxCisKKyNHcm91cCAxMjIgcG1fbXJrX2Rzb3VyY2U2LCBNYXJrZWQgZGF0YSBmcm9tCitldmVudDowWDdBMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDEwQjAwMDE0NjQ2MDI0NiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDdBMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDEwQjAwMDE0NjQ2MDI0NiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDdBMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDEwQjAwMDE0NjQ2MDI0NiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDdBMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDEwQjAwMDE0NjQ2MDI0NiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDdBNCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDEwQjAwMDE0NjQ2MDI0NiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDdBNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDEwQjAwMDE0NjQ2MDI0NiBtbWNyYTowWDAwMDAwMDAxCisKKyNHcm91cCAxMjMgcG1fbXJrX2Rzb3VyY2U3LCBNYXJrZWQgZGF0YSBmcm9tCitldmVudDowWDdCMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDEwQjAwMDM0RTRFM0M0RSBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDdCMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDEwQjAwMDM0RTRFM0M0RSBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDdCMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDEwQjAwMDM0RTRFM0M0RSBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDdCMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDEwQjAwMDM0RTRFM0M0RSBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDdCNCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDEwQjAwMDM0RTRFM0M0RSBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDdCNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDEwQjAwMDM0RTRFM0M0RSBtbWNyYTowWDAwMDAwMDAxCisKKyNHcm91cCAxMjQgcG1fbXJrX2xibWlzcywgTWFya2VkIFRMQiBhbmQgU0xCIG1pc3NlcworZXZlbnQ6MFg3QzAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDBDRjAwMDAwODI4QThDOEUgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg3QzEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDBDRjAwMDAwODI4QThDOEUgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg3QzIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDBDRjAwMDAwODI4QThDOEUgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg3QzMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDBDRjAwMDAwODI4QThDOEUgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg3QzQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDBDRjAwMDAwODI4QThDOEUgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg3QzUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDBDRjAwMDAwODI4QThDOEUgbW1jcmE6MFgwMDAwMDAwMQorCisjR3JvdXAgMTI1IHBtX21ya19sYnJlZiwgTWFya2VkIFRMQiBhbmQgU0xCIHJlZmVyZW5jZXMKK2V2ZW50OjBYN0QwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwQ0YwMDAwMDg2OEUwMjhFIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYN0QxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwQ0YwMDAwMDg2OEUwMjhFIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYN0QyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwQ0YwMDAwMDg2OEUwMjhFIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYN0QzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwQ0YwMDAwMDg2OEUwMjhFIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYN0Q0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwQ0YwMDAwMDg2OEUwMjhFIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYN0Q1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwQ0YwMDAwMDg2OEUwMjhFIG1tY3JhOjBYMDAwMDAwMDEKKworI0dyb3VwIDEyNiBwbV9tcmtfbHNtaXNzLCBNYXJrZWQgbG9hZCBhbmQgc3RvcmUgbWlzcworZXZlbnQ6MFg3RTAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDgwMDA4MTAwMjA2MEEgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg3RTEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDgwMDA4MTAwMjA2MEEgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg3RTIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDgwMDA4MTAwMjA2MEEgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg3RTMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDgwMDA4MTAwMjA2MEEgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg3RTQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDgwMDA4MTAwMjA2MEEgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg3RTUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDgwMDA4MTAwMjA2MEEgbW1jcmE6MFgwMDAwMDAwMQorCisjR3JvdXAgMTI3IHBtX21ya191bHNmbHVzaCwgTWFyayB1bmFsaWduZWQgbG9hZCBhbmQgc3RvcmUgZmx1c2hlcworZXZlbnQ6MFg3RjAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMjgwMDA0MDZDNjIwMjAgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg3RjEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMjgwMDA0MDZDNjIwMjAgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg3RjIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMjgwMDA0MDZDNjIwMjAgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg3RjMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMjgwMDA0MDZDNjIwMjAgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg3RjQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMjgwMDA0MDZDNjIwMjAgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFg3RjUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMjgwMDA0MDZDNjIwMjAgbW1jcmE6MFgwMDAwMDAwMQorCisjR3JvdXAgMTI4IHBtX21ya19taXNjLCBNaXNjIG1hcmtlZCBpbnN0cnVjdGlvbnMKK2V2ZW50OjBYODAwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDA4MDAwOENDMDYyODE2IG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYODAxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDA4MDAwOENDMDYyODE2IG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYODAyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDA4MDAwOENDMDYyODE2IG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYODAzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDA4MDAwOENDMDYyODE2IG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYODA0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDA4MDAwOENDMDYyODE2IG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYODA1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDA4MDAwOENDMDYyODE2IG1tY3JhOjBYMDAwMDAwMDEKKworI0dyb3VwIDEyOSBwbV9sc3JlZl9MMSwgTG9hZC9TdG9yZSBvcGVyYXRpb25zIGFuZCBMMSBhY3Rpdml0eQorZXZlbnQ6MFg4MTAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDgwMzMwMDA0MEUxQTIwMjAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg4MTEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDgwMzMwMDA0MEUxQTIwMjAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg4MTIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDgwMzMwMDA0MEUxQTIwMjAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg4MTMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDgwMzMwMDA0MEUxQTIwMjAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg4MTQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDgwMzMwMDA0MEUxQTIwMjAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg4MTUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDgwMzMwMDA0MEUxQTIwMjAgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMTMwIHBtX2xzcmVmX0wyTDMsIExvYWQvU3RvcmUgb3BlcmF0aW9ucyBhbmQgTDIsTDMgYWN0aXZpdHkKK2V2ZW50OjBYODIwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDMzMDAwMDFDMEUyMDIwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYODIxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDMzMDAwMDFDMEUyMDIwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYODIyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDMzMDAwMDFDMEUyMDIwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYODIzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDMzMDAwMDFDMEUyMDIwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYODI0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDMzMDAwMDFDMEUyMDIwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYODI1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDMzMDAwMDFDMEUyMDIwIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDEzMSBwbV9sc3JlZl90bGJtaXNzLCBMb2FkL1N0b3JlIG9wZXJhdGlvbnMgYW5kIFRMQiBtaXNzZXMKK2V2ZW50OjBYODMwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMEIwMDAwMDgwODgyMDIwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYODMxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMEIwMDAwMDgwODgyMDIwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYODMyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMEIwMDAwMDgwODgyMDIwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYODMzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMEIwMDAwMDgwODgyMDIwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYODM0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMEIwMDAwMDgwODgyMDIwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYODM1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMEIwMDAwMDgwODgyMDIwIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDEzMiBwbV9EbWlzcywgRGF0YSBjYWNoZSBtaXNzZXMKK2V2ZW50OjBYODQwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDMzMDAwMDFDMEUxMDg2IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYODQxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDMzMDAwMDFDMEUxMDg2IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYODQyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDMzMDAwMDFDMEUxMDg2IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYODQzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDMzMDAwMDFDMEUxMDg2IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYODQ0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDMzMDAwMDFDMEUxMDg2IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYODQ1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDMzMDAwMDFDMEUxMDg2IG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDEzMyBwbV9wcmVmZXRjaFgsIFByZWZldGNoIGV2ZW50cworZXZlbnQ6MFg4NTAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDg1MzMwMDA2MUVDQ0NFODYgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg4NTEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDg1MzMwMDA2MUVDQ0NFODYgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg4NTIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDg1MzMwMDA2MUVDQ0NFODYgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg4NTMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDg1MzMwMDA2MUVDQ0NFODYgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg4NTQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDg1MzMwMDA2MUVDQ0NFODYgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg4NTUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDg1MzMwMDA2MUVDQ0NFODYgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMTM0IHBtX2JyYW5jaFgsIEJyYW5jaCBvcGVyYXRpb25zCitldmVudDowWDg2MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYODAwMDAwMDMwRTBFMEVDOCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDg2MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYODAwMDAwMDMwRTBFMEVDOCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDg2MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYODAwMDAwMDMwRTBFMEVDOCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDg2MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYODAwMDAwMDMwRTBFMEVDOCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDg2NCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYODAwMDAwMDMwRTBFMEVDOCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDg2NSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYODAwMDAwMDMwRTBFMEVDOCBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxMzUgcG1fZnB1WDEsIEZsb2F0aW5nIHBvaW50IGV2ZW50cyBieSB1bml0CitldmVudDowWDg3MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMERDMkNBODZDMCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDg3MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMERDMkNBODZDMCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDg3MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMERDMkNBODZDMCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDg3MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMERDMkNBODZDMCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDg3NCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMERDMkNBODZDMCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDg3NSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMERDMkNBODZDMCBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxMzYgcG1fZnB1WDIsIEZsb2F0aW5nIHBvaW50IGV2ZW50cyBieSB1bml0CitldmVudDowWDg4MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDA4MjhBODI4QSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDg4MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDA4MjhBODI4QSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDg4MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDA4MjhBODI4QSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDg4MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDA4MjhBODI4QSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDg4NCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDA4MjhBODI4QSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDg4NSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDA4MjhBODI4QSBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxMzcgcG1fZnB1WDMsIEZsb2F0aW5nIHBvaW50IGV2ZW50cyBieSB1bml0CitldmVudDowWDg5MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDA4NjhFODY4RSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDg5MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDA4NjhFODY4RSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDg5MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDA4NjhFODY4RSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDg5MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDA4NjhFODY4RSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDg5NCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDA4NjhFODY4RSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDg5NSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDA4NjhFODY4RSBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxMzggcG1fZnB1WDQsIEZsb2F0aW5nIHBvaW50IGFuZCBMMSBldmVudHMKK2V2ZW50OjBYOEEwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDMwMDAwMDIwMTAyMDIwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYOEExIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDMwMDAwMDIwMTAyMDIwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYOEEyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDMwMDAwMDIwMTAyMDIwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYOEEzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDMwMDAwMDIwMTAyMDIwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYOEE0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDMwMDAwMDIwMTAyMDIwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYOEE1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDMwMDAwMDIwMTAyMDIwIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDEzOSBwbV9mcHVYNSwgRmxvYXRpbmcgcG9pbnQgZXZlbnRzCitldmVudDowWDhCMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMEMyMDIwODY4RSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDhCMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMEMyMDIwODY4RSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDhCMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMEMyMDIwODY4RSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDhCMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMEMyMDIwODY4RSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDhCNCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMEMyMDIwODY4RSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDhCNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMEMyMDIwODY4RSBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxNDAgcG1fZnB1WDYsIEZsb2F0aW5nIHBvaW50IGV2ZW50cworZXZlbnQ6MFg4QzAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMTAyMDIwMTAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg4QzEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMTAyMDIwMTAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg4QzIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMTAyMDIwMTAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg4QzMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMTAyMDIwMTAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg4QzQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMTAyMDIwMTAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg4QzUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMTAyMDIwMTAgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMTQxIHBtX2hwbWNvdW50MSwgSFBNIGdyb3VwIGZvciBzZXQgMSAKK2V2ZW50OjBYOEQwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDIwMUUyODEwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYOEQxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDIwMUUyODEwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYOEQyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDIwMUUyODEwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYOEQzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDIwMUUyODEwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYOEQ0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDIwMUUyODEwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYOEQ1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDIwMUUyODEwIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDE0MiBwbV9ocG1jb3VudDIsIEhQTSBncm91cCBmb3Igc2V0IDIKK2V2ZW50OjBYOEUwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwNDMwMDAwNDFFMjAxMjIwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYOEUxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwNDMwMDAwNDFFMjAxMjIwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYOEUyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwNDMwMDAwNDFFMjAxMjIwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYOEUzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwNDMwMDAwNDFFMjAxMjIwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYOEU0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwNDMwMDAwNDFFMjAxMjIwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYOEU1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwNDMwMDAwNDFFMjAxMjIwIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDE0MyBwbV9ocG1jb3VudDMsIEhQTSBncm91cCBmb3Igc2V0IDMgCitldmVudDowWDhGMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAzMDAwMDQxRUMyMTA4NiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDhGMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAzMDAwMDQxRUMyMTA4NiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDhGMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAzMDAwMDQxRUMyMTA4NiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDhGMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAzMDAwMDQxRUMyMTA4NiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDhGNCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAzMDAwMDQxRUMyMTA4NiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDhGNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAzMDAwMDQxRUMyMTA4NiBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxNDQgcG1faHBtY291bnQ0LCBIUE0gZ3JvdXAgZm9yIHNldCA3CitldmVudDowWDkwMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDBCMDAwMDAxMDFFMjAyMCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDkwMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDBCMDAwMDAxMDFFMjAyMCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDkwMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDBCMDAwMDAxMDFFMjAyMCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDkwMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDBCMDAwMDAxMDFFMjAyMCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDkwNCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDBCMDAwMDAxMDFFMjAyMCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDkwNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDBCMDAwMDAxMDFFMjAyMCBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxNDUgcG1faHBtY291bnQ1LCBIUE0gZ3JvdXAgZm9yIHNldCA5IAorZXZlbnQ6MFg5MTAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwMDAwMDAzMUUyODEwQzQgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg5MTEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwMDAwMDAzMUUyODEwQzQgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg5MTIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwMDAwMDAzMUUyODEwQzQgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg5MTMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwMDAwMDAzMUUyODEwQzQgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg5MTQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwMDAwMDAzMUUyODEwQzQgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg5MTUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwMDAwMDAzMUUyODEwQzQgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMTQ2IHBtX2Vwcm9mMSwgR3JvdXAgZm9yIHVzZSB3aXRoIGVwcm9mCitldmVudDowWDkyMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAzMDAwMDAxMjFFMTA4RSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDkyMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAzMDAwMDAxMjFFMTA4RSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDkyMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAzMDAwMDAxMjFFMTA4RSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDkyMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAzMDAwMDAxMjFFMTA4RSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDkyNCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAzMDAwMDAxMjFFMTA4RSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDkyNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAzMDAwMDAxMjFFMTA4RSBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxNDcgcG1fZXByb2YyLCBHcm91cCBmb3IgdXNlIHdpdGggZXByb2YKK2V2ZW50OjBYOTMwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDM4MDAwODEwMTIyMDIwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYOTMxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDM4MDAwODEwMTIyMDIwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYOTMyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDM4MDAwODEwMTIyMDIwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYOTMzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDM4MDAwODEwMTIyMDIwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYOTM0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDM4MDAwODEwMTIyMDIwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYOTM1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDM4MDAwODEwMTIyMDIwIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDE0OCBwbV9lcHJvZjMsIEdyb3VwIGZvciB1c2Ugd2l0aCBlcHJvZgorZXZlbnQ6MFg5NDAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMzgwMDA4QzYxMjEyODYgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg5NDEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMzgwMDA4QzYxMjEyODYgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg5NDIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMzgwMDA4QzYxMjEyODYgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg5NDMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMzgwMDA4QzYxMjEyODYgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg5NDQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMzgwMDA4QzYxMjEyODYgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFg5NDUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMzgwMDA4QzYxMjEyODYgbW1jcmE6MFgwMDAwMDAwMApkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL3BwYzY0L3Bvd2VyNS9ldmVudHMgYi9vcHJvZmlsZS0wLjkuNy9ldmVudHMvcHBjNjQvcG93ZXI1L2V2ZW50cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjQzOGJkCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL3BwYzY0L3Bvd2VyNS9ldmVudHMKQEAgLTAsMCArMSwxMjAyIEBACisjUFBDNjQgUE9XRVI1IGV2ZW50cworIworIyAgV2l0aGluIGVhY2ggZ3JvdXAgdGhlIGV2ZW50IG5hbWVzIG11c3QgYmUgdW5pcXVlLiAgRWFjaCBldmVudCBpbiBhIGdyb3VwIGlzCisjICBhc3NpZ25lZCB0byBhIHVuaXF1ZSBjb3VudGVyLiAgVGhlIGdyb3VwcyBhcmUgZnJvbSB0aGUgZ3JvdXBzIGRlZmluZWQgaW4gdGhlCisjICBQZXJmb3JtYW5jZSBNb25pdG9yIFVuaXQgdXNlciBndWlkZSBmb3IgdGhpcyBwcm9jZXNzb3IuCisjCisjICBPbmx5IGV2ZW50cyB3aXRoaW4gdGhlIHNhbWUgZ3JvdXAgY2FuIGJlIHNlbGVjdGVkIHNpbXVsdGFuZW91c2x5LgorIyAgRWFjaCBldmVudCBpcyBnaXZlbiBhIHVuaXF1ZSBldmVudCBudW1iZXIuICBUaGUgZXZlbnQgbnVtYmVyIGlzIHVzZWQgYnkgdGhlCisjICBPUHJvZmlsZSBjb2RlIHRvIHJlc29sdmUgZXZlbnQgbmFtZXMgZm9yIHRoZSBwb3N0LXByb2Nlc3NpbmcuICBUaGlzIGlzIGRvbmUKKyMgIHRvIHByZXNlcnZlIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgcmVzdCBvZiB0aGUgT1Byb2ZpbGUgY29kZS4gIFRoZSBldmVudAorIyAgbnVtYmVycyBhcmUgZm9ybWF0dGVkIGFzIGZvbGxvd3M6IDxncm91cF9udW0+Y29uY2F0KDxjb3VudGVyIGZvciB0aGUgZXZlbnQ+KS4KKworI0dyb3VwIERlZmF1bHQKK2V2ZW50OjBYMDAxIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6Q1lDTEVTIDogUHJvY2Vzc29yIEN5Y2xlcyB1c2luZyBjb250aW51b3VzIHNhbXBsaW5nCisKKyNHcm91cCAwIHdpdGggcmFuZG9tIHNhbXBsaW5nCitldmVudDowWDAwMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOkNZQ0xFU19STkRfU01QTCA6IFByb2Nlc3NvciBDeWNsZXMgd2l0aCByYW5kb20gc2FtcGxpbmcKKworCisjR3JvdXAgMSBwbV91dGlsaXphdGlvbiwgQ1BJIGFuZCB1dGlsaXphdGlvbiBkYXRhCitldmVudDowWDAxMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQMSA6IChHcm91cCAxIHBtX3V0aWxpemF0aW9uKSBSdW4gY3ljbGVzCitldmVudDowWDAxMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU9QU19DTVBMX0dSUDEgOiAoR3JvdXAgMSBwbV91dGlsaXphdGlvbikgSU9QUyBpbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDAxMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU5TVF9ESVNQX0dSUDEgOiAoR3JvdXAgMSBwbV91dGlsaXphdGlvbikgSW5zdHJ1Y3Rpb25zIGRpc3BhdGNoZWQKK2V2ZW50OjBYMDEzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDEgOiAoR3JvdXAgMSBwbV91dGlsaXphdGlvbikgUHJvY2Vzc29yIGN5Y2xlcworZXZlbnQ6MFgwMTQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMSA6IChHcm91cCAxIHBtX3V0aWxpemF0aW9uKSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDAxNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQMSA6IChHcm91cCAxIHBtX3V0aWxpemF0aW9uKSBSdW4gY3ljbGVzCisKKyNHcm91cCAyIHBtX2NvbXBsZXRpb24sIENvbXBsZXRpb24gYW5kIGN5Y2xlIGNvdW50cworZXZlbnQ6MFgwMjAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNXzFQTFVTX1BQQ19DTVBMX0dSUDIgOiAoR3JvdXAgMiBwbV9jb21wbGV0aW9uKSBPbmUgb3IgbW9yZSBQUEMgaW5zdHJ1Y3Rpb24gY29tcGxldGVkCitldmVudDowWDAyMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fR0NUX0VNUFRZX0NZQ19HUlAyIDogKEdyb3VwIDIgcG1fY29tcGxldGlvbikgQ3ljbGVzIEdDVCBlbXB0eQorZXZlbnQ6MFgwMjIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0dSUF9DTVBMX0dSUDIgOiAoR3JvdXAgMiBwbV9jb21wbGV0aW9uKSBHcm91cCBjb21wbGV0ZWQKK2V2ZW50OjBYMDIzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDIgOiAoR3JvdXAgMiBwbV9jb21wbGV0aW9uKSBQcm9jZXNzb3IgY3ljbGVzCitldmVudDowWDAyNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAyIDogKEdyb3VwIDIgcG1fY29tcGxldGlvbikgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgwMjUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDIgOiAoR3JvdXAgMiBwbV9jb21wbGV0aW9uKSBSdW4gY3ljbGVzCisKKyNHcm91cCAzIHBtX2dyb3VwX2Rpc3BhdGNoLCBHcm91cCBkaXNwYXRjaCBldmVudHMKK2V2ZW50OjBYMDMwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9HUlBfRElTUF9WQUxJRF9HUlAzIDogKEdyb3VwIDMgcG1fZ3JvdXBfZGlzcGF0Y2gpIEdyb3VwIGRpc3BhdGNoIHZhbGlkCitldmVudDowWDAzMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fR1JQX0RJU1BfUkVKRUNUX0dSUDMgOiAoR3JvdXAgMyBwbV9ncm91cF9kaXNwYXRjaCkgR3JvdXAgZGlzcGF0Y2ggcmVqZWN0ZWQKK2V2ZW50OjBYMDMyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9HUlBfRElTUF9CTEtfU0JfQ1lDX0dSUDMgOiAoR3JvdXAgMyBwbV9ncm91cF9kaXNwYXRjaCkgQ3ljbGVzIGdyb3VwIGRpc3BhdGNoIGJsb2NrZWQgYnkgc2NvcmVib2FyZAorZXZlbnQ6MFgwMzMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lOU1RfRElTUF9HUlAzIDogKEdyb3VwIDMgcG1fZ3JvdXBfZGlzcGF0Y2gpIEluc3RydWN0aW9ucyBkaXNwYXRjaGVkCitldmVudDowWDAzNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAzIDogKEdyb3VwIDMgcG1fZ3JvdXBfZGlzcGF0Y2gpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMDM1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAzIDogKEdyb3VwIDMgcG1fZ3JvdXBfZGlzcGF0Y2gpIFJ1biBjeWNsZXMKKworI0dyb3VwIDQgcG1fY2xiMSwgQ0xCIGZ1bGxuZXNzCitldmVudDowWDA0MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fMElOU1RfQ0xCX0NZQ19HUlA0IDogKEdyb3VwIDQgcG1fY2xiMSkgQ3ljbGVzIG5vIGluc3RydWN0aW9ucyBpbiBDTEIKK2V2ZW50OjBYMDQxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV8ySU5TVF9DTEJfQ1lDX0dSUDQgOiAoR3JvdXAgNCBwbV9jbGIxKSBDeWNsZXMgMiBpbnN0cnVjdGlvbnMgaW4gQ0xCCitldmVudDowWDA0MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fQ0xCX0VNUFRZX0NZQ19HUlA0IDogKEdyb3VwIDQgcG1fY2xiMSkgQ3ljbGVzIENMQiBlbXB0eQorZXZlbnQ6MFgwNDMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19EQVRBX0ZST01fTDM1X01PRF9DWUNfR1JQNCA6IChHcm91cCA0IHBtX2NsYjEpIE1hcmtlZCBsb2FkIGxhdGVuY3kgZnJvbSBMMy41IG1vZGlmaWVkCitldmVudDowWDA0NCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlA0IDogKEdyb3VwIDQgcG1fY2xiMSkgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgwNDUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDQgOiAoR3JvdXAgNCBwbV9jbGIxKSBSdW4gY3ljbGVzCisKKyNHcm91cCA1IHBtX2NsYjIsIENMQiBmdWxsbmVzcworZXZlbnQ6MFgwNTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNXzVJTlNUX0NMQl9DWUNfR1JQNSA6IChHcm91cCA1IHBtX2NsYjIpIEN5Y2xlcyA1IGluc3RydWN0aW9ucyBpbiBDTEIKK2V2ZW50OjBYMDUxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV82SU5TVF9DTEJfQ1lDX0dSUDUgOiAoR3JvdXAgNSBwbV9jbGIyKSBDeWNsZXMgNiBpbnN0cnVjdGlvbnMgaW4gQ0xCCitldmVudDowWDA1MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0xTVV9TUlFfSU5TVF9WQUxJRF9HUlA1IDogKEdyb3VwIDUgcG1fY2xiMikgTWFya2VkIGluc3RydWN0aW9uIHZhbGlkIGluIFNSUQorZXZlbnQ6MFgwNTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lPUFNfQ01QTF9HUlA1IDogKEdyb3VwIDUgcG1fY2xiMikgSU9QUyBpbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDA1NCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlA1IDogKEdyb3VwIDUgcG1fY2xiMikgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgwNTUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDUgOiAoR3JvdXAgNSBwbV9jbGIyKSBSdW4gY3ljbGVzCisKKyNHcm91cCA2IHBtX2djdF9lbXB0eSwgR0NUIGVtcHR5IHJlYXNvbnMKK2V2ZW50OjBYMDYwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9HQ1RfTk9TTE9UX0NZQ19HUlA2IDogKEdyb3VwIDYgcG1fZ2N0X2VtcHR5KSBDeWNsZXMgbm8gR0NUIHNsb3QgYWxsb2NhdGVkCitldmVudDowWDA2MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fR0NUX05PU0xPVF9JQ19NSVNTX0dSUDYgOiAoR3JvdXAgNiBwbV9nY3RfZW1wdHkpIE5vIHNsb3QgaW4gR0NUIGNhdXNlZCBieSBJIGNhY2hlIG1pc3MKK2V2ZW50OjBYMDYyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9HQ1RfTk9TTE9UX1NSUV9GVUxMX0dSUDYgOiAoR3JvdXAgNiBwbV9nY3RfZW1wdHkpIE5vIHNsb3QgaW4gR0NUIGNhdXNlZCBieSBTUlEgZnVsbAorZXZlbnQ6MFgwNjMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0dDVF9OT1NMT1RfQlJfTVBSRURfR1JQNiA6IChHcm91cCA2IHBtX2djdF9lbXB0eSkgTm8gc2xvdCBpbiBHQ1QgY2F1c2VkIGJ5IGJyYW5jaCBtaXNwcmVkaWN0CitldmVudDowWDA2NCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlA2IDogKEdyb3VwIDYgcG1fZ2N0X2VtcHR5KSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDA2NSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQNiA6IChHcm91cCA2IHBtX2djdF9lbXB0eSkgUnVuIGN5Y2xlcworCisjR3JvdXAgNyBwbV9nY3RfdXNhZ2UsIEdDVCBVc2FnZQorZXZlbnQ6MFgwNzAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0dDVF9VU0FHRV8wMHRvNTlfQ1lDX0dSUDcgOiAoR3JvdXAgNyBwbV9nY3RfdXNhZ2UpIEN5Y2xlcyBHQ1QgbGVzcyB0aGFuIDYwJSBmdWxsCitldmVudDowWDA3MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fR0NUX1VTQUdFXzYwdG83OV9DWUNfR1JQNyA6IChHcm91cCA3IHBtX2djdF91c2FnZSkgQ3ljbGVzIEdDVCA2MC03OSUgZnVsbAorZXZlbnQ6MFgwNzIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0dDVF9VU0FHRV84MHRvOTlfQ1lDX0dSUDcgOiAoR3JvdXAgNyBwbV9nY3RfdXNhZ2UpIEN5Y2xlcyBHQ1QgODAtOTklIGZ1bGwKK2V2ZW50OjBYMDczIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9HQ1RfRlVMTF9DWUNfR1JQNyA6IChHcm91cCA3IHBtX2djdF91c2FnZSkgQ3ljbGVzIEdDVCBmdWxsCitldmVudDowWDA3NCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlA3IDogKEdyb3VwIDcgcG1fZ2N0X3VzYWdlKSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDA3NSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQNyA6IChHcm91cCA3IHBtX2djdF91c2FnZSkgUnVuIGN5Y2xlcworCisjR3JvdXAgOCBwbV9sc3UxLCBMU1UgTFJRIGFuZCBMTVEgZXZlbnRzCitldmVudDowWDA4MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVX0xSUV9TMF9BTExPQ19HUlA4IDogKEdyb3VwIDggcG1fbHN1MSkgTFJRIHNsb3QgMCBhbGxvY2F0ZWQKK2V2ZW50OjBYMDgxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1VfTFJRX1MwX1ZBTElEX0dSUDggOiAoR3JvdXAgOCBwbV9sc3UxKSBMUlEgc2xvdCAwIHZhbGlkCitldmVudDowWDA4MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVX0xNUV9TMF9BTExPQ19HUlA4IDogKEdyb3VwIDggcG1fbHN1MSkgTE1RIHNsb3QgMCBhbGxvY2F0ZWQKK2V2ZW50OjBYMDgzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1VfTE1RX1MwX1ZBTElEX0dSUDggOiAoR3JvdXAgOCBwbV9sc3UxKSBMTVEgc2xvdCAwIHZhbGlkCitldmVudDowWDA4NCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlA4IDogKEdyb3VwIDggcG1fbHN1MSkgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgwODUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDggOiAoR3JvdXAgOCBwbV9sc3UxKSBSdW4gY3ljbGVzCisKKyNHcm91cCA5IHBtX2xzdTIsIExTVSBTUlEgZXZlbnRzCitldmVudDowWDA5MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVX1NSUV9TMF9BTExPQ19HUlA5IDogKEdyb3VwIDkgcG1fbHN1MikgU1JRIHNsb3QgMCBhbGxvY2F0ZWQKK2V2ZW50OjBYMDkxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1VfU1JRX1MwX1ZBTElEX0dSUDkgOiAoR3JvdXAgOSBwbV9sc3UyKSBTUlEgc2xvdCAwIHZhbGlkCitldmVudDowWDA5MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVX1NSUV9TWU5DX0NZQ19HUlA5IDogKEdyb3VwIDkgcG1fbHN1MikgU1JRIHN5bmMgZHVyYXRpb24KK2V2ZW50OjBYMDkzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1VfU1JRX0ZVTExfQ1lDX0dSUDkgOiAoR3JvdXAgOSBwbV9sc3UyKSBDeWNsZXMgU1JRIGZ1bGwKK2V2ZW50OjBYMDk0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDkgOiAoR3JvdXAgOSBwbV9sc3UyKSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDA5NSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQOSA6IChHcm91cCA5IHBtX2xzdTIpIFJ1biBjeWNsZXMKKworI0dyb3VwIDEwIHBtX2xzdTMsIExTVSBTUlEgYW5kIExNUSBldmVudHMKK2V2ZW50OjBYMEEwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1VfU1JRX1NURldEX0dSUDEwIDogKEdyb3VwIDEwIHBtX2xzdTMpIFNSUSBzdG9yZSBmb3J3YXJkZWQKK2V2ZW50OjBYMEExIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1VfTE1RX1NSUV9FTVBUWV9DWUNfR1JQMTAgOiAoR3JvdXAgMTAgcG1fbHN1MykgQ3ljbGVzIExNUSBhbmQgU1JRIGVtcHR5CitldmVudDowWDBBMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVX0xNUV9MSFJfTUVSR0VfR1JQMTAgOiAoR3JvdXAgMTAgcG1fbHN1MykgTE1RIExIUiBtZXJnZXMKK2V2ZW50OjBYMEEzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1VfU1JRX0VNUFRZX0NZQ19HUlAxMCA6IChHcm91cCAxMCBwbV9sc3UzKSBDeWNsZXMgU1JRIGVtcHR5CitldmVudDowWDBBNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAxMCA6IChHcm91cCAxMCBwbV9sc3UzKSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDBBNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQMTAgOiAoR3JvdXAgMTAgcG1fbHN1MykgUnVuIGN5Y2xlcworCisjR3JvdXAgMTEgcG1fcHJlZmV0Y2gxLCBQcmVmZXRjaCBzdHJlYW0gYWxsb2NhdGlvbgorZXZlbnQ6MFgwQjAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lOU1RfRlJPTV9MMk1JU1NfR1JQMTEgOiAoR3JvdXAgMTEgcG1fcHJlZmV0Y2gxKSBJbnN0cnVjdGlvbnMgZmV0Y2hlZCBtaXNzZWQgTDIKK2V2ZW50OjBYMEIxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JTlNUX0ZFVENIX0NZQ19HUlAxMSA6IChHcm91cCAxMSBwbV9wcmVmZXRjaDEpIEN5Y2xlcyBhdCBsZWFzdCAxIGluc3RydWN0aW9uIGZldGNoZWQKK2V2ZW50OjBYMEIyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQ19QUkVGX1NUUkVBTV9BTExPQ19CTEtfR1JQMTEgOiAoR3JvdXAgMTEgcG1fcHJlZmV0Y2gxKSBEIGNhY2hlIG91dCBvZiBwcmVmZWNoIHN0cmVhbXMKK2V2ZW50OjBYMEIzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQ19QUkVGX1NUUkVBTV9BTExPQ19HUlAxMSA6IChHcm91cCAxMSBwbV9wcmVmZXRjaDEpIEQgY2FjaGUgbmV3IHByZWZldGNoIHN0cmVhbSBhbGxvY2F0ZWQKK2V2ZW50OjBYMEI0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDExIDogKEdyb3VwIDExIHBtX3ByZWZldGNoMSkgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgwQjUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDExIDogKEdyb3VwIDExIHBtX3ByZWZldGNoMSkgUnVuIGN5Y2xlcworCisjR3JvdXAgMTIgcG1fcHJlZmV0Y2gyLCBQcmVmZXRjaCBldmVudHMKK2V2ZW50OjBYMEMwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JT1BTX0NNUExfR1JQMTIgOiAoR3JvdXAgMTIgcG1fcHJlZmV0Y2gyKSBJT1BTIGluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMEMxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9DTEJfRlVMTF9DWUNfR1JQMTIgOiAoR3JvdXAgMTIgcG1fcHJlZmV0Y2gyKSBDeWNsZXMgQ0xCIGZ1bGwKK2V2ZW50OjBYMEMyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMV9QUkVGX0dSUDEyIDogKEdyb3VwIDEyIHBtX3ByZWZldGNoMikgTDEgY2FjaGUgZGF0YSBwcmVmZXRjaGVzCitldmVudDowWDBDMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSUNfUFJFRl9JTlNUQUxMX0dSUDEyIDogKEdyb3VwIDEyIHBtX3ByZWZldGNoMikgSW5zdHJ1Y3Rpb24gcHJlZmV0Y2hlZCBpbnN0YWxsZWQgaW4gcHJlZmV0Y2gKK2V2ZW50OjBYMEM0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDEyIDogKEdyb3VwIDEyIHBtX3ByZWZldGNoMikgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgwQzUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDEyIDogKEdyb3VwIDEyIHBtX3ByZWZldGNoMikgUnVuIGN5Y2xlcworCisjR3JvdXAgMTMgcG1fcHJlZmV0Y2gzLCBMMiBwcmVmZXRjaCBhbmQgbWlzYyBldmVudHMKK2V2ZW50OjBYMEQwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1VfQlVTWV9SRUpFQ1RfR1JQMTMgOiAoR3JvdXAgMTMgcG1fcHJlZmV0Y2gzKSBMU1UgYnVzeSBkdWUgdG8gcmVqZWN0CitldmVudDowWDBEMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fMUlOU1RfQ0xCX0NZQ19HUlAxMyA6IChHcm91cCAxMyBwbV9wcmVmZXRjaDMpIEN5Y2xlcyAxIGluc3RydWN0aW9uIGluIENMQgorZXZlbnQ6MFgwRDIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wyX1BSRUZfR1JQMTMgOiAoR3JvdXAgMTMgcG1fcHJlZmV0Y2gzKSBMMiBjYWNoZSBwcmVmZXRjaGVzCitldmVudDowWDBEMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU9QU19DTVBMX0dSUDEzIDogKEdyb3VwIDEzIHBtX3ByZWZldGNoMykgSU9QUyBpbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDBENCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAxMyA6IChHcm91cCAxMyBwbV9wcmVmZXRjaDMpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMEQ1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxMyA6IChHcm91cCAxMyBwbV9wcmVmZXRjaDMpIFJ1biBjeWNsZXMKKworI0dyb3VwIDE0IHBtX3ByZWZldGNoNCwgTWlzYyBwcmVmZXRjaCBhbmQgcmVqZWN0IGV2ZW50cworZXZlbnQ6MFgwRTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVTBfUkVKRUNUX1NSUV9MSFNfR1JQMTQgOiAoR3JvdXAgMTQgcG1fcHJlZmV0Y2g0KSBMU1UwIFNSUSByZWplY3RzCitldmVudDowWDBFMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVMV9SRUpFQ1RfU1JRX0xIU19HUlAxNCA6IChHcm91cCAxNCBwbV9wcmVmZXRjaDQpIExTVTEgU1JRIHJlamVjdHMKK2V2ZW50OjBYMEUyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQ19QUkVGX0RTVF9HUlAxNCA6IChHcm91cCAxNCBwbV9wcmVmZXRjaDQpIERTVCAoRGF0YSBTdHJlYW0gVG91Y2gpIHN0cmVhbSBzdGFydAorZXZlbnQ6MFgwRTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wyX1BSRUZfR1JQMTQgOiAoR3JvdXAgMTQgcG1fcHJlZmV0Y2g0KSBMMiBjYWNoZSBwcmVmZXRjaGVzCitldmVudDowWDBFNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAxNCA6IChHcm91cCAxNCBwbV9wcmVmZXRjaDQpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMEU1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxNCA6IChHcm91cCAxNCBwbV9wcmVmZXRjaDQpIFJ1biBjeWNsZXMKKworI0dyb3VwIDE1IHBtX2xzdV9yZWplY3QxLCBMU1UgcmVqZWN0IGV2ZW50cworZXZlbnQ6MFgwRjAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9SRUpFQ1RfRVJBVF9NSVNTX0dSUDE1IDogKEdyb3VwIDE1IHBtX2xzdV9yZWplY3QxKSBMU1UgcmVqZWN0IGR1ZSB0byBFUkFUIG1pc3MKK2V2ZW50OjBYMEYxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1VfUkVKRUNUX0xNUV9GVUxMX0dSUDE1IDogKEdyb3VwIDE1IHBtX2xzdV9yZWplY3QxKSBMU1UgcmVqZWN0IGR1ZSB0byBMTVEgZnVsbCBvciBtaXNzZWQgZGF0YSBjb21pbmcKK2V2ZW50OjBYMEYyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GTFVTSF9JTUJBTF9HUlAxNSA6IChHcm91cCAxNSBwbV9sc3VfcmVqZWN0MSkgRmx1c2ggY2F1c2VkIGJ5IHRocmVhZCBHQ1QgaW1iYWxhbmNlCitldmVudDowWDBGMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0xTVV9GTFVTSF9TUlFfR1JQMTUgOiAoR3JvdXAgMTUgcG1fbHN1X3JlamVjdDEpIE1hcmtlZCBTUlEgZmx1c2hlcworZXZlbnQ6MFgwRjQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMTUgOiAoR3JvdXAgMTUgcG1fbHN1X3JlamVjdDEpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMEY1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxNSA6IChHcm91cCAxNSBwbV9sc3VfcmVqZWN0MSkgUnVuIGN5Y2xlcworCisjR3JvdXAgMTYgcG1fbHN1X3JlamVjdDIsIExTVSByZWplY3RzIGR1ZSB0byByZWxvYWQgQ0RGIG9yIHRhZyB1cGRhdGUgY29sbGlzaW9uCitldmVudDowWDEwMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVMF9SRUpFQ1RfUkVMT0FEX0NERl9HUlAxNiA6IChHcm91cCAxNiBwbV9sc3VfcmVqZWN0MikgTFNVMCByZWplY3QgZHVlIHRvIHJlbG9hZCBDREYgb3IgdGFnIHVwZGF0ZSBjb2xsaXNpb24KK2V2ZW50OjBYMTAxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1UxX1JFSkVDVF9SRUxPQURfQ0RGX0dSUDE2IDogKEdyb3VwIDE2IHBtX2xzdV9yZWplY3QyKSBMU1UxIHJlamVjdCBkdWUgdG8gcmVsb2FkIENERiBvciB0YWcgdXBkYXRlIGNvbGxpc2lvbgorZXZlbnQ6MFgxMDIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lPUFNfQ01QTF9HUlAxNiA6IChHcm91cCAxNiBwbV9sc3VfcmVqZWN0MikgSU9QUyBpbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDEwMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDFfV1JJVEVfQ1lDX0dSUDE2IDogKEdyb3VwIDE2IHBtX2xzdV9yZWplY3QyKSBDeWNsZXMgd3JpdGluZyB0byBpbnN0cnVjdGlvbiBMMQorZXZlbnQ6MFgxMDQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMTYgOiAoR3JvdXAgMTYgcG1fbHN1X3JlamVjdDIpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMTA1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxNiA6IChHcm91cCAxNiBwbV9sc3VfcmVqZWN0MikgUnVuIGN5Y2xlcworCisjR3JvdXAgMTcgcG1fbHN1X3JlamVjdDMsIExTVSByZWplY3RzIGR1ZSB0byBFUkFULCBoZWxkIGluc3R1Y3Rpb25zCitldmVudDowWDExMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVMF9SRUpFQ1RfRVJBVF9NSVNTX0dSUDE3IDogKEdyb3VwIDE3IHBtX2xzdV9yZWplY3QzKSBMU1UwIHJlamVjdCBkdWUgdG8gRVJBVCBtaXNzCitldmVudDowWDExMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVMV9SRUpFQ1RfRVJBVF9NSVNTX0dSUDE3IDogKEdyb3VwIDE3IHBtX2xzdV9yZWplY3QzKSBMU1UxIHJlamVjdCBkdWUgdG8gRVJBVCBtaXNzCitldmVudDowWDExMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFdTWU5DX0hFTERfR1JQMTcgOiAoR3JvdXAgMTcgcG1fbHN1X3JlamVjdDMpIExXU1lOQyBoZWxkIGF0IGRpc3BhdGNoCitldmVudDowWDExMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fVExCSUVfSEVMRF9HUlAxNyA6IChHcm91cCAxNyBwbV9sc3VfcmVqZWN0MykgVExCSUUgaGVsZCBhdCBkaXNwYXRjaAorZXZlbnQ6MFgxMTQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMTcgOiAoR3JvdXAgMTcgcG1fbHN1X3JlamVjdDMpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMTE1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxNyA6IChHcm91cCAxNyBwbV9sc3VfcmVqZWN0MykgUnVuIGN5Y2xlcworCisjR3JvdXAgMTggcG1fbHN1X3JlamVjdDQsIExTVTAvMSByZWplY3QgTE1RIGZ1bGwKK2V2ZW50OjBYMTIwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1UwX1JFSkVDVF9MTVFfRlVMTF9HUlAxOCA6IChHcm91cCAxOCBwbV9sc3VfcmVqZWN0NCkgTFNVMCByZWplY3QgZHVlIHRvIExNUSBmdWxsIG9yIG1pc3NlZCBkYXRhIGNvbWluZworZXZlbnQ6MFgxMjEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVTFfUkVKRUNUX0xNUV9GVUxMX0dSUDE4IDogKEdyb3VwIDE4IHBtX2xzdV9yZWplY3Q0KSBMU1UxIHJlamVjdCBkdWUgdG8gTE1RIGZ1bGwgb3IgbWlzc2VkIGRhdGEgY29taW5nCitldmVudDowWDEyMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU9QU19DTVBMX0dSUDE4IDogKEdyb3VwIDE4IHBtX2xzdV9yZWplY3Q0KSBJT1BTIGluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMTIzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9CUl9JU1NVRURfR1JQMTggOiAoR3JvdXAgMTggcG1fbHN1X3JlamVjdDQpIEJyYW5jaGVzIGlzc3VlZAorZXZlbnQ6MFgxMjQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMTggOiAoR3JvdXAgMTggcG1fbHN1X3JlamVjdDQpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMTI1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxOCA6IChHcm91cCAxOCBwbV9sc3VfcmVqZWN0NCkgUnVuIGN5Y2xlcworCisjR3JvdXAgMTkgcG1fbHN1X3JlamVjdDUsIExTVSBtaXNjIHJlamVjdCBhbmQgZmx1c2ggZXZlbnRzCitldmVudDowWDEzMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVX1JFSkVDVF9TUlFfTEhTX0dSUDE5IDogKEdyb3VwIDE5IHBtX2xzdV9yZWplY3Q1KSBMU1UgU1JRIHJlamVjdHMKK2V2ZW50OjBYMTMxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1VfUkVKRUNUX1JFTE9BRF9DREZfR1JQMTkgOiAoR3JvdXAgMTkgcG1fbHN1X3JlamVjdDUpIExTVSByZWplY3QgZHVlIHRvIHJlbG9hZCBDREYgb3IgdGFnIHVwZGF0ZSBjb2xsaXNpb24KK2V2ZW50OjBYMTMyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1VfRkxVU0hfR1JQMTkgOiAoR3JvdXAgMTkgcG1fbHN1X3JlamVjdDUpIEZsdXNoIGluaXRpYXRlZCBieSBMU1UKK2V2ZW50OjBYMTMzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GTFVTSF9HUlAxOSA6IChHcm91cCAxOSBwbV9sc3VfcmVqZWN0NSkgRmx1c2hlcworZXZlbnQ6MFgxMzQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMTkgOiAoR3JvdXAgMTkgcG1fbHN1X3JlamVjdDUpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMTM1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxOSA6IChHcm91cCAxOSBwbV9sc3VfcmVqZWN0NSkgUnVuIGN5Y2xlcworCisjR3JvdXAgMjAgcG1fZmx1c2gxLCBNaXNjIGZsdXNoIGV2ZW50cworZXZlbnQ6MFgxNDAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lPUFNfQ01QTF9HUlAyMCA6IChHcm91cCAyMCBwbV9mbHVzaDEpIElPUFMgaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgxNDEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9GTFVTSF9VU1RfR1JQMjAgOiAoR3JvdXAgMjAgcG1fZmx1c2gxKSBTUlEgdW5hbGlnbmVkIHN0b3JlIGZsdXNoZXMKK2V2ZW50OjBYMTQyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GTFVTSF9JTUJBTF9HUlAyMCA6IChHcm91cCAyMCBwbV9mbHVzaDEpIEZsdXNoIGNhdXNlZCBieSB0aHJlYWQgR0NUIGltYmFsYW5jZQorZXZlbnQ6MFgxNDMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RDX0lOVl9MMl9HUlAyMCA6IChHcm91cCAyMCBwbV9mbHVzaDEpIEwxIEQgY2FjaGUgZW50cmllcyBpbnZhbGlkYXRlZCBmcm9tIEwyCitldmVudDowWDE0NCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAyMCA6IChHcm91cCAyMCBwbV9mbHVzaDEpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMTQ1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAyMCA6IChHcm91cCAyMCBwbV9mbHVzaDEpIFJ1biBjeWNsZXMKKworI0dyb3VwIDIxIHBtX2ZsdXNoMiwgRmx1c2hlcyBkdWUgdG8gc2NvcmVib2FyZCBhbmQgc3luYworZXZlbnQ6MFgxNTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lUTEJfTUlTU19HUlAyMSA6IChHcm91cCAyMSBwbV9mbHVzaDIpIEluc3RydWN0aW9uIFRMQiBtaXNzZXMKK2V2ZW50OjBYMTUxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JT1BTX0NNUExfR1JQMjEgOiAoR3JvdXAgMjEgcG1fZmx1c2gyKSBJT1BTIGluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMTUyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GTFVTSF9TQl9HUlAyMSA6IChHcm91cCAyMSBwbV9mbHVzaDIpIEZsdXNoIGNhdXNlZCBieSBzY29yZWJvYXJkIG9wZXJhdGlvbgorZXZlbnQ6MFgxNTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZMVVNIX1NZTkNfR1JQMjEgOiAoR3JvdXAgMjEgcG1fZmx1c2gyKSBGbHVzaCBjYXVzZWQgYnkgc3luYworZXZlbnQ6MFgxNTQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMjEgOiAoR3JvdXAgMjEgcG1fZmx1c2gyKSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDE1NSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQMjEgOiAoR3JvdXAgMjEgcG1fZmx1c2gyKSBSdW4gY3ljbGVzCisKKyNHcm91cCAyMiBwbV9sc3VfZmx1c2hfc3JxX2xycSwgTFNVIGZsdXNoIGJ5IFNSUSBhbmQgTFJRIGV2ZW50cworZXZlbnQ6MFgxNjAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9GTFVTSF9TUlFfR1JQMjIgOiAoR3JvdXAgMjIgcG1fbHN1X2ZsdXNoX3NycV9scnEpIFNSUSBmbHVzaGVzCitldmVudDowWDE2MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVX0ZMVVNIX0xSUV9HUlAyMiA6IChHcm91cCAyMiBwbV9sc3VfZmx1c2hfc3JxX2xycSkgTFJRIGZsdXNoZXMKK2V2ZW50OjBYMTYyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JT1BTX0NNUExfR1JQMjIgOiAoR3JvdXAgMjIgcG1fbHN1X2ZsdXNoX3NycV9scnEpIElPUFMgaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgxNjMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9GTFVTSF9HUlAyMiA6IChHcm91cCAyMiBwbV9sc3VfZmx1c2hfc3JxX2xycSkgRmx1c2ggaW5pdGlhdGVkIGJ5IExTVQorZXZlbnQ6MFgxNjQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMjIgOiAoR3JvdXAgMjIgcG1fbHN1X2ZsdXNoX3NycV9scnEpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMTY1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAyMiA6IChHcm91cCAyMiBwbV9sc3VfZmx1c2hfc3JxX2xycSkgUnVuIGN5Y2xlcworCisjR3JvdXAgMjMgcG1fbHN1X2ZsdXNoX2xycSwgTFNVMC8xIGZsdXNoIGR1ZSB0byBMUlEKK2V2ZW50OjBYMTcwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1UwX0ZMVVNIX0xSUV9HUlAyMyA6IChHcm91cCAyMyBwbV9sc3VfZmx1c2hfbHJxKSBMU1UwIExSUSBmbHVzaGVzCitldmVudDowWDE3MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVMV9GTFVTSF9MUlFfR1JQMjMgOiAoR3JvdXAgMjMgcG1fbHN1X2ZsdXNoX2xycSkgTFNVMSBMUlEgZmx1c2hlcworZXZlbnQ6MFgxNzIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9GTFVTSF9HUlAyMyA6IChHcm91cCAyMyBwbV9sc3VfZmx1c2hfbHJxKSBGbHVzaCBpbml0aWF0ZWQgYnkgTFNVCitldmVudDowWDE3MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU9QU19DTVBMX0dSUDIzIDogKEdyb3VwIDIzIHBtX2xzdV9mbHVzaF9scnEpIElPUFMgaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgxNzQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMjMgOiAoR3JvdXAgMjMgcG1fbHN1X2ZsdXNoX2xycSkgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgxNzUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDIzIDogKEdyb3VwIDIzIHBtX2xzdV9mbHVzaF9scnEpIFJ1biBjeWNsZXMKKworI0dyb3VwIDI0IHBtX2xzdV9mbHVzaF9zcnEsIExTVTAvMSBmbHVzaCBkdWUgdG8gU1JRCitldmVudDowWDE4MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVMF9GTFVTSF9TUlFfR1JQMjQgOiAoR3JvdXAgMjQgcG1fbHN1X2ZsdXNoX3NycSkgTFNVMCBTUlEgZmx1c2hlcworZXZlbnQ6MFgxODEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVTFfRkxVU0hfU1JRX0dSUDI0IDogKEdyb3VwIDI0IHBtX2xzdV9mbHVzaF9zcnEpIExTVTEgU1JRIGZsdXNoZXMKK2V2ZW50OjBYMTgyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JT1BTX0NNUExfR1JQMjQgOiAoR3JvdXAgMjQgcG1fbHN1X2ZsdXNoX3NycSkgSU9QUyBpbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDE4MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVX0ZMVVNIX0dSUDI0IDogKEdyb3VwIDI0IHBtX2xzdV9mbHVzaF9zcnEpIEZsdXNoIGluaXRpYXRlZCBieSBMU1UKK2V2ZW50OjBYMTg0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDI0IDogKEdyb3VwIDI0IHBtX2xzdV9mbHVzaF9zcnEpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMTg1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAyNCA6IChHcm91cCAyNCBwbV9sc3VfZmx1c2hfc3JxKSBSdW4gY3ljbGVzCisKKyNHcm91cCAyNSBwbV9sc3VfZmx1c2hfdW5hbGlnbmVkLCBMU1UgZmx1c2ggZHVlIHRvIHVuYWxpZ25lZCBkYXRhCitldmVudDowWDE5MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVX0ZMVVNIX1VMRF9HUlAyNSA6IChHcm91cCAyNSBwbV9sc3VfZmx1c2hfdW5hbGlnbmVkKSBMUlEgdW5hbGlnbmVkIGxvYWQgZmx1c2hlcworZXZlbnQ6MFgxOTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9GTFVTSF9VU1RfR1JQMjUgOiAoR3JvdXAgMjUgcG1fbHN1X2ZsdXNoX3VuYWxpZ25lZCkgU1JRIHVuYWxpZ25lZCBzdG9yZSBmbHVzaGVzCitldmVudDowWDE5MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fQlJfSVNTVUVEX0dSUDI1IDogKEdyb3VwIDI1IHBtX2xzdV9mbHVzaF91bmFsaWduZWQpIEJyYW5jaGVzIGlzc3VlZAorZXZlbnQ6MFgxOTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lPUFNfQ01QTF9HUlAyNSA6IChHcm91cCAyNSBwbV9sc3VfZmx1c2hfdW5hbGlnbmVkKSBJT1BTIGluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMTk0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDI1IDogKEdyb3VwIDI1IHBtX2xzdV9mbHVzaF91bmFsaWduZWQpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMTk1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAyNSA6IChHcm91cCAyNSBwbV9sc3VfZmx1c2hfdW5hbGlnbmVkKSBSdW4gY3ljbGVzCisKKyNHcm91cCAyNiBwbV9sc3VfZmx1c2hfdWxkLCBMU1UwLzEgZmx1c2ggZHVlIHRvIHVuYWxpZ25lZCBsb2FkCitldmVudDowWDFBMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVMF9GTFVTSF9VTERfR1JQMjYgOiAoR3JvdXAgMjYgcG1fbHN1X2ZsdXNoX3VsZCkgTFNVMCB1bmFsaWduZWQgbG9hZCBmbHVzaGVzCitldmVudDowWDFBMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVMV9GTFVTSF9VTERfR1JQMjYgOiAoR3JvdXAgMjYgcG1fbHN1X2ZsdXNoX3VsZCkgTFNVMSB1bmFsaWduZWQgbG9hZCBmbHVzaGVzCitldmVudDowWDFBMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVX0ZMVVNIX0dSUDI2IDogKEdyb3VwIDI2IHBtX2xzdV9mbHVzaF91bGQpIEZsdXNoIGluaXRpYXRlZCBieSBMU1UKK2V2ZW50OjBYMUEzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JT1BTX0NNUExfR1JQMjYgOiAoR3JvdXAgMjYgcG1fbHN1X2ZsdXNoX3VsZCkgSU9QUyBpbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDFBNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAyNiA6IChHcm91cCAyNiBwbV9sc3VfZmx1c2hfdWxkKSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDFBNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQMjYgOiAoR3JvdXAgMjYgcG1fbHN1X2ZsdXNoX3VsZCkgUnVuIGN5Y2xlcworCisjR3JvdXAgMjcgcG1fbHN1X2ZsdXNoX3VzdCwgTFNVMC8xIGZsdXNoIGR1ZSB0byB1bmFsaWduZWQgc3RvcmUKK2V2ZW50OjBYMUIwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1UwX0ZMVVNIX1VTVF9HUlAyNyA6IChHcm91cCAyNyBwbV9sc3VfZmx1c2hfdXN0KSBMU1UwIHVuYWxpZ25lZCBzdG9yZSBmbHVzaGVzCitldmVudDowWDFCMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVMV9GTFVTSF9VU1RfR1JQMjcgOiAoR3JvdXAgMjcgcG1fbHN1X2ZsdXNoX3VzdCkgTFNVMSB1bmFsaWduZWQgc3RvcmUgZmx1c2hlcworZXZlbnQ6MFgxQjIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lPUFNfQ01QTF9HUlAyNyA6IChHcm91cCAyNyBwbV9sc3VfZmx1c2hfdXN0KSBJT1BTIGluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMUIzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1VfRkxVU0hfR1JQMjcgOiAoR3JvdXAgMjcgcG1fbHN1X2ZsdXNoX3VzdCkgRmx1c2ggaW5pdGlhdGVkIGJ5IExTVQorZXZlbnQ6MFgxQjQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMjcgOiAoR3JvdXAgMjcgcG1fbHN1X2ZsdXNoX3VzdCkgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgxQjUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDI3IDogKEdyb3VwIDI3IHBtX2xzdV9mbHVzaF91c3QpIFJ1biBjeWNsZXMKKworI0dyb3VwIDI4IHBtX2xzdV9mbHVzaF9mdWxsLCBMU1UgZmx1c2ggZHVlIHRvIExSUS9TUlEgZnVsbAorZXZlbnQ6MFgxQzAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9GTFVTSF9MUlFfRlVMTF9HUlAyOCA6IChHcm91cCAyOCBwbV9sc3VfZmx1c2hfZnVsbCkgRmx1c2ggY2F1c2VkIGJ5IExSUSBmdWxsCitldmVudDowWDFDMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU9QU19DTVBMX0dSUDI4IDogKEdyb3VwIDI4IHBtX2xzdV9mbHVzaF9mdWxsKSBJT1BTIGluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMUMyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfTFNVX0ZMVVNIX0xSUV9HUlAyOCA6IChHcm91cCAyOCBwbV9sc3VfZmx1c2hfZnVsbCkgTWFya2VkIExSUSBmbHVzaGVzCitldmVudDowWDFDMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVX0ZMVVNIX1NSUV9GVUxMX0dSUDI4IDogKEdyb3VwIDI4IHBtX2xzdV9mbHVzaF9mdWxsKSBGbHVzaCBjYXVzZWQgYnkgU1JRIGZ1bGwKK2V2ZW50OjBYMUM0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDI4IDogKEdyb3VwIDI4IHBtX2xzdV9mbHVzaF9mdWxsKSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDFDNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQMjggOiAoR3JvdXAgMjggcG1fbHN1X2ZsdXNoX2Z1bGwpIFJ1biBjeWNsZXMKKworI0dyb3VwIDI5IHBtX2xzdV9zdGFsbDEsIExTVSBTdGFsbHMKK2V2ZW50OjBYMUQwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9HUlBfTVJLX0dSUDI5IDogKEdyb3VwIDI5IHBtX2xzdV9zdGFsbDEpIEdyb3VwIG1hcmtlZCBpbiBJRFUKK2V2ZW50OjBYMUQxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9DTVBMVV9TVEFMTF9MU1VfR1JQMjkgOiAoR3JvdXAgMjkgcG1fbHN1X3N0YWxsMSkgQ29tcGxldGlvbiBzdGFsbCBjYXVzZWQgYnkgTFNVIGluc3RydWN0aW9uCitldmVudDowWDFEMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU9QU19DTVBMX0dSUDI5IDogKEdyb3VwIDI5IHBtX2xzdV9zdGFsbDEpIElPUFMgaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgxRDMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0NNUExVX1NUQUxMX1JFSkVDVF9HUlAyOSA6IChHcm91cCAyOSBwbV9sc3Vfc3RhbGwxKSBDb21wbGV0aW9uIHN0YWxsIGNhdXNlZCBieSByZWplY3QKK2V2ZW50OjBYMUQ0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDI5IDogKEdyb3VwIDI5IHBtX2xzdV9zdGFsbDEpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMUQ1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAyOSA6IChHcm91cCAyOSBwbV9sc3Vfc3RhbGwxKSBSdW4gY3ljbGVzCisKKyNHcm91cCAzMCBwbV9sc3Vfc3RhbGwyLCBMU1UgU3RhbGxzCitldmVudDowWDFFMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU9QU19DTVBMX0dSUDMwIDogKEdyb3VwIDMwIHBtX2xzdV9zdGFsbDIpIElPUFMgaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgxRTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0NNUExVX1NUQUxMX0RDQUNIRV9NSVNTX0dSUDMwIDogKEdyb3VwIDMwIHBtX2xzdV9zdGFsbDIpIENvbXBsZXRpb24gc3RhbGwgY2F1c2VkIGJ5IEQgY2FjaGUgbWlzcworZXZlbnQ6MFgxRTIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQMzAgOiAoR3JvdXAgMzAgcG1fbHN1X3N0YWxsMikgUHJvY2Vzc29yIGN5Y2xlcworZXZlbnQ6MFgxRTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0NNUExVX1NUQUxMX0VSQVRfTUlTU19HUlAzMCA6IChHcm91cCAzMCBwbV9sc3Vfc3RhbGwyKSBDb21wbGV0aW9uIHN0YWxsIGNhdXNlZCBieSBFUkFUIG1pc3MKK2V2ZW50OjBYMUU0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDMwIDogKEdyb3VwIDMwIHBtX2xzdV9zdGFsbDIpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMUU1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAzMCA6IChHcm91cCAzMCBwbV9sc3Vfc3RhbGwyKSBSdW4gY3ljbGVzCisKKyNHcm91cCAzMSBwbV9meHVfc3RhbGwsIEZYVSBTdGFsbHMKK2V2ZW50OjBYMUYwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9HUlBfSUNfTUlTU19CUl9SRURJUl9OT05TUEVDX0dSUDMxIDogKEdyb3VwIDMxIHBtX2Z4dV9zdGFsbCkgR3JvdXAgZXhwZXJpZW5jZWQgbm9uLXNwZWN1bGF0aXZlIEkgY2FjaGUgbWlzcyBvciBicmFuY2ggcmVkaXJlY3QKK2V2ZW50OjBYMUYxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9DTVBMVV9TVEFMTF9GWFVfR1JQMzEgOiAoR3JvdXAgMzEgcG1fZnh1X3N0YWxsKSBDb21wbGV0aW9uIHN0YWxsIGNhdXNlZCBieSBGWFUgaW5zdHJ1Y3Rpb24KK2V2ZW50OjBYMUYyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JT1BTX0NNUExfR1JQMzEgOiAoR3JvdXAgMzEgcG1fZnh1X3N0YWxsKSBJT1BTIGluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMUYzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9DTVBMVV9TVEFMTF9ESVZfR1JQMzEgOiAoR3JvdXAgMzEgcG1fZnh1X3N0YWxsKSBDb21wbGV0aW9uIHN0YWxsIGNhdXNlZCBieSBESVYgaW5zdHJ1Y3Rpb24KK2V2ZW50OjBYMUY0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDMxIDogKEdyb3VwIDMxIHBtX2Z4dV9zdGFsbCkgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgxRjUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDMxIDogKEdyb3VwIDMxIHBtX2Z4dV9zdGFsbCkgUnVuIGN5Y2xlcworCisjR3JvdXAgMzIgcG1fZnB1X3N0YWxsLCBGUFUgU3RhbGxzCitldmVudDowWDIwMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVX0ZVTExfQ1lDX0dSUDMyIDogKEdyb3VwIDMyIHBtX2ZwdV9zdGFsbCkgQ3ljbGVzIEZQVSBpc3N1ZSBxdWV1ZSBmdWxsCitldmVudDowWDIwMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fQ01QTFVfU1RBTExfRkRJVl9HUlAzMiA6IChHcm91cCAzMiBwbV9mcHVfc3RhbGwpIENvbXBsZXRpb24gc3RhbGwgY2F1c2VkIGJ5IEZESVYgb3IgRlFSVCBpbnN0cnVjdGlvbgorZXZlbnQ6MFgyMDIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lPUFNfQ01QTF9HUlAzMiA6IChHcm91cCAzMiBwbV9mcHVfc3RhbGwpIElPUFMgaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgyMDMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0NNUExVX1NUQUxMX0ZQVV9HUlAzMiA6IChHcm91cCAzMiBwbV9mcHVfc3RhbGwpIENvbXBsZXRpb24gc3RhbGwgY2F1c2VkIGJ5IEZQVSBpbnN0cnVjdGlvbgorZXZlbnQ6MFgyMDQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMzIgOiAoR3JvdXAgMzIgcG1fZnB1X3N0YWxsKSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDIwNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQMzIgOiAoR3JvdXAgMzIgcG1fZnB1X3N0YWxsKSBSdW4gY3ljbGVzCisKKyNHcm91cCAzMyBwbV9xdWV1ZV9mdWxsLCBCUlEgTFJRIExNUSBxdWV1ZSBmdWxsCitldmVudDowWDIxMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTEFSWF9MU1UwX0dSUDMzIDogKEdyb3VwIDMzIHBtX3F1ZXVlX2Z1bGwpIExhcnggZXhlY3V0ZWQgb24gTFNVMAorZXZlbnQ6MFgyMTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0JSUV9GVUxMX0NZQ19HUlAzMyA6IChHcm91cCAzMyBwbV9xdWV1ZV9mdWxsKSBDeWNsZXMgYnJhbmNoIHF1ZXVlIGZ1bGwKK2V2ZW50OjBYMjEyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1VfTFJRX0ZVTExfQ1lDX0dSUDMzIDogKEdyb3VwIDMzIHBtX3F1ZXVlX2Z1bGwpIEN5Y2xlcyBMUlEgZnVsbAorZXZlbnQ6MFgyMTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9MTVFfRlVMTF9DWUNfR1JQMzMgOiAoR3JvdXAgMzMgcG1fcXVldWVfZnVsbCkgQ3ljbGVzIExNUSBmdWxsCitldmVudDowWDIxNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAzMyA6IChHcm91cCAzMyBwbV9xdWV1ZV9mdWxsKSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDIxNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQMzMgOiAoR3JvdXAgMzMgcG1fcXVldWVfZnVsbCkgUnVuIGN5Y2xlcworCisjR3JvdXAgMzQgcG1faXNzdWVxX2Z1bGwsIEZQVSBGWCBmdWxsCitldmVudDowWDIyMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVMF9GVUxMX0NZQ19HUlAzNCA6IChHcm91cCAzNCBwbV9pc3N1ZXFfZnVsbCkgQ3ljbGVzIEZQVTAgaXNzdWUgcXVldWUgZnVsbAorZXZlbnQ6MFgyMjEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVTFfRlVMTF9DWUNfR1JQMzQgOiAoR3JvdXAgMzQgcG1faXNzdWVxX2Z1bGwpIEN5Y2xlcyBGUFUxIGlzc3VlIHF1ZXVlIGZ1bGwKK2V2ZW50OjBYMjIyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GWExTMF9GVUxMX0NZQ19HUlAzNCA6IChHcm91cCAzNCBwbV9pc3N1ZXFfZnVsbCkgQ3ljbGVzIEZYVTAvTFMwIHF1ZXVlIGZ1bGwKK2V2ZW50OjBYMjIzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GWExTMV9GVUxMX0NZQ19HUlAzNCA6IChHcm91cCAzNCBwbV9pc3N1ZXFfZnVsbCkgQ3ljbGVzIEZYVTEvTFMxIHF1ZXVlIGZ1bGwKK2V2ZW50OjBYMjI0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDM0IDogKEdyb3VwIDM0IHBtX2lzc3VlcV9mdWxsKSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDIyNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQMzQgOiAoR3JvdXAgMzQgcG1faXNzdWVxX2Z1bGwpIFJ1biBjeWNsZXMKKworI0dyb3VwIDM1IHBtX21hcHBlcl9mdWxsMSwgQ1IgQ1RSIEdQUiBtYXBwZXIgZnVsbAorZXZlbnQ6MFgyMzAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0NSX01BUF9GVUxMX0NZQ19HUlAzNSA6IChHcm91cCAzNSBwbV9tYXBwZXJfZnVsbDEpIEN5Y2xlcyBDUiBsb2dpY2FsIG9wZXJhdGlvbiBtYXBwZXIgZnVsbAorZXZlbnQ6MFgyMzEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xSX0NUUl9NQVBfRlVMTF9DWUNfR1JQMzUgOiAoR3JvdXAgMzUgcG1fbWFwcGVyX2Z1bGwxKSBDeWNsZXMgTFIvQ1RSIG1hcHBlciBmdWxsCitldmVudDowWDIzMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fR1BSX01BUF9GVUxMX0NZQ19HUlAzNSA6IChHcm91cCAzNSBwbV9tYXBwZXJfZnVsbDEpIEN5Y2xlcyBHUFIgbWFwcGVyIGZ1bGwKK2V2ZW50OjBYMjMzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9DUlFfRlVMTF9DWUNfR1JQMzUgOiAoR3JvdXAgMzUgcG1fbWFwcGVyX2Z1bGwxKSBDeWNsZXMgQ1IgaXNzdWUgcXVldWUgZnVsbAorZXZlbnQ6MFgyMzQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMzUgOiAoR3JvdXAgMzUgcG1fbWFwcGVyX2Z1bGwxKSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDIzNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQMzUgOiAoR3JvdXAgMzUgcG1fbWFwcGVyX2Z1bGwxKSBSdW4gY3ljbGVzCisKKyNHcm91cCAzNiBwbV9tYXBwZXJfZnVsbDIsIEZQUiBYRVIgbWFwcGVyIGZ1bGwKK2V2ZW50OjBYMjQwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFJfTUFQX0ZVTExfQ1lDX0dSUDM2IDogKEdyb3VwIDM2IHBtX21hcHBlcl9mdWxsMikgQ3ljbGVzIEZQUiBtYXBwZXIgZnVsbAorZXZlbnQ6MFgyNDEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1hFUl9NQVBfRlVMTF9DWUNfR1JQMzYgOiAoR3JvdXAgMzYgcG1fbWFwcGVyX2Z1bGwyKSBDeWNsZXMgWEVSIG1hcHBlciBmdWxsCitldmVudDowWDI0MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0RBVEFfRlJPTV9MMk1JU1NfR1JQMzYgOiAoR3JvdXAgMzYgcG1fbWFwcGVyX2Z1bGwyKSBNYXJrZWQgZGF0YSBsb2FkZWQgbWlzc2VkIEwyCitldmVudDowWDI0MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU9QU19DTVBMX0dSUDM2IDogKEdyb3VwIDM2IHBtX21hcHBlcl9mdWxsMikgSU9QUyBpbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDI0NCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAzNiA6IChHcm91cCAzNiBwbV9tYXBwZXJfZnVsbDIpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMjQ1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAzNiA6IChHcm91cCAzNiBwbV9tYXBwZXJfZnVsbDIpIFJ1biBjeWNsZXMKKworI0dyb3VwIDM3IHBtX21pc2NfbG9hZCwgTm9uLWNhY2hhYmxlIGxvYWRzIGFuZCBzdGN4IGV2ZW50cworZXZlbnQ6MFgyNTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1NUQ1hfRkFJTF9HUlAzNyA6IChHcm91cCAzNyBwbV9taXNjX2xvYWQpIFNUQ1ggZmFpbGVkCitldmVudDowWDI1MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fU1RDWF9QQVNTX0dSUDM3IDogKEdyb3VwIDM3IHBtX21pc2NfbG9hZCkgU3RjeCBwYXNzZXMKK2V2ZW50OjBYMjUyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1UwX05DTERfR1JQMzcgOiAoR3JvdXAgMzcgcG1fbWlzY19sb2FkKSBMU1UwIG5vbi1jYWNoZWFibGUgbG9hZHMKK2V2ZW50OjBYMjUzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1UxX05DTERfR1JQMzcgOiAoR3JvdXAgMzcgcG1fbWlzY19sb2FkKSBMU1UxIG5vbi1jYWNoZWFibGUgbG9hZHMKK2V2ZW50OjBYMjU0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDM3IDogKEdyb3VwIDM3IHBtX21pc2NfbG9hZCkgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgyNTUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDM3IDogKEdyb3VwIDM3IHBtX21pc2NfbG9hZCkgUnVuIGN5Y2xlcworCisjR3JvdXAgMzggcG1faWNfZGVtYW5kLCBJQ2FjaGUgZGVtYW5kIGZyb20gQlIgcmVkaXJlY3QKK2V2ZW50OjBYMjYwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1UwX0JVU1lfUkVKRUNUX0dSUDM4IDogKEdyb3VwIDM4IHBtX2ljX2RlbWFuZCkgTFNVMCBidXN5IGR1ZSB0byByZWplY3QKK2V2ZW50OjBYMjYxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1UxX0JVU1lfUkVKRUNUX0dSUDM4IDogKEdyb3VwIDM4IHBtX2ljX2RlbWFuZCkgTFNVMSBidXN5IGR1ZSB0byByZWplY3QKK2V2ZW50OjBYMjYyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JQ19ERU1BTkRfTDJfQkhUX1JFRElSRUNUX0dSUDM4IDogKEdyb3VwIDM4IHBtX2ljX2RlbWFuZCkgTDIgSSBjYWNoZSBkZW1hbmQgcmVxdWVzdCBkdWUgdG8gQkhUIHJlZGlyZWN0CitldmVudDowWDI2MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSUNfREVNQU5EX0wyX0JSX1JFRElSRUNUX0dSUDM4IDogKEdyb3VwIDM4IHBtX2ljX2RlbWFuZCkgTDIgSSBjYWNoZSBkZW1hbmQgcmVxdWVzdCBkdWUgdG8gYnJhbmNoIHJlZGlyZWN0CitldmVudDowWDI2NCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAzOCA6IChHcm91cCAzOCBwbV9pY19kZW1hbmQpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMjY1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAzOCA6IChHcm91cCAzOCBwbV9pY19kZW1hbmQpIFJ1biBjeWNsZXMKKworI0dyb3VwIDM5IHBtX2ljX3ByZWYsIElDYWNoZSBwcmVmZXRjaAorZXZlbnQ6MFgyNzAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lFUkFUX1hMQVRFX1dSX0dSUDM5IDogKEdyb3VwIDM5IHBtX2ljX3ByZWYpIFRyYW5zbGF0aW9uIHdyaXR0ZW4gdG8gaWVyYXQKK2V2ZW50OjBYMjcxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JQ19QUkVGX1JFUV9HUlAzOSA6IChHcm91cCAzOSBwbV9pY19wcmVmKSBJbnN0cnVjdGlvbiBwcmVmZXRjaCByZXF1ZXN0cworZXZlbnQ6MFgyNzIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lDX1BSRUZfSU5TVEFMTF9HUlAzOSA6IChHcm91cCAzOSBwbV9pY19wcmVmKSBJbnN0cnVjdGlvbiBwcmVmZXRjaGVkIGluc3RhbGxlZCBpbiBwcmVmZXRjaAorZXZlbnQ6MFgyNzMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNXzBJTlNUX0ZFVENIX0dSUDM5IDogKEdyb3VwIDM5IHBtX2ljX3ByZWYpIE5vIGluc3RydWN0aW9ucyBmZXRjaGVkCitldmVudDowWDI3NCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAzOSA6IChHcm91cCAzOSBwbV9pY19wcmVmKSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDI3NSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQMzkgOiAoR3JvdXAgMzkgcG1faWNfcHJlZikgUnVuIGN5Y2xlcworCisjR3JvdXAgNDAgcG1faWNfbWlzcywgSUNhY2hlIG1pc3NlcworZXZlbnQ6MFgyODAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0dSUF9JQ19NSVNTX05PTlNQRUNfR1JQNDAgOiAoR3JvdXAgNDAgcG1faWNfbWlzcykgR3JvdXAgZXhwZXJpZW5jZWQgbm9uLXNwZWN1bGF0aXZlIEkgY2FjaGUgbWlzcworZXZlbnQ6MFgyODEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0dSUF9JQ19NSVNTX0dSUDQwIDogKEdyb3VwIDQwIHBtX2ljX21pc3MpIEdyb3VwIGV4cGVyaWVuY2VkIEkgY2FjaGUgbWlzcworZXZlbnQ6MFgyODIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wxX0RDQUNIRV9SRUxPQURfVkFMSURfR1JQNDAgOiAoR3JvdXAgNDAgcG1faWNfbWlzcykgTDEgcmVsb2FkIGRhdGEgc291cmNlIHZhbGlkCitldmVudDowWDI4MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU9QU19DTVBMX0dSUDQwIDogKEdyb3VwIDQwIHBtX2ljX21pc3MpIElPUFMgaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgyODQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQNDAgOiAoR3JvdXAgNDAgcG1faWNfbWlzcykgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgyODUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDQwIDogKEdyb3VwIDQwIHBtX2ljX21pc3MpIFJ1biBjeWNsZXMKKworI0dyb3VwIDQxIHBtX2JyYW5jaF9taXNzLCBCcmFuY2ggbWlzcHJlZGljdCwgVExCIGFuZCBTTEIgbWlzc2VzCitldmVudDowWDI5MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fVExCX01JU1NfR1JQNDEgOiAoR3JvdXAgNDEgcG1fYnJhbmNoX21pc3MpIFRMQiBtaXNzZXMKK2V2ZW50OjBYMjkxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9TTEJfTUlTU19HUlA0MSA6IChHcm91cCA0MSBwbV9icmFuY2hfbWlzcykgU0xCIG1pc3NlcworZXZlbnQ6MFgyOTIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0JSX01QUkVEX0NSX0dSUDQxIDogKEdyb3VwIDQxIHBtX2JyYW5jaF9taXNzKSBCcmFuY2ggbWlzcHJlZGljdGlvbnMgZHVlIHRvIENSIGJpdCBzZXR0aW5nCitldmVudDowWDI5MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fQlJfTVBSRURfVEFfR1JQNDEgOiAoR3JvdXAgNDEgcG1fYnJhbmNoX21pc3MpIEJyYW5jaCBtaXNwcmVkaWN0aW9ucyBkdWUgdG8gdGFyZ2V0IGFkZHJlc3MKK2V2ZW50OjBYMjk0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDQxIDogKEdyb3VwIDQxIHBtX2JyYW5jaF9taXNzKSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDI5NSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQNDEgOiAoR3JvdXAgNDEgcG1fYnJhbmNoX21pc3MpIFJ1biBjeWNsZXMKKworI0dyb3VwIDQyIHBtX2JyYW5jaDEsIEJyYW5jaCBvcGVyYXRpb25zCitldmVudDowWDJBMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fQlJfVU5DT05EX0dSUDQyIDogKEdyb3VwIDQyIHBtX2JyYW5jaDEpIFVuY29uZGl0aW9uYWwgYnJhbmNoCitldmVudDowWDJBMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fQlJfUFJFRF9UQV9HUlA0MiA6IChHcm91cCA0MiBwbV9icmFuY2gxKSBBIGNvbmRpdGlvbmFsIGJyYW5jaCB3YXMgcHJlZGljdGVkLCB0YXJnZXQgcHJlZGljdGlvbgorZXZlbnQ6MFgyQTIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0JSX1BSRURfQ1JfR1JQNDIgOiAoR3JvdXAgNDIgcG1fYnJhbmNoMSkgQSBjb25kaXRpb25hbCBicmFuY2ggd2FzIHByZWRpY3RlZCwgQ1IgcHJlZGljdGlvbgorZXZlbnQ6MFgyQTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0JSX1BSRURfQ1JfVEFfR1JQNDIgOiAoR3JvdXAgNDIgcG1fYnJhbmNoMSkgQSBjb25kaXRpb25hbCBicmFuY2ggd2FzIHByZWRpY3RlZCwgQ1IgYW5kIHRhcmdldCBwcmVkaWN0aW9uCitldmVudDowWDJBNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlA0MiA6IChHcm91cCA0MiBwbV9icmFuY2gxKSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDJBNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQNDIgOiAoR3JvdXAgNDIgcG1fYnJhbmNoMSkgUnVuIGN5Y2xlcworCisjR3JvdXAgNDMgcG1fYnJhbmNoMiwgQnJhbmNoIG9wZXJhdGlvbnMKK2V2ZW50OjBYMkIwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9HUlBfQlJfUkVESVJfTk9OU1BFQ19HUlA0MyA6IChHcm91cCA0MyBwbV9icmFuY2gyKSBHcm91cCBleHBlcmllbmNlZCBub24tc3BlY3VsYXRpdmUgYnJhbmNoIHJlZGlyZWN0CitldmVudDowWDJCMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fR1JQX0JSX1JFRElSX0dSUDQzIDogKEdyb3VwIDQzIHBtX2JyYW5jaDIpIEdyb3VwIGV4cGVyaWVuY2VkIGJyYW5jaCByZWRpcmVjdAorZXZlbnQ6MFgyQjIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZMVVNIX0JSX01QUkVEX0dSUDQzIDogKEdyb3VwIDQzIHBtX2JyYW5jaDIpIEZsdXNoIGNhdXNlZCBieSBicmFuY2ggbWlzcHJlZGljdAorZXZlbnQ6MFgyQjMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lPUFNfQ01QTF9HUlA0MyA6IChHcm91cCA0MyBwbV9icmFuY2gyKSBJT1BTIGluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMkI0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDQzIDogKEdyb3VwIDQzIHBtX2JyYW5jaDIpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMkI1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlA0MyA6IChHcm91cCA0MyBwbV9icmFuY2gyKSBSdW4gY3ljbGVzCisKKyNHcm91cCA0NCBwbV9MMV90bGJtaXNzLCBMMSBsb2FkIGFuZCBUTEIgbWlzc2VzCitldmVudDowWDJDMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fREFUQV9UQUJMRVdBTEtfQ1lDX0dSUDQ0IDogKEdyb3VwIDQ0IHBtX0wxX3RsYm1pc3MpIEN5Y2xlcyBkb2luZyBkYXRhIHRhYmxld2Fsa3MKK2V2ZW50OjBYMkMxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EVExCX01JU1NfR1JQNDQgOiAoR3JvdXAgNDQgcG1fTDFfdGxibWlzcykgRGF0YSBUTEIgbWlzc2VzCitldmVudDowWDJDMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTERfTUlTU19MMV9HUlA0NCA6IChHcm91cCA0NCBwbV9MMV90bGJtaXNzKSBMMSBEIGNhY2hlIGxvYWQgbWlzc2VzCitldmVudDowWDJDMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTERfUkVGX0wxX0dSUDQ0IDogKEdyb3VwIDQ0IHBtX0wxX3RsYm1pc3MpIEwxIEQgY2FjaGUgbG9hZCByZWZlcmVuY2VzCitldmVudDowWDJDNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlA0NCA6IChHcm91cCA0NCBwbV9MMV90bGJtaXNzKSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDJDNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQNDQgOiAoR3JvdXAgNDQgcG1fTDFfdGxibWlzcykgUnVuIGN5Y2xlcworCisjR3JvdXAgNDUgcG1fTDFfREVSQVRfbWlzcywgTDEgc3RvcmUgYW5kIERFUkFUIG1pc3NlcworZXZlbnQ6MFgyRDAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RBVEFfRlJPTV9MMl9HUlA0NSA6IChHcm91cCA0NSBwbV9MMV9ERVJBVF9taXNzKSBEYXRhIGxvYWRlZCBmcm9tIEwyCitldmVudDowWDJEMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVX0RFUkFUX01JU1NfR1JQNDUgOiAoR3JvdXAgNDUgcG1fTDFfREVSQVRfbWlzcykgREVSQVQgbWlzc2VzCitldmVudDowWDJEMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fU1RfUkVGX0wxX0dSUDQ1IDogKEdyb3VwIDQ1IHBtX0wxX0RFUkFUX21pc3MpIEwxIEQgY2FjaGUgc3RvcmUgcmVmZXJlbmNlcworZXZlbnQ6MFgyRDMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1NUX01JU1NfTDFfR1JQNDUgOiAoR3JvdXAgNDUgcG1fTDFfREVSQVRfbWlzcykgTDEgRCBjYWNoZSBzdG9yZSBtaXNzZXMKK2V2ZW50OjBYMkQ0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDQ1IDogKEdyb3VwIDQ1IHBtX0wxX0RFUkFUX21pc3MpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMkQ1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlA0NSA6IChHcm91cCA0NSBwbV9MMV9ERVJBVF9taXNzKSBSdW4gY3ljbGVzCisKKyNHcm91cCA0NiBwbV9MMV9zbGJtaXNzLCBMMSBsb2FkIGFuZCBTTEIgbWlzc2VzCitldmVudDowWDJFMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRFNMQl9NSVNTX0dSUDQ2IDogKEdyb3VwIDQ2IHBtX0wxX3NsYm1pc3MpIERhdGEgU0xCIG1pc3NlcworZXZlbnQ6MFgyRTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lTTEJfTUlTU19HUlA0NiA6IChHcm91cCA0NiBwbV9MMV9zbGJtaXNzKSBJbnN0cnVjdGlvbiBTTEIgbWlzc2VzCitldmVudDowWDJFMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTERfTUlTU19MMV9MU1UwX0dSUDQ2IDogKEdyb3VwIDQ2IHBtX0wxX3NsYm1pc3MpIExTVTAgTDEgRCBjYWNoZSBsb2FkIG1pc3NlcworZXZlbnQ6MFgyRTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xEX01JU1NfTDFfTFNVMV9HUlA0NiA6IChHcm91cCA0NiBwbV9MMV9zbGJtaXNzKSBMU1UxIEwxIEQgY2FjaGUgbG9hZCBtaXNzZXMKK2V2ZW50OjBYMkU0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDQ2IDogKEdyb3VwIDQ2IHBtX0wxX3NsYm1pc3MpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMkU1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlA0NiA6IChHcm91cCA0NiBwbV9MMV9zbGJtaXNzKSBSdW4gY3ljbGVzCisKKyNHcm91cCA0NyBwbV9MMV9kdGxibWlzc180SywgTDEgbG9hZCByZWZlcmVuY2VzIGFuZCA0SyBEYXRhIFRMQiByZWZlcmVuY2VzIGFuZCBtaXNzZXMKK2V2ZW50OjBYMkYwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EVExCX1JFRl80S19HUlA0NyA6IChHcm91cCA0NyBwbV9MMV9kdGxibWlzc180SykgRGF0YSBUTEIgcmVmZXJlbmNlIGZvciA0SyBwYWdlCitldmVudDowWDJGMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRFRMQl9NSVNTXzRLX0dSUDQ3IDogKEdyb3VwIDQ3IHBtX0wxX2R0bGJtaXNzXzRLKSBEYXRhIFRMQiBtaXNzIGZvciA0SyBwYWdlCitldmVudDowWDJGMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTERfUkVGX0wxX0xTVTBfR1JQNDcgOiAoR3JvdXAgNDcgcG1fTDFfZHRsYm1pc3NfNEspIExTVTAgTDEgRCBjYWNoZSBsb2FkIHJlZmVyZW5jZXMKK2V2ZW50OjBYMkYzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MRF9SRUZfTDFfTFNVMV9HUlA0NyA6IChHcm91cCA0NyBwbV9MMV9kdGxibWlzc180SykgTFNVMSBMMSBEIGNhY2hlIGxvYWQgcmVmZXJlbmNlcworZXZlbnQ6MFgyRjQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQNDcgOiAoR3JvdXAgNDcgcG1fTDFfZHRsYm1pc3NfNEspIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMkY1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlA0NyA6IChHcm91cCA0NyBwbV9MMV9kdGxibWlzc180SykgUnVuIGN5Y2xlcworCisjR3JvdXAgNDggcG1fTDFfZHRsYm1pc3NfMTZNLCBMMSBzdG9yZSByZWZlcmVuY2VzIGFuZCAxNk0gRGF0YSBUTEIgcmVmZXJlbmNlcyBhbmQgbWlzc2VzCitldmVudDowWDMwMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRFRMQl9SRUZfMTZNX0dSUDQ4IDogKEdyb3VwIDQ4IHBtX0wxX2R0bGJtaXNzXzE2TSkgRGF0YSBUTEIgcmVmZXJlbmNlIGZvciAxNk0gcGFnZQorZXZlbnQ6MFgzMDEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RUTEJfTUlTU18xNk1fR1JQNDggOiAoR3JvdXAgNDggcG1fTDFfZHRsYm1pc3NfMTZNKSBEYXRhIFRMQiBtaXNzIGZvciAxNk0gcGFnZQorZXZlbnQ6MFgzMDIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1NUX1JFRl9MMV9MU1UwX0dSUDQ4IDogKEdyb3VwIDQ4IHBtX0wxX2R0bGJtaXNzXzE2TSkgTFNVMCBMMSBEIGNhY2hlIHN0b3JlIHJlZmVyZW5jZXMKK2V2ZW50OjBYMzAzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9TVF9SRUZfTDFfTFNVMV9HUlA0OCA6IChHcm91cCA0OCBwbV9MMV9kdGxibWlzc18xNk0pIExTVTEgTDEgRCBjYWNoZSBzdG9yZSByZWZlcmVuY2VzCitldmVudDowWDMwNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlA0OCA6IChHcm91cCA0OCBwbV9MMV9kdGxibWlzc18xNk0pIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMzA1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlA0OCA6IChHcm91cCA0OCBwbV9MMV9kdGxibWlzc18xNk0pIFJ1biBjeWNsZXMKKworI0dyb3VwIDQ5IHBtX2Rzb3VyY2UxLCBMMyBjYWNoZSBhbmQgbWVtb3J5IGRhdGEgYWNjZXNzCitldmVudDowWDMxMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fREFUQV9GUk9NX0wzX0dSUDQ5IDogKEdyb3VwIDQ5IHBtX2Rzb3VyY2UxKSBEYXRhIGxvYWRlZCBmcm9tIEwzCitldmVudDowWDMxMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fREFUQV9GUk9NX0xNRU1fR1JQNDkgOiAoR3JvdXAgNDkgcG1fZHNvdXJjZTEpIERhdGEgbG9hZGVkIGZyb20gbG9jYWwgbWVtb3J5CitldmVudDowWDMxMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRkxVU0hfR1JQNDkgOiAoR3JvdXAgNDkgcG1fZHNvdXJjZTEpIEZsdXNoZXMKK2V2ZW50OjBYMzEzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JT1BTX0NNUExfR1JQNDkgOiAoR3JvdXAgNDkgcG1fZHNvdXJjZTEpIElPUFMgaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgzMTQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQNDkgOiAoR3JvdXAgNDkgcG1fZHNvdXJjZTEpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMzE1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlA0OSA6IChHcm91cCA0OSBwbV9kc291cmNlMSkgUnVuIGN5Y2xlcworCisjR3JvdXAgNTAgcG1fZHNvdXJjZTIsIEwzIGNhY2hlIGFuZCBtZW1vcnkgZGF0YSBhY2Nlc3MKK2V2ZW50OjBYMzIwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQVRBX0ZST01fTDNfR1JQNTAgOiAoR3JvdXAgNTAgcG1fZHNvdXJjZTIpIERhdGEgbG9hZGVkIGZyb20gTDMKK2V2ZW50OjBYMzIxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQVRBX0ZST01fTE1FTV9HUlA1MCA6IChHcm91cCA1MCBwbV9kc291cmNlMikgRGF0YSBsb2FkZWQgZnJvbSBsb2NhbCBtZW1vcnkKK2V2ZW50OjBYMzIyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQVRBX0ZST01fTDJNSVNTX0dSUDUwIDogKEdyb3VwIDUwIHBtX2Rzb3VyY2UyKSBEYXRhIGxvYWRlZCBtaXNzZWQgTDIKK2V2ZW50OjBYMzIzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQVRBX0ZST01fUk1FTV9HUlA1MCA6IChHcm91cCA1MCBwbV9kc291cmNlMikgRGF0YSBsb2FkZWQgZnJvbSByZW1vdGUgbWVtb3J5CitldmVudDowWDMyNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlA1MCA6IChHcm91cCA1MCBwbV9kc291cmNlMikgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgzMjUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDUwIDogKEdyb3VwIDUwIHBtX2Rzb3VyY2UyKSBSdW4gY3ljbGVzCisKKyNHcm91cCA1MSBwbV9kc291cmNlX0wyLCBMMiBjYWNoZSBkYXRhIGFjY2VzcworZXZlbnQ6MFgzMzAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RBVEFfRlJPTV9MMjVfU0hSX0dSUDUxIDogKEdyb3VwIDUxIHBtX2Rzb3VyY2VfTDIpIERhdGEgbG9hZGVkIGZyb20gTDIuNSBzaGFyZWQKK2V2ZW50OjBYMzMxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQVRBX0ZST01fTDI1X01PRF9HUlA1MSA6IChHcm91cCA1MSBwbV9kc291cmNlX0wyKSBEYXRhIGxvYWRlZCBmcm9tIEwyLjUgbW9kaWZpZWQKK2V2ZW50OjBYMzMyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQVRBX0ZST01fTDI3NV9TSFJfR1JQNTEgOiAoR3JvdXAgNTEgcG1fZHNvdXJjZV9MMikgRGF0YSBsb2FkZWQgZnJvbSBMMi43NSBzaGFyZWQKK2V2ZW50OjBYMzMzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQVRBX0ZST01fTDI3NV9NT0RfR1JQNTEgOiAoR3JvdXAgNTEgcG1fZHNvdXJjZV9MMikgRGF0YSBsb2FkZWQgZnJvbSBMMi43NSBtb2RpZmllZAorZXZlbnQ6MFgzMzQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQNTEgOiAoR3JvdXAgNTEgcG1fZHNvdXJjZV9MMikgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgzMzUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDUxIDogKEdyb3VwIDUxIHBtX2Rzb3VyY2VfTDIpIFJ1biBjeWNsZXMKKworI0dyb3VwIDUyIHBtX2Rzb3VyY2VfTDMsIEwzIGNhY2hlIGRhdGEgYWNjZXNzCitldmVudDowWDM0MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fREFUQV9GUk9NX0wzNV9TSFJfR1JQNTIgOiAoR3JvdXAgNTIgcG1fZHNvdXJjZV9MMykgRGF0YSBsb2FkZWQgZnJvbSBMMy41IHNoYXJlZAorZXZlbnQ6MFgzNDEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RBVEFfRlJPTV9MMzVfTU9EX0dSUDUyIDogKEdyb3VwIDUyIHBtX2Rzb3VyY2VfTDMpIERhdGEgbG9hZGVkIGZyb20gTDMuNSBtb2RpZmllZAorZXZlbnQ6MFgzNDIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RBVEFfRlJPTV9MMzc1X1NIUl9HUlA1MiA6IChHcm91cCA1MiBwbV9kc291cmNlX0wzKSBEYXRhIGxvYWRlZCBmcm9tIEwzLjc1IHNoYXJlZAorZXZlbnQ6MFgzNDMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RBVEFfRlJPTV9MMzc1X01PRF9HUlA1MiA6IChHcm91cCA1MiBwbV9kc291cmNlX0wzKSBEYXRhIGxvYWRlZCBmcm9tIEwzLjc1IG1vZGlmaWVkCitldmVudDowWDM0NCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlA1MiA6IChHcm91cCA1MiBwbV9kc291cmNlX0wzKSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDM0NSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQNTIgOiAoR3JvdXAgNTIgcG1fZHNvdXJjZV9MMykgUnVuIGN5Y2xlcworCisjR3JvdXAgNTMgcG1faXNvdXJjZTEsIEluc3RydWN0aW9uIHNvdXJjZSBpbmZvcm1hdGlvbgorZXZlbnQ6MFgzNTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lOU1RfRlJPTV9MM19HUlA1MyA6IChHcm91cCA1MyBwbV9pc291cmNlMSkgSW5zdHJ1Y3Rpb24gZmV0Y2hlZCBmcm9tIEwzCitldmVudDowWDM1MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU5TVF9GUk9NX0wxX0dSUDUzIDogKEdyb3VwIDUzIHBtX2lzb3VyY2UxKSBJbnN0cnVjdGlvbiBmZXRjaGVkIGZyb20gTDEKK2V2ZW50OjBYMzUyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JTlNUX0ZST01fUFJFRl9HUlA1MyA6IChHcm91cCA1MyBwbV9pc291cmNlMSkgSW5zdHJ1Y3Rpb25zIGZldGNoZWQgZnJvbSBwcmVmZXRjaAorZXZlbnQ6MFgzNTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lOU1RfRlJPTV9STUVNX0dSUDUzIDogKEdyb3VwIDUzIHBtX2lzb3VyY2UxKSBJbnN0cnVjdGlvbiBmZXRjaGVkIGZyb20gcmVtb3RlIG1lbW9yeQorZXZlbnQ6MFgzNTQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQNTMgOiAoR3JvdXAgNTMgcG1faXNvdXJjZTEpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMzU1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlA1MyA6IChHcm91cCA1MyBwbV9pc291cmNlMSkgUnVuIGN5Y2xlcworCisjR3JvdXAgNTQgcG1faXNvdXJjZTIsIEluc3RydWN0aW9uIHNvdXJjZSBpbmZvcm1hdGlvbgorZXZlbnQ6MFgzNjAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lOU1RfRlJPTV9MMl9HUlA1NCA6IChHcm91cCA1NCBwbV9pc291cmNlMikgSW5zdHJ1Y3Rpb25zIGZldGNoZWQgZnJvbSBMMgorZXZlbnQ6MFgzNjEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lOU1RfRlJPTV9MTUVNX0dSUDU0IDogKEdyb3VwIDU0IHBtX2lzb3VyY2UyKSBJbnN0cnVjdGlvbiBmZXRjaGVkIGZyb20gbG9jYWwgbWVtb3J5CitldmVudDowWDM2MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU9QU19DTVBMX0dSUDU0IDogKEdyb3VwIDU0IHBtX2lzb3VyY2UyKSBJT1BTIGluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMzYzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV8wSU5TVF9GRVRDSF9HUlA1NCA6IChHcm91cCA1NCBwbV9pc291cmNlMikgTm8gaW5zdHJ1Y3Rpb25zIGZldGNoZWQKK2V2ZW50OjBYMzY0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDU0IDogKEdyb3VwIDU0IHBtX2lzb3VyY2UyKSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDM2NSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQNTQgOiAoR3JvdXAgNTQgcG1faXNvdXJjZTIpIFJ1biBjeWNsZXMKKworI0dyb3VwIDU1IHBtX2lzb3VyY2VfTDIsIEwyIGluc3RydWN0aW9uIHNvdXJjZSBpbmZvcm1hdGlvbgorZXZlbnQ6MFgzNzAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lOU1RfRlJPTV9MMjVfU0hSX0dSUDU1IDogKEdyb3VwIDU1IHBtX2lzb3VyY2VfTDIpIEluc3RydWN0aW9uIGZldGNoZWQgZnJvbSBMMi41IHNoYXJlZAorZXZlbnQ6MFgzNzEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lOU1RfRlJPTV9MMjVfTU9EX0dSUDU1IDogKEdyb3VwIDU1IHBtX2lzb3VyY2VfTDIpIEluc3RydWN0aW9uIGZldGNoZWQgZnJvbSBMMi41IG1vZGlmaWVkCitldmVudDowWDM3MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU5TVF9GUk9NX0wyNzVfU0hSX0dSUDU1IDogKEdyb3VwIDU1IHBtX2lzb3VyY2VfTDIpIEluc3RydWN0aW9uIGZldGNoZWQgZnJvbSBMMi43NSBzaGFyZWQKK2V2ZW50OjBYMzczIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JTlNUX0ZST01fTDI3NV9NT0RfR1JQNTUgOiAoR3JvdXAgNTUgcG1faXNvdXJjZV9MMikgSW5zdHJ1Y3Rpb24gZmV0Y2hlZCBmcm9tIEwyLjc1IG1vZGlmaWVkCitldmVudDowWDM3NCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlA1NSA6IChHcm91cCA1NSBwbV9pc291cmNlX0wyKSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDM3NSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQNTUgOiAoR3JvdXAgNTUgcG1faXNvdXJjZV9MMikgUnVuIGN5Y2xlcworCisjR3JvdXAgNTYgcG1faXNvdXJjZV9MMywgTDMgaW5zdHJ1Y3Rpb24gc291cmNlIGluZm9ybWF0aW9uCitldmVudDowWDM4MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU5TVF9GUk9NX0wzNV9TSFJfR1JQNTYgOiAoR3JvdXAgNTYgcG1faXNvdXJjZV9MMykgSW5zdHJ1Y3Rpb24gZmV0Y2hlZCBmcm9tIEwzLjUgc2hhcmVkCitldmVudDowWDM4MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU5TVF9GUk9NX0wzNV9NT0RfR1JQNTYgOiAoR3JvdXAgNTYgcG1faXNvdXJjZV9MMykgSW5zdHJ1Y3Rpb24gZmV0Y2hlZCBmcm9tIEwzLjUgbW9kaWZpZWQKK2V2ZW50OjBYMzgyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JTlNUX0ZST01fTDM3NV9TSFJfR1JQNTYgOiAoR3JvdXAgNTYgcG1faXNvdXJjZV9MMykgSW5zdHJ1Y3Rpb24gZmV0Y2hlZCBmcm9tIEwzLjc1IHNoYXJlZAorZXZlbnQ6MFgzODMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lOU1RfRlJPTV9MMzc1X01PRF9HUlA1NiA6IChHcm91cCA1NiBwbV9pc291cmNlX0wzKSBJbnN0cnVjdGlvbiBmZXRjaGVkIGZyb20gTDMuNzUgbW9kaWZpZWQKK2V2ZW50OjBYMzg0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDU2IDogKEdyb3VwIDU2IHBtX2lzb3VyY2VfTDMpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMzg1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlA1NiA6IChHcm91cCA1NiBwbV9pc291cmNlX0wzKSBSdW4gY3ljbGVzCisKKyNHcm91cCA1NyBwbV9wdGVnX3NvdXJjZTEsIFBURUcgc291cmNlIGluZm9ybWF0aW9uCitldmVudDowWDM5MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUFRFR19GUk9NX0wyNV9TSFJfR1JQNTcgOiAoR3JvdXAgNTcgcG1fcHRlZ19zb3VyY2UxKSBQVEVHIGxvYWRlZCBmcm9tIEwyLjUgc2hhcmVkCitldmVudDowWDM5MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUFRFR19GUk9NX0wyNV9NT0RfR1JQNTcgOiAoR3JvdXAgNTcgcG1fcHRlZ19zb3VyY2UxKSBQVEVHIGxvYWRlZCBmcm9tIEwyLjUgbW9kaWZpZWQKK2V2ZW50OjBYMzkyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9QVEVHX0ZST01fTDI3NV9TSFJfR1JQNTcgOiAoR3JvdXAgNTcgcG1fcHRlZ19zb3VyY2UxKSBQVEVHIGxvYWRlZCBmcm9tIEwyLjc1IHNoYXJlZAorZXZlbnQ6MFgzOTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1BURUdfRlJPTV9MMjc1X01PRF9HUlA1NyA6IChHcm91cCA1NyBwbV9wdGVnX3NvdXJjZTEpIFBURUcgbG9hZGVkIGZyb20gTDIuNzUgbW9kaWZpZWQKK2V2ZW50OjBYMzk0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDU3IDogKEdyb3VwIDU3IHBtX3B0ZWdfc291cmNlMSkgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgzOTUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDU3IDogKEdyb3VwIDU3IHBtX3B0ZWdfc291cmNlMSkgUnVuIGN5Y2xlcworCisjR3JvdXAgNTggcG1fcHRlZ19zb3VyY2UyLCBQVEVHIHNvdXJjZSBpbmZvcm1hdGlvbgorZXZlbnQ6MFgzQTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1BURUdfRlJPTV9MMzVfU0hSX0dSUDU4IDogKEdyb3VwIDU4IHBtX3B0ZWdfc291cmNlMikgUFRFRyBsb2FkZWQgZnJvbSBMMy41IHNoYXJlZAorZXZlbnQ6MFgzQTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1BURUdfRlJPTV9MMzVfTU9EX0dSUDU4IDogKEdyb3VwIDU4IHBtX3B0ZWdfc291cmNlMikgUFRFRyBsb2FkZWQgZnJvbSBMMy41IG1vZGlmaWVkCitldmVudDowWDNBMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUFRFR19GUk9NX0wzNzVfU0hSX0dSUDU4IDogKEdyb3VwIDU4IHBtX3B0ZWdfc291cmNlMikgUFRFRyBsb2FkZWQgZnJvbSBMMy43NSBzaGFyZWQKK2V2ZW50OjBYM0EzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9QVEVHX0ZST01fTDM3NV9NT0RfR1JQNTggOiAoR3JvdXAgNTggcG1fcHRlZ19zb3VyY2UyKSBQVEVHIGxvYWRlZCBmcm9tIEwzLjc1IG1vZGlmaWVkCitldmVudDowWDNBNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlA1OCA6IChHcm91cCA1OCBwbV9wdGVnX3NvdXJjZTIpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYM0E1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlA1OCA6IChHcm91cCA1OCBwbV9wdGVnX3NvdXJjZTIpIFJ1biBjeWNsZXMKKworI0dyb3VwIDU5IHBtX3B0ZWdfc291cmNlMywgUFRFRyBzb3VyY2UgaW5mb3JtYXRpb24KK2V2ZW50OjBYM0IwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9QVEVHX0ZST01fTDJfR1JQNTkgOiAoR3JvdXAgNTkgcG1fcHRlZ19zb3VyY2UzKSBQVEVHIGxvYWRlZCBmcm9tIEwyCitldmVudDowWDNCMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUFRFR19GUk9NX0xNRU1fR1JQNTkgOiAoR3JvdXAgNTkgcG1fcHRlZ19zb3VyY2UzKSBQVEVHIGxvYWRlZCBmcm9tIGxvY2FsIG1lbW9yeQorZXZlbnQ6MFgzQjIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1BURUdfRlJPTV9MMk1JU1NfR1JQNTkgOiAoR3JvdXAgNTkgcG1fcHRlZ19zb3VyY2UzKSBQVEVHIGxvYWRlZCBmcm9tIEwyIG1pc3MKK2V2ZW50OjBYM0IzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9QVEVHX0ZST01fUk1FTV9HUlA1OSA6IChHcm91cCA1OSBwbV9wdGVnX3NvdXJjZTMpIFBURUcgbG9hZGVkIGZyb20gcmVtb3RlIG1lbW9yeQorZXZlbnQ6MFgzQjQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQNTkgOiAoR3JvdXAgNTkgcG1fcHRlZ19zb3VyY2UzKSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDNCNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQNTkgOiAoR3JvdXAgNTkgcG1fcHRlZ19zb3VyY2UzKSBSdW4gY3ljbGVzCisKKyNHcm91cCA2MCBwbV9wdGVnX3NvdXJjZTQsIEwzIFBURUcgYW5kIGdyb3VwIGRpc3B0YWNoIGV2ZW50cworZXZlbnQ6MFgzQzAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1BURUdfRlJPTV9MM19HUlA2MCA6IChHcm91cCA2MCBwbV9wdGVnX3NvdXJjZTQpIFBURUcgbG9hZGVkIGZyb20gTDMKK2V2ZW50OjBYM0MxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9HUlBfRElTUF9HUlA2MCA6IChHcm91cCA2MCBwbV9wdGVnX3NvdXJjZTQpIEdyb3VwIGRpc3BhdGNoZXMKK2V2ZW50OjBYM0MyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9HUlBfRElTUF9TVUNDRVNTX0dSUDYwIDogKEdyb3VwIDYwIHBtX3B0ZWdfc291cmNlNCkgR3JvdXAgZGlzcGF0Y2ggc3VjY2VzcworZXZlbnQ6MFgzQzMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RDX0lOVl9MMl9HUlA2MCA6IChHcm91cCA2MCBwbV9wdGVnX3NvdXJjZTQpIEwxIEQgY2FjaGUgZW50cmllcyBpbnZhbGlkYXRlZCBmcm9tIEwyCitldmVudDowWDNDNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlA2MCA6IChHcm91cCA2MCBwbV9wdGVnX3NvdXJjZTQpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYM0M1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlA2MCA6IChHcm91cCA2MCBwbV9wdGVnX3NvdXJjZTQpIFJ1biBjeWNsZXMKKworI0dyb3VwIDYxIHBtX0wyU0FfbGQsIEwyIHNsaWNlIEEgbG9hZCBldmVudHMKK2V2ZW50OjBYM0QwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMlNBX1JDTERfRElTUF9HUlA2MSA6IChHcm91cCA2MSBwbV9MMlNBX2xkKSBMMiBTbGljZSBBIFJDIGxvYWQgZGlzcGF0Y2ggYXR0ZW1wdAorZXZlbnQ6MFgzRDEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wyU0FfUkNMRF9ESVNQX0ZBSUxfUkNfRlVMTF9HUlA2MSA6IChHcm91cCA2MSBwbV9MMlNBX2xkKSBMMiBTbGljZSBBIFJDIGxvYWQgZGlzcGF0Y2ggYXR0ZW1wdCBmYWlsZWQgZHVlIHRvIGFsbCBSQyBmdWxsCitldmVudDowWDNEMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDJTQV9SQ0xEX0RJU1BfRkFJTF9BRERSX0dSUDYxIDogKEdyb3VwIDYxIHBtX0wyU0FfbGQpIEwyIFNsaWNlIEEgUkMgbG9hZCBkaXNwYXRjaCBhdHRlbXB0IGZhaWxlZCBkdWUgdG8gYWRkcmVzcyBjb2xsaXNpb24gd2l0aCBSQy9DTy9TTi9TUQorZXZlbnQ6MFgzRDMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wyU0FfUkNMRF9ESVNQX0ZBSUxfT1RIRVJfR1JQNjEgOiAoR3JvdXAgNjEgcG1fTDJTQV9sZCkgTDIgU2xpY2UgQSBSQyBsb2FkIGRpc3BhdGNoIGF0dGVtcHQgZmFpbGVkIGR1ZSB0byBvdGhlciByZWFzb25zCitldmVudDowWDNENCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlA2MSA6IChHcm91cCA2MSBwbV9MMlNBX2xkKSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDNENSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQNjEgOiAoR3JvdXAgNjEgcG1fTDJTQV9sZCkgUnVuIGN5Y2xlcworCisjR3JvdXAgNjIgcG1fTDJTQV9zdCwgTDIgc2xpY2UgQSBzdG9yZSBldmVudHMKK2V2ZW50OjBYM0UwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMlNBX1JDU1RfRElTUF9HUlA2MiA6IChHcm91cCA2MiBwbV9MMlNBX3N0KSBMMiBTbGljZSBBIFJDIHN0b3JlIGRpc3BhdGNoIGF0dGVtcHQKK2V2ZW50OjBYM0UxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMlNBX1JDU1RfRElTUF9GQUlMX1JDX0ZVTExfR1JQNjIgOiAoR3JvdXAgNjIgcG1fTDJTQV9zdCkgTDIgU2xpY2UgQSBSQyBzdG9yZSBkaXNwYXRjaCBhdHRlbXB0IGZhaWxlZCBkdWUgdG8gYWxsIFJDIGZ1bGwKK2V2ZW50OjBYM0UyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMlNBX1JDU1RfRElTUF9GQUlMX0FERFJfR1JQNjIgOiAoR3JvdXAgNjIgcG1fTDJTQV9zdCkgTDIgU2xpY2UgQSBSQyBzdG9yZSBkaXNwYXRjaCBhdHRlbXB0IGZhaWxlZCBkdWUgdG8gYWRkcmVzcyBjb2xsaXNpb24gd2l0aCBSQy9DTy9TTi9TUQorZXZlbnQ6MFgzRTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wyU0FfUkNTVF9ESVNQX0ZBSUxfT1RIRVJfR1JQNjIgOiAoR3JvdXAgNjIgcG1fTDJTQV9zdCkgTDIgU2xpY2UgQSBSQyBzdG9yZSBkaXNwYXRjaCBhdHRlbXB0IGZhaWxlZCBkdWUgdG8gb3RoZXIgcmVhc29ucworZXZlbnQ6MFgzRTQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQNjIgOiAoR3JvdXAgNjIgcG1fTDJTQV9zdCkgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgzRTUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDYyIDogKEdyb3VwIDYyIHBtX0wyU0Ffc3QpIFJ1biBjeWNsZXMKKworI0dyb3VwIDYzIHBtX0wyU0Ffc3QyLCBMMiBzbGljZSBBIHN0b3JlIGV2ZW50cworZXZlbnQ6MFgzRjAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wyU0FfUkNfRElTUF9GQUlMX0NPX0JVU1lfR1JQNjMgOiAoR3JvdXAgNjMgcG1fTDJTQV9zdDIpIEwyIFNsaWNlIEEgUkMgZGlzcGF0Y2ggYXR0ZW1wdCBmYWlsZWQgZHVlIHRvIFJDL0NPIHBhaXIgY2hvc2VuIHdhcyBtaXNzIGFuZCBDTyBhbHJlYWR5IGJ1c3kKK2V2ZW50OjBYM0YxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMlNBX1NUX1JFUV9HUlA2MyA6IChHcm91cCA2MyBwbV9MMlNBX3N0MikgTDIgc2xpY2UgQSBzdG9yZSByZXF1ZXN0cworZXZlbnQ6MFgzRjIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wyU0FfUkNfRElTUF9GQUlMX0NPX0JVU1lfQUxMX0dSUDYzIDogKEdyb3VwIDYzIHBtX0wyU0Ffc3QyKSBMMiBTbGljZSBBIFJDIGRpc3BhdGNoIGF0dGVtcHQgZmFpbGVkIGR1ZSB0byBhbGwgQ08gYnVzeQorZXZlbnQ6MFgzRjMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wyU0FfU1RfSElUX0dSUDYzIDogKEdyb3VwIDYzIHBtX0wyU0Ffc3QyKSBMMiBzbGljZSBBIHN0b3JlIGhpdHMKK2V2ZW50OjBYM0Y0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDYzIDogKEdyb3VwIDYzIHBtX0wyU0Ffc3QyKSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDNGNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQNjMgOiAoR3JvdXAgNjMgcG1fTDJTQV9zdDIpIFJ1biBjeWNsZXMKKworI0dyb3VwIDY0IHBtX0wyU0JfbGQsIEwyIHNsaWNlIEIgbG9hZCBldmVudHMKK2V2ZW50OjBYNDAwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMlNCX1JDTERfRElTUF9HUlA2NCA6IChHcm91cCA2NCBwbV9MMlNCX2xkKSBMMiBTbGljZSBCIFJDIGxvYWQgZGlzcGF0Y2ggYXR0ZW1wdAorZXZlbnQ6MFg0MDEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wyU0JfUkNMRF9ESVNQX0ZBSUxfUkNfRlVMTF9HUlA2NCA6IChHcm91cCA2NCBwbV9MMlNCX2xkKSBMMiBTbGljZSBCIFJDIGxvYWQgZGlzcGF0Y2ggYXR0ZW1wdCBmYWlsZWQgZHVlIHRvIGFsbCBSQyBmdWxsCitldmVudDowWDQwMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDJTQl9SQ0xEX0RJU1BfRkFJTF9BRERSX0dSUDY0IDogKEdyb3VwIDY0IHBtX0wyU0JfbGQpIEwyIFNsaWNlIEIgUkMgbG9hZCBkaXNwYXRjaCBhdHRlbXB0IGZhaWxlZCBkdWUgdG8gYWRkcmVzcyBjb2xsaXNpb24gd2l0aCBSQy9DTy9TTi9TUQorZXZlbnQ6MFg0MDMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wyU0JfUkNMRF9ESVNQX0ZBSUxfT1RIRVJfR1JQNjQgOiAoR3JvdXAgNjQgcG1fTDJTQl9sZCkgTDIgU2xpY2UgQiBSQyBsb2FkIGRpc3BhdGNoIGF0dGVtcHQgZmFpbGVkIGR1ZSB0byBvdGhlciByZWFzb25zCitldmVudDowWDQwNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlA2NCA6IChHcm91cCA2NCBwbV9MMlNCX2xkKSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDQwNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQNjQgOiAoR3JvdXAgNjQgcG1fTDJTQl9sZCkgUnVuIGN5Y2xlcworCisjR3JvdXAgNjUgcG1fTDJTQl9zdCwgTDIgc2xpY2UgQiBzdG9yZSBldmVudHMKK2V2ZW50OjBYNDEwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMlNCX1JDU1RfRElTUF9HUlA2NSA6IChHcm91cCA2NSBwbV9MMlNCX3N0KSBMMiBTbGljZSBCIFJDIHN0b3JlIGRpc3BhdGNoIGF0dGVtcHQKK2V2ZW50OjBYNDExIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMlNCX1JDU1RfRElTUF9GQUlMX1JDX0ZVTExfR1JQNjUgOiAoR3JvdXAgNjUgcG1fTDJTQl9zdCkgTDIgU2xpY2UgQiBSQyBzdG9yZSBkaXNwYXRjaCBhdHRlbXB0IGZhaWxlZCBkdWUgdG8gYWxsIFJDIGZ1bGwKK2V2ZW50OjBYNDEyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMlNCX1JDU1RfRElTUF9GQUlMX0FERFJfR1JQNjUgOiAoR3JvdXAgNjUgcG1fTDJTQl9zdCkgTDIgU2xpY2UgQiBSQyBzdG9yZSBkaXNwYXRjaCBhdHRlbXB0IGZhaWxlZCBkdWUgdG8gYWRkcmVzcyBjb2xsaXNpb24gd2l0aCBSQy9DTy9TTi9TUQorZXZlbnQ6MFg0MTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wyU0JfUkNTVF9ESVNQX0ZBSUxfT1RIRVJfR1JQNjUgOiAoR3JvdXAgNjUgcG1fTDJTQl9zdCkgTDIgU2xpY2UgQiBSQyBzdG9yZSBkaXNwYXRjaCBhdHRlbXB0IGZhaWxlZCBkdWUgdG8gb3RoZXIgcmVhc29ucworZXZlbnQ6MFg0MTQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQNjUgOiAoR3JvdXAgNjUgcG1fTDJTQl9zdCkgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFg0MTUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDY1IDogKEdyb3VwIDY1IHBtX0wyU0Jfc3QpIFJ1biBjeWNsZXMKKworI0dyb3VwIDY2IHBtX0wyU0Jfc3QyLCBMMiBzbGljZSBCIHN0b3JlIGV2ZW50cworZXZlbnQ6MFg0MjAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wyU0JfUkNfRElTUF9GQUlMX0NPX0JVU1lfR1JQNjYgOiAoR3JvdXAgNjYgcG1fTDJTQl9zdDIpIEwyIFNsaWNlIEIgUkMgZGlzcGF0Y2ggYXR0ZW1wdCBmYWlsZWQgZHVlIHRvIFJDL0NPIHBhaXIgY2hvc2VuIHdhcyBtaXNzIGFuZCBDTyBhbHJlYWR5IGJ1c3kKK2V2ZW50OjBYNDIxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMlNCX1NUX1JFUV9HUlA2NiA6IChHcm91cCA2NiBwbV9MMlNCX3N0MikgTDIgc2xpY2UgQiBzdG9yZSByZXF1ZXN0cworZXZlbnQ6MFg0MjIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wyU0JfUkNfRElTUF9GQUlMX0NPX0JVU1lfQUxMX0dSUDY2IDogKEdyb3VwIDY2IHBtX0wyU0Jfc3QyKSBMMiBTbGljZSBCIFJDIGRpc3BhdGNoIGF0dGVtcHQgZmFpbGVkIGR1ZSB0byBhbGwgQ08gYnVzeQorZXZlbnQ6MFg0MjMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wyU0JfU1RfSElUX0dSUDY2IDogKEdyb3VwIDY2IHBtX0wyU0Jfc3QyKSBMMiBzbGljZSBCIHN0b3JlIGhpdHMKK2V2ZW50OjBYNDI0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDY2IDogKEdyb3VwIDY2IHBtX0wyU0Jfc3QyKSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDQyNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQNjYgOiAoR3JvdXAgNjYgcG1fTDJTQl9zdDIpIFJ1biBjeWNsZXMKKworI0dyb3VwIDY3IHBtX0wyU0JfbGQsIEwyIHNsaWNlIEMgbG9hZCBldmVudHMKK2V2ZW50OjBYNDMwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMlNDX1JDTERfRElTUF9HUlA2NyA6IChHcm91cCA2NyBwbV9MMlNCX2xkKSBMMiBTbGljZSBDIFJDIGxvYWQgZGlzcGF0Y2ggYXR0ZW1wdAorZXZlbnQ6MFg0MzEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wyU0NfUkNMRF9ESVNQX0ZBSUxfUkNfRlVMTF9HUlA2NyA6IChHcm91cCA2NyBwbV9MMlNCX2xkKSBMMiBTbGljZSBDIFJDIGxvYWQgZGlzcGF0Y2ggYXR0ZW1wdCBmYWlsZWQgZHVlIHRvIGFsbCBSQyBmdWxsCitldmVudDowWDQzMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDJTQ19SQ0xEX0RJU1BfRkFJTF9BRERSX0dSUDY3IDogKEdyb3VwIDY3IHBtX0wyU0JfbGQpIEwyIFNsaWNlIEMgUkMgbG9hZCBkaXNwYXRjaCBhdHRlbXB0IGZhaWxlZCBkdWUgdG8gYWRkcmVzcyBjb2xsaXNpb24gd2l0aCBSQy9DTy9TTi9TUQorZXZlbnQ6MFg0MzMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wyU0NfUkNMRF9ESVNQX0ZBSUxfT1RIRVJfR1JQNjcgOiAoR3JvdXAgNjcgcG1fTDJTQl9sZCkgTDIgU2xpY2UgQyBSQyBsb2FkIGRpc3BhdGNoIGF0dGVtcHQgZmFpbGVkIGR1ZSB0byBvdGhlciByZWFzb25zCitldmVudDowWDQzNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlA2NyA6IChHcm91cCA2NyBwbV9MMlNCX2xkKSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDQzNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQNjcgOiAoR3JvdXAgNjcgcG1fTDJTQl9sZCkgUnVuIGN5Y2xlcworCisjR3JvdXAgNjggcG1fTDJTQl9zdCwgTDIgc2xpY2UgQyBzdG9yZSBldmVudHMKK2V2ZW50OjBYNDQwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMlNDX1JDU1RfRElTUF9HUlA2OCA6IChHcm91cCA2OCBwbV9MMlNCX3N0KSBMMiBTbGljZSBDIFJDIHN0b3JlIGRpc3BhdGNoIGF0dGVtcHQKK2V2ZW50OjBYNDQxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMlNDX1JDU1RfRElTUF9GQUlMX1JDX0ZVTExfR1JQNjggOiAoR3JvdXAgNjggcG1fTDJTQl9zdCkgTDIgU2xpY2UgQyBSQyBzdG9yZSBkaXNwYXRjaCBhdHRlbXB0IGZhaWxlZCBkdWUgdG8gYWxsIFJDIGZ1bGwKK2V2ZW50OjBYNDQyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMlNDX1JDU1RfRElTUF9GQUlMX0FERFJfR1JQNjggOiAoR3JvdXAgNjggcG1fTDJTQl9zdCkgTDIgU2xpY2UgQyBSQyBzdG9yZSBkaXNwYXRjaCBhdHRlbXB0IGZhaWxlZCBkdWUgdG8gYWRkcmVzcyBjb2xsaXNpb24gd2l0aCBSQy9DTy9TTi9TUQorZXZlbnQ6MFg0NDMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wyU0NfUkNTVF9ESVNQX0ZBSUxfT1RIRVJfR1JQNjggOiAoR3JvdXAgNjggcG1fTDJTQl9zdCkgTDIgU2xpY2UgQyBSQyBzdG9yZSBkaXNwYXRjaCBhdHRlbXB0IGZhaWxlZCBkdWUgdG8gb3RoZXIgcmVhc29ucworZXZlbnQ6MFg0NDQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQNjggOiAoR3JvdXAgNjggcG1fTDJTQl9zdCkgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFg0NDUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDY4IDogKEdyb3VwIDY4IHBtX0wyU0Jfc3QpIFJ1biBjeWNsZXMKKworI0dyb3VwIDY5IHBtX0wyU0Jfc3QyLCBMMiBzbGljZSBDIHN0b3JlIGV2ZW50cworZXZlbnQ6MFg0NTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wyU0NfUkNfRElTUF9GQUlMX0NPX0JVU1lfR1JQNjkgOiAoR3JvdXAgNjkgcG1fTDJTQl9zdDIpIEwyIFNsaWNlIEMgUkMgZGlzcGF0Y2ggYXR0ZW1wdCBmYWlsZWQgZHVlIHRvIFJDL0NPIHBhaXIgY2hvc2VuIHdhcyBtaXNzIGFuZCBDTyBhbHJlYWR5IGJ1c3kKK2V2ZW50OjBYNDUxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMlNDX1NUX1JFUV9HUlA2OSA6IChHcm91cCA2OSBwbV9MMlNCX3N0MikgTDIgc2xpY2UgQyBzdG9yZSByZXF1ZXN0cworZXZlbnQ6MFg0NTIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wyU0NfUkNfRElTUF9GQUlMX0NPX0JVU1lfQUxMX0dSUDY5IDogKEdyb3VwIDY5IHBtX0wyU0Jfc3QyKSBMMiBTbGljZSBDIFJDIGRpc3BhdGNoIGF0dGVtcHQgZmFpbGVkIGR1ZSB0byBhbGwgQ08gYnVzeQorZXZlbnQ6MFg0NTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wyU0NfU1RfSElUX0dSUDY5IDogKEdyb3VwIDY5IHBtX0wyU0Jfc3QyKSBMMiBzbGljZSBDIHN0b3JlIGhpdHMKK2V2ZW50OjBYNDU0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDY5IDogKEdyb3VwIDY5IHBtX0wyU0Jfc3QyKSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDQ1NSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQNjkgOiAoR3JvdXAgNjkgcG1fTDJTQl9zdDIpIFJ1biBjeWNsZXMKKworI0dyb3VwIDcwIHBtX0wzU0FfdHJhbnMsIEwzIHNsaWNlIEEgc3RhdGUgdHJhbnNpc3Rpb25zCitldmVudDowWDQ2MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDNTQV9NT0RfVEFHX0dSUDcwIDogKEdyb3VwIDcwIHBtX0wzU0FfdHJhbnMpIEwzIHNsaWNlIEEgdHJhbnNpdGlvbiBmcm9tIG1vZGlmaWVkIHRvIFRBRworZXZlbnQ6MFg0NjEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lPUFNfQ01QTF9HUlA3MCA6IChHcm91cCA3MCBwbV9MM1NBX3RyYW5zKSBJT1BTIGluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYNDYyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MM1NBX01PRF9JTlZfR1JQNzAgOiAoR3JvdXAgNzAgcG1fTDNTQV90cmFucykgTDMgc2xpY2UgQSB0cmFuc2l0aW9uIGZyb20gbW9kaWZpZWQgdG8gaW52YWxpZAorZXZlbnQ6MFg0NjMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wzU0FfU0hSX0lOVl9HUlA3MCA6IChHcm91cCA3MCBwbV9MM1NBX3RyYW5zKSBMMyBzbGljZSBBIHRyYW5zaXRpb24gZnJvbSBzaGFyZWQgdG8gaW52YWxpZAorZXZlbnQ6MFg0NjQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQNzAgOiAoR3JvdXAgNzAgcG1fTDNTQV90cmFucykgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFg0NjUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDcwIDogKEdyb3VwIDcwIHBtX0wzU0FfdHJhbnMpIFJ1biBjeWNsZXMKKworI0dyb3VwIDcxIHBtX0wzU0JfdHJhbnMsIEwzIHNsaWNlIEIgc3RhdGUgdHJhbnNpc3Rpb25zCitldmVudDowWDQ3MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU9QU19DTVBMX0dSUDcxIDogKEdyb3VwIDcxIHBtX0wzU0JfdHJhbnMpIElPUFMgaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFg0NzEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wzU0JfTU9EX1RBR19HUlA3MSA6IChHcm91cCA3MSBwbV9MM1NCX3RyYW5zKSBMMyBzbGljZSBCIHRyYW5zaXRpb24gZnJvbSBtb2RpZmllZCB0byBUQUcKK2V2ZW50OjBYNDcyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MM1NCX01PRF9JTlZfR1JQNzEgOiAoR3JvdXAgNzEgcG1fTDNTQl90cmFucykgTDMgc2xpY2UgQiB0cmFuc2l0aW9uIGZyb20gbW9kaWZpZWQgdG8gaW52YWxpZAorZXZlbnQ6MFg0NzMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wzU0JfU0hSX0lOVl9HUlA3MSA6IChHcm91cCA3MSBwbV9MM1NCX3RyYW5zKSBMMyBzbGljZSBCIHRyYW5zaXRpb24gZnJvbSBzaGFyZWQgdG8gaW52YWxpZAorZXZlbnQ6MFg0NzQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQNzEgOiAoR3JvdXAgNzEgcG1fTDNTQl90cmFucykgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFg0NzUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDcxIDogKEdyb3VwIDcxIHBtX0wzU0JfdHJhbnMpIFJ1biBjeWNsZXMKKworI0dyb3VwIDcyIHBtX0wzU0NfdHJhbnMsIEwzIHNsaWNlIEMgc3RhdGUgdHJhbnNpc3Rpb25zCitldmVudDowWDQ4MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU9QU19DTVBMX0dSUDcyIDogKEdyb3VwIDcyIHBtX0wzU0NfdHJhbnMpIElPUFMgaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFg0ODEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wzU0NfTU9EX1RBR19HUlA3MiA6IChHcm91cCA3MiBwbV9MM1NDX3RyYW5zKSBMMyBzbGljZSBDIHRyYW5zaXRpb24gZnJvbSBtb2RpZmllZCB0byBUQUcKK2V2ZW50OjBYNDgyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MM1NDX01PRF9JTlZfR1JQNzIgOiAoR3JvdXAgNzIgcG1fTDNTQ190cmFucykgTDMgc2xpY2UgQyB0cmFuc2l0aW9uIGZyb20gbW9kaWZpZWQgdG8gaW52YWxpZAorZXZlbnQ6MFg0ODMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wzU0NfU0hSX0lOVl9HUlA3MiA6IChHcm91cCA3MiBwbV9MM1NDX3RyYW5zKSBMMyBzbGljZSBDIHRyYW5zaXRpb24gZnJvbSBzaGFyZWQgdG8gaW52YWxpZAorZXZlbnQ6MFg0ODQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQNzIgOiAoR3JvdXAgNzIgcG1fTDNTQ190cmFucykgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFg0ODUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDcyIDogKEdyb3VwIDcyIHBtX0wzU0NfdHJhbnMpIFJ1biBjeWNsZXMKKworI0dyb3VwIDczIHBtX0wyU0FfdHJhbnMsIEwyIHNsaWNlIEEgc3RhdGUgdHJhbnNpc3Rpb25zCitldmVudDowWDQ5MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDJTQV9NT0RfVEFHX0dSUDczIDogKEdyb3VwIDczIHBtX0wyU0FfdHJhbnMpIEwyIHNsaWNlIEEgdHJhbnNpdGlvbiBmcm9tIG1vZGlmaWVkIHRvIHRhZ2dlZAorZXZlbnQ6MFg0OTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wyU0FfU0hSX01PRF9HUlA3MyA6IChHcm91cCA3MyBwbV9MMlNBX3RyYW5zKSBMMiBzbGljZSBBIHRyYW5zaXRpb24gZnJvbSBzaGFyZWQgdG8gbW9kaWZpZWQKK2V2ZW50OjBYNDkyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMlNBX01PRF9JTlZfR1JQNzMgOiAoR3JvdXAgNzMgcG1fTDJTQV90cmFucykgTDIgc2xpY2UgQSB0cmFuc2l0aW9uIGZyb20gbW9kaWZpZWQgdG8gaW52YWxpZAorZXZlbnQ6MFg0OTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wyU0FfU0hSX0lOVl9HUlA3MyA6IChHcm91cCA3MyBwbV9MMlNBX3RyYW5zKSBMMiBzbGljZSBBIHRyYW5zaXRpb24gZnJvbSBzaGFyZWQgdG8gaW52YWxpZAorZXZlbnQ6MFg0OTQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQNzMgOiAoR3JvdXAgNzMgcG1fTDJTQV90cmFucykgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFg0OTUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDczIDogKEdyb3VwIDczIHBtX0wyU0FfdHJhbnMpIFJ1biBjeWNsZXMKKworI0dyb3VwIDc0IHBtX0wyU0JfdHJhbnMsIEwyIHNsaWNlIEIgc3RhdGUgdHJhbnNpc3Rpb25zCitldmVudDowWDRBMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDJTQl9NT0RfVEFHX0dSUDc0IDogKEdyb3VwIDc0IHBtX0wyU0JfdHJhbnMpIEwyIHNsaWNlIEIgdHJhbnNpdGlvbiBmcm9tIG1vZGlmaWVkIHRvIHRhZ2dlZAorZXZlbnQ6MFg0QTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wyU0JfU0hSX01PRF9HUlA3NCA6IChHcm91cCA3NCBwbV9MMlNCX3RyYW5zKSBMMiBzbGljZSBCIHRyYW5zaXRpb24gZnJvbSBzaGFyZWQgdG8gbW9kaWZpZWQKK2V2ZW50OjBYNEEyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMlNCX01PRF9JTlZfR1JQNzQgOiAoR3JvdXAgNzQgcG1fTDJTQl90cmFucykgTDIgc2xpY2UgQiB0cmFuc2l0aW9uIGZyb20gbW9kaWZpZWQgdG8gaW52YWxpZAorZXZlbnQ6MFg0QTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wyU0JfU0hSX0lOVl9HUlA3NCA6IChHcm91cCA3NCBwbV9MMlNCX3RyYW5zKSBMMiBzbGljZSBCIHRyYW5zaXRpb24gZnJvbSBzaGFyZWQgdG8gaW52YWxpZAorZXZlbnQ6MFg0QTQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQNzQgOiAoR3JvdXAgNzQgcG1fTDJTQl90cmFucykgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFg0QTUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDc0IDogKEdyb3VwIDc0IHBtX0wyU0JfdHJhbnMpIFJ1biBjeWNsZXMKKworI0dyb3VwIDc1IHBtX0wyU0NfdHJhbnMsIEwyIHNsaWNlIEMgc3RhdGUgdHJhbnNpc3Rpb25zCitldmVudDowWDRCMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDJTQ19NT0RfVEFHX0dSUDc1IDogKEdyb3VwIDc1IHBtX0wyU0NfdHJhbnMpIEwyIHNsaWNlIEMgdHJhbnNpdGlvbiBmcm9tIG1vZGlmaWVkIHRvIHRhZ2dlZAorZXZlbnQ6MFg0QjEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wyU0NfU0hSX01PRF9HUlA3NSA6IChHcm91cCA3NSBwbV9MMlNDX3RyYW5zKSBMMiBzbGljZSBDIHRyYW5zaXRpb24gZnJvbSBzaGFyZWQgdG8gbW9kaWZpZWQKK2V2ZW50OjBYNEIyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMlNDX01PRF9JTlZfR1JQNzUgOiAoR3JvdXAgNzUgcG1fTDJTQ190cmFucykgTDIgc2xpY2UgQyB0cmFuc2l0aW9uIGZyb20gbW9kaWZpZWQgdG8gaW52YWxpZAorZXZlbnQ6MFg0QjMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wyU0NfU0hSX0lOVl9HUlA3NSA6IChHcm91cCA3NSBwbV9MMlNDX3RyYW5zKSBMMiBzbGljZSBDIHRyYW5zaXRpb24gZnJvbSBzaGFyZWQgdG8gaW52YWxpZAorZXZlbnQ6MFg0QjQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQNzUgOiAoR3JvdXAgNzUgcG1fTDJTQ190cmFucykgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFg0QjUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDc1IDogKEdyb3VwIDc1IHBtX0wyU0NfdHJhbnMpIFJ1biBjeWNsZXMKKworI0dyb3VwIDc2IHBtX0wzU0FCX3JldHJ5LCBMMyBzbGljZSBBL0Igc25vb3AgcmV0cnkgYW5kIGFsbCBDSS9DTyBidXN5CitldmVudDowWDRDMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDNTQV9BTExfQlVTWV9HUlA3NiA6IChHcm91cCA3NiBwbV9MM1NBQl9yZXRyeSkgTDMgc2xpY2UgQSBhY3RpdmUgZm9yIGV2ZXJ5IGN5Y2xlIGFsbCBDSS9DTyBtYWNoaW5lcyBidXN5CitldmVudDowWDRDMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDNTQl9BTExfQlVTWV9HUlA3NiA6IChHcm91cCA3NiBwbV9MM1NBQl9yZXRyeSkgTDMgc2xpY2UgQiBhY3RpdmUgZm9yIGV2ZXJ5IGN5Y2xlIGFsbCBDSS9DTyBtYWNoaW5lcyBidXN5CitldmVudDowWDRDMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDNTQV9TTk9PUF9SRVRSWV9HUlA3NiA6IChHcm91cCA3NiBwbV9MM1NBQl9yZXRyeSkgTDMgc2xpY2UgQSBzbm9vcCByZXRyaWVzCitldmVudDowWDRDMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDNTQl9TTk9PUF9SRVRSWV9HUlA3NiA6IChHcm91cCA3NiBwbV9MM1NBQl9yZXRyeSkgTDMgc2xpY2UgQiBzbm9vcCByZXRyaWVzCitldmVudDowWDRDNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlA3NiA6IChHcm91cCA3NiBwbV9MM1NBQl9yZXRyeSkgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFg0QzUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDc2IDogKEdyb3VwIDc2IHBtX0wzU0FCX3JldHJ5KSBSdW4gY3ljbGVzCisKKyNHcm91cCA3NyBwbV9MM1NBQl9oaXQsIEwzIHNsaWNlIEEvQiBoaXQgYW5kIHJlZmVyZW5jZQorZXZlbnQ6MFg0RDAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wzU0FfUkVGX0dSUDc3IDogKEdyb3VwIDc3IHBtX0wzU0FCX2hpdCkgTDMgc2xpY2UgQSByZWZlcmVuY2VzCitldmVudDowWDREMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDNTQl9SRUZfR1JQNzcgOiAoR3JvdXAgNzcgcG1fTDNTQUJfaGl0KSBMMyBzbGljZSBCIHJlZmVyZW5jZXMKK2V2ZW50OjBYNEQyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MM1NBX0hJVF9HUlA3NyA6IChHcm91cCA3NyBwbV9MM1NBQl9oaXQpIEwzIHNsaWNlIEEgaGl0cworZXZlbnQ6MFg0RDMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wzU0JfSElUX0dSUDc3IDogKEdyb3VwIDc3IHBtX0wzU0FCX2hpdCkgTDMgc2xpY2UgQiBoaXRzCitldmVudDowWDRENCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlA3NyA6IChHcm91cCA3NyBwbV9MM1NBQl9oaXQpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYNEQ1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlA3NyA6IChHcm91cCA3NyBwbV9MM1NBQl9oaXQpIFJ1biBjeWNsZXMKKworI0dyb3VwIDc4IHBtX0wzU0NfcmV0cnlfaGl0LCBMMyBzbGljZSBDIGhpdCAmIHNub29wIHJldHJ5CitldmVudDowWDRFMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDNTQ19BTExfQlVTWV9HUlA3OCA6IChHcm91cCA3OCBwbV9MM1NDX3JldHJ5X2hpdCkgTDMgc2xpY2UgQyBhY3RpdmUgZm9yIGV2ZXJ5IGN5Y2xlIGFsbCBDSS9DTyBtYWNoaW5lcyBidXN5CitldmVudDowWDRFMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDNTQ19SRUZfR1JQNzggOiAoR3JvdXAgNzggcG1fTDNTQ19yZXRyeV9oaXQpIEwzIHNsaWNlIEMgcmVmZXJlbmNlcworZXZlbnQ6MFg0RTIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wzU0NfU05PT1BfUkVUUllfR1JQNzggOiAoR3JvdXAgNzggcG1fTDNTQ19yZXRyeV9oaXQpIEwzIHNsaWNlIEMgc25vb3AgcmV0cmllcworZXZlbnQ6MFg0RTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wzU0NfSElUX0dSUDc4IDogKEdyb3VwIDc4IHBtX0wzU0NfcmV0cnlfaGl0KSBMMyBTbGljZSBDIGhpdHMKK2V2ZW50OjBYNEU0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDc4IDogKEdyb3VwIDc4IHBtX0wzU0NfcmV0cnlfaGl0KSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDRFNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQNzggOiAoR3JvdXAgNzggcG1fTDNTQ19yZXRyeV9oaXQpIFJ1biBjeWNsZXMKKworI0dyb3VwIDc5IHBtX2ZwdTEsIEZsb2F0aW5nIFBvaW50IGV2ZW50cworZXZlbnQ6MFg0RjAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVV9GRElWX0dSUDc5IDogKEdyb3VwIDc5IHBtX2ZwdTEpIEZQVSBleGVjdXRlZCBGRElWIGluc3RydWN0aW9uCitldmVudDowWDRGMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVX0ZNQV9HUlA3OSA6IChHcm91cCA3OSBwbV9mcHUxKSBGUFUgZXhlY3V0ZWQgbXVsdGlwbHktYWRkIGluc3RydWN0aW9uCitldmVudDowWDRGMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVX0ZNT1ZfRkVTVF9HUlA3OSA6IChHcm91cCA3OSBwbV9mcHUxKSBGUFUgZXhlY3V0aW5nIEZNT1Ygb3IgRkVTVCBpbnN0cnVjdGlvbnMKK2V2ZW50OjBYNEYzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFVfRkVTVF9HUlA3OSA6IChHcm91cCA3OSBwbV9mcHUxKSBGUFUgZXhlY3V0ZWQgRkVTVCBpbnN0cnVjdGlvbgorZXZlbnQ6MFg0RjQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQNzkgOiAoR3JvdXAgNzkgcG1fZnB1MSkgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFg0RjUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDc5IDogKEdyb3VwIDc5IHBtX2ZwdTEpIFJ1biBjeWNsZXMKKworI0dyb3VwIDgwIHBtX2ZwdTIsIEZsb2F0aW5nIFBvaW50IGV2ZW50cworZXZlbnQ6MFg1MDAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVV8xRkxPUF9HUlA4MCA6IChHcm91cCA4MCBwbV9mcHUyKSBGUFUgZXhlY3V0ZWQgb25lIGZsb3AgaW5zdHJ1Y3Rpb24gCitldmVudDowWDUwMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVX0ZTUVJUX0dSUDgwIDogKEdyb3VwIDgwIHBtX2ZwdTIpIEZQVSBleGVjdXRlZCBGU1FSVCBpbnN0cnVjdGlvbgorZXZlbnQ6MFg1MDIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVV9GUlNQX0ZDT05WX0dSUDgwIDogKEdyb3VwIDgwIHBtX2ZwdTIpIEZQVSBleGVjdXRlZCBGUlNQIG9yIEZDT05WIGluc3RydWN0aW9ucworZXZlbnQ6MFg1MDMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVV9GSU5fR1JQODAgOiAoR3JvdXAgODAgcG1fZnB1MikgRlBVIHByb2R1Y2VkIGEgcmVzdWx0CitldmVudDowWDUwNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlA4MCA6IChHcm91cCA4MCBwbV9mcHUyKSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDUwNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQODAgOiAoR3JvdXAgODAgcG1fZnB1MikgUnVuIGN5Y2xlcworCisjR3JvdXAgODEgcG1fZnB1MywgRmxvYXRpbmcgcG9pbnQgZXZlbnRzCitldmVudDowWDUxMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVX0RFTk9STV9HUlA4MSA6IChHcm91cCA4MSBwbV9mcHUzKSBGUFUgcmVjZWl2ZWQgZGVub3JtYWxpemVkIGRhdGEKK2V2ZW50OjBYNTExIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFVfU1RBTEwzX0dSUDgxIDogKEdyb3VwIDgxIHBtX2ZwdTMpIEZQVSBzdGFsbGVkIGluIHBpcGUzCitldmVudDowWDUxMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVMF9GSU5fR1JQODEgOiAoR3JvdXAgODEgcG1fZnB1MykgRlBVMCBwcm9kdWNlZCBhIHJlc3VsdAorZXZlbnQ6MFg1MTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVTFfRklOX0dSUDgxIDogKEdyb3VwIDgxIHBtX2ZwdTMpIEZQVTEgcHJvZHVjZWQgYSByZXN1bHQKK2V2ZW50OjBYNTE0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDgxIDogKEdyb3VwIDgxIHBtX2ZwdTMpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYNTE1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlA4MSA6IChHcm91cCA4MSBwbV9mcHUzKSBSdW4gY3ljbGVzCisKKyNHcm91cCA4MiBwbV9mcHU0LCBGbG9hdGluZyBwb2ludCBldmVudHMKK2V2ZW50OjBYNTIwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFVfU0lOR0xFX0dSUDgyIDogKEdyb3VwIDgyIHBtX2ZwdTQpIEZQVSBleGVjdXRlZCBzaW5nbGUgcHJlY2lzaW9uIGluc3RydWN0aW9uCitldmVudDowWDUyMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVX1NURl9HUlA4MiA6IChHcm91cCA4MiBwbV9mcHU0KSBGUFUgZXhlY3V0ZWQgc3RvcmUgaW5zdHJ1Y3Rpb24KK2V2ZW50OjBYNTIyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JT1BTX0NNUExfR1JQODIgOiAoR3JvdXAgODIgcG1fZnB1NCkgSU9QUyBpbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDUyMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVX0xERl9HUlA4MiA6IChHcm91cCA4MiBwbV9mcHU0KSBMU1UgZXhlY3V0ZWQgRmxvYXRpbmcgUG9pbnQgbG9hZCBpbnN0cnVjdGlvbgorZXZlbnQ6MFg1MjQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQODIgOiAoR3JvdXAgODIgcG1fZnB1NCkgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFg1MjUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDgyIDogKEdyb3VwIDgyIHBtX2ZwdTQpIFJ1biBjeWNsZXMKKworI0dyb3VwIDgzIHBtX2ZwdTUsIEZsb2F0aW5nIHBvaW50IGV2ZW50cyBieSB1bml0CitldmVudDowWDUzMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVMF9GU1FSVF9HUlA4MyA6IChHcm91cCA4MyBwbV9mcHU1KSBGUFUwIGV4ZWN1dGVkIEZTUVJUIGluc3RydWN0aW9uCitldmVudDowWDUzMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVMV9GU1FSVF9HUlA4MyA6IChHcm91cCA4MyBwbV9mcHU1KSBGUFUxIGV4ZWN1dGVkIEZTUVJUIGluc3RydWN0aW9uCitldmVudDowWDUzMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVMF9GRVNUX0dSUDgzIDogKEdyb3VwIDgzIHBtX2ZwdTUpIEZQVTAgZXhlY3V0ZWQgRkVTVCBpbnN0cnVjdGlvbgorZXZlbnQ6MFg1MzMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVTFfRkVTVF9HUlA4MyA6IChHcm91cCA4MyBwbV9mcHU1KSBGUFUxIGV4ZWN1dGVkIEZFU1QgaW5zdHJ1Y3Rpb24KK2V2ZW50OjBYNTM0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDgzIDogKEdyb3VwIDgzIHBtX2ZwdTUpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYNTM1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlA4MyA6IChHcm91cCA4MyBwbV9mcHU1KSBSdW4gY3ljbGVzCisKKyNHcm91cCA4NCBwbV9mcHU2LCBGbG9hdGluZyBwb2ludCBldmVudHMgYnkgdW5pdAorZXZlbnQ6MFg1NDAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVTBfREVOT1JNX0dSUDg0IDogKEdyb3VwIDg0IHBtX2ZwdTYpIEZQVTAgcmVjZWl2ZWQgZGVub3JtYWxpemVkIGRhdGEKK2V2ZW50OjBYNTQxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFUxX0RFTk9STV9HUlA4NCA6IChHcm91cCA4NCBwbV9mcHU2KSBGUFUxIHJlY2VpdmVkIGRlbm9ybWFsaXplZCBkYXRhCitldmVudDowWDU0MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVMF9GTU9WX0ZFU1RfR1JQODQgOiAoR3JvdXAgODQgcG1fZnB1NikgRlBVMCBleGVjdXRlZCBGTU9WIG9yIEZFU1QgaW5zdHJ1Y3Rpb25zCitldmVudDowWDU0MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVMV9GTU9WX0ZFU1RfR1JQODQgOiAoR3JvdXAgODQgcG1fZnB1NikgRlBVMSBleGVjdXRpbmcgRk1PViBvciBGRVNUIGluc3RydWN0aW9ucworZXZlbnQ6MFg1NDQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQODQgOiAoR3JvdXAgODQgcG1fZnB1NikgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFg1NDUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDg0IDogKEdyb3VwIDg0IHBtX2ZwdTYpIFJ1biBjeWNsZXMKKworI0dyb3VwIDg1IHBtX2ZwdTcsIEZsb2F0aW5nIHBvaW50IGV2ZW50cyBieSB1bml0CitldmVudDowWDU1MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVMF9GRElWX0dSUDg1IDogKEdyb3VwIDg1IHBtX2ZwdTcpIEZQVTAgZXhlY3V0ZWQgRkRJViBpbnN0cnVjdGlvbgorZXZlbnQ6MFg1NTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVTFfRkRJVl9HUlA4NSA6IChHcm91cCA4NSBwbV9mcHU3KSBGUFUxIGV4ZWN1dGVkIEZESVYgaW5zdHJ1Y3Rpb24KK2V2ZW50OjBYNTUyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFUwX0ZSU1BfRkNPTlZfR1JQODUgOiAoR3JvdXAgODUgcG1fZnB1NykgRlBVMCBleGVjdXRlZCBGUlNQIG9yIEZDT05WIGluc3RydWN0aW9ucworZXZlbnQ6MFg1NTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVTFfRlJTUF9GQ09OVl9HUlA4NSA6IChHcm91cCA4NSBwbV9mcHU3KSBGUFUxIGV4ZWN1dGVkIEZSU1Agb3IgRkNPTlYgaW5zdHJ1Y3Rpb25zCitldmVudDowWDU1NCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlA4NSA6IChHcm91cCA4NSBwbV9mcHU3KSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDU1NSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQODUgOiAoR3JvdXAgODUgcG1fZnB1NykgUnVuIGN5Y2xlcworCisjR3JvdXAgODYgcG1fZnB1OCwgRmxvYXRpbmcgcG9pbnQgZXZlbnRzIGJ5IHVuaXQKK2V2ZW50OjBYNTYwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFUwX1NUQUxMM19HUlA4NiA6IChHcm91cCA4NiBwbV9mcHU4KSBGUFUwIHN0YWxsZWQgaW4gcGlwZTMKK2V2ZW50OjBYNTYxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFUxX1NUQUxMM19HUlA4NiA6IChHcm91cCA4NiBwbV9mcHU4KSBGUFUxIHN0YWxsZWQgaW4gcGlwZTMKK2V2ZW50OjBYNTYyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JT1BTX0NNUExfR1JQODYgOiAoR3JvdXAgODYgcG1fZnB1OCkgSU9QUyBpbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDU2MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVMF9GUFNDUl9HUlA4NiA6IChHcm91cCA4NiBwbV9mcHU4KSBGUFUwIGV4ZWN1dGVkIEZQU0NSIGluc3RydWN0aW9uCitldmVudDowWDU2NCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlA4NiA6IChHcm91cCA4NiBwbV9mcHU4KSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDU2NSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQODYgOiAoR3JvdXAgODYgcG1fZnB1OCkgUnVuIGN5Y2xlcworCisjR3JvdXAgODcgcG1fZnB1OSwgRmxvYXRpbmcgcG9pbnQgZXZlbnRzIGJ5IHVuaXQKK2V2ZW50OjBYNTcwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFUwX1NJTkdMRV9HUlA4NyA6IChHcm91cCA4NyBwbV9mcHU5KSBGUFUwIGV4ZWN1dGVkIHNpbmdsZSBwcmVjaXNpb24gaW5zdHJ1Y3Rpb24KK2V2ZW50OjBYNTcxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFUxX1NJTkdMRV9HUlA4NyA6IChHcm91cCA4NyBwbV9mcHU5KSBGUFUxIGV4ZWN1dGVkIHNpbmdsZSBwcmVjaXNpb24gaW5zdHJ1Y3Rpb24KK2V2ZW50OjBYNTcyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1UwX0xERl9HUlA4NyA6IChHcm91cCA4NyBwbV9mcHU5KSBMU1UwIGV4ZWN1dGVkIEZsb2F0aW5nIFBvaW50IGxvYWQgaW5zdHJ1Y3Rpb24KK2V2ZW50OjBYNTczIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1UxX0xERl9HUlA4NyA6IChHcm91cCA4NyBwbV9mcHU5KSBMU1UxIGV4ZWN1dGVkIEZsb2F0aW5nIFBvaW50IGxvYWQgaW5zdHJ1Y3Rpb24KK2V2ZW50OjBYNTc0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDg3IDogKEdyb3VwIDg3IHBtX2ZwdTkpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYNTc1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlA4NyA6IChHcm91cCA4NyBwbV9mcHU5KSBSdW4gY3ljbGVzCisKKyNHcm91cCA4OCBwbV9mcHUxMCwgRmxvYXRpbmcgcG9pbnQgZXZlbnRzIGJ5IHVuaXQKK2V2ZW50OjBYNTgwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFUwX0ZNQV9HUlA4OCA6IChHcm91cCA4OCBwbV9mcHUxMCkgRlBVMCBleGVjdXRlZCBtdWx0aXBseS1hZGQgaW5zdHJ1Y3Rpb24KK2V2ZW50OjBYNTgxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFUxX0ZNQV9HUlA4OCA6IChHcm91cCA4OCBwbV9mcHUxMCkgRlBVMSBleGVjdXRlZCBtdWx0aXBseS1hZGQgaW5zdHJ1Y3Rpb24KK2V2ZW50OjBYNTgyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JT1BTX0NNUExfR1JQODggOiAoR3JvdXAgODggcG1fZnB1MTApIElPUFMgaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFg1ODMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVTFfRlJTUF9GQ09OVl9HUlA4OCA6IChHcm91cCA4OCBwbV9mcHUxMCkgRlBVMSBleGVjdXRlZCBGUlNQIG9yIEZDT05WIGluc3RydWN0aW9ucworZXZlbnQ6MFg1ODQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQODggOiAoR3JvdXAgODggcG1fZnB1MTApIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYNTg1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlA4OCA6IChHcm91cCA4OCBwbV9mcHUxMCkgUnVuIGN5Y2xlcworCisjR3JvdXAgODkgcG1fZnB1MTEsIEZsb2F0aW5nIHBvaW50IGV2ZW50cyBieSB1bml0CitldmVudDowWDU5MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVMF8xRkxPUF9HUlA4OSA6IChHcm91cCA4OSBwbV9mcHUxMSkgRlBVMCBleGVjdXRlZCBhZGQsIG11bHQsIHN1YiwgY21wIG9yIHNlbCBpbnN0cnVjdGlvbgorZXZlbnQ6MFg1OTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVTFfMUZMT1BfR1JQODkgOiAoR3JvdXAgODkgcG1fZnB1MTEpIEZQVTEgZXhlY3V0ZWQgYWRkLCBtdWx0LCBzdWIsIGNtcCBvciBzZWwgaW5zdHJ1Y3Rpb24KK2V2ZW50OjBYNTkyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFUwX0ZJTl9HUlA4OSA6IChHcm91cCA4OSBwbV9mcHUxMSkgRlBVMCBwcm9kdWNlZCBhIHJlc3VsdAorZXZlbnQ6MFg1OTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lPUFNfQ01QTF9HUlA4OSA6IChHcm91cCA4OSBwbV9mcHUxMSkgSU9QUyBpbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDU5NCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlA4OSA6IChHcm91cCA4OSBwbV9mcHUxMSkgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFg1OTUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDg5IDogKEdyb3VwIDg5IHBtX2ZwdTExKSBSdW4gY3ljbGVzCisKKyNHcm91cCA5MCBwbV9mcHUxMiwgRmxvYXRpbmcgcG9pbnQgZXZlbnRzIGJ5IHVuaXQKK2V2ZW50OjBYNUEwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFUwX1NURl9HUlA5MCA6IChHcm91cCA5MCBwbV9mcHUxMikgRlBVMCBleGVjdXRlZCBzdG9yZSBpbnN0cnVjdGlvbgorZXZlbnQ6MFg1QTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVTFfU1RGX0dSUDkwIDogKEdyb3VwIDkwIHBtX2ZwdTEyKSBGUFUxIGV4ZWN1dGVkIHN0b3JlIGluc3RydWN0aW9uCitldmVudDowWDVBMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVMF9MREZfR1JQOTAgOiAoR3JvdXAgOTAgcG1fZnB1MTIpIExTVTAgZXhlY3V0ZWQgRmxvYXRpbmcgUG9pbnQgbG9hZCBpbnN0cnVjdGlvbgorZXZlbnQ6MFg1QTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lPUFNfQ01QTF9HUlA5MCA6IChHcm91cCA5MCBwbV9mcHUxMikgSU9QUyBpbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDVBNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlA5MCA6IChHcm91cCA5MCBwbV9mcHUxMikgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFg1QTUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDkwIDogKEdyb3VwIDkwIHBtX2ZwdTEyKSBSdW4gY3ljbGVzCisKKyNHcm91cCA5MSBwbV9meHUxLCBGaXhlZCBQb2ludCBldmVudHMKK2V2ZW50OjBYNUIwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GWFVfSURMRV9HUlA5MSA6IChHcm91cCA5MSBwbV9meHUxKSBGWFUgaWRsZQorZXZlbnQ6MFg1QjEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZYVV9CVVNZX0dSUDkxIDogKEdyb3VwIDkxIHBtX2Z4dTEpIEZYVSBidXN5CitldmVudDowWDVCMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlhVMF9CVVNZX0ZYVTFfSURMRV9HUlA5MSA6IChHcm91cCA5MSBwbV9meHUxKSBGWFUwIGJ1c3kgRlhVMSBpZGxlCitldmVudDowWDVCMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlhVMV9CVVNZX0ZYVTBfSURMRV9HUlA5MSA6IChHcm91cCA5MSBwbV9meHUxKSBGWFUxIGJ1c3kgRlhVMCBpZGxlCitldmVudDowWDVCNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlA5MSA6IChHcm91cCA5MSBwbV9meHUxKSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDVCNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQOTEgOiAoR3JvdXAgOTEgcG1fZnh1MSkgUnVuIGN5Y2xlcworCisjR3JvdXAgOTIgcG1fZnh1MiwgRml4ZWQgUG9pbnQgZXZlbnRzCitldmVudDowWDVDMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0dSUF9ESVNQX0dSUDkyIDogKEdyb3VwIDkyIHBtX2Z4dTIpIE1hcmtlZCBncm91cCBkaXNwYXRjaGVkCitldmVudDowWDVDMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0dSUF9CUl9SRURJUl9HUlA5MiA6IChHcm91cCA5MiBwbV9meHUyKSBHcm91cCBleHBlcmllbmNlZCBtYXJrZWQgYnJhbmNoIHJlZGlyZWN0CitldmVudDowWDVDMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlhVX0ZJTl9HUlA5MiA6IChHcm91cCA5MiBwbV9meHUyKSBGWFUgcHJvZHVjZWQgYSByZXN1bHQKK2V2ZW50OjBYNUMzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GWExTX0ZVTExfQ1lDX0dSUDkyIDogKEdyb3VwIDkyIHBtX2Z4dTIpIEN5Y2xlcyBGWExTIHF1ZXVlIGlzIGZ1bGwKK2V2ZW50OjBYNUM0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDkyIDogKEdyb3VwIDkyIHBtX2Z4dTIpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYNUM1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlA5MiA6IChHcm91cCA5MiBwbV9meHUyKSBSdW4gY3ljbGVzCisKKyNHcm91cCA5MyBwbV9meHUzLCBGaXhlZCBQb2ludCBldmVudHMKK2V2ZW50OjBYNUQwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV8zSU5TVF9DTEJfQ1lDX0dSUDkzIDogKEdyb3VwIDkzIHBtX2Z4dTMpIEN5Y2xlcyAzIGluc3RydWN0aW9ucyBpbiBDTEIKK2V2ZW50OjBYNUQxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV80SU5TVF9DTEJfQ1lDX0dSUDkzIDogKEdyb3VwIDkzIHBtX2Z4dTMpIEN5Y2xlcyA0IGluc3RydWN0aW9ucyBpbiBDTEIKK2V2ZW50OjBYNUQyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GWFUwX0ZJTl9HUlA5MyA6IChHcm91cCA5MyBwbV9meHUzKSBGWFUwIHByb2R1Y2VkIGEgcmVzdWx0CitldmVudDowWDVEMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlhVMV9GSU5fR1JQOTMgOiAoR3JvdXAgOTMgcG1fZnh1MykgRlhVMSBwcm9kdWNlZCBhIHJlc3VsdAorZXZlbnQ6MFg1RDQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQOTMgOiAoR3JvdXAgOTMgcG1fZnh1MykgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFg1RDUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDkzIDogKEdyb3VwIDkzIHBtX2Z4dTMpIFJ1biBjeWNsZXMKKworI0dyb3VwIDk0IHBtX3NtdF9wcmlvcml0aWVzMSwgVGhyZWFkIHByaW9yaXR5IGV2ZW50cworZXZlbnQ6MFg1RTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1RIUkRfUFJJT180X0NZQ19HUlA5NCA6IChHcm91cCA5NCBwbV9zbXRfcHJpb3JpdGllczEpIEN5Y2xlcyB0aHJlYWQgcnVubmluZyBhdCBwcmlvcml0eSBsZXZlbCA0CitldmVudDowWDVFMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fVEhSRF9QUklPXzdfQ1lDX0dSUDk0IDogKEdyb3VwIDk0IHBtX3NtdF9wcmlvcml0aWVzMSkgQ3ljbGVzIHRocmVhZCBydW5uaW5nIGF0IHByaW9yaXR5IGxldmVsIDcKK2V2ZW50OjBYNUUyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9USFJEX1BSSU9fRElGRl8wX0NZQ19HUlA5NCA6IChHcm91cCA5NCBwbV9zbXRfcHJpb3JpdGllczEpIEN5Y2xlcyBubyB0aHJlYWQgcHJpb3JpdHkgZGlmZmVyZW5jZQorZXZlbnQ6MFg1RTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1RIUkRfUFJJT19ESUZGXzFvcjJfQ1lDX0dSUDk0IDogKEdyb3VwIDk0IHBtX3NtdF9wcmlvcml0aWVzMSkgQ3ljbGVzIHRocmVhZCBwcmlvcml0eSBkaWZmZXJlbmNlIGlzIDEgb3IgMgorZXZlbnQ6MFg1RTQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQOTQgOiAoR3JvdXAgOTQgcG1fc210X3ByaW9yaXRpZXMxKSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDVFNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQOTQgOiAoR3JvdXAgOTQgcG1fc210X3ByaW9yaXRpZXMxKSBSdW4gY3ljbGVzCisKKyNHcm91cCA5NSBwbV9zbXRfcHJpb3JpdGllczIsIFRocmVhZCBwcmlvcml0eSBldmVudHMKK2V2ZW50OjBYNUYwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9USFJEX1BSSU9fM19DWUNfR1JQOTUgOiAoR3JvdXAgOTUgcG1fc210X3ByaW9yaXRpZXMyKSBDeWNsZXMgdGhyZWFkIHJ1bm5pbmcgYXQgcHJpb3JpdHkgbGV2ZWwgMworZXZlbnQ6MFg1RjEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1RIUkRfUFJJT182X0NZQ19HUlA5NSA6IChHcm91cCA5NSBwbV9zbXRfcHJpb3JpdGllczIpIEN5Y2xlcyB0aHJlYWQgcnVubmluZyBhdCBwcmlvcml0eSBsZXZlbCA2CitldmVudDowWDVGMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fVEhSRF9QUklPX0RJRkZfM29yNF9DWUNfR1JQOTUgOiAoR3JvdXAgOTUgcG1fc210X3ByaW9yaXRpZXMyKSBDeWNsZXMgdGhyZWFkIHByaW9yaXR5IGRpZmZlcmVuY2UgaXMgMyBvciA0CitldmVudDowWDVGMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fVEhSRF9QUklPX0RJRkZfNW9yNl9DWUNfR1JQOTUgOiAoR3JvdXAgOTUgcG1fc210X3ByaW9yaXRpZXMyKSBDeWNsZXMgdGhyZWFkIHByaW9yaXR5IGRpZmZlcmVuY2UgaXMgNSBvciA2CitldmVudDowWDVGNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlA5NSA6IChHcm91cCA5NSBwbV9zbXRfcHJpb3JpdGllczIpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYNUY1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlA5NSA6IChHcm91cCA5NSBwbV9zbXRfcHJpb3JpdGllczIpIFJ1biBjeWNsZXMKKworI0dyb3VwIDk2IHBtX3NtdF9wcmlvcml0aWVzMywgVGhyZWFkIHByaW9yaXR5IGV2ZW50cworZXZlbnQ6MFg2MDAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1RIUkRfUFJJT18yX0NZQ19HUlA5NiA6IChHcm91cCA5NiBwbV9zbXRfcHJpb3JpdGllczMpIEN5Y2xlcyB0aHJlYWQgcnVubmluZyBhdCBwcmlvcml0eSBsZXZlbCAyCitldmVudDowWDYwMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fVEhSRF9QUklPXzVfQ1lDX0dSUDk2IDogKEdyb3VwIDk2IHBtX3NtdF9wcmlvcml0aWVzMykgQ3ljbGVzIHRocmVhZCBydW5uaW5nIGF0IHByaW9yaXR5IGxldmVsIDUKK2V2ZW50OjBYNjAyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9USFJEX1BSSU9fRElGRl9taW51czFvcjJfQ1lDX0dSUDk2IDogKEdyb3VwIDk2IHBtX3NtdF9wcmlvcml0aWVzMykgQ3ljbGVzIHRocmVhZCBwcmlvcml0eSBkaWZmZXJlbmNlIGlzIC0xIG9yIC0yCitldmVudDowWDYwMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fVEhSRF9QUklPX0RJRkZfbWludXMzb3I0X0NZQ19HUlA5NiA6IChHcm91cCA5NiBwbV9zbXRfcHJpb3JpdGllczMpIEN5Y2xlcyB0aHJlYWQgcHJpb3JpdHkgZGlmZmVyZW5jZSBpcyAtMyBvciAtNAorZXZlbnQ6MFg2MDQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQOTYgOiAoR3JvdXAgOTYgcG1fc210X3ByaW9yaXRpZXMzKSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDYwNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQOTYgOiAoR3JvdXAgOTYgcG1fc210X3ByaW9yaXRpZXMzKSBSdW4gY3ljbGVzCisKKyNHcm91cCA5NyBwbV9zbXRfcHJpb3JpdGllczQsIFRocmVhZCBwcmlvcml0eSBldmVudHMKK2V2ZW50OjBYNjEwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9USFJEX1BSSU9fMV9DWUNfR1JQOTcgOiAoR3JvdXAgOTcgcG1fc210X3ByaW9yaXRpZXM0KSBDeWNsZXMgdGhyZWFkIHJ1bm5pbmcgYXQgcHJpb3JpdHkgbGV2ZWwgMQorZXZlbnQ6MFg2MTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0hWX0NZQ19HUlA5NyA6IChHcm91cCA5NyBwbV9zbXRfcHJpb3JpdGllczQpIEh5cGVydmlzb3IgQ3ljbGVzCitldmVudDowWDYxMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fVEhSRF9QUklPX0RJRkZfbWludXM1b3I2X0NZQ19HUlA5NyA6IChHcm91cCA5NyBwbV9zbXRfcHJpb3JpdGllczQpIEN5Y2xlcyB0aHJlYWQgcHJpb3JpdHkgZGlmZmVyZW5jZSBpcyAtNSBvciAtNgorZXZlbnQ6MFg2MTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lPUFNfQ01QTF9HUlA5NyA6IChHcm91cCA5NyBwbV9zbXRfcHJpb3JpdGllczQpIElPUFMgaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFg2MTQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQOTcgOiAoR3JvdXAgOTcgcG1fc210X3ByaW9yaXRpZXM0KSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDYxNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQOTcgOiAoR3JvdXAgOTcgcG1fc210X3ByaW9yaXRpZXM0KSBSdW4gY3ljbGVzCisKKyNHcm91cCA5OCBwbV9zbXRfYm90aCwgVGhyZWFkIGNvbW1vbiBldmVudHMKK2V2ZW50OjBYNjIwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9USFJEX09ORV9SVU5fQ1lDX0dSUDk4IDogKEdyb3VwIDk4IHBtX3NtdF9ib3RoKSBPbmUgb2YgdGhlIHRocmVhZHMgaW4gcnVuIGN5Y2xlcworZXZlbnQ6MFg2MjEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1RIUkRfR1JQX0NNUExfQk9USF9DWUNfR1JQOTggOiAoR3JvdXAgOTggcG1fc210X2JvdGgpIEN5Y2xlcyBncm91cCBjb21wbGV0ZWQgYnkgYm90aCB0aHJlYWRzCitldmVudDowWDYyMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU9QU19DTVBMX0dSUDk4IDogKEdyb3VwIDk4IHBtX3NtdF9ib3RoKSBJT1BTIGluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYNjIzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9USFJEX0wyTUlTU19CT1RIX0NZQ19HUlA5OCA6IChHcm91cCA5OCBwbV9zbXRfYm90aCkgQ3ljbGVzIGJvdGggdGhyZWFkcyBpbiBMMiBtaXNzZXMKK2V2ZW50OjBYNjI0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDk4IDogKEdyb3VwIDk4IHBtX3NtdF9ib3RoKSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDYyNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQOTggOiAoR3JvdXAgOTggcG1fc210X2JvdGgpIFJ1biBjeWNsZXMKKworI0dyb3VwIDk5IHBtX3NtdF9zZWxlY3Rpb24sIFRocmVhZCBzZWxlY3Rpb24KK2V2ZW50OjBYNjMwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9TTk9PUF9UTEJJRV9HUlA5OSA6IChHcm91cCA5OSBwbV9zbXRfc2VsZWN0aW9uKSBTbm9vcCBUTEJJRQorZXZlbnQ6MFg2MzEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lPUFNfQ01QTF9HUlA5OSA6IChHcm91cCA5OSBwbV9zbXRfc2VsZWN0aW9uKSBJT1BTIGluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYNjMyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9USFJEX1NFTF9UMF9HUlA5OSA6IChHcm91cCA5OSBwbV9zbXRfc2VsZWN0aW9uKSBEZWNvZGUgc2VsZWN0ZWQgdGhyZWFkIDAKK2V2ZW50OjBYNjMzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9USFJEX1NFTF9UMV9HUlA5OSA6IChHcm91cCA5OSBwbV9zbXRfc2VsZWN0aW9uKSBEZWNvZGUgc2VsZWN0ZWQgdGhyZWFkIDEKK2V2ZW50OjBYNjM0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDk5IDogKEdyb3VwIDk5IHBtX3NtdF9zZWxlY3Rpb24pIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYNjM1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlA5OSA6IChHcm91cCA5OSBwbV9zbXRfc2VsZWN0aW9uKSBSdW4gY3ljbGVzCisKKyNHcm91cCAxMDAgcG1fc210X3NlbGVjdG92ZXIxLCBUaHJlYWQgc2VsZWN0aW9uIG92ZXJpZGUKK2V2ZW50OjBYNjQwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JT1BTX0NNUExfR1JQMTAwIDogKEdyb3VwIDEwMCBwbV9zbXRfc2VsZWN0b3ZlcjEpIElPUFMgaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFg2NDEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNXzBJTlNUX0NMQl9DWUNfR1JQMTAwIDogKEdyb3VwIDEwMCBwbV9zbXRfc2VsZWN0b3ZlcjEpIEN5Y2xlcyBubyBpbnN0cnVjdGlvbnMgaW4gQ0xCCitldmVudDowWDY0MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fVEhSRF9TRUxfT1ZFUl9DTEJfRU1QVFlfR1JQMTAwIDogKEdyb3VwIDEwMCBwbV9zbXRfc2VsZWN0b3ZlcjEpIFRocmVhZCBzZWxlY3Rpb24gb3ZlcmlkZXMgY2F1c2VkIGJ5IENMQiBlbXB0eQorZXZlbnQ6MFg2NDMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1RIUkRfU0VMX09WRVJfR0NUX0lNQkFMX0dSUDEwMCA6IChHcm91cCAxMDAgcG1fc210X3NlbGVjdG92ZXIxKSBUaHJlYWQgc2VsZWN0aW9uIG92ZXJpZGVzIGNhdXNlZCBieSBHQ1QgaW1iYWxhbmNlCitldmVudDowWDY0NCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAxMDAgOiAoR3JvdXAgMTAwIHBtX3NtdF9zZWxlY3RvdmVyMSkgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFg2NDUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDEwMCA6IChHcm91cCAxMDAgcG1fc210X3NlbGVjdG92ZXIxKSBSdW4gY3ljbGVzCisKKyNHcm91cCAxMDEgcG1fc210X3NlbGVjdG92ZXIyLCBUaHJlYWQgc2VsZWN0aW9uIG92ZXJpZGUKK2V2ZW50OjBYNjUwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JT1BTX0NNUExfR1JQMTAxIDogKEdyb3VwIDEwMSBwbV9zbXRfc2VsZWN0b3ZlcjIpIElPUFMgaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFg2NTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQMTAxIDogKEdyb3VwIDEwMSBwbV9zbXRfc2VsZWN0b3ZlcjIpIFByb2Nlc3NvciBjeWNsZXMKK2V2ZW50OjBYNjUyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9USFJEX1NFTF9PVkVSX0lTVV9IT0xEX0dSUDEwMSA6IChHcm91cCAxMDEgcG1fc210X3NlbGVjdG92ZXIyKSBUaHJlYWQgc2VsZWN0aW9uIG92ZXJpZGVzIGNhdXNlZCBieSBJU1UgaG9sZHMKK2V2ZW50OjBYNjUzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9USFJEX1NFTF9PVkVSX0wyTUlTU19HUlAxMDEgOiAoR3JvdXAgMTAxIHBtX3NtdF9zZWxlY3RvdmVyMikgVGhyZWFkIHNlbGVjdGlvbiBvdmVyaWRlcyBjYXVzZWQgYnkgTDIgbWlzc2VzCitldmVudDowWDY1NCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAxMDEgOiAoR3JvdXAgMTAxIHBtX3NtdF9zZWxlY3RvdmVyMikgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFg2NTUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDEwMSA6IChHcm91cCAxMDEgcG1fc210X3NlbGVjdG92ZXIyKSBSdW4gY3ljbGVzCisKKyNHcm91cCAxMDIgcG1fZmFicmljMSwgRmFicmljIGV2ZW50cworZXZlbnQ6MFg2NjAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZBQl9DTURfSVNTVUVEX0dSUDEwMiA6IChHcm91cCAxMDIgcG1fZmFicmljMSkgRmFicmljIGNvbW1hbmQgaXNzdWVkCitldmVudDowWDY2MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRkFCX0RDTEFJTV9JU1NVRURfR1JQMTAyIDogKEdyb3VwIDEwMiBwbV9mYWJyaWMxKSBkY2xhaW0gaXNzdWVkCitldmVudDowWDY2MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRkFCX0NNRF9SRVRSSUVEX0dSUDEwMiA6IChHcm91cCAxMDIgcG1fZmFicmljMSkgRmFicmljIGNvbW1hbmQgcmV0cmllZAorZXZlbnQ6MFg2NjMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZBQl9EQ0xBSU1fUkVUUklFRF9HUlAxMDIgOiAoR3JvdXAgMTAyIHBtX2ZhYnJpYzEpIGRjbGFpbSByZXRyaWVkCitldmVudDowWDY2NCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAxMDIgOiAoR3JvdXAgMTAyIHBtX2ZhYnJpYzEpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYNjY1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxMDIgOiAoR3JvdXAgMTAyIHBtX2ZhYnJpYzEpIFJ1biBjeWNsZXMKKworI0dyb3VwIDEwMyBwbV9mYWJyaWMyLCBGYWJyaWMgZGF0YSBtb3ZlbWVudAorZXZlbnQ6MFg2NzAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZBQl9QMXRvTTFfU0lERUNBUl9FTVBUWV9HUlAxMDMgOiAoR3JvdXAgMTAzIHBtX2ZhYnJpYzIpIFAxIHRvIE0xIHNpZGVjYXIgZW1wdHkKK2V2ZW50OjBYNjcxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GQUJfSE9MRHRvVk5fRU1QVFlfR1JQMTAzIDogKEdyb3VwIDEwMyBwbV9mYWJyaWMyKSBIb2xkIGJ1ZmZlciB0byBWTiBlbXB0eQorZXZlbnQ6MFg2NzIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZBQl9QMXRvVk5vck5OX1NJREVDQVJfRU1QVFlfR1JQMTAzIDogKEdyb3VwIDEwMyBwbV9mYWJyaWMyKSBQMSB0byBWTi9OTiBzaWRlY2FyIGVtcHR5CitldmVudDowWDY3MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRkFCX1ZCWVBBU1NfRU1QVFlfR1JQMTAzIDogKEdyb3VwIDEwMyBwbV9mYWJyaWMyKSBWZXJ0aWNhbCBieXBhc3MgYnVmZmVyIGVtcHR5CitldmVudDowWDY3NCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAxMDMgOiAoR3JvdXAgMTAzIHBtX2ZhYnJpYzIpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYNjc1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxMDMgOiAoR3JvdXAgMTAzIHBtX2ZhYnJpYzIpIFJ1biBjeWNsZXMKKworI0dyb3VwIDEwNCBwbV9mYWJyaWMzLCBGYWJyaWMgZGF0YSBtb3ZlbWVudAorZXZlbnQ6MFg2ODAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZBQl9QTnRvTk5fRElSRUNUX0dSUDEwNCA6IChHcm91cCAxMDQgcG1fZmFicmljMykgUE4gdG8gTk4gYmVhdCB3ZW50IHN0cmFpZ2h0IHRvIGl0cyBkZXN0aW5hdGlvbgorZXZlbnQ6MFg2ODEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZBQl9QTnRvVk5fRElSRUNUX0dSUDEwNCA6IChHcm91cCAxMDQgcG1fZmFicmljMykgUE4gdG8gVk4gYmVhdCB3ZW50IHN0cmFpZ2h0IHRvIGl0cyBkZXN0aW5hdGlvbgorZXZlbnQ6MFg2ODIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZBQl9QTnRvTk5fU0lERUNBUl9HUlAxMDQgOiAoR3JvdXAgMTA0IHBtX2ZhYnJpYzMpIFBOIHRvIE5OIGJlYXQgd2VudCB0byBzaWRlY2FyIGZpcnN0CitldmVudDowWDY4MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRkFCX1BOdG9WTl9TSURFQ0FSX0dSUDEwNCA6IChHcm91cCAxMDQgcG1fZmFicmljMykgUE4gdG8gVk4gYmVhdCB3ZW50IHRvIHNpZGVjYXIgZmlyc3QKK2V2ZW50OjBYNjg0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDEwNCA6IChHcm91cCAxMDQgcG1fZmFicmljMykgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFg2ODUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDEwNCA6IChHcm91cCAxMDQgcG1fZmFicmljMykgUnVuIGN5Y2xlcworCisjR3JvdXAgMTA1IHBtX2ZhYnJpYzQsIEZhYnJpYyBkYXRhIG1vdmVtZW50CitldmVudDowWDY5MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRkFCX00xdG9QMV9TSURFQ0FSX0VNUFRZX0dSUDEwNSA6IChHcm91cCAxMDUgcG1fZmFicmljNCkgTTEgdG8gUDEgc2lkZWNhciBlbXB0eQorZXZlbnQ6MFg2OTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZBQl9IT0xEdG9OTl9FTVBUWV9HUlAxMDUgOiAoR3JvdXAgMTA1IHBtX2ZhYnJpYzQpIEhvbGQgYnVmZmVyIHRvIE5OIGVtcHR5CitldmVudDowWDY5MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRUVfT0ZGX0dSUDEwNSA6IChHcm91cCAxMDUgcG1fZmFicmljNCkgQ3ljbGVzIE1TUihFRSkgYml0IG9mZgorZXZlbnQ6MFg2OTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZBQl9NMXRvVk5vck5OX1NJREVDQVJfRU1QVFlfR1JQMTA1IDogKEdyb3VwIDEwNSBwbV9mYWJyaWM0KSBNMSB0byBWTi9OTiBzaWRlY2FyIGVtcHR5CitldmVudDowWDY5NCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAxMDUgOiAoR3JvdXAgMTA1IHBtX2ZhYnJpYzQpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYNjk1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxMDUgOiAoR3JvdXAgMTA1IHBtX2ZhYnJpYzQpIFJ1biBjeWNsZXMKKworI0dyb3VwIDEwNiBwbV9zbm9vcDEsIFNub29wIHJldHJ5CitldmVudDowWDZBMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fU05PT1BfUkRfUkVUUllfUUZVTExfR1JQMTA2IDogKEdyb3VwIDEwNiBwbV9zbm9vcDEpIFNub29wIHJlYWQgcmV0cnkgZHVlIHRvIHJlYWQgcXVldWUgZnVsbAorZXZlbnQ6MFg2QTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1NOT09QX0RDTEFJTV9SRVRSWV9RRlVMTF9HUlAxMDYgOiAoR3JvdXAgMTA2IHBtX3Nub29wMSkgU25vb3AgZGNsYWltL2ZsdXNoIHJldHJ5IGR1ZSB0byB3cml0ZS9kY2xhaW0gcXVldWVzIGZ1bGwKK2V2ZW50OjBYNkEyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9TTk9PUF9XUl9SRVRSWV9RRlVMTF9HUlAxMDYgOiAoR3JvdXAgMTA2IHBtX3Nub29wMSkgU25vb3AgcmVhZCByZXRyeSBkdWUgdG8gcmVhZCBxdWV1ZSBmdWxsCitldmVudDowWDZBMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fU05PT1BfUEFSVElBTF9SVFJZX1FGVUxMX0dSUDEwNiA6IChHcm91cCAxMDYgcG1fc25vb3AxKSBTbm9vcCBwYXJ0aWFsIHdyaXRlIHJldHJ5IGR1ZSB0byBwYXJ0aWFsLXdyaXRlIHF1ZXVlcyBmdWxsCitldmVudDowWDZBNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAxMDYgOiAoR3JvdXAgMTA2IHBtX3Nub29wMSkgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFg2QTUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDEwNiA6IChHcm91cCAxMDYgcG1fc25vb3AxKSBSdW4gY3ljbGVzCisKKyNHcm91cCAxMDcgcG1fc25vb3AyLCBTbm9vcCByZWFkIHJldHJ5CitldmVudDowWDZCMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fU05PT1BfUkRfUkVUUllfUlFfR1JQMTA3IDogKEdyb3VwIDEwNyBwbV9zbm9vcDIpIFNub29wIHJlYWQgcmV0cnkgZHVlIHRvIGNvbGxpc2lvbiB3aXRoIGFjdGl2ZSByZWFkIHF1ZXVlCitldmVudDowWDZCMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fU05PT1BfUkVUUllfMUFIRUFEX0dSUDEwNyA6IChHcm91cCAxMDcgcG1fc25vb3AyKSBTbm9vcCByZXRyeSBkdWUgdG8gb25lIGFoZWFkIGNvbGxpc2lvbgorZXZlbnQ6MFg2QjIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1NOT09QX1JEX1JFVFJZX1dRX0dSUDEwNyA6IChHcm91cCAxMDcgcG1fc25vb3AyKSBTbm9vcCByZWFkIHJldHJ5IGR1ZSB0byBjb2xsaXNpb24gd2l0aCBhY3RpdmUgd3JpdGUgcXVldWUKK2V2ZW50OjBYNkIzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JT1BTX0NNUExfR1JQMTA3IDogKEdyb3VwIDEwNyBwbV9zbm9vcDIpIElPUFMgaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFg2QjQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMTA3IDogKEdyb3VwIDEwNyBwbV9zbm9vcDIpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYNkI1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxMDcgOiAoR3JvdXAgMTA3IHBtX3Nub29wMikgUnVuIGN5Y2xlcworCisjR3JvdXAgMTA4IHBtX3Nub29wMywgU25vb3Agd3JpdGUgcmV0cnkKK2V2ZW50OjBYNkMwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9TTk9PUF9XUl9SRVRSWV9SUV9HUlAxMDggOiAoR3JvdXAgMTA4IHBtX3Nub29wMykgU25vb3Agd3JpdGUvZGNsYWltIHJldHJ5IGR1ZSB0byBjb2xsaXNpb24gd2l0aCBhY3RpdmUgcmVhZCBxdWV1ZQorZXZlbnQ6MFg2QzEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01FTV9ISV9QUklPX1dSX0NNUExfR1JQMTA4IDogKEdyb3VwIDEwOCBwbV9zbm9vcDMpIEhpZ2ggcHJpb3JpdHkgd3JpdGUgY29tcGxldGVkCitldmVudDowWDZDMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fU05PT1BfV1JfUkVUUllfV1FfR1JQMTA4IDogKEdyb3VwIDEwOCBwbV9zbm9vcDMpIFNub29wIHdyaXRlL2RjbGFpbSByZXRyeSBkdWUgdG8gY29sbGlzaW9uIHdpdGggYWN0aXZlIHdyaXRlIHF1ZXVlCitldmVudDowWDZDMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTUVNX0xPX1BSSU9fV1JfQ01QTF9HUlAxMDggOiAoR3JvdXAgMTA4IHBtX3Nub29wMykgTG93IHByaW9yaXR5IHdyaXRlIGNvbXBsZXRlZAorZXZlbnQ6MFg2QzQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMTA4IDogKEdyb3VwIDEwOCBwbV9zbm9vcDMpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYNkM1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxMDggOiAoR3JvdXAgMTA4IHBtX3Nub29wMykgUnVuIGN5Y2xlcworCisjR3JvdXAgMTA5IHBtX3Nub29wNCwgU25vb3AgcGFydGlhbCB3cml0ZSByZXRyeQorZXZlbnQ6MFg2RDAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1NOT09QX1BXX1JFVFJZX1JRX0dSUDEwOSA6IChHcm91cCAxMDkgcG1fc25vb3A0KSBTbm9vcCBwYXJ0aWFsLXdyaXRlIHJldHJ5IGR1ZSB0byBjb2xsaXNpb24gd2l0aCBhY3RpdmUgcmVhZCBxdWV1ZQorZXZlbnQ6MFg2RDEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01FTV9ISV9QUklPX1BXX0NNUExfR1JQMTA5IDogKEdyb3VwIDEwOSBwbV9zbm9vcDQpIEhpZ2ggcHJpb3JpdHkgcGFydGlhbC13cml0ZSBjb21wbGV0ZWQKK2V2ZW50OjBYNkQyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9TTk9PUF9QV19SRVRSWV9XUV9QV1FfR1JQMTA5IDogKEdyb3VwIDEwOSBwbV9zbm9vcDQpIFNub29wIHBhcnRpYWwtd3JpdGUgcmV0cnkgZHVlIHRvIGNvbGxpc2lvbiB3aXRoIGFjdGl2ZSB3cml0ZSBvciBwYXJ0aWFsLXdyaXRlIHF1ZXVlCitldmVudDowWDZEMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTUVNX0xPX1BSSU9fUFdfQ01QTF9HUlAxMDkgOiAoR3JvdXAgMTA5IHBtX3Nub29wNCkgTG93IHByaW9yaXR5IHBhcnRpYWwtd3JpdGUgY29tcGxldGVkCitldmVudDowWDZENCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAxMDkgOiAoR3JvdXAgMTA5IHBtX3Nub29wNCkgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFg2RDUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDEwOSA6IChHcm91cCAxMDkgcG1fc25vb3A0KSBSdW4gY3ljbGVzCisKKyNHcm91cCAxMTAgcG1fbWVtX3JxLCBNZW1vcnkgcmVhZCBxdWV1ZSBkaXNwYXRjaAorZXZlbnQ6MFg2RTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01FTV9SUV9ESVNQX0dSUDExMCA6IChHcm91cCAxMTAgcG1fbWVtX3JxKSBNZW1vcnkgcmVhZCBxdWV1ZSBkaXNwYXRjaGVkCitldmVudDowWDZFMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTUVNX1JRX0RJU1BfQlVTWTh0bzE1X0dSUDExMCA6IChHcm91cCAxMTAgcG1fbWVtX3JxKSBNZW1vcnkgcmVhZCBxdWV1ZSBkaXNwYXRjaGVkIHdpdGggOC0xNSBxdWV1ZXMgYnVzeQorZXZlbnQ6MFg2RTIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01FTV9SUV9ESVNQX0JVU1kxdG83X0dSUDExMCA6IChHcm91cCAxMTAgcG1fbWVtX3JxKSBNZW1vcnkgcmVhZCBxdWV1ZSBkaXNwYXRjaGVkIHdpdGggMS03IHF1ZXVlcyBidXN5CitldmVudDowWDZFMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRUVfT0ZGX0VYVF9JTlRfR1JQMTEwIDogKEdyb3VwIDExMCBwbV9tZW1fcnEpIEN5Y2xlcyBNU1IoRUUpIGJpdCBvZmYgYW5kIGV4dGVybmFsIGludGVycnVwdCBwZW5kaW5nCitldmVudDowWDZFNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAxMTAgOiAoR3JvdXAgMTEwIHBtX21lbV9ycSkgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFg2RTUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDExMCA6IChHcm91cCAxMTAgcG1fbWVtX3JxKSBSdW4gY3ljbGVzCisKKyNHcm91cCAxMTEgcG1fbWVtX3JlYWQsIE1lbW9yeSByZWFkIGNvbXBsZXRlIGFuZCBjYW5jZWwKK2V2ZW50OjBYNkYwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NRU1fUkVBRF9DTVBMX0dSUDExMSA6IChHcm91cCAxMTEgcG1fbWVtX3JlYWQpIE1lbW9yeSByZWFkIGNvbXBsZXRlZCBvciBjYW5jZWxlZAorZXZlbnQ6MFg2RjEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01FTV9GQVNUX1BBVEhfUkRfQ01QTF9HUlAxMTEgOiAoR3JvdXAgMTExIHBtX21lbV9yZWFkKSBGYXN0IHBhdGggbWVtb3J5IHJlYWQgY29tcGxldGVkCitldmVudDowWDZGMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTUVNX1NQRUNfUkRfQ0FOQ0VMX0dSUDExMSA6IChHcm91cCAxMTEgcG1fbWVtX3JlYWQpIFNwZWN1bGF0aXZlIG1lbW9yeSByZWFkIGNhbmNlbGVkCitldmVudDowWDZGMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRVhUX0lOVF9HUlAxMTEgOiAoR3JvdXAgMTExIHBtX21lbV9yZWFkKSBFeHRlcm5hbCBpbnRlcnJ1cHRzCitldmVudDowWDZGNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAxMTEgOiAoR3JvdXAgMTExIHBtX21lbV9yZWFkKSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDZGNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQMTExIDogKEdyb3VwIDExMSBwbV9tZW1fcmVhZCkgUnVuIGN5Y2xlcworCisjR3JvdXAgMTEyIHBtX21lbV93cSwgTWVtb3J5IHdyaXRlIHF1ZXVlIGRpc3BhdGNoCitldmVudDowWDcwMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTUVNX1dRX0RJU1BfV1JJVEVfR1JQMTEyIDogKEdyb3VwIDExMiBwbV9tZW1fd3EpIE1lbW9yeSB3cml0ZSBxdWV1ZSBkaXNwYXRjaGVkIGR1ZSB0byB3cml0ZQorZXZlbnQ6MFg3MDEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01FTV9XUV9ESVNQX0JVU1kxdG83X0dSUDExMiA6IChHcm91cCAxMTIgcG1fbWVtX3dxKSBNZW1vcnkgd3JpdGUgcXVldWUgZGlzcGF0Y2hlZCB3aXRoIDEtNyBxdWV1ZXMgYnVzeQorZXZlbnQ6MFg3MDIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01FTV9XUV9ESVNQX0RDTEFJTV9HUlAxMTIgOiAoR3JvdXAgMTEyIHBtX21lbV93cSkgTWVtb3J5IHdyaXRlIHF1ZXVlIGRpc3BhdGNoZWQgZHVlIHRvIGRjbGFpbS9mbHVzaAorZXZlbnQ6MFg3MDMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01FTV9XUV9ESVNQX0JVU1k4dG8xNV9HUlAxMTIgOiAoR3JvdXAgMTEyIHBtX21lbV93cSkgTWVtb3J5IHdyaXRlIHF1ZXVlIGRpc3BhdGNoZWQgd2l0aCA4LTE1IHF1ZXVlcyBidXN5CitldmVudDowWDcwNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAxMTIgOiAoR3JvdXAgMTEyIHBtX21lbV93cSkgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFg3MDUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDExMiA6IChHcm91cCAxMTIgcG1fbWVtX3dxKSBSdW4gY3ljbGVzCisKKyNHcm91cCAxMTMgcG1fbWVtX3B3cSwgTWVtb3J5IHBhcnRpYWwgd3JpdGUgcXVldWUKK2V2ZW50OjBYNzEwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NRU1fUFdRX0RJU1BfR1JQMTEzIDogKEdyb3VwIDExMyBwbV9tZW1fcHdxKSBNZW1vcnkgcGFydGlhbC13cml0ZSBxdWV1ZSBkaXNwYXRjaGVkCitldmVudDowWDcxMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTUVNX1BXUV9ESVNQX0JVU1kyb3IzX0dSUDExMyA6IChHcm91cCAxMTMgcG1fbWVtX3B3cSkgTWVtb3J5IHBhcnRpYWwtd3JpdGUgcXVldWUgZGlzcGF0Y2hlZCB3aXRoIDItMyBxdWV1ZXMgYnVzeQorZXZlbnQ6MFg3MTIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01FTV9QV19HQVRIX0dSUDExMyA6IChHcm91cCAxMTMgcG1fbWVtX3B3cSkgTWVtb3J5IHBhcnRpYWwtd3JpdGUgZ2F0aGVyZWQKK2V2ZW50OjBYNzEzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NRU1fUFdfQ01QTF9HUlAxMTMgOiAoR3JvdXAgMTEzIHBtX21lbV9wd3EpIE1lbW9yeSBwYXJ0aWFsLXdyaXRlIGNvbXBsZXRlZAorZXZlbnQ6MFg3MTQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMTEzIDogKEdyb3VwIDExMyBwbV9tZW1fcHdxKSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDcxNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQMTEzIDogKEdyb3VwIDExMyBwbV9tZW1fcHdxKSBSdW4gY3ljbGVzCisKKyNHcm91cCAxMTQgcG1fdGhyZXNob2xkLCBUaHJlc2hvbGRpbmcKK2V2ZW50OjBYNzIwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfR1JQX0RJU1BfR1JQMTE0IDogKEdyb3VwIDExNCBwbV90aHJlc2hvbGQpIE1hcmtlZCBncm91cCBkaXNwYXRjaGVkCitldmVudDowWDcyMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0lNUl9SRUxPQURfR1JQMTE0IDogKEdyb3VwIDExNCBwbV90aHJlc2hvbGQpIE1hcmtlZCBJTVIgcmVsb2FkZWQKK2V2ZW50OjBYNzIyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9USFJFU0hfVElNRU9fR1JQMTE0IDogKEdyb3VwIDExNCBwbV90aHJlc2hvbGQpIFRocmVzaG9sZCB0aW1lb3V0CitldmVudDowWDcyMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0xTVV9GSU5fR1JQMTE0IDogKEdyb3VwIDExNCBwbV90aHJlc2hvbGQpIE1hcmtlZCBpbnN0cnVjdGlvbiBMU1UgcHJvY2Vzc2luZyBmaW5pc2hlZAorZXZlbnQ6MFg3MjQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMTE0IDogKEdyb3VwIDExNCBwbV90aHJlc2hvbGQpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYNzI1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxMTQgOiAoR3JvdXAgMTE0IHBtX3RocmVzaG9sZCkgUnVuIGN5Y2xlcworCisjR3JvdXAgMTE1IHBtX21ya19ncnAxLCBNYXJrZWQgZ3JvdXAgZXZlbnRzCitldmVudDowWDczMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0dSUF9ESVNQX0dSUDExNSA6IChHcm91cCAxMTUgcG1fbXJrX2dycDEpIE1hcmtlZCBncm91cCBkaXNwYXRjaGVkCitldmVudDowWDczMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX1NUX01JU1NfTDFfR1JQMTE1IDogKEdyb3VwIDExNSBwbV9tcmtfZ3JwMSkgTWFya2VkIEwxIEQgY2FjaGUgc3RvcmUgbWlzc2VzCitldmVudDowWDczMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0lOU1RfRklOX0dSUDExNSA6IChHcm91cCAxMTUgcG1fbXJrX2dycDEpIE1hcmtlZCBpbnN0cnVjdGlvbiBmaW5pc2hlZAorZXZlbnQ6MFg3MzMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19HUlBfQ01QTF9HUlAxMTUgOiAoR3JvdXAgMTE1IHBtX21ya19ncnAxKSBNYXJrZWQgZ3JvdXAgY29tcGxldGVkCitldmVudDowWDczNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAxMTUgOiAoR3JvdXAgMTE1IHBtX21ya19ncnAxKSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDczNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQMTE1IDogKEdyb3VwIDExNSBwbV9tcmtfZ3JwMSkgUnVuIGN5Y2xlcworCisjR3JvdXAgMTE2IHBtX21ya19ncnAyLCBNYXJrZWQgZ3JvdXAgZXZlbnRzCitldmVudDowWDc0MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0dSUF9JU1NVRURfR1JQMTE2IDogKEdyb3VwIDExNiBwbV9tcmtfZ3JwMikgTWFya2VkIGdyb3VwIGlzc3VlZAorZXZlbnQ6MFg3NDEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19CUlVfRklOX0dSUDExNiA6IChHcm91cCAxMTYgcG1fbXJrX2dycDIpIE1hcmtlZCBpbnN0cnVjdGlvbiBCUlUgcHJvY2Vzc2luZyBmaW5pc2hlZAorZXZlbnQ6MFg3NDIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19MMV9SRUxPQURfVkFMSURfR1JQMTE2IDogKEdyb3VwIDExNiBwbV9tcmtfZ3JwMikgTWFya2VkIEwxIHJlbG9hZCBkYXRhIHNvdXJjZSB2YWxpZAorZXZlbnQ6MFg3NDMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19HUlBfSUNfTUlTU19HUlAxMTYgOiAoR3JvdXAgMTE2IHBtX21ya19ncnAyKSBHcm91cCBleHBlcmllbmNlZCBtYXJrZWQgSSBjYWNoZSBtaXNzCitldmVudDowWDc0NCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAxMTYgOiAoR3JvdXAgMTE2IHBtX21ya19ncnAyKSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDc0NSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQMTE2IDogKEdyb3VwIDExNiBwbV9tcmtfZ3JwMikgUnVuIGN5Y2xlcworCisjR3JvdXAgMTE3IHBtX21ya19kc291cmNlMSwgTWFya2VkIGRhdGEgZnJvbSAKK2V2ZW50OjBYNzUwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfREFUQV9GUk9NX0wyX0dSUDExNyA6IChHcm91cCAxMTcgcG1fbXJrX2Rzb3VyY2UxKSBNYXJrZWQgZGF0YSBsb2FkZWQgZnJvbSBMMgorZXZlbnQ6MFg3NTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19EQVRBX0ZST01fTDJfQ1lDX0dSUDExNyA6IChHcm91cCAxMTcgcG1fbXJrX2Rzb3VyY2UxKSBNYXJrZWQgbG9hZCBsYXRlbmN5IGZyb20gTDIKK2V2ZW50OjBYNzUyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfREFUQV9GUk9NX0wyNV9NT0RfR1JQMTE3IDogKEdyb3VwIDExNyBwbV9tcmtfZHNvdXJjZTEpIE1hcmtlZCBkYXRhIGxvYWRlZCBmcm9tIEwyLjUgbW9kaWZpZWQKK2V2ZW50OjBYNzUzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfREFUQV9GUk9NX0wyNV9NT0RfQ1lDX0dSUDExNyA6IChHcm91cCAxMTcgcG1fbXJrX2Rzb3VyY2UxKSBNYXJrZWQgbG9hZCBsYXRlbmN5IGZyb20gTDIuNSBtb2RpZmllZAorZXZlbnQ6MFg3NTQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMTE3IDogKEdyb3VwIDExNyBwbV9tcmtfZHNvdXJjZTEpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYNzU1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxMTcgOiAoR3JvdXAgMTE3IHBtX21ya19kc291cmNlMSkgUnVuIGN5Y2xlcworCisjR3JvdXAgMTE4IHBtX21ya19kc291cmNlMiwgTWFya2VkIGRhdGEgZnJvbQorZXZlbnQ6MFg3NjAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19EQVRBX0ZST01fTDI1X1NIUl9HUlAxMTggOiAoR3JvdXAgMTE4IHBtX21ya19kc291cmNlMikgTWFya2VkIGRhdGEgbG9hZGVkIGZyb20gTDIuNSBzaGFyZWQKK2V2ZW50OjBYNzYxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfREFUQV9GUk9NX0wyNV9TSFJfQ1lDX0dSUDExOCA6IChHcm91cCAxMTggcG1fbXJrX2Rzb3VyY2UyKSBNYXJrZWQgbG9hZCBsYXRlbmN5IGZyb20gTDIuNSBzaGFyZWQKK2V2ZW50OjBYNzYyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JT1BTX0NNUExfR1JQMTE4IDogKEdyb3VwIDExOCBwbV9tcmtfZHNvdXJjZTIpIElPUFMgaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFg3NjMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVV9GSU5fR1JQMTE4IDogKEdyb3VwIDExOCBwbV9tcmtfZHNvdXJjZTIpIEZQVSBwcm9kdWNlZCBhIHJlc3VsdAorZXZlbnQ6MFg3NjQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMTE4IDogKEdyb3VwIDExOCBwbV9tcmtfZHNvdXJjZTIpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYNzY1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxMTggOiAoR3JvdXAgMTE4IHBtX21ya19kc291cmNlMikgUnVuIGN5Y2xlcworCisjR3JvdXAgMTE5IHBtX21ya19kc291cmNlMywgTWFya2VkIGRhdGEgZnJvbQorZXZlbnQ6MFg3NzAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19EQVRBX0ZST01fTDNfR1JQMTE5IDogKEdyb3VwIDExOSBwbV9tcmtfZHNvdXJjZTMpIE1hcmtlZCBkYXRhIGxvYWRlZCBmcm9tIEwzCitldmVudDowWDc3MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0RBVEFfRlJPTV9MM19DWUNfR1JQMTE5IDogKEdyb3VwIDExOSBwbV9tcmtfZHNvdXJjZTMpIE1hcmtlZCBsb2FkIGxhdGVuY3kgZnJvbSBMMworZXZlbnQ6MFg3NzIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19EQVRBX0ZST01fTDM1X01PRF9HUlAxMTkgOiAoR3JvdXAgMTE5IHBtX21ya19kc291cmNlMykgTWFya2VkIGRhdGEgbG9hZGVkIGZyb20gTDMuNSBtb2RpZmllZAorZXZlbnQ6MFg3NzMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19EQVRBX0ZST01fTDM1X01PRF9DWUNfR1JQMTE5IDogKEdyb3VwIDExOSBwbV9tcmtfZHNvdXJjZTMpIE1hcmtlZCBsb2FkIGxhdGVuY3kgZnJvbSBMMy41IG1vZGlmaWVkCitldmVudDowWDc3NCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAxMTkgOiAoR3JvdXAgMTE5IHBtX21ya19kc291cmNlMykgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFg3NzUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDExOSA6IChHcm91cCAxMTkgcG1fbXJrX2Rzb3VyY2UzKSBSdW4gY3ljbGVzCisKKyNHcm91cCAxMjAgcG1fbXJrX2Rzb3VyY2U0LCBNYXJrZWQgZGF0YSBmcm9tCitldmVudDowWDc4MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0RBVEFfRlJPTV9STUVNX0dSUDEyMCA6IChHcm91cCAxMjAgcG1fbXJrX2Rzb3VyY2U0KSBNYXJrZWQgZGF0YSBsb2FkZWQgZnJvbSByZW1vdGUgbWVtb3J5CitldmVudDowWDc4MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0RBVEFfRlJPTV9MMjc1X1NIUl9DWUNfR1JQMTIwIDogKEdyb3VwIDEyMCBwbV9tcmtfZHNvdXJjZTQpIE1hcmtlZCBsb2FkIGxhdGVuY3kgZnJvbSBMMi43NSBzaGFyZWQKK2V2ZW50OjBYNzgyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfREFUQV9GUk9NX0wyNzVfU0hSX0dSUDEyMCA6IChHcm91cCAxMjAgcG1fbXJrX2Rzb3VyY2U0KSBNYXJrZWQgZGF0YSBsb2FkZWQgZnJvbSBMMi43NSBzaGFyZWQKK2V2ZW50OjBYNzgzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfREFUQV9GUk9NX1JNRU1fQ1lDX0dSUDEyMCA6IChHcm91cCAxMjAgcG1fbXJrX2Rzb3VyY2U0KSBNYXJrZWQgbG9hZCBsYXRlbmN5IGZyb20gcmVtb3RlIG1lbW9yeQorZXZlbnQ6MFg3ODQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMTIwIDogKEdyb3VwIDEyMCBwbV9tcmtfZHNvdXJjZTQpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYNzg1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxMjAgOiAoR3JvdXAgMTIwIHBtX21ya19kc291cmNlNCkgUnVuIGN5Y2xlcworCisjR3JvdXAgMTIxIHBtX21ya19kc291cmNlNSwgTWFya2VkIGRhdGEgZnJvbQorZXZlbnQ6MFg3OTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19EQVRBX0ZST01fTDM1X1NIUl9HUlAxMjEgOiAoR3JvdXAgMTIxIHBtX21ya19kc291cmNlNSkgTWFya2VkIGRhdGEgbG9hZGVkIGZyb20gTDMuNSBzaGFyZWQKK2V2ZW50OjBYNzkxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfREFUQV9GUk9NX0wzNV9TSFJfQ1lDX0dSUDEyMSA6IChHcm91cCAxMjEgcG1fbXJrX2Rzb3VyY2U1KSBNYXJrZWQgbG9hZCBsYXRlbmN5IGZyb20gTDMuNSBzaGFyZWQKK2V2ZW50OjBYNzkyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfREFUQV9GUk9NX0xNRU1fR1JQMTIxIDogKEdyb3VwIDEyMSBwbV9tcmtfZHNvdXJjZTUpIE1hcmtlZCBkYXRhIGxvYWRlZCBmcm9tIGxvY2FsIG1lbW9yeQorZXZlbnQ6MFg3OTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19EQVRBX0ZST01fTE1FTV9DWUNfR1JQMTIxIDogKEdyb3VwIDEyMSBwbV9tcmtfZHNvdXJjZTUpIE1hcmtlZCBsb2FkIGxhdGVuY3kgZnJvbSBsb2NhbCBtZW1vcnkKK2V2ZW50OjBYNzk0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDEyMSA6IChHcm91cCAxMjEgcG1fbXJrX2Rzb3VyY2U1KSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDc5NSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQMTIxIDogKEdyb3VwIDEyMSBwbV9tcmtfZHNvdXJjZTUpIFJ1biBjeWNsZXMKKworI0dyb3VwIDEyMiBwbV9tcmtfZHNvdXJjZTYsIE1hcmtlZCBkYXRhIGZyb20KK2V2ZW50OjBYN0EwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfREFUQV9GUk9NX0wyNzVfTU9EX0dSUDEyMiA6IChHcm91cCAxMjIgcG1fbXJrX2Rzb3VyY2U2KSBNYXJrZWQgZGF0YSBsb2FkZWQgZnJvbSBMMi43NSBtb2RpZmllZAorZXZlbnQ6MFg3QTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19EQVRBX0ZST01fTDI3NV9TSFJfQ1lDX0dSUDEyMiA6IChHcm91cCAxMjIgcG1fbXJrX2Rzb3VyY2U2KSBNYXJrZWQgbG9hZCBsYXRlbmN5IGZyb20gTDIuNzUgc2hhcmVkCitldmVudDowWDdBMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU9QU19DTVBMX0dSUDEyMiA6IChHcm91cCAxMjIgcG1fbXJrX2Rzb3VyY2U2KSBJT1BTIGluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYN0EzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfREFUQV9GUk9NX0wyNzVfTU9EX0NZQ19HUlAxMjIgOiAoR3JvdXAgMTIyIHBtX21ya19kc291cmNlNikgTWFya2VkIGxvYWQgbGF0ZW5jeSBmcm9tIEwyLjc1IG1vZGlmaWVkCitldmVudDowWDdBNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAxMjIgOiAoR3JvdXAgMTIyIHBtX21ya19kc291cmNlNikgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFg3QTUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDEyMiA6IChHcm91cCAxMjIgcG1fbXJrX2Rzb3VyY2U2KSBSdW4gY3ljbGVzCisKKyNHcm91cCAxMjMgcG1fbXJrX2Rzb3VyY2U3LCBNYXJrZWQgZGF0YSBmcm9tCitldmVudDowWDdCMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0RBVEFfRlJPTV9MMzc1X01PRF9HUlAxMjMgOiAoR3JvdXAgMTIzIHBtX21ya19kc291cmNlNykgTWFya2VkIGRhdGEgbG9hZGVkIGZyb20gTDMuNzUgbW9kaWZpZWQKK2V2ZW50OjBYN0IxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfREFUQV9GUk9NX0wzNzVfU0hSX0NZQ19HUlAxMjMgOiAoR3JvdXAgMTIzIHBtX21ya19kc291cmNlNykgTWFya2VkIGxvYWQgbGF0ZW5jeSBmcm9tIEwzLjc1IHNoYXJlZAorZXZlbnQ6MFg3QjIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19EQVRBX0ZST01fTDM3NV9TSFJfR1JQMTIzIDogKEdyb3VwIDEyMyBwbV9tcmtfZHNvdXJjZTcpIE1hcmtlZCBkYXRhIGxvYWRlZCBmcm9tIEwzLjc1IHNoYXJlZAorZXZlbnQ6MFg3QjMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19EQVRBX0ZST01fTDM3NV9NT0RfQ1lDX0dSUDEyMyA6IChHcm91cCAxMjMgcG1fbXJrX2Rzb3VyY2U3KSBNYXJrZWQgbG9hZCBsYXRlbmN5IGZyb20gTDMuNzUgbW9kaWZpZWQKK2V2ZW50OjBYN0I0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDEyMyA6IChHcm91cCAxMjMgcG1fbXJrX2Rzb3VyY2U3KSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDdCNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQMTIzIDogKEdyb3VwIDEyMyBwbV9tcmtfZHNvdXJjZTcpIFJ1biBjeWNsZXMKKworI0dyb3VwIDEyNCBwbV9tcmtfbGJtaXNzLCBNYXJrZWQgVExCIGFuZCBTTEIgbWlzc2VzCitldmVudDowWDdDMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0RUTEJfTUlTU180S19HUlAxMjQgOiAoR3JvdXAgMTI0IHBtX21ya19sYm1pc3MpIE1hcmtlZCBEYXRhIFRMQiBtaXNzZXMgZm9yIDRLIHBhZ2UKK2V2ZW50OjBYN0MxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfRFRMQl9NSVNTXzE2TV9HUlAxMjQgOiAoR3JvdXAgMTI0IHBtX21ya19sYm1pc3MpIE1hcmtlZCBEYXRhIFRMQiBtaXNzZXMgZm9yIDE2TSBwYWdlCitldmVudDowWDdDMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0RUTEJfTUlTU19HUlAxMjQgOiAoR3JvdXAgMTI0IHBtX21ya19sYm1pc3MpIE1hcmtlZCBEYXRhIFRMQiBtaXNzZXMKK2V2ZW50OjBYN0MzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfRFNMQl9NSVNTX0dSUDEyNCA6IChHcm91cCAxMjQgcG1fbXJrX2xibWlzcykgTWFya2VkIERhdGEgU0xCIG1pc3NlcworZXZlbnQ6MFg3QzQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMTI0IDogKEdyb3VwIDEyNCBwbV9tcmtfbGJtaXNzKSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDdDNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQMTI0IDogKEdyb3VwIDEyNCBwbV9tcmtfbGJtaXNzKSBSdW4gY3ljbGVzCisKKyNHcm91cCAxMjUgcG1fbXJrX2xicmVmLCBNYXJrZWQgVExCIGFuZCBTTEIgcmVmZXJlbmNlcworZXZlbnQ6MFg3RDAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19EVExCX1JFRl80S19HUlAxMjUgOiAoR3JvdXAgMTI1IHBtX21ya19sYnJlZikgTWFya2VkIERhdGEgVExCIHJlZmVyZW5jZSBmb3IgNEsgcGFnZQorZXZlbnQ6MFg3RDEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19EVExCX1JFRl8xNk1fR1JQMTI1IDogKEdyb3VwIDEyNSBwbV9tcmtfbGJyZWYpIE1hcmtlZCBEYXRhIFRMQiByZWZlcmVuY2UgZm9yIDE2TSBwYWdlCitldmVudDowWDdEMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU9QU19DTVBMX0dSUDEyNSA6IChHcm91cCAxMjUgcG1fbXJrX2xicmVmKSBJT1BTIGluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYN0QzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfRFNMQl9NSVNTX0dSUDEyNSA6IChHcm91cCAxMjUgcG1fbXJrX2xicmVmKSBNYXJrZWQgRGF0YSBTTEIgbWlzc2VzCitldmVudDowWDdENCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAxMjUgOiAoR3JvdXAgMTI1IHBtX21ya19sYnJlZikgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFg3RDUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDEyNSA6IChHcm91cCAxMjUgcG1fbXJrX2xicmVmKSBSdW4gY3ljbGVzCisKKyNHcm91cCAxMjYgcG1fbXJrX2xzbWlzcywgTWFya2VkIGxvYWQgYW5kIHN0b3JlIG1pc3MKK2V2ZW50OjBYN0UwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfTERfTUlTU19MMV9HUlAxMjYgOiAoR3JvdXAgMTI2IHBtX21ya19sc21pc3MpIE1hcmtlZCBMMSBEIGNhY2hlIGxvYWQgbWlzc2VzCitldmVudDowWDdFMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU9QU19DTVBMX0dSUDEyNiA6IChHcm91cCAxMjYgcG1fbXJrX2xzbWlzcykgSU9QUyBpbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDdFMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX1NUX0NNUExfSU5UX0dSUDEyNiA6IChHcm91cCAxMjYgcG1fbXJrX2xzbWlzcykgTWFya2VkIHN0b3JlIGNvbXBsZXRlZCB3aXRoIGludGVydmVudGlvbgorZXZlbnQ6MFg3RTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19DUlVfRklOX0dSUDEyNiA6IChHcm91cCAxMjYgcG1fbXJrX2xzbWlzcykgTWFya2VkIGluc3RydWN0aW9uIENSVSBwcm9jZXNzaW5nIGZpbmlzaGVkCitldmVudDowWDdFNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAxMjYgOiAoR3JvdXAgMTI2IHBtX21ya19sc21pc3MpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYN0U1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxMjYgOiAoR3JvdXAgMTI2IHBtX21ya19sc21pc3MpIFJ1biBjeWNsZXMKKworI0dyb3VwIDEyNyBwbV9tcmtfdWxzZmx1c2gsIE1hcmsgdW5hbGlnbmVkIGxvYWQgYW5kIHN0b3JlIGZsdXNoZXMKK2V2ZW50OjBYN0YwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfU1RfQ01QTF9HUlAxMjcgOiAoR3JvdXAgMTI3IHBtX21ya191bHNmbHVzaCkgTWFya2VkIHN0b3JlIGluc3RydWN0aW9uIGNvbXBsZXRlZAorZXZlbnQ6MFg3RjEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19TVF9NSVNTX0wxX0dSUDEyNyA6IChHcm91cCAxMjcgcG1fbXJrX3Vsc2ZsdXNoKSBNYXJrZWQgTDEgRCBjYWNoZSBzdG9yZSBtaXNzZXMKK2V2ZW50OjBYN0YyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfTFNVX0ZMVVNIX1VTVF9HUlAxMjcgOiAoR3JvdXAgMTI3IHBtX21ya191bHNmbHVzaCkgTWFya2VkIHVuYWxpZ25lZCBzdG9yZSBmbHVzaGVzCitldmVudDowWDdGMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0xTVV9GTFVTSF9VTERfR1JQMTI3IDogKEdyb3VwIDEyNyBwbV9tcmtfdWxzZmx1c2gpIE1hcmtlZCB1bmFsaWduZWQgbG9hZCBmbHVzaGVzCitldmVudDowWDdGNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAxMjcgOiAoR3JvdXAgMTI3IHBtX21ya191bHNmbHVzaCkgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFg3RjUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDEyNyA6IChHcm91cCAxMjcgcG1fbXJrX3Vsc2ZsdXNoKSBSdW4gY3ljbGVzCisKKyNHcm91cCAxMjggcG1fbXJrX21pc2MsIE1pc2MgbWFya2VkIGluc3RydWN0aW9ucworZXZlbnQ6MFg4MDAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19TVENYX0ZBSUxfR1JQMTI4IDogKEdyb3VwIDEyOCBwbV9tcmtfbWlzYykgTWFya2VkIFNUQ1ggZmFpbGVkCitldmVudDowWDgwMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX1NUX0dQU19HUlAxMjggOiAoR3JvdXAgMTI4IHBtX21ya19taXNjKSBNYXJrZWQgc3RvcmUgc2VudCB0byBHUFMKK2V2ZW50OjBYODAyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfRlBVX0ZJTl9HUlAxMjggOiAoR3JvdXAgMTI4IHBtX21ya19taXNjKSBNYXJrZWQgaW5zdHJ1Y3Rpb24gRlBVIHByb2Nlc3NpbmcgZmluaXNoZWQKK2V2ZW50OjBYODAzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfR1JQX1RJTUVPX0dSUDEyOCA6IChHcm91cCAxMjggcG1fbXJrX21pc2MpIE1hcmtlZCBncm91cCBjb21wbGV0aW9uIHRpbWVvdXQKK2V2ZW50OjBYODA0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDEyOCA6IChHcm91cCAxMjggcG1fbXJrX21pc2MpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYODA1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxMjggOiAoR3JvdXAgMTI4IHBtX21ya19taXNjKSBSdW4gY3ljbGVzCisKKyNHcm91cCAxMjkgcG1fbHNyZWZfTDEsIExvYWQvU3RvcmUgb3BlcmF0aW9ucyBhbmQgTDEgYWN0aXZpdHkKK2V2ZW50OjBYODEwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQVRBX0ZST01fTDJfR1JQMTI5IDogKEdyb3VwIDEyOSBwbV9sc3JlZl9MMSkgRGF0YSBsb2FkZWQgZnJvbSBMMgorZXZlbnQ6MFg4MTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lOU1RfRlJPTV9MMV9HUlAxMjkgOiAoR3JvdXAgMTI5IHBtX2xzcmVmX0wxKSBJbnN0cnVjdGlvbiBmZXRjaGVkIGZyb20gTDEKK2V2ZW50OjBYODEyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9TVF9SRUZfTDFfR1JQMTI5IDogKEdyb3VwIDEyOSBwbV9sc3JlZl9MMSkgTDEgRCBjYWNoZSBzdG9yZSByZWZlcmVuY2VzCitldmVudDowWDgxMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTERfUkVGX0wxX0dSUDEyOSA6IChHcm91cCAxMjkgcG1fbHNyZWZfTDEpIEwxIEQgY2FjaGUgbG9hZCByZWZlcmVuY2VzCitldmVudDowWDgxNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAxMjkgOiAoR3JvdXAgMTI5IHBtX2xzcmVmX0wxKSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDgxNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQMTI5IDogKEdyb3VwIDEyOSBwbV9sc3JlZl9MMSkgUnVuIGN5Y2xlcworCisjR3JvdXAgMTMwIHBtX2xzcmVmX0wyTDMsIExvYWQvU3RvcmUgb3BlcmF0aW9ucyBhbmQgTDIsTDMgYWN0aXZpdHkKK2V2ZW50OjBYODIwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQVRBX0ZST01fTDNfR1JQMTMwIDogKEdyb3VwIDEzMCBwbV9sc3JlZl9MMkwzKSBEYXRhIGxvYWRlZCBmcm9tIEwzCitldmVudDowWDgyMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fREFUQV9GUk9NX0xNRU1fR1JQMTMwIDogKEdyb3VwIDEzMCBwbV9sc3JlZl9MMkwzKSBEYXRhIGxvYWRlZCBmcm9tIGxvY2FsIG1lbW9yeQorZXZlbnQ6MFg4MjIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1NUX1JFRl9MMV9HUlAxMzAgOiAoR3JvdXAgMTMwIHBtX2xzcmVmX0wyTDMpIEwxIEQgY2FjaGUgc3RvcmUgcmVmZXJlbmNlcworZXZlbnQ6MFg4MjMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xEX1JFRl9MMV9HUlAxMzAgOiAoR3JvdXAgMTMwIHBtX2xzcmVmX0wyTDMpIEwxIEQgY2FjaGUgbG9hZCByZWZlcmVuY2VzCitldmVudDowWDgyNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAxMzAgOiAoR3JvdXAgMTMwIHBtX2xzcmVmX0wyTDMpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYODI1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxMzAgOiAoR3JvdXAgMTMwIHBtX2xzcmVmX0wyTDMpIFJ1biBjeWNsZXMKKworI0dyb3VwIDEzMSBwbV9sc3JlZl90bGJtaXNzLCBMb2FkL1N0b3JlIG9wZXJhdGlvbnMgYW5kIFRMQiBtaXNzZXMKK2V2ZW50OjBYODMwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JVExCX01JU1NfR1JQMTMxIDogKEdyb3VwIDEzMSBwbV9sc3JlZl90bGJtaXNzKSBJbnN0cnVjdGlvbiBUTEIgbWlzc2VzCitldmVudDowWDgzMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRFRMQl9NSVNTX0dSUDEzMSA6IChHcm91cCAxMzEgcG1fbHNyZWZfdGxibWlzcykgRGF0YSBUTEIgbWlzc2VzCitldmVudDowWDgzMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fU1RfUkVGX0wxX0dSUDEzMSA6IChHcm91cCAxMzEgcG1fbHNyZWZfdGxibWlzcykgTDEgRCBjYWNoZSBzdG9yZSByZWZlcmVuY2VzCitldmVudDowWDgzMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTERfUkVGX0wxX0dSUDEzMSA6IChHcm91cCAxMzEgcG1fbHNyZWZfdGxibWlzcykgTDEgRCBjYWNoZSBsb2FkIHJlZmVyZW5jZXMKK2V2ZW50OjBYODM0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDEzMSA6IChHcm91cCAxMzEgcG1fbHNyZWZfdGxibWlzcykgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFg4MzUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDEzMSA6IChHcm91cCAxMzEgcG1fbHNyZWZfdGxibWlzcykgUnVuIGN5Y2xlcworCisjR3JvdXAgMTMyIHBtX0RtaXNzLCBEYXRhIGNhY2hlIG1pc3NlcworZXZlbnQ6MFg4NDAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RBVEFfRlJPTV9MM19HUlAxMzIgOiAoR3JvdXAgMTMyIHBtX0RtaXNzKSBEYXRhIGxvYWRlZCBmcm9tIEwzCitldmVudDowWDg0MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fREFUQV9GUk9NX0xNRU1fR1JQMTMyIDogKEdyb3VwIDEzMiBwbV9EbWlzcykgRGF0YSBsb2FkZWQgZnJvbSBsb2NhbCBtZW1vcnkKK2V2ZW50OjBYODQyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MRF9NSVNTX0wxX0dSUDEzMiA6IChHcm91cCAxMzIgcG1fRG1pc3MpIEwxIEQgY2FjaGUgbG9hZCBtaXNzZXMKK2V2ZW50OjBYODQzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9TVF9NSVNTX0wxX0dSUDEzMiA6IChHcm91cCAxMzIgcG1fRG1pc3MpIEwxIEQgY2FjaGUgc3RvcmUgbWlzc2VzCitldmVudDowWDg0NCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAxMzIgOiAoR3JvdXAgMTMyIHBtX0RtaXNzKSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDg0NSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQMTMyIDogKEdyb3VwIDEzMiBwbV9EbWlzcykgUnVuIGN5Y2xlcworCisjR3JvdXAgMTMzIHBtX3ByZWZldGNoWCwgUHJlZmV0Y2ggZXZlbnRzCitldmVudDowWDg1MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlAxMzMgOiAoR3JvdXAgMTMzIHBtX3ByZWZldGNoWCkgUHJvY2Vzc29yIGN5Y2xlcworZXZlbnQ6MFg4NTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lDX1BSRUZfUkVRX0dSUDEzMyA6IChHcm91cCAxMzMgcG1fcHJlZmV0Y2hYKSBJbnN0cnVjdGlvbiBwcmVmZXRjaCByZXF1ZXN0cworZXZlbnQ6MFg4NTIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wxX1BSRUZfR1JQMTMzIDogKEdyb3VwIDEzMyBwbV9wcmVmZXRjaFgpIEwxIGNhY2hlIGRhdGEgcHJlZmV0Y2hlcworZXZlbnQ6MFg4NTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wyX1BSRUZfR1JQMTMzIDogKEdyb3VwIDEzMyBwbV9wcmVmZXRjaFgpIEwyIGNhY2hlIHByZWZldGNoZXMKK2V2ZW50OjBYODU0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDEzMyA6IChHcm91cCAxMzMgcG1fcHJlZmV0Y2hYKSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDg1NSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQMTMzIDogKEdyb3VwIDEzMyBwbV9wcmVmZXRjaFgpIFJ1biBjeWNsZXMKKworI0dyb3VwIDEzNCBwbV9icmFuY2hYLCBCcmFuY2ggb3BlcmF0aW9ucworZXZlbnQ6MFg4NjAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0JSX1VOQ09ORF9HUlAxMzQgOiAoR3JvdXAgMTM0IHBtX2JyYW5jaFgpIFVuY29uZGl0aW9uYWwgYnJhbmNoCitldmVudDowWDg2MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fQlJfUFJFRF9UQV9HUlAxMzQgOiAoR3JvdXAgMTM0IHBtX2JyYW5jaFgpIEEgY29uZGl0aW9uYWwgYnJhbmNoIHdhcyBwcmVkaWN0ZWQsIHRhcmdldCBwcmVkaWN0aW9uCitldmVudDowWDg2MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fQlJfUFJFRF9DUl9HUlAxMzQgOiAoR3JvdXAgMTM0IHBtX2JyYW5jaFgpIEEgY29uZGl0aW9uYWwgYnJhbmNoIHdhcyBwcmVkaWN0ZWQsIENSIHByZWRpY3Rpb24KK2V2ZW50OjBYODYzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9CUl9JU1NVRURfR1JQMTM0IDogKEdyb3VwIDEzNCBwbV9icmFuY2hYKSBCcmFuY2hlcyBpc3N1ZWQKK2V2ZW50OjBYODY0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDEzNCA6IChHcm91cCAxMzQgcG1fYnJhbmNoWCkgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFg4NjUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDEzNCA6IChHcm91cCAxMzQgcG1fYnJhbmNoWCkgUnVuIGN5Y2xlcworCisjR3JvdXAgMTM1IHBtX2ZwdVgxLCBGbG9hdGluZyBwb2ludCBldmVudHMgYnkgdW5pdAorZXZlbnQ6MFg4NzAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVTBfU1RBTEwzX0dSUDEzNSA6IChHcm91cCAxMzUgcG1fZnB1WDEpIEZQVTAgc3RhbGxlZCBpbiBwaXBlMworZXZlbnQ6MFg4NzEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVTFfU1RBTEwzX0dSUDEzNSA6IChHcm91cCAxMzUgcG1fZnB1WDEpIEZQVTEgc3RhbGxlZCBpbiBwaXBlMworZXZlbnQ6MFg4NzIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVTBfRklOX0dSUDEzNSA6IChHcm91cCAxMzUgcG1fZnB1WDEpIEZQVTAgcHJvZHVjZWQgYSByZXN1bHQKK2V2ZW50OjBYODczIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFUwX0ZQU0NSX0dSUDEzNSA6IChHcm91cCAxMzUgcG1fZnB1WDEpIEZQVTAgZXhlY3V0ZWQgRlBTQ1IgaW5zdHJ1Y3Rpb24KK2V2ZW50OjBYODc0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDEzNSA6IChHcm91cCAxMzUgcG1fZnB1WDEpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYODc1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxMzUgOiAoR3JvdXAgMTM1IHBtX2ZwdVgxKSBSdW4gY3ljbGVzCisKKyNHcm91cCAxMzYgcG1fZnB1WDIsIEZsb2F0aW5nIHBvaW50IGV2ZW50cyBieSB1bml0CitldmVudDowWDg4MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVMF9GTUFfR1JQMTM2IDogKEdyb3VwIDEzNiBwbV9mcHVYMikgRlBVMCBleGVjdXRlZCBtdWx0aXBseS1hZGQgaW5zdHJ1Y3Rpb24KK2V2ZW50OjBYODgxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFUxX0ZNQV9HUlAxMzYgOiAoR3JvdXAgMTM2IHBtX2ZwdVgyKSBGUFUxIGV4ZWN1dGVkIG11bHRpcGx5LWFkZCBpbnN0cnVjdGlvbgorZXZlbnQ6MFg4ODIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVTBfRlJTUF9GQ09OVl9HUlAxMzYgOiAoR3JvdXAgMTM2IHBtX2ZwdVgyKSBGUFUwIGV4ZWN1dGVkIEZSU1Agb3IgRkNPTlYgaW5zdHJ1Y3Rpb25zCitldmVudDowWDg4MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVMV9GUlNQX0ZDT05WX0dSUDEzNiA6IChHcm91cCAxMzYgcG1fZnB1WDIpIEZQVTEgZXhlY3V0ZWQgRlJTUCBvciBGQ09OViBpbnN0cnVjdGlvbnMKK2V2ZW50OjBYODg0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDEzNiA6IChHcm91cCAxMzYgcG1fZnB1WDIpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYODg1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxMzYgOiAoR3JvdXAgMTM2IHBtX2ZwdVgyKSBSdW4gY3ljbGVzCisKKyNHcm91cCAxMzcgcG1fZnB1WDMsIEZsb2F0aW5nIHBvaW50IGV2ZW50cyBieSB1bml0CitldmVudDowWDg5MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVMF8xRkxPUF9HUlAxMzcgOiAoR3JvdXAgMTM3IHBtX2ZwdVgzKSBGUFUwIGV4ZWN1dGVkIGFkZCwgbXVsdCwgc3ViLCBjbXAgb3Igc2VsIGluc3RydWN0aW9uCitldmVudDowWDg5MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVMV8xRkxPUF9HUlAxMzcgOiAoR3JvdXAgMTM3IHBtX2ZwdVgzKSBGUFUxIGV4ZWN1dGVkIGFkZCwgbXVsdCwgc3ViLCBjbXAgb3Igc2VsIGluc3RydWN0aW9uCitldmVudDowWDg5MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVMF9GSU5fR1JQMTM3IDogKEdyb3VwIDEzNyBwbV9mcHVYMykgRlBVMCBwcm9kdWNlZCBhIHJlc3VsdAorZXZlbnQ6MFg4OTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVTFfRklOX0dSUDEzNyA6IChHcm91cCAxMzcgcG1fZnB1WDMpIEZQVTEgcHJvZHVjZWQgYSByZXN1bHQKK2V2ZW50OjBYODk0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDEzNyA6IChHcm91cCAxMzcgcG1fZnB1WDMpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYODk1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxMzcgOiAoR3JvdXAgMTM3IHBtX2ZwdVgzKSBSdW4gY3ljbGVzCisKKyNHcm91cCAxMzggcG1fZnB1WDQsIEZsb2F0aW5nIHBvaW50IGFuZCBMMSBldmVudHMKK2V2ZW50OjBYOEEwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFVfMUZMT1BfR1JQMTM4IDogKEdyb3VwIDEzOCBwbV9mcHVYNCkgRlBVIGV4ZWN1dGVkIG9uZSBmbG9wIGluc3RydWN0aW9uIAorZXZlbnQ6MFg4QTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVV9GTUFfR1JQMTM4IDogKEdyb3VwIDEzOCBwbV9mcHVYNCkgRlBVIGV4ZWN1dGVkIG11bHRpcGx5LWFkZCBpbnN0cnVjdGlvbgorZXZlbnQ6MFg4QTIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1NUX1JFRl9MMV9HUlAxMzggOiAoR3JvdXAgMTM4IHBtX2ZwdVg0KSBMMSBEIGNhY2hlIHN0b3JlIHJlZmVyZW5jZXMKK2V2ZW50OjBYOEEzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MRF9SRUZfTDFfR1JQMTM4IDogKEdyb3VwIDEzOCBwbV9mcHVYNCkgTDEgRCBjYWNoZSBsb2FkIHJlZmVyZW5jZXMKK2V2ZW50OjBYOEE0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDEzOCA6IChHcm91cCAxMzggcG1fZnB1WDQpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYOEE1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxMzggOiAoR3JvdXAgMTM4IHBtX2ZwdVg0KSBSdW4gY3ljbGVzCisKKyNHcm91cCAxMzkgcG1fZnB1WDUsIEZsb2F0aW5nIHBvaW50IGV2ZW50cworZXZlbnQ6MFg4QjAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVV9TSU5HTEVfR1JQMTM5IDogKEdyb3VwIDEzOSBwbV9mcHVYNSkgRlBVIGV4ZWN1dGVkIHNpbmdsZSBwcmVjaXNpb24gaW5zdHJ1Y3Rpb24KK2V2ZW50OjBYOEIxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFVfU1RGX0dSUDEzOSA6IChHcm91cCAxMzkgcG1fZnB1WDUpIEZQVSBleGVjdXRlZCBzdG9yZSBpbnN0cnVjdGlvbgorZXZlbnQ6MFg4QjIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVTBfRklOX0dSUDEzOSA6IChHcm91cCAxMzkgcG1fZnB1WDUpIEZQVTAgcHJvZHVjZWQgYSByZXN1bHQKK2V2ZW50OjBYOEIzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFUxX0ZJTl9HUlAxMzkgOiAoR3JvdXAgMTM5IHBtX2ZwdVg1KSBGUFUxIHByb2R1Y2VkIGEgcmVzdWx0CitldmVudDowWDhCNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAxMzkgOiAoR3JvdXAgMTM5IHBtX2ZwdVg1KSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDhCNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQMTM5IDogKEdyb3VwIDEzOSBwbV9mcHVYNSkgUnVuIGN5Y2xlcworCisjR3JvdXAgMTQwIHBtX2ZwdVg2LCBGbG9hdGluZyBwb2ludCBldmVudHMKK2V2ZW50OjBYOEMwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFVfRkRJVl9HUlAxNDAgOiAoR3JvdXAgMTQwIHBtX2ZwdVg2KSBGUFUgZXhlY3V0ZWQgRkRJViBpbnN0cnVjdGlvbgorZXZlbnQ6MFg4QzEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVV9GU1FSVF9HUlAxNDAgOiAoR3JvdXAgMTQwIHBtX2ZwdVg2KSBGUFUgZXhlY3V0ZWQgRlNRUlQgaW5zdHJ1Y3Rpb24KK2V2ZW50OjBYOEMyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFVfRlJTUF9GQ09OVl9HUlAxNDAgOiAoR3JvdXAgMTQwIHBtX2ZwdVg2KSBGUFUgZXhlY3V0ZWQgRlJTUCBvciBGQ09OViBpbnN0cnVjdGlvbnMKK2V2ZW50OjBYOEMzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFVfRklOX0dSUDE0MCA6IChHcm91cCAxNDAgcG1fZnB1WDYpIEZQVSBwcm9kdWNlZCBhIHJlc3VsdAorZXZlbnQ6MFg4QzQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMTQwIDogKEdyb3VwIDE0MCBwbV9mcHVYNikgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFg4QzUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDE0MCA6IChHcm91cCAxNDAgcG1fZnB1WDYpIFJ1biBjeWNsZXMKKworI0dyb3VwIDE0MSBwbV9ocG1jb3VudDEsIEhQTSBncm91cCBmb3Igc2V0IDEgCitldmVudDowWDhEMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVXzFGTE9QX0dSUDE0MSA6IChHcm91cCAxNDEgcG1faHBtY291bnQxKSBGUFUgZXhlY3V0ZWQgb25lIGZsb3AgaW5zdHJ1Y3Rpb24gCitldmVudDowWDhEMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlAxNDEgOiAoR3JvdXAgMTQxIHBtX2hwbWNvdW50MSkgUHJvY2Vzc29yIGN5Y2xlcworZXZlbnQ6MFg4RDIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19GUFVfRklOX0dSUDE0MSA6IChHcm91cCAxNDEgcG1faHBtY291bnQxKSBNYXJrZWQgaW5zdHJ1Y3Rpb24gRlBVIHByb2Nlc3NpbmcgZmluaXNoZWQKK2V2ZW50OjBYOEQzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFVfRklOX0dSUDE0MSA6IChHcm91cCAxNDEgcG1faHBtY291bnQxKSBGUFUgcHJvZHVjZWQgYSByZXN1bHQKK2V2ZW50OjBYOEQ0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDE0MSA6IChHcm91cCAxNDEgcG1faHBtY291bnQxKSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDhENSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQMTQxIDogKEdyb3VwIDE0MSBwbV9ocG1jb3VudDEpIFJ1biBjeWNsZXMKKworI0dyb3VwIDE0MiBwbV9ocG1jb3VudDIsIEhQTSBncm91cCBmb3Igc2V0IDIKK2V2ZW50OjBYOEUwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDE0MiA6IChHcm91cCAxNDIgcG1faHBtY291bnQyKSBQcm9jZXNzb3IgY3ljbGVzCitldmVudDowWDhFMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVX1NURl9HUlAxNDIgOiAoR3JvdXAgMTQyIHBtX2hwbWNvdW50MikgRlBVIGV4ZWN1dGVkIHN0b3JlIGluc3RydWN0aW9uCitldmVudDowWDhFMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU5TVF9ESVNQX0dSUDE0MiA6IChHcm91cCAxNDIgcG1faHBtY291bnQyKSBJbnN0cnVjdGlvbnMgZGlzcGF0Y2hlZAorZXZlbnQ6MFg4RTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9MREZfR1JQMTQyIDogKEdyb3VwIDE0MiBwbV9ocG1jb3VudDIpIExTVSBleGVjdXRlZCBGbG9hdGluZyBQb2ludCBsb2FkIGluc3RydWN0aW9uCitldmVudDowWDhFNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAxNDIgOiAoR3JvdXAgMTQyIHBtX2hwbWNvdW50MikgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFg4RTUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDE0MiA6IChHcm91cCAxNDIgcG1faHBtY291bnQyKSBSdW4gY3ljbGVzCisKKyNHcm91cCAxNDMgcG1faHBtY291bnQzLCBIUE0gZ3JvdXAgZm9yIHNldCAzIAorZXZlbnQ6MFg4RjAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQMTQzIDogKEdyb3VwIDE0MyBwbV9ocG1jb3VudDMpIFByb2Nlc3NvciBjeWNsZXMKK2V2ZW50OjBYOEYxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JTlNUX0RJU1BfQVRURU1QVF9HUlAxNDMgOiAoR3JvdXAgMTQzIHBtX2hwbWNvdW50MykgSW5zdHJ1Y3Rpb25zIGRpc3BhdGNoIGF0dGVtcHRlZAorZXZlbnQ6MFg4RjIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xEX01JU1NfTDFfR1JQMTQzIDogKEdyb3VwIDE0MyBwbV9ocG1jb3VudDMpIEwxIEQgY2FjaGUgbG9hZCBtaXNzZXMKK2V2ZW50OjBYOEYzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9TVF9NSVNTX0wxX0dSUDE0MyA6IChHcm91cCAxNDMgcG1faHBtY291bnQzKSBMMSBEIGNhY2hlIHN0b3JlIG1pc3NlcworZXZlbnQ6MFg4RjQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMTQzIDogKEdyb3VwIDE0MyBwbV9ocG1jb3VudDMpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYOEY1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxNDMgOiAoR3JvdXAgMTQzIHBtX2hwbWNvdW50MykgUnVuIGN5Y2xlcworCisjR3JvdXAgMTQ0IHBtX2hwbWNvdW50NCwgSFBNIGdyb3VwIGZvciBzZXQgNworZXZlbnQ6MFg5MDAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1RMQl9NSVNTX0dSUDE0NCA6IChHcm91cCAxNDQgcG1faHBtY291bnQ0KSBUTEIgbWlzc2VzCitldmVudDowWDkwMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlAxNDQgOiAoR3JvdXAgMTQ0IHBtX2hwbWNvdW50NCkgUHJvY2Vzc29yIGN5Y2xlcworZXZlbnQ6MFg5MDIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1NUX1JFRl9MMV9HUlAxNDQgOiAoR3JvdXAgMTQ0IHBtX2hwbWNvdW50NCkgTDEgRCBjYWNoZSBzdG9yZSByZWZlcmVuY2VzCitldmVudDowWDkwMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTERfUkVGX0wxX0dSUDE0NCA6IChHcm91cCAxNDQgcG1faHBtY291bnQ0KSBMMSBEIGNhY2hlIGxvYWQgcmVmZXJlbmNlcworZXZlbnQ6MFg5MDQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMTQ0IDogKEdyb3VwIDE0NCBwbV9ocG1jb3VudDQpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYOTA1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxNDQgOiAoR3JvdXAgMTQ0IHBtX2hwbWNvdW50NCkgUnVuIGN5Y2xlcworCisjR3JvdXAgMTQ1IHBtX2hwbWNvdW50NSwgSFBNIGdyb3VwIGZvciBzZXQgOSAKK2V2ZW50OjBYOTEwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDE0NSA6IChHcm91cCAxNDUgcG1faHBtY291bnQ1KSBQcm9jZXNzb3IgY3ljbGVzCitldmVudDowWDkxMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0ZYVV9GSU5fR1JQMTQ1IDogKEdyb3VwIDE0NSBwbV9ocG1jb3VudDUpIE1hcmtlZCBpbnN0cnVjdGlvbiBGWFUgcHJvY2Vzc2luZyBmaW5pc2hlZAorZXZlbnQ6MFg5MTIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZYVV9GSU5fR1JQMTQ1IDogKEdyb3VwIDE0NSBwbV9ocG1jb3VudDUpIEZYVSBwcm9kdWNlZCBhIHJlc3VsdAorZXZlbnQ6MFg5MTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZYVTBfRklOX0dSUDE0NSA6IChHcm91cCAxNDUgcG1faHBtY291bnQ1KSBGWFUwIHByb2R1Y2VkIGEgcmVzdWx0CitldmVudDowWDkxNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAxNDUgOiAoR3JvdXAgMTQ1IHBtX2hwbWNvdW50NSkgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFg5MTUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDE0NSA6IChHcm91cCAxNDUgcG1faHBtY291bnQ1KSBSdW4gY3ljbGVzCisKKyNHcm91cCAxNDYgcG1fZXByb2YxLCBHcm91cCBmb3IgdXNlIHdpdGggZXByb2YKK2V2ZW50OjBYOTIwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDE0NiA6IChHcm91cCAxNDYgcG1fZXByb2YxKSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDkyMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlAxNDYgOiAoR3JvdXAgMTQ2IHBtX2Vwcm9mMSkgUHJvY2Vzc29yIGN5Y2xlcworZXZlbnQ6MFg5MjIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xEX01JU1NfTDFfR1JQMTQ2IDogKEdyb3VwIDE0NiBwbV9lcHJvZjEpIEwxIEQgY2FjaGUgbG9hZCBtaXNzZXMKK2V2ZW50OjBYOTIzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQ19JTlZfTDJfR1JQMTQ2IDogKEdyb3VwIDE0NiBwbV9lcHJvZjEpIEwxIEQgY2FjaGUgZW50cmllcyBpbnZhbGlkYXRlZCBmcm9tIEwyCitldmVudDowWDkyNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAxNDYgOiAoR3JvdXAgMTQ2IHBtX2Vwcm9mMSkgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFg5MjUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDE0NiA6IChHcm91cCAxNDYgcG1fZXByb2YxKSBSdW4gY3ljbGVzCisKKyNHcm91cCAxNDcgcG1fZXByb2YyLCBHcm91cCBmb3IgdXNlIHdpdGggZXByb2YKK2V2ZW50OjBYOTMwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfTERfTUlTU19MMV9HUlAxNDcgOiAoR3JvdXAgMTQ3IHBtX2Vwcm9mMikgTWFya2VkIEwxIEQgY2FjaGUgbG9hZCBtaXNzZXMKK2V2ZW50OjBYOTMxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDE0NyA6IChHcm91cCAxNDcgcG1fZXByb2YyKSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDkzMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fU1RfUkVGX0wxX0dSUDE0NyA6IChHcm91cCAxNDcgcG1fZXByb2YyKSBMMSBEIGNhY2hlIHN0b3JlIHJlZmVyZW5jZXMKK2V2ZW50OjBYOTMzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MRF9SRUZfTDFfR1JQMTQ3IDogKEdyb3VwIDE0NyBwbV9lcHJvZjIpIEwxIEQgY2FjaGUgbG9hZCByZWZlcmVuY2VzCitldmVudDowWDkzNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAxNDcgOiAoR3JvdXAgMTQ3IHBtX2Vwcm9mMikgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFg5MzUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDE0NyA6IChHcm91cCAxNDcgcG1fZXByb2YyKSBSdW4gY3ljbGVzCisKKyNHcm91cCAxNDggcG1fZXByb2YzLCBHcm91cCBmb3IgdXNlIHdpdGggZXByb2YKK2V2ZW50OjBYOTQwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfU1RfTUlTU19MMV9HUlAxNDggOiAoR3JvdXAgMTQ4IHBtX2Vwcm9mMykgTWFya2VkIEwxIEQgY2FjaGUgc3RvcmUgbWlzc2VzCitldmVudDowWDk0MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAxNDggOiAoR3JvdXAgMTQ4IHBtX2Vwcm9mMykgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFg5NDIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lOU1RfRElTUF9HUlAxNDggOiAoR3JvdXAgMTQ4IHBtX2Vwcm9mMykgSW5zdHJ1Y3Rpb25zIGRpc3BhdGNoZWQKK2V2ZW50OjBYOTQzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9TVF9NSVNTX0wxX0dSUDE0OCA6IChHcm91cCAxNDggcG1fZXByb2YzKSBMMSBEIGNhY2hlIHN0b3JlIG1pc3NlcworZXZlbnQ6MFg5NDQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMTQ4IDogKEdyb3VwIDE0OCBwbV9lcHJvZjMpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYOTQ1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxNDggOiAoR3JvdXAgMTQ4IHBtX2Vwcm9mMykgUnVuIGN5Y2xlcwpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL3BwYzY0L3Bvd2VyNS91bml0X21hc2tzIGIvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL3BwYzY0L3Bvd2VyNS91bml0X21hc2tzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyZTVmMzAKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9ldmVudHMvcHBjNjQvcG93ZXI1L3VuaXRfbWFza3MKQEAgLTAsMCArMSw0IEBACisjIHBwYzY0IFBPV0VSNSBwb3NzaWJsZSB1bml0IG1hc2tzCisjCituYW1lOnplcm8gdHlwZTptYW5kYXRvcnkgZGVmYXVsdDoweDAKKwkweDAgTm8gdW5pdCBtYXNrCmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9ldmVudHMvcHBjNjQvcG93ZXI2L2V2ZW50X21hcHBpbmdzIGIvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL3BwYzY0L3Bvd2VyNi9ldmVudF9tYXBwaW5ncwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDYyN2IzCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL3BwYzY0L3Bvd2VyNi9ldmVudF9tYXBwaW5ncwpAQCAtMCwwICsxLDEyMDEgQEAKKyMKKyMgQ29weXJpZ2h0IE9Qcm9maWxlIGF1dGhvcnMKKyMgQ29weXJpZ2h0IChjKSBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzLCAyMDA3LgorIyBDb250cmlidXRlZCBieSBEYXZlIE5vbXVyYSA8ZGNubHRjQHVzLmlibS5jb20+LgorIworI01hcHBpbmcgb2YgZXZlbnQgZ3JvdXBzIHRvIE1NQ1IgdmFsdWVzCisKKworI0dyb3VwIERlZmF1bHQKK2V2ZW50OjBYMDAxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDBBMDIxMjFFIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDAgd2l0aCByYW5kb20gc2FtcGxpbmcKK2V2ZW50OjBYMDAyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDFFMUUwMjFBIG1tY3JhOjBYMDAwMDAwMDEKKworI0dyb3VwIDEgcG1fdXRpbGl6YXRpb24sIENQSSBhbmQgdXRpbGl6YXRpb24gZGF0YQorZXZlbnQ6MFgwMDEwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDBBMDIxMjFFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDAxMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAwQTAyMTIxRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAwMTIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMEEwMjEyMUUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMDEzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDBBMDIxMjFFIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDIgcG1fdXRpbGl6YXRpb25fY2FwYWNpdHksIENQVSB1dGlsaXphdGlvbiBhbmQgY2FwYWNpdHkKK2V2ZW50OjBYMDAyMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDBGQTFFRjRGNCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAwMjEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwRkExRUY0RjQgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMDIyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMEZBMUVGNEY0IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDAyMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDBGQTFFRjRGNCBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAzIHBtX2JyYW5jaCwgQnJhbmNoIG9wZXJhdGlvbnMKK2V2ZW50OjBYMDAzMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDQwMDAwMDBBMkE4ODA4QSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAwMzEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDA0MDAwMDAwQTJBODgwOEEgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMDMyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwNDAwMDAwMEEyQTg4MDhBIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDAzMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDQwMDAwMDBBMkE4ODA4QSBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCA0IHBtX2JyYW5jaDIsIEJyYW5jaCBvcGVyYXRpb25zCitldmVudDowWDAwNDAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDA0MDAwMDAwQTRBNjhFOEMgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMDQxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwNDAwMDAwMEE0QTY4RThDIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDA0MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDQwMDAwMDBBNEE2OEU4QyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAwNDMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDA0MDAwMDAwQTRBNjhFOEMgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgNSBwbV9icmFuY2gzLCBCcmFuY2ggb3BlcmF0aW9ucworZXZlbnQ6MFgwMDUwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwNDAwMDAwMEEwQTI4NDg2IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDA1MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDQwMDAwMDBBMEEyODQ4NiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAwNTIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDA0MDAwMDAwQTBBMjg0ODYgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMDUzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwNDAwMDAwMEEwQTI4NDg2IG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDYgcG1fYnJhbmNoNCwgQnJhbmNoIG9wZXJhdGlvbnMKK2V2ZW50OjBYMDA2MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDQwMDAwMDBBOEFBOEM4RSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAwNjEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDA0MDAwMDAwQThBQThDOEUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMDYyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwNDAwMDAwMEE4QUE4QzhFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDA2MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDQwMDAwMDBBOEFBOEM4RSBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCA3IHBtX2JyYW5jaDUsIEJyYW5jaCBvcGVyYXRpb25zCitldmVudDowWDAwNzAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDA0MDQwMDAwQTA1MkM2NTIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMDcxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwNDA0MDAwMEEwNTJDNjUyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDA3MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDQwNDAwMDBBMDUyQzY1MiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAwNzMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDA0MDQwMDAwQTA1MkM2NTIgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgOCBwbV9kc291cmNlLCBEYXRhIHNvdXJjZQorZXZlbnQ6MFgwMDgwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDU4NTg1NjU2IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDA4MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDA1ODU4NTY1NiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAwODIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwNTg1ODU2NTYgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMDgzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDU4NTg1NjU2IG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDkgcG1fZHNvdXJjZTIsIERhdGEgc291cmNlcworZXZlbnQ6MFgwMDkwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDVBNUE1ODU2IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDA5MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDA1QTVBNTg1NiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAwOTIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwNUE1QTU4NTYgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMDkzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDVBNUE1ODU2IG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDEwIHBtX2Rzb3VyY2UzLCBEYXRhIHNvdXJjZXMKK2V2ZW50OjBYMDBBMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDA1QTVBNUE1QSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAwQTEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwNUE1QTVBNUEgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMEEyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDVBNUE1QTVBIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDBBMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDA1QTVBNUE1QSBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxMSBwbV9kc291cmNlNCwgRGF0YSBzb3VyY2VzCitldmVudDowWDAwQjAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwNUM1QzVDNUMgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMEIxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDVDNUM1QzVDIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDBCMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDA1QzVDNUM1QyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAwQjMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwNUM1QzVDNUMgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMTIgcG1fZHNvdXJjZTUsIERhdGEgc291cmNlcworZXZlbnQ6MFgwMEMwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDVFNUU1RTVFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDBDMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDA1RTVFNUU1RSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAwQzIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwNUU1RTVFNUUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMEMzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDVFNUU1RTVFIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDEzIHBtX2RsYXRlbmNpZXMsIERhdGEgbGF0ZW5jaWVzCitldmVudDowWDAwRDAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMEMyODFFMjQgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMEQxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDBDMjgxRTI0IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDBEMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAwQzI4MUUyNCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAwRDMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMEMyODFFMjQgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMTQgcG1fZGxhdGVuY2llczIsIERhdGEgbGF0ZW5jaWVzCitldmVudDowWDAwRTAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMDIyQzFFMkEgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMEUxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDAyMkMxRTJBIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDBFMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAwMjJDMUUyQSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAwRTMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMDIyQzFFMkEgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMTUgcG1fZGxhdGVuY2llczMsIERhdGEgbGF0ZW5jaWVzCitldmVudDowWDAwRjAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMDIyRTVFMkMgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMEYxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDAyMkU1RTJDIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDBGMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAwMjJFNUUyQyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAwRjMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMDIyRTVFMkMgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMTYgcG1fZGxhdGVuY2llczQsIERhdGEgbGF0ZW5jaWVzCitldmVudDowWDAxMDAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwNUEyQTVDMjYgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMTAxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDVBMkE1QzI2IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDEwMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDA1QTJBNUMyNiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAxMDMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwNUEyQTVDMjYgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMTcgcG1fZGxhdGVuY2llczUsIERhdGEgbGF0ZW5jaWVzCitldmVudDowWDAxMTAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwNUMyMjU4MjggbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMTExIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDVDMjI1ODI4IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDExMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDA1QzIyNTgyOCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAxMTMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwNUMyMjU4MjggbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMTggcG1fZGxhdGVuY2llczYsIERhdGEgbGF0ZW5jaWVzCitldmVudDowWDAxMjAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwNUUyNDVBMkUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMTIxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDVFMjQ1QTJFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDEyMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDA1RTI0NUEyRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAxMjMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwNUUyNDVBMkUgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMTkgcG1fZGxhdGVuY2llczcsIERhdGEgbGF0ZW5jaWVzCitldmVudDowWDAxMzAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwNTgyMDEyMEUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMTMxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDU4MjAxMjBFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDEzMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDA1ODIwMTIwRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAxMzMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwNTgyMDEyMEUgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMjAgcG1fZGxhdGVuY2llczgsIERhdGEgbGF0ZW5jaWVzCitldmVudDowWDAxNDAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMTA1ODFFMjAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMTQxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDEwNTgxRTIwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDE0MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAxMDU4MUUyMCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAxNDMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMTA1ODFFMjAgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMjEgcG1fZGxhdGVuY2llczksIERhdGEgbGF0ZW5jaWVzCitldmVudDowWDAxNTAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMTIyQzEyNUUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMTUxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDEyMkMxMjVFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDE1MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAxMjJDMTI1RSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAxNTMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMTIyQzEyNUUgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMjIgcG1fZGxhdGVuY2llczEwLCBEYXRhIGxhdGVuY2llcworZXZlbnQ6MFgwMTYwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDVBMjYxRTI2IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDE2MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDA1QTI2MUUyNiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAxNjIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwNUEyNjFFMjYgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMTYzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDVBMjYxRTI2IG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDIzIHBtX2lzb3VyY2UsIEluc3RydWN0aW9uIHNvdXJjZXMKK2V2ZW50OjBYMDE3MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDA0MDAwMDA0MDQwNDY1NCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAxNzEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwNDAwMDAwNDA0MDQ2NTQgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMTcyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDQwMDAwMDQwNDA0NjU0IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDE3MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDA0MDAwMDA0MDQwNDY1NCBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAyNCBwbV9pc291cmNlMiwgSW5zdHJ1Y3Rpb24gc291cmNlcworZXZlbnQ6MFgwMTgwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDQwMDAwMDQ2NDY0MDQ2IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDE4MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDA0MDAwMDA0NjQ2NDA0NiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAxODIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwNDAwMDAwNDY0NjQwNDYgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMTgzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDQwMDAwMDQ2NDY0MDQ2IG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDI1IHBtX2lzb3VyY2UzLCBJbnN0cnVjdGlvbiBzb3VyY2VzCitldmVudDowWDAxOTAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwNDAwMDAwNDQ0NDQ0NDQgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMTkxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDQwMDAwMDQ0NDQ0NDQ0IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDE5MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDA0MDAwMDA0NDQ0NDQ0NCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAxOTMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwNDAwMDAwNDQ0NDQ0NDQgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMjYgcG1faXNvdXJjZTQsIEluc3RydWN0aW9uIHNvdXJjZXMKK2V2ZW50OjBYMDFBMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDA0MDAwMDA0MjQyNDI0MiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAxQTEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwNDAwMDAwNDI0MjQyNDIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMUEyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDQwMDAwMDQyNDI0MjQyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDFBMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDA0MDAwMDA0MjQyNDI0MiBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAyNyBwbV9pc291cmNlNSwgSW5zdHJ1Y3Rpb24gc291cmNlcworZXZlbnQ6MFgwMUIwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDQwMDAwMDQwNDA1NDU0IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDFCMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDA0MDAwMDA0MDQwNTQ1NCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAxQjIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwNDAwMDAwNDA0MDU0NTQgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMUIzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDQwMDAwMDQwNDA1NDU0IG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDI4IHBtX3B0ZWcsIFBURUcgc291cmNlcworZXZlbnQ6MFgwMUMwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAxMDAwMDQ4NDg0RTRFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDFDMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMTAwMDA0ODQ4NEU0RSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAxQzIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDEwMDAwNDg0ODRFNEUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMUMzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAxMDAwMDQ4NDg0RTRFIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDI5IHBtX3B0ZWcyLCBQVEVHIHNvdXJjZXMKK2V2ZW50OjBYMDFEMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMTAwMDAyODQ4NDg0QyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAxRDEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDEwMDAwMjg0ODQ4NEMgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMUQyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAxMDAwMDI4NDg0ODRDIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDFEMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMTAwMDAyODQ4NDg0QyBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAzMCBwbV9wdGVnMywgUFRFRyBzb3VyY2VzCitldmVudDowWDAxRTAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDEwMDAwNEU0RTI4NEEgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMUUxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAxMDAwMDRFNEUyODRBIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDFFMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMTAwMDA0RTRFMjg0QSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAxRTMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDEwMDAwNEU0RTI4NEEgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMzEgcG1fcHRlZzQsIFBURUcgc291cmNlcworZXZlbnQ6MFgwMUYwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAxMDAwMDRBNEE0QTRBIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDFGMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMTAwMDA0QTRBNEE0QSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAxRjIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDEwMDAwNEE0QTRBNEEgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMUYzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAxMDAwMDRBNEE0QTRBIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDMyIHBtX3B0ZWc1LCBQVEVHIHNvdXJjZXMKK2V2ZW50OjBYMDIwMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMTAwMDA0QzRDNENDOCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAyMDEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDEwMDAwNEM0QzRDQzggbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMjAyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAxMDAwMDRDNEM0Q0M4IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDIwMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMTAwMDA0QzRDNENDOCBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAzMyBwbV9kYXRhX3RhYmxld2FsaywgRGF0YSB0YWJsZXdhbGtzCitldmVudDowWDAyMTAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDA5OTAwMDAwQTBBMjg0RTggbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMjExIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwOTkwMDAwMEEwQTI4NEU4IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDIxMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDk5MDAwMDBBMEEyODRFOCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAyMTMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDA5OTAwMDAwQTBBMjg0RTggbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMzQgcG1faW5zdF90YWJsZXdhbGssIEluc3RydWN0aW9uIHRhYmxld2Fsa3MKK2V2ZW50OjBYMDIyMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDk5MDAwMDBBOEFBOENFQSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAyMjEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDA5OTAwMDAwQThBQThDRUEgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMjIyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwOTkwMDAwMEE4QUE4Q0VBIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDIyMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDk5MDAwMDBBOEFBOENFQSBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAzNSBwbV9mcmVxLCBGcmVxdWVuY3kgZXZlbnRzCitldmVudDowWDAyMzAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMkEzQzNDM0MgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMjMxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDJBM0MzQzNDIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDIzMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAyQTNDM0MzQyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAyMzMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMkEzQzNDM0MgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMzYgcG1fZGlzcF93YWl0LCBEaXNwYXRjaCBzdGFsbHMKK2V2ZW50OjBYMDI0MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDA1NjBDMDQwQyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAyNDEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwNTYwQzA0MEMgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMjQyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDU2MEMwNDBDIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDI0MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDA1NjBDMDQwQyBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAzNyBwbV9kaXNwX2hlbGQsIERpc3BhdGNoIGhlbGQgY29uZGl0aW9ucworZXZlbnQ6MFgwMjUwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgyMDAwMDAwMDJBM0MyQUEyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDI1MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMjAwMDAwMDAyQTNDMkFBMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAyNTIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDIwMDAwMDAwMkEzQzJBQTIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMjUzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgyMDAwMDAwMDJBM0MyQUEyIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDM4IHBtX2Rpc3BfaGVsZDIsIERpc3BhdGNoIGhlbGQgY29uZGl0aW9ucworZXZlbnQ6MFgwMjYwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgyMDAwMDAwMDgwMDRBNEE2IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDI2MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMjAwMDAwMDA4MDA0QTRBNiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAyNjIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDIwMDAwMDAwODAwNEE0QTYgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMjYzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgyMDAwMDAwMDgwMDRBNEE2IG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDM5IHBtX2Rpc3BfaGVsZDMsIERpc3BhdGNoIGhlbGQgY29uZGl0aW9ucworZXZlbnQ6MFgwMjcwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgyMDAwMDAwMDg4OEFBQ0FFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDI3MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMjAwMDAwMDA4ODhBQUNBRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAyNzIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDIwMDAwMDAwODg4QUFDQUUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMjczIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgyMDAwMDAwMDg4OEFBQ0FFIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDQwIHBtX2Rpc3BfaGVsZDQsIERpc3BhdGNoIGhlbGQgY29uZGl0aW9ucworZXZlbnQ6MFgwMjgwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMjAwMDAwMEEwQTI4NDg2IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDI4MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDIwMDAwMDBBMEEyODQ4NiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAyODIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAyMDAwMDAwQTBBMjg0ODYgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMjgzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMjAwMDAwMEEwQTI4NDg2IG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDQxIHBtX2Rpc3BfaGVsZDUsIERpc3BhdGNoIGhlbGQgY29uZGl0aW9ucworZXZlbnQ6MFgwMjkwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgyMjAwMDAwMEE4QUE4Q0EwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDI5MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMjIwMDAwMDBBOEFBOENBMCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAyOTIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDIyMDAwMDAwQThBQThDQTAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMjkzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgyMjAwMDAwMEE4QUE4Q0EwIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDQyIHBtX2Rpc3BfaGVsZDYsIERpc3BhdGNoIGhlbGQgY29uZGl0aW9ucworZXZlbnQ6MFgwMkEwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMzAwMDAwMEE4ODJBNEE2IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDJBMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzMwMDAwMDBBODgyQTRBNiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAyQTIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMzMDAwMDAwQTg4MkE0QTYgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMkEzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMzAwMDAwMEE4ODJBNEE2IG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDQzIHBtX2Rpc3BfaGVsZDcsIERpc3BhdGNoIGhlbGQgY29uZGl0aW9ucworZXZlbnQ6MFgwMkIwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDAwMDAwMDg4OEFBQ0FFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDJCMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzAwMDAwMDA4ODhBQUNBRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAyQjIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMwMDAwMDAwODg4QUFDQUUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMkIzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMDAwMDAwMDg4OEFBQ0FFIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDQ0IHBtX2Rpc3BfaGVsZDgsIERpc3BhdGNoIGhlbGQgY29uZGl0aW9ucworZXZlbnQ6MFgwMkMwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgyMjAwMDAwMDhBOENBRTgwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDJDMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMjIwMDAwMDA4QThDQUU4MCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAyQzIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDIyMDAwMDAwOEE4Q0FFODAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMkMzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgyMjAwMDAwMDhBOENBRTgwIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDQ1IHBtX2Rpc3BfaGVsZDksIERpc3BhdGNoIGhlbGQgY29uZGl0aW9ucworZXZlbnQ6MFgwMkQwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgyMjAwMDAwMDhBQTA4QThDIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDJEMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMjIwMDAwMDA4QUEwOEE4QyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAyRDIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDIyMDAwMDAwOEFBMDhBOEMgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMkQzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgyMjAwMDAwMDhBQTA4QThDIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDQ2IHBtX3N5bmMsIFN5bmMgZXZlbnRzCitldmVudDowWDAyRTAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDM4OTAwMDAwQUUxRUVDQTAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMkUxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzODkwMDAwMEFFMUVFQ0EwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDJFMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzg5MDAwMDBBRTFFRUNBMCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAyRTMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDM4OTAwMDAwQUUxRUVDQTAgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgNDcgcG1fTDFfcmVmLCBMMSByZWZlcmVuY2VzCitldmVudDowWDAyRjAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDgwMDAwMDAwMzY4QUE2M0EgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMkYxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg4MDAwMDAwMDM2OEFBNjNBIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDJGMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYODAwMDAwMDAzNjhBQTYzQSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAyRjMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDgwMDAwMDAwMzY4QUE2M0EgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgNDggcG1fTDFfbGRzdCwgTDEgbG9hZC9zdG9yZSByZWYvbWlzcworZXZlbnQ6MFgwMzAwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg4MDAwMDAwMDMyMzBBOEEwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDMwMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYODAwMDAwMDAzMjMwQThBMCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAzMDIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDgwMDAwMDAwMzIzMEE4QTAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMzAzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg4MDAwMDAwMDMyMzBBOEEwIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDQ5IHBtX3N0cmVhbXMsIFN0cmVhbXMKK2V2ZW50OjBYMDMxMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDgwMDAwMDBBMEEyODRBNCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAzMTEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQ4MDAwMDAwQTBBMjg0QTQgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMzEyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0ODAwMDAwMEEwQTI4NEE0IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDMxMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDgwMDAwMDBBMEEyODRBNCBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCA1MCBwbV9mbHVzaCwgRmx1c2hlcworZXZlbnQ6MFgwMzIwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDIyMDAwMDEwQ0FDQ0NBIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDMyMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAyMjAwMDAxMENBQ0NDQSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAzMjIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMjIwMDAwMTBDQUNDQ0EgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMzIzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDIyMDAwMDEwQ0FDQ0NBIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDUxIHBtX3ByZWZldGNoLCBJIGNhY2hlIFByZWZldGNoZXMKK2V2ZW50OjBYMDMzMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwNDAwMDA4QThDQUVDMCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAzMzEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwMDQwMDAwOEE4Q0FFQzAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMzMyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MDA0MDAwMDhBOENBRUMwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDMzMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwNDAwMDA4QThDQUVDMCBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCA1MiBwbV9zdGN4LCBTVENYCitldmVudDowWDAzNDAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDgwMDAwRTZFQ0NFQ0EgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMzQxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDA4MDAwMEU2RUNDRUNBIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDM0MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwODAwMDBFNkVDQ0VDQSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAzNDMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDgwMDAwRTZFQ0NFQ0EgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgNTMgcG1fbGFyeCwgTEFSWAorZXZlbnQ6MFgwMzUwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDA4MDAwMEVBRTJDNkNFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDM1MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwODAwMDBFQUUyQzZDRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAzNTIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDgwMDAwRUFFMkM2Q0UgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMzUzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDA4MDAwMEVBRTJDNkNFIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDU0IHBtX3RocmVhZF9jeWMsIFRocmVhZCBjeWNsZXMKK2V2ZW50OjBYMDM2MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAxNjE4MjYwNCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAzNjEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMTYxODI2MDQgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMzYyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDE2MTgyNjA0IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDM2MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAxNjE4MjYwNCBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCA1NSBwbV9taXNjLCBNaXNjCitldmVudDowWDAzNzAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMDQxNjE4MDggbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwMzcxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDA0MTYxODA4IG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMDM3MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAwNDE2MTgwOCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDAzNzMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMDQxNjE4MDggbW1jcmE6MFgwMDAwMDAwMQorCisjR3JvdXAgNTYgcG1fbWlzYzIsIE1pc2MKK2V2ZW50OjBYMDM4MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMjAwMDBFRUY4RjhBMCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAzODEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwMDIwMDAwRUVGOEY4QTAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMzgyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MDAyMDAwMEVFRjhGOEEwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDM4MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMjAwMDBFRUY4RjhBMCBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCA1NyBwbV9taXNjMywgTWlzYworZXZlbnQ6MFgwMzkwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMzAwMDAwMDU0QTAxRTAyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDM5MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDMwMDAwMDA1NEEwMUUwMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAzOTIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAzMDAwMDAwNTRBMDFFMDIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMzkzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMzAwMDAwMDU0QTAxRTAyIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDU4IHBtX3RsYl9zbGIsIFRMQiBhbmQgU0xCIGV2ZW50cworZXZlbnQ6MFgwM0EwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDk4MDAwMEUwRThFOEUyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDNBMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDA5ODAwMDBFMEU4RThFMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAzQTIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwOTgwMDAwRTBFOEU4RTIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwM0EzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDk4MDAwMEUwRThFOEUyIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDU5IHBtX3NsYl9taXNzLCBTTEIgTWlzc2VzCitldmVudDowWDAzQjAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwNDgwMDAxRTBFOEVFMzIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwM0IxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDQ4MDAwMUUwRThFRTMyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDNCMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDA0ODAwMDFFMEU4RUUzMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAzQjMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwNDgwMDAxRTBFOEVFMzIgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgNjAgcG1fcmVqZWN0cywgUmVqZWN0IGV2ZW50cworZXZlbnQ6MFgwM0MwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhBQTAwMDAwMDM0MzAzRTMwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDNDMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQUEwMDAwMDAzNDMwM0UzMCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAzQzIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEFBMDAwMDAwMzQzMDNFMzAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwM0MzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhBQTAwMDAwMDM0MzAzRTMwIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDYxIHBtX3JlamVjdHMyLCBSZWplY3QgZXZlbnRzCitldmVudDowWDAzRDAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDlBMDAwMDAwMzIzODMwQUMgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwM0QxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg5QTAwMDAwMDMyMzgzMEFDIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDNEMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYOUEwMDAwMDAzMjM4MzBBQyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAzRDMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDlBMDAwMDAwMzIzODMwQUMgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgNjIgcG1fcmVqZWN0czMsIFJlamVjdCBldmVudHMKK2V2ZW50OjBYMDNFMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQUEwMDAwMDAzMDNFMzIzNCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAzRTEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEFBMDAwMDAwMzAzRTMyMzQgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwM0UyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhBQTAwMDAwMDMwM0UzMjM0IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDNFMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQUEwMDAwMDAzMDNFMzIzNCBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCA2MyBwbV9yZWplY3RzNCwgVW5hbGlnbmVkIHN0b3JlIHJlamVjdHMKK2V2ZW50OjBYMDNGMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYOTAwMDAwMDAzNjMwQTJBQSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAzRjEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDkwMDAwMDAwMzYzMEEyQUEgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwM0YyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg5MDAwMDAwMDM2MzBBMkFBIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDNGMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYOTAwMDAwMDAzNjMwQTJBQSBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCA2NCBwbV9yZWplY3RzNSwgVW5hbGlnbmVkIGxvYWQgcmVqZWN0cworZXZlbnQ6MFgwNDAwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg5MDAwMDAwMDMwMzZBMEE4IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDQwMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYOTAwMDAwMDAzMDM2QTBBOCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA0MDIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDkwMDAwMDAwMzAzNkEwQTggbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNDAzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg5MDAwMDAwMDMwMzZBMEE4IG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDY1IHBtX3JlamVjdHM2LCBTZXQgbWlzcHJlZGljdGlvbnMgcmVqZWN0cworZXZlbnQ6MFgwNDEwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhBMDAwMDAwMDg0OEMzNDFDIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDQxMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQTAwMDAwMDA4NDhDMzQxQyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA0MTIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEEwMDAwMDAwODQ4QzM0MUMgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNDEzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhBMDAwMDAwMDg0OEMzNDFDIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDY2IHBtX3JlamVjdHNfdW5pdCwgVW5hbGlnbmVkIHJlamVjdCBldmVudHMgYnkgdW5pdAorZXZlbnQ6MFgwNDIwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg5MDAwMDAwMDgwOEFBMkE4IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDQyMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYOTAwMDAwMDA4MDhBQTJBOCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA0MjIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDkwMDAwMDAwODA4QUEyQTggbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNDIzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg5MDAwMDAwMDgwOEFBMkE4IG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDY3IHBtX3JlamVjdHNfdW5pdDIsIFJlamVjdCBldmVudHMgYnkgdW5pdAorZXZlbnQ6MFgwNDMwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhBQTAwMDAwMEE2ODI4RThBIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDQzMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQUEwMDAwMDBBNjgyOEU4QSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA0MzIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEFBMDAwMDAwQTY4MjhFOEEgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNDMzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhBQTAwMDAwMEE2ODI4RThBIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDY4IHBtX3JlamVjdHNfdW5pdDMsIFJlamVjdCBldmVudHMgYnkgdW5pdAorZXZlbnQ6MFgwNDQwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwQTAwMDAwMEE0QTA4Qzg4IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDQ0MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMEEwMDAwMDBBNEEwOEM4OCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA0NDIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDBBMDAwMDAwQTRBMDhDODggbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNDQzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwQTAwMDAwMEE0QTA4Qzg4IG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDY5IHBtX3JlamVjdHNfdW5pdDQsIFJlamVjdCBldmVudHMgYnkgdW5pdAorZXZlbnQ6MFgwNDUwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhBQTAwMDAwMEEyODY4QUFFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDQ1MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQUEwMDAwMDBBMjg2OEFBRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA0NTIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEFBMDAwMDAwQTI4NjhBQUUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNDUzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhBQTAwMDAwMEEyODY4QUFFIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDcwIHBtX3JlamVjdHNfdW5pdDUsIFJlamVjdCBldmVudHMgYnkgdW5pdAorZXZlbnQ6MFgwNDYwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg5OTAwMDAwMDg2QTZBRThFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDQ2MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYOTkwMDAwMDA4NkE2QUU4RSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA0NjIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDk5MDAwMDAwODZBNkFFOEUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNDYzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg5OTAwMDAwMDg2QTZBRThFIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDcxIHBtX3JlamVjdHNfdW5pdDYsIFJlamVjdCBldmVudHMgYnkgdW5pdAorZXZlbnQ6MFgwNDcwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhBQTAwMDAwMDgwQTZBODhFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDQ3MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQUEwMDAwMDA4MEE2QTg4RSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA0NzIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEFBMDAwMDAwODBBNkE4OEUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNDczIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhBQTAwMDAwMDgwQTZBODhFIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDcyIHBtX3JlamVjdHNfdW5pdDcsIFJlamVjdCBldmVudHMgYnkgdW5pdAorZXZlbnQ6MFgwNDgwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhBOTAwMDAwMDgyQTZBQThFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDQ4MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQTkwMDAwMDA4MkE2QUE4RSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA0ODIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEE5MDAwMDAwODJBNkFBOEUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNDgzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhBOTAwMDAwMDgyQTZBQThFIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDczIHBtX2xkZiwgRmxvYXRpbmcgUG9pbnQgbG9hZHMKK2V2ZW50OjBYMDQ5MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYODAwMDAwMDAzODMyQTRBQyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA0OTEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDgwMDAwMDAwMzgzMkE0QUMgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNDkyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg4MDAwMDAwMDM4MzJBNEFDIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDQ5MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYODAwMDAwMDAzODMyQTRBQyBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCA3NCBwbV9sc3VfbWlzYywgTFNVIGV2ZW50cworZXZlbnQ6MFgwNEEwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwODgwMDAwMENBQ0NFRThBIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDRBMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDg4MDAwMDBDQUNDRUU4QSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA0QTIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDA4ODAwMDAwQ0FDQ0VFOEEgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNEEzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwODgwMDAwMENBQ0NFRThBIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDc1IHBtX2xzdV9sbXEsIExTVSBMTVEgZXZlbnRzCitldmVudDowWDA0QjAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDk4MDAwMDAwQUMxQzFDQTQgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNEIxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg5ODAwMDAwMEFDMUMxQ0E0IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDRCMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYOTgwMDAwMDBBQzFDMUNBNCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA0QjMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDk4MDAwMDAwQUMxQzFDQTQgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgNzYgcG1fbHN1X2ZsdXNoX2RlcmF0X21pc3MsIExTVSBmbHVzaCBhbmQgREVSQVQgbWlzc2VzCitldmVudDowWDA0QzAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMjAwMDAwRkMwRUVDRUUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNEMxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDIwMDAwMEZDMEVFQ0VFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDRDMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAyMDAwMDBGQzBFRUNFRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA0QzMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMjAwMDAwRkMwRUVDRUUgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgNzcgcG1fbGxhLCBMb29rIExvYWQgQWhlYWQgZXZlbnRzCitldmVudDowWDA0RDAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMzMDAwMDAwQTI4NDEyMDggbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNEQxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMzAwMDAwMEEyODQxMjA4IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDREMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzMwMDAwMDBBMjg0MTIwOCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA0RDMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMzMDAwMDAwQTI4NDEyMDggbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgNzggcG1fZ2N0LCBHQ1QgZXZlbnRzCitldmVudDowWDA0RTAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwNDAwMDAwMDgwOEE2RTggbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNEUxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MDQwMDAwMDA4MDhBNkU4IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDRFMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDA0MDAwMDAwODA4QTZFOCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA0RTMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwNDAwMDAwMDgwOEE2RTggbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgNzkgcG1fc210X3ByaW9yaXRpZXMsIFRocmVhZCBwcmlvcml0eSBldmVudHMKK2V2ZW50OjBYMDRGMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAyMDAwMDA0MDQwNDA0MCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA0RjEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMjAwMDAwNDA0MDQwNDAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNEYyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDIwMDAwMDQwNDA0MDQwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDRGMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAyMDAwMDA0MDQwNDA0MCBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCA4MCBwbV9zbXRfcHJpb3JpdGllczIsIFRocmVhZCBwcmlvcml0eSBldmVudHMKK2V2ZW50OjBYMDUwMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAyMDAwMDA0NjQ2NDY0NiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA1MDEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMjAwMDAwNDY0NjQ2NDYgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNTAyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDIwMDAwMDQ2NDY0NjQ2IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDUwMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAyMDAwMDA0NjQ2NDY0NiBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCA4MSBwbV9zbXRfcHJpb3JpdGllczMsIFRocmVhZCBwcmlvcml0eSBkaWZmZXJlbmNlcyBldmVudHMKK2V2ZW50OjBYMDUxMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMjAwMDA0MDQwNDA0MCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA1MTEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDIwMDAwNDA0MDQwNDAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNTEyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAyMDAwMDQwNDA0MDQwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDUxMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMjAwMDA0MDQwNDA0MCBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCA4MiBwbV9zbXRfcHJpb3JpdGllczQsIFRocmVhZCBwcmlvcml0eSBkaWZmZXJlbmNlcyBldmVudHMKK2V2ZW50OjBYMDUyMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDMwMjAwMDBBNjQ2NDY0NiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA1MjEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAzMDIwMDAwQTY0NjQ2NDYgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNTIyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMzAyMDAwMEE2NDY0NjQ2IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDUyMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDMwMjAwMDBBNjQ2NDY0NiBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCA4MyBwbV9meHUsIEZYVSBldmVudHMKK2V2ZW50OjBYMDUzMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDA1MDUwNTA1MCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA1MzEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwNTA1MDUwNTAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNTMyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDUwNTA1MDUwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDUzMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDA1MDUwNTA1MCBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCA4NCBwbV9meHUyLCBGWFUgZXZlbnRzCitldmVudDowWDA1NDAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAyMDQwMDAwQUVFNDE2MTYgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNTQxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMjA0MDAwMEFFRTQxNjE2IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDU0MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDIwNDAwMDBBRUU0MTYxNiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA1NDMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAyMDQwMDAwQUVFNDE2MTYgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgODUgcG1fdm14LCBWTVggZXZlbnRzCitldmVudDowWDA1NTAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDcwMDAwMDAwODQ4MEEyQTYgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNTUxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg3MDAwMDAwMDg0ODBBMkE2IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDU1MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNzAwMDAwMDA4NDgwQTJBNiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA1NTMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDcwMDAwMDAwODQ4MEEyQTYgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgODYgcG1fdm14MiwgVk1YIGV2ZW50cworZXZlbnQ6MFgwNTYwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg2MDAwMDAwMDgwODhBMkFBIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDU2MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNjAwMDAwMDA4MDg4QTJBQSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA1NjIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDYwMDAwMDAwODA4OEEyQUEgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNTYzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg2MDAwMDAwMDgwODhBMkFBIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDg3IHBtX3ZteDMsIFZNWCBldmVudHMKK2V2ZW50OjBYMDU3MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNjAwMDAwMDA4Mjg0QUFBQyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA1NzEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDYwMDAwMDAwODI4NEFBQUMgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNTcyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg2MDAwMDAwMDgyODRBQUFDIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDU3MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNjAwMDAwMDA4Mjg0QUFBQyBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCA4OCBwbV92bXg0LCBWTVggZXZlbnRzCitldmVudDowWDA1ODAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEIwMDAwMDAwODI4RUE2QTAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNTgxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhCMDAwMDAwMDgyOEVBNkEwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDU4MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQjAwMDAwMDA4MjhFQTZBMCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA1ODMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEIwMDAwMDAwODI4RUE2QTAgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgODkgcG1fdm14NSwgVk1YIGV2ZW50cworZXZlbnQ6MFgwNTkwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhCMDAwMDAwMDgwODRBQ0EyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDU5MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQjAwMDAwMDA4MDg0QUNBMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA1OTIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEIwMDAwMDAwODA4NEFDQTIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNTkzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhCMDAwMDAwMDgwODRBQ0EyIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDkwIHBtX2RmdSwgREZVIGV2ZW50cworZXZlbnQ6MFgwNUEwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhFMDAwMDAwMDhDODhBMkFFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDVBMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYRTAwMDAwMDA4Qzg4QTJBRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA1QTIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEUwMDAwMDAwOEM4OEEyQUUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNUEzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhFMDAwMDAwMDhDODhBMkFFIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDkxIHBtX2RmdTIsIERGVSBldmVudHMKK2V2ZW50OjBYMDVCMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYRTAwMDAwMDA4QTg0QTBBNiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA1QjEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEUwMDAwMDAwOEE4NEEwQTYgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNUIyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhFMDAwMDAwMDhBODRBMEE2IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDVCMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYRTAwMDAwMDA4QTg0QTBBNiBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCA5MiBwbV9mYWIsIEZhYnJpYyBldmVudHMKK2V2ZW50OjBYMDVDMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNTAwMDIwMDAzMDMwQTRBQyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA1QzEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDUwMDAyMDAwMzAzMEE0QUMgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNUMyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg1MDAwMjAwMDMwMzBBNEFDIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDVDMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNTAwMDIwMDAzMDMwQTRBQyBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCA5MyBwbV9mYWIyLCBGYWJyaWMgZXZlbnRzCitldmVudDowWDA1RDAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDUwMDAyMDAwODg4QUEyQTAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNUQxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg1MDAwMjAwMDg4OEFBMkEwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDVEMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNTAwMDIwMDA4ODhBQTJBMCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA1RDMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDUwMDAyMDAwODg4QUEyQTAgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgOTQgcG1fZmFiMywgRmFicmljIGV2ZW50cworZXZlbnQ6MFgwNUUwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg1MDAwMjAwMDMwMzBBRUE2IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDVFMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNTAwMDIwMDAzMDMwQUVBNiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA1RTIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDUwMDAyMDAwMzAzMEFFQTYgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNUUzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg1MDAwMjAwMDMwMzBBRUE2IG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDk1IHBtX21lbV9kYmxwdW1wLCBEb3VibGUgcHVtcAorZXZlbnQ6MFgwNUYwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg1MDAwNDAwMDMwMzAzNDM0IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDVGMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNTAwMDQwMDAzMDMwMzQzNCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA1RjIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDUwMDA0MDAwMzAzMDM0MzQgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNUYzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg1MDAwNDAwMDMwMzAzNDM0IG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDk2IHBtX21lbTBfZGJscHVtcCwgTUNTMCBEb3VibGUgcHVtcAorZXZlbnQ6MFgwNjAwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg1MDAwNDAwMDgwODJBNEE2IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDYwMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNTAwMDQwMDA4MDgyQTRBNiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA2MDIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDUwMDA0MDAwODA4MkE0QTYgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNjAzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg1MDAwNDAwMDgwODJBNEE2IG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDk3IHBtX21lbTFfZGJscHVtcCwgTUNTMSBEb3VibGUgcHVtcAorZXZlbnQ6MFgwNjEwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg1MDAwNDAwMDg4OEFBQ0FFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDYxMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNTAwMDQwMDA4ODhBQUNBRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA2MTIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDUwMDA0MDAwODg4QUFDQUUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNjEzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg1MDAwNDAwMDg4OEFBQ0FFIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDk4IHBtX2d4bywgR1ggb3V0Ym91bmQKK2V2ZW50OjBYMDYyMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNTAwMDYwMDA4MDgyQTRBNiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA2MjEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDUwMDA2MDAwODA4MkE0QTYgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNjIyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg1MDAwNjAwMDgwODJBNEE2IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDYyMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNTAwMDYwMDA4MDgyQTRBNiBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCA5OSBwbV9neGksIEdYIGluYm91bmQKK2V2ZW50OjBYMDYzMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNTAwMDYwMDA4Njg4QUFBMCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA2MzEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDUwMDA2MDAwODY4OEFBQTAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNjMyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg1MDAwNjAwMDg2ODhBQUEwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDYzMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNTAwMDYwMDA4Njg4QUFBMCBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxMDAgcG1fZ3hfZG1hLCBETUEgZXZlbnRzCitldmVudDowWDA2NDAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDUwMDA2MDAwODA4NkFDQUUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNjQxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg1MDAwNjAwMDgwODZBQ0FFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDY0MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNTAwMDYwMDA4MDg2QUNBRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA2NDMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDUwMDA2MDAwODA4NkFDQUUgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMTAxIHBtX0wxX21pc2MsIEwxIG1pc2MgZXZlbnRzCitldmVudDowWDA2NTAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwMDQwMDAwODJFMkE4MEEgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNjUxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MDA0MDAwMDgyRTJBODBBIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDY1MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwNDAwMDA4MkUyQTgwQSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA2NTMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwMDQwMDAwODJFMkE4MEEgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMTAyIHBtX0wyX2RhdGEsIEwyIGxvYWQgYW5kIHN0b3JlIGRhdGEKK2V2ZW50OjBYMDY2MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNTAwMDgwMDAzMDMwMzQzNCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA2NjEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDUwMDA4MDAwMzAzMDM0MzQgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNjYyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg1MDAwODAwMDMwMzAzNDM0IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDY2MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNTAwMDgwMDAzMDMwMzQzNCBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxMDMgcG1fTDJfbGRfaW5zdCwgTDIgTG9hZCBpbnN0cnVjdGlvbnMKK2V2ZW50OjBYMDY3MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNTgwMEEwMDAzMDMwMzQ4NiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA2NzEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDU4MDBBMDAwMzAzMDM0ODYgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNjcyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg1ODAwQTAwMDMwMzAzNDg2IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDY3MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNTgwMEEwMDAzMDMwMzQ4NiBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxMDQgcG1fTDJfY2FzdG91dF9pbnZhbGlkYXRlLCBMMiBjYXN0b3V0IGFuZCBpbnZhbGlkYXRlIGV2ZW50cworZXZlbnQ6MFgwNjgwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg1MDAwQzAwMDMwMzAzNDM0IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDY4MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNTAwMEMwMDAzMDMwMzQzNCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA2ODIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDUwMDBDMDAwMzAzMDM0MzQgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNjgzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg1MDAwQzAwMDMwMzAzNDM0IG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDEwNSBwbV9MMl9sZHN0X3JlcWhpdCwgTDIgbG9hZCBhbmQgc3RvcmUgcmVxdWVzdHMgYW5kIGhpdHMKK2V2ZW50OjBYMDY5MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNTAwMEUwMDAzMDMwMzQzNCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA2OTEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDUwMDBFMDAwMzAzMDM0MzQgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNjkyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg1MDAwRTAwMDMwMzAzNDM0IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDY5MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNTAwMEUwMDAzMDMwMzQzNCBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxMDYgcG1fTDJfbGRfZGF0YV9zbGljZSwgTDIgZGF0YSBsb2FkcyBieSBzbGljZQorZXZlbnQ6MFgwNkEwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg1MDAwODAwMDgwODJBOEFBIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDZBMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNTAwMDgwMDA4MDgyQThBQSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA2QTIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDUwMDA4MDAwODA4MkE4QUEgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNkEzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg1MDAwODAwMDgwODJBOEFBIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDEwNyBwbV9MMl9sZF9pbnN0X3NsaWNlLCBMMiBpbnN0cnVjdGlvbiBsb2FkcyBieSBzbGljZQorZXZlbnQ6MFgwNkIwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg1MDAwQTAwMDgwODJBOEFBIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDZCMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNTAwMEEwMDA4MDgyQThBQSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA2QjIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDUwMDBBMDAwODA4MkE4QUEgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNkIzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg1MDAwQTAwMDgwODJBOEFBIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDEwOCBwbV9MMl9zdF9zbGljZSwgTDIgc2xpY2Ugc3RvcmVzIGJ5IHNsaWNlCitldmVudDowWDA2QzAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDUwMDA4MDAwODQ4NkFDQUUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNkMxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg1MDAwODAwMDg0ODZBQ0FFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDZDMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNTAwMDgwMDA4NDg2QUNBRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA2QzMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDUwMDA4MDAwODQ4NkFDQUUgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMTA5IHBtX0wybWlzc19zbGljZSwgTDIgbWlzc2VzIGJ5IHNsaWNlCitldmVudDowWDA2RDAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDUwMDBBMDAwODQzMjU2QUMgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNkQxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg1MDAwQTAwMDg0MzI1NkFDIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDZEMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNTAwMEEwMDA4NDMyNTZBQyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA2RDMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDUwMDBBMDAwODQzMjU2QUMgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMTEwIHBtX0wyX2Nhc3RvdXRfc2xpY2UsIEwyIGNhc3RvdXRzIGJ5IHNsaWNlCitldmVudDowWDA2RTAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDUwMDBDMDAwODA4MkE4QUEgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNkUxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg1MDAwQzAwMDgwODJBOEFBIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDZFMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNTAwMEMwMDA4MDgyQThBQSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA2RTMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDUwMDBDMDAwODA4MkE4QUEgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMTExIHBtX0wyX2ludmFsaWRhdGVfc2xpY2UsIEwyIGludmFsaWRhdGUgYnkgc2xpY2UKK2V2ZW50OjBYMDZGMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNTAwMEMwMDA4NDg2QUNBRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA2RjEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDUwMDBDMDAwODQ4NkFDQUUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNkYyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg1MDAwQzAwMDg0ODZBQ0FFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDZGMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNTAwMEMwMDA4NDg2QUNBRSBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxMTIgcG1fTDJfbGRfcmVxaGl0X3NsaWNlLCBMMiBsb2FkIHJlcXVlc3RzIGFuZCBoaXN0IGJ5IHNsaWNlCitldmVudDowWDA3MDAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDUwMDBFMDAwODA4MkE4QUEgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNzAxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg1MDAwRTAwMDgwODJBOEFBIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDcwMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNTAwMEUwMDA4MDgyQThBQSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA3MDMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDUwMDBFMDAwODA4MkE4QUEgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMTEzIHBtX0wyX3N0X3JlcWhpdF9zbGljZSwgTDIgc3RvcmUgcmVxdWVzdHMgYW5kIGhpc3QgYnkgc2xpY2UKK2V2ZW50OjBYMDcxMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNTAwMEUwMDA4NDg2QUNBRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA3MTEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDUwMDBFMDAwODQ4NkFDQUUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNzEyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg1MDAwRTAwMDg0ODZBQ0FFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDcxMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNTAwMEUwMDA4NDg2QUNBRSBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxMTQgcG1fTDJfcmVkaXJfcHJlZiwgTDIgcmVkaXJlY3QgYW5kIHByZWZldGNoCitldmVudDowWDA3MjAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDA4NDAwMDAwQ0FDQzg4ODYgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNzIxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwODQwMDAwMENBQ0M4ODg2IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDcyMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDg0MDAwMDBDQUNDODg4NiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA3MjMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDA4NDAwMDAwQ0FDQzg4ODYgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMTE1IHBtX0wzX1NsaWNlQSwgTDMgc2xpY2UgQSBldmVudHMKK2V2ZW50OjBYMDczMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNTAwMDAwMDAzMDMwNThBNCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA3MzEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDUwMDAwMDAwMzAzMDU4QTQgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNzMyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg1MDAwMDAwMDMwMzA1OEE0IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDczMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNTAwMDAwMDAzMDMwNThBNCBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxMTYgcG1fTDNfU2xpY2VCLCBMMyBzbGljZSBCIGV2ZW50cworZXZlbnQ6MFgwNzQwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg1MDAwMDAwMDg4OEE1OEFDIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDc0MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNTAwMDAwMDA4ODhBNThBQyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA3NDIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDUwMDAwMDAwODg4QTU4QUMgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNzQzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg1MDAwMDAwMDg4OEE1OEFDIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDExNyBwbV9mcHVfaXNzdWUsIEZQVSBpc3N1ZSBldmVudHMKK2V2ZW50OjBYMDc1MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAzMDAwMDBDNkM4RUFFNCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA3NTEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMzAwMDAwQzZDOEVBRTQgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNzUyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDMwMDAwMEM2QzhFQUU0IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDc1MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAzMDAwMDBDNkM4RUFFNCBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxMTggcG1fZnB1X2lzc3VlMiwgRlBVIGlzc3VlIGV2ZW50cworZXZlbnQ6MFgwNzYwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDMwMDAwMEMwQzJFQ0VFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDc2MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAzMDAwMDBDMEMyRUNFRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA3NjIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMzAwMDAwQzBDMkVDRUUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNzYzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDMwMDAwMEMwQzJFQ0VFIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDExOSBwbV9mcHVfaXNzdWUzLCBGUFUgaXNzdWUgZXZlbnRzCitldmVudDowWDA3NzAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMzMwMDAwRTBFMkVDRUUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNzcxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDMzMDAwMEUwRTJFQ0VFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDc3MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAzMzAwMDBFMEUyRUNFRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA3NzMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMzMwMDAwRTBFMkVDRUUgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMTIwIHBtX2ZwdTBfZmxvcCwgRlBVMCBmbG9wIGV2ZW50cworZXZlbnQ6MFgwNzgwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhDQzAwMDAwMDgwODJBNDg0IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDc4MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQ0MwMDAwMDA4MDgyQTQ4NCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA3ODIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWENDMDAwMDAwODA4MkE0ODQgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNzgzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhDQzAwMDAwMDgwODJBNDg0IG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDEyMSBwbV9mcHUwX21pc2MsIEZQVTAgZXZlbnRzCitldmVudDowWDA3OTAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWENDMDAwMDAwODZBMDgyODYgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNzkxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhDQzAwMDAwMDg2QTA4Mjg2IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDc5MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQ0MwMDAwMDA4NkEwODI4NiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA3OTMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWENDMDAwMDAwODZBMDgyODYgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMTIyIHBtX2ZwdTBfbWlzYzIsIEZQVTAgZXZlbnRzCitldmVudDowWDA3QTAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEREMDAwMDAwODBBNkE0QTYgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwN0ExIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhERDAwMDAwMDgwQTZBNEE2IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDdBMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYREQwMDAwMDA4MEE2QTRBNiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA3QTMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEREMDAwMDAwODBBNkE0QTYgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMTIzIHBtX2ZwdTBfbWlzYzMsIEZQVTAgZXZlbnRzCitldmVudDowWDA3QjAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDBEMDAwMDAwQTBBMjg0ODYgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwN0IxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwRDAwMDAwMEEwQTI4NDg2IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDdCMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMEQwMDAwMDBBMEEyODQ4NiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA3QjMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDBEMDAwMDAwQTBBMjg0ODYgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMTI0IHBtX2ZwdTFfZmxvcCwgRlBVMSBmbG9wIGV2ZW50cworZXZlbnQ6MFgwN0MwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhDQzAwMDAwMDg4OEFBQzhDIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDdDMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQ0MwMDAwMDA4ODhBQUM4QyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA3QzIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWENDMDAwMDAwODg4QUFDOEMgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwN0MzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhDQzAwMDAwMDg4OEFBQzhDIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDEyNSBwbV9mcHUxX21pc2MsIEZQVTEgZXZlbnRzCitldmVudDowWDA3RDAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWENDMDAwMDAwOEVBODhBOEUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwN0QxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhDQzAwMDAwMDhFQTg4QThFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDdEMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQ0MwMDAwMDA4RUE4OEE4RSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA3RDMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWENDMDAwMDAwOEVBODhBOEUgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMTI2IHBtX2ZwdTFfbWlzYzIsIEZQVTEgZXZlbnRzCitldmVudDowWDA3RTAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEREMDAwMDAwODhBRUFDQUUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwN0UxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhERDAwMDAwMDg4QUVBQ0FFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDdFMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYREQwMDAwMDA4OEFFQUNBRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA3RTMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEREMDAwMDAwODhBRUFDQUUgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMTI3IHBtX2ZwdTFfbWlzYzMsIEZQVTEgZXZlbnRzCitldmVudDowWDA3RjAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDBEMDAwMDAwQThBQThDOEUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwN0YxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwRDAwMDAwMEE4QUE4QzhFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDdGMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMEQwMDAwMDBBOEFBOEM4RSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA3RjMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDBEMDAwMDAwQThBQThDOEUgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMTI4IHBtX2ZwdV9mbG9wLCBGUFUgZmxvcCBldmVudHMKK2V2ZW50OjBYMDgwMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQzAwMDAwMDAzMDMwMzQzNCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA4MDEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEMwMDAwMDAwMzAzMDM0MzQgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwODAyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhDMDAwMDAwMDMwMzAzNDM0IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDgwMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQzAwMDAwMDAzMDMwMzQzNCBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxMjkgcG1fZnB1X21pc2MsIEZQVSBldmVudHMKK2V2ZW50OjBYMDgxMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYREQwMDAwMDAzMDM0MzQzNCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA4MTEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEREMDAwMDAwMzAzNDM0MzQgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwODEyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhERDAwMDAwMDMwMzQzNDM0IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDgxMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYREQwMDAwMDAzMDM0MzQzNCBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxMzAgcG1fZnB1X21pc2MyLCBGUFUgZXZlbnRzCitldmVudDowWDA4MjAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDBDMDAwMDAwMzQzNDMwMzAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwODIxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwQzAwMDAwMDM0MzQzMDMwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDgyMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMEMwMDAwMDAzNDM0MzAzMCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA4MjMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDBDMDAwMDAwMzQzNDMwMzAgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMTMxIHBtX2ZwdV9taXNjMywgRlBVIGV2ZW50cworZXZlbnQ6MFgwODMwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwRDAwMDAwMDM0MzQzMDMwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDgzMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMEQwMDAwMDAzNDM0MzAzMCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA4MzIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDBEMDAwMDAwMzQzNDMwMzAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwODMzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwRDAwMDAwMDM0MzQzMDMwIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDEzMiBwbV9wdXJyLCBQVVJSIGV2ZW50cworZXZlbnQ6MFgwODQwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDBFRjQxRTAyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDg0MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAwRUY0MUUwMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA4NDIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMEVGNDFFMDIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwODQzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDBFRjQxRTAyIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDEzMyBwbV9zdXNwZW5kLCBTVVNQRU5ERUQgZXZlbnRzCitldmVudDowWDA4NTAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwOTAwMDAwMDAxRUVDMDIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwODUxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDkwMDAwMDAwMUVFQzAyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDg1MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDA5MDAwMDAwMDFFRUMwMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA4NTMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwOTAwMDAwMDAxRUVDMDIgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMTM0IHBtX2RjYWNoZSwgRCBjYWNoZQorZXZlbnQ6MFgwODYwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDBDMEUwQzA2IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDg2MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAwQzBFMEMwNiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA4NjIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMEMwRTBDMDYgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwODYzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDBDMEUwQzA2IG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDEzNSBwbV9kZXJhdF9taXNzLCBERVJBVCBtaXNzCitldmVudDowWDA4NzAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwOTAwMDBGNDA0MDQwNDAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwODcxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDkwMDAwRjQwNDA0MDQwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDg3MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDA5MDAwMEY0MDQwNDA0MCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA4NzMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwOTAwMDBGNDA0MDQwNDAgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMTM2IHBtX2RlcmF0X3JlZiwgREVSQVQgcmVmCitldmVudDowWDA4ODAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwODAwMDBGNDA0MDQwNDAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwODgxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDgwMDAwRjQwNDA0MDQwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDg4MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDA4MDAwMEY0MDQwNDA0MCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA4ODMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwODAwMDBGNDA0MDQwNDAgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMTM3IHBtX2llcmF0X21pc3MsIElFUkFUIG1pc3MKK2V2ZW50OjBYMDg5MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDA5MDAwMEY0NjQ2NDY0NiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA4OTEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwOTAwMDBGNDY0NjQ2NDYgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwODkyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDkwMDAwRjQ2NDY0NjQ2IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDg5MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDA5MDAwMEY0NjQ2NDY0NiBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxMzggcG1fbXJrX2JyLCBNYXJrZWQgQnJhbmNoIGV2ZW50cworZXZlbnQ6MFgwOEEwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDUyNTY1MjAyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMDhBMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDA1MjU2NTIwMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDA4QTIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwNTI1NjUyMDIgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwOEEzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDUyNTY1MjAyIG1tY3JhOjBYMDAwMDAwMDEKKworI0dyb3VwIDEzOSBwbV9tcmtfZHNvdXJjZSwgTWFya2VkIGRhdGEgc291cmNlcworZXZlbnQ6MFgwOEIwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDAyNEE0QzRDIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMDhCMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAwMjRBNEM0QyBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDA4QjIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMDI0QTRDNEMgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwOEIzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDAyNEE0QzRDIG1tY3JhOjBYMDAwMDAwMDEKKworI0dyb3VwIDE0MCBwbV9tcmtfZHNvdXJjZTIsIE1hcmtlZCBkYXRhIHNvdXJjZXMKK2V2ZW50OjBYMDhDMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDA0ODQ4NEUwMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDA4QzEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwNDg0ODRFMDIgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwOEMyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDQ4NDg0RTAyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMDhDMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDA0ODQ4NEUwMiBtbWNyYTowWDAwMDAwMDAxCisKKyNHcm91cCAxNDEgcG1fbXJrX2Rzb3VyY2UzLCBNYXJrZWQgZGF0YSBzb3VyY2VzCitldmVudDowWDA4RDAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMjgwMjQ4NEUgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwOEQxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDI4MDI0ODRFIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMDhEMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAyODAyNDg0RSBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDA4RDMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMjgwMjQ4NEUgbW1jcmE6MFgwMDAwMDAwMQorCisjR3JvdXAgMTQyIHBtX21ya19kc291cmNlNCwgTWFya2VkIGRhdGEgc291cmNlcworZXZlbnQ6MFgwOEUwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDRFNEUyODAyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMDhFMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDA0RTRFMjgwMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDA4RTIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwNEU0RTI4MDIgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwOEUzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDRFNEUyODAyIG1tY3JhOjBYMDAwMDAwMDEKKworI0dyb3VwIDE0MyBwbV9tcmtfZHNvdXJjZTUsIE1hcmtlZCBkYXRhIHNvdXJjZXMKK2V2ZW50OjBYMDhGMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDA0QTRDMDI0QSBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDA4RjEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwNEE0QzAyNEEgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwOEYyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDRBNEMwMjRBIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMDhGMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDA0QTRDMDI0QSBtbWNyYTowWDAwMDAwMDAxCisKKyNHcm91cCAxNDQgcG1fbXJrX2Rzb3VyY2U2LCBNYXJrZWQgZGF0YSBzb3VyY2VzCitldmVudDowWDA5MDAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwNEM0QzRBMDIgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwOTAxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDRDNEM0QTAyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMDkwMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDA0QzRDNEEwMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDA5MDMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwNEM0QzRBMDIgbW1jcmE6MFgwMDAwMDAwMQorCisjR3JvdXAgMTQ1IHBtX21ya19yZWplY3RzLCBNYXJrZWQgcmVqZWN0cworZXZlbnQ6MFgwOTEwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDA5MDAwRDM0MzQwMjMwIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMDkxMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwOTAwMEQzNDM0MDIzMCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDA5MTIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDkwMDBEMzQzNDAyMzAgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwOTEzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDA5MDAwRDM0MzQwMjMwIG1tY3JhOjBYMDAwMDAwMDEKKworI0dyb3VwIDE0NiBwbV9tcmtfcmVqZWN0czIsIE1hcmtlZCByZWplY3RzIExTVTAKK2V2ZW50OjBYMDkyMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwOTAwMDBFNkUwQzIwMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDA5MjEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDkwMDAwRTZFMEMyMDIgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwOTIyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDA5MDAwMEU2RTBDMjAyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMDkyMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwOTAwMDBFNkUwQzIwMiBtbWNyYTowWDAwMDAwMDAxCisKKyNHcm91cCAxNDcgcG1fbXJrX3JlamVjdHMzLCBNYXJrZWQgcmVqZWN0cyBMU1UxCitldmVudDowWDA5MzAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDkwMDAwRUVFOENBMDIgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwOTMxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDA5MDAwMEVFRThDQTAyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMDkzMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwOTAwMDBFRUU4Q0EwMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDA5MzMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDkwMDAwRUVFOENBMDIgbW1jcmE6MFgwMDAwMDAwMQorCisjR3JvdXAgMTQ4IHBtX21ya19pbnN0LCBNYXJrZWQgaW5zdHJ1Y3Rpb24gZXZlbnRzCitldmVudDowWDA5NDAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMUMxMDBBMDIgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwOTQxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDFDMTAwQTAyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMDk0MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAxQzEwMEEwMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDA5NDMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMUMxMDBBMDIgbW1jcmE6MFgwMDAwMDAwMQorCisjR3JvdXAgMTQ5IHBtX21ya19mcHVfZmluLCBNYXJrZWQgRmxvYXRpbmcgUG9pbnQgaW5zdHJ1Y3Rpb25zIGZpbmlzaGVkCitldmVudDowWDA5NTAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEQwMDAwMDAwODI4QTFBMDIgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwOTUxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhEMDAwMDAwMDgyOEExQTAyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMDk1MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYRDAwMDAwMDA4MjhBMUEwMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDA5NTMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEQwMDAwMDAwODI4QTFBMDIgbW1jcmE6MFgwMDAwMDAwMQorCisjR3JvdXAgMTUwIHBtX21ya19taXNjLCBNYXJrZWQgbWlzYyBldmVudHMKK2V2ZW50OjBYMDk2MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwOTAwMDgzNDFBMDgwMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDA5NjEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDkwMDA4MzQxQTA4MDIgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwOTYyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDA5MDAwODM0MUEwODAyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMDk2MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwOTAwMDgzNDFBMDgwMiBtbWNyYTowWDAwMDAwMDAxCisKKyNHcm91cCAxNTEgcG1fbXJrX21pc2MyLCBNYXJrZWQgbWlzYyBldmVudHMKK2V2ZW50OjBYMDk3MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwODAwMDBFNDBBMDIzRSBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDA5NzEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDgwMDAwRTQwQTAyM0UgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwOTcyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDA4MDAwMEU0MEEwMjNFIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMDk3MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwODAwMDBFNDBBMDIzRSBtbWNyYTowWDAwMDAwMDAxCisKKyNHcm91cCAxNTIgcG1fbXJrX21pc2MzLCBNYXJrZWQgbWlzYyBldmVudHMKK2V2ZW50OjBYMDk4MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQjAwOTAwMDA4OEU0MDIxMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDA5ODEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEIwMDkwMDAwODhFNDAyMTIgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwOTgyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhCMDA5MDAwMDg4RTQwMjEyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMDk4MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQjAwOTAwMDA4OEU0MDIxMiBtbWNyYTowWDAwMDAwMDAxCisKKyNHcm91cCAxNTMgcG1fbXJrX21pc2M0LCBNYXJrZWQgbWlzYyBldmVudHMKK2V2ZW50OjBYMDk5MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAxRTFFMDIxQSBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDA5OTEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMUUxRTAyMUEgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwOTkyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDFFMUUwMjFBIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMDk5MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAxRTFFMDIxQSBtbWNyYTowWDAwMDAwMDAxCisKKyNHcm91cCAxNTQgcG1fbXJrX3N0LCBNYXJrZWQgc3RvcmVzIGV2ZW50cworZXZlbnQ6MFgwOUEwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDA2MDYwNjAyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMDlBMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAwNjA2MDYwMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDA5QTIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMDYwNjA2MDIgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwOUEzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDA2MDYwNjAyIG1tY3JhOjBYMDAwMDAwMDEKKworI0dyb3VwIDE1NSBwbV9tcmtfcHRlZywgTWFya2VkIFBURUcKK2V2ZW50OjBYMDlCMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAxMDAwMDA0MDQyNDQwMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDA5QjEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMTAwMDAwNDA0MjQ0MDIgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwOUIyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDEwMDAwMDQwNDI0NDAyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMDlCMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAxMDAwMDA0MDQyNDQwMiBtbWNyYTowWDAwMDAwMDAxCisKKyNHcm91cCAxNTYgcG1fbXJrX3B0ZWcyLCBNYXJrZWQgUFRFRworZXZlbnQ6MFgwOUMwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDEwMDAwMDAyNDA0NjQ0IG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMDlDMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAxMDAwMDAwMjQwNDY0NCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDA5QzIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMTAwMDAwMDI0MDQ2NDQgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwOUMzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDEwMDAwMDAyNDA0NjQ0IG1tY3JhOjBYMDAwMDAwMDEKKworI0dyb3VwIDE1NyBwbV9tcmtfcHRlZzMsIE1hcmtlZCBQVEVHCitldmVudDowWDA5RDAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMTAwMDAwNDY0NjAyNDYgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwOUQxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDEwMDAwMDQ2NDYwMjQ2IG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMDlEMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAxMDAwMDA0NjQ2MDI0NiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDA5RDMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMTAwMDAwNDY0NjAyNDYgbW1jcmE6MFgwMDAwMDAwMQorCisjR3JvdXAgMTU4IHBtX21ya19wdGVnNCwgTWFya2VkIFBURUcKK2V2ZW50OjBYMDlFMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAxMDAwMDA0MjAyNDA1NCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDA5RTEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMTAwMDAwNDIwMjQwNTQgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwOUUyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDEwMDAwMDQyMDI0MDU0IG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMDlFMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAxMDAwMDA0MjAyNDA1NCBtbWNyYTowWDAwMDAwMDAxCisKKyNHcm91cCAxNTkgcG1fbXJrX3B0ZWc1LCBNYXJrZWQgUFRFRworZXZlbnQ6MFgwOUYwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDEwMDAwMDQ0MDI1NDQyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMDlGMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAxMDAwMDA0NDAyNTQ0MiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDA5RjIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMTAwMDAwNDQwMjU0NDIgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwOUYzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDEwMDAwMDQ0MDI1NDQyIG1tY3JhOjBYMDAwMDAwMDEKKworI0dyb3VwIDE2MCBwbV9tcmtfcHRlZzYsIE1hcmtlZCBQVEVHCitldmVudDowWDBBMDAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMTAwMDAwMUU0NDQyMDIgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwQTAxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDEwMDAwMDFFNDQ0MjAyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMEEwMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAxMDAwMDAxRTQ0NDIwMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDBBMDMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMTAwMDAwMUU0NDQyMDIgbW1jcmE6MFgwMDAwMDAwMQorCisjR3JvdXAgMTYxIHBtX21ya192bXgsIE1hcmtlZCBWTVgKK2V2ZW50OjBYMEExMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNzAwMDAwMDA4Qzg4QUUwMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDBBMTEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDcwMDAwMDAwOEM4OEFFMDIgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwQTEyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg3MDAwMDAwMDhDODhBRTAyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMEExMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNzAwMDAwMDA4Qzg4QUUwMiBtbWNyYTowWDAwMDAwMDAxCisKKyNHcm91cCAxNjIgcG1fbXJrX3ZteDIsIE1hcmtlZCBWTVgKK2V2ZW50OjBYMEEyMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNjA5MDAwMDA4NjhFRTAwMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDBBMjEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDYwOTAwMDAwODY4RUUwMDIgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwQTIyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg2MDkwMDAwMDg2OEVFMDAyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMEEyMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNjA5MDAwMDA4NjhFRTAwMiBtbWNyYTowWDAwMDAwMDAxCisKKyNHcm91cCAxNjMgcG1fbXJrX3ZteDMsIE1hcmtlZCBWTVgKK2V2ZW50OjBYMEEzMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNzAwMDAwMDA4QTgyMUUwMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDBBMzEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDcwMDAwMDAwOEE4MjFFMDIgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwQTMyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg3MDAwMDAwMDhBODIxRTAyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMEEzMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNzAwMDAwMDA4QTgyMUUwMiBtbWNyYTowWDAwMDAwMDAxCisKKyNHcm91cCAxNjQgcG1fbXJrX2ZwLCBNYXJrZWQgRlAgZXZlbnRzCitldmVudDowWDBBNDAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEQwMDAwMDAwODIzMEFBMDIgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwQTQxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhEMDAwMDAwMDgyMzBBQTAyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMEE0MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYRDAwMDAwMDA4MjMwQUEwMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDBBNDMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEQwMDAwMDAwODIzMEFBMDIgbW1jcmE6MFgwMDAwMDAwMQorCisjR3JvdXAgMTY1IHBtX21ya19kZXJhdF9yZWYsIE1hcmtlZCBERVJBVCByZWYKK2V2ZW50OjBYMEE1MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDA4MDAwMDA0NDQ0NDQwMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDBBNTEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwODAwMDAwNDQ0NDQ0MDIgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwQTUyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDgwMDAwMDQ0NDQ0NDAyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMEE1MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDA4MDAwMDA0NDQ0NDQwMiBtbWNyYTowWDAwMDAwMDAxCisKKyNHcm91cCAxNjYgcG1fbXJrX2RlcmF0X21pc3MsIE1hcmtlZCBERVJBVCBtaXNzCitldmVudDowWDBBNjAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwOTAwMDAwNDQ0NDQ0MDIgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwQTYxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDkwMDAwMDQ0NDQ0NDAyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMEE2MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDA5MDAwMDA0NDQ0NDQwMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDBBNjMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwOTAwMDAwNDQ0NDQ0MDIgbW1jcmE6MFgwMDAwMDAwMQorCisjR3JvdXAgMTY3IHBtX2RjYWNoZV9lZGdlLCBEIGNhY2hlIC0gZWRnZQorZXZlbnQ6MFgwQTcwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDBEMEUwQzA3IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEE3MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAwRDBFMEMwNyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBBNzIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMEQwRTBDMDcgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQTczIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDBEMEUwQzA3IG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDE2OCBwbV9sc3VfbG1xX2VkZ2UsIExTVSBMTVEgZXZlbnRzIC0gZWRnZQorZXZlbnQ6MFgwQTgwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg5ODAwMDAwMEFDMUQxREE0IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEE4MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYOTgwMDAwMDBBQzFEMURBNCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBBODIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDk4MDAwMDAwQUMxRDFEQTQgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQTgzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg5ODAwMDAwMEFDMUQxREE0IG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDE2OSBwbV9nY3RfZWRnZSwgR0NUIGV2ZW50cyAtIGVkZ2UKK2V2ZW50OjBYMEE5MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDA0MDAwMDAwOTA5QTdFOCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBBOTEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwNDAwMDAwMDkwOUE3RTggbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQTkyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MDQwMDAwMDA5MDlBN0U4IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEE5MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDA0MDAwMDAwOTA5QTdFOCBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxNzAgcG1fZnJlcV9lZGdlLCBGcmVxdWVuY3kgZXZlbnRzIC0gZWRnZQorZXZlbnQ6MFgwQUEwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDJCM0QzQzNDIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEFBMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAyQjNEM0MzQyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBBQTIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMkIzRDNDM0MgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQUEzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDJCM0QzQzNDIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDE3MSBwbV9kaXNwX3dhaXRfZWRnZSwgRGlzcGF0Y2ggc3RhbGxzIC0gZWRnZQorZXZlbnQ6MFgwQUIwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDU2MEQwNTBEIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEFCMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDA1NjBEMDUwRCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBBQjIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwNTYwRDA1MEQgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQUIzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDU2MEQwNTBEIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDE3MiBwbV9lZGdlMSwgRURHRSBldmVudCBncm91cAorZXZlbnQ6MFgwQUMwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDYzMDBEMEMxRjFFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEFDMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDA2MzAwRDBDMUYxRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBBQzIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwNjMwMEQwQzFGMUUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQUMzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDYzMDBEMEMxRjFFIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDE3MyBwbV9lZGdlMiwgRURHRSBldmVudCBncm91cAorZXZlbnQ6MFgwQUQwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MDAwMDAwMDgxODBBNUE0IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEFEMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMDAwMDA4MTgwQTVBNCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBBRDIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwMDAwMDAwODE4MEE1QTQgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQUQzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MDAwMDAwMDgxODBBNUE0IG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDE3NCBwbV9lZGdlMywgRURHRSBldmVudCBncm91cAorZXZlbnQ6MFgwQUUwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDkwMDAwMDBCRjRFQkVBIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEFFMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDA5MDAwMDAwQkY0RUJFQSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBBRTIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwOTAwMDAwMEJGNEVCRUEgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQUUzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDkwMDAwMDBCRjRFQkVBIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDE3NSBwbV9lZGdlNCwgRURHRSBldmVudCBncm91cAorZXZlbnQ6MFgwQUYwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MDAwMDAwMDg3ODZBOUE4IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEFGMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMDAwMDA4Nzg2QTlBOCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBBRjIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwMDAwMDAwODc4NkE5QTggbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQUYzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MDAwMDAwMDg3ODZBOUE4IG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDE3NiBwbV9lZGdlNSwgRURHRSBldmVudCBncm91cAorZXZlbnQ6MFgwQjAwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDkwMDAwMEZCMTdFREVDIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEIwMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDA5MDAwMDBGQjE3RURFQyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBCMDIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwOTAwMDAwRkIxN0VERUMgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQjAzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDkwMDAwMEZCMTdFREVDIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDE3NyBwbV9ub2VkZ2U1LCBFREdFIGV2ZW50IGdyb3VwCitldmVudDowWDBCMTAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwOTAwMDAwRkExNkVERUMgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQjExIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDkwMDAwMEZBMTZFREVDIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEIxMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDA5MDAwMDBGQTE2RURFQyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBCMTMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwOTAwMDAwRkExNkVERUMgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMTc4IHBtX2VkZ2U2LCBFREdFIGV2ZW50IGdyb3VwCitldmVudDowWDBCMjAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMkIwNTA1MEQgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQjIxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDJCMDUwNTBEIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEIyMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAyQjA1MDUwRCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBCMjMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMkIwNTA1MEQgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMTc5IHBtX25vZWRnZTYsIEVER0UgZXZlbnQgZ3JvdXAKK2V2ZW50OjBYMEIzMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAyQTA0MDQwQyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBCMzEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMkEwNDA0MEMgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQjMyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDJBMDQwNDBDIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEIzMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAyQTA0MDQwQyBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxODAgcG1fZWRnZTcsIEVER0UgZXZlbnQgZ3JvdXAKK2V2ZW50OjBYMEI0MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAwOTA5MUQxRCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBCNDEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMDkwOTFEMUQgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQjQyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDA5MDkxRDFEIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEI0MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAwOTA5MUQxRCBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxODEgcG1fbm9lZGdlNywgTk9FREdFIGV2ZW50IGdyb3VwCitldmVudDowWDBCNTAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMDgwODFDMUMgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQjUxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDA4MDgxQzFDIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEI1MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAwODA4MUMxQyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBCNTMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMDgwODFDMUMgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMTgyIHBtX2VkZ2U4LCBFREdFIGV2ZW50IGdyb3VwCitldmVudDowWDBCNjAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwOTAwMDAwQ0QxREVDMDcgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQjYxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDkwMDAwMENEMURFQzA3IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEI2MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDA5MDAwMDBDRDFERUMwNyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBCNjMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwOTAwMDAwQ0QxREVDMDcgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMTgzIHBtX25vZWRnZTgsIE5PRURHRSBldmVudCBncm91cAorZXZlbnQ6MFgwQjcwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDkwMDAwMENDMUNFRDA2IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEI3MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDA5MDAwMDBDQzFDRUQwNiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBCNzIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwOTAwMDAwQ0MxQ0VEMDYgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQjczIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDkwMDAwMENDMUNFRDA2IG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDE4NCBwbV9lZGdlOSwgRURHRSBldmVudCBncm91cAorZXZlbnQ6MFgwQjgwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg4MDAwMDAwMDg4MEQwQ0EyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEI4MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYODAwMDAwMDA4ODBEMENBMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBCODIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDgwMDAwMDAwODgwRDBDQTIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQjgzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg4MDAwMDAwMDg4MEQwQ0EyIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDE4NSBwbV9lZGdlMTAsIEVER0UgZXZlbnQgZ3JvdXAKK2V2ZW50OjBYMEI5MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzIwMDAwMDBBQzNEQUUwNSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBCOTEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMyMDAwMDAwQUMzREFFMDUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQjkyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMjAwMDAwMEFDM0RBRTA1IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEI5MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzIwMDAwMDBBQzNEQUUwNSBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxODYgcG1fbm9lZGdlMTAsIE5PRURHRSBldmVudCBncm91cAorZXZlbnQ6MFgwQkEwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMjAwMDAwMEFDM0NBRTA0IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEJBMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMzIwMDAwMDBBQzNDQUUwNCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBCQTIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDMyMDAwMDAwQUMzQ0FFMDQgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQkEzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgzMjAwMDAwMEFDM0NBRTA0IG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDE4NyBwbV9ocG0xLCBIUE0gZ3JvdXAKK2V2ZW50OjBYMEJCMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQzAwMDAwMDAzMDMwMzQxRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBCQjEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEMwMDAwMDAwMzAzMDM0MUUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQkIyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhDMDAwMDAwMDMwMzAzNDFFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEJCMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQzAwMDAwMDAzMDMwMzQxRSBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxODggcG1faHBtMiwgSFBNIGdyb3VwCitldmVudDowWDBCQzAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDhDMDAwMDAwMDIzMjMwMUUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQkMxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg4QzAwMDAwMDAyMzIzMDFFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEJDMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYOEMwMDAwMDAwMjMyMzAxRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBCQzMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDhDMDAwMDAwMDIzMjMwMUUgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMTg5IHBtX2hwbTMsIEhQTSBncm91cAorZXZlbnQ6MFgwQkQwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg4MDAwMDAwMDFFODBGMDAyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEJEMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYODAwMDAwMDAxRTgwRjAwMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBCRDIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDgwMDAwMDAwMUU4MEYwMDIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQkQzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg4MDAwMDAwMDFFODBGMDAyIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDE5MCBwbV9ocG00LCBIUE0gZ3JvdXAKK2V2ZW50OjBYMEJFMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYODAwMDAwMDAwMjEyQTIzNCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBCRTEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDgwMDAwMDAwMDIxMkEyMzQgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQkUyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg4MDAwMDAwMDAyMTJBMjM0IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEJFMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYODAwMDAwMDAwMjEyQTIzNCBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxOTEgcG1faHBtNSwgSFBNIGdyb3VwCitldmVudDowWDBCRjAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEQwMDAwMDAwMzAxRTE2MTYgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQkYxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhEMDAwMDAwMDMwMUUxNjE2IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEJGMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYRDAwMDAwMDAzMDFFMTYxNiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBCRjMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEQwMDAwMDAwMzAxRTE2MTYgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMTkyIHBtX2hwbTYsIEhQTSBncm91cAorZXZlbnQ6MFgwQzAwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDU4NTg1QTVBIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEMwMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDA1ODU4NUE1QSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBDMDIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwNTg1ODVBNUEgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQzAzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDU4NTg1QTVBIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDE5MyBwbV9ocG03LCBIUE0gZ3JvdXAKK2V2ZW50OjBYMEMxMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDA1QTVBNTgxRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBDMTEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwNUE1QTU4MUUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQzEyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDVBNUE1ODFFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEMxMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDA1QTVBNTgxRSBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxOTQgcG1faHBtOCwgSFBNIGdyb3VwCitldmVudDowWDBDMjAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWENDMDAwMDAwMzAzMDMwRjAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQzIxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhDQzAwMDAwMDMwMzAzMEYwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEMyMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQ0MwMDAwMDAzMDMwMzBGMCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBDMjMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWENDMDAwMDAwMzAzMDMwRjAgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMTk1IHBtX2hwbTksIEhQTSBncm91cAorZXZlbnQ6MFgwQzMwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg4MDAwMDAwMDgwMUUzNEE4IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEMzMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYODAwMDAwMDA4MDFFMzRBOCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBDMzIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDgwMDAwMDAwODAxRTM0QTggbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQzMzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg4MDAwMDAwMDgwMUUzNEE4IG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDE5NiBwbV9ocG0xMCwgSFBNIGdyb3VwCitldmVudDowWDBDNDAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDUwNDBBMDAwMDIzMjU0NTYgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQzQxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg1MDQwQTAwMDAyMzI1NDU2IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEM0MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNTA0MEEwMDAwMjMyNTQ1NiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBDNDMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDUwNDBBMDAwMDIzMjU0NTYgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMTk3IHBtX21ya19kZXJhdF9yZWYyLCBNYXJrZWQgREVSQVQgcmVmCitldmVudDowWDBDNTAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwODAwMDAwNDQ0NDAyNDQgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwQzUxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDgwMDAwMDQ0NDQwMjQ0IG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMEM1MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDA4MDAwMDA0NDQ0MDI0NCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDBDNTMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwODAwMDAwNDQ0NDAyNDQgbW1jcmE6MFgwMDAwMDAwMQorCisjR3JvdXAgMTk4IHBtX21ya19kZXJhdF9taXNzMiwgTWFya2VkIERFUkFUIG1pc3MKK2V2ZW50OjBYMEM2MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDA5MDAwMDA0NDQ0MDI0NCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDBDNjEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwOTAwMDAwNDQ0NDAyNDQgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwQzYyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDkwMDAwMDQ0NDQwMjQ0IG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMEM2MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDA5MDAwMDA0NDQ0MDI0NCBtbWNyYTowWDAwMDAwMDAxCmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9ldmVudHMvcHBjNjQvcG93ZXI2L2V2ZW50cyBiL29wcm9maWxlLTAuOS43L2V2ZW50cy9wcGM2NC9wb3dlcjYvZXZlbnRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxZTJjNzYKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9ldmVudHMvcHBjNjQvcG93ZXI2L2V2ZW50cwpAQCAtMCwwICsxLDEyMTEgQEAKKyNQUEM2NCBQT1dFUjYgZXZlbnRzCisjCisjIENvcHlyaWdodCBPUHJvZmlsZSBhdXRob3JzCisjIENvcHlyaWdodCAoYykgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcywgMjAwNy4KKyMgQ29udHJpYnV0ZWQgYnkgRGF2ZSBOb211cmEgPGRjbmx0Y0B1cy5pYm0uY29tPi4KKyMKKyMKKyMgIFdpdGhpbiBlYWNoIGdyb3VwIHRoZSBldmVudCBuYW1lcyBtdXN0IGJlIHVuaXF1ZS4gIEVhY2ggZXZlbnQgaW4gYSBncm91cCBpcworIyAgYXNzaWduZWQgdG8gYSB1bmlxdWUgY291bnRlci4gIFRoZSBncm91cHMgYXJlIGZyb20gdGhlIGdyb3VwcyBkZWZpbmVkIGluIHRoZQorIyAgUGVyZm9ybWFuY2UgTW9uaXRvciBVbml0IHVzZXIgZ3VpZGUgZm9yIHRoaXMgcHJvY2Vzc29yLgorIworIyAgT25seSBldmVudHMgd2l0aGluIHRoZSBzYW1lIGdyb3VwIGNhbiBiZSBzZWxlY3RlZCBzaW11bHRhbmVvdXNseS4KKyMgIEVhY2ggZXZlbnQgaXMgZ2l2ZW4gYSB1bmlxdWUgZXZlbnQgbnVtYmVyLiAgVGhlIGV2ZW50IG51bWJlciBpcyB1c2VkIGJ5IHRoZQorIyAgT1Byb2ZpbGUgY29kZSB0byByZXNvbHZlIGV2ZW50IG5hbWVzIGZvciB0aGUgcG9zdC1wcm9jZXNzaW5nLiAgVGhpcyBpcyBkb25lCisjICB0byBwcmVzZXJ2ZSBjb21wYXRpYmlsaXR5IHdpdGggdGhlIHJlc3Qgb2YgdGhlIE9Qcm9maWxlIGNvZGUuICBUaGUgZXZlbnQKKyMgIG51bWJlcnMgYXJlIGZvcm1hdHRlZCBhcyBmb2xsb3dzOiA8Z3JvdXBfbnVtPmNvbmNhdCg8Y291bnRlciBmb3IgdGhlIGV2ZW50PikuCisKKyNHcm91cCBEZWZhdWx0CitldmVudDowWDAwMSBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOkNZQ0xFUyA6IFByb2Nlc3NvciBDeWNsZXMKKworI0dyb3VwIDAgd2l0aCByYW5kb20gc2FtcGxpbmcKK2V2ZW50OjBYMDAyIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6Q1lDTEVTX1JORF9TTVBMIDogUHJvY2Vzc29yIEN5Y2xlcyB3aXRoIHJhbmRvbSBzYW1wbGluZworCisKKyNHcm91cCAxIHBtX3V0aWxpemF0aW9uLCBDUEkgYW5kIHV0aWxpemF0aW9uIGRhdGEKK2V2ZW50OjBYMDAxMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQMSA6IChHcm91cCAxIHBtX3V0aWxpemF0aW9uKSBSdW4gY3ljbGVzCitldmVudDowWDAwMTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMSA6IChHcm91cCAxIHBtX3V0aWxpemF0aW9uKSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDAwMTIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lOU1RfRElTUF9HUlAxIDogKEdyb3VwIDEgcG1fdXRpbGl6YXRpb24pIEluc3RydWN0aW9ucyBkaXNwYXRjaGVkCitldmVudDowWDAwMTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQMSA6IChHcm91cCAxIHBtX3V0aWxpemF0aW9uKSBQcm9jZXNzb3IgY3ljbGVzCisKKyNHcm91cCAyIHBtX3V0aWxpemF0aW9uX2NhcGFjaXR5LCBDUFUgdXRpbGl6YXRpb24gYW5kIGNhcGFjaXR5CitldmVudDowWDAwMjAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1RIUkRfT05FX1JVTl9DWUNfR1JQMiA6IChHcm91cCAyIHBtX3V0aWxpemF0aW9uX2NhcGFjaXR5KSBPbmUgb2YgdGhlIHRocmVhZHMgaW4gcnVuIGN5Y2xlcworZXZlbnQ6MFgwMDIxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDIgOiAoR3JvdXAgMiBwbV91dGlsaXphdGlvbl9jYXBhY2l0eSkgUHJvY2Vzc29yIGN5Y2xlcworZXZlbnQ6MFgwMDIyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9USFJEX0NPTkNfUlVOX0lOU1RfR1JQMiA6IChHcm91cCAyIHBtX3V0aWxpemF0aW9uX2NhcGFjaXR5KSBDb25jdXJyZW50IHJ1biBpbnN0cnVjdGlvbnMKK2V2ZW50OjBYMDAyMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX1BVUlJfR1JQMiA6IChHcm91cCAyIHBtX3V0aWxpemF0aW9uX2NhcGFjaXR5KSBSdW4gUFVSUiBFdmVudAorCisjR3JvdXAgMyBwbV9icmFuY2gsIEJyYW5jaCBvcGVyYXRpb25zCitldmVudDowWDAwMzAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0JSX1BSRURfQ1JfR1JQMyA6IChHcm91cCAzIHBtX2JyYW5jaCkgQSBjb25kaXRpb25hbCBicmFuY2ggd2FzIHByZWRpY3RlZCwgQ1IgcHJlZGljdGlvbgorZXZlbnQ6MFgwMDMxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9CUl9NUFJFRF9DUl9HUlAzIDogKEdyb3VwIDMgcG1fYnJhbmNoKSBCcmFuY2ggbWlzcHJlZGljdGlvbnMgZHVlIHRvIENSIGJpdCBzZXR0aW5nCitldmVudDowWDAwMzIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0JSX1BSRURfR1JQMyA6IChHcm91cCAzIHBtX2JyYW5jaCkgQSBjb25kaXRpb25hbCBicmFuY2ggd2FzIHByZWRpY3RlZAorZXZlbnQ6MFgwMDMzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9CUl9NUFJFRF9DT1VOVF9HUlAzIDogKEdyb3VwIDMgcG1fYnJhbmNoKSBCcmFuY2ggbWlzcHJlZGljdGlvbiBkdWUgdG8gY291bnQgcHJlZGljdGlvbgorCisjR3JvdXAgNCBwbV9icmFuY2gyLCBCcmFuY2ggb3BlcmF0aW9ucworZXZlbnQ6MFgwMDQwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9CUl9QUkVEX0NDQUNIRV9HUlA0IDogKEdyb3VwIDQgcG1fYnJhbmNoMikgQnJhbmNoIGNvdW50IGNhY2hlIHByZWRpY3Rpb24KK2V2ZW50OjBYMDA0MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fQlJfUFJFRF9MU1RBQ0tfR1JQNCA6IChHcm91cCA0IHBtX2JyYW5jaDIpIEEgY29uZGl0aW9uYWwgYnJhbmNoIHdhcyBwcmVkaWN0ZWQsIGxpbmsgc3RhY2sKK2V2ZW50OjBYMDA0MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fQlJfTVBSRURfQ0NBQ0hFX0dSUDQgOiAoR3JvdXAgNCBwbV9icmFuY2gyKSBCcmFuY2ggbWlzcHJlZGljdGlvbiBkdWUgdG8gY291bnQgY2FjaGUgcHJlZGljdGlvbgorZXZlbnQ6MFgwMDQzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9CUl9NUFJFRF9UQV9HUlA0IDogKEdyb3VwIDQgcG1fYnJhbmNoMikgQnJhbmNoIG1pc3ByZWRpY3Rpb25zIGR1ZSB0byB0YXJnZXQgYWRkcmVzcworCisjR3JvdXAgNSBwbV9icmFuY2gzLCBCcmFuY2ggb3BlcmF0aW9ucworZXZlbnQ6MFgwMDUwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9CUl9QUkVEX0dSUDUgOiAoR3JvdXAgNSBwbV9icmFuY2gzKSBBIGNvbmRpdGlvbmFsIGJyYW5jaCB3YXMgcHJlZGljdGVkCitldmVudDowWDAwNTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0JSX1BSRURfQ1JfR1JQNSA6IChHcm91cCA1IHBtX2JyYW5jaDMpIEEgY29uZGl0aW9uYWwgYnJhbmNoIHdhcyBwcmVkaWN0ZWQsIENSIHByZWRpY3Rpb24KK2V2ZW50OjBYMDA1MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fQlJfUFJFRF9DQ0FDSEVfR1JQNSA6IChHcm91cCA1IHBtX2JyYW5jaDMpIEJyYW5jaCBjb3VudCBjYWNoZSBwcmVkaWN0aW9uCitldmVudDowWDAwNTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0JSX1BSRURfTFNUQUNLX0dSUDUgOiAoR3JvdXAgNSBwbV9icmFuY2gzKSBBIGNvbmRpdGlvbmFsIGJyYW5jaCB3YXMgcHJlZGljdGVkLCBsaW5rIHN0YWNrCisKKyNHcm91cCA2IHBtX2JyYW5jaDQsIEJyYW5jaCBvcGVyYXRpb25zCitldmVudDowWDAwNjAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0JSX01QUkVEX0NSX0dSUDYgOiAoR3JvdXAgNiBwbV9icmFuY2g0KSBCcmFuY2ggbWlzcHJlZGljdGlvbnMgZHVlIHRvIENSIGJpdCBzZXR0aW5nCitldmVudDowWDAwNjEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0JSX01QUkVEX0NPVU5UX0dSUDYgOiAoR3JvdXAgNiBwbV9icmFuY2g0KSBCcmFuY2ggbWlzcHJlZGljdGlvbiBkdWUgdG8gY291bnQgcHJlZGljdGlvbgorZXZlbnQ6MFgwMDYyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9CUl9NUFJFRF9UQV9HUlA2IDogKEdyb3VwIDYgcG1fYnJhbmNoNCkgQnJhbmNoIG1pc3ByZWRpY3Rpb25zIGR1ZSB0byB0YXJnZXQgYWRkcmVzcworZXZlbnQ6MFgwMDYzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9CUl9NUFJFRF9DQ0FDSEVfR1JQNiA6IChHcm91cCA2IHBtX2JyYW5jaDQpIEJyYW5jaCBtaXNwcmVkaWN0aW9uIGR1ZSB0byBjb3VudCBjYWNoZSBwcmVkaWN0aW9uCisKKyNHcm91cCA3IHBtX2JyYW5jaDUsIEJyYW5jaCBvcGVyYXRpb25zCitldmVudDowWDAwNzAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0JSX1BSRURfR1JQNyA6IChHcm91cCA3IHBtX2JyYW5jaDUpIEEgY29uZGl0aW9uYWwgYnJhbmNoIHdhcyBwcmVkaWN0ZWQKK2V2ZW50OjBYMDA3MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fQlJfVEFLRU5fR1JQNyA6IChHcm91cCA3IHBtX2JyYW5jaDUpIEJyYW5jaGVzIHRha2VuCitldmVudDowWDAwNzIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0JSVV9GSU5fR1JQNyA6IChHcm91cCA3IHBtX2JyYW5jaDUpIEJSVSBwcm9kdWNlZCBhIHJlc3VsdAorZXZlbnQ6MFgwMDczIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9CUl9NUFJFRF9HUlA3IDogKEdyb3VwIDcgcG1fYnJhbmNoNSkgQnJhbmNoZXMgaW5jb3JyZWN0bHkgcHJlZGljdGVkCisKKyNHcm91cCA4IHBtX2Rzb3VyY2UsIERhdGEgc291cmNlCitldmVudDowWDAwODAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RBVEFfRlJPTV9MMl9HUlA4IDogKEdyb3VwIDggcG1fZHNvdXJjZSkgRGF0YSBsb2FkZWQgZnJvbSBMMgorZXZlbnQ6MFgwMDgxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQVRBX0ZST01fTDIxX0dSUDggOiAoR3JvdXAgOCBwbV9kc291cmNlKSBEYXRhIGxvYWRlZCBmcm9tIHByaXZhdGUgTDIgb3RoZXIgY29yZQorZXZlbnQ6MFgwMDgyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQVRBX0ZST01fTDJNSVNTX0dSUDggOiAoR3JvdXAgOCBwbV9kc291cmNlKSBEYXRhIGxvYWRlZCBtaXNzZWQgTDIKK2V2ZW50OjBYMDA4MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fREFUQV9GUk9NX0wzTUlTU19HUlA4IDogKEdyb3VwIDggcG1fZHNvdXJjZSkgRGF0YSBsb2FkZWQgZnJvbSBwcml2YXRlIEwzIG1pc3MKKworI0dyb3VwIDkgcG1fZHNvdXJjZTIsIERhdGEgc291cmNlcworZXZlbnQ6MFgwMDkwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQVRBX0ZST01fTDM1X01PRF9HUlA5IDogKEdyb3VwIDkgcG1fZHNvdXJjZTIpIERhdGEgbG9hZGVkIGZyb20gTDMuNSBtb2RpZmllZAorZXZlbnQ6MFgwMDkxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQVRBX0ZST01fTDM1X1NIUl9HUlA5IDogKEdyb3VwIDkgcG1fZHNvdXJjZTIpIERhdGEgbG9hZGVkIGZyb20gTDMuNSBzaGFyZWQKK2V2ZW50OjBYMDA5MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fREFUQV9GUk9NX0wzX0dSUDkgOiAoR3JvdXAgOSBwbV9kc291cmNlMikgRGF0YSBsb2FkZWQgZnJvbSBMMworZXZlbnQ6MFgwMDkzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQVRBX0ZST01fTDNNSVNTX0dSUDkgOiAoR3JvdXAgOSBwbV9kc291cmNlMikgRGF0YSBsb2FkZWQgZnJvbSBwcml2YXRlIEwzIG1pc3MKKworI0dyb3VwIDEwIHBtX2Rzb3VyY2UzLCBEYXRhIHNvdXJjZXMKK2V2ZW50OjBYMDBBMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fREFUQV9GUk9NX0wzNV9NT0RfR1JQMTAgOiAoR3JvdXAgMTAgcG1fZHNvdXJjZTMpIERhdGEgbG9hZGVkIGZyb20gTDMuNSBtb2RpZmllZAorZXZlbnQ6MFgwMEExIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQVRBX0ZST01fTDM1X1NIUl9HUlAxMCA6IChHcm91cCAxMCBwbV9kc291cmNlMykgRGF0YSBsb2FkZWQgZnJvbSBMMy41IHNoYXJlZAorZXZlbnQ6MFgwMEEyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQVRBX0ZST01fTDI1X01PRF9HUlAxMCA6IChHcm91cCAxMCBwbV9kc291cmNlMykgRGF0YSBsb2FkZWQgZnJvbSBMMi41IG1vZGlmaWVkCitldmVudDowWDAwQTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RBVEFfRlJPTV9MMjVfU0hSX0dSUDEwIDogKEdyb3VwIDEwIHBtX2Rzb3VyY2UzKSBEYXRhIGxvYWRlZCBmcm9tIEwyLjUgc2hhcmVkCisKKyNHcm91cCAxMSBwbV9kc291cmNlNCwgRGF0YSBzb3VyY2VzCitldmVudDowWDAwQjAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RBVEFfRlJPTV9STDJMM19NT0RfR1JQMTEgOiAoR3JvdXAgMTEgcG1fZHNvdXJjZTQpIERhdGEgbG9hZGVkIGZyb20gcmVtb3RlIEwyIG9yIEwzIG1vZGlmaWVkCitldmVudDowWDAwQjEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RBVEFfRlJPTV9STDJMM19TSFJfR1JQMTEgOiAoR3JvdXAgMTEgcG1fZHNvdXJjZTQpIERhdGEgbG9hZGVkIGZyb20gcmVtb3RlIEwyIG9yIEwzIHNoYXJlZAorZXZlbnQ6MFgwMEIyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQVRBX0ZST01fREwyTDNfU0hSX0dSUDExIDogKEdyb3VwIDExIHBtX2Rzb3VyY2U0KSBEYXRhIGxvYWRlZCBmcm9tIGRpc3RhbnQgTDIgb3IgTDMgc2hhcmVkCitldmVudDowWDAwQjMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RBVEFfRlJPTV9ETDJMM19NT0RfR1JQMTEgOiAoR3JvdXAgMTEgcG1fZHNvdXJjZTQpIERhdGEgbG9hZGVkIGZyb20gZGlzdGFudCBMMiBvciBMMyBtb2RpZmllZAorCisjR3JvdXAgMTIgcG1fZHNvdXJjZTUsIERhdGEgc291cmNlcworZXZlbnQ6MFgwMEMwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQVRBX0ZST01fTUVNX0RQX0dSUDEyIDogKEdyb3VwIDEyIHBtX2Rzb3VyY2U1KSBEYXRhIGxvYWRlZCBmcm9tIGRvdWJsZSBwdW1wIG1lbW9yeQorZXZlbnQ6MFgwMEMxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQVRBX0ZST01fRE1FTV9HUlAxMiA6IChHcm91cCAxMiBwbV9kc291cmNlNSkgRGF0YSBsb2FkZWQgZnJvbSBkaXN0YW50IG1lbW9yeQorZXZlbnQ6MFgwMEMyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQVRBX0ZST01fUk1FTV9HUlAxMiA6IChHcm91cCAxMiBwbV9kc291cmNlNSkgRGF0YSBsb2FkZWQgZnJvbSByZW1vdGUgbWVtb3J5CitldmVudDowWDAwQzMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RBVEFfRlJPTV9MTUVNX0dSUDEyIDogKEdyb3VwIDEyIHBtX2Rzb3VyY2U1KSBEYXRhIGxvYWRlZCBmcm9tIGxvY2FsIG1lbW9yeQorCisjR3JvdXAgMTMgcG1fZGxhdGVuY2llcywgRGF0YSBsYXRlbmNpZXMKK2V2ZW50OjBYMDBEMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTERfTUlTU19MMV9DWUNfR1JQMTMgOiAoR3JvdXAgMTMgcG1fZGxhdGVuY2llcykgTDEgZGF0YSBsb2FkIG1pc3MgY3ljbGVzCitldmVudDowWDAwRDEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RBVEFfRlJPTV9STDJMM19TSFJfQ1lDX0dSUDEzIDogKEdyb3VwIDEzIHBtX2RsYXRlbmNpZXMpIExvYWQgbGF0ZW5jeSBmcm9tIHJlbW90ZSBMMiBvciBMMyBzaGFyZWQKK2V2ZW50OjBYMDBEMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlAxMyA6IChHcm91cCAxMyBwbV9kbGF0ZW5jaWVzKSBQcm9jZXNzb3IgY3ljbGVzCitldmVudDowWDAwRDMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RBVEFfRlJPTV9MMjVfTU9EX0NZQ19HUlAxMyA6IChHcm91cCAxMyBwbV9kbGF0ZW5jaWVzKSBMb2FkIGxhdGVuY3kgZnJvbSBMMi41IG1vZGlmaWVkCisKKyNHcm91cCAxNCBwbV9kbGF0ZW5jaWVzMiwgRGF0YSBsYXRlbmNpZXMKK2V2ZW50OjBYMDBFMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAxNCA6IChHcm91cCAxNCBwbV9kbGF0ZW5jaWVzMikgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgwMEUxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQVRBX0ZST01fTE1FTV9DWUNfR1JQMTQgOiAoR3JvdXAgMTQgcG1fZGxhdGVuY2llczIpIExvYWQgbGF0ZW5jeSBmcm9tIGxvY2FsIG1lbW9yeQorZXZlbnQ6MFgwMEUyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDE0IDogKEdyb3VwIDE0IHBtX2RsYXRlbmNpZXMyKSBQcm9jZXNzb3IgY3ljbGVzCitldmVudDowWDAwRTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RBVEFfRlJPTV9ETDJMM19NT0RfQ1lDX0dSUDE0IDogKEdyb3VwIDE0IHBtX2RsYXRlbmNpZXMyKSBMb2FkIGxhdGVuY3kgZnJvbSBkaXN0YW50IEwyIG9yIEwzIG1vZGlmaWVkCisKKyNHcm91cCAxNSBwbV9kbGF0ZW5jaWVzMywgRGF0YSBsYXRlbmNpZXMKK2V2ZW50OjBYMDBGMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAxNSA6IChHcm91cCAxNSBwbV9kbGF0ZW5jaWVzMykgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgwMEYxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQVRBX0ZST01fRE1FTV9DWUNfR1JQMTUgOiAoR3JvdXAgMTUgcG1fZGxhdGVuY2llczMpIExvYWQgbGF0ZW5jeSBmcm9tIGRpc3RhbnQgbWVtb3J5CitldmVudDowWDAwRjIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RBVEFfRlJPTV9STUVNX0dSUDE1IDogKEdyb3VwIDE1IHBtX2RsYXRlbmNpZXMzKSBEYXRhIGxvYWRlZCBmcm9tIHJlbW90ZSBtZW1vcnkKK2V2ZW50OjBYMDBGMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fREFUQV9GUk9NX1JNRU1fQ1lDX0dSUDE1IDogKEdyb3VwIDE1IHBtX2RsYXRlbmNpZXMzKSBMb2FkIGxhdGVuY3kgZnJvbSByZW1vdGUgbWVtb3J5CisKKyNHcm91cCAxNiBwbV9kbGF0ZW5jaWVzNCwgRGF0YSBsYXRlbmNpZXMKK2V2ZW50OjBYMDEwMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fREFUQV9GUk9NX0wzNV9NT0RfR1JQMTYgOiAoR3JvdXAgMTYgcG1fZGxhdGVuY2llczQpIERhdGEgbG9hZGVkIGZyb20gTDMuNSBtb2RpZmllZAorZXZlbnQ6MFgwMTAxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQVRBX0ZST01fREwyTDNfU0hSX0NZQ19HUlAxNiA6IChHcm91cCAxNiBwbV9kbGF0ZW5jaWVzNCkgTG9hZCBsYXRlbmN5IGZyb20gZGlzdGFudCBMMiBvciBMMyBzaGFyZWQKK2V2ZW50OjBYMDEwMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fREFUQV9GUk9NX0RMMkwzX1NIUl9HUlAxNiA6IChHcm91cCAxNiBwbV9kbGF0ZW5jaWVzNCkgRGF0YSBsb2FkZWQgZnJvbSBkaXN0YW50IEwyIG9yIEwzIHNoYXJlZAorZXZlbnQ6MFgwMTAzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQVRBX0ZST01fTDM1X01PRF9DWUNfR1JQMTYgOiAoR3JvdXAgMTYgcG1fZGxhdGVuY2llczQpIExvYWQgbGF0ZW5jeSBmcm9tIEwzLjUgbW9kaWZpZWQKKworI0dyb3VwIDE3IHBtX2RsYXRlbmNpZXM1LCBEYXRhIGxhdGVuY2llcworZXZlbnQ6MFgwMTEwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQVRBX0ZST01fUkwyTDNfTU9EX0dSUDE3IDogKEdyb3VwIDE3IHBtX2RsYXRlbmNpZXM1KSBEYXRhIGxvYWRlZCBmcm9tIHJlbW90ZSBMMiBvciBMMyBtb2RpZmllZAorZXZlbnQ6MFgwMTExIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQVRBX0ZST01fTDNfQ1lDX0dSUDE3IDogKEdyb3VwIDE3IHBtX2RsYXRlbmNpZXM1KSBMb2FkIGxhdGVuY3kgZnJvbSBMMworZXZlbnQ6MFgwMTEyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQVRBX0ZST01fTDNfR1JQMTcgOiAoR3JvdXAgMTcgcG1fZGxhdGVuY2llczUpIERhdGEgbG9hZGVkIGZyb20gTDMKK2V2ZW50OjBYMDExMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fREFUQV9GUk9NX1JMMkwzX01PRF9DWUNfR1JQMTcgOiAoR3JvdXAgMTcgcG1fZGxhdGVuY2llczUpIExvYWQgbGF0ZW5jeSBmcm9tIHJlbW90ZSBMMiBvciBMMyBtb2RpZmllZAorCisjR3JvdXAgMTggcG1fZGxhdGVuY2llczYsIERhdGEgbGF0ZW5jaWVzCitldmVudDowWDAxMjAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RBVEFfRlJPTV9NRU1fRFBfR1JQMTggOiAoR3JvdXAgMTggcG1fZGxhdGVuY2llczYpIERhdGEgbG9hZGVkIGZyb20gZG91YmxlIHB1bXAgbWVtb3J5CitldmVudDowWDAxMjEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RBVEFfRlJPTV9MMjVfU0hSX0NZQ19HUlAxOCA6IChHcm91cCAxOCBwbV9kbGF0ZW5jaWVzNikgTG9hZCBsYXRlbmN5IGZyb20gTDIuNSBzaGFyZWQKK2V2ZW50OjBYMDEyMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fREFUQV9GUk9NX0wyNV9NT0RfR1JQMTggOiAoR3JvdXAgMTggcG1fZGxhdGVuY2llczYpIERhdGEgbG9hZGVkIGZyb20gTDIuNSBtb2RpZmllZAorZXZlbnQ6MFgwMTIzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQVRBX0ZST01fTUVNX0RQX0NZQ19HUlAxOCA6IChHcm91cCAxOCBwbV9kbGF0ZW5jaWVzNikgTG9hZCBsYXRlbmN5IGZyb20gZG91YmxlIHB1bXAgbWVtb3J5CisKKyNHcm91cCAxOSBwbV9kbGF0ZW5jaWVzNywgRGF0YSBsYXRlbmNpZXMKK2V2ZW50OjBYMDEzMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fREFUQV9GUk9NX0wyX0dSUDE5IDogKEdyb3VwIDE5IHBtX2RsYXRlbmNpZXM3KSBEYXRhIGxvYWRlZCBmcm9tIEwyCitldmVudDowWDAxMzEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RBVEFfRlJPTV9MMl9DWUNfR1JQMTkgOiAoR3JvdXAgMTkgcG1fZGxhdGVuY2llczcpIExvYWQgbGF0ZW5jeSBmcm9tIEwyCitldmVudDowWDAxMzIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lOU1RfRElTUF9HUlAxOSA6IChHcm91cCAxOSBwbV9kbGF0ZW5jaWVzNykgSW5zdHJ1Y3Rpb25zIGRpc3BhdGNoZWQKK2V2ZW50OjBYMDEzMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDFfRENBQ0hFX1JFTE9BRF9WQUxJRF9HUlAxOSA6IChHcm91cCAxOSBwbV9kbGF0ZW5jaWVzNykgTDEgcmVsb2FkIGRhdGEgc291cmNlIHZhbGlkCisKKyNHcm91cCAyMCBwbV9kbGF0ZW5jaWVzOCwgRGF0YSBsYXRlbmNpZXMKK2V2ZW50OjBYMDE0MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRkxVU0hfR1JQMjAgOiAoR3JvdXAgMjAgcG1fZGxhdGVuY2llczgpIEZsdXNoZXMKK2V2ZW50OjBYMDE0MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fREFUQV9GUk9NX0wyMV9HUlAyMCA6IChHcm91cCAyMCBwbV9kbGF0ZW5jaWVzOCkgRGF0YSBsb2FkZWQgZnJvbSBwcml2YXRlIEwyIG90aGVyIGNvcmUKK2V2ZW50OjBYMDE0MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlAyMCA6IChHcm91cCAyMCBwbV9kbGF0ZW5jaWVzOCkgUHJvY2Vzc29yIGN5Y2xlcworZXZlbnQ6MFgwMTQzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQVRBX0ZST01fTDIxX0NZQ19HUlAyMCA6IChHcm91cCAyMCBwbV9kbGF0ZW5jaWVzOCkgTG9hZCBsYXRlbmN5IGZyb20gcHJpdmF0ZSBMMiBvdGhlciBjb3JlCisKKyNHcm91cCAyMSBwbV9kbGF0ZW5jaWVzOSwgRGF0YSBsYXRlbmNpZXMKK2V2ZW50OjBYMDE1MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fMVBMVVNfUFBDX0RJU1BfR1JQMjEgOiAoR3JvdXAgMjEgcG1fZGxhdGVuY2llczkpIEN5Y2xlcyBhdCBsZWFzdCBvbmUgaW5zdHJ1Y3Rpb24gZGlzcGF0Y2hlZAorZXZlbnQ6MFgwMTUxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQVRBX0ZST01fTE1FTV9DWUNfR1JQMjEgOiAoR3JvdXAgMjEgcG1fZGxhdGVuY2llczkpIExvYWQgbGF0ZW5jeSBmcm9tIGxvY2FsIG1lbW9yeQorZXZlbnQ6MFgwMTUyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JTlNUX0RJU1BfR1JQMjEgOiAoR3JvdXAgMjEgcG1fZGxhdGVuY2llczkpIEluc3RydWN0aW9ucyBkaXNwYXRjaGVkCitldmVudDowWDAxNTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RBVEFfRlJPTV9MTUVNX0dSUDIxIDogKEdyb3VwIDIxIHBtX2RsYXRlbmNpZXM5KSBEYXRhIGxvYWRlZCBmcm9tIGxvY2FsIG1lbW9yeQorCisjR3JvdXAgMjIgcG1fZGxhdGVuY2llczEwLCBEYXRhIGxhdGVuY2llcworZXZlbnQ6MFgwMTYwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQVRBX0ZST01fTDM1X01PRF9HUlAyMiA6IChHcm91cCAyMiBwbV9kbGF0ZW5jaWVzMTApIERhdGEgbG9hZGVkIGZyb20gTDMuNSBtb2RpZmllZAorZXZlbnQ6MFgwMTYxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQVRBX0ZST01fTDM1X1NIUl9DWUNfR1JQMjIgOiAoR3JvdXAgMjIgcG1fZGxhdGVuY2llczEwKSBMb2FkIGxhdGVuY3kgZnJvbSBMMy41IHNoYXJlZAorZXZlbnQ6MFgwMTYyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDIyIDogKEdyb3VwIDIyIHBtX2RsYXRlbmNpZXMxMCkgUHJvY2Vzc29yIGN5Y2xlcworZXZlbnQ6MFgwMTYzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQVRBX0ZST01fTDM1X01PRF9DWUNfR1JQMjIgOiAoR3JvdXAgMjIgcG1fZGxhdGVuY2llczEwKSBMb2FkIGxhdGVuY3kgZnJvbSBMMy41IG1vZGlmaWVkCisKKyNHcm91cCAyMyBwbV9pc291cmNlLCBJbnN0cnVjdGlvbiBzb3VyY2VzCitldmVudDowWDAxNzAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lOU1RfRlJPTV9MMl9HUlAyMyA6IChHcm91cCAyMyBwbV9pc291cmNlKSBJbnN0cnVjdGlvbnMgZmV0Y2hlZCBmcm9tIEwyCitldmVudDowWDAxNzEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lOU1RfRlJPTV9MMjFfR1JQMjMgOiAoR3JvdXAgMjMgcG1faXNvdXJjZSkgSW5zdHJ1Y3Rpb24gZmV0Y2hlZCBmcm9tIHByaXZhdGUgTDIgb3RoZXIgY29yZQorZXZlbnQ6MFgwMTcyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JTlNUX0ZST01fTDI1X01PRF9HUlAyMyA6IChHcm91cCAyMyBwbV9pc291cmNlKSBJbnN0cnVjdGlvbiBmZXRjaGVkIGZyb20gTDIuNSBtb2RpZmllZAorZXZlbnQ6MFgwMTczIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JTlNUX0ZST01fTDJNSVNTX0dSUDIzIDogKEdyb3VwIDIzIHBtX2lzb3VyY2UpIEluc3RydWN0aW9ucyBmZXRjaGVkIG1pc3NlZCBMMgorCisjR3JvdXAgMjQgcG1faXNvdXJjZTIsIEluc3RydWN0aW9uIHNvdXJjZXMKK2V2ZW50OjBYMDE4MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU5TVF9GUk9NX0wzNV9NT0RfR1JQMjQgOiAoR3JvdXAgMjQgcG1faXNvdXJjZTIpIEluc3RydWN0aW9uIGZldGNoZWQgZnJvbSBMMy41IG1vZGlmaWVkCitldmVudDowWDAxODEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lOU1RfRlJPTV9MMzVfU0hSX0dSUDI0IDogKEdyb3VwIDI0IHBtX2lzb3VyY2UyKSBJbnN0cnVjdGlvbiBmZXRjaGVkIGZyb20gTDMuNSBzaGFyZWQKK2V2ZW50OjBYMDE4MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU5TVF9GUk9NX0wzX0dSUDI0IDogKEdyb3VwIDI0IHBtX2lzb3VyY2UyKSBJbnN0cnVjdGlvbiBmZXRjaGVkIGZyb20gTDMKK2V2ZW50OjBYMDE4MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU5TVF9GUk9NX0wyNV9TSFJfR1JQMjQgOiAoR3JvdXAgMjQgcG1faXNvdXJjZTIpIEluc3RydWN0aW9uIGZldGNoZWQgZnJvbSBMMi41IHNoYXJlZAorCisjR3JvdXAgMjUgcG1faXNvdXJjZTMsIEluc3RydWN0aW9uIHNvdXJjZXMKK2V2ZW50OjBYMDE5MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU5TVF9GUk9NX1JMMkwzX01PRF9HUlAyNSA6IChHcm91cCAyNSBwbV9pc291cmNlMykgSW5zdHJ1Y3Rpb24gZmV0Y2hlZCBmcm9tIHJlbW90ZSBMMiBvciBMMyBtb2RpZmllZAorZXZlbnQ6MFgwMTkxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JTlNUX0ZST01fUkwyTDNfU0hSX0dSUDI1IDogKEdyb3VwIDI1IHBtX2lzb3VyY2UzKSBJbnN0cnVjdGlvbiBmZXRjaGVkIGZyb20gcmVtb3RlIEwyIG9yIEwzIHNoYXJlZAorZXZlbnQ6MFgwMTkyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JTlNUX0ZST01fREwyTDNfU0hSX0dSUDI1IDogKEdyb3VwIDI1IHBtX2lzb3VyY2UzKSBJbnN0cnVjdGlvbiBmZXRjaGVkIGZyb20gZGlzdGFudCBMMiBvciBMMyBzaGFyZWQKK2V2ZW50OjBYMDE5MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU5TVF9GUk9NX0RMMkwzX01PRF9HUlAyNSA6IChHcm91cCAyNSBwbV9pc291cmNlMykgSW5zdHJ1Y3Rpb24gZmV0Y2hlZCBmcm9tIGRpc3RhbnQgTDIgb3IgTDMgbW9kaWZpZWQKKworI0dyb3VwIDI2IHBtX2lzb3VyY2U0LCBJbnN0cnVjdGlvbiBzb3VyY2VzCitldmVudDowWDAxQTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lOU1RfRlJPTV9NRU1fRFBfR1JQMjYgOiAoR3JvdXAgMjYgcG1faXNvdXJjZTQpIEluc3RydWN0aW9uIGZldGNoZWQgZnJvbSBkb3VibGUgcHVtcCBtZW1vcnkKK2V2ZW50OjBYMDFBMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU5TVF9GUk9NX0RNRU1fR1JQMjYgOiAoR3JvdXAgMjYgcG1faXNvdXJjZTQpIEluc3RydWN0aW9uIGZldGNoZWQgZnJvbSBkaXN0YW50IG1lbW9yeQorZXZlbnQ6MFgwMUEyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JTlNUX0ZST01fUk1FTV9HUlAyNiA6IChHcm91cCAyNiBwbV9pc291cmNlNCkgSW5zdHJ1Y3Rpb24gZmV0Y2hlZCBmcm9tIHJlbW90ZSBtZW1vcnkKK2V2ZW50OjBYMDFBMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU5TVF9GUk9NX0xNRU1fR1JQMjYgOiAoR3JvdXAgMjYgcG1faXNvdXJjZTQpIEluc3RydWN0aW9uIGZldGNoZWQgZnJvbSBsb2NhbCBtZW1vcnkKKworI0dyb3VwIDI3IHBtX2lzb3VyY2U1LCBJbnN0cnVjdGlvbiBzb3VyY2VzCitldmVudDowWDAxQjAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lOU1RfRlJPTV9MMl9HUlAyNyA6IChHcm91cCAyNyBwbV9pc291cmNlNSkgSW5zdHJ1Y3Rpb25zIGZldGNoZWQgZnJvbSBMMgorZXZlbnQ6MFgwMUIxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JTlNUX0ZST01fTDIxX0dSUDI3IDogKEdyb3VwIDI3IHBtX2lzb3VyY2U1KSBJbnN0cnVjdGlvbiBmZXRjaGVkIGZyb20gcHJpdmF0ZSBMMiBvdGhlciBjb3JlCitldmVudDowWDAxQjIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lOU1RfRlJPTV9MM01JU1NfR1JQMjcgOiAoR3JvdXAgMjcgcG1faXNvdXJjZTUpIEluc3RydWN0aW9uIGZldGNoZWQgbWlzc2VkIEwzCitldmVudDowWDAxQjMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lOU1RfRlJPTV9MMk1JU1NfR1JQMjcgOiAoR3JvdXAgMjcgcG1faXNvdXJjZTUpIEluc3RydWN0aW9ucyBmZXRjaGVkIG1pc3NlZCBMMgorCisjR3JvdXAgMjggcG1fcHRlZywgUFRFRyBzb3VyY2VzCitldmVudDowWDAxQzAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1BURUdfRlJPTV9MMl9HUlAyOCA6IChHcm91cCAyOCBwbV9wdGVnKSBQVEVHIGxvYWRlZCBmcm9tIEwyCitldmVudDowWDAxQzEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1BURUdfRlJPTV9MMjFfR1JQMjggOiAoR3JvdXAgMjggcG1fcHRlZykgUFRFRyBsb2FkZWQgZnJvbSBwcml2YXRlIEwyIG90aGVyIGNvcmUKK2V2ZW50OjBYMDFDMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUFRFR19GUk9NX0wyNV9NT0RfR1JQMjggOiAoR3JvdXAgMjggcG1fcHRlZykgUFRFRyBsb2FkZWQgZnJvbSBMMi41IG1vZGlmaWVkCitldmVudDowWDAxQzMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1BURUdfRlJPTV9MMjVfU0hSX0dSUDI4IDogKEdyb3VwIDI4IHBtX3B0ZWcpIFBURUcgbG9hZGVkIGZyb20gTDIuNSBzaGFyZWQKKworI0dyb3VwIDI5IHBtX3B0ZWcyLCBQVEVHIHNvdXJjZXMKK2V2ZW50OjBYMDFEMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUFRFR19GUk9NX0wyTUlTU19HUlAyOSA6IChHcm91cCAyOSBwbV9wdGVnMikgUFRFRyBsb2FkZWQgZnJvbSBMMiBtaXNzCitldmVudDowWDAxRDEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1BURUdfRlJPTV9MMjFfR1JQMjkgOiAoR3JvdXAgMjkgcG1fcHRlZzIpIFBURUcgbG9hZGVkIGZyb20gcHJpdmF0ZSBMMiBvdGhlciBjb3JlCitldmVudDowWDAxRDIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1BURUdfRlJPTV9MM19HUlAyOSA6IChHcm91cCAyOSBwbV9wdGVnMikgUFRFRyBsb2FkZWQgZnJvbSBMMworZXZlbnQ6MFgwMUQzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9QVEVHX0ZST01fREwyTDNfTU9EX0dSUDI5IDogKEdyb3VwIDI5IHBtX3B0ZWcyKSBQVEVHIGxvYWRlZCBmcm9tIGRpc3RhbnQgTDIgb3IgTDMgbW9kaWZpZWQKKworI0dyb3VwIDMwIHBtX3B0ZWczLCBQVEVHIHNvdXJjZXMKK2V2ZW50OjBYMDFFMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUFRFR19GUk9NX0wzNV9NT0RfR1JQMzAgOiAoR3JvdXAgMzAgcG1fcHRlZzMpIFBURUcgbG9hZGVkIGZyb20gTDMuNSBtb2RpZmllZAorZXZlbnQ6MFgwMUUxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9QVEVHX0ZST01fTDM1X1NIUl9HUlAzMCA6IChHcm91cCAzMCBwbV9wdGVnMykgUFRFRyBsb2FkZWQgZnJvbSBMMy41IHNoYXJlZAorZXZlbnQ6MFgwMUUyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9QVEVHX0ZST01fTDNNSVNTX0dSUDMwIDogKEdyb3VwIDMwIHBtX3B0ZWczKSBQVEVHIGxvYWRlZCBmcm9tIEwzIG1pc3MKK2V2ZW50OjBYMDFFMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUFRFR19GUk9NX0xNRU1fR1JQMzAgOiAoR3JvdXAgMzAgcG1fcHRlZzMpIFBURUcgbG9hZGVkIGZyb20gbG9jYWwgbWVtb3J5CisKKyNHcm91cCAzMSBwbV9wdGVnNCwgUFRFRyBzb3VyY2VzCitldmVudDowWDAxRjAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1BURUdfRlJPTV9NRU1fRFBfR1JQMzEgOiAoR3JvdXAgMzEgcG1fcHRlZzQpIFBURUcgbG9hZGVkIGZyb20gZG91YmxlIHB1bXAgbWVtb3J5CitldmVudDowWDAxRjEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1BURUdfRlJPTV9ETUVNX0dSUDMxIDogKEdyb3VwIDMxIHBtX3B0ZWc0KSBQVEVHIGxvYWRlZCBmcm9tIGRpc3RhbnQgbWVtb3J5CitldmVudDowWDAxRjIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1BURUdfRlJPTV9STUVNX0dSUDMxIDogKEdyb3VwIDMxIHBtX3B0ZWc0KSBQVEVHIGxvYWRlZCBmcm9tIHJlbW90ZSBtZW1vcnkKK2V2ZW50OjBYMDFGMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUFRFR19GUk9NX0xNRU1fR1JQMzEgOiAoR3JvdXAgMzEgcG1fcHRlZzQpIFBURUcgbG9hZGVkIGZyb20gbG9jYWwgbWVtb3J5CisKKyNHcm91cCAzMiBwbV9wdGVnNSwgUFRFRyBzb3VyY2VzCitldmVudDowWDAyMDAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1BURUdfRlJPTV9STDJMM19NT0RfR1JQMzIgOiAoR3JvdXAgMzIgcG1fcHRlZzUpIFBURUcgbG9hZGVkIGZyb20gcmVtb3RlIEwyIG9yIEwzIG1vZGlmaWVkCitldmVudDowWDAyMDEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1BURUdfRlJPTV9STDJMM19TSFJfR1JQMzIgOiAoR3JvdXAgMzIgcG1fcHRlZzUpIFBURUcgbG9hZGVkIGZyb20gcmVtb3RlIEwyIG9yIEwzIHNoYXJlZAorZXZlbnQ6MFgwMjAyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9QVEVHX0ZST01fREwyTDNfU0hSX0dSUDMyIDogKEdyb3VwIDMyIHBtX3B0ZWc1KSBQVEVHIGxvYWRlZCBmcm9tIGRpc3RhbnQgTDIgb3IgTDMgc2hhcmVkCitldmVudDowWDAyMDMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1BURUdfUkVMT0FEX1ZBTElEX0dSUDMyIDogKEdyb3VwIDMyIHBtX3B0ZWc1KSBUTEIgcmVsb2FkIHZhbGlkCisKKyNHcm91cCAzMyBwbV9kYXRhX3RhYmxld2FsaywgRGF0YSB0YWJsZXdhbGtzCitldmVudDowWDAyMTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RBVEFfUFRFR18xU1RfSEFMRl9HUlAzMyA6IChHcm91cCAzMyBwbV9kYXRhX3RhYmxld2FsaykgRGF0YSB0YWJsZSB3YWxrIG1hdGNoZWQgaW4gZmlyc3QgaGFsZiBwcmltYXJ5IFBURUcKK2V2ZW50OjBYMDIxMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fREFUQV9QVEVHXzJORF9IQUxGX0dSUDMzIDogKEdyb3VwIDMzIHBtX2RhdGFfdGFibGV3YWxrKSBEYXRhIHRhYmxlIHdhbGsgbWF0Y2hlZCBpbiBzZWNvbmQgaGFsZiBwcmltYXJ5IFBURUcKK2V2ZW50OjBYMDIxMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fREFUQV9QVEVHX1NFQ09OREFSWV9HUlAzMyA6IChHcm91cCAzMyBwbV9kYXRhX3RhYmxld2FsaykgRGF0YSB0YWJsZSB3YWxrIG1hdGNoZWQgaW4gc2Vjb25kYXJ5IFBURUcKK2V2ZW50OjBYMDIxMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fVExCX1JFRl9HUlAzMyA6IChHcm91cCAzMyBwbV9kYXRhX3RhYmxld2FsaykgVExCIHJlZmVyZW5jZQorCisjR3JvdXAgMzQgcG1faW5zdF90YWJsZXdhbGssIEluc3RydWN0aW9uIHRhYmxld2Fsa3MKK2V2ZW50OjBYMDIyMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU5TVF9QVEVHXzFTVF9IQUxGX0dSUDM0IDogKEdyb3VwIDM0IHBtX2luc3RfdGFibGV3YWxrKSBJbnN0cnVjdGlvbiB0YWJsZSB3YWxrIG1hdGNoZWQgaW4gZmlyc3QgaGFsZiBwcmltYXJ5IFBURUcKK2V2ZW50OjBYMDIyMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU5TVF9QVEVHXzJORF9IQUxGX0dSUDM0IDogKEdyb3VwIDM0IHBtX2luc3RfdGFibGV3YWxrKSBJbnN0cnVjdGlvbiB0YWJsZSB3YWxrIG1hdGNoZWQgaW4gc2Vjb25kIGhhbGYgcHJpbWFyeSBQVEVHCitldmVudDowWDAyMjIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lOU1RfUFRFR19TRUNPTkRBUllfR1JQMzQgOiAoR3JvdXAgMzQgcG1faW5zdF90YWJsZXdhbGspIEluc3RydWN0aW9uIHRhYmxlIHdhbGsgbWF0Y2hlZCBpbiBzZWNvbmRhcnkgUFRFRworZXZlbnQ6MFgwMjIzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JTlNUX1RBQkxFV0FMS19DWUNfR1JQMzQgOiAoR3JvdXAgMzQgcG1faW5zdF90YWJsZXdhbGspIEN5Y2xlcyBkb2luZyBpbnN0cnVjdGlvbiB0YWJsZXdhbGtzCisKKyNHcm91cCAzNSBwbV9mcmVxLCBGcmVxdWVuY3kgZXZlbnRzCitldmVudDowWDAyMzAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RQVV9IRUxEX1RIRVJNQUxfR1JQMzUgOiAoR3JvdXAgMzUgcG1fZnJlcSkgRElTUCB1bml0IGhlbGQgZHVlIHRvIHRoZXJtYWwgY29uZGl0aW9uCitldmVudDowWDAyMzEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RQVV9IRUxEX1BPV0VSX0dSUDM1IDogKEdyb3VwIDM1IHBtX2ZyZXEpIERJU1AgdW5pdCBoZWxkIGR1ZSB0byBQb3dlciBNYW5hZ2VtZW50CitldmVudDowWDAyMzIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZSRVFfRE9XTl9HUlAzNSA6IChHcm91cCAzNSBwbV9mcmVxKSBGcmVxdWVuY3kgaXMgYmVpbmcgc2xld2VkIGRvd24gZHVlIHRvIFBvd2VyIE1hbmFnZW1lbnQKK2V2ZW50OjBYMDIzMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlJFUV9VUF9HUlAzNSA6IChHcm91cCAzNSBwbV9mcmVxKSBGcmVxdWVuY3kgaXMgYmVpbmcgc2xld2VkIHVwIGR1ZSB0byBQb3dlciBNYW5hZ2VtZW50CisKKyNHcm91cCAzNiBwbV9kaXNwX3dhaXQsIERpc3BhdGNoIHN0YWxscworZXZlbnQ6MFgwMjQwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMV9JQ0FDSEVfTUlTU19HUlAzNiA6IChHcm91cCAzNiBwbV9kaXNwX3dhaXQpIEwxIEkgY2FjaGUgbWlzcyBjb3VudAorZXZlbnQ6MFgwMjQxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EUFVfV1RfSUNfTUlTU19HUlAzNiA6IChHcm91cCAzNiBwbV9kaXNwX3dhaXQpIEN5Y2xlcyBESVNQIHVuaXQgaXMgc3RhbGxlZCBkdWUgdG8gSSBjYWNoZSBtaXNzCitldmVudDowWDAyNDIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RQVV9XVF9HUlAzNiA6IChHcm91cCAzNiBwbV9kaXNwX3dhaXQpIEN5Y2xlcyBESVNQIHVuaXQgaXMgc3RhbGxlZCB3YWl0aW5nIGZvciBpbnN0cnVjdGlvbnMKK2V2ZW50OjBYMDI0MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRFBVX1dUX0JSX01QUkVEX0dSUDM2IDogKEdyb3VwIDM2IHBtX2Rpc3Bfd2FpdCkgQ3ljbGVzIERJU1AgdW5pdCBpcyBzdGFsbGVkIGR1ZSB0byBicmFuY2ggbWlzcHJlZGljdGlvbgorCisjR3JvdXAgMzcgcG1fZGlzcF9oZWxkLCBEaXNwYXRjaCBoZWxkIGNvbmRpdGlvbnMKK2V2ZW50OjBYMDI1MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRFBVX0hFTERfVEhFUk1BTF9HUlAzNyA6IChHcm91cCAzNyBwbV9kaXNwX2hlbGQpIERJU1AgdW5pdCBoZWxkIGR1ZSB0byB0aGVybWFsIGNvbmRpdGlvbgorZXZlbnQ6MFgwMjUxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EUFVfSEVMRF9QT1dFUl9HUlAzNyA6IChHcm91cCAzNyBwbV9kaXNwX2hlbGQpIERJU1AgdW5pdCBoZWxkIGR1ZSB0byBQb3dlciBNYW5hZ2VtZW50CitldmVudDowWDAyNTIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1RIRVJNQUxfTUFYX0dSUDM3IDogKEdyb3VwIDM3IHBtX2Rpc3BfaGVsZCkgUHJvY2Vzc29yIGluIHRoZXJtYWwgTUFYCitldmVudDowWDAyNTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RQVV9IRUxEX1NNVF9HUlAzNyA6IChHcm91cCAzNyBwbV9kaXNwX2hlbGQpIERJU1AgdW5pdCBoZWxkIGR1ZSB0byBTTVQgY29uZmxpY3RzIAorCisjR3JvdXAgMzggcG1fZGlzcF9oZWxkMiwgRGlzcGF0Y2ggaGVsZCBjb25kaXRpb25zCitldmVudDowWDAyNjAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RQVV9IRUxEX0dQUl9HUlAzOCA6IChHcm91cCAzOCBwbV9kaXNwX2hlbGQyKSBESVNQIHVuaXQgaGVsZCBkdWUgdG8gR1BSIGRlcGVuZGVuY2llcworZXZlbnQ6MFgwMjYxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EUFVfSEVMRF9HUlAzOCA6IChHcm91cCAzOCBwbV9kaXNwX2hlbGQyKSBESVNQIHVuaXQgaGVsZAorZXZlbnQ6MFgwMjYyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EUFVfSEVMRF9DV19HUlAzOCA6IChHcm91cCAzOCBwbV9kaXNwX2hlbGQyKSBESVNQIHVuaXQgaGVsZCBkdWUgdG8gY2FjaGUgd3JpdGVzIAorZXZlbnQ6MFgwMjYzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EUFVfSEVMRF9GUFFfR1JQMzggOiAoR3JvdXAgMzggcG1fZGlzcF9oZWxkMikgRElTUCB1bml0IGhlbGQgZHVlIHRvIEZQVSBpc3N1ZSBxdWV1ZSBmdWxsCisKKyNHcm91cCAzOSBwbV9kaXNwX2hlbGQzLCBEaXNwYXRjaCBoZWxkIGNvbmRpdGlvbnMKK2V2ZW50OjBYMDI3MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRFBVX0hFTERfWEVSX0dSUDM5IDogKEdyb3VwIDM5IHBtX2Rpc3BfaGVsZDMpIERJU1AgdW5pdCBoZWxkIGR1ZSB0byBYRVIgZGVwZW5kZW5jeQorZXZlbnQ6MFgwMjcxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EUFVfSEVMRF9JU1lOQ19HUlAzOSA6IChHcm91cCAzOSBwbV9kaXNwX2hlbGQzKSBESVNQIHVuaXQgaGVsZCBkdWUgdG8gSVNZTkMgCitldmVudDowWDAyNzIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RQVV9IRUxEX1NUQ1hfQ1JfR1JQMzkgOiAoR3JvdXAgMzkgcG1fZGlzcF9oZWxkMykgRElTUCB1bml0IGhlbGQgZHVlIHRvIFNUQ1ggdXBkYXRpbmcgQ1IgCitldmVudDowWDAyNzMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RQVV9IRUxEX1JVX1dRX0dSUDM5IDogKEdyb3VwIDM5IHBtX2Rpc3BfaGVsZDMpIERJU1AgdW5pdCBoZWxkIGR1ZSB0byBSVSBGWFUgd3JpdGUgcXVldWUgZnVsbAorCisjR3JvdXAgNDAgcG1fZGlzcF9oZWxkNCwgRGlzcGF0Y2ggaGVsZCBjb25kaXRpb25zCitldmVudDowWDAyODAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RQVV9IRUxEX0ZQVV9DUl9HUlA0MCA6IChHcm91cCA0MCBwbV9kaXNwX2hlbGQ0KSBESVNQIHVuaXQgaGVsZCBkdWUgdG8gRlBVIHVwZGF0aW5nIENSCitldmVudDowWDAyODEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RQVV9IRUxEX0xTVV9HUlA0MCA6IChHcm91cCA0MCBwbV9kaXNwX2hlbGQ0KSBESVNQIHVuaXQgaGVsZCBkdWUgdG8gTFNVIG1vdmUgb3IgaW52YWxpZGF0ZSBTTEIgYW5kIFNSCitldmVudDowWDAyODIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RQVV9IRUxEX0lUTEJfSVNMQl9HUlA0MCA6IChHcm91cCA0MCBwbV9kaXNwX2hlbGQ0KSBESVNQIHVuaXQgaGVsZCBkdWUgdG8gU0xCIG9yIFRMQiBpbnZhbGlkYXRlcyAKK2V2ZW50OjBYMDI4MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRFBVX0hFTERfRlhVX01VTFRJX0dSUDQwIDogKEdyb3VwIDQwIHBtX2Rpc3BfaGVsZDQpIERJU1AgdW5pdCBoZWxkIGR1ZSB0byBGWFUgbXVsdGljeWNsZQorCisjR3JvdXAgNDEgcG1fZGlzcF9oZWxkNSwgRGlzcGF0Y2ggaGVsZCBjb25kaXRpb25zCitldmVudDowWDAyOTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RQVV9IRUxEX0ZQX0ZYX01VTFRfR1JQNDEgOiAoR3JvdXAgNDEgcG1fZGlzcF9oZWxkNSkgRElTUCB1bml0IGhlbGQgZHVlIHRvIG5vbiBmaXhlZCBtdWx0aXBsZS9kaXZpZGUgYWZ0ZXIgZml4ZWQgbXVsdGlwbHkvZGl2aWRlCitldmVudDowWDAyOTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RQVV9IRUxEX01VTFRfR1BSX0dSUDQxIDogKEdyb3VwIDQxIHBtX2Rpc3BfaGVsZDUpIERJU1AgdW5pdCBoZWxkIGR1ZSB0byBtdWx0aXBsZS9kaXZpZGUgbXVsdGlwbHkvZGl2aWRlIEdQUiBkZXBlbmRlbmNpZXMKK2V2ZW50OjBYMDI5MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRFBVX0hFTERfQ09NUExFVElPTl9HUlA0MSA6IChHcm91cCA0MSBwbV9kaXNwX2hlbGQ1KSBESVNQIHVuaXQgaGVsZCBkdWUgdG8gY29tcGxldGlvbiBob2xkaW5nIGRpc3BhdGNoIAorZXZlbnQ6MFgwMjkzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EUFVfSEVMRF9HUFJfR1JQNDEgOiAoR3JvdXAgNDEgcG1fZGlzcF9oZWxkNSkgRElTUCB1bml0IGhlbGQgZHVlIHRvIEdQUiBkZXBlbmRlbmNpZXMKKworI0dyb3VwIDQyIHBtX2Rpc3BfaGVsZDYsIERpc3BhdGNoIGhlbGQgY29uZGl0aW9ucworZXZlbnQ6MFgwMkEwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EUFVfSEVMRF9JTlRfR1JQNDIgOiAoR3JvdXAgNDIgcG1fZGlzcF9oZWxkNikgRElTUCB1bml0IGhlbGQgZHVlIHRvIGV4Y2VwdGlvbgorZXZlbnQ6MFgwMkExIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EUFVfSEVMRF9YVEhSRF9HUlA0MiA6IChHcm91cCA0MiBwbV9kaXNwX2hlbGQ2KSBESVNQIHVuaXQgaGVsZCBkdWUgdG8gY3Jvc3MgdGhyZWFkIHJlc291cmNlIGNvbmZsaWN0cworZXZlbnQ6MFgwMkEyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EUFVfSEVMRF9MTEFfRU5EX0dSUDQyIDogKEdyb3VwIDQyIHBtX2Rpc3BfaGVsZDYpIERJU1AgdW5pdCBoZWxkIGR1ZSB0byBsb2FkIGxvb2sgYWhlYWQgZW5kZWQKK2V2ZW50OjBYMDJBMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRFBVX0hFTERfUkVTVEFSVF9HUlA0MiA6IChHcm91cCA0MiBwbV9kaXNwX2hlbGQ2KSBESVNQIHVuaXQgaGVsZCBhZnRlciByZXN0YXJ0IGNvbWluZworCisjR3JvdXAgNDMgcG1fZGlzcF9oZWxkNywgRGlzcGF0Y2ggaGVsZCBjb25kaXRpb25zCitldmVudDowWDAyQjAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RQVV9IRUxEX0ZYVV9TT1BTX0dSUDQzIDogKEdyb3VwIDQzIHBtX2Rpc3BfaGVsZDcpIERJU1AgdW5pdCBoZWxkIGR1ZSB0byBGWFUgc2xvdyBvcHMgKG10bXNyLCBzY3YsIHJmc2N2KQorZXZlbnQ6MFgwMkIxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EUFVfSEVMRF9USFJEX1BSSU9fR1JQNDMgOiAoR3JvdXAgNDMgcG1fZGlzcF9oZWxkNykgRElTUCB1bml0IGhlbGQgZHVlIHRvIGxvd2VyIHByaW9yaXR5IHRocmVhZAorZXZlbnQ6MFgwMkIyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EUFVfSEVMRF9TUFJfR1JQNDMgOiAoR3JvdXAgNDMgcG1fZGlzcF9oZWxkNykgRElTUCB1bml0IGhlbGQgZHVlIHRvIE1UU1BSL01GU1BSCitldmVudDowWDAyQjMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RQVV9IRUxEX0NSX0xPR0lDQUxfR1JQNDMgOiAoR3JvdXAgNDMgcG1fZGlzcF9oZWxkNykgRElTUCB1bml0IGhlbGQgZHVlIHRvIENSLCBMUiBvciBDVFIgdXBkYXRlZCBieSBDUiBsb2dpY2FsLCBNVENSRiwgTVRMUiBvciBNVENUUgorCisjR3JvdXAgNDQgcG1fZGlzcF9oZWxkOCwgRGlzcGF0Y2ggaGVsZCBjb25kaXRpb25zCitldmVudDowWDAyQzAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RQVV9IRUxEX0lTWU5DX0dSUDQ0IDogKEdyb3VwIDQ0IHBtX2Rpc3BfaGVsZDgpIERJU1AgdW5pdCBoZWxkIGR1ZSB0byBJU1lOQyAKK2V2ZW50OjBYMDJDMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRFBVX0hFTERfU1RDWF9DUl9HUlA0NCA6IChHcm91cCA0NCBwbV9kaXNwX2hlbGQ4KSBESVNQIHVuaXQgaGVsZCBkdWUgdG8gU1RDWCB1cGRhdGluZyBDUiAKK2V2ZW50OjBYMDJDMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRFBVX0hFTERfUlVfV1FfR1JQNDQgOiAoR3JvdXAgNDQgcG1fZGlzcF9oZWxkOCkgRElTUCB1bml0IGhlbGQgZHVlIHRvIFJVIEZYVSB3cml0ZSBxdWV1ZSBmdWxsCitldmVudDowWDAyQzMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RQVV9IRUxEX0ZQVV9DUl9HUlA0NCA6IChHcm91cCA0NCBwbV9kaXNwX2hlbGQ4KSBESVNQIHVuaXQgaGVsZCBkdWUgdG8gRlBVIHVwZGF0aW5nIENSCisKKyNHcm91cCA0NSBwbV9kaXNwX2hlbGQ5LCBEaXNwYXRjaCBoZWxkIGNvbmRpdGlvbnMKK2V2ZW50OjBYMDJEMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRFBVX0hFTERfSVNZTkNfR1JQNDUgOiAoR3JvdXAgNDUgcG1fZGlzcF9oZWxkOSkgRElTUCB1bml0IGhlbGQgZHVlIHRvIElTWU5DIAorZXZlbnQ6MFgwMkQxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EUFVfSEVMRF9GUFVfQ1JfR1JQNDUgOiAoR3JvdXAgNDUgcG1fZGlzcF9oZWxkOSkgRElTUCB1bml0IGhlbGQgZHVlIHRvIEZQVSB1cGRhdGluZyBDUgorZXZlbnQ6MFgwMkQyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EUFVfSEVMRF9NVUxUX0dQUl9HUlA0NSA6IChHcm91cCA0NSBwbV9kaXNwX2hlbGQ5KSBESVNQIHVuaXQgaGVsZCBkdWUgdG8gbXVsdGlwbGUvZGl2aWRlIG11bHRpcGx5L2RpdmlkZSBHUFIgZGVwZW5kZW5jaWVzCitldmVudDowWDAyRDMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RQVV9IRUxEX0NPTVBMRVRJT05fR1JQNDUgOiAoR3JvdXAgNDUgcG1fZGlzcF9oZWxkOSkgRElTUCB1bml0IGhlbGQgZHVlIHRvIGNvbXBsZXRpb24gaG9sZGluZyBkaXNwYXRjaCAKKworI0dyb3VwIDQ2IHBtX3N5bmMsIFN5bmMgZXZlbnRzCitldmVudDowWDAyRTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xXU1lOQ19HUlA0NiA6IChHcm91cCA0NiBwbV9zeW5jKSBJc3luYyBpbnN0cnVjdGlvbiBjb21wbGV0ZWQKK2V2ZW50OjBYMDJFMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlA0NiA6IChHcm91cCA0NiBwbV9zeW5jKSBQcm9jZXNzb3IgY3ljbGVzCitldmVudDowWDAyRTIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1NZTkNfQ1lDX0dSUDQ2IDogKEdyb3VwIDQ2IHBtX3N5bmMpIFN5bmMgZHVyYXRpb24KK2V2ZW50OjBYMDJFMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRFBVX0hFTERfTFNVX1NPUFNfR1JQNDYgOiAoR3JvdXAgNDYgcG1fc3luYykgRElTUCB1bml0IGhlbGQgZHVlIHRvIExTVSBzbG93IG9wcyAoc3luYywgdGxiaWUsIHN0Y3gpCisKKyNHcm91cCA0NyBwbV9MMV9yZWYsIEwxIHJlZmVyZW5jZXMKK2V2ZW50OjBYMDJGMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTERfUkVGX0wxX0JPVEhfR1JQNDcgOiAoR3JvdXAgNDcgcG1fTDFfcmVmKSBCb3RoIHVuaXRzIEwxIEQgY2FjaGUgbG9hZCByZWZlcmVuY2UKK2V2ZW50OjBYMDJGMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTERfUkVGX0wxX0dSUDQ3IDogKEdyb3VwIDQ3IHBtX0wxX3JlZikgTDEgRCBjYWNoZSBsb2FkIHJlZmVyZW5jZXMKK2V2ZW50OjBYMDJGMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fU1RfUkVGX0wxX0dSUDQ3IDogKEdyb3VwIDQ3IHBtX0wxX3JlZikgTDEgRCBjYWNoZSBzdG9yZSByZWZlcmVuY2VzCitldmVudDowWDAyRjMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1NUX1JFRl9MMV9CT1RIX0dSUDQ3IDogKEdyb3VwIDQ3IHBtX0wxX3JlZikgQm90aCB1bml0cyBMMSBEIGNhY2hlIHN0b3JlIHJlZmVyZW5jZQorCisjR3JvdXAgNDggcG1fTDFfbGRzdCwgTDEgbG9hZC9zdG9yZSByZWYvbWlzcworZXZlbnQ6MFgwMzAwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9TVF9SRUZfTDFfR1JQNDggOiAoR3JvdXAgNDggcG1fTDFfbGRzdCkgTDEgRCBjYWNoZSBzdG9yZSByZWZlcmVuY2VzCitldmVudDowWDAzMDEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xEX1JFRl9MMV9HUlA0OCA6IChHcm91cCA0OCBwbV9MMV9sZHN0KSBMMSBEIGNhY2hlIGxvYWQgcmVmZXJlbmNlcworZXZlbnQ6MFgwMzAyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9TVF9NSVNTX0wxX0dSUDQ4IDogKEdyb3VwIDQ4IHBtX0wxX2xkc3QpIEwxIEQgY2FjaGUgc3RvcmUgbWlzc2VzCitldmVudDowWDAzMDMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xEX01JU1NfTDFfR1JQNDggOiAoR3JvdXAgNDggcG1fTDFfbGRzdCkgTDEgRCBjYWNoZSBsb2FkIG1pc3NlcworCisjR3JvdXAgNDkgcG1fc3RyZWFtcywgU3RyZWFtcworZXZlbnQ6MFgwMzEwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQ19QUkVGX09VVF9PRl9TVFJFQU1TX0dSUDQ5IDogKEdyb3VwIDQ5IHBtX3N0cmVhbXMpIEQgY2FjaGUgb3V0IG9mIHN0cmVhbXMKK2V2ZW50OjBYMDMxMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRENfUFJFRl9TVFJFQU1fQUxMT0NfR1JQNDkgOiAoR3JvdXAgNDkgcG1fc3RyZWFtcykgRCBjYWNoZSBuZXcgcHJlZmV0Y2ggc3RyZWFtIGFsbG9jYXRlZAorZXZlbnQ6MFgwMzEyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMV9QUkVGX0dSUDQ5IDogKEdyb3VwIDQ5IHBtX3N0cmVhbXMpIEwxIGNhY2hlIGRhdGEgcHJlZmV0Y2hlcworZXZlbnQ6MFgwMzEzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JQlVGX0ZVTExfQ1lDX0dSUDQ5IDogKEdyb3VwIDQ5IHBtX3N0cmVhbXMpIEN5Y2xlcyBpbnN0cnVjdGlvbiBidWZmZXIgZnVsbAorCisjR3JvdXAgNTAgcG1fZmx1c2gsIEZsdXNoZXMKK2V2ZW50OjBYMDMyMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRkxVU0hfR1JQNTAgOiAoR3JvdXAgNTAgcG1fZmx1c2gpIEZsdXNoZXMKK2V2ZW50OjBYMDMyMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRkxVU0hfQVNZTkNfR1JQNTAgOiAoR3JvdXAgNTAgcG1fZmx1c2gpIEZsdXNoIGNhdXNlZCBieSBhc3luY2hyb25vdXMgZXhjZXB0aW9uCitldmVudDowWDAzMjIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZMVVNIX0ZQVV9HUlA1MCA6IChHcm91cCA1MCBwbV9mbHVzaCkgRmx1c2ggY2F1c2VkIGJ5IEZQVSBleGNlcHRpb24KK2V2ZW50OjBYMDMyMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRkxVU0hfRlhVX0dSUDUwIDogKEdyb3VwIDUwIHBtX2ZsdXNoKSBGbHVzaCBjYXVzZWQgYnkgRlhVIGV4Y2VwdGlvbgorCisjR3JvdXAgNTEgcG1fcHJlZmV0Y2gsIEkgY2FjaGUgUHJlZmV0Y2hlcworZXZlbnQ6MFgwMzMwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JQ19SRVFfR1JQNTEgOiAoR3JvdXAgNTEgcG1fcHJlZmV0Y2gpIEkgY2FjaGUgZGVtYW5kIG9mIHByZWZldGNoIHJlcXVlc3QKK2V2ZW50OjBYMDMzMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSUNfUFJFRl9SRVFfR1JQNTEgOiAoR3JvdXAgNTEgcG1fcHJlZmV0Y2gpIEluc3RydWN0aW9uIHByZWZldGNoIHJlcXVlc3RzCitldmVudDowWDAzMzIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lDX1JFTE9BRF9TSFJfR1JQNTEgOiAoR3JvdXAgNTEgcG1fcHJlZmV0Y2gpIEkgY2FjaGUgbGluZSByZWxvYWRpbmcgdG8gYmUgc2hhcmVkIGJ5IHRocmVhZHMKK2V2ZW50OjBYMDMzMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSUNfUFJFRl9XUklURV9HUlA1MSA6IChHcm91cCA1MSBwbV9wcmVmZXRjaCkgSW5zdHJ1Y3Rpb24gcHJlZmV0Y2ggd3JpdHRlbiBpbnRvIEkgY2FjaGUKKworI0dyb3VwIDUyIHBtX3N0Y3gsIFNUQ1gKK2V2ZW50OjBYMDM0MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fU1RDWF9HUlA1MiA6IChHcm91cCA1MiBwbV9zdGN4KSBTVENYIGV4ZWN1dGVkCitldmVudDowWDAzNDEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1NUQ1hfQ0FOQ0VMX0dSUDUyIDogKEdyb3VwIDUyIHBtX3N0Y3gpIHN0Y3ggY2FuY2VsIGJ5IGNvcmUKK2V2ZW50OjBYMDM0MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fU1RDWF9GQUlMX0dSUDUyIDogKEdyb3VwIDUyIHBtX3N0Y3gpIFNUQ1ggZmFpbGVkCitldmVudDowWDAzNDMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xBUlhfR1JQNTIgOiAoR3JvdXAgNTIgcG1fc3RjeCkgTGFyeCBleGVjdXRlZAorCisjR3JvdXAgNTMgcG1fbGFyeCwgTEFSWAorZXZlbnQ6MFgwMzUwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MQVJYX0dSUDUzIDogKEdyb3VwIDUzIHBtX2xhcngpIExhcnggZXhlY3V0ZWQKK2V2ZW50OjBYMDM1MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTEFSWF9MMUhJVF9HUlA1MyA6IChHcm91cCA1MyBwbV9sYXJ4KSBsYXJ4IGhpdHMgaW4gTDEKK2V2ZW50OjBYMDM1MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fU1RDWF9HUlA1MyA6IChHcm91cCA1MyBwbV9sYXJ4KSBTVENYIGV4ZWN1dGVkCitldmVudDowWDAzNTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1NUQ1hfRkFJTF9HUlA1MyA6IChHcm91cCA1MyBwbV9sYXJ4KSBTVENYIGZhaWxlZAorCisjR3JvdXAgNTQgcG1fdGhyZWFkX2N5YywgVGhyZWFkIGN5Y2xlcworZXZlbnQ6MFgwMzYwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9USFJEX09ORV9SVU5fQ1lDX0dSUDU0IDogKEdyb3VwIDU0IHBtX3RocmVhZF9jeWMpIE9uZSBvZiB0aGUgdGhyZWFkcyBpbiBydW4gY3ljbGVzCitldmVudDowWDAzNjEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1RIUkRfR1JQX0NNUExfQk9USF9DWUNfR1JQNTQgOiAoR3JvdXAgNTQgcG1fdGhyZWFkX2N5YykgQ3ljbGVzIGdyb3VwIGNvbXBsZXRlZCBieSBib3RoIHRocmVhZHMKK2V2ZW50OjBYMDM2MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fVEhSRF9DT05DX1JVTl9JTlNUX0dSUDU0IDogKEdyb3VwIDU0IHBtX3RocmVhZF9jeWMpIENvbmN1cnJlbnQgcnVuIGluc3RydWN0aW9ucworZXZlbnQ6MFgwMzYzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9USFJEX0JPVEhfUlVOX0NZQ19HUlA1NCA6IChHcm91cCA1NCBwbV90aHJlYWRfY3ljKSBCb3RoIHRocmVhZHMgaW4gcnVuIGN5Y2xlcworCisjR3JvdXAgNTUgcG1fbWlzYywgTWlzYworZXZlbnQ6MFgwMzcwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV8xUExVU19QUENfQ01QTF9HUlA1NSA6IChHcm91cCA1NSBwbV9taXNjKSBPbmUgb3IgbW9yZSBQUEMgaW5zdHJ1Y3Rpb24gY29tcGxldGVkCitldmVudDowWDAzNzEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0hWX0NZQ19HUlA1NSA6IChHcm91cCA1NSBwbV9taXNjKSBIeXBlcnZpc29yIEN5Y2xlcworZXZlbnQ6MFgwMzcyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9USFJFU0hfVElNRU9fR1JQNTUgOiAoR3JvdXAgNTUgcG1fbWlzYykgVGhyZXNob2xkIHRpbWVvdXQKK2V2ZW50OjBYMDM3MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fVEhSRF9MTEFfQk9USF9DWUNfR1JQNTUgOiAoR3JvdXAgNTUgcG1fbWlzYykgQm90aCB0aHJlYWRzIGluIExvYWQgTG9vayBBaGVhZAorCisjR3JvdXAgNTYgcG1fbWlzYzIsIE1pc2MKK2V2ZW50OjBYMDM4MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRUVfT0ZGX0VYVF9JTlRfR1JQNTYgOiAoR3JvdXAgNTYgcG1fbWlzYzIpIEN5Y2xlcyBNU1IoRUUpIGJpdCBvZmYgYW5kIGV4dGVybmFsIGludGVycnVwdCBwZW5kaW5nCitldmVudDowWDAzODEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0VYVF9JTlRfR1JQNTYgOiAoR3JvdXAgNTYgcG1fbWlzYzIpIEV4dGVybmFsIGludGVycnVwdHMKK2V2ZW50OjBYMDM4MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fVEJfQklUX1RSQU5TX0dSUDU2IDogKEdyb3VwIDU2IHBtX21pc2MyKSBUaW1lIEJhc2UgYml0IHRyYW5zaXRpb24KK2V2ZW50OjBYMDM4MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fMElOU1RfRkVUQ0hfR1JQNTYgOiAoR3JvdXAgNTYgcG1fbWlzYzIpIE5vIGluc3RydWN0aW9ucyBmZXRjaGVkCisKKyNHcm91cCA1NyBwbV9taXNjMywgTWlzYworZXZlbnQ6MFgwMzkwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9TVF9GSU5fR1JQNTcgOiAoR3JvdXAgNTcgcG1fbWlzYzMpIFN0b3JlIGluc3RydWN0aW9ucyBmaW5pc2hlZAorZXZlbnQ6MFgwMzkxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9USFJEX0wyTUlTU19HUlA1NyA6IChHcm91cCA1NyBwbV9taXNjMykgVGhyZWFkIGluIEwyIG1pc3MKK2V2ZW50OjBYMDM5MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlA1NyA6IChHcm91cCA1NyBwbV9taXNjMykgUHJvY2Vzc29yIGN5Y2xlcworZXZlbnQ6MFgwMzkzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDU3IDogKEdyb3VwIDU3IHBtX21pc2MzKSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCisKKyNHcm91cCA1OCBwbV90bGJfc2xiLCBUTEIgYW5kIFNMQiBldmVudHMKK2V2ZW50OjBYMDNBMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSVNMQl9NSVNTX0dSUDU4IDogKEdyb3VwIDU4IHBtX3RsYl9zbGIpIEluc3RydWN0aW9uIFNMQiBtaXNzZXMKK2V2ZW50OjBYMDNBMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRFNMQl9NSVNTX0dSUDU4IDogKEdyb3VwIDU4IHBtX3RsYl9zbGIpIERhdGEgU0xCIG1pc3NlcworZXZlbnQ6MFgwM0EyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9UTEJfUkVGX0dSUDU4IDogKEdyb3VwIDU4IHBtX3RsYl9zbGIpIFRMQiByZWZlcmVuY2UKK2V2ZW50OjBYMDNBMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSVRMQl9SRUZfR1JQNTggOiAoR3JvdXAgNTggcG1fdGxiX3NsYikgSW5zdHJ1Y3Rpb24gVExCIHJlZmVyZW5jZQorCisjR3JvdXAgNTkgcG1fc2xiX21pc3MsIFNMQiBNaXNzZXMKK2V2ZW50OjBYMDNCMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSVNMQl9NSVNTX0dSUDU5IDogKEdyb3VwIDU5IHBtX3NsYl9taXNzKSBJbnN0cnVjdGlvbiBTTEIgbWlzc2VzCitldmVudDowWDAzQjEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RTTEJfTUlTU19HUlA1OSA6IChHcm91cCA1OSBwbV9zbGJfbWlzcykgRGF0YSBTTEIgbWlzc2VzCitldmVudDowWDAzQjIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lFUkFUX01JU1NfR1JQNTkgOiAoR3JvdXAgNTkgcG1fc2xiX21pc3MpIElFUkFUIG1pc3MgY291bnQKK2V2ZW50OjBYMDNCMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fU0xCX01JU1NfR1JQNTkgOiAoR3JvdXAgNTkgcG1fc2xiX21pc3MpIFNMQiBtaXNzZXMKKworI0dyb3VwIDYwIHBtX3JlamVjdHMsIFJlamVjdCBldmVudHMKK2V2ZW50OjBYMDNDMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVX1JFSkVDVF9MMl9DT1JSX0dSUDYwIDogKEdyb3VwIDYwIHBtX3JlamVjdHMpIExTVSByZWplY3QgZHVlIHRvIEwyIGNvcnJlY3RhYmxlIGVycm9yCitldmVudDowWDAzQzEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9SRUpFQ1RfREVSQVRfTVBSRURfR1JQNjAgOiAoR3JvdXAgNjAgcG1fcmVqZWN0cykgTFNVIHJlamVjdCBkdWUgdG8gbWlzcHJlZGljdGVkIERFUkFUCitldmVudDowWDAzQzIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9SRUpFQ1RfRkFTVF9HUlA2MCA6IChHcm91cCA2MCBwbV9yZWplY3RzKSBMU1UgZmFzdCByZWplY3QKK2V2ZW50OjBYMDNDMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVX1JFSkVDVF9HUlA2MCA6IChHcm91cCA2MCBwbV9yZWplY3RzKSBMU1UgcmVqZWN0CisKKyNHcm91cCA2MSBwbV9yZWplY3RzMiwgUmVqZWN0IGV2ZW50cworZXZlbnQ6MFgwM0QwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1VfUkVKRUNUX0xIU19HUlA2MSA6IChHcm91cCA2MSBwbV9yZWplY3RzMikgTG9hZCBoaXQgc3RvcmUgcmVqZWN0CitldmVudDowWDAzRDEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9SRUpFQ1RfTEhTX0JPVEhfR1JQNjEgOiAoR3JvdXAgNjEgcG1fcmVqZWN0czIpIExvYWQgaGl0IHN0b3JlIHJlamVjdCBib3RoIHVuaXRzCitldmVudDowWDAzRDIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9SRUpFQ1RfRVhURVJOX0dSUDYxIDogKEdyb3VwIDYxIHBtX3JlamVjdHMyKSBMU1UgZXh0ZXJuYWwgcmVqZWN0IHJlcXVlc3QgCitldmVudDowWDAzRDMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9SRUpFQ1RfU1RFQUxfR1JQNjEgOiAoR3JvdXAgNjEgcG1fcmVqZWN0czIpIExTVSByZWplY3QgZHVlIHRvIHN0ZWFsCisKKyNHcm91cCA2MiBwbV9yZWplY3RzMywgUmVqZWN0IGV2ZW50cworZXZlbnQ6MFgwM0UwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1VfUkVKRUNUX1NUUV9GVUxMX0dSUDYyIDogKEdyb3VwIDYyIHBtX3JlamVjdHMzKSBMU1UgcmVqZWN0IGR1ZSB0byBzdG9yZSBxdWV1ZSBmdWxsCitldmVudDowWDAzRTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9SRUpFQ1RfU0xPV19HUlA2MiA6IChHcm91cCA2MiBwbV9yZWplY3RzMykgTFNVIHNsb3cgcmVqZWN0CitldmVudDowWDAzRTIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9SRUpFQ1RfTk9fU0NSQVRDSF9HUlA2MiA6IChHcm91cCA2MiBwbV9yZWplY3RzMykgTFNVIHJlamVjdCBkdWUgdG8gc2NyYXRjaCByZWdpc3RlciBub3QgYXZhaWxhYmxlCitldmVudDowWDAzRTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9SRUpFQ1RfUEFSVElBTF9TRUNUT1JfR1JQNjIgOiAoR3JvdXAgNjIgcG1fcmVqZWN0czMpIExTVSByZWplY3QgZHVlIHRvIHBhcnRpYWwgc2VjdG9yIHZhbGlkCisKKyNHcm91cCA2MyBwbV9yZWplY3RzNCwgVW5hbGlnbmVkIHN0b3JlIHJlamVjdHMKK2V2ZW50OjBYMDNGMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVX1JFSkVDVF9VU1RfQk9USF9HUlA2MyA6IChHcm91cCA2MyBwbV9yZWplY3RzNCkgVW5hbGlnbmVkIHN0b3JlIHJlamVjdCBib3RoIHVuaXRzCitldmVudDowWDAzRjEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9SRUpFQ1RfVVNUX0dSUDYzIDogKEdyb3VwIDYzIHBtX3JlamVjdHM0KSBVbmFsaWduZWQgc3RvcmUgcmVqZWN0CitldmVudDowWDAzRjIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVTBfUkVKRUNUX1VTVF9HUlA2MyA6IChHcm91cCA2MyBwbV9yZWplY3RzNCkgTFNVMCB1bmFsaWduZWQgc3RvcmUgcmVqZWN0CitldmVudDowWDAzRjMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVTFfUkVKRUNUX1VTVF9HUlA2MyA6IChHcm91cCA2MyBwbV9yZWplY3RzNCkgTFNVMSB1bmFsaWduZWQgc3RvcmUgcmVqZWN0CisKKyNHcm91cCA2NCBwbV9yZWplY3RzNSwgVW5hbGlnbmVkIGxvYWQgcmVqZWN0cworZXZlbnQ6MFgwNDAwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1VfUkVKRUNUX1VMRF9HUlA2NCA6IChHcm91cCA2NCBwbV9yZWplY3RzNSkgVW5hbGlnbmVkIGxvYWQgcmVqZWN0CitldmVudDowWDA0MDEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9SRUpFQ1RfVUxEX0JPVEhfR1JQNjQgOiAoR3JvdXAgNjQgcG1fcmVqZWN0czUpIFVuYWxpZ25lZCBsb2FkIHJlamVjdCBib3RoIHVuaXRzCitldmVudDowWDA0MDIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVTBfUkVKRUNUX1VMRF9HUlA2NCA6IChHcm91cCA2NCBwbV9yZWplY3RzNSkgTFNVMCB1bmFsaWduZWQgbG9hZCByZWplY3QKK2V2ZW50OjBYMDQwMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVMV9SRUpFQ1RfVUxEX0dSUDY0IDogKEdyb3VwIDY0IHBtX3JlamVjdHM1KSBMU1UxIHVuYWxpZ25lZCBsb2FkIHJlamVjdAorCisjR3JvdXAgNjUgcG1fcmVqZWN0czYsIFNldCBtaXNwcmVkaWN0aW9ucyByZWplY3RzCitldmVudDowWDA0MTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVTBfUkVKRUNUX1NFVF9NUFJFRF9HUlA2NSA6IChHcm91cCA2NSBwbV9yZWplY3RzNikgTFNVMCByZWplY3QgZHVlIHRvIG1pc3ByZWRpY3RlZCBzZXQKK2V2ZW50OjBYMDQxMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVMV9SRUpFQ1RfU0VUX01QUkVEX0dSUDY1IDogKEdyb3VwIDY1IHBtX3JlamVjdHM2KSBMU1UxIHJlamVjdCBkdWUgdG8gbWlzcHJlZGljdGVkIHNldAorZXZlbnQ6MFgwNDEyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1VfUkVKRUNUX1NFVF9NUFJFRF9HUlA2NSA6IChHcm91cCA2NSBwbV9yZWplY3RzNikgTFNVIHJlamVjdCBkdWUgdG8gbWlzcHJlZGljdGVkIHNldAorZXZlbnQ6MFgwNDEzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1VfU1JRX0VNUFRZX0NZQ19HUlA2NSA6IChHcm91cCA2NSBwbV9yZWplY3RzNikgQ3ljbGVzIFNSUSBlbXB0eQorCisjR3JvdXAgNjYgcG1fcmVqZWN0c191bml0LCBVbmFsaWduZWQgcmVqZWN0IGV2ZW50cyBieSB1bml0CitldmVudDowWDA0MjAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVTBfUkVKRUNUX1VMRF9HUlA2NiA6IChHcm91cCA2NiBwbV9yZWplY3RzX3VuaXQpIExTVTAgdW5hbGlnbmVkIGxvYWQgcmVqZWN0CitldmVudDowWDA0MjEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVTFfUkVKRUNUX1VTVF9HUlA2NiA6IChHcm91cCA2NiBwbV9yZWplY3RzX3VuaXQpIExTVTEgdW5hbGlnbmVkIHN0b3JlIHJlamVjdAorZXZlbnQ6MFgwNDIyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1UwX1JFSkVDVF9VU1RfR1JQNjYgOiAoR3JvdXAgNjYgcG1fcmVqZWN0c191bml0KSBMU1UwIHVuYWxpZ25lZCBzdG9yZSByZWplY3QKK2V2ZW50OjBYMDQyMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVMV9SRUpFQ1RfVUxEX0dSUDY2IDogKEdyb3VwIDY2IHBtX3JlamVjdHNfdW5pdCkgTFNVMSB1bmFsaWduZWQgbG9hZCByZWplY3QKKworI0dyb3VwIDY3IHBtX3JlamVjdHNfdW5pdDIsIFJlamVjdCBldmVudHMgYnkgdW5pdAorZXZlbnQ6MFgwNDMwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1UwX1JFSkVDVF9HUlA2NyA6IChHcm91cCA2NyBwbV9yZWplY3RzX3VuaXQyKSBMU1UwIHJlamVjdAorZXZlbnQ6MFgwNDMxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1UwX1JFSkVDVF9ERVJBVF9NUFJFRF9HUlA2NyA6IChHcm91cCA2NyBwbV9yZWplY3RzX3VuaXQyKSBMU1UwIHJlamVjdCBkdWUgdG8gbWlzcHJlZGljdGVkIERFUkFUCitldmVudDowWDA0MzIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVTFfUkVKRUNUX0dSUDY3IDogKEdyb3VwIDY3IHBtX3JlamVjdHNfdW5pdDIpIExTVTEgcmVqZWN0CitldmVudDowWDA0MzMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVTFfUkVKRUNUX05PX1NDUkFUQ0hfR1JQNjcgOiAoR3JvdXAgNjcgcG1fcmVqZWN0c191bml0MikgTFNVMSByZWplY3QgZHVlIHRvIHNjcmF0Y2ggcmVnaXN0ZXIgbm90IGF2YWlsYWJsZQorCisjR3JvdXAgNjggcG1fcmVqZWN0c191bml0MywgUmVqZWN0IGV2ZW50cyBieSB1bml0CitldmVudDowWDA0NDAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVTBfUkVKRUNUX0VYVEVSTl9HUlA2OCA6IChHcm91cCA2OCBwbV9yZWplY3RzX3VuaXQzKSBMU1UwIGV4dGVybmFsIHJlamVjdCByZXF1ZXN0IAorZXZlbnQ6MFgwNDQxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1UwX1JFSkVDVF9MMl9DT1JSX0dSUDY4IDogKEdyb3VwIDY4IHBtX3JlamVjdHNfdW5pdDMpIExTVTAgcmVqZWN0IGR1ZSB0byBMMiBjb3JyZWN0YWJsZSBlcnJvcgorZXZlbnQ6MFgwNDQyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1UxX1JFSkVDVF9FWFRFUk5fR1JQNjggOiAoR3JvdXAgNjggcG1fcmVqZWN0c191bml0MykgTFNVMSBleHRlcm5hbCByZWplY3QgcmVxdWVzdCAKK2V2ZW50OjBYMDQ0MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVMV9SRUpFQ1RfTDJfQ09SUl9HUlA2OCA6IChHcm91cCA2OCBwbV9yZWplY3RzX3VuaXQzKSBMU1UxIHJlamVjdCBkdWUgdG8gTDIgY29ycmVjdGFibGUgZXJyb3IKKworI0dyb3VwIDY5IHBtX3JlamVjdHNfdW5pdDQsIFJlamVjdCBldmVudHMgYnkgdW5pdAorZXZlbnQ6MFgwNDUwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1UwX1JFSkVDVF9OT19TQ1JBVENIX0dSUDY5IDogKEdyb3VwIDY5IHBtX3JlamVjdHNfdW5pdDQpIExTVTAgcmVqZWN0IGR1ZSB0byBzY3JhdGNoIHJlZ2lzdGVyIG5vdCBhdmFpbGFibGUKK2V2ZW50OjBYMDQ1MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVMF9SRUpFQ1RfUEFSVElBTF9TRUNUT1JfR1JQNjkgOiAoR3JvdXAgNjkgcG1fcmVqZWN0c191bml0NCkgTFNVMCByZWplY3QgZHVlIHRvIHBhcnRpYWwgc2VjdG9yIHZhbGlkCitldmVudDowWDA0NTIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVTFfUkVKRUNUX05PX1NDUkFUQ0hfR1JQNjkgOiAoR3JvdXAgNjkgcG1fcmVqZWN0c191bml0NCkgTFNVMSByZWplY3QgZHVlIHRvIHNjcmF0Y2ggcmVnaXN0ZXIgbm90IGF2YWlsYWJsZQorZXZlbnQ6MFgwNDUzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1UxX1JFSkVDVF9QQVJUSUFMX1NFQ1RPUl9HUlA2OSA6IChHcm91cCA2OSBwbV9yZWplY3RzX3VuaXQ0KSBMU1UxIHJlamVjdCBkdWUgdG8gcGFydGlhbCBzZWN0b3IgdmFsaWQKKworI0dyb3VwIDcwIHBtX3JlamVjdHNfdW5pdDUsIFJlamVjdCBldmVudHMgYnkgdW5pdAorZXZlbnQ6MFgwNDYwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1UwX1JFSkVDVF9MSFNfR1JQNzAgOiAoR3JvdXAgNzAgcG1fcmVqZWN0c191bml0NSkgTFNVMCBsb2FkIGhpdCBzdG9yZSByZWplY3QKK2V2ZW50OjBYMDQ2MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVMF9ERVJBVF9NSVNTX0dSUDcwIDogKEdyb3VwIDcwIHBtX3JlamVjdHNfdW5pdDUpIExTVTAgREVSQVQgbWlzc2VzCitldmVudDowWDA0NjIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVTFfUkVKRUNUX0xIU19HUlA3MCA6IChHcm91cCA3MCBwbV9yZWplY3RzX3VuaXQ1KSBMU1UxIGxvYWQgaGl0IHN0b3JlIHJlamVjdAorZXZlbnQ6MFgwNDYzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1UxX0RFUkFUX01JU1NfR1JQNzAgOiAoR3JvdXAgNzAgcG1fcmVqZWN0c191bml0NSkgTFNVMSBERVJBVCBtaXNzZXMKKworI0dyb3VwIDcxIHBtX3JlamVjdHNfdW5pdDYsIFJlamVjdCBldmVudHMgYnkgdW5pdAorZXZlbnQ6MFgwNDcwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1UwX1JFSkVDVF9TVFFfRlVMTF9HUlA3MSA6IChHcm91cCA3MSBwbV9yZWplY3RzX3VuaXQ2KSBMU1UwIHJlamVjdCBkdWUgdG8gc3RvcmUgcXVldWUgZnVsbAorZXZlbnQ6MFgwNDcxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1UwX1JFSkVDVF9HUlA3MSA6IChHcm91cCA3MSBwbV9yZWplY3RzX3VuaXQ2KSBMU1UwIHJlamVjdAorZXZlbnQ6MFgwNDcyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1UxX1JFSkVDVF9TVFFfRlVMTF9HUlA3MSA6IChHcm91cCA3MSBwbV9yZWplY3RzX3VuaXQ2KSBMU1UxIHJlamVjdCBkdWUgdG8gc3RvcmUgcXVldWUgZnVsbAorZXZlbnQ6MFgwNDczIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1UxX1JFSkVDVF9HUlA3MSA6IChHcm91cCA3MSBwbV9yZWplY3RzX3VuaXQ2KSBMU1UxIHJlamVjdAorCisjR3JvdXAgNzIgcG1fcmVqZWN0c191bml0NywgUmVqZWN0IGV2ZW50cyBieSB1bml0CitldmVudDowWDA0ODAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVTBfUkVKRUNUX0RFUkFUX01QUkVEX0dSUDcyIDogKEdyb3VwIDcyIHBtX3JlamVjdHNfdW5pdDcpIExTVTAgcmVqZWN0IGR1ZSB0byBtaXNwcmVkaWN0ZWQgREVSQVQKK2V2ZW50OjBYMDQ4MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVMF9ERVJBVF9NSVNTX0dSUDcyIDogKEdyb3VwIDcyIHBtX3JlamVjdHNfdW5pdDcpIExTVTAgREVSQVQgbWlzc2VzCitldmVudDowWDA0ODIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVTFfUkVKRUNUX0RFUkFUX01QUkVEX0dSUDcyIDogKEdyb3VwIDcyIHBtX3JlamVjdHNfdW5pdDcpIExTVTEgcmVqZWN0IGR1ZSB0byBtaXNwcmVkaWN0ZWQgREVSQVQKK2V2ZW50OjBYMDQ4MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVMV9ERVJBVF9NSVNTX0dSUDcyIDogKEdyb3VwIDcyIHBtX3JlamVjdHNfdW5pdDcpIExTVTEgREVSQVQgbWlzc2VzCisKKyNHcm91cCA3MyBwbV9sZGYsIEZsb2F0aW5nIFBvaW50IGxvYWRzCitldmVudDowWDA0OTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9MREZfQk9USF9HUlA3MyA6IChHcm91cCA3MyBwbV9sZGYpIEJvdGggTFNVIHVuaXRzIGV4ZWN1dGVkIEZsb2F0aW5nIFBvaW50IGxvYWQgaW5zdHJ1Y3Rpb24KK2V2ZW50OjBYMDQ5MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVX0xERl9HUlA3MyA6IChHcm91cCA3MyBwbV9sZGYpIExTVSBleGVjdXRlZCBGbG9hdGluZyBQb2ludCBsb2FkIGluc3RydWN0aW9uCitldmVudDowWDA0OTIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVTBfTERGX0dSUDczIDogKEdyb3VwIDczIHBtX2xkZikgTFNVMCBleGVjdXRlZCBGbG9hdGluZyBQb2ludCBsb2FkIGluc3RydWN0aW9uCitldmVudDowWDA0OTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVTFfTERGX0dSUDczIDogKEdyb3VwIDczIHBtX2xkZikgTFNVMSBleGVjdXRlZCBGbG9hdGluZyBQb2ludCBsb2FkIGluc3RydWN0aW9uCisKKyNHcm91cCA3NCBwbV9sc3VfbWlzYywgTFNVIGV2ZW50cworZXZlbnQ6MFgwNEEwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1UwX05DTERfR1JQNzQgOiAoR3JvdXAgNzQgcG1fbHN1X21pc2MpIExTVTAgbm9uLWNhY2hlYWJsZSBsb2FkcworZXZlbnQ6MFgwNEExIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1UwX05DU1RfR1JQNzQgOiAoR3JvdXAgNzQgcG1fbHN1X21pc2MpIExTVTAgbm9uLWNhY2hhYmxlIHN0b3JlcworZXZlbnQ6MFgwNEEyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1VfU1RfQ0hBSU5FRF9HUlA3NCA6IChHcm91cCA3NCBwbV9sc3VfbWlzYykgbnVtYmVyIG9mIGNoYWluZWQgc3RvcmVzCitldmVudDowWDA0QTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9CT1RIX0JVU19HUlA3NCA6IChHcm91cCA3NCBwbV9sc3VfbWlzYykgQm90aCBkYXRhIHJldHVybiBidXNlcyBidXN5IHNpbXVsdGFuZW91c2x5CisKKyNHcm91cCA3NSBwbV9sc3VfbG1xLCBMU1UgTE1RIGV2ZW50cworZXZlbnQ6MFgwNEIwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1VfTE1RX0ZVTExfQ1lDX0dSUDc1IDogKEdyb3VwIDc1IHBtX2xzdV9sbXEpIEN5Y2xlcyBMTVEgZnVsbAorZXZlbnQ6MFgwNEIxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1VfTE1RX1NSUV9FTVBUWV9DWUNfR1JQNzUgOiAoR3JvdXAgNzUgcG1fbHN1X2xtcSkgQ3ljbGVzIExNUSBhbmQgU1JRIGVtcHR5CitldmVudDowWDA0QjIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9MTVFfU1JRX0VNUFRZX0JPVEhfQ1lDX0dSUDc1IDogKEdyb3VwIDc1IHBtX2xzdV9sbXEpIEN5Y2xlcyBib3RoIHRocmVhZHMgTE1RIGFuZCBTUlEgZW1wdHkKK2V2ZW50OjBYMDRCMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVMF9SRUpFQ1RfTDJNSVNTX0dSUDc1IDogKEdyb3VwIDc1IHBtX2xzdV9sbXEpIExTVTAgTDIgbWlzcyByZWplY3QKKworI0dyb3VwIDc2IHBtX2xzdV9mbHVzaF9kZXJhdF9taXNzLCBMU1UgZmx1c2ggYW5kIERFUkFUIG1pc3NlcworZXZlbnQ6MFgwNEMwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1VfREVSQVRfTUlTU19DWUNfR1JQNzYgOiAoR3JvdXAgNzYgcG1fbHN1X2ZsdXNoX2RlcmF0X21pc3MpIERFUkFUIG1pc3MgbGF0ZW5jeQorZXZlbnQ6MFgwNEMxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1VfREVSQVRfTUlTU19HUlA3NiA6IChHcm91cCA3NiBwbV9sc3VfZmx1c2hfZGVyYXRfbWlzcykgREVSQVQgbWlzc2VzCitldmVudDowWDA0QzIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9GTFVTSF9BTElHTl9HUlA3NiA6IChHcm91cCA3NiBwbV9sc3VfZmx1c2hfZGVyYXRfbWlzcykgRmx1c2ggY2F1c2VkIGJ5IGFsaWduZW1lbnQgZXhjZXB0aW9uCitldmVudDowWDA0QzMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9GTFVTSF9EU0lfR1JQNzYgOiAoR3JvdXAgNzYgcG1fbHN1X2ZsdXNoX2RlcmF0X21pc3MpIEZsdXNoIGNhdXNlZCBieSBEU0kKKworI0dyb3VwIDc3IHBtX2xsYSwgTG9vayBMb2FkIEFoZWFkIGV2ZW50cworZXZlbnQ6MFgwNEQwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JTlNUX0RJU1BfTExBX0dSUDc3IDogKEdyb3VwIDc3IHBtX2xsYSkgSW5zdHJ1Y3Rpb24gZGlzcGF0Y2hlZCB1bmRlciBsb2FkIGxvb2sgYWhlYWQKK2V2ZW50OjBYMDREMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRFBVX0hFTERfTExBX0VORF9HUlA3NyA6IChHcm91cCA3NyBwbV9sbGEpIERJU1AgdW5pdCBoZWxkIGR1ZSB0byBsb2FkIGxvb2sgYWhlYWQgZW5kZWQKK2V2ZW50OjBYMDREMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU5TVF9ESVNQX0dSUDc3IDogKEdyb3VwIDc3IHBtX2xsYSkgSW5zdHJ1Y3Rpb25zIGRpc3BhdGNoZWQKK2V2ZW50OjBYMDREMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fVEhSRF9MTEFfQk9USF9DWUNfR1JQNzcgOiAoR3JvdXAgNzcgcG1fbGxhKSBCb3RoIHRocmVhZHMgaW4gTG9hZCBMb29rIEFoZWFkCisKKyNHcm91cCA3OCBwbV9nY3QsIEdDVCBldmVudHMKK2V2ZW50OjBYMDRFMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fR0NUX05PU0xPVF9DWUNfR1JQNzggOiAoR3JvdXAgNzggcG1fZ2N0KSBDeWNsZXMgbm8gR0NUIHNsb3QgYWxsb2NhdGVkCitldmVudDowWDA0RTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0dDVF9FTVBUWV9DWUNfR1JQNzggOiAoR3JvdXAgNzggcG1fZ2N0KSBDeWNsZXMgR0NUIGVtcHR5CitldmVudDowWDA0RTIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0dDVF9GVUxMX0NZQ19HUlA3OCA6IChHcm91cCA3OCBwbV9nY3QpIEN5Y2xlcyBHQ1QgZnVsbAorZXZlbnQ6MFgwNEUzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JTlNUX0ZFVENIX0NZQ19HUlA3OCA6IChHcm91cCA3OCBwbV9nY3QpIEN5Y2xlcyBhdCBsZWFzdCAxIGluc3RydWN0aW9uIGZldGNoZWQKKworI0dyb3VwIDc5IHBtX3NtdF9wcmlvcml0aWVzLCBUaHJlYWQgcHJpb3JpdHkgZXZlbnRzCitldmVudDowWDA0RjAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1RIUkRfUFJJT18wX0NZQ19HUlA3OSA6IChHcm91cCA3OSBwbV9zbXRfcHJpb3JpdGllcykgQ3ljbGVzIHRocmVhZCBydW5uaW5nIGF0IHByaW9yaXR5IGxldmVsIDAKK2V2ZW50OjBYMDRGMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fVEhSRF9QUklPXzFfQ1lDX0dSUDc5IDogKEdyb3VwIDc5IHBtX3NtdF9wcmlvcml0aWVzKSBDeWNsZXMgdGhyZWFkIHJ1bm5pbmcgYXQgcHJpb3JpdHkgbGV2ZWwgMQorZXZlbnQ6MFgwNEYyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9USFJEX1BSSU9fMl9DWUNfR1JQNzkgOiAoR3JvdXAgNzkgcG1fc210X3ByaW9yaXRpZXMpIEN5Y2xlcyB0aHJlYWQgcnVubmluZyBhdCBwcmlvcml0eSBsZXZlbCAyCitldmVudDowWDA0RjMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1RIUkRfUFJJT18zX0NZQ19HUlA3OSA6IChHcm91cCA3OSBwbV9zbXRfcHJpb3JpdGllcykgQ3ljbGVzIHRocmVhZCBydW5uaW5nIGF0IHByaW9yaXR5IGxldmVsIDMKKworI0dyb3VwIDgwIHBtX3NtdF9wcmlvcml0aWVzMiwgVGhyZWFkIHByaW9yaXR5IGV2ZW50cworZXZlbnQ6MFgwNTAwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9USFJEX1BSSU9fN19DWUNfR1JQODAgOiAoR3JvdXAgODAgcG1fc210X3ByaW9yaXRpZXMyKSBDeWNsZXMgdGhyZWFkIHJ1bm5pbmcgYXQgcHJpb3JpdHkgbGV2ZWwgNworZXZlbnQ6MFgwNTAxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9USFJEX1BSSU9fNl9DWUNfR1JQODAgOiAoR3JvdXAgODAgcG1fc210X3ByaW9yaXRpZXMyKSBDeWNsZXMgdGhyZWFkIHJ1bm5pbmcgYXQgcHJpb3JpdHkgbGV2ZWwgNgorZXZlbnQ6MFgwNTAyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9USFJEX1BSSU9fNV9DWUNfR1JQODAgOiAoR3JvdXAgODAgcG1fc210X3ByaW9yaXRpZXMyKSBDeWNsZXMgdGhyZWFkIHJ1bm5pbmcgYXQgcHJpb3JpdHkgbGV2ZWwgNQorZXZlbnQ6MFgwNTAzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9USFJEX1BSSU9fNF9DWUNfR1JQODAgOiAoR3JvdXAgODAgcG1fc210X3ByaW9yaXRpZXMyKSBDeWNsZXMgdGhyZWFkIHJ1bm5pbmcgYXQgcHJpb3JpdHkgbGV2ZWwgNAorCisjR3JvdXAgODEgcG1fc210X3ByaW9yaXRpZXMzLCBUaHJlYWQgcHJpb3JpdHkgZGlmZmVyZW5jZXMgZXZlbnRzCitldmVudDowWDA1MTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1RIUkRfUFJJT19ESUZGXzBfQ1lDX0dSUDgxIDogKEdyb3VwIDgxIHBtX3NtdF9wcmlvcml0aWVzMykgQ3ljbGVzIG5vIHRocmVhZCBwcmlvcml0eSBkaWZmZXJlbmNlCitldmVudDowWDA1MTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1RIUkRfUFJJT19ESUZGXzFvcjJfQ1lDX0dSUDgxIDogKEdyb3VwIDgxIHBtX3NtdF9wcmlvcml0aWVzMykgQ3ljbGVzIHRocmVhZCBwcmlvcml0eSBkaWZmZXJlbmNlIGlzIDEgb3IgMgorZXZlbnQ6MFgwNTEyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9USFJEX1BSSU9fRElGRl8zb3I0X0NZQ19HUlA4MSA6IChHcm91cCA4MSBwbV9zbXRfcHJpb3JpdGllczMpIEN5Y2xlcyB0aHJlYWQgcHJpb3JpdHkgZGlmZmVyZW5jZSBpcyAzIG9yIDQKK2V2ZW50OjBYMDUxMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fVEhSRF9QUklPX0RJRkZfNW9yNl9DWUNfR1JQODEgOiAoR3JvdXAgODEgcG1fc210X3ByaW9yaXRpZXMzKSBDeWNsZXMgdGhyZWFkIHByaW9yaXR5IGRpZmZlcmVuY2UgaXMgNSBvciA2CisKKyNHcm91cCA4MiBwbV9zbXRfcHJpb3JpdGllczQsIFRocmVhZCBwcmlvcml0eSBkaWZmZXJlbmNlcyBldmVudHMKK2V2ZW50OjBYMDUyMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fVEhSRF9TRUxfVDBfR1JQODIgOiAoR3JvdXAgODIgcG1fc210X3ByaW9yaXRpZXM0KSBEZWNvZGUgc2VsZWN0ZWQgdGhyZWFkIDAKK2V2ZW50OjBYMDUyMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fVEhSRF9QUklPX0RJRkZfbWludXMxb3IyX0NZQ19HUlA4MiA6IChHcm91cCA4MiBwbV9zbXRfcHJpb3JpdGllczQpIEN5Y2xlcyB0aHJlYWQgcHJpb3JpdHkgZGlmZmVyZW5jZSBpcyAtMSBvciAtMgorZXZlbnQ6MFgwNTIyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9USFJEX1BSSU9fRElGRl9taW51czNvcjRfQ1lDX0dSUDgyIDogKEdyb3VwIDgyIHBtX3NtdF9wcmlvcml0aWVzNCkgQ3ljbGVzIHRocmVhZCBwcmlvcml0eSBkaWZmZXJlbmNlIGlzIC0zIG9yIC00CitldmVudDowWDA1MjMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1RIUkRfUFJJT19ESUZGX21pbnVzNW9yNl9DWUNfR1JQODIgOiAoR3JvdXAgODIgcG1fc210X3ByaW9yaXRpZXM0KSBDeWNsZXMgdGhyZWFkIHByaW9yaXR5IGRpZmZlcmVuY2UgaXMgLTUgb3IgLTYKKworI0dyb3VwIDgzIHBtX2Z4dSwgRlhVIGV2ZW50cworZXZlbnQ6MFgwNTMwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GWFVfSURMRV9HUlA4MyA6IChHcm91cCA4MyBwbV9meHUpIEZYVSBpZGxlCitldmVudDowWDA1MzEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZYVV9CVVNZX0dSUDgzIDogKEdyb3VwIDgzIHBtX2Z4dSkgRlhVIGJ1c3kKK2V2ZW50OjBYMDUzMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlhVMF9CVVNZX0ZYVTFfSURMRV9HUlA4MyA6IChHcm91cCA4MyBwbV9meHUpIEZYVTAgYnVzeSBGWFUxIGlkbGUKK2V2ZW50OjBYMDUzMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlhVMV9CVVNZX0ZYVTBfSURMRV9HUlA4MyA6IChHcm91cCA4MyBwbV9meHUpIEZYVTEgYnVzeSBGWFUwIGlkbGUKKworI0dyb3VwIDg0IHBtX2Z4dTIsIEZYVSBldmVudHMKK2V2ZW50OjBYMDU0MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlhVX1BJUEVMSU5FRF9NVUxUX0RJVl9HUlA4NCA6IChHcm91cCA4NCBwbV9meHUyKSBGaXggcG9pbnQgbXVsdGlwbHkvZGl2aWRlIHBpcGVsaW5lZAorZXZlbnQ6MFgwNTQxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JRlVfRklOX0dSUDg0IDogKEdyb3VwIDg0IHBtX2Z4dTIpIElGVSBmaW5pc2hlZCBhbiBpbnN0cnVjdGlvbgorZXZlbnQ6MFgwNTQyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GWFUwX0ZJTl9HUlA4NCA6IChHcm91cCA4NCBwbV9meHUyKSBGWFUwIHByb2R1Y2VkIGEgcmVzdWx0CitldmVudDowWDA1NDMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZYVTFfRklOX0dSUDg0IDogKEdyb3VwIDg0IHBtX2Z4dTIpIEZYVTEgcHJvZHVjZWQgYSByZXN1bHQKKworI0dyb3VwIDg1IHBtX3ZteCwgVk1YIGV2ZW50cworZXZlbnQ6MFgwNTUwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9WTVhfQ09NUExFWF9JU1VFRF9HUlA4NSA6IChHcm91cCA4NSBwbV92bXgpIFZNWCBpbnN0cnVjdGlvbiBpc3N1ZWQgdG8gY29tcGxleAorZXZlbnQ6MFgwNTUxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9WTVhfRkxPQVRfSVNTVUVEX0dSUDg1IDogKEdyb3VwIDg1IHBtX3ZteCkgVk1YIGluc3RydWN0aW9uIGlzc3VlZCB0byBmbG9hdAorZXZlbnQ6MFgwNTUyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9WTVhfU0lNUExFX0lTU1VFRF9HUlA4NSA6IChHcm91cCA4NSBwbV92bXgpIFZNWCBpbnN0cnVjdGlvbiBpc3N1ZWQgdG8gc2ltcGxlCitldmVudDowWDA1NTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1ZNWF9QRVJNVVRFX0lTU1VFRF9HUlA4NSA6IChHcm91cCA4NSBwbV92bXgpIFZNWCBpbnN0cnVjdGlvbiBpc3N1ZWQgdG8gcGVybXV0ZQorCisjR3JvdXAgODYgcG1fdm14MiwgVk1YIGV2ZW50cworZXZlbnQ6MFgwNTYwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9WTVgwX0lOU1RfSVNTVUVEX0dSUDg2IDogKEdyb3VwIDg2IHBtX3ZteDIpIFZNWDAgaW5zdHJ1Y3Rpb24gaXNzdWVkCitldmVudDowWDA1NjEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1ZNWDFfSU5TVF9JU1NVRURfR1JQODYgOiAoR3JvdXAgODYgcG1fdm14MikgVk1YMSBpbnN0cnVjdGlvbiBpc3N1ZWQKK2V2ZW50OjBYMDU2MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fVk1YMF9MRF9JU1NVRURfR1JQODYgOiAoR3JvdXAgODYgcG1fdm14MikgVk1YMCBsb2FkIGlzc3VlZAorZXZlbnQ6MFgwNTYzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9WTVgxX0xEX0lTU1VFRF9HUlA4NiA6IChHcm91cCA4NiBwbV92bXgyKSBWTVgxIGxvYWQgaXNzdWVkCisKKyNHcm91cCA4NyBwbV92bXgzLCBWTVggZXZlbnRzCitldmVudDowWDA1NzAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1ZNWDBfTERfSVNTVUVEX0dSUDg3IDogKEdyb3VwIDg3IHBtX3ZteDMpIFZNWDAgbG9hZCBpc3N1ZWQKK2V2ZW50OjBYMDU3MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fVk1YMF9MRF9XUkJBQ0tfR1JQODcgOiAoR3JvdXAgODcgcG1fdm14MykgVk1YMCBsb2FkIHdyaXRlYmFjayB2YWxpZAorZXZlbnQ6MFgwNTcyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9WTVgxX0xEX0lTU1VFRF9HUlA4NyA6IChHcm91cCA4NyBwbV92bXgzKSBWTVgxIGxvYWQgaXNzdWVkCitldmVudDowWDA1NzMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1ZNWDFfTERfV1JCQUNLX0dSUDg3IDogKEdyb3VwIDg3IHBtX3ZteDMpIFZNWDEgbG9hZCB3cml0ZWJhY2sgdmFsaWQKKworI0dyb3VwIDg4IHBtX3ZteDQsIFZNWCBldmVudHMKK2V2ZW50OjBYMDU4MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fVk1YX0ZMT0FUX01VTFRJQ1lDTEVfR1JQODggOiAoR3JvdXAgODggcG1fdm14NCkgVk1YIG11bHRpLWN5Y2xlIGZsb2F0aW5nIHBvaW50IGluc3RydWN0aW9uIGlzc3VlZAorZXZlbnQ6MFgwNTgxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9WTVhfUkVTVUxUX1NBVF8wXzFfR1JQODggOiAoR3JvdXAgODggcG1fdm14NCkgVk1YIHZhbGlkIHJlc3VsdCB3aXRoIHNhdCBiaXQgaXMgc2V0ICgwLT4xKQorZXZlbnQ6MFgwNTgyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9WTVhfUkVTVUxUX1NBVF8xX0dSUDg4IDogKEdyb3VwIDg4IHBtX3ZteDQpIFZNWCB2YWxpZCByZXN1bHQgd2l0aCBzYXQ9MQorZXZlbnQ6MFgwNTgzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9WTVhfU1RfSVNTVUVEX0dSUDg4IDogKEdyb3VwIDg4IHBtX3ZteDQpIFZNWCBzdG9yZSBpc3N1ZWQKKworI0dyb3VwIDg5IHBtX3ZteDUsIFZNWCBldmVudHMKK2V2ZW50OjBYMDU5MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fVk1YX1NUX0lTU1VFRF9HUlA4OSA6IChHcm91cCA4OSBwbV92bXg1KSBWTVggc3RvcmUgaXNzdWVkCitldmVudDowWDA1OTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1ZNWDBfU1RBTExfR1JQODkgOiAoR3JvdXAgODkgcG1fdm14NSkgVk1YMCBzdGFsbAorZXZlbnQ6MFgwNTkyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9WTVgxX1NUQUxMX0dSUDg5IDogKEdyb3VwIDg5IHBtX3ZteDUpIFZNWDEgc3RhbGwKK2V2ZW50OjBYMDU5MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fVk1YX0ZMT0FUX01VTFRJQ1lDTEVfR1JQODkgOiAoR3JvdXAgODkgcG1fdm14NSkgVk1YIG11bHRpLWN5Y2xlIGZsb2F0aW5nIHBvaW50IGluc3RydWN0aW9uIGlzc3VlZAorCisjR3JvdXAgOTAgcG1fZGZ1LCBERlUgZXZlbnRzCitldmVudDowWDA1QTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RGVV9BRERfR1JQOTAgOiAoR3JvdXAgOTAgcG1fZGZ1KSBERlUgYWRkIHR5cGUgaW5zdHJ1Y3Rpb24KK2V2ZW50OjBYMDVBMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fREZVX0FERF9TSElGVEVEX0JPVEhfR1JQOTAgOiAoR3JvdXAgOTAgcG1fZGZ1KSBERlUgYWRkIHR5cGUgd2l0aCBib3RoIG9wZXJhbmRzIHNoaWZ0ZWQKK2V2ZW50OjBYMDVBMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fREZVX0JBQ0syQkFDS19HUlA5MCA6IChHcm91cCA5MCBwbV9kZnUpIERGVSBiYWNrIHRvIGJhY2sgb3BlcmF0aW9ucyBleGVjdXRlZAorZXZlbnQ6MFgwNUEzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9ERlVfQ09OVl9HUlA5MCA6IChHcm91cCA5MCBwbV9kZnUpIERGVSBjb252ZXJ0IGZyb20gZml4ZWQgb3AKKworI0dyb3VwIDkxIHBtX2RmdTIsIERGVSBldmVudHMKK2V2ZW50OjBYMDVCMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fREZVX0VOQ19CQ0RfRFBEX0dSUDkxIDogKEdyb3VwIDkxIHBtX2RmdTIpIERGVSBFbmNvZGUgQkNEIHRvIERQRAorZXZlbnQ6MFgwNUIxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9ERlVfRVhQX0VRX0dSUDkxIDogKEdyb3VwIDkxIHBtX2RmdTIpIERGVSBvcGVyYW5kIGV4cG9uZW50cyBhcmUgZXF1YWwgZm9yIGFkZCB0eXBlCitldmVudDowWDA1QjIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RGVV9GSU5fR1JQOTEgOiAoR3JvdXAgOTEgcG1fZGZ1MikgREZVIGluc3RydWN0aW9uIGZpbmlzaAorZXZlbnQ6MFgwNUIzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9ERlVfU1VCTk9STV9HUlA5MSA6IChHcm91cCA5MSBwbV9kZnUyKSBERlUgcmVzdWx0IGlzIGEgc3Vibm9ybWFsCisKKyNHcm91cCA5MiBwbV9mYWIsIEZhYnJpYyBldmVudHMKK2V2ZW50OjBYMDVDMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRkFCX0NNRF9JU1NVRURfR1JQOTIgOiAoR3JvdXAgOTIgcG1fZmFiKSBGYWJyaWMgY29tbWFuZCBpc3N1ZWQKK2V2ZW50OjBYMDVDMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRkFCX0NNRF9SRVRSSUVEX0dSUDkyIDogKEdyb3VwIDkyIHBtX2ZhYikgRmFicmljIGNvbW1hbmQgcmV0cmllZAorZXZlbnQ6MFgwNUMyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GQUJfRENMQUlNX0dSUDkyIDogKEdyb3VwIDkyIHBtX2ZhYikgRGNsYWltIG9wZXJhdGlvbiwgbG9jYWxseSBtYXN0ZXJlZAorZXZlbnQ6MFgwNUMzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GQUJfRE1BX0dSUDkyIDogKEdyb3VwIDkyIHBtX2ZhYikgRE1BIG9wZXJhdGlvbiwgbG9jYWxseSBtYXN0ZXJlZAorCisjR3JvdXAgOTMgcG1fZmFiMiwgRmFicmljIGV2ZW50cworZXZlbnQ6MFgwNUQwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GQUJfTk9ERV9QVU1QX0dSUDkzIDogKEdyb3VwIDkzIHBtX2ZhYjIpIE5vZGUgcHVtcCBvcGVyYXRpb24sIGxvY2FsbHkgbWFzdGVyZWQKK2V2ZW50OjBYMDVEMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRkFCX1JFVFJZX05PREVfUFVNUF9HUlA5MyA6IChHcm91cCA5MyBwbV9mYWIyKSBSZXRyeSBvZiBhIG5vZGUgcHVtcCwgbG9jYWxseSBtYXN0ZXJlZAorZXZlbnQ6MFgwNUQyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GQUJfUkVUUllfU1lTX1BVTVBfR1JQOTMgOiAoR3JvdXAgOTMgcG1fZmFiMikgUmV0cnkgb2YgYSBzeXN0ZW0gcHVtcCwgbG9jYWxseSBtYXN0ZXJlZCAgCitldmVudDowWDA1RDMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZBQl9TWVNfUFVNUF9HUlA5MyA6IChHcm91cCA5MyBwbV9mYWIyKSBTeXN0ZW0gcHVtcCBvcGVyYXRpb24sIGxvY2FsbHkgbWFzdGVyZWQKKworI0dyb3VwIDk0IHBtX2ZhYjMsIEZhYnJpYyBldmVudHMKK2V2ZW50OjBYMDVFMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRkFCX0NNRF9JU1NVRURfR1JQOTQgOiAoR3JvdXAgOTQgcG1fZmFiMykgRmFicmljIGNvbW1hbmQgaXNzdWVkCitldmVudDowWDA1RTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZBQl9DTURfUkVUUklFRF9HUlA5NCA6IChHcm91cCA5NCBwbV9mYWIzKSBGYWJyaWMgY29tbWFuZCByZXRyaWVkCitldmVudDowWDA1RTIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZBQl9BRERSX0NPTExJU0lPTl9HUlA5NCA6IChHcm91cCA5NCBwbV9mYWIzKSBsb2NhbCBub2RlIGxhdW5jaCBjb2xsaXNpb24gd2l0aCBvZmYtbm9kZSBhZGRyZXNzICAgCitldmVudDowWDA1RTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZBQl9NTUlPX0dSUDk0IDogKEdyb3VwIDk0IHBtX2ZhYjMpIE1NSU8gb3BlcmF0aW9uLCBsb2NhbGx5IG1hc3RlcmVkCisKKyNHcm91cCA5NSBwbV9tZW1fZGJscHVtcCwgRG91YmxlIHB1bXAKK2V2ZW50OjBYMDVGMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTUVNX0RQX1JRX0dMT0JfTE9DX0dSUDk1IDogKEdyb3VwIDk1IHBtX21lbV9kYmxwdW1wKSBNZW1vcnkgcmVhZCBxdWV1ZSBtYXJraW5nIGNhY2hlIGxpbmUgZG91YmxlIHB1bXAgc3RhdGUgZnJvbSBnbG9iYWwgdG8gbG9jYWwKK2V2ZW50OjBYMDVGMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTUVNX0RQX1JRX0xPQ19HTE9CX0dSUDk1IDogKEdyb3VwIDk1IHBtX21lbV9kYmxwdW1wKSBNZW1vcnkgcmVhZCBxdWV1ZSBtYXJraW5nIGNhY2hlIGxpbmUgZG91YmxlIHB1bXAgc3RhdGUgZnJvbSBsb2NhbCB0byBnbG9iYWwKK2V2ZW50OjBYMDVGMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTUVNX0RQX0NMX1dSX0dMT0JfR1JQOTUgOiAoR3JvdXAgOTUgcG1fbWVtX2RibHB1bXApIGNhY2hlIGxpbmUgd3JpdGUgc2V0dGluZyBkb3VibGUgcHVtcCBzdGF0ZSB0byBnbG9iYWwKK2V2ZW50OjBYMDVGMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTUVNX0RQX0NMX1dSX0xPQ19HUlA5NSA6IChHcm91cCA5NSBwbV9tZW1fZGJscHVtcCkgY2FjaGUgbGluZSB3cml0ZSBzZXR0aW5nIGRvdWJsZSBwdW1wIHN0YXRlIHRvIGxvY2FsCisKKyNHcm91cCA5NiBwbV9tZW0wX2RibHB1bXAsIE1DUzAgRG91YmxlIHB1bXAKK2V2ZW50OjBYMDYwMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTUVNMF9EUF9SUV9HTE9CX0xPQ19HUlA5NiA6IChHcm91cCA5NiBwbV9tZW0wX2RibHB1bXApIE1lbW9yeSByZWFkIHF1ZXVlIG1hcmtpbmcgY2FjaGUgbGluZSBkb3VibGUgcHVtcCBzdGF0ZSBmcm9tIGdsb2JhbCB0byBsb2NhbCBzaWRlIDAKK2V2ZW50OjBYMDYwMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTUVNMF9EUF9SUV9MT0NfR0xPQl9HUlA5NiA6IChHcm91cCA5NiBwbV9tZW0wX2RibHB1bXApIE1lbW9yeSByZWFkIHF1ZXVlIG1hcmtpbmcgY2FjaGUgbGluZSBkb3VibGUgcHVtcCBzdGF0ZSBmcm9tIGxvY2FsIHRvIGdsb2JhbCBzaWRlIDAKK2V2ZW50OjBYMDYwMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTUVNMF9EUF9DTF9XUl9HTE9CX0dSUDk2IDogKEdyb3VwIDk2IHBtX21lbTBfZGJscHVtcCkgY2FjaGVsaW5lIHdyaXRlIHNldHRpbmcgZHAgdG8gZ2xvYmFsIHNpZGUgMAorZXZlbnQ6MFgwNjAzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NRU0wX0RQX0NMX1dSX0xPQ19HUlA5NiA6IChHcm91cCA5NiBwbV9tZW0wX2RibHB1bXApIGNhY2hlbGluZSB3cml0ZSBzZXR0aW5nIGRwIHRvIGxvY2FsIHNpZGUgMAorCisjR3JvdXAgOTcgcG1fbWVtMV9kYmxwdW1wLCBNQ1MxIERvdWJsZSBwdW1wCitldmVudDowWDA2MTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01FTTFfRFBfUlFfR0xPQl9MT0NfR1JQOTcgOiAoR3JvdXAgOTcgcG1fbWVtMV9kYmxwdW1wKSBNZW1vcnkgcmVhZCBxdWV1ZSBtYXJraW5nIGNhY2hlIGxpbmUgZG91YmxlIHB1bXAgc3RhdGUgZnJvbSBnbG9iYWwgdG8gbG9jYWwgc2lkZSAxCitldmVudDowWDA2MTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01FTTFfRFBfUlFfTE9DX0dMT0JfR1JQOTcgOiAoR3JvdXAgOTcgcG1fbWVtMV9kYmxwdW1wKSBNZW1vcnkgcmVhZCBxdWV1ZSBtYXJraW5nIGNhY2hlIGxpbmUgZG91YmxlIHB1bXAgc3RhdGUgZnJvbSBsb2NhbCB0byBnbG9iYWwgc2lkZSAxCitldmVudDowWDA2MTIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01FTTFfRFBfQ0xfV1JfR0xPQl9HUlA5NyA6IChHcm91cCA5NyBwbV9tZW0xX2RibHB1bXApIGNhY2hlbGluZSB3cml0ZSBzZXR0aW5nIGRwIHRvIGdsb2JhbCBzaWRlIDEKK2V2ZW50OjBYMDYxMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTUVNMV9EUF9DTF9XUl9MT0NfR1JQOTcgOiAoR3JvdXAgOTcgcG1fbWVtMV9kYmxwdW1wKSBjYWNoZWxpbmUgd3JpdGUgc2V0dGluZyBkcCB0byBsb2NhbCBzaWRlIDEKKworI0dyb3VwIDk4IHBtX2d4bywgR1ggb3V0Ym91bmQKK2V2ZW50OjBYMDYyMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fR1hPX0NZQ19CVVNZX0dSUDk4IDogKEdyb3VwIDk4IHBtX2d4bykgT3V0Ym91bmQgR1ggYnVzIHV0aWxpemF0aW9ucyAoIyBvZiBjeWNsZXMgaW4gdXNlKQorZXZlbnQ6MFgwNjIxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9HWE9fQUREUl9DWUNfQlVTWV9HUlA5OCA6IChHcm91cCA5OCBwbV9neG8pIE91dGJvdW5kIEdYIGFkZHJlc3MgdXRpbGl6YXRpb24gKCMgb2YgY3ljbGVzIGFkZHJlc3Mgb3V0IGlzIHZhbGlkKQorZXZlbnQ6MFgwNjIyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9HWE9fREFUQV9DWUNfQlVTWV9HUlA5OCA6IChHcm91cCA5OCBwbV9neG8pIE91dGJvdW5kIEdYIERhdGEgdXRpbGl6YXRpb24gKCMgb2YgY3ljbGVzIGRhdGEgb3V0IGlzIHZhbGlkKQorZXZlbnQ6MFgwNjIzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9HWElfQ1lDX0JVU1lfR1JQOTggOiAoR3JvdXAgOTggcG1fZ3hvKSBJbmJvdW5kIEdYIGJ1cyB1dGlsaXphdGlvbnMgKCMgb2YgY3ljbGVzIGluIHVzZSkKKworI0dyb3VwIDk5IHBtX2d4aSwgR1ggaW5ib3VuZAorZXZlbnQ6MFgwNjMwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9HWElfQ1lDX0JVU1lfR1JQOTkgOiAoR3JvdXAgOTkgcG1fZ3hpKSBJbmJvdW5kIEdYIGJ1cyB1dGlsaXphdGlvbnMgKCMgb2YgY3ljbGVzIGluIHVzZSkKK2V2ZW50OjBYMDYzMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fR1hJX0FERFJfQ1lDX0JVU1lfR1JQOTkgOiAoR3JvdXAgOTkgcG1fZ3hpKSBJbmJvdW5kIEdYIGFkZHJlc3MgdXRpbGl6YXRpb24gKCMgb2YgY3ljbGUgYWRkcmVzcyBpcyBpbiB2YWxpZCkKK2V2ZW50OjBYMDYzMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fR1hJX0RBVEFfQ1lDX0JVU1lfR1JQOTkgOiAoR3JvdXAgOTkgcG1fZ3hpKSBJbmJvdW5kIEdYIERhdGEgdXRpbGl6YXRpb24gKCMgb2YgY3ljbGUgZGF0YSBpbiBpcyB2YWxpZCkKK2V2ZW50OjBYMDYzMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fR1hPX0NZQ19CVVNZX0dSUDk5IDogKEdyb3VwIDk5IHBtX2d4aSkgT3V0Ym91bmQgR1ggYnVzIHV0aWxpemF0aW9ucyAoIyBvZiBjeWNsZXMgaW4gdXNlKQorCisjR3JvdXAgMTAwIHBtX2d4X2RtYSwgRE1BIGV2ZW50cworZXZlbnQ6MFgwNjQwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9HWE9fQ1lDX0JVU1lfR1JQMTAwIDogKEdyb3VwIDEwMCBwbV9neF9kbWEpIE91dGJvdW5kIEdYIGJ1cyB1dGlsaXphdGlvbnMgKCMgb2YgY3ljbGVzIGluIHVzZSkKK2V2ZW50OjBYMDY0MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fR1hJX0NZQ19CVVNZX0dSUDEwMCA6IChHcm91cCAxMDAgcG1fZ3hfZG1hKSBJbmJvdW5kIEdYIGJ1cyB1dGlsaXphdGlvbnMgKCMgb2YgY3ljbGVzIGluIHVzZSkKK2V2ZW50OjBYMDY0MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fR1hfRE1BX1JFQURfR1JQMTAwIDogKEdyb3VwIDEwMCBwbV9neF9kbWEpIERNQSBSZWFkIFJlcXVlc3QKK2V2ZW50OjBYMDY0MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fR1hfRE1BX1dSSVRFX0dSUDEwMCA6IChHcm91cCAxMDAgcG1fZ3hfZG1hKSBBbGwgRE1BIFdyaXRlIFJlcXVlc3RzIChpbmNsdWRpbmcgZG1hIHdydCBsZ2N5KQorCisjR3JvdXAgMTAxIHBtX0wxX21pc2MsIEwxIG1pc2MgZXZlbnRzCitldmVudDowWDA2NTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lOU1RfRlJPTV9MMV9HUlAxMDEgOiAoR3JvdXAgMTAxIHBtX0wxX21pc2MpIEluc3RydWN0aW9uIGZldGNoZWQgZnJvbSBMMQorZXZlbnQ6MFgwNjUxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMV9XUklURV9DWUNfR1JQMTAxIDogKEdyb3VwIDEwMSBwbV9MMV9taXNjKSBDeWNsZXMgd3JpdGluZyB0byBpbnN0cnVjdGlvbiBMMQorZXZlbnQ6MFgwNjUyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9OT19JVEFHX0NZQ19HUlAxMDEgOiAoR3JvdXAgMTAxIHBtX0wxX21pc2MpIEN5bGVzIG5vIElUQUcgYXZhaWxhYmxlCitldmVudDowWDA2NTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lOU1RfSU1DX01BVENIX0NNUExfR1JQMTAxIDogKEdyb3VwIDEwMSBwbV9MMV9taXNjKSBJTUMgbWF0Y2hlZCBpbnN0cnVjdGlvbnMgY29tcGxldGVkCisKKyNHcm91cCAxMDIgcG1fTDJfZGF0YSwgTDIgbG9hZCBhbmQgc3RvcmUgZGF0YQorZXZlbnQ6MFgwNjYwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMl9MRF9SRVFfREFUQV9HUlAxMDIgOiAoR3JvdXAgMTAyIHBtX0wyX2RhdGEpIEwyIGRhdGEgbG9hZCByZXF1ZXN0cworZXZlbnQ6MFgwNjYxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMl9MRF9NSVNTX0RBVEFfR1JQMTAyIDogKEdyb3VwIDEwMiBwbV9MMl9kYXRhKSBMMiBkYXRhIGxvYWQgbWlzc2VzCitldmVudDowWDA2NjIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wyX1NUX1JFUV9EQVRBX0dSUDEwMiA6IChHcm91cCAxMDIgcG1fTDJfZGF0YSkgTDIgZGF0YSBzdG9yZSByZXF1ZXN0cworZXZlbnQ6MFgwNjYzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMl9TVF9NSVNTX0RBVEFfR1JQMTAyIDogKEdyb3VwIDEwMiBwbV9MMl9kYXRhKSBMMiBkYXRhIHN0b3JlIG1pc3NlcworCisjR3JvdXAgMTAzIHBtX0wyX2xkX2luc3QsIEwyIExvYWQgaW5zdHJ1Y3Rpb25zCitldmVudDowWDA2NzAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wyX0xEX1JFUV9JTlNUX0dSUDEwMyA6IChHcm91cCAxMDMgcG1fTDJfbGRfaW5zdCkgTDIgaW5zdHJ1Y3Rpb24gbG9hZCByZXF1ZXN0cworZXZlbnQ6MFgwNjcxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMl9MRF9NSVNTX0lOU1RfR1JQMTAzIDogKEdyb3VwIDEwMyBwbV9MMl9sZF9pbnN0KSBMMiBpbnN0cnVjdGlvbiBsb2FkIG1pc3NlcworZXZlbnQ6MFgwNjcyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMl9NSVNTX0dSUDEwMyA6IChHcm91cCAxMDMgcG1fTDJfbGRfaW5zdCkgTDIgY2FjaGUgbWlzc2VzCitldmVudDowWDA2NzMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wyX1BSRUZfTERfR1JQMTAzIDogKEdyb3VwIDEwMyBwbV9MMl9sZF9pbnN0KSBMMiBjYWNoZSBwcmVmZXRjaGVzCisKKyNHcm91cCAxMDQgcG1fTDJfY2FzdG91dF9pbnZhbGlkYXRlLCBMMiBjYXN0b3V0IGFuZCBpbnZhbGlkYXRlIGV2ZW50cworZXZlbnQ6MFgwNjgwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMl9DQVNUT1VUX01PRF9HUlAxMDQgOiAoR3JvdXAgMTA0IHBtX0wyX2Nhc3RvdXRfaW52YWxpZGF0ZSkgTDIgY2FzdG91dHMgLSBNb2RpZmllZCAoTSwgTXUsIE1lKQorZXZlbnQ6MFgwNjgxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMl9DQVNUT1VUX1NIUl9HUlAxMDQgOiAoR3JvdXAgMTA0IHBtX0wyX2Nhc3RvdXRfaW52YWxpZGF0ZSkgTDIgY2FzdG91dHMgLSBTaGFyZWQgKFQsIFRlLCBTaSwgUykKK2V2ZW50OjBYMDY4MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSUNfSU5WX0wyX0dSUDEwNCA6IChHcm91cCAxMDQgcG1fTDJfY2FzdG91dF9pbnZhbGlkYXRlKSBMMSBJIGNhY2hlIGVudHJpZXMgaW52YWxpZGF0ZWQgZnJvbSBMMgorZXZlbnQ6MFgwNjgzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQ19JTlZfTDJfR1JQMTA0IDogKEdyb3VwIDEwNCBwbV9MMl9jYXN0b3V0X2ludmFsaWRhdGUpIEwxIEQgY2FjaGUgZW50cmllcyBpbnZhbGlkYXRlZCBmcm9tIEwyCisKKyNHcm91cCAxMDUgcG1fTDJfbGRzdF9yZXFoaXQsIEwyIGxvYWQgYW5kIHN0b3JlIHJlcXVlc3RzIGFuZCBoaXRzCitldmVudDowWDA2OTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xEX1JFUV9MMl9HUlAxMDUgOiAoR3JvdXAgMTA1IHBtX0wyX2xkc3RfcmVxaGl0KSBMMiBsb2FkIHJlcXVlc3RzIAorZXZlbnQ6MFgwNjkxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MRF9ISVRfTDJfR1JQMTA1IDogKEdyb3VwIDEwNSBwbV9MMl9sZHN0X3JlcWhpdCkgTDIgRCBjYWNoZSBsb2FkIGhpdHMKK2V2ZW50OjBYMDY5MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fU1RfUkVRX0wyX0dSUDEwNSA6IChHcm91cCAxMDUgcG1fTDJfbGRzdF9yZXFoaXQpIEwyIHN0b3JlIHJlcXVlc3RzCitldmVudDowWDA2OTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1NUX0hJVF9MMl9HUlAxMDUgOiAoR3JvdXAgMTA1IHBtX0wyX2xkc3RfcmVxaGl0KSBMMiBEIGNhY2hlIHN0b3JlIGhpdHMKKworI0dyb3VwIDEwNiBwbV9MMl9sZF9kYXRhX3NsaWNlLCBMMiBkYXRhIGxvYWRzIGJ5IHNsaWNlCitldmVudDowWDA2QTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wyU0FfTERfUkVRX0RBVEFfR1JQMTA2IDogKEdyb3VwIDEwNiBwbV9MMl9sZF9kYXRhX3NsaWNlKSBMMiBzbGljZSBBIGRhdGEgbG9hZCByZXF1ZXN0cworZXZlbnQ6MFgwNkExIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMlNBX0xEX01JU1NfREFUQV9HUlAxMDYgOiAoR3JvdXAgMTA2IHBtX0wyX2xkX2RhdGFfc2xpY2UpIEwyIHNsaWNlIEEgZGF0YSBsb2FkIG1pc3NlcworZXZlbnQ6MFgwNkEyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMlNCX0xEX1JFUV9EQVRBX0dSUDEwNiA6IChHcm91cCAxMDYgcG1fTDJfbGRfZGF0YV9zbGljZSkgTDIgc2xpY2UgQiBkYXRhIGxvYWQgcmVxdWVzdHMKK2V2ZW50OjBYMDZBMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDJTQl9MRF9NSVNTX0RBVEFfR1JQMTA2IDogKEdyb3VwIDEwNiBwbV9MMl9sZF9kYXRhX3NsaWNlKSBMMiBzbGljZSBCIGRhdGEgbG9hZCBtaXNzZXMKKworI0dyb3VwIDEwNyBwbV9MMl9sZF9pbnN0X3NsaWNlLCBMMiBpbnN0cnVjdGlvbiBsb2FkcyBieSBzbGljZQorZXZlbnQ6MFgwNkIwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMlNBX0xEX1JFUV9JTlNUX0dSUDEwNyA6IChHcm91cCAxMDcgcG1fTDJfbGRfaW5zdF9zbGljZSkgTDIgc2xpY2UgQSBpbnN0cnVjdGlvbiBsb2FkIHJlcXVlc3RzCitldmVudDowWDA2QjEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wyU0FfTERfTUlTU19JTlNUX0dSUDEwNyA6IChHcm91cCAxMDcgcG1fTDJfbGRfaW5zdF9zbGljZSkgTDIgc2xpY2UgQSBpbnN0cnVjdGlvbiBsb2FkIG1pc3NlcworZXZlbnQ6MFgwNkIyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMlNCX0xEX1JFUV9JTlNUX0dSUDEwNyA6IChHcm91cCAxMDcgcG1fTDJfbGRfaW5zdF9zbGljZSkgTDIgc2xpY2UgQiBpbnN0cnVjdGlvbiBsb2FkIHJlcXVlc3RzCitldmVudDowWDA2QjMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wyU0JfTERfTUlTU19JTlNUX0dSUDEwNyA6IChHcm91cCAxMDcgcG1fTDJfbGRfaW5zdF9zbGljZSkgTDIgc2xpY2UgQiBpbnN0cnVjdGlvbiBsb2FkIG1pc3NlcworCisjR3JvdXAgMTA4IHBtX0wyX3N0X3NsaWNlLCBMMiBzbGljZSBzdG9yZXMgYnkgc2xpY2UKK2V2ZW50OjBYMDZDMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDJTQV9TVF9SRVFfR1JQMTA4IDogKEdyb3VwIDEwOCBwbV9MMl9zdF9zbGljZSkgTDIgc2xpY2UgQSBzdG9yZSByZXF1ZXN0cworZXZlbnQ6MFgwNkMxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMlNBX1NUX01JU1NfR1JQMTA4IDogKEdyb3VwIDEwOCBwbV9MMl9zdF9zbGljZSkgTDIgc2xpY2UgQSBzdG9yZSBtaXNzZXMKK2V2ZW50OjBYMDZDMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDJTQl9TVF9SRVFfR1JQMTA4IDogKEdyb3VwIDEwOCBwbV9MMl9zdF9zbGljZSkgTDIgc2xpY2UgQiBzdG9yZSByZXF1ZXN0cworZXZlbnQ6MFgwNkMzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMlNCX1NUX01JU1NfR1JQMTA4IDogKEdyb3VwIDEwOCBwbV9MMl9zdF9zbGljZSkgTDIgc2xpY2UgQiBzdG9yZSBtaXNzZXMKKworI0dyb3VwIDEwOSBwbV9MMm1pc3Nfc2xpY2UsIEwyIG1pc3NlcyBieSBzbGljZQorZXZlbnQ6MFgwNkQwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMlNBX01JU1NfR1JQMTA5IDogKEdyb3VwIDEwOSBwbV9MMm1pc3Nfc2xpY2UpIEwyIHNsaWNlIEEgbWlzc2VzCitldmVudDowWDA2RDEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wyX01JU1NfR1JQMTA5IDogKEdyb3VwIDEwOSBwbV9MMm1pc3Nfc2xpY2UpIEwyIGNhY2hlIG1pc3NlcworZXZlbnQ6MFgwNkQyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQVRBX0ZST01fTDJNSVNTX0dSUDEwOSA6IChHcm91cCAxMDkgcG1fTDJtaXNzX3NsaWNlKSBEYXRhIGxvYWRlZCBtaXNzZWQgTDIKK2V2ZW50OjBYMDZEMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDJTQl9NSVNTX0dSUDEwOSA6IChHcm91cCAxMDkgcG1fTDJtaXNzX3NsaWNlKSBMMiBzbGljZSBCIG1pc3NlcworCisjR3JvdXAgMTEwIHBtX0wyX2Nhc3RvdXRfc2xpY2UsIEwyIGNhc3RvdXRzIGJ5IHNsaWNlCitldmVudDowWDA2RTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wyU0FfQ0FTVE9VVF9NT0RfR1JQMTEwIDogKEdyb3VwIDExMCBwbV9MMl9jYXN0b3V0X3NsaWNlKSBMMiBzbGljZSBBIGNhc3RvdXRzIC0gTW9kaWZpZWQKK2V2ZW50OjBYMDZFMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDJTQV9DQVNUT1VUX1NIUl9HUlAxMTAgOiAoR3JvdXAgMTEwIHBtX0wyX2Nhc3RvdXRfc2xpY2UpIEwyIHNsaWNlIEEgY2FzdG91dHMgLSBTaGFyZWQKK2V2ZW50OjBYMDZFMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDJTQl9DQVNUT1VUX01PRF9HUlAxMTAgOiAoR3JvdXAgMTEwIHBtX0wyX2Nhc3RvdXRfc2xpY2UpIEwyIHNsaWNlIEIgY2FzdG91dHMgLSBNb2RpZmllZAorZXZlbnQ6MFgwNkUzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMlNCX0NBU1RPVVRfU0hSX0dSUDExMCA6IChHcm91cCAxMTAgcG1fTDJfY2FzdG91dF9zbGljZSkgTDIgc2xpY2UgQiBjYXN0b3V0cyAtIFNoYXJlZAorCisjR3JvdXAgMTExIHBtX0wyX2ludmFsaWRhdGVfc2xpY2UsIEwyIGludmFsaWRhdGUgYnkgc2xpY2UKK2V2ZW50OjBYMDZGMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDJTQV9JQ19JTlZfR1JQMTExIDogKEdyb3VwIDExMSBwbV9MMl9pbnZhbGlkYXRlX3NsaWNlKSBMMiBzbGljZSBBIEkgY2FjaGUgaW52YWxpZGF0ZQorZXZlbnQ6MFgwNkYxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMlNBX0RDX0lOVl9HUlAxMTEgOiAoR3JvdXAgMTExIHBtX0wyX2ludmFsaWRhdGVfc2xpY2UpIEwyIHNsaWNlIEEgRCBjYWNoZSBpbnZhbGlkYXRlCitldmVudDowWDA2RjIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wyU0JfSUNfSU5WX0dSUDExMSA6IChHcm91cCAxMTEgcG1fTDJfaW52YWxpZGF0ZV9zbGljZSkgTDIgc2xpY2UgQiBJIGNhY2hlIGludmFsaWRhdGUKK2V2ZW50OjBYMDZGMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDJTQl9EQ19JTlZfR1JQMTExIDogKEdyb3VwIDExMSBwbV9MMl9pbnZhbGlkYXRlX3NsaWNlKSBMMiBzbGljZSBCIEQgY2FjaGUgaW52YWxpZGF0ZQorCisjR3JvdXAgMTEyIHBtX0wyX2xkX3JlcWhpdF9zbGljZSwgTDIgbG9hZCByZXF1ZXN0cyBhbmQgaGlzdCBieSBzbGljZQorZXZlbnQ6MFgwNzAwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMlNBX0xEX1JFUV9HUlAxMTIgOiAoR3JvdXAgMTEyIHBtX0wyX2xkX3JlcWhpdF9zbGljZSkgTDIgc2xpY2UgQSBsb2FkIHJlcXVlc3RzIAorZXZlbnQ6MFgwNzAxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMlNBX0xEX0hJVF9HUlAxMTIgOiAoR3JvdXAgMTEyIHBtX0wyX2xkX3JlcWhpdF9zbGljZSkgTDIgc2xpY2UgQSBsb2FkIGhpdHMKK2V2ZW50OjBYMDcwMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDJTQl9MRF9SRVFfR1JQMTEyIDogKEdyb3VwIDExMiBwbV9MMl9sZF9yZXFoaXRfc2xpY2UpIEwyIHNsaWNlIEIgbG9hZCByZXF1ZXN0cyAKK2V2ZW50OjBYMDcwMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDJTQl9MRF9ISVRfR1JQMTEyIDogKEdyb3VwIDExMiBwbV9MMl9sZF9yZXFoaXRfc2xpY2UpIEwyIHNsaWNlIEIgbG9hZCBoaXRzCisKKyNHcm91cCAxMTMgcG1fTDJfc3RfcmVxaGl0X3NsaWNlLCBMMiBzdG9yZSByZXF1ZXN0cyBhbmQgaGlzdCBieSBzbGljZQorZXZlbnQ6MFgwNzEwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMlNBX1NUX1JFUV9HUlAxMTMgOiAoR3JvdXAgMTEzIHBtX0wyX3N0X3JlcWhpdF9zbGljZSkgTDIgc2xpY2UgQSBzdG9yZSByZXF1ZXN0cworZXZlbnQ6MFgwNzExIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMlNBX1NUX0hJVF9HUlAxMTMgOiAoR3JvdXAgMTEzIHBtX0wyX3N0X3JlcWhpdF9zbGljZSkgTDIgc2xpY2UgQSBzdG9yZSBoaXRzCitldmVudDowWDA3MTIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wyU0JfU1RfUkVRX0dSUDExMyA6IChHcm91cCAxMTMgcG1fTDJfc3RfcmVxaGl0X3NsaWNlKSBMMiBzbGljZSBCIHN0b3JlIHJlcXVlc3RzCitldmVudDowWDA3MTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wyU0JfU1RfSElUX0dSUDExMyA6IChHcm91cCAxMTMgcG1fTDJfc3RfcmVxaGl0X3NsaWNlKSBMMiBzbGljZSBCIHN0b3JlIGhpdHMKKworI0dyb3VwIDExNCBwbV9MMl9yZWRpcl9wcmVmLCBMMiByZWRpcmVjdCBhbmQgcHJlZmV0Y2gKK2V2ZW50OjBYMDcyMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSUNfREVNQU5EX0wyX0JIVF9SRURJUkVDVF9HUlAxMTQgOiAoR3JvdXAgMTE0IHBtX0wyX3JlZGlyX3ByZWYpIEwyIEkgY2FjaGUgZGVtYW5kIHJlcXVlc3QgZHVlIHRvIEJIVCByZWRpcmVjdAorZXZlbnQ6MFgwNzIxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JQ19ERU1BTkRfTDJfQlJfUkVESVJFQ1RfR1JQMTE0IDogKEdyb3VwIDExNCBwbV9MMl9yZWRpcl9wcmVmKSBMMiBJIGNhY2hlIGRlbWFuZCByZXF1ZXN0IGR1ZSB0byBicmFuY2ggcmVkaXJlY3QKK2V2ZW50OjBYMDcyMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDJfUFJFRl9TVF9HUlAxMTQgOiAoR3JvdXAgMTE0IHBtX0wyX3JlZGlyX3ByZWYpIEwyIGNhY2hlIHByZWZldGNoZXMKK2V2ZW50OjBYMDcyMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDJfUFJFRl9MRF9HUlAxMTQgOiAoR3JvdXAgMTE0IHBtX0wyX3JlZGlyX3ByZWYpIEwyIGNhY2hlIHByZWZldGNoZXMKKworI0dyb3VwIDExNSBwbV9MM19TbGljZUEsIEwzIHNsaWNlIEEgZXZlbnRzCitldmVudDowWDA3MzAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wzU0FfUkVGX0dSUDExNSA6IChHcm91cCAxMTUgcG1fTDNfU2xpY2VBKSBMMyBzbGljZSBBIHJlZmVyZW5jZXMKK2V2ZW50OjBYMDczMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDNTQV9ISVRfR1JQMTE1IDogKEdyb3VwIDExNSBwbV9MM19TbGljZUEpIEwzIHNsaWNlIEEgaGl0cworZXZlbnQ6MFgwNzMyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQVRBX0ZST01fTDNfR1JQMTE1IDogKEdyb3VwIDExNSBwbV9MM19TbGljZUEpIERhdGEgbG9hZGVkIGZyb20gTDMKK2V2ZW50OjBYMDczMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDNTQV9NSVNTX0dSUDExNSA6IChHcm91cCAxMTUgcG1fTDNfU2xpY2VBKSBMMyBzbGljZSBBIG1pc3NlcworCisjR3JvdXAgMTE2IHBtX0wzX1NsaWNlQiwgTDMgc2xpY2UgQiBldmVudHMKK2V2ZW50OjBYMDc0MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDNTQl9SRUZfR1JQMTE2IDogKEdyb3VwIDExNiBwbV9MM19TbGljZUIpIEwzIHNsaWNlIEIgcmVmZXJlbmNlcworZXZlbnQ6MFgwNzQxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MM1NCX0hJVF9HUlAxMTYgOiAoR3JvdXAgMTE2IHBtX0wzX1NsaWNlQikgTDMgc2xpY2UgQiBoaXRzCitldmVudDowWDA3NDIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RBVEFfRlJPTV9MM19HUlAxMTYgOiAoR3JvdXAgMTE2IHBtX0wzX1NsaWNlQikgRGF0YSBsb2FkZWQgZnJvbSBMMworZXZlbnQ6MFgwNzQzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MM1NCX01JU1NfR1JQMTE2IDogKEdyb3VwIDExNiBwbV9MM19TbGljZUIpIEwzIHNsaWNlIEIgbWlzc2VzCisKKyNHcm91cCAxMTcgcG1fZnB1X2lzc3VlLCBGUFUgaXNzdWUgZXZlbnRzCitldmVudDowWDA3NTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVV9JU1NVRV8wX0dSUDExNyA6IChHcm91cCAxMTcgcG1fZnB1X2lzc3VlKSBGUFUgaXNzdWUgMCBwZXIgY3ljbGUKK2V2ZW50OjBYMDc1MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVX0lTU1VFXzFfR1JQMTE3IDogKEdyb3VwIDExNyBwbV9mcHVfaXNzdWUpIEZQVSBpc3N1ZSAxIHBlciBjeWNsZQorZXZlbnQ6MFgwNzUyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFVfSVNTVUVfMl9HUlAxMTcgOiAoR3JvdXAgMTE3IHBtX2ZwdV9pc3N1ZSkgRlBVIGlzc3VlIDIgcGVyIGN5Y2xlCitldmVudDowWDA3NTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVV9JU1NVRV9TVEVFUklOR19HUlAxMTcgOiAoR3JvdXAgMTE3IHBtX2ZwdV9pc3N1ZSkgRlBVIGlzc3VlIHN0ZWVyaW5nCisKKyNHcm91cCAxMTggcG1fZnB1X2lzc3VlMiwgRlBVIGlzc3VlIGV2ZW50cworZXZlbnQ6MFgwNzYwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFVfSVNTVUVfT09PX0dSUDExOCA6IChHcm91cCAxMTggcG1fZnB1X2lzc3VlMikgRlBVIGlzc3VlIG91dC1vZi1vcmRlcgorZXZlbnQ6MFgwNzYxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFVfSVNTVUVfU1RfRk9MREVEX0dSUDExOCA6IChHcm91cCAxMTggcG1fZnB1X2lzc3VlMikgRlBVIGlzc3VlIGEgZm9sZGVkIHN0b3JlCitldmVudDowWDA3NjIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVV9JU1NVRV9ESVZfU1FSVF9PVkVSTEFQX0dSUDExOCA6IChHcm91cCAxMTggcG1fZnB1X2lzc3VlMikgRlBVIGRpdmlkZS9zcXJ0IG92ZXJsYXBwZWQgd2l0aCBvdGhlciBkaXZpZGUvc3FydAorZXZlbnQ6MFgwNzYzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFVfSVNTVUVfU1RBTExfU1RfR1JQMTE4IDogKEdyb3VwIDExOCBwbV9mcHVfaXNzdWUyKSBGUFUgaXNzdWUgc3RhbGxlZCBkdWUgdG8gc3RvcmUKKworI0dyb3VwIDExOSBwbV9mcHVfaXNzdWUzLCBGUFUgaXNzdWUgZXZlbnRzCitldmVudDowWDA3NzAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVV9JU1NVRV9TVEFMTF9USFJEX0dSUDExOSA6IChHcm91cCAxMTkgcG1fZnB1X2lzc3VlMykgRlBVIGlzc3VlIHN0YWxsZWQgZHVlIHRvIHRocmVhZCByZXNvdXJjZSBjb25mbGljdAorZXZlbnQ6MFgwNzcxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFVfSVNTVUVfU1RBTExfRlBSX0dSUDExOSA6IChHcm91cCAxMTkgcG1fZnB1X2lzc3VlMykgRlBVIGlzc3VlIHN0YWxsZWQgZHVlIHRvIEZQUiBkZXBlbmRlbmNpZXMKK2V2ZW50OjBYMDc3MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVX0lTU1VFX0RJVl9TUVJUX09WRVJMQVBfR1JQMTE5IDogKEdyb3VwIDExOSBwbV9mcHVfaXNzdWUzKSBGUFUgZGl2aWRlL3NxcnQgb3ZlcmxhcHBlZCB3aXRoIG90aGVyIGRpdmlkZS9zcXJ0CitldmVudDowWDA3NzMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVV9JU1NVRV9TVEFMTF9TVF9HUlAxMTkgOiAoR3JvdXAgMTE5IHBtX2ZwdV9pc3N1ZTMpIEZQVSBpc3N1ZSBzdGFsbGVkIGR1ZSB0byBzdG9yZQorCisjR3JvdXAgMTIwIHBtX2ZwdTBfZmxvcCwgRlBVMCBmbG9wIGV2ZW50cworZXZlbnQ6MFgwNzgwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFUwXzFGTE9QX0dSUDEyMCA6IChHcm91cCAxMjAgcG1fZnB1MF9mbG9wKSBGUFUwIGV4ZWN1dGVkIGFkZCwgbXVsdCwgc3ViLCBjbXAgb3Igc2VsIGluc3RydWN0aW9uCitldmVudDowWDA3ODEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVTBfRk1BX0dSUDEyMCA6IChHcm91cCAxMjAgcG1fZnB1MF9mbG9wKSBGUFUwIGV4ZWN1dGVkIG11bHRpcGx5LWFkZCBpbnN0cnVjdGlvbgorZXZlbnQ6MFgwNzgyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFUwX0ZTUVJUX0ZESVZfR1JQMTIwIDogKEdyb3VwIDEyMCBwbV9mcHUwX2Zsb3ApIEZQVTAgZXhlY3V0ZWQgRlNRUlQgb3IgRkRJViBpbnN0cnVjdGlvbgorZXZlbnQ6MFgwNzgzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFUwX1NURl9HUlAxMjAgOiAoR3JvdXAgMTIwIHBtX2ZwdTBfZmxvcCkgRlBVMCBleGVjdXRlZCBzdG9yZSBpbnN0cnVjdGlvbgorCisjR3JvdXAgMTIxIHBtX2ZwdTBfbWlzYywgRlBVMCBldmVudHMKK2V2ZW50OjBYMDc5MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVMF9GTE9QX0dSUDEyMSA6IChHcm91cCAxMjEgcG1fZnB1MF9taXNjKSBGUFUwIGV4ZWN1dGVkIDFGTE9QLCBGTUEsIEZTUVJUIG9yIEZESVYgaW5zdHJ1Y3Rpb24KK2V2ZW50OjBYMDc5MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVMF9GWERJVl9HUlAxMjEgOiAoR3JvdXAgMTIxIHBtX2ZwdTBfbWlzYykgRlBVMCBleGVjdXRlZCBmaXhlZCBwb2ludCBkaXZpc2lvbgorZXZlbnQ6MFgwNzkyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFUwX0RFTk9STV9HUlAxMjEgOiAoR3JvdXAgMTIxIHBtX2ZwdTBfbWlzYykgRlBVMCByZWNlaXZlZCBkZW5vcm1hbGl6ZWQgZGF0YQorZXZlbnQ6MFgwNzkzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFUwX1NJTkdMRV9HUlAxMjEgOiAoR3JvdXAgMTIxIHBtX2ZwdTBfbWlzYykgRlBVMCBleGVjdXRlZCBzaW5nbGUgcHJlY2lzaW9uIGluc3RydWN0aW9uCisKKyNHcm91cCAxMjIgcG1fZnB1MF9taXNjMiwgRlBVMCBldmVudHMKK2V2ZW50OjBYMDdBMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVMF9GSU5fR1JQMTIyIDogKEdyb3VwIDEyMiBwbV9mcHUwX21pc2MyKSBGUFUwIHByb2R1Y2VkIGEgcmVzdWx0CitldmVudDowWDA3QTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVTBfRkVTVF9HUlAxMjIgOiAoR3JvdXAgMTIyIHBtX2ZwdTBfbWlzYzIpIEZQVTAgZXhlY3V0ZWQgRkVTVCBpbnN0cnVjdGlvbgorZXZlbnQ6MFgwN0EyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFUwX0ZQU0NSX0dSUDEyMiA6IChHcm91cCAxMjIgcG1fZnB1MF9taXNjMikgRlBVMCBleGVjdXRlZCBGUFNDUiBpbnN0cnVjdGlvbgorZXZlbnQ6MFgwN0EzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFUwX0ZYTVVMVF9HUlAxMjIgOiAoR3JvdXAgMTIyIHBtX2ZwdTBfbWlzYzIpIEZQVTAgZXhlY3V0ZWQgZml4ZWQgcG9pbnQgbXVsdGlwbGljYXRpb24KKworI0dyb3VwIDEyMyBwbV9mcHUwX21pc2MzLCBGUFUwIGV2ZW50cworZXZlbnQ6MFgwN0IwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFUwX0ZDT05WX0dSUDEyMyA6IChHcm91cCAxMjMgcG1fZnB1MF9taXNjMykgRlBVMCBleGVjdXRlZCBGQ09OViBpbnN0cnVjdGlvbgorZXZlbnQ6MFgwN0IxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFUwX0ZSU1BfR1JQMTIzIDogKEdyb3VwIDEyMyBwbV9mcHUwX21pc2MzKSBGUFUwIGV4ZWN1dGVkIEZSU1AgaW5zdHJ1Y3Rpb24KK2V2ZW50OjBYMDdCMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVMF9TVF9GT0xERURfR1JQMTIzIDogKEdyb3VwIDEyMyBwbV9mcHUwX21pc2MzKSBGUFUwIGZvbGRlZCBzdG9yZQorZXZlbnQ6MFgwN0IzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFUwX0ZFU1RfR1JQMTIzIDogKEdyb3VwIDEyMyBwbV9mcHUwX21pc2MzKSBGUFUwIGV4ZWN1dGVkIEZFU1QgaW5zdHJ1Y3Rpb24KKworI0dyb3VwIDEyNCBwbV9mcHUxX2Zsb3AsIEZQVTEgZmxvcCBldmVudHMKK2V2ZW50OjBYMDdDMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVMV8xRkxPUF9HUlAxMjQgOiAoR3JvdXAgMTI0IHBtX2ZwdTFfZmxvcCkgRlBVMSBleGVjdXRlZCBhZGQsIG11bHQsIHN1YiwgY21wIG9yIHNlbCBpbnN0cnVjdGlvbgorZXZlbnQ6MFgwN0MxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFUxX0ZNQV9HUlAxMjQgOiAoR3JvdXAgMTI0IHBtX2ZwdTFfZmxvcCkgRlBVMSBleGVjdXRlZCBtdWx0aXBseS1hZGQgaW5zdHJ1Y3Rpb24KK2V2ZW50OjBYMDdDMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVMV9GU1FSVF9GRElWX0dSUDEyNCA6IChHcm91cCAxMjQgcG1fZnB1MV9mbG9wKSBGUFUxIGV4ZWN1dGVkIEZTUVJUIG9yIEZESVYgaW5zdHJ1Y3Rpb24KK2V2ZW50OjBYMDdDMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVMV9TVEZfR1JQMTI0IDogKEdyb3VwIDEyNCBwbV9mcHUxX2Zsb3ApIEZQVTEgZXhlY3V0ZWQgc3RvcmUgaW5zdHJ1Y3Rpb24KKworI0dyb3VwIDEyNSBwbV9mcHUxX21pc2MsIEZQVTEgZXZlbnRzCitldmVudDowWDA3RDAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVTFfRkxPUF9HUlAxMjUgOiAoR3JvdXAgMTI1IHBtX2ZwdTFfbWlzYykgRlBVMSBleGVjdXRlZCAxRkxPUCwgRk1BLCBGU1FSVCBvciBGRElWIGluc3RydWN0aW9uCitldmVudDowWDA3RDEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVTFfRlhESVZfR1JQMTI1IDogKEdyb3VwIDEyNSBwbV9mcHUxX21pc2MpIEZQVTEgZXhlY3V0ZWQgZml4ZWQgcG9pbnQgZGl2aXNpb24KK2V2ZW50OjBYMDdEMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVMV9ERU5PUk1fR1JQMTI1IDogKEdyb3VwIDEyNSBwbV9mcHUxX21pc2MpIEZQVTEgcmVjZWl2ZWQgZGVub3JtYWxpemVkIGRhdGEKK2V2ZW50OjBYMDdEMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVMV9TSU5HTEVfR1JQMTI1IDogKEdyb3VwIDEyNSBwbV9mcHUxX21pc2MpIEZQVTEgZXhlY3V0ZWQgc2luZ2xlIHByZWNpc2lvbiBpbnN0cnVjdGlvbgorCisjR3JvdXAgMTI2IHBtX2ZwdTFfbWlzYzIsIEZQVTEgZXZlbnRzCitldmVudDowWDA3RTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVTFfRklOX0dSUDEyNiA6IChHcm91cCAxMjYgcG1fZnB1MV9taXNjMikgRlBVMSBwcm9kdWNlZCBhIHJlc3VsdAorZXZlbnQ6MFgwN0UxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFUxX0ZFU1RfR1JQMTI2IDogKEdyb3VwIDEyNiBwbV9mcHUxX21pc2MyKSBGUFUxIGV4ZWN1dGVkIEZFU1QgaW5zdHJ1Y3Rpb24KK2V2ZW50OjBYMDdFMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVMV9GUFNDUl9HUlAxMjYgOiAoR3JvdXAgMTI2IHBtX2ZwdTFfbWlzYzIpIEZQVTEgZXhlY3V0ZWQgRlBTQ1IgaW5zdHJ1Y3Rpb24KK2V2ZW50OjBYMDdFMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVMV9GWE1VTFRfR1JQMTI2IDogKEdyb3VwIDEyNiBwbV9mcHUxX21pc2MyKSBGUFUxIGV4ZWN1dGVkIGZpeGVkIHBvaW50IG11bHRpcGxpY2F0aW9uCisKKyNHcm91cCAxMjcgcG1fZnB1MV9taXNjMywgRlBVMSBldmVudHMKK2V2ZW50OjBYMDdGMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVMV9GQ09OVl9HUlAxMjcgOiAoR3JvdXAgMTI3IHBtX2ZwdTFfbWlzYzMpIEZQVTEgZXhlY3V0ZWQgRkNPTlYgaW5zdHJ1Y3Rpb24KK2V2ZW50OjBYMDdGMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVMV9GUlNQX0dSUDEyNyA6IChHcm91cCAxMjcgcG1fZnB1MV9taXNjMykgRlBVMSBleGVjdXRlZCBGUlNQIGluc3RydWN0aW9uCitldmVudDowWDA3RjIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVTFfU1RfRk9MREVEX0dSUDEyNyA6IChHcm91cCAxMjcgcG1fZnB1MV9taXNjMykgRlBVMSBmb2xkZWQgc3RvcmUKK2V2ZW50OjBYMDdGMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVMV9GRVNUX0dSUDEyNyA6IChHcm91cCAxMjcgcG1fZnB1MV9taXNjMykgRlBVMSBleGVjdXRlZCBGRVNUIGluc3RydWN0aW9uCisKKyNHcm91cCAxMjggcG1fZnB1X2Zsb3AsIEZQVSBmbG9wIGV2ZW50cworZXZlbnQ6MFgwODAwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFVfMUZMT1BfR1JQMTI4IDogKEdyb3VwIDEyOCBwbV9mcHVfZmxvcCkgRlBVIGV4ZWN1dGVkIG9uZSBmbG9wIGluc3RydWN0aW9uIAorZXZlbnQ6MFgwODAxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFVfRk1BX0dSUDEyOCA6IChHcm91cCAxMjggcG1fZnB1X2Zsb3ApIEZQVSBleGVjdXRlZCBtdWx0aXBseS1hZGQgaW5zdHJ1Y3Rpb24KK2V2ZW50OjBYMDgwMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVX0ZTUVJUX0ZESVZfR1JQMTI4IDogKEdyb3VwIDEyOCBwbV9mcHVfZmxvcCkgRlBVIGV4ZWN1dGVkIEZTUVJUIG9yIEZESVYgaW5zdHJ1Y3Rpb24KK2V2ZW50OjBYMDgwMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVX0ZMT1BfR1JQMTI4IDogKEdyb3VwIDEyOCBwbV9mcHVfZmxvcCkgRlBVIGV4ZWN1dGVkIDFGTE9QLCBGTUEsIEZTUVJUIG9yIEZESVYgaW5zdHJ1Y3Rpb24KKworI0dyb3VwIDEyOSBwbV9mcHVfbWlzYywgRlBVIGV2ZW50cworZXZlbnQ6MFgwODEwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFVfRklOX0dSUDEyOSA6IChHcm91cCAxMjkgcG1fZnB1X21pc2MpIEZQVSBwcm9kdWNlZCBhIHJlc3VsdAorZXZlbnQ6MFgwODExIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFVfRlJTUF9HUlAxMjkgOiAoR3JvdXAgMTI5IHBtX2ZwdV9taXNjKSBGUFUgZXhlY3V0ZWQgRlJTUCBpbnN0cnVjdGlvbgorZXZlbnQ6MFgwODEyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFVfRlBTQ1JfR1JQMTI5IDogKEdyb3VwIDEyOSBwbV9mcHVfbWlzYykgRlBVIGV4ZWN1dGVkIEZQU0NSIGluc3RydWN0aW9uCitldmVudDowWDA4MTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVV9GWE1VTFRfR1JQMTI5IDogKEdyb3VwIDEyOSBwbV9mcHVfbWlzYykgRlBVIGV4ZWN1dGVkIGZpeGVkIHBvaW50IG11bHRpcGxpY2F0aW9uCisKKyNHcm91cCAxMzAgcG1fZnB1X21pc2MyLCBGUFUgZXZlbnRzCitldmVudDowWDA4MjAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVV9GWERJVl9HUlAxMzAgOiAoR3JvdXAgMTMwIHBtX2ZwdV9taXNjMikgRlBVIGV4ZWN1dGVkIGZpeGVkIHBvaW50IGRpdmlzaW9uCitldmVudDowWDA4MjEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVV9ERU5PUk1fR1JQMTMwIDogKEdyb3VwIDEzMCBwbV9mcHVfbWlzYzIpIEZQVSByZWNlaXZlZCBkZW5vcm1hbGl6ZWQgZGF0YQorZXZlbnQ6MFgwODIyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFVfU1RGX0dSUDEzMCA6IChHcm91cCAxMzAgcG1fZnB1X21pc2MyKSBGUFUgZXhlY3V0ZWQgc3RvcmUgaW5zdHJ1Y3Rpb24KK2V2ZW50OjBYMDgyMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVX1NJTkdMRV9HUlAxMzAgOiAoR3JvdXAgMTMwIHBtX2ZwdV9taXNjMikgRlBVIGV4ZWN1dGVkIHNpbmdsZSBwcmVjaXNpb24gaW5zdHJ1Y3Rpb24KKworI0dyb3VwIDEzMSBwbV9mcHVfbWlzYzMsIEZQVSBldmVudHMKK2V2ZW50OjBYMDgzMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVX0ZDT05WX0dSUDEzMSA6IChHcm91cCAxMzEgcG1fZnB1X21pc2MzKSBGUFUgZXhlY3V0ZWQgRkNPTlYgaW5zdHJ1Y3Rpb24KK2V2ZW50OjBYMDgzMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVX0ZSU1BfR1JQMTMxIDogKEdyb3VwIDEzMSBwbV9mcHVfbWlzYzMpIEZQVSBleGVjdXRlZCBGUlNQIGluc3RydWN0aW9uCitldmVudDowWDA4MzIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVV9TVF9GT0xERURfR1JQMTMxIDogKEdyb3VwIDEzMSBwbV9mcHVfbWlzYzMpIEZQVSBmb2xkZWQgc3RvcmUKK2V2ZW50OjBYMDgzMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVX0ZFU1RfR1JQMTMxIDogKEdyb3VwIDEzMSBwbV9mcHVfbWlzYzMpIEZQVSBleGVjdXRlZCBGRVNUIGluc3RydWN0aW9uCisKKyNHcm91cCAxMzIgcG1fcHVyciwgUFVSUiBldmVudHMKK2V2ZW50OjBYMDg0MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUFVSUl9HUlAxMzIgOiAoR3JvdXAgMTMyIHBtX3B1cnIpIFBVUlIgRXZlbnQKK2V2ZW50OjBYMDg0MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQMTMyIDogKEdyb3VwIDEzMiBwbV9wdXJyKSBSdW4gY3ljbGVzCitldmVudDowWDA4NDIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQMTMyIDogKEdyb3VwIDEzMiBwbV9wdXJyKSBQcm9jZXNzb3IgY3ljbGVzCitldmVudDowWDA4NDMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMTMyIDogKEdyb3VwIDEzMiBwbV9wdXJyKSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCisKKyNHcm91cCAxMzMgcG1fc3VzcGVuZCwgU1VTUEVOREVEIGV2ZW50cworZXZlbnQ6MFgwODUwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9TVVNQRU5ERURfR1JQMTMzIDogKEdyb3VwIDEzMyBwbV9zdXNwZW5kKSBTdXNwZW5kZWQKK2V2ZW50OjBYMDg1MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlAxMzMgOiAoR3JvdXAgMTMzIHBtX3N1c3BlbmQpIFByb2Nlc3NvciBjeWNsZXMKK2V2ZW50OjBYMDg1MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fU1lOQ19DWUNfR1JQMTMzIDogKEdyb3VwIDEzMyBwbV9zdXNwZW5kKSBTeW5jIGR1cmF0aW9uCitldmVudDowWDA4NTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMTMzIDogKEdyb3VwIDEzMyBwbV9zdXNwZW5kKSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCisKKyNHcm91cCAxMzQgcG1fZGNhY2hlLCBEIGNhY2hlCitldmVudDowWDA4NjAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xEX01JU1NfTDFfQ1lDX0dSUDEzNCA6IChHcm91cCAxMzQgcG1fZGNhY2hlKSBMMSBkYXRhIGxvYWQgbWlzcyBjeWNsZXMKK2V2ZW50OjBYMDg2MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVX0RFUkFUX01JU1NfR1JQMTM0IDogKEdyb3VwIDEzNCBwbV9kY2FjaGUpIERFUkFUIG1pc3NlcworZXZlbnQ6MFgwODYyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MRF9NSVNTX0wxX0dSUDEzNCA6IChHcm91cCAxMzQgcG1fZGNhY2hlKSBMMSBEIGNhY2hlIGxvYWQgbWlzc2VzCitldmVudDowWDA4NjMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9ERVJBVF9NSVNTX0NZQ19HUlAxMzQgOiAoR3JvdXAgMTM0IHBtX2RjYWNoZSkgREVSQVQgbWlzcyBsYXRlbmN5CisKKyNHcm91cCAxMzUgcG1fZGVyYXRfbWlzcywgREVSQVQgbWlzcworZXZlbnQ6MFgwODcwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9ERVJBVF9NSVNTXzRLX0dSUDEzNSA6IChHcm91cCAxMzUgcG1fZGVyYXRfbWlzcykgREVSQVQgbWlzc2VzIGZvciA0SyBwYWdlCitldmVudDowWDA4NzEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RFUkFUX01JU1NfNjRLX0dSUDEzNSA6IChHcm91cCAxMzUgcG1fZGVyYXRfbWlzcykgREVSQVQgbWlzc2VzIGZvciA2NEsgcGFnZQorZXZlbnQ6MFgwODcyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9ERVJBVF9NSVNTXzE2TV9HUlAxMzUgOiAoR3JvdXAgMTM1IHBtX2RlcmF0X21pc3MpIERFUkFUIG1pc3NlcyBmb3IgMTZNIHBhZ2UKK2V2ZW50OjBYMDg3MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fREVSQVRfTUlTU18xNkdfR1JQMTM1IDogKEdyb3VwIDEzNSBwbV9kZXJhdF9taXNzKSBERVJBVCBtaXNzZXMgZm9yIDE2RyBwYWdlCisKKyNHcm91cCAxMzYgcG1fZGVyYXRfcmVmLCBERVJBVCByZWYKK2V2ZW50OjBYMDg4MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fREVSQVRfUkVGXzRLX0dSUDEzNiA6IChHcm91cCAxMzYgcG1fZGVyYXRfcmVmKSBERVJBVCByZWZlcmVuY2UgZm9yIDRLIHBhZ2UKK2V2ZW50OjBYMDg4MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fREVSQVRfUkVGXzY0S19HUlAxMzYgOiAoR3JvdXAgMTM2IHBtX2RlcmF0X3JlZikgREVSQVQgcmVmZXJlbmNlIGZvciA2NEsgcGFnZQorZXZlbnQ6MFgwODgyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9ERVJBVF9SRUZfMTZNX0dSUDEzNiA6IChHcm91cCAxMzYgcG1fZGVyYXRfcmVmKSBERVJBVCByZWZlcmVuY2UgZm9yIDE2TSBwYWdlCitldmVudDowWDA4ODMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RFUkFUX1JFRl8xNkdfR1JQMTM2IDogKEdyb3VwIDEzNiBwbV9kZXJhdF9yZWYpIERFUkFUIHJlZmVyZW5jZSBmb3IgMTZHIHBhZ2UKKworI0dyb3VwIDEzNyBwbV9pZXJhdF9taXNzLCBJRVJBVCBtaXNzCitldmVudDowWDA4OTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lFUkFUX01JU1NfMTZHX0dSUDEzNyA6IChHcm91cCAxMzcgcG1faWVyYXRfbWlzcykgSUVSQVQgbWlzc2VzIGZvciAxNkcgcGFnZQorZXZlbnQ6MFgwODkxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JRVJBVF9NSVNTXzE2TV9HUlAxMzcgOiAoR3JvdXAgMTM3IHBtX2llcmF0X21pc3MpIElFUkFUIG1pc3NlcyBmb3IgMTZNIHBhZ2UKK2V2ZW50OjBYMDg5MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSUVSQVRfTUlTU182NEtfR1JQMTM3IDogKEdyb3VwIDEzNyBwbV9pZXJhdF9taXNzKSBJRVJBVCBtaXNzZXMgZm9yIDY0SyBwYWdlCitldmVudDowWDA4OTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lFUkFUX01JU1NfNEtfR1JQMTM3IDogKEdyb3VwIDEzNyBwbV9pZXJhdF9taXNzKSBJRVJBVCBtaXNzZXMgZm9yIDRLIHBhZ2UKKworI0dyb3VwIDEzOCBwbV9tcmtfYnIsIE1hcmtlZCBCcmFuY2ggZXZlbnRzCitldmVudDowWDA4QTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19CUl9UQUtFTl9HUlAxMzggOiAoR3JvdXAgMTM4IHBtX21ya19icikgTWFya2VkIGJyYW5jaCB0YWtlbgorZXZlbnQ6MFgwOEExIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfTERfTUlTU19MMV9HUlAxMzggOiAoR3JvdXAgMTM4IHBtX21ya19icikgTWFya2VkIEwxIEQgY2FjaGUgbG9hZCBtaXNzZXMKK2V2ZW50OjBYMDhBMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0JSX01QUkVEX0dSUDEzOCA6IChHcm91cCAxMzggcG1fbXJrX2JyKSBNYXJrZWQgYnJhbmNoIG1pc3ByZWRpY3RlZAorZXZlbnQ6MFgwOEEzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDEzOCA6IChHcm91cCAxMzggcG1fbXJrX2JyKSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCisKKyNHcm91cCAxMzkgcG1fbXJrX2Rzb3VyY2UsIE1hcmtlZCBkYXRhIHNvdXJjZXMKK2V2ZW50OjBYMDhCMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAxMzkgOiAoR3JvdXAgMTM5IHBtX21ya19kc291cmNlKSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDA4QjEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19EQVRBX0ZST01fRE1FTV9HUlAxMzkgOiAoR3JvdXAgMTM5IHBtX21ya19kc291cmNlKSBNYXJrZWQgZGF0YSBsb2FkZWQgZnJvbSBkaXN0YW50IG1lbW9yeQorZXZlbnQ6MFgwOEIyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfREFUQV9GUk9NX0RMMkwzX1NIUl9HUlAxMzkgOiAoR3JvdXAgMTM5IHBtX21ya19kc291cmNlKSBNYXJrZWQgZGF0YSBsb2FkZWQgZnJvbSBkaXN0YW50IEwyIG9yIEwzIHNoYXJlZAorZXZlbnQ6MFgwOEIzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfREFUQV9GUk9NX0RMMkwzX01PRF9HUlAxMzkgOiAoR3JvdXAgMTM5IHBtX21ya19kc291cmNlKSBNYXJrZWQgZGF0YSBsb2FkZWQgZnJvbSBkaXN0YW50IEwyIG9yIEwzIG1vZGlmaWVkCisKKyNHcm91cCAxNDAgcG1fbXJrX2Rzb3VyY2UyLCBNYXJrZWQgZGF0YSBzb3VyY2VzCitldmVudDowWDA4QzAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19EQVRBX0ZST01fTDJfR1JQMTQwIDogKEdyb3VwIDE0MCBwbV9tcmtfZHNvdXJjZTIpIE1hcmtlZCBkYXRhIGxvYWRlZCBmcm9tIEwyCitldmVudDowWDA4QzEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19EQVRBX0ZST01fTDIxX0dSUDE0MCA6IChHcm91cCAxNDAgcG1fbXJrX2Rzb3VyY2UyKSBNYXJrZWQgZGF0YSBsb2FkZWQgZnJvbSBwcml2YXRlIEwyIG90aGVyIGNvcmUKK2V2ZW50OjBYMDhDMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0RBVEFfRlJPTV9MMjVfTU9EX0dSUDE0MCA6IChHcm91cCAxNDAgcG1fbXJrX2Rzb3VyY2UyKSBNYXJrZWQgZGF0YSBsb2FkZWQgZnJvbSBMMi41IG1vZGlmaWVkCitldmVudDowWDA4QzMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMTQwIDogKEdyb3VwIDE0MCBwbV9tcmtfZHNvdXJjZTIpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKKworI0dyb3VwIDE0MSBwbV9tcmtfZHNvdXJjZTMsIE1hcmtlZCBkYXRhIHNvdXJjZXMKK2V2ZW50OjBYMDhEMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0RBVEFfRlJPTV9MMk1JU1NfR1JQMTQxIDogKEdyb3VwIDE0MSBwbV9tcmtfZHNvdXJjZTMpIE1hcmtlZCBkYXRhIGxvYWRlZCBtaXNzZWQgTDIKK2V2ZW50OjBYMDhEMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAxNDEgOiAoR3JvdXAgMTQxIHBtX21ya19kc291cmNlMykgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgwOEQyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfREFUQV9GUk9NX0wzX0dSUDE0MSA6IChHcm91cCAxNDEgcG1fbXJrX2Rzb3VyY2UzKSBNYXJrZWQgZGF0YSBsb2FkZWQgZnJvbSBMMworZXZlbnQ6MFgwOEQzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfREFUQV9GUk9NX0wyNV9TSFJfR1JQMTQxIDogKEdyb3VwIDE0MSBwbV9tcmtfZHNvdXJjZTMpIE1hcmtlZCBkYXRhIGxvYWRlZCBmcm9tIEwyLjUgc2hhcmVkCisKKyNHcm91cCAxNDIgcG1fbXJrX2Rzb3VyY2U0LCBNYXJrZWQgZGF0YSBzb3VyY2VzCitldmVudDowWDA4RTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19EQVRBX0ZST01fTDM1X01PRF9HUlAxNDIgOiAoR3JvdXAgMTQyIHBtX21ya19kc291cmNlNCkgTWFya2VkIGRhdGEgbG9hZGVkIGZyb20gTDMuNSBtb2RpZmllZAorZXZlbnQ6MFgwOEUxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfREFUQV9GUk9NX0wzNV9TSFJfR1JQMTQyIDogKEdyb3VwIDE0MiBwbV9tcmtfZHNvdXJjZTQpIE1hcmtlZCBkYXRhIGxvYWRlZCBmcm9tIEwzLjUgc2hhcmVkCitldmVudDowWDA4RTIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19EQVRBX0ZST01fTDNNSVNTX0dSUDE0MiA6IChHcm91cCAxNDIgcG1fbXJrX2Rzb3VyY2U0KSBNYXJrZWQgZGF0YSBsb2FkZWQgZnJvbSBMMyBtaXNzCitldmVudDowWDA4RTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMTQyIDogKEdyb3VwIDE0MiBwbV9tcmtfZHNvdXJjZTQpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKKworI0dyb3VwIDE0MyBwbV9tcmtfZHNvdXJjZTUsIE1hcmtlZCBkYXRhIHNvdXJjZXMKK2V2ZW50OjBYMDhGMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0RBVEFfRlJPTV9NRU1fRFBfR1JQMTQzIDogKEdyb3VwIDE0MyBwbV9tcmtfZHNvdXJjZTUpIE1hcmtlZCBkYXRhIGxvYWRlZCBmcm9tIGRvdWJsZSBwdW1wIG1lbW9yeQorZXZlbnQ6MFgwOEYxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfREFUQV9GUk9NX1JMMkwzX1NIUl9HUlAxNDMgOiAoR3JvdXAgMTQzIHBtX21ya19kc291cmNlNSkgTWFya2VkIGRhdGEgbG9hZGVkIGZyb20gcmVtb3RlIEwyIG9yIEwzIHNoYXJlZAorZXZlbnQ6MFgwOEYyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDE0MyA6IChHcm91cCAxNDMgcG1fbXJrX2Rzb3VyY2U1KSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDA4RjMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19EQVRBX0ZST01fTE1FTV9HUlAxNDMgOiAoR3JvdXAgMTQzIHBtX21ya19kc291cmNlNSkgTWFya2VkIGRhdGEgbG9hZGVkIGZyb20gbG9jYWwgbWVtb3J5CisKKyNHcm91cCAxNDQgcG1fbXJrX2Rzb3VyY2U2LCBNYXJrZWQgZGF0YSBzb3VyY2VzCitldmVudDowWDA5MDAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19EQVRBX0ZST01fUkwyTDNfTU9EX0dSUDE0NCA6IChHcm91cCAxNDQgcG1fbXJrX2Rzb3VyY2U2KSBNYXJrZWQgZGF0YSBsb2FkZWQgZnJvbSByZW1vdGUgTDIgb3IgTDMgbW9kaWZpZWQKK2V2ZW50OjBYMDkwMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0RBVEFfRlJPTV9STDJMM19TSFJfR1JQMTQ0IDogKEdyb3VwIDE0NCBwbV9tcmtfZHNvdXJjZTYpIE1hcmtlZCBkYXRhIGxvYWRlZCBmcm9tIHJlbW90ZSBMMiBvciBMMyBzaGFyZWQKK2V2ZW50OjBYMDkwMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0RBVEFfRlJPTV9STUVNX0dSUDE0NCA6IChHcm91cCAxNDQgcG1fbXJrX2Rzb3VyY2U2KSBNYXJrZWQgZGF0YSBsb2FkZWQgZnJvbSByZW1vdGUgbWVtb3J5CitldmVudDowWDA5MDMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMTQ0IDogKEdyb3VwIDE0NCBwbV9tcmtfZHNvdXJjZTYpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKKworI0dyb3VwIDE0NSBwbV9tcmtfcmVqZWN0cywgTWFya2VkIHJlamVjdHMKK2V2ZW50OjBYMDkxMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0xTVV9SRUpFQ1RfVUxEX0dSUDE0NSA6IChHcm91cCAxNDUgcG1fbXJrX3JlamVjdHMpIE1hcmtlZCB1bmFsaWduZWQgbG9hZCByZWplY3QKK2V2ZW50OjBYMDkxMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0xTVV9SRUpFQ1RfVVNUX0dSUDE0NSA6IChHcm91cCAxNDUgcG1fbXJrX3JlamVjdHMpIE1hcmtlZCB1bmFsaWduZWQgc3RvcmUgcmVqZWN0CitldmVudDowWDA5MTIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMTQ1IDogKEdyb3VwIDE0NSBwbV9tcmtfcmVqZWN0cykgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgwOTEzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfTFNVX1JFSkVDVF9MSFNfR1JQMTQ1IDogKEdyb3VwIDE0NSBwbV9tcmtfcmVqZWN0cykgTWFya2VkIGxvYWQgaGl0IHN0b3JlIHJlamVjdAorCisjR3JvdXAgMTQ2IHBtX21ya19yZWplY3RzMiwgTWFya2VkIHJlamVjdHMgTFNVMAorZXZlbnQ6MFgwOTIwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfTFNVMF9SRUpFQ1RfTEhTX0dSUDE0NiA6IChHcm91cCAxNDYgcG1fbXJrX3JlamVjdHMyKSBMU1UwIG1hcmtlZCBsb2FkIGhpdCBzdG9yZSByZWplY3QKK2V2ZW50OjBYMDkyMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0xTVTBfUkVKRUNUX1VMRF9HUlAxNDYgOiAoR3JvdXAgMTQ2IHBtX21ya19yZWplY3RzMikgTFNVMCBtYXJrZWQgdW5hbGlnbmVkIGxvYWQgcmVqZWN0CitldmVudDowWDA5MjIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19MU1UwX1JFSkVDVF9VU1RfR1JQMTQ2IDogKEdyb3VwIDE0NiBwbV9tcmtfcmVqZWN0czIpIExTVTAgbWFya2VkIHVuYWxpZ25lZCBzdG9yZSByZWplY3QKK2V2ZW50OjBYMDkyMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAxNDYgOiAoR3JvdXAgMTQ2IHBtX21ya19yZWplY3RzMikgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorCisjR3JvdXAgMTQ3IHBtX21ya19yZWplY3RzMywgTWFya2VkIHJlamVjdHMgTFNVMQorZXZlbnQ6MFgwOTMwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfTFNVMV9SRUpFQ1RfTEhTX0dSUDE0NyA6IChHcm91cCAxNDcgcG1fbXJrX3JlamVjdHMzKSBMU1UxIG1hcmtlZCBsb2FkIGhpdCBzdG9yZSByZWplY3QKK2V2ZW50OjBYMDkzMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0xTVTFfUkVKRUNUX1VMRF9HUlAxNDcgOiAoR3JvdXAgMTQ3IHBtX21ya19yZWplY3RzMykgTFNVMSBtYXJrZWQgdW5hbGlnbmVkIGxvYWQgcmVqZWN0CitldmVudDowWDA5MzIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19MU1UxX1JFSkVDVF9VU1RfR1JQMTQ3IDogKEdyb3VwIDE0NyBwbV9tcmtfcmVqZWN0czMpIExTVTEgbWFya2VkIHVuYWxpZ25lZCBzdG9yZSByZWplY3QKK2V2ZW50OjBYMDkzMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAxNDcgOiAoR3JvdXAgMTQ3IHBtX21ya19yZWplY3RzMykgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorCisjR3JvdXAgMTQ4IHBtX21ya19pbnN0LCBNYXJrZWQgaW5zdHJ1Y3Rpb24gZXZlbnRzCitldmVudDowWDA5NDAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19JTlNUX0lTU1VFRF9HUlAxNDggOiAoR3JvdXAgMTQ4IHBtX21ya19pbnN0KSBNYXJrZWQgaW5zdHJ1Y3Rpb24gaXNzdWVkCitldmVudDowWDA5NDEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19JTlNUX0RJU1BfR1JQMTQ4IDogKEdyb3VwIDE0OCBwbV9tcmtfaW5zdCkgTWFya2VkIGluc3RydWN0aW9uIGRpc3BhdGNoZWQKK2V2ZW50OjBYMDk0MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0lOU1RfRklOX0dSUDE0OCA6IChHcm91cCAxNDggcG1fbXJrX2luc3QpIE1hcmtlZCBpbnN0cnVjdGlvbiBmaW5pc2hlZAorZXZlbnQ6MFgwOTQzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDE0OCA6IChHcm91cCAxNDggcG1fbXJrX2luc3QpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKKworI0dyb3VwIDE0OSBwbV9tcmtfZnB1X2ZpbiwgTWFya2VkIEZsb2F0aW5nIFBvaW50IGluc3RydWN0aW9ucyBmaW5pc2hlZAorZXZlbnQ6MFgwOTUwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfRlBVMF9GSU5fR1JQMTQ5IDogKEdyb3VwIDE0OSBwbV9tcmtfZnB1X2ZpbikgTWFya2VkIGluc3RydWN0aW9uIEZQVTAgcHJvY2Vzc2luZyBmaW5pc2hlZAorZXZlbnQ6MFgwOTUxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfRlBVMV9GSU5fR1JQMTQ5IDogKEdyb3VwIDE0OSBwbV9tcmtfZnB1X2ZpbikgTWFya2VkIGluc3RydWN0aW9uIEZQVTEgcHJvY2Vzc2luZyBmaW5pc2hlZAorZXZlbnQ6MFgwOTUyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfRlBVX0ZJTl9HUlAxNDkgOiAoR3JvdXAgMTQ5IHBtX21ya19mcHVfZmluKSBNYXJrZWQgaW5zdHJ1Y3Rpb24gRlBVIHByb2Nlc3NpbmcgZmluaXNoZWQKK2V2ZW50OjBYMDk1MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAxNDkgOiAoR3JvdXAgMTQ5IHBtX21ya19mcHVfZmluKSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCisKKyNHcm91cCAxNTAgcG1fbXJrX21pc2MsIE1hcmtlZCBtaXNjIGV2ZW50cworZXZlbnQ6MFgwOTYwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfTFNVX1JFSkVDVF9VTERfR1JQMTUwIDogKEdyb3VwIDE1MCBwbV9tcmtfbWlzYykgTWFya2VkIHVuYWxpZ25lZCBsb2FkIHJlamVjdAorZXZlbnQ6MFgwOTYxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfRlhVX0ZJTl9HUlAxNTAgOiAoR3JvdXAgMTUwIHBtX21ya19taXNjKSBNYXJrZWQgaW5zdHJ1Y3Rpb24gRlhVIHByb2Nlc3NpbmcgZmluaXNoZWQKK2V2ZW50OjBYMDk2MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0RGVV9GSU5fR1JQMTUwIDogKEdyb3VwIDE1MCBwbV9tcmtfbWlzYykgREZVIG1hcmtlZCBpbnN0cnVjdGlvbiBmaW5pc2gKK2V2ZW50OjBYMDk2MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAxNTAgOiAoR3JvdXAgMTUwIHBtX21ya19taXNjKSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCisKKyNHcm91cCAxNTEgcG1fbXJrX21pc2MyLCBNYXJrZWQgbWlzYyBldmVudHMKK2V2ZW50OjBYMDk3MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX1NUQ1hfRkFJTF9HUlAxNTEgOiAoR3JvdXAgMTUxIHBtX21ya19taXNjMikgTWFya2VkIFNUQ1ggZmFpbGVkCitldmVudDowWDA5NzEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19JRlVfRklOX0dSUDE1MSA6IChHcm91cCAxNTEgcG1fbXJrX21pc2MyKSBNYXJrZWQgaW5zdHJ1Y3Rpb24gSUZVIHByb2Nlc3NpbmcgZmluaXNoZWQKK2V2ZW50OjBYMDk3MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAxNTEgOiAoR3JvdXAgMTUxIHBtX21ya19taXNjMikgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgwOTczIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfSU5TVF9USU1FT19HUlAxNTEgOiAoR3JvdXAgMTUxIHBtX21ya19taXNjMikgTWFya2VkIEluc3RydWN0aW9uIGZpbmlzaCB0aW1lb3V0IAorCisjR3JvdXAgMTUyIHBtX21ya19taXNjMywgTWFya2VkIG1pc2MgZXZlbnRzCitldmVudDowWDA5ODAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19WTVhfU1RfSVNTVUVEX0dSUDE1MiA6IChHcm91cCAxNTIgcG1fbXJrX21pc2MzKSBNYXJrZWQgVk1YIHN0b3JlIGlzc3VlZAorZXZlbnQ6MFgwOTgxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfTFNVMF9SRUpFQ1RfTDJNSVNTX0dSUDE1MiA6IChHcm91cCAxNTIgcG1fbXJrX21pc2MzKSBMU1UwIG1hcmtlZCBMMiBtaXNzIHJlamVjdAorZXZlbnQ6MFgwOTgyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDE1MiA6IChHcm91cCAxNTIgcG1fbXJrX21pc2MzKSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDA5ODMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19MU1VfREVSQVRfTUlTU19HUlAxNTIgOiAoR3JvdXAgMTUyIHBtX21ya19taXNjMykgTWFya2VkIERFUkFUIG1pc3MKKworI0dyb3VwIDE1MyBwbV9tcmtfbWlzYzQsIE1hcmtlZCBtaXNjIGV2ZW50cworZXZlbnQ6MFgwOTkwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDE1MyA6IChHcm91cCAxNTMgcG1fbXJrX21pc2M0KSBQcm9jZXNzb3IgY3ljbGVzCitldmVudDowWDA5OTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQMTUzIDogKEdyb3VwIDE1MyBwbV9tcmtfbWlzYzQpIFByb2Nlc3NvciBjeWNsZXMKK2V2ZW50OjBYMDk5MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAxNTMgOiAoR3JvdXAgMTUzIHBtX21ya19taXNjNCkgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgwOTkzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfTFNVX0ZJTl9HUlAxNTMgOiAoR3JvdXAgMTUzIHBtX21ya19taXNjNCkgTWFya2VkIGluc3RydWN0aW9uIExTVSBwcm9jZXNzaW5nIGZpbmlzaGVkCisKKyNHcm91cCAxNTQgcG1fbXJrX3N0LCBNYXJrZWQgc3RvcmVzIGV2ZW50cworZXZlbnQ6MFgwOUEwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfU1RfQ01QTF9HUlAxNTQgOiAoR3JvdXAgMTU0IHBtX21ya19zdCkgTWFya2VkIHN0b3JlIGluc3RydWN0aW9uIGNvbXBsZXRlZAorZXZlbnQ6MFgwOUExIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfU1RfR1BTX0dSUDE1NCA6IChHcm91cCAxNTQgcG1fbXJrX3N0KSBNYXJrZWQgc3RvcmUgc2VudCB0byBHUFMKK2V2ZW50OjBYMDlBMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX1NUX0NNUExfSU5UX0dSUDE1NCA6IChHcm91cCAxNTQgcG1fbXJrX3N0KSBNYXJrZWQgc3RvcmUgY29tcGxldGVkIHdpdGggaW50ZXJ2ZW50aW9uCitldmVudDowWDA5QTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMTU0IDogKEdyb3VwIDE1NCBwbV9tcmtfc3QpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKKworI0dyb3VwIDE1NSBwbV9tcmtfcHRlZywgTWFya2VkIFBURUcKK2V2ZW50OjBYMDlCMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX1BURUdfRlJPTV9MMl9HUlAxNTUgOiAoR3JvdXAgMTU1IHBtX21ya19wdGVnKSBNYXJrZWQgUFRFRyBsb2FkZWQgZnJvbSBMMi41IG1vZGlmaWVkCitldmVudDowWDA5QjEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19QVEVHX0ZST01fRE1FTV9HUlAxNTUgOiAoR3JvdXAgMTU1IHBtX21ya19wdGVnKSBNYXJrZWQgUFRFRyBsb2FkZWQgZnJvbSBkaXN0YW50IG1lbW9yeQorZXZlbnQ6MFgwOUIyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfUFRFR19GUk9NX0RMMkwzX1NIUl9HUlAxNTUgOiAoR3JvdXAgMTU1IHBtX21ya19wdGVnKSBNYXJrZWQgUFRFRyBsb2FkZWQgZnJvbSBkaXN0YW50IEwyIG9yIEwzIHNoYXJlZAorZXZlbnQ6MFgwOUIzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDE1NSA6IChHcm91cCAxNTUgcG1fbXJrX3B0ZWcpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKKworI0dyb3VwIDE1NiBwbV9tcmtfcHRlZzIsIE1hcmtlZCBQVEVHCitldmVudDowWDA5QzAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMTU2IDogKEdyb3VwIDE1NiBwbV9tcmtfcHRlZzIpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMDlDMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX1BURUdfRlJPTV9MMjFfR1JQMTU2IDogKEdyb3VwIDE1NiBwbV9tcmtfcHRlZzIpIE1hcmtlZCBQVEVHIGxvYWRlZCBmcm9tIHByaXZhdGUgTDIgb3RoZXIgY29yZQorZXZlbnQ6MFgwOUMyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfUFRFR19GUk9NX0wyNV9NT0RfR1JQMTU2IDogKEdyb3VwIDE1NiBwbV9tcmtfcHRlZzIpIE1hcmtlZCBQVEVHIGxvYWRlZCBmcm9tIEwyLjUgbW9kaWZpZWQKK2V2ZW50OjBYMDlDMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX1BURUdfRlJPTV9ETDJMM19NT0RfR1JQMTU2IDogKEdyb3VwIDE1NiBwbV9tcmtfcHRlZzIpIE1hcmtlZCBQVEVHIGxvYWRlZCBmcm9tIGRpc3RhbnQgTDIgb3IgTDMgbW9kaWZpZWQKKworI0dyb3VwIDE1NyBwbV9tcmtfcHRlZzMsIE1hcmtlZCBQVEVHCitldmVudDowWDA5RDAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19QVEVHX0ZST01fTDM1X01PRF9HUlAxNTcgOiAoR3JvdXAgMTU3IHBtX21ya19wdGVnMykgTWFya2VkIFBURUcgbG9hZGVkIGZyb20gTDMuNSBtb2RpZmllZAorZXZlbnQ6MFgwOUQxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfUFRFR19GUk9NX0wzNV9TSFJfR1JQMTU3IDogKEdyb3VwIDE1NyBwbV9tcmtfcHRlZzMpIE1hcmtlZCBQVEVHIGxvYWRlZCBmcm9tIEwzLjUgc2hhcmVkCitldmVudDowWDA5RDIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMTU3IDogKEdyb3VwIDE1NyBwbV9tcmtfcHRlZzMpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMDlEMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX1BURUdfRlJPTV9MMjVfU0hSX0dSUDE1NyA6IChHcm91cCAxNTcgcG1fbXJrX3B0ZWczKSBNYXJrZWQgUFRFRyBsb2FkZWQgZnJvbSBMMi41IHNoYXJlZAorCisjR3JvdXAgMTU4IHBtX21ya19wdGVnNCwgTWFya2VkIFBURUcKK2V2ZW50OjBYMDlFMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX1BURUdfRlJPTV9NRU1fRFBfR1JQMTU4IDogKEdyb3VwIDE1OCBwbV9tcmtfcHRlZzQpIE1hcmtlZCBQVEVHIGxvYWRlZCBmcm9tIGRvdWJsZSBwdW1wIG1lbW9yeQorZXZlbnQ6MFgwOUUxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDE1OCA6IChHcm91cCAxNTggcG1fbXJrX3B0ZWc0KSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDA5RTIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19QVEVHX0ZST01fTDNfR1JQMTU4IDogKEdyb3VwIDE1OCBwbV9tcmtfcHRlZzQpIE1hcmtlZCBQVEVHIGxvYWRlZCBmcm9tIEwzCitldmVudDowWDA5RTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19QVEVHX0ZST01fTDJNSVNTX0dSUDE1OCA6IChHcm91cCAxNTggcG1fbXJrX3B0ZWc0KSBNYXJrZWQgUFRFRyBsb2FkZWQgZnJvbSBMMiBtaXNzCisKKyNHcm91cCAxNTkgcG1fbXJrX3B0ZWc1LCBNYXJrZWQgUFRFRworZXZlbnQ6MFgwOUYwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfUFRFR19GUk9NX1JMMkwzX01PRF9HUlAxNTkgOiAoR3JvdXAgMTU5IHBtX21ya19wdGVnNSkgTWFya2VkIFBURUcgbG9hZGVkIGZyb20gcmVtb3RlIEwyIG9yIEwzIG1vZGlmaWVkCitldmVudDowWDA5RjEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMTU5IDogKEdyb3VwIDE1OSBwbV9tcmtfcHRlZzUpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMDlGMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX1BURUdfRlJPTV9MM01JU1NfR1JQMTU5IDogKEdyb3VwIDE1OSBwbV9tcmtfcHRlZzUpIE1hcmtlZCBQVEVHIGxvYWRlZCBmcm9tIEwzIG1pc3MKK2V2ZW50OjBYMDlGMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX1BURUdfRlJPTV9MTUVNX0dSUDE1OSA6IChHcm91cCAxNTkgcG1fbXJrX3B0ZWc1KSBNYXJrZWQgUFRFRyBsb2FkZWQgZnJvbSBsb2NhbCBtZW1vcnkKKworI0dyb3VwIDE2MCBwbV9tcmtfcHRlZzYsIE1hcmtlZCBQVEVHCitldmVudDowWDBBMDAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQMTYwIDogKEdyb3VwIDE2MCBwbV9tcmtfcHRlZzYpIFByb2Nlc3NvciBjeWNsZXMKK2V2ZW50OjBYMEEwMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX1BURUdfRlJPTV9STDJMM19TSFJfR1JQMTYwIDogKEdyb3VwIDE2MCBwbV9tcmtfcHRlZzYpIE1hcmtlZCBQVEVHIGxvYWRlZCBmcm9tIHJlbW90ZSBMMiBvciBMMyBzaGFyZWQKK2V2ZW50OjBYMEEwMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX1BURUdfRlJPTV9STUVNX0dSUDE2MCA6IChHcm91cCAxNjAgcG1fbXJrX3B0ZWc2KSBNYXJrZWQgUFRFRyBsb2FkZWQgZnJvbSByZW1vdGUgbWVtb3J5CitldmVudDowWDBBMDMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMTYwIDogKEdyb3VwIDE2MCBwbV9tcmtfcHRlZzYpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKKworI0dyb3VwIDE2MSBwbV9tcmtfdm14LCBNYXJrZWQgVk1YCitldmVudDowWDBBMTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19WTVhfQ09NUExFWF9JU1NVRURfR1JQMTYxIDogKEdyb3VwIDE2MSBwbV9tcmtfdm14KSBNYXJrZWQgVk1YIGluc3RydWN0aW9uIGlzc3VlZCB0byBjb21wbGV4CitldmVudDowWDBBMTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19WTVhfRkxPQVRfSVNTVUVEX0dSUDE2MSA6IChHcm91cCAxNjEgcG1fbXJrX3ZteCkgTWFya2VkIFZNWCBpbnN0cnVjdGlvbiBpc3N1ZWQgdG8gZmxvYXQKK2V2ZW50OjBYMEExMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX1ZNWF9QRVJNVVRFX0lTU1VFRF9HUlAxNjEgOiAoR3JvdXAgMTYxIHBtX21ya192bXgpIE1hcmtlZCBWTVggaW5zdHJ1Y3Rpb24gaXNzdWVkIHRvIHBlcm11dGUKK2V2ZW50OjBYMEExMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAxNjEgOiAoR3JvdXAgMTYxIHBtX21ya192bXgpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKKworI0dyb3VwIDE2MiBwbV9tcmtfdm14MiwgTWFya2VkIFZNWAorZXZlbnQ6MFgwQTIwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfVk1YMF9MRF9XUkJBQ0tfR1JQMTYyIDogKEdyb3VwIDE2MiBwbV9tcmtfdm14MikgTWFya2VkIFZNWDAgbG9hZCB3cml0ZWJhY2sgdmFsaWQKK2V2ZW50OjBYMEEyMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX1ZNWDFfTERfV1JCQUNLX0dSUDE2MiA6IChHcm91cCAxNjIgcG1fbXJrX3ZteDIpIE1hcmtlZCBWTVgxIGxvYWQgd3JpdGViYWNrIHZhbGlkCitldmVudDowWDBBMjIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19EVExCX1JFRl9HUlAxNjIgOiAoR3JvdXAgMTYyIHBtX21ya192bXgyKSBNYXJrZWQgRGF0YSBUTEIgcmVmZXJlbmNlCitldmVudDowWDBBMjMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMTYyIDogKEdyb3VwIDE2MiBwbV9tcmtfdm14MikgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorCisjR3JvdXAgMTYzIHBtX21ya192bXgzLCBNYXJrZWQgVk1YCitldmVudDowWDBBMzAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19WTVhfU0lNUExFX0lTU1VFRF9HUlAxNjMgOiAoR3JvdXAgMTYzIHBtX21ya192bXgzKSBNYXJrZWQgVk1YIGluc3RydWN0aW9uIGlzc3VlZCB0byBzaW1wbGUKK2V2ZW50OjBYMEEzMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fVk1YX1NJTVBMRV9JU1NVRURfR1JQMTYzIDogKEdyb3VwIDE2MyBwbV9tcmtfdm14MykgVk1YIGluc3RydWN0aW9uIGlzc3VlZCB0byBzaW1wbGUKK2V2ZW50OjBYMEEzMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlAxNjMgOiAoR3JvdXAgMTYzIHBtX21ya192bXgzKSBQcm9jZXNzb3IgY3ljbGVzCitldmVudDowWDBBMzMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMTYzIDogKEdyb3VwIDE2MyBwbV9tcmtfdm14MykgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorCisjR3JvdXAgMTY0IHBtX21ya19mcCwgTWFya2VkIEZQIGV2ZW50cworZXZlbnQ6MFgwQTQwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfRlBVMF9GSU5fR1JQMTY0IDogKEdyb3VwIDE2NCBwbV9tcmtfZnApIE1hcmtlZCBpbnN0cnVjdGlvbiBGUFUwIHByb2Nlc3NpbmcgZmluaXNoZWQKK2V2ZW50OjBYMEE0MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0ZQVV9GSU5fR1JQMTY0IDogKEdyb3VwIDE2NCBwbV9tcmtfZnApIE1hcmtlZCBpbnN0cnVjdGlvbiBGUFUgcHJvY2Vzc2luZyBmaW5pc2hlZAorZXZlbnQ6MFgwQTQyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfRlBVMV9GSU5fR1JQMTY0IDogKEdyb3VwIDE2NCBwbV9tcmtfZnApIE1hcmtlZCBpbnN0cnVjdGlvbiBGUFUxIHByb2Nlc3NpbmcgZmluaXNoZWQKK2V2ZW50OjBYMEE0MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAxNjQgOiAoR3JvdXAgMTY0IHBtX21ya19mcCkgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorCisjR3JvdXAgMTY1IHBtX21ya19kZXJhdF9yZWYsIE1hcmtlZCBERVJBVCByZWYKK2V2ZW50OjBYMEE1MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0RFUkFUX1JFRl82NEtfR1JQMTY1IDogKEdyb3VwIDE2NSBwbV9tcmtfZGVyYXRfcmVmKSBNYXJrZWQgREVSQVQgcmVmZXJlbmNlIGZvciA2NEsgcGFnZQorZXZlbnQ6MFgwQTUxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfREVSQVRfUkVGXzRLX0dSUDE2NSA6IChHcm91cCAxNjUgcG1fbXJrX2RlcmF0X3JlZikgTWFya2VkIERFUkFUIHJlZmVyZW5jZSBmb3IgNEsgcGFnZQorZXZlbnQ6MFgwQTUyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfREVSQVRfUkVGXzE2TV9HUlAxNjUgOiAoR3JvdXAgMTY1IHBtX21ya19kZXJhdF9yZWYpIE1hcmtlZCBERVJBVCByZWZlcmVuY2UgZm9yIDE2TSBwYWdlCitldmVudDowWDBBNTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMTY1IDogKEdyb3VwIDE2NSBwbV9tcmtfZGVyYXRfcmVmKSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCisKKyNHcm91cCAxNjYgcG1fbXJrX2RlcmF0X21pc3MsIE1hcmtlZCBERVJBVCBtaXNzCitldmVudDowWDBBNjAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19ERVJBVF9NSVNTXzY0S19HUlAxNjYgOiAoR3JvdXAgMTY2IHBtX21ya19kZXJhdF9taXNzKSBNYXJrZWQgREVSQVQgbWlzc2VzIGZvciA2NEsgcGFnZQorZXZlbnQ6MFgwQTYxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfREVSQVRfTUlTU180S19HUlAxNjYgOiAoR3JvdXAgMTY2IHBtX21ya19kZXJhdF9taXNzKSBNYXJrZWQgREVSQVQgbWlzc2VzIGZvciA0SyBwYWdlCitldmVudDowWDBBNjIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19ERVJBVF9NSVNTXzE2TV9HUlAxNjYgOiAoR3JvdXAgMTY2IHBtX21ya19kZXJhdF9taXNzKSBNYXJrZWQgREVSQVQgbWlzc2VzIGZvciAxNk0gcGFnZQorZXZlbnQ6MFgwQTYzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDE2NiA6IChHcm91cCAxNjYgcG1fbXJrX2RlcmF0X21pc3MpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKKworI0dyb3VwIDE2NyBwbV9kY2FjaGVfZWRnZSwgRCBjYWNoZSAtIGVkZ2UKK2V2ZW50OjBYMEE3MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTERfTUlTU19MMV9HUlAxNjcgOiAoR3JvdXAgMTY3IHBtX2RjYWNoZV9lZGdlKSBMMSBEIGNhY2hlIGxvYWQgbWlzc2VzCitldmVudDowWDBBNzEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9ERVJBVF9NSVNTX0dSUDE2NyA6IChHcm91cCAxNjcgcG1fZGNhY2hlX2VkZ2UpIERFUkFUIG1pc3NlcworZXZlbnQ6MFgwQTcyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MRF9NSVNTX0wxX0dSUDE2NyA6IChHcm91cCAxNjcgcG1fZGNhY2hlX2VkZ2UpIEwxIEQgY2FjaGUgbG9hZCBtaXNzZXMKK2V2ZW50OjBYMEE3MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVX0RFUkFUX01JU1NfR1JQMTY3IDogKEdyb3VwIDE2NyBwbV9kY2FjaGVfZWRnZSkgREVSQVQgbWlzc2VzCisKKyNHcm91cCAxNjggcG1fbHN1X2xtcV9lZGdlLCBMU1UgTE1RIGV2ZW50cyAtIGVkZ2UKK2V2ZW50OjBYMEE4MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVX0xNUV9GVUxMX0NZQ19HUlAxNjggOiAoR3JvdXAgMTY4IHBtX2xzdV9sbXFfZWRnZSkgQ3ljbGVzIExNUSBmdWxsCitldmVudDowWDBBODEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9MTVFfU1JRX0VNUFRZX0NPVU5UX0dSUDE2OCA6IChHcm91cCAxNjggcG1fbHN1X2xtcV9lZGdlKSBQZXJpb2RzIExNUSBhbmQgU1JRIGVtcHR5CitldmVudDowWDBBODIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9MTVFfU1JRX0VNUFRZX0JPVEhfQ09VTlRfR1JQMTY4IDogKEdyb3VwIDE2OCBwbV9sc3VfbG1xX2VkZ2UpIFBlcmlvZHMgYm90aCB0aHJlYWRzIExNUSBhbmQgU1JRIGVtcHR5CitldmVudDowWDBBODMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVTBfUkVKRUNUX0wyTUlTU19HUlAxNjggOiAoR3JvdXAgMTY4IHBtX2xzdV9sbXFfZWRnZSkgTFNVMCBMMiBtaXNzIHJlamVjdAorCisjR3JvdXAgMTY5IHBtX2djdF9lZGdlLCBHQ1QgZXZlbnRzIC0gZWRnZQorZXZlbnQ6MFgwQTkwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9HQ1RfTk9TTE9UX0NPVU5UX0dSUDE2OSA6IChHcm91cCAxNjkgcG1fZ2N0X2VkZ2UpIFBlcmlvZHMgbm8gR0NUIHNsb3QgYWxsb2NhdGVkCitldmVudDowWDBBOTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0dDVF9FTVBUWV9DT1VOVF9HUlAxNjkgOiAoR3JvdXAgMTY5IHBtX2djdF9lZGdlKSBQZXJpb2RzIEdDVCBlbXB0eQorZXZlbnQ6MFgwQTkyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9HQ1RfRlVMTF9DT1VOVF9HUlAxNjkgOiAoR3JvdXAgMTY5IHBtX2djdF9lZGdlKSBQZXJpb2RzIEdDVCBmdWxsCitldmVudDowWDBBOTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lOU1RfRkVUQ0hfQ1lDX0dSUDE2OSA6IChHcm91cCAxNjkgcG1fZ2N0X2VkZ2UpIEN5Y2xlcyBhdCBsZWFzdCAxIGluc3RydWN0aW9uIGZldGNoZWQKKworI0dyb3VwIDE3MCBwbV9mcmVxX2VkZ2UsIEZyZXF1ZW5jeSBldmVudHMgLSBlZGdlCitldmVudDowWDBBQTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RQVV9IRUxEX1RIRVJNQUxfQ09VTlRfR1JQMTcwIDogKEdyb3VwIDE3MCBwbV9mcmVxX2VkZ2UpIFBlcmlvZHMgRElTUCB1bml0IGhlbGQgZHVlIHRvIHRoZXJtYWwgY29uZGl0aW9uCitldmVudDowWDBBQTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RQVV9IRUxEX1BPV0VSX0NPVU5UX0dSUDE3MCA6IChHcm91cCAxNzAgcG1fZnJlcV9lZGdlKSBQZXJpb2RzIERJU1AgdW5pdCBoZWxkIGR1ZSB0byBQb3dlciBNYW5hZ2VtZW50CitldmVudDowWDBBQTIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZSRVFfRE9XTl9HUlAxNzAgOiAoR3JvdXAgMTcwIHBtX2ZyZXFfZWRnZSkgRnJlcXVlbmN5IGlzIGJlaW5nIHNsZXdlZCBkb3duIGR1ZSB0byBQb3dlciBNYW5hZ2VtZW50CitldmVudDowWDBBQTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZSRVFfVVBfR1JQMTcwIDogKEdyb3VwIDE3MCBwbV9mcmVxX2VkZ2UpIEZyZXF1ZW5jeSBpcyBiZWluZyBzbGV3ZWQgdXAgZHVlIHRvIFBvd2VyIE1hbmFnZW1lbnQKKworI0dyb3VwIDE3MSBwbV9kaXNwX3dhaXRfZWRnZSwgRGlzcGF0Y2ggc3RhbGxzIC0gZWRnZQorZXZlbnQ6MFgwQUIwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMV9JQ0FDSEVfTUlTU19HUlAxNzEgOiAoR3JvdXAgMTcxIHBtX2Rpc3Bfd2FpdF9lZGdlKSBMMSBJIGNhY2hlIG1pc3MgY291bnQKK2V2ZW50OjBYMEFCMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRFBVX1dUX0lDX01JU1NfQ09VTlRfR1JQMTcxIDogKEdyb3VwIDE3MSBwbV9kaXNwX3dhaXRfZWRnZSkgUGVyaW9kcyBESVNQIHVuaXQgaXMgc3RhbGxlZCBkdWUgdG8gSSBjYWNoZSBtaXNzCitldmVudDowWDBBQjIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RQVV9XVF9DT1VOVF9HUlAxNzEgOiAoR3JvdXAgMTcxIHBtX2Rpc3Bfd2FpdF9lZGdlKSBQZXJpb2RzIERJU1AgdW5pdCBpcyBzdGFsbGVkIHdhaXRpbmcgZm9yIGluc3RydWN0aW9ucworZXZlbnQ6MFgwQUIzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EUFVfV1RfQlJfTVBSRURfQ09VTlRfR1JQMTcxIDogKEdyb3VwIDE3MSBwbV9kaXNwX3dhaXRfZWRnZSkgUGVyaW9kcyBESVNQIHVuaXQgaXMgc3RhbGxlZCBkdWUgdG8gYnJhbmNoIG1pc3ByZWRpY3Rpb24KKworI0dyb3VwIDE3MiBwbV9lZGdlMSwgRURHRSBldmVudCBncm91cAorZXZlbnQ6MFgwQUMwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MRF9NSVNTX0wxX0dSUDE3MiA6IChHcm91cCAxNzIgcG1fZWRnZTEpIEwxIEQgY2FjaGUgbG9hZCBtaXNzZXMKK2V2ZW50OjBYMEFDMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRFBVX1dUX0lDX01JU1NfR1JQMTcyIDogKEdyb3VwIDE3MiBwbV9lZGdlMSkgQ3ljbGVzIERJU1AgdW5pdCBpcyBzdGFsbGVkIGR1ZSB0byBJIGNhY2hlIG1pc3MKK2V2ZW50OjBYMEFDMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTExBX0NPVU5UX0dSUDE3MiA6IChHcm91cCAxNzIgcG1fZWRnZTEpIFRyYW5zaXRpb25zIGludG8gTG9hZCBMb29rIEFoZWFkIG1vZGUKK2V2ZW50OjBYMEFDMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTExBX0NZQ19HUlAxNzIgOiAoR3JvdXAgMTcyIHBtX2VkZ2UxKSBMb2FkIExvb2sgQWhlYWQgQWN0aXZlCisKKyNHcm91cCAxNzMgcG1fZWRnZTIsIEVER0UgZXZlbnQgZ3JvdXAKK2V2ZW50OjBYMEFEMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fMElOU1RfRkVUQ0hfQ09VTlRfR1JQMTczIDogKEdyb3VwIDE3MyBwbV9lZGdlMikgUGVyaW9kcyB3aXRoIG5vIGluc3RydWN0aW9ucyBmZXRjaGVkCitldmVudDowWDBBRDEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNXzBJTlNUX0ZFVENIX0dSUDE3MyA6IChHcm91cCAxNzMgcG1fZWRnZTIpIE5vIGluc3RydWN0aW9ucyBmZXRjaGVkCitldmVudDowWDBBRDIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lCVUZfRlVMTF9DT1VOVF9HUlAxNzMgOiAoR3JvdXAgMTczIHBtX2VkZ2UyKSBQZXJpb2RzIGluc3RydWN0aW9uIGJ1ZmZlciBmdWxsCitldmVudDowWDBBRDMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lCVUZfRlVMTF9DWUNfR1JQMTczIDogKEdyb3VwIDE3MyBwbV9lZGdlMikgQ3ljbGVzIGluc3RydWN0aW9uIGJ1ZmZlciBmdWxsCisKKyNHcm91cCAxNzQgcG1fZWRnZTMsIEVER0UgZXZlbnQgZ3JvdXAKK2V2ZW50OjBYMEFFMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0NPVU5UX0dSUDE3NCA6IChHcm91cCAxNzQgcG1fZWRnZTMpIFJ1biBQZXJpb2RzCitldmVudDowWDBBRTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDE3NCA6IChHcm91cCAxNzQgcG1fZWRnZTMpIFJ1biBjeWNsZXMKK2V2ZW50OjBYMEFFMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU5TVF9UQUJMRVdBTEtfQ09VTlRfR1JQMTc0IDogKEdyb3VwIDE3NCBwbV9lZGdlMykgUGVyaW9kcyBkb2luZyBpbnN0cnVjdGlvbiB0YWJsZXdhbGtzCitldmVudDowWDBBRTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lOU1RfVEFCTEVXQUxLX0NZQ19HUlAxNzQgOiAoR3JvdXAgMTc0IHBtX2VkZ2UzKSBDeWNsZXMgZG9pbmcgaW5zdHJ1Y3Rpb24gdGFibGV3YWxrcworCisjR3JvdXAgMTc1IHBtX2VkZ2U0LCBFREdFIGV2ZW50IGdyb3VwCitldmVudDowWDBBRjAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0dDVF9GVUxMX0NPVU5UX0dSUDE3NSA6IChHcm91cCAxNzUgcG1fZWRnZTQpIFBlcmlvZHMgR0NUIGZ1bGwKK2V2ZW50OjBYMEFGMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fR0NUX0ZVTExfQ1lDX0dSUDE3NSA6IChHcm91cCAxNzUgcG1fZWRnZTQpIEN5Y2xlcyBHQ1QgZnVsbAorZXZlbnQ6MFgwQUYyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9OT19JVEFHX0NPVU5UX0dSUDE3NSA6IChHcm91cCAxNzUgcG1fZWRnZTQpIFBlcmlvZHMgbm8gSVRBRyBhdmFpbGFibGUKK2V2ZW50OjBYMEFGMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTk9fSVRBR19DWUNfR1JQMTc1IDogKEdyb3VwIDE3NSBwbV9lZGdlNCkgQ3lsZXMgbm8gSVRBRyBhdmFpbGFibGUKKworI0dyb3VwIDE3NiBwbV9lZGdlNSwgRURHRSBldmVudCBncm91cAorZXZlbnQ6MFgwQjAwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9USFJEX09ORV9SVU5fQ09VTlRfR1JQMTc2IDogKEdyb3VwIDE3NiBwbV9lZGdlNSkgUGVyaW9kcyBvbmUgb2YgdGhlIHRocmVhZHMgaW4gcnVuIGN5Y2xlcworZXZlbnQ6MFgwQjAxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9IVl9DT1VOVF9HUlAxNzYgOiAoR3JvdXAgMTc2IHBtX2VkZ2U1KSBIeXBlcnZpc29yIFBlcmlvZHMKK2V2ZW50OjBYMEIwMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fU1lOQ19DT1VOVF9HUlAxNzYgOiAoR3JvdXAgMTc2IHBtX2VkZ2U1KSBTWU5DIGluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMEIwMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fU1lOQ19DWUNfR1JQMTc2IDogKEdyb3VwIDE3NiBwbV9lZGdlNSkgU3luYyBkdXJhdGlvbgorCisjR3JvdXAgMTc3IHBtX25vZWRnZTUsIEVER0UgZXZlbnQgZ3JvdXAKK2V2ZW50OjBYMEIxMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fVEhSRF9PTkVfUlVOX0NZQ19HUlAxNzcgOiAoR3JvdXAgMTc3IHBtX25vZWRnZTUpIE9uZSBvZiB0aGUgdGhyZWFkcyBpbiBydW4gY3ljbGVzCitldmVudDowWDBCMTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0hWX0NZQ19HUlAxNzcgOiAoR3JvdXAgMTc3IHBtX25vZWRnZTUpIEh5cGVydmlzb3IgQ3ljbGVzCitldmVudDowWDBCMTIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1NZTkNfQ09VTlRfR1JQMTc3IDogKEdyb3VwIDE3NyBwbV9ub2VkZ2U1KSBTWU5DIGluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMEIxMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fU1lOQ19DWUNfR1JQMTc3IDogKEdyb3VwIDE3NyBwbV9ub2VkZ2U1KSBTeW5jIGR1cmF0aW9uCisKKyNHcm91cCAxNzggcG1fZWRnZTYsIEVER0UgZXZlbnQgZ3JvdXAKK2V2ZW50OjBYMEIyMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRFBVX0hFTERfVEhFUk1BTF9DT1VOVF9HUlAxNzggOiAoR3JvdXAgMTc4IHBtX2VkZ2U2KSBQZXJpb2RzIERJU1AgdW5pdCBoZWxkIGR1ZSB0byB0aGVybWFsIGNvbmRpdGlvbgorZXZlbnQ6MFgwQjIxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EUFVfSEVMRF9DT1VOVF9HUlAxNzggOiAoR3JvdXAgMTc4IHBtX2VkZ2U2KSBQZXJpb2RzIERJU1AgdW5pdCBoZWxkCitldmVudDowWDBCMjIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RQVV9XVF9DT1VOVF9HUlAxNzggOiAoR3JvdXAgMTc4IHBtX2VkZ2U2KSBQZXJpb2RzIERJU1AgdW5pdCBpcyBzdGFsbGVkIHdhaXRpbmcgZm9yIGluc3RydWN0aW9ucworZXZlbnQ6MFgwQjIzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EUFVfV1RfQlJfTVBSRURfQ09VTlRfR1JQMTc4IDogKEdyb3VwIDE3OCBwbV9lZGdlNikgUGVyaW9kcyBESVNQIHVuaXQgaXMgc3RhbGxlZCBkdWUgdG8gYnJhbmNoIG1pc3ByZWRpY3Rpb24KKworI0dyb3VwIDE3OSBwbV9ub2VkZ2U2LCBFREdFIGV2ZW50IGdyb3VwCitldmVudDowWDBCMzAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RQVV9IRUxEX1RIRVJNQUxfR1JQMTc5IDogKEdyb3VwIDE3OSBwbV9ub2VkZ2U2KSBESVNQIHVuaXQgaGVsZCBkdWUgdG8gdGhlcm1hbCBjb25kaXRpb24KK2V2ZW50OjBYMEIzMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRFBVX0hFTERfR1JQMTc5IDogKEdyb3VwIDE3OSBwbV9ub2VkZ2U2KSBESVNQIHVuaXQgaGVsZAorZXZlbnQ6MFgwQjMyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EUFVfV1RfR1JQMTc5IDogKEdyb3VwIDE3OSBwbV9ub2VkZ2U2KSBDeWNsZXMgRElTUCB1bml0IGlzIHN0YWxsZWQgd2FpdGluZyBmb3IgaW5zdHJ1Y3Rpb25zCitldmVudDowWDBCMzMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RQVV9XVF9CUl9NUFJFRF9HUlAxNzkgOiAoR3JvdXAgMTc5IHBtX25vZWRnZTYpIEN5Y2xlcyBESVNQIHVuaXQgaXMgc3RhbGxlZCBkdWUgdG8gYnJhbmNoIG1pc3ByZWRpY3Rpb24KKworI0dyb3VwIDE4MCBwbV9lZGdlNywgRURHRSBldmVudCBncm91cAorZXZlbnQ6MFgwQjQwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9HQ1RfTk9TTE9UX0NPVU5UX0dSUDE4MCA6IChHcm91cCAxODAgcG1fZWRnZTcpIFBlcmlvZHMgbm8gR0NUIHNsb3QgYWxsb2NhdGVkCitldmVudDowWDBCNDEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0dDVF9FTVBUWV9DT1VOVF9HUlAxODAgOiAoR3JvdXAgMTgwIHBtX2VkZ2U3KSBQZXJpb2RzIEdDVCBlbXB0eQorZXZlbnQ6MFgwQjQyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1VfTE1RX1NSUV9FTVBUWV9CT1RIX0NPVU5UX0dSUDE4MCA6IChHcm91cCAxODAgcG1fZWRnZTcpIFBlcmlvZHMgYm90aCB0aHJlYWRzIExNUSBhbmQgU1JRIGVtcHR5CitldmVudDowWDBCNDMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9TUlFfRU1QVFlfQ09VTlRfR1JQMTgwIDogKEdyb3VwIDE4MCBwbV9lZGdlNykgUGVyaW9kcyBTUlEgZW1wdHkKKworI0dyb3VwIDE4MSBwbV9ub2VkZ2U3LCBOT0VER0UgZXZlbnQgZ3JvdXAKK2V2ZW50OjBYMEI1MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fR0NUX05PU0xPVF9DWUNfR1JQMTgxIDogKEdyb3VwIDE4MSBwbV9ub2VkZ2U3KSBDeWNsZXMgbm8gR0NUIHNsb3QgYWxsb2NhdGVkCitldmVudDowWDBCNTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0dDVF9FTVBUWV9DWUNfR1JQMTgxIDogKEdyb3VwIDE4MSBwbV9ub2VkZ2U3KSBDeWNsZXMgR0NUIGVtcHR5CitldmVudDowWDBCNTIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9MTVFfU1JRX0VNUFRZX0JPVEhfQ1lDX0dSUDE4MSA6IChHcm91cCAxODEgcG1fbm9lZGdlNykgQ3ljbGVzIGJvdGggdGhyZWFkcyBMTVEgYW5kIFNSUSBlbXB0eQorZXZlbnQ6MFgwQjUzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1VfU1JRX0VNUFRZX0NZQ19HUlAxODEgOiAoR3JvdXAgMTgxIHBtX25vZWRnZTcpIEN5Y2xlcyBTUlEgZW1wdHkKKworI0dyb3VwIDE4MiBwbV9lZGdlOCwgRURHRSBldmVudCBncm91cAorZXZlbnQ6MFgwQjYwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9TWU5DX0NPVU5UX0dSUDE4MiA6IChHcm91cCAxODIgcG1fZWRnZTgpIFNZTkMgaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgwQjYxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1VfTE1RX1NSUV9FTVBUWV9DT1VOVF9HUlAxODIgOiAoR3JvdXAgMTgyIHBtX2VkZ2U4KSBQZXJpb2RzIExNUSBhbmQgU1JRIGVtcHR5CitldmVudDowWDBCNjIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1NZTkNfQ1lDX0dSUDE4MiA6IChHcm91cCAxODIgcG1fZWRnZTgpIFN5bmMgZHVyYXRpb24KK2V2ZW50OjBYMEI2MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVX0RFUkFUX01JU1NfR1JQMTgyIDogKEdyb3VwIDE4MiBwbV9lZGdlOCkgREVSQVQgbWlzc2VzCisKKyNHcm91cCAxODMgcG1fbm9lZGdlOCwgTk9FREdFIGV2ZW50IGdyb3VwCitldmVudDowWDBCNzAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1NZTkNfQ1lDX0dSUDE4MyA6IChHcm91cCAxODMgcG1fbm9lZGdlOCkgU3luYyBkdXJhdGlvbgorZXZlbnQ6MFgwQjcxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1VfTE1RX1NSUV9FTVBUWV9DWUNfR1JQMTgzIDogKEdyb3VwIDE4MyBwbV9ub2VkZ2U4KSBDeWNsZXMgTE1RIGFuZCBTUlEgZW1wdHkKK2V2ZW50OjBYMEI3MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fU1lOQ19DT1VOVF9HUlAxODMgOiAoR3JvdXAgMTgzIHBtX25vZWRnZTgpIFNZTkMgaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgwQjczIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1VfREVSQVRfTUlTU19DWUNfR1JQMTgzIDogKEdyb3VwIDE4MyBwbV9ub2VkZ2U4KSBERVJBVCBtaXNzIGxhdGVuY3kKKworI0dyb3VwIDE4NCBwbV9lZGdlOSwgRURHRSBldmVudCBncm91cAorZXZlbnQ6MFgwQjgwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9TVF9NSVNTX0wxX0dSUDE4NCA6IChHcm91cCAxODQgcG1fZWRnZTkpIEwxIEQgY2FjaGUgc3RvcmUgbWlzc2VzCitldmVudDowWDBCODEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RQVV9XVF9JQ19NSVNTX0NPVU5UX0dSUDE4NCA6IChHcm91cCAxODQgcG1fZWRnZTkpIFBlcmlvZHMgRElTUCB1bml0IGlzIHN0YWxsZWQgZHVlIHRvIEkgY2FjaGUgbWlzcworZXZlbnQ6MFgwQjgyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MRF9NSVNTX0wxX0dSUDE4NCA6IChHcm91cCAxODQgcG1fZWRnZTkpIEwxIEQgY2FjaGUgbG9hZCBtaXNzZXMKK2V2ZW50OjBYMEI4MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTERfUkVGX0wxX0dSUDE4NCA6IChHcm91cCAxODQgcG1fZWRnZTkpIEwxIEQgY2FjaGUgbG9hZCByZWZlcmVuY2VzCisKKyNHcm91cCAxODUgcG1fZWRnZTEwLCBFREdFIGV2ZW50IGdyb3VwCitldmVudDowWDBCOTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RQVV9IRUxEX0NPTVBMRVRJT05fR1JQMTg1IDogKEdyb3VwIDE4NSBwbV9lZGdlMTApIERJU1AgdW5pdCBoZWxkIGR1ZSB0byBjb21wbGV0aW9uIGhvbGRpbmcgZGlzcGF0Y2ggCitldmVudDowWDBCOTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RQVV9IRUxEX1BPV0VSX0NPVU5UX0dSUDE4NSA6IChHcm91cCAxODUgcG1fZWRnZTEwKSBQZXJpb2RzIERJU1AgdW5pdCBoZWxkIGR1ZSB0byBQb3dlciBNYW5hZ2VtZW50CitldmVudDowWDBCOTIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RQVV9IRUxEX0NSX0xPR0lDQUxfR1JQMTg1IDogKEdyb3VwIDE4NSBwbV9lZGdlMTApIERJU1AgdW5pdCBoZWxkIGR1ZSB0byBDUiwgTFIgb3IgQ1RSIHVwZGF0ZWQgYnkgQ1IgbG9naWNhbCwgTVRDUkYsIE1UTFIgb3IgTVRDVFIKK2V2ZW50OjBYMEI5MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fVEhSRF9CT1RIX1JVTl9DT1VOVF9HUlAxODUgOiAoR3JvdXAgMTg1IHBtX2VkZ2UxMCkgUGVyaW9kcyBib3RoIHRocmVhZHMgaW4gcnVuIGN5Y2xlcworCisjR3JvdXAgMTg2IHBtX25vZWRnZTEwLCBOT0VER0UgZXZlbnQgZ3JvdXAKK2V2ZW50OjBYMEJBMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRFBVX0hFTERfQ09NUExFVElPTl9HUlAxODYgOiAoR3JvdXAgMTg2IHBtX25vZWRnZTEwKSBESVNQIHVuaXQgaGVsZCBkdWUgdG8gY29tcGxldGlvbiBob2xkaW5nIGRpc3BhdGNoIAorZXZlbnQ6MFgwQkExIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EUFVfSEVMRF9QT1dFUl9HUlAxODYgOiAoR3JvdXAgMTg2IHBtX25vZWRnZTEwKSBESVNQIHVuaXQgaGVsZCBkdWUgdG8gUG93ZXIgTWFuYWdlbWVudAorZXZlbnQ6MFgwQkEyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EUFVfSEVMRF9DUl9MT0dJQ0FMX0dSUDE4NiA6IChHcm91cCAxODYgcG1fbm9lZGdlMTApIERJU1AgdW5pdCBoZWxkIGR1ZSB0byBDUiwgTFIgb3IgQ1RSIHVwZGF0ZWQgYnkgQ1IgbG9naWNhbCwgTVRDUkYsIE1UTFIgb3IgTVRDVFIKK2V2ZW50OjBYMEJBMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fVEhSRF9CT1RIX1JVTl9DWUNfR1JQMTg2IDogKEdyb3VwIDE4NiBwbV9ub2VkZ2UxMCkgQm90aCB0aHJlYWRzIGluIHJ1biBjeWNsZXMKKworI0dyb3VwIDE4NyBwbV9ocG0xLCBIUE0gZ3JvdXAKK2V2ZW50OjBYMEJCMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVXzFGTE9QX0dSUDE4NyA6IChHcm91cCAxODcgcG1faHBtMSkgRlBVIGV4ZWN1dGVkIG9uZSBmbG9wIGluc3RydWN0aW9uIAorZXZlbnQ6MFgwQkIxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFVfRk1BX0dSUDE4NyA6IChHcm91cCAxODcgcG1faHBtMSkgRlBVIGV4ZWN1dGVkIG11bHRpcGx5LWFkZCBpbnN0cnVjdGlvbgorZXZlbnQ6MFgwQkIyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFVfRlNRUlRfRkRJVl9HUlAxODcgOiAoR3JvdXAgMTg3IHBtX2hwbTEpIEZQVSBleGVjdXRlZCBGU1FSVCBvciBGRElWIGluc3RydWN0aW9uCitldmVudDowWDBCQjMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQMTg3IDogKEdyb3VwIDE4NyBwbV9ocG0xKSBQcm9jZXNzb3IgY3ljbGVzCisKKyNHcm91cCAxODggcG1faHBtMiwgSFBNIGdyb3VwCitldmVudDowWDBCQzAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMTg4IDogKEdyb3VwIDE4OCBwbV9ocG0yKSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDBCQzEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9MREZfR1JQMTg4IDogKEdyb3VwIDE4OCBwbV9ocG0yKSBMU1UgZXhlY3V0ZWQgRmxvYXRpbmcgUG9pbnQgbG9hZCBpbnN0cnVjdGlvbgorZXZlbnQ6MFgwQkMyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFVfU1RGX0dSUDE4OCA6IChHcm91cCAxODggcG1faHBtMikgRlBVIGV4ZWN1dGVkIHN0b3JlIGluc3RydWN0aW9uCitldmVudDowWDBCQzMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQMTg4IDogKEdyb3VwIDE4OCBwbV9ocG0yKSBQcm9jZXNzb3IgY3ljbGVzCisKKyNHcm91cCAxODkgcG1faHBtMywgSFBNIGdyb3VwCitldmVudDowWDBCRDAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQMTg5IDogKEdyb3VwIDE4OSBwbV9ocG0zKSBQcm9jZXNzb3IgY3ljbGVzCitldmVudDowWDBCRDEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xEX01JU1NfTDFfR1JQMTg5IDogKEdyb3VwIDE4OSBwbV9ocG0zKSBMMSBEIGNhY2hlIGxvYWQgbWlzc2VzCitldmVudDowWDBCRDIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1NUX01JU1NfTDFfR1JQMTg5IDogKEdyb3VwIDE4OSBwbV9ocG0zKSBMMSBEIGNhY2hlIHN0b3JlIG1pc3NlcworZXZlbnQ6MFgwQkQzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDE4OSA6IChHcm91cCAxODkgcG1faHBtMykgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorCisjR3JvdXAgMTkwIHBtX2hwbTQsIEhQTSBncm91cAorZXZlbnQ6MFgwQkUwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDE5MCA6IChHcm91cCAxOTAgcG1faHBtNCkgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgwQkUxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JTlNUX0RJU1BfR1JQMTkwIDogKEdyb3VwIDE5MCBwbV9ocG00KSBJbnN0cnVjdGlvbnMgZGlzcGF0Y2hlZAorZXZlbnQ6MFgwQkUyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MRF9SRUZfTDFfR1JQMTkwIDogKEdyb3VwIDE5MCBwbV9ocG00KSBMMSBEIGNhY2hlIGxvYWQgcmVmZXJlbmNlcworZXZlbnQ6MFgwQkUzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9TVF9SRUZfTDFfR1JQMTkwIDogKEdyb3VwIDE5MCBwbV9ocG00KSBMMSBEIGNhY2hlIHN0b3JlIHJlZmVyZW5jZXMKKworI0dyb3VwIDE5MSBwbV9ocG01LCBIUE0gZ3JvdXAKK2V2ZW50OjBYMEJGMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlBVX0ZJTl9HUlAxOTEgOiAoR3JvdXAgMTkxIHBtX2hwbTUpIEZQVSBwcm9kdWNlZCBhIHJlc3VsdAorZXZlbnQ6MFgwQkYxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDE5MSA6IChHcm91cCAxOTEgcG1faHBtNSkgUHJvY2Vzc29yIGN5Y2xlcworZXZlbnQ6MFgwQkYyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GWFUwX0ZJTl9HUlAxOTEgOiAoR3JvdXAgMTkxIHBtX2hwbTUpIEZYVTAgcHJvZHVjZWQgYSByZXN1bHQKK2V2ZW50OjBYMEJGMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlhVMV9GSU5fR1JQMTkxIDogKEdyb3VwIDE5MSBwbV9ocG01KSBGWFUxIHByb2R1Y2VkIGEgcmVzdWx0CisKKyNHcm91cCAxOTIgcG1faHBtNiwgSFBNIGdyb3VwCitldmVudDowWDBDMDAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RBVEFfRlJPTV9MMl9HUlAxOTIgOiAoR3JvdXAgMTkyIHBtX2hwbTYpIERhdGEgbG9hZGVkIGZyb20gTDIKK2V2ZW50OjBYMEMwMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fREFUQV9GUk9NX0wyMV9HUlAxOTIgOiAoR3JvdXAgMTkyIHBtX2hwbTYpIERhdGEgbG9hZGVkIGZyb20gcHJpdmF0ZSBMMiBvdGhlciBjb3JlCitldmVudDowWDBDMDIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RBVEFfRlJPTV9MMjVfTU9EX0dSUDE5MiA6IChHcm91cCAxOTIgcG1faHBtNikgRGF0YSBsb2FkZWQgZnJvbSBMMi41IG1vZGlmaWVkCitldmVudDowWDBDMDMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RBVEFfRlJPTV9MMjVfU0hSX0dSUDE5MiA6IChHcm91cCAxOTIgcG1faHBtNikgRGF0YSBsb2FkZWQgZnJvbSBMMi41IHNoYXJlZAorCisjR3JvdXAgMTkzIHBtX2hwbTcsIEhQTSBncm91cAorZXZlbnQ6MFgwQzEwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQVRBX0ZST01fTDM1X01PRF9HUlAxOTMgOiAoR3JvdXAgMTkzIHBtX2hwbTcpIERhdGEgbG9hZGVkIGZyb20gTDMuNSBtb2RpZmllZAorZXZlbnQ6MFgwQzExIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQVRBX0ZST01fTDM1X1NIUl9HUlAxOTMgOiAoR3JvdXAgMTkzIHBtX2hwbTcpIERhdGEgbG9hZGVkIGZyb20gTDMuNSBzaGFyZWQKK2V2ZW50OjBYMEMxMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fREFUQV9GUk9NX0wzX0dSUDE5MyA6IChHcm91cCAxOTMgcG1faHBtNykgRGF0YSBsb2FkZWQgZnJvbSBMMworZXZlbnQ6MFgwQzEzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDE5MyA6IChHcm91cCAxOTMgcG1faHBtNykgUHJvY2Vzc29yIGN5Y2xlcworCisjR3JvdXAgMTk0IHBtX2hwbTgsIEhQTSBncm91cAorZXZlbnQ6MFgwQzIwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUFVfMUZMT1BfR1JQMTk0IDogKEdyb3VwIDE5NCBwbV9ocG04KSBGUFUgZXhlY3V0ZWQgb25lIGZsb3AgaW5zdHJ1Y3Rpb24gCitldmVudDowWDBDMjEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVV9GTUFfR1JQMTk0IDogKEdyb3VwIDE5NCBwbV9ocG04KSBGUFUgZXhlY3V0ZWQgbXVsdGlwbHktYWRkIGluc3RydWN0aW9uCitldmVudDowWDBDMjIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZQVV9TVEZfR1JQMTk0IDogKEdyb3VwIDE5NCBwbV9ocG04KSBGUFUgZXhlY3V0ZWQgc3RvcmUgaW5zdHJ1Y3Rpb24KK2V2ZW50OjBYMEMyMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTERfTUlTU19MMV9HUlAxOTQgOiAoR3JvdXAgMTk0IHBtX2hwbTgpIEwxIEQgY2FjaGUgbG9hZCBtaXNzZXMKKworI0dyb3VwIDE5NSBwbV9ocG05LCBIUE0gZ3JvdXAKK2V2ZW50OjBYMEMzMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTERfTUlTU19MMV9HUlAxOTUgOiAoR3JvdXAgMTk1IHBtX2hwbTkpIEwxIEQgY2FjaGUgbG9hZCBtaXNzZXMKK2V2ZW50OjBYMEMzMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlAxOTUgOiAoR3JvdXAgMTk1IHBtX2hwbTkpIFByb2Nlc3NvciBjeWNsZXMKK2V2ZW50OjBYMEMzMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVX0xERl9HUlAxOTUgOiAoR3JvdXAgMTk1IHBtX2hwbTkpIExTVSBleGVjdXRlZCBGbG9hdGluZyBQb2ludCBsb2FkIGluc3RydWN0aW9uCitldmVudDowWDBDMzMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1NUX01JU1NfTDFfR1JQMTk1IDogKEdyb3VwIDE5NSBwbV9ocG05KSBMMSBEIGNhY2hlIHN0b3JlIG1pc3NlcworCisjR3JvdXAgMTk2IHBtX2hwbTEwLCBIUE0gZ3JvdXAKK2V2ZW50OjBYMEM0MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAxOTYgOiAoR3JvdXAgMTk2IHBtX2hwbTEwKSBJbnN0cnVjdGlvbnMgY29tcGxldGVkCitldmVudDowWDBDNDEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wyX01JU1NfR1JQMTk2IDogKEdyb3VwIDE5NiBwbV9ocG0xMCkgTDIgY2FjaGUgbWlzc2VzCitldmVudDowWDBDNDIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lOU1RfRlJPTV9MM01JU1NfR1JQMTk2IDogKEdyb3VwIDE5NiBwbV9ocG0xMCkgSW5zdHJ1Y3Rpb24gZmV0Y2hlZCBtaXNzZWQgTDMKK2V2ZW50OjBYMEM0MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fREFUQV9GUk9NX0wzTUlTU19HUlAxOTYgOiAoR3JvdXAgMTk2IHBtX2hwbTEwKSBEYXRhIGxvYWRlZCBmcm9tIHByaXZhdGUgTDMgbWlzcworCisjR3JvdXAgMTk3IHBtX21ya19kZXJhdF9yZWYyLCBNYXJrZWQgREVSQVQgcmVmCitldmVudDowWDBDNTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19ERVJBVF9SRUZfNjRLX0dSUDE5NyA6IChHcm91cCAxOTcgcG1fbXJrX2RlcmF0X3JlZjIpIE1hcmtlZCBERVJBVCByZWZlcmVuY2UgZm9yIDY0SyBwYWdlCitldmVudDowWDBDNTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19ERVJBVF9SRUZfNEtfR1JQMTk3IDogKEdyb3VwIDE5NyBwbV9tcmtfZGVyYXRfcmVmMikgTWFya2VkIERFUkFUIHJlZmVyZW5jZSBmb3IgNEsgcGFnZQorZXZlbnQ6MFgwQzUyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDE5NyA6IChHcm91cCAxOTcgcG1fbXJrX2RlcmF0X3JlZjIpIEluc3RydWN0aW9ucyBjb21wbGV0ZWQKK2V2ZW50OjBYMEM1MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0RFUkFUX1JFRl8xNkdfR1JQMTk3IDogKEdyb3VwIDE5NyBwbV9tcmtfZGVyYXRfcmVmMikgTWFya2VkIERFUkFUIHJlZmVyZW5jZSBmb3IgMTZHIHBhZ2UKKworI0dyb3VwIDE5OCBwbV9tcmtfZGVyYXRfbWlzczIsIE1hcmtlZCBERVJBVCBtaXNzCitldmVudDowWDBDNjAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19ERVJBVF9NSVNTXzY0S19HUlAxOTggOiAoR3JvdXAgMTk4IHBtX21ya19kZXJhdF9taXNzMikgTWFya2VkIERFUkFUIG1pc3NlcyBmb3IgNjRLIHBhZ2UKK2V2ZW50OjBYMEM2MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0RFUkFUX01JU1NfNEtfR1JQMTk4IDogKEdyb3VwIDE5OCBwbV9tcmtfZGVyYXRfbWlzczIpIE1hcmtlZCBERVJBVCBtaXNzZXMgZm9yIDRLIHBhZ2UKK2V2ZW50OjBYMEM2MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAxOTggOiAoR3JvdXAgMTk4IHBtX21ya19kZXJhdF9taXNzMikgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZAorZXZlbnQ6MFgwQzYzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfREVSQVRfTUlTU18xNkdfR1JQMTk4IDogKEdyb3VwIDE5OCBwbV9tcmtfZGVyYXRfbWlzczIpIE1hcmtlZCBERVJBVCBtaXNzZXMgZm9yIDE2RyBwYWdlCmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9ldmVudHMvcHBjNjQvcG93ZXI2L3VuaXRfbWFza3MgYi9vcHJvZmlsZS0wLjkuNy9ldmVudHMvcHBjNjQvcG93ZXI2L3VuaXRfbWFza3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjU4ODM1ZgotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2V2ZW50cy9wcGM2NC9wb3dlcjYvdW5pdF9tYXNrcwpAQCAtMCwwICsxLDkgQEAKKyMKKyMgQ29weXJpZ2h0IE9Qcm9maWxlIGF1dGhvcnMKKyMgQ29weXJpZ2h0IChjKSBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzLCAyMDA2LgorIyBDb250cmlidXRlZCBieSBEYXZlIE5vbXVyYSA8ZGNubHRjQHVzLmlibS5jb20+LgorIworIyBwcGM2NCBQT1dFUjYgcG9zc2libGUgdW5pdCBtYXNrcworIworbmFtZTp6ZXJvIHR5cGU6bWFuZGF0b3J5IGRlZmF1bHQ6MHgwCisJMHgwIE5vIHVuaXQgbWFzawpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL3BwYzY0L3Bvd2VyNy9ldmVudF9tYXBwaW5ncyBiL29wcm9maWxlLTAuOS43L2V2ZW50cy9wcGM2NC9wb3dlcjcvZXZlbnRfbWFwcGluZ3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjhlZjVmNAotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2V2ZW50cy9wcGM2NC9wb3dlcjcvZXZlbnRfbWFwcGluZ3MKQEAgLTAsMCArMSwyMDIwIEBACisjCisjIENvcHlyaWdodCBPUHJvZmlsZSBhdXRob3JzCisjIENvcHlyaWdodCAoYykgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcywgMjAwOS4KKyMgQ29udHJpYnV0ZWQgYnkgTWF5bmFyZCBKb2huc29uIDxtYXluYXJkakB1cy5pYm0uY29tPi4KKyMKKyNNYXBwaW5nIG9mIGV2ZW50IGdyb3VwcyB0byBNTUNSIHZhbHVlcworCisjR3JvdXAgRGVmYXVsdAorZXZlbnQ6MFgwMDEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMUVGNEYyMDIgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMCB3aXRoIHJhbmRvbSBzYW1wbGluZworZXZlbnQ6MFgwMDIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEREMDAwMDAwODQ4NjAyMUUgbW1jcmE6MFgwMDAwMDAwMQorCisjR3JvdXAgMSBwbV91dGlsaXphdGlvbiwgQ1BJIGFuZCB1dGlsaXphdGlvbiBkYXRhCitldmVudDowWDAwMTAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMUVGNEYyMDIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMDExIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDFFRjRGMjAyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDAxMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAxRUY0RjIwMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAwMTMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMUVGNEYyMDIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMDE0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDFFRjRGMjAyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDAxNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAxRUY0RjIwMiBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAyIHBtX2JyYW5jaDEsIEJyYW5jaCBvcGVyYXRpb25zCitldmVudDowWDAwMjAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQ0NDQwMDAwQTBBMkE0QUUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMDIxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0NDQ0MDAwMEEwQTJBNEFFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDAyMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDQ0NDAwMDBBMEEyQTRBRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAwMjMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQ0NDQwMDAwQTBBMkE0QUUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMDI0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0NDQ0MDAwMEEwQTJBNEFFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDAyNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDQ0NDAwMDBBMEEyQTRBRSBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAzIHBtX2JyYW5jaDIsIEJyYW5jaCBvcGVyYXRpb25zCitldmVudDowWDAwMzAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQ0NDQwMDAwOUNBOEEwQTIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMDMxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0NDQ0MDAwMDlDQThBMEEyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDAzMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDQ0NDAwMDA5Q0E4QTBBMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAwMzMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQ0NDQwMDAwOUNBOEEwQTIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMDM0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0NDQ0MDAwMDlDQThBMEEyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDAzNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDQ0NDAwMDA5Q0E4QTBBMiBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCA0IHBtX2JyYW5jaDMsIEJyYW5jaCBvcGVyYXRpb25zCitldmVudDowWDAwNDAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwNDAwMDAwNjgwNDlDRjYgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMDQxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDQwMDAwMDY4MDQ5Q0Y2IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDA0MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDA0MDAwMDA2ODA0OUNGNiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAwNDMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwNDAwMDAwNjgwNDlDRjYgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMDQ0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDQwMDAwMDY4MDQ5Q0Y2IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDA0NSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDA0MDAwMDA2ODA0OUNGNiBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCA1IHBtX2JyYW5jaDQsIEJyYW5jaCBvcGVyYXRpb25zCitldmVudDowWDAwNTAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQ0NDQwMDAwQUM5RUFFQTQgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMDUxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0NDQ0MDAwMEFDOUVBRUE0IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDA1MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDQ0NDAwMDBBQzlFQUVBNCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAwNTMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQ0NDQwMDAwQUM5RUFFQTQgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMDU0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0NDQ0MDAwMEFDOUVBRUE0IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDA1NSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDQ0NDAwMDBBQzlFQUVBNCBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCA2IHBtX2JyYW5jaDUsIEJyYW5jaCBvcGVyYXRpb25zCitldmVudDowWDAwNjAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQ0NDQwMDBDQUFBRTlDQTggbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMDYxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0NDQ0MDAwQ0FBQUU5Q0E4IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDA2MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDQ0NDAwMENBQUFFOUNBOCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAwNjMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQ0NDQwMDBDQUFBRTlDQTggbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMDY0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0NDQ0MDAwQ0FBQUU5Q0E4IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDA2NSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDQ0NDAwMENBQUFFOUNBOCBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCA3IHBtX2JyYW5jaDYsIEJyYW5jaCBvcGVyYXRpb25zCitldmVudDowWDAwNzAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQ0NDQwMDAwQTBBMkE4QUEgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMDcxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0NDQ0MDAwMEEwQTJBOEFBIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDA3MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDQ0NDAwMDBBMEEyQThBQSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAwNzMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQ0NDQwMDAwQTBBMkE4QUEgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMDc0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0NDQ0MDAwMEEwQTJBOEFBIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDA3NSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDQ0NDAwMDBBMEEyQThBQSBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCA4IHBtX2JyYW5jaDcsIEJyYW5jaCBvcGVyYXRpb25zCitldmVudDowWDAwODAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQ0NDQwMDAwQUNBOEEwQTIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMDgxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0NDQ0MDAwMEFDQThBMEEyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDA4MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDQ0NDAwMDBBQ0E4QTBBMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAwODMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQ0NDQwMDAwQUNBOEEwQTIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMDg0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0NDQ0MDAwMEFDQThBMEEyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDA4NSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDQ0NDAwMDBBQ0E4QTBBMiBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCA5IHBtX2JyYW5jaDgsIEJyYW5jaCBvcGVyYXRpb25zCitldmVudDowWDAwOTAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQ0NDQwMDAwQUVBOEEwQTIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMDkxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0NDQ0MDAwMEFFQThBMEEyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDA5MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDQ0NDAwMDBBRUE4QTBBMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAwOTMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQ0NDQwMDAwQUVBOEEwQTIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMDk0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0NDQ0MDAwMEFFQThBMEEyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDA5NSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDQ0NDAwMDBBRUE4QTBBMiBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxMCBwbV9icmFuY2g5LCBCcmFuY2ggb3BlcmF0aW9ucworZXZlbnQ6MFgwMEEwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0NDQ0MDAwMEE0QThBMEEyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDBBMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDQ0NDAwMDBBNEE4QTBBMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAwQTIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQ0NDQwMDAwQTRBOEEwQTIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMEEzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0NDQ0MDAwMEE0QThBMEEyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDBBNCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDQ0NDAwMDBBNEE4QTBBMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAwQTUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQ0NDQwMDAwQTRBOEEwQTIgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMTEgcG1fc2xiX21pc3MsIFNMQiBNaXNzZXMKK2V2ZW50OjBYMDBCMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMERERDAwMDFGNjkwOTI5MCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAwQjEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDBEREQwMDAxRjY5MDkyOTAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMEIyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwREREMDAwMUY2OTA5MjkwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDBCMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMERERDAwMDFGNjkwOTI5MCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAwQjQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDBEREQwMDAxRjY5MDkyOTAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMEI1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwREREMDAwMUY2OTA5MjkwIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDEyIHBtX3RsYl9taXNzLCBUTEIgTWlzc2VzCitldmVudDowWDAwQzAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDUwMDAwMDAwODg2NkZDRkMgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMEMxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg1MDAwMDAwMDg4NjZGQ0ZDIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDBDMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNTAwMDAwMDA4ODY2RkNGQyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAwQzMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDUwMDAwMDAwODg2NkZDRkMgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMEM0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg1MDAwMDAwMDg4NjZGQ0ZDIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDBDNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNTAwMDAwMDA4ODY2RkNGQyBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxMyBwbV9kdGxiX21pc3MsIERUTEIgTWlzc2VzCitldmVudDowWDAwRDAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWENDQ0MwMDAwNUU1RTVFNUUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMEQxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhDQ0NDMDAwMDVFNUU1RTVFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDBEMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQ0NDQzAwMDA1RTVFNUU1RSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAwRDMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWENDQ0MwMDAwNUU1RTVFNUUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMEQ0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhDQ0NDMDAwMDVFNUU1RTVFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDBENSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQ0NDQzAwMDA1RTVFNUU1RSBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxNCBwbV9kZXJhdF9taXNzMSwgREVSQVQgbWlzc2VzCitldmVudDowWDAwRTAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWENDQ0MwMDAwNUM1QzVDNUMgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMEUxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhDQ0NDMDAwMDVDNUM1QzVDIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDBFMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQ0NDQzAwMDA1QzVDNUM1QyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAwRTMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWENDQ0MwMDAwNUM1QzVDNUMgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMEU0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhDQ0NDMDAwMDVDNUM1QzVDIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDBFNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQ0NDQzAwMDA1QzVDNUM1QyBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxNSBwbV9kZXJhdF9taXNzMiwgREVSQVQgbWlzc2VzCitldmVudDowWDAwRjAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDBDQ0MwMDAwMDI1QzVDNUMgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMEYxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwQ0NDMDAwMDAyNUM1QzVDIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDBGMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMENDQzAwMDAwMjVDNUM1QyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAwRjMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDBDQ0MwMDAwMDI1QzVDNUMgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMEY0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwQ0NDMDAwMDAyNUM1QzVDIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDBGNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMENDQzAwMDAwMjVDNUM1QyBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxNiBwbV9taXNjX21pc3MxLCBNaXNzZXMKK2V2ZW50OjBYMDEwMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYRDBDMDAwMDA5MEZFNUFGMCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAxMDEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEQwQzAwMDAwOTBGRTVBRjAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMTAyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhEMEMwMDAwMDkwRkU1QUYwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDEwMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYRDBDMDAwMDA5MEZFNUFGMCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAxMDQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEQwQzAwMDAwOTBGRTVBRjAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMTA1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhEMEMwMDAwMDkwRkU1QUYwIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDE3IHBtX21pc2NfbWlzczIsIE1pc3NlcworZXZlbnQ6MFgwMTEwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwQ0MwMDAwMDFFNTg1QUZBIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDExMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMENDMDAwMDAxRTU4NUFGQSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAxMTIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDBDQzAwMDAwMUU1ODVBRkEgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMTEzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwQ0MwMDAwMDFFNTg1QUZBIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDExNCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMENDMDAwMDAxRTU4NUFGQSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAxMTUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDBDQzAwMDAwMUU1ODVBRkEgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMTggcG1fbWlzY19taXNzMywgTWlzc2VzCitldmVudDowWDAxMjAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDBDQ0MwMDAwMUU1ODVBNTggbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMTIxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwQ0NDMDAwMDFFNTg1QTU4IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDEyMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMENDQzAwMDAxRTU4NUE1OCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAxMjMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDBDQ0MwMDAwMUU1ODVBNTggbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMTI0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwQ0NDMDAwMDFFNTg1QTU4IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDEyNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMENDQzAwMDAxRTU4NUE1OCBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxOSBwbV9taXNjX21pc3M0LCBNaXNzZXMKK2V2ZW50OjBYMDEzMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYRDQwMDAwMDA5MDQ4MDJGQSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAxMzEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEQ0MDAwMDAwOTA0ODAyRkEgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMTMyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhENDAwMDAwMDkwNDgwMkZBIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDEzMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYRDQwMDAwMDA5MDQ4MDJGQSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAxMzQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEQ0MDAwMDAwOTA0ODAyRkEgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMTM1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhENDAwMDAwMDkwNDgwMkZBIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDIwIHBtX21pc2NfbWlzczUsIE1pc3NlcworZXZlbnQ6MFgwMTQwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwREQwMDAwMEY2OTA5MjAyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDE0MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMEREMDAwMDBGNjkwOTIwMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAxNDIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDBERDAwMDAwRjY5MDkyMDIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMTQzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwREQwMDAwMEY2OTA5MjAyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDE0NCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMEREMDAwMDBGNjkwOTIwMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAxNDUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDBERDAwMDAwRjY5MDkyMDIgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMjEgcG1fcHRlZzEsIFBURUcgc291cmNlcworZXZlbnQ6MFgwMTUwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhDRUNFMDAwMDUwNTA1NjU0IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDE1MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQ0VDRTAwMDA1MDUwNTY1NCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAxNTIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWENFQ0UwMDAwNTA1MDU2NTQgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMTUzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhDRUNFMDAwMDUwNTA1NjU0IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDE1NCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQ0VDRTAwMDA1MDUwNTY1NCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAxNTUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWENFQ0UwMDAwNTA1MDU2NTQgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMjIgcG1fcHRlZzIsIFBURUcgc291cmNlcworZXZlbnQ6MFgwMTYwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhFRUVDMDAwMDUwNTQ1NDU0IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDE2MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYRUVFQzAwMDA1MDU0NTQ1NCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAxNjIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEVFRUMwMDAwNTA1NDU0NTQgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMTYzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhFRUVDMDAwMDUwNTQ1NDU0IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDE2NCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYRUVFQzAwMDA1MDU0NTQ1NCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAxNjUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEVFRUMwMDAwNTA1NDU0NTQgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMjMgcG1fcHRlZzMsIFBURUcgc291cmNlcworZXZlbnQ6MFgwMTcwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhDQ0VDMDAwMDU0NTg1MjUyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDE3MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQ0NFQzAwMDA1NDU4NTI1MiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAxNzIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWENDRUMwMDAwNTQ1ODUyNTIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMTczIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhDQ0VDMDAwMDU0NTg1MjUyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDE3NCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQ0NFQzAwMDA1NDU4NTI1MiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAxNzUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWENDRUMwMDAwNTQ1ODUyNTIgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMjQgcG1fcHRlZzQsIFBURUcgc291cmNlcworZXZlbnQ6MFgwMTgwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhFQ0NDMDAwMDUyNTI1MjUyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDE4MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYRUNDQzAwMDA1MjUyNTI1MiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAxODIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEVDQ0MwMDAwNTI1MjUyNTIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMTgzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhFQ0NDMDAwMDUyNTI1MjUyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDE4NCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYRUNDQzAwMDA1MjUyNTI1MiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAxODUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEVDQ0MwMDAwNTI1MjUyNTIgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMjUgcG1fcHRlZzUsIFBURUcgc291cmNlcworZXZlbnQ6MFgwMTkwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhDQ0NDMDAwMDUyNTY1NDU2IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDE5MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQ0NDQzAwMDA1MjU2NTQ1NiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAxOTIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWENDQ0MwMDAwNTI1NjU0NTYgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMTkzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhDQ0NDMDAwMDUyNTY1NDU2IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDE5NCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQ0NDQzAwMDA1MjU2NTQ1NiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAxOTUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWENDQ0MwMDAwNTI1NjU0NTYgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMjYgcG1fcHRlZzYsIFBURUcgc291cmNlcworZXZlbnQ6MFgwMUEwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhFRUVFMDAwMDU0NTI1NjUyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDFBMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYRUVFRTAwMDA1NDUyNTY1MiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAxQTIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEVFRUUwMDAwNTQ1MjU2NTIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMUEzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhFRUVFMDAwMDU0NTI1NjUyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDFBNCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYRUVFRTAwMDA1NDUyNTY1MiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAxQTUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEVFRUUwMDAwNTQ1MjU2NTIgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMjcgcG1fcHRlZzcsIFBURUcgc291cmNlcworZXZlbnQ6MFgwMUIwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhFRUVFMDAwMDU0NTY1NjU2IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDFCMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYRUVFRTAwMDA1NDU2NTY1NiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAxQjIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEVFRUUwMDAwNTQ1NjU2NTYgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMUIzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhFRUVFMDAwMDU0NTY1NjU2IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDFCNCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYRUVFRTAwMDA1NDU2NTY1NiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAxQjUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEVFRUUwMDAwNTQ1NjU2NTYgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMjggcG1fcHRlZzgsIFBURUcgc291cmNlcworZXZlbnQ6MFgwMUMwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhFRUVFMDAwMDUwNTg1MjU4IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDFDMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYRUVFRTAwMDA1MDU4NTI1OCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAxQzIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEVFRUUwMDAwNTA1ODUyNTggbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMUMzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhFRUVFMDAwMDUwNTg1MjU4IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDFDNCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYRUVFRTAwMDA1MDU4NTI1OCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAxQzUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEVFRUUwMDAwNTA1ODUyNTggbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMjkgcG1fcHRlZzksIFBURUcgc291cmNlcworZXZlbnQ6MFgwMUQwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhDQ0NDMDAwMDUwNTA1MjU4IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDFEMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQ0NDQzAwMDA1MDUwNTI1OCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAxRDIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWENDQ0MwMDAwNTA1MDUyNTggbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMUQzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhDQ0NDMDAwMDUwNTA1MjU4IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDFENCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQ0NDQzAwMDA1MDUwNTI1OCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAxRDUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWENDQ0MwMDAwNTA1MDUyNTggbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMzAgcG1fcHRlZzEwLCBQVEVHIHNvdXJjZXMKK2V2ZW50OjBYMDFFMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQ0MwMDAwMDA1MDUwMDIxRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAxRTEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWENDMDAwMDAwNTA1MDAyMUUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMUUyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhDQzAwMDAwMDUwNTAwMjFFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDFFMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQ0MwMDAwMDA1MDUwMDIxRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAxRTQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWENDMDAwMDAwNTA1MDAyMUUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMUU1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhDQzAwMDAwMDUwNTAwMjFFIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDMxIHBtX3B0ZWcxMSwgUFRFRyBzb3VyY2VzCitldmVudDowWDAxRjAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWENDMEMwMDAwNTI1NDAyNTQgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMUYxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhDQzBDMDAwMDUyNTQwMjU0IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDFGMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQ0MwQzAwMDA1MjU0MDI1NCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAxRjMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWENDMEMwMDAwNTI1NDAyNTQgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMUY0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhDQzBDMDAwMDUyNTQwMjU0IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDFGNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQ0MwQzAwMDA1MjU0MDI1NCBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAzMiBwbV9wdGVnMTIsIFBURUcgc291cmNlcworZXZlbnQ6MFgwMjAwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwQ0NDMDAwMDAyNTI1MjUyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDIwMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMENDQzAwMDAwMjUyNTI1MiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAyMDIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDBDQ0MwMDAwMDI1MjUyNTIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMjAzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwQ0NDMDAwMDAyNTI1MjUyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDIwNCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMENDQzAwMDAwMjUyNTI1MiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAyMDUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDBDQ0MwMDAwMDI1MjUyNTIgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMzMgcG1fZnJlcTEsIEZyZXF1ZW5jeSBldmVudHMKK2V2ZW50OjBYMDIxMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDA2RTA2MEMwQyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAyMTEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwNkUwNjBDMEMgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMjEyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDZFMDYwQzBDIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDIxMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDA2RTA2MEMwQyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAyMTQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwNkUwNjBDMEMgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMjE1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDZFMDYwQzBDIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDM0IHBtX2ZyZXEyLCBGcmVxdWVuY3kgZXZlbnRzCitldmVudDowWDAyMjAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwNkUwNjA2MEMgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMjIxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDZFMDYwNjBDIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDIyMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDA2RTA2MDYwQyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAyMjMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwNkUwNjA2MEMgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMjI0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDZFMDYwNjBDIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDIyNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDA2RTA2MDYwQyBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAzNSBwbV9MMV9yZWYsIEwxIHJlZmVyZW5jZXMKK2V2ZW50OjBYMDIzMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQ0NDRDAwMDg4MDgwODJBNiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAyMzEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWENDQ0QwMDA4ODA4MDgyQTYgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMjMyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhDQ0NEMDAwODgwODA4MkE2IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDIzMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQ0NDRDAwMDg4MDgwODJBNiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAyMzQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWENDQ0QwMDA4ODA4MDgyQTYgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMjM1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhDQ0NEMDAwODgwODA4MkE2IG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDM2IHBtX2ZsdXNoMSwgRmx1c2hlcworZXZlbnQ6MFgwMjQwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgyMjIwMDAwMDg4OEE4Q0Y4IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDI0MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMjIyMDAwMDA4ODhBOENGOCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAyNDIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDIyMjAwMDAwODg4QThDRjggbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMjQzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgyMjIwMDAwMDg4OEE4Q0Y4IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDI0NCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMjIyMDAwMDA4ODhBOENGOCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAyNDUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDIyMjAwMDAwODg4QThDRjggbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMzcgcG1fZmx1c2gyLCBGbHVzaGVzCitldmVudDowWDAyNTAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDIyMkMwMDAwODY4MjhFQUEgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMjUxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgyMjJDMDAwMDg2ODI4RUFBIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDI1MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMjIyQzAwMDA4NjgyOEVBQSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAyNTMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDIyMkMwMDAwODY4MjhFQUEgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMjU0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgyMjJDMDAwMDg2ODI4RUFBIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDI1NSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMjIyQzAwMDA4NjgyOEVBQSBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAzOCBwbV9mbHVzaCwgRmx1c2hlcworZXZlbnQ6MFgwMjYwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgyMDAwMDAwMDgyMUUxMkY4IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDI2MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMjAwMDAwMDA4MjFFMTJGOCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAyNjIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDIwMDAwMDAwODIxRTEyRjggbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMjYzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgyMDAwMDAwMDgyMUUxMkY4IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDI2NCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMjAwMDAwMDA4MjFFMTJGOCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAyNjUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDIwMDAwMDAwODIxRTEyRjggbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMzkgcG1fbHN1X2ZsdXNoMSwgTFNVIEZsdXNoCitldmVudDowWDAyNzAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWENDQ0MwMDBGQjBCNEI4QkMgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMjcxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhDQ0NDMDAwRkIwQjRCOEJDIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDI3MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQ0NDQzAwMEZCMEI0QjhCQyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAyNzMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWENDQ0MwMDBGQjBCNEI4QkMgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMjc0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhDQ0NDMDAwRkIwQjRCOEJDIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDI3NSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQ0NDQzAwMEZCMEI0QjhCQyBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCA0MCBwbV9sc3VfZmx1c2gyLCBMU1UgRmx1c2ggVUxECitldmVudDowWDAyODAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWENDQzAwMDA4QjBCMEIyRjggbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMjgxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhDQ0MwMDAwOEIwQjBCMkY4IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDI4MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQ0NDMDAwMDhCMEIwQjJGOCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAyODMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWENDQzAwMDA4QjBCMEIyRjggbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMjg0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhDQ0MwMDAwOEIwQjBCMkY4IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDI4NSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQ0NDMDAwMDhCMEIwQjJGOCBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCA0MSBwbV9sc3VfZmx1c2gzLCBMU1UgRmx1c2ggVVNUCitldmVudDowWDAyOTAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWENDQzAwMDA4QjRCNEI2RjggbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMjkxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhDQ0MwMDAwOEI0QjRCNkY4IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDI5MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQ0NDMDAwMDhCNEI0QjZGOCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAyOTMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWENDQzAwMDA4QjRCNEI2RjggbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMjk0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhDQ0MwMDAwOEI0QjRCNkY4IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDI5NSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQ0NDMDAwMDhCNEI0QjZGOCBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCA0MiBwbV9sc3VfZmx1c2g0LCBMU1UgRmx1c2ggTFJRCitldmVudDowWDAyQTAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWENDQzAwMDA4QjhCOEJBRjggbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMkExIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhDQ0MwMDAwOEI4QjhCQUY4IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDJBMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQ0NDMDAwMDhCOEI4QkFGOCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAyQTMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWENDQzAwMDA4QjhCOEJBRjggbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMkE0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhDQ0MwMDAwOEI4QjhCQUY4IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDJBNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQ0NDMDAwMDhCOEI4QkFGOCBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCA0MyBwbV9sc3VfZmx1c2g1LCBMU1UgRmx1c2ggU1JRCitldmVudDowWDAyQjAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWENDQzAwMDA4QkNCQ0JFRjggbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMkIxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhDQ0MwMDAwOEJDQkNCRUY4IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDJCMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQ0NDMDAwMDhCQ0JDQkVGOCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAyQjMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWENDQzAwMDA4QkNCQ0JFRjggbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMkI0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhDQ0MwMDAwOEJDQkNCRUY4IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDJCNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQ0NDMDAwMDhCQ0JDQkVGOCBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCA0NCBwbV9wcmVmZXRjaCwgSSBjYWNoZSBQcmVmZXRjaGVzCitldmVudDowWDAyQzAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDA0NDQwMDAwMTg4QTk2OEUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMkMxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwNDQ0MDAwMDE4OEE5NjhFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDJDMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDQ0NDAwMDAxODhBOTY4RSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAyQzMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDA0NDQwMDAwMTg4QTk2OEUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMkM0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwNDQ0MDAwMDE4OEE5NjhFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDJDNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDQ0NDAwMDAxODhBOTY4RSBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCA0NSBwbV90aHJlYWRfY3ljMiwgVGhyZWFkIGN5Y2xlcworZXZlbnQ6MFgwMkQwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDA0MDAwMDEyMENGNEIwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDJEMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwNDAwMDAxMjBDRjRCMCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAyRDIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDQwMDAwMTIwQ0Y0QjAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMkQzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDA0MDAwMDEyMENGNEIwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDJENCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwNDAwMDAxMjBDRjRCMCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAyRDUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDQwMDAwMTIwQ0Y0QjAgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgNDYgcG1fdGhyZWFkX2N5YzUsIFRocmVhZCBjeWNsZXMKK2V2ZW50OjBYMDJFMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDQ0NDAwMDBCMEIyQjRCNiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAyRTEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQ0NDQwMDAwQjBCMkI0QjYgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMkUyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0NDQ0MDAwMEIwQjJCNEI2IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDJFMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDQ0NDAwMDBCMEIyQjRCNiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAyRTQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQ0NDQwMDAwQjBCMkI0QjYgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMkU1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0NDQ0MDAwMEIwQjJCNEI2IG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDQ3IHBtX2Z4dTEsIEZYVSBldmVudHMKK2V2ZW50OjBYMDJGMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAwRTBFMEUwRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAyRjEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMEUwRTBFMEUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMkYyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDBFMEUwRTBFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDJGMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAwRTBFMEUwRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAyRjQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMEUwRTBFMEUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMkY1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDBFMEUwRTBFIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDQ4IHBtX2Z4dTIsIEZYVSBldmVudHMKK2V2ZW50OjBYMDMwMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAwNEY0MDIwNCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAzMDEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMDRGNDAyMDQgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMzAyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDA0RjQwMjA0IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDMwMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAwNEY0MDIwNCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAzMDQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMDRGNDAyMDQgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMzA1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDA0RjQwMjA0IG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDQ5IHBtX2Z4dTMsIEZYVSBldmVudHMKK2V2ZW50OjBYMDMxMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAxRTBFMEUwRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAzMTEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMUUwRTBFMEUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMzEyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDFFMEUwRTBFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDMxMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAxRTBFMEUwRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAzMTQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMUUwRTBFMEUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMzE1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDFFMEUwRTBFIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDUwIHBtX2Z4dTQsIEZYVSBldmVudHMKK2V2ZW50OjBYMDMyMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAwRTBFMUUwMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAzMjEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMEUwRTFFMDIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMzIyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDBFMEUxRTAyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDMyMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAwRTBFMUUwMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAzMjQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMEUwRTFFMDIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMzI1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDBFMEUxRTAyIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDUxIHBtX0wyX1JDTEQsIEwyICBSQyBsb2FkIGV2ZW50cworZXZlbnQ6MFgwMzMwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg2NjY2NDAwMDgwODA4MDgyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDMzMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNjY2NjQwMDA4MDgwODA4MiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAzMzIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDY2NjY0MDAwODA4MDgwODIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMzMzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg2NjY2NDAwMDgwODA4MDgyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDMzNCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNjY2NjQwMDA4MDgwODA4MiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAzMzUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDY2NjY0MDAwODA4MDgwODIgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgNTIgcG1fTDJfUkMsIFJDIHJlbGF0ZWQgZXZlbnRzCitldmVudDowWDAzNDAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDYwNjA2MDAwODIxRTgwMDIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMzQxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg2MDYwNjAwMDgyMUU4MDAyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDM0MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNjA2MDYwMDA4MjFFODAwMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAzNDMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDYwNjA2MDAwODIxRTgwMDIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMzQ0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg2MDYwNjAwMDgyMUU4MDAyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDM0NSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNjA2MDYwMDA4MjFFODAwMiBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCA1MyBwbV9MMl9SQ1NULCBMMiBSQyBTdG9yZSBFdmVudHMKK2V2ZW50OjBYMDM1MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNjY2NjQwMDA4MDgwODI4MCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAzNTEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDY2NjY0MDAwODA4MDgyODAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMzUyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg2NjY2NDAwMDgwODA4MjgwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDM1MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNjY2NjQwMDA4MDgwODI4MCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAzNTQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDY2NjY0MDAwODA4MDgyODAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMzU1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg2NjY2NDAwMDgwODA4MjgwIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDU0IHBtX0wyX2xkc3RfMSwgTDIgbG9hZC9zdG9yZQorZXZlbnQ6MFgwMzYwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg2NjAwMDAwMDgyODAwMjFFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDM2MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNjYwMDAwMDA4MjgwMDIxRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAzNjIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDY2MDAwMDAwODI4MDAyMUUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMzYzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg2NjAwMDAwMDgyODAwMjFFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDM2NCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNjYwMDAwMDA4MjgwMDIxRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAzNjUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDY2MDAwMDAwODI4MDAyMUUgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgNTUgcG1fTDJfbGRzdF8yLCBMMiBsb2FkL3N0b3JlCitldmVudDowWDAzNzAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwNjYyMDAwMDIxRTgyODIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMzcxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDY2MjAwMDAyMUU4MjgyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDM3MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDA2NjIwMDAwMjFFODI4MiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAzNzMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwNjYyMDAwMDIxRTgyODIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMzc0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDY2MjAwMDAyMUU4MjgyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDM3NSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDA2NjIwMDAwMjFFODI4MiBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCA1NiBwbV9MMl9sZHN0XzMsIEwyIGxvYWQvc3RvcmUKK2V2ZW50OjBYMDM4MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDA2NjIwMDAwMjFFODA4MCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAzODEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwNjYyMDAwMDIxRTgwODAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMzgyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDY2MjAwMDAyMUU4MDgwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDM4MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDA2NjIwMDAwMjFFODA4MCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAzODQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwNjYyMDAwMDIxRTgwODAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMzg1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDY2MjAwMDAyMUU4MDgwIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDU3IHBtX0wyX1JDU1RMRCwgTDIgUkMgTG9hZC9TdG9yZSBFdmVudHMKK2V2ZW50OjBYMDM5MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNjYwMDQwMDA4MjgyMDIxRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAzOTEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDY2MDA0MDAwODI4MjAyMUUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMzkyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg2NjAwNDAwMDgyODIwMjFFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDM5MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNjYwMDQwMDA4MjgyMDIxRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAzOTQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDY2MDA0MDAwODI4MjAyMUUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwMzk1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg2NjAwNDAwMDgyODIwMjFFIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDU4IHBtX25lc3QxLCBOZXN0IEV2ZW50cworZXZlbnQ6MFgwM0EwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDgxODE4MTgxIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDNBMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDA4MTgxODE4MSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAzQTIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwODE4MTgxODEgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwM0EzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDgxODE4MTgxIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDNBNCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDA4MTgxODE4MSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAzQTUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwODE4MTgxODEgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgNTkgcG1fbmVzdDIsIE5lc3QgRXZlbnRzCitldmVudDowWDAzQjAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwODM4MzgzODMgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwM0IxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDgzODM4MzgzIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDNCMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDA4MzgzODM4MyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAzQjMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwODM4MzgzODMgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwM0I0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDgzODM4MzgzIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDNCNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDA4MzgzODM4MyBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCA2MCBwbV9uZXN0MywgTmVzdCBFdmVudHMKK2V2ZW50OjBYMDNDMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMEY4MTgxODE4MSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAzQzEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDBGODE4MTgxODEgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwM0MyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwRjgxODE4MTgxIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDNDMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMEY4MTgxODE4MSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAzQzQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDBGODE4MTgxODEgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwM0M1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwRjgxODE4MTgxIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDYxIHBtX25lc3Q0LCBOZXN0IEV2ZW50cworZXZlbnQ6MFgwM0QwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwRjgzODM4MzgzIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDNEMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMEY4MzgzODM4MyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAzRDIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDBGODM4MzgzODMgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwM0QzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwRjgzODM4MzgzIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDNENCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMEY4MzgzODM4MyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAzRDUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDBGODM4MzgzODMgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgNjIgcG1fTDJfcmVkaXJfcHJlZiwgTDIgcmVkaXJlY3QgYW5kIHByZWZldGNoCitldmVudDowWDAzRTAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQ0NDQwMDAwOTg5QTg4ODIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwM0UxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0NDQ0MDAwMDk4OUE4ODgyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDNFMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDQ0NDAwMDA5ODlBODg4MiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAzRTMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQ0NDQwMDAwOTg5QTg4ODIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwM0U0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0NDQ0MDAwMDk4OUE4ODgyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDNFNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDQ0NDAwMDA5ODlBODg4MiBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCA2MyBwbV9kbGF0ZW5jaWVzMSwgRGF0YSBsYXRlbmNpZXMKK2V2ZW50OjBYMDNGMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQzAwMDAwMDA0MEYyRjZGMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAzRjEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEMwMDAwMDAwNDBGMkY2RjIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwM0YyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhDMDAwMDAwMDQwRjJGNkYyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDNGMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQzAwMDAwMDA0MEYyRjZGMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDAzRjQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEMwMDAwMDAwNDBGMkY2RjIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwM0Y1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhDMDAwMDAwMDQwRjJGNkYyIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDY0IHBtX2RsYXRlbmNpZXMyLCBEYXRhIGxhdGVuY2llcworZXZlbnQ6MFgwNDAwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhDMDAwMDAwMDQ4MUVGNjAyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDQwMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQzAwMDAwMDA0ODFFRjYwMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA0MDIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEMwMDAwMDAwNDgxRUY2MDIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNDAzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhDMDAwMDAwMDQ4MUVGNjAyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDQwNCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQzAwMDAwMDA0ODFFRjYwMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA0MDUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEMwMDAwMDAwNDgxRUY2MDIgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgNjUgcG1fZGxhdGVuY2llczMsIERhdGEgbGF0ZW5jaWVzCitldmVudDowWDA0MTAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWENDMDAwMDAwNDI0NEY2MDIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNDExIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhDQzAwMDAwMDQyNDRGNjAyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDQxMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQ0MwMDAwMDA0MjQ0RjYwMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA0MTMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWENDMDAwMDAwNDI0NEY2MDIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNDE0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhDQzAwMDAwMDQyNDRGNjAyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDQxNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQ0MwMDAwMDA0MjQ0RjYwMiBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCA2NiBwbV9yZWplY3RzMSwgUmVqZWN0IGV2ZW50CitldmVudDowWDA0MjAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDBDQ0MwMDAxNjRBQ0FFQUMgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNDIxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwQ0NDMDAwMTY0QUNBRUFDIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDQyMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMENDQzAwMDE2NEFDQUVBQyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA0MjMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDBDQ0MwMDAxNjRBQ0FFQUMgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNDI0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwQ0NDMDAwMTY0QUNBRUFDIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDQyNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMENDQzAwMDE2NEFDQUVBQyBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCA2NyBwbV9yZWplY3RzMiwgUmVqZWN0IGV2ZW50cworZXZlbnQ6MFgwNDMwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMEMwMDAwMjY0NjRBODA4IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDQzMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDBDMDAwMDI2NDY0QTgwOCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA0MzIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwQzAwMDAyNjQ2NEE4MDggbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNDMzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMEMwMDAwMjY0NjRBODA4IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDQzNCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDBDMDAwMDI2NDY0QTgwOCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA0MzUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwQzAwMDAyNjQ2NEE4MDggbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgNjggcG1fcmVqZWN0czMsIFNldCBtaXNwcmVkaWN0aW9ucyByZWplY3RzCitldmVudDowWDA0NDAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWENDMDAwMDA4QThBODFFMDIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNDQxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhDQzAwMDAwOEE4QTgxRTAyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDQ0MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQ0MwMDAwMDhBOEE4MUUwMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA0NDMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWENDMDAwMDA4QThBODFFMDIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNDQ0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhDQzAwMDAwOEE4QTgxRTAyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDQ0NSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQ0MwMDAwMDhBOEE4MUUwMiBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCA2OSBwbV9sc3VfcmVqZWN0LCBMU1UgUmVqZWN0IEV2ZW50CitldmVudDowWDA0NTAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWENDQzAwMDA4QTRBNEE2MDIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNDUxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhDQ0MwMDAwOEE0QTRBNjAyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDQ1MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQ0NDMDAwMDhBNEE0QTYwMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA0NTMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWENDQzAwMDA4QTRBNEE2MDIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNDU0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhDQ0MwMDAwOEE0QTRBNjAyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDQ1NSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQ0NDMDAwMDhBNEE0QTYwMiBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCA3MCBwbV9sc3VfbmNsZCwgTm9uIGNhY2hhYmxlIGxvYWRzCitldmVudDowWDA0NjAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWENDQzAwMDA4OEM4QzhFMDIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNDYxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhDQ0MwMDAwODhDOEM4RTAyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDQ2MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQ0NDMDAwMDg4QzhDOEUwMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA0NjMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWENDQzAwMDA4OEM4QzhFMDIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNDY0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhDQ0MwMDAwODhDOEM4RTAyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDQ2NSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQ0NDMDAwMDg4QzhDOEUwMiBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCA3MSBwbV9nY3QxLCBHQ1QgZXZlbnRzCitldmVudDowWDA0NzAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwNDAwMDAwRjgwODg2MUUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNDcxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDQwMDAwMEY4MDg4NjFFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDQ3MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDA0MDAwMDBGODA4ODYxRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA0NzMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwNDAwMDAwRjgwODg2MUUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNDc0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDQwMDAwMEY4MDg4NjFFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDQ3NSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDA0MDAwMDBGODA4ODYxRSBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCA3MiBwbV9nY3QyLCBHQ1QgRXZlbnRzCitldmVudDowWDA0ODAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDIyMjIwMDAwOUM5RUEwQTIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNDgxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgyMjIyMDAwMDlDOUVBMEEyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDQ4MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMjIyMjAwMDA5QzlFQTBBMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA0ODMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDIyMjIwMDAwOUM5RUEwQTIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNDg0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgyMjIyMDAwMDlDOUVBMEEyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDQ4NSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMjIyMjAwMDA5QzlFQTBBMiBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCA3MyBwbV9MMl9jYXN0b3V0X2ludmFsaWRhdGVfMSwgTDIgY2FzdG91dCBhbmQgaW52YWxpZGF0ZSBldmVudHMKK2V2ZW50OjBYMDQ5MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNjYwMDIwMDA4MDgyMDIxRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA0OTEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDY2MDAyMDAwODA4MjAyMUUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNDkyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg2NjAwMjAwMDgwODIwMjFFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDQ5MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNjYwMDIwMDA4MDgyMDIxRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA0OTQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDY2MDAyMDAwODA4MjAyMUUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNDk1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg2NjAwMjAwMDgwODIwMjFFIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDc0IHBtX0wyX2Nhc3RvdXRfaW52YWxpZGF0ZV8yLCBMMiBjYXN0b3V0IGFuZCBpbnZhbGlkYXRlIGV2ZW50cworZXZlbnQ6MFgwNEEwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg2NjAwMjAwMDgyODAwMjFFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDRBMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNjYwMDIwMDA4MjgwMDIxRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA0QTIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDY2MDAyMDAwODI4MDAyMUUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNEEzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg2NjAwMjAwMDgyODAwMjFFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDRBNCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNjYwMDIwMDA4MjgwMDIxRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA0QTUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDY2MDAyMDAwODI4MDAyMUUgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgNzUgcG1fZGlzcF9oZWxkMSwgRGlzcGF0Y2ggaGVsZCBjb25kaXRpb25zCitldmVudDowWDA0QjAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMDYwNjA2RjIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNEIxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDA2MDYwNkYyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDRCMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAwNjA2MDZGMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA0QjMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMDYwNjA2RjIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNEI0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDA2MDYwNkYyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDRCNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAwNjA2MDZGMiBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCA3NiBwbV9kaXNwX2hlbGQyLCBEaXNwYXRjaCBoZWxkIGNvbmRpdGlvbnMKK2V2ZW50OjBYMDRDMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAxNjA2MDYwNiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA0QzEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMTYwNjA2MDYgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNEMyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDE2MDYwNjA2IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDRDMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAxNjA2MDYwNiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA0QzQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMTYwNjA2MDYgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNEM1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDE2MDYwNjA2IG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDc3IHBtX2Rpc3BfY2xiX2hlbGQsIERpc3BsYXkgQ0xCIGhlbGQgY29uZGl0aW9ucworZXZlbnQ6MFgwNEQwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgyMjIyMDAwMDkyOTQ5Njk4IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDREMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMjIyMjAwMDA5Mjk0OTY5OCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA0RDIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDIyMjIwMDAwOTI5NDk2OTggbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNEQzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgyMjIyMDAwMDkyOTQ5Njk4IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDRENCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMjIyMjAwMDA5Mjk0OTY5OCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA0RDUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDIyMjIwMDAwOTI5NDk2OTggbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgNzggcG1fcG93ZXIsIFBvd2VyIEV2ZW50cworZXZlbnQ6MFgwNEUwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDZFNkU2RTZFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDRFMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDA2RTZFNkU2RSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA0RTIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwNkU2RTZFNkUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNEUzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDZFNkU2RTZFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDRFNCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDA2RTZFNkU2RSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA0RTUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwNkU2RTZFNkUgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgNzkgcG1fZGlzcGF0Y2gxLCBHcm91cHMgYW5kIGluc3RydWN0aW9ucyBkaXNwYXRjaGVkCitldmVudDowWDA0RjAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwRjJGMjBBRjIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNEYxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMEYyRjIwQUYyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDRGMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDBGMkYyMEFGMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA0RjMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwRjJGMjBBRjIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNEY0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMEYyRjIwQUYyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDRGNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDBGMkYyMEFGMiBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCA4MCBwbV9kaXNwYXRjaDIsIEdyb3VwcyBhbmQgaW5zdHJ1Y3Rpb25zIGRpc3BhdGNoZWQKK2V2ZW50OjBYMDUwMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDBGMjFFMDJGMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA1MDEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwRjIxRTAyRjIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNTAyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMEYyMUUwMkYyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDUwMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDBGMjFFMDJGMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA1MDQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwRjIxRTAyRjIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNTA1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMEYyMUUwMkYyIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDgxIHBtX2ljLCBJIGNhY2hlIG9wZXJhdGlvbnMKK2V2ZW50OjBYMDUxMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDQ0NDAwMEY4ODhDOTA5OCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA1MTEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQ0NDQwMDBGODg4QzkwOTggbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNTEyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0NDQ0MDAwRjg4OEM5MDk4IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDUxMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDQ0NDAwMEY4ODhDOTA5OCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA1MTQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQ0NDQwMDBGODg4QzkwOTggbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNTE1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0NDQ0MDAwRjg4OEM5MDk4IG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDgyIHBtX2ljX3ByZWZfY2FuY2VsLCBJbnN0cnVjdGlvbiBwcmUtZmV0Y2hlZCBjYW5jZWxsZWQKK2V2ZW50OjBYMDUyMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDQ0NDAwMDE5MDkyOTQ5MCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA1MjEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQ0NDQwMDAxOTA5Mjk0OTAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNTIyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0NDQ0MDAwMTkwOTI5NDkwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDUyMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDQ0NDAwMDE5MDkyOTQ5MCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA1MjQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQ0NDQwMDAxOTA5Mjk0OTAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNTI1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0NDQ0MDAwMTkwOTI5NDkwIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDgzIHBtX2ljX21pc3MsIEljYWNoZSBhbmQgSWVyYXQgbWlzcyBldmVudHMKK2V2ZW50OjBYMDUzMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDBGNkZDMDIxRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA1MzEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwRjZGQzAyMUUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNTMyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMEY2RkMwMjFFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDUzMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDBGNkZDMDIxRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA1MzQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwRjZGQzAyMUUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNTM1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMEY2RkMwMjFFIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDg0IHBtX2NwaV9zdGFjazEsIENQSSBzdGFjayBicmVha2Rvd24KK2V2ZW50OjBYMDU0MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQzAwMDAwMDA0MDE2RjYxOCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA1NDEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEMwMDAwMDAwNDAxNkY2MTggbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNTQyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhDMDAwMDAwMDQwMTZGNjE4IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDU0MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQzAwMDAwMDA0MDE2RjYxOCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA1NDQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEMwMDAwMDAwNDAxNkY2MTggbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNTQ1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhDMDAwMDAwMDQwMTZGNjE4IG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDg1IHBtX2NwaV9zdGFjazIsIENQSSBzdGFjayBicmVha2Rvd24KK2V2ZW50OjBYMDU1MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAwRTE0MDQxNCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA1NTEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMEUxNDA0MTQgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNTUyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDBFMTQwNDE0IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDU1MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAwRTE0MDQxNCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA1NTQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMEUxNDA0MTQgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNTU1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDBFMTQwNDE0IG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDg2IHBtX2NwaV9zdGFjazMsIENQSSBzdGFjayBicmVha2Rvd24KK2V2ZW50OjBYMDU2MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAyNjEyMUExNiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA1NjEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMjYxMjFBMTYgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNTYyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDI2MTIxQTE2IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDU2MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAyNjEyMUExNiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA1NjQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMjYxMjFBMTYgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNTY1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDI2MTIxQTE2IG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDg3IHBtX2NwaV9zdGFjazQsIENQSSBzdGFjayBicmVha2Rvd24KK2V2ZW50OjBYMDU3MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDBGNDE4M0UxMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA1NzEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwRjQxODNFMTIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNTcyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMEY0MTgzRTEyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDU3MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDBGNDE4M0UxMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA1NzQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwRjQxODNFMTIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNTc1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMEY0MTgzRTEyIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDg4IHBtX2NwaV9zdGFjazUsIENQSSBzdGFjayBicmVha2Rvd24KK2V2ZW50OjBYMDU4MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAyODFDM0YwQSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA1ODEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMjgxQzNGMEEgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNTgyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDI4MUMzRjBBIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDU4MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAyODFDM0YwQSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA1ODQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMjgxQzNGMEEgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNTg1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDI4MUMzRjBBIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDg5IHBtX2NwaV9zdGFjazYsIENQSSBzdGFjayBicmVha2Rvd24KK2V2ZW50OjBYMDU5MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAxQzNDMDIxQyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA1OTEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMUMzQzAyMUMgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNTkyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDFDM0MwMjFDIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDU5MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAxQzNDMDIxQyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA1OTQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMUMzQzAyMUMgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNTk1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDFDM0MwMjFDIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDkwIHBtX2NwaV9zdGFjazcsIENQSSBzdGFjayBicmVha2Rvd24KK2V2ZW50OjBYMDVBMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDBGODFBMTQxQSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA1QTEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwRjgxQTE0MUEgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNUEyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMEY4MUExNDFBIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDVBMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDBGODFBMTQxQSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA1QTQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwRjgxQTE0MUEgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNUE1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMEY4MUExNDFBIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDkxIHBtX2Rzb3VyY2UxLCBEYXRhIHNvdXJjZSBpbmZvcm1hdGlvbgorZXZlbnQ6MFgwNUIwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhDQ0NDMDAwMDQwNDA0MjQyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDVCMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQ0NDQzAwMDA0MDQwNDI0MiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA1QjIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWENDQ0MwMDAwNDA0MDQyNDIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNUIzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhDQ0NDMDAwMDQwNDA0MjQyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDVCNCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQ0NDQzAwMDA0MDQwNDI0MiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA1QjUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWENDQ0MwMDAwNDA0MDQyNDIgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgOTIgcG1fZHNvdXJjZTIsIERhdGEgc291cmNlIGluZm9ybWF0aW9uCitldmVudDowWDA1QzAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWENDQ0MwMDAwNDg0NjRBNDggbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNUMxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhDQ0NDMDAwMDQ4NDY0QTQ4IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDVDMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQ0NDQzAwMDA0ODQ2NEE0OCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA1QzMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWENDQ0MwMDAwNDg0NjRBNDggbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNUM0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhDQ0NDMDAwMDQ4NDY0QTQ4IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDVDNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQ0NDQzAwMDA0ODQ2NEE0OCBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCA5MyBwbV9kc291cmNlMywgRGF0YSBzb3VyY2UgaW5mb3JtYXRpb24KK2V2ZW50OjBYMDVEMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQ0NDQzAwMDA0QTQ4NDY0OCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA1RDEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWENDQ0MwMDAwNEE0ODQ2NDggbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNUQyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhDQ0NDMDAwMDRBNDg0NjQ4IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDVEMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQ0NDQzAwMDA0QTQ4NDY0OCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA1RDQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWENDQ0MwMDAwNEE0ODQ2NDggbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNUQ1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhDQ0NDMDAwMDRBNDg0NjQ4IG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDk0IHBtX2Rzb3VyY2U0LCBEYXRhIHNvdXJjZSBpbmZvcm1hdGlvbgorZXZlbnQ6MFgwNUUwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhDQ0NDMDAwMDQ0NDQ0QzQ0IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDVFMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQ0NDQzAwMDA0NDQ0NEM0NCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA1RTIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWENDQ0MwMDAwNDQ0NDRDNDQgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNUUzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhDQ0NDMDAwMDQ0NDQ0QzQ0IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDVFNCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQ0NDQzAwMDA0NDQ0NEM0NCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA1RTUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWENDQ0MwMDAwNDQ0NDRDNDQgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgOTUgcG1fZHNvdXJjZTUsIERhdGEgc291cmNlIGluZm9ybWF0aW9uCitldmVudDowWDA1RjAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWENDQ0MwMDAwNEU0MjQ0NDYgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNUYxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhDQ0NDMDAwMDRFNDI0NDQ2IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDVGMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQ0NDQzAwMDA0RTQyNDQ0NiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA1RjMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWENDQ0MwMDAwNEU0MjQ0NDYgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNUY0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhDQ0NDMDAwMDRFNDI0NDQ2IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDVGNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQ0NDQzAwMDA0RTQyNDQ0NiBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCA5NiBwbV9kc291cmNlNiwgRGF0YSBzb3VyY2UgaW5mb3JtYXRpb24KK2V2ZW50OjBYMDYwMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQ0NDQzAwMDA0MjQ0NEU0OCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA2MDEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWENDQ0MwMDAwNDI0NDRFNDggbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNjAyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhDQ0NDMDAwMDQyNDQ0RTQ4IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDYwMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQ0NDQzAwMDA0MjQ0NEU0OCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA2MDQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWENDQ0MwMDAwNDI0NDRFNDggbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNjA1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhDQ0NDMDAwMDQyNDQ0RTQ4IG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDk3IHBtX2Rzb3VyY2U3LCBEYXRhIHNvdXJjZSBpbmZvcm1hdGlvbgorZXZlbnQ6MFgwNjEwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhDQ0NDMDAwMDRDNDg0QzQ0IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDYxMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQ0NDQzAwMDA0QzQ4NEM0NCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA2MTIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWENDQ0MwMDAwNEM0ODRDNDQgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNjEzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhDQ0NDMDAwMDRDNDg0QzQ0IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDYxNCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQ0NDQzAwMDA0QzQ4NEM0NCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA2MTUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWENDQ0MwMDAwNEM0ODRDNDQgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgOTggcG1fZHNvdXJjZTgsIERhdGEgc291cmNlIGluZm9ybWF0aW9uCitldmVudDowWDA2MjAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDBDMEMwMDAwMDI0MEZFNDIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNjIxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwQzBDMDAwMDAyNDBGRTQyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDYyMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMEMwQzAwMDAwMjQwRkU0MiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA2MjMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDBDMEMwMDAwMDI0MEZFNDIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNjI0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwQzBDMDAwMDAyNDBGRTQyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDYyNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMEMwQzAwMDAwMjQwRkU0MiBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCA5OSBwbV9kc291cmNlOSwgRGF0YSBzb3VyY2UgaW5mb3JtYXRpb24KK2V2ZW50OjBYMDYzMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQzAwMDAwMDA0MEZFRjZGMCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA2MzEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEMwMDAwMDAwNDBGRUY2RjAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNjMyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhDMDAwMDAwMDQwRkVGNkYwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDYzMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQzAwMDAwMDA0MEZFRjZGMCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA2MzQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEMwMDAwMDAwNDBGRUY2RjAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNjM1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhDMDAwMDAwMDQwRkVGNkYwIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDEwMCBwbV9kc291cmNlMTAsIERhdGEgc291cmNlIGluZm9ybWF0aW9uCitldmVudDowWDA2NDAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWENDQ0MwMDAwNDI0NDQ0NDQgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNjQxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhDQ0NDMDAwMDQyNDQ0NDQ0IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDY0MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQ0NDQzAwMDA0MjQ0NDQ0NCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA2NDMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWENDQ0MwMDAwNDI0NDQ0NDQgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNjQ0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhDQ0NDMDAwMDQyNDQ0NDQ0IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDY0NSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQ0NDQzAwMDA0MjQ0NDQ0NCBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxMDEgcG1fZHNvdXJjZTExLCBEYXRhIHNvdXJjZSBpbmZvcm1hdGlvbgorZXZlbnQ6MFgwNjUwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhDMDAwMDAwMDQwRkVGRUZBIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDY1MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQzAwMDAwMDA0MEZFRkVGQSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA2NTIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEMwMDAwMDAwNDBGRUZFRkEgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNjUzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhDMDAwMDAwMDQwRkVGRUZBIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDY1NCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQzAwMDAwMDA0MEZFRkVGQSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA2NTUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEMwMDAwMDAwNDBGRUZFRkEgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMTAyIHBtX2Rzb3VyY2UxMiwgRGF0YSBzb3VyY2UgaW5mb3JtYXRpb24KK2V2ZW50OjBYMDY2MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQ0NDQzAwMDA0MjQyNDI0MiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA2NjEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWENDQ0MwMDAwNDI0MjQyNDIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNjYyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhDQ0NDMDAwMDQyNDI0MjQyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDY2MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQ0NDQzAwMDA0MjQyNDI0MiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA2NjQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWENDQ0MwMDAwNDI0MjQyNDIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNjY1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhDQ0NDMDAwMDQyNDI0MjQyIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDEwMyBwbV9kc291cmNlMTMsIERhdGEgc291cmNlIGluZm9ybWF0aW9uCitldmVudDowWDA2NzAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEMwQ0MwMDAwNUMwMjQ0NDQgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNjcxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhDMENDMDAwMDVDMDI0NDQ0IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDY3MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQzBDQzAwMDA1QzAyNDQ0NCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA2NzMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEMwQ0MwMDAwNUMwMjQ0NDQgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNjc0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhDMENDMDAwMDVDMDI0NDQ0IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDY3NSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQzBDQzAwMDA1QzAyNDQ0NCBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxMDQgcG1fZHNvdXJjZTE0LCBEYXRhIHNvdXJjZSBpbmZvcm1hdGlvbgorZXZlbnQ6MFgwNjgwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhDMENDMDAwMDRBMDI0MjQyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDY4MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQzBDQzAwMDA0QTAyNDI0MiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA2ODIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEMwQ0MwMDAwNEEwMjQyNDIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNjgzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhDMENDMDAwMDRBMDI0MjQyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDY4NCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQzBDQzAwMDA0QTAyNDI0MiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA2ODUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEMwQ0MwMDAwNEEwMjQyNDIgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMTA1IHBtX2Rzb3VyY2UxNSwgRGF0YSBzb3VyY2UgaW5mb3JtYXRpb24KK2V2ZW50OjBYMDY5MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQzAwQzAwMDA0QTAyRjY0MiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA2OTEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEMwMEMwMDAwNEEwMkY2NDIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNjkyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhDMDBDMDAwMDRBMDJGNjQyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDY5MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQzAwQzAwMDA0QTAyRjY0MiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA2OTQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEMwMEMwMDAwNEEwMkY2NDIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNjk1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhDMDBDMDAwMDRBMDJGNjQyIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDEwNiBwbV9pc291cmNlMSwgSW5zdHJ1Y3Rpb24gc291cmNlIGluZm9ybWF0aW9uCitldmVudDowWDA2QTAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQ0NDQwMDAwNDA0MDRBNDggbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNkExIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0NDQ0MDAwMDQwNDA0QTQ4IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDZBMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDQ0NDAwMDA0MDQwNEE0OCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA2QTMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQ0NDQwMDAwNDA0MDRBNDggbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNkE0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0NDQ0MDAwMDQwNDA0QTQ4IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDZBNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDQ0NDAwMDA0MDQwNEE0OCBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxMDcgcG1faXNvdXJjZTIsIEluc3RydWN0aW9uIHNvdXJjZSBpbmZvcm1hdGlvbgorZXZlbnQ6MFgwNkIwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0NDQ0MDAwMDQ4NDI0QzQyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDZCMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDQ0NDAwMDA0ODQyNEM0MiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA2QjIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQ0NDQwMDAwNDg0MjRDNDIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNkIzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0NDQ0MDAwMDQ4NDI0QzQyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDZCNCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDQ0NDAwMDA0ODQyNEM0MiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA2QjUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQ0NDQwMDAwNDg0MjRDNDIgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMTA4IHBtX2lzb3VyY2UzLCBJbnN0cnVjdGlvbiBzb3VyY2UgaW5mb3JtYXRpb24KK2V2ZW50OjBYMDZDMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDQ0NDAwMDA0QTQ4NDQ0NCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA2QzEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQ0NDQwMDAwNEE0ODQ0NDQgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNkMyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0NDQ0MDAwMDRBNDg0NDQ0IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDZDMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDQ0NDAwMDA0QTQ4NDQ0NCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA2QzQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQ0NDQwMDAwNEE0ODQ0NDQgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNkM1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0NDQ0MDAwMDRBNDg0NDQ0IG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDEwOSBwbV9pc291cmNlNCwgSW5zdHJ1Y3Rpb24gc291cmNlIGluZm9ybWF0aW9uCitldmVudDowWDA2RDAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQ0NDQwMDAwNDQ0NjQ2NDYgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNkQxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0NDQ0MDAwMDQ0NDY0NjQ2IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDZEMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDQ0NDAwMDA0NDQ2NDY0NiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA2RDMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQ0NDQwMDAwNDQ0NjQ2NDYgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNkQ0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0NDQ0MDAwMDQ0NDY0NjQ2IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDZENSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDQ0NDAwMDA0NDQ2NDY0NiBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxMTAgcG1faXNvdXJjZTUsIEluc3RydWN0aW9uIHNvdXJjZSBpbmZvcm1hdGlvbgorZXZlbnQ6MFgwNkUwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0NDQ0MDAwMDRFNDQ0RTQ4IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDZFMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDQ0NDAwMDA0RTQ0NEU0OCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA2RTIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQ0NDQwMDAwNEU0NDRFNDggbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNkUzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0NDQ0MDAwMDRFNDQ0RTQ4IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDZFNCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDQ0NDAwMDA0RTQ0NEU0OCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA2RTUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQ0NDQwMDAwNEU0NDRFNDggbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMTExIHBtX2lzb3VyY2U2LCBJbnN0cnVjdGlvbiBzb3VyY2UgaW5mb3JtYXRpb24KK2V2ZW50OjBYMDZGMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDQ0NDAwMDA0NjQ4NEE0OCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA2RjEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQ0NDQwMDAwNDY0ODRBNDggbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNkYyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0NDQ0MDAwMDQ2NDg0QTQ4IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDZGMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDQ0NDAwMDA0NjQ4NEE0OCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA2RjQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQ0NDQwMDAwNDY0ODRBNDggbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNkY1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0NDQ0MDAwMDQ2NDg0QTQ4IG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDExMiBwbV9pc291cmNlNywgSW5zdHJ1Y3Rpb24gc291cmNlIGluZm9ybWF0aW9uCitldmVudDowWDA3MDAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQ0NDQwMDAwNDI0NDQ0NDQgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNzAxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0NDQ0MDAwMDQyNDQ0NDQ0IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDcwMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDQ0NDAwMDA0MjQ0NDQ0NCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA3MDMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQ0NDQwMDAwNDI0NDQ0NDQgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNzA0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0NDQ0MDAwMDQyNDQ0NDQ0IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDcwNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDQ0NDAwMDA0MjQ0NDQ0NCBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxMTMgcG1faXNvdXJjZTgsIEluc3RydWN0aW9uIHNvdXJjZSBpbmZvcm1hdGlvbgorZXZlbnQ6MFgwNzEwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0NDQ0MDAwMDRDNDg0QTQ4IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDcxMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDQ0NDAwMDA0QzQ4NEE0OCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA3MTIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQ0NDQwMDAwNEM0ODRBNDggbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNzEzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0NDQ0MDAwMDRDNDg0QTQ4IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDcxNCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDQ0NDAwMDA0QzQ4NEE0OCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA3MTUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQ0NDQwMDAwNEM0ODRBNDggbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMTE0IHBtX2lzb3VyY2U5LCBJbnN0cnVjdGlvbiBzb3VyY2UgaW5mb3JtYXRpb24KK2V2ZW50OjBYMDcyMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDQ0NDAwMDA0NjQyNDI0MiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA3MjEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQ0NDQwMDAwNDY0MjQyNDIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNzIyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0NDQ0MDAwMDQ2NDI0MjQyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDcyMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDQ0NDAwMDA0NjQyNDI0MiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA3MjQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQ0NDQwMDAwNDY0MjQyNDIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNzI1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0NDQ0MDAwMDQ2NDI0MjQyIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDExNSBwbV9pc291cmNlMTAsIEluc3RydWN0aW9uIHNvdXJjZSBpbmZvcm1hdGlvbgorZXZlbnQ6MFgwNzMwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0NDAwMDAwMDQwNDAwMjFFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDczMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDQwMDAwMDA0MDQwMDIxRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA3MzIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQ0MDAwMDAwNDA0MDAyMUUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNzMzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0NDAwMDAwMDQwNDAwMjFFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDczNCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDQwMDAwMDA0MDQwMDIxRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA3MzUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQ0MDAwMDAwNDA0MDAyMUUgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMTE2IHBtX2lzb3VyY2UxMSwgSW5zdHJ1Y3Rpb24gc291cmNlIGluZm9ybWF0aW9uCitldmVudDowWDA3NDAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQ0NDAwMDAwNDI0NDRBMDIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNzQxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0NDQwMDAwMDQyNDQ0QTAyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDc0MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDQ0MDAwMDA0MjQ0NEEwMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA3NDMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQ0NDAwMDAwNDI0NDRBMDIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNzQ0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0NDQwMDAwMDQyNDQ0QTAyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDc0NSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDQ0MDAwMDA0MjQ0NEEwMiBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxMTcgcG1faXNvdXJjZTEyLCBJbnN0cnVjdGlvbiBzb3VyY2UgaW5mb3JtYXRpb24KK2V2ZW50OjBYMDc1MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDA0NDAwMDAxRTAyNDQ0NCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA3NTEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwNDQwMDAwMUUwMjQ0NDQgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNzUyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDQ0MDAwMDFFMDI0NDQ0IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDc1MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDA0NDAwMDAxRTAyNDQ0NCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA3NTQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwNDQwMDAwMUUwMjQ0NDQgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNzU1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDQ0MDAwMDFFMDI0NDQ0IG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDExOCBwbV9pc291cmNlMTMsIEluc3RydWN0aW9uIHNvdXJjZSBpbmZvcm1hdGlvbgorZXZlbnQ6MFgwNzYwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MDQ0MDAwMDRBMDI0MjQyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDc2MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDA0NDAwMDA0QTAyNDI0MiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA3NjIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwNDQwMDAwNEEwMjQyNDIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNzYzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MDQ0MDAwMDRBMDI0MjQyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDc2NCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDA0NDAwMDA0QTAyNDI0MiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA3NjUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwNDQwMDAwNEEwMjQyNDIgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMTE5IHBtX3ByZWZldGNoMSwgUHJlZmV0Y2ggZXZlbnRzCitldmVudDowWDA3NzAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEREREQwMDBGQThBQ0I0QjggbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNzcxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhEREREMDAwRkE4QUNCNEI4IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDc3MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYRERERDAwMEZBOEFDQjRCOCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA3NzMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEREREQwMDBGQThBQ0I0QjggbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNzc0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhEREREMDAwRkE4QUNCNEI4IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDc3NSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYRERERDAwMEZBOEFDQjRCOCBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxMjAgcG1fcHJlZmV0Y2gyLCBQcmVmZXRjaCBldmVudHMKK2V2ZW50OjBYMDc4MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYREMwMDAwMENCQzgwNjZGMCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA3ODEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWERDMDAwMDBDQkM4MDY2RjAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNzgyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhEQzAwMDAwQ0JDODA2NkYwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDc4MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYREMwMDAwMENCQzgwNjZGMCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA3ODQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWERDMDAwMDBDQkM4MDY2RjAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNzg1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhEQzAwMDAwQ0JDODA2NkYwIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDEyMSBwbV92c3UwLCBWU1UgRXhlY3V0aW9uCitldmVudDowWDA3OTAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEFBQUEwMDAwODA4Mjk4OUEgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNzkxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhBQUFBMDAwMDgwODI5ODlBIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDc5MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQUFBQTAwMDA4MDgyOTg5QSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA3OTMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEFBQUEwMDAwODA4Mjk4OUEgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwNzk0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhBQUFBMDAwMDgwODI5ODlBIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDc5NSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQUFBQTAwMDA4MDgyOTg5QSBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxMjIgcG1fdnN1MSwgVlNVIEV4ZWN1dGlvbgorZXZlbnQ6MFgwN0EwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhBQUFBMDAwMDlDOUVBMEEyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDdBMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQUFBQTAwMDA5QzlFQTBBMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA3QTIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEFBQUEwMDAwOUM5RUEwQTIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwN0EzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhBQUFBMDAwMDlDOUVBMEEyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDdBNCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQUFBQTAwMDA5QzlFQTBBMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA3QTUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEFBQUEwMDAwOUM5RUEwQTIgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMTIzIHBtX3ZzdTIsIFZTVSBFeGVjdXRpb24KK2V2ZW50OjBYMDdCMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQUFBQTAwMEM5ODhDOEM4RSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA3QjEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEFBQUEwMDBDOTg4QzhDOEUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwN0IyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhBQUFBMDAwQzk4OEM4QzhFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDdCMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQUFBQTAwMEM5ODhDOEM4RSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA3QjQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEFBQUEwMDBDOTg4QzhDOEUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwN0I1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhBQUFBMDAwQzk4OEM4QzhFIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDEyNCBwbV92c3UzLCBWU1UgRXhlY3V0aW9uCitldmVudDowWDA3QzAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEFBQTAwMDAyODQ4Njg0MDIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwN0MxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhBQUEwMDAwMjg0ODY4NDAyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDdDMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQUFBMDAwMDI4NDg2ODQwMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA3QzMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEFBQTAwMDAyODQ4Njg0MDIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwN0M0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhBQUEwMDAwMjg0ODY4NDAyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDdDNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQUFBMDAwMDI4NDg2ODQwMiBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxMjUgcG1fdnN1NCwgVlNVIEV4ZWN1dGlvbgorZXZlbnQ6MFgwN0QwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhBQUEwMDAwMjkwOTI5MDAyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDdEMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQUFBMDAwMDI5MDkyOTAwMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA3RDIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEFBQTAwMDAyOTA5MjkwMDIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwN0QzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhBQUEwMDAwMjkwOTI5MDAyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDdENCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQUFBMDAwMDI5MDkyOTAwMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA3RDUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEFBQTAwMDAyOTA5MjkwMDIgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMTI2IHBtX3ZzdTUsIFZTVSBFeGVjdXRpb24KK2V2ZW50OjBYMDdFMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQkJCMDAwMDg4MDgwODIwMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA3RTEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEJCQjAwMDA4ODA4MDgyMDIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwN0UyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhCQkIwMDAwODgwODA4MjAyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDdFMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQkJCMDAwMDg4MDgwODIwMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA3RTQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEJCQjAwMDA4ODA4MDgyMDIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwN0U1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhCQkIwMDAwODgwODA4MjAyIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDEyNyBwbV92c3U2LCBWU1UgRXhlY3V0aW9uCitldmVudDowWDA3RjAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEFBQTAwMDA4QUNBQ0FFMDIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwN0YxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhBQUEwMDAwOEFDQUNBRTAyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDdGMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQUFBMDAwMDhBQ0FDQUUwMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA3RjMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEFBQTAwMDA4QUNBQ0FFMDIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwN0Y0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhBQUEwMDAwOEFDQUNBRTAyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDdGNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQUFBMDAwMDhBQ0FDQUUwMiBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxMjggcG1fdnN1NywgVlNVIEV4ZWN1dGlvbgorZXZlbnQ6MFgwODAwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhBQUEwMDAwOEJDQkNCRTAyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDgwMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQUFBMDAwMDhCQ0JDQkUwMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA4MDIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEFBQTAwMDA4QkNCQ0JFMDIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwODAzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhBQUEwMDAwOEJDQkNCRTAyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDgwNCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQUFBMDAwMDhCQ0JDQkUwMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA4MDUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEFBQTAwMDA4QkNCQ0JFMDIgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMTI5IHBtX3ZzdTgsIFZTVSBFeGVjdXRpb24KK2V2ZW50OjBYMDgxMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQkJCMDAwMDg4QzhDOEUwMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA4MTEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEJCQjAwMDA4OEM4QzhFMDIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwODEyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhCQkIwMDAwODhDOEM4RTAyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDgxMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQkJCMDAwMDg4QzhDOEUwMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA4MTQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEJCQjAwMDA4OEM4QzhFMDIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwODE1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhCQkIwMDAwODhDOEM4RTAyIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDEzMCBwbV92c3U5LCBWU1UgRXhlY3V0aW9uCitldmVudDowWDA4MjAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEFBQUEwMDA4QThBOEFBQTQgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwODIxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhBQUFBMDAwOEE4QThBQUE0IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDgyMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQUFBQTAwMDhBOEE4QUFBNCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA4MjMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEFBQUEwMDA4QThBOEFBQTQgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwODI0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhBQUFBMDAwOEE4QThBQUE0IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDgyNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQUFBQTAwMDhBOEE4QUFBNCBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxMzEgcG1fdnN1MTAsIFZTVSBFeGVjdXRpb24KK2V2ZW50OjBYMDgzMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQUFBMDAwMDg4ODg4OEEwMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA4MzEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEFBQTAwMDA4ODg4ODhBMDIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwODMyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhBQUEwMDAwODg4ODg4QTAyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDgzMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQUFBMDAwMDg4ODg4OEEwMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA4MzQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEFBQTAwMDA4ODg4ODhBMDIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwODM1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhBQUEwMDAwODg4ODg4QTAyIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDEzMiBwbV92c3UxMSwgVlNVIEV4ZWN1dGlvbgorZXZlbnQ6MFgwODQwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhBQUEwMDAwODk0OTQ5NjAyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDg0MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQUFBMDAwMDg5NDk0OTYwMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA4NDIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEFBQTAwMDA4OTQ5NDk2MDIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwODQzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhBQUEwMDAwODk0OTQ5NjAyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDg0NCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQUFBMDAwMDg5NDk0OTYwMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA4NDUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEFBQTAwMDA4OTQ5NDk2MDIgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMTMzIHBtX3ZzdTEyLCBWU1UgRXhlY3V0aW9uCitldmVudDowWDA4NTAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEJCQjAwMDA4ODg4ODhBMDIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwODUxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhCQkIwMDAwODg4ODg4QTAyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDg1MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQkJCMDAwMDg4ODg4OEEwMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA4NTMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEJCQjAwMDA4ODg4ODhBMDIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwODU0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhCQkIwMDAwODg4ODg4QTAyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDg1NSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQkJCMDAwMDg4ODg4OEEwMiBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxMzQgcG1fdnN1MTMsIFZTVSBFeGVjdXRpb24KK2V2ZW50OjBYMDg2MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQkJCMDAwMDg4NDg0ODYwMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA4NjEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEJCQjAwMDA4ODQ4NDg2MDIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwODYyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhCQkIwMDAwODg0ODQ4NjAyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDg2MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQkJCMDAwMDg4NDg0ODYwMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA4NjQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEJCQjAwMDA4ODQ4NDg2MDIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwODY1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhCQkIwMDAwODg0ODQ4NjAyIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDEzNSBwbV92c3UxNCwgVlNVIEV4ZWN1dGlvbgorZXZlbnQ6MFgwODcwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhBQUFBMDAwRjgwOUNBMDk4IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDg3MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQUFBQTAwMEY4MDlDQTA5OCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA4NzIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEFBQUEwMDBGODA5Q0EwOTggbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwODczIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhBQUFBMDAwRjgwOUNBMDk4IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDg3NCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQUFBQTAwMEY4MDlDQTA5OCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA4NzUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEFBQUEwMDBGODA5Q0EwOTggbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMTM2IHBtX3ZzdTE1LCBWU1UgRXhlY3V0aW9uCitldmVudDowWDA4ODAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEJCQjAwMDA4OTA5MDlDMDIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwODgxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhCQkIwMDAwODkwOTA5QzAyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDg4MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQkJCMDAwMDg5MDkwOUMwMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA4ODMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEJCQjAwMDA4OTA5MDlDMDIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwODg0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhCQkIwMDAwODkwOTA5QzAyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDg4NSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQkJCMDAwMDg5MDkwOUMwMiBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxMzcgcG1fdnN1MTYsIFZTVSBFeGVjdXRpb24KK2V2ZW50OjBYMDg5MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQkJCQjAwMDg5NDk0OTZBMCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA4OTEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEJCQkIwMDA4OTQ5NDk2QTAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwODkyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhCQkJCMDAwODk0OTQ5NkEwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDg5MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQkJCQjAwMDg5NDk0OTZBMCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA4OTQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEJCQkIwMDA4OTQ5NDk2QTAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwODk1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhCQkJCMDAwODk0OTQ5NkEwIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDEzOCBwbV92c3UxNywgVlNVIEV4ZWN1dGlvbgorZXZlbnQ6MFgwOEEwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhCQkJCMDAwMDk4OUE5MjlFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDhBMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQkJCQjAwMDA5ODlBOTI5RSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA4QTIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEJCQkIwMDAwOTg5QTkyOUUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwOEEzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhCQkJCMDAwMDk4OUE5MjlFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDhBNCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQkJCQjAwMDA5ODlBOTI5RSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA4QTUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEJCQkIwMDAwOTg5QTkyOUUgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMTM5IHBtX3ZzdTE4LCBWU1UgRXhlY3V0aW9uCitldmVudDowWDA4QjAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEFBQTAwMDA4QjBCMEIyMDIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwOEIxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhBQUEwMDAwOEIwQjBCMjAyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDhCMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQUFBMDAwMDhCMEIwQjIwMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA4QjMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEFBQTAwMDA4QjBCMEIyMDIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwOEI0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhBQUEwMDAwOEIwQjBCMjAyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDhCNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQUFBMDAwMDhCMEIwQjIwMiBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxNDAgcG1fdnN1MTksIFZTVSBFeGVjdXRpb24KK2V2ZW50OjBYMDhDMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQUFBMDAwMDhCNEI0QjYwMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA4QzEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEFBQTAwMDA4QjRCNEI2MDIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwOEMyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhBQUEwMDAwOEI0QjRCNjAyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDhDMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQUFBMDAwMDhCNEI0QjYwMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA4QzQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEFBQTAwMDA4QjRCNEI2MDIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwOEM1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhBQUEwMDAwOEI0QjRCNjAyIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDE0MSBwbV92c3UyMCwgVlNVIEV4ZWN1dGlvbgorZXZlbnQ6MFgwOEQwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhBQUEwMDAwOEI4QjhCQTAyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDhEMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQUFBMDAwMDhCOEI4QkEwMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA4RDIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEFBQTAwMDA4QjhCOEJBMDIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwOEQzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhBQUEwMDAwOEI4QjhCQTAyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDhENCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQUFBMDAwMDhCOEI4QkEwMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA4RDUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEFBQTAwMDA4QjhCOEJBMDIgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMTQyIHBtX3ZzdTIxLCBWU1UgRXhlY3V0aW9uCitldmVudDowWDA4RTAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMEEwMDAxNjhGNDAyQkMgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwOEUxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDBBMDAwMTY4RjQwMkJDIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDhFMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwQTAwMDE2OEY0MDJCQyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA4RTMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMEEwMDAxNjhGNDAyQkMgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwOEU0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDBBMDAwMTY4RjQwMkJDIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDhFNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwQTAwMDE2OEY0MDJCQyBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxNDMgcG1fdnN1MjIsIFZTVSBFeGVjdXRpb24KK2V2ZW50OjBYMDhGMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQ0JBQTAwMEY4NDhDODQ4MCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA4RjEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWENCQUEwMDBGODQ4Qzg0ODAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwOEYyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhDQkFBMDAwRjg0OEM4NDgwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDhGMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQ0JBQTAwMEY4NDhDODQ4MCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA4RjQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWENCQUEwMDBGODQ4Qzg0ODAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwOEY1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhDQkFBMDAwRjg0OEM4NDgwIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDE0NCBwbV92c3UyMywgVlNVIEV4ZWN1dGlvbgorZXZlbnQ6MFgwOTAwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhBQUFBMDAwRjg4QkM4NDgwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDkwMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQUFBQTAwMEY4OEJDODQ4MCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA5MDIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEFBQUEwMDBGODhCQzg0ODAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwOTAzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhBQUFBMDAwRjg4QkM4NDgwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDkwNCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQUFBQTAwMEY4OEJDODQ4MCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA5MDUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEFBQUEwMDBGODhCQzg0ODAgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMTQ1IHBtX3ZzdTI0LCBWU1UgRXhlY3V0aW9uCitldmVudDowWDA5MTAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDBBQUEwMDA3RjRCQ0I4ODAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwOTExIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwQUFBMDAwN0Y0QkNCODgwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDkxMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMEFBQTAwMDdGNEJDQjg4MCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA5MTMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDBBQUEwMDA3RjRCQ0I4ODAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwOTE0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwQUFBMDAwN0Y0QkNCODgwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDkxNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMEFBQTAwMDdGNEJDQjg4MCBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxNDYgcG1fdnN1MjUsIFZTVSBFeGVjdXRpb24KK2V2ZW50OjBYMDkyMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQkFBQTAwMEY4Q0JDQjRCMCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA5MjEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEJBQUEwMDBGOENCQ0I0QjAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwOTIyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhCQUFBMDAwRjhDQkNCNEIwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDkyMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQkFBQTAwMEY4Q0JDQjRCMCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA5MjQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEJBQUEwMDBGOENCQ0I0QjAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwOTI1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhCQUFBMDAwRjhDQkNCNEIwIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDE0NyBwbV9sc3UxLCBMU1UgTE1RIFNSUSBldmVudHMKK2V2ZW50OjBYMDkzMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYRDAwMDAwMDBBNDNFMUMwOCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA5MzEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEQwMDAwMDAwQTQzRTFDMDggbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwOTMyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhEMDAwMDAwMEE0M0UxQzA4IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDkzMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYRDAwMDAwMDBBNDNFMUMwOCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA5MzQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEQwMDAwMDAwQTQzRTFDMDggbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwOTM1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhEMDAwMDAwMEE0M0UxQzA4IG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDE0OCBwbV9sc3UyLCBMU1UgZXZlbnRzCitldmVudDowWDA5NDAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDBDMDIwMDAwNjY5MDY2OEUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwOTQxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwQzAyMDAwMDY2OTA2NjhFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDk0MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMEMwMjAwMDA2NjkwNjY4RSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA5NDMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDBDMDIwMDAwNjY5MDY2OEUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwOTQ0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwQzAyMDAwMDY2OTA2NjhFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDk0NSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMEMwMjAwMDA2NjkwNjY4RSBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxNDkgcG1fbHN1X2xtcSwgTFNVIExNUSBFdmVudHMKK2V2ZW50OjBYMDk1MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYRERERDAwMDA5ODlBQTBBNCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA5NTEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEREREQwMDAwOTg5QUEwQTQgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwOTUyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhEREREMDAwMDk4OUFBMEE0IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDk1MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYRERERDAwMDA5ODlBQTBBNCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA5NTQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEREREQwMDAwOTg5QUEwQTQgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwOTU1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhEREREMDAwMDk4OUFBMEE0IG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDE1MCBwbV9sc3Vfc3JxMSwgU3RvcmUgUmVxdWVzdCBRdWV1ZSBJbmZvCitldmVudDowWDA5NjAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWENDQzAwMDA4QTBBMEEyMDIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwOTYxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhDQ0MwMDAwOEEwQTBBMjAyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDk2MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQ0NDMDAwMDhBMEEwQTIwMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA5NjMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWENDQzAwMDA4QTBBMEEyMDIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwOTY0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhDQ0MwMDAwOEEwQTBBMjAyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDk2NSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQ0NDMDAwMDhBMEEwQTIwMiBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxNTEgcG1fbHN1X3NycTIsIFN0b3JlIFJlcXVlc3QgUXVldWUgSW5mbworZXZlbnQ6MFgwOTcwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhEREQwMDAwMDk2OTc5QzAyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDk3MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYREREMDAwMDA5Njk3OUMwMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA5NzIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWERERDAwMDAwOTY5NzlDMDIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwOTczIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhEREQwMDAwMDk2OTc5QzAyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDk3NCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYREREMDAwMDA5Njk3OUMwMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA5NzUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWERERDAwMDAwOTY5NzlDMDIgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMTUyIHBtX2xzdV9zMF92YWxpZCwgTFNVIEV2ZW50cworZXZlbnQ6MFgwOTgwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhEREQwMDAwMDlDOUVBMDAyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDk4MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYREREMDAwMDA5QzlFQTAwMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA5ODIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWERERDAwMDAwOUM5RUEwMDIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwOTgzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhEREQwMDAwMDlDOUVBMDAyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDk4NCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYREREMDAwMDA5QzlFQTAwMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA5ODUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWERERDAwMDAwOUM5RUEwMDIgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMTUzIHBtX2xzdV9zMF9hbGxvYywgTFNVIEV2ZW50cworZXZlbnQ6MFgwOTkwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhEREQwMDAwMEExOUY5RDAyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDk5MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYREREMDAwMDBBMTlGOUQwMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA5OTIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWERERDAwMDAwQTE5RjlEMDIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwOTkzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhEREQwMDAwMEExOUY5RDAyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDk5NCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYREREMDAwMDBBMTlGOUQwMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA5OTUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWERERDAwMDAwQTE5RjlEMDIgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMTU0IHBtX2wxX3ByZWYsIEwxIHByZWYgRXZlbnRzCitldmVudDowWDA5QTAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWERERDAwMDA4QjhCOEJBMDIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwOUExIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhEREQwMDAwOEI4QjhCQTAyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDlBMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYREREMDAwMDhCOEI4QkEwMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA5QTMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWERERDAwMDA4QjhCOEJBMDIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwOUE0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhEREQwMDAwOEI4QjhCQTAyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDlBNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYREREMDAwMDhCOEI4QkEwMiBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxNTUgcG1fbDJfZ3Vlc3NfMSwgTDJfR3Vlc3NfZXZlbnRzCitldmVudDowWDA5QjAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDY2MDA4MDAwODA4MDFFMDIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwOUIxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg2NjAwODAwMDgwODAxRTAyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDlCMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNjYwMDgwMDA4MDgwMUUwMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA5QjMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDY2MDA4MDAwODA4MDFFMDIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwOUI0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg2NjAwODAwMDgwODAxRTAyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDlCNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNjYwMDgwMDA4MDgwMUUwMiBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxNTYgcG1fbDJfZ3Vlc3NfMiwgTDJfR3Vlc3NfZXZlbnRzCitldmVudDowWDA5QzAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDY2MDA4MDAwODI4MjFFMDIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwOUMxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg2NjAwODAwMDgyODIxRTAyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDlDMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNjYwMDgwMDA4MjgyMUUwMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA5QzMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDY2MDA4MDAwODI4MjFFMDIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwOUM0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg2NjAwODAwMDgyODIxRTAyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDlDNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNjYwMDgwMDA4MjgyMUUwMiBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxNTcgcG1fbWlzYzEsIE1pc2MgZXZlbnRzCitldmVudDowWDA5RDAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDA0MDAwMDAwRjA4MDE2MDIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwOUQxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwNDAwMDAwMEYwODAxNjAyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDlEMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDQwMDAwMDBGMDgwMTYwMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA5RDMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDA0MDAwMDAwRjA4MDE2MDIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwOUQ0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwNDAwMDAwMEYwODAxNjAyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDlENSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDQwMDAwMDBGMDgwMTYwMiBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxNTggcG1fbWlzYzIsIE1pc2MgZXZlbnRzCitldmVudDowWDA5RTAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDIwMDAwMDAwODBGOEY4MUUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwOUUxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgyMDAwMDAwMDgwRjhGODFFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDlFMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMjAwMDAwMDA4MEY4RjgxRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA5RTMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDIwMDAwMDAwODBGOEY4MUUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwOUU0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgyMDAwMDAwMDgwRjhGODFFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDlFNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMjAwMDAwMDA4MEY4RjgxRSBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxNTkgcG1fbWlzYzMsIE1pc2MgZXZlbnRzCitldmVudDowWDA5RjAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwRjIwQUYyRjIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwOUYxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMEYyMEFGMkYyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDlGMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDBGMjBBRjJGMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDA5RjMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwRjIwQUYyRjIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwOUY0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMEYyMEFGMkYyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMDlGNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDBGMjBBRjJGMiBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxNjAgcG1fbWlzYzQsIE1pc2MgZXZlbnRzCitldmVudDowWDBBMDAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMEMxQTFFMUMgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQTAxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDBDMUExRTFDIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEEwMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAwQzFBMUUxQyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBBMDMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMEMxQTFFMUMgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQTA0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDBDMUExRTFDIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEEwNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAwQzFBMUUxQyBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxNjEgcG1fbWlzYzUsIE1pc2MgZXZlbnRzCitldmVudDowWDBBMTAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDA0NDAwMDA0MEFBRUE0RjYgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQTExIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwNDQwMDAwNDBBQUVBNEY2IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEExMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDQ0MDAwMDQwQUFFQTRGNiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBBMTMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDA0NDAwMDA0MEFBRUE0RjYgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQTE0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwNDQwMDAwNDBBQUVBNEY2IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEExNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDQ0MDAwMDQwQUFFQTRGNiBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxNjIgcG1fbWlzYzYsIE1pc2MgZXZlbnRzCitldmVudDowWDBBMjAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQ0NDAwMDAyOEM4RThDMDIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQTIxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0NDQwMDAwMjhDOEU4QzAyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEEyMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDQ0MDAwMDI4QzhFOEMwMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBBMjMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQ0NDAwMDAyOEM4RThDMDIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQTI0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0NDQwMDAwMjhDOEU4QzAyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEEyNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDQ0MDAwMDI4QzhFOEMwMiBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxNjMgcG1fbWlzYzcsIE1pc2MgZXZlbnRzCitldmVudDowWDBBMzAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMzgwQTFFNjYgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQTMxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDM4MEExRTY2IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEEzMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAzODBBMUU2NiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBBMzMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMzgwQTFFNjYgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQTM0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDM4MEExRTY2IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEEzNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAzODBBMUU2NiBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxNjQgcG1fbWlzYzgsIE1pc2MgZXZlbnRzCitldmVudDowWDBBNDAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwMDAwMDAwQTZGOEY2RjYgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQTQxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MDAwMDAwMEE2RjhGNkY2IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEE0MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMDAwMDBBNkY4RjZGNiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBBNDMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQwMDAwMDAwQTZGOEY2RjYgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQTQ0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0MDAwMDAwMEE2RjhGNkY2IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEE0NSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDAwMDAwMDBBNkY4RjZGNiBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxNjUgcG1fbWlzYzksIE1pc2MgZXZlbnRzCitldmVudDowWDBBNTAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDIyQzAwMDAwODQ4NkE4RjYgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQTUxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgyMkMwMDAwMDg0ODZBOEY2IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEE1MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMjJDMDAwMDA4NDg2QThGNiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBBNTMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDIyQzAwMDAwODQ4NkE4RjYgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQTU0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgyMkMwMDAwMDg0ODZBOEY2IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEE1NSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMjJDMDAwMDA4NDg2QThGNiBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxNjYgcG1fbWlzYzEwLCBNaXNjIGV2ZW50cworZXZlbnQ6MFgwQTYwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwREQ0MDAwNjFBQThCODg0IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEE2MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMERENDAwMDYxQUE4Qjg4NCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBBNjIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDBERDQwMDA2MUFBOEI4ODQgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQTYzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwREQ0MDAwNjFBQThCODg0IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEE2NCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMERENDAwMDYxQUE4Qjg4NCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBBNjUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDBERDQwMDA2MUFBOEI4ODQgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMTY3IHBtX21pc2MxMSwgTWlzYyBldmVudHMKK2V2ZW50OjBYMEE3MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDBGNDFFMDQwMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBBNzEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwRjQxRTA0MDIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQTcyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMEY0MUUwNDAyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEE3MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDBGNDFFMDQwMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBBNzQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwRjQxRTA0MDIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQTc1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMEY0MUUwNDAyIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDE2OCBwbV9taXNjXzEyLCBNaXNjIEV2ZW50cworZXZlbnQ6MFgwQTgwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDAyRjBGOEY4IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEE4MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAwMkYwRjhGOCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBBODIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMDJGMEY4RjggbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQTgzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDAyRjBGOEY4IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEE4NCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAwMkYwRjhGOCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBBODUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMDJGMEY4RjggbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMTY5IHBtX21pc2NfMTMsIE1pc2MgRXZlbnRzCitldmVudDowWDBBOTAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwRjhGMEZDRjYgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQTkxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMEY4RjBGQ0Y2IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEE5MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDBGOEYwRkNGNiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBBOTMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwRjhGMEZDRjYgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQTk0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMEY4RjBGQ0Y2IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEE5NSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDBGOEYwRkNGNiBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxNzAgcG1fbWlzY18xNCwgTWlzYyBFdmVudHMKK2V2ZW50OjBYMEFBMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAxRTFFMDI2NiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBBQTEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMUUxRTAyNjYgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQUEyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDFFMUUwMjY2IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEFBMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAxRTFFMDI2NiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBBQTQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMUUxRTAyNjYgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQUE1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDFFMUUwMjY2IG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDE3MSBwbV9taXNjXzE1LCBNaXNjIEV2ZW50cworZXZlbnQ6MFgwQUIwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhEMDAwMDAwMEEyNEFGNjRBIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEFCMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYRDAwMDAwMDBBMjRBRjY0QSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBBQjIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEQwMDAwMDAwQTI0QUY2NEEgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQUIzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhEMDAwMDAwMEEyNEFGNjRBIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEFCNCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYRDAwMDAwMDBBMjRBRjY0QSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBBQjUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEQwMDAwMDAwQTI0QUY2NEEgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMTcyIHBtX21pc2NfMTYsIE1pc2MgRXZlbnRzCitldmVudDowWDBBQzAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDBDQzAwMDAwMjg5QzlFNEMgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQUMxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwQ0MwMDAwMDI4OUM5RTRDIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEFDMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMENDMDAwMDAyODlDOUU0QyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBBQzMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDBDQzAwMDAwMjg5QzlFNEMgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQUM0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwQ0MwMDAwMDI4OUM5RTRDIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEFDNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMENDMDAwMDAyODlDOUU0QyBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxNzMgcG1fbWlzY18xNywgTWlzYyBFdmVudHMKK2V2ZW50OjBYMEFEMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDBEMDAwMDA2OEYwNTQ0RSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBBRDEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwRDAwMDAwNjhGMDU0NEUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQUQyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMEQwMDAwMDY4RjA1NDRFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEFEMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDBEMDAwMDA2OEYwNTQ0RSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBBRDQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwRDAwMDAwNjhGMDU0NEUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQUQ1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMEQwMDAwMDY4RjA1NDRFIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDE3NCBwbV9zdXNwZW5kLCBTVVNQRU5ERUQgZXZlbnRzCitldmVudDowWDBBRTAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwRDAwMDAwMDAxRTk0MDIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQUUxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMEQwMDAwMDAwMUU5NDAyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEFFMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDBEMDAwMDAwMDFFOTQwMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBBRTMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwRDAwMDAwMDAxRTk0MDIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQUU0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMEQwMDAwMDAwMUU5NDAyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEFFNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDBEMDAwMDAwMDFFOTQwMiBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxNzUgcG1faW9wcywgSW50ZXJuYWwgT3BlcmF0aW9ucyBldmVudHMKK2V2ZW50OjBYMEFGMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAxNDFFMTQwMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBBRjEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMTQxRTE0MDIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQUYyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDE0MUUxNDAyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEFGMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAxNDFFMTQwMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBBRjQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMTQxRTE0MDIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQUY1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDE0MUUxNDAyIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDE3NiBwbV9zeW5jLCBzeW5jCitldmVudDowWDBCMDAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEQwMjAwMDAwOTQxRTlBMDIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQjAxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhEMDIwMDAwMDk0MUU5QTAyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEIwMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYRDAyMDAwMDA5NDFFOUEwMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBCMDMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEQwMjAwMDAwOTQxRTlBMDIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQjA0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhEMDIwMDAwMDk0MUU5QTAyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEIwNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYRDAyMDAwMDA5NDFFOUEwMiBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxNzcgcG1fc2VnLCBTZWdtZW50IGV2ZW50cworZXZlbnQ6MFgwQjEwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMjIyMDAwNDFFQTRBNEE2IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEIxMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDIyMjAwMDQxRUE0QTRBNiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBCMTIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAyMjIwMDA0MUVBNEE0QTYgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQjEzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMjIyMDAwNDFFQTRBNEE2IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEIxNCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDIyMjAwMDQxRUE0QTRBNiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBCMTUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAyMjIwMDA0MUVBNEE0QTYgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMTc4IHBtX2wzX2hpdCwgTDMgSGl0IEV2ZW50cworZXZlbnQ6MFgwQjIwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhGRkZGMDAwMDgwODA4MDgyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEIyMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYRkZGRjAwMDA4MDgwODA4MiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBCMjIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEZGRkYwMDAwODA4MDgwODIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQjIzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhGRkZGMDAwMDgwODA4MDgyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEIyNCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYRkZGRjAwMDA4MDgwODA4MiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBCMjUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEZGRkYwMDAwODA4MDgwODIgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMTc5IHBtX3NobCwgU2hlbGwgRXZlbnRzCitldmVudDowWDBCMzAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDU1NTUwMDAwODA4Mjg0ODYgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQjMxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg1NTU1MDAwMDgwODI4NDg2IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEIzMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNTU1NTAwMDA4MDgyODQ4NiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBCMzMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDU1NTUwMDAwODA4Mjg0ODYgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQjM0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg1NTU1MDAwMDgwODI4NDg2IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEIzNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNTU1NTAwMDA4MDgyODQ4NiBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxODAgcG1fbDNfcHJlZiwgTDMgUHJlZmV0Y2ggZXZlbnRzCitldmVudDowWDBCNDAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEREREQwMDAzQUNBRUFDQjggbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQjQxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhEREREMDAwM0FDQUVBQ0I4IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEI0MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYRERERDAwMDNBQ0FFQUNCOCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBCNDMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEREREQwMDAzQUNBRUFDQjggbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQjQ0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhEREREMDAwM0FDQUVBQ0I4IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEI0NSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYRERERDAwMDNBQ0FFQUNCOCBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxODEgcG1fbDMsIEwzIGV2ZW50cworZXZlbnQ6MFgwQjUwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhGRkZGMDAwMDgyODI4MjgwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEI1MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYRkZGRjAwMDA4MjgyODI4MCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBCNTIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEZGRkYwMDAwODI4MjgyODAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQjUzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhGRkZGMDAwMDgyODI4MjgwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEI1NCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYRkZGRjAwMDA4MjgyODI4MCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBCNTUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEZGRkYwMDAwODI4MjgyODAgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMTgyIHBtX3N0cmVhbXMxLCBTdHJlYW1zCitldmVudDowWDBCNjAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDBEREQwMDA0MUVCNEI0QjYgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQjYxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwREREMDAwNDFFQjRCNEI2IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEI2MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMERERDAwMDQxRUI0QjRCNiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBCNjMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDBEREQwMDA0MUVCNEI0QjYgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQjY0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwREREMDAwNDFFQjRCNEI2IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEI2NSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMERERDAwMDQxRUI0QjRCNiBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxODMgcG1fc3RyZWFtczIsIFN0cmVhbXMKK2V2ZW50OjBYMEI3MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMERERDAwMDQxRUJDQkNCRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBCNzEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDBEREQwMDA0MUVCQ0JDQkUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQjcyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwREREMDAwNDFFQkNCQ0JFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEI3MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMERERDAwMDQxRUJDQkNCRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBCNzQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDBEREQwMDA0MUVCQ0JDQkUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQjc1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwREREMDAwNDFFQkNCQ0JFIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDE4NCBwbV9zdHJlYW1zMywgU3RyZWFtcworZXZlbnQ6MFgwQjgwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhEREREMDAwNEIwQThBOEFBIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEI4MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYRERERDAwMDRCMEE4QThBQSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBCODIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEREREQwMDA0QjBBOEE4QUEgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQjgzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhEREREMDAwNEIwQThBOEFBIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEI4NCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYRERERDAwMDRCMEE4QThBQSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBCODUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEREREQwMDA0QjBBOEE4QUEgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMTg1IHBtX2xhcngsIExBUlgKK2V2ZW50OjBYMEI5MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQ0MwQzAwMDE5NDk2MUU5NCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBCOTEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWENDMEMwMDAxOTQ5NjFFOTQgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQjkyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhDQzBDMDAwMTk0OTYxRTk0IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEI5MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQ0MwQzAwMDE5NDk2MUU5NCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBCOTQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWENDMEMwMDAxOTQ5NjFFOTQgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQjk1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhDQzBDMDAwMTk0OTYxRTk0IG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDE4NiBwbV9sZGYsIEZsb2F0aW5nIFBvaW50IGxvYWRzCitldmVudDowWDBCQTAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDBDQ0MwMDA0MUU4NDg0ODYgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQkExIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwQ0NDMDAwNDFFODQ4NDg2IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEJBMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMENDQzAwMDQxRTg0ODQ4NiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBCQTMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDBDQ0MwMDA0MUU4NDg0ODYgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQkE0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwQ0NDMDAwNDFFODQ4NDg2IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEJBNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMENDQzAwMDQxRTg0ODQ4NiBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxODcgcG1fbGR4LCBWZWN0b3IgTG9hZAorZXZlbnQ6MFgwQkIwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwQ0NDMDAwNDFFODg4ODhBIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEJCMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMENDQzAwMDQxRTg4ODg4QSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBCQjIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDBDQ0MwMDA0MUU4ODg4OEEgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQkIzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwQ0NDMDAwNDFFODg4ODhBIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEJCNCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMENDQzAwMDQxRTg4ODg4QSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBCQjUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDBDQ0MwMDA0MUU4ODg4OEEgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMTg4IHBtX2wyX2xkX3N0LCBMMiBsb2FkIGFuZCBzdG9yZSBldmVudHMKK2V2ZW50OjBYMEJDMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNjZGMDAwMDA4MDgyODAxRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBCQzEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDY2RjAwMDAwODA4MjgwMUUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQkMyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg2NkYwMDAwMDgwODI4MDFFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEJDMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNjZGMDAwMDA4MDgyODAxRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBCQzQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDY2RjAwMDAwODA4MjgwMUUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQkM1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg2NkYwMDAwMDgwODI4MDFFIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDE4OSBwbV9zdGN4LCBTVENYCitldmVudDowWDBCRDAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWENDQ0MwMDBDOTRBQzk4OUEgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQkQxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhDQ0NDMDAwQzk0QUM5ODlBIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEJEMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQ0NDQzAwMEM5NEFDOTg5QSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBCRDMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWENDQ0MwMDBDOTRBQzk4OUEgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQkQ0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhDQ0NDMDAwQzk0QUM5ODlBIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEJENSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYQ0NDQzAwMEM5NEFDOTg5QSBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxOTAgcG1fYnRhYywgQlRBQworZXZlbnQ6MFgwQkUwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg1NUNDMDAwMDhBODg5ODlBIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEJFMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNTVDQzAwMDA4QTg4OTg5QSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBCRTIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDU1Q0MwMDAwOEE4ODk4OUEgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQkUzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg1NUNDMDAwMDhBODg5ODlBIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEJFNCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNTVDQzAwMDA4QTg4OTg5QSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBCRTUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDU1Q0MwMDAwOEE4ODk4OUEgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMTkxIHBtX2JyX2JjLCBCcmFuY2ggQkMgZXZlbnRzCitldmVudDowWDBCRjAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQ0MDAwMDAwQjhCQTFFMDIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQkYxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0NDAwMDAwMEI4QkExRTAyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEJGMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDQwMDAwMDBCOEJBMUUwMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBCRjMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDQ0MDAwMDAwQjhCQTFFMDIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQkY0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg0NDAwMDAwMEI4QkExRTAyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEJGNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNDQwMDAwMDBCOEJBMUUwMiBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxOTIgcG1faW5zdF9pbWMsIGluc3QgaW1jIGV2ZW50cworZXZlbnQ6MFgwQzAwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMEYwRjIxNjAyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEMwMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDBGMEYyMTYwMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBDMDIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwRjBGMjE2MDIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQzAzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMEYwRjIxNjAyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEMwNCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDBGMEYyMTYwMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBDMDUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwRjBGMjE2MDIgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMTkzIHBtX2wyX21pc2MxLCBMMiBsb2FkL3N0b3JlIE1pc3MgZXZlbnRzCitldmVudDowWDBDMTAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDY2NjYwMDBDODA4MDgyODAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQzExIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg2NjY2MDAwQzgwODA4MjgwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEMxMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNjY2NjAwMEM4MDgwODI4MCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBDMTMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDY2NjYwMDBDODA4MDgyODAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQzE0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFg2NjY2MDAwQzgwODA4MjgwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEMxNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYNjY2NjAwMEM4MDgwODI4MCBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxOTQgcG1fbDJfbWlzYzIsIEwyIEV2ZW50cworZXZlbnQ6MFgwQzIwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDY2MDAwMDAyMUU4MDgwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEMyMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDA2NjAwMDAwMjFFODA4MCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBDMjIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwNjYwMDAwMDIxRTgwODAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQzIzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDY2MDAwMDAyMUU4MDgwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEMyNCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDA2NjAwMDAwMjFFODA4MCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBDMjUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwNjYwMDAwMDIxRTgwODAgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMTk1IHBtX2wyX21pc2MzLCBMMiBFdmVudHMKK2V2ZW50OjBYMEMzMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDA2MDgwMDAwMjFFODJGQSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBDMzEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwNjA4MDAwMDIxRTgyRkEgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQzMyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDYwODAwMDAyMUU4MkZBIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEMzMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDA2MDgwMDAwMjFFODJGQSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBDMzQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwNjA4MDAwMDIxRTgyRkEgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQzM1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDYwODAwMDAyMUU4MkZBIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDE5NiBwbV9sMl9taXNjNCwgTDIgRXZlbnRzCitldmVudDowWDBDNDAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwNjY2MDAwMDIxRTgyODIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQzQxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDY2NjAwMDAyMUU4MjgyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEM0MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDA2NjYwMDAwMjFFODI4MiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBDNDMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwNjY2MDAwMDIxRTgyODIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQzQ0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDY2NjAwMDAyMUU4MjgyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEM0NSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDA2NjYwMDAwMjFFODI4MiBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAxOTcgcG1fbDJfbWlzYzUsIEwyIEV2ZW50cworZXZlbnQ6MFgwQzUwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDYwODAwMDAyMUU4MEZBIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEM1MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDA2MDgwMDAwMjFFODBGQSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBDNTIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwNjA4MDAwMDIxRTgwRkEgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQzUzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDYwODAwMDAyMUU4MEZBIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEM1NCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDA2MDgwMDAwMjFFODBGQSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBDNTUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwNjA4MDAwMDIxRTgwRkEgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMTk4IHBtX2wyX21pc2M2LCBMMiBFdmVudHMKK2V2ZW50OjBYMEM2MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwNjYwMDAwMkY0MUU4MCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBDNjEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDY2MDAwMDJGNDFFODAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQzYyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDA2NjAwMDAyRjQxRTgwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEM2MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwNjYwMDAwMkY0MUU4MCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBDNjQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDY2MDAwMDJGNDFFODAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQzY1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDA2NjAwMDAyRjQxRTgwIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDE5OSBwbV9pZXJhdCwgSUVSQVQgRXZlbnRzCitldmVudDowWDBDNzAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDA0NDAwMDAwRjZCQ0JFMDIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQzcxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwNDQwMDAwMEY2QkNCRTAyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEM3MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDQ0MDAwMDBGNkJDQkUwMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBDNzMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDA0NDAwMDAwRjZCQ0JFMDIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQzc0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwNDQwMDAwMEY2QkNCRTAyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEM3NSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDQ0MDAwMDBGNkJDQkUwMiBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAyMDAgcG1fZGlzcF9jbGIsIERpc3BhdGNoIENMQiBFdmVudHMKK2V2ZW50OjBYMEM4MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMjIwMDAwMDA5MEE4MUUwMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBDODEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDIyMDAwMDAwOTBBODFFMDIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQzgyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgyMjAwMDAwMDkwQTgxRTAyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEM4MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMjIwMDAwMDA5MEE4MUUwMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBDODQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDIyMDAwMDAwOTBBODFFMDIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQzg1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgyMjAwMDAwMDkwQTgxRTAyIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDIwMSBwbV9kcHUsIERQVSBFdmVudHMKK2V2ZW50OjBYMEM5MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAxRTA2MDgwMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBDOTEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMUUwNjA4MDIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQzkyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDFFMDYwODAyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEM5MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAxRTA2MDgwMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBDOTQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMUUwNjA4MDIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQzk1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDFFMDYwODAyIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDIwMiBwbV9jcHVfdXRpbCwgQmFzaWMgQ1BVIHV0aWxpemF0aW9uCitldmVudDowWDBDQTAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMDhGNDFFRjQgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQ0ExIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDA4RjQxRUY0IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMENBMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAwOEY0MUVGNCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBDQTMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMDhGNDFFRjQgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQ0E0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDA4RjQxRUY0IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMENBNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAwOEY0MUVGNCBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAyMDMgcG1fb3ZlcmZsb3cxLCBPdmVyZmxvdyBldmVudHMKK2V2ZW50OjBYMENCMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAxMDEwMTAxMCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBDQjEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMTAxMDEwMTAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQ0IyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDEwMTAxMDEwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMENCMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAxMDEwMTAxMCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBDQjQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMTAxMDEwMTAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQ0I1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDEwMTAxMDEwIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDIwNCBwbV9vdmVyZmxvdzIsIE92ZXJmbG93IGV2ZW50cworZXZlbnQ6MFgwQ0MwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDI0MTAyNDEwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMENDMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAyNDEwMjQxMCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBDQzIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMjQxMDI0MTAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQ0MzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDI0MTAyNDEwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMENDNCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAyNDEwMjQxMCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBDQzUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMjQxMDI0MTAgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMjA1IHBtX3Jld2luZCwgUmV3aW5kIGV2ZW50cworZXZlbnQ6MFgwQ0QwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDIwRjQyMDAyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMENEMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAyMEY0MjAwMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBDRDIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMjBGNDIwMDIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQ0QzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDIwRjQyMDAyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMENENCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAyMEY0MjAwMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBDRDUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMjBGNDIwMDIgbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMjA2IHBtX3NhdmVkLCBTYXZlZCBFdmVudHMKK2V2ZW50OjBYMENFMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAyMkY0MjIwMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBDRTEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMjJGNDIyMDIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQ0UyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDIyRjQyMjAyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMENFMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAyMkY0MjIwMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBDRTQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMjJGNDIyMDIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQ0U1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDIyRjQyMjAyIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDIwNyBwbV90bGJpZSwgVExCSUUgRXZlbnRzCitldmVudDowWDBDRjAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDIyRDAwMDAwOEE5NkIyMDIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQ0YxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgyMkQwMDAwMDhBOTZCMjAyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMENGMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMjJEMDAwMDA4QTk2QjIwMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBDRjMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDIyRDAwMDAwOEE5NkIyMDIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwQ0Y0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgyMkQwMDAwMDhBOTZCMjAyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMENGNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMjJEMDAwMDA4QTk2QjIwMiBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAyMDggcG1faWRfbWlzc19lcmF0X2wxLCBJbnN0cnVjdGlvbi9EYXRhIG1pc3MgZnJvbSBFUkFUL0wxIGNhY2hlCitldmVudDowWDBEMDAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwRjZGQ0YwRjAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwRDAxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMEY2RkNGMEYwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEQwMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDBGNkZDRjBGMCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBEMDMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwRjZGQ0YwRjAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwRDA0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMEY2RkNGMEYwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEQwNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDBGNkZDRjBGMCBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAyMDkgcG1faWRfbWlzc19lcmF0X3RsYWIsIEluc3RydWN0aW9uL0RhdGEgbWlzcyBmcm9tIEVSQVQvVExCCitldmVudDowWDBEMTAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMUVGNkZDRkMgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwRDExIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDFFRjZGQ0ZDIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEQxMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAxRUY2RkNGQyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBEMTMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMUVGNkZDRkMgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwRDE0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDFFRjZGQ0ZDIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEQxNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAxRUY2RkNGQyBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAyMTAgcG1fY29tcGF0X3V0aWxpemF0aW9uMSwgQmFzaWMgQ1BVIHV0aWxpemF0aW9uCitldmVudDowWDBEMjAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwRkFGNDFFRjQgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwRDIxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMEZBRjQxRUY0IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEQyMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDBGQUY0MUVGNCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBEMjMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwRkFGNDFFRjQgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwRDI0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMEZBRjQxRUY0IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEQyNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDBGQUY0MUVGNCBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAyMTEgcG1fY29tcGF0X3V0aWxpemF0aW9uMiwgQ1BJIGFuZCB1dGlsaXphdGlvbiBkYXRhCitldmVudDowWDBEMzAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwRjRGNDFFRkEgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwRDMxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMEY0RjQxRUZBIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEQzMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDBGNEY0MUVGQSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBEMzMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwRjRGNDFFRkEgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwRDM0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMEY0RjQxRUZBIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEQzNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDBGNEY0MUVGQSBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAyMTIgcG1fY29tcGF0X2NwaV8xcGx1c19wcGMsIE1pc2MgQ1BJIGFuZCB1dGlsaXphdGlvbiBkYXRhCitldmVudDowWDBENDAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwRjJGNEYyRjIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwRDQxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMEYyRjRGMkYyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEQ0MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDBGMkY0RjJGMiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBENDMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwRjJGNEYyRjIgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwRDQ0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMEYyRjRGMkYyIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEQ0NSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDBGMkY0RjJGMiBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAyMTMgcG1fY29tcGF0X2wxX2RjYWNoZV9sb2FkX3N0b3JlX21pc3MsIEwxIEQtQ2FjaGUgbG9hZC9zdG9yZSBtaXNzCitldmVudDowWDBENTAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMDJGMEYwRjAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwRDUxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDAyRjBGMEYwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEQ1MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAwMkYwRjBGMCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBENTMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMDJGMEYwRjAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwRDU0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDAyRjBGMEYwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEQ1NSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAwMkYwRjBGMCBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAyMTQgcG1fY29tcGF0X2wxX2NhY2hlX2xvYWQsIEwxIENhY2hlIGxvYWRzCitldmVudDowWDBENjAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMDJGRUY2RjAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwRDYxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDAyRkVGNkYwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEQ2MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAwMkZFRjZGMCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBENjMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMDJGRUY2RjAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwRDY0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDAyRkVGNkYwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEQ2NSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAwMkZFRjZGMCBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAyMTUgcG1fY29tcGF0X2luc3RydWN0aW9uX2RpcmVjdG9yeSwgSW5zdHJ1Y3Rpb24gRGlyZWN0b3J5CitldmVudDowWDBENzAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwRjZGQzAyRkMgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwRDcxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMEY2RkMwMkZDIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEQ3MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDBGNkZDMDJGQyBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBENzMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwRjZGQzAyRkMgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwRDc0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMEY2RkMwMkZDIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEQ3NSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDBGNkZDMDJGQyBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAyMTYgcG1fY29tcGF0X3N1c3BlbmQsIFN1c3BlbmQgRXZlbnRzCitldmVudDowWDBEODAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMDAwMDAwMDAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwRDgxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDAwMDAwMDAwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEQ4MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAwMDAwMDAwMCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBEODMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMDAwMDAwMDAgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwRDg0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDAwMDAwMDAwIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEQ4NSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAwMDAwMDAwMCBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAyMTcgcG1fY29tcGF0X21pc2NfZXZlbnRzMSwgTWlzYyBFdmVudHMKK2V2ZW50OjBYMEQ5MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAwMkY4RjgxRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBEOTEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMDJGOEY4MUUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwRDkyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDAyRjhGODFFIG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMEQ5MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAwMkY4RjgxRSBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBEOTQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMDJGOEY4MUUgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwRDk1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDAyRjhGODFFIG1tY3JhOjBYMDAwMDAwMDAKKworI0dyb3VwIDIxOCBwbV9jb21wYXRfbWlzY19ldmVudHMyLCBNaXNjIEV2ZW50cworZXZlbnQ6MFgwREEwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMEYwRjJGNEY4IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMERBMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDBGMEYyRjRGOCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBEQTIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwRjBGMkY0RjggbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwREEzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMEYwRjJGNEY4IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMERBNCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDBGMEYyRjRGOCBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBEQTUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwRjBGMkY0RjggbW1jcmE6MFgwMDAwMDAwMAorCisjR3JvdXAgMjE5IHBtX2NvbXBhdF9taXNjX2V2ZW50czMsIE1pc2MgRXZlbnRzCitldmVudDowWDBEQjAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwRjhGMjFFRjYgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwREIxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMEY4RjIxRUY2IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMERCMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDBGOEYyMUVGNiBtbWNyYTowWDAwMDAwMDAwCitldmVudDowWDBEQjMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwRjhGMjFFRjYgbW1jcmE6MFgwMDAwMDAwMAorZXZlbnQ6MFgwREI0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMEY4RjIxRUY2IG1tY3JhOjBYMDAwMDAwMDAKK2V2ZW50OjBYMERCNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDBGOEYyMUVGNiBtbWNyYTowWDAwMDAwMDAwCisKKyNHcm91cCAyMjAgcG1fbXJrX2JyLCBNYXJrZWQgQnJhbmNoIGV2ZW50cworZXZlbnQ6MFgwREMwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDM2MzYzNjAyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMERDMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAzNjM2MzYwMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDBEQzIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMzYzNjM2MDIgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwREMzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDM2MzYzNjAyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMERDNCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAzNjM2MzYwMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDBEQzUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMzYzNjM2MDIgbW1jcmE6MFgwMDAwMDAwMQorCisjR3JvdXAgMjIxIHBtX21ya19kc291cmNlMSwgTWFya2VkIGRhdGEgc291cmNlcworZXZlbnQ6MFgwREQwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhEMEQwMDAwMDRBMkU0NjI0IG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMEREMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYRDBEMDAwMDA0QTJFNDYyNCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDBERDIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEQwRDAwMDAwNEEyRTQ2MjQgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwREQzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhEMEQwMDAwMDRBMkU0NjI0IG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMERENCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYRDBEMDAwMDA0QTJFNDYyNCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDBERDUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEQwRDAwMDAwNEEyRTQ2MjQgbW1jcmE6MFgwMDAwMDAwMQorCisjR3JvdXAgMjIyIHBtX21ya19kc291cmNlMiwgTWFya2VkIGRhdGEgc291cmNlcworZXZlbnQ6MFgwREUwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhEMEQwMDAwMDQ4MkM0QTIwIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMERFMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYRDBEMDAwMDA0ODJDNEEyMCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDBERTIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEQwRDAwMDAwNDgyQzRBMjAgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwREUzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhEMEQwMDAwMDQ4MkM0QTIwIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMERFNCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYRDBEMDAwMDA0ODJDNEEyMCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDBERTUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEQwRDAwMDAwNDgyQzRBMjAgbW1jcmE6MFgwMDAwMDAwMQorCisjR3JvdXAgMjIzIHBtX21ya19kc291cmNlMywgTWFya2VkIGRhdGEgc291cmNlcworZXZlbnQ6MFgwREYwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhEMEQwMDAwMDQ0MjQ0RTI2IG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMERGMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYRDBEMDAwMDA0NDI0NEUyNiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDBERjIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEQwRDAwMDAwNDQyNDRFMjYgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwREYzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhEMEQwMDAwMDQ0MjQ0RTI2IG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMERGNCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYRDBEMDAwMDA0NDI0NEUyNiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDBERjUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEQwRDAwMDAwNDQyNDRFMjYgbW1jcmE6MFgwMDAwMDAwMQorCisjR3JvdXAgMjI0IHBtX21ya19kc291cmNlNCwgTWFya2VkIGRhdGEgc291cmNlcworZXZlbnQ6MFgwRTAwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhEMENDMDAwMDQwMjA0MjQyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMEUwMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYRDBDQzAwMDA0MDIwNDI0MiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDBFMDIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEQwQ0MwMDAwNDAyMDQyNDIgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwRTAzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhEMENDMDAwMDQwMjA0MjQyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMEUwNCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYRDBDQzAwMDA0MDIwNDI0MiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDBFMDUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEQwQ0MwMDAwNDAyMDQyNDIgbW1jcmE6MFgwMDAwMDAwMQorCisjR3JvdXAgMjI1IHBtX21ya19kc291cmNlNSwgTWFya2VkIGRhdGEgc291cmNlcworZXZlbnQ6MFgwRTEwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhEMEQwMDAwMDQyMkE0NDI4IG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMEUxMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYRDBEMDAwMDA0MjJBNDQyOCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDBFMTIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEQwRDAwMDAwNDIyQTQ0MjggbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwRTEzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhEMEQwMDAwMDQyMkE0NDI4IG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMEUxNCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYRDBEMDAwMDA0MjJBNDQyOCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDBFMTUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEQwRDAwMDAwNDIyQTQ0MjggbW1jcmE6MFgwMDAwMDAwMQorCisjR3JvdXAgMjI2IHBtX21ya19kc291cmNlNiwgTWFya2VkIGRhdGEgc291cmNlcworZXZlbnQ6MFgwRTIwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhEMEQwMDAwMDRDMjg0MjJDIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMEUyMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYRDBEMDAwMDA0QzI4NDIyQyBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDBFMjIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEQwRDAwMDAwNEMyODQyMkMgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwRTIzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhEMEQwMDAwMDRDMjg0MjJDIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMEUyNCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYRDBEMDAwMDA0QzI4NDIyQyBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDBFMjUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEQwRDAwMDAwNEMyODQyMkMgbW1jcmE6MFgwMDAwMDAwMQorCisjR3JvdXAgMjI3IHBtX21ya19kc291cmNlNywgTWFya2VkIGRhdGEgc291cmNlcworZXZlbnQ6MFgwRTMwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhEMDBEMDAwMDRFMjYzMDQ4IG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMEUzMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYRDAwRDAwMDA0RTI2MzA0OCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDBFMzIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEQwMEQwMDAwNEUyNjMwNDggbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwRTMzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhEMDBEMDAwMDRFMjYzMDQ4IG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMEUzNCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYRDAwRDAwMDA0RTI2MzA0OCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDBFMzUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEQwMEQwMDAwNEUyNjMwNDggbW1jcmE6MFgwMDAwMDAwMQorCisjR3JvdXAgMjI4IHBtX21ya19kc291cmNlOCwgTWFya2VkIGRhdGEgc291cmNlcworZXZlbnQ6MFgwRTQwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwREQwMDAwMDNGNDg0QzJBIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMEU0MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMEREMDAwMDAzRjQ4NEMyQSBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDBFNDIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDBERDAwMDAwM0Y0ODRDMkEgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwRTQzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwREQwMDAwMDNGNDg0QzJBIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMEU0NCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMEREMDAwMDAzRjQ4NEMyQSBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDBFNDUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDBERDAwMDAwM0Y0ODRDMkEgbW1jcmE6MFgwMDAwMDAwMQorCisjR3JvdXAgMjI5IHBtX21ya19sc3VfZmx1c2gxLCBNYXJrZWQgTFNVIEZsdXNoCitldmVudDowWDBFNTAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEREMDAwMDAwODQ4NjAyMUUgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwRTUxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhERDAwMDAwMDg0ODYwMjFFIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMEU1MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYREQwMDAwMDA4NDg2MDIxRSBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDBFNTMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEREMDAwMDAwODQ4NjAyMUUgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwRTU0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhERDAwMDAwMDg0ODYwMjFFIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMEU1NSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYREQwMDAwMDA4NDg2MDIxRSBtbWNyYTowWDAwMDAwMDAxCisKKyNHcm91cCAyMzAgcG1fbXJrX2xzdV9mbHVzaDIsIE1hcmtlZCBMU1UgRmx1c2gKK2V2ZW50OjBYMEU2MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDBERDAwMDAwMjFFODg4QSBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDBFNjEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwREQwMDAwMDIxRTg4OEEgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwRTYyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMEREMDAwMDAyMUU4ODhBIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMEU2MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDBERDAwMDAwMjFFODg4QSBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDBFNjQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwREQwMDAwMDIxRTg4OEEgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwRTY1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMEREMDAwMDAyMUU4ODhBIG1tY3JhOjBYMDAwMDAwMDEKKworI0dyb3VwIDIzMSBwbV9tcmtfcmVqZWN0cywgTWFya2VkIHJlamVjdHMKK2V2ZW50OjBYMEU3MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYREQwMDAwMDA4MjhDMDI2NCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDBFNzEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEREMDAwMDAwODI4QzAyNjQgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwRTcyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhERDAwMDAwMDgyOEMwMjY0IG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMEU3MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYREQwMDAwMDA4MjhDMDI2NCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDBFNzQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEREMDAwMDAwODI4QzAyNjQgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwRTc1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhERDAwMDAwMDgyOEMwMjY0IG1tY3JhOjBYMDAwMDAwMDEKKworI0dyb3VwIDIzMiBwbV9tcmtfaW5zdCwgTWFya2VkIGluc3RydWN0aW9uIGV2ZW50cworZXZlbnQ6MFgwRTgwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDMyMzAzMDAyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMEU4MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAzMjMwMzAwMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDBFODIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMzIzMDMwMDIgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwRTgzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDMyMzAzMDAyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMEU4NCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAzMjMwMzAwMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDBFODUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMzIzMDMwMDIgbW1jcmE6MFgwMDAwMDAwMQorCisjR3JvdXAgMjMzIHBtX21ya19zdCwgTWFya2VkIHN0b3JlcyBldmVudHMKK2V2ZW50OjBYMEU5MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAzNDM0MzQwMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDBFOTEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMzQzNDM0MDIgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwRTkyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDM0MzQzNDAyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMEU5MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAzNDM0MzQwMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDBFOTQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMzQzNDM0MDIgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwRTk1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDM0MzQzNDAyIG1tY3JhOjBYMDAwMDAwMDEKKworI0dyb3VwIDIzNCBwbV9tcmtfZHRsYl9taXNzMSwgTWFya2VkIERhdGEgVExCIE1pc3MKK2V2ZW50OjBYMEVBMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMERERDAwMDAwMjVFNUU1RSBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDBFQTEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDBEREQwMDAwMDI1RTVFNUUgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwRUEyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwREREMDAwMDAyNUU1RTVFIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMEVBMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMERERDAwMDAwMjVFNUU1RSBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDBFQTQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDBEREQwMDAwMDI1RTVFNUUgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwRUE1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwREREMDAwMDAyNUU1RTVFIG1tY3JhOjBYMDAwMDAwMDEKKworI0dyb3VwIDIzNSBwbV9tcmtfZHRsYl9taXNzMiwgTWFya2VkIERhdGEgVExCIE1pc3MKK2V2ZW50OjBYMEVCMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYREREMDAwMDA1RTVFNUUwMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDBFQjEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWERERDAwMDAwNUU1RTVFMDIgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwRUIyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhEREQwMDAwMDVFNUU1RTAyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMEVCMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYREREMDAwMDA1RTVFNUUwMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDBFQjQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWERERDAwMDAwNUU1RTVFMDIgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwRUI1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhEREQwMDAwMDVFNUU1RTAyIG1tY3JhOjBYMDAwMDAwMDEKKworI0dyb3VwIDIzNiBwbV9tcmtfZGVyYXRfbWlzczEsIE1hcmtlZCBERVJBVCBNaXNzIGV2ZW50cworZXZlbnQ6MFgwRUMwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwREREMDAwMDAyNUM1QzVDIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMEVDMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMERERDAwMDAwMjVDNUM1QyBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDBFQzIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDBEREQwMDAwMDI1QzVDNUMgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwRUMzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwREREMDAwMDAyNUM1QzVDIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMEVDNCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMERERDAwMDAwMjVDNUM1QyBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDBFQzUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDBEREQwMDAwMDI1QzVDNUMgbW1jcmE6MFgwMDAwMDAwMQorCisjR3JvdXAgMjM3IHBtX21ya19kZXJhdF9taXNzMiwgTWFya2VkIERFUkFUIE1pc3MgZXZlbnRzCitldmVudDowWDBFRDAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWERERDAwMDAwNUM1QzVDMDIgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwRUQxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhEREQwMDAwMDVDNUM1QzAyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMEVEMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYREREMDAwMDA1QzVDNUMwMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDBFRDMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWERERDAwMDAwNUM1QzVDMDIgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwRUQ0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhEREQwMDAwMDVDNUM1QzAyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMEVENSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYREREMDAwMDA1QzVDNUMwMiBtbWNyYTowWDAwMDAwMDAxCisKKyNHcm91cCAyMzggcG1fbXJrX21pc2NfbWlzcywgbWFya2VkIE1pc3MgRXZlbnRzCitldmVudDowWDBFRTAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwRDAwMDAwM0UwMjVBM0UgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwRUUxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMEQwMDAwMDNFMDI1QTNFIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMEVFMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDBEMDAwMDAzRTAyNUEzRSBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDBFRTMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwRDAwMDAwM0UwMjVBM0UgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwRUU0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMEQwMDAwMDNFMDI1QTNFIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMEVFNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDBEMDAwMDAzRTAyNUEzRSBtbWNyYTowWDAwMDAwMDAxCisKKyNHcm91cCAyMzkgcG1fbXJrX3B0ZWcxLCBNYXJrZWQgUFRFRworZXZlbnQ6MFgwRUYwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwREREMDAwMDAyNTI1NjU2IG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMEVGMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMERERDAwMDAwMjUyNTY1NiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDBFRjIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDBEREQwMDAwMDI1MjU2NTYgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwRUYzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwREREMDAwMDAyNTI1NjU2IG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMEVGNCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMERERDAwMDAwMjUyNTY1NiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDBFRjUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDBEREQwMDAwMDI1MjU2NTYgbW1jcmE6MFgwMDAwMDAwMQorCisjR3JvdXAgMjQwIHBtX21ya19wdGVnMiwgTWFya2VkIFBURUcKK2V2ZW50OjBYMEYwMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYREREMDAwMDA1MDU0NTIwMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDBGMDEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWERERDAwMDAwNTA1NDUyMDIgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwRjAyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhEREQwMDAwMDUwNTQ1MjAyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMEYwMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYREREMDAwMDA1MDU0NTIwMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDBGMDQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWERERDAwMDAwNTA1NDUyMDIgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwRjA1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhEREQwMDAwMDUwNTQ1MjAyIG1tY3JhOjBYMDAwMDAwMDEKKworI0dyb3VwIDI0MSBwbV9tcmtfcHRlZzMsIE1hcmtlZCBQVEVHCitldmVudDowWDBGMTAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDBEREQwMDAwMDI1NjU2NTQgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwRjExIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwREREMDAwMDAyNTY1NjU0IG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMEYxMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMERERDAwMDAwMjU2NTY1NCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDBGMTMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDBEREQwMDAwMDI1NjU2NTQgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwRjE0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwREREMDAwMDAyNTY1NjU0IG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMEYxNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMERERDAwMDAwMjU2NTY1NCBtbWNyYTowWDAwMDAwMDAxCisKKyNHcm91cCAyNDIgcG1fbXJrX3B0ZWc0LCBNYXJrZWQgUFRFRworZXZlbnQ6MFgwRjIwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhERDBEMDAwMDU0NTAwMjU4IG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMEYyMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYREQwRDAwMDA1NDUwMDI1OCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDBGMjIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEREMEQwMDAwNTQ1MDAyNTggbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwRjIzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhERDBEMDAwMDU0NTAwMjU4IG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMEYyNCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYREQwRDAwMDA1NDUwMDI1OCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDBGMjUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEREMEQwMDAwNTQ1MDAyNTggbW1jcmE6MFgwMDAwMDAwMQorCisjR3JvdXAgMjQzIHBtX21ya19wdGVnNSwgTWFya2VkIFBURUcKK2V2ZW50OjBYMEYzMCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYREQwRDAwMDA1MjU4MDI1MiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDBGMzEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEREMEQwMDAwNTI1ODAyNTIgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwRjMyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhERDBEMDAwMDUyNTgwMjUyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMEYzMyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYREQwRDAwMDA1MjU4MDI1MiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDBGMzQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEREMEQwMDAwNTI1ODAyNTIgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwRjM1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhERDBEMDAwMDUyNTgwMjUyIG1tY3JhOjBYMDAwMDAwMDEKKworI0dyb3VwIDI0NCBwbV9tcmtfbWlzYzEsIE1hcmtlZCBtaXNjIGV2ZW50cworZXZlbnQ6MFgwRjQwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhEMDAwMDAwMDhFMDIzQTM0IG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMEY0MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYRDAwMDAwMDA4RTAyM0EzNCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDBGNDIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEQwMDAwMDAwOEUwMjNBMzQgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwRjQzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhEMDAwMDAwMDhFMDIzQTM0IG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMEY0NCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYRDAwMDAwMDA4RTAyM0EzNCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDBGNDUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEQwMDAwMDAwOEUwMjNBMzQgbW1jcmE6MFgwMDAwMDAwMQorCisjR3JvdXAgMjQ1IHBtX21ya19taXNjMiwgTWFya2VkIG1pc2MgZXZlbnRzCitldmVudDowWDBGNTAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMDIzODNBMzIgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwRjUxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDAyMzgzQTMyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMEY1MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAwMjM4M0EzMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDBGNTMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMDIzODNBMzIgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwRjU0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDAyMzgzQTMyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMEY1NSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAwMjM4M0EzMiBtbWNyYTowWDAwMDAwMDAxCisKKyNHcm91cCAyNDYgcG1fbXJrX21pc2MzLCBNYXJrZWQgbWlzYyBldmVudHMKK2V2ZW50OjBYMEY2MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDBEMDAwMDAwMjNBODAzMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDBGNjEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwRDAwMDAwMDIzQTgwMzIgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwRjYyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMEQwMDAwMDAyM0E4MDMyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMEY2MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDBEMDAwMDAwMjNBODAzMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDBGNjQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwRDAwMDAwMDIzQTgwMzIgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwRjY1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMEQwMDAwMDAyM0E4MDMyIG1tY3JhOjBYMDAwMDAwMDEKKworI0dyb3VwIDI0NyBwbV9tcmtfbWlzYzQsIE1hcmtlZCBtaXNjIGV2ZW50cworZXZlbnQ6MFgwRjcwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDNDMDIzMjM4IG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMEY3MSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAzQzAyMzIzOCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDBGNzIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwM0MwMjMyMzggbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwRjczIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDNDMDIzMjM4IG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMEY3NCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAzQzAyMzIzOCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDBGNzUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwM0MwMjMyMzggbW1jcmE6MFgwMDAwMDAwMQorCisjR3JvdXAgMjQ4IHBtX21ya19taXNjNSwgTWFya2VkIG1pc2MgZXZlbnRzCitldmVudDowWDBGODAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwM0QzMjNGMDIgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwRjgxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDNEMzIzRjAyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMEY4MiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAzRDMyM0YwMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDBGODMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwM0QzMjNGMDIgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwRjg0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDNEMzIzRjAyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMEY4NSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAzRDMyM0YwMiBtbWNyYTowWDAwMDAwMDAxCisKKyNHcm91cCAyNDkgcG1fbXJrX21pc2M2LCBNYXJrZWQgbWlzYyBldmVudHMKK2V2ZW50OjBYMEY5MCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAzMEY0MDIzMCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDBGOTEgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMzBGNDAyMzAgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwRjkyIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDMwRjQwMjMwIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMEY5MyBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAzMEY0MDIzMCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDBGOTQgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMzBGNDAyMzAgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwRjk1IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDMwRjQwMjMwIG1tY3JhOjBYMDAwMDAwMDEKKworI0dyb3VwIDI1MCBwbV9tcmtfbWlzYzcsIE1hcmtlZCBtaXNjIGV2ZW50cworZXZlbnQ6MFgwRkEwIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhEMDAwMDAwMDgyMDI2NDY0IG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMEZBMSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYRDAwMDAwMDA4MjAyNjQ2NCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDBGQTIgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEQwMDAwMDAwODIwMjY0NjQgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwRkEzIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFhEMDAwMDAwMDgyMDI2NDY0IG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMEZBNCBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYRDAwMDAwMDA4MjAyNjQ2NCBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDBGQTUgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWEQwMDAwMDAwODIwMjY0NjQgbW1jcmE6MFgwMDAwMDAwMQorCisjR3JvdXAgMjUxIHBtX21ya19taXNjOCwgTWFya2VkIG1pc2MgZXZlbnRzCitldmVudDowWDBGQjAgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMUUxRTAyMzIgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwRkIxIG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDFFMUUwMjMyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMEZCMiBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAxRTFFMDIzMiBtbWNyYTowWDAwMDAwMDAxCitldmVudDowWDBGQjMgbW1jcjA6MFgwMDAwMDAwMCBtbWNyMTowWDAwMDAwMDAwMUUxRTAyMzIgbW1jcmE6MFgwMDAwMDAwMQorZXZlbnQ6MFgwRkI0IG1tY3IwOjBYMDAwMDAwMDAgbW1jcjE6MFgwMDAwMDAwMDFFMUUwMjMyIG1tY3JhOjBYMDAwMDAwMDEKK2V2ZW50OjBYMEZCNSBtbWNyMDowWDAwMDAwMDAwIG1tY3IxOjBYMDAwMDAwMDAxRTFFMDIzMiBtbWNyYTowWDAwMDAwMDAxCmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9ldmVudHMvcHBjNjQvcG93ZXI3L2V2ZW50cyBiL29wcm9maWxlLTAuOS43L2V2ZW50cy9wcGM2NC9wb3dlcjcvZXZlbnRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4MGEwZmQKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9ldmVudHMvcHBjNjQvcG93ZXI3L2V2ZW50cwpAQCAtMCwwICsxLDIwMjcgQEAKKyNQUEM2NCBQT1dFUjcgZXZlbnRzCisjCisjIENvcHlyaWdodCBPUHJvZmlsZSBhdXRob3JzCisjIENvcHlyaWdodCAoYykgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcywgMjAwOS4KKyMgQ29udHJpYnV0ZWQgYnkgTWF5bmFyZCBKb2huc29uIDxtYXluYXJkakB1cy5pYm0uY29tPi4KKyMKKyMKKyMgIE9ubHkgZXZlbnRzIHdpdGhpbiB0aGUgc2FtZSBncm91cCBjYW4gYmUgc2VsZWN0ZWQgc2ltdWx0YW5lb3VzbHkuCisjICBFYWNoIGV2ZW50IGlzIGdpdmVuIGEgdW5pcXVlIGV2ZW50IG51bWJlci4gIFRoZSBldmVudCBudW1iZXIgaXMgdXNlZCBieSB0aGUKKyMgIE9Qcm9maWxlIGNvZGUgdG8gcmVzb2x2ZSBldmVudCBuYW1lcyBmb3IgdGhlIHBvc3QtcHJvY2Vzc2luZy4gIFRoaXMgaXMgZG9uZQorIyAgdG8gcHJlc2VydmUgY29tcGF0aWJpbGl0eSB3aXRoIHRoZSByZXN0IG9mIHRoZSBPUHJvZmlsZSBjb2RlLiAgVGhlIGV2ZW50CisjICBudW1iZXJzIGFyZSBmb3JtYXR0ZWQgYXMgZm9sbG93czogPGdyb3VwX251bT5jb25jYXQoPGNvdW50ZXIgZm9yIHRoZSBldmVudD4pLgorCisjR3JvdXAgRGVmYXVsdAorZXZlbnQ6MFgwMDEgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpDWUNMRVMgOiBQcm9jZXNzb3IgQ3ljbGVzCisKKyNHcm91cCAwIHdpdGggcmFuZG9tIHNhbXBsaW5nCitldmVudDowWDAwMiBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOkNZQ0xFU19STkRfU01QTCA6IFByb2Nlc3NvciBDeWNsZXMgd2l0aCByYW5kb20gc2FtcGxpbmcKKworCisjR3JvdXAgMSBwbV91dGlsaXphdGlvbiwgQ1BJIGFuZCB1dGlsaXphdGlvbiBkYXRhCitldmVudDowWDAwMTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQMSA6IChHcm91cCAxIHBtX3V0aWxpemF0aW9uKSBQcm9jZXNzb3IgQ3ljbGVzCitldmVudDowWDAwMTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDEgOiAoR3JvdXAgMSBwbV91dGlsaXphdGlvbikgUHJvY2Vzc29yIEN5Y2xlcyBnYXRlZCBieSB0aGUgcnVuIGxhdGNoLiAgT3BlcmF0aW5nIHN5c3RlbXMgdXNlIHRoZSBydW4gbGF0Y2ggdG8gaW5kaWNhdGUgd2hlbiB0aGV5IGFyZSBkb2luZyB1c2VmdWwgd29yay4gIFRoZSBydW4gbGF0Y2ggaXMgdHlwaWNhbGx5IGNsZWFyZWQgaW4gdGhlIE9TIGlkbGUgbG9vcC4gIEdhdGluZyBieSB0aGUgcnVuIGxhdGNoIGZpbHRlcnMgb3V0IHRoZSBpZGxlIGxvb3AuCitldmVudDowWDAwMTIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lOU1RfRElTUF9HUlAxIDogKEdyb3VwIDEgcG1fdXRpbGl6YXRpb24pIE51bWJlciBvZiBQb3dlclBDIGluc3RydWN0aW9ucyBzdWNjZXNzZnVsbHkgZGlzcGF0Y2hlZC4KK2V2ZW50OjBYMDAxMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAxIDogKEdyb3VwIDEgcG1fdXRpbGl6YXRpb24pIE51bWJlciBvZiBQb3dlclBDIEluc3RydWN0aW9ucyB0aGF0IGNvbXBsZXRlZC4KK2V2ZW50OjBYMDAxNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlAxIDogKEdyb3VwIDEgcG1fdXRpbGl6YXRpb24pIE51bWJlciBvZiBydW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZC4KK2V2ZW50OjBYMDAxNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQMSA6IChHcm91cCAxIHBtX3V0aWxpemF0aW9uKSBQcm9jZXNzb3IgQ3ljbGVzIGdhdGVkIGJ5IHRoZSBydW4gbGF0Y2guICBPcGVyYXRpbmcgc3lzdGVtcyB1c2UgdGhlIHJ1biBsYXRjaCB0byBpbmRpY2F0ZSB3aGVuIHRoZXkgYXJlIGRvaW5nIHVzZWZ1bCB3b3JrLiAgVGhlIHJ1biBsYXRjaCBpcyB0eXBpY2FsbHkgY2xlYXJlZCBpbiB0aGUgT1MgaWRsZSBsb29wLiAgR2F0aW5nIGJ5IHRoZSBydW4gbGF0Y2ggZmlsdGVycyBvdXQgdGhlIGlkbGUgbG9vcC4KKworI0dyb3VwIDIgcG1fYnJhbmNoMSwgQnJhbmNoIG9wZXJhdGlvbnMKK2V2ZW50OjBYMDAyMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fQlJfUFJFRF9DQ0FDSEVfR1JQMiA6IChHcm91cCAyIHBtX2JyYW5jaDEpIFRoZSBjb3VudCB2YWx1ZSBvZiBhIEJyYW5jaCBhbmQgQ291bnQgaW5zdHJ1Y3Rpb24gd2FzIHByZWRpY3RlZAorZXZlbnQ6MFgwMDIxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9CUl9QUkVEX0xTVEFDS19HUlAyIDogKEdyb3VwIDIgcG1fYnJhbmNoMSkgVGhlIHRhcmdldCBhZGRyZXNzIG9mIGEgQnJhbmNoIHRvIExpbmsgaW5zdHJ1Y3Rpb24gd2FzIHByZWRpY3RlZCBieSB0aGUgbGluayBzdGFjay4KK2V2ZW50OjBYMDAyMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fQlJfTVBSRURfQ0NBQ0hFX0dSUDIgOiAoR3JvdXAgMiBwbV9icmFuY2gxKSBBIGJyYW5jaCBpbnN0cnVjdGlvbiB0YXJnZXQgd2FzIGluY29ycmVjdGx5IHByZWRpY3RlZCBieSB0aGUgY2NvdW50IGNhY2hlLiBUaGlzIHdpbGwgcmVzdWx0IGluIGEgYnJhbmNoIHJlZGlyZWN0IGZsdXNoIGlmIG5vdCBvdmVyZmlkZGVuIGJ5IGEgZmx1c2ggb2YgYW4gb2xkZXIgaW5zdHJ1Y3Rpb24uCitldmVudDowWDAwMjMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0JSX01QUkVEX1RBX0dSUDIgOiAoR3JvdXAgMiBwbV9icmFuY2gxKSBBIGJyYW5jaCBpbnN0cnVjdGlvbiB0YXJnZXQgd2FzIGluY29ycmVjdGx5IHByZWRpY3RlZC4gVGhpcyB3aWxsIHJlc3VsdCBpbiBhIGJyYW5jaCBtaXNwcmVkaWN0IGZsdXNoIHVubGVzcyBhIGZsdXNoIGlzIGRldGVjdGVkIGZyb20gYW4gb2xkZXIgaW5zdHJ1Y3Rpb24uCitldmVudDowWDAwMjQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQMiA6IChHcm91cCAyIHBtX2JyYW5jaDEpIE51bWJlciBvZiBydW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZC4KK2V2ZW50OjBYMDAyNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQMiA6IChHcm91cCAyIHBtX2JyYW5jaDEpIFByb2Nlc3NvciBDeWNsZXMgZ2F0ZWQgYnkgdGhlIHJ1biBsYXRjaC4gIE9wZXJhdGluZyBzeXN0ZW1zIHVzZSB0aGUgcnVuIGxhdGNoIHRvIGluZGljYXRlIHdoZW4gdGhleSBhcmUgZG9pbmcgdXNlZnVsIHdvcmsuICBUaGUgcnVuIGxhdGNoIGlzIHR5cGljYWxseSBjbGVhcmVkIGluIHRoZSBPUyBpZGxlIGxvb3AuICBHYXRpbmcgYnkgdGhlIHJ1biBsYXRjaCBmaWx0ZXJzIG91dCB0aGUgaWRsZSBsb29wLgorCisjR3JvdXAgMyBwbV9icmFuY2gyLCBCcmFuY2ggb3BlcmF0aW9ucworZXZlbnQ6MFgwMDMwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9CUl9QUkVEX0dSUDMgOiAoR3JvdXAgMyBwbV9icmFuY2gyKSBBIGJyYW5jaCBwcmVkaWN0aW9uIHdhcyBtYWRlLiBUaGlzIGNvdWxkIGhhdmUgYmVlbiBhIHRhcmdldCBwcmVkaWN0aW9uLCBhIGNvbmRpdGlvbiBwcmVkaWN0aW9uLCBvciBib3RoCitldmVudDowWDAwMzEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0JSX1BSRURfQ1JfR1JQMyA6IChHcm91cCAzIHBtX2JyYW5jaDIpIEEgY29uZGl0aW9uYWwgYnJhbmNoIGluc3RydWN0aW9uIHdhcyBwcmVkaWN0ZWQgYXMgdGFrZW4gb3Igbm90IHRha2VuLgorZXZlbnQ6MFgwMDMyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9CUl9QUkVEX0NDQUNIRV9HUlAzIDogKEdyb3VwIDMgcG1fYnJhbmNoMikgVGhlIGNvdW50IHZhbHVlIG9mIGEgQnJhbmNoIGFuZCBDb3VudCBpbnN0cnVjdGlvbiB3YXMgcHJlZGljdGVkCitldmVudDowWDAwMzMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0JSX1BSRURfTFNUQUNLX0dSUDMgOiAoR3JvdXAgMyBwbV9icmFuY2gyKSBUaGUgdGFyZ2V0IGFkZHJlc3Mgb2YgYSBCcmFuY2ggdG8gTGluayBpbnN0cnVjdGlvbiB3YXMgcHJlZGljdGVkIGJ5IHRoZSBsaW5rIHN0YWNrLgorZXZlbnQ6MFgwMDM0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDMgOiAoR3JvdXAgMyBwbV9icmFuY2gyKSBOdW1iZXIgb2YgcnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQuCitldmVudDowWDAwMzUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDMgOiAoR3JvdXAgMyBwbV9icmFuY2gyKSBQcm9jZXNzb3IgQ3ljbGVzIGdhdGVkIGJ5IHRoZSBydW4gbGF0Y2guICBPcGVyYXRpbmcgc3lzdGVtcyB1c2UgdGhlIHJ1biBsYXRjaCB0byBpbmRpY2F0ZSB3aGVuIHRoZXkgYXJlIGRvaW5nIHVzZWZ1bCB3b3JrLiAgVGhlIHJ1biBsYXRjaCBpcyB0eXBpY2FsbHkgY2xlYXJlZCBpbiB0aGUgT1MgaWRsZSBsb29wLiAgR2F0aW5nIGJ5IHRoZSBydW4gbGF0Y2ggZmlsdGVycyBvdXQgdGhlIGlkbGUgbG9vcC4KKworI0dyb3VwIDQgcG1fYnJhbmNoMywgQnJhbmNoIG9wZXJhdGlvbnMKK2V2ZW50OjBYMDA0MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fQlJVX0ZJTl9HUlA0IDogKEdyb3VwIDQgcG1fYnJhbmNoMykgVGhlIEJyYW5jaCBleGVjdXRpb24gdW5pdCBmaW5pc2hlZCBhbiBpbnN0cnVjdGlvbgorZXZlbnQ6MFgwMDQxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9CUl9UQUtFTl9HUlA0IDogKEdyb3VwIDQgcG1fYnJhbmNoMykgQSBicmFuY2ggaW5zdHJ1Y3Rpb24gd2FzIHRha2VuLiBUaGlzIGNvdWxkIGhhdmUgYmVlbiBhIGNvbmRpdGlvbmFsIGJyYW5jaCBvciBhbiB1bmNvbmRpdGlvbmFsIGJyYW5jaAorZXZlbnQ6MFgwMDQyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9CUl9QUkVEX0dSUDQgOiAoR3JvdXAgNCBwbV9icmFuY2gzKSBBIGJyYW5jaCBwcmVkaWN0aW9uIHdhcyBtYWRlLiBUaGlzIGNvdWxkIGhhdmUgYmVlbiBhIHRhcmdldCBwcmVkaWN0aW9uLCBhIGNvbmRpdGlvbiBwcmVkaWN0aW9uLCBvciBib3RoCitldmVudDowWDAwNDMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0JSX01QUkVEX0dSUDQgOiAoR3JvdXAgNCBwbV9icmFuY2gzKSBBIGJyYW5jaCBpbnN0cnVjdGlvbiB3YXMgaW5jb3JyZWN0bHkgcHJlZGljdGVkLiBUaGlzIGNvdWxkIGhhdmUgYmVlbiBhIHRhcmdldCBwcmVkaWN0aW9uLCBhIGNvbmRpdGlvbiBwcmVkaWN0aW9uLCBvciBib3RoCitldmVudDowWDAwNDQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQNCA6IChHcm91cCA0IHBtX2JyYW5jaDMpIE51bWJlciBvZiBydW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZC4KK2V2ZW50OjBYMDA0NSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQNCA6IChHcm91cCA0IHBtX2JyYW5jaDMpIFByb2Nlc3NvciBDeWNsZXMgZ2F0ZWQgYnkgdGhlIHJ1biBsYXRjaC4gIE9wZXJhdGluZyBzeXN0ZW1zIHVzZSB0aGUgcnVuIGxhdGNoIHRvIGluZGljYXRlIHdoZW4gdGhleSBhcmUgZG9pbmcgdXNlZnVsIHdvcmsuICBUaGUgcnVuIGxhdGNoIGlzIHR5cGljYWxseSBjbGVhcmVkIGluIHRoZSBPUyBpZGxlIGxvb3AuICBHYXRpbmcgYnkgdGhlIHJ1biBsYXRjaCBmaWx0ZXJzIG91dCB0aGUgaWRsZSBsb29wLgorCisjR3JvdXAgNSBwbV9icmFuY2g0LCBCcmFuY2ggb3BlcmF0aW9ucworZXZlbnQ6MFgwMDUwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9CUl9NUFJFRF9DUl9HUlA1IDogKEdyb3VwIDUgcG1fYnJhbmNoNCkgQSBjb25kaXRpb25hbCBicmFuY2ggaW5zdHJ1Y3Rpb24gd2FzIGluY29ycmVjdGx5IHByZWRpY3RlZCBhcyB0YWtlbiBvciBub3QgdGFrZW4uICBUaGUgYnJhbmNoIGV4ZWN1dGlvbiB1bml0IGRldGVjdHMgYSBicmFuY2ggbWlzcHJlZGljdCBiZWNhdXNlIHRoZSBDUiB2YWx1ZSBpcyBvcHBvc2l0ZSBvZiB0aGUgcHJlZGljdGVkIHZhbHVlLiBUaGlzIHdpbGwgcmVzdWx0IGluIGEgYnJhbmNoIHJlZGlyZWN0IGZsdXNoIGlmIG5vdCBvdmVyZmlkZGVuIGJ5IGEgZmx1c2ggb2YgYW4gb2xkZXIgaW5zdHJ1Y3Rpb24uCitldmVudDowWDAwNTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0JSX1VOQ09ORF9HUlA1IDogKEdyb3VwIDUgcG1fYnJhbmNoNCkgQW4gdW5jb25kaXRpb25hbCBicmFuY2ggd2FzIGV4ZWN1dGVkLgorZXZlbnQ6MFgwMDUyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9CUl9NUFJFRF9UQV9HUlA1IDogKEdyb3VwIDUgcG1fYnJhbmNoNCkgQSBicmFuY2ggaW5zdHJ1Y3Rpb24gdGFyZ2V0IHdhcyBpbmNvcnJlY3RseSBwcmVkaWN0ZWQuIFRoaXMgd2lsbCByZXN1bHQgaW4gYSBicmFuY2ggbWlzcHJlZGljdCBmbHVzaCB1bmxlc3MgYSBmbHVzaCBpcyBkZXRlY3RlZCBmcm9tIGFuIG9sZGVyIGluc3RydWN0aW9uLgorZXZlbnQ6MFgwMDUzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9CUl9NUFJFRF9DQ0FDSEVfR1JQNSA6IChHcm91cCA1IHBtX2JyYW5jaDQpIEEgYnJhbmNoIGluc3RydWN0aW9uIHRhcmdldCB3YXMgaW5jb3JyZWN0bHkgcHJlZGljdGVkIGJ5IHRoZSBjY291bnQgY2FjaGUuIFRoaXMgd2lsbCByZXN1bHQgaW4gYSBicmFuY2ggcmVkaXJlY3QgZmx1c2ggaWYgbm90IG92ZXJmaWRkZW4gYnkgYSBmbHVzaCBvZiBhbiBvbGRlciBpbnN0cnVjdGlvbi4KK2V2ZW50OjBYMDA1NCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlA1IDogKEdyb3VwIDUgcG1fYnJhbmNoNCkgTnVtYmVyIG9mIHJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkLgorZXZlbnQ6MFgwMDU1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlA1IDogKEdyb3VwIDUgcG1fYnJhbmNoNCkgUHJvY2Vzc29yIEN5Y2xlcyBnYXRlZCBieSB0aGUgcnVuIGxhdGNoLiAgT3BlcmF0aW5nIHN5c3RlbXMgdXNlIHRoZSBydW4gbGF0Y2ggdG8gaW5kaWNhdGUgd2hlbiB0aGV5IGFyZSBkb2luZyB1c2VmdWwgd29yay4gIFRoZSBydW4gbGF0Y2ggaXMgdHlwaWNhbGx5IGNsZWFyZWQgaW4gdGhlIE9TIGlkbGUgbG9vcC4gIEdhdGluZyBieSB0aGUgcnVuIGxhdGNoIGZpbHRlcnMgb3V0IHRoZSBpZGxlIGxvb3AuCisKKyNHcm91cCA2IHBtX2JyYW5jaDUsIEJyYW5jaCBvcGVyYXRpb25zCitldmVudDowWDAwNjAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0JSX1BSRURfQ1JfVEFfR1JQNiA6IChHcm91cCA2IHBtX2JyYW5jaDUpIEJvdGggdGhlIGNvbmRpdGlvbiAodGFrZW4gb3Igbm90IHRha2VuKSBhbmQgdGhlIHRhcmdldCBhZGRyZXNzIG9mIGEgYnJhbmNoIGluc3RydWN0aW9uIHdhcyBwcmVkaWN0ZWQuCitldmVudDowWDAwNjEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0JSX01QUkVEX0NSX1RBX0dSUDYgOiAoR3JvdXAgNiBwbV9icmFuY2g1KSBCcmFuY2ggbWlzcHJlZGljdCAtIHRha2VuL25vdCB0YWtlbiBhbmQgdGFyZ2V0CitldmVudDowWDAwNjIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0JSX1BSRURfR1JQNiA6IChHcm91cCA2IHBtX2JyYW5jaDUpIEEgYnJhbmNoIHByZWRpY3Rpb24gd2FzIG1hZGUuIFRoaXMgY291bGQgaGF2ZSBiZWVuIGEgdGFyZ2V0IHByZWRpY3Rpb24sIGEgY29uZGl0aW9uIHByZWRpY3Rpb24sIG9yIGJvdGgKK2V2ZW50OjBYMDA2MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fQlJfUFJFRF9DUl9HUlA2IDogKEdyb3VwIDYgcG1fYnJhbmNoNSkgQSBjb25kaXRpb25hbCBicmFuY2ggaW5zdHJ1Y3Rpb24gd2FzIHByZWRpY3RlZCBhcyB0YWtlbiBvciBub3QgdGFrZW4uCitldmVudDowWDAwNjQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQNiA6IChHcm91cCA2IHBtX2JyYW5jaDUpIE51bWJlciBvZiBydW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZC4KK2V2ZW50OjBYMDA2NSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQNiA6IChHcm91cCA2IHBtX2JyYW5jaDUpIFByb2Nlc3NvciBDeWNsZXMgZ2F0ZWQgYnkgdGhlIHJ1biBsYXRjaC4gIE9wZXJhdGluZyBzeXN0ZW1zIHVzZSB0aGUgcnVuIGxhdGNoIHRvIGluZGljYXRlIHdoZW4gdGhleSBhcmUgZG9pbmcgdXNlZnVsIHdvcmsuICBUaGUgcnVuIGxhdGNoIGlzIHR5cGljYWxseSBjbGVhcmVkIGluIHRoZSBPUyBpZGxlIGxvb3AuICBHYXRpbmcgYnkgdGhlIHJ1biBsYXRjaCBmaWx0ZXJzIG91dCB0aGUgaWRsZSBsb29wLgorCisjR3JvdXAgNyBwbV9icmFuY2g2LCBCcmFuY2ggb3BlcmF0aW9ucworZXZlbnQ6MFgwMDcwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9CUl9QUkVEX0NDQUNIRV9HUlA3IDogKEdyb3VwIDcgcG1fYnJhbmNoNikgVGhlIGNvdW50IHZhbHVlIG9mIGEgQnJhbmNoIGFuZCBDb3VudCBpbnN0cnVjdGlvbiB3YXMgcHJlZGljdGVkCitldmVudDowWDAwNzEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0JSX1BSRURfTFNUQUNLX0dSUDcgOiAoR3JvdXAgNyBwbV9icmFuY2g2KSBUaGUgdGFyZ2V0IGFkZHJlc3Mgb2YgYSBCcmFuY2ggdG8gTGluayBpbnN0cnVjdGlvbiB3YXMgcHJlZGljdGVkIGJ5IHRoZSBsaW5rIHN0YWNrLgorZXZlbnQ6MFgwMDcyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9CUl9QUkVEX0NSX0dSUDcgOiAoR3JvdXAgNyBwbV9icmFuY2g2KSBBIGNvbmRpdGlvbmFsIGJyYW5jaCBpbnN0cnVjdGlvbiB3YXMgcHJlZGljdGVkIGFzIHRha2VuIG9yIG5vdCB0YWtlbi4KK2V2ZW50OjBYMDA3MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fQlJfUFJFRF9UQV9HUlA3IDogKEdyb3VwIDcgcG1fYnJhbmNoNikgVGhlIHRhcmdldCBhZGRyZXNzIG9mIGEgYnJhbmNoIGluc3RydWN0aW9uIHdhcyBwcmVkaWN0ZWQuCitldmVudDowWDAwNzQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQNyA6IChHcm91cCA3IHBtX2JyYW5jaDYpIE51bWJlciBvZiBydW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZC4KK2V2ZW50OjBYMDA3NSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQNyA6IChHcm91cCA3IHBtX2JyYW5jaDYpIFByb2Nlc3NvciBDeWNsZXMgZ2F0ZWQgYnkgdGhlIHJ1biBsYXRjaC4gIE9wZXJhdGluZyBzeXN0ZW1zIHVzZSB0aGUgcnVuIGxhdGNoIHRvIGluZGljYXRlIHdoZW4gdGhleSBhcmUgZG9pbmcgdXNlZnVsIHdvcmsuICBUaGUgcnVuIGxhdGNoIGlzIHR5cGljYWxseSBjbGVhcmVkIGluIHRoZSBPUyBpZGxlIGxvb3AuICBHYXRpbmcgYnkgdGhlIHJ1biBsYXRjaCBmaWx0ZXJzIG91dCB0aGUgaWRsZSBsb29wLgorCisjR3JvdXAgOCBwbV9icmFuY2g3LCBCcmFuY2ggb3BlcmF0aW9ucworZXZlbnQ6MFgwMDgwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9CUl9NUFJFRF9DUl9HUlA4IDogKEdyb3VwIDggcG1fYnJhbmNoNykgQSBjb25kaXRpb25hbCBicmFuY2ggaW5zdHJ1Y3Rpb24gd2FzIGluY29ycmVjdGx5IHByZWRpY3RlZCBhcyB0YWtlbiBvciBub3QgdGFrZW4uICBUaGUgYnJhbmNoIGV4ZWN1dGlvbiB1bml0IGRldGVjdHMgYSBicmFuY2ggbWlzcHJlZGljdCBiZWNhdXNlIHRoZSBDUiB2YWx1ZSBpcyBvcHBvc2l0ZSBvZiB0aGUgcHJlZGljdGVkIHZhbHVlLiBUaGlzIHdpbGwgcmVzdWx0IGluIGEgYnJhbmNoIHJlZGlyZWN0IGZsdXNoIGlmIG5vdCBvdmVyZmlkZGVuIGJ5IGEgZmx1c2ggb2YgYW4gb2xkZXIgaW5zdHJ1Y3Rpb24uCitldmVudDowWDAwODEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0JSX1BSRURfQ1JfR1JQOCA6IChHcm91cCA4IHBtX2JyYW5jaDcpIEEgY29uZGl0aW9uYWwgYnJhbmNoIGluc3RydWN0aW9uIHdhcyBwcmVkaWN0ZWQgYXMgdGFrZW4gb3Igbm90IHRha2VuLgorZXZlbnQ6MFgwMDgyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9CUl9QUkVEX0NDQUNIRV9HUlA4IDogKEdyb3VwIDggcG1fYnJhbmNoNykgVGhlIGNvdW50IHZhbHVlIG9mIGEgQnJhbmNoIGFuZCBDb3VudCBpbnN0cnVjdGlvbiB3YXMgcHJlZGljdGVkCitldmVudDowWDAwODMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0JSX1BSRURfTFNUQUNLX0dSUDggOiAoR3JvdXAgOCBwbV9icmFuY2g3KSBUaGUgdGFyZ2V0IGFkZHJlc3Mgb2YgYSBCcmFuY2ggdG8gTGluayBpbnN0cnVjdGlvbiB3YXMgcHJlZGljdGVkIGJ5IHRoZSBsaW5rIHN0YWNrLgorZXZlbnQ6MFgwMDg0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDggOiAoR3JvdXAgOCBwbV9icmFuY2g3KSBOdW1iZXIgb2YgcnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQuCitldmVudDowWDAwODUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDggOiAoR3JvdXAgOCBwbV9icmFuY2g3KSBQcm9jZXNzb3IgQ3ljbGVzIGdhdGVkIGJ5IHRoZSBydW4gbGF0Y2guICBPcGVyYXRpbmcgc3lzdGVtcyB1c2UgdGhlIHJ1biBsYXRjaCB0byBpbmRpY2F0ZSB3aGVuIHRoZXkgYXJlIGRvaW5nIHVzZWZ1bCB3b3JrLiAgVGhlIHJ1biBsYXRjaCBpcyB0eXBpY2FsbHkgY2xlYXJlZCBpbiB0aGUgT1MgaWRsZSBsb29wLiAgR2F0aW5nIGJ5IHRoZSBydW4gbGF0Y2ggZmlsdGVycyBvdXQgdGhlIGlkbGUgbG9vcC4KKworI0dyb3VwIDkgcG1fYnJhbmNoOCwgQnJhbmNoIG9wZXJhdGlvbnMKK2V2ZW50OjBYMDA5MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fQlJfTVBSRURfVEFfR1JQOSA6IChHcm91cCA5IHBtX2JyYW5jaDgpIEEgYnJhbmNoIGluc3RydWN0aW9uIHRhcmdldCB3YXMgaW5jb3JyZWN0bHkgcHJlZGljdGVkLiBUaGlzIHdpbGwgcmVzdWx0IGluIGEgYnJhbmNoIG1pc3ByZWRpY3QgZmx1c2ggdW5sZXNzIGEgZmx1c2ggaXMgZGV0ZWN0ZWQgZnJvbSBhbiBvbGRlciBpbnN0cnVjdGlvbi4KK2V2ZW50OjBYMDA5MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fQlJfUFJFRF9DUl9HUlA5IDogKEdyb3VwIDkgcG1fYnJhbmNoOCkgQSBjb25kaXRpb25hbCBicmFuY2ggaW5zdHJ1Y3Rpb24gd2FzIHByZWRpY3RlZCBhcyB0YWtlbiBvciBub3QgdGFrZW4uCitldmVudDowWDAwOTIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0JSX1BSRURfQ0NBQ0hFX0dSUDkgOiAoR3JvdXAgOSBwbV9icmFuY2g4KSBUaGUgY291bnQgdmFsdWUgb2YgYSBCcmFuY2ggYW5kIENvdW50IGluc3RydWN0aW9uIHdhcyBwcmVkaWN0ZWQKK2V2ZW50OjBYMDA5MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fQlJfUFJFRF9MU1RBQ0tfR1JQOSA6IChHcm91cCA5IHBtX2JyYW5jaDgpIFRoZSB0YXJnZXQgYWRkcmVzcyBvZiBhIEJyYW5jaCB0byBMaW5rIGluc3RydWN0aW9uIHdhcyBwcmVkaWN0ZWQgYnkgdGhlIGxpbmsgc3RhY2suCitldmVudDowWDAwOTQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQOSA6IChHcm91cCA5IHBtX2JyYW5jaDgpIE51bWJlciBvZiBydW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZC4KK2V2ZW50OjBYMDA5NSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQOSA6IChHcm91cCA5IHBtX2JyYW5jaDgpIFByb2Nlc3NvciBDeWNsZXMgZ2F0ZWQgYnkgdGhlIHJ1biBsYXRjaC4gIE9wZXJhdGluZyBzeXN0ZW1zIHVzZSB0aGUgcnVuIGxhdGNoIHRvIGluZGljYXRlIHdoZW4gdGhleSBhcmUgZG9pbmcgdXNlZnVsIHdvcmsuICBUaGUgcnVuIGxhdGNoIGlzIHR5cGljYWxseSBjbGVhcmVkIGluIHRoZSBPUyBpZGxlIGxvb3AuICBHYXRpbmcgYnkgdGhlIHJ1biBsYXRjaCBmaWx0ZXJzIG91dCB0aGUgaWRsZSBsb29wLgorCisjR3JvdXAgMTAgcG1fYnJhbmNoOSwgQnJhbmNoIG9wZXJhdGlvbnMKK2V2ZW50OjBYMDBBMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fQlJfTVBSRURfQ0NBQ0hFX0dSUDEwIDogKEdyb3VwIDEwIHBtX2JyYW5jaDkpIEEgYnJhbmNoIGluc3RydWN0aW9uIHRhcmdldCB3YXMgaW5jb3JyZWN0bHkgcHJlZGljdGVkIGJ5IHRoZSBjY291bnQgY2FjaGUuIFRoaXMgd2lsbCByZXN1bHQgaW4gYSBicmFuY2ggcmVkaXJlY3QgZmx1c2ggaWYgbm90IG92ZXJmaWRkZW4gYnkgYSBmbHVzaCBvZiBhbiBvbGRlciBpbnN0cnVjdGlvbi4KK2V2ZW50OjBYMDBBMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fQlJfUFJFRF9DUl9HUlAxMCA6IChHcm91cCAxMCBwbV9icmFuY2g5KSBBIGNvbmRpdGlvbmFsIGJyYW5jaCBpbnN0cnVjdGlvbiB3YXMgcHJlZGljdGVkIGFzIHRha2VuIG9yIG5vdCB0YWtlbi4KK2V2ZW50OjBYMDBBMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fQlJfUFJFRF9DQ0FDSEVfR1JQMTAgOiAoR3JvdXAgMTAgcG1fYnJhbmNoOSkgVGhlIGNvdW50IHZhbHVlIG9mIGEgQnJhbmNoIGFuZCBDb3VudCBpbnN0cnVjdGlvbiB3YXMgcHJlZGljdGVkCitldmVudDowWDAwQTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0JSX1BSRURfTFNUQUNLX0dSUDEwIDogKEdyb3VwIDEwIHBtX2JyYW5jaDkpIFRoZSB0YXJnZXQgYWRkcmVzcyBvZiBhIEJyYW5jaCB0byBMaW5rIGluc3RydWN0aW9uIHdhcyBwcmVkaWN0ZWQgYnkgdGhlIGxpbmsgc3RhY2suCitldmVudDowWDAwQTQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQMTAgOiAoR3JvdXAgMTAgcG1fYnJhbmNoOSkgTnVtYmVyIG9mIHJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkLgorZXZlbnQ6MFgwMEE1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxMCA6IChHcm91cCAxMCBwbV9icmFuY2g5KSBQcm9jZXNzb3IgQ3ljbGVzIGdhdGVkIGJ5IHRoZSBydW4gbGF0Y2guICBPcGVyYXRpbmcgc3lzdGVtcyB1c2UgdGhlIHJ1biBsYXRjaCB0byBpbmRpY2F0ZSB3aGVuIHRoZXkgYXJlIGRvaW5nIHVzZWZ1bCB3b3JrLiAgVGhlIHJ1biBsYXRjaCBpcyB0eXBpY2FsbHkgY2xlYXJlZCBpbiB0aGUgT1MgaWRsZSBsb29wLiAgR2F0aW5nIGJ5IHRoZSBydW4gbGF0Y2ggZmlsdGVycyBvdXQgdGhlIGlkbGUgbG9vcC4KKworI0dyb3VwIDExIHBtX3NsYl9taXNzLCBTTEIgTWlzc2VzCitldmVudDowWDAwQjAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lFUkFUX01JU1NfR1JQMTEgOiAoR3JvdXAgMTEgcG1fc2xiX21pc3MpIEEgdHJhbnNsYXRpb24gcmVxdWVzdCBtaXNzZWQgdGhlIEluc3RydWN0aW9uIEVmZmVjdGl2ZSB0byBSZWFsIEFkZHJlc3MgVHJhbnNsYXRpb24gKEVSQVQpIHRhYmxlCitldmVudDowWDAwQjEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RTTEJfTUlTU19HUlAxMSA6IChHcm91cCAxMSBwbV9zbGJfbWlzcykgQSBTTEIgbWlzcyBmb3IgYSBkYXRhIHJlcXVlc3Qgb2NjdXJyZWQuIFNMQiBtaXNzZXMgdHJhcCB0byB0aGUgb3BlcmF0aW5nIHN5c3RlbSB0byByZXNvbHZlLgorZXZlbnQ6MFgwMEIyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JU0xCX01JU1NfR1JQMTEgOiAoR3JvdXAgMTEgcG1fc2xiX21pc3MpIEEgU0xCIG1pc3MgZm9yIGFuIGluc3RydWN0aW9uIGZldGNoIGFzIG9jY3VycmVkCitldmVudDowWDAwQjMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1NMQl9NSVNTX0dSUDExIDogKEdyb3VwIDExIHBtX3NsYl9taXNzKSBUb3RhbCBvZiBhbGwgU2VnbWVudCBMb29rYXNpZGUgQnVmZmVyIChTTEIpIG1pc3NlcywgSW5zdHJ1Y3Rpb25zICsgRGF0YS4KK2V2ZW50OjBYMDBCNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlAxMSA6IChHcm91cCAxMSBwbV9zbGJfbWlzcykgTnVtYmVyIG9mIHJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkLgorZXZlbnQ6MFgwMEI1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxMSA6IChHcm91cCAxMSBwbV9zbGJfbWlzcykgUHJvY2Vzc29yIEN5Y2xlcyBnYXRlZCBieSB0aGUgcnVuIGxhdGNoLiAgT3BlcmF0aW5nIHN5c3RlbXMgdXNlIHRoZSBydW4gbGF0Y2ggdG8gaW5kaWNhdGUgd2hlbiB0aGV5IGFyZSBkb2luZyB1c2VmdWwgd29yay4gIFRoZSBydW4gbGF0Y2ggaXMgdHlwaWNhbGx5IGNsZWFyZWQgaW4gdGhlIE9TIGlkbGUgbG9vcC4gIEdhdGluZyBieSB0aGUgcnVuIGxhdGNoIGZpbHRlcnMgb3V0IHRoZSBpZGxlIGxvb3AuCisKKyNHcm91cCAxMiBwbV90bGJfbWlzcywgVExCIE1pc3NlcworZXZlbnQ6MFgwMEMwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9CVEFDX01JU1NfR1JQMTIgOiAoR3JvdXAgMTIgcG1fdGxiX21pc3MpIEJUQUMgTWlzcHJlZGljdGVkCitldmVudDowWDAwQzEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1RMQl9NSVNTX0dSUDEyIDogKEdyb3VwIDEyIHBtX3RsYl9taXNzKSBUb3RhbCBvZiBEYXRhIFRMQiBtaXNlcyArIEluc3RydWN0aW9uIFRMQiBtaXNzZXMKK2V2ZW50OjBYMDBDMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRFRMQl9NSVNTX0dSUDEyIDogKEdyb3VwIDEyIHBtX3RsYl9taXNzKSBEYXRhIFRMQiBtaXNzZXMsIGFsbCBwYWdlIHNpemVzLgorZXZlbnQ6MFgwMEMzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JVExCX01JU1NfR1JQMTIgOiAoR3JvdXAgMTIgcG1fdGxiX21pc3MpIEEgVExCIG1pc3MgZm9yIGFuIEluc3RydWN0aW9uIEZldGNoIGhhcyBvY2N1cnJlZAorZXZlbnQ6MFgwMEM0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDEyIDogKEdyb3VwIDEyIHBtX3RsYl9taXNzKSBOdW1iZXIgb2YgcnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQuCitldmVudDowWDAwQzUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDEyIDogKEdyb3VwIDEyIHBtX3RsYl9taXNzKSBQcm9jZXNzb3IgQ3ljbGVzIGdhdGVkIGJ5IHRoZSBydW4gbGF0Y2guICBPcGVyYXRpbmcgc3lzdGVtcyB1c2UgdGhlIHJ1biBsYXRjaCB0byBpbmRpY2F0ZSB3aGVuIHRoZXkgYXJlIGRvaW5nIHVzZWZ1bCB3b3JrLiAgVGhlIHJ1biBsYXRjaCBpcyB0eXBpY2FsbHkgY2xlYXJlZCBpbiB0aGUgT1MgaWRsZSBsb29wLiAgR2F0aW5nIGJ5IHRoZSBydW4gbGF0Y2ggZmlsdGVycyBvdXQgdGhlIGlkbGUgbG9vcC4KKworI0dyb3VwIDEzIHBtX2R0bGJfbWlzcywgRFRMQiBNaXNzZXMKK2V2ZW50OjBYMDBEMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRFRMQl9NSVNTXzE2R19HUlAxMyA6IChHcm91cCAxMyBwbV9kdGxiX21pc3MpIERhdGEgVExCIHJlZmVyZW5jZXMgdG8gMTZHQiBwYWdlcyB0aGF0IG1pc3NlZCB0aGUgVExCLiBQYWdlIHNpemUgaXMgZGV0ZXJtaW5lZCBhdCBUTEIgcmVsb2FkIHRpbWUuCitldmVudDowWDAwRDEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RUTEJfTUlTU180S19HUlAxMyA6IChHcm91cCAxMyBwbV9kdGxiX21pc3MpIERhdGEgVExCIHJlZmVyZW5jZXMgdG8gNEtCIHBhZ2VzIHRoYXQgbWlzc2VkIHRoZSBUTEIuIFBhZ2Ugc2l6ZSBpcyBkZXRlcm1pbmVkIGF0IFRMQiByZWxvYWQgdGltZS4KK2V2ZW50OjBYMDBEMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRFRMQl9NSVNTXzY0S19HUlAxMyA6IChHcm91cCAxMyBwbV9kdGxiX21pc3MpIERhdGEgVExCIHJlZmVyZW5jZXMgdG8gNjRLQiBwYWdlcyB0aGF0IG1pc3NlZCB0aGUgVExCLiBQYWdlIHNpemUgaXMgZGV0ZXJtaW5lZCBhdCBUTEIgcmVsb2FkIHRpbWUuCitldmVudDowWDAwRDMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RUTEJfTUlTU18xNk1fR1JQMTMgOiAoR3JvdXAgMTMgcG1fZHRsYl9taXNzKSBEYXRhIFRMQiByZWZlcmVuY2VzIHRvIDE2TUIgcGFnZXMgdGhhdCBtaXNzZWQgdGhlIFRMQi4gUGFnZSBzaXplIGlzIGRldGVybWluZWQgYXQgVExCIHJlbG9hZCB0aW1lLgorZXZlbnQ6MFgwMEQ0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDEzIDogKEdyb3VwIDEzIHBtX2R0bGJfbWlzcykgTnVtYmVyIG9mIHJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkLgorZXZlbnQ6MFgwMEQ1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxMyA6IChHcm91cCAxMyBwbV9kdGxiX21pc3MpIFByb2Nlc3NvciBDeWNsZXMgZ2F0ZWQgYnkgdGhlIHJ1biBsYXRjaC4gIE9wZXJhdGluZyBzeXN0ZW1zIHVzZSB0aGUgcnVuIGxhdGNoIHRvIGluZGljYXRlIHdoZW4gdGhleSBhcmUgZG9pbmcgdXNlZnVsIHdvcmsuICBUaGUgcnVuIGxhdGNoIGlzIHR5cGljYWxseSBjbGVhcmVkIGluIHRoZSBPUyBpZGxlIGxvb3AuICBHYXRpbmcgYnkgdGhlIHJ1biBsYXRjaCBmaWx0ZXJzIG91dCB0aGUgaWRsZSBsb29wLgorCisjR3JvdXAgMTQgcG1fZGVyYXRfbWlzczEsIERFUkFUIG1pc3NlcworZXZlbnQ6MFgwMEUwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9ERVJBVF9NSVNTXzRLX0dSUDE0IDogKEdyb3VwIDE0IHBtX2RlcmF0X21pc3MxKSBBIGRhdGEgcmVxdWVzdCAobG9hZCBvciBzdG9yZSkgbWlzc2VkIHRoZSBFUkFUIGZvciA0SyBwYWdlIGFuZCByZXN1bHRlZCBpbiBhbiBFUkFUIHJlbG9hZC4KK2V2ZW50OjBYMDBFMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fREVSQVRfTUlTU182NEtfR1JQMTQgOiAoR3JvdXAgMTQgcG1fZGVyYXRfbWlzczEpIEEgZGF0YSByZXF1ZXN0IChsb2FkIG9yIHN0b3JlKSBtaXNzZWQgdGhlIEVSQVQgZm9yIDY0SyBwYWdlIGFuZCByZXN1bHRlZCBpbiBhbiBFUkFUIHJlbG9hZC4KK2V2ZW50OjBYMDBFMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fREVSQVRfTUlTU18xNk1fR1JQMTQgOiAoR3JvdXAgMTQgcG1fZGVyYXRfbWlzczEpIEEgZGF0YSByZXF1ZXN0IChsb2FkIG9yIHN0b3JlKSBtaXNzZWQgdGhlIEVSQVQgZm9yIDE2TSBwYWdlIGFuZCByZXN1bHRlZCBpbiBhbiBFUkFUIHJlbG9hZC4KK2V2ZW50OjBYMDBFMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fREVSQVRfTUlTU18xNkdfR1JQMTQgOiAoR3JvdXAgMTQgcG1fZGVyYXRfbWlzczEpIEEgZGF0YSByZXF1ZXN0IChsb2FkIG9yIHN0b3JlKSBtaXNzZWQgdGhlIEVSQVQgZm9yIDE2RyBwYWdlIGFuZCByZXN1bHRlZCBpbiBhbiBFUkFUIHJlbG9hZC4KK2V2ZW50OjBYMDBFNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlAxNCA6IChHcm91cCAxNCBwbV9kZXJhdF9taXNzMSkgTnVtYmVyIG9mIHJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkLgorZXZlbnQ6MFgwMEU1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxNCA6IChHcm91cCAxNCBwbV9kZXJhdF9taXNzMSkgUHJvY2Vzc29yIEN5Y2xlcyBnYXRlZCBieSB0aGUgcnVuIGxhdGNoLiAgT3BlcmF0aW5nIHN5c3RlbXMgdXNlIHRoZSBydW4gbGF0Y2ggdG8gaW5kaWNhdGUgd2hlbiB0aGV5IGFyZSBkb2luZyB1c2VmdWwgd29yay4gIFRoZSBydW4gbGF0Y2ggaXMgdHlwaWNhbGx5IGNsZWFyZWQgaW4gdGhlIE9TIGlkbGUgbG9vcC4gIEdhdGluZyBieSB0aGUgcnVuIGxhdGNoIGZpbHRlcnMgb3V0IHRoZSBpZGxlIGxvb3AuCisKKyNHcm91cCAxNSBwbV9kZXJhdF9taXNzMiwgREVSQVQgbWlzc2VzCitldmVudDowWDAwRjAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMTUgOiAoR3JvdXAgMTUgcG1fZGVyYXRfbWlzczIpIE51bWJlciBvZiBQb3dlclBDIEluc3RydWN0aW9ucyB0aGF0IGNvbXBsZXRlZC4KK2V2ZW50OjBYMDBGMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fREVSQVRfTUlTU182NEtfR1JQMTUgOiAoR3JvdXAgMTUgcG1fZGVyYXRfbWlzczIpIEEgZGF0YSByZXF1ZXN0IChsb2FkIG9yIHN0b3JlKSBtaXNzZWQgdGhlIEVSQVQgZm9yIDY0SyBwYWdlIGFuZCByZXN1bHRlZCBpbiBhbiBFUkFUIHJlbG9hZC4KK2V2ZW50OjBYMDBGMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fREVSQVRfTUlTU18xNk1fR1JQMTUgOiAoR3JvdXAgMTUgcG1fZGVyYXRfbWlzczIpIEEgZGF0YSByZXF1ZXN0IChsb2FkIG9yIHN0b3JlKSBtaXNzZWQgdGhlIEVSQVQgZm9yIDE2TSBwYWdlIGFuZCByZXN1bHRlZCBpbiBhbiBFUkFUIHJlbG9hZC4KK2V2ZW50OjBYMDBGMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fREVSQVRfTUlTU18xNkdfR1JQMTUgOiAoR3JvdXAgMTUgcG1fZGVyYXRfbWlzczIpIEEgZGF0YSByZXF1ZXN0IChsb2FkIG9yIHN0b3JlKSBtaXNzZWQgdGhlIEVSQVQgZm9yIDE2RyBwYWdlIGFuZCByZXN1bHRlZCBpbiBhbiBFUkFUIHJlbG9hZC4KK2V2ZW50OjBYMDBGNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlAxNSA6IChHcm91cCAxNSBwbV9kZXJhdF9taXNzMikgTnVtYmVyIG9mIHJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkLgorZXZlbnQ6MFgwMEY1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxNSA6IChHcm91cCAxNSBwbV9kZXJhdF9taXNzMikgUHJvY2Vzc29yIEN5Y2xlcyBnYXRlZCBieSB0aGUgcnVuIGxhdGNoLiAgT3BlcmF0aW5nIHN5c3RlbXMgdXNlIHRoZSBydW4gbGF0Y2ggdG8gaW5kaWNhdGUgd2hlbiB0aGV5IGFyZSBkb2luZyB1c2VmdWwgd29yay4gIFRoZSBydW4gbGF0Y2ggaXMgdHlwaWNhbGx5IGNsZWFyZWQgaW4gdGhlIE9TIGlkbGUgbG9vcC4gIEdhdGluZyBieSB0aGUgcnVuIGxhdGNoIGZpbHRlcnMgb3V0IHRoZSBpZGxlIGxvb3AuCisKKyNHcm91cCAxNiBwbV9taXNjX21pc3MxLCBNaXNzZXMKK2V2ZW50OjBYMDEwMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRFNMQl9NSVNTX0dSUDE2IDogKEdyb3VwIDE2IHBtX21pc2NfbWlzczEpIEEgU0xCIG1pc3MgZm9yIGEgZGF0YSByZXF1ZXN0IG9jY3VycmVkLiBTTEIgbWlzc2VzIHRyYXAgdG8gdGhlIG9wZXJhdGluZyBzeXN0ZW0gdG8gcmVzb2x2ZS4KK2V2ZW50OjBYMDEwMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fREFUQV9GUk9NX0wyTUlTU19HUlAxNiA6IChHcm91cCAxNiBwbV9taXNjX21pc3MxKSBUaGUgcHJvY2Vzc29yJ3MgRGF0YSBDYWNoZSB3YXMgcmVsb2FkZWQgYnV0IG5vdCBmcm9tIHRoZSBsb2NhbCBMMi4KK2V2ZW50OjBYMDEwMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVX0RFUkFUX01JU1NfR1JQMTYgOiAoR3JvdXAgMTYgcG1fbWlzY19taXNzMSkgVG90YWwgRC1FUkFUIE1pc3Nlcy4gIFJlcXVlc3RzIHRoYXQgbWlzcyB0aGUgRGVyYXQgYXJlIHJlamVjdGVkIGFuZCByZXRyaWVkIHVudGlsIHRoZSByZXF1ZXN0IGhpdHMgaW4gdGhlIEVyYXQuIFRoaXMgbWF5IHJlc3VsdCBpbiBtdWx0aXBsZSBlcmF0IG1pc3NlcyBmb3IgdGhlIHNhbWUgaW5zdHJ1Y3Rpb24uICBDb21iaW5lZCBVbml0IDAgKyAxLgorZXZlbnQ6MFgwMTAzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MRF9NSVNTX0wxX0dSUDE2IDogKEdyb3VwIDE2IHBtX21pc2NfbWlzczEpIExvYWQgcmVmZXJlbmNlcyB0aGF0IG1pc3MgdGhlIExldmVsIDEgRGF0YSBjYWNoZS4gQ29tYmluZWQgdW5pdCAwICsgMS4KK2V2ZW50OjBYMDEwNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlAxNiA6IChHcm91cCAxNiBwbV9taXNjX21pc3MxKSBOdW1iZXIgb2YgcnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQuCitldmVudDowWDAxMDUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDE2IDogKEdyb3VwIDE2IHBtX21pc2NfbWlzczEpIFByb2Nlc3NvciBDeWNsZXMgZ2F0ZWQgYnkgdGhlIHJ1biBsYXRjaC4gIE9wZXJhdGluZyBzeXN0ZW1zIHVzZSB0aGUgcnVuIGxhdGNoIHRvIGluZGljYXRlIHdoZW4gdGhleSBhcmUgZG9pbmcgdXNlZnVsIHdvcmsuICBUaGUgcnVuIGxhdGNoIGlzIHR5cGljYWxseSBjbGVhcmVkIGluIHRoZSBPUyBpZGxlIGxvb3AuICBHYXRpbmcgYnkgdGhlIHJ1biBsYXRjaCBmaWx0ZXJzIG91dCB0aGUgaWRsZSBsb29wLgorCisjR3JvdXAgMTcgcG1fbWlzY19taXNzMiwgTWlzc2VzCitldmVudDowWDAxMTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQMTcgOiAoR3JvdXAgMTcgcG1fbWlzY19taXNzMikgUHJvY2Vzc29yIEN5Y2xlcworZXZlbnQ6MFgwMTExIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9QVEVHX0ZST01fTDNNSVNTX0dSUDE3IDogKEdyb3VwIDE3IHBtX21pc2NfbWlzczIpICBQYWdlIFRhYmxlIEVudHJ5IHdhcyBsb2FkZWQgaW50byB0aGUgRVJBVCBmcm9tIGJleW9uZCB0aGUgTDMgZHVlIHRvIGEgZGVtYW5kIGxvYWQgb3Igc3RvcmUuCitldmVudDowWDAxMTIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9ERVJBVF9NSVNTX0dSUDE3IDogKEdyb3VwIDE3IHBtX21pc2NfbWlzczIpIFRvdGFsIEQtRVJBVCBNaXNzZXMuICBSZXF1ZXN0cyB0aGF0IG1pc3MgdGhlIERlcmF0IGFyZSByZWplY3RlZCBhbmQgcmV0cmllZCB1bnRpbCB0aGUgcmVxdWVzdCBoaXRzIGluIHRoZSBFcmF0LiBUaGlzIG1heSByZXN1bHQgaW4gbXVsdGlwbGUgZXJhdCBtaXNzZXMgZm9yIHRoZSBzYW1lIGluc3RydWN0aW9uLiAgQ29tYmluZWQgVW5pdCAwICsgMS4KK2V2ZW50OjBYMDExMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlAxNyA6IChHcm91cCAxNyBwbV9taXNjX21pc3MyKSBOdW1iZXIgb2YgcnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQuCitldmVudDowWDAxMTQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQMTcgOiAoR3JvdXAgMTcgcG1fbWlzY19taXNzMikgTnVtYmVyIG9mIHJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkLgorZXZlbnQ6MFgwMTE1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxNyA6IChHcm91cCAxNyBwbV9taXNjX21pc3MyKSBQcm9jZXNzb3IgQ3ljbGVzIGdhdGVkIGJ5IHRoZSBydW4gbGF0Y2guICBPcGVyYXRpbmcgc3lzdGVtcyB1c2UgdGhlIHJ1biBsYXRjaCB0byBpbmRpY2F0ZSB3aGVuIHRoZXkgYXJlIGRvaW5nIHVzZWZ1bCB3b3JrLiAgVGhlIHJ1biBsYXRjaCBpcyB0eXBpY2FsbHkgY2xlYXJlZCBpbiB0aGUgT1MgaWRsZSBsb29wLiAgR2F0aW5nIGJ5IHRoZSBydW4gbGF0Y2ggZmlsdGVycyBvdXQgdGhlIGlkbGUgbG9vcC4KKworI0dyb3VwIDE4IHBtX21pc2NfbWlzczMsIE1pc3NlcworZXZlbnQ6MFgwMTIwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDE4IDogKEdyb3VwIDE4IHBtX21pc2NfbWlzczMpIFByb2Nlc3NvciBDeWNsZXMKK2V2ZW50OjBYMDEyMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUFRFR19GUk9NX0wzTUlTU19HUlAxOCA6IChHcm91cCAxOCBwbV9taXNjX21pc3MzKSAgUGFnZSBUYWJsZSBFbnRyeSB3YXMgbG9hZGVkIGludG8gdGhlIEVSQVQgZnJvbSBiZXlvbmQgdGhlIEwzIGR1ZSB0byBhIGRlbWFuZCBsb2FkIG9yIHN0b3JlLgorZXZlbnQ6MFgwMTIyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1VfREVSQVRfTUlTU19HUlAxOCA6IChHcm91cCAxOCBwbV9taXNjX21pc3MzKSBUb3RhbCBELUVSQVQgTWlzc2VzLiAgUmVxdWVzdHMgdGhhdCBtaXNzIHRoZSBEZXJhdCBhcmUgcmVqZWN0ZWQgYW5kIHJldHJpZWQgdW50aWwgdGhlIHJlcXVlc3QgaGl0cyBpbiB0aGUgRXJhdC4gVGhpcyBtYXkgcmVzdWx0IGluIG11bHRpcGxlIGVyYXQgbWlzc2VzIGZvciB0aGUgc2FtZSBpbnN0cnVjdGlvbi4gIENvbWJpbmVkIFVuaXQgMCArIDEuCitldmVudDowWDAxMjMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1BURUdfRlJPTV9MMk1JU1NfR1JQMTggOiAoR3JvdXAgMTggcG1fbWlzY19taXNzMykgQSBQYWdlIFRhYmxlIEVudHJ5IHdhcyBsb2FkZWQgaW50byB0aGUgVExCIGJ1dCBub3QgZnJvbSB0aGUgbG9jYWwgTDIuCitldmVudDowWDAxMjQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQMTggOiAoR3JvdXAgMTggcG1fbWlzY19taXNzMykgTnVtYmVyIG9mIHJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkLgorZXZlbnQ6MFgwMTI1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxOCA6IChHcm91cCAxOCBwbV9taXNjX21pc3MzKSBQcm9jZXNzb3IgQ3ljbGVzIGdhdGVkIGJ5IHRoZSBydW4gbGF0Y2guICBPcGVyYXRpbmcgc3lzdGVtcyB1c2UgdGhlIHJ1biBsYXRjaCB0byBpbmRpY2F0ZSB3aGVuIHRoZXkgYXJlIGRvaW5nIHVzZWZ1bCB3b3JrLiAgVGhlIHJ1biBsYXRjaCBpcyB0eXBpY2FsbHkgY2xlYXJlZCBpbiB0aGUgT1MgaWRsZSBsb29wLiAgR2F0aW5nIGJ5IHRoZSBydW4gbGF0Y2ggZmlsdGVycyBvdXQgdGhlIGlkbGUgbG9vcC4KKworI0dyb3VwIDE5IHBtX21pc2NfbWlzczQsIE1pc3NlcworZXZlbnQ6MFgwMTMwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EU0xCX01JU1NfR1JQMTkgOiAoR3JvdXAgMTkgcG1fbWlzY19taXNzNCkgQSBTTEIgbWlzcyBmb3IgYSBkYXRhIHJlcXVlc3Qgb2NjdXJyZWQuIFNMQiBtaXNzZXMgdHJhcCB0byB0aGUgb3BlcmF0aW5nIHN5c3RlbSB0byByZXNvbHZlLgorZXZlbnQ6MFgwMTMxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JTlNUX0ZST01fTDNNSVNTX0dSUDE5IDogKEdyb3VwIDE5IHBtX21pc2NfbWlzczQpIEFuIGluc3RydWN0aW9uIGZldGNoIGdyb3VwIHdhcyBmZXRjaGVkIGZyb20gYmV5b25kIEwzLiBGZXRjaCBncm91cHMgY2FuIGNvbnRhaW4gdXAgdG8gOCBpbnN0cnVjdGlvbnMuCitldmVudDowWDAxMzIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMTkgOiAoR3JvdXAgMTkgcG1fbWlzY19taXNzNCkgTnVtYmVyIG9mIFBvd2VyUEMgSW5zdHJ1Y3Rpb25zIHRoYXQgY29tcGxldGVkLgorZXZlbnQ6MFgwMTMzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDE5IDogKEdyb3VwIDE5IHBtX21pc2NfbWlzczQpIE51bWJlciBvZiBydW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZC4KK2V2ZW50OjBYMDEzNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlAxOSA6IChHcm91cCAxOSBwbV9taXNjX21pc3M0KSBOdW1iZXIgb2YgcnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQuCitldmVudDowWDAxMzUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDE5IDogKEdyb3VwIDE5IHBtX21pc2NfbWlzczQpIFByb2Nlc3NvciBDeWNsZXMgZ2F0ZWQgYnkgdGhlIHJ1biBsYXRjaC4gIE9wZXJhdGluZyBzeXN0ZW1zIHVzZSB0aGUgcnVuIGxhdGNoIHRvIGluZGljYXRlIHdoZW4gdGhleSBhcmUgZG9pbmcgdXNlZnVsIHdvcmsuICBUaGUgcnVuIGxhdGNoIGlzIHR5cGljYWxseSBjbGVhcmVkIGluIHRoZSBPUyBpZGxlIGxvb3AuICBHYXRpbmcgYnkgdGhlIHJ1biBsYXRjaCBmaWx0ZXJzIG91dCB0aGUgaWRsZSBsb29wLgorCisjR3JvdXAgMjAgcG1fbWlzY19taXNzNSwgTWlzc2VzCitldmVudDowWDAxNDAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lFUkFUX01JU1NfR1JQMjAgOiAoR3JvdXAgMjAgcG1fbWlzY19taXNzNSkgQSB0cmFuc2xhdGlvbiByZXF1ZXN0IG1pc3NlZCB0aGUgSW5zdHJ1Y3Rpb24gRWZmZWN0aXZlIHRvIFJlYWwgQWRkcmVzcyBUcmFuc2xhdGlvbiAoRVJBVCkgdGFibGUKK2V2ZW50OjBYMDE0MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRFNMQl9NSVNTX0dSUDIwIDogKEdyb3VwIDIwIHBtX21pc2NfbWlzczUpIEEgU0xCIG1pc3MgZm9yIGEgZGF0YSByZXF1ZXN0IG9jY3VycmVkLiBTTEIgbWlzc2VzIHRyYXAgdG8gdGhlIG9wZXJhdGluZyBzeXN0ZW0gdG8gcmVzb2x2ZS4KK2V2ZW50OjBYMDE0MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSVNMQl9NSVNTX0dSUDIwIDogKEdyb3VwIDIwIHBtX21pc2NfbWlzczUpIEEgU0xCIG1pc3MgZm9yIGFuIGluc3RydWN0aW9uIGZldGNoIGFzIG9jY3VycmVkCitldmVudDowWDAxNDMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMjAgOiAoR3JvdXAgMjAgcG1fbWlzY19taXNzNSkgTnVtYmVyIG9mIFBvd2VyUEMgSW5zdHJ1Y3Rpb25zIHRoYXQgY29tcGxldGVkLgorZXZlbnQ6MFgwMTQ0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDIwIDogKEdyb3VwIDIwIHBtX21pc2NfbWlzczUpIE51bWJlciBvZiBydW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZC4KK2V2ZW50OjBYMDE0NSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQMjAgOiAoR3JvdXAgMjAgcG1fbWlzY19taXNzNSkgUHJvY2Vzc29yIEN5Y2xlcyBnYXRlZCBieSB0aGUgcnVuIGxhdGNoLiAgT3BlcmF0aW5nIHN5c3RlbXMgdXNlIHRoZSBydW4gbGF0Y2ggdG8gaW5kaWNhdGUgd2hlbiB0aGV5IGFyZSBkb2luZyB1c2VmdWwgd29yay4gIFRoZSBydW4gbGF0Y2ggaXMgdHlwaWNhbGx5IGNsZWFyZWQgaW4gdGhlIE9TIGlkbGUgbG9vcC4gIEdhdGluZyBieSB0aGUgcnVuIGxhdGNoIGZpbHRlcnMgb3V0IHRoZSBpZGxlIGxvb3AuCisKKyNHcm91cCAyMSBwbV9wdGVnMSwgUFRFRyBzb3VyY2VzCitldmVudDowWDAxNTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1BURUdfRlJPTV9MMl9HUlAyMSA6IChHcm91cCAyMSBwbV9wdGVnMSkgQSBQYWdlIFRhYmxlIEVudHJ5IHdhcyBsb2FkZWQgaW50byB0aGUgRVJBVCBmcm9tIHRoZSBsb2NhbCBMMiBkdWUgdG8gYSBkZW1hbmQgbG9hZCBvciBzdG9yZS4KK2V2ZW50OjBYMDE1MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU5TVF9QVEVHX0ZST01fTDNfR1JQMjEgOiAoR3JvdXAgMjEgcG1fcHRlZzEpIEluc3RydWN0aW9uIFBURUcgbG9hZGVkIGZyb20gTDMKK2V2ZW50OjBYMDE1MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUFRFR19GUk9NX0wyMV9NT0RfR1JQMjEgOiAoR3JvdXAgMjEgcG1fcHRlZzEpIFBURUcgbG9hZGVkIGZyb20gYW5vdGhlciBMMiBvbiBzYW1lIGNoaXAgbW9kaWZpZWQKK2V2ZW50OjBYMDE1MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU5TVF9QVEVHX0ZST01fREwyTDNfTU9EX0dSUDIxIDogKEdyb3VwIDIxIHBtX3B0ZWcxKSBJbnN0cnVjdGlvbiBQVEVHIGxvYWRlZCBmcm9tIGRpc3RhbnQgTDIgb3IgTDMgbW9kaWZpZWQKK2V2ZW50OjBYMDE1NCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlAyMSA6IChHcm91cCAyMSBwbV9wdGVnMSkgTnVtYmVyIG9mIHJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkLgorZXZlbnQ6MFgwMTU1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAyMSA6IChHcm91cCAyMSBwbV9wdGVnMSkgUHJvY2Vzc29yIEN5Y2xlcyBnYXRlZCBieSB0aGUgcnVuIGxhdGNoLiAgT3BlcmF0aW5nIHN5c3RlbXMgdXNlIHRoZSBydW4gbGF0Y2ggdG8gaW5kaWNhdGUgd2hlbiB0aGV5IGFyZSBkb2luZyB1c2VmdWwgd29yay4gIFRoZSBydW4gbGF0Y2ggaXMgdHlwaWNhbGx5IGNsZWFyZWQgaW4gdGhlIE9TIGlkbGUgbG9vcC4gIEdhdGluZyBieSB0aGUgcnVuIGxhdGNoIGZpbHRlcnMgb3V0IHRoZSBpZGxlIGxvb3AuCisKKyNHcm91cCAyMiBwbV9wdGVnMiwgUFRFRyBzb3VyY2VzCitldmVudDowWDAxNjAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lOU1RfUFRFR19GUk9NX0wyX0dSUDIyIDogKEdyb3VwIDIyIHBtX3B0ZWcyKSBJbnN0cnVjdGlvbiBQVEVHIGxvYWRlZCBmcm9tIEwyCitldmVudDowWDAxNjEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lOU1RfUFRFR19GUk9NX1JMMkwzX1NIUl9HUlAyMiA6IChHcm91cCAyMiBwbV9wdGVnMikgSW5zdHJ1Y3Rpb24gUFRFRyBsb2FkZWQgZnJvbSByZW1vdGUgTDIgb3IgTDMgc2hhcmVkCitldmVudDowWDAxNjIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lOU1RfUFRFR19GUk9NX0RMMkwzX1NIUl9HUlAyMiA6IChHcm91cCAyMiBwbV9wdGVnMikgSW5zdHJ1Y3Rpb24gUFRFRyBsb2FkZWQgZnJvbSByZW1vdGUgTDIgb3IgTDMgc2hhcmVkCitldmVudDowWDAxNjMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1BURUdfRlJPTV9ETDJMM19NT0RfR1JQMjIgOiAoR3JvdXAgMjIgcG1fcHRlZzIpIEEgUGFnZSBUYWJsZSBFbnRyeSB3YXMgbG9hZGVkIGludG8gdGhlIEVSQVQgd2l0aCBtb2RpZmllZCAoTSkgZGF0YSBmcm9tIGFuIEwyICBvciBMMyBvbiBhIGRpc3RhbnQgbW9kdWxlIGR1ZSB0byBhIGRlbWFuZCBsb2FkIG9yIHN0b3JlLgorZXZlbnQ6MFgwMTY0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDIyIDogKEdyb3VwIDIyIHBtX3B0ZWcyKSBOdW1iZXIgb2YgcnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQuCitldmVudDowWDAxNjUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDIyIDogKEdyb3VwIDIyIHBtX3B0ZWcyKSBQcm9jZXNzb3IgQ3ljbGVzIGdhdGVkIGJ5IHRoZSBydW4gbGF0Y2guICBPcGVyYXRpbmcgc3lzdGVtcyB1c2UgdGhlIHJ1biBsYXRjaCB0byBpbmRpY2F0ZSB3aGVuIHRoZXkgYXJlIGRvaW5nIHVzZWZ1bCB3b3JrLiAgVGhlIHJ1biBsYXRjaCBpcyB0eXBpY2FsbHkgY2xlYXJlZCBpbiB0aGUgT1MgaWRsZSBsb29wLiAgR2F0aW5nIGJ5IHRoZSBydW4gbGF0Y2ggZmlsdGVycyBvdXQgdGhlIGlkbGUgbG9vcC4KKworI0dyb3VwIDIzIHBtX3B0ZWczLCBQVEVHIHNvdXJjZXMKK2V2ZW50OjBYMDE3MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUFRFR19GUk9NX0wzMV9NT0RfR1JQMjMgOiAoR3JvdXAgMjMgcG1fcHRlZzMpIFBURUcgbG9hZGVkIGZyb20gYW5vdGhlciBMMyBvbiBzYW1lIGNoaXAgbW9kaWZpZWQKK2V2ZW50OjBYMDE3MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUFRFR19GUk9NX0wzTUlTU19HUlAyMyA6IChHcm91cCAyMyBwbV9wdGVnMykgIFBhZ2UgVGFibGUgRW50cnkgd2FzIGxvYWRlZCBpbnRvIHRoZSBFUkFUIGZyb20gYmV5b25kIHRoZSBMMyBkdWUgdG8gYSBkZW1hbmQgbG9hZCBvciBzdG9yZS4KK2V2ZW50OjBYMDE3MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU5TVF9QVEVHX0ZST01fUk1FTV9HUlAyMyA6IChHcm91cCAyMyBwbV9wdGVnMykgSW5zdHJ1Y3Rpb24gUFRFRyBsb2FkZWQgZnJvbSByZW1vdGUgbWVtb3J5CitldmVudDowWDAxNzMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1BURUdfRlJPTV9MTUVNX0dSUDIzIDogKEdyb3VwIDIzIHBtX3B0ZWczKSBBIFBhZ2UgVGFibGUgRW50cnkgd2FzIGxvYWRlZCBpbnRvIHRoZSBUTEIgZnJvbSBtZW1vcnkgYXR0YWNoZWQgdG8gdGhlIHNhbWUgbW9kdWxlIHRoaXMgcHJvY2Vzc29yIGlzIGxvY2F0ZWQgb24uCitldmVudDowWDAxNzQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQMjMgOiAoR3JvdXAgMjMgcG1fcHRlZzMpIE51bWJlciBvZiBydW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZC4KK2V2ZW50OjBYMDE3NSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQMjMgOiAoR3JvdXAgMjMgcG1fcHRlZzMpIFByb2Nlc3NvciBDeWNsZXMgZ2F0ZWQgYnkgdGhlIHJ1biBsYXRjaC4gIE9wZXJhdGluZyBzeXN0ZW1zIHVzZSB0aGUgcnVuIGxhdGNoIHRvIGluZGljYXRlIHdoZW4gdGhleSBhcmUgZG9pbmcgdXNlZnVsIHdvcmsuICBUaGUgcnVuIGxhdGNoIGlzIHR5cGljYWxseSBjbGVhcmVkIGluIHRoZSBPUyBpZGxlIGxvb3AuICBHYXRpbmcgYnkgdGhlIHJ1biBsYXRjaCBmaWx0ZXJzIG91dCB0aGUgaWRsZSBsb29wLgorCisjR3JvdXAgMjQgcG1fcHRlZzQsIFBURUcgc291cmNlcworZXZlbnQ6MFgwMTgwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JTlNUX1BURUdfRlJPTV9STDJMM19NT0RfR1JQMjQgOiAoR3JvdXAgMjQgcG1fcHRlZzQpIEluc3RydWN0aW9uIFBURUcgbG9hZGVkIGZyb20gcmVtb3RlIEwyIG9yIEwzIG1vZGlmaWVkCitldmVudDowWDAxODEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1BURUdfRlJPTV9ETUVNX0dSUDI0IDogKEdyb3VwIDI0IHBtX3B0ZWc0KSBBIFBhZ2UgVGFibGUgRW50cnkgd2FzIGxvYWRlZCBpbnRvIHRoZSBFUkFUIHdpdGggZGF0YSBmcm9tIG1lbW9yeSBhdHRhY2hlZCB0byBhIGRpc3RhbnQgbW9kdWxlIGR1ZSB0byBhIGRlbWFuZCBsb2FkIG9yIHN0b3JlLgorZXZlbnQ6MFgwMTgyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9QVEVHX0ZST01fUk1FTV9HUlAyNCA6IChHcm91cCAyNCBwbV9wdGVnNCkgQSBQYWdlIFRhYmxlIEVudHJ5IHdhcyBsb2FkZWQgaW50byB0aGUgVExCIGZyb20gbWVtb3J5IGF0dGFjaGVkIHRvIGEgZGlmZmVyZW50IG1vZHVsZSB0aGFuIHRoaXMgcHJvY2Vzc29yIGlzIGxvY2F0ZWQgb24uCitldmVudDowWDAxODMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1BURUdfRlJPTV9MTUVNX0dSUDI0IDogKEdyb3VwIDI0IHBtX3B0ZWc0KSBBIFBhZ2UgVGFibGUgRW50cnkgd2FzIGxvYWRlZCBpbnRvIHRoZSBUTEIgZnJvbSBtZW1vcnkgYXR0YWNoZWQgdG8gdGhlIHNhbWUgbW9kdWxlIHRoaXMgcHJvY2Vzc29yIGlzIGxvY2F0ZWQgb24uCitldmVudDowWDAxODQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQMjQgOiAoR3JvdXAgMjQgcG1fcHRlZzQpIE51bWJlciBvZiBydW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZC4KK2V2ZW50OjBYMDE4NSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQMjQgOiAoR3JvdXAgMjQgcG1fcHRlZzQpIFByb2Nlc3NvciBDeWNsZXMgZ2F0ZWQgYnkgdGhlIHJ1biBsYXRjaC4gIE9wZXJhdGluZyBzeXN0ZW1zIHVzZSB0aGUgcnVuIGxhdGNoIHRvIGluZGljYXRlIHdoZW4gdGhleSBhcmUgZG9pbmcgdXNlZnVsIHdvcmsuICBUaGUgcnVuIGxhdGNoIGlzIHR5cGljYWxseSBjbGVhcmVkIGluIHRoZSBPUyBpZGxlIGxvb3AuICBHYXRpbmcgYnkgdGhlIHJ1biBsYXRjaCBmaWx0ZXJzIG91dCB0aGUgaWRsZSBsb29wLgorCisjR3JvdXAgMjUgcG1fcHRlZzUsIFBURUcgc291cmNlcworZXZlbnQ6MFgwMTkwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9QVEVHX0ZST01fUkwyTDNfTU9EX0dSUDI1IDogKEdyb3VwIDI1IHBtX3B0ZWc1KSBBIFBhZ2UgVGFibGUgRW50cnkgd2FzIGxvYWRlZCBpbnRvIHRoZSBFUkFUIHdpdGggbW9kaWZpZWQgKE0pIGRhdGEgZnJvbSBhbiBMMiAgb3IgTDMgb24gYSByZW1vdGUgbW9kdWxlIGR1ZSB0byBhIGRlbWFuZCBsb2FkIG9yIHN0b3JlLgorZXZlbnQ6MFgwMTkxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9QVEVHX0ZST01fTDMxX1NIUl9HUlAyNSA6IChHcm91cCAyNSBwbV9wdGVnNSkgUFRFRyBsb2FkZWQgZnJvbSBhbm90aGVyIEwzIG9uIHNhbWUgY2hpcCBzaGFyZWQKK2V2ZW50OjBYMDE5MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUFRFR19GUk9NX0RMMkwzX1NIUl9HUlAyNSA6IChHcm91cCAyNSBwbV9wdGVnNSkgQSBQYWdlIFRhYmxlIEVudHJ5IHdhcyBsb2FkZWQgaW50byB0aGUgRVJBVCB3aXRoIHNoYXJlZCAoVCBvciBTTCkgZGF0YSBmcm9tIGFuIEwyIG9yIEwzIG9uIGEgcmVtb3RlIG1vZHVsZSBkdWUgdG8gYSBkZW1hbmQgbG9hZCBvciBzdG9yZS4KK2V2ZW50OjBYMDE5MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUFRFR19GUk9NX0wyMV9TSFJfR1JQMjUgOiAoR3JvdXAgMjUgcG1fcHRlZzUpIFBURUcgbG9hZGVkIGZyb20gYW5vdGhlciBMMiBvbiBzYW1lIGNoaXAgc2hhcmVkCitldmVudDowWDAxOTQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQMjUgOiAoR3JvdXAgMjUgcG1fcHRlZzUpIE51bWJlciBvZiBydW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZC4KK2V2ZW50OjBYMDE5NSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQMjUgOiAoR3JvdXAgMjUgcG1fcHRlZzUpIFByb2Nlc3NvciBDeWNsZXMgZ2F0ZWQgYnkgdGhlIHJ1biBsYXRjaC4gIE9wZXJhdGluZyBzeXN0ZW1zIHVzZSB0aGUgcnVuIGxhdGNoIHRvIGluZGljYXRlIHdoZW4gdGhleSBhcmUgZG9pbmcgdXNlZnVsIHdvcmsuICBUaGUgcnVuIGxhdGNoIGlzIHR5cGljYWxseSBjbGVhcmVkIGluIHRoZSBPUyBpZGxlIGxvb3AuICBHYXRpbmcgYnkgdGhlIHJ1biBsYXRjaCBmaWx0ZXJzIG91dCB0aGUgaWRsZSBsb29wLgorCisjR3JvdXAgMjYgcG1fcHRlZzYsIFBURUcgc291cmNlcworZXZlbnQ6MFgwMUEwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JTlNUX1BURUdfRlJPTV9MMzFfTU9EX0dSUDI2IDogKEdyb3VwIDI2IHBtX3B0ZWc2KSBJbnN0cnVjdGlvbiBQVEVHIGxvYWRlZCBmcm9tIGFub3RoZXIgTDMgb24gc2FtZSBjaGlwIG1vZGlmaWVkCitldmVudDowWDAxQTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lOU1RfUFRFR19GUk9NX0RNRU1fR1JQMjYgOiAoR3JvdXAgMjYgcG1fcHRlZzYpIEluc3RydWN0aW9uIFBURUcgbG9hZGVkIGZyb20gZGlzdGFudCBtZW1vcnkKK2V2ZW50OjBYMDFBMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU5TVF9QVEVHX0ZST01fTDIxX01PRF9HUlAyNiA6IChHcm91cCAyNiBwbV9wdGVnNikgSW5zdHJ1Y3Rpb24gUFRFRyBsb2FkZWQgZnJvbSBhbm90aGVyIEwyIG9uIHNhbWUgY2hpcCBtb2RpZmllZAorZXZlbnQ6MFgwMUEzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JTlNUX1BURUdfRlJPTV9MTUVNX0dSUDI2IDogKEdyb3VwIDI2IHBtX3B0ZWc2KSBJbnN0cnVjdGlvbiBQVEVHIGxvYWRlZCBmcm9tIGxvY2FsIG1lbW9yeQorZXZlbnQ6MFgwMUE0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDI2IDogKEdyb3VwIDI2IHBtX3B0ZWc2KSBOdW1iZXIgb2YgcnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQuCitldmVudDowWDAxQTUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDI2IDogKEdyb3VwIDI2IHBtX3B0ZWc2KSBQcm9jZXNzb3IgQ3ljbGVzIGdhdGVkIGJ5IHRoZSBydW4gbGF0Y2guICBPcGVyYXRpbmcgc3lzdGVtcyB1c2UgdGhlIHJ1biBsYXRjaCB0byBpbmRpY2F0ZSB3aGVuIHRoZXkgYXJlIGRvaW5nIHVzZWZ1bCB3b3JrLiAgVGhlIHJ1biBsYXRjaCBpcyB0eXBpY2FsbHkgY2xlYXJlZCBpbiB0aGUgT1MgaWRsZSBsb29wLiAgR2F0aW5nIGJ5IHRoZSBydW4gbGF0Y2ggZmlsdGVycyBvdXQgdGhlIGlkbGUgbG9vcC4KKworI0dyb3VwIDI3IHBtX3B0ZWc3LCBQVEVHIHNvdXJjZXMKK2V2ZW50OjBYMDFCMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU5TVF9QVEVHX0ZST01fTDMxX01PRF9HUlAyNyA6IChHcm91cCAyNyBwbV9wdGVnNykgSW5zdHJ1Y3Rpb24gUFRFRyBsb2FkZWQgZnJvbSBhbm90aGVyIEwzIG9uIHNhbWUgY2hpcCBtb2RpZmllZAorZXZlbnQ6MFgwMUIxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JTlNUX1BURUdfRlJPTV9MMzFfU0hSX0dSUDI3IDogKEdyb3VwIDI3IHBtX3B0ZWc3KSBJbnN0cnVjdGlvbiBQVEVHIGxvYWRlZCBmcm9tIGFub3RoZXIgTDMgb24gc2FtZSBjaGlwIHNoYXJlZAorZXZlbnQ6MFgwMUIyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JTlNUX1BURUdfRlJPTV9MMjFfTU9EX0dSUDI3IDogKEdyb3VwIDI3IHBtX3B0ZWc3KSBJbnN0cnVjdGlvbiBQVEVHIGxvYWRlZCBmcm9tIGFub3RoZXIgTDIgb24gc2FtZSBjaGlwIG1vZGlmaWVkCitldmVudDowWDAxQjMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lOU1RfUFRFR19GUk9NX0wyMV9TSFJfR1JQMjcgOiAoR3JvdXAgMjcgcG1fcHRlZzcpIEluc3RydWN0aW9uIFBURUcgbG9hZGVkIGZyb20gYW5vdGhlciBMMiBvbiBzYW1lIGNoaXAgc2hhcmVkCitldmVudDowWDAxQjQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQMjcgOiAoR3JvdXAgMjcgcG1fcHRlZzcpIE51bWJlciBvZiBydW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZC4KK2V2ZW50OjBYMDFCNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQMjcgOiAoR3JvdXAgMjcgcG1fcHRlZzcpIFByb2Nlc3NvciBDeWNsZXMgZ2F0ZWQgYnkgdGhlIHJ1biBsYXRjaC4gIE9wZXJhdGluZyBzeXN0ZW1zIHVzZSB0aGUgcnVuIGxhdGNoIHRvIGluZGljYXRlIHdoZW4gdGhleSBhcmUgZG9pbmcgdXNlZnVsIHdvcmsuICBUaGUgcnVuIGxhdGNoIGlzIHR5cGljYWxseSBjbGVhcmVkIGluIHRoZSBPUyBpZGxlIGxvb3AuICBHYXRpbmcgYnkgdGhlIHJ1biBsYXRjaCBmaWx0ZXJzIG91dCB0aGUgaWRsZSBsb29wLgorCisjR3JvdXAgMjggcG1fcHRlZzgsIFBURUcgc291cmNlcworZXZlbnQ6MFgwMUMwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JTlNUX1BURUdfRlJPTV9MMl9HUlAyOCA6IChHcm91cCAyOCBwbV9wdGVnOCkgSW5zdHJ1Y3Rpb24gUFRFRyBsb2FkZWQgZnJvbSBMMgorZXZlbnQ6MFgwMUMxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JTlNUX1BURUdfRlJPTV9MM01JU1NfR1JQMjggOiAoR3JvdXAgMjggcG1fcHRlZzgpIEluc3RydWN0aW9uIFBURUcgbG9hZGVkIGZyb20gTDMgbWlzcworZXZlbnQ6MFgwMUMyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JTlNUX1BURUdfRlJPTV9STUVNX0dSUDI4IDogKEdyb3VwIDI4IHBtX3B0ZWc4KSBJbnN0cnVjdGlvbiBQVEVHIGxvYWRlZCBmcm9tIHJlbW90ZSBtZW1vcnkKK2V2ZW50OjBYMDFDMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU5TVF9QVEVHX0ZST01fTDJNSVNTX0dSUDI4IDogKEdyb3VwIDI4IHBtX3B0ZWc4KSBJbnN0cnVjdGlvbiBQVEVHIGxvYWRlZCBmcm9tIEwyIG1pc3MKK2V2ZW50OjBYMDFDNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlAyOCA6IChHcm91cCAyOCBwbV9wdGVnOCkgTnVtYmVyIG9mIHJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkLgorZXZlbnQ6MFgwMUM1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAyOCA6IChHcm91cCAyOCBwbV9wdGVnOCkgUHJvY2Vzc29yIEN5Y2xlcyBnYXRlZCBieSB0aGUgcnVuIGxhdGNoLiAgT3BlcmF0aW5nIHN5c3RlbXMgdXNlIHRoZSBydW4gbGF0Y2ggdG8gaW5kaWNhdGUgd2hlbiB0aGV5IGFyZSBkb2luZyB1c2VmdWwgd29yay4gIFRoZSBydW4gbGF0Y2ggaXMgdHlwaWNhbGx5IGNsZWFyZWQgaW4gdGhlIE9TIGlkbGUgbG9vcC4gIEdhdGluZyBieSB0aGUgcnVuIGxhdGNoIGZpbHRlcnMgb3V0IHRoZSBpZGxlIGxvb3AuCisKKyNHcm91cCAyOSBwbV9wdGVnOSwgUFRFRyBzb3VyY2VzCitldmVudDowWDAxRDAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1BURUdfRlJPTV9MMl9HUlAyOSA6IChHcm91cCAyOSBwbV9wdGVnOSkgQSBQYWdlIFRhYmxlIEVudHJ5IHdhcyBsb2FkZWQgaW50byB0aGUgRVJBVCBmcm9tIHRoZSBsb2NhbCBMMiBkdWUgdG8gYSBkZW1hbmQgbG9hZCBvciBzdG9yZS4KK2V2ZW50OjBYMDFEMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUFRFR19GUk9NX0wzX0dSUDI5IDogKEdyb3VwIDI5IHBtX3B0ZWc5KSBBIFBhZ2UgVGFibGUgRW50cnkgd2FzIGxvYWRlZCBpbnRvIHRoZSBUTEIgZnJvbSB0aGUgbG9jYWwgTDMgZHVlIHRvIGEgZGVtYW5kIGxvYWQuCitldmVudDowWDAxRDIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1BURUdfRlJPTV9STUVNX0dSUDI5IDogKEdyb3VwIDI5IHBtX3B0ZWc5KSBBIFBhZ2UgVGFibGUgRW50cnkgd2FzIGxvYWRlZCBpbnRvIHRoZSBUTEIgZnJvbSBtZW1vcnkgYXR0YWNoZWQgdG8gYSBkaWZmZXJlbnQgbW9kdWxlIHRoYW4gdGhpcyBwcm9jZXNzb3IgaXMgbG9jYXRlZCBvbi4KK2V2ZW50OjBYMDFEMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUFRFR19GUk9NX0wyTUlTU19HUlAyOSA6IChHcm91cCAyOSBwbV9wdGVnOSkgQSBQYWdlIFRhYmxlIEVudHJ5IHdhcyBsb2FkZWQgaW50byB0aGUgVExCIGJ1dCBub3QgZnJvbSB0aGUgbG9jYWwgTDIuCitldmVudDowWDAxRDQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQMjkgOiAoR3JvdXAgMjkgcG1fcHRlZzkpIE51bWJlciBvZiBydW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZC4KK2V2ZW50OjBYMDFENSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQMjkgOiAoR3JvdXAgMjkgcG1fcHRlZzkpIFByb2Nlc3NvciBDeWNsZXMgZ2F0ZWQgYnkgdGhlIHJ1biBsYXRjaC4gIE9wZXJhdGluZyBzeXN0ZW1zIHVzZSB0aGUgcnVuIGxhdGNoIHRvIGluZGljYXRlIHdoZW4gdGhleSBhcmUgZG9pbmcgdXNlZnVsIHdvcmsuICBUaGUgcnVuIGxhdGNoIGlzIHR5cGljYWxseSBjbGVhcmVkIGluIHRoZSBPUyBpZGxlIGxvb3AuICBHYXRpbmcgYnkgdGhlIHJ1biBsYXRjaCBmaWx0ZXJzIG91dCB0aGUgaWRsZSBsb29wLgorCisjR3JvdXAgMzAgcG1fcHRlZzEwLCBQVEVHIHNvdXJjZXMKK2V2ZW50OjBYMDFFMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUFRFR19GUk9NX0wyX0dSUDMwIDogKEdyb3VwIDMwIHBtX3B0ZWcxMCkgQSBQYWdlIFRhYmxlIEVudHJ5IHdhcyBsb2FkZWQgaW50byB0aGUgRVJBVCBmcm9tIHRoZSBsb2NhbCBMMiBkdWUgdG8gYSBkZW1hbmQgbG9hZCBvciBzdG9yZS4KK2V2ZW50OjBYMDFFMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUFRFR19GUk9NX0wzX0dSUDMwIDogKEdyb3VwIDMwIHBtX3B0ZWcxMCkgQSBQYWdlIFRhYmxlIEVudHJ5IHdhcyBsb2FkZWQgaW50byB0aGUgVExCIGZyb20gdGhlIGxvY2FsIEwzIGR1ZSB0byBhIGRlbWFuZCBsb2FkLgorZXZlbnQ6MFgwMUUyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDMwIDogKEdyb3VwIDMwIHBtX3B0ZWcxMCkgTnVtYmVyIG9mIFBvd2VyUEMgSW5zdHJ1Y3Rpb25zIHRoYXQgY29tcGxldGVkLgorZXZlbnQ6MFgwMUUzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDMwIDogKEdyb3VwIDMwIHBtX3B0ZWcxMCkgUHJvY2Vzc29yIEN5Y2xlcworZXZlbnQ6MFgwMUU0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDMwIDogKEdyb3VwIDMwIHBtX3B0ZWcxMCkgTnVtYmVyIG9mIHJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkLgorZXZlbnQ6MFgwMUU1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAzMCA6IChHcm91cCAzMCBwbV9wdGVnMTApIFByb2Nlc3NvciBDeWNsZXMgZ2F0ZWQgYnkgdGhlIHJ1biBsYXRjaC4gIE9wZXJhdGluZyBzeXN0ZW1zIHVzZSB0aGUgcnVuIGxhdGNoIHRvIGluZGljYXRlIHdoZW4gdGhleSBhcmUgZG9pbmcgdXNlZnVsIHdvcmsuICBUaGUgcnVuIGxhdGNoIGlzIHR5cGljYWxseSBjbGVhcmVkIGluIHRoZSBPUyBpZGxlIGxvb3AuICBHYXRpbmcgYnkgdGhlIHJ1biBsYXRjaCBmaWx0ZXJzIG91dCB0aGUgaWRsZSBsb29wLgorCisjR3JvdXAgMzEgcG1fcHRlZzExLCBQVEVHIHNvdXJjZXMKK2V2ZW50OjBYMDFGMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUFRFR19GUk9NX1JMMkwzX01PRF9HUlAzMSA6IChHcm91cCAzMSBwbV9wdGVnMTEpIEEgUGFnZSBUYWJsZSBFbnRyeSB3YXMgbG9hZGVkIGludG8gdGhlIEVSQVQgd2l0aCBtb2RpZmllZCAoTSkgZGF0YSBmcm9tIGFuIEwyICBvciBMMyBvbiBhIHJlbW90ZSBtb2R1bGUgZHVlIHRvIGEgZGVtYW5kIGxvYWQgb3Igc3RvcmUuCitldmVudDowWDAxRjEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1BURUdfRlJPTV9STDJMM19TSFJfR1JQMzEgOiAoR3JvdXAgMzEgcG1fcHRlZzExKSBBIFBhZ2UgVGFibGUgRW50cnkgd2FzIGxvYWRlZCBpbnRvIHRoZSBFUkFUIHdpdGggc2hhcmVkIChUIG9yIFNMKSBkYXRhIGZyb20gYW4gTDIgb3IgTDMgb24gYSByZW1vdGUgbW9kdWxlIGR1ZSB0byBhIGRlbWFuZCBsb2FkIG9yIHN0b3JlLgorZXZlbnQ6MFgwMUYyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDMxIDogKEdyb3VwIDMxIHBtX3B0ZWcxMSkgTnVtYmVyIG9mIFBvd2VyUEMgSW5zdHJ1Y3Rpb25zIHRoYXQgY29tcGxldGVkLgorZXZlbnQ6MFgwMUYzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9QVEVHX0ZST01fREwyTDNfTU9EX0dSUDMxIDogKEdyb3VwIDMxIHBtX3B0ZWcxMSkgQSBQYWdlIFRhYmxlIEVudHJ5IHdhcyBsb2FkZWQgaW50byB0aGUgRVJBVCB3aXRoIG1vZGlmaWVkIChNKSBkYXRhIGZyb20gYW4gTDIgIG9yIEwzIG9uIGEgZGlzdGFudCBtb2R1bGUgZHVlIHRvIGEgZGVtYW5kIGxvYWQgb3Igc3RvcmUuCitldmVudDowWDAxRjQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQMzEgOiAoR3JvdXAgMzEgcG1fcHRlZzExKSBOdW1iZXIgb2YgcnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQuCitldmVudDowWDAxRjUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDMxIDogKEdyb3VwIDMxIHBtX3B0ZWcxMSkgUHJvY2Vzc29yIEN5Y2xlcyBnYXRlZCBieSB0aGUgcnVuIGxhdGNoLiAgT3BlcmF0aW5nIHN5c3RlbXMgdXNlIHRoZSBydW4gbGF0Y2ggdG8gaW5kaWNhdGUgd2hlbiB0aGV5IGFyZSBkb2luZyB1c2VmdWwgd29yay4gIFRoZSBydW4gbGF0Y2ggaXMgdHlwaWNhbGx5IGNsZWFyZWQgaW4gdGhlIE9TIGlkbGUgbG9vcC4gIEdhdGluZyBieSB0aGUgcnVuIGxhdGNoIGZpbHRlcnMgb3V0IHRoZSBpZGxlIGxvb3AuCisKKyNHcm91cCAzMiBwbV9wdGVnMTIsIFBURUcgc291cmNlcworZXZlbnQ6MFgwMjAwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDMyIDogKEdyb3VwIDMyIHBtX3B0ZWcxMikgTnVtYmVyIG9mIFBvd2VyUEMgSW5zdHJ1Y3Rpb25zIHRoYXQgY29tcGxldGVkLgorZXZlbnQ6MFgwMjAxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9QVEVHX0ZST01fRE1FTV9HUlAzMiA6IChHcm91cCAzMiBwbV9wdGVnMTIpIEEgUGFnZSBUYWJsZSBFbnRyeSB3YXMgbG9hZGVkIGludG8gdGhlIEVSQVQgd2l0aCBkYXRhIGZyb20gbWVtb3J5IGF0dGFjaGVkIHRvIGEgZGlzdGFudCBtb2R1bGUgZHVlIHRvIGEgZGVtYW5kIGxvYWQgb3Igc3RvcmUuCitldmVudDowWDAyMDIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1BURUdfRlJPTV9STUVNX0dSUDMyIDogKEdyb3VwIDMyIHBtX3B0ZWcxMikgQSBQYWdlIFRhYmxlIEVudHJ5IHdhcyBsb2FkZWQgaW50byB0aGUgVExCIGZyb20gbWVtb3J5IGF0dGFjaGVkIHRvIGEgZGlmZmVyZW50IG1vZHVsZSB0aGFuIHRoaXMgcHJvY2Vzc29yIGlzIGxvY2F0ZWQgb24uCitldmVudDowWDAyMDMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1BURUdfRlJPTV9MTUVNX0dSUDMyIDogKEdyb3VwIDMyIHBtX3B0ZWcxMikgQSBQYWdlIFRhYmxlIEVudHJ5IHdhcyBsb2FkZWQgaW50byB0aGUgVExCIGZyb20gbWVtb3J5IGF0dGFjaGVkIHRvIHRoZSBzYW1lIG1vZHVsZSB0aGlzIHByb2Nlc3NvciBpcyBsb2NhdGVkIG9uLgorZXZlbnQ6MFgwMjA0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDMyIDogKEdyb3VwIDMyIHBtX3B0ZWcxMikgTnVtYmVyIG9mIHJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkLgorZXZlbnQ6MFgwMjA1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAzMiA6IChHcm91cCAzMiBwbV9wdGVnMTIpIFByb2Nlc3NvciBDeWNsZXMgZ2F0ZWQgYnkgdGhlIHJ1biBsYXRjaC4gIE9wZXJhdGluZyBzeXN0ZW1zIHVzZSB0aGUgcnVuIGxhdGNoIHRvIGluZGljYXRlIHdoZW4gdGhleSBhcmUgZG9pbmcgdXNlZnVsIHdvcmsuICBUaGUgcnVuIGxhdGNoIGlzIHR5cGljYWxseSBjbGVhcmVkIGluIHRoZSBPUyBpZGxlIGxvb3AuICBHYXRpbmcgYnkgdGhlIHJ1biBsYXRjaCBmaWx0ZXJzIG91dCB0aGUgaWRsZSBsb29wLgorCisjR3JvdXAgMzMgcG1fZnJlcTEsIEZyZXF1ZW5jeSBldmVudHMKK2V2ZW50OjBYMDIxMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUE9XRVJfRVZFTlQxX0dSUDMzIDogKEdyb3VwIDMzIHBtX2ZyZXExKSBQb3dlciBNYW5hZ2VtZW50IEV2ZW50IDEKK2V2ZW50OjBYMDIxMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRFBVX0hFTERfUE9XRVJfR1JQMzMgOiAoR3JvdXAgMzMgcG1fZnJlcTEpIEN5Y2xlcyB0aGF0IEluc3RydWN0aW9uIERpc3BhdGNoIHdhcyBoZWxkIGR1ZSB0byBwb3dlciBtYW5hZ2VtZW50LiBNb3JlIHRoYW4gb25lIGhvbGQgY29uZGl0aW9uIGNhbiBleGlzdCBhdCB0aGUgc2FtZSB0aW1lCitldmVudDowWDAyMTIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZSRVFfRE9XTl9HUlAzMyA6IChHcm91cCAzMyBwbV9mcmVxMSkgUHJvY2Vzc29yIGZyZXF1ZW5jeSB3YXMgc2xvd2VkIGRvd24gZHVlIHRvIHBvd2VyIG1hbmFnZW1lbnQKK2V2ZW50OjBYMDIxMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlJFUV9VUF9HUlAzMyA6IChHcm91cCAzMyBwbV9mcmVxMSkgUHJvY2Vzc29yIGZyZXF1ZW5jeSB3YXMgc3BlZCB1cCBkdWUgdG8gcG93ZXIgbWFuYWdlbWVudAorZXZlbnQ6MFgwMjE0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDMzIDogKEdyb3VwIDMzIHBtX2ZyZXExKSBOdW1iZXIgb2YgcnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQuCitldmVudDowWDAyMTUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDMzIDogKEdyb3VwIDMzIHBtX2ZyZXExKSBQcm9jZXNzb3IgQ3ljbGVzIGdhdGVkIGJ5IHRoZSBydW4gbGF0Y2guICBPcGVyYXRpbmcgc3lzdGVtcyB1c2UgdGhlIHJ1biBsYXRjaCB0byBpbmRpY2F0ZSB3aGVuIHRoZXkgYXJlIGRvaW5nIHVzZWZ1bCB3b3JrLiAgVGhlIHJ1biBsYXRjaCBpcyB0eXBpY2FsbHkgY2xlYXJlZCBpbiB0aGUgT1MgaWRsZSBsb29wLiAgR2F0aW5nIGJ5IHRoZSBydW4gbGF0Y2ggZmlsdGVycyBvdXQgdGhlIGlkbGUgbG9vcC4KKworI0dyb3VwIDM0IHBtX2ZyZXEyLCBGcmVxdWVuY3kgZXZlbnRzCitldmVudDowWDAyMjAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1BPV0VSX0VWRU5UMV9HUlAzNCA6IChHcm91cCAzNCBwbV9mcmVxMikgUG93ZXIgTWFuYWdlbWVudCBFdmVudCAxCitldmVudDowWDAyMjEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RQVV9IRUxEX1BPV0VSX0dSUDM0IDogKEdyb3VwIDM0IHBtX2ZyZXEyKSBDeWNsZXMgdGhhdCBJbnN0cnVjdGlvbiBEaXNwYXRjaCB3YXMgaGVsZCBkdWUgdG8gcG93ZXIgbWFuYWdlbWVudC4gTW9yZSB0aGFuIG9uZSBob2xkIGNvbmRpdGlvbiBjYW4gZXhpc3QgYXQgdGhlIHNhbWUgdGltZQorZXZlbnQ6MFgwMjIyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9ESVNQX0hFTERfVEhFUk1BTF9HUlAzNCA6IChHcm91cCAzNCBwbV9mcmVxMikgRGlzcGF0Y2ggSGVsZCBkdWUgdG8gVGhlcm1hbAorZXZlbnQ6MFgwMjIzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GUkVRX1VQX0dSUDM0IDogKEdyb3VwIDM0IHBtX2ZyZXEyKSBQcm9jZXNzb3IgZnJlcXVlbmN5IHdhcyBzcGVkIHVwIGR1ZSB0byBwb3dlciBtYW5hZ2VtZW50CitldmVudDowWDAyMjQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQMzQgOiAoR3JvdXAgMzQgcG1fZnJlcTIpIE51bWJlciBvZiBydW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZC4KK2V2ZW50OjBYMDIyNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQMzQgOiAoR3JvdXAgMzQgcG1fZnJlcTIpIFByb2Nlc3NvciBDeWNsZXMgZ2F0ZWQgYnkgdGhlIHJ1biBsYXRjaC4gIE9wZXJhdGluZyBzeXN0ZW1zIHVzZSB0aGUgcnVuIGxhdGNoIHRvIGluZGljYXRlIHdoZW4gdGhleSBhcmUgZG9pbmcgdXNlZnVsIHdvcmsuICBUaGUgcnVuIGxhdGNoIGlzIHR5cGljYWxseSBjbGVhcmVkIGluIHRoZSBPUyBpZGxlIGxvb3AuICBHYXRpbmcgYnkgdGhlIHJ1biBsYXRjaCBmaWx0ZXJzIG91dCB0aGUgaWRsZSBsb29wLgorCisjR3JvdXAgMzUgcG1fTDFfcmVmLCBMMSByZWZlcmVuY2VzCitldmVudDowWDAyMzAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xEX1JFRl9MMV9HUlAzNSA6IChHcm91cCAzNSBwbV9MMV9yZWYpICBMMSBEIGNhY2hlIGxvYWQgcmVmZXJlbmNlcyBjb3VudGVkIGF0IGZpbmlzaAorZXZlbnQ6MFgwMjMxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MRF9SRUZfTDFfTFNVMF9HUlAzNSA6IChHcm91cCAzNSBwbV9MMV9yZWYpIExvYWQgcmVmZXJlbmNlcyB0byBMZXZlbCAxIERhdGEgQ2FjaGUsIGJ5IHVuaXQgMC4KK2V2ZW50OjBYMDIzMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTERfUkVGX0wxX0xTVTFfR1JQMzUgOiAoR3JvdXAgMzUgcG1fTDFfcmVmKSBMb2FkIHJlZmVyZW5jZXMgdG8gTGV2ZWwgMSBEYXRhIENhY2hlLCBieSB1bml0IDEuCitldmVudDowWDAyMzMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9UV09fVEFCTEVXQUxLX0NZQ19HUlAzNSA6IChHcm91cCAzNSBwbV9MMV9yZWYpIEN5Y2xlcyB3aGVuIHR3byB0YWJsZXdhbGtzIHBlbmRpbmcgb24gdGhpcyB0aHJlYWQKK2V2ZW50OjBYMDIzNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlAzNSA6IChHcm91cCAzNSBwbV9MMV9yZWYpIE51bWJlciBvZiBydW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZC4KK2V2ZW50OjBYMDIzNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQMzUgOiAoR3JvdXAgMzUgcG1fTDFfcmVmKSBQcm9jZXNzb3IgQ3ljbGVzIGdhdGVkIGJ5IHRoZSBydW4gbGF0Y2guICBPcGVyYXRpbmcgc3lzdGVtcyB1c2UgdGhlIHJ1biBsYXRjaCB0byBpbmRpY2F0ZSB3aGVuIHRoZXkgYXJlIGRvaW5nIHVzZWZ1bCB3b3JrLiAgVGhlIHJ1biBsYXRjaCBpcyB0eXBpY2FsbHkgY2xlYXJlZCBpbiB0aGUgT1MgaWRsZSBsb29wLiAgR2F0aW5nIGJ5IHRoZSBydW4gbGF0Y2ggZmlsdGVycyBvdXQgdGhlIGlkbGUgbG9vcC4KKworI0dyb3VwIDM2IHBtX2ZsdXNoMSwgRmx1c2hlcworZXZlbnQ6MFgwMjQwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GTFVTSF9ESVNQX1NZTkNfR1JQMzYgOiAoR3JvdXAgMzYgcG1fZmx1c2gxKSBEaXNwYXRjaCBGbHVzaDogU3luYworZXZlbnQ6MFgwMjQxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GTFVTSF9ESVNQX1RMQklFX0dSUDM2IDogKEdyb3VwIDM2IHBtX2ZsdXNoMSkgRGlzcGF0Y2ggRmx1c2g6IFRMQklFCitldmVudDowWDAyNDIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZMVVNIX0RJU1BfU0JfR1JQMzYgOiAoR3JvdXAgMzYgcG1fZmx1c2gxKSBEaXNwYXRjaCBGbHVzaDogU2NvcmVib2FyZAorZXZlbnQ6MFgwMjQzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GTFVTSF9HUlAzNiA6IChHcm91cCAzNiBwbV9mbHVzaDEpIEZsdXNoZXMgb2NjdXJyZWQgaW5jbHVkaW5nIExTVSBhbmQgQnJhbmNoIGZsdXNoZXMuCitldmVudDowWDAyNDQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQMzYgOiAoR3JvdXAgMzYgcG1fZmx1c2gxKSBOdW1iZXIgb2YgcnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQuCitldmVudDowWDAyNDUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDM2IDogKEdyb3VwIDM2IHBtX2ZsdXNoMSkgUHJvY2Vzc29yIEN5Y2xlcyBnYXRlZCBieSB0aGUgcnVuIGxhdGNoLiAgT3BlcmF0aW5nIHN5c3RlbXMgdXNlIHRoZSBydW4gbGF0Y2ggdG8gaW5kaWNhdGUgd2hlbiB0aGV5IGFyZSBkb2luZyB1c2VmdWwgd29yay4gIFRoZSBydW4gbGF0Y2ggaXMgdHlwaWNhbGx5IGNsZWFyZWQgaW4gdGhlIE9TIGlkbGUgbG9vcC4gIEdhdGluZyBieSB0aGUgcnVuIGxhdGNoIGZpbHRlcnMgb3V0IHRoZSBpZGxlIGxvb3AuCisKKyNHcm91cCAzNyBwbV9mbHVzaDIsIEZsdXNoZXMKK2V2ZW50OjBYMDI1MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRkxVU0hfUEFSVElBTF9HUlAzNyA6IChHcm91cCAzNyBwbV9mbHVzaDIpIFBhcnRpYWwgZmx1c2gKK2V2ZW50OjBYMDI1MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRkxVU0hfRElTUF9HUlAzNyA6IChHcm91cCAzNyBwbV9mbHVzaDIpIERpc3BhdGNoIGZsdXNoCitldmVudDowWDAyNTIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9GTFVTSF9HUlAzNyA6IChHcm91cCAzNyBwbV9mbHVzaDIpIEEgZmx1c2ggd2FzIGluaXRpYXRlZCBieSB0aGUgTG9hZCBTdG9yZSBVbml0LgorZXZlbnQ6MFgwMjUzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1VfUEFSVElBTF9DREZfR1JQMzcgOiAoR3JvdXAgMzcgcG1fZmx1c2gyKSBBIHBhcnRpYWwgY2FjaGVsaW5lIHdhcyByZXR1cm5lZCBmcm9tIHRoZSBMMworZXZlbnQ6MFgwMjU0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDM3IDogKEdyb3VwIDM3IHBtX2ZsdXNoMikgTnVtYmVyIG9mIHJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkLgorZXZlbnQ6MFgwMjU1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAzNyA6IChHcm91cCAzNyBwbV9mbHVzaDIpIFByb2Nlc3NvciBDeWNsZXMgZ2F0ZWQgYnkgdGhlIHJ1biBsYXRjaC4gIE9wZXJhdGluZyBzeXN0ZW1zIHVzZSB0aGUgcnVuIGxhdGNoIHRvIGluZGljYXRlIHdoZW4gdGhleSBhcmUgZG9pbmcgdXNlZnVsIHdvcmsuICBUaGUgcnVuIGxhdGNoIGlzIHR5cGljYWxseSBjbGVhcmVkIGluIHRoZSBPUyBpZGxlIGxvb3AuICBHYXRpbmcgYnkgdGhlIHJ1biBsYXRjaCBmaWx0ZXJzIG91dCB0aGUgaWRsZSBsb29wLgorCisjR3JvdXAgMzggcG1fZmx1c2gsIEZsdXNoZXMKK2V2ZW50OjBYMDI2MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRkxVU0hfRElTUF9HUlAzOCA6IChHcm91cCAzOCBwbV9mbHVzaCkgRGlzcGF0Y2ggZmx1c2gKK2V2ZW50OjBYMDI2MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlAzOCA6IChHcm91cCAzOCBwbV9mbHVzaCkgUHJvY2Vzc29yIEN5Y2xlcworZXZlbnQ6MFgwMjYyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GTFVTSF9DT01QTEVUSU9OX0dSUDM4IDogKEdyb3VwIDM4IHBtX2ZsdXNoKSBDb21wbGV0aW9uIEZsdXNoCitldmVudDowWDAyNjMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZMVVNIX0dSUDM4IDogKEdyb3VwIDM4IHBtX2ZsdXNoKSBGbHVzaGVzIG9jY3VycmVkIGluY2x1ZGluZyBMU1UgYW5kIEJyYW5jaCBmbHVzaGVzLgorZXZlbnQ6MFgwMjY0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDM4IDogKEdyb3VwIDM4IHBtX2ZsdXNoKSBOdW1iZXIgb2YgcnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQuCitldmVudDowWDAyNjUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDM4IDogKEdyb3VwIDM4IHBtX2ZsdXNoKSBQcm9jZXNzb3IgQ3ljbGVzIGdhdGVkIGJ5IHRoZSBydW4gbGF0Y2guICBPcGVyYXRpbmcgc3lzdGVtcyB1c2UgdGhlIHJ1biBsYXRjaCB0byBpbmRpY2F0ZSB3aGVuIHRoZXkgYXJlIGRvaW5nIHVzZWZ1bCB3b3JrLiAgVGhlIHJ1biBsYXRjaCBpcyB0eXBpY2FsbHkgY2xlYXJlZCBpbiB0aGUgT1MgaWRsZSBsb29wLiAgR2F0aW5nIGJ5IHRoZSBydW4gbGF0Y2ggZmlsdGVycyBvdXQgdGhlIGlkbGUgbG9vcC4KKworI0dyb3VwIDM5IHBtX2xzdV9mbHVzaDEsIExTVSBGbHVzaAorZXZlbnQ6MFgwMjcwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1VfRkxVU0hfVUxEX0dSUDM5IDogKEdyb3VwIDM5IHBtX2xzdV9mbHVzaDEpIEEgbG9hZCB3YXMgZmx1c2hlZCBiZWNhdXNlIGl0IHdhcyB1bmFsaWduZWQgKGNyb3NzZWQgYSA2NGJ5dGUgYm91bmRhcnksIG9yIDMyIGJ5dGUgaWYgaXQgbWlzc2VkIHRoZSBMMSkuICBDb21iaW5lZCBVbml0IDAgKyAxLgorZXZlbnQ6MFgwMjcxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1VfRkxVU0hfVVNUX0dSUDM5IDogKEdyb3VwIDM5IHBtX2xzdV9mbHVzaDEpIEEgc3RvcmUgd2FzIGZsdXNoZWQgYmVjYXVzZSBpdCB3YXMgdW5hbGlnbmVkIChjcm9zc2VkIGEgNEsgYm91bmRhcnkpLiAgQ29tYmluZWQgVW5pdCAwICsgMS4KK2V2ZW50OjBYMDI3MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVX0ZMVVNIX0xSUV9HUlAzOSA6IChHcm91cCAzOSBwbV9sc3VfZmx1c2gxKSBMb2FkIEhpdCBMb2FkIG9yIFN0b3JlIEhpdCBMb2FkIGZsdXNoLiAgQSB5b3VuZ2VyIGxvYWQgd2FzIGZsdXNoZWQgYmVjYXVzZSBpdCBleGVjdXRlZCBiZWZvcmUgYW4gb2xkZXIgc3RvcmUgYW5kIHRoZXkgaGFkIG92ZXJsYXBwaW5nIGRhdGEgT1IgdHdvIGxvYWRzIGV4ZWN1dGVkIG91dCBvZiBvcmRlciBhbmQgdGhleSBoYXZlIGJ5dGUgb3ZlcmxhcCBhbmQgdGhlcmUgd2FzIGEgc25vb3AgaW4gYmV0d2VlbiB0byBhbiBvdmVybGFwcGVkIGJ5dGUuICBDb21iaW5lZCBVbml0IDAgKyAxLgorZXZlbnQ6MFgwMjczIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1VfRkxVU0hfU1JRX0dSUDM5IDogKEdyb3VwIDM5IHBtX2xzdV9mbHVzaDEpIExvYWQgSGl0IFN0b3JlIGZsdXNoLiAgQSB5b3VuZ2VyIGxvYWQgd2FzIGZsdXNoZWQgYmVjYXVzZSBpdCBoaXRzIChvdmVybGFwcykgYW4gb2xkZXIgc3RvcmUgdGhhdCBpcyBhbHJlYWR5IGluIHRoZSBTUlEgb3IgaW4gdGhlIHNhbWUgZ3JvdXAuICBJZiB0aGUgcmVhbCBhZGRyZXNzZXMgbWF0Y2ggYnV0IHRoZSBlZmZlY3RpdmUgYWRkcmVzc2VzIGRvIG5vdCwgYW4gYWxpYXMgY29uZGl0aW9uIGV4aXN0cyB0aGF0IHByZXZlbnRzIHN0b3JlIGZvcndhcmRpbmcuICBJZiB0aGUgbG9hZCBhbmQgc3RvcmUgYXJlIGluIHRoZSBzYW1lIGdyb3VwIHRoZSBsb2FkIG11c3QgYmUgZmx1c2hlZCB0byBzZXBhcmF0ZSB0aGUgdHdvIGluc3RydWN0aW9ucy4gIENvbWJpbmVkIFVuaXQgMCArIDEuCitldmVudDowWDAyNzQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQMzkgOiAoR3JvdXAgMzkgcG1fbHN1X2ZsdXNoMSkgTnVtYmVyIG9mIHJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkLgorZXZlbnQ6MFgwMjc1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAzOSA6IChHcm91cCAzOSBwbV9sc3VfZmx1c2gxKSBQcm9jZXNzb3IgQ3ljbGVzIGdhdGVkIGJ5IHRoZSBydW4gbGF0Y2guICBPcGVyYXRpbmcgc3lzdGVtcyB1c2UgdGhlIHJ1biBsYXRjaCB0byBpbmRpY2F0ZSB3aGVuIHRoZXkgYXJlIGRvaW5nIHVzZWZ1bCB3b3JrLiAgVGhlIHJ1biBsYXRjaCBpcyB0eXBpY2FsbHkgY2xlYXJlZCBpbiB0aGUgT1MgaWRsZSBsb29wLiAgR2F0aW5nIGJ5IHRoZSBydW4gbGF0Y2ggZmlsdGVycyBvdXQgdGhlIGlkbGUgbG9vcC4KKworI0dyb3VwIDQwIHBtX2xzdV9mbHVzaDIsIExTVSBGbHVzaCBVTEQKK2V2ZW50OjBYMDI4MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVX0ZMVVNIX1VMRF9HUlA0MCA6IChHcm91cCA0MCBwbV9sc3VfZmx1c2gyKSBBIGxvYWQgd2FzIGZsdXNoZWQgYmVjYXVzZSBpdCB3YXMgdW5hbGlnbmVkIChjcm9zc2VkIGEgNjRieXRlIGJvdW5kYXJ5LCBvciAzMiBieXRlIGlmIGl0IG1pc3NlZCB0aGUgTDEpLiAgQ29tYmluZWQgVW5pdCAwICsgMS4KK2V2ZW50OjBYMDI4MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVMF9GTFVTSF9VTERfR1JQNDAgOiAoR3JvdXAgNDAgcG1fbHN1X2ZsdXNoMikgQSBsb2FkIHdhcyBmbHVzaGVkIGZyb20gdW5pdCAwIGJlY2F1c2UgaXQgd2FzIHVuYWxpZ25lZCAoY3Jvc3NlZCBhIDY0IGJ5dGUgYm91bmRhcnksIG9yIDMyIGJ5dGUgaWYgaXQgbWlzc2VkIHRoZSBMMSkKK2V2ZW50OjBYMDI4MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVMV9GTFVTSF9VTERfR1JQNDAgOiAoR3JvdXAgNDAgcG1fbHN1X2ZsdXNoMikgQSBsb2FkIHdhcyBmbHVzaGVkIGZyb20gdW5pdCAxIGJlY2F1c2UgaXQgd2FzIHVuYWxpZ25lZCAoY3Jvc3NlZCBhIDY0IGJ5dGUgYm91bmRhcnksIG9yIDMyIGJ5dGUgaWYgaXQgbWlzc2VkIHRoZSBMMSkuCitldmVudDowWDAyODMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZMVVNIX0dSUDQwIDogKEdyb3VwIDQwIHBtX2xzdV9mbHVzaDIpIEZsdXNoZXMgb2NjdXJyZWQgaW5jbHVkaW5nIExTVSBhbmQgQnJhbmNoIGZsdXNoZXMuCitldmVudDowWDAyODQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQNDAgOiAoR3JvdXAgNDAgcG1fbHN1X2ZsdXNoMikgTnVtYmVyIG9mIHJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkLgorZXZlbnQ6MFgwMjg1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlA0MCA6IChHcm91cCA0MCBwbV9sc3VfZmx1c2gyKSBQcm9jZXNzb3IgQ3ljbGVzIGdhdGVkIGJ5IHRoZSBydW4gbGF0Y2guICBPcGVyYXRpbmcgc3lzdGVtcyB1c2UgdGhlIHJ1biBsYXRjaCB0byBpbmRpY2F0ZSB3aGVuIHRoZXkgYXJlIGRvaW5nIHVzZWZ1bCB3b3JrLiAgVGhlIHJ1biBsYXRjaCBpcyB0eXBpY2FsbHkgY2xlYXJlZCBpbiB0aGUgT1MgaWRsZSBsb29wLiAgR2F0aW5nIGJ5IHRoZSBydW4gbGF0Y2ggZmlsdGVycyBvdXQgdGhlIGlkbGUgbG9vcC4KKworI0dyb3VwIDQxIHBtX2xzdV9mbHVzaDMsIExTVSBGbHVzaCBVU1QKK2V2ZW50OjBYMDI5MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVX0ZMVVNIX1VTVF9HUlA0MSA6IChHcm91cCA0MSBwbV9sc3VfZmx1c2gzKSBBIHN0b3JlIHdhcyBmbHVzaGVkIGJlY2F1c2UgaXQgd2FzIHVuYWxpZ25lZCAoY3Jvc3NlZCBhIDRLIGJvdW5kYXJ5KS4gIENvbWJpbmVkIFVuaXQgMCArIDEuCitldmVudDowWDAyOTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVTBfRkxVU0hfVVNUX0dSUDQxIDogKEdyb3VwIDQxIHBtX2xzdV9mbHVzaDMpIEEgc3RvcmUgd2FzIGZsdXNoZWQgZnJvbSB1bml0IDAgYmVjYXVzZSBpdCB3YXMgdW5hbGlnbmVkIChjcm9zc2VkIGEgNEsgYm91bmRhcnkpLgorZXZlbnQ6MFgwMjkyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1UxX0ZMVVNIX1VTVF9HUlA0MSA6IChHcm91cCA0MSBwbV9sc3VfZmx1c2gzKSBBIHN0b3JlIHdhcyBmbHVzaGVkIGZyb20gdW5pdCAxIGJlY2F1c2UgaXQgd2FzIHVuYWxpZ25lZCAoY3Jvc3NlZCBhIDRLIGJvdW5kYXJ5KQorZXZlbnQ6MFgwMjkzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GTFVTSF9HUlA0MSA6IChHcm91cCA0MSBwbV9sc3VfZmx1c2gzKSBGbHVzaGVzIG9jY3VycmVkIGluY2x1ZGluZyBMU1UgYW5kIEJyYW5jaCBmbHVzaGVzLgorZXZlbnQ6MFgwMjk0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDQxIDogKEdyb3VwIDQxIHBtX2xzdV9mbHVzaDMpIE51bWJlciBvZiBydW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZC4KK2V2ZW50OjBYMDI5NSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQNDEgOiAoR3JvdXAgNDEgcG1fbHN1X2ZsdXNoMykgUHJvY2Vzc29yIEN5Y2xlcyBnYXRlZCBieSB0aGUgcnVuIGxhdGNoLiAgT3BlcmF0aW5nIHN5c3RlbXMgdXNlIHRoZSBydW4gbGF0Y2ggdG8gaW5kaWNhdGUgd2hlbiB0aGV5IGFyZSBkb2luZyB1c2VmdWwgd29yay4gIFRoZSBydW4gbGF0Y2ggaXMgdHlwaWNhbGx5IGNsZWFyZWQgaW4gdGhlIE9TIGlkbGUgbG9vcC4gIEdhdGluZyBieSB0aGUgcnVuIGxhdGNoIGZpbHRlcnMgb3V0IHRoZSBpZGxlIGxvb3AuCisKKyNHcm91cCA0MiBwbV9sc3VfZmx1c2g0LCBMU1UgRmx1c2ggTFJRCitldmVudDowWDAyQTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9GTFVTSF9MUlFfR1JQNDIgOiAoR3JvdXAgNDIgcG1fbHN1X2ZsdXNoNCkgTG9hZCBIaXQgTG9hZCBvciBTdG9yZSBIaXQgTG9hZCBmbHVzaC4gIEEgeW91bmdlciBsb2FkIHdhcyBmbHVzaGVkIGJlY2F1c2UgaXQgZXhlY3V0ZWQgYmVmb3JlIGFuIG9sZGVyIHN0b3JlIGFuZCB0aGV5IGhhZCBvdmVybGFwcGluZyBkYXRhIE9SIHR3byBsb2FkcyBleGVjdXRlZCBvdXQgb2Ygb3JkZXIgYW5kIHRoZXkgaGF2ZSBieXRlIG92ZXJsYXAgYW5kIHRoZXJlIHdhcyBhIHNub29wIGluIGJldHdlZW4gdG8gYW4gb3ZlcmxhcHBlZCBieXRlLiAgQ29tYmluZWQgVW5pdCAwICsgMS4KK2V2ZW50OjBYMDJBMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVMF9GTFVTSF9MUlFfR1JQNDIgOiAoR3JvdXAgNDIgcG1fbHN1X2ZsdXNoNCkgTG9hZCBIaXQgTG9hZCBvciBTdG9yZSBIaXQgTG9hZCBmbHVzaC4gIEEgeW91bmdlciBsb2FkIHdhcyBmbHVzaGVkIGZyb20gdW5pdCAwIGJlY2F1c2UgaXQgZXhlY3V0ZWQgYmVmb3JlIGFuIG9sZGVyIHN0b3JlIGFuZCB0aGV5IGhhZCBvdmVybGFwcGluZyBkYXRhIE9SIHR3byBsb2FkcyBleGVjdXRlZCBvdXQgb2Ygb3JkZXIgYW5kIHRoZXkgaGF2ZSBieXRlIG92ZXJsYXAgYW5kIHRoZXJlIHdhcyBhIHNub29wIGluIGJldHdlZW4gdG8gYW4gb3ZlcmxhcHBlZCBieXRlLgorZXZlbnQ6MFgwMkEyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1UxX0ZMVVNIX0xSUV9HUlA0MiA6IChHcm91cCA0MiBwbV9sc3VfZmx1c2g0KSBMb2FkIEhpdCBMb2FkIG9yIFN0b3JlIEhpdCBMb2FkIGZsdXNoLiAgQSB5b3VuZ2VyIGxvYWQgd2FzIGZsdXNoZWQgZnJvbSB1bml0IDEgYmVjYXVzZSBpdCBleGVjdXRlZCBiZWZvcmUgYW4gb2xkZXIgc3RvcmUgYW5kIHRoZXkgaGFkIG92ZXJsYXBwaW5nIGRhdGEgT1IgdHdvIGxvYWRzIGV4ZWN1dGVkIG91dCBvZiBvcmRlciBhbmQgdGhleSBoYXZlIGJ5dGUgb3ZlcmxhcCBhbmQgdGhlcmUgd2FzIGEgc25vb3AgaW4gYmV0d2VlbiB0byBhbiBvdmVybGFwcGVkIGJ5dGUuCitldmVudDowWDAyQTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZMVVNIX0dSUDQyIDogKEdyb3VwIDQyIHBtX2xzdV9mbHVzaDQpIEZsdXNoZXMgb2NjdXJyZWQgaW5jbHVkaW5nIExTVSBhbmQgQnJhbmNoIGZsdXNoZXMuCitldmVudDowWDAyQTQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQNDIgOiAoR3JvdXAgNDIgcG1fbHN1X2ZsdXNoNCkgTnVtYmVyIG9mIHJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkLgorZXZlbnQ6MFgwMkE1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlA0MiA6IChHcm91cCA0MiBwbV9sc3VfZmx1c2g0KSBQcm9jZXNzb3IgQ3ljbGVzIGdhdGVkIGJ5IHRoZSBydW4gbGF0Y2guICBPcGVyYXRpbmcgc3lzdGVtcyB1c2UgdGhlIHJ1biBsYXRjaCB0byBpbmRpY2F0ZSB3aGVuIHRoZXkgYXJlIGRvaW5nIHVzZWZ1bCB3b3JrLiAgVGhlIHJ1biBsYXRjaCBpcyB0eXBpY2FsbHkgY2xlYXJlZCBpbiB0aGUgT1MgaWRsZSBsb29wLiAgR2F0aW5nIGJ5IHRoZSBydW4gbGF0Y2ggZmlsdGVycyBvdXQgdGhlIGlkbGUgbG9vcC4KKworI0dyb3VwIDQzIHBtX2xzdV9mbHVzaDUsIExTVSBGbHVzaCBTUlEKK2V2ZW50OjBYMDJCMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVX0ZMVVNIX1NSUV9HUlA0MyA6IChHcm91cCA0MyBwbV9sc3VfZmx1c2g1KSBMb2FkIEhpdCBTdG9yZSBmbHVzaC4gIEEgeW91bmdlciBsb2FkIHdhcyBmbHVzaGVkIGJlY2F1c2UgaXQgaGl0cyAob3ZlcmxhcHMpIGFuIG9sZGVyIHN0b3JlIHRoYXQgaXMgYWxyZWFkeSBpbiB0aGUgU1JRIG9yIGluIHRoZSBzYW1lIGdyb3VwLiAgSWYgdGhlIHJlYWwgYWRkcmVzc2VzIG1hdGNoIGJ1dCB0aGUgZWZmZWN0aXZlIGFkZHJlc3NlcyBkbyBub3QsIGFuIGFsaWFzIGNvbmRpdGlvbiBleGlzdHMgdGhhdCBwcmV2ZW50cyBzdG9yZSBmb3J3YXJkaW5nLiAgSWYgdGhlIGxvYWQgYW5kIHN0b3JlIGFyZSBpbiB0aGUgc2FtZSBncm91cCB0aGUgbG9hZCBtdXN0IGJlIGZsdXNoZWQgdG8gc2VwYXJhdGUgdGhlIHR3byBpbnN0cnVjdGlvbnMuICBDb21iaW5lZCBVbml0IDAgKyAxLgorZXZlbnQ6MFgwMkIxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1UwX0ZMVVNIX1NSUV9HUlA0MyA6IChHcm91cCA0MyBwbV9sc3VfZmx1c2g1KSBMb2FkIEhpdCBTdG9yZSBmbHVzaC4gIEEgeW91bmdlciBsb2FkIHdhcyBmbHVzaGVkIGZyb20gdW5pdCAwIGJlY2F1c2UgaXQgaGl0cyAob3ZlcmxhcHMpIGFuIG9sZGVyIHN0b3JlIHRoYXQgaXMgYWxyZWFkeSBpbiB0aGUgU1JRIG9yIGluIHRoZSBzYW1lIGdyb3VwLiAgSWYgdGhlIHJlYWwgYWRkcmVzc2VzIG1hdGNoIGJ1dCB0aGUgZWZmZWN0aXZlIGFkZHJlc3NlcyBkbyBub3QsIGFuIGFsaWFzIGNvbmRpdGlvbiBleGlzdHMgdGhhdCBwcmV2ZW50cyBzdG9yZSBmb3J3YXJkaW5nLiAgSWYgdGhlIGxvYWQgYW5kIHN0b3JlIGFyZSBpbiB0aGUgc2FtZSBncm91cCB0aGUgbG9hZCBtdXN0IGJlIGZsdXNoZWQgdG8gc2VwYXJhdGUgdGhlIHR3byBpbnN0cnVjdGlvbnMuCitldmVudDowWDAyQjIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVTFfRkxVU0hfU1JRX0dSUDQzIDogKEdyb3VwIDQzIHBtX2xzdV9mbHVzaDUpIExvYWQgSGl0IFN0b3JlIGZsdXNoLiAgQSB5b3VuZ2VyIGxvYWQgd2FzIGZsdXNoZWQgZnJvbSB1bml0IDEgYmVjYXVzZSBpdCBoaXRzIChvdmVybGFwcykgYW4gb2xkZXIgc3RvcmUgdGhhdCBpcyBhbHJlYWR5IGluIHRoZSBTUlEgb3IgaW4gdGhlIHNhbWUgZ3JvdXAuICBJZiB0aGUgcmVhbCBhZGRyZXNzZXMgbWF0Y2ggYnV0IHRoZSBlZmZlY3RpdmUgYWRkcmVzc2VzIGRvIG5vdCwgYW4gYWxpYXMgY29uZGl0aW9uIGV4aXN0cyB0aGF0IHByZXZlbnRzIHN0b3JlIGZvcndhcmRpbmcuICBJZiB0aGUgbG9hZCBhbmQgc3RvcmUgYXJlIGluIHRoZSBzYW1lIGdyb3VwIHRoZSBsb2FkIG11c3QgYmUgZmx1c2hlZCB0byBzZXBhcmF0ZSB0aGUgdHdvIGluc3RydWN0aW9ucy4KK2V2ZW50OjBYMDJCMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRkxVU0hfR1JQNDMgOiAoR3JvdXAgNDMgcG1fbHN1X2ZsdXNoNSkgRmx1c2hlcyBvY2N1cnJlZCBpbmNsdWRpbmcgTFNVIGFuZCBCcmFuY2ggZmx1c2hlcy4KK2V2ZW50OjBYMDJCNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlA0MyA6IChHcm91cCA0MyBwbV9sc3VfZmx1c2g1KSBOdW1iZXIgb2YgcnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQuCitldmVudDowWDAyQjUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDQzIDogKEdyb3VwIDQzIHBtX2xzdV9mbHVzaDUpIFByb2Nlc3NvciBDeWNsZXMgZ2F0ZWQgYnkgdGhlIHJ1biBsYXRjaC4gIE9wZXJhdGluZyBzeXN0ZW1zIHVzZSB0aGUgcnVuIGxhdGNoIHRvIGluZGljYXRlIHdoZW4gdGhleSBhcmUgZG9pbmcgdXNlZnVsIHdvcmsuICBUaGUgcnVuIGxhdGNoIGlzIHR5cGljYWxseSBjbGVhcmVkIGluIHRoZSBPUyBpZGxlIGxvb3AuICBHYXRpbmcgYnkgdGhlIHJ1biBsYXRjaCBmaWx0ZXJzIG91dCB0aGUgaWRsZSBsb29wLgorCisjR3JvdXAgNDQgcG1fcHJlZmV0Y2gsIEkgY2FjaGUgUHJlZmV0Y2hlcworZXZlbnQ6MFgwMkMwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JQ19ERU1BTkRfQ1lDX0dSUDQ0IDogKEdyb3VwIDQ0IHBtX3ByZWZldGNoKSBDeWNsZXMgd2hlbiBhIGRlbWFuZCBpZmV0Y2ggd2FzIHBlbmRpbmcKK2V2ZW50OjBYMDJDMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSUNfUFJFRl9SRVFfR1JQNDQgOiAoR3JvdXAgNDQgcG1fcHJlZmV0Y2gpIEFuIGluc3RydWN0aW9uIHByZWZldGNoIHJlcXVlc3QgaGFzIGJlZW4gbWFkZS4KK2V2ZW50OjBYMDJDMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSUNfUkVMT0FEX1NIUl9HUlA0NCA6IChHcm91cCA0NCBwbV9wcmVmZXRjaCkgQW4gSW5zdHJ1Y3Rpb24gQ2FjaGUgcmVxdWVzdCB3YXMgbWFkZSBieSB0aGlzIHRocmVhZCBhbmQgdGhlIGNhY2hlIGxpbmUgd2FzIGFscmVhZHkgaW4gdGhlIGNhY2hlIGZvciB0aGUgb3RoZXIgdGhyZWFkLiBUaGUgbGluZSBpcyBtYXJrZWQgdmFsaWQgZm9yIGFsbCB0aHJlYWRzLgorZXZlbnQ6MFgwMkMzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JQ19QUkVGX1dSSVRFX0dSUDQ0IDogKEdyb3VwIDQ0IHBtX3ByZWZldGNoKSBOdW1iZXIgb2YgSW5zdHJ1Y3Rpb24gQ2FjaGUgZW50cmllcyB3cml0dGVuIGJlY2F1c2Ugb2YgcHJlZmV0Y2guIFByZWZldGNoIGVudHJpZXMgYXJlIG1hcmtlZCBsZWFzdCByZWNlbnRseSB1c2VkIGFuZCBhcmUgY2FuZGlkYXRlcyBmb3IgZXZpY3Rpb24gaWYgdGhleSBhcmUgbm90IG5lZWRlZCB0byBzYXRpZnkgYSBkZW1hbmQgZmV0Y2guCitldmVudDowWDAyQzQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQNDQgOiAoR3JvdXAgNDQgcG1fcHJlZmV0Y2gpIE51bWJlciBvZiBydW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZC4KK2V2ZW50OjBYMDJDNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQNDQgOiAoR3JvdXAgNDQgcG1fcHJlZmV0Y2gpIFByb2Nlc3NvciBDeWNsZXMgZ2F0ZWQgYnkgdGhlIHJ1biBsYXRjaC4gIE9wZXJhdGluZyBzeXN0ZW1zIHVzZSB0aGUgcnVuIGxhdGNoIHRvIGluZGljYXRlIHdoZW4gdGhleSBhcmUgZG9pbmcgdXNlZnVsIHdvcmsuICBUaGUgcnVuIGxhdGNoIGlzIHR5cGljYWxseSBjbGVhcmVkIGluIHRoZSBPUyBpZGxlIGxvb3AuICBHYXRpbmcgYnkgdGhlIHJ1biBsYXRjaCBmaWx0ZXJzIG91dCB0aGUgaWRsZSBsb29wLgorCisjR3JvdXAgNDUgcG1fdGhyZWFkX2N5YzIsIFRocmVhZCBjeWNsZXMKK2V2ZW50OjBYMDJEMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fVEhSRF9HUlBfQ01QTF9CT1RIX0NZQ19HUlA0NSA6IChHcm91cCA0NSBwbV90aHJlYWRfY3ljMikgQ3ljbGVzIHRoYXQgYm90aCB0aHJlYWRzIGNvbXBsZXRlZC4KK2V2ZW50OjBYMDJEMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fVEhSRF9BTExfUlVOX0NZQ19HUlA0NSA6IChHcm91cCA0NSBwbV90aHJlYWRfY3ljMikgQ3ljbGVzIHdoZW4gYWxsIHRocmVhZHMgaGFkIHRoZWlyIHJ1biBsYXRjaGVzIHNldC4gT3BlcmF0aW5nIHN5c3RlbXMgdXNlIHRoZSBydW4gbGF0Y2ggdG8gaW5kaWNhdGUgd2hlbiB0aGV5IGFyZSBkb2luZyB1c2VmdWwgd29yay4KK2V2ZW50OjBYMDJEMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fVEhSRF9DT05DX1JVTl9JTlNUX0dSUDQ1IDogKEdyb3VwIDQ1IHBtX3RocmVhZF9jeWMyKSBJbnN0cnVjdGlvbnMgY29tcGxldGVkIGJ5IHRoaXMgdGhyZWFkIHdoZW4gYm90aCB0aHJlYWRzIGhhZCB0aGVpciBydW4gbGF0Y2hlcyBzZXQuCitldmVudDowWDAyRDMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1RIUkRfUFJJT18wXzFfQ1lDX0dSUDQ1IDogKEdyb3VwIDQ1IHBtX3RocmVhZF9jeWMyKSAgQ3ljbGVzIHRocmVhZCBydW5uaW5nIGF0IHByaW9yaXR5IGxldmVsIDAgb3IgMQorZXZlbnQ6MFgwMkQ0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDQ1IDogKEdyb3VwIDQ1IHBtX3RocmVhZF9jeWMyKSBOdW1iZXIgb2YgcnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQuCitldmVudDowWDAyRDUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDQ1IDogKEdyb3VwIDQ1IHBtX3RocmVhZF9jeWMyKSBQcm9jZXNzb3IgQ3ljbGVzIGdhdGVkIGJ5IHRoZSBydW4gbGF0Y2guICBPcGVyYXRpbmcgc3lzdGVtcyB1c2UgdGhlIHJ1biBsYXRjaCB0byBpbmRpY2F0ZSB3aGVuIHRoZXkgYXJlIGRvaW5nIHVzZWZ1bCB3b3JrLiAgVGhlIHJ1biBsYXRjaCBpcyB0eXBpY2FsbHkgY2xlYXJlZCBpbiB0aGUgT1MgaWRsZSBsb29wLiAgR2F0aW5nIGJ5IHRoZSBydW4gbGF0Y2ggZmlsdGVycyBvdXQgdGhlIGlkbGUgbG9vcC4KKworI0dyb3VwIDQ2IHBtX3RocmVhZF9jeWM1LCBUaHJlYWQgY3ljbGVzCitldmVudDowWDAyRTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1RIUkRfUFJJT18wXzFfQ1lDX0dSUDQ2IDogKEdyb3VwIDQ2IHBtX3RocmVhZF9jeWM1KSAgQ3ljbGVzIHRocmVhZCBydW5uaW5nIGF0IHByaW9yaXR5IGxldmVsIDAgb3IgMQorZXZlbnQ6MFgwMkUxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9USFJEX1BSSU9fMl8zX0NZQ19HUlA0NiA6IChHcm91cCA0NiBwbV90aHJlYWRfY3ljNSkgIEN5Y2xlcyB0aHJlYWQgcnVubmluZyBhdCBwcmlvcml0eSBsZXZlbCAyIG9yIDMKK2V2ZW50OjBYMDJFMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fVEhSRF9QUklPXzRfNV9DWUNfR1JQNDYgOiAoR3JvdXAgNDYgcG1fdGhyZWFkX2N5YzUpICBDeWNsZXMgdGhyZWFkIHJ1bm5pbmcgYXQgcHJpb3JpdHkgbGV2ZWwgNCBvciA1CitldmVudDowWDAyRTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1RIUkRfUFJJT182XzdfQ1lDX0dSUDQ2IDogKEdyb3VwIDQ2IHBtX3RocmVhZF9jeWM1KSAgQ3ljbGVzIHRocmVhZCBydW5uaW5nIGF0IHByaW9yaXR5IGxldmVsIDYgb3IgNworZXZlbnQ6MFgwMkU0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDQ2IDogKEdyb3VwIDQ2IHBtX3RocmVhZF9jeWM1KSBOdW1iZXIgb2YgcnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQuCitldmVudDowWDAyRTUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDQ2IDogKEdyb3VwIDQ2IHBtX3RocmVhZF9jeWM1KSBQcm9jZXNzb3IgQ3ljbGVzIGdhdGVkIGJ5IHRoZSBydW4gbGF0Y2guICBPcGVyYXRpbmcgc3lzdGVtcyB1c2UgdGhlIHJ1biBsYXRjaCB0byBpbmRpY2F0ZSB3aGVuIHRoZXkgYXJlIGRvaW5nIHVzZWZ1bCB3b3JrLiAgVGhlIHJ1biBsYXRjaCBpcyB0eXBpY2FsbHkgY2xlYXJlZCBpbiB0aGUgT1MgaWRsZSBsb29wLiAgR2F0aW5nIGJ5IHRoZSBydW4gbGF0Y2ggZmlsdGVycyBvdXQgdGhlIGlkbGUgbG9vcC4KKworI0dyb3VwIDQ3IHBtX2Z4dTEsIEZYVSBldmVudHMKK2V2ZW50OjBYMDJGMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlhVX0lETEVfR1JQNDcgOiAoR3JvdXAgNDcgcG1fZnh1MSkgRlhVMCBhbmQgRlhVMSBhcmUgYm90aCBpZGxlLgorZXZlbnQ6MFgwMkYxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GWFVfQlVTWV9HUlA0NyA6IChHcm91cCA0NyBwbV9meHUxKSBDeWNsZXMgd2hlbiBib3RoIEZYVTAgYW5kIEZYVTEgYXJlIGJ1c3kuCitldmVudDowWDAyRjIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZYVTBfQlVTWV9GWFUxX0lETEVfR1JQNDcgOiAoR3JvdXAgNDcgcG1fZnh1MSkgRlhVMCBpcyBidXN5IHdoaWxlIEZYVTEgd2FzIGlkbGUKK2V2ZW50OjBYMDJGMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlhVMV9CVVNZX0ZYVTBfSURMRV9HUlA0NyA6IChHcm91cCA0NyBwbV9meHUxKSBGWFUwIHdhcyBpZGxlIHdoaWxlIEZYVTEgd2FzIGJ1c3kKK2V2ZW50OjBYMDJGNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlA0NyA6IChHcm91cCA0NyBwbV9meHUxKSBOdW1iZXIgb2YgcnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQuCitldmVudDowWDAyRjUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDQ3IDogKEdyb3VwIDQ3IHBtX2Z4dTEpIFByb2Nlc3NvciBDeWNsZXMgZ2F0ZWQgYnkgdGhlIHJ1biBsYXRjaC4gIE9wZXJhdGluZyBzeXN0ZW1zIHVzZSB0aGUgcnVuIGxhdGNoIHRvIGluZGljYXRlIHdoZW4gdGhleSBhcmUgZG9pbmcgdXNlZnVsIHdvcmsuICBUaGUgcnVuIGxhdGNoIGlzIHR5cGljYWxseSBjbGVhcmVkIGluIHRoZSBPUyBpZGxlIGxvb3AuICBHYXRpbmcgYnkgdGhlIHJ1biBsYXRjaCBmaWx0ZXJzIG91dCB0aGUgaWRsZSBsb29wLgorCisjR3JvdXAgNDggcG1fZnh1MiwgRlhVIGV2ZW50cworZXZlbnQ6MFgwMzAwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GWFUwX0ZJTl9HUlA0OCA6IChHcm91cCA0OCBwbV9meHUyKSBUaGUgRml4ZWQgUG9pbnQgdW5pdCAwIGZpbmlzaGVkIGFuIGluc3RydWN0aW9uIGFuZCBwcm9kdWNlZCBhIHJlc3VsdC4gIEluc3RydWN0aW9ucyB0aGF0IGZpbmlzaCBtYXkgbm90IG5lY2Vzc2FyeSBjb21wbGV0ZS4KK2V2ZW50OjBYMDMwMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQNDggOiAoR3JvdXAgNDggcG1fZnh1MikgUHJvY2Vzc29yIEN5Y2xlcyBnYXRlZCBieSB0aGUgcnVuIGxhdGNoLiAgT3BlcmF0aW5nIHN5c3RlbXMgdXNlIHRoZSBydW4gbGF0Y2ggdG8gaW5kaWNhdGUgd2hlbiB0aGV5IGFyZSBkb2luZyB1c2VmdWwgd29yay4gIFRoZSBydW4gbGF0Y2ggaXMgdHlwaWNhbGx5IGNsZWFyZWQgaW4gdGhlIE9TIGlkbGUgbG9vcC4gIEdhdGluZyBieSB0aGUgcnVuIGxhdGNoIGZpbHRlcnMgb3V0IHRoZSBpZGxlIGxvb3AuCitldmVudDowWDAzMDIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQNDggOiAoR3JvdXAgNDggcG1fZnh1MikgTnVtYmVyIG9mIFBvd2VyUEMgSW5zdHJ1Y3Rpb25zIHRoYXQgY29tcGxldGVkLgorZXZlbnQ6MFgwMzAzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GWFUxX0ZJTl9HUlA0OCA6IChHcm91cCA0OCBwbV9meHUyKSBUaGUgRml4ZWQgUG9pbnQgdW5pdCAxIGZpbmlzaGVkIGFuIGluc3RydWN0aW9uIGFuZCBwcm9kdWNlZCBhIHJlc3VsdC4gSW5zdHJ1Y3Rpb25zIHRoYXQgZmluaXNoIG1heSBub3QgbmVjZXNzYXJ5IGNvbXBsZXRlLgorZXZlbnQ6MFgwMzA0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDQ4IDogKEdyb3VwIDQ4IHBtX2Z4dTIpIE51bWJlciBvZiBydW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZC4KK2V2ZW50OjBYMDMwNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQNDggOiAoR3JvdXAgNDggcG1fZnh1MikgUHJvY2Vzc29yIEN5Y2xlcyBnYXRlZCBieSB0aGUgcnVuIGxhdGNoLiAgT3BlcmF0aW5nIHN5c3RlbXMgdXNlIHRoZSBydW4gbGF0Y2ggdG8gaW5kaWNhdGUgd2hlbiB0aGV5IGFyZSBkb2luZyB1c2VmdWwgd29yay4gIFRoZSBydW4gbGF0Y2ggaXMgdHlwaWNhbGx5IGNsZWFyZWQgaW4gdGhlIE9TIGlkbGUgbG9vcC4gIEdhdGluZyBieSB0aGUgcnVuIGxhdGNoIGZpbHRlcnMgb3V0IHRoZSBpZGxlIGxvb3AuCisKKyNHcm91cCA0OSBwbV9meHUzLCBGWFUgZXZlbnRzCitldmVudDowWDAzMTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQNDkgOiAoR3JvdXAgNDkgcG1fZnh1MykgUHJvY2Vzc29yIEN5Y2xlcworZXZlbnQ6MFgwMzExIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GWFVfQlVTWV9HUlA0OSA6IChHcm91cCA0OSBwbV9meHUzKSBDeWNsZXMgd2hlbiBib3RoIEZYVTAgYW5kIEZYVTEgYXJlIGJ1c3kuCitldmVudDowWDAzMTIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZYVTBfQlVTWV9GWFUxX0lETEVfR1JQNDkgOiAoR3JvdXAgNDkgcG1fZnh1MykgRlhVMCBpcyBidXN5IHdoaWxlIEZYVTEgd2FzIGlkbGUKK2V2ZW50OjBYMDMxMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlhVMV9CVVNZX0ZYVTBfSURMRV9HUlA0OSA6IChHcm91cCA0OSBwbV9meHUzKSBGWFUwIHdhcyBpZGxlIHdoaWxlIEZYVTEgd2FzIGJ1c3kKK2V2ZW50OjBYMDMxNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlA0OSA6IChHcm91cCA0OSBwbV9meHUzKSBOdW1iZXIgb2YgcnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQuCitldmVudDowWDAzMTUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDQ5IDogKEdyb3VwIDQ5IHBtX2Z4dTMpIFByb2Nlc3NvciBDeWNsZXMgZ2F0ZWQgYnkgdGhlIHJ1biBsYXRjaC4gIE9wZXJhdGluZyBzeXN0ZW1zIHVzZSB0aGUgcnVuIGxhdGNoIHRvIGluZGljYXRlIHdoZW4gdGhleSBhcmUgZG9pbmcgdXNlZnVsIHdvcmsuICBUaGUgcnVuIGxhdGNoIGlzIHR5cGljYWxseSBjbGVhcmVkIGluIHRoZSBPUyBpZGxlIGxvb3AuICBHYXRpbmcgYnkgdGhlIHJ1biBsYXRjaCBmaWx0ZXJzIG91dCB0aGUgaWRsZSBsb29wLgorCisjR3JvdXAgNTAgcG1fZnh1NCwgRlhVIGV2ZW50cworZXZlbnQ6MFgwMzIwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GWFVfSURMRV9HUlA1MCA6IChHcm91cCA1MCBwbV9meHU0KSBGWFUwIGFuZCBGWFUxIGFyZSBib3RoIGlkbGUuCitldmVudDowWDAzMjEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZYVV9CVVNZX0dSUDUwIDogKEdyb3VwIDUwIHBtX2Z4dTQpIEN5Y2xlcyB3aGVuIGJvdGggRlhVMCBhbmQgRlhVMSBhcmUgYnVzeS4KK2V2ZW50OjBYMDMyMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlA1MCA6IChHcm91cCA1MCBwbV9meHU0KSBQcm9jZXNzb3IgQ3ljbGVzCitldmVudDowWDAzMjMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQNTAgOiAoR3JvdXAgNTAgcG1fZnh1NCkgTnVtYmVyIG9mIFBvd2VyUEMgSW5zdHJ1Y3Rpb25zIHRoYXQgY29tcGxldGVkLgorZXZlbnQ6MFgwMzI0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDUwIDogKEdyb3VwIDUwIHBtX2Z4dTQpIE51bWJlciBvZiBydW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZC4KK2V2ZW50OjBYMDMyNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQNTAgOiAoR3JvdXAgNTAgcG1fZnh1NCkgUHJvY2Vzc29yIEN5Y2xlcyBnYXRlZCBieSB0aGUgcnVuIGxhdGNoLiAgT3BlcmF0aW5nIHN5c3RlbXMgdXNlIHRoZSBydW4gbGF0Y2ggdG8gaW5kaWNhdGUgd2hlbiB0aGV5IGFyZSBkb2luZyB1c2VmdWwgd29yay4gIFRoZSBydW4gbGF0Y2ggaXMgdHlwaWNhbGx5IGNsZWFyZWQgaW4gdGhlIE9TIGlkbGUgbG9vcC4gIEdhdGluZyBieSB0aGUgcnVuIGxhdGNoIGZpbHRlcnMgb3V0IHRoZSBpZGxlIGxvb3AuCisKKyNHcm91cCA1MSBwbV9MMl9SQ0xELCBMMiAgUkMgbG9hZCBldmVudHMKK2V2ZW50OjBYMDMzMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDJfUkNMRF9ESVNQX0dSUDUxIDogKEdyb3VwIDUxIHBtX0wyX1JDTEQpICBMMiAgUkMgbG9hZCBkaXNwYXRjaCBhdHRlbXB0CitldmVudDowWDAzMzEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wyX1JDTERfRElTUF9GQUlMX09USEVSX0dSUDUxIDogKEdyb3VwIDUxIHBtX0wyX1JDTEQpICBMMiAgUkMgbG9hZCBkaXNwYXRjaCBhdHRlbXB0IGZhaWxlZCBkdWUgdG8gb3RoZXIgcmVhc29ucworZXZlbnQ6MFgwMzMyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMl9SQ1NUX0RJU1BfR1JQNTEgOiAoR3JvdXAgNTEgcG1fTDJfUkNMRCkgIEwyICBSQyBzdG9yZSBkaXNwYXRjaCBhdHRlbXB0CitldmVudDowWDAzMzMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wyX1JDTERfQlVTWV9SQ19GVUxMX0dSUDUxIDogKEdyb3VwIDUxIHBtX0wyX1JDTEQpICBMMiAgYWN0aXZhdGVkIEJ1c3kgdG8gdGhlIGNvcmUgZm9yIGxvYWRzIGR1ZSB0byBhbGwgUkMgZnVsbAorZXZlbnQ6MFgwMzM0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDUxIDogKEdyb3VwIDUxIHBtX0wyX1JDTEQpIE51bWJlciBvZiBydW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZC4KK2V2ZW50OjBYMDMzNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQNTEgOiAoR3JvdXAgNTEgcG1fTDJfUkNMRCkgUHJvY2Vzc29yIEN5Y2xlcyBnYXRlZCBieSB0aGUgcnVuIGxhdGNoLiAgT3BlcmF0aW5nIHN5c3RlbXMgdXNlIHRoZSBydW4gbGF0Y2ggdG8gaW5kaWNhdGUgd2hlbiB0aGV5IGFyZSBkb2luZyB1c2VmdWwgd29yay4gIFRoZSBydW4gbGF0Y2ggaXMgdHlwaWNhbGx5IGNsZWFyZWQgaW4gdGhlIE9TIGlkbGUgbG9vcC4gIEdhdGluZyBieSB0aGUgcnVuIGxhdGNoIGZpbHRlcnMgb3V0IHRoZSBpZGxlIGxvb3AuCisKKyNHcm91cCA1MiBwbV9MMl9SQywgUkMgcmVsYXRlZCBldmVudHMKK2V2ZW50OjBYMDM0MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDJfQ09fRkFJTF9CVVNZX0dSUDUyIDogKEdyb3VwIDUyIHBtX0wyX1JDKSAgTDIgIFJDIENhc3QgT3V0IGRpc3BhdGNoIGF0dGVtcHQgZmFpbGVkIGR1ZSB0byBhbGwgQ08gbWFjaGluZXMgYnVzeQorZXZlbnQ6MFgwMzQxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDUyIDogKEdyb3VwIDUyIHBtX0wyX1JDKSBQcm9jZXNzb3IgQ3ljbGVzCitldmVudDowWDAzNDIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wyX1JDX1NUX0RPTkVfR1JQNTIgOiAoR3JvdXAgNTIgcG1fTDJfUkMpIFJDIGRpZCBzdCB0byBsaW5lIHRoYXQgd2FzIFR4IG9yIFN4CitldmVudDowWDAzNDMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQNTIgOiAoR3JvdXAgNTIgcG1fTDJfUkMpIE51bWJlciBvZiBQb3dlclBDIEluc3RydWN0aW9ucyB0aGF0IGNvbXBsZXRlZC4KK2V2ZW50OjBYMDM0NCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlA1MiA6IChHcm91cCA1MiBwbV9MMl9SQykgTnVtYmVyIG9mIHJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkLgorZXZlbnQ6MFgwMzQ1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlA1MiA6IChHcm91cCA1MiBwbV9MMl9SQykgUHJvY2Vzc29yIEN5Y2xlcyBnYXRlZCBieSB0aGUgcnVuIGxhdGNoLiAgT3BlcmF0aW5nIHN5c3RlbXMgdXNlIHRoZSBydW4gbGF0Y2ggdG8gaW5kaWNhdGUgd2hlbiB0aGV5IGFyZSBkb2luZyB1c2VmdWwgd29yay4gIFRoZSBydW4gbGF0Y2ggaXMgdHlwaWNhbGx5IGNsZWFyZWQgaW4gdGhlIE9TIGlkbGUgbG9vcC4gIEdhdGluZyBieSB0aGUgcnVuIGxhdGNoIGZpbHRlcnMgb3V0IHRoZSBpZGxlIGxvb3AuCisKKyNHcm91cCA1MyBwbV9MMl9SQ1NULCBMMiBSQyBTdG9yZSBFdmVudHMKK2V2ZW50OjBYMDM1MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDJfUkNMRF9ESVNQX0dSUDUzIDogKEdyb3VwIDUzIHBtX0wyX1JDU1QpICBMMiAgUkMgbG9hZCBkaXNwYXRjaCBhdHRlbXB0CitldmVudDowWDAzNTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wyX1JDTERfRElTUF9GQUlMX09USEVSX0dSUDUzIDogKEdyb3VwIDUzIHBtX0wyX1JDU1QpICBMMiAgUkMgbG9hZCBkaXNwYXRjaCBhdHRlbXB0IGZhaWxlZCBkdWUgdG8gb3RoZXIgcmVhc29ucworZXZlbnQ6MFgwMzUyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMl9SQ1NUX0RJU1BfRkFJTF9BRERSX0dSUDUzIDogKEdyb3VwIDUzIHBtX0wyX1JDU1QpICBMMiAgUkMgc3RvcmUgZGlzcGF0Y2ggYXR0ZW1wdCBmYWlsZWQgZHVlIHRvIGFkZHJlc3MgY29sbGlzaW9uIHdpdGggUkMvQ08vU04vU1EKK2V2ZW50OjBYMDM1MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDJfUkNTVF9ESVNQX0ZBSUxfT1RIRVJfR1JQNTMgOiAoR3JvdXAgNTMgcG1fTDJfUkNTVCkgIEwyICBSQyBzdG9yZSBkaXNwYXRjaCBhdHRlbXB0IGZhaWxlZCBkdWUgdG8gb3RoZXIgcmVhc29ucworZXZlbnQ6MFgwMzU0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDUzIDogKEdyb3VwIDUzIHBtX0wyX1JDU1QpIE51bWJlciBvZiBydW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZC4KK2V2ZW50OjBYMDM1NSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQNTMgOiAoR3JvdXAgNTMgcG1fTDJfUkNTVCkgUHJvY2Vzc29yIEN5Y2xlcyBnYXRlZCBieSB0aGUgcnVuIGxhdGNoLiAgT3BlcmF0aW5nIHN5c3RlbXMgdXNlIHRoZSBydW4gbGF0Y2ggdG8gaW5kaWNhdGUgd2hlbiB0aGV5IGFyZSBkb2luZyB1c2VmdWwgd29yay4gIFRoZSBydW4gbGF0Y2ggaXMgdHlwaWNhbGx5IGNsZWFyZWQgaW4gdGhlIE9TIGlkbGUgbG9vcC4gIEdhdGluZyBieSB0aGUgcnVuIGxhdGNoIGZpbHRlcnMgb3V0IHRoZSBpZGxlIGxvb3AuCisKKyNHcm91cCA1NCBwbV9MMl9sZHN0XzEsIEwyIGxvYWQvc3RvcmUKK2V2ZW50OjBYMDM2MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDJfU1RfR1JQNTQgOiAoR3JvdXAgNTQgcG1fTDJfbGRzdF8xKSBEYXRhIFN0b3JlIENvdW50CitldmVudDowWDAzNjEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wyX0xEX01JU1NfR1JQNTQgOiAoR3JvdXAgNTQgcG1fTDJfbGRzdF8xKSBEYXRhIExvYWQgTWlzcworZXZlbnQ6MFgwMzYyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDU0IDogKEdyb3VwIDU0IHBtX0wyX2xkc3RfMSkgTnVtYmVyIG9mIFBvd2VyUEMgSW5zdHJ1Y3Rpb25zIHRoYXQgY29tcGxldGVkLgorZXZlbnQ6MFgwMzYzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDU0IDogKEdyb3VwIDU0IHBtX0wyX2xkc3RfMSkgUHJvY2Vzc29yIEN5Y2xlcworZXZlbnQ6MFgwMzY0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDU0IDogKEdyb3VwIDU0IHBtX0wyX2xkc3RfMSkgTnVtYmVyIG9mIHJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkLgorZXZlbnQ6MFgwMzY1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlA1NCA6IChHcm91cCA1NCBwbV9MMl9sZHN0XzEpIFByb2Nlc3NvciBDeWNsZXMgZ2F0ZWQgYnkgdGhlIHJ1biBsYXRjaC4gIE9wZXJhdGluZyBzeXN0ZW1zIHVzZSB0aGUgcnVuIGxhdGNoIHRvIGluZGljYXRlIHdoZW4gdGhleSBhcmUgZG9pbmcgdXNlZnVsIHdvcmsuICBUaGUgcnVuIGxhdGNoIGlzIHR5cGljYWxseSBjbGVhcmVkIGluIHRoZSBPUyBpZGxlIGxvb3AuICBHYXRpbmcgYnkgdGhlIHJ1biBsYXRjaCBmaWx0ZXJzIG91dCB0aGUgaWRsZSBsb29wLgorCisjR3JvdXAgNTUgcG1fTDJfbGRzdF8yLCBMMiBsb2FkL3N0b3JlCitldmVudDowWDAzNzAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQNTUgOiAoR3JvdXAgNTUgcG1fTDJfbGRzdF8yKSBOdW1iZXIgb2YgUG93ZXJQQyBJbnN0cnVjdGlvbnMgdGhhdCBjb21wbGV0ZWQuCitldmVudDowWDAzNzEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQNTUgOiAoR3JvdXAgNTUgcG1fTDJfbGRzdF8yKSBQcm9jZXNzb3IgQ3ljbGVzCitldmVudDowWDAzNzIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wyX0xEX0hJVF9HUlA1NSA6IChHcm91cCA1NSBwbV9MMl9sZHN0XzIpIEEgbG9hZCByZXF1ZXN0IChkYXRhIG9yIGluc3RydWN0aW9uKSBoaXQgaW4gdGhlIEwyIGRpcmVjdG9yeS4gIEluY2x1ZGVzIHNwZWN1bGF0aXZlLCBwcmVmZXRjaGVkLCBhbmQgZGVtYW5kIHJlcXVlc3RzLiAgVGhpcyBldmVudCBpbmNsdWRlcyBhbGwgcmVxdWVzdHMgdG8gdGhpcyBMMiBmcm9tIGFsbCBzb3VyY2VzLiAgVG90YWwgZm9yIGFsbCBzbGljZXMKK2V2ZW50OjBYMDM3MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDJfU1RfSElUX0dSUDU1IDogKEdyb3VwIDU1IHBtX0wyX2xkc3RfMikgQSBzdG9yZSByZXF1ZXN0IGhpdCBpbiB0aGUgTDIgZGlyZWN0b3J5LiAgVGhpcyBldmVudCBpbmNsdWRlcyBhbGwgcmVxdWVzdHMgdG8gdGhpcyBMMiBmcm9tIGFsbCBzb3VyY2VzLiBUb3RhbCBmb3IgYWxsIHNsaWNlcy4KK2V2ZW50OjBYMDM3NCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlA1NSA6IChHcm91cCA1NSBwbV9MMl9sZHN0XzIpIE51bWJlciBvZiBydW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZC4KK2V2ZW50OjBYMDM3NSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQNTUgOiAoR3JvdXAgNTUgcG1fTDJfbGRzdF8yKSBQcm9jZXNzb3IgQ3ljbGVzIGdhdGVkIGJ5IHRoZSBydW4gbGF0Y2guICBPcGVyYXRpbmcgc3lzdGVtcyB1c2UgdGhlIHJ1biBsYXRjaCB0byBpbmRpY2F0ZSB3aGVuIHRoZXkgYXJlIGRvaW5nIHVzZWZ1bCB3b3JrLiAgVGhlIHJ1biBsYXRjaCBpcyB0eXBpY2FsbHkgY2xlYXJlZCBpbiB0aGUgT1MgaWRsZSBsb29wLiAgR2F0aW5nIGJ5IHRoZSBydW4gbGF0Y2ggZmlsdGVycyBvdXQgdGhlIGlkbGUgbG9vcC4KKworI0dyb3VwIDU2IHBtX0wyX2xkc3RfMywgTDIgbG9hZC9zdG9yZQorZXZlbnQ6MFgwMzgwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDU2IDogKEdyb3VwIDU2IHBtX0wyX2xkc3RfMykgTnVtYmVyIG9mIFBvd2VyUEMgSW5zdHJ1Y3Rpb25zIHRoYXQgY29tcGxldGVkLgorZXZlbnQ6MFgwMzgxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDU2IDogKEdyb3VwIDU2IHBtX0wyX2xkc3RfMykgUHJvY2Vzc29yIEN5Y2xlcworZXZlbnQ6MFgwMzgyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMl9MRF9ESVNQX0dSUDU2IDogKEdyb3VwIDU2IHBtX0wyX2xkc3RfMykgQWxsIHN1Y2Nlc3NmdWwgbG9hZCBkaXNwYXRjaGVzCitldmVudDowWDAzODMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wyX1NUX0RJU1BfR1JQNTYgOiAoR3JvdXAgNTYgcG1fTDJfbGRzdF8zKSBBbGwgc3VjY2Vzc2Z1bCBzdG9yZSBkaXNwYXRjaGVzCitldmVudDowWDAzODQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQNTYgOiAoR3JvdXAgNTYgcG1fTDJfbGRzdF8zKSBOdW1iZXIgb2YgcnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQuCitldmVudDowWDAzODUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDU2IDogKEdyb3VwIDU2IHBtX0wyX2xkc3RfMykgUHJvY2Vzc29yIEN5Y2xlcyBnYXRlZCBieSB0aGUgcnVuIGxhdGNoLiAgT3BlcmF0aW5nIHN5c3RlbXMgdXNlIHRoZSBydW4gbGF0Y2ggdG8gaW5kaWNhdGUgd2hlbiB0aGV5IGFyZSBkb2luZyB1c2VmdWwgd29yay4gIFRoZSBydW4gbGF0Y2ggaXMgdHlwaWNhbGx5IGNsZWFyZWQgaW4gdGhlIE9TIGlkbGUgbG9vcC4gIEdhdGluZyBieSB0aGUgcnVuIGxhdGNoIGZpbHRlcnMgb3V0IHRoZSBpZGxlIGxvb3AuCisKKyNHcm91cCA1NyBwbV9MMl9SQ1NUTEQsIEwyIFJDIExvYWQvU3RvcmUgRXZlbnRzCitldmVudDowWDAzOTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wyX1JDTERfRElTUF9GQUlMX0FERFJfR1JQNTcgOiAoR3JvdXAgNTcgcG1fTDJfUkNTVExEKSAgTDIgIFJDIGxvYWQgZGlzcGF0Y2ggYXR0ZW1wdCBmYWlsZWQgZHVlIHRvIGFkZHJlc3MgY29sbGlzaW9uIHdpdGggUkMvQ08vU04vU1EKK2V2ZW50OjBYMDM5MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDJfUkNTVF9CVVNZX1JDX0ZVTExfR1JQNTcgOiAoR3JvdXAgNTcgcG1fTDJfUkNTVExEKSAgTDIgIGFjdGl2YXRlZCBCdXN5IHRvIHRoZSBjb3JlIGZvciBzdG9yZXMgZHVlIHRvIGFsbCBSQyBmdWxsCitldmVudDowWDAzOTIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQNTcgOiAoR3JvdXAgNTcgcG1fTDJfUkNTVExEKSBOdW1iZXIgb2YgUG93ZXJQQyBJbnN0cnVjdGlvbnMgdGhhdCBjb21wbGV0ZWQuCitldmVudDowWDAzOTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQNTcgOiAoR3JvdXAgNTcgcG1fTDJfUkNTVExEKSBQcm9jZXNzb3IgQ3ljbGVzCitldmVudDowWDAzOTQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQNTcgOiAoR3JvdXAgNTcgcG1fTDJfUkNTVExEKSBOdW1iZXIgb2YgcnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQuCitldmVudDowWDAzOTUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDU3IDogKEdyb3VwIDU3IHBtX0wyX1JDU1RMRCkgUHJvY2Vzc29yIEN5Y2xlcyBnYXRlZCBieSB0aGUgcnVuIGxhdGNoLiAgT3BlcmF0aW5nIHN5c3RlbXMgdXNlIHRoZSBydW4gbGF0Y2ggdG8gaW5kaWNhdGUgd2hlbiB0aGV5IGFyZSBkb2luZyB1c2VmdWwgd29yay4gIFRoZSBydW4gbGF0Y2ggaXMgdHlwaWNhbGx5IGNsZWFyZWQgaW4gdGhlIE9TIGlkbGUgbG9vcC4gIEdhdGluZyBieSB0aGUgcnVuIGxhdGNoIGZpbHRlcnMgb3V0IHRoZSBpZGxlIGxvb3AuCisKKyNHcm91cCA1OCBwbV9uZXN0MSwgTmVzdCBFdmVudHMKK2V2ZW50OjBYMDNBMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUEJfTk9ERV9QVU1QX0dSUDU4IDogKEdyb3VwIDU4IHBtX25lc3QxKSAgTmVzdCBldmVudHMgKE1DMC9NQzEvUEIvR1gpLCBQYWlyMCBCaXQwCitldmVudDowWDAzQTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1BCX1NZU19QVU1QX0dSUDU4IDogKEdyb3VwIDU4IHBtX25lc3QxKSAgTmVzdCBldmVudHMgKE1DMC9NQzEvUEIvR1gpLCBQYWlyMSBCaXQwCitldmVudDowWDAzQTIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1BCX1JFVFJZX05PREVfUFVNUF9HUlA1OCA6IChHcm91cCA1OCBwbV9uZXN0MSkgIE5lc3QgZXZlbnRzIChNQzAvTUMxL1BCL0dYKSwgUGFpcjIgQml0MAorZXZlbnQ6MFgwM0EzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9QQl9SRVRSWV9TWVNfUFVNUF9HUlA1OCA6IChHcm91cCA1OCBwbV9uZXN0MSkgIE5lc3QgZXZlbnRzIChNQzAvTUMxL1BCL0dYKSwgUGFpcjMgQml0MAorZXZlbnQ6MFgwM0E0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDU4IDogKEdyb3VwIDU4IHBtX25lc3QxKSBOdW1iZXIgb2YgcnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQuCitldmVudDowWDAzQTUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDU4IDogKEdyb3VwIDU4IHBtX25lc3QxKSBQcm9jZXNzb3IgQ3ljbGVzIGdhdGVkIGJ5IHRoZSBydW4gbGF0Y2guICBPcGVyYXRpbmcgc3lzdGVtcyB1c2UgdGhlIHJ1biBsYXRjaCB0byBpbmRpY2F0ZSB3aGVuIHRoZXkgYXJlIGRvaW5nIHVzZWZ1bCB3b3JrLiAgVGhlIHJ1biBsYXRjaCBpcyB0eXBpY2FsbHkgY2xlYXJlZCBpbiB0aGUgT1MgaWRsZSBsb29wLiAgR2F0aW5nIGJ5IHRoZSBydW4gbGF0Y2ggZmlsdGVycyBvdXQgdGhlIGlkbGUgbG9vcC4KKworI0dyb3VwIDU5IHBtX25lc3QyLCBOZXN0IEV2ZW50cworZXZlbnQ6MFgwM0IwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NRU0wX1JRX0RJU1BfR1JQNTkgOiAoR3JvdXAgNTkgcG1fbmVzdDIpICBOZXN0IGV2ZW50cyAoTUMwL01DMS9QQi9HWCksIFBhaXIwIEJpdDEKK2V2ZW50OjBYMDNCMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTUVNMF9QUkVGRVRDSF9ESVNQX0dSUDU5IDogKEdyb3VwIDU5IHBtX25lc3QyKSAgTmVzdCBldmVudHMgKE1DMC9NQzEvUEIvR1gpLCBQYWlyMSBCaXQxCitldmVudDowWDAzQjIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01FTTBfUkRfQ0FOQ0VMX1RPVEFMX0dSUDU5IDogKEdyb3VwIDU5IHBtX25lc3QyKSAgTmVzdCBldmVudHMgKE1DMC9NQzEvUEIvR1gpLCBQYWlyMiBCaXQxCitldmVudDowWDAzQjMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01FTTBfV1FfRElTUF9HUlA1OSA6IChHcm91cCA1OSBwbV9uZXN0MikgIE5lc3QgZXZlbnRzIChNQzAvTUMxL1BCL0dYKSwgUGFpcjMgQml0MQorZXZlbnQ6MFgwM0I0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDU5IDogKEdyb3VwIDU5IHBtX25lc3QyKSBOdW1iZXIgb2YgcnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQuCitldmVudDowWDAzQjUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDU5IDogKEdyb3VwIDU5IHBtX25lc3QyKSBQcm9jZXNzb3IgQ3ljbGVzIGdhdGVkIGJ5IHRoZSBydW4gbGF0Y2guICBPcGVyYXRpbmcgc3lzdGVtcyB1c2UgdGhlIHJ1biBsYXRjaCB0byBpbmRpY2F0ZSB3aGVuIHRoZXkgYXJlIGRvaW5nIHVzZWZ1bCB3b3JrLiAgVGhlIHJ1biBsYXRjaCBpcyB0eXBpY2FsbHkgY2xlYXJlZCBpbiB0aGUgT1MgaWRsZSBsb29wLiAgR2F0aW5nIGJ5IHRoZSBydW4gbGF0Y2ggZmlsdGVycyBvdXQgdGhlIGlkbGUgbG9vcC4KKworI0dyb3VwIDYwIHBtX25lc3QzLCBOZXN0IEV2ZW50cworZXZlbnQ6MFgwM0MwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9ORVNUX1BBSVIwX0FERF9HUlA2MCA6IChHcm91cCA2MCBwbV9uZXN0MykgIE5lc3QgZXZlbnRzIChNQzAvTUMxL1BCL0dYKSwgUGFpcjAgQURECitldmVudDowWDAzQzEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX05FU1RfUEFJUjFfQUREX0dSUDYwIDogKEdyb3VwIDYwIHBtX25lc3QzKSAgTmVzdCBldmVudHMgKE1DMC9NQzEvUEIvR1gpLCBQYWlyMSBBREQKK2V2ZW50OjBYMDNDMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTkVTVF9QQUlSMl9BRERfR1JQNjAgOiAoR3JvdXAgNjAgcG1fbmVzdDMpICBOZXN0IGV2ZW50cyAoTUMwL01DMS9QQi9HWCksIFBhaXIyIEFERAorZXZlbnQ6MFgwM0MzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9ORVNUX1BBSVIzX0FERF9HUlA2MCA6IChHcm91cCA2MCBwbV9uZXN0MykgIE5lc3QgZXZlbnRzIChNQzAvTUMxL1BCL0dYKSwgUGFpcjMgQURECitldmVudDowWDAzQzQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQNjAgOiAoR3JvdXAgNjAgcG1fbmVzdDMpIE51bWJlciBvZiBydW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZC4KK2V2ZW50OjBYMDNDNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQNjAgOiAoR3JvdXAgNjAgcG1fbmVzdDMpIFByb2Nlc3NvciBDeWNsZXMgZ2F0ZWQgYnkgdGhlIHJ1biBsYXRjaC4gIE9wZXJhdGluZyBzeXN0ZW1zIHVzZSB0aGUgcnVuIGxhdGNoIHRvIGluZGljYXRlIHdoZW4gdGhleSBhcmUgZG9pbmcgdXNlZnVsIHdvcmsuICBUaGUgcnVuIGxhdGNoIGlzIHR5cGljYWxseSBjbGVhcmVkIGluIHRoZSBPUyBpZGxlIGxvb3AuICBHYXRpbmcgYnkgdGhlIHJ1biBsYXRjaCBmaWx0ZXJzIG91dCB0aGUgaWRsZSBsb29wLgorCisjR3JvdXAgNjEgcG1fbmVzdDQsIE5lc3QgRXZlbnRzCitldmVudDowWDAzRDAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX05FU1RfUEFJUjBfQU5EX0dSUDYxIDogKEdyb3VwIDYxIHBtX25lc3Q0KSAgTmVzdCBldmVudHMgKE1DMC9NQzEvUEIvR1gpLCBQYWlyMCBBTkQKK2V2ZW50OjBYMDNEMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTkVTVF9QQUlSMV9BTkRfR1JQNjEgOiAoR3JvdXAgNjEgcG1fbmVzdDQpICBOZXN0IGV2ZW50cyAoTUMwL01DMS9QQi9HWCksIFBhaXIxIEFORAorZXZlbnQ6MFgwM0QyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9ORVNUX1BBSVIyX0FORF9HUlA2MSA6IChHcm91cCA2MSBwbV9uZXN0NCkgIE5lc3QgZXZlbnRzIChNQzAvTUMxL1BCL0dYKSwgUGFpcjIgQU5ECitldmVudDowWDAzRDMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX05FU1RfUEFJUjNfQU5EX0dSUDYxIDogKEdyb3VwIDYxIHBtX25lc3Q0KSAgTmVzdCBldmVudHMgKE1DMC9NQzEvUEIvR1gpLCBQYWlyMyBBTkQKK2V2ZW50OjBYMDNENCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlA2MSA6IChHcm91cCA2MSBwbV9uZXN0NCkgTnVtYmVyIG9mIHJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkLgorZXZlbnQ6MFgwM0Q1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlA2MSA6IChHcm91cCA2MSBwbV9uZXN0NCkgUHJvY2Vzc29yIEN5Y2xlcyBnYXRlZCBieSB0aGUgcnVuIGxhdGNoLiAgT3BlcmF0aW5nIHN5c3RlbXMgdXNlIHRoZSBydW4gbGF0Y2ggdG8gaW5kaWNhdGUgd2hlbiB0aGV5IGFyZSBkb2luZyB1c2VmdWwgd29yay4gIFRoZSBydW4gbGF0Y2ggaXMgdHlwaWNhbGx5IGNsZWFyZWQgaW4gdGhlIE9TIGlkbGUgbG9vcC4gIEdhdGluZyBieSB0aGUgcnVuIGxhdGNoIGZpbHRlcnMgb3V0IHRoZSBpZGxlIGxvb3AuCisKKyNHcm91cCA2MiBwbV9MMl9yZWRpcl9wcmVmLCBMMiByZWRpcmVjdCBhbmQgcHJlZmV0Y2gKK2V2ZW50OjBYMDNFMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSUNfREVNQU5EX0wyX0JIVF9SRURJUkVDVF9HUlA2MiA6IChHcm91cCA2MiBwbV9MMl9yZWRpcl9wcmVmKSBBIGRlbWFuZCAobm90IHByZWZldGNoKSBtaXNzIHRvIHRoZSBpbnN0cnVjdGlvbiBjYWNoZSB3YXMgc2VudCB0byB0aGUgTDIgYXMgYSByZXN1bHQgb2YgYSBicmFuY2ggcHJlZGljdGlvbiByZWRpcmVjdCAoQ1IgbWlzcHJlZGljdCkuCitldmVudDowWDAzRTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lDX0RFTUFORF9MMl9CUl9SRURJUkVDVF9HUlA2MiA6IChHcm91cCA2MiBwbV9MMl9yZWRpcl9wcmVmKSBBIGRlbWFuZCAobm90IHByZWZldGNoKSBtaXNzIHRvIHRoZSBpbnN0cnVjdGlvbiBjYWNoZSB3YXMgc2VudCB0byB0aGUgTDIgYXMgYSByZXN1bHQgb2YgYSBicmFuY2ggcHJlZGljdGlvbiByZWRpcmVjdCAoZWl0aGVyIEFMTCBtaXNwcmVkaWN0ZWQgb3IgVGFyZ2V0KS4KK2V2ZW50OjBYMDNFMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSUNfREVNQU5EX1JFUV9HUlA2MiA6IChHcm91cCA2MiBwbV9MMl9yZWRpcl9wcmVmKSBEZW1hbmQgSW5zdHJ1Y3Rpb24gZmV0Y2ggcmVxdWVzdAorZXZlbnQ6MFgwM0UzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JQ19CQU5LX0NPTkZMSUNUX0dSUDYyIDogKEdyb3VwIDYyIHBtX0wyX3JlZGlyX3ByZWYpIFJlYWQgYmxvY2tlZCBkdWUgdG8gaW50ZXJsZWF2ZSBjb25mbGljdC4KK2V2ZW50OjBYMDNFNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlA2MiA6IChHcm91cCA2MiBwbV9MMl9yZWRpcl9wcmVmKSBOdW1iZXIgb2YgcnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQuCitldmVudDowWDAzRTUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDYyIDogKEdyb3VwIDYyIHBtX0wyX3JlZGlyX3ByZWYpIFByb2Nlc3NvciBDeWNsZXMgZ2F0ZWQgYnkgdGhlIHJ1biBsYXRjaC4gIE9wZXJhdGluZyBzeXN0ZW1zIHVzZSB0aGUgcnVuIGxhdGNoIHRvIGluZGljYXRlIHdoZW4gdGhleSBhcmUgZG9pbmcgdXNlZnVsIHdvcmsuICBUaGUgcnVuIGxhdGNoIGlzIHR5cGljYWxseSBjbGVhcmVkIGluIHRoZSBPUyBpZGxlIGxvb3AuICBHYXRpbmcgYnkgdGhlIHJ1biBsYXRjaCBmaWx0ZXJzIG91dCB0aGUgaWRsZSBsb29wLgorCisjR3JvdXAgNjMgcG1fZGxhdGVuY2llczEsIERhdGEgbGF0ZW5jaWVzCitldmVudDowWDAzRjAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RBVEFfRlJPTV9MMl9HUlA2MyA6IChHcm91cCA2MyBwbV9kbGF0ZW5jaWVzMSkgVGhlIHByb2Nlc3NvcidzIERhdGEgQ2FjaGUgd2FzIHJlbG9hZGVkIGZyb20gdGhlIGxvY2FsIEwyIGR1ZSB0byBhIGRlbWFuZCBsb2FkLgorZXZlbnQ6MFgwM0YxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JTlNUX0RJU1BfR1JQNjMgOiAoR3JvdXAgNjMgcG1fZGxhdGVuY2llczEpIE51bWJlciBvZiBQb3dlclBDIGluc3RydWN0aW9ucyBzdWNjZXNzZnVsbHkgZGlzcGF0Y2hlZC4KK2V2ZW50OjBYMDNGMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDFfRENBQ0hFX1JFTE9BRF9WQUxJRF9HUlA2MyA6IChHcm91cCA2MyBwbV9kbGF0ZW5jaWVzMSkgVGhlIGRhdGEgc291cmNlIGluZm9ybWF0aW9uIGlzIHZhbGlkLHRoZSBkYXRhIGNhY2hlIGhhcyBiZWVuIHJlbG9hZGVkLiAgUHJpb3IgdG8gUE9XRVI1KyB0aGlzIGluY2x1ZGVkIGRhdGEgY2FjaGUgcmVsb2FkcyBkdWUgdG8gcHJlZmV0Y2ggYWN0aXZpdHkuICBXaXRoIFBPV0VSNSsgdGhpcyBub3cgb25seSBpbmNsdWRlcyByZWxvYWRzIGR1ZSB0byBkZW1hbmQgbG9hZHMuCitldmVudDowWDAzRjMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNXzFQTFVTX1BQQ19ESVNQX0dSUDYzIDogKEdyb3VwIDYzIHBtX2RsYXRlbmNpZXMxKSBBIGdyb3VwIGNvbnRhaW5pbmcgYXQgbGVhc3Qgb25lIFBQQyBpbnN0cnVjdGlvbiB3YXMgZGlzcGF0Y2hlZC4gRm9yIG1pY3JvY29kZWQgaW5zdHJ1Y3Rpb25zIHRoYXQgc3BhbiBtdWx0aXBsZSBncm91cHMsIHRoaXMgd2lsbCBvbmx5IG9jY3VyIG9uY2UuCitldmVudDowWDAzRjQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQNjMgOiAoR3JvdXAgNjMgcG1fZGxhdGVuY2llczEpIE51bWJlciBvZiBydW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZC4KK2V2ZW50OjBYMDNGNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQNjMgOiAoR3JvdXAgNjMgcG1fZGxhdGVuY2llczEpIFByb2Nlc3NvciBDeWNsZXMgZ2F0ZWQgYnkgdGhlIHJ1biBsYXRjaC4gIE9wZXJhdGluZyBzeXN0ZW1zIHVzZSB0aGUgcnVuIGxhdGNoIHRvIGluZGljYXRlIHdoZW4gdGhleSBhcmUgZG9pbmcgdXNlZnVsIHdvcmsuICBUaGUgcnVuIGxhdGNoIGlzIHR5cGljYWxseSBjbGVhcmVkIGluIHRoZSBPUyBpZGxlIGxvb3AuICBHYXRpbmcgYnkgdGhlIHJ1biBsYXRjaCBmaWx0ZXJzIG91dCB0aGUgaWRsZSBsb29wLgorCisjR3JvdXAgNjQgcG1fZGxhdGVuY2llczIsIERhdGEgbGF0ZW5jaWVzCitldmVudDowWDA0MDAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RBVEFfRlJPTV9MM19HUlA2NCA6IChHcm91cCA2NCBwbV9kbGF0ZW5jaWVzMikgVGhlIHByb2Nlc3NvcidzIERhdGEgQ2FjaGUgd2FzIHJlbG9hZGVkIGZyb20gdGhlIGxvY2FsIEwzIGR1ZSB0byBhIGRlbWFuZCBsb2FkLgorZXZlbnQ6MFgwNDAxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDY0IDogKEdyb3VwIDY0IHBtX2RsYXRlbmNpZXMyKSBQcm9jZXNzb3IgQ3ljbGVzCitldmVudDowWDA0MDIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wxX0RDQUNIRV9SRUxPQURfVkFMSURfR1JQNjQgOiAoR3JvdXAgNjQgcG1fZGxhdGVuY2llczIpIFRoZSBkYXRhIHNvdXJjZSBpbmZvcm1hdGlvbiBpcyB2YWxpZCx0aGUgZGF0YSBjYWNoZSBoYXMgYmVlbiByZWxvYWRlZC4gIFByaW9yIHRvIFBPV0VSNSsgdGhpcyBpbmNsdWRlZCBkYXRhIGNhY2hlIHJlbG9hZHMgZHVlIHRvIHByZWZldGNoIGFjdGl2aXR5LiAgV2l0aCBQT1dFUjUrIHRoaXMgbm93IG9ubHkgaW5jbHVkZXMgcmVsb2FkcyBkdWUgdG8gZGVtYW5kIGxvYWRzLgorZXZlbnQ6MFgwNDAzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDY0IDogKEdyb3VwIDY0IHBtX2RsYXRlbmNpZXMyKSBOdW1iZXIgb2YgUG93ZXJQQyBJbnN0cnVjdGlvbnMgdGhhdCBjb21wbGV0ZWQuCitldmVudDowWDA0MDQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQNjQgOiAoR3JvdXAgNjQgcG1fZGxhdGVuY2llczIpIE51bWJlciBvZiBydW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZC4KK2V2ZW50OjBYMDQwNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQNjQgOiAoR3JvdXAgNjQgcG1fZGxhdGVuY2llczIpIFByb2Nlc3NvciBDeWNsZXMgZ2F0ZWQgYnkgdGhlIHJ1biBsYXRjaC4gIE9wZXJhdGluZyBzeXN0ZW1zIHVzZSB0aGUgcnVuIGxhdGNoIHRvIGluZGljYXRlIHdoZW4gdGhleSBhcmUgZG9pbmcgdXNlZnVsIHdvcmsuICBUaGUgcnVuIGxhdGNoIGlzIHR5cGljYWxseSBjbGVhcmVkIGluIHRoZSBPUyBpZGxlIGxvb3AuICBHYXRpbmcgYnkgdGhlIHJ1biBsYXRjaCBmaWx0ZXJzIG91dCB0aGUgaWRsZSBsb29wLgorCisjR3JvdXAgNjUgcG1fZGxhdGVuY2llczMsIERhdGEgbGF0ZW5jaWVzCitldmVudDowWDA0MTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RBVEFfRlJPTV9STDJMM19NT0RfR1JQNjUgOiAoR3JvdXAgNjUgcG1fZGxhdGVuY2llczMpIFRoZSBwcm9jZXNzb3IncyBEYXRhIENhY2hlIHdhcyByZWxvYWRlZCB3aXRoIG1vZGlmaWVkIChNKSBkYXRhIGZyb20gYW4gTDIgIG9yIEwzIG9uIGEgcmVtb3RlIG1vZHVsZSBkdWUgdG8gYSBkZW1hbmQgbG9hZAorZXZlbnQ6MFgwNDExIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQVRBX0ZST01fUkwyTDNfU0hSX0dSUDY1IDogKEdyb3VwIDY1IHBtX2RsYXRlbmNpZXMzKSBUaGUgcHJvY2Vzc29yJ3MgRGF0YSBDYWNoZSB3YXMgcmVsb2FkZWQgd2l0aCBzaGFyZWQgKFQgb3IgU0wpIGRhdGEgZnJvbSBhbiBMMiBvciBMMyBvbiBhIHJlbW90ZSBtb2R1bGUgZHVlIHRvIGEgZGVtYW5kIGxvYWQKK2V2ZW50OjBYMDQxMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDFfRENBQ0hFX1JFTE9BRF9WQUxJRF9HUlA2NSA6IChHcm91cCA2NSBwbV9kbGF0ZW5jaWVzMykgVGhlIGRhdGEgc291cmNlIGluZm9ybWF0aW9uIGlzIHZhbGlkLHRoZSBkYXRhIGNhY2hlIGhhcyBiZWVuIHJlbG9hZGVkLiAgUHJpb3IgdG8gUE9XRVI1KyB0aGlzIGluY2x1ZGVkIGRhdGEgY2FjaGUgcmVsb2FkcyBkdWUgdG8gcHJlZmV0Y2ggYWN0aXZpdHkuICBXaXRoIFBPV0VSNSsgdGhpcyBub3cgb25seSBpbmNsdWRlcyByZWxvYWRzIGR1ZSB0byBkZW1hbmQgbG9hZHMuCitldmVudDowWDA0MTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQNjUgOiAoR3JvdXAgNjUgcG1fZGxhdGVuY2llczMpIE51bWJlciBvZiBQb3dlclBDIEluc3RydWN0aW9ucyB0aGF0IGNvbXBsZXRlZC4KK2V2ZW50OjBYMDQxNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlA2NSA6IChHcm91cCA2NSBwbV9kbGF0ZW5jaWVzMykgTnVtYmVyIG9mIHJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkLgorZXZlbnQ6MFgwNDE1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlA2NSA6IChHcm91cCA2NSBwbV9kbGF0ZW5jaWVzMykgUHJvY2Vzc29yIEN5Y2xlcyBnYXRlZCBieSB0aGUgcnVuIGxhdGNoLiAgT3BlcmF0aW5nIHN5c3RlbXMgdXNlIHRoZSBydW4gbGF0Y2ggdG8gaW5kaWNhdGUgd2hlbiB0aGV5IGFyZSBkb2luZyB1c2VmdWwgd29yay4gIFRoZSBydW4gbGF0Y2ggaXMgdHlwaWNhbGx5IGNsZWFyZWQgaW4gdGhlIE9TIGlkbGUgbG9vcC4gIEdhdGluZyBieSB0aGUgcnVuIGxhdGNoIGZpbHRlcnMgb3V0IHRoZSBpZGxlIGxvb3AuCisKKyNHcm91cCA2NiBwbV9yZWplY3RzMSwgUmVqZWN0IGV2ZW50CitldmVudDowWDA0MjAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9SRUpFQ1RfR1JQNjYgOiAoR3JvdXAgNjYgcG1fcmVqZWN0czEpIFRoZSBMb2FkIFN0b3JlIFVuaXQgcmVqZWN0ZWQgYW4gaW5zdHJ1Y3Rpb24uIENvbWJpbmVkIFVuaXQgMCArIDEKK2V2ZW50OjBYMDQyMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVMF9SRUpFQ1RfTEhTX0dSUDY2IDogKEdyb3VwIDY2IHBtX3JlamVjdHMxKSBMb2FkIFN0b3JlIFVuaXQgMCByZWplY3RlZCBhIGxvYWQgaW5zdHJ1Y3Rpb24gdGhhdCBoYWQgYW4gYWRkcmVzcyBvdmVybGFwIHdpdGggYW4gb2xkZXIgc3RvcmUgaW4gdGhlIHN0b3JlIHF1ZXVlLiBUaGUgc3RvcmUgbXVzdCBiZSBjb21taXR0ZWQgYW5kIGRlLWFsbG9jYXRlZCBmcm9tIHRoZSBTdG9yZSBRdWV1ZSBiZWZvcmUgdGhlIGxvYWQgY2FuIGV4ZWN1dGUgc3VjY2Vzc2Z1bGx5LgorZXZlbnQ6MFgwNDIyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1UxX1JFSkVDVF9MSFNfR1JQNjYgOiAoR3JvdXAgNjYgcG1fcmVqZWN0czEpIExvYWQgU3RvcmUgVW5pdCAxIHJlamVjdGVkIGEgbG9hZCBpbnN0cnVjdGlvbiB0aGF0IGhhZCBhbiBhZGRyZXNzIG92ZXJsYXAgd2l0aCBhbiBvbGRlciBzdG9yZSBpbiB0aGUgc3RvcmUgcXVldWUuIFRoZSBzdG9yZSBtdXN0IGJlIGNvbW1pdHRlZCBhbmQgZGUtYWxsb2NhdGVkIGZyb20gdGhlIFN0b3JlIFF1ZXVlIGJlZm9yZSB0aGUgbG9hZCBjYW4gZXhlY3V0ZSBzdWNjZXNzZnVsbHkuCitldmVudDowWDA0MjMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9SRUpFQ1RfTEhTX0dSUDY2IDogKEdyb3VwIDY2IHBtX3JlamVjdHMxKSBUaGUgTG9hZCBTdG9yZSBVbml0IHJlamVjdGVkIGEgbG9hZCBsb2FkIGluc3RydWN0aW9uIHRoYXQgaGFkIGFuIGFkZHJlc3Mgb3ZlcmxhcCB3aXRoIGFuIG9sZGVyIHN0b3JlIGluIHRoZSBzdG9yZSBxdWV1ZS4gVGhlIHN0b3JlIG11c3QgYmUgY29tbWl0dGVkIGFuZCBkZS1hbGxvY2F0ZWQgZnJvbSB0aGUgU3RvcmUgUXVldWUgYmVmb3JlIHRoZSBsb2FkIGNhbiBleGVjdXRlIHN1Y2Nlc3NmdWxseS4gQ29tYmluZWQgVW5pdCAwICsgMQorZXZlbnQ6MFgwNDI0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDY2IDogKEdyb3VwIDY2IHBtX3JlamVjdHMxKSBOdW1iZXIgb2YgcnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQuCitldmVudDowWDA0MjUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDY2IDogKEdyb3VwIDY2IHBtX3JlamVjdHMxKSBQcm9jZXNzb3IgQ3ljbGVzIGdhdGVkIGJ5IHRoZSBydW4gbGF0Y2guICBPcGVyYXRpbmcgc3lzdGVtcyB1c2UgdGhlIHJ1biBsYXRjaCB0byBpbmRpY2F0ZSB3aGVuIHRoZXkgYXJlIGRvaW5nIHVzZWZ1bCB3b3JrLiAgVGhlIHJ1biBsYXRjaCBpcyB0eXBpY2FsbHkgY2xlYXJlZCBpbiB0aGUgT1MgaWRsZSBsb29wLiAgR2F0aW5nIGJ5IHRoZSBydW4gbGF0Y2ggZmlsdGVycyBvdXQgdGhlIGlkbGUgbG9vcC4KKworI0dyb3VwIDY3IHBtX3JlamVjdHMyLCBSZWplY3QgZXZlbnRzCitldmVudDowWDA0MzAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9SRUpFQ1RfR1JQNjcgOiAoR3JvdXAgNjcgcG1fcmVqZWN0czIpIFRoZSBMb2FkIFN0b3JlIFVuaXQgcmVqZWN0ZWQgYW4gaW5zdHJ1Y3Rpb24uIENvbWJpbmVkIFVuaXQgMCArIDEKK2V2ZW50OjBYMDQzMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVX1JFSkVDVF9FUkFUX01JU1NfR1JQNjcgOiAoR3JvdXAgNjcgcG1fcmVqZWN0czIpIFRvdGFsIGN5Y2xlcyB0aGUgTG9hZCBTdG9yZSBVbml0IGlzIGJ1c3kgcmVqZWN0aW5nIGluc3RydWN0aW9ucyBkdWUgdG8gYW4gRVJBVCBtaXNzLiBDb21iaW5lZCB1bml0IDAgKyAxLiBSZXF1ZXN0cyB0aGF0IG1pc3MgdGhlIERlcmF0IGFyZSByZWplY3RlZCBhbmQgcmV0cmllZCB1bnRpbCB0aGUgcmVxdWVzdCBoaXRzIGluIHRoZSBFcmF0LgorZXZlbnQ6MFgwNDMyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1VfUkVKRUNUX1NFVF9NUFJFRF9HUlA2NyA6IChHcm91cCA2NyBwbV9yZWplY3RzMikgVGhlIExvYWQgU3RvcmUgVW5pdCByZWplY3RlZCBhbiBpbnN0cnVjdGlvbiBiZWNhdXNlIHRoZSBjYWNoZSBzZXQgd2FzIGltcHJvcGVybHkgcHJlZGljdGVkLiBUaGlzIGlzIGEgZmFzdCByZWplY3QgYW5kIHdpbGwgYmUgaW1tZWRpYXRlbHkgcmVkaXNwYXRjaGVkLiBDb21iaW5lZCBVbml0IDAgKyAxCitldmVudDowWDA0MzMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9TUlFfRU1QVFlfQ1lDX0dSUDY3IDogKEdyb3VwIDY3IHBtX3JlamVjdHMyKSBUaGUgU3RvcmUgUmVxdWVzdCBRdWV1ZSBpcyBlbXB0eQorZXZlbnQ6MFgwNDM0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDY3IDogKEdyb3VwIDY3IHBtX3JlamVjdHMyKSBOdW1iZXIgb2YgcnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQuCitldmVudDowWDA0MzUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDY3IDogKEdyb3VwIDY3IHBtX3JlamVjdHMyKSBQcm9jZXNzb3IgQ3ljbGVzIGdhdGVkIGJ5IHRoZSBydW4gbGF0Y2guICBPcGVyYXRpbmcgc3lzdGVtcyB1c2UgdGhlIHJ1biBsYXRjaCB0byBpbmRpY2F0ZSB3aGVuIHRoZXkgYXJlIGRvaW5nIHVzZWZ1bCB3b3JrLiAgVGhlIHJ1biBsYXRjaCBpcyB0eXBpY2FsbHkgY2xlYXJlZCBpbiB0aGUgT1MgaWRsZSBsb29wLiAgR2F0aW5nIGJ5IHRoZSBydW4gbGF0Y2ggZmlsdGVycyBvdXQgdGhlIGlkbGUgbG9vcC4KKworI0dyb3VwIDY4IHBtX3JlamVjdHMzLCBTZXQgbWlzcHJlZGljdGlvbnMgcmVqZWN0cworZXZlbnQ6MFgwNDQwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1VfUkVKRUNUX1NFVF9NUFJFRF9HUlA2OCA6IChHcm91cCA2OCBwbV9yZWplY3RzMykgVGhlIExvYWQgU3RvcmUgVW5pdCByZWplY3RlZCBhbiBpbnN0cnVjdGlvbiBiZWNhdXNlIHRoZSBjYWNoZSBzZXQgd2FzIGltcHJvcGVybHkgcHJlZGljdGVkLiBUaGlzIGlzIGEgZmFzdCByZWplY3QgYW5kIHdpbGwgYmUgaW1tZWRpYXRlbHkgcmVkaXNwYXRjaGVkLiBDb21iaW5lZCBVbml0IDAgKyAxCitldmVudDowWDA0NDEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9TRVRfTVBSRURfR1JQNjggOiAoR3JvdXAgNjggcG1fcmVqZWN0czMpIExpbmUgYWxyZWFkeSBpbiBjYWNoZSBhdCByZWxvYWQgdGltZQorZXZlbnQ6MFgwNDQyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDY4IDogKEdyb3VwIDY4IHBtX3JlamVjdHMzKSBQcm9jZXNzb3IgQ3ljbGVzCitldmVudDowWDA0NDMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQNjggOiAoR3JvdXAgNjggcG1fcmVqZWN0czMpIE51bWJlciBvZiBQb3dlclBDIEluc3RydWN0aW9ucyB0aGF0IGNvbXBsZXRlZC4KK2V2ZW50OjBYMDQ0NCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlA2OCA6IChHcm91cCA2OCBwbV9yZWplY3RzMykgTnVtYmVyIG9mIHJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkLgorZXZlbnQ6MFgwNDQ1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlA2OCA6IChHcm91cCA2OCBwbV9yZWplY3RzMykgUHJvY2Vzc29yIEN5Y2xlcyBnYXRlZCBieSB0aGUgcnVuIGxhdGNoLiAgT3BlcmF0aW5nIHN5c3RlbXMgdXNlIHRoZSBydW4gbGF0Y2ggdG8gaW5kaWNhdGUgd2hlbiB0aGV5IGFyZSBkb2luZyB1c2VmdWwgd29yay4gIFRoZSBydW4gbGF0Y2ggaXMgdHlwaWNhbGx5IGNsZWFyZWQgaW4gdGhlIE9TIGlkbGUgbG9vcC4gIEdhdGluZyBieSB0aGUgcnVuIGxhdGNoIGZpbHRlcnMgb3V0IHRoZSBpZGxlIGxvb3AuCisKKyNHcm91cCA2OSBwbV9sc3VfcmVqZWN0LCBMU1UgUmVqZWN0IEV2ZW50CitldmVudDowWDA0NTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9SRUpFQ1RfTE1RX0ZVTExfR1JQNjkgOiAoR3JvdXAgNjkgcG1fbHN1X3JlamVjdCkgVG90YWwgY3ljbGVzIHRoZSBMb2FkIFN0b3JlIFVuaXQgaXMgYnVzeSByZWplY3RpbmcgaW5zdHJ1Y3Rpb25zIGJlY2F1c2UgdGhlIExvYWQgTWlzcyBRdWV1ZSB3YXMgZnVsbC4gVGhlIExNUSBoYXMgZWlnaHQgZW50cmllcy4gIElmIGFsbCB0aGUgZWlnaHQgZW50cmllcyBhcmUgZnVsbCwgc3Vic2VxdWVudCBsb2FkIGluc3RydWN0aW9ucyBhcmUgcmVqZWN0ZWQuIENvbWJpbmVkIHVuaXQgMCArIDEuCitldmVudDowWDA0NTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVTBfUkVKRUNUX0xNUV9GVUxMX0dSUDY5IDogKEdyb3VwIDY5IHBtX2xzdV9yZWplY3QpIFRvdGFsIGN5Y2xlcyB0aGUgTG9hZCBTdG9yZSBVbml0IDAgaXMgYnVzeSByZWplY3RpbmcgaW5zdHJ1Y3Rpb25zIGJlY2F1c2UgdGhlIExvYWQgTWlzcyBRdWV1ZSB3YXMgZnVsbC4gVGhlIExNUSBoYXMgZWlnaHQgZW50cmllcy4gIElmIGFsbCBlaWdodCBlbnRyaWVzIGFyZSBmdWxsLCBzdWJzZXF1ZW50IGxvYWQgaW5zdHJ1Y3Rpb25zIGFyZSByZWplY3RlZC4KK2V2ZW50OjBYMDQ1MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVMV9SRUpFQ1RfTE1RX0ZVTExfR1JQNjkgOiAoR3JvdXAgNjkgcG1fbHN1X3JlamVjdCkgVG90YWwgY3ljbGVzIHRoZSBMb2FkIFN0b3JlIFVuaXQgMSBpcyBidXN5IHJlamVjdGluZyBpbnN0cnVjdGlvbnMgYmVjYXVzZSB0aGUgTG9hZCBNaXNzIFF1ZXVlIHdhcyBmdWxsLiBUaGUgTE1RIGhhcyBlaWdodCBlbnRyaWVzLiAgSWYgYWxsIGVpZ2h0IGVudHJpZXMgYXJlIGZ1bGwsIHN1YnNlcXVlbnQgbG9hZCBpbnN0cnVjdGlvbnMgYXJlIHJlamVjdGVkLgorZXZlbnQ6MFgwNDUzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDY5IDogKEdyb3VwIDY5IHBtX2xzdV9yZWplY3QpIE51bWJlciBvZiBQb3dlclBDIEluc3RydWN0aW9ucyB0aGF0IGNvbXBsZXRlZC4KK2V2ZW50OjBYMDQ1NCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlA2OSA6IChHcm91cCA2OSBwbV9sc3VfcmVqZWN0KSBOdW1iZXIgb2YgcnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQuCitldmVudDowWDA0NTUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDY5IDogKEdyb3VwIDY5IHBtX2xzdV9yZWplY3QpIFByb2Nlc3NvciBDeWNsZXMgZ2F0ZWQgYnkgdGhlIHJ1biBsYXRjaC4gIE9wZXJhdGluZyBzeXN0ZW1zIHVzZSB0aGUgcnVuIGxhdGNoIHRvIGluZGljYXRlIHdoZW4gdGhleSBhcmUgZG9pbmcgdXNlZnVsIHdvcmsuICBUaGUgcnVuIGxhdGNoIGlzIHR5cGljYWxseSBjbGVhcmVkIGluIHRoZSBPUyBpZGxlIGxvb3AuICBHYXRpbmcgYnkgdGhlIHJ1biBsYXRjaCBmaWx0ZXJzIG91dCB0aGUgaWRsZSBsb29wLgorCisjR3JvdXAgNzAgcG1fbHN1X25jbGQsIE5vbiBjYWNoYWJsZSBsb2FkcworZXZlbnQ6MFgwNDYwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1VfTkNMRF9HUlA3MCA6IChHcm91cCA3MCBwbV9sc3VfbmNsZCkgQSBub24tY2FjaGVhYmxlIGxvYWQgd2FzIGV4ZWN1dGVkLiBDb21iaW5lZCBVbml0IDAgKyAxLgorZXZlbnQ6MFgwNDYxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1UwX05DTERfR1JQNzAgOiAoR3JvdXAgNzAgcG1fbHN1X25jbGQpIEEgbm9uLWNhY2hlYWJsZSBsb2FkIHdhcyBleGVjdXRlZCBieSB1bml0IDAuCitldmVudDowWDA0NjIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVTFfTkNMRF9HUlA3MCA6IChHcm91cCA3MCBwbV9sc3VfbmNsZCkgQSBub24tY2FjaGVhYmxlIGxvYWQgd2FzIGV4ZWN1dGVkIGJ5IFVuaXQgMC4KK2V2ZW50OjBYMDQ2MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlA3MCA6IChHcm91cCA3MCBwbV9sc3VfbmNsZCkgTnVtYmVyIG9mIFBvd2VyUEMgSW5zdHJ1Y3Rpb25zIHRoYXQgY29tcGxldGVkLgorZXZlbnQ6MFgwNDY0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDcwIDogKEdyb3VwIDcwIHBtX2xzdV9uY2xkKSBOdW1iZXIgb2YgcnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQuCitldmVudDowWDA0NjUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDcwIDogKEdyb3VwIDcwIHBtX2xzdV9uY2xkKSBQcm9jZXNzb3IgQ3ljbGVzIGdhdGVkIGJ5IHRoZSBydW4gbGF0Y2guICBPcGVyYXRpbmcgc3lzdGVtcyB1c2UgdGhlIHJ1biBsYXRjaCB0byBpbmRpY2F0ZSB3aGVuIHRoZXkgYXJlIGRvaW5nIHVzZWZ1bCB3b3JrLiAgVGhlIHJ1biBsYXRjaCBpcyB0eXBpY2FsbHkgY2xlYXJlZCBpbiB0aGUgT1MgaWRsZSBsb29wLiAgR2F0aW5nIGJ5IHRoZSBydW4gbGF0Y2ggZmlsdGVycyBvdXQgdGhlIGlkbGUgbG9vcC4KKworI0dyb3VwIDcxIHBtX2djdDEsIEdDVCBldmVudHMKK2V2ZW50OjBYMDQ3MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fR0NUX05PU0xPVF9DWUNfR1JQNzEgOiAoR3JvdXAgNzEgcG1fZ2N0MSkgQ3ljbGVzIHdoZW4gdGhlIEdsb2JhbCBDb21wbGV0aW9uIFRhYmxlIGhhcyBubyBzbG90cyBmcm9tIHRoaXMgdGhyZWFkLgorZXZlbnQ6MFgwNDcxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9HQ1RfRU1QVFlfQ1lDX0dSUDcxIDogKEdyb3VwIDcxIHBtX2djdDEpIEN5Y2xlcyB3aGVuIHRoZSBHbG9iYWwgQ29tcGxldGlvbiBUYWJsZSB3YXMgY29tcGxldGVseSBlbXB0eS4gIE5vIHRocmVhZCBoYWQgYW4gZW50cnkgYWxsb2NhdGVkLgorZXZlbnQ6MFgwNDcyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9HQ1RfRlVMTF9DWUNfR1JQNzEgOiAoR3JvdXAgNzEgcG1fZ2N0MSkgVGhlIEdsb2JhbCBDb21wbGV0aW9uIFRhYmxlIGlzIGNvbXBsZXRlbHkgZnVsbC4KK2V2ZW50OjBYMDQ3MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlA3MSA6IChHcm91cCA3MSBwbV9nY3QxKSBQcm9jZXNzb3IgQ3ljbGVzCitldmVudDowWDA0NzQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQNzEgOiAoR3JvdXAgNzEgcG1fZ2N0MSkgTnVtYmVyIG9mIHJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkLgorZXZlbnQ6MFgwNDc1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlA3MSA6IChHcm91cCA3MSBwbV9nY3QxKSBQcm9jZXNzb3IgQ3ljbGVzIGdhdGVkIGJ5IHRoZSBydW4gbGF0Y2guICBPcGVyYXRpbmcgc3lzdGVtcyB1c2UgdGhlIHJ1biBsYXRjaCB0byBpbmRpY2F0ZSB3aGVuIHRoZXkgYXJlIGRvaW5nIHVzZWZ1bCB3b3JrLiAgVGhlIHJ1biBsYXRjaCBpcyB0eXBpY2FsbHkgY2xlYXJlZCBpbiB0aGUgT1MgaWRsZSBsb29wLiAgR2F0aW5nIGJ5IHRoZSBydW4gbGF0Y2ggZmlsdGVycyBvdXQgdGhlIGlkbGUgbG9vcC4KKworI0dyb3VwIDcyIHBtX2djdDIsIEdDVCBFdmVudHMKK2V2ZW50OjBYMDQ4MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fR0NUX1VUSUxfMV9UT18yX1NMT1RTX0dSUDcyIDogKEdyb3VwIDcyIHBtX2djdDIpIEdDVCBVdGlsaXphdGlvbiAxLTIgZW50cmllcworZXZlbnQ6MFgwNDgxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9HQ1RfVVRJTF8zX1RPXzZfU0xPVFNfR1JQNzIgOiAoR3JvdXAgNzIgcG1fZ2N0MikgR0NUIFV0aWxpemF0aW9uIDMtNiBlbnRyaWVzCitldmVudDowWDA0ODIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0dDVF9VVElMXzdfVE9fMTBfU0xPVFNfR1JQNzIgOiAoR3JvdXAgNzIgcG1fZ2N0MikgR0NUIFV0aWxpemF0aW9uIDctMTAgZW50cmllcworZXZlbnQ6MFgwNDgzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9HQ1RfVVRJTF8xMV9QTFVTX1NMT1RTX0dSUDcyIDogKEdyb3VwIDcyIHBtX2djdDIpIEdDVCBVdGlsaXphdGlvbiAxMSsgZW50cmllcworZXZlbnQ6MFgwNDg0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDcyIDogKEdyb3VwIDcyIHBtX2djdDIpIE51bWJlciBvZiBydW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZC4KK2V2ZW50OjBYMDQ4NSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQNzIgOiAoR3JvdXAgNzIgcG1fZ2N0MikgUHJvY2Vzc29yIEN5Y2xlcyBnYXRlZCBieSB0aGUgcnVuIGxhdGNoLiAgT3BlcmF0aW5nIHN5c3RlbXMgdXNlIHRoZSBydW4gbGF0Y2ggdG8gaW5kaWNhdGUgd2hlbiB0aGV5IGFyZSBkb2luZyB1c2VmdWwgd29yay4gIFRoZSBydW4gbGF0Y2ggaXMgdHlwaWNhbGx5IGNsZWFyZWQgaW4gdGhlIE9TIGlkbGUgbG9vcC4gIEdhdGluZyBieSB0aGUgcnVuIGxhdGNoIGZpbHRlcnMgb3V0IHRoZSBpZGxlIGxvb3AuCisKKyNHcm91cCA3MyBwbV9MMl9jYXN0b3V0X2ludmFsaWRhdGVfMSwgTDIgY2FzdG91dCBhbmQgaW52YWxpZGF0ZSBldmVudHMKK2V2ZW50OjBYMDQ5MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDJfQ0FTVE9VVF9NT0RfR1JQNzMgOiAoR3JvdXAgNzMgcG1fTDJfY2FzdG91dF9pbnZhbGlkYXRlXzEpIEFuIEwyIGxpbmUgaW4gdGhlIE1vZGlmaWVkIHN0YXRlIHdhcyBjYXN0b3V0LiBUb3RhbCBmb3IgYWxsIHNsaWNlcy4KK2V2ZW50OjBYMDQ5MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDJfRENfSU5WX0dSUDczIDogKEdyb3VwIDczIHBtX0wyX2Nhc3RvdXRfaW52YWxpZGF0ZV8xKSBUaGUgTDIgaW52YWxpZGF0ZWQgYSBsaW5lIGluIHByb2Nlc3NvcidzIGRhdGEgY2FjaGUuICBUaGlzIGlzIGNhdXNlZCBieSB0aGUgTDIgbGluZSBiZWluZyBjYXN0IG91dCBvciBpbnZhbGlkYXRlZC4gVG90YWwgZm9yIGFsbCBzbGljZXMKK2V2ZW50OjBYMDQ5MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlA3MyA6IChHcm91cCA3MyBwbV9MMl9jYXN0b3V0X2ludmFsaWRhdGVfMSkgTnVtYmVyIG9mIFBvd2VyUEMgSW5zdHJ1Y3Rpb25zIHRoYXQgY29tcGxldGVkLgorZXZlbnQ6MFgwNDkzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDczIDogKEdyb3VwIDczIHBtX0wyX2Nhc3RvdXRfaW52YWxpZGF0ZV8xKSBQcm9jZXNzb3IgQ3ljbGVzCitldmVudDowWDA0OTQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQNzMgOiAoR3JvdXAgNzMgcG1fTDJfY2FzdG91dF9pbnZhbGlkYXRlXzEpIE51bWJlciBvZiBydW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZC4KK2V2ZW50OjBYMDQ5NSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQNzMgOiAoR3JvdXAgNzMgcG1fTDJfY2FzdG91dF9pbnZhbGlkYXRlXzEpIFByb2Nlc3NvciBDeWNsZXMgZ2F0ZWQgYnkgdGhlIHJ1biBsYXRjaC4gIE9wZXJhdGluZyBzeXN0ZW1zIHVzZSB0aGUgcnVuIGxhdGNoIHRvIGluZGljYXRlIHdoZW4gdGhleSBhcmUgZG9pbmcgdXNlZnVsIHdvcmsuICBUaGUgcnVuIGxhdGNoIGlzIHR5cGljYWxseSBjbGVhcmVkIGluIHRoZSBPUyBpZGxlIGxvb3AuICBHYXRpbmcgYnkgdGhlIHJ1biBsYXRjaCBmaWx0ZXJzIG91dCB0aGUgaWRsZSBsb29wLgorCisjR3JvdXAgNzQgcG1fTDJfY2FzdG91dF9pbnZhbGlkYXRlXzIsIEwyIGNhc3RvdXQgYW5kIGludmFsaWRhdGUgZXZlbnRzCitldmVudDowWDA0QTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wyX0NBU1RPVVRfU0hSX0dSUDc0IDogKEdyb3VwIDc0IHBtX0wyX2Nhc3RvdXRfaW52YWxpZGF0ZV8yKSBBbiBMMiBsaW5lIGluIHRoZSBTaGFyZWQgc3RhdGUgd2FzIGNhc3RvdXQuIFRvdGFsIGZvciBhbGwgc2xpY2VzLgorZXZlbnQ6MFgwNEExIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMl9JQ19JTlZfR1JQNzQgOiAoR3JvdXAgNzQgcG1fTDJfY2FzdG91dF9pbnZhbGlkYXRlXzIpIEljYWNoZSBJbnZhbGlkYXRlcyBmcm9tIEwyCitldmVudDowWDA0QTIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQNzQgOiAoR3JvdXAgNzQgcG1fTDJfY2FzdG91dF9pbnZhbGlkYXRlXzIpIE51bWJlciBvZiBQb3dlclBDIEluc3RydWN0aW9ucyB0aGF0IGNvbXBsZXRlZC4KK2V2ZW50OjBYMDRBMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlA3NCA6IChHcm91cCA3NCBwbV9MMl9jYXN0b3V0X2ludmFsaWRhdGVfMikgUHJvY2Vzc29yIEN5Y2xlcworZXZlbnQ6MFgwNEE0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDc0IDogKEdyb3VwIDc0IHBtX0wyX2Nhc3RvdXRfaW52YWxpZGF0ZV8yKSBOdW1iZXIgb2YgcnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQuCitldmVudDowWDA0QTUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDc0IDogKEdyb3VwIDc0IHBtX0wyX2Nhc3RvdXRfaW52YWxpZGF0ZV8yKSBQcm9jZXNzb3IgQ3ljbGVzIGdhdGVkIGJ5IHRoZSBydW4gbGF0Y2guICBPcGVyYXRpbmcgc3lzdGVtcyB1c2UgdGhlIHJ1biBsYXRjaCB0byBpbmRpY2F0ZSB3aGVuIHRoZXkgYXJlIGRvaW5nIHVzZWZ1bCB3b3JrLiAgVGhlIHJ1biBsYXRjaCBpcyB0eXBpY2FsbHkgY2xlYXJlZCBpbiB0aGUgT1MgaWRsZSBsb29wLiAgR2F0aW5nIGJ5IHRoZSBydW4gbGF0Y2ggZmlsdGVycyBvdXQgdGhlIGlkbGUgbG9vcC4KKworI0dyb3VwIDc1IHBtX2Rpc3BfaGVsZDEsIERpc3BhdGNoIGhlbGQgY29uZGl0aW9ucworZXZlbnQ6MFgwNEIwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9ESVNQX0hFTERfR1JQNzUgOiAoR3JvdXAgNzUgcG1fZGlzcF9oZWxkMSkgRGlzcGF0Y2ggSGVsZAorZXZlbnQ6MFgwNEIxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EUFVfSEVMRF9QT1dFUl9HUlA3NSA6IChHcm91cCA3NSBwbV9kaXNwX2hlbGQxKSBDeWNsZXMgdGhhdCBJbnN0cnVjdGlvbiBEaXNwYXRjaCB3YXMgaGVsZCBkdWUgdG8gcG93ZXIgbWFuYWdlbWVudC4gTW9yZSB0aGFuIG9uZSBob2xkIGNvbmRpdGlvbiBjYW4gZXhpc3QgYXQgdGhlIHNhbWUgdGltZQorZXZlbnQ6MFgwNEIyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9ESVNQX0hFTERfVEhFUk1BTF9HUlA3NSA6IChHcm91cCA3NSBwbV9kaXNwX2hlbGQxKSBEaXNwYXRjaCBIZWxkIGR1ZSB0byBUaGVybWFsCitldmVudDowWDA0QjMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNXzFQTFVTX1BQQ19ESVNQX0dSUDc1IDogKEdyb3VwIDc1IHBtX2Rpc3BfaGVsZDEpIEEgZ3JvdXAgY29udGFpbmluZyBhdCBsZWFzdCBvbmUgUFBDIGluc3RydWN0aW9uIHdhcyBkaXNwYXRjaGVkLiBGb3IgbWljcm9jb2RlZCBpbnN0cnVjdGlvbnMgdGhhdCBzcGFuIG11bHRpcGxlIGdyb3VwcywgdGhpcyB3aWxsIG9ubHkgb2NjdXIgb25jZS4KK2V2ZW50OjBYMDRCNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlA3NSA6IChHcm91cCA3NSBwbV9kaXNwX2hlbGQxKSBOdW1iZXIgb2YgcnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQuCitldmVudDowWDA0QjUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDc1IDogKEdyb3VwIDc1IHBtX2Rpc3BfaGVsZDEpIFByb2Nlc3NvciBDeWNsZXMgZ2F0ZWQgYnkgdGhlIHJ1biBsYXRjaC4gIE9wZXJhdGluZyBzeXN0ZW1zIHVzZSB0aGUgcnVuIGxhdGNoIHRvIGluZGljYXRlIHdoZW4gdGhleSBhcmUgZG9pbmcgdXNlZnVsIHdvcmsuICBUaGUgcnVuIGxhdGNoIGlzIHR5cGljYWxseSBjbGVhcmVkIGluIHRoZSBPUyBpZGxlIGxvb3AuICBHYXRpbmcgYnkgdGhlIHJ1biBsYXRjaCBmaWx0ZXJzIG91dCB0aGUgaWRsZSBsb29wLgorCisjR3JvdXAgNzYgcG1fZGlzcF9oZWxkMiwgRGlzcGF0Y2ggaGVsZCBjb25kaXRpb25zCitldmVudDowWDA0QzAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1RIRVJNQUxfV0FSTl9HUlA3NiA6IChHcm91cCA3NiBwbV9kaXNwX2hlbGQyKSBQcm9jZXNzb3IgaW4gVGhlcm1hbCBXYXJuaW5nCitldmVudDowWDA0QzEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RQVV9IRUxEX1BPV0VSX0dSUDc2IDogKEdyb3VwIDc2IHBtX2Rpc3BfaGVsZDIpIEN5Y2xlcyB0aGF0IEluc3RydWN0aW9uIERpc3BhdGNoIHdhcyBoZWxkIGR1ZSB0byBwb3dlciBtYW5hZ2VtZW50LiBNb3JlIHRoYW4gb25lIGhvbGQgY29uZGl0aW9uIGNhbiBleGlzdCBhdCB0aGUgc2FtZSB0aW1lCitldmVudDowWDA0QzIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RJU1BfSEVMRF9USEVSTUFMX0dSUDc2IDogKEdyb3VwIDc2IHBtX2Rpc3BfaGVsZDIpIERpc3BhdGNoIEhlbGQgZHVlIHRvIFRoZXJtYWwKK2V2ZW50OjBYMDRDMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fVEhFUk1BTF9NQVhfR1JQNzYgOiAoR3JvdXAgNzYgcG1fZGlzcF9oZWxkMikgVGhlIHByb2Nlc3NvciBleHBlcmllbmNlZCBhIHRoZXJtYWwgb3ZlcmxvYWQgY29uZGl0aW9uLiBUaGlzIGJpdCBpcyBzdGlja3ksIGl0IHJlbWFpbnMgc2V0IHVudGlsIGNsZWFyZWQgYnkgc29mdHdhcmUuCitldmVudDowWDA0QzQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQNzYgOiAoR3JvdXAgNzYgcG1fZGlzcF9oZWxkMikgTnVtYmVyIG9mIHJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkLgorZXZlbnQ6MFgwNEM1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlA3NiA6IChHcm91cCA3NiBwbV9kaXNwX2hlbGQyKSBQcm9jZXNzb3IgQ3ljbGVzIGdhdGVkIGJ5IHRoZSBydW4gbGF0Y2guICBPcGVyYXRpbmcgc3lzdGVtcyB1c2UgdGhlIHJ1biBsYXRjaCB0byBpbmRpY2F0ZSB3aGVuIHRoZXkgYXJlIGRvaW5nIHVzZWZ1bCB3b3JrLiAgVGhlIHJ1biBsYXRjaCBpcyB0eXBpY2FsbHkgY2xlYXJlZCBpbiB0aGUgT1MgaWRsZSBsb29wLiAgR2F0aW5nIGJ5IHRoZSBydW4gbGF0Y2ggZmlsdGVycyBvdXQgdGhlIGlkbGUgbG9vcC4KKworI0dyb3VwIDc3IHBtX2Rpc3BfY2xiX2hlbGQsIERpc3BsYXkgQ0xCIGhlbGQgY29uZGl0aW9ucworZXZlbnQ6MFgwNEQwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9ESVNQX0NMQl9IRUxEX0JBTF9HUlA3NyA6IChHcm91cCA3NyBwbV9kaXNwX2NsYl9oZWxkKSBEaXNwYXRjaC9DTEIgSG9sZDogQmFsYW5jZQorZXZlbnQ6MFgwNEQxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9ESVNQX0NMQl9IRUxEX1JFU19HUlA3NyA6IChHcm91cCA3NyBwbV9kaXNwX2NsYl9oZWxkKSBEaXNwYXRjaC9DTEIgSG9sZDogUmVzb3VyY2UKK2V2ZW50OjBYMDREMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRElTUF9DTEJfSEVMRF9UTEJJRV9HUlA3NyA6IChHcm91cCA3NyBwbV9kaXNwX2NsYl9oZWxkKSBEaXNwYXRjaCBIb2xkOiBEdWUgdG8gVExCSUUKK2V2ZW50OjBYMDREMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRElTUF9DTEJfSEVMRF9TWU5DX0dSUDc3IDogKEdyb3VwIDc3IHBtX2Rpc3BfY2xiX2hlbGQpIERpc3BhdGNoL0NMQiBIb2xkOiBTeW5jIHR5cGUgaW5zdHJ1Y3Rpb24KK2V2ZW50OjBYMDRENCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlA3NyA6IChHcm91cCA3NyBwbV9kaXNwX2NsYl9oZWxkKSBOdW1iZXIgb2YgcnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQuCitldmVudDowWDA0RDUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDc3IDogKEdyb3VwIDc3IHBtX2Rpc3BfY2xiX2hlbGQpIFByb2Nlc3NvciBDeWNsZXMgZ2F0ZWQgYnkgdGhlIHJ1biBsYXRjaC4gIE9wZXJhdGluZyBzeXN0ZW1zIHVzZSB0aGUgcnVuIGxhdGNoIHRvIGluZGljYXRlIHdoZW4gdGhleSBhcmUgZG9pbmcgdXNlZnVsIHdvcmsuICBUaGUgcnVuIGxhdGNoIGlzIHR5cGljYWxseSBjbGVhcmVkIGluIHRoZSBPUyBpZGxlIGxvb3AuICBHYXRpbmcgYnkgdGhlIHJ1biBsYXRjaCBmaWx0ZXJzIG91dCB0aGUgaWRsZSBsb29wLgorCisjR3JvdXAgNzggcG1fcG93ZXIsIFBvd2VyIEV2ZW50cworZXZlbnQ6MFgwNEUwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9QT1dFUl9FVkVOVDFfR1JQNzggOiAoR3JvdXAgNzggcG1fcG93ZXIpIFBvd2VyIE1hbmFnZW1lbnQgRXZlbnQgMQorZXZlbnQ6MFgwNEUxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9QT1dFUl9FVkVOVDJfR1JQNzggOiAoR3JvdXAgNzggcG1fcG93ZXIpIFBvd2VyIE1hbmFnZW1lbnQgRXZlbnQgMgorZXZlbnQ6MFgwNEUyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9QT1dFUl9FVkVOVDNfR1JQNzggOiAoR3JvdXAgNzggcG1fcG93ZXIpIFBvd2VyIE1hbmFnZW1lbnQgRXZlbnQgMworZXZlbnQ6MFgwNEUzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9QT1dFUl9FVkVOVDRfR1JQNzggOiAoR3JvdXAgNzggcG1fcG93ZXIpIFBvd2VyIE1hbmFnZW1lbnQgRXZlbnQgNAorZXZlbnQ6MFgwNEU0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDc4IDogKEdyb3VwIDc4IHBtX3Bvd2VyKSBOdW1iZXIgb2YgcnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQuCitldmVudDowWDA0RTUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDc4IDogKEdyb3VwIDc4IHBtX3Bvd2VyKSBQcm9jZXNzb3IgQ3ljbGVzIGdhdGVkIGJ5IHRoZSBydW4gbGF0Y2guICBPcGVyYXRpbmcgc3lzdGVtcyB1c2UgdGhlIHJ1biBsYXRjaCB0byBpbmRpY2F0ZSB3aGVuIHRoZXkgYXJlIGRvaW5nIHVzZWZ1bCB3b3JrLiAgVGhlIHJ1biBsYXRjaCBpcyB0eXBpY2FsbHkgY2xlYXJlZCBpbiB0aGUgT1MgaWRsZSBsb29wLiAgR2F0aW5nIGJ5IHRoZSBydW4gbGF0Y2ggZmlsdGVycyBvdXQgdGhlIGlkbGUgbG9vcC4KKworI0dyb3VwIDc5IHBtX2Rpc3BhdGNoMSwgR3JvdXBzIGFuZCBpbnN0cnVjdGlvbnMgZGlzcGF0Y2hlZAorZXZlbnQ6MFgwNEYwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV8xUExVU19QUENfQ01QTF9HUlA3OSA6IChHcm91cCA3OSBwbV9kaXNwYXRjaDEpIEEgZ3JvdXAgY29udGFpbmluZyBhdCBsZWFzdCBvbmUgUFBDIGluc3RydWN0aW9uIGNvbXBsZXRlZC4gRm9yIG1pY3JvY29kZWQgaW5zdHJ1Y3Rpb25zIHRoYXQgc3BhbiBtdWx0aXBsZSBncm91cHMsIHRoaXMgd2lsbCBvbmx5IG9jY3VyIG9uY2UuCitldmVudDowWDA0RjEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lOU1RfRElTUF9HUlA3OSA6IChHcm91cCA3OSBwbV9kaXNwYXRjaDEpIE51bWJlciBvZiBQb3dlclBDIGluc3RydWN0aW9ucyBzdWNjZXNzZnVsbHkgZGlzcGF0Y2hlZC4KK2V2ZW50OjBYMDRGMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fR1JQX0RJU1BfR1JQNzkgOiAoR3JvdXAgNzkgcG1fZGlzcGF0Y2gxKSBBIGdyb3VwIHdhcyBkaXNwYXRjaGVkCitldmVudDowWDA0RjMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNXzFQTFVTX1BQQ19ESVNQX0dSUDc5IDogKEdyb3VwIDc5IHBtX2Rpc3BhdGNoMSkgQSBncm91cCBjb250YWluaW5nIGF0IGxlYXN0IG9uZSBQUEMgaW5zdHJ1Y3Rpb24gd2FzIGRpc3BhdGNoZWQuIEZvciBtaWNyb2NvZGVkIGluc3RydWN0aW9ucyB0aGF0IHNwYW4gbXVsdGlwbGUgZ3JvdXBzLCB0aGlzIHdpbGwgb25seSBvY2N1ciBvbmNlLgorZXZlbnQ6MFgwNEY0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDc5IDogKEdyb3VwIDc5IHBtX2Rpc3BhdGNoMSkgTnVtYmVyIG9mIHJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkLgorZXZlbnQ6MFgwNEY1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlA3OSA6IChHcm91cCA3OSBwbV9kaXNwYXRjaDEpIFByb2Nlc3NvciBDeWNsZXMgZ2F0ZWQgYnkgdGhlIHJ1biBsYXRjaC4gIE9wZXJhdGluZyBzeXN0ZW1zIHVzZSB0aGUgcnVuIGxhdGNoIHRvIGluZGljYXRlIHdoZW4gdGhleSBhcmUgZG9pbmcgdXNlZnVsIHdvcmsuICBUaGUgcnVuIGxhdGNoIGlzIHR5cGljYWxseSBjbGVhcmVkIGluIHRoZSBPUyBpZGxlIGxvb3AuICBHYXRpbmcgYnkgdGhlIHJ1biBsYXRjaCBmaWx0ZXJzIG91dCB0aGUgaWRsZSBsb29wLgorCisjR3JvdXAgODAgcG1fZGlzcGF0Y2gyLCBHcm91cHMgYW5kIGluc3RydWN0aW9ucyBkaXNwYXRjaGVkCitldmVudDowWDA1MDAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNXzFQTFVTX1BQQ19DTVBMX0dSUDgwIDogKEdyb3VwIDgwIHBtX2Rpc3BhdGNoMikgQSBncm91cCBjb250YWluaW5nIGF0IGxlYXN0IG9uZSBQUEMgaW5zdHJ1Y3Rpb24gY29tcGxldGVkLiBGb3IgbWljcm9jb2RlZCBpbnN0cnVjdGlvbnMgdGhhdCBzcGFuIG11bHRpcGxlIGdyb3VwcywgdGhpcyB3aWxsIG9ubHkgb2NjdXIgb25jZS4KK2V2ZW50OjBYMDUwMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlA4MCA6IChHcm91cCA4MCBwbV9kaXNwYXRjaDIpIFByb2Nlc3NvciBDeWNsZXMKK2V2ZW50OjBYMDUwMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlA4MCA6IChHcm91cCA4MCBwbV9kaXNwYXRjaDIpIE51bWJlciBvZiBQb3dlclBDIEluc3RydWN0aW9ucyB0aGF0IGNvbXBsZXRlZC4KK2V2ZW50OjBYMDUwMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fMVBMVVNfUFBDX0RJU1BfR1JQODAgOiAoR3JvdXAgODAgcG1fZGlzcGF0Y2gyKSBBIGdyb3VwIGNvbnRhaW5pbmcgYXQgbGVhc3Qgb25lIFBQQyBpbnN0cnVjdGlvbiB3YXMgZGlzcGF0Y2hlZC4gRm9yIG1pY3JvY29kZWQgaW5zdHJ1Y3Rpb25zIHRoYXQgc3BhbiBtdWx0aXBsZSBncm91cHMsIHRoaXMgd2lsbCBvbmx5IG9jY3VyIG9uY2UuCitldmVudDowWDA1MDQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQODAgOiAoR3JvdXAgODAgcG1fZGlzcGF0Y2gyKSBOdW1iZXIgb2YgcnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQuCitldmVudDowWDA1MDUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDgwIDogKEdyb3VwIDgwIHBtX2Rpc3BhdGNoMikgUHJvY2Vzc29yIEN5Y2xlcyBnYXRlZCBieSB0aGUgcnVuIGxhdGNoLiAgT3BlcmF0aW5nIHN5c3RlbXMgdXNlIHRoZSBydW4gbGF0Y2ggdG8gaW5kaWNhdGUgd2hlbiB0aGV5IGFyZSBkb2luZyB1c2VmdWwgd29yay4gIFRoZSBydW4gbGF0Y2ggaXMgdHlwaWNhbGx5IGNsZWFyZWQgaW4gdGhlIE9TIGlkbGUgbG9vcC4gIEdhdGluZyBieSB0aGUgcnVuIGxhdGNoIGZpbHRlcnMgb3V0IHRoZSBpZGxlIGxvb3AuCisKKyNHcm91cCA4MSBwbV9pYywgSSBjYWNoZSBvcGVyYXRpb25zCitldmVudDowWDA1MTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lDX1JFUV9BTExfR1JQODEgOiAoR3JvdXAgODEgcG1faWMpIEljYWNoZSByZXF1ZXN0cywgcHJlZmV0Y2ggKyBkZW1hbmQKK2V2ZW50OjBYMDUxMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSUNfV1JJVEVfQUxMX0dSUDgxIDogKEdyb3VwIDgxIHBtX2ljKSBJY2FjaGUgc2VjdG9ycyB3cml0dGVuLCBwcmVmZXRjaCArIGRlbWFuZAorZXZlbnQ6MFgwNTEyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JQ19QUkVGX0NBTkNFTF9BTExfR1JQODEgOiAoR3JvdXAgODEgcG1faWMpIFByZWZldGNoIENhbmNlbGVkIGR1ZSB0byBwYWdlIGJvdW5kYXJ5IG9yIGljYWNoZSBoaXQKK2V2ZW50OjBYMDUxMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSUNfREVNQU5EX0wyX0JSX0FMTF9HUlA4MSA6IChHcm91cCA4MSBwbV9pYykgIEwyIEkgY2FjaGUgZGVtYW5kIHJlcXVlc3QgZHVlIHRvIEJIVCBvciByZWRpcmVjdAorZXZlbnQ6MFgwNTE0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDgxIDogKEdyb3VwIDgxIHBtX2ljKSBOdW1iZXIgb2YgcnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQuCitldmVudDowWDA1MTUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDgxIDogKEdyb3VwIDgxIHBtX2ljKSBQcm9jZXNzb3IgQ3ljbGVzIGdhdGVkIGJ5IHRoZSBydW4gbGF0Y2guICBPcGVyYXRpbmcgc3lzdGVtcyB1c2UgdGhlIHJ1biBsYXRjaCB0byBpbmRpY2F0ZSB3aGVuIHRoZXkgYXJlIGRvaW5nIHVzZWZ1bCB3b3JrLiAgVGhlIHJ1biBsYXRjaCBpcyB0eXBpY2FsbHkgY2xlYXJlZCBpbiB0aGUgT1MgaWRsZSBsb29wLiAgR2F0aW5nIGJ5IHRoZSBydW4gbGF0Y2ggZmlsdGVycyBvdXQgdGhlIGlkbGUgbG9vcC4KKworI0dyb3VwIDgyIHBtX2ljX3ByZWZfY2FuY2VsLCBJbnN0cnVjdGlvbiBwcmUtZmV0Y2hlZCBjYW5jZWxsZWQKK2V2ZW50OjBYMDUyMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSUNfUFJFRl9DQU5DRUxfUEFHRV9HUlA4MiA6IChHcm91cCA4MiBwbV9pY19wcmVmX2NhbmNlbCkgUHJlZmV0Y2ggQ2FuY2VsZWQgZHVlIHRvIHBhZ2UgYm91bmRhcnkKK2V2ZW50OjBYMDUyMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSUNfUFJFRl9DQU5DRUxfSElUX0dSUDgyIDogKEdyb3VwIDgyIHBtX2ljX3ByZWZfY2FuY2VsKSBQcmVmZXRjaCBDYW5jZWxlZCBkdWUgdG8gaWNhY2hlIGhpdAorZXZlbnQ6MFgwNTIyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JQ19QUkVGX0NBTkNFTF9MMl9HUlA4MiA6IChHcm91cCA4MiBwbV9pY19wcmVmX2NhbmNlbCkgTDIgU3F1YXNoZWQgcmVxdWVzdAorZXZlbnQ6MFgwNTIzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JQ19QUkVGX0NBTkNFTF9BTExfR1JQODIgOiAoR3JvdXAgODIgcG1faWNfcHJlZl9jYW5jZWwpIFByZWZldGNoIENhbmNlbGVkIGR1ZSB0byBwYWdlIGJvdW5kYXJ5IG9yIGljYWNoZSBoaXQKK2V2ZW50OjBYMDUyNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlA4MiA6IChHcm91cCA4MiBwbV9pY19wcmVmX2NhbmNlbCkgTnVtYmVyIG9mIHJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkLgorZXZlbnQ6MFgwNTI1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlA4MiA6IChHcm91cCA4MiBwbV9pY19wcmVmX2NhbmNlbCkgUHJvY2Vzc29yIEN5Y2xlcyBnYXRlZCBieSB0aGUgcnVuIGxhdGNoLiAgT3BlcmF0aW5nIHN5c3RlbXMgdXNlIHRoZSBydW4gbGF0Y2ggdG8gaW5kaWNhdGUgd2hlbiB0aGV5IGFyZSBkb2luZyB1c2VmdWwgd29yay4gIFRoZSBydW4gbGF0Y2ggaXMgdHlwaWNhbGx5IGNsZWFyZWQgaW4gdGhlIE9TIGlkbGUgbG9vcC4gIEdhdGluZyBieSB0aGUgcnVuIGxhdGNoIGZpbHRlcnMgb3V0IHRoZSBpZGxlIGxvb3AuCisKKyNHcm91cCA4MyBwbV9pY19taXNzLCBJY2FjaGUgYW5kIEllcmF0IG1pc3MgZXZlbnRzCitldmVudDowWDA1MzAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lFUkFUX01JU1NfR1JQODMgOiAoR3JvdXAgODMgcG1faWNfbWlzcykgQSB0cmFuc2xhdGlvbiByZXF1ZXN0IG1pc3NlZCB0aGUgSW5zdHJ1Y3Rpb24gRWZmZWN0aXZlIHRvIFJlYWwgQWRkcmVzcyBUcmFuc2xhdGlvbiAoRVJBVCkgdGFibGUKK2V2ZW50OjBYMDUzMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDFfSUNBQ0hFX01JU1NfR1JQODMgOiAoR3JvdXAgODMgcG1faWNfbWlzcykgQW4gaW5zdHJ1Y3Rpb24gZmV0Y2ggcmVxdWVzdCBtaXNzZWQgdGhlIEwxIGNhY2hlLgorZXZlbnQ6MFgwNTMyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDgzIDogKEdyb3VwIDgzIHBtX2ljX21pc3MpIE51bWJlciBvZiBQb3dlclBDIEluc3RydWN0aW9ucyB0aGF0IGNvbXBsZXRlZC4KK2V2ZW50OjBYMDUzMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlA4MyA6IChHcm91cCA4MyBwbV9pY19taXNzKSBQcm9jZXNzb3IgQ3ljbGVzCitldmVudDowWDA1MzQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQODMgOiAoR3JvdXAgODMgcG1faWNfbWlzcykgTnVtYmVyIG9mIHJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkLgorZXZlbnQ6MFgwNTM1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlA4MyA6IChHcm91cCA4MyBwbV9pY19taXNzKSBQcm9jZXNzb3IgQ3ljbGVzIGdhdGVkIGJ5IHRoZSBydW4gbGF0Y2guICBPcGVyYXRpbmcgc3lzdGVtcyB1c2UgdGhlIHJ1biBsYXRjaCB0byBpbmRpY2F0ZSB3aGVuIHRoZXkgYXJlIGRvaW5nIHVzZWZ1bCB3b3JrLiAgVGhlIHJ1biBsYXRjaCBpcyB0eXBpY2FsbHkgY2xlYXJlZCBpbiB0aGUgT1MgaWRsZSBsb29wLiAgR2F0aW5nIGJ5IHRoZSBydW4gbGF0Y2ggZmlsdGVycyBvdXQgdGhlIGlkbGUgbG9vcC4KKworI0dyb3VwIDg0IHBtX2NwaV9zdGFjazEsIENQSSBzdGFjayBicmVha2Rvd24KK2V2ZW50OjBYMDU0MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fREFUQV9GUk9NX0wyX0dSUDg0IDogKEdyb3VwIDg0IHBtX2NwaV9zdGFjazEpIFRoZSBwcm9jZXNzb3IncyBEYXRhIENhY2hlIHdhcyByZWxvYWRlZCBmcm9tIHRoZSBsb2NhbCBMMiBkdWUgdG8gYSBkZW1hbmQgbG9hZC4KK2V2ZW50OjBYMDU0MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fQ01QTFVfU1RBTExfRENBQ0hFX01JU1NfR1JQODQgOiAoR3JvdXAgODQgcG1fY3BpX3N0YWNrMSkgRm9sbG93aW5nIGEgY29tcGxldGlvbiBzdGFsbCAoYW55IHBlcmlvZCB3aGVuIG5vIGdyb3VwcyBjb21wbGV0ZWQpIHRoZSBsYXN0IGluc3RydWN0aW9uIHRvIGZpbmlzaCBiZWZvcmUgY29tcGxldGlvbiByZXN1bWVzIHN1ZmZlcmVkIGEgRGF0YSBDYWNoZSBNaXNzLiBEYXRhIENhY2hlIE1pc3MgaGFzIGhpZ2hlciBwcmlvcml0eSB0aGFuIGFueSBvdGhlciBMb2FkL1N0b3JlIGRlbGF5LCBzbyBpZiBhbiBpbnN0cnVjdGlvbiBlbmNvdW50ZXJzIG11bHRpcGxlIGRlbGF5cyBvbmx5IHRoZSBEYXRhIENhY2hlIE1pc3Mgd2lsbCBiZSByZXBvcnRlZCBhbmQgdGhlIGVudGlyZSBkZWxheSBwZXJpb2Qgd2lsbCBiZSBjaGFyZ2VkIHRvIERhdGEgQ2FjaGUgTWlzcy4gVGhpcyBpcyBhIHN1YnNldCBvZiBQTV9DTVBMVV9TVEFMTF9MU1UuCitldmVudDowWDA1NDIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wxX0RDQUNIRV9SRUxPQURfVkFMSURfR1JQODQgOiAoR3JvdXAgODQgcG1fY3BpX3N0YWNrMSkgVGhlIGRhdGEgc291cmNlIGluZm9ybWF0aW9uIGlzIHZhbGlkLHRoZSBkYXRhIGNhY2hlIGhhcyBiZWVuIHJlbG9hZGVkLiAgUHJpb3IgdG8gUE9XRVI1KyB0aGlzIGluY2x1ZGVkIGRhdGEgY2FjaGUgcmVsb2FkcyBkdWUgdG8gcHJlZmV0Y2ggYWN0aXZpdHkuICBXaXRoIFBPV0VSNSsgdGhpcyBub3cgb25seSBpbmNsdWRlcyByZWxvYWRzIGR1ZSB0byBkZW1hbmQgbG9hZHMuCitldmVudDowWDA1NDMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0NNUExVX1NUQUxMX0VSQVRfTUlTU19HUlA4NCA6IChHcm91cCA4NCBwbV9jcGlfc3RhY2sxKSBGb2xsb3dpbmcgYSBjb21wbGV0aW9uIHN0YWxsIChhbnkgcGVyaW9kIHdoZW4gbm8gZ3JvdXBzIGNvbXBsZXRlZCkgdGhlIGxhc3QgaW5zdHJ1Y3Rpb24gdG8gZmluaXNoIGJlZm9yZSBjb21wbGV0aW9uIHJlc3VtZXMgc3VmZmVyZWQgYW4gRVJBVCBtaXNzLiBUaGlzIGlzIGEgc3Vic2V0IG9mICBQTV9DTVBMVV9TVEFMTF9SRUpFQ1QuCitldmVudDowWDA1NDQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQODQgOiAoR3JvdXAgODQgcG1fY3BpX3N0YWNrMSkgTnVtYmVyIG9mIHJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkLgorZXZlbnQ6MFgwNTQ1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlA4NCA6IChHcm91cCA4NCBwbV9jcGlfc3RhY2sxKSBQcm9jZXNzb3IgQ3ljbGVzIGdhdGVkIGJ5IHRoZSBydW4gbGF0Y2guICBPcGVyYXRpbmcgc3lzdGVtcyB1c2UgdGhlIHJ1biBsYXRjaCB0byBpbmRpY2F0ZSB3aGVuIHRoZXkgYXJlIGRvaW5nIHVzZWZ1bCB3b3JrLiAgVGhlIHJ1biBsYXRjaCBpcyB0eXBpY2FsbHkgY2xlYXJlZCBpbiB0aGUgT1MgaWRsZSBsb29wLiAgR2F0aW5nIGJ5IHRoZSBydW4gbGF0Y2ggZmlsdGVycyBvdXQgdGhlIGlkbGUgbG9vcC4KKworI0dyb3VwIDg1IHBtX2NwaV9zdGFjazIsIENQSSBzdGFjayBicmVha2Rvd24KK2V2ZW50OjBYMDU1MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRlhVX0lETEVfR1JQODUgOiAoR3JvdXAgODUgcG1fY3BpX3N0YWNrMikgRlhVMCBhbmQgRlhVMSBhcmUgYm90aCBpZGxlLgorZXZlbnQ6MFgwNTUxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9DTVBMVV9TVEFMTF9GWFVfR1JQODUgOiAoR3JvdXAgODUgcG1fY3BpX3N0YWNrMikgRm9sbG93aW5nIGEgY29tcGxldGlvbiBzdGFsbCAoYW55IHBlcmlvZCB3aGVuIG5vIGdyb3VwcyBjb21wbGV0ZWQpIHRoZSBsYXN0IGluc3RydWN0aW9uIHRvIGZpbmlzaCBiZWZvcmUgY29tcGxldGlvbiByZXN1bWVzIHdhcyBhIGZpeGVkIHBvaW50IGluc3RydWN0aW9uLgorZXZlbnQ6MFgwNTUyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9HUlBfQ01QTF9HUlA4NSA6IChHcm91cCA4NSBwbV9jcGlfc3RhY2syKSBBIGdyb3VwIGNvbXBsZXRlZC4gTWljcm9jb2RlZCBpbnN0cnVjdGlvbnMgdGhhdCBzcGFuIG11bHRpcGxlIGdyb3VwcyB3aWxsIGdlbmVyYXRlIHRoaXMgZXZlbnQgb25jZSBwZXIgZ3JvdXAuCitldmVudDowWDA1NTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0NNUExVX1NUQUxMX0RJVl9HUlA4NSA6IChHcm91cCA4NSBwbV9jcGlfc3RhY2syKSBGb2xsb3dpbmcgYSBjb21wbGV0aW9uIHN0YWxsIChhbnkgcGVyaW9kIHdoZW4gbm8gZ3JvdXBzIGNvbXBsZXRlZCkgdGhlIGxhc3QgaW5zdHJ1Y3Rpb24gdG8gZmluaXNoIGJlZm9yZSBjb21wbGV0aW9uIHJlc3VtZXMgd2FzIGEgZml4ZWQgcG9pbnQgZGl2aWRlIGluc3RydWN0aW9uLiBUaGlzIGlzIGEgc3Vic2V0IG9mIFBNX0NNUExVX1NUQUxMX0ZYVS4KK2V2ZW50OjBYMDU1NCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlA4NSA6IChHcm91cCA4NSBwbV9jcGlfc3RhY2syKSBOdW1iZXIgb2YgcnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQuCitldmVudDowWDA1NTUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDg1IDogKEdyb3VwIDg1IHBtX2NwaV9zdGFjazIpIFByb2Nlc3NvciBDeWNsZXMgZ2F0ZWQgYnkgdGhlIHJ1biBsYXRjaC4gIE9wZXJhdGluZyBzeXN0ZW1zIHVzZSB0aGUgcnVuIGxhdGNoIHRvIGluZGljYXRlIHdoZW4gdGhleSBhcmUgZG9pbmcgdXNlZnVsIHdvcmsuICBUaGUgcnVuIGxhdGNoIGlzIHR5cGljYWxseSBjbGVhcmVkIGluIHRoZSBPUyBpZGxlIGxvb3AuICBHYXRpbmcgYnkgdGhlIHJ1biBsYXRjaCBmaWx0ZXJzIG91dCB0aGUgaWRsZSBsb29wLgorCisjR3JvdXAgODYgcG1fY3BpX3N0YWNrMywgQ1BJIHN0YWNrIGJyZWFrZG93bgorZXZlbnQ6MFgwNTYwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9UQUJMRVdBTEtfQ1lDX0dSUDg2IDogKEdyb3VwIDg2IHBtX2NwaV9zdGFjazMpIEN5Y2xlcyBkb2luZyBpbnN0cnVjdGlvbiBvciBkYXRhIHRhYmxld2Fsa3MKK2V2ZW50OjBYMDU2MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fQ01QTFVfU1RBTExfTFNVX0dSUDg2IDogKEdyb3VwIDg2IHBtX2NwaV9zdGFjazMpIEZvbGxvd2luZyBhIGNvbXBsZXRpb24gc3RhbGwgKGFueSBwZXJpb2Qgd2hlbiBubyBncm91cHMgY29tcGxldGVkKSB0aGUgbGFzdCBpbnN0cnVjdGlvbiB0byBmaW5pc2ggYmVmb3JlIGNvbXBsZXRpb24gcmVzdW1lcyB3YXMgYSBsb2FkL3N0b3JlIGluc3RydWN0aW9uLgorZXZlbnQ6MFgwNTYyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQVRBX1RBQkxFV0FMS19DWUNfR1JQODYgOiAoR3JvdXAgODYgcG1fY3BpX3N0YWNrMykgQ3ljbGVzIGEgdHJhbnNsYXRpb24gdGFibGV3YWxrIGlzIGFjdGl2ZS4gIFdoaWxlIGEgdGFibGV3YWxrIGlzIGFjdGl2ZSBhbnkgcmVxdWVzdCBhdHRlbXB0aW5nIHRvIGFjY2VzcyB0aGUgVExCIHdpbGwgYmUgcmVqZWN0ZWQgYW5kIHJldHJpZWQuCitldmVudDowWDA1NjMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0NNUExVX1NUQUxMX1JFSkVDVF9HUlA4NiA6IChHcm91cCA4NiBwbV9jcGlfc3RhY2szKSBGb2xsb3dpbmcgYSBjb21wbGV0aW9uIHN0YWxsIChhbnkgcGVyaW9kIHdoZW4gbm8gZ3JvdXBzIGNvbXBsZXRlZCkgdGhlIGxhc3QgaW5zdHJ1Y3Rpb24gdG8gZmluaXNoIGJlZm9yZSBjb21wbGV0aW9uIHJlc3VtZXMgc3VmZmVyZWQgYSBsb2FkL3N0b3JlIHJlamVjdC4gVGhpcyBpcyBhIHN1YnNldCBvZiBQTV9DTVBMVV9TVEFMTF9MU1UuCitldmVudDowWDA1NjQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQODYgOiAoR3JvdXAgODYgcG1fY3BpX3N0YWNrMykgTnVtYmVyIG9mIHJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkLgorZXZlbnQ6MFgwNTY1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlA4NiA6IChHcm91cCA4NiBwbV9jcGlfc3RhY2szKSBQcm9jZXNzb3IgQ3ljbGVzIGdhdGVkIGJ5IHRoZSBydW4gbGF0Y2guICBPcGVyYXRpbmcgc3lzdGVtcyB1c2UgdGhlIHJ1biBsYXRjaCB0byBpbmRpY2F0ZSB3aGVuIHRoZXkgYXJlIGRvaW5nIHVzZWZ1bCB3b3JrLiAgVGhlIHJ1biBsYXRjaCBpcyB0eXBpY2FsbHkgY2xlYXJlZCBpbiB0aGUgT1MgaWRsZSBsb29wLiAgR2F0aW5nIGJ5IHRoZSBydW4gbGF0Y2ggZmlsdGVycyBvdXQgdGhlIGlkbGUgbG9vcC4KKworI0dyb3VwIDg3IHBtX2NwaV9zdGFjazQsIENQSSBzdGFjayBicmVha2Rvd24KK2V2ZW50OjBYMDU3MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRkxPUF9HUlA4NyA6IChHcm91cCA4NyBwbV9jcGlfc3RhY2s0KSBBIGZsb2F0aW5nIHBvaW50IG9wZXJhdGlvbiBoYXMgY29tcGxldGVkCitldmVudDowWDA1NzEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0NNUExVX1NUQUxMX1NDQUxBUl9MT05HX0dSUDg3IDogKEdyb3VwIDg3IHBtX2NwaV9zdGFjazQpIENvbXBsZXRpb24gc3RhbGwgY2F1c2VkIGJ5IGxvbmcgbGF0ZW5jeSBzY2FsYXIgaW5zdHJ1Y3Rpb24KK2V2ZW50OjBYMDU3MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX1NUQUxMX0NNUExVX0NZQ19HUlA4NyA6IChHcm91cCA4NyBwbV9jcGlfc3RhY2s0KSBNYXJrZWQgR3JvdXAgQ29tcGxldGlvbiBTdGFsbCBjeWNsZXMKK2V2ZW50OjBYMDU3MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fQ01QTFVfU1RBTExfU0NBTEFSX0dSUDg3IDogKEdyb3VwIDg3IHBtX2NwaV9zdGFjazQpIENvbXBsZXRpb24gc3RhbGwgY2F1c2VkIGJ5IEZQVSBpbnN0cnVjdGlvbgorZXZlbnQ6MFgwNTc0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDg3IDogKEdyb3VwIDg3IHBtX2NwaV9zdGFjazQpIE51bWJlciBvZiBydW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZC4KK2V2ZW50OjBYMDU3NSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQODcgOiAoR3JvdXAgODcgcG1fY3BpX3N0YWNrNCkgUHJvY2Vzc29yIEN5Y2xlcyBnYXRlZCBieSB0aGUgcnVuIGxhdGNoLiAgT3BlcmF0aW5nIHN5c3RlbXMgdXNlIHRoZSBydW4gbGF0Y2ggdG8gaW5kaWNhdGUgd2hlbiB0aGV5IGFyZSBkb2luZyB1c2VmdWwgd29yay4gIFRoZSBydW4gbGF0Y2ggaXMgdHlwaWNhbGx5IGNsZWFyZWQgaW4gdGhlIE9TIGlkbGUgbG9vcC4gIEdhdGluZyBieSB0aGUgcnVuIGxhdGNoIGZpbHRlcnMgb3V0IHRoZSBpZGxlIGxvb3AuCisKKyNHcm91cCA4OCBwbV9jcGlfc3RhY2s1LCBDUEkgc3RhY2sgYnJlYWtkb3duCitldmVudDowWDA1ODAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0NNUExVX1NUQUxMX0VORF9HQ1RfTk9TTE9UX0dSUDg4IDogKEdyb3VwIDg4IHBtX2NwaV9zdGFjazUpIENvdW50IGVuZGVkIGJlY2F1c2UgR0NUIHdlbnQgZW1wdHkKK2V2ZW50OjBYMDU4MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fQ01QTFVfU1RBTExfVkVDVE9SX0dSUDg4IDogKEdyb3VwIDg4IHBtX2NwaV9zdGFjazUpIENvbXBsZXRpb24gc3RhbGwgY2F1c2VkIGJ5IFZlY3RvciBpbnN0cnVjdGlvbgorZXZlbnQ6MFgwNTgyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfU1RBTExfQ01QTFVfQ1lDX0NPVU5UX0dSUDg4IDogKEdyb3VwIDg4IHBtX2NwaV9zdGFjazUpIE1hcmtlZCBHcm91cCBDb21wbGV0aW9uIFN0YWxsIGN5Y2xlcyAodXNlIGVkZ2UgZGV0ZWN0IHRvIGNvdW50ICMpCitldmVudDowWDA1ODMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0NNUExVX1NUQUxMX0dSUDg4IDogKEdyb3VwIDg4IHBtX2NwaV9zdGFjazUpIE5vIGdyb3VwcyBjb21wbGV0ZWQsIEdDVCBub3QgZW1wdHkKK2V2ZW50OjBYMDU4NCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlA4OCA6IChHcm91cCA4OCBwbV9jcGlfc3RhY2s1KSBOdW1iZXIgb2YgcnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQuCitldmVudDowWDA1ODUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDg4IDogKEdyb3VwIDg4IHBtX2NwaV9zdGFjazUpIFByb2Nlc3NvciBDeWNsZXMgZ2F0ZWQgYnkgdGhlIHJ1biBsYXRjaC4gIE9wZXJhdGluZyBzeXN0ZW1zIHVzZSB0aGUgcnVuIGxhdGNoIHRvIGluZGljYXRlIHdoZW4gdGhleSBhcmUgZG9pbmcgdXNlZnVsIHdvcmsuICBUaGUgcnVuIGxhdGNoIGlzIHR5cGljYWxseSBjbGVhcmVkIGluIHRoZSBPUyBpZGxlIGxvb3AuICBHYXRpbmcgYnkgdGhlIHJ1biBsYXRjaCBmaWx0ZXJzIG91dCB0aGUgaWRsZSBsb29wLgorCisjR3JvdXAgODkgcG1fY3BpX3N0YWNrNiwgQ1BJIHN0YWNrIGJyZWFrZG93bgorZXZlbnQ6MFgwNTkwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9DTVBMVV9TVEFMTF9USFJEX0dSUDg5IDogKEdyb3VwIDg5IHBtX2NwaV9zdGFjazYpIENvbXBsZXRpb24gU3RhbGxlZCBkdWUgdG8gdGhyZWFkIGNvbmZsaWN0LiAgR3JvdXAgcmVhZHkgdG8gY29tcGxldGUgYnV0IGl0IHdhcyBhbm90aGVyIHRocmVhZCdzIHR1cm4KK2V2ZW50OjBYMDU5MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fQ01QTFVfU1RBTExfREZVX0dSUDg5IDogKEdyb3VwIDg5IHBtX2NwaV9zdGFjazYpIENvbXBsZXRpb24gc3RhbGwgY2F1c2VkIGJ5IERlY2ltYWwgRmxvYXRpbmcgUG9pbnQgVW5pdAorZXZlbnQ6MFgwNTkyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDg5IDogKEdyb3VwIDg5IHBtX2NwaV9zdGFjazYpIE51bWJlciBvZiBQb3dlclBDIEluc3RydWN0aW9ucyB0aGF0IGNvbXBsZXRlZC4KK2V2ZW50OjBYMDU5MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fR0NUX05PU0xPVF9CUl9NUFJFRF9JQ19NSVNTX0dSUDg5IDogKEdyb3VwIDg5IHBtX2NwaV9zdGFjazYpIE5vIHNsb3QgaW4gR0NUIGNhdXNlZCBieSBicmFuY2ggbWlzcHJlZGljdCBvciBJIGNhY2hlIG1pc3MKK2V2ZW50OjBYMDU5NCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlA4OSA6IChHcm91cCA4OSBwbV9jcGlfc3RhY2s2KSBOdW1iZXIgb2YgcnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQuCitldmVudDowWDA1OTUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDg5IDogKEdyb3VwIDg5IHBtX2NwaV9zdGFjazYpIFByb2Nlc3NvciBDeWNsZXMgZ2F0ZWQgYnkgdGhlIHJ1biBsYXRjaC4gIE9wZXJhdGluZyBzeXN0ZW1zIHVzZSB0aGUgcnVuIGxhdGNoIHRvIGluZGljYXRlIHdoZW4gdGhleSBhcmUgZG9pbmcgdXNlZnVsIHdvcmsuICBUaGUgcnVuIGxhdGNoIGlzIHR5cGljYWxseSBjbGVhcmVkIGluIHRoZSBPUyBpZGxlIGxvb3AuICBHYXRpbmcgYnkgdGhlIHJ1biBsYXRjaCBmaWx0ZXJzIG91dCB0aGUgaWRsZSBsb29wLgorCisjR3JvdXAgOTAgcG1fY3BpX3N0YWNrNywgQ1BJIHN0YWNrIGJyZWFrZG93bgorZXZlbnQ6MFgwNUEwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9HQ1RfTk9TTE9UX0NZQ19HUlA5MCA6IChHcm91cCA5MCBwbV9jcGlfc3RhY2s3KSBDeWNsZXMgd2hlbiB0aGUgR2xvYmFsIENvbXBsZXRpb24gVGFibGUgaGFzIG5vIHNsb3RzIGZyb20gdGhpcyB0aHJlYWQuCitldmVudDowWDA1QTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0dDVF9OT1NMT1RfSUNfTUlTU19HUlA5MCA6IChHcm91cCA5MCBwbV9jcGlfc3RhY2s3KSBDeWNsZXMgd2hlbiB0aGUgR2xvYmFsIENvbXBsZXRpb24gVGFibGUgaGFzIG5vIHNsb3RzIGZyb20gdGhpcyB0aHJlYWQgYmVjYXVzZSBvZiBhbiBJbnN0cnVjdGlvbiBDYWNoZSBtaXNzLgorZXZlbnQ6MFgwNUEyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JT1BTX0RJU1BfR1JQOTAgOiAoR3JvdXAgOTAgcG1fY3BpX3N0YWNrNykgSU9QUyBkaXNwYXRjaGVkCitldmVudDowWDA1QTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0dDVF9OT1NMT1RfQlJfTVBSRURfR1JQOTAgOiAoR3JvdXAgOTAgcG1fY3BpX3N0YWNrNykgQ3ljbGVzIHdoZW4gdGhlIEdsb2JhbCBDb21wbGV0aW9uIFRhYmxlIGhhcyBubyBzbG90cyBmcm9tIHRoaXMgdGhyZWFkIGJlY2F1c2Ugb2YgYSBicmFuY2ggbWlzcHJlZGljdGlvbi4KK2V2ZW50OjBYMDVBNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlA5MCA6IChHcm91cCA5MCBwbV9jcGlfc3RhY2s3KSBOdW1iZXIgb2YgcnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQuCitldmVudDowWDA1QTUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDkwIDogKEdyb3VwIDkwIHBtX2NwaV9zdGFjazcpIFByb2Nlc3NvciBDeWNsZXMgZ2F0ZWQgYnkgdGhlIHJ1biBsYXRjaC4gIE9wZXJhdGluZyBzeXN0ZW1zIHVzZSB0aGUgcnVuIGxhdGNoIHRvIGluZGljYXRlIHdoZW4gdGhleSBhcmUgZG9pbmcgdXNlZnVsIHdvcmsuICBUaGUgcnVuIGxhdGNoIGlzIHR5cGljYWxseSBjbGVhcmVkIGluIHRoZSBPUyBpZGxlIGxvb3AuICBHYXRpbmcgYnkgdGhlIHJ1biBsYXRjaCBmaWx0ZXJzIG91dCB0aGUgaWRsZSBsb29wLgorCisjR3JvdXAgOTEgcG1fZHNvdXJjZTEsIERhdGEgc291cmNlIGluZm9ybWF0aW9uCitldmVudDowWDA1QjAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RBVEFfRlJPTV9MMl9HUlA5MSA6IChHcm91cCA5MSBwbV9kc291cmNlMSkgVGhlIHByb2Nlc3NvcidzIERhdGEgQ2FjaGUgd2FzIHJlbG9hZGVkIGZyb20gdGhlIGxvY2FsIEwyIGR1ZSB0byBhIGRlbWFuZCBsb2FkLgorZXZlbnQ6MFgwNUIxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQVRBX0ZST01fTDNfR1JQOTEgOiAoR3JvdXAgOTEgcG1fZHNvdXJjZTEpIFRoZSBwcm9jZXNzb3IncyBEYXRhIENhY2hlIHdhcyByZWxvYWRlZCBmcm9tIHRoZSBsb2NhbCBMMyBkdWUgdG8gYSBkZW1hbmQgbG9hZC4KK2V2ZW50OjBYMDVCMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fREFUQV9GUk9NX1JNRU1fR1JQOTEgOiAoR3JvdXAgOTEgcG1fZHNvdXJjZTEpIFRoZSBwcm9jZXNzb3IncyBEYXRhIENhY2hlIHdhcyByZWxvYWRlZCBmcm9tIG1lbW9yeSBhdHRhY2hlZCB0byBhIGRpZmZlcmVudCBtb2R1bGUgdGhhbiB0aGlzIHByb2Nlc3NvciBpcyBsb2NhdGVkIG9uLgorZXZlbnQ6MFgwNUIzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQVRBX0ZST01fTE1FTV9HUlA5MSA6IChHcm91cCA5MSBwbV9kc291cmNlMSkgVGhlIHByb2Nlc3NvcidzIERhdGEgQ2FjaGUgd2FzIHJlbG9hZGVkIGZyb20gbWVtb3J5IGF0dGFjaGVkIHRvIHRoZSBzYW1lIG1vZHVsZSB0aGlzIHByb2Nlc3NvciBpcyBsb2NhdGVkIG9uLgorZXZlbnQ6MFgwNUI0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDkxIDogKEdyb3VwIDkxIHBtX2Rzb3VyY2UxKSBOdW1iZXIgb2YgcnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQuCitldmVudDowWDA1QjUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDkxIDogKEdyb3VwIDkxIHBtX2Rzb3VyY2UxKSBQcm9jZXNzb3IgQ3ljbGVzIGdhdGVkIGJ5IHRoZSBydW4gbGF0Y2guICBPcGVyYXRpbmcgc3lzdGVtcyB1c2UgdGhlIHJ1biBsYXRjaCB0byBpbmRpY2F0ZSB3aGVuIHRoZXkgYXJlIGRvaW5nIHVzZWZ1bCB3b3JrLiAgVGhlIHJ1biBsYXRjaCBpcyB0eXBpY2FsbHkgY2xlYXJlZCBpbiB0aGUgT1MgaWRsZSBsb29wLiAgR2F0aW5nIGJ5IHRoZSBydW4gbGF0Y2ggZmlsdGVycyBvdXQgdGhlIGlkbGUgbG9vcC4KKworI0dyb3VwIDkyIHBtX2Rzb3VyY2UyLCBEYXRhIHNvdXJjZSBpbmZvcm1hdGlvbgorZXZlbnQ6MFgwNUMwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQVRBX0ZST01fTDNfR1JQOTIgOiAoR3JvdXAgOTIgcG1fZHNvdXJjZTIpIFRoZSBwcm9jZXNzb3IncyBEYXRhIENhY2hlIHdhcyByZWxvYWRlZCBmcm9tIHRoZSBsb2NhbCBMMyBkdWUgdG8gYSBkZW1hbmQgbG9hZC4KK2V2ZW50OjBYMDVDMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fREFUQV9GUk9NX0wzMV9TSFJfR1JQOTIgOiAoR3JvdXAgOTIgcG1fZHNvdXJjZTIpIERhdGEgbG9hZGVkIGZyb20gYW5vdGhlciBMMyBvbiBzYW1lIGNoaXAgc2hhcmVkCitldmVudDowWDA1QzIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RBVEFfRlJPTV9MTUVNX0dSUDkyIDogKEdyb3VwIDkyIHBtX2Rzb3VyY2UyKSBUaGUgcHJvY2Vzc29yJ3MgRGF0YSBDYWNoZSB3YXMgcmVsb2FkZWQgZnJvbSBtZW1vcnkgYXR0YWNoZWQgdG8gdGhlIHNhbWUgbW9kdWxlIHRoaXMgcHJvY2Vzc29yIGlzIGxvY2F0ZWQgb24uCitldmVudDowWDA1QzMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RBVEFfRlJPTV9MMk1JU1NfR1JQOTIgOiAoR3JvdXAgOTIgcG1fZHNvdXJjZTIpIFRoZSBwcm9jZXNzb3IncyBEYXRhIENhY2hlIHdhcyByZWxvYWRlZCBidXQgbm90IGZyb20gdGhlIGxvY2FsIEwyLgorZXZlbnQ6MFgwNUM0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDkyIDogKEdyb3VwIDkyIHBtX2Rzb3VyY2UyKSBOdW1iZXIgb2YgcnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQuCitldmVudDowWDA1QzUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDkyIDogKEdyb3VwIDkyIHBtX2Rzb3VyY2UyKSBQcm9jZXNzb3IgQ3ljbGVzIGdhdGVkIGJ5IHRoZSBydW4gbGF0Y2guICBPcGVyYXRpbmcgc3lzdGVtcyB1c2UgdGhlIHJ1biBsYXRjaCB0byBpbmRpY2F0ZSB3aGVuIHRoZXkgYXJlIGRvaW5nIHVzZWZ1bCB3b3JrLiAgVGhlIHJ1biBsYXRjaCBpcyB0eXBpY2FsbHkgY2xlYXJlZCBpbiB0aGUgT1MgaWRsZSBsb29wLiAgR2F0aW5nIGJ5IHRoZSBydW4gbGF0Y2ggZmlsdGVycyBvdXQgdGhlIGlkbGUgbG9vcC4KKworI0dyb3VwIDkzIHBtX2Rzb3VyY2UzLCBEYXRhIHNvdXJjZSBpbmZvcm1hdGlvbgorZXZlbnQ6MFgwNUQwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQVRBX0ZST01fRE1FTV9HUlA5MyA6IChHcm91cCA5MyBwbV9kc291cmNlMykgVGhlIHByb2Nlc3NvcidzIERhdGEgQ2FjaGUgd2FzIHJlbG9hZGVkIHdpdGggZGF0YSBmcm9tIG1lbW9yeSBhdHRhY2hlZCB0byBhIGRpc3RhbnQgbW9kdWxlIGR1ZSB0byBhIGRlbWFuZCBsb2FkCitldmVudDowWDA1RDEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RBVEFfRlJPTV9MM01JU1NfR1JQOTMgOiAoR3JvdXAgOTMgcG1fZHNvdXJjZTMpIFRoZSBwcm9jZXNzb3IncyBEYXRhIENhY2hlIHdhcyByZWxvYWRlZCBmcm9tIGJleW9uZCBMMyBkdWUgdG8gYSBkZW1hbmQgbG9hZAorZXZlbnQ6MFgwNUQyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQVRBX0ZST01fTDIxX01PRF9HUlA5MyA6IChHcm91cCA5MyBwbV9kc291cmNlMykgRGF0YSBsb2FkZWQgZnJvbSBhbm90aGVyIEwyIG9uIHNhbWUgY2hpcCBtb2RpZmllZAorZXZlbnQ6MFgwNUQzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQVRBX0ZST01fTDJNSVNTX0dSUDkzIDogKEdyb3VwIDkzIHBtX2Rzb3VyY2UzKSBUaGUgcHJvY2Vzc29yJ3MgRGF0YSBDYWNoZSB3YXMgcmVsb2FkZWQgYnV0IG5vdCBmcm9tIHRoZSBsb2NhbCBMMi4KK2V2ZW50OjBYMDVENCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlA5MyA6IChHcm91cCA5MyBwbV9kc291cmNlMykgTnVtYmVyIG9mIHJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkLgorZXZlbnQ6MFgwNUQ1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlA5MyA6IChHcm91cCA5MyBwbV9kc291cmNlMykgUHJvY2Vzc29yIEN5Y2xlcyBnYXRlZCBieSB0aGUgcnVuIGxhdGNoLiAgT3BlcmF0aW5nIHN5c3RlbXMgdXNlIHRoZSBydW4gbGF0Y2ggdG8gaW5kaWNhdGUgd2hlbiB0aGV5IGFyZSBkb2luZyB1c2VmdWwgd29yay4gIFRoZSBydW4gbGF0Y2ggaXMgdHlwaWNhbGx5IGNsZWFyZWQgaW4gdGhlIE9TIGlkbGUgbG9vcC4gIEdhdGluZyBieSB0aGUgcnVuIGxhdGNoIGZpbHRlcnMgb3V0IHRoZSBpZGxlIGxvb3AuCisKKyNHcm91cCA5NCBwbV9kc291cmNlNCwgRGF0YSBzb3VyY2UgaW5mb3JtYXRpb24KK2V2ZW50OjBYMDVFMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fREFUQV9GUk9NX0wzMV9NT0RfR1JQOTQgOiAoR3JvdXAgOTQgcG1fZHNvdXJjZTQpIERhdGEgbG9hZGVkIGZyb20gYW5vdGhlciBMMyBvbiBzYW1lIGNoaXAgbW9kaWZpZWQKK2V2ZW50OjBYMDVFMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fREFUQV9GUk9NX1JMMkwzX1NIUl9HUlA5NCA6IChHcm91cCA5NCBwbV9kc291cmNlNCkgVGhlIHByb2Nlc3NvcidzIERhdGEgQ2FjaGUgd2FzIHJlbG9hZGVkIHdpdGggc2hhcmVkIChUIG9yIFNMKSBkYXRhIGZyb20gYW4gTDIgb3IgTDMgb24gYSByZW1vdGUgbW9kdWxlIGR1ZSB0byBhIGRlbWFuZCBsb2FkCitldmVudDowWDA1RTIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RBVEFfRlJPTV9ETDJMM19NT0RfR1JQOTQgOiAoR3JvdXAgOTQgcG1fZHNvdXJjZTQpIFRoZSBwcm9jZXNzb3IncyBEYXRhIENhY2hlIHdhcyByZWxvYWRlZCB3aXRoIG1vZGlmaWVkIChNKSBkYXRhIGZyb20gYW4gTDIgIG9yIEwzIG9uIGEgZGlzdGFudCBtb2R1bGUgZHVlIHRvIGEgZGVtYW5kIGxvYWQKK2V2ZW50OjBYMDVFMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fREFUQV9GUk9NX0RMMkwzX01PRF9HUlA5NCA6IChHcm91cCA5NCBwbV9kc291cmNlNCkgVGhlIHByb2Nlc3NvcidzIERhdGEgQ2FjaGUgd2FzIHJlbG9hZGVkIHdpdGggbW9kaWZpZWQgKE0pIGRhdGEgZnJvbSBhbiBMMiAgb3IgTDMgb24gYSBkaXN0YW50IG1vZHVsZSBkdWUgdG8gYSBkZW1hbmQgbG9hZAorZXZlbnQ6MFgwNUU0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDk0IDogKEdyb3VwIDk0IHBtX2Rzb3VyY2U0KSBOdW1iZXIgb2YgcnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQuCitldmVudDowWDA1RTUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDk0IDogKEdyb3VwIDk0IHBtX2Rzb3VyY2U0KSBQcm9jZXNzb3IgQ3ljbGVzIGdhdGVkIGJ5IHRoZSBydW4gbGF0Y2guICBPcGVyYXRpbmcgc3lzdGVtcyB1c2UgdGhlIHJ1biBsYXRjaCB0byBpbmRpY2F0ZSB3aGVuIHRoZXkgYXJlIGRvaW5nIHVzZWZ1bCB3b3JrLiAgVGhlIHJ1biBsYXRjaCBpcyB0eXBpY2FsbHkgY2xlYXJlZCBpbiB0aGUgT1MgaWRsZSBsb29wLiAgR2F0aW5nIGJ5IHRoZSBydW4gbGF0Y2ggZmlsdGVycyBvdXQgdGhlIGlkbGUgbG9vcC4KKworI0dyb3VwIDk1IHBtX2Rzb3VyY2U1LCBEYXRhIHNvdXJjZSBpbmZvcm1hdGlvbgorZXZlbnQ6MFgwNUYwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQVRBX0ZST01fTDMxX1NIUl9HUlA5NSA6IChHcm91cCA5NSBwbV9kc291cmNlNSkgRGF0YSBsb2FkZWQgZnJvbSBhbm90aGVyIEwzIG9uIHNhbWUgY2hpcCBzaGFyZWQKK2V2ZW50OjBYMDVGMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fREFUQV9GUk9NX0RNRU1fR1JQOTUgOiAoR3JvdXAgOTUgcG1fZHNvdXJjZTUpIFRoZSBwcm9jZXNzb3IncyBEYXRhIENhY2hlIHdhcyByZWxvYWRlZCB3aXRoIGRhdGEgZnJvbSBtZW1vcnkgYXR0YWNoZWQgdG8gYSBkaXN0YW50IG1vZHVsZSBkdWUgdG8gYSBkZW1hbmQgbG9hZAorZXZlbnQ6MFgwNUYyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQVRBX0ZST01fREwyTDNfU0hSX0dSUDk1IDogKEdyb3VwIDk1IHBtX2Rzb3VyY2U1KSBUaGUgcHJvY2Vzc29yJ3MgRGF0YSBDYWNoZSB3YXMgcmVsb2FkZWQgd2l0aCBzaGFyZWQgKFQgb3IgU0wpIGRhdGEgZnJvbSBhbiBMMiBvciBMMyBvbiBhIGRpc3RhbnQgbW9kdWxlIGR1ZSB0byBhIGRlbWFuZCBsb2FkCitldmVudDowWDA1RjMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RBVEFfRlJPTV9MMjFfU0hSX0dSUDk1IDogKEdyb3VwIDk1IHBtX2Rzb3VyY2U1KSBEYXRhIGxvYWRlZCBmcm9tIGFub3RoZXIgTDIgb24gc2FtZSBjaGlwIHNoYXJlZAorZXZlbnQ6MFgwNUY0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDk1IDogKEdyb3VwIDk1IHBtX2Rzb3VyY2U1KSBOdW1iZXIgb2YgcnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQuCitldmVudDowWDA1RjUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDk1IDogKEdyb3VwIDk1IHBtX2Rzb3VyY2U1KSBQcm9jZXNzb3IgQ3ljbGVzIGdhdGVkIGJ5IHRoZSBydW4gbGF0Y2guICBPcGVyYXRpbmcgc3lzdGVtcyB1c2UgdGhlIHJ1biBsYXRjaCB0byBpbmRpY2F0ZSB3aGVuIHRoZXkgYXJlIGRvaW5nIHVzZWZ1bCB3b3JrLiAgVGhlIHJ1biBsYXRjaCBpcyB0eXBpY2FsbHkgY2xlYXJlZCBpbiB0aGUgT1MgaWRsZSBsb29wLiAgR2F0aW5nIGJ5IHRoZSBydW4gbGF0Y2ggZmlsdGVycyBvdXQgdGhlIGlkbGUgbG9vcC4KKworI0dyb3VwIDk2IHBtX2Rzb3VyY2U2LCBEYXRhIHNvdXJjZSBpbmZvcm1hdGlvbgorZXZlbnQ6MFgwNjAwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQVRBX0ZST01fUkwyTDNfTU9EX0dSUDk2IDogKEdyb3VwIDk2IHBtX2Rzb3VyY2U2KSBUaGUgcHJvY2Vzc29yJ3MgRGF0YSBDYWNoZSB3YXMgcmVsb2FkZWQgd2l0aCBtb2RpZmllZCAoTSkgZGF0YSBmcm9tIGFuIEwyICBvciBMMyBvbiBhIHJlbW90ZSBtb2R1bGUgZHVlIHRvIGEgZGVtYW5kIGxvYWQKK2V2ZW50OjBYMDYwMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fREFUQV9GUk9NX1JMMkwzX1NIUl9HUlA5NiA6IChHcm91cCA5NiBwbV9kc291cmNlNikgVGhlIHByb2Nlc3NvcidzIERhdGEgQ2FjaGUgd2FzIHJlbG9hZGVkIHdpdGggc2hhcmVkIChUIG9yIFNMKSBkYXRhIGZyb20gYW4gTDIgb3IgTDMgb24gYSByZW1vdGUgbW9kdWxlIGR1ZSB0byBhIGRlbWFuZCBsb2FkCitldmVudDowWDA2MDIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RBVEFfRlJPTV9MMjFfU0hSX0dSUDk2IDogKEdyb3VwIDk2IHBtX2Rzb3VyY2U2KSBEYXRhIGxvYWRlZCBmcm9tIGFub3RoZXIgTDIgb24gc2FtZSBjaGlwIHNoYXJlZAorZXZlbnQ6MFgwNjAzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQVRBX0ZST01fTDJNSVNTX0dSUDk2IDogKEdyb3VwIDk2IHBtX2Rzb3VyY2U2KSBUaGUgcHJvY2Vzc29yJ3MgRGF0YSBDYWNoZSB3YXMgcmVsb2FkZWQgYnV0IG5vdCBmcm9tIHRoZSBsb2NhbCBMMi4KK2V2ZW50OjBYMDYwNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlA5NiA6IChHcm91cCA5NiBwbV9kc291cmNlNikgTnVtYmVyIG9mIHJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkLgorZXZlbnQ6MFgwNjA1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlA5NiA6IChHcm91cCA5NiBwbV9kc291cmNlNikgUHJvY2Vzc29yIEN5Y2xlcyBnYXRlZCBieSB0aGUgcnVuIGxhdGNoLiAgT3BlcmF0aW5nIHN5c3RlbXMgdXNlIHRoZSBydW4gbGF0Y2ggdG8gaW5kaWNhdGUgd2hlbiB0aGV5IGFyZSBkb2luZyB1c2VmdWwgd29yay4gIFRoZSBydW4gbGF0Y2ggaXMgdHlwaWNhbGx5IGNsZWFyZWQgaW4gdGhlIE9TIGlkbGUgbG9vcC4gIEdhdGluZyBieSB0aGUgcnVuIGxhdGNoIGZpbHRlcnMgb3V0IHRoZSBpZGxlIGxvb3AuCisKKyNHcm91cCA5NyBwbV9kc291cmNlNywgRGF0YSBzb3VyY2UgaW5mb3JtYXRpb24KK2V2ZW50OjBYMDYxMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fREFUQV9GUk9NX1JMMkwzX1NIUl9HUlA5NyA6IChHcm91cCA5NyBwbV9kc291cmNlNykgVGhlIHByb2Nlc3NvcidzIERhdGEgQ2FjaGUgd2FzIHJlbG9hZGVkIHdpdGggc2hhcmVkIChUIG9yIFNMKSBkYXRhIGZyb20gYW4gTDIgb3IgTDMgb24gYSByZW1vdGUgbW9kdWxlIGR1ZSB0byBhIGRlbWFuZCBsb2FkCitldmVudDowWDA2MTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RBVEFfRlJPTV9MM01JU1NfR1JQOTcgOiAoR3JvdXAgOTcgcG1fZHNvdXJjZTcpIFRoZSBwcm9jZXNzb3IncyBEYXRhIENhY2hlIHdhcyByZWxvYWRlZCBmcm9tIGJleW9uZCBMMyBkdWUgdG8gYSBkZW1hbmQgbG9hZAorZXZlbnQ6MFgwNjEyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQVRBX0ZST01fREwyTDNfTU9EX0dSUDk3IDogKEdyb3VwIDk3IHBtX2Rzb3VyY2U3KSBUaGUgcHJvY2Vzc29yJ3MgRGF0YSBDYWNoZSB3YXMgcmVsb2FkZWQgd2l0aCBtb2RpZmllZCAoTSkgZGF0YSBmcm9tIGFuIEwyICBvciBMMyBvbiBhIGRpc3RhbnQgbW9kdWxlIGR1ZSB0byBhIGRlbWFuZCBsb2FkCitldmVudDowWDA2MTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RBVEFfRlJPTV9ETDJMM19NT0RfR1JQOTcgOiAoR3JvdXAgOTcgcG1fZHNvdXJjZTcpIFRoZSBwcm9jZXNzb3IncyBEYXRhIENhY2hlIHdhcyByZWxvYWRlZCB3aXRoIG1vZGlmaWVkIChNKSBkYXRhIGZyb20gYW4gTDIgIG9yIEwzIG9uIGEgZGlzdGFudCBtb2R1bGUgZHVlIHRvIGEgZGVtYW5kIGxvYWQKK2V2ZW50OjBYMDYxNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlA5NyA6IChHcm91cCA5NyBwbV9kc291cmNlNykgTnVtYmVyIG9mIHJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkLgorZXZlbnQ6MFgwNjE1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlA5NyA6IChHcm91cCA5NyBwbV9kc291cmNlNykgUHJvY2Vzc29yIEN5Y2xlcyBnYXRlZCBieSB0aGUgcnVuIGxhdGNoLiAgT3BlcmF0aW5nIHN5c3RlbXMgdXNlIHRoZSBydW4gbGF0Y2ggdG8gaW5kaWNhdGUgd2hlbiB0aGV5IGFyZSBkb2luZyB1c2VmdWwgd29yay4gIFRoZSBydW4gbGF0Y2ggaXMgdHlwaWNhbGx5IGNsZWFyZWQgaW4gdGhlIE9TIGlkbGUgbG9vcC4gIEdhdGluZyBieSB0aGUgcnVuIGxhdGNoIGZpbHRlcnMgb3V0IHRoZSBpZGxlIGxvb3AuCisKKyNHcm91cCA5OCBwbV9kc291cmNlOCwgRGF0YSBzb3VyY2UgaW5mb3JtYXRpb24KK2V2ZW50OjBYMDYyMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlA5OCA6IChHcm91cCA5OCBwbV9kc291cmNlOCkgTnVtYmVyIG9mIFBvd2VyUEMgSW5zdHJ1Y3Rpb25zIHRoYXQgY29tcGxldGVkLgorZXZlbnQ6MFgwNjIxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQVRBX0ZST01fTDNfR1JQOTggOiAoR3JvdXAgOTggcG1fZHNvdXJjZTgpIFRoZSBwcm9jZXNzb3IncyBEYXRhIENhY2hlIHdhcyByZWxvYWRlZCBmcm9tIHRoZSBsb2NhbCBMMyBkdWUgdG8gYSBkZW1hbmQgbG9hZC4KK2V2ZW50OjBYMDYyMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fREFUQV9GUk9NX0wzTUlTU19HUlA5OCA6IChHcm91cCA5OCBwbV9kc291cmNlOCkgVGhlIHByb2Nlc3NvcidzIERhdGEgQ2FjaGUgd2FzIHJlbG9hZGVkIGZyb20gYmV5b25kIEwzIGR1ZSB0byBhIGRlbWFuZCBsb2FkCitldmVudDowWDA2MjMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RBVEFfRlJPTV9MTUVNX0dSUDk4IDogKEdyb3VwIDk4IHBtX2Rzb3VyY2U4KSBUaGUgcHJvY2Vzc29yJ3MgRGF0YSBDYWNoZSB3YXMgcmVsb2FkZWQgZnJvbSBtZW1vcnkgYXR0YWNoZWQgdG8gdGhlIHNhbWUgbW9kdWxlIHRoaXMgcHJvY2Vzc29yIGlzIGxvY2F0ZWQgb24uCitldmVudDowWDA2MjQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQOTggOiAoR3JvdXAgOTggcG1fZHNvdXJjZTgpIE51bWJlciBvZiBydW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZC4KK2V2ZW50OjBYMDYyNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQOTggOiAoR3JvdXAgOTggcG1fZHNvdXJjZTgpIFByb2Nlc3NvciBDeWNsZXMgZ2F0ZWQgYnkgdGhlIHJ1biBsYXRjaC4gIE9wZXJhdGluZyBzeXN0ZW1zIHVzZSB0aGUgcnVuIGxhdGNoIHRvIGluZGljYXRlIHdoZW4gdGhleSBhcmUgZG9pbmcgdXNlZnVsIHdvcmsuICBUaGUgcnVuIGxhdGNoIGlzIHR5cGljYWxseSBjbGVhcmVkIGluIHRoZSBPUyBpZGxlIGxvb3AuICBHYXRpbmcgYnkgdGhlIHJ1biBsYXRjaCBmaWx0ZXJzIG91dCB0aGUgaWRsZSBsb29wLgorCisjR3JvdXAgOTkgcG1fZHNvdXJjZTksIERhdGEgc291cmNlIGluZm9ybWF0aW9uCitldmVudDowWDA2MzAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RBVEFfRlJPTV9MMl9HUlA5OSA6IChHcm91cCA5OSBwbV9kc291cmNlOSkgVGhlIHByb2Nlc3NvcidzIERhdGEgQ2FjaGUgd2FzIHJlbG9hZGVkIGZyb20gdGhlIGxvY2FsIEwyIGR1ZSB0byBhIGRlbWFuZCBsb2FkLgorZXZlbnQ6MFgwNjMxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQVRBX0ZST01fTDJNSVNTX0dSUDk5IDogKEdyb3VwIDk5IHBtX2Rzb3VyY2U5KSBUaGUgcHJvY2Vzc29yJ3MgRGF0YSBDYWNoZSB3YXMgcmVsb2FkZWQgYnV0IG5vdCBmcm9tIHRoZSBsb2NhbCBMMi4KK2V2ZW50OjBYMDYzMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDFfRENBQ0hFX1JFTE9BRF9WQUxJRF9HUlA5OSA6IChHcm91cCA5OSBwbV9kc291cmNlOSkgVGhlIGRhdGEgc291cmNlIGluZm9ybWF0aW9uIGlzIHZhbGlkLHRoZSBkYXRhIGNhY2hlIGhhcyBiZWVuIHJlbG9hZGVkLiAgUHJpb3IgdG8gUE9XRVI1KyB0aGlzIGluY2x1ZGVkIGRhdGEgY2FjaGUgcmVsb2FkcyBkdWUgdG8gcHJlZmV0Y2ggYWN0aXZpdHkuICBXaXRoIFBPV0VSNSsgdGhpcyBub3cgb25seSBpbmNsdWRlcyByZWxvYWRzIGR1ZSB0byBkZW1hbmQgbG9hZHMuCitldmVudDowWDA2MzMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xEX01JU1NfTDFfR1JQOTkgOiAoR3JvdXAgOTkgcG1fZHNvdXJjZTkpIExvYWQgcmVmZXJlbmNlcyB0aGF0IG1pc3MgdGhlIExldmVsIDEgRGF0YSBjYWNoZS4gQ29tYmluZWQgdW5pdCAwICsgMS4KK2V2ZW50OjBYMDYzNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlA5OSA6IChHcm91cCA5OSBwbV9kc291cmNlOSkgTnVtYmVyIG9mIHJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkLgorZXZlbnQ6MFgwNjM1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlA5OSA6IChHcm91cCA5OSBwbV9kc291cmNlOSkgUHJvY2Vzc29yIEN5Y2xlcyBnYXRlZCBieSB0aGUgcnVuIGxhdGNoLiAgT3BlcmF0aW5nIHN5c3RlbXMgdXNlIHRoZSBydW4gbGF0Y2ggdG8gaW5kaWNhdGUgd2hlbiB0aGV5IGFyZSBkb2luZyB1c2VmdWwgd29yay4gIFRoZSBydW4gbGF0Y2ggaXMgdHlwaWNhbGx5IGNsZWFyZWQgaW4gdGhlIE9TIGlkbGUgbG9vcC4gIEdhdGluZyBieSB0aGUgcnVuIGxhdGNoIGZpbHRlcnMgb3V0IHRoZSBpZGxlIGxvb3AuCisKKyNHcm91cCAxMDAgcG1fZHNvdXJjZTEwLCBEYXRhIHNvdXJjZSBpbmZvcm1hdGlvbgorZXZlbnQ6MFgwNjQwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQVRBX0ZST01fUkwyTDNfTU9EX0dSUDEwMCA6IChHcm91cCAxMDAgcG1fZHNvdXJjZTEwKSBUaGUgcHJvY2Vzc29yJ3MgRGF0YSBDYWNoZSB3YXMgcmVsb2FkZWQgd2l0aCBtb2RpZmllZCAoTSkgZGF0YSBmcm9tIGFuIEwyICBvciBMMyBvbiBhIHJlbW90ZSBtb2R1bGUgZHVlIHRvIGEgZGVtYW5kIGxvYWQKK2V2ZW50OjBYMDY0MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fREFUQV9GUk9NX1JMMkwzX1NIUl9HUlAxMDAgOiAoR3JvdXAgMTAwIHBtX2Rzb3VyY2UxMCkgVGhlIHByb2Nlc3NvcidzIERhdGEgQ2FjaGUgd2FzIHJlbG9hZGVkIHdpdGggc2hhcmVkIChUIG9yIFNMKSBkYXRhIGZyb20gYW4gTDIgb3IgTDMgb24gYSByZW1vdGUgbW9kdWxlIGR1ZSB0byBhIGRlbWFuZCBsb2FkCitldmVudDowWDA2NDIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RBVEFfRlJPTV9ETDJMM19TSFJfR1JQMTAwIDogKEdyb3VwIDEwMCBwbV9kc291cmNlMTApIFRoZSBwcm9jZXNzb3IncyBEYXRhIENhY2hlIHdhcyByZWxvYWRlZCB3aXRoIHNoYXJlZCAoVCBvciBTTCkgZGF0YSBmcm9tIGFuIEwyIG9yIEwzIG9uIGEgZGlzdGFudCBtb2R1bGUgZHVlIHRvIGEgZGVtYW5kIGxvYWQKK2V2ZW50OjBYMDY0MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fREFUQV9GUk9NX0RMMkwzX01PRF9HUlAxMDAgOiAoR3JvdXAgMTAwIHBtX2Rzb3VyY2UxMCkgVGhlIHByb2Nlc3NvcidzIERhdGEgQ2FjaGUgd2FzIHJlbG9hZGVkIHdpdGggbW9kaWZpZWQgKE0pIGRhdGEgZnJvbSBhbiBMMiAgb3IgTDMgb24gYSBkaXN0YW50IG1vZHVsZSBkdWUgdG8gYSBkZW1hbmQgbG9hZAorZXZlbnQ6MFgwNjQ0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDEwMCA6IChHcm91cCAxMDAgcG1fZHNvdXJjZTEwKSBOdW1iZXIgb2YgcnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQuCitldmVudDowWDA2NDUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDEwMCA6IChHcm91cCAxMDAgcG1fZHNvdXJjZTEwKSBQcm9jZXNzb3IgQ3ljbGVzIGdhdGVkIGJ5IHRoZSBydW4gbGF0Y2guICBPcGVyYXRpbmcgc3lzdGVtcyB1c2UgdGhlIHJ1biBsYXRjaCB0byBpbmRpY2F0ZSB3aGVuIHRoZXkgYXJlIGRvaW5nIHVzZWZ1bCB3b3JrLiAgVGhlIHJ1biBsYXRjaCBpcyB0eXBpY2FsbHkgY2xlYXJlZCBpbiB0aGUgT1MgaWRsZSBsb29wLiAgR2F0aW5nIGJ5IHRoZSBydW4gbGF0Y2ggZmlsdGVycyBvdXQgdGhlIGlkbGUgbG9vcC4KKworI0dyb3VwIDEwMSBwbV9kc291cmNlMTEsIERhdGEgc291cmNlIGluZm9ybWF0aW9uCitldmVudDowWDA2NTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RBVEFfRlJPTV9MMl9HUlAxMDEgOiAoR3JvdXAgMTAxIHBtX2Rzb3VyY2UxMSkgVGhlIHByb2Nlc3NvcidzIERhdGEgQ2FjaGUgd2FzIHJlbG9hZGVkIGZyb20gdGhlIGxvY2FsIEwyIGR1ZSB0byBhIGRlbWFuZCBsb2FkLgorZXZlbnQ6MFgwNjUxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQVRBX0ZST01fTDJNSVNTX0dSUDEwMSA6IChHcm91cCAxMDEgcG1fZHNvdXJjZTExKSBUaGUgcHJvY2Vzc29yJ3MgRGF0YSBDYWNoZSB3YXMgcmVsb2FkZWQgYnV0IG5vdCBmcm9tIHRoZSBsb2NhbCBMMi4KK2V2ZW50OjBYMDY1MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fREFUQV9GUk9NX0wzTUlTU19HUlAxMDEgOiAoR3JvdXAgMTAxIHBtX2Rzb3VyY2UxMSkgVGhlIHByb2Nlc3NvcidzIERhdGEgQ2FjaGUgd2FzIHJlbG9hZGVkIGZyb20gYmV5b25kIEwzIGR1ZSB0byBhIGRlbWFuZCBsb2FkCitldmVudDowWDA2NTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQMTAxIDogKEdyb3VwIDEwMSBwbV9kc291cmNlMTEpIE51bWJlciBvZiBydW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZC4KK2V2ZW50OjBYMDY1NCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlAxMDEgOiAoR3JvdXAgMTAxIHBtX2Rzb3VyY2UxMSkgTnVtYmVyIG9mIHJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkLgorZXZlbnQ6MFgwNjU1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxMDEgOiAoR3JvdXAgMTAxIHBtX2Rzb3VyY2UxMSkgUHJvY2Vzc29yIEN5Y2xlcyBnYXRlZCBieSB0aGUgcnVuIGxhdGNoLiAgT3BlcmF0aW5nIHN5c3RlbXMgdXNlIHRoZSBydW4gbGF0Y2ggdG8gaW5kaWNhdGUgd2hlbiB0aGV5IGFyZSBkb2luZyB1c2VmdWwgd29yay4gIFRoZSBydW4gbGF0Y2ggaXMgdHlwaWNhbGx5IGNsZWFyZWQgaW4gdGhlIE9TIGlkbGUgbG9vcC4gIEdhdGluZyBieSB0aGUgcnVuIGxhdGNoIGZpbHRlcnMgb3V0IHRoZSBpZGxlIGxvb3AuCisKKyNHcm91cCAxMDIgcG1fZHNvdXJjZTEyLCBEYXRhIHNvdXJjZSBpbmZvcm1hdGlvbgorZXZlbnQ6MFgwNjYwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQVRBX0ZST01fUkwyTDNfTU9EX0dSUDEwMiA6IChHcm91cCAxMDIgcG1fZHNvdXJjZTEyKSBUaGUgcHJvY2Vzc29yJ3MgRGF0YSBDYWNoZSB3YXMgcmVsb2FkZWQgd2l0aCBtb2RpZmllZCAoTSkgZGF0YSBmcm9tIGFuIEwyICBvciBMMyBvbiBhIHJlbW90ZSBtb2R1bGUgZHVlIHRvIGEgZGVtYW5kIGxvYWQKK2V2ZW50OjBYMDY2MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fREFUQV9GUk9NX0RNRU1fR1JQMTAyIDogKEdyb3VwIDEwMiBwbV9kc291cmNlMTIpIFRoZSBwcm9jZXNzb3IncyBEYXRhIENhY2hlIHdhcyByZWxvYWRlZCB3aXRoIGRhdGEgZnJvbSBtZW1vcnkgYXR0YWNoZWQgdG8gYSBkaXN0YW50IG1vZHVsZSBkdWUgdG8gYSBkZW1hbmQgbG9hZAorZXZlbnQ6MFgwNjYyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQVRBX0ZST01fUk1FTV9HUlAxMDIgOiAoR3JvdXAgMTAyIHBtX2Rzb3VyY2UxMikgVGhlIHByb2Nlc3NvcidzIERhdGEgQ2FjaGUgd2FzIHJlbG9hZGVkIGZyb20gbWVtb3J5IGF0dGFjaGVkIHRvIGEgZGlmZmVyZW50IG1vZHVsZSB0aGFuIHRoaXMgcHJvY2Vzc29yIGlzIGxvY2F0ZWQgb24uCitldmVudDowWDA2NjMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RBVEFfRlJPTV9MTUVNX0dSUDEwMiA6IChHcm91cCAxMDIgcG1fZHNvdXJjZTEyKSBUaGUgcHJvY2Vzc29yJ3MgRGF0YSBDYWNoZSB3YXMgcmVsb2FkZWQgZnJvbSBtZW1vcnkgYXR0YWNoZWQgdG8gdGhlIHNhbWUgbW9kdWxlIHRoaXMgcHJvY2Vzc29yIGlzIGxvY2F0ZWQgb24uCitldmVudDowWDA2NjQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQMTAyIDogKEdyb3VwIDEwMiBwbV9kc291cmNlMTIpIE51bWJlciBvZiBydW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZC4KK2V2ZW50OjBYMDY2NSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQMTAyIDogKEdyb3VwIDEwMiBwbV9kc291cmNlMTIpIFByb2Nlc3NvciBDeWNsZXMgZ2F0ZWQgYnkgdGhlIHJ1biBsYXRjaC4gIE9wZXJhdGluZyBzeXN0ZW1zIHVzZSB0aGUgcnVuIGxhdGNoIHRvIGluZGljYXRlIHdoZW4gdGhleSBhcmUgZG9pbmcgdXNlZnVsIHdvcmsuICBUaGUgcnVuIGxhdGNoIGlzIHR5cGljYWxseSBjbGVhcmVkIGluIHRoZSBPUyBpZGxlIGxvb3AuICBHYXRpbmcgYnkgdGhlIHJ1biBsYXRjaCBmaWx0ZXJzIG91dCB0aGUgaWRsZSBsb29wLgorCisjR3JvdXAgMTAzIHBtX2Rzb3VyY2UxMywgRGF0YSBzb3VyY2UgaW5mb3JtYXRpb24KK2V2ZW50OjBYMDY3MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fREVSQVRfTUlTU180S19HUlAxMDMgOiAoR3JvdXAgMTAzIHBtX2Rzb3VyY2UxMykgQSBkYXRhIHJlcXVlc3QgKGxvYWQgb3Igc3RvcmUpIG1pc3NlZCB0aGUgRVJBVCBmb3IgNEsgcGFnZSBhbmQgcmVzdWx0ZWQgaW4gYW4gRVJBVCByZWxvYWQuCitldmVudDowWDA2NzEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMTAzIDogKEdyb3VwIDEwMyBwbV9kc291cmNlMTMpIE51bWJlciBvZiBQb3dlclBDIEluc3RydWN0aW9ucyB0aGF0IGNvbXBsZXRlZC4KK2V2ZW50OjBYMDY3MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fREFUQV9GUk9NX0RMMkwzX1NIUl9HUlAxMDMgOiAoR3JvdXAgMTAzIHBtX2Rzb3VyY2UxMykgVGhlIHByb2Nlc3NvcidzIERhdGEgQ2FjaGUgd2FzIHJlbG9hZGVkIHdpdGggc2hhcmVkIChUIG9yIFNMKSBkYXRhIGZyb20gYW4gTDIgb3IgTDMgb24gYSBkaXN0YW50IG1vZHVsZSBkdWUgdG8gYSBkZW1hbmQgbG9hZAorZXZlbnQ6MFgwNjczIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQVRBX0ZST01fREwyTDNfTU9EX0dSUDEwMyA6IChHcm91cCAxMDMgcG1fZHNvdXJjZTEzKSBUaGUgcHJvY2Vzc29yJ3MgRGF0YSBDYWNoZSB3YXMgcmVsb2FkZWQgd2l0aCBtb2RpZmllZCAoTSkgZGF0YSBmcm9tIGFuIEwyICBvciBMMyBvbiBhIGRpc3RhbnQgbW9kdWxlIGR1ZSB0byBhIGRlbWFuZCBsb2FkCitldmVudDowWDA2NzQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQMTAzIDogKEdyb3VwIDEwMyBwbV9kc291cmNlMTMpIE51bWJlciBvZiBydW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZC4KK2V2ZW50OjBYMDY3NSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQMTAzIDogKEdyb3VwIDEwMyBwbV9kc291cmNlMTMpIFByb2Nlc3NvciBDeWNsZXMgZ2F0ZWQgYnkgdGhlIHJ1biBsYXRjaC4gIE9wZXJhdGluZyBzeXN0ZW1zIHVzZSB0aGUgcnVuIGxhdGNoIHRvIGluZGljYXRlIHdoZW4gdGhleSBhcmUgZG9pbmcgdXNlZnVsIHdvcmsuICBUaGUgcnVuIGxhdGNoIGlzIHR5cGljYWxseSBjbGVhcmVkIGluIHRoZSBPUyBpZGxlIGxvb3AuICBHYXRpbmcgYnkgdGhlIHJ1biBsYXRjaCBmaWx0ZXJzIG91dCB0aGUgaWRsZSBsb29wLgorCisjR3JvdXAgMTA0IHBtX2Rzb3VyY2UxNCwgRGF0YSBzb3VyY2UgaW5mb3JtYXRpb24KK2V2ZW50OjBYMDY4MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fREFUQV9GUk9NX0RNRU1fR1JQMTA0IDogKEdyb3VwIDEwNCBwbV9kc291cmNlMTQpIFRoZSBwcm9jZXNzb3IncyBEYXRhIENhY2hlIHdhcyByZWxvYWRlZCB3aXRoIGRhdGEgZnJvbSBtZW1vcnkgYXR0YWNoZWQgdG8gYSBkaXN0YW50IG1vZHVsZSBkdWUgdG8gYSBkZW1hbmQgbG9hZAorZXZlbnQ6MFgwNjgxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDEwNCA6IChHcm91cCAxMDQgcG1fZHNvdXJjZTE0KSBOdW1iZXIgb2YgUG93ZXJQQyBJbnN0cnVjdGlvbnMgdGhhdCBjb21wbGV0ZWQuCitldmVudDowWDA2ODIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RBVEFfRlJPTV9STUVNX0dSUDEwNCA6IChHcm91cCAxMDQgcG1fZHNvdXJjZTE0KSBUaGUgcHJvY2Vzc29yJ3MgRGF0YSBDYWNoZSB3YXMgcmVsb2FkZWQgZnJvbSBtZW1vcnkgYXR0YWNoZWQgdG8gYSBkaWZmZXJlbnQgbW9kdWxlIHRoYW4gdGhpcyBwcm9jZXNzb3IgaXMgbG9jYXRlZCBvbi4KK2V2ZW50OjBYMDY4MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fREFUQV9GUk9NX0xNRU1fR1JQMTA0IDogKEdyb3VwIDEwNCBwbV9kc291cmNlMTQpIFRoZSBwcm9jZXNzb3IncyBEYXRhIENhY2hlIHdhcyByZWxvYWRlZCBmcm9tIG1lbW9yeSBhdHRhY2hlZCB0byB0aGUgc2FtZSBtb2R1bGUgdGhpcyBwcm9jZXNzb3IgaXMgbG9jYXRlZCBvbi4KK2V2ZW50OjBYMDY4NCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlAxMDQgOiAoR3JvdXAgMTA0IHBtX2Rzb3VyY2UxNCkgTnVtYmVyIG9mIHJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkLgorZXZlbnQ6MFgwNjg1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxMDQgOiAoR3JvdXAgMTA0IHBtX2Rzb3VyY2UxNCkgUHJvY2Vzc29yIEN5Y2xlcyBnYXRlZCBieSB0aGUgcnVuIGxhdGNoLiAgT3BlcmF0aW5nIHN5c3RlbXMgdXNlIHRoZSBydW4gbGF0Y2ggdG8gaW5kaWNhdGUgd2hlbiB0aGV5IGFyZSBkb2luZyB1c2VmdWwgd29yay4gIFRoZSBydW4gbGF0Y2ggaXMgdHlwaWNhbGx5IGNsZWFyZWQgaW4gdGhlIE9TIGlkbGUgbG9vcC4gIEdhdGluZyBieSB0aGUgcnVuIGxhdGNoIGZpbHRlcnMgb3V0IHRoZSBpZGxlIGxvb3AuCisKKyNHcm91cCAxMDUgcG1fZHNvdXJjZTE1LCBEYXRhIHNvdXJjZSBpbmZvcm1hdGlvbgorZXZlbnQ6MFgwNjkwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQVRBX0ZST01fRE1FTV9HUlAxMDUgOiAoR3JvdXAgMTA1IHBtX2Rzb3VyY2UxNSkgVGhlIHByb2Nlc3NvcidzIERhdGEgQ2FjaGUgd2FzIHJlbG9hZGVkIHdpdGggZGF0YSBmcm9tIG1lbW9yeSBhdHRhY2hlZCB0byBhIGRpc3RhbnQgbW9kdWxlIGR1ZSB0byBhIGRlbWFuZCBsb2FkCitldmVudDowWDA2OTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMTA1IDogKEdyb3VwIDEwNSBwbV9kc291cmNlMTUpIE51bWJlciBvZiBQb3dlclBDIEluc3RydWN0aW9ucyB0aGF0IGNvbXBsZXRlZC4KK2V2ZW50OjBYMDY5MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDFfRENBQ0hFX1JFTE9BRF9WQUxJRF9HUlAxMDUgOiAoR3JvdXAgMTA1IHBtX2Rzb3VyY2UxNSkgVGhlIGRhdGEgc291cmNlIGluZm9ybWF0aW9uIGlzIHZhbGlkLHRoZSBkYXRhIGNhY2hlIGhhcyBiZWVuIHJlbG9hZGVkLiAgUHJpb3IgdG8gUE9XRVI1KyB0aGlzIGluY2x1ZGVkIGRhdGEgY2FjaGUgcmVsb2FkcyBkdWUgdG8gcHJlZmV0Y2ggYWN0aXZpdHkuICBXaXRoIFBPV0VSNSsgdGhpcyBub3cgb25seSBpbmNsdWRlcyByZWxvYWRzIGR1ZSB0byBkZW1hbmQgbG9hZHMuCitldmVudDowWDA2OTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RBVEFfRlJPTV9MTUVNX0dSUDEwNSA6IChHcm91cCAxMDUgcG1fZHNvdXJjZTE1KSBUaGUgcHJvY2Vzc29yJ3MgRGF0YSBDYWNoZSB3YXMgcmVsb2FkZWQgZnJvbSBtZW1vcnkgYXR0YWNoZWQgdG8gdGhlIHNhbWUgbW9kdWxlIHRoaXMgcHJvY2Vzc29yIGlzIGxvY2F0ZWQgb24uCitldmVudDowWDA2OTQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQMTA1IDogKEdyb3VwIDEwNSBwbV9kc291cmNlMTUpIE51bWJlciBvZiBydW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZC4KK2V2ZW50OjBYMDY5NSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQMTA1IDogKEdyb3VwIDEwNSBwbV9kc291cmNlMTUpIFByb2Nlc3NvciBDeWNsZXMgZ2F0ZWQgYnkgdGhlIHJ1biBsYXRjaC4gIE9wZXJhdGluZyBzeXN0ZW1zIHVzZSB0aGUgcnVuIGxhdGNoIHRvIGluZGljYXRlIHdoZW4gdGhleSBhcmUgZG9pbmcgdXNlZnVsIHdvcmsuICBUaGUgcnVuIGxhdGNoIGlzIHR5cGljYWxseSBjbGVhcmVkIGluIHRoZSBPUyBpZGxlIGxvb3AuICBHYXRpbmcgYnkgdGhlIHJ1biBsYXRjaCBmaWx0ZXJzIG91dCB0aGUgaWRsZSBsb29wLgorCisjR3JvdXAgMTA2IHBtX2lzb3VyY2UxLCBJbnN0cnVjdGlvbiBzb3VyY2UgaW5mb3JtYXRpb24KK2V2ZW50OjBYMDZBMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU5TVF9GUk9NX0wyX0dSUDEwNiA6IChHcm91cCAxMDYgcG1faXNvdXJjZTEpIEFuIGluc3RydWN0aW9uIGZldGNoIGdyb3VwIHdhcyBmZXRjaGVkIGZyb20gTDIuIEZldGNoIEdyb3VwcyBjYW4gY29udGFpbiB1cCB0byA4IGluc3RydWN0aW9ucworZXZlbnQ6MFgwNkExIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JTlNUX0ZST01fTDNfR1JQMTA2IDogKEdyb3VwIDEwNiBwbV9pc291cmNlMSkgQW4gaW5zdHJ1Y3Rpb24gZmV0Y2ggZ3JvdXAgd2FzIGZldGNoZWQgZnJvbSBMMy4gRmV0Y2ggR3JvdXBzIGNhbiBjb250YWluIHVwIHRvIDggaW5zdHJ1Y3Rpb25zCitldmVudDowWDA2QTIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lOU1RfRlJPTV9MTUVNX0dSUDEwNiA6IChHcm91cCAxMDYgcG1faXNvdXJjZTEpIEFuIGluc3RydWN0aW9uIGZldGNoIGdyb3VwIHdhcyBmZXRjaGVkIGZyb20gbWVtb3J5IGF0dGFjaGVkIHRvIHRoZSBzYW1lIG1vZHVsZSB0aGlzIHByb2Nlc3NvciBpcyBsb2NhdGVkIG9uLiAgRmV0Y2ggZ3JvdXBzIGNhbiBjb250YWluIHVwIHRvIDggaW5zdHJ1Y3Rpb25zCitldmVudDowWDA2QTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lOU1RfRlJPTV9MMk1JU1NfR1JQMTA2IDogKEdyb3VwIDEwNiBwbV9pc291cmNlMSkgQW4gaW5zdHJ1Y3Rpb24gZmV0Y2ggZ3JvdXAgd2FzIGZldGNoZWQgZnJvbSBiZXlvbmQgdGhlIGxvY2FsIEwyLgorZXZlbnQ6MFgwNkE0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDEwNiA6IChHcm91cCAxMDYgcG1faXNvdXJjZTEpIE51bWJlciBvZiBydW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZC4KK2V2ZW50OjBYMDZBNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQMTA2IDogKEdyb3VwIDEwNiBwbV9pc291cmNlMSkgUHJvY2Vzc29yIEN5Y2xlcyBnYXRlZCBieSB0aGUgcnVuIGxhdGNoLiAgT3BlcmF0aW5nIHN5c3RlbXMgdXNlIHRoZSBydW4gbGF0Y2ggdG8gaW5kaWNhdGUgd2hlbiB0aGV5IGFyZSBkb2luZyB1c2VmdWwgd29yay4gIFRoZSBydW4gbGF0Y2ggaXMgdHlwaWNhbGx5IGNsZWFyZWQgaW4gdGhlIE9TIGlkbGUgbG9vcC4gIEdhdGluZyBieSB0aGUgcnVuIGxhdGNoIGZpbHRlcnMgb3V0IHRoZSBpZGxlIGxvb3AuCisKKyNHcm91cCAxMDcgcG1faXNvdXJjZTIsIEluc3RydWN0aW9uIHNvdXJjZSBpbmZvcm1hdGlvbgorZXZlbnQ6MFgwNkIwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JTlNUX0ZST01fTDNfR1JQMTA3IDogKEdyb3VwIDEwNyBwbV9pc291cmNlMikgQW4gaW5zdHJ1Y3Rpb24gZmV0Y2ggZ3JvdXAgd2FzIGZldGNoZWQgZnJvbSBMMy4gRmV0Y2ggR3JvdXBzIGNhbiBjb250YWluIHVwIHRvIDggaW5zdHJ1Y3Rpb25zCitldmVudDowWDA2QjEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lOU1RfRlJPTV9ETUVNX0dSUDEwNyA6IChHcm91cCAxMDcgcG1faXNvdXJjZTIpIEFuIGluc3RydWN0aW9uIGZldGNoIGdyb3VwIHdhcyBmZXRjaGVkIGZyb20gbWVtb3J5IGF0dGFjaGVkIHRvIGEgZGlzdGFudCBtb2R1bGUuIEZldGNoIGdyb3VwcyBjYW4gY29udGFpbiB1cCB0byA4IGluc3RydWN0aW9ucworZXZlbnQ6MFgwNkIyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JTlNUX0ZST01fREwyTDNfTU9EX0dSUDEwNyA6IChHcm91cCAxMDcgcG1faXNvdXJjZTIpIEFuIGluc3RydWN0aW9uIGZldGNoIGdyb3VwIHdhcyBmZXRjaGVkIHdpdGggbW9kaWZpZWQgIChNKSBkYXRhIGZyb20gYW4gTDIgb3IgTDMgb24gYSBkaXN0YW50IG1vZHVsZS4gRmV0Y2ggZ3JvdXBzIGNhbiBjb250YWluIHVwIHRvIDggaW5zdHJ1Y3Rpb25zCitldmVudDowWDA2QjMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lOU1RfRlJPTV9MTUVNX0dSUDEwNyA6IChHcm91cCAxMDcgcG1faXNvdXJjZTIpIEFuIGluc3RydWN0aW9uIGZldGNoIGdyb3VwIHdhcyBmZXRjaGVkIGZyb20gbWVtb3J5IGF0dGFjaGVkIHRvIHRoZSBzYW1lIG1vZHVsZSB0aGlzIHByb2Nlc3NvciBpcyBsb2NhdGVkIG9uLiAgRmV0Y2ggZ3JvdXBzIGNhbiBjb250YWluIHVwIHRvIDggaW5zdHJ1Y3Rpb25zCitldmVudDowWDA2QjQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQMTA3IDogKEdyb3VwIDEwNyBwbV9pc291cmNlMikgTnVtYmVyIG9mIHJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkLgorZXZlbnQ6MFgwNkI1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxMDcgOiAoR3JvdXAgMTA3IHBtX2lzb3VyY2UyKSBQcm9jZXNzb3IgQ3ljbGVzIGdhdGVkIGJ5IHRoZSBydW4gbGF0Y2guICBPcGVyYXRpbmcgc3lzdGVtcyB1c2UgdGhlIHJ1biBsYXRjaCB0byBpbmRpY2F0ZSB3aGVuIHRoZXkgYXJlIGRvaW5nIHVzZWZ1bCB3b3JrLiAgVGhlIHJ1biBsYXRjaCBpcyB0eXBpY2FsbHkgY2xlYXJlZCBpbiB0aGUgT1MgaWRsZSBsb29wLiAgR2F0aW5nIGJ5IHRoZSBydW4gbGF0Y2ggZmlsdGVycyBvdXQgdGhlIGlkbGUgbG9vcC4KKworI0dyb3VwIDEwOCBwbV9pc291cmNlMywgSW5zdHJ1Y3Rpb24gc291cmNlIGluZm9ybWF0aW9uCitldmVudDowWDA2QzAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lOU1RfRlJPTV9ETUVNX0dSUDEwOCA6IChHcm91cCAxMDggcG1faXNvdXJjZTMpIEFuIGluc3RydWN0aW9uIGZldGNoIGdyb3VwIHdhcyBmZXRjaGVkIGZyb20gbWVtb3J5IGF0dGFjaGVkIHRvIGEgZGlzdGFudCBtb2R1bGUuIEZldGNoIGdyb3VwcyBjYW4gY29udGFpbiB1cCB0byA4IGluc3RydWN0aW9ucworZXZlbnQ6MFgwNkMxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JTlNUX0ZST01fTDNNSVNTX0dSUDEwOCA6IChHcm91cCAxMDggcG1faXNvdXJjZTMpIEFuIGluc3RydWN0aW9uIGZldGNoIGdyb3VwIHdhcyBmZXRjaGVkIGZyb20gYmV5b25kIEwzLiBGZXRjaCBncm91cHMgY2FuIGNvbnRhaW4gdXAgdG8gOCBpbnN0cnVjdGlvbnMuCitldmVudDowWDA2QzIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lOU1RfRlJPTV9ETDJMM19TSFJfR1JQMTA4IDogKEdyb3VwIDEwOCBwbV9pc291cmNlMykgQW4gaW5zdHJ1Y3Rpb24gZmV0Y2ggZ3JvdXAgd2FzIGZldGNoZWQgd2l0aCBzaGFyZWQgIChTKSBkYXRhIGZyb20gdGhlIEwyIG9yIEwzIG9uIGEgZGlzdGFudCBtb2R1bGUuIEZldGNoIGdyb3VwcyBjYW4gY29udGFpbiB1cCB0byA4IGluc3RydWN0aW9ucworZXZlbnQ6MFgwNkMzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JTlNUX0ZST01fREwyTDNfTU9EX0dSUDEwOCA6IChHcm91cCAxMDggcG1faXNvdXJjZTMpIEFuIGluc3RydWN0aW9uIGZldGNoIGdyb3VwIHdhcyBmZXRjaGVkIHdpdGggbW9kaWZpZWQgIChNKSBkYXRhIGZyb20gYW4gTDIgb3IgTDMgb24gYSBkaXN0YW50IG1vZHVsZS4gRmV0Y2ggZ3JvdXBzIGNhbiBjb250YWluIHVwIHRvIDggaW5zdHJ1Y3Rpb25zCitldmVudDowWDA2QzQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQMTA4IDogKEdyb3VwIDEwOCBwbV9pc291cmNlMykgTnVtYmVyIG9mIHJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkLgorZXZlbnQ6MFgwNkM1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxMDggOiAoR3JvdXAgMTA4IHBtX2lzb3VyY2UzKSBQcm9jZXNzb3IgQ3ljbGVzIGdhdGVkIGJ5IHRoZSBydW4gbGF0Y2guICBPcGVyYXRpbmcgc3lzdGVtcyB1c2UgdGhlIHJ1biBsYXRjaCB0byBpbmRpY2F0ZSB3aGVuIHRoZXkgYXJlIGRvaW5nIHVzZWZ1bCB3b3JrLiAgVGhlIHJ1biBsYXRjaCBpcyB0eXBpY2FsbHkgY2xlYXJlZCBpbiB0aGUgT1MgaWRsZSBsb29wLiAgR2F0aW5nIGJ5IHRoZSBydW4gbGF0Y2ggZmlsdGVycyBvdXQgdGhlIGlkbGUgbG9vcC4KKworI0dyb3VwIDEwOSBwbV9pc291cmNlNCwgSW5zdHJ1Y3Rpb24gc291cmNlIGluZm9ybWF0aW9uCitldmVudDowWDA2RDAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lOU1RfRlJPTV9MMzFfTU9EX0dSUDEwOSA6IChHcm91cCAxMDkgcG1faXNvdXJjZTQpIEluc3RydWN0aW9uIGZldGNoZWQgZnJvbSBhbm90aGVyIEwzIG9uIHNhbWUgY2hpcCBtb2RpZmllZAorZXZlbnQ6MFgwNkQxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JTlNUX0ZST01fTDMxX1NIUl9HUlAxMDkgOiAoR3JvdXAgMTA5IHBtX2lzb3VyY2U0KSBJbnN0cnVjdGlvbiBmZXRjaGVkIGZyb20gYW5vdGhlciBMMyBvbiBzYW1lIGNoaXAgc2hhcmVkCitldmVudDowWDA2RDIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lOU1RfRlJPTV9MMjFfTU9EX0dSUDEwOSA6IChHcm91cCAxMDkgcG1faXNvdXJjZTQpIEluc3RydWN0aW9uIGZldGNoZWQgZnJvbSBhbm90aGVyIEwyIG9uIHNhbWUgY2hpcCBtb2RpZmllZAorZXZlbnQ6MFgwNkQzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JTlNUX0ZST01fTDIxX1NIUl9HUlAxMDkgOiAoR3JvdXAgMTA5IHBtX2lzb3VyY2U0KSBJbnN0cnVjdGlvbiBmZXRjaGVkIGZyb20gYW5vdGhlciBMMiBvbiBzYW1lIGNoaXAgc2hhcmVkCitldmVudDowWDA2RDQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQMTA5IDogKEdyb3VwIDEwOSBwbV9pc291cmNlNCkgTnVtYmVyIG9mIHJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkLgorZXZlbnQ6MFgwNkQ1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxMDkgOiAoR3JvdXAgMTA5IHBtX2lzb3VyY2U0KSBQcm9jZXNzb3IgQ3ljbGVzIGdhdGVkIGJ5IHRoZSBydW4gbGF0Y2guICBPcGVyYXRpbmcgc3lzdGVtcyB1c2UgdGhlIHJ1biBsYXRjaCB0byBpbmRpY2F0ZSB3aGVuIHRoZXkgYXJlIGRvaW5nIHVzZWZ1bCB3b3JrLiAgVGhlIHJ1biBsYXRjaCBpcyB0eXBpY2FsbHkgY2xlYXJlZCBpbiB0aGUgT1MgaWRsZSBsb29wLiAgR2F0aW5nIGJ5IHRoZSBydW4gbGF0Y2ggZmlsdGVycyBvdXQgdGhlIGlkbGUgbG9vcC4KKworI0dyb3VwIDExMCBwbV9pc291cmNlNSwgSW5zdHJ1Y3Rpb24gc291cmNlIGluZm9ybWF0aW9uCitldmVudDowWDA2RTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lOU1RfRlJPTV9MMzFfU0hSX0dSUDExMCA6IChHcm91cCAxMTAgcG1faXNvdXJjZTUpIEluc3RydWN0aW9uIGZldGNoZWQgZnJvbSBhbm90aGVyIEwzIG9uIHNhbWUgY2hpcCBzaGFyZWQKK2V2ZW50OjBYMDZFMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU5TVF9GUk9NX1JMMkwzX1NIUl9HUlAxMTAgOiAoR3JvdXAgMTEwIHBtX2lzb3VyY2U1KSBBbiBpbnN0cnVjdGlvbiBmZXRjaCBncm91cCB3YXMgZmV0Y2hlZCB3aXRoIHNoYXJlZCAgKFMpIGRhdGEgZnJvbSB0aGUgTDIgb3IgTDMgb24gYSByZW1vdGUgbW9kdWxlLiBGZXRjaCBncm91cHMgY2FuIGNvbnRhaW4gdXAgdG8gOCBpbnN0cnVjdGlvbnMKK2V2ZW50OjBYMDZFMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU5TVF9GUk9NX0wyMV9TSFJfR1JQMTEwIDogKEdyb3VwIDExMCBwbV9pc291cmNlNSkgSW5zdHJ1Y3Rpb24gZmV0Y2hlZCBmcm9tIGFub3RoZXIgTDIgb24gc2FtZSBjaGlwIHNoYXJlZAorZXZlbnQ6MFgwNkUzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JTlNUX0ZST01fTDJNSVNTX0dSUDExMCA6IChHcm91cCAxMTAgcG1faXNvdXJjZTUpIEFuIGluc3RydWN0aW9uIGZldGNoIGdyb3VwIHdhcyBmZXRjaGVkIGZyb20gYmV5b25kIHRoZSBsb2NhbCBMMi4KK2V2ZW50OjBYMDZFNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlAxMTAgOiAoR3JvdXAgMTEwIHBtX2lzb3VyY2U1KSBOdW1iZXIgb2YgcnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQuCitldmVudDowWDA2RTUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDExMCA6IChHcm91cCAxMTAgcG1faXNvdXJjZTUpIFByb2Nlc3NvciBDeWNsZXMgZ2F0ZWQgYnkgdGhlIHJ1biBsYXRjaC4gIE9wZXJhdGluZyBzeXN0ZW1zIHVzZSB0aGUgcnVuIGxhdGNoIHRvIGluZGljYXRlIHdoZW4gdGhleSBhcmUgZG9pbmcgdXNlZnVsIHdvcmsuICBUaGUgcnVuIGxhdGNoIGlzIHR5cGljYWxseSBjbGVhcmVkIGluIHRoZSBPUyBpZGxlIGxvb3AuICBHYXRpbmcgYnkgdGhlIHJ1biBsYXRjaCBmaWx0ZXJzIG91dCB0aGUgaWRsZSBsb29wLgorCisjR3JvdXAgMTExIHBtX2lzb3VyY2U2LCBJbnN0cnVjdGlvbiBzb3VyY2UgaW5mb3JtYXRpb24KK2V2ZW50OjBYMDZGMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU5TVF9GUk9NX1BSRUZfR1JQMTExIDogKEdyb3VwIDExMSBwbV9pc291cmNlNikgQW4gaW5zdHJ1Y3Rpb24gZmV0Y2ggZ3JvdXAgd2FzIGZldGNoZWQgZnJvbSB0aGUgcHJlZmV0Y2ggYnVmZmVyLiBGZXRjaCBncm91cHMgY2FuIGNvbnRhaW4gdXAgdG8gOCBpbnN0cnVjdGlvbnMKK2V2ZW50OjBYMDZGMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU5TVF9GUk9NX0wzTUlTU19HUlAxMTEgOiAoR3JvdXAgMTExIHBtX2lzb3VyY2U2KSBBbiBpbnN0cnVjdGlvbiBmZXRjaCBncm91cCB3YXMgZmV0Y2hlZCBmcm9tIGJleW9uZCBMMy4gRmV0Y2ggZ3JvdXBzIGNhbiBjb250YWluIHVwIHRvIDggaW5zdHJ1Y3Rpb25zLgorZXZlbnQ6MFgwNkYyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JTlNUX0ZST01fTE1FTV9HUlAxMTEgOiAoR3JvdXAgMTExIHBtX2lzb3VyY2U2KSBBbiBpbnN0cnVjdGlvbiBmZXRjaCBncm91cCB3YXMgZmV0Y2hlZCBmcm9tIG1lbW9yeSBhdHRhY2hlZCB0byB0aGUgc2FtZSBtb2R1bGUgdGhpcyBwcm9jZXNzb3IgaXMgbG9jYXRlZCBvbi4gIEZldGNoIGdyb3VwcyBjYW4gY29udGFpbiB1cCB0byA4IGluc3RydWN0aW9ucworZXZlbnQ6MFgwNkYzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JTlNUX0ZST01fTDJNSVNTX0dSUDExMSA6IChHcm91cCAxMTEgcG1faXNvdXJjZTYpIEFuIGluc3RydWN0aW9uIGZldGNoIGdyb3VwIHdhcyBmZXRjaGVkIGZyb20gYmV5b25kIHRoZSBsb2NhbCBMMi4KK2V2ZW50OjBYMDZGNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlAxMTEgOiAoR3JvdXAgMTExIHBtX2lzb3VyY2U2KSBOdW1iZXIgb2YgcnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQuCitldmVudDowWDA2RjUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDExMSA6IChHcm91cCAxMTEgcG1faXNvdXJjZTYpIFByb2Nlc3NvciBDeWNsZXMgZ2F0ZWQgYnkgdGhlIHJ1biBsYXRjaC4gIE9wZXJhdGluZyBzeXN0ZW1zIHVzZSB0aGUgcnVuIGxhdGNoIHRvIGluZGljYXRlIHdoZW4gdGhleSBhcmUgZG9pbmcgdXNlZnVsIHdvcmsuICBUaGUgcnVuIGxhdGNoIGlzIHR5cGljYWxseSBjbGVhcmVkIGluIHRoZSBPUyBpZGxlIGxvb3AuICBHYXRpbmcgYnkgdGhlIHJ1biBsYXRjaCBmaWx0ZXJzIG91dCB0aGUgaWRsZSBsb29wLgorCisjR3JvdXAgMTEyIHBtX2lzb3VyY2U3LCBJbnN0cnVjdGlvbiBzb3VyY2UgaW5mb3JtYXRpb24KK2V2ZW50OjBYMDcwMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU5TVF9GUk9NX1JMMkwzX01PRF9HUlAxMTIgOiAoR3JvdXAgMTEyIHBtX2lzb3VyY2U3KSBBbiBpbnN0cnVjdGlvbiBmZXRjaCBncm91cCB3YXMgZmV0Y2hlZCB3aXRoIG1vZGlmaWVkICAoTSkgZGF0YSBmcm9tIGFuIEwyIG9yIEwzIG9uIGEgcmVtb3RlIG1vZHVsZS4gRmV0Y2ggZ3JvdXBzIGNhbiBjb250YWluIHVwIHRvIDggaW5zdHJ1Y3Rpb25zCitldmVudDowWDA3MDEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lOU1RfRlJPTV9STDJMM19TSFJfR1JQMTEyIDogKEdyb3VwIDExMiBwbV9pc291cmNlNykgQW4gaW5zdHJ1Y3Rpb24gZmV0Y2ggZ3JvdXAgd2FzIGZldGNoZWQgd2l0aCBzaGFyZWQgIChTKSBkYXRhIGZyb20gdGhlIEwyIG9yIEwzIG9uIGEgcmVtb3RlIG1vZHVsZS4gRmV0Y2ggZ3JvdXBzIGNhbiBjb250YWluIHVwIHRvIDggaW5zdHJ1Y3Rpb25zCitldmVudDowWDA3MDIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lOU1RfRlJPTV9ETDJMM19TSFJfR1JQMTEyIDogKEdyb3VwIDExMiBwbV9pc291cmNlNykgQW4gaW5zdHJ1Y3Rpb24gZmV0Y2ggZ3JvdXAgd2FzIGZldGNoZWQgd2l0aCBzaGFyZWQgIChTKSBkYXRhIGZyb20gdGhlIEwyIG9yIEwzIG9uIGEgZGlzdGFudCBtb2R1bGUuIEZldGNoIGdyb3VwcyBjYW4gY29udGFpbiB1cCB0byA4IGluc3RydWN0aW9ucworZXZlbnQ6MFgwNzAzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JTlNUX0ZST01fREwyTDNfTU9EX0dSUDExMiA6IChHcm91cCAxMTIgcG1faXNvdXJjZTcpIEFuIGluc3RydWN0aW9uIGZldGNoIGdyb3VwIHdhcyBmZXRjaGVkIHdpdGggbW9kaWZpZWQgIChNKSBkYXRhIGZyb20gYW4gTDIgb3IgTDMgb24gYSBkaXN0YW50IG1vZHVsZS4gRmV0Y2ggZ3JvdXBzIGNhbiBjb250YWluIHVwIHRvIDggaW5zdHJ1Y3Rpb25zCitldmVudDowWDA3MDQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQMTEyIDogKEdyb3VwIDExMiBwbV9pc291cmNlNykgTnVtYmVyIG9mIHJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkLgorZXZlbnQ6MFgwNzA1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxMTIgOiAoR3JvdXAgMTEyIHBtX2lzb3VyY2U3KSBQcm9jZXNzb3IgQ3ljbGVzIGdhdGVkIGJ5IHRoZSBydW4gbGF0Y2guICBPcGVyYXRpbmcgc3lzdGVtcyB1c2UgdGhlIHJ1biBsYXRjaCB0byBpbmRpY2F0ZSB3aGVuIHRoZXkgYXJlIGRvaW5nIHVzZWZ1bCB3b3JrLiAgVGhlIHJ1biBsYXRjaCBpcyB0eXBpY2FsbHkgY2xlYXJlZCBpbiB0aGUgT1MgaWRsZSBsb29wLiAgR2F0aW5nIGJ5IHRoZSBydW4gbGF0Y2ggZmlsdGVycyBvdXQgdGhlIGlkbGUgbG9vcC4KKworI0dyb3VwIDExMyBwbV9pc291cmNlOCwgSW5zdHJ1Y3Rpb24gc291cmNlIGluZm9ybWF0aW9uCitldmVudDowWDA3MTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lOU1RfRlJPTV9STDJMM19TSFJfR1JQMTEzIDogKEdyb3VwIDExMyBwbV9pc291cmNlOCkgQW4gaW5zdHJ1Y3Rpb24gZmV0Y2ggZ3JvdXAgd2FzIGZldGNoZWQgd2l0aCBzaGFyZWQgIChTKSBkYXRhIGZyb20gdGhlIEwyIG9yIEwzIG9uIGEgcmVtb3RlIG1vZHVsZS4gRmV0Y2ggZ3JvdXBzIGNhbiBjb250YWluIHVwIHRvIDggaW5zdHJ1Y3Rpb25zCitldmVudDowWDA3MTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lOU1RfRlJPTV9MM01JU1NfR1JQMTEzIDogKEdyb3VwIDExMyBwbV9pc291cmNlOCkgQW4gaW5zdHJ1Y3Rpb24gZmV0Y2ggZ3JvdXAgd2FzIGZldGNoZWQgZnJvbSBiZXlvbmQgTDMuIEZldGNoIGdyb3VwcyBjYW4gY29udGFpbiB1cCB0byA4IGluc3RydWN0aW9ucy4KK2V2ZW50OjBYMDcxMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU5TVF9GUk9NX0xNRU1fR1JQMTEzIDogKEdyb3VwIDExMyBwbV9pc291cmNlOCkgQW4gaW5zdHJ1Y3Rpb24gZmV0Y2ggZ3JvdXAgd2FzIGZldGNoZWQgZnJvbSBtZW1vcnkgYXR0YWNoZWQgdG8gdGhlIHNhbWUgbW9kdWxlIHRoaXMgcHJvY2Vzc29yIGlzIGxvY2F0ZWQgb24uICBGZXRjaCBncm91cHMgY2FuIGNvbnRhaW4gdXAgdG8gOCBpbnN0cnVjdGlvbnMKK2V2ZW50OjBYMDcxMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU5TVF9GUk9NX0wyTUlTU19HUlAxMTMgOiAoR3JvdXAgMTEzIHBtX2lzb3VyY2U4KSBBbiBpbnN0cnVjdGlvbiBmZXRjaCBncm91cCB3YXMgZmV0Y2hlZCBmcm9tIGJleW9uZCB0aGUgbG9jYWwgTDIuCitldmVudDowWDA3MTQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQMTEzIDogKEdyb3VwIDExMyBwbV9pc291cmNlOCkgTnVtYmVyIG9mIHJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkLgorZXZlbnQ6MFgwNzE1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxMTMgOiAoR3JvdXAgMTEzIHBtX2lzb3VyY2U4KSBQcm9jZXNzb3IgQ3ljbGVzIGdhdGVkIGJ5IHRoZSBydW4gbGF0Y2guICBPcGVyYXRpbmcgc3lzdGVtcyB1c2UgdGhlIHJ1biBsYXRjaCB0byBpbmRpY2F0ZSB3aGVuIHRoZXkgYXJlIGRvaW5nIHVzZWZ1bCB3b3JrLiAgVGhlIHJ1biBsYXRjaCBpcyB0eXBpY2FsbHkgY2xlYXJlZCBpbiB0aGUgT1MgaWRsZSBsb29wLiAgR2F0aW5nIGJ5IHRoZSBydW4gbGF0Y2ggZmlsdGVycyBvdXQgdGhlIGlkbGUgbG9vcC4KKworI0dyb3VwIDExNCBwbV9pc291cmNlOSwgSW5zdHJ1Y3Rpb24gc291cmNlIGluZm9ybWF0aW9uCitldmVudDowWDA3MjAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lOU1RfRlJPTV9QUkVGX0dSUDExNCA6IChHcm91cCAxMTQgcG1faXNvdXJjZTkpIEFuIGluc3RydWN0aW9uIGZldGNoIGdyb3VwIHdhcyBmZXRjaGVkIGZyb20gdGhlIHByZWZldGNoIGJ1ZmZlci4gRmV0Y2ggZ3JvdXBzIGNhbiBjb250YWluIHVwIHRvIDggaW5zdHJ1Y3Rpb25zCitldmVudDowWDA3MjEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lOU1RfRlJPTV9ETUVNX0dSUDExNCA6IChHcm91cCAxMTQgcG1faXNvdXJjZTkpIEFuIGluc3RydWN0aW9uIGZldGNoIGdyb3VwIHdhcyBmZXRjaGVkIGZyb20gbWVtb3J5IGF0dGFjaGVkIHRvIGEgZGlzdGFudCBtb2R1bGUuIEZldGNoIGdyb3VwcyBjYW4gY29udGFpbiB1cCB0byA4IGluc3RydWN0aW9ucworZXZlbnQ6MFgwNzIyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JTlNUX0ZST01fUk1FTV9HUlAxMTQgOiAoR3JvdXAgMTE0IHBtX2lzb3VyY2U5KSBBbiBpbnN0cnVjdGlvbiBmZXRjaCBncm91cCB3YXMgZmV0Y2hlZCBmcm9tIG1lbW9yeSBhdHRhY2hlZCB0byBhIGRpZmZlcmVudCBtb2R1bGUgdGhhbiB0aGlzIHByb2Nlc3NvciBpcyBsb2NhdGVkIG9uLiAgRmV0Y2ggZ3JvdXBzIGNhbiBjb250YWluIHVwIHRvIDggaW5zdHJ1Y3Rpb25zCitldmVudDowWDA3MjMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lOU1RfRlJPTV9MTUVNX0dSUDExNCA6IChHcm91cCAxMTQgcG1faXNvdXJjZTkpIEFuIGluc3RydWN0aW9uIGZldGNoIGdyb3VwIHdhcyBmZXRjaGVkIGZyb20gbWVtb3J5IGF0dGFjaGVkIHRvIHRoZSBzYW1lIG1vZHVsZSB0aGlzIHByb2Nlc3NvciBpcyBsb2NhdGVkIG9uLiAgRmV0Y2ggZ3JvdXBzIGNhbiBjb250YWluIHVwIHRvIDggaW5zdHJ1Y3Rpb25zCitldmVudDowWDA3MjQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQMTE0IDogKEdyb3VwIDExNCBwbV9pc291cmNlOSkgTnVtYmVyIG9mIHJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkLgorZXZlbnQ6MFgwNzI1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxMTQgOiAoR3JvdXAgMTE0IHBtX2lzb3VyY2U5KSBQcm9jZXNzb3IgQ3ljbGVzIGdhdGVkIGJ5IHRoZSBydW4gbGF0Y2guICBPcGVyYXRpbmcgc3lzdGVtcyB1c2UgdGhlIHJ1biBsYXRjaCB0byBpbmRpY2F0ZSB3aGVuIHRoZXkgYXJlIGRvaW5nIHVzZWZ1bCB3b3JrLiAgVGhlIHJ1biBsYXRjaCBpcyB0eXBpY2FsbHkgY2xlYXJlZCBpbiB0aGUgT1MgaWRsZSBsb29wLiAgR2F0aW5nIGJ5IHRoZSBydW4gbGF0Y2ggZmlsdGVycyBvdXQgdGhlIGlkbGUgbG9vcC4KKworI0dyb3VwIDExNSBwbV9pc291cmNlMTAsIEluc3RydWN0aW9uIHNvdXJjZSBpbmZvcm1hdGlvbgorZXZlbnQ6MFgwNzMwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JTlNUX0ZST01fTDJfR1JQMTE1IDogKEdyb3VwIDExNSBwbV9pc291cmNlMTApIEFuIGluc3RydWN0aW9uIGZldGNoIGdyb3VwIHdhcyBmZXRjaGVkIGZyb20gTDIuIEZldGNoIEdyb3VwcyBjYW4gY29udGFpbiB1cCB0byA4IGluc3RydWN0aW9ucworZXZlbnQ6MFgwNzMxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JTlNUX0ZST01fTDNfR1JQMTE1IDogKEdyb3VwIDExNSBwbV9pc291cmNlMTApIEFuIGluc3RydWN0aW9uIGZldGNoIGdyb3VwIHdhcyBmZXRjaGVkIGZyb20gTDMuIEZldGNoIEdyb3VwcyBjYW4gY29udGFpbiB1cCB0byA4IGluc3RydWN0aW9ucworZXZlbnQ6MFgwNzMyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDExNSA6IChHcm91cCAxMTUgcG1faXNvdXJjZTEwKSBOdW1iZXIgb2YgUG93ZXJQQyBJbnN0cnVjdGlvbnMgdGhhdCBjb21wbGV0ZWQuCitldmVudDowWDA3MzMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQMTE1IDogKEdyb3VwIDExNSBwbV9pc291cmNlMTApIFByb2Nlc3NvciBDeWNsZXMKK2V2ZW50OjBYMDczNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlAxMTUgOiAoR3JvdXAgMTE1IHBtX2lzb3VyY2UxMCkgTnVtYmVyIG9mIHJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkLgorZXZlbnQ6MFgwNzM1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxMTUgOiAoR3JvdXAgMTE1IHBtX2lzb3VyY2UxMCkgUHJvY2Vzc29yIEN5Y2xlcyBnYXRlZCBieSB0aGUgcnVuIGxhdGNoLiAgT3BlcmF0aW5nIHN5c3RlbXMgdXNlIHRoZSBydW4gbGF0Y2ggdG8gaW5kaWNhdGUgd2hlbiB0aGV5IGFyZSBkb2luZyB1c2VmdWwgd29yay4gIFRoZSBydW4gbGF0Y2ggaXMgdHlwaWNhbGx5IGNsZWFyZWQgaW4gdGhlIE9TIGlkbGUgbG9vcC4gIEdhdGluZyBieSB0aGUgcnVuIGxhdGNoIGZpbHRlcnMgb3V0IHRoZSBpZGxlIGxvb3AuCisKKyNHcm91cCAxMTYgcG1faXNvdXJjZTExLCBJbnN0cnVjdGlvbiBzb3VyY2UgaW5mb3JtYXRpb24KK2V2ZW50OjBYMDc0MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU5TVF9GUk9NX1JMMkwzX01PRF9HUlAxMTYgOiAoR3JvdXAgMTE2IHBtX2lzb3VyY2UxMSkgQW4gaW5zdHJ1Y3Rpb24gZmV0Y2ggZ3JvdXAgd2FzIGZldGNoZWQgd2l0aCBtb2RpZmllZCAgKE0pIGRhdGEgZnJvbSBhbiBMMiBvciBMMyBvbiBhIHJlbW90ZSBtb2R1bGUuIEZldGNoIGdyb3VwcyBjYW4gY29udGFpbiB1cCB0byA4IGluc3RydWN0aW9ucworZXZlbnQ6MFgwNzQxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JTlNUX0ZST01fUkwyTDNfU0hSX0dSUDExNiA6IChHcm91cCAxMTYgcG1faXNvdXJjZTExKSBBbiBpbnN0cnVjdGlvbiBmZXRjaCBncm91cCB3YXMgZmV0Y2hlZCB3aXRoIHNoYXJlZCAgKFMpIGRhdGEgZnJvbSB0aGUgTDIgb3IgTDMgb24gYSByZW1vdGUgbW9kdWxlLiBGZXRjaCBncm91cHMgY2FuIGNvbnRhaW4gdXAgdG8gOCBpbnN0cnVjdGlvbnMKK2V2ZW50OjBYMDc0MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU5TVF9GUk9NX0xNRU1fR1JQMTE2IDogKEdyb3VwIDExNiBwbV9pc291cmNlMTEpIEFuIGluc3RydWN0aW9uIGZldGNoIGdyb3VwIHdhcyBmZXRjaGVkIGZyb20gbWVtb3J5IGF0dGFjaGVkIHRvIHRoZSBzYW1lIG1vZHVsZSB0aGlzIHByb2Nlc3NvciBpcyBsb2NhdGVkIG9uLiAgRmV0Y2ggZ3JvdXBzIGNhbiBjb250YWluIHVwIHRvIDggaW5zdHJ1Y3Rpb25zCitldmVudDowWDA3NDMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMTE2IDogKEdyb3VwIDExNiBwbV9pc291cmNlMTEpIE51bWJlciBvZiBQb3dlclBDIEluc3RydWN0aW9ucyB0aGF0IGNvbXBsZXRlZC4KK2V2ZW50OjBYMDc0NCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlAxMTYgOiAoR3JvdXAgMTE2IHBtX2lzb3VyY2UxMSkgTnVtYmVyIG9mIHJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkLgorZXZlbnQ6MFgwNzQ1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxMTYgOiAoR3JvdXAgMTE2IHBtX2lzb3VyY2UxMSkgUHJvY2Vzc29yIEN5Y2xlcyBnYXRlZCBieSB0aGUgcnVuIGxhdGNoLiAgT3BlcmF0aW5nIHN5c3RlbXMgdXNlIHRoZSBydW4gbGF0Y2ggdG8gaW5kaWNhdGUgd2hlbiB0aGV5IGFyZSBkb2luZyB1c2VmdWwgd29yay4gIFRoZSBydW4gbGF0Y2ggaXMgdHlwaWNhbGx5IGNsZWFyZWQgaW4gdGhlIE9TIGlkbGUgbG9vcC4gIEdhdGluZyBieSB0aGUgcnVuIGxhdGNoIGZpbHRlcnMgb3V0IHRoZSBpZGxlIGxvb3AuCisKKyNHcm91cCAxMTcgcG1faXNvdXJjZTEyLCBJbnN0cnVjdGlvbiBzb3VyY2UgaW5mb3JtYXRpb24KK2V2ZW50OjBYMDc1MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlAxMTcgOiAoR3JvdXAgMTE3IHBtX2lzb3VyY2UxMikgUHJvY2Vzc29yIEN5Y2xlcworZXZlbnQ6MFgwNzUxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDExNyA6IChHcm91cCAxMTcgcG1faXNvdXJjZTEyKSBOdW1iZXIgb2YgUG93ZXJQQyBJbnN0cnVjdGlvbnMgdGhhdCBjb21wbGV0ZWQuCitldmVudDowWDA3NTIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lOU1RfRlJPTV9ETDJMM19TSFJfR1JQMTE3IDogKEdyb3VwIDExNyBwbV9pc291cmNlMTIpIEFuIGluc3RydWN0aW9uIGZldGNoIGdyb3VwIHdhcyBmZXRjaGVkIHdpdGggc2hhcmVkICAoUykgZGF0YSBmcm9tIHRoZSBMMiBvciBMMyBvbiBhIGRpc3RhbnQgbW9kdWxlLiBGZXRjaCBncm91cHMgY2FuIGNvbnRhaW4gdXAgdG8gOCBpbnN0cnVjdGlvbnMKK2V2ZW50OjBYMDc1MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU5TVF9GUk9NX0RMMkwzX01PRF9HUlAxMTcgOiAoR3JvdXAgMTE3IHBtX2lzb3VyY2UxMikgQW4gaW5zdHJ1Y3Rpb24gZmV0Y2ggZ3JvdXAgd2FzIGZldGNoZWQgd2l0aCBtb2RpZmllZCAgKE0pIGRhdGEgZnJvbSBhbiBMMiBvciBMMyBvbiBhIGRpc3RhbnQgbW9kdWxlLiBGZXRjaCBncm91cHMgY2FuIGNvbnRhaW4gdXAgdG8gOCBpbnN0cnVjdGlvbnMKK2V2ZW50OjBYMDc1NCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlAxMTcgOiAoR3JvdXAgMTE3IHBtX2lzb3VyY2UxMikgTnVtYmVyIG9mIHJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkLgorZXZlbnQ6MFgwNzU1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxMTcgOiAoR3JvdXAgMTE3IHBtX2lzb3VyY2UxMikgUHJvY2Vzc29yIEN5Y2xlcyBnYXRlZCBieSB0aGUgcnVuIGxhdGNoLiAgT3BlcmF0aW5nIHN5c3RlbXMgdXNlIHRoZSBydW4gbGF0Y2ggdG8gaW5kaWNhdGUgd2hlbiB0aGV5IGFyZSBkb2luZyB1c2VmdWwgd29yay4gIFRoZSBydW4gbGF0Y2ggaXMgdHlwaWNhbGx5IGNsZWFyZWQgaW4gdGhlIE9TIGlkbGUgbG9vcC4gIEdhdGluZyBieSB0aGUgcnVuIGxhdGNoIGZpbHRlcnMgb3V0IHRoZSBpZGxlIGxvb3AuCisKKyNHcm91cCAxMTggcG1faXNvdXJjZTEzLCBJbnN0cnVjdGlvbiBzb3VyY2UgaW5mb3JtYXRpb24KK2V2ZW50OjBYMDc2MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU5TVF9GUk9NX0RNRU1fR1JQMTE4IDogKEdyb3VwIDExOCBwbV9pc291cmNlMTMpIEFuIGluc3RydWN0aW9uIGZldGNoIGdyb3VwIHdhcyBmZXRjaGVkIGZyb20gbWVtb3J5IGF0dGFjaGVkIHRvIGEgZGlzdGFudCBtb2R1bGUuIEZldGNoIGdyb3VwcyBjYW4gY29udGFpbiB1cCB0byA4IGluc3RydWN0aW9ucworZXZlbnQ6MFgwNzYxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDExOCA6IChHcm91cCAxMTggcG1faXNvdXJjZTEzKSBOdW1iZXIgb2YgUG93ZXJQQyBJbnN0cnVjdGlvbnMgdGhhdCBjb21wbGV0ZWQuCitldmVudDowWDA3NjIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lOU1RfRlJPTV9STUVNX0dSUDExOCA6IChHcm91cCAxMTggcG1faXNvdXJjZTEzKSBBbiBpbnN0cnVjdGlvbiBmZXRjaCBncm91cCB3YXMgZmV0Y2hlZCBmcm9tIG1lbW9yeSBhdHRhY2hlZCB0byBhIGRpZmZlcmVudCBtb2R1bGUgdGhhbiB0aGlzIHByb2Nlc3NvciBpcyBsb2NhdGVkIG9uLiAgRmV0Y2ggZ3JvdXBzIGNhbiBjb250YWluIHVwIHRvIDggaW5zdHJ1Y3Rpb25zCitldmVudDowWDA3NjMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lOU1RfRlJPTV9MTUVNX0dSUDExOCA6IChHcm91cCAxMTggcG1faXNvdXJjZTEzKSBBbiBpbnN0cnVjdGlvbiBmZXRjaCBncm91cCB3YXMgZmV0Y2hlZCBmcm9tIG1lbW9yeSBhdHRhY2hlZCB0byB0aGUgc2FtZSBtb2R1bGUgdGhpcyBwcm9jZXNzb3IgaXMgbG9jYXRlZCBvbi4gIEZldGNoIGdyb3VwcyBjYW4gY29udGFpbiB1cCB0byA4IGluc3RydWN0aW9ucworZXZlbnQ6MFgwNzY0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDExOCA6IChHcm91cCAxMTggcG1faXNvdXJjZTEzKSBOdW1iZXIgb2YgcnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQuCitldmVudDowWDA3NjUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDExOCA6IChHcm91cCAxMTggcG1faXNvdXJjZTEzKSBQcm9jZXNzb3IgQ3ljbGVzIGdhdGVkIGJ5IHRoZSBydW4gbGF0Y2guICBPcGVyYXRpbmcgc3lzdGVtcyB1c2UgdGhlIHJ1biBsYXRjaCB0byBpbmRpY2F0ZSB3aGVuIHRoZXkgYXJlIGRvaW5nIHVzZWZ1bCB3b3JrLiAgVGhlIHJ1biBsYXRjaCBpcyB0eXBpY2FsbHkgY2xlYXJlZCBpbiB0aGUgT1MgaWRsZSBsb29wLiAgR2F0aW5nIGJ5IHRoZSBydW4gbGF0Y2ggZmlsdGVycyBvdXQgdGhlIGlkbGUgbG9vcC4KKworI0dyb3VwIDExOSBwbV9wcmVmZXRjaDEsIFByZWZldGNoIGV2ZW50cworZXZlbnQ6MFgwNzcwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1VfRENfUFJFRl9TVFJFQU1fQUxMT0NfR1JQMTE5IDogKEdyb3VwIDExOSBwbV9wcmVmZXRjaDEpIEQgY2FjaGUgbmV3IHByZWZldGNoIHN0cmVhbSBhbGxvY2F0ZWQKK2V2ZW50OjBYMDc3MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDNfUFJFRl9MRFNUX0dSUDExOSA6IChHcm91cCAxMTkgcG1fcHJlZmV0Y2gxKSBMMyBjYWNoZSBwcmVmZXRjaGVzIExEICsgU1QKK2V2ZW50OjBYMDc3MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVX0RDX1BSRUZfU1RSRUFNX0NPTkZJUk1fR1JQMTE5IDogKEdyb3VwIDExOSBwbV9wcmVmZXRjaDEpIERjYWNoZSBuZXcgcHJlZmV0Y2ggc3RyZWFtIGNvbmZpcm1lZAorZXZlbnQ6MFgwNzczIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMV9QUkVGX0dSUDExOSA6IChHcm91cCAxMTkgcG1fcHJlZmV0Y2gxKSBBIHJlcXVlc3QgdG8gcHJlZmV0Y2ggZGF0YSBpbnRvIHRoZSBMMSB3YXMgbWFkZQorZXZlbnQ6MFgwNzc0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDExOSA6IChHcm91cCAxMTkgcG1fcHJlZmV0Y2gxKSBOdW1iZXIgb2YgcnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQuCitldmVudDowWDA3NzUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDExOSA6IChHcm91cCAxMTkgcG1fcHJlZmV0Y2gxKSBQcm9jZXNzb3IgQ3ljbGVzIGdhdGVkIGJ5IHRoZSBydW4gbGF0Y2guICBPcGVyYXRpbmcgc3lzdGVtcyB1c2UgdGhlIHJ1biBsYXRjaCB0byBpbmRpY2F0ZSB3aGVuIHRoZXkgYXJlIGRvaW5nIHVzZWZ1bCB3b3JrLiAgVGhlIHJ1biBsYXRjaCBpcyB0eXBpY2FsbHkgY2xlYXJlZCBpbiB0aGUgT1MgaWRsZSBsb29wLiAgR2F0aW5nIGJ5IHRoZSBydW4gbGF0Y2ggZmlsdGVycyBvdXQgdGhlIGlkbGUgbG9vcC4KKworI0dyb3VwIDEyMCBwbV9wcmVmZXRjaDIsIFByZWZldGNoIGV2ZW50cworZXZlbnQ6MFgwNzgwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1VfRENfUFJFRl9TVFJJREVEX1NUUkVBTV9DT05GSVJNX0dSUDEyMCA6IChHcm91cCAxMjAgcG1fcHJlZmV0Y2gyKSBEY2FjaGUgU3RyaWRlZCBwcmVmZXRjaCBzdHJlYW0gY29uZmlybWVkIChzb2Z0d2FyZSArIGhhcmR3YXJlKQorZXZlbnQ6MFgwNzgxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MRF9SRUZfTDFfR1JQMTIwIDogKEdyb3VwIDEyMCBwbV9wcmVmZXRjaDIpICBMMSBEIGNhY2hlIGxvYWQgcmVmZXJlbmNlcyBjb3VudGVkIGF0IGZpbmlzaAorZXZlbnQ6MFgwNzgyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1VfRklOX0dSUDEyMCA6IChHcm91cCAxMjAgcG1fcHJlZmV0Y2gyKSBMU1UgRmluaXNoZWQgYW4gaW5zdHJ1Y3Rpb24gKHVwIHRvIDIgcGVyIGN5Y2xlKQorZXZlbnQ6MFgwNzgzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MRF9NSVNTX0wxX0dSUDEyMCA6IChHcm91cCAxMjAgcG1fcHJlZmV0Y2gyKSBMb2FkIHJlZmVyZW5jZXMgdGhhdCBtaXNzIHRoZSBMZXZlbCAxIERhdGEgY2FjaGUuIENvbWJpbmVkIHVuaXQgMCArIDEuCitldmVudDowWDA3ODQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQMTIwIDogKEdyb3VwIDEyMCBwbV9wcmVmZXRjaDIpIE51bWJlciBvZiBydW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZC4KK2V2ZW50OjBYMDc4NSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQMTIwIDogKEdyb3VwIDEyMCBwbV9wcmVmZXRjaDIpIFByb2Nlc3NvciBDeWNsZXMgZ2F0ZWQgYnkgdGhlIHJ1biBsYXRjaC4gIE9wZXJhdGluZyBzeXN0ZW1zIHVzZSB0aGUgcnVuIGxhdGNoIHRvIGluZGljYXRlIHdoZW4gdGhleSBhcmUgZG9pbmcgdXNlZnVsIHdvcmsuICBUaGUgcnVuIGxhdGNoIGlzIHR5cGljYWxseSBjbGVhcmVkIGluIHRoZSBPUyBpZGxlIGxvb3AuICBHYXRpbmcgYnkgdGhlIHJ1biBsYXRjaCBmaWx0ZXJzIG91dCB0aGUgaWRsZSBsb29wLgorCisjR3JvdXAgMTIxIHBtX3ZzdTAsIFZTVSBFeGVjdXRpb24KK2V2ZW50OjBYMDc5MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fVlNVMF8xRkxPUF9HUlAxMjEgOiAoR3JvdXAgMTIxIHBtX3ZzdTApIG9uZSBmbG9wIChmYWRkLCBmbXVsLCBmc3ViLCBmY21wLCBmc2VsLCBmYWJzLCBmbmFicywgZnJlcywgZnNxcnRlLCBmbmVnLCB4c2FkZCwgeHNtdWwsIHhzc3ViLCB4c2NtcCwgeHNzZWwsIHhzYWJzLCB4c25hYnMsIHhzcmUsIHhzc3FydGUsIHhzbmVnKSBvcGVyYXRpb24gZmluaXNoZWQKK2V2ZW50OjBYMDc5MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fVlNVMV8xRkxPUF9HUlAxMjEgOiAoR3JvdXAgMTIxIHBtX3ZzdTApIG9uZSBmbG9wIChmYWRkLCBmbXVsLCBmc3ViLCBmY21wLCBmc2VsLCBmYWJzLCBmbmFicywgZnJlcywgZnNxcnRlLCBmbmVnLCB4c2FkZCwgeHNtdWwsIHhzc3ViLCB4c2NtcCwgeHNzZWwsIHhzYWJzLCB4c25hYnMsIHhzcmUsIHhzc3FydGUsIHhzbmVnKSBvcGVyYXRpb24gZmluaXNoZWQKK2V2ZW50OjBYMDc5MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fVlNVMF8yRkxPUF9HUlAxMjEgOiAoR3JvdXAgMTIxIHBtX3ZzdTApIHR3byBmbG9wcyBvcGVyYXRpb24gKHNjYWxhciBmbWFkZCwgZm5tYWRkLCBmbXN1YiwgZm5tc3ViIGFuZCBEUCB2ZWN0b3IgdmVyc2lvbnMgb2Ygc2luZ2xlIGZsb3AgaW5zdHJ1Y3Rpb25zKQorZXZlbnQ6MFgwNzkzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9WU1UxXzJGTE9QX0dSUDEyMSA6IChHcm91cCAxMjEgcG1fdnN1MCkgdHdvIGZsb3BzIG9wZXJhdGlvbiAoc2NhbGFyIGZtYWRkLCBmbm1hZGQsIGZtc3ViLCBmbm1zdWIgYW5kIERQIHZlY3RvciB2ZXJzaW9ucyBvZiBzaW5nbGUgZmxvcCBpbnN0cnVjdGlvbnMpCitldmVudDowWDA3OTQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQMTIxIDogKEdyb3VwIDEyMSBwbV92c3UwKSBOdW1iZXIgb2YgcnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQuCitldmVudDowWDA3OTUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDEyMSA6IChHcm91cCAxMjEgcG1fdnN1MCkgUHJvY2Vzc29yIEN5Y2xlcyBnYXRlZCBieSB0aGUgcnVuIGxhdGNoLiAgT3BlcmF0aW5nIHN5c3RlbXMgdXNlIHRoZSBydW4gbGF0Y2ggdG8gaW5kaWNhdGUgd2hlbiB0aGV5IGFyZSBkb2luZyB1c2VmdWwgd29yay4gIFRoZSBydW4gbGF0Y2ggaXMgdHlwaWNhbGx5IGNsZWFyZWQgaW4gdGhlIE9TIGlkbGUgbG9vcC4gIEdhdGluZyBieSB0aGUgcnVuIGxhdGNoIGZpbHRlcnMgb3V0IHRoZSBpZGxlIGxvb3AuCisKKyNHcm91cCAxMjIgcG1fdnN1MSwgVlNVIEV4ZWN1dGlvbgorZXZlbnQ6MFgwN0EwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9WU1UwXzRGTE9QX0dSUDEyMiA6IChHcm91cCAxMjIgcG1fdnN1MSkgZm91ciBmbG9wcyBvcGVyYXRpb24gKHNjYWxhciBmZGl2LCBmc3FydDsgRFAgdmVjdG9yIHZlcnNpb24gb2YgZm1hZGQsIGZubWFkZCwgZm1zdWIsIGZubXN1YjsgU1AgdmVjdG9yIHZlcnNpb25zIG9mIHNpbmdsZSBmbG9wIGluc3RydWN0aW9ucykKK2V2ZW50OjBYMDdBMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fVlNVMV80RkxPUF9HUlAxMjIgOiAoR3JvdXAgMTIyIHBtX3ZzdTEpIGZvdXIgZmxvcHMgb3BlcmF0aW9uIChzY2FsYXIgZmRpdiwgZnNxcnQ7IERQIHZlY3RvciB2ZXJzaW9uIG9mIGZtYWRkLCBmbm1hZGQsIGZtc3ViLCBmbm1zdWI7IFNQIHZlY3RvciB2ZXJzaW9ucyBvZiBzaW5nbGUgZmxvcCBpbnN0cnVjdGlvbnMpCitldmVudDowWDA3QTIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1ZTVTBfOEZMT1BfR1JQMTIyIDogKEdyb3VwIDEyMiBwbV92c3UxKSBlaWdodCBmbG9wcyBvcGVyYXRpb24gKERQIHZlY3RvciB2ZXJzaW9ucyBvZiBmZGl2LGZzcXJ0IGFuZCBTUCB2ZWN0b3IgdmVyc2lvbnMgb2YgZm1hZGQsZm5tYWRkLGZtc3ViLGZubXN1YikKK2V2ZW50OjBYMDdBMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fVlNVMV84RkxPUF9HUlAxMjIgOiAoR3JvdXAgMTIyIHBtX3ZzdTEpIGVpZ2h0IGZsb3BzIG9wZXJhdGlvbiAoRFAgdmVjdG9yIHZlcnNpb25zIG9mIGZkaXYsZnNxcnQgYW5kIFNQIHZlY3RvciB2ZXJzaW9ucyBvZiBmbWFkZCxmbm1hZGQsZm1zdWIsZm5tc3ViKQorZXZlbnQ6MFgwN0E0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDEyMiA6IChHcm91cCAxMjIgcG1fdnN1MSkgTnVtYmVyIG9mIHJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkLgorZXZlbnQ6MFgwN0E1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxMjIgOiAoR3JvdXAgMTIyIHBtX3ZzdTEpIFByb2Nlc3NvciBDeWNsZXMgZ2F0ZWQgYnkgdGhlIHJ1biBsYXRjaC4gIE9wZXJhdGluZyBzeXN0ZW1zIHVzZSB0aGUgcnVuIGxhdGNoIHRvIGluZGljYXRlIHdoZW4gdGhleSBhcmUgZG9pbmcgdXNlZnVsIHdvcmsuICBUaGUgcnVuIGxhdGNoIGlzIHR5cGljYWxseSBjbGVhcmVkIGluIHRoZSBPUyBpZGxlIGxvb3AuICBHYXRpbmcgYnkgdGhlIHJ1biBsYXRjaCBmaWx0ZXJzIG91dCB0aGUgaWRsZSBsb29wLgorCisjR3JvdXAgMTIzIHBtX3ZzdTIsIFZTVSBFeGVjdXRpb24KK2V2ZW50OjBYMDdCMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fVlNVXzJGTE9QX0dSUDEyMyA6IChHcm91cCAxMjMgcG1fdnN1MikgdHdvIGZsb3BzIG9wZXJhdGlvbiAoc2NhbGFyIGZtYWRkLCBmbm1hZGQsIGZtc3ViLCBmbm1zdWIgYW5kIERQIHZlY3RvciB2ZXJzaW9ucyBvZiBzaW5nbGUgZmxvcCBpbnN0cnVjdGlvbnMpCitldmVudDowWDA3QjEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1ZTVV8yRkxPUF9ET1VCTEVfR1JQMTIzIDogKEdyb3VwIDEyMyBwbV92c3UyKSBEUCB2ZWN0b3IgdmVyc2lvbiBvZiBmbXVsLCBmc3ViLCBmY21wLCBmc2VsLCBmYWJzLCBmbmFicywgZnJlcyAsZnNxcnRlLCBmbmVnCitldmVudDowWDA3QjIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1ZTVTBfMkZMT1BfRE9VQkxFX0dSUDEyMyA6IChHcm91cCAxMjMgcG1fdnN1MikgdHdvIGZsb3AgRFAgdmVjdG9yIG9wZXJhdGlvbiAoeHZhZGRkcCwgeHZtdWxkcCwgeHZzdWJkcCwgeHZjbXBkcCwgeHZzZWxkcCwgeHZhYnNkcCwgeHZuYWJzZHAsIHh2cmVkcCAseHZzcXJ0ZWRwLCB2eG5lZ2RwKQorZXZlbnQ6MFgwN0IzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9WU1UxXzJGTE9QX0RPVUJMRV9HUlAxMjMgOiAoR3JvdXAgMTIzIHBtX3ZzdTIpIHR3byBmbG9wIERQIHZlY3RvciBvcGVyYXRpb24gKHh2YWRkZHAsIHh2bXVsZHAsIHh2c3ViZHAsIHh2Y21wZHAsIHh2c2VsZHAsIHh2YWJzZHAsIHh2bmFic2RwLCB4dnJlZHAgLHh2c3FydGVkcCwgdnhuZWdkcCkKK2V2ZW50OjBYMDdCNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlAxMjMgOiAoR3JvdXAgMTIzIHBtX3ZzdTIpIE51bWJlciBvZiBydW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZC4KK2V2ZW50OjBYMDdCNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQMTIzIDogKEdyb3VwIDEyMyBwbV92c3UyKSBQcm9jZXNzb3IgQ3ljbGVzIGdhdGVkIGJ5IHRoZSBydW4gbGF0Y2guICBPcGVyYXRpbmcgc3lzdGVtcyB1c2UgdGhlIHJ1biBsYXRjaCB0byBpbmRpY2F0ZSB3aGVuIHRoZXkgYXJlIGRvaW5nIHVzZWZ1bCB3b3JrLiAgVGhlIHJ1biBsYXRjaCBpcyB0eXBpY2FsbHkgY2xlYXJlZCBpbiB0aGUgT1MgaWRsZSBsb29wLiAgR2F0aW5nIGJ5IHRoZSBydW4gbGF0Y2ggZmlsdGVycyBvdXQgdGhlIGlkbGUgbG9vcC4KKworI0dyb3VwIDEyNCBwbV92c3UzLCBWU1UgRXhlY3V0aW9uCitldmVudDowWDA3QzAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1ZTVTBfRk1BX0dSUDEyNCA6IChHcm91cCAxMjQgcG1fdnN1MykgdHdvIGZsb3BzIG9wZXJhdGlvbiAoZm1hZGQsIGZubWFkZCwgZm1zdWIsIGZubXN1YiwgeHNtYWRkLCB4c25tYWRkLCB4c21zdWIsIHhzbm1zdWIpIFNjYWxhciBpbnN0cnVjdGlvbnMgb25seSEKK2V2ZW50OjBYMDdDMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fVlNVMV9GTUFfR1JQMTI0IDogKEdyb3VwIDEyNCBwbV92c3UzKSB0d28gZmxvcHMgb3BlcmF0aW9uIChmbWFkZCwgZm5tYWRkLCBmbXN1YiwgZm5tc3ViLCB4c21hZGQsIHhzbm1hZGQsIHhzbXN1YiwgeHNubXN1YikgU2NhbGFyIGluc3RydWN0aW9ucyBvbmx5IQorZXZlbnQ6MFgwN0MyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9WU1VfRk1BX0dSUDEyNCA6IChHcm91cCAxMjQgcG1fdnN1MykgdHdvIGZsb3BzIG9wZXJhdGlvbiAoZm1hZGQsIGZubWFkZCwgZm1zdWIsIGZubXN1YikgU2NhbGFyIGluc3RydWN0aW9ucyBvbmx5IQorZXZlbnQ6MFgwN0MzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDEyNCA6IChHcm91cCAxMjQgcG1fdnN1MykgTnVtYmVyIG9mIFBvd2VyUEMgSW5zdHJ1Y3Rpb25zIHRoYXQgY29tcGxldGVkLgorZXZlbnQ6MFgwN0M0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDEyNCA6IChHcm91cCAxMjQgcG1fdnN1MykgTnVtYmVyIG9mIHJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkLgorZXZlbnQ6MFgwN0M1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxMjQgOiAoR3JvdXAgMTI0IHBtX3ZzdTMpIFByb2Nlc3NvciBDeWNsZXMgZ2F0ZWQgYnkgdGhlIHJ1biBsYXRjaC4gIE9wZXJhdGluZyBzeXN0ZW1zIHVzZSB0aGUgcnVuIGxhdGNoIHRvIGluZGljYXRlIHdoZW4gdGhleSBhcmUgZG9pbmcgdXNlZnVsIHdvcmsuICBUaGUgcnVuIGxhdGNoIGlzIHR5cGljYWxseSBjbGVhcmVkIGluIHRoZSBPUyBpZGxlIGxvb3AuICBHYXRpbmcgYnkgdGhlIHJ1biBsYXRjaCBmaWx0ZXJzIG91dCB0aGUgaWRsZSBsb29wLgorCisjR3JvdXAgMTI1IHBtX3ZzdTQsIFZTVSBFeGVjdXRpb24KK2V2ZW50OjBYMDdEMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fVlNVMF9GTUFfRE9VQkxFX0dSUDEyNSA6IChHcm91cCAxMjUgcG1fdnN1NCkgZm91ciBmbG9wIERQIHZlY3RvciBvcGVyYXRpb25zICh4dm1hZGRkcCwgeHZubWFkZGRwLCB4dm1zdWJkcCwgeHZtc3ViZHApCitldmVudDowWDA3RDEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1ZTVTFfRk1BX0RPVUJMRV9HUlAxMjUgOiAoR3JvdXAgMTI1IHBtX3ZzdTQpIGZvdXIgZmxvcCBEUCB2ZWN0b3Igb3BlcmF0aW9ucyAoeHZtYWRkZHAsIHh2bm1hZGRkcCwgeHZtc3ViZHAsIHh2bXN1YmRwKQorZXZlbnQ6MFgwN0QyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9WU1VfRk1BX0RPVUJMRV9HUlAxMjUgOiAoR3JvdXAgMTI1IHBtX3ZzdTQpIERQIHZlY3RvciB2ZXJzaW9uIG9mIGZtYWRkLGZubWFkZCxmbXN1Yixmbm1zdWIKK2V2ZW50OjBYMDdEMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAxMjUgOiAoR3JvdXAgMTI1IHBtX3ZzdTQpIE51bWJlciBvZiBQb3dlclBDIEluc3RydWN0aW9ucyB0aGF0IGNvbXBsZXRlZC4KK2V2ZW50OjBYMDdENCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlAxMjUgOiAoR3JvdXAgMTI1IHBtX3ZzdTQpIE51bWJlciBvZiBydW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZC4KK2V2ZW50OjBYMDdENSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQMTI1IDogKEdyb3VwIDEyNSBwbV92c3U0KSBQcm9jZXNzb3IgQ3ljbGVzIGdhdGVkIGJ5IHRoZSBydW4gbGF0Y2guICBPcGVyYXRpbmcgc3lzdGVtcyB1c2UgdGhlIHJ1biBsYXRjaCB0byBpbmRpY2F0ZSB3aGVuIHRoZXkgYXJlIGRvaW5nIHVzZWZ1bCB3b3JrLiAgVGhlIHJ1biBsYXRjaCBpcyB0eXBpY2FsbHkgY2xlYXJlZCBpbiB0aGUgT1MgaWRsZSBsb29wLiAgR2F0aW5nIGJ5IHRoZSBydW4gbGF0Y2ggZmlsdGVycyBvdXQgdGhlIGlkbGUgbG9vcC4KKworI0dyb3VwIDEyNiBwbV92c3U1LCBWU1UgRXhlY3V0aW9uCitldmVudDowWDA3RTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1ZTVV9WRUNUT1JfRE9VQkxFX0lTU1VFRF9HUlAxMjYgOiAoR3JvdXAgMTI2IHBtX3ZzdTUpIERvdWJsZSBQcmVjaXNpb24gdmVjdG9yIGluc3RydWN0aW9uIGlzc3VlZCBvbiBQaXBlMAorZXZlbnQ6MFgwN0UxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9WU1UwX1ZFQ1RfRE9VQkxFX0lTU1VFRF9HUlAxMjYgOiAoR3JvdXAgMTI2IHBtX3ZzdTUpIERvdWJsZSBQcmVjaXNpb24gdmVjdG9yIGluc3RydWN0aW9uIGlzc3VlZCBvbiBQaXBlMAorZXZlbnQ6MFgwN0UyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9WU1UxX1ZFQ1RfRE9VQkxFX0lTU1VFRF9HUlAxMjYgOiAoR3JvdXAgMTI2IHBtX3ZzdTUpIERvdWJsZSBQcmVjaXNpb24gdmVjdG9yIGluc3RydWN0aW9uIGlzc3VlZCBvbiBQaXBlMQorZXZlbnQ6MFgwN0UzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDEyNiA6IChHcm91cCAxMjYgcG1fdnN1NSkgTnVtYmVyIG9mIFBvd2VyUEMgSW5zdHJ1Y3Rpb25zIHRoYXQgY29tcGxldGVkLgorZXZlbnQ6MFgwN0U0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDEyNiA6IChHcm91cCAxMjYgcG1fdnN1NSkgTnVtYmVyIG9mIHJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkLgorZXZlbnQ6MFgwN0U1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxMjYgOiAoR3JvdXAgMTI2IHBtX3ZzdTUpIFByb2Nlc3NvciBDeWNsZXMgZ2F0ZWQgYnkgdGhlIHJ1biBsYXRjaC4gIE9wZXJhdGluZyBzeXN0ZW1zIHVzZSB0aGUgcnVuIGxhdGNoIHRvIGluZGljYXRlIHdoZW4gdGhleSBhcmUgZG9pbmcgdXNlZnVsIHdvcmsuICBUaGUgcnVuIGxhdGNoIGlzIHR5cGljYWxseSBjbGVhcmVkIGluIHRoZSBPUyBpZGxlIGxvb3AuICBHYXRpbmcgYnkgdGhlIHJ1biBsYXRjaCBmaWx0ZXJzIG91dCB0aGUgaWRsZSBsb29wLgorCisjR3JvdXAgMTI3IHBtX3ZzdTYsIFZTVSBFeGVjdXRpb24KK2V2ZW50OjBYMDdGMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fVlNVX0RFTk9STV9HUlAxMjcgOiAoR3JvdXAgMTI3IHBtX3ZzdTYpIFZlY3RvciBvciBTY2FsYXIgZGVub3JtIG9wZXJhbmQKK2V2ZW50OjBYMDdGMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fVlNVMF9ERU5PUk1fR1JQMTI3IDogKEdyb3VwIDEyNyBwbV92c3U2KSBWU1UwIHJlY2VpdmVkIGRlbm9ybWFsaXplZCBkYXRhCitldmVudDowWDA3RjIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1ZTVTFfREVOT1JNX0dSUDEyNyA6IChHcm91cCAxMjcgcG1fdnN1NikgVlNVMSByZWNlaXZlZCBkZW5vcm1hbGl6ZWQgZGF0YQorZXZlbnQ6MFgwN0YzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDEyNyA6IChHcm91cCAxMjcgcG1fdnN1NikgTnVtYmVyIG9mIFBvd2VyUEMgSW5zdHJ1Y3Rpb25zIHRoYXQgY29tcGxldGVkLgorZXZlbnQ6MFgwN0Y0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDEyNyA6IChHcm91cCAxMjcgcG1fdnN1NikgTnVtYmVyIG9mIHJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkLgorZXZlbnQ6MFgwN0Y1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxMjcgOiAoR3JvdXAgMTI3IHBtX3ZzdTYpIFByb2Nlc3NvciBDeWNsZXMgZ2F0ZWQgYnkgdGhlIHJ1biBsYXRjaC4gIE9wZXJhdGluZyBzeXN0ZW1zIHVzZSB0aGUgcnVuIGxhdGNoIHRvIGluZGljYXRlIHdoZW4gdGhleSBhcmUgZG9pbmcgdXNlZnVsIHdvcmsuICBUaGUgcnVuIGxhdGNoIGlzIHR5cGljYWxseSBjbGVhcmVkIGluIHRoZSBPUyBpZGxlIGxvb3AuICBHYXRpbmcgYnkgdGhlIHJ1biBsYXRjaCBmaWx0ZXJzIG91dCB0aGUgaWRsZSBsb29wLgorCisjR3JvdXAgMTI4IHBtX3ZzdTcsIFZTVSBFeGVjdXRpb24KK2V2ZW50OjBYMDgwMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fVlNVX0ZJTl9HUlAxMjggOiAoR3JvdXAgMTI4IHBtX3ZzdTcpIFZTVTAgRmluaXNoZWQgYW4gaW5zdHJ1Y3Rpb24KK2V2ZW50OjBYMDgwMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fVlNVMF9GSU5fR1JQMTI4IDogKEdyb3VwIDEyOCBwbV92c3U3KSBWU1UwIEZpbmlzaGVkIGFuIGluc3RydWN0aW9uCitldmVudDowWDA4MDIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1ZTVTFfRklOX0dSUDEyOCA6IChHcm91cCAxMjggcG1fdnN1NykgVlNVMSBGaW5pc2hlZCBhbiBpbnN0cnVjdGlvbgorZXZlbnQ6MFgwODAzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDEyOCA6IChHcm91cCAxMjggcG1fdnN1NykgTnVtYmVyIG9mIFBvd2VyUEMgSW5zdHJ1Y3Rpb25zIHRoYXQgY29tcGxldGVkLgorZXZlbnQ6MFgwODA0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDEyOCA6IChHcm91cCAxMjggcG1fdnN1NykgTnVtYmVyIG9mIHJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkLgorZXZlbnQ6MFgwODA1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxMjggOiAoR3JvdXAgMTI4IHBtX3ZzdTcpIFByb2Nlc3NvciBDeWNsZXMgZ2F0ZWQgYnkgdGhlIHJ1biBsYXRjaC4gIE9wZXJhdGluZyBzeXN0ZW1zIHVzZSB0aGUgcnVuIGxhdGNoIHRvIGluZGljYXRlIHdoZW4gdGhleSBhcmUgZG9pbmcgdXNlZnVsIHdvcmsuICBUaGUgcnVuIGxhdGNoIGlzIHR5cGljYWxseSBjbGVhcmVkIGluIHRoZSBPUyBpZGxlIGxvb3AuICBHYXRpbmcgYnkgdGhlIHJ1biBsYXRjaCBmaWx0ZXJzIG91dCB0aGUgaWRsZSBsb29wLgorCisjR3JvdXAgMTI5IHBtX3ZzdTgsIFZTVSBFeGVjdXRpb24KK2V2ZW50OjBYMDgxMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fVlNVX1NURl9HUlAxMjkgOiAoR3JvdXAgMTI5IHBtX3ZzdTgpIEZQVSBzdG9yZSAoU1Agb3IgRFApIGlzc3VlZCBvbiBQaXBlMAorZXZlbnQ6MFgwODExIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9WU1UwX1NURl9HUlAxMjkgOiAoR3JvdXAgMTI5IHBtX3ZzdTgpIEZQVSBzdG9yZSAoU1Agb3IgRFApIGlzc3VlZCBvbiBQaXBlMAorZXZlbnQ6MFgwODEyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9WU1UxX1NURl9HUlAxMjkgOiAoR3JvdXAgMTI5IHBtX3ZzdTgpIEZQVSBzdG9yZSAoU1Agb3IgRFApIGlzc3VlZCBvbiBQaXBlMQorZXZlbnQ6MFgwODEzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDEyOSA6IChHcm91cCAxMjkgcG1fdnN1OCkgTnVtYmVyIG9mIFBvd2VyUEMgSW5zdHJ1Y3Rpb25zIHRoYXQgY29tcGxldGVkLgorZXZlbnQ6MFgwODE0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDEyOSA6IChHcm91cCAxMjkgcG1fdnN1OCkgTnVtYmVyIG9mIHJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkLgorZXZlbnQ6MFgwODE1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxMjkgOiAoR3JvdXAgMTI5IHBtX3ZzdTgpIFByb2Nlc3NvciBDeWNsZXMgZ2F0ZWQgYnkgdGhlIHJ1biBsYXRjaC4gIE9wZXJhdGluZyBzeXN0ZW1zIHVzZSB0aGUgcnVuIGxhdGNoIHRvIGluZGljYXRlIHdoZW4gdGhleSBhcmUgZG9pbmcgdXNlZnVsIHdvcmsuICBUaGUgcnVuIGxhdGNoIGlzIHR5cGljYWxseSBjbGVhcmVkIGluIHRoZSBPUyBpZGxlIGxvb3AuICBHYXRpbmcgYnkgdGhlIHJ1biBsYXRjaCBmaWx0ZXJzIG91dCB0aGUgaWRsZSBsb29wLgorCisjR3JvdXAgMTMwIHBtX3ZzdTksIFZTVSBFeGVjdXRpb24KK2V2ZW50OjBYMDgyMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fVlNVX1NJTkdMRV9HUlAxMzAgOiAoR3JvdXAgMTMwIHBtX3ZzdTkpIFZlY3RvciBvciBTY2FsYXIgc2luZ2xlIHByZWNpc2lvbgorZXZlbnQ6MFgwODIxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9WU1UwX1NJTkdMRV9HUlAxMzAgOiAoR3JvdXAgMTMwIHBtX3ZzdTkpIFZTVTAgZXhlY3V0ZWQgc2luZ2xlIHByZWNpc2lvbiBpbnN0cnVjdGlvbgorZXZlbnQ6MFgwODIyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9WU1UxX1NJTkdMRV9HUlAxMzAgOiAoR3JvdXAgMTMwIHBtX3ZzdTkpIFZTVTEgZXhlY3V0ZWQgc2luZ2xlIHByZWNpc2lvbiBpbnN0cnVjdGlvbgorZXZlbnQ6MFgwODIzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9WU1UwXzE2RkxPUF9HUlAxMzAgOiAoR3JvdXAgMTMwIHBtX3ZzdTkpIFNpeHRlZW4gZmxvcHMgb3BlcmF0aW9uIChTUCB2ZWN0b3IgdmVyc2lvbnMgb2YgZmRpdixmc3FydCkKK2V2ZW50OjBYMDgyNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlAxMzAgOiAoR3JvdXAgMTMwIHBtX3ZzdTkpIE51bWJlciBvZiBydW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZC4KK2V2ZW50OjBYMDgyNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQMTMwIDogKEdyb3VwIDEzMCBwbV92c3U5KSBQcm9jZXNzb3IgQ3ljbGVzIGdhdGVkIGJ5IHRoZSBydW4gbGF0Y2guICBPcGVyYXRpbmcgc3lzdGVtcyB1c2UgdGhlIHJ1biBsYXRjaCB0byBpbmRpY2F0ZSB3aGVuIHRoZXkgYXJlIGRvaW5nIHVzZWZ1bCB3b3JrLiAgVGhlIHJ1biBsYXRjaCBpcyB0eXBpY2FsbHkgY2xlYXJlZCBpbiB0aGUgT1MgaWRsZSBsb29wLiAgR2F0aW5nIGJ5IHRoZSBydW4gbGF0Y2ggZmlsdGVycyBvdXQgdGhlIGlkbGUgbG9vcC4KKworI0dyb3VwIDEzMSBwbV92c3UxMCwgVlNVIEV4ZWN1dGlvbgorZXZlbnQ6MFgwODMwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9WU1VfRlNRUlRfRkRJVl9HUlAxMzEgOiAoR3JvdXAgMTMxIHBtX3ZzdTEwKSBEUCB2ZWN0b3IgdmVyc2lvbnMgb2YgZmRpdixmc3FydAorZXZlbnQ6MFgwODMxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9WU1UwX0ZTUVJUX0ZESVZfR1JQMTMxIDogKEdyb3VwIDEzMSBwbV92c3UxMCkgZm91ciBmbG9wcyBvcGVyYXRpb24gKGZkaXYsZnNxcnQseHNkaXYseHNzcXJ0KSBTY2FsYXIgSW5zdHJ1Y3Rpb25zIG9ubHkhCitldmVudDowWDA4MzIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1ZTVTFfRlNRUlRfRkRJVl9HUlAxMzEgOiAoR3JvdXAgMTMxIHBtX3ZzdTEwKSBmb3VyIGZsb3BzIG9wZXJhdGlvbiAoZmRpdixmc3FydCx4c2Rpdix4c3NxcnQpIFNjYWxhciBJbnN0cnVjdGlvbnMgb25seSEKK2V2ZW50OjBYMDgzMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAxMzEgOiAoR3JvdXAgMTMxIHBtX3ZzdTEwKSBOdW1iZXIgb2YgUG93ZXJQQyBJbnN0cnVjdGlvbnMgdGhhdCBjb21wbGV0ZWQuCitldmVudDowWDA4MzQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQMTMxIDogKEdyb3VwIDEzMSBwbV92c3UxMCkgTnVtYmVyIG9mIHJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkLgorZXZlbnQ6MFgwODM1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxMzEgOiAoR3JvdXAgMTMxIHBtX3ZzdTEwKSBQcm9jZXNzb3IgQ3ljbGVzIGdhdGVkIGJ5IHRoZSBydW4gbGF0Y2guICBPcGVyYXRpbmcgc3lzdGVtcyB1c2UgdGhlIHJ1biBsYXRjaCB0byBpbmRpY2F0ZSB3aGVuIHRoZXkgYXJlIGRvaW5nIHVzZWZ1bCB3b3JrLiAgVGhlIHJ1biBsYXRjaCBpcyB0eXBpY2FsbHkgY2xlYXJlZCBpbiB0aGUgT1MgaWRsZSBsb29wLiAgR2F0aW5nIGJ5IHRoZSBydW4gbGF0Y2ggZmlsdGVycyBvdXQgdGhlIGlkbGUgbG9vcC4KKworI0dyb3VwIDEzMiBwbV92c3UxMSwgVlNVIEV4ZWN1dGlvbgorZXZlbnQ6MFgwODQwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9WU1VfRlNRUlRfRkRJVl9ET1VCTEVfR1JQMTMyIDogKEdyb3VwIDEzMiBwbV92c3UxMSkgRFAgdmVjdG9yIHZlcnNpb25zIG9mIGZkaXYsZnNxcnQKK2V2ZW50OjBYMDg0MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fVlNVMF9GU1FSVF9GRElWX0RPVUJMRV9HUlAxMzIgOiAoR3JvdXAgMTMyIHBtX3ZzdTExKSBlaWdodCBmbG9wIERQIHZlY3RvciBvcGVyYXRpb25zICh4dmZkaXZkcCwgeHZzcXJ0ZHAKK2V2ZW50OjBYMDg0MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fVlNVMV9GU1FSVF9GRElWX0RPVUJMRV9HUlAxMzIgOiAoR3JvdXAgMTMyIHBtX3ZzdTExKSBlaWdodCBmbG9wIERQIHZlY3RvciBvcGVyYXRpb25zICh4dmZkaXZkcCwgeHZzcXJ0ZHAKK2V2ZW50OjBYMDg0MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAxMzIgOiAoR3JvdXAgMTMyIHBtX3ZzdTExKSBOdW1iZXIgb2YgUG93ZXJQQyBJbnN0cnVjdGlvbnMgdGhhdCBjb21wbGV0ZWQuCitldmVudDowWDA4NDQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQMTMyIDogKEdyb3VwIDEzMiBwbV92c3UxMSkgTnVtYmVyIG9mIHJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkLgorZXZlbnQ6MFgwODQ1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxMzIgOiAoR3JvdXAgMTMyIHBtX3ZzdTExKSBQcm9jZXNzb3IgQ3ljbGVzIGdhdGVkIGJ5IHRoZSBydW4gbGF0Y2guICBPcGVyYXRpbmcgc3lzdGVtcyB1c2UgdGhlIHJ1biBsYXRjaCB0byBpbmRpY2F0ZSB3aGVuIHRoZXkgYXJlIGRvaW5nIHVzZWZ1bCB3b3JrLiAgVGhlIHJ1biBsYXRjaCBpcyB0eXBpY2FsbHkgY2xlYXJlZCBpbiB0aGUgT1MgaWRsZSBsb29wLiAgR2F0aW5nIGJ5IHRoZSBydW4gbGF0Y2ggZmlsdGVycyBvdXQgdGhlIGlkbGUgbG9vcC4KKworI0dyb3VwIDEzMyBwbV92c3UxMiwgVlNVIEV4ZWN1dGlvbgorZXZlbnQ6MFgwODUwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9WU1VfU0NBTEFSX0RPVUJMRV9JU1NVRURfR1JQMTMzIDogKEdyb3VwIDEzMyBwbV92c3UxMikgRG91YmxlIFByZWNpc2lvbiBzY2FsYXIgaW5zdHJ1Y3Rpb24gaXNzdWVkIG9uIFBpcGUwCitldmVudDowWDA4NTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1ZTVTBfU0NBTF9ET1VCTEVfSVNTVUVEX0dSUDEzMyA6IChHcm91cCAxMzMgcG1fdnN1MTIpIERvdWJsZSBQcmVjaXNpb24gc2NhbGFyIGluc3RydWN0aW9uIGlzc3VlZCBvbiBQaXBlMAorZXZlbnQ6MFgwODUyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9WU1UxX1NDQUxfRE9VQkxFX0lTU1VFRF9HUlAxMzMgOiAoR3JvdXAgMTMzIHBtX3ZzdTEyKSBEb3VibGUgUHJlY2lzaW9uIHNjYWxhciBpbnN0cnVjdGlvbiBpc3N1ZWQgb24gUGlwZTEKK2V2ZW50OjBYMDg1MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAxMzMgOiAoR3JvdXAgMTMzIHBtX3ZzdTEyKSBOdW1iZXIgb2YgUG93ZXJQQyBJbnN0cnVjdGlvbnMgdGhhdCBjb21wbGV0ZWQuCitldmVudDowWDA4NTQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQMTMzIDogKEdyb3VwIDEzMyBwbV92c3UxMikgTnVtYmVyIG9mIHJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkLgorZXZlbnQ6MFgwODU1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxMzMgOiAoR3JvdXAgMTMzIHBtX3ZzdTEyKSBQcm9jZXNzb3IgQ3ljbGVzIGdhdGVkIGJ5IHRoZSBydW4gbGF0Y2guICBPcGVyYXRpbmcgc3lzdGVtcyB1c2UgdGhlIHJ1biBsYXRjaCB0byBpbmRpY2F0ZSB3aGVuIHRoZXkgYXJlIGRvaW5nIHVzZWZ1bCB3b3JrLiAgVGhlIHJ1biBsYXRjaCBpcyB0eXBpY2FsbHkgY2xlYXJlZCBpbiB0aGUgT1MgaWRsZSBsb29wLiAgR2F0aW5nIGJ5IHRoZSBydW4gbGF0Y2ggZmlsdGVycyBvdXQgdGhlIGlkbGUgbG9vcC4KKworI0dyb3VwIDEzNCBwbV92c3UxMywgVlNVIEV4ZWN1dGlvbgorZXZlbnQ6MFgwODYwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9WU1VfU0NBTEFSX1NJTkdMRV9JU1NVRURfR1JQMTM0IDogKEdyb3VwIDEzNCBwbV92c3UxMykgU2luZ2xlIFByZWNpc2lvbiBzY2FsYXIgaW5zdHJ1Y3Rpb24gaXNzdWVkIG9uIFBpcGUwCitldmVudDowWDA4NjEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1ZTVTBfU0NBTF9TSU5HTEVfSVNTVUVEX0dSUDEzNCA6IChHcm91cCAxMzQgcG1fdnN1MTMpIFNpbmdsZSBQcmVjaXNpb24gc2NhbGFyIGluc3RydWN0aW9uIGlzc3VlZCBvbiBQaXBlMAorZXZlbnQ6MFgwODYyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9WU1UxX1NDQUxfU0lOR0xFX0lTU1VFRF9HUlAxMzQgOiAoR3JvdXAgMTM0IHBtX3ZzdTEzKSBTaW5nbGUgUHJlY2lzaW9uIHNjYWxhciBpbnN0cnVjdGlvbiBpc3N1ZWQgb24gUGlwZTEKK2V2ZW50OjBYMDg2MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAxMzQgOiAoR3JvdXAgMTM0IHBtX3ZzdTEzKSBOdW1iZXIgb2YgUG93ZXJQQyBJbnN0cnVjdGlvbnMgdGhhdCBjb21wbGV0ZWQuCitldmVudDowWDA4NjQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQMTM0IDogKEdyb3VwIDEzNCBwbV92c3UxMykgTnVtYmVyIG9mIHJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkLgorZXZlbnQ6MFgwODY1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxMzQgOiAoR3JvdXAgMTM0IHBtX3ZzdTEzKSBQcm9jZXNzb3IgQ3ljbGVzIGdhdGVkIGJ5IHRoZSBydW4gbGF0Y2guICBPcGVyYXRpbmcgc3lzdGVtcyB1c2UgdGhlIHJ1biBsYXRjaCB0byBpbmRpY2F0ZSB3aGVuIHRoZXkgYXJlIGRvaW5nIHVzZWZ1bCB3b3JrLiAgVGhlIHJ1biBsYXRjaCBpcyB0eXBpY2FsbHkgY2xlYXJlZCBpbiB0aGUgT1MgaWRsZSBsb29wLiAgR2F0aW5nIGJ5IHRoZSBydW4gbGF0Y2ggZmlsdGVycyBvdXQgdGhlIGlkbGUgbG9vcC4KKworI0dyb3VwIDEzNSBwbV92c3UxNCwgVlNVIEV4ZWN1dGlvbgorZXZlbnQ6MFgwODcwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9WU1VfMUZMT1BfR1JQMTM1IDogKEdyb3VwIDEzNSBwbV92c3UxNCkgb25lIGZsb3AgKGZhZGQsIGZtdWwsIGZzdWIsIGZjbXAsIGZzZWwsIGZhYnMsIGZuYWJzLCBmcmVzLCBmc3FydGUsIGZuZWcpIG9wZXJhdGlvbiBmaW5pc2hlZAorZXZlbnQ6MFgwODcxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9WU1VfNEZMT1BfR1JQMTM1IDogKEdyb3VwIDEzNSBwbV92c3UxNCkgZm91ciBmbG9wcyBvcGVyYXRpb24gKHNjYWxhciBmZGl2LCBmc3FydDsgRFAgdmVjdG9yIHZlcnNpb24gb2YgZm1hZGQsIGZubWFkZCwgZm1zdWIsIGZubXN1YjsgU1AgdmVjdG9yIHZlcnNpb25zIG9mIHNpbmdsZSBmbG9wIGluc3RydWN0aW9ucykKK2V2ZW50OjBYMDg3MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fVlNVXzhGTE9QX0dSUDEzNSA6IChHcm91cCAxMzUgcG1fdnN1MTQpIGVpZ2h0IGZsb3BzIG9wZXJhdGlvbiAoRFAgdmVjdG9yIHZlcnNpb25zIG9mIGZkaXYsZnNxcnQgYW5kIFNQIHZlY3RvciB2ZXJzaW9ucyBvZiBmbWFkZCxmbm1hZGQsZm1zdWIsZm5tc3ViKQorZXZlbnQ6MFgwODczIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9WU1VfMkZMT1BfR1JQMTM1IDogKEdyb3VwIDEzNSBwbV92c3UxNCkgdHdvIGZsb3BzIG9wZXJhdGlvbiAoc2NhbGFyIGZtYWRkLCBmbm1hZGQsIGZtc3ViLCBmbm1zdWIgYW5kIERQIHZlY3RvciB2ZXJzaW9ucyBvZiBzaW5nbGUgZmxvcCBpbnN0cnVjdGlvbnMpCitldmVudDowWDA4NzQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQMTM1IDogKEdyb3VwIDEzNSBwbV92c3UxNCkgTnVtYmVyIG9mIHJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkLgorZXZlbnQ6MFgwODc1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxMzUgOiAoR3JvdXAgMTM1IHBtX3ZzdTE0KSBQcm9jZXNzb3IgQ3ljbGVzIGdhdGVkIGJ5IHRoZSBydW4gbGF0Y2guICBPcGVyYXRpbmcgc3lzdGVtcyB1c2UgdGhlIHJ1biBsYXRjaCB0byBpbmRpY2F0ZSB3aGVuIHRoZXkgYXJlIGRvaW5nIHVzZWZ1bCB3b3JrLiAgVGhlIHJ1biBsYXRjaCBpcyB0eXBpY2FsbHkgY2xlYXJlZCBpbiB0aGUgT1MgaWRsZSBsb29wLiAgR2F0aW5nIGJ5IHRoZSBydW4gbGF0Y2ggZmlsdGVycyBvdXQgdGhlIGlkbGUgbG9vcC4KKworI0dyb3VwIDEzNiBwbV92c3UxNSwgVlNVIEV4ZWN1dGlvbgorZXZlbnQ6MFgwODgwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9WU1VfVkVDVE9SX1NJTkdMRV9JU1NVRURfR1JQMTM2IDogKEdyb3VwIDEzNiBwbV92c3UxNSkgU2luZ2xlIFByZWNpc2lvbiB2ZWN0b3IgaW5zdHJ1Y3Rpb24gaXNzdWVkIChleGVjdXRlZCkKK2V2ZW50OjBYMDg4MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fVlNVMF9WRUNUT1JfU1BfSVNTVUVEX0dSUDEzNiA6IChHcm91cCAxMzYgcG1fdnN1MTUpIFNpbmdsZSBQcmVjaXNpb24gdmVjdG9yIGluc3RydWN0aW9uIGlzc3VlZCAoZXhlY3V0ZWQpCitldmVudDowWDA4ODIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1ZTVTBfRlBTQ1JfR1JQMTM2IDogKEdyb3VwIDEzNiBwbV92c3UxNSkgTW92ZSB0by9mcm9tIEZQU0NSIHR5cGUgaW5zdHJ1Y3Rpb24gaXNzdWVkIG9uIFBpcGUgMAorZXZlbnQ6MFgwODgzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDEzNiA6IChHcm91cCAxMzYgcG1fdnN1MTUpIE51bWJlciBvZiBQb3dlclBDIEluc3RydWN0aW9ucyB0aGF0IGNvbXBsZXRlZC4KK2V2ZW50OjBYMDg4NCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlAxMzYgOiAoR3JvdXAgMTM2IHBtX3ZzdTE1KSBOdW1iZXIgb2YgcnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQuCitldmVudDowWDA4ODUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDEzNiA6IChHcm91cCAxMzYgcG1fdnN1MTUpIFByb2Nlc3NvciBDeWNsZXMgZ2F0ZWQgYnkgdGhlIHJ1biBsYXRjaC4gIE9wZXJhdGluZyBzeXN0ZW1zIHVzZSB0aGUgcnVuIGxhdGNoIHRvIGluZGljYXRlIHdoZW4gdGhleSBhcmUgZG9pbmcgdXNlZnVsIHdvcmsuICBUaGUgcnVuIGxhdGNoIGlzIHR5cGljYWxseSBjbGVhcmVkIGluIHRoZSBPUyBpZGxlIGxvb3AuICBHYXRpbmcgYnkgdGhlIHJ1biBsYXRjaCBmaWx0ZXJzIG91dCB0aGUgaWRsZSBsb29wLgorCisjR3JvdXAgMTM3IHBtX3ZzdTE2LCBWU1UgRXhlY3V0aW9uCitldmVudDowWDA4OTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1ZTVV9TSU1QTEVfSVNTVUVEX0dSUDEzNyA6IChHcm91cCAxMzcgcG1fdnN1MTYpIFNpbXBsZSBWTVggaW5zdHJ1Y3Rpb24gaXNzdWVkCitldmVudDowWDA4OTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1ZTVTBfU0lNUExFX0lTU1VFRF9HUlAxMzcgOiAoR3JvdXAgMTM3IHBtX3ZzdTE2KSBTaW1wbGUgVk1YIGluc3RydWN0aW9uIGlzc3VlZAorZXZlbnQ6MFgwODkyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9WU1UwX0NPTVBMRVhfSVNTVUVEX0dSUDEzNyA6IChHcm91cCAxMzcgcG1fdnN1MTYpIENvbXBsZXggVk1YIGluc3RydWN0aW9uIGlzc3VlZAorZXZlbnQ6MFgwODkzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9WTVhfUkVTVUxUX1NBVF8xX0dSUDEzNyA6IChHcm91cCAxMzcgcG1fdnN1MTYpIFZhbGlkIHJlc3VsdCB3aXRoIHNhdD0xCitldmVudDowWDA4OTQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQMTM3IDogKEdyb3VwIDEzNyBwbV92c3UxNikgTnVtYmVyIG9mIHJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkLgorZXZlbnQ6MFgwODk1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxMzcgOiAoR3JvdXAgMTM3IHBtX3ZzdTE2KSBQcm9jZXNzb3IgQ3ljbGVzIGdhdGVkIGJ5IHRoZSBydW4gbGF0Y2guICBPcGVyYXRpbmcgc3lzdGVtcyB1c2UgdGhlIHJ1biBsYXRjaCB0byBpbmRpY2F0ZSB3aGVuIHRoZXkgYXJlIGRvaW5nIHVzZWZ1bCB3b3JrLiAgVGhlIHJ1biBsYXRjaCBpcyB0eXBpY2FsbHkgY2xlYXJlZCBpbiB0aGUgT1MgaWRsZSBsb29wLiAgR2F0aW5nIGJ5IHRoZSBydW4gbGF0Y2ggZmlsdGVycyBvdXQgdGhlIGlkbGUgbG9vcC4KKworI0dyb3VwIDEzOCBwbV92c3UxNywgVlNVIEV4ZWN1dGlvbgorZXZlbnQ6MFgwOEEwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9WU1UxX0REX0lTU1VFRF9HUlAxMzggOiAoR3JvdXAgMTM4IHBtX3ZzdTE3KSA2NEJJVCBEZWNpbWFsIElzc3VlZCBvbiBQaXBlMQorZXZlbnQ6MFgwOEExIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9WU1UxX0RRX0lTU1VFRF9HUlAxMzggOiAoR3JvdXAgMTM4IHBtX3ZzdTE3KSAxMjhCSVQgRGVjaW1hbCBJc3N1ZWQgb24gUGlwZTEKK2V2ZW50OjBYMDhBMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fVlNVMV9QRVJNVVRFX0lTU1VFRF9HUlAxMzggOiAoR3JvdXAgMTM4IHBtX3ZzdTE3KSBQZXJtdXRlIFZNWCBJbnN0cnVjdGlvbiBJc3N1ZWQKK2V2ZW50OjBYMDhBMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fVlNVMV9TUV9HUlAxMzggOiAoR3JvdXAgMTM4IHBtX3ZzdTE3KSBTdG9yZSBWZWN0b3IgSXNzdWVkIG9uIFBpcGUxCitldmVudDowWDA4QTQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQMTM4IDogKEdyb3VwIDEzOCBwbV92c3UxNykgTnVtYmVyIG9mIHJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkLgorZXZlbnQ6MFgwOEE1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxMzggOiAoR3JvdXAgMTM4IHBtX3ZzdTE3KSBQcm9jZXNzb3IgQ3ljbGVzIGdhdGVkIGJ5IHRoZSBydW4gbGF0Y2guICBPcGVyYXRpbmcgc3lzdGVtcyB1c2UgdGhlIHJ1biBsYXRjaCB0byBpbmRpY2F0ZSB3aGVuIHRoZXkgYXJlIGRvaW5nIHVzZWZ1bCB3b3JrLiAgVGhlIHJ1biBsYXRjaCBpcyB0eXBpY2FsbHkgY2xlYXJlZCBpbiB0aGUgT1MgaWRsZSBsb29wLiAgR2F0aW5nIGJ5IHRoZSBydW4gbGF0Y2ggZmlsdGVycyBvdXQgdGhlIGlkbGUgbG9vcC4KKworI0dyb3VwIDEzOSBwbV92c3UxOCwgVlNVIEV4ZWN1dGlvbgorZXZlbnQ6MFgwOEIwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9WU1VfRkNPTlZfR1JQMTM5IDogKEdyb3VwIDEzOSBwbV92c3UxOCkgQ29udmVydCBpbnN0cnVjdGlvbiBleGVjdXRlZAorZXZlbnQ6MFgwOEIxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9WU1UwX0ZDT05WX0dSUDEzOSA6IChHcm91cCAxMzkgcG1fdnN1MTgpIENvbnZlcnQgaW5zdHJ1Y3Rpb24gZXhlY3V0ZWQKK2V2ZW50OjBYMDhCMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fVlNVMV9GQ09OVl9HUlAxMzkgOiAoR3JvdXAgMTM5IHBtX3ZzdTE4KSBDb252ZXJ0IGluc3RydWN0aW9uIGV4ZWN1dGVkCitldmVudDowWDA4QjMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMTM5IDogKEdyb3VwIDEzOSBwbV92c3UxOCkgTnVtYmVyIG9mIFBvd2VyUEMgSW5zdHJ1Y3Rpb25zIHRoYXQgY29tcGxldGVkLgorZXZlbnQ6MFgwOEI0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDEzOSA6IChHcm91cCAxMzkgcG1fdnN1MTgpIE51bWJlciBvZiBydW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZC4KK2V2ZW50OjBYMDhCNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQMTM5IDogKEdyb3VwIDEzOSBwbV92c3UxOCkgUHJvY2Vzc29yIEN5Y2xlcyBnYXRlZCBieSB0aGUgcnVuIGxhdGNoLiAgT3BlcmF0aW5nIHN5c3RlbXMgdXNlIHRoZSBydW4gbGF0Y2ggdG8gaW5kaWNhdGUgd2hlbiB0aGV5IGFyZSBkb2luZyB1c2VmdWwgd29yay4gIFRoZSBydW4gbGF0Y2ggaXMgdHlwaWNhbGx5IGNsZWFyZWQgaW4gdGhlIE9TIGlkbGUgbG9vcC4gIEdhdGluZyBieSB0aGUgcnVuIGxhdGNoIGZpbHRlcnMgb3V0IHRoZSBpZGxlIGxvb3AuCisKKyNHcm91cCAxNDAgcG1fdnN1MTksIFZTVSBFeGVjdXRpb24KK2V2ZW50OjBYMDhDMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fVlNVX0ZSU1BfR1JQMTQwIDogKEdyb3VwIDE0MCBwbV92c3UxOSkgUm91bmQgdG8gc2luZ2xlIHByZWNpc2lvbiBpbnN0cnVjdGlvbiBleGVjdXRlZAorZXZlbnQ6MFgwOEMxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9WU1UwX0ZSU1BfR1JQMTQwIDogKEdyb3VwIDE0MCBwbV92c3UxOSkgUm91bmQgdG8gc2luZ2xlIHByZWNpc2lvbiBpbnN0cnVjdGlvbiBleGVjdXRlZAorZXZlbnQ6MFgwOEMyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9WU1UxX0ZSU1BfR1JQMTQwIDogKEdyb3VwIDE0MCBwbV92c3UxOSkgUm91bmQgdG8gc2luZ2xlIHByZWNpc2lvbiBpbnN0cnVjdGlvbiBleGVjdXRlZAorZXZlbnQ6MFgwOEMzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDE0MCA6IChHcm91cCAxNDAgcG1fdnN1MTkpIE51bWJlciBvZiBQb3dlclBDIEluc3RydWN0aW9ucyB0aGF0IGNvbXBsZXRlZC4KK2V2ZW50OjBYMDhDNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlAxNDAgOiAoR3JvdXAgMTQwIHBtX3ZzdTE5KSBOdW1iZXIgb2YgcnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQuCitldmVudDowWDA4QzUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDE0MCA6IChHcm91cCAxNDAgcG1fdnN1MTkpIFByb2Nlc3NvciBDeWNsZXMgZ2F0ZWQgYnkgdGhlIHJ1biBsYXRjaC4gIE9wZXJhdGluZyBzeXN0ZW1zIHVzZSB0aGUgcnVuIGxhdGNoIHRvIGluZGljYXRlIHdoZW4gdGhleSBhcmUgZG9pbmcgdXNlZnVsIHdvcmsuICBUaGUgcnVuIGxhdGNoIGlzIHR5cGljYWxseSBjbGVhcmVkIGluIHRoZSBPUyBpZGxlIGxvb3AuICBHYXRpbmcgYnkgdGhlIHJ1biBsYXRjaCBmaWx0ZXJzIG91dCB0aGUgaWRsZSBsb29wLgorCisjR3JvdXAgMTQxIHBtX3ZzdTIwLCBWU1UgRXhlY3V0aW9uCitldmVudDowWDA4RDAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1ZTVV9GRVNUX0dSUDE0MSA6IChHcm91cCAxNDEgcG1fdnN1MjApIEVzdGltYXRlIGluc3RydWN0aW9uIGV4ZWN1dGVkCitldmVudDowWDA4RDEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1ZTVTBfRkVTVF9HUlAxNDEgOiAoR3JvdXAgMTQxIHBtX3ZzdTIwKSBFc3RpbWF0ZSBpbnN0cnVjdGlvbiBleGVjdXRlZAorZXZlbnQ6MFgwOEQyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9WU1UxX0ZFU1RfR1JQMTQxIDogKEdyb3VwIDE0MSBwbV92c3UyMCkgRXN0aW1hdGUgaW5zdHJ1Y3Rpb24gZXhlY3V0ZWQKK2V2ZW50OjBYMDhEMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAxNDEgOiAoR3JvdXAgMTQxIHBtX3ZzdTIwKSBOdW1iZXIgb2YgUG93ZXJQQyBJbnN0cnVjdGlvbnMgdGhhdCBjb21wbGV0ZWQuCitldmVudDowWDA4RDQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQMTQxIDogKEdyb3VwIDE0MSBwbV92c3UyMCkgTnVtYmVyIG9mIHJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkLgorZXZlbnQ6MFgwOEQ1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxNDEgOiAoR3JvdXAgMTQxIHBtX3ZzdTIwKSBQcm9jZXNzb3IgQ3ljbGVzIGdhdGVkIGJ5IHRoZSBydW4gbGF0Y2guICBPcGVyYXRpbmcgc3lzdGVtcyB1c2UgdGhlIHJ1biBsYXRjaCB0byBpbmRpY2F0ZSB3aGVuIHRoZXkgYXJlIGRvaW5nIHVzZWZ1bCB3b3JrLiAgVGhlIHJ1biBsYXRjaCBpcyB0eXBpY2FsbHkgY2xlYXJlZCBpbiB0aGUgT1MgaWRsZSBsb29wLiAgR2F0aW5nIGJ5IHRoZSBydW4gbGF0Y2ggZmlsdGVycyBvdXQgdGhlIGlkbGUgbG9vcC4KKworI0dyb3VwIDE0MiBwbV92c3UyMSwgVlNVIEV4ZWN1dGlvbgorZXZlbnQ6MFgwOEUwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9CUlVfRklOX0dSUDE0MiA6IChHcm91cCAxNDIgcG1fdnN1MjEpIFRoZSBCcmFuY2ggZXhlY3V0aW9uIHVuaXQgZmluaXNoZWQgYW4gaW5zdHJ1Y3Rpb24KK2V2ZW50OjBYMDhFMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQMTQyIDogKEdyb3VwIDE0MiBwbV92c3UyMSkgUHJvY2Vzc29yIEN5Y2xlcyBnYXRlZCBieSB0aGUgcnVuIGxhdGNoLiAgT3BlcmF0aW5nIHN5c3RlbXMgdXNlIHRoZSBydW4gbGF0Y2ggdG8gaW5kaWNhdGUgd2hlbiB0aGV5IGFyZSBkb2luZyB1c2VmdWwgd29yay4gIFRoZSBydW4gbGF0Y2ggaXMgdHlwaWNhbGx5IGNsZWFyZWQgaW4gdGhlIE9TIGlkbGUgbG9vcC4gIEdhdGluZyBieSB0aGUgcnVuIGxhdGNoIGZpbHRlcnMgb3V0IHRoZSBpZGxlIGxvb3AuCitldmVudDowWDA4RTIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMTQyIDogKEdyb3VwIDE0MiBwbV92c3UyMSkgTnVtYmVyIG9mIFBvd2VyUEMgSW5zdHJ1Y3Rpb25zIHRoYXQgY29tcGxldGVkLgorZXZlbnQ6MFgwOEUzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9WU1VfRklOX0dSUDE0MiA6IChHcm91cCAxNDIgcG1fdnN1MjEpIFZTVTAgRmluaXNoZWQgYW4gaW5zdHJ1Y3Rpb24KK2V2ZW50OjBYMDhFNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlAxNDIgOiAoR3JvdXAgMTQyIHBtX3ZzdTIxKSBOdW1iZXIgb2YgcnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQuCitldmVudDowWDA4RTUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDE0MiA6IChHcm91cCAxNDIgcG1fdnN1MjEpIFByb2Nlc3NvciBDeWNsZXMgZ2F0ZWQgYnkgdGhlIHJ1biBsYXRjaC4gIE9wZXJhdGluZyBzeXN0ZW1zIHVzZSB0aGUgcnVuIGxhdGNoIHRvIGluZGljYXRlIHdoZW4gdGhleSBhcmUgZG9pbmcgdXNlZnVsIHdvcmsuICBUaGUgcnVuIGxhdGNoIGlzIHR5cGljYWxseSBjbGVhcmVkIGluIHRoZSBPUyBpZGxlIGxvb3AuICBHYXRpbmcgYnkgdGhlIHJ1biBsYXRjaCBmaWx0ZXJzIG91dCB0aGUgaWRsZSBsb29wLgorCisjR3JvdXAgMTQzIHBtX3ZzdTIyLCBWU1UgRXhlY3V0aW9uCitldmVudDowWDA4RjAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9MREZfR1JQMTQzIDogKEdyb3VwIDE0MyBwbV92c3UyMikgTFNVIGV4ZWN1dGVkIEZsb2F0aW5nIFBvaW50IGxvYWQgaW5zdHJ1Y3Rpb24uICBDb21iaW5lZCBVbml0IDAgKyAxLgorZXZlbnQ6MFgwOEYxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9WU1VfU1RGX0dSUDE0MyA6IChHcm91cCAxNDMgcG1fdnN1MjIpIEZQVSBzdG9yZSAoU1Agb3IgRFApIGlzc3VlZCBvbiBQaXBlMAorZXZlbnQ6MFgwOEYyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9WU1VfRk1BX0dSUDE0MyA6IChHcm91cCAxNDMgcG1fdnN1MjIpIHR3byBmbG9wcyBvcGVyYXRpb24gKGZtYWRkLCBmbm1hZGQsIGZtc3ViLCBmbm1zdWIpIFNjYWxhciBpbnN0cnVjdGlvbnMgb25seSEKK2V2ZW50OjBYMDhGMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fVlNVXzFGTE9QX0dSUDE0MyA6IChHcm91cCAxNDMgcG1fdnN1MjIpIG9uZSBmbG9wIChmYWRkLCBmbXVsLCBmc3ViLCBmY21wLCBmc2VsLCBmYWJzLCBmbmFicywgZnJlcywgZnNxcnRlLCBmbmVnKSBvcGVyYXRpb24gZmluaXNoZWQKK2V2ZW50OjBYMDhGNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlAxNDMgOiAoR3JvdXAgMTQzIHBtX3ZzdTIyKSBOdW1iZXIgb2YgcnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQuCitldmVudDowWDA4RjUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDE0MyA6IChHcm91cCAxNDMgcG1fdnN1MjIpIFByb2Nlc3NvciBDeWNsZXMgZ2F0ZWQgYnkgdGhlIHJ1biBsYXRjaC4gIE9wZXJhdGluZyBzeXN0ZW1zIHVzZSB0aGUgcnVuIGxhdGNoIHRvIGluZGljYXRlIHdoZW4gdGhleSBhcmUgZG9pbmcgdXNlZnVsIHdvcmsuICBUaGUgcnVuIGxhdGNoIGlzIHR5cGljYWxseSBjbGVhcmVkIGluIHRoZSBPUyBpZGxlIGxvb3AuICBHYXRpbmcgYnkgdGhlIHJ1biBsYXRjaCBmaWx0ZXJzIG91dCB0aGUgaWRsZSBsb29wLgorCisjR3JvdXAgMTQ0IHBtX3ZzdTIzLCBWU1UgRXhlY3V0aW9uCitldmVudDowWDA5MDAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1ZTVV9GU1FSVF9GRElWX0dSUDE0NCA6IChHcm91cCAxNDQgcG1fdnN1MjMpIERQIHZlY3RvciB2ZXJzaW9ucyBvZiBmZGl2LGZzcXJ0CitldmVudDowWDA5MDEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1ZTVV9GSU5fR1JQMTQ0IDogKEdyb3VwIDE0NCBwbV92c3UyMykgVlNVMCBGaW5pc2hlZCBhbiBpbnN0cnVjdGlvbgorZXZlbnQ6MFgwOTAyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9WU1VfRk1BX0dSUDE0NCA6IChHcm91cCAxNDQgcG1fdnN1MjMpIHR3byBmbG9wcyBvcGVyYXRpb24gKGZtYWRkLCBmbm1hZGQsIGZtc3ViLCBmbm1zdWIpIFNjYWxhciBpbnN0cnVjdGlvbnMgb25seSEKK2V2ZW50OjBYMDkwMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fVlNVXzFGTE9QX0dSUDE0NCA6IChHcm91cCAxNDQgcG1fdnN1MjMpIG9uZSBmbG9wIChmYWRkLCBmbXVsLCBmc3ViLCBmY21wLCBmc2VsLCBmYWJzLCBmbmFicywgZnJlcywgZnNxcnRlLCBmbmVnKSBvcGVyYXRpb24gZmluaXNoZWQKK2V2ZW50OjBYMDkwNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlAxNDQgOiAoR3JvdXAgMTQ0IHBtX3ZzdTIzKSBOdW1iZXIgb2YgcnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQuCitldmVudDowWDA5MDUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDE0NCA6IChHcm91cCAxNDQgcG1fdnN1MjMpIFByb2Nlc3NvciBDeWNsZXMgZ2F0ZWQgYnkgdGhlIHJ1biBsYXRjaC4gIE9wZXJhdGluZyBzeXN0ZW1zIHVzZSB0aGUgcnVuIGxhdGNoIHRvIGluZGljYXRlIHdoZW4gdGhleSBhcmUgZG9pbmcgdXNlZnVsIHdvcmsuICBUaGUgcnVuIGxhdGNoIGlzIHR5cGljYWxseSBjbGVhcmVkIGluIHRoZSBPUyBpZGxlIGxvb3AuICBHYXRpbmcgYnkgdGhlIHJ1biBsYXRjaCBmaWx0ZXJzIG91dCB0aGUgaWRsZSBsb29wLgorCisjR3JvdXAgMTQ1IHBtX3ZzdTI0LCBWU1UgRXhlY3V0aW9uCitldmVudDowWDA5MTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZMT1BfR1JQMTQ1IDogKEdyb3VwIDE0NSBwbV92c3UyNCkgQSBmbG9hdGluZyBwb2ludCBvcGVyYXRpb24gaGFzIGNvbXBsZXRlZAorZXZlbnQ6MFgwOTExIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9WU1VfRklOX0dSUDE0NSA6IChHcm91cCAxNDUgcG1fdnN1MjQpIFZTVTAgRmluaXNoZWQgYW4gaW5zdHJ1Y3Rpb24KK2V2ZW50OjBYMDkxMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fVlNVX0ZFU1RfR1JQMTQ1IDogKEdyb3VwIDE0NSBwbV92c3UyNCkgRXN0aW1hdGUgaW5zdHJ1Y3Rpb24gZXhlY3V0ZWQKK2V2ZW50OjBYMDkxMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fVlNVXzFGTE9QX0dSUDE0NSA6IChHcm91cCAxNDUgcG1fdnN1MjQpIG9uZSBmbG9wIChmYWRkLCBmbXVsLCBmc3ViLCBmY21wLCBmc2VsLCBmYWJzLCBmbmFicywgZnJlcywgZnNxcnRlLCBmbmVnKSBvcGVyYXRpb24gZmluaXNoZWQKK2V2ZW50OjBYMDkxNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlAxNDUgOiAoR3JvdXAgMTQ1IHBtX3ZzdTI0KSBOdW1iZXIgb2YgcnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQuCitldmVudDowWDA5MTUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDE0NSA6IChHcm91cCAxNDUgcG1fdnN1MjQpIFByb2Nlc3NvciBDeWNsZXMgZ2F0ZWQgYnkgdGhlIHJ1biBsYXRjaC4gIE9wZXJhdGluZyBzeXN0ZW1zIHVzZSB0aGUgcnVuIGxhdGNoIHRvIGluZGljYXRlIHdoZW4gdGhleSBhcmUgZG9pbmcgdXNlZnVsIHdvcmsuICBUaGUgcnVuIGxhdGNoIGlzIHR5cGljYWxseSBjbGVhcmVkIGluIHRoZSBPUyBpZGxlIGxvb3AuICBHYXRpbmcgYnkgdGhlIHJ1biBsYXRjaCBmaWx0ZXJzIG91dCB0aGUgaWRsZSBsb29wLgorCisjR3JvdXAgMTQ2IHBtX3ZzdTI1LCBWU1UgRXhlY3V0aW9uCitldmVudDowWDA5MjAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1ZTVV9TVEZfR1JQMTQ2IDogKEdyb3VwIDE0NiBwbV92c3UyNSkgRlBVIHN0b3JlIChTUCBvciBEUCkgaXNzdWVkIG9uIFBpcGUwCitldmVudDowWDA5MjEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1ZTVV9GSU5fR1JQMTQ2IDogKEdyb3VwIDE0NiBwbV92c3UyNSkgVlNVMCBGaW5pc2hlZCBhbiBpbnN0cnVjdGlvbgorZXZlbnQ6MFgwOTIyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9WU1VfRlJTUF9HUlAxNDYgOiAoR3JvdXAgMTQ2IHBtX3ZzdTI1KSBSb3VuZCB0byBzaW5nbGUgcHJlY2lzaW9uIGluc3RydWN0aW9uIGV4ZWN1dGVkCitldmVudDowWDA5MjMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1ZTVV9GQ09OVl9HUlAxNDYgOiAoR3JvdXAgMTQ2IHBtX3ZzdTI1KSBDb252ZXJ0IGluc3RydWN0aW9uIGV4ZWN1dGVkCitldmVudDowWDA5MjQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQMTQ2IDogKEdyb3VwIDE0NiBwbV92c3UyNSkgTnVtYmVyIG9mIHJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkLgorZXZlbnQ6MFgwOTI1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxNDYgOiAoR3JvdXAgMTQ2IHBtX3ZzdTI1KSBQcm9jZXNzb3IgQ3ljbGVzIGdhdGVkIGJ5IHRoZSBydW4gbGF0Y2guICBPcGVyYXRpbmcgc3lzdGVtcyB1c2UgdGhlIHJ1biBsYXRjaCB0byBpbmRpY2F0ZSB3aGVuIHRoZXkgYXJlIGRvaW5nIHVzZWZ1bCB3b3JrLiAgVGhlIHJ1biBsYXRjaCBpcyB0eXBpY2FsbHkgY2xlYXJlZCBpbiB0aGUgT1MgaWRsZSBsb29wLiAgR2F0aW5nIGJ5IHRoZSBydW4gbGF0Y2ggZmlsdGVycyBvdXQgdGhlIGlkbGUgbG9vcC4KKworI0dyb3VwIDE0NyBwbV9sc3UxLCBMU1UgTE1RIFNSUSBldmVudHMKK2V2ZW50OjBYMDkzMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVX0xNUV9GVUxMX0NZQ19HUlAxNDcgOiAoR3JvdXAgMTQ3IHBtX2xzdTEpIFRoZSBMb2FkIE1pc3MgUXVldWUgd2FzIGZ1bGwuCitldmVudDowWDA5MzEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9MTVFfU1JRX0VNUFRZX0NZQ19HUlAxNDcgOiAoR3JvdXAgMTQ3IHBtX2xzdTEpIEN5Y2xlcyB3aGVuIGJvdGggdGhlIExNUSBhbmQgU1JRIGFyZSBlbXB0eSAoTFNVIGlzIGlkbGUpCitldmVudDowWDA5MzIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9MTVFfU1JRX0VNUFRZX0FMTF9DWUNfR1JQMTQ3IDogKEdyb3VwIDE0NyBwbV9sc3UxKSBBTEwgdGhyZWFkcyBsc3UgZW1wdHkgKGxtcSBhbmQgc3JxIGVtcHR5KQorZXZlbnQ6MFgwOTMzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1VfU1JRX0VNUFRZX0NZQ19HUlAxNDcgOiAoR3JvdXAgMTQ3IHBtX2xzdTEpIFRoZSBTdG9yZSBSZXF1ZXN0IFF1ZXVlIGlzIGVtcHR5CitldmVudDowWDA5MzQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQMTQ3IDogKEdyb3VwIDE0NyBwbV9sc3UxKSBOdW1iZXIgb2YgcnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQuCitldmVudDowWDA5MzUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDE0NyA6IChHcm91cCAxNDcgcG1fbHN1MSkgUHJvY2Vzc29yIEN5Y2xlcyBnYXRlZCBieSB0aGUgcnVuIGxhdGNoLiAgT3BlcmF0aW5nIHN5c3RlbXMgdXNlIHRoZSBydW4gbGF0Y2ggdG8gaW5kaWNhdGUgd2hlbiB0aGV5IGFyZSBkb2luZyB1c2VmdWwgd29yay4gIFRoZSBydW4gbGF0Y2ggaXMgdHlwaWNhbGx5IGNsZWFyZWQgaW4gdGhlIE9TIGlkbGUgbG9vcC4gIEdhdGluZyBieSB0aGUgcnVuIGxhdGNoIGZpbHRlcnMgb3V0IHRoZSBpZGxlIGxvb3AuCisKKyNHcm91cCAxNDggcG1fbHN1MiwgTFNVIGV2ZW50cworZXZlbnQ6MFgwOTQwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1VfRlhfRklOX0dSUDE0OCA6IChHcm91cCAxNDggcG1fbHN1MikgTFNVIEZpbmlzaGVkIGEgRlggb3BlcmF0aW9uICAodXAgdG8gMiBwZXIgY3ljbGUpCitldmVudDowWDA5NDEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9OQ1NUX0dSUDE0OCA6IChHcm91cCAxNDggcG1fbHN1MikgTm9uLWNhY2hhYmxlIFN0b3JlcyBzZW50IHRvIG5lc3QKK2V2ZW50OjBYMDk0MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVX0ZJTl9HUlAxNDggOiAoR3JvdXAgMTQ4IHBtX2xzdTIpIExTVSBGaW5pc2hlZCBhbiBpbnN0cnVjdGlvbiAodXAgdG8gMiBwZXIgY3ljbGUpCitldmVudDowWDA5NDMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9GTFVTSF9HUlAxNDggOiAoR3JvdXAgMTQ4IHBtX2xzdTIpIEEgZmx1c2ggd2FzIGluaXRpYXRlZCBieSB0aGUgTG9hZCBTdG9yZSBVbml0LgorZXZlbnQ6MFgwOTQ0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDE0OCA6IChHcm91cCAxNDggcG1fbHN1MikgTnVtYmVyIG9mIHJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkLgorZXZlbnQ6MFgwOTQ1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxNDggOiAoR3JvdXAgMTQ4IHBtX2xzdTIpIFByb2Nlc3NvciBDeWNsZXMgZ2F0ZWQgYnkgdGhlIHJ1biBsYXRjaC4gIE9wZXJhdGluZyBzeXN0ZW1zIHVzZSB0aGUgcnVuIGxhdGNoIHRvIGluZGljYXRlIHdoZW4gdGhleSBhcmUgZG9pbmcgdXNlZnVsIHdvcmsuICBUaGUgcnVuIGxhdGNoIGlzIHR5cGljYWxseSBjbGVhcmVkIGluIHRoZSBPUyBpZGxlIGxvb3AuICBHYXRpbmcgYnkgdGhlIHJ1biBsYXRjaCBmaWx0ZXJzIG91dCB0aGUgaWRsZSBsb29wLgorCisjR3JvdXAgMTQ5IHBtX2xzdV9sbXEsIExTVSBMTVEgRXZlbnRzCitldmVudDowWDA5NTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVTBfTE1RX0xIUl9NRVJHRV9HUlAxNDkgOiAoR3JvdXAgMTQ5IHBtX2xzdV9sbXEpIExTMCAgTG9hZCBNZXJnZWQgd2l0aCBhbm90aGVyIGNhY2hlbGluZSByZXF1ZXN0CitldmVudDowWDA5NTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVTFfTE1RX0xIUl9NRVJHRV9HUlAxNDkgOiAoR3JvdXAgMTQ5IHBtX2xzdV9sbXEpIExTMSBMb2FkIE1lcmdlIHdpdGggYW5vdGhlciBjYWNoZWxpbmUgcmVxdWVzdAorZXZlbnQ6MFgwOTUyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1VfTE1RX1MwX1ZBTElEX0dSUDE0OSA6IChHcm91cCAxNDkgcG1fbHN1X2xtcSkgVGhpcyBzaWduYWwgaXMgYXNzZXJ0ZWQgZXZlcnkgY3ljbGUgdGhhdCB0aGUgTG9hZCBSZXF1ZXN0IFF1ZXVlIHNsb3QgemVybyBpcyB2YWxpZC4gVGhlIFNSUSBpcyAzMiBlbnRyaWVzIGxvbmcgYW5kIGlzIGFsbG9jYXRlZCByb3VuZC1yb2Jpbi4gIEluIFNNVCBtb2RlIHRoZSBMUlEgaXMgc3BsaXQgYmV0d2VlbiB0aGUgdHdvIHRocmVhZHMgKDE2IGVudHJpZXMgZWFjaCkuCitldmVudDowWDA5NTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9MTVFfRlVMTF9DWUNfR1JQMTQ5IDogKEdyb3VwIDE0OSBwbV9sc3VfbG1xKSBUaGUgTG9hZCBNaXNzIFF1ZXVlIHdhcyBmdWxsLgorZXZlbnQ6MFgwOTU0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDE0OSA6IChHcm91cCAxNDkgcG1fbHN1X2xtcSkgTnVtYmVyIG9mIHJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkLgorZXZlbnQ6MFgwOTU1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxNDkgOiAoR3JvdXAgMTQ5IHBtX2xzdV9sbXEpIFByb2Nlc3NvciBDeWNsZXMgZ2F0ZWQgYnkgdGhlIHJ1biBsYXRjaC4gIE9wZXJhdGluZyBzeXN0ZW1zIHVzZSB0aGUgcnVuIGxhdGNoIHRvIGluZGljYXRlIHdoZW4gdGhleSBhcmUgZG9pbmcgdXNlZnVsIHdvcmsuICBUaGUgcnVuIGxhdGNoIGlzIHR5cGljYWxseSBjbGVhcmVkIGluIHRoZSBPUyBpZGxlIGxvb3AuICBHYXRpbmcgYnkgdGhlIHJ1biBsYXRjaCBmaWx0ZXJzIG91dCB0aGUgaWRsZSBsb29wLgorCisjR3JvdXAgMTUwIHBtX2xzdV9zcnExLCBTdG9yZSBSZXF1ZXN0IFF1ZXVlIEluZm8KK2V2ZW50OjBYMDk2MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVX1NSUV9TVEZXRF9HUlAxNTAgOiAoR3JvdXAgMTUwIHBtX2xzdV9zcnExKSBEYXRhIGZyb20gYSBzdG9yZSBpbnN0cnVjdGlvbiB3YXMgZm9yd2FyZGVkIHRvIGEgbG9hZC4gIEEgbG9hZCB0aGF0IG1pc3NlcyBMMSBidXQgYmVjb21lcyBhIHN0b3JlIGZvcndhcmQgaXMgdHJlYXRlZCBhcyBhIGxvYWQgbWlzcyBhbmQgaXQgY2F1c2VzIHRoZSBETDEgbG9hZCBtaXNzIGV2ZW50IHRvIGJlIGNvdW50ZWQuICBJdCBkb2VzIG5vdCBnbyBpbnRvIHRoZSBMTVEuIElmIGEgbG9hZCB0aGF0IGhpdHMgTDEgYnV0IGJlY29tZXMgYSBzdG9yZSBmb3J3YXJkLCB0aGVuIGl0J3Mgbm90IHRyZWF0ZWQgYXMgYSBsb2FkIG1pc3MuIENvbWJpbmVkIFVuaXQgMCArIDEuCitldmVudDowWDA5NjEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVTBfU1JRX1NURldEX0dSUDE1MCA6IChHcm91cCAxNTAgcG1fbHN1X3NycTEpIERhdGEgZnJvbSBhIHN0b3JlIGluc3RydWN0aW9uIHdhcyBmb3J3YXJkZWQgdG8gYSBsb2FkIG9uIHVuaXQgMC4gIEEgbG9hZCB0aGF0IG1pc3NlcyBMMSBidXQgYmVjb21lcyBhIHN0b3JlIGZvcndhcmQgaXMgdHJlYXRlZCBhcyBhIGxvYWQgbWlzcyBhbmQgaXQgY2F1c2VzIHRoZSBETDEgbG9hZCBtaXNzIGV2ZW50IHRvIGJlIGNvdW50ZWQuICBJdCBkb2VzIG5vdCBnbyBpbnRvIHRoZSBMTVEuIElmIGEgbG9hZCB0aGF0IGhpdHMgTDEgYnV0IGJlY29tZXMgYSBzdG9yZSBmb3J3YXJkLCB0aGVuIGl0J3Mgbm90IHRyZWF0ZWQgYXMgYSBsb2FkIG1pc3MuCitldmVudDowWDA5NjIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVTFfU1JRX1NURldEX0dSUDE1MCA6IChHcm91cCAxNTAgcG1fbHN1X3NycTEpIERhdGEgZnJvbSBhIHN0b3JlIGluc3RydWN0aW9uIHdhcyBmb3J3YXJkZWQgdG8gYSBsb2FkIG9uIHVuaXQgMS4gIEEgbG9hZCB0aGF0IG1pc3NlcyBMMSBidXQgYmVjb21lcyBhIHN0b3JlIGZvcndhcmQgaXMgdHJlYXRlZCBhcyBhIGxvYWQgbWlzcyBhbmQgaXQgY2F1c2VzIHRoZSBETDEgbG9hZCBtaXNzIGV2ZW50IHRvIGJlIGNvdW50ZWQuICBJdCBkb2VzIG5vdCBnbyBpbnRvIHRoZSBMTVEuIElmIGEgbG9hZCB0aGF0IGhpdHMgTDEgYnV0IGJlY29tZXMgYSBzdG9yZSBmb3J3YXJkLCB0aGVuIGl0J3Mgbm90IHRyZWF0ZWQgYXMgYSBsb2FkIG1pc3MuCitldmVudDowWDA5NjMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMTUwIDogKEdyb3VwIDE1MCBwbV9sc3Vfc3JxMSkgTnVtYmVyIG9mIFBvd2VyUEMgSW5zdHJ1Y3Rpb25zIHRoYXQgY29tcGxldGVkLgorZXZlbnQ6MFgwOTY0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDE1MCA6IChHcm91cCAxNTAgcG1fbHN1X3NycTEpIE51bWJlciBvZiBydW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZC4KK2V2ZW50OjBYMDk2NSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQMTUwIDogKEdyb3VwIDE1MCBwbV9sc3Vfc3JxMSkgUHJvY2Vzc29yIEN5Y2xlcyBnYXRlZCBieSB0aGUgcnVuIGxhdGNoLiAgT3BlcmF0aW5nIHN5c3RlbXMgdXNlIHRoZSBydW4gbGF0Y2ggdG8gaW5kaWNhdGUgd2hlbiB0aGV5IGFyZSBkb2luZyB1c2VmdWwgd29yay4gIFRoZSBydW4gbGF0Y2ggaXMgdHlwaWNhbGx5IGNsZWFyZWQgaW4gdGhlIE9TIGlkbGUgbG9vcC4gIEdhdGluZyBieSB0aGUgcnVuIGxhdGNoIGZpbHRlcnMgb3V0IHRoZSBpZGxlIGxvb3AuCisKKyNHcm91cCAxNTEgcG1fbHN1X3NycTIsIFN0b3JlIFJlcXVlc3QgUXVldWUgSW5mbworZXZlbnQ6MFgwOTcwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1VfU1JRX1NZTkNfQ1lDX0dSUDE1MSA6IChHcm91cCAxNTEgcG1fbHN1X3NycTIpIEN5Y2xlcyB0aGF0IGEgc3luYyBpbnN0cnVjdGlvbiBpcyBhY3RpdmUgaW4gdGhlIFN0b3JlIFJlcXVlc3QgUXVldWUuCitldmVudDowWDA5NzEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9TUlFfU1lOQ19DT1VOVF9HUlAxNTEgOiAoR3JvdXAgMTUxIHBtX2xzdV9zcnEyKSBTUlEgc3luYyBjb3VudCAoZWRnZSBvZiBQTV9MU1VfU1JRX1NZTkNfQ1lDKQorZXZlbnQ6MFgwOTcyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1VfU1JRX1MwX1ZBTElEX0dSUDE1MSA6IChHcm91cCAxNTEgcG1fbHN1X3NycTIpIFRoaXMgc2lnbmFsIGlzIGFzc2VydGVkIGV2ZXJ5IGN5Y2xlIHRoYXQgdGhlIFN0b3JlIFJlcXVlc3QgUXVldWUgc2xvdCB6ZXJvIGlzIHZhbGlkLiBUaGUgU1JRIGlzIDMyIGVudHJpZXMgbG9uZyBhbmQgaXMgYWxsb2NhdGVkIHJvdW5kLXJvYmluLiAgSW4gU01UIG1vZGUgdGhlIFNSUSBpcyBzcGxpdCBiZXR3ZWVuIHRoZSB0d28gdGhyZWFkcyAoMTYgZW50cmllcyBlYWNoKS4KK2V2ZW50OjBYMDk3MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAxNTEgOiAoR3JvdXAgMTUxIHBtX2xzdV9zcnEyKSBOdW1iZXIgb2YgUG93ZXJQQyBJbnN0cnVjdGlvbnMgdGhhdCBjb21wbGV0ZWQuCitldmVudDowWDA5NzQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQMTUxIDogKEdyb3VwIDE1MSBwbV9sc3Vfc3JxMikgTnVtYmVyIG9mIHJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkLgorZXZlbnQ6MFgwOTc1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxNTEgOiAoR3JvdXAgMTUxIHBtX2xzdV9zcnEyKSBQcm9jZXNzb3IgQ3ljbGVzIGdhdGVkIGJ5IHRoZSBydW4gbGF0Y2guICBPcGVyYXRpbmcgc3lzdGVtcyB1c2UgdGhlIHJ1biBsYXRjaCB0byBpbmRpY2F0ZSB3aGVuIHRoZXkgYXJlIGRvaW5nIHVzZWZ1bCB3b3JrLiAgVGhlIHJ1biBsYXRjaCBpcyB0eXBpY2FsbHkgY2xlYXJlZCBpbiB0aGUgT1MgaWRsZSBsb29wLiAgR2F0aW5nIGJ5IHRoZSBydW4gbGF0Y2ggZmlsdGVycyBvdXQgdGhlIGlkbGUgbG9vcC4KKworI0dyb3VwIDE1MiBwbV9sc3VfczBfdmFsaWQsIExTVSBFdmVudHMKK2V2ZW50OjBYMDk4MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVX1NSUV9TMF9WQUxJRF9HUlAxNTIgOiAoR3JvdXAgMTUyIHBtX2xzdV9zMF92YWxpZCkgVGhpcyBzaWduYWwgaXMgYXNzZXJ0ZWQgZXZlcnkgY3ljbGUgdGhhdCB0aGUgU3RvcmUgUmVxdWVzdCBRdWV1ZSBzbG90IHplcm8gaXMgdmFsaWQuIFRoZSBTUlEgaXMgMzIgZW50cmllcyBsb25nIGFuZCBpcyBhbGxvY2F0ZWQgcm91bmQtcm9iaW4uICBJbiBTTVQgbW9kZSB0aGUgU1JRIGlzIHNwbGl0IGJldHdlZW4gdGhlIHR3byB0aHJlYWRzICgxNiBlbnRyaWVzIGVhY2gpLgorZXZlbnQ6MFgwOTgxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1VfTFJRX1MwX1ZBTElEX0dSUDE1MiA6IChHcm91cCAxNTIgcG1fbHN1X3MwX3ZhbGlkKSBUaGlzIHNpZ25hbCBpcyBhc3NlcnRlZCBldmVyeSBjeWNsZSB0aGF0IHRoZSBMb2FkIFJlcXVlc3QgUXVldWUgc2xvdCB6ZXJvIGlzIHZhbGlkLiBUaGUgU1JRIGlzIDMyIGVudHJpZXMgbG9uZyBhbmQgaXMgYWxsb2NhdGVkIHJvdW5kLXJvYmluLiAgSW4gU01UIG1vZGUgdGhlIExSUSBpcyBzcGxpdCBiZXR3ZWVuIHRoZSB0d28gdGhyZWFkcyAoMTYgZW50cmllcyBlYWNoKS4KK2V2ZW50OjBYMDk4MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVX0xNUV9TMF9WQUxJRF9HUlAxNTIgOiAoR3JvdXAgMTUyIHBtX2xzdV9zMF92YWxpZCkgVGhpcyBzaWduYWwgaXMgYXNzZXJ0ZWQgZXZlcnkgY3ljbGUgdGhhdCB0aGUgTG9hZCBSZXF1ZXN0IFF1ZXVlIHNsb3QgemVybyBpcyB2YWxpZC4gVGhlIFNSUSBpcyAzMiBlbnRyaWVzIGxvbmcgYW5kIGlzIGFsbG9jYXRlZCByb3VuZC1yb2Jpbi4gIEluIFNNVCBtb2RlIHRoZSBMUlEgaXMgc3BsaXQgYmV0d2VlbiB0aGUgdHdvIHRocmVhZHMgKDE2IGVudHJpZXMgZWFjaCkuCitldmVudDowWDA5ODMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMTUyIDogKEdyb3VwIDE1MiBwbV9sc3VfczBfdmFsaWQpIE51bWJlciBvZiBQb3dlclBDIEluc3RydWN0aW9ucyB0aGF0IGNvbXBsZXRlZC4KK2V2ZW50OjBYMDk4NCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlAxNTIgOiAoR3JvdXAgMTUyIHBtX2xzdV9zMF92YWxpZCkgTnVtYmVyIG9mIHJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkLgorZXZlbnQ6MFgwOTg1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxNTIgOiAoR3JvdXAgMTUyIHBtX2xzdV9zMF92YWxpZCkgUHJvY2Vzc29yIEN5Y2xlcyBnYXRlZCBieSB0aGUgcnVuIGxhdGNoLiAgT3BlcmF0aW5nIHN5c3RlbXMgdXNlIHRoZSBydW4gbGF0Y2ggdG8gaW5kaWNhdGUgd2hlbiB0aGV5IGFyZSBkb2luZyB1c2VmdWwgd29yay4gIFRoZSBydW4gbGF0Y2ggaXMgdHlwaWNhbGx5IGNsZWFyZWQgaW4gdGhlIE9TIGlkbGUgbG9vcC4gIEdhdGluZyBieSB0aGUgcnVuIGxhdGNoIGZpbHRlcnMgb3V0IHRoZSBpZGxlIGxvb3AuCisKKyNHcm91cCAxNTMgcG1fbHN1X3MwX2FsbG9jLCBMU1UgRXZlbnRzCitldmVudDowWDA5OTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9MTVFfUzBfQUxMT0NfR1JQMTUzIDogKEdyb3VwIDE1MyBwbV9sc3VfczBfYWxsb2MpIFNsb3QgMCBvZiBMTVEgdmFsaWQKK2V2ZW50OjBYMDk5MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVX0xSUV9TMF9BTExPQ19HUlAxNTMgOiAoR3JvdXAgMTUzIHBtX2xzdV9zMF9hbGxvYykgU2xvdCAwIG9mIExSUSB2YWxpZAorZXZlbnQ6MFgwOTkyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1VfU1JRX1MwX0FMTE9DX0dSUDE1MyA6IChHcm91cCAxNTMgcG1fbHN1X3MwX2FsbG9jKSBTbG90IDAgb2YgU1JRIHZhbGlkCitldmVudDowWDA5OTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMTUzIDogKEdyb3VwIDE1MyBwbV9sc3VfczBfYWxsb2MpIE51bWJlciBvZiBQb3dlclBDIEluc3RydWN0aW9ucyB0aGF0IGNvbXBsZXRlZC4KK2V2ZW50OjBYMDk5NCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlAxNTMgOiAoR3JvdXAgMTUzIHBtX2xzdV9zMF9hbGxvYykgTnVtYmVyIG9mIHJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkLgorZXZlbnQ6MFgwOTk1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxNTMgOiAoR3JvdXAgMTUzIHBtX2xzdV9zMF9hbGxvYykgUHJvY2Vzc29yIEN5Y2xlcyBnYXRlZCBieSB0aGUgcnVuIGxhdGNoLiAgT3BlcmF0aW5nIHN5c3RlbXMgdXNlIHRoZSBydW4gbGF0Y2ggdG8gaW5kaWNhdGUgd2hlbiB0aGV5IGFyZSBkb2luZyB1c2VmdWwgd29yay4gIFRoZSBydW4gbGF0Y2ggaXMgdHlwaWNhbGx5IGNsZWFyZWQgaW4gdGhlIE9TIGlkbGUgbG9vcC4gIEdhdGluZyBieSB0aGUgcnVuIGxhdGNoIGZpbHRlcnMgb3V0IHRoZSBpZGxlIGxvb3AuCisKKyNHcm91cCAxNTQgcG1fbDFfcHJlZiwgTDEgcHJlZiBFdmVudHMKK2V2ZW50OjBYMDlBMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDFfUFJFRl9HUlAxNTQgOiAoR3JvdXAgMTU0IHBtX2wxX3ByZWYpIEEgcmVxdWVzdCB0byBwcmVmZXRjaCBkYXRhIGludG8gdGhlIEwxIHdhcyBtYWRlCitldmVudDowWDA5QTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVTBfTDFfUFJFRl9HUlAxNTQgOiAoR3JvdXAgMTU0IHBtX2wxX3ByZWYpICBMUzAgTDEgY2FjaGUgZGF0YSBwcmVmZXRjaGVzCitldmVudDowWDA5QTIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVTFfTDFfUFJFRl9HUlAxNTQgOiAoR3JvdXAgMTU0IHBtX2wxX3ByZWYpICBMUzEgTDEgY2FjaGUgZGF0YSBwcmVmZXRjaGVzCitldmVudDowWDA5QTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMTU0IDogKEdyb3VwIDE1NCBwbV9sMV9wcmVmKSBOdW1iZXIgb2YgUG93ZXJQQyBJbnN0cnVjdGlvbnMgdGhhdCBjb21wbGV0ZWQuCitldmVudDowWDA5QTQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQMTU0IDogKEdyb3VwIDE1NCBwbV9sMV9wcmVmKSBOdW1iZXIgb2YgcnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQuCitldmVudDowWDA5QTUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDE1NCA6IChHcm91cCAxNTQgcG1fbDFfcHJlZikgUHJvY2Vzc29yIEN5Y2xlcyBnYXRlZCBieSB0aGUgcnVuIGxhdGNoLiAgT3BlcmF0aW5nIHN5c3RlbXMgdXNlIHRoZSBydW4gbGF0Y2ggdG8gaW5kaWNhdGUgd2hlbiB0aGV5IGFyZSBkb2luZyB1c2VmdWwgd29yay4gIFRoZSBydW4gbGF0Y2ggaXMgdHlwaWNhbGx5IGNsZWFyZWQgaW4gdGhlIE9TIGlkbGUgbG9vcC4gIEdhdGluZyBieSB0aGUgcnVuIGxhdGNoIGZpbHRlcnMgb3V0IHRoZSBpZGxlIGxvb3AuCisKKyNHcm91cCAxNTUgcG1fbDJfZ3Vlc3NfMSwgTDJfR3Vlc3NfZXZlbnRzCitldmVudDowWDA5QjAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wyX0xPQ19HVUVTU19DT1JSRUNUX0dSUDE1NSA6IChHcm91cCAxNTUgcG1fbDJfZ3Vlc3NfMSkgTDIgZ3Vlc3MgbG9jIGFuZCBndWVzcyB3YXMgY29ycmVjdCAoaWUgZGF0YSBsb2NhbCkKK2V2ZW50OjBYMDlCMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDJfTE9DX0dVRVNTX1dST05HX0dSUDE1NSA6IChHcm91cCAxNTUgcG1fbDJfZ3Vlc3NfMSkgTDIgZ3Vlc3MgbG9jIGFuZCBndWVzcyB3YXMgbm90IGNvcnJlY3QgKGllIGRhdGEgcmVtb3RlKQorZXZlbnQ6MFgwOUIyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDE1NSA6IChHcm91cCAxNTUgcG1fbDJfZ3Vlc3NfMSkgUHJvY2Vzc29yIEN5Y2xlcworZXZlbnQ6MFgwOUIzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDE1NSA6IChHcm91cCAxNTUgcG1fbDJfZ3Vlc3NfMSkgTnVtYmVyIG9mIFBvd2VyUEMgSW5zdHJ1Y3Rpb25zIHRoYXQgY29tcGxldGVkLgorZXZlbnQ6MFgwOUI0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDE1NSA6IChHcm91cCAxNTUgcG1fbDJfZ3Vlc3NfMSkgTnVtYmVyIG9mIHJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkLgorZXZlbnQ6MFgwOUI1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxNTUgOiAoR3JvdXAgMTU1IHBtX2wyX2d1ZXNzXzEpIFByb2Nlc3NvciBDeWNsZXMgZ2F0ZWQgYnkgdGhlIHJ1biBsYXRjaC4gIE9wZXJhdGluZyBzeXN0ZW1zIHVzZSB0aGUgcnVuIGxhdGNoIHRvIGluZGljYXRlIHdoZW4gdGhleSBhcmUgZG9pbmcgdXNlZnVsIHdvcmsuICBUaGUgcnVuIGxhdGNoIGlzIHR5cGljYWxseSBjbGVhcmVkIGluIHRoZSBPUyBpZGxlIGxvb3AuICBHYXRpbmcgYnkgdGhlIHJ1biBsYXRjaCBmaWx0ZXJzIG91dCB0aGUgaWRsZSBsb29wLgorCisjR3JvdXAgMTU2IHBtX2wyX2d1ZXNzXzIsIEwyX0d1ZXNzX2V2ZW50cworZXZlbnQ6MFgwOUMwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMl9HTE9CX0dVRVNTX0NPUlJFQ1RfR1JQMTU2IDogKEdyb3VwIDE1NiBwbV9sMl9ndWVzc18yKSBMMiBndWVzcyBnbGIgYW5kIGd1ZXNzIHdhcyBjb3JyZWN0IChpZSBkYXRhIHJlbW90ZSkKK2V2ZW50OjBYMDlDMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDJfR0xPQl9HVUVTU19XUk9OR19HUlAxNTYgOiAoR3JvdXAgMTU2IHBtX2wyX2d1ZXNzXzIpIEwyIGd1ZXNzIGdsYiBhbmQgZ3Vlc3Mgd2FzIG5vdCBjb3JyZWN0IChpZSBkYXRhIGxvY2FsKQorZXZlbnQ6MFgwOUMyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDE1NiA6IChHcm91cCAxNTYgcG1fbDJfZ3Vlc3NfMikgUHJvY2Vzc29yIEN5Y2xlcworZXZlbnQ6MFgwOUMzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDE1NiA6IChHcm91cCAxNTYgcG1fbDJfZ3Vlc3NfMikgTnVtYmVyIG9mIFBvd2VyUEMgSW5zdHJ1Y3Rpb25zIHRoYXQgY29tcGxldGVkLgorZXZlbnQ6MFgwOUM0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDE1NiA6IChHcm91cCAxNTYgcG1fbDJfZ3Vlc3NfMikgTnVtYmVyIG9mIHJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkLgorZXZlbnQ6MFgwOUM1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxNTYgOiAoR3JvdXAgMTU2IHBtX2wyX2d1ZXNzXzIpIFByb2Nlc3NvciBDeWNsZXMgZ2F0ZWQgYnkgdGhlIHJ1biBsYXRjaC4gIE9wZXJhdGluZyBzeXN0ZW1zIHVzZSB0aGUgcnVuIGxhdGNoIHRvIGluZGljYXRlIHdoZW4gdGhleSBhcmUgZG9pbmcgdXNlZnVsIHdvcmsuICBUaGUgcnVuIGxhdGNoIGlzIHR5cGljYWxseSBjbGVhcmVkIGluIHRoZSBPUyBpZGxlIGxvb3AuICBHYXRpbmcgYnkgdGhlIHJ1biBsYXRjaCBmaWx0ZXJzIG91dCB0aGUgaWRsZSBsb29wLgorCisjR3JvdXAgMTU3IHBtX21pc2MxLCBNaXNjIGV2ZW50cworZXZlbnQ6MFgwOUQwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JTlNUX0lNQ19NQVRDSF9DTVBMX0dSUDE1NyA6IChHcm91cCAxNTcgcG1fbWlzYzEpIE51bWJlciBvZiBpbnN0cnVjdGlvbnMgcmVzdWx0aW5nIGZyb20gdGhlIG1hcmtlZCBpbnN0cnVjdGlvbnMgZXhwYW5zaW9uIHRoYXQgY29tcGxldGVkLgorZXZlbnQ6MFgwOUQxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JTlNUX0ZST01fTDFfR1JQMTU3IDogKEdyb3VwIDE1NyBwbV9taXNjMSkgQW4gaW5zdHJ1Y3Rpb24gZmV0Y2ggZ3JvdXAgd2FzIGZldGNoZWQgZnJvbSBMMS4gRmV0Y2ggR3JvdXBzIGNhbiBjb250YWluIHVwIHRvIDggaW5zdHJ1Y3Rpb25zCitldmVudDowWDA5RDIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lOU1RfSU1DX01BVENIX0RJU1BfR1JQMTU3IDogKEdyb3VwIDE1NyBwbV9taXNjMSkgSU1DIE1hdGNoZXMgZGlzcGF0Y2hlZAorZXZlbnQ6MFgwOUQzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDE1NyA6IChHcm91cCAxNTcgcG1fbWlzYzEpIE51bWJlciBvZiBQb3dlclBDIEluc3RydWN0aW9ucyB0aGF0IGNvbXBsZXRlZC4KK2V2ZW50OjBYMDlENCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlAxNTcgOiAoR3JvdXAgMTU3IHBtX21pc2MxKSBOdW1iZXIgb2YgcnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQuCitldmVudDowWDA5RDUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDE1NyA6IChHcm91cCAxNTcgcG1fbWlzYzEpIFByb2Nlc3NvciBDeWNsZXMgZ2F0ZWQgYnkgdGhlIHJ1biBsYXRjaC4gIE9wZXJhdGluZyBzeXN0ZW1zIHVzZSB0aGUgcnVuIGxhdGNoIHRvIGluZGljYXRlIHdoZW4gdGhleSBhcmUgZG9pbmcgdXNlZnVsIHdvcmsuICBUaGUgcnVuIGxhdGNoIGlzIHR5cGljYWxseSBjbGVhcmVkIGluIHRoZSBPUyBpZGxlIGxvb3AuICBHYXRpbmcgYnkgdGhlIHJ1biBsYXRjaCBmaWx0ZXJzIG91dCB0aGUgaWRsZSBsb29wLgorCisjR3JvdXAgMTU4IHBtX21pc2MyLCBNaXNjIGV2ZW50cworZXZlbnQ6MFgwOUUwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9FRV9PRkZfRVhUX0lOVF9HUlAxNTggOiAoR3JvdXAgMTU4IHBtX21pc2MyKSBDeWNsZXMgd2hlbiBhbiBpbnRlcnJ1cHQgZHVlIHRvIGFuIGV4dGVybmFsIGV4Y2VwdGlvbiBpcyBwZW5kaW5nIGJ1dCBleHRlcm5hbCBleGNlcHRpb25zIHdlcmUgbWFza2VkLgorZXZlbnQ6MFgwOUUxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9FWFRfSU5UX0dSUDE1OCA6IChHcm91cCAxNTggcG1fbWlzYzIpIEFuIGludGVycnVwdCBkdWUgdG8gYW4gZXh0ZXJuYWwgZXhjZXB0aW9uIG9jY3VycmVkCitldmVudDowWDA5RTIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1RCX0JJVF9UUkFOU19HUlAxNTggOiAoR3JvdXAgMTU4IHBtX21pc2MyKSBXaGVuIHRoZSBzZWxlY3RlZCB0aW1lIGJhc2UgYml0IChhcyBzcGVjaWZpZWQgaW4gTU1DUjBbVEJTRUxdKXRyYW5zaXRpb25zIGZyb20gMCB0byAxCitldmVudDowWDA5RTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQMTU4IDogKEdyb3VwIDE1OCBwbV9taXNjMikgUHJvY2Vzc29yIEN5Y2xlcworZXZlbnQ6MFgwOUU0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDE1OCA6IChHcm91cCAxNTggcG1fbWlzYzIpIE51bWJlciBvZiBydW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZC4KK2V2ZW50OjBYMDlFNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQMTU4IDogKEdyb3VwIDE1OCBwbV9taXNjMikgUHJvY2Vzc29yIEN5Y2xlcyBnYXRlZCBieSB0aGUgcnVuIGxhdGNoLiAgT3BlcmF0aW5nIHN5c3RlbXMgdXNlIHRoZSBydW4gbGF0Y2ggdG8gaW5kaWNhdGUgd2hlbiB0aGV5IGFyZSBkb2luZyB1c2VmdWwgd29yay4gIFRoZSBydW4gbGF0Y2ggaXMgdHlwaWNhbGx5IGNsZWFyZWQgaW4gdGhlIE9TIGlkbGUgbG9vcC4gIEdhdGluZyBieSB0aGUgcnVuIGxhdGNoIGZpbHRlcnMgb3V0IHRoZSBpZGxlIGxvb3AuCisKKyNHcm91cCAxNTkgcG1fbWlzYzMsIE1pc2MgZXZlbnRzCitldmVudDowWDA5RjAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNXzFQTFVTX1BQQ19DTVBMX0dSUDE1OSA6IChHcm91cCAxNTkgcG1fbWlzYzMpIEEgZ3JvdXAgY29udGFpbmluZyBhdCBsZWFzdCBvbmUgUFBDIGluc3RydWN0aW9uIGNvbXBsZXRlZC4gRm9yIG1pY3JvY29kZWQgaW5zdHJ1Y3Rpb25zIHRoYXQgc3BhbiBtdWx0aXBsZSBncm91cHMsIHRoaXMgd2lsbCBvbmx5IG9jY3VyIG9uY2UuCitldmVudDowWDA5RjEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0hWX0NZQ19HUlAxNTkgOiAoR3JvdXAgMTU5IHBtX21pc2MzKSBDeWNsZXMgd2hlbiB0aGUgcHJvY2Vzc29yIGlzIGV4ZWN1dGluZyBpbiBIeXBlcnZpc29yIChNU1JbSFZdID0gMSBhbmQgTVNSW1BSXT0wKQorZXZlbnQ6MFgwOUYyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JTlNUX0RJU1BfR1JQMTU5IDogKEdyb3VwIDE1OSBwbV9taXNjMykgTnVtYmVyIG9mIFBvd2VyUEMgaW5zdHJ1Y3Rpb25zIHN1Y2Nlc3NmdWxseSBkaXNwYXRjaGVkLgorZXZlbnQ6MFgwOUYzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV8xUExVU19QUENfRElTUF9HUlAxNTkgOiAoR3JvdXAgMTU5IHBtX21pc2MzKSBBIGdyb3VwIGNvbnRhaW5pbmcgYXQgbGVhc3Qgb25lIFBQQyBpbnN0cnVjdGlvbiB3YXMgZGlzcGF0Y2hlZC4gRm9yIG1pY3JvY29kZWQgaW5zdHJ1Y3Rpb25zIHRoYXQgc3BhbiBtdWx0aXBsZSBncm91cHMsIHRoaXMgd2lsbCBvbmx5IG9jY3VyIG9uY2UuCitldmVudDowWDA5RjQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQMTU5IDogKEdyb3VwIDE1OSBwbV9taXNjMykgTnVtYmVyIG9mIHJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkLgorZXZlbnQ6MFgwOUY1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxNTkgOiAoR3JvdXAgMTU5IHBtX21pc2MzKSBQcm9jZXNzb3IgQ3ljbGVzIGdhdGVkIGJ5IHRoZSBydW4gbGF0Y2guICBPcGVyYXRpbmcgc3lzdGVtcyB1c2UgdGhlIHJ1biBsYXRjaCB0byBpbmRpY2F0ZSB3aGVuIHRoZXkgYXJlIGRvaW5nIHVzZWZ1bCB3b3JrLiAgVGhlIHJ1biBsYXRjaCBpcyB0eXBpY2FsbHkgY2xlYXJlZCBpbiB0aGUgT1MgaWRsZSBsb29wLiAgR2F0aW5nIGJ5IHRoZSBydW4gbGF0Y2ggZmlsdGVycyBvdXQgdGhlIGlkbGUgbG9vcC4KKworI0dyb3VwIDE2MCBwbV9taXNjNCwgTWlzYyBldmVudHMKK2V2ZW50OjBYMEEwMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fR1JQX0lDX01JU1NfTk9OU1BFQ19HUlAxNjAgOiAoR3JvdXAgMTYwIHBtX21pc2M0KSBOdW1iZXIgb2YgZ3JvdXBzLCBjb3VudGVkIGF0IGNvbXBsZXRpb24sIHRoYXQgaGF2ZSBlbmNvdW50ZXJlZCBhbiBpbnN0cnVjdGlvbiBjYWNoZSBtaXNzLgorZXZlbnQ6MFgwQTAxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9HQ1RfTk9TTE9UX0lDX01JU1NfR1JQMTYwIDogKEdyb3VwIDE2MCBwbV9taXNjNCkgQ3ljbGVzIHdoZW4gdGhlIEdsb2JhbCBDb21wbGV0aW9uIFRhYmxlIGhhcyBubyBzbG90cyBmcm9tIHRoaXMgdGhyZWFkIGJlY2F1c2Ugb2YgYW4gSW5zdHJ1Y3Rpb24gQ2FjaGUgbWlzcy4KK2V2ZW50OjBYMEEwMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlAxNjAgOiAoR3JvdXAgMTYwIHBtX21pc2M0KSBQcm9jZXNzb3IgQ3ljbGVzCitldmVudDowWDBBMDMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0dDVF9OT1NMT1RfQlJfTVBSRURfSUNfTUlTU19HUlAxNjAgOiAoR3JvdXAgMTYwIHBtX21pc2M0KSBObyBzbG90IGluIEdDVCBjYXVzZWQgYnkgYnJhbmNoIG1pc3ByZWRpY3Qgb3IgSSBjYWNoZSBtaXNzCitldmVudDowWDBBMDQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQMTYwIDogKEdyb3VwIDE2MCBwbV9taXNjNCkgTnVtYmVyIG9mIHJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkLgorZXZlbnQ6MFgwQTA1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxNjAgOiAoR3JvdXAgMTYwIHBtX21pc2M0KSBQcm9jZXNzb3IgQ3ljbGVzIGdhdGVkIGJ5IHRoZSBydW4gbGF0Y2guICBPcGVyYXRpbmcgc3lzdGVtcyB1c2UgdGhlIHJ1biBsYXRjaCB0byBpbmRpY2F0ZSB3aGVuIHRoZXkgYXJlIGRvaW5nIHVzZWZ1bCB3b3JrLiAgVGhlIHJ1biBsYXRjaCBpcyB0eXBpY2FsbHkgY2xlYXJlZCBpbiB0aGUgT1MgaWRsZSBsb29wLiAgR2F0aW5nIGJ5IHRoZSBydW4gbGF0Y2ggZmlsdGVycyBvdXQgdGhlIGlkbGUgbG9vcC4KKworI0dyb3VwIDE2MSBwbV9taXNjNSwgTWlzYyBldmVudHMKK2V2ZW50OjBYMEExMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fR1JQX0JSX01QUkVEX05PTlNQRUNfR1JQMTYxIDogKEdyb3VwIDE2MSBwbV9taXNjNSkgR3JvdXAgZXhwZXJpZW5jZWQgbm9uLXNwZWN1bGF0aXZlIGJyYW5jaCByZWRpcmVjdAorZXZlbnQ6MFgwQTExIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9CUl9NUFJFRF9DUl9UQV9HUlAxNjEgOiAoR3JvdXAgMTYxIHBtX21pc2M1KSBCcmFuY2ggbWlzcHJlZGljdCAtIHRha2VuL25vdCB0YWtlbiBhbmQgdGFyZ2V0CitldmVudDowWDBBMTIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0JSX01QUkVEX0NDQUNIRV9HUlAxNjEgOiAoR3JvdXAgMTYxIHBtX21pc2M1KSBBIGJyYW5jaCBpbnN0cnVjdGlvbiB0YXJnZXQgd2FzIGluY29ycmVjdGx5IHByZWRpY3RlZCBieSB0aGUgY2NvdW50IGNhY2hlLiBUaGlzIHdpbGwgcmVzdWx0IGluIGEgYnJhbmNoIHJlZGlyZWN0IGZsdXNoIGlmIG5vdCBvdmVyZmlkZGVuIGJ5IGEgZmx1c2ggb2YgYW4gb2xkZXIgaW5zdHJ1Y3Rpb24uCitldmVudDowWDBBMTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0JSX01QUkVEX0dSUDE2MSA6IChHcm91cCAxNjEgcG1fbWlzYzUpIEEgYnJhbmNoIGluc3RydWN0aW9uIHdhcyBpbmNvcnJlY3RseSBwcmVkaWN0ZWQuIFRoaXMgY291bGQgaGF2ZSBiZWVuIGEgdGFyZ2V0IHByZWRpY3Rpb24sIGEgY29uZGl0aW9uIHByZWRpY3Rpb24sIG9yIGJvdGgKK2V2ZW50OjBYMEExNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlAxNjEgOiAoR3JvdXAgMTYxIHBtX21pc2M1KSBOdW1iZXIgb2YgcnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQuCitldmVudDowWDBBMTUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDE2MSA6IChHcm91cCAxNjEgcG1fbWlzYzUpIFByb2Nlc3NvciBDeWNsZXMgZ2F0ZWQgYnkgdGhlIHJ1biBsYXRjaC4gIE9wZXJhdGluZyBzeXN0ZW1zIHVzZSB0aGUgcnVuIGxhdGNoIHRvIGluZGljYXRlIHdoZW4gdGhleSBhcmUgZG9pbmcgdXNlZnVsIHdvcmsuICBUaGUgcnVuIGxhdGNoIGlzIHR5cGljYWxseSBjbGVhcmVkIGluIHRoZSBPUyBpZGxlIGxvb3AuICBHYXRpbmcgYnkgdGhlIHJ1biBsYXRjaCBmaWx0ZXJzIG91dCB0aGUgaWRsZSBsb29wLgorCisjR3JvdXAgMTYyIHBtX21pc2M2LCBNaXNjIGV2ZW50cworZXZlbnQ6MFgwQTIwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMV9ERU1BTkRfV1JJVEVfR1JQMTYyIDogKEdyb3VwIDE2MiBwbV9taXNjNikgSW5zdHJ1Y3Rpb24gRGVtYW5kIHNlY3RvcnMgd3JpaXR0ZW50IGludG8gSUwxCitldmVudDowWDBBMjEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lDX1BSRUZfV1JJVEVfR1JQMTYyIDogKEdyb3VwIDE2MiBwbV9taXNjNikgTnVtYmVyIG9mIEluc3RydWN0aW9uIENhY2hlIGVudHJpZXMgd3JpdHRlbiBiZWNhdXNlIG9mIHByZWZldGNoLiBQcmVmZXRjaCBlbnRyaWVzIGFyZSBtYXJrZWQgbGVhc3QgcmVjZW50bHkgdXNlZCBhbmQgYXJlIGNhbmRpZGF0ZXMgZm9yIGV2aWN0aW9uIGlmIHRoZXkgYXJlIG5vdCBuZWVkZWQgdG8gc2F0aWZ5IGEgZGVtYW5kIGZldGNoLgorZXZlbnQ6MFgwQTIyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JQ19XUklURV9BTExfR1JQMTYyIDogKEdyb3VwIDE2MiBwbV9taXNjNikgSWNhY2hlIHNlY3RvcnMgd3JpdHRlbiwgcHJlZmV0Y2ggKyBkZW1hbmQKK2V2ZW50OjBYMEEyMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAxNjIgOiAoR3JvdXAgMTYyIHBtX21pc2M2KSBOdW1iZXIgb2YgUG93ZXJQQyBJbnN0cnVjdGlvbnMgdGhhdCBjb21wbGV0ZWQuCitldmVudDowWDBBMjQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQMTYyIDogKEdyb3VwIDE2MiBwbV9taXNjNikgTnVtYmVyIG9mIHJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkLgorZXZlbnQ6MFgwQTI1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxNjIgOiAoR3JvdXAgMTYyIHBtX21pc2M2KSBQcm9jZXNzb3IgQ3ljbGVzIGdhdGVkIGJ5IHRoZSBydW4gbGF0Y2guICBPcGVyYXRpbmcgc3lzdGVtcyB1c2UgdGhlIHJ1biBsYXRjaCB0byBpbmRpY2F0ZSB3aGVuIHRoZXkgYXJlIGRvaW5nIHVzZWZ1bCB3b3JrLiAgVGhlIHJ1biBsYXRjaCBpcyB0eXBpY2FsbHkgY2xlYXJlZCBpbiB0aGUgT1MgaWRsZSBsb29wLiAgR2F0aW5nIGJ5IHRoZSBydW4gbGF0Y2ggZmlsdGVycyBvdXQgdGhlIGlkbGUgbG9vcC4KKworI0dyb3VwIDE2MyBwbV9taXNjNywgTWlzYyBldmVudHMKK2V2ZW50OjBYMEEzMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fVEhSRVNIX1RJTUVPX0dSUDE2MyA6IChHcm91cCAxNjMgcG1fbWlzYzcpIFRoZSB0aHJlc2hvbGQgdGltZXIgZXhwaXJlZAorZXZlbnQ6MFgwQTMxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9IVl9DWUNfR1JQMTYzIDogKEdyb3VwIDE2MyBwbV9taXNjNykgQ3ljbGVzIHdoZW4gdGhlIHByb2Nlc3NvciBpcyBleGVjdXRpbmcgaW4gSHlwZXJ2aXNvciAoTVNSW0hWXSA9IDEgYW5kIE1TUltQUl09MCkKK2V2ZW50OjBYMEEzMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlAxNjMgOiAoR3JvdXAgMTYzIHBtX21pc2M3KSBQcm9jZXNzb3IgQ3ljbGVzCitldmVudDowWDBBMzMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lGVV9GSU5fR1JQMTYzIDogKEdyb3VwIDE2MyBwbV9taXNjNykgVGhlIEluc3RydWN0aW9uIEZldGNoIFVuaXQgZmluaXNoZWQgYW4gaW5zdHJ1Y3Rpb24KK2V2ZW50OjBYMEEzNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlAxNjMgOiAoR3JvdXAgMTYzIHBtX21pc2M3KSBOdW1iZXIgb2YgcnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQuCitldmVudDowWDBBMzUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDE2MyA6IChHcm91cCAxNjMgcG1fbWlzYzcpIFByb2Nlc3NvciBDeWNsZXMgZ2F0ZWQgYnkgdGhlIHJ1biBsYXRjaC4gIE9wZXJhdGluZyBzeXN0ZW1zIHVzZSB0aGUgcnVuIGxhdGNoIHRvIGluZGljYXRlIHdoZW4gdGhleSBhcmUgZG9pbmcgdXNlZnVsIHdvcmsuICBUaGUgcnVuIGxhdGNoIGlzIHR5cGljYWxseSBjbGVhcmVkIGluIHRoZSBPUyBpZGxlIGxvb3AuICBHYXRpbmcgYnkgdGhlIHJ1biBsYXRjaCBmaWx0ZXJzIG91dCB0aGUgaWRsZSBsb29wLgorCisjR3JvdXAgMTY0IHBtX21pc2M4LCBNaXNjIGV2ZW50cworZXZlbnQ6MFgwQTQwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9CUl9NUFJFRF9MU1RBQ0tfR1JQMTY0IDogKEdyb3VwIDE2NCBwbV9taXNjOCkgQnJhbmNoIE1pc3ByZWRpY3QgZHVlIHRvIExpbmsgU3RhY2sKK2V2ZW50OjBYMEE0MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRVhUX0lOVF9HUlAxNjQgOiAoR3JvdXAgMTY0IHBtX21pc2M4KSBBbiBpbnRlcnJ1cHQgZHVlIHRvIGFuIGV4dGVybmFsIGV4Y2VwdGlvbiBvY2N1cnJlZAorZXZlbnQ6MFgwQTQyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMV9EQ0FDSEVfUkVMT0FEX1ZBTElEX0dSUDE2NCA6IChHcm91cCAxNjQgcG1fbWlzYzgpIFRoZSBkYXRhIHNvdXJjZSBpbmZvcm1hdGlvbiBpcyB2YWxpZCx0aGUgZGF0YSBjYWNoZSBoYXMgYmVlbiByZWxvYWRlZC4gIFByaW9yIHRvIFBPV0VSNSsgdGhpcyBpbmNsdWRlZCBkYXRhIGNhY2hlIHJlbG9hZHMgZHVlIHRvIHByZWZldGNoIGFjdGl2aXR5LiAgV2l0aCBQT1dFUjUrIHRoaXMgbm93IG9ubHkgaW5jbHVkZXMgcmVsb2FkcyBkdWUgdG8gZGVtYW5kIGxvYWRzLgorZXZlbnQ6MFgwQTQzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9CUl9NUFJFRF9HUlAxNjQgOiAoR3JvdXAgMTY0IHBtX21pc2M4KSBBIGJyYW5jaCBpbnN0cnVjdGlvbiB3YXMgaW5jb3JyZWN0bHkgcHJlZGljdGVkLiBUaGlzIGNvdWxkIGhhdmUgYmVlbiBhIHRhcmdldCBwcmVkaWN0aW9uLCBhIGNvbmRpdGlvbiBwcmVkaWN0aW9uLCBvciBib3RoCitldmVudDowWDBBNDQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQMTY0IDogKEdyb3VwIDE2NCBwbV9taXNjOCkgTnVtYmVyIG9mIHJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkLgorZXZlbnQ6MFgwQTQ1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxNjQgOiAoR3JvdXAgMTY0IHBtX21pc2M4KSBQcm9jZXNzb3IgQ3ljbGVzIGdhdGVkIGJ5IHRoZSBydW4gbGF0Y2guICBPcGVyYXRpbmcgc3lzdGVtcyB1c2UgdGhlIHJ1biBsYXRjaCB0byBpbmRpY2F0ZSB3aGVuIHRoZXkgYXJlIGRvaW5nIHVzZWZ1bCB3b3JrLiAgVGhlIHJ1biBsYXRjaCBpcyB0eXBpY2FsbHkgY2xlYXJlZCBpbiB0aGUgT1MgaWRsZSBsb29wLiAgR2F0aW5nIGJ5IHRoZSBydW4gbGF0Y2ggZmlsdGVycyBvdXQgdGhlIGlkbGUgbG9vcC4KKworI0dyb3VwIDE2NSBwbV9taXNjOSwgTWlzYyBldmVudHMKK2V2ZW50OjBYMEE1MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRkxVU0hfQlJfTVBSRURfR1JQMTY1IDogKEdyb3VwIDE2NSBwbV9taXNjOSkgQSBmbHVzaCB3YXMgY2F1c2VkIGJ5IGEgYnJhbmNoIG1pc3ByZWRpY3QuCitldmVudDowWDBBNTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZMVVNIX1BBUlRJQUxfR1JQMTY1IDogKEdyb3VwIDE2NSBwbV9taXNjOSkgUGFydGlhbCBmbHVzaAorZXZlbnQ6MFgwQTUyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1VfU0VUX01QUkVEX0dSUDE2NSA6IChHcm91cCAxNjUgcG1fbWlzYzkpIExpbmUgYWxyZWFkeSBpbiBjYWNoZSBhdCByZWxvYWQgdGltZQorZXZlbnQ6MFgwQTUzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9CUl9NUFJFRF9HUlAxNjUgOiAoR3JvdXAgMTY1IHBtX21pc2M5KSBBIGJyYW5jaCBpbnN0cnVjdGlvbiB3YXMgaW5jb3JyZWN0bHkgcHJlZGljdGVkLiBUaGlzIGNvdWxkIGhhdmUgYmVlbiBhIHRhcmdldCBwcmVkaWN0aW9uLCBhIGNvbmRpdGlvbiBwcmVkaWN0aW9uLCBvciBib3RoCitldmVudDowWDBBNTQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQMTY1IDogKEdyb3VwIDE2NSBwbV9taXNjOSkgTnVtYmVyIG9mIHJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkLgorZXZlbnQ6MFgwQTU1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxNjUgOiAoR3JvdXAgMTY1IHBtX21pc2M5KSBQcm9jZXNzb3IgQ3ljbGVzIGdhdGVkIGJ5IHRoZSBydW4gbGF0Y2guICBPcGVyYXRpbmcgc3lzdGVtcyB1c2UgdGhlIHJ1biBsYXRjaCB0byBpbmRpY2F0ZSB3aGVuIHRoZXkgYXJlIGRvaW5nIHVzZWZ1bCB3b3JrLiAgVGhlIHJ1biBsYXRjaCBpcyB0eXBpY2FsbHkgY2xlYXJlZCBpbiB0aGUgT1MgaWRsZSBsb29wLiAgR2F0aW5nIGJ5IHRoZSBydW4gbGF0Y2ggZmlsdGVycyBvdXQgdGhlIGlkbGUgbG9vcC4KKworI0dyb3VwIDE2NiBwbV9taXNjMTAsIE1pc2MgZXZlbnRzCitldmVudDowWDBBNjAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9TUlFfRlVMTF9DWUNfR1JQMTY2IDogKEdyb3VwIDE2NiBwbV9taXNjMTApIEN5Y2xlcyB0aGUgU3RvcmUgUmVxdWVzdCBRdWV1ZSBpcyBmdWxsLgorZXZlbnQ6MFgwQTYxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1VfRENfUFJFRl9TVFJFQU1fQUxMT0NfR1JQMTY2IDogKEdyb3VwIDE2NiBwbV9taXNjMTApIEQgY2FjaGUgbmV3IHByZWZldGNoIHN0cmVhbSBhbGxvY2F0ZWQKK2V2ZW50OjBYMEE2MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDFfUFJFRl9HUlAxNjYgOiAoR3JvdXAgMTY2IHBtX21pc2MxMCkgQSByZXF1ZXN0IHRvIHByZWZldGNoIGRhdGEgaW50byB0aGUgTDEgd2FzIG1hZGUKK2V2ZW50OjBYMEE2MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSUJVRl9GVUxMX0NZQ19HUlAxNjYgOiAoR3JvdXAgMTY2IHBtX21pc2MxMCkgQ3ljbGVzIHdpdGggdGhlIEluc3RydWN0aW9uIEJ1ZmZlciB3YXMgZnVsbC4gIFRoZSBJbnN0cnVjdGlvbiBCdWZmZXIgaXMgYSBjaXJjdWxhciBxdWV1ZSBvZiA2NCBpbnN0cnVjdGlvbnMgcGVyIHRocmVhZCwgb3JnYW5pemVkIGFzIDE2IGdyb3VwcyBvZiA0IGluc3RydWN0aW9ucy4KK2V2ZW50OjBYMEE2NCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlAxNjYgOiAoR3JvdXAgMTY2IHBtX21pc2MxMCkgTnVtYmVyIG9mIHJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkLgorZXZlbnQ6MFgwQTY1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxNjYgOiAoR3JvdXAgMTY2IHBtX21pc2MxMCkgUHJvY2Vzc29yIEN5Y2xlcyBnYXRlZCBieSB0aGUgcnVuIGxhdGNoLiAgT3BlcmF0aW5nIHN5c3RlbXMgdXNlIHRoZSBydW4gbGF0Y2ggdG8gaW5kaWNhdGUgd2hlbiB0aGV5IGFyZSBkb2luZyB1c2VmdWwgd29yay4gIFRoZSBydW4gbGF0Y2ggaXMgdHlwaWNhbGx5IGNsZWFyZWQgaW4gdGhlIE9TIGlkbGUgbG9vcC4gIEdhdGluZyBieSB0aGUgcnVuIGxhdGNoIGZpbHRlcnMgb3V0IHRoZSBpZGxlIGxvb3AuCisKKyNHcm91cCAxNjcgcG1fbWlzYzExLCBNaXNjIGV2ZW50cworZXZlbnQ6MFgwQTcwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GTE9QX0dSUDE2NyA6IChHcm91cCAxNjcgcG1fbWlzYzExKSBBIGZsb2F0aW5nIHBvaW50IG9wZXJhdGlvbiBoYXMgY29tcGxldGVkCitldmVudDowWDBBNzEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQMTY3IDogKEdyb3VwIDE2NyBwbV9taXNjMTEpIFByb2Nlc3NvciBDeWNsZXMKK2V2ZW50OjBYMEE3MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fR1JQX0NNUExfR1JQMTY3IDogKEdyb3VwIDE2NyBwbV9taXNjMTEpIEEgZ3JvdXAgY29tcGxldGVkLiBNaWNyb2NvZGVkIGluc3RydWN0aW9ucyB0aGF0IHNwYW4gbXVsdGlwbGUgZ3JvdXBzIHdpbGwgZ2VuZXJhdGUgdGhpcyBldmVudCBvbmNlIHBlciBncm91cC4KK2V2ZW50OjBYMEE3MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAxNjcgOiAoR3JvdXAgMTY3IHBtX21pc2MxMSkgTnVtYmVyIG9mIFBvd2VyUEMgSW5zdHJ1Y3Rpb25zIHRoYXQgY29tcGxldGVkLgorZXZlbnQ6MFgwQTc0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDE2NyA6IChHcm91cCAxNjcgcG1fbWlzYzExKSBOdW1iZXIgb2YgcnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQuCitldmVudDowWDBBNzUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDE2NyA6IChHcm91cCAxNjcgcG1fbWlzYzExKSBQcm9jZXNzb3IgQ3ljbGVzIGdhdGVkIGJ5IHRoZSBydW4gbGF0Y2guICBPcGVyYXRpbmcgc3lzdGVtcyB1c2UgdGhlIHJ1biBsYXRjaCB0byBpbmRpY2F0ZSB3aGVuIHRoZXkgYXJlIGRvaW5nIHVzZWZ1bCB3b3JrLiAgVGhlIHJ1biBsYXRjaCBpcyB0eXBpY2FsbHkgY2xlYXJlZCBpbiB0aGUgT1MgaWRsZSBsb29wLiAgR2F0aW5nIGJ5IHRoZSBydW4gbGF0Y2ggZmlsdGVycyBvdXQgdGhlIGlkbGUgbG9vcC4KKworI0dyb3VwIDE2OCBwbV9taXNjXzEyLCBNaXNjIEV2ZW50cworZXZlbnQ6MFgwQTgwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDE2OCA6IChHcm91cCAxNjggcG1fbWlzY18xMikgTnVtYmVyIG9mIFBvd2VyUEMgSW5zdHJ1Y3Rpb25zIHRoYXQgY29tcGxldGVkLgorZXZlbnQ6MFgwQTgxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9TVF9GSU5fR1JQMTY4IDogKEdyb3VwIDE2OCBwbV9taXNjXzEyKSBTdG9yZSByZXF1ZXN0cyBzZW50IHRvIHRoZSBuZXN0LgorZXZlbnQ6MFgwQTgyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9UQl9CSVRfVFJBTlNfR1JQMTY4IDogKEdyb3VwIDE2OCBwbV9taXNjXzEyKSBXaGVuIHRoZSBzZWxlY3RlZCB0aW1lIGJhc2UgYml0IChhcyBzcGVjaWZpZWQgaW4gTU1DUjBbVEJTRUxdKXRyYW5zaXRpb25zIGZyb20gMCB0byAxCitldmVudDowWDBBODMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZMVVNIX0dSUDE2OCA6IChHcm91cCAxNjggcG1fbWlzY18xMikgRmx1c2hlcyBvY2N1cnJlZCBpbmNsdWRpbmcgTFNVIGFuZCBCcmFuY2ggZmx1c2hlcy4KK2V2ZW50OjBYMEE4NCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlAxNjggOiAoR3JvdXAgMTY4IHBtX21pc2NfMTIpIE51bWJlciBvZiBydW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZC4KK2V2ZW50OjBYMEE4NSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQMTY4IDogKEdyb3VwIDE2OCBwbV9taXNjXzEyKSBQcm9jZXNzb3IgQ3ljbGVzIGdhdGVkIGJ5IHRoZSBydW4gbGF0Y2guICBPcGVyYXRpbmcgc3lzdGVtcyB1c2UgdGhlIHJ1biBsYXRjaCB0byBpbmRpY2F0ZSB3aGVuIHRoZXkgYXJlIGRvaW5nIHVzZWZ1bCB3b3JrLiAgVGhlIHJ1biBsYXRjaCBpcyB0eXBpY2FsbHkgY2xlYXJlZCBpbiB0aGUgT1MgaWRsZSBsb29wLiAgR2F0aW5nIGJ5IHRoZSBydW4gbGF0Y2ggZmlsdGVycyBvdXQgdGhlIGlkbGUgbG9vcC4KKworI0dyb3VwIDE2OSBwbV9taXNjXzEzLCBNaXNjIEV2ZW50cworZXZlbnQ6MFgwQTkwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9HQ1RfTk9TTE9UX0NZQ19HUlAxNjkgOiAoR3JvdXAgMTY5IHBtX21pc2NfMTMpIEN5Y2xlcyB3aGVuIHRoZSBHbG9iYWwgQ29tcGxldGlvbiBUYWJsZSBoYXMgbm8gc2xvdHMgZnJvbSB0aGlzIHRocmVhZC4KK2V2ZW50OjBYMEE5MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fU1RfRklOX0dSUDE2OSA6IChHcm91cCAxNjkgcG1fbWlzY18xMykgU3RvcmUgcmVxdWVzdHMgc2VudCB0byB0aGUgbmVzdC4KK2V2ZW50OjBYMEE5MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRFRMQl9NSVNTX0dSUDE2OSA6IChHcm91cCAxNjkgcG1fbWlzY18xMykgRGF0YSBUTEIgbWlzc2VzLCBhbGwgcGFnZSBzaXplcy4KK2V2ZW50OjBYMEE5MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fQlJfTVBSRURfR1JQMTY5IDogKEdyb3VwIDE2OSBwbV9taXNjXzEzKSBBIGJyYW5jaCBpbnN0cnVjdGlvbiB3YXMgaW5jb3JyZWN0bHkgcHJlZGljdGVkLiBUaGlzIGNvdWxkIGhhdmUgYmVlbiBhIHRhcmdldCBwcmVkaWN0aW9uLCBhIGNvbmRpdGlvbiBwcmVkaWN0aW9uLCBvciBib3RoCitldmVudDowWDBBOTQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQMTY5IDogKEdyb3VwIDE2OSBwbV9taXNjXzEzKSBOdW1iZXIgb2YgcnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQuCitldmVudDowWDBBOTUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDE2OSA6IChHcm91cCAxNjkgcG1fbWlzY18xMykgUHJvY2Vzc29yIEN5Y2xlcyBnYXRlZCBieSB0aGUgcnVuIGxhdGNoLiAgT3BlcmF0aW5nIHN5c3RlbXMgdXNlIHRoZSBydW4gbGF0Y2ggdG8gaW5kaWNhdGUgd2hlbiB0aGV5IGFyZSBkb2luZyB1c2VmdWwgd29yay4gIFRoZSBydW4gbGF0Y2ggaXMgdHlwaWNhbGx5IGNsZWFyZWQgaW4gdGhlIE9TIGlkbGUgbG9vcC4gIEdhdGluZyBieSB0aGUgcnVuIGxhdGNoIGZpbHRlcnMgb3V0IHRoZSBpZGxlIGxvb3AuCisKKyNHcm91cCAxNzAgcG1fbWlzY18xNCwgTWlzYyBFdmVudHMKK2V2ZW50OjBYMEFBMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlAxNzAgOiAoR3JvdXAgMTcwIHBtX21pc2NfMTQpIFByb2Nlc3NvciBDeWNsZXMKK2V2ZW50OjBYMEFBMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlAxNzAgOiAoR3JvdXAgMTcwIHBtX21pc2NfMTQpIFByb2Nlc3NvciBDeWNsZXMKK2V2ZW50OjBYMEFBMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAxNzAgOiAoR3JvdXAgMTcwIHBtX21pc2NfMTQpIE51bWJlciBvZiBQb3dlclBDIEluc3RydWN0aW9ucyB0aGF0IGNvbXBsZXRlZC4KK2V2ZW50OjBYMEFBMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSUZVX0ZJTl9HUlAxNzAgOiAoR3JvdXAgMTcwIHBtX21pc2NfMTQpIFRoZSBJbnN0cnVjdGlvbiBGZXRjaCBVbml0IGZpbmlzaGVkIGFuIGluc3RydWN0aW9uCitldmVudDowWDBBQTQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQMTcwIDogKEdyb3VwIDE3MCBwbV9taXNjXzE0KSBOdW1iZXIgb2YgcnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQuCitldmVudDowWDBBQTUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDE3MCA6IChHcm91cCAxNzAgcG1fbWlzY18xNCkgUHJvY2Vzc29yIEN5Y2xlcyBnYXRlZCBieSB0aGUgcnVuIGxhdGNoLiAgT3BlcmF0aW5nIHN5c3RlbXMgdXNlIHRoZSBydW4gbGF0Y2ggdG8gaW5kaWNhdGUgd2hlbiB0aGV5IGFyZSBkb2luZyB1c2VmdWwgd29yay4gIFRoZSBydW4gbGF0Y2ggaXMgdHlwaWNhbGx5IGNsZWFyZWQgaW4gdGhlIE9TIGlkbGUgbG9vcC4gIEdhdGluZyBieSB0aGUgcnVuIGxhdGNoIGZpbHRlcnMgb3V0IHRoZSBpZGxlIGxvb3AuCisKKyNHcm91cCAxNzEgcG1fbWlzY18xNSwgTWlzYyBFdmVudHMKK2V2ZW50OjBYMEFCMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVX0RDQUNIRV9SRUxPQURfVkFMSURfR1JQMTcxIDogKEdyb3VwIDE3MSBwbV9taXNjXzE1KSBjb3VudCBwZXIgc2VjdG9yIG9mIGxpbmVzIHJlbG9hZGVkIGluIEwxIChkZW1hbmQgKyBwcmVmZXRjaCkKK2V2ZW50OjBYMEFCMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fQ01QTFVfU1RBTExfU1RPUkVfR1JQMTcxIDogKEdyb3VwIDE3MSBwbV9taXNjXzE1KSBDb21wbGV0aW9uIHN0YWxsIGR1ZSB0byBzdG9yZSBpbnN0cnVjdGlvbgorZXZlbnQ6MFgwQUIyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMV9EQ0FDSEVfUkVMT0FEX1ZBTElEX0dSUDE3MSA6IChHcm91cCAxNzEgcG1fbWlzY18xNSkgVGhlIGRhdGEgc291cmNlIGluZm9ybWF0aW9uIGlzIHZhbGlkLHRoZSBkYXRhIGNhY2hlIGhhcyBiZWVuIHJlbG9hZGVkLiAgUHJpb3IgdG8gUE9XRVI1KyB0aGlzIGluY2x1ZGVkIGRhdGEgY2FjaGUgcmVsb2FkcyBkdWUgdG8gcHJlZmV0Y2ggYWN0aXZpdHkuICBXaXRoIFBPV0VSNSsgdGhpcyBub3cgb25seSBpbmNsdWRlcyByZWxvYWRzIGR1ZSB0byBkZW1hbmQgbG9hZHMuCitldmVudDowWDBBQjMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0NNUExVX1NUQUxMX1ZFQ1RPUl9MT05HX0dSUDE3MSA6IChHcm91cCAxNzEgcG1fbWlzY18xNSkgY29tcGxldGlvbiBzdGFsbCBkdWUgdG8gbG9uZyBsYXRlbmN5IHZlY3RvciBpbnN0cnVjdGlvbgorZXZlbnQ6MFgwQUI0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDE3MSA6IChHcm91cCAxNzEgcG1fbWlzY18xNSkgTnVtYmVyIG9mIHJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkLgorZXZlbnQ6MFgwQUI1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxNzEgOiAoR3JvdXAgMTcxIHBtX21pc2NfMTUpIFByb2Nlc3NvciBDeWNsZXMgZ2F0ZWQgYnkgdGhlIHJ1biBsYXRjaC4gIE9wZXJhdGluZyBzeXN0ZW1zIHVzZSB0aGUgcnVuIGxhdGNoIHRvIGluZGljYXRlIHdoZW4gdGhleSBhcmUgZG9pbmcgdXNlZnVsIHdvcmsuICBUaGUgcnVuIGxhdGNoIGlzIHR5cGljYWxseSBjbGVhcmVkIGluIHRoZSBPUyBpZGxlIGxvb3AuICBHYXRpbmcgYnkgdGhlIHJ1biBsYXRjaCBmaWx0ZXJzIG91dCB0aGUgaWRsZSBsb29wLgorCisjR3JvdXAgMTcyIHBtX21pc2NfMTYsIE1pc2MgRXZlbnRzCitldmVudDowWDBBQzAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0NNUExVX1NUQUxMX0VORF9HQ1RfTk9TTE9UX0dSUDE3MiA6IChHcm91cCAxNzIgcG1fbWlzY18xNikgQ291bnQgZW5kZWQgYmVjYXVzZSBHQ1Qgd2VudCBlbXB0eQorZXZlbnQ6MFgwQUMxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1UwX0wxX1NXX1BSRUZfR1JQMTcyIDogKEdyb3VwIDE3MiBwbV9taXNjXzE2KSBMU1UwIFNvZnR3YXJlIEwxIFByZWZldGNoZXMsIGluY2x1ZGluZyBTVyBUcmFuc2llbnQgUHJlZmV0Y2hlcworZXZlbnQ6MFgwQUMyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1UxX0wxX1NXX1BSRUZfR1JQMTcyIDogKEdyb3VwIDE3MiBwbV9taXNjXzE2KSBMU1UxIFNvZnR3YXJlIEwxIFByZWZldGNoZXMsIGluY2x1ZGluZyBTVyBUcmFuc2llbnQgUHJlZmV0Y2hlcworZXZlbnQ6MFgwQUMzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9DTVBMVV9TVEFMTF9JRlVfR1JQMTcyIDogKEdyb3VwIDE3MiBwbV9taXNjXzE2KSBDb21wbGV0aW9uIHN0YWxsIGR1ZSB0byBJRlUKK2V2ZW50OjBYMEFDNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlAxNzIgOiAoR3JvdXAgMTcyIHBtX21pc2NfMTYpIE51bWJlciBvZiBydW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZC4KK2V2ZW50OjBYMEFDNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQMTcyIDogKEdyb3VwIDE3MiBwbV9taXNjXzE2KSBQcm9jZXNzb3IgQ3ljbGVzIGdhdGVkIGJ5IHRoZSBydW4gbGF0Y2guICBPcGVyYXRpbmcgc3lzdGVtcyB1c2UgdGhlIHJ1biBsYXRjaCB0byBpbmRpY2F0ZSB3aGVuIHRoZXkgYXJlIGRvaW5nIHVzZWZ1bCB3b3JrLiAgVGhlIHJ1biBsYXRjaCBpcyB0eXBpY2FsbHkgY2xlYXJlZCBpbiB0aGUgT1MgaWRsZSBsb29wLiAgR2F0aW5nIGJ5IHRoZSBydW4gbGF0Y2ggZmlsdGVycyBvdXQgdGhlIGlkbGUgbG9vcC4KKworI0dyb3VwIDE3MyBwbV9taXNjXzE3LCBNaXNjIEV2ZW50cworZXZlbnQ6MFgwQUQwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9CUlVfRklOX0dSUDE3MyA6IChHcm91cCAxNzMgcG1fbWlzY18xNykgVGhlIEJyYW5jaCBleGVjdXRpb24gdW5pdCBmaW5pc2hlZCBhbiBpbnN0cnVjdGlvbgorZXZlbnQ6MFgwQUQxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9TVF9GSU5fR1JQMTczIDogKEdyb3VwIDE3MyBwbV9taXNjXzE3KSBTdG9yZSByZXF1ZXN0cyBzZW50IHRvIHRoZSBuZXN0LgorZXZlbnQ6MFgwQUQyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfUFRFR19GUk9NX0RMMkwzX1NIUl9HUlAxNzMgOiAoR3JvdXAgMTczIHBtX21pc2NfMTcpIEEgUGFnZSBUYWJsZSBFbnRyeSB3YXMgbG9hZGVkIGludG8gdGhlIEVSQVQgZnJvbSBtZW1vcnkgYXR0YWNoZWQgdG8gYSBkaWZmZXJlbnQgbW9kdWxlIHRoYW4gdGhpcyBwcm9jZXNzb3IgaXMgbG9jYXRlZCBvbiBkdWUgdG8gYSBtYXJrZWQgbG9hZCBvciBzdG9yZS4KK2V2ZW50OjBYMEFEMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fQ01QTFVfU1RBTExfQlJVX0dSUDE3MyA6IChHcm91cCAxNzMgcG1fbWlzY18xNykgQ29tcGxldGlvbiBzdGFsbCBkdWUgdG8gQlJVCitldmVudDowWDBBRDQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQMTczIDogKEdyb3VwIDE3MyBwbV9taXNjXzE3KSBOdW1iZXIgb2YgcnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQuCitldmVudDowWDBBRDUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDE3MyA6IChHcm91cCAxNzMgcG1fbWlzY18xNykgUHJvY2Vzc29yIEN5Y2xlcyBnYXRlZCBieSB0aGUgcnVuIGxhdGNoLiAgT3BlcmF0aW5nIHN5c3RlbXMgdXNlIHRoZSBydW4gbGF0Y2ggdG8gaW5kaWNhdGUgd2hlbiB0aGV5IGFyZSBkb2luZyB1c2VmdWwgd29yay4gIFRoZSBydW4gbGF0Y2ggaXMgdHlwaWNhbGx5IGNsZWFyZWQgaW4gdGhlIE9TIGlkbGUgbG9vcC4gIEdhdGluZyBieSB0aGUgcnVuIGxhdGNoIGZpbHRlcnMgb3V0IHRoZSBpZGxlIGxvb3AuCisKKyNHcm91cCAxNzQgcG1fc3VzcGVuZCwgU1VTUEVOREVEIGV2ZW50cworZXZlbnQ6MFgwQUUwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9TVVNQRU5ERURfR1JQMTc0IDogKEdyb3VwIDE3NCBwbV9zdXNwZW5kKSBUaGUgY291bnRlciBpcyBzdXNwZW5kZWQgKGRvZXMgbm90IGNvdW50KQorZXZlbnQ6MFgwQUUxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDE3NCA6IChHcm91cCAxNzQgcG1fc3VzcGVuZCkgUHJvY2Vzc29yIEN5Y2xlcworZXZlbnQ6MFgwQUUyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MV1NZTkNfR1JQMTc0IDogKEdyb3VwIDE3NCBwbV9zdXNwZW5kKSBsd3N5bmMgY291bnQgKGVhc2llciB0byB1c2UgdGhhbiBJTUMpCitldmVudDowWDBBRTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMTc0IDogKEdyb3VwIDE3NCBwbV9zdXNwZW5kKSBOdW1iZXIgb2YgUG93ZXJQQyBJbnN0cnVjdGlvbnMgdGhhdCBjb21wbGV0ZWQuCitldmVudDowWDBBRTQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQMTc0IDogKEdyb3VwIDE3NCBwbV9zdXNwZW5kKSBOdW1iZXIgb2YgcnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQuCitldmVudDowWDBBRTUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDE3NCA6IChHcm91cCAxNzQgcG1fc3VzcGVuZCkgUHJvY2Vzc29yIEN5Y2xlcyBnYXRlZCBieSB0aGUgcnVuIGxhdGNoLiAgT3BlcmF0aW5nIHN5c3RlbXMgdXNlIHRoZSBydW4gbGF0Y2ggdG8gaW5kaWNhdGUgd2hlbiB0aGV5IGFyZSBkb2luZyB1c2VmdWwgd29yay4gIFRoZSBydW4gbGF0Y2ggaXMgdHlwaWNhbGx5IGNsZWFyZWQgaW4gdGhlIE9TIGlkbGUgbG9vcC4gIEdhdGluZyBieSB0aGUgcnVuIGxhdGNoIGZpbHRlcnMgb3V0IHRoZSBpZGxlIGxvb3AuCisKKyNHcm91cCAxNzUgcG1faW9wcywgSW50ZXJuYWwgT3BlcmF0aW9ucyBldmVudHMKK2V2ZW50OjBYMEFGMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU9QU19DTVBMX0dSUDE3NSA6IChHcm91cCAxNzUgcG1faW9wcykgTnVtYmVyIG9mIGludGVybmFsIG9wZXJhdGlvbnMgdGhhdCBjb21wbGV0ZWQuCitldmVudDowWDBBRjEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQMTc1IDogKEdyb3VwIDE3NSBwbV9pb3BzKSBQcm9jZXNzb3IgQ3ljbGVzCitldmVudDowWDBBRjIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lPUFNfRElTUF9HUlAxNzUgOiAoR3JvdXAgMTc1IHBtX2lvcHMpIElPUFMgZGlzcGF0Y2hlZAorZXZlbnQ6MFgwQUYzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDE3NSA6IChHcm91cCAxNzUgcG1faW9wcykgTnVtYmVyIG9mIFBvd2VyUEMgSW5zdHJ1Y3Rpb25zIHRoYXQgY29tcGxldGVkLgorZXZlbnQ6MFgwQUY0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDE3NSA6IChHcm91cCAxNzUgcG1faW9wcykgTnVtYmVyIG9mIHJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkLgorZXZlbnQ6MFgwQUY1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxNzUgOiAoR3JvdXAgMTc1IHBtX2lvcHMpIFByb2Nlc3NvciBDeWNsZXMgZ2F0ZWQgYnkgdGhlIHJ1biBsYXRjaC4gIE9wZXJhdGluZyBzeXN0ZW1zIHVzZSB0aGUgcnVuIGxhdGNoIHRvIGluZGljYXRlIHdoZW4gdGhleSBhcmUgZG9pbmcgdXNlZnVsIHdvcmsuICBUaGUgcnVuIGxhdGNoIGlzIHR5cGljYWxseSBjbGVhcmVkIGluIHRoZSBPUyBpZGxlIGxvb3AuICBHYXRpbmcgYnkgdGhlIHJ1biBsYXRjaCBmaWx0ZXJzIG91dCB0aGUgaWRsZSBsb29wLgorCisjR3JvdXAgMTc2IHBtX3N5bmMsIHN5bmMKK2V2ZW50OjBYMEIwMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFdTWU5DX0dSUDE3NiA6IChHcm91cCAxNzYgcG1fc3luYykgbHdzeW5jIGNvdW50IChlYXNpZXIgdG8gdXNlIHRoYW4gSU1DKQorZXZlbnQ6MFgwQjAxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDE3NiA6IChHcm91cCAxNzYgcG1fc3luYykgUHJvY2Vzc29yIEN5Y2xlcworZXZlbnQ6MFgwQjAyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MV1NZTkNfSEVMRF9HUlAxNzYgOiAoR3JvdXAgMTc2IHBtX3N5bmMpIEN5Y2xlcyBhIExXU1lOQyBpbnN0cnVjdGlvbiB3YXMgaGVsZCBhdCBkaXNwYXRjaC4gTFdTWU5DIGluc3RydWN0aW9ucyBhcmUgaGVsZCBhdCBkaXNwYXRjaCB1bnRpbCBhbGwgcHJldmlvdXMgbG9hZHMgYXJlIGRvbmUgYW5kIGFsbCBwcmV2aW91cyBzdG9yZXMgaGF2ZSBpc3N1ZWQuIExXU1lOQyBlbnRlcnMgdGhlIFN0b3JlIFJlcXVlc3QgUXVldWUgYW5kIGlzIHNlbnQgdG8gdGhlIHN0b3JhZ2Ugc3Vic3lzdGVtIGJ1dCBkb2VzIG5vdCB3YWl0IGZvciBhIHJlc3BvbnNlLgorZXZlbnQ6MFgwQjAzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDE3NiA6IChHcm91cCAxNzYgcG1fc3luYykgTnVtYmVyIG9mIFBvd2VyUEMgSW5zdHJ1Y3Rpb25zIHRoYXQgY29tcGxldGVkLgorZXZlbnQ6MFgwQjA0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDE3NiA6IChHcm91cCAxNzYgcG1fc3luYykgTnVtYmVyIG9mIHJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkLgorZXZlbnQ6MFgwQjA1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxNzYgOiAoR3JvdXAgMTc2IHBtX3N5bmMpIFByb2Nlc3NvciBDeWNsZXMgZ2F0ZWQgYnkgdGhlIHJ1biBsYXRjaC4gIE9wZXJhdGluZyBzeXN0ZW1zIHVzZSB0aGUgcnVuIGxhdGNoIHRvIGluZGljYXRlIHdoZW4gdGhleSBhcmUgZG9pbmcgdXNlZnVsIHdvcmsuICBUaGUgcnVuIGxhdGNoIGlzIHR5cGljYWxseSBjbGVhcmVkIGluIHRoZSBPUyBpZGxlIGxvb3AuICBHYXRpbmcgYnkgdGhlIHJ1biBsYXRjaCBmaWx0ZXJzIG91dCB0aGUgaWRsZSBsb29wLgorCisjR3JvdXAgMTc3IHBtX3NlZywgU2VnbWVudCBldmVudHMKK2V2ZW50OjBYMEIxMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlAxNzcgOiAoR3JvdXAgMTc3IHBtX3NlZykgUHJvY2Vzc29yIEN5Y2xlcworZXZlbnQ6MFgwQjExIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9TRUdfRVhDRVBUSU9OX0dSUDE3NyA6IChHcm91cCAxNzcgcG1fc2VnKSBJU0VHICsgRFNFRyBFeGNlcHRpb24KK2V2ZW50OjBYMEIxMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSVNFR19HUlAxNzcgOiAoR3JvdXAgMTc3IHBtX3NlZykgSVNFRyBFeGNlcHRpb24KK2V2ZW50OjBYMEIxMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRFNFR19HUlAxNzcgOiAoR3JvdXAgMTc3IHBtX3NlZykgRFNFRyBFeGNlcHRpb24KK2V2ZW50OjBYMEIxNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlAxNzcgOiAoR3JvdXAgMTc3IHBtX3NlZykgTnVtYmVyIG9mIHJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkLgorZXZlbnQ6MFgwQjE1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxNzcgOiAoR3JvdXAgMTc3IHBtX3NlZykgUHJvY2Vzc29yIEN5Y2xlcyBnYXRlZCBieSB0aGUgcnVuIGxhdGNoLiAgT3BlcmF0aW5nIHN5c3RlbXMgdXNlIHRoZSBydW4gbGF0Y2ggdG8gaW5kaWNhdGUgd2hlbiB0aGV5IGFyZSBkb2luZyB1c2VmdWwgd29yay4gIFRoZSBydW4gbGF0Y2ggaXMgdHlwaWNhbGx5IGNsZWFyZWQgaW4gdGhlIE9TIGlkbGUgbG9vcC4gIEdhdGluZyBieSB0aGUgcnVuIGxhdGNoIGZpbHRlcnMgb3V0IHRoZSBpZGxlIGxvb3AuCisKKyNHcm91cCAxNzggcG1fbDNfaGl0LCBMMyBIaXQgRXZlbnRzCitldmVudDowWDBCMjAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wzX0hJVF9HUlAxNzggOiAoR3JvdXAgMTc4IHBtX2wzX2hpdCkgTDMgSGl0cworZXZlbnQ6MFgwQjIxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MM19MRF9ISVRfR1JQMTc4IDogKEdyb3VwIDE3OCBwbV9sM19oaXQpIEwzIGRlbWFuZCBMRCBIaXRzCitldmVudDowWDBCMjIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wzX1BSRUZfSElUX0dSUDE3OCA6IChHcm91cCAxNzggcG1fbDNfaGl0KSBMMyBQcmVmZXRjaCBEaXJlY3RvcnkgSGl0CitldmVudDowWDBCMjMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wzX0NPX0wzMV9HUlAxNzggOiAoR3JvdXAgMTc4IHBtX2wzX2hpdCkgTDMgQ2FzdG91dHMgdG8gTWVtb3J5CitldmVudDowWDBCMjQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQMTc4IDogKEdyb3VwIDE3OCBwbV9sM19oaXQpIE51bWJlciBvZiBydW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZC4KK2V2ZW50OjBYMEIyNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQMTc4IDogKEdyb3VwIDE3OCBwbV9sM19oaXQpIFByb2Nlc3NvciBDeWNsZXMgZ2F0ZWQgYnkgdGhlIHJ1biBsYXRjaC4gIE9wZXJhdGluZyBzeXN0ZW1zIHVzZSB0aGUgcnVuIGxhdGNoIHRvIGluZGljYXRlIHdoZW4gdGhleSBhcmUgZG9pbmcgdXNlZnVsIHdvcmsuICBUaGUgcnVuIGxhdGNoIGlzIHR5cGljYWxseSBjbGVhcmVkIGluIHRoZSBPUyBpZGxlIGxvb3AuICBHYXRpbmcgYnkgdGhlIHJ1biBsYXRjaCBmaWx0ZXJzIG91dCB0aGUgaWRsZSBsb29wLgorCisjR3JvdXAgMTc5IHBtX3NobCwgU2hlbGwgRXZlbnRzCitldmVudDowWDBCMzAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1NITF9ERUFMTE9DQVRFRF9HUlAxNzkgOiAoR3JvdXAgMTc5IHBtX3NobCkgU0hMIFRhYmxlIGVudHJ5IGRlYWxsb2NhdGVkCitldmVudDowWDBCMzEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1NITF9DUkVBVEVEX0dSUDE3OSA6IChHcm91cCAxNzkgcG1fc2hsKSBTSEwgdGFibGUgZW50cnkgQ3JlYXRlZAorZXZlbnQ6MFgwQjMyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9TSExfTUVSR0VEX0dSUDE3OSA6IChHcm91cCAxNzkgcG1fc2hsKSBTSEwgdGFibGUgZW50cnkgbWVyZ2VkIHdpdGggZXhpc3RpbmcKK2V2ZW50OjBYMEIzMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fU0hMX01BVENIX0dSUDE3OSA6IChHcm91cCAxNzkgcG1fc2hsKSBTSEwgVGFibGUgTWF0Y2gKK2V2ZW50OjBYMEIzNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlAxNzkgOiAoR3JvdXAgMTc5IHBtX3NobCkgTnVtYmVyIG9mIHJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkLgorZXZlbnQ6MFgwQjM1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxNzkgOiAoR3JvdXAgMTc5IHBtX3NobCkgUHJvY2Vzc29yIEN5Y2xlcyBnYXRlZCBieSB0aGUgcnVuIGxhdGNoLiAgT3BlcmF0aW5nIHN5c3RlbXMgdXNlIHRoZSBydW4gbGF0Y2ggdG8gaW5kaWNhdGUgd2hlbiB0aGV5IGFyZSBkb2luZyB1c2VmdWwgd29yay4gIFRoZSBydW4gbGF0Y2ggaXMgdHlwaWNhbGx5IGNsZWFyZWQgaW4gdGhlIE9TIGlkbGUgbG9vcC4gIEdhdGluZyBieSB0aGUgcnVuIGxhdGNoIGZpbHRlcnMgb3V0IHRoZSBpZGxlIGxvb3AuCisKKyNHcm91cCAxODAgcG1fbDNfcHJlZiwgTDMgUHJlZmV0Y2ggZXZlbnRzCitldmVudDowWDBCNDAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wzX1BSRUZfTERfR1JQMTgwIDogKEdyb3VwIDE4MCBwbV9sM19wcmVmKSBMMyBjYWNoZSBMRCBwcmVmZXRjaGVzCitldmVudDowWDBCNDEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wzX1BSRUZfU1RfR1JQMTgwIDogKEdyb3VwIDE4MCBwbV9sM19wcmVmKSBMMyBjYWNoZSBTVCBwcmVmZXRjaGVzCitldmVudDowWDBCNDIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wzX1BSRUZfTERTVF9HUlAxODAgOiAoR3JvdXAgMTgwIHBtX2wzX3ByZWYpIEwzIGNhY2hlIHByZWZldGNoZXMgTEQgKyBTVAorZXZlbnQ6MFgwQjQzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMV9QUkVGX0dSUDE4MCA6IChHcm91cCAxODAgcG1fbDNfcHJlZikgQSByZXF1ZXN0IHRvIHByZWZldGNoIGRhdGEgaW50byB0aGUgTDEgd2FzIG1hZGUKK2V2ZW50OjBYMEI0NCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlAxODAgOiAoR3JvdXAgMTgwIHBtX2wzX3ByZWYpIE51bWJlciBvZiBydW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZC4KK2V2ZW50OjBYMEI0NSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQMTgwIDogKEdyb3VwIDE4MCBwbV9sM19wcmVmKSBQcm9jZXNzb3IgQ3ljbGVzIGdhdGVkIGJ5IHRoZSBydW4gbGF0Y2guICBPcGVyYXRpbmcgc3lzdGVtcyB1c2UgdGhlIHJ1biBsYXRjaCB0byBpbmRpY2F0ZSB3aGVuIHRoZXkgYXJlIGRvaW5nIHVzZWZ1bCB3b3JrLiAgVGhlIHJ1biBsYXRjaCBpcyB0eXBpY2FsbHkgY2xlYXJlZCBpbiB0aGUgT1MgaWRsZSBsb29wLiAgR2F0aW5nIGJ5IHRoZSBydW4gbGF0Y2ggZmlsdGVycyBvdXQgdGhlIGlkbGUgbG9vcC4KKworI0dyb3VwIDE4MSBwbV9sMywgTDMgZXZlbnRzCitldmVudDowWDBCNTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wzX01JU1NfR1JQMTgxIDogKEdyb3VwIDE4MSBwbV9sMykgTDMgTWlzc2VzCitldmVudDowWDBCNTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wzX0xEX01JU1NfR1JQMTgxIDogKEdyb3VwIDE4MSBwbV9sMykgTDMgZGVtYW5kIExEIE1pc3MKK2V2ZW50OjBYMEI1MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDNfUFJFRl9NSVNTX0dSUDE4MSA6IChHcm91cCAxODEgcG1fbDMpIEwzIFByZWZldGNoICBEaXJlY3RvcnkgTWlzcworZXZlbnQ6MFgwQjUzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MM19DT19NRU1fR1JQMTgxIDogKEdyb3VwIDE4MSBwbV9sMykgTDMgQ2FzdG91dHMgdG8gTDMuMQorZXZlbnQ6MFgwQjU0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDE4MSA6IChHcm91cCAxODEgcG1fbDMpIE51bWJlciBvZiBydW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZC4KK2V2ZW50OjBYMEI1NSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQMTgxIDogKEdyb3VwIDE4MSBwbV9sMykgUHJvY2Vzc29yIEN5Y2xlcyBnYXRlZCBieSB0aGUgcnVuIGxhdGNoLiAgT3BlcmF0aW5nIHN5c3RlbXMgdXNlIHRoZSBydW4gbGF0Y2ggdG8gaW5kaWNhdGUgd2hlbiB0aGV5IGFyZSBkb2luZyB1c2VmdWwgd29yay4gIFRoZSBydW4gbGF0Y2ggaXMgdHlwaWNhbGx5IGNsZWFyZWQgaW4gdGhlIE9TIGlkbGUgbG9vcC4gIEdhdGluZyBieSB0aGUgcnVuIGxhdGNoIGZpbHRlcnMgb3V0IHRoZSBpZGxlIGxvb3AuCisKKyNHcm91cCAxODIgcG1fc3RyZWFtczEsIFN0cmVhbXMKK2V2ZW50OjBYMEI2MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlAxODIgOiAoR3JvdXAgMTgyIHBtX3N0cmVhbXMxKSBQcm9jZXNzb3IgQ3ljbGVzCitldmVudDowWDBCNjEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9EQ19QUkVGX1NUUkVBTV9DT05GSVJNX0dSUDE4MiA6IChHcm91cCAxODIgcG1fc3RyZWFtczEpIERjYWNoZSBuZXcgcHJlZmV0Y2ggc3RyZWFtIGNvbmZpcm1lZAorZXZlbnQ6MFgwQjYyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1UwX0RDX1BSRUZfU1RSRUFNX0NPTkZJUk1fR1JQMTgyIDogKEdyb3VwIDE4MiBwbV9zdHJlYW1zMSkgTFMwIERjYWNoZSBwcmVmZXRjaCBzdHJlYW0gY29uZmlybWVkCitldmVudDowWDBCNjMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVTFfRENfUFJFRl9TVFJFQU1fQ09ORklSTV9HUlAxODIgOiAoR3JvdXAgMTgyIHBtX3N0cmVhbXMxKSBMUzEgJ0RjYWNoZSBwcmVmZXRjaCBzdHJlYW0gY29uZmlybWVkCitldmVudDowWDBCNjQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQMTgyIDogKEdyb3VwIDE4MiBwbV9zdHJlYW1zMSkgTnVtYmVyIG9mIHJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkLgorZXZlbnQ6MFgwQjY1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxODIgOiAoR3JvdXAgMTgyIHBtX3N0cmVhbXMxKSBQcm9jZXNzb3IgQ3ljbGVzIGdhdGVkIGJ5IHRoZSBydW4gbGF0Y2guICBPcGVyYXRpbmcgc3lzdGVtcyB1c2UgdGhlIHJ1biBsYXRjaCB0byBpbmRpY2F0ZSB3aGVuIHRoZXkgYXJlIGRvaW5nIHVzZWZ1bCB3b3JrLiAgVGhlIHJ1biBsYXRjaCBpcyB0eXBpY2FsbHkgY2xlYXJlZCBpbiB0aGUgT1MgaWRsZSBsb29wLiAgR2F0aW5nIGJ5IHRoZSBydW4gbGF0Y2ggZmlsdGVycyBvdXQgdGhlIGlkbGUgbG9vcC4KKworI0dyb3VwIDE4MyBwbV9zdHJlYW1zMiwgU3RyZWFtcworZXZlbnQ6MFgwQjcwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDE4MyA6IChHcm91cCAxODMgcG1fc3RyZWFtczIpIFByb2Nlc3NvciBDeWNsZXMKK2V2ZW50OjBYMEI3MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVX0RDX1BSRUZfU1RSSURFRF9TVFJFQU1fQ09ORklSTV9HUlAxODMgOiAoR3JvdXAgMTgzIHBtX3N0cmVhbXMyKSBEY2FjaGUgU3RyaWRlZCBwcmVmZXRjaCBzdHJlYW0gY29uZmlybWVkIChzb2Z0d2FyZSArIGhhcmR3YXJlKQorZXZlbnQ6MFgwQjcyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1UwX0RDX1BSRUZfU1RSRUFNX0NPTkZJUk1fU1RSSURFX0dSUDE4MyA6IChHcm91cCAxODMgcG1fc3RyZWFtczIpIExTMCBEY2FjaGUgU3RyaWRlZCBwcmVmZXRjaCBzdHJlYW0gY29uZmlybWVkCitldmVudDowWDBCNzMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVTFfRENfUFJFRl9TVFJFQU1fQ09ORklSTV9TVFJJREVfR1JQMTgzIDogKEdyb3VwIDE4MyBwbV9zdHJlYW1zMikgTFMxICBEY2FjaGUgU3RyaWRlZCBwcmVmZXRjaCBzdHJlYW0gY29uZmlybWVkCitldmVudDowWDBCNzQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQMTgzIDogKEdyb3VwIDE4MyBwbV9zdHJlYW1zMikgTnVtYmVyIG9mIHJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkLgorZXZlbnQ6MFgwQjc1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxODMgOiAoR3JvdXAgMTgzIHBtX3N0cmVhbXMyKSBQcm9jZXNzb3IgQ3ljbGVzIGdhdGVkIGJ5IHRoZSBydW4gbGF0Y2guICBPcGVyYXRpbmcgc3lzdGVtcyB1c2UgdGhlIHJ1biBsYXRjaCB0byBpbmRpY2F0ZSB3aGVuIHRoZXkgYXJlIGRvaW5nIHVzZWZ1bCB3b3JrLiAgVGhlIHJ1biBsYXRjaCBpcyB0eXBpY2FsbHkgY2xlYXJlZCBpbiB0aGUgT1MgaWRsZSBsb29wLiAgR2F0aW5nIGJ5IHRoZSBydW4gbGF0Y2ggZmlsdGVycyBvdXQgdGhlIGlkbGUgbG9vcC4KKworI0dyb3VwIDE4NCBwbV9zdHJlYW1zMywgU3RyZWFtcworZXZlbnQ6MFgwQjgwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQ19QUkVGX0RTVF9HUlAxODQgOiAoR3JvdXAgMTg0IHBtX3N0cmVhbXMzKSBBIHByZWZldGNoIHN0cmVhbSB3YXMgc3RhcnRlZCB1c2luZyB0aGUgRFNUIGluc3RydWN0aW9uLgorZXZlbnQ6MFgwQjgxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1VfRENfUFJFRl9TVFJFQU1fQUxMT0NfR1JQMTg0IDogKEdyb3VwIDE4NCBwbV9zdHJlYW1zMykgRCBjYWNoZSBuZXcgcHJlZmV0Y2ggc3RyZWFtIGFsbG9jYXRlZAorZXZlbnQ6MFgwQjgyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1UwX0RDX1BSRUZfU1RSRUFNX0FMTE9DX0dSUDE4NCA6IChHcm91cCAxODQgcG1fc3RyZWFtczMpIExTMCBEIGNhY2hlIG5ldyBwcmVmZXRjaCBzdHJlYW0gYWxsb2NhdGVkCitldmVudDowWDBCODMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVTFfRENfUFJFRl9TVFJFQU1fQUxMT0NfR1JQMTg0IDogKEdyb3VwIDE4NCBwbV9zdHJlYW1zMykgTFMgMSBEIGNhY2hlIG5ldyBwcmVmZXRjaCBzdHJlYW0gYWxsb2NhdGVkCitldmVudDowWDBCODQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQMTg0IDogKEdyb3VwIDE4NCBwbV9zdHJlYW1zMykgTnVtYmVyIG9mIHJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkLgorZXZlbnQ6MFgwQjg1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxODQgOiAoR3JvdXAgMTg0IHBtX3N0cmVhbXMzKSBQcm9jZXNzb3IgQ3ljbGVzIGdhdGVkIGJ5IHRoZSBydW4gbGF0Y2guICBPcGVyYXRpbmcgc3lzdGVtcyB1c2UgdGhlIHJ1biBsYXRjaCB0byBpbmRpY2F0ZSB3aGVuIHRoZXkgYXJlIGRvaW5nIHVzZWZ1bCB3b3JrLiAgVGhlIHJ1biBsYXRjaCBpcyB0eXBpY2FsbHkgY2xlYXJlZCBpbiB0aGUgT1MgaWRsZSBsb29wLiAgR2F0aW5nIGJ5IHRoZSBydW4gbGF0Y2ggZmlsdGVycyBvdXQgdGhlIGlkbGUgbG9vcC4KKworI0dyb3VwIDE4NSBwbV9sYXJ4LCBMQVJYCitldmVudDowWDBCOTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xBUlhfTFNVMF9HUlAxODUgOiAoR3JvdXAgMTg1IHBtX2xhcngpIEEgbGFyeCAobHdhcnggb3IgbGRhcngpIHdhcyBleGVjdXRlZCBvbiBzaWRlIDAKK2V2ZW50OjBYMEI5MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTEFSWF9MU1UxX0dSUDE4NSA6IChHcm91cCAxODUgcG1fbGFyeCkgQSBsYXJ4IChsd2FyeCBvciBsZGFyeCkgd2FzIGV4ZWN1dGVkIG9uIHNpZGUgMQorZXZlbnQ6MFgwQjkyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDE4NSA6IChHcm91cCAxODUgcG1fbGFyeCkgUHJvY2Vzc29yIEN5Y2xlcworZXZlbnQ6MFgwQjkzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MQVJYX0xTVV9HUlAxODUgOiAoR3JvdXAgMTg1IHBtX2xhcngpIExhcnggRmluaXNoZWQKK2V2ZW50OjBYMEI5NCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlAxODUgOiAoR3JvdXAgMTg1IHBtX2xhcngpIE51bWJlciBvZiBydW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZC4KK2V2ZW50OjBYMEI5NSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQMTg1IDogKEdyb3VwIDE4NSBwbV9sYXJ4KSBQcm9jZXNzb3IgQ3ljbGVzIGdhdGVkIGJ5IHRoZSBydW4gbGF0Y2guICBPcGVyYXRpbmcgc3lzdGVtcyB1c2UgdGhlIHJ1biBsYXRjaCB0byBpbmRpY2F0ZSB3aGVuIHRoZXkgYXJlIGRvaW5nIHVzZWZ1bCB3b3JrLiAgVGhlIHJ1biBsYXRjaCBpcyB0eXBpY2FsbHkgY2xlYXJlZCBpbiB0aGUgT1MgaWRsZSBsb29wLiAgR2F0aW5nIGJ5IHRoZSBydW4gbGF0Y2ggZmlsdGVycyBvdXQgdGhlIGlkbGUgbG9vcC4KKworI0dyb3VwIDE4NiBwbV9sZGYsIEZsb2F0aW5nIFBvaW50IGxvYWRzCitldmVudDowWDBCQTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQMTg2IDogKEdyb3VwIDE4NiBwbV9sZGYpIFByb2Nlc3NvciBDeWNsZXMKK2V2ZW50OjBYMEJBMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTFNVX0xERl9HUlAxODYgOiAoR3JvdXAgMTg2IHBtX2xkZikgTFNVIGV4ZWN1dGVkIEZsb2F0aW5nIFBvaW50IGxvYWQgaW5zdHJ1Y3Rpb24uICBDb21iaW5lZCBVbml0IDAgKyAxLgorZXZlbnQ6MFgwQkEyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1UwX0xERl9HUlAxODYgOiAoR3JvdXAgMTg2IHBtX2xkZikgQSBmbG9hdGluZyBwb2ludCBsb2FkIHdhcyBleGVjdXRlZCBieSBMU1UwCitldmVudDowWDBCQTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVTFfTERGX0dSUDE4NiA6IChHcm91cCAxODYgcG1fbGRmKSBBIGZsb2F0aW5nIHBvaW50IGxvYWQgd2FzIGV4ZWN1dGVkIGJ5IExTVTEKK2V2ZW50OjBYMEJBNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlAxODYgOiAoR3JvdXAgMTg2IHBtX2xkZikgTnVtYmVyIG9mIHJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkLgorZXZlbnQ6MFgwQkE1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxODYgOiAoR3JvdXAgMTg2IHBtX2xkZikgUHJvY2Vzc29yIEN5Y2xlcyBnYXRlZCBieSB0aGUgcnVuIGxhdGNoLiAgT3BlcmF0aW5nIHN5c3RlbXMgdXNlIHRoZSBydW4gbGF0Y2ggdG8gaW5kaWNhdGUgd2hlbiB0aGV5IGFyZSBkb2luZyB1c2VmdWwgd29yay4gIFRoZSBydW4gbGF0Y2ggaXMgdHlwaWNhbGx5IGNsZWFyZWQgaW4gdGhlIE9TIGlkbGUgbG9vcC4gIEdhdGluZyBieSB0aGUgcnVuIGxhdGNoIGZpbHRlcnMgb3V0IHRoZSBpZGxlIGxvb3AuCisKKyNHcm91cCAxODcgcG1fbGR4LCBWZWN0b3IgTG9hZAorZXZlbnQ6MFgwQkIwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDE4NyA6IChHcm91cCAxODcgcG1fbGR4KSBQcm9jZXNzb3IgQ3ljbGVzCitldmVudDowWDBCQjEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9MRFhfR1JQMTg3IDogKEdyb3VwIDE4NyBwbV9sZHgpIEFsbCBWZWN0b3IgbG9hZHMgKHZzeCB2ZWN0b3IgKyB2bXggdmVjdG9yKQorZXZlbnQ6MFgwQkIyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1UwX0xEWF9HUlAxODcgOiAoR3JvdXAgMTg3IHBtX2xkeCkgTFMwIFZlY3RvciBMb2FkcworZXZlbnQ6MFgwQkIzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1UxX0xEWF9HUlAxODcgOiAoR3JvdXAgMTg3IHBtX2xkeCkgTFMxICBWZWN0b3IgTG9hZHMKK2V2ZW50OjBYMEJCNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlAxODcgOiAoR3JvdXAgMTg3IHBtX2xkeCkgTnVtYmVyIG9mIHJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkLgorZXZlbnQ6MFgwQkI1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxODcgOiAoR3JvdXAgMTg3IHBtX2xkeCkgUHJvY2Vzc29yIEN5Y2xlcyBnYXRlZCBieSB0aGUgcnVuIGxhdGNoLiAgT3BlcmF0aW5nIHN5c3RlbXMgdXNlIHRoZSBydW4gbGF0Y2ggdG8gaW5kaWNhdGUgd2hlbiB0aGV5IGFyZSBkb2luZyB1c2VmdWwgd29yay4gIFRoZSBydW4gbGF0Y2ggaXMgdHlwaWNhbGx5IGNsZWFyZWQgaW4gdGhlIE9TIGlkbGUgbG9vcC4gIEdhdGluZyBieSB0aGUgcnVuIGxhdGNoIGZpbHRlcnMgb3V0IHRoZSBpZGxlIGxvb3AuCisKKyNHcm91cCAxODggcG1fbDJfbGRfc3QsIEwyIGxvYWQgYW5kIHN0b3JlIGV2ZW50cworZXZlbnQ6MFgwQkMwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMl9MRF9HUlAxODggOiAoR3JvdXAgMTg4IHBtX2wyX2xkX3N0KSBEYXRhIExvYWQgQ291bnQKK2V2ZW50OjBYMEJDMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDJfU1RfTUlTU19HUlAxODggOiAoR3JvdXAgMTg4IHBtX2wyX2xkX3N0KSBEYXRhIFN0b3JlIE1pc3MKK2V2ZW50OjBYMEJDMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDNfUFJFRl9ISVRfR1JQMTg4IDogKEdyb3VwIDE4OCBwbV9sMl9sZF9zdCkgTDMgUHJlZmV0Y2ggRGlyZWN0b3J5IEhpdAorZXZlbnQ6MFgwQkMzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDE4OCA6IChHcm91cCAxODggcG1fbDJfbGRfc3QpIFByb2Nlc3NvciBDeWNsZXMKK2V2ZW50OjBYMEJDNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlAxODggOiAoR3JvdXAgMTg4IHBtX2wyX2xkX3N0KSBOdW1iZXIgb2YgcnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQuCitldmVudDowWDBCQzUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDE4OCA6IChHcm91cCAxODggcG1fbDJfbGRfc3QpIFByb2Nlc3NvciBDeWNsZXMgZ2F0ZWQgYnkgdGhlIHJ1biBsYXRjaC4gIE9wZXJhdGluZyBzeXN0ZW1zIHVzZSB0aGUgcnVuIGxhdGNoIHRvIGluZGljYXRlIHdoZW4gdGhleSBhcmUgZG9pbmcgdXNlZnVsIHdvcmsuICBUaGUgcnVuIGxhdGNoIGlzIHR5cGljYWxseSBjbGVhcmVkIGluIHRoZSBPUyBpZGxlIGxvb3AuICBHYXRpbmcgYnkgdGhlIHJ1biBsYXRjaCBmaWx0ZXJzIG91dCB0aGUgaWRsZSBsb29wLgorCisjR3JvdXAgMTg5IHBtX3N0Y3gsIFNUQ1gKK2V2ZW50OjBYMEJEMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTEFSWF9MU1VfR1JQMTg5IDogKEdyb3VwIDE4OSBwbV9zdGN4KSBMYXJ4IEZpbmlzaGVkCitldmVudDowWDBCRDEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xTVV9SRUpFQ1RfTEhTX0dSUDE4OSA6IChHcm91cCAxODkgcG1fc3RjeCkgVGhlIExvYWQgU3RvcmUgVW5pdCByZWplY3RlZCBhIGxvYWQgbG9hZCBpbnN0cnVjdGlvbiB0aGF0IGhhZCBhbiBhZGRyZXNzIG92ZXJsYXAgd2l0aCBhbiBvbGRlciBzdG9yZSBpbiB0aGUgc3RvcmUgcXVldWUuIFRoZSBzdG9yZSBtdXN0IGJlIGNvbW1pdHRlZCBhbmQgZGUtYWxsb2NhdGVkIGZyb20gdGhlIFN0b3JlIFF1ZXVlIGJlZm9yZSB0aGUgbG9hZCBjYW4gZXhlY3V0ZSBzdWNjZXNzZnVsbHkuIENvbWJpbmVkIFVuaXQgMCArIDEKK2V2ZW50OjBYMEJEMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fU1RDWF9DTVBMX0dSUDE4OSA6IChHcm91cCAxODkgcG1fc3RjeCkgQ29uZGl0aW9uYWwgc3RvcmVzIHdpdGggcmVzZXJ2YXRpb24gY29tcGxldGVkCitldmVudDowWDBCRDMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1NUQ1hfRkFJTF9HUlAxODkgOiAoR3JvdXAgMTg5IHBtX3N0Y3gpIEEgc3RjeCAoc3R3Y3ggb3Igc3RkY3gpIGZhaWxlZAorZXZlbnQ6MFgwQkQ0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDE4OSA6IChHcm91cCAxODkgcG1fc3RjeCkgTnVtYmVyIG9mIHJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkLgorZXZlbnQ6MFgwQkQ1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxODkgOiAoR3JvdXAgMTg5IHBtX3N0Y3gpIFByb2Nlc3NvciBDeWNsZXMgZ2F0ZWQgYnkgdGhlIHJ1biBsYXRjaC4gIE9wZXJhdGluZyBzeXN0ZW1zIHVzZSB0aGUgcnVuIGxhdGNoIHRvIGluZGljYXRlIHdoZW4gdGhleSBhcmUgZG9pbmcgdXNlZnVsIHdvcmsuICBUaGUgcnVuIGxhdGNoIGlzIHR5cGljYWxseSBjbGVhcmVkIGluIHRoZSBPUyBpZGxlIGxvb3AuICBHYXRpbmcgYnkgdGhlIHJ1biBsYXRjaCBmaWx0ZXJzIG91dCB0aGUgaWRsZSBsb29wLgorCisjR3JvdXAgMTkwIHBtX2J0YWMsIEJUQUMKK2V2ZW50OjBYMEJFMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fQlRBQ19ISVRfR1JQMTkwIDogKEdyb3VwIDE5MCBwbV9idGFjKSBCVEFDIENvcnJlY3QgUHJlZGljdGlvbgorZXZlbnQ6MFgwQkUxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9CVEFDX01JU1NfR1JQMTkwIDogKEdyb3VwIDE5MCBwbV9idGFjKSBCVEFDIE1pc3ByZWRpY3RlZAorZXZlbnQ6MFgwQkUyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9TVENYX0NNUExfR1JQMTkwIDogKEdyb3VwIDE5MCBwbV9idGFjKSBDb25kaXRpb25hbCBzdG9yZXMgd2l0aCByZXNlcnZhdGlvbiBjb21wbGV0ZWQKK2V2ZW50OjBYMEJFMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fU1RDWF9GQUlMX0dSUDE5MCA6IChHcm91cCAxOTAgcG1fYnRhYykgQSBzdGN4IChzdHdjeCBvciBzdGRjeCkgZmFpbGVkCitldmVudDowWDBCRTQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQMTkwIDogKEdyb3VwIDE5MCBwbV9idGFjKSBOdW1iZXIgb2YgcnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQuCitldmVudDowWDBCRTUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDE5MCA6IChHcm91cCAxOTAgcG1fYnRhYykgUHJvY2Vzc29yIEN5Y2xlcyBnYXRlZCBieSB0aGUgcnVuIGxhdGNoLiAgT3BlcmF0aW5nIHN5c3RlbXMgdXNlIHRoZSBydW4gbGF0Y2ggdG8gaW5kaWNhdGUgd2hlbiB0aGV5IGFyZSBkb2luZyB1c2VmdWwgd29yay4gIFRoZSBydW4gbGF0Y2ggaXMgdHlwaWNhbGx5IGNsZWFyZWQgaW4gdGhlIE9TIGlkbGUgbG9vcC4gIEdhdGluZyBieSB0aGUgcnVuIGxhdGNoIGZpbHRlcnMgb3V0IHRoZSBpZGxlIGxvb3AuCisKKyNHcm91cCAxOTEgcG1fYnJfYmMsIEJyYW5jaCBCQyBldmVudHMKK2V2ZW50OjBYMEJGMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fQkNfUExVU184X0NPTlZfR1JQMTkxIDogKEdyb3VwIDE5MSBwbV9icl9iYykgQkMrOCBDb252ZXJ0ZWQKK2V2ZW50OjBYMEJGMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fQkNfUExVU184X1JTTFZfVEFLRU5fR1JQMTkxIDogKEdyb3VwIDE5MSBwbV9icl9iYykgQkMrOCBSZXNvbHZlIG91dGNvbWUgd2FzIFRha2VuLCByZXN1bHRpbmcgaW4gdGhlIGNvbmRpdGlvbmFsIGluc3RydWN0aW9uIGJlaW5nIGNhbmNlbGVkCitldmVudDowWDBCRjIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQMTkxIDogKEdyb3VwIDE5MSBwbV9icl9iYykgUHJvY2Vzc29yIEN5Y2xlcworZXZlbnQ6MFgwQkYzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDE5MSA6IChHcm91cCAxOTEgcG1fYnJfYmMpIE51bWJlciBvZiBQb3dlclBDIEluc3RydWN0aW9ucyB0aGF0IGNvbXBsZXRlZC4KK2V2ZW50OjBYMEJGNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlAxOTEgOiAoR3JvdXAgMTkxIHBtX2JyX2JjKSBOdW1iZXIgb2YgcnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQuCitldmVudDowWDBCRjUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDE5MSA6IChHcm91cCAxOTEgcG1fYnJfYmMpIFByb2Nlc3NvciBDeWNsZXMgZ2F0ZWQgYnkgdGhlIHJ1biBsYXRjaC4gIE9wZXJhdGluZyBzeXN0ZW1zIHVzZSB0aGUgcnVuIGxhdGNoIHRvIGluZGljYXRlIHdoZW4gdGhleSBhcmUgZG9pbmcgdXNlZnVsIHdvcmsuICBUaGUgcnVuIGxhdGNoIGlzIHR5cGljYWxseSBjbGVhcmVkIGluIHRoZSBPUyBpZGxlIGxvb3AuICBHYXRpbmcgYnkgdGhlIHJ1biBsYXRjaCBmaWx0ZXJzIG91dCB0aGUgaWRsZSBsb29wLgorCisjR3JvdXAgMTkyIHBtX2luc3RfaW1jLCBpbnN0IGltYyBldmVudHMKK2V2ZW50OjBYMEMwMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU5TVF9JTUNfTUFUQ0hfQ01QTF9HUlAxOTIgOiAoR3JvdXAgMTkyIHBtX2luc3RfaW1jKSBOdW1iZXIgb2YgaW5zdHJ1Y3Rpb25zIHJlc3VsdGluZyBmcm9tIHRoZSBtYXJrZWQgaW5zdHJ1Y3Rpb25zIGV4cGFuc2lvbiB0aGF0IGNvbXBsZXRlZC4KK2V2ZW50OjBYMEMwMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU5TVF9ESVNQX0dSUDE5MiA6IChHcm91cCAxOTIgcG1faW5zdF9pbWMpIE51bWJlciBvZiBQb3dlclBDIGluc3RydWN0aW9ucyBzdWNjZXNzZnVsbHkgZGlzcGF0Y2hlZC4KK2V2ZW50OjBYMEMwMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU5TVF9JTUNfTUFUQ0hfRElTUF9HUlAxOTIgOiAoR3JvdXAgMTkyIHBtX2luc3RfaW1jKSBJTUMgTWF0Y2hlcyBkaXNwYXRjaGVkCitldmVudDowWDBDMDMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMTkyIDogKEdyb3VwIDE5MiBwbV9pbnN0X2ltYykgTnVtYmVyIG9mIFBvd2VyUEMgSW5zdHJ1Y3Rpb25zIHRoYXQgY29tcGxldGVkLgorZXZlbnQ6MFgwQzA0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDE5MiA6IChHcm91cCAxOTIgcG1faW5zdF9pbWMpIE51bWJlciBvZiBydW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZC4KK2V2ZW50OjBYMEMwNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQMTkyIDogKEdyb3VwIDE5MiBwbV9pbnN0X2ltYykgUHJvY2Vzc29yIEN5Y2xlcyBnYXRlZCBieSB0aGUgcnVuIGxhdGNoLiAgT3BlcmF0aW5nIHN5c3RlbXMgdXNlIHRoZSBydW4gbGF0Y2ggdG8gaW5kaWNhdGUgd2hlbiB0aGV5IGFyZSBkb2luZyB1c2VmdWwgd29yay4gIFRoZSBydW4gbGF0Y2ggaXMgdHlwaWNhbGx5IGNsZWFyZWQgaW4gdGhlIE9TIGlkbGUgbG9vcC4gIEdhdGluZyBieSB0aGUgcnVuIGxhdGNoIGZpbHRlcnMgb3V0IHRoZSBpZGxlIGxvb3AuCisKKyNHcm91cCAxOTMgcG1fbDJfbWlzYzEsIEwyIGxvYWQvc3RvcmUgTWlzcyBldmVudHMKK2V2ZW50OjBYMEMxMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDJfTERTVF9HUlAxOTMgOiAoR3JvdXAgMTkzIHBtX2wyX21pc2MxKSBEYXRhIExvYWQrU3RvcmUgQ291bnQKK2V2ZW50OjBYMEMxMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDJfTERTVF9NSVNTX0dSUDE5MyA6IChHcm91cCAxOTMgcG1fbDJfbWlzYzEpIERhdGEgTG9hZCtTdG9yZSBNaXNzCitldmVudDowWDBDMTIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wyX0lOU1RfTUlTU19HUlAxOTMgOiAoR3JvdXAgMTkzIHBtX2wyX21pc2MxKSBJbnN0cnVjdGlvbiBMb2FkIE1pc3NlcworZXZlbnQ6MFgwQzEzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMl9ESVNQX0FMTF9HUlAxOTMgOiAoR3JvdXAgMTkzIHBtX2wyX21pc2MxKSBBbGwgc3VjY2Vzc2Z1bCBMRC9TVCBkaXNwYXRjaGVzIGZvciB0aGlzIHRocmVhZChpK2QpCitldmVudDowWDBDMTQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQMTkzIDogKEdyb3VwIDE5MyBwbV9sMl9taXNjMSkgTnVtYmVyIG9mIHJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkLgorZXZlbnQ6MFgwQzE1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxOTMgOiAoR3JvdXAgMTkzIHBtX2wyX21pc2MxKSBQcm9jZXNzb3IgQ3ljbGVzIGdhdGVkIGJ5IHRoZSBydW4gbGF0Y2guICBPcGVyYXRpbmcgc3lzdGVtcyB1c2UgdGhlIHJ1biBsYXRjaCB0byBpbmRpY2F0ZSB3aGVuIHRoZXkgYXJlIGRvaW5nIHVzZWZ1bCB3b3JrLiAgVGhlIHJ1biBsYXRjaCBpcyB0eXBpY2FsbHkgY2xlYXJlZCBpbiB0aGUgT1MgaWRsZSBsb29wLiAgR2F0aW5nIGJ5IHRoZSBydW4gbGF0Y2ggZmlsdGVycyBvdXQgdGhlIGlkbGUgbG9vcC4KKworI0dyb3VwIDE5NCBwbV9sMl9taXNjMiwgTDIgRXZlbnRzCitldmVudDowWDBDMjAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMTk0IDogKEdyb3VwIDE5NCBwbV9sMl9taXNjMikgTnVtYmVyIG9mIFBvd2VyUEMgSW5zdHJ1Y3Rpb25zIHRoYXQgY29tcGxldGVkLgorZXZlbnQ6MFgwQzIxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDE5NCA6IChHcm91cCAxOTQgcG1fbDJfbWlzYzIpIFByb2Nlc3NvciBDeWNsZXMKK2V2ZW50OjBYMEMyMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDJfSU5TVF9HUlAxOTQgOiAoR3JvdXAgMTk0IHBtX2wyX21pc2MyKSBJbnN0cnVjdGlvbiBMb2FkIENvdW50CitldmVudDowWDBDMjMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wyX0RJU1BfQUxMX0dSUDE5NCA6IChHcm91cCAxOTQgcG1fbDJfbWlzYzIpIEFsbCBzdWNjZXNzZnVsIExEL1NUIGRpc3BhdGNoZXMgZm9yIHRoaXMgdGhyZWFkKGkrZCkKK2V2ZW50OjBYMEMyNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlAxOTQgOiAoR3JvdXAgMTk0IHBtX2wyX21pc2MyKSBOdW1iZXIgb2YgcnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQuCitldmVudDowWDBDMjUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDE5NCA6IChHcm91cCAxOTQgcG1fbDJfbWlzYzIpIFByb2Nlc3NvciBDeWNsZXMgZ2F0ZWQgYnkgdGhlIHJ1biBsYXRjaC4gIE9wZXJhdGluZyBzeXN0ZW1zIHVzZSB0aGUgcnVuIGxhdGNoIHRvIGluZGljYXRlIHdoZW4gdGhleSBhcmUgZG9pbmcgdXNlZnVsIHdvcmsuICBUaGUgcnVuIGxhdGNoIGlzIHR5cGljYWxseSBjbGVhcmVkIGluIHRoZSBPUyBpZGxlIGxvb3AuICBHYXRpbmcgYnkgdGhlIHJ1biBsYXRjaCBmaWx0ZXJzIG91dCB0aGUgaWRsZSBsb29wLgorCisjR3JvdXAgMTk1IHBtX2wyX21pc2MzLCBMMiBFdmVudHMKK2V2ZW50OjBYMEMzMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAxOTUgOiAoR3JvdXAgMTk1IHBtX2wyX21pc2MzKSBOdW1iZXIgb2YgUG93ZXJQQyBJbnN0cnVjdGlvbnMgdGhhdCBjb21wbGV0ZWQuCitldmVudDowWDBDMzEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQMTk1IDogKEdyb3VwIDE5NSBwbV9sMl9taXNjMykgUHJvY2Vzc29yIEN5Y2xlcworZXZlbnQ6MFgwQzMyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMl9TWVNfUFVNUF9HUlAxOTUgOiAoR3JvdXAgMTk1IHBtX2wyX21pc2MzKSBSQyByZXEgdGhhdCB3YXMgYSBnbG9iYWwgKGFrYSBzeXN0ZW0pIHB1bXAgYXR0ZW1wdAorZXZlbnQ6MFgwQzMzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDE5NSA6IChHcm91cCAxOTUgcG1fbDJfbWlzYzMpIE51bWJlciBvZiBydW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZC4KK2V2ZW50OjBYMEMzNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlAxOTUgOiAoR3JvdXAgMTk1IHBtX2wyX21pc2MzKSBOdW1iZXIgb2YgcnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQuCitldmVudDowWDBDMzUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDE5NSA6IChHcm91cCAxOTUgcG1fbDJfbWlzYzMpIFByb2Nlc3NvciBDeWNsZXMgZ2F0ZWQgYnkgdGhlIHJ1biBsYXRjaC4gIE9wZXJhdGluZyBzeXN0ZW1zIHVzZSB0aGUgcnVuIGxhdGNoIHRvIGluZGljYXRlIHdoZW4gdGhleSBhcmUgZG9pbmcgdXNlZnVsIHdvcmsuICBUaGUgcnVuIGxhdGNoIGlzIHR5cGljYWxseSBjbGVhcmVkIGluIHRoZSBPUyBpZGxlIGxvb3AuICBHYXRpbmcgYnkgdGhlIHJ1biBsYXRjaCBmaWx0ZXJzIG91dCB0aGUgaWRsZSBsb29wLgorCisjR3JvdXAgMTk2IHBtX2wyX21pc2M0LCBMMiBFdmVudHMKK2V2ZW50OjBYMEM0MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAxOTYgOiAoR3JvdXAgMTk2IHBtX2wyX21pc2M0KSBOdW1iZXIgb2YgUG93ZXJQQyBJbnN0cnVjdGlvbnMgdGhhdCBjb21wbGV0ZWQuCitldmVudDowWDBDNDEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQMTk2IDogKEdyb3VwIDE5NiBwbV9sMl9taXNjNCkgUHJvY2Vzc29yIEN5Y2xlcworZXZlbnQ6MFgwQzQyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMl9TTl9TWF9JX0RPTkVfR1JQMTk2IDogKEdyb3VwIDE5NiBwbV9sMl9taXNjNCkgU05QIGRpc3BhdGNoZWQgYW5kIHdlbnQgZnJvbSBTeCBvciBUeCB0byBJeAorZXZlbnQ6MFgwQzQzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMl9TTl9NX1dSX0RPTkVfR1JQMTk2IDogKEdyb3VwIDE5NiBwbV9sMl9taXNjNCkgU05QIGRpc3BhdGNoZWQgZm9yIGEgd3JpdGUgYW5kIHdhcyBNCitldmVudDowWDBDNDQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQMTk2IDogKEdyb3VwIDE5NiBwbV9sMl9taXNjNCkgTnVtYmVyIG9mIHJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkLgorZXZlbnQ6MFgwQzQ1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxOTYgOiAoR3JvdXAgMTk2IHBtX2wyX21pc2M0KSBQcm9jZXNzb3IgQ3ljbGVzIGdhdGVkIGJ5IHRoZSBydW4gbGF0Y2guICBPcGVyYXRpbmcgc3lzdGVtcyB1c2UgdGhlIHJ1biBsYXRjaCB0byBpbmRpY2F0ZSB3aGVuIHRoZXkgYXJlIGRvaW5nIHVzZWZ1bCB3b3JrLiAgVGhlIHJ1biBsYXRjaCBpcyB0eXBpY2FsbHkgY2xlYXJlZCBpbiB0aGUgT1MgaWRsZSBsb29wLiAgR2F0aW5nIGJ5IHRoZSBydW4gbGF0Y2ggZmlsdGVycyBvdXQgdGhlIGlkbGUgbG9vcC4KKworI0dyb3VwIDE5NyBwbV9sMl9taXNjNSwgTDIgRXZlbnRzCitldmVudDowWDBDNTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMTk3IDogKEdyb3VwIDE5NyBwbV9sMl9taXNjNSkgTnVtYmVyIG9mIFBvd2VyUEMgSW5zdHJ1Y3Rpb25zIHRoYXQgY29tcGxldGVkLgorZXZlbnQ6MFgwQzUxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDE5NyA6IChHcm91cCAxOTcgcG1fbDJfbWlzYzUpIFByb2Nlc3NvciBDeWNsZXMKK2V2ZW50OjBYMEM1MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDJfTk9ERV9QVU1QX0dSUDE5NyA6IChHcm91cCAxOTcgcG1fbDJfbWlzYzUpIFJDIHJlcSB0aGF0IHdhcyBhIGxvY2FsIChha2Egbm9kZSkgcHVtcCBhdHRlbXB0CitldmVudDowWDBDNTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQMTk3IDogKEdyb3VwIDE5NyBwbV9sMl9taXNjNSkgTnVtYmVyIG9mIHJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkLgorZXZlbnQ6MFgwQzU0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDE5NyA6IChHcm91cCAxOTcgcG1fbDJfbWlzYzUpIE51bWJlciBvZiBydW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZC4KK2V2ZW50OjBYMEM1NSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQMTk3IDogKEdyb3VwIDE5NyBwbV9sMl9taXNjNSkgUHJvY2Vzc29yIEN5Y2xlcyBnYXRlZCBieSB0aGUgcnVuIGxhdGNoLiAgT3BlcmF0aW5nIHN5c3RlbXMgdXNlIHRoZSBydW4gbGF0Y2ggdG8gaW5kaWNhdGUgd2hlbiB0aGV5IGFyZSBkb2luZyB1c2VmdWwgd29yay4gIFRoZSBydW4gbGF0Y2ggaXMgdHlwaWNhbGx5IGNsZWFyZWQgaW4gdGhlIE9TIGlkbGUgbG9vcC4gIEdhdGluZyBieSB0aGUgcnVuIGxhdGNoIGZpbHRlcnMgb3V0IHRoZSBpZGxlIGxvb3AuCisKKyNHcm91cCAxOTggcG1fbDJfbWlzYzYsIEwyIEV2ZW50cworZXZlbnQ6MFgwQzYwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDE5OCA6IChHcm91cCAxOTggcG1fbDJfbWlzYzYpIE51bWJlciBvZiBQb3dlclBDIEluc3RydWN0aW9ucyB0aGF0IGNvbXBsZXRlZC4KK2V2ZW50OjBYMEM2MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQMTk4IDogKEdyb3VwIDE5OCBwbV9sMl9taXNjNikgUHJvY2Vzc29yIEN5Y2xlcyBnYXRlZCBieSB0aGUgcnVuIGxhdGNoLiAgT3BlcmF0aW5nIHN5c3RlbXMgdXNlIHRoZSBydW4gbGF0Y2ggdG8gaW5kaWNhdGUgd2hlbiB0aGV5IGFyZSBkb2luZyB1c2VmdWwgd29yay4gIFRoZSBydW4gbGF0Y2ggaXMgdHlwaWNhbGx5IGNsZWFyZWQgaW4gdGhlIE9TIGlkbGUgbG9vcC4gIEdhdGluZyBieSB0aGUgcnVuIGxhdGNoIGZpbHRlcnMgb3V0IHRoZSBpZGxlIGxvb3AuCitldmVudDowWDBDNjIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQMTk4IDogKEdyb3VwIDE5OCBwbV9sMl9taXNjNikgUHJvY2Vzc29yIEN5Y2xlcworZXZlbnQ6MFgwQzYzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMl9TTl9NX1JEX0RPTkVfR1JQMTk4IDogKEdyb3VwIDE5OCBwbV9sMl9taXNjNikgU05QIGRpc3BhdGNoZWQgZm9yIGEgcmVhZCBhbmQgd2FzIE0KK2V2ZW50OjBYMEM2NCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlAxOTggOiAoR3JvdXAgMTk4IHBtX2wyX21pc2M2KSBOdW1iZXIgb2YgcnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQuCitldmVudDowWDBDNjUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDE5OCA6IChHcm91cCAxOTggcG1fbDJfbWlzYzYpIFByb2Nlc3NvciBDeWNsZXMgZ2F0ZWQgYnkgdGhlIHJ1biBsYXRjaC4gIE9wZXJhdGluZyBzeXN0ZW1zIHVzZSB0aGUgcnVuIGxhdGNoIHRvIGluZGljYXRlIHdoZW4gdGhleSBhcmUgZG9pbmcgdXNlZnVsIHdvcmsuICBUaGUgcnVuIGxhdGNoIGlzIHR5cGljYWxseSBjbGVhcmVkIGluIHRoZSBPUyBpZGxlIGxvb3AuICBHYXRpbmcgYnkgdGhlIHJ1biBsYXRjaCBmaWx0ZXJzIG91dCB0aGUgaWRsZSBsb29wLgorCisjR3JvdXAgMTk5IHBtX2llcmF0LCBJRVJBVCBFdmVudHMKK2V2ZW50OjBYMEM3MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSUVSQVRfTUlTU19HUlAxOTkgOiAoR3JvdXAgMTk5IHBtX2llcmF0KSBBIHRyYW5zbGF0aW9uIHJlcXVlc3QgbWlzc2VkIHRoZSBJbnN0cnVjdGlvbiBFZmZlY3RpdmUgdG8gUmVhbCBBZGRyZXNzIFRyYW5zbGF0aW9uIChFUkFUKSB0YWJsZQorZXZlbnQ6MFgwQzcxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JRVJBVF9YTEFURV9XUl8xNk1QTFVTX0dSUDE5OSA6IChHcm91cCAxOTkgcG1faWVyYXQpIGxhcmdlIHBhZ2UgMTZNKworZXZlbnQ6MFgwQzcyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JRVJBVF9XUl82NEtfR1JQMTk5IDogKEdyb3VwIDE5OSBwbV9pZXJhdCkgbGFyZ2UgcGFnZSA2NGsKK2V2ZW50OjBYMEM3MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAxOTkgOiAoR3JvdXAgMTk5IHBtX2llcmF0KSBOdW1iZXIgb2YgUG93ZXJQQyBJbnN0cnVjdGlvbnMgdGhhdCBjb21wbGV0ZWQuCitldmVudDowWDBDNzQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQMTk5IDogKEdyb3VwIDE5OSBwbV9pZXJhdCkgTnVtYmVyIG9mIHJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkLgorZXZlbnQ6MFgwQzc1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAxOTkgOiAoR3JvdXAgMTk5IHBtX2llcmF0KSBQcm9jZXNzb3IgQ3ljbGVzIGdhdGVkIGJ5IHRoZSBydW4gbGF0Y2guICBPcGVyYXRpbmcgc3lzdGVtcyB1c2UgdGhlIHJ1biBsYXRjaCB0byBpbmRpY2F0ZSB3aGVuIHRoZXkgYXJlIGRvaW5nIHVzZWZ1bCB3b3JrLiAgVGhlIHJ1biBsYXRjaCBpcyB0eXBpY2FsbHkgY2xlYXJlZCBpbiB0aGUgT1MgaWRsZSBsb29wLiAgR2F0aW5nIGJ5IHRoZSBydW4gbGF0Y2ggZmlsdGVycyBvdXQgdGhlIGlkbGUgbG9vcC4KKworI0dyb3VwIDIwMCBwbV9kaXNwX2NsYiwgRGlzcGF0Y2ggQ0xCIEV2ZW50cworZXZlbnQ6MFgwQzgwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9ESVNQX0NMQl9IRUxEX0dSUDIwMCA6IChHcm91cCAyMDAgcG1fZGlzcF9jbGIpIENMQiBIb2xkOiBBbnkgUmVhc29uCitldmVudDowWDBDODEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RJU1BfQ0xCX0hFTERfU0JfR1JQMjAwIDogKEdyb3VwIDIwMCBwbV9kaXNwX2NsYikgRGlzcGF0Y2gvQ0xCIEhvbGQ6IFNjb3JlYm9hcmQKK2V2ZW50OjBYMEM4MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlAyMDAgOiAoR3JvdXAgMjAwIHBtX2Rpc3BfY2xiKSBQcm9jZXNzb3IgQ3ljbGVzCitldmVudDowWDBDODMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMjAwIDogKEdyb3VwIDIwMCBwbV9kaXNwX2NsYikgTnVtYmVyIG9mIFBvd2VyUEMgSW5zdHJ1Y3Rpb25zIHRoYXQgY29tcGxldGVkLgorZXZlbnQ6MFgwQzg0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDIwMCA6IChHcm91cCAyMDAgcG1fZGlzcF9jbGIpIE51bWJlciBvZiBydW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZC4KK2V2ZW50OjBYMEM4NSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQMjAwIDogKEdyb3VwIDIwMCBwbV9kaXNwX2NsYikgUHJvY2Vzc29yIEN5Y2xlcyBnYXRlZCBieSB0aGUgcnVuIGxhdGNoLiAgT3BlcmF0aW5nIHN5c3RlbXMgdXNlIHRoZSBydW4gbGF0Y2ggdG8gaW5kaWNhdGUgd2hlbiB0aGV5IGFyZSBkb2luZyB1c2VmdWwgd29yay4gIFRoZSBydW4gbGF0Y2ggaXMgdHlwaWNhbGx5IGNsZWFyZWQgaW4gdGhlIE9TIGlkbGUgbG9vcC4gIEdhdGluZyBieSB0aGUgcnVuIGxhdGNoIGZpbHRlcnMgb3V0IHRoZSBpZGxlIGxvb3AuCisKKyNHcm91cCAyMDEgcG1fZHB1LCBEUFUgRXZlbnRzCitldmVudDowWDBDOTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQMjAxIDogKEdyb3VwIDIwMSBwbV9kcHUpIFByb2Nlc3NvciBDeWNsZXMKK2V2ZW50OjBYMEM5MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRFBVX0hFTERfUE9XRVJfR1JQMjAxIDogKEdyb3VwIDIwMSBwbV9kcHUpIEN5Y2xlcyB0aGF0IEluc3RydWN0aW9uIERpc3BhdGNoIHdhcyBoZWxkIGR1ZSB0byBwb3dlciBtYW5hZ2VtZW50LiBNb3JlIHRoYW4gb25lIGhvbGQgY29uZGl0aW9uIGNhbiBleGlzdCBhdCB0aGUgc2FtZSB0aW1lCitldmVudDowWDBDOTIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RJU1BfV1RfR1JQMjAxIDogKEdyb3VwIDIwMSBwbV9kcHUpIERpc3BhdGNoZWQgU3RhcnZlZCAobm90IGhlbGQsIG5vdGhpbmcgdG8gZGlzcGF0Y2gpCitldmVudDowWDBDOTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMjAxIDogKEdyb3VwIDIwMSBwbV9kcHUpIE51bWJlciBvZiBQb3dlclBDIEluc3RydWN0aW9ucyB0aGF0IGNvbXBsZXRlZC4KK2V2ZW50OjBYMEM5NCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlAyMDEgOiAoR3JvdXAgMjAxIHBtX2RwdSkgTnVtYmVyIG9mIHJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkLgorZXZlbnQ6MFgwQzk1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAyMDEgOiAoR3JvdXAgMjAxIHBtX2RwdSkgUHJvY2Vzc29yIEN5Y2xlcyBnYXRlZCBieSB0aGUgcnVuIGxhdGNoLiAgT3BlcmF0aW5nIHN5c3RlbXMgdXNlIHRoZSBydW4gbGF0Y2ggdG8gaW5kaWNhdGUgd2hlbiB0aGV5IGFyZSBkb2luZyB1c2VmdWwgd29yay4gIFRoZSBydW4gbGF0Y2ggaXMgdHlwaWNhbGx5IGNsZWFyZWQgaW4gdGhlIE9TIGlkbGUgbG9vcC4gIEdhdGluZyBieSB0aGUgcnVuIGxhdGNoIGZpbHRlcnMgb3V0IHRoZSBpZGxlIGxvb3AuCisKKyNHcm91cCAyMDIgcG1fY3B1X3V0aWwsIEJhc2ljIENQVSB1dGlsaXphdGlvbgorZXZlbnQ6MFgwQ0EwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fU1BVUlJfR1JQMjAyIDogKEdyb3VwIDIwMiBwbV9jcHVfdXRpbCkgUnVuIFNQVVJSCitldmVudDowWDBDQTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDIwMiA6IChHcm91cCAyMDIgcG1fY3B1X3V0aWwpIFByb2Nlc3NvciBDeWNsZXMgZ2F0ZWQgYnkgdGhlIHJ1biBsYXRjaC4gIE9wZXJhdGluZyBzeXN0ZW1zIHVzZSB0aGUgcnVuIGxhdGNoIHRvIGluZGljYXRlIHdoZW4gdGhleSBhcmUgZG9pbmcgdXNlZnVsIHdvcmsuICBUaGUgcnVuIGxhdGNoIGlzIHR5cGljYWxseSBjbGVhcmVkIGluIHRoZSBPUyBpZGxlIGxvb3AuICBHYXRpbmcgYnkgdGhlIHJ1biBsYXRjaCBmaWx0ZXJzIG91dCB0aGUgaWRsZSBsb29wLgorZXZlbnQ6MFgwQ0EyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDIwMiA6IChHcm91cCAyMDIgcG1fY3B1X3V0aWwpIFByb2Nlc3NvciBDeWNsZXMKK2V2ZW50OjBYMENBMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX1BVUlJfR1JQMjAyIDogKEdyb3VwIDIwMiBwbV9jcHVfdXRpbCkgVGhlIFByb2Nlc3NvciBVdGlsaXphdGlvbiBvZiBSZXNvdXJjZXMgUmVnaXN0ZXIgd2FzIGluY3JlbWVudGVkIHdoaWxlIHRoZSBydW4gbGF0Y2ggd2FzIHNldC4gVGhlIFBVUlIgcmVnaXN0ZXJzIHdpbGwgYmUgaW5jcmVtZW50ZWQgcm91Z2hseSBpbiB0aGUgcmF0aW8gaW4gd2hpY2ggdGhlIGluc3RydWN0aW9ucyBhcmUgZGlzcGF0Y2hlZCBmcm9tIHRoZSB0d28gdGhyZWFkcy4KK2V2ZW50OjBYMENBNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlAyMDIgOiAoR3JvdXAgMjAyIHBtX2NwdV91dGlsKSBOdW1iZXIgb2YgcnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQuCitldmVudDowWDBDQTUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDIwMiA6IChHcm91cCAyMDIgcG1fY3B1X3V0aWwpIFByb2Nlc3NvciBDeWNsZXMgZ2F0ZWQgYnkgdGhlIHJ1biBsYXRjaC4gIE9wZXJhdGluZyBzeXN0ZW1zIHVzZSB0aGUgcnVuIGxhdGNoIHRvIGluZGljYXRlIHdoZW4gdGhleSBhcmUgZG9pbmcgdXNlZnVsIHdvcmsuICBUaGUgcnVuIGxhdGNoIGlzIHR5cGljYWxseSBjbGVhcmVkIGluIHRoZSBPUyBpZGxlIGxvb3AuICBHYXRpbmcgYnkgdGhlIHJ1biBsYXRjaCBmaWx0ZXJzIG91dCB0aGUgaWRsZSBsb29wLgorCisjR3JvdXAgMjAzIHBtX292ZXJmbG93MSwgT3ZlcmZsb3cgZXZlbnRzCitldmVudDowWDBDQjAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1BNQzRfT1ZFUkZMT1dfR1JQMjAzIDogKEdyb3VwIDIwMyBwbV9vdmVyZmxvdzEpIE92ZXJmbG93cyBmcm9tIFBNQzQgYXJlIGNvdW50ZWQuICBUaGlzIGVmZmVjdGl2ZWx5IHdpZGVucyB0aGUgUE1DLiBUaGUgT3ZlcmZsb3cgZnJvbSB0aGUgb3JpZ2luYWwgUE1DIHdpbGwgbm90IHRyaWdnZXIgYW4gZXhjZXB0aW9uIGV2ZW4gaWYgdGhlIFBNVSBpcyBjb25maWd1cmVkIHRvIGdlbmVyYXRlIGV4Y2VwdGlvbnMgb24gb3ZlcmZsb3cuCitldmVudDowWDBDQjEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1BNQzFfT1ZFUkZMT1dfR1JQMjAzIDogKEdyb3VwIDIwMyBwbV9vdmVyZmxvdzEpIE92ZXJmbG93cyBmcm9tIFBNQzEgYXJlIGNvdW50ZWQuICBUaGlzIGVmZmVjdGl2ZWx5IHdpZGVucyB0aGUgUE1DLiBUaGUgT3ZlcmZsb3cgZnJvbSB0aGUgb3JpZ2luYWwgUE1DIHdpbGwgbm90IHRyaWdnZXIgYW4gZXhjZXB0aW9uIGV2ZW4gaWYgdGhlIFBNVSBpcyBjb25maWd1cmVkIHRvIGdlbmVyYXRlIGV4Y2VwdGlvbnMgb24gb3ZlcmZsb3cuCitldmVudDowWDBDQjIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1BNQzJfT1ZFUkZMT1dfR1JQMjAzIDogKEdyb3VwIDIwMyBwbV9vdmVyZmxvdzEpIE92ZXJmbG93cyBmcm9tIFBNQzIgYXJlIGNvdW50ZWQuICBUaGlzIGVmZmVjdGl2ZWx5IHdpZGVucyB0aGUgUE1DLiBUaGUgT3ZlcmZsb3cgZnJvbSB0aGUgb3JpZ2luYWwgUE1DIHdpbGwgbm90IHRyaWdnZXIgYW4gZXhjZXB0aW9uIGV2ZW4gaWYgdGhlIFBNVSBpcyBjb25maWd1cmVkIHRvIGdlbmVyYXRlIGV4Y2VwdGlvbnMgb24gb3ZlcmZsb3cuCitldmVudDowWDBDQjMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1BNQzNfT1ZFUkZMT1dfR1JQMjAzIDogKEdyb3VwIDIwMyBwbV9vdmVyZmxvdzEpIE92ZXJmbG93cyBmcm9tIFBNQzMgYXJlIGNvdW50ZWQuICBUaGlzIGVmZmVjdGl2ZWx5IHdpZGVucyB0aGUgUE1DLiBUaGUgT3ZlcmZsb3cgZnJvbSB0aGUgb3JpZ2luYWwgUE1DIHdpbGwgbm90IHRyaWdnZXIgYW4gZXhjZXB0aW9uIGV2ZW4gaWYgdGhlIFBNVSBpcyBjb25maWd1cmVkIHRvIGdlbmVyYXRlIGV4Y2VwdGlvbnMgb24gb3ZlcmZsb3cuCitldmVudDowWDBDQjQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQMjAzIDogKEdyb3VwIDIwMyBwbV9vdmVyZmxvdzEpIE51bWJlciBvZiBydW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZC4KK2V2ZW50OjBYMENCNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQMjAzIDogKEdyb3VwIDIwMyBwbV9vdmVyZmxvdzEpIFByb2Nlc3NvciBDeWNsZXMgZ2F0ZWQgYnkgdGhlIHJ1biBsYXRjaC4gIE9wZXJhdGluZyBzeXN0ZW1zIHVzZSB0aGUgcnVuIGxhdGNoIHRvIGluZGljYXRlIHdoZW4gdGhleSBhcmUgZG9pbmcgdXNlZnVsIHdvcmsuICBUaGUgcnVuIGxhdGNoIGlzIHR5cGljYWxseSBjbGVhcmVkIGluIHRoZSBPUyBpZGxlIGxvb3AuICBHYXRpbmcgYnkgdGhlIHJ1biBsYXRjaCBmaWx0ZXJzIG91dCB0aGUgaWRsZSBsb29wLgorCisjR3JvdXAgMjA0IHBtX292ZXJmbG93MiwgT3ZlcmZsb3cgZXZlbnRzCitldmVudDowWDBDQzAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1BNQzVfT1ZFUkZMT1dfR1JQMjA0IDogKEdyb3VwIDIwNCBwbV9vdmVyZmxvdzIpIE92ZXJmbG93cyBmcm9tIFBNQzUgYXJlIGNvdW50ZWQuICBUaGlzIGVmZmVjdGl2ZWx5IHdpZGVucyB0aGUgUE1DLiBUaGUgT3ZlcmZsb3cgZnJvbSB0aGUgb3JpZ2luYWwgUE1DIHdpbGwgbm90IHRyaWdnZXIgYW4gZXhjZXB0aW9uIGV2ZW4gaWYgdGhlIFBNVSBpcyBjb25maWd1cmVkIHRvIGdlbmVyYXRlIGV4Y2VwdGlvbnMgb24gb3ZlcmZsb3cuCitldmVudDowWDBDQzEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1BNQzFfT1ZFUkZMT1dfR1JQMjA0IDogKEdyb3VwIDIwNCBwbV9vdmVyZmxvdzIpIE92ZXJmbG93cyBmcm9tIFBNQzEgYXJlIGNvdW50ZWQuICBUaGlzIGVmZmVjdGl2ZWx5IHdpZGVucyB0aGUgUE1DLiBUaGUgT3ZlcmZsb3cgZnJvbSB0aGUgb3JpZ2luYWwgUE1DIHdpbGwgbm90IHRyaWdnZXIgYW4gZXhjZXB0aW9uIGV2ZW4gaWYgdGhlIFBNVSBpcyBjb25maWd1cmVkIHRvIGdlbmVyYXRlIGV4Y2VwdGlvbnMgb24gb3ZlcmZsb3cuCitldmVudDowWDBDQzIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1BNQzZfT1ZFUkZMT1dfR1JQMjA0IDogKEdyb3VwIDIwNCBwbV9vdmVyZmxvdzIpIE92ZXJmbG93cyBmcm9tIFBNQzYgYXJlIGNvdW50ZWQuICBUaGlzIGVmZmVjdGl2ZWx5IHdpZGVucyB0aGUgUE1DLiBUaGUgT3ZlcmZsb3cgZnJvbSB0aGUgb3JpZ2luYWwgUE1DIHdpbGwgbm90IHRyaWdnZXIgYW4gZXhjZXB0aW9uIGV2ZW4gaWYgdGhlIFBNVSBpcyBjb25maWd1cmVkIHRvIGdlbmVyYXRlIGV4Y2VwdGlvbnMgb24gb3ZlcmZsb3cuCitldmVudDowWDBDQzMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1BNQzNfT1ZFUkZMT1dfR1JQMjA0IDogKEdyb3VwIDIwNCBwbV9vdmVyZmxvdzIpIE92ZXJmbG93cyBmcm9tIFBNQzMgYXJlIGNvdW50ZWQuICBUaGlzIGVmZmVjdGl2ZWx5IHdpZGVucyB0aGUgUE1DLiBUaGUgT3ZlcmZsb3cgZnJvbSB0aGUgb3JpZ2luYWwgUE1DIHdpbGwgbm90IHRyaWdnZXIgYW4gZXhjZXB0aW9uIGV2ZW4gaWYgdGhlIFBNVSBpcyBjb25maWd1cmVkIHRvIGdlbmVyYXRlIGV4Y2VwdGlvbnMgb24gb3ZlcmZsb3cuCitldmVudDowWDBDQzQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQMjA0IDogKEdyb3VwIDIwNCBwbV9vdmVyZmxvdzIpIE51bWJlciBvZiBydW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZC4KK2V2ZW50OjBYMENDNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQMjA0IDogKEdyb3VwIDIwNCBwbV9vdmVyZmxvdzIpIFByb2Nlc3NvciBDeWNsZXMgZ2F0ZWQgYnkgdGhlIHJ1biBsYXRjaC4gIE9wZXJhdGluZyBzeXN0ZW1zIHVzZSB0aGUgcnVuIGxhdGNoIHRvIGluZGljYXRlIHdoZW4gdGhleSBhcmUgZG9pbmcgdXNlZnVsIHdvcmsuICBUaGUgcnVuIGxhdGNoIGlzIHR5cGljYWxseSBjbGVhcmVkIGluIHRoZSBPUyBpZGxlIGxvb3AuICBHYXRpbmcgYnkgdGhlIHJ1biBsYXRjaCBmaWx0ZXJzIG91dCB0aGUgaWRsZSBsb29wLgorCisjR3JvdXAgMjA1IHBtX3Jld2luZCwgUmV3aW5kIGV2ZW50cworZXZlbnQ6MFgwQ0QwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9QTUM0X1JFV0lORF9HUlAyMDUgOiAoR3JvdXAgMjA1IHBtX3Jld2luZCkgUE1DNCB3YXMgY291bnRpbmcgc3BlY3VsYXRpdmVseS4gVGhlIHNwZWN1bGF0aXZlIGNvbmRpdGlvbiB3YXMgbm90IG1ldCBhbmQgdGhlIGNvdW50ZXIgd2FzIHJlc3RvcmVkIHRvIGl0cyBwcmV2aW91cyB2YWx1ZS4KK2V2ZW50OjBYMENEMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQMjA1IDogKEdyb3VwIDIwNSBwbV9yZXdpbmQpIFByb2Nlc3NvciBDeWNsZXMgZ2F0ZWQgYnkgdGhlIHJ1biBsYXRjaC4gIE9wZXJhdGluZyBzeXN0ZW1zIHVzZSB0aGUgcnVuIGxhdGNoIHRvIGluZGljYXRlIHdoZW4gdGhleSBhcmUgZG9pbmcgdXNlZnVsIHdvcmsuICBUaGUgcnVuIGxhdGNoIGlzIHR5cGljYWxseSBjbGVhcmVkIGluIHRoZSBPUyBpZGxlIGxvb3AuICBHYXRpbmcgYnkgdGhlIHJ1biBsYXRjaCBmaWx0ZXJzIG91dCB0aGUgaWRsZSBsb29wLgorZXZlbnQ6MFgwQ0QyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9QTUMyX1JFV0lORF9HUlAyMDUgOiAoR3JvdXAgMjA1IHBtX3Jld2luZCkgUE1DMiB3YXMgY291bnRpbmcgc3BlY3VsYXRpdmVseS4gVGhlIHNwZWN1bGF0aXZlIGNvbmRpdGlvbiB3YXMgbm90IG1ldCBhbmQgdGhlIGNvdW50ZXIgd2FzIHJlc3RvcmVkIHRvIGl0cyBwcmV2aW91cyB2YWx1ZS4KK2V2ZW50OjBYMENEMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAyMDUgOiAoR3JvdXAgMjA1IHBtX3Jld2luZCkgTnVtYmVyIG9mIFBvd2VyUEMgSW5zdHJ1Y3Rpb25zIHRoYXQgY29tcGxldGVkLgorZXZlbnQ6MFgwQ0Q0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDIwNSA6IChHcm91cCAyMDUgcG1fcmV3aW5kKSBOdW1iZXIgb2YgcnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQuCitldmVudDowWDBDRDUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDIwNSA6IChHcm91cCAyMDUgcG1fcmV3aW5kKSBQcm9jZXNzb3IgQ3ljbGVzIGdhdGVkIGJ5IHRoZSBydW4gbGF0Y2guICBPcGVyYXRpbmcgc3lzdGVtcyB1c2UgdGhlIHJ1biBsYXRjaCB0byBpbmRpY2F0ZSB3aGVuIHRoZXkgYXJlIGRvaW5nIHVzZWZ1bCB3b3JrLiAgVGhlIHJ1biBsYXRjaCBpcyB0eXBpY2FsbHkgY2xlYXJlZCBpbiB0aGUgT1MgaWRsZSBsb29wLiAgR2F0aW5nIGJ5IHRoZSBydW4gbGF0Y2ggZmlsdGVycyBvdXQgdGhlIGlkbGUgbG9vcC4KKworI0dyb3VwIDIwNiBwbV9zYXZlZCwgU2F2ZWQgRXZlbnRzCitldmVudDowWDBDRTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1BNQzJfU0FWRURfR1JQMjA2IDogKEdyb3VwIDIwNiBwbV9zYXZlZCkgUE1DMiB3YXMgY291bnRpbmcgc3BlY3VsYXRpdmVseS4gVGhlIHNwZWN1bGF0aXZlIGNvbmRpdGlvbiB3YXMgbWV0IGFuZCB0aGUgY291bnRlciB2YWx1ZSB3YXMgY29tbWl0dGVkIGJ5IGNvcHlpbmcgaXQgdG8gdGhlIGJhY2t1cCByZWdpc3Rlci4KK2V2ZW50OjBYMENFMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQMjA2IDogKEdyb3VwIDIwNiBwbV9zYXZlZCkgUHJvY2Vzc29yIEN5Y2xlcyBnYXRlZCBieSB0aGUgcnVuIGxhdGNoLiAgT3BlcmF0aW5nIHN5c3RlbXMgdXNlIHRoZSBydW4gbGF0Y2ggdG8gaW5kaWNhdGUgd2hlbiB0aGV5IGFyZSBkb2luZyB1c2VmdWwgd29yay4gIFRoZSBydW4gbGF0Y2ggaXMgdHlwaWNhbGx5IGNsZWFyZWQgaW4gdGhlIE9TIGlkbGUgbG9vcC4gIEdhdGluZyBieSB0aGUgcnVuIGxhdGNoIGZpbHRlcnMgb3V0IHRoZSBpZGxlIGxvb3AuCitldmVudDowWDBDRTIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1BNQzRfU0FWRURfR1JQMjA2IDogKEdyb3VwIDIwNiBwbV9zYXZlZCkgUE1DNCB3YXMgY291bnRpbmcgc3BlY3VsYXRpdmVseS4gVGhlIHNwZWN1bGF0aXZlIGNvbmRpdGlvbiB3YXMgbWV0IGFuZCB0aGUgY291bnRlciB2YWx1ZSB3YXMgY29tbWl0dGVkIGJ5IGNvcHlpbmcgaXQgdG8gdGhlIGJhY2t1cCByZWdpc3Rlci4KK2V2ZW50OjBYMENFMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAyMDYgOiAoR3JvdXAgMjA2IHBtX3NhdmVkKSBOdW1iZXIgb2YgUG93ZXJQQyBJbnN0cnVjdGlvbnMgdGhhdCBjb21wbGV0ZWQuCitldmVudDowWDBDRTQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQMjA2IDogKEdyb3VwIDIwNiBwbV9zYXZlZCkgTnVtYmVyIG9mIHJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkLgorZXZlbnQ6MFgwQ0U1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAyMDYgOiAoR3JvdXAgMjA2IHBtX3NhdmVkKSBQcm9jZXNzb3IgQ3ljbGVzIGdhdGVkIGJ5IHRoZSBydW4gbGF0Y2guICBPcGVyYXRpbmcgc3lzdGVtcyB1c2UgdGhlIHJ1biBsYXRjaCB0byBpbmRpY2F0ZSB3aGVuIHRoZXkgYXJlIGRvaW5nIHVzZWZ1bCB3b3JrLiAgVGhlIHJ1biBsYXRjaCBpcyB0eXBpY2FsbHkgY2xlYXJlZCBpbiB0aGUgT1MgaWRsZSBsb29wLiAgR2F0aW5nIGJ5IHRoZSBydW4gbGF0Y2ggZmlsdGVycyBvdXQgdGhlIGlkbGUgbG9vcC4KKworI0dyb3VwIDIwNyBwbV90bGJpZSwgVExCSUUgRXZlbnRzCitldmVudDowWDBDRjAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0ZMVVNIX0RJU1BfVExCSUVfR1JQMjA3IDogKEdyb3VwIDIwNyBwbV90bGJpZSkgRGlzcGF0Y2ggRmx1c2g6IFRMQklFCitldmVudDowWDBDRjEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RJU1BfQ0xCX0hFTERfVExCSUVfR1JQMjA3IDogKEdyb3VwIDIwNyBwbV90bGJpZSkgRGlzcGF0Y2ggSG9sZDogRHVlIHRvIFRMQklFCitldmVudDowWDBDRjIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1NOT09QX1RMQklFX0dSUDIwNyA6IChHcm91cCAyMDcgcG1fdGxiaWUpIEEgdGxiaWUgd2FzIHNub29wZWQgZnJvbSBhbm90aGVyIHByb2Nlc3Nvci4KK2V2ZW50OjBYMENGMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAyMDcgOiAoR3JvdXAgMjA3IHBtX3RsYmllKSBOdW1iZXIgb2YgUG93ZXJQQyBJbnN0cnVjdGlvbnMgdGhhdCBjb21wbGV0ZWQuCitldmVudDowWDBDRjQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQMjA3IDogKEdyb3VwIDIwNyBwbV90bGJpZSkgTnVtYmVyIG9mIHJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkLgorZXZlbnQ6MFgwQ0Y1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAyMDcgOiAoR3JvdXAgMjA3IHBtX3RsYmllKSBQcm9jZXNzb3IgQ3ljbGVzIGdhdGVkIGJ5IHRoZSBydW4gbGF0Y2guICBPcGVyYXRpbmcgc3lzdGVtcyB1c2UgdGhlIHJ1biBsYXRjaCB0byBpbmRpY2F0ZSB3aGVuIHRoZXkgYXJlIGRvaW5nIHVzZWZ1bCB3b3JrLiAgVGhlIHJ1biBsYXRjaCBpcyB0eXBpY2FsbHkgY2xlYXJlZCBpbiB0aGUgT1MgaWRsZSBsb29wLiAgR2F0aW5nIGJ5IHRoZSBydW4gbGF0Y2ggZmlsdGVycyBvdXQgdGhlIGlkbGUgbG9vcC4KKworI0dyb3VwIDIwOCBwbV9pZF9taXNzX2VyYXRfbDEsIEluc3RydWN0aW9uL0RhdGEgbWlzcyBmcm9tIEVSQVQvTDEgY2FjaGUKK2V2ZW50OjBYMEQwMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSUVSQVRfTUlTU19HUlAyMDggOiAoR3JvdXAgMjA4IHBtX2lkX21pc3NfZXJhdF9sMSkgQSB0cmFuc2xhdGlvbiByZXF1ZXN0IG1pc3NlZCB0aGUgSW5zdHJ1Y3Rpb24gRWZmZWN0aXZlIHRvIFJlYWwgQWRkcmVzcyBUcmFuc2xhdGlvbiAoRVJBVCkgdGFibGUKK2V2ZW50OjBYMEQwMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTDFfSUNBQ0hFX01JU1NfR1JQMjA4IDogKEdyb3VwIDIwOCBwbV9pZF9taXNzX2VyYXRfbDEpIEFuIGluc3RydWN0aW9uIGZldGNoIHJlcXVlc3QgbWlzc2VkIHRoZSBMMSBjYWNoZS4KK2V2ZW50OjBYMEQwMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fU1RfTUlTU19MMV9HUlAyMDggOiAoR3JvdXAgMjA4IHBtX2lkX21pc3NfZXJhdF9sMSkgQSBzdG9yZSBtaXNzZWQgdGhlIGRjYWNoZS4gIENvbWJpbmVkIFVuaXQgMCArIDEuCitldmVudDowWDBEMDMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xEX01JU1NfTDFfR1JQMjA4IDogKEdyb3VwIDIwOCBwbV9pZF9taXNzX2VyYXRfbDEpIExvYWQgcmVmZXJlbmNlcyB0aGF0IG1pc3MgdGhlIExldmVsIDEgRGF0YSBjYWNoZS4gQ29tYmluZWQgdW5pdCAwICsgMS4KK2V2ZW50OjBYMEQwNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlAyMDggOiAoR3JvdXAgMjA4IHBtX2lkX21pc3NfZXJhdF9sMSkgTnVtYmVyIG9mIHJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkLgorZXZlbnQ6MFgwRDA1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAyMDggOiAoR3JvdXAgMjA4IHBtX2lkX21pc3NfZXJhdF9sMSkgUHJvY2Vzc29yIEN5Y2xlcyBnYXRlZCBieSB0aGUgcnVuIGxhdGNoLiAgT3BlcmF0aW5nIHN5c3RlbXMgdXNlIHRoZSBydW4gbGF0Y2ggdG8gaW5kaWNhdGUgd2hlbiB0aGV5IGFyZSBkb2luZyB1c2VmdWwgd29yay4gIFRoZSBydW4gbGF0Y2ggaXMgdHlwaWNhbGx5IGNsZWFyZWQgaW4gdGhlIE9TIGlkbGUgbG9vcC4gIEdhdGluZyBieSB0aGUgcnVuIGxhdGNoIGZpbHRlcnMgb3V0IHRoZSBpZGxlIGxvb3AuCisKKyNHcm91cCAyMDkgcG1faWRfbWlzc19lcmF0X3RsYWIsIEluc3RydWN0aW9uL0RhdGEgbWlzcyBmcm9tIEVSQVQvVExCCitldmVudDowWDBEMTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQMjA5IDogKEdyb3VwIDIwOSBwbV9pZF9taXNzX2VyYXRfdGxhYikgUHJvY2Vzc29yIEN5Y2xlcworZXZlbnQ6MFgwRDExIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MU1VfREVSQVRfTUlTU19HUlAyMDkgOiAoR3JvdXAgMjA5IHBtX2lkX21pc3NfZXJhdF90bGFiKSBUb3RhbCBELUVSQVQgTWlzc2VzLiAgUmVxdWVzdHMgdGhhdCBtaXNzIHRoZSBEZXJhdCBhcmUgcmVqZWN0ZWQgYW5kIHJldHJpZWQgdW50aWwgdGhlIHJlcXVlc3QgaGl0cyBpbiB0aGUgRXJhdC4gVGhpcyBtYXkgcmVzdWx0IGluIG11bHRpcGxlIGVyYXQgbWlzc2VzIGZvciB0aGUgc2FtZSBpbnN0cnVjdGlvbi4gIENvbWJpbmVkIFVuaXQgMCArIDEuCitldmVudDowWDBEMTIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RUTEJfTUlTU19HUlAyMDkgOiAoR3JvdXAgMjA5IHBtX2lkX21pc3NfZXJhdF90bGFiKSBEYXRhIFRMQiBtaXNzZXMsIGFsbCBwYWdlIHNpemVzLgorZXZlbnQ6MFgwRDEzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JVExCX01JU1NfR1JQMjA5IDogKEdyb3VwIDIwOSBwbV9pZF9taXNzX2VyYXRfdGxhYikgQSBUTEIgbWlzcyBmb3IgYW4gSW5zdHJ1Y3Rpb24gRmV0Y2ggaGFzIG9jY3VycmVkCitldmVudDowWDBEMTQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQMjA5IDogKEdyb3VwIDIwOSBwbV9pZF9taXNzX2VyYXRfdGxhYikgTnVtYmVyIG9mIHJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkLgorZXZlbnQ6MFgwRDE1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAyMDkgOiAoR3JvdXAgMjA5IHBtX2lkX21pc3NfZXJhdF90bGFiKSBQcm9jZXNzb3IgQ3ljbGVzIGdhdGVkIGJ5IHRoZSBydW4gbGF0Y2guICBPcGVyYXRpbmcgc3lzdGVtcyB1c2UgdGhlIHJ1biBsYXRjaCB0byBpbmRpY2F0ZSB3aGVuIHRoZXkgYXJlIGRvaW5nIHVzZWZ1bCB3b3JrLiAgVGhlIHJ1biBsYXRjaCBpcyB0eXBpY2FsbHkgY2xlYXJlZCBpbiB0aGUgT1MgaWRsZSBsb29wLiAgR2F0aW5nIGJ5IHRoZSBydW4gbGF0Y2ggZmlsdGVycyBvdXQgdGhlIGlkbGUgbG9vcC4KKworI0dyb3VwIDIxMCBwbV9jb21wYXRfdXRpbGl6YXRpb24xLCBCYXNpYyBDUFUgdXRpbGl6YXRpb24KK2V2ZW50OjBYMEQyMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fQU5ZX1RIUkRfUlVOX0NZQ19HUlAyMTAgOiAoR3JvdXAgMjEwIHBtX2NvbXBhdF91dGlsaXphdGlvbjEpIE9uZSBvZiB0aHJlYWRzIGluIHJ1bl9jeWNsZXMKK2V2ZW50OjBYMEQyMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQMjEwIDogKEdyb3VwIDIxMCBwbV9jb21wYXRfdXRpbGl6YXRpb24xKSBQcm9jZXNzb3IgQ3ljbGVzIGdhdGVkIGJ5IHRoZSBydW4gbGF0Y2guICBPcGVyYXRpbmcgc3lzdGVtcyB1c2UgdGhlIHJ1biBsYXRjaCB0byBpbmRpY2F0ZSB3aGVuIHRoZXkgYXJlIGRvaW5nIHVzZWZ1bCB3b3JrLiAgVGhlIHJ1biBsYXRjaCBpcyB0eXBpY2FsbHkgY2xlYXJlZCBpbiB0aGUgT1MgaWRsZSBsb29wLiAgR2F0aW5nIGJ5IHRoZSBydW4gbGF0Y2ggZmlsdGVycyBvdXQgdGhlIGlkbGUgbG9vcC4KK2V2ZW50OjBYMEQyMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlAyMTAgOiAoR3JvdXAgMjEwIHBtX2NvbXBhdF91dGlsaXphdGlvbjEpIFByb2Nlc3NvciBDeWNsZXMKK2V2ZW50OjBYMEQyMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX1BVUlJfR1JQMjEwIDogKEdyb3VwIDIxMCBwbV9jb21wYXRfdXRpbGl6YXRpb24xKSBUaGUgUHJvY2Vzc29yIFV0aWxpemF0aW9uIG9mIFJlc291cmNlcyBSZWdpc3RlciB3YXMgaW5jcmVtZW50ZWQgd2hpbGUgdGhlIHJ1biBsYXRjaCB3YXMgc2V0LiBUaGUgUFVSUiByZWdpc3RlcnMgd2lsbCBiZSBpbmNyZW1lbnRlZCByb3VnaGx5IGluIHRoZSByYXRpbyBpbiB3aGljaCB0aGUgaW5zdHJ1Y3Rpb25zIGFyZSBkaXNwYXRjaGVkIGZyb20gdGhlIHR3byB0aHJlYWRzLgorZXZlbnQ6MFgwRDI0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDIxMCA6IChHcm91cCAyMTAgcG1fY29tcGF0X3V0aWxpemF0aW9uMSkgTnVtYmVyIG9mIHJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkLgorZXZlbnQ6MFgwRDI1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAyMTAgOiAoR3JvdXAgMjEwIHBtX2NvbXBhdF91dGlsaXphdGlvbjEpIFByb2Nlc3NvciBDeWNsZXMgZ2F0ZWQgYnkgdGhlIHJ1biBsYXRjaC4gIE9wZXJhdGluZyBzeXN0ZW1zIHVzZSB0aGUgcnVuIGxhdGNoIHRvIGluZGljYXRlIHdoZW4gdGhleSBhcmUgZG9pbmcgdXNlZnVsIHdvcmsuICBUaGUgcnVuIGxhdGNoIGlzIHR5cGljYWxseSBjbGVhcmVkIGluIHRoZSBPUyBpZGxlIGxvb3AuICBHYXRpbmcgYnkgdGhlIHJ1biBsYXRjaCBmaWx0ZXJzIG91dCB0aGUgaWRsZSBsb29wLgorCisjR3JvdXAgMjExIHBtX2NvbXBhdF91dGlsaXphdGlvbjIsIENQSSBhbmQgdXRpbGl6YXRpb24gZGF0YQorZXZlbnQ6MFgwRDMwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GTE9QX0dSUDIxMSA6IChHcm91cCAyMTEgcG1fY29tcGF0X3V0aWxpemF0aW9uMikgQSBmbG9hdGluZyBwb2ludCBvcGVyYXRpb24gaGFzIGNvbXBsZXRlZAorZXZlbnQ6MFgwRDMxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAyMTEgOiAoR3JvdXAgMjExIHBtX2NvbXBhdF91dGlsaXphdGlvbjIpIFByb2Nlc3NvciBDeWNsZXMgZ2F0ZWQgYnkgdGhlIHJ1biBsYXRjaC4gIE9wZXJhdGluZyBzeXN0ZW1zIHVzZSB0aGUgcnVuIGxhdGNoIHRvIGluZGljYXRlIHdoZW4gdGhleSBhcmUgZG9pbmcgdXNlZnVsIHdvcmsuICBUaGUgcnVuIGxhdGNoIGlzIHR5cGljYWxseSBjbGVhcmVkIGluIHRoZSBPUyBpZGxlIGxvb3AuICBHYXRpbmcgYnkgdGhlIHJ1biBsYXRjaCBmaWx0ZXJzIG91dCB0aGUgaWRsZSBsb29wLgorZXZlbnQ6MFgwRDMyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDIxMSA6IChHcm91cCAyMTEgcG1fY29tcGF0X3V0aWxpemF0aW9uMikgUHJvY2Vzc29yIEN5Y2xlcworZXZlbnQ6MFgwRDMzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDIxMSA6IChHcm91cCAyMTEgcG1fY29tcGF0X3V0aWxpemF0aW9uMikgTnVtYmVyIG9mIHJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkLgorZXZlbnQ6MFgwRDM0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDIxMSA6IChHcm91cCAyMTEgcG1fY29tcGF0X3V0aWxpemF0aW9uMikgTnVtYmVyIG9mIHJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkLgorZXZlbnQ6MFgwRDM1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAyMTEgOiAoR3JvdXAgMjExIHBtX2NvbXBhdF91dGlsaXphdGlvbjIpIFByb2Nlc3NvciBDeWNsZXMgZ2F0ZWQgYnkgdGhlIHJ1biBsYXRjaC4gIE9wZXJhdGluZyBzeXN0ZW1zIHVzZSB0aGUgcnVuIGxhdGNoIHRvIGluZGljYXRlIHdoZW4gdGhleSBhcmUgZG9pbmcgdXNlZnVsIHdvcmsuICBUaGUgcnVuIGxhdGNoIGlzIHR5cGljYWxseSBjbGVhcmVkIGluIHRoZSBPUyBpZGxlIGxvb3AuICBHYXRpbmcgYnkgdGhlIHJ1biBsYXRjaCBmaWx0ZXJzIG91dCB0aGUgaWRsZSBsb29wLgorCisjR3JvdXAgMjEyIHBtX2NvbXBhdF9jcGlfMXBsdXNfcHBjLCBNaXNjIENQSSBhbmQgdXRpbGl6YXRpb24gZGF0YQorZXZlbnQ6MFgwRDQwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV8xUExVU19QUENfQ01QTF9HUlAyMTIgOiAoR3JvdXAgMjEyIHBtX2NvbXBhdF9jcGlfMXBsdXNfcHBjKSBBIGdyb3VwIGNvbnRhaW5pbmcgYXQgbGVhc3Qgb25lIFBQQyBpbnN0cnVjdGlvbiBjb21wbGV0ZWQuIEZvciBtaWNyb2NvZGVkIGluc3RydWN0aW9ucyB0aGF0IHNwYW4gbXVsdGlwbGUgZ3JvdXBzLCB0aGlzIHdpbGwgb25seSBvY2N1ciBvbmNlLgorZXZlbnQ6MFgwRDQxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAyMTIgOiAoR3JvdXAgMjEyIHBtX2NvbXBhdF9jcGlfMXBsdXNfcHBjKSBQcm9jZXNzb3IgQ3ljbGVzIGdhdGVkIGJ5IHRoZSBydW4gbGF0Y2guICBPcGVyYXRpbmcgc3lzdGVtcyB1c2UgdGhlIHJ1biBsYXRjaCB0byBpbmRpY2F0ZSB3aGVuIHRoZXkgYXJlIGRvaW5nIHVzZWZ1bCB3b3JrLiAgVGhlIHJ1biBsYXRjaCBpcyB0eXBpY2FsbHkgY2xlYXJlZCBpbiB0aGUgT1MgaWRsZSBsb29wLiAgR2F0aW5nIGJ5IHRoZSBydW4gbGF0Y2ggZmlsdGVycyBvdXQgdGhlIGlkbGUgbG9vcC4KK2V2ZW50OjBYMEQ0MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSU5TVF9ESVNQX0dSUDIxMiA6IChHcm91cCAyMTIgcG1fY29tcGF0X2NwaV8xcGx1c19wcGMpIE51bWJlciBvZiBQb3dlclBDIGluc3RydWN0aW9ucyBzdWNjZXNzZnVsbHkgZGlzcGF0Y2hlZC4KK2V2ZW50OjBYMEQ0MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fMVBMVVNfUFBDX0RJU1BfR1JQMjEyIDogKEdyb3VwIDIxMiBwbV9jb21wYXRfY3BpXzFwbHVzX3BwYykgQSBncm91cCBjb250YWluaW5nIGF0IGxlYXN0IG9uZSBQUEMgaW5zdHJ1Y3Rpb24gd2FzIGRpc3BhdGNoZWQuIEZvciBtaWNyb2NvZGVkIGluc3RydWN0aW9ucyB0aGF0IHNwYW4gbXVsdGlwbGUgZ3JvdXBzLCB0aGlzIHdpbGwgb25seSBvY2N1ciBvbmNlLgorZXZlbnQ6MFgwRDQ0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDIxMiA6IChHcm91cCAyMTIgcG1fY29tcGF0X2NwaV8xcGx1c19wcGMpIE51bWJlciBvZiBydW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZC4KK2V2ZW50OjBYMEQ0NSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQMjEyIDogKEdyb3VwIDIxMiBwbV9jb21wYXRfY3BpXzFwbHVzX3BwYykgUHJvY2Vzc29yIEN5Y2xlcyBnYXRlZCBieSB0aGUgcnVuIGxhdGNoLiAgT3BlcmF0aW5nIHN5c3RlbXMgdXNlIHRoZSBydW4gbGF0Y2ggdG8gaW5kaWNhdGUgd2hlbiB0aGV5IGFyZSBkb2luZyB1c2VmdWwgd29yay4gIFRoZSBydW4gbGF0Y2ggaXMgdHlwaWNhbGx5IGNsZWFyZWQgaW4gdGhlIE9TIGlkbGUgbG9vcC4gIEdhdGluZyBieSB0aGUgcnVuIGxhdGNoIGZpbHRlcnMgb3V0IHRoZSBpZGxlIGxvb3AuCisKKyNHcm91cCAyMTMgcG1fY29tcGF0X2wxX2RjYWNoZV9sb2FkX3N0b3JlX21pc3MsIEwxIEQtQ2FjaGUgbG9hZC9zdG9yZSBtaXNzCitldmVudDowWDBENTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMjEzIDogKEdyb3VwIDIxMyBwbV9jb21wYXRfbDFfZGNhY2hlX2xvYWRfc3RvcmVfbWlzcykgTnVtYmVyIG9mIFBvd2VyUEMgSW5zdHJ1Y3Rpb25zIHRoYXQgY29tcGxldGVkLgorZXZlbnQ6MFgwRDUxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9TVF9GSU5fR1JQMjEzIDogKEdyb3VwIDIxMyBwbV9jb21wYXRfbDFfZGNhY2hlX2xvYWRfc3RvcmVfbWlzcykgU3RvcmUgcmVxdWVzdHMgc2VudCB0byB0aGUgbmVzdC4KK2V2ZW50OjBYMEQ1MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fU1RfTUlTU19MMV9HUlAyMTMgOiAoR3JvdXAgMjEzIHBtX2NvbXBhdF9sMV9kY2FjaGVfbG9hZF9zdG9yZV9taXNzKSBBIHN0b3JlIG1pc3NlZCB0aGUgZGNhY2hlLiAgQ29tYmluZWQgVW5pdCAwICsgMS4KK2V2ZW50OjBYMEQ1MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTERfTUlTU19MMV9HUlAyMTMgOiAoR3JvdXAgMjEzIHBtX2NvbXBhdF9sMV9kY2FjaGVfbG9hZF9zdG9yZV9taXNzKSBMb2FkIHJlZmVyZW5jZXMgdGhhdCBtaXNzIHRoZSBMZXZlbCAxIERhdGEgY2FjaGUuIENvbWJpbmVkIHVuaXQgMCArIDEuCitldmVudDowWDBENTQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQMjEzIDogKEdyb3VwIDIxMyBwbV9jb21wYXRfbDFfZGNhY2hlX2xvYWRfc3RvcmVfbWlzcykgTnVtYmVyIG9mIHJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkLgorZXZlbnQ6MFgwRDU1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAyMTMgOiAoR3JvdXAgMjEzIHBtX2NvbXBhdF9sMV9kY2FjaGVfbG9hZF9zdG9yZV9taXNzKSBQcm9jZXNzb3IgQ3ljbGVzIGdhdGVkIGJ5IHRoZSBydW4gbGF0Y2guICBPcGVyYXRpbmcgc3lzdGVtcyB1c2UgdGhlIHJ1biBsYXRjaCB0byBpbmRpY2F0ZSB3aGVuIHRoZXkgYXJlIGRvaW5nIHVzZWZ1bCB3b3JrLiAgVGhlIHJ1biBsYXRjaCBpcyB0eXBpY2FsbHkgY2xlYXJlZCBpbiB0aGUgT1MgaWRsZSBsb29wLiAgR2F0aW5nIGJ5IHRoZSBydW4gbGF0Y2ggZmlsdGVycyBvdXQgdGhlIGlkbGUgbG9vcC4KKworI0dyb3VwIDIxNCBwbV9jb21wYXRfbDFfY2FjaGVfbG9hZCwgTDEgQ2FjaGUgbG9hZHMKK2V2ZW50OjBYMEQ2MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAyMTQgOiAoR3JvdXAgMjE0IHBtX2NvbXBhdF9sMV9jYWNoZV9sb2FkKSBOdW1iZXIgb2YgUG93ZXJQQyBJbnN0cnVjdGlvbnMgdGhhdCBjb21wbGV0ZWQuCitldmVudDowWDBENjEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0RBVEFfRlJPTV9MMk1JU1NfR1JQMjE0IDogKEdyb3VwIDIxNCBwbV9jb21wYXRfbDFfY2FjaGVfbG9hZCkgVGhlIHByb2Nlc3NvcidzIERhdGEgQ2FjaGUgd2FzIHJlbG9hZGVkIGJ1dCBub3QgZnJvbSB0aGUgbG9jYWwgTDIuCitldmVudDowWDBENjIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0wxX0RDQUNIRV9SRUxPQURfVkFMSURfR1JQMjE0IDogKEdyb3VwIDIxNCBwbV9jb21wYXRfbDFfY2FjaGVfbG9hZCkgVGhlIGRhdGEgc291cmNlIGluZm9ybWF0aW9uIGlzIHZhbGlkLHRoZSBkYXRhIGNhY2hlIGhhcyBiZWVuIHJlbG9hZGVkLiAgUHJpb3IgdG8gUE9XRVI1KyB0aGlzIGluY2x1ZGVkIGRhdGEgY2FjaGUgcmVsb2FkcyBkdWUgdG8gcHJlZmV0Y2ggYWN0aXZpdHkuICBXaXRoIFBPV0VSNSsgdGhpcyBub3cgb25seSBpbmNsdWRlcyByZWxvYWRzIGR1ZSB0byBkZW1hbmQgbG9hZHMuCitldmVudDowWDBENjMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0xEX01JU1NfTDFfR1JQMjE0IDogKEdyb3VwIDIxNCBwbV9jb21wYXRfbDFfY2FjaGVfbG9hZCkgTG9hZCByZWZlcmVuY2VzIHRoYXQgbWlzcyB0aGUgTGV2ZWwgMSBEYXRhIGNhY2hlLiBDb21iaW5lZCB1bml0IDAgKyAxLgorZXZlbnQ6MFgwRDY0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDIxNCA6IChHcm91cCAyMTQgcG1fY29tcGF0X2wxX2NhY2hlX2xvYWQpIE51bWJlciBvZiBydW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZC4KK2V2ZW50OjBYMEQ2NSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQMjE0IDogKEdyb3VwIDIxNCBwbV9jb21wYXRfbDFfY2FjaGVfbG9hZCkgUHJvY2Vzc29yIEN5Y2xlcyBnYXRlZCBieSB0aGUgcnVuIGxhdGNoLiAgT3BlcmF0aW5nIHN5c3RlbXMgdXNlIHRoZSBydW4gbGF0Y2ggdG8gaW5kaWNhdGUgd2hlbiB0aGV5IGFyZSBkb2luZyB1c2VmdWwgd29yay4gIFRoZSBydW4gbGF0Y2ggaXMgdHlwaWNhbGx5IGNsZWFyZWQgaW4gdGhlIE9TIGlkbGUgbG9vcC4gIEdhdGluZyBieSB0aGUgcnVuIGxhdGNoIGZpbHRlcnMgb3V0IHRoZSBpZGxlIGxvb3AuCisKKyNHcm91cCAyMTUgcG1fY29tcGF0X2luc3RydWN0aW9uX2RpcmVjdG9yeSwgSW5zdHJ1Y3Rpb24gRGlyZWN0b3J5CitldmVudDowWDBENzAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lFUkFUX01JU1NfR1JQMjE1IDogKEdyb3VwIDIxNSBwbV9jb21wYXRfaW5zdHJ1Y3Rpb25fZGlyZWN0b3J5KSBBIHRyYW5zbGF0aW9uIHJlcXVlc3QgbWlzc2VkIHRoZSBJbnN0cnVjdGlvbiBFZmZlY3RpdmUgdG8gUmVhbCBBZGRyZXNzIFRyYW5zbGF0aW9uIChFUkFUKSB0YWJsZQorZXZlbnQ6MFgwRDcxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9MMV9JQ0FDSEVfTUlTU19HUlAyMTUgOiAoR3JvdXAgMjE1IHBtX2NvbXBhdF9pbnN0cnVjdGlvbl9kaXJlY3RvcnkpIEFuIGluc3RydWN0aW9uIGZldGNoIHJlcXVlc3QgbWlzc2VkIHRoZSBMMSBjYWNoZS4KK2V2ZW50OjBYMEQ3MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAyMTUgOiAoR3JvdXAgMjE1IHBtX2NvbXBhdF9pbnN0cnVjdGlvbl9kaXJlY3RvcnkpIE51bWJlciBvZiBQb3dlclBDIEluc3RydWN0aW9ucyB0aGF0IGNvbXBsZXRlZC4KK2V2ZW50OjBYMEQ3MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fSVRMQl9NSVNTX0dSUDIxNSA6IChHcm91cCAyMTUgcG1fY29tcGF0X2luc3RydWN0aW9uX2RpcmVjdG9yeSkgQSBUTEIgbWlzcyBmb3IgYW4gSW5zdHJ1Y3Rpb24gRmV0Y2ggaGFzIG9jY3VycmVkCitldmVudDowWDBENzQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQMjE1IDogKEdyb3VwIDIxNSBwbV9jb21wYXRfaW5zdHJ1Y3Rpb25fZGlyZWN0b3J5KSBOdW1iZXIgb2YgcnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQuCitldmVudDowWDBENzUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDIxNSA6IChHcm91cCAyMTUgcG1fY29tcGF0X2luc3RydWN0aW9uX2RpcmVjdG9yeSkgUHJvY2Vzc29yIEN5Y2xlcyBnYXRlZCBieSB0aGUgcnVuIGxhdGNoLiAgT3BlcmF0aW5nIHN5c3RlbXMgdXNlIHRoZSBydW4gbGF0Y2ggdG8gaW5kaWNhdGUgd2hlbiB0aGV5IGFyZSBkb2luZyB1c2VmdWwgd29yay4gIFRoZSBydW4gbGF0Y2ggaXMgdHlwaWNhbGx5IGNsZWFyZWQgaW4gdGhlIE9TIGlkbGUgbG9vcC4gIEdhdGluZyBieSB0aGUgcnVuIGxhdGNoIGZpbHRlcnMgb3V0IHRoZSBpZGxlIGxvb3AuCisKKyNHcm91cCAyMTYgcG1fY29tcGF0X3N1c3BlbmQsIFN1c3BlbmQgRXZlbnRzCitldmVudDowWDBEODAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1NVU1BFTkRFRF9HUlAyMTYgOiAoR3JvdXAgMjE2IHBtX2NvbXBhdF9zdXNwZW5kKSBUaGUgY291bnRlciBpcyBzdXNwZW5kZWQgKGRvZXMgbm90IGNvdW50KQorZXZlbnQ6MFgwRDgxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9TVVNQRU5ERURfR1JQMjE2IDogKEdyb3VwIDIxNiBwbV9jb21wYXRfc3VzcGVuZCkgVGhlIGNvdW50ZXIgaXMgc3VzcGVuZGVkIChkb2VzIG5vdCBjb3VudCkKK2V2ZW50OjBYMEQ4MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fU1VTUEVOREVEX0dSUDIxNiA6IChHcm91cCAyMTYgcG1fY29tcGF0X3N1c3BlbmQpIFRoZSBjb3VudGVyIGlzIHN1c3BlbmRlZCAoZG9lcyBub3QgY291bnQpCitldmVudDowWDBEODMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1NVU1BFTkRFRF9HUlAyMTYgOiAoR3JvdXAgMjE2IHBtX2NvbXBhdF9zdXNwZW5kKSBUaGUgY291bnRlciBpcyBzdXNwZW5kZWQgKGRvZXMgbm90IGNvdW50KQorZXZlbnQ6MFgwRDg0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDIxNiA6IChHcm91cCAyMTYgcG1fY29tcGF0X3N1c3BlbmQpIE51bWJlciBvZiBydW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZC4KK2V2ZW50OjBYMEQ4NSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQMjE2IDogKEdyb3VwIDIxNiBwbV9jb21wYXRfc3VzcGVuZCkgUHJvY2Vzc29yIEN5Y2xlcyBnYXRlZCBieSB0aGUgcnVuIGxhdGNoLiAgT3BlcmF0aW5nIHN5c3RlbXMgdXNlIHRoZSBydW4gbGF0Y2ggdG8gaW5kaWNhdGUgd2hlbiB0aGV5IGFyZSBkb2luZyB1c2VmdWwgd29yay4gIFRoZSBydW4gbGF0Y2ggaXMgdHlwaWNhbGx5IGNsZWFyZWQgaW4gdGhlIE9TIGlkbGUgbG9vcC4gIEdhdGluZyBieSB0aGUgcnVuIGxhdGNoIGZpbHRlcnMgb3V0IHRoZSBpZGxlIGxvb3AuCisKKyNHcm91cCAyMTcgcG1fY29tcGF0X21pc2NfZXZlbnRzMSwgTWlzYyBFdmVudHMKK2V2ZW50OjBYMEQ5MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAyMTcgOiAoR3JvdXAgMjE3IHBtX2NvbXBhdF9taXNjX2V2ZW50czEpIE51bWJlciBvZiBQb3dlclBDIEluc3RydWN0aW9ucyB0aGF0IGNvbXBsZXRlZC4KK2V2ZW50OjBYMEQ5MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fRVhUX0lOVF9HUlAyMTcgOiAoR3JvdXAgMjE3IHBtX2NvbXBhdF9taXNjX2V2ZW50czEpIEFuIGludGVycnVwdCBkdWUgdG8gYW4gZXh0ZXJuYWwgZXhjZXB0aW9uIG9jY3VycmVkCitldmVudDowWDBEOTIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1RCX0JJVF9UUkFOU19HUlAyMTcgOiAoR3JvdXAgMjE3IHBtX2NvbXBhdF9taXNjX2V2ZW50czEpIFdoZW4gdGhlIHNlbGVjdGVkIHRpbWUgYmFzZSBiaXQgKGFzIHNwZWNpZmllZCBpbiBNTUNSMFtUQlNFTF0pdHJhbnNpdGlvbnMgZnJvbSAwIHRvIDEKK2V2ZW50OjBYMEQ5MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlAyMTcgOiAoR3JvdXAgMjE3IHBtX2NvbXBhdF9taXNjX2V2ZW50czEpIFByb2Nlc3NvciBDeWNsZXMKK2V2ZW50OjBYMEQ5NCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlAyMTcgOiAoR3JvdXAgMjE3IHBtX2NvbXBhdF9taXNjX2V2ZW50czEpIE51bWJlciBvZiBydW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZC4KK2V2ZW50OjBYMEQ5NSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQMjE3IDogKEdyb3VwIDIxNyBwbV9jb21wYXRfbWlzY19ldmVudHMxKSBQcm9jZXNzb3IgQ3ljbGVzIGdhdGVkIGJ5IHRoZSBydW4gbGF0Y2guICBPcGVyYXRpbmcgc3lzdGVtcyB1c2UgdGhlIHJ1biBsYXRjaCB0byBpbmRpY2F0ZSB3aGVuIHRoZXkgYXJlIGRvaW5nIHVzZWZ1bCB3b3JrLiAgVGhlIHJ1biBsYXRjaCBpcyB0eXBpY2FsbHkgY2xlYXJlZCBpbiB0aGUgT1MgaWRsZSBsb29wLiAgR2F0aW5nIGJ5IHRoZSBydW4gbGF0Y2ggZmlsdGVycyBvdXQgdGhlIGlkbGUgbG9vcC4KKworI0dyb3VwIDIxOCBwbV9jb21wYXRfbWlzY19ldmVudHMyLCBNaXNjIEV2ZW50cworZXZlbnQ6MFgwREEwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9JTlNUX0lNQ19NQVRDSF9DTVBMX0dSUDIxOCA6IChHcm91cCAyMTggcG1fY29tcGF0X21pc2NfZXZlbnRzMikgTnVtYmVyIG9mIGluc3RydWN0aW9ucyByZXN1bHRpbmcgZnJvbSB0aGUgbWFya2VkIGluc3RydWN0aW9ucyBleHBhbnNpb24gdGhhdCBjb21wbGV0ZWQuCitldmVudDowWDBEQTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lOU1RfRElTUF9HUlAyMTggOiAoR3JvdXAgMjE4IHBtX2NvbXBhdF9taXNjX2V2ZW50czIpIE51bWJlciBvZiBQb3dlclBDIGluc3RydWN0aW9ucyBzdWNjZXNzZnVsbHkgZGlzcGF0Y2hlZC4KK2V2ZW50OjBYMERBMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fVEhSRF9DT05DX1JVTl9JTlNUX0dSUDIxOCA6IChHcm91cCAyMTggcG1fY29tcGF0X21pc2NfZXZlbnRzMikgSW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZCBieSB0aGlzIHRocmVhZCB3aGVuIGJvdGggdGhyZWFkcyBoYWQgdGhlaXIgcnVuIGxhdGNoZXMgc2V0LgorZXZlbnQ6MFgwREEzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9GTFVTSF9HUlAyMTggOiAoR3JvdXAgMjE4IHBtX2NvbXBhdF9taXNjX2V2ZW50czIpIEZsdXNoZXMgb2NjdXJyZWQgaW5jbHVkaW5nIExTVSBhbmQgQnJhbmNoIGZsdXNoZXMuCitldmVudDowWDBEQTQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQMjE4IDogKEdyb3VwIDIxOCBwbV9jb21wYXRfbWlzY19ldmVudHMyKSBOdW1iZXIgb2YgcnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQuCitldmVudDowWDBEQTUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDIxOCA6IChHcm91cCAyMTggcG1fY29tcGF0X21pc2NfZXZlbnRzMikgUHJvY2Vzc29yIEN5Y2xlcyBnYXRlZCBieSB0aGUgcnVuIGxhdGNoLiAgT3BlcmF0aW5nIHN5c3RlbXMgdXNlIHRoZSBydW4gbGF0Y2ggdG8gaW5kaWNhdGUgd2hlbiB0aGV5IGFyZSBkb2luZyB1c2VmdWwgd29yay4gIFRoZSBydW4gbGF0Y2ggaXMgdHlwaWNhbGx5IGNsZWFyZWQgaW4gdGhlIE9TIGlkbGUgbG9vcC4gIEdhdGluZyBieSB0aGUgcnVuIGxhdGNoIGZpbHRlcnMgb3V0IHRoZSBpZGxlIGxvb3AuCisKKyNHcm91cCAyMTkgcG1fY29tcGF0X21pc2NfZXZlbnRzMywgTWlzYyBFdmVudHMKK2V2ZW50OjBYMERCMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fR0NUX05PU0xPVF9DWUNfR1JQMjE5IDogKEdyb3VwIDIxOSBwbV9jb21wYXRfbWlzY19ldmVudHMzKSBDeWNsZXMgd2hlbiB0aGUgR2xvYmFsIENvbXBsZXRpb24gVGFibGUgaGFzIG5vIHNsb3RzIGZyb20gdGhpcyB0aHJlYWQuCitldmVudDowWDBEQjEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX0lOU1RfRElTUF9HUlAyMTkgOiAoR3JvdXAgMjE5IHBtX2NvbXBhdF9taXNjX2V2ZW50czMpIE51bWJlciBvZiBQb3dlclBDIGluc3RydWN0aW9ucyBzdWNjZXNzZnVsbHkgZGlzcGF0Y2hlZC4KK2V2ZW50OjBYMERCMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0NZQ19HUlAyMTkgOiAoR3JvdXAgMjE5IHBtX2NvbXBhdF9taXNjX2V2ZW50czMpIFByb2Nlc3NvciBDeWNsZXMKK2V2ZW50OjBYMERCMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fQlJfTVBSRURfR1JQMjE5IDogKEdyb3VwIDIxOSBwbV9jb21wYXRfbWlzY19ldmVudHMzKSBBIGJyYW5jaCBpbnN0cnVjdGlvbiB3YXMgaW5jb3JyZWN0bHkgcHJlZGljdGVkLiBUaGlzIGNvdWxkIGhhdmUgYmVlbiBhIHRhcmdldCBwcmVkaWN0aW9uLCBhIGNvbmRpdGlvbiBwcmVkaWN0aW9uLCBvciBib3RoCitldmVudDowWDBEQjQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQMjE5IDogKEdyb3VwIDIxOSBwbV9jb21wYXRfbWlzY19ldmVudHMzKSBOdW1iZXIgb2YgcnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQuCitldmVudDowWDBEQjUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDIxOSA6IChHcm91cCAyMTkgcG1fY29tcGF0X21pc2NfZXZlbnRzMykgUHJvY2Vzc29yIEN5Y2xlcyBnYXRlZCBieSB0aGUgcnVuIGxhdGNoLiAgT3BlcmF0aW5nIHN5c3RlbXMgdXNlIHRoZSBydW4gbGF0Y2ggdG8gaW5kaWNhdGUgd2hlbiB0aGV5IGFyZSBkb2luZyB1c2VmdWwgd29yay4gIFRoZSBydW4gbGF0Y2ggaXMgdHlwaWNhbGx5IGNsZWFyZWQgaW4gdGhlIE9TIGlkbGUgbG9vcC4gIEdhdGluZyBieSB0aGUgcnVuIGxhdGNoIGZpbHRlcnMgb3V0IHRoZSBpZGxlIGxvb3AuCisKKyNHcm91cCAyMjAgcG1fbXJrX2JyLCBNYXJrZWQgQnJhbmNoIGV2ZW50cworZXZlbnQ6MFgwREMwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfQlJfVEFLRU5fR1JQMjIwIDogKEdyb3VwIDIyMCBwbV9tcmtfYnIpIEEgbWFya2VkIGJyYW5jaCB3YXMgdGFrZW4KK2V2ZW50OjBYMERDMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0xEX01JU1NfTDFfR1JQMjIwIDogKEdyb3VwIDIyMCBwbV9tcmtfYnIpIE1hcmtlZCBMMSBEIGNhY2hlIGxvYWQgbWlzc2VzCitldmVudDowWDBEQzIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19CUl9NUFJFRF9HUlAyMjAgOiAoR3JvdXAgMjIwIHBtX21ya19icikgQSBtYXJrZWQgYnJhbmNoIHdhcyBtaXNwcmVkaWN0ZWQKK2V2ZW50OjBYMERDMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAyMjAgOiAoR3JvdXAgMjIwIHBtX21ya19icikgTnVtYmVyIG9mIFBvd2VyUEMgSW5zdHJ1Y3Rpb25zIHRoYXQgY29tcGxldGVkLgorZXZlbnQ6MFgwREM0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDIyMCA6IChHcm91cCAyMjAgcG1fbXJrX2JyKSBOdW1iZXIgb2YgcnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQuCitldmVudDowWDBEQzUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDIyMCA6IChHcm91cCAyMjAgcG1fbXJrX2JyKSBQcm9jZXNzb3IgQ3ljbGVzIGdhdGVkIGJ5IHRoZSBydW4gbGF0Y2guICBPcGVyYXRpbmcgc3lzdGVtcyB1c2UgdGhlIHJ1biBsYXRjaCB0byBpbmRpY2F0ZSB3aGVuIHRoZXkgYXJlIGRvaW5nIHVzZWZ1bCB3b3JrLiAgVGhlIHJ1biBsYXRjaCBpcyB0eXBpY2FsbHkgY2xlYXJlZCBpbiB0aGUgT1MgaWRsZSBsb29wLiAgR2F0aW5nIGJ5IHRoZSBydW4gbGF0Y2ggZmlsdGVycyBvdXQgdGhlIGlkbGUgbG9vcC4KKworI0dyb3VwIDIyMSBwbV9tcmtfZHNvdXJjZTEsIE1hcmtlZCBkYXRhIHNvdXJjZXMKK2V2ZW50OjBYMEREMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0RBVEFfRlJPTV9ETUVNX0dSUDIyMSA6IChHcm91cCAyMjEgcG1fbXJrX2Rzb3VyY2UxKSBUaGUgcHJvY2Vzc29yJ3MgRGF0YSBDYWNoZSB3YXMgcmVsb2FkZWQgd2l0aCBkYXRhIGZyb20gbWVtb3J5IGF0dGFjaGVkIHRvIGEgZGlzdGFudCBtb2R1bGUgZHVlIHRvIGEgbWFya2VkIGxvYWQuCitldmVudDowWDBERDEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19EQVRBX0ZST01fRE1FTV9DWUNfR1JQMjIxIDogKEdyb3VwIDIyMSBwbV9tcmtfZHNvdXJjZTEpIE1hcmtlZCBsZCBsYXRlbmN5IERhdGEgU291cmNlIDExMTAgKERpc3RhbnQgTWVtb3J5KQorZXZlbnQ6MFgwREQyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfREFUQV9GUk9NX0wyMV9NT0RfR1JQMjIxIDogKEdyb3VwIDIyMSBwbV9tcmtfZHNvdXJjZTEpIE1hcmtlZCBkYXRhIGxvYWRlZCBmcm9tIGFub3RoZXIgTDIgb24gc2FtZSBjaGlwIG1vZGlmaWVkCitldmVudDowWDBERDMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19EQVRBX0ZST01fTDIxX01PRF9DWUNfR1JQMjIxIDogKEdyb3VwIDIyMSBwbV9tcmtfZHNvdXJjZTEpIE1hcmtlZCBsZCBsYXRlbmN5IERhdGEgc291cmNlIDAxMDEgKEwyLjEgTSBzYW1lIGNoaXApCitldmVudDowWDBERDQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQMjIxIDogKEdyb3VwIDIyMSBwbV9tcmtfZHNvdXJjZTEpIE51bWJlciBvZiBydW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZC4KK2V2ZW50OjBYMERENSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQMjIxIDogKEdyb3VwIDIyMSBwbV9tcmtfZHNvdXJjZTEpIFByb2Nlc3NvciBDeWNsZXMgZ2F0ZWQgYnkgdGhlIHJ1biBsYXRjaC4gIE9wZXJhdGluZyBzeXN0ZW1zIHVzZSB0aGUgcnVuIGxhdGNoIHRvIGluZGljYXRlIHdoZW4gdGhleSBhcmUgZG9pbmcgdXNlZnVsIHdvcmsuICBUaGUgcnVuIGxhdGNoIGlzIHR5cGljYWxseSBjbGVhcmVkIGluIHRoZSBPUyBpZGxlIGxvb3AuICBHYXRpbmcgYnkgdGhlIHJ1biBsYXRjaCBmaWx0ZXJzIG91dCB0aGUgaWRsZSBsb29wLgorCisjR3JvdXAgMjIyIHBtX21ya19kc291cmNlMiwgTWFya2VkIGRhdGEgc291cmNlcworZXZlbnQ6MFgwREUwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfREFUQV9GUk9NX0wzX0dSUDIyMiA6IChHcm91cCAyMjIgcG1fbXJrX2Rzb3VyY2UyKSBUaGUgcHJvY2Vzc29yJ3MgRGF0YSBDYWNoZSB3YXMgcmVsb2FkZWQgZnJvbSB0aGUgbG9jYWwgTDMgZHVlIHRvIGEgbWFya2VkIGxvYWQuCitldmVudDowWDBERTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19EQVRBX0ZST01fTE1FTV9DWUNfR1JQMjIyIDogKEdyb3VwIDIyMiBwbV9tcmtfZHNvdXJjZTIpIEN5Y2xlcyBhIG1hcmtlZCBsb2FkIHdhaXRlZCBmb3IgZGF0YSBmcm9tIHRoaXMgbGV2ZWwgb2YgdGhlIHN0b3JhZ2Ugc3lzdGVtLiAgQ291bnRpbmcgYmVnaW5zIHdoZW4gYSBtYXJrZWQgbG9hZCBtaXNzZXMgdGhlIGRhdGEgY2FjaGUgYW5kIGVuZHMgd2hlbiB0aGUgZGF0YSBpcyByZWxvYWRlZCBpbnRvIHRoZSBkYXRhIGNhY2hlLiAgVG8gY2FsY3VsYXRlIGF2ZXJhZ2UgbGF0ZW5jeSBkaXZpZGUgdGhpcyBjb3VudCBieSB0aGUgbnVtYmVyIG9mIG1hcmtlZCBtaXNzZXMgdG8gdGhlIHNhbWUgbGV2ZWwuCitldmVudDowWDBERTIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19EQVRBX0ZST01fTE1FTV9HUlAyMjIgOiAoR3JvdXAgMjIyIHBtX21ya19kc291cmNlMikgVGhlIHByb2Nlc3NvcidzIERhdGEgQ2FjaGUgd2FzIHJlbG9hZGVkIGR1ZSB0byBhIG1hcmtlZCBsb2FkIGZyb20gbWVtb3J5IGF0dGFjaGVkIHRvIHRoZSBzYW1lIG1vZHVsZSB0aGlzIHByb2Nlc3NvciBpcyBsb2NhdGVkIG9uLgorZXZlbnQ6MFgwREUzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfREFUQV9GUk9NX0wzX0NZQ19HUlAyMjIgOiAoR3JvdXAgMjIyIHBtX21ya19kc291cmNlMikgQ3ljbGVzIGEgbWFya2VkIGxvYWQgd2FpdGVkIGZvciBkYXRhIGZyb20gdGhpcyBsZXZlbCBvZiB0aGUgc3RvcmFnZSBzeXN0ZW0uICBDb3VudGluZyBiZWdpbnMgd2hlbiBhIG1hcmtlZCBsb2FkIG1pc3NlcyB0aGUgZGF0YSBjYWNoZSBhbmQgZW5kcyB3aGVuIHRoZSBkYXRhIGlzIHJlbG9hZGVkIGludG8gdGhlIGRhdGEgY2FjaGUuICBUbyBjYWxjdWxhdGUgYXZlcmFnZSBsYXRlbmN5IGRpdmlkZSB0aGlzIGNvdW50IGJ5IHRoZSBudW1iZXIgb2YgbWFya2VkIG1pc3NlcyB0byB0aGUgc2FtZSBsZXZlbC4KK2V2ZW50OjBYMERFNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlAyMjIgOiAoR3JvdXAgMjIyIHBtX21ya19kc291cmNlMikgTnVtYmVyIG9mIHJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkLgorZXZlbnQ6MFgwREU1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAyMjIgOiAoR3JvdXAgMjIyIHBtX21ya19kc291cmNlMikgUHJvY2Vzc29yIEN5Y2xlcyBnYXRlZCBieSB0aGUgcnVuIGxhdGNoLiAgT3BlcmF0aW5nIHN5c3RlbXMgdXNlIHRoZSBydW4gbGF0Y2ggdG8gaW5kaWNhdGUgd2hlbiB0aGV5IGFyZSBkb2luZyB1c2VmdWwgd29yay4gIFRoZSBydW4gbGF0Y2ggaXMgdHlwaWNhbGx5IGNsZWFyZWQgaW4gdGhlIE9TIGlkbGUgbG9vcC4gIEdhdGluZyBieSB0aGUgcnVuIGxhdGNoIGZpbHRlcnMgb3V0IHRoZSBpZGxlIGxvb3AuCisKKyNHcm91cCAyMjMgcG1fbXJrX2Rzb3VyY2UzLCBNYXJrZWQgZGF0YSBzb3VyY2VzCitldmVudDowWDBERjAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19EQVRBX0ZST01fTDMxX01PRF9HUlAyMjMgOiAoR3JvdXAgMjIzIHBtX21ya19kc291cmNlMykgTWFya2VkIGRhdGEgbG9hZGVkIGZyb20gYW5vdGhlciBMMyBvbiBzYW1lIGNoaXAgbW9kaWZpZWQKK2V2ZW50OjBYMERGMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0RBVEFfRlJPTV9MMjFfU0hSX0NZQ19HUlAyMjMgOiAoR3JvdXAgMjIzIHBtX21ya19kc291cmNlMykgTWFya2VkIGxvYWQgbGF0ZW5jeSBEYXRhIHNvdXJjZSAwMTAwIChMMi4xIFMpCitldmVudDowWDBERjIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19EQVRBX0ZST01fTDIxX1NIUl9HUlAyMjMgOiAoR3JvdXAgMjIzIHBtX21ya19kc291cmNlMykgTWFya2VkIGRhdGEgbG9hZGVkIGZyb20gYW5vdGhlciBMMiBvbiBzYW1lIGNoaXAgc2hhcmVkCitldmVudDowWDBERjMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19EQVRBX0ZST01fTDMxX01PRF9DWUNfR1JQMjIzIDogKEdyb3VwIDIyMyBwbV9tcmtfZHNvdXJjZTMpIE1hcmtlZCBsZCBsYXRlbmN5IERhdGEgc291cmNlIDAxMTEgIChMMy4xIE0gc2FtZSBjaGlwKQorZXZlbnQ6MFgwREY0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDIyMyA6IChHcm91cCAyMjMgcG1fbXJrX2Rzb3VyY2UzKSBOdW1iZXIgb2YgcnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQuCitldmVudDowWDBERjUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDIyMyA6IChHcm91cCAyMjMgcG1fbXJrX2Rzb3VyY2UzKSBQcm9jZXNzb3IgQ3ljbGVzIGdhdGVkIGJ5IHRoZSBydW4gbGF0Y2guICBPcGVyYXRpbmcgc3lzdGVtcyB1c2UgdGhlIHJ1biBsYXRjaCB0byBpbmRpY2F0ZSB3aGVuIHRoZXkgYXJlIGRvaW5nIHVzZWZ1bCB3b3JrLiAgVGhlIHJ1biBsYXRjaCBpcyB0eXBpY2FsbHkgY2xlYXJlZCBpbiB0aGUgT1MgaWRsZSBsb29wLiAgR2F0aW5nIGJ5IHRoZSBydW4gbGF0Y2ggZmlsdGVycyBvdXQgdGhlIGlkbGUgbG9vcC4KKworI0dyb3VwIDIyNCBwbV9tcmtfZHNvdXJjZTQsIE1hcmtlZCBkYXRhIHNvdXJjZXMKK2V2ZW50OjBYMEUwMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0RBVEFfRlJPTV9MMl9HUlAyMjQgOiAoR3JvdXAgMjI0IHBtX21ya19kc291cmNlNCkgVGhlIHByb2Nlc3NvcidzIERhdGEgQ2FjaGUgd2FzIHJlbG9hZGVkIGZyb20gdGhlIGxvY2FsIEwyIGR1ZSB0byBhIG1hcmtlZCBsb2FkLgorZXZlbnQ6MFgwRTAxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfREFUQV9GUk9NX0wyX0NZQ19HUlAyMjQgOiAoR3JvdXAgMjI0IHBtX21ya19kc291cmNlNCkgQ3ljbGVzIGEgbWFya2VkIGxvYWQgd2FpdGVkIGZvciBkYXRhIGZyb20gdGhpcyBsZXZlbCBvZiB0aGUgc3RvcmFnZSBzeXN0ZW0uICBDb3VudGluZyBiZWdpbnMgd2hlbiBhIG1hcmtlZCBsb2FkIG1pc3NlcyB0aGUgZGF0YSBjYWNoZSBhbmQgZW5kcyB3aGVuIHRoZSBkYXRhIGlzIHJlbG9hZGVkIGludG8gdGhlIGRhdGEgY2FjaGUuICBUbyBjYWxjdWxhdGUgYXZlcmFnZSBsYXRlbmN5IGRpdmlkZSB0aGlzIGNvdW50IGJ5IHRoZSBudW1iZXIgb2YgbWFya2VkIG1pc3NlcyB0byB0aGUgc2FtZSBsZXZlbC4KK2V2ZW50OjBYMEUwMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fREFUQV9GUk9NX1JNRU1fR1JQMjI0IDogKEdyb3VwIDIyNCBwbV9tcmtfZHNvdXJjZTQpIFRoZSBwcm9jZXNzb3IncyBEYXRhIENhY2hlIHdhcyByZWxvYWRlZCBmcm9tIG1lbW9yeSBhdHRhY2hlZCB0byBhIGRpZmZlcmVudCBtb2R1bGUgdGhhbiB0aGlzIHByb2Nlc3NvciBpcyBsb2NhdGVkIG9uLgorZXZlbnQ6MFgwRTAzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9EQVRBX0ZST01fTE1FTV9HUlAyMjQgOiAoR3JvdXAgMjI0IHBtX21ya19kc291cmNlNCkgVGhlIHByb2Nlc3NvcidzIERhdGEgQ2FjaGUgd2FzIHJlbG9hZGVkIGZyb20gbWVtb3J5IGF0dGFjaGVkIHRvIHRoZSBzYW1lIG1vZHVsZSB0aGlzIHByb2Nlc3NvciBpcyBsb2NhdGVkIG9uLgorZXZlbnQ6MFgwRTA0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDIyNCA6IChHcm91cCAyMjQgcG1fbXJrX2Rzb3VyY2U0KSBOdW1iZXIgb2YgcnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQuCitldmVudDowWDBFMDUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDIyNCA6IChHcm91cCAyMjQgcG1fbXJrX2Rzb3VyY2U0KSBQcm9jZXNzb3IgQ3ljbGVzIGdhdGVkIGJ5IHRoZSBydW4gbGF0Y2guICBPcGVyYXRpbmcgc3lzdGVtcyB1c2UgdGhlIHJ1biBsYXRjaCB0byBpbmRpY2F0ZSB3aGVuIHRoZXkgYXJlIGRvaW5nIHVzZWZ1bCB3b3JrLiAgVGhlIHJ1biBsYXRjaCBpcyB0eXBpY2FsbHkgY2xlYXJlZCBpbiB0aGUgT1MgaWRsZSBsb29wLiAgR2F0aW5nIGJ5IHRoZSBydW4gbGF0Y2ggZmlsdGVycyBvdXQgdGhlIGlkbGUgbG9vcC4KKworI0dyb3VwIDIyNSBwbV9tcmtfZHNvdXJjZTUsIE1hcmtlZCBkYXRhIHNvdXJjZXMKK2V2ZW50OjBYMEUxMCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0RBVEFfRlJPTV9STDJMM19NT0RfR1JQMjI1IDogKEdyb3VwIDIyNSBwbV9tcmtfZHNvdXJjZTUpIFRoZSBwcm9jZXNzb3IncyBEYXRhIENhY2hlIHdhcyByZWxvYWRlZCB3aXRoIG1vZGlmaWVkIChNKSBkYXRhIGZyb20gYW4gTDIgIG9yIEwzIG9uIGEgcmVtb3RlIG1vZHVsZSBkdWUgdG8gYSBtYXJrZWQgbG9hZC4KK2V2ZW50OjBYMEUxMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0RBVEFfRlJPTV9ETDJMM19TSFJfQ1lDX0dSUDIyNSA6IChHcm91cCAyMjUgcG1fbXJrX2Rzb3VyY2U1KSBNYXJrZWQgbGQgbGF0ZW5jeSBEYXRhIFNvdXJjZSAxMDEwIChEaXN0YW50IEwyLjc1L0wzLjc1IFMpCitldmVudDowWDBFMTIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19EQVRBX0ZST01fREwyTDNfU0hSX0dSUDIyNSA6IChHcm91cCAyMjUgcG1fbXJrX2Rzb3VyY2U1KSBUaGUgcHJvY2Vzc29yJ3MgRGF0YSBDYWNoZSB3YXMgcmVsb2FkZWQgd2l0aCBzaGFyZWQgKFQgb3IgU0wpIGRhdGEgZnJvbSBhbiBMMiBvciBMMyBvbiBhIGRpc3RhbnQgbW9kdWxlIGR1ZSB0byBhIG1hcmtlZCBsb2FkLgorZXZlbnQ6MFgwRTEzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfREFUQV9GUk9NX1JMMkwzX01PRF9DWUNfR1JQMjI1IDogKEdyb3VwIDIyNSBwbV9tcmtfZHNvdXJjZTUpIE1hcmtlZCBsZCBsYXRlbmN5IERhdGEgc291cmNlIDEwMDEgKEwyLjUvTDMuNSBNIHNhbWUgNCBjaGlwIG5vZGUpCitldmVudDowWDBFMTQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQMjI1IDogKEdyb3VwIDIyNSBwbV9tcmtfZHNvdXJjZTUpIE51bWJlciBvZiBydW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZC4KK2V2ZW50OjBYMEUxNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQMjI1IDogKEdyb3VwIDIyNSBwbV9tcmtfZHNvdXJjZTUpIFByb2Nlc3NvciBDeWNsZXMgZ2F0ZWQgYnkgdGhlIHJ1biBsYXRjaC4gIE9wZXJhdGluZyBzeXN0ZW1zIHVzZSB0aGUgcnVuIGxhdGNoIHRvIGluZGljYXRlIHdoZW4gdGhleSBhcmUgZG9pbmcgdXNlZnVsIHdvcmsuICBUaGUgcnVuIGxhdGNoIGlzIHR5cGljYWxseSBjbGVhcmVkIGluIHRoZSBPUyBpZGxlIGxvb3AuICBHYXRpbmcgYnkgdGhlIHJ1biBsYXRjaCBmaWx0ZXJzIG91dCB0aGUgaWRsZSBsb29wLgorCisjR3JvdXAgMjI2IHBtX21ya19kc291cmNlNiwgTWFya2VkIGRhdGEgc291cmNlcworZXZlbnQ6MFgwRTIwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfREFUQV9GUk9NX1JMMkwzX1NIUl9HUlAyMjYgOiAoR3JvdXAgMjI2IHBtX21ya19kc291cmNlNikgVGhlIHByb2Nlc3NvcidzIERhdGEgQ2FjaGUgd2FzIHJlbG9hZGVkIHdpdGggc2hhcmVkIChUIG9yIFNMKSBkYXRhIGZyb20gYW4gTDIgb3IgTDMgb24gYSByZW1vdGUgbW9kdWxlIGR1ZSB0byBhIG1hcmtlZCBsb2FkCitldmVudDowWDBFMjEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19EQVRBX0ZST01fUkwyTDNfU0hSX0NZQ19HUlAyMjYgOiAoR3JvdXAgMjI2IHBtX21ya19kc291cmNlNikgTWFya2VkIGxvYWQgbGF0ZW5jeSBEYXRhIFNvdXJjZSAxMDAwIChSZW1vdGUgTDIuNS9MMy41IFMpCitldmVudDowWDBFMjIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19EQVRBX0ZST01fUk1FTV9HUlAyMjYgOiAoR3JvdXAgMjI2IHBtX21ya19kc291cmNlNikgVGhlIHByb2Nlc3NvcidzIERhdGEgQ2FjaGUgd2FzIHJlbG9hZGVkIGR1ZSB0byBhIG1hcmtlZCBsb2FkIGZyb20gbWVtb3J5IGF0dGFjaGVkIHRvIGEgZGlmZmVyZW50IG1vZHVsZSB0aGFuIHRoaXMgcHJvY2Vzc29yIGlzIGxvY2F0ZWQgb24uCitldmVudDowWDBFMjMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19EQVRBX0ZST01fUk1FTV9DWUNfR1JQMjI2IDogKEdyb3VwIDIyNiBwbV9tcmtfZHNvdXJjZTYpIEN5Y2xlcyBhIG1hcmtlZCBsb2FkIHdhaXRlZCBmb3IgZGF0YSBmcm9tIHRoaXMgbGV2ZWwgb2YgdGhlIHN0b3JhZ2Ugc3lzdGVtLiAgQ291bnRpbmcgYmVnaW5zIHdoZW4gYSBtYXJrZWQgbG9hZCBtaXNzZXMgdGhlIGRhdGEgY2FjaGUgYW5kIGVuZHMgd2hlbiB0aGUgZGF0YSBpcyByZWxvYWRlZCBpbnRvIHRoZSBkYXRhIGNhY2hlLiAgVG8gY2FsY3VsYXRlIGF2ZXJhZ2UgbGF0ZW5jeSBkaXZpZGUgdGhpcyBjb3VudCBieSB0aGUgbnVtYmVyIG9mIG1hcmtlZCBtaXNzZXMgdG8gdGhlIHNhbWUgbGV2ZWwuCitldmVudDowWDBFMjQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQMjI2IDogKEdyb3VwIDIyNiBwbV9tcmtfZHNvdXJjZTYpIE51bWJlciBvZiBydW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZC4KK2V2ZW50OjBYMEUyNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQMjI2IDogKEdyb3VwIDIyNiBwbV9tcmtfZHNvdXJjZTYpIFByb2Nlc3NvciBDeWNsZXMgZ2F0ZWQgYnkgdGhlIHJ1biBsYXRjaC4gIE9wZXJhdGluZyBzeXN0ZW1zIHVzZSB0aGUgcnVuIGxhdGNoIHRvIGluZGljYXRlIHdoZW4gdGhleSBhcmUgZG9pbmcgdXNlZnVsIHdvcmsuICBUaGUgcnVuIGxhdGNoIGlzIHR5cGljYWxseSBjbGVhcmVkIGluIHRoZSBPUyBpZGxlIGxvb3AuICBHYXRpbmcgYnkgdGhlIHJ1biBsYXRjaCBmaWx0ZXJzIG91dCB0aGUgaWRsZSBsb29wLgorCisjR3JvdXAgMjI3IHBtX21ya19kc291cmNlNywgTWFya2VkIGRhdGEgc291cmNlcworZXZlbnQ6MFgwRTMwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfREFUQV9GUk9NX0wzMV9TSFJfR1JQMjI3IDogKEdyb3VwIDIyNyBwbV9tcmtfZHNvdXJjZTcpIE1hcmtlZCBkYXRhIGxvYWRlZCBmcm9tIGFub3RoZXIgTDMgb24gc2FtZSBjaGlwIHNoYXJlZAorZXZlbnQ6MFgwRTMxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfREFUQV9GUk9NX0wzMV9TSFJfQ1lDX0dSUDIyNyA6IChHcm91cCAyMjcgcG1fbXJrX2Rzb3VyY2U3KSBNYXJrZWQgbG9hZCBsYXRlbmN5IERhdGEgc291cmNlIDAxMTAgKEwzLjEgUykKK2V2ZW50OjBYMEUzMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0lOU1RfRklOX0dSUDIyNyA6IChHcm91cCAyMjcgcG1fbXJrX2Rzb3VyY2U3KSBPbmUgb2YgdGhlIGV4ZWN1dGlvbiB1bml0cyBmaW5pc2hlZCBhIG1hcmtlZCBpbnN0cnVjdGlvbi4gIEluc3RydWN0aW9ucyB0aGF0IGZpbmlzaCBtYXkgbm90IG5lY2Vzc2FyeSBjb21wbGV0ZQorZXZlbnQ6MFgwRTMzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfREFUQV9GUk9NX0wyTUlTU19HUlAyMjcgOiAoR3JvdXAgMjI3IHBtX21ya19kc291cmNlNykgREwxIHdhcyByZWxvYWRlZCBmcm9tIGJleW9uZCBMMiBkdWUgdG8gYSBtYXJrZWQgZGVtYW5kIGxvYWQuCitldmVudDowWDBFMzQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQMjI3IDogKEdyb3VwIDIyNyBwbV9tcmtfZHNvdXJjZTcpIE51bWJlciBvZiBydW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZC4KK2V2ZW50OjBYMEUzNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQMjI3IDogKEdyb3VwIDIyNyBwbV9tcmtfZHNvdXJjZTcpIFByb2Nlc3NvciBDeWNsZXMgZ2F0ZWQgYnkgdGhlIHJ1biBsYXRjaC4gIE9wZXJhdGluZyBzeXN0ZW1zIHVzZSB0aGUgcnVuIGxhdGNoIHRvIGluZGljYXRlIHdoZW4gdGhleSBhcmUgZG9pbmcgdXNlZnVsIHdvcmsuICBUaGUgcnVuIGxhdGNoIGlzIHR5cGljYWxseSBjbGVhcmVkIGluIHRoZSBPUyBpZGxlIGxvb3AuICBHYXRpbmcgYnkgdGhlIHJ1biBsYXRjaCBmaWx0ZXJzIG91dCB0aGUgaWRsZSBsb29wLgorCisjR3JvdXAgMjI4IHBtX21ya19kc291cmNlOCwgTWFya2VkIGRhdGEgc291cmNlcworZXZlbnQ6MFgwRTQwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfTERfTUlTU19FWFBPU0VEX0NZQ19DT1VOVF9HUlAyMjggOiAoR3JvdXAgMjI4IHBtX21ya19kc291cmNlOCkgTWFya2VkIExvYWQgZXhwb3NlZCBNaXNzICh1c2UgZWRnZSBkZXRlY3QgdG8gY291bnQgIykKK2V2ZW50OjBYMEU0MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0RBVEFfRlJPTV9MM01JU1NfR1JQMjI4IDogKEdyb3VwIDIyOCBwbV9tcmtfZHNvdXJjZTgpIERMMSB3YXMgcmVsb2FkZWQgZnJvbSBiZXlvbmQgTDMgZHVlIHRvIGEgbWFya2VkIGxvYWQuCitldmVudDowWDBFNDIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19EQVRBX0ZST01fREwyTDNfTU9EX0dSUDIyOCA6IChHcm91cCAyMjggcG1fbXJrX2Rzb3VyY2U4KSBUaGUgcHJvY2Vzc29yJ3MgRGF0YSBDYWNoZSB3YXMgcmVsb2FkZWQgd2l0aCBtb2RpZmllZCAoTSkgZGF0YSBmcm9tIGFuIEwyICBvciBMMyBvbiBhIGRpc3RhbnQgbW9kdWxlIGR1ZSB0byBhIG1hcmtlZCBsb2FkLgorZXZlbnQ6MFgwRTQzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfREFUQV9GUk9NX0RMMkwzX01PRF9DWUNfR1JQMjI4IDogKEdyb3VwIDIyOCBwbV9tcmtfZHNvdXJjZTgpIE1hcmtlZCBsZCBsYXRlbmN5IERhdGEgc291cmNlIDEwMTEgIChMMi43NS9MMy43NSBNIGRpZmZlcmVudCA0IGNoaXAgbm9kZSkKK2V2ZW50OjBYMEU0NCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlAyMjggOiAoR3JvdXAgMjI4IHBtX21ya19kc291cmNlOCkgTnVtYmVyIG9mIHJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkLgorZXZlbnQ6MFgwRTQ1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAyMjggOiAoR3JvdXAgMjI4IHBtX21ya19kc291cmNlOCkgUHJvY2Vzc29yIEN5Y2xlcyBnYXRlZCBieSB0aGUgcnVuIGxhdGNoLiAgT3BlcmF0aW5nIHN5c3RlbXMgdXNlIHRoZSBydW4gbGF0Y2ggdG8gaW5kaWNhdGUgd2hlbiB0aGV5IGFyZSBkb2luZyB1c2VmdWwgd29yay4gIFRoZSBydW4gbGF0Y2ggaXMgdHlwaWNhbGx5IGNsZWFyZWQgaW4gdGhlIE9TIGlkbGUgbG9vcC4gIEdhdGluZyBieSB0aGUgcnVuIGxhdGNoIGZpbHRlcnMgb3V0IHRoZSBpZGxlIGxvb3AuCisKKyNHcm91cCAyMjkgcG1fbXJrX2xzdV9mbHVzaDEsIE1hcmtlZCBMU1UgRmx1c2gKK2V2ZW50OjBYMEU1MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0xTVV9GTFVTSF9VTERfR1JQMjI5IDogKEdyb3VwIDIyOSBwbV9tcmtfbHN1X2ZsdXNoMSkgQSBtYXJrZWQgbG9hZCB3YXMgZmx1c2hlZCBiZWNhdXNlIGl0IHdhcyB1bmFsaWduZWQgKGNyb3NzZWQgYSA2NGJ5dGUgYm91bmRhcnksIG9yIDMyIGJ5dGUgaWYgaXQgbWlzc2VkIHRoZSBMMSkKK2V2ZW50OjBYMEU1MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0xTVV9GTFVTSF9VU1RfR1JQMjI5IDogKEdyb3VwIDIyOSBwbV9tcmtfbHN1X2ZsdXNoMSkgQSBtYXJrZWQgc3RvcmUgd2FzIGZsdXNoZWQgYmVjYXVzZSBpdCB3YXMgdW5hbGlnbmVkCitldmVudDowWDBFNTIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMjI5IDogKEdyb3VwIDIyOSBwbV9tcmtfbHN1X2ZsdXNoMSkgTnVtYmVyIG9mIFBvd2VyUEMgSW5zdHJ1Y3Rpb25zIHRoYXQgY29tcGxldGVkLgorZXZlbnQ6MFgwRTUzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDIyOSA6IChHcm91cCAyMjkgcG1fbXJrX2xzdV9mbHVzaDEpIFByb2Nlc3NvciBDeWNsZXMKK2V2ZW50OjBYMEU1NCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlAyMjkgOiAoR3JvdXAgMjI5IHBtX21ya19sc3VfZmx1c2gxKSBOdW1iZXIgb2YgcnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQuCitldmVudDowWDBFNTUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDIyOSA6IChHcm91cCAyMjkgcG1fbXJrX2xzdV9mbHVzaDEpIFByb2Nlc3NvciBDeWNsZXMgZ2F0ZWQgYnkgdGhlIHJ1biBsYXRjaC4gIE9wZXJhdGluZyBzeXN0ZW1zIHVzZSB0aGUgcnVuIGxhdGNoIHRvIGluZGljYXRlIHdoZW4gdGhleSBhcmUgZG9pbmcgdXNlZnVsIHdvcmsuICBUaGUgcnVuIGxhdGNoIGlzIHR5cGljYWxseSBjbGVhcmVkIGluIHRoZSBPUyBpZGxlIGxvb3AuICBHYXRpbmcgYnkgdGhlIHJ1biBsYXRjaCBmaWx0ZXJzIG91dCB0aGUgaWRsZSBsb29wLgorCisjR3JvdXAgMjMwIHBtX21ya19sc3VfZmx1c2gyLCBNYXJrZWQgTFNVIEZsdXNoCitldmVudDowWDBFNjAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMjMwIDogKEdyb3VwIDIzMCBwbV9tcmtfbHN1X2ZsdXNoMikgTnVtYmVyIG9mIFBvd2VyUEMgSW5zdHJ1Y3Rpb25zIHRoYXQgY29tcGxldGVkLgorZXZlbnQ6MFgwRTYxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDIzMCA6IChHcm91cCAyMzAgcG1fbXJrX2xzdV9mbHVzaDIpIFByb2Nlc3NvciBDeWNsZXMKK2V2ZW50OjBYMEU2MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0xTVV9GTFVTSF9MUlFfR1JQMjMwIDogKEdyb3VwIDIzMCBwbV9tcmtfbHN1X2ZsdXNoMikgTG9hZCBIaXQgTG9hZCBvciBTdG9yZSBIaXQgTG9hZCBmbHVzaC4gIEEgbWFya2VkIGxvYWQgd2FzIGZsdXNoZWQgYmVjYXVzZSBpdCBleGVjdXRlZCBiZWZvcmUgYW4gb2xkZXIgc3RvcmUgYW5kIHRoZXkgaGFkIG92ZXJsYXBwaW5nIGRhdGEgT1IgdHdvIGxvYWRzIGV4ZWN1dGVkIG91dCBvZiBvcmRlciBhbmQgdGhleSBoYXZlIGJ5dGUgb3ZlcmxhcCBhbmQgdGhlcmUgd2FzIGEgc25vb3AgaW4gYmV0d2VlbiB0byBhbiBvdmVybGFwcGVkIGJ5dGUuCitldmVudDowWDBFNjMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19MU1VfRkxVU0hfU1JRX0dSUDIzMCA6IChHcm91cCAyMzAgcG1fbXJrX2xzdV9mbHVzaDIpIExvYWQgSGl0IFN0b3JlIGZsdXNoLiAgQSBtYXJrZWQgbG9hZCB3YXMgZmx1c2hlZCBiZWNhdXNlIGl0IGhpdHMgKG92ZXJsYXBzKSBhbiBvbGRlciBzdG9yZSB0aGF0IGlzIGFscmVhZHkgaW4gdGhlIFNSUSBvciBpbiB0aGUgc2FtZSBncm91cC4gIElmIHRoZSByZWFsIGFkZHJlc3NlcyBtYXRjaCBidXQgdGhlIGVmZmVjdGl2ZSBhZGRyZXNzZXMgZG8gbm90LCBhbiBhbGlhcyBjb25kaXRpb24gZXhpc3RzIHRoYXQgcHJldmVudHMgc3RvcmUgZm9yd2FyZGluZy4gIElmIHRoZSBsb2FkIGFuZCBzdG9yZSBhcmUgaW4gdGhlIHNhbWUgZ3JvdXAgdGhlIGxvYWQgbXVzdCBiZSBmbHVzaGVkIHRvIHNlcGFyYXRlIHRoZSB0d28gaW5zdHJ1Y3Rpb25zLgorZXZlbnQ6MFgwRTY0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDIzMCA6IChHcm91cCAyMzAgcG1fbXJrX2xzdV9mbHVzaDIpIE51bWJlciBvZiBydW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZC4KK2V2ZW50OjBYMEU2NSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQMjMwIDogKEdyb3VwIDIzMCBwbV9tcmtfbHN1X2ZsdXNoMikgUHJvY2Vzc29yIEN5Y2xlcyBnYXRlZCBieSB0aGUgcnVuIGxhdGNoLiAgT3BlcmF0aW5nIHN5c3RlbXMgdXNlIHRoZSBydW4gbGF0Y2ggdG8gaW5kaWNhdGUgd2hlbiB0aGV5IGFyZSBkb2luZyB1c2VmdWwgd29yay4gIFRoZSBydW4gbGF0Y2ggaXMgdHlwaWNhbGx5IGNsZWFyZWQgaW4gdGhlIE9TIGlkbGUgbG9vcC4gIEdhdGluZyBieSB0aGUgcnVuIGxhdGNoIGZpbHRlcnMgb3V0IHRoZSBpZGxlIGxvb3AuCisKKyNHcm91cCAyMzEgcG1fbXJrX3JlamVjdHMsIE1hcmtlZCByZWplY3RzCitldmVudDowWDBFNzAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19MU1VfUkVKRUNUX0xIU19HUlAyMzEgOiAoR3JvdXAgMjMxIHBtX21ya19yZWplY3RzKSBUaGUgTG9hZCBTdG9yZSBVbml0IHJlamVjdGVkIGEgbWFya2VkIGxvYWQgaW5zdHJ1Y3Rpb24gdGhhdCBoYWQgYW4gYWRkcmVzcyBvdmVybGFwIHdpdGggYW4gb2xkZXIgc3RvcmUgaW4gdGhlIHN0b3JlIHF1ZXVlLiBUaGUgc3RvcmUgbXVzdCBiZSBjb21taXR0ZWQgYW5kIGRlLWFsbG9jYXRlZCBmcm9tIHRoZSBTdG9yZSBRdWV1ZSBiZWZvcmUgdGhlIGxvYWQgY2FuIGV4ZWN1dGUgc3VjY2Vzc2Z1bGx5CitldmVudDowWDBFNzEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19MU1VfRkxVU0hfR1JQMjMxIDogKEdyb3VwIDIzMSBwbV9tcmtfcmVqZWN0cykgTWFya2VkIGZsdXNoIGluaXRpYXRlZCBieSBMU1UKK2V2ZW50OjBYMEU3MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAyMzEgOiAoR3JvdXAgMjMxIHBtX21ya19yZWplY3RzKSBOdW1iZXIgb2YgUG93ZXJQQyBJbnN0cnVjdGlvbnMgdGhhdCBjb21wbGV0ZWQuCitldmVudDowWDBFNzMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19MU1VfUkVKRUNUX0dSUDIzMSA6IChHcm91cCAyMzEgcG1fbXJrX3JlamVjdHMpIExTVSBtYXJrZWQgcmVqZWN0ICh1cCB0byAyIHBlciBjeWNsZSkKK2V2ZW50OjBYMEU3NCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlAyMzEgOiAoR3JvdXAgMjMxIHBtX21ya19yZWplY3RzKSBOdW1iZXIgb2YgcnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQuCitldmVudDowWDBFNzUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDIzMSA6IChHcm91cCAyMzEgcG1fbXJrX3JlamVjdHMpIFByb2Nlc3NvciBDeWNsZXMgZ2F0ZWQgYnkgdGhlIHJ1biBsYXRjaC4gIE9wZXJhdGluZyBzeXN0ZW1zIHVzZSB0aGUgcnVuIGxhdGNoIHRvIGluZGljYXRlIHdoZW4gdGhleSBhcmUgZG9pbmcgdXNlZnVsIHdvcmsuICBUaGUgcnVuIGxhdGNoIGlzIHR5cGljYWxseSBjbGVhcmVkIGluIHRoZSBPUyBpZGxlIGxvb3AuICBHYXRpbmcgYnkgdGhlIHJ1biBsYXRjaCBmaWx0ZXJzIG91dCB0aGUgaWRsZSBsb29wLgorCisjR3JvdXAgMjMyIHBtX21ya19pbnN0LCBNYXJrZWQgaW5zdHJ1Y3Rpb24gZXZlbnRzCitldmVudDowWDBFODAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19JTlNUX0lTU1VFRF9HUlAyMzIgOiAoR3JvdXAgMjMyIHBtX21ya19pbnN0KSBBIG1hcmtlZCBpbnN0cnVjdGlvbiB3YXMgaXNzdWVkIHRvIGFuIGV4ZWN1dGlvbiB1bml0LgorZXZlbnQ6MFgwRTgxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfSU5TVF9ESVNQX0dSUDIzMiA6IChHcm91cCAyMzIgcG1fbXJrX2luc3QpIEEgbWFya2VkIGluc3RydWN0aW9uIHdhcyBkaXNwYXRjaGVkCitldmVudDowWDBFODIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19JTlNUX0ZJTl9HUlAyMzIgOiAoR3JvdXAgMjMyIHBtX21ya19pbnN0KSBPbmUgb2YgdGhlIGV4ZWN1dGlvbiB1bml0cyBmaW5pc2hlZCBhIG1hcmtlZCBpbnN0cnVjdGlvbi4gIEluc3RydWN0aW9ucyB0aGF0IGZpbmlzaCBtYXkgbm90IG5lY2Vzc2FyeSBjb21wbGV0ZQorZXZlbnQ6MFgwRTgzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDIzMiA6IChHcm91cCAyMzIgcG1fbXJrX2luc3QpIE51bWJlciBvZiBQb3dlclBDIEluc3RydWN0aW9ucyB0aGF0IGNvbXBsZXRlZC4KK2V2ZW50OjBYMEU4NCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlAyMzIgOiAoR3JvdXAgMjMyIHBtX21ya19pbnN0KSBOdW1iZXIgb2YgcnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQuCitldmVudDowWDBFODUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDIzMiA6IChHcm91cCAyMzIgcG1fbXJrX2luc3QpIFByb2Nlc3NvciBDeWNsZXMgZ2F0ZWQgYnkgdGhlIHJ1biBsYXRjaC4gIE9wZXJhdGluZyBzeXN0ZW1zIHVzZSB0aGUgcnVuIGxhdGNoIHRvIGluZGljYXRlIHdoZW4gdGhleSBhcmUgZG9pbmcgdXNlZnVsIHdvcmsuICBUaGUgcnVuIGxhdGNoIGlzIHR5cGljYWxseSBjbGVhcmVkIGluIHRoZSBPUyBpZGxlIGxvb3AuICBHYXRpbmcgYnkgdGhlIHJ1biBsYXRjaCBmaWx0ZXJzIG91dCB0aGUgaWRsZSBsb29wLgorCisjR3JvdXAgMjMzIHBtX21ya19zdCwgTWFya2VkIHN0b3JlcyBldmVudHMKK2V2ZW50OjBYMEU5MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX1NUX0NNUExfR1JQMjMzIDogKEdyb3VwIDIzMyBwbV9tcmtfc3QpIEEgc2FtcGxlZCBzdG9yZSBoYXMgY29tcGxldGVkIChkYXRhIGhvbWUpCitldmVudDowWDBFOTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19TVF9ORVNUX0dSUDIzMyA6IChHcm91cCAyMzMgcG1fbXJrX3N0KSBBIHNhbXBsZWQgc3RvcmUgaGFzIGJlZW4gc2VudCB0byB0aGUgbWVtb3J5IHN1YnN5c3RlbQorZXZlbnQ6MFgwRTkyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfU1RfQ01QTF9JTlRfR1JQMjMzIDogKEdyb3VwIDIzMyBwbV9tcmtfc3QpIEEgbWFya2VkIHN0b3JlIHByZXZpb3VzbHkgc2VudCB0byB0aGUgbWVtb3J5IHN1YnN5c3RlbSBjb21wbGV0ZWQgKGRhdGEgaG9tZSkgYWZ0ZXIgcmVxdWlyaW5nIGludGVydmVudGlvbgorZXZlbnQ6MFgwRTkzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDIzMyA6IChHcm91cCAyMzMgcG1fbXJrX3N0KSBOdW1iZXIgb2YgUG93ZXJQQyBJbnN0cnVjdGlvbnMgdGhhdCBjb21wbGV0ZWQuCitldmVudDowWDBFOTQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQMjMzIDogKEdyb3VwIDIzMyBwbV9tcmtfc3QpIE51bWJlciBvZiBydW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZC4KK2V2ZW50OjBYMEU5NSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQMjMzIDogKEdyb3VwIDIzMyBwbV9tcmtfc3QpIFByb2Nlc3NvciBDeWNsZXMgZ2F0ZWQgYnkgdGhlIHJ1biBsYXRjaC4gIE9wZXJhdGluZyBzeXN0ZW1zIHVzZSB0aGUgcnVuIGxhdGNoIHRvIGluZGljYXRlIHdoZW4gdGhleSBhcmUgZG9pbmcgdXNlZnVsIHdvcmsuICBUaGUgcnVuIGxhdGNoIGlzIHR5cGljYWxseSBjbGVhcmVkIGluIHRoZSBPUyBpZGxlIGxvb3AuICBHYXRpbmcgYnkgdGhlIHJ1biBsYXRjaCBmaWx0ZXJzIG91dCB0aGUgaWRsZSBsb29wLgorCisjR3JvdXAgMjM0IHBtX21ya19kdGxiX21pc3MxLCBNYXJrZWQgRGF0YSBUTEIgTWlzcworZXZlbnQ6MFgwRUEwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDIzNCA6IChHcm91cCAyMzQgcG1fbXJrX2R0bGJfbWlzczEpIE51bWJlciBvZiBQb3dlclBDIEluc3RydWN0aW9ucyB0aGF0IGNvbXBsZXRlZC4KK2V2ZW50OjBYMEVBMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0RUTEJfTUlTU180S19HUlAyMzQgOiAoR3JvdXAgMjM0IHBtX21ya19kdGxiX21pc3MxKSBEYXRhIFRMQiByZWZlcmVuY2VzIHRvIDRLQiBwYWdlcyBieSBhIG1hcmtlZCBpbnN0cnVjdGlvbiB0aGF0IG1pc3NlZCB0aGUgVExCLiBQYWdlIHNpemUgaXMgZGV0ZXJtaW5lZCBhdCBUTEIgcmVsb2FkIHRpbWUuCitldmVudDowWDBFQTIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19EVExCX01JU1NfNjRLX0dSUDIzNCA6IChHcm91cCAyMzQgcG1fbXJrX2R0bGJfbWlzczEpIERhdGEgVExCIHJlZmVyZW5jZXMgdG8gNjRLQiBwYWdlcyBieSBhIG1hcmtlZCBpbnN0cnVjdGlvbiB0aGF0IG1pc3NlZCB0aGUgVExCLiBQYWdlIHNpemUgaXMgZGV0ZXJtaW5lZCBhdCBUTEIgcmVsb2FkIHRpbWUuCitldmVudDowWDBFQTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19EVExCX01JU1NfMTZNX0dSUDIzNCA6IChHcm91cCAyMzQgcG1fbXJrX2R0bGJfbWlzczEpIERhdGEgVExCIHJlZmVyZW5jZXMgdG8gMTZNIHBhZ2VzIGJ5IGEgbWFya2VkIGluc3RydWN0aW9uIHRoYXQgbWlzc2VkIHRoZSBUTEIuIFBhZ2Ugc2l6ZSBpcyBkZXRlcm1pbmVkIGF0IFRMQiByZWxvYWQgdGltZS4KK2V2ZW50OjBYMEVBNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlAyMzQgOiAoR3JvdXAgMjM0IHBtX21ya19kdGxiX21pc3MxKSBOdW1iZXIgb2YgcnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQuCitldmVudDowWDBFQTUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDIzNCA6IChHcm91cCAyMzQgcG1fbXJrX2R0bGJfbWlzczEpIFByb2Nlc3NvciBDeWNsZXMgZ2F0ZWQgYnkgdGhlIHJ1biBsYXRjaC4gIE9wZXJhdGluZyBzeXN0ZW1zIHVzZSB0aGUgcnVuIGxhdGNoIHRvIGluZGljYXRlIHdoZW4gdGhleSBhcmUgZG9pbmcgdXNlZnVsIHdvcmsuICBUaGUgcnVuIGxhdGNoIGlzIHR5cGljYWxseSBjbGVhcmVkIGluIHRoZSBPUyBpZGxlIGxvb3AuICBHYXRpbmcgYnkgdGhlIHJ1biBsYXRjaCBmaWx0ZXJzIG91dCB0aGUgaWRsZSBsb29wLgorCisjR3JvdXAgMjM1IHBtX21ya19kdGxiX21pc3MyLCBNYXJrZWQgRGF0YSBUTEIgTWlzcworZXZlbnQ6MFgwRUIwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfRFRMQl9NSVNTXzE2R19HUlAyMzUgOiAoR3JvdXAgMjM1IHBtX21ya19kdGxiX21pc3MyKSBEYXRhIFRMQiByZWZlcmVuY2VzIHRvIDE2R0IgcGFnZXMgYnkgYSBtYXJrZWQgaW5zdHJ1Y3Rpb24gdGhhdCBtaXNzZWQgdGhlIFRMQi4gUGFnZSBzaXplIGlzIGRldGVybWluZWQgYXQgVExCIHJlbG9hZCB0aW1lLgorZXZlbnQ6MFgwRUIxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfRFRMQl9NSVNTXzRLX0dSUDIzNSA6IChHcm91cCAyMzUgcG1fbXJrX2R0bGJfbWlzczIpIERhdGEgVExCIHJlZmVyZW5jZXMgdG8gNEtCIHBhZ2VzIGJ5IGEgbWFya2VkIGluc3RydWN0aW9uIHRoYXQgbWlzc2VkIHRoZSBUTEIuIFBhZ2Ugc2l6ZSBpcyBkZXRlcm1pbmVkIGF0IFRMQiByZWxvYWQgdGltZS4KK2V2ZW50OjBYMEVCMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0RUTEJfTUlTU182NEtfR1JQMjM1IDogKEdyb3VwIDIzNSBwbV9tcmtfZHRsYl9taXNzMikgRGF0YSBUTEIgcmVmZXJlbmNlcyB0byA2NEtCIHBhZ2VzIGJ5IGEgbWFya2VkIGluc3RydWN0aW9uIHRoYXQgbWlzc2VkIHRoZSBUTEIuIFBhZ2Ugc2l6ZSBpcyBkZXRlcm1pbmVkIGF0IFRMQiByZWxvYWQgdGltZS4KK2V2ZW50OjBYMEVCMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAyMzUgOiAoR3JvdXAgMjM1IHBtX21ya19kdGxiX21pc3MyKSBOdW1iZXIgb2YgUG93ZXJQQyBJbnN0cnVjdGlvbnMgdGhhdCBjb21wbGV0ZWQuCitldmVudDowWDBFQjQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQMjM1IDogKEdyb3VwIDIzNSBwbV9tcmtfZHRsYl9taXNzMikgTnVtYmVyIG9mIHJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkLgorZXZlbnQ6MFgwRUI1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAyMzUgOiAoR3JvdXAgMjM1IHBtX21ya19kdGxiX21pc3MyKSBQcm9jZXNzb3IgQ3ljbGVzIGdhdGVkIGJ5IHRoZSBydW4gbGF0Y2guICBPcGVyYXRpbmcgc3lzdGVtcyB1c2UgdGhlIHJ1biBsYXRjaCB0byBpbmRpY2F0ZSB3aGVuIHRoZXkgYXJlIGRvaW5nIHVzZWZ1bCB3b3JrLiAgVGhlIHJ1biBsYXRjaCBpcyB0eXBpY2FsbHkgY2xlYXJlZCBpbiB0aGUgT1MgaWRsZSBsb29wLiAgR2F0aW5nIGJ5IHRoZSBydW4gbGF0Y2ggZmlsdGVycyBvdXQgdGhlIGlkbGUgbG9vcC4KKworI0dyb3VwIDIzNiBwbV9tcmtfZGVyYXRfbWlzczEsIE1hcmtlZCBERVJBVCBNaXNzIGV2ZW50cworZXZlbnQ6MFgwRUMwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDIzNiA6IChHcm91cCAyMzYgcG1fbXJrX2RlcmF0X21pc3MxKSBOdW1iZXIgb2YgUG93ZXJQQyBJbnN0cnVjdGlvbnMgdGhhdCBjb21wbGV0ZWQuCitldmVudDowWDBFQzEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19ERVJBVF9NSVNTXzY0S19HUlAyMzYgOiAoR3JvdXAgMjM2IHBtX21ya19kZXJhdF9taXNzMSkgQSBtYXJrZWQgZGF0YSByZXF1ZXN0IChsb2FkIG9yIHN0b3JlKSBtaXNzZWQgdGhlIEVSQVQgZm9yIDY0SyBwYWdlIGFuZCByZXN1bHRlZCBpbiBhbiBFUkFUIHJlbG9hZC4KK2V2ZW50OjBYMEVDMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0RFUkFUX01JU1NfMTZNX0dSUDIzNiA6IChHcm91cCAyMzYgcG1fbXJrX2RlcmF0X21pc3MxKSBBIG1hcmtlZCBkYXRhIHJlcXVlc3QgKGxvYWQgb3Igc3RvcmUpIG1pc3NlZCB0aGUgRVJBVCBmb3IgMTZNIHBhZ2UgYW5kIHJlc3VsdGVkIGluIGFuIEVSQVQgcmVsb2FkLgorZXZlbnQ6MFgwRUMzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfREVSQVRfTUlTU18xNkdfR1JQMjM2IDogKEdyb3VwIDIzNiBwbV9tcmtfZGVyYXRfbWlzczEpIEEgbWFya2VkIGRhdGEgcmVxdWVzdCAobG9hZCBvciBzdG9yZSkgbWlzc2VkIHRoZSBFUkFUIGZvciAxNkcgcGFnZSBhbmQgcmVzdWx0ZWQgaW4gYW4gRVJBVCByZWxvYWQuCitldmVudDowWDBFQzQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQMjM2IDogKEdyb3VwIDIzNiBwbV9tcmtfZGVyYXRfbWlzczEpIE51bWJlciBvZiBydW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZC4KK2V2ZW50OjBYMEVDNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQMjM2IDogKEdyb3VwIDIzNiBwbV9tcmtfZGVyYXRfbWlzczEpIFByb2Nlc3NvciBDeWNsZXMgZ2F0ZWQgYnkgdGhlIHJ1biBsYXRjaC4gIE9wZXJhdGluZyBzeXN0ZW1zIHVzZSB0aGUgcnVuIGxhdGNoIHRvIGluZGljYXRlIHdoZW4gdGhleSBhcmUgZG9pbmcgdXNlZnVsIHdvcmsuICBUaGUgcnVuIGxhdGNoIGlzIHR5cGljYWxseSBjbGVhcmVkIGluIHRoZSBPUyBpZGxlIGxvb3AuICBHYXRpbmcgYnkgdGhlIHJ1biBsYXRjaCBmaWx0ZXJzIG91dCB0aGUgaWRsZSBsb29wLgorCisjR3JvdXAgMjM3IHBtX21ya19kZXJhdF9taXNzMiwgTWFya2VkIERFUkFUIE1pc3MgZXZlbnRzCitldmVudDowWDBFRDAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19ERVJBVF9NSVNTXzRLX0dSUDIzNyA6IChHcm91cCAyMzcgcG1fbXJrX2RlcmF0X21pc3MyKSBBIG1hcmtlZCBkYXRhIHJlcXVlc3QgKGxvYWQgb3Igc3RvcmUpIG1pc3NlZCB0aGUgRVJBVCBmb3IgNEsgcGFnZSBhbmQgcmVzdWx0ZWQgaW4gYW4gRVJBVCByZWxvYWQuCitldmVudDowWDBFRDEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19ERVJBVF9NSVNTXzY0S19HUlAyMzcgOiAoR3JvdXAgMjM3IHBtX21ya19kZXJhdF9taXNzMikgQSBtYXJrZWQgZGF0YSByZXF1ZXN0IChsb2FkIG9yIHN0b3JlKSBtaXNzZWQgdGhlIEVSQVQgZm9yIDY0SyBwYWdlIGFuZCByZXN1bHRlZCBpbiBhbiBFUkFUIHJlbG9hZC4KK2V2ZW50OjBYMEVEMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0RFUkFUX01JU1NfMTZNX0dSUDIzNyA6IChHcm91cCAyMzcgcG1fbXJrX2RlcmF0X21pc3MyKSBBIG1hcmtlZCBkYXRhIHJlcXVlc3QgKGxvYWQgb3Igc3RvcmUpIG1pc3NlZCB0aGUgRVJBVCBmb3IgMTZNIHBhZ2UgYW5kIHJlc3VsdGVkIGluIGFuIEVSQVQgcmVsb2FkLgorZXZlbnQ6MFgwRUQzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDIzNyA6IChHcm91cCAyMzcgcG1fbXJrX2RlcmF0X21pc3MyKSBOdW1iZXIgb2YgUG93ZXJQQyBJbnN0cnVjdGlvbnMgdGhhdCBjb21wbGV0ZWQuCitldmVudDowWDBFRDQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQMjM3IDogKEdyb3VwIDIzNyBwbV9tcmtfZGVyYXRfbWlzczIpIE51bWJlciBvZiBydW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZC4KK2V2ZW50OjBYMEVENSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQMjM3IDogKEdyb3VwIDIzNyBwbV9tcmtfZGVyYXRfbWlzczIpIFByb2Nlc3NvciBDeWNsZXMgZ2F0ZWQgYnkgdGhlIHJ1biBsYXRjaC4gIE9wZXJhdGluZyBzeXN0ZW1zIHVzZSB0aGUgcnVuIGxhdGNoIHRvIGluZGljYXRlIHdoZW4gdGhleSBhcmUgZG9pbmcgdXNlZnVsIHdvcmsuICBUaGUgcnVuIGxhdGNoIGlzIHR5cGljYWxseSBjbGVhcmVkIGluIHRoZSBPUyBpZGxlIGxvb3AuICBHYXRpbmcgYnkgdGhlIHJ1biBsYXRjaCBmaWx0ZXJzIG91dCB0aGUgaWRsZSBsb29wLgorCisjR3JvdXAgMjM4IHBtX21ya19taXNjX21pc3MsIG1hcmtlZCBNaXNzIEV2ZW50cworZXZlbnQ6MFgwRUUwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfTERfTUlTU19FWFBPU0VEX0NZQ19HUlAyMzggOiAoR3JvdXAgMjM4IHBtX21ya19taXNjX21pc3MpIE1hcmtlZCBMb2FkIGV4cG9zZWQgTWlzcworZXZlbnQ6MFgwRUUxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDIzOCA6IChHcm91cCAyMzggcG1fbXJrX21pc2NfbWlzcykgTnVtYmVyIG9mIFBvd2VyUEMgSW5zdHJ1Y3Rpb25zIHRoYXQgY29tcGxldGVkLgorZXZlbnQ6MFgwRUUyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfTFNVX0RFUkFUX01JU1NfR1JQMjM4IDogKEdyb3VwIDIzOCBwbV9tcmtfbWlzY19taXNzKSBNYXJrZWQgREVSQVQgTWlzcworZXZlbnQ6MFgwRUUzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfTERfTUlTU19MMV9DWUNfR1JQMjM4IDogKEdyb3VwIDIzOCBwbV9tcmtfbWlzY19taXNzKSBMMSBkYXRhIGxvYWQgbWlzcyBjeWNsZXMKK2V2ZW50OjBYMEVFNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlAyMzggOiAoR3JvdXAgMjM4IHBtX21ya19taXNjX21pc3MpIE51bWJlciBvZiBydW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZC4KK2V2ZW50OjBYMEVFNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQMjM4IDogKEdyb3VwIDIzOCBwbV9tcmtfbWlzY19taXNzKSBQcm9jZXNzb3IgQ3ljbGVzIGdhdGVkIGJ5IHRoZSBydW4gbGF0Y2guICBPcGVyYXRpbmcgc3lzdGVtcyB1c2UgdGhlIHJ1biBsYXRjaCB0byBpbmRpY2F0ZSB3aGVuIHRoZXkgYXJlIGRvaW5nIHVzZWZ1bCB3b3JrLiAgVGhlIHJ1biBsYXRjaCBpcyB0eXBpY2FsbHkgY2xlYXJlZCBpbiB0aGUgT1MgaWRsZSBsb29wLiAgR2F0aW5nIGJ5IHRoZSBydW4gbGF0Y2ggZmlsdGVycyBvdXQgdGhlIGlkbGUgbG9vcC4KKworI0dyb3VwIDIzOSBwbV9tcmtfcHRlZzEsIE1hcmtlZCBQVEVHCitldmVudDowWDBFRjAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMjM5IDogKEdyb3VwIDIzOSBwbV9tcmtfcHRlZzEpIE51bWJlciBvZiBQb3dlclBDIEluc3RydWN0aW9ucyB0aGF0IGNvbXBsZXRlZC4KK2V2ZW50OjBYMEVGMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX1BURUdfRlJPTV9ETUVNX0dSUDIzOSA6IChHcm91cCAyMzkgcG1fbXJrX3B0ZWcxKSBBIFBhZ2UgVGFibGUgRW50cnkgd2FzIGxvYWRlZCBpbnRvIHRoZSBFUkFUIGZyb20gbWVtb3J5IGF0dGFjaGVkIHRvIGEgZGlmZmVyZW50IG1vZHVsZSB0aGFuIHRoaXMgcHJvY2Vzc29yIGlzIGxvY2F0ZWQgb24gZHVlIHRvIGEgbWFya2VkIGxvYWQgb3Igc3RvcmUuCitldmVudDowWDBFRjIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19QVEVHX0ZST01fTDIxX01PRF9HUlAyMzkgOiAoR3JvdXAgMjM5IHBtX21ya19wdGVnMSkgTWFya2VkIFBURUcgbG9hZGVkIGZyb20gYW5vdGhlciBMMiBvbiBzYW1lIGNoaXAgbW9kaWZpZWQKK2V2ZW50OjBYMEVGMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX1BURUdfRlJPTV9MMjFfU0hSX0dSUDIzOSA6IChHcm91cCAyMzkgcG1fbXJrX3B0ZWcxKSBNYXJrZWQgUFRFRyBsb2FkZWQgZnJvbSBhbm90aGVyIEwyIG9uIHNhbWUgY2hpcCBzaGFyZWQKK2V2ZW50OjBYMEVGNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlAyMzkgOiAoR3JvdXAgMjM5IHBtX21ya19wdGVnMSkgTnVtYmVyIG9mIHJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkLgorZXZlbnQ6MFgwRUY1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAyMzkgOiAoR3JvdXAgMjM5IHBtX21ya19wdGVnMSkgUHJvY2Vzc29yIEN5Y2xlcyBnYXRlZCBieSB0aGUgcnVuIGxhdGNoLiAgT3BlcmF0aW5nIHN5c3RlbXMgdXNlIHRoZSBydW4gbGF0Y2ggdG8gaW5kaWNhdGUgd2hlbiB0aGV5IGFyZSBkb2luZyB1c2VmdWwgd29yay4gIFRoZSBydW4gbGF0Y2ggaXMgdHlwaWNhbGx5IGNsZWFyZWQgaW4gdGhlIE9TIGlkbGUgbG9vcC4gIEdhdGluZyBieSB0aGUgcnVuIGxhdGNoIGZpbHRlcnMgb3V0IHRoZSBpZGxlIGxvb3AuCisKKyNHcm91cCAyNDAgcG1fbXJrX3B0ZWcyLCBNYXJrZWQgUFRFRworZXZlbnQ6MFgwRjAwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfUFRFR19GUk9NX0wyX0dSUDI0MCA6IChHcm91cCAyNDAgcG1fbXJrX3B0ZWcyKSBBIFBhZ2UgVGFibGUgRW50cnkgd2FzIGxvYWRlZCBpbnRvIHRoZSBFUkFUIGZyb20gdGhlIGxvY2FsIEwyIGR1ZSB0byBhIG1hcmtlZCBsb2FkIG9yIHN0b3JlLgorZXZlbnQ6MFgwRjAxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfUFRFR19GUk9NX1JMMkwzX1NIUl9HUlAyNDAgOiAoR3JvdXAgMjQwIHBtX21ya19wdGVnMikgQSBQYWdlIFRhYmxlIEVudHJ5IHdhcyBsb2FkZWQgaW50byB0aGUgRVJBVCBmcm9tIG1lbW9yeSBhdHRhY2hlZCB0byBhIGRpZmZlcmVudCBtb2R1bGUgdGhhbiB0aGlzIHByb2Nlc3NvciBpcyBsb2NhdGVkIG9uIGR1ZSB0byBhIG1hcmtlZCBsb2FkIG9yIHN0b3JlLgorZXZlbnQ6MFgwRjAyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfUFRFR19GUk9NX1JNRU1fR1JQMjQwIDogKEdyb3VwIDI0MCBwbV9tcmtfcHRlZzIpIEEgUGFnZSBUYWJsZSBFbnRyeSB3YXMgbG9hZGVkIGludG8gdGhlIEVSQVQuIFBPV0VSNiBkb2VzIG5vdCBoYXZlIGEgVExCCitldmVudDowWDBGMDMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMjQwIDogKEdyb3VwIDI0MCBwbV9tcmtfcHRlZzIpIE51bWJlciBvZiBQb3dlclBDIEluc3RydWN0aW9ucyB0aGF0IGNvbXBsZXRlZC4KK2V2ZW50OjBYMEYwNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlAyNDAgOiAoR3JvdXAgMjQwIHBtX21ya19wdGVnMikgTnVtYmVyIG9mIHJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkLgorZXZlbnQ6MFgwRjA1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAyNDAgOiAoR3JvdXAgMjQwIHBtX21ya19wdGVnMikgUHJvY2Vzc29yIEN5Y2xlcyBnYXRlZCBieSB0aGUgcnVuIGxhdGNoLiAgT3BlcmF0aW5nIHN5c3RlbXMgdXNlIHRoZSBydW4gbGF0Y2ggdG8gaW5kaWNhdGUgd2hlbiB0aGV5IGFyZSBkb2luZyB1c2VmdWwgd29yay4gIFRoZSBydW4gbGF0Y2ggaXMgdHlwaWNhbGx5IGNsZWFyZWQgaW4gdGhlIE9TIGlkbGUgbG9vcC4gIEdhdGluZyBieSB0aGUgcnVuIGxhdGNoIGZpbHRlcnMgb3V0IHRoZSBpZGxlIGxvb3AuCisKKyNHcm91cCAyNDEgcG1fbXJrX3B0ZWczLCBNYXJrZWQgUFRFRworZXZlbnQ6MFgwRjEwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDI0MSA6IChHcm91cCAyNDEgcG1fbXJrX3B0ZWczKSBOdW1iZXIgb2YgUG93ZXJQQyBJbnN0cnVjdGlvbnMgdGhhdCBjb21wbGV0ZWQuCitldmVudDowWDBGMTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19QVEVHX0ZST01fTDMxX1NIUl9HUlAyNDEgOiAoR3JvdXAgMjQxIHBtX21ya19wdGVnMykgTWFya2VkIFBURUcgbG9hZGVkIGZyb20gYW5vdGhlciBMMyBvbiBzYW1lIGNoaXAgc2hhcmVkCitldmVudDowWDBGMTIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19QVEVHX0ZST01fTDIxX01PRF9HUlAyNDEgOiAoR3JvdXAgMjQxIHBtX21ya19wdGVnMykgTWFya2VkIFBURUcgbG9hZGVkIGZyb20gYW5vdGhlciBMMiBvbiBzYW1lIGNoaXAgbW9kaWZpZWQKK2V2ZW50OjBYMEYxMyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX1BURUdfRlJPTV9ETDJMM19NT0RfR1JQMjQxIDogKEdyb3VwIDI0MSBwbV9tcmtfcHRlZzMpIEEgUGFnZSBUYWJsZSBFbnRyeSB3YXMgbG9hZGVkIGludG8gdGhlIEVSQVQgd2l0aCBtb2RpZmllZCAoTSkgZGF0YSBmcm9tIGFuIEwyICBvciBMMyBvbiBhIGRpc3RhbnQgbW9kdWxlIGR1ZSB0byBhIG1hcmtlZCBsb2FkIG9yIHN0b3JlLgorZXZlbnQ6MFgwRjE0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDI0MSA6IChHcm91cCAyNDEgcG1fbXJrX3B0ZWczKSBOdW1iZXIgb2YgcnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQuCitldmVudDowWDBGMTUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDI0MSA6IChHcm91cCAyNDEgcG1fbXJrX3B0ZWczKSBQcm9jZXNzb3IgQ3ljbGVzIGdhdGVkIGJ5IHRoZSBydW4gbGF0Y2guICBPcGVyYXRpbmcgc3lzdGVtcyB1c2UgdGhlIHJ1biBsYXRjaCB0byBpbmRpY2F0ZSB3aGVuIHRoZXkgYXJlIGRvaW5nIHVzZWZ1bCB3b3JrLiAgVGhlIHJ1biBsYXRjaCBpcyB0eXBpY2FsbHkgY2xlYXJlZCBpbiB0aGUgT1MgaWRsZSBsb29wLiAgR2F0aW5nIGJ5IHRoZSBydW4gbGF0Y2ggZmlsdGVycyBvdXQgdGhlIGlkbGUgbG9vcC4KKworI0dyb3VwIDI0MiBwbV9tcmtfcHRlZzQsIE1hcmtlZCBQVEVHCitldmVudDowWDBGMjAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19QVEVHX0ZST01fTDMxX01PRF9HUlAyNDIgOiAoR3JvdXAgMjQyIHBtX21ya19wdGVnNCkgTWFya2VkIFBURUcgbG9hZGVkIGZyb20gYW5vdGhlciBMMyBvbiBzYW1lIGNoaXAgbW9kaWZpZWQKK2V2ZW50OjBYMEYyMSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX1BURUdfRlJPTV9MM19HUlAyNDIgOiAoR3JvdXAgMjQyIHBtX21ya19wdGVnNCkgQSBQYWdlIFRhYmxlIEVudHJ5IHdhcyBsb2FkZWQgaW50byB0aGUgRVJBVCBmcm9tIHRoZSBsb2NhbCBMMyBkdWUgdG8gYSBtYXJrZWQgbG9hZCBvciBzdG9yZS4KK2V2ZW50OjBYMEYyMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAyNDIgOiAoR3JvdXAgMjQyIHBtX21ya19wdGVnNCkgTnVtYmVyIG9mIFBvd2VyUEMgSW5zdHJ1Y3Rpb25zIHRoYXQgY29tcGxldGVkLgorZXZlbnQ6MFgwRjIzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfUFRFR19GUk9NX0wyTUlTU19HUlAyNDIgOiAoR3JvdXAgMjQyIHBtX21ya19wdGVnNCkgQSBQYWdlIFRhYmxlIEVudHJ5IHdhcyBsb2FkZWQgaW50byB0aGUgRVJBVCBidXQgbm90IGZyb20gdGhlIGxvY2FsIEwyIGR1ZSB0byBhIG1hcmtlZCBsb2FkIG9yIHN0b3JlLgorZXZlbnQ6MFgwRjI0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDI0MiA6IChHcm91cCAyNDIgcG1fbXJrX3B0ZWc0KSBOdW1iZXIgb2YgcnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQuCitldmVudDowWDBGMjUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDI0MiA6IChHcm91cCAyNDIgcG1fbXJrX3B0ZWc0KSBQcm9jZXNzb3IgQ3ljbGVzIGdhdGVkIGJ5IHRoZSBydW4gbGF0Y2guICBPcGVyYXRpbmcgc3lzdGVtcyB1c2UgdGhlIHJ1biBsYXRjaCB0byBpbmRpY2F0ZSB3aGVuIHRoZXkgYXJlIGRvaW5nIHVzZWZ1bCB3b3JrLiAgVGhlIHJ1biBsYXRjaCBpcyB0eXBpY2FsbHkgY2xlYXJlZCBpbiB0aGUgT1MgaWRsZSBsb29wLiAgR2F0aW5nIGJ5IHRoZSBydW4gbGF0Y2ggZmlsdGVycyBvdXQgdGhlIGlkbGUgbG9vcC4KKworI0dyb3VwIDI0MyBwbV9tcmtfcHRlZzUsIE1hcmtlZCBQVEVHCitldmVudDowWDBGMzAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19QVEVHX0ZST01fUkwyTDNfTU9EX0dSUDI0MyA6IChHcm91cCAyNDMgcG1fbXJrX3B0ZWc1KSBBIFBhZ2UgVGFibGUgRW50cnkgd2FzIGxvYWRlZCBpbnRvIHRoZSBFUkFUIHdpdGggc2hhcmVkIChUIG9yIFNMKSBkYXRhIGZyb20gYW4gTDIgb3IgTDMgb24gYSByZW1vdGUgbW9kdWxlIGR1ZSB0byBhIG1hcmtlZCBsb2FkIG9yIHN0b3JlLgorZXZlbnQ6MFgwRjMxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfUFRFR19GUk9NX0wzTUlTU19HUlAyNDMgOiAoR3JvdXAgMjQzIHBtX21ya19wdGVnNSkgQSBQYWdlIFRhYmxlIEVudHJ5IHdhcyBsb2FkZWQgaW50byB0aGUgRVJBVCBmcm9tIGJleW9uZCB0aGUgTDMgZHVlIHRvIGEgbWFya2VkIGxvYWQgb3Igc3RvcmUKK2V2ZW50OjBYMEYzMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAyNDMgOiAoR3JvdXAgMjQzIHBtX21ya19wdGVnNSkgTnVtYmVyIG9mIFBvd2VyUEMgSW5zdHJ1Y3Rpb25zIHRoYXQgY29tcGxldGVkLgorZXZlbnQ6MFgwRjMzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfUFRFR19GUk9NX0xNRU1fR1JQMjQzIDogKEdyb3VwIDI0MyBwbV9tcmtfcHRlZzUpIEEgUGFnZSBUYWJsZSBFbnRyeSB3YXMgbG9hZGVkIGludG8gdGhlIEVSQVQgZnJvbSBtZW1vcnkgYXR0YWNoZWQgdG8gdGhlIHNhbWUgbW9kdWxlIHRoaXMgcHJvY2Vzc29yIGlzIGxvY2F0ZWQgb24gZHVlIHRvIGEgbWFya2VkIGxvYWQgb3Igc3RvcmUuCitldmVudDowWDBGMzQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQMjQzIDogKEdyb3VwIDI0MyBwbV9tcmtfcHRlZzUpIE51bWJlciBvZiBydW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZC4KK2V2ZW50OjBYMEYzNSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQMjQzIDogKEdyb3VwIDI0MyBwbV9tcmtfcHRlZzUpIFByb2Nlc3NvciBDeWNsZXMgZ2F0ZWQgYnkgdGhlIHJ1biBsYXRjaC4gIE9wZXJhdGluZyBzeXN0ZW1zIHVzZSB0aGUgcnVuIGxhdGNoIHRvIGluZGljYXRlIHdoZW4gdGhleSBhcmUgZG9pbmcgdXNlZnVsIHdvcmsuICBUaGUgcnVuIGxhdGNoIGlzIHR5cGljYWxseSBjbGVhcmVkIGluIHRoZSBPUyBpZGxlIGxvb3AuICBHYXRpbmcgYnkgdGhlIHJ1biBsYXRjaCBmaWx0ZXJzIG91dCB0aGUgaWRsZSBsb29wLgorCisjR3JvdXAgMjQ0IHBtX21ya19taXNjMSwgTWFya2VkIG1pc2MgZXZlbnRzCitldmVudDowWDBGNDAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19TVENYX0ZBSUxfR1JQMjQ0IDogKEdyb3VwIDI0NCBwbV9tcmtfbWlzYzEpIEEgbWFya2VkIHN0Y3ggKHN0d2N4IG9yIHN0ZGN4KSBmYWlsZWQKK2V2ZW50OjBYMEY0MSBjb3VudGVyczoxIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAyNDQgOiAoR3JvdXAgMjQ0IHBtX21ya19taXNjMSkgTnVtYmVyIG9mIFBvd2VyUEMgSW5zdHJ1Y3Rpb25zIHRoYXQgY29tcGxldGVkLgorZXZlbnQ6MFgwRjQyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfSUZVX0ZJTl9HUlAyNDQgOiAoR3JvdXAgMjQ0IHBtX21ya19taXNjMSkgVGhlIEluc3RydWN0aW9uIEZldGNoIFVuaXQgZmluaXNoZWQgYSBtYXJrZWQgaW5zdHJ1Y3Rpb24uCitldmVudDowWDBGNDMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19JTlNUX1RJTUVPX0dSUDI0NCA6IChHcm91cCAyNDQgcG1fbXJrX21pc2MxKSBUaGUgbnVtYmVyIG9mIGluc3RydWN0aW9ucyBmaW5pc2hlZCBzaW5jZSB0aGUgbGFzdCBwcm9ncmVzcyBpbmRpY2F0b3IgZnJvbSBhIG1hcmtlZCBpbnN0cnVjdGlvbiBleGNlZWRlZCB0aGUgdGhyZXNob2xkLiBUaGUgbWFya2VkIGluc3RydWN0aW9uIHdhcyBmbHVzaGVkLgorZXZlbnQ6MFgwRjQ0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDI0NCA6IChHcm91cCAyNDQgcG1fbXJrX21pc2MxKSBOdW1iZXIgb2YgcnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQuCitldmVudDowWDBGNDUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDI0NCA6IChHcm91cCAyNDQgcG1fbXJrX21pc2MxKSBQcm9jZXNzb3IgQ3ljbGVzIGdhdGVkIGJ5IHRoZSBydW4gbGF0Y2guICBPcGVyYXRpbmcgc3lzdGVtcyB1c2UgdGhlIHJ1biBsYXRjaCB0byBpbmRpY2F0ZSB3aGVuIHRoZXkgYXJlIGRvaW5nIHVzZWZ1bCB3b3JrLiAgVGhlIHJ1biBsYXRjaCBpcyB0eXBpY2FsbHkgY2xlYXJlZCBpbiB0aGUgT1MgaWRsZSBsb29wLiAgR2F0aW5nIGJ5IHRoZSBydW4gbGF0Y2ggZmlsdGVycyBvdXQgdGhlIGlkbGUgbG9vcC4KKworI0dyb3VwIDI0NSBwbV9tcmtfbWlzYzIsIE1hcmtlZCBtaXNjIGV2ZW50cworZXZlbnQ6MFgwRjUwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDI0NSA6IChHcm91cCAyNDUgcG1fbXJrX21pc2MyKSBOdW1iZXIgb2YgUG93ZXJQQyBJbnN0cnVjdGlvbnMgdGhhdCBjb21wbGV0ZWQuCitldmVudDowWDBGNTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19GWFVfRklOX0dSUDI0NSA6IChHcm91cCAyNDUgcG1fbXJrX21pc2MyKSBPbmUgb2YgdGhlIEZpeGVkIFBvaW50IFVuaXRzIGZpbmlzaGVkIGEgbWFya2VkIGluc3RydWN0aW9uLiAgSW5zdHJ1Y3Rpb25zIHRoYXQgZmluaXNoIG1heSBub3QgbmVjZXNzYXJ5IGNvbXBsZXRlLgorZXZlbnQ6MFgwRjUyIGNvdW50ZXJzOjIgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfSUZVX0ZJTl9HUlAyNDUgOiAoR3JvdXAgMjQ1IHBtX21ya19taXNjMikgVGhlIEluc3RydWN0aW9uIEZldGNoIFVuaXQgZmluaXNoZWQgYSBtYXJrZWQgaW5zdHJ1Y3Rpb24uCitldmVudDowWDBGNTMgY291bnRlcnM6MyB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19MU1VfRklOX0dSUDI0NSA6IChHcm91cCAyNDUgcG1fbXJrX21pc2MyKSBPbmUgb2YgdGhlIExvYWQvU3RvcmUgVW5pdHMgZmluaXNoZWQgYSBtYXJrZWQgaW5zdHJ1Y3Rpb24uIEluc3RydWN0aW9ucyB0aGF0IGZpbmlzaCBtYXkgbm90IG5lY2Vzc2FyeSBjb21wbGV0ZQorZXZlbnQ6MFgwRjU0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDI0NSA6IChHcm91cCAyNDUgcG1fbXJrX21pc2MyKSBOdW1iZXIgb2YgcnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQuCitldmVudDowWDBGNTUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDI0NSA6IChHcm91cCAyNDUgcG1fbXJrX21pc2MyKSBQcm9jZXNzb3IgQ3ljbGVzIGdhdGVkIGJ5IHRoZSBydW4gbGF0Y2guICBPcGVyYXRpbmcgc3lzdGVtcyB1c2UgdGhlIHJ1biBsYXRjaCB0byBpbmRpY2F0ZSB3aGVuIHRoZXkgYXJlIGRvaW5nIHVzZWZ1bCB3b3JrLiAgVGhlIHJ1biBsYXRjaCBpcyB0eXBpY2FsbHkgY2xlYXJlZCBpbiB0aGUgT1MgaWRsZSBsb29wLiAgR2F0aW5nIGJ5IHRoZSBydW4gbGF0Y2ggZmlsdGVycyBvdXQgdGhlIGlkbGUgbG9vcC4KKworI0dyb3VwIDI0NiBwbV9tcmtfbWlzYzMsIE1hcmtlZCBtaXNjIGV2ZW50cworZXZlbnQ6MFgwRjYwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDI0NiA6IChHcm91cCAyNDYgcG1fbXJrX21pc2MzKSBOdW1iZXIgb2YgUG93ZXJQQyBJbnN0cnVjdGlvbnMgdGhhdCBjb21wbGV0ZWQuCitldmVudDowWDBGNjEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19CUlVfRklOX0dSUDI0NiA6IChHcm91cCAyNDYgcG1fbXJrX21pc2MzKSBUaGUgYnJhbmNoIHVuaXQgZmluaXNoZWQgYSBtYXJrZWQgaW5zdHJ1Y3Rpb24uIEluc3RydWN0aW9ucyB0aGF0IGZpbmlzaCBtYXkgbm90IG5lY2Vzc2FyeSBjb21wbGV0ZS4KK2V2ZW50OjBYMEY2MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0xTVV9QQVJUSUFMX0NERl9HUlAyNDYgOiAoR3JvdXAgMjQ2IHBtX21ya19taXNjMykgQSBwYXJ0aWFsIGNhY2hlbGluZSB3YXMgcmV0dXJuZWQgZnJvbSB0aGUgTDMgZm9yIGEgbWFya2VkIGxvYWQKK2V2ZW50OjBYMEY2MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0xTVV9GSU5fR1JQMjQ2IDogKEdyb3VwIDI0NiBwbV9tcmtfbWlzYzMpIE9uZSBvZiB0aGUgTG9hZC9TdG9yZSBVbml0cyBmaW5pc2hlZCBhIG1hcmtlZCBpbnN0cnVjdGlvbi4gSW5zdHJ1Y3Rpb25zIHRoYXQgZmluaXNoIG1heSBub3QgbmVjZXNzYXJ5IGNvbXBsZXRlCitldmVudDowWDBGNjQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQMjQ2IDogKEdyb3VwIDI0NiBwbV9tcmtfbWlzYzMpIE51bWJlciBvZiBydW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZC4KK2V2ZW50OjBYMEY2NSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQMjQ2IDogKEdyb3VwIDI0NiBwbV9tcmtfbWlzYzMpIFByb2Nlc3NvciBDeWNsZXMgZ2F0ZWQgYnkgdGhlIHJ1biBsYXRjaC4gIE9wZXJhdGluZyBzeXN0ZW1zIHVzZSB0aGUgcnVuIGxhdGNoIHRvIGluZGljYXRlIHdoZW4gdGhleSBhcmUgZG9pbmcgdXNlZnVsIHdvcmsuICBUaGUgcnVuIGxhdGNoIGlzIHR5cGljYWxseSBjbGVhcmVkIGluIHRoZSBPUyBpZGxlIGxvb3AuICBHYXRpbmcgYnkgdGhlIHJ1biBsYXRjaCBmaWx0ZXJzIG91dCB0aGUgaWRsZSBsb29wLgorCisjR3JvdXAgMjQ3IHBtX21ya19taXNjNCwgTWFya2VkIG1pc2MgZXZlbnRzCitldmVudDowWDBGNzAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19GSU5fU1RBTExfQ1lDX0dSUDI0NyA6IChHcm91cCAyNDcgcG1fbXJrX21pc2M0KSBNYXJrZWQgaW5zdHJ1Y3Rpb24gRmluaXNoIFN0YWxsIGN5Y2xlcyAobWFya2VkIGZpbmlzaCBhZnRlciBOVEMpCitldmVudDowWDBGNzEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9JTlNUX0NNUExfR1JQMjQ3IDogKEdyb3VwIDI0NyBwbV9tcmtfbWlzYzQpIE51bWJlciBvZiBQb3dlclBDIEluc3RydWN0aW9ucyB0aGF0IGNvbXBsZXRlZC4KK2V2ZW50OjBYMEY3MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX1ZTVV9GSU5fR1JQMjQ3IDogKEdyb3VwIDI0NyBwbV9tcmtfbWlzYzQpIHZzdSAoZnB1KSBtYXJrZWQgIGluc3RyIGZpbmlzaAorZXZlbnQ6MFgwRjczIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfR1JQX0lDX01JU1NfR1JQMjQ3IDogKEdyb3VwIDI0NyBwbV9tcmtfbWlzYzQpIEEgZ3JvdXAgY29udGFpbmluZyBhIG1hcmtlZCAoc2FtcGxlZCkgaW5zdHJ1Y3Rpb24gZXhwZXJpZW5jZWQgYW4gaW5zdHJ1Y3Rpb24gY2FjaGUgbWlzcy4KK2V2ZW50OjBYMEY3NCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlAyNDcgOiAoR3JvdXAgMjQ3IHBtX21ya19taXNjNCkgTnVtYmVyIG9mIHJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkLgorZXZlbnQ6MFgwRjc1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAyNDcgOiAoR3JvdXAgMjQ3IHBtX21ya19taXNjNCkgUHJvY2Vzc29yIEN5Y2xlcyBnYXRlZCBieSB0aGUgcnVuIGxhdGNoLiAgT3BlcmF0aW5nIHN5c3RlbXMgdXNlIHRoZSBydW4gbGF0Y2ggdG8gaW5kaWNhdGUgd2hlbiB0aGV5IGFyZSBkb2luZyB1c2VmdWwgd29yay4gIFRoZSBydW4gbGF0Y2ggaXMgdHlwaWNhbGx5IGNsZWFyZWQgaW4gdGhlIE9TIGlkbGUgbG9vcC4gIEdhdGluZyBieSB0aGUgcnVuIGxhdGNoIGZpbHRlcnMgb3V0IHRoZSBpZGxlIGxvb3AuCisKKyNHcm91cCAyNDggcG1fbXJrX21pc2M1LCBNYXJrZWQgbWlzYyBldmVudHMKK2V2ZW50OjBYMEY4MCBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX0ZJTl9TVEFMTF9DWUNfQ09VTlRfR1JQMjQ4IDogKEdyb3VwIDI0OCBwbV9tcmtfbWlzYzUpIE1hcmtlZCBpbnN0cnVjdGlvbiBGaW5pc2ggU3RhbGwgY3ljbGVzIChtYXJrZWQgZmluaXNoIGFmdGVyIE5UQykgKHVzZSBlZGdlIGRldGVjdCB0byBjb3VudCAjKQorZXZlbnQ6MFgwRjgxIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfREZVX0ZJTl9HUlAyNDggOiAoR3JvdXAgMjQ4IHBtX21ya19taXNjNSkgVGhlIERlY2ltYWwgRmxvYXRpbmcgUG9pbnQgVW5pdCBmaW5pc2hlZCBhIG1hcmtlZCBpbnN0cnVjdGlvbi4KK2V2ZW50OjBYMEY4MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fTVJLX1NUQUxMX0NNUExVX0NZQ19DT1VOVF9HUlAyNDggOiAoR3JvdXAgMjQ4IHBtX21ya19taXNjNSkgTWFya2VkIEdyb3VwIENvbXBsZXRpb24gU3RhbGwgY3ljbGVzICh1c2UgZWRnZSBkZXRlY3QgdG8gY291bnQgIykKK2V2ZW50OjBYMEY4MyBjb3VudGVyczozIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAyNDggOiAoR3JvdXAgMjQ4IHBtX21ya19taXNjNSkgTnVtYmVyIG9mIFBvd2VyUEMgSW5zdHJ1Y3Rpb25zIHRoYXQgY29tcGxldGVkLgorZXZlbnQ6MFgwRjg0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDI0OCA6IChHcm91cCAyNDggcG1fbXJrX21pc2M1KSBOdW1iZXIgb2YgcnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQuCitldmVudDowWDBGODUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDI0OCA6IChHcm91cCAyNDggcG1fbXJrX21pc2M1KSBQcm9jZXNzb3IgQ3ljbGVzIGdhdGVkIGJ5IHRoZSBydW4gbGF0Y2guICBPcGVyYXRpbmcgc3lzdGVtcyB1c2UgdGhlIHJ1biBsYXRjaCB0byBpbmRpY2F0ZSB3aGVuIHRoZXkgYXJlIGRvaW5nIHVzZWZ1bCB3b3JrLiAgVGhlIHJ1biBsYXRjaCBpcyB0eXBpY2FsbHkgY2xlYXJlZCBpbiB0aGUgT1MgaWRsZSBsb29wLiAgR2F0aW5nIGJ5IHRoZSBydW4gbGF0Y2ggZmlsdGVycyBvdXQgdGhlIGlkbGUgbG9vcC4KKworI0dyb3VwIDI0OSBwbV9tcmtfbWlzYzYsIE1hcmtlZCBtaXNjIGV2ZW50cworZXZlbnQ6MFgwRjkwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9HUlBfTVJLX0NZQ19HUlAyNDkgOiAoR3JvdXAgMjQ5IHBtX21ya19taXNjNikgY3ljbGVzIElEVSBtYXJrZWQgaW5zdHJ1Y3Rpb24gYmVmb3JlIGRpc3BhdGNoCitldmVudDowWDBGOTEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDI0OSA6IChHcm91cCAyNDkgcG1fbXJrX21pc2M2KSBQcm9jZXNzb3IgQ3ljbGVzIGdhdGVkIGJ5IHRoZSBydW4gbGF0Y2guICBPcGVyYXRpbmcgc3lzdGVtcyB1c2UgdGhlIHJ1biBsYXRjaCB0byBpbmRpY2F0ZSB3aGVuIHRoZXkgYXJlIGRvaW5nIHVzZWZ1bCB3b3JrLiAgVGhlIHJ1biBsYXRjaCBpcyB0eXBpY2FsbHkgY2xlYXJlZCBpbiB0aGUgT1MgaWRsZSBsb29wLiAgR2F0aW5nIGJ5IHRoZSBydW4gbGF0Y2ggZmlsdGVycyBvdXQgdGhlIGlkbGUgbG9vcC4KK2V2ZW50OjBYMEY5MiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAyNDkgOiAoR3JvdXAgMjQ5IHBtX21ya19taXNjNikgTnVtYmVyIG9mIFBvd2VyUEMgSW5zdHJ1Y3Rpb25zIHRoYXQgY29tcGxldGVkLgorZXZlbnQ6MFgwRjkzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfR1JQX0NNUExfR1JQMjQ5IDogKEdyb3VwIDI0OSBwbV9tcmtfbWlzYzYpIEEgZ3JvdXAgY29udGFpbmluZyBhIHNhbXBsZWQgaW5zdHJ1Y3Rpb24gY29tcGxldGVkLiAgTWljcm9jb2RlZCBpbnN0cnVjdGlvbnMgdGhhdCBzcGFuIG11bHRpcGxlIGdyb3VwcyB3aWxsIGdlbmVyYXRlIHRoaXMgZXZlbnQgb25jZSBwZXIgZ3JvdXAuCitldmVudDowWDBGOTQgY291bnRlcnM6NCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX1JVTl9JTlNUX0NNUExfR1JQMjQ5IDogKEdyb3VwIDI0OSBwbV9tcmtfbWlzYzYpIE51bWJlciBvZiBydW4gaW5zdHJ1Y3Rpb25zIGNvbXBsZXRlZC4KK2V2ZW50OjBYMEY5NSBjb3VudGVyczo1IHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX1JVTl9DWUNfR1JQMjQ5IDogKEdyb3VwIDI0OSBwbV9tcmtfbWlzYzYpIFByb2Nlc3NvciBDeWNsZXMgZ2F0ZWQgYnkgdGhlIHJ1biBsYXRjaC4gIE9wZXJhdGluZyBzeXN0ZW1zIHVzZSB0aGUgcnVuIGxhdGNoIHRvIGluZGljYXRlIHdoZW4gdGhleSBhcmUgZG9pbmcgdXNlZnVsIHdvcmsuICBUaGUgcnVuIGxhdGNoIGlzIHR5cGljYWxseSBjbGVhcmVkIGluIHRoZSBPUyBpZGxlIGxvb3AuICBHYXRpbmcgYnkgdGhlIHJ1biBsYXRjaCBmaWx0ZXJzIG91dCB0aGUgaWRsZSBsb29wLgorCisjR3JvdXAgMjUwIHBtX21ya19taXNjNywgTWFya2VkIG1pc2MgZXZlbnRzCitldmVudDowWDBGQTAgY291bnRlcnM6MCB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19MU1VfUkVKRUNUX0xIU19HUlAyNTAgOiAoR3JvdXAgMjUwIHBtX21ya19taXNjNykgVGhlIExvYWQgU3RvcmUgVW5pdCByZWplY3RlZCBhIG1hcmtlZCBsb2FkIGluc3RydWN0aW9uIHRoYXQgaGFkIGFuIGFkZHJlc3Mgb3ZlcmxhcCB3aXRoIGFuIG9sZGVyIHN0b3JlIGluIHRoZSBzdG9yZSBxdWV1ZS4gVGhlIHN0b3JlIG11c3QgYmUgY29tbWl0dGVkIGFuZCBkZS1hbGxvY2F0ZWQgZnJvbSB0aGUgU3RvcmUgUXVldWUgYmVmb3JlIHRoZSBsb2FkIGNhbiBleGVjdXRlIHN1Y2Nlc3NmdWxseQorZXZlbnQ6MFgwRkExIGNvdW50ZXJzOjEgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fSU5TVF9DTVBMX0dSUDI1MCA6IChHcm91cCAyNTAgcG1fbXJrX21pc2M3KSBOdW1iZXIgb2YgUG93ZXJQQyBJbnN0cnVjdGlvbnMgdGhhdCBjb21wbGV0ZWQuCitldmVudDowWDBGQTIgY291bnRlcnM6MiB1bTp6ZXJvIG1pbmltdW06MTAwMCBuYW1lOlBNX01SS19MU1VfUkVKRUNUX0VSQVRfTUlTU19HUlAyNTAgOiAoR3JvdXAgMjUwIHBtX21ya19taXNjNykgTFNVIG1hcmtlZCByZWplY3QgZHVlIHRvIEVSQVQgKHVwIHRvIDIgcGVyIGN5Y2xlKQorZXZlbnQ6MFgwRkEzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfTFNVX1JFSkVDVF9HUlAyNTAgOiAoR3JvdXAgMjUwIHBtX21ya19taXNjNykgTFNVIG1hcmtlZCByZWplY3QgKHVwIHRvIDIgcGVyIGN5Y2xlKQorZXZlbnQ6MFgwRkE0IGNvdW50ZXJzOjQgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9SVU5fSU5TVF9DTVBMX0dSUDI1MCA6IChHcm91cCAyNTAgcG1fbXJrX21pc2M3KSBOdW1iZXIgb2YgcnVuIGluc3RydWN0aW9ucyBjb21wbGV0ZWQuCitldmVudDowWDBGQTUgY291bnRlcnM6NSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9SVU5fQ1lDX0dSUDI1MCA6IChHcm91cCAyNTAgcG1fbXJrX21pc2M3KSBQcm9jZXNzb3IgQ3ljbGVzIGdhdGVkIGJ5IHRoZSBydW4gbGF0Y2guICBPcGVyYXRpbmcgc3lzdGVtcyB1c2UgdGhlIHJ1biBsYXRjaCB0byBpbmRpY2F0ZSB3aGVuIHRoZXkgYXJlIGRvaW5nIHVzZWZ1bCB3b3JrLiAgVGhlIHJ1biBsYXRjaCBpcyB0eXBpY2FsbHkgY2xlYXJlZCBpbiB0aGUgT1MgaWRsZSBsb29wLiAgR2F0aW5nIGJ5IHRoZSBydW4gbGF0Y2ggZmlsdGVycyBvdXQgdGhlIGlkbGUgbG9vcC4KKworI0dyb3VwIDI1MSBwbV9tcmtfbWlzYzgsIE1hcmtlZCBtaXNjIGV2ZW50cworZXZlbnQ6MFgwRkIwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fQ1lDX0dSUDI1MSA6IChHcm91cCAyNTEgcG1fbXJrX21pc2M4KSBQcm9jZXNzb3IgQ3ljbGVzCitldmVudDowWDBGQjEgY291bnRlcnM6MSB1bTp6ZXJvIG1pbmltdW06MTAwMDAgbmFtZTpQTV9DWUNfR1JQMjUxIDogKEdyb3VwIDI1MSBwbV9tcmtfbWlzYzgpIFByb2Nlc3NvciBDeWNsZXMKK2V2ZW50OjBYMEZCMiBjb3VudGVyczoyIHVtOnplcm8gbWluaW11bToxMDAwMCBuYW1lOlBNX0lOU1RfQ01QTF9HUlAyNTEgOiAoR3JvdXAgMjUxIHBtX21ya19taXNjOCkgTnVtYmVyIG9mIFBvd2VyUEMgSW5zdHJ1Y3Rpb25zIHRoYXQgY29tcGxldGVkLgorZXZlbnQ6MFgwRkIzIGNvdW50ZXJzOjMgdW06emVybyBtaW5pbXVtOjEwMDAgbmFtZTpQTV9NUktfTFNVX0ZJTl9HUlAyNTEgOiAoR3JvdXAgMjUxIHBtX21ya19taXNjOCkgT25lIG9mIHRoZSBMb2FkL1N0b3JlIFVuaXRzIGZpbmlzaGVkIGEgbWFya2VkIGluc3RydWN0aW9uLiBJbnN0cnVjdGlvbnMgdGhhdCBmaW5pc2ggbWF5IG5vdCBuZWNlc3NhcnkgY29tcGxldGUKK2V2ZW50OjBYMEZCNCBjb3VudGVyczo0IHVtOnplcm8gbWluaW11bToxMDAwIG5hbWU6UE1fUlVOX0lOU1RfQ01QTF9HUlAyNTEgOiAoR3JvdXAgMjUxIHBtX21ya19taXNjOCkgTnVtYmVyIG9mIHJ1biBpbnN0cnVjdGlvbnMgY29tcGxldGVkLgorZXZlbnQ6MFgwRkI1IGNvdW50ZXJzOjUgdW06emVybyBtaW5pbXVtOjEwMDAwIG5hbWU6UE1fUlVOX0NZQ19HUlAyNTEgOiAoR3JvdXAgMjUxIHBtX21ya19taXNjOCkgUHJvY2Vzc29yIEN5Y2xlcyBnYXRlZCBieSB0aGUgcnVuIGxhdGNoLiAgT3BlcmF0aW5nIHN5c3RlbXMgdXNlIHRoZSBydW4gbGF0Y2ggdG8gaW5kaWNhdGUgd2hlbiB0aGV5IGFyZSBkb2luZyB1c2VmdWwgd29yay4gIFRoZSBydW4gbGF0Y2ggaXMgdHlwaWNhbGx5IGNsZWFyZWQgaW4gdGhlIE9TIGlkbGUgbG9vcC4gIEdhdGluZyBieSB0aGUgcnVuIGxhdGNoIGZpbHRlcnMgb3V0IHRoZSBpZGxlIGxvb3AuCmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9ldmVudHMvcHBjNjQvcG93ZXI3L3VuaXRfbWFza3MgYi9vcHJvZmlsZS0wLjkuNy9ldmVudHMvcHBjNjQvcG93ZXI3L3VuaXRfbWFza3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWI1NWFmYQotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2V2ZW50cy9wcGM2NC9wb3dlcjcvdW5pdF9tYXNrcwpAQCAtMCwwICsxLDkgQEAKKyMKKyMgQ29weXJpZ2h0IE9Qcm9maWxlIGF1dGhvcnMKKyMgQ29weXJpZ2h0IChjKSBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzLCAyMDA5LgorIyBDb250cmlidXRlZCBieSBNYXluYXJkIEpvaG5zb24gPG1heW5hcmRqQHVzLmlibS5jb20+LgorIworIyBwcGM2NCBQT1dFUjcgcG9zc2libGUgdW5pdCBtYXNrcworIworbmFtZTp6ZXJvIHR5cGU6bWFuZGF0b3J5IGRlZmF1bHQ6MHgwCisJMHgwIE5vIHVuaXQgbWFzawpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL3J0Yy9ldmVudHMgYi9vcHJvZmlsZS0wLjkuNy9ldmVudHMvcnRjL2V2ZW50cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jY2U0NGIwCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL3J0Yy9ldmVudHMKQEAgLTAsMCArMSwzIEBACisjIFJUQyBldmVudHMKKyMKK25hbWU6UlRDX0lOVEVSUlVQVFMgZXZlbnQ6MHhmZiBjb3VudGVyczowIHVtOnplcm8gbWluaW11bToyIDogUlRDIGludGVycnVwdHMvc2VjIChyb3VuZGVkIHVwIHRvIHBvd2VyIG9mIHR3bykKZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2V2ZW50cy9ydGMvdW5pdF9tYXNrcyBiL29wcm9maWxlLTAuOS43L2V2ZW50cy9ydGMvdW5pdF9tYXNrcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTg0YjYyCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL3J0Yy91bml0X21hc2tzCkBAIC0wLDAgKzEsNCBAQAorIyBSVEMgcG9zc2libGUgdW5pdCBtYXNrcworIworbmFtZTp6ZXJvIHR5cGU6bWFuZGF0b3J5IGRlZmF1bHQ6MHgwCisJMHgwIE5vIHVuaXQgbWFzawpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL3g4Ni02NC9mYW1pbHkxMC9ldmVudHMgYi9vcHJvZmlsZS0wLjkuNy9ldmVudHMveDg2LTY0L2ZhbWlseTEwL2V2ZW50cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjEzZjI2Ci0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL3g4Ni02NC9mYW1pbHkxMC9ldmVudHMKQEAgLTAsMCArMSwyNTAgQEAKKyMgQU1EIEZhbWlseSAxMCBwcm9jZXNzb3IgcGVyZm9ybWFuY2UgZXZlbnRzCisjCisjIENvcHlyaWdodCBPUHJvZmlsZSBhdXRob3JzCisjIENvcHlyaWdodCAoYykgMjAwNi0yMDA4IEFkdmFuY2VkIE1pY3JvIERldmljZXMKKyMgQ29udHJpYnV0ZWQgYnkgUmF5IEJyeWFudCA8cmF5YnJ5IGF0IGFtZC5jb20+LAorIwkJSmFzb24gWWVoIDxqYXNvbi55ZWggYXQgYW1kLmNvbT4KKyMJCVN1cmF2ZWUgU3V0aGlrdWxwYW5pdCA8c3VyYXZlZS5zdXRoaWt1bHBhbml0IGF0IGFtZC5jb20+CisjCisjIFNvdXJjZXM6IEJJT1MgYW5kIEtlcm5lbCBEZXZlbG9wZXIncyBHdWlkZSBmb3IgQU1EIEZhbWlseSAxMGggUHJvY2Vzc29ycywKKyMgICAgICAgICAgUHVibGljYXRpb24jIDMxMTE2LCBSZXZpc2lvbiAzLjQ4LCBBcHJpbCAyMiwgMjAxMAorIworIyAgICAgICAgICBTb2Z0d2FyZSBPcHRpbWl6YXRpb24gR3VpZGUgZm9yIEFNRCBGYW1pbHkgMTBoIGFuZCBGYW1pbHkgMTJoIFByb2Nlc3NvcnMsCisjICAgICAgICAgIFB1YmxpY2F0aW9uIyA0MDU0NiwgUmV2aXNpb24gMy4xMywgRmVicnVhcnkgMjAxMQorIyAgICAgICAgICAoTm90ZTogRm9yIElCUyBEZXJpdmVkIFBlcmZvcm1hbmNlIEV2ZW50cykKKyMKKyMgUmV2aXNpb246IDEuNAorIworIyBDaGFuZ2VMb2c6IAorIwkxLjQ6IDExIE1hcmNoIDIwMTEKKyMgICAgICAgLSBVcGRhdGUgdG8gQktERyByZXZpc2lvbiAzLjQ4CisjICAgICAgIC0gRml4IHR5cG8gaW4gdGhlIGRlc2NyaXB0aW9uIGZvciBldmVudCAweGYyNDQKKyMgICAgICAgLSBVcGRhdGUgdGhlIG1pbmltdW0gZm9yIFJFVElSRURfVU9QUworIyAgICAgICAtIEFkZCBldmVudCAweDY4LCAweDY5CisjCisjCTEuMzogMjIgT2N0b2JlciAyMDA5LgorIyAJLSBVcGRhdGUgZnJvbSBCS0RHIFJldiAzLjI4IHRvIFJldiAzLjM0IChubyBjaGFuZ2UpCisjCS0gU3BlY2lmeSB0aGF0IGV2ZW50IDRFRGggaXMgZm9yIFJldiBEIG9ubHkKKyMKKyMJMS4yOiAwMyBKdW5lIDIwMDkuCisjIAktIFVwZGF0ZSBmcm9tIEJLREcgUmV2IDMuMjAgdG8gUmV2IDMuMjgKKyMJLSBBZGQgRXZlbnQgNEVEaAorIwktIE1vZGlmeSB1bml0bWFza3MgZm9yIDRFMGgtNEUzaAorIworIwkxLjE6IDA2IEFwcmlsIDIwMDkuCisjIAktIEFkZCBJQlMtZGVyaXZlZCBldmVudHMKKyMgCS0gVXBkYXRlIGZyb20gQktERyBSZXYgMy4wMCB0byBSZXYgMy4yMAorIyAJLSBBZGQgRXZlbnRzIDE2NWgsIDFjMGgsIDFjZmgsIDFkM2gtMWQ1aAorIworIyBGbG9hdGluZyBwb2ludCBldmVudHMKK2V2ZW50OjB4MDAgY291bnRlcnM6MCwxLDIsMyB1bTpmcHVfb3BzIG1pbmltdW06NTAwIG5hbWU6RElTUEFUQ0hFRF9GUFVfT1BTIDogRGlzcGF0Y2hlZCBGUFUgb3BzCitldmVudDoweDAxIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkNZQ0xFU19GUFVfRU1QVFkgOiBUaGUgbnVtYmVyIG9mIGN5Y2xlcyBpbiB3aGljaCB0aGUgUEZVIGlzIGVtcHR5CitldmVudDoweDAyIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRJU1BBVENIRURfRlBVX09QU19GQVNUX0ZMQUcgOiBUaGUgbnVtYmVyIG9mIEZQVSBvcGVyYXRpb25zIHRoYXQgdXNlIHRoZSBmYXN0IGZsYWcgaW50ZXJmYWNlCitldmVudDoweDAzIGNvdW50ZXJzOjAsMSwyLDMgdW06c3NlX29wcyBtaW5pbXVtOjUwMCBuYW1lOlJFVElSRURfU1NFX09QUyA6IFRoZSBudW1iZXIgb2YgU1NFIG9wcyBvciB1b3BzIHJldGlyZWQKK2V2ZW50OjB4MDQgY291bnRlcnM6MCwxLDIsMyB1bTptb3ZlX29wcyBtaW5pbXVtOjUwMCBuYW1lOlJFVElSRURfTU9WRV9PUFMgOiBUaGUgbnVtYmVyIG9mIG1vdmUgdW9wcyByZXRpcmVkCitldmVudDoweDA1IGNvdW50ZXJzOjAsMSwyLDMgdW06c2VyaWFsX29wcyBtaW5pbXVtOjUwMCBuYW1lOlJFVElSRURfU0VSSUFMSVpJTkdfT1BTIDogVGhlIG51bWJlciBvZiBzZXJpYWxpemluZyB1b3BzIHJldGlyZWQuCitldmVudDoweDA2IGNvdW50ZXJzOjAsMSwyLDMgdW06c2VyaWFsX29wc19zY2hlZCBtaW5pbXVtOjUwMCBuYW1lOlNFUklBTF9VT1BTX0lOX0ZQX1NDSEVEIDogTnVtYmVyIG9mIGN5Y2xlcyBhIHNlcmlhbGl6aW5nIHVvcCBpcyBpbiB0aGUgRlAgc2NoZWR1bGVyCisKKyMgTG9hZCwgU3RvcmUsIGFuZCBUTEIgZXZlbnRzCitldmVudDoweDIwIGNvdW50ZXJzOjAsMSwyLDMgdW06c2VncmVnbG9hZCBtaW5pbXVtOjUwMCBuYW1lOlNFR01FTlRfUkVHSVNURVJfTE9BRFMgOiBTZWdtZW50IHJlZ2lzdGVyIGxvYWRzCitldmVudDoweDIxIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlBJUEVMSU5FX1JFU1RBUlRfRFVFX1RPX1NFTEZfTU9ESUZZSU5HX0NPREUgOiBNaWNyby1hcmNoaXRlY3R1cmFsIHJlLXN5bmMgY2F1c2VkIGJ5IHNlbGYgbW9kaWZ5aW5nIGNvZGUKK2V2ZW50OjB4MjIgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6UElQRUxJTkVfUkVTVEFSVF9EVUVfVE9fUFJPQkVfSElUIDogTWljcm8tYXJjaGl0ZWN0dXJhbCByZS1zeW5jIGNhdXNlZCBieSBzbm9vcAorZXZlbnQ6MHgyMyBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpMU19CVUZGRVJfMl9GVUxMX0NZQ0xFUyA6IEN5Y2xlcyBMUyBCdWZmZXIgMiBGdWxsCitldmVudDoweDI0IGNvdW50ZXJzOjAsMSwyLDMgdW06bG9ja19vcHMgbWluaW11bTo1MDAgbmFtZTpMT0NLRURfT1BTIDogTG9ja2VkIG9wZXJhdGlvbnMKK2V2ZW50OjB4MjYgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6UkVUSVJFRF9DTEZMVVNIX0lOU1RSVUNUSU9OUyA6IFJldGlyZWQgQ0xGTFVTSCBpbnN0cnVjdGlvbnMKK2V2ZW50OjB4MjcgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6UkVUSVJFRF9DUFVJRF9JTlNUUlVDVElPTlMgOiBSZXRpcmVkIENQVUlEIGluc3RydWN0aW9ucworZXZlbnQ6MHgyYSBjb3VudGVyczowLDEsMiwzIHVtOnN0b3JlX3RvX2xvYWQgbWluaW11bTo1MDAgbmFtZTpDQU5DRUxMRURfU1RPUkVfVE9fTE9BRCA6IENvdW50cyB0aGUgbnVtYmVyIG9mIGNhbmNlbGxlZCBzdG9yZSB0byBsb2FkIGZvcndhcmQgb3BlcmF0aW9ucworZXZlbnQ6MHgyYiBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpTTUlTX1JFQ0VJVkVEIDogQ291bnRzIHRoZSBudW1iZXIgb2YgU01JcyByZWNlaXZlZCBieSB0aGUgcHJvY2Vzc29yCisKKyMgRGF0YSBDYWNoZSBldmVudAorZXZlbnQ6MHg0MCBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpEQVRBX0NBQ0hFX0FDQ0VTU0VTIDogRGF0YSBjYWNoZSBhY2Nlc3NlcworZXZlbnQ6MHg0MSBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpEQVRBX0NBQ0hFX01JU1NFUyA6IERhdGEgY2FjaGUgbWlzc2VzCisjIE5vdGU6IHVuaXQgbWFzayAweDAxIGNvdW50cyBzYW1lIGV2ZW50cyBhcyBldmVudCBzZWxlY3QgMHg0MworZXZlbnQ6MHg0MiBjb3VudGVyczowLDEsMiwzIHVtOm1vZXNzIG1pbmltdW06NTAwIG5hbWU6REFUQV9DQUNIRV9SRUZJTExTX0ZST01fTDJfT1JfTk9SVEhCUklER0UgOiBEYXRhIGNhY2hlIHJlZmlsbHMgZnJvbSBMMiBvciBOb3J0aGJyaWRnZQorZXZlbnQ6MHg0MyBjb3VudGVyczowLDEsMiwzIHVtOm1vZXNpIG1pbmltdW06NTAwIG5hbWU6REFUQV9DQUNIRV9SRUZJTExTX0ZST01fTk9SVEhCUklER0UgOiBEYXRhIGNhY2hlIHJlZmlsbHMgZnJvbSBOb3J0aGJyaWRnZQorZXZlbnQ6MHg0NCBjb3VudGVyczowLDEsMiwzIHVtOm1vZXNpX2doIG1pbmltdW06NTAwIG5hbWU6REFUQV9DQUNIRV9MSU5FU19FVklDVEVEIDogRGF0YSBjYWNoZSBsaW5lcyBldmljdGVkCitldmVudDoweDQ1IGNvdW50ZXJzOjAsMSwyLDMgdW06bDFfZHRsYl9taXNzX2wyX2hpdCBtaW5pbXVtOjUwMCBuYW1lOkwxX0RUTEJfTUlTU19BTkRfTDJfRFRMQl9ISVQgOiBMMSBEVExCIG1pc3MgYW5kIEwyIERUTEIgaGl0CitldmVudDoweDQ2IGNvdW50ZXJzOjAsMSwyLDMgdW06bDFfbDJfZHRsYl9taXNzIG1pbmltdW06NTAwIG5hbWU6TDFfRFRMQl9BTkRfTDJfRFRMQl9NSVNTIDogTDEgRFRMQiBhbmQgTDIgRFRMQiBtaXNzCitldmVudDoweDQ3IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOk1JU0FMSUdORURfQUNDRVNTRVMgOiBNaXNhbGlnbmVkIEFjY2Vzc2VzCitldmVudDoweDQ4IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOk1JQ1JPX0FSQ0hfTEFURV9DQU5DRUxfQUNDRVNTIDogTWljcm9hcmNoaXRlY3R1cmFsIGxhdGUgY2FuY2VsIG9mIGFuIGFjY2VzcworZXZlbnQ6MHg0OSBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpNSUNST19BUkNIX0VBUkxZX0NBTkNFTF9BQ0NFU1MgOiBNaWNyb2FyY2hpdGVjdHVyYWwgZWFybHkgY2FuY2VsIG9mIGFuIGFjY2VzcworZXZlbnQ6MHg0YSBjb3VudGVyczowLDEsMiwzIHVtOmVjYyBtaW5pbXVtOjUwMCBuYW1lOjFfQklUX0VDQ19FUlJPUlMgOiBTaW5nbGUtYml0IEVDQyBlcnJvcnMgcmVjb3JkZWQgYnkgc2NydWJiZXIKK2V2ZW50OjB4NGIgY291bnRlcnM6MCwxLDIsMyB1bTpwcmVmZXRjaCBtaW5pbXVtOjUwMCBuYW1lOlBSRUZFVENIX0lOU1RSVUNUSU9OU19ESVNQQVRDSEVEIDogVGhlIG51bWJlciBvZiBwcmVmZXRjaCBpbnN0cnVjdGlvbnMgZGlzcGF0Y2hlZCBieSB0aGUgZGVjb2RlcgorZXZlbnQ6MHg0YyBjb3VudGVyczowLDEsMiwzIHVtOmxvY2tlZF9pbnN0cnVjdGlvbl9kY2FjaGVfbWlzcyBtaW5pbXVtOjUwMCBuYW1lOkxPQ0tFRF9JTlNUUlVDVElPTlNfRENBQ0hFX01JU1NFUyA6IFRoZSBudW1iZXIgb2YgZHRhIGNhY2hlIG1pc3NlcyBieSBsb2NrZWQgaW5zdHJ1Y3Rpb25zLgorZXZlbnQ6MHg0ZCBjb3VudGVyczowLDEsMiwzIHVtOmwxX2R0bGJfaGl0IG1pbmltdW06NTAwIG5hbWU6TDFfRFRMQl9ISVQgOiBMMSBEVExCIGhpdAorZXZlbnQ6MHg1MiBjb3VudGVyczowLDEsMiwzIHVtOnNvZnRfcHJlZmV0Y2ggbWluaW11bTo1MDAgbmFtZTpJTkVGRkVDVElWRV9TV19QUkVGRVRDSEVTIDogTnVtYmVyIG9mIHNvZnR3YXJlIHByZWZldGNoZXMgdGhhdCBkaWQgbm90IGZldGNoIGRhdGEgb3V0c2lkZSBvZiBwcm9jZXNzb3IgY29yZQorZXZlbnQ6MHg1NCBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpHTE9CQUxfVExCX0ZMVVNIRVMgOiBUaGUgbnVtYmVyIG9mIGdsb2JhbCBUTEIgZmx1c2hlcworCisjIEwyIENhY2hlIGFuZCBTeXN0ZW0gSW50ZXJmYWNlIGV2ZW50cworZXZlbnQ6MHg2NSBjb3VudGVyczowLDEsMiwzIHVtOm1lbXJlcXR5cGUgbWluaW11bTo1MDAgbmFtZTpNRU1PUllfUkVRVUVTVFMgOiBNZW1vcnkgcmVxdWVzdHMgYnkgdHlwZQorZXZlbnQ6MHg2NyBjb3VudGVyczowLDEsMiwzIHVtOmRhdGFwcmVmZXRjaCBtaW5pbXVtOjUwMCBuYW1lOkRBVEFfUFJFRkVUQ0hFUyA6IERhdGEgcHJlZmV0Y2hlcgorZXZlbnQ6MHgwNjggY291bnRlcnM6MCwxLDIsMyB1bTptYWJfYnVmZmVyIG1pbmltdW06NTAwIG5hbWU6TUFCX1JFUVMgOiBNQUIgUmVxdWVzdHMKK2V2ZW50OjB4MDY5IGNvdW50ZXJzOjAsMSwyLDMgdW06bWFiX2J1ZmZlciBtaW5pbXVtOjUwMCBuYW1lOk1BQl9XQUlUIDogTUFCIFdhaXQgQ3ljbGVzCitldmVudDoweDZjIGNvdW50ZXJzOjAsMSwyLDMgdW06c3lzdGVtcmVhZHJlc3BvbnNlIG1pbmltdW06NTAwIG5hbWU6Tk9SVEhCUklER0VfUkVBRF9SRVNQT05TRVMgOiBOb3J0aGJyaWRnZSByZWFkIHJlc3BvbnNlcyBieSBjb2hlcmVuY3kgc3RhdGUKK2V2ZW50OjB4NmQgY291bnRlcnM6MCwxLDIsMyB1bTpvY3R3b3JkX3RyYW5zZmVyIG1pbmltdW06NTAwIG5hbWU6T0NUV09SRF9XUklURV9UUkFOU0ZFUlMgOiBPY3R3b3JkcyB3cml0dGVuIHRvIHN5c3RlbQorZXZlbnQ6MHg3NiBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAwMCBuYW1lOkNQVV9DTEtfVU5IQUxURUQgOiBDeWNsZXMgb3V0c2lkZSBvZiBoYWx0IHN0YXRlCitldmVudDoweDdkIGNvdW50ZXJzOjAsMSwyLDMgdW06bDJfaW50ZXJuYWwgbWluaW11bTo1MDAgbmFtZTpSRVFVRVNUU19UT19MMiA6IFJlcXVlc3RzIHRvIEwyIENhY2hlCitldmVudDoweDdlIGNvdW50ZXJzOjAsMSwyLDMgdW06bDJfcmVxX21pc3MgbWluaW11bTo1MDAgbmFtZTpMMl9DQUNIRV9NSVNTIDogTDIgY2FjaGUgbWlzc2VzCitldmVudDoweDdmIGNvdW50ZXJzOjAsMSwyLDMgdW06bDJfZmlsbCBtaW5pbXVtOjUwMCBuYW1lOkwyX0NBQ0hFX0ZJTExfV1JJVEVCQUNLIDogTDIgZmlsbC93cml0ZWJhY2sKK2V2ZW50OjB4MTY1IGNvdW50ZXJzOjAsMSwyLDMgdW06cGFnZV9zaXplX21pc21hdGNoZXMgbWluaW11bTo1MDAgbmFtZTpQQUdFX1NJWkVfTUlTTUFUQ0hFUyA6IFBhZ2UgU2l6ZSBNaXNtYXRjaGVzCisKKyMgSW5zdHJ1Y3Rpb24gQ2FjaGUgZXZlbnRzCitldmVudDoweDgwIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOklOU1RSVUNUSU9OX0NBQ0hFX0ZFVENIRVMgOiBJbnN0cnVjdGlvbiBjYWNoZSBmZXRjaGVzIChSZXZFKQorZXZlbnQ6MHg4MSBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJTlNUUlVDVElPTl9DQUNIRV9NSVNTRVMgOiBJbnN0cnVjdGlvbiBjYWNoZSBtaXNzZXMKK2V2ZW50OjB4ODIgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SU5TVFJVQ1RJT05fQ0FDSEVfUkVGSUxMU19GUk9NX0wyIDogSW5zdHJ1Y3Rpb24gY2FjaGUgcmVmaWxscyBmcm9tIEwyCitldmVudDoweDgzIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOklOU1RSVUNUSU9OX0NBQ0hFX1JFRklMTFNfRlJPTV9TWVNURU0gOiBJbnN0cnVjdGlvbiBjYWNoZSByZWZpbGxzIGZyb20gc3lzdGVtCitldmVudDoweDg0IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkwxX0lUTEJfTUlTU19BTkRfTDJfSVRMQl9ISVQgOiBMMSBJVExCIG1pc3MgYW5kIEwyIElUTEIgaGl0CitldmVudDoweDg1IGNvdW50ZXJzOjAsMSwyLDMgdW06bDFfbDJfaXRsYl9taXNzIG1pbmltdW06NTAwIG5hbWU6TDFfSVRMQl9NSVNTX0FORF9MMl9JVExCX01JU1MgOiBMMSBJVExCIG1pc3MgYW5kIEwyIElUTEIgbWlzcworZXZlbnQ6MHg4NiBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpQSVBFTElORV9SRVNUQVJUX0RVRV9UT19JTlNUUlVDVElPTl9TVFJFQU1fUFJPQkUgOiBQaXBlbGluZSByZXN0YXJ0IGR1ZSB0byBpbnN0cnVjdGlvbiBzdHJlYW0gcHJvYmUKK2V2ZW50OjB4ODcgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SU5TVFJVQ1RJT05fRkVUQ0hfU1RBTEwgOiBJbnN0cnVjdGlvbiBmZXRjaCBzdGFsbAorZXZlbnQ6MHg4OCBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpSRVRVUk5fU1RBQ0tfSElUUyA6IFJldHVybiBzdGFjayBoaXQKK2V2ZW50OjB4ODkgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6UkVUVVJOX1NUQUNLX09WRVJGTE9XUyA6IFJldHVybiBzdGFjayBvdmVyZmxvdworZXZlbnQ6MHg4YiBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJTlNUUlVDVElPTl9DQUNIRV9WSUNUSU1TIDogTnVtYmVyIG9mIGluc3RydWN0aW9uIGNhY2hlIGxpbmVzIGV2aWN0aWNlZCB0byB0aGUgTDIgY2FjaGUKK2V2ZW50OjB4OGMgY291bnRlcnM6MCwxLDIsMyB1bTppY2FjaGVfaW52YWxpZGF0ZWQgbWluaW11bTo1MDAgbmFtZTpJTlNUUlVDVElPTl9DQUNIRV9JTlZBTElEQVRFRCA6IEluc3RydWN0aW9uIGNhY2hlIGxpbmVzIGludmFsaWRhdGVkCitldmVudDoweDk5IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOklUTEJfUkVMT0FEUyA6IFRoZSBudW1iZXIgb2YgSVRMQiByZWxvYWRzIHJlcXVlc3RzCitldmVudDoweDlhIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOklUTEJfUkVMT0FEU19BQk9SVEVEIDogVGhlIG51bWJlciBvZiBJVExCIHJlbG9hZHMgYWJvcnRlZAorCisjIEV4ZWN1dGlvbiBVbml0IGV2ZW50cworZXZlbnQ6MHhjMCBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAwMCBuYW1lOlJFVElSRURfSU5TVFJVQ1RJT05TIDogUmV0aXJlZCBpbnN0cnVjdGlvbnMgKGluY2x1ZGVzIGV4Y2VwdGlvbnMsIGludGVycnVwdHMsIHJlLXN5bmNzKQorZXZlbnQ6MHhjMSBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAwMCBuYW1lOlJFVElSRURfVU9QUyA6IFJldGlyZWQgbWljcm8tb3BzCitldmVudDoweGMyIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlJFVElSRURfQlJBTkNIX0lOU1RSVUNUSU9OUyA6IFJldGlyZWQgYnJhbmNoZXMgKGNvbmRpdGlvbmFsLCB1bmNvbmRpdGlvbmFsLCBleGNlcHRpb25zLCBpbnRlcnJ1cHRzKQorZXZlbnQ6MHhjMyBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpSRVRJUkVEX01JU1BSRURJQ1RFRF9CUkFOQ0hfSU5TVFJVQ1RJT05TIDogUmV0aXJlZCBtaXNwcmVkaWN0ZWQgYnJhbmNoIGluc3RydWN0aW9ucworZXZlbnQ6MHhjNCBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpSRVRJUkVEX1RBS0VOX0JSQU5DSF9JTlNUUlVDVElPTlMgOiBSZXRpcmVkIHRha2VuIGJyYW5jaCBpbnN0cnVjdGlvbnMKK2V2ZW50OjB4YzUgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6UkVUSVJFRF9UQUtFTl9CUkFOQ0hfSU5TVFJVQ1RJT05TX01JU1BSRURJQ1RFRCA6IFJldGlyZWQgdGFrZW4gYnJhbmNoZXMgbWlzcHJlZGljdGVkCitldmVudDoweGM2IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlJFVElSRURfRkFSX0NPTlRST0xfVFJBTlNGRVJTIDogUmV0aXJlZCBmYXIgY29udHJvbCB0cmFuc2ZlcnMKK2V2ZW50OjB4YzcgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6UkVUSVJFRF9CUkFOQ0hfUkVTWU5DUyA6IFJldGlyZWQgYnJhbmNoZXMgcmVzeW5jcyAob25seSBub24tY29udHJvbCB0cmFuc2ZlciBicmFuY2hlcykKK2V2ZW50OjB4YzggY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6UkVUSVJFRF9ORUFSX1JFVFVSTlMgOiBSZXRpcmVkIG5lYXIgcmV0dXJucworZXZlbnQ6MHhjOSBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpSRVRJUkVEX05FQVJfUkVUVVJOU19NSVNQUkVESUNURUQgOiBSZXRpcmVkIG5lYXIgcmV0dXJucyBtaXNwcmVkaWN0ZWQKK2V2ZW50OjB4Y2EgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6UkVUSVJFRF9JTkRJUkVDVF9CUkFOQ0hFU19NSVNQUkVESUNURUQgOiBSZXRpcmVkIGluZGlyZWN0IGJyYW5jaGVzIG1pc3ByZWRpY3RlZAorZXZlbnQ6MHhjYiBjb3VudGVyczowLDEsMiwzIHVtOmZwdV9pbnN0ciBtaW5pbXVtOjUwMCBuYW1lOlJFVElSRURfTU1YX0ZQX0lOU1RSVUNUSU9OUyA6IFJldGlyZWQgTU1YL0ZQIGluc3RydWN0aW9ucworZXZlbnQ6MHhjYyBjb3VudGVyczowLDEsMiwzIHVtOmZwdV9mYXN0cGF0aCBtaW5pbXVtOjUwMCBuYW1lOlJFVElSRURfRkFTVFBBVEhfRE9VQkxFX09QX0lOU1RSVUNUSU9OUyA6IFJldGlyZWQgRmFzdFBhdGggZG91YmxlLW9wIGluc3RydWN0aW9ucworZXZlbnQ6MHhjZCBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJTlRFUlJVUFRTX01BU0tFRF9DWUNMRVMgOiBDeWNsZXMgd2l0aCBpbnRlcnJ1cHRzIG1hc2tlZCAoSUY9MCkKK2V2ZW50OjB4Y2UgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SU5URVJSVVBUU19NQVNLRURfQ1lDTEVTX1dJVEhfSU5URVJSVVBUX1BFTkRJTkcgOiBDeWNsZXMgd2l0aCBpbnRlcnJ1cHRzIG1hc2tlZCB3aGlsZSBpbnRlcnJ1cHQgcGVuZGluZworZXZlbnQ6MHhjZiBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJTlRFUlJVUFRTX1RBS0VOIDogTnVtYmVyIG9mIHRha2VuIGhhcmR3YXJlIGludGVycnVwdHMKK2V2ZW50OjB4ZDAgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6REVDT0RFUl9FTVBUWSA6IE5vdGhpbmcgdG8gZGlzcGF0Y2ggKGRlY29kZXIgZW1wdHkpCitldmVudDoweGQxIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRJU1BBVENIX1NUQUxMUyA6IERpc3BhdGNoIHN0YWxscworZXZlbnQ6MHhkMiBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpESVNQQVRDSF9TVEFMTF9GT1JfQlJBTkNIX0FCT1JUIDogRGlzcGF0Y2ggc3RhbGwgZnJvbSBicmFuY2ggYWJvcnQgdG8gcmV0aXJlCitldmVudDoweGQzIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRJU1BBVENIX1NUQUxMX0ZPUl9TRVJJQUxJWkFUSU9OIDogRGlzcGF0Y2ggc3RhbGwgZm9yIHNlcmlhbGl6YXRpb24KK2V2ZW50OjB4ZDQgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RElTUEFUQ0hfU1RBTExfRk9SX1NFR01FTlRfTE9BRCA6IERpc3BhdGNoIHN0YWxsIGZvciBzZWdtZW50IGxvYWQKK2V2ZW50OjB4ZDUgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RElTUEFUQ0hfU1RBTExfRk9SX1JFT1JERVJfQlVGRkVSX0ZVTEwgOiBEaXNwYXRjaCBzdGFsbCBmb3IgcmVvcmRlciBidWZmZXIgZnVsbAorZXZlbnQ6MHhkNiBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpESVNQQVRDSF9TVEFMTF9GT1JfUkVTRVJWQVRJT05fU1RBVElPTl9GVUxMIDogRGlzcGF0Y2ggc3RhbGwgd2hlbiByZXNlcnZhdGlvbiBzdGF0aW9ucyBhcmUgZnVsbAorZXZlbnQ6MHhkNyBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpESVNQQVRDSF9TVEFMTF9GT1JfRlBVX0ZVTEwgOiBEaXNwYXRjaCBzdGFsbCB3aGVuIEZQVSBpcyBmdWxsCitldmVudDoweGQ4IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRJU1BBVENIX1NUQUxMX0ZPUl9MU19GVUxMIDogRGlzcGF0Y2ggc3RhbGwgd2hlbiBMUyBpcyBmdWxsCitldmVudDoweGQ5IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRJU1BBVENIX1NUQUxMX1dBSVRJTkdfRk9SX0FMTF9RVUlFVCA6IERpc3BhdGNoIHN0YWxsIHdoZW4gd2FpdGluZyBmb3IgYWxsIHRvIGJlIHF1aWV0CitldmVudDoweGRhIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRJU1BBVENIX1NUQUxMX0ZPUl9GQVJfVFJBTlNGRVJfT1JfUkVTWU5DIDogRGlzcGF0Y2ggU3RhbGwgZm9yIEZhciBUcmFuc2ZlciBvciBSZXN5bmMgdG8gUmV0aXJlCitldmVudDoweGRiIGNvdW50ZXJzOjAsMSwyLDMgdW06ZnB1X2V4Y2VwdGlvbnMgbWluaW11bTo1MDAgbmFtZTpGUFVfRVhDRVBUSU9OUyA6IEZQVSBleGNlcHRpb25zCitldmVudDoweGRjIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRSMF9CUkVBS1BPSU5UUyA6IFRoZSBudW1iZXIgb2YgbWF0Y2hlcyBvbiB0aGUgYWRkcmVzcyBpbiBicmVha3BvaW50IHJlZ2lzdGVyIERSMAorZXZlbnQ6MHhkZCBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpEUjFfQlJFQUtQT0lOVFMgOiBUaGUgbnVtYmVyIG9mIG1hdGNoZXMgb24gdGhlIGFkZHJlc3MgaW4gYnJlYWtwb2ludCByZWdpc3RlciBEUjEKK2V2ZW50OjB4ZGUgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RFIyX0JSRUFLUE9JTlRTIDogVGhlIG51bWJlciBvZiBtYXRjaGVzIG9uIHRoZSBhZGRyZXNzIGluIGJyZWFrcG9pbnQgcmVnaXN0ZXIgRFIyCitldmVudDoweGRmIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRSM19CUkVBS1BPSU5UUyA6IFRoZSBudW1iZXIgb2YgbWF0Y2hlcyBvbiB0aGUgYWRkcmVzcyBpbiBicmVha3BvaW50IHJlZ2lzdGVyIERSMworZXZlbnQ6MHgxYzAgY291bnRlcnM6MCwxLDIsMyB1bTpyZXRpcmVkX3g4N19mcCBtaW5pbXVtOjUwMCBuYW1lOlJFVElSRURfWDg3X0ZMT0FUSU5HX1BPSU5UX09QRVJBVElPTlMgOiBSZXRpcmVkIHg4NyBGbG9hdGluZyBQb2ludCBPcGVyYXRpb25zIChSZXZDIGFuZCBsYXRlcikKK2V2ZW50OjB4MWNmIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMDAwMCBuYW1lOklCU19PUFNfVEFHR0VEIDogSUJTIE9wcyBUYWdnZWQgKFJldkMgYW5kIGxhdGVyKQorZXZlbnQ6MHgxZDMgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6TEZFTkNFX0lOU1RSVUNUSU9OU19SRVRJUkVEIDogTEZFTkNFIEluc3RydWN0aW9ucyBSZXRpcmVkIChSZXZDIGFuZCBsYXRlcikKK2V2ZW50OjB4MWQ0IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlNGRU5DRV9JTlNUUlVDVElPTlNfUkVUSVJFRCA6IFNGRU5DRSBJbnN0cnVjdGlvbnMgUmV0aXJlZCAoUmV2QyBhbmQgbGF0ZXIpCitldmVudDoweDFkNSBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpNRkVOQ0VfSU5TVFJVQ1RJT05TX1JFVElSRUQgOiBNRkVOQ0UgSW5zdHJ1Y3Rpb25zIFJldGlyZWQgKFJldkMgYW5kIGxhdGVyKQorCisjIE1lbW9yeSBDb250cm9sZXIgZXZlbnRzCitldmVudDoweGUwIGNvdW50ZXJzOjAsMSwyLDMgdW06cGFnZV9hY2Nlc3MgbWluaW11bTo1MDAgbmFtZTpEUkFNX0FDQ0VTU0VTIDogRFJBTSBhY2Nlc3NlcworZXZlbnQ6MHhlMSBjb3VudGVyczowLDEsMiwzIHVtOm1lbV9wYWdlX292ZXJmbG93IG1pbmltdW06NTAwIG5hbWU6TUVNT1JZX0NPTlRST0xMRVJfUEFHRV9UQUJMRV9PVkVSRkxPV1MgOiBNZW1vcnkgY29udHJvbGxlciBwYWdlIHRhYmxlIG92ZXJmbG93cworZXZlbnQ6MHhlMiBjb3VudGVyczowLDEsMiwzIHVtOnNsb3RfbWlzc2VkIG1pbmltdW06NTAwIG5hbWU6TUVNT1JZX0NPTlRST0xMRVJfU0xPVF9NSVNTRUQgOiBNZW1vcnkgY29udHJvbGxlciBEUkFNIGNvbW1hbmQgc2xvdHMgbWlzc2VkCitldmVudDoweGUzIGNvdW50ZXJzOjAsMSwyLDMgdW06dHVybmFyb3VuZCBtaW5pbXVtOjUwMCBuYW1lOk1FTU9SWV9DT05UUk9MTEVSX1RVUk5BUk9VTkRTIDogTWVtb3J5IGNvbnRyb2xsZXIgdHVybmFyb3VuZHMKK2V2ZW50OjB4ZTQgY291bnRlcnM6MCwxLDIsMyB1bTpzYXR1cmF0aW9uIG1pbmltdW06NTAwIG5hbWU6TUVNT1JZX0NPTlRST0xMRVJfQllQQVNTX0NPVU5URVJfU0FUVVJBVElPTiA6IE1lbW9yeSBjb250cm9sbGVyIGJ5cGFzcyBzYXR1cmF0aW9uCitldmVudDoweGU4IGNvdW50ZXJzOjAsMSwyLDMgdW06dGhlcm1hbF9zdGF0dXMgbWluaW11bTo1MDAgbmFtZTpUSEVSTUFMX1NUQVRVUyA6IFRoZXJtYWwgc3RhdHVzCitldmVudDoweGU5IGNvdW50ZXJzOjAsMSwyLDMgdW06Y3Bpb3JlcXVlc3RzIG1pbmltdW06NTAwIG5hbWU6Q1BVX0lPX1JFUVVFU1RTX1RPX01FTU9SWV9JTyA6IENQVS9JTyBSZXF1ZXN0cyB0byBNZW1vcnkvSU8KK2V2ZW50OjB4ZWEgY291bnRlcnM6MCwxLDIsMyB1bTpjYWNoZWJsb2NrIG1pbmltdW06NTAwIG5hbWU6Q0FDSEVfQkxPQ0tfQ09NTUFORFMgOiBDYWNoZSBibG9jayBjb21tYW5kcworZXZlbnQ6MHhlYiBjb3VudGVyczowLDEsMiwzIHVtOnNpemVjbWRzIG1pbmltdW06NTAwIG5hbWU6U0laRURfQ09NTUFORFMgOiBTaXplZCBjb21tYW5kcworZXZlbnQ6MHhlYyBjb3VudGVyczowLDEsMiwzIHVtOnByb2JlIG1pbmltdW06NTAwIG5hbWU6UFJPQkVfUkVTUE9OU0VTX0FORF9VUFNUUkVBTV9SRVFVRVNUUyA6IFByb2JlIHJlc3BvbnNlcyBhbmQgdXBzdHJlYW0gcmVxdWVzdHMKK2V2ZW50OjB4ZWUgY291bnRlcnM6MCwxLDIsMyB1bTpnYXJ0IG1pbmltdW06NTAwIG5hbWU6R0FSVF9FVkVOVFMgOiBHQVJUIGV2ZW50cworZXZlbnQ6MHgxZjAgY291bnRlcnM6MCwxLDIsMyB1bTptZW1fY29udHJvbF9yZXF1ZXN0IG1pbmltdW06NTAwIG5hbWU6TUVNT1JZX0NPTlRST0xMRVJfUkVRVUVTVFMgOiBTaXplZCByZWFkL3dyaXRlIGFjdGl2aXR5LgorCisjIENyb3NzYmFyIGV2ZW50cworZXZlbnQ6MHgxZTAgY291bnRlcnM6MCwxLDIsMyB1bTpjcHVfZHJhbV9yZXEgbWluaW11bTo1MDAgbmFtZTpDUFVfRFJBTV9SRVFVRVNUX1RPX05PREUgOiBDUFUgdG8gRFJBTSByZXF1ZXN0cyB0byB0YXJnZXQgbm9kZQorZXZlbnQ6MHgxZTEgY291bnRlcnM6MCwxLDIsMyB1bTppb19kcmFtX3JlcSBtaW5pbXVtOjUwMCBuYW1lOklPX0RSQU1fUkVRVUVTVF9UT19OT0RFIDogSU8gdG8gRFJBTSByZXF1ZXN0cyB0byB0YXJnZXQgbm9kZQorZXZlbnQ6MHgxZTIgY291bnRlcnM6MCwxLDIsMyB1bTpjcHVfcmVhZF9sYXRfMF8zIG1pbmltdW06NTAwIG5hbWU6Q1BVX1JFQURfQ09NTUFORF9MQVRFTkNZX05PREVfMF8zIDogTGF0ZW5jeSBiZXR3ZWVuIHRoZSBsb2NhbCBub2RlIGFuZCByZW1vdGUgbm9kZQorZXZlbnQ6MHgxZTMgY291bnRlcnM6MCwxLDIsMyB1bTpjcHVfcmVhZF9sYXRfMF8zIG1pbmltdW06NTAwIG5hbWU6Q1BVX1JFQURfQ09NTUFORF9SRVFVRVNUX05PREVfMF8zIDogTnVtYmVyIG9mIHJlcXVlc3RzIHRoYXQgYSBsYXRlbmN5IG1lYXN1cmVtZW50IGlzIG1hZGUgZm9yIEV2ZW50IDB4MUUyCitldmVudDoweDFlNCBjb3VudGVyczowLDEsMiwzIHVtOmNwdV9yZWFkX2xhdF80XzcgbWluaW11bTo1MDAgbmFtZTpDUFVfUkVBRF9DT01NQU5EX0xBVEVOQ1lfTk9ERV80XzcgOiBMYXRlbmN5IGJldHdlZW4gdGhlIGxvY2FsIG5vZGUgYW5kIHJlbW90ZSBub2RlCitldmVudDoweDFlNSBjb3VudGVyczowLDEsMiwzIHVtOmNwdV9yZWFkX2xhdF80XzcgbWluaW11bTo1MDAgbmFtZTpDUFVfUkVBRF9DT01NQU5EX1JFUVVFU1RfTk9ERV80XzcgOiBOdW1iZXIgb2YgcmVxdWVzdHMgdGhhdCBhIGxhdGVuY3kgbWVhc3VyZW1lbnQgaXMgbWFkZSBmb3IgRXZlbnQgMHgxRTIKK2V2ZW50OjB4MWU2IGNvdW50ZXJzOjAsMSwyLDMgdW06Y3B1X2NvbW1fbGF0IG1pbmltdW06NTAwIG5hbWU6Q1BVX0NPTU1BTkRfTEFURU5DWV9UQVJHRVQgOiBEZXRlcm1pbmUgbGF0ZW5jeSBiZXR3ZWVuIHRoZSBsb2NhbCBub2RlIGFuZCBhIHJlbW90ZSBub2RlLgorZXZlbnQ6MHgxZTcgY291bnRlcnM6MCwxLDIsMyB1bTpjcHVfY29tbV9sYXQgbWluaW11bTo1MDAgbmFtZTpDUFVfUkVRVUVTVF9UQVJHRVQgOiBOdW1iZXIgb2YgcmVxdWVzdHMgdGhhdCBhIGxhdGVuY3kgbWVhc3VyZW1lbnQgaXMgbWFkZSBmb3IgRXZlbnQgMHgxRTYKKworIyBMaW5rIGV2ZW50cworZXZlbnQ6MHhmNiBjb3VudGVyczowLDEsMiwzIHVtOmh0dHJhbnNtaXQgbWluaW11bTo1MDAgbmFtZTpIWVBFUlRSQU5TUE9SVF9MSU5LMF9UUkFOU01JVF9CQU5EV0lEVEggOiBIeXBlclRyYW5zcG9ydCh0bSkgbGluayAwIHRyYW5zbWl0IGJhbmR3aWR0aAorZXZlbnQ6MHhmNyBjb3VudGVyczowLDEsMiwzIHVtOmh0dHJhbnNtaXQgbWluaW11bTo1MDAgbmFtZTpIWVBFUlRSQU5TUE9SVF9MSU5LMV9UUkFOU01JVF9CQU5EV0lEVEggOiBIeXBlclRyYW5zcG9ydCh0bSkgbGluayAxIHRyYW5zbWl0IGJhbmR3aWR0aAorZXZlbnQ6MHhmOCBjb3VudGVyczowLDEsMiwzIHVtOmh0dHJhbnNtaXQgbWluaW11bTo1MDAgbmFtZTpIWVBFUlRSQU5TUE9SVF9MSU5LMl9UUkFOU01JVF9CQU5EV0lEVEggOiBIeXBlclRyYW5zcG9ydCh0bSkgbGluayAyIHRyYW5zbWl0IGJhbmR3aWR0aAorZXZlbnQ6MHgxZjkgY291bnRlcnM6MCwxLDIsMyB1bTpodHRyYW5zbWl0IG1pbmltdW06NTAwIG5hbWU6SFlQRVJUUkFOU1BPUlRfTElOSzNfVFJBTlNNSVRfQkFORFdJRFRIIDogSHlwZXJUcmFuc3BvcnQodG0pIGxpbmsgMyB0cmFuc21pdCBiYW5kd2lkdGgKKworIyBMMyBDYWNoZSBldmVudHMKK2V2ZW50OjB4NGUwIGNvdW50ZXJzOjAsMSwyLDMgdW06bDNfY2FjaGUgbWluaW11bTo1MDAgbmFtZTpSRUFEX1JFUVVFU1RfTDNfQ0FDSEUgOiBOdW1iZXIgb2YgcmVhZCByZXF1ZXN0cyBmcm9tIGVhY2ggY29yZSB0byBMMyBjYWNoZQorZXZlbnQ6MHg0ZTEgY291bnRlcnM6MCwxLDIsMyB1bTpsM19jYWNoZSBtaW5pbXVtOjUwMCBuYW1lOkwzX0NBQ0hFX01JU1NFUyA6IE51bWJlciBvZiBMMyBjYWNoZSBtaXNzZXMgZnJvbSBlYWNoIGNvcmUKK2V2ZW50OjB4NGUyIGNvdW50ZXJzOjAsMSwyLDMgdW06bDNfZmlsbCBtaW5pbXVtOjUwMCBuYW1lOkwzX0ZJTExTX0NBVVNFRF9CWV9MMl9FVklDVElPTlMgOiBOdW1iZXIgb2YgTDMgZmlsbHMgY2F1c2VkIGJ5IEwyIGV2aWN0aW9ucyBwZXIgY29yZQorZXZlbnQ6MHg0ZTMgY291bnRlcnM6MCwxLDIsMyB1bTpsM19ldmljdCBtaW5pbXVtOjUwMCBuYW1lOkwzX0VWSUNUSU9OUyA6IE51bWJlciBvZiBMMyBjYWNoZSBsaW5lIGV2aWN0aW9ucyBieSBjYWNoZSBzdGF0ZQorZXZlbnQ6MHg0ZWQgY291bnRlcnM6MCwxLDIsMyB1bTpub25fY2FuY2VsbGVkX2wzX3JlYWRfcmVxdWVzdHMgbWluaW11bTo1MDAgbmFtZTpOT05fQ0FOQ0VMTEVEX0wzX1JFQURfUkVRVUVTVFMgOiBOb24tY2FuY2VsbGVkIEwzIFJlYWQgUmVxdWVzdHMgKFJldiBEKQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIElCUyBGRVRDSCBFVkVOVFMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK2V2ZW50OjB4ZjAwMCBleHQ6aWJzX2ZldGNoIHVtOnplcm8gbWluaW11bTo1MDAwMCBuYW1lOklCU19GRVRDSF9BTEwgOiBBbGwgSUJTIGZldGNoIHNhbXBsZXMKK2V2ZW50OjB4ZjAwMSBleHQ6aWJzX2ZldGNoIHVtOnplcm8gbWluaW11bTo1MDAwMCBuYW1lOklCU19GRVRDSF9LSUxMRUQgOiBJQlMgZmV0Y2gga2lsbGVkCitldmVudDoweGYwMDIgZXh0Omlic19mZXRjaCB1bTp6ZXJvIG1pbmltdW06NTAwMDAgbmFtZTpJQlNfRkVUQ0hfQVRURU1QVEVEIDogSUJTIGZldGNoIGF0dGVtcHRlZAorZXZlbnQ6MHhmMDAzIGV4dDppYnNfZmV0Y2ggdW06emVybyBtaW5pbXVtOjUwMDAwIG5hbWU6SUJTX0ZFVENIX0NPTVBMRVRFRCA6IElCUyBmZXRjaCBjb21wbGV0ZWQKK2V2ZW50OjB4ZjAwNCBleHQ6aWJzX2ZldGNoIHVtOnplcm8gbWluaW11bTo1MDAwMCBuYW1lOklCU19GRVRDSF9BQk9SVEVEIDogSUJTIGZldGNoIGFib3J0ZWQKK2V2ZW50OjB4ZjAwNSBleHQ6aWJzX2ZldGNoIHVtOnplcm8gbWluaW11bTo1MDAwMCBuYW1lOklCU19GRVRDSF9JVExCX0hJVFMgOiBJQlMgSVRMQiBoaXQKK2V2ZW50OjB4ZjAwNiBleHQ6aWJzX2ZldGNoIHVtOnplcm8gbWluaW11bTo1MDAwMCBuYW1lOklCU19GRVRDSF9MMV9JVExCX01JU1NFU19MMl9JVExCX0hJVFMgOiBJQlMgTDEgSVRMQiBtaXNzZXMgKGFuZCBMMiBJVExCIGhpdHMpCitldmVudDoweGYwMDcgZXh0Omlic19mZXRjaCB1bTp6ZXJvIG1pbmltdW06NTAwMDAgbmFtZTpJQlNfRkVUQ0hfTDFfSVRMQl9NSVNTRVNfTDJfSVRMQl9NSVNTRVMgOiBJQlMgTDEgTDIgSVRMQiBtaXNzCitldmVudDoweGYwMDggZXh0Omlic19mZXRjaCB1bTp6ZXJvIG1pbmltdW06NTAwMDAgbmFtZTpJQlNfRkVUQ0hfSUNBQ0hFX01JU1NFUyA6IElCUyBJbnN0cnVjdGlvbiBjYWNoZSBtaXNzZXMKK2V2ZW50OjB4ZjAwOSBleHQ6aWJzX2ZldGNoIHVtOnplcm8gbWluaW11bTo1MDAwMCBuYW1lOklCU19GRVRDSF9JQ0FDSEVfSElUUyA6IElCUyBJbnN0cnVjdGlvbiBjYWNoZSBoaXQKK2V2ZW50OjB4ZjAwQSBleHQ6aWJzX2ZldGNoIHVtOnplcm8gbWluaW11bTo1MDAwMCBuYW1lOklCU19GRVRDSF80S19QQUdFIDogSUJTIDRLIHBhZ2UgdHJhbnNsYXRpb24KK2V2ZW50OjB4ZjAwQiBleHQ6aWJzX2ZldGNoIHVtOnplcm8gbWluaW11bTo1MDAwMCBuYW1lOklCU19GRVRDSF8yTV9QQUdFIDogSUJTIDJNIHBhZ2UgdHJhbnNsYXRpb24KKyMKK2V2ZW50OjB4ZjAwRSBleHQ6aWJzX2ZldGNoIHVtOnplcm8gbWluaW11bTo1MDAwMCBuYW1lOklCU19GRVRDSF9MQVRFTkNZIDogSUJTIGZldGNoIGxhdGVuY3kKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBJQlMgT1AgRVZFTlRTCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitldmVudDoweGYxMDAgZXh0Omlic19vcCB1bTppYnNfb3AgbWluaW11bTo1MDAwMCBuYW1lOklCU19PUF9BTEwgOiBBbGwgSUJTIG9wIHNhbXBsZXMKK2V2ZW50OjB4ZjEwMSBleHQ6aWJzX29wIHVtOmlic19vcCBtaW5pbXVtOjUwMDAwIG5hbWU6SUJTX09QX1RBR19UT19SRVRJUkUgOiBJQlMgdGFnLXRvLXJldGlyZSBjeWNsZXMKK2V2ZW50OjB4ZjEwMiBleHQ6aWJzX29wIHVtOmlic19vcCBtaW5pbXVtOjUwMDAwIG5hbWU6SUJTX09QX0NPTVBfVE9fUkVUIDogSUJTIGNvbXBsZXRpb24tdG8tcmV0aXJlIGN5Y2xlcworZXZlbnQ6MHhmMTAzIGV4dDppYnNfb3AgdW06aWJzX29wIG1pbmltdW06NTAwMDAgbmFtZTpJQlNfT1BfQlJBTkNIX1JFVElSRUQgOiBJQlMgYnJhbmNoIG9wCitldmVudDoweGYxMDQgZXh0Omlic19vcCB1bTppYnNfb3AgbWluaW11bTo1MDAwMCBuYW1lOklCU19PUF9NSVNQUkVESUNURURfQlJBTkNIIDogSUJTIG1pc3ByZWRpY3RlZCBicmFuY2ggb3AKK2V2ZW50OjB4ZjEwNSBleHQ6aWJzX29wIHVtOmlic19vcCBtaW5pbXVtOjUwMDAwIG5hbWU6SUJTX09QX1RBS0VOX0JSQU5DSCA6IElCUyB0YWtlbiBicmFuY2ggb3AKK2V2ZW50OjB4ZjEwNiBleHQ6aWJzX29wIHVtOmlic19vcCBtaW5pbXVtOjUwMDAwIG5hbWU6SUJTX09QX01JU1BSRURJQ1RFRF9CUkFOQ0hfVEFLRU4gOiBJQlMgbWlzcHJlZGljdGVkIHRha2VuIGJyYW5jaCBvcAorZXZlbnQ6MHhmMTA3IGV4dDppYnNfb3AgdW06aWJzX29wIG1pbmltdW06NTAwMDAgbmFtZTpJQlNfT1BfUkVUVVJOUyA6IElCUyByZXR1cm4gb3AKK2V2ZW50OjB4ZjEwOCBleHQ6aWJzX29wIHVtOmlic19vcCBtaW5pbXVtOjUwMDAwIG5hbWU6SUJTX09QX01JU1BSRURJQ1RFRF9SRVRVUk5TIDogSUJTIG1pc3ByZWRpY3RlZCByZXR1cm4gb3AKK2V2ZW50OjB4ZjEwOSBleHQ6aWJzX29wIHVtOmlic19vcCBtaW5pbXVtOjUwMDAwIG5hbWU6SUJTX09QX1JFU1lOQyA6IElCUyByZXN5bmMgb3AKK2V2ZW50OjB4ZjIwMCBleHQ6aWJzX29wIHVtOmlic19vcCBtaW5pbXVtOjUwMDAwIG5hbWU6SUJTX09QX0FMTF9MT0FEX1NUT1JFIDogSUJTIGFsbCBsb2FkIHN0b3JlIG9wcworZXZlbnQ6MHhmMjAxIGV4dDppYnNfb3AgdW06aWJzX29wIG1pbmltdW06NTAwMDAgbmFtZTpJQlNfT1BfTE9BRCA6IElCUyBsb2FkIG9wcworZXZlbnQ6MHhmMjAyIGV4dDppYnNfb3AgdW06aWJzX29wIG1pbmltdW06NTAwMDAgbmFtZTpJQlNfT1BfU1RPUkUgOiBJQlMgc3RvcmUgb3BzCitldmVudDoweGYyMDMgZXh0Omlic19vcCB1bTppYnNfb3AgbWluaW11bTo1MDAwMCBuYW1lOklCU19PUF9MMV9EVExCX0hJVFMgOiBJQlMgTDEgRFRMQiBoaXQKK2V2ZW50OjB4ZjIwNCBleHQ6aWJzX29wIHVtOmlic19vcCBtaW5pbXVtOjUwMDAwIG5hbWU6SUJTX09QX0wxX0RUTEJfTUlTU19MMl9EVExCX0hJVCA6IElCUyBMMSBEVExCIG1pc3NlcyBMMiBoaXRzCitldmVudDoweGYyMDUgZXh0Omlic19vcCB1bTppYnNfb3AgbWluaW11bTo1MDAwMCBuYW1lOklCU19PUF9MMV9MMl9EVExCX01JU1MgOiBJQlMgTDEgYW5kIEwyIERUTEIgbWlzc2VzCitldmVudDoweGYyMDYgZXh0Omlic19vcCB1bTppYnNfb3AgbWluaW11bTo1MDAwMCBuYW1lOklCU19PUF9EQVRBX0NBQ0hFX01JU1MgOiBJQlMgZGF0YSBjYWNoZSBtaXNzZXMKK2V2ZW50OjB4ZjIwNyBleHQ6aWJzX29wIHVtOmlic19vcCBtaW5pbXVtOjUwMDAwIG5hbWU6SUJTX09QX0RBVEFfSElUUyA6IElCUyBkYXRhIGNhY2hlIGhpdHMKK2V2ZW50OjB4ZjIwOCBleHQ6aWJzX29wIHVtOmlic19vcCBtaW5pbXVtOjUwMDAwIG5hbWU6SUJTX09QX01JU0FMSUdORURfREFUQV9BQ0MgOiBJQlMgbWlzYWxpZ25lZCBkYXRhIGFjY2VzcworZXZlbnQ6MHhmMjA5IGV4dDppYnNfb3AgdW06aWJzX29wIG1pbmltdW06NTAwMDAgbmFtZTpJQlNfT1BfQkFOS19DT05GX0xPQUQgOiBJQlMgYmFuayBjb25mbGljdCBvbiBsb2FkIG9wCitldmVudDoweGYyMEEgZXh0Omlic19vcCB1bTppYnNfb3AgbWluaW11bTo1MDAwMCBuYW1lOklCU19PUF9CQU5LX0NPTkZfU1RPUkUgOiBJQlMgYmFuayBjb25mbGljdCBvbiBzdG9yZSBvcAorZXZlbnQ6MHhmMjBCIGV4dDppYnNfb3AgdW06aWJzX29wIG1pbmltdW06NTAwMDAgbmFtZTpJQlNfT1BfRk9SV0FSRCA6IElCUyBzdG9yZS10by1sb2FkIGZvcndhcmRlZAorZXZlbnQ6MHhmMjBDIGV4dDppYnNfb3AgdW06aWJzX29wIG1pbmltdW06NTAwMDAgbmFtZTpJQlNfT1BfQ0FOQ0VMTEVEIDogSUJTIHN0b3JlLXRvLWxvYWQgY2FuY2VsbGVkCitldmVudDoweGYyMEQgZXh0Omlic19vcCB1bTppYnNfb3AgbWluaW11bTo1MDAwMCBuYW1lOklCU19PUF9EQ1VDX01FTV9BQ0MgOiBJQlMgVUMgbWVtb3J5IGFjY2VzcworZXZlbnQ6MHhmMjBFIGV4dDppYnNfb3AgdW06aWJzX29wIG1pbmltdW06NTAwMDAgbmFtZTpJQlNfT1BfRENXQ19NRU1fQUNDIDogSUJTIFdDIG1lbW9yeSBhY2Nlc3MKK2V2ZW50OjB4ZjIwRiBleHQ6aWJzX29wIHVtOmlic19vcCBtaW5pbXVtOjUwMDAwIG5hbWU6SUJTX09QX0xPQ0tFRCA6IElCUyBsb2NrZWQgb3BlcmF0aW9uCitldmVudDoweGYyMTAgZXh0Omlic19vcCB1bTppYnNfb3AgbWluaW11bTo1MDAwMCBuYW1lOklCU19PUF9NQUJfSElUIDogSUJTIE1BQiBoaXQKK2V2ZW50OjB4ZjIxMSBleHQ6aWJzX29wIHVtOmlic19vcCBtaW5pbXVtOjUwMDAwIG5hbWU6SUJTX09QX0wxX0RUTEJfNEsgOiBJQlMgTDEgRFRMQiA0SyBwYWdlCitldmVudDoweGYyMTIgZXh0Omlic19vcCB1bTppYnNfb3AgbWluaW11bTo1MDAwMCBuYW1lOklCU19PUF9MMV9EVExCXzJNIDogSUJTIEwxIERUTEIgMk0gcGFnZQorZXZlbnQ6MHhmMjEzIGV4dDppYnNfb3AgdW06aWJzX29wIG1pbmltdW06NTAwMDAgbmFtZTpJQlNfT1BfTDFfRFRMQl8xRyA6IElCUyBMMSBEVExCIDFHIHBhZ2UKK2V2ZW50OjB4ZjIxNSBleHQ6aWJzX29wIHVtOmlic19vcCBtaW5pbXVtOjUwMDAwIG5hbWU6SUJTX09QX0wyX0RUTEJfNEsgOiBJQlMgTDIgRFRMQiA0SyBwYWdlCitldmVudDoweGYyMTYgZXh0Omlic19vcCB1bTppYnNfb3AgbWluaW11bTo1MDAwMCBuYW1lOklCU19PUF9MMl9EVExCXzJNIDogSUJTIEwyIERUTEIgMk0gcGFnZQorZXZlbnQ6MHhmMjE3IGV4dDppYnNfb3AgdW06aWJzX29wIG1pbmltdW06NTAwMDAgbmFtZTpJQlNfT1BfTDJfRFRMQl8xRyA6IElCUyBMMiBEVExCIDFHIHBhZ2UKK2V2ZW50OjB4ZjIxOSBleHQ6aWJzX29wIHVtOmlic19vcCBtaW5pbXVtOjUwMDAwIG5hbWU6SUJTX09QX0RDX0xPQURfTEFUIDogSUJTIGRhdGEgY2FjaGUgbWlzcyBsb2FkIGxhdGVuY3kKK2V2ZW50OjB4ZjI0MCBleHQ6aWJzX29wIHVtOmlic19vcCBtaW5pbXVtOjUwMDAwIG5hbWU6SUJTX09QX05CX0xPQ0FMX09OTFkgOiBJQlMgbm9ydGhicmlkZ2UgbG9jYWwKK2V2ZW50OjB4ZjI0MSBleHQ6aWJzX29wIHVtOmlic19vcCBtaW5pbXVtOjUwMDAwIG5hbWU6SUJTX09QX05CX1JFTU9URV9PTkxZIDogSUJTIG5vcnRoYnJpZGdlIHJlbW90ZQorZXZlbnQ6MHhmMjQyIGV4dDppYnNfb3AgdW06aWJzX29wIG1pbmltdW06NTAwMDAgbmFtZTpJQlNfT1BfTkJfTE9DQUxfTDMgOiBJQlMgbm9ydGhicmlkZ2UgbG9jYWwgTDMKK2V2ZW50OjB4ZjI0MyBleHQ6aWJzX29wIHVtOmlic19vcCBtaW5pbXVtOjUwMDAwIG5hbWU6SUJTX09QX05CX0xPQ0FMX0NBQ0hFIDogSUJTIG5vcnRoYnJpZGdlIGxvY2FsIGNvcmUgTDEgb3IgTDIgY2FjaGUKK2V2ZW50OjB4ZjI0NCBleHQ6aWJzX29wIHVtOmlic19vcCBtaW5pbXVtOjUwMDAwIG5hbWU6SUJTX09QX05CX1JFTU9URV9DQUNIRSA6IElCUyBub3J0aGJyaWRnZSByZW1vdGUgY29yZSBMMSwgTDIsIEwzIGNhY2hlCitldmVudDoweGYyNDUgZXh0Omlic19vcCB1bTppYnNfb3AgbWluaW11bTo1MDAwMCBuYW1lOklCU19PUF9OQl9MT0NBTF9EUkFNIDogSUJTIG5vcnRoYnJpZGdlIGxvY2FsIERSQU0KK2V2ZW50OjB4ZjI0NiBleHQ6aWJzX29wIHVtOmlic19vcCBtaW5pbXVtOjUwMDAwIG5hbWU6SUJTX09QX05CX1JFTU9URV9EUkFNIDogSUJTIG5vcnRoYnJpZGdlIHJlbW90ZSBEUkFNCitldmVudDoweGYyNDcgZXh0Omlic19vcCB1bTppYnNfb3AgbWluaW11bTo1MDAwMCBuYW1lOklCU19PUF9OQl9MT0NBTF9PVEhFUiA6IElCUyBub3J0aGJyaWRnZSBsb2NhbCBBUElDIE1NSU8gQ29uZmlnIFBDSQorZXZlbnQ6MHhmMjQ4IGV4dDppYnNfb3AgdW06aWJzX29wIG1pbmltdW06NTAwMDAgbmFtZTpJQlNfT1BfTkJfUkVNT1RFX09USEVSIDogSUJTIG5vcnRoYnJpZGdlIHJlbW90ZSBBUElDIE1NSU8gQ29uZmlnIFBDSQorZXZlbnQ6MHhmMjQ5IGV4dDppYnNfb3AgdW06aWJzX29wIG1pbmltdW06NTAwMDAgbmFtZTpJQlNfT1BfTkJfQ0FDSEVfTU9ESUZJRUQgOiBJQlMgbm9ydGhicmlkZ2UgY2FjaGUgbW9kaWZpZWQgc3RhdGUKK2V2ZW50OjB4ZjI0QSBleHQ6aWJzX29wIHVtOmlic19vcCBtaW5pbXVtOjUwMDAwIG5hbWU6SUJTX09QX05CX0NBQ0hFX09XTkVEIDogSUJTIG5vcnRoYnJpZGdlIGNhY2hlIG93bmVkIHN0YXRlCitldmVudDoweGYyNEIgZXh0Omlic19vcCB1bTppYnNfb3AgbWluaW11bTo1MDAwMCBuYW1lOklCU19PUF9OQl9MT0NBTF9DQUNIRV9MQVQgOiBJQlMgbm9ydGhicmlkZ2UgbG9jYWwgY2FjaGUgbGF0ZW5jeQorZXZlbnQ6MHhmMjRDIGV4dDppYnNfb3AgdW06aWJzX29wIG1pbmltdW06NTAwMDAgbmFtZTpJQlNfT1BfTkJfUkVNT1RFX0NBQ0hFX0xBVCA6IElCUyBub3J0aGJyaWRnZSByZW1vdGUgY2FjaGUgbGF0ZW5jeQpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL3g4Ni02NC9mYW1pbHkxMC91bml0X21hc2tzIGIvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL3g4Ni02NC9mYW1pbHkxMC91bml0X21hc2tzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjNDIyMDYKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9ldmVudHMveDg2LTY0L2ZhbWlseTEwL3VuaXRfbWFza3MKQEAgLTAsMCArMSwzOTEgQEAKKyMgQU1EIEZhbWlseSAxMCBwcm9jZXNzb3IgdW5pdCBtYXNrcworIworIyBDb3B5cmlnaHQgT1Byb2ZpbGUgYXV0aG9ycworIyBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwOCBBZHZhbmNlZCBNaWNybyBEZXZpY2VzCisjIENvbnRyaWJ1dGVkIGJ5IFJheSBCcnlhbnQgPHJheWJyeSBhdCBhbWQuY29tPiwKKyMJCUphc29uIFllaCA8amFzb24ueWVoIGF0IGFtZC5jb20+CisjCQlTdXJhdmVlIFN1dGhpa3VscGFuaXQgPHN1cmF2ZWUuc3V0aGlrdWxwYW5pdCBhdCBhbWQuY29tPgorIworIyBTb3VyY2VzOiBCSU9TIGFuZCBLZXJuZWwgRGV2ZWxvcGVyJ3MgR3VpZGUgZm9yIEFNRCBGYW1pbHkgMTBoIFByb2Nlc3NvcnMsCisjICAgICAgICAgIFB1YmxpY2F0aW9uIyAzMTExNiwgUmV2aXNpb24gMy40OCwgQXByaWwgMjIsIDIwMTAKKyMKKyMgICAgICAgICAgU29mdHdhcmUgT3B0aW1pemF0aW9uIEd1aWRlIGZvciBBTUQgRmFtaWx5IDEwaCBhbmQgRmFtaWx5IDEyaCBQcm9jZXNzb3JzLAorIyAgICAgICAgICBQdWJsaWNhdGlvbiMgNDA1NDYsIFJldmlzaW9uIDMuMTMsIEZlYnJ1YXJ5IDIwMTEKKyMgICAgICAgICAgKE5vdGU6IEZvciBJQlMgRGVyaXZlZCBQZXJmb3JtYW5jZSBFdmVudHMpCisjCisjIFJldmlzaW9uOiAxLjQKKyMKKyMgQ2hhbmdlTG9nOiAKKyMJMS40OiAxMSBNYXJjaCAyMDExCisjICAgICAgIC0gVXBkYXRlIHRvIEJLREcgcmV2aXNpb24gMy40OAorIyAgICAgICAtIEZpeCB0eXBvIGluIHRoZSBkZXNjcmlwdGlvbiBmb3IgZXZlbnQgMHhmMjQ0CisjICAgICAgIC0gVXBkYXRlIHRoZSBtaW5pbXVtIGZvciBSRVRJUkVEX1VPUFMKKyMgICAgICAgLSBBZGQgZXZlbnQgMHg2OCwgMHg2OQorIworIwkxLjM6IDIyIE9jdG9iZXIgMjAwOS4KKyMgCS0gVXBkYXRlIGZyb20gQktERyBSZXYgMy4yOCB0byBSZXYgMy4zNCAobm8gY2hhbmdlKQorIwktIE1vZGlmeSB1bml0bWFza3MgbDNfZXZpY3QKKyMKKyMJMS4yOiAwMyBKdW5lIDIwMDkuCisjIAktIFVwZGF0ZSBmcm9tIEJLREcgUmV2IDMuMjAgdG8gUmV2IDMuMjgKKyMJLSBBZGQgRXZlbnQgNEVEaAorIwktIE1vZGlmeSB1bml0bWFza3MgZm9yIDRFMGgtNEUzaAorIworIwkxLjE6IDA2IEFwcmlsIDIwMDkuCisjIAktIEFkZCBJQlMtZGVyaXZlZCBldmVudHMKKyMgCS0gVXBkYXRlIGZyb20gQktERyBSZXYgMy4wMCB0byBSZXYgMy4yMAorIyAJLSBBZGQgRXZlbnRzIDE2NWgsIDFjMGgsIDFjZmgsIDFkM2gtMWQ1aAorIworbmFtZTp6ZXJvIHR5cGU6bWFuZGF0b3J5IGRlZmF1bHQ6MHgwCisJMHgwIE5vIHVuaXQgbWFzaworbmFtZTptb2VzaSB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDFmCisJMHgwMSAoSSludmFsaWQgY2FjaGUgc3RhdGUKKwkweDAyIChTKWhhcmVkIGNhY2hlIHN0YXRlCisJMHgwNCAoRSl4Y2x1c2l2ZSBjYWNoZSBzdGF0ZQorCTB4MDggKE8pd25lciBjYWNoZSBzdGF0ZQorCTB4MTAgKE0pb2RpZmllZCBjYWNoZSBzdGF0ZQorCTB4MWYgQWxsIGNhY2hlIHN0YXRlcworbmFtZTptb2VzcyB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDFlCisJMHgwMSBSZWZpbGwgZnJvbSBub3J0aGJyaWRnZQorCTB4MDIgU2hhcmVkLXN0YXRlIGxpbmUgZnJvbSBMMgorCTB4MDQgRXhjbHVzaXZlLXN0YXRlIGxpbmUgZnJvbSBMMgorCTB4MDggT3duZXItc3RhdGUgbGluZSBmcm9tIEwyCisJMHgxMCBNb2RpZmllZC1zdGF0ZSBsaW5lIGZyb20gTDIKKwkweDFlIEFsbCBjYWNoZSBzdGF0ZXMgZXhjZXB0IHJlZmlsbCBmcm9tIG5vcnRoYnJpZGdlCituYW1lOmZwdV9vcHMgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgzZgorCTB4MDEgQWRkIHBpcGUgb3BzIGV4Y2x1ZGluZyBsb2FkIG9wcyBhbmQgU1NFIG1vdmUgb3BzCisJMHgwMiBNdWx0aXBseSBwaXBlIG9wcyBleGNsdWRpbmcgbG9hZCBvcHMgYW5kIFNTRSBtb3ZlIG9wcworCTB4MDQgU3RvcmUgcGlwZSBvcHMgZXhjbHVkaW5nIGxvYWQgb3BzIGFuZCBTU0UgbW92ZSBvcHMgCisJMHgwOCBBZGQgcGlwZSBsb2FkIG9wcyBhbmQgU1NFIG1vdmUgb3BzCisJMHgxMCBNdWx0aXBseSBwaXBlIGxvYWQgb3BzIGFuZCBTU0UgbW92ZSBvcHMKKwkweDIwIFN0b3JlIHBpcGUgbG9hZCBvcHMgYW5kIFNTRSBtb3ZlIG9wcworCTB4M2YgQWxsIG9wcworbmFtZTpzZWdyZWdsb2FkIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4N2YKKwkweDAxIEVTIHJlZ2lzdGVyCisJMHgwMiBDUyByZWdpc3RlcgorCTB4MDQgU1MgcmVnaXN0ZXIKKwkweDA4IERTIHJlZ2lzdGVyCisJMHgxMCBGUyByZWdpc3RlcgorCTB4MjAgR1MgcmVnaXN0ZXIKKwkweDQwIEhTIHJlZ2lzdGVyCituYW1lOmZwdV9pbnN0ciB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDA3CisJMHgwMSB4ODcgaW5zdHJ1Y3Rpb25zCisJMHgwMiBNTVggJiAzRE5vdyBpbnN0cnVjdGlvbnMKKwkweDA0IFNTRSBpbnN0cnVjdGlvbnMgKFNTRSwgU1NFMiwgU1NFMywgYW5kIFNTRTRBKQorbmFtZTpmcHVfZmFzdHBhdGggdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwNworCTB4MDEgV2l0aCBsb3cgb3AgaW4gcG9zaXRpb24gMAorCTB4MDIgV2l0aCBsb3cgb3AgaW4gcG9zaXRpb24gMQorCTB4MDQgV2l0aCBsb3cgb3AgaW4gcG9zaXRpb24gMgorbmFtZTpmcHVfZXhjZXB0aW9ucyB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDBmCisJMHgwMSB4ODcgcmVjbGFzcyBtaWNyb2ZhdWx0cworCTB4MDIgU1NFIHJldHlwZSBtaWNyb2ZhdWx0cworCTB4MDQgU1NFIHJlY2xhc3MgbWljcm9mYXVsdHMKKwkweDA4IFNTRSBhbmQgeDg3IG1pY3JvdHJhcHMKK25hbWU6cGFnZV9hY2Nlc3MgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgzZgorCTB4MDEgRENUMCBQYWdlIGhpdAorCTB4MDIgRENUMCBQYWdlIG1pc3MKKwkweDA0IERDVDAgUGFnZSBjb25mbGljdAorCTB4MDggRENUMSBQYWdlIGhpdAorCTB4MTAgRENUMSBQYWdlIG1pc3MKKwkweDIwIERDVDEgUGFnZSBDb25mbGljdAorbmFtZTptZW1fcGFnZV9vdmVyZmxvdyAgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwMworCTB4MDEgRENUMCBQYWdlIFRhYmxlIE92ZXJmbG93CisJMHgwMiBEQ1QxIFBhZ2UgVGFibGUgT3ZlcmZsb3cKK25hbWU6dHVybmFyb3VuZCB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDNmCisJMHgwMSBEQ1QwIERJTU0gKGNoaXAgc2VsZWN0KSB0dXJuYXJvdW5kCisJMHgwMiBEQ1QwIFJlYWQgdG8gd3JpdGUgdHVybmFyb3VuZAorCTB4MDQgRENUMCBXcml0ZSB0byByZWFkIHR1cm5hcm91bmQKKwkweDA4IERDVDEgRElNTSAoY2hpcCBzZWxlY3QpIHR1cm5hcm91bmQKKwkweDEwIERDVDEgUmVhZCB0byB3cml0ZSB0dXJuYXJvdW5kCisJMHgyMCBEQ1QxIFdyaXRlIHRvIHJlYWQgdHVybmFyb3VuZAorbmFtZTpzYXR1cmF0aW9uIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MGYKKwkweDAxIE1lbW9yeSBjb250cm9sbGVyIGhpZ2ggcHJpb3JpdHkgYnlwYXNzCisJMHgwMiBNZW1vcnkgY29udHJvbGxlciBtZWRpdW0gcHJpb3JpdHkgYnlwYXNzCisJMHgwNCBEQ1QwIERDUSBieXBhc3MKKwkweDA4IERDVDEgRENRIGJ5cGFzcworbmFtZTpzbG90X21pc3NlZCAgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwMworCTB4MDEgRENUMCBDb21tYW5kIHNsb3RzIG1pc3NlZAorCTB4MDIgRENUMiBDb21tYW5kIHNsb3RzIG1pc3NlZAorbmFtZTpzaXplY21kcyB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDNmCisJMHgwMSBOb24tcG9zdGVkIHdyaXRlIGJ5dGUgKDEtMzIgYnl0ZXMpCisJMHgwMiBOb24tcG9zdGVkIHdyaXRlIERXT1JEICgxLTE2IERXT1JEcykKKwkweDA0IFBvc3RlZCB3cml0ZSBieXRlICgxLTMyIGJ5dGVzKQorCTB4MDggUG9zdGVkIHdyaXRlIERXT1JEICgxLTE2IERXT1JEcykKKwkweDEwIFJlYWQgYnl0ZSAoNCBieXRlcykKKwkweDIwIFJlYWQgRFdPUkQgKDEtMTYgRFdPUkRzKQorbmFtZTpwcm9iZSB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweGZmCisJMHgwMSBQcm9iZSBtaXNzCisJMHgwMiBQcm9iZSBoaXQgY2xlYW4KKwkweDA0IFByb2JlIGhpdCBkaXJ0eSB3aXRob3V0IG1lbW9yeSBjYW5jZWwKKwkweDA4IFByb2JlIGhpdCBkaXJ0eSB3aXRoIG1lbW9yeSBjYW5jZWwKKwkweDEwIFVwc3RyZWFtIGRpc3BsYXkgcmVmcmVzaC9JU09DIHJlYWRzCisJMHgyMCBVcHN0cmVhbSBub24tZGlzcGxheSByZWZyZXNoIHJlYWRzCisJMHg0MCBVcHN0cmVhbSBJU09DIHdyaXRlcworCTB4ODAgVXBzdHJlYW0gbm9uLUlTT0Mgd3JpdGVzCituYW1lOmwyX2ludGVybmFsIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4M2YKKwkweDAxIElDIGZpbGwKKwkweDAyIERDIGZpbGwKKwkweDA0IFRMQiBmaWxsIChwYWdlIHRhYmxlIHdhbGtzKQorCTB4MDggVGFnIHNub29wIHJlcXVlc3QKKwkweDEwIENhbmNlbGVkIHJlcXVlc3QKKwkweDIwIEhhcmR3YXJlIHByZWZldGNoIGZyb20gZGF0YSBjYWNoZQorbmFtZTpsMl9yZXFfbWlzcyB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDBmCisJMHgwMSBJQyBmaWxsCisJMHgwMiBEQyBmaWxsIChpbmNsdWRlcyBwb3NzaWJsZSByZXBsYXlzKQorCTB4MDQgVExCIHBhZ2UgdGFibGUgd2FsaworCTB4MDggSGFyZHdhcmUgcHJlZmV0Y2ggZnJvbSBkYXRhIGNhY2hlCituYW1lOmwyX2ZpbGwgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwMworCTB4MDEgTDIgZmlsbHMgKHZpY3RpbXMgZnJvbSBMMSBjYWNoZXMsIFRMQiBwYWdlIHRhYmxlIHdhbGtzIGFuZCBkYXRhIHByZWZldGNoZXMpCisJMHgwMiBMMiB3cml0ZWJhY2tzIHRvIHN5c3RlbQorbmFtZTpnYXJ0IHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4ZmYKKwkweDAxIEdBUlQgYXBlcnR1cmUgaGl0IG9uIGFjY2VzcyBmcm9tIENQVQorCTB4MDIgR0FSVCBhcGVydHVyZSBoaXQgb24gYWNjZXNzIGZyb20gSS9PCisJMHgwNCBHQVJUIG1pc3MKKwkweDA4IEdBUlQvREVWIHJlcXVlc3QgaGl0IHRhYmxlIHdhbGsgaW4gcHJvZ3Jlc3MKKwkweDEwIERFViBoaXQKKwkweDIwIERFViBtaXNzCisJMHg0MCBERVYgZXJyb3IKKwkweDgwIEdBUlQvREVWIG11bHRpcGxlIHRhYmxlIHdhbGsgaW4gcHJvZ3Jlc3MKK25hbWU6Y3Bpb3JlcXVlc3RzIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4YTIKKwkweGExIFJlcXVlc3RzIExvY2FsIEkvTyB0byBMb2NhbCBJL08KKwkweGEyIFJlcXVlc3RzIExvY2FsIEkvTyB0byBMb2NhbCBNZW1vcnkKKwkweGEzIFJlcXVlc3RzIExvY2FsIEkvTyB0byBMb2NhbCAoSS9PIG9yIE1lbSkgCisJMHhhNCBSZXF1ZXN0cyBMb2NhbCBDUFUgdG8gTG9jYWwgSS9PCisJMHhhNSBSZXF1ZXN0cyBMb2NhbCAoQ1BVIG9yIEkvTykgdG8gTG9jYWwgSS9PCisJMHhhOCBSZXF1ZXN0cyBMb2NhbCBDUFUgdG8gTG9jYWwgTWVtb3J5CisJMHhhYSBSZXF1ZXN0cyBMb2NhbCAoQ1BVIG9yIEkvTykgdG8gTG9jYWwgTWVtb3J5CisJMHhhYyBSZXF1ZXN0cyBMb2NhbCBDUFUgdG8gTG9jYWwgKEkvTyBvciBNZW0pCisJMHhhZiBSZXF1ZXN0cyBMb2NhbCAoQ1BVIG9yIEkvTykgdG8gTG9jYWwgKEkvTyBvciBNZW0pCisJMHg5MSBSZXF1ZXN0cyBMb2NhbCBJL08gdG8gUmVtb3RlIEkvTworCTB4OTIgUmVxdWVzdHMgTG9jYWwgSS9PIHRvIFJlbW90ZSBNZW1vcnkKKwkweDkzIFJlcXVlc3RzIExvY2FsIEkvTyB0byBSZW1vdGUgKEkvTyBvciBNZW0pCisJMHg5NCBSZXF1ZXN0cyBMb2NhbCBDUFUgdG8gUmVtb3RlIEkvTworCTB4OTUgUmVxdWVzdHMgTG9jYWwgKENQVSBvciBJL08pIHRvIFJlbW90ZSBJL08KKwkweDk4IFJlcXVlc3RzIExvY2FsIENQVSB0byBSZW1vdGUgTWVtb3J5CisJMHg5YSBSZXF1ZXN0cyBMb2NhbCAoQ1BVIG9yIEkvTykgdG8gUmVtb3RlIE1lbW9yeQorCTB4OWMgUmVxdWVzdHMgTG9jYWwgQ1BVIHRvIFJlbW90ZSAoSS9PIG9yIE1lbSkKKwkweDlmIFJlcXVlc3RzIExvY2FsIChDUFUgb3IgSS9PKSB0byBSZW1vdGUgKEkvTyBvciBNZW0pCisJMHhiMSBSZXF1ZXN0cyBMb2NhbCBJL08gdG8gQW55IEkvTworCTB4YjIgUmVxdWVzdHMgTG9jYWwgSS9PIHRvIEFueSBNZW1vcnkKKwkweGIzIFJlcXVlc3RzIExvY2FsIEkvTyB0byBBbnkgKEkvTyBvciBNZW0pCisJMHhiNCBSZXF1ZXN0cyBMb2NhbCBDUFUgdG8gQW55IEkvTworCTB4YjUgUmVxdWVzdHMgTG9jYWwgKENQVSBvciBJL08pIHRvIEFueSBJL08KKwkweGI4IFJlcXVlc3RzIExvY2FsIENQVSB0byBBbnkgTWVtb3J5CisJMHhiYSBSZXF1ZXN0cyBMb2NhbCAoQ1BVIG9yIEkvTykgdG8gQW55IE1lbW9yeQorCTB4YmMgUmVxdWVzdHMgTG9jYWwgQ1BVIHRvIEFueSAoSS9PIG9yIE1lbSkKKwkweGJmIFJlcXVlc3RzIExvY2FsIChDUFUgb3IgSS9PKSB0byBBbnkgKEkvTyBvciBNZW0pCisJMHg2MSBSZXF1ZXN0cyBSZW1vdGUgSS9PIHRvIExvY2FsIEkvTworCTB4NjQgUmVxdWVzdHMgUmVtb3RlIENQVSB0byBMb2NhbCBJL08KKwkweDY1IFJlcXVlc3RzIFJlbW90ZSAoQ1BVIG9yIEkvTykgdG8gTG9jYWwgSS9PCituYW1lOmNhY2hlYmxvY2sgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgzZAorCTB4MDEgVmljdGltIEJsb2NrIChXcml0ZWJhY2spCisJMHgwNCBSZWFkIEJsb2NrIChEY2FjaGUgbG9hZCBtaXNzIHJlZmlsbCkKKwkweDA4IFJlYWQgQmxvY2sgU2hhcmVkIChJY2FjaGUgcmVmaWxsKQorCTB4MTAgUmVhZCBCbG9jayBNb2RpZmllZCAoRGNhY2hlIHN0b3JlIG1pc3MgcmVmaWxsKQorCTB4MjAgQ2hhbmdlLXRvLURpcnR5IChmaXJzdCBzdG9yZSB0byBjbGVhbiBibG9jayBhbHJlYWR5IGluIGNhY2hlKQorbmFtZTpkYXRhcHJlZmV0Y2ggdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwMworCTB4MDEgQ2FuY2VsbGVkIHByZWZldGNoZXMKKwkweDAyIFByZWZldGNoIGF0dGVtcHRzCituYW1lOm1lbXJlcXR5cGUgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHg4MworCTB4MDEgUmVxdWVzdHMgdG8gbm9uLWNhY2hlYWJsZSAoVUMpIG1lbW9yeQorCTB4MDIgUmVxdWVzdHMgdG8gd3JpdGUtY29tYmluaW5nIChXQykgbWVtb3J5IG9yIFdDIGJ1ZmZlciBmbHVzaGVzIHRvIFdCIG1lbW9yeQorCTB4ODAgU3RyZWFtaW5nIHN0b3JlIChTUykgcmVxdWVzdHMKK25hbWU6bWFiX2J1ZmZlciB0eXBlOmV4Y2x1c2l2ZSBkZWZhdWx0OjB4MDAKKwkweDAwIERDIG1pc3MgYnVmZmVyIDAKKwkweDAxIERDIG1pc3MgYnVmZmVyIDEKKwkweDAyIERDIG1pc3MgYnVmZmVyIDIKKwkweDAzIERDIG1pc3MgYnVmZmVyIDMKKwkweDA0IERDIG1pc3MgYnVmZmVyIDQKKwkweDA1IERDIG1pc3MgYnVmZmVyIDUKKwkweDA2IERDIG1pc3MgYnVmZmVyIDYKKwkweDA3IERDIG1pc3MgYnVmZmVyIDcKKwkweDA4IElDIG1pc3MgYnVmZmVyIDAKKwkweDA5IElDIG1pc3MgYnVmZmVyIDEKK25hbWU6c3lzdGVtcmVhZHJlc3BvbnNlIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MWYKKwkweDAxIEV4Y2x1c2l2ZQorCTB4MDIgTW9kaWZpZWQKKwkweDA0IFNoYXJlZAorCTB4MDggT3duZWQKKwkweDEwIERhdGEgRXJyb3IKK25hbWU6bDFfZHRsYl9taXNzX2wyX2hpdCB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDA3CisJMHgwMSBMMiA0SyBUTEIgaGl0CisJMHgwMiBMMiAyTSBUTEIgaGl0CisJMHgwNCBMMiAxRyBUTEIgaGl0IChSZXZDKQorbmFtZTpsMV9sMl9kdGxiX21pc3MgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwNworCTB4MDEgNEsgVExCIHJlbG9hZAorCTB4MDIgMk0gVExCIHJlbG9hZAorCTB4MDQgMUcgVExCIHJlbG9hZAorbmFtZTplY2MgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwZgorCTB4MDEgU2NydWJiZXIgZXJyb3IKKwkweDAyIFBpZ2d5YmFjayBzY3J1YmJlciBlcnJvcnMKKwkweDA0IExvYWQgcGlwZSBlcnJvcgorCTB4MDggU3RvcmUgd3JpdGUgcGlwIGVycm9yCituYW1lOnByZWZldGNoIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MDcKKwkweDAxIExvYWQgKFByZWZldGNoLCBQcmVmZXRjaFQwL1QxL1QyKQorCTB4MDIgU3RvcmUgKFByZWZldGNoVykKKwkweDA0IE5UQSAoUHJlZmV0Y2hOVEEpCituYW1lOmxvY2tlZF9pbnN0cnVjdGlvbl9kY2FjaGVfbWlzcyB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDAyCisJMHgwMiBEYXRhIGNhY2hlIG1pc3NlcyBieSBsb2NrZWQgaW5zdHJ1Y3Rpb25zCituYW1lOm9jdHdvcmRfdHJhbnNmZXIgdHlwZTpiaXRtYXNrICBkZWZhdWx0OjB4MDEKKwkweDAxIE9jdHdvcmQgd3JpdGUgdHJhbnNmZXIKK25hbWU6dGhlcm1hbF9zdGF0dXMgIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4N2MKKwkweDA0IE51bWJlciBvZiB0aW1lcyB0aGUgSFRDIHRyaXAgcG9pbnQgaXMgY3Jvc3NlZAorCTB4MDggTnVtYmVyIG9mIGNsb2NrcyB3aGVuIFNUQyB0cmlwIHBvaW50IGFjdGl2ZQorCTB4MTAgTnVtYmVyIG9mIHRpbWVzIHRoZSBTVEMgdHJpcCBwb2ludCBpcyBjcm9zc2VkCisJMHgyMCBOdW1iZXIgb2YgY2xvY2tzIEhUQyBQLXN0YXRlIGlzIGluYWN0aXZlCisJMHg0MCBOdW1iZXIgb2YgY2xvY2tzIEhUQyBQLXN0YXRlIGlzIGFjdGl2ZQorbmFtZTptZW1fY29udHJvbF9yZXF1ZXN0IHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4NzgKKwkweDAxIFdyaXRlIHJlcXVlc3RzCisJMHgwMiBSZWFkIFJlcXVlc3RzIGluY2x1ZGluZyBQcmVmZXRjaAorCTB4MDQgUHJlZmV0Y2ggUmVxdWVzdAorCTB4MDggMzIgQnl0ZXMgU2l6ZWQgV3JpdGVzCisJMHgxMCA2NCBCeXRlcyBTaXplZCBXcml0ZXMKKwkweDIwIDMyIEJ5dGVzIFNpemVkIFJlYWRzCisJMHg0MCA2NCBCeXRlIFNpemVkIFJlYWRzCisJMHg4MCBSZWFkIHJlcXVlc3RzIHNlbnQgdG8gdGhlIERDVCB3aGlsZSB3cml0ZSByZXF1ZXN0cyBhcmUgcGVuZGluZyBpbiB0aGUgRENRCituYW1lOmh0dHJhbnNtaXQgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHhiZgorCTB4MDEgQ29tbWFuZCBEV09SRCBzZW50CisJMHgwMiBEYXRhIERXT1JEIHNlbnQKKwkweDA0IEJ1ZmZlciByZWxlYXNlIERXT1JEIHNlbnQKKwkweDA4IE5vcCBEVyBzZW50IChpZGxlKQorCTB4MTAgQWRkcmVzcyBEV09SRCBzZW50CisJMHgyMCBQZXIgcGFja2V0IENSQyBzZW50CisJMHg4MCBTdWJMaW5rIE1hc2sKK25hbWU6bG9ja19vcHMgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwZgorCTB4MDEgTnVtYmVyIG9mIGxvY2tlZCBpbnN0cnVjdGlvbnMgZXhlY3V0ZWQKKwkweDAyIEN5Y2xlcyBpbiBzcGVjdWxhdGl2ZSBwaGFzZQorCTB4MDQgQ3ljbGVzIGluIG5vbi1zcGVjdWxhdGl2ZSBwaGFzZSAoaW5jbHVkaW5nIGNhY2hlIG1pc3MgcGVuYWx0eSkKKwkweDA4IENhY2hlIG1pc3MgcGVuYWx0eSBpbiBjeWNsZXMgCituYW1lOnNzZV9vcHMgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHg3ZgorCTB4MDEgU2luZ2xlIFByZWNpc2lvbiBhZGQvc3VidHJhY3Qgb3BzCisJMHgwMiBTaW5nbGUgcHJlY2lzaW9uIG11bHRpcGx5IG9wcworCTB4MDQgU2luZ2xlIHByZWNpc2lvbiBkaXZpZGUvc3F1YXJlIHJvb3Qgb3BzCisJMHgwOCBEb3VibGUgcHJlY2lzaW9uIGFkZC9zdWJ0cmFjdCBvcHMKKwkweDEwIERvdWJsZSBwcmVjaXNpb24gbXVsdGlwbHkgb3BzCisJMHgyMCBEb3VibGUgcHJlY2lzaW9uIGRpdmlkZS9zcXVhcmUgcm9vdCBvcHMKKwkweDQwIE9QIHR5cGU6IDA9dW9wcyAxPUZMT1BTCituYW1lOm1vdmVfb3BzIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MGYKKwkweDAxIE1lcmdpbmcgbG93IHF1YWR3b3JkIG1vdmUgdW9wcworCTB4MDIgTWVyZ2luZyBoaWdoIHF1YWR3b3JkIG1vdmUgdW9wcworCTB4MDQgQWxsIG90aGVyIG1lcmdpbmcgbW92ZSB1b3BzCisJMHgwOCBBbGwgb3RoZXIgbW92ZSB1b3BzCituYW1lOnNlcmlhbF9vcHMgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwZgorCTB4MDEgU1NFIGJvdHRvbS1leGVjdXRpbmcgdW9wcyByZXRpcmVkCisJMHgwMiBTU0UgYm90dG9tLXNlcmlhbGl6aW5nIHVvcHMgcmV0aXJlZAorCTB4MDQgeDg3IGJvdHRvbS1leGVjdXRpbmcgdW9wcyByZXRpcmVkCisJMHgwOCB4ODcgYm90dG9tLXNlcmlhbGl6aW5nIHVvcHMgcmV0aXJlZAorbmFtZTpzZXJpYWxfb3BzX3NjaGVkIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MDMKKwkweDAxIE51bWJlciBvZiBjeWNsZXMgYSBib3R0b20tZXhlY3V0ZSB1b3BzIGluIEZQIHNjaGVkdWxlcgorCTB4MDIgTnVtYmVyIG9mIGN5Y2xlcyBhIGJvdHRvbS1zZXJpYWxpemluZyB1b3BzIGluIEZQIHNjaGVkdWxlcgorbmFtZTpzdG9yZV90b19sb2FkIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MDcKKwkweDAxIEFkZHJlc3MgbWlzbWF0Y2hlcyAoc3RhcnRpbmcgYnl0ZSBub3QgdGhlIHNhbWUpCisJMHgwMiBTdG9yZSBpcyBzbWFsbGVyIHRoYW4gbG9hZAorCTB4MDQgTWlzYWxpZ25lZAorbmFtZTptb2VzaV9naCB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDFmCisJMHgwMSAoSSludmFsaWQgY2FjaGUgc3RhdGUKKwkweDAyIChTKWhhcmVkIGNhY2hlIHN0YXRlCisJMHgwNCAoRSl4Y2x1c2l2ZSBjYWNoZSBzdGF0ZQorCTB4MDggKE8pd25lciBjYWNoZSBzdGF0ZQorCTB4MTAgKE0pb2RpZmllZCBjYWNoZSBzdGF0ZQorCTB4MjAgQ2FjaGUgbGluZSBldmljdGVkIGJyb3VnaHQgaW50byB0aGUgY2FjaGUgYnkgUHJlZmV0Y2hOVEEKKwkweDQwIENhY2hlIGxpbmUgZXZpY3RlZCBub3QgYnJvdWdodCBpbnRvIHRoZSBjYWNoZSBieSBQcmVmZXRjaE5UQQorbmFtZTpsMV9kdGxiX2hpdCB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDA3CisJMHgwMSBMMSA0SyBUTEIgaGl0CisJMHgwMiBMMSAyTSBUTEIgaGl0CisJMHgwNCBMMSAxRyBUTEIgaGl0CituYW1lOnNvZnRfcHJlZmV0Y2ggdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwOQorCTB4MDEgU29mdHdhcmUgcHJlZmV0Y2ggaGl0IGluIEwxCisJMHgwOCBTb2Z0d2FyZSBwcmVmZXRjaCBoaXQgaW4gTDIKK25hbWU6bDFfbDJfaXRsYl9taXNzIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MDMKKwkweDAxIEluc3RydWN0aW9uIGZldGNoZXMgdG8gYSA0SyBwYWdlCisJMHgwMiBJbnN0cnVjdGlvbiBmZXRjaGVzIHRvIGEgMk0gcGFnZQkKK25hbWU6Y3B1X2RyYW1fcmVxIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4ZmYKKwkweDAxIEZyb20gbG9jYWwgbm9kZSB0byBub2RlIDAKKwkweDAyIEZyb20gbG9jYWwgbm9kZSB0byBub2RlIDEKKwkweDA0IEZyb20gbG9jYWwgbm9kZSB0byBub2RlIDIKKwkweDA4IEZyb20gbG9jYWwgbm9kZSB0byBub2RlIDMKKwkweDEwIEZyb20gbG9jYWwgbm9kZSB0byBub2RlIDQKKwkweDIwIEZyb20gbG9jYWwgbm9kZSB0byBub2RlIDUKKwkweDQwIEZyb20gbG9jYWwgbm9kZSB0byBub2RlIDYKKwkweDgwIEZyb20gbG9jYWwgbm9kZSB0byBub2RlIDcKK25hbWU6aW9fZHJhbV9yZXEgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHhmZgorCTB4MDEgRnJvbSBsb2NhbCBub2RlIHRvIG5vZGUgMAorCTB4MDIgRnJvbSBsb2NhbCBub2RlIHRvIG5vZGUgMQorCTB4MDQgRnJvbSBsb2NhbCBub2RlIHRvIG5vZGUgMgorCTB4MDggRnJvbSBsb2NhbCBub2RlIHRvIG5vZGUgMworCTB4MTAgRnJvbSBsb2NhbCBub2RlIHRvIG5vZGUgNAorCTB4MjAgRnJvbSBsb2NhbCBub2RlIHRvIG5vZGUgNQorCTB4NDAgRnJvbSBsb2NhbCBub2RlIHRvIG5vZGUgNgorCTB4ODAgRnJvbSBsb2NhbCBub2RlIHRvIG5vZGUgNworbmFtZTpjcHVfcmVhZF9sYXRfMF8zIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4ZmYKKwkweDAxIFJlYWQgYmxvY2sgCisJMHgwMiBSZWFkIGJsb2NrIHNoYXJlZAorCTB4MDQgUmVhZCBibG9jayBtb2RpZmllZAorCTB4MDggQ2hhbmdlLXRvLURpcnR5CisJMHgxMCBGcm9tIGxvY2FsIG5vZGUgdG8gbm9kZSAwCisJMHgyMCBGcm9tIGxvY2FsIG5vZGUgdG8gbm9kZSAxCisJMHg0MCBGcm9tIGxvY2FsIG5vZGUgdG8gbm9kZSAyCisJMHg4MCBGcm9tIGxvY2FsIG5vZGUgdG8gbm9kZSAzCituYW1lOmNwdV9yZWFkX2xhdF80XzcgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHhmZgorCTB4MDEgUmVhZCBibG9jayAKKwkweDAyIFJlYWQgYmxvY2sgc2hhcmVkCisJMHgwNCBSZWFkIGJsb2NrIG1vZGlmaWVkCisJMHgwOCBDaGFuZ2UtdG8tRGlydHkKKwkweDEwIEZyb20gbG9jYWwgbm9kZSB0byBub2RlIDQKKwkweDIwIEZyb20gbG9jYWwgbm9kZSB0byBub2RlIDUKKwkweDQwIEZyb20gbG9jYWwgbm9kZSB0byBub2RlIDYKKwkweDgwIEZyb20gbG9jYWwgbm9kZSB0byBub2RlIDcKK25hbWU6Y3B1X2NvbW1fbGF0IHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4ZjcKKwkweDAxIFJlYWQgc2l6ZWQKKwkweDAyIFdyaXRlIHNpemVkCisJMHgwNCBWaWN0aW0gYmxvY2sKKwkweDA4IE5vZGUgZ3JvdXAgc2VsZWN0OiAwPU5vZGVzIDAtMywgMT1Ob2RlcyA0LTcKKwkweDEwIEZyb20gbG9jYWwgbm9kZSB0byBub2RlIDAvNAorCTB4MjAgRnJvbSBsb2NhbCBub2RlIHRvIG5vZGUgMS81CisJMHg0MCBGcm9tIGxvY2FsIG5vZGUgdG8gbm9kZSAyLzYKKwkweDgwIEZyb20gbG9jYWwgbm9kZSB0byBub2RlIDMvNworbmFtZTpsM19jYWNoZSB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweGY3CisJMHgwMSBSZWFkIGJsb2NrIEV4Y2x1c2l2ZSAoRGF0YSBjYWNoZSByZWFkKQorCTB4MDIgUmVhZCBibG9jayBTaGFyZWQgKEluc3RydWNpdG9uIGNhY2hlIHJlYWQpCisJMHgwNCBSZWFkIGJsb2NrIE1vZGlmeQorCTB4MTAgUmVzZXJ2ZWQgKE11c3QgYmUgc2VsZWN0ZWQpCisJMHgyMCBSZXNlcnZlZCAoTXVzdCBiZSBzZWxlY3RlZCkKKwkweDQwIFJlc2VydmVkIChNdXN0IGJlIHNlbGVjdGVkKQorCTB4ODAgUmVzZXJ2ZWQgKE11c3QgYmUgc2VsZWN0ZWQpCituYW1lOmwzX2ZpbGwgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHhmZgorCTB4MDEgU2hhcmVkCisJMHgwMiBFeGNsdXNpdmUKKwkweDA0IE93bmVkCisJMHgwOCBNb2RpZmllZAorCTB4MTAgUmVzZXJ2ZWQgKE11c3QgYmUgc2VsZWN0ZWQpCisJMHgyMCBSZXNlcnZlZCAoTXVzdCBiZSBzZWxlY3RlZCkKKwkweDQwIFJlc2VydmVkIChNdXN0IGJlIHNlbGVjdGVkKQorCTB4ODAgUmVzZXJ2ZWQgKE11c3QgYmUgc2VsZWN0ZWQpCituYW1lOmwzX2V2aWN0IHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MGYKKwkweDAxIFNoYXJlZAorCTB4MDIgRXhjbHVzaXZlCisJMHgwNCBPd25lZAorCTB4MDggTW9kaWZpZWQKK25hbWU6aWNhY2hlX2ludmFsaWRhdGVkIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MDMKKwkweDAxIEludmFsaWRhdGluZyBwcm9iZSB0aGF0IGRpZCBub3QgaGl0IGFueSBpbi1mbGlnaHQgaW5zdHJ1Y3Rpb25zCisJMHgwMiBJbnZhbGlkYXRpbmcgcHJvYmUgdGhhdCBoaXQgb25lIG9yIG1vcmUgaW4tZmxpZ2h0IGluc3RydWN0aW9ucworbmFtZTpwYWdlX3NpemVfbWlzbWF0Y2hlcyB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDA3CisJMHgwMSBHdWVzdCBwYWdlIHNpemUgaXMgbGFyZ2VyIHRoYW4gdGhlIGhvc3QgcGFnZSBzaXplCisJMHgwMiBNVFJSIG1pc21hdGNoCisJMHgwNCBIb3N0IHBhZ2Ugc2l6ZSBpcyBsYXJnZXIgdGhhbiB0aGUgZ3Vlc3QgcGFnZSBzaXplCituYW1lOnJldGlyZWRfeDg3X2ZwIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MDcKKwkweDAxIEFkZC9zdWJ0cmFjdCBvcHMKKwkweDAyIE11bHRpcGx5IG9wcworCTB4MDQgRGl2aWRlIG9wcworbmFtZTppYnNfb3AgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwMQorCTB4MDAgVXNpbmcgSUJTIE9QIGN5Y2xlIGNvdW50IG1vZGUKKwkweDAxIFVzaW5nIElCUyBPUCBkaXNwYXRjaCBjb3VudCBtb2RlCisJMHgwMiBFbmFibGUgSUJTIE9QIE1lbW9yeSBBY2Nlc3MgTG9nIAorbmFtZTpub25fY2FuY2VsbGVkX2wzX3JlYWRfcmVxdWVzdHMgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHhmNworCTB4MDEgUmJCbGsKKwkweDAyIFJiQmxrUworCTB4MDQgUmJCbGtNCisJMHgxMCBSZXNlcnZlZCAoTXVzdCBiZSBzZWxlY3RlZCkKKwkweDIwIFJlc2VydmVkIChNdXN0IGJlIHNlbGVjdGVkKQorCTB4NDAgUmVzZXJ2ZWQgKE11c3QgYmUgc2VsZWN0ZWQpCisJMHg4MCBSZXNlcnZlZCAoTXVzdCBiZSBzZWxlY3RlZCkKZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2V2ZW50cy94ODYtNjQvZmFtaWx5MTFoL2V2ZW50cyBiL29wcm9maWxlLTAuOS43L2V2ZW50cy94ODYtNjQvZmFtaWx5MTFoL2V2ZW50cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OGQxZGFkCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL3g4Ni02NC9mYW1pbHkxMWgvZXZlbnRzCkBAIC0wLDAgKzEsMTMyIEBACisjCisjIEFNRCBBdGhsb24odG0pNjQgYW5kIEFNRCBPcHRlcm9uKHRtKSBwcm9jZXNzb3IgcGVyZm9ybWFuY2UgZXZlbnRzCisjCisjIENvcHlyaWdodCBPUHJvZmlsZSBhdXRob3JzCisjIENvcHlyaWdodCAoYykgMjAwNi0yMDA4IEFkdmFuY2VkIE1pY3JvIERldmljZXMKKyMgQ29udHJpYnV0ZWQgYnkgUmF5IEJyeWFudCA8cmF5YnJ5IGF0IGFtZC5jb20+CisjICAgICAgICAgICAgICAgIEphc29uIFllaCA8amFzb24ueWVoIGF0IGFtZC5jb20+CisjICAgICAgICAgICAgICAgIFN1cmF2ZWUgU3V0aGlrdWxwYW5pdCA8c3VyYXZlZS5zdXRoaWt1bHBhbml0IGF0IGFtZC5jb20+CisjICAgICAgICAgICAgICAgIFBhdWwgRHJvbmdvd3NraSA8cGF1bC5kcm9uZ293c2tpIGF0IGFtZC5jb20+CisjCisjICAgIFNvdXJjZSAgICAgIDogQklPUyBhbmQgS2VybmVsIERldmVsb3BlcidzIEd1aWRlIGZvciBBTUQgRmFtaWx5IDExaCBQcm9jZXNzb3JzLAorIyAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIyA0MTI1NiwgUmV2aXNpb24gMy4wMCwgSnVseSAwNywgMjAwOAorIworIyBVcGRhdGVkIG9uIDExIE5vdmVtYmVyIDIwMDg6CisjICAgIERlc2NyaXB0aW9uIDogUHJlcGFyZSBmb3IgT3Byb2ZpbGUgcGF0Y2ggc3VibWlzc2lvbgorIyAgICBTaWduZWQgb2ZmICA6IFN1cmF2ZWUgU3V0aGlrdWxwYW5pdCA8c3VyYXZlZS5zdXRoaWt1bHBhbml0QGFtZC5jb20+CisjCisjIFVwZGF0ZWQgb24gMjAgRmVicnVhcnkgMjAwODoKKyMgICAgRGVzY3JpcHRpb24gOiBBZGRlZCBldmVudHMgZm9yIEFNRCBGYW1pbHkgMTFoIHByb2Nlc3NvcnMgYW5kIHByb29mcmVhZAorIyAgICAgICAgICAgICAgICAgIFdSVCB0aGUgbGF0ZXN0IEJLREcKKyMKKworIyBGbG9hdGluZyBwb2ludCBldmVudHMKK2V2ZW50OjB4MDAgY291bnRlcnM6MCwxLDIsMyB1bTpmcHVfb3BzIG1pbmltdW06NTAwIG5hbWU6RElTUEFUQ0hFRF9GUFVfT1BTIDogRGlzcGF0Y2hlZCBGUFUgb3BzCitldmVudDoweDAxIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkNZQ0xFU19OT19GUFVfT1BTX1JFVElSRUQgOiBDeWNsZXMgaW4gd2hpY2ggdGhlIEZQVSBpcyBlbXB0eQorZXZlbnQ6MHgwMiBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpESVNQQVRDSEVEX0ZQVV9PUFNfRkFTVF9GTEFHIDogRGlzcGF0Y2hlZCBGUFUgb3BzIHRoYXQgdXNlIHRoZSBmYXN0IGZsYWcgaW50ZXJmYWNlCisKKyMgTG9hZCwgU3RvcmUsIGFuZCBUTEIgZXZlbnRzCitldmVudDoweDIwIGNvdW50ZXJzOjAsMSwyLDMgdW06c2VncmVnbG9hZCBtaW5pbXVtOjUwMCBuYW1lOlNFR01FTlRfUkVHSVNURVJfTE9BRFMgOiBTZWdtZW50IHJlZ2lzdGVyIGxvYWRzCitldmVudDoweDIxIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlBJUEVMSU5FX1JFU1RBUlRfRFVFX1RPX1NFTEZfTU9ESUZZSU5HX0NPREUgOiBNaWNyby1hcmNoaXRlY3R1cmFsIHJlLXN5bmMgY2F1c2VkIGJ5IHNlbGYgbW9kaWZ5aW5nIGNvZGUKK2V2ZW50OjB4MjIgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6UElQRUxJTkVfUkVTVEFSVF9EVUVfVE9fUFJPQkVfSElUIDogTWljcm8tYXJjaGl0ZWN0dXJhbCByZS1zeW5jIGNhdXNlZCBieSBzbm9vcAorZXZlbnQ6MHgyMyBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpMU19CVUZGRVJfMl9GVUxMX0NZQ0xFUyA6IEN5Y2xlcyBMUyBCdWZmZXIgMiBmdWxsCitldmVudDoweDI0IGNvdW50ZXJzOjAsMSwyLDMgdW06bG9ja2VkX29wcyBtaW5pbXVtOjUwMCBuYW1lOkxPQ0tFRF9PUFMgOiBMb2NrZWQgb3BlcmF0aW9ucworCisjIEV4ZWN1dGlvbiBVbml0IEV2ZW50cworCisjIERhdGEgQ2FjaGUgZXZlbnQKK2V2ZW50OjB4NDAgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6REFUQV9DQUNIRV9BQ0NFU1NFUyA6IERhdGEgY2FjaGUgYWNjZXNzZXMKK2V2ZW50OjB4NDEgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6REFUQV9DQUNIRV9NSVNTRVMgOiBEYXRhIGNhY2hlIG1pc3NlcworIyBFdmVudCAweDQyIHdpdGggdW5pdCBtYXNrIDB4MDEgY291bnRzIHNhbWUgZXZlbnRzIGFzIGV2ZW50IHNlbGVjdCAweDQzCitldmVudDoweDQyIGNvdW50ZXJzOjAsMSwyLDMgdW06bW9lc3MgbWluaW11bTo1MDAgbmFtZTpEQVRBX0NBQ0hFX1JFRklMTFNfRlJPTV9MMl9PUl9TWVNURU0gOiBEYXRhIGNhY2hlIHJlZmlsbHMgZnJvbSBMMiBvciBzeXN0ZW0KK2V2ZW50OjB4NDMgY291bnRlcnM6MCwxLDIsMyB1bTptb2VzaSBtaW5pbXVtOjUwMCBuYW1lOkRBVEFfQ0FDSEVfUkVGSUxMU19GUk9NX1NZU1RFTSA6IERhdGEgY2FjaGUgcmVmaWxscyBmcm9tIHN5c3RlbQorZXZlbnQ6MHg0NCBjb3VudGVyczowLDEsMiwzIHVtOm1vZXNpIG1pbmltdW06NTAwIG5hbWU6REFUQV9DQUNIRV9MSU5FU19FVklDVEVEIDogRGF0YSBjYWNoZSBsaW5lcyBldmljdGVkCitldmVudDoweDQ1IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkwxX0RUTEJfTUlTU19BTkRfTDJfRFRMQl9ISVQgOiBMMSBEVExCIG1pc3NlcyBhbmQgTDIgRFRMQiBoaXRzCitldmVudDoweDQ2IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkwxX0RUTEJfQU5EX0wyX0RUTEJfTUlTUyA6IEwxIGFuZCBMMiBEVExCIG1pc3NlcworZXZlbnQ6MHg0NyBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpNSVNBTElHTkVEX0FDQ0VTU0VTIDogTWlzYWxpZ25lZCBBY2Nlc3NlcworZXZlbnQ6MHg0OCBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpNSUNST0FSQ0hJVEVDVFVSQUxfTEFURV9DQU5DRUxfT0ZfQU5fQUNDRVNTIDogTWljcm8tYXJjaGl0ZWN0dXJhbCBsYXRlIGNhbmNlbCBvZiBhbiBhY2Nlc3MKK2V2ZW50OjB4NDkgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6TUlDUk9BUkNISVRFQ1RVUkFMX0VBUkxZX0NBTkNFTF9PRl9BTl9BQ0NFU1MgOiBNaWNyby1hcmNoaXRlY3R1cmFsIGVhcmx5IGNhbmNlbCBvZiBhbiBhY2Nlc3MKK2V2ZW50OjB4NGEgY291bnRlcnM6MCwxLDIsMyB1bTplY2MgbWluaW11bTo1MDAgbmFtZTpTQ1JVQkJFUl9TSU5HTEVfQklUX0VDQ19FUlJPUlMgOiBPbmUgYml0IEVDQyBlcnJvciByZWNvcmRlZCBieSBzY3J1YmJlcgorZXZlbnQ6MHg0YiBjb3VudGVyczowLDEsMiwzIHVtOnByZWZldGNoIG1pbmltdW06NTAwIG5hbWU6UFJFRkVUQ0hfSU5TVFJVQ1RJT05TX0RJU1BBVENIRUQgOiBQcmVmZXRjaCBpbnN0cnVjdGlvbnMgZGlzcGF0Y2hlZAorZXZlbnQ6MHg0YyBjb3VudGVyczowLDEsMiwzIHVtOmRjYWNoZW1pc3Nsb2NrZWQgbWluaW11bTo1MDAgbmFtZTpEQ0FDSEVfTUlTU19MT0NLRURfSU5TVFJVQ1RJT05TIDogRENBQ0hFIG1pc3NlcyBieSBsb2NrZWQgaW5zdHJ1Y3Rpb25zCisKKyMgTDIgQ2FjaGUgYW5kIFN5c3RlbSBJbnRlcmZhY2UgZXZlbnRzCitldmVudDoweDY1IGNvdW50ZXJzOjAsMSwyLDMgdW06bWVtcmVxdHlwZSBtaW5pbXVtOjUwMCBuYW1lOk1FTU9SWV9SRVFVRVNUUyA6IE1lbW9yeSByZXF1ZXN0cyBieSB0eXBlCitldmVudDoweDY3IGNvdW50ZXJzOjAsMSwyLDMgdW06ZGF0YXByZWZldGNoIG1pbmltdW06NTAwIG5hbWU6REFUQV9QUkVGRVRDSEVTIDogRGF0YSBwcmVmZXRjaGVyCitldmVudDoweDZjIGNvdW50ZXJzOjAsMSwyLDMgdW06c3lzdGVtcmVhZHJlc3BvbnNlIG1pbmltdW06NTAwIG5hbWU6U1lTVEVNX1JFQURfUkVTUE9OU0VTIDogU3lzdGVtIHJlYWQgcmVzcG9uc2VzIGJ5IGNvaGVyZW5jeSBzdGF0ZQorZXZlbnQ6MHg2ZCBjb3VudGVyczowLDEsMiwzIHVtOndyaXR0ZW50b3N5c3RlbSBtaW5pbXVtOjUwMCBuYW1lOlFVQURXT1JEX1dSSVRFX1RSQU5TRkVSUyA6IFF1YWR3b3JkcyB3cml0dGVuIHRvIHN5c3RlbQorCitldmVudDoweDdkIGNvdW50ZXJzOjAsMSwyLDMgdW06bDJfaW50ZXJuYWwgbWluaW11bTo1MDAgbmFtZTpSRVFVRVNUU19UT19MMiA6IFJlcXVlc3RzIHRvIEwyIGNhY2hlCitldmVudDoweDdlIGNvdW50ZXJzOjAsMSwyLDMgdW06bDJfcmVxX21pc3MgbWluaW11bTo1MDAgbmFtZTpMMl9DQUNIRV9NSVNTIDogTDIgY2FjaGUgbWlzc2VzCitldmVudDoweDdmIGNvdW50ZXJzOjAsMSwyLDMgdW06bDJfZmlsbCBtaW5pbXVtOjUwMCBuYW1lOkwyX0NBQ0hFX0ZJTExfV1JJVEVCQUNLIDogTDIgZmlsbC93cml0ZWJhY2sKKworIyBJbnN0cnVjdGlvbiBDYWNoZSBldmVudHMKK2V2ZW50OjB4ODAgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SU5TVFJVQ1RJT05fQ0FDSEVfRkVUQ0hFUyA6IEluc3RydWN0aW9uIGNhY2hlIGZldGNoZXMKK2V2ZW50OjB4ODEgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SU5TVFJVQ1RJT05fQ0FDSEVfTUlTU0VTIDogSW5zdHJ1Y3Rpb24gY2FjaGUgbWlzc2VzCitldmVudDoweDgyIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOklOU1RSVUNUSU9OX0NBQ0hFX1JFRklMTFNfRlJPTV9MMiA6IEluc3RydWN0aW9uIGNhY2hlIHJlZmlsbHMgZnJvbSBMMgorZXZlbnQ6MHg4MyBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJTlNUUlVDVElPTl9DQUNIRV9SRUZJTExTX0ZST01fU1lTVEVNIDogSW5zdHJ1Y3Rpb24gY2FjaGUgcmVmaWxscyBmcm9tIHN5c3RlbQorZXZlbnQ6MHg4NCBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpMMV9JVExCX01JU1NfQU5EX0wyX0lUTEJfSElUIDogTDEgSVRMQiBtaXNzIGFuZCBMMiBJVExCIGhpdAorZXZlbnQ6MHg4NSBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpMMV9JVExCX01JU1NfQU5EX0wyX0lUTEJfTUlTUyA6IEwxIElUTEIgbWlzcyBhbmQgTDIgSVRMQiBtaXNzCitldmVudDoweDg2IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlBJUEVMSU5FX1JFU1RBUlRfRFVFX1RPX0lOU1RSVUNUSU9OX1NUUkVBTV9QUk9CRSA6IFBpcGVsaW5lIHJlc3RhcnQgZHVlIHRvIGluc3RydWN0aW9uIHN0cmVhbSBwcm9iZQorZXZlbnQ6MHg4NyBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJTlNUUlVDVElPTl9GRVRDSF9TVEFMTCA6IEluc3RydWN0aW9uIGZldGNoIHN0YWxsCitldmVudDoweDg4IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlJFVFVSTl9TVEFDS19ISVRTIDogUmV0dXJuIHN0YWNrIGhpdHMKK2V2ZW50OjB4ODkgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6UkVUVVJOX1NUQUNLX09WRVJGTE9XUyA6IFJldHVybiBzdGFjayBvdmVyZmxvd3MKKworCitldmVudDoweDI2IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlJFVElSRURfQ0ZMVVNIIDogUmV0aXJlZCBDTEZMVVNIIGluc3RydWN0aW9ucworZXZlbnQ6MHgyNyBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpSRVRJUkVEX0NQVUlEIDogUmV0aXJlZCBDUFVJRCBpbnN0cnVjdGlvbnMKK2V2ZW50OjB4NzYgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06MzAwMCBuYW1lOkNQVV9DTEtfVU5IQUxURUQgOiBDeWNsZXMgb3V0c2lkZSBvZiBoYWx0IHN0YXRlCisKKyMgRXhlY3V0aW9uIFVuaXQgZXZlbnRzCitldmVudDoweGMwIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjMwMDAgbmFtZTpSRVRJUkVEX0lOU1RSVUNUSU9OUyA6IFJldGlyZWQgaW5zdHJ1Y3Rpb25zIChpbmNsdWRlcyBleGNlcHRpb25zLCBpbnRlcnJ1cHRzLCByZS1zeW5jcykKK2V2ZW50OjB4YzEgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6UkVUSVJFRF9VT1BTIDogUmV0aXJlZCBtaWNyby1vcHMKK2V2ZW50OjB4YzIgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6UkVUSVJFRF9CUkFOQ0hfSU5TVFJVQ1RJT05TIDogUmV0aXJlZCBicmFuY2hlcyAoY29uZGl0aW9uYWwsIHVuY29uZGl0aW9uYWwsIGV4Y2VwdGlvbnMsIGludGVycnVwdHMpCitldmVudDoweGMzIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlJFVElSRURfTUlTUFJFRElDVEVEX0JSQU5DSF9JTlNUUlVDVElPTlMgOiBSZXRpcmVkIG1pc3ByZWRpY3RlZCBicmFuY2ggaW5zdHJ1Y3Rpb25zCitldmVudDoweGM0IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlJFVElSRURfVEFLRU5fQlJBTkNIX0lOU1RSVUNUSU9OUyA6IFJldGlyZWQgdGFrZW4gYnJhbmNoIGluc3RydWN0aW9ucworZXZlbnQ6MHhjNSBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpSRVRJUkVEX1RBS0VOX0JSQU5DSF9JTlNUUlVDVElPTlNfTUlTUFJFRElDVEVEIDogUmV0aXJlZCB0YWtlbiBicmFuY2hlcyBtaXNwcmVkaWN0ZWQKK2V2ZW50OjB4YzYgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6UkVUSVJFRF9GQVJfQ09OVFJPTF9UUkFOU0ZFUlMgOiBSZXRpcmVkIGZhciBjb250cm9sIHRyYW5zZmVycworZXZlbnQ6MHhjNyBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpSRVRJUkVEX0JSQU5DSF9SRVNZTkNTIDogUmV0aXJlZCBicmFuY2hlcyByZXN5bmNzIChvbmx5IG5vbi1jb250cm9sIHRyYW5zZmVyIGJyYW5jaGVzKQorZXZlbnQ6MHhjOCBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpSRVRJUkVEX05FQVJfUkVUVVJOUyA6IFJldGlyZWQgbmVhciByZXR1cm5zCitldmVudDoweGM5IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlJFVElSRURfTkVBUl9SRVRVUk5TX01JU1BSRURJQ1RFRCA6IFJldGlyZWQgbmVhciByZXR1cm5zIG1pc3ByZWRpY3RlZAorZXZlbnQ6MHhjYSBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpSRVRJUkVEX0lORElSRUNUX0JSQU5DSEVTX01JU1BSRURJQ1RFRCA6IFJldGlyZWQgaW5kaXJlY3QgYnJhbmNoZXMgbWlzcHJlZGljdGVkCitldmVudDoweGNiIGNvdW50ZXJzOjAsMSwyLDMgdW06ZnB1X2luc3RyIG1pbmltdW06NTAwIG5hbWU6UkVUSVJFRF9NTVhfRlBfSU5TVFJVQ1RJT05TIDogUmV0aXJlZCBNTVgvRlAgaW5zdHJ1Y3Rpb25zCitldmVudDoweGNjIGNvdW50ZXJzOjAsMSwyLDMgdW06ZnB1X2Zhc3RwYXRoIG1pbmltdW06NTAwIG5hbWU6UkVUSVJFRF9GQVNUUEFUSF9ET1VCTEVfT1BfSU5TVFJVQ1RJT05TIDogUmV0aXJlZCBGYXN0UGF0aCBkb3VibGUtb3AgaW5zdHJ1Y3Rpb25zCitldmVudDoweGNkIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOklOVEVSUlVQVFNfTUFTS0VEX0NZQ0xFUyA6IEN5Y2xlcyB3aXRoIGludGVycnVwdHMgbWFza2VkIChJRj0wKQorZXZlbnQ6MHhjZSBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJTlRFUlJVUFRTX01BU0tFRF9DWUNMRVNfV0lUSF9JTlRFUlJVUFRfUEVORElORyA6IEN5Y2xlcyB3aXRoIGludGVycnVwdHMgbWFza2VkIHdoaWxlIGludGVycnVwdCBwZW5kaW5nCitldmVudDoweGNmIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjEwIG5hbWU6SU5URVJSVVBUU19UQUtFTiA6IE51bWJlciBvZiB0YWtlbiBoYXJkd2FyZSBpbnRlcnJ1cHRzCitldmVudDoweGQwIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRFQ09ERVJfRU1QVFkgOiBOb3RoaW5nIHRvIGRpc3BhdGNoIChkZWNvZGVyIGVtcHR5KQorZXZlbnQ6MHhkMSBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpESVNQQVRDSF9TVEFMTFMgOiBEaXNwYXRjaCBzdGFsbHMKK2V2ZW50OjB4ZDIgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RElTUEFUQ0hfU1RBTExfRk9SX0JSQU5DSF9BQk9SVCA6IERpc3BhdGNoIHN0YWxsIGZyb20gYnJhbmNoIGFib3J0IHRvIHJldGlyZQorZXZlbnQ6MHhkMyBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpESVNQQVRDSF9TVEFMTF9GT1JfU0VSSUFMSVpBVElPTiA6IERpc3BhdGNoIHN0YWxsIGZvciBzZXJpYWxpemF0aW9uCitldmVudDoweGQ0IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRJU1BBVENIX1NUQUxMX0ZPUl9TRUdNRU5UX0xPQUQgOiBEaXNwYXRjaCBzdGFsbCBmb3Igc2VnbWVudCBsb2FkCitldmVudDoweGQ1IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRJU1BBVENIX1NUQUxMX0ZPUl9SRU9SREVSX0JVRkZFUl9GVUxMIDogRGlzcGF0Y2ggc3RhbGwgZm9yIHJlb3JkZXIgYnVmZmVyIGZ1bGwKK2V2ZW50OjB4ZDYgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RElTUEFUQ0hfU1RBTExfRk9SX1JFU0VSVkFUSU9OX1NUQVRJT05fRlVMTCA6IERpc3BhdGNoIHN0YWxsIHdoZW4gcmVzZXJ2YXRpb24gc3RhdGlvbnMgYXJlIGZ1bGwKK2V2ZW50OjB4ZDcgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RElTUEFUQ0hfU1RBTExfRk9SX0ZQVV9GVUxMIDogRGlzcGF0Y2ggc3RhbGwgd2hlbiBGUFUgaXMgZnVsbAorZXZlbnQ6MHhkOCBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpESVNQQVRDSF9TVEFMTF9GT1JfTFNfRlVMTCA6IERpc3BhdGNoIHN0YWxsIHdoZW4gTFMgaXMgZnVsbAorZXZlbnQ6MHhkOSBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpESVNQQVRDSF9TVEFMTF9XQUlUSU5HX0ZPUl9BTExfUVVJRVQgOiBEaXNwYXRjaCBzdGFsbCB3aGVuIHdhaXRpbmcgZm9yIGFsbCB0byBiZSBxdWlldAorZXZlbnQ6MHhkYSBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpESVNQQVRDSF9TVEFMTF9GT1JfRkFSX1RSQU5TRkVSX09SX1JFU1lOQyA6IERpc3BhdGNoIHN0YWxsIGZvciBmYXIgdHJhbnNmZXIgb3IgcmVzeW5jIHRvIHJldGlyZQorZXZlbnQ6MHhkYiBjb3VudGVyczowLDEsMiwzIHVtOmZwdV9leGNlcHRpb25zIG1pbmltdW06MSBuYW1lOkZQVV9FWENFUFRJT05TIDogRlBVIGV4Y2VwdGlvbnMKK2V2ZW50OjB4ZGMgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06MSBuYW1lOkRSMF9CUkVBS1BPSU5UUyA6IE51bWJlciBvZiBicmVha3BvaW50cyBmb3IgRFIwCitldmVudDoweGRkIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjEgbmFtZTpEUjFfQlJFQUtQT0lOVFMgOiBOdW1iZXIgb2YgYnJlYWtwb2ludHMgZm9yIERSMQorZXZlbnQ6MHhkZSBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bToxIG5hbWU6RFIyX0JSRUFLUE9JTlRTIDogTnVtYmVyIG9mIGJyZWFrcG9pbnRzIGZvciBEUjIKK2V2ZW50OjB4ZGYgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06MSBuYW1lOkRSM19CUkVBS1BPSU5UUyA6IE51bWJlciBvZiBicmVha3BvaW50cyBmb3IgRFIzCisKKyMgTWVtb3J5IENvbnRyb2xsZXIgZXZlbnRzCitldmVudDoweGUwIGNvdW50ZXJzOjAsMSwyLDMgdW06ZHJhbWFjY2VzcyBtaW5pbXVtOjUwMCBuYW1lOkRSQU1fQUNDRVNTRVMgOiBEUkFNIGFjY2Vzc2VzCitldmVudDoweGUxIGNvdW50ZXJzOjAsMSwyLDMgdW06ZHJhbWNvbnRyb2xsZXIgbWluaW11bTo1MDAgbmFtZTpEUkFNX0NPTlRST0xMRVJfUEFHRV9UQUJMRV9FVkVOVFMgOiBEUkFNIENvbnRyb2xsZXIgUGFnZSBUYWJsZSBFdmVudHMKK2V2ZW50OjB4ZTMgY291bnRlcnM6MCwxLDIsMyB1bTp0dXJuYXJvdW5kIG1pbmltdW06NTAwIG5hbWU6TUVNT1JZX0NPTlRST0xMRVJfVFVSTkFST1VORFMgOiBNZW1vcnkgY29udHJvbGxlciB0dXJuYXJvdW5kcworZXZlbnQ6MHhlNCBjb3VudGVyczowLDEsMiwzIHVtOnJiZHF1ZXVlIG1pbmltdW06NTAwIG5hbWU6TUVNT1JZX0NPTlRST0xMRVJfUkJEX1FVRVVFX0VWRU5UUyA6IE1lbW9yeSBjb250cm9sbGVyIFJCRCBxdWV1ZSBldmVudHMKK2V2ZW50OjB4ZTggY291bnRlcnM6MCwxLDIsMyB1bTp0aGVybWFsc3RhdHVzIG1pbmltdW06NTAwIG5hbWU6VEhFUk1BTF9TVEFUVVMgOiBUaGVybWFsIHN0YXR1cworZXZlbnQ6MHhlOSBjb3VudGVyczowLDEsMiwzIHVtOmNwaW9yZXF1ZXN0cyBtaW5pbXVtOjUwMCBuYW1lOkNQVV9JT19SRVFVRVNUU19UT19NRU1PUllfSU8gOiBDUFUvSU8gcmVxdWVzdHMgdG8gbWVtb3J5L0lPCitldmVudDoweGVhIGNvdW50ZXJzOjAsMSwyLDMgdW06Y2FjaGVibG9jayBtaW5pbXVtOjUwMCBuYW1lOkNBQ0hFX0JMT0NLX0NPTU1BTkRTIDogQ2FjaGUgYmxvY2sgY29tbWFuZHMKK2V2ZW50OjB4ZWIgY291bnRlcnM6MCwxLDIsMyB1bTpzaXplY21kcyBtaW5pbXVtOjUwMCBuYW1lOlNJWkVEX0NPTU1BTkRTIDogU2l6ZWQgY29tbWFuZHMKK2V2ZW50OjB4ZWMgY291bnRlcnM6MCwxLDIsMyB1bTpwcm9iZSBtaW5pbXVtOjUwMCBuYW1lOlBST0JFX1JFU1BPTlNFU19BTkRfVVBTVFJFQU1fUkVRVUVTVFMgOiBQcm9iZSByZXNwb25zZXMgYW5kIHVwc3RyZWFtIHJlcXVlc3RzCitldmVudDoweGVlIGNvdW50ZXJzOjAsMSwyLDMgdW06ZGV2ZXZlbnRzIG1pbmltdW06NTAwIG5hbWU6REVWX0VWRU5UUyA6IERFViBldmVudHMKKworCitldmVudDoweDFmMCBjb3VudGVyczowLDEsMiwzIHVtOm1lbW9yeV9jb250cm9sbGVyX3JlcXVlc3RzIG1pbmltdW06NTAwIG5hbWU6TUVNT1JZX0NPTlRST0xMRVJfUkVRVUVTVFMgOiBNZW1vcnkgY29udHJvbGxlciByZXF1ZXN0cworZXZlbnQ6MHgxZTkgY291bnRlcnM6MCwxLDIsMyB1bTpzaWRlYmFuZF9zaWduYWxzX2FuZF9zcGVjaWFsX2N5Y2xlcyBtaW5pbXVtOjUwMCBuYW1lOlNJREVCQU5EX1NJR05BTFNfQU5EX1NQRUNJQUxfQ1lDTEVTIDogU2lkZWJhbmQgU2lnbmFscyBhbmQgU3BlY2lhbCBDeWNsZXMKK2V2ZW50OjB4MWVhIGNvdW50ZXJzOjAsMSwyLDMgdW06aW50ZXJydXB0X2V2ZW50cyBtaW5pbXVtOjUwMCBuYW1lOklOVEVSUlVQVF9FVkVOVFMgOiBJbnRlcnJ1cHQgRXZlbnRzCisKKyMgTGluayBldmVudHMKK2V2ZW50OjB4ZjYgY291bnRlcnM6MCwxLDIsMyB1bTpodHRyYW5zbWl0IG1pbmltdW06NTAwIG5hbWU6SFlQRVJUUkFOU1BPUlRfTElOS18wX1RSQU5TTUlUX0JBTkRXSURUSCA6IEh5cGVyVHJhbnNwb3J0KHRtKSBsaW5rIDAgdHJhbnNtaXQgYmFuZHdpZHRoCmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9ldmVudHMveDg2LTY0L2ZhbWlseTExaC91bml0X21hc2tzIGIvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL3g4Ni02NC9mYW1pbHkxMWgvdW5pdF9tYXNrcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MWU1ZDRmCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL3g4Ni02NC9mYW1pbHkxMWgvdW5pdF9tYXNrcwpAQCAtMCwwICsxLDIyMCBAQAorIworIyBBTUQgQXRobG9uKHRtKTY0IGFuZCBBTUQgT3B0ZXJvbih0bSkgcHJvY2Vzc29yIHVuaXQgbWFza3MKKyMKKyMgQ29weXJpZ2h0IE9Qcm9maWxlIGF1dGhvcnMKKyMgQ29weXJpZ2h0IChjKSBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCAyMDA2LTIwMDgKKyMgQ29udHJpYnV0ZWQgYnkgUmF5IEJyeWFudCA8cmF5YnJ5QGFtZC5jb20+LCBhbmQgb3RoZXJzLgorIyAgICAgICAgICAgICAgICBKYXNvbiBZZWggPGphc29uLnllaCBhdCBhbWQuY29tPgorIyAgICAgICAgICAgICAgICBTdXJhdmVlIFN1dGhpa3VscGFuaXQgPHN1cmF2ZWUuc3V0aGlrdWxwYW5pdCBhdCBhbWQuY29tPgorIyAgICAgICAgICAgICAgICBQYXVsIERyb25nb3dza2kgPHBhdWwuZHJvbmdvd3NraSBhdCBhbWQuY29tPgorIworIyAgICBTb3VyY2UgICAgICA6IEJJT1MgYW5kIEtlcm5lbCBEZXZlbG9wZXIncyBHdWlkZSBmb3IgQU1EIEZhbWlseSAxMWggUHJvY2Vzc29ycywKKyMgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiMgNDEyNTYsIFJldmlzaW9uIDMuMDAsIEp1bHkgMDcsIDIwMDgKKyMKKyMgVXBkYXRlZCBvbiAxMSBOb3ZlbWJlciAyMDA4OgorIyAgICBEZXNjcmlwdGlvbiA6IFByZXBhcmUgZm9yIE9wcm9maWxlIHBhdGNoIHN1Ym1pc3Npb24KKyMgICAgU2lnbmVkIG9mZiAgOiBTdXJhdmVlIFN1dGhpa3VscGFuaXQgPHN1cmF2ZWUuc3V0aGlrdWxwYW5pdEBhbWQuY29tPgorIworIyBVcGRhdGVkIG9uIDIwIEZlYnJ1YXJ5IDIwMDg6CisjICAgIERlc2NyaXB0aW9uIDogQWRkZWQgZXZlbnRzIGZvciBBTUQgRmFtaWx5IDExaCBwcm9jZXNzb3JzIGFuZCBwcm9vZnJlYWQKKyMgICAgICAgICAgICAgICAgICBXUlQgdGhlIGxhdGVzdCBCS0RHCisjCituYW1lOnplcm8gdHlwZTptYW5kYXRvcnkgZGVmYXVsdDoweDAKKwkweDAgTm8gdW5pdCBtYXNrCituYW1lOm1vZXNpIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MWYKKwkweDAxIChJKW52YWxpZCBjYWNoZSBzdGF0ZQorCTB4MDIgKFMpaGFyZWQgY2FjaGUgc3RhdGUKKwkweDA0IChFKXhjbHVzaXZlIGNhY2hlIHN0YXRlCisJMHgwOCAoTyl3bmVkIGNhY2hlIHN0YXRlCisJMHgxMCAoTSlvZGlmaWVkIGNhY2hlIHN0YXRlCisJMHgxZiBBbGwgY2FjaGUgc3RhdGVzCituYW1lOm1vZXNzIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MWUKKwkweDAxIHJlZmlsbCBmcm9tIHN5c3RlbQorCTB4MDIgKFMpaGFyZWQgY2FjaGUgc3RhdGUgZnJvbSBMMgorCTB4MDQgKEUpeGNsdXNpdmUgY2FjaGUgc3RhdGUgZnJvbSBMMgorCTB4MDggKE8pd25lZCBjYWNoZSBzdGF0ZSBmcm9tIEwyCisJMHgxMCAoTSlvZGlmaWVkIGNhY2hlIHN0YXRlIGZyb20gTDIKKwkweDFlIEFsbCBjYWNoZSBzdGF0ZXMgZXhjZXB0IEludmFsaWQKK25hbWU6ZnB1X29wcyB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDNmCisJMHgwMSBBZGQgcGlwZSBvcHMKKwkweDAyIE11bHRpcGx5IHBpcGUKKwkweDA0IFN0b3JlIHBpcGUgb3BzCisJMHgwOCBBZGQgcGlwZSBsb2FkIG9wcworCTB4MTAgTXVsdGlwbHkgcGlwZSBsb2FkIG9wcworCTB4MjAgU3RvcmUgcGlwZSBsb2FkIG9wcworbmFtZTpzZWdyZWdsb2FkIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4N2YKKwkweDAxIEVTIHJlZ2lzdGVyCisJMHgwMiBDUyByZWdpc3RlcgorCTB4MDQgU1MgcmVnaXN0ZXIKKwkweDA4IERTIHJlZ2lzdGVyCisJMHgxMCBGUyByZWdpc3RlcgorCTB4MjAgR1MgcmVnaXN0ZXIKKwkweDQwIEhTIHJlZ2lzdGVyCituYW1lOmVjYyB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDAzCisJMHgwMSBTY3J1YmJlciBlcnJvcgorCTB4MDIgUGlnZ3liYWNrIHNjcnViYmVyIGVycm9ycworbmFtZTpwcmVmZXRjaCB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDA3CisJMHgwMSBMb2FkCisJMHgwMiBTdG9yZQorCTB4MDQgTlRBCituYW1lOmZwdV9pbnN0ciB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDBmCisJMHgwMSB4ODcgaW5zdHJ1Y3Rpb25zCisJMHgwMiBNTVggJiAzRE5vdyBpbnN0cnVjdGlvbnMKKwkweDA0IFBhY2tlZCBTU0UgJiBTU0UyIGluc3RydWN0aW9ucworCTB4MDggUGFja2VkIHNjYWxhciBTU0UgJiBTU0UyIGluc3RydWN0aW9ucworbmFtZTpmcHVfZmFzdHBhdGggdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwNworCTB4MDEgV2l0aCBsb3cgb3AgaW4gcG9zaXRpb24gMAorCTB4MDIgV2l0aCBsb3cgb3AgaW4gcG9zaXRpb24gMQorCTB4MDQgV2l0aCBsb3cgb3AgaW4gcG9zaXRpb24gMgorbmFtZTpmcHVfZXhjZXB0aW9ucyB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDBmCisJMHgwMSB4ODcgcmVjbGFzcyBtaWNyb2ZhdWx0cworCTB4MDIgU1NFIHJldHlwZSBtaWNyb2ZhdWx0cworCTB4MDQgU1NFIHJlY2xhc3MgbWljcm9mYXVsdHMKKwkweDA4IFNTRSBhbmQgeDg3IG1pY3JvdHJhcHMKK25hbWU6ZHJhbWFjY2VzcyB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweGZmCisJMHgwMSBEQ1QwIFBhZ2UgaGl0CisJMHgwMiBEQ1QwIFBhZ2UgbWlzcworCTB4MDQgRENUMCBQYWdlIGNvbmZsaWN0CisJMHgwOCBEQ1QxIFBhZ2UgaGl0CisJMHgxMCBEQ1QxIFBhZ2UgbWlzcworCTB4MjAgRENUMSBQYWdlIGNvbmZsaWN0CisJMHg0MCBXcml0ZSByZXF1ZXN0CisJMHg4MCBSZWFkIHJlcXVlc3QKK25hbWU6ZHJhbWNvbnRyb2xsZXIgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwZgorCTB4MDEgRENUIFBhZ2UgVGFibGUgT3ZlcmZsb3cKKwkweDAyIE51bWJlciBvZiBzdGFsZSB0YWJsZSBlbnRyeSBoaXRzIChoaXQgb24gYSBwYWdlIGNsb3NlZCB0b28gc29vbikKKwkweDA0IFBhZ2UgdGFibGUgaWRsZSBjeWNsZSBsaW1pdCBpbmNyZW1lbnRlZAorCTB4MDggUGFnZSB0YWJsZSBpZGxlIGN5Y2xlIGxpbWl0IGRlY3JlbWVudGVkCituYW1lOnR1cm5hcm91bmQgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgzZgorCTB4MDEgRENUMCBSZWFkIHRvIHdyaXRlIHR1cm5hcm91bmQKKwkweDAyIERDVDAgV3JpdGUgdG8gcmVhZCB0dXJuYXJvdW5kCisJMHgwNCBEQ1QwIERJTU0gKGNoaXAgc2VsZWN0KSB0dXJuYXJvdW5kCisJMHgwOCBEQ1QxIFJlYWQgdG8gd3JpdGUgdHVybmFyb3VuZAorCTB4MTAgRENUMSBXcml0ZSB0byByZWFkIHR1cm5hcm91bmQKKwkweDIwIERDVDEgRElNTSAoY2hpcCBzZWxlY3QpIHR1cm5hcm91bmQKK25hbWU6cmJkcXVldWUgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwNAorCTB4MDQgRjJ4WzEsMF05NFtEY3FCeXBhc3NNYXhdIGNvdW50ZXIgcmVhY2hlZAorbmFtZTpzaXplY21kcyB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDNmCisJMHgwMSBOb24tcG9zdGVkIHdyaXRlIGJ5dGUgKDEtMzIgYnl0ZXMpCisJMHgwMiBOb24tcG9zdGVkIHdyaXRlIERXT1JEICgxLTE2IERXT1JEcykKKwkweDA0IFBvc3RlZCB3cml0ZSBieXRlICgxLTMyIGJ5dGVzKQorCTB4MDggUG9zdGVkIHdyaXRlIERXT1JEICgxLTE2IERXT1JEcykKKwkweDEwIFJlYWQgYnl0ZSAoNCBieXRlcykKKwkweDIwIFJlYWQgRFdPUkQgKDEtMTYgRFdPUkRzKQorbmFtZTpwcm9iZSB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDBmCisJMHgwMSBQcm9iZSBtaXNzCisJMHgwMiBQcm9iZSBoaXQgY2xlYW4KKwkweDA0IFByb2JlIGhpdCBkaXJ0eSB3aXRob3V0IG1lbW9yeSBjYW5jZWwKKwkweDA4IFByb2JlIGhpdCBkaXJ0eSB3aXRoIG1lbW9yeSBjYW5jZWwKKwkweDEwIFVwc3RyZWFtIGRpc3BsYXkgcmVmcmVzaC9JU09DIHJlYWRzCisJMHgyMCBVcHN0cmVhbSBub24tZGlzcGxheSByZWZyZXNoIHJlYWRzCisJMHg0MCBVcHN0cmVhbSBJU09DIHdyaXRlcworCTB4ODAgVXBzdHJlYW0gbm9uLUlTT0Mgd3JpdGVzCituYW1lOmwyX2ludGVybmFsIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MWYKKwkweDAxIElDIGZpbGwKKwkweDAyIERDIGZpbGwKKwkweDA0IFRMQiBmaWxsIChwYWdlIHRhYmxlIHdhbGspCisJMHgwOCBUYWcgc25vb3AgcmVxdWVzdAorCTB4MTAgQ2FuY2VsbGVkIHJlcXVlc3QKK25hbWU6bDJfcmVxX21pc3MgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwNworCTB4MDEgSUMgZmlsbAorCTB4MDIgREMgZmlsbAorCTB4MDQgVExCIHBhZ2UgdGFibGUgd2FsaworbmFtZTpsMl9maWxsIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MDMKKwkweDAxIEwyIGZpbGxzICh2aWN0aW1zIGZyb20gTDEgY2FjaGVzLCBUTEIgcGFnZSB0YWJsZSB3YWxrcyBhbmQgZGF0YSBwcmVmZXRjaGVzKQorCTB4MDIgTDIgd3JpdGViYWNrcyB0byBzeXN0ZW0KK25hbWU6ZGV2ZXZlbnRzIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4NzAKKwkweDEwIERFViBoaXQKKwkweDIwIERFViBtaXNzCisJMHg0MCBERVYgZXJyb3IKK25hbWU6Y3Bpb3JlcXVlc3RzIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4YTIKKwkweGExIFJlcXVlc3RzIExvY2FsIEkvTyB0byBMb2NhbCBJL08KKwkweGEyIFJlcXVlc3RzIExvY2FsIEkvTyB0byBMb2NhbCBNZW1vcnkKKwkweGEzIFJlcXVlc3RzIExvY2FsIEkvTyB0byBMb2NhbCAoSS9PIG9yIE1lbSkKKwkweGE0IFJlcXVlc3RzIExvY2FsIENQVSB0byBMb2NhbCBJL08KKwkweGE1IFJlcXVlc3RzIExvY2FsIChDUFUgb3IgSS9PKSB0byBMb2NhbCBJL08KKwkweGE4IFJlcXVlc3RzIExvY2FsIENQVSB0byBMb2NhbCBNZW1vcnkKKwkweGFhIFJlcXVlc3RzIExvY2FsIChDUFUgb3IgSS9PKSB0byBMb2NhbCBNZW1vcnkKKwkweGFjIFJlcXVlc3RzIExvY2FsIENQVSB0byBMb2NhbCAoSS9PIG9yIE1lbSkKKwkweGFmIFJlcXVlc3RzIExvY2FsIChDUFUgb3IgSS9PKSB0byBMb2NhbCAoSS9PIG9yIE1lbSkKKwkweDkxIFJlcXVlc3RzIExvY2FsIEkvTyB0byBSZW1vdGUgSS9PCisJMHg5MiBSZXF1ZXN0cyBMb2NhbCBJL08gdG8gUmVtb3RlIE1lbW9yeQorCTB4OTMgUmVxdWVzdHMgTG9jYWwgSS9PIHRvIFJlbW90ZSAoSS9PIG9yIE1lbSkKKwkweDk0IFJlcXVlc3RzIExvY2FsIENQVSB0byBSZW1vdGUgSS9PCisJMHg5NSBSZXF1ZXN0cyBMb2NhbCAoQ1BVIG9yIEkvTykgdG8gUmVtb3RlIEkvTworCTB4OTggUmVxdWVzdHMgTG9jYWwgQ1BVIHRvIFJlbW90ZSBNZW1vcnkKKwkweDlhIFJlcXVlc3RzIExvY2FsIChDUFUgb3IgSS9PKSB0byBSZW1vdGUgTWVtb3J5CisJMHg5YyBSZXF1ZXN0cyBMb2NhbCBDUFUgdG8gUmVtb3RlIChJL08gb3IgTWVtKQorCTB4OWYgUmVxdWVzdHMgTG9jYWwgKENQVSBvciBJL08pIHRvIFJlbW90ZSAoSS9PIG9yIE1lbSkKKwkweGIxIFJlcXVlc3RzIExvY2FsIEkvTyB0byBBbnkgSS9PCisJMHhiMiBSZXF1ZXN0cyBMb2NhbCBJL08gdG8gQW55IE1lbW9yeQorCTB4YjMgUmVxdWVzdHMgTG9jYWwgSS9PIHRvIEFueSAoSS9PIG9yIE1lbSkKKwkweGI0IFJlcXVlc3RzIExvY2FsIENQVSB0byBBbnkgSS9PCisJMHhiNSBSZXF1ZXN0cyBMb2NhbCAoQ1BVIG9yIEkvTykgdG8gQW55IEkvTworCTB4YjggUmVxdWVzdHMgTG9jYWwgQ1BVIHRvIEFueSBNZW1vcnkKKwkweGJhIFJlcXVlc3RzIExvY2FsIChDUFUgb3IgSS9PKSB0byBBbnkgTWVtb3J5CisJMHhiYyBSZXF1ZXN0cyBMb2NhbCBDUFUgdG8gQW55IChJL08gb3IgTWVtKQorCTB4YmYgUmVxdWVzdHMgTG9jYWwgKENQVSBvciBJL08pIHRvIEFueSAoSS9PIG9yIE1lbSkKKwkweDYxIFJlcXVlc3RzIFJlbW90ZSBJL08gdG8gTG9jYWwgSS9PCisJMHg2NCBSZXF1ZXN0cyBSZW1vdGUgQ1BVIHRvIExvY2FsIEkvTworCTB4NjUgUmVxdWVzdHMgUmVtb3RlIChDUFUgb3IgSS9PKSB0byBMb2NhbCBJL08KK25hbWU6Y2FjaGVibG9jayB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDNkCisJMHgwMSBWaWN0aW0gQmxvY2sgKFdyaXRlYmFjaykKKwkweDA0IFJlYWQgQmxvY2sgKERjYWNoZSBsb2FkIG1pc3MgcmVmaWxsKQorCTB4MDggUmVhZCBCbG9jayBTaGFyZWQgKEljYWNoZSByZWZpbGwpCisJMHgxMCBSZWFkIEJsb2NrIE1vZGlmaWVkIChEY2FjaGUgc3RvcmUgbWlzcyByZWZpbGwpCisJMHgyMCBDaGFuZ2UgdG8gRGlydHkgKGZpcnN0IHN0b3JlIHRvIGNsZWFuIGJsb2NrIGFscmVhZHkgaW4gY2FjaGUpCituYW1lOmRhdGFwcmVmZXRjaCB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDAzCisJMHgwMSBDYW5jZWxsZWQgcHJlZmV0Y2hlcworCTB4MDIgUHJlZmV0Y2ggYXR0ZW1wdHMKK25hbWU6bWVtcmVxdHlwZSB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDgzCisJMHgwMSBSZXF1ZXN0cyB0byBub24tY2FjaGVhYmxlIChVQykgbWVtb3J5CisJMHgwMiBSZXF1ZXN0cyB0byB3cml0ZS1jb21iaW5pbmcgKFdDKSBtZW1vcnkgb3IgV0MgYnVmZmVyIGZsdXNoZXMgdG8gV0IgbWVtb3J5CisJMHg4MCBTdHJlYW1pbmcgc3RvcmUgKFNTKSByZXF1ZXN0cworbmFtZTpzeXN0ZW1yZWFkcmVzcG9uc2UgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHg3CisJMHgwMSBFeGNsdXNpdmUKKwkweDAyIE1vZGlmaWVkCisJMHgwNCBTaGFyZWQKKwkweDA4IERhdGEgRXJyb3IKK25hbWU6d3JpdHRlbnRvc3lzdGVtIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MQorCTB4MDEgUXVhZHdvcmQgd3JpdGUgdHJhbnNmZXIKKyMgQktERyAzLjI4IGRvZXMgbm90IGluY2x1ZGUgdW5pdF9tYXNrIG9mIDB4MDEgZm9yICJhY2Nlc3NlcyBieSBMb2NrZWQgaW5zdHJ1Y3Rpb25zIgorbmFtZTpkY2FjaGVtaXNzbG9ja2VkIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MDIKKwkweDAyIERhdGEgY2FjaGUgbWlzc2VzIGJ5IGxvY2tlZCBpbnN0cnVjdGlvbnMKK25hbWU6bG9ja2VkX29wcyB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDA0CisJMHgwMSBUaGUgbnVtYmVyIG9mIGxvY2tlZCBpbnN0cnVjdGlvbnMgZXhlY3V0ZWQKKwkweDAyIFRoZSBudW1iZXIgb2YgY3ljbGVzIHNwZW50IGluIHNwZWN1bGF0aXZlIHBoYXNlCisJMHgwNCBUaGUgbnVtYmVyIG9mIGN5Y2xlcyBzcGVudCBpbiBub24tc3BlY3VsYXRpdmUgcGhhc2UgKGluY2x1ZGluZyBjYWNoZSBtaXNzIHBlbmFsdHkpCituYW1lOnRoZXJtYWxzdGF0dXMgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHg4MAorCTB4MDEgTnVtYmVyIG9mIGNsb2NrcyBNRU1IT1RfTCBpcyBhc3NlcnRlZAorCTB4MDQgTnVtYmVyIG9mIHRpbWVzIHRoZSBIVEMgdHJhbnNpdGlvbnMgZnJvbSBpbmFjdGl2ZSB0byBhY3RpdmUKKwkweDIwIE51bWJlciBvZiBjbG9ja3MgSFRDIFAtc3RhdGUgaXMgaW5hY3RpdmUKKwkweDQwIE51bWJlciBvZiBjbG9ja3MgSFRDIFAtc3RhdGUgaXMgYWN0aXZlCisJMHg4MCBQUk9DSE9UX0wgYXNzZXJ0ZWQgYnkgYW4gZXh0ZXJuYWwgc291cmNlIGFuZCBQLXN0YXRlIGNoYW5nZSBvY2N1cnJlZAorbmFtZTptZW1vcnlfY29udHJvbGxlcl9yZXF1ZXN0cyB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDc4CisJMHgwOCAzMiBCeXRlcyBTaXplZCBXcml0ZXMKKwkweDEwIDY0IEJ5dGVzIFNpemVkIFdyaXRlcworCTB4MjAgMzIgQnl0ZXMgU2l6ZWQgUmVhZHMKKwkweDQwIDY0IEJ5dGVzIFNpemVkIFJlYWRzCituYW1lOnNpZGViYW5kX3NpZ25hbHNfYW5kX3NwZWNpYWxfY3ljbGVzIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MWYKKwkweDAxIEhBTFQKKwkweDAyIFNUT1BHUkFOVAorCTB4MDQgU0hVVERPV04KKwkweDA4IFdCSU5WRAorCTB4MTAgSU5WRAorbmFtZTppbnRlcnJ1cHRfZXZlbnRzIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4ZmYKKwkweDAxIEZpeGVkCisJMHgwMiBMUEEKKwkweDA0IFNNSQorCTB4MDggTk1JCisJMHgxMCBJTklUCisJMHgyMCBTVEFSVFVQCisJMHg0MCBJTlQKKwkweDgwIEVPSQorbmFtZTpodHRyYW5zbWl0IHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4M2YKKwkweDAxIENvbW1hbmQgRFdPUkQgc2VudAorCTB4MDIgQWRkcmVzcyBEV09SRCBzZW50CisJMHgwNCBEYXRhIERXT1JEIHNlbnQKKwkweDA4IEJ1ZmZlciByZWxlYXNlIERXT1JEIHNlbnQKKwkweDEwIE5vcCBEVyBzZW50IChpZGxlKQorCTB4MjAgUGVyIHBhY2tldCBDUkMgc2VudApkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL3g4Ni02NC9mYW1pbHkxMmgvZXZlbnRzIGIvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL3g4Ni02NC9mYW1pbHkxMmgvZXZlbnRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViNWFjNWMKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9ldmVudHMveDg2LTY0L2ZhbWlseTEyaC9ldmVudHMKQEAgLTAsMCArMSwxOTIgQEAKKyMgQU1EIEZhbWlseSAxMiBwcm9jZXNzb3IgcGVyZm9ybWFuY2UgZXZlbnRzCisjCisjIENvcHlyaWdodCBPUHJvZmlsZSBhdXRob3JzCisjIENvcHlyaWdodCAoYykgMjAwNi0yMDExIEFkdmFuY2VkIE1pY3JvIERldmljZXMKKyMgQ29udHJpYnV0ZWQgYnkgUmF5IEJyeWFudCA8cmF5YnJ5IGF0IGFtZC5jb20+LAorIwkJSmFzb24gWWVoIDxqYXNvbi55ZWggYXQgYW1kLmNvbT4KKyMJCVN1cmF2ZWUgU3V0aGlrdWxwYW5pdCA8c3VyYXZlZS5zdXRoaWt1bHBhbml0IGF0IGFtZC5jb20+CisjCQlQYXVsIERyb25nb3dza2kgPHBhdWwuZHJvbmdvd3NraSBhdCBhbWQuY29tPgorIworIyBTb3VyY2VzOiBCSU9TIGFuZCBLZXJuZWwgRGV2ZWxvcGVyJ3MgR3VpZGUgZm9yIEFNRCBGYW1pbHkgMTJoIFByb2Nlc3NvcnMsCisjICAgICAgICAgIFB1YmxpY2F0aW9uIyA0MTEzMSwgUmV2aXNpb24gMS4xMywgTWFyY2ggMDEsIDIwMTEKKyMKKyMgICAgICAgICAgU29mdHdhcmUgT3B0aW1pemF0aW9uIEd1aWRlIGZvciBBTUQgRmFtaWx5IDEwaCBhbmQgRmFtaWx5IDEyaCBQcm9jZXNzb3JzLAorIyAgICAgICAgICBQdWJsaWNhdGlvbiMgNDA1NDYsIFJldmlzaW9uIDMuMTMsIEZlYnJ1YXJ5IDIwMTEKKyMgICAgICAgICAgKE5vdGU6IEZvciBJQlMgRGVyaXZlZCBQZXJmb3JtYW5jZSBFdmVudHMpCisjCisjIFJldmlzaW9uOiAxLjIKKyMKKyMgQ2hhbmdlTG9nOgorIwkxLjI6IDA5IE1hcmNoIDIwMTEKKyMgCS0gVXBkYXRlIHdpdGggQktERyBSZXYuMS4xMyAocHJlbGltaW5hcnkpCisjCisjCTEuMTogMjUgSmFudWFyeSAyMDEwLgorIyAJLSBVcGRhdGUgbWluaW11bSB2YWx1ZSBmb3IgUkVUSVJFRF9VT1BTCisjIAktIFVwZGF0ZSB0byBCS0RHIFJldmlzaW9uIDEuMTIKKyMKKyMJMS4wOiAwOCBEZWNlbWJlciAyMDA5LgorIyAJLSBQcmVsaW1pbmFyeSB2ZXJzaW9uCitldmVudDoweDAwMCBjb3VudGVyczowLDEsMiwzIHVtOmZwdV9vcHMgbWluaW11bTo1MDAgbmFtZTpESVNQQVRDSEVEX0ZQVV9PUFMgOiBEaXNwYXRjaGVkIEZQVSBPcGVyYXRpb25zCitldmVudDoweDAwMSBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpDWUNMRVNfRlBVX0VNUFRZIDogQ3ljbGVzIGluIHdoaWNoIHRoZSBGUFUgaXMgRW1wdHkKK2V2ZW50OjB4MDAyIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRJU1BBVENIRURfRlBVX09QU19GQVNUX0ZMQUcgOiBEaXNwYXRjaGVkIEZhc3QgRmxhZyBGUFUgT3BlcmF0aW9ucworZXZlbnQ6MHgwMDMgY291bnRlcnM6MCwxLDIsMyB1bTpzc2Vfb3BzIG1pbmltdW06NTAwIG5hbWU6UkVUSVJFRF9TU0VfT1BTIDogUmV0aXJlZCBTU0UgT3BlcmF0aW9ucworZXZlbnQ6MHgwMDQgY291bnRlcnM6MCwxLDIsMyB1bTptb3ZlX29wcyBtaW5pbXVtOjUwMCBuYW1lOlJFVElSRURfTU9WRV9PUFMgOiBSZXRpcmVkIE1vdmUgT3BzCitldmVudDoweDAwNSBjb3VudGVyczowLDEsMiwzIHVtOnNlcmlhbF9vcHMgbWluaW11bTo1MDAgbmFtZTpSRVRJUkVEX1NFUklBTElaSU5HX09QUyA6IFJldGlyZWQgU2VyaWFsaXppbmcgT3BzCitldmVudDoweDAwNiBjb3VudGVyczowLDEsMiwzIHVtOnNlcmlhbF9vcHNfc2NoZWQgbWluaW11bTo1MDAgbmFtZTpTRVJJQUxfVU9QU19JTl9GUF9TQ0hFRCA6IE51bWJlciBvZiBDeWNsZXMgdGhhdCBhIFNlcmlhbGl6aW5nIHVvcCBpcyBpbiB0aGUgRlAgU2NoZWR1bGVyCitldmVudDoweDAyMCBjb3VudGVyczowLDEsMiwzIHVtOnNlZ3JlZ2xvYWQgbWluaW11bTo1MDAgbmFtZTpTRUdNRU5UX1JFR0lTVEVSX0xPQURTIDogU2VnbWVudCBSZWdpc3RlciBMb2FkcworZXZlbnQ6MHgwMjEgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6UElQRUxJTkVfUkVTVEFSVF9EVUVfVE9fU0VMRl9NT0RJRllJTkdfQ09ERSA6IFBpcGVsaW5lIFJlc3RhcnQgRHVlIHRvIFNlbGYtTW9kaWZ5aW5nIENvZGUKK2V2ZW50OjB4MDIyIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlBJUEVMSU5FX1JFU1RBUlRfRFVFX1RPX1BST0JFX0hJVCA6IFBpcGVsaW5lIFJlc3RhcnQgRHVlIHRvIFByb2JlIEhpdAorZXZlbnQ6MHgwMjMgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6TFNfQlVGRkVSXzJfRlVMTF9DWUNMRVMgOiBMUyBCdWZmZXIgMiBGdWxsCitldmVudDoweDAyNCBjb3VudGVyczowLDEsMiwzIHVtOmxvY2tfb3BzIG1pbmltdW06NTAwIG5hbWU6TE9DS0VEX09QUyA6IExvY2tlZCBPcGVyYXRpb25zCitldmVudDoweDAyNiBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpSRVRJUkVEX0NMRkxVU0hfSU5TVFJVQ1RJT05TIDogUmV0aXJlZCBDTEZMVVNIIEluc3RydWN0aW9ucworZXZlbnQ6MHgwMjcgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6UkVUSVJFRF9DUFVJRF9JTlNUUlVDVElPTlMgOiBSZXRpcmVkIENQVUlEIEluc3RydWN0aW9ucworZXZlbnQ6MHgwMmEgY291bnRlcnM6MCwxLDIsMyB1bTpzdG9yZV90b19sb2FkIG1pbmltdW06NTAwIG5hbWU6Q0FOQ0VMTEVEX1NUT1JFX1RPX0xPQUQgOiBDYW5jZWxsZWQgU3RvcmUgdG8gTG9hZCBGb3J3YXJkIE9wZXJhdGlvbnMKK2V2ZW50OjB4MDJiIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlNNSVNfUkVDRUlWRUQgOiBTTUlzIFJlY2VpdmVkCitldmVudDoweDA0MCBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpEQVRBX0NBQ0hFX0FDQ0VTU0VTIDogRGF0YSBDYWNoZSBBY2Nlc3NlcworZXZlbnQ6MHgwNDEgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6REFUQV9DQUNIRV9NSVNTRVMgOiBEYXRhIENhY2hlIE1pc3NlcworZXZlbnQ6MHgwNDIgY291bnRlcnM6MCwxLDIsMyB1bTptb2VzcyBtaW5pbXVtOjUwMCBuYW1lOkRBVEFfQ0FDSEVfUkVGSUxMU19GUk9NX0wyX09SX05PUlRIQlJJREdFIDogRGF0YSBDYWNoZSBSZWZpbGxzIGZyb20gTDIgb3IgTm9ydGhicmlkZ2UKK2V2ZW50OjB4MDQzIGNvdW50ZXJzOjAsMSwyLDMgdW06bW9lc2kgbWluaW11bTo1MDAgbmFtZTpEQVRBX0NBQ0hFX1JFRklMTFNfRlJPTV9OT1JUSEJSSURHRSA6IERhdGEgQ2FjaGUgUmVmaWxscyBmcm9tIHRoZSBOb3J0aGJyaWRnZQorZXZlbnQ6MHgwNDQgY291bnRlcnM6MCwxLDIsMyB1bTptb2VzaV9naCBtaW5pbXVtOjUwMCBuYW1lOkRBVEFfQ0FDSEVfTElORVNfRVZJQ1RFRCA6IERhdGEgQ2FjaGUgTGluZXMgRXZpY3RlZAorZXZlbnQ6MHgwNDUgY291bnRlcnM6MCwxLDIsMyB1bTpsMV9kdGxiX21pc3NfbDJfaGl0IG1pbmltdW06NTAwIG5hbWU6TDFfRFRMQl9NSVNTX0FORF9MMl9EVExCX0hJVCA6IEwxIERUTEIgTWlzcyBhbmQgTDIgRFRMQiBIaXQKK2V2ZW50OjB4MDQ2IGNvdW50ZXJzOjAsMSwyLDMgdW06bDFfbDJfZHRsYl9taXNzIG1pbmltdW06NTAwIG5hbWU6TDFfRFRMQl9BTkRfTDJfRFRMQl9NSVNTIDogTDEgRFRMQiBhbmQgTDIgRFRMQiBNaXNzCitldmVudDoweDA0NyBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpNSVNBTElHTkVEX0FDQ0VTU0VTIDogTWlzYWxpZ25lZCBBY2Nlc3NlcworZXZlbnQ6MHgwNDggY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6TUlDUk9fQVJDSF9MQVRFX0NBTkNFTF9BQ0NFU1MgOiBNaWNyb2FyY2hpdGVjdHVyYWwgTGF0ZSBDYW5jZWwgb2YgYW4gQWNjZXNzCitldmVudDoweDA0OSBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpNSUNST19BUkNIX0VBUkxZX0NBTkNFTF9BQ0NFU1MgOiBNaWNyb2FyY2hpdGVjdHVyYWwgRWFybHkgQ2FuY2VsIG9mIGFuIEFjY2VzcworZXZlbnQ6MHgwNGIgY291bnRlcnM6MCwxLDIsMyB1bTpwcmVmZXRjaCBtaW5pbXVtOjUwMCBuYW1lOlBSRUZFVENIX0lOU1RSVUNUSU9OU19ESVNQQVRDSEVEIDogUHJlZmV0Y2ggSW5zdHJ1Y3Rpb25zIERpc3BhdGNoZWQKK2V2ZW50OjB4MDRjIGNvdW50ZXJzOjAsMSwyLDMgdW06bG9ja2VkX2luc3RydWN0aW9uX2RjYWNoZV9taXNzIG1pbmltdW06NTAwIG5hbWU6TE9DS0VEX0lOU1RSVUNUSU9OU19EQ0FDSEVfTUlTU0VTIDogRENBQ0hFIE1pc3NlcyBieSBMb2NrZWQgSW5zdHJ1Y3Rpb25zCitldmVudDoweDA0ZCBjb3VudGVyczowLDEsMiwzIHVtOmwxX2R0bGJfaGl0IG1pbmltdW06NTAwIG5hbWU6TDFfRFRMQl9ISVQgOiBMMSBEVExCIEhpdAorZXZlbnQ6MHgwNTIgY291bnRlcnM6MCwxLDIsMyB1bTpzb2Z0X3ByZWZldGNoIG1pbmltdW06NTAwIG5hbWU6SU5FRkZFQ1RJVkVfU1dfUFJFRkVUQ0hFUyA6IEluZWZmZWN0aXZlIFNvZnR3YXJlIFByZWZldGNoZXMKK2V2ZW50OjB4MDU0IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkdMT0JBTF9UTEJfRkxVU0hFUyA6IEdsb2JhbCBUTEIgRmx1c2hlcworZXZlbnQ6MHgwNjUgY291bnRlcnM6MCwxLDIsMyB1bTptZW1yZXF0eXBlIG1pbmltdW06NTAwIG5hbWU6TUVNT1JZX1JFUVVFU1RTIDogTWVtb3J5IFJlcXVlc3RzIGJ5IFR5cGUKK2V2ZW50OjB4MDY3IGNvdW50ZXJzOjAsMSwyLDMgdW06ZGF0YXByZWZldGNoIG1pbmltdW06NTAwIG5hbWU6REFUQV9QUkVGRVRDSEVTIDogRGF0YSBQcmVmZXRjaGVyCitldmVudDoweDA2YyBjb3VudGVyczowLDEsMiwzIHVtOnN5c3RlbXJlYWRyZXNwb25zZSBtaW5pbXVtOjUwMCBuYW1lOk5PUlRIQlJJREdFX1JFQURfUkVTUE9OU0VTIDogTm9ydGhicmlkZ2UgUmVhZCBSZXNwb25zZXMgYnkgQ29oZXJlbmN5IFN0YXRlCitldmVudDoweDA2ZCBjb3VudGVyczowLDEsMiwzIHVtOm9jdHdvcmRfdHJhbnNmZXIgbWluaW11bTo1MDAgbmFtZTpPQ1RXT1JEX1dSSVRFX1RSQU5TRkVSUyA6IE9jdHdvcmRzIFdyaXR0ZW4gdG8gU3lzdGVtCitldmVudDoweDA3NiBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAwMCBuYW1lOkNQVV9DTEtfVU5IQUxURUQgOiBDUFUgQ2xvY2tzIG5vdCBIYWx0ZWQKK2V2ZW50OjB4MDdkIGNvdW50ZXJzOjAsMSwyLDMgdW06bDJfaW50ZXJuYWwgbWluaW11bTo1MDAgbmFtZTpSRVFVRVNUU19UT19MMiA6IFJlcXVlc3RzIHRvIEwyIENhY2hlCitldmVudDoweDA3ZSBjb3VudGVyczowLDEsMiwzIHVtOmwyX3JlcV9taXNzIG1pbmltdW06NTAwIG5hbWU6TDJfQ0FDSEVfTUlTUyA6IEwyIENhY2hlIE1pc3NlcworZXZlbnQ6MHgwN2YgY291bnRlcnM6MCwxLDIsMyB1bTpsMl9maWxsIG1pbmltdW06NTAwIG5hbWU6TDJfQ0FDSEVfRklMTF9XUklURUJBQ0sgOiBMMiBGaWxsL1dyaXRlYmFjaworZXZlbnQ6MHgxNjUgY291bnRlcnM6MCwxLDIsMyB1bTpwYWdlX3NpemVfbWlzbWF0Y2hlcyBtaW5pbXVtOjUwMCBuYW1lOlBBR0VfU0laRV9NSVNNQVRDSEVTIDogUGFnZSBTaXplIE1pc21hdGNoZXMKK2V2ZW50OjB4MDgwIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOklOU1RSVUNUSU9OX0NBQ0hFX0ZFVENIRVMgOiBJbnN0cnVjdGlvbiBDYWNoZSBGZXRjaGVzCitldmVudDoweDA4MSBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJTlNUUlVDVElPTl9DQUNIRV9NSVNTRVMgOiBJbnN0cnVjdGlvbiBDYWNoZSBNaXNzZXMKK2V2ZW50OjB4MDgyIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOklOU1RSVUNUSU9OX0NBQ0hFX1JFRklMTFNfRlJPTV9MMiA6IEluc3RydWN0aW9uIENhY2hlIFJlZmlsbHMgZnJvbSBMMgorZXZlbnQ6MHgwODMgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SU5TVFJVQ1RJT05fQ0FDSEVfUkVGSUxMU19GUk9NX1NZU1RFTSA6IEluc3RydWN0aW9uIENhY2hlIFJlZmlsbHMgZnJvbSBTeXN0ZW0KK2V2ZW50OjB4MDg0IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkwxX0lUTEJfTUlTU19BTkRfTDJfSVRMQl9ISVQgOiBMMSBJVExCIE1pc3MsIEwyIElUTEIgSGl0CitldmVudDoweDA4NSBjb3VudGVyczowLDEsMiwzIHVtOmwxX2wyX2l0bGJfbWlzcyBtaW5pbXVtOjUwMCBuYW1lOkwxX0lUTEJfTUlTU19BTkRfTDJfSVRMQl9NSVNTIDogTDEgSVRMQiBNaXNzLCBMMiBJVExCIE1pc3MKK2V2ZW50OjB4MDg2IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlBJUEVMSU5FX1JFU1RBUlRfRFVFX1RPX0lOU1RSVUNUSU9OX1NUUkVBTV9QUk9CRSA6IFBpcGVsaW5lIFJlc3RhcnQgRHVlIHRvIEluc3RydWN0aW9uIFN0cmVhbSBQcm9iZQorZXZlbnQ6MHgwODcgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SU5TVFJVQ1RJT05fRkVUQ0hfU1RBTEwgOiBJbnN0cnVjdGlvbiBGZXRjaCBTdGFsbAorZXZlbnQ6MHgwODggY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6UkVUVVJOX1NUQUNLX0hJVFMgOiBSZXR1cm4gU3RhY2sgSGl0cworZXZlbnQ6MHgwODkgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6UkVUVVJOX1NUQUNLX09WRVJGTE9XUyA6IFJldHVybiBTdGFjayBPdmVyZmxvd3MKK2V2ZW50OjB4MDhiIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOklOU1RSVUNUSU9OX0NBQ0hFX1ZJQ1RJTVMgOiBJbnN0cnVjdGlvbiBDYWNoZSBWaWN0aW1zCitldmVudDoweDA4YyBjb3VudGVyczowLDEsMiwzIHVtOmljYWNoZV9pbnZhbGlkYXRlZCBtaW5pbXVtOjUwMCBuYW1lOklOU1RSVUNUSU9OX0NBQ0hFX0lOVkFMSURBVEVEIDogSW5zdHJ1Y3Rpb24gQ2FjaGUgTGluZXMgSW52YWxpZGF0ZWQKK2V2ZW50OjB4MDk5IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOklUTEJfUkVMT0FEUyA6IElUTEIgUmVsb2FkcworZXZlbnQ6MHgwOWEgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SVRMQl9SRUxPQURTX0FCT1JURUQgOiBJVExCIFJlbG9hZHMgQWJvcnRlZAorZXZlbnQ6MHgwYzAgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwMDAgbmFtZTpSRVRJUkVEX0lOU1RSVUNUSU9OUyA6IFJldGlyZWQgSW5zdHJ1Y3Rpb25zCitldmVudDoweDBjMSBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAwMCBuYW1lOlJFVElSRURfVU9QUyA6IFJldGlyZWQgdW9wcworZXZlbnQ6MHgwYzIgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6UkVUSVJFRF9CUkFOQ0hfSU5TVFJVQ1RJT05TIDogUmV0aXJlZCBCcmFuY2ggSW5zdHJ1Y3Rpb25zCitldmVudDoweDBjMyBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpSRVRJUkVEX01JU1BSRURJQ1RFRF9CUkFOQ0hfSU5TVFJVQ1RJT05TIDogUmV0aXJlZCBNaXNwcmVkaWN0ZWQgQnJhbmNoIEluc3RydWN0aW9ucworZXZlbnQ6MHgwYzQgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6UkVUSVJFRF9UQUtFTl9CUkFOQ0hfSU5TVFJVQ1RJT05TIDogUmV0aXJlZCBUYWtlbiBCcmFuY2ggSW5zdHJ1Y3Rpb25zCitldmVudDoweDBjNSBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpSRVRJUkVEX1RBS0VOX0JSQU5DSF9JTlNUUlVDVElPTlNfTUlTUFJFRElDVEVEIDogUmV0aXJlZCBUYWtlbiBCcmFuY2ggSW5zdHJ1Y3Rpb25zIE1pc3ByZWRpY3RlZAorZXZlbnQ6MHgwYzYgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6UkVUSVJFRF9GQVJfQ09OVFJPTF9UUkFOU0ZFUlMgOiBSZXRpcmVkIEZhciBDb250cm9sIFRyYW5zZmVycworZXZlbnQ6MHgwYzcgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6UkVUSVJFRF9CUkFOQ0hfUkVTWU5DUyA6IFJldGlyZWQgQnJhbmNoIFJlc3luY3MKK2V2ZW50OjB4MGM4IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlJFVElSRURfTkVBUl9SRVRVUk5TIDogUmV0aXJlZCBOZWFyIFJldHVybnMKK2V2ZW50OjB4MGM5IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlJFVElSRURfTkVBUl9SRVRVUk5TX01JU1BSRURJQ1RFRCA6IFJldGlyZWQgTmVhciBSZXR1cm5zIE1pc3ByZWRpY3RlZAorZXZlbnQ6MHgwY2EgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6UkVUSVJFRF9JTkRJUkVDVF9CUkFOQ0hFU19NSVNQUkVESUNURUQgOiBSZXRpcmVkIEluZGlyZWN0IEJyYW5jaGVzIE1pc3ByZWRpY3RlZAorZXZlbnQ6MHgwY2IgY291bnRlcnM6MCwxLDIsMyB1bTpmcHVfaW5zdHIgbWluaW11bTo1MDAgbmFtZTpSRVRJUkVEX01NWF9GUF9JTlNUUlVDVElPTlMgOiBSZXRpcmVkIE1NWCh0bSkvRlAgSW5zdHJ1Y3Rpb25zCitldmVudDoweDBjZCBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJTlRFUlJVUFRTX01BU0tFRF9DWUNMRVMgOiBJbnRlcnJ1cHRzLU1hc2tlZCBDeWNsZXMKK2V2ZW50OjB4MGNlIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOklOVEVSUlVQVFNfTUFTS0VEX0NZQ0xFU19XSVRIX0lOVEVSUlVQVF9QRU5ESU5HIDogSW50ZXJydXB0cy1NYXNrZWQgQ3ljbGVzIHdpdGggSW50ZXJydXB0IFBlbmRpbmcKK2V2ZW50OjB4MGNmIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOklOVEVSUlVQVFNfVEFLRU4gOiBJbnRlcnJ1cHRzIFRha2VuCitldmVudDoweDBkMCBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpERUNPREVSX0VNUFRZIDogRGVjb2RlciBFbXB0eQorZXZlbnQ6MHgwZDEgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RElTUEFUQ0hfU1RBTExTIDogRGlzcGF0Y2ggU3RhbGxzCitldmVudDoweDBkMiBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpESVNQQVRDSF9TVEFMTF9GT1JfQlJBTkNIX0FCT1JUIDogRGlzcGF0Y2ggU3RhbGwgZm9yIEJyYW5jaCBBYm9ydCB0byBSZXRpcmUKK2V2ZW50OjB4MGQzIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRJU1BBVENIX1NUQUxMX0ZPUl9TRVJJQUxJWkFUSU9OIDogRGlzcGF0Y2ggU3RhbGwgZm9yIFNlcmlhbGl6YXRpb24KK2V2ZW50OjB4MGQ0IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRJU1BBVENIX1NUQUxMX0ZPUl9TRUdNRU5UX0xPQUQgOiBEaXNwYXRjaCBTdGFsbCBmb3IgU2VnbWVudCBMb2FkCitldmVudDoweDBkNSBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpESVNQQVRDSF9TVEFMTF9GT1JfUkVPUkRFUl9CVUZGRVJfRlVMTCA6IERpc3BhdGNoIFN0YWxsIGZvciBSZW9yZGVyIEJ1ZmZlciBGdWxsCitldmVudDoweDBkNiBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpESVNQQVRDSF9TVEFMTF9GT1JfUkVTRVJWQVRJT05fU1RBVElPTl9GVUxMIDogRGlzcGF0Y2ggU3RhbGwgZm9yIFJlc2VydmF0aW9uIFN0YXRpb24gRnVsbAorZXZlbnQ6MHgwZDcgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RElTUEFUQ0hfU1RBTExfRk9SX0ZQVV9GVUxMIDogRGlzcGF0Y2ggU3RhbGwgZm9yIEZQVSBGdWxsCitldmVudDoweDBkOCBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpESVNQQVRDSF9TVEFMTF9GT1JfTFNfRlVMTCA6IERpc3BhdGNoIFN0YWxsIGZvciBMUyBGdWxsCitldmVudDoweDBkOSBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpESVNQQVRDSF9TVEFMTF9XQUlUSU5HX0ZPUl9BTExfUVVJRVQgOiBEaXNwYXRjaCBTdGFsbCBXYWl0aW5nIGZvciBBbGwgUXVpZXQKK2V2ZW50OjB4MGRhIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRJU1BBVENIX1NUQUxMX0ZPUl9GQVJfVFJBTlNGRVJfT1JfUkVTWU5DIDogRGlzcGF0Y2ggU3RhbGwgZm9yIEZhciBUcmFuc2ZlciBvciBSZXN5bmMgdG8gUmV0aXJlCitldmVudDoweDBkYiBjb3VudGVyczowLDEsMiwzIHVtOmZwdV9leGNlcHRpb25zIG1pbmltdW06NTAwIG5hbWU6RlBVX0VYQ0VQVElPTlMgOiBGUFUgRXhjZXB0aW9ucworZXZlbnQ6MHgwZGMgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RFIwX0JSRUFLUE9JTlRTIDogRFIwIEJyZWFrcG9pbnQgTWF0Y2hlcworZXZlbnQ6MHgwZGQgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RFIxX0JSRUFLUE9JTlRTIDogRFIxIEJyZWFrcG9pbnQgTWF0Y2hlcworZXZlbnQ6MHgwZGUgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RFIyX0JSRUFLUE9JTlRTIDogRFIyIEJyZWFrcG9pbnQgTWF0Y2hlcworZXZlbnQ6MHgwZGYgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RFIzX0JSRUFLUE9JTlRTIDogRFIzIEJyZWFrcG9pbnQgTWF0Y2hlcworZXZlbnQ6MHgxYzAgY291bnRlcnM6MCwxLDIsMyB1bTpyZXRpcmVkX3g4N19mcCBtaW5pbXVtOjUwMCBuYW1lOlJFVElSRURfWDg3X0ZMT0FUSU5HX1BPSU5UX09QRVJBVElPTlMgOiBSZXRpcmVkIHg4NyBGbG9hdGluZyBQb2ludCBPcGVyYXRpb25zCitldmVudDoweDFkMyBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpMRkVOQ0VfSU5TVFJVQ1RJT05TX1JFVElSRUQgOiBMRkVOQ0UgSW5zdHJ1Y3Rpb25zIFJldGlyZWQKK2V2ZW50OjB4MWQ0IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlNGRU5DRV9JTlNUUlVDVElPTlNfUkVUSVJFRCA6IFNGRU5DRSBJbnN0cnVjdGlvbnMgUmV0aXJlZAorZXZlbnQ6MHgxZDUgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6TUZFTkNFX0lOU1RSVUNUSU9OU19SRVRJUkVEIDogTUZFTkNFIEluc3RydWN0aW9ucyBSZXRpcmVkCitldmVudDoweDBlMCBjb3VudGVyczowLDEsMiwzIHVtOnBhZ2VfYWNjZXNzIG1pbmltdW06NTAwIG5hbWU6RFJBTV9BQ0NFU1NFUyA6IERSQU0gQWNjZXNzZXMKK2V2ZW50OjB4MGUxIGNvdW50ZXJzOjAsMSwyLDMgdW06bWVtX3BhZ2Vfb3ZlcmZsb3cgbWluaW11bTo1MDAgbmFtZTpEQ1QwX1BBR0VfVEFCTEVfRVZFTlRTIDogRFJBTSBDb250cm9sbGVyIDAgUGFnZSBUYWJsZSBFdmVudHMKK2V2ZW50OjB4MGUyIGNvdW50ZXJzOjAsMSwyLDMgdW06c2xvdF9taXNzZWQgbWluaW11bTo1MDAgbmFtZTpNRU1PUllfQ09OVFJPTExFUl9TTE9UX01JU1NFRCA6IE1lbW9yeSBDb250cm9sbGVyIERSQU0gQ29tbWFuZCBTbG90cyBNaXNzZWQKK2V2ZW50OjB4MGUzIGNvdW50ZXJzOjAsMSwyLDMgdW06dHVybmFyb3VuZCBtaW5pbXVtOjUwMCBuYW1lOk1FTU9SWV9DT05UUk9MTEVSX1RVUk5BUk9VTkRTIDogTWVtb3J5IENvbnRyb2xsZXIgVHVybmFyb3VuZHMKK2V2ZW50OjB4MGU0IGNvdW50ZXJzOjAsMSwyLDMgdW06cmJkIG1pbmltdW06NTAwIG5hbWU6TUVNT1JZX0NPTlRST0xMRVJfUkJEX1FVRVVFX0VWRU5UUyA6IE1lbW9yeSBDb250cm9sbGVyIFJCRCBRdWV1ZSBFdmVudHMKK2V2ZW50OjB4MGU1IGNvdW50ZXJzOjAsMSwyLDMgdW06ZGN0MV9wYWdlX3RhYmxlX2V2ZW50cyBtaW5pbXVtOjUwMCBuYW1lOkRDVDFfUEFHRV9UQUJMRV9FVkVOVFMgOiBEUkFNIENvbnRyb2xsZXIgMSBQYWdlIFRhYmxlIEV2ZW50cworZXZlbnQ6MHgwZTggY291bnRlcnM6MCwxLDIsMyB1bTp0aGVybWFsX3N0YXR1cyBtaW5pbXVtOjUwMCBuYW1lOlRIRVJNQUxfU1RBVFVTIDogVGhlcm1hbCBTdGF0dXMKK2V2ZW50OjB4MGU5IGNvdW50ZXJzOjAsMSwyLDMgdW06Y3Bpb3JlcXVlc3RzIG1pbmltdW06NTAwIG5hbWU6Q1BVX0lPX1JFUVVFU1RTX1RPX01FTU9SWV9JTyA6IENQVS9JTyBSZXF1ZXN0cyB0byBNZW1vcnkvSU8KK2V2ZW50OjB4MGVhIGNvdW50ZXJzOjAsMSwyLDMgdW06Y2FjaGVibG9jayBtaW5pbXVtOjUwMCBuYW1lOkNBQ0hFX0JMT0NLX0NPTU1BTkRTIDogQ2FjaGUgQmxvY2sgQ29tbWFuZHMKK2V2ZW50OjB4MGViIGNvdW50ZXJzOjAsMSwyLDMgdW06c2l6ZWNtZHMgbWluaW11bTo1MDAgbmFtZTpTSVpFRF9DT01NQU5EUyA6IFNpemVkIENvbW1hbmRzCitldmVudDoweDBlYyBjb3VudGVyczowLDEsMiwzIHVtOnByb2JlIG1pbmltdW06NTAwIG5hbWU6UFJPQkVfUkVTUE9OU0VTX0FORF9VUFNUUkVBTV9SRVFVRVNUUyA6IFByb2JlIFJlc3BvbnNlcyBhbmQgVXBzdHJlYW0gUmVxdWVzdHMKK2V2ZW50OjB4MGVlIGNvdW50ZXJzOjAsMSwyLDMgdW06Z2FydCBtaW5pbXVtOjUwMCBuYW1lOkRFVl9FVkVOVFMgOiBERVYgRXZlbnRzCitldmVudDoweDFmMCBjb3VudGVyczowLDEsMiwzIHVtOm1lbV9jb250cm9sX3JlcXVlc3QgbWluaW11bTo1MDAgbmFtZTpNRU1PUllfQ09OVFJPTExFUl9SRVFVRVNUUyA6IE1lbW9yeSBDb250cm9sbGVyIFJlcXVlc3RzCitldmVudDoweDFlOSBjb3VudGVyczowLDEsMiwzIHVtOnNpZGViYW5kX3NpZ25hbHMgbWluaW11bTo1MDAgbmFtZTpTSURFQkFORF9TSUdOQUxTIDogU2lkZWJhbmQgU2lnbmFscyBhbmQgU3BlY2lhbCBDeWNsZXMKK2V2ZW50OjB4MWVhIGNvdW50ZXJzOjAsMSwyLDMgdW06aW50ZXJydXB0X2V2ZW50cyBtaW5pbXVtOjUwMCBuYW1lOklOVEVSUlVQVF9FVkVOVFMgOiBJbnRlcnJ1cHQgRXZlbnRzCitldmVudDoweGYwMDAgZXh0Omlic19mZXRjaCB1bTp6ZXJvIG1pbmltdW06NTAwMDAgbmFtZTpJQlNfRkVUQ0hfQUxMIDogQWxsIElCUyBmZXRjaCBzYW1wbGVzCitldmVudDoweGYwMDEgZXh0Omlic19mZXRjaCB1bTp6ZXJvIG1pbmltdW06NTAwMDAgbmFtZTpJQlNfRkVUQ0hfS0lMTEVEIDogSUJTIGZldGNoIGtpbGxlZAorZXZlbnQ6MHhmMDAyIGV4dDppYnNfZmV0Y2ggdW06emVybyBtaW5pbXVtOjUwMDAwIG5hbWU6SUJTX0ZFVENIX0FUVEVNUFRFRCA6IElCUyBmZXRjaCBhdHRlbXB0ZWQKK2V2ZW50OjB4ZjAwMyBleHQ6aWJzX2ZldGNoIHVtOnplcm8gbWluaW11bTo1MDAwMCBuYW1lOklCU19GRVRDSF9DT01QTEVURUQgOiBJQlMgZmV0Y2ggY29tcGxldGVkCitldmVudDoweGYwMDQgZXh0Omlic19mZXRjaCB1bTp6ZXJvIG1pbmltdW06NTAwMDAgbmFtZTpJQlNfRkVUQ0hfQUJPUlRFRCA6IElCUyBmZXRjaCBhYm9ydGVkCitldmVudDoweGYwMDUgZXh0Omlic19mZXRjaCB1bTp6ZXJvIG1pbmltdW06NTAwMDAgbmFtZTpJQlNfRkVUQ0hfSVRMQl9ISVRTIDogSUJTIElUTEIgaGl0CitldmVudDoweGYwMDYgZXh0Omlic19mZXRjaCB1bTp6ZXJvIG1pbmltdW06NTAwMDAgbmFtZTpJQlNfRkVUQ0hfTDFfSVRMQl9NSVNTRVNfTDJfSVRMQl9ISVRTIDogSUJTIEwxIElUTEIgbWlzc2VzIChhbmQgTDIgSVRMQiBoaXRzKQorZXZlbnQ6MHhmMDA3IGV4dDppYnNfZmV0Y2ggdW06emVybyBtaW5pbXVtOjUwMDAwIG5hbWU6SUJTX0ZFVENIX0wxX0lUTEJfTUlTU0VTX0wyX0lUTEJfTUlTU0VTIDogSUJTIEwxIEwyIElUTEIgbWlzcworZXZlbnQ6MHhmMDA4IGV4dDppYnNfZmV0Y2ggdW06emVybyBtaW5pbXVtOjUwMDAwIG5hbWU6SUJTX0ZFVENIX0lDQUNIRV9NSVNTRVMgOiBJQlMgaW5zdHJ1Y3Rpb24gY2FjaGUgbWlzc2VzCitldmVudDoweGYwMDkgZXh0Omlic19mZXRjaCB1bTp6ZXJvIG1pbmltdW06NTAwMDAgbmFtZTpJQlNfRkVUQ0hfSUNBQ0hFX0hJVFMgOiBJQlMgaW5zdHJ1Y3Rpb24gY2FjaGUgaGl0CitldmVudDoweGYwMGEgZXh0Omlic19mZXRjaCB1bTp6ZXJvIG1pbmltdW06NTAwMDAgbmFtZTpJQlNfRkVUQ0hfNEtfUEFHRSA6IElCUyA0SyBwYWdlIHRyYW5zbGF0aW9uCitldmVudDoweGYwMGIgZXh0Omlic19mZXRjaCB1bTp6ZXJvIG1pbmltdW06NTAwMDAgbmFtZTpJQlNfRkVUQ0hfMk1fUEFHRSA6IElCUyAyTSBwYWdlIHRyYW5zbGF0aW9uCitldmVudDoweGYwMGUgZXh0Omlic19mZXRjaCB1bTp6ZXJvIG1pbmltdW06NTAwMDAgbmFtZTpJQlNfRkVUQ0hfTEFURU5DWSA6IElCUyBmZXRjaCBsYXRlbmN5CitldmVudDoweGYxMDAgZXh0Omlic19vcCB1bTppYnNfb3AgbWluaW11bTo1MDAwMCBuYW1lOklCU19PUF9BTEwgOiBBbGwgSUJTIG9wIHNhbXBsZXMKK2V2ZW50OjB4ZjEwMSBleHQ6aWJzX29wIHVtOmlic19vcCBtaW5pbXVtOjUwMDAwIG5hbWU6SUJTX09QX1RBR19UT19SRVRJUkUgOiBJQlMgdGFnLXRvLXJldGlyZSBjeWNsZXMKK2V2ZW50OjB4ZjEwMiBleHQ6aWJzX29wIHVtOmlic19vcCBtaW5pbXVtOjUwMDAwIG5hbWU6SUJTX09QX0NPTVBfVE9fUkVUIDogSUJTIGNvbXBsZXRpb24tdG8tcmV0aXJlIGN5Y2xlcworZXZlbnQ6MHhmMTAzIGV4dDppYnNfb3AgdW06aWJzX29wIG1pbmltdW06NTAwMDAgbmFtZTpJQlNfT1BfQlJBTkNIX1JFVElSRUQgOiBJQlMgYnJhbmNoIG9wCitldmVudDoweGYxMDQgZXh0Omlic19vcCB1bTppYnNfb3AgbWluaW11bTo1MDAwMCBuYW1lOklCU19PUF9NSVNQUkVESUNURURfQlJBTkNIIDogSUJTIG1pc3ByZWRpY3RlZCBicmFuY2ggb3AKK2V2ZW50OjB4ZjEwNSBleHQ6aWJzX29wIHVtOmlic19vcCBtaW5pbXVtOjUwMDAwIG5hbWU6SUJTX09QX1RBS0VOX0JSQU5DSCA6IElCUyB0YWtlbiBicmFuY2ggb3AKK2V2ZW50OjB4ZjEwNiBleHQ6aWJzX29wIHVtOmlic19vcCBtaW5pbXVtOjUwMDAwIG5hbWU6SUJTX09QX01JU1BSRURJQ1RFRF9CUkFOQ0hfVEFLRU4gOiBJQlMgbWlzcHJlZGljdGVkIHRha2VuIGJyYW5jaCBvcAorZXZlbnQ6MHhmMTA3IGV4dDppYnNfb3AgdW06aWJzX29wIG1pbmltdW06NTAwMDAgbmFtZTpJQlNfT1BfUkVUVVJOUyA6IElCUyByZXR1cm4gb3AKK2V2ZW50OjB4ZjEwOCBleHQ6aWJzX29wIHVtOmlic19vcCBtaW5pbXVtOjUwMDAwIG5hbWU6SUJTX09QX01JU1BSRURJQ1RFRF9SRVRVUk5TIDogSUJTIG1pc3ByZWRpY3RlZCByZXR1cm4gb3AKK2V2ZW50OjB4ZjEwOSBleHQ6aWJzX29wIHVtOmlic19vcCBtaW5pbXVtOjUwMDAwIG5hbWU6SUJTX09QX1JFU1lOQyA6IElCUyByZXN5bmMgb3AKK2V2ZW50OjB4ZjIwMCBleHQ6aWJzX29wIHVtOmlic19vcCBtaW5pbXVtOjUwMDAwIG5hbWU6SUJTX09QX0FMTF9MT0FEX1NUT1JFIDogSUJTIGFsbCBsb2FkIHN0b3JlIG9wcworZXZlbnQ6MHhmMjAxIGV4dDppYnNfb3AgdW06aWJzX29wIG1pbmltdW06NTAwMDAgbmFtZTpJQlNfT1BfTE9BRCA6IElCUyBsb2FkIG9wcworZXZlbnQ6MHhmMjAyIGV4dDppYnNfb3AgdW06aWJzX29wIG1pbmltdW06NTAwMDAgbmFtZTpJQlNfT1BfU1RPUkUgOiBJQlMgc3RvcmUgb3BzCitldmVudDoweGYyMDMgZXh0Omlic19vcCB1bTppYnNfb3AgbWluaW11bTo1MDAwMCBuYW1lOklCU19PUF9MMV9EVExCX0hJVFMgOiBJQlMgTDEgRFRMQiBoaXQKK2V2ZW50OjB4ZjIwNCBleHQ6aWJzX29wIHVtOmlic19vcCBtaW5pbXVtOjUwMDAwIG5hbWU6SUJTX09QX0wxX0RUTEJfTUlTU19MMl9EVExCX0hJVCA6IElCUyBMMSBEVExCIG1pc3NlcyBMMiBoaXRzCitldmVudDoweGYyMDUgZXh0Omlic19vcCB1bTppYnNfb3AgbWluaW11bTo1MDAwMCBuYW1lOklCU19PUF9MMV9MMl9EVExCX01JU1MgOiBJQlMgTDEgYW5kIEwyIERUTEIgbWlzc2VzCitldmVudDoweGYyMDYgZXh0Omlic19vcCB1bTppYnNfb3AgbWluaW11bTo1MDAwMCBuYW1lOklCU19PUF9EQVRBX0NBQ0hFX01JU1MgOiBJQlMgZGF0YSBjYWNoZSBtaXNzZXMKK2V2ZW50OjB4ZjIwNyBleHQ6aWJzX29wIHVtOmlic19vcCBtaW5pbXVtOjUwMDAwIG5hbWU6SUJTX09QX0RBVEFfSElUUyA6IElCUyBkYXRhIGNhY2hlIGhpdHMKK2V2ZW50OjB4ZjIwOCBleHQ6aWJzX29wIHVtOmlic19vcCBtaW5pbXVtOjUwMDAwIG5hbWU6SUJTX09QX01JU0FMSUdORURfREFUQV9BQ0MgOiBJQlMgbWlzYWxpZ25lZCBkYXRhIGFjY2VzcworZXZlbnQ6MHhmMjA5IGV4dDppYnNfb3AgdW06aWJzX29wIG1pbmltdW06NTAwMDAgbmFtZTpJQlNfT1BfQkFOS19DT05GX0xPQUQgOiBJQlMgYmFuayBjb25mbGljdCBvbiBsb2FkIG9wCitldmVudDoweGYyMGEgZXh0Omlic19vcCB1bTppYnNfb3AgbWluaW11bTo1MDAwMCBuYW1lOklCU19PUF9CQU5LX0NPTkZfU1RPUkUgOiBJQlMgYmFuayBjb25mbGljdCBvbiBzdG9yZSBvcAorZXZlbnQ6MHhmMjBiIGV4dDppYnNfb3AgdW06aWJzX29wIG1pbmltdW06NTAwMDAgbmFtZTpJQlNfT1BfRk9SV0FSRCA6IElCUyBzdG9yZS10by1sb2FkIGZvcndhcmRlZAorZXZlbnQ6MHhmMjBjIGV4dDppYnNfb3AgdW06aWJzX29wIG1pbmltdW06NTAwMDAgbmFtZTpJQlNfT1BfQ0FOQ0VMTEVEIDogSUJTIHN0b3JlLXRvLWxvYWQgY2FuY2VsbGVkCitldmVudDoweGYyMGQgZXh0Omlic19vcCB1bTppYnNfb3AgbWluaW11bTo1MDAwMCBuYW1lOklCU19PUF9EQ1VDX01FTV9BQ0MgOiBJQlMgVUMgbWVtb3J5IGFjY2VzcworZXZlbnQ6MHhmMjBlIGV4dDppYnNfb3AgdW06aWJzX29wIG1pbmltdW06NTAwMDAgbmFtZTpJQlNfT1BfRENXQ19NRU1fQUNDIDogSUJTIFdDIG1lbW9yeSBhY2Nlc3MKK2V2ZW50OjB4ZjIwZiBleHQ6aWJzX29wIHVtOmlic19vcCBtaW5pbXVtOjUwMDAwIG5hbWU6SUJTX09QX0xPQ0tFRCA6IElCUyBsb2NrZWQgb3BlcmF0aW9uCitldmVudDoweGYyMTAgZXh0Omlic19vcCB1bTppYnNfb3AgbWluaW11bTo1MDAwMCBuYW1lOklCU19PUF9NQUJfSElUIDogSUJTIE1BQiBoaXQKK2V2ZW50OjB4ZjIxMSBleHQ6aWJzX29wIHVtOmlic19vcCBtaW5pbXVtOjUwMDAwIG5hbWU6SUJTX09QX0wxX0RUTEJfNEsgOiBJQlMgTDEgRFRMQiA0SyBwYWdlCitldmVudDoweGYyMTIgZXh0Omlic19vcCB1bTppYnNfb3AgbWluaW11bTo1MDAwMCBuYW1lOklCU19PUF9MMV9EVExCXzJNIDogSUJTIEwxIERUTEIgMk0gcGFnZQorZXZlbnQ6MHhmMjEzIGV4dDppYnNfb3AgdW06aWJzX29wIG1pbmltdW06NTAwMDAgbmFtZTpJQlNfT1BfTDFfRFRMQl8xRyA6IElCUyBMMSBEVExCIDFHIHBhZ2UKK2V2ZW50OjB4ZjIxNSBleHQ6aWJzX29wIHVtOmlic19vcCBtaW5pbXVtOjUwMDAwIG5hbWU6SUJTX09QX0wyX0RUTEJfNEsgOiBJQlMgTDIgRFRMQiA0SyBwYWdlCitldmVudDoweGYyMTYgZXh0Omlic19vcCB1bTppYnNfb3AgbWluaW11bTo1MDAwMCBuYW1lOklCU19PUF9MMl9EVExCXzJNIDogSUJTIEwyIERUTEIgMk0gcGFnZQorZXZlbnQ6MHhmMjE3IGV4dDppYnNfb3AgdW06aWJzX29wIG1pbmltdW06NTAwMDAgbmFtZTpJQlNfT1BfTDJfRFRMQl8xRyA6IElCUyBMMiBEVExCIDFHIHBhZ2UKK2V2ZW50OjB4ZjIxOSBleHQ6aWJzX29wIHVtOmlic19vcCBtaW5pbXVtOjUwMDAwIG5hbWU6SUJTX09QX0RDX0xPQURfTEFUIDogSUJTIGRhdGEgY2FjaGUgbWlzcyBsb2FkIGxhdGVuY3kKK2V2ZW50OjB4ZjI0MCBleHQ6aWJzX29wIHVtOmlic19vcCBtaW5pbXVtOjUwMDAwIG5hbWU6SUJTX09QX05CX0xPQ0FMX09OTFkgOiBJQlMgTm9ydGhicmlkZ2UgbG9jYWwKK2V2ZW50OjB4ZjI0MSBleHQ6aWJzX29wIHVtOmlic19vcCBtaW5pbXVtOjUwMDAwIG5hbWU6SUJTX09QX05CX1JFTU9URV9PTkxZIDogSUJTIE5vcnRoYnJpZGdlIHJlbW90ZQorZXZlbnQ6MHhmMjQyIGV4dDppYnNfb3AgdW06aWJzX29wIG1pbmltdW06NTAwMDAgbmFtZTpJQlNfT1BfTkJfTE9DQUxfTDMgOiBJQlMgTm9ydGhicmlkZ2UgbG9jYWwgTDMKK2V2ZW50OjB4ZjI0MyBleHQ6aWJzX29wIHVtOmlic19vcCBtaW5pbXVtOjUwMDAwIG5hbWU6SUJTX09QX05CX0xPQ0FMX0NBQ0hFIDogSUJTIE5vcnRoYnJpZGdlIGxvY2FsIGNvcmUgTDEgb3IgTDIgY2FjaGUKK2V2ZW50OjB4ZjI0NCBleHQ6aWJzX29wIHVtOmlic19vcCBtaW5pbXVtOjUwMDAwIG5hbWU6SUJTX09QX05CX1JFTU9URV9DQUNIRSA6IElCUyBOb3J0aGJyaWRnZSBsb2NhbCBjb3JlIEwxLCBMMiwgTDMgY2FjaGUKK2V2ZW50OjB4ZjI0NSBleHQ6aWJzX29wIHVtOmlic19vcCBtaW5pbXVtOjUwMDAwIG5hbWU6SUJTX09QX05CX0xPQ0FMX0RSQU0gOiBJQlMgTm9ydGhicmlkZ2UgbG9jYWwgRFJBTQorZXZlbnQ6MHhmMjQ2IGV4dDppYnNfb3AgdW06aWJzX29wIG1pbmltdW06NTAwMDAgbmFtZTpJQlNfT1BfTkJfUkVNT1RFX0RSQU0gOiBJQlMgTm9ydGhicmlkZ2UgcmVtb3RlIERSQU0KK2V2ZW50OjB4ZjI0NyBleHQ6aWJzX29wIHVtOmlic19vcCBtaW5pbXVtOjUwMDAwIG5hbWU6SUJTX09QX05CX0xPQ0FMX09USEVSIDogSUJTIE5vcnRoYnJpZGdlIGxvY2FsIEFQSUMgTU1JTyBDb25maWcgUENJCitldmVudDoweGYyNDggZXh0Omlic19vcCB1bTppYnNfb3AgbWluaW11bTo1MDAwMCBuYW1lOklCU19PUF9OQl9SRU1PVEVfT1RIRVIgOiBJQlMgTm9ydGhicmlkZ2UgcmVtb3RlIEFQSUMgTU1JTyBDb25maWcgUENJCitldmVudDoweGYyNDkgZXh0Omlic19vcCB1bTppYnNfb3AgbWluaW11bTo1MDAwMCBuYW1lOklCU19PUF9OQl9DQUNIRV9NT0RJRklFRCA6IElCUyBOb3J0aGJyaWRnZSBjYWNoZSBtb2RpZmllZCBzdGF0ZQorZXZlbnQ6MHhmMjRhIGV4dDppYnNfb3AgdW06aWJzX29wIG1pbmltdW06NTAwMDAgbmFtZTpJQlNfT1BfTkJfQ0FDSEVfT1dORUQgOiBJQlMgTm9ydGhicmlkZ2UgY2FjaGUgb3duZWQgc3RhdGUKK2V2ZW50OjB4ZjI0YiBleHQ6aWJzX29wIHVtOmlic19vcCBtaW5pbXVtOjUwMDAwIG5hbWU6SUJTX09QX05CX0xPQ0FMX0NBQ0hFX0xBVCA6IElCUyBOb3J0aGJyaWRnZSBsb2NhbCBjYWNoZSBsYXRlbmN5CitldmVudDoweGYyNGMgZXh0Omlic19vcCB1bTppYnNfb3AgbWluaW11bTo1MDAwMCBuYW1lOklCU19PUF9OQl9SRU1PVEVfQ0FDSEVfTEFUIDogSUJTIE5vcnRoYnJpZGdlIHJlbW90ZSBjYWNoZSBsYXRlbmN5CmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9ldmVudHMveDg2LTY0L2ZhbWlseTEyaC91bml0X21hc2tzIGIvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL3g4Ni02NC9mYW1pbHkxMmgvdW5pdF9tYXNrcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Zjk3YzNiCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL3g4Ni02NC9mYW1pbHkxMmgvdW5pdF9tYXNrcwpAQCAtMCwwICsxLDI3MyBAQAorIyBBTUQgRmFtaWx5IDEyIHByb2Nlc3NvciBwZXJmb3JtYW5jZSBldmVudHMKKyMKKyMgQ29weXJpZ2h0IE9Qcm9maWxlIGF1dGhvcnMKKyMgQ29weXJpZ2h0IChjKSAyMDA2LTIwMTEgQWR2YW5jZWQgTWljcm8gRGV2aWNlcworIyBDb250cmlidXRlZCBieSBSYXkgQnJ5YW50IDxyYXlicnkgYXQgYW1kLmNvbT4sCisjCQlKYXNvbiBZZWggPGphc29uLnllaCBhdCBhbWQuY29tPgorIwkJU3VyYXZlZSBTdXRoaWt1bHBhbml0IDxzdXJhdmVlLnN1dGhpa3VscGFuaXQgYXQgYW1kLmNvbT4KKyMJCVBhdWwgRHJvbmdvd3NraSA8cGF1bC5kcm9uZ293c2tpIGF0IGFtZC5jb20+CisjCisjIFNvdXJjZXM6IEJJT1MgYW5kIEtlcm5lbCBEZXZlbG9wZXIncyBHdWlkZSBmb3IgQU1EIEZhbWlseSAxMmggUHJvY2Vzc29ycywKKyMgICAgICAgICAgUHVibGljYXRpb24jIDQxMTMxLCBSZXZpc2lvbiAxLjEzLCBNYXJjaCAwMSwgMjAxMQorIworIyAgICAgICAgICBTb2Z0d2FyZSBPcHRpbWl6YXRpb24gR3VpZGUgZm9yIEFNRCBGYW1pbHkgMTBoIGFuZCBGYW1pbHkgMTJoIFByb2Nlc3NvcnMsCisjICAgICAgICAgIFB1YmxpY2F0aW9uIyA0MDU0NiwgUmV2aXNpb24gMy4xMywgRmVicnVhcnkgMjAxMQorIyAgICAgICAgICAoTm90ZTogRm9yIElCUyBEZXJpdmVkIFBlcmZvcm1hbmNlIEV2ZW50cykKKyMKKyMgUmV2aXNpb246IDEuMgorIworIyBDaGFuZ2VMb2c6IAorIwkxLjI6IDA5IE1hcmNoIDIwMTEKKyMgCS0gVXBkYXRlIHdpdGggQktERyBSZXYuMS4xMyAocHJlbGltaW5hcnkpCisjCisjCTEuMTogMjUgSmFudWFyeSAyMDEwLgorIyAJLSBVcGRhdGUgbWluaW11bSB2YWx1ZSBmb3IgUkVUSVJFRF9VT1BTCisjIAktIFVwZGF0ZSB0byBCS0RHIFJldmlzaW9uIDEuMTIKKyMKKyMJMS4wOiAwOCBEZWNlbWJlciAyMDA5LgorIyAJLSBQcmVsaW1pbmFyeSB2ZXJzaW9uCituYW1lOnplcm8gdHlwZTptYW5kYXRvcnkgZGVmYXVsdDoweDAwCisJMHgwMCBObyB1bml0IG1hc2sKK25hbWU6bW9lc2kgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgxZgorCTB4MDEgKEkpbnZhbGlkIGNhY2hlIHN0YXRlCisJMHgwMiAoUyloYXJlZCBjYWNoZSBzdGF0ZQorCTB4MDQgKEUpeGNsdXNpdmUgY2FjaGUgc3RhdGUKKwkweDA4IChPKXduZWQgY2FjaGUgc3RhdGUKKwkweDEwIChNKW9kaWZpZWQgY2FjaGUgc3RhdGUKKwkweDFmIEFsbCBjYWNoZSBzdGF0ZXMKK25hbWU6bW9lc3MgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgxZQorCTB4MDEgUmVmaWxsIGZyb20gbm9ydGhicmlkZ2UKKwkweDAyIFNoYXJlZC1zdGF0ZSBsaW5lIGZyb20gTDIKKwkweDA0IEV4Y2x1c2l2ZS1zdGF0ZSBsaW5lIGZyb20gTDIKKwkweDA4IE93bmVyLXN0YXRlIGxpbmUgZnJvbSBMMgorCTB4MTAgTW9kaWZpZWQtc3RhdGUgbGluZSBmcm9tIEwyCisJMHgxZSBBbGwgY2FjaGUgc3RhdGVzIGV4Y2VwdCByZWZpbGwgZnJvbSBub3J0aGJyaWRnZQorbmFtZTpmcHVfb3BzIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4M2YKKwkweDAxIEFkZCBwaXBlIG9wcyBleGNsdWRpbmcgbG9hZCBvcHMgYW5kIFNTRSBtb3ZlIG9wcworCTB4MDIgTXVsdGlwbHkgcGlwZSBvcHMgZXhjbHVkaW5nIGxvYWQgb3BzIGFuZCBTU0UgbW92ZSBvcHMKKwkweDA0IFN0b3JlIHBpcGUgb3BzIGV4Y2x1ZGluZyBsb2FkIG9wcyBhbmQgU1NFIG1vdmUgb3BzIAorCTB4MDggQWRkIHBpcGUgbG9hZCBvcHMgYW5kIFNTRSBtb3ZlIG9wcworCTB4MTAgTXVsdGlwbHkgcGlwZSBsb2FkIG9wcyBhbmQgU1NFIG1vdmUgb3BzCisJMHgyMCBTdG9yZSBwaXBlIGxvYWQgb3BzIGFuZCBTU0UgbW92ZSBvcHMKKwkweDNmIEFsbCBvcHMKK25hbWU6c2VncmVnbG9hZCB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDdmCisJMHgwMSBFUyByZWdpc3RlcgorCTB4MDIgQ1MgcmVnaXN0ZXIKKwkweDA0IFNTIHJlZ2lzdGVyCisJMHgwOCBEUyByZWdpc3RlcgorCTB4MTAgRlMgcmVnaXN0ZXIKKwkweDIwIEdTIHJlZ2lzdGVyCisJMHg0MCBIUyByZWdpc3RlcgorbmFtZTpmcHVfaW5zdHIgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwNworCTB4MDEgeDg3IGluc3RydWN0aW9ucworCTB4MDIgTU1YICYgM0ROb3cgaW5zdHJ1Y3Rpb25zCisJMHgwNCBTU0UgaW5zdHJ1Y3Rpb25zIChTU0UsIFNTRTIsIFNTRTMsIGFuZCBTU0U0QSkKK25hbWU6ZnB1X2V4Y2VwdGlvbnMgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwZgorCTB4MDEgeDg3IHJlY2xhc3MgbWljcm9mYXVsdHMKKwkweDAyIFNTRSByZXR5cGUgbWljcm9mYXVsdHMKKwkweDA0IFNTRSByZWNsYXNzIG1pY3JvZmF1bHRzCisJMHgwOCBTU0UgYW5kIHg4NyBtaWNyb3RyYXBzCituYW1lOnBhZ2VfYWNjZXNzIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4ZmYKKwkweDAxIERDVDAgUGFnZSBoaXQKKwkweDAyIERDVDAgUGFnZSBtaXNzCisJMHgwNCBEQ1QwIFBhZ2UgY29uZmxpY3QKKwkweDA4IERDVDEgUGFnZSBoaXQKKwkweDEwIERDVDEgUGFnZSBtaXNzCisJMHgyMCBEQ1QxIFBhZ2UgQ29uZmxpY3QKKwkweDQwIFdyaXRlIHJlcXVlc3QKKwkweDgwIFJlYWQgcmVxdWVzdAorbmFtZTptZW1fcGFnZV9vdmVyZmxvdyB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDAzCisJMHgwMSBEQ1QwIFBhZ2UgVGFibGUgT3ZlcmZsb3cKKwkweDAyIERDVDAgTnVtYmVyIG9mIHN0YWxlIHRhYmxlIGVudHJ5IGhpdHMKKwkweDA0IERDVDAgUGFnZSB0YWJsZSBpZGxlIGN5Y2xlIGxpbWl0IGluY3JlbWVudGVkCisJMHgwOCBEQ1QwIFBhZ2UgdGFibGUgaWRsZSBjeWNsZSBsaW1pdCBkZWNyZW1lbnRlZAorCTB4MTAgRENUMCBQYWdlIHRhYmxlIGlzIGNsb3NlZCBkdWUgdG8gcm93IGluYWN0aXZpdHkKK25hbWU6dHVybmFyb3VuZCB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDFiCisJMHgwMSBEQ1QwIHJlYWQtdG8td3JpdGUgdHVybmFyb3VuZAorCTB4MDIgRENUMCB3cml0ZS10by1yZWFkIHR1cm5hcm91bmQKKwkweDA4IERDVDEgcmVhZC10by13cml0ZSB0dXJuYXJvdW5kCisJMHgxMCBEQ1QxIHdyaXRlLXRvLXJlYWQgdHVybmFyb3VuZAorbmFtZTpyYmQgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwYworCTB4MDQgRDE4RjJ4WzEsMF05NFtEY3FCeXBhc3NNYXhdIGNvdW50ZXIgcmVhY2hlZAorCTB4MDggQmFuayBpcyBjbG9zZWQgZHVlIHRvIGJhbmsgY29uZmxpY3Qgd2l0aCBhbiBvdXRzdGFuZGluZyByZXF1ZXN0IGluIHRoZSBSQkQgcXVldWUKK25hbWU6c2xvdF9taXNzZWQgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHhmMAorCTB4MTAgRENUMCBSQkQKKwkweDIwIERDVDEgUkJECisJMHg0MCBEQ1QwIFByZWZldGNoCisJMHg4MCBEQ1QxIFByZWZldGNoCituYW1lOnNpemVjbWRzIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4M2YKKwkweDAxIE5vbi1wb3N0ZWQgd3JpdGUgYnl0ZSAoMS0zMiBieXRlcykKKwkweDAyIE5vbi1wb3N0ZWQgd3JpdGUgRFdPUkQgKDEtMTYgRFdPUkRzKQorCTB4MDQgUG9zdGVkIHdyaXRlIGJ5dGUgKDEtMzIgYnl0ZXMpCisJMHgwOCBQb3N0ZWQgd3JpdGUgRFdPUkQgKDEtMTYgRFdPUkRzKQorCTB4MTAgUmVhZCBieXRlICg0IGJ5dGVzKQorCTB4MjAgUmVhZCBEV09SRCAoMS0xNiBEV09SRHMpCituYW1lOnByb2JlIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4YmYKKwkweDAxIFByb2JlIG1pc3MKKwkweDAyIFByb2JlIGhpdCBjbGVhbgorCTB4MDQgUHJvYmUgaGl0IGRpcnR5IHdpdGhvdXQgbWVtb3J5IGNhbmNlbAorCTB4MDggUHJvYmUgaGl0IGRpcnR5IHdpdGggbWVtb3J5IGNhbmNlbAorCTB4MTAgVXBzdHJlYW0gaGlnaCBwcmlvcml0eSByZWFkcworCTB4MjAgVXBzdHJlYW0gbG93IHByaW9yaXR5IHJlYWRzCisJMHg4MCBVcHN0cmVhbSBsb3cgcHJpb3JpdHkgd3JpdGVzCituYW1lOmwyX2ludGVybmFsIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4M2YKKwkweDAxIElDIGZpbGwKKwkweDAyIERDIGZpbGwKKwkweDA0IFRMQiBmaWxsIChwYWdlIHRhYmxlIHdhbGtzKQorCTB4MDggVGFnIHNub29wIHJlcXVlc3QKKwkweDEwIENhbmNlbGVkIHJlcXVlc3QKKwkweDIwIEhhcmR3YXJlIHByZWZldGNoIGZyb20gZGF0YSBjYWNoZQorbmFtZTpsMl9yZXFfbWlzcyB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDBmCisJMHgwMSBJQyBmaWxsCisJMHgwMiBEQyBmaWxsIChpbmNsdWRlcyBwb3NzaWJsZSByZXBsYXlzKQorCTB4MDQgVExCIHBhZ2UgdGFibGUgd2FsaworCTB4MDggSGFyZHdhcmUgcHJlZmV0Y2ggZnJvbSBkYXRhIGNhY2hlCituYW1lOmwyX2ZpbGwgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwMworCTB4MDEgTDIgZmlsbHMgKHZpY3RpbXMgZnJvbSBMMSBjYWNoZXMsIFRMQiBwYWdlIHRhYmxlIHdhbGtzIGFuZCBkYXRhIHByZWZldGNoZXMpCisJMHgwMiBMMiB3cml0ZWJhY2tzIHRvIHN5c3RlbQorbmFtZTpnYXJ0IHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4NzAKKwkweDEwIERFViBoaXQKKwkweDIwIERFViBtaXNzCisJMHg0MCBERVYgZXJyb3IKK25hbWU6Y3Bpb3JlcXVlc3RzIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MDgKKwkweDAxIElPIHRvIElPCisJMHgwMiBJTyB0byBNZW0KKwkweDA0IENQVSB0byBJTworCTB4MDggQ1BVIHRvIE1lbQorbmFtZTpjYWNoZWJsb2NrIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4M2QKKwkweDAxIFZpY3RpbSBCbG9jayAoV3JpdGViYWNrKQorCTB4MDQgUmVhZCBCbG9jayAoRGNhY2hlIGxvYWQgbWlzcyByZWZpbGwpCisJMHgwOCBSZWFkIEJsb2NrIFNoYXJlZCAoSWNhY2hlIHJlZmlsbCkKKwkweDEwIFJlYWQgQmxvY2sgTW9kaWZpZWQgKERjYWNoZSBzdG9yZSBtaXNzIHJlZmlsbCkKKwkweDIwIENoYW5nZS10by1EaXJ0eSAoZmlyc3Qgc3RvcmUgdG8gY2xlYW4gYmxvY2sgYWxyZWFkeSBpbiBjYWNoZSkKK25hbWU6ZGF0YXByZWZldGNoIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MDMKKwkweDAxIENhbmNlbGxlZCBwcmVmZXRjaGVzCisJMHgwMiBQcmVmZXRjaCBhdHRlbXB0cworbmFtZTptZW1yZXF0eXBlIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4ODcKKwkweDAxIFJlcXVlc3RzIHRvIG5vbi1jYWNoZWFibGUgKFVDKSBtZW1vcnkKKwkweDAyIFJlcXVlc3RzIHRvIHdyaXRlLWNvbWJpbmluZyAoV0MpIG1lbW9yeSBvciBXQyBidWZmZXIgZmx1c2hlcyB0byBXQiBtZW1vcnkKKwkweDA0IFJlcXVlc3RzIHRvIGNhY2hlLWRpc2FibGVkIChDRCkgbWVtb3J5CisJMHg4MCBTdHJlYW1pbmcgc3RvcmUgKFNTKSByZXF1ZXN0cworbmFtZTpzeXN0ZW1yZWFkcmVzcG9uc2UgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgxZgorCTB4MDEgRXhjbHVzaXZlCisJMHgwMiBNb2RpZmllZAorCTB4MDQgU2hhcmVkCisJMHgwOCBPd25lZAorCTB4MTAgRGF0YSBFcnJvcgorbmFtZTpsMV9kdGxiX21pc3NfbDJfaGl0IHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MDcKKwkweDAxIEwyIDRLIFRMQiBoaXQKKwkweDAyIEwyIDJNIFRMQiBoaXQKKwkweDA0IEwyIDFHIFRMQiBoaXQKK25hbWU6bDFfbDJfZHRsYl9taXNzIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MDcKKwkweDAxIDRLIFRMQiByZWxvYWQKKwkweDAyIDJNIFRMQiByZWxvYWQKKwkweDA0IDFHIFRMQiByZWxvYWQKK25hbWU6cHJlZmV0Y2ggdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwNworCTB4MDEgTG9hZCAoUHJlZmV0Y2gsIFByZWZldGNoVDAvVDEvVDIpCisJMHgwMiBTdG9yZSAoUHJlZmV0Y2hXKQorCTB4MDQgTlRBIChQcmVmZXRjaE5UQSkKK25hbWU6bG9ja2VkX2luc3RydWN0aW9uX2RjYWNoZV9taXNzIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MDIKKwkweDAyIERhdGEgY2FjaGUgbWlzc2VzIGJ5IGxvY2tlZCBpbnN0cnVjdGlvbnMKK25hbWU6b2N0d29yZF90cmFuc2ZlciB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDAxCisJMHgwMSBPY3R3b3JkIHdyaXRlIHRyYW5zZmVyCituYW1lOnRoZXJtYWxfc3RhdHVzIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4ZTUKKwkweDAxIE1FTUhPVF9MIGFzc2VydGlvbnMKKwkweDA0IE51bWJlciBvZiB0aW1lcyB0aGUgSFRDIHRyYW5zaXRpb25zIGZyb20gaW5hY3RpdmUgdG8gYWN0aXZlCisJMHgyMCBOdW1iZXIgb2YgY2xvY2tzIEhUQyBQLXN0YXRlIGlzIGluYWN0aXZlCisJMHg0MCBOdW1iZXIgb2YgY2xvY2tzIEhUQyBQLXN0YXRlIGlzIGFjdGl2ZQorCTB4ODAgUFJPQ0hPVF9MIGFzc2VydGVkIGJ5IGV4dGVybmFsIHNvdXJjZSBhbmQgY2F1c2VkIGEgUC1zdGF0ZSBjaGFuZ2UKK25hbWU6bWVtX2NvbnRyb2xfcmVxdWVzdCB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDc4CisJMHgwMSBXcml0ZSByZXF1ZXN0cworCTB4MDIgUmVhZCBSZXF1ZXN0cworCTB4MDQgUHJlZmV0Y2ggUmVxdWVzdHMKKwkweDA4IDMyIEJ5dGVzIFNpemVkIFdyaXRlcworCTB4MTAgNjQgQnl0ZXMgU2l6ZWQgV3JpdGVzCisJMHgyMCAzMiBCeXRlcyBTaXplZCBSZWFkcworCTB4NDAgNjQgQnl0ZSBTaXplZCBSZWFkcworCTB4ODAgUmVhZCByZXF1ZXN0cyB3aGlsZSB3cml0ZXMgcGVuZGluZyBpbiBEQ1EKK25hbWU6bG9ja19vcHMgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwZgorCTB4MDEgTnVtYmVyIG9mIGxvY2tlZCBpbnN0cnVjdGlvbnMgZXhlY3V0ZWQKKwkweDAyIEN5Y2xlcyBpbiBzcGVjdWxhdGl2ZSBwaGFzZQorCTB4MDQgQ3ljbGVzIGluIG5vbi1zcGVjdWxhdGl2ZSBwaGFzZSAoaW5jbHVkaW5nIGNhY2hlIG1pc3MgcGVuYWx0eSkKKwkweDA4IENhY2hlIG1pc3MgcGVuYWx0eSBpbiBjeWNsZXMgCituYW1lOnNzZV9vcHMgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHg3ZgorCTB4MDEgU2luZ2xlIFByZWNpc2lvbiBhZGQvc3VidHJhY3Qgb3BzCisJMHgwMiBTaW5nbGUgcHJlY2lzaW9uIG11bHRpcGx5IG9wcworCTB4MDQgU2luZ2xlIHByZWNpc2lvbiBkaXZpZGUvc3F1YXJlIHJvb3Qgb3BzCisJMHgwOCBEb3VibGUgcHJlY2lzaW9uIGFkZC9zdWJ0cmFjdCBvcHMKKwkweDEwIERvdWJsZSBwcmVjaXNpb24gbXVsdGlwbHkgb3BzCisJMHgyMCBEb3VibGUgcHJlY2lzaW9uIGRpdmlkZS9zcXVhcmUgcm9vdCBvcHMKKwkweDQwIE9QIHR5cGU6IDA9dW9wcyAxPUZMT1BTCituYW1lOm1vdmVfb3BzIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MGYKKwkweDAxIE1lcmdpbmcgbG93IHF1YWR3b3JkIG1vdmUgdW9wcworCTB4MDIgTWVyZ2luZyBoaWdoIHF1YWR3b3JkIG1vdmUgdW9wcworCTB4MDQgQWxsIG90aGVyIG1lcmdpbmcgbW92ZSB1b3BzCisJMHgwOCBBbGwgb3RoZXIgbW92ZSB1b3BzCituYW1lOnNlcmlhbF9vcHMgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwZgorCTB4MDEgU1NFIGJvdHRvbS1leGVjdXRpbmcgdW9wcyByZXRpcmVkCisJMHgwMiBTU0UgYm90dG9tLXNlcmlhbGl6aW5nIHVvcHMgcmV0aXJlZAorCTB4MDQgeDg3IGJvdHRvbS1leGVjdXRpbmcgdW9wcyByZXRpcmVkCisJMHgwOCB4ODcgYm90dG9tLXNlcmlhbGl6aW5nIHVvcHMgcmV0aXJlZAorbmFtZTpzZXJpYWxfb3BzX3NjaGVkIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MDMKKwkweDAxIE51bWJlciBvZiBjeWNsZXMgYSBib3R0b20tZXhlY3V0ZSB1b3BzIGluIEZQIHNjaGVkdWxlcgorCTB4MDIgTnVtYmVyIG9mIGN5Y2xlcyBhIGJvdHRvbS1zZXJpYWxpemluZyB1b3BzIGluIEZQIHNjaGVkdWxlcgorbmFtZTpzdG9yZV90b19sb2FkIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MDcKKwkweDAxIEFkZHJlc3MgbWlzbWF0Y2hlcyAoc3RhcnRpbmcgYnl0ZSBub3QgdGhlIHNhbWUpCisJMHgwMiBTdG9yZSBpcyBzbWFsbGVyIHRoYW4gbG9hZAorCTB4MDQgTWlzYWxpZ25lZAorbmFtZTptb2VzaV9naCB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDFmCisJMHgwMSAoSSludmFsaWQgY2FjaGUgc3RhdGUKKwkweDAyIChTKWhhcmVkIGNhY2hlIHN0YXRlCisJMHgwNCAoRSl4Y2x1c2l2ZSBjYWNoZSBzdGF0ZQorCTB4MDggKE8pd25lZCBjYWNoZSBzdGF0ZQorCTB4MTAgKE0pb2RpZmllZCBjYWNoZSBzdGF0ZQorCTB4MjAgQ2FjaGUgbGluZSBldmljdGVkIGJyb3VnaHQgaW50byB0aGUgY2FjaGUgYnkgUHJlZmV0Y2hOVEEKKwkweDQwIENhY2hlIGxpbmUgZXZpY3RlZCBub3QgYnJvdWdodCBpbnRvIHRoZSBjYWNoZSBieSBQcmVmZXRjaE5UQQorbmFtZTpsMV9kdGxiX2hpdCB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDA3CisJMHgwMSBMMSA0SyBUTEIgaGl0CisJMHgwMiBMMSAyTSBUTEIgaGl0CisJMHgwNCBMMSAxRyBUTEIgaGl0CituYW1lOnNvZnRfcHJlZmV0Y2ggdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwOQorCTB4MDEgU29mdHdhcmUgcHJlZmV0Y2ggaGl0IGluIEwxCisJMHgwOCBTb2Z0d2FyZSBwcmVmZXRjaCBoaXQgaW4gTDIKK25hbWU6bDFfbDJfaXRsYl9taXNzIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MDMKKwkweDAxIEluc3RydWN0aW9uIGZldGNoZXMgdG8gYSA0SyBwYWdlCisJMHgwMiBJbnN0cnVjdGlvbiBmZXRjaGVzIHRvIGEgMk0gcGFnZQkKK25hbWU6aWNhY2hlX2ludmFsaWRhdGVkIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MDMKKwkweDAxIEludmFsaWRhdGluZyBwcm9iZSB0aGF0IGRpZCBub3QgaGl0IGFueSBpbi1mbGlnaHQgaW5zdHJ1Y3Rpb25zCisJMHgwMiBJbnZhbGlkYXRpbmcgcHJvYmUgdGhhdCBoaXQgb25lIG9yIG1vcmUgaW4tZmxpZ2h0IGluc3RydWN0aW9ucworCTB4MDQgU01DIHRoYXQgZGlkIG5vdCBoaXQgYW55IGluLWZsaWdodCBpbnN0cnVjdGlvbnMKKwkweDA4IFNNQyB0aGF0IGhpdCBvbmUgb3IgbW9yZSBpbi1mbGlnaHQgaW5zdHJ1Y3Rpb25zCituYW1lOnBhZ2Vfc2l6ZV9taXNtYXRjaGVzIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MDcKKwkweDAxIEd1ZXN0IHBhZ2Ugc2l6ZSBpcyBsYXJnZXIgdGhhbiB0aGUgaG9zdCBwYWdlIHNpemUKKwkweDAyIE1UUlIgbWlzbWF0Y2gKKwkweDA0IEhvc3QgcGFnZSBzaXplIGlzIGxhcmdlciB0aGFuIHRoZSBndWVzdCBwYWdlIHNpemUKK25hbWU6cmV0aXJlZF94ODdfZnAgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwNworCTB4MDEgQWRkL3N1YnRyYWN0IG9wcworCTB4MDIgTXVsdGlwbHkgb3BzCisJMHgwNCBEaXZpZGUgb3BzCituYW1lOmRjdDFfcGFnZV90YWJsZV9ldmVudHMgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgxZgorCTB4MDEgRENUMSBQYWdlIFRhYmxlIE92ZXJmbG93CisJMHgwMiBEQ1QxIE51bWJlciBvZiBzdGFsZSB0YWJsZSBlbnRyeSBoaXRzCisJMHgwNCBEQ1QxIFBhZ2UgdGFibGUgaWRsZSBjeWNsZSBsaW1pdCBpbmNyZW1lbnRlZAorCTB4MDggRENUMSBQYWdlIHRhYmxlIGlkbGUgY3ljbGUgbGltaXQgZGVjcmVtZW50ZWQKKwkweDEwIERDVDEgUGFnZSB0YWJsZSBpcyBjbG9zZWQgZHVlIHRvIHJvdyBpbmFjdGl2aXR5CituYW1lOnNpZGViYW5kX3NpZ25hbHMgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgxZQorCTB4MDIgU1RPUEdSQU5UCisJMHgwNCBTSFVURE9XTgorCTB4MDggV0JJTlZECisJMHgxMCBJTlZECituYW1lOmludGVycnVwdF9ldmVudHMgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHhmZgorCTB4MDEgRml4ZWQgYW5kIExQQQorCTB4MDIgTFBBCisJMHgwNCBTTUkKKwkweDA4IE5NSQorCTB4MTAgSU5JVAorCTB4MjAgU1RBUlRVUAorCTB4NDAgSU5UCisJMHg4MCBFT0kKK25hbWU6aWJzX29wIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MDEKKwkweDAwIFVzaW5nIElCUyBPUCBjeWNsZSBjb3VudCBtb2RlCisJMHgwMSBVc2luZyBJQlMgT1AgZGlzcGF0Y2ggY291bnQgbW9kZQorCTB4MDIgRW5hYmxlIElCUyBPUCBNZW1vcnkgQWNjZXNzIExvZyAKKwkweDA0IEVuYWJsZSBJQlMgT1AgQnJhbmNoIFRhcmdldCBBZGRyZXNzIExvZwpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL3g4Ni02NC9mYW1pbHkxNGgvZXZlbnRzIGIvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL3g4Ni02NC9mYW1pbHkxNGgvZXZlbnRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkMDVkMjgKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9ldmVudHMveDg2LTY0L2ZhbWlseTE0aC9ldmVudHMKQEAgLTAsMCArMSwxNzEgQEAKKyMgQU1EIEZhbWlseSAxNCBwcm9jZXNzb3IgcGVyZm9ybWFuY2UgZXZlbnRzCisjCisjIENvcHlyaWdodCBPUHJvZmlsZSBhdXRob3JzCisjIENvcHlyaWdodCAoYykgMjAwNi0yMDExIEFkdmFuY2VkIE1pY3JvIERldmljZXMKKyMgQ29udHJpYnV0ZWQgYnkgUmF5IEJyeWFudCA8cmF5YnJ5IGF0IGFtZC5jb20+LAorIwkJSmFzb24gWWVoIDxqYXNvbi55ZWggYXQgYW1kLmNvbT4KKyMJCVN1cmF2ZWUgU3V0aGlrdWxwYW5pdCA8c3VyYXZlZS5zdXRoaWt1bHBhbml0IGF0IGFtZC5jb20+CisjCQlQYXVsIERyb25nb3dza2kgPHBhdWwuZHJvbmdvd3NraSBhdCBhbWQuY29tPgorIworIyBTb3VyY2VzOiBCSU9TIGFuZCBLZXJuZWwgRGV2ZWxvcGVyJ3MgR3VpZGUgZm9yIEFNRCBGYW1pbHkgMTRoIFByb2Nlc3NvcnMsCisjICAgICAgICAgIFB1YmxpY2F0aW9uIyA0MzE3MCwgUmV2aXNpb24gMy4wNCwgRmViIDE2LCAyMDExCisjCisjICAgICAgICAgIFNvZnR3YXJlIE9wdGltaXphdGlvbiBHdWlkZSBmb3IgQU1EIEZhbWlseSAxMGggYW5kIEZhbWlseSAxMmggUHJvY2Vzc29ycywKKyMgICAgICAgICAgUHVibGljYXRpb24jIDQwNTQ2LCBSZXZpc2lvbiAzLjEzLCBGZWJydWFyeSAyMDExCisjICAgICAgICAgIChOb3RlOiBGb3IgSUJTIERlcml2ZWQgUGVyZm9ybWFuY2UgRXZlbnRzKQorIworIyBSZXZpc2lvbjogMS4yCisjCisjIENoYW5nZUxvZzoKKyMJMS4yOiAxMSBNYXJjaCAyMDExCisjIAktIFVwZGF0ZSB0byBCS0RHIFJldi4zLjA0CisjCisjCTEuMTogMjUgSmFudWFyeSAyMDExLgorIwktIFVwZGF0ZSB0byBCS0RHIFJldmlzaW9uIDMuMDAKKyMgICAgICAgLSBVcGRhdGUgbWluaW11bSB2YWx1ZSBmb3IgUkVUSVJFRF9VT1BTCisjCisjCTEuMDogMjkgTm92ZW1iZXIgMjAxMC4KKyMgCS0gUHJlbGltaW5hcnkgdmVyc2lvbgorZXZlbnQ6MHgwMDAgY291bnRlcnM6MCwxLDIsMyB1bTpmcHVfb3BzIG1pbmltdW06NTAwIG5hbWU6RElTUEFUQ0hFRF9GUFVfT1BTIDogRGlzcGF0Y2hlZCBGUFUgT3BlcmF0aW9ucworZXZlbnQ6MHgwMDEgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6Q1lDTEVTX0ZQVV9FTVBUWSA6IEN5Y2xlcyBpbiB3aGljaCB0aGUgRlBVIGlzIEVtcHR5CitldmVudDoweDAwMiBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpESVNQQVRDSEVEX0ZQVV9PUFNfRkFTVF9GTEFHIDogRGlzcGF0Y2hlZCBGYXN0IEZsYWcgRlBVIE9wZXJhdGlvbnMKK2V2ZW50OjB4MDAzIGNvdW50ZXJzOjAsMSwyLDMgdW06c3NlX29wcyBtaW5pbXVtOjUwMCBuYW1lOlJFVElSRURfU1NFX09QUyA6IFJldGlyZWQgU1NFIE9wZXJhdGlvbnMKK2V2ZW50OjB4MDA0IGNvdW50ZXJzOjAsMSwyLDMgdW06bW92ZV9vcHMgbWluaW11bTo1MDAgbmFtZTpSRVRJUkVEX01PVkVfT1BTIDogUmV0aXJlZCBNb3ZlIE9wcworZXZlbnQ6MHgwMDUgY291bnRlcnM6MCwxLDIsMyB1bTpzZXJpYWxfb3BzIG1pbmltdW06NTAwIG5hbWU6UkVUSVJFRF9TRVJJQUxJWklOR19PUFMgOiBSZXRpcmVkIFNlcmlhbGl6aW5nIE9wcworZXZlbnQ6MHgwMTEgY291bnRlcnM6MCwxLDIsMyB1bTpyZXRpcmVkX3g4N19mcCBtaW5pbXVtOjUwMCBuYW1lOlJFVElSRURfWDg3X0ZQX09QUyA6IFJldGlyZWQgeDg3IEZsb2F0aW5nIFBvaW50IE9wZXJhdGlvbnMKK2V2ZW50OjB4MDIwIGNvdW50ZXJzOjAsMSwyLDMgdW06c2VncmVnbG9hZCBtaW5pbXVtOjUwMCBuYW1lOlNFR01FTlRfUkVHSVNURVJfTE9BRFMgOiBTZWdtZW50IFJlZ2lzdGVyIExvYWRzCitldmVudDoweDAyMSBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpQSVBFTElORV9SRVNUQVJUX0RVRV9UT19TRUxGX01PRElGWUlOR19DT0RFIDogUGlwZWxpbmUgUmVzdGFydCBEdWUgdG8gU2VsZi1Nb2RpZnlpbmcgQ29kZQorZXZlbnQ6MHgwMjIgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6UElQRUxJTkVfUkVTVEFSVF9EVUVfVE9fUFJPQkVfSElUIDogUGlwZWxpbmUgUmVzdGFydCBEdWUgdG8gUHJvYmUgSGl0CitldmVudDoweDAyMyBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpSU1FfRlVMTCA6IFJTUSBGdWxsCitldmVudDoweDAyNCBjb3VudGVyczowLDEsMiwzIHVtOmxvY2tfb3BzIG1pbmltdW06NTAwIG5hbWU6TE9DS0VEX09QUyA6IExvY2tlZCBPcGVyYXRpb25zCitldmVudDoweDAyNiBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpSRVRJUkVEX0NMRkxVU0hfSU5TVFJVQ1RJT05TIDogUmV0aXJlZCBDTEZMVVNIIEluc3RydWN0aW9ucworZXZlbnQ6MHgwMjcgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6UkVUSVJFRF9DUFVJRF9JTlNUUlVDVElPTlMgOiBSZXRpcmVkIENQVUlEIEluc3RydWN0aW9ucworZXZlbnQ6MHgwMmEgY291bnRlcnM6MCwxLDIsMyB1bTpzdG9yZV90b19sb2FkIG1pbmltdW06NTAwIG5hbWU6Q0FOQ0VMTEVEX1NUT1JFX1RPX0xPQUQgOiBTdG9yZSB0byBMb2FkIEZvcndhcmQgT3BlcmF0aW9ucyBCbG9jayBMb2FkcworZXZlbnQ6MHgwNDAgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6REFUQV9DQUNIRV9BQ0NFU1NFUyA6IERhdGEgQ2FjaGUgQWNjZXNzZXMKK2V2ZW50OjB4MDQxIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRBVEFfQ0FDSEVfTUlTU0VTIDogRGF0YSBDYWNoZSBNaXNzZXMKK2V2ZW50OjB4MDQyIGNvdW50ZXJzOjAsMSwyLDMgdW06bW9lc3MgbWluaW11bTo1MDAgbmFtZTpEQVRBX0NBQ0hFX1JFRklMTFNfRlJPTV9MMl9PUl9OT1JUSEJSSURHRSA6IERhdGEgQ2FjaGUgUmVmaWxscyBmcm9tIEwyIG9yIE5vcnRoYnJpZGdlCitldmVudDoweDA0MyBjb3VudGVyczowLDEsMiwzIHVtOm1vZXNpIG1pbmltdW06NTAwIG5hbWU6REFUQV9DQUNIRV9SRUZJTExTX0ZST01fTk9SVEhCUklER0UgOiBEYXRhIENhY2hlIFJlZmlsbHMgZnJvbSB0aGUgbm9ydGhicmlkZ2UKK2V2ZW50OjB4MDQ0IGNvdW50ZXJzOjAsMSwyLDMgdW06bW9lc2lfZ2ggbWluaW11bTo1MDAgbmFtZTpEQVRBX0NBQ0hFX0xJTkVTX0VWSUNURUQgOiBEYXRhIENhY2hlIExpbmVzIEV2aWN0ZWQKK2V2ZW50OjB4MDQ1IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkwxX0RUTEJfTUlTU19BTkRfTDJfRFRMQl9ISVQgOiBMMSBEVExCIE1pc3MgYW5kIEwyIERUTEIgSGl0CitldmVudDoweDA0NiBjb3VudGVyczowLDEsMiwzIHVtOmwxX2wyX2R0bGJfbWlzcyBtaW5pbXVtOjUwMCBuYW1lOkRUTEJfTUlTUyA6IERUTEIgTWlzcworZXZlbnQ6MHgwNDcgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6TUlTQUxJR05FRF9BQ0NFU1NFUyA6IE1pc2FsaWduZWQgQWNjZXNzZXMKK2V2ZW50OjB4MDRiIGNvdW50ZXJzOjAsMSwyLDMgdW06cHJlZmV0Y2ggbWluaW11bTo1MDAgbmFtZTpQUkVGRVRDSF9JTlNUUlVDVElPTlNfRElTUEFUQ0hFRCA6IFByZWZldGNoIEluc3RydWN0aW9ucyBEaXNwYXRjaGVkCitldmVudDoweDA0YyBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpMT0NLRURfSU5TVFJVQ1RJT05TX0RDQUNIRV9NSVNTRVMgOiBEQ0FDSEUgTWlzc2VzIGJ5IExvY2tlZCBJbnN0cnVjdGlvbnMKK2V2ZW50OjB4MDRkIGNvdW50ZXJzOjAsMSwyLDMgdW06bDFfZHRsYl9oaXQgbWluaW11bTo1MDAgbmFtZTpMMV9EVExCX0hJVCA6IEwxIERUTEIgSGl0CitldmVudDoweDA1MiBjb3VudGVyczowLDEsMiwzIHVtOnNvZnRfcHJlZmV0Y2ggbWluaW11bTo1MDAgbmFtZTpJTkVGRkVDVElWRV9TV19QUkVGRVRDSEVTIDogRENBQ0hFIEluZWZmZWN0aXZlIFNvZnR3YXJlIFByZWZldGNoZXMKK2V2ZW50OjB4MDU0IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkdMT0JBTF9UTEJfRkxVU0hFUyA6IEdsb2JhbCBQYWdlIEludmFsaWRhdGlvbnMKK2V2ZW50OjB4MDY1IGNvdW50ZXJzOjAsMSwyLDMgdW06bWVtcmVxdHlwZSBtaW5pbXVtOjUwMCBuYW1lOk1FTU9SWV9SRVFVRVNUUyA6IE1lbW9yeSBSZXF1ZXN0cyBieSBUeXBlCitldmVudDoweDA2OCBjb3VudGVyczowLDEsMiwzIHVtOm1hYl9idWZmZXIgbWluaW11bTo1MDAgbmFtZTpNQUJfUkVRUyA6IE1BQiBSZXF1ZXN0cworZXZlbnQ6MHgwNjkgY291bnRlcnM6MCwxLDIsMyB1bTptYWJfYnVmZmVyIG1pbmltdW06NTAwIG5hbWU6TUFCX1dBSVQgOiBNQUIgV2FpdCBDeWNsZXMKK2V2ZW50OjB4MDZjIGNvdW50ZXJzOjAsMSwyLDMgdW06c3lzdGVtcmVhZHJlc3BvbnNlIG1pbmltdW06NTAwIG5hbWU6Tk9SVEhCUklER0VfUkVBRF9SRVNQT05TRVMgOiBTeXN0ZW0gUmVzcG9uc2UgYnkgQ29oZXJlbmNlIFN0YXRlCitldmVudDoweDA3NiBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAwMCBuYW1lOkNQVV9DTEtfVU5IQUxURUQgOiBDUFUgQ2xvY2tzIG5vdCBIYWx0ZWQKK2V2ZW50OjB4MDdkIGNvdW50ZXJzOjAsMSwyLDMgdW06bDJfaW50ZXJuYWwgbWluaW11bTo1MDAgbmFtZTpSRVFVRVNUU19UT19MMiA6IFJlcXVlc3RzIHRvIEwyIENhY2hlCitldmVudDoweDA3ZSBjb3VudGVyczowLDEsMiwzIHVtOmwyX3JlcV9taXNzIG1pbmltdW06NTAwIG5hbWU6TDJfQ0FDSEVfTUlTUyA6IEwyIENhY2hlIE1pc3NlcworZXZlbnQ6MHgwN2YgY291bnRlcnM6MCwxLDIsMyB1bTpsMl9maWxsIG1pbmltdW06NTAwIG5hbWU6TDJfQ0FDSEVfRklMTF9XUklURUJBQ0sgOiBMMiBGaWxsL1dyaXRlYmFjaworZXZlbnQ6MHgxNjIgY291bnRlcnM6MCwxLDIsMyB1bTpwZGNfbWlzcyBtaW5pbXVtOjUwMCBuYW1lOlBEQ19NSVNTIDogUERDIE1pc3MKK2V2ZW50OjB4MDgwIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOklOU1RSVUNUSU9OX0NBQ0hFX0ZFVENIRVMgOiBJbnN0cnVjdGlvbiBDYWNoZSBGZXRjaGVzCitldmVudDoweDA4MSBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJTlNUUlVDVElPTl9DQUNIRV9NSVNTRVMgOiBJbnN0cnVjdGlvbiBDYWNoZSBNaXNzZXMKK2V2ZW50OjB4MDgyIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOklOU1RSVUNUSU9OX0NBQ0hFX1JFRklMTFNfRlJPTV9MMiA6IEluc3RydWN0aW9uIENhY2hlIFJlZmlsbHMgZnJvbSBMMgorZXZlbnQ6MHgwODMgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SU5TVFJVQ1RJT05fQ0FDSEVfUkVGSUxMU19GUk9NX1NZU1RFTSA6IEluc3RydWN0aW9uIENhY2hlIFJlZmlsbHMgZnJvbSBTeXN0ZW0KK2V2ZW50OjB4MDg1IGNvdW50ZXJzOjAsMSwyLDMgdW06bDFfbDJfaXRsYl9taXNzIG1pbmltdW06NTAwIG5hbWU6SVRMQl9NSVNTIDogSVRMQiBNaXNzCitldmVudDoweDA4NyBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJTlNUUlVDVElPTl9GRVRDSF9TVEFMTCA6IEluc3RydWN0aW9uIEZldGNoIFN0YWxsCitldmVudDoweDA4OCBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpSRVRVUk5fU1RBQ0tfSElUUyA6IFJldHVybiBTdGFjayBIaXRzCitldmVudDoweDA4OSBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpSRVRVUk5fU1RBQ0tfT1ZFUkZMT1dTIDogUmV0dXJuIFN0YWNrIE92ZXJmbG93cworZXZlbnQ6MHgwOGIgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SU5TVFJVQ1RJT05fQ0FDSEVfVklDVElNUyA6IEluc3RydWN0aW9uIENhY2hlIFZpY3RpbXMKK2V2ZW50OjB4MDhjIGNvdW50ZXJzOjAsMSwyLDMgdW06aWNhY2hlX2ludmFsaWRhdGVkIG1pbmltdW06NTAwIG5hbWU6SU5TVFJVQ1RJT05fQ0FDSEVfSU5WQUxJREFURUQgOiBJbnN0cnVjdGlvbiBDYWNoZSBMaW5lcyBJbnZhbGlkYXRlZAorZXZlbnQ6MHgwOTkgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SVRMQl9SRUxPQURTIDogSVRMQiBSZWxvYWRzCitldmVudDoweDA5YSBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJVExCX1JFTE9BRFNfQUJPUlRFRCA6IElUTEIgUmVsb2FkcyBBYm9ydGVkCitldmVudDoweDBjMCBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAwMCBuYW1lOlJFVElSRURfSU5TVFJVQ1RJT05TIDogUmV0aXJlZCBJbnN0cnVjdGlvbnMKK2V2ZW50OjB4MGMxIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMDAwIG5hbWU6UkVUSVJFRF9VT1BTIDogUmV0aXJlZCB1b3BzCitldmVudDoweDBjMiBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpSRVRJUkVEX0JSQU5DSF9JTlNUUlVDVElPTlMgOiBSZXRpcmVkIEJyYW5jaCBJbnN0cnVjdGlvbnMKK2V2ZW50OjB4MGMzIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlJFVElSRURfTUlTUFJFRElDVEVEX0JSQU5DSF9JTlNUUlVDVElPTlMgOiBSZXRpcmVkIE1pc3ByZWRpY3RlZCBCcmFuY2ggSW5zdHJ1Y3Rpb25zCitldmVudDoweDBjNCBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpSRVRJUkVEX1RBS0VOX0JSQU5DSF9JTlNUUlVDVElPTlMgOiBSZXRpcmVkIFRha2VuIEJyYW5jaCBJbnN0cnVjdGlvbnMKK2V2ZW50OjB4MGM1IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlJFVElSRURfVEFLRU5fQlJBTkNIX0lOU1RSVUNUSU9OU19NSVNQUkVESUNURUQgOiBSZXRpcmVkIFRha2VuIEJyYW5jaCBJbnN0cnVjdGlvbnMgTWlzcHJlZGljdGVkCitldmVudDoweDBjNiBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpSRVRJUkVEX0ZBUl9DT05UUk9MX1RSQU5TRkVSUyA6IFJldGlyZWQgRmFyIENvbnRyb2wgVHJhbnNmZXJzCitldmVudDoweDBjNyBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpSRVRJUkVEX0JSQU5DSF9SRVNZTkNTIDogUmV0aXJlZCBCcmFuY2ggUmVzeW5jcworZXZlbnQ6MHgwYzggY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6UkVUSVJFRF9ORUFSX1JFVFVSTlMgOiBSZXRpcmVkIE5lYXIgUmV0dXJucworZXZlbnQ6MHgwYzkgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6UkVUSVJFRF9ORUFSX1JFVFVSTlNfTUlTUFJFRElDVEVEIDogUmV0aXJlZCBOZWFyIFJldHVybnMgTWlzcHJlZGljdGVkCitldmVudDoweDBjYSBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpSRVRJUkVEX0lORElSRUNUX0JSQU5DSEVTX01JU1BSRURJQ1RFRCA6IFJldGlyZWQgTWlzcHJlZGljdGVkIFRha2VuIEJyYW5jaCBJbnN0cnVjdGlvbnMgZHVlIHRvIFRhcmdldCBNaXNtYXRjaAorZXZlbnQ6MHgwY2IgY291bnRlcnM6MCwxLDIsMyB1bTpmcHVfaW5zdHIgbWluaW11bTo1MDAgbmFtZTpSRVRJUkVEX01NWF9GUF9JTlNUUlVDVElPTlMgOiBSZXRpcmVkIGEgRmxvYXRpbmcgUG9pbnQgSW5zdHJ1Y3Rpb24KK2V2ZW50OjB4MGNkIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOklOVEVSUlVQVFNfTUFTS0VEX0NZQ0xFUyA6IEludGVycnVwdHMtTWFza2VkIEN5Y2xlcworZXZlbnQ6MHgwY2UgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SU5URVJSVVBUU19NQVNLRURfQ1lDTEVTX1dJVEhfSU5URVJSVVBUX1BFTkRJTkcgOiBJbnRlcnJ1cHRzLU1hc2tlZCBDeWNsZXMgd2l0aCBJbnRlcnJ1cHQgUGVuZGluZworZXZlbnQ6MHgwY2YgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SU5URVJSVVBUU19UQUtFTiA6IEludGVycnVwdHMgVGFrZW4KK2V2ZW50OjB4MGRiIGNvdW50ZXJzOjAsMSwyLDMgdW06ZnB1X2V4Y2VwdGlvbnMgbWluaW11bTo1MDAgbmFtZTpGUFVfRVhDRVBUSU9OUyA6IEZQVSBFeGNlcHRpb25zCitldmVudDoweDBkYyBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpEUjBfQlJFQUtQT0lOVFMgOiBEUjAgQnJlYWtwb2ludCBNYXRjaGVzCitldmVudDoweDBkZCBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpEUjFfQlJFQUtQT0lOVFMgOiBEUjEgQnJlYWtwb2ludCBNYXRjaGVzCitldmVudDoweDBkZSBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpEUjJfQlJFQUtQT0lOVFMgOiBEUjIgQnJlYWtwb2ludCBNYXRjaGVzCitldmVudDoweDBkZiBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpEUjNfQlJFQUtQT0lOVFMgOiBEUjMgQnJlYWtwb2ludCBNYXRjaGVzCitldmVudDoweDBlMCBjb3VudGVyczowLDEsMiwzIHVtOnBhZ2VfYWNjZXNzIG1pbmltdW06NTAwIG5hbWU6RFJBTV9BQ0NFU1NFUyA6IERSQU0gQWNjZXNzZXMKK2V2ZW50OjB4MGUxIGNvdW50ZXJzOjAsMSwyLDMgdW06bWVtX3BhZ2Vfb3ZlcmZsb3cgbWluaW11bTo1MDAgbmFtZTpEQ1QwX1BBR0VfVEFCTEVfRVZFTlRTIDogRFJBTSBDb250cm9sbGVyIFBhZ2UgVGFibGUgRXZlbnRzCitldmVudDoweDBlMiBjb3VudGVyczowLDEsMiwzIHVtOnNsb3RfbWlzc2VkIG1pbmltdW06NTAwIG5hbWU6TUVNT1JZX0NPTlRST0xMRVJfU0xPVF9NSVNTRUQgOiBNZW1vcnkgQ29udHJvbGxlciBEUkFNIENvbW1hbmQgU2xvdHMgTWlzc2VkCitldmVudDoweDBlMyBjb3VudGVyczowLDEsMiwzIHVtOnR1cm5hcm91bmQgbWluaW11bTo1MDAgbmFtZTpNRU1PUllfQ09OVFJPTExFUl9UVVJOQVJPVU5EUyA6IE1lbW9yeSBDb250cm9sbGVyIFR1cm5hcm91bmRzCitldmVudDoweDBlNCBjb3VudGVyczowLDEsMiwzIHVtOnNhdHVyYXRpb24gbWluaW11bTo1MDAgbmFtZTpNRU1PUllfQ09OVFJPTExFUl9SQkRfUVVFVUVfRVZFTlRTIDogTWVtb3J5IENvbnRyb2xsZXIgUkJEIFF1ZXVlIEV2ZW50cworZXZlbnQ6MHgwZTggY291bnRlcnM6MCwxLDIsMyB1bTp0aGVybWFsX3N0YXR1cyBtaW5pbXVtOjUwMCBuYW1lOlRIRVJNQUxfU1RBVFVTIDogVGhlcm1hbCBTdGF0dXMKK2V2ZW50OjB4MGU5IGNvdW50ZXJzOjAsMSwyLDMgdW06Y3Bpb3JlcXVlc3RzIG1pbmltdW06NTAwIG5hbWU6Q1BVX0lPX1JFUVVFU1RTX1RPX01FTU9SWV9JTyA6IENQVS9JTyBSZXF1ZXN0cyB0byBNZW1vcnkvSU8KK2V2ZW50OjB4MGVhIGNvdW50ZXJzOjAsMSwyLDMgdW06Y2FjaGVibG9jayBtaW5pbXVtOjUwMCBuYW1lOkNBQ0hFX0JMT0NLX0NPTU1BTkRTIDogQ2FjaGUgQmxvY2sgQ29tbWFuZHMKK2V2ZW50OjB4MGViIGNvdW50ZXJzOjAsMSwyLDMgdW06c2l6ZWNtZHMgbWluaW11bTo1MDAgbmFtZTpTSVpFRF9DT01NQU5EUyA6IFNpemVkIENvbW1hbmRzCitldmVudDoweDBlYyBjb3VudGVyczowLDEsMiwzIHVtOnByb2JlIG1pbmltdW06NTAwIG5hbWU6UFJPQkVfUkVTUE9OU0VTX0FORF9VUFNUUkVBTV9SRVFVRVNUUyA6IFByb2JlIFJlc3BvbnNlcyBhbmQgVXBzdHJlYW0gUmVxdWVzdHMKK2V2ZW50OjB4MGVlIGNvdW50ZXJzOjAsMSwyLDMgdW06Z2FydCBtaW5pbXVtOjUwMCBuYW1lOkRFVl9FVkVOVFMgOiBERVYgRXZlbnRzCitldmVudDoweDFmMCBjb3VudGVyczowLDEsMiwzIHVtOm1lbV9jb250cm9sX3JlcXVlc3QgbWluaW11bTo1MDAgbmFtZTpNRU1PUllfQ09OVFJPTExFUl9SRVFVRVNUUyA6IE1lbW9yeSBDb250cm9sbGVyIFJlcXVlc3RzCitldmVudDoweDFlOSBjb3VudGVyczowLDEsMiwzIHVtOnNpZGViYW5kX3NpZ25hbHMgbWluaW11bTo1MDAgbmFtZTpTSURFQkFORF9TSUdOQUxTIDogU2lkZWJhbmQgU2lnbmFscyBhbmQgU3BlY2lhbCBDeWNsZXMKK2V2ZW50OjB4MWVhIGNvdW50ZXJzOjAsMSwyLDMgdW06aW50ZXJydXB0X2V2ZW50cyBtaW5pbXVtOjUwMCBuYW1lOklOVEVSUlVQVF9FVkVOVFMgOiBJbnRlcnJ1cHQgRXZlbnRzCitldmVudDoweGYwMDAgZXh0Omlic19mZXRjaCB1bTp6ZXJvIG1pbmltdW06NTAwMDAgbmFtZTpJQlNfRkVUQ0hfQUxMIDogQWxsIElCUyBmZXRjaCBzYW1wbGVzCitldmVudDoweGYwMDEgZXh0Omlic19mZXRjaCB1bTp6ZXJvIG1pbmltdW06NTAwMDAgbmFtZTpJQlNfRkVUQ0hfS0lMTEVEIDogSUJTIGZldGNoIGtpbGxlZAorZXZlbnQ6MHhmMDAyIGV4dDppYnNfZmV0Y2ggdW06emVybyBtaW5pbXVtOjUwMDAwIG5hbWU6SUJTX0ZFVENIX0FUVEVNUFRFRCA6IElCUyBmZXRjaCBhdHRlbXB0ZWQKK2V2ZW50OjB4ZjAwMyBleHQ6aWJzX2ZldGNoIHVtOnplcm8gbWluaW11bTo1MDAwMCBuYW1lOklCU19GRVRDSF9DT01QTEVURUQgOiBJQlMgZmV0Y2ggY29tcGxldGVkCitldmVudDoweGYwMDQgZXh0Omlic19mZXRjaCB1bTp6ZXJvIG1pbmltdW06NTAwMDAgbmFtZTpJQlNfRkVUQ0hfQUJPUlRFRCA6IElCUyBmZXRjaCBhYm9ydGVkCitldmVudDoweGYwMDUgZXh0Omlic19mZXRjaCB1bTp6ZXJvIG1pbmltdW06NTAwMDAgbmFtZTpJQlNfRkVUQ0hfSVRMQl9ISVRTIDogSUJTIElUTEIgaGl0CitldmVudDoweGYwMDYgZXh0Omlic19mZXRjaCB1bTp6ZXJvIG1pbmltdW06NTAwMDAgbmFtZTpJQlNfRkVUQ0hfTDFfSVRMQl9NSVNTRVNfTDJfSVRMQl9ISVRTIDogSUJTIEwxIElUTEIgbWlzc2VzIChhbmQgTDIgSVRMQiBoaXRzKQorZXZlbnQ6MHhmMDA3IGV4dDppYnNfZmV0Y2ggdW06emVybyBtaW5pbXVtOjUwMDAwIG5hbWU6SUJTX0ZFVENIX0wxX0lUTEJfTUlTU0VTX0wyX0lUTEJfTUlTU0VTIDogSUJTIEwxIEwyIElUTEIgbWlzcworZXZlbnQ6MHhmMDA4IGV4dDppYnNfZmV0Y2ggdW06emVybyBtaW5pbXVtOjUwMDAwIG5hbWU6SUJTX0ZFVENIX0lDQUNIRV9NSVNTRVMgOiBJQlMgaW5zdHJ1Y3Rpb24gY2FjaGUgbWlzc2VzCitldmVudDoweGYwMDkgZXh0Omlic19mZXRjaCB1bTp6ZXJvIG1pbmltdW06NTAwMDAgbmFtZTpJQlNfRkVUQ0hfSUNBQ0hFX0hJVFMgOiBJQlMgaW5zdHJ1Y3Rpb24gY2FjaGUgaGl0CitldmVudDoweGYwMGEgZXh0Omlic19mZXRjaCB1bTp6ZXJvIG1pbmltdW06NTAwMDAgbmFtZTpJQlNfRkVUQ0hfNEtfUEFHRSA6IElCUyA0SyBwYWdlIHRyYW5zbGF0aW9uCitldmVudDoweGYwMGIgZXh0Omlic19mZXRjaCB1bTp6ZXJvIG1pbmltdW06NTAwMDAgbmFtZTpJQlNfRkVUQ0hfMk1fUEFHRSA6IElCUyAyTSBwYWdlIHRyYW5zbGF0aW9uCitldmVudDoweGYwMGUgZXh0Omlic19mZXRjaCB1bTp6ZXJvIG1pbmltdW06NTAwMDAgbmFtZTpJQlNfRkVUQ0hfTEFURU5DWSA6IElCUyBmZXRjaCBsYXRlbmN5CitldmVudDoweGYxMDAgZXh0Omlic19vcCB1bTppYnNfb3AgbWluaW11bTo1MDAwMCBuYW1lOklCU19PUF9BTEwgOiBBbGwgSUJTIG9wIHNhbXBsZXMKK2V2ZW50OjB4ZjEwMSBleHQ6aWJzX29wIHVtOmlic19vcCBtaW5pbXVtOjUwMDAwIG5hbWU6SUJTX09QX1RBR19UT19SRVRJUkUgOiBJQlMgdGFnLXRvLXJldGlyZSBjeWNsZXMKK2V2ZW50OjB4ZjEwMiBleHQ6aWJzX29wIHVtOmlic19vcCBtaW5pbXVtOjUwMDAwIG5hbWU6SUJTX09QX0NPTVBfVE9fUkVUIDogSUJTIGNvbXBsZXRpb24tdG8tcmV0aXJlIGN5Y2xlcworZXZlbnQ6MHhmMTAzIGV4dDppYnNfb3AgdW06aWJzX29wIG1pbmltdW06NTAwMDAgbmFtZTpJQlNfT1BfQlJBTkNIX1JFVElSRUQgOiBJQlMgYnJhbmNoIG9wCitldmVudDoweGYxMDQgZXh0Omlic19vcCB1bTppYnNfb3AgbWluaW11bTo1MDAwMCBuYW1lOklCU19PUF9NSVNQUkVESUNURURfQlJBTkNIIDogSUJTIG1pc3ByZWRpY3RlZCBicmFuY2ggb3AKK2V2ZW50OjB4ZjEwNSBleHQ6aWJzX29wIHVtOmlic19vcCBtaW5pbXVtOjUwMDAwIG5hbWU6SUJTX09QX1RBS0VOX0JSQU5DSCA6IElCUyB0YWtlbiBicmFuY2ggb3AKK2V2ZW50OjB4ZjEwNiBleHQ6aWJzX29wIHVtOmlic19vcCBtaW5pbXVtOjUwMDAwIG5hbWU6SUJTX09QX01JU1BSRURJQ1RFRF9CUkFOQ0hfVEFLRU4gOiBJQlMgbWlzcHJlZGljdGVkIHRha2VuIGJyYW5jaCBvcAorZXZlbnQ6MHhmMTA3IGV4dDppYnNfb3AgdW06aWJzX29wIG1pbmltdW06NTAwMDAgbmFtZTpJQlNfT1BfUkVUVVJOUyA6IElCUyByZXR1cm4gb3AKK2V2ZW50OjB4ZjEwOCBleHQ6aWJzX29wIHVtOmlic19vcCBtaW5pbXVtOjUwMDAwIG5hbWU6SUJTX09QX01JU1BSRURJQ1RFRF9SRVRVUk5TIDogSUJTIG1pc3ByZWRpY3RlZCByZXR1cm4gb3AKK2V2ZW50OjB4ZjEwOSBleHQ6aWJzX29wIHVtOmlic19vcCBtaW5pbXVtOjUwMDAwIG5hbWU6SUJTX09QX1JFU1lOQyA6IElCUyByZXN5bmMgb3AKK2V2ZW50OjB4ZjIwMCBleHQ6aWJzX29wIHVtOmlic19vcCBtaW5pbXVtOjUwMDAwIG5hbWU6SUJTX09QX0FMTF9MT0FEX1NUT1JFIDogSUJTIGFsbCBsb2FkIHN0b3JlIG9wcworZXZlbnQ6MHhmMjAxIGV4dDppYnNfb3AgdW06aWJzX29wIG1pbmltdW06NTAwMDAgbmFtZTpJQlNfT1BfTE9BRCA6IElCUyBsb2FkIG9wcworZXZlbnQ6MHhmMjAyIGV4dDppYnNfb3AgdW06aWJzX29wIG1pbmltdW06NTAwMDAgbmFtZTpJQlNfT1BfU1RPUkUgOiBJQlMgc3RvcmUgb3BzCitldmVudDoweGYyMDMgZXh0Omlic19vcCB1bTppYnNfb3AgbWluaW11bTo1MDAwMCBuYW1lOklCU19PUF9MMV9EVExCX0hJVFMgOiBJQlMgTDEgRFRMQiBoaXQKK2V2ZW50OjB4ZjIwNCBleHQ6aWJzX29wIHVtOmlic19vcCBtaW5pbXVtOjUwMDAwIG5hbWU6SUJTX09QX0wxX0RUTEJfTUlTU19MMl9EVExCX0hJVCA6IElCUyBMMSBEVExCIG1pc3NlcyBMMiBoaXRzCitldmVudDoweGYyMDUgZXh0Omlic19vcCB1bTppYnNfb3AgbWluaW11bTo1MDAwMCBuYW1lOklCU19PUF9MMV9MMl9EVExCX01JU1MgOiBJQlMgTDEgYW5kIEwyIERUTEIgbWlzc2VzCitldmVudDoweGYyMDYgZXh0Omlic19vcCB1bTppYnNfb3AgbWluaW11bTo1MDAwMCBuYW1lOklCU19PUF9EQVRBX0NBQ0hFX01JU1MgOiBJQlMgZGF0YSBjYWNoZSBtaXNzZXMKK2V2ZW50OjB4ZjIwNyBleHQ6aWJzX29wIHVtOmlic19vcCBtaW5pbXVtOjUwMDAwIG5hbWU6SUJTX09QX0RBVEFfSElUUyA6IElCUyBkYXRhIGNhY2hlIGhpdHMKK2V2ZW50OjB4ZjIwOCBleHQ6aWJzX29wIHVtOmlic19vcCBtaW5pbXVtOjUwMDAwIG5hbWU6SUJTX09QX01JU0FMSUdORURfREFUQV9BQ0MgOiBJQlMgbWlzYWxpZ25lZCBkYXRhIGFjY2VzcworZXZlbnQ6MHhmMjA5IGV4dDppYnNfb3AgdW06aWJzX29wIG1pbmltdW06NTAwMDAgbmFtZTpJQlNfT1BfQkFOS19DT05GX0xPQUQgOiBJQlMgYmFuayBjb25mbGljdCBvbiBsb2FkIG9wCitldmVudDoweGYyMGEgZXh0Omlic19vcCB1bTppYnNfb3AgbWluaW11bTo1MDAwMCBuYW1lOklCU19PUF9CQU5LX0NPTkZfU1RPUkUgOiBJQlMgYmFuayBjb25mbGljdCBvbiBzdG9yZSBvcAorZXZlbnQ6MHhmMjBiIGV4dDppYnNfb3AgdW06aWJzX29wIG1pbmltdW06NTAwMDAgbmFtZTpJQlNfT1BfRk9SV0FSRCA6IElCUyBzdG9yZS10by1sb2FkIGZvcndhcmRlZAorZXZlbnQ6MHhmMjBjIGV4dDppYnNfb3AgdW06aWJzX29wIG1pbmltdW06NTAwMDAgbmFtZTpJQlNfT1BfQ0FOQ0VMTEVEIDogSUJTIHN0b3JlLXRvLWxvYWQgY2FuY2VsbGVkCitldmVudDoweGYyMGQgZXh0Omlic19vcCB1bTppYnNfb3AgbWluaW11bTo1MDAwMCBuYW1lOklCU19PUF9EQ1VDX01FTV9BQ0MgOiBJQlMgVUMgbWVtb3J5IGFjY2VzcworZXZlbnQ6MHhmMjBlIGV4dDppYnNfb3AgdW06aWJzX29wIG1pbmltdW06NTAwMDAgbmFtZTpJQlNfT1BfRENXQ19NRU1fQUNDIDogSUJTIFdDIG1lbW9yeSBhY2Nlc3MKK2V2ZW50OjB4ZjIwZiBleHQ6aWJzX29wIHVtOmlic19vcCBtaW5pbXVtOjUwMDAwIG5hbWU6SUJTX09QX0xPQ0tFRCA6IElCUyBsb2NrZWQgb3BlcmF0aW9uCitldmVudDoweGYyMTAgZXh0Omlic19vcCB1bTppYnNfb3AgbWluaW11bTo1MDAwMCBuYW1lOklCU19PUF9NQUJfSElUIDogSUJTIE1BQiBoaXQKK2V2ZW50OjB4ZjIxMSBleHQ6aWJzX29wIHVtOmlic19vcCBtaW5pbXVtOjUwMDAwIG5hbWU6SUJTX09QX0wxX0RUTEJfNEsgOiBJQlMgTDEgRFRMQiA0SyBwYWdlCitldmVudDoweGYyMTIgZXh0Omlic19vcCB1bTppYnNfb3AgbWluaW11bTo1MDAwMCBuYW1lOklCU19PUF9MMV9EVExCXzJNIDogSUJTIEwxIERUTEIgMk0gcGFnZQorZXZlbnQ6MHhmMjEzIGV4dDppYnNfb3AgdW06aWJzX29wIG1pbmltdW06NTAwMDAgbmFtZTpJQlNfT1BfTDFfRFRMQl8xRyA6IElCUyBMMSBEVExCIDFHIHBhZ2UKK2V2ZW50OjB4ZjIxNSBleHQ6aWJzX29wIHVtOmlic19vcCBtaW5pbXVtOjUwMDAwIG5hbWU6SUJTX09QX0wyX0RUTEJfNEsgOiBJQlMgTDIgRFRMQiA0SyBwYWdlCitldmVudDoweGYyMTYgZXh0Omlic19vcCB1bTppYnNfb3AgbWluaW11bTo1MDAwMCBuYW1lOklCU19PUF9MMl9EVExCXzJNIDogSUJTIEwyIERUTEIgMk0gcGFnZQorZXZlbnQ6MHhmMjE3IGV4dDppYnNfb3AgdW06aWJzX29wIG1pbmltdW06NTAwMDAgbmFtZTpJQlNfT1BfTDJfRFRMQl8xRyA6IElCUyBMMiBEVExCIDFHIHBhZ2UKK2V2ZW50OjB4ZjIxOSBleHQ6aWJzX29wIHVtOmlic19vcCBtaW5pbXVtOjUwMDAwIG5hbWU6SUJTX09QX0RDX0xPQURfTEFUIDogSUJTIGRhdGEgY2FjaGUgbWlzcyBsb2FkIGxhdGVuY3kKK2V2ZW50OjB4ZjI0MCBleHQ6aWJzX29wIHVtOmlic19vcCBtaW5pbXVtOjUwMDAwIG5hbWU6SUJTX09QX05CX0xPQ0FMX09OTFkgOiBJQlMgTm9ydGhicmlkZ2UgbG9jYWwKK2V2ZW50OjB4ZjI0MSBleHQ6aWJzX29wIHVtOmlic19vcCBtaW5pbXVtOjUwMDAwIG5hbWU6SUJTX09QX05CX1JFTU9URV9PTkxZIDogSUJTIE5vcnRoYnJpZGdlIHJlbW90ZQorZXZlbnQ6MHhmMjQyIGV4dDppYnNfb3AgdW06aWJzX29wIG1pbmltdW06NTAwMDAgbmFtZTpJQlNfT1BfTkJfTE9DQUxfTDMgOiBJQlMgTm9ydGhicmlkZ2UgbG9jYWwgTDMKK2V2ZW50OjB4ZjI0MyBleHQ6aWJzX29wIHVtOmlic19vcCBtaW5pbXVtOjUwMDAwIG5hbWU6SUJTX09QX05CX0xPQ0FMX0NBQ0hFIDogSUJTIE5vcnRoYnJpZGdlIGxvY2FsIGNvcmUgTDEgb3IgTDIgY2FjaGUKK2V2ZW50OjB4ZjI0NCBleHQ6aWJzX29wIHVtOmlic19vcCBtaW5pbXVtOjUwMDAwIG5hbWU6SUJTX09QX05CX1JFTU9URV9DQUNIRSA6IElCUyBOb3J0aGJyaWRnZSBsb2NhbCBjb3JlIEwxLCBMMiwgTDMgY2FjaGUKK2V2ZW50OjB4ZjI0NSBleHQ6aWJzX29wIHVtOmlic19vcCBtaW5pbXVtOjUwMDAwIG5hbWU6SUJTX09QX05CX0xPQ0FMX0RSQU0gOiBJQlMgTm9ydGhicmlkZ2UgbG9jYWwgRFJBTQorZXZlbnQ6MHhmMjQ2IGV4dDppYnNfb3AgdW06aWJzX29wIG1pbmltdW06NTAwMDAgbmFtZTpJQlNfT1BfTkJfUkVNT1RFX0RSQU0gOiBJQlMgTm9ydGhicmlkZ2UgcmVtb3RlIERSQU0KK2V2ZW50OjB4ZjI0NyBleHQ6aWJzX29wIHVtOmlic19vcCBtaW5pbXVtOjUwMDAwIG5hbWU6SUJTX09QX05CX0xPQ0FMX09USEVSIDogSUJTIE5vcnRoYnJpZGdlIGxvY2FsIEFQSUMgTU1JTyBDb25maWcgUENJCitldmVudDoweGYyNDggZXh0Omlic19vcCB1bTppYnNfb3AgbWluaW11bTo1MDAwMCBuYW1lOklCU19PUF9OQl9SRU1PVEVfT1RIRVIgOiBJQlMgTm9ydGhicmlkZ2UgcmVtb3RlIEFQSUMgTU1JTyBDb25maWcgUENJCitldmVudDoweGYyNDkgZXh0Omlic19vcCB1bTppYnNfb3AgbWluaW11bTo1MDAwMCBuYW1lOklCU19PUF9OQl9DQUNIRV9NT0RJRklFRCA6IElCUyBOb3J0aGJyaWRnZSBjYWNoZSBtb2RpZmllZCBzdGF0ZQorZXZlbnQ6MHhmMjRhIGV4dDppYnNfb3AgdW06aWJzX29wIG1pbmltdW06NTAwMDAgbmFtZTpJQlNfT1BfTkJfQ0FDSEVfT1dORUQgOiBJQlMgTm9ydGhicmlkZ2UgY2FjaGUgb3duZWQgc3RhdGUKK2V2ZW50OjB4ZjI0YiBleHQ6aWJzX29wIHVtOmlic19vcCBtaW5pbXVtOjUwMDAwIG5hbWU6SUJTX09QX05CX0xPQ0FMX0NBQ0hFX0xBVCA6IElCUyBOb3J0aGJyaWRnZSBsb2NhbCBjYWNoZSBsYXRlbmN5CitldmVudDoweGYyNGMgZXh0Omlic19vcCB1bTppYnNfb3AgbWluaW11bTo1MDAwMCBuYW1lOklCU19PUF9OQl9SRU1PVEVfQ0FDSEVfTEFUIDogSUJTIE5vcnRoYnJpZGdlIHJlbW90ZSBjYWNoZSBsYXRlbmN5CmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9ldmVudHMveDg2LTY0L2ZhbWlseTE0aC91bml0X21hc2tzIGIvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL3g4Ni02NC9mYW1pbHkxNGgvdW5pdF9tYXNrcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTQ0ODRlCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL3g4Ni02NC9mYW1pbHkxNGgvdW5pdF9tYXNrcwpAQCAtMCwwICsxLDI0NiBAQAorIyBBTUQgRmFtaWx5IDE0IHByb2Nlc3NvciBwZXJmb3JtYW5jZSB1bml0IG1hc2tzCisjCisjIENvcHlyaWdodCBPUHJvZmlsZSBhdXRob3JzCisjIENvcHlyaWdodCAoYykgMjAwNi0yMDExIEFkdmFuY2VkIE1pY3JvIERldmljZXMKKyMgQ29udHJpYnV0ZWQgYnkgUmF5IEJyeWFudCA8cmF5YnJ5IGF0IGFtZC5jb20+LAorIwkJSmFzb24gWWVoIDxqYXNvbi55ZWggYXQgYW1kLmNvbT4KKyMJCVN1cmF2ZWUgU3V0aGlrdWxwYW5pdCA8c3VyYXZlZS5zdXRoaWt1bHBhbml0IGF0IGFtZC5jb20+CisjCQlQYXVsIERyb25nb3dza2kgPHBhdWwuZHJvbmdvd3NraSBhdCBhbWQuY29tPgorIworIyBTb3VyY2VzOiBCSU9TIGFuZCBLZXJuZWwgRGV2ZWxvcGVyJ3MgR3VpZGUgZm9yIEFNRCBGYW1pbHkgMTRoIFByb2Nlc3NvcnMsCisjICAgICAgICAgIFB1YmxpY2F0aW9uIyA0MzE3MCwgUmV2aXNpb24gMy4wNCwgRmViIDE2LCAyMDExCisjCisjICAgICAgICAgIFNvZnR3YXJlIE9wdGltaXphdGlvbiBHdWlkZSBmb3IgQU1EIEZhbWlseSAxMGggYW5kIEZhbWlseSAxMmggUHJvY2Vzc29ycywKKyMgICAgICAgICAgUHVibGljYXRpb24jIDQwNTQ2LCBSZXZpc2lvbiAzLjEzLCBGZWJydWFyeSAyMDExCisjICAgICAgICAgIChOb3RlOiBGb3IgSUJTIERlcml2ZWQgUGVyZm9ybWFuY2UgRXZlbnRzKQorIworIyBSZXZpc2lvbjogMS4yCisjCisjIENoYW5nZUxvZzoKKyMJMS4yOiAxMSBNYXJjaCAyMDExCisjIAktIFVwZGF0ZSB0byBCS0RHIFJldi4zLjA0CisjCisjCTEuMTogMjUgSmFudWFyeSAyMDExLgorIwktIFVwZGF0ZSB0byBCS0RHIFJldmlzaW9uIDMuMDAKKyMgICAgICAgLSBVcGRhdGUgbWluaW11bSB2YWx1ZSBmb3IgUkVUSVJFRF9VT1BTCisjCisjCTEuMDogMjkgTm92ZW1iZXIgMjAxMC4KKyMgCS0gUHJlbGltaW5hcnkgdmVyc2lvbgorbmFtZTp6ZXJvIHR5cGU6bWFuZGF0b3J5IGRlZmF1bHQ6MHgwMAorCTB4MDAgTm8gdW5pdCBtYXNrCituYW1lOmZwdV9vcHMgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwMworCTB4MDEgUGlwZTAgKGZhZGQsIGltdWwsIG1teCkgb3BzCisJMHgwMiBQaXBlMSAoZm11bCwgc3RvcmUsIG1teCkgb3BzCisJMHgwMyBBbGwgb3BzCituYW1lOnNzZV9vcHMgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHg3ZgorCTB4MDEgU2luZ2xlIFByZWNpc2lvbiBhZGQvc3VidHJhY3Qgb3BzCisJMHgwMiBTaW5nbGUgcHJlY2lzaW9uIG11bHRpcGx5IG9wcworCTB4MDQgU2luZ2xlIHByZWNpc2lvbiBkaXZpZGUvc3F1YXJlIHJvb3Qgb3BzCisJMHgwOCBEb3VibGUgcHJlY2lzaW9uIGFkZC9zdWJ0cmFjdCBvcHMKKwkweDEwIERvdWJsZSBwcmVjaXNpb24gbXVsdGlwbHkgb3BzCisJMHgyMCBEb3VibGUgcHJlY2lzaW9uIGRpdmlkZS9zcXVhcmUgcm9vdCBvcHMKKwkweDQwIE9QIHR5cGU6IDA9dW9wcyAxPUZMT1BTCituYW1lOm1vdmVfb3BzIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MGMKKwkweDA0IEFsbCBvdGhlciBtZXJnaW5nIG1vdmUgdW9wcworCTB4MDggQWxsIG90aGVyIG1vdmUgdW9wcworbmFtZTpzZXJpYWxfb3BzIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MGYKKwkweDAxIFNTRSBib3R0b20tZXhlY3V0aW5nIHVvcHMgcmV0aXJlZAorCTB4MDIgU1NFIGJvdHRvbS1zZXJpYWxpemluZyB1b3BzIHJldGlyZWQKKwkweDA0IHg4NyBib3R0b20tZXhlY3V0aW5nIHVvcHMgcmV0aXJlZAorCTB4MDggeDg3IGJvdHRvbS1zZXJpYWxpemluZyB1b3BzIHJldGlyZWQKK25hbWU6cmV0aXJlZF94ODdfZnAgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwNworCTB4MDEgQWRkL3N1YnRyYWN0IG9wcworCTB4MDIgTXVsdGlwbHkgb3BzCisJMHgwNCBEaXZpZGUgYW5kIEZTUVJUIG9wcworbmFtZTpzZWdyZWdsb2FkIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4N2YKKwkweDAxIEVTIHJlZ2lzdGVyCisJMHgwMiBDUyByZWdpc3RlcgorCTB4MDQgU1MgcmVnaXN0ZXIKKwkweDA4IERTIHJlZ2lzdGVyCisJMHgxMCBGUyByZWdpc3RlcgorCTB4MjAgR1MgcmVnaXN0ZXIKKwkweDQwIEhTIHJlZ2lzdGVyCituYW1lOmxvY2tfb3BzIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MDcKKwkweDAxIE51bWJlciBvZiBsb2NrZWQgaW5zdHJ1Y3Rpb25zIGV4ZWN1dGVkCisJMHgwMiBOdW1iZXIgY3ljbGVzIHRvIGFjcXVpcmUgYnVzIGxvY2sKKwkweDA0IE51bWJlciBvZiBjeWNsZXMgdG8gdW5sb2NrIGNhY2hlIGxpbmUgKG5vdCBpbmNsdWRpbmcgY2FjaGUgbWlzcykKK25hbWU6c3RvcmVfdG9fbG9hZCB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDA3CisJMHgwMSBBZGRyZXNzIG1pc21hdGNoZXMgKHN0YXJ0aW5nIGJ5dGUgbm90IHRoZSBzYW1lKQorCTB4MDIgU3RvcmUgaXMgc21hbGxlciB0aGFuIGxvYWQKKwkweDA0IE1pc2FsaWduZWQKK25hbWU6bW9lc3MgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgxZQorCTB4MDEgTm9uLWNhY2hlYWJsZSByZXR1cm4gb2YgZGF0YQorCTB4MDIgU2hhcmVkCisJMHgwNCBFeGNsdXNpdmUKKwkweDA4IE93bmVkCisJMHgxMCBNb2RpZmllZAorCTB4MWUgQWxsIGNhY2hlIHN0YXRlcyBleGNlcHQgbm9uLWNhY2hlYWJsZQorbmFtZTptb2VzaSB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDFmCisJMHgwMSBOb24tY2FjaGVhYmxlIHJlYWQgZGF0YQorCTB4MDIgU2hhcmVkCisJMHgwNCBFeGNsdXNpdmUKKwkweDA4IE93bmVkCisJMHgxMCBNb2RpZmllZAorCTB4MWYgQWxsIGNhY2hlIHN0YXRlcworbmFtZTptb2VzaV9naCB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDFmCisJMHgwMSBFdmljdGVkIGZyb20gcHJvYmUKKwkweDAyIFNoYXJlZCBldmljdGlvbgorCTB4MDQgRXhjbHVzaXZlIGV2aWN0aW9uCisJMHgwOCBPd25lZCBldmljdGlvbgorCTB4MTAgTW9kaWZpZWQgZXZpY3Rpb24KK25hbWU6bDFfbDJfZHRsYl9taXNzIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MGYKKwkweDAxIENvdW50IHN0b3JlcyB0aGF0IG1pc3MgTDFUTEIKKwkweDAyIENvdW50IGxvYWRzIHRoYXQgbWlzcyBMMVRMQgorCTB4MDQgQ291bnQgc3RvcmVzIHRoYXQgbWlzcyBMMlRMQgorCTB4MDggQ291bnQgbG9hZHMgdGhhdCBtaXNzIEwyVExCCituYW1lOnByZWZldGNoIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MDcKKwkweDAxIExvYWQgKFByZWZldGNoLCBQcmVmZXRjaFQwL1QxL1QyKQorCTB4MDIgU3RvcmUgKFByZWZldGNoVykKKwkweDA0IE5UQSAoUHJlZmV0Y2hOVEEpCituYW1lOmwxX2R0bGJfaGl0IHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MDMKKwkweDAxIEwxIDRLIFRMQiBoaXQKKwkweDAyIEwxIDJNIFRMQiBoaXQKK25hbWU6c29mdF9wcmVmZXRjaCB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDBmCisJMHgwMSBTb2Z0d2FyZSBwcmVmZXRjaCBoaXQgaW4gdGhlIGRhdGEgY2FjaGUKKwkweDAyIFNvZnR3YXJlIHByZWZldGNoIGhpdCBhIHBlbmRpbmcgZmlsbAorCTB4MDQgU29mdHdhcmUgcHJlZmV0Y2hlcyB0aGF0IGRvbid0IGdldCBhIE1BQgorCTB4MDggU29mdHdhcmUgcHJlZmV0Y2ggaGl0IGluIEwyCituYW1lOm1lbXJlcXR5cGUgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHg4MworCTB4MDEgUmVxdWVzdHMgdG8gbm9uLWNhY2hlYWJsZSAoVUMpIG1lbW9yeQorCTB4MDIgUmVxdWVzdHMgdG8gd3JpdGUtY29tYmluaW5nIChXQykgbWVtb3J5CisJMHg4MCBTdHJlYW1pbmcgc3RvcmUgKFNTKSByZXF1ZXN0cworbmFtZTptYWJfYnVmZmVyIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MDAKKwkweDAwIERDIG1pc3MgYnVmZmVyIDAKKwkweDAxIERDIG1pc3MgYnVmZmVyIDEKKwkweDAyIERDIG1pc3MgYnVmZmVyIDIKKwkweDAzIERDIG1pc3MgYnVmZmVyIDMKKwkweDA0IERDIG1pc3MgYnVmZmVyIDQKKwkweDA1IERDIG1pc3MgYnVmZmVyIDUKKwkweDA2IERDIG1pc3MgYnVmZmVyIDYKKwkweDA3IERDIG1pc3MgYnVmZmVyIDcKKwkweDA4IElDIG1pc3MgYnVmZmVyIDAKKwkweDA5IElDIG1pc3MgYnVmZmVyIDEKKwkweDBhIEFueSBEQyBtaXNzIGJ1ZmZlcgorCTB4MGIgQW55IElDIG1pc3MgYnVmZmVyCituYW1lOnN5c3RlbXJlYWRyZXNwb25zZSB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDFmCisJMHgwMSBFeGNsdXNpdmUKKwkweDAyIE1vZGlmaWVkCisJMHgwNCBTaGFyZWQKKwkweDA4IE93bmVkCisJMHgxMCBEYXRhIEVycm9yCisJMHgyMCBDaGFuZ2UtdG8tRGlydHkgc3VjY2VzcworCTB4NDAgVW5jYWNoZWFibGUKK25hbWU6bDJfaW50ZXJuYWwgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwYgorCTB4MDEgSUMgZmlsbAorCTB4MDIgREMgZmlsbAorCTB4MDggVGFnIHNub29wIHJlcXVlc3QKK25hbWU6bDJfcmVxX21pc3MgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwMworCTB4MDEgSUMgZmlsbAorCTB4MDIgREMgZmlsbAorbmFtZTpsMl9maWxsIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MDMKKwkweDAxIEwyIGZpbGxzICh2aWN0aW1zIGZyb20gTDEgY2FjaGVzKQorCTB4MDIgTDIgd3JpdGViYWNrcyB0byBzeXN0ZW0KKwkweDA0IElDIGF0dHJpYnV0ZSB3cml0ZXMgd2hpY2ggYWNjZXNzIHRoZSBMMgorCTB4MDggSUMgYXR0cmlidXRlIHdyaXRlcyB3aGljaCBzdG9yZSBpbnRvIHRoZSBMMgorbmFtZTpwZGNfbWlzcyB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDc3CisJMHgwMSBIb3N0OiBQREUgTGV2ZWwKKwkweDAyIEhvc3Q6IFBEUEUgTGV2ZWwKKwkweDA0IEhvc3Q6IFBNTDRFIExldmVsCisJMHgxMCBHdWVzdDogUERFIExldmVsCisJMHgyMCBHdWVzdDogUERQRSBMZXZlbAorCTB4NDAgR3Vlc3Q6IFBNTDRFIExldmVsCituYW1lOmwxX2wyX2l0bGJfbWlzcyB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDAzCisJMHgwMSBJbnN0cnVjdGlvbiBmZXRjaGVzIHRvIGEgNEsgcGFnZQorCTB4MDIgSW5zdHJ1Y3Rpb24gZmV0Y2hlcyB0byBhIDJNIHBhZ2UKK25hbWU6aWNhY2hlX2ludmFsaWRhdGVkIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MDMKKwkweDAxIElDIGludmFsaWRhdGUgZHVlIHRvIGFuIExTIHByb2JlCisJMHgwMiBJQyBpbnZhbGlkYXRlIGR1ZSB0byBhIEJVIHByb2JlCituYW1lOmZwdV9pbnN0ciB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDAzCisJMHgwMSB4ODcgb3IgTU1YKHRtKSBpbnN0cnVjdGlvbiB3YXMgcmV0aXJlZAorCTB4MDIgU1NFIGZsb2F0aW5nIHBvaW50IGluc3RydWN0aW9uIHdhcyByZXRpcmVkIChTU0UsIFNTRTIsIFNTRTMsIE1OSSkKK25hbWU6ZnB1X2V4Y2VwdGlvbnMgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwZgorCTB4MDEgeDg3IHJlY2xhc3MgbWljcm9mYXVsdHMKKwkweDAyIFNTRSByZXR5cGUgbWljcm9mYXVsdHMKKwkweDA0IFNTRSByZWNsYXNzIG1pY3JvZmF1bHRzCisJMHgwOCBTU0UgYW5kIHg4NyBtaWNyb3RyYXBzCituYW1lOnBhZ2VfYWNjZXNzIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4YzcKKwkweDAxIERDVDAgUGFnZSBIaXQKKwkweDAyIERDVDAgUGFnZSBNaXNzCisJMHgwNCBEQ1QwIFBhZ2UgQ29uZmxpY3QKKwkweDQwIFdyaXRlIHJlcXVlc3QKKwkweDgwIFJlYWQgcmVxdWVzdAorbmFtZTptZW1fcGFnZV9vdmVyZmxvdyB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDAxCisJMHgwMSBEQ1QwIFBhZ2UgVGFibGUgT3ZlcmZsb3cKKwkweDAyIERDVDAgTnVtYmVyIG9mIHN0YWxlIHRhYmxlIGVudHJ5IGhpdHMKKwkweDA0IERDVDAgUGFnZSB0YWJsZSBpZGxlIGN5Y2xlIGxpbWl0IGluY3JlbWVudGVkCisJMHgwOCBEQ1QwIFBhZ2UgdGFibGUgaWRsZSBjeWNsZSBsaW1pdCBkZWNyZW1lbnRlZAorCTB4MTAgRENUMCBQYWdlIHRhYmxlIGlzIGNsb3NlZCBkdWUgdG8gcm93IGluYWN0aXZpdHkKK25hbWU6c2xvdF9taXNzZWQgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHg1MAorCTB4MTAgRENUMCBSQkQKKwkweDQwIERDVDAgUHJlZmV0Y2gKK25hbWU6dHVybmFyb3VuZCB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDAzCisJMHgwMSBEQ1QwIHJlYWQtdG8td3JpdGUgdHVybmFyb3VuZAorCTB4MDIgRENUMCB3cml0ZS10by1yZWFkIHR1cm5hcm91bmQKK25hbWU6c2F0dXJhdGlvbiB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDBjCisJMHgwNCBEMThGMng5NFtEY3FCeXBhc3NNYXhdIGNvdW50ZXIgcmVhY2hlZAorCTB4MDggQmFuayBjbG9zZWQgZHVlIHRvIGNvbmZsaWN0IHdpdGggb3V0c3RhbmRpbmcgcmVxdWVzdCBpbiBSQkQgcXVldWUKK25hbWU6dGhlcm1hbF9zdGF0dXMgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHhlNQorCTB4MDEgTUVNSE9UX0wgYXNzZXJ0aW9ucworCTB4MDQgTnVtYmVyIG9mIHRpbWVzIHRoZSBIVEMgdHJhbnNpdGlvbnMgZnJvbSBpbmFjdGl2ZSB0byBhY3RpdmUKKwkweDIwIE51bWJlciBvZiBjbG9ja3MgSFRDIFAtc3RhdGUgaXMgaW5hY3RpdmUKKwkweDQwIE51bWJlciBvZiBjbG9ja3MgSFRDIFAtc3RhdGUgaXMgYWN0aXZlCisJMHg4MCBQUk9DSE9UX0wgYXNzZXJ0ZWQgYnkgZXh0ZXJuYWwgc291cmNlIGFuZCBjYXVzZWQgUC1zdGF0ZSBjaGFuZ2UKK25hbWU6Y3Bpb3JlcXVlc3RzIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MDgKKwkweDAxIElPIHRvIElPCisJMHgwMiBJTyB0byBNZW0KKwkweDA0IENQVSB0byBJTworCTB4MDggQ1BVIHRvIE1lbQorbmFtZTpjYWNoZWJsb2NrIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4M2QKKwkweDAxIFZpY3RpbSBCbG9jayAoV3JpdGViYWNrKQorCTB4MDQgUmVhZCBCbG9jayAoRGNhY2hlIGxvYWQgbWlzcyByZWZpbGwpCisJMHgwOCBSZWFkIEJsb2NrIFNoYXJlZCAoSWNhY2hlIHJlZmlsbCkKKwkweDEwIFJlYWQgQmxvY2sgTW9kaWZpZWQgKERjYWNoZSBzdG9yZSBtaXNzIHJlZmlsbCkKKwkweDIwIENoYW5nZS10by1EaXJ0eSAoZmlyc3Qgc3RvcmUgdG8gY2xlYW4gYmxvY2sgYWxyZWFkeSBpbiBjYWNoZSkKK25hbWU6c2l6ZWNtZHMgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgzZgorCTB4MDEgTm9uLVBvc3RlZCBTeldyIEJ5dGUgKDEtMzIgYnl0ZXMpCisJMHgwMiBOb24tUG9zdGVkIFN6V3IgRFcgKDEtMTYgZG91Ymxld29yZHMpCisJMHgwNCBQb3N0ZWQgU3pXciBCeXRlICgxLTMyIGJ5dGVzKQorCTB4MDggUG9zdGVkIFN6V3IgRFcgKDEtMTYgZG91Ymxld29yZHMpCisJMHgxMCBTelJkIEJ5dGUgKDQgYnl0ZXMpCisJMHgyMCBTelJkIERXICgxLTE2IGRvdWJsZXdvcmRzKQorbmFtZTpwcm9iZSB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweGJmCisJMHgwMSBQcm9iZSBtaXNzCisJMHgwMiBQcm9iZSBoaXQgY2xlYW4KKwkweDA0IFByb2JlIGhpdCBkaXJ0eSB3aXRob3V0IG1lbW9yeSBjYW5jZWwKKwkweDA4IFByb2JlIGhpdCBkaXJ0eSB3aXRoIG1lbW9yeSBjYW5jZWwKKwkweDEwIFVwc3RyZWFtIGhpZ2ggcHJpb3JpdHkgcmVhZHMKKwkweDIwIFVwc3RyZWFtIGxvdyBwcmlvcml0eSByZWFkcworCTB4ODAgVXBzdHJlYW0gbG93IHByaW9yaXR5IHdyaXRlcworbmFtZTpnYXJ0IHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4NzAKKwkweDEwIERFViBoaXQKKwkweDIwIERFViBtaXNzCisJMHg0MCBERVYgZXJyb3IKK25hbWU6bWVtX2NvbnRyb2xfcmVxdWVzdCB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDc4CisJMHgwOCAzMiBCeXRlcyBTaXplZCBXcml0ZXMKKwkweDEwIDY0IEJ5dGVzIFNpemVkIFdyaXRlcworCTB4MjAgMzIgQnl0ZXMgU2l6ZWQgUmVhZHMKKwkweDQwIDY0IEJ5dGUgU2l6ZWQgUmVhZHMKK25hbWU6c2lkZWJhbmRfc2lnbmFscyB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDFlCisJMHgwMiBTVE9QR1JBTlQKKwkweDA0IFNIVVRET1dOCisJMHgwOCBXQklOVkQKKwkweDEwIElOVkQKK25hbWU6aW50ZXJydXB0X2V2ZW50cyB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweGZmCisJMHgwMSBGaXhlZCBhbmQgTFBBCisJMHgwMiBMUEEKKwkweDA0IFNNSQorCTB4MDggTk1JCisJMHgxMCBJTklUCisJMHgyMCBTVEFSVFVQCisJMHg0MCBJTlQKKwkweDgwIEVPSQorbmFtZTppYnNfb3AgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwMQorCTB4MDAgVXNpbmcgSUJTIE9QIGN5Y2xlIGNvdW50IG1vZGUKKwkweDAxIFVzaW5nIElCUyBPUCBkaXNwYXRjaCBjb3VudCBtb2RlCisJMHgwMiBFbmFibGUgSUJTIE9QIE1lbW9yeSBBY2Nlc3MgTG9nCisJMHgwNCBFbmFibGUgSUJTIE9QIEJyYW5jaCBUYXJnZXQgQWRkcmVzcyBMb2cKZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2V2ZW50cy94ODYtNjQvZmFtaWx5MTVoL2V2ZW50cyBiL29wcm9maWxlLTAuOS43L2V2ZW50cy94ODYtNjQvZmFtaWx5MTVoL2V2ZW50cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYWE5YjkwCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL3g4Ni02NC9mYW1pbHkxNWgvZXZlbnRzCkBAIC0wLDAgKzEsMTczIEBACisjIEFNRCBGYW1pbHkgMTVoIHByb2Nlc3NvciBwZXJmb3JtYW5jZSBldmVudHMKKyMKKyMgQ29weXJpZ2h0IE9Qcm9maWxlIGF1dGhvcnMKKyMgQ29weXJpZ2h0IChjKSAyMDA2LTIwMTEgQWR2YW5jZWQgTWljcm8gRGV2aWNlcworIyBDb250cmlidXRlZCBieSBSYXkgQnJ5YW50IDxyYXlicnkgYXQgYW1kLmNvbT4sCisjCQlKYXNvbiBZZWggPGphc29uLnllaCBhdCBhbWQuY29tPgorIwkJU3VyYXZlZSBTdXRoaWt1bHBhbml0IDxzdXJhdmVlLnN1dGhpa3VscGFuaXQgYXQgYW1kLmNvbT4KKyMJCVBhdWwgRHJvbmdvd3NraSA8cGF1bC5kcm9uZ293c2tpIGF0IGFtZC5jb20+CisjCisjIFNvdXJjZXM6IEJJT1MgYW5kIEtlcm5lbCBEZXZlbG9wZXIncyBHdWlkZSBmb3IgQU1EIEZhbWlseSAxNWggTW9kZWxzIDAwaC0wRmggUHJvY2Vzc29ycywKKyMgICAgICAgICAgUHVibGljYXRpb24jIDQyMzAxLCBSZXZpc2lvbiAxLjEyLCBGZWJydWFyeSAxNiwgMjAxMQorIworIyAgICAgICAgICBTb2Z0d2FyZSBPcHRpbWl6YXRpb24gR3VpZGUgZm9yIEFNRCBGYW1pbHkgMTBoIGFuZCBGYW1pbHkgMTJoIFByb2Nlc3NvcnMsCisjICAgICAgICAgIFB1YmxpY2F0aW9uIyA0MDU0NiwgUmV2aXNpb24gMy4xMywgRmVicnVhcnkgMjAxMQorIyAgICAgICAgICAoTm90ZTogRm9yIElCUyBEZXJpdmVkIFBlcmZvcm1hbmNlIEV2ZW50cykKKyMKKyMgUmV2aXNpb246IDEuMworIworIyBDaGFuZ2VMb2c6IAorIyAJMS4zOiA5IE1hcmNoIDIwMTEKKyMgCS0gVXBkYXRlIHRvIEJLREcgUmV2IDEuMTIgKHN0aWxsIHByZWxpbWluYXJ5KQorIworIwkxLjI6IDI1IEphbnVyYXkgMjAxMQorIwktIFVwZGF0ZWQgdG8gQktERyBSZXYgMS4wOSAoc3RpbGwgcHJlbGltaW5hcnkpCisjIAktIFVwZGF0ZSBtaW5pbXVtIHZhbHVlIGZvciBSRVRJUkVEX1VPUFMKKyMKKyMJMS4xOiAyIERlY2VtYmVyIDIwMTAKKyMJLSBVcGRhdGVkIHRvIEJLREcgUmV2IDEuMDYgKHN0aWxsIHByZWxpbWluYXJ5KQorIworIwkxLjA6IDI4IE1heSAyMDEwCisjIAktIFByZWxpbWluYXJ5IHZlcnNpb24KK2V2ZW50OjB4MDAwIGNvdW50ZXJzOjMgdW06ZnB1X29wcyBtaW5pbXVtOjUwMCBuYW1lOkRJU1BBVENIRURfRlBVX09QUyA6IEZQVSBQaXBlIEFzc2lnbm1lbnQKK2V2ZW50OjB4MDAxIGNvdW50ZXJzOjMsNCw1IHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpDWUNMRVNfRlBVX0VNUFRZIDogRlAgU2NoZWR1bGVyIEVtcHR5CitldmVudDoweDAwMyBjb3VudGVyczozIHVtOnNzZV9vcHMgbWluaW11bTo1MDAgbmFtZTpSRVRJUkVEX1NTRV9PUFMgOiBSZXRpcmVkIFNTRS9CTkkgT3BzCitldmVudDoweDAwNCBjb3VudGVyczozIHVtOm1vdmVfb3BzIG1pbmltdW06NTAwIG5hbWU6TU9WRV9TQ0FMQVJfT1BUSU1JWkFUSU9OIDogTnVtYmVyIG9mIE1vdmUgRWxpbWluYXRpb24gYW5kIFNjYWxhciBPcCBPcHRpbWl6YXRpb24KK2V2ZW50OjB4MDA1IGNvdW50ZXJzOjMsNCw1IHVtOnNlcmlhbF9vcHMgbWluaW11bTo1MDAgbmFtZTpSRVRJUkVEX1NFUklBTElaSU5HX09QUyA6IFJldGlyZWQgU2VyaWFsaXppbmcgT3BzCitldmVudDoweDAwNiBjb3VudGVyczozLDQsNSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6Qk9UVE9NX0VYRUNVVEVfT1AgOiBOdW1iZXIgb2YgQ3ljbGVzIHRoYXQgYSBCb3R0b20tRXhlY3V0ZSB1b3AgaXMgaW4gdGhlIEZQIFNjaGVkdWxlcgorZXZlbnQ6MHgwMjAgY291bnRlcnM6MCwxLDIsMyw0LDUgdW06c2VncmVnbG9hZCBtaW5pbXVtOjUwMCBuYW1lOlNFR01FTlRfUkVHSVNURVJfTE9BRFMgOiBTZWdtZW50IFJlZ2lzdGVyIExvYWRzCitldmVudDoweDAyMSBjb3VudGVyczowLDEsMiwzLDQsNSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6UElQRUxJTkVfUkVTVEFSVF9EVUVfVE9fU0VMRl9NT0RJRllJTkdfQ09ERSA6IFBpcGVsaW5lIFJlc3RhcnQgRHVlIHRvIFNlbGYtTW9kaWZ5aW5nIENvZGUKK2V2ZW50OjB4MDIyIGNvdW50ZXJzOjAsMSwyLDMsNCw1IHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpQSVBFTElORV9SRVNUQVJUX0RVRV9UT19QUk9CRV9ISVQgOiBQaXBlbGluZSBSZXN0YXJ0IER1ZSB0byBQcm9iZSBIaXQKK2V2ZW50OjB4MDIzIGNvdW50ZXJzOjAsMSwyIHVtOmxvYWRxX3N0b3JlcSBtaW5pbXVtOjUwMCBuYW1lOkxPQURfUV9TVE9SRV9RX0ZVTEwgOiBMb2FkIFF1ZXVlL1N0b3JlIFF1ZXVlIEZ1bGwKK2V2ZW50OjB4MDI0IGNvdW50ZXJzOjAsMSwyLDMsNCw1IHVtOmxvY2tfb3BzIG1pbmltdW06NTAwIG5hbWU6TE9DS0VEX09QUyA6IExvY2tlZCBPcGVyYXRpb25zCitldmVudDoweDAyNiBjb3VudGVyczowLDEsMiwzLDQsNSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6UkVUSVJFRF9DTEZMVVNIX0lOU1RSVUNUSU9OUyA6IFJldGlyZWQgQ0xGTFVTSCBJbnN0cnVjdGlvbnMKK2V2ZW50OjB4MDI3IGNvdW50ZXJzOjAsMSwyLDMsNCw1IHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpSRVRJUkVEX0NQVUlEX0lOU1RSVUNUSU9OUyA6IFJldGlyZWQgQ1BVSUQgSW5zdHJ1Y3Rpb25zCitldmVudDoweDAyOSBjb3VudGVyczowLDEsMiwzLDQsNSB1bTpsc19kaXNwYXRjaCBtaW5pbXVtOjUwMCBuYW1lOkxTX0RJU1BBVENIIDogTFMgRGlzcGF0Y2gKK2V2ZW50OjB4MDJhIGNvdW50ZXJzOjAsMSwyLDMsNCw1IHVtOnN0b3JlX3RvX2xvYWQgbWluaW11bTo1MDAgbmFtZTpDQU5DRUxMRURfU1RPUkVfVE9fTE9BRCA6IENhbmNlbGVkIFN0b3JlIHRvIExvYWQgRm9yd2FyZCBPcGVyYXRpb25zCitldmVudDoweDAyYiBjb3VudGVyczowLDEsMiwzLDQsNSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6U01JU19SRUNFSVZFRCA6IFNNSXMgUmVjZWl2ZWQKK2V2ZW50OjB4MDMwIGNvdW50ZXJzOjAsMSwyLDMsNCw1IHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpFWEVDVVRFRF9DRkxVU0hfSU5TVCA6IEV4ZWN1dGVkIENMRkxVU0ggSW5zdHJ1Y3Rpb25zCitldmVudDoweDA0MCBjb3VudGVyczowLDEsMiwzLDQsNSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6REFUQV9DQUNIRV9BQ0NFU1NFUyA6IERhdGEgQ2FjaGUgQWNjZXNzZXMKK2V2ZW50OjB4MDQxIGNvdW50ZXJzOjAsMSwyLDMsNCw1IHVtOmRjYWNoZV9taXNzZXMgbWluaW11bTo1MDAgbmFtZTpEQVRBX0NBQ0hFX01JU1NFUyA6IERhdGEgQ2FjaGUgTWlzc2VzCitldmVudDoweDA0MiBjb3VudGVyczowLDEsMiwzLDQsNSB1bTpkY2FjaGVfcmVmaWxscyBtaW5pbXVtOjUwMCBuYW1lOkRBVEFfQ0FDSEVfUkVGSUxMU19GUk9NX0wyX09SX05PUlRIQlJJREdFIDogRGF0YSBDYWNoZSBSZWZpbGxzIGZyb20gTDIgb3IgU3lzdGVtCitldmVudDoweDA0MyBjb3VudGVyczowLDEsMiB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6REFUQV9DQUNIRV9SRUZJTExTX0ZST01fTk9SVEhCUklER0UgOiBEYXRhIENhY2hlIFJlZmlsbHMgZnJvbSBTeXN0ZW0KK2V2ZW50OjB4MDQ1IGNvdW50ZXJzOjAsMSwyIHVtOnVuaWZpZWRfdGxiX2hpdCBtaW5pbXVtOjUwMDAwIG5hbWU6VU5JRklFRF9UTEJfSElUIDogVW5pZmllZCBUTEIgSGl0CitldmVudDoweDA0NiBjb3VudGVyczowLDEsMiB1bTp1bmlmaWVkX3RsYl9taXNzIG1pbmltdW06NTAwIG5hbWU6VU5JRklFRF9UTEJfTUlTUyA6IFVuaWZpZWQgVExCIE1pc3MKK2V2ZW50OjB4MDQ3IGNvdW50ZXJzOjAsMSwyLDMsNCw1IHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpNSVNBTElHTkVEX0FDQ0VTU0VTIDogTWlzYWxpZ25lZCBBY2Nlc3NlcworZXZlbnQ6MHgwNGIgY291bnRlcnM6MCwxLDIsMyw0LDUgdW06cHJlZmV0Y2ggbWluaW11bTo1MDAgbmFtZTpQUkVGRVRDSF9JTlNUUlVDVElPTlNfRElTUEFUQ0hFRCA6IFByZWZldGNoIEluc3RydWN0aW9ucyBEaXNwYXRjaGVkCitldmVudDoweDA1MiBjb3VudGVyczowLDEsMiwzLDQsNSB1bTpzb2Z0X3ByZWZldGNoIG1pbmltdW06NTAwIG5hbWU6SU5FRkZFQ1RJVkVfU1dfUFJFRkVUQ0hFUyA6IEluZWZmZWN0aXZlIFNvZnR3YXJlIFByZWZldGNoZXMKK2V2ZW50OjB4MDY1IGNvdW50ZXJzOjAsMSwyIHVtOm1lbXJlcXR5cGUgbWluaW11bTo1MDAgbmFtZTpNRU1PUllfUkVRVUVTVFMgOiBNZW1vcnkgUmVxdWVzdHMgYnkgVHlwZQorZXZlbnQ6MHgwNjcgY291bnRlcnM6MCwxLDIgdW06ZGF0YXByZWZldGNoIG1pbmltdW06NTAwIG5hbWU6REFUQV9QUkVGRVRDSEVSIDogRGF0YSBQcmVmZXRjaGVyCitldmVudDoweDA2OCBjb3VudGVyczowLDEsMiB1bTpidWZmZXJfaWQgbWluaW11bTo1MDAgbmFtZTpNQUJfUkVRUyA6IE1BQiBSZXF1ZXN0cworZXZlbnQ6MHgwNjkgY291bnRlcnM6MCwxLDIgdW06YnVmZmVyX2lkIG1pbmltdW06NTAwIG5hbWU6TUFCX1dBSVQgOiBNQUIgV2FpdCBDeWNsZXMKK2V2ZW50OjB4MDZjIGNvdW50ZXJzOjAsMSwyIHVtOnN5c3RlbXJlYWRyZXNwb25zZSBtaW5pbXVtOjUwMCBuYW1lOlNZU1RFTV9SRUFEX1JFU1BPTlNFUyA6IFJlc3BvbnNlIEZyb20gU3lzdGVtIG9uIENhY2hlIFJlZmlsbHMKK2V2ZW50OjB4MDZkIGNvdW50ZXJzOjAsMSwyIHVtOm9jdHdvcmRfdHJhbnNmZXIgbWluaW11bTo1MDAgbmFtZTpPQ1RXT1JEX1dSSVRFX1RSQU5TRkVSUyA6IE9jdHdvcmRzIFdyaXR0ZW4gdG8gU3lzdGVtCitldmVudDoweDA3NiBjb3VudGVyczowLDEsMiB1bTp6ZXJvIG1pbmltdW06NTAwMDAgbmFtZTpDUFVfQ0xLX1VOSEFMVEVEIDogQ1BVIENsb2NrcyBub3QgSGFsdGVkCitldmVudDoweDA3ZCBjb3VudGVyczowLDEsMiB1bTpsMl9pbnRlcm5hbCBtaW5pbXVtOjUwMCBuYW1lOlJFUVVFU1RTX1RPX0wyIDogUmVxdWVzdHMgdG8gTDIgQ2FjaGUKK2V2ZW50OjB4MDdlIGNvdW50ZXJzOjAsMSwyIHVtOmwyX3JlcV9taXNzIG1pbmltdW06NTAwIG5hbWU6TDJfQ0FDSEVfTUlTUyA6IEwyIENhY2hlIE1pc3NlcworZXZlbnQ6MHgwN2YgY291bnRlcnM6MCwxLDIgdW06bDJfZmlsbCBtaW5pbXVtOjUwMCBuYW1lOkwyX0NBQ0hFX0ZJTExfV1JJVEVCQUNLIDogTDIgRmlsbC9Xcml0ZWJhY2sKK2V2ZW50OjB4MTY1IGNvdW50ZXJzOjAsMSwyIHVtOnBhZ2Vfc2l6ZV9taXNtYXRjaGVzIG1pbmltdW06NTAwIG5hbWU6UEFHRV9TUExJTlRFUklORyA6IFBhZ2UgU3BsaW50ZXJpbmcKK2V2ZW50OjB4MTZjIGNvdW50ZXJzOjAsMSwyIHVtOmwyX3ByZWZldGNoZXJfdHJpZ2dlciBtaW5pbXVtOjUwMCBuYW1lOkwyX1BSRUZFVENIRVJfVFJJR0dFUiA6IEwyIFByZWZldGNoZXIgVHJpZ2dlciBFdmVudHMKK2V2ZW50OjB4MDgwIGNvdW50ZXJzOjAsMSwyIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJTlNUUlVDVElPTl9DQUNIRV9GRVRDSEVTIDogSW5zdHJ1Y3Rpb24gQ2FjaGUgRmV0Y2hlcworZXZlbnQ6MHgwODEgY291bnRlcnM6MCwxLDIgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOklOU1RSVUNUSU9OX0NBQ0hFX01JU1NFUyA6IEluc3RydWN0aW9uIENhY2hlIE1pc3NlcworZXZlbnQ6MHgwODIgY291bnRlcnM6MCwxLDIgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOklOU1RSVUNUSU9OX0NBQ0hFX1JFRklMTFNfRlJPTV9MMiA6IEluc3RydWN0aW9uIENhY2hlIFJlZmlsbHMgZnJvbSBMMgorZXZlbnQ6MHgwODMgY291bnRlcnM6MCwxLDIgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOklOU1RSVUNUSU9OX0NBQ0hFX1JFRklMTFNfRlJPTV9TWVNURU0gOiBJbnN0cnVjdGlvbiBDYWNoZSBSZWZpbGxzIGZyb20gU3lzdGVtCitldmVudDoweDA4NCBjb3VudGVyczowLDEsMiB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6TDFfSVRMQl9NSVNTX0FORF9MMl9JVExCX0hJVCA6IEwxIElUTEIgTWlzcywgTDIgSVRMQiBIaXQKK2V2ZW50OjB4MDg1IGNvdW50ZXJzOjAsMSwyIHVtOmwxX2wyX2l0bGJfbWlzcyBtaW5pbXVtOjUwMCBuYW1lOkwxX0lUTEJfTUlTU19BTkRfTDJfSVRMQl9NSVNTIDogTDEgSVRMQiBNaXNzLCBMMiBJVExCIE1pc3MKK2V2ZW50OjB4MDg2IGNvdW50ZXJzOjAsMSwyIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpQSVBFTElORV9SRVNUQVJUX0RVRV9UT19JTlNUUlVDVElPTl9TVFJFQU1fUFJPQkUgOiBQaXBlbGluZSBSZXN0YXJ0IER1ZSB0byBJbnN0cnVjdGlvbiBTdHJlYW0gUHJvYmUKK2V2ZW50OjB4MDg3IGNvdW50ZXJzOjAsMSwyIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJTlNUUlVDVElPTl9GRVRDSF9TVEFMTCA6IEluc3RydWN0aW9uIEZldGNoIFN0YWxsCitldmVudDoweDA4OCBjb3VudGVyczowLDEsMiB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6UkVUVVJOX1NUQUNLX0hJVFMgOiBSZXR1cm4gU3RhY2sgSGl0cworZXZlbnQ6MHgwODkgY291bnRlcnM6MCwxLDIgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlJFVFVSTl9TVEFDS19PVkVSRkxPV1MgOiBSZXR1cm4gU3RhY2sgT3ZlcmZsb3dzCitldmVudDoweDA4YiBjb3VudGVyczowLDEsMiB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SU5TVFJVQ1RJT05fQ0FDSEVfVklDVElNUyA6IEluc3RydWN0aW9uIENhY2hlIFZpY3RpbXMKK2V2ZW50OjB4MDhjIGNvdW50ZXJzOjAsMSwyIHVtOmljYWNoZV9pbnZhbGlkYXRlZCBtaW5pbXVtOjUwMCBuYW1lOklOU1RSVUNUSU9OX0NBQ0hFX0lOVkFMSURBVEVEIDogSW5zdHJ1Y3Rpb24gQ2FjaGUgTGluZXMgSW52YWxpZGF0ZWQKK2V2ZW50OjB4MDk5IGNvdW50ZXJzOjAsMSwyIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJVExCX1JFTE9BRFMgOiBJVExCIFJlbG9hZHMKK2V2ZW50OjB4MDlhIGNvdW50ZXJzOjAsMSwyIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJVExCX1JFTE9BRFNfQUJPUlRFRCA6IElUTEIgUmVsb2FkcyBBYm9ydGVkCitldmVudDoweDBjMCBjb3VudGVyczowLDEsMiwzLDQsNSB1bTp6ZXJvIG1pbmltdW06NTAwMDAgbmFtZTpSRVRJUkVEX0lOU1RSVUNUSU9OUyA6IFJldGlyZWQgSW5zdHJ1Y3Rpb25zCitldmVudDoweDBjMSBjb3VudGVyczowLDEsMiwzLDQsNSB1bTp6ZXJvIG1pbmltdW06NTAwMDAgbmFtZTpSRVRJUkVEX1VPUFMgOiBSZXRpcmVkIHVvcHMKK2V2ZW50OjB4MGMyIGNvdW50ZXJzOjAsMSwyLDMsNCw1IHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpSRVRJUkVEX0JSQU5DSF9JTlNUUlVDVElPTlMgOiBSZXRpcmVkIEJyYW5jaCBJbnN0cnVjdGlvbnMKK2V2ZW50OjB4MGMzIGNvdW50ZXJzOjAsMSwyLDMsNCw1IHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpSRVRJUkVEX01JU1BSRURJQ1RFRF9CUkFOQ0hfSU5TVFJVQ1RJT05TIDogUmV0aXJlZCBNaXNwcmVkaWN0ZWQgQnJhbmNoIEluc3RydWN0aW9ucworZXZlbnQ6MHgwYzQgY291bnRlcnM6MCwxLDIsMyw0LDUgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlJFVElSRURfVEFLRU5fQlJBTkNIX0lOU1RSVUNUSU9OUyA6IFJldGlyZWQgVGFrZW4gQnJhbmNoIEluc3RydWN0aW9ucworZXZlbnQ6MHgwYzUgY291bnRlcnM6MCwxLDIsMyw0LDUgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlJFVElSRURfVEFLRU5fQlJBTkNIX0lOU1RSVUNUSU9OU19NSVNQUkVESUNURUQgOiBSZXRpcmVkIFRha2VuIEJyYW5jaCBJbnN0cnVjdGlvbnMgTWlzcHJlZGljdGVkCitldmVudDoweDBjNiBjb3VudGVyczowLDEsMiwzLDQsNSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6UkVUSVJFRF9GQVJfQ09OVFJPTF9UUkFOU0ZFUlMgOiBSZXRpcmVkIEZhciBDb250cm9sIFRyYW5zZmVycworZXZlbnQ6MHgwYzcgY291bnRlcnM6MCwxLDIsMyw0LDUgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlJFVElSRURfQlJBTkNIX1JFU1lOQ1MgOiBSZXRpcmVkIEJyYW5jaCBSZXN5bmNzCitldmVudDoweDBjOCBjb3VudGVyczowLDEsMiwzLDQsNSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6UkVUSVJFRF9ORUFSX1JFVFVSTlMgOiBSZXRpcmVkIE5lYXIgUmV0dXJucworZXZlbnQ6MHgwYzkgY291bnRlcnM6MCwxLDIsMyw0LDUgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlJFVElSRURfTkVBUl9SRVRVUk5TX01JU1BSRURJQ1RFRCA6IFJldGlyZWQgTmVhciBSZXR1cm5zIE1pc3ByZWRpY3RlZAorZXZlbnQ6MHgwY2EgY291bnRlcnM6MCwxLDIsMyw0LDUgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlJFVElSRURfSU5ESVJFQ1RfQlJBTkNIRVNfTUlTUFJFRElDVEVEIDogUmV0aXJlZCBJbmRpcmVjdCBCcmFuY2hlcyBNaXNwcmVkaWN0ZWQKK2V2ZW50OjB4MGNiIGNvdW50ZXJzOjAsMSwyLDMsNCw1IHVtOmZwdV9pbnN0ciBtaW5pbXVtOjUwMCBuYW1lOlJFVElSRURfTU1YX0ZQX0lOU1RSVUNUSU9OUyA6IFJldGlyZWQgTU1YL0ZQIEluc3RydWN0aW9ucworZXZlbnQ6MHgwY2QgY291bnRlcnM6MCwxLDIsMyw0LDUgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOklOVEVSUlVQVFNfTUFTS0VEX0NZQ0xFUyA6IEludGVycnVwdHMtTWFza2VkIEN5Y2xlcworZXZlbnQ6MHgwY2UgY291bnRlcnM6MCwxLDIsMyw0LDUgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOklOVEVSUlVQVFNfTUFTS0VEX0NZQ0xFU19XSVRIX0lOVEVSUlVQVF9QRU5ESU5HIDogSW50ZXJydXB0cy1NYXNrZWQgQ3ljbGVzIHdpdGggSW50ZXJydXB0IFBlbmRpbmcKK2V2ZW50OjB4MGNmIGNvdW50ZXJzOjAsMSwyLDMsNCw1IHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJTlRFUlJVUFRTX1RBS0VOIDogSW50ZXJydXB0cyBUYWtlbgorZXZlbnQ6MHgwZDAgY291bnRlcnM6MCwxLDIgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRFQ09ERVJfRU1QVFkgOiBEZWNvZGVyIEVtcHR5CitldmVudDoweDBkMSBjb3VudGVyczowLDEsMiB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RElTUEFUQ0hfU1RBTExTIDogRGlzcGF0Y2ggU3RhbGxzCitldmVudDoweDBkMyBjb3VudGVyczowLDEsMiB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RElTUEFUQ0hfU1RBTExfRk9SX1NFUklBTElaQVRJT04gOiBNaWNyb3NlcXVlbmNlciBTdGFsbCBkdWUgdG8gU2VyaWFsaXphdGlvbgorZXZlbnQ6MHgwZDUgY291bnRlcnM6MCwxLDIgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRJU1BBVENIX1NUQUxMX0ZPUl9SRVRJUkVfUVVFVUVfRlVMTCA6IERpc3BhdGNoIFN0YWxsIGZvciBJbnN0cnVjdGlvbiBSZXRpcmUgUSBGdWxsCitldmVudDoweDBkNiBjb3VudGVyczowLDEsMiB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RElTUEFUQ0hfU1RBTExfRk9SX0lOVF9TQ0hFRF9RVUVVRV9GVUxMIDogRGlzcGF0Y2ggU3RhbGwgZm9yIEludGVnZXIgU2NoZWR1bGVyIFF1ZXVlIEZ1bGwKK2V2ZW50OjB4MGQ3IGNvdW50ZXJzOjAsMSwyIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpESVNQQVRDSF9TVEFMTF9GT1JfRlBVX0ZVTEwgOiBEaXNwYXRjaCBTdGFsbCBmb3IgRlAgU2NoZWR1bGVyIFF1ZXVlIEZ1bGwKK2V2ZW50OjB4MGQ4IGNvdW50ZXJzOjAsMSwyIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpESVNQQVRDSF9TVEFMTF9GT1JfTERRX0ZVTEwgOiBEaXNwYXRjaCBTdGFsbCBmb3IgTERRIEZ1bGwKK2V2ZW50OjB4MGQ5IGNvdW50ZXJzOjAsMSwyIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpNSUNST1NFUV9TVEFMTF9XQUlUSU5HX0ZPUl9BTExfUVVJRVQgOiBNaWNyb3NlcXVlbmNlciBTdGFsbCBXYWl0aW5nIGZvciBBbGwgUXVpZXQKK2V2ZW50OjB4MGRiIGNvdW50ZXJzOjAsMSwyLDMsNCw1IHVtOmZwdV9leGNlcHRpb25zIG1pbmltdW06NTAwIG5hbWU6RlBVX0VYQ0VQVElPTlMgOiBGUFUgRXhjZXB0aW9ucworZXZlbnQ6MHgwZGMgY291bnRlcnM6MCwxLDIsMyw0LDUgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRSMF9CUkVBS1BPSU5UUyA6IERSMCBCcmVha3BvaW50IE1hdGNoCitldmVudDoweDBkZCBjb3VudGVyczowLDEsMiwzLDQsNSB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RFIxX0JSRUFLUE9JTlRTIDogRFIxIEJyZWFrcG9pbnQgTWF0Y2gKK2V2ZW50OjB4MGRlIGNvdW50ZXJzOjAsMSwyLDMsNCw1IHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpEUjJfQlJFQUtQT0lOVFMgOiBEUjIgQnJlYWtwb2ludCBNYXRjaAorZXZlbnQ6MHgwZGYgY291bnRlcnM6MCwxLDIsMyw0LDUgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRSM19CUkVBS1BPSU5UUyA6IERSMyBCcmVha3BvaW50IE1hdGNoCitldmVudDoweDFjZiBjb3VudGVyczowLDEsMiwzLDQsNSB1bTppYnNfb3BzX3RhZ2dlZCBtaW5pbXVtOjUwMDAwIG5hbWU6SUJTX09QU19UQUdHRUQgOiBUYWdnZWQgSUJTIE9wcworZXZlbnQ6MHgxZDggY291bnRlcnM6MCwxLDIsMyw0LDUgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRJU1BBVENIX1NUQUxMX0ZPUl9TVFFfRlVMTCA6IERpc3BhdGNoIFN0YWxsIGZvciBTVFEgRnVsbAorZXZlbnQ6MHhmMDAwIGV4dDppYnNfZmV0Y2ggdW06emVybyBtaW5pbXVtOjUwMDAwIG5hbWU6SUJTX0ZFVENIX0FMTCA6IEFsbCBJQlMgZmV0Y2ggc2FtcGxlcworZXZlbnQ6MHhmMDAxIGV4dDppYnNfZmV0Y2ggdW06emVybyBtaW5pbXVtOjUwMDAwIG5hbWU6SUJTX0ZFVENIX0tJTExFRCA6IElCUyBmZXRjaCBraWxsZWQKK2V2ZW50OjB4ZjAwMiBleHQ6aWJzX2ZldGNoIHVtOnplcm8gbWluaW11bTo1MDAwMCBuYW1lOklCU19GRVRDSF9BVFRFTVBURUQgOiBJQlMgZmV0Y2ggYXR0ZW1wdGVkCitldmVudDoweGYwMDMgZXh0Omlic19mZXRjaCB1bTp6ZXJvIG1pbmltdW06NTAwMDAgbmFtZTpJQlNfRkVUQ0hfQ09NUExFVEVEIDogSUJTIGZldGNoIGNvbXBsZXRlZAorZXZlbnQ6MHhmMDA0IGV4dDppYnNfZmV0Y2ggdW06emVybyBtaW5pbXVtOjUwMDAwIG5hbWU6SUJTX0ZFVENIX0FCT1JURUQgOiBJQlMgZmV0Y2ggYWJvcnRlZAorZXZlbnQ6MHhmMDA1IGV4dDppYnNfZmV0Y2ggdW06emVybyBtaW5pbXVtOjUwMDAwIG5hbWU6SUJTX0ZFVENIX0lUTEJfSElUUyA6IElCUyBJVExCIGhpdAorZXZlbnQ6MHhmMDA2IGV4dDppYnNfZmV0Y2ggdW06emVybyBtaW5pbXVtOjUwMDAwIG5hbWU6SUJTX0ZFVENIX0wxX0lUTEJfTUlTU0VTX0wyX0lUTEJfSElUUyA6IElCUyBMMSBJVExCIG1pc3NlcyAoYW5kIEwyIElUTEIgaGl0cykKK2V2ZW50OjB4ZjAwNyBleHQ6aWJzX2ZldGNoIHVtOnplcm8gbWluaW11bTo1MDAwMCBuYW1lOklCU19GRVRDSF9MMV9JVExCX01JU1NFU19MMl9JVExCX01JU1NFUyA6IElCUyBMMSBMMiBJVExCIG1pc3MKK2V2ZW50OjB4ZjAwOCBleHQ6aWJzX2ZldGNoIHVtOnplcm8gbWluaW11bTo1MDAwMCBuYW1lOklCU19GRVRDSF9JQ0FDSEVfTUlTU0VTIDogSUJTIGluc3RydWN0aW9uIGNhY2hlIG1pc3NlcworZXZlbnQ6MHhmMDA5IGV4dDppYnNfZmV0Y2ggdW06emVybyBtaW5pbXVtOjUwMDAwIG5hbWU6SUJTX0ZFVENIX0lDQUNIRV9ISVRTIDogSUJTIGluc3RydWN0aW9uIGNhY2hlIGhpdAorZXZlbnQ6MHhmMDBhIGV4dDppYnNfZmV0Y2ggdW06emVybyBtaW5pbXVtOjUwMDAwIG5hbWU6SUJTX0ZFVENIXzRLX1BBR0UgOiBJQlMgNEsgcGFnZSB0cmFuc2xhdGlvbgorZXZlbnQ6MHhmMDBiIGV4dDppYnNfZmV0Y2ggdW06emVybyBtaW5pbXVtOjUwMDAwIG5hbWU6SUJTX0ZFVENIXzJNX1BBR0UgOiBJQlMgMk0gcGFnZSB0cmFuc2xhdGlvbgorZXZlbnQ6MHhmMDBlIGV4dDppYnNfZmV0Y2ggdW06emVybyBtaW5pbXVtOjUwMDAwIG5hbWU6SUJTX0ZFVENIX0xBVEVOQ1kgOiBJQlMgZmV0Y2ggbGF0ZW5jeQorZXZlbnQ6MHhmMTAwIGV4dDppYnNfb3AgdW06aWJzX29wIG1pbmltdW06NTAwMDAgbmFtZTpJQlNfT1BfQUxMIDogQWxsIElCUyBvcCBzYW1wbGVzCitldmVudDoweGYxMDEgZXh0Omlic19vcCB1bTppYnNfb3AgbWluaW11bTo1MDAwMCBuYW1lOklCU19PUF9UQUdfVE9fUkVUSVJFIDogSUJTIHRhZy10by1yZXRpcmUgY3ljbGVzCitldmVudDoweGYxMDIgZXh0Omlic19vcCB1bTppYnNfb3AgbWluaW11bTo1MDAwMCBuYW1lOklCU19PUF9DT01QX1RPX1JFVCA6IElCUyBjb21wbGV0aW9uLXRvLXJldGlyZSBjeWNsZXMKK2V2ZW50OjB4ZjEwMyBleHQ6aWJzX29wIHVtOmlic19vcCBtaW5pbXVtOjUwMDAwIG5hbWU6SUJTX09QX0JSQU5DSF9SRVRJUkVEIDogSUJTIGJyYW5jaCBvcAorZXZlbnQ6MHhmMTA0IGV4dDppYnNfb3AgdW06aWJzX29wIG1pbmltdW06NTAwMDAgbmFtZTpJQlNfT1BfTUlTUFJFRElDVEVEX0JSQU5DSCA6IElCUyBtaXNwcmVkaWN0ZWQgYnJhbmNoIG9wCitldmVudDoweGYxMDUgZXh0Omlic19vcCB1bTppYnNfb3AgbWluaW11bTo1MDAwMCBuYW1lOklCU19PUF9UQUtFTl9CUkFOQ0ggOiBJQlMgdGFrZW4gYnJhbmNoIG9wCitldmVudDoweGYxMDYgZXh0Omlic19vcCB1bTppYnNfb3AgbWluaW11bTo1MDAwMCBuYW1lOklCU19PUF9NSVNQUkVESUNURURfQlJBTkNIX1RBS0VOIDogSUJTIG1pc3ByZWRpY3RlZCB0YWtlbiBicmFuY2ggb3AKK2V2ZW50OjB4ZjEwNyBleHQ6aWJzX29wIHVtOmlic19vcCBtaW5pbXVtOjUwMDAwIG5hbWU6SUJTX09QX1JFVFVSTlMgOiBJQlMgcmV0dXJuIG9wCitldmVudDoweGYxMDggZXh0Omlic19vcCB1bTppYnNfb3AgbWluaW11bTo1MDAwMCBuYW1lOklCU19PUF9NSVNQUkVESUNURURfUkVUVVJOUyA6IElCUyBtaXNwcmVkaWN0ZWQgcmV0dXJuIG9wCitldmVudDoweGYxMDkgZXh0Omlic19vcCB1bTppYnNfb3AgbWluaW11bTo1MDAwMCBuYW1lOklCU19PUF9SRVNZTkMgOiBJQlMgcmVzeW5jIG9wCitldmVudDoweGYyMDAgZXh0Omlic19vcCB1bTppYnNfb3AgbWluaW11bTo1MDAwMCBuYW1lOklCU19PUF9BTExfTE9BRF9TVE9SRSA6IElCUyBhbGwgbG9hZCBzdG9yZSBvcHMKK2V2ZW50OjB4ZjIwMSBleHQ6aWJzX29wIHVtOmlic19vcCBtaW5pbXVtOjUwMDAwIG5hbWU6SUJTX09QX0xPQUQgOiBJQlMgbG9hZCBvcHMKK2V2ZW50OjB4ZjIwMiBleHQ6aWJzX29wIHVtOmlic19vcCBtaW5pbXVtOjUwMDAwIG5hbWU6SUJTX09QX1NUT1JFIDogSUJTIHN0b3JlIG9wcworZXZlbnQ6MHhmMjAzIGV4dDppYnNfb3AgdW06aWJzX29wIG1pbmltdW06NTAwMDAgbmFtZTpJQlNfT1BfTDFfRFRMQl9ISVRTIDogSUJTIEwxIERUTEIgaGl0CitldmVudDoweGYyMDQgZXh0Omlic19vcCB1bTppYnNfb3AgbWluaW11bTo1MDAwMCBuYW1lOklCU19PUF9MMV9EVExCX01JU1NfTDJfRFRMQl9ISVQgOiBJQlMgTDEgRFRMQiBtaXNzZXMgTDIgaGl0cworZXZlbnQ6MHhmMjA1IGV4dDppYnNfb3AgdW06aWJzX29wIG1pbmltdW06NTAwMDAgbmFtZTpJQlNfT1BfTDFfTDJfRFRMQl9NSVNTIDogSUJTIEwxIGFuZCBMMiBEVExCIG1pc3NlcworZXZlbnQ6MHhmMjA2IGV4dDppYnNfb3AgdW06aWJzX29wIG1pbmltdW06NTAwMDAgbmFtZTpJQlNfT1BfREFUQV9DQUNIRV9NSVNTIDogSUJTIGRhdGEgY2FjaGUgbWlzc2VzCitldmVudDoweGYyMDcgZXh0Omlic19vcCB1bTppYnNfb3AgbWluaW11bTo1MDAwMCBuYW1lOklCU19PUF9EQVRBX0hJVFMgOiBJQlMgZGF0YSBjYWNoZSBoaXRzCitldmVudDoweGYyMDggZXh0Omlic19vcCB1bTppYnNfb3AgbWluaW11bTo1MDAwMCBuYW1lOklCU19PUF9NSVNBTElHTkVEX0RBVEFfQUNDIDogSUJTIG1pc2FsaWduZWQgZGF0YSBhY2Nlc3MKK2V2ZW50OjB4ZjIwOSBleHQ6aWJzX29wIHVtOmlic19vcCBtaW5pbXVtOjUwMDAwIG5hbWU6SUJTX09QX0JBTktfQ09ORl9MT0FEIDogSUJTIGJhbmsgY29uZmxpY3Qgb24gbG9hZCBvcAorZXZlbnQ6MHhmMjBhIGV4dDppYnNfb3AgdW06aWJzX29wIG1pbmltdW06NTAwMDAgbmFtZTpJQlNfT1BfQkFOS19DT05GX1NUT1JFIDogSUJTIGJhbmsgY29uZmxpY3Qgb24gc3RvcmUgb3AKK2V2ZW50OjB4ZjIwYiBleHQ6aWJzX29wIHVtOmlic19vcCBtaW5pbXVtOjUwMDAwIG5hbWU6SUJTX09QX0ZPUldBUkQgOiBJQlMgc3RvcmUtdG8tbG9hZCBmb3J3YXJkZWQKK2V2ZW50OjB4ZjIwYyBleHQ6aWJzX29wIHVtOmlic19vcCBtaW5pbXVtOjUwMDAwIG5hbWU6SUJTX09QX0NBTkNFTExFRCA6IElCUyBzdG9yZS10by1sb2FkIGNhbmNlbGxlZAorZXZlbnQ6MHhmMjBkIGV4dDppYnNfb3AgdW06aWJzX29wIG1pbmltdW06NTAwMDAgbmFtZTpJQlNfT1BfRENVQ19NRU1fQUNDIDogSUJTIFVDIG1lbW9yeSBhY2Nlc3MKK2V2ZW50OjB4ZjIwZSBleHQ6aWJzX29wIHVtOmlic19vcCBtaW5pbXVtOjUwMDAwIG5hbWU6SUJTX09QX0RDV0NfTUVNX0FDQyA6IElCUyBXQyBtZW1vcnkgYWNjZXNzCitldmVudDoweGYyMGYgZXh0Omlic19vcCB1bTppYnNfb3AgbWluaW11bTo1MDAwMCBuYW1lOklCU19PUF9MT0NLRUQgOiBJQlMgbG9ja2VkIG9wZXJhdGlvbgorZXZlbnQ6MHhmMjEwIGV4dDppYnNfb3AgdW06aWJzX29wIG1pbmltdW06NTAwMDAgbmFtZTpJQlNfT1BfTUFCX0hJVCA6IElCUyBNQUIgaGl0CitldmVudDoweGYyMTEgZXh0Omlic19vcCB1bTppYnNfb3AgbWluaW11bTo1MDAwMCBuYW1lOklCU19PUF9MMV9EVExCXzRLIDogSUJTIEwxIERUTEIgNEsgcGFnZQorZXZlbnQ6MHhmMjEyIGV4dDppYnNfb3AgdW06aWJzX29wIG1pbmltdW06NTAwMDAgbmFtZTpJQlNfT1BfTDFfRFRMQl8yTSA6IElCUyBMMSBEVExCIDJNIHBhZ2UKK2V2ZW50OjB4ZjIxMyBleHQ6aWJzX29wIHVtOmlic19vcCBtaW5pbXVtOjUwMDAwIG5hbWU6SUJTX09QX0wxX0RUTEJfMUcgOiBJQlMgTDEgRFRMQiAxRyBwYWdlCitldmVudDoweGYyMTUgZXh0Omlic19vcCB1bTppYnNfb3AgbWluaW11bTo1MDAwMCBuYW1lOklCU19PUF9MMl9EVExCXzRLIDogSUJTIEwyIERUTEIgNEsgcGFnZQorZXZlbnQ6MHhmMjE2IGV4dDppYnNfb3AgdW06aWJzX29wIG1pbmltdW06NTAwMDAgbmFtZTpJQlNfT1BfTDJfRFRMQl8yTSA6IElCUyBMMiBEVExCIDJNIHBhZ2UKK2V2ZW50OjB4ZjIxNyBleHQ6aWJzX29wIHVtOmlic19vcCBtaW5pbXVtOjUwMDAwIG5hbWU6SUJTX09QX0wyX0RUTEJfMUcgOiBJQlMgTDIgRFRMQiAxRyBwYWdlCitldmVudDoweGYyMTkgZXh0Omlic19vcCB1bTppYnNfb3AgbWluaW11bTo1MDAwMCBuYW1lOklCU19PUF9EQ19MT0FEX0xBVCA6IElCUyBkYXRhIGNhY2hlIG1pc3MgbG9hZCBsYXRlbmN5CitldmVudDoweGYyNDAgZXh0Omlic19vcCB1bTppYnNfb3AgbWluaW11bTo1MDAwMCBuYW1lOklCU19PUF9OQl9MT0NBTF9PTkxZIDogSUJTIE5vcnRoYnJpZGdlIGxvY2FsCitldmVudDoweGYyNDEgZXh0Omlic19vcCB1bTppYnNfb3AgbWluaW11bTo1MDAwMCBuYW1lOklCU19PUF9OQl9SRU1PVEVfT05MWSA6IElCUyBOb3J0aGJyaWRnZSByZW1vdGUKK2V2ZW50OjB4ZjI0MiBleHQ6aWJzX29wIHVtOmlic19vcCBtaW5pbXVtOjUwMDAwIG5hbWU6SUJTX09QX05CX0xPQ0FMX0wzIDogSUJTIE5vcnRoYnJpZGdlIGxvY2FsIEwzCitldmVudDoweGYyNDMgZXh0Omlic19vcCB1bTppYnNfb3AgbWluaW11bTo1MDAwMCBuYW1lOklCU19PUF9OQl9MT0NBTF9DQUNIRSA6IElCUyBOb3J0aGJyaWRnZSBsb2NhbCBjb3JlIEwxIG9yIEwyIGNhY2hlCitldmVudDoweGYyNDQgZXh0Omlic19vcCB1bTppYnNfb3AgbWluaW11bTo1MDAwMCBuYW1lOklCU19PUF9OQl9SRU1PVEVfQ0FDSEUgOiBJQlMgTm9ydGhicmlkZ2UgbG9jYWwgY29yZSBMMSwgTDIsIEwzIGNhY2hlCitldmVudDoweGYyNDUgZXh0Omlic19vcCB1bTppYnNfb3AgbWluaW11bTo1MDAwMCBuYW1lOklCU19PUF9OQl9MT0NBTF9EUkFNIDogSUJTIE5vcnRoYnJpZGdlIGxvY2FsIERSQU0KK2V2ZW50OjB4ZjI0NiBleHQ6aWJzX29wIHVtOmlic19vcCBtaW5pbXVtOjUwMDAwIG5hbWU6SUJTX09QX05CX1JFTU9URV9EUkFNIDogSUJTIE5vcnRoYnJpZGdlIHJlbW90ZSBEUkFNCitldmVudDoweGYyNDcgZXh0Omlic19vcCB1bTppYnNfb3AgbWluaW11bTo1MDAwMCBuYW1lOklCU19PUF9OQl9MT0NBTF9PVEhFUiA6IElCUyBOb3J0aGJyaWRnZSBsb2NhbCBBUElDIE1NSU8gQ29uZmlnIFBDSQorZXZlbnQ6MHhmMjQ4IGV4dDppYnNfb3AgdW06aWJzX29wIG1pbmltdW06NTAwMDAgbmFtZTpJQlNfT1BfTkJfUkVNT1RFX09USEVSIDogSUJTIE5vcnRoYnJpZGdlIHJlbW90ZSBBUElDIE1NSU8gQ29uZmlnIFBDSQorZXZlbnQ6MHhmMjQ5IGV4dDppYnNfb3AgdW06aWJzX29wIG1pbmltdW06NTAwMDAgbmFtZTpJQlNfT1BfTkJfQ0FDSEVfTU9ESUZJRUQgOiBJQlMgTm9ydGhicmlkZ2UgY2FjaGUgbW9kaWZpZWQgc3RhdGUKK2V2ZW50OjB4ZjI0YSBleHQ6aWJzX29wIHVtOmlic19vcCBtaW5pbXVtOjUwMDAwIG5hbWU6SUJTX09QX05CX0NBQ0hFX09XTkVEIDogSUJTIE5vcnRoYnJpZGdlIGNhY2hlIG93bmVkIHN0YXRlCitldmVudDoweGYyNGIgZXh0Omlic19vcCB1bTppYnNfb3AgbWluaW11bTo1MDAwMCBuYW1lOklCU19PUF9OQl9MT0NBTF9DQUNIRV9MQVQgOiBJQlMgTm9ydGhicmlkZ2UgbG9jYWwgY2FjaGUgbGF0ZW5jeQorZXZlbnQ6MHhmMjRjIGV4dDppYnNfb3AgdW06aWJzX29wIG1pbmltdW06NTAwMDAgbmFtZTpJQlNfT1BfTkJfUkVNT1RFX0NBQ0hFX0xBVCA6IElCUyBOb3J0aGJyaWRnZSByZW1vdGUgY2FjaGUgbGF0ZW5jeQpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL3g4Ni02NC9mYW1pbHkxNWgvdW5pdF9tYXNrcyBiL29wcm9maWxlLTAuOS43L2V2ZW50cy94ODYtNjQvZmFtaWx5MTVoL3VuaXRfbWFza3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDcxZWIxYgotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2V2ZW50cy94ODYtNjQvZmFtaWx5MTVoL3VuaXRfbWFza3MKQEAgLTAsMCArMSwxOTIgQEAKKyMgQU1EIEZhbWlseSAxNWggcHJvY2Vzc29yIHBlcmZvcm1hbmNlIGV2ZW50cworIworIyBDb3B5cmlnaHQgT1Byb2ZpbGUgYXV0aG9ycworIyBDb3B5cmlnaHQgKGMpIDIwMDYtMjAxMSBBZHZhbmNlZCBNaWNybyBEZXZpY2VzCisjIENvbnRyaWJ1dGVkIGJ5IFJheSBCcnlhbnQgPHJheWJyeSBhdCBhbWQuY29tPiwKKyMJCUphc29uIFllaCA8amFzb24ueWVoIGF0IGFtZC5jb20+CisjCQlTdXJhdmVlIFN1dGhpa3VscGFuaXQgPHN1cmF2ZWUuc3V0aGlrdWxwYW5pdCBhdCBhbWQuY29tPgorIwkJUGF1bCBEcm9uZ293c2tpIDxwYXVsLmRyb25nb3dza2kgYXQgYW1kLmNvbT4KKyMKKyMgU291cmNlczogQklPUyBhbmQgS2VybmVsIERldmVsb3BlcidzIEd1aWRlIGZvciBBTUQgRmFtaWx5IDE1aCBNb2RlbHMgMDBoLTBGaCBQcm9jZXNzb3JzLAorIyAgICAgICAgICBQdWJsaWNhdGlvbiMgNDIzMDEsIFJldmlzaW9uIDEuMTIsIEZlYnJ1YXJ5IDE2LCAyMDExCisjCisjICAgICAgICAgIFNvZnR3YXJlIE9wdGltaXphdGlvbiBHdWlkZSBmb3IgQU1EIEZhbWlseSAxMGggYW5kIEZhbWlseSAxMmggUHJvY2Vzc29ycywKKyMgICAgICAgICAgUHVibGljYXRpb24jIDQwNTQ2LCBSZXZpc2lvbiAzLjEzLCBGZWJydWFyeSAyMDExCisjICAgICAgICAgIChOb3RlOiBGb3IgSUJTIERlcml2ZWQgUGVyZm9ybWFuY2UgRXZlbnRzKQorIworIyBSZXZpc2lvbjogMS4zCisjCisjIENoYW5nZUxvZzogCisjIAkxLjM6IDkgTWFyY2ggMjAxMQorIyAJLSBVcGRhdGUgdG8gQktERyBSZXYgMS4xMiAoc3RpbGwgcHJlbGltaW5hcnkpCisjCisjCTEuMjogMjUgSmFudXJheSAyMDExCisjCS0gVXBkYXRlZCB0byBCS0RHIFJldiAxLjA5IChzdGlsbCBwcmVsaW1pbmFyeSkKKyMgCS0gVXBkYXRlIG1pbmltdW0gdmFsdWUgZm9yIFJFVElSRURfVU9QUworIworIwkxLjE6IDIgRGVjZW1iZXIgMjAxMAorIwktIFVwZGF0ZWQgdG8gQktERyBSZXYgMS4wNiAoc3RpbGwgcHJlbGltaW5hcnkpCisjCisjCTEuMDogMjggTWF5IDIwMTAKKyMgCS0gUHJlbGltaW5hcnkgdmVyc2lvbgorbmFtZTp6ZXJvIHR5cGU6bWFuZGF0b3J5IGRlZmF1bHQ6MHgwMAorCTB4MDAgTm8gdW5pdCBtYXNrCituYW1lOmZwdV9vcHMgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHhmZgorCTB4MDEgVG90YWwgbnVtYmVyIHVvcHMgYXNzaWduZWQgdG8gUGlwZSAwCisJMHgwMiBUb3RhbCBudW1iZXIgdW9wcyBhc3NpZ25lZCB0byBQaXBlIDEKKwkweDA0IFRvdGFsIG51bWJlciB1b3BzIGFzc2lnbmVkIHRvIFBpcGUgMgorCTB4MDggVG90YWwgbnVtYmVyIHVvcHMgYXNzaWduZWQgdG8gUGlwZSAzCisJMHgxMCBUb3RhbCBudW1iZXIgZHVhbC1waXBlIHVvcHMgYXNzaWduZWQgdG8gUGlwZSAwCisJMHgyMCBUb3RhbCBudW1iZXIgZHVhbC1waXBlIHVvcHMgYXNzaWduZWQgdG8gUGlwZSAxCisJMHg0MCBUb3RhbCBudW1iZXIgZHVhbC1waXBlIHVvcHMgYXNzaWduZWQgdG8gUGlwZSAyCisJMHg4MCBUb3RhbCBudW1iZXIgZHVhbC1waXBlIHVvcHMgYXNzaWduZWQgdG8gUGlwZSAzCisJMHhmZiBBbGwgb3BzCituYW1lOnNzZV9vcHMgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHhmZgorCTB4MDEgU2luZ2xlIFByZWNpc2lvbiBhZGQvc3VidHJhY3QgRkxPUFMKKwkweDAyIFNpbmdsZSBwcmVjaXNpb24gbXVsdGlwbHkgRkxPUFMKKwkweDA0IFNpbmdsZSBwcmVjaXNpb24gZGl2aWRlL3NxdWFyZSByb290IEZMT1BTCisJMHgwOCBTaW5nbGUgcHJlY2lzaW9uIG11bHRpcGx5LWFkZCBGTE9QUy4gTXVsdGlwbHktYWRkIGNvdW50cyBhcyAyIEZMT1BTCisJMHgxMCBEb3VibGUgcHJlY2lzaW9uIGFkZC9zdWJ0cmFjdCBGTE9QUworCTB4MjAgRG91YmxlIHByZWNpc2lvbiBtdWx0aXBseSBGTE9QUworCTB4NDAgRG91YmxlIHByZWNpc2lvbiBkaXZpZGUvc3F1YXJlIHJvb3QgRkxPUFMKKwkweDgwIERvdWJsZSBwcmVjaXNpb24gbXVsdGlwbHktYWRkIEZMT1BTLiBNdWx0aXBseS1hZGQgY291bnRzIGFzIDIgRkxPUFMKK25hbWU6bW92ZV9vcHMgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwYworCTB4MDEgTnVtYmVyIG9mIFNTRSBNb3ZlIE9wcworCTB4MDIgTnVtYmVyIG9mIFNTRSBNb3ZlIE9wcyBlbGltaW5hdGVkCisJMHgwNCBOdW1iZXIgb2YgT3BzIHRoYXQgYXJlIGNhbmRpZGF0ZXMgZm9yIG9wdGltaXphdGlvbgorCTB4MDggTnVtYmVyIG9mIFNjYWxhciBvcHMgb3B0aW1pemVkCituYW1lOnNlcmlhbF9vcHMgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwZgorCTB4MDEgU1NFIGJvdHRvbS1leGVjdXRpbmcgdW9wcyByZXRpcmVkCisJMHgwMiBTU0UgY29udHJvbCB3b3JkIG1pc3ByZWRpY3QgdHJhcHMgZHVlIHRvIG1pc3ByZWRpY3Rpb25zCisJMHgwNCB4ODcgYm90dG9tLWV4ZWN1dGluZyB1b3BzIHJldGlyZWQKKwkweDA4IHg4NyBjb250cm9sIHdvcmQgbWlzcHJlZGljdCB0cmFwcyBkdWUgdG8gbWlzcHJlZGljdGlvbnMKK25hbWU6c2VncmVnbG9hZCB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDdmCisJMHgwMSBFUyByZWdpc3RlcgorCTB4MDIgQ1MgcmVnaXN0ZXIKKwkweDA0IFNTIHJlZ2lzdGVyCisJMHgwOCBEUyByZWdpc3RlcgorCTB4MTAgRlMgcmVnaXN0ZXIKKwkweDIwIEdTIHJlZ2lzdGVyCisJMHg0MCBIUyByZWdpc3RlcgorbmFtZTpsb2FkcV9zdG9yZXEgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwMworCTB4MDEgQ3ljbGVzIHRoYXQgdGhlIGxvYWQgYnVmZmVyIGlzIGZ1bGwKKwkweDAyIEN5Y2xlcyB0aGF0IHRoZSBzdG9yZSBidWZmZXIgaXMgZnVsbAorbmFtZTpsb2NrX29wcyB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDAxCisJMHgwMSBOdW1iZXIgb2YgbG9ja2VkIGluc3RydWN0aW9ucyBleGVjdXRlZAorCTB4MDQgQ3ljbGVzIHNwZW50IG5vbi1zcGVjdWxhdGl2ZSBwaGFzZSAoaW5jbHVkaW5nIGNhY2hlIG1pc3MgcGVuYWx0eSkKKwkweDA4IEN5Y2xlcyB3YWl0aW5nIGZvciBhIGNhY2hlIGhpdCAoY2FjaGUgbWlzcyBwZW5hbHR5KQorbmFtZTpzdG9yZV90b19sb2FkIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MDEKKwkweDAxIFN0b3JlIGlzIHNtYWxsZXIgdGhhbiBsb2FkIG9yIGRpZmZlcmVudCBzdGFydGluZyBieXRlIGJ1dCBwYXJ0aWFsIG92ZXJsYXAKK25hbWU6ZGNhY2hlX21pc3NlcyB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDAxCisJMHgwMSBGaXJzdCBkYXRhIGNhY2hlIG1pc3Mgb3Igc3RyZWFtaW5nIHN0b3JlIHRvIGEgNjRCIGNhY2hlIGxpbmUKKwkweDAyIEZpcnN0IHN0cmVhbWluZyBzdG9yZSB0byBhIDY0QiBjYWNoZSBsaW5lCituYW1lOmRjYWNoZV9yZWZpbGxzIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MGIKKwkweDAxIEZpbGwgd2l0aCBnb29kIGRhdGEuIChGaW5hbCB2YWxpZCBzdGF0dXMgaXMgdmFsaWQpCisJMHgwMiBFYXJseSB2YWxpZCBzdGF0dXMgdHVybmVkIG91dCB0byBiZSBpbnZhbGlkCisJMHgwOCBGaWxsIHdpdGggcmVhZCBkYXRhIGVycm9yCituYW1lOnVuaWZpZWRfdGxiX2hpdCB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDc3CisJMHgwMSA0IEtCIHVuaWZpZWQgVExCIGhpdCBmb3IgZGF0YQorCTB4MDIgMiBNQiB1bmlmaWVkIFRMQiBoaXQgZm9yIGRhdGEKKwkweDA0IDEgR0IgdW5pZmllZCBUTEIgaGl0IGZvciBkYXRhCisJMHgxMCA0IEtCIHVuaWZpZWQgVExCIGhpdCBmb3IgaW5zdHJ1Y3Rpb24KKwkweDIwIDIgTUIgdW5pZmllZCBUTEIgaGl0IGZvciBpbnN0cnVjdGlvbgorCTB4NDAgMSBHQiB1bmlmaWVkIFRMQiBoaXQgZm9yIGluc3RydWN0aW9uCisJMHgwNyBBbGwgRFRMQiBoaXRzCisJMHg3MCBBbGwgSVRMQiBoaXRzCisJMHg3NyBBbGwgRFRMQiBhbmQgSVRMQiBoaXRzCituYW1lOnVuaWZpZWRfdGxiX21pc3MgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHg3NworCTB4MDEgNCBLQiB1bmlmaWVkIFRMQiBtaXNzIGZvciBkYXRhCisJMHgwMiAyIE1CIHVuaWZpZWQgVExCIG1pc3MgZm9yIGRhdGEKKwkweDA0IDEgR0IgdW5pZmllZCBUTEIgbWlzcyBmb3IgZGF0YQorCTB4MTAgNCBLQiB1bmlmaWVkIFRMQiBtaXNzIGZvciBpbnN0cnVjdGlvbgorCTB4MjAgMiBNQiB1bmlmaWVkIFRMQiBtaXNzIGZvciBpbnN0cnVjdGlvbgorCTB4NDAgMSBHQiB1bmlmaWVkIFRMQiBtaXNzIGZvciBpbnN0cnVjdGlvbgorCTB4MDcgQWxsIERUTEIgbWlzc2VzCisJMHg3MCBBbGwgSVRMQiBtaXNzZXMKKwkweDc3IEFsbCBEVExCIGFuZCBJVExCIG1pc3NlcworbmFtZTpwcmVmZXRjaCB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDA3CisJMHgwMSBMb2FkIChQcmVmZXRjaCwgUHJlZmV0Y2hUMC9UMS9UMikKKwkweDAyIFN0b3JlIChQcmVmZXRjaFcpCisJMHgwNCBOVEEgKFByZWZldGNoTlRBKQorbmFtZTpzb2Z0X3ByZWZldGNoIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MDkKKwkweDAxIFNvZnR3YXJlIHByZWZldGNoIGhpdCBpbiBMMSBkYXRhIGNhY2hlCisJMHgwOCBTb2Z0d2FyZSBwcmVmZXRjaCBoaXQgaW4gdGhlIEwyCituYW1lOm1lbXJlcXR5cGUgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHg4MworCTB4MDEgUmVxdWVzdHMgdG8gbm9uLWNhY2hlYWJsZSAoVUMpIG1lbW9yeQorCTB4MDIgUmVxdWVzdHMgdG8gd3JpdGUtY29tYmluaW5nIChXQykgbWVtb3J5CisJMHg4MCBTdHJlYW1pbmcgc3RvcmUgKFNTKSByZXF1ZXN0cworbmFtZTpkYXRhcHJlZmV0Y2ggdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwMgorCTB4MDIgUHJlZmV0Y2ggYXR0ZW1wdHMKK25hbWU6YnVmZmVyX2lkIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MDEKKwkweDAxIE1BQiBJRCBiaXQgMAorCTB4MDIgTUFCIElEIGJpdCAxCisJMHgwNCBNQUIgSUQgYml0IDIKKwkweDA4IE1BQiBJRCBiaXQgMworCTB4MTAgTUFCIElEIGJpdCA0CisJMHgyMCBNQUIgSUQgYml0IDUKKwkweDQwIE1BQiBJRCBiaXQgNgorCTB4ODAgTUFCIElEIGJpdCA3CituYW1lOnN5c3RlbXJlYWRyZXNwb25zZSB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDNmCisJMHgwMSBFeGNsdXNpdmUKKwkweDAyIE1vZGlmaWVkCisJMHgwNCBTaGFyZWQKKwkweDA4IE93bmVkCisJMHgxMCBEYXRhIEVycm9yCisJMHgyMCBNb2RpZmllZCB1bndyaXR0ZW4KK25hbWU6b2N0d29yZF90cmFuc2ZlciB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDAxCisJMHgwMSBPY3R3b3JkIHdyaXRlIHRyYW5zZmVyCituYW1lOmwyX2ludGVybmFsIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4NDcKKwkweDAxIElDIGZpbGwKKwkweDAyIERDIGZpbGwKKwkweDA0IFRMQiBmaWxsIChwYWdlIHRhYmxlIHdhbGtzKQorCTB4MDggTkIgcHJvYmUgcmVxdWVzdAorCTB4MTAgQ2FuY2VsZWQgcmVxdWVzdAorCTB4NDAgTDIgY2FjaGUgcHJlZmV0Y2hlciByZXF1ZXN0CituYW1lOmwyX3JlcV9taXNzIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MTcKKwkweDAxIElDIGZpbGwKKwkweDAyIERDIGZpbGwgKGluY2x1ZGVzIHBvc3NpYmxlIHJlcGxheXMsIHdoZXJlYXMgUE1DeDA0MSBkb2VzIG5vdCkKKwkweDA0IFRMQiBwYWdlIHRhYmxlIHdhbGtzCisJMHgxMCBMMiBjYWNoZSBwcmVmZXRjaGVyIHJlcXVlc3QKK25hbWU6bDJfZmlsbCB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDA3CisJMHgwMSBMMiBmaWxscyBmcm9tIHN5c3RlbQorCTB4MDIgTDIgV3JpdGViYWNrcyB0byBzeXN0ZW0gKENsZWFuIGFuZCBEaXJ0eSkKKwkweDA0IEwyIENsZWFuIFdyaXRlYmFja3MgdG8gc3lzdGVtCituYW1lOnBhZ2Vfc2l6ZV9taXNtYXRjaGVzIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MDcKKwkweDAxIEd1ZXN0IHBhZ2Ugc2l6ZSBpcyBsYXJnZXIgdGhhbiBob3N0IHBhZ2Ugc2l6ZSB3aGVuIG5lc3RlZCBwYWdpbmcgaXMgZW5hYmxlZAorCTB4MDIgU3BsaW50ZXJpbmcgZHVlIHRvIE1UUlJzLCBJT1JScywgQVBJQywgVE9NcyBvciBvdGhlciBzcGVjaWFsIGFkZHJlc3MgcmVnaW9uCisJMHgwNCBIb3N0IHBhZ2Ugc2l6ZSBpcyBsYXJnZXIgdGhhbiB0aGUgZ3Vlc3QgcGFnZSBzaXplCituYW1lOmwxX2wyX2l0bGJfbWlzcyB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDA3CisJMHgwMSBJbnN0cnVjdGlvbiBmZXRjaGVzIHRvIGEgNEsgcGFnZQorCTB4MDIgSW5zdHJ1Y3Rpb24gZmV0Y2hlcyB0byBhIDJNIHBhZ2UKKwkweDA0IEluc3RydWN0aW9uIGZldGNoZXMgdG8gYSAxRyBwYWdlCituYW1lOmljYWNoZV9pbnZhbGlkYXRlZCB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDBmCisJMHgwMSBOb24tU01DIGludmFsaWRhdGluZyBwcm9iZSB0aGF0IG1pc3NlZCBvbiBpbi1mbGlnaHQgaW5zdHJ1Y3Rpb25zCisJMHgwMiBOb24tU01DIGludmFsaWRhdGluZyBwcm9iZSB0aGF0IGhpdCBvbiBpbi1mbGlnaHQgaW5zdHJ1Y3Rpb25zCisJMHgwNCBTTUMgaW52YWxpZGF0aW5nIHByb2JlIHRoYXQgbWlzc2VkIG9uIGluLWZsaWdodCBpbnN0cnVjdGlvbnMKKwkweDA4IFNNQyBpbnZhbGlkYXRpbmcgcHJvYmUgdGhhdCBoaXQgb24gaW4tZmxpZ2h0IGluc3RydWN0aW9ucworbmFtZTpmcHVfaW5zdHIgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwNworCTB4MDEgeDg3IGluc3RydWN0aW9ucworCTB4MDIgTU1YKHRtKSBpbnN0cnVjdGlvbnMKKwkweDA0IFNTRSBpbnN0cnVjdGlvbnMgKFNTRSxTU0UyLFNTRTMsU1NTRTMsU1NFNEEsU1NFNC4xLFNTRTQuMixBVlgsWE9QLEZNQTQpCituYW1lOmZwdV9leGNlcHRpb25zIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MWYKKwkweDAxIFRvdGFsIG1pY3JvZmF1bHRzCisJMHgwMiBUb3RhbCBtaWNyb3RyYXBzCisJMHgwNCBJbnQyRXh0IGZhdWx0cworCTB4MDggRXh0MkludCBmYXVsdHMKKwkweDEwIEJ5cGFzcyBmYXVsdHMKK25hbWU6aWJzX29wc190YWdnZWQgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwMQorCTB4MDEgTnVtYmVyIG9mIG9wcyB0YWdnZWQgYnkgSUJTCisJMHgwMiBOdW1iZXIgb2Ygb3BzIHRhZ2dlZCBieSBJQlMgdGhhdCByZXRpcmVkCisJMHgwNCBOdW1iZXIgb2YgdGltZXMgb3AgY291bGQgbm90IGJlIHRhZ2dlZCBieSBJQlMgYmVjYXVzZSBvZiBwcmV2aW91cyB0YWdnZWQgb3AgdGhhdCBoYXMgbm90IHJldGlyZWQKK25hbWU6bHNfZGlzcGF0Y2ggdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwNworCTB4MDEgTG9hZHMKKwkweDAyIFN0b3JlcworCTB4MDQgTG9hZC1vcC1TdG9yZXMKK25hbWU6bDJfcHJlZmV0Y2hlcl90cmlnZ2VyIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MDMKKwkweDAxIExvYWQgTDEgbWlzcyBzZWVuIGJ5IHByZWZldGNoZXIKKwkweDAyIFN0b3JlIEwxIG1pc3Mgc2VlbiBieSBwcmVmZXRjaGVyCituYW1lOmlic19vcCB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDAxCisJMHgwMCBVc2luZyBJQlMgT1AgY3ljbGUgY291bnQgbW9kZQorCTB4MDEgVXNpbmcgSUJTIE9QIGRpc3BhdGNoIGNvdW50IG1vZGUKKwkweDAyIEVuYWJsZSBJQlMgT1AgTWVtb3J5IEFjY2VzcyBMb2cKKwkweDA0IEVuYWJsZSBJQlMgT1AgQnJhbmNoIFRhcmdldCBBZGRyZXNzIExvZwpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL3g4Ni02NC9oYW1tZXIvZXZlbnRzIGIvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL3g4Ni02NC9oYW1tZXIvZXZlbnRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4NjQ4MmIKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9ldmVudHMveDg2LTY0L2hhbW1lci9ldmVudHMKQEAgLTAsMCArMSwxMjUgQEAKKyMKKyMgQU1EIEF0aGxvbih0bSk2NCBhbmQgQU1EIE9wdGVyb24odG0pIHByb2Nlc3NvciB1bml0IG1hc2tzCisjCisjIENvcHlyaWdodCBPUHJvZmlsZSBhdXRob3JzCisjIENvcHlyaWdodCAoYykgMjAwNi0yMDA4IEFkdmFuY2VkIE1pY3JvIERldmljZXMKKyMgQ29udHJpYnV0ZWQgYnkgUmF5IEJyeWFudCA8cmF5YnJ5IGF0IGFtZC5jb20+CisjCQlKYXNvbiBZZWggPGphc29uLnllaCBhdCBhbWQuY29tPgorIwkJU3VyYXZlZSBTdXRoaWt1bHBhbml0IDxzdXJhdmVlLnN1dGhpa3VscGFuaXQgYXQgYW1kLmNvbT4KKyMJCVBhdWwgRHJvbmdvd3NraSA8cGF1bC5kcm9uZ293c2tpIGF0IGFtZC5jb20+CisjCisjIFNvdXJjZTogQklPUyBhbmQgS2VybmVsIERldmVsb3BlcidzIEd1aWRlIGZvciBBTUQgTlBUIEZhbWlseSAwRmggUHJvY2Vzc29ycywKKyMgICAgICAgICBQdWJsaWNhdGlvbiMgMzI1NTksIFJldmlzaW9uIDMuMDgsIEp1bHkgMjAwNworIworIyBUaGlzIGZpbGUgd2FzIGxhc3QgdXBkYXRlZCBvbiAxMCBKYW51YXJ5IDIwMDg6CisjCisjICAgIFNvcnRlZCBieSBldmVudCBzZWxlY3QgdmFsdWUgZm9yIGVhc2llciBtYWludGVuYW5jZSBhbmQgdG8gYmUKKyMgICAgY29uc2lzdGVudCB3aXRoIGV2ZW50cyBmb3Igb3RoZXIgQU1EIHByb2Nlc3NvciBmYW1pbGllcy4KKyMgICAgICAgICAgICAgICAgCisjICAgIFVwZGF0ZWQgZm9yIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGUgQktERy4KKyMKKyMgRmxvYXRpbmcgcG9pbnQgZXZlbnRzCitldmVudDoweDAwIGNvdW50ZXJzOjAsMSwyLDMgdW06ZnB1X29wcyBtaW5pbXVtOjUwMCBuYW1lOkRJU1BBVENIRURfRlBVX09QUyA6IERpc3BhdGNoZWQgRlBVIG9wcworZXZlbnQ6MHgwMSBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpDWUNMRVNfTk9fRlBVX09QU19SRVRJUkVEIDogQ3ljbGVzIHdpdGggbm8gRlBVIG9wcyByZXRpcmVkCitldmVudDoweDAyIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRJU1BBVENIRURfRlBVX09QU19GQVNUX0ZMQUcgOiBEaXNwYXRjaGVkIEZQVSBvcHMgdGhhdCB1c2UgdGhlIGZhc3QgZmxhZyBpbnRlcmZhY2UKKworIyBMb2FkLCBTdG9yZSwgYW5kIFRMQiBldmVudHMKK2V2ZW50OjB4MjAgY291bnRlcnM6MCwxLDIsMyB1bTpzZWdyZWdsb2FkIG1pbmltdW06NTAwIG5hbWU6U0VHTUVOVF9SRUdJU1RFUl9MT0FEUyA6IFNlZ21lbnQgcmVnaXN0ZXIgbG9hZHMKK2V2ZW50OjB4MjEgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6UElQRUxJTkVfUkVTVEFSVF9EVUVfVE9fU0VMRl9NT0RJRllJTkdfQ09ERSA6IE1pY3JvLWFyY2hpdGVjdHVyYWwgcmUtc3luYyBjYXVzZWQgYnkgc2VsZiBtb2RpZnlpbmcgY29kZQorZXZlbnQ6MHgyMiBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpQSVBFTElORV9SRVNUQVJUX0RVRV9UT19QUk9CRV9ISVQgOiBNaWNyby1hcmNoaXRlY3R1cmFsIHJlLXN5bmMgY2F1c2VkIGJ5IHNub29wCitldmVudDoweDIzIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkxTX0JVRkZFUl8yX0ZVTExfQ1lDTEVTIDogQ3ljbGVzIExTIEJ1ZmZlciAyIGZ1bGwKK2V2ZW50OjB4MjQgY291bnRlcnM6MCwxLDIsMyB1bTpsb2NrZWRfb3BzIG1pbmltdW06NTAwIG5hbWU6TE9DS0VEX09QUyA6IExvY2tlZCBvcGVyYXRpb25zCisKKyMgRXhlY3V0aW9uIFVuaXQgRXZlbnRzCitldmVudDoweDI2IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlJFVElSRURfQ0xGTFVTSF9JTlNUUlVDVElPTlMgOiBSZXRpcmVkIENMRkxVU0ggaW5zdHJ1Y3Rpb25zCitldmVudDoweDI3IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlJFVElSRURfQ1BVSURfSU5TVFJVQ1RJT05TIDogUmV0aXJlZCBDUFVJRCBpbnN0cnVjdGlvbnMKKworIyBEYXRhIENhY2hlIGV2ZW50CitldmVudDoweDQwIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRBVEFfQ0FDSEVfQUNDRVNTRVMgOiBEYXRhIGNhY2hlIGFjY2Vzc2VzCitldmVudDoweDQxIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRBVEFfQ0FDSEVfTUlTU0VTIDogRGF0YSBjYWNoZSBtaXNzZXMKKyMgRXZlbnQgMHg0MiB3aXRoIHVuaXQgbWFzayAweDAxIGNvdW50cyBzYW1lIGV2ZW50cyBhcyBldmVudCBzZWxlY3QgMHg0MworZXZlbnQ6MHg0MiBjb3VudGVyczowLDEsMiwzIHVtOm1vZXNzIG1pbmltdW06NTAwIG5hbWU6REFUQV9DQUNIRV9SRUZJTExTX0ZST01fTDJfT1JfU1lTVEVNIDogRGF0YSBjYWNoZSByZWZpbGxzIGZyb20gTDIgb3Igc3lzdGVtCitldmVudDoweDQzIGNvdW50ZXJzOjAsMSwyLDMgdW06bW9lc2kgbWluaW11bTo1MDAgbmFtZTpEQVRBX0NBQ0hFX1JFRklMTFNfRlJPTV9TWVNURU0gOiBEYXRhIGNhY2hlIHJlZmlsbHMgZnJvbSBzeXN0ZW0KK2V2ZW50OjB4NDQgY291bnRlcnM6MCwxLDIsMyB1bTptb2VzaSBtaW5pbXVtOjUwMCBuYW1lOkRBVEFfQ0FDSEVfTElORVNfRVZJQ1RFRCA6IERhdGEgY2FjaGUgbGluZXMgZXZpY3RlZAorZXZlbnQ6MHg0NSBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpMMV9EVExCX01JU1NfQU5EX0wyX0RUTEJfSElUIDogTDEgRFRMQiBtaXNzZXMgYW5kIEwyIERUTEIgaGl0cworZXZlbnQ6MHg0NiBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpMMV9EVExCX0FORF9MMl9EVExCX01JU1MgOiBMMSBhbmQgTDIgRFRMQiBtaXNzZXMKK2V2ZW50OjB4NDcgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6TUlTQUxJR05FRF9BQ0NFU1NFUyA6IE1pc2FsaWduZWQgQWNjZXNzZXMKK2V2ZW50OjB4NDggY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6TUlDUk9BUkNISVRFQ1RVUkFMX0xBVEVfQ0FOQ0VMX09GX0FOX0FDQ0VTUyA6IE1pY3JvLWFyY2hpdGVjdHVyYWwgbGF0ZSBjYW5jZWwgb2YgYW4gYWNjZXNzCitldmVudDoweDQ5IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOk1JQ1JPQVJDSElURUNUVVJBTF9FQVJMWV9DQU5DRUxfT0ZfQU5fQUNDRVNTIDogTWljcm8tYXJjaGl0ZWN0dXJhbCBlYXJseSBjYW5jZWwgb2YgYW4gYWNjZXNzCitldmVudDoweDRhIGNvdW50ZXJzOjAsMSwyLDMgdW06ZWNjIG1pbmltdW06NTAwIG5hbWU6U0NSVUJCRVJfU0lOR0xFX0JJVF9FQ0NfRVJST1JTIDogT25lIGJpdCBFQ0MgZXJyb3IgcmVjb3JkZWQgYnkgc2NydWJiZXIKK2V2ZW50OjB4NGIgY291bnRlcnM6MCwxLDIsMyB1bTpwcmVmZXRjaCBtaW5pbXVtOjUwMCBuYW1lOlBSRUZFVENIX0lOU1RSVUNUSU9OU19ESVNQQVRDSEVEIDogUHJlZmV0Y2ggaW5zdHJ1Y3Rpb25zIGRpc3BhdGNoZWQKK2V2ZW50OjB4NGMgY291bnRlcnM6MCwxLDIsMyB1bTpkY2FjaGVtaXNzbG9ja2VkIG1pbmltdW06NTAwIG5hbWU6RENBQ0hFX01JU1NfTE9DS0VEX0lOU1RSVUNUSU9OUyA6IERDQUNIRSBtaXNzZXMgYnkgbG9ja2VkIGluc3RydWN0aW9ucworCisjIEwyIENhY2hlIGFuZCBTeXN0ZW0gSW50ZXJmYWNlIGV2ZW50cworZXZlbnQ6MHg2NSBjb3VudGVyczowLDEsMiwzIHVtOm1lbXJlcXR5cGUgbWluaW11bTo1MDAgbmFtZTpNRU1PUllfUkVRVUVTVFMgOiBNZW1vcnkgcmVxdWVzdHMgYnkgdHlwZQorZXZlbnQ6MHg2NyBjb3VudGVyczowLDEsMiwzIHVtOmRhdGFwcmVmZXRjaCBtaW5pbXVtOjUwMCBuYW1lOkRBVEFfUFJFRkVUQ0hFUyA6IERhdGEgcHJlZmV0Y2hlcgorZXZlbnQ6MHg2YyBjb3VudGVyczowLDEsMiwzIHVtOnN5c3RlbXJlYWRyZXNwb25zZSBtaW5pbXVtOjUwMCBuYW1lOlNZU1RFTV9SRUFEX1JFU1BPTlNFUyA6IFN5c3RlbSByZWFkIHJlc3BvbnNlcyBieSBjb2hlcmVuY3kgc3RhdGUKK2V2ZW50OjB4NmQgY291bnRlcnM6MCwxLDIsMyB1bTp3cml0dGVudG9zeXN0ZW0gbWluaW11bTo1MDAgbmFtZTpRVUFEV09SRF9XUklURV9UUkFOU0ZFUlMgOiBRdWFkd29yZHMgd3JpdHRlbiB0byBzeXN0ZW0KK2V2ZW50OjB4NzYgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06MzAwMCBuYW1lOkNQVV9DTEtfVU5IQUxURUQgOiBDeWNsZXMgb3V0c2lkZSBvZiBoYWx0IHN0YXRlCitldmVudDoweDdkIGNvdW50ZXJzOjAsMSwyLDMgdW06bDJfaW50ZXJuYWwgbWluaW11bTo1MDAgbmFtZTpSRVFVRVNUU19UT19MMiA6IFJlcXVlc3RzIHRvIEwyIGNhY2hlCitldmVudDoweDdlIGNvdW50ZXJzOjAsMSwyLDMgdW06bDJfcmVxX21pc3MgbWluaW11bTo1MDAgbmFtZTpMMl9DQUNIRV9NSVNTIDogTDIgY2FjaGUgbWlzc2VzCitldmVudDoweDdmIGNvdW50ZXJzOjAsMSwyLDMgdW06bDJfZmlsbCBtaW5pbXVtOjUwMCBuYW1lOkwyX0NBQ0hFX0ZJTExfV1JJVEVCQUNLIDogTDIgZmlsbC93cml0ZWJhY2sKKworIyBJbnN0cnVjdGlvbiBDYWNoZSBldmVudHMKK2V2ZW50OjB4ODAgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SU5TVFJVQ1RJT05fQ0FDSEVfRkVUQ0hFUyA6IEluc3RydWN0aW9uIGNhY2hlIGZldGNoZXMKK2V2ZW50OjB4ODEgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SU5TVFJVQ1RJT05fQ0FDSEVfTUlTU0VTIDogSW5zdHJ1Y3Rpb24gY2FjaGUgbWlzc2VzCitldmVudDoweDgyIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOklOU1RSVUNUSU9OX0NBQ0hFX1JFRklMTFNfRlJPTV9MMiA6IEluc3RydWN0aW9uIGNhY2hlIHJlZmlsbHMgZnJvbSBMMgorZXZlbnQ6MHg4MyBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJTlNUUlVDVElPTl9DQUNIRV9SRUZJTExTX0ZST01fU1lTVEVNIDogSW5zdHJ1Y3Rpb24gY2FjaGUgcmVmaWxscyBmcm9tIHN5c3RlbQorZXZlbnQ6MHg4NCBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpMMV9JVExCX01JU1NfQU5EX0wyX0lUTEJfSElUIDogTDEgSVRMQiBtaXNzIGFuZCBMMiBJVExCIGhpdAorZXZlbnQ6MHg4NSBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpMMV9JVExCX01JU1NfQU5EX0wyX0lUTEJfTUlTUyA6IEwxIElUTEIgbWlzcyBhbmQgTDIgSVRMQiBtaXNzCitldmVudDoweDg2IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlBJUEVMSU5FX1JFU1RBUlRfRFVFX1RPX0lOU1RSVUNUSU9OX1NUUkVBTV9QUk9CRSA6IFBpcGVsaW5lIHJlc3RhcnQgZHVlIHRvIGluc3RydWN0aW9uIHN0cmVhbSBwcm9iZQorZXZlbnQ6MHg4NyBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpJTlNUUlVDVElPTl9GRVRDSF9TVEFMTCA6IEluc3RydWN0aW9uIGZldGNoIHN0YWxsCitldmVudDoweDg4IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlJFVFVSTl9TVEFDS19ISVRTIDogUmV0dXJuIHN0YWNrIGhpdHMKK2V2ZW50OjB4ODkgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6UkVUVVJOX1NUQUNLX09WRVJGTE9XUyA6IFJldHVybiBzdGFjayBvdmVyZmxvd3MKKworIyBFeGVjdXRpb24gVW5pdCBldmVudHMKK2V2ZW50OjB4YzAgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06MzAwMCBuYW1lOlJFVElSRURfSU5TVFJVQ1RJT05TIDogUmV0aXJlZCBpbnN0cnVjdGlvbnMgKGluY2x1ZGVzIGV4Y2VwdGlvbnMsIGludGVycnVwdHMsIHJlLXN5bmNzKQorZXZlbnQ6MHhjMSBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpSRVRJUkVEX1VPUFMgOiBSZXRpcmVkIG1pY3JvLW9wcworZXZlbnQ6MHhjMiBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpSRVRJUkVEX0JSQU5DSF9JTlNUUlVDVElPTlMgOiBSZXRpcmVkIGJyYW5jaGVzIChjb25kaXRpb25hbCwgdW5jb25kaXRpb25hbCwgZXhjZXB0aW9ucywgaW50ZXJydXB0cykKK2V2ZW50OjB4YzMgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6UkVUSVJFRF9NSVNQUkVESUNURURfQlJBTkNIX0lOU1RSVUNUSU9OUyA6IFJldGlyZWQgbWlzcHJlZGljdGVkIGJyYW5jaCBpbnN0cnVjdGlvbnMKK2V2ZW50OjB4YzQgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6UkVUSVJFRF9UQUtFTl9CUkFOQ0hfSU5TVFJVQ1RJT05TIDogUmV0aXJlZCB0YWtlbiBicmFuY2ggaW5zdHJ1Y3Rpb25zCitldmVudDoweGM1IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlJFVElSRURfVEFLRU5fQlJBTkNIX0lOU1RSVUNUSU9OU19NSVNQUkVESUNURUQgOiBSZXRpcmVkIHRha2VuIGJyYW5jaGVzIG1pc3ByZWRpY3RlZAorZXZlbnQ6MHhjNiBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpSRVRJUkVEX0ZBUl9DT05UUk9MX1RSQU5TRkVSUyA6IFJldGlyZWQgZmFyIGNvbnRyb2wgdHJhbnNmZXJzCitldmVudDoweGM3IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlJFVElSRURfQlJBTkNIX1JFU1lOQ1MgOiBSZXRpcmVkIGJyYW5jaGVzIHJlc3luY3MgKG9ubHkgbm9uLWNvbnRyb2wgdHJhbnNmZXIgYnJhbmNoZXMpCitldmVudDoweGM4IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlJFVElSRURfTkVBUl9SRVRVUk5TIDogUmV0aXJlZCBuZWFyIHJldHVybnMKK2V2ZW50OjB4YzkgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6UkVUSVJFRF9ORUFSX1JFVFVSTlNfTUlTUFJFRElDVEVEIDogUmV0aXJlZCBuZWFyIHJldHVybnMgbWlzcHJlZGljdGVkCitldmVudDoweGNhIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOlJFVElSRURfSU5ESVJFQ1RfQlJBTkNIRVNfTUlTUFJFRElDVEVEIDogUmV0aXJlZCBpbmRpcmVjdCBicmFuY2hlcyBtaXNwcmVkaWN0ZWQKK2V2ZW50OjB4Y2IgY291bnRlcnM6MCwxLDIsMyB1bTpmcHVfaW5zdHIgbWluaW11bTo1MDAgbmFtZTpSRVRJUkVEX01NWF9GUF9JTlNUUlVDVElPTlMgOiBSZXRpcmVkIE1NWC9GUCBpbnN0cnVjdGlvbnMKK2V2ZW50OjB4Y2MgY291bnRlcnM6MCwxLDIsMyB1bTpmcHVfZmFzdHBhdGggbWluaW11bTo1MDAgbmFtZTpSRVRJUkVEX0ZBU1RQQVRIX0RPVUJMRV9PUF9JTlNUUlVDVElPTlMgOiBSZXRpcmVkIEZhc3RQYXRoIGRvdWJsZS1vcCBpbnN0cnVjdGlvbnMKK2V2ZW50OjB4Y2QgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6SU5URVJSVVBUU19NQVNLRURfQ1lDTEVTIDogQ3ljbGVzIHdpdGggaW50ZXJydXB0cyBtYXNrZWQgKElGPTApCitldmVudDoweGNlIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOklOVEVSUlVQVFNfTUFTS0VEX0NZQ0xFU19XSVRIX0lOVEVSUlVQVF9QRU5ESU5HIDogQ3ljbGVzIHdpdGggaW50ZXJydXB0cyBtYXNrZWQgd2hpbGUgaW50ZXJydXB0IHBlbmRpbmcKK2V2ZW50OjB4Y2YgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06MTAgbmFtZTpJTlRFUlJVUFRTX1RBS0VOIDogTnVtYmVyIG9mIHRha2VuIGhhcmR3YXJlIGludGVycnVwdHMKK2V2ZW50OjB4ZDAgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6REVDT0RFUl9FTVBUWSA6IE5vdGhpbmcgdG8gZGlzcGF0Y2ggKGRlY29kZXIgZW1wdHkpCitldmVudDoweGQxIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRJU1BBVENIX1NUQUxMUyA6IERpc3BhdGNoIHN0YWxscworZXZlbnQ6MHhkMiBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpESVNQQVRDSF9TVEFMTF9GT1JfQlJBTkNIX0FCT1JUIDogRGlzcGF0Y2ggc3RhbGwgZnJvbSBicmFuY2ggYWJvcnQgdG8gcmV0aXJlCitldmVudDoweGQzIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRJU1BBVENIX1NUQUxMX0ZPUl9TRVJJQUxJWkFUSU9OIDogRGlzcGF0Y2ggc3RhbGwgZm9yIHNlcmlhbGl6YXRpb24KK2V2ZW50OjB4ZDQgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RElTUEFUQ0hfU1RBTExfRk9SX1NFR01FTlRfTE9BRCA6IERpc3BhdGNoIHN0YWxsIGZvciBzZWdtZW50IGxvYWQKK2V2ZW50OjB4ZDUgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6RElTUEFUQ0hfU1RBTExfRk9SX1JFT1JERVJfQlVGRkVSX0ZVTEwgOiBEaXNwYXRjaCBzdGFsbCBmb3IgcmVvcmRlciBidWZmZXIgZnVsbAorZXZlbnQ6MHhkNiBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpESVNQQVRDSF9TVEFMTF9GT1JfUkVTRVJWQVRJT05fU1RBVElPTl9GVUxMIDogRGlzcGF0Y2ggc3RhbGwgd2hlbiByZXNlcnZhdGlvbiBzdGF0aW9ucyBhcmUgZnVsbAorZXZlbnQ6MHhkNyBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bTo1MDAgbmFtZTpESVNQQVRDSF9TVEFMTF9GT1JfRlBVX0ZVTEwgOiBEaXNwYXRjaCBzdGFsbCB3aGVuIEZQVSBpcyBmdWxsCitldmVudDoweGQ4IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRJU1BBVENIX1NUQUxMX0ZPUl9MU19GVUxMIDogRGlzcGF0Y2ggc3RhbGwgd2hlbiBMUyBpcyBmdWxsCitldmVudDoweGQ5IGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRJU1BBVENIX1NUQUxMX1dBSVRJTkdfRk9SX0FMTF9RVUlFVCA6IERpc3BhdGNoIHN0YWxsIHdoZW4gd2FpdGluZyBmb3IgYWxsIHRvIGJlIHF1aWV0CitldmVudDoweGRhIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjUwMCBuYW1lOkRJU1BBVENIX1NUQUxMX0ZPUl9GQVJfVFJBTlNGRVJfT1JfUkVTWU5DIDogRGlzcGF0Y2ggc3RhbGwgZm9yIGZhciB0cmFuc2ZlciBvciByZXN5bmMgdG8gcmV0aXJlCitldmVudDoweGRiIGNvdW50ZXJzOjAsMSwyLDMgdW06ZnB1X2V4Y2VwdGlvbnMgbWluaW11bToxIG5hbWU6RlBVX0VYQ0VQVElPTlMgOiBGUFUgZXhjZXB0aW9ucworZXZlbnQ6MHhkYyBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bToxIG5hbWU6RFIwX0JSRUFLUE9JTlRTIDogTnVtYmVyIG9mIGJyZWFrcG9pbnRzIGZvciBEUjAKK2V2ZW50OjB4ZGQgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06MSBuYW1lOkRSMV9CUkVBS1BPSU5UUyA6IE51bWJlciBvZiBicmVha3BvaW50cyBmb3IgRFIxCitldmVudDoweGRlIGNvdW50ZXJzOjAsMSwyLDMgdW06emVybyBtaW5pbXVtOjEgbmFtZTpEUjJfQlJFQUtQT0lOVFMgOiBOdW1iZXIgb2YgYnJlYWtwb2ludHMgZm9yIERSMgorZXZlbnQ6MHhkZiBjb3VudGVyczowLDEsMiwzIHVtOnplcm8gbWluaW11bToxIG5hbWU6RFIzX0JSRUFLUE9JTlRTIDogTnVtYmVyIG9mIGJyZWFrcG9pbnRzIGZvciBEUjMKKworIyBNZW1vcnkgQ29udHJvbGVyIGV2ZW50cworZXZlbnQ6MHhlMCBjb3VudGVyczowLDEsMiwzIHVtOnBhZ2VfYWNjZXNzIG1pbmltdW06NTAwIG5hbWU6RFJBTV9BQ0NFU1NFUyA6IERSQU0gYWNjZXNzZXMKK2V2ZW50OjB4ZTEgY291bnRlcnM6MCwxLDIsMyB1bTp6ZXJvIG1pbmltdW06NTAwIG5hbWU6TUVNT1JZX0NPTlRST0xMRVJfUEFHRV9UQUJMRV9PVkVSRkxPV1MgOiBNZW1vcnkgY29udHJvbGxlciBwYWdlIHRhYmxlIG92ZXJmbG93cworZXZlbnQ6MHhlMyBjb3VudGVyczowLDEsMiwzIHVtOnR1cm5hcm91bmQgbWluaW11bTo1MDAgbmFtZTpNRU1PUllfQ09OVFJPTExFUl9UVVJOQVJPVU5EUyA6IE1lbW9yeSBjb250cm9sbGVyIHR1cm5hcm91bmRzCitldmVudDoweGU0IGNvdW50ZXJzOjAsMSwyLDMgdW06c2F0dXJhdGlvbiBtaW5pbXVtOjUwMCBuYW1lOk1FTU9SWV9DT05UUk9MTEVSX0JZUEFTU19DT1VOVEVSX1NBVFVSQVRJT04gOiBNZW1vcnkgY29udHJvbGxlciBieXBhc3Mgc2F0dXJhdGlvbgorZXZlbnQ6MHhlNSBjb3VudGVyczowLDEsMiwzIHVtOnNpemVkYmxvY2tzIG1pbmltdW06NTAwIG5hbWU6U0laRURfQkxPQ0tTIDogU2l6ZWQgYmxvY2tzCitldmVudDoweGU4IGNvdW50ZXJzOjAsMSwyLDMgdW06dGhlcm1hbGVjYyBtaW5pbXVtOjUwMCBuYW1lOlRIRVJNQUxfU1RBVFVTX0FORF9EUkFNX0VDQ19FUlJPUlMgOiBUaGVybWFsIHN0YXR1cyBhbmQgRUNDIGVycm9ycworZXZlbnQ6MHhlOSBjb3VudGVyczowLDEsMiwzIHVtOmNwaW9yZXF1ZXN0cyBtaW5pbXVtOjUwMCBuYW1lOkNQVV9JT19SRVFVRVNUU19UT19NRU1PUllfSU8gOiBDUFUvSU8gcmVxdWVzdHMgdG8gbWVtb3J5L0lPIChSZXZFKQorZXZlbnQ6MHhlYSBjb3VudGVyczowLDEsMiwzIHVtOmNhY2hlYmxvY2sgbWluaW11bTo1MDAgbmFtZTpDQUNIRV9CTE9DS19DT01NQU5EUyA6IENhY2hlIGJsb2NrIGNvbW1hbmRzIChSZXZFKQorZXZlbnQ6MHhlYiBjb3VudGVyczowLDEsMiwzIHVtOnNpemVjbWRzIG1pbmltdW06NTAwIG5hbWU6U0laRURfQ09NTUFORFMgOiBTaXplZCBjb21tYW5kcworZXZlbnQ6MHhlYyBjb3VudGVyczowLDEsMiwzIHVtOnByb2JlIG1pbmltdW06NTAwIG5hbWU6UFJPQkVfUkVTUE9OU0VTX0FORF9VUFNUUkVBTV9SRVFVRVNUUyA6IFByb2JlIHJlc3BvbnNlcyBhbmQgdXBzdHJlYW0gcmVxdWVzdHMKK2V2ZW50OjB4ZWUgY291bnRlcnM6MCwxLDIsMyB1bTpnYXJ0IG1pbmltdW06NTAwIG5hbWU6R0FSVF9FVkVOVFMgOiBHQVJUIGV2ZW50cworCisjIExpbmsgZXZlbnRzCitldmVudDoweGY2IGNvdW50ZXJzOjAsMSwyLDMgdW06aHQgbWluaW11bTo1MDAgbmFtZTpIWVBFUlRSQU5TUE9SVF9MSU5LMF9CQU5EV0lEVEggOiBIeXBlclRyYW5zcG9ydCh0bSkgbGluayAwIHRyYW5zbWl0IGJhbmR3aWR0aAorZXZlbnQ6MHhmNyBjb3VudGVyczowLDEsMiwzIHVtOmh0IG1pbmltdW06NTAwIG5hbWU6SFlQRVJUUkFOU1BPUlRfTElOSzFfQkFORFdJRFRIIDogSHlwZXJUcmFuc3BvcnQodG0pIGxpbmsgMSB0cmFuc21pdCBiYW5kd2lkdGgKK2V2ZW50OjB4ZjggY291bnRlcnM6MCwxLDIsMyB1bTpodCBtaW5pbXVtOjUwMCBuYW1lOkhZUEVSVFJBTlNQT1JUX0xJTksyX0JBTkRXSURUSCA6IEh5cGVyVHJhbnNwb3J0KHRtKSBsaW5rIDIgdHJhbnNtaXQgYmFuZHdpZHRoCmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9ldmVudHMveDg2LTY0L2hhbW1lci91bml0X21hc2tzIGIvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL3g4Ni02NC9oYW1tZXIvdW5pdF9tYXNrcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZThlYTY2Ci0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvZXZlbnRzL3g4Ni02NC9oYW1tZXIvdW5pdF9tYXNrcwpAQCAtMCwwICsxLDE4NiBAQAorIworIyBBTUQgQXRobG9uKHRtKTY0IGFuZCBBTUQgT3B0ZXJvbih0bSkgcHJvY2Vzc29yIHVuaXQgbWFza3MKKyMKKyMgQ29weXJpZ2h0IE9Qcm9maWxlIGF1dGhvcnMKKyMgQ29weXJpZ2h0IChjKSBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCAyMDA2LTIwMDgKKyMgQ29udHJpYnV0ZWQgYnkgUmF5IEJyeWFudCA8cmF5YnJ5QGFtZC5jb20+LCBhbmQgb3RoZXJzLgorIworIyBTb3VyY2U6IEJJT1MgYW5kIEtlcm5lbCBEZXZlbG9wZXIncyBHdWlkZSBmb3IgQU1EIE5QVCBGYW1pbHkgMEZoIFByb2Nlc3NvcnMsCisjICAgICAgICAgUHVibGljYXRpb24jIDMyNTU5LCBSZXZpc2lvbiAzLjA4LCBKdWx5IDIwMDcKKyMKKyMgVGhpcyBmaWxlIHdhcyBsYXN0IHVwZGF0ZWQgb24gMTAgSmFudWFyeSAyMDA4OgorIworIyAgICBVbml0IG1hc2sgKHdyaXR0ZW50b3N5c3RlbSkgd2FzIGFkZGVkIGZvciB0aGUKKyMgICAgUVVBRFdPUkRfV1JJVEVfVFJBTlNGRVJTIGV2ZW50LgorIworbmFtZTp6ZXJvIHR5cGU6bWFuZGF0b3J5IGRlZmF1bHQ6MHgwCisJMHgwIE5vIHVuaXQgbWFzaworbmFtZTptb2VzaSB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDFmCisJMHgwMSAoSSludmFsaWQgY2FjaGUgc3RhdGUKKwkweDAyIChTKWhhcmVkIGNhY2hlIHN0YXRlCisJMHgwNCAoRSl4Y2x1c2l2ZSBjYWNoZSBzdGF0ZQorCTB4MDggKE8pd25lZCBjYWNoZSBzdGF0ZQorCTB4MTAgKE0pb2RpZmllZCBjYWNoZSBzdGF0ZQorCTB4MWYgQWxsIGNhY2hlIHN0YXRlcworbmFtZTptb2VzcyB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDFlCisJMHgwMSByZWZpbGwgZnJvbSBzeXN0ZW0KKwkweDAyIChTKWhhcmVkIGNhY2hlIHN0YXRlIGZyb20gTDIKKwkweDA0IChFKXhjbHVzaXZlIGNhY2hlIHN0YXRlIGZyb20gTDIKKwkweDA4IChPKXduZWQgY2FjaGUgc3RhdGUgZnJvbSBMMgorCTB4MTAgKE0pb2RpZmllZCBjYWNoZSBzdGF0ZSBmcm9tIEwyCisJMHgxZSBBbGwgY2FjaGUgc3RhdGVzIGV4Y2VwdCBJbnZhbGlkCituYW1lOmZwdV9vcHMgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgzZgorCTB4MDEgQWRkIHBpcGUgb3BzCisJMHgwMiBNdWx0aXBseSBwaXBlCisJMHgwNCBTdG9yZSBwaXBlIG9wcworCTB4MDggQWRkIHBpcGUgbG9hZCBvcHMKKwkweDEwIE11bHRpcGx5IHBpcGUgbG9hZCBvcHMKKwkweDIwIFN0b3JlIHBpcGUgbG9hZCBvcHMKK25hbWU6c2VncmVnbG9hZCB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDdmCisJMHgwMSBFUyByZWdpc3RlcgorCTB4MDIgQ1MgcmVnaXN0ZXIKKwkweDA0IFNTIHJlZ2lzdGVyCisJMHgwOCBEUyByZWdpc3RlcgorCTB4MTAgRlMgcmVnaXN0ZXIKKwkweDIwIEdTIHJlZ2lzdGVyCisJMHg0MCBIUyByZWdpc3RlcgorbmFtZTplY2MgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwMworCTB4MDEgU2NydWJiZXIgZXJyb3IKKwkweDAyIFBpZ2d5YmFjayBzY3J1YmJlciBlcnJvcnMKK25hbWU6cHJlZmV0Y2ggdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwNworCTB4MDEgTG9hZAorCTB4MDIgU3RvcmUKKwkweDA0IE5UQQorbmFtZTpmcHVfaW5zdHIgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwZgorCTB4MDEgeDg3IGluc3RydWN0aW9ucworCTB4MDIgQ29tYmluZWQgTU1YICYgM0ROb3cgaW5zdHJ1Y3Rpb25zCisJMHgwNCBDb21iaW5lZCBwYWNrZWQgU1NFICYgU1NFMiBpbnN0cnVjdGlvbnMKKwkweDA4IENvbWJpbmVkIHBhY2tlZCBzY2FsYXIgU1NFICYgU1NFMiBpbnN0cnVjdGlvbnMKK25hbWU6ZnB1X2Zhc3RwYXRoIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MDcKKwkweDAxIFdpdGggbG93IG9wIGluIHBvc2l0aW9uIDAKKwkweDAyIFdpdGggbG93IG9wIGluIHBvc2l0aW9uIDEKKwkweDA0IFdpdGggbG93IG9wIGluIHBvc2l0aW9uIDIKK25hbWU6ZnB1X2V4Y2VwdGlvbnMgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwZgorCTB4MDEgeDg3IHJlY2xhc3MgbWljcm9mYXVsdHMKKwkweDAyIFNTRSByZXR5cGUgbWljcm9mYXVsdHMKKwkweDA0IFNTRSByZWNsYXNzIG1pY3JvZmF1bHRzCisJMHgwOCBTU0UgYW5kIHg4NyBtaWNyb3RyYXBzCituYW1lOnBhZ2VfYWNjZXNzIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MDcKKwkweDAxIFBhZ2UgaGl0CisJMHgwMiBQYWdlIG1pc3MKKwkweDA0IFBhZ2UgY29uZmxpY3QKK25hbWU6dHVybmFyb3VuZCB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDA3CisJMHgwMSBESU1NIChjaGlwIHNlbGVjdCkgdHVybmFyb3VuZAorCTB4MDIgUmVhZCB0byB3cml0ZSB0dXJuYXJvdW5kCisJMHgwNCBXcml0ZSB0byByZWFkIHR1cm5hcm91bmQKK25hbWU6c2F0dXJhdGlvbiB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDBmCisJMHgwMSBNZW1vcnkgY29udHJvbGxlciBoaWdoIHByaW9yaXR5IGJ5cGFzcworCTB4MDIgTWVtb3J5IGNvbnRyb2xsZXIgbG93IHByaW9yaXR5IGJ5cGFzcworCTB4MDQgRFJBTSBjb250cm9sbGVyIGludGVyZmFjZSBieXBhc3MKKwkweDA4IERSQU0gY29udHJvbGxlciBxdWV1ZSBieXBhc3MKK25hbWU6c2l6ZWNtZHMgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHg3ZgorCTB4MDEgTm9uLXBvc3RlZCB3cml0ZSBieXRlCisJMHgwMiBOb24tcG9zdGVkIHdyaXRlIGR3b3JkCisJMHgwNCBQb3N0ZWQgd3JpdGUgYnl0ZQorCTB4MDggUG9zdGVkIHdyaXRlIGR3b3JkCisJMHgxMCBSZWFkIGJ5dGUgKDQgYnl0ZXMpCisJMHgyMCBSZWFkIGR3b3JkICgxLTE2IGR3b3JkcykKKwkweDQwIFJlYWQtbW9kaWZ5LXdyaXRlCituYW1lOnByb2JlIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MGYKKwkweDAxIFByb2JlIG1pc3MKKwkweDAyIFByb2JlIGhpdCBjbGVhbgorCTB4MDQgUHJvYmUgaGl0IGRpcnR5IHdpdGhvdXQgbWVtb3J5IGNhbmNlbAorCTB4MDggUHJvYmUgaGl0IGRpcnR5IHdpdGggbWVtb3J5IGNhbmNlbAorCTB4MTAgVXBzdHJlYW0gZGlzcGxheSByZWZyZXNoIHJlYWRzCisJMHgyMCBVcHN0cmVhbSBub24tZGlzcGxheSByZWZyZXNoIHJlYWRzCisJMHg0MCBVcHN0cmVhbSB3cml0ZXMgKFJldkQgYW5kIGxhdGVyKQorbmFtZTpodCB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDcKKwkweDAxIENvbW1hbmQgc2VudAorCTB4MDIgRGF0YSBzZW50CisJMHgwNCBCdWZmZXIgcmVsZWFzZSBzZW50CisJMHgwOCBOT1Agc2VudAorbmFtZTpsMl9pbnRlcm5hbCB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDFmCisJMHgwMSBJQyBmaWxsCisJMHgwMiBEQyBmaWxsCisJMHgwNCBUTEIgZmlsbCAocGFnZSB0YWJsZSB3YWxrKQorCTB4MDggVGFnIHNub29wIHJlcXVlc3QKKwkweDEwIENhbmNlbGxlZCByZXF1ZXN0CituYW1lOmwyX3JlcV9taXNzIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MDcKKwkweDAxIElDIGZpbGwKKwkweDAyIERDIGZpbGwKKwkweDA0IFRMQiBwYWdlIHRhYmxlIHdhbGsKK25hbWU6bDJfZmlsbCB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDAzCisJMHgwMSBMMiBmaWxscyAodmljdGltcyBmcm9tIEwxIGNhY2hlcywgVExCIHBhZ2UgdGFibGUgd2Fsa3MgYW5kIGRhdGEgcHJlZmV0Y2hlcykKKwkweDAyIEwyIHdyaXRlYmFja3MgdG8gc3lzdGVtCituYW1lOmdhcnQgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwNworCTB4MDEgR0FSVCBhcGVydHVyZSBoaXQgb24gYWNjZXNzIGZyb20gQ1BVCisJMHgwMiBHQVJUIGFwZXJ0dXJlIGhpdCBvbiBhY2Nlc3MgZnJvbSBJL08KKwkweDA0IEdBUlQgbWlzcworbmFtZTpzaXplZGJsb2NrcyB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDNjCisJMHgwNCAzMi1ieXRlIFNpemVkIFdyaXRlcyAoUmV2RCBhbmQgbGF0ZXIpCisJMHgwOCA2NC1ieXRlIFNpemVkIFdyaXRlcyAoUmV2RCBhbmQgbGF0ZXIpCisJMHgxMCAzMi1ieXRlIFNpemVkIFJlYWRzIChSZXZEIGFuZCBsYXRlcikKKwkweDIwIDY0LWJ5dGUgU2l6ZWQgUmVhZHMgKFJldkQgYW5kIGxhdGVyKQorbmFtZTpjcGlvcmVxdWVzdHMgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHhhMgorCTB4YTEgUmVxdWVzdHMgTG9jYWwgSS9PIHRvIExvY2FsIEkvTworCTB4YTIgUmVxdWVzdHMgTG9jYWwgSS9PIHRvIExvY2FsIE1lbW9yeQorCTB4YTMgUmVxdWVzdHMgTG9jYWwgSS9PIHRvIExvY2FsIChJL08gb3IgTWVtKSAKKwkweGE0IFJlcXVlc3RzIExvY2FsIENQVSB0byBMb2NhbCBJL08KKwkweGE1IFJlcXVlc3RzIExvY2FsIChDUFUgb3IgSS9PKSB0byBMb2NhbCBJL08KKwkweGE4IFJlcXVlc3RzIExvY2FsIENQVSB0byBMb2NhbCBNZW1vcnkKKwkweGFhIFJlcXVlc3RzIExvY2FsIChDUFUgb3IgSS9PKSB0byBMb2NhbCBNZW1vcnkKKwkweGFjIFJlcXVlc3RzIExvY2FsIENQVSB0byBMb2NhbCAoSS9PIG9yIE1lbSkKKwkweGFmIFJlcXVlc3RzIExvY2FsIChDUFUgb3IgSS9PKSB0byBMb2NhbCAoSS9PIG9yIE1lbSkKKwkweDkxIFJlcXVlc3RzIExvY2FsIEkvTyB0byBSZW1vdGUgSS9PCisJMHg5MiBSZXF1ZXN0cyBMb2NhbCBJL08gdG8gUmVtb3RlIE1lbW9yeQorCTB4OTMgUmVxdWVzdHMgTG9jYWwgSS9PIHRvIFJlbW90ZSAoSS9PIG9yIE1lbSkKKwkweDk0IFJlcXVlc3RzIExvY2FsIENQVSB0byBSZW1vdGUgSS9PCisJMHg5NSBSZXF1ZXN0cyBMb2NhbCAoQ1BVIG9yIEkvTykgdG8gUmVtb3RlIEkvTworCTB4OTggUmVxdWVzdHMgTG9jYWwgQ1BVIHRvIFJlbW90ZSBNZW1vcnkKKwkweDlhIFJlcXVlc3RzIExvY2FsIChDUFUgb3IgSS9PKSB0byBSZW1vdGUgTWVtb3J5CisJMHg5YyBSZXF1ZXN0cyBMb2NhbCBDUFUgdG8gUmVtb3RlIChJL08gb3IgTWVtKQorCTB4OWYgUmVxdWVzdHMgTG9jYWwgKENQVSBvciBJL08pIHRvIFJlbW90ZSAoSS9PIG9yIE1lbSkKKwkweGIxIFJlcXVlc3RzIExvY2FsIEkvTyB0byBBbnkgSS9PCisJMHhiMiBSZXF1ZXN0cyBMb2NhbCBJL08gdG8gQW55IE1lbW9yeQorCTB4YjMgUmVxdWVzdHMgTG9jYWwgSS9PIHRvIEFueSAoSS9PIG9yIE1lbSkKKwkweGI0IFJlcXVlc3RzIExvY2FsIENQVSB0byBBbnkgSS9PCisJMHhiNSBSZXF1ZXN0cyBMb2NhbCAoQ1BVIG9yIEkvTykgdG8gQW55IEkvTworCTB4YjggUmVxdWVzdHMgTG9jYWwgQ1BVIHRvIEFueSBNZW1vcnkKKwkweGJhIFJlcXVlc3RzIExvY2FsIChDUFUgb3IgSS9PKSB0byBBbnkgTWVtb3J5CisJMHhiYyBSZXF1ZXN0cyBMb2NhbCBDUFUgdG8gQW55IChJL08gb3IgTWVtKQorCTB4YmYgUmVxdWVzdHMgTG9jYWwgKENQVSBvciBJL08pIHRvIEFueSAoSS9PIG9yIE1lbSkKKwkweDYxIFJlcXVlc3RzIFJlbW90ZSBJL08gdG8gTG9jYWwgSS9PCisJMHg2NCBSZXF1ZXN0cyBSZW1vdGUgQ1BVIHRvIExvY2FsIEkvTworCTB4NjUgUmVxdWVzdHMgUmVtb3RlIChDUFUgb3IgSS9PKSB0byBMb2NhbCBJL08KK25hbWU6Y2FjaGVibG9jayB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDNkCisJMHgwMSBWaWN0aW0gQmxvY2sgKFdyaXRlYmFjaykKKwkweDA0IFJlYWQgQmxvY2sgKERjYWNoZSBsb2FkIG1pc3MgcmVmaWxsKQorCTB4MDggUmVhZCBCbG9jayBTaGFyZWQgKEljYWNoZSByZWZpbGwpCisJMHgxMCBSZWFkIEJsb2NrIE1vZGlmaWVkIChEY2FjaGUgc3RvcmUgbWlzcyByZWZpbGwpCisJMHgyMCBDaGFuZ2UgdG8gRGlydHkgKGZpcnN0IHN0b3JlIHRvIGNsZWFuIGJsb2NrIGFscmVhZHkgaW4gY2FjaGUpCituYW1lOmRhdGFwcmVmZXRjaCB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDAzCisJMHgwMSBDYW5jZWxsZWQgcHJlZmV0Y2hlcworCTB4MDIgUHJlZmV0Y2ggYXR0ZW1wdHMKK25hbWU6bWVtcmVxdHlwZSB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDgzCisJMHgwMSBSZXF1ZXN0cyB0byBub24tY2FjaGVhYmxlIChVQykgbWVtb3J5CisJMHgwMiBSZXF1ZXN0cyB0byB3cml0ZS1jb21iaW5pbmcgKFdDKSBtZW1vcnkgb3IgV0MgYnVmZmVyIGZsdXNoZXMgdG8gV0IgbWVtb3J5CisJMHg4MCBTdHJlYW1pbmcgc3RvcmUgKFNTKSByZXF1ZXN0cworbmFtZTpzeXN0ZW1yZWFkcmVzcG9uc2UgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHg3CisJMHgwMSBFeGNsdXNpdmUKKwkweDAyIE1vZGlmaWVkCisJMHgwNCBTaGFyZWQKK25hbWU6d3JpdHRlbnRvc3lzdGVtIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MQorCTB4MDEgUXVhZHdvcmQgd3JpdGUgdHJhbnNmZXIKKyMgQktERyAzLjI4IGRvZXMgbm90IGluY2x1ZGUgdW5pdF9tYXNrIG9mIDB4MDEgZm9yICJhY2Nlc3NlcyBieSBMb2NrZWQgaW5zdHJ1Y3Rpb25zIgorbmFtZTpkY2FjaGVtaXNzbG9ja2VkIHR5cGU6Yml0bWFzayBkZWZhdWx0OjB4MDIKKwkweDAyIERhdGEgY2FjaGUgbWlzc2VzIGJ5IGxvY2tlZCBpbnN0cnVjdGlvbnMKK25hbWU6bG9ja2VkX29wcyB0eXBlOmJpdG1hc2sgZGVmYXVsdDoweDA0CisJMHgwMSBUaGUgbnVtYmVyIG9mIGxvY2tlZCBpbnN0cnVjdGlvbnMgZXhlY3V0ZWQKKwkweDAyIFRoZSBudW1iZXIgb2YgY3ljbGVzIHNwZW50IGluIHNwZWN1bGF0aXZlIHBoYXNlCisJMHgwNCBUaGUgbnVtYmVyIG9mIGN5Y2xlcyBzcGVudCBpbiBub24tc3BlY3VsYXRpdmUgcGhhc2UgKGluY2x1ZGluZyBjYWNoZSBtaXNzIHBlbmFsdHkpCituYW1lOnRoZXJtYWxlY2MgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHg4MAorCTB4MDEgTnVtYmVyIG9mIGNsb2NrcyBDUFUgaXMgYWN0aXZlIHdoZW4gSFRDIGlzIGFjdGl2ZSAoUmV2RikKKwkweDAyIE51bWJlciBvZiBjbG9ja3MgQ1BVIGNsb2NrIGlzIGluYWN0aXZlIHdoZW4gSFRDIGlzIGFjdGl2ZSAoUmV2RikKKwkweDA0IE51bWJlciBvZiBjbG9ja3Mgd2hlbiBkaWUgdGVtcGVyYXR1cmUgaXMgaGlnaGVyIHRoYW4gdGhlIHNvZnR3YXJlIGhpZ2ggdGVtcGVyYXR1cmUgdGhyZXNob2xkIChSZXZGKQorCTB4MDggTnVtYmVyIG9mIGNsb2NrcyB3aGVuIGhpZ2ggdGVtcGVyYXR1cmUgdGhyZXNob2xkIHdhcyBleGNlZWRlZCAoUmV2RikKKwkweDgwIE51bWJlciBvZiBjb3JyZWN0YWJsZSBhbmQgdW5jb3JyZWN0YWJsZSBEUkFNIEVDQyBlcnJvcnMgKFJldkUpCmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9ndWkvTWFrZWZpbGUuYW0gYi9vcHJvZmlsZS0wLjkuNy9ndWkvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWI2MmVmNgotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2d1aS9NYWtlZmlsZS5hbQpAQCAtMCwwICsxLDQyIEBACitTVUJESVJTID0gdWkKKworZGlzdF9zb3VyY2VzID0gXAorCW9wcm9mX3N0YXJ0LmNwcCBcCisJb3Byb2Zfc3RhcnRfY29uZmlnLmNwcCBcCisJb3Byb2Zfc3RhcnRfdXRpbC5jcHAgXAorCW9wcm9mX3N0YXJ0X21haW4uY3BwIFwKKwlvcHJvZl9zdGFydC5oIFwKKwlvcHJvZl9zdGFydF9jb25maWcuaCBcCisJb3Byb2Zfc3RhcnRfdXRpbC5oCisKK0VYVFJBX0RJU1QgPSAkKGRpc3Rfc291cmNlcykKKworaWYgaGF2ZV9xdAorCitBTV9DUFBGTEFHUyA9IFwKKwlAUVRfQ0ZMQUdTQCBcCisJLUkgJHt0b3Bfc3JjZGlyfS9saWJvcCBcCisJLUkgJHt0b3Bfc3JjZGlyfS9saWJ1dGlsKysgXAorCS1JICR7dG9wX3NyY2Rpcn0vbGlidXRpbAorCitBTV9DWFhGTEFHUyA9IEBPUF9DWFhGTEFHU0AKKworYmluX1BST0dSQU1TID0gb3Byb2Zfc3RhcnQKKworb3Byb2Zfc3RhcnRfU09VUkNFUyA9ICQoZGlzdF9zb3VyY2VzKQorbm9kaXN0X29wcm9mX3N0YXJ0X1NPVVJDRVMgPSBvcHJvZl9zdGFydC5tb2MuY3BwCitvcHJvZl9zdGFydF9MREFERCA9IFwKKwkuLi9saWJ1dGlsKysvbGlidXRpbCsrLmEgXAorCS4uL2xpYm9wL2xpYm9wLmEgXAorCS4uL2xpYnV0aWwvbGlidXRpbC5hIFwKKwl1aS9saWJvcHJvZl9zdGFydC5hIFwKKwlAUVRfTElCU0AgXAorCUBYX0xJQlNACisKK29wcm9mX3N0YXJ0Lm1vYy5jcHA6ICR7dG9wX3NyY2Rpcn0vZ3VpL29wcm9mX3N0YXJ0LmgKKwkkKE1PQykgLW8gJEAgJHt0b3Bfc3JjZGlyfS9ndWkvb3Byb2Zfc3RhcnQuaAorCitjbGVhbi1sb2NhbDoKKwlybSAtZiBvcHJvZl9zdGFydC5tb2MuY3BwCisKK2VuZGlmCmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9ndWkvTWFrZWZpbGUuaW4gYi9vcHJvZmlsZS0wLjkuNy9ndWkvTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA1MTlmZAotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2d1aS9NYWtlZmlsZS5pbgpAQCAtMCwwICsxLDc3MyBAQAorIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS4xMS4xIGZyb20gTWFrZWZpbGUuYW0uCisjIEBjb25maWd1cmVfaW5wdXRACisKKyMgQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLAorIyAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisjIEluYy4KKyMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKKyMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQorIyBQQVJUSUNVTEFSIFBVUlBPU0UuCisKK0BTRVRfTUFLRUAKKworVlBBVEggPSBAc3JjZGlyQAorcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACitwa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAorYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAoraW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKK2luc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKK2luc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYworSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKK3RyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKK05PUk1BTF9JTlNUQUxMID0gOgorUFJFX0lOU1RBTEwgPSA6CitQT1NUX0lOU1RBTEwgPSA6CitOT1JNQUxfVU5JTlNUQUxMID0gOgorUFJFX1VOSU5TVEFMTCA9IDoKK1BPU1RfVU5JTlNUQUxMID0gOgorYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKK2hvc3RfdHJpcGxldCA9IEBob3N0QAorQGhhdmVfcXRfVFJVRUBiaW5fUFJPR1JBTVMgPSBvcHJvZl9zdGFydCQoRVhFRVhUKQorc3ViZGlyID0gZ3VpCitESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKHNyY2RpcikvTWFrZWZpbGUuaW4KK0FDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKK2FtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL200L2JpbnV0aWxzLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2J1aWx0aW5leHBlY3QubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY2VsbHNwdWJmZHN1cHBvcnQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY29tcGlsZXJvcHRpb24ubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY29uZmlnbW9kdWxlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2NvcHlpZmNoYW5nZS5tNCAkKHRvcF9zcmNkaXIpL200L2RvY2Jvb2subTQgXAorCSQodG9wX3NyY2RpcikvbTQvZXh0cmFkaXJzLm00ICQodG9wX3NyY2RpcikvbTQvZmluZGtlcm5lbC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9rZXJuZWxvcHRpb24ubTQgXAorCSQodG9wX3NyY2RpcikvbTQva2VybmVsdmVyc2lvbi5tNCAkKHRvcF9zcmNkaXIpL200L2xpYnRvb2wubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbHRvcHRpb25zLm00ICQodG9wX3NyY2RpcikvbTQvbHRzdWdhci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9sdHZlcnNpb24ubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdH5vYnNvbGV0ZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9tYWxsb2NhdHRyaWJ1dGUubTQgXAorCSQodG9wX3NyY2RpcikvbTQvcG9wdGNvbnN0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3ByZWNvbXBpbGVkaGVhZGVyLm00ICQodG9wX3NyY2RpcikvbTQvcXQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvcmVzdWx0eW4ubTQgJCh0b3Bfc3JjZGlyKS9tNC9zc3RyZWFtLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3R5cGVkZWYubTQgJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuaW4KK2FtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCisJJChBQ0xPQ0FMX000KQorbWtpbnN0YWxsZGlycyA9ICQoaW5zdGFsbF9zaCkgLWQKK0NPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvY29uZmlnLmgKK0NPTkZJR19DTEVBTl9GSUxFUyA9CitDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMgPQorYW1fX2luc3RhbGxkaXJzID0gIiQoREVTVERJUikkKGJpbmRpcikiCitQUk9HUkFNUyA9ICQoYmluX1BST0dSQU1TKQorYW1fX29wcm9mX3N0YXJ0X1NPVVJDRVNfRElTVCA9IG9wcm9mX3N0YXJ0LmNwcCBvcHJvZl9zdGFydF9jb25maWcuY3BwIFwKKwlvcHJvZl9zdGFydF91dGlsLmNwcCBvcHJvZl9zdGFydF9tYWluLmNwcCBvcHJvZl9zdGFydC5oIFwKKwlvcHJvZl9zdGFydF9jb25maWcuaCBvcHJvZl9zdGFydF91dGlsLmgKK2FtX19vYmplY3RzXzEgPSBvcHJvZl9zdGFydC4kKE9CSkVYVCkgb3Byb2Zfc3RhcnRfY29uZmlnLiQoT0JKRVhUKSBcCisJb3Byb2Zfc3RhcnRfdXRpbC4kKE9CSkVYVCkgb3Byb2Zfc3RhcnRfbWFpbi4kKE9CSkVYVCkKK0BoYXZlX3F0X1RSVUVAYW1fb3Byb2Zfc3RhcnRfT0JKRUNUUyA9ICQoYW1fX29iamVjdHNfMSkKK0BoYXZlX3F0X1RSVUVAbm9kaXN0X29wcm9mX3N0YXJ0X09CSkVDVFMgPSBvcHJvZl9zdGFydC5tb2MuJChPQkpFWFQpCitvcHJvZl9zdGFydF9PQkpFQ1RTID0gJChhbV9vcHJvZl9zdGFydF9PQkpFQ1RTKSBcCisJJChub2Rpc3Rfb3Byb2Zfc3RhcnRfT0JKRUNUUykKK0BoYXZlX3F0X1RSVUVAb3Byb2Zfc3RhcnRfREVQRU5ERU5DSUVTID0gLi4vbGlidXRpbCsrL2xpYnV0aWwrKy5hIFwKK0BoYXZlX3F0X1RSVUVACS4uL2xpYm9wL2xpYm9wLmEgLi4vbGlidXRpbC9saWJ1dGlsLmEgXAorQGhhdmVfcXRfVFJVRUAJdWkvbGlib3Byb2Zfc3RhcnQuYQorREVGQVVMVF9JTkNMVURFUyA9IC1JLkBhbV9faXNyY0AgLUkkKHRvcF9idWlsZGRpcikKK2RlcGNvbXAgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL2RlcGNvbXAKK2FtX19kZXBmaWxlc19tYXliZSA9IGRlcGZpbGVzCithbV9fbXYgPSBtdiAtZgorQ1hYQ09NUElMRSA9ICQoQ1hYKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgXAorCSQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ1hYRkxBR1MpICQoQ1hYRkxBR1MpCitMVENYWENPTVBJTEUgPSAkKExJQlRPT0wpIC0tdGFnPUNYWCAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIFwKKwktLW1vZGU9Y29tcGlsZSAkKENYWCkgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpIFwKKwkkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NYWEZMQUdTKSAkKENYWEZMQUdTKQorQ1hYTEQgPSAkKENYWCkKK0NYWExJTksgPSAkKExJQlRPT0wpIC0tdGFnPUNYWCAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIFwKKwktLW1vZGU9bGluayAkKENYWExEKSAkKEFNX0NYWEZMQUdTKSAkKENYWEZMQUdTKSAkKEFNX0xERkxBR1MpIFwKKwkkKExERkxBR1MpIC1vICRACitDT01QSUxFID0gJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpIFwKKwkkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpCitMVENPTVBJTEUgPSAkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgXAorCS0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSBcCisJJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQorQ0NMRCA9ICQoQ0MpCitMSU5LID0gJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIFwKKwktLW1vZGU9bGluayAkKENDTEQpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgJChBTV9MREZMQUdTKSBcCisJJChMREZMQUdTKSAtbyAkQAorU09VUkNFUyA9ICQob3Byb2Zfc3RhcnRfU09VUkNFUykgJChub2Rpc3Rfb3Byb2Zfc3RhcnRfU09VUkNFUykKK0RJU1RfU09VUkNFUyA9ICQoYW1fX29wcm9mX3N0YXJ0X1NPVVJDRVNfRElTVCkKK1JFQ1VSU0lWRV9UQVJHRVRTID0gYWxsLXJlY3Vyc2l2ZSBjaGVjay1yZWN1cnNpdmUgZHZpLXJlY3Vyc2l2ZSBcCisJaHRtbC1yZWN1cnNpdmUgaW5mby1yZWN1cnNpdmUgaW5zdGFsbC1kYXRhLXJlY3Vyc2l2ZSBcCisJaW5zdGFsbC1kdmktcmVjdXJzaXZlIGluc3RhbGwtZXhlYy1yZWN1cnNpdmUgXAorCWluc3RhbGwtaHRtbC1yZWN1cnNpdmUgaW5zdGFsbC1pbmZvLXJlY3Vyc2l2ZSBcCisJaW5zdGFsbC1wZGYtcmVjdXJzaXZlIGluc3RhbGwtcHMtcmVjdXJzaXZlIGluc3RhbGwtcmVjdXJzaXZlIFwKKwlpbnN0YWxsY2hlY2stcmVjdXJzaXZlIGluc3RhbGxkaXJzLXJlY3Vyc2l2ZSBwZGYtcmVjdXJzaXZlIFwKKwlwcy1yZWN1cnNpdmUgdW5pbnN0YWxsLXJlY3Vyc2l2ZQorUkVDVVJTSVZFX0NMRUFOX1RBUkdFVFMgPSBtb3N0bHljbGVhbi1yZWN1cnNpdmUgY2xlYW4tcmVjdXJzaXZlCVwKKyAgZGlzdGNsZWFuLXJlY3Vyc2l2ZSBtYWludGFpbmVyLWNsZWFuLXJlY3Vyc2l2ZQorQU1fUkVDVVJTSVZFX1RBUkdFVFMgPSAkKFJFQ1VSU0lWRV9UQVJHRVRTOi1yZWN1cnNpdmU9KSBcCisJJChSRUNVUlNJVkVfQ0xFQU5fVEFSR0VUUzotcmVjdXJzaXZlPSkgdGFncyBUQUdTIGN0YWdzIENUQUdTIFwKKwlkaXN0ZGlyCitFVEFHUyA9IGV0YWdzCitDVEFHUyA9IGN0YWdzCitESVNUX1NVQkRJUlMgPSAkKFNVQkRJUlMpCitESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQorYW1fX3JlbGF0aXZpemUgPSBcCisgIGRpcjA9YHB3ZGA7IFwKKyAgc2VkX2ZpcnN0PSdzLF5cKFteL10qXCkvLiokJCxcMSwnOyBcCisgIHNlZF9yZXN0PSdzLF5bXi9dKi8qLCwnOyBcCisgIHNlZF9sYXN0PSdzLF4uKi9cKFteL10qXCkkJCxcMSwnOyBcCisgIHNlZF9idXRsYXN0PSdzLC8qW14vXSokJCwsJzsgXAorICB3aGlsZSB0ZXN0IC1uICIkJGRpcjEiOyBkbyBcCisgICAgZmlyc3Q9YGVjaG8gIiQkZGlyMSIgfCBzZWQgLWUgIiQkc2VkX2ZpcnN0ImA7IFwKKyAgICBpZiB0ZXN0ICIkJGZpcnN0IiAhPSAiLiI7IHRoZW4gXAorICAgICAgaWYgdGVzdCAiJCRmaXJzdCIgPSAiLi4iOyB0aGVuIFwKKyAgICAgICAgZGlyMj1gZWNobyAiJCRkaXIwIiB8IHNlZCAtZSAiJCRzZWRfbGFzdCJgLyIkJGRpcjIiOyBcCisgICAgICAgIGRpcjA9YGVjaG8gIiQkZGlyMCIgfCBzZWQgLWUgIiQkc2VkX2J1dGxhc3QiYDsgXAorICAgICAgZWxzZSBcCisgICAgICAgIGZpcnN0Mj1gZWNobyAiJCRkaXIyIiB8IHNlZCAtZSAiJCRzZWRfZmlyc3QiYDsgXAorICAgICAgICBpZiB0ZXN0ICIkJGZpcnN0MiIgPSAiJCRmaXJzdCI7IHRoZW4gXAorICAgICAgICAgIGRpcjI9YGVjaG8gIiQkZGlyMiIgfCBzZWQgLWUgIiQkc2VkX3Jlc3QiYDsgXAorICAgICAgICBlbHNlIFwKKyAgICAgICAgICBkaXIyPSIuLi8kJGRpcjIiOyBcCisgICAgICAgIGZpOyBcCisgICAgICAgIGRpcjA9IiQkZGlyMCIvIiQkZmlyc3QiOyBcCisgICAgICBmaTsgXAorICAgIGZpOyBcCisgICAgZGlyMT1gZWNobyAiJCRkaXIxIiB8IHNlZCAtZSAiJCRzZWRfcmVzdCJgOyBcCisgIGRvbmU7IFwKKyAgcmVsZGlyPSIkJGRpcjIiCitBQ0xPQ0FMID0gQEFDTE9DQUxACitBTVRBUiA9IEBBTVRBUkAKK0FSID0gQEFSQAorQVVUT0NPTkYgPSBAQVVUT0NPTkZACitBVVRPSEVBREVSID0gQEFVVE9IRUFERVJACitBVVRPTUFLRSA9IEBBVVRPTUFLRUAKK0FXSyA9IEBBV0tACitCRkRfTElCUyA9IEBCRkRfTElCU0AKK0NBVF9FTlRSWV9FTkQgPSBAQ0FUX0VOVFJZX0VOREAKK0NBVF9FTlRSWV9TVEFSVCA9IEBDQVRfRU5UUllfU1RBUlRACitDQyA9IEBDQ0AKK0NDREVQTU9ERSA9IEBDQ0RFUE1PREVACitDRkxBR1MgPSBAQ0ZMQUdTQAorQ1BQID0gQENQUEAKK0NQUEZMQUdTID0gQENQUEZMQUdTQAorQ1hYID0gQENYWEAKK0NYWENQUCA9IEBDWFhDUFBACitDWFhERVBNT0RFID0gQENYWERFUE1PREVACitDWFhGTEFHUyA9IEBDWFhGTEFHU0AKK0NZR1BBVEhfVyA9IEBDWUdQQVRIX1dACitEQVRFID0gQERBVEVACitERUZTID0gQERFRlNACitERVBESVIgPSBAREVQRElSQAorRE9DQk9PS19ST09UID0gQERPQ0JPT0tfUk9PVEAKK0RTWU1VVElMID0gQERTWU1VVElMQAorRFVNUEJJTiA9IEBEVU1QQklOQAorRUNIT19DID0gQEVDSE9fQ0AKK0VDSE9fTiA9IEBFQ0hPX05ACitFQ0hPX1QgPSBARUNIT19UQAorRUdSRVAgPSBARUdSRVBACitFWEVFWFQgPSBARVhFRVhUQAorRVhUUkFfQ0ZMQUdTX01PRFVMRSA9IEBFWFRSQV9DRkxBR1NfTU9EVUxFQAorRkdSRVAgPSBARkdSRVBACitHUkVQID0gQEdSRVBACitJTlNUQUxMID0gQElOU1RBTExACitJTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAorSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKK0lOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAorSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKK0pBVkFfSE9NRURJUiA9IEBKQVZBX0hPTUVESVJACitLSU5DID0gQEtJTkNACitLU1JDID0gQEtTUkNACitLVkVSUyA9IEBLVkVSU0AKK0xEID0gQExEQAorTERGTEFHUyA9IEBMREZMQUdTQAorTElCRVJUWV9MSUJTID0gQExJQkVSVFlfTElCU0AKK0xJQk9CSlMgPSBATElCT0JKU0AKK0xJQlMgPSBATElCU0AKK0xJQlRPT0wgPSBATElCVE9PTEAKK0xJUE8gPSBATElQT0AKK0xOX1MgPSBATE5fU0AKK0xUTElCT0JKUyA9IEBMVExJQk9CSlNACitNQUtFSU5GTyA9IEBNQUtFSU5GT0AKK01LRElSX1AgPSBATUtESVJfUEAKK01PQyA9IEBNT0NACitNT0RJTlNUQUxMRElSID0gQE1PRElOU1RBTExESVJACitOTSA9IEBOTUAKK05NRURJVCA9IEBOTUVESVRACitPQkpEVU1QID0gQE9CSkRVTVBACitPQkpFWFQgPSBAT0JKRVhUQAorT1BST0ZJTEVfRElSID0gQE9QUk9GSUxFX0RJUkAKK09QUk9GSUxFX01PRFVMRV9BUkNIID0gQE9QUk9GSUxFX01PRFVMRV9BUkNIQAorT1BfQ0ZMQUdTID0gQE9QX0NGTEFHU0AKK09QX0NYWEZMQUdTID0gQE9QX0NYWEZMQUdTQAorT1BfRE9DRElSID0gQE9QX0RPQ0RJUkAKK09UT09MID0gQE9UT09MQAorT1RPT0w2NCA9IEBPVE9PTDY0QAorUEFDS0FHRSA9IEBQQUNLQUdFQAorUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACitQQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAorUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACitQQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAorUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACitQQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAorUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACitQS0dfQ09ORklHID0gQFBLR19DT05GSUdACitQS0dfQ09ORklHX0xJQkRJUiA9IEBQS0dfQ09ORklHX0xJQkRJUkAKK1BLR19DT05GSUdfUEFUSCA9IEBQS0dfQ09ORklHX1BBVEhACitQT1BUX0xJQlMgPSBAUE9QVF9MSUJTQAorUFRSRElGRl9UX1RZUEUgPSBAUFRSRElGRl9UX1RZUEVACitRVF9DRkxBR1MgPSBAUVRfQ0ZMQUdTQAorUVRfSU5DTFVERVMgPSBAUVRfSU5DTFVERVNACitRVF9MREZMQUdTID0gQFFUX0xERkxBR1NACitRVF9MSUIgPSBAUVRfTElCQAorUVRfTElCUyA9IEBRVF9MSUJTQAorUVRfVkVSU0lPTiA9IEBRVF9WRVJTSU9OQAorUkFOTElCID0gQFJBTkxJQkAKK1NFRCA9IEBTRURACitTRVRfTUFLRSA9IEBTRVRfTUFLRUAKK1NIRUxMID0gQFNIRUxMQAorU0laRV9UX1RZUEUgPSBAU0laRV9UX1RZUEVACitTVFJJUCA9IEBTVFJJUEAKK1VJQyA9IEBVSUNACitVSUNoZWxwID0gQFVJQ2hlbHBACitWRVJTSU9OID0gQFZFUlNJT05ACitYTUtNRiA9IEBYTUtNRkAKK1hNTF9DQVRBTE9HID0gQFhNTF9DQVRBTE9HQAorWFNMVFBST0MgPSBAWFNMVFBST0NACitYU0xUUFJPQ19GTEFHUyA9IEBYU0xUUFJPQ19GTEFHU0AKK1hfQ0ZMQUdTID0gQFhfQ0ZMQUdTQAorWF9FWFRSQV9MSUJTID0gQFhfRVhUUkFfTElCU0AKK1hfTElCUyA9IEBYX0xJQlNACitYX1BSRV9MSUJTID0gQFhfUFJFX0xJQlNACithYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAorYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAorYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAorYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACithY19jdF9DQyA9IEBhY19jdF9DQ0AKK2FjX2N0X0NYWCA9IEBhY19jdF9DWFhACithY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACithbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKK2FtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACithbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAorYW1fX3RhciA9IEBhbV9fdGFyQAorYW1fX3VudGFyID0gQGFtX191bnRhckAKK2JpbmRpciA9IEBiaW5kaXJACitidWlsZCA9IEBidWlsZEAKK2J1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAorYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKK2J1aWxkX29zID0gQGJ1aWxkX29zQAorYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKK2J1aWxkZGlyID0gQGJ1aWxkZGlyQAorZGF0YWRpciA9IEBkYXRhZGlyQAorZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACitkb2NkaXIgPSBAZG9jZGlyQAorZHZpZGlyID0gQGR2aWRpckAKK2V4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAoraG9zdCA9IEBob3N0QAoraG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAoraG9zdF9jcHUgPSBAaG9zdF9jcHVACitob3N0X29zID0gQGhvc3Rfb3NACitob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKK2h0bWxkaXIgPSBAaHRtbGRpckAKK2luY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKK2luZm9kaXIgPSBAaW5mb2RpckAKK2luc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKK2xpYmRpciA9IEBsaWJkaXJACitsaWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACitsb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAorbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAorbHRfRUNITyA9IEBsdF9FQ0hPQAorbWFuZGlyID0gQG1hbmRpckAKK21rZGlyX3AgPSBAbWtkaXJfcEAKK29sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKK3BkZmRpciA9IEBwZGZkaXJACitwcmVmaXggPSBAcHJlZml4QAorcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAorcHNkaXIgPSBAcHNkaXJACitzYmluZGlyID0gQHNiaW5kaXJACitzaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKK3NyY2RpciA9IEBzcmNkaXJACitzeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACit0YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAordG9wX2J1aWxkX3ByZWZpeCA9IEB0b3BfYnVpbGRfcHJlZml4QAordG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKK3RvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKK3RvcGRpciA9IEB0b3BkaXJACitTVUJESVJTID0gdWkKK2Rpc3Rfc291cmNlcyA9IFwKKwlvcHJvZl9zdGFydC5jcHAgXAorCW9wcm9mX3N0YXJ0X2NvbmZpZy5jcHAgXAorCW9wcm9mX3N0YXJ0X3V0aWwuY3BwIFwKKwlvcHJvZl9zdGFydF9tYWluLmNwcCBcCisJb3Byb2Zfc3RhcnQuaCBcCisJb3Byb2Zfc3RhcnRfY29uZmlnLmggXAorCW9wcm9mX3N0YXJ0X3V0aWwuaAorCitFWFRSQV9ESVNUID0gJChkaXN0X3NvdXJjZXMpCitAaGF2ZV9xdF9UUlVFQEFNX0NQUEZMQUdTID0gXAorQGhhdmVfcXRfVFJVRUAJQFFUX0NGTEFHU0AgXAorQGhhdmVfcXRfVFJVRUAJLUkgJHt0b3Bfc3JjZGlyfS9saWJvcCBcCitAaGF2ZV9xdF9UUlVFQAktSSAke3RvcF9zcmNkaXJ9L2xpYnV0aWwrKyBcCitAaGF2ZV9xdF9UUlVFQAktSSAke3RvcF9zcmNkaXJ9L2xpYnV0aWwKKworQGhhdmVfcXRfVFJVRUBBTV9DWFhGTEFHUyA9IEBPUF9DWFhGTEFHU0AKK0BoYXZlX3F0X1RSVUVAb3Byb2Zfc3RhcnRfU09VUkNFUyA9ICQoZGlzdF9zb3VyY2VzKQorQGhhdmVfcXRfVFJVRUBub2Rpc3Rfb3Byb2Zfc3RhcnRfU09VUkNFUyA9IG9wcm9mX3N0YXJ0Lm1vYy5jcHAKK0BoYXZlX3F0X1RSVUVAb3Byb2Zfc3RhcnRfTERBREQgPSBcCitAaGF2ZV9xdF9UUlVFQAkuLi9saWJ1dGlsKysvbGlidXRpbCsrLmEgXAorQGhhdmVfcXRfVFJVRUAJLi4vbGlib3AvbGlib3AuYSBcCitAaGF2ZV9xdF9UUlVFQAkuLi9saWJ1dGlsL2xpYnV0aWwuYSBcCitAaGF2ZV9xdF9UUlVFQAl1aS9saWJvcHJvZl9zdGFydC5hIFwKK0BoYXZlX3F0X1RSVUVACUBRVF9MSUJTQCBcCitAaGF2ZV9xdF9UUlVFQAlAWF9MSUJTQAorCithbGw6IGFsbC1yZWN1cnNpdmUKKworLlNVRkZJWEVTOgorLlNVRkZJWEVTOiAuY3BwIC5sbyAubyAub2JqCiskKHNyY2RpcikvTWFrZWZpbGUuaW46ICAkKHNyY2RpcikvTWFrZWZpbGUuYW0gICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCUBmb3IgZGVwIGluICQ/OyBkbyBcCisJICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKKwkgICAgKiQkZGVwKikgXAorCSAgICAgICggY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoICkgXAorCSAgICAgICAgJiYgeyBpZiB0ZXN0IC1mICRAOyB0aGVuIGV4aXQgMDsgZWxzZSBicmVhazsgZmk7IH07IFwKKwkgICAgICBleGl0IDE7OyBcCisJICBlc2FjOyBcCisJZG9uZTsgXAorCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZm9yZWlnbiBndWkvTWFrZWZpbGUnOyBcCisJJChhbV9fY2QpICQodG9wX3NyY2RpcikgJiYgXAorCSAgJChBVVRPTUFLRSkgLS1mb3JlaWduIGd1aS9NYWtlZmlsZQorLlBSRUNJT1VTOiBNYWtlZmlsZQorTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworCUBjYXNlICckPycgaW4gXAorCSAgKmNvbmZpZy5zdGF0dXMqKSBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKKwkgICopIFwKKwkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAorCWVzYWM7CisKKyQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorCiskKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorJChBQ0xPQ0FMX000KTogICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6CitpbnN0YWxsLWJpblBST0dSQU1TOiAkKGJpbl9QUk9HUkFNUykKKwlAJChOT1JNQUxfSU5TVEFMTCkKKwl0ZXN0IC16ICIkKGJpbmRpcikiIHx8ICQoTUtESVJfUCkgIiQoREVTVERJUikkKGJpbmRpcikiCisJQGxpc3Q9JyQoYmluX1BST0dSQU1TKSc7IHRlc3QgLW4gIiQoYmluZGlyKSIgfHwgbGlzdD07IFwKKwlmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCAkJHAiOyBkb25lIHwgXAorCXNlZCAncy8kKEVYRUVYVCkkJC8vJyB8IFwKKwl3aGlsZSByZWFkIHAgcDE7IGRvIGlmIHRlc3QgLWYgJCRwIHx8IHRlc3QgLWYgJCRwMTsgXAorCSAgdGhlbiBlY2hvICIkJHAiOyBlY2hvICIkJHAiOyBlbHNlIDo7IGZpOyBcCisJZG9uZSB8IFwKKwlzZWQgLWUgJ3A7cywuKi8sLDtuO2gnIC1lICdzfC4qfC58JyBcCisJICAgIC1lICdwO3g7cywuKi8sLDtzLyQoRVhFRVhUKSQkLy87JCh0cmFuc2Zvcm0pO3MvJCQvJChFWEVFWFQpLycgfCBcCisJc2VkICdOO047TjtzLFxuLCAsZycgfCBcCisJJChBV0spICdCRUdJTiB7IGZpbGVzWyIuIl0gPSAiIjsgZGlyc1siLiJdID0gMSB9IFwKKwkgIHsgZD0kJDM7IGlmIChkaXJzW2RdICE9IDEpIHsgcHJpbnQgImQiLCBkOyBkaXJzW2RdID0gMSB9IFwKKwkgICAgaWYgKCQkMiA9PSAkJDQpIGZpbGVzW2RdID0gZmlsZXNbZF0gIiAiICQkMTsgXAorCSAgICBlbHNlIHsgcHJpbnQgImYiLCAkJDMgIi8iICQkNCwgJCQxOyB9IH0gXAorCSAgRU5EIHsgZm9yIChkIGluIGZpbGVzKSBwcmludCAiZiIsIGQsIGZpbGVzW2RdIH0nIHwgXAorCXdoaWxlIHJlYWQgdHlwZSBkaXIgZmlsZXM7IGRvIFwKKwkgICAgaWYgdGVzdCAiJCRkaXIiID0gLjsgdGhlbiBkaXI9OyBlbHNlIGRpcj0vJCRkaXI7IGZpOyBcCisJICAgIHRlc3QgLXogIiQkZmlsZXMiIHx8IHsgXAorCSAgICBlY2hvICIgJChJTlNUQUxMX1BST0dSQU1fRU5WKSAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWluc3RhbGwgJChJTlNUQUxMX1BST0dSQU0pICQkZmlsZXMgJyQoREVTVERJUikkKGJpbmRpcikkJGRpciciOyBcCisJICAgICQoSU5TVEFMTF9QUk9HUkFNX0VOVikgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1pbnN0YWxsICQoSU5TVEFMTF9QUk9HUkFNKSAkJGZpbGVzICIkKERFU1RESVIpJChiaW5kaXIpJCRkaXIiIHx8IGV4aXQgJCQ/OyBcCisJICAgIH0gXAorCTsgZG9uZQorCit1bmluc3RhbGwtYmluUFJPR1JBTVM6CisJQCQoTk9STUFMX1VOSU5TVEFMTCkKKwlAbGlzdD0nJChiaW5fUFJPR1JBTVMpJzsgdGVzdCAtbiAiJChiaW5kaXIpIiB8fCBsaXN0PTsgXAorCWZpbGVzPWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCI7IGRvbmUgfCBcCisJICBzZWQgLWUgJ2g7cyxeLiovLCw7cy8kKEVYRUVYVCkkJC8vOyQodHJhbnNmb3JtKScgXAorCSAgICAgIC1lICdzLyQkLyQoRVhFRVhUKS8nIGA7IFwKKwl0ZXN0IC1uICIkJGxpc3QiIHx8IGV4aXQgMDsgXAorCWVjaG8gIiAoIGNkICckKERFU1RESVIpJChiaW5kaXIpJyAmJiBybSAtZiIgJCRmaWxlcyAiKSI7IFwKKwljZCAiJChERVNURElSKSQoYmluZGlyKSIgJiYgcm0gLWYgJCRmaWxlcworCitjbGVhbi1iaW5QUk9HUkFNUzoKKwlAbGlzdD0nJChiaW5fUFJPR1JBTVMpJzsgdGVzdCAtbiAiJCRsaXN0IiB8fCBleGl0IDA7IFwKKwllY2hvICIgcm0gLWYiICQkbGlzdDsgXAorCXJtIC1mICQkbGlzdCB8fCBleGl0ICQkPzsgXAorCXRlc3QgLW4gIiQoRVhFRVhUKSIgfHwgZXhpdCAwOyBcCisJbGlzdD1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAiOyBkb25lIHwgc2VkICdzLyQoRVhFRVhUKSQkLy8nYDsgXAorCWVjaG8gIiBybSAtZiIgJCRsaXN0OyBcCisJcm0gLWYgJCRsaXN0CitvcHJvZl9zdGFydCQoRVhFRVhUKTogJChvcHJvZl9zdGFydF9PQkpFQ1RTKSAkKG9wcm9mX3N0YXJ0X0RFUEVOREVOQ0lFUykgCisJQHJtIC1mIG9wcm9mX3N0YXJ0JChFWEVFWFQpCisJJChDWFhMSU5LKSAkKG9wcm9mX3N0YXJ0X09CSkVDVFMpICQob3Byb2Zfc3RhcnRfTERBREQpICQoTElCUykKKworbW9zdGx5Y2xlYW4tY29tcGlsZToKKwktcm0gLWYgKi4kKE9CSkVYVCkKKworZGlzdGNsZWFuLWNvbXBpbGU6CisJLXJtIC1mICoudGFiLmMKKworQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL29wcm9mX3N0YXJ0LlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9vcHJvZl9zdGFydC5tb2MuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL29wcm9mX3N0YXJ0X2NvbmZpZy5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvb3Byb2Zfc3RhcnRfbWFpbi5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvb3Byb2Zfc3RhcnRfdXRpbC5Qb0BhbV9fcXVvdGVACisKKy5jcHAubzoKK0BhbV9fZmFzdGRlcENYWF9UUlVFQAkkKENYWENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJCouVHBvIC1jIC1vICRAICQ8CitAYW1fX2Zhc3RkZXBDWFhfVFJVRUAJJChhbV9fbXYpICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ1hYREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACSQoQ1hYQ09NUElMRSkgLWMgLW8gJEAgJDwKKworLmNwcC5vYmo6CitAYW1fX2Zhc3RkZXBDWFhfVFJVRUAJJChDWFhDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgCitAYW1fX2Zhc3RkZXBDWFhfVFJVRUAJJChhbV9fbXYpICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ1hYREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACSQoQ1hYQ09NUElMRSkgLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYAorCisuY3BwLmxvOgorQGFtX19mYXN0ZGVwQ1hYX1RSVUVACSQoTFRDWFhDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCAkPAorQGFtX19mYXN0ZGVwQ1hYX1RSVUVACSQoYW1fX212KSAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENYWF9GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ1hYREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACSQoTFRDWFhDT01QSUxFKSAtYyAtbyAkQCAkPAorCittb3N0bHljbGVhbi1saWJ0b29sOgorCS1ybSAtZiAqLmxvCisKK2NsZWFuLWxpYnRvb2w6CisJLXJtIC1yZiAubGlicyBfbGlicworCisjIFRoaXMgZGlyZWN0b3J5J3Mgc3ViZGlyZWN0b3JpZXMgYXJlIG1vc3RseSBpbmRlcGVuZGVudDsgeW91IGNhbiBjZAorIyBpbnRvIHRoZW0gYW5kIHJ1biBgbWFrZScgd2l0aG91dCBnb2luZyB0aHJvdWdoIHRoaXMgTWFrZWZpbGUuCisjIFRvIGNoYW5nZSB0aGUgdmFsdWVzIG9mIGBtYWtlJyB2YXJpYWJsZXM6IGluc3RlYWQgb2YgZWRpdGluZyBNYWtlZmlsZXMsCisjICgxKSBpZiB0aGUgdmFyaWFibGUgaXMgc2V0IGluIGBjb25maWcuc3RhdHVzJywgZWRpdCBgY29uZmlnLnN0YXR1cycKKyMgICAgICh3aGljaCB3aWxsIGNhdXNlIHRoZSBNYWtlZmlsZXMgdG8gYmUgcmVnZW5lcmF0ZWQgd2hlbiB5b3UgcnVuIGBtYWtlJyk7CisjICgyKSBvdGhlcndpc2UsIHBhc3MgdGhlIGRlc2lyZWQgdmFsdWVzIG9uIHRoZSBgbWFrZScgY29tbWFuZCBsaW5lLgorJChSRUNVUlNJVkVfVEFSR0VUUyk6CisJQGZhaWw9IGZhaWxjb209J2V4aXQgMSc7IFwKKwlmb3IgZiBpbiB4ICQkTUFLRUZMQUdTOyBkbyBcCisJICBjYXNlICQkZiBpbiBcCisJICAgICo9KiB8IC0tWyFrXSopOzsgXAorCSAgICAqayopIGZhaWxjb209J2ZhaWw9eWVzJzs7IFwKKwkgIGVzYWM7IFwKKwlkb25lOyBcCisJZG90X3NlZW49bm87IFwKKwl0YXJnZXQ9YGVjaG8gJEAgfCBzZWQgcy8tcmVjdXJzaXZlLy9gOyBcCisJbGlzdD0nJChTVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICBlY2hvICJNYWtpbmcgJCR0YXJnZXQgaW4gJCRzdWJkaXIiOyBcCisJICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAiLiI7IHRoZW4gXAorCSAgICBkb3Rfc2Vlbj15ZXM7IFwKKwkgICAgbG9jYWxfdGFyZ2V0PSIkJHRhcmdldC1hbSI7IFwKKwkgIGVsc2UgXAorCSAgICBsb2NhbF90YXJnZXQ9IiQkdGFyZ2V0IjsgXAorCSAgZmk7IFwKKwkgICgkKGFtX19jZCkgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgJCRsb2NhbF90YXJnZXQpIFwKKwkgIHx8IGV2YWwgJCRmYWlsY29tOyBcCisJZG9uZTsgXAorCWlmIHRlc3QgIiQkZG90X3NlZW4iID0gIm5vIjsgdGhlbiBcCisJICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSAiJCR0YXJnZXQtYW0iIHx8IGV4aXQgMTsgXAorCWZpOyB0ZXN0IC16ICIkJGZhaWwiCisKKyQoUkVDVVJTSVZFX0NMRUFOX1RBUkdFVFMpOgorCUBmYWlsPSBmYWlsY29tPSdleGl0IDEnOyBcCisJZm9yIGYgaW4geCAkJE1BS0VGTEFHUzsgZG8gXAorCSAgY2FzZSAkJGYgaW4gXAorCSAgICAqPSogfCAtLVsha10qKTs7IFwKKwkgICAgKmsqKSBmYWlsY29tPSdmYWlsPXllcyc7OyBcCisJICBlc2FjOyBcCisJZG9uZTsgXAorCWRvdF9zZWVuPW5vOyBcCisJY2FzZSAiJEAiIGluIFwKKwkgIGRpc3RjbGVhbi0qIHwgbWFpbnRhaW5lci1jbGVhbi0qKSBsaXN0PSckKERJU1RfU1VCRElSUyknIDs7IFwKKwkgICopIGxpc3Q9JyQoU1VCRElSUyknIDs7IFwKKwllc2FjOyBcCisJcmV2PScnOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAorCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gIi4iOyB0aGVuIDo7IGVsc2UgXAorCSAgICByZXY9IiQkc3ViZGlyICQkcmV2IjsgXAorCSAgZmk7IFwKKwlkb25lOyBcCisJcmV2PSIkJHJldiAuIjsgXAorCXRhcmdldD1gZWNobyAkQCB8IHNlZCBzLy1yZWN1cnNpdmUvL2A7IFwKKwlmb3Igc3ViZGlyIGluICQkcmV2OyBkbyBcCisJICBlY2hvICJNYWtpbmcgJCR0YXJnZXQgaW4gJCRzdWJkaXIiOyBcCisJICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAiLiI7IHRoZW4gXAorCSAgICBsb2NhbF90YXJnZXQ9IiQkdGFyZ2V0LWFtIjsgXAorCSAgZWxzZSBcCisJICAgIGxvY2FsX3RhcmdldD0iJCR0YXJnZXQiOyBcCisJICBmaTsgXAorCSAgKCQoYW1fX2NkKSAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSAkJGxvY2FsX3RhcmdldCkgXAorCSAgfHwgZXZhbCAkJGZhaWxjb207IFwKKwlkb25lICYmIHRlc3QgLXogIiQkZmFpbCIKK3RhZ3MtcmVjdXJzaXZlOgorCWxpc3Q9JyQoU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAorCSAgdGVzdCAiJCRzdWJkaXIiID0gLiB8fCAoJChhbV9fY2QpICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIHRhZ3MpOyBcCisJZG9uZQorY3RhZ3MtcmVjdXJzaXZlOgorCWxpc3Q9JyQoU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAorCSAgdGVzdCAiJCRzdWJkaXIiID0gLiB8fCAoJChhbV9fY2QpICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGN0YWdzKTsgXAorCWRvbmUKKworSUQ6ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKExJU1ApICQoVEFHU19GSUxFUykKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKwkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKwlta2lkIC1mSUQgJCR1bmlxdWUKK3RhZ3M6IFRBR1MKKworVEFHUzogdGFncy1yZWN1cnNpdmUgJChIRUFERVJTKSAkKFNPVVJDRVMpICAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCisJCSQoVEFHU19GSUxFUykgJChMSVNQKQorCXNldCB4OyBcCisJaGVyZT1gcHdkYDsgXAorCWlmICgkKEVUQUdTKSAtLWV0YWdzLWluY2x1ZGUgLS12ZXJzaW9uKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gXAorCSAgaW5jbHVkZV9vcHRpb249LS1ldGFncy1pbmNsdWRlOyBcCisJICBlbXB0eV9maXg9LjsgXAorCWVsc2UgXAorCSAgaW5jbHVkZV9vcHRpb249LS1pbmNsdWRlOyBcCisJICBlbXB0eV9maXg9OyBcCisJZmk7IFwKKwlsaXN0PSckKFNVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKwkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9IC47IHRoZW4gOjsgZWxzZSBcCisJICAgIHRlc3QgISAtZiAkJHN1YmRpci9UQUdTIHx8IFwKKwkgICAgICBzZXQgIiQkQCIgIiQkaW5jbHVkZV9vcHRpb249JCRoZXJlLyQkc3ViZGlyL1RBR1MiOyBcCisJICBmaTsgXAorCWRvbmU7IFwKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCisJICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCisJc2hpZnQ7IFwKKwlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCQqJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAorCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAorCSAgaWYgdGVzdCAkJCMgLWd0IDA7IHRoZW4gXAorCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCisJICAgICAgIiQkQCIgJCR1bmlxdWU7IFwKKwkgIGVsc2UgXAorCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCisJICAgICAgJCR1bmlxdWU7IFwKKwkgIGZpOyBcCisJZmkKK2N0YWdzOiBDVEFHUworQ1RBR1M6IGN0YWdzLXJlY3Vyc2l2ZSAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKKwkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHVuaXF1ZSIgXAorCSAgfHwgJChDVEFHUykgJChDVEFHU0ZMQUdTKSAkKEFNX0NUQUdTRkxBR1MpICQoQ1RBR1NfQVJHUykgXAorCSAgICAgJCR1bmlxdWUKKworR1RBR1M6CisJaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKKwkgICYmICQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpIFwKKwkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgIiQkaGVyZSIKKworZGlzdGNsZWFuLXRhZ3M6CisJLXJtIC1mIFRBR1MgSUQgR1RBR1MgR1JUQUdTIEdTWU1TIEdQQVRIIHRhZ3MKKworZGlzdGRpcjogJChESVNURklMRVMpCisJQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwlsaXN0PSckKERJU1RGSUxFUyknOyBcCisJICBkaXN0X2ZpbGVzPWBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRmaWxlOyBkb25lIHwgXAorCSAgc2VkIC1lICJzfF4kJHNyY2RpcnN0cmlwL3x8O3QiIFwKKwkgICAgICAtZSAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3w7dCJgOyBcCisJY2FzZSAkJGRpc3RfZmlsZXMgaW4gXAorCSAgKi8qKSAkKE1LRElSX1ApIGBlY2hvICIkJGRpc3RfZmlsZXMiIHwgXAorCQkJICAgc2VkICcvXC8vIWQ7c3xefCQoZGlzdGRpcikvfDtzLC9bXi9dKiQkLCwnIHwgXAorCQkJICAgc29ydCAtdWAgOzsgXAorCWVzYWM7IFwKKwlmb3IgZmlsZSBpbiAkJGRpc3RfZmlsZXM7IGRvIFwKKwkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKKwkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCisJICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCisJICAgIGlmIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRmaWxlIjsgdGhlbiBcCisJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisJICAgIGZpOyBcCisJICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAorCSAgICAgIGNwIC1mcFIgJChzcmNkaXIpLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKwkgICAgZmk7IFwKKwkgICAgY3AgLWZwUiAkJGQvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorCSAgZWxzZSBcCisJICAgIHRlc3QgLWYgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGV4aXQgMTsgXAorCSAgZmk7IFwKKwlkb25lCisJQGxpc3Q9JyQoRElTVF9TVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAuOyB0aGVuIDo7IGVsc2UgXAorCSAgICB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkc3ViZGlyIiBcCisJICAgIHx8ICQoTUtESVJfUCkgIiQoZGlzdGRpcikvJCRzdWJkaXIiIFwKKwkgICAgfHwgZXhpdCAxOyBcCisJICBmaTsgXAorCWRvbmUKKwlAbGlzdD0nJChESVNUX1NVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKwkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9IC47IHRoZW4gOjsgZWxzZSBcCisJICAgIGRpcjE9JCRzdWJkaXI7IGRpcjI9IiQoZGlzdGRpcikvJCRzdWJkaXIiOyBcCisJICAgICQoYW1fX3JlbGF0aXZpemUpOyBcCisJICAgIG5ld19kaXN0ZGlyPSQkcmVsZGlyOyBcCisJICAgIGRpcjE9JCRzdWJkaXI7IGRpcjI9IiQodG9wX2Rpc3RkaXIpIjsgXAorCSAgICAkKGFtX19yZWxhdGl2aXplKTsgXAorCSAgICBuZXdfdG9wX2Rpc3RkaXI9JCRyZWxkaXI7IFwKKwkgICAgZWNobyAiIChjZCAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSB0b3BfZGlzdGRpcj0iJCRuZXdfdG9wX2Rpc3RkaXIiIGRpc3RkaXI9IiQkbmV3X2Rpc3RkaXIiIFxcIjsgXAorCSAgICBlY2hvICIgICAgIGFtX19yZW1vdmVfZGlzdGRpcj06IGFtX19za2lwX2xlbmd0aF9jaGVjaz06IGFtX19za2lwX21vZGVfZml4PTogZGlzdGRpcikiOyBcCisJICAgICgkKGFtX19jZCkgJCRzdWJkaXIgJiYgXAorCSAgICAgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIFwKKwkgICAgICAgIHRvcF9kaXN0ZGlyPSIkJG5ld190b3BfZGlzdGRpciIgXAorCSAgICAgICAgZGlzdGRpcj0iJCRuZXdfZGlzdGRpciIgXAorCQlhbV9fcmVtb3ZlX2Rpc3RkaXI9OiBcCisJCWFtX19za2lwX2xlbmd0aF9jaGVjaz06IFwKKwkJYW1fX3NraXBfbW9kZV9maXg9OiBcCisJICAgICAgICBkaXN0ZGlyKSBcCisJICAgICAgfHwgZXhpdCAxOyBcCisJICBmaTsgXAorCWRvbmUKK2NoZWNrLWFtOiBhbGwtYW0KK2NoZWNrOiBjaGVjay1yZWN1cnNpdmUKK2FsbC1hbTogTWFrZWZpbGUgJChQUk9HUkFNUykKK2luc3RhbGxkaXJzOiBpbnN0YWxsZGlycy1yZWN1cnNpdmUKK2luc3RhbGxkaXJzLWFtOgorCWZvciBkaXIgaW4gIiQoREVTVERJUikkKGJpbmRpcikiOyBkbyBcCisJICB0ZXN0IC16ICIkJGRpciIgfHwgJChNS0RJUl9QKSAiJCRkaXIiOyBcCisJZG9uZQoraW5zdGFsbDogaW5zdGFsbC1yZWN1cnNpdmUKK2luc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLXJlY3Vyc2l2ZQoraW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtcmVjdXJzaXZlCit1bmluc3RhbGw6IHVuaW5zdGFsbC1yZWN1cnNpdmUKKworaW5zdGFsbC1hbTogYWxsLWFtCisJQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KKworaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stcmVjdXJzaXZlCitpbnN0YWxsLXN0cmlwOgorCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisJICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKKwkgIGB0ZXN0IC16ICckKFNUUklQKScgfHwgXAorCSAgICBlY2hvICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknImAgaW5zdGFsbAorbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKKworY2xlYW4tZ2VuZXJpYzoKKworZGlzdGNsZWFuLWdlbmVyaWM6CisJLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCisJLXRlc3QgLiA9ICIkKHNyY2RpcikiIHx8IHRlc3QgLXogIiQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpCisKK21haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKKwlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCisJQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgorQGhhdmVfcXRfRkFMU0VAY2xlYW4tbG9jYWw6CitjbGVhbjogY2xlYW4tcmVjdXJzaXZlCisKK2NsZWFuLWFtOiBjbGVhbi1iaW5QUk9HUkFNUyBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgY2xlYW4tbG9jYWwgXAorCW1vc3RseWNsZWFuLWFtCisKK2Rpc3RjbGVhbjogZGlzdGNsZWFuLXJlY3Vyc2l2ZQorCS1ybSAtcmYgLi8kKERFUERJUikKKwktcm0gLWYgTWFrZWZpbGUKK2Rpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAorCWRpc3RjbGVhbi10YWdzCisKK2R2aTogZHZpLXJlY3Vyc2l2ZQorCitkdmktYW06CisKK2h0bWw6IGh0bWwtcmVjdXJzaXZlCisKK2h0bWwtYW06CisKK2luZm86IGluZm8tcmVjdXJzaXZlCisKK2luZm8tYW06CisKK2luc3RhbGwtZGF0YS1hbToKKworaW5zdGFsbC1kdmk6IGluc3RhbGwtZHZpLXJlY3Vyc2l2ZQorCitpbnN0YWxsLWR2aS1hbToKKworaW5zdGFsbC1leGVjLWFtOiBpbnN0YWxsLWJpblBST0dSQU1TCisKK2luc3RhbGwtaHRtbDogaW5zdGFsbC1odG1sLXJlY3Vyc2l2ZQorCitpbnN0YWxsLWh0bWwtYW06CisKK2luc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLXJlY3Vyc2l2ZQorCitpbnN0YWxsLWluZm8tYW06CisKK2luc3RhbGwtbWFuOgorCitpbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtcmVjdXJzaXZlCisKK2luc3RhbGwtcGRmLWFtOgorCitpbnN0YWxsLXBzOiBpbnN0YWxsLXBzLXJlY3Vyc2l2ZQorCitpbnN0YWxsLXBzLWFtOgorCitpbnN0YWxsY2hlY2stYW06CisKK21haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tcmVjdXJzaXZlCisJLXJtIC1yZiAuLyQoREVQRElSKQorCS1ybSAtZiBNYWtlZmlsZQorbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYworCittb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tcmVjdXJzaXZlCisKK21vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgXAorCW1vc3RseWNsZWFuLWxpYnRvb2wKKworcGRmOiBwZGYtcmVjdXJzaXZlCisKK3BkZi1hbToKKworcHM6IHBzLXJlY3Vyc2l2ZQorCitwcy1hbToKKwordW5pbnN0YWxsLWFtOiB1bmluc3RhbGwtYmluUFJPR1JBTVMKKworLk1BS0U6ICQoUkVDVVJTSVZFX0NMRUFOX1RBUkdFVFMpICQoUkVDVVJTSVZFX1RBUkdFVFMpIGN0YWdzLXJlY3Vyc2l2ZSBcCisJaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwIHRhZ3MtcmVjdXJzaXZlCisKKy5QSE9OWTogJChSRUNVUlNJVkVfQ0xFQU5fVEFSR0VUUykgJChSRUNVUlNJVkVfVEFSR0VUUykgQ1RBR1MgR1RBR1MgXAorCWFsbCBhbGwtYW0gY2hlY2sgY2hlY2stYW0gY2xlYW4gY2xlYW4tYmluUFJPR1JBTVMgXAorCWNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBjbGVhbi1sb2NhbCBjdGFncyBjdGFncy1yZWN1cnNpdmUgXAorCWRpc3RjbGVhbiBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCisJZGlzdGNsZWFuLWxpYnRvb2wgZGlzdGNsZWFuLXRhZ3MgZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgXAorCWh0bWwtYW0gaW5mbyBpbmZvLWFtIGluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWJpblBST0dSQU1TIFwKKwlpbnN0YWxsLWRhdGEgaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZHZpIGluc3RhbGwtZHZpLWFtIFwKKwlpbnN0YWxsLWV4ZWMgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaHRtbCBpbnN0YWxsLWh0bWwtYW0gXAorCWluc3RhbGwtaW5mbyBpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gaW5zdGFsbC1wZGYgXAorCWluc3RhbGwtcGRmLWFtIGluc3RhbGwtcHMgaW5zdGFsbC1wcy1hbSBpbnN0YWxsLXN0cmlwIFwKKwlpbnN0YWxsY2hlY2sgaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIGluc3RhbGxkaXJzLWFtIFwKKwltYWludGFpbmVyLWNsZWFuIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBcCisJbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wgXAorCXBkZiBwZGYtYW0gcHMgcHMtYW0gdGFncyB0YWdzLXJlY3Vyc2l2ZSB1bmluc3RhbGwgdW5pbnN0YWxsLWFtIFwKKwl1bmluc3RhbGwtYmluUFJPR1JBTVMKKworCitAaGF2ZV9xdF9UUlVFQG9wcm9mX3N0YXJ0Lm1vYy5jcHA6ICR7dG9wX3NyY2Rpcn0vZ3VpL29wcm9mX3N0YXJ0LmgKK0BoYXZlX3F0X1RSVUVACSQoTU9DKSAtbyAkQCAke3RvcF9zcmNkaXJ9L2d1aS9vcHJvZl9zdGFydC5oCisKK0BoYXZlX3F0X1RSVUVAY2xlYW4tbG9jYWw6CitAaGF2ZV9xdF9UUlVFQAlybSAtZiBvcHJvZl9zdGFydC5tb2MuY3BwCisKKyMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCisjIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KKy5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2d1aS9vcHJvZl9zdGFydC5jcHAgYi9vcHJvZmlsZS0wLjkuNy9ndWkvb3Byb2Zfc3RhcnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyNWIyMTUKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9ndWkvb3Byb2Zfc3RhcnQuY3BwCkBAIC0wLDAgKzEsMTA4NyBAQAorLyoqCisgKiBAZmlsZSBvcHJvZl9zdGFydC5jcHAKKyAqIFRoZSBHVUkgc3RhcnQgbWFpbiBjbGFzcworICoKKyAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDIgT1Byb2ZpbGUgYXV0aG9ycworICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKKyAqCisgKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKKyAqIEBhdXRob3IgSm9obiBMZXZvbgorICovCisKKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisjaW5jbHVkZSA8Y3RpbWU+CisjaW5jbHVkZSA8Y3N0ZGlvPgorI2luY2x1ZGUgPGNtYXRoPgorI2luY2x1ZGUgPHNzdHJlYW0+CisjaW5jbHVkZSA8aW9zdHJlYW0+CisjaW5jbHVkZSA8ZnN0cmVhbT4KKyNpbmNsdWRlIDxhbGdvcml0aG0+CisKKyNpZiBRVDNfU1VQUE9SVAorI2luY2x1ZGUgPFF0L3FsaW5lZWRpdC5oPgorI2luY2x1ZGUgPFF0L3FjaGVja2JveC5oPgorI2luY2x1ZGUgPFF0L3F0YWJ3aWRnZXQuaD4KKyNpbmNsdWRlIDxRdC9xbWVzc2FnZWJveC5oPgorI2luY2x1ZGUgPFF0L3F2YWxpZGF0b3IuaD4KKyNpbmNsdWRlIDxRdC9xbGFiZWwuaD4KKyNpbmNsdWRlIDxRdC9xcHVzaGJ1dHRvbi5oPgorI2luY2x1ZGUgPFF0L3EzbGlzdHZpZXcuaD4KKyNpbmNsdWRlIDxRdC9xM2NvbWJvYm94Lmg+CisjaW5jbHVkZSA8UXQvcTNsaXN0Ym94Lmg+CisjaW5jbHVkZSA8UXQvcTNmaWxlZGlhbG9nLmg+CisjaW5jbHVkZSA8UXQvcTNidXR0b25ncm91cC5oPgorI2luY2x1ZGUgPFF0L3EzaGVhZGVyLmg+CisjZWxzZQorI2luY2x1ZGUgPHFsaW5lZWRpdC5oPgorI2luY2x1ZGUgPHFjaGVja2JveC5oPgorI2luY2x1ZGUgPHF0YWJ3aWRnZXQuaD4KKyNpbmNsdWRlIDxxbWVzc2FnZWJveC5oPgorI2luY2x1ZGUgPHF2YWxpZGF0b3IuaD4KKyNpbmNsdWRlIDxxbGFiZWwuaD4KKyNpbmNsdWRlIDxxcHVzaGJ1dHRvbi5oPgorI2luY2x1ZGUgPHFsaXN0dmlldy5oPgorI2luY2x1ZGUgPHFjb21ib2JveC5oPgorI2luY2x1ZGUgPHFsaXN0Ym94Lmg+CisjaW5jbHVkZSA8cWZpbGVkaWFsb2cuaD4KKyNpbmNsdWRlIDxxYnV0dG9uZ3JvdXAuaD4KKyNpbmNsdWRlIDxxaGVhZGVyLmg+CisjZGVmaW5lIFEzTGlzdFZpZXcgUUxpc3RWaWV3CisjZW5kaWYKKworI2luY2x1ZGUgIm9wcm9mX3N0YXJ0LmgiCisjaW5jbHVkZSAib3BfY29uZmlnLmgiCisjaW5jbHVkZSAib3BfY29uZmlnXzI0LmgiCisjaW5jbHVkZSAic3RyaW5nX21hbmlwLmgiCisjaW5jbHVkZSAib3BfY3B1ZnJlcS5oIgorI2luY2x1ZGUgIm9wX2FsbG9jX2NvdW50ZXIuaCIKKyNpbmNsdWRlICJvcHJvZl9zdGFydF91dGlsLmgiCisjaW5jbHVkZSAiZmlsZV9tYW5pcC5oIgorCisjaW5jbHVkZSAib3BfaHdfY29uZmlnLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisKK3N0YXRpYyBjaGFyIGNvbnN0ICogZ3JlZW5feHBtW10gPSB7CisiMTYgMTYgMiAxIiwKKyIgCWMgTm9uZSIsCisiLgljICMwMEZGMDAiLAorIiAgICAuLi4uLi4uICAgICAiLAorIiAgLi4uLi4uLi4uLi4gICAiLAorIiAuLi4uLi4uLi4uLi4uICAiLAorIiAuLi4uLi4uLi4uLi4uICAiLAorIi4uLi4uLi4uLi4uLi4uLiAiLAorIi4uLi4uLi4uLi4uLi4uLiAiLAorIi4uLi4uLi4uLi4uLi4uLiAiLAorIi4uLi4uLi4uLi4uLi4uLiAiLAorIi4uLi4uLi4uLi4uLi4uLiAiLAorIi4uLi4uLi4uLi4uLi4uLiAiLAorIi4uLi4uLi4uLi4uLi4uLiAiLAorIiAuLi4uLi4uLi4uLi4uICAiLAorIiAuLi4uLi4uLi4uLi4uICAiLAorIiAgLi4uLi4uLi4uLi4gICAiLAorIiAgICAuLi4uLi4uICAgICAiLAorIiAgICAgICAgICAgICAgICAiIH07CisKK3N0YXRpYyBjaGFyIGNvbnN0ICogcmVkX3hwbVtdID0geworIjE2IDE2IDIgMSIsCisiIAljIE5vbmUiLAorIi4JYyAjRkYwMDAwIiwKKyIgICAgLi4uLi4uLiAgICAgIiwKKyIgIC4uLi4uLi4uLi4uICAgIiwKKyIgLi4uLi4uLi4uLi4uLiAgIiwKKyIgLi4uLi4uLi4uLi4uLiAgIiwKKyIuLi4uLi4uLi4uLi4uLi4gIiwKKyIuLi4uLi4uLi4uLi4uLi4gIiwKKyIuLi4uLi4uLi4uLi4uLi4gIiwKKyIuLi4uLi4uLi4uLi4uLi4gIiwKKyIuLi4uLi4uLi4uLi4uLi4gIiwKKyIuLi4uLi4uLi4uLi4uLi4gIiwKKyIuLi4uLi4uLi4uLi4uLi4gIiwKKyIgLi4uLi4uLi4uLi4uLiAgIiwKKyIgLi4uLi4uLi4uLi4uLiAgIiwKKyIgIC4uLi4uLi4uLi4uICAgIiwKKyIgICAgLi4uLi4uLiAgICAgIiwKKyIgICAgICAgICAgICAgICAgIiB9OworCitzdGF0aWMgUVBpeG1hcCAqIGdyZWVuX3BpeG1hcDsKK3N0YXRpYyBRUGl4bWFwICogcmVkX3BpeG1hcDsKKworCitvcF9ldmVudF9kZXNjcjo6b3BfZXZlbnRfZGVzY3IoKQorCToKKwljb3VudGVyX21hc2soMCksCisJdmFsKDApLAorCXVuaXQoMCksCisJbWluX2NvdW50KDApCit7Cit9CisKKworb3Byb2Zfc3RhcnQ6Om9wcm9mX3N0YXJ0KCkKKwk6CisJb3Byb2Zfc3RhcnRfYmFzZSgwLCAwLCBmYWxzZSwgMCksCisJZXZlbnRfY291bnRfdmFsaWRhdG9yKG5ldyBRSW50VmFsaWRhdG9yKGV2ZW50X2NvdW50X2VkaXQpKSwKKwljdXJyZW50X2V2ZW50KDApLAorCWNwdV9zcGVlZChvcF9jcHVfZnJlcXVlbmN5KCkpLAorCXRvdGFsX25yX2ludGVycnVwdHMoMCkKK3sKKwlncmVlbl9waXhtYXAgPSBuZXcgUVBpeG1hcChncmVlbl94cG0pOworCXJlZF9waXhtYXAgPSBuZXcgUVBpeG1hcChyZWRfeHBtKTsKKwl2ZWN0b3I8c3RyaW5nPiBhcmdzOworCWFyZ3MucHVzaF9iYWNrKCItLWluaXQiKTsKKworCWlmIChkb19leGVjX2NvbW1hbmQoT1BfQklORElSICIvb3Bjb250cm9sIiwgYXJncykpCisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKworCWNwdV90eXBlID0gb3BfZ2V0X2NwdV90eXBlKCk7CisJb3BfbnJfY291bnRlcnMgPSBvcF9nZXRfbnJfY291bnRlcnMoY3B1X3R5cGUpOworCisJaWYgKGNwdV90eXBlID09IENQVV9USU1FUl9JTlQpIHsKKwkJc2V0dXBfY29uZmlnX3RhYi0+cmVtb3ZlUGFnZShjb3VudGVyX3NldHVwX3BhZ2UpOworCX0gZWxzZSB7CisJCWZpbGxfZXZlbnRzKCk7CisJfQorCisJb3BfaW50ZXJmYWNlIGludGVyZmFjZSA9IG9wX2dldF9pbnRlcmZhY2UoKTsKKwlpZiAoaW50ZXJmYWNlID09IE9QX0lOVEVSRkFDRV9OT19HT09EKSB7CisJCVFNZXNzYWdlQm94Ojp3YXJuaW5nKHRoaXMsIDAsICJDb3VsZG4ndCBkZXRlcm1pbmUga2VybmVsIgorCQkgICAgICAgICAgICAgICAgICAgICAiIGludGVyZmFjZSB2ZXJzaW9uIik7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisJYm9vbCBpc18yNiA9IGludGVyZmFjZSA9PSBPUF9JTlRFUkZBQ0VfMjY7CisKKwlpZiAoaXNfMjYpIHsKKwkJbm90ZV90YWJsZV9zaXplX2VkaXQtPmhpZGUoKTsKKwkJbm90ZV90YWJsZV9zaXplX2xhYmVsLT5oaWRlKCk7CisJCWlmICghb3BfZmlsZV9yZWFkYWJsZSgiL2Rldi9vcHJvZmlsZS9iYWNrdHJhY2VfZGVwdGgiKSkgeworCQkJY2FsbGdyYXBoX2RlcHRoX2xhYmVsLT5oaWRlKCk7CisJCQljYWxsZ3JhcGhfZGVwdGhfZWRpdC0+aGlkZSgpOworCQl9CisJfSBlbHNlIHsKKwkJY2FsbGdyYXBoX2RlcHRoX2xhYmVsLT5oaWRlKCk7CisJCWNhbGxncmFwaF9kZXB0aF9lZGl0LT5oaWRlKCk7CisJCWJ1ZmZlcl93YXRlcnNoZWRfbGFiZWwtPmhpZGUoKTsKKwkJYnVmZmVyX3dhdGVyc2hlZF9lZGl0LT5oaWRlKCk7CisJCWNwdV9idWZmZXJfc2l6ZV9sYWJlbC0+aGlkZSgpOworCQljcHVfYnVmZmVyX3NpemVfZWRpdC0+aGlkZSgpOworCX0KKworCS8vIHNldHVwIHRoZSBjb25maWd1cmF0aW9uIHBhZ2UuCisJa2VybmVsX2ZpbGVuYW1lX2VkaXQtPnNldFRleHQoY29uZmlnLmtlcm5lbF9maWxlbmFtZS5jX3N0cigpKTsKKworCW5vX3ZtbGludXgtPnNldENoZWNrZWQoY29uZmlnLm5vX2tlcm5lbCk7CisKKwlidWZmZXJfc2l6ZV9lZGl0LT5zZXRUZXh0KFFTdHJpbmcoKS5zZXROdW0oY29uZmlnLmJ1ZmZlcl9zaXplKSk7CisJYnVmZmVyX3dhdGVyc2hlZF9lZGl0LT5zZXRUZXh0KFFTdHJpbmcoKS5zZXROdW0oY29uZmlnLmJ1ZmZlcl93YXRlcnNoZWQpKTsKKwljcHVfYnVmZmVyX3NpemVfZWRpdC0+c2V0VGV4dChRU3RyaW5nKCkuc2V0TnVtKGNvbmZpZy5jcHVfYnVmZmVyX3NpemUpKTsKKwlub3RlX3RhYmxlX3NpemVfZWRpdC0+c2V0VGV4dChRU3RyaW5nKCkuc2V0TnVtKGNvbmZpZy5ub3RlX3RhYmxlX3NpemUpKTsKKwljYWxsZ3JhcGhfZGVwdGhfZWRpdC0+c2V0VGV4dChRU3RyaW5nKCkuc2V0TnVtKGNvbmZpZy5jYWxsZ3JhcGhfZGVwdGgpKTsKKwl2ZXJib3NlLT5zZXRDaGVja2VkKGNvbmZpZy52ZXJib3NlKTsKKwlzZXBhcmF0ZV9saWJfY2ItPnNldENoZWNrZWQoY29uZmlnLnNlcGFyYXRlX2xpYik7CisJc2VwYXJhdGVfa2VybmVsX2NiLT5zZXRDaGVja2VkKGNvbmZpZy5zZXBhcmF0ZV9rZXJuZWwpOworCXNlcGFyYXRlX2NwdV9jYi0+c2V0Q2hlY2tlZChjb25maWcuc2VwYXJhdGVfY3B1KTsKKwlzZXBhcmF0ZV90aHJlYWRfY2ItPnNldENoZWNrZWQoY29uZmlnLnNlcGFyYXRlX3RocmVhZCk7CisKKwkvLyB0aGUgdW5pdCBtYXNrIGNoZWNrIGJveGVzCisJaGlkZV9tYXNrcygpOworCisJZXZlbnRfY291bnRfZWRpdC0+c2V0VmFsaWRhdG9yKGV2ZW50X2NvdW50X3ZhbGlkYXRvcik7CisJUUludFZhbGlkYXRvciAqIGl2OworCWl2ID0gbmV3IFFJbnRWYWxpZGF0b3IoT1BfTUlOX0JVRl9TSVpFLCBPUF9NQVhfQlVGX1NJWkUsIGJ1ZmZlcl9zaXplX2VkaXQpOworCWJ1ZmZlcl9zaXplX2VkaXQtPnNldFZhbGlkYXRvcihpdik7CisJaXYgPSBuZXcgUUludFZhbGlkYXRvcihPUF9NSU5fTk9URV9UQUJMRV9TSVpFLCBPUF9NQVhfTk9URV9UQUJMRV9TSVpFLCBub3RlX3RhYmxlX3NpemVfZWRpdCk7CisJbm90ZV90YWJsZV9zaXplX2VkaXQtPnNldFZhbGlkYXRvcihpdik7CisJaXYgPSBuZXcgUUludFZhbGlkYXRvcigwLCBJTlRfTUFYLCBjYWxsZ3JhcGhfZGVwdGhfZWRpdCk7CisJY2FsbGdyYXBoX2RlcHRoX2VkaXQtPnNldFZhbGlkYXRvcihpdik7CisJaXYgPSBuZXcgUUludFZhbGlkYXRvcigwLCBJTlRfTUFYLCBidWZmZXJfd2F0ZXJzaGVkX2VkaXQpOworCWJ1ZmZlcl93YXRlcnNoZWRfZWRpdC0+c2V0VmFsaWRhdG9yKGl2KTsKKwlpdiA9IG5ldyBRSW50VmFsaWRhdG9yKDAsIE9QX01BWF9DUFVfQlVGX1NJWkUsIGNwdV9idWZmZXJfc2l6ZV9lZGl0KTsKKwljcHVfYnVmZmVyX3NpemVfZWRpdC0+c2V0VmFsaWRhdG9yKGl2KTsKKworCS8vIGRhZW1vbiBzdGF0dXMgdGltZXIKKwlzdGFydFRpbWVyKDUwMDApOworCXRpbWVyRXZlbnQoMCk7CisKKwlyZXNpemUobWluaW11bVNpemVIaW50KCkpOworCisJLy8gZm9yY2UgdGhlIHBpeG1hcCByZS1kcmF3CisJZXZlbnRfc2VsZWN0ZWQoKTsKK30KKworCit2b2lkIG9wcm9mX3N0YXJ0OjpmaWxsX2V2ZW50cygpCit7CisJLy8gd2UgbmVlZCB0byBidWlsZCB0aGUgZXZlbnQgZGVzY3Igc3R1ZmYgYmVmb3JlIGxvYWRpbmcgdGhlCisJLy8gY29uZmlndXJhdGlvbiBiZWNhdXNlIHdlIHVzZSBsb2NhdGVfZXZlbnQgdG8gZ2V0IGFuIGV2ZW50IGRlc2NyCisJLy8gZnJvbSBpdHMgbmFtZS4KKwlzdHJ1Y3QgbGlzdF9oZWFkICogcG9zOworCXN0cnVjdCBsaXN0X2hlYWQgKiBldmVudHMgPSBvcF9ldmVudHMoY3B1X3R5cGUpOworCisJbGlzdF9mb3JfZWFjaChwb3MsIGV2ZW50cykgeworCQlzdHJ1Y3Qgb3BfZXZlbnQgKiBldmVudCA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3Qgb3BfZXZlbnQsIGV2ZW50X25leHQpOworCisJCW9wX2V2ZW50X2Rlc2NyIGRlc2NyOworCisJCWRlc2NyLmNvdW50ZXJfbWFzayA9IGV2ZW50LT5jb3VudGVyX21hc2s7CisJCWRlc2NyLnZhbCA9IGV2ZW50LT52YWw7CisJCWlmIChldmVudC0+dW5pdC0+bnVtKSB7CisJCQlkZXNjci51bml0ID0gZXZlbnQtPnVuaXQ7CisJCX0gZWxzZSB7CisJCQlkZXNjci51bml0ID0gMDsKKwkJfQorCisJCWRlc2NyLm5hbWUgPSBldmVudC0+bmFtZTsKKwkJZGVzY3IuaGVscF9zdHIgPSBldmVudC0+ZGVzYzsKKwkJZGVzY3IubWluX2NvdW50ID0gZXZlbnQtPm1pbl9jb3VudDsKKworCQlmb3IgKHVpbnQgY3RyID0gMDsgY3RyIDwgb3BfbnJfY291bnRlcnM7ICsrY3RyKSB7CisJCQl1aW50IGNvdW50OworCisJCQlpZiAoIShkZXNjci5jb3VudGVyX21hc2sgJiAoMSA8PCBjdHIpKSkKKwkJCQljb250aW51ZTsKKworCQkJaWYgKGNwdV90eXBlID09IENQVV9SVEMpIHsKKwkJCQljb3VudCA9IDEwMjQ7CisJCQl9IGVsc2UgeworCQkJCS8qIHNldHRpbmcgdG8gY3B1IEh6IC8gMjAwMCBnaXZlcyBhIHNhZmUgdmFsdWUgZm9yCisJCQkJICogYWxsIGV2ZW50cywgYW5kIGEgZ29vZCBvbmUgZm9yIG1vc3QuCisJCQkJICovCisJCQkJaWYgKGNwdV9zcGVlZCkKKwkJCQkJY291bnQgPSBpbnQoY3B1X3NwZWVkICogNTAwKTsKKwkJCQllbHNlCisJCQkJCWNvdW50ID0gZGVzY3IubWluX2NvdW50ICogMTAwOworCQkJfQorCisJCQlldmVudF9jZmdzW2Rlc2NyLm5hbWVdLmNvdW50ID0gY291bnQ7CisJCQlldmVudF9jZmdzW2Rlc2NyLm5hbWVdLnVtYXNrID0gMDsKKwkJCWlmIChkZXNjci51bml0KQorCQkJCWV2ZW50X2NmZ3NbZGVzY3IubmFtZV0udW1hc2sgPSBkZXNjci51bml0LT5kZWZhdWx0X21hc2s7CisJCQlldmVudF9jZmdzW2Rlc2NyLm5hbWVdLm9zX3JpbmdfY291bnQgPSAxOworCQkJZXZlbnRfY2Znc1tkZXNjci5uYW1lXS51c2VyX3JpbmdfY291bnQgPSAxOworCQl9CisKKwkJdl9ldmVudHMucHVzaF9iYWNrKGRlc2NyKTsKKwl9CisKKwlldmVudHNfbGlzdC0+aGVhZGVyKCktPmhpZGUoKTsKKwlldmVudHNfbGlzdC0+c2V0U29ydGluZygtMSk7CisKKwlmaWxsX2V2ZW50c19saXN0Ym94KCk7CisKKwlyZWFkX3NldF9ldmVudHMoKTsKKworCS8vIEZJWE1FOiB3aHkgdGhpcyA/CisJaWYgKGNwdV90eXBlID09IENQVV9SVEMpCisJCWV2ZW50c19saXN0LT5zZXRDdXJyZW50SXRlbShldmVudHNfbGlzdC0+Zmlyc3RDaGlsZCgpKTsKKworCWxvYWRfY29uZmlnX2ZpbGUoKTsKK30KKworCituYW1lc3BhY2UgeworCisvLy8gZmluZCB0aGUgZmlyc3QgaXRlbSB3aXRoIHRoZSBnaXZlbiB0ZXh0IGluIGNvbHVtbiAwIG9yIHJldHVybiBOVUxMCitRM0xpc3RWaWV3SXRlbSAqIGZpbmRJdGVtKFEzTGlzdFZpZXcgKiB2aWV3LCBjaGFyIGNvbnN0ICogbmFtZSkKK3sKKwkvLyBRdCAyLjMuMSBkb2VzIG5vdCBoYXZlIFFMaXN0Vmlldzo6ZmluZEl0ZW0oKQorCVEzTGlzdFZpZXdJdGVtICogaXRlbSA9IHZpZXctPmZpcnN0Q2hpbGQoKTsKKworCXdoaWxlIChpdGVtICYmIHN0cmNtcChpdGVtLT50ZXh0KDApLmxhdGluMSgpLCBuYW1lKSkKKwkJaXRlbSA9IGl0ZW0tPm5leHRTaWJsaW5nKCk7CisKKwlyZXR1cm4gaXRlbTsKK30KKworfTsKKworCit2b2lkIG9wcm9mX3N0YXJ0OjpzZXR1cF9kZWZhdWx0X2V2ZW50KCkKK3sKKwlzdHJ1Y3Qgb3BfZGVmYXVsdF9ldmVudF9kZXNjciBkZXNjcjsKKwlvcF9kZWZhdWx0X2V2ZW50KGNwdV90eXBlLCAmZGVzY3IpOworCisJZXZlbnRfY2Znc1tkZXNjci5uYW1lXS51bWFzayA9IGRlc2NyLnVtOworCWV2ZW50X2NmZ3NbZGVzY3IubmFtZV0uY291bnQgPSBkZXNjci5jb3VudDsKKwlldmVudF9jZmdzW2Rlc2NyLm5hbWVdLnVzZXJfcmluZ19jb3VudCA9IDE7CisJZXZlbnRfY2Znc1tkZXNjci5uYW1lXS5vc19yaW5nX2NvdW50ID0gMTsKKworCVEzTGlzdFZpZXdJdGVtICogaXRlbSA9IGZpbmRJdGVtKGV2ZW50c19saXN0LCBkZXNjci5uYW1lKTsKKwlpZiAoaXRlbSkKKwkJaXRlbS0+c2V0U2VsZWN0ZWQodHJ1ZSk7Cit9CisKKwordm9pZCBvcHJvZl9zdGFydDo6cmVhZF9zZXRfZXZlbnRzKCkKK3sKKwlzdHJpbmcgbmFtZSA9IGdldF9jb25maWdfZmlsZW5hbWUoIi5vcHJvZmlsZS9kYWVtb25yYyIpOworCisJaWZzdHJlYW0gaW4obmFtZS5jX3N0cigpKTsKKworCWlmICghaW4pIHsKKwkJc2V0dXBfZGVmYXVsdF9ldmVudCgpOworCQlyZXR1cm47CisJfQorCisJc3RyaW5nIHN0cjsKKworCWJvb2wgb25lX2VuYWJsZWQgPSBmYWxzZTsKKworCXdoaWxlIChnZXRsaW5lKGluLCBzdHIpKSB7CisJCXN0cmluZyBjb25zdCB2YWwgPSBzcGxpdChzdHIsICc9Jyk7CisJCXN0cmluZyBjb25zdCBuYW1lID0gc3RyOworCisJCWlmICghaXNfcHJlZml4KG5hbWUsICJDSE9TRU5fRVZFTlRTXyIpKQorCQkJY29udGludWU7CisKKwkJb25lX2VuYWJsZWQgPSB0cnVlOworCisJCS8vIENIT1NFTl9FVkVOVFNfI25yPUNQVV9DTEtfVU5IQUxURUQ6MTAwMDA6MDoxOjEKKwkJdmVjdG9yPHN0cmluZz4gcGFydHMgPSBzZXBhcmF0ZV90b2tlbih2YWwsICc6Jyk7CisKKwkJaWYgKHBhcnRzLnNpemUoKSAhPSA1ICYmIHBhcnRzLnNpemUoKSAhPSAyKSB7CisJCQljZXJyIDw8ICJpbnZhbGlkIGNvbmZpZ3VyYXRpb24gZmlsZVxuIjsKKwkJCS8vIEZJWE1FCisJCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJCX0KKworCQlzdHJpbmcgZXZfbmFtZSA9IHBhcnRzWzBdOworCQlldmVudF9jZmdzW2V2X25hbWVdLmNvdW50ID0KKwkJCW9wX2xleGljYWxfY2FzdDx1bnNpZ25lZCBpbnQ+KHBhcnRzWzFdKTsKKworCQkvLyBDUFVfQ0xLX1VOSEFMVEVEOjEwMDAwIGlzIGFsc28gdmFsaWQKKwkJaWYgKHBhcnRzLnNpemUoKSA9PSA1KSB7CisJCQlldmVudF9jZmdzW2V2X25hbWVdLnVtYXNrID0KKwkJCQlvcF9sZXhpY2FsX2Nhc3Q8dW5zaWduZWQgaW50PihwYXJ0c1syXSk7CisJCQlldmVudF9jZmdzW2V2X25hbWVdLnVzZXJfcmluZ19jb3VudCA9CisJCQkJb3BfbGV4aWNhbF9jYXN0PHVuc2lnbmVkIGludD4ocGFydHNbM10pOworCQkJZXZlbnRfY2Znc1tldl9uYW1lXS5vc19yaW5nX2NvdW50ID0KKwkJCQlvcF9sZXhpY2FsX2Nhc3Q8dW5zaWduZWQgaW50PihwYXJ0c1s0XSk7CisJCX0gZWxzZSB7CisJCQlldmVudF9jZmdzW2V2X25hbWVdLnVtYXNrID0gMDsKKwkJCWV2ZW50X2NmZ3NbZXZfbmFtZV0udXNlcl9yaW5nX2NvdW50ID0gMTsKKwkJCWV2ZW50X2NmZ3NbZXZfbmFtZV0ub3NfcmluZ19jb3VudCA9IDE7CisJCX0KKworCQlRM0xpc3RWaWV3SXRlbSAqIGl0ZW0gPSBmaW5kSXRlbShldmVudHNfbGlzdCwgZXZfbmFtZS5jX3N0cigpKTsKKwkJaWYgKGl0ZW0pCisJCQlpdGVtLT5zZXRTZWxlY3RlZCh0cnVlKTsKKwl9CisKKwkvLyB1c2UgZGVmYXVsdCBldmVudCBpZiBub25lIHNldAorCWlmICghb25lX2VuYWJsZWQpCisJCXNldHVwX2RlZmF1bHRfZXZlbnQoKTsKK30KKworCit2b2lkIG9wcm9mX3N0YXJ0Ojpsb2FkX2NvbmZpZ19maWxlKCkKK3sKKwlzdHJpbmcgbmFtZSA9IGdldF9jb25maWdfZmlsZW5hbWUoIi5vcHJvZmlsZS9kYWVtb25yYyIpOworCisJaWZzdHJlYW0gaW4obmFtZS5jX3N0cigpKTsKKwlpZiAoIWluKSB7CisJCWlmICghY2hlY2tfYW5kX2NyZWF0ZV9jb25maWdfZGlyKCkpCisJCQlyZXR1cm47CisKKwkJb2ZzdHJlYW0gb3V0KG5hbWUuY19zdHIoKSk7CisJCWlmICghb3V0KSB7CisJCQlRTWVzc2FnZUJveDo6d2FybmluZyh0aGlzLCAwLCAiVW5hYmxlIHRvIG9wZW4gY29uZmlndXJhdGlvbiAiCisJCQkJImZpbGUgfi8ub3Byb2ZpbGUvZGFlbW9ucmMiKTsKKwkJfQorCQlyZXR1cm47CisJfQorCisJaW4gPj4gY29uZmlnOworfQorCisKKy8vIHVzZXIgcmVxdWVzdCBhICJub3JtYWwiIGV4aXQgc28gc2F2ZSB0aGUgY29uZmlnIGZpbGUuCit2b2lkIG9wcm9mX3N0YXJ0OjphY2NlcHQoKQoreworCS8vIHJlY29yZCB0aGUgcHJldmlvdXMgc2V0dGluZ3MKKwlyZWNvcmRfc2VsZWN0ZWRfZXZlbnRfY29uZmlnKCk7CisKKwlzYXZlX2NvbmZpZygpOworCisJUURpYWxvZzo6YWNjZXB0KCk7Cit9CisKKwordm9pZCBvcHJvZl9zdGFydDo6Y2xvc2VFdmVudChRQ2xvc2VFdmVudCAqKQoreworCWFjY2VwdCgpOworfQorCisKK3ZvaWQgb3Byb2Zfc3RhcnQ6OnRpbWVyRXZlbnQoUVRpbWVyRXZlbnQgKikKK3sKKwlzdGF0aWMgdGltZV90IGxhc3QgPSB0aW1lKDApOworCisJZGFlbW9uX3N0YXR1cyBkc3RhdDsKKworCWZsdXNoX3Byb2ZpbGVyX2RhdGFfYnRuLT5zZXRFbmFibGVkKGRzdGF0LnJ1bm5pbmcpOworCXN0b3BfcHJvZmlsZXJfYnRuLT5zZXRFbmFibGVkKGRzdGF0LnJ1bm5pbmcpOworCXN0YXJ0X3Byb2ZpbGVyX2J0bi0+c2V0RW5hYmxlZCghZHN0YXQucnVubmluZyk7CisJcmVzZXRfc2FtcGxlX2ZpbGVzX2J0bi0+c2V0RW5hYmxlZCghZHN0YXQucnVubmluZyk7CisKKwlpZiAoIWRzdGF0LnJ1bm5pbmcpIHsKKwkJZGFlbW9uX2xhYmVsLT5zZXRUZXh0KCJQcm9maWxlciBpcyBub3QgcnVubmluZy4iKTsKKwkJcmV0dXJuOworCX0KKworCW9zdHJpbmdzdHJlYW0gc3M7CisJc3MgPDwgIlByb2ZpbGVyIHJ1bm5pbmc6IjsKKworCXRpbWVfdCBjdXJyID0gdGltZSgwKTsKKwl0b3RhbF9ucl9pbnRlcnJ1cHRzICs9IGRzdGF0Lm5yX2ludGVycnVwdHM7CisKKwlpZiAoY3VyciAtIGxhc3QpCisJCXNzIDw8ICIgKCIgPDwgZHN0YXQubnJfaW50ZXJydXB0cyAvIChjdXJyIC0gbGFzdCkgPDwgIiBpbnRlcnJ1cHRzIC8gc2Vjb25kLCB0b3RhbCAiIDw8IHRvdGFsX25yX2ludGVycnVwdHMgPDwgIikiOworCisJZGFlbW9uX2xhYmVsLT5zZXRUZXh0KHNzLnN0cigpLmNfc3RyKCkpOworCisJbGFzdCA9IGN1cnI7Cit9CisKKwordm9pZCBvcHJvZl9zdGFydDo6ZmlsbF9ldmVudHNfbGlzdGJveCgpCit7CisJc2V0VXBkYXRlc0VuYWJsZWQoZmFsc2UpOworCisJZm9yICh2ZWN0b3I8b3BfZXZlbnRfZGVzY3I+OjpyZXZlcnNlX2l0ZXJhdG9yIGNpdCA9IHZfZXZlbnRzLnJiZWdpbigpOworCSAgICAgY2l0ICE9IHZfZXZlbnRzLnJlbmQoKTsgKytjaXQpIHsKKwkJbmV3IFEzTGlzdFZpZXdJdGVtKGV2ZW50c19saXN0LCBjaXQtPm5hbWUuY19zdHIoKSk7CisJfQorCisJc2V0VXBkYXRlc0VuYWJsZWQodHJ1ZSk7CisJdXBkYXRlKCk7Cit9CisKKwordm9pZCBvcHJvZl9zdGFydDo6ZGlzcGxheV9ldmVudChvcF9ldmVudF9kZXNjciBjb25zdCAmIGRlc2NyKQoreworCXNldFVwZGF0ZXNFbmFibGVkKGZhbHNlKTsKKworCXNldHVwX3VuaXRfbWFza3MoZGVzY3IpOworCW9zX3JpbmdfY291bnRfY2ItPnNldEVuYWJsZWQodHJ1ZSk7CisJdXNlcl9yaW5nX2NvdW50X2NiLT5zZXRFbmFibGVkKHRydWUpOworCWV2ZW50X2NvdW50X2VkaXQtPnNldEVuYWJsZWQodHJ1ZSk7CisKKwlldmVudF9zZXR0aW5nICYgY2ZnID0gZXZlbnRfY2Znc1tkZXNjci5uYW1lXTsKKworCW9zX3JpbmdfY291bnRfY2ItPnNldENoZWNrZWQoY2ZnLm9zX3JpbmdfY291bnQpOworCXVzZXJfcmluZ19jb3VudF9jYi0+c2V0Q2hlY2tlZChjZmcudXNlcl9yaW5nX2NvdW50KTsKKwlRU3RyaW5nIGNvdW50X3RleHQ7CisJY291bnRfdGV4dC5zZXROdW0oY2ZnLmNvdW50KTsKKwlldmVudF9jb3VudF9lZGl0LT5zZXRUZXh0KGNvdW50X3RleHQpOworCWV2ZW50X2NvdW50X3ZhbGlkYXRvci0+c2V0UmFuZ2UoZGVzY3IubWluX2NvdW50LCBtYXhfcGVyZl9jb3VudCgpKTsKKworCXNldFVwZGF0ZXNFbmFibGVkKHRydWUpOworCXVwZGF0ZSgpOworfQorCisKK2Jvb2wgb3Byb2Zfc3RhcnQ6OmlzX3NlbGVjdGFibGVfZXZlbnQoUTNMaXN0Vmlld0l0ZW0gKiBpdGVtKQoreworCWlmIChpdGVtLT5pc1NlbGVjdGVkKCkpCisJCXJldHVybiB0cnVlOworCisJc2VsZWN0ZWRfZXZlbnRzLmluc2VydChpdGVtKTsKKworCWJvb2wgcmV0ID0gZmFsc2U7CisJaWYgKGFsbG9jX3NlbGVjdGVkX2V2ZW50cygpKQorCQlyZXQgPSB0cnVlOworCisJc2VsZWN0ZWRfZXZlbnRzLmVyYXNlKGl0ZW0pOworCisJcmV0dXJuIHJldDsKK30KKworCit2b2lkIG9wcm9mX3N0YXJ0OjpkcmF3X2V2ZW50X2xpc3QoKQoreworCVEzTGlzdFZpZXdJdGVtICogY3VyOworCWZvciAoY3VyID0gZXZlbnRzX2xpc3QtPmZpcnN0Q2hpbGQoKTsgY3VyOyBjdXIgPSBjdXItPm5leHRTaWJsaW5nKCkpIHsKKwkJaWYgKGlzX3NlbGVjdGFibGVfZXZlbnQoY3VyKSkKKwkJCWN1ci0+c2V0UGl4bWFwKDAsICpncmVlbl9waXhtYXApOworCQllbHNlCisJCQljdXItPnNldFBpeG1hcCgwLCAqcmVkX3BpeG1hcCk7CisJfQorfQorCisKK2Jvb2wgb3Byb2Zfc3RhcnQ6OmFsbG9jX3NlbGVjdGVkX2V2ZW50cygpIGNvbnN0Cit7CisJdmVjdG9yPG9wX2V2ZW50IGNvbnN0ICo+IGV2ZW50czsKKworCXNldDxRM0xpc3RWaWV3SXRlbSAqPjo6Y29uc3RfaXRlcmF0b3IgaXQ7CisJZm9yIChpdCA9IHNlbGVjdGVkX2V2ZW50cy5iZWdpbigpOyBpdCAhPSBzZWxlY3RlZF9ldmVudHMuZW5kKCk7ICsraXQpCisJCWV2ZW50cy5wdXNoX2JhY2soZmluZF9ldmVudF9ieV9uYW1lKCgqaXQpLT50ZXh0KDApLmxhdGluMSgpLDAsMCkpOworCisJc2l6ZV90ICogbWFwID0KKwkJbWFwX2V2ZW50X3RvX2NvdW50ZXIoJmV2ZW50c1swXSwgZXZlbnRzLnNpemUoKSwgY3B1X3R5cGUpOworCisJaWYgKCFtYXApCisJCXJldHVybiBmYWxzZTsKKworCWZyZWUobWFwKTsKKwlyZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBvcHJvZl9zdGFydDo6ZXZlbnRfc2VsZWN0ZWQoKQoreworCS8vIFRoZSBkZWFsIGlzIHNpbXBsZTogUVQgbGFjayBvZiBhIHdheSB0byBrbm93IHdoYXQgaXRlbSB3YXMgdGhlIGxhc3QKKwkvLyAoZGUpc2VsZWN0ZWQgaXRlbSBzbyB3ZSByZWNvcmQgYSBzZXQgb2Ygc2VsZWN0ZWQgaXRlbXMgYW5kIGRpZmYKKwkvLyBpdCBpbiB0aGUgYXBwcm9wcmlhdGUgd2F5IHdpdGggdGhlIHByZXZpb3VzIGxpc3Qgb2Ygc2VsZWN0ZWQgaXRlbXMuCisKKwlzZXQ8UTNMaXN0Vmlld0l0ZW0gKj4gY3VycmVudF9zZWxlY3Rpb247CisJUTNMaXN0Vmlld0l0ZW0gKiBjdXI7CisJZm9yIChjdXIgPSBldmVudHNfbGlzdC0+Zmlyc3RDaGlsZCgpOyBjdXI7IGN1ciA9IGN1ci0+bmV4dFNpYmxpbmcoKSkgeworCQlpZiAoY3VyLT5pc1NlbGVjdGVkKCkpCisJCQljdXJyZW50X3NlbGVjdGlvbi5pbnNlcnQoY3VyKTsKKwl9CisKKwkvLyBGaXJzdCByZW1vdmUgdGhlIGRlc2VsZWN0ZWQgaXRlbS4KKwl2ZWN0b3I8UTNMaXN0Vmlld0l0ZW0gKj4gbmV3X2Rlc2VsZWN0ZWQ7CisJc2V0X2RpZmZlcmVuY2Uoc2VsZWN0ZWRfZXZlbnRzLmJlZ2luKCksIHNlbGVjdGVkX2V2ZW50cy5lbmQoKSwKKwkJICAgICAgIGN1cnJlbnRfc2VsZWN0aW9uLmJlZ2luKCksIGN1cnJlbnRfc2VsZWN0aW9uLmVuZCgpLAorCQkgICAgICAgYmFja19pbnNlcnRlcihuZXdfZGVzZWxlY3RlZCkpOworCXZlY3RvcjxRM0xpc3RWaWV3SXRlbSAqPjo6Y29uc3RfaXRlcmF0b3IgaXQ7CisJZm9yIChpdCA9IG5ld19kZXNlbGVjdGVkLmJlZ2luKCk7IGl0ICE9IG5ld19kZXNlbGVjdGVkLmVuZCgpOyArK2l0KQorCQlzZWxlY3RlZF9ldmVudHMuZXJhc2UoKml0KTsKKworCS8vIE5vdyB0cnkgdG8gYWRkIHRoZSBuZXdseSBzZWxlY3RlZCBpdGVtIGlmIGVub3VnaCBIVyByZXNvdXJjZSBleGlzdHMKKwl2ZWN0b3I8UTNMaXN0Vmlld0l0ZW0gKj4gbmV3X3NlbGVjdGVkOworCXNldF9kaWZmZXJlbmNlKGN1cnJlbnRfc2VsZWN0aW9uLmJlZ2luKCksIGN1cnJlbnRfc2VsZWN0aW9uLmVuZCgpLAorCQkgICAgICAgc2VsZWN0ZWRfZXZlbnRzLmJlZ2luKCksIHNlbGVjdGVkX2V2ZW50cy5lbmQoKSwKKwkJICAgICAgIGJhY2tfaW5zZXJ0ZXIobmV3X3NlbGVjdGVkKSk7CisJZm9yIChpdCA9IG5ld19zZWxlY3RlZC5iZWdpbigpOyBpdCAhPSBuZXdfc2VsZWN0ZWQuZW5kKCk7ICsraXQpIHsKKwkJc2VsZWN0ZWRfZXZlbnRzLmluc2VydCgqaXQpOworCQlpZiAoIWFsbG9jX3NlbGVjdGVkX2V2ZW50cygpKSB7CisJCQkoKml0KS0+c2V0U2VsZWN0ZWQoZmFsc2UpOworCQkJc2VsZWN0ZWRfZXZlbnRzLmVyYXNlKCppdCk7CisJCX0gZWxzZSB7CisJCQljdXJyZW50X2V2ZW50ID0gKml0OworCQl9CisJfQorCisJZHJhd19ldmVudF9saXN0KCk7CisKKwlpZiAoY3VycmVudF9ldmVudCkKKwkJZGlzcGxheV9ldmVudChsb2NhdGVfZXZlbnQoY3VycmVudF9ldmVudC0+dGV4dCgwKS5sYXRpbjEoKSkpOworfQorCisKK3ZvaWQgb3Byb2Zfc3RhcnQ6OmV2ZW50X292ZXIoUTNMaXN0Vmlld0l0ZW0gKiBpdGVtKQoreworCW9wX2V2ZW50X2Rlc2NyIGNvbnN0ICYgZGVzY3IgPSBsb2NhdGVfZXZlbnQoaXRlbS0+dGV4dCgwKS5sYXRpbjEoKSk7CisKKwlzdHJpbmcgaGVscF9zdHIgPSBkZXNjci5oZWxwX3N0ci5jX3N0cigpOworCWlmICghaXNfc2VsZWN0YWJsZV9ldmVudChpdGVtKSkgeworCQloZWxwX3N0ciArPSAiIGNvbmZsaWN0cyB3aXRoOiI7CisKKwkJc2V0PFEzTGlzdFZpZXdJdGVtICo+Ojpjb25zdF9pdGVyYXRvciBpdDsKKwkJZm9yIChpdCA9IHNlbGVjdGVkX2V2ZW50cy5iZWdpbigpOyAKKwkJICAgICBpdCAhPSBzZWxlY3RlZF9ldmVudHMuZW5kKCk7ICkgeworCQkJUTNMaXN0Vmlld0l0ZW0gKiB0ZW1wID0gKml0OworCQkJc2VsZWN0ZWRfZXZlbnRzLmVyYXNlKGl0KyspOworCQkJaWYgKGlzX3NlbGVjdGFibGVfZXZlbnQoaXRlbSkpIHsKKwkJCQloZWxwX3N0ciArPSAiICI7CisJCQkJaGVscF9zdHIgKz0gdGVtcC0+dGV4dCgwKS5sYXRpbjEoKTsKKwkJCX0KKwkJCXNlbGVjdGVkX2V2ZW50cy5pbnNlcnQodGVtcCk7CisJCX0KKwl9CisKKwlldmVudF9oZWxwX2xhYmVsLT5zZXRUZXh0KGhlbHBfc3RyLmNfc3RyKCkpOworfQorCisKKy8vLyBzZWxlY3QgdGhlIGtlcm5lbCBpbWFnZSBmaWxlbmFtZQordm9pZCBvcHJvZl9zdGFydDo6Y2hvb3NlX2tlcm5lbF9maWxlbmFtZSgpCit7CisJc3RyaW5nIG5hbWUgPSBrZXJuZWxfZmlsZW5hbWVfZWRpdC0+dGV4dCgpLmxhdGluMSgpOworCXN0cmluZyByZXN1bHQgPSBkb19vcGVuX2ZpbGVfb3JfZGlyKG5hbWUsIGZhbHNlKTsKKworCWlmICghcmVzdWx0LmVtcHR5KCkpCisJCWtlcm5lbF9maWxlbmFtZV9lZGl0LT5zZXRUZXh0KHJlc3VsdC5jX3N0cigpKTsKK30KKworCisvLyB0aGlzIHJlY29yZCB0aGUgY3VycmVudCBzZWxlY3RlZCBldmVudCBzZXR0aW5nIGluIHRoZSBldmVudF9jZmdbXSBzdHVmZi4KKy8vIEZJWE1FOiBuZWVkIHZhbGlkYXRpb24/Cit2b2lkIG9wcm9mX3N0YXJ0OjpyZWNvcmRfc2VsZWN0ZWRfZXZlbnRfY29uZmlnKCkKK3sKKwlpZiAoIWN1cnJlbnRfZXZlbnQpCisJCXJldHVybjsKKworCXN0cmluZyBuYW1lKGN1cnJlbnRfZXZlbnQtPnRleHQoMCkubGF0aW4xKCkpOworCisJZXZlbnRfc2V0dGluZyAmIGNmZyA9IGV2ZW50X2NmZ3NbbmFtZV07CisJb3BfZXZlbnRfZGVzY3IgY29uc3QgJiBjdXJyID0gbG9jYXRlX2V2ZW50KG5hbWUpOworCisJY2ZnLmNvdW50ID0gZXZlbnRfY291bnRfZWRpdC0+dGV4dCgpLnRvVUludCgpOworCWNmZy5vc19yaW5nX2NvdW50ID0gb3NfcmluZ19jb3VudF9jYi0+aXNDaGVja2VkKCk7CisJY2ZnLnVzZXJfcmluZ19jb3VudCA9IHVzZXJfcmluZ19jb3VudF9jYi0+aXNDaGVja2VkKCk7CisJY2ZnLnVtYXNrID0gZ2V0X3VuaXRfbWFzayhjdXJyKTsKK30KKworCisvLyB2YWxpZGF0ZSBhbmQgc2F2ZSB0aGUgY29uZmlndXJhdGlvbiAoVGhlIHF0IHZhbGlkYXRvciBpbnN0YWxsZWQKKy8vIGFyZSBub3Qgc3VmZmljaWVudCB0byBkbyB0aGUgdmFsaWRhdGlvbikKK2Jvb2wgb3Byb2Zfc3RhcnQ6OnJlY29yZF9jb25maWcoKQoreworCWNvbmZpZy5rZXJuZWxfZmlsZW5hbWUgPSBrZXJuZWxfZmlsZW5hbWVfZWRpdC0+dGV4dCgpLmxhdGluMSgpOworCWNvbmZpZy5ub19rZXJuZWwgPSBub192bWxpbnV4LT5pc0NoZWNrZWQoKTsKKworCXVpbnQgdGVtcCA9IGJ1ZmZlcl9zaXplX2VkaXQtPnRleHQoKS50b1VJbnQoKTsKKwlpZiAodGVtcCA8IE9QX01JTl9CVUZfU0laRSB8fCB0ZW1wID4gT1BfTUFYX0JVRl9TSVpFKSB7CisJCW9zdHJpbmdzdHJlYW0gZXJyb3I7CisKKwkJZXJyb3IgPDwgImJ1ZmZlciBzaXplIG91dCBvZiByYW5nZTogIiA8PCB0ZW1wCisJCSAgICAgIDw8ICIgdmFsaWQgcmFuZ2UgaXMgWyIgPDwgT1BfTUlOX0JVRl9TSVpFIDw8ICIsICIKKwkJICAgICAgPDwgT1BfTUFYX0JVRl9TSVpFIDw8ICJdIjsKKworCQlRTWVzc2FnZUJveDo6d2FybmluZyh0aGlzLCAwLCBlcnJvci5zdHIoKS5jX3N0cigpKTsKKworCQlyZXR1cm4gZmFsc2U7CisJfQorCWNvbmZpZy5idWZmZXJfc2l6ZSA9IHRlbXA7CisKKwl0ZW1wID0gYnVmZmVyX3dhdGVyc2hlZF9lZGl0LT50ZXh0KCkudG9VSW50KCk7CisJLy8gd2F0ZXJzaGVkIGFib3ZlIGhhbGYgb2YgYnVmZmVyIHNpemUgbWFrZSBsaXR0bGUgc2Vuc2UuCisJaWYgKHRlbXAgPiBjb25maWcuYnVmZmVyX3NpemUgLyAyKSB7CisJCW9zdHJpbmdzdHJlYW0gZXJyb3I7CisKKwkJZXJyb3IgPDwgImJ1ZmZlciB3YXRlcnNoZWQgb3V0IG9mIHJhbmdlOiAiIDw8IHRlbXAKKwkJICAgICAgPDwgIiB2YWxpZCByYW5nZSBpcyBbMCAodXNlIGRlZmF1bHQpLCBidWZmZXIgc2l6ZS8yXSAiCisJCSAgICAgIDw8ICJnZW5lcmFsbHkgMC4yNSAqIGJ1ZmZlciBzaXplIGlzIGZpbmUiOworCisJCVFNZXNzYWdlQm94Ojp3YXJuaW5nKHRoaXMsIDAsIGVycm9yLnN0cigpLmNfc3RyKCkpOworCisJCXJldHVybiBmYWxzZTsKKwl9CisJY29uZmlnLmJ1ZmZlcl93YXRlcnNoZWQgPSB0ZW1wOworCisJdGVtcCA9IGNwdV9idWZmZXJfc2l6ZV9lZGl0LT50ZXh0KCkudG9VSW50KCk7CisJaWYgKCh0ZW1wICE9IDAgJiYgdGVtcCA8IE9QX01JTl9DUFVfQlVGX1NJWkUpIHx8CisJICAgIHRlbXAgPiBPUF9NQVhfQ1BVX0JVRl9TSVpFKSB7CisJCW9zdHJpbmdzdHJlYW0gZXJyb3I7CisKKwkJZXJyb3IgPDwgImNwdSBidWZmZXIgc2l6ZSBvdXQgb2YgcmFuZ2U6ICIgPDwgdGVtcAorCQkgICAgICA8PCAiIHZhbGlkIHJhbmdlIGlzIFsiIDw8IE9QX01JTl9DUFVfQlVGX1NJWkUgPDwgIiwgIgorCQkgICAgICA8PCBPUF9NQVhfQ1BVX0JVRl9TSVpFIDw8ICJdIChzaXplID0gMDogdXNlIGRlZmF1bHQpIjsKKworCQlRTWVzc2FnZUJveDo6d2FybmluZyh0aGlzLCAwLCBlcnJvci5zdHIoKS5jX3N0cigpKTsKKworCQlyZXR1cm4gZmFsc2U7CisJfQorCWNvbmZpZy5jcHVfYnVmZmVyX3NpemUgPSB0ZW1wOworCisJdGVtcCA9IG5vdGVfdGFibGVfc2l6ZV9lZGl0LT50ZXh0KCkudG9VSW50KCk7CisJaWYgKHRlbXAgPCBPUF9NSU5fTk9URV9UQUJMRV9TSVpFIHx8IHRlbXAgPiBPUF9NQVhfTk9URV9UQUJMRV9TSVpFKSB7CisJCW9zdHJpbmdzdHJlYW0gZXJyb3I7CisKKwkJZXJyb3IgPDwgIm5vdGUgdGFibGUgc2l6ZSBvdXQgb2YgcmFuZ2U6ICIgPDwgdGVtcAorCQkgICAgICA8PCAiIHZhbGlkIHJhbmdlIGlzIFsiIDw8IE9QX01JTl9OT1RFX1RBQkxFX1NJWkUgPDwgIiwgIgorCQkgICAgICA8PCBPUF9NQVhfTk9URV9UQUJMRV9TSVpFIDw8ICJdIjsKKworCQlRTWVzc2FnZUJveDo6d2FybmluZyh0aGlzLCAwLCBlcnJvci5zdHIoKS5jX3N0cigpKTsKKworCQlyZXR1cm4gZmFsc2U7CisJfQorCWNvbmZpZy5ub3RlX3RhYmxlX3NpemUgPSB0ZW1wOworCisJdGVtcCA9IGNhbGxncmFwaF9kZXB0aF9lZGl0LT50ZXh0KCkudG9VSW50KCk7CisJaWYgKHRlbXAgPiBJTlRfTUFYKSB7CisJCW9zdHJpbmdzdHJlYW0gZXJyb3I7CisKKwkJZXJyb3IgPDwgImNhbGxncmFwaCBkZXB0aCAgb3V0IG9mIHJhbmdlOiAiIDw8IHRlbXAKKwkJICAgICAgPDwgIiB2YWxpZCByYW5nZSBpcyBbIiA8PCAwIDw8ICIsICIKKwkJICAgICAgPDwgSU5UX01BWCA8PCAiXSI7CisKKwkJUU1lc3NhZ2VCb3g6Ondhcm5pbmcodGhpcywgMCwgZXJyb3Iuc3RyKCkuY19zdHIoKSk7CisKKwkJcmV0dXJuIGZhbHNlOworCX0KKwljb25maWcuY2FsbGdyYXBoX2RlcHRoID0gdGVtcDsKKworCWNvbmZpZy52ZXJib3NlID0gdmVyYm9zZS0+aXNDaGVja2VkKCk7CisJY29uZmlnLnNlcGFyYXRlX2xpYiA9IHNlcGFyYXRlX2xpYl9jYi0+aXNDaGVja2VkKCk7CisJY29uZmlnLnNlcGFyYXRlX2tlcm5lbCA9IHNlcGFyYXRlX2tlcm5lbF9jYi0+aXNDaGVja2VkKCk7CisJY29uZmlnLnNlcGFyYXRlX2NwdSA9IHNlcGFyYXRlX2NwdV9jYi0+aXNDaGVja2VkKCk7CisJY29uZmlnLnNlcGFyYXRlX3RocmVhZCA9IHNlcGFyYXRlX3RocmVhZF9jYi0+aXNDaGVja2VkKCk7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworCit2b2lkIG9wcm9mX3N0YXJ0OjpnZXRfdW5pdF9tYXNrX3BhcnQob3BfZXZlbnRfZGVzY3IgY29uc3QgJiBkZXNjciwgdWludCBudW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBzZWxlY3RlZCwgdWludCAmIG1hc2spCit7CisJaWYgKCFzZWxlY3RlZCkKKwkJcmV0dXJuOworCWlmICAobnVtID49IGRlc2NyLnVuaXQtPm51bSkKKwkJcmV0dXJuOworCisJaWYgKGRlc2NyLnVuaXQtPnVuaXRfdHlwZV9tYXNrID09IHV0bV9iaXRtYXNrKQorCQltYXNrIHw9IGRlc2NyLnVuaXQtPnVtW251bV0udmFsdWU7CisJZWxzZQorCQltYXNrID0gZGVzY3IudW5pdC0+dW1bbnVtXS52YWx1ZTsKK30KKworCisvLyByZXR1cm4gdGhlIHVuaXQgbWFzayBzZWxlY3RlZCB0aHJvdWdoIHRoZSB1bml0IG1hc2sgY2hlY2sgYm94Cit1aW50IG9wcm9mX3N0YXJ0OjpnZXRfdW5pdF9tYXNrKG9wX2V2ZW50X2Rlc2NyIGNvbnN0ICYgZGVzY3IpCit7CisJdWludCBtYXNrID0gMDsKKworCWlmICghZGVzY3IudW5pdCkKKwkJcmV0dXJuIDA7CisKKwkvLyBtYW5kYXRvcnkgbWFzayBpcyB0cmFuc3BhcmVudCBmb3IgdXNlci4KKwlpZiAoZGVzY3IudW5pdC0+dW5pdF90eXBlX21hc2sgPT0gdXRtX21hbmRhdG9yeSkgeworCQltYXNrID0gZGVzY3IudW5pdC0+ZGVmYXVsdF9tYXNrOworCQlyZXR1cm4gbWFzazsKKwl9CisKKwlnZXRfdW5pdF9tYXNrX3BhcnQoZGVzY3IsIDAsIGNoZWNrMC0+aXNDaGVja2VkKCksIG1hc2spOworCWdldF91bml0X21hc2tfcGFydChkZXNjciwgMSwgY2hlY2sxLT5pc0NoZWNrZWQoKSwgbWFzayk7CisJZ2V0X3VuaXRfbWFza19wYXJ0KGRlc2NyLCAyLCBjaGVjazItPmlzQ2hlY2tlZCgpLCBtYXNrKTsKKwlnZXRfdW5pdF9tYXNrX3BhcnQoZGVzY3IsIDMsIGNoZWNrMy0+aXNDaGVja2VkKCksIG1hc2spOworCWdldF91bml0X21hc2tfcGFydChkZXNjciwgNCwgY2hlY2s0LT5pc0NoZWNrZWQoKSwgbWFzayk7CisJZ2V0X3VuaXRfbWFza19wYXJ0KGRlc2NyLCA1LCBjaGVjazUtPmlzQ2hlY2tlZCgpLCBtYXNrKTsKKwlnZXRfdW5pdF9tYXNrX3BhcnQoZGVzY3IsIDYsIGNoZWNrNi0+aXNDaGVja2VkKCksIG1hc2spOworCWdldF91bml0X21hc2tfcGFydChkZXNjciwgNywgY2hlY2s3LT5pc0NoZWNrZWQoKSwgbWFzayk7CisJZ2V0X3VuaXRfbWFza19wYXJ0KGRlc2NyLCA4LCBjaGVjazgtPmlzQ2hlY2tlZCgpLCBtYXNrKTsKKwlnZXRfdW5pdF9tYXNrX3BhcnQoZGVzY3IsIDksIGNoZWNrOS0+aXNDaGVja2VkKCksIG1hc2spOworCWdldF91bml0X21hc2tfcGFydChkZXNjciwgMTAsIGNoZWNrMTAtPmlzQ2hlY2tlZCgpLCBtYXNrKTsKKwlnZXRfdW5pdF9tYXNrX3BhcnQoZGVzY3IsIDExLCBjaGVjazExLT5pc0NoZWNrZWQoKSwgbWFzayk7CisJZ2V0X3VuaXRfbWFza19wYXJ0KGRlc2NyLCAxMiwgY2hlY2sxMi0+aXNDaGVja2VkKCksIG1hc2spOworCWdldF91bml0X21hc2tfcGFydChkZXNjciwgMTMsIGNoZWNrMTMtPmlzQ2hlY2tlZCgpLCBtYXNrKTsKKwlnZXRfdW5pdF9tYXNrX3BhcnQoZGVzY3IsIDE0LCBjaGVjazE0LT5pc0NoZWNrZWQoKSwgbWFzayk7CisJZ2V0X3VuaXRfbWFza19wYXJ0KGRlc2NyLCAxNSwgY2hlY2sxNS0+aXNDaGVja2VkKCksIG1hc2spOworCXJldHVybiBtYXNrOworfQorCisKK3ZvaWQgb3Byb2Zfc3RhcnQ6OmhpZGVfbWFza3MoKQoreworCWNoZWNrMC0+aGlkZSgpOworCWNoZWNrMS0+aGlkZSgpOworCWNoZWNrMi0+aGlkZSgpOworCWNoZWNrMy0+aGlkZSgpOworCWNoZWNrNC0+aGlkZSgpOworCWNoZWNrNS0+aGlkZSgpOworCWNoZWNrNi0+aGlkZSgpOworCWNoZWNrNy0+aGlkZSgpOworCWNoZWNrOC0+aGlkZSgpOworCWNoZWNrOS0+aGlkZSgpOworCWNoZWNrMTAtPmhpZGUoKTsKKwljaGVjazExLT5oaWRlKCk7CisJY2hlY2sxMi0+aGlkZSgpOworCWNoZWNrMTMtPmhpZGUoKTsKKwljaGVjazE0LT5oaWRlKCk7CisJY2hlY2sxNS0+aGlkZSgpOworfQorCisKK3ZvaWQgb3Byb2Zfc3RhcnQ6OnNldHVwX3VuaXRfbWFza3Mob3BfZXZlbnRfZGVzY3IgY29uc3QgJiBkZXNjcikKK3sKKwlvcF91bml0X21hc2sgY29uc3QgKiB1bSA9IGRlc2NyLnVuaXQ7CisKKwloaWRlX21hc2tzKCk7CisKKwlpZiAoIXVtIHx8IHVtLT51bml0X3R5cGVfbWFzayA9PSB1dG1fbWFuZGF0b3J5KQorCQlyZXR1cm47CisKKwlldmVudF9zZXR0aW5nICYgY2ZnID0gZXZlbnRfY2Znc1tkZXNjci5uYW1lXTsKKworCXVuaXRfbWFza19ncm91cC0+c2V0RXhjbHVzaXZlKHVtLT51bml0X3R5cGVfbWFzayA9PSB1dG1fZXhjbHVzaXZlKTsKKworCWZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdW0tPm51bSA7ICsraSkgeworCQlRQ2hlY2tCb3ggKiBjaGVjayA9IDA7CisJCXN3aXRjaCAoaSkgeworCQkJY2FzZSAwOiBjaGVjayA9IGNoZWNrMDsgYnJlYWs7CisJCQljYXNlIDE6IGNoZWNrID0gY2hlY2sxOyBicmVhazsKKwkJCWNhc2UgMjogY2hlY2sgPSBjaGVjazI7IGJyZWFrOworCQkJY2FzZSAzOiBjaGVjayA9IGNoZWNrMzsgYnJlYWs7CisJCQljYXNlIDQ6IGNoZWNrID0gY2hlY2s0OyBicmVhazsKKwkJCWNhc2UgNTogY2hlY2sgPSBjaGVjazU7IGJyZWFrOworCQkJY2FzZSA2OiBjaGVjayA9IGNoZWNrNjsgYnJlYWs7CisJCQljYXNlIDc6IGNoZWNrID0gY2hlY2s3OyBicmVhazsKKwkJCWNhc2UgODogY2hlY2sgPSBjaGVjazg7IGJyZWFrOworCQkJY2FzZSA5OiBjaGVjayA9IGNoZWNrOTsgYnJlYWs7CisJCQljYXNlIDEwOiBjaGVjayA9IGNoZWNrMTA7IGJyZWFrOworCQkJY2FzZSAxMTogY2hlY2sgPSBjaGVjazExOyBicmVhazsKKwkJCWNhc2UgMTI6IGNoZWNrID0gY2hlY2sxMjsgYnJlYWs7CisJCQljYXNlIDEzOiBjaGVjayA9IGNoZWNrMTM7IGJyZWFrOworCQkJY2FzZSAxNDogY2hlY2sgPSBjaGVjazE0OyBicmVhazsKKwkJCWNhc2UgMTU6IGNoZWNrID0gY2hlY2sxNTsgYnJlYWs7CisJCX0KKwkJY2hlY2stPnNldFRleHQodW0tPnVtW2ldLmRlc2MpOworCQlpZiAodW0tPnVuaXRfdHlwZV9tYXNrID09IHV0bV9leGNsdXNpdmUpCisJCQljaGVjay0+c2V0Q2hlY2tlZChjZmcudW1hc2sgPT0gdW0tPnVtW2ldLnZhbHVlKTsKKwkJZWxzZQorCQkJY2hlY2stPnNldENoZWNrZWQoY2ZnLnVtYXNrICYgdW0tPnVtW2ldLnZhbHVlKTsKKworCQljaGVjay0+c2hvdygpOworCX0KKwl1bml0X21hc2tfZ3JvdXAtPnNldE1pbmltdW1TaXplKHVuaXRfbWFza19ncm91cC0+c2l6ZUhpbnQoKSk7CisJc2V0dXBfY29uZmlnX3RhYi0+c2V0TWluaW11bVNpemUoc2V0dXBfY29uZmlnX3RhYi0+c2l6ZUhpbnQoKSk7Cit9CisKKwordWludCBvcHJvZl9zdGFydDo6bWF4X3BlcmZfY291bnQoKSBjb25zdAoreworCXJldHVybiBjcHVfdHlwZSA9PSBDUFVfUlRDID8gT1BfTUFYX1JUQ19DT1VOVCA6IE9QX01BWF9QRVJGX0NPVU5UOworfQorCisKK3ZvaWQgb3Byb2Zfc3RhcnQ6Om9uX2ZsdXNoX3Byb2ZpbGVyX2RhdGEoKQoreworCXZlY3RvcjxzdHJpbmc+IGFyZ3M7CisJYXJncy5wdXNoX2JhY2soIi0tZHVtcCIpOworCisJaWYgKGRhZW1vbl9zdGF0dXMoKS5ydW5uaW5nKQorCQlkb19leGVjX2NvbW1hbmQoT1BfQklORElSICIvb3Bjb250cm9sIiwgYXJncyk7CisJZWxzZQorCQlRTWVzc2FnZUJveDo6d2FybmluZyh0aGlzLCAwLCAiVGhlIHByb2ZpbGVyIGlzIG5vdCBzdGFydGVkLiIpOworfQorCisKKy8vIHVzZXIgaXMgaGFwcHkgb2YgaXRzIHNldHRpbmcuCit2b2lkIG9wcm9mX3N0YXJ0Ojpvbl9zdGFydF9wcm9maWxlcigpCit7CisJLy8gc2F2ZSB0aGUgY3VycmVudCBzZXR0aW5ncworCXJlY29yZF9zZWxlY3RlZF9ldmVudF9jb25maWcoKTsKKworCWJvb2wgb25lX2VuYWJsZSA9IGZhbHNlOworCisJUTNMaXN0Vmlld0l0ZW0gKiBjdXI7CisJZm9yIChjdXIgPSBldmVudHNfbGlzdC0+Zmlyc3RDaGlsZCgpOyBjdXI7IGN1ciA9IGN1ci0+bmV4dFNpYmxpbmcoKSkgeworCQlpZiAoIWN1ci0+aXNTZWxlY3RlZCgpKQorCQkJY29udGludWU7CisKKwkJLy8gdGhlIG1pc3NpbmcgcmVmZXJlbmNlIGlzIGludGVuZGVkOiBnY2MgMi45MS42NiBjYW4gY29tcGlsZQorCQkvLyAib3BfZXZlbnRfZGVzY3IgY29uc3QgJiBkZXNjciA9IC4uLiIgdy9vIGEgd2FybmluZworCQlvcF9ldmVudF9kZXNjciBjb25zdCBkZXNjciA9CisJCQlsb2NhdGVfZXZlbnQoY3VyLT50ZXh0KDApLmxhdGluMSgpKTsKKworCQlldmVudF9zZXR0aW5nICYgY2ZnID0gZXZlbnRfY2Znc1tjdXItPnRleHQoMCkubGF0aW4xKCldOworCisJCW9uZV9lbmFibGUgPSB0cnVlOworCisJCWlmICghY2ZnLm9zX3JpbmdfY291bnQgJiYgIWNmZy51c2VyX3JpbmdfY291bnQpIHsKKwkJCVFNZXNzYWdlQm94Ojp3YXJuaW5nKHRoaXMsIDAsICJZb3UgbXVzdCBzZWxlY3QgdG8gIgorCQkJCQkgInByb2ZpbGUgYXQgbGVhc3Qgb25lIG9mIHVzZXIgYmluYXJpZXMva2VybmVsIik7CisJCQlyZXR1cm47CisJCX0KKworCQlpZiAoY2ZnLmNvdW50IDwgZGVzY3IubWluX2NvdW50IHx8IAorCQkgICAgY2ZnLmNvdW50ID4gbWF4X3BlcmZfY291bnQoKSkgeworCQkJb3N0cmluZ3N0cmVhbSBvdXQ7CisKKwkJCW91dCA8PCAiZXZlbnQgIiA8PCBkZXNjci5uYW1lIDw8ICIgY291bnQgb2YgcmFuZ2U6ICIKKwkJCSAgICA8PCBjZmcuY291bnQgPDwgIiBtdXN0IGJlIGluIFsgIgorCQkJICAgIDw8IGRlc2NyLm1pbl9jb3VudCA8PCAiLCAiCisJCQkgICAgPDwgbWF4X3BlcmZfY291bnQoKQorCQkJICAgIDw8ICJdIjsKKworCQkJUU1lc3NhZ2VCb3g6Ondhcm5pbmcodGhpcywgMCwgb3V0LnN0cigpLmNfc3RyKCkpOworCQkJcmV0dXJuOworCQl9CisKKwkJaWYgKGRlc2NyLnVuaXQgJiYKKwkJICAgIGRlc2NyLnVuaXQtPnVuaXRfdHlwZV9tYXNrID09IHV0bV9iaXRtYXNrICYmCisJCSAgICBjZmcudW1hc2sgPT0gMCkgeworCQkJb3N0cmluZ3N0cmVhbSBvdXQ7CisKKwkJCW91dCA8PCAiZXZlbnQgIiA8PCBkZXNjci5uYW1lIDw8ICIgaW52YWxpZCB1bml0IG1hc2s6ICIKKwkJCSAgICA8PCBjZmcudW1hc2sgPDwgZW5kbDsKKworCQkJUU1lc3NhZ2VCb3g6Ondhcm5pbmcodGhpcywgMCwgb3V0LnN0cigpLmNfc3RyKCkpOworCQkJcmV0dXJuOworCQl9CisJfQorCisJaWYgKG9uZV9lbmFibGUgPT0gZmFsc2UgJiYgY3B1X3R5cGUgIT0gQ1BVX1RJTUVSX0lOVCkgeworCQlRTWVzc2FnZUJveDo6d2FybmluZyh0aGlzLCAwLCAiTm8gY291bnRlcnMgZW5hYmxlZC5cbiIpOworCQlyZXR1cm47CisJfQorCisJaWYgKGRhZW1vbl9zdGF0dXMoKS5ydW5uaW5nKSB7CisJCS8vIGdjYyAyLjkxIHdvcmsgYXJvdW5kCisJCWludCB1c2VyX2Nob2ljZSA9IDA7CisJCXVzZXJfY2hvaWNlID0KKwkJCVFNZXNzYWdlQm94Ojp3YXJuaW5nKHRoaXMsIDAsCisJCQkJCSAgICAgIlByb2ZpbGVyIGFscmVhZHkgc3RhcnRlZDpcblxuIgorCQkJCQkgICAgICJzdG9wIGFuZCByZXN0YXJ0IGl0PyIsCisJCQkJCSAgICAgIiZSZXN0YXJ0IiwgIiZDYW5jZWwiLCAwLCAwLCAxKTsKKworCQlpZiAodXNlcl9jaG9pY2UgPT0gMSkKKwkJCXJldHVybjsKKworCQkvLyB0aGlzIGZsdXNoIHByb2ZpbGVyIGRhdGEgYWxzby4KKwkJb25fc3RvcF9wcm9maWxlcigpOworCX0KKworCXZlY3RvcjxzdHJpbmc+IGFyZ3M7CisKKwkvLyBzYXZlX2NvbmZpZyB2YWxpZGF0ZSBhbmQgc2V0dXAgdGhlIGNvbmZpZworCWlmIChzYXZlX2NvbmZpZygpKSB7CisJCS8vIG5vdyBhY3R1YWxseSBzdGFydAorCQlhcmdzLnB1c2hfYmFjaygiLS1zdGFydCIpOworCQlpZiAoY29uZmlnLnZlcmJvc2UpCisJCQlhcmdzLnB1c2hfYmFjaygiLS12ZXJib3NlIik7CisJCWRvX2V4ZWNfY29tbWFuZChPUF9CSU5ESVIgIi9vcGNvbnRyb2wiLCBhcmdzKTsKKwl9CisKKwl0b3RhbF9ucl9pbnRlcnJ1cHRzID0gMDsKKwl0aW1lckV2ZW50KDApOworfQorCisKK2Jvb2wgb3Byb2Zfc3RhcnQ6OnNhdmVfY29uZmlnKCkKK3sKKwlpZiAoIXJlY29yZF9jb25maWcoKSkKKwkJcmV0dXJuIGZhbHNlOworCisJdmVjdG9yPHN0cmluZz4gYXJnczsKKworCS8vIHNhdmluZyBjb25maWcgaXMgZG9uZSBieSBydW5uaW5nIG9wY29udHJvbCAtLXNldHVwIHdpdGggYXBwcm9wcmlhdGUKKwkvLyBzZXR0ZWQgcGFyYW1ldGVycyBzbyB3ZSB1c2UgdGhlIHNhbWUgY29uZmlnIGZpbGUgYXMgY29tbWFuZCBsaW5lCisJLy8gdG9vbHMKKworCWFyZ3MucHVzaF9iYWNrKCItLXNldHVwIik7CisKKwlib29sIG9uZV9lbmFibGVkID0gZmFsc2U7CisKKwl2ZWN0b3I8c3RyaW5nPiB0bXBhcmdzOworCXRtcGFyZ3MucHVzaF9iYWNrKCItLXNldHVwIik7CisKKwlRM0xpc3RWaWV3SXRlbSAqIGN1cjsKKwlmb3IgKGN1ciA9IGV2ZW50c19saXN0LT5maXJzdENoaWxkKCk7IGN1cjsgY3VyID0gY3VyLT5uZXh0U2libGluZygpKSB7CisJCWlmICghY3VyLT5pc1NlbGVjdGVkKCkpCisJCQljb250aW51ZTsKKworCQlldmVudF9zZXR0aW5nICYgY2ZnID0gZXZlbnRfY2Znc1tjdXItPnRleHQoMCkubGF0aW4xKCldOworCisJCW9wX2V2ZW50X2Rlc2NyIGNvbnN0ICYgZGVzY3IgPQorCQkJbG9jYXRlX2V2ZW50KGN1ci0+dGV4dCgwKS5sYXRpbjEoKSk7CisKKwkJb25lX2VuYWJsZWQgPSB0cnVlOworCisJCXN0cmluZyBhcmcgPSAiLS1ldmVudD0iICsgZGVzY3IubmFtZTsKKwkJYXJnICs9ICI6IiArIG9wX2xleGljYWxfY2FzdDxzdHJpbmc+KGNmZy5jb3VudCk7CisJCWFyZyArPSAiOiIgKyBvcF9sZXhpY2FsX2Nhc3Q8c3RyaW5nPihjZmcudW1hc2spOworCQlhcmcgKz0gIjoiICsgb3BfbGV4aWNhbF9jYXN0PHN0cmluZz4oY2ZnLm9zX3JpbmdfY291bnQpOworCQlhcmcgKz0gIjoiICsgb3BfbGV4aWNhbF9jYXN0PHN0cmluZz4oY2ZnLnVzZXJfcmluZ19jb3VudCk7CisKKwkJdG1wYXJncy5wdXNoX2JhY2soYXJnKTsKKwl9CisKKwkvLyBvbmx5IHNldCBjb3VudGVycyBpZiBhdCBsZWFzdCBvbmUgaXMgZW5hYmxlZAorCWlmIChvbmVfZW5hYmxlZCkKKwkJYXJncyA9IHRtcGFyZ3M7CisKKwlpZiAoY29uZmlnLm5vX2tlcm5lbCkgeworCQlhcmdzLnB1c2hfYmFjaygiLS1uby12bWxpbnV4Iik7CisJfSBlbHNlIHsKKwkJYXJncy5wdXNoX2JhY2soIi0tdm1saW51eD0iICsgY29uZmlnLmtlcm5lbF9maWxlbmFtZSk7CisJfQorCisJYXJncy5wdXNoX2JhY2soIi0tYnVmZmVyLXNpemU9IiArCisJICAgICAgIG9wX2xleGljYWxfY2FzdDxzdHJpbmc+KGNvbmZpZy5idWZmZXJfc2l6ZSkpOworCisJaWYgKG9wX2dldF9pbnRlcmZhY2UoKSA9PSBPUF9JTlRFUkZBQ0VfMjQpIHsKKwkJYXJncy5wdXNoX2JhY2soIi0tbm90ZS10YWJsZS1zaXplPSIgKworCQkgICAgICAgb3BfbGV4aWNhbF9jYXN0PHN0cmluZz4oY29uZmlnLm5vdGVfdGFibGVfc2l6ZSkpOworCX0gZWxzZSB7CisJCWFyZ3MucHVzaF9iYWNrKCItLWJ1ZmZlci13YXRlcnNoZWQ9IiArCisJCSAgICAgICBvcF9sZXhpY2FsX2Nhc3Q8c3RyaW5nPihjb25maWcuYnVmZmVyX3dhdGVyc2hlZCkpOworCQlhcmdzLnB1c2hfYmFjaygiLS1jcHUtYnVmZmVyLXNpemU9IiArCisJCSAgICAgICBvcF9sZXhpY2FsX2Nhc3Q8c3RyaW5nPihjb25maWcuY3B1X2J1ZmZlcl9zaXplKSk7CisJCWlmIChvcF9maWxlX3JlYWRhYmxlKCIvZGV2L29wcm9maWxlL2JhY2t0cmFjZV9kZXB0aCIpKSB7CisJCQlhcmdzLnB1c2hfYmFjaygiLS1jYWxsZ3JhcGg9IiArCisJCSAgICAgICAgICAgICAgb3BfbGV4aWNhbF9jYXN0PHN0cmluZz4oY29uZmlnLmNhbGxncmFwaF9kZXB0aCkpOworCQl9CisJfQorCisJc3RyaW5nIHNlcCA9ICItLXNlcGFyYXRlPSI7CisKKwlpZiAoY29uZmlnLnNlcGFyYXRlX2xpYikKKwkJc2VwICs9ICJsaWJyYXJ5LCI7CisJaWYgKGNvbmZpZy5zZXBhcmF0ZV9rZXJuZWwpCisJCXNlcCArPSAia2VybmVsLCI7CisJaWYgKGNvbmZpZy5zZXBhcmF0ZV9jcHUpCisJCXNlcCArPSAiY3B1LCI7CisJaWYgKGNvbmZpZy5zZXBhcmF0ZV90aHJlYWQpCisJCXNlcCArPSAidGhyZWFkLCI7CisKKwlpZiAoc2VwID09ICItLXNlcGFyYXRlPSIpCisJCXNlcCArPSAibm9uZSI7CisJYXJncy5wdXNoX2JhY2soc2VwKTsKKworCS8vIDIuOTUgd29yay1hcm91bmQsIGl0IGRpZG4ndCBsaWtlIHJldHVybiAhZG9fZXhlY19jb21tYW5kKCkgCisJYm9vbCByZXQgPSAhZG9fZXhlY19jb21tYW5kKE9QX0JJTkRJUiAiL29wY29udHJvbCIsIGFyZ3MpOworCXJldHVybiByZXQ7Cit9CisKKworLy8gZmx1c2ggYW5kIHN0b3AgdGhlIHByb2ZpbGVyIGlmIGl0IHdhcyBzdGFydGVkLgordm9pZCBvcHJvZl9zdGFydDo6b25fc3RvcF9wcm9maWxlcigpCit7CisJdmVjdG9yPHN0cmluZz4gYXJnczsKKwlhcmdzLnB1c2hfYmFjaygiLS1zaHV0ZG93biIpOworCisJaWYgKGRhZW1vbl9zdGF0dXMoKS5ydW5uaW5nKQorCQlkb19leGVjX2NvbW1hbmQoT1BfQklORElSICIvb3Bjb250cm9sIiwgYXJncyk7CisJZWxzZQorCQlRTWVzc2FnZUJveDo6d2FybmluZyh0aGlzLCAwLCAiVGhlIHByb2ZpbGVyIGlzIGFscmVhZHkgc3RvcHBlZC4iKTsKKworCXRpbWVyRXZlbnQoMCk7Cit9CisKKwordm9pZCBvcHJvZl9zdGFydDo6b25fc2VwYXJhdGVfa2VybmVsX2NiX2NoYW5nZWQoaW50IHN0YXRlKQoreworCWlmIChzdGF0ZSA9PSAyKQorCQlzZXBhcmF0ZV9saWJfY2ItPnNldENoZWNrZWQodHJ1ZSk7Cit9CisKK3ZvaWQgb3Byb2Zfc3RhcnQ6Om9uX3Jlc2V0X3NhbXBsZV9maWxlcygpCit7CisJaW50IHJldCA9IFFNZXNzYWdlQm94Ojp3YXJuaW5nKHRoaXMsIDAsICJBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gIgorCSAgICAgICAicmVzZXQgeW91ciBsYXN0IHByb2ZpbGUgc2Vzc2lvbiA/IiwgIlllcyIsICJObyIsIDAsIDAsIDEpOworCWlmICghcmV0KSB7CisJCXZlY3RvcjxzdHJpbmc+IGFyZ3M7CisJCWFyZ3MucHVzaF9iYWNrKCItLXJlc2V0Iik7CisJCWlmICghZG9fZXhlY19jb21tYW5kKE9QX0JJTkRJUiAiL29wY29udHJvbCIsIGFyZ3MpKQorCQkJLy8gdGhlIG5leHQgdGltZXIgZXZlbnQgd2lsbCBvdmVyd3JpdGUgdGhlIG1lc3NhZ2UKKwkJCWRhZW1vbl9sYWJlbC0+c2V0VGV4dCgiTGFzdCBwcm9maWxlIHNlc3Npb24gcmVzZXRlZC4iKTsKKwkJZWxzZQorCQkJUU1lc3NhZ2VCb3g6Ondhcm5pbmcodGhpcywgMCwKKwkJCSAgICAgIkNhbid0IHJlc2V0IHByb2ZpbGluZyBzZXNzaW9uLiIpOworCX0KK30KKworCisvLy8gZnVuY3Rpb24gb2JqZWN0IGZvciBtYXRjaGluZyBhZ2FpbnN0IG5hbWUKK2NsYXNzIGV2ZW50X25hbWVfZXEgeworCXN0cmluZyBuYW1lXzsKK3B1YmxpYzoKKwlleHBsaWNpdCBldmVudF9uYW1lX2VxKHN0cmluZyBjb25zdCAmIHMpIDogbmFtZV8ocykge30KKwlib29sIG9wZXJhdG9yKCkob3BfZXZlbnRfZGVzY3IgY29uc3QgJiBkKSBjb25zdCB7CisJCXJldHVybiBkLm5hbWUgPT0gbmFtZV87CisJfQorfTsKKworCisvLyBoZWxwZXIgdG8gcmV0cmlldmUgYW4gZXZlbnQgZGVzY3IgdGhyb3VnaCBpdHMgbmFtZS4KK29wX2V2ZW50X2Rlc2NyIGNvbnN0ICYgb3Byb2Zfc3RhcnQ6OmxvY2F0ZV9ldmVudChzdHJpbmcgY29uc3QgJiBuYW1lKSBjb25zdAoreworCXJldHVybiAqKGZpbmRfaWYodl9ldmVudHMuYmVnaW4oKSwgdl9ldmVudHMuZW5kKCksIGV2ZW50X25hbWVfZXEobmFtZSkpKTsKK30KZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2d1aS9vcHJvZl9zdGFydC5oIGIvb3Byb2ZpbGUtMC45LjcvZ3VpL29wcm9mX3N0YXJ0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDc3ZTNmNAotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2d1aS9vcHJvZl9zdGFydC5oCkBAIC0wLDAgKzEsMTcwIEBACisvKioKKyAqIEBmaWxlIG9wcm9mX3N0YXJ0LmgKKyAqIFRoZSBHVUkgc3RhcnQgbWFpbiBjbGFzcworICoKKyAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDIgT1Byb2ZpbGUgYXV0aG9ycworICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKKyAqCisgKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKKyAqIEBhdXRob3IgSm9obiBMZXZvbgorICovCisKKyNpZm5kZWYgT1BST0ZfU1RBUlRfSAorI2RlZmluZSBPUFJPRl9TVEFSVF9ICisKKyNpbmNsdWRlIDx2ZWN0b3I+CisjaW5jbHVkZSA8bWFwPgorI2luY2x1ZGUgPHNldD4KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAidWkvb3Byb2Zfc3RhcnQuYmFzZS5oIgorI2luY2x1ZGUgIm9wcm9mX3N0YXJ0X2NvbmZpZy5oIgorCisjaW5jbHVkZSAib3BfZXZlbnRzLmgiCisKKyNpZm5kZWYgUVQzX1NVUFBPUlQKKyNkZWZpbmUgUTNMaXN0Vmlld0l0ZW0gUUxpc3RWaWV3SXRlbQorI2VuZGlmCisKK2NsYXNzIFFJbnRWYWxpZGF0b3I7CitjbGFzcyBRTGlzdFZpZXdJdGVtOworY2xhc3MgUVRpbWVyRXZlbnQ7CisKKy8vLyBhIHN0cnVjdCBkZXNjcmliaW5nIGEgcGFydGljdWxhciBldmVudCB0eXBlCitzdHJ1Y3Qgb3BfZXZlbnRfZGVzY3IgeworCW9wX2V2ZW50X2Rlc2NyKCk7CisKKwkvLy8gYml0IG1hc2sgb2YgYWxsb3dlZCBjb3VudGVycworCXVpbnQgY291bnRlcl9tYXNrOworCS8vLyBoYXJkd2FyZSBldmVudCBudW1iZXIKKwl1MzIgdmFsOworCS8vLyB1bml0IG1hc2sgdmFsdWVzIGlmIGFwcGxpY2FibGUKKwlvcF91bml0X21hc2sgY29uc3QgKiB1bml0OworCS8vLyBuYW1lIG9mIGV2ZW50CisJc3RkOjpzdHJpbmcgbmFtZTsKKwkvLy8gZGVzY3JpcHRpb24gb2YgZXZlbnQKKwlzdGQ6OnN0cmluZyBoZWxwX3N0cjsKKwkvLy8gbWluaW11bSBjb3VudGVyIHZhbHVlCisJdWludCBtaW5fY291bnQ7Cit9OworCitjbGFzcyBvcHJvZl9zdGFydCA6IHB1YmxpYyBvcHJvZl9zdGFydF9iYXNlCit7CisJUV9PQkpFQ1QKKworcHVibGljOgorCW9wcm9mX3N0YXJ0KCk7CisKK3Byb3RlY3RlZCBzbG90czoKKwkvLy8gc2VsZWN0IHRoZSBrZXJuZWwgaW1hZ2UgZmlsZW5hbWUKKwl2b2lkIGNob29zZV9rZXJuZWxfZmlsZW5hbWUoKTsKKwkvLy8gZmx1c2ggcHJvZmlsZXIKKwl2b2lkIG9uX2ZsdXNoX3Byb2ZpbGVyX2RhdGEoKTsKKwkvLy8gc3RhcnQgcHJvZmlsZXIKKwl2b2lkIG9uX3N0YXJ0X3Byb2ZpbGVyKCk7CisJLy8vIHN0b3AgcHJvZmlsZXIKKwl2b2lkIG9uX3N0b3BfcHJvZmlsZXIoKTsKKwkvLy8gZXZlbnRzIHNlbGVjdGlvbiBjaGFuZ2UKKwl2b2lkIGV2ZW50X3NlbGVjdGVkKCk7CisJLy8vIHRoZSBtb3VzZSBpcyBvdmVyIGFuIGV2ZW50CisJdm9pZCBldmVudF9vdmVyKFEzTGlzdFZpZXdJdGVtICopOworCS8vLyBzdGF0ZSBvZiBzZXBhcmF0ZV9rZXJuZWxfY2IgY2hhbmdlZAorCXZvaWQgb25fc2VwYXJhdGVfa2VybmVsX2NiX2NoYW5nZWQoaW50KTsKKwkvLy8gcmVzZXQgc2FtcGxlIGZpbGVzCisJdm9pZCBvbl9yZXNldF9zYW1wbGVfZmlsZXMoKTsKKworCS8vLyBjbG9zZSB0aGUgZGlhbG9nCisJdm9pZCBhY2NlcHQoKTsKKworCS8vLyBXTSBoaWRlIGV2ZW50CisJdm9pZCBjbG9zZUV2ZW50KFFDbG9zZUV2ZW50ICogZSk7CisKKwkvLy8gdGltZXIgZXZlbnQKKwl2b2lkIHRpbWVyRXZlbnQoUVRpbWVyRXZlbnQgKiBlKTsKKworcHJpdmF0ZToKKwkvLy8gdGhlIGNvdW50ZXIgY29tYm8gaGFzIGJlZW4gYWN0aXZhdGVkCisJdm9pZCBmaWxsX2V2ZW50c19saXN0Ym94KCk7CisKKwkvLy8gZmlsbCB0aGUgZXZlbnQgZGV0YWlscyBhbmQgZ3VpIHNldHVwCisJdm9pZCBmaWxsX2V2ZW50cygpOworCisJLy8vIGZpbmQgYW4gZXZlbnQgZGVzY3JpcHRpb24gYnkgbmFtZQorCW9wX2V2ZW50X2Rlc2NyIGNvbnN0ICYgbG9jYXRlX2V2ZW50KHN0ZDo6c3RyaW5nIGNvbnN0ICYgbmFtZSkgY29uc3Q7CisKKwkvLy8gdXBkYXRlIGNvbmZpZyBvbiB1c2VyIGNoYW5nZQorCXZvaWQgcmVjb3JkX3NlbGVjdGVkX2V2ZW50X2NvbmZpZygpOworCS8vLyB1cGRhdGUgY29uZmlnIGFuZCB2YWxpZGF0ZQorCWJvb2wgcmVjb3JkX2NvbmZpZygpOworCisJLy8vIGNhbGN1bGF0ZSB1bml0IG1hc2sgZm9yIGdpdmVuIGV2ZW50IGFuZCB1bml0IG1hc2sgcGFydAorCXZvaWQgZ2V0X3VuaXRfbWFza19wYXJ0KG9wX2V2ZW50X2Rlc2NyIGNvbnN0ICYgZGVzY3IsIHVpbnQgbnVtLCBib29sIHNlbGVjdGVkLCB1aW50ICYgbWFzayk7CisJLy8vIGNhbGN1bGF0ZSB1bml0IG1hc2sgZm9yIGdpdmVuIGV2ZW50CisJdWludCBnZXRfdW5pdF9tYXNrKG9wX2V2ZW50X2Rlc2NyIGNvbnN0ICYgZGVzY3IpOworCS8vLyBzZXQgdGhlIHVuaXQgbWFzayB3aWRnZXRzIGZvciBnaXZlbiBldmVudAorCXZvaWQgc2V0dXBfdW5pdF9tYXNrcyhvcF9ldmVudF9kZXNjciBjb25zdCAmIGRlc2NyKTsKKworCS8vLyByZXR1cm4gdGhlIG1heGltdW0gcGVyZiBjb3VudGVyIHZhbHVlIGZvciB0aGUgY3VycmVudCBjcHUgdHlwZQorCXVpbnQgbWF4X3BlcmZfY291bnQoKSBjb25zdDsKKworCS8vLyBzaG93IGFuIGV2ZW50J3Mgc2V0dGluZ3MKKwl2b2lkIGRpc3BsYXlfZXZlbnQob3BfZXZlbnRfZGVzY3IgY29uc3QgJiBkZXNjcnApOworCisJLy8vIGhpZGUgdW5pdCBtYXNrIHdpZGdldHMKKwl2b2lkIGhpZGVfbWFza3Modm9pZCk7CisKKwkvLy8gcmVhZCB0aGUgZXZlbnRzIHNldCBpbiBkYWVtb25yYworCXZvaWQgcmVhZF9zZXRfZXZlbnRzKCk7CisJLy8vIHVzZSB0aGUgZGVmYXVsdCBldmVudAorCXZvaWQgc2V0dXBfZGVmYXVsdF9ldmVudCgpOworCS8vLyBsb2FkIHRoZSBleHRyYSBjb25maWcgZmlsZQorCXZvaWQgbG9hZF9jb25maWdfZmlsZSgpOworCS8vLyBzYXZlIHRoZSBjb25maWcKKwlib29sIHNhdmVfY29uZmlnKCk7CisKKwkvLy8gcmVkcmF3IHRoZSBldmVudCBsaXN0IGJ5IGNoYW5naW5nIGljb24gc3RhdHVzCisJdm9pZCBkcmF3X2V2ZW50X2xpc3QoKTsKKworCS8vLyByZXR1cm4gdHJ1ZSBpZiBpdGVtIGlzIHNlbGVjdGFibGUgb3IgYWxyZWFkeSBzZWxlY3RlZAorCWJvb2wgaXNfc2VsZWN0YWJsZV9ldmVudChRM0xpc3RWaWV3SXRlbSAqIGl0ZW0pOworCisJLy8vIHRyeSB0byBhbGxvYyBjb3VudGVycyBmb3IgdGhlIHNlbGVjdGVkX2V2ZW50cworCWJvb2wgYWxsb2Nfc2VsZWN0ZWRfZXZlbnRzKCkgY29uc3Q7CisKKwkvLy8gdmFsaWRhdG9yIGZvciBldmVudCBjb3VudAorCVFJbnRWYWxpZGF0b3IqIGV2ZW50X2NvdW50X3ZhbGlkYXRvcjsKKworCS8vLyBhbGwgYXZhaWxhYmxlIGV2ZW50cyBmb3IgdGhpcyBoYXJkd2FyZQorCXN0ZDo6dmVjdG9yPG9wX2V2ZW50X2Rlc2NyPiB2X2V2ZW50czsKKworCS8vLyBjdXJyZW50IGV2ZW50IGNvbmZpZ3MgZm9yIGVhY2ggY291bnRlcgorCXR5cGVkZWYgc3RkOjptYXA8c3RkOjpzdHJpbmcsIGV2ZW50X3NldHRpbmc+IGV2ZW50X3NldHRpbmdfbWFwOworCWV2ZW50X3NldHRpbmdfbWFwIGV2ZW50X2NmZ3M7CisKKwkvLy8gVGhlIGN1cnJlbnRseSBzZWxlY3RlZCBldmVudHMuIFdlIG11c3QgdHJhY2sgdGhpcyBiZWNhdXNlCisJLy8vIHdpdGggbXVsdGlwbGUgc2VsZWN0aW9uIGxpc3Rib3ggUVQgZG9lc24ndCBhbGxvdyB0byBrbm93CisJLy8vIHdoYXQgaXMgdGhlIGxhc3Qgc2VsZWN0ZWQgaXRlbS4gZXZlbnRzX3NlbGVjdGVkKCkgdXBkYXRlIGl0CisJc3RkOjpzZXQ8UTNMaXN0Vmlld0l0ZW0gKj4gc2VsZWN0ZWRfZXZlbnRzOworCVEzTGlzdFZpZXdJdGVtICogY3VycmVudF9ldmVudDsKKworCS8vLyBjdXJyZW50IGNvbmZpZworCWNvbmZpZ19zZXR0aW5nIGNvbmZpZzsKKworCS8vLyB0aGUgZXhwYW5zaW9uIG9mICJ+IiBkaXJlY3RvcnkKKwlzdGQ6OnN0cmluZyB1c2VyX2RpcjsKKworCS8vLyBDUFUgdHlwZQorCW9wX2NwdSBjcHVfdHlwZTsKKworCS8vLyBDUFUgc3BlZWQgaW4gTUh6CisJZG91YmxlIGNwdV9zcGVlZDsKKworCS8vLyB0b3RhbCBudW1iZXIgb2YgYXZhaWxhYmxlIEhXIGNvdW50ZXJzCisJdWludCBvcF9ucl9jb3VudGVyczsKKworCS8vLyBUb3RhbCBudW1iZXIgb2Ygc2FtcGxlcyBmb3IgdGhpcyBydW4KKwl1bnNpZ25lZCBsb25nIHRvdGFsX25yX2ludGVycnVwdHM7Cit9OworCisjZW5kaWYgLy8gT1BST0ZfU1RBUlRfSApkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvZ3VpL29wcm9mX3N0YXJ0X2NvbmZpZy5jcHAgYi9vcHJvZmlsZS0wLjkuNy9ndWkvb3Byb2Zfc3RhcnRfY29uZmlnLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTIwYWY0Ci0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvZ3VpL29wcm9mX3N0YXJ0X2NvbmZpZy5jcHAKQEAgLTAsMCArMSwxMTIgQEAKKy8qKgorICogQGZpbGUgb3Byb2Zfc3RhcnRfY29uZmlnLmNwcAorICogR1VJIHN0YXJ0dXAgY29uZmlnIG1hbmFnZW1lbnQKKyAqCisgKiBAcmVtYXJrIENvcHlyaWdodCAyMDAyIE9Qcm9maWxlIGF1dGhvcnMKKyAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCisgKgorICogQGF1dGhvciBKb2huIExldm9uCisgKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2luY2x1ZGUgPHNzdHJlYW0+CisjaW5jbHVkZSA8ZnN0cmVhbT4KKyNpbmNsdWRlIDxpb21hbmlwPgorI2luY2x1ZGUgPHN5cy91dHNuYW1lLmg+CisKKyNpbmNsdWRlICJzdHJpbmdfbWFuaXAuaCIKKyNpbmNsdWRlICJvcHJvZl9zdGFydF9jb25maWcuaCIKKyNpbmNsdWRlICJvcF9jb25maWcuaCIKKyNpbmNsdWRlICJvcF9jb25maWdfMjQuaCIKKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKworZXZlbnRfc2V0dGluZzo6ZXZlbnRfc2V0dGluZygpCisJOgorCWNvdW50KDApLAorCXVtYXNrKDApLAorCW9zX3JpbmdfY291bnQoMCksCisJdXNlcl9yaW5nX2NvdW50KDApCit7Cit9CisKKworY29uZmlnX3NldHRpbmc6OmNvbmZpZ19zZXR0aW5nKCkKKwk6CisJYnVmZmVyX3NpemUoT1BfREVGQVVMVF9CVUZfU0laRSksCisJbm90ZV90YWJsZV9zaXplKE9QX0RFRkFVTFRfTk9URV9TSVpFKSwKKwlub19rZXJuZWwoZmFsc2UpLAorCXZlcmJvc2UoZmFsc2UpLAorCXNlcGFyYXRlX2xpYihmYWxzZSksCisJc2VwYXJhdGVfa2VybmVsKGZhbHNlKSwKKwlzZXBhcmF0ZV9jcHUoZmFsc2UpLAorCXNlcGFyYXRlX3RocmVhZChmYWxzZSksCisJY2FsbGdyYXBoX2RlcHRoKDApLAorCWJ1ZmZlcl93YXRlcnNoZWQoMCksCisJY3B1X2J1ZmZlcl9zaXplKDApCit7CisJc3RydWN0IHV0c25hbWUgaW5mbzsKKworCS8qIEd1ZXNzIHBhdGggdG8gdm1saW51eCBiYXNlZCBvbiBrZXJuZWwgY3VycmVudGx5IHJ1bm5pbmcuICovCisJaWYgKHVuYW1lKCZpbmZvKSkgeworCQlwZXJyb3IoIm9wcm9mX3N0YXJ0OiBVbmFibGUgdG8gZGV0ZXJtaW5lIE9TIHJlbGVhc2UuIik7CisJfSBlbHNlIHsKKwkJc3RyaW5nIGNvbnN0IHZlcnNpb24oaW5mby5yZWxlYXNlKTsKKwkJc3RyaW5nIGNvbnN0IHZtbGludXhfcGF0aCgiL2xpYi9tb2R1bGVzLyIgKyB2ZXJzaW9uCisJCQkJCSArICIvYnVpbGQvdm1saW51eCIpOworCQlrZXJuZWxfZmlsZW5hbWUgPSB2bWxpbnV4X3BhdGg7CisJfQorfQorCisKK3ZvaWQgY29uZmlnX3NldHRpbmc6OmxvYWQoaXN0cmVhbSAmIGluKQoreworCWJ1ZmZlcl9zaXplID0gT1BfREVGQVVMVF9CVUZfU0laRTsKKwlub3RlX3RhYmxlX3NpemUgPSBPUF9ERUZBVUxUX05PVEVfU0laRTsKKworCXN0cmluZyBzdHI7CisKKwl3aGlsZSAoZ2V0bGluZShpbiwgc3RyKSkgeworCQlzdHJpbmcgdmFsID0gc3BsaXQoc3RyLCAnPScpOworCQlpZiAoc3RyID09ICJCVUZfU0laRSIpIHsKKwkJCWJ1ZmZlcl9zaXplID0gb3BfbGV4aWNhbF9jYXN0PHVuc2lnbmVkIGludD4odmFsKTsKKwkJCWlmIChidWZmZXJfc2l6ZSA8IE9QX0RFRkFVTFRfQlVGX1NJWkUpCisJCQkJYnVmZmVyX3NpemUgPSBPUF9ERUZBVUxUX0JVRl9TSVpFOworCQl9IGVsc2UgaWYgKHN0ciA9PSAiTk9URV9TSVpFIikgeworCQkJbm90ZV90YWJsZV9zaXplID0gb3BfbGV4aWNhbF9jYXN0PHVuc2lnbmVkIGludD4odmFsKTsKKwkJCWlmIChub3RlX3RhYmxlX3NpemUgPCBPUF9ERUZBVUxUX05PVEVfU0laRSkKKwkJCQlub3RlX3RhYmxlX3NpemUgPSBPUF9ERUZBVUxUX05PVEVfU0laRTsKKwkJfSBlbHNlIGlmIChzdHIgPT0gIlZNTElOVVgiKSB7CisJCQlpZiAodmFsID09ICJub25lIikgeworCQkJCWtlcm5lbF9maWxlbmFtZSA9ICIiOworCQkJCW5vX2tlcm5lbCA9IHRydWU7CisJCQl9IGVsc2UgaWYgKCF2YWwuZW1wdHkoKSkgeworCQkJCW5vX2tlcm5lbCA9IGZhbHNlOworCQkJCWtlcm5lbF9maWxlbmFtZSA9IHZhbDsKKwkJCX0KKwkJfSBlbHNlIGlmIChzdHIgPT0gIlNFUEFSQVRFX0xJQiIpIHsKKwkJCXNlcGFyYXRlX2xpYiA9IG9wX2xleGljYWxfY2FzdDxib29sPih2YWwpOworCQl9IGVsc2UgaWYgKHN0ciA9PSAiU0VQQVJBVEVfS0VSTkVMIikgeworCQkJc2VwYXJhdGVfa2VybmVsID0gb3BfbGV4aWNhbF9jYXN0PGJvb2w+KHZhbCk7CisJCX0gZWxzZSBpZiAoc3RyID09ICJTRVBBUkFURV9DUFUiKSB7CisJCQlzZXBhcmF0ZV9jcHUgPSBvcF9sZXhpY2FsX2Nhc3Q8Ym9vbD4odmFsKTsKKwkJfSBlbHNlIGlmIChzdHIgPT0gIlNFUEFSQVRFX1RIUkVBRCIpIHsKKwkJCXNlcGFyYXRlX3RocmVhZCA9IG9wX2xleGljYWxfY2FzdDxib29sPih2YWwpOworCQl9IGVsc2UgaWYgKHN0ciA9PSAiQ0FMTEdSQVBIIikgeworCQkJY2FsbGdyYXBoX2RlcHRoID0gb3BfbGV4aWNhbF9jYXN0PHVuc2lnbmVkIGludD4odmFsKTsKKwkJfSBlbHNlIGlmIChzdHIgPT0gIkJVRl9XQVRFUlNIRUQiKSB7CisJCQlidWZmZXJfd2F0ZXJzaGVkID0gb3BfbGV4aWNhbF9jYXN0PHVuc2lnbmVkIGludD4odmFsKTsKKwkJfSBlbHNlIGlmIChzdHIgPT0gIkNQVV9CVUZfU0laRSIpIHsKKwkJCWNwdV9idWZmZXJfc2l6ZSA9IG9wX2xleGljYWxfY2FzdDx1bnNpZ25lZCBpbnQ+KHZhbCk7CisJCX0KKwl9Cit9CisKKworaXN0cmVhbSAmIG9wZXJhdG9yPj4oaXN0cmVhbSAmIGluLCBjb25maWdfc2V0dGluZyAmIG9iamVjdCkKK3sKKwlvYmplY3QubG9hZChpbik7CisJcmV0dXJuIGluOworfQpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvZ3VpL29wcm9mX3N0YXJ0X2NvbmZpZy5oIGIvb3Byb2ZpbGUtMC45LjcvZ3VpL29wcm9mX3N0YXJ0X2NvbmZpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3YjI1ZDgKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9ndWkvb3Byb2Zfc3RhcnRfY29uZmlnLmgKQEAgLTAsMCArMSw1NiBAQAorLyoqCisgKiBAZmlsZSBvcHJvZl9zdGFydF9jb25maWcuaAorICogR1VJIHN0YXJ0dXAgY29uZmlnIG1hbmFnZW1lbnQKKyAqCisgKiBAcmVtYXJrIENvcHlyaWdodCAyMDAyIE9Qcm9maWxlIGF1dGhvcnMKKyAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCisgKgorICogQGF1dGhvciBKb2huIExldm9uCisgKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKKyAqLworCisjaWZuZGVmIE9QUk9GX1NUQVJUX0NPTkZJR19ICisjZGVmaW5lIE9QUk9GX1NUQVJUX0NPTkZJR19ICisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8aW9zZndkPgorCisvLy8gU3RvcmUgdGhlIHNldHVwIG9mIG9uZSBldmVudAorc3RydWN0IGV2ZW50X3NldHRpbmcgeworCisJZXZlbnRfc2V0dGluZygpOworCisJdWludCBjb3VudDsKKwl1aW50IHVtYXNrOworCWJvb2wgb3NfcmluZ19jb3VudDsKKwlib29sIHVzZXJfcmluZ19jb3VudDsKK307CisKKy8qKgorICogU3RvcmUgdGhlIGdlbmVyYWwgIGNvbmZpZ3VyYXRpb24gb2YgdGhlIHByb2ZpbGVyLgorICogVGhlcmUgaXMgbm8gc2F2ZSgpLCBpbnN0ZWFkIG9wY29udHJvbCAtLXNldHVwIG11c3QgYmUKKyAqIGNhbGxlZC4gVGhpcyB1c2VzIG9wY29udHJvbCdzIGRhZW1vbnJjIGZpbGUuCisgKi8KK3N0cnVjdCBjb25maWdfc2V0dGluZyB7CisJY29uZmlnX3NldHRpbmcoKTsKKworCXZvaWQgbG9hZChzdGQ6OmlzdHJlYW0gJiBpbik7CisKKwl1aW50IGJ1ZmZlcl9zaXplOworCXVpbnQgbm90ZV90YWJsZV9zaXplOworCXN0ZDo6c3RyaW5nIGtlcm5lbF9maWxlbmFtZTsKKwlib29sIG5vX2tlcm5lbDsKKwlib29sIHZlcmJvc2U7CisJYm9vbCBzZXBhcmF0ZV9saWI7CisJYm9vbCBzZXBhcmF0ZV9rZXJuZWw7CisJYm9vbCBzZXBhcmF0ZV9jcHU7CisJYm9vbCBzZXBhcmF0ZV90aHJlYWQ7CisJdWludCBjYWxsZ3JhcGhfZGVwdGg7CisJdWludCBidWZmZXJfd2F0ZXJzaGVkOworCXVpbnQgY3B1X2J1ZmZlcl9zaXplOworfTsKKworc3RkOjppc3RyZWFtICYgb3BlcmF0b3I+PihzdGQ6OmlzdHJlYW0gJiBpbiwgY29uZmlnX3NldHRpbmcgJiBvYmplY3QpOworCisjZW5kaWYgLy8gISBPUFJPRl9TVEFSVF9DT05GSUdfSApkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvZ3VpL29wcm9mX3N0YXJ0X21haW4uY3BwIGIvb3Byb2ZpbGUtMC45LjcvZ3VpL29wcm9mX3N0YXJ0X21haW4uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0ZGE1ZGUKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9ndWkvb3Byb2Zfc3RhcnRfbWFpbi5jcHAKQEAgLTAsMCArMSwyNyBAQAorLyoqCisgKiBAZmlsZSBvcHJvZl9zdGFydF9tYWluLmNwcAorICogbWFpbiByb3V0aW5lIGZvciBHVUkgc3RhcnQKKyAqCisgKiBAcmVtYXJrIENvcHlyaWdodCAyMDAyIE9Qcm9maWxlIGF1dGhvcnMKKyAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCisgKgorICogQGF1dGhvciBQaGlsaXBwZSBFbGllCisgKiBAYXV0aG9yIEpvaG4gTGV2b24KKyAqLworCisjaW5jbHVkZSA8cWFwcGxpY2F0aW9uLmg+CisKKyNpbmNsdWRlICJvcHJvZl9zdGFydC5oIgorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciogYXJndltdKQoreworCVFBcHBsaWNhdGlvbiBhKGFyZ2MsIGFyZ3YpOworCisJb3Byb2Zfc3RhcnQqIGRsZyA9IG5ldyBvcHJvZl9zdGFydCgpOworCisJYS5zZXRNYWluV2lkZ2V0KGRsZyk7CisKKwlkbGctPnNob3coKTsKKworCXJldHVybiBhLmV4ZWMoKTsKK30KZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2d1aS9vcHJvZl9zdGFydF91dGlsLmNwcCBiL29wcm9maWxlLTAuOS43L2d1aS9vcHJvZl9zdGFydF91dGlsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjkzNDMxCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvZ3VpL29wcm9mX3N0YXJ0X3V0aWwuY3BwCkBAIC0wLDAgKzEsMzMxIEBACisvKioKKyAqIEBmaWxlIG9wcm9mX3N0YXJ0X3V0aWwuY3BwCisgKiBNaXNjZWxsYW5lb3VzIGhlbHBlcnMgZm9yIHRoZSBHVUkgc3RhcnQKKyAqCisgKiBAcmVtYXJrIENvcHlyaWdodCAyMDAyIE9Qcm9maWxlIGF1dGhvcnMKKyAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCisgKgorICogQGF1dGhvciBQaGlsaXBwZSBFbGllCisgKiBAYXV0aG9yIEpvaG4gTGV2b24KKyAqLworCisjaW5jbHVkZSA8ZGlyZW50Lmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8Z2xvYi5oPgorCisjaW5jbHVkZSA8Y2Vycm5vPgorI2luY2x1ZGUgPHZlY3Rvcj4KKyNpbmNsdWRlIDxjbWF0aD4KKyNpbmNsdWRlIDxzc3RyZWFtPgorI2luY2x1ZGUgPGlvc3RyZWFtPgorI2luY2x1ZGUgPGZzdHJlYW0+CisjaW5jbHVkZSA8Y3N0ZGxpYj4KKworI2luY2x1ZGUgPHFmaWxlZGlhbG9nLmg+CisjaW5jbHVkZSA8cW1lc3NhZ2Vib3guaD4KKworI2luY2x1ZGUgIm9wX2ZpbGUuaCIKKyNpbmNsdWRlICJmaWxlX21hbmlwLmgiCisjaW5jbHVkZSAiY2hpbGRfcmVhZGVyLmgiCisjaW5jbHVkZSAib3BfbGliaWJlcnR5LmgiCisKKyNpbmNsdWRlICJvcHJvZl9zdGFydC5oIgorI2luY2x1ZGUgIm9wcm9mX3N0YXJ0X3V0aWwuaCIKKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKworbmFtZXNwYWNlIHsKKworLy8gcmV0dXJuIHRoZSB+IGV4cGFuc2lvbiBzdWZmaXhlZCB3aXRoIGEgJy8nCitzdHJpbmcgY29uc3QgZ2V0X2NvbmZpZ19kaXIoKQoreworCXJldHVybiAiL3Jvb3QiOworfQorCitzdHJpbmcgZGFlbW9uX3BpZDsKKworfSAvLyBuYW1lc3BhY2UgYW5vbgorCitkYWVtb25fc3RhdHVzOjpkYWVtb25fc3RhdHVzKCkKKwk6IHJ1bm5pbmcoZmFsc2UpLAorCSAgbnJfaW50ZXJydXB0cygwKQoreworCWludCBIWjsKKwlpZiAoIWRhZW1vbl9waWQuZW1wdHkoKSkgeworCQlzdHJpbmcgcHJvY19maWxlbmFtZSA9IHN0cmluZygiL3Byb2MvIikgKyBkYWVtb25fcGlkICsgIi9leGUiOworCQlzdHJpbmcgY29uc3QgZXhlYyA9IG9wX3JlYWxwYXRoKHByb2NfZmlsZW5hbWUpOworCQlpZiAoZXhlYyA9PSBwcm9jX2ZpbGVuYW1lKQorCQkJZGFlbW9uX3BpZC5lcmFzZSgpOworCQllbHNlCisJCQlydW5uaW5nID0gdHJ1ZTsKKwl9CisKKwlpZiAoZGFlbW9uX3BpZC5lbXB0eSgpKSB7CisJCURJUiAqIGRpcjsKKwkJc3RydWN0IGRpcmVudCAqIGRpcmVudDsKKworCQlpZiAoIShkaXIgPSBvcGVuZGlyKCIvcHJvYyIpKSkgeworCQkJcGVycm9yKCJvcHJvZmlsZWQ6IC9wcm9jIGRpcmVjdG9yeSBjb3VsZCBub3QgYmUgb3BlbmVkLiAiKTsKKwkJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwkJfQorCisJCXdoaWxlICgoZGlyZW50ID0gcmVhZGRpcihkaXIpKSkgeworCQkJc3RyaW5nIGNvbnN0IGV4ZWMgPQorCQkJCW9wX3JlYWxwYXRoKHN0cmluZygiL3Byb2MvIikKKwkJCQkgICAgICAgICAgICAgICArIGRpcmVudC0+ZF9uYW1lICsgIi9leGUiKTsKKwkJCXN0cmluZyBjb25zdCBuYW1lID0gb3BfYmFzZW5hbWUoZXhlYyk7CisJCQlpZiAobmFtZSAhPSAib3Byb2ZpbGVkIikKKwkJCQljb250aW51ZTsKKworCQkJZGFlbW9uX3BpZCA9IGRpcmVudC0+ZF9uYW1lOworCQkJcnVubmluZyA9IHRydWU7CisJCX0KKworCQljbG9zZWRpcihkaXIpOworCX0KKworCUhaID0gc3lzY29uZihfU0NfQ0xLX1RDSyk7CisJaWYgKEhaID09IC0xKSB7CisJCXBlcnJvcigib3Byb2ZpbGVkOiBVbmFibGUgdG8gZGV0ZXJtaW5lIGNsb2NrIHRpY2tzIHBlciBzZWNvbmQuICIpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorCisJaWYgKGRhZW1vbl9waWQuZW1wdHkoKSkKKwkJcmV0dXJuOworCisJbnJfaW50ZXJydXB0cyA9IDA7CisKKwlzd2l0Y2ggKG9wX2dldF9pbnRlcmZhY2UoKSkgeworCWNhc2UgT1BfSU5URVJGQUNFXzI0OgorCQl7CisJCQlpZnN0cmVhbSBpZnMzKCIvcHJvYy9zeXMvZGV2L29wcm9maWxlL25yX2ludGVycnVwdHMiKTsKKwkJCWlmIChpZnMzKQorCQkJCWlmczMgPj4gbnJfaW50ZXJydXB0czsKKwkJfQorCQlicmVhazsKKwljYXNlIE9QX0lOVEVSRkFDRV8yNjoKKwkJeworCQkJc3RhdGljIHVuc2lnbmVkIGludCBvbGRfc3VtX2ludGVycnVwdHM7CisJCQl1bnNpZ25lZCBpbnQgc3VtX2ludGVycnVwdHMgPSAwOworCQkJZ2xvYl90IGZpbGVfbmFtZXM7CisKKwkJCWZpbGVfbmFtZXMuZ2xfb2ZmcyA9IDA7CisJCQlnbG9iKCIvZGV2L29wcm9maWxlL3N0YXRzL2NwdSovc2FtcGxlX3JlY2VpdmVkIiwKKwkJCSAgICAgR0xPQl9ET09GRlMsIE5VTEwsICZmaWxlX25hbWVzKTsKKworCQkJZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaWxlX25hbWVzLmdsX3BhdGhjOyArK2kpIHsKKwkJCQlpZnN0cmVhbSBpZnMzKGZpbGVfbmFtZXMuZ2xfcGF0aHZbaV0pOworCQkJCWlmIChpZnMzKSB7CisJCQkJCXVuc2lnbmVkIGludCBmaWxlX2ludGVycnVwdHM7CisJCQkJCWlmczMgPj4gZmlsZV9pbnRlcnJ1cHRzOworCQkJCQlzdW1faW50ZXJydXB0cyArPSBmaWxlX2ludGVycnVwdHM7CisJCQkJfQorCQkJfQorCQkJaWYgKG9sZF9zdW1faW50ZXJydXB0cyA+IHN1bV9pbnRlcnJ1cHRzKQorCQkJCS8vIG9jY3VyIGlmIHdlIHN0b3AvcmVzdGFydCBkYWVtb24uCisJCQkJb2xkX3N1bV9pbnRlcnJ1cHRzID0gMDsKKwkJCW5yX2ludGVycnVwdHMgPSBzdW1faW50ZXJydXB0cyAtIG9sZF9zdW1faW50ZXJydXB0czsKKwkJCW9sZF9zdW1faW50ZXJydXB0cyA9IHN1bV9pbnRlcnJ1cHRzOworCQkJZ2xvYmZyZWUoJmZpbGVfbmFtZXMpOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KK30KKworCisvKioKKyAqIGdldF9jb25maWdfZmlsZW5hbWUgLSBnZXQgYWJzb2x1dGUgZmlsZW5hbWUgb2YgZmlsZSBpbiB1c2VyICRIT01FCisgKiBAcGFyYW0gZmlsZW5hbWUgIHRoZSByZWxhdGl2ZSBmaWxlbmFtZQorICoKKyAqIEdldCB0aGUgYWJzb2x1dGUgcGF0aCBvZiBhIGZpbGUgaW4gYSB1c2VyJ3MgaG9tZSBkaXJlY3RvcnkuCisgKi8KK3N0cmluZyBjb25zdCBnZXRfY29uZmlnX2ZpbGVuYW1lKHN0cmluZyBjb25zdCAmIGZpbGVuYW1lKQoreworCXJldHVybiBnZXRfY29uZmlnX2RpcigpICsgIi8iICsgZmlsZW5hbWU7Cit9CisKKworLyoqCisgKiBjaGVja19hbmRfY3JlYXRlX2NvbmZpZ19kaXIgLSBtYWtlIHN1cmUgY29uZmlnIGRpciBpcyBhY2Nlc3NpYmxlCisgKgorICogUmV0dXJucyAldHJ1ZSBpZiB0aGUgZGlyIGlzIGFjY2Vzc2libGUuCisgKi8KK2Jvb2wgY2hlY2tfYW5kX2NyZWF0ZV9jb25maWdfZGlyKCkKK3sKKwlzdHJpbmcgZGlyID0gZ2V0X2NvbmZpZ19maWxlbmFtZSgiLm9wcm9maWxlIik7CisKKwljaGFyICogbmFtZSA9IHhzdHJkdXAoZGlyLmNfc3RyKCkpOworCisJaWYgKGNyZWF0ZV9kaXIobmFtZSkpIHsKKwkJb3N0cmluZ3N0cmVhbSBvdXQ7CisJCW91dCA8PCAidW5hYmxlIHRvIGNyZWF0ZSAiIDw8IGRpciA8PCAiIGRpcmVjdG9yeSAiOworCQlvdXQgPDwgImNhdXNlOiAiIDw8IHN0cmVycm9yKGVycm5vKTsKKwkJUU1lc3NhZ2VCb3g6Ondhcm5pbmcoMCwgMCwgb3V0LnN0cigpLmNfc3RyKCkpOworCisJCWZyZWUobmFtZSk7CisKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCWZyZWUobmFtZSk7CisJcmV0dXJuIHRydWU7Cit9CisKKworLyoqCisgKiBmb3JtYXQgLSByZS1mb3JtYXQgYSBzdHJpbmcKKyAqIEBwYXJhbSBvcmlnICBzdHJpbmcgdG8gZm9ybWF0CisgKiBAcGFyYW0gbWF4bGVuICB3aWR0aCBvZiBsaW5lCisgKgorICogUmUtZm9ybWF0cyBhIHN0cmluZyB0byBmaXQgaW50byBhIGNlcnRhaW4gd2lkdGgsCisgKiBicmVha2luZyBsaW5lcyBhdCBzcGFjZXMgYmV0d2VlbiB3b3Jkcy4KKyAqCisgKiBSZXR1cm5zIHRoZSBmb3JtYXR0ZWQgc3RyaW5nCisgKi8KK3N0cmluZyBjb25zdCBmb3JtYXQoc3RyaW5nIGNvbnN0ICYgb3JpZywgdWludCBjb25zdCBtYXhsZW4pCit7CisJc3RyaW5nIHRleHQob3JpZyk7CisKKwlpc3RyaW5nc3RyZWFtIHNzKHRleHQpOworCXZlY3RvcjxzdHJpbmc+IGxpbmVzOworCisJc3RyaW5nIG9saW5lOworCXN0cmluZyBsaW5lOworCisJd2hpbGUgKGdldGxpbmUoc3MsIG9saW5lKSkgeworCQlpZiAobGluZS5zaXplKCkgKyBvbGluZS5zaXplKCkgPCBtYXhsZW4pIHsKKwkJCWxpbmVzLnB1c2hfYmFjayhsaW5lICsgb2xpbmUpOworCQkJbGluZS5lcmFzZSgpOworCQl9IGVsc2UgeworCQkJbGluZXMucHVzaF9iYWNrKGxpbmUpOworCQkJbGluZS5lcmFzZSgpOworCQkJc3RyaW5nIHM7CisJCQlzdHJpbmcgd29yZDsKKwkJCWlzdHJpbmdzdHJlYW0gb3NzKG9saW5lKTsKKwkJCXdoaWxlIChvc3MgPj4gd29yZCkgeworCQkJCWlmIChsaW5lLnNpemUoKSArIHdvcmQuc2l6ZSgpID4gbWF4bGVuKSB7CisJCQkJCWxpbmVzLnB1c2hfYmFjayhsaW5lKTsKKwkJCQkJbGluZS5lcmFzZSgpOworCQkJCX0KKwkJCQlsaW5lICs9IHdvcmQgKyAiICI7CisJCQl9CisJCX0KKwl9CisKKwlpZiAobGluZS5zaXplKCkpCisJCWxpbmVzLnB1c2hfYmFjayhsaW5lKTsKKworCXN0cmluZyByZXQ7CisKKwlmb3IodmVjdG9yPHN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbGluZXMuYmVnaW4oKTsgaXQgIT0gbGluZXMuZW5kKCk7ICsraXQpCisJCXJldCArPSAqaXQgKyAiXG4iOworCisJcmV0dXJuIHJldDsKK30KKworCisvKioKKyAqIGRvX2V4ZWNfY29tbWFuZCAtIGV4ZWN1dGUgYSBjb21tYW5kCisgKiBAcGFyYW0gY21kICBjb21tYW5kIG5hbWUKKyAqIEBwYXJhbSBhcmdzICBhcmd1bWVudHMgdG8gY29tbWFuZAorICoKKyAqIEV4ZWN1dGUgYSBjb21tYW5kIHN5bmNocm9ub3VzbHkuIEFuIGVycm9yIG1lc3NhZ2UgaXMgc2hvd24KKyAqIGlmIHRoZSBjb21tYW5kIHJldHVybnMgYSBub24temVybyBzdGF0dXMsIHdoaWNoIGlzIGFsc28gcmV0dXJuZWQuCisgKgorICogVGhlIGFyZ3VtZW50cyBhcmUgdmVyaWZpZWQgYW5kIHdpbGwgcmVmdXNlIHRvIGV4ZWN1dGUgaWYgdGhleSBjb250YWluCisgKiBzaGVsbCBtZXRhY2hhcmFjdGVycy4KKyAqLworaW50IGRvX2V4ZWNfY29tbWFuZChzdHJpbmcgY29uc3QgJiBjbWQsIHZlY3RvcjxzdHJpbmc+IGNvbnN0ICYgYXJncykKK3sKKwlvc3RyaW5nc3RyZWFtIGVycjsKKwlib29sIG9rID0gdHJ1ZTsKKworCS8vIHZlcmlmeSBhcmd1bWVudHMKKwlmb3IgKHZlY3RvcjxzdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBjaXQgPSBhcmdzLmJlZ2luKCk7CisJCWNpdCAhPSBhcmdzLmVuZCgpOyArK2NpdCkgeworCQlpZiAodmVyaWZ5X2FyZ3VtZW50KCpjaXQpKQorCQkJY29udGludWU7CisKKwkJUU1lc3NhZ2VCb3g6Ondhcm5pbmcoMCwgMCwKKwkJCXN0cmluZygKKwkJCSJDb3VsZCBub3QgZXhlY3V0ZTogQXJndW1lbnQgXCIiICsgKmNpdCArCisJCQkiXCIgY29udGFpbnMgc2hlbGwgbWV0YWNoYXJhY3RlcnMuXG4iKS5jX3N0cigpKTsKKwkJcmV0dXJuIEVJTlZBTDsKKwl9CisKKwljaGlsZF9yZWFkZXIgcmVhZGVyKGNtZCwgYXJncyk7CisJaWYgKHJlYWRlci5lcnJvcigpKQorCQlvayA9IGZhbHNlOworCisJaWYgKG9rKQorCQlyZWFkZXIuZ2V0X2RhdGEoY291dCwgZXJyKTsKKworCWludCByZXQgPSByZWFkZXIudGVybWluYXRlX3Byb2Nlc3MoKTsKKwlpZiAocmV0KSB7CisJCXN0cmluZyBlcnJvciA9IHJlYWRlci5lcnJvcl9zdHIoKSArICJcbiI7CisJCWVycm9yICs9ICJGYWlsZWQ6IFxuIiArIGVyci5zdHIoKSArICJcbiI7CisJCXN0cmluZyBjbWRsaW5lID0gY21kOworCQlmb3IgKHZlY3RvcjxzdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBjaXQgPSBhcmdzLmJlZ2luKCk7CisJCSAgICAgY2l0ICE9IGFyZ3MuZW5kKCk7ICsrY2l0KSB7CisJCQljbWRsaW5lICs9ICIgIiArICpjaXQgKyAiICI7CisJCX0KKwkJZXJyb3IgKz0gIlxuXG5Db21tYW5kIHdhcyA6XG5cbiIgKyBjbWRsaW5lICsgIlxuIjsKKworCQlRTWVzc2FnZUJveDo6d2FybmluZygwLCAwLCBmb3JtYXQoZXJyb3IsIDUwKS5jX3N0cigpKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisKKy8qKgorICogZG9fb3Blbl9maWxlX29yX2RpciAtIG9wZW4gZmlsZS9kaXJlY3RvcnkKKyAqIEBwYXJhbSBiYXNlX2RpciAgZGlyZWN0b3J5IHRvIHN0YXJ0IGF0CisgKiBAcGFyYW0gZGlyX29ubHkgIGRpcmVjdG9yeSBvciBmaWxlbmFtZSB0byBzZWxlY3QKKyAqCisgKiBTZWxlY3QgYSBmaWxlIG9yIGRpcmVjdG9yeS4gVGhlIHNlbGVjdGlvbiBpcyByZXR1cm5lZDsKKyAqIGFuIGVtcHR5IHN0cmluZyBpZiB0aGUgc2VsZWN0aW9uIHdhcyBjYW5jZWxsZWQuCisgKi8KK3N0cmluZyBjb25zdCBkb19vcGVuX2ZpbGVfb3JfZGlyKHN0cmluZyBjb25zdCAmIGJhc2VfZGlyLCBib29sIGRpcl9vbmx5KQoreworCVFTdHJpbmcgcmVzdWx0OworCisJaWYgKGRpcl9vbmx5KSB7CisJCXJlc3VsdCA9IFFGaWxlRGlhbG9nOjpnZXRFeGlzdGluZ0RpcmVjdG9yeShiYXNlX2Rpci5jX3N0cigpLCAwLAorCQkJIm9wZW5fZmlsZV9vcl9kaXIiLCAiR2V0IGRpcmVjdG9yeSBuYW1lIiwgdHJ1ZSk7CisJfSBlbHNlIHsKKwkJcmVzdWx0ID0gUUZpbGVEaWFsb2c6OmdldE9wZW5GaWxlTmFtZShiYXNlX2Rpci5jX3N0cigpLCAwLCAwLAorCQkJIm9wZW5fZmlsZV9vcl9kaXIiLCAiR2V0IGZpbGVuYW1lIik7CisJfQorCisJaWYgKHJlc3VsdC5pc051bGwoKSkKKwkJcmV0dXJuIHN0cmluZygpOworCWVsc2UKKwkJcmV0dXJuIHJlc3VsdC5sYXRpbjEoKTsKK30KKworLyoqCisgKiB2ZXJpZnlfYXJndW1lbnQgLSBjaGVjayBzdHJpbmcgZm9yIHBvdGVudGlhbGx5IGRhbmdlcm91cyBjaGFyYWN0ZXJzCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIGZhbHNlIGlmIHRoZSBzdHJpbmcgY29udGFpbnMgZGFuZ2Vyb3VzIHNoZWxsCisgKiBtZXRhY2hhcmFjdGVycy4KKyAqCisgKiBXV1cgU2VjdXJpdHkgRkFRIGRhbmdlcm91cyBjaGFyczoKKyAqCisgKiAmIDsgYCAnIFwgIiB8ICogPyB+IDwgPiBeICggKSBbIF0geyB9ICQgXG4gXHIKKyAqCisgKiBEYXZpZCBXaGVlbGVyOiAhICMKKyAqCisgKiBXZSBhbGxvdyAnLScgYmVjYXVzZSB3ZSBkaXNhbGxvdyB3aGl0ZXNwYWNlLiBXZSBhbGxvdyAnOicgYW5kICc9JworICovCitib29sIHZlcmlmeV9hcmd1bWVudChzdHJpbmcgY29uc3QgJiBzdHIpCit7CisJaWYgKHN0ci5maW5kX2ZpcnN0X25vdF9vZigKKwkJIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIgorCQkiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Xzo9LSslLC4vIikKKwkJIT0gc3RyaW5nOjpucG9zKQorCQlyZXR1cm4gZmFsc2U7CisJcmV0dXJuIHRydWU7Cit9CmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9ndWkvb3Byb2Zfc3RhcnRfdXRpbC5oIGIvb3Byb2ZpbGUtMC45LjcvZ3VpL29wcm9mX3N0YXJ0X3V0aWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jY2U2NDZkCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvZ3VpL29wcm9mX3N0YXJ0X3V0aWwuaApAQCAtMCwwICsxLDM5IEBACisvKioKKyAqIEBmaWxlIG9wcm9mX3N0YXJ0X3V0aWwuaAorICogTWlzY2VsbGFuZW91cyBoZWxwZXJzIGZvciB0aGUgR1VJIHN0YXJ0CisgKgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMiBPUHJvZmlsZSBhdXRob3JzCisgKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORworICoKKyAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQorICogQGF1dGhvciBKb2huIExldm9uCisgKi8KKworI2lmbmRlZiBPUFJPRl9TVEFSVF9VVElMX0gKKyNkZWZpbmUgT1BST0ZfU1RBUlRfVVRJTF9ICisKKyNpbmNsdWRlIDxjbWF0aD4KKyNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8dmVjdG9yPgorCisvLy8gU3RvcmUgdmFyaW91cyBkYWVtb24gc3RhdHVzIGRhdGEKK3N0cnVjdCBkYWVtb25fc3RhdHVzIHsKKwkvLy8gZmlsbCB2YXJpb3VzIGRhdGEgbWVtYmVyIGFjY29yZGluZyB0byB0aGUgY3VycmVudCBkYWVtb24gc3RhdHVzCisJZGFlbW9uX3N0YXR1cygpOworCWJvb2wgcnVubmluZzsJCQkvLy88IHRydWUgaWYgZGFlbW9uIGlzIHJ1bm5pbmcKKwl1bnNpZ25lZCBpbnQgbnJfaW50ZXJydXB0czsJLy8vPCBucl9pbnRlcnJ1cHRzIGZyb20gcHJvZmlsaW5nIHN0YXJ0Cit9OworCitpbmxpbmUgZG91YmxlIHJhdGlvKGRvdWJsZSB4MSwgZG91YmxlIHgyKQoreworCXJldHVybiBmYWJzKCgoeDEgLSB4MikgLyB4MikpICogMTAwOworfQorCitzdGQ6OnN0cmluZyBjb25zdCBnZXRfY29uZmlnX2ZpbGVuYW1lKHN0ZDo6c3RyaW5nIGNvbnN0ICYgZmlsZW5hbWUpOworYm9vbCBjaGVja19hbmRfY3JlYXRlX2NvbmZpZ19kaXIoKTsKK3N0ZDo6c3RyaW5nIGNvbnN0IGZvcm1hdChzdGQ6OnN0cmluZyBjb25zdCAmIG9yaWcsIHVpbnQgY29uc3QgbWF4bGVuKTsKK2ludCBkb19leGVjX2NvbW1hbmQoc3RkOjpzdHJpbmcgY29uc3QgJiBjbWQsIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25zdCAmIGFyZ3MgPSBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4oKSk7CitzdGQ6OnN0cmluZyBjb25zdCBkb19vcGVuX2ZpbGVfb3JfZGlyKHN0ZDo6c3RyaW5nIGNvbnN0ICYgYmFzZV9kaXIsIGJvb2wgZGlyX29ubHkpOworYm9vbCB2ZXJpZnlfYXJndW1lbnQoc3RkOjpzdHJpbmcgY29uc3QgJiBzdHIpOworCisjZW5kaWYgLy8gT1BST0ZfU1RBUlRfVVRJTF9ICmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9ndWkvdWkvTWFrZWZpbGUuYW0gYi9vcHJvZmlsZS0wLjkuNy9ndWkvdWkvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2I0ZWRiZQotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2d1aS91aS9NYWtlZmlsZS5hbQpAQCAtMCwwICsxLDI0IEBACitFWFRSQV9ESVNUID0gb3Byb2Zfc3RhcnQuYmFzZS51aQorCitpZiBoYXZlX3F0CisKK0FNX0NQUEZMQUdTID0gQFFUX0NGTEFHU0AKKworQU1fQ1hYRkxBR1MgPSBAT1BfQ1hYRkxBR1NACisKK25vaW5zdF9MSUJSQVJJRVMgPSBsaWJvcHJvZl9zdGFydC5hCitub2Rpc3RfbGlib3Byb2Zfc3RhcnRfYV9TT1VSQ0VTID0gb3Byb2Zfc3RhcnQuYmFzZS5jcHAgb3Byb2Zfc3RhcnQuYmFzZS5tb2MuY3BwCisKK29wcm9mX3N0YXJ0LmJhc2UuaDogb3Byb2Zfc3RhcnQuYmFzZS51aQorCSQoVUlDKSAtbyAkQCAkPAorCitvcHJvZl9zdGFydC5iYXNlLmNwcDogb3Byb2Zfc3RhcnQuYmFzZS5oIG9wcm9mX3N0YXJ0LmJhc2UudWkKKwkkKFVJQykgLW8gJEAgLWltcGwgJF4KKworb3Byb2Zfc3RhcnQuYmFzZS5tb2MuY3BwOiBvcHJvZl9zdGFydC5iYXNlLmgKKwkkKE1PQykgLW8gJEAgJDwKKworY2xlYW4tbG9jYWw6CisJcm0gLWYgb3Byb2Zfc3RhcnQuYmFzZS5oIG9wcm9mX3N0YXJ0LmJhc2UuY3BwIG9wcm9mX3N0YXJ0LmJhc2UubW9jLmNwcAorCitlbmRpZgpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvZ3VpL3VpL01ha2VmaWxlLmluIGIvb3Byb2ZpbGUtMC45LjcvZ3VpL3VpL01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwMGU0YTUKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9ndWkvdWkvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSw1NDIgQEAKKyMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTEuMSBmcm9tIE1ha2VmaWxlLmFtLgorIyBAY29uZmlndXJlX2lucHV0QAorCisjIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwKKyMgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorIyBJbmMuCisjIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0CisjIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKKyMgUEFSVElDVUxBUiBQVVJQT1NFLgorCitAU0VUX01BS0VACisKK1ZQQVRIID0gQHNyY2RpckAKK3BrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAorcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACitwa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACitwa2dsaWJleGVjZGlyID0gJChsaWJleGVjZGlyKS9AUEFDS0FHRUAKK2FtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKK2luc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0CitpbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCitpbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKK0lOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCit0cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCitOT1JNQUxfSU5TVEFMTCA9IDoKK1BSRV9JTlNUQUxMID0gOgorUE9TVF9JTlNUQUxMID0gOgorTk9STUFMX1VOSU5TVEFMTCA9IDoKK1BSRV9VTklOU1RBTEwgPSA6CitQT1NUX1VOSU5TVEFMTCA9IDoKK2J1aWxkX3RyaXBsZXQgPSBAYnVpbGRACitob3N0X3RyaXBsZXQgPSBAaG9zdEAKK3N1YmRpciA9IGd1aS91aQorRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChzcmNkaXIpL01ha2VmaWxlLmluCitBQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00CithbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9tNC9iaW51dGlscy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9idWlsdGluZXhwZWN0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2NlbGxzcHViZmRzdXBwb3J0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2NvbXBpbGVyb3B0aW9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2NvbmZpZ21vZHVsZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jb3B5aWZjaGFuZ2UubTQgJCh0b3Bfc3JjZGlyKS9tNC9kb2Nib29rLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2V4dHJhZGlycy5tNCAkKHRvcF9zcmNkaXIpL200L2ZpbmRrZXJuZWwubTQgXAorCSQodG9wX3NyY2RpcikvbTQva2VybmVsb3B0aW9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2tlcm5lbHZlcnNpb24ubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWJ0b29sLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2x0b3B0aW9ucy5tNCAkKHRvcF9zcmNkaXIpL200L2x0c3VnYXIubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbHR2ZXJzaW9uLm00ICQodG9wX3NyY2RpcikvbTQvbHR+b2Jzb2xldGUubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbWFsbG9jYXR0cmlidXRlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3BvcHRjb25zdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9wcmVjb21waWxlZGhlYWRlci5tNCAkKHRvcF9zcmNkaXIpL200L3F0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3Jlc3VsdHluLm00ICQodG9wX3NyY2RpcikvbTQvc3N0cmVhbS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC90eXBlZGVmLm00ICQodG9wX3NyY2RpcikvY29uZmlndXJlLmluCithbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAorCSQoQUNMT0NBTF9NNCkKK21raW5zdGFsbGRpcnMgPSAkKGluc3RhbGxfc2gpIC1kCitDT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5oCitDT05GSUdfQ0xFQU5fRklMRVMgPQorQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTID0KK0xJQlJBUklFUyA9ICQobm9pbnN0X0xJQlJBUklFUykKK0FSRkxBR1MgPSBjcnUKK2xpYm9wcm9mX3N0YXJ0X2FfQVIgPSAkKEFSKSAkKEFSRkxBR1MpCitsaWJvcHJvZl9zdGFydF9hX0xJQkFERCA9CitAaGF2ZV9xdF9UUlVFQG5vZGlzdF9saWJvcHJvZl9zdGFydF9hX09CSkVDVFMgPSAgXAorQGhhdmVfcXRfVFJVRUAJb3Byb2Zfc3RhcnQuYmFzZS4kKE9CSkVYVCkgXAorQGhhdmVfcXRfVFJVRUAJb3Byb2Zfc3RhcnQuYmFzZS5tb2MuJChPQkpFWFQpCitsaWJvcHJvZl9zdGFydF9hX09CSkVDVFMgPSAkKG5vZGlzdF9saWJvcHJvZl9zdGFydF9hX09CSkVDVFMpCitERUZBVUxUX0lOQ0xVREVTID0gLUkuQGFtX19pc3JjQCAtSSQodG9wX2J1aWxkZGlyKQorZGVwY29tcCA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvZGVwY29tcAorYW1fX2RlcGZpbGVzX21heWJlID0gZGVwZmlsZXMKK2FtX19tdiA9IG12IC1mCitDWFhDT01QSUxFID0gJChDWFgpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSBcCisJJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DWFhGTEFHUykgJChDWFhGTEFHUykKK0xUQ1hYQ09NUElMRSA9ICQoTElCVE9PTCkgLS10YWc9Q1hYICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgXAorCS0tbW9kZT1jb21waWxlICQoQ1hYKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgXAorCSQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ1hYRkxBR1MpICQoQ1hYRkxBR1MpCitDWFhMRCA9ICQoQ1hYKQorQ1hYTElOSyA9ICQoTElCVE9PTCkgLS10YWc9Q1hYICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgXAorCS0tbW9kZT1saW5rICQoQ1hYTEQpICQoQU1fQ1hYRkxBR1MpICQoQ1hYRkxBR1MpICQoQU1fTERGTEFHUykgXAorCSQoTERGTEFHUykgLW8gJEAKK1NPVVJDRVMgPSAkKG5vZGlzdF9saWJvcHJvZl9zdGFydF9hX1NPVVJDRVMpCitESVNUX1NPVVJDRVMgPQorRVRBR1MgPSBldGFncworQ1RBR1MgPSBjdGFncworRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKK0FDTE9DQUwgPSBAQUNMT0NBTEAKK0FNVEFSID0gQEFNVEFSQAorQVIgPSBAQVJACitBVVRPQ09ORiA9IEBBVVRPQ09ORkAKK0FVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKK0FVVE9NQUtFID0gQEFVVE9NQUtFQAorQVdLID0gQEFXS0AKK0JGRF9MSUJTID0gQEJGRF9MSUJTQAorQ0FUX0VOVFJZX0VORCA9IEBDQVRfRU5UUllfRU5EQAorQ0FUX0VOVFJZX1NUQVJUID0gQENBVF9FTlRSWV9TVEFSVEAKK0NDID0gQENDQAorQ0NERVBNT0RFID0gQENDREVQTU9ERUAKK0NGTEFHUyA9IEBDRkxBR1NACitDUFAgPSBAQ1BQQAorQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACitDWFggPSBAQ1hYQAorQ1hYQ1BQID0gQENYWENQUEAKK0NYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKK0NYWEZMQUdTID0gQENYWEZMQUdTQAorQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKK0RBVEUgPSBAREFURUAKK0RFRlMgPSBAREVGU0AKK0RFUERJUiA9IEBERVBESVJACitET0NCT09LX1JPT1QgPSBARE9DQk9PS19ST09UQAorRFNZTVVUSUwgPSBARFNZTVVUSUxACitEVU1QQklOID0gQERVTVBCSU5ACitFQ0hPX0MgPSBARUNIT19DQAorRUNIT19OID0gQEVDSE9fTkAKK0VDSE9fVCA9IEBFQ0hPX1RACitFR1JFUCA9IEBFR1JFUEAKK0VYRUVYVCA9IEBFWEVFWFRACitFWFRSQV9DRkxBR1NfTU9EVUxFID0gQEVYVFJBX0NGTEFHU19NT0RVTEVACitGR1JFUCA9IEBGR1JFUEAKK0dSRVAgPSBAR1JFUEAKK0lOU1RBTEwgPSBASU5TVEFMTEAKK0lOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACitJTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAorSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACitJTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAorSkFWQV9IT01FRElSID0gQEpBVkFfSE9NRURJUkAKK0tJTkMgPSBAS0lOQ0AKK0tTUkMgPSBAS1NSQ0AKK0tWRVJTID0gQEtWRVJTQAorTEQgPSBATERACitMREZMQUdTID0gQExERkxBR1NACitMSUJFUlRZX0xJQlMgPSBATElCRVJUWV9MSUJTQAorTElCT0JKUyA9IEBMSUJPQkpTQAorTElCUyA9IEBMSUJTQAorTElCVE9PTCA9IEBMSUJUT09MQAorTElQTyA9IEBMSVBPQAorTE5fUyA9IEBMTl9TQAorTFRMSUJPQkpTID0gQExUTElCT0JKU0AKK01BS0VJTkZPID0gQE1BS0VJTkZPQAorTUtESVJfUCA9IEBNS0RJUl9QQAorTU9DID0gQE1PQ0AKK01PRElOU1RBTExESVIgPSBATU9ESU5TVEFMTERJUkAKK05NID0gQE5NQAorTk1FRElUID0gQE5NRURJVEAKK09CSkRVTVAgPSBAT0JKRFVNUEAKK09CSkVYVCA9IEBPQkpFWFRACitPUFJPRklMRV9ESVIgPSBAT1BST0ZJTEVfRElSQAorT1BST0ZJTEVfTU9EVUxFX0FSQ0ggPSBAT1BST0ZJTEVfTU9EVUxFX0FSQ0hACitPUF9DRkxBR1MgPSBAT1BfQ0ZMQUdTQAorT1BfQ1hYRkxBR1MgPSBAT1BfQ1hYRkxBR1NACitPUF9ET0NESVIgPSBAT1BfRE9DRElSQAorT1RPT0wgPSBAT1RPT0xACitPVE9PTDY0ID0gQE9UT09MNjRACitQQUNLQUdFID0gQFBBQ0tBR0VACitQQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKK1BBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACitQQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKK1BBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACitQQUNLQUdFX1VSTCA9IEBQQUNLQUdFX1VSTEAKK1BBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACitQQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKK1BLR19DT05GSUcgPSBAUEtHX0NPTkZJR0AKK1BLR19DT05GSUdfTElCRElSID0gQFBLR19DT05GSUdfTElCRElSQAorUEtHX0NPTkZJR19QQVRIID0gQFBLR19DT05GSUdfUEFUSEAKK1BPUFRfTElCUyA9IEBQT1BUX0xJQlNACitQVFJESUZGX1RfVFlQRSA9IEBQVFJESUZGX1RfVFlQRUAKK1FUX0NGTEFHUyA9IEBRVF9DRkxBR1NACitRVF9JTkNMVURFUyA9IEBRVF9JTkNMVURFU0AKK1FUX0xERkxBR1MgPSBAUVRfTERGTEFHU0AKK1FUX0xJQiA9IEBRVF9MSUJACitRVF9MSUJTID0gQFFUX0xJQlNACitRVF9WRVJTSU9OID0gQFFUX1ZFUlNJT05ACitSQU5MSUIgPSBAUkFOTElCQAorU0VEID0gQFNFREAKK1NFVF9NQUtFID0gQFNFVF9NQUtFQAorU0hFTEwgPSBAU0hFTExACitTSVpFX1RfVFlQRSA9IEBTSVpFX1RfVFlQRUAKK1NUUklQID0gQFNUUklQQAorVUlDID0gQFVJQ0AKK1VJQ2hlbHAgPSBAVUlDaGVscEAKK1ZFUlNJT04gPSBAVkVSU0lPTkAKK1hNS01GID0gQFhNS01GQAorWE1MX0NBVEFMT0cgPSBAWE1MX0NBVEFMT0dACitYU0xUUFJPQyA9IEBYU0xUUFJPQ0AKK1hTTFRQUk9DX0ZMQUdTID0gQFhTTFRQUk9DX0ZMQUdTQAorWF9DRkxBR1MgPSBAWF9DRkxBR1NACitYX0VYVFJBX0xJQlMgPSBAWF9FWFRSQV9MSUJTQAorWF9MSUJTID0gQFhfTElCU0AKK1hfUFJFX0xJQlMgPSBAWF9QUkVfTElCU0AKK2Fic19idWlsZGRpciA9IEBhYnNfYnVpbGRkaXJACithYnNfc3JjZGlyID0gQGFic19zcmNkaXJACithYnNfdG9wX2J1aWxkZGlyID0gQGFic190b3BfYnVpbGRkaXJACithYnNfdG9wX3NyY2RpciA9IEBhYnNfdG9wX3NyY2RpckAKK2FjX2N0X0NDID0gQGFjX2N0X0NDQAorYWNfY3RfQ1hYID0gQGFjX2N0X0NYWEAKK2FjX2N0X0RVTVBCSU4gPSBAYWNfY3RfRFVNUEJJTkAKK2FtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAorYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKK2FtX19xdW90ZSA9IEBhbV9fcXVvdGVACithbV9fdGFyID0gQGFtX190YXJACithbV9fdW50YXIgPSBAYW1fX3VudGFyQAorYmluZGlyID0gQGJpbmRpckAKK2J1aWxkID0gQGJ1aWxkQAorYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACitidWlsZF9jcHUgPSBAYnVpbGRfY3B1QAorYnVpbGRfb3MgPSBAYnVpbGRfb3NACitidWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAorYnVpbGRkaXIgPSBAYnVpbGRkaXJACitkYXRhZGlyID0gQGRhdGFkaXJACitkYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKK2RvY2RpciA9IEBkb2NkaXJACitkdmlkaXIgPSBAZHZpZGlyQAorZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACitob3N0ID0gQGhvc3RACitob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACitob3N0X2NwdSA9IEBob3N0X2NwdUAKK2hvc3Rfb3MgPSBAaG9zdF9vc0AKK2hvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAoraHRtbGRpciA9IEBodG1sZGlyQAoraW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAoraW5mb2RpciA9IEBpbmZvZGlyQAoraW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAorbGliZGlyID0gQGxpYmRpckAKK2xpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKK2xvY2FsZWRpciA9IEBsb2NhbGVkaXJACitsb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACitsdF9FQ0hPID0gQGx0X0VDSE9ACittYW5kaXIgPSBAbWFuZGlyQAorbWtkaXJfcCA9IEBta2Rpcl9wQAorb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAorcGRmZGlyID0gQHBkZmRpckAKK3ByZWZpeCA9IEBwcmVmaXhACitwcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACitwc2RpciA9IEBwc2RpckAKK3NiaW5kaXIgPSBAc2JpbmRpckAKK3NoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAorc3JjZGlyID0gQHNyY2RpckAKK3N5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKK3RhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACit0b3BfYnVpbGRfcHJlZml4ID0gQHRvcF9idWlsZF9wcmVmaXhACit0b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAordG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAordG9wZGlyID0gQHRvcGRpckAKK0VYVFJBX0RJU1QgPSBvcHJvZl9zdGFydC5iYXNlLnVpCitAaGF2ZV9xdF9UUlVFQEFNX0NQUEZMQUdTID0gQFFUX0NGTEFHU0AKK0BoYXZlX3F0X1RSVUVAQU1fQ1hYRkxBR1MgPSBAT1BfQ1hYRkxBR1NACitAaGF2ZV9xdF9UUlVFQG5vaW5zdF9MSUJSQVJJRVMgPSBsaWJvcHJvZl9zdGFydC5hCitAaGF2ZV9xdF9UUlVFQG5vZGlzdF9saWJvcHJvZl9zdGFydF9hX1NPVVJDRVMgPSBvcHJvZl9zdGFydC5iYXNlLmNwcCBvcHJvZl9zdGFydC5iYXNlLm1vYy5jcHAKK2FsbDogYWxsLWFtCisKKy5TVUZGSVhFUzoKKy5TVUZGSVhFUzogLmNwcCAubG8gLm8gLm9iagorJChzcmNkaXIpL01ha2VmaWxlLmluOiAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKKwlAZm9yIGRlcCBpbiAkPzsgZG8gXAorCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCisJICAgICokJGRlcCopIFwKKwkgICAgICAoIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCApIFwKKwkgICAgICAgICYmIHsgaWYgdGVzdCAtZiAkQDsgdGhlbiBleGl0IDA7IGVsc2UgYnJlYWs7IGZpOyB9OyBcCisJICAgICAgZXhpdCAxOzsgXAorCSAgZXNhYzsgXAorCWRvbmU7IFwKKwllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gZ3VpL3VpL01ha2VmaWxlJzsgXAorCSQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmIFwKKwkgICQoQVVUT01BS0UpIC0tZm9yZWlnbiBndWkvdWkvTWFrZWZpbGUKKy5QUkVDSU9VUzogTWFrZWZpbGUKK01ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKKwlAY2FzZSAnJD8nIGluIFwKKwkgICpjb25maWcuc3RhdHVzKikgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCisJICAqKSBcCisJICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKKwllc2FjOworCiskKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKworJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6ICAkKGFtX19jb25maWd1cmVfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyQoQUNMT0NBTF9NNCk6ICAkKGFtX19hY2xvY2FsX200X2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCiskKGFtX19hY2xvY2FsX200X2RlcHMpOgorCitjbGVhbi1ub2luc3RMSUJSQVJJRVM6CisJLXRlc3QgLXogIiQobm9pbnN0X0xJQlJBUklFUykiIHx8IHJtIC1mICQobm9pbnN0X0xJQlJBUklFUykKK2xpYm9wcm9mX3N0YXJ0LmE6ICQobGlib3Byb2Zfc3RhcnRfYV9PQkpFQ1RTKSAkKGxpYm9wcm9mX3N0YXJ0X2FfREVQRU5ERU5DSUVTKSAKKwktcm0gLWYgbGlib3Byb2Zfc3RhcnQuYQorCSQobGlib3Byb2Zfc3RhcnRfYV9BUikgbGlib3Byb2Zfc3RhcnQuYSAkKGxpYm9wcm9mX3N0YXJ0X2FfT0JKRUNUUykgJChsaWJvcHJvZl9zdGFydF9hX0xJQkFERCkKKwkkKFJBTkxJQikgbGlib3Byb2Zfc3RhcnQuYQorCittb3N0bHljbGVhbi1jb21waWxlOgorCS1ybSAtZiAqLiQoT0JKRVhUKQorCitkaXN0Y2xlYW4tY29tcGlsZToKKwktcm0gLWYgKi50YWIuYworCitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvb3Byb2Zfc3RhcnQuYmFzZS5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvb3Byb2Zfc3RhcnQuYmFzZS5tb2MuUG9AYW1fX3F1b3RlQAorCisuY3BwLm86CitAYW1fX2Zhc3RkZXBDWFhfVFJVRUAJJChDWFhDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCAkPAorQGFtX19mYXN0ZGVwQ1hYX1RSVUVACSQoYW1fX212KSAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENYWF9GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENYWERFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAkkKENYWENPTVBJTEUpIC1jIC1vICRAICQ8CisKKy5jcHAub2JqOgorQGFtX19mYXN0ZGVwQ1hYX1RSVUVACSQoQ1hYQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYAorQGFtX19mYXN0ZGVwQ1hYX1RSVUVACSQoYW1fX212KSAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENYWF9GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENYWERFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAkkKENYWENPTVBJTEUpIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKKworLmNwcC5sbzoKK0BhbV9fZmFzdGRlcENYWF9UUlVFQAkkKExUQ1hYQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgJDwKK0BhbV9fZmFzdGRlcENYWF9UUlVFQAkkKGFtX19tdikgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENYWF9GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENYWERFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAkkKExUQ1hYQ09NUElMRSkgLWMgLW8gJEAgJDwKKworbW9zdGx5Y2xlYW4tbGlidG9vbDoKKwktcm0gLWYgKi5sbworCitjbGVhbi1saWJ0b29sOgorCS1ybSAtcmYgLmxpYnMgX2xpYnMKKworSUQ6ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKExJU1ApICQoVEFHU19GSUxFUykKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKwkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKwlta2lkIC1mSUQgJCR1bmlxdWUKK3RhZ3M6IFRBR1MKKworVEFHUzogICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAorCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKwlzZXQgeDsgXAorCWhlcmU9YHB3ZGA7IFwKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCisJICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCisJc2hpZnQ7IFwKKwlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCQqJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAorCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAorCSAgaWYgdGVzdCAkJCMgLWd0IDA7IHRoZW4gXAorCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCisJICAgICAgIiQkQCIgJCR1bmlxdWU7IFwKKwkgIGVsc2UgXAorCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCisJICAgICAgJCR1bmlxdWU7IFwKKwkgIGZpOyBcCisJZmkKK2N0YWdzOiBDVEFHUworQ1RBR1M6ICAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKKwkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHVuaXF1ZSIgXAorCSAgfHwgJChDVEFHUykgJChDVEFHU0ZMQUdTKSAkKEFNX0NUQUdTRkxBR1MpICQoQ1RBR1NfQVJHUykgXAorCSAgICAgJCR1bmlxdWUKKworR1RBR1M6CisJaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKKwkgICYmICQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpIFwKKwkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgIiQkaGVyZSIKKworZGlzdGNsZWFuLXRhZ3M6CisJLXJtIC1mIFRBR1MgSUQgR1RBR1MgR1JUQUdTIEdTWU1TIEdQQVRIIHRhZ3MKKworZGlzdGRpcjogJChESVNURklMRVMpCisJQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwlsaXN0PSckKERJU1RGSUxFUyknOyBcCisJICBkaXN0X2ZpbGVzPWBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRmaWxlOyBkb25lIHwgXAorCSAgc2VkIC1lICJzfF4kJHNyY2RpcnN0cmlwL3x8O3QiIFwKKwkgICAgICAtZSAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3w7dCJgOyBcCisJY2FzZSAkJGRpc3RfZmlsZXMgaW4gXAorCSAgKi8qKSAkKE1LRElSX1ApIGBlY2hvICIkJGRpc3RfZmlsZXMiIHwgXAorCQkJICAgc2VkICcvXC8vIWQ7c3xefCQoZGlzdGRpcikvfDtzLC9bXi9dKiQkLCwnIHwgXAorCQkJICAgc29ydCAtdWAgOzsgXAorCWVzYWM7IFwKKwlmb3IgZmlsZSBpbiAkJGRpc3RfZmlsZXM7IGRvIFwKKwkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKKwkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCisJICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCisJICAgIGlmIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRmaWxlIjsgdGhlbiBcCisJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisJICAgIGZpOyBcCisJICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAorCSAgICAgIGNwIC1mcFIgJChzcmNkaXIpLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKwkgICAgZmk7IFwKKwkgICAgY3AgLWZwUiAkJGQvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorCSAgZWxzZSBcCisJICAgIHRlc3QgLWYgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGV4aXQgMTsgXAorCSAgZmk7IFwKKwlkb25lCitjaGVjay1hbTogYWxsLWFtCitjaGVjazogY2hlY2stYW0KK2FsbC1hbTogTWFrZWZpbGUgJChMSUJSQVJJRVMpCitpbnN0YWxsZGlyczoKK2luc3RhbGw6IGluc3RhbGwtYW0KK2luc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLWFtCitpbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1hbQordW5pbnN0YWxsOiB1bmluc3RhbGwtYW0KKworaW5zdGFsbC1hbTogYWxsLWFtCisJQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KKworaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KK2luc3RhbGwtc3RyaXA6CisJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKKwkgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorCSAgYHRlc3QgLXogJyQoU1RSSVApJyB8fCBcCisJICAgIGVjaG8gIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciYCBpbnN0YWxsCittb3N0bHljbGVhbi1nZW5lcmljOgorCitjbGVhbi1nZW5lcmljOgorCitkaXN0Y2xlYW4tZ2VuZXJpYzoKKwktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKKwktdGVzdCAuID0gIiQoc3JjZGlyKSIgfHwgdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykKKworbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgorCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKKwlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCitAaGF2ZV9xdF9GQUxTRUBjbGVhbi1sb2NhbDoKK2NsZWFuOiBjbGVhbi1hbQorCitjbGVhbi1hbTogY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIGNsZWFuLWxvY2FsIFwKKwljbGVhbi1ub2luc3RMSUJSQVJJRVMgbW9zdGx5Y2xlYW4tYW0KKworZGlzdGNsZWFuOiBkaXN0Y2xlYW4tYW0KKwktcm0gLXJmIC4vJChERVBESVIpCisJLXJtIC1mIE1ha2VmaWxlCitkaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKKwlkaXN0Y2xlYW4tdGFncworCitkdmk6IGR2aS1hbQorCitkdmktYW06CisKK2h0bWw6IGh0bWwtYW0KKworaHRtbC1hbToKKworaW5mbzogaW5mby1hbQorCitpbmZvLWFtOgorCitpbnN0YWxsLWRhdGEtYW06CisKK2luc3RhbGwtZHZpOiBpbnN0YWxsLWR2aS1hbQorCitpbnN0YWxsLWR2aS1hbToKKworaW5zdGFsbC1leGVjLWFtOgorCitpbnN0YWxsLWh0bWw6IGluc3RhbGwtaHRtbC1hbQorCitpbnN0YWxsLWh0bWwtYW06CisKK2luc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLWFtCisKK2luc3RhbGwtaW5mby1hbToKKworaW5zdGFsbC1tYW46CisKK2luc3RhbGwtcGRmOiBpbnN0YWxsLXBkZi1hbQorCitpbnN0YWxsLXBkZi1hbToKKworaW5zdGFsbC1wczogaW5zdGFsbC1wcy1hbQorCitpbnN0YWxsLXBzLWFtOgorCitpbnN0YWxsY2hlY2stYW06CisKK21haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tYW0KKwktcm0gLXJmIC4vJChERVBESVIpCisJLXJtIC1mIE1ha2VmaWxlCittYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCisKK21vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1hbQorCittb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIFwKKwltb3N0bHljbGVhbi1saWJ0b29sCisKK3BkZjogcGRmLWFtCisKK3BkZi1hbToKKworcHM6IHBzLWFtCisKK3BzLWFtOgorCit1bmluc3RhbGwtYW06CisKKy5NQUtFOiBpbnN0YWxsLWFtIGluc3RhbGwtc3RyaXAKKworLlBIT05ZOiBDVEFHUyBHVEFHUyBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgXAorCWNsZWFuLWxpYnRvb2wgY2xlYW4tbG9jYWwgY2xlYW4tbm9pbnN0TElCUkFSSUVTIGN0YWdzIFwKKwlkaXN0Y2xlYW4gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAorCWRpc3RjbGVhbi1saWJ0b29sIGRpc3RjbGVhbi10YWdzIGRpc3RkaXIgZHZpIGR2aS1hbSBodG1sIFwKKwlodG1sLWFtIGluZm8gaW5mby1hbSBpbnN0YWxsIGluc3RhbGwtYW0gaW5zdGFsbC1kYXRhIFwKKwlpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgaW5zdGFsbC1kdmktYW0gaW5zdGFsbC1leGVjIFwKKwlpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1odG1sIGluc3RhbGwtaHRtbC1hbSBpbnN0YWxsLWluZm8gXAorCWluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBpbnN0YWxsLXBkZiBpbnN0YWxsLXBkZi1hbSBcCisJaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIGluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIFwKKwlpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgbWFpbnRhaW5lci1jbGVhbiBcCisJbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIG1vc3RseWNsZWFuLWNvbXBpbGUgXAorCW1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBwZGYgcGRmLWFtIHBzIHBzLWFtIFwKKwl0YWdzIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0KKworCitAaGF2ZV9xdF9UUlVFQG9wcm9mX3N0YXJ0LmJhc2UuaDogb3Byb2Zfc3RhcnQuYmFzZS51aQorQGhhdmVfcXRfVFJVRUAJJChVSUMpIC1vICRAICQ8CisKK0BoYXZlX3F0X1RSVUVAb3Byb2Zfc3RhcnQuYmFzZS5jcHA6IG9wcm9mX3N0YXJ0LmJhc2UuaCBvcHJvZl9zdGFydC5iYXNlLnVpCitAaGF2ZV9xdF9UUlVFQAkkKFVJQykgLW8gJEAgLWltcGwgJF4KKworQGhhdmVfcXRfVFJVRUBvcHJvZl9zdGFydC5iYXNlLm1vYy5jcHA6IG9wcm9mX3N0YXJ0LmJhc2UuaAorQGhhdmVfcXRfVFJVRUAJJChNT0MpIC1vICRAICQ8CisKK0BoYXZlX3F0X1RSVUVAY2xlYW4tbG9jYWw6CitAaGF2ZV9xdF9UUlVFQAlybSAtZiBvcHJvZl9zdGFydC5iYXNlLmggb3Byb2Zfc3RhcnQuYmFzZS5jcHAgb3Byb2Zfc3RhcnQuYmFzZS5tb2MuY3BwCisKKyMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCisjIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KKy5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2d1aS91aS9vcHJvZl9zdGFydC5iYXNlLnVpIGIvb3Byb2ZpbGUtMC45LjcvZ3VpL3VpL29wcm9mX3N0YXJ0LmJhc2UudWkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGZjYzQzZgotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2d1aS91aS9vcHJvZl9zdGFydC5iYXNlLnVpCkBAIC0wLDAgKzEsMTE5MCBAQAorPCFET0NUWVBFIFVJPjxVST4KKzxjbGFzcz5vcHJvZl9zdGFydF9iYXNlPC9jbGFzcz4KKzx3aWRnZXQ+CisgICAgPGNsYXNzPlFEaWFsb2c8L2NsYXNzPgorICAgIDxwcm9wZXJ0eSBzdGRzZXQ9IjEiPgorICAgICAgICA8bmFtZT5uYW1lPC9uYW1lPgorICAgICAgICA8Y3N0cmluZz5vcHJvZl9zdGFydF9iYXNlPC9jc3RyaW5nPgorICAgIDwvcHJvcGVydHk+CisgICAgPHByb3BlcnR5IHN0ZHNldD0iMSI+CisgICAgICAgIDxuYW1lPmdlb21ldHJ5PC9uYW1lPgorICAgICAgICA8cmVjdD4KKyAgICAgICAgICAgIDx4PjA8L3g+CisgICAgICAgICAgICA8eT4wPC95PgorICAgICAgICAgICAgPHdpZHRoPjYyNTwvd2lkdGg+CisgICAgICAgICAgICA8aGVpZ2h0PjczNTwvaGVpZ2h0PgorICAgICAgICA8L3JlY3Q+CisgICAgPC9wcm9wZXJ0eT4KKyAgICA8cHJvcGVydHkgc3Rkc2V0PSIxIj4KKyAgICAgICAgPG5hbWU+Y2FwdGlvbjwvbmFtZT4KKyAgICAgICAgPHN0cmluZz5TdGFydCBwcm9maWxlcjwvc3RyaW5nPgorICAgIDwvcHJvcGVydHk+CisgICAgPHByb3BlcnR5IHN0ZHNldD0iMSI+CisgICAgICAgIDxuYW1lPnNpemVHcmlwRW5hYmxlZDwvbmFtZT4KKyAgICAgICAgPGJvb2w+dHJ1ZTwvYm9vbD4KKyAgICA8L3Byb3BlcnR5PgorICAgIDx2Ym94PgorICAgICAgICA8cHJvcGVydHkgc3Rkc2V0PSIxIj4KKyAgICAgICAgICAgIDxuYW1lPm1hcmdpbjwvbmFtZT4KKyAgICAgICAgICAgIDxudW1iZXI+MTE8L251bWJlcj4KKyAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgPHByb3BlcnR5IHN0ZHNldD0iMSI+CisgICAgICAgICAgICA8bmFtZT5zcGFjaW5nPC9uYW1lPgorICAgICAgICAgICAgPG51bWJlcj42PC9udW1iZXI+CisgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgIDx3aWRnZXQ+CisgICAgICAgICAgICA8Y2xhc3M+UVRhYldpZGdldDwvY2xhc3M+CisgICAgICAgICAgICA8cHJvcGVydHkgc3Rkc2V0PSIxIj4KKyAgICAgICAgICAgICAgICA8bmFtZT5uYW1lPC9uYW1lPgorICAgICAgICAgICAgICAgIDxjc3RyaW5nPnNldHVwX2NvbmZpZ190YWI8L2NzdHJpbmc+CisgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgPHdpZGdldD4KKyAgICAgICAgICAgICAgICA8Y2xhc3M+UVdpZGdldDwvY2xhc3M+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IHN0ZHNldD0iMSI+CisgICAgICAgICAgICAgICAgICAgIDxuYW1lPm5hbWU8L25hbWU+CisgICAgICAgICAgICAgICAgICAgIDxjc3RyaW5nPmNvdW50ZXJfc2V0dXBfcGFnZTwvY3N0cmluZz4KKyAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxhdHRyaWJ1dGU+CisgICAgICAgICAgICAgICAgICAgIDxuYW1lPnRpdGxlPC9uYW1lPgorICAgICAgICAgICAgICAgICAgICA8c3RyaW5nPiZhbXA7U2V0dXA8L3N0cmluZz4KKyAgICAgICAgICAgICAgICA8L2F0dHJpYnV0ZT4KKyAgICAgICAgICAgICAgICA8dmJveD4KKyAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IHN0ZHNldD0iMSI+CisgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT5tYXJnaW48L25hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICA8bnVtYmVyPjExPC9udW1iZXI+CisgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBzdGRzZXQ9IjEiPgorICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+c3BhY2luZzwvbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxudW1iZXI+NjwvbnVtYmVyPgorICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICA8d2lkZ2V0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGNsYXNzPlFHcm91cEJveDwvY2xhc3M+CisgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgc3Rkc2V0PSIxIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT5uYW1lPC9uYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjc3RyaW5nPmNvdW50ZXJfZ3JvdXA8L2NzdHJpbmc+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IHN0ZHNldD0iMSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+dGl0bGU8L25hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN0cmluZz5FdmVudHM8L3N0cmluZz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgICA8dmJveD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgc3Rkc2V0PSIxIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+bWFyZ2luPC9uYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bnVtYmVyPjExPC9udW1iZXI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgc3Rkc2V0PSIxIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+c3BhY2luZzwvbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG51bWJlcj42PC9udW1iZXI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8d2lkZ2V0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xhc3M+UUxheW91dFdpZGdldDwvY2xhc3M+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBzdGRzZXQ9IjEiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+bmFtZTwvbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjc3RyaW5nPkxheW91dDEwPC9jc3RyaW5nPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aGJveD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBzdGRzZXQ9IjEiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPm1hcmdpbjwvbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bnVtYmVyPjA8L251bWJlcj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgc3Rkc2V0PSIxIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT5zcGFjaW5nPC9uYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxudW1iZXI+NjwvbnVtYmVyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3aWRnZXQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsYXNzPlFMaXN0VmlldzwvY2xhc3M+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvbHVtbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+dGV4dDwvbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJpbmc+UmVtb3ZlZGluY29kZTwvc3RyaW5nPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT5jbGlja2FibGU8L25hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Ym9vbD5mYWxzZTwvYm9vbD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+cmVzaXplYWJsZTwvbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxib29sPnRydWU8L2Jvb2w+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jb2x1bW4+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IHN0ZHNldD0iMSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPm5hbWU8L25hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjc3RyaW5nPmV2ZW50c19saXN0PC9jc3RyaW5nPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IHN0ZHNldD0iMSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPm1pbmltdW1TaXplPC9uYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2l6ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3aWR0aD4yNTA8L3dpZHRoPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGhlaWdodD4wPC9oZWlnaHQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2l6ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBzdGRzZXQ9IjEiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT5zZWxlY3Rpb25Nb2RlPC9uYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW51bT5NdWx0aTwvZW51bT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+dG9vbFRpcDwvbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN0cmluZz5BdmFpbGFibGUgZXZlbnRzPC9zdHJpbmc+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvd2lkZ2V0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHdpZGdldD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xhc3M+UUxheW91dFdpZGdldDwvY2xhc3M+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IHN0ZHNldD0iMSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPm5hbWU8L25hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjc3RyaW5nPkxheW91dDk8L2NzdHJpbmc+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmJveD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IHN0ZHNldD0iMSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT5tYXJnaW48L25hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bnVtYmVyPjA8L251bWJlcj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IHN0ZHNldD0iMSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT5zcGFjaW5nPC9uYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG51bWJlcj42PC9udW1iZXI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3aWRnZXQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xhc3M+UUNoZWNrQm94PC9jbGFzcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBzdGRzZXQ9IjEiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPm5hbWU8L25hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNzdHJpbmc+b3NfcmluZ19jb3VudF9jYjwvY3N0cmluZz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgc3Rkc2V0PSIxIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT50ZXh0PC9uYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJpbmc+UHJvZmlsZSAmYW1wO2tlcm5lbDwvc3RyaW5nPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT50b29sVGlwPC9uYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJpbmc+UHJvZmlsZSBrZXJuZWwgY29kZTwvc3RyaW5nPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC93aWRnZXQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3aWRnZXQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xhc3M+UUNoZWNrQm94PC9jbGFzcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBzdGRzZXQ9IjEiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPm5hbWU8L25hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNzdHJpbmc+dXNlcl9yaW5nX2NvdW50X2NiPC9jc3RyaW5nPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBzdGRzZXQ9IjEiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPnRleHQ8L25hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN0cmluZz5Qcm9maWxlICZhbXA7dXNlciBiaW5hcmllczwvc3RyaW5nPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT50b29sVGlwPC9uYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJpbmc+UHJvZmlsZSB1c2VyIGxpYnJhcmllcyBhbmQgYXBwbGljYXRpb25zPC9zdHJpbmc+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3dpZGdldD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHdpZGdldD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbGFzcz5RTGF5b3V0V2lkZ2V0PC9jbGFzcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBzdGRzZXQ9IjEiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPm5hbWU8L25hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNzdHJpbmc+TGF5b3V0MTY8L2NzdHJpbmc+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGhib3g+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IHN0ZHNldD0iMSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPm1hcmdpbjwvbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG51bWJlcj4wPC9udW1iZXI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgc3Rkc2V0PSIxIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+c3BhY2luZzwvbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG51bWJlcj42PC9udW1iZXI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8d2lkZ2V0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xhc3M+UUxhYmVsPC9jbGFzcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IHN0ZHNldD0iMSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT5uYW1lPC9uYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNzdHJpbmc+VGV4dExhYmVsMV8yPC9jc3RyaW5nPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgc3Rkc2V0PSIxIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPnRleHQ8L25hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3RyaW5nPkMmYW1wO291bnQ8L3N0cmluZz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+YnVkZHk8L25hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y3N0cmluZz5ldmVudF9jb3VudF9lZGl0PC9jc3RyaW5nPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvd2lkZ2V0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3aWRnZXQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbGFzcz5RTGluZUVkaXQ8L2NsYXNzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgc3Rkc2V0PSIxIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPm5hbWU8L25hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y3N0cmluZz5ldmVudF9jb3VudF9lZGl0PC9jc3RyaW5nPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgc3Rkc2V0PSIxIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPnNpemVQb2xpY3k8L25hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2l6ZXBvbGljeT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aHNpemV0eXBlPjE8L2hzaXpldHlwZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dnNpemV0eXBlPjA8L3ZzaXpldHlwZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2l6ZXBvbGljeT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+dG9vbFRpcDwvbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJpbmc+U2V0IHRoZSBjb3VudCB2YWx1ZTwvc3RyaW5nPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvd2lkZ2V0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFjZXI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPm5hbWU8L25hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y3N0cmluZz5TcGFjZXIxM18yPC9jc3RyaW5nPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgc3Rkc2V0PSIxIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPm9yaWVudGF0aW9uPC9uYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVudW0+SG9yaXpvbnRhbDwvZW51bT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IHN0ZHNldD0iMSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT5zaXplVHlwZTwvbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbnVtPkV4cGFuZGluZzwvZW51bT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+c2l6ZUhpbnQ8L25hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2l6ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8d2lkdGg+MjA8L3dpZHRoPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoZWlnaHQ+MjA8L2hlaWdodD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2l6ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYWNlcj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaGJveD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC93aWRnZXQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3aWRnZXQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xhc3M+UUJ1dHRvbkdyb3VwPC9jbGFzcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBzdGRzZXQ9IjEiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPm5hbWU8L25hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNzdHJpbmc+dW5pdF9tYXNrX2dyb3VwPC9jc3RyaW5nPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBzdGRzZXQ9IjEiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPnNpemVQb2xpY3k8L25hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNpemVwb2xpY3k+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoc2l6ZXR5cGU+MTwvaHNpemV0eXBlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dnNpemV0eXBlPjU8L3ZzaXpldHlwZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NpemVwb2xpY3k+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IHN0ZHNldD0iMSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+dGl0bGU8L25hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN0cmluZz5Vbml0IG1hc2s8L3N0cmluZz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+dG9vbFRpcDwvbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3RyaW5nPlVuaXQgbWFzayBzZXR0aW5ncyBmb3IgdGhpcyBldmVudDwvc3RyaW5nPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxncmlkPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBzdGRzZXQ9IjEiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT5tYXJnaW48L25hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxudW1iZXI+MTE8L251bWJlcj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBzdGRzZXQ9IjEiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT5zcGFjaW5nPC9uYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bnVtYmVyPjY8L251bWJlcj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3aWRnZXQgcm93PSIwIiAgY29sdW1uPSIwIiA+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbGFzcz5RQ2hlY2tCb3g8L2NsYXNzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgc3Rkc2V0PSIxIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPm5hbWU8L25hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y3N0cmluZz5jaGVjazA8L2NzdHJpbmc+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBzdGRzZXQ9IjEiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+dGV4dDwvbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJpbmc+Y2hlY2swPC9zdHJpbmc+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC93aWRnZXQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHdpZGdldCByb3c9IjEiICBjb2x1bW49IjAiICByb3dzcGFuPSIyIiAgY29sc3Bhbj0iMiIgPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xhc3M+UUNoZWNrQm94PC9jbGFzcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IHN0ZHNldD0iMSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT5uYW1lPC9uYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNzdHJpbmc+Y2hlY2sxPC9jc3RyaW5nPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgc3Rkc2V0PSIxIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPnRleHQ8L25hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3RyaW5nPmNoZWNrMTwvc3RyaW5nPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvd2lkZ2V0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3aWRnZXQgcm93PSIzIiAgY29sdW1uPSIwIiAgcm93c3Bhbj0iMiIgIGNvbHNwYW49IjIiID4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsYXNzPlFDaGVja0JveDwvY2xhc3M+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBzdGRzZXQ9IjEiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+bmFtZTwvbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjc3RyaW5nPmNoZWNrMjwvY3N0cmluZz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IHN0ZHNldD0iMSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT50ZXh0PC9uYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN0cmluZz5jaGVjazI8L3N0cmluZz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3dpZGdldD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8d2lkZ2V0IHJvdz0iNSIgIGNvbHVtbj0iMCIgPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xhc3M+UUNoZWNrQm94PC9jbGFzcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IHN0ZHNldD0iMSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT5uYW1lPC9uYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNzdHJpbmc+Y2hlY2szPC9jc3RyaW5nPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgc3Rkc2V0PSIxIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPnRleHQ8L25hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3RyaW5nPmNoZWNrMzwvc3RyaW5nPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvd2lkZ2V0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3aWRnZXQgcm93PSI2IiAgY29sdW1uPSIwIiA+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbGFzcz5RQ2hlY2tCb3g8L2NsYXNzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgc3Rkc2V0PSIxIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPm5hbWU8L25hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y3N0cmluZz5jaGVjazQ8L2NzdHJpbmc+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBzdGRzZXQ9IjEiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+dGV4dDwvbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJpbmc+Y2hlY2s0PC9zdHJpbmc+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC93aWRnZXQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHdpZGdldCByb3c9IjciICBjb2x1bW49IjAiID4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsYXNzPlFDaGVja0JveDwvY2xhc3M+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBzdGRzZXQ9IjEiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+bmFtZTwvbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjc3RyaW5nPmNoZWNrNTwvY3N0cmluZz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IHN0ZHNldD0iMSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT50ZXh0PC9uYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN0cmluZz5jaGVjazU8L3N0cmluZz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3dpZGdldD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8d2lkZ2V0IHJvdz0iOCIgIGNvbHVtbj0iMCIgIHJvd3NwYW49IjIiICBjb2xzcGFuPSIyIiA+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbGFzcz5RQ2hlY2tCb3g8L2NsYXNzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgc3Rkc2V0PSIxIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPm5hbWU8L25hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y3N0cmluZz5jaGVjazY8L2NzdHJpbmc+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBzdGRzZXQ9IjEiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+dGV4dDwvbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJpbmc+Y2hlY2s2PC9zdHJpbmc+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC93aWRnZXQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHdpZGdldCByb3c9IjEwIiAgY29sdW1uPSIwIiA+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbGFzcz5RQ2hlY2tCb3g8L2NsYXNzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgc3Rkc2V0PSIxIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPm5hbWU8L25hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y3N0cmluZz5jaGVjazc8L2NzdHJpbmc+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBzdGRzZXQ9IjEiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+dGV4dDwvbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJpbmc+Y2hlY2s3PC9zdHJpbmc+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC93aWRnZXQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYWNlciByb3c9IjExIiAgY29sdW1uPSIxIiA+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPm5hbWU8L25hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y3N0cmluZz5TcGFjZXIxNDwvY3N0cmluZz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IHN0ZHNldD0iMSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT5vcmllbnRhdGlvbjwvbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbnVtPlZlcnRpY2FsPC9lbnVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgc3Rkc2V0PSIxIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPnNpemVUeXBlPC9uYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVudW0+RXhwYW5kaW5nPC9lbnVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT5zaXplSGludDwvbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzaXplPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3aWR0aD4yMDwvd2lkdGg+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGhlaWdodD4yMDwvaGVpZ2h0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zaXplPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3BhY2VyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3aWRnZXQgcm93PSI1IiAgY29sdW1uPSIxIiA+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbGFzcz5RQ2hlY2tCb3g8L2NsYXNzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgc3Rkc2V0PSIxIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPm5hbWU8L25hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y3N0cmluZz5jaGVjazExPC9jc3RyaW5nPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgc3Rkc2V0PSIxIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPnRleHQ8L25hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3RyaW5nPmNoZWNrMTE8L3N0cmluZz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3dpZGdldD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8d2lkZ2V0IHJvdz0iNyIgIGNvbHVtbj0iMSIgPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xhc3M+UUNoZWNrQm94PC9jbGFzcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IHN0ZHNldD0iMSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT5uYW1lPC9uYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNzdHJpbmc+Y2hlY2sxMzwvY3N0cmluZz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IHN0ZHNldD0iMSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT50ZXh0PC9uYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN0cmluZz5jaGVjazEzPC9zdHJpbmc+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC93aWRnZXQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHdpZGdldCByb3c9IjEwIiAgY29sdW1uPSIxIiA+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbGFzcz5RQ2hlY2tCb3g8L2NsYXNzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgc3Rkc2V0PSIxIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPm5hbWU8L25hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y3N0cmluZz5jaGVjazE1PC9jc3RyaW5nPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgc3Rkc2V0PSIxIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPnRleHQ8L25hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3RyaW5nPmNoZWNrMTU8L3N0cmluZz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3dpZGdldD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8d2lkZ2V0IHJvdz0iNCIgIGNvbHVtbj0iMSIgPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xhc3M+UUNoZWNrQm94PC9jbGFzcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IHN0ZHNldD0iMSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT5uYW1lPC9uYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNzdHJpbmc+Y2hlY2sxMDwvY3N0cmluZz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IHN0ZHNldD0iMSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT50ZXh0PC9uYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN0cmluZz5jaGVjazEwPC9zdHJpbmc+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC93aWRnZXQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHdpZGdldCByb3c9IjkiICBjb2x1bW49IjEiID4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsYXNzPlFDaGVja0JveDwvY2xhc3M+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBzdGRzZXQ9IjEiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+bmFtZTwvbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjc3RyaW5nPmNoZWNrMTQ8L2NzdHJpbmc+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBzdGRzZXQ9IjEiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+dGV4dDwvbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJpbmc+Y2hlY2sxNDwvc3RyaW5nPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvd2lkZ2V0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3aWRnZXQgcm93PSIyIiAgY29sdW1uPSIxIiA+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbGFzcz5RQ2hlY2tCb3g8L2NsYXNzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgc3Rkc2V0PSIxIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPm5hbWU8L25hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y3N0cmluZz5jaGVjazk8L2NzdHJpbmc+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBzdGRzZXQ9IjEiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+dGV4dDwvbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJpbmc+Y2hlY2s5PC9zdHJpbmc+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC93aWRnZXQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHdpZGdldCByb3c9IjAiICBjb2x1bW49IjEiID4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsYXNzPlFDaGVja0JveDwvY2xhc3M+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBzdGRzZXQ9IjEiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+bmFtZTwvbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjc3RyaW5nPmNoZWNrODwvY3N0cmluZz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IHN0ZHNldD0iMSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT50ZXh0PC9uYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN0cmluZz5jaGVjazg8L3N0cmluZz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3dpZGdldD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8d2lkZ2V0IHJvdz0iNiIgIGNvbHVtbj0iMSIgPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xhc3M+UUNoZWNrQm94PC9jbGFzcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IHN0ZHNldD0iMSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT5uYW1lPC9uYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNzdHJpbmc+Y2hlY2sxMjwvY3N0cmluZz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IHN0ZHNldD0iMSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT50ZXh0PC9uYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN0cmluZz5jaGVjazEyPC9zdHJpbmc+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC93aWRnZXQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2dyaWQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvd2lkZ2V0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdmJveD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvd2lkZ2V0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2hib3g+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC93aWRnZXQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHdpZGdldD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsYXNzPlFMYWJlbDwvY2xhc3M+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBzdGRzZXQ9IjEiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+bmFtZTwvbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjc3RyaW5nPmV2ZW50X2hlbHBfbGFiZWw8L2NzdHJpbmc+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBzdGRzZXQ9IjEiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+ZW5hYmxlZDwvbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxib29sPnRydWU8L2Jvb2w+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBzdGRzZXQ9IjEiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+c2l6ZVBvbGljeTwvbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzaXplcG9saWN5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoc2l6ZXR5cGU+MTwvaHNpemV0eXBlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2c2l6ZXR5cGU+MTwvdnNpemV0eXBlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zaXplcG9saWN5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgc3Rkc2V0PSIxIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPmZyYW1lU2hhcGU8L25hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW51bT5XaW5QYW5lbDwvZW51bT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IHN0ZHNldD0iMSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT5mcmFtZVNoYWRvdzwvbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbnVtPlN1bmtlbjwvZW51bT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IHN0ZHNldD0iMSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT50ZXh0PC9uYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN0cmluZz48L3N0cmluZz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3dpZGdldD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvdmJveD4KKyAgICAgICAgICAgICAgICAgICAgPC93aWRnZXQ+CisgICAgICAgICAgICAgICAgPC92Ym94PgorICAgICAgICAgICAgPC93aWRnZXQ+CisgICAgICAgICAgICA8d2lkZ2V0PgorICAgICAgICAgICAgICAgIDxjbGFzcz5RV2lkZ2V0PC9jbGFzcz4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgc3Rkc2V0PSIxIj4KKyAgICAgICAgICAgICAgICAgICAgPG5hbWU+bmFtZTwvbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgPGNzdHJpbmc+Y29uZmlndXJhdGlvbl9wYWdlPC9jc3RyaW5nPgorICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPGF0dHJpYnV0ZT4KKyAgICAgICAgICAgICAgICAgICAgPG5hbWU+dGl0bGU8L25hbWU+CisgICAgICAgICAgICAgICAgICAgIDxzdHJpbmc+JmFtcDtDb25maWd1cmF0aW9uPC9zdHJpbmc+CisgICAgICAgICAgICAgICAgPC9hdHRyaWJ1dGU+CisgICAgICAgICAgICAgICAgPHZib3g+CisgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBzdGRzZXQ9IjEiPgorICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+bWFyZ2luPC9uYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgPG51bWJlcj4xMTwvbnVtYmVyPgorICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgc3Rkc2V0PSIxIj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPnNwYWNpbmc8L25hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICA8bnVtYmVyPjY8L251bWJlcj4KKyAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgPHdpZGdldD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxjbGFzcz5RTGF5b3V0V2lkZ2V0PC9jbGFzcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBzdGRzZXQ9IjEiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPm5hbWU8L25hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNzdHJpbmc+TGF5b3V0MTE8L2NzdHJpbmc+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgPGhib3g+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IHN0ZHNldD0iMSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPm1hcmdpbjwvbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG51bWJlcj4wPC9udW1iZXI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgc3Rkc2V0PSIxIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+c3BhY2luZzwvbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG51bWJlcj42PC9udW1iZXI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8d2lkZ2V0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xhc3M+UUxhYmVsPC9jbGFzcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IHN0ZHNldD0iMSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT5uYW1lPC9uYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNzdHJpbmc+VGV4dExhYmVsMTwvY3N0cmluZz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IHN0ZHNldD0iMSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT50ZXh0PC9uYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN0cmluZz4mYW1wO0tlcm5lbCBpbWFnZSBmaWxlPC9zdHJpbmc+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPmJ1ZGR5PC9uYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNzdHJpbmc+a2VybmVsX2ZpbGVuYW1lX2VkaXQ8L2NzdHJpbmc+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC93aWRnZXQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHdpZGdldD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsYXNzPlFMaW5lRWRpdDwvY2xhc3M+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBzdGRzZXQ9IjEiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+bmFtZTwvbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjc3RyaW5nPmtlcm5lbF9maWxlbmFtZV9lZGl0PC9jc3RyaW5nPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT50b29sVGlwPC9uYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN0cmluZz5UaGUgdm1saW51eCBmaWxlIG9mIHRoZSBydW5uaW5nIGtlcm5lbDwvc3RyaW5nPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvd2lkZ2V0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3aWRnZXQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbGFzcz5RVG9vbEJ1dHRvbjwvY2xhc3M+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBzdGRzZXQ9IjEiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+bmFtZTwvbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjc3RyaW5nPmtlcm5lbF9maWxlbmFtZV90YjwvY3N0cmluZz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IHN0ZHNldD0iMSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT50ZXh0PC9uYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN0cmluZz4uLi48L3N0cmluZz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3dpZGdldD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8d2lkZ2V0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xhc3M+UUNoZWNrQm94PC9jbGFzcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IHN0ZHNldD0iMSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT5uYW1lPC9uYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNzdHJpbmc+bm9fdm1saW51eDwvY3N0cmluZz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IHN0ZHNldD0iMSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT50ZXh0PC9uYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN0cmluZz5ObyBrZXJuZWwgaW1hZ2U8L3N0cmluZz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+dG9vbFRpcDwvbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJpbmc+Tm8ga2VybmVsIGltYWdlIGF2YWlsYWJsZS4gRGlzYWJsZXMga2VybmVsIHByb2ZpbGluZy48L3N0cmluZz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3dpZGdldD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvaGJveD4KKyAgICAgICAgICAgICAgICAgICAgPC93aWRnZXQ+CisgICAgICAgICAgICAgICAgICAgIDx3aWRnZXQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8Y2xhc3M+UUxheW91dFdpZGdldDwvY2xhc3M+CisgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgc3Rkc2V0PSIxIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT5uYW1lPC9uYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjc3RyaW5nPkxheW91dDEyPC9jc3RyaW5nPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxoYm94PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBzdGRzZXQ9IjEiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT5tYXJnaW48L25hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxudW1iZXI+MDwvbnVtYmVyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IHN0ZHNldD0iMSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPnNwYWNpbmc8L25hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxudW1iZXI+NjwvbnVtYmVyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHdpZGdldD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsYXNzPlFMYXlvdXRXaWRnZXQ8L2NsYXNzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgc3Rkc2V0PSIxIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPm5hbWU8L25hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y3N0cmluZz5MYXlvdXQxMTwvY3N0cmluZz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdyaWQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgc3Rkc2V0PSIxIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT5tYXJnaW48L25hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG51bWJlcj4wPC9udW1iZXI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IHN0ZHNldD0iMSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+c3BhY2luZzwvbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bnVtYmVyPjY8L251bWJlcj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8d2lkZ2V0IHJvdz0iMCIgIGNvbHVtbj0iMSIgPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbGFzcz5RTGluZUVkaXQ8L2NsYXNzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBzdGRzZXQ9IjEiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT5uYW1lPC9uYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y3N0cmluZz5idWZmZXJfc2l6ZV9lZGl0PC9jc3RyaW5nPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT50b29sVGlwPC9uYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3RyaW5nPlRoZSBzaXplIG9mIHRoZSBwcm9maWxlcidzIGJ1ZmZlcnM8L3N0cmluZz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC93aWRnZXQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8d2lkZ2V0IHJvdz0iMSIgIGNvbHVtbj0iMSIgPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbGFzcz5RTGluZUVkaXQ8L2NsYXNzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBzdGRzZXQ9IjEiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT5uYW1lPC9uYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y3N0cmluZz5ub3RlX3RhYmxlX3NpemVfZWRpdDwvY3N0cmluZz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC93aWRnZXQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8d2lkZ2V0IHJvdz0iMyIgIGNvbHVtbj0iMCIgPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbGFzcz5RTGFiZWw8L2NsYXNzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBzdGRzZXQ9IjEiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT5uYW1lPC9uYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y3N0cmluZz5jcHVfYnVmZmVyX3NpemVfbGFiZWw8L2NzdHJpbmc+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgc3Rkc2V0PSIxIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+dGV4dDwvbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN0cmluZz5DcHUgYnVmZmVyIHNpemU8L3N0cmluZz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+YnVkZHk8L25hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjc3RyaW5nPmNwdV9idWZmZXJfc2l6ZV9lZGl0PC9jc3RyaW5nPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3dpZGdldD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3aWRnZXQgcm93PSIzIiAgY29sdW1uPSIxIiA+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsYXNzPlFMaW5lRWRpdDwvY2xhc3M+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IHN0ZHNldD0iMSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPm5hbWU8L25hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjc3RyaW5nPmNwdV9idWZmZXJfc2l6ZV9lZGl0PC9jc3RyaW5nPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3dpZGdldD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3aWRnZXQgcm93PSIwIiAgY29sdW1uPSIwIiA+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsYXNzPlFMYWJlbDwvY2xhc3M+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IHN0ZHNldD0iMSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPm5hbWU8L25hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjc3RyaW5nPmJ1ZmZlcl9zaXplX2xhYmVsPC9jc3RyaW5nPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IHN0ZHNldD0iMSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPnRleHQ8L25hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJpbmc+JmFtcDtCdWZmZXIgc2l6ZTwvc3RyaW5nPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT5idWRkeTwvbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNzdHJpbmc+YnVmZmVyX3NpemVfZWRpdDwvY3N0cmluZz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC93aWRnZXQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8d2lkZ2V0IHJvdz0iMSIgIGNvbHVtbj0iMCIgPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbGFzcz5RTGFiZWw8L2NsYXNzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBzdGRzZXQ9IjEiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT5uYW1lPC9uYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y3N0cmluZz5ub3RlX3RhYmxlX3NpemVfbGFiZWw8L2NzdHJpbmc+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgc3Rkc2V0PSIxIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+dGV4dDwvbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN0cmluZz5Ob3RlIFNpemU8L3N0cmluZz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+YnVkZHk8L25hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjc3RyaW5nPm5vdGVfdGFibGVfc2l6ZV9lZGl0PC9jc3RyaW5nPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3dpZGdldD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3aWRnZXQgcm93PSIyIiAgY29sdW1uPSIxIiA+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsYXNzPlFMaW5lRWRpdDwvY2xhc3M+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IHN0ZHNldD0iMSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPm5hbWU8L25hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjc3RyaW5nPmJ1ZmZlcl93YXRlcnNoZWRfZWRpdDwvY3N0cmluZz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC93aWRnZXQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8d2lkZ2V0IHJvdz0iMiIgIGNvbHVtbj0iMCIgPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbGFzcz5RTGFiZWw8L2NsYXNzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBzdGRzZXQ9IjEiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT5uYW1lPC9uYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y3N0cmluZz5idWZmZXJfd2F0ZXJzaGVkX2xhYmVsPC9jc3RyaW5nPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IHN0ZHNldD0iMSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPnRleHQ8L25hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJpbmc+QnVmZmVyIHdhdGVyc2hlZDwvc3RyaW5nPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT5idWRkeTwvbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNzdHJpbmc+YnVmZmVyX3dhdGVyc2hlZF9lZGl0PC9jc3RyaW5nPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3dpZGdldD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9ncmlkPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvd2lkZ2V0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFjZXI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPm5hbWU8L25hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y3N0cmluZz5TcGFjZXIxMTwvY3N0cmluZz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IHN0ZHNldD0iMSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT5vcmllbnRhdGlvbjwvbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbnVtPkhvcml6b250YWw8L2VudW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBzdGRzZXQ9IjEiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+c2l6ZVR5cGU8L25hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW51bT5FeHBhbmRpbmc8L2VudW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPnNpemVIaW50PC9uYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNpemU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHdpZHRoPjIwPC93aWR0aD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aGVpZ2h0PjIwPC9oZWlnaHQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NpemU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFjZXI+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2hib3g+CisgICAgICAgICAgICAgICAgICAgIDwvd2lkZ2V0PgorICAgICAgICAgICAgICAgICAgICA8d2lkZ2V0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGNsYXNzPlFMYXlvdXRXaWRnZXQ8L2NsYXNzPgorICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IHN0ZHNldD0iMSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+bmFtZTwvbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y3N0cmluZz5MYXlvdXQzNjwvY3N0cmluZz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgICA8Z3JpZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgc3Rkc2V0PSIxIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+bWFyZ2luPC9uYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bnVtYmVyPjA8L251bWJlcj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBzdGRzZXQ9IjEiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT5zcGFjaW5nPC9uYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bnVtYmVyPjY8L251bWJlcj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3aWRnZXQgcm93PSIwIiAgY29sdW1uPSIwIiA+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbGFzcz5RTGF5b3V0V2lkZ2V0PC9jbGFzcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IHN0ZHNldD0iMSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT5uYW1lPC9uYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNzdHJpbmc+TGF5b3V0MzQ8L2NzdHJpbmc+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2Ym94PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IHN0ZHNldD0iMSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+bWFyZ2luPC9uYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxudW1iZXI+MDwvbnVtYmVyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBzdGRzZXQ9IjEiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPnNwYWNpbmc8L25hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG51bWJlcj42PC9udW1iZXI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHdpZGdldD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xhc3M+UUNoZWNrQm94PC9jbGFzcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgc3Rkc2V0PSIxIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+bmFtZTwvbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNzdHJpbmc+dmVyYm9zZTwvY3N0cmluZz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBzdGRzZXQ9IjEiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT50ZXh0PC9uYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3RyaW5nPiZhbXA7VmVyYm9zZTwvc3RyaW5nPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT50b29sVGlwPC9uYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3RyaW5nPlZlcnkgdmVyYm9zZSBvdXRwdXQgaW4gbG9nIGZpbGU8L3N0cmluZz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC93aWRnZXQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8d2lkZ2V0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbGFzcz5RQ2hlY2tCb3g8L2NsYXNzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBzdGRzZXQ9IjEiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT5uYW1lPC9uYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y3N0cmluZz5zZXBhcmF0ZV9saWJfY2I8L2NzdHJpbmc+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgc3Rkc2V0PSIxIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+dGV4dDwvbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN0cmluZz5QZXItYXBwbGljYXRpb24gcHJvZmlsZXM8L3N0cmluZz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+dG9vbFRpcDwvbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN0cmluZz5TZXBhcmF0ZSBzYW1wbGVzIGZvciBlYWNoIHNoYXJlZCBsaWJyYXJ5LiBUaGlzIGluY3JlYXNlcyB0aGUgdGltZSBhbmQgc3BhY2Ugb3ZlcmhlYWQgb2YgT1Byb2ZpbGUuPC9zdHJpbmc+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvd2lkZ2V0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHdpZGdldD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xhc3M+UUNoZWNrQm94PC9jbGFzcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgc3Rkc2V0PSIxIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+bmFtZTwvbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNzdHJpbmc+c2VwYXJhdGVfa2VybmVsX2NiPC9jc3RyaW5nPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IHN0ZHNldD0iMSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPnRleHQ8L25hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJpbmc+UGVyLWFwcGxpY2F0aW9uIHByb2ZpbGVzLCBpbmNsdWRpbmcga2VybmVsPC9zdHJpbmc+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPnRvb2xUaXA8L25hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJpbmc+U2VwYXJhdGUgc2FtcGxlcyBmb3IgZWFjaCBzaGFyZWQgbGlicmFyeSBhbmQga2VybmVsIHNhbXBsZXMuIFRoaXMgaW5jcmVhc2VzIHRoZSB0aW1lIGFuZCBzcGFjZSBvdmVyaGVhZCBvZiBPUHJvZmlsZS48L3N0cmluZz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC93aWRnZXQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8d2lkZ2V0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbGFzcz5RQ2hlY2tCb3g8L2NsYXNzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBzdGRzZXQ9IjEiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT5uYW1lPC9uYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y3N0cmluZz5zZXBhcmF0ZV9jcHVfY2I8L2NzdHJpbmc+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgc3Rkc2V0PSIxIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+dGV4dDwvbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN0cmluZz5QZXItQ1BVIHByb2ZpbGVzPC9zdHJpbmc+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPnRvb2xUaXA8L25hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJpbmc+U2VwYXJhdGUgc2FtcGxlcyBmb3IgZWFjaCBzaGFyZWQgbGlicmFyeSBhbmQga2VybmVsIHNhbXBsZXMuIFRoaXMgaW5jcmVhc2VzIHRoZSB0aW1lIGFuZCBzcGFjZSBvdmVyaGVhZCBvZiBPUHJvZmlsZS48L3N0cmluZz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC93aWRnZXQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8d2lkZ2V0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbGFzcz5RQ2hlY2tCb3g8L2NsYXNzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBzdGRzZXQ9IjEiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT5uYW1lPC9uYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y3N0cmluZz5zZXBhcmF0ZV90aHJlYWRfY2I8L2NzdHJpbmc+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgc3Rkc2V0PSIxIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+dGV4dDwvbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN0cmluZz5QZXItdGhyZWFkL3Rhc2sgcHJvZmlsZXM8L3N0cmluZz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+dG9vbFRpcDwvbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN0cmluZz5TZXBhcmF0ZSBzYW1wbGVzIGZvciBlYWNoIHNoYXJlZCBsaWJyYXJ5IGFuZCBrZXJuZWwgc2FtcGxlcy4gVGhpcyBpbmNyZWFzZXMgdGhlIHRpbWUgYW5kIHNwYWNlIG92ZXJoZWFkIG9mIE9Qcm9maWxlLjwvc3RyaW5nPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3dpZGdldD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3aWRnZXQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsYXNzPlFMYXlvdXRXaWRnZXQ8L2NsYXNzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBzdGRzZXQ9IjEiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT5uYW1lPC9uYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y3N0cmluZz5MYXlvdXQzMzwvY3N0cmluZz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoYm94PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgc3Rkc2V0PSIxIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPm1hcmdpbjwvbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxudW1iZXI+MDwvbnVtYmVyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgc3Rkc2V0PSIxIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPnNwYWNpbmc8L25hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bnVtYmVyPjY8L251bWJlcj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHdpZGdldD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbGFzcz5RTGFiZWw8L2NsYXNzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IHN0ZHNldD0iMSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+bmFtZTwvbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y3N0cmluZz5jYWxsZ3JhcGhfZGVwdGhfbGFiZWw8L2NzdHJpbmc+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IHN0ZHNldD0iMSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+dGV4dDwvbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3RyaW5nPmNhbGxncmFwaCBkZXB0aCwgemVybyB0byBkaXNhYmxlPC9zdHJpbmc+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPmJ1ZGR5PC9uYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjc3RyaW5nPmNhbGxncmFwaF9kZXB0aF9lZGl0PC9jc3RyaW5nPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC93aWRnZXQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3aWRnZXQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xhc3M+UUxpbmVFZGl0PC9jbGFzcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBzdGRzZXQ9IjEiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPm5hbWU8L25hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNzdHJpbmc+Y2FsbGdyYXBoX2RlcHRoX2VkaXQ8L2NzdHJpbmc+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3dpZGdldD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2hib3g+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3dpZGdldD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC92Ym94PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvd2lkZ2V0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFjZXIgcm93PSIwIiAgY29sdW1uPSIxIiA+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPm5hbWU8L25hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y3N0cmluZz5TcGFjZXIxMjwvY3N0cmluZz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IHN0ZHNldD0iMSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT5vcmllbnRhdGlvbjwvbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbnVtPkhvcml6b250YWw8L2VudW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBzdGRzZXQ9IjEiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+c2l6ZVR5cGU8L25hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW51bT5FeHBhbmRpbmc8L2VudW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPnNpemVIaW50PC9uYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNpemU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHdpZHRoPjIwPC93aWR0aD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aGVpZ2h0PjIwPC9oZWlnaHQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NpemU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFjZXI+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2dyaWQ+CisgICAgICAgICAgICAgICAgICAgIDwvd2lkZ2V0PgorICAgICAgICAgICAgICAgICAgICA8c3BhY2VyPgorICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPm5hbWU8L25hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNzdHJpbmc+U3BhY2VyOTwvY3N0cmluZz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgc3Rkc2V0PSIxIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT5vcmllbnRhdGlvbjwvbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW51bT5WZXJ0aWNhbDwvZW51bT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgc3Rkc2V0PSIxIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT5zaXplVHlwZTwvbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW51bT5FeHBhbmRpbmc8L2VudW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPnNpemVIaW50PC9uYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzaXplPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8d2lkdGg+MjA8L3dpZHRoPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aGVpZ2h0PjIwPC9oZWlnaHQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zaXplPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgPC9zcGFjZXI+CisgICAgICAgICAgICAgICAgPC92Ym94PgorICAgICAgICAgICAgPC93aWRnZXQ+CisgICAgICAgIDwvd2lkZ2V0PgorICAgICAgICA8d2lkZ2V0PgorICAgICAgICAgICAgPGNsYXNzPlFMYWJlbDwvY2xhc3M+CisgICAgICAgICAgICA8cHJvcGVydHkgc3Rkc2V0PSIxIj4KKyAgICAgICAgICAgICAgICA8bmFtZT5uYW1lPC9uYW1lPgorICAgICAgICAgICAgICAgIDxjc3RyaW5nPmRhZW1vbl9sYWJlbDwvY3N0cmluZz4KKyAgICAgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgICAgICA8cHJvcGVydHkgc3Rkc2V0PSIxIj4KKyAgICAgICAgICAgICAgICA8bmFtZT5mcmFtZVNoYXBlPC9uYW1lPgorICAgICAgICAgICAgICAgIDxlbnVtPlBhbmVsPC9lbnVtPgorICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgIDxwcm9wZXJ0eSBzdGRzZXQ9IjEiPgorICAgICAgICAgICAgICAgIDxuYW1lPmZyYW1lU2hhZG93PC9uYW1lPgorICAgICAgICAgICAgICAgIDxlbnVtPlN1bmtlbjwvZW51bT4KKyAgICAgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgICAgICA8cHJvcGVydHkgc3Rkc2V0PSIxIj4KKyAgICAgICAgICAgICAgICA8bmFtZT50ZXh0PC9uYW1lPgorICAgICAgICAgICAgICAgIDxzdHJpbmc+PC9zdHJpbmc+CisgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgPHByb3BlcnR5PgorICAgICAgICAgICAgICAgIDxuYW1lPnRvb2xUaXA8L25hbWU+CisgICAgICAgICAgICAgICAgPHN0cmluZz5DdXJyZW50IGRhZW1vbiBzdGF0dXM8L3N0cmluZz4KKyAgICAgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgIDwvd2lkZ2V0PgorICAgICAgICA8d2lkZ2V0PgorICAgICAgICAgICAgPGNsYXNzPlFMYXlvdXRXaWRnZXQ8L2NsYXNzPgorICAgICAgICAgICAgPHByb3BlcnR5IHN0ZHNldD0iMSI+CisgICAgICAgICAgICAgICAgPG5hbWU+bmFtZTwvbmFtZT4KKyAgICAgICAgICAgICAgICA8Y3N0cmluZz5MYXlvdXQzNzwvY3N0cmluZz4KKyAgICAgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgICAgICA8aGJveD4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgc3Rkc2V0PSIxIj4KKyAgICAgICAgICAgICAgICAgICAgPG5hbWU+bWFyZ2luPC9uYW1lPgorICAgICAgICAgICAgICAgICAgICA8bnVtYmVyPjA8L251bWJlcj4KKyAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBzdGRzZXQ9IjEiPgorICAgICAgICAgICAgICAgICAgICA8bmFtZT5zcGFjaW5nPC9uYW1lPgorICAgICAgICAgICAgICAgICAgICA8bnVtYmVyPjY8L251bWJlcj4KKyAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDx3aWRnZXQ+CisgICAgICAgICAgICAgICAgICAgIDxjbGFzcz5RUHVzaEJ1dHRvbjwvY2xhc3M+CisgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBzdGRzZXQ9IjEiPgorICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+bmFtZTwvbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxjc3RyaW5nPnN0YXJ0X3Byb2ZpbGVyX2J0bjwvY3N0cmluZz4KKyAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IHN0ZHNldD0iMSI+CisgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT50ZXh0PC9uYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgPHN0cmluZz5TdCZhbXA7YXJ0PC9zdHJpbmc+CisgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPC93aWRnZXQ+CisgICAgICAgICAgICAgICAgPHdpZGdldD4KKyAgICAgICAgICAgICAgICAgICAgPGNsYXNzPlFQdXNoQnV0dG9uPC9jbGFzcz4KKyAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IHN0ZHNldD0iMSI+CisgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT5uYW1lPC9uYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgPGNzdHJpbmc+Zmx1c2hfcHJvZmlsZXJfZGF0YV9idG48L2NzdHJpbmc+CisgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBzdGRzZXQ9IjEiPgorICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+dGV4dDwvbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJpbmc+JmFtcDtGbHVzaDwvc3RyaW5nPgorICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDwvd2lkZ2V0PgorICAgICAgICAgICAgICAgIDx3aWRnZXQ+CisgICAgICAgICAgICAgICAgICAgIDxjbGFzcz5RUHVzaEJ1dHRvbjwvY2xhc3M+CisgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBzdGRzZXQ9IjEiPgorICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+bmFtZTwvbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxjc3RyaW5nPnN0b3BfcHJvZmlsZXJfYnRuPC9jc3RyaW5nPgorICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgc3Rkc2V0PSIxIj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPnRleHQ8L25hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICA8c3RyaW5nPlN0b3A8L3N0cmluZz4KKyAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8L3dpZGdldD4KKyAgICAgICAgICAgICAgICA8c3BhY2VyPgorICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT5uYW1lPC9uYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgPGNzdHJpbmc+U3BhY2VyNTwvY3N0cmluZz4KKyAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IHN0ZHNldD0iMSI+CisgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT5vcmllbnRhdGlvbjwvbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxlbnVtPkhvcml6b250YWw8L2VudW0+CisgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBzdGRzZXQ9IjEiPgorICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+c2l6ZVR5cGU8L25hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZW51bT5FeHBhbmRpbmc8L2VudW0+CisgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPnNpemVIaW50PC9uYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgPHNpemU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHdpZHRoPjIwPC93aWR0aD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aGVpZ2h0PjIwPC9oZWlnaHQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3NpemU+CisgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPC9zcGFjZXI+CisgICAgICAgICAgICAgICAgPHdpZGdldD4KKyAgICAgICAgICAgICAgICAgICAgPGNsYXNzPlFQdXNoQnV0dG9uPC9jbGFzcz4KKyAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IHN0ZHNldD0iMSI+CisgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT5uYW1lPC9uYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgPGNzdHJpbmc+cmVzZXRfc2FtcGxlX2ZpbGVzX2J0bjwvY3N0cmluZz4KKyAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IHN0ZHNldD0iMSI+CisgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT50ZXh0PC9uYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgPHN0cmluZz5SZXNldCBzYW1wbGUgZmlsZXM8L3N0cmluZz4KKyAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8L3dpZGdldD4KKyAgICAgICAgICAgICAgICA8d2lkZ2V0PgorICAgICAgICAgICAgICAgICAgICA8Y2xhc3M+UVB1c2hCdXR0b248L2NsYXNzPgorICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgc3Rkc2V0PSIxIj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPm5hbWU8L25hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICA8Y3N0cmluZz5xdWl0X2FuZF9zYXZlX2J0bjwvY3N0cmluZz4KKyAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IHN0ZHNldD0iMSI+CisgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT50ZXh0PC9uYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgPHN0cmluZz5TYXZlIGFuZCAmYW1wO3F1aXQ8L3N0cmluZz4KKyAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IHN0ZHNldD0iMSI+CisgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT5hdXRvRGVmYXVsdDwvbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxib29sPnRydWU8L2Jvb2w+CisgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPC93aWRnZXQ+CisgICAgICAgICAgICA8L2hib3g+CisgICAgICAgIDwvd2lkZ2V0PgorICAgIDwvdmJveD4KKzwvd2lkZ2V0PgorPGNvbm5lY3Rpb25zPgorICAgIDxjb25uZWN0aW9uPgorICAgICAgICA8c2VuZGVyPnN0YXJ0X3Byb2ZpbGVyX2J0bjwvc2VuZGVyPgorICAgICAgICA8c2lnbmFsPmNsaWNrZWQoKTwvc2lnbmFsPgorICAgICAgICA8cmVjZWl2ZXI+b3Byb2Zfc3RhcnRfYmFzZTwvcmVjZWl2ZXI+CisgICAgICAgIDxzbG90Pm9uX3N0YXJ0X3Byb2ZpbGVyKCk8L3Nsb3Q+CisgICAgPC9jb25uZWN0aW9uPgorICAgIDxjb25uZWN0aW9uPgorICAgICAgICA8c2VuZGVyPnN0b3BfcHJvZmlsZXJfYnRuPC9zZW5kZXI+CisgICAgICAgIDxzaWduYWw+Y2xpY2tlZCgpPC9zaWduYWw+CisgICAgICAgIDxyZWNlaXZlcj5vcHJvZl9zdGFydF9iYXNlPC9yZWNlaXZlcj4KKyAgICAgICAgPHNsb3Q+b25fc3RvcF9wcm9maWxlcigpPC9zbG90PgorICAgIDwvY29ubmVjdGlvbj4KKyAgICA8Y29ubmVjdGlvbj4KKyAgICAgICAgPHNlbmRlcj5mbHVzaF9wcm9maWxlcl9kYXRhX2J0bjwvc2VuZGVyPgorICAgICAgICA8c2lnbmFsPmNsaWNrZWQoKTwvc2lnbmFsPgorICAgICAgICA8cmVjZWl2ZXI+b3Byb2Zfc3RhcnRfYmFzZTwvcmVjZWl2ZXI+CisgICAgICAgIDxzbG90Pm9uX2ZsdXNoX3Byb2ZpbGVyX2RhdGEoKTwvc2xvdD4KKyAgICA8L2Nvbm5lY3Rpb24+CisgICAgPGNvbm5lY3Rpb24+CisgICAgICAgIDxzZW5kZXI+cXVpdF9hbmRfc2F2ZV9idG48L3NlbmRlcj4KKyAgICAgICAgPHNpZ25hbD5jbGlja2VkKCk8L3NpZ25hbD4KKyAgICAgICAgPHJlY2VpdmVyPm9wcm9mX3N0YXJ0X2Jhc2U8L3JlY2VpdmVyPgorICAgICAgICA8c2xvdD5hY2NlcHQoKTwvc2xvdD4KKyAgICA8L2Nvbm5lY3Rpb24+CisgICAgPGNvbm5lY3Rpb24+CisgICAgICAgIDxzZW5kZXI+a2VybmVsX2ZpbGVuYW1lX3RiPC9zZW5kZXI+CisgICAgICAgIDxzaWduYWw+Y2xpY2tlZCgpPC9zaWduYWw+CisgICAgICAgIDxyZWNlaXZlcj5vcHJvZl9zdGFydF9iYXNlPC9yZWNlaXZlcj4KKyAgICAgICAgPHNsb3Q+Y2hvb3NlX2tlcm5lbF9maWxlbmFtZSgpPC9zbG90PgorICAgIDwvY29ubmVjdGlvbj4KKyAgICA8Y29ubmVjdGlvbj4KKyAgICAgICAgPHNlbmRlcj5ub192bWxpbnV4PC9zZW5kZXI+CisgICAgICAgIDxzaWduYWw+dG9nZ2xlZChib29sKTwvc2lnbmFsPgorICAgICAgICA8cmVjZWl2ZXI+a2VybmVsX2ZpbGVuYW1lX3RiPC9yZWNlaXZlcj4KKyAgICAgICAgPHNsb3Q+c2V0RGlzYWJsZWQoYm9vbCk8L3Nsb3Q+CisgICAgPC9jb25uZWN0aW9uPgorICAgIDxjb25uZWN0aW9uPgorICAgICAgICA8c2VuZGVyPm5vX3ZtbGludXg8L3NlbmRlcj4KKyAgICAgICAgPHNpZ25hbD50b2dnbGVkKGJvb2wpPC9zaWduYWw+CisgICAgICAgIDxyZWNlaXZlcj5rZXJuZWxfZmlsZW5hbWVfZWRpdDwvcmVjZWl2ZXI+CisgICAgICAgIDxzbG90PnNldERpc2FibGVkKGJvb2wpPC9zbG90PgorICAgIDwvY29ubmVjdGlvbj4KKyAgICA8Y29ubmVjdGlvbj4KKyAgICAgICAgPHNlbmRlcj5ub192bWxpbnV4PC9zZW5kZXI+CisgICAgICAgIDxzaWduYWw+dG9nZ2xlZChib29sKTwvc2lnbmFsPgorICAgICAgICA8cmVjZWl2ZXI+VGV4dExhYmVsMTwvcmVjZWl2ZXI+CisgICAgICAgIDxzbG90PnNldERpc2FibGVkKGJvb2wpPC9zbG90PgorICAgIDwvY29ubmVjdGlvbj4KKyAgICA8Y29ubmVjdGlvbj4KKyAgICAgICAgPHNlbmRlcj5zZXBhcmF0ZV9rZXJuZWxfY2I8L3NlbmRlcj4KKyAgICAgICAgPHNpZ25hbD5zdGF0ZUNoYW5nZWQoaW50KTwvc2lnbmFsPgorICAgICAgICA8cmVjZWl2ZXI+b3Byb2Zfc3RhcnRfYmFzZTwvcmVjZWl2ZXI+CisgICAgICAgIDxzbG90Pm9uX3NlcGFyYXRlX2tlcm5lbF9jYl9jaGFuZ2VkKGludCk8L3Nsb3Q+CisgICAgPC9jb25uZWN0aW9uPgorICAgIDxjb25uZWN0aW9uPgorICAgICAgICA8c2VuZGVyPnJlc2V0X3NhbXBsZV9maWxlc19idG48L3NlbmRlcj4KKyAgICAgICAgPHNpZ25hbD5jbGlja2VkKCk8L3NpZ25hbD4KKyAgICAgICAgPHJlY2VpdmVyPm9wcm9mX3N0YXJ0X2Jhc2U8L3JlY2VpdmVyPgorICAgICAgICA8c2xvdD5vbl9yZXNldF9zYW1wbGVfZmlsZXMoKTwvc2xvdD4KKyAgICA8L2Nvbm5lY3Rpb24+CisgICAgPGNvbm5lY3Rpb24+CisgICAgICAgIDxzZW5kZXI+ZXZlbnRzX2xpc3Q8L3NlbmRlcj4KKyAgICAgICAgPHNpZ25hbD5zZWxlY3Rpb25DaGFuZ2VkKCk8L3NpZ25hbD4KKyAgICAgICAgPHJlY2VpdmVyPm9wcm9mX3N0YXJ0X2Jhc2U8L3JlY2VpdmVyPgorICAgICAgICA8c2xvdD5ldmVudF9zZWxlY3RlZCgpPC9zbG90PgorICAgIDwvY29ubmVjdGlvbj4KKyAgICA8Y29ubmVjdGlvbj4KKyAgICAgICAgPHNlbmRlcj5ldmVudHNfbGlzdDwvc2VuZGVyPgorICAgICAgICA8c2lnbmFsPmN1cnJlbnRDaGFuZ2VkKFFMaXN0Vmlld0l0ZW0qKTwvc2lnbmFsPgorICAgICAgICA8cmVjZWl2ZXI+b3Byb2Zfc3RhcnRfYmFzZTwvcmVjZWl2ZXI+CisgICAgICAgIDxzbG90PmV2ZW50X292ZXIoUUxpc3RWaWV3SXRlbSAqKTwvc2xvdD4KKyAgICA8L2Nvbm5lY3Rpb24+CisgICAgPGNvbm5lY3Rpb24+CisgICAgICAgIDxzZW5kZXI+ZXZlbnRzX2xpc3Q8L3NlbmRlcj4KKyAgICAgICAgPHNpZ25hbD5vbkl0ZW0oUUxpc3RWaWV3SXRlbSopPC9zaWduYWw+CisgICAgICAgIDxyZWNlaXZlcj5vcHJvZl9zdGFydF9iYXNlPC9yZWNlaXZlcj4KKyAgICAgICAgPHNsb3Q+ZXZlbnRfb3ZlcihRTGlzdFZpZXdJdGVtICopPC9zbG90PgorICAgIDwvY29ubmVjdGlvbj4KKyAgICA8c2xvdCBhY2Nlc3M9InByb3RlY3RlZCI+Y2hvb3NlX2tlcm5lbF9maWxlbmFtZSgpPC9zbG90PgorICAgIDxzbG90IGFjY2Vzcz0icHJvdGVjdGVkIj5ldmVudF9vdmVyKFFMaXN0Vmlld0l0ZW0gKik8L3Nsb3Q+CisgICAgPHNsb3QgYWNjZXNzPSJwcm90ZWN0ZWQiPmV2ZW50X3NlbGVjdGVkKCk8L3Nsb3Q+CisgICAgPHNsb3QgYWNjZXNzPSJwcm90ZWN0ZWQiPm9uX3Jlc2V0X3NhbXBsZV9maWxlcygpPC9zbG90PgorICAgIDxzbG90IGFjY2Vzcz0icHJvdGVjdGVkIj5vbl9mbHVzaF9wcm9maWxlcl9kYXRhKCk8L3Nsb3Q+CisgICAgPHNsb3QgYWNjZXNzPSJwcm90ZWN0ZWQiPm9uX3NlcGFyYXRlX2tlcm5lbF9jYl9jaGFuZ2VkKGludCk8L3Nsb3Q+CisgICAgPHNsb3QgYWNjZXNzPSJwcm90ZWN0ZWQiPm9uX3N0YXJ0X3Byb2ZpbGVyKCk8L3Nsb3Q+CisgICAgPHNsb3QgYWNjZXNzPSJwcm90ZWN0ZWQiPm9uX3N0b3BfcHJvZmlsZXIoKTwvc2xvdD4KKzwvY29ubmVjdGlvbnM+Cis8dGFic3RvcHM+CisgICAgPHRhYnN0b3A+c2V0dXBfY29uZmlnX3RhYjwvdGFic3RvcD4KKyAgICA8dGFic3RvcD5ldmVudHNfbGlzdDwvdGFic3RvcD4KKyAgICA8dGFic3RvcD5vc19yaW5nX2NvdW50X2NiPC90YWJzdG9wPgorICAgIDx0YWJzdG9wPnVzZXJfcmluZ19jb3VudF9jYjwvdGFic3RvcD4KKyAgICA8dGFic3RvcD5ldmVudF9jb3VudF9lZGl0PC90YWJzdG9wPgorICAgIDx0YWJzdG9wPmNoZWNrMDwvdGFic3RvcD4KKyAgICA8dGFic3RvcD5jaGVjazE8L3RhYnN0b3A+CisgICAgPHRhYnN0b3A+Y2hlY2syPC90YWJzdG9wPgorICAgIDx0YWJzdG9wPmNoZWNrMzwvdGFic3RvcD4KKyAgICA8dGFic3RvcD5jaGVjazQ8L3RhYnN0b3A+CisgICAgPHRhYnN0b3A+Y2hlY2s1PC90YWJzdG9wPgorICAgIDx0YWJzdG9wPmNoZWNrNjwvdGFic3RvcD4KKyAgICA8dGFic3RvcD5jaGVjazc8L3RhYnN0b3A+CisgICAgPHRhYnN0b3A+Y2hlY2s4PC90YWJzdG9wPgorICAgIDx0YWJzdG9wPmNoZWNrOTwvdGFic3RvcD4KKyAgICA8dGFic3RvcD5jaGVjazEwPC90YWJzdG9wPgorICAgIDx0YWJzdG9wPmNoZWNrMTE8L3RhYnN0b3A+CisgICAgPHRhYnN0b3A+Y2hlY2sxMjwvdGFic3RvcD4KKyAgICA8dGFic3RvcD5jaGVjazEzPC90YWJzdG9wPgorICAgIDx0YWJzdG9wPmNoZWNrMTQ8L3RhYnN0b3A+CisgICAgPHRhYnN0b3A+Y2hlY2sxNTwvdGFic3RvcD4KKyAgICA8dGFic3RvcD5zdGFydF9wcm9maWxlcl9idG48L3RhYnN0b3A+CisgICAgPHRhYnN0b3A+Zmx1c2hfcHJvZmlsZXJfZGF0YV9idG48L3RhYnN0b3A+CisgICAgPHRhYnN0b3A+c3RvcF9wcm9maWxlcl9idG48L3RhYnN0b3A+CisgICAgPHRhYnN0b3A+cmVzZXRfc2FtcGxlX2ZpbGVzX2J0bjwvdGFic3RvcD4KKyAgICA8dGFic3RvcD5xdWl0X2FuZF9zYXZlX2J0bjwvdGFic3RvcD4KKyAgICA8dGFic3RvcD5rZXJuZWxfZmlsZW5hbWVfZWRpdDwvdGFic3RvcD4KKyAgICA8dGFic3RvcD5ub192bWxpbnV4PC90YWJzdG9wPgorICAgIDx0YWJzdG9wPmJ1ZmZlcl9zaXplX2VkaXQ8L3RhYnN0b3A+CisgICAgPHRhYnN0b3A+bm90ZV90YWJsZV9zaXplX2VkaXQ8L3RhYnN0b3A+CisgICAgPHRhYnN0b3A+YnVmZmVyX3dhdGVyc2hlZF9lZGl0PC90YWJzdG9wPgorICAgIDx0YWJzdG9wPnZlcmJvc2U8L3RhYnN0b3A+CisgICAgPHRhYnN0b3A+c2VwYXJhdGVfbGliX2NiPC90YWJzdG9wPgorICAgIDx0YWJzdG9wPnNlcGFyYXRlX2tlcm5lbF9jYjwvdGFic3RvcD4KKyAgICA8dGFic3RvcD5zZXBhcmF0ZV9jcHVfY2I8L3RhYnN0b3A+CisgICAgPHRhYnN0b3A+c2VwYXJhdGVfdGhyZWFkX2NiPC90YWJzdG9wPgorICAgIDx0YWJzdG9wPmNhbGxncmFwaF9kZXB0aF9lZGl0PC90YWJzdG9wPgorPC90YWJzdG9wcz4KKzwvVUk+CmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9pbmNsdWRlL3NzdHJlYW0gYi9vcHJvZmlsZS0wLjkuNy9pbmNsdWRlL3NzdHJlYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDUzOTNiMQotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2luY2x1ZGUvc3N0cmVhbQpAQCAtMCwwICsxLDM0MyBAQAorLyogVGhpcyBpcyBwYXJ0IG9mIGxpYmlvL2lvc3RyZWFtLCBwcm92aWRpbmcgLSotIEMrKyAtKi0gaW5wdXQvb3V0cHV0LgorQ29weXJpZ2h0IChDKSAyMDAwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElPIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCit0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCithbnkgbGF0ZXIgdmVyc2lvbi4KKworVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCitidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2Fsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLgorCitBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCBpZiB5b3UgbGluayB0aGlzIGxpYnJhcnkgd2l0aCBmaWxlcworY29tcGlsZWQgd2l0aCBhIEdOVSBjb21waWxlciB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMgZG9lcyBub3QgY2F1c2UKK3RoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KK1RoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIgaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkKK3RoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICovCisKKy8qIFdyaXR0ZW4gYnkgTWFnbnVzIEZyb21yZWlkZSAobWFnZnJAbHlzYXRvci5saXUuc2UpLiAqLworLyogc2Vla29mZiBhbmQgaWRlYXMgZm9yIG92ZXJmbG93IGlzIGxhcmdlbHkgYm9ycm93ZWQgZnJvbSBsaWJzdGRjKystdjMgKi8KKworI2lmbmRlZiBfX1NTVFJFQU1fXworI2RlZmluZSBfX1NTVFJFQU1fXworCisjaW5jbHVkZSA8aW9zdHJlYW0uaD4KKyNpbmNsdWRlIDxzdHJlYW1idWYuaD4KKyNpbmNsdWRlIDxzdHJpbmc+CisKK25hbWVzcGFjZSBzdGQKK3sKKyAgY2xhc3Mgc3RyaW5nYnVmIDogcHVibGljIHN0cmVhbWJ1ZgorICB7CisgIHB1YmxpYzoKKyAgICB0eXBlZGVmIGNoYXIJY2hhcl90eXBlOworICAgIHR5cGVkZWYgaW50CQlpbnRfdHlwZTsKKyAgICB0eXBlZGVmIHN0cmVhbXBvcwlwb3NfdHlwZTsKKyAgICB0eXBlZGVmIHN0cmVhbW9mZglvZmZfdHlwZTsKKworICAgIGV4cGxpY2l0CisgICAgc3RyaW5nYnVmKGludCB3aGljaD1pb3M6OmlufGlvczo6b3V0KQorICAgICAgOiBzdHJlYW1idWYoKSwgbW9kZShzdGF0aWNfY2FzdDxpb3M6Om9wZW5fbW9kZT4od2hpY2gpKSwKKwlzdHJlYW0oTlVMTCksIHN0cmVhbV9sZW4oMCkKKyAgICB7CisgICAgICBzdHJpbmdidWZfaW5pdCgpOworICAgIH0KKworICAgIGV4cGxpY2l0CisgICAgc3RyaW5nYnVmKGNvbnN0IHN0cmluZyAmc3RyLCBpbnQgd2hpY2g9aW9zOjppbnxpb3M6Om91dCkKKyAgICAgIDogc3RyZWFtYnVmKCksIG1vZGUoc3RhdGljX2Nhc3Q8aW9zOjpvcGVuX21vZGU+KHdoaWNoKSksCisJc3RyZWFtKE5VTEwpLCBzdHJlYW1fbGVuKDApCisgICAgeworICAgICAgaWYgKG1vZGUgJiAoaW9zOjppbnxpb3M6Om91dCkpCisJeworCSAgc3RyZWFtX2xlbiA9IHN0ci5zaXplKCk7CisJICBzdHJlYW0gPSBuZXcgY2hhcl90eXBlW3N0cmVhbV9sZW5dOworCSAgc3RyLmNvcHkoc3RyZWFtLCBzdHJlYW1fbGVuKTsKKwl9CisgICAgICBzdHJpbmdidWZfaW5pdCgpOworICAgIH0KKworICAgIHZpcnR1YWwKKyAgICB+c3RyaW5nYnVmKCkKKyAgICB7CisgICAgICBkZWxldGVbXSBzdHJlYW07CisgICAgfQorCisgICAgc3RyaW5nCisgICAgc3RyKCkgY29uc3QKKyAgICB7CisgICAgICBpZiAocGJhc2UoKSAhPSAwKQorCXJldHVybiBzdHJpbmcoc3RyZWFtLCBwcHRyKCktcGJhc2UoKSk7CisgICAgICBlbHNlCisJcmV0dXJuIHN0cmluZygpOworICAgIH0KKworICAgIHZvaWQKKyAgICBzdHIoY29uc3Qgc3RyaW5nJiBzdHIpCisgICAgeworICAgICAgZGVsZXRlW10gc3RyZWFtOworICAgICAgc3RyZWFtX2xlbiA9IHN0ci5zaXplKCk7CisgICAgICBzdHJlYW0gPSBuZXcgY2hhcl90eXBlW3N0cmVhbV9sZW5dOworICAgICAgc3RyLmNvcHkoc3RyZWFtLCBzdHJlYW1fbGVuKTsKKyAgICAgIHN0cmluZ2J1Zl9pbml0KCk7CisgICAgfQorCisgIHByb3RlY3RlZDoKKyAgICAvLyBUaGUgYnVmZmVyIGlzIGFscmVhZHkgaW4gZ3B0ciwgc28gaWYgaXQgZW5kcyB0aGVuIGl0IGlzIG91dCBvZiBkYXRhLgorICAgIHZpcnR1YWwgaW50CisgICAgdW5kZXJmbG93KCkKKyAgICB7CisgICAgICByZXR1cm4gRU9GOworICAgIH0KKworICAgIHZpcnR1YWwgaW50CisgICAgb3ZlcmZsb3coaW50IGMgPSBFT0YpCisgICAgeworICAgICAgaW50IHJlczsKKyAgICAgIGlmIChtb2RlICYgaW9zOjpvdXQpCisJeworCSAgaWYgKGMgIT0gRU9GKQorCSAgICB7CisJICAgICAgc3RyZWFtc2l6ZSBvbGRfc3RyZWFtX2xlbiA9IHN0cmVhbV9sZW47CisJICAgICAgc3RyZWFtX2xlbiArPSAxOworCSAgICAgIGNoYXJfdHlwZSogbmV3X3N0cmVhbSA9IG5ldyBjaGFyX3R5cGVbc3RyZWFtX2xlbl07CisJICAgICAgbWVtY3B5KG5ld19zdHJlYW0sIHN0cmVhbSwgb2xkX3N0cmVhbV9sZW4pOworCSAgICAgIGRlbGV0ZVtdIHN0cmVhbTsKKwkgICAgICBzdHJlYW0gPSBuZXdfc3RyZWFtOworCSAgICAgIHN0cmluZ2J1Zl9zeW5jKGdwdHIoKS1lYmFjaygpLCBwcHRyKCktcGJhc2UoKSk7CisJICAgICAgc3B1dGMoYyk7CisJICAgICAgcmVzID0gYzsKKwkgICAgfQorCSAgZWxzZQorCSAgICByZXMgPSBFT0Y7CisJfQorICAgICAgZWxzZQorCXJlcyA9IDA7CisgICAgICByZXR1cm4gcmVzOworICAgIH0KKworICAgIHZpcnR1YWwgc3RyZWFtYnVmKgorICAgIHNldGJ1ZihjaGFyX3R5cGUqIHMsIHN0cmVhbXNpemUgbikKKyAgICB7CisgICAgICBpZiAobiAhPSAwKQorCXsKKwkgIGRlbGV0ZVtdIHN0cmVhbTsKKwkgIHN0cmVhbSA9IG5ldyBjaGFyX3R5cGVbbl07CisJICBtZW1jcHkoc3RyZWFtLCBzLCBuKTsKKwkgIHN0cmVhbV9sZW4gPSBuOworCSAgc3RyaW5nYnVmX3N5bmMoMCwgMCk7CisJfQorICAgICAgcmV0dXJuIHRoaXM7CisgICAgfQorCisgICAgdmlydHVhbCBwb3NfdHlwZQorICAgIHNlZWtvZmYob2ZmX3R5cGUgb2ZmLCBpb3M6OnNlZWtfZGlyIHdheSwgaW50IHdoaWNoID0gaW9zOjppbiB8IGlvczo6b3V0KQorICAgIHsKKyAgICAgIHBvc190eXBlIHJldCA9ICBwb3NfdHlwZShvZmZfdHlwZSgtMSkpOworICAgICAgYm9vbCB0ZXN0aW4gPSB3aGljaCAmIGlvczo6aW4gJiYgbW9kZSAmIGlvczo6aW47CisgICAgICBib29sIHRlc3RvdXQgPSB3aGljaCAmIGlvczo6b3V0ICYmIG1vZGUgJiBpb3M6Om91dDsKKyAgICAgIGJvb2wgdGVzdGJvdGggPSB0ZXN0aW4gJiYgdGVzdG91dCAmJiB3YXkgIT0gaW9zOjpjdXI7CisKKyAgICAgIGlmIChzdHJlYW1fbGVuICYmICgodGVzdGluICE9IHRlc3RvdXQpIHx8IHRlc3Rib3RoKSkKKwl7CisJICBjaGFyX3R5cGUqIGJlZyA9IHN0cmVhbTsKKwkgIGNoYXJfdHlwZSogY3VyaSA9IE5VTEw7CisJICBjaGFyX3R5cGUqIGN1cm8gPSBOVUxMOworCSAgY2hhcl90eXBlKiBlbmRpID0gTlVMTDsKKwkgIGNoYXJfdHlwZSogZW5kbyA9IE5VTEw7CisKKwkgIGlmICh0ZXN0aW4pCisJICAgIHsKKwkgICAgICBjdXJpID0gZ3B0cigpOworCSAgICAgIGVuZGkgPSBlZ3B0cigpOworCSAgICB9CisJICBpZiAodGVzdG91dCkKKwkgICAgeworCSAgICAgIGN1cm8gPSBwcHRyKCk7CisJICAgICAgZW5kbyA9IGVwcHRyKCk7CisJICAgIH0KKworCSAgb2ZmX3R5cGUgbmV3b2ZmaSA9IDA7CisJICBvZmZfdHlwZSBuZXdvZmZvID0gMDsKKwkgIGlmICh3YXkgPT0gaW9zOjpiZWcpCisJICAgIHsKKwkgICAgICBuZXdvZmZpID0gYmVnIC0gY3VyaTsKKwkgICAgICBuZXdvZmZvID0gYmVnIC0gY3VybzsKKwkgICAgfQorCSAgZWxzZSBpZiAod2F5ID09IGlvczo6ZW5kKQorCSAgICB7CisJICAgICAgbmV3b2ZmaSA9IGVuZGkgLSBjdXJpOworCSAgICAgIG5ld29mZm8gPSBlbmRvIC0gY3VybzsKKwkgICAgfQorCisJICBpZiAodGVzdGluICYmIG5ld29mZmkgKyBvZmYgKyBjdXJpIC0gYmVnID49IDAgJiYKKwkgICAgICBlbmRpIC0gYmVnID49IG5ld29mZmkgKyBvZmYgKyBjdXJpIC0gYmVnKQorCSAgICB7CisJICAgICAgZ2J1bXAobmV3b2ZmaSArIG9mZik7CisJICAgICAgcmV0ID0gcG9zX3R5cGUobmV3b2ZmaSArIG9mZiArIGN1cmkpOworCSAgICB9CisJICBpZiAodGVzdG91dCAmJiBuZXdvZmZvICsgb2ZmICsgY3VybyAtIGJlZyA+PSAwICYmCisJICAgICAgZW5kbyAtIGJlZyA+PSBuZXdvZmZvICsgb2ZmICsgY3VybyAtIGJlZykKKwkgICAgeworCSAgICAgIHBidW1wKG5ld29mZm8gKyBvZmYpOworCSAgICAgIHJldCA9IHBvc190eXBlKG5ld29mZm8gKyBvZmYgKyBjdXJvKTsKKwkgICAgfQorCX0KKyAgICAgIHJldHVybiByZXQ7CisgICAgfQorCisgICAgdmlydHVhbCBwb3NfdHlwZQorICAgIHNlZWtwb3MocG9zX3R5cGUgc3AsIGludCB3aGljaCA9IGlvczo6aW4gfCBpb3M6Om91dCkKKyAgICB7CisgICAgICBwb3NfdHlwZSByZXQgPSBzZWVrb2ZmKHNwLCBpb3M6OmJlZywgd2hpY2gpOworICAgICAgcmV0dXJuIHJldDsKKyAgICB9CisKKyAgcHJpdmF0ZToKKyAgICB2b2lkCisgICAgc3RyaW5nYnVmX3N5bmMoc3RyZWFtc2l6ZSBpLCBzdHJlYW1zaXplIG8pCisgICAgeworICAgICAgaWYgKG1vZGUgJiBpb3M6OmluKQorCXNldGcoc3RyZWFtLCBzdHJlYW0gKyBpLCBzdHJlYW0gKyBzdHJlYW1fbGVuKTsKKyAgICAgIGlmIChtb2RlICYgaW9zOjpvdXQpCisJeworCSAgc2V0cChzdHJlYW0sIHN0cmVhbSArIHN0cmVhbV9sZW4pOworCSAgcGJ1bXAobyk7CisJfQorICAgIH0KKyAgICB2b2lkCisgICAgc3RyaW5nYnVmX2luaXQoKQorICAgIHsKKyAgICAgIGlmIChtb2RlICYgaW9zOjphdGUpCisJc3RyaW5nYnVmX3N5bmMoMCwgc3RyZWFtX2xlbik7CisgICAgICBlbHNlCisJc3RyaW5nYnVmX3N5bmMoMCwgMCk7CisgICAgfQorCisgIHByaXZhdGU6CisgICAgaW9zOjpvcGVuX21vZGUJbW9kZTsKKyAgICBjaGFyX3R5cGUqCQlzdHJlYW07CisgICAgc3RyZWFtc2l6ZQkJc3RyZWFtX2xlbjsKKyAgfTsKKwwKKyAgY2xhc3MgaXN0cmluZ3N0cmVhbSA6IHB1YmxpYyBpc3RyZWFtIHsKKyAgcHVibGljOgorICAgIHR5cGVkZWYgY2hhcgljaGFyX3R5cGU7CisgICAgdHlwZWRlZiBpbnQJCWludF90eXBlOworICAgIHR5cGVkZWYgc3RyZWFtcG9zCXBvc190eXBlOworICAgIHR5cGVkZWYgc3RyZWFtb2ZmCW9mZl90eXBlOworCisgICAgZXhwbGljaXQKKyAgICBpc3RyaW5nc3RyZWFtKGludCB3aGljaD1pb3M6OmluKQorICAgICAgOiBpc3RyZWFtKCZzYiksIHNiKHdoaWNoIHwgaW9zOjppbikKKyAgICB7IH0KKworICAgIGV4cGxpY2l0CisgICAgaXN0cmluZ3N0cmVhbShjb25zdCBzdHJpbmcmIHN0ciwgaW50IHdoaWNoPWlvczo6aW4pCisgICAgICA6IGlzdHJlYW0oJnNiKSwgc2Ioc3RyLCB3aGljaCB8IGlvczo6aW4pCisgICAgeyB9CisKKyAgICBzdHJpbmdidWYqCisgICAgcmRidWYoKSBjb25zdAorICAgIHsKKyAgICAgIHJldHVybiBjb25zdF9jYXN0PHN0cmluZ2J1Zio+KCZzYik7CisgICAgfQorCisgICAgc3RyaW5nCisgICAgc3RyKCkgY29uc3QKKyAgICB7CisgICAgICByZXR1cm4gcmRidWYoKS0+c3RyKCk7CisgICAgfQorICAgIHZvaWQKKyAgICBzdHIoY29uc3Qgc3RyaW5nJiBzKQorICAgIHsKKyAgICAgIHJkYnVmKCktPnN0cihzKTsKKyAgICB9CisgIHByaXZhdGU6CisgICAgc3RyaW5nYnVmIHNiOworICB9OworDAorICBjbGFzcyBvc3RyaW5nc3RyZWFtIDogcHVibGljIG9zdHJlYW0geworICBwdWJsaWM6CisgICAgdHlwZWRlZiBjaGFyCWNoYXJfdHlwZTsKKyAgICB0eXBlZGVmIGludAkJaW50X3R5cGU7CisgICAgdHlwZWRlZiBzdHJlYW1wb3MJcG9zX3R5cGU7CisgICAgdHlwZWRlZiBzdHJlYW1vZmYJb2ZmX3R5cGU7CisKKyAgICBleHBsaWNpdAorICAgIG9zdHJpbmdzdHJlYW0oaW50IHdoaWNoPWlvczo6b3V0KQorICAgICAgOiBvc3RyZWFtKCZzYiksIHNiKHdoaWNoIHwgaW9zOjpvdXQpCisgICAgeyB9CisKKyAgICBleHBsaWNpdAorICAgIG9zdHJpbmdzdHJlYW0oY29uc3Qgc3RyaW5nJiBzdHIsIGludCB3aGljaD1pb3M6Om91dCkKKyAgICAgIDogb3N0cmVhbSgmc2IpLCBzYihzdHIsIHdoaWNoIHwgaW9zOjpvdXQpCisgICAgeyB9CisKKyAgICBzdHJpbmdidWYqCisgICAgcmRidWYoKSBjb25zdAorICAgIHsKKyAgICAgIHJldHVybiBjb25zdF9jYXN0PHN0cmluZ2J1Zio+KCZzYik7CisgICAgfQorCisgICAgc3RyaW5nCisgICAgc3RyKCkgY29uc3QKKyAgICB7CisgICAgICByZXR1cm4gcmRidWYoKS0+c3RyKCk7CisgICAgfQorCisgICAgdm9pZCBzdHIoY29uc3Qgc3RyaW5nJiBzKQorICAgIHsKKyAgICAgIHJkYnVmKCktPnN0cihzKTsKKyAgICB9CisgIHByaXZhdGU6CisgICAgc3RyaW5nYnVmIHNiOworICB9OworDAorICBjbGFzcyBzdHJpbmdzdHJlYW0gOiBwdWJsaWMgaW9zdHJlYW0geworICBwdWJsaWM6CisgICAgdHlwZWRlZiBjaGFyCWNoYXJfdHlwZTsKKyAgICB0eXBlZGVmIGludAkJaW50X3R5cGU7CisgICAgdHlwZWRlZiBzdHJlYW1wb3MJcG9zX3R5cGU7CisgICAgdHlwZWRlZiBzdHJlYW1vZmYJb2ZmX3R5cGU7CisKKyAgICBleHBsaWNpdAorICAgIHN0cmluZ3N0cmVhbShpbnQgd2hpY2g9aW9zOjpvdXR8aW9zOjppbikKKyAgICAgIDogaW9zdHJlYW0oJnNiKSwgc2Iod2hpY2gpCisgICAgeyB9CisKKyAgICBleHBsaWNpdAorICAgIHN0cmluZ3N0cmVhbShjb25zdCBzdHJpbmcmIHN0ciwgaW50IHdoaWNoPWlvczo6b3V0fGlvczo6aW4pCisgICAgICA6IGlvc3RyZWFtKCZzYiksIHNiKHN0ciwgd2hpY2gpCisgICAgeyB9CisKKyAgICBzdHJpbmdidWYqCisgICAgcmRidWYoKSBjb25zdAorICAgIHsKKyAgICAgIHJldHVybiBjb25zdF9jYXN0PHN0cmluZ2J1Zio+KCZzYik7CisgICAgfQorCisgICAgc3RyaW5nCisgICAgc3RyKCkgY29uc3QKKyAgICB7CisgICAgICByZXR1cm4gcmRidWYoKS0+c3RyKCk7CisgICAgfQorCisgICAgdm9pZAorICAgIHN0cihjb25zdCBzdHJpbmcmIHMpCisgICAgeworICAgICAgcmRidWYoKS0+c3RyKHMpOworICAgIH0KKyAgcHJpdmF0ZToKKyAgICBzdHJpbmdidWYgc2I7CisgIH07Cit9OworCisjZW5kaWYgLyogbm90IF9fU1RSU1RSRUFNX18gKi8KZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2luc3RhbGwtc2ggYi9vcHJvZmlsZS0wLjkuNy9pbnN0YWxsLXNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjY3ODFiOTgKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9pbnN0YWxsLXNoCkBAIC0wLDAgKzEsNTIwIEBACisjIS9iaW4vc2gKKyMgaW5zdGFsbCAtIGluc3RhbGwgYSBwcm9ncmFtLCBzY3JpcHQsIG9yIGRhdGFmaWxlCisKK3NjcmlwdHZlcnNpb249MjAwOS0wNC0yOC4yMTsgIyBVVEMKKworIyBUaGlzIG9yaWdpbmF0ZXMgZnJvbSBYMTFSNSAobWl0L3V0aWwvc2NyaXB0cy9pbnN0YWxsLnNoKSwgd2hpY2ggd2FzCisjIGxhdGVyIHJlbGVhc2VkIGluIFgxMVI2ICh4Yy9jb25maWcvdXRpbC9pbnN0YWxsLnNoKSB3aXRoIHRoZQorIyBmb2xsb3dpbmcgY29weXJpZ2h0IGFuZCBsaWNlbnNlLgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTQgWCBDb25zb3J0aXVtCisjCisjIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyMgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvCisjIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlCisjIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vcgorIyBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworIyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorIworIyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorIyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyMKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyMgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisjIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyMgWCBDT05TT1JUSVVNIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUMtCisjIFRJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisjCisjIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lIG9mIHRoZSBYIENvbnNvcnRpdW0gc2hhbGwgbm90CisjIGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsLQorIyBpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIGF1dGhvcml6YXRpb24gZnJvbSB0aGUgWCBDb25zb3ItCisjIHRpdW0uCisjCisjCisjIEZTRiBjaGFuZ2VzIHRvIHRoaXMgZmlsZSBhcmUgaW4gdGhlIHB1YmxpYyBkb21haW4uCisjCisjIENhbGxpbmcgdGhpcyBzY3JpcHQgaW5zdGFsbC1zaCBpcyBwcmVmZXJyZWQgb3ZlciBpbnN0YWxsLnNoLCB0byBwcmV2ZW50CisjIGBtYWtlJyBpbXBsaWNpdCBydWxlcyBmcm9tIGNyZWF0aW5nIGEgZmlsZSBjYWxsZWQgaW5zdGFsbCBmcm9tIGl0CisjIHdoZW4gdGhlcmUgaXMgbm8gTWFrZWZpbGUuCisjCisjIFRoaXMgc2NyaXB0IGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgQlNEIGluc3RhbGwgc2NyaXB0LCBidXQgd2FzIHdyaXR0ZW4KKyMgZnJvbSBzY3JhdGNoLgorCitubD0nCisnCitJRlM9IiAiIgkkbmwiCisKKyMgc2V0IERPSVRQUk9HIHRvIGVjaG8gdG8gdGVzdCB0aGlzIHNjcmlwdAorCisjIERvbid0IHVzZSA6LSBzaW5jZSA0LjNCU0QgYW5kIGVhcmxpZXIgc2hlbGxzIGRvbid0IGxpa2UgaXQuCitkb2l0PSR7RE9JVFBST0ctfQoraWYgdGVzdCAteiAiJGRvaXQiOyB0aGVuCisgIGRvaXRfZXhlYz1leGVjCitlbHNlCisgIGRvaXRfZXhlYz0kZG9pdAorZmkKKworIyBQdXQgaW4gYWJzb2x1dGUgZmlsZSBuYW1lcyBpZiB5b3UgZG9uJ3QgaGF2ZSB0aGVtIGluIHlvdXIgcGF0aDsKKyMgb3IgdXNlIGVudmlyb25tZW50IHZhcnMuCisKK2NoZ3JwcHJvZz0ke0NIR1JQUFJPRy1jaGdycH0KK2NobW9kcHJvZz0ke0NITU9EUFJPRy1jaG1vZH0KK2Nob3ducHJvZz0ke0NIT1dOUFJPRy1jaG93bn0KK2NtcHByb2c9JHtDTVBQUk9HLWNtcH0KK2NwcHJvZz0ke0NQUFJPRy1jcH0KK21rZGlycHJvZz0ke01LRElSUFJPRy1ta2Rpcn0KK212cHJvZz0ke01WUFJPRy1tdn0KK3JtcHJvZz0ke1JNUFJPRy1ybX0KK3N0cmlwcHJvZz0ke1NUUklQUFJPRy1zdHJpcH0KKworcG9zaXhfZ2xvYj0nPycKK2luaXRpYWxpemVfcG9zaXhfZ2xvYj0nCisgIHRlc3QgIiRwb3NpeF9nbG9iIiAhPSAiPyIgfHwgeworICAgIGlmIChzZXQgLWYpIDI+L2Rldi9udWxsOyB0aGVuCisgICAgICBwb3NpeF9nbG9iPQorICAgIGVsc2UKKyAgICAgIHBvc2l4X2dsb2I9OgorICAgIGZpCisgIH0KKycKKworcG9zaXhfbWtkaXI9CisKKyMgRGVzaXJlZCBtb2RlIG9mIGluc3RhbGxlZCBmaWxlLgorbW9kZT0wNzU1CisKK2NoZ3JwY21kPQorY2htb2RjbWQ9JGNobW9kcHJvZworY2hvd25jbWQ9CittdmNtZD0kbXZwcm9nCitybWNtZD0iJHJtcHJvZyAtZiIKK3N0cmlwY21kPQorCitzcmM9Citkc3Q9CitkaXJfYXJnPQorZHN0X2FyZz0KKworY29weV9vbl9jaGFuZ2U9ZmFsc2UKK25vX3RhcmdldF9kaXJlY3Rvcnk9CisKK3VzYWdlPSJcCitVc2FnZTogJDAgW09QVElPTl0uLi4gWy1UXSBTUkNGSUxFIERTVEZJTEUKKyAgIG9yOiAkMCBbT1BUSU9OXS4uLiBTUkNGSUxFUy4uLiBESVJFQ1RPUlkKKyAgIG9yOiAkMCBbT1BUSU9OXS4uLiAtdCBESVJFQ1RPUlkgU1JDRklMRVMuLi4KKyAgIG9yOiAkMCBbT1BUSU9OXS4uLiAtZCBESVJFQ1RPUklFUy4uLgorCitJbiB0aGUgMXN0IGZvcm0sIGNvcHkgU1JDRklMRSB0byBEU1RGSUxFLgorSW4gdGhlIDJuZCBhbmQgM3JkLCBjb3B5IGFsbCBTUkNGSUxFUyB0byBESVJFQ1RPUlkuCitJbiB0aGUgNHRoLCBjcmVhdGUgRElSRUNUT1JJRVMuCisKK09wdGlvbnM6CisgICAgIC0taGVscCAgICAgZGlzcGxheSB0aGlzIGhlbHAgYW5kIGV4aXQuCisgICAgIC0tdmVyc2lvbiAgZGlzcGxheSB2ZXJzaW9uIGluZm8gYW5kIGV4aXQuCisKKyAgLWMgICAgICAgICAgICAoaWdub3JlZCkKKyAgLUMgICAgICAgICAgICBpbnN0YWxsIG9ubHkgaWYgZGlmZmVyZW50IChwcmVzZXJ2ZSB0aGUgbGFzdCBkYXRhIG1vZGlmaWNhdGlvbiB0aW1lKQorICAtZCAgICAgICAgICAgIGNyZWF0ZSBkaXJlY3RvcmllcyBpbnN0ZWFkIG9mIGluc3RhbGxpbmcgZmlsZXMuCisgIC1nIEdST1VQICAgICAgJGNoZ3JwcHJvZyBpbnN0YWxsZWQgZmlsZXMgdG8gR1JPVVAuCisgIC1tIE1PREUgICAgICAgJGNobW9kcHJvZyBpbnN0YWxsZWQgZmlsZXMgdG8gTU9ERS4KKyAgLW8gVVNFUiAgICAgICAkY2hvd25wcm9nIGluc3RhbGxlZCBmaWxlcyB0byBVU0VSLgorICAtcyAgICAgICAgICAgICRzdHJpcHByb2cgaW5zdGFsbGVkIGZpbGVzLgorICAtdCBESVJFQ1RPUlkgIGluc3RhbGwgaW50byBESVJFQ1RPUlkuCisgIC1UICAgICAgICAgICAgcmVwb3J0IGFuIGVycm9yIGlmIERTVEZJTEUgaXMgYSBkaXJlY3RvcnkuCisKK0Vudmlyb25tZW50IHZhcmlhYmxlcyBvdmVycmlkZSB0aGUgZGVmYXVsdCBjb21tYW5kczoKKyAgQ0hHUlBQUk9HIENITU9EUFJPRyBDSE9XTlBST0cgQ01QUFJPRyBDUFBST0cgTUtESVJQUk9HIE1WUFJPRworICBSTVBST0cgU1RSSVBQUk9HCisiCisKK3doaWxlIHRlc3QgJCMgLW5lIDA7IGRvCisgIGNhc2UgJDEgaW4KKyAgICAtYykgOzsKKworICAgIC1DKSBjb3B5X29uX2NoYW5nZT10cnVlOzsKKworICAgIC1kKSBkaXJfYXJnPXRydWU7OworCisgICAgLWcpIGNoZ3JwY21kPSIkY2hncnBwcm9nICQyIgorCXNoaWZ0OzsKKworICAgIC0taGVscCkgZWNobyAiJHVzYWdlIjsgZXhpdCAkPzs7CisKKyAgICAtbSkgbW9kZT0kMgorCWNhc2UgJG1vZGUgaW4KKwkgIConICcqIHwgKicJJyogfCAqJworJyoJICB8IConKicqIHwgKic/JyogfCAqJ1snKikKKwkgICAgZWNobyAiJDA6IGludmFsaWQgbW9kZTogJG1vZGUiID4mMgorCSAgICBleGl0IDE7OworCWVzYWMKKwlzaGlmdDs7CisKKyAgICAtbykgY2hvd25jbWQ9IiRjaG93bnByb2cgJDIiCisJc2hpZnQ7OworCisgICAgLXMpIHN0cmlwY21kPSRzdHJpcHByb2c7OworCisgICAgLXQpIGRzdF9hcmc9JDIKKwlzaGlmdDs7CisKKyAgICAtVCkgbm9fdGFyZ2V0X2RpcmVjdG9yeT10cnVlOzsKKworICAgIC0tdmVyc2lvbikgZWNobyAiJDAgJHNjcmlwdHZlcnNpb24iOyBleGl0ICQ/OzsKKworICAgIC0tKQlzaGlmdAorCWJyZWFrOzsKKworICAgIC0qKQllY2hvICIkMDogaW52YWxpZCBvcHRpb246ICQxIiA+JjIKKwlleGl0IDE7OworCisgICAgKikgIGJyZWFrOzsKKyAgZXNhYworICBzaGlmdAorZG9uZQorCitpZiB0ZXN0ICQjIC1uZSAwICYmIHRlc3QgLXogIiRkaXJfYXJnJGRzdF9hcmciOyB0aGVuCisgICMgV2hlbiAtZCBpcyB1c2VkLCBhbGwgcmVtYWluaW5nIGFyZ3VtZW50cyBhcmUgZGlyZWN0b3JpZXMgdG8gY3JlYXRlLgorICAjIFdoZW4gLXQgaXMgdXNlZCwgdGhlIGRlc3RpbmF0aW9uIGlzIGFscmVhZHkgc3BlY2lmaWVkLgorICAjIE90aGVyd2lzZSwgdGhlIGxhc3QgYXJndW1lbnQgaXMgdGhlIGRlc3RpbmF0aW9uLiAgUmVtb3ZlIGl0IGZyb20gJEAuCisgIGZvciBhcmcKKyAgZG8KKyAgICBpZiB0ZXN0IC1uICIkZHN0X2FyZyI7IHRoZW4KKyAgICAgICMgJEAgaXMgbm90IGVtcHR5OiBpdCBjb250YWlucyBhdCBsZWFzdCAkYXJnLgorICAgICAgc2V0IGZub3JkICIkQCIgIiRkc3RfYXJnIgorICAgICAgc2hpZnQgIyBmbm9yZAorICAgIGZpCisgICAgc2hpZnQgIyBhcmcKKyAgICBkc3RfYXJnPSRhcmcKKyAgZG9uZQorZmkKKworaWYgdGVzdCAkIyAtZXEgMDsgdGhlbgorICBpZiB0ZXN0IC16ICIkZGlyX2FyZyI7IHRoZW4KKyAgICBlY2hvICIkMDogbm8gaW5wdXQgZmlsZSBzcGVjaWZpZWQuIiA+JjIKKyAgICBleGl0IDEKKyAgZmkKKyAgIyBJdCdzIE9LIHRvIGNhbGwgYGluc3RhbGwtc2ggLWQnIHdpdGhvdXQgYXJndW1lbnQuCisgICMgVGhpcyBjYW4gaGFwcGVuIHdoZW4gY3JlYXRpbmcgY29uZGl0aW9uYWwgZGlyZWN0b3JpZXMuCisgIGV4aXQgMAorZmkKKworaWYgdGVzdCAteiAiJGRpcl9hcmciOyB0aGVuCisgIHRyYXAgJyhleGl0ICQ/KTsgZXhpdCcgMSAyIDEzIDE1CisKKyAgIyBTZXQgdW1hc2sgc28gYXMgbm90IHRvIGNyZWF0ZSB0ZW1wcyB3aXRoIHRvby1nZW5lcm91cyBtb2Rlcy4KKyAgIyBIb3dldmVyLCAnc3RyaXAnIHJlcXVpcmVzIGJvdGggcmVhZCBhbmQgd3JpdGUgYWNjZXNzIHRvIHRlbXBzLgorICBjYXNlICRtb2RlIGluCisgICAgIyBPcHRpbWl6ZSBjb21tb24gY2FzZXMuCisgICAgKjY0NCkgY3BfdW1hc2s9MTMzOzsKKyAgICAqNzU1KSBjcF91bWFzaz0yMjs7CisKKyAgICAqWzAtN10pCisgICAgICBpZiB0ZXN0IC16ICIkc3RyaXBjbWQiOyB0aGVuCisJdV9wbHVzX3J3PQorICAgICAgZWxzZQorCXVfcGx1c19ydz0nJSAyMDAnCisgICAgICBmaQorICAgICAgY3BfdW1hc2s9YGV4cHIgJygnIDc3NyAtICRtb2RlICUgMTAwMCAnKScgJHVfcGx1c19yd2A7OworICAgICopCisgICAgICBpZiB0ZXN0IC16ICIkc3RyaXBjbWQiOyB0aGVuCisJdV9wbHVzX3J3PQorICAgICAgZWxzZQorCXVfcGx1c19ydz0sdStydworICAgICAgZmkKKyAgICAgIGNwX3VtYXNrPSRtb2RlJHVfcGx1c19ydzs7CisgIGVzYWMKK2ZpCisKK2ZvciBzcmMKK2RvCisgICMgUHJvdGVjdCBuYW1lcyBzdGFydGluZyB3aXRoIGAtJy4KKyAgY2FzZSAkc3JjIGluCisgICAgLSopIHNyYz0uLyRzcmM7OworICBlc2FjCisKKyAgaWYgdGVzdCAtbiAiJGRpcl9hcmciOyB0aGVuCisgICAgZHN0PSRzcmMKKyAgICBkc3RkaXI9JGRzdAorICAgIHRlc3QgLWQgIiRkc3RkaXIiCisgICAgZHN0ZGlyX3N0YXR1cz0kPworICBlbHNlCisKKyAgICAjIFdhaXRpbmcgZm9yIHRoaXMgdG8gYmUgZGV0ZWN0ZWQgYnkgdGhlICIkY3Bwcm9nICRzcmMgJGRzdHRtcCIgY29tbWFuZAorICAgICMgbWlnaHQgY2F1c2UgZGlyZWN0b3JpZXMgdG8gYmUgY3JlYXRlZCwgd2hpY2ggd291bGQgYmUgZXNwZWNpYWxseSBiYWQKKyAgICAjIGlmICRzcmMgKGFuZCB0aHVzICRkc3R0bXApIGNvbnRhaW5zICcqJy4KKyAgICBpZiB0ZXN0ICEgLWYgIiRzcmMiICYmIHRlc3QgISAtZCAiJHNyYyI7IHRoZW4KKyAgICAgIGVjaG8gIiQwOiAkc3JjIGRvZXMgbm90IGV4aXN0LiIgPiYyCisgICAgICBleGl0IDEKKyAgICBmaQorCisgICAgaWYgdGVzdCAteiAiJGRzdF9hcmciOyB0aGVuCisgICAgICBlY2hvICIkMDogbm8gZGVzdGluYXRpb24gc3BlY2lmaWVkLiIgPiYyCisgICAgICBleGl0IDEKKyAgICBmaQorCisgICAgZHN0PSRkc3RfYXJnCisgICAgIyBQcm90ZWN0IG5hbWVzIHN0YXJ0aW5nIHdpdGggYC0nLgorICAgIGNhc2UgJGRzdCBpbgorICAgICAgLSopIGRzdD0uLyRkc3Q7OworICAgIGVzYWMKKworICAgICMgSWYgZGVzdGluYXRpb24gaXMgYSBkaXJlY3RvcnksIGFwcGVuZCB0aGUgaW5wdXQgZmlsZW5hbWU7IHdvbid0IHdvcmsKKyAgICAjIGlmIGRvdWJsZSBzbGFzaGVzIGFyZW4ndCBpZ25vcmVkLgorICAgIGlmIHRlc3QgLWQgIiRkc3QiOyB0aGVuCisgICAgICBpZiB0ZXN0IC1uICIkbm9fdGFyZ2V0X2RpcmVjdG9yeSI7IHRoZW4KKwllY2hvICIkMDogJGRzdF9hcmc6IElzIGEgZGlyZWN0b3J5IiA+JjIKKwlleGl0IDEKKyAgICAgIGZpCisgICAgICBkc3RkaXI9JGRzdAorICAgICAgZHN0PSRkc3RkaXIvYGJhc2VuYW1lICIkc3JjImAKKyAgICAgIGRzdGRpcl9zdGF0dXM9MAorICAgIGVsc2UKKyAgICAgICMgUHJlZmVyIGRpcm5hbWUsIGJ1dCBmYWxsIGJhY2sgb24gYSBzdWJzdGl0dXRlIGlmIGRpcm5hbWUgZmFpbHMuCisgICAgICBkc3RkaXI9YAorCShkaXJuYW1lICIkZHN0IikgMj4vZGV2L251bGwgfHwKKwlleHByIFgiJGRzdCIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKwkgICAgIFgiJGRzdCIgOiAnWFwoLy9cKVteL10nIFx8IFwKKwkgICAgIFgiJGRzdCIgOiAnWFwoLy9cKSQnIFx8IFwKKwkgICAgIFgiJGRzdCIgOiAnWFwoL1wpJyBcfCAuIDI+L2Rldi9udWxsIHx8CisJZWNobyBYIiRkc3QiIHwKKwkgICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sKKwkJICAgcy8vXDEvCisJCSAgIHEKKwkJIH0KKwkJIC9eWFwoXC9cL1wpW14vXS4qL3sKKwkJICAgcy8vXDEvCisJCSAgIHEKKwkJIH0KKwkJIC9eWFwoXC9cL1wpJC97CisJCSAgIHMvL1wxLworCQkgICBxCisJCSB9CisJCSAvXlhcKFwvXCkuKi97CisJCSAgIHMvL1wxLworCQkgICBxCisJCSB9CisJCSBzLy4qLy4vOyBxJworICAgICAgYAorCisgICAgICB0ZXN0IC1kICIkZHN0ZGlyIgorICAgICAgZHN0ZGlyX3N0YXR1cz0kPworICAgIGZpCisgIGZpCisKKyAgb2Jzb2xldGVfbWtkaXJfdXNlZD1mYWxzZQorCisgIGlmIHRlc3QgJGRzdGRpcl9zdGF0dXMgIT0gMDsgdGhlbgorICAgIGNhc2UgJHBvc2l4X21rZGlyIGluCisgICAgICAnJykKKwkjIENyZWF0ZSBpbnRlcm1lZGlhdGUgZGlycyB1c2luZyBtb2RlIDc1NSBhcyBtb2RpZmllZCBieSB0aGUgdW1hc2suCisJIyBUaGlzIGlzIGxpa2UgRnJlZUJTRCAnaW5zdGFsbCcgYXMgb2YgMTk5Ny0xMC0yOC4KKwl1bWFzaz1gdW1hc2tgCisJY2FzZSAkc3RyaXBjbWQuJHVtYXNrIGluCisJICAjIE9wdGltaXplIGNvbW1vbiBjYXNlcy4KKwkgICpbMjM2N11bMjM2N10pIG1rZGlyX3VtYXNrPSR1bWFzazs7CisJICAuKjBbMDJdWzAyXSB8IC5bMDJdWzAyXSB8IC5bMDJdKSBta2Rpcl91bWFzaz0yMjs7CisKKwkgICpbMC03XSkKKwkgICAgbWtkaXJfdW1hc2s9YGV4cHIgJHVtYXNrICsgMjIgXAorCSAgICAgIC0gJHVtYXNrICUgMTAwICUgNDAgKyAkdW1hc2sgJSAyMCBcCisJICAgICAgLSAkdW1hc2sgJSAxMCAlIDQgKyAkdW1hc2sgJSAyCisJICAgIGA7OworCSAgKikgbWtkaXJfdW1hc2s9JHVtYXNrLGdvLXc7OworCWVzYWMKKworCSMgV2l0aCAtZCwgY3JlYXRlIHRoZSBuZXcgZGlyZWN0b3J5IHdpdGggdGhlIHVzZXItc3BlY2lmaWVkIG1vZGUuCisJIyBPdGhlcndpc2UsIHJlbHkgb24gJG1rZGlyX3VtYXNrLgorCWlmIHRlc3QgLW4gIiRkaXJfYXJnIjsgdGhlbgorCSAgbWtkaXJfbW9kZT0tbSRtb2RlCisJZWxzZQorCSAgbWtkaXJfbW9kZT0KKwlmaQorCisJcG9zaXhfbWtkaXI9ZmFsc2UKKwljYXNlICR1bWFzayBpbgorCSAgKlsxMjM1NjddWzAtN11bMC03XSkKKwkgICAgIyBQT1NJWCBta2RpciAtcCBzZXRzIHUrd3ggYml0cyByZWdhcmRsZXNzIG9mIHVtYXNrLCB3aGljaAorCSAgICAjIGlzIGluY29tcGF0aWJsZSB3aXRoIEZyZWVCU0QgJ2luc3RhbGwnIHdoZW4gKHVtYXNrICYgMzAwKSAhPSAwLgorCSAgICA7OworCSAgKikKKwkgICAgdG1wZGlyPSR7VE1QRElSLS90bXB9L2lucyRSQU5ET00tJCQKKwkgICAgdHJhcCAncmV0PSQ/OyBybWRpciAiJHRtcGRpci9kIiAiJHRtcGRpciIgMj4vZGV2L251bGw7IGV4aXQgJHJldCcgMAorCisJICAgIGlmICh1bWFzayAkbWtkaXJfdW1hc2sgJiYKKwkJZXhlYyAkbWtkaXJwcm9nICRta2Rpcl9tb2RlIC1wIC0tICIkdG1wZGlyL2QiKSA+L2Rldi9udWxsIDI+JjEKKwkgICAgdGhlbgorCSAgICAgIGlmIHRlc3QgLXogIiRkaXJfYXJnIiB8fCB7CisJCSAgICMgQ2hlY2sgZm9yIFBPU0lYIGluY29tcGF0aWJpbGl0aWVzIHdpdGggLW0uCisJCSAgICMgSFAtVVggMTEuMjMgYW5kIElSSVggNi41IG1rZGlyIC1tIC1wIHNldHMgZ3JvdXAtIG9yCisJCSAgICMgb3RoZXItd3JpdGVhYmxlIGJpdCBvZiBwYXJlbnQgZGlyZWN0b3J5IHdoZW4gaXQgc2hvdWxkbid0LgorCQkgICAjIEZyZWVCU0QgNi4xIG1rZGlyIC1tIC1wIHNldHMgbW9kZSBvZiBleGlzdGluZyBkaXJlY3RvcnkuCisJCSAgIGxzX2xkX3RtcGRpcj1gbHMgLWxkICIkdG1wZGlyImAKKwkJICAgY2FzZSAkbHNfbGRfdG1wZGlyIGluCisJCSAgICAgZD8/Pz8tP3ItKikgZGlmZmVyZW50X21vZGU9NzAwOzsKKwkJICAgICBkPz8/Py0/LS0qKSBkaWZmZXJlbnRfbW9kZT03NTU7OworCQkgICAgICopIGZhbHNlOzsKKwkJICAgZXNhYyAmJgorCQkgICAkbWtkaXJwcm9nIC1tJGRpZmZlcmVudF9tb2RlIC1wIC0tICIkdG1wZGlyIiAmJiB7CisJCSAgICAgbHNfbGRfdG1wZGlyXzE9YGxzIC1sZCAiJHRtcGRpciJgCisJCSAgICAgdGVzdCAiJGxzX2xkX3RtcGRpciIgPSAiJGxzX2xkX3RtcGRpcl8xIgorCQkgICB9CisJCSB9CisJICAgICAgdGhlbiBwb3NpeF9ta2Rpcj06CisJICAgICAgZmkKKwkgICAgICBybWRpciAiJHRtcGRpci9kIiAiJHRtcGRpciIKKwkgICAgZWxzZQorCSAgICAgICMgUmVtb3ZlIGFueSBkaXJzIGxlZnQgYmVoaW5kIGJ5IGFuY2llbnQgbWtkaXIgaW1wbGVtZW50YXRpb25zLgorCSAgICAgIHJtZGlyIC4vJG1rZGlyX21vZGUgLi8tcCAuLy0tIDI+L2Rldi9udWxsCisJICAgIGZpCisJICAgIHRyYXAgJycgMDs7CisJZXNhYzs7CisgICAgZXNhYworCisgICAgaWYKKyAgICAgICRwb3NpeF9ta2RpciAmJiAoCisJdW1hc2sgJG1rZGlyX3VtYXNrICYmCisJJGRvaXRfZXhlYyAkbWtkaXJwcm9nICRta2Rpcl9tb2RlIC1wIC0tICIkZHN0ZGlyIgorICAgICAgKQorICAgIHRoZW4gOgorICAgIGVsc2UKKworICAgICAgIyBUaGUgdW1hc2sgaXMgcmlkaWN1bG91cywgb3IgbWtkaXIgZG9lcyBub3QgY29uZm9ybSB0byBQT1NJWCwKKyAgICAgICMgb3IgaXQgZmFpbGVkIHBvc3NpYmx5IGR1ZSB0byBhIHJhY2UgY29uZGl0aW9uLiAgQ3JlYXRlIHRoZQorICAgICAgIyBkaXJlY3RvcnkgdGhlIHNsb3cgd2F5LCBzdGVwIGJ5IHN0ZXAsIGNoZWNraW5nIGZvciByYWNlcyBhcyB3ZSBnby4KKworICAgICAgY2FzZSAkZHN0ZGlyIGluCisJLyopIHByZWZpeD0nLyc7OworCS0qKSBwcmVmaXg9Jy4vJzs7CisJKikgIHByZWZpeD0nJzs7CisgICAgICBlc2FjCisKKyAgICAgIGV2YWwgIiRpbml0aWFsaXplX3Bvc2l4X2dsb2IiCisKKyAgICAgIG9JRlM9JElGUworICAgICAgSUZTPS8KKyAgICAgICRwb3NpeF9nbG9iIHNldCAtZgorICAgICAgc2V0IGZub3JkICRkc3RkaXIKKyAgICAgIHNoaWZ0CisgICAgICAkcG9zaXhfZ2xvYiBzZXQgK2YKKyAgICAgIElGUz0kb0lGUworCisgICAgICBwcmVmaXhlcz0KKworICAgICAgZm9yIGQKKyAgICAgIGRvCisJdGVzdCAteiAiJGQiICYmIGNvbnRpbnVlCisKKwlwcmVmaXg9JHByZWZpeCRkCisJaWYgdGVzdCAtZCAiJHByZWZpeCI7IHRoZW4KKwkgIHByZWZpeGVzPQorCWVsc2UKKwkgIGlmICRwb3NpeF9ta2RpcjsgdGhlbgorCSAgICAodW1hc2s9JG1rZGlyX3VtYXNrICYmCisJICAgICAkZG9pdF9leGVjICRta2RpcnByb2cgJG1rZGlyX21vZGUgLXAgLS0gIiRkc3RkaXIiKSAmJiBicmVhaworCSAgICAjIERvbid0IGZhaWwgaWYgdHdvIGluc3RhbmNlcyBhcmUgcnVubmluZyBjb25jdXJyZW50bHkuCisJICAgIHRlc3QgLWQgIiRwcmVmaXgiIHx8IGV4aXQgMQorCSAgZWxzZQorCSAgICBjYXNlICRwcmVmaXggaW4KKwkgICAgICAqXCcqKSBxcHJlZml4PWBlY2hvICIkcHJlZml4IiB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYDs7CisJICAgICAgKikgcXByZWZpeD0kcHJlZml4OzsKKwkgICAgZXNhYworCSAgICBwcmVmaXhlcz0iJHByZWZpeGVzICckcXByZWZpeCciCisJICBmaQorCWZpCisJcHJlZml4PSRwcmVmaXgvCisgICAgICBkb25lCisKKyAgICAgIGlmIHRlc3QgLW4gIiRwcmVmaXhlcyI7IHRoZW4KKwkjIERvbid0IGZhaWwgaWYgdHdvIGluc3RhbmNlcyBhcmUgcnVubmluZyBjb25jdXJyZW50bHkuCisJKHVtYXNrICRta2Rpcl91bWFzayAmJgorCSBldmFsICJcJGRvaXRfZXhlYyBcJG1rZGlycHJvZyAkcHJlZml4ZXMiKSB8fAorCSAgdGVzdCAtZCAiJGRzdGRpciIgfHwgZXhpdCAxCisJb2Jzb2xldGVfbWtkaXJfdXNlZD10cnVlCisgICAgICBmaQorICAgIGZpCisgIGZpCisKKyAgaWYgdGVzdCAtbiAiJGRpcl9hcmciOyB0aGVuCisgICAgeyB0ZXN0IC16ICIkY2hvd25jbWQiIHx8ICRkb2l0ICRjaG93bmNtZCAiJGRzdCI7IH0gJiYKKyAgICB7IHRlc3QgLXogIiRjaGdycGNtZCIgfHwgJGRvaXQgJGNoZ3JwY21kICIkZHN0IjsgfSAmJgorICAgIHsgdGVzdCAiJG9ic29sZXRlX21rZGlyX3VzZWQkY2hvd25jbWQkY2hncnBjbWQiID0gZmFsc2UgfHwKKyAgICAgIHRlc3QgLXogIiRjaG1vZGNtZCIgfHwgJGRvaXQgJGNobW9kY21kICRtb2RlICIkZHN0IjsgfSB8fCBleGl0IDEKKyAgZWxzZQorCisgICAgIyBNYWtlIGEgY291cGxlIG9mIHRlbXAgZmlsZSBuYW1lcyBpbiB0aGUgcHJvcGVyIGRpcmVjdG9yeS4KKyAgICBkc3R0bXA9JGRzdGRpci9faW5zdC4kJF8KKyAgICBybXRtcD0kZHN0ZGlyL19ybS4kJF8KKworICAgICMgVHJhcCB0byBjbGVhbiB1cCB0aG9zZSB0ZW1wIGZpbGVzIGF0IGV4aXQuCisgICAgdHJhcCAncmV0PSQ/OyBybSAtZiAiJGRzdHRtcCIgIiRybXRtcCIgJiYgZXhpdCAkcmV0JyAwCisKKyAgICAjIENvcHkgdGhlIGZpbGUgbmFtZSB0byB0aGUgdGVtcCBuYW1lLgorICAgICh1bWFzayAkY3BfdW1hc2sgJiYgJGRvaXRfZXhlYyAkY3Bwcm9nICIkc3JjIiAiJGRzdHRtcCIpICYmCisKKyAgICAjIGFuZCBzZXQgYW55IG9wdGlvbnM7IGRvIGNobW9kIGxhc3QgdG8gcHJlc2VydmUgc2V0dWlkIGJpdHMuCisgICAgIworICAgICMgSWYgYW55IG9mIHRoZXNlIGZhaWwsIHdlIGFib3J0IHRoZSB3aG9sZSB0aGluZy4gIElmIHdlIHdhbnQgdG8KKyAgICAjIGlnbm9yZSBlcnJvcnMgZnJvbSBhbnkgb2YgdGhlc2UsIGp1c3QgbWFrZSBzdXJlIG5vdCB0byBpZ25vcmUKKyAgICAjIGVycm9ycyBmcm9tIHRoZSBhYm92ZSAiJGRvaXQgJGNwcHJvZyAkc3JjICRkc3R0bXAiIGNvbW1hbmQuCisgICAgIworICAgIHsgdGVzdCAteiAiJGNob3duY21kIiB8fCAkZG9pdCAkY2hvd25jbWQgIiRkc3R0bXAiOyB9ICYmCisgICAgeyB0ZXN0IC16ICIkY2hncnBjbWQiIHx8ICRkb2l0ICRjaGdycGNtZCAiJGRzdHRtcCI7IH0gJiYKKyAgICB7IHRlc3QgLXogIiRzdHJpcGNtZCIgfHwgJGRvaXQgJHN0cmlwY21kICIkZHN0dG1wIjsgfSAmJgorICAgIHsgdGVzdCAteiAiJGNobW9kY21kIiB8fCAkZG9pdCAkY2htb2RjbWQgJG1vZGUgIiRkc3R0bXAiOyB9ICYmCisKKyAgICAjIElmIC1DLCBkb24ndCBib3RoZXIgdG8gY29weSBpZiBpdCB3b3VsZG4ndCBjaGFuZ2UgdGhlIGZpbGUuCisgICAgaWYgJGNvcHlfb25fY2hhbmdlICYmCisgICAgICAgb2xkPWBMQ19BTEw9QyBscyAtZGxMICIkZHN0IgkyPi9kZXYvbnVsbGAgJiYKKyAgICAgICBuZXc9YExDX0FMTD1DIGxzIC1kbEwgIiRkc3R0bXAiCTI+L2Rldi9udWxsYCAmJgorCisgICAgICAgZXZhbCAiJGluaXRpYWxpemVfcG9zaXhfZ2xvYiIgJiYKKyAgICAgICAkcG9zaXhfZ2xvYiBzZXQgLWYgJiYKKyAgICAgICBzZXQgWCAkb2xkICYmIG9sZD06JDI6JDQ6JDU6JDYgJiYKKyAgICAgICBzZXQgWCAkbmV3ICYmIG5ldz06JDI6JDQ6JDU6JDYgJiYKKyAgICAgICAkcG9zaXhfZ2xvYiBzZXQgK2YgJiYKKworICAgICAgIHRlc3QgIiRvbGQiID0gIiRuZXciICYmCisgICAgICAgJGNtcHByb2cgIiRkc3QiICIkZHN0dG1wIiA+L2Rldi9udWxsIDI+JjEKKyAgICB0aGVuCisgICAgICBybSAtZiAiJGRzdHRtcCIKKyAgICBlbHNlCisgICAgICAjIFJlbmFtZSB0aGUgZmlsZSB0byB0aGUgcmVhbCBkZXN0aW5hdGlvbi4KKyAgICAgICRkb2l0ICRtdmNtZCAtZiAiJGRzdHRtcCIgIiRkc3QiIDI+L2Rldi9udWxsIHx8CisKKyAgICAgICMgVGhlIHJlbmFtZSBmYWlsZWQsIHBlcmhhcHMgYmVjYXVzZSBtdiBjYW4ndCByZW5hbWUgc29tZXRoaW5nIGVsc2UKKyAgICAgICMgdG8gaXRzZWxmLCBvciBwZXJoYXBzIGJlY2F1c2UgbXYgaXMgc28gYW5jaWVudCB0aGF0IGl0IGRvZXMgbm90CisgICAgICAjIHN1cHBvcnQgLWYuCisgICAgICB7CisJIyBOb3cgcmVtb3ZlIG9yIG1vdmUgYXNpZGUgYW55IG9sZCBmaWxlIGF0IGRlc3RpbmF0aW9uIGxvY2F0aW9uLgorCSMgV2UgdHJ5IHRoaXMgdHdvIHdheXMgc2luY2Ugcm0gY2FuJ3QgdW5saW5rIGl0c2VsZiBvbiBzb21lCisJIyBzeXN0ZW1zIGFuZCB0aGUgZGVzdGluYXRpb24gZmlsZSBtaWdodCBiZSBidXN5IGZvciBvdGhlcgorCSMgcmVhc29ucy4gIEluIHRoaXMgY2FzZSwgdGhlIGZpbmFsIGNsZWFudXAgbWlnaHQgZmFpbCBidXQgdGhlIG5ldworCSMgZmlsZSBzaG91bGQgc3RpbGwgaW5zdGFsbCBzdWNjZXNzZnVsbHkuCisJeworCSAgdGVzdCAhIC1mICIkZHN0IiB8fAorCSAgJGRvaXQgJHJtY21kIC1mICIkZHN0IiAyPi9kZXYvbnVsbCB8fAorCSAgeyAkZG9pdCAkbXZjbWQgLWYgIiRkc3QiICIkcm10bXAiIDI+L2Rldi9udWxsICYmCisJICAgIHsgJGRvaXQgJHJtY21kIC1mICIkcm10bXAiIDI+L2Rldi9udWxsOyA6OyB9CisJICB9IHx8CisJICB7IGVjaG8gIiQwOiBjYW5ub3QgdW5saW5rIG9yIHJlbmFtZSAkZHN0IiA+JjIKKwkgICAgKGV4aXQgMSk7IGV4aXQgMQorCSAgfQorCX0gJiYKKworCSMgTm93IHJlbmFtZSB0aGUgZmlsZSB0byB0aGUgcmVhbCBkZXN0aW5hdGlvbi4KKwkkZG9pdCAkbXZjbWQgIiRkc3R0bXAiICIkZHN0IgorICAgICAgfQorICAgIGZpIHx8IGV4aXQgMQorCisgICAgdHJhcCAnJyAwCisgIGZpCitkb25lCisKKyMgTG9jYWwgdmFyaWFibGVzOgorIyBldmFsOiAoYWRkLWhvb2sgJ3dyaXRlLWZpbGUtaG9va3MgJ3RpbWUtc3RhbXApCisjIHRpbWUtc3RhbXAtc3RhcnQ6ICJzY3JpcHR2ZXJzaW9uPSIKKyMgdGltZS1zdGFtcC1mb3JtYXQ6ICIlOnktJTAybS0lMDJkLiUwMkgiCisjIHRpbWUtc3RhbXAtdGltZS16b25lOiAiVVRDIgorIyB0aW1lLXN0YW1wLWVuZDogIjsgIyBVVEMiCisjIEVuZDoKZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2xpYmFiaS9NYWtlZmlsZS5hbSBiL29wcm9maWxlLTAuOS43L2xpYmFiaS9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NWMwYzhjCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvbGliYWJpL01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsMjQgQEAKK1NVQkRJUlM9LiB0ZXN0cworCitMSUJTPUBQT1BUX0xJQlNAIEBMSUJFUlRZX0xJQlNACisKK0FNX0NQUEZMQUdTID0gXAorCS1JICR7dG9wX3NyY2Rpcn0vbGlib3AgXAorCS1JICR7dG9wX3NyY2Rpcn0vbGlidXRpbCBcCisJLUkgJHt0b3Bfc3JjZGlyfS9saWJkYiBcCisJLUkgJHt0b3Bfc3JjZGlyfS9saWJvcHQrKworCitBTV9DWFhGTEFHUyA9IEBPUF9DWFhGTEFHU0AKKworbm9pbnN0X0xJQlJBUklFUyA9IGxpYmFiaS5hCitsaWJhYmlfYV9TT1VSQ0VTID0gYWJpLmNwcCBhYmkuaCBvcF9hYmkuYyBvcF9hYmkuaAorCitiaW5fUFJPR1JBTVMgPSBvcGltcG9ydAorCitvcGltcG9ydF9TT1VSQ0VTID0gb3BpbXBvcnQuY3BwCitvcGltcG9ydF9MREFERCA9IFwKKwlsaWJhYmkuYSBcCisJLi4vbGliZGIvbGlib2RiLmEgXAorCS4uL2xpYm9wdCsrL2xpYm9wdCsrLmEgXAorCS4uL2xpYnV0aWwrKy9saWJ1dGlsKysuYSBcCisJLi4vbGlidXRpbC9saWJ1dGlsLmEKZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2xpYmFiaS9NYWtlZmlsZS5pbiBiL29wcm9maWxlLTAuOS43L2xpYmFiaS9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40M2NkZmEzCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvbGliYWJpL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsNzgyIEBACisjIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjExLjEgZnJvbSBNYWtlZmlsZS5hbS4KKyMgQGNvbmZpZ3VyZV9pbnB1dEAKKworIyBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsCisjIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyMgSW5jLgorIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAorIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCisjIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworQFNFVF9NQUtFQAorCisKK1ZQQVRIID0gQHNyY2RpckAKK3BrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAorcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACitwa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACitwa2dsaWJleGVjZGlyID0gJChsaWJleGVjZGlyKS9AUEFDS0FHRUAKK2FtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKK2luc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0CitpbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCitpbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKK0lOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCit0cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCitOT1JNQUxfSU5TVEFMTCA9IDoKK1BSRV9JTlNUQUxMID0gOgorUE9TVF9JTlNUQUxMID0gOgorTk9STUFMX1VOSU5TVEFMTCA9IDoKK1BSRV9VTklOU1RBTEwgPSA6CitQT1NUX1VOSU5TVEFMTCA9IDoKK2J1aWxkX3RyaXBsZXQgPSBAYnVpbGRACitob3N0X3RyaXBsZXQgPSBAaG9zdEAKK2Jpbl9QUk9HUkFNUyA9IG9waW1wb3J0JChFWEVFWFQpCitzdWJkaXIgPSBsaWJhYmkKK0RJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmFtICQoc3JjZGlyKS9NYWtlZmlsZS5pbgorQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAorYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvbTQvYmludXRpbHMubTQgXAorCSQodG9wX3NyY2RpcikvbTQvYnVpbHRpbmV4cGVjdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jZWxsc3B1YmZkc3VwcG9ydC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jb21waWxlcm9wdGlvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jb25maWdtb2R1bGUubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY29weWlmY2hhbmdlLm00ICQodG9wX3NyY2RpcikvbTQvZG9jYm9vay5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9leHRyYWRpcnMubTQgJCh0b3Bfc3JjZGlyKS9tNC9maW5ka2VybmVsLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2tlcm5lbG9wdGlvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9rZXJuZWx2ZXJzaW9uLm00ICQodG9wX3NyY2RpcikvbTQvbGlidG9vbC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9sdG9wdGlvbnMubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdHN1Z2FyLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2x0dmVyc2lvbi5tNCAkKHRvcF9zcmNkaXIpL200L2x0fm9ic29sZXRlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L21hbGxvY2F0dHJpYnV0ZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9wb3B0Y29uc3QubTQgXAorCSQodG9wX3NyY2RpcikvbTQvcHJlY29tcGlsZWRoZWFkZXIubTQgJCh0b3Bfc3JjZGlyKS9tNC9xdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9yZXN1bHR5bi5tNCAkKHRvcF9zcmNkaXIpL200L3NzdHJlYW0ubTQgXAorCSQodG9wX3NyY2RpcikvbTQvdHlwZWRlZi5tNCAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5pbgorYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKKwkkKEFDTE9DQUxfTTQpCitta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAorQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAorQ09ORklHX0NMRUFOX0ZJTEVTID0KK0NPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9CitMSUJSQVJJRVMgPSAkKG5vaW5zdF9MSUJSQVJJRVMpCitBUkZMQUdTID0gY3J1CitsaWJhYmlfYV9BUiA9ICQoQVIpICQoQVJGTEFHUykKK2xpYmFiaV9hX0xJQkFERCA9CithbV9saWJhYmlfYV9PQkpFQ1RTID0gYWJpLiQoT0JKRVhUKSBvcF9hYmkuJChPQkpFWFQpCitsaWJhYmlfYV9PQkpFQ1RTID0gJChhbV9saWJhYmlfYV9PQkpFQ1RTKQorYW1fX2luc3RhbGxkaXJzID0gIiQoREVTVERJUikkKGJpbmRpcikiCitQUk9HUkFNUyA9ICQoYmluX1BST0dSQU1TKQorYW1fb3BpbXBvcnRfT0JKRUNUUyA9IG9waW1wb3J0LiQoT0JKRVhUKQorb3BpbXBvcnRfT0JKRUNUUyA9ICQoYW1fb3BpbXBvcnRfT0JKRUNUUykKK29waW1wb3J0X0RFUEVOREVOQ0lFUyA9IGxpYmFiaS5hIC4uL2xpYmRiL2xpYm9kYi5hIFwKKwkuLi9saWJvcHQrKy9saWJvcHQrKy5hIC4uL2xpYnV0aWwrKy9saWJ1dGlsKysuYSBcCisJLi4vbGlidXRpbC9saWJ1dGlsLmEKK0RFRkFVTFRfSU5DTFVERVMgPSAtSS5AYW1fX2lzcmNAIC1JJCh0b3BfYnVpbGRkaXIpCitkZXBjb21wID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9kZXBjb21wCithbV9fZGVwZmlsZXNfbWF5YmUgPSBkZXBmaWxlcworYW1fX212ID0gbXYgLWYKK0NPTVBJTEUgPSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgXAorCSQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKK0xUQ09NUElMRSA9ICQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSBcCisJLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpIFwKKwkkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpCitDQ0xEID0gJChDQykKK0xJTksgPSAkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgXAorCS0tbW9kZT1saW5rICQoQ0NMRCkgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAkKEFNX0xERkxBR1MpIFwKKwkkKExERkxBR1MpIC1vICRACitDWFhDT01QSUxFID0gJChDWFgpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSBcCisJJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DWFhGTEFHUykgJChDWFhGTEFHUykKK0xUQ1hYQ09NUElMRSA9ICQoTElCVE9PTCkgLS10YWc9Q1hYICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgXAorCS0tbW9kZT1jb21waWxlICQoQ1hYKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgXAorCSQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ1hYRkxBR1MpICQoQ1hYRkxBR1MpCitDWFhMRCA9ICQoQ1hYKQorQ1hYTElOSyA9ICQoTElCVE9PTCkgLS10YWc9Q1hYICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgXAorCS0tbW9kZT1saW5rICQoQ1hYTEQpICQoQU1fQ1hYRkxBR1MpICQoQ1hYRkxBR1MpICQoQU1fTERGTEFHUykgXAorCSQoTERGTEFHUykgLW8gJEAKK1NPVVJDRVMgPSAkKGxpYmFiaV9hX1NPVVJDRVMpICQob3BpbXBvcnRfU09VUkNFUykKK0RJU1RfU09VUkNFUyA9ICQobGliYWJpX2FfU09VUkNFUykgJChvcGltcG9ydF9TT1VSQ0VTKQorUkVDVVJTSVZFX1RBUkdFVFMgPSBhbGwtcmVjdXJzaXZlIGNoZWNrLXJlY3Vyc2l2ZSBkdmktcmVjdXJzaXZlIFwKKwlodG1sLXJlY3Vyc2l2ZSBpbmZvLXJlY3Vyc2l2ZSBpbnN0YWxsLWRhdGEtcmVjdXJzaXZlIFwKKwlpbnN0YWxsLWR2aS1yZWN1cnNpdmUgaW5zdGFsbC1leGVjLXJlY3Vyc2l2ZSBcCisJaW5zdGFsbC1odG1sLXJlY3Vyc2l2ZSBpbnN0YWxsLWluZm8tcmVjdXJzaXZlIFwKKwlpbnN0YWxsLXBkZi1yZWN1cnNpdmUgaW5zdGFsbC1wcy1yZWN1cnNpdmUgaW5zdGFsbC1yZWN1cnNpdmUgXAorCWluc3RhbGxjaGVjay1yZWN1cnNpdmUgaW5zdGFsbGRpcnMtcmVjdXJzaXZlIHBkZi1yZWN1cnNpdmUgXAorCXBzLXJlY3Vyc2l2ZSB1bmluc3RhbGwtcmVjdXJzaXZlCitSRUNVUlNJVkVfQ0xFQU5fVEFSR0VUUyA9IG1vc3RseWNsZWFuLXJlY3Vyc2l2ZSBjbGVhbi1yZWN1cnNpdmUJXAorICBkaXN0Y2xlYW4tcmVjdXJzaXZlIG1haW50YWluZXItY2xlYW4tcmVjdXJzaXZlCitBTV9SRUNVUlNJVkVfVEFSR0VUUyA9ICQoUkVDVVJTSVZFX1RBUkdFVFM6LXJlY3Vyc2l2ZT0pIFwKKwkkKFJFQ1VSU0lWRV9DTEVBTl9UQVJHRVRTOi1yZWN1cnNpdmU9KSB0YWdzIFRBR1MgY3RhZ3MgQ1RBR1MgXAorCWRpc3RkaXIKK0VUQUdTID0gZXRhZ3MKK0NUQUdTID0gY3RhZ3MKK0RJU1RfU1VCRElSUyA9ICQoU1VCRElSUykKK0RJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCithbV9fcmVsYXRpdml6ZSA9IFwKKyAgZGlyMD1gcHdkYDsgXAorICBzZWRfZmlyc3Q9J3MsXlwoW14vXSpcKS8uKiQkLFwxLCc7IFwKKyAgc2VkX3Jlc3Q9J3MsXlteL10qLyosLCc7IFwKKyAgc2VkX2xhc3Q9J3MsXi4qL1woW14vXSpcKSQkLFwxLCc7IFwKKyAgc2VkX2J1dGxhc3Q9J3MsLypbXi9dKiQkLCwnOyBcCisgIHdoaWxlIHRlc3QgLW4gIiQkZGlyMSI7IGRvIFwKKyAgICBmaXJzdD1gZWNobyAiJCRkaXIxIiB8IHNlZCAtZSAiJCRzZWRfZmlyc3QiYDsgXAorICAgIGlmIHRlc3QgIiQkZmlyc3QiICE9ICIuIjsgdGhlbiBcCisgICAgICBpZiB0ZXN0ICIkJGZpcnN0IiA9ICIuLiI7IHRoZW4gXAorICAgICAgICBkaXIyPWBlY2hvICIkJGRpcjAiIHwgc2VkIC1lICIkJHNlZF9sYXN0ImAvIiQkZGlyMiI7IFwKKyAgICAgICAgZGlyMD1gZWNobyAiJCRkaXIwIiB8IHNlZCAtZSAiJCRzZWRfYnV0bGFzdCJgOyBcCisgICAgICBlbHNlIFwKKyAgICAgICAgZmlyc3QyPWBlY2hvICIkJGRpcjIiIHwgc2VkIC1lICIkJHNlZF9maXJzdCJgOyBcCisgICAgICAgIGlmIHRlc3QgIiQkZmlyc3QyIiA9ICIkJGZpcnN0IjsgdGhlbiBcCisgICAgICAgICAgZGlyMj1gZWNobyAiJCRkaXIyIiB8IHNlZCAtZSAiJCRzZWRfcmVzdCJgOyBcCisgICAgICAgIGVsc2UgXAorICAgICAgICAgIGRpcjI9Ii4uLyQkZGlyMiI7IFwKKyAgICAgICAgZmk7IFwKKyAgICAgICAgZGlyMD0iJCRkaXIwIi8iJCRmaXJzdCI7IFwKKyAgICAgIGZpOyBcCisgICAgZmk7IFwKKyAgICBkaXIxPWBlY2hvICIkJGRpcjEiIHwgc2VkIC1lICIkJHNlZF9yZXN0ImA7IFwKKyAgZG9uZTsgXAorICByZWxkaXI9IiQkZGlyMiIKK0FDTE9DQUwgPSBAQUNMT0NBTEAKK0FNVEFSID0gQEFNVEFSQAorQVIgPSBAQVJACitBVVRPQ09ORiA9IEBBVVRPQ09ORkAKK0FVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKK0FVVE9NQUtFID0gQEFVVE9NQUtFQAorQVdLID0gQEFXS0AKK0JGRF9MSUJTID0gQEJGRF9MSUJTQAorQ0FUX0VOVFJZX0VORCA9IEBDQVRfRU5UUllfRU5EQAorQ0FUX0VOVFJZX1NUQVJUID0gQENBVF9FTlRSWV9TVEFSVEAKK0NDID0gQENDQAorQ0NERVBNT0RFID0gQENDREVQTU9ERUAKK0NGTEFHUyA9IEBDRkxBR1NACitDUFAgPSBAQ1BQQAorQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACitDWFggPSBAQ1hYQAorQ1hYQ1BQID0gQENYWENQUEAKK0NYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKK0NYWEZMQUdTID0gQENYWEZMQUdTQAorQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKK0RBVEUgPSBAREFURUAKK0RFRlMgPSBAREVGU0AKK0RFUERJUiA9IEBERVBESVJACitET0NCT09LX1JPT1QgPSBARE9DQk9PS19ST09UQAorRFNZTVVUSUwgPSBARFNZTVVUSUxACitEVU1QQklOID0gQERVTVBCSU5ACitFQ0hPX0MgPSBARUNIT19DQAorRUNIT19OID0gQEVDSE9fTkAKK0VDSE9fVCA9IEBFQ0hPX1RACitFR1JFUCA9IEBFR1JFUEAKK0VYRUVYVCA9IEBFWEVFWFRACitFWFRSQV9DRkxBR1NfTU9EVUxFID0gQEVYVFJBX0NGTEFHU19NT0RVTEVACitGR1JFUCA9IEBGR1JFUEAKK0dSRVAgPSBAR1JFUEAKK0lOU1RBTEwgPSBASU5TVEFMTEAKK0lOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACitJTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAorSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACitJTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAorSkFWQV9IT01FRElSID0gQEpBVkFfSE9NRURJUkAKK0tJTkMgPSBAS0lOQ0AKK0tTUkMgPSBAS1NSQ0AKK0tWRVJTID0gQEtWRVJTQAorTEQgPSBATERACitMREZMQUdTID0gQExERkxBR1NACitMSUJFUlRZX0xJQlMgPSBATElCRVJUWV9MSUJTQAorTElCT0JKUyA9IEBMSUJPQkpTQAorTElCUyA9IEBQT1BUX0xJQlNAIEBMSUJFUlRZX0xJQlNACitMSUJUT09MID0gQExJQlRPT0xACitMSVBPID0gQExJUE9ACitMTl9TID0gQExOX1NACitMVExJQk9CSlMgPSBATFRMSUJPQkpTQAorTUFLRUlORk8gPSBATUFLRUlORk9ACitNS0RJUl9QID0gQE1LRElSX1BACitNT0MgPSBATU9DQAorTU9ESU5TVEFMTERJUiA9IEBNT0RJTlNUQUxMRElSQAorTk0gPSBATk1ACitOTUVESVQgPSBATk1FRElUQAorT0JKRFVNUCA9IEBPQkpEVU1QQAorT0JKRVhUID0gQE9CSkVYVEAKK09QUk9GSUxFX0RJUiA9IEBPUFJPRklMRV9ESVJACitPUFJPRklMRV9NT0RVTEVfQVJDSCA9IEBPUFJPRklMRV9NT0RVTEVfQVJDSEAKK09QX0NGTEFHUyA9IEBPUF9DRkxBR1NACitPUF9DWFhGTEFHUyA9IEBPUF9DWFhGTEFHU0AKK09QX0RPQ0RJUiA9IEBPUF9ET0NESVJACitPVE9PTCA9IEBPVE9PTEAKK09UT09MNjQgPSBAT1RPT0w2NEAKK1BBQ0tBR0UgPSBAUEFDS0FHRUAKK1BBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAorUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKK1BBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAorUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKK1BBQ0tBR0VfVVJMID0gQFBBQ0tBR0VfVVJMQAorUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKK1BBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAorUEtHX0NPTkZJRyA9IEBQS0dfQ09ORklHQAorUEtHX0NPTkZJR19MSUJESVIgPSBAUEtHX0NPTkZJR19MSUJESVJACitQS0dfQ09ORklHX1BBVEggPSBAUEtHX0NPTkZJR19QQVRIQAorUE9QVF9MSUJTID0gQFBPUFRfTElCU0AKK1BUUkRJRkZfVF9UWVBFID0gQFBUUkRJRkZfVF9UWVBFQAorUVRfQ0ZMQUdTID0gQFFUX0NGTEFHU0AKK1FUX0lOQ0xVREVTID0gQFFUX0lOQ0xVREVTQAorUVRfTERGTEFHUyA9IEBRVF9MREZMQUdTQAorUVRfTElCID0gQFFUX0xJQkAKK1FUX0xJQlMgPSBAUVRfTElCU0AKK1FUX1ZFUlNJT04gPSBAUVRfVkVSU0lPTkAKK1JBTkxJQiA9IEBSQU5MSUJACitTRUQgPSBAU0VEQAorU0VUX01BS0UgPSBAU0VUX01BS0VACitTSEVMTCA9IEBTSEVMTEAKK1NJWkVfVF9UWVBFID0gQFNJWkVfVF9UWVBFQAorU1RSSVAgPSBAU1RSSVBACitVSUMgPSBAVUlDQAorVUlDaGVscCA9IEBVSUNoZWxwQAorVkVSU0lPTiA9IEBWRVJTSU9OQAorWE1LTUYgPSBAWE1LTUZACitYTUxfQ0FUQUxPRyA9IEBYTUxfQ0FUQUxPR0AKK1hTTFRQUk9DID0gQFhTTFRQUk9DQAorWFNMVFBST0NfRkxBR1MgPSBAWFNMVFBST0NfRkxBR1NACitYX0NGTEFHUyA9IEBYX0NGTEFHU0AKK1hfRVhUUkFfTElCUyA9IEBYX0VYVFJBX0xJQlNACitYX0xJQlMgPSBAWF9MSUJTQAorWF9QUkVfTElCUyA9IEBYX1BSRV9MSUJTQAorYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKK2Fic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKK2Fic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKK2Fic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAorYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACithY19jdF9DWFggPSBAYWNfY3RfQ1hYQAorYWNfY3RfRFVNUEJJTiA9IEBhY19jdF9EVU1QQklOQAorYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACithbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAorYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKK2FtX190YXIgPSBAYW1fX3RhckAKK2FtX191bnRhciA9IEBhbV9fdW50YXJACitiaW5kaXIgPSBAYmluZGlyQAorYnVpbGQgPSBAYnVpbGRACitidWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AKK2J1aWxkX2NwdSA9IEBidWlsZF9jcHVACitidWlsZF9vcyA9IEBidWlsZF9vc0AKK2J1aWxkX3ZlbmRvciA9IEBidWlsZF92ZW5kb3JACitidWlsZGRpciA9IEBidWlsZGRpckAKK2RhdGFkaXIgPSBAZGF0YWRpckAKK2RhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAorZG9jZGlyID0gQGRvY2RpckAKK2R2aWRpciA9IEBkdmlkaXJACitleGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKK2hvc3QgPSBAaG9zdEAKK2hvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKK2hvc3RfY3B1ID0gQGhvc3RfY3B1QAoraG9zdF9vcyA9IEBob3N0X29zQAoraG9zdF92ZW5kb3IgPSBAaG9zdF92ZW5kb3JACitodG1sZGlyID0gQGh0bWxkaXJACitpbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACitpbmZvZGlyID0gQGluZm9kaXJACitpbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACitsaWJkaXIgPSBAbGliZGlyQAorbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAorbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKK2xvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKK2x0X0VDSE8gPSBAbHRfRUNIT0AKK21hbmRpciA9IEBtYW5kaXJACitta2Rpcl9wID0gQG1rZGlyX3BACitvbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACitwZGZkaXIgPSBAcGRmZGlyQAorcHJlZml4ID0gQHByZWZpeEAKK3Byb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKK3BzZGlyID0gQHBzZGlyQAorc2JpbmRpciA9IEBzYmluZGlyQAorc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACitzcmNkaXIgPSBAc3JjZGlyQAorc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAordGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKK3RvcF9idWlsZF9wcmVmaXggPSBAdG9wX2J1aWxkX3ByZWZpeEAKK3RvcF9idWlsZGRpciA9IEB0b3BfYnVpbGRkaXJACit0b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACit0b3BkaXIgPSBAdG9wZGlyQAorU1VCRElSUyA9IC4gdGVzdHMKK0FNX0NQUEZMQUdTID0gXAorCS1JICR7dG9wX3NyY2Rpcn0vbGlib3AgXAorCS1JICR7dG9wX3NyY2Rpcn0vbGlidXRpbCBcCisJLUkgJHt0b3Bfc3JjZGlyfS9saWJkYiBcCisJLUkgJHt0b3Bfc3JjZGlyfS9saWJvcHQrKworCitBTV9DWFhGTEFHUyA9IEBPUF9DWFhGTEFHU0AKK25vaW5zdF9MSUJSQVJJRVMgPSBsaWJhYmkuYQorbGliYWJpX2FfU09VUkNFUyA9IGFiaS5jcHAgYWJpLmggb3BfYWJpLmMgb3BfYWJpLmgKK29waW1wb3J0X1NPVVJDRVMgPSBvcGltcG9ydC5jcHAKK29waW1wb3J0X0xEQUREID0gXAorCWxpYmFiaS5hIFwKKwkuLi9saWJkYi9saWJvZGIuYSBcCisJLi4vbGlib3B0KysvbGlib3B0KysuYSBcCisJLi4vbGlidXRpbCsrL2xpYnV0aWwrKy5hIFwKKwkuLi9saWJ1dGlsL2xpYnV0aWwuYQorCithbGw6IGFsbC1yZWN1cnNpdmUKKworLlNVRkZJWEVTOgorLlNVRkZJWEVTOiAuYyAuY3BwIC5sbyAubyAub2JqCiskKHNyY2RpcikvTWFrZWZpbGUuaW46ICAkKHNyY2RpcikvTWFrZWZpbGUuYW0gICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCUBmb3IgZGVwIGluICQ/OyBkbyBcCisJICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKKwkgICAgKiQkZGVwKikgXAorCSAgICAgICggY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoICkgXAorCSAgICAgICAgJiYgeyBpZiB0ZXN0IC1mICRAOyB0aGVuIGV4aXQgMDsgZWxzZSBicmVhazsgZmk7IH07IFwKKwkgICAgICBleGl0IDE7OyBcCisJICBlc2FjOyBcCisJZG9uZTsgXAorCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZm9yZWlnbiBsaWJhYmkvTWFrZWZpbGUnOyBcCisJJChhbV9fY2QpICQodG9wX3NyY2RpcikgJiYgXAorCSAgJChBVVRPTUFLRSkgLS1mb3JlaWduIGxpYmFiaS9NYWtlZmlsZQorLlBSRUNJT1VTOiBNYWtlZmlsZQorTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworCUBjYXNlICckPycgaW4gXAorCSAgKmNvbmZpZy5zdGF0dXMqKSBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKKwkgICopIFwKKwkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAorCWVzYWM7CisKKyQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorCiskKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorJChBQ0xPQ0FMX000KTogICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6CisKK2NsZWFuLW5vaW5zdExJQlJBUklFUzoKKwktdGVzdCAteiAiJChub2luc3RfTElCUkFSSUVTKSIgfHwgcm0gLWYgJChub2luc3RfTElCUkFSSUVTKQorbGliYWJpLmE6ICQobGliYWJpX2FfT0JKRUNUUykgJChsaWJhYmlfYV9ERVBFTkRFTkNJRVMpIAorCS1ybSAtZiBsaWJhYmkuYQorCSQobGliYWJpX2FfQVIpIGxpYmFiaS5hICQobGliYWJpX2FfT0JKRUNUUykgJChsaWJhYmlfYV9MSUJBREQpCisJJChSQU5MSUIpIGxpYmFiaS5hCitpbnN0YWxsLWJpblBST0dSQU1TOiAkKGJpbl9QUk9HUkFNUykKKwlAJChOT1JNQUxfSU5TVEFMTCkKKwl0ZXN0IC16ICIkKGJpbmRpcikiIHx8ICQoTUtESVJfUCkgIiQoREVTVERJUikkKGJpbmRpcikiCisJQGxpc3Q9JyQoYmluX1BST0dSQU1TKSc7IHRlc3QgLW4gIiQoYmluZGlyKSIgfHwgbGlzdD07IFwKKwlmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCAkJHAiOyBkb25lIHwgXAorCXNlZCAncy8kKEVYRUVYVCkkJC8vJyB8IFwKKwl3aGlsZSByZWFkIHAgcDE7IGRvIGlmIHRlc3QgLWYgJCRwIHx8IHRlc3QgLWYgJCRwMTsgXAorCSAgdGhlbiBlY2hvICIkJHAiOyBlY2hvICIkJHAiOyBlbHNlIDo7IGZpOyBcCisJZG9uZSB8IFwKKwlzZWQgLWUgJ3A7cywuKi8sLDtuO2gnIC1lICdzfC4qfC58JyBcCisJICAgIC1lICdwO3g7cywuKi8sLDtzLyQoRVhFRVhUKSQkLy87JCh0cmFuc2Zvcm0pO3MvJCQvJChFWEVFWFQpLycgfCBcCisJc2VkICdOO047TjtzLFxuLCAsZycgfCBcCisJJChBV0spICdCRUdJTiB7IGZpbGVzWyIuIl0gPSAiIjsgZGlyc1siLiJdID0gMSB9IFwKKwkgIHsgZD0kJDM7IGlmIChkaXJzW2RdICE9IDEpIHsgcHJpbnQgImQiLCBkOyBkaXJzW2RdID0gMSB9IFwKKwkgICAgaWYgKCQkMiA9PSAkJDQpIGZpbGVzW2RdID0gZmlsZXNbZF0gIiAiICQkMTsgXAorCSAgICBlbHNlIHsgcHJpbnQgImYiLCAkJDMgIi8iICQkNCwgJCQxOyB9IH0gXAorCSAgRU5EIHsgZm9yIChkIGluIGZpbGVzKSBwcmludCAiZiIsIGQsIGZpbGVzW2RdIH0nIHwgXAorCXdoaWxlIHJlYWQgdHlwZSBkaXIgZmlsZXM7IGRvIFwKKwkgICAgaWYgdGVzdCAiJCRkaXIiID0gLjsgdGhlbiBkaXI9OyBlbHNlIGRpcj0vJCRkaXI7IGZpOyBcCisJICAgIHRlc3QgLXogIiQkZmlsZXMiIHx8IHsgXAorCSAgICBlY2hvICIgJChJTlNUQUxMX1BST0dSQU1fRU5WKSAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWluc3RhbGwgJChJTlNUQUxMX1BST0dSQU0pICQkZmlsZXMgJyQoREVTVERJUikkKGJpbmRpcikkJGRpciciOyBcCisJICAgICQoSU5TVEFMTF9QUk9HUkFNX0VOVikgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1pbnN0YWxsICQoSU5TVEFMTF9QUk9HUkFNKSAkJGZpbGVzICIkKERFU1RESVIpJChiaW5kaXIpJCRkaXIiIHx8IGV4aXQgJCQ/OyBcCisJICAgIH0gXAorCTsgZG9uZQorCit1bmluc3RhbGwtYmluUFJPR1JBTVM6CisJQCQoTk9STUFMX1VOSU5TVEFMTCkKKwlAbGlzdD0nJChiaW5fUFJPR1JBTVMpJzsgdGVzdCAtbiAiJChiaW5kaXIpIiB8fCBsaXN0PTsgXAorCWZpbGVzPWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCI7IGRvbmUgfCBcCisJICBzZWQgLWUgJ2g7cyxeLiovLCw7cy8kKEVYRUVYVCkkJC8vOyQodHJhbnNmb3JtKScgXAorCSAgICAgIC1lICdzLyQkLyQoRVhFRVhUKS8nIGA7IFwKKwl0ZXN0IC1uICIkJGxpc3QiIHx8IGV4aXQgMDsgXAorCWVjaG8gIiAoIGNkICckKERFU1RESVIpJChiaW5kaXIpJyAmJiBybSAtZiIgJCRmaWxlcyAiKSI7IFwKKwljZCAiJChERVNURElSKSQoYmluZGlyKSIgJiYgcm0gLWYgJCRmaWxlcworCitjbGVhbi1iaW5QUk9HUkFNUzoKKwlAbGlzdD0nJChiaW5fUFJPR1JBTVMpJzsgdGVzdCAtbiAiJCRsaXN0IiB8fCBleGl0IDA7IFwKKwllY2hvICIgcm0gLWYiICQkbGlzdDsgXAorCXJtIC1mICQkbGlzdCB8fCBleGl0ICQkPzsgXAorCXRlc3QgLW4gIiQoRVhFRVhUKSIgfHwgZXhpdCAwOyBcCisJbGlzdD1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAiOyBkb25lIHwgc2VkICdzLyQoRVhFRVhUKSQkLy8nYDsgXAorCWVjaG8gIiBybSAtZiIgJCRsaXN0OyBcCisJcm0gLWYgJCRsaXN0CitvcGltcG9ydCQoRVhFRVhUKTogJChvcGltcG9ydF9PQkpFQ1RTKSAkKG9waW1wb3J0X0RFUEVOREVOQ0lFUykgCisJQHJtIC1mIG9waW1wb3J0JChFWEVFWFQpCisJJChDWFhMSU5LKSAkKG9waW1wb3J0X09CSkVDVFMpICQob3BpbXBvcnRfTERBREQpICQoTElCUykKKworbW9zdGx5Y2xlYW4tY29tcGlsZToKKwktcm0gLWYgKi4kKE9CSkVYVCkKKworZGlzdGNsZWFuLWNvbXBpbGU6CisJLXJtIC1mICoudGFiLmMKKworQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2FiaS5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvb3BfYWJpLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9vcGltcG9ydC5Qb0BhbV9fcXVvdGVACisKKy5jLm86CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJCouVHBvIC1jIC1vICRAICQ8CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENPTVBJTEUpIC1jICQ8CisKKy5jLm9iajoKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDT01QSUxFKSAtYyBgJChDWUdQQVRIX1cpICckPCdgCisKKy5jLmxvOgorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMVENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJCouVHBvIC1jIC1vICRAICQ8CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTFRDT01QSUxFKSAtYyAtbyAkQCAkPAorCisuY3BwLm86CitAYW1fX2Zhc3RkZXBDWFhfVFJVRUAJJChDWFhDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCAkPAorQGFtX19mYXN0ZGVwQ1hYX1RSVUVACSQoYW1fX212KSAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENYWF9GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENYWERFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAkkKENYWENPTVBJTEUpIC1jIC1vICRAICQ8CisKKy5jcHAub2JqOgorQGFtX19mYXN0ZGVwQ1hYX1RSVUVACSQoQ1hYQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYAorQGFtX19mYXN0ZGVwQ1hYX1RSVUVACSQoYW1fX212KSAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENYWF9GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENYWERFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAkkKENYWENPTVBJTEUpIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKKworLmNwcC5sbzoKK0BhbV9fZmFzdGRlcENYWF9UUlVFQAkkKExUQ1hYQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgJDwKK0BhbV9fZmFzdGRlcENYWF9UUlVFQAkkKGFtX19tdikgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENYWF9GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENYWERFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAkkKExUQ1hYQ09NUElMRSkgLWMgLW8gJEAgJDwKKworbW9zdGx5Y2xlYW4tbGlidG9vbDoKKwktcm0gLWYgKi5sbworCitjbGVhbi1saWJ0b29sOgorCS1ybSAtcmYgLmxpYnMgX2xpYnMKKworIyBUaGlzIGRpcmVjdG9yeSdzIHN1YmRpcmVjdG9yaWVzIGFyZSBtb3N0bHkgaW5kZXBlbmRlbnQ7IHlvdSBjYW4gY2QKKyMgaW50byB0aGVtIGFuZCBydW4gYG1ha2UnIHdpdGhvdXQgZ29pbmcgdGhyb3VnaCB0aGlzIE1ha2VmaWxlLgorIyBUbyBjaGFuZ2UgdGhlIHZhbHVlcyBvZiBgbWFrZScgdmFyaWFibGVzOiBpbnN0ZWFkIG9mIGVkaXRpbmcgTWFrZWZpbGVzLAorIyAoMSkgaWYgdGhlIHZhcmlhYmxlIGlzIHNldCBpbiBgY29uZmlnLnN0YXR1cycsIGVkaXQgYGNvbmZpZy5zdGF0dXMnCisjICAgICAod2hpY2ggd2lsbCBjYXVzZSB0aGUgTWFrZWZpbGVzIHRvIGJlIHJlZ2VuZXJhdGVkIHdoZW4geW91IHJ1biBgbWFrZScpOworIyAoMikgb3RoZXJ3aXNlLCBwYXNzIHRoZSBkZXNpcmVkIHZhbHVlcyBvbiB0aGUgYG1ha2UnIGNvbW1hbmQgbGluZS4KKyQoUkVDVVJTSVZFX1RBUkdFVFMpOgorCUBmYWlsPSBmYWlsY29tPSdleGl0IDEnOyBcCisJZm9yIGYgaW4geCAkJE1BS0VGTEFHUzsgZG8gXAorCSAgY2FzZSAkJGYgaW4gXAorCSAgICAqPSogfCAtLVsha10qKTs7IFwKKwkgICAgKmsqKSBmYWlsY29tPSdmYWlsPXllcyc7OyBcCisJICBlc2FjOyBcCisJZG9uZTsgXAorCWRvdF9zZWVuPW5vOyBcCisJdGFyZ2V0PWBlY2hvICRAIHwgc2VkIHMvLXJlY3Vyc2l2ZS8vYDsgXAorCWxpc3Q9JyQoU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAorCSAgZWNobyAiTWFraW5nICQkdGFyZ2V0IGluICQkc3ViZGlyIjsgXAorCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gIi4iOyB0aGVuIFwKKwkgICAgZG90X3NlZW49eWVzOyBcCisJICAgIGxvY2FsX3RhcmdldD0iJCR0YXJnZXQtYW0iOyBcCisJICBlbHNlIFwKKwkgICAgbG9jYWxfdGFyZ2V0PSIkJHRhcmdldCI7IFwKKwkgIGZpOyBcCisJICAoJChhbV9fY2QpICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICQkbG9jYWxfdGFyZ2V0KSBcCisJICB8fCBldmFsICQkZmFpbGNvbTsgXAorCWRvbmU7IFwKKwlpZiB0ZXN0ICIkJGRvdF9zZWVuIiA9ICJubyI7IHRoZW4gXAorCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgIiQkdGFyZ2V0LWFtIiB8fCBleGl0IDE7IFwKKwlmaTsgdGVzdCAteiAiJCRmYWlsIgorCiskKFJFQ1VSU0lWRV9DTEVBTl9UQVJHRVRTKToKKwlAZmFpbD0gZmFpbGNvbT0nZXhpdCAxJzsgXAorCWZvciBmIGluIHggJCRNQUtFRkxBR1M7IGRvIFwKKwkgIGNhc2UgJCRmIGluIFwKKwkgICAgKj0qIHwgLS1bIWtdKik7OyBcCisJICAgICprKikgZmFpbGNvbT0nZmFpbD15ZXMnOzsgXAorCSAgZXNhYzsgXAorCWRvbmU7IFwKKwlkb3Rfc2Vlbj1ubzsgXAorCWNhc2UgIiRAIiBpbiBcCisJICBkaXN0Y2xlYW4tKiB8IG1haW50YWluZXItY2xlYW4tKikgbGlzdD0nJChESVNUX1NVQkRJUlMpJyA7OyBcCisJICAqKSBsaXN0PSckKFNVQkRJUlMpJyA7OyBcCisJZXNhYzsgXAorCXJldj0nJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKwkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9ICIuIjsgdGhlbiA6OyBlbHNlIFwKKwkgICAgcmV2PSIkJHN1YmRpciAkJHJldiI7IFwKKwkgIGZpOyBcCisJZG9uZTsgXAorCXJldj0iJCRyZXYgLiI7IFwKKwl0YXJnZXQ9YGVjaG8gJEAgfCBzZWQgcy8tcmVjdXJzaXZlLy9gOyBcCisJZm9yIHN1YmRpciBpbiAkJHJldjsgZG8gXAorCSAgZWNobyAiTWFraW5nICQkdGFyZ2V0IGluICQkc3ViZGlyIjsgXAorCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gIi4iOyB0aGVuIFwKKwkgICAgbG9jYWxfdGFyZ2V0PSIkJHRhcmdldC1hbSI7IFwKKwkgIGVsc2UgXAorCSAgICBsb2NhbF90YXJnZXQ9IiQkdGFyZ2V0IjsgXAorCSAgZmk7IFwKKwkgICgkKGFtX19jZCkgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgJCRsb2NhbF90YXJnZXQpIFwKKwkgIHx8IGV2YWwgJCRmYWlsY29tOyBcCisJZG9uZSAmJiB0ZXN0IC16ICIkJGZhaWwiCit0YWdzLXJlY3Vyc2l2ZToKKwlsaXN0PSckKFNVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKwkgIHRlc3QgIiQkc3ViZGlyIiA9IC4gfHwgKCQoYW1fX2NkKSAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSB0YWdzKTsgXAorCWRvbmUKK2N0YWdzLXJlY3Vyc2l2ZToKKwlsaXN0PSckKFNVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKwkgIHRlc3QgIiQkc3ViZGlyIiA9IC4gfHwgKCQoYW1fX2NkKSAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBjdGFncyk7IFwKKwlkb25lCisKK0lEOiAkKEhFQURFUlMpICQoU09VUkNFUykgJChMSVNQKSAkKFRBR1NfRklMRVMpCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCisJICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCisJbWtpZCAtZklEICQkdW5pcXVlCit0YWdzOiBUQUdTCisKK1RBR1M6IHRhZ3MtcmVjdXJzaXZlICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAorCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKwlzZXQgeDsgXAorCWhlcmU9YHB3ZGA7IFwKKwlpZiAoJChFVEFHUykgLS1ldGFncy1pbmNsdWRlIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIFwKKwkgIGluY2x1ZGVfb3B0aW9uPS0tZXRhZ3MtaW5jbHVkZTsgXAorCSAgZW1wdHlfZml4PS47IFwKKwllbHNlIFwKKwkgIGluY2x1ZGVfb3B0aW9uPS0taW5jbHVkZTsgXAorCSAgZW1wdHlfZml4PTsgXAorCWZpOyBcCisJbGlzdD0nJChTVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAuOyB0aGVuIDo7IGVsc2UgXAorCSAgICB0ZXN0ICEgLWYgJCRzdWJkaXIvVEFHUyB8fCBcCisJICAgICAgc2V0ICIkJEAiICIkJGluY2x1ZGVfb3B0aW9uPSQkaGVyZS8kJHN1YmRpci9UQUdTIjsgXAorCSAgZmk7IFwKKwlkb25lOyBcCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorCXNoaWZ0OyBcCisJaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkKiQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKKwkgIHRlc3QgLW4gIiQkdW5pcXVlIiB8fCB1bmlxdWU9JCRlbXB0eV9maXg7IFwKKwkgIGlmIHRlc3QgJCQjIC1ndCAwOyB0aGVuIFwKKwkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAorCSAgICAgICIkJEAiICQkdW5pcXVlOyBcCisJICBlbHNlIFwKKwkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAorCSAgICAgICQkdW5pcXVlOyBcCisJICBmaTsgXAorCWZpCitjdGFnczogQ1RBR1MKK0NUQUdTOiBjdGFncy1yZWN1cnNpdmUgJChIRUFERVJTKSAkKFNPVVJDRVMpICAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCisJCSQoVEFHU19GSUxFUykgJChMSVNQKQorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKwkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKwl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR1bmlxdWUiIFwKKwkgIHx8ICQoQ1RBR1MpICQoQ1RBR1NGTEFHUykgJChBTV9DVEFHU0ZMQUdTKSAkKENUQUdTX0FSR1MpIFwKKwkgICAgICQkdW5pcXVlCisKK0dUQUdTOgorCWhlcmU9YCQoYW1fX2NkKSAkKHRvcF9idWlsZGRpcikgJiYgcHdkYCBcCisJICAmJiAkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSBcCisJICAmJiBndGFncyAtaSAkKEdUQUdTX0FSR1MpICIkJGhlcmUiCisKK2Rpc3RjbGVhbi10YWdzOgorCS1ybSAtZiBUQUdTIElEIEdUQUdTIEdSVEFHUyBHU1lNUyBHUEFUSCB0YWdzCisKK2Rpc3RkaXI6ICQoRElTVEZJTEVTKQorCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisJbGlzdD0nJChESVNURklMRVMpJzsgXAorCSAgZGlzdF9maWxlcz1gZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8IFwKKwkgIHNlZCAtZSAic3xeJCRzcmNkaXJzdHJpcC98fDt0IiBcCisJICAgICAgLWUgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98O3QiYDsgXAorCWNhc2UgJCRkaXN0X2ZpbGVzIGluIFwKKwkgICovKikgJChNS0RJUl9QKSBgZWNobyAiJCRkaXN0X2ZpbGVzIiB8IFwKKwkJCSAgIHNlZCAnL1wvLyFkO3N8XnwkKGRpc3RkaXIpL3w7cywvW14vXSokJCwsJyB8IFwKKwkJCSAgIHNvcnQgLXVgIDs7IFwKKwllc2FjOyBcCisJZm9yIGZpbGUgaW4gJCRkaXN0X2ZpbGVzOyBkbyBcCisJICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCisJICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAorCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAorCSAgICBpZiB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkZmlsZSI7IHRoZW4gXAorCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAorCSAgICBmaTsgXAorCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKKwkgICAgICBjcCAtZnBSICQoc3JjZGlyKS8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCisJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisJICAgIGZpOyBcCisJICAgIGNwIC1mcFIgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKKwkgIGVsc2UgXAorCSAgICB0ZXN0IC1mICIkKGRpc3RkaXIpLyQkZmlsZSIgXAorCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICIkKGRpc3RkaXIpLyQkZmlsZSIgXAorCSAgICB8fCBleGl0IDE7IFwKKwkgIGZpOyBcCisJZG9uZQorCUBsaXN0PSckKERJU1RfU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAorCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gLjsgdGhlbiA6OyBlbHNlIFwKKwkgICAgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJHN1YmRpciIgXAorCSAgICB8fCAkKE1LRElSX1ApICIkKGRpc3RkaXIpLyQkc3ViZGlyIiBcCisJICAgIHx8IGV4aXQgMTsgXAorCSAgZmk7IFwKKwlkb25lCisJQGxpc3Q9JyQoRElTVF9TVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAuOyB0aGVuIDo7IGVsc2UgXAorCSAgICBkaXIxPSQkc3ViZGlyOyBkaXIyPSIkKGRpc3RkaXIpLyQkc3ViZGlyIjsgXAorCSAgICAkKGFtX19yZWxhdGl2aXplKTsgXAorCSAgICBuZXdfZGlzdGRpcj0kJHJlbGRpcjsgXAorCSAgICBkaXIxPSQkc3ViZGlyOyBkaXIyPSIkKHRvcF9kaXN0ZGlyKSI7IFwKKwkgICAgJChhbV9fcmVsYXRpdml6ZSk7IFwKKwkgICAgbmV3X3RvcF9kaXN0ZGlyPSQkcmVsZGlyOyBcCisJICAgIGVjaG8gIiAoY2QgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgdG9wX2Rpc3RkaXI9IiQkbmV3X3RvcF9kaXN0ZGlyIiBkaXN0ZGlyPSIkJG5ld19kaXN0ZGlyIiBcXCI7IFwKKwkgICAgZWNobyAiICAgICBhbV9fcmVtb3ZlX2Rpc3RkaXI9OiBhbV9fc2tpcF9sZW5ndGhfY2hlY2s9OiBhbV9fc2tpcF9tb2RlX2ZpeD06IGRpc3RkaXIpIjsgXAorCSAgICAoJChhbV9fY2QpICQkc3ViZGlyICYmIFwKKwkgICAgICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBcCisJICAgICAgICB0b3BfZGlzdGRpcj0iJCRuZXdfdG9wX2Rpc3RkaXIiIFwKKwkgICAgICAgIGRpc3RkaXI9IiQkbmV3X2Rpc3RkaXIiIFwKKwkJYW1fX3JlbW92ZV9kaXN0ZGlyPTogXAorCQlhbV9fc2tpcF9sZW5ndGhfY2hlY2s9OiBcCisJCWFtX19za2lwX21vZGVfZml4PTogXAorCSAgICAgICAgZGlzdGRpcikgXAorCSAgICAgIHx8IGV4aXQgMTsgXAorCSAgZmk7IFwKKwlkb25lCitjaGVjay1hbTogYWxsLWFtCitjaGVjazogY2hlY2stcmVjdXJzaXZlCithbGwtYW06IE1ha2VmaWxlICQoTElCUkFSSUVTKSAkKFBST0dSQU1TKQoraW5zdGFsbGRpcnM6IGluc3RhbGxkaXJzLXJlY3Vyc2l2ZQoraW5zdGFsbGRpcnMtYW06CisJZm9yIGRpciBpbiAiJChERVNURElSKSQoYmluZGlyKSI7IGRvIFwKKwkgIHRlc3QgLXogIiQkZGlyIiB8fCAkKE1LRElSX1ApICIkJGRpciI7IFwKKwlkb25lCitpbnN0YWxsOiBpbnN0YWxsLXJlY3Vyc2l2ZQoraW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtcmVjdXJzaXZlCitpbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1yZWN1cnNpdmUKK3VuaW5zdGFsbDogdW5pbnN0YWxsLXJlY3Vyc2l2ZQorCitpbnN0YWxsLWFtOiBhbGwtYW0KKwlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQorCitpbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1yZWN1cnNpdmUKK2luc3RhbGwtc3RyaXA6CisJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKKwkgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorCSAgYHRlc3QgLXogJyQoU1RSSVApJyB8fCBcCisJICAgIGVjaG8gIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciYCBpbnN0YWxsCittb3N0bHljbGVhbi1nZW5lcmljOgorCitjbGVhbi1nZW5lcmljOgorCitkaXN0Y2xlYW4tZ2VuZXJpYzoKKwktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKKwktdGVzdCAuID0gIiQoc3JjZGlyKSIgfHwgdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykKKworbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgorCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKKwlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCitjbGVhbjogY2xlYW4tcmVjdXJzaXZlCisKK2NsZWFuLWFtOiBjbGVhbi1iaW5QUk9HUkFNUyBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgXAorCWNsZWFuLW5vaW5zdExJQlJBUklFUyBtb3N0bHljbGVhbi1hbQorCitkaXN0Y2xlYW46IGRpc3RjbGVhbi1yZWN1cnNpdmUKKwktcm0gLXJmIC4vJChERVBESVIpCisJLXJtIC1mIE1ha2VmaWxlCitkaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKKwlkaXN0Y2xlYW4tdGFncworCitkdmk6IGR2aS1yZWN1cnNpdmUKKworZHZpLWFtOgorCitodG1sOiBodG1sLXJlY3Vyc2l2ZQorCitodG1sLWFtOgorCitpbmZvOiBpbmZvLXJlY3Vyc2l2ZQorCitpbmZvLWFtOgorCitpbnN0YWxsLWRhdGEtYW06CisKK2luc3RhbGwtZHZpOiBpbnN0YWxsLWR2aS1yZWN1cnNpdmUKKworaW5zdGFsbC1kdmktYW06CisKK2luc3RhbGwtZXhlYy1hbTogaW5zdGFsbC1iaW5QUk9HUkFNUworCitpbnN0YWxsLWh0bWw6IGluc3RhbGwtaHRtbC1yZWN1cnNpdmUKKworaW5zdGFsbC1odG1sLWFtOgorCitpbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1yZWN1cnNpdmUKKworaW5zdGFsbC1pbmZvLWFtOgorCitpbnN0YWxsLW1hbjoKKworaW5zdGFsbC1wZGY6IGluc3RhbGwtcGRmLXJlY3Vyc2l2ZQorCitpbnN0YWxsLXBkZi1hbToKKworaW5zdGFsbC1wczogaW5zdGFsbC1wcy1yZWN1cnNpdmUKKworaW5zdGFsbC1wcy1hbToKKworaW5zdGFsbGNoZWNrLWFtOgorCittYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLXJlY3Vyc2l2ZQorCS1ybSAtcmYgLi8kKERFUERJUikKKwktcm0gLWYgTWFrZWZpbGUKK21haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKKworbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLXJlY3Vyc2l2ZQorCittb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIFwKKwltb3N0bHljbGVhbi1saWJ0b29sCisKK3BkZjogcGRmLXJlY3Vyc2l2ZQorCitwZGYtYW06CisKK3BzOiBwcy1yZWN1cnNpdmUKKworcHMtYW06CisKK3VuaW5zdGFsbC1hbTogdW5pbnN0YWxsLWJpblBST0dSQU1TCisKKy5NQUtFOiAkKFJFQ1VSU0lWRV9DTEVBTl9UQVJHRVRTKSAkKFJFQ1VSU0lWRV9UQVJHRVRTKSBjdGFncy1yZWN1cnNpdmUgXAorCWluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcCB0YWdzLXJlY3Vyc2l2ZQorCisuUEhPTlk6ICQoUkVDVVJTSVZFX0NMRUFOX1RBUkdFVFMpICQoUkVDVVJTSVZFX1RBUkdFVFMpIENUQUdTIEdUQUdTIFwKKwlhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWJpblBST0dSQU1TIFwKKwljbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgY2xlYW4tbm9pbnN0TElCUkFSSUVTIGN0YWdzIFwKKwljdGFncy1yZWN1cnNpdmUgZGlzdGNsZWFuIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKKwlkaXN0Y2xlYW4tbGlidG9vbCBkaXN0Y2xlYW4tdGFncyBkaXN0ZGlyIGR2aSBkdmktYW0gaHRtbCBcCisJaHRtbC1hbSBpbmZvIGluZm8tYW0gaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtYmluUFJPR1JBTVMgXAorCWluc3RhbGwtZGF0YSBpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgaW5zdGFsbC1kdmktYW0gXAorCWluc3RhbGwtZXhlYyBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1odG1sIGluc3RhbGwtaHRtbC1hbSBcCisJaW5zdGFsbC1pbmZvIGluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBpbnN0YWxsLXBkZiBcCisJaW5zdGFsbC1wZGYtYW0gaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIGluc3RhbGwtc3RyaXAgXAorCWluc3RhbGxjaGVjayBpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgaW5zdGFsbGRpcnMtYW0gXAorCW1haW50YWluZXItY2xlYW4gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIFwKKwltb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBcCisJcGRmIHBkZi1hbSBwcyBwcy1hbSB0YWdzIHRhZ3MtcmVjdXJzaXZlIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0gXAorCXVuaW5zdGFsbC1iaW5QUk9HUkFNUworCisKKyMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCisjIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KKy5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2xpYmFiaS9hYmkuY3BwIGIvb3Byb2ZpbGUtMC45LjcvbGliYWJpL2FiaS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDRhNmIyZAotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2xpYmFiaS9hYmkuY3BwCkBAIC0wLDAgKzEsNzUgQEAKKy8qKgorICogQGZpbGUgYWJpLmNwcAorICoKKyAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDIgT1Byb2ZpbGUgYXV0aG9ycworICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKKyAqCisgKiBAYXV0aG9yIEdyYXlkb24gSG9hcmUKKyAqIEBhdXRob3IgSm9obiBMZXZvbgorICogQGF1dGhvciBQaGlsaXBwZSBFbGllCisgKi8KKworI2luY2x1ZGUgImFiaS5oIgorI2luY2x1ZGUgIm9wX2FiaS5oIgorI2luY2x1ZGUgIm9kYi5oIgorI2luY2x1ZGUgIm9wX3NhbXBsZV9maWxlLmgiCisKKyNpbmNsdWRlIDxpb3N0cmVhbT4KKyNpbmNsdWRlIDxjYXNzZXJ0PgorCit1c2luZyBuYW1lc3BhY2Ugc3RkOworCit0eXBlZGVmIG1hcDxzdHJpbmcsIGludD4gYWJpX21hcDsKK3R5cGVkZWYgYWJpX21hcDo6Y29uc3RfaXRlcmF0b3IgYWJpX2l0ZXI7CisKK2FiaV9leGNlcHRpb246OmFiaV9leGNlcHRpb24oc3RyaW5nIGNvbnN0IGQpIDogZGVzYyhkKSB7fQorCisKK2FiaTo6YWJpKCkKK3sKKwlvcF9hYmlfZW50cnkgY29uc3QgKiBlbnRyeSA9IGdldF9hYmkoKTsKKwlmb3IgKCA7IGVudHJ5LT5uYW1lICE9IDA7ICsrZW50cnkpCisJCXNsb3RzW2VudHJ5LT5uYW1lXSA9IGVudHJ5LT5vZmZzZXQ7CisKKwlzbG90c1sibGl0dGxlX2VuZGlhbiJdID0gb3BfbGl0dGxlX2VuZGlhbigpOworfQorCisKK2ludCBhYmk6Om5lZWQoc3RyaW5nIGNvbnN0IGtleSkgY29uc3QgdGhyb3cgKGFiaV9leGNlcHRpb24pCit7CisJaWYgKHNsb3RzLmZpbmQoa2V5KSAhPSBzbG90cy5lbmQoKSkKKwkJcmV0dXJuIHNsb3RzLmZpbmQoa2V5KS0+c2Vjb25kOworCWVsc2UKKwkJdGhyb3cgYWJpX2V4Y2VwdGlvbihzdHJpbmcoIm1pc3NpbmcgQUJJIGtleTogIikgKyBrZXkpOworfQorCisKK2Jvb2wgYWJpOjpvcGVyYXRvcj09KGFiaSBjb25zdCAmIG90aGVyKSBjb25zdAoreworCXJldHVybiBzbG90cyA9PSBvdGhlci5zbG90czsKK30KKworCitvc3RyZWFtICYgb3BlcmF0b3I8PChvc3RyZWFtICYgbywgYWJpIGNvbnN0ICYgYWJpKQoreworCWFiaV9pdGVyIGkgPSBhYmkuc2xvdHMuYmVnaW4oKTsKKwlhYmlfaXRlciBlID0gYWJpLnNsb3RzLmVuZCgpOworCisJZm9yICg7IGkgIT0gZTsgKytpKQorCQlvIDw8IGktPmZpcnN0IDw8ICIgIiA8PCBpLT5zZWNvbmQgPDwgZW5kbDsKKworCXJldHVybiBvOworfQorCisKK2lzdHJlYW0gJiBvcGVyYXRvcj4+KGlzdHJlYW0gJiBpLCBhYmkgJiBhYmkpCit7CisJc3RyaW5nIGtleTsKKwlpbnQgdmFsOworCWFiaS5zbG90cy5jbGVhcigpOworCisJd2hpbGUoaSA+PiBrZXkgPj4gdmFsKQorCQlhYmkuc2xvdHNba2V5XSA9IHZhbDsKKworCXJldHVybiBpOworfQpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvbGliYWJpL2FiaS5oIGIvb3Byb2ZpbGUtMC45LjcvbGliYWJpL2FiaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiNjNlN2YKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9saWJhYmkvYWJpLmgKQEAgLTAsMCArMSw0MiBAQAorLyoqCisgKiBAZmlsZSBhYmkuaAorICoKKyAqIENvbnRhaW5zIGludGVybmFsIEFCSSBtYW5hZ2VtZW50IGNsYXNzCisgKgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMiBPUHJvZmlsZSBhdXRob3JzCisgKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORworICoKKyAqIEBhdXRob3IgR3JheWRvbiBIb2FyZQorICovCisKKyNpZm5kZWYgT1BST0ZfQUJJX0gKKyNkZWZpbmUgT1BST0ZfQUJJX0gKKyAKKyNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8bWFwPgorI2luY2x1ZGUgPGlvc2Z3ZD4KKworc3RydWN0IGFiaV9leGNlcHRpb24gOiBzdGQ6OmV4Y2VwdGlvbiB7CisJc3RkOjpzdHJpbmcgY29uc3QgZGVzYzsKKyAKKwlleHBsaWNpdCBhYmlfZXhjZXB0aW9uKHN0ZDo6c3RyaW5nIGNvbnN0IGQpOworIAorCX5hYmlfZXhjZXB0aW9uKCkgdGhyb3coKSB7fQorfTsKKworCitjbGFzcyBhYmkgeworcHVibGljOgorCWFiaSgpOworCisJaW50IG5lZWQoc3RkOjpzdHJpbmcgY29uc3Qga2V5KSBjb25zdCB0aHJvdyAoYWJpX2V4Y2VwdGlvbik7CisKKwlib29sIG9wZXJhdG9yPT0oYWJpIGNvbnN0ICYgb3RoZXIpIGNvbnN0OworCWZyaWVuZCBzdGQ6Om9zdHJlYW0gJiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSAmIG8sIGFiaSBjb25zdCAmIGFiaSk7CisJZnJpZW5kIHN0ZDo6aXN0cmVhbSAmIG9wZXJhdG9yPj4oc3RkOjppc3RyZWFtICYgaSwgYWJpICYgYWJpKTsKKworcHJpdmF0ZToKKwlzdGQ6Om1hcDxzdGQ6OnN0cmluZywgaW50PiBzbG90czsKK307CisKKyNlbmRpZiAvLyBPUFJPRl9BQklfSApkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvbGliYWJpL29wX2FiaS5jIGIvb3Byb2ZpbGUtMC45LjcvbGliYWJpL29wX2FiaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4M2UzZmYKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9saWJhYmkvb3BfYWJpLmMKQEAgLTAsMCArMSw5NCBAQAorLyoqCisgKiBAZmlsZSBvcF9hYmkuYworICogVGhpcyBmaWxlIGNvbnRhaW5zIGEgc2ltcGxlIEMgaW50ZXJmYWNlIHRvIHRoZSBBQkktZGVzY3JpYmluZyBmdW5jdGlvbmFsaXR5LAorICogdGhlIG1ham9yaXR5IG9mIHdoaWNoIGlzIGltcGxlbWVudGVkIGluIEMrKy4gVGhpcyBpcyB0aGUgZmlsZSB3aGljaCBpcyAKKyAqIGludGVuZGVkIGZvciB1c2UgaW4gZmlsZXMgb3V0c2lkZSB0aGUgL2xpYmFiaSBkaXJlY3RvcnkuCisgKgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMiwgMjAwNSBPUHJvZmlsZSBhdXRob3JzCisgKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORworICoKKyAqIEBhdXRob3IgR3JheWRvbiBIb2FyZQorICogQGF1dGhvciBQaGlsaXBwZSBFbGllCisgKi8KKworI2luY2x1ZGUgIm9wX2FiaS5oIgorI2luY2x1ZGUgIm9kYi5oIgorI2luY2x1ZGUgIm9wX3NhbXBsZV9maWxlLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPGFzc2VydC5oPgorCitzdGF0aWMgc3RydWN0IG9wX2FiaV9lbnRyeSBjb25zdCBhYmlfZW50cmllc1tdID0geworCXsgInNpemVvZl9kb3VibGUiLCBzaXplb2YoZG91YmxlKSB9LAorCXsgInNpemVvZl90aW1lX3QiLCBzaXplb2YodGltZV90KSB9LAorCXsgInNpemVvZl91OCIsIHNpemVvZih1OCkgfSwKKwl7ICJzaXplb2ZfdTMyIiwgc2l6ZW9mKHUzMikgfSwKKwl7ICJzaXplb2ZfaW50Iiwgc2l6ZW9mKGludCkgfSwKKwl7ICJzaXplb2ZfdW5zaWduZWRfaW50Iiwgc2l6ZW9mKHVuc2lnbmVkIGludCkgfSwKKwl7ICJzaXplb2Zfb2RiX2tleV90Iiwgc2l6ZW9mKG9kYl9rZXlfdCkgfSwKKwl7ICJzaXplb2Zfb2RiX2luZGV4X3QiLCBzaXplb2Yob2RiX2luZGV4X3QpIH0sCisJeyAic2l6ZW9mX29kYl92YWx1ZV90Iiwgc2l6ZW9mKG9kYl92YWx1ZV90KSB9LAorCXsgInNpemVvZl9vZGJfbm9kZV9ucl90Iiwgc2l6ZW9mKG9kYl9ub2RlX25yX3QpIH0sCisJeyAic2l6ZW9mX29kYl9kZXNjcl90Iiwgc2l6ZW9mKG9kYl9kZXNjcl90KSB9LAorCXsgInNpemVvZl9vZGJfbm9kZV90Iiwgc2l6ZW9mKG9kYl9ub2RlX3QpIH0sCisJeyAic2l6ZW9mX3N0cnVjdF9vcGRfaGVhZGVyIiwgc2l6ZW9mKHN0cnVjdCBvcGRfaGVhZGVyKSB9LAorCQorCXsgIm9mZnNldG9mX25vZGVfa2V5Iiwgb2Zmc2V0b2Yob2RiX25vZGVfdCwga2V5KSB9LAorCXsgIm9mZnNldG9mX25vZGVfdmFsdWUiLCBvZmZzZXRvZihvZGJfbm9kZV90LCB2YWx1ZSkgfSwKKwl7ICJvZmZzZXRvZl9ub2RlX25leHQiLCBvZmZzZXRvZihvZGJfbm9kZV90LCBuZXh0KSB9LAorCQorCXsgIm9mZnNldG9mX2Rlc2NyX3NpemUiLCBvZmZzZXRvZihvZGJfZGVzY3JfdCwgc2l6ZSkgfSwKKwl7ICJvZmZzZXRvZl9kZXNjcl9jdXJyZW50X3NpemUiLCBvZmZzZXRvZihvZGJfZGVzY3JfdCwgY3VycmVudF9zaXplKSB9LAorCQorCXsgIm9mZnNldG9mX2hlYWRlcl9tYWdpYyIsIG9mZnNldG9mKHN0cnVjdCBvcGRfaGVhZGVyLCBtYWdpYykgfSwKKwl7ICJvZmZzZXRvZl9oZWFkZXJfdmVyc2lvbiIsIG9mZnNldG9mKHN0cnVjdCBvcGRfaGVhZGVyLCB2ZXJzaW9uKSB9LAorCXsgIm9mZnNldG9mX2hlYWRlcl9jcHVfdHlwZSIsIG9mZnNldG9mKHN0cnVjdCBvcGRfaGVhZGVyLCBjcHVfdHlwZSkgfSwKKwl7ICJvZmZzZXRvZl9oZWFkZXJfY3RyX2V2ZW50Iiwgb2Zmc2V0b2Yoc3RydWN0IG9wZF9oZWFkZXIsIGN0cl9ldmVudCkgfSwKKwl7ICJvZmZzZXRvZl9oZWFkZXJfY3RyX3VtIiwgb2Zmc2V0b2Yoc3RydWN0IG9wZF9oZWFkZXIsIGN0cl91bSkgfSwKKwl7ICJvZmZzZXRvZl9oZWFkZXJfY3RyX2NvdW50Iiwgb2Zmc2V0b2Yoc3RydWN0IG9wZF9oZWFkZXIsIGN0cl9jb3VudCkgfSwKKwl7ICJvZmZzZXRvZl9oZWFkZXJfaXNfa2VybmVsIiwgb2Zmc2V0b2Yoc3RydWN0IG9wZF9oZWFkZXIsIGlzX2tlcm5lbCkgfSwKKwl7ICJvZmZzZXRvZl9oZWFkZXJfY3B1X3NwZWVkIiwgb2Zmc2V0b2Yoc3RydWN0IG9wZF9oZWFkZXIsIGNwdV9zcGVlZCkgfSwKKwl7ICJvZmZzZXRvZl9oZWFkZXJfbXRpbWUiLCBvZmZzZXRvZihzdHJ1Y3Qgb3BkX2hlYWRlciwgbXRpbWUpIH0sCisJeyAib2Zmc2V0b2ZfaGVhZGVyX2NnX3RvX2lzX2tlcm5lbCIsIG9mZnNldG9mKHN0cnVjdCBvcGRfaGVhZGVyLCBjZ190b19pc19rZXJuZWwpLCB9LAorCXsgIm9mZnNldG9mX2hlYWRlcl9hbm9uX3N0YXJ0Iiwgb2Zmc2V0b2Yoc3RydWN0IG9wZF9oZWFkZXIsIGFub25fc3RhcnQpIH0sCisJeyAib2Zmc2V0b2ZfaGVhZGVyX2NnX3RvX2Fub25fc3RhcnQiLCBvZmZzZXRvZihzdHJ1Y3Qgb3BkX2hlYWRlciwgY2dfdG9fYW5vbl9zdGFydCkgfSwKKwkKKwl7IE5VTEwsIDAgfSwKK307CisKKworc3RydWN0IG9wX2FiaV9lbnRyeSBjb25zdCAqIGdldF9hYmkodm9pZCkKK3sKKwlyZXR1cm4gYWJpX2VudHJpZXM7Cit9CisKKworaW50IG9wX2xpdHRsZV9lbmRpYW4odm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgcHJvYmUgPSAweGZmOworCXNpemVfdCBzeiA9IHNpemVvZih1bnNpZ25lZCBpbnQpOworCXVuc2lnbmVkIGNoYXIgKiBwcm9iZV9ieXRlID0gKHVuc2lnbmVkIGNoYXIgKikmcHJvYmU7CisKKwlhc3NlcnQocHJvYmVfYnl0ZVswXSA9PSAweGZmIHx8IHByb2JlX2J5dGVbc3ogLSAxXSA9PSAweGZmKTsKKworCXJldHVybiBwcm9iZV9ieXRlWzBdID09IDB4ZmY7Cit9CisKKworaW50IG9wX3dyaXRlX2FiaV90b19maWxlKGNoYXIgY29uc3QgKiBhYmlfZmlsZSkKK3sKKwlGSUxFICogZnA7CisJc3RydWN0IG9wX2FiaV9lbnRyeSBjb25zdCAqIGFiaV9lbnRyeTsKKworCWlmICgoZnAgPSBmb3BlbihhYmlfZmlsZSwgInciKSkgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlmb3IgKGFiaV9lbnRyeSA9IGdldF9hYmkoKSA7IGFiaV9lbnRyeS0+bmFtZSAhPSBOVUxMOyArK2FiaV9lbnRyeSkKKwkJZnByaW50ZihmcCwgIiVzICV1XG4iLCBhYmlfZW50cnktPm5hbWUsIGFiaV9lbnRyeS0+b2Zmc2V0KTsKKwlmcHJpbnRmKGZwLCAibGl0dGxlX2VuZGlhbiAlZFxuIiwgb3BfbGl0dGxlX2VuZGlhbigpKTsKKworCWZjbG9zZShmcCk7CisKKwlyZXR1cm4gMTsKK30KZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2xpYmFiaS9vcF9hYmkuaCBiL29wcm9maWxlLTAuOS43L2xpYmFiaS9vcF9hYmkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYmQzMzdiCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvbGliYWJpL29wX2FiaS5oCkBAIC0wLDAgKzEsNDMgQEAKKy8qKgorICogQGZpbGUgb3BfYWJpLmgKKyAqIFRoaXMgZmlsZSBjb250YWlucyBhIHNpbXBsZSBDIGludGVyZmFjZSB0byB0aGUgQUJJLWRlc2NyaWJpbmcgZnVuY3Rpb25hbGl0eSwKKyAqIHRoZSBtYWpvcml0eSBvZiB3aGljaCBpcyBpbXBsZW1lbnRlZCBpbiBDKysuIHRoaXMgaXMgdGhlIGZpbGUgd2hpY2ggaXMgCisgKiBpbnRlbmRlZCBmb3IgdXNlIGluIGZpbGVzIG91dHNpZGUgdGhlIC9saWJhYmkgZGlyZWN0b3J5LgorICoKKyAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDIgT1Byb2ZpbGUgYXV0aG9ycworICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKKyAqCisgKiBAYXV0aG9yIEdyYXlkb24gSG9hcmUKKyAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQorICovCisKKyNpZm5kZWYgT1BfQUJJX0gKKyNkZWZpbmUgT1BfQUJJX0gKKworc3RydWN0IG9wX2FiaV9lbnRyeSB7CisJY2hhciBjb25zdCAqIG5hbWU7CisJLy8vIG9mZnNldCBvciBzaXplIG9mIHRoZSBuYW1lZCBlbnRyeQorCWludCBvZmZzZXQ7Cit9OworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8vLyByZXR1cm4gYXJyYXkgaXMgdGVybWluYXRlZCBieSBhIE5VTEwgZW50cnkgaW4gbmFtZSBmaWVsZAorc3RydWN0IG9wX2FiaV9lbnRyeSBjb25zdCAqIGdldF9hYmkodm9pZCk7CisKKy8vLyByZXR1cm4gbm9uIHplcm8gaWYgdGhlIGFiaSBpcyBsaXR0bGUgZW5kaWFuCitpbnQgb3BfbGl0dGxlX2VuZGlhbih2b2lkKTsKKworLyoqCisgKiBXcml0ZSBjdXJyZW50IGFiaSB0byBmaWxlLgorICogcmV0dXJuIDEgb24gc3VjY2VzcywgMCBvbiBmYWlsdXJlCisgKi8KK2ludCBvcF93cml0ZV9hYmlfdG9fZmlsZShjaGFyIGNvbnN0ICogYWJpX2ZpbGUpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLy8gT1BfQUJJX0gKZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2xpYmFiaS9vcGltcG9ydC5jcHAgYi9vcHJvZmlsZS0wLjkuNy9saWJhYmkvb3BpbXBvcnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyNjgyOTMKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9saWJhYmkvb3BpbXBvcnQuY3BwCkBAIC0wLDAgKzEsMjI1IEBACisvKioKKyAqIEBmaWxlIG9waW1wb3J0LmNwcAorICogSW1wb3J0IHNhbXBsZSBmaWxlcyBmcm9tIG90aGVyIEFCSQorICoKKyAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDIgT1Byb2ZpbGUgYXV0aG9ycworICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKKyAqCisgKiBAYXV0aG9yIEdyYXlkb24gSG9hcmUKKyAqLworCisjaW5jbHVkZSAiYWJpLmgiCisjaW5jbHVkZSAib2RiLmgiCisjaW5jbHVkZSAicG9wdF9vcHRpb25zLmgiCisjaW5jbHVkZSAib3Bfc2FtcGxlX2ZpbGUuaCIKKworI2luY2x1ZGUgPGZzdHJlYW0+CisjaW5jbHVkZSA8aW9zdHJlYW0+CisjaW5jbHVkZSA8dmVjdG9yPgorI2luY2x1ZGUgPGNhc3NlcnQ+CisjaW5jbHVkZSA8Y3N0cmluZz4KKyNpbmNsdWRlIDxjc3RkbGliPgorCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN5cy9tbWFuLmg+CisjaW5jbHVkZSA8Y3N0ZGxpYj4KKyNpbmNsdWRlIDxjc3RyaW5nPgorCit1c2luZyBuYW1lc3BhY2Ugc3RkOworCituYW1lc3BhY2UgeworCXN0cmluZyBvdXRwdXRfZmlsZW5hbWU7CisJc3RyaW5nIGFiaV9maWxlbmFtZTsKKwlib29sIHZlcmJvc2U7CisJYm9vbCBmb3JjZTsKK307CisKKworcG9wdDo6b3B0aW9uIG9wdGlvbnNfYXJyYXlbXSA9IHsKKwlwb3B0OjpvcHRpb24odmVyYm9zZSwgInZlcmJvc2UiLCAnVicsICJ2ZXJib3NlIG91dHB1dCIpLAorCXBvcHQ6Om9wdGlvbihvdXRwdXRfZmlsZW5hbWUsICJvdXRwdXQiLCAnbycsICJvdXRwdXQgdG8gZmlsZSIsICJmaWxlbmFtZSIpLAorCXBvcHQ6Om9wdGlvbihhYmlfZmlsZW5hbWUsICJhYmkiLCAnYScsICJhYmkgZGVzY3JpcHRpb24iLCAiZmlsZW5hbWUiKSwKKwlwb3B0OjpvcHRpb24oZm9yY2UsICJmb3JjZSIsICdmJywgImZvcmNlIGNvbnZlcnNpb24sIGV2ZW4gaWYgaWRlbnRpY2FsIikKK307CisKKworc3RydWN0IGV4dHJhY3RvciB7CisKKwlhYmkgY29uc3QgJiB0aGVhYmk7CisKKwl1bnNpZ25lZCBjaGFyIGNvbnN0ICogYmVnaW47CisJdW5zaWduZWQgY2hhciBjb25zdCAqIGVuZDsKKwlib29sIGxpdHRsZV9lbmRpYW47CisKKwlleHBsaWNpdAorCWV4dHJhY3RvcihhYmkgY29uc3QgJiBhLCB1bnNpZ25lZCBjaGFyIGNvbnN0ICogc3JjLCBzaXplX3QgbGVuKQorCQk6IHRoZWFiaShhKSwgYmVnaW4oc3JjKSwgZW5kKHNyYyArIGxlbikgeworCQlsaXR0bGVfZW5kaWFuID0gdGhlYWJpLm5lZWQoc3RyaW5nKCJsaXR0bGVfZW5kaWFuIikpID09IDE7CisJCWlmICh2ZXJib3NlKSB7CisJCQljZXJyIDw8ICJzb3VyY2UgYnl0ZSBvcmRlciBpczogIgorCQkJICAgICA8PCBzdHJpbmcobGl0dGxlX2VuZGlhbiA/ICJsaXR0bGUiIDogImJpZyIpCisJCQkgICAgIDw8ICIgZW5kaWFuIiA8PCBlbmRsOworCQl9CisJfQorCisJdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisJdm9pZCBleHRyYWN0KFQgJiB0YXJnLCB2b2lkIGNvbnN0ICogc3JjXywKKwkgICAgICAgICAgICAgY2hhciBjb25zdCAqIHN6LCBjaGFyIGNvbnN0ICogb2ZmKTsKK307CisKKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cit2b2lkIGV4dHJhY3Rvcjo6ZXh0cmFjdChUICYgdGFyZywgdm9pZCBjb25zdCAqIHNyY18sCisgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIGNvbnN0ICogc3osIGNoYXIgY29uc3QgKiBvZmYpCit7CisJdW5zaWduZWQgY2hhciBjb25zdCAqIHNyYyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIgY29uc3QgKj4oc3JjXykKKwkJKyB0aGVhYmkubmVlZChvZmYpOworCXNpemVfdCBuYnl0ZXMgPSB0aGVhYmkubmVlZChzeik7CisKKwl0YXJnID0gMDsKKwlpZiAobmJ5dGVzID09IDApCisJCXJldHVybjsKKwkKKwlhc3NlcnQobmJ5dGVzIDw9IHNpemVvZihUKSk7CisJYXNzZXJ0KHNyYyA+PSBiZWdpbik7CisJYXNzZXJ0KHNyYyArIG5ieXRlcyA8PSBlbmQpOworCQorCWlmICh2ZXJib3NlKQorCQljZXJyIDw8IGhleCA8PCAiZ2V0ICIgPDwgc3ogPDwgIiA9ICIgPDwgbmJ5dGVzCisJCSAgICAgPDwgIiBieXRlcyBAICIgPDwgb2ZmIDw8ICIgPSAiIDw8IChzcmMgLSBiZWdpbikKKwkJICAgICA8PCAiIDogIjsKKworCWlmIChsaXR0bGVfZW5kaWFuKQorCQl3aGlsZShuYnl0ZXMtLSkKKwkJCXRhcmcgPSAodGFyZyA8PCA4KSB8IHNyY1tuYnl0ZXNdOworCWVsc2UKKwkJZm9yKHNpemVfdCBpID0gMDsgaSA8IG5ieXRlczsgKytpKQorCQkJdGFyZyA9ICh0YXJnIDw8IDgpIHwgc3JjW2ldOworCQorCWlmICh2ZXJib3NlKQorCQljZXJyIDw8ICIgPSAiIDw8IHRhcmcgPDwgZW5kbDsKK30KKworCit2b2lkIGltcG9ydF9mcm9tX2FiaShhYmkgY29uc3QgJiBhYmksIHZvaWQgY29uc3QgKiBzcmN2LAorICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbiwgb2RiX3QgKiBkZXN0KSB0aHJvdyAoYWJpX2V4Y2VwdGlvbikKK3sKKwlzdHJ1Y3Qgb3BkX2hlYWRlciAqIGhlYWQgPQorCQlzdGF0aWNfY2FzdDxvcGRfaGVhZGVyICo+KG9kYl9nZXRfZGF0YShkZXN0KSk7CisJdW5zaWduZWQgY2hhciBjb25zdCAqIHNyYyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIgY29uc3QgKj4oc3Jjdik7CisJdW5zaWduZWQgY2hhciBjb25zdCAqIGNvbnN0IGJlZ2luID0gc3JjOworCWV4dHJhY3RvciBleHQoYWJpLCBzcmMsIGxlbik7CQorCisJbWVtY3B5KGhlYWQtPm1hZ2ljLCBzcmMgKyBhYmkubmVlZCgib2Zmc2V0b2ZfaGVhZGVyX21hZ2ljIiksIDQpOworCisJLy8gYmVnaW4gZXh0cmFjdGluZyBvcGQgaGVhZGVyCisJZXh0LmV4dHJhY3QoaGVhZC0+dmVyc2lvbiwgc3JjLCAic2l6ZW9mX3UzMiIsICJvZmZzZXRvZl9oZWFkZXJfdmVyc2lvbiIpOworCWV4dC5leHRyYWN0KGhlYWQtPmNwdV90eXBlLCBzcmMsICJzaXplb2ZfdTMyIiwgIm9mZnNldG9mX2hlYWRlcl9jcHVfdHlwZSIpOworCWV4dC5leHRyYWN0KGhlYWQtPmN0cl9ldmVudCwgc3JjLCAic2l6ZW9mX3UzMiIsICJvZmZzZXRvZl9oZWFkZXJfY3RyX2V2ZW50Iik7CisJZXh0LmV4dHJhY3QoaGVhZC0+Y3RyX3VtLCBzcmMsICJzaXplb2ZfdTMyIiwgIm9mZnNldG9mX2hlYWRlcl9jdHJfdW0iKTsKKwlleHQuZXh0cmFjdChoZWFkLT5jdHJfY291bnQsIHNyYywgInNpemVvZl91MzIiLCAib2Zmc2V0b2ZfaGVhZGVyX2N0cl9jb3VudCIpOworCWV4dC5leHRyYWN0KGhlYWQtPmlzX2tlcm5lbCwgc3JjLCAic2l6ZW9mX3UzMiIsICJvZmZzZXRvZl9oZWFkZXJfaXNfa2VybmVsIik7CisJLy8gImRvdWJsZSIgZXh0cmFjdGlvbiBpcyB1bmxpa2VseSB0byB3b3JrCisJaGVhZC0+Y3B1X3NwZWVkID0gMC4wOworCWV4dC5leHRyYWN0KGhlYWQtPm10aW1lLCBzcmMsICJzaXplb2ZfdGltZV90IiwgIm9mZnNldG9mX2hlYWRlcl9tdGltZSIpOworCWV4dC5leHRyYWN0KGhlYWQtPmNnX3RvX2lzX2tlcm5lbCwgc3JjLCAic2l6ZW9mX3UzMiIsCisJCSJvZmZzZXRvZl9oZWFkZXJfY2dfdG9faXNfa2VybmVsIik7CisJZXh0LmV4dHJhY3QoaGVhZC0+YW5vbl9zdGFydCwgc3JjLCAic2l6ZW9mX3UzMiIsCisJCSJvZmZzZXRvZl9oZWFkZXJfYW5vbl9zdGFydCIpOworCWV4dC5leHRyYWN0KGhlYWQtPmNnX3RvX2Fub25fc3RhcnQsIHNyYywgInNpemVvZl91MzIiLAorCQkib2Zmc2V0b2ZfaGVhZGVyX2NnX3RvX2Fub25fc3RhcnQiKTsKKwlzcmMgKz0gYWJpLm5lZWQoInNpemVvZl9zdHJ1Y3Rfb3BkX2hlYWRlciIpOworCS8vIGRvbmUgZXh0cmFjdGluZyBvcGQgaGVhZGVyCisKKwkvLyBiZWdpbiBleHRyYWN0aW5nIG5lY2Vzc2FyeSBwYXJ0cyBvZiBkZXNjcgorCW9kYl9ub2RlX25yX3Qgbm9kZV9ucjsKKwlleHQuZXh0cmFjdChub2RlX25yLCBzcmMsICJzaXplb2Zfb2RiX25vZGVfbnJfdCIsICJvZmZzZXRvZl9kZXNjcl9jdXJyZW50X3NpemUiKTsKKwlzcmMgKz0gYWJpLm5lZWQoInNpemVvZl9vZGJfZGVzY3JfdCIpOworCS8vIGRvbmUgZXh0cmFjdGluZyBkZXNjcgorCisJLy8gc2tpcCBub2RlIHplcm8sIGl0IGlzIHJlc2VydmVkIGFuZCBjb250YWlucyBub3RoaW5nIHVzZWZ1bGwKKwlzcmMgKz0gYWJpLm5lZWQoInNpemVvZl9vZGJfbm9kZV90Iik7CisKKwkvLyBiZWdpbiBleHRyYWN0aW5nIG5vZGVzCisJdW5zaWduZWQgaW50IHN0ZXAgPSBhYmkubmVlZCgic2l6ZW9mX29kYl9ub2RlX3QiKTsKKwlpZiAodmVyYm9zZSkKKwkJY2VyciA8PCAiZXh0cmFjdGluZyAiIDw8IG5vZGVfbnIgPDwgIiBub2RlcyBvZiAiIDw8IHN0ZXAgPDwgIiBieXRlcyBlYWNoICIgPDwgZW5kbDsKKworCWFzc2VydChzcmMgKyAobm9kZV9uciAqIHN0ZXApIDw9IGJlZ2luICsgbGVuKTsKKworCWZvciAob2RiX25vZGVfbnJfdCBpID0gMSA7IGkgPCBub2RlX25yIDsgKytpLCBzcmMgKz0gc3RlcCkgeworCQlvZGJfa2V5X3Qga2V5OworCQlvZGJfdmFsdWVfdCB2YWw7CisJCWV4dC5leHRyYWN0KGtleSwgc3JjLCAic2l6ZW9mX29kYl9rZXlfdCIsICJvZmZzZXRvZl9ub2RlX2tleSIpOworCQlleHQuZXh0cmFjdCh2YWwsIHNyYywgInNpemVvZl9vZGJfdmFsdWVfdCIsICJvZmZzZXRvZl9ub2RlX3ZhbHVlIik7CisJCWludCByYyA9IG9kYl9hZGRfbm9kZShkZXN0LCBrZXksIHZhbCk7CisJCWlmIChyYyAhPSBFWElUX1NVQ0NFU1MpIHsKKwkJCWNlcnIgPDwgc3RyZXJyb3IocmMpIDw8IGVuZGw7CisJCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJCX0KKwl9CisJLy8gZG9uZSBleHRyYWN0aW5nIG5vZGVzCit9CisKKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgY29uc3QgKiogYXJndikKK3sKKworCXZlY3RvcjxzdHJpbmc+IGlucHV0czsKKwlwb3B0OjpwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIGlucHV0cyk7CisKKwlpZiAoaW5wdXRzLnNpemUoKSAhPSAxKSB7CisJCWNlcnIgPDwgImVycm9yOiBtdXN0IHNwZWNpZnkgZXhhY3RseSAxIGlucHV0IGZpbGUiIDw8IGVuZGw7CisJCWV4aXQoMSk7CisJfQorCisJYWJpIGN1cnJlbnRfYWJpLCBpbnB1dF9hYmk7CisKKwl7CisJCWlmc3RyZWFtIGFiaV9maWxlKGFiaV9maWxlbmFtZS5jX3N0cigpKTsKKwkJaWYgKCFhYmlfZmlsZSkgeworCQkJY2VyciA8PCAiZXJyb3I6IGNhbm5vdCBvcGVuIGFiaSBmaWxlICIKKwkJCSAgICAgPDwgYWJpX2ZpbGVuYW1lIDw8IGVuZGw7CisJCQlleGl0KDEpOworCQl9CisJCWFiaV9maWxlID4+IGlucHV0X2FiaTsKKwl9CisKKwlpZiAoIWZvcmNlICYmIGN1cnJlbnRfYWJpID09IGlucHV0X2FiaSkgeworCQljZXJyIDw8ICJpbnB1dCBhYmkgaXMgaWRlbnRpY2FsIHRvIG5hdGl2ZS4gIgorCQkgICAgIDw8ICJubyBjb252ZXJzaW9uIG5lY2Vzc2FyeS4iIDw8IGVuZGw7CisJCWV4aXQoMSk7CisJfQorCisJaW50IGluX2ZkOworCXN0cnVjdCBzdGF0IHN0YXRiOworCXZvaWQgKiBpbjsKKwlvZGJfdCBkZXN0OworCWludCByYzsKKworCWFzc2VydCgoaW5fZmQgPSBvcGVuKGlucHV0c1swXS5jX3N0cigpLCBPX1JET05MWSkpID4gMCk7CQkKKwlhc3NlcnQoZnN0YXQoaW5fZmQsICZzdGF0YikgPT0gMCk7CisJYXNzZXJ0KChpbiA9IG1tYXAoMCwgc3RhdGIuc3Rfc2l6ZSwgUFJPVF9SRUFELAorCQkJICBNQVBfUFJJVkFURSwgaW5fZmQsIDApKSAhPSAodm9pZCAqKS0xKTsKKworCXJjID0gb2RiX29wZW4oJmRlc3QsIG91dHB1dF9maWxlbmFtZS5jX3N0cigpLCBPREJfUkRXUiwKKwkJICAgICAgc2l6ZW9mKHN0cnVjdCBvcGRfaGVhZGVyKSk7CisJaWYgKHJjKSB7CisJCWNlcnIgPDwgIm9kYl9vcGVuKCkgZmFpbDpcbiIKKwkJICAgICA8PCBzdHJlcnJvcihyYykgPDwgZW5kbDsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKworCXRyeSB7CisJCWltcG9ydF9mcm9tX2FiaShpbnB1dF9hYmksIGluLCBzdGF0Yi5zdF9zaXplLCAmZGVzdCk7CisJfSBjYXRjaCAoYWJpX2V4Y2VwdGlvbiAmIGUpIHsKKwkJY2VyciA8PCAiY2F1Z2h0IGFiaSBleGNlcHRpb246ICIgPDwgZS5kZXNjIDw8IGVuZGw7CisJfQorCisJb2RiX2Nsb3NlKCZkZXN0KTsKKworCWFzc2VydChtdW5tYXAoaW4sIHN0YXRiLnN0X3NpemUpID09IDApOworfQpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvbGliYWJpL3Rlc3RzL01ha2VmaWxlLmFtIGIvb3Byb2ZpbGUtMC45LjcvbGliYWJpL3Rlc3RzL01ha2VmaWxlLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlYjdlMWEKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9saWJhYmkvdGVzdHMvTWFrZWZpbGUuYW0KQEAgLTAsMCArMSwyMSBAQAorTElCUz1AUE9QVF9MSUJTQCBATElCRVJUWV9MSUJTQAorCitBTV9DUFBGTEFHUyA9IFwKKwktSSAke3RvcF9zcmNkaXJ9L2xpYmFiaSBcCisJLUkgJHt0b3Bfc3JjZGlyfS9saWJvcCBcCisJLUkgJHt0b3Bfc3JjZGlyfS9saWJkYiBcCisJLUkgJHt0b3Bfc3JjZGlyfS9saWJvcHQrKyBcCisJLUkgJHt0b3Bfc3JjZGlyfS9saWJ1dGlsCisKK0FNX0NYWEZMQUdTID0gQE9QX0NYWEZMQUdTQAorCitjaGVja19QUk9HUkFNUyA9IGFiaV90ZXN0CisKK2FiaV90ZXN0X1NPVVJDRVMgPSBhYmlfdGVzdC5jcHAKK2FiaV90ZXN0X0xEQUREID0gXAorCS4uL2xpYmFiaS5hIFwKKwkuLi8uLi9saWJvcC9saWJvcC5hIFwKKwkuLi8uLi9saWJkYi9saWJvZGIuYSBcCisJLi4vLi4vbGlib3B0KysvbGlib3B0KysuYSBcCisJLi4vLi4vbGlidXRpbCsrL2xpYnV0aWwrKy5hIFwKKwkuLi8uLi9saWJ1dGlsL2xpYnV0aWwuYQpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvbGliYWJpL3Rlc3RzL01ha2VmaWxlLmluIGIvb3Byb2ZpbGUtMC45LjcvbGliYWJpL3Rlc3RzL01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkNWJmYjgKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9saWJhYmkvdGVzdHMvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSw1NDMgQEAKKyMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTEuMSBmcm9tIE1ha2VmaWxlLmFtLgorIyBAY29uZmlndXJlX2lucHV0QAorCisjIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwKKyMgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorIyBJbmMuCisjIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0CisjIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKKyMgUEFSVElDVUxBUiBQVVJQT1NFLgorCitAU0VUX01BS0VACitWUEFUSCA9IEBzcmNkaXJACitwa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKK3BrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAorcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAorcGtnbGliZXhlY2RpciA9ICQobGliZXhlY2RpcikvQFBBQ0tBR0VACithbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCitpbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAoraW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYworaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCitJTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQordHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQorTk9STUFMX0lOU1RBTEwgPSA6CitQUkVfSU5TVEFMTCA9IDoKK1BPU1RfSU5TVEFMTCA9IDoKK05PUk1BTF9VTklOU1RBTEwgPSA6CitQUkVfVU5JTlNUQUxMID0gOgorUE9TVF9VTklOU1RBTEwgPSA6CitidWlsZF90cmlwbGV0ID0gQGJ1aWxkQAoraG9zdF90cmlwbGV0ID0gQGhvc3RACitjaGVja19QUk9HUkFNUyA9IGFiaV90ZXN0JChFWEVFWFQpCitzdWJkaXIgPSBsaWJhYmkvdGVzdHMKK0RJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmFtICQoc3JjZGlyKS9NYWtlZmlsZS5pbgorQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAorYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvbTQvYmludXRpbHMubTQgXAorCSQodG9wX3NyY2RpcikvbTQvYnVpbHRpbmV4cGVjdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jZWxsc3B1YmZkc3VwcG9ydC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jb21waWxlcm9wdGlvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jb25maWdtb2R1bGUubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY29weWlmY2hhbmdlLm00ICQodG9wX3NyY2RpcikvbTQvZG9jYm9vay5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9leHRyYWRpcnMubTQgJCh0b3Bfc3JjZGlyKS9tNC9maW5ka2VybmVsLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2tlcm5lbG9wdGlvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9rZXJuZWx2ZXJzaW9uLm00ICQodG9wX3NyY2RpcikvbTQvbGlidG9vbC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9sdG9wdGlvbnMubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdHN1Z2FyLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2x0dmVyc2lvbi5tNCAkKHRvcF9zcmNkaXIpL200L2x0fm9ic29sZXRlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L21hbGxvY2F0dHJpYnV0ZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9wb3B0Y29uc3QubTQgXAorCSQodG9wX3NyY2RpcikvbTQvcHJlY29tcGlsZWRoZWFkZXIubTQgJCh0b3Bfc3JjZGlyKS9tNC9xdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9yZXN1bHR5bi5tNCAkKHRvcF9zcmNkaXIpL200L3NzdHJlYW0ubTQgXAorCSQodG9wX3NyY2RpcikvbTQvdHlwZWRlZi5tNCAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5pbgorYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKKwkkKEFDTE9DQUxfTTQpCitta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAorQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAorQ09ORklHX0NMRUFOX0ZJTEVTID0KK0NPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9CithbV9hYmlfdGVzdF9PQkpFQ1RTID0gYWJpX3Rlc3QuJChPQkpFWFQpCithYmlfdGVzdF9PQkpFQ1RTID0gJChhbV9hYmlfdGVzdF9PQkpFQ1RTKQorYWJpX3Rlc3RfREVQRU5ERU5DSUVTID0gLi4vbGliYWJpLmEgLi4vLi4vbGlib3AvbGlib3AuYSBcCisJLi4vLi4vbGliZGIvbGlib2RiLmEgLi4vLi4vbGlib3B0KysvbGlib3B0KysuYSBcCisJLi4vLi4vbGlidXRpbCsrL2xpYnV0aWwrKy5hIC4uLy4uL2xpYnV0aWwvbGlidXRpbC5hCitERUZBVUxUX0lOQ0xVREVTID0gLUkuQGFtX19pc3JjQCAtSSQodG9wX2J1aWxkZGlyKQorZGVwY29tcCA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvZGVwY29tcAorYW1fX2RlcGZpbGVzX21heWJlID0gZGVwZmlsZXMKK2FtX19tdiA9IG12IC1mCitDWFhDT01QSUxFID0gJChDWFgpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSBcCisJJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DWFhGTEFHUykgJChDWFhGTEFHUykKK0xUQ1hYQ09NUElMRSA9ICQoTElCVE9PTCkgLS10YWc9Q1hYICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgXAorCS0tbW9kZT1jb21waWxlICQoQ1hYKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgXAorCSQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ1hYRkxBR1MpICQoQ1hYRkxBR1MpCitDWFhMRCA9ICQoQ1hYKQorQ1hYTElOSyA9ICQoTElCVE9PTCkgLS10YWc9Q1hYICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgXAorCS0tbW9kZT1saW5rICQoQ1hYTEQpICQoQU1fQ1hYRkxBR1MpICQoQ1hYRkxBR1MpICQoQU1fTERGTEFHUykgXAorCSQoTERGTEFHUykgLW8gJEAKK1NPVVJDRVMgPSAkKGFiaV90ZXN0X1NPVVJDRVMpCitESVNUX1NPVVJDRVMgPSAkKGFiaV90ZXN0X1NPVVJDRVMpCitFVEFHUyA9IGV0YWdzCitDVEFHUyA9IGN0YWdzCitESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQorQUNMT0NBTCA9IEBBQ0xPQ0FMQAorQU1UQVIgPSBAQU1UQVJACitBUiA9IEBBUkAKK0FVVE9DT05GID0gQEFVVE9DT05GQAorQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAorQVVUT01BS0UgPSBAQVVUT01BS0VACitBV0sgPSBAQVdLQAorQkZEX0xJQlMgPSBAQkZEX0xJQlNACitDQVRfRU5UUllfRU5EID0gQENBVF9FTlRSWV9FTkRACitDQVRfRU5UUllfU1RBUlQgPSBAQ0FUX0VOVFJZX1NUQVJUQAorQ0MgPSBAQ0NACitDQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAorQ0ZMQUdTID0gQENGTEFHU0AKK0NQUCA9IEBDUFBACitDUFBGTEFHUyA9IEBDUFBGTEFHU0AKK0NYWCA9IEBDWFhACitDWFhDUFAgPSBAQ1hYQ1BQQAorQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAorQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACitDWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAorREFURSA9IEBEQVRFQAorREVGUyA9IEBERUZTQAorREVQRElSID0gQERFUERJUkAKK0RPQ0JPT0tfUk9PVCA9IEBET0NCT09LX1JPT1RACitEU1lNVVRJTCA9IEBEU1lNVVRJTEAKK0RVTVBCSU4gPSBARFVNUEJJTkAKK0VDSE9fQyA9IEBFQ0hPX0NACitFQ0hPX04gPSBARUNIT19OQAorRUNIT19UID0gQEVDSE9fVEAKK0VHUkVQID0gQEVHUkVQQAorRVhFRVhUID0gQEVYRUVYVEAKK0VYVFJBX0NGTEFHU19NT0RVTEUgPSBARVhUUkFfQ0ZMQUdTX01PRFVMRUAKK0ZHUkVQID0gQEZHUkVQQAorR1JFUCA9IEBHUkVQQAorSU5TVEFMTCA9IEBJTlNUQUxMQAorSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKK0lOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACitJTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKK0lOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACitKQVZBX0hPTUVESVIgPSBASkFWQV9IT01FRElSQAorS0lOQyA9IEBLSU5DQAorS1NSQyA9IEBLU1JDQAorS1ZFUlMgPSBAS1ZFUlNACitMRCA9IEBMREAKK0xERkxBR1MgPSBATERGTEFHU0AKK0xJQkVSVFlfTElCUyA9IEBMSUJFUlRZX0xJQlNACitMSUJPQkpTID0gQExJQk9CSlNACitMSUJTID0gQFBPUFRfTElCU0AgQExJQkVSVFlfTElCU0AKK0xJQlRPT0wgPSBATElCVE9PTEAKK0xJUE8gPSBATElQT0AKK0xOX1MgPSBATE5fU0AKK0xUTElCT0JKUyA9IEBMVExJQk9CSlNACitNQUtFSU5GTyA9IEBNQUtFSU5GT0AKK01LRElSX1AgPSBATUtESVJfUEAKK01PQyA9IEBNT0NACitNT0RJTlNUQUxMRElSID0gQE1PRElOU1RBTExESVJACitOTSA9IEBOTUAKK05NRURJVCA9IEBOTUVESVRACitPQkpEVU1QID0gQE9CSkRVTVBACitPQkpFWFQgPSBAT0JKRVhUQAorT1BST0ZJTEVfRElSID0gQE9QUk9GSUxFX0RJUkAKK09QUk9GSUxFX01PRFVMRV9BUkNIID0gQE9QUk9GSUxFX01PRFVMRV9BUkNIQAorT1BfQ0ZMQUdTID0gQE9QX0NGTEFHU0AKK09QX0NYWEZMQUdTID0gQE9QX0NYWEZMQUdTQAorT1BfRE9DRElSID0gQE9QX0RPQ0RJUkAKK09UT09MID0gQE9UT09MQAorT1RPT0w2NCA9IEBPVE9PTDY0QAorUEFDS0FHRSA9IEBQQUNLQUdFQAorUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACitQQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAorUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACitQQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAorUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACitQQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAorUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACitQS0dfQ09ORklHID0gQFBLR19DT05GSUdACitQS0dfQ09ORklHX0xJQkRJUiA9IEBQS0dfQ09ORklHX0xJQkRJUkAKK1BLR19DT05GSUdfUEFUSCA9IEBQS0dfQ09ORklHX1BBVEhACitQT1BUX0xJQlMgPSBAUE9QVF9MSUJTQAorUFRSRElGRl9UX1RZUEUgPSBAUFRSRElGRl9UX1RZUEVACitRVF9DRkxBR1MgPSBAUVRfQ0ZMQUdTQAorUVRfSU5DTFVERVMgPSBAUVRfSU5DTFVERVNACitRVF9MREZMQUdTID0gQFFUX0xERkxBR1NACitRVF9MSUIgPSBAUVRfTElCQAorUVRfTElCUyA9IEBRVF9MSUJTQAorUVRfVkVSU0lPTiA9IEBRVF9WRVJTSU9OQAorUkFOTElCID0gQFJBTkxJQkAKK1NFRCA9IEBTRURACitTRVRfTUFLRSA9IEBTRVRfTUFLRUAKK1NIRUxMID0gQFNIRUxMQAorU0laRV9UX1RZUEUgPSBAU0laRV9UX1RZUEVACitTVFJJUCA9IEBTVFJJUEAKK1VJQyA9IEBVSUNACitVSUNoZWxwID0gQFVJQ2hlbHBACitWRVJTSU9OID0gQFZFUlNJT05ACitYTUtNRiA9IEBYTUtNRkAKK1hNTF9DQVRBTE9HID0gQFhNTF9DQVRBTE9HQAorWFNMVFBST0MgPSBAWFNMVFBST0NACitYU0xUUFJPQ19GTEFHUyA9IEBYU0xUUFJPQ19GTEFHU0AKK1hfQ0ZMQUdTID0gQFhfQ0ZMQUdTQAorWF9FWFRSQV9MSUJTID0gQFhfRVhUUkFfTElCU0AKK1hfTElCUyA9IEBYX0xJQlNACitYX1BSRV9MSUJTID0gQFhfUFJFX0xJQlNACithYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAorYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAorYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAorYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACithY19jdF9DQyA9IEBhY19jdF9DQ0AKK2FjX2N0X0NYWCA9IEBhY19jdF9DWFhACithY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACithbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKK2FtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACithbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAorYW1fX3RhciA9IEBhbV9fdGFyQAorYW1fX3VudGFyID0gQGFtX191bnRhckAKK2JpbmRpciA9IEBiaW5kaXJACitidWlsZCA9IEBidWlsZEAKK2J1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAorYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKK2J1aWxkX29zID0gQGJ1aWxkX29zQAorYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKK2J1aWxkZGlyID0gQGJ1aWxkZGlyQAorZGF0YWRpciA9IEBkYXRhZGlyQAorZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACitkb2NkaXIgPSBAZG9jZGlyQAorZHZpZGlyID0gQGR2aWRpckAKK2V4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAoraG9zdCA9IEBob3N0QAoraG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAoraG9zdF9jcHUgPSBAaG9zdF9jcHVACitob3N0X29zID0gQGhvc3Rfb3NACitob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKK2h0bWxkaXIgPSBAaHRtbGRpckAKK2luY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKK2luZm9kaXIgPSBAaW5mb2RpckAKK2luc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKK2xpYmRpciA9IEBsaWJkaXJACitsaWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACitsb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAorbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAorbHRfRUNITyA9IEBsdF9FQ0hPQAorbWFuZGlyID0gQG1hbmRpckAKK21rZGlyX3AgPSBAbWtkaXJfcEAKK29sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKK3BkZmRpciA9IEBwZGZkaXJACitwcmVmaXggPSBAcHJlZml4QAorcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAorcHNkaXIgPSBAcHNkaXJACitzYmluZGlyID0gQHNiaW5kaXJACitzaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKK3NyY2RpciA9IEBzcmNkaXJACitzeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACit0YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAordG9wX2J1aWxkX3ByZWZpeCA9IEB0b3BfYnVpbGRfcHJlZml4QAordG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKK3RvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKK3RvcGRpciA9IEB0b3BkaXJACitBTV9DUFBGTEFHUyA9IFwKKwktSSAke3RvcF9zcmNkaXJ9L2xpYmFiaSBcCisJLUkgJHt0b3Bfc3JjZGlyfS9saWJvcCBcCisJLUkgJHt0b3Bfc3JjZGlyfS9saWJkYiBcCisJLUkgJHt0b3Bfc3JjZGlyfS9saWJvcHQrKyBcCisJLUkgJHt0b3Bfc3JjZGlyfS9saWJ1dGlsCisKK0FNX0NYWEZMQUdTID0gQE9QX0NYWEZMQUdTQAorYWJpX3Rlc3RfU09VUkNFUyA9IGFiaV90ZXN0LmNwcAorYWJpX3Rlc3RfTERBREQgPSBcCisJLi4vbGliYWJpLmEgXAorCS4uLy4uL2xpYm9wL2xpYm9wLmEgXAorCS4uLy4uL2xpYmRiL2xpYm9kYi5hIFwKKwkuLi8uLi9saWJvcHQrKy9saWJvcHQrKy5hIFwKKwkuLi8uLi9saWJ1dGlsKysvbGlidXRpbCsrLmEgXAorCS4uLy4uL2xpYnV0aWwvbGlidXRpbC5hCisKK2FsbDogYWxsLWFtCisKKy5TVUZGSVhFUzoKKy5TVUZGSVhFUzogLmNwcCAubG8gLm8gLm9iagorJChzcmNkaXIpL01ha2VmaWxlLmluOiAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKKwlAZm9yIGRlcCBpbiAkPzsgZG8gXAorCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCisJICAgICokJGRlcCopIFwKKwkgICAgICAoIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCApIFwKKwkgICAgICAgICYmIHsgaWYgdGVzdCAtZiAkQDsgdGhlbiBleGl0IDA7IGVsc2UgYnJlYWs7IGZpOyB9OyBcCisJICAgICAgZXhpdCAxOzsgXAorCSAgZXNhYzsgXAorCWRvbmU7IFwKKwllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gbGliYWJpL3Rlc3RzL01ha2VmaWxlJzsgXAorCSQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmIFwKKwkgICQoQVVUT01BS0UpIC0tZm9yZWlnbiBsaWJhYmkvdGVzdHMvTWFrZWZpbGUKKy5QUkVDSU9VUzogTWFrZWZpbGUKK01ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKKwlAY2FzZSAnJD8nIGluIFwKKwkgICpjb25maWcuc3RhdHVzKikgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCisJICAqKSBcCisJICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKKwllc2FjOworCiskKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKworJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6ICAkKGFtX19jb25maWd1cmVfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyQoQUNMT0NBTF9NNCk6ICAkKGFtX19hY2xvY2FsX200X2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCiskKGFtX19hY2xvY2FsX200X2RlcHMpOgorCitjbGVhbi1jaGVja1BST0dSQU1TOgorCUBsaXN0PSckKGNoZWNrX1BST0dSQU1TKSc7IHRlc3QgLW4gIiQkbGlzdCIgfHwgZXhpdCAwOyBcCisJZWNobyAiIHJtIC1mIiAkJGxpc3Q7IFwKKwlybSAtZiAkJGxpc3QgfHwgZXhpdCAkJD87IFwKKwl0ZXN0IC1uICIkKEVYRUVYVCkiIHx8IGV4aXQgMDsgXAorCWxpc3Q9YGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwIjsgZG9uZSB8IHNlZCAncy8kKEVYRUVYVCkkJC8vJ2A7IFwKKwllY2hvICIgcm0gLWYiICQkbGlzdDsgXAorCXJtIC1mICQkbGlzdAorYWJpX3Rlc3QkKEVYRUVYVCk6ICQoYWJpX3Rlc3RfT0JKRUNUUykgJChhYmlfdGVzdF9ERVBFTkRFTkNJRVMpIAorCUBybSAtZiBhYmlfdGVzdCQoRVhFRVhUKQorCSQoQ1hYTElOSykgJChhYmlfdGVzdF9PQkpFQ1RTKSAkKGFiaV90ZXN0X0xEQUREKSAkKExJQlMpCisKK21vc3RseWNsZWFuLWNvbXBpbGU6CisJLXJtIC1mICouJChPQkpFWFQpCisKK2Rpc3RjbGVhbi1jb21waWxlOgorCS1ybSAtZiAqLnRhYi5jCisKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9hYmlfdGVzdC5Qb0BhbV9fcXVvdGVACisKKy5jcHAubzoKK0BhbV9fZmFzdGRlcENYWF9UUlVFQAkkKENYWENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJCouVHBvIC1jIC1vICRAICQ8CitAYW1fX2Zhc3RkZXBDWFhfVFJVRUAJJChhbV9fbXYpICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ1hYREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACSQoQ1hYQ09NUElMRSkgLWMgLW8gJEAgJDwKKworLmNwcC5vYmo6CitAYW1fX2Zhc3RkZXBDWFhfVFJVRUAJJChDWFhDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgCitAYW1fX2Zhc3RkZXBDWFhfVFJVRUAJJChhbV9fbXYpICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ1hYREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACSQoQ1hYQ09NUElMRSkgLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYAorCisuY3BwLmxvOgorQGFtX19mYXN0ZGVwQ1hYX1RSVUVACSQoTFRDWFhDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCAkPAorQGFtX19mYXN0ZGVwQ1hYX1RSVUVACSQoYW1fX212KSAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENYWF9GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ1hYREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACSQoTFRDWFhDT01QSUxFKSAtYyAtbyAkQCAkPAorCittb3N0bHljbGVhbi1saWJ0b29sOgorCS1ybSAtZiAqLmxvCisKK2NsZWFuLWxpYnRvb2w6CisJLXJtIC1yZiAubGlicyBfbGlicworCitJRDogJChIRUFERVJTKSAkKFNPVVJDRVMpICQoTElTUCkgJChUQUdTX0ZJTEVTKQorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorCW1raWQgLWZJRCAkJHVuaXF1ZQordGFnczogVEFHUworCitUQUdTOiAgJChIRUFERVJTKSAkKFNPVVJDRVMpICAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCisJCSQoVEFHU19GSUxFUykgJChMSVNQKQorCXNldCB4OyBcCisJaGVyZT1gcHdkYDsgXAorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKwkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKwlzaGlmdDsgXAorCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJCokJHVuaXF1ZSI7IHRoZW4gOjsgZWxzZSBcCisJICB0ZXN0IC1uICIkJHVuaXF1ZSIgfHwgdW5pcXVlPSQkZW1wdHlfZml4OyBcCisJICBpZiB0ZXN0ICQkIyAtZ3QgMDsgdGhlbiBcCisJICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKwkgICAgICAiJCRAIiAkJHVuaXF1ZTsgXAorCSAgZWxzZSBcCisJICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKwkgICAgICAkJHVuaXF1ZTsgXAorCSAgZmk7IFwKKwlmaQorY3RhZ3M6IENUQUdTCitDVEFHUzogICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAorCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCisJICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCisJdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdW5pcXVlIiBcCisJICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCisJICAgICAkJHVuaXF1ZQorCitHVEFHUzoKKwloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAorCSAgJiYgJChhbV9fY2QpICQodG9wX3NyY2RpcikgXAorCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAiJCRoZXJlIgorCitkaXN0Y2xlYW4tdGFnczoKKwktcm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncworCitkaXN0ZGlyOiAkKERJU1RGSUxFUykKKwlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisJdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCWxpc3Q9JyQoRElTVEZJTEVTKSc7IFwKKwkgIGRpc3RfZmlsZXM9YGZvciBmaWxlIGluICQkbGlzdDsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBcCisJICBzZWQgLWUgInN8XiQkc3JjZGlyc3RyaXAvfHw7dCIgXAorCSAgICAgIC1lICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfDt0ImA7IFwKKwljYXNlICQkZGlzdF9maWxlcyBpbiBcCisJICAqLyopICQoTUtESVJfUCkgYGVjaG8gIiQkZGlzdF9maWxlcyIgfCBcCisJCQkgICBzZWQgJy9cLy8hZDtzfF58JChkaXN0ZGlyKS98O3MsL1teL10qJCQsLCcgfCBcCisJCQkgICBzb3J0IC11YCA7OyBcCisJZXNhYzsgXAorCWZvciBmaWxlIGluICQkZGlzdF9maWxlczsgZG8gXAorCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAorCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKKwkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKKwkgICAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJGZpbGUiOyB0aGVuIFwKKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKwkgICAgZmk7IFwKKwkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCisJICAgICAgY3AgLWZwUiAkKHNyY2RpcikvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAorCSAgICBmaTsgXAorCSAgICBjcCAtZnBSICQkZC8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCisJICBlbHNlIFwKKwkgICAgdGVzdCAtZiAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKKwkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKKwkgICAgfHwgZXhpdCAxOyBcCisJICBmaTsgXAorCWRvbmUKK2NoZWNrLWFtOiBhbGwtYW0KKwkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSAkKGNoZWNrX1BST0dSQU1TKQorY2hlY2s6IGNoZWNrLWFtCithbGwtYW06IE1ha2VmaWxlCitpbnN0YWxsZGlyczoKK2luc3RhbGw6IGluc3RhbGwtYW0KK2luc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLWFtCitpbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1hbQordW5pbnN0YWxsOiB1bmluc3RhbGwtYW0KKworaW5zdGFsbC1hbTogYWxsLWFtCisJQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KKworaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KK2luc3RhbGwtc3RyaXA6CisJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKKwkgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorCSAgYHRlc3QgLXogJyQoU1RSSVApJyB8fCBcCisJICAgIGVjaG8gIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciYCBpbnN0YWxsCittb3N0bHljbGVhbi1nZW5lcmljOgorCitjbGVhbi1nZW5lcmljOgorCitkaXN0Y2xlYW4tZ2VuZXJpYzoKKwktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKKwktdGVzdCAuID0gIiQoc3JjZGlyKSIgfHwgdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykKKworbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgorCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKKwlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCitjbGVhbjogY2xlYW4tYW0KKworY2xlYW4tYW06IGNsZWFuLWNoZWNrUFJPR1JBTVMgY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIFwKKwltb3N0bHljbGVhbi1hbQorCitkaXN0Y2xlYW46IGRpc3RjbGVhbi1hbQorCS1ybSAtcmYgLi8kKERFUERJUikKKwktcm0gLWYgTWFrZWZpbGUKK2Rpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAorCWRpc3RjbGVhbi10YWdzCisKK2R2aTogZHZpLWFtCisKK2R2aS1hbToKKworaHRtbDogaHRtbC1hbQorCitodG1sLWFtOgorCitpbmZvOiBpbmZvLWFtCisKK2luZm8tYW06CisKK2luc3RhbGwtZGF0YS1hbToKKworaW5zdGFsbC1kdmk6IGluc3RhbGwtZHZpLWFtCisKK2luc3RhbGwtZHZpLWFtOgorCitpbnN0YWxsLWV4ZWMtYW06CisKK2luc3RhbGwtaHRtbDogaW5zdGFsbC1odG1sLWFtCisKK2luc3RhbGwtaHRtbC1hbToKKworaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KKworaW5zdGFsbC1pbmZvLWFtOgorCitpbnN0YWxsLW1hbjoKKworaW5zdGFsbC1wZGY6IGluc3RhbGwtcGRmLWFtCisKK2luc3RhbGwtcGRmLWFtOgorCitpbnN0YWxsLXBzOiBpbnN0YWxsLXBzLWFtCisKK2luc3RhbGwtcHMtYW06CisKK2luc3RhbGxjaGVjay1hbToKKworbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1hbQorCS1ybSAtcmYgLi8kKERFUERJUikKKwktcm0gLWYgTWFrZWZpbGUKK21haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKKworbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLWFtCisKK21vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgXAorCW1vc3RseWNsZWFuLWxpYnRvb2wKKworcGRmOiBwZGYtYW0KKworcGRmLWFtOgorCitwczogcHMtYW0KKworcHMtYW06CisKK3VuaW5zdGFsbC1hbToKKworLk1BS0U6IGNoZWNrLWFtIGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcAorCisuUEhPTlk6IENUQUdTIEdUQUdTIGFsbCBhbGwtYW0gY2hlY2sgY2hlY2stYW0gY2xlYW4gXAorCWNsZWFuLWNoZWNrUFJPR1JBTVMgY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIGN0YWdzIFwKKwlkaXN0Y2xlYW4gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAorCWRpc3RjbGVhbi1saWJ0b29sIGRpc3RjbGVhbi10YWdzIGRpc3RkaXIgZHZpIGR2aS1hbSBodG1sIFwKKwlodG1sLWFtIGluZm8gaW5mby1hbSBpbnN0YWxsIGluc3RhbGwtYW0gaW5zdGFsbC1kYXRhIFwKKwlpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgaW5zdGFsbC1kdmktYW0gaW5zdGFsbC1leGVjIFwKKwlpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1odG1sIGluc3RhbGwtaHRtbC1hbSBpbnN0YWxsLWluZm8gXAorCWluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBpbnN0YWxsLXBkZiBpbnN0YWxsLXBkZi1hbSBcCisJaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIGluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIFwKKwlpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgbWFpbnRhaW5lci1jbGVhbiBcCisJbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIG1vc3RseWNsZWFuLWNvbXBpbGUgXAorCW1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBwZGYgcGRmLWFtIHBzIHBzLWFtIFwKKwl0YWdzIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0KKworCisjIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgorIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCisuTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9saWJhYmkvdGVzdHMvYWJpX3Rlc3QuY3BwIGIvb3Byb2ZpbGUtMC45LjcvbGliYWJpL3Rlc3RzL2FiaV90ZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTI5YTI4Ci0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvbGliYWJpL3Rlc3RzL2FiaV90ZXN0LmNwcApAQCAtMCwwICsxLDk2IEBACisvKioKKyAqIEBmaWxlIGFiaV90ZXN0LmNwcAorICogSW1wb3J0IHNhbXBsZSBmaWxlcyBmcm9tIG90aGVyIEFCSQorICoKKyAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDIgT1Byb2ZpbGUgYXV0aG9ycworICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKKyAqCisgKiBAYXV0aG9yIEdyYXlkb24gSG9hcmUgCisgKi8KKworI2luY2x1ZGUgImFiaS5oIgorI2luY2x1ZGUgIm9kYi5oIgorI2luY2x1ZGUgInBvcHRfb3B0aW9ucy5oIgorI2luY2x1ZGUgIm9wX3NhbXBsZV9maWxlLmgiCisjaW5jbHVkZSAib3BfY3B1X3R5cGUuaCIKKyNpbmNsdWRlICJvcF9jb25maWcuaCIKKworI2luY2x1ZGUgPGZzdHJlYW0+CisjaW5jbHVkZSA8aW9zdHJlYW0+CisKKyNpbmNsdWRlIDxjc3RkbGliPgorI2luY2x1ZGUgPGNzdHJpbmc+CisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisKK25hbWVzcGFjZSB7CisJc3RyaW5nIGRiX2ZpbGVuYW1lOworCXN0cmluZyBhYmlfZmlsZW5hbWU7Cit9CisKKworcG9wdDo6b3B0aW9uIG9wdGlvbnNfYXJyYXlbXSA9IHsKKwlwb3B0OjpvcHRpb24oZGJfZmlsZW5hbWUsICJkYiIsICdkJywgIm91dHB1dCBkYiB0byBmaWxlIiwgImZpbGVuYW1lIiksCisJcG9wdDo6b3B0aW9uKGFiaV9maWxlbmFtZSwgImFiaSIsICdhJywgIm91dHB1dCBhYmkgdG8gZmlsZSIsICJmaWxlbmFtZSIpCit9OworCisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyIGNvbnN0ICoqIGFyZ3YpCit7CisJdmVjdG9yPHN0cmluZz4gcmVzdDsKKwlwb3B0OjpwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHJlc3QpOworCisJaWYgKGFiaV9maWxlbmFtZS5lbXB0eSgpICYmIGRiX2ZpbGVuYW1lLmVtcHR5KCkpIHsKKwkJY2VyciA8PCAiZXJyb3I6IG5vIGZpbGUgc3BlY2lmaWVkIHRvIHdvcmsgb24iIDw8IGVuZGw7CisJCWV4aXQoMSk7CisJfQorCisKKwlpZiAoIWFiaV9maWxlbmFtZS5lbXB0eSgpKSB7CisJCW9mc3RyZWFtIGZpbGUoYWJpX2ZpbGVuYW1lLmNfc3RyKCkpOworCQlpZiAoIWZpbGUpIHsKKwkJCWNlcnIgPDwgImVycm9yOiBjYW5ub3Qgb3BlbiAiIDw8IGFiaV9maWxlbmFtZQorCQkJICAgICA8PCAiIGZvciB3cml0aW5nIiA8PCBlbmRsOworCQkJZXhpdCgxKTsKKwkJfQorCQlmaWxlIDw8IGFiaSgpOworCX0KKworCWlmICghZGJfZmlsZW5hbWUuZW1wdHkoKSkgeworCQlvZGJfdCBkZXN0OworCQlpbnQgcmMgPSBvZGJfb3BlbigmZGVzdCwgZGJfZmlsZW5hbWUuY19zdHIoKSwgT0RCX1JEV1IsCisJCSAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3Qgb3BkX2hlYWRlcikpOworCisJCWlmIChyYykgeworCQkJY2VyciA8PCAib2RiX29wZW4oKSBmYWlsOlxuIgorCQkJICAgICA8PCBzdHJlcnJvcihyYykgPDwgZW5kbDsKKwkJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwkJfQorCisJCXN0cnVjdCBvcGRfaGVhZGVyICogaGVhZGVyOworCQloZWFkZXIgPSBzdGF0aWNfY2FzdDxzdHJ1Y3Qgb3BkX2hlYWRlciAqPihvZGJfZ2V0X2RhdGEoJmRlc3QpKTsKKwkJbWVtc2V0KGhlYWRlciwgJ1wwJywgc2l6ZW9mKHN0cnVjdCBvcGRfaGVhZGVyKSk7CisJCWhlYWRlci0+dmVyc2lvbiA9IE9QRF9WRVJTSU9OOworCQltZW1jcHkoaGVhZGVyLT5tYWdpYywgT1BEX01BR0lDLCBzaXplb2YoaGVhZGVyLT5tYWdpYykpOworCQloZWFkZXItPmlzX2tlcm5lbCA9IDE7CisJCS8qIElDQUNIRV9GRVRDSEVTICovCisJCWhlYWRlci0+Y3RyX2V2ZW50ID0gMHg4MDsKKwkJaGVhZGVyLT5jdHJfdW0gPSAweDA7CisJCWhlYWRlci0+Y3B1X3R5cGUgPSBDUFVfQVRITE9OOworCQloZWFkZXItPmN0cl9jb3VudCA9IDB4ZGVhZGJlZWY7CisJCWhlYWRlci0+Y3B1X3NwZWVkID0gMDsKKwkJaGVhZGVyLT5tdGltZSA9IDEwMzQ3OTAwNjM7CisJCWhlYWRlci0+Y2dfdG9faXNfa2VybmVsID0gMTsKKwkJaGVhZGVyLT5hbm9uX3N0YXJ0ID0gMDsKKwkJaGVhZGVyLT5jZ190b19hbm9uX3N0YXJ0ID0gMDsKKyAgICAKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCAzNzkzOyArK2kpIHsKKwkJCWludCByYyA9IG9kYl9hZGRfbm9kZSgmZGVzdCwgaSwgaSk7CisJCQlpZiAocmMgIT0gRVhJVF9TVUNDRVNTKSB7CisJCQkJY2VyciA8PCBzdHJlcnJvcihyYykgPDwgZW5kbDsKKwkJCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJCQl9CisJCX0KKwkJb2RiX2Nsb3NlKCZkZXN0KTsKKwl9Cit9CmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9saWJkYi9NYWtlZmlsZS5hbSBiL29wcm9maWxlLTAuOS43L2xpYmRiL01ha2VmaWxlLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxNjU4ZjkKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9saWJkYi9NYWtlZmlsZS5hbQpAQCAtMCwwICsxLDE4IEBACitTVUJESVJTPS4gdGVzdHMKKworQU1fQ1BQRkxBR1MgPSBcCisJLUkgJHt0b3Bfc3JjZGlyfS9saWJvcCBcCisJLUkgJHt0b3Bfc3JjZGlyfS9saWJ1dGlsCisKK0FNX0NGTEFHUyA9IEBPUF9DRkxBR1NACisKK25vaW5zdF9MSUJSQVJJRVMgPSBsaWJvZGIuYQorCitsaWJvZGJfYV9TT1VSQ0VTID0gXAorCWRiX21hbmFnZS5jIFwKKwlkYl9pbnNlcnQuYyBcCisJZGJfdHJhdmVsLmMgXAorCWRiX2RlYnVnLmMgXAorCWRiX3N0YXQuYyBcCisJb2RiLmgKKwpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvbGliZGIvTWFrZWZpbGUuaW4gYi9vcHJvZmlsZS0wLjkuNy9saWJkYi9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDA3NTYxCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvbGliZGIvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSw2OTMgQEAKKyMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTEuMSBmcm9tIE1ha2VmaWxlLmFtLgorIyBAY29uZmlndXJlX2lucHV0QAorCisjIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwKKyMgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorIyBJbmMuCisjIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0CisjIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKKyMgUEFSVElDVUxBUiBQVVJQT1NFLgorCitAU0VUX01BS0VACisKK1ZQQVRIID0gQHNyY2RpckAKK3BrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAorcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACitwa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACitwa2dsaWJleGVjZGlyID0gJChsaWJleGVjZGlyKS9AUEFDS0FHRUAKK2FtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKK2luc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0CitpbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCitpbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKK0lOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCit0cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCitOT1JNQUxfSU5TVEFMTCA9IDoKK1BSRV9JTlNUQUxMID0gOgorUE9TVF9JTlNUQUxMID0gOgorTk9STUFMX1VOSU5TVEFMTCA9IDoKK1BSRV9VTklOU1RBTEwgPSA6CitQT1NUX1VOSU5TVEFMTCA9IDoKK2J1aWxkX3RyaXBsZXQgPSBAYnVpbGRACitob3N0X3RyaXBsZXQgPSBAaG9zdEAKK3N1YmRpciA9IGxpYmRiCitESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKHNyY2RpcikvTWFrZWZpbGUuaW4KK0FDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKK2FtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL200L2JpbnV0aWxzLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2J1aWx0aW5leHBlY3QubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY2VsbHNwdWJmZHN1cHBvcnQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY29tcGlsZXJvcHRpb24ubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY29uZmlnbW9kdWxlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2NvcHlpZmNoYW5nZS5tNCAkKHRvcF9zcmNkaXIpL200L2RvY2Jvb2subTQgXAorCSQodG9wX3NyY2RpcikvbTQvZXh0cmFkaXJzLm00ICQodG9wX3NyY2RpcikvbTQvZmluZGtlcm5lbC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9rZXJuZWxvcHRpb24ubTQgXAorCSQodG9wX3NyY2RpcikvbTQva2VybmVsdmVyc2lvbi5tNCAkKHRvcF9zcmNkaXIpL200L2xpYnRvb2wubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbHRvcHRpb25zLm00ICQodG9wX3NyY2RpcikvbTQvbHRzdWdhci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9sdHZlcnNpb24ubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdH5vYnNvbGV0ZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9tYWxsb2NhdHRyaWJ1dGUubTQgXAorCSQodG9wX3NyY2RpcikvbTQvcG9wdGNvbnN0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3ByZWNvbXBpbGVkaGVhZGVyLm00ICQodG9wX3NyY2RpcikvbTQvcXQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvcmVzdWx0eW4ubTQgJCh0b3Bfc3JjZGlyKS9tNC9zc3RyZWFtLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3R5cGVkZWYubTQgJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuaW4KK2FtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCisJJChBQ0xPQ0FMX000KQorbWtpbnN0YWxsZGlycyA9ICQoaW5zdGFsbF9zaCkgLWQKK0NPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvY29uZmlnLmgKK0NPTkZJR19DTEVBTl9GSUxFUyA9CitDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMgPQorTElCUkFSSUVTID0gJChub2luc3RfTElCUkFSSUVTKQorQVJGTEFHUyA9IGNydQorbGlib2RiX2FfQVIgPSAkKEFSKSAkKEFSRkxBR1MpCitsaWJvZGJfYV9MSUJBREQgPQorYW1fbGlib2RiX2FfT0JKRUNUUyA9IGRiX21hbmFnZS4kKE9CSkVYVCkgZGJfaW5zZXJ0LiQoT0JKRVhUKSBcCisJZGJfdHJhdmVsLiQoT0JKRVhUKSBkYl9kZWJ1Zy4kKE9CSkVYVCkgZGJfc3RhdC4kKE9CSkVYVCkKK2xpYm9kYl9hX09CSkVDVFMgPSAkKGFtX2xpYm9kYl9hX09CSkVDVFMpCitERUZBVUxUX0lOQ0xVREVTID0gLUkuQGFtX19pc3JjQCAtSSQodG9wX2J1aWxkZGlyKQorZGVwY29tcCA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvZGVwY29tcAorYW1fX2RlcGZpbGVzX21heWJlID0gZGVwZmlsZXMKK2FtX19tdiA9IG12IC1mCitDT01QSUxFID0gJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpIFwKKwkkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpCitMVENPTVBJTEUgPSAkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgXAorCS0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSBcCisJJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQorQ0NMRCA9ICQoQ0MpCitMSU5LID0gJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIFwKKwktLW1vZGU9bGluayAkKENDTEQpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgJChBTV9MREZMQUdTKSBcCisJJChMREZMQUdTKSAtbyAkQAorU09VUkNFUyA9ICQobGlib2RiX2FfU09VUkNFUykKK0RJU1RfU09VUkNFUyA9ICQobGlib2RiX2FfU09VUkNFUykKK1JFQ1VSU0lWRV9UQVJHRVRTID0gYWxsLXJlY3Vyc2l2ZSBjaGVjay1yZWN1cnNpdmUgZHZpLXJlY3Vyc2l2ZSBcCisJaHRtbC1yZWN1cnNpdmUgaW5mby1yZWN1cnNpdmUgaW5zdGFsbC1kYXRhLXJlY3Vyc2l2ZSBcCisJaW5zdGFsbC1kdmktcmVjdXJzaXZlIGluc3RhbGwtZXhlYy1yZWN1cnNpdmUgXAorCWluc3RhbGwtaHRtbC1yZWN1cnNpdmUgaW5zdGFsbC1pbmZvLXJlY3Vyc2l2ZSBcCisJaW5zdGFsbC1wZGYtcmVjdXJzaXZlIGluc3RhbGwtcHMtcmVjdXJzaXZlIGluc3RhbGwtcmVjdXJzaXZlIFwKKwlpbnN0YWxsY2hlY2stcmVjdXJzaXZlIGluc3RhbGxkaXJzLXJlY3Vyc2l2ZSBwZGYtcmVjdXJzaXZlIFwKKwlwcy1yZWN1cnNpdmUgdW5pbnN0YWxsLXJlY3Vyc2l2ZQorUkVDVVJTSVZFX0NMRUFOX1RBUkdFVFMgPSBtb3N0bHljbGVhbi1yZWN1cnNpdmUgY2xlYW4tcmVjdXJzaXZlCVwKKyAgZGlzdGNsZWFuLXJlY3Vyc2l2ZSBtYWludGFpbmVyLWNsZWFuLXJlY3Vyc2l2ZQorQU1fUkVDVVJTSVZFX1RBUkdFVFMgPSAkKFJFQ1VSU0lWRV9UQVJHRVRTOi1yZWN1cnNpdmU9KSBcCisJJChSRUNVUlNJVkVfQ0xFQU5fVEFSR0VUUzotcmVjdXJzaXZlPSkgdGFncyBUQUdTIGN0YWdzIENUQUdTIFwKKwlkaXN0ZGlyCitFVEFHUyA9IGV0YWdzCitDVEFHUyA9IGN0YWdzCitESVNUX1NVQkRJUlMgPSAkKFNVQkRJUlMpCitESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQorYW1fX3JlbGF0aXZpemUgPSBcCisgIGRpcjA9YHB3ZGA7IFwKKyAgc2VkX2ZpcnN0PSdzLF5cKFteL10qXCkvLiokJCxcMSwnOyBcCisgIHNlZF9yZXN0PSdzLF5bXi9dKi8qLCwnOyBcCisgIHNlZF9sYXN0PSdzLF4uKi9cKFteL10qXCkkJCxcMSwnOyBcCisgIHNlZF9idXRsYXN0PSdzLC8qW14vXSokJCwsJzsgXAorICB3aGlsZSB0ZXN0IC1uICIkJGRpcjEiOyBkbyBcCisgICAgZmlyc3Q9YGVjaG8gIiQkZGlyMSIgfCBzZWQgLWUgIiQkc2VkX2ZpcnN0ImA7IFwKKyAgICBpZiB0ZXN0ICIkJGZpcnN0IiAhPSAiLiI7IHRoZW4gXAorICAgICAgaWYgdGVzdCAiJCRmaXJzdCIgPSAiLi4iOyB0aGVuIFwKKyAgICAgICAgZGlyMj1gZWNobyAiJCRkaXIwIiB8IHNlZCAtZSAiJCRzZWRfbGFzdCJgLyIkJGRpcjIiOyBcCisgICAgICAgIGRpcjA9YGVjaG8gIiQkZGlyMCIgfCBzZWQgLWUgIiQkc2VkX2J1dGxhc3QiYDsgXAorICAgICAgZWxzZSBcCisgICAgICAgIGZpcnN0Mj1gZWNobyAiJCRkaXIyIiB8IHNlZCAtZSAiJCRzZWRfZmlyc3QiYDsgXAorICAgICAgICBpZiB0ZXN0ICIkJGZpcnN0MiIgPSAiJCRmaXJzdCI7IHRoZW4gXAorICAgICAgICAgIGRpcjI9YGVjaG8gIiQkZGlyMiIgfCBzZWQgLWUgIiQkc2VkX3Jlc3QiYDsgXAorICAgICAgICBlbHNlIFwKKyAgICAgICAgICBkaXIyPSIuLi8kJGRpcjIiOyBcCisgICAgICAgIGZpOyBcCisgICAgICAgIGRpcjA9IiQkZGlyMCIvIiQkZmlyc3QiOyBcCisgICAgICBmaTsgXAorICAgIGZpOyBcCisgICAgZGlyMT1gZWNobyAiJCRkaXIxIiB8IHNlZCAtZSAiJCRzZWRfcmVzdCJgOyBcCisgIGRvbmU7IFwKKyAgcmVsZGlyPSIkJGRpcjIiCitBQ0xPQ0FMID0gQEFDTE9DQUxACitBTVRBUiA9IEBBTVRBUkAKK0FSID0gQEFSQAorQVVUT0NPTkYgPSBAQVVUT0NPTkZACitBVVRPSEVBREVSID0gQEFVVE9IRUFERVJACitBVVRPTUFLRSA9IEBBVVRPTUFLRUAKK0FXSyA9IEBBV0tACitCRkRfTElCUyA9IEBCRkRfTElCU0AKK0NBVF9FTlRSWV9FTkQgPSBAQ0FUX0VOVFJZX0VOREAKK0NBVF9FTlRSWV9TVEFSVCA9IEBDQVRfRU5UUllfU1RBUlRACitDQyA9IEBDQ0AKK0NDREVQTU9ERSA9IEBDQ0RFUE1PREVACitDRkxBR1MgPSBAQ0ZMQUdTQAorQ1BQID0gQENQUEAKK0NQUEZMQUdTID0gQENQUEZMQUdTQAorQ1hYID0gQENYWEAKK0NYWENQUCA9IEBDWFhDUFBACitDWFhERVBNT0RFID0gQENYWERFUE1PREVACitDWFhGTEFHUyA9IEBDWFhGTEFHU0AKK0NZR1BBVEhfVyA9IEBDWUdQQVRIX1dACitEQVRFID0gQERBVEVACitERUZTID0gQERFRlNACitERVBESVIgPSBAREVQRElSQAorRE9DQk9PS19ST09UID0gQERPQ0JPT0tfUk9PVEAKK0RTWU1VVElMID0gQERTWU1VVElMQAorRFVNUEJJTiA9IEBEVU1QQklOQAorRUNIT19DID0gQEVDSE9fQ0AKK0VDSE9fTiA9IEBFQ0hPX05ACitFQ0hPX1QgPSBARUNIT19UQAorRUdSRVAgPSBARUdSRVBACitFWEVFWFQgPSBARVhFRVhUQAorRVhUUkFfQ0ZMQUdTX01PRFVMRSA9IEBFWFRSQV9DRkxBR1NfTU9EVUxFQAorRkdSRVAgPSBARkdSRVBACitHUkVQID0gQEdSRVBACitJTlNUQUxMID0gQElOU1RBTExACitJTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAorSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKK0lOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAorSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKK0pBVkFfSE9NRURJUiA9IEBKQVZBX0hPTUVESVJACitLSU5DID0gQEtJTkNACitLU1JDID0gQEtTUkNACitLVkVSUyA9IEBLVkVSU0AKK0xEID0gQExEQAorTERGTEFHUyA9IEBMREZMQUdTQAorTElCRVJUWV9MSUJTID0gQExJQkVSVFlfTElCU0AKK0xJQk9CSlMgPSBATElCT0JKU0AKK0xJQlMgPSBATElCU0AKK0xJQlRPT0wgPSBATElCVE9PTEAKK0xJUE8gPSBATElQT0AKK0xOX1MgPSBATE5fU0AKK0xUTElCT0JKUyA9IEBMVExJQk9CSlNACitNQUtFSU5GTyA9IEBNQUtFSU5GT0AKK01LRElSX1AgPSBATUtESVJfUEAKK01PQyA9IEBNT0NACitNT0RJTlNUQUxMRElSID0gQE1PRElOU1RBTExESVJACitOTSA9IEBOTUAKK05NRURJVCA9IEBOTUVESVRACitPQkpEVU1QID0gQE9CSkRVTVBACitPQkpFWFQgPSBAT0JKRVhUQAorT1BST0ZJTEVfRElSID0gQE9QUk9GSUxFX0RJUkAKK09QUk9GSUxFX01PRFVMRV9BUkNIID0gQE9QUk9GSUxFX01PRFVMRV9BUkNIQAorT1BfQ0ZMQUdTID0gQE9QX0NGTEFHU0AKK09QX0NYWEZMQUdTID0gQE9QX0NYWEZMQUdTQAorT1BfRE9DRElSID0gQE9QX0RPQ0RJUkAKK09UT09MID0gQE9UT09MQAorT1RPT0w2NCA9IEBPVE9PTDY0QAorUEFDS0FHRSA9IEBQQUNLQUdFQAorUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACitQQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAorUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACitQQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAorUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACitQQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAorUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACitQS0dfQ09ORklHID0gQFBLR19DT05GSUdACitQS0dfQ09ORklHX0xJQkRJUiA9IEBQS0dfQ09ORklHX0xJQkRJUkAKK1BLR19DT05GSUdfUEFUSCA9IEBQS0dfQ09ORklHX1BBVEhACitQT1BUX0xJQlMgPSBAUE9QVF9MSUJTQAorUFRSRElGRl9UX1RZUEUgPSBAUFRSRElGRl9UX1RZUEVACitRVF9DRkxBR1MgPSBAUVRfQ0ZMQUdTQAorUVRfSU5DTFVERVMgPSBAUVRfSU5DTFVERVNACitRVF9MREZMQUdTID0gQFFUX0xERkxBR1NACitRVF9MSUIgPSBAUVRfTElCQAorUVRfTElCUyA9IEBRVF9MSUJTQAorUVRfVkVSU0lPTiA9IEBRVF9WRVJTSU9OQAorUkFOTElCID0gQFJBTkxJQkAKK1NFRCA9IEBTRURACitTRVRfTUFLRSA9IEBTRVRfTUFLRUAKK1NIRUxMID0gQFNIRUxMQAorU0laRV9UX1RZUEUgPSBAU0laRV9UX1RZUEVACitTVFJJUCA9IEBTVFJJUEAKK1VJQyA9IEBVSUNACitVSUNoZWxwID0gQFVJQ2hlbHBACitWRVJTSU9OID0gQFZFUlNJT05ACitYTUtNRiA9IEBYTUtNRkAKK1hNTF9DQVRBTE9HID0gQFhNTF9DQVRBTE9HQAorWFNMVFBST0MgPSBAWFNMVFBST0NACitYU0xUUFJPQ19GTEFHUyA9IEBYU0xUUFJPQ19GTEFHU0AKK1hfQ0ZMQUdTID0gQFhfQ0ZMQUdTQAorWF9FWFRSQV9MSUJTID0gQFhfRVhUUkFfTElCU0AKK1hfTElCUyA9IEBYX0xJQlNACitYX1BSRV9MSUJTID0gQFhfUFJFX0xJQlNACithYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAorYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAorYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAorYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACithY19jdF9DQyA9IEBhY19jdF9DQ0AKK2FjX2N0X0NYWCA9IEBhY19jdF9DWFhACithY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACithbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKK2FtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACithbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAorYW1fX3RhciA9IEBhbV9fdGFyQAorYW1fX3VudGFyID0gQGFtX191bnRhckAKK2JpbmRpciA9IEBiaW5kaXJACitidWlsZCA9IEBidWlsZEAKK2J1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAorYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKK2J1aWxkX29zID0gQGJ1aWxkX29zQAorYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKK2J1aWxkZGlyID0gQGJ1aWxkZGlyQAorZGF0YWRpciA9IEBkYXRhZGlyQAorZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACitkb2NkaXIgPSBAZG9jZGlyQAorZHZpZGlyID0gQGR2aWRpckAKK2V4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAoraG9zdCA9IEBob3N0QAoraG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAoraG9zdF9jcHUgPSBAaG9zdF9jcHVACitob3N0X29zID0gQGhvc3Rfb3NACitob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKK2h0bWxkaXIgPSBAaHRtbGRpckAKK2luY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKK2luZm9kaXIgPSBAaW5mb2RpckAKK2luc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKK2xpYmRpciA9IEBsaWJkaXJACitsaWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACitsb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAorbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAorbHRfRUNITyA9IEBsdF9FQ0hPQAorbWFuZGlyID0gQG1hbmRpckAKK21rZGlyX3AgPSBAbWtkaXJfcEAKK29sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKK3BkZmRpciA9IEBwZGZkaXJACitwcmVmaXggPSBAcHJlZml4QAorcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAorcHNkaXIgPSBAcHNkaXJACitzYmluZGlyID0gQHNiaW5kaXJACitzaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKK3NyY2RpciA9IEBzcmNkaXJACitzeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACit0YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAordG9wX2J1aWxkX3ByZWZpeCA9IEB0b3BfYnVpbGRfcHJlZml4QAordG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKK3RvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKK3RvcGRpciA9IEB0b3BkaXJACitTVUJESVJTID0gLiB0ZXN0cworQU1fQ1BQRkxBR1MgPSBcCisJLUkgJHt0b3Bfc3JjZGlyfS9saWJvcCBcCisJLUkgJHt0b3Bfc3JjZGlyfS9saWJ1dGlsCisKK0FNX0NGTEFHUyA9IEBPUF9DRkxBR1NACitub2luc3RfTElCUkFSSUVTID0gbGlib2RiLmEKK2xpYm9kYl9hX1NPVVJDRVMgPSBcCisJZGJfbWFuYWdlLmMgXAorCWRiX2luc2VydC5jIFwKKwlkYl90cmF2ZWwuYyBcCisJZGJfZGVidWcuYyBcCisJZGJfc3RhdC5jIFwKKwlvZGIuaAorCithbGw6IGFsbC1yZWN1cnNpdmUKKworLlNVRkZJWEVTOgorLlNVRkZJWEVTOiAuYyAubG8gLm8gLm9iagorJChzcmNkaXIpL01ha2VmaWxlLmluOiAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKKwlAZm9yIGRlcCBpbiAkPzsgZG8gXAorCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCisJICAgICokJGRlcCopIFwKKwkgICAgICAoIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCApIFwKKwkgICAgICAgICYmIHsgaWYgdGVzdCAtZiAkQDsgdGhlbiBleGl0IDA7IGVsc2UgYnJlYWs7IGZpOyB9OyBcCisJICAgICAgZXhpdCAxOzsgXAorCSAgZXNhYzsgXAorCWRvbmU7IFwKKwllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gbGliZGIvTWFrZWZpbGUnOyBcCisJJChhbV9fY2QpICQodG9wX3NyY2RpcikgJiYgXAorCSAgJChBVVRPTUFLRSkgLS1mb3JlaWduIGxpYmRiL01ha2VmaWxlCisuUFJFQ0lPVVM6IE1ha2VmaWxlCitNYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCisJQGNhc2UgJyQ/JyBpbiBcCisJICAqY29uZmlnLnN0YXR1cyopIFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoOzsgXAorCSAgKikgXAorCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCisJZXNhYzsKKworJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2RpcikvY29uZmlndXJlICQoQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCisKKyQodG9wX3NyY2RpcikvY29uZmlndXJlOiAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCiskKEFDTE9DQUxfTTQpOiAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorJChhbV9fYWNsb2NhbF9tNF9kZXBzKToKKworY2xlYW4tbm9pbnN0TElCUkFSSUVTOgorCS10ZXN0IC16ICIkKG5vaW5zdF9MSUJSQVJJRVMpIiB8fCBybSAtZiAkKG5vaW5zdF9MSUJSQVJJRVMpCitsaWJvZGIuYTogJChsaWJvZGJfYV9PQkpFQ1RTKSAkKGxpYm9kYl9hX0RFUEVOREVOQ0lFUykgCisJLXJtIC1mIGxpYm9kYi5hCisJJChsaWJvZGJfYV9BUikgbGlib2RiLmEgJChsaWJvZGJfYV9PQkpFQ1RTKSAkKGxpYm9kYl9hX0xJQkFERCkKKwkkKFJBTkxJQikgbGlib2RiLmEKKworbW9zdGx5Y2xlYW4tY29tcGlsZToKKwktcm0gLWYgKi4kKE9CSkVYVCkKKworZGlzdGNsZWFuLWNvbXBpbGU6CisJLXJtIC1mICoudGFiLmMKKworQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2RiX2RlYnVnLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9kYl9pbnNlcnQuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2RiX21hbmFnZS5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvZGJfc3RhdC5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvZGJfdHJhdmVsLlBvQGFtX19xdW90ZUAKKworLmMubzoKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgJDwKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ09NUElMRSkgLWMgJDwKKworLmMub2JqOgorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENPTVBJTEUpIC1jIGAkKENZR1BBVEhfVykgJyQ8J2AKKworLmMubG86CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExUQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgJDwKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMVENPTVBJTEUpIC1jIC1vICRAICQ8CisKK21vc3RseWNsZWFuLWxpYnRvb2w6CisJLXJtIC1mICoubG8KKworY2xlYW4tbGlidG9vbDoKKwktcm0gLXJmIC5saWJzIF9saWJzCisKKyMgVGhpcyBkaXJlY3RvcnkncyBzdWJkaXJlY3RvcmllcyBhcmUgbW9zdGx5IGluZGVwZW5kZW50OyB5b3UgY2FuIGNkCisjIGludG8gdGhlbSBhbmQgcnVuIGBtYWtlJyB3aXRob3V0IGdvaW5nIHRocm91Z2ggdGhpcyBNYWtlZmlsZS4KKyMgVG8gY2hhbmdlIHRoZSB2YWx1ZXMgb2YgYG1ha2UnIHZhcmlhYmxlczogaW5zdGVhZCBvZiBlZGl0aW5nIE1ha2VmaWxlcywKKyMgKDEpIGlmIHRoZSB2YXJpYWJsZSBpcyBzZXQgaW4gYGNvbmZpZy5zdGF0dXMnLCBlZGl0IGBjb25maWcuc3RhdHVzJworIyAgICAgKHdoaWNoIHdpbGwgY2F1c2UgdGhlIE1ha2VmaWxlcyB0byBiZSByZWdlbmVyYXRlZCB3aGVuIHlvdSBydW4gYG1ha2UnKTsKKyMgKDIpIG90aGVyd2lzZSwgcGFzcyB0aGUgZGVzaXJlZCB2YWx1ZXMgb24gdGhlIGBtYWtlJyBjb21tYW5kIGxpbmUuCiskKFJFQ1VSU0lWRV9UQVJHRVRTKToKKwlAZmFpbD0gZmFpbGNvbT0nZXhpdCAxJzsgXAorCWZvciBmIGluIHggJCRNQUtFRkxBR1M7IGRvIFwKKwkgIGNhc2UgJCRmIGluIFwKKwkgICAgKj0qIHwgLS1bIWtdKik7OyBcCisJICAgICprKikgZmFpbGNvbT0nZmFpbD15ZXMnOzsgXAorCSAgZXNhYzsgXAorCWRvbmU7IFwKKwlkb3Rfc2Vlbj1ubzsgXAorCXRhcmdldD1gZWNobyAkQCB8IHNlZCBzLy1yZWN1cnNpdmUvL2A7IFwKKwlsaXN0PSckKFNVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKwkgIGVjaG8gIk1ha2luZyAkJHRhcmdldCBpbiAkJHN1YmRpciI7IFwKKwkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9ICIuIjsgdGhlbiBcCisJICAgIGRvdF9zZWVuPXllczsgXAorCSAgICBsb2NhbF90YXJnZXQ9IiQkdGFyZ2V0LWFtIjsgXAorCSAgZWxzZSBcCisJICAgIGxvY2FsX3RhcmdldD0iJCR0YXJnZXQiOyBcCisJICBmaTsgXAorCSAgKCQoYW1fX2NkKSAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSAkJGxvY2FsX3RhcmdldCkgXAorCSAgfHwgZXZhbCAkJGZhaWxjb207IFwKKwlkb25lOyBcCisJaWYgdGVzdCAiJCRkb3Rfc2VlbiIgPSAibm8iOyB0aGVuIFwKKwkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICIkJHRhcmdldC1hbSIgfHwgZXhpdCAxOyBcCisJZmk7IHRlc3QgLXogIiQkZmFpbCIKKworJChSRUNVUlNJVkVfQ0xFQU5fVEFSR0VUUyk6CisJQGZhaWw9IGZhaWxjb209J2V4aXQgMSc7IFwKKwlmb3IgZiBpbiB4ICQkTUFLRUZMQUdTOyBkbyBcCisJICBjYXNlICQkZiBpbiBcCisJICAgICo9KiB8IC0tWyFrXSopOzsgXAorCSAgICAqayopIGZhaWxjb209J2ZhaWw9eWVzJzs7IFwKKwkgIGVzYWM7IFwKKwlkb25lOyBcCisJZG90X3NlZW49bm87IFwKKwljYXNlICIkQCIgaW4gXAorCSAgZGlzdGNsZWFuLSogfCBtYWludGFpbmVyLWNsZWFuLSopIGxpc3Q9JyQoRElTVF9TVUJESVJTKScgOzsgXAorCSAgKikgbGlzdD0nJChTVUJESVJTKScgOzsgXAorCWVzYWM7IFwKKwlyZXY9Jyc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAiLiI7IHRoZW4gOjsgZWxzZSBcCisJICAgIHJldj0iJCRzdWJkaXIgJCRyZXYiOyBcCisJICBmaTsgXAorCWRvbmU7IFwKKwlyZXY9IiQkcmV2IC4iOyBcCisJdGFyZ2V0PWBlY2hvICRAIHwgc2VkIHMvLXJlY3Vyc2l2ZS8vYDsgXAorCWZvciBzdWJkaXIgaW4gJCRyZXY7IGRvIFwKKwkgIGVjaG8gIk1ha2luZyAkJHRhcmdldCBpbiAkJHN1YmRpciI7IFwKKwkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9ICIuIjsgdGhlbiBcCisJICAgIGxvY2FsX3RhcmdldD0iJCR0YXJnZXQtYW0iOyBcCisJICBlbHNlIFwKKwkgICAgbG9jYWxfdGFyZ2V0PSIkJHRhcmdldCI7IFwKKwkgIGZpOyBcCisJICAoJChhbV9fY2QpICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICQkbG9jYWxfdGFyZ2V0KSBcCisJICB8fCBldmFsICQkZmFpbGNvbTsgXAorCWRvbmUgJiYgdGVzdCAteiAiJCRmYWlsIgordGFncy1yZWN1cnNpdmU6CisJbGlzdD0nJChTVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICB0ZXN0ICIkJHN1YmRpciIgPSAuIHx8ICgkKGFtX19jZCkgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgdGFncyk7IFwKKwlkb25lCitjdGFncy1yZWN1cnNpdmU6CisJbGlzdD0nJChTVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICB0ZXN0ICIkJHN1YmRpciIgPSAuIHx8ICgkKGFtX19jZCkgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgY3RhZ3MpOyBcCisJZG9uZQorCitJRDogJChIRUFERVJTKSAkKFNPVVJDRVMpICQoTElTUCkgJChUQUdTX0ZJTEVTKQorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorCW1raWQgLWZJRCAkJHVuaXF1ZQordGFnczogVEFHUworCitUQUdTOiB0YWdzLXJlY3Vyc2l2ZSAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKKwkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCisJc2V0IHg7IFwKKwloZXJlPWBwd2RgOyBcCisJaWYgKCQoRVRBR1MpIC0tZXRhZ3MtaW5jbHVkZSAtLXZlcnNpb24pID4vZGV2L251bGwgMj4mMTsgdGhlbiBcCisJICBpbmNsdWRlX29wdGlvbj0tLWV0YWdzLWluY2x1ZGU7IFwKKwkgIGVtcHR5X2ZpeD0uOyBcCisJZWxzZSBcCisJICBpbmNsdWRlX29wdGlvbj0tLWluY2x1ZGU7IFwKKwkgIGVtcHR5X2ZpeD07IFwKKwlmaTsgXAorCWxpc3Q9JyQoU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAorCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gLjsgdGhlbiA6OyBlbHNlIFwKKwkgICAgdGVzdCAhIC1mICQkc3ViZGlyL1RBR1MgfHwgXAorCSAgICAgIHNldCAiJCRAIiAiJCRpbmNsdWRlX29wdGlvbj0kJGhlcmUvJCRzdWJkaXIvVEFHUyI7IFwKKwkgIGZpOyBcCisJZG9uZTsgXAorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKwkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKwlzaGlmdDsgXAorCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJCokJHVuaXF1ZSI7IHRoZW4gOjsgZWxzZSBcCisJICB0ZXN0IC1uICIkJHVuaXF1ZSIgfHwgdW5pcXVlPSQkZW1wdHlfZml4OyBcCisJICBpZiB0ZXN0ICQkIyAtZ3QgMDsgdGhlbiBcCisJICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKwkgICAgICAiJCRAIiAkJHVuaXF1ZTsgXAorCSAgZWxzZSBcCisJICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKwkgICAgICAkJHVuaXF1ZTsgXAorCSAgZmk7IFwKKwlmaQorY3RhZ3M6IENUQUdTCitDVEFHUzogY3RhZ3MtcmVjdXJzaXZlICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAorCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCisJICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCisJdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdW5pcXVlIiBcCisJICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCisJICAgICAkJHVuaXF1ZQorCitHVEFHUzoKKwloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAorCSAgJiYgJChhbV9fY2QpICQodG9wX3NyY2RpcikgXAorCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAiJCRoZXJlIgorCitkaXN0Y2xlYW4tdGFnczoKKwktcm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncworCitkaXN0ZGlyOiAkKERJU1RGSUxFUykKKwlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisJdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCWxpc3Q9JyQoRElTVEZJTEVTKSc7IFwKKwkgIGRpc3RfZmlsZXM9YGZvciBmaWxlIGluICQkbGlzdDsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBcCisJICBzZWQgLWUgInN8XiQkc3JjZGlyc3RyaXAvfHw7dCIgXAorCSAgICAgIC1lICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfDt0ImA7IFwKKwljYXNlICQkZGlzdF9maWxlcyBpbiBcCisJICAqLyopICQoTUtESVJfUCkgYGVjaG8gIiQkZGlzdF9maWxlcyIgfCBcCisJCQkgICBzZWQgJy9cLy8hZDtzfF58JChkaXN0ZGlyKS98O3MsL1teL10qJCQsLCcgfCBcCisJCQkgICBzb3J0IC11YCA7OyBcCisJZXNhYzsgXAorCWZvciBmaWxlIGluICQkZGlzdF9maWxlczsgZG8gXAorCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAorCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKKwkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKKwkgICAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJGZpbGUiOyB0aGVuIFwKKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKwkgICAgZmk7IFwKKwkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCisJICAgICAgY3AgLWZwUiAkKHNyY2RpcikvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAorCSAgICBmaTsgXAorCSAgICBjcCAtZnBSICQkZC8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCisJICBlbHNlIFwKKwkgICAgdGVzdCAtZiAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKKwkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKKwkgICAgfHwgZXhpdCAxOyBcCisJICBmaTsgXAorCWRvbmUKKwlAbGlzdD0nJChESVNUX1NVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKwkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9IC47IHRoZW4gOjsgZWxzZSBcCisJICAgIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRzdWJkaXIiIFwKKwkgICAgfHwgJChNS0RJUl9QKSAiJChkaXN0ZGlyKS8kJHN1YmRpciIgXAorCSAgICB8fCBleGl0IDE7IFwKKwkgIGZpOyBcCisJZG9uZQorCUBsaXN0PSckKERJU1RfU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAorCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gLjsgdGhlbiA6OyBlbHNlIFwKKwkgICAgZGlyMT0kJHN1YmRpcjsgZGlyMj0iJChkaXN0ZGlyKS8kJHN1YmRpciI7IFwKKwkgICAgJChhbV9fcmVsYXRpdml6ZSk7IFwKKwkgICAgbmV3X2Rpc3RkaXI9JCRyZWxkaXI7IFwKKwkgICAgZGlyMT0kJHN1YmRpcjsgZGlyMj0iJCh0b3BfZGlzdGRpcikiOyBcCisJICAgICQoYW1fX3JlbGF0aXZpemUpOyBcCisJICAgIG5ld190b3BfZGlzdGRpcj0kJHJlbGRpcjsgXAorCSAgICBlY2hvICIgKGNkICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIHRvcF9kaXN0ZGlyPSIkJG5ld190b3BfZGlzdGRpciIgZGlzdGRpcj0iJCRuZXdfZGlzdGRpciIgXFwiOyBcCisJICAgIGVjaG8gIiAgICAgYW1fX3JlbW92ZV9kaXN0ZGlyPTogYW1fX3NraXBfbGVuZ3RoX2NoZWNrPTogYW1fX3NraXBfbW9kZV9maXg9OiBkaXN0ZGlyKSI7IFwKKwkgICAgKCQoYW1fX2NkKSAkJHN1YmRpciAmJiBcCisJICAgICAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgXAorCSAgICAgICAgdG9wX2Rpc3RkaXI9IiQkbmV3X3RvcF9kaXN0ZGlyIiBcCisJICAgICAgICBkaXN0ZGlyPSIkJG5ld19kaXN0ZGlyIiBcCisJCWFtX19yZW1vdmVfZGlzdGRpcj06IFwKKwkJYW1fX3NraXBfbGVuZ3RoX2NoZWNrPTogXAorCQlhbV9fc2tpcF9tb2RlX2ZpeD06IFwKKwkgICAgICAgIGRpc3RkaXIpIFwKKwkgICAgICB8fCBleGl0IDE7IFwKKwkgIGZpOyBcCisJZG9uZQorY2hlY2stYW06IGFsbC1hbQorY2hlY2s6IGNoZWNrLXJlY3Vyc2l2ZQorYWxsLWFtOiBNYWtlZmlsZSAkKExJQlJBUklFUykKK2luc3RhbGxkaXJzOiBpbnN0YWxsZGlycy1yZWN1cnNpdmUKK2luc3RhbGxkaXJzLWFtOgoraW5zdGFsbDogaW5zdGFsbC1yZWN1cnNpdmUKK2luc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLXJlY3Vyc2l2ZQoraW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtcmVjdXJzaXZlCit1bmluc3RhbGw6IHVuaW5zdGFsbC1yZWN1cnNpdmUKKworaW5zdGFsbC1hbTogYWxsLWFtCisJQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KKworaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stcmVjdXJzaXZlCitpbnN0YWxsLXN0cmlwOgorCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisJICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKKwkgIGB0ZXN0IC16ICckKFNUUklQKScgfHwgXAorCSAgICBlY2hvICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknImAgaW5zdGFsbAorbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKKworY2xlYW4tZ2VuZXJpYzoKKworZGlzdGNsZWFuLWdlbmVyaWM6CisJLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCisJLXRlc3QgLiA9ICIkKHNyY2RpcikiIHx8IHRlc3QgLXogIiQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpCisKK21haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKKwlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCisJQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgorY2xlYW46IGNsZWFuLXJlY3Vyc2l2ZQorCitjbGVhbi1hbTogY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIGNsZWFuLW5vaW5zdExJQlJBUklFUyBcCisJbW9zdGx5Y2xlYW4tYW0KKworZGlzdGNsZWFuOiBkaXN0Y2xlYW4tcmVjdXJzaXZlCisJLXJtIC1yZiAuLyQoREVQRElSKQorCS1ybSAtZiBNYWtlZmlsZQorZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCisJZGlzdGNsZWFuLXRhZ3MKKworZHZpOiBkdmktcmVjdXJzaXZlCisKK2R2aS1hbToKKworaHRtbDogaHRtbC1yZWN1cnNpdmUKKworaHRtbC1hbToKKworaW5mbzogaW5mby1yZWN1cnNpdmUKKworaW5mby1hbToKKworaW5zdGFsbC1kYXRhLWFtOgorCitpbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktcmVjdXJzaXZlCisKK2luc3RhbGwtZHZpLWFtOgorCitpbnN0YWxsLWV4ZWMtYW06CisKK2luc3RhbGwtaHRtbDogaW5zdGFsbC1odG1sLXJlY3Vyc2l2ZQorCitpbnN0YWxsLWh0bWwtYW06CisKK2luc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLXJlY3Vyc2l2ZQorCitpbnN0YWxsLWluZm8tYW06CisKK2luc3RhbGwtbWFuOgorCitpbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtcmVjdXJzaXZlCisKK2luc3RhbGwtcGRmLWFtOgorCitpbnN0YWxsLXBzOiBpbnN0YWxsLXBzLXJlY3Vyc2l2ZQorCitpbnN0YWxsLXBzLWFtOgorCitpbnN0YWxsY2hlY2stYW06CisKK21haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tcmVjdXJzaXZlCisJLXJtIC1yZiAuLyQoREVQRElSKQorCS1ybSAtZiBNYWtlZmlsZQorbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYworCittb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tcmVjdXJzaXZlCisKK21vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgXAorCW1vc3RseWNsZWFuLWxpYnRvb2wKKworcGRmOiBwZGYtcmVjdXJzaXZlCisKK3BkZi1hbToKKworcHM6IHBzLXJlY3Vyc2l2ZQorCitwcy1hbToKKwordW5pbnN0YWxsLWFtOgorCisuTUFLRTogJChSRUNVUlNJVkVfQ0xFQU5fVEFSR0VUUykgJChSRUNVUlNJVkVfVEFSR0VUUykgY3RhZ3MtcmVjdXJzaXZlIFwKKwlpbnN0YWxsLWFtIGluc3RhbGwtc3RyaXAgdGFncy1yZWN1cnNpdmUKKworLlBIT05ZOiAkKFJFQ1VSU0lWRV9DTEVBTl9UQVJHRVRTKSAkKFJFQ1VSU0lWRV9UQVJHRVRTKSBDVEFHUyBHVEFHUyBcCisJYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgXAorCWNsZWFuLW5vaW5zdExJQlJBUklFUyBjdGFncyBjdGFncy1yZWN1cnNpdmUgZGlzdGNsZWFuIFwKKwlkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4tbGlidG9vbCBcCisJZGlzdGNsZWFuLXRhZ3MgZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgaHRtbC1hbSBpbmZvIGluZm8tYW0gXAorCWluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZHZpIFwKKwlpbnN0YWxsLWR2aS1hbSBpbnN0YWxsLWV4ZWMgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaHRtbCBcCisJaW5zdGFsbC1odG1sLWFtIGluc3RhbGwtaW5mbyBpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gXAorCWluc3RhbGwtcGRmIGluc3RhbGwtcGRmLWFtIGluc3RhbGwtcHMgaW5zdGFsbC1wcy1hbSBcCisJaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIFwKKwlpbnN0YWxsZGlycy1hbSBtYWludGFpbmVyLWNsZWFuIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBcCisJbW9zdGx5Y2xlYW4gbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIFwKKwltb3N0bHljbGVhbi1saWJ0b29sIHBkZiBwZGYtYW0gcHMgcHMtYW0gdGFncyB0YWdzLXJlY3Vyc2l2ZSBcCisJdW5pbnN0YWxsIHVuaW5zdGFsbC1hbQorCisKKyMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCisjIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KKy5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2xpYmRiL2RiX2RlYnVnLmMgYi9vcHJvZmlsZS0wLjkuNy9saWJkYi9kYl9kZWJ1Zy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjMDE4NjAKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9saWJkYi9kYl9kZWJ1Zy5jCkBAIC0wLDAgKzEsMTMzIEBACisvKioKKyAqIEBmaWxlIGRiX2RlYnVnLmMKKyAqIERlYnVnIHJvdXRpbmVzIGZvciBsaWJkYgorICoKKyAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDIgT1Byb2ZpbGUgYXV0aG9ycworICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKKyAqCisgKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgIm9kYi5oIgorCitzdGF0aWMgaW50IGNoZWNrX2NpcmN1bGFyX2xpc3Qob2RiX2RhdGFfdCBjb25zdCAqIGRhdGEpCit7CisJb2RiX25vZGVfbnJfdCBwb3M7CisJaW50IGRvX2Fib3J0ID0gMDsKKwl1bnNpZ25lZCBjaGFyICogYml0bWFwID0gbWFsbG9jKGRhdGEtPmRlc2NyLT5jdXJyZW50X3NpemUpOworCW1lbXNldChiaXRtYXAsICdcMCcsIGRhdGEtPmRlc2NyLT5jdXJyZW50X3NpemUpOworCisJZm9yIChwb3MgPSAwIDsgcG9zIDwgZGF0YS0+ZGVzY3ItPnNpemUgKiBCVUNLRVRfRkFDVE9SIDsgKytwb3MpIHsKKworCQlvZGJfaW5kZXhfdCBpbmRleCA9IGRhdGEtPmhhc2hfYmFzZVtwb3NdOworCQlpZiAoaW5kZXggJiYgIWRvX2Fib3J0KSB7CisJCQl3aGlsZSAoaW5kZXgpIHsKKwkJCQlpZiAoYml0bWFwW2luZGV4XSkKKwkJCQkJZG9fYWJvcnQgPSAxOworCisJCQkJYml0bWFwW2luZGV4XSA9IDE7CisJCQkJaW5kZXggPSBkYXRhLT5ub2RlX2Jhc2VbaW5kZXhdLm5leHQ7CisJCQl9CisJCX0KKworCQlpZiAoZG9fYWJvcnQpIHsKKwkJCXByaW50ZigiY2lyY3VsYXIgbGlzdCBkZXRlY3RlZCBzaXplOiAlZFxuIiwKKwkJCSAgICAgICBkYXRhLT5kZXNjci0+Y3VycmVudF9zaXplKTsKKworCQkJbWVtc2V0KGJpdG1hcCwgJ1wwJywgZGF0YS0+ZGVzY3ItPmN1cnJlbnRfc2l6ZSk7CisKKwkJCWluZGV4ID0gZGF0YS0+aGFzaF9iYXNlW3Bvc107CisJCQl3aGlsZSAoaW5kZXgpIHsKKwkJCQlwcmludGYoIiVkICIsIGluZGV4KTsKKwkJCQlpZiAoYml0bWFwW2luZGV4XSkKKwkJCQkJZXhpdCgxKTsKKworCQkJCWJpdG1hcFtpbmRleF0gPSAxOworCQkJCWluZGV4ID0gZGF0YS0+bm9kZV9iYXNlW2luZGV4XS5uZXh0OworCQkJfQorCQl9CisKKwkJLyogcHVyZWx5IGFuIG9wdGltaXphdGlvbjogaW50ZWFkIG9mIG1lbXNldCB0aGUgbWFwIHJlc2V0IG9ubHkKKwkJICogdGhlIG5lZWRlZCBwYXJ0OiBub3QgbXkgdXNlIHRvIG9wdGltaXplIHRlc3QgYnV0IGhlcmUgdGhlCisJCSAqIHRlc3Qgd2FzIHNvIHNsb3cgaXQgd2FzIHVzZWxlc3MgKi8KKwkJaW5kZXggPSBkYXRhLT5oYXNoX2Jhc2VbcG9zXTsKKwkJd2hpbGUgKGluZGV4KSB7CisJCQliaXRtYXBbaW5kZXhdID0gMTsKKwkJCWluZGV4ID0gZGF0YS0+bm9kZV9iYXNlW2luZGV4XS5uZXh0OworCQl9CisJfQorCisJZnJlZShiaXRtYXApOworCisJcmV0dXJuIGRvX2Fib3J0OworfQorCitzdGF0aWMgaW50IGNoZWNrX3JlZHVuZGFudF9rZXkob2RiX2RhdGFfdCBjb25zdCAqIGRhdGEsIG9kYl9rZXlfdCBtYXgpCit7CisJb2RiX25vZGVfbnJfdCBwb3M7CisKKwl1bnNpZ25lZCBjaGFyICogYml0bWFwID0gbWFsbG9jKG1heCArIDEpOworCW1lbXNldChiaXRtYXAsICdcMCcsIG1heCArIDEpOworCisJZm9yIChwb3MgPSAxIDsgcG9zIDwgZGF0YS0+ZGVzY3ItPmN1cnJlbnRfc2l6ZSA7ICsrcG9zKSB7CisJCWlmIChiaXRtYXBbZGF0YS0+bm9kZV9iYXNlW3Bvc10ua2V5XSkgeworCQkJcHJpbnRmKCJyZWR1bmRhbnQga2V5IGZvdW5kICVsbGRcbiIsCisJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylkYXRhLT5ub2RlX2Jhc2VbcG9zXS5rZXkpOworCQkJZnJlZShiaXRtYXApOworCQkJcmV0dXJuIDE7CisJCX0KKwkJYml0bWFwW2RhdGEtPm5vZGVfYmFzZVtwb3NdLmtleV0gPSAxOworCX0KKwlmcmVlKGJpdG1hcCk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IG9kYl9jaGVja19oYXNoKG9kYl90IGNvbnN0ICogb2RiKQoreworCW9kYl9ub2RlX25yX3QgcG9zOworCW9kYl9ub2RlX25yX3QgbnJfbm9kZSA9IDA7CisJb2RiX25vZGVfbnJfdCBucl9ub2RlX291dF9vZl9ib3VuZCA9IDA7CisJaW50IHJldCA9IDA7CisJb2RiX2tleV90IG1heCA9IDA7CisJb2RiX2RhdGFfdCAqIGRhdGEgPSBvZGItPmRhdGE7CisKKwlmb3IgKHBvcyA9IDAgOyBwb3MgPCBkYXRhLT5kZXNjci0+c2l6ZSAqIEJVQ0tFVF9GQUNUT1IgOyArK3BvcykgeworCQlvZGJfaW5kZXhfdCBpbmRleCA9IGRhdGEtPmhhc2hfYmFzZVtwb3NdOworCQl3aGlsZSAoaW5kZXgpIHsKKwkJCWlmIChpbmRleCA+PSBkYXRhLT5kZXNjci0+Y3VycmVudF9zaXplKSB7CisJCQkJbnJfbm9kZV9vdXRfb2ZfYm91bmQrKzsKKwkJCQlicmVhazsKKwkJCX0KKwkJCSsrbnJfbm9kZTsKKworCQkJaWYgKGRhdGEtPm5vZGVfYmFzZVtpbmRleF0ua2V5ID4gbWF4KQorCQkJCW1heCA9IGRhdGEtPm5vZGVfYmFzZVtpbmRleF0ua2V5OworCisJCQlpbmRleCA9IGRhdGEtPm5vZGVfYmFzZVtpbmRleF0ubmV4dDsKKwkJfQorCX0KKworCWlmIChucl9ub2RlICE9IGRhdGEtPmRlc2NyLT5jdXJyZW50X3NpemUgLSAxKSB7CisJCXByaW50ZigiaGFzaCB0YWJsZSB3YWxrIGZvdW5kICVkIG5vZGUgZXhwZWN0ICVkIG5vZGVcbiIsCisJCSAgICAgICBucl9ub2RlLCBkYXRhLT5kZXNjci0+Y3VycmVudF9zaXplIC0gMSk7CisJCXJldCA9IDE7CisJfQorCisJaWYgKG5yX25vZGVfb3V0X29mX2JvdW5kKSB7CisJCXByaW50Zigib3V0IG9mIGJvdW5kIG5vZGUgaW5kZXg6ICVkXG4iLCBucl9ub2RlX291dF9vZl9ib3VuZCk7CisJCXJldCA9IDE7CisJfQorCisJaWYgKHJldCA9PSAwKQorCQlyZXQgPSBjaGVja19jaXJjdWxhcl9saXN0KGRhdGEpOworCisJaWYgKHJldCA9PSAwKQorCQlyZXQgPSBjaGVja19yZWR1bmRhbnRfa2V5KGRhdGEsIG1heCk7CisKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvbGliZGIvZGJfaW5zZXJ0LmMgYi9vcHJvZmlsZS0wLjkuNy9saWJkYi9kYl9pbnNlcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YmJkNzFmCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvbGliZGIvZGJfaW5zZXJ0LmMKQEAgLTAsMCArMSwxMDkgQEAKKy8qKgorICogQGZpbGUgZGJfaW5zZXJ0LmMKKyAqIEluc2VydGluZyBhIGtleS12YWx1ZSBwYWlyIGludG8gYSBEQgorICoKKyAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDIgT1Byb2ZpbGUgYXV0aG9ycworICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKKyAqCisgKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKKyAqLworCisjZGVmaW5lIF9HTlVfU09VUkNFCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisKKyNpbmNsdWRlICJvZGIuaCIKKworCitzdGF0aWMgaW5saW5lIGludCBhZGRfbm9kZShvZGJfZGF0YV90ICogZGF0YSwgb2RiX2tleV90IGtleSwgb2RiX3ZhbHVlX3QgdmFsdWUpCit7CisJb2RiX2luZGV4X3QgbmV3X25vZGU7CisJb2RiX25vZGVfdCAqIG5vZGU7CisJb2RiX2luZGV4X3QgaW5kZXg7CisKKwkvKiBubyBsb2NraW5nIGlzIG5lY2Vzc2FyeTogaXRlcmF0aW9uIGludGVyZmFjZSByZXRyaWV2ZSBkYXRhIHRocm91Z2gKKwkgKiB0aGUgbm9kZV9iYXNlIGFycmF5LCB3ZSBkb2Vzbid0IGluY3JlYXNlIGN1cnJlbnRfc2l6ZSBub3cgYnV0IGl0J3MKKwkgKiBkb25lIGJ5IG9kYl9jb21taXRfcmVzZXJ2YXRpb24oKSBzbyB0aGUgbmV3IHNsb3QgaXMgdmlzaWJsZSBvbmx5CisJICogYWZ0ZXIgdGhlIGluY3JlbWVudAorCSAqLworCWlmIChkYXRhLT5kZXNjci0+Y3VycmVudF9zaXplID49IGRhdGEtPmRlc2NyLT5zaXplKSB7CisJCWlmIChvZGJfZ3Jvd19oYXNodGFibGUoZGF0YSkpCisJCQlyZXR1cm4gRUlOVkFMOworCX0KKwluZXdfbm9kZSA9IGRhdGEtPmRlc2NyLT5jdXJyZW50X3NpemU7CisKKwlub2RlID0gJmRhdGEtPm5vZGVfYmFzZVtuZXdfbm9kZV07CisJbm9kZS0+dmFsdWUgPSB2YWx1ZTsKKwlub2RlLT5rZXkgPSBrZXk7CisKKwlpbmRleCA9IG9kYl9kb19oYXNoKGRhdGEsIGtleSk7CisJbm9kZS0+bmV4dCA9IGRhdGEtPmhhc2hfYmFzZVtpbmRleF07CisJZGF0YS0+aGFzaF9iYXNlW2luZGV4XSA9IG5ld19ub2RlOworCisJLyogRklYTUU6IHdlIG5lZWQgd3JtYigpIGhlcmUgKi8KKwlvZGJfY29tbWl0X3Jlc2VydmF0aW9uKGRhdGEpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBvZGJfdXBkYXRlX25vZGUob2RiX3QgKiBvZGIsIG9kYl9rZXlfdCBrZXkpCit7CisJcmV0dXJuIG9kYl91cGRhdGVfbm9kZV93aXRoX29mZnNldChvZGIsIGtleSwgMSk7Cit9CisKK2ludCBvZGJfdXBkYXRlX25vZGVfd2l0aF9vZmZzZXQob2RiX3QgKiBvZGIsIAorCQkJCW9kYl9rZXlfdCBrZXksIAorCQkJCXVuc2lnbmVkIGxvbmcgaW50IG9mZnNldCkKK3sKKwlvZGJfaW5kZXhfdCBpbmRleDsKKwlvZGJfbm9kZV90ICogbm9kZTsKKwlvZGJfZGF0YV90ICogZGF0YTsKKworCWRhdGEgPSBvZGItPmRhdGE7CisJaW5kZXggPSBkYXRhLT5oYXNoX2Jhc2Vbb2RiX2RvX2hhc2goZGF0YSwga2V5KV07CisJd2hpbGUgKGluZGV4KSB7CisJCW5vZGUgPSAmZGF0YS0+bm9kZV9iYXNlW2luZGV4XTsKKwkJaWYgKG5vZGUtPmtleSA9PSBrZXkpIHsKKwkJCWlmIChub2RlLT52YWx1ZSArIG9mZnNldCAhPSAwKSB7CisJCQkJbm9kZS0+dmFsdWUgKz0gb2Zmc2V0OworCQkJfSBlbHNlIHsKKwkJCQkvKiBwb3N0IHByb2ZpbGUgdG9vbHMgbXVzdCBoYW5kbGUgb3ZlcmZsb3cgKi8KKwkJCQkvKiBGSVhNRTogdGhlIHRyaWNreSB3YXkgd2lsbCBiZSBqdXN0IHRvIGFkZAorCQkJCSAqIGEgZ290byB0byBqdW1wIHJpZ2h0IGJlZm9yZSB0aGUgcmV0dXJuCisJCQkJICogYWRkX25vZGUoKSwgaW4gdGhpcyB3YXkgd2Ugbm8gbG9uZ2VyIGNhbgorCQkJCSAqIG92ZXJmbG93LiBJdCdsbCB3b3JrIGJlY2F1c2UgbmV3IG5vZGUgYXJlCisJCQkJICogbGlua2VkIGF0IHRoZSBzdGFydCBvZiB0aGUgbm9kZSBsaXN0IGZvcgorCQkJCSAqIHRoaXMgYnVja2V0IHNvIHRoaXMgbG9vcCB3aWxsIHNlZSBmaXJzdCBhCisJCQkJICogbm9uIG92ZXJmbG93ZWQgbm9kZSBpZiBvbmUgZXhpc3QuIFdoZW4gd2UKKwkJCQkgKiBncm93IHRoZSBoYXNodGFibGUgdGhlIG1vc3QgcmVjZW50bHkKKwkJCQkgKiBhbGxvY2F0ZWQgbm9kZSBmb3IgdGhpcyBrZXkgd2lsbCBiZSBzZXR1cAorCQkJCSAqIGxhc3QsIHNvIGFnYWluIGl0J2xsIGJlIGxpbmtlZCBhdCBzdGFydCBvZgorCQkJCSAqIHRoZSBsaXN0LiBwcCB0b29scyBsb29rZSBsaWtlIG9rIHdpdGggdGhpcworCQkJCSAqIGNoYW5nZS4KKwkJCQkgKgorCQkJCSAqIFRoaXMgY2hhbmdlIGRvZXNuJ3QgaW52b2x2ZSBhbnkgZmlsZSBmb3JtYXQKKwkJCQkgKiBjaGFuZ2UgYnV0IHBlcmhhcHMgaXQncyBhIGJpdCBoYWNreSB0byBkbworCQkJCSAqIHRoaXMgdy9vIGJ1bXBpbmcgdGhlIHNhbXBsZSBmaWxlIGZvcm1hdAorCQkJCSAqIHZlcnNpb24uIFRoZSBkcmF3YmFjayBvZiB0aGlzIGlzIHRoZSBhZGRlZAorCQkJCSAqIG5vZGUgYXJlIGFkZGl0aXZlIG5vdCBtdWx0aXBsaWNhdGl2ZS4KKwkJCQkgKiAobXVsdGlwbGljYXRpdmUgYXMgaWYgd2UgYWRkIG1vcmUgYml0cyB0bworCQkJCSAqIHN0b3JlIGEgdmFsdWUpCisJCQkJICovCisJCQl9CisJCQlyZXR1cm4gMDsKKwkJfQorCisJCWluZGV4ID0gbm9kZS0+bmV4dDsKKwl9CisKKwlyZXR1cm4gYWRkX25vZGUoZGF0YSwga2V5LCBvZmZzZXQpOworfQorCisKK2ludCBvZGJfYWRkX25vZGUob2RiX3QgKiBvZGIsIG9kYl9rZXlfdCBrZXksIG9kYl92YWx1ZV90IHZhbHVlKQoreworCXJldHVybiBhZGRfbm9kZShvZGItPmRhdGEsIGtleSwgdmFsdWUpOworfQpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvbGliZGIvZGJfbWFuYWdlLmMgYi9vcHJvZmlsZS0wLjkuNy9saWJkYi9kYl9tYW5hZ2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NjhlOTk0Ci0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvbGliZGIvZGJfbWFuYWdlLmMKQEAgLTAsMCArMSwzMDcgQEAKKy8qKgorICogQGZpbGUgZGJfbWFuYWdlLmMKKyAqIE1hbmFnZW1lbnQgb2YgYSBEQiBmaWxlCisgKgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMiBPUHJvZmlsZSBhdXRob3JzCisgKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORworICoKKyAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQorICovCisKKyNkZWZpbmUgX0dOVV9TT1VSQ0UKKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN5cy9mY250bC5oPgorI2luY2x1ZGUgPHN5cy9tbWFuLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNpbmNsdWRlICJvZGIuaCIKKyNpbmNsdWRlICJvcF9zdHJpbmcuaCIKKyNpbmNsdWRlICJvcF9saWJpYmVydHkuaCIKKworIAorc3RhdGljIF9faW5saW5lIG9kYl9kZXNjcl90ICogb2RiX3RvX2Rlc2NyKG9kYl9kYXRhX3QgKiBkYXRhKQoreworCXJldHVybiAob2RiX2Rlc2NyX3QgKikoKChjaGFyKilkYXRhLT5iYXNlX21lbW9yeSkgKyBkYXRhLT5zaXplb2ZfaGVhZGVyKTsKK30KKworIAorc3RhdGljIF9faW5saW5lIG9kYl9ub2RlX3QgKiBvZGJfdG9fbm9kZV9iYXNlKG9kYl9kYXRhX3QgKiBkYXRhKQoreworCXJldHVybiAob2RiX25vZGVfdCAqKSgoKGNoYXIgKilkYXRhLT5iYXNlX21lbW9yeSkgKyBkYXRhLT5vZmZzZXRfbm9kZSk7Cit9CisKKyAKK3N0YXRpYyBfX2lubGluZSBvZGJfaW5kZXhfdCAqIG9kYl90b19oYXNoX2Jhc2Uob2RiX2RhdGFfdCAqIGRhdGEpCit7CisJcmV0dXJuIChvZGJfaW5kZXhfdCAqKSgoKGNoYXIgKilkYXRhLT5iYXNlX21lbW9yeSkgKyAKKwkJCQlkYXRhLT5vZmZzZXRfbm9kZSArCisJCQkJKGRhdGEtPmRlc2NyLT5zaXplICogc2l6ZW9mKG9kYl9ub2RlX3QpKSk7Cit9CisKKyAKKy8qKgorICogcmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgdXNlZCBieSBoYXNoIHRhYmxlLCBub2RlIHRhYmxlIGFuZCBoZWFkZXIuCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgdGFibGVzX3NpemUob2RiX2RhdGFfdCBjb25zdCAqIGRhdGEsIG9kYl9ub2RlX25yX3Qgbm9kZV9ucikKK3sKKwlzaXplX3Qgc2l6ZTsKKworCXNpemUgPSBub2RlX25yICogKHNpemVvZihvZGJfaW5kZXhfdCkgKiBCVUNLRVRfRkFDVE9SKTsKKwlzaXplICs9IG5vZGVfbnIgKiBzaXplb2Yob2RiX25vZGVfdCk7CisJc2l6ZSArPSBkYXRhLT5vZmZzZXRfbm9kZTsKKworCXJldHVybiBzaXplOworfQorCisKK2ludCBvZGJfZ3Jvd19oYXNodGFibGUob2RiX2RhdGFfdCAqIGRhdGEpCit7CisJdW5zaWduZWQgaW50IG9sZF9maWxlX3NpemU7CisJdW5zaWduZWQgaW50IG5ld19maWxlX3NpemU7CisJdW5zaWduZWQgaW50IHBvczsKKwl2b2lkICogbmV3X21hcDsKKworCW9sZF9maWxlX3NpemUgPSB0YWJsZXNfc2l6ZShkYXRhLCBkYXRhLT5kZXNjci0+c2l6ZSk7CisJbmV3X2ZpbGVfc2l6ZSA9IHRhYmxlc19zaXplKGRhdGEsIGRhdGEtPmRlc2NyLT5zaXplICogMik7CisKKwlpZiAoZnRydW5jYXRlKGRhdGEtPmZkLCBuZXdfZmlsZV9zaXplKSkKKwkJcmV0dXJuIDE7CisKKwluZXdfbWFwID0gbXJlbWFwKGRhdGEtPmJhc2VfbWVtb3J5LAorCQkJIG9sZF9maWxlX3NpemUsIG5ld19maWxlX3NpemUsIE1SRU1BUF9NQVlNT1ZFKTsKKworCWlmIChuZXdfbWFwID09IE1BUF9GQUlMRUQpCisJCXJldHVybiAxOworCisJZGF0YS0+YmFzZV9tZW1vcnkgPSBuZXdfbWFwOworCWRhdGEtPmRlc2NyID0gb2RiX3RvX2Rlc2NyKGRhdGEpOworCWRhdGEtPmRlc2NyLT5zaXplICo9IDI7CisJZGF0YS0+bm9kZV9iYXNlID0gb2RiX3RvX25vZGVfYmFzZShkYXRhKTsKKwlkYXRhLT5oYXNoX2Jhc2UgPSBvZGJfdG9faGFzaF9iYXNlKGRhdGEpOworCWRhdGEtPmhhc2hfbWFzayA9IChkYXRhLT5kZXNjci0+c2l6ZSAqIEJVQ0tFVF9GQUNUT1IpIC0gMTsKKworCS8qIHJlYnVpbGQgdGhlIGhhc2ggdGFibGUsIG5vZGUgemVybyBpcyBuZXZlciB1c2VkLiBUaGlzIHdvcmtzCisJICogYmVjYXVzZSBsYXlvdXQgb2YgZmlsZSBpcyBub2RlIHRhYmxlIHRoZW4gaGFzaCB0YWJsZSwKKwkgKiBzaXplb2Yobm9kZSkgPiBzaXplb2YoYnVja2V0KSBhbmQgd2hlbiB3ZSBncm93IHRhYmxlIHdlCisJICogZG91YmxlIHNpemUgPT0+IG9sZCBoYXNoIHRhYmxlIGFuZCBuZXcgaGFzaCB0YWJsZSBjYW4ndAorCSAqIG92ZXJsYXAgc28gb24gdGhlIG5ldyBoYXNoIHRhYmxlIGlzIGVudGlyZWx5IGluIHRoZSBuZXcKKwkgKiBtZW1vcnkgYXJlYSAodGhlIGdyb3duIHBhcnQpIGFuZCB3ZSBrbm93IHRoZSBuZXcgaGFzaAorCSAqIGhhc2ggdGFibGUgaXMgemVyb2VkLiBUaGF0J3Mgd2h5IHdlIGRvbid0IG5lZWQgdG8gemVybyBpbml0CisJICogdGhlIG5ldyB0YWJsZSAqLworCS8qIE9LOiB0aGUgYWJvdmUgaXMgbm90IGV4YWN0CisJICogaWYgQlVDS0VUX0ZBQ1RPUiA8IHNpemVvZihiZF9ub2RlX3QpIC8gc2l6ZW9mKGJkX25vZGVfbnJfdCkKKwkgKiBhbGwgdGhpbmdzIGFyZSBmaW5lIGFuZCB3ZSBkb24ndCBuZWVkIHRvIGluaXQgdGhlIGhhc2gKKwkgKiB0YWJsZSBiZWNhdXNlIGluIHRoaXMgY2FzZSB0aGUgbmV3IGhhc2ggdGFibGUgaXMgY29tcGxldGVseQorCSAqIGluc2lkZSB0aGUgbmV3IGdyb3dlZCBwYXJ0LiBBdm9pZGluZyB0byB0b3VjaCB0aGlzIG1lbW9yeSBpcworCSAqIHVzZWZ1bC4KKwkgKi8KKyNpZiAwCisJZm9yIChwb3MgPSAwIDsgcG9zIDwgZGF0YS0+ZGVzY3ItPnNpemUqQlVDS0VUX0ZBQ1RPUiA7ICsrcG9zKQorCQlkYXRhLT5oYXNoX2Jhc2VbcG9zXSA9IDA7CisjZW5kaWYKKworCWZvciAocG9zID0gMTsgcG9zIDwgZGF0YS0+ZGVzY3ItPmN1cnJlbnRfc2l6ZTsgKytwb3MpIHsKKwkJb2RiX25vZGVfdCAqIG5vZGUgPSAmZGF0YS0+bm9kZV9iYXNlW3Bvc107CisJCXNpemVfdCBpbmRleCA9IG9kYl9kb19oYXNoKGRhdGEsIG5vZGUtPmtleSk7CisJCW5vZGUtPm5leHQgPSBkYXRhLT5oYXNoX2Jhc2VbaW5kZXhdOworCQlkYXRhLT5oYXNoX2Jhc2VbaW5kZXhdID0gcG9zOworCX0KKworCXJldHVybiAwOworfQorCisKK3ZvaWQgb2RiX2luaXQob2RiX3QgKiBvZGIpCit7CisJb2RiLT5kYXRhID0gTlVMTDsKK30KKworCisvKiB0aGUgZGVmYXVsdCBudW1iZXIgb2YgcGFnZSwgY2FsY3VsYXRlZCB0byBmaXQgaW4gNDA5NiBieXRlcyAqLworI2RlZmluZSBERUZBVUxUX05PREVfTlIob2Zmc2V0X25vZGUpCTEyOAorI2RlZmluZSBGSUxFU19IQVNIX1NJWkUgICAgICAgICAgICAgICAgIDUxMgorCitzdGF0aWMgc3RydWN0IGxpc3RfaGVhZCBmaWxlc19oYXNoW0ZJTEVTX0hBU0hfU0laRV07CisKKworc3RhdGljIHZvaWQgaW5pdF9oYXNoKCkKK3sKKwlzaXplX3QgaTsKKwlmb3IgKGkgPSAwOyBpIDwgRklMRVNfSEFTSF9TSVpFOyArK2kpCisJCWxpc3RfaW5pdCgmZmlsZXNfaGFzaFtpXSk7Cit9CisKKworc3RhdGljIG9kYl9kYXRhX3QgKgorZmluZF9zYW1wbGVzX2RhdGEoc2l6ZV90IGhhc2gsIGNoYXIgY29uc3QgKiBmaWxlbmFtZSkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICogcG9zOworCisJLyogRklYTUU6IG1heWJlIGFuIGluaXRpYWwgaW5pdCByb3V0aW5lID8gKi8KKwlpZiAoZmlsZXNfaGFzaFswXS5uZXh0ID09IE5VTEwpIHsKKwkJaW5pdF9oYXNoKCk7CisJCXJldHVybiBOVUxMOworCX0KKworCWxpc3RfZm9yX2VhY2gocG9zLCAmZmlsZXNfaGFzaFtoYXNoXSkgeworCQlvZGJfZGF0YV90ICogZW50cnkgPSBsaXN0X2VudHJ5KHBvcywgb2RiX2RhdGFfdCwgbGlzdCk7CisJCWlmIChzdHJjbXAoZW50cnktPmZpbGVuYW1lLCBmaWxlbmFtZSkgPT0gMCkKKwkJCXJldHVybiBlbnRyeTsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworCitpbnQgb2RiX29wZW4ob2RiX3QgKiBvZGIsIGNoYXIgY29uc3QgKiBmaWxlbmFtZSwgZW51bSBvZGJfcncgcncsCisJICAgICBzaXplX3Qgc2l6ZW9mX2hlYWRlcikKK3sKKwlzdHJ1Y3Qgc3RhdCBzdGF0X2J1ZjsKKwlvZGJfbm9kZV9ucl90IG5yX25vZGU7CisJb2RiX2RhdGFfdCAqIGRhdGE7CisJc2l6ZV90IGhhc2g7CisJaW50IGVyciA9IDA7CisKKwlpbnQgZmxhZ3MgPSAocncgPT0gT0RCX1JEV1IpID8gKE9fQ1JFQVQgfCBPX1JEV1IpIDogT19SRE9OTFk7CisJaW50IG1tZmxhZ3MgPSAocncgPT0gT0RCX1JEV1IpID8gKFBST1RfUkVBRCB8IFBST1RfV1JJVEUpIDogUFJPVF9SRUFEOworCisJaGFzaCA9IG9wX2hhc2hfc3RyaW5nKGZpbGVuYW1lKSAlIEZJTEVTX0hBU0hfU0laRTsKKwlkYXRhID0gZmluZF9zYW1wbGVzX2RhdGEoaGFzaCwgZmlsZW5hbWUpOworCWlmIChkYXRhKSB7CisJCW9kYi0+ZGF0YSA9IGRhdGE7CisJCWRhdGEtPnJlZl9jb3VudCsrOworCQlyZXR1cm4gMDsKKwl9CisKKwlkYXRhID0geG1hbGxvYyhzaXplb2Yob2RiX2RhdGFfdCkpOworCW1lbXNldChkYXRhLCAnXDAnLCBzaXplb2Yob2RiX2RhdGFfdCkpOworCWxpc3RfaW5pdCgmZGF0YS0+bGlzdCk7CisJZGF0YS0+b2Zmc2V0X25vZGUgPSBzaXplb2ZfaGVhZGVyICsgc2l6ZW9mKG9kYl9kZXNjcl90KTsKKwlkYXRhLT5zaXplb2ZfaGVhZGVyID0gc2l6ZW9mX2hlYWRlcjsKKwlkYXRhLT5yZWZfY291bnQgPSAxOworCWRhdGEtPmZpbGVuYW1lID0geHN0cmR1cChmaWxlbmFtZSk7CisKKwlkYXRhLT5mZCA9IG9wZW4oZmlsZW5hbWUsIGZsYWdzLCAwNjQ0KTsKKwlpZiAoZGF0YS0+ZmQgPCAwKSB7CisJCWVyciA9IGVycm5vOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoZnN0YXQoZGF0YS0+ZmQsICZzdGF0X2J1ZikpIHsKKwkJZXJyID0gZXJybm87CisJCWdvdG8gZmFpbDsKKwl9CisKKwlpZiAoc3RhdF9idWYuc3Rfc2l6ZSA9PSAwKSB7CisJCXNpemVfdCBmaWxlX3NpemU7CisKKwkJaWYgKHJ3ID09IE9EQl9SRE9OTFkpIHsKKwkJCWVyciA9IEVJTzsKKwkJCWdvdG8gZmFpbDsKKwkJfQorCisJCW5yX25vZGUgPSBERUZBVUxUX05PREVfTlIoZGF0YS0+b2Zmc2V0X25vZGUpOworCisJCWZpbGVfc2l6ZSA9IHRhYmxlc19zaXplKGRhdGEsIG5yX25vZGUpOworCQlpZiAoZnRydW5jYXRlKGRhdGEtPmZkLCBmaWxlX3NpemUpKSB7CisJCQllcnIgPSBlcnJubzsKKwkJCWdvdG8gZmFpbDsKKwkJfQorCX0gZWxzZSB7CisJCS8qIENhbGN1bGF0ZSBuciBub2RlIGFsbG93aW5nIGEgc2FuaXR5IGNoZWNrIGxhdGVyICovCisJCW5yX25vZGUgPSAoc3RhdF9idWYuc3Rfc2l6ZSAtIGRhdGEtPm9mZnNldF9ub2RlKSAvCisJCQkoKHNpemVvZihvZGJfaW5kZXhfdCkgKiBCVUNLRVRfRkFDVE9SKSArIHNpemVvZihvZGJfbm9kZV90KSk7CisJfQorCisJZGF0YS0+YmFzZV9tZW1vcnkgPSBtbWFwKDAsIHRhYmxlc19zaXplKGRhdGEsIG5yX25vZGUpLCBtbWZsYWdzLAorCQkJCU1BUF9TSEFSRUQsIGRhdGEtPmZkLCAwKTsKKworCWlmIChkYXRhLT5iYXNlX21lbW9yeSA9PSBNQVBfRkFJTEVEKSB7CisJCWVyciA9IGVycm5vOworCQlnb3RvIGZhaWw7CisJfQorCisJZGF0YS0+ZGVzY3IgPSBvZGJfdG9fZGVzY3IoZGF0YSk7CisKKwlpZiAoc3RhdF9idWYuc3Rfc2l6ZSA9PSAwKSB7CisJCWRhdGEtPmRlc2NyLT5zaXplID0gbnJfbm9kZTsKKwkJLyogcGFnZSB6ZXJvIGlzIG5vdCB1c2VkICovCisJCWRhdGEtPmRlc2NyLT5jdXJyZW50X3NpemUgPSAxOworCX0gZWxzZSB7CisJCS8qIGZpbGUgYWxyZWFkeSBleGlzdCwgc2FuaXR5IGNoZWNrIG5yIG5vZGUgKi8KKwkJaWYgKG5yX25vZGUgIT0gZGF0YS0+ZGVzY3ItPnNpemUpIHsKKwkJCWVyciA9IEVJTlZBTDsKKwkJCWdvdG8gZmFpbF91bm1hcDsKKwkJfQorCX0KKworCWRhdGEtPmhhc2hfYmFzZSA9IG9kYl90b19oYXNoX2Jhc2UoZGF0YSk7CisJZGF0YS0+bm9kZV9iYXNlID0gb2RiX3RvX25vZGVfYmFzZShkYXRhKTsKKwlkYXRhLT5oYXNoX21hc2sgPSAoZGF0YS0+ZGVzY3ItPnNpemUgKiBCVUNLRVRfRkFDVE9SKSAtIDE7CisKKwlsaXN0X2FkZCgmZGF0YS0+bGlzdCwgJmZpbGVzX2hhc2hbaGFzaF0pOworCW9kYi0+ZGF0YSA9IGRhdGE7CitvdXQ6CisJcmV0dXJuIGVycjsKK2ZhaWxfdW5tYXA6CisJbXVubWFwKGRhdGEtPmJhc2VfbWVtb3J5LCB0YWJsZXNfc2l6ZShkYXRhLCBucl9ub2RlKSk7CitmYWlsOgorCWNsb3NlKGRhdGEtPmZkKTsKKwlmcmVlKGRhdGEtPmZpbGVuYW1lKTsKKwlmcmVlKGRhdGEpOworCW9kYi0+ZGF0YSA9IE5VTEw7CisJZ290byBvdXQ7Cit9CisKKwordm9pZCBvZGJfY2xvc2Uob2RiX3QgKiBvZGIpCit7CisJb2RiX2RhdGFfdCAqIGRhdGEgPSBvZGItPmRhdGE7CisKKwlpZiAoZGF0YSkgeworCQlkYXRhLT5yZWZfY291bnQtLTsKKwkJaWYgKGRhdGEtPnJlZl9jb3VudCA9PSAwKSB7CisJCQlzaXplX3Qgc2l6ZSA9IHRhYmxlc19zaXplKGRhdGEsIGRhdGEtPmRlc2NyLT5zaXplKTsKKwkJCWxpc3RfZGVsKCZkYXRhLT5saXN0KTsKKwkJCW11bm1hcChkYXRhLT5iYXNlX21lbW9yeSwgc2l6ZSk7CisJCQlpZiAoZGF0YS0+ZmQgPj0gMCkKKwkJCQljbG9zZShkYXRhLT5mZCk7CisJCQlmcmVlKGRhdGEtPmZpbGVuYW1lKTsKKwkJCWZyZWUoZGF0YSk7CisJCQlvZGItPmRhdGEgPSBOVUxMOworCQl9CisJfQorfQorCisKK2ludCBvZGJfb3Blbl9jb3VudChvZGJfdCBjb25zdCAqIG9kYikKK3sKKwlpZiAoIW9kYi0+ZGF0YSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIG9kYi0+ZGF0YS0+cmVmX2NvdW50OworfQorCisKK3ZvaWQgKiBvZGJfZ2V0X2RhdGEob2RiX3QgKiBvZGIpCit7CisJcmV0dXJuIG9kYi0+ZGF0YS0+YmFzZV9tZW1vcnk7Cit9CisKKwordm9pZCBvZGJfc3luYyhvZGJfdCBjb25zdCAqIG9kYikKK3sKKwlvZGJfZGF0YV90ICogZGF0YSA9IG9kYi0+ZGF0YTsKKwlzaXplX3Qgc2l6ZTsKKworCWlmICghZGF0YSkKKwkJcmV0dXJuOworCisJc2l6ZSA9IHRhYmxlc19zaXplKGRhdGEsIGRhdGEtPmRlc2NyLT5zaXplKTsKKwltc3luYyhkYXRhLT5iYXNlX21lbW9yeSwgc2l6ZSwgTVNfQVNZTkMpOworfQpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvbGliZGIvZGJfc3RhdC5jIGIvb3Byb2ZpbGUtMC45LjcvbGliZGIvZGJfc3RhdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkMjllOWEKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9saWJkYi9kYl9zdGF0LmMKQEAgLTAsMCArMSw4OCBAQAorLyoqCisgKiBAZmlsZSBkYl9zdGF0LmMKKyAqIFN0YXRpc3RpY3Mgcm91dGluZXMgZm9yIGxpYmRiCisgKgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMiBPUHJvZmlsZSBhdXRob3JzCisgKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORworICoKKyAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQorICovCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaW5jbHVkZSAib2RiLmgiCisjaW5jbHVkZSAib3BfdHlwZXMuaCIKKworLy8vIGhvbGQgdmFyaW91cyBzdGF0aXN0aWNzIGRhdGEgZm9yIGEgZGIgZmlsZQorc3RydWN0IG9kYl9oYXNoX3N0YXRfdCB7CisJb2RiX25vZGVfbnJfdCBub2RlX25yOwkJCS8qKjwgYWxsb2NhdGVkIG5vZGUgbnVtYmVyICovCisJb2RiX25vZGVfbnJfdCB1c2VkX25vZGVfbnI7CQkvKio8IGluIHVzZSBub2RlIG51bWJlciAqLworCWNvdW50X3R5cGUgICAgdG90YWxfY291bnQ7CQkvKio8IGN1bXVsYXRlZCBzYW1wbGVzIGNvdW50ICovCisJb2RiX2luZGV4X3QgICBoYXNoX3RhYmxlX3NpemU7CQkvKio8IGhhc2ggdGFibGUgZW50cnkgbnVtYmVyICovCisJb2RiX25vZGVfbnJfdCBtYXhfbGlzdF9sZW5ndGg7CQkvKio8IHdvcnN0IGNhc2UgICAqLworCWRvdWJsZSAgICAgICBhdmVyYWdlX2xpc3RfbGVuZ3RoOwkvKio8IGF2ZXJhZ2UgY2FzZSAqLworCS8qIGRvIHdlIG5lZWQgdmFyaWFuY2UgPyAqLworfTsKKworb2RiX2hhc2hfc3RhdF90ICogb2RiX2hhc2hfc3RhdChvZGJfdCBjb25zdCAqIG9kYikKK3sKKwlzaXplX3QgbWF4X2xlbmd0aCA9IDA7CisJZG91YmxlIHRvdGFsX2xlbmd0aCA9IDAuMDsKKwlzaXplX3QgbnJfbm9uX2VtcHR5X2xpc3QgPSAwOworCXNpemVfdCBwb3M7CisJb2RiX2RhdGFfdCAqIGRhdGEgPSBvZGItPmRhdGE7CisKKwlvZGJfaGFzaF9zdGF0X3QgKiByZXN1bHQgPSBjYWxsb2MoMSwgc2l6ZW9mKG9kYl9oYXNoX3N0YXRfdCkpOworCWlmICghcmVzdWx0KSB7CisJCWZwcmludGYoc3RkZXJyLCAibm90IGVub3VnaCBtZW1vcnlcbiIpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorCisJcmVzdWx0LT5ub2RlX25yID0gZGF0YS0+ZGVzY3ItPnNpemU7CisJcmVzdWx0LT51c2VkX25vZGVfbnIgPSBkYXRhLT5kZXNjci0+Y3VycmVudF9zaXplOworCXJlc3VsdC0+aGFzaF90YWJsZV9zaXplID0gZGF0YS0+ZGVzY3ItPnNpemUgKiBCVUNLRVRfRkFDVE9SOworCisJLyogRklYTUU6IEknbSBkdWJpb3VzIGlmIHRoaXMgZG8gcmlnaHQgc3RhdGlzdGljcyBmb3IgaGFzaCB0YWJsZQorCSAqIGVmZmljaWVuY3kgY2hlY2sgKi8KKworCWZvciAocG9zID0gMCA7IHBvcyA8IHJlc3VsdC0+aGFzaF90YWJsZV9zaXplIDsgKytwb3MpIHsKKwkJc2l6ZV90IGN1cl9sZW5ndGggPSAwOworCQlzaXplX3QgaW5kZXggPSBkYXRhLT5oYXNoX2Jhc2VbcG9zXTsKKwkJd2hpbGUgKGluZGV4KSB7CisJCQlyZXN1bHQtPnRvdGFsX2NvdW50ICs9IGRhdGEtPm5vZGVfYmFzZVtpbmRleF0udmFsdWU7CisJCQlpbmRleCA9IGRhdGEtPm5vZGVfYmFzZVtpbmRleF0ubmV4dDsKKwkJCSsrY3VyX2xlbmd0aDsKKwkJfQorCisJCWlmIChjdXJfbGVuZ3RoID4gbWF4X2xlbmd0aCkKKwkJCW1heF9sZW5ndGggPSBjdXJfbGVuZ3RoOworCisJCWlmIChjdXJfbGVuZ3RoKSB7CisJCQl0b3RhbF9sZW5ndGggKz0gY3VyX2xlbmd0aDsKKwkJCSsrbnJfbm9uX2VtcHR5X2xpc3Q7CisJCX0KKwl9CisKKwlyZXN1bHQtPm1heF9saXN0X2xlbmd0aCA9IG1heF9sZW5ndGg7CisJcmVzdWx0LT5hdmVyYWdlX2xpc3RfbGVuZ3RoID0gdG90YWxfbGVuZ3RoIC8gbnJfbm9uX2VtcHR5X2xpc3Q7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisKK3ZvaWQgb2RiX2hhc2hfZGlzcGxheV9zdGF0KG9kYl9oYXNoX3N0YXRfdCBjb25zdCAqIHN0YXQpCit7CisJcHJpbnRmKCJ0b3RhbCBub2RlIG51bWJlcjogICAlZFxuIiwgc3RhdC0+bm9kZV9ucik7CisJcHJpbnRmKCJ0b3RhbCB1c2VkIG5vZGU6ICAgICAlZFxuIiwgc3RhdC0+dXNlZF9ub2RlX25yKTsKKwlwcmludGYoInRvdGFsIGNvdW50OiAgICAgICAgICVsbHVcbiIsIHN0YXQtPnRvdGFsX2NvdW50KTsKKwlwcmludGYoImhhc2ggdGFibGUgc2l6ZTogICAgICVkXG4iLCBzdGF0LT5oYXNoX3RhYmxlX3NpemUpOworCXByaW50ZigiZ3JlYXRlciBsaXN0IGxlbmd0aDogJWRcbiIsIHN0YXQtPm1heF9saXN0X2xlbmd0aCk7CisJcHJpbnRmKCJhdmVyYWdlIG5vbiBlbXB0eSBsaXN0IGxlbmd0aDogJTIuNGZcbiIsIHN0YXQtPmF2ZXJhZ2VfbGlzdF9sZW5ndGgpOworfQorCisKK3ZvaWQgb2RiX2hhc2hfZnJlZV9zdGF0KG9kYl9oYXNoX3N0YXRfdCAqIHN0YXQpCit7CisJZnJlZShzdGF0KTsKK30KZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2xpYmRiL2RiX3RyYXZlbC5jIGIvb3Byb2ZpbGUtMC45LjcvbGliZGIvZGJfdHJhdmVsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2VkNDY3YgotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2xpYmRiL2RiX3RyYXZlbC5jCkBAIC0wLDAgKzEsMTggQEAKKy8qKgorICogQGZpbGUgZGJfdHJhdmVsLmMKKyAqIEluc3BlY3Rpb24gb2YgYSBEQgorICoKKyAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDIgT1Byb2ZpbGUgYXV0aG9ycworICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKKyAqCisgKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKKyAqLworCisjaW5jbHVkZSAib2RiLmgiCisKK29kYl9ub2RlX3QgKiBvZGJfZ2V0X2l0ZXJhdG9yKG9kYl90IGNvbnN0ICogb2RiLCBvZGJfbm9kZV9ucl90ICogbnIpCit7CisJLyogbm9kZSB6ZXJvIGlzIHVudXNlZCAqLworCSpuciA9IG9kYi0+ZGF0YS0+ZGVzY3ItPmN1cnJlbnRfc2l6ZSAtIDE7CisJcmV0dXJuIG9kYi0+ZGF0YS0+bm9kZV9iYXNlICsgMTsKK30KZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2xpYmRiL29kYi5oIGIvb3Byb2ZpbGUtMC45LjcvbGliZGIvb2RiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWFkMWRhMgotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2xpYmRiL29kYi5oCkBAIC0wLDAgKzEsMjM5IEBACisvKioKKyAqIEBmaWxlIG9kYi5oCisgKiBUaGlzIGZpbGUgY29udGFpbnMgdmFyaW91cyBkZWZpbml0aW9ucyBhbmQgaW50ZXJmYWNlIGZvciBtYW5hZ2VtZW50CisgKiBvZiBpbi1tZW1vcnksIHRocm91Z2ggbW1hcGVkIGZpbGUsIGdyb3dhYmxlIGhhc2ggdGFibGUsIHRoYXQgc3RvcmVzCisgKiBzYW1wbGUgZmlsZXMuCisgKgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMiBPUHJvZmlsZSBhdXRob3JzCisgKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORworICoKKyAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQorICovCisKKyNpZm5kZWYgT0RCX0hBU0hfSAorI2RlZmluZSBPREJfSEFTSF9ICisKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworI2luY2x1ZGUgIm9wX2xpc3QuaCIKKworLyoqIHRoZSB0eXBlIG9mIGtleS4gNjQtYml0IGJlY2F1c2UgQ0cgbmVlZHMgMzItYml0IHBhaXIge2Zyb20sdG99ICovCit0eXBlZGVmIHVpbnQ2NF90IG9kYl9rZXlfdDsKKy8qKiB0aGUgdHlwZSBvZiBhbiBpbmZvcm1hdGlvbiBpbiB0aGUgZGF0YWJhc2UgKi8KK3R5cGVkZWYgdW5zaWduZWQgaW50IG9kYl92YWx1ZV90OworLyoqIHRoZSB0eXBlIG9mIGluZGV4IChub2RlIG51bWJlciksIGxpc3QgYXJlIGltcGxlbWVudGVkIHRocm91Z2ggaW5kZXggKi8KK3R5cGVkZWYgdW5zaWduZWQgaW50IG9kYl9pbmRleF90OworLyoqIHRoZSB0eXBlIHN0b3JlIG5vZGUgbnVtYmVyICovCit0eXBlZGVmIG9kYl9pbmRleF90IG9kYl9ub2RlX25yX3Q7CisvKiogc3RvcmUgdGhlIGhhc2ggbWFzaywgaGFzaCB0YWJsZSBzaXplIGFyZSBhbHdheXMgcG93ZXIgb2YgdHdvICovCit0eXBlZGVmIG9kYl9pbmRleF90IG9kYl9oYXNoX21hc2tfdDsKKworLyogdGhlcmUgaXMgKGJ1Y2tldCBmYWN0b3IgKiBuciBub2RlKSBlbnRyeSBpbiBoYXNoIHRhYmxlLCB0aGlzIGNhbiBzZWVtCisgKiBleGNlc3NpdmUgYnV0IGhhc2ggY29kaW5nIGVpcCBkb24ndCBnaXZlIGEgZ29vZCBkaXN0cmlidXRpb25zIGFuZCBvdXIKKyAqIGdvYWwgaXMgdG8gZ2V0IGEgTygxKSBhbW9ydGl6ZWQgaW5zZXJ0IHRpbWUuIGJ1Y2tldCBmYWN0b3IgbXVzdCBiZSBhCisgKiBwb3dlciBvZiB0d28uIEZJWE1FOiBzZWUgYmlnIGNvbW1lbnQgaW4gb2RiX2hhc2hfYWRkX25vZGUsIHlvdSBtdXN0CisgKiByZS1lbmFibGUgemVyb2luZyBoYXNoIHRhYmxlIGlmIEJVQ0tFVF9GQUNUT1IgPiAyIChyb3VnaGx5IGV4YWN0LCB5b3UKKyAqIHdhbnQgdG8gcmVhZCB0aGUgY29tbWVudCBpbiBvZGJfaGFzaF9hZGRfbm9kZSgpIGlmIHlvdSB0dW5lIHRoaXMgZGVmaW5lKQorICovCisjZGVmaW5lIEJVQ0tFVF9GQUNUT1IgMQorCisvKiogYSBkYiBoYXNoIG5vZGUgKi8KK3R5cGVkZWYgc3RydWN0IHsKKwlvZGJfa2V5X3Qga2V5OwkJCS8qKjwgZWlwICovCisJb2RiX3ZhbHVlX3QgdmFsdWU7CQkvKio8IHNhbXBsZXMgY291bnQgKi8KKwlvZGJfaW5kZXhfdCBuZXh0OwkJLyoqPCBuZXh0IGVudHJ5IGZvciB0aGlzIGJ1Y2tldCAqLworfSBvZGJfbm9kZV90OworCisvKiogdGhlIG1pbmltYWwgaW5mb3JtYXRpb24gd2hpY2ggbXVzdCBiZSBzdG9yZWQgaW4gdGhlIGZpbGUgdG8gcmVsb2FkCisgKiBwcm9wZXJseSB0aGUgZGF0YSBiYXNlLCBmb2xsb3dpbmcgdGhpcyBoZWFkZXIgaXMgdGhlIG5vZGUgYXJyYXkgdGhlbgorICogdGhlIGhhc2ggdGFibGUgKHdoZW4gZ3Jvd2luZyB3ZSBhdm9pZCB0byBjb3B5IG5vZGUgYXJyYXkpCisgKi8KK3R5cGVkZWYgc3RydWN0IHsKKwlvZGJfbm9kZV9ucl90IHNpemU7CQkvKio8IGluIG5vZGUgbnIgKHBvd2VyIG9mIHR3bykgKi8KKwlvZGJfbm9kZV9ucl90IGN1cnJlbnRfc2l6ZTsJLyoqPCBuciB1c2VkIG5vZGUgKyAxLCBub2RlIDAgdW51c2VkICovCisJaW50IHBhZGRpbmdbNl07CQkJLyoqPCBmb3IgcGFkZGluZyBhbmQgZnV0dXJlIHVzZSAqLworfSBvZGJfZGVzY3JfdDsKKworLyoqIGEgImRhdGFiYXNlIi4gdGhpcyBpcyBhbiBpbiBtZW1vcnkgb25seSBkZXNjcmlwdGlvbi4KKyAqCisgKiBXZSBhbGxvdyB0byBtYW5hZ2UgYSBkYXRhYmFzZSBpbnNpZGUgYSBtYXBwZWQgZmlsZSB3aXRoIGFuICJoZWFkZXIiIG9mCisgKiB1bmtub3duIHNpemUgc28gb2RiX29wZW4gZ2V0IGEgcGFyYW1ldGVyIHRvIHNwZWNpZnkgdGhlIHNpemUgb2YgdGhpcyBoZWFkZXIuCisgKiBBIHR5cGljYWwgdXNlIGlzOgorICoKKyAqIHN0cnVjdCBoZWFkZXIgeyBpbnQgZXRjOyAuLi4gfTsKKyAqIG9kYl9vcGVuKCZoYXNoLCBmaWxlbmFtZSwgT0RCX1JXLCBzaXplb2YoaGVhZGVyKSk7CisgKiBzbyBvbiB0aGlzIGxpYnJhcnkgaGF2ZSBubyBkZXBlbmRlbmN5IG9uIHRoZSBoZWFkZXIgdHlwZS4KKyAqCisgKiB0aGUgaW50ZXJuYWwgbWVtb3J5IGxheW91dCBmcm9tIGJhc2VfbWVtb3J5IGlzOgorICogIHRoZSB1bmtub3duIGhlYWRlciAoc2l6ZW9mX2hlYWRlcikKKyAqICBvZGJfZGVzY3JfdAorICogIHRoZSBub2RlIGFycmF5OiAoZGVzY3ItPnNpemUgKiBzaXplb2Yob2RiX25vZGVfdCkgZW50cmllcworICogIHRoZSBoYXNoIHRhYmxlOiBhcnJheSBvZiBvZGJfaW5kZXhfdCBpbmRleGluZyB0aGUgbm9kZSBhcnJheSAKKyAqICAgIChkZXNjci0+c2l6ZSAqIEJVQ0tFVF9GQUNUT1IpIGVudHJpZXMKKyAqLwordHlwZWRlZiBzdHJ1Y3Qgb2RiX2RhdGEgeworCW9kYl9ub2RlX3QgKiBub2RlX2Jhc2U7CQkvKio8IGJhc2UgbWVtb3J5IGFyZWEgb2YgdGhlIHBhZ2UgKi8KKwlvZGJfaW5kZXhfdCAqIGhhc2hfYmFzZTsJLyoqPCBiYXNlIG1lbW9yeSBvZiBoYXNoIHRhYmxlICovCisJb2RiX2Rlc2NyX3QgKiBkZXNjcjsJCS8qKjwgdGhlIGN1cnJlbnQgc3RhdGUgb2YgZGF0YWJhc2UgKi8KKwlvZGJfaGFzaF9tYXNrX3QgaGFzaF9tYXNrOwkvKio8ID09IGRlc2NyLT5zaXplIC0gMSAqLworCXVuc2lnbmVkIGludCBzaXplb2ZfaGVhZGVyOwkvKio8IGZyb20gYmFzZV9tZW1vcnkgdG8gb2RiIGhlYWRlciAqLworCXVuc2lnbmVkIGludCBvZmZzZXRfbm9kZTsJLyoqPCBmcm9tIGJhc2VfbWVtb3J5IHRvIG5vZGUgYXJyYXkgKi8KKwl2b2lkICogYmFzZV9tZW1vcnk7CQkvKio8IGJhc2UgbWVtb3J5IG9mIHRoZSBtYXBlZCBtZW1vcnkgKi8KKwlpbnQgZmQ7CQkJCS8qKjwgbW1hcGVkIG1lbW9yeSBmaWxlIGRlc2NyaXB0b3IgKi8KKwljaGFyICogZmlsZW5hbWU7ICAgICAgICAgICAgICAgIC8qKjwgZnVsbCBwYXRoIG5hbWUgb2Ygc2FtcGxlIGZpbGUgKi8KKwlpbnQgcmVmX2NvdW50OyAgICAgICAgICAgICAgICAgIC8qKjwgcmVmZXJlbmNlIGNvdW50ICovCisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OyAgICAgICAgICAvKio8IGhhc2ggYnVja2V0IGxpc3QgKi8KK30gb2RiX2RhdGFfdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworCW9kYl9kYXRhX3QgKiBkYXRhOworfSBvZGJfdDsKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKiBkYl9tYW5hZ2UuYyAqLworCisvKiogaG93IHRvIG9wZW4gdGhlIERCIGZpbGUgKi8KK2VudW0gb2RiX3J3IHsKKwlPREJfUkRPTkxZID0gMCwJLyoqPCBvcGVuIGZvciByZWFkIG9ubHkgKi8KKwlPREJfUkRXUiA9IDEJLyoqPCBvcGVuIGZvciByZWFkIGFuZC9vciB3cml0ZSAqLworfTsKKworLyoqCisgKiBvZGJfaW5pdCAtIGluaXRpYWxpemUgYSBEQiBmaWxlCisgKiBAcGFyYW0gb2RiIHRoZSBEQiBmaWxlIHRvIGluaXQKKyAqLwordm9pZCBvZGJfaW5pdChvZGJfdCAqIG9kYik7CisKKy8qKgorICogb2RiX29wZW4gLSBvcGVuIGEgREIgZmlsZQorICogQHBhcmFtIG9kYiB0aGUgZGF0YSBiYXNlIG9iamVjdCB0byBzZXR1cAorICogQHBhcmFtIGZpbGVuYW1lIHRoZSBmaWxlbmFtZSB3aGVyZSBnbyB0aGUgbWFwZWQgbWVtb3J5CisgKiBAcGFyYW0gcncgXGVudW0gT0RCX1JXIGlmIG9wZW5pbmcgZm9yIHdyaXRpbmcsIGVsc2UgXGVudW0gT0RCX1JET05MWQorICogQHBhcmFtIHNpemVvZl9oZWFkZXIgc2l6ZSBvZiB0aGUgZmlsZSBoZWFkZXIgaWYgYW55CisgKgorICogVGhlIHNpemVvZl9oZWFkZXIgcGFyYW1ldGVyIGFsbG93cyB0aGUgZGF0YSBmaWxlIHRvIGhhdmUgYSBoZWFkZXIKKyAqIGF0IHRoZSBzdGFydCBvZiB0aGUgZmlsZSB3aGljaCBpcyBza2lwcGVkLgorICogb2RiX29wZW4oKSBhbHdheXMgcHJlYWxsb2NhdGUgYSBmZXcgbnVtYmVyIG9mIHBhZ2VzLgorICogcmV0dXJucyAwIG9uIHN1Y2Nlc3MsIGVycm5vIG9uIGZhaWx1cmUKKyAqLworaW50IG9kYl9vcGVuKG9kYl90ICogb2RiLCBjaGFyIGNvbnN0ICogZmlsZW5hbWUsCisgICAgICAgICAgICAgZW51bSBvZGJfcncgcncsIHNpemVfdCBzaXplb2ZfaGVhZGVyKTsKKworLyoqIENsb3NlIHRoZSBnaXZlbiBPREIgZmlsZSAqLwordm9pZCBvZGJfY2xvc2Uob2RiX3QgKiBvZGIpOworCisvKiogcmV0dXJuIHRoZSBudW1iZXIgb2YgdGltZXMgdGhpcyBzYW1wbGUgZmlsZSBpcyBvcGVuICovCitpbnQgb2RiX29wZW5fY291bnQob2RiX3QgY29uc3QgKiBvZGIpOworCisvKiogcmV0dXJuIHRoZSBzdGFydCBvZiB0aGUgbWFwcGVkIGRhdGEgKi8KK3ZvaWQgKiBvZGJfZ2V0X2RhdGEob2RiX3QgKiBvZGIpOworCisvKiogaXNzdWUgYSBtc3luYyBvbiB0aGUgdXNlZCBzaXplIG9mIHRoZSBtbWFwZWQgZmlsZSAqLwordm9pZCBvZGJfc3luYyhvZGJfdCBjb25zdCAqIG9kYik7CisKKy8qKgorICogZ3JvdyB0aGUgaGFzaHRhYmxlIGluIHN1Y2ggd2F5IGN1cnJlbnRfc2l6ZSBpcyB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IGZyZWUKKyAqIG5vZGUuIFRha2UgY2FyZSBhbGwgbm9kZSBwb2ludGVyIGNhbiBiZSBpbnZhbGlkYXRlZCBieSB0aGlzIGNhbGwuCisgKgorICogTm9kZSBhbGxvY2F0aW9uIGlzIGRvbmUgaW4gYSB0d28gc3RlcCB3YXkgMXN0KSBlbnN1cmUgYSBmcmVlIG5vZGUgZXhpc3QKKyAqIGV2ZW50dWFsbHksIGNhbGxlciBjYW4gc2V0dXAgaXQsIDJuZCkgY29tbWl0IHRoZSBub2RlIGFsbG9jYXRpb24gd2l0aAorICogb2RiX2NvbW1pdF9yZXNlcnZhdGlvbigpLgorICogVGhpcyBpcyBkb25lIGluIHRoaXMgd2F5IHRvIGVuc3VyZSBub2RlIHNldHVwIGlzIHZpc2libGUgZnJvbSBhbm90aGVyCisgKiBwcm9jZXNzIGxpa2UgcHAgdG9vbHMgaW4gYW4gYXRvbWljIHdheS4KKyAqCisgKiByZXR1cm5zIDAgb24gc3VjY2Vzcywgbm9uIHplcm8gb24gZmFpbHVyZSBpbiB0aGlzIGNhc2UgdGhpcyBmdW5jdGlvbiBkbworICogbm90aGluZyBhbmQgZXJybm8gaXMgc2V0IGJ5IHRoZSBmaXJzdCBsaWJjIGNhbGwgZmFpbHVyZSBhbGxvd2luZyB0byByZXRyeQorICogYWZ0ZXIgY2xlYW51cCBzb21lIHByb2dyYW0gcmVzb3VyY2UuCisgKi8KK2ludCBvZGJfZ3Jvd19oYXNodGFibGUob2RiX2RhdGFfdCAqIGRhdGEpOworLyoqCisgKiBjb21taXQgYSBwcmV2aW91c2x5IHN1Y2Nlc3NmdWxsIG5vZGUgcmVzZXJ2YXRpb24uIFRoaXMgY2FuJ3QgZmFpbC4KKyAqLworc3RhdGljIF9faW5saW5lIHZvaWQgb2RiX2NvbW1pdF9yZXNlcnZhdGlvbihvZGJfZGF0YV90ICogZGF0YSkKK3sKKwkrK2RhdGEtPmRlc2NyLT5jdXJyZW50X3NpemU7Cit9CisKKy8qKiAiaW1tcG9zc2libGUiIG5vZGUgbnVtYmVyIHRvIGluZGljYXRlIGFuIGVycm9yIGZyb20gb2RiX2hhc2hfYWRkX25vZGUoKSAqLworI2RlZmluZSBPREJfTk9ERV9OUl9JTlZBTElEICgob2RiX25vZGVfbnJfdCktMSkKKworLyogZGJfZGVidWcuYyAqLworLyoqIGNoZWNrIHRoYXQgdGhlIGhhc2ggaXMgd2VsbCBidWlsdCAqLworaW50IG9kYl9jaGVja19oYXNoKG9kYl90IGNvbnN0ICogb2RiKTsKKworLyogZGJfc3RhdC5jICovCit0eXBlZGVmIHN0cnVjdCBvZGJfaGFzaF9zdGF0X3Qgb2RiX2hhc2hfc3RhdF90Oworb2RiX2hhc2hfc3RhdF90ICogb2RiX2hhc2hfc3RhdChvZGJfdCBjb25zdCAqIG9kYik7Cit2b2lkIG9kYl9oYXNoX2Rpc3BsYXlfc3RhdChvZGJfaGFzaF9zdGF0X3QgY29uc3QgKiBzdGF0cyk7Cit2b2lkIG9kYl9oYXNoX2ZyZWVfc3RhdChvZGJfaGFzaF9zdGF0X3QgKiBzdGF0cyk7CisKKy8qIGRiX2luc2VydC5jICovCisvKiogdXBkYXRlIGluZm8gYXQga2V5IGJ5IGluY3JlbWVudGluZyBpdHMgYXNzb2NpYXRlZCB2YWx1ZSBieSBvbmUsIAorICogaWYgdGhlIGtleSBkb2VzIG5vdCBleGlzdCBhIG5ldyBub2RlIGlzIGNyZWF0ZWQgYW5kIHRoZSB2YWx1ZSBhc3NvY2lhdGVkCisgKiBpcyBzZXQgdG8gb25lLgorICoKKyAqIHJldHVybnMgRVhJVF9TVUNDRVNTIG9uIHN1Y2Nlc3MsIEVYSVRfRkFJTFVSRSBvbiBmYWlsdXJlCisgKi8KK2ludCBvZGJfdXBkYXRlX25vZGUob2RiX3QgKiBvZGIsIG9kYl9rZXlfdCBrZXkpOworCisvKioKKyAqIG9kYl91cGRhdGVfbm9kZV93aXRoX29mZnNldAorICogQHBhcmFtIG9kYiB0aGUgZGF0YSBiYXNlIG9iamVjdCB0byBzZXR1cAorICogQHBhcmFtIGtleSB0aGUgaGFzaCBrZXkKKyAqIEBwYXJhbSBvZmZzZXQgdGhlIG9mZnNldCB0byBiZSBhZGRlZAorICoKKyAqIHVwZGF0ZSBpbmZvIGF0IGtleSBieSBhZGRpbmcgdGhlIHNwZWNpZmllZCBvZmZzZXQgdG8gaXRzIGFzc29jaWF0ZWQgdmFsdWUsCisgKiBpZiB0aGUga2V5IGRvZXMgbm90IGV4aXN0IGEgbmV3IG5vZGUgaXMgY3JlYXRlZCBhbmQgdGhlIHZhbHVlIGFzc29jaWF0ZWQKKyAqIGlzIHNldCB0byBvZmZzZXQuCisgKgorICogcmV0dXJucyBFWElUX1NVQ0NFU1Mgb24gc3VjY2VzcywgRVhJVF9GQUlMVVJFIG9uIGZhaWx1cmUKKyAqLworaW50IG9kYl91cGRhdGVfbm9kZV93aXRoX29mZnNldChvZGJfdCAqIG9kYiwgCisJCQkJb2RiX2tleV90IGtleSwgCisJCQkJdW5zaWduZWQgbG9uZyBpbnQgb2Zmc2V0KTsKKworLyoqIEFkZCBhIG5ldyBub2RlIHcvbyByZWdhcmRpbmcgaWYgYSBub2RlIHdpdGggdGhlIHNhbWUga2V5IGFscmVhZHkgZXhpc3RzCisgKgorICogcmV0dXJucyBFWElUX1NVQ0NFU1Mgb24gc3VjY2VzcywgRVhJVF9GQUlMVVJFIG9uIGZhaWx1cmUKKyAqLworaW50IG9kYl9hZGRfbm9kZShvZGJfdCAqIG9kYiwgb2RiX2tleV90IGtleSwgb2RiX3ZhbHVlX3QgdmFsdWUpOworCisvKiBkYl90cmF2ZWwuYyAqLworLyoqCisgKiByZXR1cm4gYSBiYXNlIHBvaW50ZXIgdG8gdGhlIG5vZGUgYXJyYXkgYW5kIG51bWJlciBvZiBub2RlIGluIHRoaXMgYXJyYXkKKyAqIGNhbGxlciB0aGVuIHdpbGwgaXRlcmF0ZSB0aHJvdWdoOgorICoKKyAqIG9kYl9ub2RlX25yX3Qgbm9kZV9uciwgcG9zOworICogb2RiX25vZGVfdCAqIG5vZGUgPSBvZGJfZ2V0X2l0ZXJhdG9yKG9kYiwgJm5vZGVfbnIpOworICoJZm9yICggcG9zID0gMCA7IHBvcyA8IG5vZGVfbnIgOyArK3BvcykKKyAqCQkvLyBkbyBzb21ldGhpbmcKKyAqCisgKiAgbm90ZSB0aGFuIGNhbGxlciBkb2VzIG5vdCBuZWVkIHRvIGZpbHRlciBuaWwga2V5IGFzIGl0J3MgYSB2YWxpZCBrZXksCisgKiBUaGUgcmV0dXJuZWQgcmFuZ2UgaXMgYWxsIHZhbGlkIChpLmUuIHNob3VsZCBuZXZlciBjb250YWluIHplcm8gdmFsdWUpLgorICovCitvZGJfbm9kZV90ICogb2RiX2dldF9pdGVyYXRvcihvZGJfdCBjb25zdCAqIG9kYiwgb2RiX25vZGVfbnJfdCAqIG5yKTsKKworc3RhdGljIF9faW5saW5lIHVuc2lnbmVkIGludAorb2RiX2RvX2hhc2gob2RiX2RhdGFfdCBjb25zdCAqIGRhdGEsIG9kYl9rZXlfdCB2YWx1ZSkKK3sKKwkvKiBGSVhNRTogYmV0dGVyIGhhc2ggZm9yIGVpcCB2YWx1ZSwgbmVlZHMgdG8gaW5zdHJ1bWVudCBjb2RlCisJICogYW5kIGRvIGEgbG90IG9mIHRlc3RzIC4uLiAqLworCS8qIHRyeWluZyB0byBjb21iaW5lIGhpZ2ggb3JkZXIgYml0cyBoaXMgYSBuby1vcDogaW5zaWRlIGEgYmluYXJ5IGltYWdlCisJICogaGlnaCBvcmRlciBiaXRzIGRvbid0IHZhcnkgYSBsb3QsIGhhc2ggdGFibGUgc3RhcnQgd2l0aCA3IGJpdHMgbWFzaworCSAqIHNvIHRoaXMgaGFzaCBjb2RpbmcgdXNlIGJpdHMgMC03LCA4LTE1LiBIYXNoIHRhYmxlIGlzIHN0b3JlZCBpbgorCSAqIGZpbGVzIGF2b2lkaW5nIHRvIHJlYnVpbGRpbmcgdGhlbSBhdCBwcm9maWxpbmcgcmUtc3RhcnQgc28KKwkgKiBvbiBjaGFuZ2luZyBkb19oYXNoKCkgY2hhbmdlIHRoZSBmaWxlIGZvcm1hdCEKKwkgKi8KKwl1aW50MzJfdCB0ZW1wID0gKHZhbHVlID4+IDMyKSBeIHZhbHVlOworCXJldHVybiAoKHRlbXAgPDwgMCkgXiAodGVtcCA+PiA4KSkgJiBkYXRhLT5oYXNoX21hc2s7Cit9CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiAhT0RCX0ggKi8KZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2xpYmRiL3Rlc3RzL01ha2VmaWxlLmFtIGIvb3Byb2ZpbGUtMC45LjcvbGliZGIvdGVzdHMvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjkzMjA4OAotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2xpYmRiL3Rlc3RzL01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsMTUgQEAKK0FNX0NQUEZMQUdTID0gXAorCS1JICR7dG9wX3NyY2Rpcn0vbGlib3AgXAorCS1JICR7dG9wX3NyY2Rpcn0vbGlidXRpbCBcCisJLUkgJHt0b3Bfc3JjZGlyfS9saWJkYgorCitBTV9DRkxBR1MgPSBAT1BfQ0ZMQUdTQAorCitMSUJTID0gQExJQkVSVFlfTElCU0AKKworY2hlY2tfUFJPR1JBTVMgPSBkYl90ZXN0CisKK2RiX3Rlc3RfU09VUkNFUyA9IGRiX3Rlc3QuYworZGJfdGVzdF9MREFERCA9IC4uL2xpYm9kYi5hIC4uLy4uL2xpYnV0aWwvbGlidXRpbC5hCisKK1RFU1RTID0gJHtjaGVja19QUk9HUkFNU30KZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2xpYmRiL3Rlc3RzL01ha2VmaWxlLmluIGIvb3Byb2ZpbGUtMC45LjcvbGliZGIvdGVzdHMvTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzI4NGJjNwotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2xpYmRiL3Rlc3RzL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsNjI4IEBACisjIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjExLjEgZnJvbSBNYWtlZmlsZS5hbS4KKyMgQGNvbmZpZ3VyZV9pbnB1dEAKKworIyBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsCisjIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyMgSW5jLgorIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAorIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCisjIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworQFNFVF9NQUtFQAorVlBBVEggPSBAc3JjZGlyQAorcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACitwa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAorYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAoraW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKK2luc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKK2luc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYworSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKK3RyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKK05PUk1BTF9JTlNUQUxMID0gOgorUFJFX0lOU1RBTEwgPSA6CitQT1NUX0lOU1RBTEwgPSA6CitOT1JNQUxfVU5JTlNUQUxMID0gOgorUFJFX1VOSU5TVEFMTCA9IDoKK1BPU1RfVU5JTlNUQUxMID0gOgorYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKK2hvc3RfdHJpcGxldCA9IEBob3N0QAorY2hlY2tfUFJPR1JBTVMgPSBkYl90ZXN0JChFWEVFWFQpCitURVNUUyA9ICQoY2hlY2tfUFJPR1JBTVMpCitzdWJkaXIgPSBsaWJkYi90ZXN0cworRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChzcmNkaXIpL01ha2VmaWxlLmluCitBQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00CithbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9tNC9iaW51dGlscy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9idWlsdGluZXhwZWN0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2NlbGxzcHViZmRzdXBwb3J0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2NvbXBpbGVyb3B0aW9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2NvbmZpZ21vZHVsZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jb3B5aWZjaGFuZ2UubTQgJCh0b3Bfc3JjZGlyKS9tNC9kb2Nib29rLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2V4dHJhZGlycy5tNCAkKHRvcF9zcmNkaXIpL200L2ZpbmRrZXJuZWwubTQgXAorCSQodG9wX3NyY2RpcikvbTQva2VybmVsb3B0aW9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2tlcm5lbHZlcnNpb24ubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWJ0b29sLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2x0b3B0aW9ucy5tNCAkKHRvcF9zcmNkaXIpL200L2x0c3VnYXIubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbHR2ZXJzaW9uLm00ICQodG9wX3NyY2RpcikvbTQvbHR+b2Jzb2xldGUubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbWFsbG9jYXR0cmlidXRlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3BvcHRjb25zdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9wcmVjb21waWxlZGhlYWRlci5tNCAkKHRvcF9zcmNkaXIpL200L3F0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3Jlc3VsdHluLm00ICQodG9wX3NyY2RpcikvbTQvc3N0cmVhbS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC90eXBlZGVmLm00ICQodG9wX3NyY2RpcikvY29uZmlndXJlLmluCithbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAorCSQoQUNMT0NBTF9NNCkKK21raW5zdGFsbGRpcnMgPSAkKGluc3RhbGxfc2gpIC1kCitDT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5oCitDT05GSUdfQ0xFQU5fRklMRVMgPQorQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTID0KK2FtX2RiX3Rlc3RfT0JKRUNUUyA9IGRiX3Rlc3QuJChPQkpFWFQpCitkYl90ZXN0X09CSkVDVFMgPSAkKGFtX2RiX3Rlc3RfT0JKRUNUUykKK2RiX3Rlc3RfREVQRU5ERU5DSUVTID0gLi4vbGlib2RiLmEgLi4vLi4vbGlidXRpbC9saWJ1dGlsLmEKK0RFRkFVTFRfSU5DTFVERVMgPSAtSS5AYW1fX2lzcmNAIC1JJCh0b3BfYnVpbGRkaXIpCitkZXBjb21wID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9kZXBjb21wCithbV9fZGVwZmlsZXNfbWF5YmUgPSBkZXBmaWxlcworYW1fX212ID0gbXYgLWYKK0NPTVBJTEUgPSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgXAorCSQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKK0xUQ09NUElMRSA9ICQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSBcCisJLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpIFwKKwkkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpCitDQ0xEID0gJChDQykKK0xJTksgPSAkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgXAorCS0tbW9kZT1saW5rICQoQ0NMRCkgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAkKEFNX0xERkxBR1MpIFwKKwkkKExERkxBR1MpIC1vICRACitTT1VSQ0VTID0gJChkYl90ZXN0X1NPVVJDRVMpCitESVNUX1NPVVJDRVMgPSAkKGRiX3Rlc3RfU09VUkNFUykKK0VUQUdTID0gZXRhZ3MKK0NUQUdTID0gY3RhZ3MKK2FtX190dHlfY29sb3JzID0gXAorcmVkPTsgZ3JuPTsgbGduPTsgYmx1PTsgc3RkPQorRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKK0FDTE9DQUwgPSBAQUNMT0NBTEAKK0FNVEFSID0gQEFNVEFSQAorQVIgPSBAQVJACitBVVRPQ09ORiA9IEBBVVRPQ09ORkAKK0FVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKK0FVVE9NQUtFID0gQEFVVE9NQUtFQAorQVdLID0gQEFXS0AKK0JGRF9MSUJTID0gQEJGRF9MSUJTQAorQ0FUX0VOVFJZX0VORCA9IEBDQVRfRU5UUllfRU5EQAorQ0FUX0VOVFJZX1NUQVJUID0gQENBVF9FTlRSWV9TVEFSVEAKK0NDID0gQENDQAorQ0NERVBNT0RFID0gQENDREVQTU9ERUAKK0NGTEFHUyA9IEBDRkxBR1NACitDUFAgPSBAQ1BQQAorQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACitDWFggPSBAQ1hYQAorQ1hYQ1BQID0gQENYWENQUEAKK0NYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKK0NYWEZMQUdTID0gQENYWEZMQUdTQAorQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKK0RBVEUgPSBAREFURUAKK0RFRlMgPSBAREVGU0AKK0RFUERJUiA9IEBERVBESVJACitET0NCT09LX1JPT1QgPSBARE9DQk9PS19ST09UQAorRFNZTVVUSUwgPSBARFNZTVVUSUxACitEVU1QQklOID0gQERVTVBCSU5ACitFQ0hPX0MgPSBARUNIT19DQAorRUNIT19OID0gQEVDSE9fTkAKK0VDSE9fVCA9IEBFQ0hPX1RACitFR1JFUCA9IEBFR1JFUEAKK0VYRUVYVCA9IEBFWEVFWFRACitFWFRSQV9DRkxBR1NfTU9EVUxFID0gQEVYVFJBX0NGTEFHU19NT0RVTEVACitGR1JFUCA9IEBGR1JFUEAKK0dSRVAgPSBAR1JFUEAKK0lOU1RBTEwgPSBASU5TVEFMTEAKK0lOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACitJTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAorSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACitJTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAorSkFWQV9IT01FRElSID0gQEpBVkFfSE9NRURJUkAKK0tJTkMgPSBAS0lOQ0AKK0tTUkMgPSBAS1NSQ0AKK0tWRVJTID0gQEtWRVJTQAorTEQgPSBATERACitMREZMQUdTID0gQExERkxBR1NACitMSUJFUlRZX0xJQlMgPSBATElCRVJUWV9MSUJTQAorTElCT0JKUyA9IEBMSUJPQkpTQAorTElCUyA9IEBMSUJFUlRZX0xJQlNACitMSUJUT09MID0gQExJQlRPT0xACitMSVBPID0gQExJUE9ACitMTl9TID0gQExOX1NACitMVExJQk9CSlMgPSBATFRMSUJPQkpTQAorTUFLRUlORk8gPSBATUFLRUlORk9ACitNS0RJUl9QID0gQE1LRElSX1BACitNT0MgPSBATU9DQAorTU9ESU5TVEFMTERJUiA9IEBNT0RJTlNUQUxMRElSQAorTk0gPSBATk1ACitOTUVESVQgPSBATk1FRElUQAorT0JKRFVNUCA9IEBPQkpEVU1QQAorT0JKRVhUID0gQE9CSkVYVEAKK09QUk9GSUxFX0RJUiA9IEBPUFJPRklMRV9ESVJACitPUFJPRklMRV9NT0RVTEVfQVJDSCA9IEBPUFJPRklMRV9NT0RVTEVfQVJDSEAKK09QX0NGTEFHUyA9IEBPUF9DRkxBR1NACitPUF9DWFhGTEFHUyA9IEBPUF9DWFhGTEFHU0AKK09QX0RPQ0RJUiA9IEBPUF9ET0NESVJACitPVE9PTCA9IEBPVE9PTEAKK09UT09MNjQgPSBAT1RPT0w2NEAKK1BBQ0tBR0UgPSBAUEFDS0FHRUAKK1BBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAorUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKK1BBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAorUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKK1BBQ0tBR0VfVVJMID0gQFBBQ0tBR0VfVVJMQAorUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKK1BBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAorUEtHX0NPTkZJRyA9IEBQS0dfQ09ORklHQAorUEtHX0NPTkZJR19MSUJESVIgPSBAUEtHX0NPTkZJR19MSUJESVJACitQS0dfQ09ORklHX1BBVEggPSBAUEtHX0NPTkZJR19QQVRIQAorUE9QVF9MSUJTID0gQFBPUFRfTElCU0AKK1BUUkRJRkZfVF9UWVBFID0gQFBUUkRJRkZfVF9UWVBFQAorUVRfQ0ZMQUdTID0gQFFUX0NGTEFHU0AKK1FUX0lOQ0xVREVTID0gQFFUX0lOQ0xVREVTQAorUVRfTERGTEFHUyA9IEBRVF9MREZMQUdTQAorUVRfTElCID0gQFFUX0xJQkAKK1FUX0xJQlMgPSBAUVRfTElCU0AKK1FUX1ZFUlNJT04gPSBAUVRfVkVSU0lPTkAKK1JBTkxJQiA9IEBSQU5MSUJACitTRUQgPSBAU0VEQAorU0VUX01BS0UgPSBAU0VUX01BS0VACitTSEVMTCA9IEBTSEVMTEAKK1NJWkVfVF9UWVBFID0gQFNJWkVfVF9UWVBFQAorU1RSSVAgPSBAU1RSSVBACitVSUMgPSBAVUlDQAorVUlDaGVscCA9IEBVSUNoZWxwQAorVkVSU0lPTiA9IEBWRVJTSU9OQAorWE1LTUYgPSBAWE1LTUZACitYTUxfQ0FUQUxPRyA9IEBYTUxfQ0FUQUxPR0AKK1hTTFRQUk9DID0gQFhTTFRQUk9DQAorWFNMVFBST0NfRkxBR1MgPSBAWFNMVFBST0NfRkxBR1NACitYX0NGTEFHUyA9IEBYX0NGTEFHU0AKK1hfRVhUUkFfTElCUyA9IEBYX0VYVFJBX0xJQlNACitYX0xJQlMgPSBAWF9MSUJTQAorWF9QUkVfTElCUyA9IEBYX1BSRV9MSUJTQAorYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKK2Fic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKK2Fic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKK2Fic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAorYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACithY19jdF9DWFggPSBAYWNfY3RfQ1hYQAorYWNfY3RfRFVNUEJJTiA9IEBhY19jdF9EVU1QQklOQAorYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACithbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAorYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKK2FtX190YXIgPSBAYW1fX3RhckAKK2FtX191bnRhciA9IEBhbV9fdW50YXJACitiaW5kaXIgPSBAYmluZGlyQAorYnVpbGQgPSBAYnVpbGRACitidWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AKK2J1aWxkX2NwdSA9IEBidWlsZF9jcHVACitidWlsZF9vcyA9IEBidWlsZF9vc0AKK2J1aWxkX3ZlbmRvciA9IEBidWlsZF92ZW5kb3JACitidWlsZGRpciA9IEBidWlsZGRpckAKK2RhdGFkaXIgPSBAZGF0YWRpckAKK2RhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAorZG9jZGlyID0gQGRvY2RpckAKK2R2aWRpciA9IEBkdmlkaXJACitleGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKK2hvc3QgPSBAaG9zdEAKK2hvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKK2hvc3RfY3B1ID0gQGhvc3RfY3B1QAoraG9zdF9vcyA9IEBob3N0X29zQAoraG9zdF92ZW5kb3IgPSBAaG9zdF92ZW5kb3JACitodG1sZGlyID0gQGh0bWxkaXJACitpbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACitpbmZvZGlyID0gQGluZm9kaXJACitpbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACitsaWJkaXIgPSBAbGliZGlyQAorbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAorbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKK2xvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKK2x0X0VDSE8gPSBAbHRfRUNIT0AKK21hbmRpciA9IEBtYW5kaXJACitta2Rpcl9wID0gQG1rZGlyX3BACitvbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACitwZGZkaXIgPSBAcGRmZGlyQAorcHJlZml4ID0gQHByZWZpeEAKK3Byb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKK3BzZGlyID0gQHBzZGlyQAorc2JpbmRpciA9IEBzYmluZGlyQAorc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACitzcmNkaXIgPSBAc3JjZGlyQAorc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAordGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKK3RvcF9idWlsZF9wcmVmaXggPSBAdG9wX2J1aWxkX3ByZWZpeEAKK3RvcF9idWlsZGRpciA9IEB0b3BfYnVpbGRkaXJACit0b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACit0b3BkaXIgPSBAdG9wZGlyQAorQU1fQ1BQRkxBR1MgPSBcCisJLUkgJHt0b3Bfc3JjZGlyfS9saWJvcCBcCisJLUkgJHt0b3Bfc3JjZGlyfS9saWJ1dGlsIFwKKwktSSAke3RvcF9zcmNkaXJ9L2xpYmRiCisKK0FNX0NGTEFHUyA9IEBPUF9DRkxBR1NACitkYl90ZXN0X1NPVVJDRVMgPSBkYl90ZXN0LmMKK2RiX3Rlc3RfTERBREQgPSAuLi9saWJvZGIuYSAuLi8uLi9saWJ1dGlsL2xpYnV0aWwuYQorYWxsOiBhbGwtYW0KKworLlNVRkZJWEVTOgorLlNVRkZJWEVTOiAuYyAubG8gLm8gLm9iagorJChzcmNkaXIpL01ha2VmaWxlLmluOiAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKKwlAZm9yIGRlcCBpbiAkPzsgZG8gXAorCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCisJICAgICokJGRlcCopIFwKKwkgICAgICAoIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCApIFwKKwkgICAgICAgICYmIHsgaWYgdGVzdCAtZiAkQDsgdGhlbiBleGl0IDA7IGVsc2UgYnJlYWs7IGZpOyB9OyBcCisJICAgICAgZXhpdCAxOzsgXAorCSAgZXNhYzsgXAorCWRvbmU7IFwKKwllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gbGliZGIvdGVzdHMvTWFrZWZpbGUnOyBcCisJJChhbV9fY2QpICQodG9wX3NyY2RpcikgJiYgXAorCSAgJChBVVRPTUFLRSkgLS1mb3JlaWduIGxpYmRiL3Rlc3RzL01ha2VmaWxlCisuUFJFQ0lPVVM6IE1ha2VmaWxlCitNYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCisJQGNhc2UgJyQ/JyBpbiBcCisJICAqY29uZmlnLnN0YXR1cyopIFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoOzsgXAorCSAgKikgXAorCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCisJZXNhYzsKKworJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2RpcikvY29uZmlndXJlICQoQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCisKKyQodG9wX3NyY2RpcikvY29uZmlndXJlOiAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCiskKEFDTE9DQUxfTTQpOiAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorJChhbV9fYWNsb2NhbF9tNF9kZXBzKToKKworY2xlYW4tY2hlY2tQUk9HUkFNUzoKKwlAbGlzdD0nJChjaGVja19QUk9HUkFNUyknOyB0ZXN0IC1uICIkJGxpc3QiIHx8IGV4aXQgMDsgXAorCWVjaG8gIiBybSAtZiIgJCRsaXN0OyBcCisJcm0gLWYgJCRsaXN0IHx8IGV4aXQgJCQ/OyBcCisJdGVzdCAtbiAiJChFWEVFWFQpIiB8fCBleGl0IDA7IFwKKwlsaXN0PWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCI7IGRvbmUgfCBzZWQgJ3MvJChFWEVFWFQpJCQvLydgOyBcCisJZWNobyAiIHJtIC1mIiAkJGxpc3Q7IFwKKwlybSAtZiAkJGxpc3QKK2RiX3Rlc3QkKEVYRUVYVCk6ICQoZGJfdGVzdF9PQkpFQ1RTKSAkKGRiX3Rlc3RfREVQRU5ERU5DSUVTKSAKKwlAcm0gLWYgZGJfdGVzdCQoRVhFRVhUKQorCSQoTElOSykgJChkYl90ZXN0X09CSkVDVFMpICQoZGJfdGVzdF9MREFERCkgJChMSUJTKQorCittb3N0bHljbGVhbi1jb21waWxlOgorCS1ybSAtZiAqLiQoT0JKRVhUKQorCitkaXN0Y2xlYW4tY29tcGlsZToKKwktcm0gLWYgKi50YWIuYworCitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvZGJfdGVzdC5Qb0BhbV9fcXVvdGVACisKKy5jLm86CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJCouVHBvIC1jIC1vICRAICQ8CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENPTVBJTEUpIC1jICQ8CisKKy5jLm9iajoKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDT01QSUxFKSAtYyBgJChDWUdQQVRIX1cpICckPCdgCisKKy5jLmxvOgorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMVENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJCouVHBvIC1jIC1vICRAICQ8CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTFRDT01QSUxFKSAtYyAtbyAkQCAkPAorCittb3N0bHljbGVhbi1saWJ0b29sOgorCS1ybSAtZiAqLmxvCisKK2NsZWFuLWxpYnRvb2w6CisJLXJtIC1yZiAubGlicyBfbGlicworCitJRDogJChIRUFERVJTKSAkKFNPVVJDRVMpICQoTElTUCkgJChUQUdTX0ZJTEVTKQorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorCW1raWQgLWZJRCAkJHVuaXF1ZQordGFnczogVEFHUworCitUQUdTOiAgJChIRUFERVJTKSAkKFNPVVJDRVMpICAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCisJCSQoVEFHU19GSUxFUykgJChMSVNQKQorCXNldCB4OyBcCisJaGVyZT1gcHdkYDsgXAorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKwkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKwlzaGlmdDsgXAorCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJCokJHVuaXF1ZSI7IHRoZW4gOjsgZWxzZSBcCisJICB0ZXN0IC1uICIkJHVuaXF1ZSIgfHwgdW5pcXVlPSQkZW1wdHlfZml4OyBcCisJICBpZiB0ZXN0ICQkIyAtZ3QgMDsgdGhlbiBcCisJICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKwkgICAgICAiJCRAIiAkJHVuaXF1ZTsgXAorCSAgZWxzZSBcCisJICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKwkgICAgICAkJHVuaXF1ZTsgXAorCSAgZmk7IFwKKwlmaQorY3RhZ3M6IENUQUdTCitDVEFHUzogICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAorCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCisJICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCisJdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdW5pcXVlIiBcCisJICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCisJICAgICAkJHVuaXF1ZQorCitHVEFHUzoKKwloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAorCSAgJiYgJChhbV9fY2QpICQodG9wX3NyY2RpcikgXAorCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAiJCRoZXJlIgorCitkaXN0Y2xlYW4tdGFnczoKKwktcm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncworCitjaGVjay1URVNUUzogJChURVNUUykKKwlAZmFpbGVkPTA7IGFsbD0wOyB4ZmFpbD0wOyB4cGFzcz0wOyBza2lwPTA7IFwKKwlzcmNkaXI9JChzcmNkaXIpOyBleHBvcnQgc3JjZGlyOyBcCisJbGlzdD0nICQoVEVTVFMpICc7IFwKKwkkKGFtX190dHlfY29sb3JzKTsgXAorCWlmIHRlc3QgLW4gIiQkbGlzdCI7IHRoZW4gXAorCSAgZm9yIHRzdCBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAuLyQkdHN0OyB0aGVuIGRpcj0uLzsgXAorCSAgICBlbGlmIHRlc3QgLWYgJCR0c3Q7IHRoZW4gZGlyPTsgXAorCSAgICBlbHNlIGRpcj0iJChzcmNkaXIpLyI7IGZpOyBcCisJICAgIGlmICQoVEVTVFNfRU5WSVJPTk1FTlQpICQke2Rpcn0kJHRzdDsgdGhlbiBcCisJICAgICAgYWxsPWBleHByICQkYWxsICsgMWA7IFwKKwkgICAgICBjYXNlICIgJChYRkFJTF9URVNUUykgIiBpbiBcCisJICAgICAgKltcIFwJXSQkdHN0W1wgXAldKikgXAorCQl4cGFzcz1gZXhwciAkJHhwYXNzICsgMWA7IFwKKwkJZmFpbGVkPWBleHByICQkZmFpbGVkICsgMWA7IFwKKwkJY29sPSQkcmVkOyByZXM9WFBBU1M7IFwKKwkgICAgICA7OyBcCisJICAgICAgKikgXAorCQljb2w9JCRncm47IHJlcz1QQVNTOyBcCisJICAgICAgOzsgXAorCSAgICAgIGVzYWM7IFwKKwkgICAgZWxpZiB0ZXN0ICQkPyAtbmUgNzc7IHRoZW4gXAorCSAgICAgIGFsbD1gZXhwciAkJGFsbCArIDFgOyBcCisJICAgICAgY2FzZSAiICQoWEZBSUxfVEVTVFMpICIgaW4gXAorCSAgICAgICpbXCBcCV0kJHRzdFtcIFwJXSopIFwKKwkJeGZhaWw9YGV4cHIgJCR4ZmFpbCArIDFgOyBcCisJCWNvbD0kJGxnbjsgcmVzPVhGQUlMOyBcCisJICAgICAgOzsgXAorCSAgICAgICopIFwKKwkJZmFpbGVkPWBleHByICQkZmFpbGVkICsgMWA7IFwKKwkJY29sPSQkcmVkOyByZXM9RkFJTDsgXAorCSAgICAgIDs7IFwKKwkgICAgICBlc2FjOyBcCisJICAgIGVsc2UgXAorCSAgICAgIHNraXA9YGV4cHIgJCRza2lwICsgMWA7IFwKKwkgICAgICBjb2w9JCRibHU7IHJlcz1TS0lQOyBcCisJICAgIGZpOyBcCisJICAgIGVjaG8gIiQke2NvbH0kJHJlcyQke3N0ZH06ICQkdHN0IjsgXAorCSAgZG9uZTsgXAorCSAgaWYgdGVzdCAiJCRhbGwiIC1lcSAxOyB0aGVuIFwKKwkgICAgdGVzdHM9InRlc3QiOyBcCisJICAgIEFsbD0iIjsgXAorCSAgZWxzZSBcCisJICAgIHRlc3RzPSJ0ZXN0cyI7IFwKKwkgICAgQWxsPSJBbGwgIjsgXAorCSAgZmk7IFwKKwkgIGlmIHRlc3QgIiQkZmFpbGVkIiAtZXEgMDsgdGhlbiBcCisJICAgIGlmIHRlc3QgIiQkeGZhaWwiIC1lcSAwOyB0aGVuIFwKKwkgICAgICBiYW5uZXI9IiQkQWxsJCRhbGwgJCR0ZXN0cyBwYXNzZWQiOyBcCisJICAgIGVsc2UgXAorCSAgICAgIGlmIHRlc3QgIiQkeGZhaWwiIC1lcSAxOyB0aGVuIGZhaWx1cmVzPWZhaWx1cmU7IGVsc2UgZmFpbHVyZXM9ZmFpbHVyZXM7IGZpOyBcCisJICAgICAgYmFubmVyPSIkJEFsbCQkYWxsICQkdGVzdHMgYmVoYXZlZCBhcyBleHBlY3RlZCAoJCR4ZmFpbCBleHBlY3RlZCAkJGZhaWx1cmVzKSI7IFwKKwkgICAgZmk7IFwKKwkgIGVsc2UgXAorCSAgICBpZiB0ZXN0ICIkJHhwYXNzIiAtZXEgMDsgdGhlbiBcCisJICAgICAgYmFubmVyPSIkJGZhaWxlZCBvZiAkJGFsbCAkJHRlc3RzIGZhaWxlZCI7IFwKKwkgICAgZWxzZSBcCisJICAgICAgaWYgdGVzdCAiJCR4cGFzcyIgLWVxIDE7IHRoZW4gcGFzc2VzPXBhc3M7IGVsc2UgcGFzc2VzPXBhc3NlczsgZmk7IFwKKwkgICAgICBiYW5uZXI9IiQkZmFpbGVkIG9mICQkYWxsICQkdGVzdHMgZGlkIG5vdCBiZWhhdmUgYXMgZXhwZWN0ZWQgKCQkeHBhc3MgdW5leHBlY3RlZCAkJHBhc3NlcykiOyBcCisJICAgIGZpOyBcCisJICBmaTsgXAorCSAgZGFzaGVzPSIkJGJhbm5lciI7IFwKKwkgIHNraXBwZWQ9IiI7IFwKKwkgIGlmIHRlc3QgIiQkc2tpcCIgLW5lIDA7IHRoZW4gXAorCSAgICBpZiB0ZXN0ICIkJHNraXAiIC1lcSAxOyB0aGVuIFwKKwkgICAgICBza2lwcGVkPSIoJCRza2lwIHRlc3Qgd2FzIG5vdCBydW4pIjsgXAorCSAgICBlbHNlIFwKKwkgICAgICBza2lwcGVkPSIoJCRza2lwIHRlc3RzIHdlcmUgbm90IHJ1bikiOyBcCisJICAgIGZpOyBcCisJICAgIHRlc3QgYGVjaG8gIiQkc2tpcHBlZCIgfCB3YyAtY2AgLWxlIGBlY2hvICIkJGJhbm5lciIgfCB3YyAtY2AgfHwgXAorCSAgICAgIGRhc2hlcz0iJCRza2lwcGVkIjsgXAorCSAgZmk7IFwKKwkgIHJlcG9ydD0iIjsgXAorCSAgaWYgdGVzdCAiJCRmYWlsZWQiIC1uZSAwICYmIHRlc3QgLW4gIiQoUEFDS0FHRV9CVUdSRVBPUlQpIjsgdGhlbiBcCisJICAgIHJlcG9ydD0iUGxlYXNlIHJlcG9ydCB0byAkKFBBQ0tBR0VfQlVHUkVQT1JUKSI7IFwKKwkgICAgdGVzdCBgZWNobyAiJCRyZXBvcnQiIHwgd2MgLWNgIC1sZSBgZWNobyAiJCRiYW5uZXIiIHwgd2MgLWNgIHx8IFwKKwkgICAgICBkYXNoZXM9IiQkcmVwb3J0IjsgXAorCSAgZmk7IFwKKwkgIGRhc2hlcz1gZWNobyAiJCRkYXNoZXMiIHwgc2VkIHMvLi89L2dgOyBcCisJICBpZiB0ZXN0ICIkJGZhaWxlZCIgLWVxIDA7IHRoZW4gXAorCSAgICBlY2hvICIkJGdybiQkZGFzaGVzIjsgXAorCSAgZWxzZSBcCisJICAgIGVjaG8gIiQkcmVkJCRkYXNoZXMiOyBcCisJICBmaTsgXAorCSAgZWNobyAiJCRiYW5uZXIiOyBcCisJICB0ZXN0IC16ICIkJHNraXBwZWQiIHx8IGVjaG8gIiQkc2tpcHBlZCI7IFwKKwkgIHRlc3QgLXogIiQkcmVwb3J0IiB8fCBlY2hvICIkJHJlcG9ydCI7IFwKKwkgIGVjaG8gIiQkZGFzaGVzJCRzdGQiOyBcCisJICB0ZXN0ICIkJGZhaWxlZCIgLWVxIDA7IFwKKwllbHNlIDo7IGZpCisKK2Rpc3RkaXI6ICQoRElTVEZJTEVTKQorCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisJbGlzdD0nJChESVNURklMRVMpJzsgXAorCSAgZGlzdF9maWxlcz1gZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8IFwKKwkgIHNlZCAtZSAic3xeJCRzcmNkaXJzdHJpcC98fDt0IiBcCisJICAgICAgLWUgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98O3QiYDsgXAorCWNhc2UgJCRkaXN0X2ZpbGVzIGluIFwKKwkgICovKikgJChNS0RJUl9QKSBgZWNobyAiJCRkaXN0X2ZpbGVzIiB8IFwKKwkJCSAgIHNlZCAnL1wvLyFkO3N8XnwkKGRpc3RkaXIpL3w7cywvW14vXSokJCwsJyB8IFwKKwkJCSAgIHNvcnQgLXVgIDs7IFwKKwllc2FjOyBcCisJZm9yIGZpbGUgaW4gJCRkaXN0X2ZpbGVzOyBkbyBcCisJICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCisJICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAorCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAorCSAgICBpZiB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkZmlsZSI7IHRoZW4gXAorCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAorCSAgICBmaTsgXAorCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKKwkgICAgICBjcCAtZnBSICQoc3JjZGlyKS8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCisJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisJICAgIGZpOyBcCisJICAgIGNwIC1mcFIgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKKwkgIGVsc2UgXAorCSAgICB0ZXN0IC1mICIkKGRpc3RkaXIpLyQkZmlsZSIgXAorCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICIkKGRpc3RkaXIpLyQkZmlsZSIgXAorCSAgICB8fCBleGl0IDE7IFwKKwkgIGZpOyBcCisJZG9uZQorY2hlY2stYW06IGFsbC1hbQorCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICQoY2hlY2tfUFJPR1JBTVMpCisJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgY2hlY2stVEVTVFMKK2NoZWNrOiBjaGVjay1hbQorYWxsLWFtOiBNYWtlZmlsZQoraW5zdGFsbGRpcnM6CitpbnN0YWxsOiBpbnN0YWxsLWFtCitpbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1hbQoraW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtYW0KK3VuaW5zdGFsbDogdW5pbnN0YWxsLWFtCisKK2luc3RhbGwtYW06IGFsbC1hbQorCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCisKK2luc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLWFtCitpbnN0YWxsLXN0cmlwOgorCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisJICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKKwkgIGB0ZXN0IC16ICckKFNUUklQKScgfHwgXAorCSAgICBlY2hvICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknImAgaW5zdGFsbAorbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKKworY2xlYW4tZ2VuZXJpYzoKKworZGlzdGNsZWFuLWdlbmVyaWM6CisJLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCisJLXRlc3QgLiA9ICIkKHNyY2RpcikiIHx8IHRlc3QgLXogIiQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpCisKK21haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKKwlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCisJQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgorY2xlYW46IGNsZWFuLWFtCisKK2NsZWFuLWFtOiBjbGVhbi1jaGVja1BST0dSQU1TIGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBcCisJbW9zdGx5Y2xlYW4tYW0KKworZGlzdGNsZWFuOiBkaXN0Y2xlYW4tYW0KKwktcm0gLXJmIC4vJChERVBESVIpCisJLXJtIC1mIE1ha2VmaWxlCitkaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKKwlkaXN0Y2xlYW4tdGFncworCitkdmk6IGR2aS1hbQorCitkdmktYW06CisKK2h0bWw6IGh0bWwtYW0KKworaHRtbC1hbToKKworaW5mbzogaW5mby1hbQorCitpbmZvLWFtOgorCitpbnN0YWxsLWRhdGEtYW06CisKK2luc3RhbGwtZHZpOiBpbnN0YWxsLWR2aS1hbQorCitpbnN0YWxsLWR2aS1hbToKKworaW5zdGFsbC1leGVjLWFtOgorCitpbnN0YWxsLWh0bWw6IGluc3RhbGwtaHRtbC1hbQorCitpbnN0YWxsLWh0bWwtYW06CisKK2luc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLWFtCisKK2luc3RhbGwtaW5mby1hbToKKworaW5zdGFsbC1tYW46CisKK2luc3RhbGwtcGRmOiBpbnN0YWxsLXBkZi1hbQorCitpbnN0YWxsLXBkZi1hbToKKworaW5zdGFsbC1wczogaW5zdGFsbC1wcy1hbQorCitpbnN0YWxsLXBzLWFtOgorCitpbnN0YWxsY2hlY2stYW06CisKK21haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tYW0KKwktcm0gLXJmIC4vJChERVBESVIpCisJLXJtIC1mIE1ha2VmaWxlCittYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCisKK21vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1hbQorCittb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIFwKKwltb3N0bHljbGVhbi1saWJ0b29sCisKK3BkZjogcGRmLWFtCisKK3BkZi1hbToKKworcHM6IHBzLWFtCisKK3BzLWFtOgorCit1bmluc3RhbGwtYW06CisKKy5NQUtFOiBjaGVjay1hbSBpbnN0YWxsLWFtIGluc3RhbGwtc3RyaXAKKworLlBIT05ZOiBDVEFHUyBHVEFHUyBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLVRFU1RTIGNoZWNrLWFtIGNsZWFuIFwKKwljbGVhbi1jaGVja1BST0dSQU1TIGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBjdGFncyBcCisJZGlzdGNsZWFuIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKKwlkaXN0Y2xlYW4tbGlidG9vbCBkaXN0Y2xlYW4tdGFncyBkaXN0ZGlyIGR2aSBkdmktYW0gaHRtbCBcCisJaHRtbC1hbSBpbmZvIGluZm8tYW0gaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBcCisJaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZHZpIGluc3RhbGwtZHZpLWFtIGluc3RhbGwtZXhlYyBcCisJaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaHRtbCBpbnN0YWxsLWh0bWwtYW0gaW5zdGFsbC1pbmZvIFwKKwlpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gaW5zdGFsbC1wZGYgaW5zdGFsbC1wZGYtYW0gXAorCWluc3RhbGwtcHMgaW5zdGFsbC1wcy1hbSBpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBcCisJaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIG1haW50YWluZXItY2xlYW4gXAorCW1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBtb3N0bHljbGVhbi1jb21waWxlIFwKKwltb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wgcGRmIHBkZi1hbSBwcyBwcy1hbSBcCisJdGFncyB1bmluc3RhbGwgdW5pbnN0YWxsLWFtCisKKworIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KKyMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgorLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvbGliZGIvdGVzdHMvZGJfdGVzdC5jIGIvb3Byb2ZpbGUtMC45LjcvbGliZGIvdGVzdHMvZGJfdGVzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlMGIxODkKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9saWJkYi90ZXN0cy9kYl90ZXN0LmMKQEAgLTAsMCArMSwxODcgQEAKKy8qKgorICogQGZpbGUgZGJfdGVzdC5jCisgKiBUZXN0cyBmb3IgREIgaGFzaAorICoKKyAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDIgT1Byb2ZpbGUgYXV0aG9ycworICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKKyAqCisgKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKKyAqLworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpbmNsdWRlIDxzeXMvcmVzb3VyY2UuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisKKyNpbmNsdWRlICJvcF9zYW1wbGVfZmlsZS5oIgorI2luY2x1ZGUgIm9kYi5oIgorCisjZGVmaW5lIFRFU1RfRklMRU5BTUUgInRlc3QtaGFzaC1kYi5kYXQiCisKK3N0YXRpYyBpbnQgbnJfZXJyb3I7CisKK3N0YXRpYyBpbnQgdmVyYm9zZSA9IDA7CisKKyNkZWZpbmUgdmVyYnByaW50ZihhcmdzLi4uKSBcCisJZG8geyBcCisJCWlmICh2ZXJib3NlKSBcCisJCQlwcmludGYoYXJncyk7IFwKKwl9IHdoaWxlICgwKQorCitzdGF0aWMgZG91YmxlIHVzZWRfdGltZSh2b2lkKQoreworCXN0cnVjdCBydXNhZ2UgIHVzYWdlOworCisJZ2V0cnVzYWdlKFJVU0FHRV9TRUxGLCAmdXNhZ2UpOworCisJcmV0dXJuICh1c2FnZS5ydV91dGltZS50dl9zZWMgKyB1c2FnZS5ydV9zdGltZS50dl9zZWMpICogMUU5ICsgCisJCSgodXNhZ2UucnVfdXRpbWUudHZfdXNlYyArIHVzYWdlLnJ1X3N0aW1lLnR2X3VzZWMpKSAqIDEwMDA7Cit9CisKKworLyogdXBkYXRlIG5yIGl0ZW0gKi8KK3N0YXRpYyB2b2lkIHNwZWVkX3Rlc3QoaW50IG5yX2l0ZW0sIGNoYXIgY29uc3QgKiB0ZXN0X25hbWUpCit7CisJaW50IGk7CisJZG91YmxlIGJlZ2luLCBlbmQ7CisJb2RiX3QgaGFzaDsKKwlpbnQgcmM7CisKKwlyYyA9IG9kYl9vcGVuKCZoYXNoLCBURVNUX0ZJTEVOQU1FLCBPREJfUkRXUiwgc2l6ZW9mKHN0cnVjdCBvcGRfaGVhZGVyKSk7CisJaWYgKHJjKSB7CisJCWZwcmludGYoc3RkZXJyLCAiJXMiLCBzdHJlcnJvcihyYykpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorCWJlZ2luID0gdXNlZF90aW1lKCk7CisJZm9yIChpID0gMCA7IGkgPCBucl9pdGVtIDsgKytpKSB7CisJCXJjID0gb2RiX3VwZGF0ZV9ub2RlKCZoYXNoLCBpKTsKKwkJaWYgKHJjICE9IEVYSVRfU1VDQ0VTUykgeworCQkJZnByaW50ZihzdGRlcnIsICIlcyIsIHN0cmVycm9yKHJjKSk7CisJCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJCX0KKwl9CisKKwllbmQgPSB1c2VkX3RpbWUoKTsKKwlvZGJfY2xvc2UoJmhhc2gpOworCisJdmVyYnByaW50ZigiJXM6IG5yIGl0ZW06ICVkLCBlbGFwc2VkOiAlZiBuc1xuIiwKKwkJICAgdGVzdF9uYW1lLCBucl9pdGVtLCAoZW5kIC0gYmVnaW4pIC8gbnJfaXRlbSk7Cit9CisKKworc3RhdGljIHZvaWQgZG9fc3BlZWRfdGVzdCh2b2lkKQoreworCWludCBpOworCisJZm9yIChpID0gMTAwMDAwOyBpIDw9IDEwMDAwMDAwOyBpICo9IDEwKSB7CisJCS8vIGZpcnN0IHRlc3QgY291bnQgaW5zZXJ0aW9uLCBzZWNvbmQgZmV0Y2ggYW5kIGluY3IgY291bnQKKwkJc3BlZWRfdGVzdChpLCAiaW5zZXJ0Iik7CisJCXNwZWVkX3Rlc3QoaSwgInVwZGF0ZSIpOworCQlyZW1vdmUoVEVTVF9GSUxFTkFNRSk7CisJfQorfQorCisKK3N0YXRpYyBpbnQgdGVzdChpbnQgbnJfaXRlbSwgaW50IG5yX3VuaXF1ZV9pdGVtKQoreworCWludCBpOworCW9kYl90IGhhc2g7CisJaW50IHJldDsKKwlpbnQgcmM7CisKKwlyYyA9IG9kYl9vcGVuKCZoYXNoLCBURVNUX0ZJTEVOQU1FLCBPREJfUkRXUiwgc2l6ZW9mKHN0cnVjdCBvcGRfaGVhZGVyKSk7CisJaWYgKHJjKSB7CisJCWZwcmludGYoc3RkZXJyLCAiJXMiLCBzdHJlcnJvcihyYykpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorCisKKwlmb3IgKGkgPSAwIDsgaSA8IG5yX2l0ZW0gOyArK2kpIHsKKwkJb2RiX2tleV90IGtleSA9IChyYW5kb20oKSAlIG5yX3VuaXF1ZV9pdGVtKSArIDE7CisJCXJjID0gb2RiX3VwZGF0ZV9ub2RlKCZoYXNoLCBrZXkpOworCQlpZiAocmMgIT0gRVhJVF9TVUNDRVNTKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIiVzIiwgc3RyZXJyb3IocmMpKTsKKwkJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwkJfQorCX0KKworCXJldCA9IG9kYl9jaGVja19oYXNoKCZoYXNoKTsKKworCW9kYl9jbG9zZSgmaGFzaCk7CisKKwlyZW1vdmUoVEVTVF9GSUxFTkFNRSk7CisKKwlyZXR1cm4gcmV0OworfQorCisKK3N0YXRpYyB2b2lkIGRvX3Rlc3Qodm9pZCkKK3sKKwlpbnQgaSwgajsKKworCWZvciAoaSA9IDEwMDA7IGkgPD0gMTAwMDAwOyBpICo9IDEwKSB7CisJCWZvciAoaiA9IDEwMCA7IGogPD0gaSAvIDEwIDsgaiAqPSAxMCkgeworCQkJaWYgKHRlc3QoaSwgaikpIHsKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkIGZhaWx1cmUgZm9yICVkICVkXG4iLAorCQkJCSAgICAgICBfX0ZJTEVfXywgX19MSU5FX18sIGksIGopOworCQkJCW5yX2Vycm9yKys7CisJCQl9IGVsc2UgeworCQkJCXZlcmJwcmludGYoInRlc3QoKSBvayAlZCAlZFxuIiwgaSwgaik7CisJCQl9CisJCX0KKwl9Cit9CisKKworc3RhdGljIHZvaWQgc2FuaXR5X2NoZWNrKGNoYXIgY29uc3QgKiBmaWxlbmFtZSkKK3sKKwlvZGJfdCBoYXNoOworCWludCByYzsKKworCXJjID0gb2RiX29wZW4oJmhhc2gsIGZpbGVuYW1lLCBPREJfUkRPTkxZLCBzaXplb2Yoc3RydWN0IG9wZF9oZWFkZXIpKTsKKwlpZiAocmMpIHsKKwkJZnByaW50ZihzdGRlcnIsICIlcyIsIHN0cmVycm9yKHJjKSk7CisJICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorCisJaWYgKG9kYl9jaGVja19oYXNoKCZoYXNoKSkgeworCQlmcHJpbnRmKHN0ZGVyciwgImNoZWNraW5nIGZpbGUgJXMgRkFJTFxuIiwgZmlsZW5hbWUpOworCQkrK25yX2Vycm9yOworCX0gZWxzZSBpZiAodmVyYm9zZSkgeworCQlvZGJfaGFzaF9zdGF0X3QgKiBzdGF0czsKKwkJc3RhdHMgPSBvZGJfaGFzaF9zdGF0KCZoYXNoKTsKKwkJb2RiX2hhc2hfZGlzcGxheV9zdGF0KHN0YXRzKTsKKwkJb2RiX2hhc2hfZnJlZV9zdGF0KHN0YXRzKTsKKwl9CisKKwlvZGJfY2xvc2UoJmhhc2gpOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqIGFyZ3ZbMV0pCit7CisJLyogaWYgYSBmaWxlbmFtZSBpcyBnaXZlbiB0YWtlIGl0IGFzOiAiY2hlY2sgdGhpcyBkYiIgKi8KKwlpZiAoYXJnYyA+IDEpIHsKKwkJaW50IGk7CisJCXZlcmJvc2UgPSAxOworCQlpZiAoIXN0cmNtcChhcmd2WzFdLCAiLS1zcGVlZCIpKQorCQkJZ290byBzcGVlZF90ZXN0OworCQlmb3IgKGkgPSAxIDsgaSA8IGFyZ2MgOyArK2kpCisJCQlzYW5pdHlfY2hlY2soYXJndltpXSk7CisJCXJldHVybiAwOworCX0KKworc3BlZWRfdGVzdDoKKwlyZW1vdmUoVEVTVF9GSUxFTkFNRSk7CisKKwlkb190ZXN0KCk7CisKKwlkb19zcGVlZF90ZXN0KCk7CisKKwlpZiAobnJfZXJyb3IpCisJCXByaW50ZigiJWQgZXJyb3Igb2NjdXJlZFxuIiwgbnJfZXJyb3IpOworCisJcmV0dXJuIG5yX2Vycm9yID8gRVhJVF9GQUlMVVJFIDogRVhJVF9TVUNDRVNTOworfQpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvbGlib3AvTWFrZWZpbGUuYW0gYi9vcHJvZmlsZS0wLjkuNy9saWJvcC9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMmY4NTc4Ci0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvbGlib3AvTWFrZWZpbGUuYW0KQEAgLTAsMCArMSwyOSBAQAorU1VCRElSUyA9IC4gdGVzdHMKKworQU1fQ1BQRkxBR1M9LUkke3RvcF9zcmNkaXJ9L2xpYnV0aWwKK0FNX0NGTEFHUyA9IEBPUF9DRkxBR1NACisKK25vaW5zdF9MSUJSQVJJRVMgPSBsaWJvcC5hCitsaWJvcF9hX1NPVVJDRVMgPSBcCisJb3BfZXZlbnRzLmMgXAorCW9wX2V2ZW50cy5oIFwKKwlvcF9wYXJzZV9ldmVudC5jIFwKKwlvcF9wYXJzZV9ldmVudC5oIFwKKwlvcF9jcHVfdHlwZS5jIFwKKwlvcF9jcHVfdHlwZS5oIFwKKwlvcF9tYW5nbGUuYyBcCisJb3BfbWFuZ2xlLmggXAorCW9wX2dldF9pbnRlcmZhY2UuYyBcCisJb3BfaW50ZXJmYWNlLmggXAorCW9wX2FsbG9jX2NvdW50ZXIuYyBcCisJb3BfYWxsb2NfY291bnRlci5oIFwKKwlvcF9od19jb25maWcuaCBcCisJb3BfY29uZmlnLmMgXAorCW9wX2NvbmZpZy5oIFwKKwlvcF9jb25maWdfMjQuaCBcCisJb3Bfc2FtcGxlX2ZpbGUuaCBcCisJb3BfeG1sX2V2ZW50cy5jIFwKKwlvcF94bWxfZXZlbnRzLmggXAorCW9wX3htbF9vdXQuYyBcCisJb3BfeG1sX291dC5oIFwKKwlvcF9od19zcGVjaWZpYy5oCmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9saWJvcC9NYWtlZmlsZS5pbiBiL29wcm9maWxlLTAuOS43L2xpYm9wL01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyY2ExMjAKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9saWJvcC9NYWtlZmlsZS5pbgpAQCAtMCwwICsxLDcxMyBAQAorIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS4xMS4xIGZyb20gTWFrZWZpbGUuYW0uCisjIEBjb25maWd1cmVfaW5wdXRACisKKyMgQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLAorIyAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisjIEluYy4KKyMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKKyMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQorIyBQQVJUSUNVTEFSIFBVUlBPU0UuCisKK0BTRVRfTUFLRUAKKworVlBBVEggPSBAc3JjZGlyQAorcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACitwa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAorYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAoraW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKK2luc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKK2luc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYworSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKK3RyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKK05PUk1BTF9JTlNUQUxMID0gOgorUFJFX0lOU1RBTEwgPSA6CitQT1NUX0lOU1RBTEwgPSA6CitOT1JNQUxfVU5JTlNUQUxMID0gOgorUFJFX1VOSU5TVEFMTCA9IDoKK1BPU1RfVU5JTlNUQUxMID0gOgorYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKK2hvc3RfdHJpcGxldCA9IEBob3N0QAorc3ViZGlyID0gbGlib3AKK0RJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmFtICQoc3JjZGlyKS9NYWtlZmlsZS5pbgorQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAorYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvbTQvYmludXRpbHMubTQgXAorCSQodG9wX3NyY2RpcikvbTQvYnVpbHRpbmV4cGVjdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jZWxsc3B1YmZkc3VwcG9ydC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jb21waWxlcm9wdGlvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jb25maWdtb2R1bGUubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY29weWlmY2hhbmdlLm00ICQodG9wX3NyY2RpcikvbTQvZG9jYm9vay5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9leHRyYWRpcnMubTQgJCh0b3Bfc3JjZGlyKS9tNC9maW5ka2VybmVsLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2tlcm5lbG9wdGlvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9rZXJuZWx2ZXJzaW9uLm00ICQodG9wX3NyY2RpcikvbTQvbGlidG9vbC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9sdG9wdGlvbnMubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdHN1Z2FyLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2x0dmVyc2lvbi5tNCAkKHRvcF9zcmNkaXIpL200L2x0fm9ic29sZXRlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L21hbGxvY2F0dHJpYnV0ZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9wb3B0Y29uc3QubTQgXAorCSQodG9wX3NyY2RpcikvbTQvcHJlY29tcGlsZWRoZWFkZXIubTQgJCh0b3Bfc3JjZGlyKS9tNC9xdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9yZXN1bHR5bi5tNCAkKHRvcF9zcmNkaXIpL200L3NzdHJlYW0ubTQgXAorCSQodG9wX3NyY2RpcikvbTQvdHlwZWRlZi5tNCAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5pbgorYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKKwkkKEFDTE9DQUxfTTQpCitta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAorQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAorQ09ORklHX0NMRUFOX0ZJTEVTID0KK0NPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9CitMSUJSQVJJRVMgPSAkKG5vaW5zdF9MSUJSQVJJRVMpCitBUkZMQUdTID0gY3J1CitsaWJvcF9hX0FSID0gJChBUikgJChBUkZMQUdTKQorbGlib3BfYV9MSUJBREQgPQorYW1fbGlib3BfYV9PQkpFQ1RTID0gb3BfZXZlbnRzLiQoT0JKRVhUKSBvcF9wYXJzZV9ldmVudC4kKE9CSkVYVCkgXAorCW9wX2NwdV90eXBlLiQoT0JKRVhUKSBvcF9tYW5nbGUuJChPQkpFWFQpIFwKKwlvcF9nZXRfaW50ZXJmYWNlLiQoT0JKRVhUKSBvcF9hbGxvY19jb3VudGVyLiQoT0JKRVhUKSBcCisJb3BfY29uZmlnLiQoT0JKRVhUKSBvcF94bWxfZXZlbnRzLiQoT0JKRVhUKSBcCisJb3BfeG1sX291dC4kKE9CSkVYVCkKK2xpYm9wX2FfT0JKRUNUUyA9ICQoYW1fbGlib3BfYV9PQkpFQ1RTKQorREVGQVVMVF9JTkNMVURFUyA9IC1JLkBhbV9faXNyY0AgLUkkKHRvcF9idWlsZGRpcikKK2RlcGNvbXAgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL2RlcGNvbXAKK2FtX19kZXBmaWxlc19tYXliZSA9IGRlcGZpbGVzCithbV9fbXYgPSBtdiAtZgorQ09NUElMRSA9ICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSBcCisJJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQorTFRDT01QSUxFID0gJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIFwKKwktLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgXAorCSQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKK0NDTEQgPSAkKENDKQorTElOSyA9ICQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSBcCisJLS1tb2RlPWxpbmsgJChDQ0xEKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpICQoQU1fTERGTEFHUykgXAorCSQoTERGTEFHUykgLW8gJEAKK1NPVVJDRVMgPSAkKGxpYm9wX2FfU09VUkNFUykKK0RJU1RfU09VUkNFUyA9ICQobGlib3BfYV9TT1VSQ0VTKQorUkVDVVJTSVZFX1RBUkdFVFMgPSBhbGwtcmVjdXJzaXZlIGNoZWNrLXJlY3Vyc2l2ZSBkdmktcmVjdXJzaXZlIFwKKwlodG1sLXJlY3Vyc2l2ZSBpbmZvLXJlY3Vyc2l2ZSBpbnN0YWxsLWRhdGEtcmVjdXJzaXZlIFwKKwlpbnN0YWxsLWR2aS1yZWN1cnNpdmUgaW5zdGFsbC1leGVjLXJlY3Vyc2l2ZSBcCisJaW5zdGFsbC1odG1sLXJlY3Vyc2l2ZSBpbnN0YWxsLWluZm8tcmVjdXJzaXZlIFwKKwlpbnN0YWxsLXBkZi1yZWN1cnNpdmUgaW5zdGFsbC1wcy1yZWN1cnNpdmUgaW5zdGFsbC1yZWN1cnNpdmUgXAorCWluc3RhbGxjaGVjay1yZWN1cnNpdmUgaW5zdGFsbGRpcnMtcmVjdXJzaXZlIHBkZi1yZWN1cnNpdmUgXAorCXBzLXJlY3Vyc2l2ZSB1bmluc3RhbGwtcmVjdXJzaXZlCitSRUNVUlNJVkVfQ0xFQU5fVEFSR0VUUyA9IG1vc3RseWNsZWFuLXJlY3Vyc2l2ZSBjbGVhbi1yZWN1cnNpdmUJXAorICBkaXN0Y2xlYW4tcmVjdXJzaXZlIG1haW50YWluZXItY2xlYW4tcmVjdXJzaXZlCitBTV9SRUNVUlNJVkVfVEFSR0VUUyA9ICQoUkVDVVJTSVZFX1RBUkdFVFM6LXJlY3Vyc2l2ZT0pIFwKKwkkKFJFQ1VSU0lWRV9DTEVBTl9UQVJHRVRTOi1yZWN1cnNpdmU9KSB0YWdzIFRBR1MgY3RhZ3MgQ1RBR1MgXAorCWRpc3RkaXIKK0VUQUdTID0gZXRhZ3MKK0NUQUdTID0gY3RhZ3MKK0RJU1RfU1VCRElSUyA9ICQoU1VCRElSUykKK0RJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCithbV9fcmVsYXRpdml6ZSA9IFwKKyAgZGlyMD1gcHdkYDsgXAorICBzZWRfZmlyc3Q9J3MsXlwoW14vXSpcKS8uKiQkLFwxLCc7IFwKKyAgc2VkX3Jlc3Q9J3MsXlteL10qLyosLCc7IFwKKyAgc2VkX2xhc3Q9J3MsXi4qL1woW14vXSpcKSQkLFwxLCc7IFwKKyAgc2VkX2J1dGxhc3Q9J3MsLypbXi9dKiQkLCwnOyBcCisgIHdoaWxlIHRlc3QgLW4gIiQkZGlyMSI7IGRvIFwKKyAgICBmaXJzdD1gZWNobyAiJCRkaXIxIiB8IHNlZCAtZSAiJCRzZWRfZmlyc3QiYDsgXAorICAgIGlmIHRlc3QgIiQkZmlyc3QiICE9ICIuIjsgdGhlbiBcCisgICAgICBpZiB0ZXN0ICIkJGZpcnN0IiA9ICIuLiI7IHRoZW4gXAorICAgICAgICBkaXIyPWBlY2hvICIkJGRpcjAiIHwgc2VkIC1lICIkJHNlZF9sYXN0ImAvIiQkZGlyMiI7IFwKKyAgICAgICAgZGlyMD1gZWNobyAiJCRkaXIwIiB8IHNlZCAtZSAiJCRzZWRfYnV0bGFzdCJgOyBcCisgICAgICBlbHNlIFwKKyAgICAgICAgZmlyc3QyPWBlY2hvICIkJGRpcjIiIHwgc2VkIC1lICIkJHNlZF9maXJzdCJgOyBcCisgICAgICAgIGlmIHRlc3QgIiQkZmlyc3QyIiA9ICIkJGZpcnN0IjsgdGhlbiBcCisgICAgICAgICAgZGlyMj1gZWNobyAiJCRkaXIyIiB8IHNlZCAtZSAiJCRzZWRfcmVzdCJgOyBcCisgICAgICAgIGVsc2UgXAorICAgICAgICAgIGRpcjI9Ii4uLyQkZGlyMiI7IFwKKyAgICAgICAgZmk7IFwKKyAgICAgICAgZGlyMD0iJCRkaXIwIi8iJCRmaXJzdCI7IFwKKyAgICAgIGZpOyBcCisgICAgZmk7IFwKKyAgICBkaXIxPWBlY2hvICIkJGRpcjEiIHwgc2VkIC1lICIkJHNlZF9yZXN0ImA7IFwKKyAgZG9uZTsgXAorICByZWxkaXI9IiQkZGlyMiIKK0FDTE9DQUwgPSBAQUNMT0NBTEAKK0FNVEFSID0gQEFNVEFSQAorQVIgPSBAQVJACitBVVRPQ09ORiA9IEBBVVRPQ09ORkAKK0FVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKK0FVVE9NQUtFID0gQEFVVE9NQUtFQAorQVdLID0gQEFXS0AKK0JGRF9MSUJTID0gQEJGRF9MSUJTQAorQ0FUX0VOVFJZX0VORCA9IEBDQVRfRU5UUllfRU5EQAorQ0FUX0VOVFJZX1NUQVJUID0gQENBVF9FTlRSWV9TVEFSVEAKK0NDID0gQENDQAorQ0NERVBNT0RFID0gQENDREVQTU9ERUAKK0NGTEFHUyA9IEBDRkxBR1NACitDUFAgPSBAQ1BQQAorQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACitDWFggPSBAQ1hYQAorQ1hYQ1BQID0gQENYWENQUEAKK0NYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKK0NYWEZMQUdTID0gQENYWEZMQUdTQAorQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKK0RBVEUgPSBAREFURUAKK0RFRlMgPSBAREVGU0AKK0RFUERJUiA9IEBERVBESVJACitET0NCT09LX1JPT1QgPSBARE9DQk9PS19ST09UQAorRFNZTVVUSUwgPSBARFNZTVVUSUxACitEVU1QQklOID0gQERVTVBCSU5ACitFQ0hPX0MgPSBARUNIT19DQAorRUNIT19OID0gQEVDSE9fTkAKK0VDSE9fVCA9IEBFQ0hPX1RACitFR1JFUCA9IEBFR1JFUEAKK0VYRUVYVCA9IEBFWEVFWFRACitFWFRSQV9DRkxBR1NfTU9EVUxFID0gQEVYVFJBX0NGTEFHU19NT0RVTEVACitGR1JFUCA9IEBGR1JFUEAKK0dSRVAgPSBAR1JFUEAKK0lOU1RBTEwgPSBASU5TVEFMTEAKK0lOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACitJTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAorSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACitJTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAorSkFWQV9IT01FRElSID0gQEpBVkFfSE9NRURJUkAKK0tJTkMgPSBAS0lOQ0AKK0tTUkMgPSBAS1NSQ0AKK0tWRVJTID0gQEtWRVJTQAorTEQgPSBATERACitMREZMQUdTID0gQExERkxBR1NACitMSUJFUlRZX0xJQlMgPSBATElCRVJUWV9MSUJTQAorTElCT0JKUyA9IEBMSUJPQkpTQAorTElCUyA9IEBMSUJTQAorTElCVE9PTCA9IEBMSUJUT09MQAorTElQTyA9IEBMSVBPQAorTE5fUyA9IEBMTl9TQAorTFRMSUJPQkpTID0gQExUTElCT0JKU0AKK01BS0VJTkZPID0gQE1BS0VJTkZPQAorTUtESVJfUCA9IEBNS0RJUl9QQAorTU9DID0gQE1PQ0AKK01PRElOU1RBTExESVIgPSBATU9ESU5TVEFMTERJUkAKK05NID0gQE5NQAorTk1FRElUID0gQE5NRURJVEAKK09CSkRVTVAgPSBAT0JKRFVNUEAKK09CSkVYVCA9IEBPQkpFWFRACitPUFJPRklMRV9ESVIgPSBAT1BST0ZJTEVfRElSQAorT1BST0ZJTEVfTU9EVUxFX0FSQ0ggPSBAT1BST0ZJTEVfTU9EVUxFX0FSQ0hACitPUF9DRkxBR1MgPSBAT1BfQ0ZMQUdTQAorT1BfQ1hYRkxBR1MgPSBAT1BfQ1hYRkxBR1NACitPUF9ET0NESVIgPSBAT1BfRE9DRElSQAorT1RPT0wgPSBAT1RPT0xACitPVE9PTDY0ID0gQE9UT09MNjRACitQQUNLQUdFID0gQFBBQ0tBR0VACitQQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKK1BBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACitQQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKK1BBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACitQQUNLQUdFX1VSTCA9IEBQQUNLQUdFX1VSTEAKK1BBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACitQQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKK1BLR19DT05GSUcgPSBAUEtHX0NPTkZJR0AKK1BLR19DT05GSUdfTElCRElSID0gQFBLR19DT05GSUdfTElCRElSQAorUEtHX0NPTkZJR19QQVRIID0gQFBLR19DT05GSUdfUEFUSEAKK1BPUFRfTElCUyA9IEBQT1BUX0xJQlNACitQVFJESUZGX1RfVFlQRSA9IEBQVFJESUZGX1RfVFlQRUAKK1FUX0NGTEFHUyA9IEBRVF9DRkxBR1NACitRVF9JTkNMVURFUyA9IEBRVF9JTkNMVURFU0AKK1FUX0xERkxBR1MgPSBAUVRfTERGTEFHU0AKK1FUX0xJQiA9IEBRVF9MSUJACitRVF9MSUJTID0gQFFUX0xJQlNACitRVF9WRVJTSU9OID0gQFFUX1ZFUlNJT05ACitSQU5MSUIgPSBAUkFOTElCQAorU0VEID0gQFNFREAKK1NFVF9NQUtFID0gQFNFVF9NQUtFQAorU0hFTEwgPSBAU0hFTExACitTSVpFX1RfVFlQRSA9IEBTSVpFX1RfVFlQRUAKK1NUUklQID0gQFNUUklQQAorVUlDID0gQFVJQ0AKK1VJQ2hlbHAgPSBAVUlDaGVscEAKK1ZFUlNJT04gPSBAVkVSU0lPTkAKK1hNS01GID0gQFhNS01GQAorWE1MX0NBVEFMT0cgPSBAWE1MX0NBVEFMT0dACitYU0xUUFJPQyA9IEBYU0xUUFJPQ0AKK1hTTFRQUk9DX0ZMQUdTID0gQFhTTFRQUk9DX0ZMQUdTQAorWF9DRkxBR1MgPSBAWF9DRkxBR1NACitYX0VYVFJBX0xJQlMgPSBAWF9FWFRSQV9MSUJTQAorWF9MSUJTID0gQFhfTElCU0AKK1hfUFJFX0xJQlMgPSBAWF9QUkVfTElCU0AKK2Fic19idWlsZGRpciA9IEBhYnNfYnVpbGRkaXJACithYnNfc3JjZGlyID0gQGFic19zcmNkaXJACithYnNfdG9wX2J1aWxkZGlyID0gQGFic190b3BfYnVpbGRkaXJACithYnNfdG9wX3NyY2RpciA9IEBhYnNfdG9wX3NyY2RpckAKK2FjX2N0X0NDID0gQGFjX2N0X0NDQAorYWNfY3RfQ1hYID0gQGFjX2N0X0NYWEAKK2FjX2N0X0RVTVBCSU4gPSBAYWNfY3RfRFVNUEJJTkAKK2FtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAorYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKK2FtX19xdW90ZSA9IEBhbV9fcXVvdGVACithbV9fdGFyID0gQGFtX190YXJACithbV9fdW50YXIgPSBAYW1fX3VudGFyQAorYmluZGlyID0gQGJpbmRpckAKK2J1aWxkID0gQGJ1aWxkQAorYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACitidWlsZF9jcHUgPSBAYnVpbGRfY3B1QAorYnVpbGRfb3MgPSBAYnVpbGRfb3NACitidWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAorYnVpbGRkaXIgPSBAYnVpbGRkaXJACitkYXRhZGlyID0gQGRhdGFkaXJACitkYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKK2RvY2RpciA9IEBkb2NkaXJACitkdmlkaXIgPSBAZHZpZGlyQAorZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACitob3N0ID0gQGhvc3RACitob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACitob3N0X2NwdSA9IEBob3N0X2NwdUAKK2hvc3Rfb3MgPSBAaG9zdF9vc0AKK2hvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAoraHRtbGRpciA9IEBodG1sZGlyQAoraW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAoraW5mb2RpciA9IEBpbmZvZGlyQAoraW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAorbGliZGlyID0gQGxpYmRpckAKK2xpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKK2xvY2FsZWRpciA9IEBsb2NhbGVkaXJACitsb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACitsdF9FQ0hPID0gQGx0X0VDSE9ACittYW5kaXIgPSBAbWFuZGlyQAorbWtkaXJfcCA9IEBta2Rpcl9wQAorb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAorcGRmZGlyID0gQHBkZmRpckAKK3ByZWZpeCA9IEBwcmVmaXhACitwcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACitwc2RpciA9IEBwc2RpckAKK3NiaW5kaXIgPSBAc2JpbmRpckAKK3NoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAorc3JjZGlyID0gQHNyY2RpckAKK3N5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKK3RhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACit0b3BfYnVpbGRfcHJlZml4ID0gQHRvcF9idWlsZF9wcmVmaXhACit0b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAordG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAordG9wZGlyID0gQHRvcGRpckAKK1NVQkRJUlMgPSAuIHRlc3RzCitBTV9DUFBGTEFHUyA9IC1JJHt0b3Bfc3JjZGlyfS9saWJ1dGlsCitBTV9DRkxBR1MgPSBAT1BfQ0ZMQUdTQAorbm9pbnN0X0xJQlJBUklFUyA9IGxpYm9wLmEKK2xpYm9wX2FfU09VUkNFUyA9IFwKKwlvcF9ldmVudHMuYyBcCisJb3BfZXZlbnRzLmggXAorCW9wX3BhcnNlX2V2ZW50LmMgXAorCW9wX3BhcnNlX2V2ZW50LmggXAorCW9wX2NwdV90eXBlLmMgXAorCW9wX2NwdV90eXBlLmggXAorCW9wX21hbmdsZS5jIFwKKwlvcF9tYW5nbGUuaCBcCisJb3BfZ2V0X2ludGVyZmFjZS5jIFwKKwlvcF9pbnRlcmZhY2UuaCBcCisJb3BfYWxsb2NfY291bnRlci5jIFwKKwlvcF9hbGxvY19jb3VudGVyLmggXAorCW9wX2h3X2NvbmZpZy5oIFwKKwlvcF9jb25maWcuYyBcCisJb3BfY29uZmlnLmggXAorCW9wX2NvbmZpZ18yNC5oIFwKKwlvcF9zYW1wbGVfZmlsZS5oIFwKKwlvcF94bWxfZXZlbnRzLmMgXAorCW9wX3htbF9ldmVudHMuaCBcCisJb3BfeG1sX291dC5jIFwKKwlvcF94bWxfb3V0LmggXAorCW9wX2h3X3NwZWNpZmljLmgKKworYWxsOiBhbGwtcmVjdXJzaXZlCisKKy5TVUZGSVhFUzoKKy5TVUZGSVhFUzogLmMgLmxvIC5vIC5vYmoKKyQoc3JjZGlyKS9NYWtlZmlsZS5pbjogICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJQGZvciBkZXAgaW4gJD87IGRvIFwKKwkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAorCSAgICAqJCRkZXAqKSBcCisJICAgICAgKCBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggKSBcCisJICAgICAgICAmJiB7IGlmIHRlc3QgLWYgJEA7IHRoZW4gZXhpdCAwOyBlbHNlIGJyZWFrOyBmaTsgfTsgXAorCSAgICAgIGV4aXQgMTs7IFwKKwkgIGVzYWM7IFwKKwlkb25lOyBcCisJZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1mb3JlaWduIGxpYm9wL01ha2VmaWxlJzsgXAorCSQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmIFwKKwkgICQoQVVUT01BS0UpIC0tZm9yZWlnbiBsaWJvcC9NYWtlZmlsZQorLlBSRUNJT1VTOiBNYWtlZmlsZQorTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworCUBjYXNlICckPycgaW4gXAorCSAgKmNvbmZpZy5zdGF0dXMqKSBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKKwkgICopIFwKKwkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAorCWVzYWM7CisKKyQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorCiskKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorJChBQ0xPQ0FMX000KTogICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6CisKK2NsZWFuLW5vaW5zdExJQlJBUklFUzoKKwktdGVzdCAteiAiJChub2luc3RfTElCUkFSSUVTKSIgfHwgcm0gLWYgJChub2luc3RfTElCUkFSSUVTKQorbGlib3AuYTogJChsaWJvcF9hX09CSkVDVFMpICQobGlib3BfYV9ERVBFTkRFTkNJRVMpIAorCS1ybSAtZiBsaWJvcC5hCisJJChsaWJvcF9hX0FSKSBsaWJvcC5hICQobGlib3BfYV9PQkpFQ1RTKSAkKGxpYm9wX2FfTElCQUREKQorCSQoUkFOTElCKSBsaWJvcC5hCisKK21vc3RseWNsZWFuLWNvbXBpbGU6CisJLXJtIC1mICouJChPQkpFWFQpCisKK2Rpc3RjbGVhbi1jb21waWxlOgorCS1ybSAtZiAqLnRhYi5jCisKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9vcF9hbGxvY19jb3VudGVyLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9vcF9jb25maWcuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL29wX2NwdV90eXBlLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9vcF9ldmVudHMuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL29wX2dldF9pbnRlcmZhY2UuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL29wX21hbmdsZS5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvb3BfcGFyc2VfZXZlbnQuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL29wX3htbF9ldmVudHMuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL29wX3htbF9vdXQuUG9AYW1fX3F1b3RlQAorCisuYy5vOgorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCAkPAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDT01QSUxFKSAtYyAkPAorCisuYy5vYmo6CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJCouVHBvIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ09NUElMRSkgLWMgYCQoQ1lHUEFUSF9XKSAnJDwnYAorCisuYy5sbzoKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoTFRDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCAkPAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExUQ09NUElMRSkgLWMgLW8gJEAgJDwKKworbW9zdGx5Y2xlYW4tbGlidG9vbDoKKwktcm0gLWYgKi5sbworCitjbGVhbi1saWJ0b29sOgorCS1ybSAtcmYgLmxpYnMgX2xpYnMKKworIyBUaGlzIGRpcmVjdG9yeSdzIHN1YmRpcmVjdG9yaWVzIGFyZSBtb3N0bHkgaW5kZXBlbmRlbnQ7IHlvdSBjYW4gY2QKKyMgaW50byB0aGVtIGFuZCBydW4gYG1ha2UnIHdpdGhvdXQgZ29pbmcgdGhyb3VnaCB0aGlzIE1ha2VmaWxlLgorIyBUbyBjaGFuZ2UgdGhlIHZhbHVlcyBvZiBgbWFrZScgdmFyaWFibGVzOiBpbnN0ZWFkIG9mIGVkaXRpbmcgTWFrZWZpbGVzLAorIyAoMSkgaWYgdGhlIHZhcmlhYmxlIGlzIHNldCBpbiBgY29uZmlnLnN0YXR1cycsIGVkaXQgYGNvbmZpZy5zdGF0dXMnCisjICAgICAod2hpY2ggd2lsbCBjYXVzZSB0aGUgTWFrZWZpbGVzIHRvIGJlIHJlZ2VuZXJhdGVkIHdoZW4geW91IHJ1biBgbWFrZScpOworIyAoMikgb3RoZXJ3aXNlLCBwYXNzIHRoZSBkZXNpcmVkIHZhbHVlcyBvbiB0aGUgYG1ha2UnIGNvbW1hbmQgbGluZS4KKyQoUkVDVVJTSVZFX1RBUkdFVFMpOgorCUBmYWlsPSBmYWlsY29tPSdleGl0IDEnOyBcCisJZm9yIGYgaW4geCAkJE1BS0VGTEFHUzsgZG8gXAorCSAgY2FzZSAkJGYgaW4gXAorCSAgICAqPSogfCAtLVsha10qKTs7IFwKKwkgICAgKmsqKSBmYWlsY29tPSdmYWlsPXllcyc7OyBcCisJICBlc2FjOyBcCisJZG9uZTsgXAorCWRvdF9zZWVuPW5vOyBcCisJdGFyZ2V0PWBlY2hvICRAIHwgc2VkIHMvLXJlY3Vyc2l2ZS8vYDsgXAorCWxpc3Q9JyQoU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAorCSAgZWNobyAiTWFraW5nICQkdGFyZ2V0IGluICQkc3ViZGlyIjsgXAorCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gIi4iOyB0aGVuIFwKKwkgICAgZG90X3NlZW49eWVzOyBcCisJICAgIGxvY2FsX3RhcmdldD0iJCR0YXJnZXQtYW0iOyBcCisJICBlbHNlIFwKKwkgICAgbG9jYWxfdGFyZ2V0PSIkJHRhcmdldCI7IFwKKwkgIGZpOyBcCisJICAoJChhbV9fY2QpICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICQkbG9jYWxfdGFyZ2V0KSBcCisJICB8fCBldmFsICQkZmFpbGNvbTsgXAorCWRvbmU7IFwKKwlpZiB0ZXN0ICIkJGRvdF9zZWVuIiA9ICJubyI7IHRoZW4gXAorCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgIiQkdGFyZ2V0LWFtIiB8fCBleGl0IDE7IFwKKwlmaTsgdGVzdCAteiAiJCRmYWlsIgorCiskKFJFQ1VSU0lWRV9DTEVBTl9UQVJHRVRTKToKKwlAZmFpbD0gZmFpbGNvbT0nZXhpdCAxJzsgXAorCWZvciBmIGluIHggJCRNQUtFRkxBR1M7IGRvIFwKKwkgIGNhc2UgJCRmIGluIFwKKwkgICAgKj0qIHwgLS1bIWtdKik7OyBcCisJICAgICprKikgZmFpbGNvbT0nZmFpbD15ZXMnOzsgXAorCSAgZXNhYzsgXAorCWRvbmU7IFwKKwlkb3Rfc2Vlbj1ubzsgXAorCWNhc2UgIiRAIiBpbiBcCisJICBkaXN0Y2xlYW4tKiB8IG1haW50YWluZXItY2xlYW4tKikgbGlzdD0nJChESVNUX1NVQkRJUlMpJyA7OyBcCisJICAqKSBsaXN0PSckKFNVQkRJUlMpJyA7OyBcCisJZXNhYzsgXAorCXJldj0nJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKwkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9ICIuIjsgdGhlbiA6OyBlbHNlIFwKKwkgICAgcmV2PSIkJHN1YmRpciAkJHJldiI7IFwKKwkgIGZpOyBcCisJZG9uZTsgXAorCXJldj0iJCRyZXYgLiI7IFwKKwl0YXJnZXQ9YGVjaG8gJEAgfCBzZWQgcy8tcmVjdXJzaXZlLy9gOyBcCisJZm9yIHN1YmRpciBpbiAkJHJldjsgZG8gXAorCSAgZWNobyAiTWFraW5nICQkdGFyZ2V0IGluICQkc3ViZGlyIjsgXAorCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gIi4iOyB0aGVuIFwKKwkgICAgbG9jYWxfdGFyZ2V0PSIkJHRhcmdldC1hbSI7IFwKKwkgIGVsc2UgXAorCSAgICBsb2NhbF90YXJnZXQ9IiQkdGFyZ2V0IjsgXAorCSAgZmk7IFwKKwkgICgkKGFtX19jZCkgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgJCRsb2NhbF90YXJnZXQpIFwKKwkgIHx8IGV2YWwgJCRmYWlsY29tOyBcCisJZG9uZSAmJiB0ZXN0IC16ICIkJGZhaWwiCit0YWdzLXJlY3Vyc2l2ZToKKwlsaXN0PSckKFNVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKwkgIHRlc3QgIiQkc3ViZGlyIiA9IC4gfHwgKCQoYW1fX2NkKSAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSB0YWdzKTsgXAorCWRvbmUKK2N0YWdzLXJlY3Vyc2l2ZToKKwlsaXN0PSckKFNVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKwkgIHRlc3QgIiQkc3ViZGlyIiA9IC4gfHwgKCQoYW1fX2NkKSAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBjdGFncyk7IFwKKwlkb25lCisKK0lEOiAkKEhFQURFUlMpICQoU09VUkNFUykgJChMSVNQKSAkKFRBR1NfRklMRVMpCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCisJICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCisJbWtpZCAtZklEICQkdW5pcXVlCit0YWdzOiBUQUdTCisKK1RBR1M6IHRhZ3MtcmVjdXJzaXZlICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAorCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKwlzZXQgeDsgXAorCWhlcmU9YHB3ZGA7IFwKKwlpZiAoJChFVEFHUykgLS1ldGFncy1pbmNsdWRlIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIFwKKwkgIGluY2x1ZGVfb3B0aW9uPS0tZXRhZ3MtaW5jbHVkZTsgXAorCSAgZW1wdHlfZml4PS47IFwKKwllbHNlIFwKKwkgIGluY2x1ZGVfb3B0aW9uPS0taW5jbHVkZTsgXAorCSAgZW1wdHlfZml4PTsgXAorCWZpOyBcCisJbGlzdD0nJChTVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAuOyB0aGVuIDo7IGVsc2UgXAorCSAgICB0ZXN0ICEgLWYgJCRzdWJkaXIvVEFHUyB8fCBcCisJICAgICAgc2V0ICIkJEAiICIkJGluY2x1ZGVfb3B0aW9uPSQkaGVyZS8kJHN1YmRpci9UQUdTIjsgXAorCSAgZmk7IFwKKwlkb25lOyBcCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorCXNoaWZ0OyBcCisJaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkKiQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKKwkgIHRlc3QgLW4gIiQkdW5pcXVlIiB8fCB1bmlxdWU9JCRlbXB0eV9maXg7IFwKKwkgIGlmIHRlc3QgJCQjIC1ndCAwOyB0aGVuIFwKKwkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAorCSAgICAgICIkJEAiICQkdW5pcXVlOyBcCisJICBlbHNlIFwKKwkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAorCSAgICAgICQkdW5pcXVlOyBcCisJICBmaTsgXAorCWZpCitjdGFnczogQ1RBR1MKK0NUQUdTOiBjdGFncy1yZWN1cnNpdmUgJChIRUFERVJTKSAkKFNPVVJDRVMpICAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCisJCSQoVEFHU19GSUxFUykgJChMSVNQKQorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKwkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKwl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR1bmlxdWUiIFwKKwkgIHx8ICQoQ1RBR1MpICQoQ1RBR1NGTEFHUykgJChBTV9DVEFHU0ZMQUdTKSAkKENUQUdTX0FSR1MpIFwKKwkgICAgICQkdW5pcXVlCisKK0dUQUdTOgorCWhlcmU9YCQoYW1fX2NkKSAkKHRvcF9idWlsZGRpcikgJiYgcHdkYCBcCisJICAmJiAkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSBcCisJICAmJiBndGFncyAtaSAkKEdUQUdTX0FSR1MpICIkJGhlcmUiCisKK2Rpc3RjbGVhbi10YWdzOgorCS1ybSAtZiBUQUdTIElEIEdUQUdTIEdSVEFHUyBHU1lNUyBHUEFUSCB0YWdzCisKK2Rpc3RkaXI6ICQoRElTVEZJTEVTKQorCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisJbGlzdD0nJChESVNURklMRVMpJzsgXAorCSAgZGlzdF9maWxlcz1gZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8IFwKKwkgIHNlZCAtZSAic3xeJCRzcmNkaXJzdHJpcC98fDt0IiBcCisJICAgICAgLWUgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98O3QiYDsgXAorCWNhc2UgJCRkaXN0X2ZpbGVzIGluIFwKKwkgICovKikgJChNS0RJUl9QKSBgZWNobyAiJCRkaXN0X2ZpbGVzIiB8IFwKKwkJCSAgIHNlZCAnL1wvLyFkO3N8XnwkKGRpc3RkaXIpL3w7cywvW14vXSokJCwsJyB8IFwKKwkJCSAgIHNvcnQgLXVgIDs7IFwKKwllc2FjOyBcCisJZm9yIGZpbGUgaW4gJCRkaXN0X2ZpbGVzOyBkbyBcCisJICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCisJICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAorCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAorCSAgICBpZiB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkZmlsZSI7IHRoZW4gXAorCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAorCSAgICBmaTsgXAorCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKKwkgICAgICBjcCAtZnBSICQoc3JjZGlyKS8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCisJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisJICAgIGZpOyBcCisJICAgIGNwIC1mcFIgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKKwkgIGVsc2UgXAorCSAgICB0ZXN0IC1mICIkKGRpc3RkaXIpLyQkZmlsZSIgXAorCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICIkKGRpc3RkaXIpLyQkZmlsZSIgXAorCSAgICB8fCBleGl0IDE7IFwKKwkgIGZpOyBcCisJZG9uZQorCUBsaXN0PSckKERJU1RfU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAorCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gLjsgdGhlbiA6OyBlbHNlIFwKKwkgICAgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJHN1YmRpciIgXAorCSAgICB8fCAkKE1LRElSX1ApICIkKGRpc3RkaXIpLyQkc3ViZGlyIiBcCisJICAgIHx8IGV4aXQgMTsgXAorCSAgZmk7IFwKKwlkb25lCisJQGxpc3Q9JyQoRElTVF9TVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAuOyB0aGVuIDo7IGVsc2UgXAorCSAgICBkaXIxPSQkc3ViZGlyOyBkaXIyPSIkKGRpc3RkaXIpLyQkc3ViZGlyIjsgXAorCSAgICAkKGFtX19yZWxhdGl2aXplKTsgXAorCSAgICBuZXdfZGlzdGRpcj0kJHJlbGRpcjsgXAorCSAgICBkaXIxPSQkc3ViZGlyOyBkaXIyPSIkKHRvcF9kaXN0ZGlyKSI7IFwKKwkgICAgJChhbV9fcmVsYXRpdml6ZSk7IFwKKwkgICAgbmV3X3RvcF9kaXN0ZGlyPSQkcmVsZGlyOyBcCisJICAgIGVjaG8gIiAoY2QgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgdG9wX2Rpc3RkaXI9IiQkbmV3X3RvcF9kaXN0ZGlyIiBkaXN0ZGlyPSIkJG5ld19kaXN0ZGlyIiBcXCI7IFwKKwkgICAgZWNobyAiICAgICBhbV9fcmVtb3ZlX2Rpc3RkaXI9OiBhbV9fc2tpcF9sZW5ndGhfY2hlY2s9OiBhbV9fc2tpcF9tb2RlX2ZpeD06IGRpc3RkaXIpIjsgXAorCSAgICAoJChhbV9fY2QpICQkc3ViZGlyICYmIFwKKwkgICAgICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBcCisJICAgICAgICB0b3BfZGlzdGRpcj0iJCRuZXdfdG9wX2Rpc3RkaXIiIFwKKwkgICAgICAgIGRpc3RkaXI9IiQkbmV3X2Rpc3RkaXIiIFwKKwkJYW1fX3JlbW92ZV9kaXN0ZGlyPTogXAorCQlhbV9fc2tpcF9sZW5ndGhfY2hlY2s9OiBcCisJCWFtX19za2lwX21vZGVfZml4PTogXAorCSAgICAgICAgZGlzdGRpcikgXAorCSAgICAgIHx8IGV4aXQgMTsgXAorCSAgZmk7IFwKKwlkb25lCitjaGVjay1hbTogYWxsLWFtCitjaGVjazogY2hlY2stcmVjdXJzaXZlCithbGwtYW06IE1ha2VmaWxlICQoTElCUkFSSUVTKQoraW5zdGFsbGRpcnM6IGluc3RhbGxkaXJzLXJlY3Vyc2l2ZQoraW5zdGFsbGRpcnMtYW06CitpbnN0YWxsOiBpbnN0YWxsLXJlY3Vyc2l2ZQoraW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtcmVjdXJzaXZlCitpbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1yZWN1cnNpdmUKK3VuaW5zdGFsbDogdW5pbnN0YWxsLXJlY3Vyc2l2ZQorCitpbnN0YWxsLWFtOiBhbGwtYW0KKwlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQorCitpbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1yZWN1cnNpdmUKK2luc3RhbGwtc3RyaXA6CisJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKKwkgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorCSAgYHRlc3QgLXogJyQoU1RSSVApJyB8fCBcCisJICAgIGVjaG8gIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciYCBpbnN0YWxsCittb3N0bHljbGVhbi1nZW5lcmljOgorCitjbGVhbi1nZW5lcmljOgorCitkaXN0Y2xlYW4tZ2VuZXJpYzoKKwktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKKwktdGVzdCAuID0gIiQoc3JjZGlyKSIgfHwgdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykKKworbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgorCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKKwlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCitjbGVhbjogY2xlYW4tcmVjdXJzaXZlCisKK2NsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgY2xlYW4tbm9pbnN0TElCUkFSSUVTIFwKKwltb3N0bHljbGVhbi1hbQorCitkaXN0Y2xlYW46IGRpc3RjbGVhbi1yZWN1cnNpdmUKKwktcm0gLXJmIC4vJChERVBESVIpCisJLXJtIC1mIE1ha2VmaWxlCitkaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKKwlkaXN0Y2xlYW4tdGFncworCitkdmk6IGR2aS1yZWN1cnNpdmUKKworZHZpLWFtOgorCitodG1sOiBodG1sLXJlY3Vyc2l2ZQorCitodG1sLWFtOgorCitpbmZvOiBpbmZvLXJlY3Vyc2l2ZQorCitpbmZvLWFtOgorCitpbnN0YWxsLWRhdGEtYW06CisKK2luc3RhbGwtZHZpOiBpbnN0YWxsLWR2aS1yZWN1cnNpdmUKKworaW5zdGFsbC1kdmktYW06CisKK2luc3RhbGwtZXhlYy1hbToKKworaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtcmVjdXJzaXZlCisKK2luc3RhbGwtaHRtbC1hbToKKworaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tcmVjdXJzaXZlCisKK2luc3RhbGwtaW5mby1hbToKKworaW5zdGFsbC1tYW46CisKK2luc3RhbGwtcGRmOiBpbnN0YWxsLXBkZi1yZWN1cnNpdmUKKworaW5zdGFsbC1wZGYtYW06CisKK2luc3RhbGwtcHM6IGluc3RhbGwtcHMtcmVjdXJzaXZlCisKK2luc3RhbGwtcHMtYW06CisKK2luc3RhbGxjaGVjay1hbToKKworbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1yZWN1cnNpdmUKKwktcm0gLXJmIC4vJChERVBESVIpCisJLXJtIC1mIE1ha2VmaWxlCittYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCisKK21vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1yZWN1cnNpdmUKKworbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCisJbW9zdGx5Y2xlYW4tbGlidG9vbAorCitwZGY6IHBkZi1yZWN1cnNpdmUKKworcGRmLWFtOgorCitwczogcHMtcmVjdXJzaXZlCisKK3BzLWFtOgorCit1bmluc3RhbGwtYW06CisKKy5NQUtFOiAkKFJFQ1VSU0lWRV9DTEVBTl9UQVJHRVRTKSAkKFJFQ1VSU0lWRV9UQVJHRVRTKSBjdGFncy1yZWN1cnNpdmUgXAorCWluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcCB0YWdzLXJlY3Vyc2l2ZQorCisuUEhPTlk6ICQoUkVDVVJTSVZFX0NMRUFOX1RBUkdFVFMpICQoUkVDVVJTSVZFX1RBUkdFVFMpIENUQUdTIEdUQUdTIFwKKwlhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBcCisJY2xlYW4tbm9pbnN0TElCUkFSSUVTIGN0YWdzIGN0YWdzLXJlY3Vyc2l2ZSBkaXN0Y2xlYW4gXAorCWRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIGRpc3RjbGVhbi1saWJ0b29sIFwKKwlkaXN0Y2xlYW4tdGFncyBkaXN0ZGlyIGR2aSBkdmktYW0gaHRtbCBodG1sLWFtIGluZm8gaW5mby1hbSBcCisJaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgXAorCWluc3RhbGwtZHZpLWFtIGluc3RhbGwtZXhlYyBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1odG1sIFwKKwlpbnN0YWxsLWh0bWwtYW0gaW5zdGFsbC1pbmZvIGluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBcCisJaW5zdGFsbC1wZGYgaW5zdGFsbC1wZGYtYW0gaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIFwKKwlpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgXAorCWluc3RhbGxkaXJzLWFtIG1haW50YWluZXItY2xlYW4gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIFwKKwltb3N0bHljbGVhbiBtb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgXAorCW1vc3RseWNsZWFuLWxpYnRvb2wgcGRmIHBkZi1hbSBwcyBwcy1hbSB0YWdzIHRhZ3MtcmVjdXJzaXZlIFwKKwl1bmluc3RhbGwgdW5pbnN0YWxsLWFtCisKKworIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KKyMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgorLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvbGlib3Avb3BfYWxsb2NfY291bnRlci5jIGIvb3Byb2ZpbGUtMC45LjcvbGlib3Avb3BfYWxsb2NfY291bnRlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiMmJkNmUKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9saWJvcC9vcF9hbGxvY19jb3VudGVyLmMKQEAgLTAsMCArMSwyNDEgQEAKKy8qKgorICogQGZpbGUgb3BfYWxsb2NfY291bnRlci5jCisgKiBoYXJkd2FyZSBjb3VudGVyIGFsbG9jYXRpb24KKyAqCisgKiBZb3UgY2FuIGhhdmUgc2lsbGluZXNzIGhlcmUuCisgKgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMiBPUHJvZmlsZSBhdXRob3JzCisgKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORworICoKKyAqIEBhdXRob3IgSm9obiBMZXZvbgorICogQGF1dGhvciBQaGlsaXBwZSBFbGllCisgKi8KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8ZGlyZW50Lmg+CisKKyNpbmNsdWRlICJvcF9ldmVudHMuaCIKKyNpbmNsdWRlICJvcF9saWJpYmVydHkuaCIKKworCit0eXBlZGVmIHN0cnVjdCBjb3VudGVyX2FyY19oZWFkIHsKKwkvKiogdGhlIGhlYWQgb2YgYWxsb3dlZCBjb3VudGVyIGZvciB0aGlzIGV2ZW50ICovCisJc3RydWN0IGxpc3RfaGVhZCBuZXh0OworfSBjb3VudGVyX2FyY19oZWFkOworCisKK3R5cGVkZWYgc3RydWN0IGNvdW50ZXJfYXJjIHsKKwkvKiogY291bnRlciBuciAqLworCWludCBjb3VudGVyOworCS8qKiB0aGUgbmV4dCBjb3VudGVyIGFsbG93ZWQgZm9yIHRoaXMgZXZlbnQgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIG5leHQ7Cit9IGNvdW50ZXJfYXJjOworCisKKy8qKgorICogQHBhcmFtIHBldiAgYW4gYXJyYXkgb2YgZXZlbnQKKyAqIEBwYXJhbSBucl9ldmVudHMgIG51bWJlciBvZiBlbnRyeSBpbiBwZXYKKyAqCisgKiBidWlsZCBhbiBhcnJheSBvZiBjb3VudGVyIGxpc3QgYWxsb3dlZCBmb3IgZWFjaCBldmVudHMKKyAqICBjb3VudGVyX2FyY19oZWFkW2ldIGlzIHRoZSBsaXN0IG9mIGFsbG93ZWQgY291bnRlciBmb3IgcGV2W2ldIGV2ZW50cworICogVGhlIHJldHVybmVkIHBvaW50ZXIgaXMgYW4gYXJyYXkgb2YgbnJfZXZlbnRzIGVudHJ5CisgKi8KK3N0YXRpYyBjb3VudGVyX2FyY19oZWFkICoKK2J1aWxkX2NvdW50ZXJfYXJjKHN0cnVjdCBvcF9ldmVudCBjb25zdCAqIHBldltdLCBpbnQgbnJfZXZlbnRzKQoreworCWNvdW50ZXJfYXJjX2hlYWQgKiBjdHJfYXJjOworCWludCBpOworCisJY3RyX2FyYyA9IHhtYWxsb2MobnJfZXZlbnRzICogc2l6ZW9mKCpjdHJfYXJjKSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnJfZXZlbnRzOyArK2kpIHsKKwkJaW50IGo7CisJCXUzMiBtYXNrID0gcGV2W2ldLT5jb3VudGVyX21hc2s7CisKKwkJbGlzdF9pbml0KCZjdHJfYXJjW2ldLm5leHQpOworCQlmb3IgKGogPSAwOyBtYXNrOyArK2opIHsKKwkJCWlmIChtYXNrICYgKDEgPDwgaikpIHsKKwkJCQljb3VudGVyX2FyYyAqIGFyYyA9IAorCQkJCQl4bWFsbG9jKHNpemVvZihjb3VudGVyX2FyYykpOworCQkJCWFyYy0+Y291bnRlciA9IGo7CisJCQkJLyogd2UgYXJlIGxvb3BpbmcgYnkgaW5jcmVhc2luZyBjb3VudGVyIG51bWJlciwKKwkJCQkgKiBhbGxvY2F0aW9uIHVzZSBhIGxlZnQgdG8gcmlnaHQgdHJlZSB3YWxraW5nCisJCQkJICogc28gd2UgYWRkIGF0IGVuZCB0byBlbnN1cmUgY291bnRlciB3aWxsCisJCQkJICogYmUgYWxsb2NhdGVkIGJ5IGluY3JlYXNpbmcgbnVtYmVyOiBpdCdzIG5vdAorCQkJCSAqIHJlcXVpcmVkIGJ1dCBhIGJpdCBsZXNzIHN1cnByaXNpbmcgd2hlbgorCQkJCSAqIGRlYnVnZ2luZyBjb2RlCisJCQkJICovCisJCQkJbGlzdF9hZGRfdGFpbCgmYXJjLT5uZXh0LCAmY3RyX2FyY1tpXS5uZXh0KTsKKwkJCQltYXNrICY9IH4oMSA8PCBqKTsKKwkJCX0KKwkJfQorCX0KKworCXJldHVybiBjdHJfYXJjOworfQorCisKKy8qKgorICogQHBhcmFtIGN0cl9hcmMgIHRoZSBhcnJheSB0byBkZWFsbG9jYXRlCisgKiBAcGFyYW0gbnJfZXZlbnRzICBudW1iZXIgb2YgZW50cnkgaW4gYXJyYXkKKyAqCisgKiAgZGVhbGxvY2F0ZSBhbGwgcHJldmlvdXNseSBhbGxvY2F0ZWQgcmVzb3VyY2UgYnkgYnVpbGRfY291bnRlcl9hcmMoKQorICovCitzdGF0aWMgdm9pZCBkZWxldGVfY291bnRlcl9hcmMoY291bnRlcl9hcmNfaGVhZCAqIGN0cl9hcmMsIGludCBucl9ldmVudHMpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IG5yX2V2ZW50czsgKytpKSB7CisJCXN0cnVjdCBsaXN0X2hlYWQgKiBwb3MsICogcG9zMjsKKwkJbGlzdF9mb3JfZWFjaF9zYWZlKHBvcywgcG9zMiwgJmN0cl9hcmNbaV0ubmV4dCkgeworCQkJY291bnRlcl9hcmMgKiBhcmMgPSBsaXN0X2VudHJ5KHBvcywgY291bnRlcl9hcmMsIG5leHQpOworCQkJbGlzdF9kZWwoJmFyYy0+bmV4dCk7CisJCQlmcmVlKGFyYyk7CisJCX0KKwl9CisJZnJlZShjdHJfYXJjKTsKK30KKworCisvKioKKyAqIEBwYXJhbSBjdHJfYXJjICB0cmVlIGRlc2NyaXB0aW9uLCBjdHJfYXJjW2ldIGlzIHRoZSBpLXRoIGxldmVsIG9mIHRyZWUuCisgKiBAcGFyYW0gbWF4X2RlcHRoICBudW1iZXIgb2YgZW50cnkgaW4gYXJyYXkgY3RyX2FyYyA9PSBkZXB0aCBvZiB0cmVlCisgKiBAcGFyYW0gZGVwdGggIGN1cnJlbnQgbGV2ZWwgd2UgYXJlIGV4cGxvcmluZworICogQHBhcmFtIGFsbG9jYXRlZF9tYXNrICBjdXJyZW50IGNvdW50ZXIgYWxyZWFkeSBhbGxvY2F0ZWQgbWFzaworICogQHBhcmFtIGNvdW50ZXJfbWFwICBhcnJheSBvZiBjb3VudGVyIG51bWJlciBtYXBwaW5nLCByZXR1cm5lZCByZXN1bHRzIGdvCisgKiAgIGhlcmUKKyAqCisgKiByZXR1cm4gbm9uIHplcm8gb24gc3VjY2VlcywgaW4gdGhpcyBjYXNlIGNvdW50ZXJfbWFwIGlzIHNldCB0byB0aGUgY291bnRlcgorICogbWFwcGluZyBudW1iZXIuCisgKgorICogU29sdXRpb24gaXMgc2VhcmNoZWQgdGhyb3VnaCBhIHNpbXBsZSBiYWNrdHJhY2tpbmcgZXhwbG9yaW5nIHJlY3Vyc2l2ZWx5IGFsbAorICogcG9zc2libGUgc29sdXRpb24gdW50aWwgb25lIGlzIGZvdW5kLCBwcnVubmluZyBpcyBkb25lIGluIE8oMSkgYnkgdHJhY2tpbmcKKyAqIGEgYml0bWFzayBvZiBhbHJlYWR5IGFsbG9jYXRlZCBjb3VudGVyLiBXYWxraW5nIHRocm91Z2ggbm9kZSBpcyBkb25lIGluCisgKiBwcmVvcmRlciBsZWZ0IHRvIHJpZ2h0LgorICoKKyAqIEluIGNhc2Ugb2YgZXh0ZW5kZWQgZXZlbnRzIChyZXF1aXJlZCBubyBwaGlzaWNhbCBjb3VudGVycyksIHRoZSBhc3NvY2lhdGVkCisgKiBjb3VudGVyX21hcCBlbnRyeSB3aWxsIGJlIC0xLgorICoKKyAqIFBvc3NpYmxlIGltcHJvdm1lbnQgaWYgbmVjY2Vzc2FyeTogcGFydGl0aW9uIGNvdW50ZXJzIGluIGNsYXNzIG9mIGNvdW50ZXIsCisgKiB0d28gY291bnRlciBiZWxvbmcgdG8gdGhlIHNhbWUgY2xhc3MgaWYgdGhleSBhbGxvdyBleGFjdGx5IHRoZSBzYW1lIHNldCBvZgorICogZXZlbnQuIE5vdyB1c2luZyBhIHZhcmlhbnQgb2YgdGhlIGJhY2t0cmFjayBhbGdvIGNhbiB3b3JrcyBvbiBjbGFzcyBvZgorICogY291bnRlciByYXRoZXIgb24gY291bnRlciAodGhpcyBpcyBub3QgYW4gaW1wcm92bWVudCBpZiBlYWNoIGNvdW50ZXIgZ29lcworICogaW4gaXQncyBvd24gY2xhc3MpCisgKi8KK3N0YXRpYyBpbnQKK2FsbG9jYXRlX2NvdW50ZXIoY291bnRlcl9hcmNfaGVhZCBjb25zdCAqIGN0cl9hcmMsIGludCBtYXhfZGVwdGgsIGludCBkZXB0aCwKKwkJIHUzMiBhbGxvY2F0ZWRfbWFzaywgc2l6ZV90ICogY291bnRlcl9tYXApCit7CisJc3RydWN0IGxpc3RfaGVhZCAqIHBvczsKKworCWlmIChkZXB0aCA9PSBtYXhfZGVwdGgpCisJCXJldHVybiAxOworCisJLyogSWYgY3RyX2FyYyBpcyBub3QgYXZhaWxhYmxlLCBjb3VudGVyX21hcCBpcyAtMSAqLworCWlmKCgmY3RyX2FyY1tkZXB0aF0ubmV4dCktPm5leHQgPT0gJmN0cl9hcmNbZGVwdGhdLm5leHQpIHsKKwkJY291bnRlcl9tYXBbZGVwdGhdID0gLTE7CisJCWlmIChhbGxvY2F0ZV9jb3VudGVyKGN0cl9hcmMsIG1heF9kZXB0aCwgZGVwdGggKyAxLAorCQkgICAgICAgICAgICAgICAgICAgICBhbGxvY2F0ZWRfbWFzaywKKwkJICAgICAgICAgICAgICAgICAgICAgY291bnRlcl9tYXApKQorCQkJcmV0dXJuIDE7CisJfSBlbHNlIHsKKwkJbGlzdF9mb3JfZWFjaChwb3MsICZjdHJfYXJjW2RlcHRoXS5uZXh0KSB7CisJCQljb3VudGVyX2FyYyBjb25zdCAqIGFyYyA9IGxpc3RfZW50cnkocG9zLCBjb3VudGVyX2FyYywgbmV4dCk7CisKKwkJCWlmIChhbGxvY2F0ZWRfbWFzayAmICgxIDw8IGFyYy0+Y291bnRlcikpCisJCQkJY29udGludWU7CisKKwkJCWNvdW50ZXJfbWFwW2RlcHRoXSA9IGFyYy0+Y291bnRlcjsKKworCQkJaWYgKGFsbG9jYXRlX2NvdW50ZXIoY3RyX2FyYywgbWF4X2RlcHRoLCBkZXB0aCArIDEsCisJCQkJCSAgICAgYWxsb2NhdGVkX21hc2sgfCAoMSA8PCBhcmMtPmNvdW50ZXIpLAorCQkJCQkgICAgIGNvdW50ZXJfbWFwKSkKKwkJCQlyZXR1cm4gMTsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCisvKiBkZXRlcm1pbmUgd2hpY2ggZGlyZWN0b3JpZXMgYXJlIGNvdW50ZXIgZGlyZWN0b3JpZXMKKyAqLworc3RhdGljIGludCBwZXJmY291bnRlcmRpcihjb25zdCBzdHJ1Y3QgZGlyZW50ICogZW50cnkpCit7CisJcmV0dXJuIChpc2RpZ2l0KGVudHJ5LT5kX25hbWVbMF0pKTsKK30KKworCisvKioKKyAqIEBwYXJhbSBtYXNrIHBvaW50ZXIgd2hlcmUgdG8gcGxhY2UgYml0IG1hc2sgb2YgdW5hdmFpbGFibGUgY291bnRlcnMKKyAqCisgKiByZXR1cm4gPj0gMCBudW1iZXIgb2YgY291bnRlcnMgdGhhdCBhcmUgYXZhaWxhYmxlCisgKiAgICAgICAgPCAwICBjb3VsZCBub3QgZGV0ZXJtaW5lIG51bWJlciBvZiBjb3VudGVycworICoKKyAqLworc3RhdGljIGludCBvcF9nZXRfY291bnRlcl9tYXNrKHUzMiAqIG1hc2spCit7CisJc3RydWN0IGRpcmVudCAqKmNvdW50ZXJsaXN0OworCWludCBjb3VudCwgaTsKKwkvKiBhc3N1bWUgbm90aGluZyBpcyBhdmFpbGFibGUgKi8KKwl1MzIgYXZhaWxhYmxlPTA7CisKKwljb3VudCA9IHNjYW5kaXIoIi9kZXYvb3Byb2ZpbGUiLCAmY291bnRlcmxpc3QsIHBlcmZjb3VudGVyZGlyLAorCQkJYWxwaGFzb3J0KTsKKwlpZiAoY291bnQgPCAwKQorCQkvKiB1bmFibGUgdG8gZGV0ZXJtaW5lIGJpdCBtYXNrICovCisJCXJldHVybiAtMTsKKwkvKiBjb252ZXJ0IHRvIGJpdCBtYXAgKDAgd2hlcmUgY291bnRlciBleGlzdHMpICovCisJZm9yIChpPTA7IGk8Y291bnQ7ICsraSkgeworCQlhdmFpbGFibGUgfD0gMSA8PCBhdG9pKGNvdW50ZXJsaXN0W2ldLT5kX25hbWUpOworCQlmcmVlKGNvdW50ZXJsaXN0W2ldKTsKKwl9CisJKm1hc2s9fmF2YWlsYWJsZTsKKwlmcmVlKGNvdW50ZXJsaXN0KTsKKwlyZXR1cm4gY291bnQ7Cit9CisKK3NpemVfdCAqIG1hcF9ldmVudF90b19jb3VudGVyKHN0cnVjdCBvcF9ldmVudCBjb25zdCAqIHBldltdLCBpbnQgbnJfZXZlbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BfY3B1IGNwdV90eXBlKQoreworCWNvdW50ZXJfYXJjX2hlYWQgKiBjdHJfYXJjOworCXNpemVfdCAqIGNvdW50ZXJfbWFwOworCWludCBpLCBucl9jb3VudGVycywgbnJfcG1jX2V2ZW50czsKKwlvcF9jcHUgY3Vycl9jcHVfdHlwZTsKKwl1MzIgdW5hdmFpbGFibGVfY291bnRlcnMgPSAwOworCisJLyogRWl0aGVyIG9waGVscCBvciBvbmUgb2YgdGhlIGxpYm9wIHRlc3RzIG1heSBpbnZva2UgdGhpcworCSAqIGZ1bmN0aW9uIHdpdGggYSBub24tbmF0aXZlIGNwdV90eXBlLiAgSWYgc28sIHdlIHNob3VsZCBub3QKKwkgKiBjYWxsIG9wX2dldF9jb3VudGVyX21hc2sgYmVjYXVzZSB0aGF0IHdpbGwgbG9vayBmb3IgcmVhbCBjb3VudGVyCisJICogaW5mb3JtYXRpb24gaW4gb3Byb2ZpbGVmcy4KKwkgKi8KKwljdXJyX2NwdV90eXBlID0gb3BfZ2V0X2NwdV90eXBlKCk7CisJaWYgKGNwdV90eXBlICE9IGN1cnJfY3B1X3R5cGUpCisJCW5yX2NvdW50ZXJzID0gb3BfZ2V0X25yX2NvdW50ZXJzKGNwdV90eXBlKTsKKwllbHNlCisJCW5yX2NvdW50ZXJzID0gb3BfZ2V0X2NvdW50ZXJfbWFzaygmdW5hdmFpbGFibGVfY291bnRlcnMpOworCisJLyogbm8gY291bnRlcnMgdGhlbiBwcm9iYWJseSBwZXJmbW9uIG1hbmFnaW5nIHBlcmZtb24gaHcgKi8KKwlpZiAobnJfY291bnRlcnMgPD0gMCkgeworCQlucl9jb3VudGVycyA9IG9wX2dldF9ucl9jb3VudGVycyhjcHVfdHlwZSk7CisJCXVuYXZhaWxhYmxlX2NvdW50ZXJzID0gKH4wKSA8PCBucl9jb3VudGVyczsKKwl9CisKKwkvKiBDaGVjayB0byBzZWUgaWYgd2UgaGF2ZSBlbm91Z2ggcGh5c2ljYWwgY291bnRlcnMgdG8gbWFwIGV2ZW50cyovCisJZm9yIChpID0gMCwgbnJfcG1jX2V2ZW50cyA9IDA7IGkgPCBucl9ldmVudHM7IGkrKykKKwkJaWYocGV2W2ldLT5leHQgPT0gTlVMTCkKKwkJCWlmICgrK25yX3BtY19ldmVudHMgPiBucl9jb3VudGVycykKKwkJCQlyZXR1cm4gMDsKKworCWN0cl9hcmMgPSBidWlsZF9jb3VudGVyX2FyYyhwZXYsIG5yX2V2ZW50cyk7CisKKwljb3VudGVyX21hcCA9IHhtYWxsb2MobnJfZXZlbnRzICogc2l6ZW9mKHNpemVfdCkpOworCisJaWYgKCFhbGxvY2F0ZV9jb3VudGVyKGN0cl9hcmMsIG5yX2V2ZW50cywgMCwgdW5hdmFpbGFibGVfY291bnRlcnMsCisJCQkgICAgICBjb3VudGVyX21hcCkpIHsKKwkJZnJlZShjb3VudGVyX21hcCk7CisJCWNvdW50ZXJfbWFwID0gMDsKKwl9CisKKwlkZWxldGVfY291bnRlcl9hcmMoY3RyX2FyYywgbnJfZXZlbnRzKTsKKwlyZXR1cm4gY291bnRlcl9tYXA7Cit9CmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9saWJvcC9vcF9hbGxvY19jb3VudGVyLmggYi9vcHJvZmlsZS0wLjkuNy9saWJvcC9vcF9hbGxvY19jb3VudGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDBiNGViZgotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2xpYm9wL29wX2FsbG9jX2NvdW50ZXIuaApAQCAtMCwwICsxLDQzIEBACisvKioKKyAqIEBmaWxlIG9wX2FsbG9jX2NvdW50ZXIuaAorICogaGFyZHdhcmUgY291bnRlciBhbGxvY2F0aW9uCisgKgorICogWW91IGNhbiBoYXZlIHNpbGxpbmVzcyBoZXJlLgorICoKKyAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDIgT1Byb2ZpbGUgYXV0aG9ycworICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKKyAqCisgKiBAYXV0aG9yIEpvaG4gTGV2b24KKyAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQorICovCisKKyNpZm5kZWYgT1BfQUxMT0NfQ09VTlRFUl9ICisjZGVmaW5lIE9QX0FMTE9DX0NPVU5URVJfSAorCisjaW5jbHVkZSA8c3RkZGVmLmg+CisKKyNpbmNsdWRlICJvcF9jcHVfdHlwZS5oIgorCitzdHJ1Y3Qgb3BfZXZlbnQ7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqCisgKiBAcGFyYW0gcGV2ICBhcnJheSBvZiBzZWxlY3RlZCBldmVudCB3ZSB3YW50IHRvIGJpbmQgdG8gY291bnRlcgorICogQHBhcmFtIG5yX2V2ZW50cyAgc2l6ZSBvZiBwZXYgYXJyYXkKKyAqIEBwYXJhbSBjcHVfdHlwZSAgY3B1IHR5cGUKKyAqCisgKiBUcnkgdG8gY2FsY3VsYXRlIGEgYmluZGluZyBiZXR3ZWVuIHBhc3NlZCBldmVudCBpbiBwZXYgYW5kIGNvdW50ZXIgbnVtYmVyLgorICogVGhlIGJpbmRpbmcgaXMgcmV0dXJuZWQgaW4gYSBzaXplX3QgKiB3aGVyZSByZXR1cm5lZCBwdHJbaV0gaXMgdGhlIGNvdW50ZXIKKyAqIG51bWJlciBib3VuZCB0byBwZXZbaV0KKyAqLworc2l6ZV90ICogbWFwX2V2ZW50X3RvX2NvdW50ZXIoc3RydWN0IG9wX2V2ZW50IGNvbnN0ICogcGV2W10sIGludCBucl9ldmVudHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcF9jcHUgY3B1X3R5cGUpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogIU9QX0FMTE9DX0NPVU5URVJfSCAqLwpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvbGlib3Avb3BfY29uZmlnLmMgYi9vcHJvZmlsZS0wLjkuNy9saWJvcC9vcF9jb25maWcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzcyNDJiCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvbGlib3Avb3BfY29uZmlnLmMKQEAgLTAsMCArMSw3NyBAQAorLyoqCisgKiBAZmlsZSBvcF9jb25maWcuYworICogT3Byb2ZpbGUgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzLgorICoKKyAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDIgT1Byb2ZpbGUgYXV0aG9ycworICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKKyAqCisgKiBAYXV0aG9yIE5hdGhhbiBUYWxsZW50CisgKiBATW9kaWZpY2F0aW9ucyBEYW5pZWwgSGFuc2VsCisgKi8KKworI2luY2x1ZGUgIm9wX2NvbmZpZy5oIgorI2luY2x1ZGUgIm9wX2NvbmZpZ18yNC5oIgorCisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKworLyogcGF0aHMgaW4gb3BfY29uZmlnLmggKi8KK2NoYXIgb3Bfc2Vzc2lvbl9kaXJbUEFUSF9NQVhdOworY2hhciBvcF9zYW1wbGVzX2RpcltQQVRIX01BWF07CitjaGFyIG9wX3NhbXBsZXNfY3VycmVudF9kaXJbUEFUSF9NQVhdOworY2hhciBvcF9sb2NrX2ZpbGVbUEFUSF9NQVhdOworY2hhciBvcF9sb2dfZmlsZVtQQVRIX01BWF07CitjaGFyIG9wX3BpcGVfZmlsZVtQQVRIX01BWF07CitjaGFyIG9wX2R1bXBfc3RhdHVzW1BBVEhfTUFYXTsKKworLyogcGF0aHMgaW4gb3BfY29uZmlnXzI0LmggKi8KK2NoYXIgb3BfZGV2aWNlW1BBVEhfTUFYXTsKK2NoYXIgb3Bfbm90ZV9kZXZpY2VbUEFUSF9NQVhdOworY2hhciBvcF9oYXNoX2RldmljZVtQQVRIX01BWF07CisKK3ZvaWQKK2luaXRfb3BfY29uZmlnX2RpcnMoY2hhciBjb25zdCAqIHNlc3Npb25fZGlyKQoreworCWludCBzZXNzaW9uX2Rpcl9sZW47CisKKwlhc3NlcnQoc2Vzc2lvbl9kaXIpOwkKKwlzZXNzaW9uX2Rpcl9sZW4gPSBzdHJsZW4oc2Vzc2lvbl9kaXIpOworCisJaWYgKHNlc3Npb25fZGlyX2xlbiArIHN0cmxlbigiL3NhbXBsZXMvb3Byb2ZpbGVkLmxvZyIpID4gUEFUSF9NQVgpIHsKKwkJZnByaW50ZihzdGRlcnIsICJTZXNzaW9uX2RpciBzdHJpbmcgXCIlc1wiIGlzIHRvbyBsYXJnZS5cbiIsIAorCQkJc2Vzc2lvbl9kaXIpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorCQorCXN0cmNweShvcF9zZXNzaW9uX2Rpciwgc2Vzc2lvbl9kaXIpOworCQorCXN0cmNweShvcF9zYW1wbGVzX2Rpciwgb3Bfc2Vzc2lvbl9kaXIpOworCXN0cmNhdChvcF9zYW1wbGVzX2RpciwgIi9zYW1wbGVzLyIpOworCQorCXN0cmNweShvcF9zYW1wbGVzX2N1cnJlbnRfZGlyLCBvcF9zYW1wbGVzX2Rpcik7CisJc3RyY2F0KG9wX3NhbXBsZXNfY3VycmVudF9kaXIsICIvY3VycmVudC8iKTsKKworCXN0cmNweShvcF9sb2NrX2ZpbGUsIG9wX3Nlc3Npb25fZGlyKTsKKwlzdHJjYXQob3BfbG9ja19maWxlLCAiL2xvY2siKTsKKworCXN0cmNweShvcF9waXBlX2ZpbGUsIG9wX3Nlc3Npb25fZGlyKTsKKwlzdHJjYXQob3BfcGlwZV9maWxlLCAiL29wZF9waXBlIik7CisKKwlzdHJjcHkob3BfbG9nX2ZpbGUsIG9wX3NhbXBsZXNfZGlyKTsKKwlzdHJjYXQob3BfbG9nX2ZpbGUsICJvcHJvZmlsZWQubG9nIik7CisKKwlzdHJjcHkob3BfZHVtcF9zdGF0dXMsIG9wX3Nlc3Npb25fZGlyKTsKKwlzdHJjYXQob3BfZHVtcF9zdGF0dXMsICIvY29tcGxldGVfZHVtcCIpOworCisJc3RyY3B5KG9wX2RldmljZSwgb3Bfc2Vzc2lvbl9kaXIpOworCXN0cmNhdChvcF9kZXZpY2UsICIvb3BkZXYiKTsKKworCXN0cmNweShvcF9ub3RlX2RldmljZSwgb3Bfc2Vzc2lvbl9kaXIpOworCXN0cmNhdChvcF9ub3RlX2RldmljZSwgIi9vcG5vdGVkZXYiKTsKKworCXN0cmNweShvcF9oYXNoX2RldmljZSwgb3Bfc2Vzc2lvbl9kaXIpOworCXN0cmNhdChvcF9oYXNoX2RldmljZSwgIi9vcGhhc2htYXBkZXYiKTsKK30KZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2xpYm9wL29wX2NvbmZpZy5oIGIvb3Byb2ZpbGUtMC45LjcvbGlib3Avb3BfY29uZmlnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Y5Mzk1MQotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2xpYm9wL29wX2NvbmZpZy5oCkBAIC0wLDAgKzEsNTcgQEAKKy8qKgorICogQGZpbGUgb3BfY29uZmlnLmgKKyAqCisgKiBQYXJhbWV0ZXJzIGEgdXNlciBtYXkgd2FudCB0byBjaGFuZ2UuIFNlZQorICogYWxzbyBvcF9jb25maWdfMjQuaAorICoKKyAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDIgT1Byb2ZpbGUgYXV0aG9ycworICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKKyAqCisgKiBAYXV0aG9yIEpvaG4gTGV2b24KKyAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQorICogQE1vZGlmaWNhdGlvbnMgRGFuaWVsIEhhbnNlbAorICovCisKKyNpZm5kZWYgT1BfQ09ORklHX0gKKyNkZWZpbmUgT1BfQ09ORklHX0gKKworI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpCitleHRlcm4gIkMiIHsKKyNlbmRpZgorICAKKy8qKiAKKyAqIG11c3QgYmUgY2FsbGVkIHRvIGluaXRpYWxpemUgdGhlIHBhdGhzIGJlbG93LgorICogQHBhcmFtIHNlc3Npb25fZGlyICB0aGUgbm9uLU5VTEwgdmFsdWUgb2YgdGhlIGJhc2Ugc2Vzc2lvbiBkaXJlY3RvcnkKKyAqLwordm9pZCBpbml0X29wX2NvbmZpZ19kaXJzKGNoYXIgY29uc3QgKiBzZXNzaW9uX2Rpcik7CisKKyNkZWZpbmUgT1BfU0VTU0lPTl9ESVJfREVGQVVMVCAiL3Zhci9saWIvb3Byb2ZpbGUvIgorCisvKiAKKyAqIHZhcmlvdXMgcGF0aHMsIGNvcnJlc3BvbmRpbmcgdG8gb3Bjb250cm9sLCB0aGF0IHNob3VsZCBiZQorICogaW5pdGlhbGl6ZWQgYnkgaW5pdF9vcF9jb25maWdfZGlycygpIGFib3ZlLiAKKyAqLworZXh0ZXJuIGNoYXIgb3Bfc2Vzc2lvbl9kaXJbXTsKK2V4dGVybiBjaGFyIG9wX3NhbXBsZXNfZGlyW107CitleHRlcm4gY2hhciBvcF9zYW1wbGVzX2N1cnJlbnRfZGlyW107CitleHRlcm4gY2hhciBvcF9sb2NrX2ZpbGVbXTsKK2V4dGVybiBjaGFyIG9wX2xvZ19maWxlW107CitleHRlcm4gY2hhciBvcF9waXBlX2ZpbGVbXTsKK2V4dGVybiBjaGFyIG9wX2R1bXBfc3RhdHVzW107CisKKy8qIEdsb2JhbCBkaXJlY3RvcnkgdGhhdCBzdG9yZXMgZGVidWcgZmlsZXMgKi8KKyNpZm5kZWYgREVCVUdESVIKKyNkZWZpbmUgREVCVUdESVIgIi91c3IvbGliL2RlYnVnIgorI2VuZGlmCisKKyNkZWZpbmUgT1BEX01BR0lDICJEQUVcbiIKKyNkZWZpbmUgT1BEX1ZFUlNJT04gMHgxMQorCisjZGVmaW5lIE9QX01JTl9DUFVfQlVGX1NJWkUgMjA0OAorI2RlZmluZSBPUF9NQVhfQ1BVX0JVRl9TSVpFIDEzMTA3MgorCisjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKK30KKyNlbmRpZgorCisjZW5kaWYgLyogT1BfQ09ORklHX0ggKi8KZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2xpYm9wL29wX2NvbmZpZ18yNC5oIGIvb3Byb2ZpbGUtMC45LjcvbGlib3Avb3BfY29uZmlnXzI0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTc4NmZhZQotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2xpYm9wL29wX2NvbmZpZ18yNC5oCkBAIC0wLDAgKzEsNzkgQEAKKy8qKgorICogQGZpbGUgb3BfY29uZmlnXzI0LmgKKyAqCisgKiBQYXJhbWV0ZXJzIGEgdXNlciBtYXkgd2FudCB0byBjaGFuZ2UKKyAqCisgKiBAcmVtYXJrIENvcHlyaWdodCAyMDAyIE9Qcm9maWxlIGF1dGhvcnMKKyAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCisgKgorICogQGF1dGhvciBKb2huIExldm9uCisgKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKKyAqLworCisjaWZuZGVmIE9QX0NPTkZJR18yNF9ICisjZGVmaW5lIE9QX0NPTkZJR18yNF9ICisKKyNkZWZpbmUgT1BfTU9VTlQgIi9wcm9jL3N5cy9kZXYvb3Byb2ZpbGUvIgorCitleHRlcm4gY2hhciBvcF9kZXZpY2VbXTsKK2V4dGVybiBjaGFyIG9wX25vdGVfZGV2aWNlW107CitleHRlcm4gY2hhciBvcF9oYXNoX2RldmljZVtdOworCisvKkB7XG5hbWUgbW9kdWxlIGRlZmF1bHQvbWluL21heCBzZXR0aW5ncyAqLworCisvKiogNjU1MzYgKiBzaXplb2Yob3Bfc2FtcGxlKSAqLworI2RlZmluZSBPUF9ERUZBVUxUX0JVRl9TSVpFIDY1NTM2CisvKiogCisgKiB3ZSBkb24ndCB0cnkgdG8gd2FrZS11cCBkYWVtb24gdW50aWwgaXQgcmVtYWlucyBtb3JlIHRoYW4gdGhpcyBmcmVlIGVudHJ5CisgKiBpbiBldmljdGlvbiBidWZmZXIgCisgKi8KKyNkZWZpbmUgT1BfUFJFX1dBVEVSTUFSSyhidWZmZXJfc2l6ZSkJCQlcCisJKCgoYnVmZmVyX3NpemUpIC8gOCkgPCBPUF9NSU5fUFJFX1dBVEVSTUFSSwlcCisJCT8gT1BfTUlOX1BSRV9XQVRFUk1BUksJCQlcCisJCTogKGJ1ZmZlcl9zaXplKSAvIDgpCisvKiogbWluaW1hbCBidWZmZXIgd2F0ZXIgbWFyayBiZWZvcmUgd2UgdHJ5IHRvIHdha2V1cCBkYWVtb24gKi8KKyNkZWZpbmUgT1BfTUlOX1BSRV9XQVRFUk1BUksgODE5MgorLyoqIG1heGltdW0gbnVtYmVyIG9mIGVudHJ5IGluIHNhbXBsZXMgZXZpY3Rpb24gYnVmZmVyICovCisjZGVmaW5lIE9QX01BWF9CVUZfU0laRQkxMDQ4NTc2CisvKiogbWluaW11bSBudW1iZXIgb2YgZW50cnkgaW4gc2FtcGxlcyBldmljdGlvbiBidWZmZXIgKi8KKyNkZWZpbmUgT1BfTUlOX0JVRl9TSVpFCSgzMjc2OCArIE9QX1BSRV9XQVRFUk1BUksoMzI3NjgpKQorCisvKiogMTYzODQgKiBzaXplb2Yob3Bfbm90ZSkgPSAyNzM2ODAgYnl0ZXMgZGVmYXVsdCAqLworI2RlZmluZSBPUF9ERUZBVUxUX05PVEVfU0laRSAxNjM4NAorLyoqIAorICogd2UgZG9uJ3QgdHJ5IHRvIHdha2UtdXAgZGFlbW9uIHVudGlsIGl0IHJlbWFpbnMgbW9yZSB0aGFuIHRoaXMgZnJlZSBlbnRyeQorICogaW4gbm90ZSBidWZmZXIgCisgKi8KKyNkZWZpbmUgT1BfUFJFX05PVEVfV0FURVJNQVJLKG5vdGVfc2l6ZSkJCVwKKwkoKChub3RlX3NpemUpIC8gMzIpIDwgT1BfTUlOX05PVEVfUFJFX1dBVEVSTUFSSwlcCisJCT8gT1BfTUlOX05PVEVfUFJFX1dBVEVSTUFSSwkJXAorCQk6IChub3RlX3NpemUpIC8gMzIpCisvKiogbWluaW1hbCBub3RlIGJ1ZmZlciB3YXRlciBtYXJrIGJlZm9yZSB3ZSB0cnkgdG8gd2FrZXVwIGRhZW1vbiAqLworI2RlZmluZSBPUF9NSU5fTk9URV9QUkVfV0FURVJNQVJLIDUxMgorLyoqIG1heGltdW0gbnVtYmVyIG9mIGVudHJ5IGluIG5vdGUgYnVmZmVyICovCisjZGVmaW5lIE9QX01BWF9OT1RFX1RBQkxFX1NJWkUJMTA0ODU3NgorLyoqIG1pbmltdW0gbnVtYmVyIG9mIGVudHJ5IGluIG5vdGUgYnVmZmVyICovCisjZGVmaW5lIE9QX01JTl9OT1RFX1RBQkxFX1NJWkUJKDEwMjQgKyBPUF9QUkVfTk9URV9XQVRFUk1BUksoMTAyNCkpCisKKy8qKiBtYXhpbXVtIHNhbXBsaW5nIHJhdGUgd2hlbiB1c2luZyBSVEMgKi8KKyNkZWZpbmUgT1BfTUFYX1JUQ19DT1VOVAk0MDk2CisvKiogbWluaW11bSBzYW1wbGluZyByYXRlIHdoZW4gdXNpbmcgUlRDICovCisjZGVmaW5lIE9QX01JTl9SVENfQ09VTlQJMgorCisvKkB9Ki8KKworLyoqIAorICogbnIgZW50cmllcyBpbiBoYXNoIG1hcC4gVGhpcyBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgbmFtZSBjb21wb25lbnRzCisgKiBhbGxvd2VkLiBNdXN0IGJlIGEgcHJpbWUgbnVtYmVyIAorICovCisjZGVmaW5lIE9QX0hBU0hfTUFQX05SIDQwOTMKKworLyoqIHNpemUgb2Ygc3RyaW5nIHBvb2wgaW4gYnl0ZXMgKi8KKyNkZWZpbmUgUE9PTF9TSVpFIDY1NTM2CisKKyNpZm5kZWYgTlJfQ1BVUworLyoqIG1heGltdW0gbnVtYmVyIG9mIGNwdXMgcHJlc2VudCBpbiB0aGUgYm94ICovCisjZGVmaW5lIE5SX0NQVVMgMzIKKyNlbmRpZgorCisjZW5kaWYgLyogT1BfQ09ORklHXzI0X0ggKi8KZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2xpYm9wL29wX2NwdV90eXBlLmMgYi9vcHJvZmlsZS0wLjkuNy9saWJvcC9vcF9jcHVfdHlwZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0ZTI2YmYKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9saWJvcC9vcF9jcHVfdHlwZS5jCkBAIC0wLDAgKzEsMjE2IEBACisvKioKKyAqIEBmaWxlIG9wX2NwdV90eXBlLmMKKyAqIENQVSB0eXBlIGRldGVybWluYXRpb24KKyAqCisgKiBAcmVtYXJrIENvcHlyaWdodCAyMDAyIE9Qcm9maWxlIGF1dGhvcnMKKyAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCisgKgorICogQGF1dGhvciBKb2huIExldm9uCisgKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgIm9wX2NwdV90eXBlLmgiCisjaW5jbHVkZSAib3BfaHdfc3BlY2lmaWMuaCIKKworc3RydWN0IGNwdV9kZXNjciB7CisJY2hhciBjb25zdCAqIHByZXR0eTsKKwljaGFyIGNvbnN0ICogbmFtZTsKKwlvcF9jcHUgY3B1OworCXVuc2lnbmVkIGludCBucl9jb3VudGVyczsKK307CisKK3N0YXRpYyBzdHJ1Y3QgY3B1X2Rlc2NyIGNvbnN0IGNwdV9kZXNjcnNbTUFYX0NQVV9UWVBFXSA9IHsKKwl7ICJQZW50aXVtIFBybyIsICJpMzg2L3Bwcm8iLCBDUFVfUFBSTywgMiB9LAorCXsgIlBJSSIsICJpMzg2L3BpaSIsIENQVV9QSUksIDIgfSwKKwl7ICJQSUlJIiwgImkzODYvcGlpaSIsIENQVV9QSUlJLCAyIH0sCisJeyAiQXRobG9uIiwgImkzODYvYXRobG9uIiwgQ1BVX0FUSExPTiwgNCB9LAorCXsgIkNQVSB3aXRoIHRpbWVyIGludGVycnVwdCIsICJ0aW1lciIsIENQVV9USU1FUl9JTlQsIDEgfSwKKwl7ICJDUFUgd2l0aCBSVEMgZGV2aWNlIiwgInJ0YyIsIENQVV9SVEMsIDEgfSwKKwl7ICJQNCAvIFhlb24iLCAiaTM4Ni9wNCIsIENQVV9QNCwgOCB9LAorCXsgIklBNjQiLCAiaWE2NC9pYTY0IiwgQ1BVX0lBNjQsIDQgfSwKKwl7ICJJdGFuaXVtIiwgImlhNjQvaXRhbml1bSIsIENQVV9JQTY0XzEsIDQgfSwKKwl7ICJJdGFuaXVtIDIiLCAiaWE2NC9pdGFuaXVtMiIsIENQVV9JQTY0XzIsIDQgfSwKKwl7ICJBTUQ2NCBwcm9jZXNzb3JzIiwgIng4Ni02NC9oYW1tZXIiLCBDUFVfSEFNTUVSLCA0IH0sCisJeyAiUDQgLyBYZW9uIHdpdGggMiBoeXBlci10aHJlYWRzIiwgImkzODYvcDQtaHQiLCBDUFVfUDRfSFQyLCA0IH0sCisJeyAiQWxwaGEgRVY0IiwgImFscGhhL2V2NCIsIENQVV9BWFBfRVY0LCAyIH0sCisJeyAiQWxwaGEgRVY1IiwgImFscGhhL2V2NSIsIENQVV9BWFBfRVY1LCAzIH0sCisJeyAiQWxwaGEgUENBNTYiLCAiYWxwaGEvcGNhNTYiLCBDUFVfQVhQX1BDQTU2LCAzIH0sCisJeyAiQWxwaGEgRVY2IiwgImFscGhhL2V2NiIsIENQVV9BWFBfRVY2LCAyIH0sCisJeyAiQWxwaGEgRVY2NyIsICJhbHBoYS9ldjY3IiwgQ1BVX0FYUF9FVjY3LCAyMCB9LAorCXsgIlBlbnRpdW0gTSAoUDYgY29yZSkiLCAiaTM4Ni9wNl9tb2JpbGUiLCBDUFVfUDZfTU9CSUxFLCAyIH0sCisJeyAiQVJNL1hTY2FsZSBQTVUxIiwgImFybS94c2NhbGUxIiwgQ1BVX0FSTV9YU0NBTEUxLCAzIH0sCisJeyAiQVJNL1hTY2FsZSBQTVUyIiwgImFybS94c2NhbGUyIiwgQ1BVX0FSTV9YU0NBTEUyLCA1IH0sCisJeyAicHBjNjQgUE9XRVI0IiwgInBwYzY0L3Bvd2VyNCIsIENQVV9QUEM2NF9QT1dFUjQsIDggfSwKKwl7ICJwcGM2NCBQT1dFUjUiLCAicHBjNjQvcG93ZXI1IiwgQ1BVX1BQQzY0X1BPV0VSNSwgNiB9LAorCXsgInBwYzY0IFBPV0VSNSsiLCAicHBjNjQvcG93ZXI1KyIsIENQVV9QUEM2NF9QT1dFUjVwLCA2IH0sCisJeyAicHBjNjQgOTcwIiwgInBwYzY0Lzk3MCIsIENQVV9QUEM2NF85NzAsIDggfSwKKwl7ICJNSVBTIDIwSyIsICJtaXBzLzIwSyIsIENQVV9NSVBTXzIwSywgMX0sCisJeyAiTUlQUyAyNEsiLCAibWlwcy8yNEsiLCBDUFVfTUlQU18yNEssIDJ9LAorCXsgIk1JUFMgMjVLIiwgIm1pcHMvMjVLIiwgQ1BVX01JUFNfMjVLLCAyfSwKKwl7ICJNSVBTIDM0SyIsICJtaXBzLzM0SyIsIENQVV9NSVBTXzM0SywgMn0sCisJeyAiTUlQUyA1SyIsICJtaXBzLzVLIiwgQ1BVX01JUFNfNUssIDJ9LAorCXsgIk1JUFMgUjEwMDAwIiwgIm1pcHMvcjEwMDAwIiwgQ1BVX01JUFNfUjEwMDAwLCAyIH0sCisJeyAiTUlQUyBSMTIwMDAiLCAibWlwcy9yMTIwMDAiLCBDUFVfTUlQU19SMTIwMDAsIDQgfSwKKwl7ICJRRUQgUk03MDAwIiwgIm1pcHMvcm03MDAwIiwgQ1BVX01JUFNfUk03MDAwLCAxIH0sCisJeyAiUE1DLVNpZXJyYSBSTTkwMDAiLCAibWlwcy9ybTkwMDAiLCBDUFVfTUlQU19STTkwMDAsIDIgfSwKKwl7ICJTaWJ5dGUgU0IxIiwgIm1pcHMvc2IxIiwgQ1BVX01JUFNfU0IxLCA0IH0sCisJeyAiTkVDIFZSNTQzMiIsICJtaXBzL3ZyNTQzMiIsIENQVV9NSVBTX1ZSNTQzMiwgMiB9LAorCXsgIk5FQyBWUjU1MDAiLCAibWlwcy92cjU1MDAiLCBDUFVfTUlQU19WUjU1MDAsIDIgfSwKKwl7ICJlNTAwIiwgInBwYy9lNTAwIiwgQ1BVX1BQQ19FNTAwLCA0IH0sCisJeyAiZTUwMHYyIiwgInBwYy9lNTAwdjIiLCBDUFVfUFBDX0U1MDBfMiwgNCB9LAorCXsgIkNvcmUgU29sbyAvIER1byIsICJpMzg2L2NvcmUiLCBDUFVfQ09SRSwgMiB9LAorCXsgIlBvd2VyUEMgRzQiLCAicHBjLzc0NTAiLCAgQ1BVX1BQQ183NDUwLCA2IH0sCisJeyAiQ29yZSAyIiwgImkzODYvY29yZV8yIiwgQ1BVX0NPUkVfMiwgMiB9LAorCXsgInBwYzY0IFBPV0VSNiIsICJwcGM2NC9wb3dlcjYiLCBDUFVfUFBDNjRfUE9XRVI2LCA0IH0sCisJeyAicHBjNjQgOTcwTVAiLCAicHBjNjQvOTcwTVAiLCBDUFVfUFBDNjRfOTcwTVAsIDggfSwKKwl7ICJwcGM2NCBDZWxsIEJyb2FkYmFuZCBFbmdpbmUiLCAicHBjNjQvY2VsbC1iZSIsIENQVV9QUEM2NF9DRUxMLCA4IH0sCisJeyAiQU1ENjQgZmFtaWx5MTAiLCAieDg2LTY0L2ZhbWlseTEwIiwgQ1BVX0ZBTUlMWTEwLCA0IH0sCisJeyAicHBjNjQgUEE2VCIsICJwcGM2NC9wYTZ0IiwgQ1BVX1BQQzY0X1BBNlQsIDYgfSwKKwl7ICJBUk0gMTFNUENvcmUiLCAiYXJtL21wY29yZSIsIENQVV9BUk1fTVBDT1JFLCAyIH0sCisJeyAiQVJNIFY2IFBNVSIsICJhcm0vYXJtdjYiLCBDUFVfQVJNX1Y2LCAzIH0sCisJeyAicHBjNjQgUE9XRVI1KysiLCAicHBjNjQvcG93ZXI1KysiLCBDUFVfUFBDNjRfUE9XRVI1cHAsIDYgfSwKKwl7ICJlMzAwIiwgInBwYy9lMzAwIiwgQ1BVX1BQQ19FMzAwLCA0IH0sCisJeyAiQVZSMzIiLCAiYXZyMzIiLCBDUFVfQVZSMzIsIDMgfSwKKwl7ICJBUk0gQ29ydGV4LUE4IiwgImFybS9hcm12NyIsIENQVV9BUk1fVjcsIDUgfSwKKyAJeyAiSW50ZWwgQXJjaGl0ZWN0dXJhbCBQZXJmbW9uIiwgImkzODYvYXJjaF9wZXJmbW9uIiwgQ1BVX0FSQ0hfUEVSRk1PTiwgMH0sCisJeyAiQU1ENjQgZmFtaWx5MTFoIiwgIng4Ni02NC9mYW1pbHkxMWgiLCBDUFVfRkFNSUxZMTFILCA0IH0sCisJeyAicHBjNjQgUE9XRVI3IiwgInBwYzY0L3Bvd2VyNyIsIENQVV9QUEM2NF9QT1dFUjcsIDYgfSwKKwl7ICJwcGM2NCBjb21wYXQgdmVyc2lvbiAxIiwgInBwYzY0L2libS1jb21wYXQtdjEiLCBDUFVfUFBDNjRfSUJNX0NPTVBBVF9WMSwgNCB9LAorICAgCXsgIkludGVsIENvcmUvaTciLCAiaTM4Ni9jb3JlX2k3IiwgQ1BVX0NPUkVfSTcsIDQgfSwKKyAgIAl7ICJJbnRlbCBBdG9tIiwgImkzODYvYXRvbSIsIENQVV9BVE9NLCAyIH0sCisJeyAiTG9vbmdzb24yIiwgIm1pcHMvbG9vbmdzb24yIiwgQ1BVX01JUFNfTE9PTkdTT04yLCAyIH0sCisJeyAiSW50ZWwgTmVoYWxlbSBtaWNyb2FyY2hpdGVjdHVyZSIsICJpMzg2L25laGFsZW0iLCBDUFVfTkVIQUxFTSwgNCB9LAorCXsgIkFSTSBDb3J0ZXgtQTkiLCAiYXJtL2FybXY3LWNhOSIsIENQVV9BUk1fVjdfQ0E5LCA3IH0sCisJeyAiTUlQUyA3NEsiLCAibWlwcy83NEsiLCBDUFVfTUlQU183NEssIDR9LAorCXsgIk1JUFMgMTAwNEsiLCAibWlwcy8xMDA0SyIsIENQVV9NSVBTXzEwMDRLLCAyfSwKKwl7ICJBTUQ2NCBmYW1pbHkxMmgiLCAieDg2LTY0L2ZhbWlseTEyaCIsIENQVV9GQU1JTFkxMkgsIDQgfSwKKwl7ICJBTUQ2NCBmYW1pbHkxNGgiLCAieDg2LTY0L2ZhbWlseTE0aCIsIENQVV9GQU1JTFkxNEgsIDQgfSwKKwl7ICJBTUQ2NCBmYW1pbHkxNWgiLCAieDg2LTY0L2ZhbWlseTE1aCIsIENQVV9GQU1JTFkxNUgsIDYgfSwKKwl7ICJJbnRlbCBXZXN0bWVyZSBtaWNyb2FyY2hpdGVjdHVyZSIsICJpMzg2L3dlc3RtZXJlIiwgQ1BVX1dFU1RNRVJFLCA0IH0sCisJeyAiQVJNdjcgU2NvcnBpb24iLCAiYXJtL2FybXY3LXNjb3JwaW9uIiwgQ1BVX0FSTV9TQ09SUElPTiwgNSB9LAorCXsgIkFSTXY3IFNjb3JwaW9uTVAiLCAiYXJtL2FybXY3LXNjb3JwaW9ubXAiLCBDUFVfQVJNX1NDT1JQSU9OTVAsIDUgfSwKKwl7ICJJbnRlbCBTYW5keSBCcmlkZ2UgbWljcm9hcmNoaXRlY3R1cmUiLCAiaTM4Ni9zYW5keWJyaWRnZSIsIENQVV9TQU5EWUJSSURHRSwgOCB9LAorfTsKKyAKK3N0YXRpYyBzaXplX3QgY29uc3QgbnJfY3B1X2Rlc2NycyA9IHNpemVvZihjcHVfZGVzY3JzKSAvIHNpemVvZihzdHJ1Y3QgY3B1X2Rlc2NyKTsKKworaW50IG9wX2NwdV92YXJpYXRpb25zKG9wX2NwdSBjcHVfdHlwZSkKK3sKKwlzd2l0Y2ggKGNwdV90eXBlKSB7CisJY2FzZSAgQ1BVX0FSQ0hfUEVSRk1PTjoKKwkJcmV0dXJuIDE7CisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQorfQorCisKK29wX2NwdSBvcF9jcHVfYmFzZV90eXBlKG9wX2NwdSBjcHVfdHlwZSkKK3sKKwkvKiBBbGwgdGhlIHByb2Nlc3NvcnMgdGhhdCBzdXBwb3J0IENQVV9BUkNIX1BFUkZNT04gKi8KKwlzd2l0Y2ggKGNwdV90eXBlKSB7CisJY2FzZSBDUFVfQ09SRV8yOgorCWNhc2UgQ1BVX0NPUkVfSTc6CisJY2FzZSBDUFVfQVRPTToKKwljYXNlIENQVV9ORUhBTEVNOgorCWNhc2UgQ1BVX1dFU1RNRVJFOgorCWNhc2UgQ1BVX1NBTkRZQlJJREdFOgorCQlyZXR1cm4gQ1BVX0FSQ0hfUEVSRk1PTjsKKwlkZWZhdWx0OgorCQkvKiBhc3N1bWUgcHJvY2Vzc29yIGluIGEgY2xhc3MgYnkgaXRzZWxmICovCisJCXJldHVybiBjcHVfdHlwZTsKKwl9Cit9CisKK29wX2NwdSBvcF9nZXRfY3B1X3R5cGUodm9pZCkKK3sKKwlpbnQgY3B1X3R5cGUgPSBDUFVfTk9fR09PRDsKKwljaGFyIHN0clsxMDBdOworCUZJTEUgKiBmcDsKKworCWZwID0gZm9wZW4oIi9wcm9jL3N5cy9kZXYvb3Byb2ZpbGUvY3B1X3R5cGUiLCAiciIpOworCWlmICghZnApIHsKKwkJLyogVHJ5IDIuNidzIG9wcm9maWxlZnMgb25lIGluc3RlYWQuICovCisJCWZwID0gZm9wZW4oIi9kZXYvb3Byb2ZpbGUvY3B1X3R5cGUiLCAiciIpOworCQlpZiAoIWZwKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIlVuYWJsZSB0byBvcGVuIGNwdV90eXBlIGZpbGUgZm9yIHJlYWRpbmdcbiIpOworCQkJZnByaW50ZihzdGRlcnIsICJNYWtlIHN1cmUgeW91IGhhdmUgZG9uZSBvcGNvbnRyb2wgLS1pbml0XG4iKTsKKwkJCXJldHVybiBjcHVfdHlwZTsKKwkJfQorCX0KKworCWlmICghZmdldHMoc3RyLCA5OSwgZnApKSB7CisJCWZwcmludGYoc3RkZXJyLCAiQ291bGQgbm90IHJlYWQgY3B1IHR5cGUuXG4iKTsKKwkJZmNsb3NlKGZwKTsKKwkJcmV0dXJuIGNwdV90eXBlOworCX0KKworCWNwdV90eXBlID0gb3BfZ2V0X2NwdV9udW1iZXIoc3RyKTsKKworCWlmIChvcF9jcHVfdmFyaWF0aW9ucyhjcHVfdHlwZSkpCisJCWNwdV90eXBlID0gb3BfY3B1X3NwZWNpZmljX3R5cGUoY3B1X3R5cGUpOworCisJZmNsb3NlKGZwKTsKKworCXJldHVybiBjcHVfdHlwZTsKK30KKworCitvcF9jcHUgb3BfZ2V0X2NwdV9udW1iZXIoY2hhciBjb25zdCAqIGNwdV9zdHJpbmcpCit7CisJaW50IGNwdV90eXBlID0gQ1BVX05PX0dPT0Q7CisJc2l6ZV90IGk7CisJCisJZm9yIChpID0gMDsgaSA8IG5yX2NwdV9kZXNjcnM7ICsraSkgeworCQlpZiAoIXN0cmNtcChjcHVfZGVzY3JzW2ldLm5hbWUsIGNwdV9zdHJpbmcpKSB7CisJCQljcHVfdHlwZSA9IGNwdV9kZXNjcnNbaV0uY3B1OworCQkJYnJlYWs7CisJCX0KKwl9CisKKwkvKiBBdHRlbXB0IHRvIGNvbnZlcnQgaW50byBhIG51bWJlciAqLworCWlmIChjcHVfdHlwZSA9PSBDUFVfTk9fR09PRCkKKwkJc3NjYW5mKGNwdV9zdHJpbmcsICIlZFxuIiwgJmNwdV90eXBlKTsKKwkKKwlpZiAoY3B1X3R5cGUgPD0gQ1BVX05PX0dPT0QgfHwgY3B1X3R5cGUgPj0gTUFYX0NQVV9UWVBFKQorCQljcHVfdHlwZSA9IENQVV9OT19HT09EOworCisJcmV0dXJuIGNwdV90eXBlOworfQorCisKK2NoYXIgY29uc3QgKiBvcF9nZXRfY3B1X3R5cGVfc3RyKG9wX2NwdSBjcHVfdHlwZSkKK3sKKwlpZiAoY3B1X3R5cGUgPD0gQ1BVX05PX0dPT0QgfHwgY3B1X3R5cGUgPj0gTUFYX0NQVV9UWVBFKQorCQlyZXR1cm4gImludmFsaWQgY3B1IHR5cGUiOworCisJcmV0dXJuIGNwdV9kZXNjcnNbY3B1X3R5cGVdLnByZXR0eTsKK30KKworCitjaGFyIGNvbnN0ICogb3BfZ2V0X2NwdV9uYW1lKG9wX2NwdSBjcHVfdHlwZSkKK3sKKwlpZiAoY3B1X3R5cGUgPD0gQ1BVX05PX0dPT0QgfHwgY3B1X3R5cGUgPj0gTUFYX0NQVV9UWVBFKQorCQlyZXR1cm4gImludmFsaWQgY3B1IHR5cGUiOworCisJcmV0dXJuIGNwdV9kZXNjcnNbY3B1X3R5cGVdLm5hbWU7Cit9CisKKworaW50IG9wX2dldF9ucl9jb3VudGVycyhvcF9jcHUgY3B1X3R5cGUpCit7CisJaW50IGNudDsKKworCWlmIChjcHVfdHlwZSA8PSBDUFVfTk9fR09PRCB8fCBjcHVfdHlwZSA+PSBNQVhfQ1BVX1RZUEUpCisJCXJldHVybiAwOworCisJY250ID0gYXJjaF9udW1fY291bnRlcnMoY3B1X3R5cGUpOworCWlmIChjbnQgPj0gMCkKKwkJcmV0dXJuIGNudDsKKworCXJldHVybiBjcHVfZGVzY3JzW2NwdV90eXBlXS5ucl9jb3VudGVyczsKK30KZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2xpYm9wL29wX2NwdV90eXBlLmggYi9vcHJvZmlsZS0wLjkuNy9saWJvcC9vcF9jcHVfdHlwZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2Y2FlM2EKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9saWJvcC9vcF9jcHVfdHlwZS5oCkBAIC0wLDAgKzEsMTcyIEBACisvKioKKyAqIEBmaWxlIG9wX2NwdV90eXBlLmgKKyAqIENQVSB0eXBlIGRldGVybWluYXRpb24KKyAqCisgKiBAcmVtYXJrIENvcHlyaWdodCAyMDAyIE9Qcm9maWxlIGF1dGhvcnMKKyAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCisgKgorICogQGF1dGhvciBKb2huIExldm9uCisgKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKKyAqLworCisjaWZuZGVmIE9QX0NQVV9UWVBFX0gKKyNkZWZpbmUgT1BfQ1BVX1RZUEVfSAorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qKgorICogU3VwcG9ydGVkIGNwdSB0eXBlLiAgQWx3YXlzIGFkZCBuZXcgQ1BVIHR5cGVzIGF0IHRoZSB2ZXJ5IGVuZC4KKyAqLwordHlwZWRlZiBlbnVtIHsKKwlDUFVfTk9fR09PRCA9IC0xLCAvKio8IHVuc3VwcG9ydGVkIENQVSB0eXBlICovCisJQ1BVX1BQUk8sIC8qKjwgUGVudGl1bSBQcm8gKi8KKwlDUFVfUElJLCAvKio8IFBlbnRpdW0gSUkgc2VyaWVzICovCisJQ1BVX1BJSUksIC8qKjwgUGVudGl1bSBJSUkgc2VyaWVzICovCisJQ1BVX0FUSExPTiwgLyoqPCBBTUQgUDYgc2VyaWVzICovCisJQ1BVX1RJTUVSX0lOVCwgLyoqPCBDUFUgdXNpbmcgdGhlIHRpbWVyIGludGVycnVwdCAqLworCUNQVV9SVEMsIC8qKjwgb3RoZXIgQ1BVIHRvIHVzZSB0aGUgUlRDICovCisJQ1BVX1A0LCAgLyoqPCBQZW50aXVtIDQgLyBYZW9uIHNlcmllcyAqLworCUNQVV9JQTY0LCAvKio8IEdlbmVyaWMgSUE2NCAqLworCUNQVV9JQTY0XzEsIC8qKjwgSUE2NCBNZXJjZWQgKi8KKwlDUFVfSUE2NF8yLCAvKio8IElBNjQgTWNLaW5sZXkgKi8KKwlDUFVfSEFNTUVSLCAvKio8IEFNRCBIYW1tZXIgZmFtaWx5ICovCisJQ1BVX1A0X0hUMiwgLyoqPCBQZW50aXVtIDQgLyBYZW9uIHNlcmllcyB3aXRoIDIgaHlwZXItdGhyZWFkcyAqLworCUNQVV9BWFBfRVY0LCAvKio8IEFscGhhIEVWNCBmYW1pbHkgKi8KKwlDUFVfQVhQX0VWNSwgLyoqPCBBbHBoYSBFVjUgZmFtaWx5ICovCisJQ1BVX0FYUF9QQ0E1NiwgLyoqPCBBbHBoYSBQQ0E1NiBmYW1pbHkgKi8KKwlDUFVfQVhQX0VWNiwgLyoqPCBBbHBoYSBFVjYgZmFtaWx5ICovCisJQ1BVX0FYUF9FVjY3LCAvKio8IEFscGhhIEVWNjcgZmFtaWx5ICovCisJQ1BVX1A2X01PQklMRSwgLyoqPCBQZW50aXVtIE0gc2VyaWVzICovCisJQ1BVX0FSTV9YU0NBTEUxLCAvKio8IEFSTSBYU2NhbGUgMSAqLworCUNQVV9BUk1fWFNDQUxFMiwgLyoqPCBBUk0gWFNjYWxlIDIgKi8KKwlDUFVfUFBDNjRfUE9XRVI0LCAvKio8IHBwYzY0IFBPV0VSNCBmYW1pbHkgKi8KKwlDUFVfUFBDNjRfUE9XRVI1LCAvKio8IHBwYzY0IFBPV0VSNSBmYW1pbHkgKi8KKwlDUFVfUFBDNjRfUE9XRVI1cCwgLyoqPCBwcGM2NCBQb3dlcjUrIGZhbWlseSAqLworCUNQVV9QUEM2NF85NzAsIC8qKjwgcHBjNjQgOTcwIGZhbWlseSAqLworCUNQVV9NSVBTXzIwSywgLyoqPCBNSVBTIDIwSyAqLworCUNQVV9NSVBTXzI0SywgLyoqPCBNSVBTIDI0SyAqLworCUNQVV9NSVBTXzI1SywgLyoqPCBNSVBTIDI1SyAqLworCUNQVV9NSVBTXzM0SywgLyoqPCBNSVBTIDM0SyAqLworCUNQVV9NSVBTXzVLLCAvKio8IE1JUFMgNUsgKi8KKwlDUFVfTUlQU19SMTAwMDAsIC8qKjwgTUlQUyBSMTAwMDAgKi8KKwlDUFVfTUlQU19SMTIwMDAsIC8qKjwgTUlQUyBSMTIwMDAgKi8KKwlDUFVfTUlQU19STTcwMDAsIC8qKjwgUUVEICBSTTcwMDAgKi8KKwlDUFVfTUlQU19STTkwMDAsIC8qKjwgUE1DLVNpZXJyYSBSTTkwMDAgKi8KKwlDUFVfTUlQU19TQjEsIC8qKjwgQnJvYWRjb20gU0IxICovCisJQ1BVX01JUFNfVlI1NDMyLCAvKio8IE5FQyBWUjU0MzIgKi8KKwlDUFVfTUlQU19WUjU1MDAsIC8qKjwgTUlQUyBWUjU1MDAsIFZSNTUzMiBhbmQgVlI3NzAxICovCisJQ1BVX1BQQ19FNTAwLAkvKio8IGU1MDAgKi8KKwlDUFVfUFBDX0U1MDBfMiwJLyoqPCBlNTAwdjIgKi8KKwlDUFVfQ09SRSwgLyoqPCBDb3JlIFNvbG8gLyBEdW8gc2VyaWVzICovCisJQ1BVX1BQQ183NDUwLCAvKio8IFBvd2VyUEMgRzQgKi8KKwlDUFVfQ09SRV8yLCAvKio8IEludGVsIENvcmUgMiAqLworCUNQVV9QUEM2NF9QT1dFUjYsIC8qKjwgcHBjNjQgUE9XRVI2IGZhbWlseSAqLworCUNQVV9QUEM2NF85NzBNUCwgLyoqPCBwcGM2NCA5NzBNUCAqLworCUNQVV9QUEM2NF9DRUxMLCAvKio8IHBwYzY0IENlbGwgQnJvYWRiYW5kIEVuZ2luZSovCisJQ1BVX0ZBTUlMWTEwLCAvKio8IEFNRCBmYW1pbHkgMTAgKi8KKyAJQ1BVX1BQQzY0X1BBNlQsIC8qKjwgcHBjNjQgUEE2VCAqLworCUNQVV9BUk1fTVBDT1JFLCAvKio8IEFSTSBNUENvcmUgKi8KKwlDUFVfQVJNX1Y2LCAvKio8IEFSTSBWNiAqLworCUNQVV9QUEM2NF9QT1dFUjVwcCwgIC8qKjwgcHBjNjQgUG93ZXI1KysgZmFtaWx5ICovCisJQ1BVX1BQQ19FMzAwLCAvKio8IGUzMDAgKi8KKwlDUFVfQVZSMzIsIC8qKjwgQVZSMzIgKi8KKwlDUFVfQVJNX1Y3LCAvKio8IEFSTSBDb3J0ZXgtQTggKi8KKyAJQ1BVX0FSQ0hfUEVSRk1PTiwgLyoqPCBJbnRlbCBhcmNoaXRlY3R1cmFsIHBlcmZtb24gKi8KKwlDUFVfRkFNSUxZMTFILCAvKio8IEFNRCBmYW1pbHkgMTFoICovCisJQ1BVX1BQQzY0X1BPV0VSNywgLyoqPCBwcGM2NCBQT1dFUjcgZmFtaWx5ICovCisJQ1BVX1BQQzY0X0lCTV9DT01QQVRfVjEsIC8qKjwgSUJNIFBQQzY0IHByb2Nlc3NvciBjb21wYXQgbW9kZSB2ZXJzaW9uIDEgKi8KKyAgIAlDUFVfQ09SRV9JNywgLyogSW50ZWwgQ29yZSBpNywgTmVoYWxlbSAqLworICAgCUNQVV9BVE9NLCAvKiBGaXJzdCBnZW5lcmF0aW9uIEludGVsIEF0b20gKi8KKwlDUFVfTUlQU19MT09OR1NPTjIsIC8qIDwgbG9vbmdzb24yIGZhbWlseSAqLworCUNQVV9ORUhBTEVNLCAvKiBJbnRlbCBOZWhhbGVtIG1pY3JvYXJjaGl0ZWN0dXJlICovCisJQ1BVX0FSTV9WN19DQTksIC8qKjwgQVJNIENvcnRleC1BOSAqLworCUNQVV9NSVBTXzc0SywgLyoqPCBNSVBTIDc0SyAqLworCUNQVV9NSVBTXzEwMDRLLCAvKio8IE1JUFMgMTAwNEsgKi8KKwlDUFVfRkFNSUxZMTJILCAvKio8IEFNRCBmYW1pbHkgMTJoICovCisJQ1BVX0ZBTUlMWTE0SCwgLyoqPCBBTUQgZmFtaWx5IDE0aCAqLworCUNQVV9GQU1JTFkxNUgsIC8qKjwgQU1EIGZhbWlseSAxNWggKi8KKwlDUFVfV0VTVE1FUkUsIC8qIEludGVsIFdlc3RtZXJlIG1pY3JvYXJjaGl0ZWN0dXJlICovCisJQ1BVX0FSTV9TQ09SUElPTiwgLyoqPCBBUk0gU0NPUlBJT04gKi8KKwlDUFVfQVJNX1NDT1JQSU9OTVAsIC8qKjwgQVJNIFNDT1JQSU9OTVAgKi8KKwlDUFVfU0FORFlCUklER0UsIC8qIEludGVsIFNhbmR5LUJyaWRnZSBtaWNyb2FyY2hpdGVjdHVyZSAqLworCU1BWF9DUFVfVFlQRQorfSBvcF9jcHU7CisKKy8qKgorICogdGhlIENQVSBsb3dlc3QgY29tbW9uIGRlbm9taW5hdG9yCisgKgorICogcmV0dXJucyAxIGlmIHRoZXJlIGFyZSB2YXJpYXRpb25zIGZvciB0aGUgYmFzZSBjcHUgdHlwZTsKKyAqLworaW50IG9wX2NwdV92YXJpYXRpb25zKG9wX2NwdSBjcHVfdHlwZSk7CisKKy8qKgorICogZ2V0IHRoZSBDUFUgbG93ZXN0IGNvbW1vbiBkZW5vbWluYXRvcgorICoKKyAqIHJldHVybnMgY3B1X3R5cGUgaWYgY3B1X3R5cGUgZG9lcyBub3QgaGF2ZSBhIGxvd2VzdCBjb21tb24gZGVub21pbmF0b3IuCisgKi8KK29wX2NwdSBvcF9jcHVfYmFzZV90eXBlKG9wX2NwdSBjcHVfdHlwZSk7CisKKy8qKgorICogZ2V0IHRoZSBDUFUgdHlwZSBmcm9tIHRoZSBrZXJuZWwKKyAqCisgKiByZXR1cm5zIENQVV9OT19HT09EIGlmIHRoZSBDUFUgY291bGQgbm90IGJlIGlkZW50aWZpZWQuCisgKiBUaGlzIGZ1bmN0aW9uIGNhbiBub3Qgd29yayBpZiB0aGUgbW9kdWxlIGlzIG5vdCBsb2FkZWQKKyAqLworb3BfY3B1IG9wX2dldF9jcHVfdHlwZSh2b2lkKTsKKworLyoqCisgKiBnZXQgdGhlIGNwdSBudW1iZXIgYmFzZWQgb24gc3RyaW5nCisgKiBAcGFyYW0gY3B1X3N0cmluZyB3aXRoIGVpdGhlciB0aGUgY3B1IHR5cGUgaWRlbnRpZmllciBvciBjcHUgdHlwZSBudW1iZXIKKyAqCisgKiBUaGUgZnVuY3Rpb24gcmV0dXJucyBDUFVfTk9fR09PRCBpZiBubyBtYXRjaGluZyBzdHJpbmcgd2FzIGZvdW5kLgorICovCitvcF9jcHUgb3BfZ2V0X2NwdV9udW1iZXIoY2hhciBjb25zdCAqIGNwdV9zdHJpbmcpOworCisvKioKKyAqIGdldCB0aGUgY3B1IHN0cmluZy4KKyAqIEBwYXJhbSBjcHVfdHlwZSB0aGUgY3B1IHR5cGUgaWRlbnRpZmllcgorICoKKyAqIFRoZSBmdW5jdGlvbiBhbHdheXMgcmV0dXJuIGEgdmFsaWQgY2hhciBjb25zdCAqIHRoZSBjb3JlIGNwdSBkZW5vbWluYXRpb24KKyAqIG9yICJpbnZhbGlkIGNwdSB0eXBlIiBpZiBjcHVfdHlwZSBpcyBub3QgdmFsaWQuCisgKi8KK2NoYXIgY29uc3QgKiBvcF9nZXRfY3B1X3R5cGVfc3RyKG9wX2NwdSBjcHVfdHlwZSk7CisKKy8qKgorICogb3BfZ2V0X2NwdV9uYW1lIC0gZ2V0IHRoZSBjcHUgbmFtZQorICogQHBhcmFtIGNwdV90eXBlICB0aGUgY3B1IGlkZW50aWZpZXIgbmFtZQorICoKKyAqIFRoZSBmdW5jdGlvbiBhbHdheXMgcmV0dXJuIGEgdmFsaWQgY2hhciBjb25zdCAqCisgKiBSZXR1cm4gdGhlIE9Qcm9maWxlIENQVSBuYW1lLCBlLmcuICJpMzg2L3BpaSIKKyAqLworY2hhciBjb25zdCAqIG9wX2dldF9jcHVfbmFtZShvcF9jcHUgY3B1X3R5cGUpOworCisvKioKKyAqIGNvbXB1dGUgdGhlIG51bWJlciBvZiBjb3VudGVycyBhdmFpbGFibGUKKyAqIEBwYXJhbSBjcHVfdHlwZSBudW1lcmljIHByb2Nlc3NvciB0eXBlCisgKgorICogcmV0dXJucyAwIGlmIHRoZSBDUFUgY291bGQgbm90IGJlIGlkZW50aWZpZWQKKyAqLworaW50IG9wX2dldF9ucl9jb3VudGVycyhvcF9jcHUgY3B1X3R5cGUpOworCit0eXBlZGVmIGVudW0geworCU9QX0lOVEVSRkFDRV9OT19HT09EID0gLTEsCisJT1BfSU5URVJGQUNFXzI0LAorCU9QX0lOVEVSRkFDRV8yNgorfSBvcF9pbnRlcmZhY2U7CisKKy8qKgorICogZ2V0IHRoZSBJTlRFUkZBQ0UgdXNlZCB0byBjb21tdW5pY2F0ZSBiZXR3ZWVuIGRhZW1vbiBhbmQgdGhlIGtlcm5lbAorICoKKyAqIHJldHVybnMgT1BfSU5URVJGQUNFX05PX0dPT0QgaWYgdGhlIElOVEVSRkFDRSBjb3VsZCBub3QgYmUgaWRlbnRpZmllZC4KKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBpZGVudGlmeSB0aGUgaW50ZXJmYWNlIGFzIE9QX0lOVEVSRkFDRV9OT19HT09EIGlmCisgKiB0aGUgbW9kdWxlIGlzIG5vdCBsb2FkZWQuCisgKi8KK29wX2ludGVyZmFjZSBvcF9nZXRfaW50ZXJmYWNlKHZvaWQpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogT1BfQ1BVX1RZUEVfSCAqLwpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvbGlib3Avb3BfZXZlbnRzLmMgYi9vcHJvZmlsZS0wLjkuNy9saWJvcC9vcF9ldmVudHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNGQ1NGY5Ci0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvbGlib3Avb3BfZXZlbnRzLmMKQEAgLTAsMCArMSwxMjU4IEBACisvKioKKyAqIEBmaWxlIG9wX2V2ZW50cy5jCisgKiBEZXRhaWxzIG9mIFBNQyBwcm9maWxpbmcgZXZlbnRzCisgKgorICogWW91IGNhbiBoYXZlIHNpbGxpbmVzcyBoZXJlLgorICoKKyAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDIgT1Byb2ZpbGUgYXV0aG9ycworICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKKyAqCisgKiBAYXV0aG9yIEpvaG4gTGV2b24KKyAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQorICovCisKKyNpbmNsdWRlICJvcF9ldmVudHMuaCIKKyNpbmNsdWRlICJvcF9saWJpYmVydHkuaCIKKyNpbmNsdWRlICJvcF9maWxlaW8uaCIKKyNpbmNsdWRlICJvcF9zdHJpbmcuaCIKKyNpbmNsdWRlICJvcF9jcHVmcmVxLmgiCisjaW5jbHVkZSAib3BfaHdfc3BlY2lmaWMuaCIKKyNpbmNsdWRlICJvcF9wYXJzZV9ldmVudC5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorCitzdGF0aWMgTElTVF9IRUFEKGV2ZW50c19saXN0KTsKK3N0YXRpYyBMSVNUX0hFQUQodW1fbGlzdCk7CisKK3N0YXRpYyBjaGFyIGNvbnN0ICogZmlsZW5hbWU7CitzdGF0aWMgdW5zaWduZWQgaW50IGxpbmVfbnI7CisKK3N0YXRpYyB2b2lkIGRlbGV0ZV9ldmVudChzdHJ1Y3Qgb3BfZXZlbnQgKiBldmVudCk7CitzdGF0aWMgdm9pZCByZWFkX2V2ZW50cyhjaGFyIGNvbnN0ICogZmlsZSk7CitzdGF0aWMgdm9pZCByZWFkX3VuaXRfbWFza3MoY2hhciBjb25zdCAqIGZpbGUpOworc3RhdGljIHZvaWQgZnJlZV91bml0X21hc2soc3RydWN0IG9wX3VuaXRfbWFzayAqIHVtKTsKKworc3RhdGljIGNoYXIgKmJ1aWxkX2ZuKGNvbnN0IGNoYXIgKmNwdV9uYW1lLCBjb25zdCBjaGFyICpmbikKK3sKKwljaGFyICpzOworCXN0YXRpYyBjb25zdCBjaGFyICpkaXI7CisJaWYgKGRpciA9PSBOVUxMKQorCQlkaXIgPSBnZXRlbnYoIk9QUk9GSUxFX0VWRU5UU19ESVIiKTsKKwlpZiAoZGlyID09IE5VTEwpCisJCWRpciA9IE9QX0RBVEFESVI7CisJcyA9IHhtYWxsb2Moc3RybGVuKGRpcikgKyBzdHJsZW4oY3B1X25hbWUpICsgc3RybGVuKGZuKSArIDUpOworCXNwcmludGYocywgIiVzLyVzLyVzIiwgZGlyLCBjcHVfbmFtZSwgZm4pOworCXJldHVybiBzOworfQorCitzdGF0aWMgdm9pZCBwYXJzZV9lcnJvcihjaGFyIGNvbnN0ICogY29udGV4dCkKK3sKKwlmcHJpbnRmKHN0ZGVyciwgIm9wcm9maWxlOiBwYXJzZSBlcnJvciBpbiAlcywgbGluZSAldVxuIiwKKwkJZmlsZW5hbWUsIGxpbmVfbnIpOworCWZwcmludGYoc3RkZXJyLCAiJXNcbiIsIGNvbnRleHQpOworCWV4aXQoRVhJVF9GQUlMVVJFKTsKK30KKworCitzdGF0aWMgaW50IHBhcnNlX2ludChjaGFyIGNvbnN0ICogc3RyKQoreworCWludCB2YWx1ZTsKKwlpZiAoc3NjYW5mKHN0ciwgIiVkIiwgJnZhbHVlKSAhPSAxKQorCQlwYXJzZV9lcnJvcigiZXhwZWN0ZWQgZGVjaW1hbCB2YWx1ZSIpOworCisJcmV0dXJuIHZhbHVlOworfQorCisKK3N0YXRpYyBpbnQgcGFyc2VfaGV4KGNoYXIgY29uc3QgKiBzdHIpCit7CisJaW50IHZhbHVlOworCS8qIDB4LzBYIHRvIGZvcmNlIHRoZSB1c2Ugb2YgaGV4YSBub3RhdGlvbiBmb3IgZmllbGQgaW50ZW5kZWQgdG8KKwkgICBiZSBpbiBoZXhhZGVjaW1hbCAqLworCWlmIChzc2NhbmYoc3RyLCAiMHgleCIsICZ2YWx1ZSkgIT0gMSAmJgorCSAgICBzc2NhbmYoc3RyLCAiMFgleCIsICZ2YWx1ZSkgIT0gMSkKKwkJcGFyc2VfZXJyb3IoImV4cGVjdGVkIGhleGFkZWNpbWFsIHZhbHVlIik7CisKKwlyZXR1cm4gdmFsdWU7Cit9CisKKworc3RhdGljIHU2NCBwYXJzZV9sb25nX2hleChjaGFyIGNvbnN0ICogc3RyKQoreworCXU2NCB2YWx1ZTsKKwlpZiAoc3NjYW5mKHN0ciwgIiVMeCIsICZ2YWx1ZSkgIT0gMSkKKwkJcGFyc2VfZXJyb3IoImV4cGVjdGVkIGxvbmcgaGV4YWRlY2ltYWwgdmFsdWUiKTsKKworCWZmbHVzaChzdGRlcnIpOworCXJldHVybiB2YWx1ZTsKK30KKworc3RhdGljIHZvaWQgaW5jbHVkZV91bShjb25zdCBjaGFyICpzdGFydCwgY29uc3QgY2hhciAqZW5kKQoreworCWNoYXIgKnM7CisJY2hhciBjcHVbZW5kIC0gc3RhcnQgKyAxXTsKKwlpbnQgb2xkX2xpbmVfbnI7CisJY29uc3QgY2hhciAqb2xkX2ZpbGVuYW1lOworCisJc3RybmNweShjcHUsIHN0YXJ0LCBlbmQgLSBzdGFydCk7CisJY3B1W2VuZCAtIHN0YXJ0XSA9IDA7CisJcyA9IGJ1aWxkX2ZuKGNwdSwgInVuaXRfbWFza3MiKTsKKwlvbGRfbGluZV9uciA9IGxpbmVfbnI7CisJb2xkX2ZpbGVuYW1lID0gZmlsZW5hbWU7CisJcmVhZF91bml0X21hc2tzKHMpOworCWxpbmVfbnIgPSBvbGRfbGluZV9ucjsKKwlmaWxlbmFtZSA9IG9sZF9maWxlbmFtZTsKKwlmcmVlKHMpOworfQorCisvKiBleHRyYTpjbWFzaz0xMixpbnYsZWRnZSAqLwordW5zaWduZWQgcGFyc2VfZXh0cmEoY29uc3QgY2hhciAqcykKK3sKKwl1bnNpZ25lZCB2LCB3OworCWludCBvOworCisJdiA9IDA7CisJd2hpbGUgKCpzKSB7CisJCWlmIChpc3NwYWNlKCpzKSkKKwkJCWJyZWFrOworCQlpZiAoc3RyaXNwcmVmaXgocywgImVkZ2UiKSkgeworCQkJdiB8PSBFWFRSQV9FREdFOworCQkJcyArPSA0OworCQl9IGVsc2UgaWYgKHN0cmlzcHJlZml4KHMsICJpbnYiKSkgeworCQkJdiB8PSBFWFRSQV9JTlY7CisJCQlzICs9IDM7CisJCX0gZWxzZSBpZiAoc3NjYW5mKHMsICJjbWFzaz0leCVuIiwgJncsICZvKSA+PSAxKSB7CisJCQl2IHw9ICh3ICYgRVhUUkFfQ01BU0tfTUFTSykgPDwgRVhUUkFfQ01BU0tfU0hJRlQ7CisJCQlzICs9IG87CisJCX0gZWxzZSB7CisJCQlwYXJzZV9lcnJvcigiSWxsZWdhbCBleHRyYSBmaWVsZCBtb2RpZmllciIpOworCQl9CisJCWlmICgqcyA9PSAnLCcpCisJCQkrK3M7CisJfQorCXJldHVybiB2OworfQorCisvKiBuYW1lOk1FU0kgdHlwZTpiaXRtYXNrIGRlZmF1bHQ6MHgwZiAqLworc3RhdGljIHZvaWQgcGFyc2VfdW0oc3RydWN0IG9wX3VuaXRfbWFzayAqIHVtLCBjaGFyIGNvbnN0ICogbGluZSkKK3sKKwlpbnQgc2Vlbl9uYW1lID0gMDsKKwlpbnQgc2Vlbl90eXBlID0gMDsKKyAgICAgICAJaW50IHNlZW5fZGVmYXVsdCA9IDA7CisJY2hhciBjb25zdCAqIHZhbHVlZW5kID0gbGluZSArIDE7CisgICAgICAgCWNoYXIgY29uc3QgKiB0YWdlbmQgPSBsaW5lICsgMTsKKwljaGFyIGNvbnN0ICogc3RhcnQgPSBsaW5lOworCisJd2hpbGUgKCp2YWx1ZWVuZCkgeworCQl2YWx1ZWVuZCA9IHNraXBfbm9ud3ModmFsdWVlbmQpOworCisJCXdoaWxlICgqdGFnZW5kICE9ICc6JyAmJiAqdGFnZW5kKQorCQkJKyt0YWdlbmQ7CisKKwkJaWYgKHZhbHVlZW5kID09IHRhZ2VuZCkKKwkJCWJyZWFrOworCisJCWlmICghKnRhZ2VuZCkKKwkJCXBhcnNlX2Vycm9yKCJwYXJzZV91bSgpIGV4cGVjdGVkIDp2YWx1ZSIpOworCisJCSsrdGFnZW5kOworCisJCWlmIChzdHJpc3ByZWZpeChzdGFydCwgImluY2x1ZGUiKSkgeworCQkJaWYgKHNlZW5fbmFtZSArIHNlZW5fdHlwZSArIHNlZW5fZGVmYXVsdCA+IDApCisJCQkJcGFyc2VfZXJyb3IoImluY2x1ZGUgbXVzdCBiZSBvbiBpdHMgb3duIik7CisJCQlmcmVlX3VuaXRfbWFzayh1bSk7CisJCQlpbmNsdWRlX3VtKHRhZ2VuZCwgdmFsdWVlbmQpOworCQkJcmV0dXJuOworCQl9CisKKwkJaWYgKHN0cmlzcHJlZml4KHN0YXJ0LCAibmFtZSIpKSB7CisJCQlpZiAoc2Vlbl9uYW1lKQorCQkJCXBhcnNlX2Vycm9yKCJkdXBsaWNhdGUgbmFtZTogdGFnIik7CisJCQlzZWVuX25hbWUgPSAxOworCQkJdW0tPm5hbWUgPSBvcF94c3RybmR1cCh0YWdlbmQsIHZhbHVlZW5kIC0gdGFnZW5kKTsKKwkJfSBlbHNlIGlmIChzdHJpc3ByZWZpeChzdGFydCwgInR5cGUiKSkgeworCQkJaWYgKHNlZW5fdHlwZSkKKwkJCQlwYXJzZV9lcnJvcigiZHVwbGljYXRlIHR5cGU6IHRhZyIpOworCQkJc2Vlbl90eXBlID0gMTsKKwkJCWlmIChzdHJpc3ByZWZpeCh0YWdlbmQsICJtYW5kYXRvcnkiKSkgeworCQkJCXVtLT51bml0X3R5cGVfbWFzayA9IHV0bV9tYW5kYXRvcnk7CisJCQl9IGVsc2UgaWYgKHN0cmlzcHJlZml4KHRhZ2VuZCwgImJpdG1hc2siKSkgeworCQkJCXVtLT51bml0X3R5cGVfbWFzayA9IHV0bV9iaXRtYXNrOworCQkJfSBlbHNlIGlmIChzdHJpc3ByZWZpeCh0YWdlbmQsICJleGNsdXNpdmUiKSkgeworCQkJCXVtLT51bml0X3R5cGVfbWFzayA9IHV0bV9leGNsdXNpdmU7CisJCQl9IGVsc2UgeworCQkJCXBhcnNlX2Vycm9yKCJpbnZhbGlkIHVuaXQgbWFzayB0eXBlIik7CisJCQl9CisJCX0gZWxzZSBpZiAoc3RyaXNwcmVmaXgoc3RhcnQsICJkZWZhdWx0IikpIHsKKwkJCWlmIChzZWVuX2RlZmF1bHQpCisJCQkJcGFyc2VfZXJyb3IoImR1cGxpY2F0ZSBkZWZhdWx0OiB0YWciKTsKKwkJCXNlZW5fZGVmYXVsdCA9IDE7CisJCQl1bS0+ZGVmYXVsdF9tYXNrID0gcGFyc2VfaGV4KHRhZ2VuZCk7CisJCX0gZWxzZSB7CisJCQlwYXJzZV9lcnJvcigiaW52YWxpZCB1bml0IG1hc2sgdGFnIik7CisJCX0KKworCQl2YWx1ZWVuZCA9IHNraXBfd3ModmFsdWVlbmQpOworCQl0YWdlbmQgPSB2YWx1ZWVuZDsKKwkJc3RhcnQgPSB2YWx1ZWVuZDsKKwl9CisKKwlpZiAoIXVtLT5uYW1lKQorCQlwYXJzZV9lcnJvcigiTWlzc2luZyBuYW1lIGZvciB1bml0IG1hc2siKTsKKwlpZiAoIXNlZW5fdHlwZSkKKwkJcGFyc2VfZXJyb3IoIk1pc3NpbmcgdHlwZSBmb3IgdW5pdCBtYXNrIik7Cit9CisKKworLyogXHQweDA4IChNKW9kaWZpZWQgY2FjaGUgc3RhdGUgKi8KKy8qIFx0MHgwOCBleHRyYTppbnYsY21hc2s9Li4uIChNKW9kaWZpZWQgY2FjaGUgc3RhdGUgKi8KK3N0YXRpYyB2b2lkIHBhcnNlX3VtX2VudHJ5KHN0cnVjdCBvcF9kZXNjcmliZWRfdW0gKiBlbnRyeSwgY2hhciBjb25zdCAqIGxpbmUpCit7CisJY2hhciBjb25zdCAqIGMgPSBsaW5lOworCisJYyA9IHNraXBfd3MoYyk7CisJZW50cnktPnZhbHVlID0gcGFyc2VfaGV4KGMpOworCWMgPSBza2lwX25vbndzKGMpOworCisJYyA9IHNraXBfd3MoYyk7CisJaWYgKHN0cmlzcHJlZml4KGMsICJleHRyYToiKSkgeworCQljICs9IDY7CisJCWVudHJ5LT5leHRyYSA9IHBhcnNlX2V4dHJhKGMpOworCQljID0gc2tpcF9ub253cyhjKTsKKwl9IGVsc2UKKwkJZW50cnktPmV4dHJhID0gMDsKKworCWlmICghKmMpCisJCXBhcnNlX2Vycm9yKCJpbnZhbGlkIHVuaXQgbWFzayBlbnRyeSIpOworCisJYyA9IHNraXBfd3MoYyk7CisKKwlpZiAoISpjKQorCQlwYXJzZV9lcnJvcigiaW52YWxpZCB1bml0IG1hc2sgZW50cnkiKTsKKworCWVudHJ5LT5kZXNjID0geHN0cmR1cChjKTsKK30KKworCitzdGF0aWMgc3RydWN0IG9wX3VuaXRfbWFzayAqIG5ld191bml0X21hc2sodm9pZCkKK3sKKwlzdHJ1Y3Qgb3BfdW5pdF9tYXNrICogdW0gPSB4bWFsbG9jKHNpemVvZihzdHJ1Y3Qgb3BfdW5pdF9tYXNrKSk7CisJbWVtc2V0KHVtLCAnXDAnLCBzaXplb2Yoc3RydWN0IG9wX3VuaXRfbWFzaykpOworCWxpc3RfYWRkX3RhaWwoJnVtLT51bV9uZXh0LCAmdW1fbGlzdCk7CisKKwlyZXR1cm4gdW07Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfdW5pdF9tYXNrKHN0cnVjdCBvcF91bml0X21hc2sgKiB1bSkKK3sKKwlsaXN0X2RlbCgmdW0tPnVtX25leHQpOworCWZyZWUodW0pOworfQorCisvKgorICogbmFtZTp6ZXJvIHR5cGU6bWFuZGF0b3J5IGRlZmF1bHQ6MHgwCisgKiBcdDB4MCBObyB1bml0IG1hc2sKKyAqLworc3RhdGljIHZvaWQgcmVhZF91bml0X21hc2tzKGNoYXIgY29uc3QgKiBmaWxlKQoreworCXN0cnVjdCBvcF91bml0X21hc2sgKiB1bSA9IE5VTEw7CisJY2hhciAqIGxpbmU7CisJRklMRSAqIGZwID0gZm9wZW4oZmlsZSwgInIiKTsKKworCWlmICghZnApIHsKKwkJZnByaW50ZihzdGRlcnIsCisJCQkib3Byb2ZpbGU6IGNvdWxkIG5vdCBvcGVuIHVuaXQgbWFzayBkZXNjcmlwdGlvbiBmaWxlICVzXG4iLCBmaWxlKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKworCWZpbGVuYW1lID0gZmlsZTsKKwlsaW5lX25yID0gMTsKKworCWxpbmUgPSBvcF9nZXRfbGluZShmcCk7CisKKwl3aGlsZSAobGluZSkgeworCQlpZiAoZW1wdHlfbGluZShsaW5lKSB8fCBjb21tZW50X2xpbmUobGluZSkpCisJCQlnb3RvIG5leHQ7CisKKwkJaWYgKGxpbmVbMF0gIT0gJ1x0JykgeworCQkJdW0gPSBuZXdfdW5pdF9tYXNrKCk7CisJCQlwYXJzZV91bSh1bSwgbGluZSk7CisJCX0gZWxzZSB7CisJCQlpZiAoIXVtKQorCQkJCXBhcnNlX2Vycm9yKCJubyB1bml0IG1hc2sgbmFtZSBsaW5lIik7CisJCQlpZiAodW0tPm51bSA+PSBNQVhfVU5JVF9NQVNLKQorCQkJCXBhcnNlX2Vycm9yKCJvcHJvZmlsZTogbWF4aW11bSB1bml0IG1hc2sgZW50cmllcyBleGNlZWRlZCIpOworCisJCQlwYXJzZV91bV9lbnRyeSgmdW0tPnVtW3VtLT5udW1dLCBsaW5lKTsKKwkJCSsrKHVtLT5udW0pOworCQl9CisKK25leHQ6CisJCWZyZWUobGluZSk7CisJCWxpbmUgPSBvcF9nZXRfbGluZShmcCk7CisJCSsrbGluZV9ucjsKKwl9CisKKwlmY2xvc2UoZnApOworfQorCisKK3N0YXRpYyB1MzIgcGFyc2VfY291bnRlcl9tYXNrKGNoYXIgY29uc3QgKiBzdHIpCit7CisJdTMyIG1hc2sgPSAwOworCWNoYXIgY29uc3QgKiBudW1zdGFydCA9IHN0cjsKKworCXdoaWxlICgqbnVtc3RhcnQpIHsKKwkJbWFzayB8PSAxIDw8IHBhcnNlX2ludChudW1zdGFydCk7CisKKwkJd2hpbGUgKCpudW1zdGFydCAmJiAqbnVtc3RhcnQgIT0gJywnKQorCQkJKytudW1zdGFydDsKKwkJLyogc2tpcCAsIHVubGVzcyB3ZSByZWFjaCBlb3MgKi8KKwkJaWYgKCpudW1zdGFydCkKKwkJCSsrbnVtc3RhcnQ7CisKKwkJbnVtc3RhcnQgPSBza2lwX3dzKG51bXN0YXJ0KTsKKwl9CisKKwlyZXR1cm4gbWFzazsKK30KKworc3RhdGljIHN0cnVjdCBvcF91bml0X21hc2sgKiB0cnlfZmluZF91bShjaGFyIGNvbnN0ICogdmFsdWUpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqIHBvczsKKworCWxpc3RfZm9yX2VhY2gocG9zLCAmdW1fbGlzdCkgeworCQlzdHJ1Y3Qgb3BfdW5pdF9tYXNrICogdW0gPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IG9wX3VuaXRfbWFzaywgdW1fbmV4dCk7CisJCWlmIChzdHJjbXAodmFsdWUsIHVtLT5uYW1lKSA9PSAwKSB7CisJCQl1bS0+dXNlZCA9IDE7CisJCQlyZXR1cm4gdW07CisJCX0KKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgb3BfdW5pdF9tYXNrICogZmluZF91bShjaGFyIGNvbnN0ICogdmFsdWUpCit7CisJc3RydWN0IG9wX3VuaXRfbWFzayAqIHVtID0gdHJ5X2ZpbmRfdW0odmFsdWUpOworCWlmICh1bSkKKwkJcmV0dXJuIHVtOworCWZwcmludGYoc3RkZXJyLCAib3Byb2ZpbGU6IGNvdWxkIG5vdCBmaW5kIHVuaXQgbWFzayAlc1xuIiwgdmFsdWUpOworCWV4aXQoRVhJVF9GQUlMVVJFKTsKK30KKworLyogdW06YSxiLGMsZCBtZXJnZSBtdWx0aXBsZSB1bml0IG1hc2tzICovCitzdGF0aWMgc3RydWN0IG9wX3VuaXRfbWFzayAqIG1lcmdlX3VtKGNoYXIgKiB2YWx1ZSkKK3sKKwlpbnQgbnVtOworCWNoYXIgKnM7CisJc3RydWN0IG9wX3VuaXRfbWFzayAqbmV3LCAqdW07CisJZW51bSB1bml0X21hc2tfdHlwZSB0eXBlID0gLTFVOworCisJdW0gPSB0cnlfZmluZF91bSh2YWx1ZSk7CisJaWYgKHVtKQorCQlyZXR1cm4gdW07CisKKwluZXcgPSBuZXdfdW5pdF9tYXNrKCk7CisJbmV3LT5uYW1lID0geHN0cmR1cCh2YWx1ZSk7CisJbmV3LT51c2VkID0gMTsKKwludW0gPSAwOworCXdoaWxlICgocyA9IHN0cnNlcCgmdmFsdWUsICIsIikpICE9IE5VTEwpIHsKKwkJdW5zaWduZWQgYzsKKwkJdW0gPSBmaW5kX3VtKHMpOworCQlpZiAodHlwZSA9PSAtMVUpCisJCQl0eXBlID0gdW0tPnVuaXRfdHlwZV9tYXNrOworCQlpZiAodW0tPnVuaXRfdHlwZV9tYXNrICE9IHR5cGUpCisJCQlwYXJzZV9lcnJvcigiY29tYmluZWQgdW5pdCBtYXNrIG11c3QgYmUgYWxsIHRoZSBzYW1lIHR5cGVzIik7CisJCWlmICh0eXBlICE9IHV0bV9iaXRtYXNrICYmIHR5cGUgIT0gdXRtX2V4Y2x1c2l2ZSkKKwkJCXBhcnNlX2Vycm9yKCJjb21iaW5lZCB1bml0IG1hc2sgbXVzdCBiZSBhbGwgYml0bWFza3Mgb3IgZXhjbHVzaXZlIik7CisJCW5ldy0+ZGVmYXVsdF9tYXNrIHw9IHVtLT5kZWZhdWx0X21hc2s7CisJCW5ldy0+bnVtICs9IHVtLT5udW07CisJCWlmIChuZXctPm51bSA+IE1BWF9VTklUX01BU0spCisJCQlwYXJzZV9lcnJvcigidG9vIG1hbnkgbWVtYmVycyBpbiBjb21iaW5lZCB1bml0IG1hc2siKTsKKwkJZm9yIChjID0gMDsgYyA8IHVtLT5udW07IGMrKywgbnVtKyspIHsKKwkJCW5ldy0+dW1bbnVtXSA9IHVtLT51bVtjXTsKKwkJCW5ldy0+dW1bbnVtXS5kZXNjID0geHN0cmR1cChuZXctPnVtW251bV0uZGVzYyk7CisJCX0KKwl9CisJaWYgKHR5cGUgPT0gLTFVKQorCQlwYXJzZV9lcnJvcigiRW1wdHkgdW5pdCBtYXNrIik7CisJbmV3LT51bml0X3R5cGVfbWFzayA9IHR5cGU7CisJcmV0dXJuIG5ldzsJCQorfQorCisvKiBwYXJzZSBlaXRoZXIgYSAidGFnOnZhbHVlIiBvciBhICI6IHRyYWlsaW5nIGRlc2NyaXB0aW9uIHN0cmluZyIgKi8KK3N0YXRpYyBpbnQgbmV4dF90b2tlbihjaGFyIGNvbnN0ICoqIGNwLCBjaGFyICoqIG5hbWUsIGNoYXIgKiogdmFsdWUpCit7CisJc2l6ZV90IHRhZ19sZW47CisJc2l6ZV90IHZhbF9sZW47CisJY2hhciBjb25zdCAqIGMgPSAqY3A7CisJY2hhciBjb25zdCAqIGVuZDsKKwljaGFyIGNvbnN0ICogY29sb247CisKKwljID0gc2tpcF93cyhjKTsKKwllbmQgPSBjb2xvbiA9IGM7CisJZW5kID0gc2tpcF9ub253cyhlbmQpOworCisJY29sb24gPSBzdHJjaHIoY29sb24sICc6Jyk7CisKKwlpZiAoIWNvbG9uKSB7CisJCWlmICgqYykKKwkJCXBhcnNlX2Vycm9yKCJuZXh0X3Rva2VuKCk6IGdhcmJhZ2UgYXQgZW5kIG9mIGxpbmUiKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKGNvbG9uID49IGVuZCkKKwkJcGFyc2VfZXJyb3IoIm5leHRfdG9rZW4oKSBleHBlY3RlZCAnOiciKTsKKworCXRhZ19sZW4gPSBjb2xvbiAtIGM7CisJdmFsX2xlbiA9IGVuZCAtIChjb2xvbiArIDEpOworCisJaWYgKCF0YWdfbGVuKSB7CisJCS8qIDogdHJhaWxpbmcgZGVzY3JpcHRpb24gKi8KKwkJZW5kID0gc2tpcF93cyhlbmQpOworCQkqbmFtZSA9IHhzdHJkdXAoImRlc2MiKTsKKwkJKnZhbHVlID0geHN0cmR1cChlbmQpOworCQllbmQgKz0gc3RybGVuKGVuZCk7CisJfSBlbHNlIHsKKwkJLyogdGFnOnZhbHVlICovCisJCSpuYW1lID0gb3BfeHN0cm5kdXAoYywgdGFnX2xlbik7CisJCSp2YWx1ZSA9IG9wX3hzdHJuZHVwKGNvbG9uICsgMSwgdmFsX2xlbik7CisJCWVuZCA9IHNraXBfd3MoZW5kKTsKKwl9CisKKwkqY3AgPSBlbmQ7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIGluY2x1ZGVfZXZlbnRzIChjaGFyICp2YWx1ZSkKK3sKKwljaGFyICogZXZlbnRfZmlsZTsKKwljb25zdCBjaGFyICpvbGRfZmlsZW5hbWU7CisJaW50IG9sZF9saW5lX25yOworCisJZXZlbnRfZmlsZSA9IGJ1aWxkX2ZuKHZhbHVlLCAiZXZlbnRzIik7CisJb2xkX2xpbmVfbnIgPSBsaW5lX25yOworCW9sZF9maWxlbmFtZSA9IGZpbGVuYW1lOworCXJlYWRfZXZlbnRzKGV2ZW50X2ZpbGUpOworCWxpbmVfbnIgPSBvbGRfbGluZV9ucjsKKwlmaWxlbmFtZSA9IG9sZF9maWxlbmFtZTsKKwlmcmVlKGV2ZW50X2ZpbGUpOworfQorCitzdGF0aWMgc3RydWN0IG9wX2V2ZW50ICogbmV3X2V2ZW50KHZvaWQpCit7CisJc3RydWN0IG9wX2V2ZW50ICogZXZlbnQgPSB4bWFsbG9jKHNpemVvZihzdHJ1Y3Qgb3BfZXZlbnQpKTsKKwltZW1zZXQoZXZlbnQsICdcMCcsIHNpemVvZihzdHJ1Y3Qgb3BfZXZlbnQpKTsKKwlsaXN0X2FkZF90YWlsKCZldmVudC0+ZXZlbnRfbmV4dCwgJmV2ZW50c19saXN0KTsKKworCXJldHVybiBldmVudDsKK30KKworc3RhdGljIHZvaWQgZnJlZV9ldmVudChzdHJ1Y3Qgb3BfZXZlbnQgKiBldmVudCkKK3sKKwlsaXN0X2RlbCgmZXZlbnQtPmV2ZW50X25leHQpOworCWZyZWUoZXZlbnQpOworfQorCisvKiBldmVudDoweDAwIGNvdW50ZXJzOjAgdW06emVybyBtaW5pbXVtOjQwOTYgbmFtZTpJU1NVRVMgOiBUb3RhbCBpc3N1ZXMgKi8KKy8qIGV2ZW50OjB4MDAgZXh0Onh4eHh4eCB1bTp6ZXJvIG1pbmltdW06NDA5NiBuYW1lOklTU1VFUyA6IFRvdGFsIGlzc3VlcyAqLworc3RhdGljIHZvaWQgcmVhZF9ldmVudHMoY2hhciBjb25zdCAqIGZpbGUpCit7CisJc3RydWN0IG9wX2V2ZW50ICogZXZlbnQgPSBOVUxMOworCWNoYXIgKiBsaW5lOworCWNoYXIgKiBuYW1lOworCWNoYXIgKiB2YWx1ZTsKKwljaGFyIGNvbnN0ICogYzsKKwlpbnQgc2Vlbl9ldmVudCwgc2Vlbl9jb3VudGVycywgc2Vlbl91bSwgc2Vlbl9taW5pbXVtLCBzZWVuX25hbWUsIHNlZW5fZXh0OworCUZJTEUgKiBmcCA9IGZvcGVuKGZpbGUsICJyIik7CisJaW50IHRhZ3M7CisKKwlpZiAoIWZwKSB7CisJCWZwcmludGYoc3RkZXJyLCAib3Byb2ZpbGU6IGNvdWxkIG5vdCBvcGVuIGV2ZW50IGRlc2NyaXB0aW9uIGZpbGUgJXNcbiIsIGZpbGUpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorCisJZmlsZW5hbWUgPSBmaWxlOworCWxpbmVfbnIgPSAxOworCisJbGluZSA9IG9wX2dldF9saW5lKGZwKTsKKworCXdoaWxlIChsaW5lKSB7CisJCWlmIChlbXB0eV9saW5lKGxpbmUpIHx8IGNvbW1lbnRfbGluZShsaW5lKSkKKwkJCWdvdG8gbmV4dDsKKworCQl0YWdzID0gMDsKKwkJc2Vlbl9uYW1lID0gMDsKKwkJc2Vlbl9ldmVudCA9IDA7CisJCXNlZW5fY291bnRlcnMgPSAwOworCQlzZWVuX2V4dCA9IDA7CisJCXNlZW5fdW0gPSAwOworCQlzZWVuX21pbmltdW0gPSAwOworCQlldmVudCA9IG5ld19ldmVudCgpOworCQlldmVudC0+ZmlsdGVyID0gLTE7CisJCWV2ZW50LT5leHQgPSBOVUxMOworCQkKKwkJYyA9IGxpbmU7CisJCXdoaWxlIChuZXh0X3Rva2VuKCZjLCAmbmFtZSwgJnZhbHVlKSkgeworCQkJaWYgKHN0cmNtcChuYW1lLCAibmFtZSIpID09IDApIHsKKwkJCQlpZiAoc2Vlbl9uYW1lKQorCQkJCQlwYXJzZV9lcnJvcigiZHVwbGljYXRlIG5hbWU6IHRhZyIpOworCQkJCXNlZW5fbmFtZSA9IDE7CisJCQkJaWYgKHN0cmNocih2YWx1ZSwgJy8nKSAhPSBOVUxMKQorCQkJCQlwYXJzZV9lcnJvcigiaW52YWxpZCBldmVudCBuYW1lIik7CisJCQkJaWYgKHN0cmNocih2YWx1ZSwgJy4nKSAhPSBOVUxMKQorCQkJCQlwYXJzZV9lcnJvcigiaW52YWxpZCBldmVudCBuYW1lIik7CisJCQkJZXZlbnQtPm5hbWUgPSB2YWx1ZTsKKwkJCX0gZWxzZSBpZiAoc3RyY21wKG5hbWUsICJldmVudCIpID09IDApIHsKKwkJCQlpZiAoc2Vlbl9ldmVudCkKKwkJCQkJcGFyc2VfZXJyb3IoImR1cGxpY2F0ZSBldmVudDogdGFnIik7CisJCQkJc2Vlbl9ldmVudCA9IDE7CisJCQkJZXZlbnQtPnZhbCA9IHBhcnNlX2hleCh2YWx1ZSk7CisJCQkJZnJlZSh2YWx1ZSk7CisJCQl9IGVsc2UgaWYgKHN0cmNtcChuYW1lLCAiY291bnRlcnMiKSA9PSAwKSB7CisJCQkJaWYgKHNlZW5fY291bnRlcnMpCisJCQkJCXBhcnNlX2Vycm9yKCJkdXBsaWNhdGUgY291bnRlcnM6IHRhZyIpOworCQkJCXNlZW5fY291bnRlcnMgPSAxOworCQkJCWlmICghc3RyY21wKHZhbHVlLCAiY3B1aWQiKSkKKwkJCQkJZXZlbnQtPmNvdW50ZXJfbWFzayA9IGFyY2hfZ2V0X2NvdW50ZXJfbWFzaygpOworCQkJCWVsc2UKKwkJCQkJZXZlbnQtPmNvdW50ZXJfbWFzayA9IHBhcnNlX2NvdW50ZXJfbWFzayh2YWx1ZSk7CisJCQkJZnJlZSh2YWx1ZSk7CisJCQl9IGVsc2UgaWYgKHN0cmNtcChuYW1lLCAiZXh0IikgPT0gMCkgeworCQkJCWlmIChzZWVuX2V4dCkKKwkJCQkJcGFyc2VfZXJyb3IoImR1cGxpY2F0ZSBleHQ6IHRhZyIpOworCQkJCXNlZW5fZXh0ID0gMTsKKwkJCQlldmVudC0+ZXh0ID0gdmFsdWU7CisJCQl9IGVsc2UgaWYgKHN0cmNtcChuYW1lLCAidW0iKSA9PSAwKSB7CisJCQkJaWYgKHNlZW5fdW0pCisJCQkJCXBhcnNlX2Vycm9yKCJkdXBsaWNhdGUgdW06IHRhZyIpOworCQkJCXNlZW5fdW0gPSAxOworCQkJCWlmIChzdHJjaHIodmFsdWUsICcsJykpCisJCQkJCWV2ZW50LT51bml0ID0gbWVyZ2VfdW0odmFsdWUpOworCQkJCWVsc2UKKwkJCQkJZXZlbnQtPnVuaXQgPSBmaW5kX3VtKHZhbHVlKTsKKwkJCQlmcmVlKHZhbHVlKTsKKwkJCX0gZWxzZSBpZiAoc3RyY21wKG5hbWUsICJtaW5pbXVtIikgPT0gMCkgeworCQkJCWlmIChzZWVuX21pbmltdW0pCisJCQkJCXBhcnNlX2Vycm9yKCJkdXBsaWNhdGUgbWluaW11bTogdGFnIik7CisJCQkJc2Vlbl9taW5pbXVtID0gMTsKKwkJCQlldmVudC0+bWluX2NvdW50ID0gcGFyc2VfaW50KHZhbHVlKTsKKwkJCQlmcmVlKHZhbHVlKTsKKwkJCX0gZWxzZSBpZiAoc3RyY21wKG5hbWUsICJkZXNjIikgPT0gMCkgeworCQkJCWV2ZW50LT5kZXNjID0gdmFsdWU7CisJCQl9IGVsc2UgaWYgKHN0cmNtcChuYW1lLCAiZmlsdGVyIikgPT0gMCkgeworCQkJCWV2ZW50LT5maWx0ZXIgPSBwYXJzZV9pbnQodmFsdWUpOworCQkJCWZyZWUodmFsdWUpOworCQkJfSBlbHNlIGlmIChzdHJjbXAobmFtZSwgImluY2x1ZGUiKSA9PSAwKSB7CisJCQkJaWYgKHRhZ3MgPiAwKQorCQkJCQlwYXJzZV9lcnJvcigidGFncyBiZWZvcmUgaW5jbHVkZToiKTsKKwkJCQlmcmVlX2V2ZW50KGV2ZW50KTsKKwkJCQlpbmNsdWRlX2V2ZW50cyh2YWx1ZSk7CisJCQkJZnJlZSh2YWx1ZSk7CisJCQkJYyA9IHNraXBfd3MoYyk7CisJCQkJaWYgKCpjICE9ICdcMCcgJiYgKmMgIT0gJyMnKQorCQkJCQlwYXJzZV9lcnJvcigibm9uIHdoaXRlc3BhY2UgYWZ0ZXIgaW5jbHVkZToiKTsKKwkJCX0gZWxzZSB7CisJCQkJcGFyc2VfZXJyb3IoInVua25vd24gdGFnIik7CisJCQl9CisJCQl0YWdzKys7CisKKwkJCWZyZWUobmFtZSk7CisJCX0KK25leHQ6CisJCWZyZWUobGluZSk7CisJCWxpbmUgPSBvcF9nZXRfbGluZShmcCk7CisJCSsrbGluZV9ucjsKKwl9CisKKwlmY2xvc2UoZnApOworfQorCisKKy8qIHVzZWZ1bGwgZm9yIG1ha2UgY2hlY2sgKi8KK3N0YXRpYyBpbnQgY2hlY2tfdW5pdF9tYXNrKHN0cnVjdCBvcF91bml0X21hc2sgY29uc3QgKiB1bSwKKwljaGFyIGNvbnN0ICogY3B1X25hbWUpCit7CisJdTMyIGk7CisJaW50IGVyciA9IDA7CisKKwlpZiAoIXVtLT51c2VkKSB7CisJCWZwcmludGYoc3RkZXJyLCAidW0gJXMgaXMgbm90IHVzZWRcbiIsIHVtLT5uYW1lKTsKKwkJZXJyID0gRVhJVF9GQUlMVVJFOworCX0KKworCWlmICh1bS0+dW5pdF90eXBlX21hc2sgPT0gdXRtX21hbmRhdG9yeSAmJiB1bS0+bnVtICE9IDEpIHsKKwkJZnByaW50ZihzdGRlcnIsICJtYW5kYXRvcnkgdW0gJXMgZG9lc24ndCBjb250YWluIGV4YWN0bHkgb25lICIKKwkJCSJlbnRyeSAoJXMpXG4iLCB1bS0+bmFtZSwgY3B1X25hbWUpOworCQllcnIgPSBFWElUX0ZBSUxVUkU7CisJfSBlbHNlIGlmICh1bS0+dW5pdF90eXBlX21hc2sgPT0gdXRtX2JpdG1hc2spIHsKKwkJdTMyIGRlZmF1bHRfbWFzayA9IHVtLT5kZWZhdWx0X21hc2s7CisJCWZvciAoaSA9IDA7IGkgPCB1bS0+bnVtOyArK2kpCisJCQlkZWZhdWx0X21hc2sgJj0gfnVtLT51bVtpXS52YWx1ZTsKKworCQlpZiAoZGVmYXVsdF9tYXNrKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgInVtICVzIGRlZmF1bHQgbWFzayBpcyBub3QgdmFsaWQgIgorCQkJCSIoJXMpXG4iLCB1bS0+bmFtZSwgY3B1X25hbWUpOworCQkJZXJyID0gRVhJVF9GQUlMVVJFOworCQl9CisJfSBlbHNlIHsKKwkJZm9yIChpID0gMDsgaSA8IHVtLT5udW07ICsraSkgeworCQkJaWYgKHVtLT5kZWZhdWx0X21hc2sgPT0gdW0tPnVtW2ldLnZhbHVlKQorCQkJCWJyZWFrOworCQl9CisKKwkJaWYgKGkgPT0gdW0tPm51bSkgeworCQkJZnByaW50ZihzdGRlcnIsICJleGNsdXNpdmUgdW0gJXMgZGVmYXVsdCB2YWx1ZSBpcyBub3QgIgorCQkJCSJ2YWxpZCAoJXMpXG4iLCB1bS0+bmFtZSwgY3B1X25hbWUpOworCQkJZXJyID0gRVhJVF9GQUlMVVJFOworCQl9CisJfQorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIGFyY2hfZmlsdGVyX2V2ZW50cyhvcF9jcHUgY3B1X3R5cGUpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqIHBvcywgKiBwb3MyOworCXVuc2lnbmVkIGZpbHRlciA9IGFyY2hfZ2V0X2ZpbHRlcihjcHVfdHlwZSk7CisJaWYgKCFmaWx0ZXIpCisJCXJldHVybjsKKwlsaXN0X2Zvcl9lYWNoX3NhZmUgKHBvcywgcG9zMiwgJmV2ZW50c19saXN0KSB7CisJCXN0cnVjdCBvcF9ldmVudCAqIGV2ZW50ID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCBvcF9ldmVudCwgZXZlbnRfbmV4dCk7CisJCWlmIChldmVudC0+ZmlsdGVyID49IDAgJiYgKCgxVSA8PCBldmVudC0+ZmlsdGVyKSAmIGZpbHRlcikpCisJCQlkZWxldGVfZXZlbnQoZXZlbnQpOworCX0KK30KKworc3RhdGljIHZvaWQgbG9hZF9ldmVudHNfbmFtZShjb25zdCBjaGFyICpjcHVfbmFtZSkKK3sKKwljaGFyICogZXZlbnRfZmlsZTsKKwljaGFyICogdW1fZmlsZTsKKworCWV2ZW50X2ZpbGUgPSBidWlsZF9mbihjcHVfbmFtZSwgImV2ZW50cyIpOworCXVtX2ZpbGUgPSBidWlsZF9mbihjcHVfbmFtZSwgInVuaXRfbWFza3MiKTsKKworCXJlYWRfdW5pdF9tYXNrcyh1bV9maWxlKTsKKwlyZWFkX2V2ZW50cyhldmVudF9maWxlKTsKKwkKKwlmcmVlKHVtX2ZpbGUpOworCWZyZWUoZXZlbnRfZmlsZSk7Cit9CisKK3N0YXRpYyB2b2lkIGxvYWRfZXZlbnRzKG9wX2NwdSBjcHVfdHlwZSkKK3sKKwljb25zdCBjaGFyICogY3B1X25hbWUgPSBvcF9nZXRfY3B1X25hbWUoY3B1X3R5cGUpOworCXN0cnVjdCBsaXN0X2hlYWQgKiBwb3M7CisJaW50IGVyciA9IDA7CisKKwlpZiAoIWxpc3RfZW1wdHkoJmV2ZW50c19saXN0KSkKKwkJcmV0dXJuOworCisJbG9hZF9ldmVudHNfbmFtZShjcHVfbmFtZSk7CisKKwlhcmNoX2ZpbHRlcl9ldmVudHMoY3B1X3R5cGUpOworCisJLyogc2FuaXR5IGNoZWNrOiBhbGwgdW5pdCBtYXNrIG11c3QgYmUgdXNlZCAqLworCWxpc3RfZm9yX2VhY2gocG9zLCAmdW1fbGlzdCkgeworCQlzdHJ1Y3Qgb3BfdW5pdF9tYXNrICogdW0gPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IG9wX3VuaXRfbWFzaywgdW1fbmV4dCk7CisJCWVyciB8PSBjaGVja191bml0X21hc2sodW0sIGNwdV9uYW1lKTsKKwl9CisJaWYgKGVycikKKwkJZXhpdChlcnIpOworfQorCitzdHJ1Y3QgbGlzdF9oZWFkICogb3BfZXZlbnRzKG9wX2NwdSBjcHVfdHlwZSkKK3sKKwlsb2FkX2V2ZW50cyhjcHVfdHlwZSk7CisJYXJjaF9maWx0ZXJfZXZlbnRzKGNwdV90eXBlKTsKKwlyZXR1cm4gJmV2ZW50c19saXN0OworfQorCisKK3N0YXRpYyB2b2lkIGRlbGV0ZV91bml0X21hc2soc3RydWN0IG9wX3VuaXRfbWFzayAqIHVuaXQpCit7CisJdTMyIGN1cjsKKwlmb3IgKGN1ciA9IDAgOyBjdXIgPCB1bml0LT5udW0gOyArK2N1cikgeworCQlpZiAodW5pdC0+dW1bY3VyXS5kZXNjKQorCQkJZnJlZSh1bml0LT51bVtjdXJdLmRlc2MpOworCX0KKworCWlmICh1bml0LT5uYW1lKQorCQlmcmVlKHVuaXQtPm5hbWUpOworCisJbGlzdF9kZWwoJnVuaXQtPnVtX25leHQpOworCWZyZWUodW5pdCk7Cit9CisKKworc3RhdGljIHZvaWQgZGVsZXRlX2V2ZW50KHN0cnVjdCBvcF9ldmVudCAqIGV2ZW50KQoreworCWlmIChldmVudC0+bmFtZSkKKwkJZnJlZShldmVudC0+bmFtZSk7CisJaWYgKGV2ZW50LT5kZXNjKQorCQlmcmVlKGV2ZW50LT5kZXNjKTsKKworCWxpc3RfZGVsKCZldmVudC0+ZXZlbnRfbmV4dCk7CisJZnJlZShldmVudCk7Cit9CisKKwordm9pZCBvcF9mcmVlX2V2ZW50cyh2b2lkKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKiBwb3MsICogcG9zMjsKKwlsaXN0X2Zvcl9lYWNoX3NhZmUocG9zLCBwb3MyLCAmZXZlbnRzX2xpc3QpIHsKKwkJc3RydWN0IG9wX2V2ZW50ICogZXZlbnQgPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IG9wX2V2ZW50LCBldmVudF9uZXh0KTsKKwkJZGVsZXRlX2V2ZW50KGV2ZW50KTsKKwl9CisKKwlsaXN0X2Zvcl9lYWNoX3NhZmUocG9zLCBwb3MyLCAmdW1fbGlzdCkgeworCQlzdHJ1Y3Qgb3BfdW5pdF9tYXNrICogdW5pdCA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3Qgb3BfdW5pdF9tYXNrLCB1bV9uZXh0KTsKKwkJZGVsZXRlX3VuaXRfbWFzayh1bml0KTsKKwl9Cit9CisKKy8qIFRoZXJlIGNhbiBiZSBhY3R1YWxseSBtdWx0aXBsZSBldmVudHMgaGVyZSwgc28gdGhpcyBpcyBub3QgcXVpdGUgY29ycmVjdCAqLworc3RhdGljIHN0cnVjdCBvcF9ldmVudCAqIGZpbmRfZXZlbnRfYW55KHUzMiBucikKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICogcG9zOworCisJbGlzdF9mb3JfZWFjaChwb3MsICZldmVudHNfbGlzdCkgeworCQlzdHJ1Y3Qgb3BfZXZlbnQgKiBldmVudCA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3Qgb3BfZXZlbnQsIGV2ZW50X25leHQpOworCQlpZiAoZXZlbnQtPnZhbCA9PSBucikKKwkJCXJldHVybiBldmVudDsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHN0cnVjdCBvcF9ldmVudCAqIGZpbmRfZXZlbnRfdW0odTMyIG5yLCB1MzIgdW0pCit7CisJc3RydWN0IGxpc3RfaGVhZCAqIHBvczsKKwl1bnNpZ25lZCBpbnQgaTsKKworCWxpc3RfZm9yX2VhY2gocG9zLCAmZXZlbnRzX2xpc3QpIHsKKwkJc3RydWN0IG9wX2V2ZW50ICogZXZlbnQgPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IG9wX2V2ZW50LCBldmVudF9uZXh0KTsKKwkJaWYgKGV2ZW50LT52YWwgPT0gbnIpIHsKKwkJCWZvciAoaSA9IDA7IGkgPCBldmVudC0+dW5pdC0+bnVtOyBpKyspIHsKKwkJCQlpZiAoZXZlbnQtPnVuaXQtPnVtW2ldLnZhbHVlID09IHVtKQorCQkJCQlyZXR1cm4gZXZlbnQ7CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIEZJTEUgKiBvcGVuX2V2ZW50X21hcHBpbmdfZmlsZShjaGFyIGNvbnN0ICogY3B1X25hbWUpCit7CisJY2hhciAqIGV2X21hcF9maWxlOworCWNoYXIgKiBkaXI7CisJZGlyID0gZ2V0ZW52KCJPUFJPRklMRV9FVkVOVFNfRElSIik7CisJaWYgKGRpciA9PSBOVUxMKQorCQlkaXIgPSBPUF9EQVRBRElSOworCisJZXZfbWFwX2ZpbGUgPSB4bWFsbG9jKHN0cmxlbihkaXIpICsgc3RybGVuKCIvIikgKyBzdHJsZW4oY3B1X25hbWUpICsKKwkgICAgICAgICAgICAgICAgICAgIHN0cmxlbigiLyIpICsgKyBzdHJsZW4oImV2ZW50X21hcHBpbmdzIikgKyAxKTsKKwlzdHJjcHkoZXZfbWFwX2ZpbGUsIGRpcik7CisJc3RyY2F0KGV2X21hcF9maWxlLCAiLyIpOworCisJc3RyY2F0KGV2X21hcF9maWxlLCBjcHVfbmFtZSk7CisJc3RyY2F0KGV2X21hcF9maWxlLCAiLyIpOworCXN0cmNhdChldl9tYXBfZmlsZSwgImV2ZW50X21hcHBpbmdzIik7CisJZmlsZW5hbWUgPSBldl9tYXBfZmlsZTsKKwlyZXR1cm4gKGZvcGVuKGV2X21hcF9maWxlLCAiciIpKTsKK30KKworCisvKioKKyAqICBUaGlzIGZ1bmN0aW9uIGlzIFBQQzY0LXNwZWNpZmljLgorICovCitzdGF0aWMgY2hhciBjb25zdCAqIGdldF9tYXBwaW5nKHUzMiBuciwgRklMRSAqIGZwKQoreworCWNoYXIgKiBsaW5lOworCWNoYXIgKiBuYW1lOworCWNoYXIgKiB2YWx1ZTsKKwljaGFyIGNvbnN0ICogYzsKKwljaGFyICogbWFwID0gTlVMTDsKKwlpbnQgc2Vlbl9ldmVudCA9IDAsIHNlZW5fbW1jcjAgPSAwLCBzZWVuX21tY3IxID0gMCwgc2Vlbl9tbWNyYSA9IDA7CisJdTMyIG1tY3IwID0gMDsKKwl1NjQgbW1jcjEgPSAwOworCXUzMiBtbWNyYSA9IDA7CisJaW50IGV2ZW50X2ZvdW5kID0gMDsKKworCWxpbmVfbnIgPSAxOworCWxpbmUgPSBvcF9nZXRfbGluZShmcCk7CisJd2hpbGUgKGxpbmUgJiYgIWV2ZW50X2ZvdW5kKSB7CisJCWlmIChlbXB0eV9saW5lKGxpbmUpIHx8IGNvbW1lbnRfbGluZShsaW5lKSkKKwkJCWdvdG8gbmV4dDsKKworCQlzZWVuX2V2ZW50ID0gMDsKKwkJc2Vlbl9tbWNyMCA9IDA7CisJCXNlZW5fbW1jcjEgPSAwOworCQlzZWVuX21tY3JhID0gMDsKKwkJbW1jcjAgPSAwOworCQltbWNyMSA9IDA7CisJCW1tY3JhID0gMDsKKworCQljID0gbGluZTsKKwkJd2hpbGUgKG5leHRfdG9rZW4oJmMsICZuYW1lLCAmdmFsdWUpKSB7CisJCQlpZiAoc3RyY21wKG5hbWUsICJldmVudCIpID09IDApIHsKKwkJCQl1MzIgZXZ0OworCQkJCWlmIChzZWVuX2V2ZW50KQorCQkJCQlwYXJzZV9lcnJvcigiZHVwbGljYXRlIGV2ZW50IHRhZyIpOworCQkJCXNlZW5fZXZlbnQgPSAxOworCQkJCWV2dCA9IHBhcnNlX2hleCh2YWx1ZSk7CisJCQkJaWYgKGV2dCA9PSBucikKKwkJCQkJZXZlbnRfZm91bmQgPSAxOworCQkJCWZyZWUodmFsdWUpOworCQkJfSBlbHNlIGlmIChzdHJjbXAobmFtZSwgIm1tY3IwIikgPT0gMCkgeworCQkJCWlmIChzZWVuX21tY3IwKQorCQkJCQlwYXJzZV9lcnJvcigiZHVwbGljYXRlIG1tY3IwIHRhZyIpOworCQkJCXNlZW5fbW1jcjAgPSAxOworCQkJCW1tY3IwID0gcGFyc2VfaGV4KHZhbHVlKTsKKwkJCQlmcmVlKHZhbHVlKTsKKwkJCX0gZWxzZSBpZiAoc3RyY21wKG5hbWUsICJtbWNyMSIpID09IDApIHsKKwkJCQlpZiAoc2Vlbl9tbWNyMSkKKwkJCQkJcGFyc2VfZXJyb3IoImR1cGxpY2F0ZSBtbWNyMTogdGFnIik7CisJCQkJc2Vlbl9tbWNyMSA9IDE7CisJCQkJbW1jcjEgPSBwYXJzZV9sb25nX2hleCh2YWx1ZSk7CisJCQkJZnJlZSh2YWx1ZSk7CisJCQl9IGVsc2UgaWYgKHN0cmNtcChuYW1lLCAibW1jcmEiKSA9PSAwKSB7CisJCQkJaWYgKHNlZW5fbW1jcmEpCisJCQkJCXBhcnNlX2Vycm9yKCJkdXBsaWNhdGUgbW1jcmE6IHRhZyIpOworCQkJCXNlZW5fbW1jcmEgPSAxOworCQkJCW1tY3JhID0gcGFyc2VfaGV4KHZhbHVlKTsKKwkJCQlmcmVlKHZhbHVlKTsKKwkJCX0gZWxzZSB7CisJCQkJcGFyc2VfZXJyb3IoInVua25vd24gdGFnIik7CisJCQl9CisKKwkJCWZyZWUobmFtZSk7CisJCX0KK25leHQ6CisJCWZyZWUobGluZSk7CisJCWxpbmUgPSBvcF9nZXRfbGluZShmcCk7CisJCSsrbGluZV9ucjsKKwl9CisJaWYgKGV2ZW50X2ZvdW5kKSB7CisJCWlmICghc2Vlbl9tbWNyMCB8fCAhc2Vlbl9tbWNyMSB8fCAhc2Vlbl9tbWNyYSkgeworCQkJZnByaW50ZihzdGRlcnIsICJFcnJvcjogTWlzc2luZyBpbmZvcm1hdGlvbiBpbiBsaW5lICVkIG9mIGV2ZW50IG1hcHBpbmcgZmlsZSAlc1xuIiwgbGluZV9uciwgZmlsZW5hbWUpOworCQkJZXhpdChFWElUX0ZBSUxVUkUpOworCQl9CisJCW1hcCA9IHhtYWxsb2MoNzApOworCQlzbnByaW50ZihtYXAsIDcwLCAibW1jcjA6JXUgbW1jcjE6JUx1IG1tY3JhOiV1IiwKKwkJICAgICAgICAgbW1jcjAsIG1tY3IxLCBtbWNyYSk7CisJfQorCisJcmV0dXJuIG1hcDsKK30KKworCitjaGFyIGNvbnN0ICogZmluZF9tYXBwaW5nX2Zvcl9ldmVudCh1MzIgbnIsIG9wX2NwdSBjcHVfdHlwZSkKK3sKKwljaGFyIGNvbnN0ICogY3B1X25hbWUgPSBvcF9nZXRfY3B1X25hbWUoY3B1X3R5cGUpOworCUZJTEUgKiBmcCA9IG9wZW5fZXZlbnRfbWFwcGluZ19maWxlKGNwdV9uYW1lKTsKKwljaGFyIGNvbnN0ICogbWFwID0gTlVMTDsKKwlzd2l0Y2ggKGNwdV90eXBlKSB7CisJCWNhc2UgQ1BVX1BQQzY0X1BBNlQ6CisJCWNhc2UgQ1BVX1BQQzY0Xzk3MDoKKwkJY2FzZSBDUFVfUFBDNjRfOTcwTVA6CisJCWNhc2UgQ1BVX1BQQzY0X1BPV0VSNDoKKwkJY2FzZSBDUFVfUFBDNjRfUE9XRVI1OgorCQljYXNlIENQVV9QUEM2NF9QT1dFUjVwOgorCQljYXNlIENQVV9QUEM2NF9QT1dFUjVwcDoKKwkJY2FzZSBDUFVfUFBDNjRfUE9XRVI2OgorCQljYXNlIENQVV9QUEM2NF9QT1dFUjc6CisJCWNhc2UgQ1BVX1BQQzY0X0lCTV9DT01QQVRfVjE6CisJCQlpZiAoIWZwKSB7CisJCQkJZnByaW50ZihzdGRlcnIsICJvcHJvZmlsZTogY291bGQgbm90IG9wZW4gZXZlbnQgbWFwcGluZyBmaWxlICVzXG4iLCBmaWxlbmFtZSk7CisJCQkJZXhpdChFWElUX0ZBSUxVUkUpOworCQkJfSBlbHNlIHsKKwkJCQltYXAgPSBnZXRfbWFwcGluZyhuciwgZnApOworCQkJfQorCQkJYnJlYWs7CQkJCisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwl9CisKKwlpZiAoZnApCisJCWZjbG9zZShmcCk7CisKKwlyZXR1cm4gbWFwOworfQorCitzdGF0aWMgaW50IG1hdGNoX2V2ZW50KGludCBpLCBzdHJ1Y3Qgb3BfZXZlbnQgKmV2ZW50LCB1bnNpZ25lZCB1bSkKK3sKKwl1bnNpZ25lZCB2ID0gZXZlbnQtPnVuaXQtPnVtW2ldLnZhbHVlOworCisJc3dpdGNoIChldmVudC0+dW5pdC0+dW5pdF90eXBlX21hc2spIHsKKwljYXNlIHV0bV9leGNsdXNpdmU6CisJY2FzZSB1dG1fbWFuZGF0b3J5OgorCQlyZXR1cm4gdiA9PSB1bTsKKworCWNhc2UgdXRtX2JpdG1hc2s6CisJCXJldHVybiAodiAmIHVtKSB8fCAoIXYgJiYgdiA9PSAwKTsKKwl9CisKKwlhYm9ydCgpOworfQorCitzdHJ1Y3Qgb3BfZXZlbnQgKiBmaW5kX2V2ZW50X2J5X25hbWUoY2hhciBjb25zdCAqIG5hbWUsIHVuc2lnbmVkIHVtLCBpbnQgdW1fdmFsaWQpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqIHBvczsKKworCWxpc3RfZm9yX2VhY2gocG9zLCAmZXZlbnRzX2xpc3QpIHsKKwkJc3RydWN0IG9wX2V2ZW50ICogZXZlbnQgPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IG9wX2V2ZW50LCBldmVudF9uZXh0KTsKKwkJaWYgKHN0cmNtcChldmVudC0+bmFtZSwgbmFtZSkgPT0gMCkgeworCQkJaWYgKHVtX3ZhbGlkKSB7CisJCQkJdW5zaWduZWQgaTsKKworCQkJCWZvciAoaSA9IDA7IGkgPCBldmVudC0+dW5pdC0+bnVtOyBpKyspCisJCQkJCWlmIChtYXRjaF9ldmVudChpLCBldmVudCwgdW0pKQorCQkJCQkJcmV0dXJuIGV2ZW50OworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJcmV0dXJuIGV2ZW50OworCQl9CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKKworc3RhdGljIHN0cnVjdCBvcF9ldmVudCAqIGZpbmRfbmV4dF9ldmVudChzdHJ1Y3Qgb3BfZXZlbnQgKiBlKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKiBuOworCisJZm9yIChuID0gZS0+ZXZlbnRfbmV4dC5uZXh0OyBuICE9ICZldmVudHNfbGlzdDsgbiA9IG4tPm5leHQpIHsKKwkJc3RydWN0IG9wX2V2ZW50ICogbmUgPSBsaXN0X2VudHJ5KG4sIHN0cnVjdCBvcF9ldmVudCwgZXZlbnRfbmV4dCk7CisJCWlmICghc3RyY21wKGUtPm5hbWUsIG5lLT5uYW1lKSkKKwkJCXJldHVybiBuZTsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0cnVjdCBvcF9ldmVudCAqIG9wX2ZpbmRfZXZlbnQob3BfY3B1IGNwdV90eXBlLCB1MzIgbnIsIHUzMiB1bSkKK3sKKwlzdHJ1Y3Qgb3BfZXZlbnQgKiBldmVudDsKKworCWxvYWRfZXZlbnRzKGNwdV90eXBlKTsKKworCWV2ZW50ID0gZmluZF9ldmVudF91bShuciwgdW0pOworCisJcmV0dXJuIGV2ZW50OworfQorCitzdHJ1Y3Qgb3BfZXZlbnQgKiBvcF9maW5kX2V2ZW50X2FueShvcF9jcHUgY3B1X3R5cGUsIHUzMiBucikKK3sKKwlsb2FkX2V2ZW50cyhjcHVfdHlwZSk7CisKKwlyZXR1cm4gZmluZF9ldmVudF9hbnkobnIpOworfQorCitpbnQgb3BfY2hlY2tfZXZlbnRzKGludCBjdHIsIHUzMiBuciwgdTMyIHVtLCBvcF9jcHUgY3B1X3R5cGUpCit7CisJaW50IHJldCA9IE9QX0lOVkFMSURfRVZFTlQ7CisJc2l6ZV90IGk7CisJdTMyIGN0cl9tYXNrID0gMSA8PCBjdHI7CisJc3RydWN0IGxpc3RfaGVhZCAqIHBvczsKKworCWxvYWRfZXZlbnRzKGNwdV90eXBlKTsKKworCWxpc3RfZm9yX2VhY2gocG9zLCAmZXZlbnRzX2xpc3QpIHsKKwkJc3RydWN0IG9wX2V2ZW50ICogZXZlbnQgPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IG9wX2V2ZW50LCBldmVudF9uZXh0KTsKKwkJaWYgKGV2ZW50LT52YWwgIT0gbnIpCisJCQljb250aW51ZTsKKworCQlyZXQgPSBPUF9PS19FVkVOVDsKKworCQlpZiAoKGV2ZW50LT5jb3VudGVyX21hc2sgJiBjdHJfbWFzaykgPT0gMCkKKwkJCXJldCB8PSBPUF9JTlZBTElEX0NPVU5URVI7CisKKwkJaWYgKGV2ZW50LT51bml0LT51bml0X3R5cGVfbWFzayA9PSB1dG1fYml0bWFzaykgeworCQkJZm9yIChpID0gMDsgaSA8IGV2ZW50LT51bml0LT5udW07ICsraSkKKwkJCQl1bSAmPSB+KGV2ZW50LT51bml0LT51bVtpXS52YWx1ZSk7CQkJCisJCQkKKwkJCWlmICh1bSkKKwkJCQlyZXQgfD0gT1BfSU5WQUxJRF9VTTsKKwkJCQorCQl9IGVsc2UgeworCQkJZm9yIChpID0gMDsgaSA8IGV2ZW50LT51bml0LT5udW07ICsraSkgeworCQkJCWlmIChldmVudC0+dW5pdC0+dW1baV0udmFsdWUgPT0gdW0pCisJCQkJCWJyZWFrOworCQkJfQorCQkJCisJCQlpZiAoaSA9PSBldmVudC0+dW5pdC0+bnVtKQorCQkJCXJldCB8PSBPUF9JTlZBTElEX1VNOworCisJCX0KKworCQlpZiAocmV0ID09IE9QX09LX0VWRU5UKQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisKK3ZvaWQgb3BfZGVmYXVsdF9ldmVudChvcF9jcHUgY3B1X3R5cGUsIHN0cnVjdCBvcF9kZWZhdWx0X2V2ZW50X2Rlc2NyICogZGVzY3IpCit7CisJZGVzY3ItPm5hbWUgPSAiIjsKKwlkZXNjci0+dW0gPSAweDA7CisJLyogQSBmaXhlZCB2YWx1ZSBvZiBDUFUgY3ljbGVzOyB0aGlzIHNob3VsZCBlbnN1cmUgZ29vZAorCSAqIGdyYW51bGl0eSBldmVuIG9uIGZhc3RlciBDUFVzLCB0aG91Z2ggaXQgd2lsbCBnZW5lcmF0ZSBtb3JlCisJICogaW50ZXJydXB0cy4KKwkgKi8KKwlkZXNjci0+Y291bnQgPSAxMDAwMDA7CisKKwlzd2l0Y2ggKGNwdV90eXBlKSB7CisJCWNhc2UgQ1BVX1BQUk86CisJCWNhc2UgQ1BVX1BJSToKKwkJY2FzZSBDUFVfUElJSToKKwkJY2FzZSBDUFVfUDZfTU9CSUxFOgorCQljYXNlIENQVV9DT1JFOgorCQljYXNlIENQVV9DT1JFXzI6CisJCWNhc2UgQ1BVX0FUSExPTjoKKwkJY2FzZSBDUFVfSEFNTUVSOgorCQljYXNlIENQVV9GQU1JTFkxMDoKKwkJY2FzZSBDUFVfQVJDSF9QRVJGTU9OOgorCQljYXNlIENQVV9GQU1JTFkxMUg6CisgCQljYXNlIENQVV9BVE9NOgorIAkJY2FzZSBDUFVfQ09SRV9JNzoKKwkJY2FzZSBDUFVfTkVIQUxFTToKKwkJY2FzZSBDUFVfV0VTVE1FUkU6CisJCWNhc2UgQ1BVX1NBTkRZQlJJREdFOgorCQljYXNlIENQVV9NSVBTX0xPT05HU09OMjoKKwkJY2FzZSBDUFVfRkFNSUxZMTJIOgorCQljYXNlIENQVV9GQU1JTFkxNEg6CisJCWNhc2UgQ1BVX0ZBTUlMWTE1SDoKKwkJCWRlc2NyLT5uYW1lID0gIkNQVV9DTEtfVU5IQUxURUQiOworCQkJYnJlYWs7CisKKwkJY2FzZSBDUFVfUlRDOgorCQkJZGVzY3ItPm5hbWUgPSAiUlRDX0lOVEVSUlVQVFMiOworCQkJZGVzY3ItPmNvdW50ID0gMTAyNDsKKwkJCWJyZWFrOworCisJCWNhc2UgQ1BVX1A0OgorCQljYXNlIENQVV9QNF9IVDI6CisJCQlkZXNjci0+bmFtZSA9ICJHTE9CQUxfUE9XRVJfRVZFTlRTIjsKKwkJCWRlc2NyLT51bSA9IDB4MTsKKwkJCWJyZWFrOworCisJCWNhc2UgQ1BVX0lBNjQ6CisJCWNhc2UgQ1BVX0lBNjRfMToKKwkJY2FzZSBDUFVfSUE2NF8yOgorCQkJZGVzY3ItPmNvdW50ID0gMTAwMDAwMDsKKwkJCWRlc2NyLT5uYW1lID0gIkNQVV9DWUNMRVMiOworCQkJYnJlYWs7CisKKwkJY2FzZSBDUFVfQVhQX0VWNDoKKwkJY2FzZSBDUFVfQVhQX0VWNToKKwkJY2FzZSBDUFVfQVhQX1BDQTU2OgorCQljYXNlIENQVV9BWFBfRVY2OgorCQljYXNlIENQVV9BWFBfRVY2NzoKKwkJCWRlc2NyLT5uYW1lID0gIkNZQ0xFUyI7CisJCQlicmVhazsKKworCQkvLyB3ZSBjb3VsZCBwb3NzaWJseSB1c2UgdGhlIENDTlQKKwkJY2FzZSBDUFVfQVJNX1hTQ0FMRTE6CisJCWNhc2UgQ1BVX0FSTV9YU0NBTEUyOgorCQljYXNlIENQVV9BUk1fTVBDT1JFOgorCQljYXNlIENQVV9BUk1fVjY6CisJCWNhc2UgQ1BVX0FSTV9WNzoKKwkJY2FzZSBDUFVfQVJNX1Y3X0NBOToKKwkJY2FzZSBDUFVfQVZSMzI6CisJCWNhc2UgQ1BVX0FSTV9TQ09SUElPTjoKKwkJY2FzZSBDUFVfQVJNX1NDT1JQSU9OTVA6CisJCQlkZXNjci0+bmFtZSA9ICJDUFVfQ1lDTEVTIjsKKwkJCWJyZWFrOworCisJCWNhc2UgQ1BVX1BQQzY0X1BBNlQ6CisJCWNhc2UgQ1BVX1BQQzY0Xzk3MDoKKwkJY2FzZSBDUFVfUFBDNjRfOTcwTVA6CisJCWNhc2UgQ1BVX1BQQ183NDUwOgorCQljYXNlIENQVV9QUEM2NF9QT1dFUjQ6CisJCWNhc2UgQ1BVX1BQQzY0X1BPV0VSNToKKwkJY2FzZSBDUFVfUFBDNjRfUE9XRVI2OgorCQljYXNlIENQVV9QUEM2NF9QT1dFUjVwOgorCQljYXNlIENQVV9QUEM2NF9QT1dFUjVwcDoKKwkJY2FzZSBDUFVfUFBDNjRfQ0VMTDoKKwkJY2FzZSBDUFVfUFBDNjRfUE9XRVI3OgorCQljYXNlIENQVV9QUEM2NF9JQk1fQ09NUEFUX1YxOgorCQkJZGVzY3ItPm5hbWUgPSAiQ1lDTEVTIjsKKwkJCWJyZWFrOworCisJCWNhc2UgQ1BVX01JUFNfMjBLOgorCQkJZGVzY3ItPm5hbWUgPSAiQ1lDTEVTIjsKKwkJCWJyZWFrOworCisJCWNhc2UgQ1BVX01JUFNfMjRLOgorCQljYXNlIENQVV9NSVBTXzM0SzoKKwkJY2FzZSBDUFVfTUlQU183NEs6CisJCWNhc2UgQ1BVX01JUFNfMTAwNEs6CisJCQlkZXNjci0+bmFtZSA9ICJJTlNUUlVDVElPTlMiOworCQkJYnJlYWs7CisKKwkJY2FzZSBDUFVfTUlQU181SzoKKwkJY2FzZSBDUFVfTUlQU18yNUs6CisJCQlkZXNjci0+bmFtZSA9ICJDWUNMRVMiOworCQkJYnJlYWs7CisKKwkJY2FzZSBDUFVfTUlQU19SMTAwMDA6CisJCWNhc2UgQ1BVX01JUFNfUjEyMDAwOgorCQkJZGVzY3ItPm5hbWUgPSAiSU5TVFJVQ1RJT05TX0dSQURVQVRFRCI7CisJCQlicmVhazsKKworCQljYXNlIENQVV9NSVBTX1JNNzAwMDoKKwkJY2FzZSBDUFVfTUlQU19STTkwMDA6CisJCQlkZXNjci0+bmFtZSA9ICJJTlNUUlVDVElPTlNfSVNTVUVEIjsKKwkJCWJyZWFrOworCisJCWNhc2UgQ1BVX01JUFNfU0IxOgorCQkJZGVzY3ItPm5hbWUgPSAiSU5TTl9TVVJWSVZFRF9TVEFHRTciOworCQkJYnJlYWs7CisKKwkJY2FzZSBDUFVfTUlQU19WUjU0MzI6CisJCWNhc2UgQ1BVX01JUFNfVlI1NTAwOgorCQkJZGVzY3ItPm5hbWUgPSAiSU5TVFJVQ1RJT05TX0VYRUNVVEVEIjsKKwkJCWJyZWFrOworCisJCWNhc2UgQ1BVX1BQQ19FNTAwOgorCQljYXNlIENQVV9QUENfRTUwMF8yOgorCQljYXNlIENQVV9QUENfRTMwMDoKKwkJCWRlc2NyLT5uYW1lID0gIkNQVV9DTEsiOworCQkJYnJlYWs7CisKKwkJLy8gZG9uJ3QgdXNlIGRlZmF1bHQsIGlmIHNvbWVvbmUgYWRkIGEgY3B1IGhlIHdhbnRzIGEgY29tcGlsZXIKKwkJLy8gd2FybmluZyBpZiBoZSBmb3JnZXRzIHRvIGhhbmRsZSBpdCBoZXJlLgorCQljYXNlIENQVV9USU1FUl9JTlQ6CisJCWNhc2UgQ1BVX05PX0dPT0Q6CisJCWNhc2UgTUFYX0NQVV9UWVBFOgorCQkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgdm9pZCBleHRyYV9jaGVjayhzdHJ1Y3Qgb3BfZXZlbnQgKmUsIHUzMiB1bml0X21hc2spCit7CisJdW5zaWduZWQgaTsKKwlpbnQgZm91bmQgPSAwOworCisJZm9yIChpID0gMDsgaSA8IGUtPnVuaXQtPm51bTsgaSsrKQorCQlpZiAoZS0+dW5pdC0+dW1baV0udmFsdWUgPT0gdW5pdF9tYXNrKQorCQkJZm91bmQrKzsKKwlpZiAoZm91bmQgPiAxKSB7CisJCWZwcmludGYoc3RkZXJyLAorIk5hbWVkIHVuaXQgbWFza3Mgbm90IGFsbG93ZWQgZm9yIGV2ZW50cyB3aXRob3V0ICdleHRyYTonIHZhbHVlcy5cbiIKKyJQbGVhc2Ugc3BlY2lmeSB0aGUgbnVtZXJpY2FsIHZhbHVlIGZvciB0aGUgdW5pdCBtYXNrLiBTZWUgJ29wY29udHJvbCciCisiIG1hbiBwYWdlIGZvciBtb3JlIGluZm8uXG4iKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KK30KKworc3RhdGljIHZvaWQgYW5vdGhlcl9leHRyYV9jaGVjayhzdHJ1Y3Qgb3BfZXZlbnQgKmUsIGNoYXIgKm5hbWUsIHVuc2lnbmVkIHcpCit7CisJaW50IGZvdW5kOworCXVuc2lnbmVkIGk7CisKKwlpZiAoIWUtPnVuaXQtPnVtW3ddLmV4dHJhKSB7CisJCWZwcmludGYoc3RkZXJyLAorIk5hbWVkIHVuaXQgbWFzayAoJXMpIG5vdCBhbGxvd2VkIGZvciBldmVudCB3aXRob3V0ICdleHRyYTonIHZhbHVlcy5cbiIKKyJQbGVhc2Ugc3BlY2lmeSB0aGUgbnVtZXJpY2FsIHZhbHVlIGZvciB0aGUgdW5pdCBtYXNrLiBTZWUgJ29wY29udHJvbCciCisiIG1hbiBwYWdlIGZvciBtb3JlIGluZm8uXG4iLCBuYW1lKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKworCWZvdW5kID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgZS0+dW5pdC0+bnVtOyBpKyspIHsKKwkJaW50IGxlbiA9IHN0cmNzcG4oZS0+dW5pdC0+dW1baV0uZGVzYywgIiBcdCIpOworCQlpZiAoIXN0cm5jbXAobmFtZSwgZS0+dW5pdC0+dW1baV0uZGVzYywgbGVuKSAmJgorCQkgICAgbmFtZVtsZW5dID09ICdcMCcpCisJCQlmb3VuZCsrOworCX0KKwlpZiAoZm91bmQgPiAxKSB7CisJCWZwcmludGYoc3RkZXJyLAorCSJVbml0IG1hc2sgbmFtZSBgJXMnIG5vdCB1bmlxdWUuIFNvcnJ5IHBsZWFzZSB1c2UgYSBudW1lcmljYWwgdW5pdCBtYXNrXG4iLCBuYW1lKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KK30KKworc3RhdGljIHZvaWQgZG9fcmVzb2x2ZV91bml0X21hc2soc3RydWN0IG9wX2V2ZW50ICplLCBzdHJ1Y3QgcGFyc2VkX2V2ZW50ICpwZSwKKwkJCQkgdTMyICpleHRyYSkKK3sKKwl1bnNpZ25lZCBpOworCWludCBmb3VuZDsKKworCWZvciAoOzspIHsKKwkJaWYgKHBlLT51bml0X21hc2tfbmFtZSA9PSBOVUxMKSB7CisJCQlpbnQgZmkgPSAwOworCQkJdW5zaWduZWQgdW0gPSBwZS0+dW5pdF9tYXNrOworCQkJaW50IGhhZF91bml0X21hc2sgPSBwZS0+dW5pdF9tYXNrX3ZhbGlkOworCisJCQlmb3VuZCA9IDA7CisJCQlmb3IgKGkgPSAwOyBpIDwgZS0+dW5pdC0+bnVtOyBpKyspIHsKKwkJCSAgICAgICAgaWYgKHBlLT51bml0X21hc2tfdmFsaWQgJiYKKwkJCQkgICAgZS0+dW5pdC0+dW1baV0udmFsdWUgPT0gdW0pIHsKKwkJCQkJaWYgKGZvdW5kKysgPT0gMCkKKwkJCQkJCWZpID0gaTsKKwkJCQl9CisJCQkJaWYgKCFwZS0+dW5pdF9tYXNrX3ZhbGlkICYmCisJCQkJZS0+dW5pdC0+dW1baV0udmFsdWUgPT0gZS0+dW5pdC0+ZGVmYXVsdF9tYXNrKSB7CisJCQkJCXBlLT51bml0X21hc2tfdmFsaWQgPSAxOworCQkJCQlwZS0+dW5pdF9tYXNrID0gZS0+dW5pdC0+ZGVmYXVsdF9tYXNrOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCQlpZiAoZm91bmQgPiAxICYmIGhhZF91bml0X21hc2spIHsKKwkJCQlmcHJpbnRmKHN0ZGVyciwKKwkiTm9uIHVuaXF1ZSBudW1lcmljYWwgdW5pdCBtYXNrLlxuIgorCSJQbGVhc2Ugc3BlY2lmeSB0aGUgdW5pdCBtYXNrIHVzaW5nIHRoZSBmaXJzdCB3b3JkIG9mIHRoZSBkZXNjcmlwdGlvblxuIik7CisJCQkJZXhpdChFWElUX0ZBSUxVUkUpOworCQkJfQorCQkJZXh0cmFfY2hlY2soZSwgcGUtPnVuaXRfbWFzayk7CisJCQlpZiAoaSA9PSBlLT51bml0LT5udW0pIHsKKwkJCQllID0gZmluZF9uZXh0X2V2ZW50KGUpOworCQkJCWlmIChlICE9IE5VTEwpCisJCQkJCWNvbnRpbnVlOworCQkJfSBlbHNlIHsKKwkJCQlpZiAoZXh0cmEpCisJCQkJCSpleHRyYSA9IGUtPnVuaXQtPnVtW2ldLmV4dHJhOworCQkJfQorCQkJcmV0dXJuOworCQl9CisJCWZvciAoaSA9IDA7IGkgPCBlLT51bml0LT5udW07IGkrKykgeworCQkJaW50IGxlbiA9IHN0cmNzcG4oZS0+dW5pdC0+dW1baV0uZGVzYywgIiBcdCIpOworCQkJaWYgKCFzdHJuY21wKHBlLT51bml0X21hc2tfbmFtZSwgZS0+dW5pdC0+dW1baV0uZGVzYywKKwkJCQkgICAgbGVuKSAmJiBwZS0+dW5pdF9tYXNrX25hbWVbbGVuXSA9PSAnXDAnKQorCQkJCWJyZWFrOworCQl9CisJCWlmIChpID09IGUtPnVuaXQtPm51bSkgeworCQkJZSA9IGZpbmRfbmV4dF9ldmVudChlKTsKKwkJCWlmIChlICE9IE5VTEwpCisJCQkJY29udGludWU7CisJCQlmcHJpbnRmKHN0ZGVyciwgIkNhbm5vdCBmaW5kIHVuaXQgbWFzayAlcyBmb3IgJXNcbiIsCisJCQkJcGUtPnVuaXRfbWFza19uYW1lLCBwZS0+bmFtZSk7CisJCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJCX0KKwkJYW5vdGhlcl9leHRyYV9jaGVjayhlLCBwZS0+dW5pdF9tYXNrX25hbWUsIGkpOworCQlwZS0+dW5pdF9tYXNrX3ZhbGlkID0gMTsKKwkJcGUtPnVuaXRfbWFzayA9IGUtPnVuaXQtPnVtW2ldLnZhbHVlOworCQlpZiAoZXh0cmEpCisJCQkqZXh0cmEgPSBlLT51bml0LT51bVtpXS5leHRyYTsKKwkJcmV0dXJuOworCX0KK30KKwordm9pZCBvcF9yZXNvbHZlX3VuaXRfbWFzayhzdHJ1Y3QgcGFyc2VkX2V2ZW50ICpwZSwgdTMyICpleHRyYSkKK3sKKwlzdHJ1Y3Qgb3BfZXZlbnQgKmU7CisKKwllID0gZmluZF9ldmVudF9ieV9uYW1lKHBlLT5uYW1lLCAwLCAwKTsKKwlpZiAoIWUpIHsKKwkJZnByaW50ZihzdGRlcnIsICJDYW5ub3QgZmluZCBldmVudCAlc1xuIiwgcGUtPm5hbWUpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorCXJldHVybiBkb19yZXNvbHZlX3VuaXRfbWFzayhlLCBwZSwgZXh0cmEpOworfQpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvbGlib3Avb3BfZXZlbnRzLmggYi9vcHJvZmlsZS0wLjkuNy9saWJvcC9vcF9ldmVudHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZGVjMzY0Ci0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvbGlib3Avb3BfZXZlbnRzLmgKQEAgLTAsMCArMSwxNDYgQEAKKy8qKgorICogQGZpbGUgb3BfZXZlbnRzLmgKKyAqIERldGFpbHMgb2YgUE1DIHByb2ZpbGluZyBldmVudHMKKyAqCisgKiBAcmVtYXJrIENvcHlyaWdodCAyMDAyIE9Qcm9maWxlIGF1dGhvcnMKKyAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCisgKgorICogQGF1dGhvciBKb2huIExldm9uCisgKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKKyAqLworCisjaWZuZGVmIE9QX0VWRU5UU19ICisjZGVmaW5lIE9QX0VWRU5UU19ICisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworI2luY2x1ZGUgIm9wX2NwdV90eXBlLmgiCisjaW5jbHVkZSAib3BfdHlwZXMuaCIKKyNpbmNsdWRlICJvcF9saXN0LmgiCisKKyNkZWZpbmUgRVhUUkFfRURHRSAoMVUgPDwgMTgpCisjZGVmaW5lIEVYVFJBX0lOViAgKDFVIDw8IDIzKQorI2RlZmluZSBFWFRSQV9DTUFTS19TSElGVCAyNAorI2RlZmluZSBFWFRSQV9DTUFTS19NQVNLIDB4ZmYKKworLyoqIERlc2NyaWJlIGFuIHVuaXQgbWFzayB0eXBlLiBFdmVudHMgY2FuIG9wdGlvbmFsbHkgdXNlIGEgZmlsdGVyIGNhbGxlZAorICogdGhlIHVuaXQgbWFzay4gdGhlIG1hc2sgdHlwZSBjYW4gYmUgYSBiaXRtYXNrIG9yIGEgZGlzY3JldGUgdmFsdWUgKi8KK2VudW0gdW5pdF9tYXNrX3R5cGUgeworCXV0bV9tYW5kYXRvcnksCQkvKio8IHVzZWxlc3MgYnV0IHJlcXVpcmVkIGJ5IHRoZSBoYXJkd2FyZSAqLworCXV0bV9leGNsdXNpdmUsCQkvKio8IG9ubHkgb25lIG9mIHRoZSB2YWx1ZXMgaXMgYWxsb3dlZCAqLworCXV0bV9iaXRtYXNrCQkvKio8IGJpdG1hc2sgKi8KK307CisKKy8qKiB1cCB0byB0aGlydHkgdHdvIGFsbG93ZWQgdW5pdCBtYXNrcyAqLworI2RlZmluZSBNQVhfVU5JVF9NQVNLIDMyCisKKworLyoqIERlc2NyaWJlIGFuIHVuaXQgbWFzay4gKi8KK3N0cnVjdCBvcF91bml0X21hc2sgeworCWNoYXIgKiBuYW1lOwkJLyoqPCBuYW1lIG9mIHVuaXQgbWFzayB0eXBlICovCisJdTMyIG51bTsJCS8qKjwgbnVtYmVyIG9mIHBvc3NpYmxlIHVuaXQgbWFza3MgKi8KKwllbnVtIHVuaXRfbWFza190eXBlIHVuaXRfdHlwZV9tYXNrOworCXUzMiBkZWZhdWx0X21hc2s7CS8qKjwgb25seSB0aGUgZ3VpIHVzZSBpdCAqLworCXN0cnVjdCBvcF9kZXNjcmliZWRfdW0geworCSAgICAgICAgdTMyIGV4dHJhOworCQl1MzIgdmFsdWU7CisJCWNoYXIgKiBkZXNjOworCX0gdW1bTUFYX1VOSVRfTUFTS107CisJc3RydWN0IGxpc3RfaGVhZCB1bV9uZXh0OyAvKio8IG5leHQgdW0gaW4gbGlzdCAqLworCWludCB1c2VkOyAgICAgICAgICAgICAgICAgLyoqPCB1c2VkIGJ5IGV2ZW50cyBmaWxlIHBhcnNlciAqLworfTsKKworCisvKiogRGVzY3JpYmUgYW4gZXZlbnQuICovCitzdHJ1Y3Qgb3BfZXZlbnQgeworCXUzMiBjb3VudGVyX21hc2s7CS8qKjwgYml0bWFzayBvZiBhbGxvd2VkIGNvdW50ZXIgICovCisJdTMyIHZhbDsJCS8qKjwgZXZlbnQgbnVtYmVyICovCisJLyoqIHdoaWNoIHVuaXQgbWFzayBpZiBhbnkgYWxsb3dlZCAqLworCXN0cnVjdCBvcF91bml0X21hc2sgKiB1bml0OwkJCQorCWNoYXIgKiBuYW1lOwkJLyoqPCB0aGUgZXZlbnQgbmFtZSAqLworCWNoYXIgKiBkZXNjOyAgICAgIAkvKio8IHRoZSBldmVudCBkZXNjcmlwdGlvbiAqLworCWludCBtaW5fY291bnQ7CQkvKio8IG1pbmltdW0gY291bnRlciB2YWx1ZSBhbGxvd2VkICovCisJaW50IGZpbHRlcjsJCS8qKjwgYXJjaGl0ZWN0dXJlIHNwZWNpZmljIGZpbHRlciBvciAtMSAqLworCWNoYXIgKiBleHQ7CQkvKio8IGV4dGVuZGVkIGV2ZW50cyAqLworCXN0cnVjdCBsaXN0X2hlYWQgZXZlbnRfbmV4dDsgICAvKio8IG5leHQgZXZlbnQgaW4gbGlzdCAqLworfTsKKworLyoqIFJldHVybiB0aGUga25vd24gZXZlbnRzIGxpc3QuIElkZW1wb3RlbnQgKi8KK3N0cnVjdCBsaXN0X2hlYWQgKiBvcF9ldmVudHMob3BfY3B1IGNwdV90eXBlKTsKKworLyoqIEZpbmQgYSBnaXZlbiBldmVudCwgcmV0dXJucyBOVUxMIG9uIGVycm9yICovCitzdHJ1Y3Qgb3BfZXZlbnQgKiBvcF9maW5kX2V2ZW50KG9wX2NwdSBjcHVfdHlwZSwgdTMyIG5yLCB1MzIgdW0pOworc3RydWN0IG9wX2V2ZW50ICogb3BfZmluZF9ldmVudF9hbnkob3BfY3B1IGNwdV90eXBlLCB1MzIgbnIpOworCisvKiogRmluZCBhIGdpdmVuIGV2ZW50IGJ5IG5hbWUgKi8KK3N0cnVjdCBvcF9ldmVudCAqIGZpbmRfZXZlbnRfYnlfbmFtZShjaGFyIGNvbnN0ICogbmFtZSwgdW5zaWduZWQgdW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHVtX3ZhbGlkKTsKKworLyoqCisgKiBGaW5kIGEgbWFwcGluZyBmb3IgYSBnaXZlbiBldmVudCBJRCBmb3IgYXJjaGl0ZWN0dXJlcyByZXF1aXJpbmcgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogZnJvbSB3aGF0IGlzIGhlbGQgaW4gdGhlIGV2ZW50cyBmaWxlLiAKKyAqLworY2hhciBjb25zdCAqIGZpbmRfbWFwcGluZ19mb3JfZXZlbnQodTMyIHZhbCwgb3BfY3B1IGNwdV90eXBlKTsKKworCisvKiogb3BfY2hlY2tfZXZlbnRzKCkgcmV0dXJuIGNvZGUgKi8KK2VudW0gb3BfZXZlbnRfY2hlY2sgeworCU9QX09LX0VWRU5UID0gMCwgLyoqPCBldmVudCBpcyB2YWxpZCBhbmQgYWxsb3dlZCAqLworCU9QX0lOVkFMSURfRVZFTlQgPSAxLCAvKio8IGV2ZW50IG51bWJlciBpcyBpbnZhbGlkICovCisJT1BfSU5WQUxJRF9VTSA9IDIsIC8qKjwgdW5pdCBtYXNrIGlzIGludmFsaWQgKi8KKwlPUF9JTlZBTElEX0NPVU5URVIgPSA0IC8qKjwgZXZlbnQgaXMgbm90IGFsbG93ZWQgZm9yIHRoZSBnaXZlbiBjb3VudGVyICovCit9OworCisvKioKKyAqIHNhbml0eSBjaGVjayBldmVudCB2YWx1ZXMKKyAqIEBwYXJhbSBjdHIgY291bnRlciBudW1iZXIKKyAqIEBwYXJhbSBldmVudCB2YWx1ZSBmb3IgY291bnRlcgorICogQHBhcmFtIHVtIHVuaXQgbWFzayBmb3IgY291bnRlcgorICogQHBhcmFtIGNwdV90eXBlIHByb2Nlc3NvciB0eXBlCisgKgorICogQ2hlY2sgdGhhdCB0aGUgY291bnRlciBldmVudCBhbmQgdW5pdCBtYXNrIHZhbHVlcyBhcmUgYWxsb3dlZC4KKyAqCisgKiBUaGUgZnVuY3Rpb24gcmV0dXJucyBiaXRtYXNrIG9mIGZhaWx1cmUgY2F1c2UgMCBvdGhlcndpc2UKKyAqCisgKiBcc2Egb3BfY3B1LCBPUF9FVkVOVFNfT0sKKyAqLworaW50IG9wX2NoZWNrX2V2ZW50cyhpbnQgY3RyLCB1MzIgZXZlbnQsIHUzMiB1bSwgb3BfY3B1IGNwdV90eXBlKTsKKworLyoqCisgKiBmcmVlIG1lbW9yeSB1c2VkIGJ5IGFueSBjYWxsIHRvIGFib3ZlIGZ1bmN0aW9uLiBOZWVkIHRvIGJlIGNhbGxlZCBvbmx5IG9uY2UKKyAqLwordm9pZCBvcF9mcmVlX2V2ZW50cyh2b2lkKTsKKworc3RydWN0IG9wX2RlZmF1bHRfZXZlbnRfZGVzY3IgeworCWNoYXIgKiBuYW1lOworCXVuc2lnbmVkIGxvbmcgY291bnQ7CisJdW5zaWduZWQgbG9uZyB1bTsKK307CisKKy8qKgorICogb3BfZGVmYXVsdF9ldmVudCAtIHJldHVybiB0aGUgZGV0YWlscyBvZiB0aGUgZGVmYXVsdCBldmVudAorICogQHBhcmFtIGNwdV90eXBlICBjcHUgdHlwZQorICogQHBhcmFtIGRlc2NyIGZpbGxlZCBldmVudCBkZXNjcmlwdGlvbgorICoKKyAqIEZpbGxzIGluIHRoZSBldmVudCBkZXNjcmlwdGlvbiBpZiBhcHBsaWNhYmxlCisgKi8KK3ZvaWQgb3BfZGVmYXVsdF9ldmVudChvcF9jcHUgY3B1X3R5cGUsIHN0cnVjdCBvcF9kZWZhdWx0X2V2ZW50X2Rlc2NyICogZGVzY3IpOworCisvKioKKyAqIG9wX3Jlc29sdmVfdW5pdF9tYXNrIC0gcmVzb2x2ZSBhIHVuaXQgbWFzayBpbiBhIHBhcnNlZCBldmVudC4KKyAqIEBwZSBwYXJzZWQgZXZlbnQKKyAqIEBleHRyYSBwb2ludGVyIHRvIGV4dHJhIG1hc2sgb3IgTlVMTC4KKyAqCisgKiBGaWxscyBpbiB0aGUgZXh0cmEgbWFzayBmb3IgdGhlIHVuaXQgbWFzay4KKyAqLworCitzdHJ1Y3QgcGFyc2VkX2V2ZW50Owordm9pZCBvcF9yZXNvbHZlX3VuaXRfbWFzayhzdHJ1Y3QgcGFyc2VkX2V2ZW50ICpwZSwgdTMyICpleHRyYSk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBPUF9FVkVOVFNfSCAqLwpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvbGlib3Avb3BfZ2V0X2ludGVyZmFjZS5jIGIvb3Byb2ZpbGUtMC45LjcvbGlib3Avb3BfZ2V0X2ludGVyZmFjZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkZjcyYTUKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9saWJvcC9vcF9nZXRfaW50ZXJmYWNlLmMKQEAgLTAsMCArMSwzMiBAQAorLyoqCisgKiBAZmlsZSBvcF9nZXRfaW50ZXJmYWNlLmMKKyAqIERldGVybWluZSB3aGljaCBvcHJvZmlsZSBrZXJuZWwgaW50ZXJmYWNlIHVzZWQKKyAqCisgKiBAcmVtYXJrIENvcHlyaWdodCAyMDAyIE9Qcm9maWxlIGF1dGhvcnMKKyAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCisgKgorICogQGF1dGhvciBXaWxsIENvaGVuCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICJvcF9jcHVfdHlwZS5oIgorI2luY2x1ZGUgIm9wX2ZpbGUuaCIKKworb3BfaW50ZXJmYWNlIG9wX2dldF9pbnRlcmZhY2Uodm9pZCkKK3sKKwlzdGF0aWMgb3BfaW50ZXJmYWNlIGN1cnJlbnRfaW50ZXJmYWNlID0gT1BfSU5URVJGQUNFX05PX0dPT0Q7CisKKwlpZiAoY3VycmVudF9pbnRlcmZhY2UgIT0gT1BfSU5URVJGQUNFX05PX0dPT0QpCisJCXJldHVybiBjdXJyZW50X2ludGVyZmFjZTsKKworCWlmIChvcF9maWxlX3JlYWRhYmxlKCIvcHJvYy9zeXMvZGV2L29wcm9maWxlL2NwdV90eXBlIikpIHsKKwkJY3VycmVudF9pbnRlcmZhY2UgPSBPUF9JTlRFUkZBQ0VfMjQ7CisJfSBlbHNlIGlmIChvcF9maWxlX3JlYWRhYmxlKCIvZGV2L29wcm9maWxlL2NwdV90eXBlIikpIHsKKwkJY3VycmVudF9pbnRlcmZhY2UgPSBPUF9JTlRFUkZBQ0VfMjY7CisJfQorCisJcmV0dXJuIGN1cnJlbnRfaW50ZXJmYWNlOworfQpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvbGlib3Avb3BfaHdfY29uZmlnLmggYi9vcHJvZmlsZS0wLjkuNy9saWJvcC9vcF9od19jb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjliMzZiCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvbGlib3Avb3BfaHdfY29uZmlnLmgKQEAgLTAsMCArMSwzMCBAQAorLyoqCisgKiBAZmlsZSBvcF9od19jb25maWcuaAorICogQ29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIHRoYXQgYXJlIGRlcGVuZGVudCBvbiBDUFUvYXJjaGl0ZWN0dXJlCisgKgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMiBPUHJvZmlsZSBhdXRob3JzCisgKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORworICoKKyAqIEBhdXRob3IgSm9obiBMZXZvbgorICogQGF1dGhvciBQaGlsaXBwZSBFbGllCisgKi8KKworI2lmbmRlZiBPUF9IV19DT05GSUdfSAorI2RlZmluZSBPUF9IV19DT05GSUdfSAorCisvKiogbWF4aW11bSBudW1iZXIgb2YgY291bnRlcnMsIHVwIHRvIDQgZm9yIEF0aGxvbiAoMTggZm9yIFA0KS4gVGhlIHByaW1hcnkKKyAqIHVzZSBvZiB0aGlzIHZhcmlhYmxlIGlzIGZvciBzdGF0aWMvbG9jYWwgYXJyYXkgZGltZW5zaW9uLiBOZXZlciB1c2UgaXQgaW4KKyAqIGxvb3Agb3IgaW4gYXJyYXkgaW5kZXggYWNjZXNzL2luZGV4IGNoZWNraW5nIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdQorICogbWFkZS4gKi8KKyNpZmRlZiBfX2FscGhhX18KKyNkZWZpbmUgT1BfTUFYX0NPVU5URVJTCTIwCisjZWxzZQorI2RlZmluZSBPUF9NQVhfQ09VTlRFUlMJOAorI2VuZGlmCisKKy8qKiBtYXhpbXVtIG51bWJlciBvZiBldmVudHMgYmV0d2VlbiBpbnRlcnJ1cHRzLiBDb3VudGVycyBhcmUgNDAgYml0cywgYnV0CisgKiBmb3IgY29udmVuaWVuY2Ugd2Ugb25seSB1c2UgMzIgYml0cy4gVGhlIHRvcCBiaXQgaXMgdXNlZCBmb3Igb3ZlcmZsb3cKKyAqIGRldGVjdGlvbiwgc28gdXNlciBjYW4gc2V0IHVwIHRvICgyXjMxKS0xICovCisjZGVmaW5lIE9QX01BWF9QRVJGX0NPVU5UCTIxNDc0ODM2NDdVTAorCisjZW5kaWYgLyogT1BfSFdfQ09ORklHX0ggKi8KZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2xpYm9wL29wX2h3X3NwZWNpZmljLmggYi9vcHJvZmlsZS0wLjkuNy9saWJvcC9vcF9od19zcGVjaWZpYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5ZjUwNWYKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9saWJvcC9vcF9od19zcGVjaWZpYy5oCkBAIC0wLDAgKzEsMTc2IEBACisvKiAKKyAqIEBmaWxlIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyBpbnRlcmZhY2VzCisgKiBAcmVtYXJrIENvcHlyaWdodCAyMDA4IEludGVsIENvcnBvcmF0aW9uCisgKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORworICogQGF1dGhvciBBbmRpIEtsZWVuCisgKi8KKworI2lmIGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykgCisKKy8qIEFzc3VtZSB3ZSBydW4gb24gdGhlIHNhbWUgaG9zdCBhcyB0aGUgcHJvZmlsZWUgKi8KKworI2RlZmluZSBudW1fdG9fbWFzayh4KSAoKDFVIDw8ICh4KSkgLSAxKQorCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgZWF4LCBlYngsIGVjeCwgZWR4OworfSBjcHVpZF9kYXRhOworCisjaWYgZGVmaW5lZChfX2kzODZfXykKK3N0YXRpYyBpbmxpbmUgdm9pZCBjcHVpZChpbnQgZnVuYywgY3B1aWRfZGF0YSAqIHApCit7CisJYXNtKCJwdXNoICUlZWJ4OyBjcHVpZDsgbW92ICUlZWJ4LCAlJWVzaTsgcG9wICUlZWJ4IgorCSAgICA6ICI9YSIgKHAtPmVheCksICI9UyIgKHAtPmVieCksICI9YyIgKHAtPmVjeCksICI9ZCIgKHAtPmVkeCkKKwkgICAgOiAiMCIgKGZ1bmMpKTsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgY3B1aWQoaW50IGZ1bmMsIGNwdWlkX2RhdGEgKiBwKQoreworCWFzbSgiY3B1aWQiCisJICAgIDogIj1hIiAocC0+ZWF4KSwgIj1iIiAocC0+ZWJ4KSwgIj1jIiAocC0+ZWN4KSwgIj1kIiAocC0+ZWR4KQorCSAgICA6ICIwIiAoZnVuYykpOworfQorI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgaW50IGNwdWlkX3ZlbmRvcihjaGFyICp2bmQpCit7CisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJdW5zaWduZWQgYixkLGM7CisJCX07CisJCWNoYXIgdlsxMl07CisJfSB2OworCWNwdWlkX2RhdGEgZGF0YTsKKwljcHVpZCgwLCAmZGF0YSk7CisJdi5iID0gZGF0YS5lYng7IHYuYyA9IGRhdGEuZWN4OyB2LmQgPSBkYXRhLmVkeDsKKwlyZXR1cm4gIXN0cm5jbXAodi52LCB2bmQsIDEyKTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgY3B1aWRfc2lnbmF0dXJlKCkKK3sKKwljcHVpZF9kYXRhIGRhdGE7CisJY3B1aWQoMSwgJmRhdGEpOworCXJldHVybiBkYXRhLmVheDsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgY3B1X21vZGVsKHVuc2lnbmVkIGludCBlYXgpCit7CisJdW5zaWduZWQgbW9kZWwgPSAoZWF4ICYgMHhmMCkgPj4gNDsKKwl1bnNpZ25lZCBleHRfbW9kZWwgPSAoZWF4ICYgMHhmMDAwMCkgPj4gMTI7CisJcmV0dXJuICBleHRfbW9kZWwgKyBtb2RlbDsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgY3B1X2ZhbWlseSh1bnNpZ25lZCBpbnQgZWF4KQoreworCXVuc2lnbmVkIGZhbWlseSA9ICAoZWF4ICYgMHhmMDApID4+IDg7CisJdW5zaWduZWQgZXh0X2ZhbWlseSA9IChlYXggJiAweGZmMDAwMDApID4+IDIwOworCXJldHVybiBleHRfZmFtaWx5ICsgZmFtaWx5OworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBjcHVfc3RlcHBpbmcodW5zaWduZWQgaW50IGVheCkKK3sKKwlyZXR1cm4gKGVheCAmIDB4Zik7Cit9CisKKworLyogV29yayBhcm91bmQgTmVoYWxlbSBzcGVjIHVwZGF0ZSBBQUo3OTogQ1BVSUQgaW5jb3JyZWN0bHkgaW5kaWNhdGVzCisgICB1bmhhbHRlZCByZWZlcmVuY2UgY3ljbGUgYXJjaGl0ZWN0dXJhbCBldmVudCBpcyBzdXBwb3J0ZWQuIFdlIGFzc3VtZQorICAgc3RlcHBpbmdzIGFmdGVyIEMwIHJlcG9ydCBjb3JyZWN0IGRhdGEgaW4gQ1BVSUQuICovCitzdGF0aWMgaW5saW5lIHZvaWQgd29ya2Fyb3VuZF9uZWhhbGVtX2Fhajc5KHVuc2lnbmVkICplYngpCit7CisJdW5zaWduZWQgZWF4OworCisJaWYgKCFjcHVpZF92ZW5kb3IoIkdlbnVpbmVJbnRlbCIpKQorCQlyZXR1cm47CisJZWF4ID0gY3B1aWRfc2lnbmF0dXJlKCk7CisJaWYgKGNwdV9mYW1pbHkoZWF4KSAhPSA2IHx8IGNwdV9tb2RlbChlYXgpICE9IDI2CisJCXx8IGNwdV9zdGVwcGluZyhlYXgpID4gNCkKKwkJcmV0dXJuOworCSplYnggfD0gKDEgPDwgMik7CS8qIGRpc2FibGUgdW5zdXBwb3J0ZWQgZXZlbnQgKi8KK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBhcmNoX2dldF9maWx0ZXIob3BfY3B1IGNwdV90eXBlKQoreworCWlmIChvcF9jcHVfYmFzZV90eXBlKGNwdV90eXBlKSA9PSBDUFVfQVJDSF9QRVJGTU9OKSB7IAorCQljcHVpZF9kYXRhIGRhdGE7CisJCWNwdWlkKDB4YSwgJmRhdGEpOworCQl3b3JrYXJvdW5kX25laGFsZW1fYWFqNzkoJmRhdGEuZWJ4KTsKKwkJcmV0dXJuIGRhdGEuZWJ4ICYgbnVtX3RvX21hc2soZGF0YS5lYXggPj4gMjQpOworCX0KKwlyZXR1cm4gLTFVOworfQorCitzdGF0aWMgaW5saW5lIGludCBhcmNoX251bV9jb3VudGVycyhvcF9jcHUgY3B1X3R5cGUpIAoreworCWlmIChvcF9jcHVfYmFzZV90eXBlKGNwdV90eXBlKSA9PSBDUFVfQVJDSF9QRVJGTU9OKSB7CisJCWNwdWlkX2RhdGEgZGF0YTsKKwkJY3B1aWQoMHhhLCAmZGF0YSk7CisJCXJldHVybiAoZGF0YS5lYXggPj4gOCkgJiAweGZmOworCX0KKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgYXJjaF9nZXRfY291bnRlcl9tYXNrKHZvaWQpCit7CisJY3B1aWRfZGF0YSBkYXRhOworCWNwdWlkKDB4YSwgJmRhdGEpOworCXJldHVybiBudW1fdG9fbWFzaygoZGF0YS5lYXggPj4gOCkgJiAweGZmKTsKK30KKworc3RhdGljIGlubGluZSBvcF9jcHUgb3BfY3B1X3NwZWNpZmljX3R5cGUob3BfY3B1IGNwdV90eXBlKQoreworCWlmIChjcHVfdHlwZSA9PSBDUFVfQVJDSF9QRVJGTU9OKSB7CisJCS8qIEFscmVhZHkga25vdyBpcyBJbnRlbCBmYW1pbHkgNiwgc28ganVzdCBjaGVjayB0aGUgbW9kZWwuICovCisJCWludCBtb2RlbCA9IGNwdV9tb2RlbChjcHVpZF9zaWduYXR1cmUoKSk7CisJCXN3aXRjaChtb2RlbCkgeworCQljYXNlIDB4MGY6CisJCWNhc2UgMHgxNjoKKwkJY2FzZSAweDE3OgorCQljYXNlIDB4MWQ6CisJCQlyZXR1cm4gQ1BVX0NPUkVfMjsKKwkJY2FzZSAweDFhOgorCQljYXNlIDB4MWU6CisJCWNhc2UgMHgxZjoKKwkJY2FzZSAweDJlOgorCQkJcmV0dXJuIENQVV9DT1JFX0k3OworCQljYXNlIDB4MWM6CisJCQlyZXR1cm4gQ1BVX0FUT007CisJCWNhc2UgMHgyNTogIC8qIFdlc3RtZXJlIG1vYmlsZS9kZXNrdG9wL2VudHJ5IGxldmVsIHNlcnZlciAqLworCQljYXNlIDB4MmM6ICAvKiBXZXN0bWVyZS1FUCAoSW50ZWwgWGVvbiA1NjAwIHNlcmllcykgKi8KKwkJY2FzZSAweDJmOiAgLyogV2VzdG1lcmUtRVggKi8KKwkJCXJldHVybiBDUFVfV0VTVE1FUkU7CisJCWNhc2UgMHgyYToKKwkJY2FzZSAweDJkOgorCQkJcmV0dXJuIENQVV9TQU5EWUJSSURHRTsKKwkJfQorCX0KKwlyZXR1cm4gY3B1X3R5cGU7Cit9CisKKyNlbHNlCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgYXJjaF9nZXRfZmlsdGVyKG9wX2NwdSBjcHVfdHlwZSkKK3sKKwkvKiBEbyBzb21ldGhpbmcgd2l0aCBwYXNzZWQgYXJnIHRvIHNodXQgdXAgdGhlIGNvbXBpbGVyIHdhcm5pbmcgKi8KKwlpZiAoY3B1X3R5cGUgIT0gQ1BVX05PX0dPT0QpCisJCXJldHVybiAwOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBhcmNoX251bV9jb3VudGVycyhvcF9jcHUgY3B1X3R5cGUpIAoreworCS8qIERvIHNvbWV0aGluZyB3aXRoIHBhc3NlZCBhcmcgdG8gc2h1dCB1cCB0aGUgY29tcGlsZXIgd2FybmluZyAqLworCWlmIChjcHVfdHlwZSAhPSBDUFVfTk9fR09PRCkKKwkJcmV0dXJuIC0xOworCXJldHVybiAtMTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBhcmNoX2dldF9jb3VudGVyX21hc2sodm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBvcF9jcHUgb3BfY3B1X3NwZWNpZmljX3R5cGUob3BfY3B1IGNwdV90eXBlKQoreworCXJldHVybiBjcHVfdHlwZTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvbGlib3Avb3BfaW50ZXJmYWNlLmggYi9vcHJvZmlsZS0wLjkuNy9saWJvcC9vcF9pbnRlcmZhY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTJlY2JkCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvbGlib3Avb3BfaW50ZXJmYWNlLmgKQEAgLTAsMCArMSw4NyBAQAorLyoqCisgKiBAZmlsZSBvcF9pbnRlcmZhY2UuaAorICoKKyAqIE1vZHVsZSAvIHVzZXIgc3BhY2UgaW50ZXJmYWNlIGZvciAyLjQKKyAqCisgKiBAcmVtYXJrIENvcHlyaWdodCAyMDAyIE9Qcm9maWxlIGF1dGhvcnMKKyAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCisgKgorICogQGF1dGhvciBKb2huIExldm9uCisgKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKKyAqLworCisjaWZuZGVmIE9QX0lOVEVSRkFDRV9ICisjZGVmaW5lIE9QX0lOVEVSRkFDRV9ICisKKyNpbmNsdWRlICJvcF9jb25maWcuaCIKKyNpbmNsdWRlICJvcF90eXBlcy5oIgorCisvKkB7XG5hbWUgbm90aWZpY2F0aW9ucyB0eXBlcyBlbmNvZGVkIGluIG9wX25vdGU6OnR5cGUgKi8KKy8qKiBmb3JrKCksdmZvcmsoKSxjbG9uZSgpICovCisjZGVmaW5lIE9QX0ZPUksgMQorLyoqIG1hcHBpbmcgKi8KKyNkZWZpbmUgT1BfTUFQIDIKKy8qKiBleGVjdmUoKSAqLworI2RlZmluZSBPUF9FWEVDIDQKKy8qKiBpbml0X21vZHVsZSgpICovCisjZGVmaW5lIE9QX0RST1BfTU9EVUxFUyA4CisvKiogZXhpdCgpICovCisjZGVmaW5lIE9QX0VYSVQgMTYKKy8qQH0qLworCisvKiogRGF0YSB0eXBlIHRvIHRyYW5zZmVyIHNhbXBsZXMgY291bnRzIGZyb20gdGhlIG1vZHVsZSB0byB0aGUgZGFlbW9uICovCitzdHJ1Y3Qgb3Bfc2FtcGxlIHsKKwl1bnNpZ25lZCBsb25nIGVpcDsgLyoqPCBlaXAgdmFsdWUgd2hlcmUgb2NjdXIgaW50ZXJydXB0ICovCisJdTMyIGNvdW50ZXI7IC8qKjwgY291bnRlciBuciAqLworCXUzMiBwaWQ7IC8qKjwgMzIgYml0cyBjYW4gaG9sZCBhbnkgcGlkICovCisJdTMyIHRnaWQ7IC8qKjwgYWx3YXlzIGVxdWFsIHRvIHBpZCBmb3Iga2VybmVsIDwgMi40LjAgKi8KK307CisKKy8qKiB0aGUgY3VycmVudCBrZXJuZWwtc2lkZSBwcm9maWxlciBzdGF0ZSAqLworZW51bSBvcHJvZl9zdGF0ZSB7CisJU1RPUFBFRCA9IDAsCisJU1RPUFBJTkcgPSAxLAorCVJVTk5JTkcgPSAyCit9OworIAorLyoqCisgKiBUaGUgaGVhZCBzdHJ1Y3R1cmUgb2YgYSBrZXJuZWwgc2FtcGxlIGJ1ZmZlci4KKyAqLworc3RydWN0IG9wX2J1ZmZlcl9oZWFkIHsKKwlpbnQgY3B1X25yOyAvKio8IHRoZSBDUFUgbnVtYmVyIG9mIHRoaXMgYnVmZmVyICovCisJc2l6ZV90IGNvdW50OyAvKio8IG51bWJlciBvZiBzYW1wbGVzIGluIHRoaXMgYnVmZmVyICovCisJZW51bSBvcHJvZl9zdGF0ZSBzdGF0ZTsgLyoqPCBjdXJyZW50IHByb2ZpbGVyIHN0YXRlICovCisJc3RydWN0IG9wX3NhbXBsZSBidWZmZXJbMF07IC8qKjwgdGhlIHNhbXBsZSBidWZmZXIgKi8KK30gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXykpOworCSAKKy8qKgorICogRGF0YSB0eXBlIHVzZWQgYnkgdGhlIG1vZHVsZSB0byBub3RpZnkgZGFlbW9uIG9mIGZvcmsvZXhpdC9tYXBwaW5nIGV0Yy4KKyAqIE1lYW5pbmdzIG9mIGZpZWxkcyBkZXBlbmQgb24gdGhlIHR5cGUgb2Ygbm90aWZpY2F0aW9uIGVuY29kZWQgaW4gdGhlIHR5cGUKKyAqIGZpZWxkLgorICogXHNhIE9QX0ZPUkssIE9QX0VYRUMsIE9QX01BUCwgT1BfRFJPUF9NT0RVTEVTIGFuZCBPUF9FWElUCisgKi8KK3N0cnVjdCBvcF9ub3RlIHsKKwl1bnNpZ25lZCBsb25nICAgYWRkcjsKKwl1bnNpZ25lZCBsb25nICAgbGVuOworCXVuc2lnbmVkIGxvbmcgICBvZmZzZXQ7CisJdW5zaWduZWQgaW50ICAgIGhhc2g7CisJdW5zaWduZWQgaW50CXBpZDsKKwl1bnNpZ25lZCBpbnQgICAgdGdpZDsKKwl1bnNpZ25lZCBzaG9ydAl0eXBlOworfTsKKworLyoqCisgKiBBIHBhdGggY29tcG9uZW50LiBEaXJlY3RvcnkgbmFtZSBhcmUgc3RvcmVkIGFzIGEgc3RhY2sgb2YgcGF0aCBjb21wb25lbnRzLgorICogTm90ZSB0aGFuIHRoZSBuYW1lIGluZGV4IGFjdHMgYWxzbyBhcyBhbiB1bmlxdWUgaWRlbnRpZmllcgorICovCitzdHJ1Y3Qgb3BfaGFzaF9pbmRleCB7CisJLyoqIGluZGV4IGluc2lkZSB0aGUgc3RyaW5nIHBvb2wgKi8KKwl1MzIgbmFtZTsKKwkvKiogcGFyZW50IGNvbXBvbmVudCwgemVybyBpZiB0aGlzIGNvbXBvbmVudCBpcyB0aGUgcm9vdCAqLworCXUzMiBwYXJlbnQ7Cit9IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18pKTsKKworLyoqIHNpemUgb2YgaGFzaCBtYXAgaW4gYnl0ZXMgKi8KKyNkZWZpbmUgT1BfSEFTSF9NQVBfU0laRSAoT1BfSEFTSF9NQVBfTlIgKiBzaXplb2Yoc3RydWN0IG9wX2hhc2hfaW5kZXgpICsgUE9PTF9TSVpFKQorCisjZW5kaWYgLyogT1BfSU5URVJGQUNFX0ggKi8KZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2xpYm9wL29wX21hbmdsZS5jIGIvb3Byb2ZpbGUtMC45LjcvbGlib3Avb3BfbWFuZ2xlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWVmZTViMQotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2xpYm9wL29wX21hbmdsZS5jCkBAIC0wLDAgKzEsMTA0IEBACisvKioKKyAqIEBmaWxlIG9wX21hbmdsZS5jCisgKiBNYW5nbGluZyBvZiBzYW1wbGUgZmlsZSBuYW1lcworICoKKyAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDIgT1Byb2ZpbGUgYXV0aG9ycworICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKKyAqCisgKiBAYXV0aG9yIEpvaG4gTGV2b24KKyAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQorICovCisKKyNpbmNsdWRlICJvcF9tYW5nbGUuaCIKKworI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNpbmNsdWRlICJvcF9saWJpYmVydHkuaCIKKworI2luY2x1ZGUgIm9wX3NhbXBsZV9maWxlLmgiCisjaW5jbHVkZSAib3BfY29uZmlnLmgiCisKK3N0YXRpYyB2b2lkIGFwcGVuZF9pbWFnZShjaGFyICogZGVzdCwgaW50IGZsYWdzLCBpbnQgYW5vbiwgY2hhciBjb25zdCAqIG5hbWUsIGNoYXIgY29uc3QgKiBhbm9uX25hbWUpCit7CisJaWYgKChmbGFncyAmIE1BTkdMRV9LRVJORUwpICYmICFzdHJjaHIobmFtZSwgJy8nKSkgeworCQlzdHJjYXQoZGVzdCwgIntrZXJufS8iKTsKKwl9IGVsc2UgaWYgKGFub24pIHsKKwkJc3RyY2F0KGRlc3QsICJ7YW5vbjoiKTsKKwkJc3RyY2F0KGRlc3QsIGFub25fbmFtZSk7CisJCXN0cmNhdChkZXN0LCJ9LyIpOworCX0gZWxzZSB7CisJCXN0cmNhdChkZXN0LCAie3Jvb3R9LyIpOworCX0KKworCXN0cmNhdChkZXN0LCBuYW1lKTsKKwlzdHJjYXQoZGVzdCwgIi8iKTsKK30KKworY2hhciAqIG9wX21hbmdsZV9maWxlbmFtZShzdHJ1Y3QgbWFuZ2xlX3ZhbHVlcyBjb25zdCAqIHZhbHVlcykKK3sKKwljaGFyICogbWFuZ2xlZDsKKwlzaXplX3QgbGVuOworCWludCBhbm9uID0gdmFsdWVzLT5mbGFncyAmIE1BTkdMRV9BTk9OOworCWludCBjZ19hbm9uID0gdmFsdWVzLT5mbGFncyAmIE1BTkdMRV9DR19BTk9OOworCS8qIGlmIGRlcF9uYW1lICE9IGltYWdlX25hbWUgd2UgbmVlZCB0byBpbnZlcnQgdGhlbSAoYW5kIHNvIHJldmVydCB0aGVtCisJICogdW5jb25kaXRpb25hbGx5IGJlY2F1c2UgaWYgdGhleSBhcmUgZXF1YWwgaXQgZG9lc24ndCBodXJ0IHRvIGludmVydAorCSAqIHRoZW0pLCBzZWUgUDozLCBGSVhNRTogdGhpcyBpcyBhIGJpdCB3ZWlyZHMsIHdlIHByb2xseSBuZWVkIHRvCisJICogcmV3b3JkIHBwX2ludGVyZmFjZSAqLworCWNoYXIgY29uc3QgKiBpbWFnZV9uYW1lID0gdmFsdWVzLT5kZXBfbmFtZTsKKwljaGFyIGNvbnN0ICogYW5vbl9uYW1lID0gdmFsdWVzLT5hbm9uX25hbWU7CisJY2hhciBjb25zdCAqIGRlcF9uYW1lID0gdmFsdWVzLT5pbWFnZV9uYW1lOworCWNoYXIgY29uc3QgKiBjZ19pbWFnZV9uYW1lID0gdmFsdWVzLT5jZ19pbWFnZV9uYW1lOworCisJbGVuID0gc3RybGVuKG9wX3NhbXBsZXNfY3VycmVudF9kaXIpICsgc3RybGVuKGRlcF9uYW1lKSArIDEKKwkJKyBzdHJsZW4odmFsdWVzLT5ldmVudF9uYW1lKSArIDEgKyBzdHJsZW4oaW1hZ2VfbmFtZSkgKyAxOworCisJaWYgKHZhbHVlcy0+ZmxhZ3MgJiBNQU5HTEVfQ0FMTEdSQVBIKQorCQlsZW4gKz0gc3RybGVuKGNnX2ltYWdlX25hbWUpICsgMTsKKworCWlmIChhbm9uIHx8IGNnX2Fub24pCisJCWxlbiArPSBzdHJsZW4oYW5vbl9uYW1lKTsKKworCS8qIHByb3Zpc2lvbiBmb3IgdGdpZCwgdGlkLCB1bml0X21hc2ssIGNwdSBhbmQgc29tZSB7cm9vdH0sIHtkZXB9LAorCSAqIHtrZXJufSwge2Fub259IGFuZCB7Y2d9IG1hcmtlciAqLworCS8qIEZJWE1FOiB0b28gdWdseSAqLworCWxlbiArPSAyNTY7CisKKwltYW5nbGVkID0geG1hbGxvYyhsZW4pOworCisJc3RyY3B5KG1hbmdsZWQsIG9wX3NhbXBsZXNfY3VycmVudF9kaXIpOworCWFwcGVuZF9pbWFnZShtYW5nbGVkLCB2YWx1ZXMtPmZsYWdzLCAwLCBpbWFnZV9uYW1lLCBhbm9uX25hbWUpOworCisJc3RyY2F0KG1hbmdsZWQsICJ7ZGVwfSIgIi8iKTsKKwlhcHBlbmRfaW1hZ2UobWFuZ2xlZCwgdmFsdWVzLT5mbGFncywgYW5vbiwgZGVwX25hbWUsIGFub25fbmFtZSk7CisKKwlpZiAodmFsdWVzLT5mbGFncyAmIE1BTkdMRV9DQUxMR1JBUEgpIHsKKwkJc3RyY2F0KG1hbmdsZWQsICJ7Y2d9IiAiLyIpOworCQlhcHBlbmRfaW1hZ2UobWFuZ2xlZCwgdmFsdWVzLT5mbGFncywgY2dfYW5vbiwKKwkJICAgICAgICAgICAgIGNnX2ltYWdlX25hbWUsIGFub25fbmFtZSk7CisJfQorCisJc3RyY2F0KG1hbmdsZWQsIHZhbHVlcy0+ZXZlbnRfbmFtZSk7CisJc3ByaW50ZihtYW5nbGVkICsgc3RybGVuKG1hbmdsZWQpLCAiLiVkLiVkLiIsCisJICAgICAgICB2YWx1ZXMtPmNvdW50LCB2YWx1ZXMtPnVuaXRfbWFzayk7CisKKwlpZiAodmFsdWVzLT5mbGFncyAmIE1BTkdMRV9UR0lEKSB7CisJCXNwcmludGYobWFuZ2xlZCArIHN0cmxlbihtYW5nbGVkKSwgIiVkLiIsIHZhbHVlcy0+dGdpZCk7CisJfSBlbHNlIHsKKwkJc3ByaW50ZihtYW5nbGVkICsgc3RybGVuKG1hbmdsZWQpLCAiJXMuIiwgImFsbCIpOworCX0KKworCWlmICh2YWx1ZXMtPmZsYWdzICYgTUFOR0xFX1RJRCkgeworCQlzcHJpbnRmKG1hbmdsZWQgKyBzdHJsZW4obWFuZ2xlZCksICIlZC4iLCB2YWx1ZXMtPnRpZCk7CisJfSBlbHNlIHsKKwkJc3ByaW50ZihtYW5nbGVkICsgc3RybGVuKG1hbmdsZWQpLCAiJXMuIiwgImFsbCIpOworCX0KKworCWlmICh2YWx1ZXMtPmZsYWdzICYgTUFOR0xFX0NQVSkgeworCQlzcHJpbnRmKG1hbmdsZWQgKyBzdHJsZW4obWFuZ2xlZCksICIlZCIsIHZhbHVlcy0+Y3B1KTsKKwl9IGVsc2UgeworCQlzcHJpbnRmKG1hbmdsZWQgKyBzdHJsZW4obWFuZ2xlZCksICIlcyIsICJhbGwiKTsKKwl9CisKKwlyZXR1cm4gbWFuZ2xlZDsKK30KZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2xpYm9wL29wX21hbmdsZS5oIGIvb3Byb2ZpbGUtMC45LjcvbGlib3Avb3BfbWFuZ2xlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWI2MDBkYwotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2xpYm9wL29wX21hbmdsZS5oCkBAIC0wLDAgKzEsNjYgQEAKKy8qKgorICogQGZpbGUgb3BfbWFuZ2xlLmgKKyAqIE1hbmdsaW5nIG9mIHNhbXBsZSBmaWxlIG5hbWVzCisgKgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMiBPUHJvZmlsZSBhdXRob3JzCisgKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORworICoKKyAqIEBhdXRob3IgSm9obiBMZXZvbgorICogQGF1dGhvciBQaGlsaXBwZSBFbGllCisgKi8KKworI2lmbmRlZiBPUF9NQU5HTEVfSAorI2RlZmluZSBPUF9NQU5HTEVfSAorCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworZW51bSBtYW5nbGVfZmxhZ3MgeworCU1BTkdMRV9OT05FICAgICAgPSAwLAorCU1BTkdMRV9DUFUgICAgICAgPSAoMSA8PCAwKSwKKwlNQU5HTEVfVEdJRCAgICAgID0gKDEgPDwgMSksCisJTUFOR0xFX1RJRCAgICAgICA9ICgxIDw8IDIpLAorCU1BTkdMRV9LRVJORUwgICAgPSAoMSA8PCAzKSwKKwlNQU5HTEVfQ0FMTEdSQVBIID0gKDEgPDwgNCksCisJTUFOR0xFX0FOT04gICAgICA9ICgxIDw8IDUpLAorCU1BTkdMRV9DR19BTk9OICAgPSAoMSA8PCA2KSwKK307CisKKy8qKgorICogVGVtcG9yYXJ5IHN0cnVjdHVyZSBmb3IgcGFzc2luZyBwYXJhbWV0ZXJzIHRvCisgKiBvcF9tYW5nbGVfZmlsZW5hbWUuCisgKi8KK3N0cnVjdCBtYW5nbGVfdmFsdWVzIHsKKwlpbnQgZmxhZ3M7CisKKwljaGFyIGNvbnN0ICogaW1hZ2VfbmFtZTsKKwljaGFyIGNvbnN0ICogYW5vbl9uYW1lOworCWNoYXIgY29uc3QgKiBkZXBfbmFtZTsKKwljaGFyIGNvbnN0ICogY2dfaW1hZ2VfbmFtZTsKKwljaGFyIGNvbnN0ICogZXZlbnRfbmFtZTsKKwlpbnQgY291bnQ7CisJdW5zaWduZWQgaW50IHVuaXRfbWFzazsKKwlwaWRfdCB0Z2lkOworCXBpZF90IHRpZDsKKwlpbnQgY3B1OworfTsKKworLyoqCisgKiBvcF9tYW5nbGVfZmlsZW5hbWUgLSBtYW5nbGUgYSBzYW1wbGUgZmlsZW5hbWUKKyAqIEBwYXJhbSB2YWx1ZXMgIHBhcmFtZXRlcnMgdG8gdXNlIGFzIG1hbmdsaW5nIGlucHV0CisgKgorICogU2VlIGFsc28gUFA6MyBmb3IgdGhlIGVuY29kaW5nIHNjaGVtZQorICoKKyAqIFJldHVybnMgYSBjaGFyKiBwb2ludGVyIHRvIHRoZSBtYW5nbGVkIHN0cmluZy4gQ2FsbGVyCisgKiBpcyByZXNwb25zaWJsZSBmb3IgZnJlZWluZyB0aGlzIHN0cmluZy4KKyAqLworY2hhciAqIG9wX21hbmdsZV9maWxlbmFtZShzdHJ1Y3QgbWFuZ2xlX3ZhbHVlcyBjb25zdCAqIHZhbHVlcyk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBPUF9NQU5HTEVfSCAqLwpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvbGlib3Avb3BfcGFyc2VfZXZlbnQuYyBiL29wcm9maWxlLTAuOS43L2xpYm9wL29wX3BhcnNlX2V2ZW50LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjNlYWRkNAotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2xpYm9wL29wX3BhcnNlX2V2ZW50LmMKQEAgLTAsMCArMSwxMjYgQEAKKy8qKgorICogQGZpbGUgb3BfcGFyc2VfZXZlbnQuYworICogZXZlbnQgcGFyc2luZworICoKKyAqIFlvdSBjYW4gaGF2ZSBzaWxsaW5lc3MgaGVyZS4KKyAqCisgKiBAcmVtYXJrIENvcHlyaWdodCAyMDAyIE9Qcm9maWxlIGF1dGhvcnMKKyAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCisgKgorICogQGF1dGhvciBKb2huIExldm9uCisgKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorCisjaW5jbHVkZSAib3BfcGFyc2VfZXZlbnQuaCIKKyNpbmNsdWRlICJvcF9zdHJpbmcuaCIKKworc3RhdGljIGNoYXIgKiBuZXh0X3BhcnQoY2hhciBjb25zdCAqKiBzdHIpCit7CisJY2hhciBjb25zdCAqIGM7CisJY2hhciAqIHJldDsKKworCWlmICgoKnN0cilbMF0gPT0gJ1wwJykKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAoKCpzdHIpWzBdID09ICc6JykKKwkJKysoKnN0cik7CisKKwljID0gKnN0cjsKKworCXdoaWxlICgqYyAhPSAnXDAnICYmICpjICE9ICc6JykKKwkJKytjOworCisJaWYgKGMgPT0gKnN0cikKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXQgPSBvcF94c3RybmR1cCgqc3RyLCBjIC0gKnN0cik7CisJKnN0ciArPSBjIC0gKnN0cjsKKwlyZXR1cm4gcmV0OworfQorCisKK3N0YXRpYyBpbnQgcGFyc2VfdWxvbmcoY2hhciBjb25zdCAqIHN0cikKK3sKKwl1bnNpZ25lZCBsb25nIHZhbHVlOworCWNoYXIgKiBlbmQ7CisJdmFsdWUgPSBzdHJ0b3VsKHN0ciwgJmVuZCwgMCk7CisJaWYgKGVuZCAmJiAqZW5kKSB7CisJCWZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBldmVudCBwYXJ0ICVzXG4iLCBzdHIpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorCisJcmV0dXJuIHZhbHVlOworfQorCisKK3NpemVfdCBwYXJzZV9ldmVudHMoc3RydWN0IHBhcnNlZF9ldmVudCAqIHBhcnNlZF9ldmVudHMsIHNpemVfdCBtYXhfZXZlbnRzLAorICAgICAgICAgICAgICAgICAgY2hhciBjb25zdCAqIGNvbnN0ICogZXZlbnRzKQoreworCXNpemVfdCBpID0gMDsKKworCXdoaWxlIChldmVudHNbaV0pIHsKKwkJY2hhciBjb25zdCAqIGNwID0gZXZlbnRzW2ldOworCQljaGFyICogcGFydCA9IG5leHRfcGFydCgmY3ApOworCisJCWlmIChpID49IG1heF9ldmVudHMpIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiVG9vIG1hbnkgZXZlbnRzIHNwZWNpZmllZDogQ1BVICIKKwkJCSAgICAgICAgIm9ubHkgaGFzICVsdSBjb3VudGVycy5cbiIsCisJCQkJKHVuc2lnbmVkIGxvbmcpIG1heF9ldmVudHMpOworCQkJZXhpdChFWElUX0ZBSUxVUkUpOworCQl9CisKKwkJaWYgKCFwYXJ0KSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIkludmFsaWQgZXZlbnQgJXNcbiIsIGNwKTsKKwkJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwkJfQorCisJCXBhcnNlZF9ldmVudHNbaV0ubmFtZSA9IHBhcnQ7CisKKwkJcGFydCA9IG5leHRfcGFydCgmY3ApOworCisJCWlmICghcGFydCkgeworCQkJZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIGNvdW50IGZvciBldmVudCAlc1xuIiwgZXZlbnRzW2ldKTsKKwkJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwkJfQorCisJCXBhcnNlZF9ldmVudHNbaV0uY291bnQgPSBwYXJzZV91bG9uZyhwYXJ0KTsKKwkJZnJlZShwYXJ0KTsKKworCQlwYXJzZWRfZXZlbnRzW2ldLnVuaXRfbWFzayA9IDA7CisJCXBhcnQgPSBuZXh0X3BhcnQoJmNwKTsKKworCQlpZiAocGFydCkgeworCQkJcGFyc2VkX2V2ZW50c1tpXS51bml0X21hc2tfdmFsaWQgPSAxOworCQkJaWYgKCFpc2RpZ2l0KCpwYXJ0KSkKKwkJCQlwYXJzZWRfZXZlbnRzW2ldLnVuaXRfbWFza19uYW1lID0gcGFydDsKKwkJCWVsc2UgeworCQkJCXBhcnNlZF9ldmVudHNbaV0udW5pdF9tYXNrID0gcGFyc2VfdWxvbmcocGFydCk7CisJCQkJZnJlZShwYXJ0KTsKKwkJCX0KKwkJfQorCisJCXBhcnNlZF9ldmVudHNbaV0ua2VybmVsID0gMTsKKwkJcGFydCA9IG5leHRfcGFydCgmY3ApOworCisJCWlmIChwYXJ0KSB7CisJCQlwYXJzZWRfZXZlbnRzW2ldLmtlcm5lbCA9IHBhcnNlX3Vsb25nKHBhcnQpOworCQkJZnJlZShwYXJ0KTsKKwkJfQorCisJCXBhcnNlZF9ldmVudHNbaV0udXNlciA9IDE7CisJCXBhcnQgPSBuZXh0X3BhcnQoJmNwKTsKKworCQlpZiAocGFydCkgeworCQkJcGFyc2VkX2V2ZW50c1tpXS51c2VyID0gcGFyc2VfdWxvbmcocGFydCk7CisJCQlmcmVlKHBhcnQpOworCQl9CisJCisJCSsraTsKKwl9CisKKwlyZXR1cm4gaTsKK30KZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2xpYm9wL29wX3BhcnNlX2V2ZW50LmggYi9vcHJvZmlsZS0wLjkuNy9saWJvcC9vcF9wYXJzZV9ldmVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1MTliMGQKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9saWJvcC9vcF9wYXJzZV9ldmVudC5oCkBAIC0wLDAgKzEsNDQgQEAKKy8qKgorICogQGZpbGUgb3BfcGFyc2VfZXZlbnQuaAorICogZXZlbnQgcGFyc2luZworICoKKyAqIFlvdSBjYW4gaGF2ZSBzaWxsaW5lc3MgaGVyZS4KKyAqCisgKiBAcmVtYXJrIENvcHlyaWdodCAyMDAyIE9Qcm9maWxlIGF1dGhvcnMKKyAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCisgKgorICogQGF1dGhvciBKb2huIExldm9uCisgKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKKyAqLworCisjaWZuZGVmIE9QX1BBUlNFX0VWRU5UX0gKKyNkZWZpbmUgT1BfUEFSU0VfRVZFTlRfSAorCisjaW5jbHVkZSA8c3RkZGVmLmg+CisKK3N0cnVjdCBwYXJzZWRfZXZlbnQgeworCWNoYXIgKiBuYW1lOworCWludCBjb3VudDsKKwlpbnQgdW5pdF9tYXNrOworCWNoYXIgKiB1bml0X21hc2tfbmFtZTsKKwlpbnQga2VybmVsOworCWludCB1c2VyOworCWludCB1bml0X21hc2tfdmFsaWQ7Cit9OworCisvKioKKyAqIEBwYXJhbSBwYXJzZWRfZXZlbnRzICBhcnJheSBvZiBldmVudHMgdG8gZmlsbCBpbgorICogQHBhcmFtIG1heF9ldmVudHMgIHNpemUgb2YgcGFyc2VkX2V2ZW50cworICogQHBhcmFtIGV2ZW50cyAgbnVsbCB0ZXJtaW5hdGVkIGFycmF5IG9mIGV2ZW50cyBzdHJpbmcgb24gdGhlIGZvcm0KKyAqICAgZXZlbnRfbmFtZTpjb3VudFs6dW5pdF9tYXNrOmtlcm5lbDp1c2VyXQorICoKKyAqIHBhcnNlIGV2ZW50cyBnaXZlbiBieSB0aGUgbmlsIHRlcm1pbmF0ZWQgYXJyYXkgZXZlbnRzIGFuZCBmaWxsIGluCisgKiBwYXJzZWRfZXZlbnRzIHdpdGggcmVzdWx0cy4gRXZlbnRzIHZhbGlkaXR5IGFyZSBub3QgY2hlY2tlZCBleGNlcHQuCisgKiBBIGZhdGFsIGVycm9yIG9jY3VyIGlmIG51bWJlciBvZiBldmVudHMgaXMgZ3JlYXRlciB0aGFuIG1heF9ldmVudHMuCisgKgorICogUmV0dXJuIHRoZSBudW1iZXIgb2YgZXZlbnRzIHBhcnNlZC4KKyAqLworc2l6ZV90IHBhcnNlX2V2ZW50cyhzdHJ1Y3QgcGFyc2VkX2V2ZW50ICogcGFyc2VkX2V2ZW50cywgc2l6ZV90IG1heF9ldmVudHMsCisgICAgICAgICAgICAgICAgICAgIGNoYXIgY29uc3QgKiBjb25zdCAqIGV2ZW50cyk7CisKKyNlbmRpZiAvKiAhT1BfUEFSU0VfRVZFTlRfSCAqLwpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvbGlib3Avb3Bfc2FtcGxlX2ZpbGUuaCBiL29wcm9maWxlLTAuOS43L2xpYm9wL29wX3NhbXBsZV9maWxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGY5ZjFkMAotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2xpYm9wL29wX3NhbXBsZV9maWxlLmgKQEAgLTAsMCArMSw0MiBAQAorLyoqCisgKiBAZmlsZSBvcF9zYW1wbGVfZmlsZS5oCisgKiBTYW1wbGUgZmlsZSBmb3JtYXQKKyAqCisgKiBAcmVtYXJrIENvcHlyaWdodCAyMDAyIE9Qcm9maWxlIGF1dGhvcnMKKyAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCisgKgorICogQGF1dGhvciBKb2huIExldm9uCisgKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKKyAqLworCisjaWZuZGVmIE9QX1NBTVBMRV9GSUxFX0gKKyNkZWZpbmUgT1BfU0FNUExFX0ZJTEVfSAorCisjaW5jbHVkZSAib3BfdHlwZXMuaCIKKworI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKworLyogaGVhZGVyIG9mIHRoZSBzYW1wbGUgZmlsZXMgKi8KK3N0cnVjdCBvcGRfaGVhZGVyIHsKKwl1OCBtYWdpY1s0XTsKKwl1MzIgdmVyc2lvbjsKKwl1MzIgY3B1X3R5cGU7CisJdTMyIGN0cl9ldmVudDsKKwl1MzIgY3RyX3VtOworCXUzMiBjdHJfY291bnQ7CisJLy8gZm9yIGNnIGZpbGUgdGhlIGZyb21fY2dfaXNfa2VybmVsCisJdTMyIGlzX2tlcm5lbDsKKwlkb3VibGUgY3B1X3NwZWVkOworCXRpbWVfdCBtdGltZTsKKwl1MzIgY2dfdG9faXNfa2VybmVsOworCS8qIHNwdV9wcm9maWxlPTEgc2F5cyBzYW1wbGUgZmlsZSBjb250YWlucyBDZWxsIEJFIFNQVSBwcm9maWxlIGRhdGEgKi8KKwl1MzIgc3B1X3Byb2ZpbGU7CisJdWludDY0X3QgZW1iZWRkZWRfb2Zmc2V0OworCXU2NCBhbm9uX3N0YXJ0OworCXU2NCBjZ190b19hbm9uX3N0YXJ0OworCS8qIGJpbmFyeSBjb21wYXRpYmlsaXR5IHJlc2VydmUgKi8KKwl1MzIgcmVzZXJ2ZWQxWzFdOworfTsKKworI2VuZGlmIC8qIE9QX1NBTVBMRV9GSUxFX0ggKi8KZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2xpYm9wL29wX3htbF9ldmVudHMuYyBiL29wcm9maWxlLTAuOS43L2xpYm9wL29wX3htbF9ldmVudHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MmUyY2EzCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvbGlib3Avb3BfeG1sX2V2ZW50cy5jCkBAIC0wLDAgKzEsMTE4IEBACisvKioKKyAqIEBmaWxlIG9wX3htbF9ldmVudHMuYworICogcm91dGluZXMgZm9yIGdlbmVyYXRpbmcgZXZlbnQgZmlsZXMgaW4gWE1MCisgKgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwOCBPUHJvZmlsZSBhdXRob3JzCisgKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORworICoKKyAqIEBhdXRob3IgRGF2ZSBOb211cmEKKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlICJvcF9ldmVudHMuaCIKKyNpbmNsdWRlICJvcF9saXN0LmgiCisjaW5jbHVkZSAib3BfY3B1X3R5cGUuaCIKKyNpbmNsdWRlICJvcF94bWxfb3V0LmgiCisKK3N0YXRpYyBvcF9jcHUgY3B1X3R5cGU7CisjZGVmaW5lIE1BWF9CVUZGRVIgMTYzODQKK3N0YXRpYyBjaGFyIGJ1ZmZlcltNQVhfQlVGRkVSXTsKKwordm9pZCBvcGVuX3htbF9ldmVudHMoY2hhciBjb25zdCAqIHRpdGxlLCBjaGFyIGNvbnN0ICogZG9jLCBvcF9jcHUgdGhlX2NwdV90eXBlKQoreworCWNoYXIgY29uc3QgKiBzY2hlbWFfdmVyc2lvbiA9ICIxLjEiOworCisJYnVmZmVyWzBdID0gJ1wwJzsKKwljcHVfdHlwZSA9IHRoZV9jcHVfdHlwZTsKKwlvcGVuX3htbF9lbGVtZW50KEhFTFBfRVZFTlRTLCAxLCBidWZmZXIsIE1BWF9CVUZGRVIpOworCWluaXRfeG1sX3N0cl9hdHRyKFNDSEVNQV9WRVJTSU9OLCBzY2hlbWFfdmVyc2lvbiwgYnVmZmVyLCBNQVhfQlVGRkVSKTsKKwljbG9zZV94bWxfZWxlbWVudChOT05FLCAxLCBidWZmZXIsIE1BWF9CVUZGRVIpOworCW9wZW5feG1sX2VsZW1lbnQoSEVMUF9IRUFERVIsIDEsIGJ1ZmZlciwgTUFYX0JVRkZFUik7CisJaW5pdF94bWxfc3RyX2F0dHIoSEVMUF9USVRMRSwgdGl0bGUsIGJ1ZmZlciwgTUFYX0JVRkZFUik7CisJaW5pdF94bWxfc3RyX2F0dHIoSEVMUF9ET0MsIGRvYywgYnVmZmVyLCBNQVhfQlVGRkVSKTsKKwljbG9zZV94bWxfZWxlbWVudChOT05FLCAwLCBidWZmZXIsIE1BWF9CVUZGRVIpOworCXByaW50ZigiJXMiLCBidWZmZXIpOworfQorCit2b2lkIGNsb3NlX3htbF9ldmVudHModm9pZCkKK3sKKwlidWZmZXJbMF0gPSAnXDAnOworCWNsb3NlX3htbF9lbGVtZW50KEhFTFBfRVZFTlRTLCAwLCBidWZmZXIsIE1BWF9CVUZGRVIpOworCXByaW50ZigiJXMiLCBidWZmZXIpOworfQorCitzdGF0aWMgdm9pZCB4bWxfZG9fYXJjaF9zcGVjaWZpY19ldmVudF9oZWxwKHN0cnVjdCBvcF9ldmVudCBjb25zdCAqZXZlbnQsCisJCQkJCSAgICBjaGFyICpidWZmZXIsIHNpemVfdCBzaXplKQoreworCXN3aXRjaCAoY3B1X3R5cGUpIHsKKwljYXNlIENQVV9QUEM2NF9DRUxMOgorCQlpbml0X3htbF9pbnRfYXR0cihIRUxQX0VWRU5UX0dST1VQLCBldmVudC0+dmFsIC8gMTAwLCBidWZmZXIsCisJCQkJICBzaXplKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorfQorCisKK3ZvaWQgeG1sX2hlbHBfZm9yX2V2ZW50KHN0cnVjdCBvcF9ldmVudCBjb25zdCAqIGV2ZW50KQoreworCXVpbnQgaTsKKwlpbnQgbnJfY291bnRlcnM7CisJaW50IGhhc19uZXN0ZWQgPSBzdHJjbXAoZXZlbnQtPnVuaXQtPm5hbWUsICJ6ZXJvIik7CisKKwlidWZmZXJbMF0gPSAnXDAnOworCW9wZW5feG1sX2VsZW1lbnQoSEVMUF9FVkVOVCwgMSwgYnVmZmVyLCBNQVhfQlVGRkVSKTsKKwlpbml0X3htbF9zdHJfYXR0cihIRUxQX0VWRU5UX05BTUUsIGV2ZW50LT5uYW1lLCBidWZmZXIsIE1BWF9CVUZGRVIpOworCXhtbF9kb19hcmNoX3NwZWNpZmljX2V2ZW50X2hlbHAoZXZlbnQsIGJ1ZmZlciwgTUFYX0JVRkZFUik7CisJaW5pdF94bWxfc3RyX2F0dHIoSEVMUF9FVkVOVF9ERVNDLCBldmVudC0+ZGVzYywgYnVmZmVyLCBNQVhfQlVGRkVSKTsKKworCW5yX2NvdW50ZXJzID0gb3BfZ2V0X25yX2NvdW50ZXJzKGNwdV90eXBlKTsKKwlpbml0X3htbF9pbnRfYXR0cihIRUxQX0NPVU5URVJfTUFTSywgZXZlbnQtPmNvdW50ZXJfbWFzaywgYnVmZmVyLAorCQkJICBNQVhfQlVGRkVSKTsKKwlpZiAoZXZlbnQtPmV4dCkKKwkJaW5pdF94bWxfc3RyX2F0dHIoSEVMUF9FWFQsIGV2ZW50LT5leHQsIGJ1ZmZlciwgTUFYX0JVRkZFUik7CisJaW5pdF94bWxfaW50X2F0dHIoSEVMUF9NSU5fQ09VTlQsIGV2ZW50LT5taW5fY291bnQsCisJCQkgIGJ1ZmZlciwgTUFYX0JVRkZFUik7CisKKwlpZiAoaGFzX25lc3RlZCkgeworCQljaGFyIHVtX3R5cGVbMTBdOworCQljbG9zZV94bWxfZWxlbWVudChOT05FLCAxLCBidWZmZXIsIE1BWF9CVUZGRVIpOworCQlvcGVuX3htbF9lbGVtZW50KEhFTFBfVU5JVF9NQVNLUywgMSwgYnVmZmVyLCBNQVhfQlVGRkVSKTsKKwkJaW5pdF94bWxfaW50X2F0dHIoSEVMUF9ERUZBVUxUX01BU0ssIGV2ZW50LT51bml0LT5kZWZhdWx0X21hc2ssCisJCQkJICBidWZmZXIsIE1BWF9CVUZGRVIpOworCQlzd2l0Y2ggKGV2ZW50LT51bml0LT51bml0X3R5cGVfbWFzayl7CisJCWNhc2UgdXRtX2JpdG1hc2s6CisJCQlzdHJuY3B5KHVtX3R5cGUsICJiaXRtYXNrIiwgc2l6ZW9mKHVtX3R5cGUpKTsKKwkJCWJyZWFrOworCQljYXNlIHV0bV9leGNsdXNpdmU6CisJCQlzdHJuY3B5KHVtX3R5cGUsICJleGNsdXNpdmUiLCBzaXplb2YodW1fdHlwZSkpOworCQkJYnJlYWs7CisJCWNhc2UgdXRtX21hbmRhdG9yeToKKwkJCXN0cm5jcHkodW1fdHlwZSwgIm1hbmRhdG9yeSIsIHNpemVvZih1bV90eXBlKSk7CisJCQlicmVhazsKKwkJfQorCQlpbml0X3htbF9zdHJfYXR0cihIRUxQX1VOSVRfTUFTS1NfQ0FURUdPUlksIHVtX3R5cGUsIGJ1ZmZlciwgTUFYX0JVRkZFUik7CisJCWNsb3NlX3htbF9lbGVtZW50KE5PTkUsIDEsIGJ1ZmZlciwgTUFYX0JVRkZFUik7CisJCWZvciAoaSA9IDA7IGkgPCBldmVudC0+dW5pdC0+bnVtOyBpKyspIHsKKwkJCW9wZW5feG1sX2VsZW1lbnQoSEVMUF9VTklUX01BU0ssIDEsIGJ1ZmZlciwgTUFYX0JVRkZFUik7CisJCQlpbml0X3htbF9pbnRfYXR0cihIRUxQX1VOSVRfTUFTS19WQUxVRSwKKwkJCQkJICBldmVudC0+dW5pdC0+dW1baV0udmFsdWUsCisJCQkJCSAgYnVmZmVyLCBNQVhfQlVGRkVSKTsKKwkJCWluaXRfeG1sX3N0cl9hdHRyKEhFTFBfVU5JVF9NQVNLX0RFU0MsCisJCQkJCSAgZXZlbnQtPnVuaXQtPnVtW2ldLmRlc2MsCisJCQkJCSAgYnVmZmVyLCBNQVhfQlVGRkVSKTsKKwkJCWlmIChldmVudC0+dW5pdC0+dW1baV0uZXh0cmEpCisJCQkJaW5pdF94bWxfaW50X2F0dHIoSEVMUF9VTklUX0VYVFJBX1ZBTFVFLAorCQkJCQkgICAgICAgICAgZXZlbnQtPnVuaXQtPnVtW2ldLmV4dHJhLAorCQkJCQkgICAgICAgICAgYnVmZmVyLCBNQVhfQlVGRkVSKTsKKwkJCWNsb3NlX3htbF9lbGVtZW50KE5PTkUsIDAsIGJ1ZmZlciwgTUFYX0JVRkZFUik7CisJCX0KKwkJY2xvc2VfeG1sX2VsZW1lbnQoSEVMUF9VTklUX01BU0tTLCAwLCBidWZmZXIsIE1BWF9CVUZGRVIpOworCX0KKwljbG9zZV94bWxfZWxlbWVudChoYXNfbmVzdGVkID8gSEVMUF9FVkVOVCA6IE5PTkUsIGhhc19uZXN0ZWQsCisJCQkgIGJ1ZmZlciwgTUFYX0JVRkZFUik7CisJcHJpbnRmKCIlcyIsIGJ1ZmZlcik7Cit9CisKZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2xpYm9wL29wX3htbF9ldmVudHMuaCBiL29wcm9maWxlLTAuOS43L2xpYm9wL29wX3htbF9ldmVudHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMWUwOTJlCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvbGlib3Avb3BfeG1sX2V2ZW50cy5oCkBAIC0wLDAgKzEsMjAgQEAKKy8qKgorICogQGZpbGUgb3BfeG1sX2V2ZW50cy5oCisgKiByb3V0aW5lcyBmb3IgZ2VuZXJhdGluZyBldmVudCBmaWxlcyBpbiBYTUwKKyAqCisgKiBAcmVtYXJrIENvcHlyaWdodCAyMDA4IE9Qcm9maWxlIGF1dGhvcnMKKyAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCisgKgorICogQGF1dGhvciBEYXZlIE5vbXVyYQorICovCisKKyNpZm5kZWYgT1BfWE1MX0VWRU5UU19ICisjZGVmaW5lIE9QX1hNTF9FVkVOVFNfSAorCisjaW5jbHVkZSAib3BfZXZlbnRzLmgiCisKK3ZvaWQgeG1sX2hlbHBfZm9yX2V2ZW50KHN0cnVjdCBvcF9ldmVudCBjb25zdCAqIGV2ZW50KTsKK3ZvaWQgb3Blbl94bWxfZXZlbnRzKGNoYXIgY29uc3QgKiB0aXRsZSwgY2hhciBjb25zdCAqIGRvYywgb3BfY3B1IGNwdV90eXBlKTsKK3ZvaWQgY2xvc2VfeG1sX2V2ZW50cyh2b2lkKTsKKworI2VuZGlmIC8qIE9QX1hNTF9FVkVOVFNfSCAqLwpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvbGlib3Avb3BfeG1sX291dC5jIGIvb3Byb2ZpbGUtMC45LjcvbGlib3Avb3BfeG1sX291dC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiM2RlZWEKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9saWJvcC9vcF94bWxfb3V0LmMKQEAgLTAsMCArMSwyNjkgQEAKKy8qKgorICogQGZpbGUgb3BfeG1sX291dC5jCisgKiBDIHV0aWxpdHkgcm91dGluZXMgZm9yIHdyaXRpbmcgWE1MCisgKgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwOCBPUHJvZmlsZSBhdXRob3JzCisgKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORworICoKKyAqIEBhdXRob3IgRGF2ZSBOb211cmEKKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlICJvcF94bWxfb3V0LmgiCisKK2NoYXIgY29uc3QgKiB4bWxfdGFnX21hcFtdID0geworCSJOT05FIiwKKwkiaWQiLAorCSJwcm9maWxlIiwKKwkJInByb2Nlc3NvciIsCisJCSJjcHV0eXBlIiwKKwkJInRpdGxlIiwKKwkJInNjaGVtYXZlcnNpb24iLAorCQkibWh6IiwKKwkic2V0dXAiLAorCSJ0aW1lcnNldHVwIiwKKwkJInJ0Y2ludGVycnVwdHMiLAorCSJldmVudHNldHVwIiwKKwkJImV2ZW50bmFtZSIsCisJCSJ1bml0bWFzayIsCisJCSJzZXR1cGNvdW50IiwKKwkJInNlcGFyYXRlZGNwdXMiLAorCSJvcHRpb25zIiwKKwkJInNlc3Npb24iLCAiZGVidWdpbmZvIiwgImRldGFpbHMiLCAiZXhjbHVkZWRlcGVuZGVudCIsCisJCSJleGNsdWRlc3ltYm9scyIsICJpbWFnZXBhdGgiLCAiaW5jbHVkZXN5bWJvbHMiLCAibWVyZ2UiLAorCSJjbGFzc2VzIiwKKwkiY2xhc3MiLAorCQkiY3B1IiwKKwkJImV2ZW50IiwKKwkJIm1hc2siLAorCSJwcm9jZXNzIiwKKwkJInBpZCIsCisJInRocmVhZCIsCisJCSJ0aWQiLAorCSJiaW5hcnkiLAorCSJtb2R1bGUiLAorCQkibmFtZSIsCisJImNhbGxlcnMiLAorCSJjYWxsZWVzIiwKKwkic3ltYm9sIiwKKwkJImlkcmVmIiwKKwkJInNlbGYiLAorCQkiZGV0YWlsbG8iLAorCQkiZGV0YWlsaGkiLAorCSJzeW1ib2x0YWJsZSIsCisJInN5bWJvbGRhdGEiLAorCQkic3RhcnRpbmdhZGRyIiwKKwkJImZpbGUiLAorCQkibGluZSIsCisJCSJjb2RlbGVuZ3RoIiwKKwkic3VtbWFyeWRhdGEiLAorCSJzYW1wbGVkYXRhIiwKKwkiY291bnQiLAorCSJkZXRhaWx0YWJsZSIsCisJInN5bWJvbGRldGFpbHMiLAorCSJkZXRhaWxkYXRhIiwKKwkJInZtYW9mZnNldCIsCisJImJ5dGVzdGFibGUiLAorCSJieXRlcyIsCisJImhlbHBfZXZlbnRzIiwKKwkiaGVhZGVyIiwKKwkJInRpdGxlIiwKKwkJImRvYyIsCisJImV2ZW50IiwKKwkJImV2ZW50X25hbWUiLAorCQkiZ3JvdXAiLAorCQkiZGVzYyIsCisJCSJjb3VudGVyX21hc2siLAorCQkibWluX2NvdW50IiwKKwkJImV4dCIsCisJInVuaXRfbWFza3MiLAorCQkiZGVmYXVsdCIsCisJCSJjYXRlZ29yeSIsCisJInVuaXRfbWFzayIsCisJCSJtYXNrIiwKKwkJImRlc2MiLAorCQkiZXh0cmEiCit9OworCisjZGVmaW5lIE1BWF9CVUZfTEVOIDIwNDgKK2NoYXIgY29uc3QgKiB4bWxfdGFnX25hbWUodGFnX3QgdGFnKQoreworCXJldHVybiB4bWxfdGFnX21hcFt0YWddOworfQorCisKK3ZvaWQgb3Blbl94bWxfZWxlbWVudCh0YWdfdCB0YWcsIGludCB3aXRoX2F0dHJzLCBjaGFyICpidWZmZXIsIHNpemVfdCBtYXgpCit7CisJY2hhciAqYnVmOworCWludCBzaXplLCByZXQ7CisKKwlidWZmZXJbbWF4IC0gMV0gPSAnXDAnOworCXNpemUgPSBzdHJsZW4oYnVmZmVyKTsKKwlidWYgPSAmYnVmZmVyW3NpemVdOworCXNpemUgPSBtYXggLSAxIC0gc2l6ZTsKKworCXJldCA9IHNucHJpbnRmKGJ1Ziwgc2l6ZSwgIjwlcyVzIiwgeG1sX3RhZ19uYW1lKHRhZyksCisJCSAgICAgICAod2l0aF9hdHRycyA/ICIgIiA6ICI+XG4iKSk7CisKKwlpZiAocmV0IDwgMCB8fCByZXQgPj0gc2l6ZSkgeworCQlmcHJpbnRmKHN0ZGVyciwib3Blbl94bWxfZWxlbWVudDogc25wcmludGYgZmFpbGVkXG4iKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KK30KKworCit2b2lkIGNsb3NlX3htbF9lbGVtZW50KHRhZ190IHRhZywgaW50IGhhc19uZXN0ZWQsIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IG1heCkKK3sKKwljaGFyICpidWY7CisJaW50IHNpemUsIHJldDsKKworCWJ1ZmZlclttYXggLSAxXSA9ICdcMCc7CisJc2l6ZSA9IHN0cmxlbihidWZmZXIpOworCWJ1ZiA9ICZidWZmZXJbc2l6ZV07CisJc2l6ZSA9IG1heCAtIDEgLSBzaXplOworCisJaWYgKHRhZyA9PSBOT05FKQorCQlyZXQgPSBzbnByaW50ZihidWYsIHNpemUsICIlc1xuIiwgKGhhc19uZXN0ZWQgPyAiPiIgOiAiLz4iKSk7CisJZWxzZQorCQlyZXQgPSBzbnByaW50ZihidWYsIHNpemUsICI8LyVzPlxuIiwgeG1sX3RhZ19uYW1lKHRhZykpOworCisJaWYgKHJldCA8IDAgfHwgcmV0ID49IHNpemUpIHsKKwkJZnByaW50ZihzdGRlcnIsICJjbG9zZV94bWxfZWxlbWVudDogc25wcmludGYgZmFpbGVkXG4iKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KK30KKworCit2b2lkIGluaXRfeG1sX2ludF9hdHRyKHRhZ190IGF0dHIsIGludCB2YWx1ZSwgY2hhciAqYnVmZmVyLCBzaXplX3QgbWF4KQoreworCWNoYXIgKmJ1ZjsKKwlpbnQgc2l6ZSwgcmV0OworCisJYnVmZmVyW21heCAtIDFdID0gJ1wwJzsKKwlzaXplID0gc3RybGVuKGJ1ZmZlcik7CisJYnVmID0gJmJ1ZmZlcltzaXplXTsKKwlzaXplID0gbWF4IC0gMSAtIHNpemU7CisKKwlyZXQgPSBzbnByaW50ZihidWYsIHNpemUsICIgJXM9XCIlZFwiIiwgeG1sX3RhZ19uYW1lKGF0dHIpLCB2YWx1ZSk7CisKKwlpZiAocmV0IDwgMCB8fCByZXQgPj0gc2l6ZSkgeworCQlmcHJpbnRmKHN0ZGVyciwiaW5pdF94bWxfaW50X2F0dHI6IHNucHJpbnRmIGZhaWxlZFxuIik7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9Cit9CisKKwordm9pZCBpbml0X3htbF9kYmxfYXR0cih0YWdfdCBhdHRyLCBkb3VibGUgdmFsdWUsIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IG1heCkKK3sKKwljaGFyICpidWY7CisJaW50IHNpemUsIHJldDsKKworCWJ1ZmZlclttYXggLSAxXSA9ICdcMCc7CisJc2l6ZSA9IHN0cmxlbihidWZmZXIpOworCWJ1ZiA9ICZidWZmZXJbc2l6ZV07CisJc2l6ZSA9IG1heCAtIDEgLSBzaXplOworCisJcmV0ID0gc25wcmludGYoYnVmLCBzaXplLCAiICVzPVwiJS4yZlwiIiwgeG1sX3RhZ19uYW1lKGF0dHIpLCB2YWx1ZSk7CisKKwlpZiAocmV0IDwgMCB8fCByZXQgPj0gc2l6ZSkgeworCQlmcHJpbnRmKHN0ZGVyciwgImluaXRfeG1sX2RibF9hdHRyOiBzbnByaW50ZiBmYWlsZWRcbiIpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorfQorCisKK3N0YXRpYyB2b2lkIHhtbF9xdW90ZShjaGFyIGNvbnN0ICpzdHIsIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IG1heCkKK3sKKwljaGFyICpidWY7CisJY2hhciAqcXVvdGU7CisJY2hhciAqcG9zID0gKGNoYXIqKXN0cjsKKwlzaXplX3Qgc2l6ZTsKKwlpbnQgcmV0OworCisJYnVmZmVyW21heCAtIDFdID0gJ1wwJzsKKwlzaXplID0gc3RybGVuKGJ1ZmZlcik7CisJYnVmID0gJmJ1ZmZlcltzaXplXTsKKwlzaXplID0gbWF4IC0gMSAtIHNpemU7CisKKwlpZiAoc2l6ZSA8IHN0cmxlbihwb3MpICsgMikKKwkJZ290byBFcnJvcjsKKworCSpidWYgPSAnIic7CisJYnVmKys7CisJc2l6ZS0tOworCisJd2hpbGUgKCpwb3MpIHsKKwkJc3dpdGNoKCpwb3MpIHsKKwkJY2FzZSAnJic6CisJCQlxdW90ZSA9ICImYW1wOyI7CisJCQlicmVhazsKKwkJY2FzZSAnPCc6CisJCQlxdW90ZSA9ICImbHQ7IjsKKwkJCWJyZWFrOworCQljYXNlICc+JzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHF1b3RlID0gIiZndDsiOworCQkJYnJlYWs7CisJCWNhc2UgJyInOgorCQkJcXVvdGUgPSAiJnF1b3Q7IjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJKmJ1ZiA9ICpwb3M7CisJCQlwb3MrKzsKKwkJCWJ1ZisrOworCQkJc2l6ZS0tOworCQkJY29udGludWU7CisJCX0KKworCQlwb3MrKzsKKwkJcmV0ID0gc25wcmludGYoYnVmLCBzaXplLCAiJXMiLCBxdW90ZSk7CisJCWlmIChyZXQgPCAwIHx8IHJldCA+PSAoaW50KXNpemUpCisJCQlnb3RvIEVycm9yOworCQlidWYgKz0gcmV0OworCQlzaXplIC09IHJldDsKKwkJaWYgKHNpemUgPCBzdHJsZW4ocG9zKSkKKwkJCWdvdG8gRXJyb3I7CisJfQorCisJaWYgKCFzaXplKQorCQlnb3RvIEVycm9yOworCisJKmJ1ZiA9ICciJzsKKwlidWYrKzsKKwkqYnVmID0gJ1wwJzsKKworCXJldHVybjsKKworRXJyb3I6CisJZnByaW50ZihzdGRlcnIsInF1b3RlX3N0cjogYnVmZmVyIG92ZXJmbG93XG4iKTsKKwlleGl0KEVYSVRfRkFJTFVSRSk7Cit9CisKKwordm9pZCBpbml0X3htbF9zdHJfYXR0cih0YWdfdCBhdHRyLCBjaGFyIGNvbnN0ICpzdHIsIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IG1heCkKK3sKKwljaGFyICpidWY7CisJaW50IHNpemUsIHJldDsKKworCWJ1ZmZlclttYXggLSAxXSA9ICdcMCc7CisJc2l6ZSA9IHN0cmxlbihidWZmZXIpOworCWJ1ZiA9ICZidWZmZXJbc2l6ZV07CisJc2l6ZSA9IG1heCAtIDEgLSBzaXplOworCisJcmV0ID0gc25wcmludGYoYnVmLCBzaXplLCAiICVzPSIsIHhtbF90YWdfbmFtZShhdHRyKSk7CisJaWYgKHJldCA8IDAgfHwgcmV0ID49IHNpemUpCisJCWdvdG8gRXJyb3I7CisKKwlidWYgKz0gcmV0OworCXNpemUgLT0gcmV0OworCisJaWYgKCFzaXplKQorCQlnb3RvIEVycm9yOworCisJeG1sX3F1b3RlKHN0ciwgYnVmLCBzaXplKTsKKwlyZXR1cm47CitFcnJvcjoKKwlmcHJpbnRmKHN0ZGVyciwiaW5pdF94bWxfc3RyX2F0dHI6IHNucHJpbnRmIGZhaWxlZFxuIik7CisJZXhpdChFWElUX0ZBSUxVUkUpOworfQpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvbGlib3Avb3BfeG1sX291dC5oIGIvb3Byb2ZpbGUtMC45LjcvbGlib3Avb3BfeG1sX291dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0NGJkNTEKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9saWJvcC9vcF94bWxfb3V0LmgKQEAgLTAsMCArMSw3NSBAQAorLyoqCisgKiBAZmlsZSBvcF94bWxfb3V0LmgKKyAqIHV0aWxpdHkgcm91dGluZXMgZm9yIHdyaXRpbmcgWE1MCisgKgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwOCBPUHJvZmlsZSBhdXRob3JzCisgKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORworICoKKyAqIEBhdXRob3IgRGF2ZSBOb211cmEKKyAqLworCisjaWZuZGVmIE9QX1hNTF9PVVRfSAorI2RlZmluZSBPUF9YTUxfT1VUX0gKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCit0eXBlZGVmIGVudW0geworCU5PTkU9MCwgVEFCTEVfSUQsIFBST0ZJTEUsCisJUFJPQ0VTU09SLCBDUFVfTkFNRSwgVElUTEUsIFNDSEVNQV9WRVJTSU9OLCBNSFosCisJU0VUVVAsIAorCVRJTUVSX1NFVFVQLCBSVENfSU5URVJSVVBUUywKKwlFVkVOVF9TRVRVUCwgRVZFTlRfTkFNRSwgVU5JVF9NQVNLLCBTRVRVUF9DT1VOVCwgU0VQQVJBVEVEX0NQVVMsCisJT1BUSU9OUywgU0VTU0lPTiwgREVCVUdfSU5GTywgREVUQUlMUywgRVhDTFVERV9ERVBFTkRFTlQsIEVYQ0xVREVfU1lNQk9MUywKKwkJSU1BR0VfUEFUSCwgSU5DTFVERV9TWU1CT0xTLCBNRVJHRSwKKwlDTEFTU0VTLAorCUNMQVNTLAorCQlDUFVfTlVNLAorCQlFVkVOVF9OVU0sCisJCUVWRU5UX01BU0ssCisJUFJPQ0VTUywgUFJPQ19JRCwKKwlUSFJFQUQsIFRIUkVBRF9JRCwKKwlCSU5BUlksCisJTU9EVUxFLCBOQU1FLAorCUNBTExFUlMsIENBTExFRVMsCisJU1lNQk9MLCBJRF9SRUYsIFNFTEZSRUYsIERFVEFJTF9MTywgREVUQUlMX0hJLAorCVNZTUJPTF9UQUJMRSwKKwlTWU1CT0xfREFUQSwgU1RBUlRJTkdfQUREUiwKKwkJU09VUkNFX0ZJTEUsIFNPVVJDRV9MSU5FLCBDT0RFX0xFTkdUSCwKKwlTVU1NQVJZLCBTQU1QTEUsCisJQ09VTlQsCisJREVUQUlMX1RBQkxFLCBTWU1CT0xfREVUQUlMUywgREVUQUlMX0RBVEEsIFZNQSwKKwlCWVRFU19UQUJMRSwgQllURVMsCisJSEVMUF9FVkVOVFMsCisJSEVMUF9IRUFERVIsCisJSEVMUF9USVRMRSwKKwlIRUxQX0RPQywKKwlIRUxQX0VWRU5ULAorCUhFTFBfRVZFTlRfTkFNRSwKKwlIRUxQX0VWRU5UX0dST1VQLAorCUhFTFBfRVZFTlRfREVTQywKKwlIRUxQX0NPVU5URVJfTUFTSywKKwlIRUxQX01JTl9DT1VOVCwKKwlIRUxQX0VYVCwKKwlIRUxQX1VOSVRfTUFTS1MsCisJSEVMUF9ERUZBVUxUX01BU0ssCisJSEVMUF9VTklUX01BU0tTX0NBVEVHT1JZLAorCUhFTFBfVU5JVF9NQVNLLAorCUhFTFBfVU5JVF9NQVNLX1ZBTFVFLAorCUhFTFBfVU5JVF9NQVNLX0RFU0MsCisJSEVMUF9VTklUX0VYVFJBX1ZBTFVFLAorCX0gdGFnX3Q7CisKK2NoYXIgY29uc3QgKiB4bWxfdGFnX25hbWUodGFnX3QgdGFnKTsKK3ZvaWQgb3Blbl94bWxfZWxlbWVudCh0YWdfdCB0YWcsIGludCB3aXRoX2F0dHJzLCBjaGFyICpidWZmZXIsIHNpemVfdCBzaXplKTsKK3ZvaWQgY2xvc2VfeG1sX2VsZW1lbnQodGFnX3QgdGFnLCBpbnQgaGFzX25lc3RlZCwgY2hhciAqYnVmZmVyLCBzaXplX3Qgc2l6ZSk7Cit2b2lkIGluaXRfeG1sX2ludF9hdHRyKHRhZ190IGF0dHIsIGludCB2YWx1ZSwgY2hhciAqYnVmZmVyLCBzaXplX3Qgc2l6ZSk7Cit2b2lkIGluaXRfeG1sX2RibF9hdHRyKHRhZ190IGF0dHIsIGRvdWJsZSB2YWx1ZSwgY2hhciAqYnVmZmVyLCBzaXplX3Qgc2l6ZSk7Cit2b2lkIGluaXRfeG1sX3N0cl9hdHRyKHRhZ190IGF0dHIsIGNoYXIgY29uc3QgKnN0ciwgY2hhciAqYnVmZmVyLCBzaXplX3Qgc2l6ZSk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBPUF9YTUxfT1VUX0ggKi8KZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2xpYm9wL3Rlc3RzL01ha2VmaWxlLmFtIGIvb3Byb2ZpbGUtMC45LjcvbGlib3AvdGVzdHMvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQxNjBjMwotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2xpYm9wL3Rlc3RzL01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsMzUgQEAKK0FNX0NQUEZMQUdTID0gXAorCS1JICR7dG9wX3NyY2Rpcn0vbGlidXRpbCBcCisJLUkgJHt0b3Bfc3JjZGlyfS9saWJvcAorCitBTV9DRkxBR1MgPSBAT1BfQ0ZMQUdTQCAtRE9QUk9GSUxFX1NSQ0RJUj1cIkB0b3Bfc3JjZGlyQFwiCisKK0NPTU1PTl9MSUJTID0gLi4vbGlib3AuYSAuLi8uLi9saWJ1dGlsL2xpYnV0aWwuYQorCitMSUJTID0gQExJQkVSVFlfTElCU0AKKworY2hlY2tfUFJPR1JBTVMgPSBcCisJY3B1X3R5cGVfdGVzdHMgXAorCXBhcnNlX2V2ZW50X3Rlc3RzIFwKKwlsb2FkX2V2ZW50c19maWxlc190ZXN0cyBcCisJYWxsb2NfY291bnRlcl90ZXN0cyBcCisJbWFuZ2xlX3Rlc3RzCisKK0VYVFJBX0RJU1QgPSB1dGY4X2NoZWNrZXIuc2gKKworY3B1X3R5cGVfdGVzdHNfU09VUkNFUyA9IGNwdV90eXBlX3Rlc3RzLmMKK2NwdV90eXBlX3Rlc3RzX0xEQUREID0gJHtDT01NT05fTElCU30KKworcGFyc2VfZXZlbnRfdGVzdHNfU09VUkNFUyA9IHBhcnNlX2V2ZW50X3Rlc3RzLmMKK3BhcnNlX2V2ZW50X3Rlc3RzX0xEQUREID0gJHtDT01NT05fTElCU30KKworYWxsb2NfY291bnRlcl90ZXN0c19TT1VSQ0VTID0gYWxsb2NfY291bnRlcl90ZXN0cy5jCithbGxvY19jb3VudGVyX3Rlc3RzX0xEQUREID0gJHtDT01NT05fTElCU30KKworbG9hZF9ldmVudHNfZmlsZXNfdGVzdHNfU09VUkNFUyA9IGxvYWRfZXZlbnRzX2ZpbGVzX3Rlc3RzLmMKK2xvYWRfZXZlbnRzX2ZpbGVzX3Rlc3RzX0xEQUREID0gJHtDT01NT05fTElCU30KKworbWFuZ2xlX3Rlc3RzX1NPVVJDRVMgPSBtYW5nbGVfdGVzdHMuYworbWFuZ2xlX3Rlc3RzX0xEQUREID0gJHtDT01NT05fTElCU30KKworVEVTVFMgPSAke2NoZWNrX1BST0dSQU1TfSB1dGY4X2NoZWNrZXIuc2gKZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2xpYm9wL3Rlc3RzL01ha2VmaWxlLmluIGIvb3Byb2ZpbGUtMC45LjcvbGlib3AvdGVzdHMvTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQzZmRlNwotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2xpYm9wL3Rlc3RzL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsNjczIEBACisjIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjExLjEgZnJvbSBNYWtlZmlsZS5hbS4KKyMgQGNvbmZpZ3VyZV9pbnB1dEAKKworIyBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsCisjIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyMgSW5jLgorIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAorIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCisjIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworQFNFVF9NQUtFQAorVlBBVEggPSBAc3JjZGlyQAorcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACitwa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAorYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAoraW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKK2luc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKK2luc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYworSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKK3RyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKK05PUk1BTF9JTlNUQUxMID0gOgorUFJFX0lOU1RBTEwgPSA6CitQT1NUX0lOU1RBTEwgPSA6CitOT1JNQUxfVU5JTlNUQUxMID0gOgorUFJFX1VOSU5TVEFMTCA9IDoKK1BPU1RfVU5JTlNUQUxMID0gOgorYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKK2hvc3RfdHJpcGxldCA9IEBob3N0QAorY2hlY2tfUFJPR1JBTVMgPSBjcHVfdHlwZV90ZXN0cyQoRVhFRVhUKSBwYXJzZV9ldmVudF90ZXN0cyQoRVhFRVhUKSBcCisJbG9hZF9ldmVudHNfZmlsZXNfdGVzdHMkKEVYRUVYVCkgYWxsb2NfY291bnRlcl90ZXN0cyQoRVhFRVhUKSBcCisJbWFuZ2xlX3Rlc3RzJChFWEVFWFQpCitURVNUUyA9ICQoY2hlY2tfUFJPR1JBTVMpIHV0ZjhfY2hlY2tlci5zaAorc3ViZGlyID0gbGlib3AvdGVzdHMKK0RJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmFtICQoc3JjZGlyKS9NYWtlZmlsZS5pbgorQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAorYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvbTQvYmludXRpbHMubTQgXAorCSQodG9wX3NyY2RpcikvbTQvYnVpbHRpbmV4cGVjdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jZWxsc3B1YmZkc3VwcG9ydC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jb21waWxlcm9wdGlvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jb25maWdtb2R1bGUubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY29weWlmY2hhbmdlLm00ICQodG9wX3NyY2RpcikvbTQvZG9jYm9vay5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9leHRyYWRpcnMubTQgJCh0b3Bfc3JjZGlyKS9tNC9maW5ka2VybmVsLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2tlcm5lbG9wdGlvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9rZXJuZWx2ZXJzaW9uLm00ICQodG9wX3NyY2RpcikvbTQvbGlidG9vbC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9sdG9wdGlvbnMubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdHN1Z2FyLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2x0dmVyc2lvbi5tNCAkKHRvcF9zcmNkaXIpL200L2x0fm9ic29sZXRlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L21hbGxvY2F0dHJpYnV0ZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9wb3B0Y29uc3QubTQgXAorCSQodG9wX3NyY2RpcikvbTQvcHJlY29tcGlsZWRoZWFkZXIubTQgJCh0b3Bfc3JjZGlyKS9tNC9xdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9yZXN1bHR5bi5tNCAkKHRvcF9zcmNkaXIpL200L3NzdHJlYW0ubTQgXAorCSQodG9wX3NyY2RpcikvbTQvdHlwZWRlZi5tNCAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5pbgorYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKKwkkKEFDTE9DQUxfTTQpCitta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAorQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAorQ09ORklHX0NMRUFOX0ZJTEVTID0KK0NPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9CithbV9hbGxvY19jb3VudGVyX3Rlc3RzX09CSkVDVFMgPSBhbGxvY19jb3VudGVyX3Rlc3RzLiQoT0JKRVhUKQorYWxsb2NfY291bnRlcl90ZXN0c19PQkpFQ1RTID0gJChhbV9hbGxvY19jb3VudGVyX3Rlc3RzX09CSkVDVFMpCithbGxvY19jb3VudGVyX3Rlc3RzX0RFUEVOREVOQ0lFUyA9ICQoQ09NTU9OX0xJQlMpCithbV9jcHVfdHlwZV90ZXN0c19PQkpFQ1RTID0gY3B1X3R5cGVfdGVzdHMuJChPQkpFWFQpCitjcHVfdHlwZV90ZXN0c19PQkpFQ1RTID0gJChhbV9jcHVfdHlwZV90ZXN0c19PQkpFQ1RTKQorY3B1X3R5cGVfdGVzdHNfREVQRU5ERU5DSUVTID0gJChDT01NT05fTElCUykKK2FtX2xvYWRfZXZlbnRzX2ZpbGVzX3Rlc3RzX09CSkVDVFMgPSAgXAorCWxvYWRfZXZlbnRzX2ZpbGVzX3Rlc3RzLiQoT0JKRVhUKQorbG9hZF9ldmVudHNfZmlsZXNfdGVzdHNfT0JKRUNUUyA9ICBcCisJJChhbV9sb2FkX2V2ZW50c19maWxlc190ZXN0c19PQkpFQ1RTKQorbG9hZF9ldmVudHNfZmlsZXNfdGVzdHNfREVQRU5ERU5DSUVTID0gJChDT01NT05fTElCUykKK2FtX21hbmdsZV90ZXN0c19PQkpFQ1RTID0gbWFuZ2xlX3Rlc3RzLiQoT0JKRVhUKQorbWFuZ2xlX3Rlc3RzX09CSkVDVFMgPSAkKGFtX21hbmdsZV90ZXN0c19PQkpFQ1RTKQorbWFuZ2xlX3Rlc3RzX0RFUEVOREVOQ0lFUyA9ICQoQ09NTU9OX0xJQlMpCithbV9wYXJzZV9ldmVudF90ZXN0c19PQkpFQ1RTID0gcGFyc2VfZXZlbnRfdGVzdHMuJChPQkpFWFQpCitwYXJzZV9ldmVudF90ZXN0c19PQkpFQ1RTID0gJChhbV9wYXJzZV9ldmVudF90ZXN0c19PQkpFQ1RTKQorcGFyc2VfZXZlbnRfdGVzdHNfREVQRU5ERU5DSUVTID0gJChDT01NT05fTElCUykKK0RFRkFVTFRfSU5DTFVERVMgPSAtSS5AYW1fX2lzcmNAIC1JJCh0b3BfYnVpbGRkaXIpCitkZXBjb21wID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9kZXBjb21wCithbV9fZGVwZmlsZXNfbWF5YmUgPSBkZXBmaWxlcworYW1fX212ID0gbXYgLWYKK0NPTVBJTEUgPSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgXAorCSQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKK0xUQ09NUElMRSA9ICQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSBcCisJLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpIFwKKwkkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpCitDQ0xEID0gJChDQykKK0xJTksgPSAkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgXAorCS0tbW9kZT1saW5rICQoQ0NMRCkgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAkKEFNX0xERkxBR1MpIFwKKwkkKExERkxBR1MpIC1vICRACitTT1VSQ0VTID0gJChhbGxvY19jb3VudGVyX3Rlc3RzX1NPVVJDRVMpICQoY3B1X3R5cGVfdGVzdHNfU09VUkNFUykgXAorCSQobG9hZF9ldmVudHNfZmlsZXNfdGVzdHNfU09VUkNFUykgJChtYW5nbGVfdGVzdHNfU09VUkNFUykgXAorCSQocGFyc2VfZXZlbnRfdGVzdHNfU09VUkNFUykKK0RJU1RfU09VUkNFUyA9ICQoYWxsb2NfY291bnRlcl90ZXN0c19TT1VSQ0VTKSBcCisJJChjcHVfdHlwZV90ZXN0c19TT1VSQ0VTKSAkKGxvYWRfZXZlbnRzX2ZpbGVzX3Rlc3RzX1NPVVJDRVMpIFwKKwkkKG1hbmdsZV90ZXN0c19TT1VSQ0VTKSAkKHBhcnNlX2V2ZW50X3Rlc3RzX1NPVVJDRVMpCitFVEFHUyA9IGV0YWdzCitDVEFHUyA9IGN0YWdzCithbV9fdHR5X2NvbG9ycyA9IFwKK3JlZD07IGdybj07IGxnbj07IGJsdT07IHN0ZD0KK0RJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCitBQ0xPQ0FMID0gQEFDTE9DQUxACitBTVRBUiA9IEBBTVRBUkAKK0FSID0gQEFSQAorQVVUT0NPTkYgPSBAQVVUT0NPTkZACitBVVRPSEVBREVSID0gQEFVVE9IRUFERVJACitBVVRPTUFLRSA9IEBBVVRPTUFLRUAKK0FXSyA9IEBBV0tACitCRkRfTElCUyA9IEBCRkRfTElCU0AKK0NBVF9FTlRSWV9FTkQgPSBAQ0FUX0VOVFJZX0VOREAKK0NBVF9FTlRSWV9TVEFSVCA9IEBDQVRfRU5UUllfU1RBUlRACitDQyA9IEBDQ0AKK0NDREVQTU9ERSA9IEBDQ0RFUE1PREVACitDRkxBR1MgPSBAQ0ZMQUdTQAorQ1BQID0gQENQUEAKK0NQUEZMQUdTID0gQENQUEZMQUdTQAorQ1hYID0gQENYWEAKK0NYWENQUCA9IEBDWFhDUFBACitDWFhERVBNT0RFID0gQENYWERFUE1PREVACitDWFhGTEFHUyA9IEBDWFhGTEFHU0AKK0NZR1BBVEhfVyA9IEBDWUdQQVRIX1dACitEQVRFID0gQERBVEVACitERUZTID0gQERFRlNACitERVBESVIgPSBAREVQRElSQAorRE9DQk9PS19ST09UID0gQERPQ0JPT0tfUk9PVEAKK0RTWU1VVElMID0gQERTWU1VVElMQAorRFVNUEJJTiA9IEBEVU1QQklOQAorRUNIT19DID0gQEVDSE9fQ0AKK0VDSE9fTiA9IEBFQ0hPX05ACitFQ0hPX1QgPSBARUNIT19UQAorRUdSRVAgPSBARUdSRVBACitFWEVFWFQgPSBARVhFRVhUQAorRVhUUkFfQ0ZMQUdTX01PRFVMRSA9IEBFWFRSQV9DRkxBR1NfTU9EVUxFQAorRkdSRVAgPSBARkdSRVBACitHUkVQID0gQEdSRVBACitJTlNUQUxMID0gQElOU1RBTExACitJTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAorSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKK0lOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAorSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKK0pBVkFfSE9NRURJUiA9IEBKQVZBX0hPTUVESVJACitLSU5DID0gQEtJTkNACitLU1JDID0gQEtTUkNACitLVkVSUyA9IEBLVkVSU0AKK0xEID0gQExEQAorTERGTEFHUyA9IEBMREZMQUdTQAorTElCRVJUWV9MSUJTID0gQExJQkVSVFlfTElCU0AKK0xJQk9CSlMgPSBATElCT0JKU0AKK0xJQlMgPSBATElCRVJUWV9MSUJTQAorTElCVE9PTCA9IEBMSUJUT09MQAorTElQTyA9IEBMSVBPQAorTE5fUyA9IEBMTl9TQAorTFRMSUJPQkpTID0gQExUTElCT0JKU0AKK01BS0VJTkZPID0gQE1BS0VJTkZPQAorTUtESVJfUCA9IEBNS0RJUl9QQAorTU9DID0gQE1PQ0AKK01PRElOU1RBTExESVIgPSBATU9ESU5TVEFMTERJUkAKK05NID0gQE5NQAorTk1FRElUID0gQE5NRURJVEAKK09CSkRVTVAgPSBAT0JKRFVNUEAKK09CSkVYVCA9IEBPQkpFWFRACitPUFJPRklMRV9ESVIgPSBAT1BST0ZJTEVfRElSQAorT1BST0ZJTEVfTU9EVUxFX0FSQ0ggPSBAT1BST0ZJTEVfTU9EVUxFX0FSQ0hACitPUF9DRkxBR1MgPSBAT1BfQ0ZMQUdTQAorT1BfQ1hYRkxBR1MgPSBAT1BfQ1hYRkxBR1NACitPUF9ET0NESVIgPSBAT1BfRE9DRElSQAorT1RPT0wgPSBAT1RPT0xACitPVE9PTDY0ID0gQE9UT09MNjRACitQQUNLQUdFID0gQFBBQ0tBR0VACitQQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKK1BBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACitQQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKK1BBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACitQQUNLQUdFX1VSTCA9IEBQQUNLQUdFX1VSTEAKK1BBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACitQQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKK1BLR19DT05GSUcgPSBAUEtHX0NPTkZJR0AKK1BLR19DT05GSUdfTElCRElSID0gQFBLR19DT05GSUdfTElCRElSQAorUEtHX0NPTkZJR19QQVRIID0gQFBLR19DT05GSUdfUEFUSEAKK1BPUFRfTElCUyA9IEBQT1BUX0xJQlNACitQVFJESUZGX1RfVFlQRSA9IEBQVFJESUZGX1RfVFlQRUAKK1FUX0NGTEFHUyA9IEBRVF9DRkxBR1NACitRVF9JTkNMVURFUyA9IEBRVF9JTkNMVURFU0AKK1FUX0xERkxBR1MgPSBAUVRfTERGTEFHU0AKK1FUX0xJQiA9IEBRVF9MSUJACitRVF9MSUJTID0gQFFUX0xJQlNACitRVF9WRVJTSU9OID0gQFFUX1ZFUlNJT05ACitSQU5MSUIgPSBAUkFOTElCQAorU0VEID0gQFNFREAKK1NFVF9NQUtFID0gQFNFVF9NQUtFQAorU0hFTEwgPSBAU0hFTExACitTSVpFX1RfVFlQRSA9IEBTSVpFX1RfVFlQRUAKK1NUUklQID0gQFNUUklQQAorVUlDID0gQFVJQ0AKK1VJQ2hlbHAgPSBAVUlDaGVscEAKK1ZFUlNJT04gPSBAVkVSU0lPTkAKK1hNS01GID0gQFhNS01GQAorWE1MX0NBVEFMT0cgPSBAWE1MX0NBVEFMT0dACitYU0xUUFJPQyA9IEBYU0xUUFJPQ0AKK1hTTFRQUk9DX0ZMQUdTID0gQFhTTFRQUk9DX0ZMQUdTQAorWF9DRkxBR1MgPSBAWF9DRkxBR1NACitYX0VYVFJBX0xJQlMgPSBAWF9FWFRSQV9MSUJTQAorWF9MSUJTID0gQFhfTElCU0AKK1hfUFJFX0xJQlMgPSBAWF9QUkVfTElCU0AKK2Fic19idWlsZGRpciA9IEBhYnNfYnVpbGRkaXJACithYnNfc3JjZGlyID0gQGFic19zcmNkaXJACithYnNfdG9wX2J1aWxkZGlyID0gQGFic190b3BfYnVpbGRkaXJACithYnNfdG9wX3NyY2RpciA9IEBhYnNfdG9wX3NyY2RpckAKK2FjX2N0X0NDID0gQGFjX2N0X0NDQAorYWNfY3RfQ1hYID0gQGFjX2N0X0NYWEAKK2FjX2N0X0RVTVBCSU4gPSBAYWNfY3RfRFVNUEJJTkAKK2FtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAorYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKK2FtX19xdW90ZSA9IEBhbV9fcXVvdGVACithbV9fdGFyID0gQGFtX190YXJACithbV9fdW50YXIgPSBAYW1fX3VudGFyQAorYmluZGlyID0gQGJpbmRpckAKK2J1aWxkID0gQGJ1aWxkQAorYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACitidWlsZF9jcHUgPSBAYnVpbGRfY3B1QAorYnVpbGRfb3MgPSBAYnVpbGRfb3NACitidWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAorYnVpbGRkaXIgPSBAYnVpbGRkaXJACitkYXRhZGlyID0gQGRhdGFkaXJACitkYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKK2RvY2RpciA9IEBkb2NkaXJACitkdmlkaXIgPSBAZHZpZGlyQAorZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACitob3N0ID0gQGhvc3RACitob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACitob3N0X2NwdSA9IEBob3N0X2NwdUAKK2hvc3Rfb3MgPSBAaG9zdF9vc0AKK2hvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAoraHRtbGRpciA9IEBodG1sZGlyQAoraW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAoraW5mb2RpciA9IEBpbmZvZGlyQAoraW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAorbGliZGlyID0gQGxpYmRpckAKK2xpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKK2xvY2FsZWRpciA9IEBsb2NhbGVkaXJACitsb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACitsdF9FQ0hPID0gQGx0X0VDSE9ACittYW5kaXIgPSBAbWFuZGlyQAorbWtkaXJfcCA9IEBta2Rpcl9wQAorb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAorcGRmZGlyID0gQHBkZmRpckAKK3ByZWZpeCA9IEBwcmVmaXhACitwcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACitwc2RpciA9IEBwc2RpckAKK3NiaW5kaXIgPSBAc2JpbmRpckAKK3NoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAorc3JjZGlyID0gQHNyY2RpckAKK3N5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKK3RhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACit0b3BfYnVpbGRfcHJlZml4ID0gQHRvcF9idWlsZF9wcmVmaXhACit0b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAordG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAordG9wZGlyID0gQHRvcGRpckAKK0FNX0NQUEZMQUdTID0gXAorCS1JICR7dG9wX3NyY2Rpcn0vbGlidXRpbCBcCisJLUkgJHt0b3Bfc3JjZGlyfS9saWJvcAorCitBTV9DRkxBR1MgPSBAT1BfQ0ZMQUdTQCAtRE9QUk9GSUxFX1NSQ0RJUj1cIkB0b3Bfc3JjZGlyQFwiCitDT01NT05fTElCUyA9IC4uL2xpYm9wLmEgLi4vLi4vbGlidXRpbC9saWJ1dGlsLmEKK0VYVFJBX0RJU1QgPSB1dGY4X2NoZWNrZXIuc2gKK2NwdV90eXBlX3Rlc3RzX1NPVVJDRVMgPSBjcHVfdHlwZV90ZXN0cy5jCitjcHVfdHlwZV90ZXN0c19MREFERCA9ICR7Q09NTU9OX0xJQlN9CitwYXJzZV9ldmVudF90ZXN0c19TT1VSQ0VTID0gcGFyc2VfZXZlbnRfdGVzdHMuYworcGFyc2VfZXZlbnRfdGVzdHNfTERBREQgPSAke0NPTU1PTl9MSUJTfQorYWxsb2NfY291bnRlcl90ZXN0c19TT1VSQ0VTID0gYWxsb2NfY291bnRlcl90ZXN0cy5jCithbGxvY19jb3VudGVyX3Rlc3RzX0xEQUREID0gJHtDT01NT05fTElCU30KK2xvYWRfZXZlbnRzX2ZpbGVzX3Rlc3RzX1NPVVJDRVMgPSBsb2FkX2V2ZW50c19maWxlc190ZXN0cy5jCitsb2FkX2V2ZW50c19maWxlc190ZXN0c19MREFERCA9ICR7Q09NTU9OX0xJQlN9CittYW5nbGVfdGVzdHNfU09VUkNFUyA9IG1hbmdsZV90ZXN0cy5jCittYW5nbGVfdGVzdHNfTERBREQgPSAke0NPTU1PTl9MSUJTfQorYWxsOiBhbGwtYW0KKworLlNVRkZJWEVTOgorLlNVRkZJWEVTOiAuYyAubG8gLm8gLm9iagorJChzcmNkaXIpL01ha2VmaWxlLmluOiAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKKwlAZm9yIGRlcCBpbiAkPzsgZG8gXAorCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCisJICAgICokJGRlcCopIFwKKwkgICAgICAoIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCApIFwKKwkgICAgICAgICYmIHsgaWYgdGVzdCAtZiAkQDsgdGhlbiBleGl0IDA7IGVsc2UgYnJlYWs7IGZpOyB9OyBcCisJICAgICAgZXhpdCAxOzsgXAorCSAgZXNhYzsgXAorCWRvbmU7IFwKKwllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gbGlib3AvdGVzdHMvTWFrZWZpbGUnOyBcCisJJChhbV9fY2QpICQodG9wX3NyY2RpcikgJiYgXAorCSAgJChBVVRPTUFLRSkgLS1mb3JlaWduIGxpYm9wL3Rlc3RzL01ha2VmaWxlCisuUFJFQ0lPVVM6IE1ha2VmaWxlCitNYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCisJQGNhc2UgJyQ/JyBpbiBcCisJICAqY29uZmlnLnN0YXR1cyopIFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoOzsgXAorCSAgKikgXAorCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCisJZXNhYzsKKworJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2RpcikvY29uZmlndXJlICQoQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCisKKyQodG9wX3NyY2RpcikvY29uZmlndXJlOiAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCiskKEFDTE9DQUxfTTQpOiAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorJChhbV9fYWNsb2NhbF9tNF9kZXBzKToKKworY2xlYW4tY2hlY2tQUk9HUkFNUzoKKwlAbGlzdD0nJChjaGVja19QUk9HUkFNUyknOyB0ZXN0IC1uICIkJGxpc3QiIHx8IGV4aXQgMDsgXAorCWVjaG8gIiBybSAtZiIgJCRsaXN0OyBcCisJcm0gLWYgJCRsaXN0IHx8IGV4aXQgJCQ/OyBcCisJdGVzdCAtbiAiJChFWEVFWFQpIiB8fCBleGl0IDA7IFwKKwlsaXN0PWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCI7IGRvbmUgfCBzZWQgJ3MvJChFWEVFWFQpJCQvLydgOyBcCisJZWNobyAiIHJtIC1mIiAkJGxpc3Q7IFwKKwlybSAtZiAkJGxpc3QKK2FsbG9jX2NvdW50ZXJfdGVzdHMkKEVYRUVYVCk6ICQoYWxsb2NfY291bnRlcl90ZXN0c19PQkpFQ1RTKSAkKGFsbG9jX2NvdW50ZXJfdGVzdHNfREVQRU5ERU5DSUVTKSAKKwlAcm0gLWYgYWxsb2NfY291bnRlcl90ZXN0cyQoRVhFRVhUKQorCSQoTElOSykgJChhbGxvY19jb3VudGVyX3Rlc3RzX09CSkVDVFMpICQoYWxsb2NfY291bnRlcl90ZXN0c19MREFERCkgJChMSUJTKQorY3B1X3R5cGVfdGVzdHMkKEVYRUVYVCk6ICQoY3B1X3R5cGVfdGVzdHNfT0JKRUNUUykgJChjcHVfdHlwZV90ZXN0c19ERVBFTkRFTkNJRVMpIAorCUBybSAtZiBjcHVfdHlwZV90ZXN0cyQoRVhFRVhUKQorCSQoTElOSykgJChjcHVfdHlwZV90ZXN0c19PQkpFQ1RTKSAkKGNwdV90eXBlX3Rlc3RzX0xEQUREKSAkKExJQlMpCitsb2FkX2V2ZW50c19maWxlc190ZXN0cyQoRVhFRVhUKTogJChsb2FkX2V2ZW50c19maWxlc190ZXN0c19PQkpFQ1RTKSAkKGxvYWRfZXZlbnRzX2ZpbGVzX3Rlc3RzX0RFUEVOREVOQ0lFUykgCisJQHJtIC1mIGxvYWRfZXZlbnRzX2ZpbGVzX3Rlc3RzJChFWEVFWFQpCisJJChMSU5LKSAkKGxvYWRfZXZlbnRzX2ZpbGVzX3Rlc3RzX09CSkVDVFMpICQobG9hZF9ldmVudHNfZmlsZXNfdGVzdHNfTERBREQpICQoTElCUykKK21hbmdsZV90ZXN0cyQoRVhFRVhUKTogJChtYW5nbGVfdGVzdHNfT0JKRUNUUykgJChtYW5nbGVfdGVzdHNfREVQRU5ERU5DSUVTKSAKKwlAcm0gLWYgbWFuZ2xlX3Rlc3RzJChFWEVFWFQpCisJJChMSU5LKSAkKG1hbmdsZV90ZXN0c19PQkpFQ1RTKSAkKG1hbmdsZV90ZXN0c19MREFERCkgJChMSUJTKQorcGFyc2VfZXZlbnRfdGVzdHMkKEVYRUVYVCk6ICQocGFyc2VfZXZlbnRfdGVzdHNfT0JKRUNUUykgJChwYXJzZV9ldmVudF90ZXN0c19ERVBFTkRFTkNJRVMpIAorCUBybSAtZiBwYXJzZV9ldmVudF90ZXN0cyQoRVhFRVhUKQorCSQoTElOSykgJChwYXJzZV9ldmVudF90ZXN0c19PQkpFQ1RTKSAkKHBhcnNlX2V2ZW50X3Rlc3RzX0xEQUREKSAkKExJQlMpCisKK21vc3RseWNsZWFuLWNvbXBpbGU6CisJLXJtIC1mICouJChPQkpFWFQpCisKK2Rpc3RjbGVhbi1jb21waWxlOgorCS1ybSAtZiAqLnRhYi5jCisKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9hbGxvY19jb3VudGVyX3Rlc3RzLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9jcHVfdHlwZV90ZXN0cy5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbG9hZF9ldmVudHNfZmlsZXNfdGVzdHMuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL21hbmdsZV90ZXN0cy5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvcGFyc2VfZXZlbnRfdGVzdHMuUG9AYW1fX3F1b3RlQAorCisuYy5vOgorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCAkPAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDT01QSUxFKSAtYyAkPAorCisuYy5vYmo6CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJCouVHBvIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ09NUElMRSkgLWMgYCQoQ1lHUEFUSF9XKSAnJDwnYAorCisuYy5sbzoKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoTFRDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCAkPAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExUQ09NUElMRSkgLWMgLW8gJEAgJDwKKworbW9zdGx5Y2xlYW4tbGlidG9vbDoKKwktcm0gLWYgKi5sbworCitjbGVhbi1saWJ0b29sOgorCS1ybSAtcmYgLmxpYnMgX2xpYnMKKworSUQ6ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKExJU1ApICQoVEFHU19GSUxFUykKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKwkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKwlta2lkIC1mSUQgJCR1bmlxdWUKK3RhZ3M6IFRBR1MKKworVEFHUzogICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAorCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKwlzZXQgeDsgXAorCWhlcmU9YHB3ZGA7IFwKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCisJICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCisJc2hpZnQ7IFwKKwlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCQqJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAorCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAorCSAgaWYgdGVzdCAkJCMgLWd0IDA7IHRoZW4gXAorCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCisJICAgICAgIiQkQCIgJCR1bmlxdWU7IFwKKwkgIGVsc2UgXAorCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCisJICAgICAgJCR1bmlxdWU7IFwKKwkgIGZpOyBcCisJZmkKK2N0YWdzOiBDVEFHUworQ1RBR1M6ICAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKKwkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHVuaXF1ZSIgXAorCSAgfHwgJChDVEFHUykgJChDVEFHU0ZMQUdTKSAkKEFNX0NUQUdTRkxBR1MpICQoQ1RBR1NfQVJHUykgXAorCSAgICAgJCR1bmlxdWUKKworR1RBR1M6CisJaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKKwkgICYmICQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpIFwKKwkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgIiQkaGVyZSIKKworZGlzdGNsZWFuLXRhZ3M6CisJLXJtIC1mIFRBR1MgSUQgR1RBR1MgR1JUQUdTIEdTWU1TIEdQQVRIIHRhZ3MKKworY2hlY2stVEVTVFM6ICQoVEVTVFMpCisJQGZhaWxlZD0wOyBhbGw9MDsgeGZhaWw9MDsgeHBhc3M9MDsgc2tpcD0wOyBcCisJc3JjZGlyPSQoc3JjZGlyKTsgZXhwb3J0IHNyY2RpcjsgXAorCWxpc3Q9JyAkKFRFU1RTKSAnOyBcCisJJChhbV9fdHR5X2NvbG9ycyk7IFwKKwlpZiB0ZXN0IC1uICIkJGxpc3QiOyB0aGVuIFwKKwkgIGZvciB0c3QgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgLi8kJHRzdDsgdGhlbiBkaXI9Li87IFwKKwkgICAgZWxpZiB0ZXN0IC1mICQkdHN0OyB0aGVuIGRpcj07IFwKKwkgICAgZWxzZSBkaXI9IiQoc3JjZGlyKS8iOyBmaTsgXAorCSAgICBpZiAkKFRFU1RTX0VOVklST05NRU5UKSAkJHtkaXJ9JCR0c3Q7IHRoZW4gXAorCSAgICAgIGFsbD1gZXhwciAkJGFsbCArIDFgOyBcCisJICAgICAgY2FzZSAiICQoWEZBSUxfVEVTVFMpICIgaW4gXAorCSAgICAgICpbXCBcCV0kJHRzdFtcIFwJXSopIFwKKwkJeHBhc3M9YGV4cHIgJCR4cGFzcyArIDFgOyBcCisJCWZhaWxlZD1gZXhwciAkJGZhaWxlZCArIDFgOyBcCisJCWNvbD0kJHJlZDsgcmVzPVhQQVNTOyBcCisJICAgICAgOzsgXAorCSAgICAgICopIFwKKwkJY29sPSQkZ3JuOyByZXM9UEFTUzsgXAorCSAgICAgIDs7IFwKKwkgICAgICBlc2FjOyBcCisJICAgIGVsaWYgdGVzdCAkJD8gLW5lIDc3OyB0aGVuIFwKKwkgICAgICBhbGw9YGV4cHIgJCRhbGwgKyAxYDsgXAorCSAgICAgIGNhc2UgIiAkKFhGQUlMX1RFU1RTKSAiIGluIFwKKwkgICAgICAqW1wgXAldJCR0c3RbXCBcCV0qKSBcCisJCXhmYWlsPWBleHByICQkeGZhaWwgKyAxYDsgXAorCQljb2w9JCRsZ247IHJlcz1YRkFJTDsgXAorCSAgICAgIDs7IFwKKwkgICAgICAqKSBcCisJCWZhaWxlZD1gZXhwciAkJGZhaWxlZCArIDFgOyBcCisJCWNvbD0kJHJlZDsgcmVzPUZBSUw7IFwKKwkgICAgICA7OyBcCisJICAgICAgZXNhYzsgXAorCSAgICBlbHNlIFwKKwkgICAgICBza2lwPWBleHByICQkc2tpcCArIDFgOyBcCisJICAgICAgY29sPSQkYmx1OyByZXM9U0tJUDsgXAorCSAgICBmaTsgXAorCSAgICBlY2hvICIkJHtjb2x9JCRyZXMkJHtzdGR9OiAkJHRzdCI7IFwKKwkgIGRvbmU7IFwKKwkgIGlmIHRlc3QgIiQkYWxsIiAtZXEgMTsgdGhlbiBcCisJICAgIHRlc3RzPSJ0ZXN0IjsgXAorCSAgICBBbGw9IiI7IFwKKwkgIGVsc2UgXAorCSAgICB0ZXN0cz0idGVzdHMiOyBcCisJICAgIEFsbD0iQWxsICI7IFwKKwkgIGZpOyBcCisJICBpZiB0ZXN0ICIkJGZhaWxlZCIgLWVxIDA7IHRoZW4gXAorCSAgICBpZiB0ZXN0ICIkJHhmYWlsIiAtZXEgMDsgdGhlbiBcCisJICAgICAgYmFubmVyPSIkJEFsbCQkYWxsICQkdGVzdHMgcGFzc2VkIjsgXAorCSAgICBlbHNlIFwKKwkgICAgICBpZiB0ZXN0ICIkJHhmYWlsIiAtZXEgMTsgdGhlbiBmYWlsdXJlcz1mYWlsdXJlOyBlbHNlIGZhaWx1cmVzPWZhaWx1cmVzOyBmaTsgXAorCSAgICAgIGJhbm5lcj0iJCRBbGwkJGFsbCAkJHRlc3RzIGJlaGF2ZWQgYXMgZXhwZWN0ZWQgKCQkeGZhaWwgZXhwZWN0ZWQgJCRmYWlsdXJlcykiOyBcCisJICAgIGZpOyBcCisJICBlbHNlIFwKKwkgICAgaWYgdGVzdCAiJCR4cGFzcyIgLWVxIDA7IHRoZW4gXAorCSAgICAgIGJhbm5lcj0iJCRmYWlsZWQgb2YgJCRhbGwgJCR0ZXN0cyBmYWlsZWQiOyBcCisJICAgIGVsc2UgXAorCSAgICAgIGlmIHRlc3QgIiQkeHBhc3MiIC1lcSAxOyB0aGVuIHBhc3Nlcz1wYXNzOyBlbHNlIHBhc3Nlcz1wYXNzZXM7IGZpOyBcCisJICAgICAgYmFubmVyPSIkJGZhaWxlZCBvZiAkJGFsbCAkJHRlc3RzIGRpZCBub3QgYmVoYXZlIGFzIGV4cGVjdGVkICgkJHhwYXNzIHVuZXhwZWN0ZWQgJCRwYXNzZXMpIjsgXAorCSAgICBmaTsgXAorCSAgZmk7IFwKKwkgIGRhc2hlcz0iJCRiYW5uZXIiOyBcCisJICBza2lwcGVkPSIiOyBcCisJICBpZiB0ZXN0ICIkJHNraXAiIC1uZSAwOyB0aGVuIFwKKwkgICAgaWYgdGVzdCAiJCRza2lwIiAtZXEgMTsgdGhlbiBcCisJICAgICAgc2tpcHBlZD0iKCQkc2tpcCB0ZXN0IHdhcyBub3QgcnVuKSI7IFwKKwkgICAgZWxzZSBcCisJICAgICAgc2tpcHBlZD0iKCQkc2tpcCB0ZXN0cyB3ZXJlIG5vdCBydW4pIjsgXAorCSAgICBmaTsgXAorCSAgICB0ZXN0IGBlY2hvICIkJHNraXBwZWQiIHwgd2MgLWNgIC1sZSBgZWNobyAiJCRiYW5uZXIiIHwgd2MgLWNgIHx8IFwKKwkgICAgICBkYXNoZXM9IiQkc2tpcHBlZCI7IFwKKwkgIGZpOyBcCisJICByZXBvcnQ9IiI7IFwKKwkgIGlmIHRlc3QgIiQkZmFpbGVkIiAtbmUgMCAmJiB0ZXN0IC1uICIkKFBBQ0tBR0VfQlVHUkVQT1JUKSI7IHRoZW4gXAorCSAgICByZXBvcnQ9IlBsZWFzZSByZXBvcnQgdG8gJChQQUNLQUdFX0JVR1JFUE9SVCkiOyBcCisJICAgIHRlc3QgYGVjaG8gIiQkcmVwb3J0IiB8IHdjIC1jYCAtbGUgYGVjaG8gIiQkYmFubmVyIiB8IHdjIC1jYCB8fCBcCisJICAgICAgZGFzaGVzPSIkJHJlcG9ydCI7IFwKKwkgIGZpOyBcCisJICBkYXNoZXM9YGVjaG8gIiQkZGFzaGVzIiB8IHNlZCBzLy4vPS9nYDsgXAorCSAgaWYgdGVzdCAiJCRmYWlsZWQiIC1lcSAwOyB0aGVuIFwKKwkgICAgZWNobyAiJCRncm4kJGRhc2hlcyI7IFwKKwkgIGVsc2UgXAorCSAgICBlY2hvICIkJHJlZCQkZGFzaGVzIjsgXAorCSAgZmk7IFwKKwkgIGVjaG8gIiQkYmFubmVyIjsgXAorCSAgdGVzdCAteiAiJCRza2lwcGVkIiB8fCBlY2hvICIkJHNraXBwZWQiOyBcCisJICB0ZXN0IC16ICIkJHJlcG9ydCIgfHwgZWNobyAiJCRyZXBvcnQiOyBcCisJICBlY2hvICIkJGRhc2hlcyQkc3RkIjsgXAorCSAgdGVzdCAiJCRmYWlsZWQiIC1lcSAwOyBcCisJZWxzZSA6OyBmaQorCitkaXN0ZGlyOiAkKERJU1RGSUxFUykKKwlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisJdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCWxpc3Q9JyQoRElTVEZJTEVTKSc7IFwKKwkgIGRpc3RfZmlsZXM9YGZvciBmaWxlIGluICQkbGlzdDsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBcCisJICBzZWQgLWUgInN8XiQkc3JjZGlyc3RyaXAvfHw7dCIgXAorCSAgICAgIC1lICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfDt0ImA7IFwKKwljYXNlICQkZGlzdF9maWxlcyBpbiBcCisJICAqLyopICQoTUtESVJfUCkgYGVjaG8gIiQkZGlzdF9maWxlcyIgfCBcCisJCQkgICBzZWQgJy9cLy8hZDtzfF58JChkaXN0ZGlyKS98O3MsL1teL10qJCQsLCcgfCBcCisJCQkgICBzb3J0IC11YCA7OyBcCisJZXNhYzsgXAorCWZvciBmaWxlIGluICQkZGlzdF9maWxlczsgZG8gXAorCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAorCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKKwkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKKwkgICAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJGZpbGUiOyB0aGVuIFwKKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKwkgICAgZmk7IFwKKwkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCisJICAgICAgY3AgLWZwUiAkKHNyY2RpcikvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAorCSAgICBmaTsgXAorCSAgICBjcCAtZnBSICQkZC8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCisJICBlbHNlIFwKKwkgICAgdGVzdCAtZiAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKKwkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKKwkgICAgfHwgZXhpdCAxOyBcCisJICBmaTsgXAorCWRvbmUKK2NoZWNrLWFtOiBhbGwtYW0KKwkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSAkKGNoZWNrX1BST0dSQU1TKQorCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGNoZWNrLVRFU1RTCitjaGVjazogY2hlY2stYW0KK2FsbC1hbTogTWFrZWZpbGUKK2luc3RhbGxkaXJzOgoraW5zdGFsbDogaW5zdGFsbC1hbQoraW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtYW0KK2luc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLWFtCit1bmluc3RhbGw6IHVuaW5zdGFsbC1hbQorCitpbnN0YWxsLWFtOiBhbGwtYW0KKwlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQorCitpbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1hbQoraW5zdGFsbC1zdHJpcDoKKwkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAorCSAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCisJICBgdGVzdCAteiAnJChTVFJJUCknIHx8IFwKKwkgICAgZWNobyAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyJgIGluc3RhbGwKK21vc3RseWNsZWFuLWdlbmVyaWM6CisKK2NsZWFuLWdlbmVyaWM6CisKK2Rpc3RjbGVhbi1nZW5lcmljOgorCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQorCS10ZXN0IC4gPSAiJChzcmNkaXIpIiB8fCB0ZXN0IC16ICIkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKQorCittYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6CisJQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgorCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKK2NsZWFuOiBjbGVhbi1hbQorCitjbGVhbi1hbTogY2xlYW4tY2hlY2tQUk9HUkFNUyBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgXAorCW1vc3RseWNsZWFuLWFtCisKK2Rpc3RjbGVhbjogZGlzdGNsZWFuLWFtCisJLXJtIC1yZiAuLyQoREVQRElSKQorCS1ybSAtZiBNYWtlZmlsZQorZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCisJZGlzdGNsZWFuLXRhZ3MKKworZHZpOiBkdmktYW0KKworZHZpLWFtOgorCitodG1sOiBodG1sLWFtCisKK2h0bWwtYW06CisKK2luZm86IGluZm8tYW0KKworaW5mby1hbToKKworaW5zdGFsbC1kYXRhLWFtOgorCitpbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktYW0KKworaW5zdGFsbC1kdmktYW06CisKK2luc3RhbGwtZXhlYy1hbToKKworaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KKworaW5zdGFsbC1odG1sLWFtOgorCitpbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQorCitpbnN0YWxsLWluZm8tYW06CisKK2luc3RhbGwtbWFuOgorCitpbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KKworaW5zdGFsbC1wZGYtYW06CisKK2luc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KKworaW5zdGFsbC1wcy1hbToKKworaW5zdGFsbGNoZWNrLWFtOgorCittYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCisJLXJtIC1yZiAuLyQoREVQRElSKQorCS1ybSAtZiBNYWtlZmlsZQorbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYworCittb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tYW0KKworbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCisJbW9zdGx5Y2xlYW4tbGlidG9vbAorCitwZGY6IHBkZi1hbQorCitwZGYtYW06CisKK3BzOiBwcy1hbQorCitwcy1hbToKKwordW5pbnN0YWxsLWFtOgorCisuTUFLRTogY2hlY2stYW0gaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwCisKKy5QSE9OWTogQ1RBR1MgR1RBR1MgYWxsIGFsbC1hbSBjaGVjayBjaGVjay1URVNUUyBjaGVjay1hbSBjbGVhbiBcCisJY2xlYW4tY2hlY2tQUk9HUkFNUyBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgY3RhZ3MgXAorCWRpc3RjbGVhbiBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCisJZGlzdGNsZWFuLWxpYnRvb2wgZGlzdGNsZWFuLXRhZ3MgZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgXAorCWh0bWwtYW0gaW5mbyBpbmZvLWFtIGluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgXAorCWluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBpbnN0YWxsLWR2aS1hbSBpbnN0YWxsLWV4ZWMgXAorCWluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgaW5zdGFsbC1odG1sLWFtIGluc3RhbGwtaW5mbyBcCisJaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIGluc3RhbGwtcGRmIGluc3RhbGwtcGRmLWFtIFwKKwlpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgXAorCWluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBtYWludGFpbmVyLWNsZWFuIFwKKwltYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gbW9zdGx5Y2xlYW4tY29tcGlsZSBcCisJbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sIHBkZiBwZGYtYW0gcHMgcHMtYW0gXAorCXRhZ3MgdW5pbnN0YWxsIHVuaW5zdGFsbC1hbQorCisKKyMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCisjIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KKy5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2xpYm9wL3Rlc3RzL2FsbG9jX2NvdW50ZXJfdGVzdHMuYyBiL29wcm9maWxlLTAuOS43L2xpYm9wL3Rlc3RzL2FsbG9jX2NvdW50ZXJfdGVzdHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YWViNjA1Ci0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvbGlib3AvdGVzdHMvYWxsb2NfY291bnRlcl90ZXN0cy5jCkBAIC0wLDAgKzEsMjE3IEBACisvKioKKyAqIEBmaWxlIGFsbG9jX2NvdW50ZXJfdGVzdHMuYworICoKKyAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDMgT1Byb2ZpbGUgYXV0aG9ycworICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKKyAqCisgKiBAYXV0aG9yIEpvaG4gTGV2b24KKyAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQorICovCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaW5jbHVkZSAib3BfcGFyc2VfZXZlbnQuaCIKKyNpbmNsdWRlICJvcF9hbGxvY19jb3VudGVyLmgiCisjaW5jbHVkZSAib3BfZXZlbnRzLmgiCisjaW5jbHVkZSAib3BfaHdfY29uZmlnLmgiCisjaW5jbHVkZSAib3BfY3B1X3R5cGUuaCIKKyNpbmNsdWRlICJvcF9ldmVudHMuaCIKKworLyogRklYTUU6IGFscGhhIGRlc2NyaXB0aW9uIGV2ZW50cyBuZWVkIDIwIGJ1dCB3aGVuIHJ1bm5pbmcgdGVzdCBvbiB4ODYKKyAqIE9QX01BWF9DT1VOVEVSUyBpcyA4LCBzbyB3ZSBjYW4ndCB1c2UgaXQgKi8KKyNkZWZpbmUgTUFYX0VWRU5UUyAyMAorCisKKy8qIHNvbWUgdGVzdCBhcmUgc2V0dXAgdG8gZmFpbCBpbiBhIGtub3duIHdheSAqLworZW51bSBmYWlsdXJlX3R5cGUgeworCW5vX2ZhaWx1cmUsCisJZmFpbF90b19maW5kX2V2ZW50LAorCWZhaWxfdG9fYWxsb2NfY291bnRlcgorfTsKKworc3RydWN0IGFsbG9jYXRlZF9jb3VudGVyIHsKKwlvcF9jcHUgY3B1X3R5cGU7CisJY2hhciAgY29uc3QgKiBjb25zdCAqIGV2ZW50czsKKwlzaXplX3QgYWxsb2NfbWFwW01BWF9FVkVOVFNdOworCS8qIGV4cGVjdGVkIGZhaWx1cmUgZm9yIHRoaXMgdGVzdCAqLworCWVudW0gZmFpbHVyZV90eXBlIGZhaWx1cmU7Cit9OworCisKKy8qIG5vdCBtb3JlIHRoYW4gTUFYX0VWRU5UUyBzdHJpbmcgZm9yIGFsbCB0aGVzZSBhcnJheXMgKi8KK3N0YXRpYyBjaGFyIGNvbnN0ICogY29uc3QgZXZlbnRzX2FscGhhX2V2NF8xW10gPSB7CisJIklTU1VFUzo0MDk2OjA6MToxIiwKKwlOVUxMCit9OworCitzdGF0aWMgY2hhciBjb25zdCAqIGNvbnN0IGV2ZW50c19hbHBoYV9ldjRfMltdID0geworCSJVTktOT1dOX0VWRU5UOjQwOTY6MDoxOjEiLAorCU5VTEwKK307CisKK3N0YXRpYyBjaGFyIGNvbnN0ICogY29uc3QgZXZlbnRzX3Bwcm9fMVtdID0geworCSJDUFVfQ0xLX1VOSEFMVEVEOjQwOTY6MDoxOjEiLAorCU5VTEwKK307CisKK3N0YXRpYyBjaGFyIGNvbnN0ICogY29uc3QgZXZlbnRzX3Bwcm9fMltdID0geworCSJDUFVfQ0xLX1VOSEFMVEVEOjQwOTY6MDoxOjEiLAorCSJEQVRBX01FTV9SRUZTOjQwOTY6MDoxOjEiLAorCU5VTEwKK307CisKK3N0YXRpYyBjaGFyIGNvbnN0ICogY29uc3QgZXZlbnRzX3Bwcm9fM1tdID0geworCS8qIGZhaWxfdG9fYWxsb2NfY291bnRlcjogMiBldmVudCB0byBjb3VudGVyIDAgKi8KKwkiQ09NUF9GTE9QX1JFVDo0MDk2OjA6MToxIiwKKwkiRkxPUFM6NDA5NjowOjE6MSIsCisJTlVMTAorfTsKKworc3RhdGljIGNoYXIgY29uc3QgKiBjb25zdCBldmVudHNfcHByb180W10gPSB7CisJIkZMT1BTOjQwOTY6MDoxOjEiLAorCSJGUF9BU1NJU1Q6NDA5NjowOjE6MSIsCisJTlVMTAorfTsKKworc3RhdGljIGNoYXIgY29uc3QgKiBjb25zdCBldmVudHNfcHByb181W10gPSB7CisJIkZQX0FTU0lTVDo0MDk2OjA6MToxIiwKKwkiRkxPUFM6NDA5NjowOjE6MSIsCisJTlVMTAorfTsKKworc3RhdGljIGNoYXIgY29uc3QgKiBjb25zdCBldmVudHNfcDRfMVtdID0geworCSJCUkFOQ0hfUkVUSVJFRDo0MDk2OjE6MToxIiwKKwkiTUlTUFJFRF9CUkFOQ0hfUkVUSVJFRDo0MDk2OjE6MToxIiwKKwkiQlBVX0ZFVENIX1JFUVVFU1Q6NDA5NjoxOjE6MSIsCisJIklUTEJfUkVGRVJFTkNFOjQwOTY6MToxOjEiLAorCSJNRU1PUllfQ0FOQ0VMOjQwOTY6NDoxOjEiLAorCSJNRU1PUllfQ09NUExFVEU6NDA5NjoxOjE6MSIsCisJIlRDX01TX1hGRVI6NDA5NjoxOjE6MSIsCisJIlVPUF9RVUVVRV9XUklURVM6NDA5NjoxOjE6MSIsCisJTlVMTAorfTsKKworc3RhdGljIGNoYXIgY29uc3QgKiBjb25zdCBldmVudHNfcDRfMltdID0geworCS8qIGZhaWxfdG9fYWxsb2NfY291bnRlcjogMyBldmVudCB0byBjb3VudGVyIDMsIDcgKi8KKwkiQlJBTkNIX1JFVElSRUQ6NDA5NjoxOjE6MSIsCisJIk1JU1BSRURfQlJBTkNIX1JFVElSRUQ6NDA5NjoxOjE6MSIsCisJIklOU1RSX1JFVElSRUQ6NDA5NjoxOjE6MSIsCisJIkJQVV9GRVRDSF9SRVFVRVNUOjQwOTY6MToxOjEiLAorCSJJVExCX1JFRkVSRU5DRTo0MDk2OjE6MToxIiwKKwkiTUVNT1JZX0NBTkNFTDo0MDk2OjQ6MToxIiwKKwkiTUVNT1JZX0NPTVBMRVRFOjQwOTY6MToxOjEiLAorCSJUQ19NU19YRkVSOjQwOTY6MToxOjEiLAorCU5VTEwKK307CisKK3N0YXRpYyBjaGFyIGNvbnN0ICogY29uc3QgZXZlbnRzX21pcHNfMzRrW10gPSB7CisJLyogZmFpbF90b19hbGxvY19jb3VudGVyOiB3L28gMjAwNi04LTAzICBKZXJlbWlhaCBMb3R0IHBhdGNoLCBzZWUKKwkgKiBDaGFuZ2VMb2cgKi8KKwkiRFRMQl9NSVNTRVM6NTAwOjA6MToxIiwKKwkiSlJfMzFfSU5TTlM6NTAwOjA6MToxIiwKKwlOVUxMCit9OworCitzdGF0aWMgc3RydWN0IGFsbG9jYXRlZF9jb3VudGVyIGNvbnN0IHRlc3RzW10gPSB7CisJeyBDUFVfQVhQX0VWNCwgZXZlbnRzX2FscGhhX2V2NF8xLCB7IDAgfSwgbm9fZmFpbHVyZSB9LAorCXsgQ1BVX0FYUF9FVjQsIGV2ZW50c19hbHBoYV9ldjRfMiwgeyAtMSB9LCBmYWlsX3RvX2ZpbmRfZXZlbnQgfSwKKwl7IENQVV9QUFJPLCBldmVudHNfcHByb18xLCB7IDAgfSwgbm9fZmFpbHVyZSB9LAorCXsgQ1BVX1BQUk8sIGV2ZW50c19wcHJvXzIsIHsgMCwgMSB9LCBub19mYWlsdXJlIH0sCisJeyBDUFVfUFBSTywgZXZlbnRzX3Bwcm9fMywgeyAtMSB9LCBmYWlsX3RvX2FsbG9jX2NvdW50ZXIgfSwKKwl7IENQVV9QUFJPLCBldmVudHNfcHByb180LCB7IDAsIDEgfSwgbm9fZmFpbHVyZSB9LAorCXsgQ1BVX1BQUk8sIGV2ZW50c19wcHJvXzUsIHsgMSwgMCB9LCBub19mYWlsdXJlIH0sCisJeyBDUFVfUDQsIGV2ZW50c19wNF8xLCB7IDMsIDcsIDAsIDQsIDIsIDYsIDEsIDUgfSwgbm9fZmFpbHVyZSB9LAorCXsgQ1BVX1A0LCBldmVudHNfcDRfMiwgeyAtMSB9LCBmYWlsX3RvX2FsbG9jX2NvdW50ZXIgfSwKKwl7IENQVV9NSVBTXzM0SywgZXZlbnRzX21pcHNfMzRrLCB7IDEsIDAgfSwgbm9fZmFpbHVyZSB9LAorCXsgQ1BVX05PX0dPT0QsIDAsIHsgMCB9LCAwIH0KK307CisKKworc3RhdGljIHZvaWQgc2hvd19ldmVudHMoY2hhciBjb25zdCAqIGNvbnN0ICogZXZlbnRzKQoreworCWZvciAoIDsgKmV2ZW50czsgKytldmVudHMpCisJCXByaW50ZigiJXNcbiIsICpldmVudHMpOworfQorCisKK3N0YXRpYyB2b2lkIHNob3dfY291bnRlcl9tYXAoc2l6ZV90IGNvbnN0ICogY291bnRlcl9tYXAsIHNpemVfdCBucl9ldmVudHMpCit7CisJc2l6ZV90IGk7CisJZm9yIChpID0gMDsgaSA8IG5yX2V2ZW50czsgKytpKQorCQlwcmludGYoIiVsdSAiLCAodW5zaWduZWQgbG9uZyljb3VudGVyX21hcFtpXSk7CisJcHJpbnRmKCJcbiIpOworfQorCisKK3N0YXRpYyB2b2lkIGRvX3Rlc3Qoc3RydWN0IGFsbG9jYXRlZF9jb3VudGVyIGNvbnN0ICogaXQpCit7CisJc2l6ZV90IGk7CisJc2l6ZV90ICogY291bnRlcl9tYXA7CisJc2l6ZV90IG5yX2V2ZW50czsKKwlzdHJ1Y3QgcGFyc2VkX2V2ZW50IHBhcnNlZFtNQVhfRVZFTlRTXTsKKwlzdHJ1Y3Qgb3BfZXZlbnQgY29uc3QgKiBldmVudFtNQVhfRVZFTlRTXTsKKworCW9wX2V2ZW50cyhpdC0+Y3B1X3R5cGUpOworCisJbnJfZXZlbnRzID0gcGFyc2VfZXZlbnRzKHBhcnNlZCwgTUFYX0VWRU5UUywgaXQtPmV2ZW50cyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnJfZXZlbnRzOyArK2kpIHsKKwkJZXZlbnRbaV0gPSBmaW5kX2V2ZW50X2J5X25hbWUocGFyc2VkW2ldLm5hbWUsIHBhcnNlZFtpXS51bml0X21hc2ssCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlZFtpXS51bml0X21hc2tfdmFsaWQpOworCQlpZiAoIWV2ZW50W2ldKSB7CisJCQlpZiAoaXQtPmZhaWx1cmUgPT0gZmFpbF90b19maW5kX2V2ZW50KQorCQkJCWdvdG8gZnJlZV9ldmVudHM7CisJCQlwcmludGYoIkNhbid0IGZpbmQgZXZlbnRzICVzIGZvciBjcHUgJXNcbiIsCisJCQkgICAgICAgcGFyc2VkW2ldLm5hbWUsCisJCQkgICAgICAgb3BfZ2V0X2NwdV90eXBlX3N0cihpdC0+Y3B1X3R5cGUpKTsKKwkJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwkJfQorCX0KKworCWNvdW50ZXJfbWFwID0gIG1hcF9ldmVudF90b19jb3VudGVyKGV2ZW50LCBucl9ldmVudHMsIGl0LT5jcHVfdHlwZSk7CisJaWYgKCFjb3VudGVyX21hcCkgeworCQlpZiAoaXQtPmZhaWx1cmUgPT0gZmFpbF90b19hbGxvY19jb3VudGVyKQorCQkJZ290byBmcmVlX2V2ZW50czsKKwkJcHJpbnRmKCJDYW4ndCBtYXAgdGhpcyBzZXQgb2YgZXZlbnRzIHRvIGNvdW50ZXI6XG4iKTsKKwkJc2hvd19ldmVudHMoaXQtPmV2ZW50cyk7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgbnJfZXZlbnRzOyArK2kpIHsKKwkJaWYgKGNvdW50ZXJfbWFwW2ldICE9IGl0LT5hbGxvY19tYXBbaV0pIHsKKwkJCXByaW50ZigiSW5jb3JyZWN0IGFsbG9jYXRpb24gbWFwIGZvciB0aGVzZSBldmVudHM6XG4iKTsKKwkJCXNob3dfZXZlbnRzKGl0LT5ldmVudHMpOworCQkJcHJpbnRmKCIoZXhwZWN0LCBmb3VuZCk6XG4iKTsKKwkJCXNob3dfY291bnRlcl9tYXAoaXQtPmFsbG9jX21hcCwgbnJfZXZlbnRzKTsKKwkJCXNob3dfY291bnRlcl9tYXAoY291bnRlcl9tYXAsIG5yX2V2ZW50cyk7CisJCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJCX0KKwl9CisKKwlpZiAoaXQtPmZhaWx1cmUgIT0gbm9fZmFpbHVyZSkgeworCQkvKiB0ZXN0IHNob3VsZCBmYWlsIGJ1dCBzdWNjZXNzISAqLworCQlwcmludGYoInRlc3Qgc2hvdWxkIGZhaWwgd2l0aCBhIGZhaWx1cmUgdHlwZSAlZCBidXQgc3VjY2VlZCAiCisJCSAgICAgICAiZm9yIGV2ZW50czpcbiIsIGl0LT5mYWlsdXJlKTsKKwkJZm9yIChpID0gMDsgaSA8IG5yX2V2ZW50czsgKytpKQorCQkJcHJpbnRmKCIlc1xuIiwgaXQtPmV2ZW50c1tpXSk7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisKKwlmcmVlKGNvdW50ZXJfbWFwKTsKK2ZyZWVfZXZlbnRzOgorCW9wX2ZyZWVfZXZlbnRzKCk7Cit9CisKKworaW50IG1haW4odm9pZCkKK3sKKwlzdHJ1Y3QgYWxsb2NhdGVkX2NvdW50ZXIgY29uc3QgKiBpdDsKKworCXNldGVudigiT1BST0ZJTEVfRVZFTlRTX0RJUiIsIE9QUk9GSUxFX1NSQ0RJUiAiL2V2ZW50cyIsIDEpOworCisJZm9yIChpdCA9IHRlc3RzOyBpdC0+Y3B1X3R5cGUgIT0gQ1BVX05PX0dPT0Q7ICsraXQpCisJCWRvX3Rlc3QoaXQpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9saWJvcC90ZXN0cy9jcHVfdHlwZV90ZXN0cy5jIGIvb3Byb2ZpbGUtMC45LjcvbGlib3AvdGVzdHMvY3B1X3R5cGVfdGVzdHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjBmNmJhCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvbGlib3AvdGVzdHMvY3B1X3R5cGVfdGVzdHMuYwpAQCAtMCwwICsxLDc5IEBACisvKioKKyAqIEBmaWxlIGNwdV90eXBlX3Rlc3RzLmMKKyAqCisgKiBAcmVtYXJrIENvcHlyaWdodCAyMDAzIE9Qcm9maWxlIGF1dGhvcnMKKyAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCisgKgorICogQGF1dGhvciBKb2huIExldm9uCisgKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKKyAqLworCisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgIm9wX2NwdV90eXBlLmgiCisKK3N0YXRpYyBzdHJ1Y3QgY3B1X3R5cGUgeworCWNoYXIgY29uc3QgKiBuYW1lOworCW9wX2NwdSB0eXBlOworfSBjcHVfc3RyW10gPSB7CisJeyAiaTM4Ni9wcHJvIiwgQ1BVX1BQUk8gfSwKKwl7ICJpMzg2L3BpaSIsIENQVV9QSUkgfSwKKwl7ICJpMzg2L3BpaWkiLCBDUFVfUElJSSB9LAorCXsgImkzODYvYXRobG9uIiwgQ1BVX0FUSExPTiB9LAorCXsgInRpbWVyIiwgQ1BVX1RJTUVSX0lOVCB9LAorCXsgInJ0YyIsIENQVV9SVEMgfSwKKwl7ICJpMzg2L3A0IiwgQ1BVX1A0IH0sCisJeyAiaWE2NC9pYTY0IiwgQ1BVX0lBNjQgfSwKKwl7ICJpYTY0L2l0YW5pdW0iLCBDUFVfSUE2NF8xIH0sCisJeyAiaWE2NC9pdGFuaXVtMiIsIENQVV9JQTY0XzIgfSwKKwl7ICJ4ODYtNjQvaGFtbWVyIiwgQ1BVX0hBTU1FUiB9LAorCXsgImkzODYvcDQtaHQiLCBDUFVfUDRfSFQyIH0sCisJeyAiYWxwaGEvZXY0IiwgQ1BVX0FYUF9FVjQgfSwKKwl7ICJhbHBoYS9ldjUiLCBDUFVfQVhQX0VWNSB9LAorCXsgImFscGhhL3BjYTU2IiwgQ1BVX0FYUF9QQ0E1NiB9LAorCXsgImFscGhhL2V2NiIsIENQVV9BWFBfRVY2IH0sCisJeyAiYWxwaGEvZXY2NyIsIENQVV9BWFBfRVY2NyB9LAorCXsgImZvbyIsIENQVV9OT19HT09EIH0sCisJeyAiLTMiLCBDUFVfTk9fR09PRCB9LAorCXsgIjI5MjciLCBDUFVfTk9fR09PRCB9LAorCXsgIiIsIENQVV9OT19HT09EIH0sCisJeyBOVUxMLCBDUFVfTk9fR09PRCB9Cit9OworCisKK3N0YXRpYyB2b2lkIHRlc3Qoc3RydWN0IGNwdV90eXBlIGNvbnN0ICogY3B1KQoreworCWNoYXIgY29uc3QgKiBuYW1lOworCW9wX2NwdSB0eXBlOworCisJbmFtZSA9IG9wX2dldF9jcHVfbmFtZShjcHUtPnR5cGUpOworCWlmIChjcHUtPnR5cGUgIT0gQ1BVX05PX0dPT0QgJiYgc3RyY21wKGNwdS0+bmFtZSwgbmFtZSkpIHsKKwkJcHJpbnRmKCJmb3IgJWQgZXhwZWN0ICVzIGZvdW5kICVzXG4iLCBjcHUtPnR5cGUsIGNwdS0+bmFtZSwKKwkJICAgICAgIG5hbWUpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorCWlmIChjcHUtPnR5cGUgPT0gQ1BVX05PX0dPT0QgJiYgc3RyY21wKCJpbnZhbGlkIGNwdSB0eXBlIiwgbmFtZSkpIHsKKwkJcHJpbnRmKCJmb3IgJWQgZXhwZWN0ICVzIGZvdW5kICVzXG4iLCBjcHUtPnR5cGUsCisJCSAgICAgICAiaW52YWxpZCBjcHUgdHlwZSIsIG5hbWUpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorCisJdHlwZSA9IG9wX2dldF9jcHVfbnVtYmVyKGNwdS0+bmFtZSk7CisJaWYgKHR5cGUgIT0gY3B1LT50eXBlKSB7CisJCXByaW50ZigiZm9yICVzIGV4cGVjdCAlZCBmb3VuZCAlZFxuIiwgY3B1LT5uYW1lLCBjcHUtPnR5cGUsCisJCSAgICAgICB0eXBlKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KK30KKworCitpbnQgbWFpbih2b2lkKQoreworCXN0cnVjdCBjcHVfdHlwZSAqIGNwdTsKKwlmb3IgKGNwdSA9IGNwdV9zdHI7IGNwdS0+bmFtZTsgKytjcHUpCisJCXRlc3QoY3B1KTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2xpYm9wL3Rlc3RzL2xvYWRfZXZlbnRzX2ZpbGVzX3Rlc3RzLmMgYi9vcHJvZmlsZS0wLjkuNy9saWJvcC90ZXN0cy9sb2FkX2V2ZW50c19maWxlc190ZXN0cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlNTQ4ZTUKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9saWJvcC90ZXN0cy9sb2FkX2V2ZW50c19maWxlc190ZXN0cy5jCkBAIC0wLDAgKzEsMzEgQEAKKy8qKgorICogQGZpbGUgbG9hZF9ldmVudHNfZmlsZXNfdGVzdHMuYworICoKKyAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDMgT1Byb2ZpbGUgYXV0aG9ycworICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKKyAqCisgKiBAYXV0aG9yIEpvaG4gTGV2b24KKyAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQorICovCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaW5jbHVkZSAib3BfZXZlbnRzLmgiCisjaW5jbHVkZSAib3BfY3B1X3R5cGUuaCIKKworaW50IG1haW4odm9pZCkKK3sKKwlvcF9jcHUgY3B1X3R5cGU7CisKKwlzZXRlbnYoIk9QUk9GSUxFX0VWRU5UU19ESVIiLCBPUFJPRklMRV9TUkNESVIgIi9ldmVudHMiLCAxKTsKKworCWZvciAoY3B1X3R5cGUgPSBDUFVfTk9fR09PRCArIDE7IGNwdV90eXBlIDwgTUFYX0NQVV9UWVBFOyArK2NwdV90eXBlKSB7CisJCWlmIChjcHVfdHlwZSAhPSBDUFVfVElNRVJfSU5UKSB7CisJCQlvcF9ldmVudHMoY3B1X3R5cGUpOworCQkJb3BfZnJlZV9ldmVudHMoKTsKKwkJfQorCX0KKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvbGlib3AvdGVzdHMvbWFuZ2xlX3Rlc3RzLmMgYi9vcHJvZmlsZS0wLjkuNy9saWJvcC90ZXN0cy9tYW5nbGVfdGVzdHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTY2MmRkCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvbGlib3AvdGVzdHMvbWFuZ2xlX3Rlc3RzLmMKQEAgLTAsMCArMSw2NyBAQAorLyoqCisgKiBAZmlsZSBtYW5nbGVfdGVzdHMuYworICoKKyAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDMgT1Byb2ZpbGUgYXV0aG9ycworICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKKyAqCisgKiBAYXV0aG9yIEpvaG4gTGV2b24KKyAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSAib3BfbGliaWJlcnR5LmgiCisjaW5jbHVkZSAib3BfbWFuZ2xlLmgiCisjaW5jbHVkZSAib3BfY29uZmlnLmgiCisKK3N0cnVjdCB0ZXN0X2lucHV0IHsKKwlzdHJ1Y3QgbWFuZ2xlX3ZhbHVlcyB2YWx1ZXM7CisJY2hhciBjb25zdCAqIHJlc3VsdDsKK307CisKK3N0YXRpYyBzdHJ1Y3QgdGVzdF9pbnB1dCBjb25zdCB0ZXN0c1tdID0geworCXsgeyBNQU5HTEVfTk9ORSwgImZvbyIsICIiLCAiYmFyIiwgTlVMTCwgIkVWRU5UIiwgMCwgMCwgMCwgMCwgMCB9LAorCSAgIntyb290fS9iYXIve2RlcH0ve3Jvb3R9L2Zvby9FVkVOVC4wLjAuYWxsLmFsbC5hbGwiIH0sCisJeyB7IE1BTkdMRV9DUFUsICJmb28iLCAiIiwgImJhciIsIE5VTEwsICJFVkVOVCIsIDAsIDAsIDAsIDAsIDIgfSwKKwkgICJ7cm9vdH0vYmFyL3tkZXB9L3tyb290fS9mb28vRVZFTlQuMC4wLmFsbC5hbGwuMiIgfSwKKwl7IHsgTUFOR0xFX1RJRCwgImZvbyIsICIiLCAiYmFyIiwgTlVMTCwgIkVWRU5UIiwgMCwgMCwgMCwgMzMsIDAgfSwKKwkgICJ7cm9vdH0vYmFyL3tkZXB9L3tyb290fS9mb28vRVZFTlQuMC4wLmFsbC4zMy5hbGwiIH0sCisJeyB7IE1BTkdMRV9UR0lELCAiZm9vIiwgIiIsICJiYXIiLCBOVUxMLCAiRVZFTlQiLCAwLCAwLCAzNCwgMCwgMCB9LAorCSAgIntyb290fS9iYXIve2RlcH0ve3Jvb3R9L2Zvby9FVkVOVC4wLjAuMzQuYWxsLmFsbCIgfSwKKwl7IHsgTUFOR0xFX0tFUk5FTCwgImZvbyIsICIiLCAiYmFyIiwgTlVMTCwgIkVWRU5UIiwgMCwgMCwgMCwgMCwgMCB9LAorCSAgIntrZXJufS9iYXIve2RlcH0ve2tlcm59L2Zvby9FVkVOVC4wLjAuYWxsLmFsbC5hbGwiIH0sCisJeyB7IE1BTkdMRV9DQUxMR1JBUEgsICJmb28tZnJvbSIsICIiLCAiYmFyLWZyb20iLCAiZm9vLXRvIiwgIkVWRU5UIiwgMCwgMCwgMCwgMCwgMCB9LAorCSAgIntyb290fS9iYXItZnJvbS97ZGVwfS97cm9vdH0vZm9vLWZyb20ve2NnfS97cm9vdH0vZm9vLXRvL0VWRU5ULjAuMC5hbGwuYWxsLmFsbCIgfSwKKwl7IHsgTUFOR0xFX0NQVXxNQU5HTEVfVElEfE1BTkdMRV9USUR8TUFOR0xFX1RHSUR8TUFOR0xFX0tFUk5FTCwgImZvbyIsICIiLCAiYmFyIiwgTlVMTCwgIkVWRU5UIiwgMTIzNCwgODE5MiwgMzQsIDM1LCAyIH0sCisJICAie2tlcm59L2Jhci97ZGVwfS97a2Vybn0vZm9vL0VWRU5ULjEyMzQuODE5Mi4zNC4zNS4yIiB9LAorCXsgeyBNQU5HTEVfQ1BVfE1BTkdMRV9USUR8TUFOR0xFX1RJRHxNQU5HTEVfVEdJRHxNQU5HTEVfS0VSTkVMLCAiZm9vMS9mb28yIiwgIiIsICJiYXIxL2JhcjIiLCBOVUxMLCAiRVZFTlQiLCAxMjM0LCA4MTkyLCAzNCwgMzUsIDIgfSwKKwkgICJ7cm9vdH0vYmFyMS9iYXIyL3tkZXB9L3tyb290fS9mb28xL2ZvbzIvRVZFTlQuMTIzNC44MTkyLjM0LjM1LjIiIH0sCisJeyB7IE1BTkdMRV9DQUxMR1JBUEh8TUFOR0xFX0NQVXxNQU5HTEVfVElEfE1BTkdMRV9USUR8TUFOR0xFX1RHSUR8TUFOR0xFX0tFUk5FTCwgImJhcjEvYmFyMiIsICIiLCAiYmFyMS9iYXIyIiwgImJhcjEvYmFyMi10byIsICJFVkVOVCIsIDEyMzQsIDgxOTIsIDM0LCAzNSwgMiB9LAorCSAgIntyb290fS9iYXIxL2JhcjIve2RlcH0ve3Jvb3R9L2JhcjEvYmFyMi97Y2d9L3tyb290fS9iYXIxL2JhcjItdG8vRVZFTlQuMTIzNC44MTkyLjM0LjM1LjIiIH0sCisKKwl7IHsgMCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgMCwgMCwgMCwgMCwgMCB9LCBOVUxMIH0KK307CisKKworaW50IG1haW4odm9pZCkKK3sKKwlzdHJ1Y3QgdGVzdF9pbnB1dCBjb25zdCAqIHRlc3Q7CisJZm9yICh0ZXN0ID0gdGVzdHM7IHRlc3QtPnJlc3VsdDsgKyt0ZXN0KSB7CisJCWNoYXIgKiByZXN1bHQgPSBvcF9tYW5nbGVfZmlsZW5hbWUoJnRlc3QtPnZhbHVlcyk7CisJCWNoYXIgKiBleHBlY3QgPSB4bWFsbG9jKHN0cmxlbih0ZXN0LT5yZXN1bHQpICsKKwkJCQkJc3RybGVuKG9wX3NhbXBsZXNfY3VycmVudF9kaXIpICsgMSk7CisJCXN0cmNweShleHBlY3QsIG9wX3NhbXBsZXNfY3VycmVudF9kaXIpOworCQlzdHJjYXQoZXhwZWN0LCB0ZXN0LT5yZXN1bHQpOworCQlpZiAoc3RyY21wKHJlc3VsdCwgZXhwZWN0KSkgeworCQkJZnByaW50ZihzdGRlcnIsICJ0ZXN0ICVkOlxuZm91bmQ6ICVzXG5leHBlY3Q6ICVzXG4iLAorCQkJCShpbnQpKHRlc3QgLSB0ZXN0cyksIHJlc3VsdCwgZXhwZWN0KTsKKwkJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwkJfQorCQlmcmVlKGV4cGVjdCk7CisJCWZyZWUocmVzdWx0KTsKKwl9CisKKwlyZXR1cm4gRVhJVF9TVUNDRVNTOworfQpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvbGlib3AvdGVzdHMvcGFyc2VfZXZlbnRfdGVzdHMuYyBiL29wcm9maWxlLTAuOS43L2xpYm9wL3Rlc3RzL3BhcnNlX2V2ZW50X3Rlc3RzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGU5ZGFiZQotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2xpYm9wL3Rlc3RzL3BhcnNlX2V2ZW50X3Rlc3RzLmMKQEAgLTAsMCArMSw1OSBAQAorLyoqCisgKiBAZmlsZSBwYXJzZV9ldmVudF90ZXN0cy5jCisgKgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMyBPUHJvZmlsZSBhdXRob3JzCisgKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORworICoKKyAqIEBhdXRob3IgSm9obiBMZXZvbgorICogQGF1dGhvciBQaGlsaXBwZSBFbGllCisgKi8KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICJvcF9wYXJzZV9ldmVudC5oIgorCitzdHJ1Y3QgZXZlbnRzX3Rlc3QgeworCS8qIHNlY29uZCBwb2ludGVyIGlzIHRoZSBudWxsIHRlcm1pbmF0aW5nIGFycmF5IG1hcmtlciAqLworCWNoYXIgY29uc3QgKiBjb25zdCB0ZXN0c1syXTsKKwlzdHJ1Y3QgcGFyc2VkX2V2ZW50IGV4cGVjdGVkOworfTsKKworc3RhdGljIHN0cnVjdCBldmVudHNfdGVzdCBjb25zdCBldmVudHNbXSA9IAoreworCXsgeyAiRk9POjMwMDA6MDowOjAiLCAwIH0sICAgIHsgIkZPTyIsIDMwMDAsIDAsIE5VTEwsIDAsIDAsIDAgfSB9LAorCXsgeyAiQkFSOjMwMDAiLCAwIH0sICAgICAgICAgIHsgIkJBUiIsIDMwMDAsIDAsIE5VTEwsIDEsIDEsIDAgfSB9LAorCXsgeyAiRk9PQkFSOjMwMDA6MToxOjEiLCAwIH0sIHsgIkZPT0JBUiIsIDMwMDAsIDEsIE5VTEwsIDEsIDEsIDAgfSB9LAorCXsgeyBOVUxMLCBOVUxMIH0sICAgICAgICAgICAgIHsgMCwgMCwgMCwgTlVMTCwgMCwgMCwgMCB9IH0KK307CisKK3N0YXRpYyB2b2lkIGRvX3Rlc3Qoc3RydWN0IGV2ZW50c190ZXN0IGNvbnN0ICogZXYpCit7CisJc3RydWN0IHBhcnNlZF9ldmVudCBwYXJzZWQ7CisKKwlwYXJzZV9ldmVudHMoJnBhcnNlZCwgMSwgZXYtPnRlc3RzKTsKKworCWlmIChzdHJjbXAoZXYtPmV4cGVjdGVkLm5hbWUsIHBhcnNlZC5uYW1lKSB8fAorCSAgICBldi0+ZXhwZWN0ZWQuY291bnQgIT0gcGFyc2VkLmNvdW50IHx8CisJICAgIGV2LT5leHBlY3RlZC51bml0X21hc2sgIT0gcGFyc2VkLnVuaXRfbWFzayB8fAorCSAgICBldi0+ZXhwZWN0ZWQua2VybmVsICE9IHBhcnNlZC5rZXJuZWwgfHwKKwkgICAgZXYtPmV4cGVjdGVkLnVzZXIgIT0gcGFyc2VkLnVzZXIpIHsKKwkJcHJpbnRmKCJmb3IgJXMgZXhwZWN0IHsgJXMsICVkLCAlZCwgJWQsICVkIH0gZm91bmQgIgorCQkgICAgICAgInsgJXMsICVkLCAlZCwgJWQsICVkIH1cbiIsCisgICAgICAgICAgICAgICAgICAgICAgIGV2LT50ZXN0c1swXSwgZXYtPmV4cGVjdGVkLm5hbWUsIGV2LT5leHBlY3RlZC5jb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgZXYtPmV4cGVjdGVkLnVuaXRfbWFzaywgZXYtPmV4cGVjdGVkLmtlcm5lbCwKKyAgICAgICAgICAgICAgICAgICAgICAgZXYtPmV4cGVjdGVkLnVzZXIsIHBhcnNlZC5uYW1lLCBwYXJzZWQuY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlZC51bml0X21hc2ssIHBhcnNlZC5rZXJuZWwsIHBhcnNlZC51c2VyKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KK30KKworaW50IG1haW4odm9pZCkKK3sKKwlzdHJ1Y3QgZXZlbnRzX3Rlc3QgY29uc3QgKiBldjsKKwlmb3IgKGV2ID0gZXZlbnRzOyBldi0+dGVzdHNbMF07ICsrZXYpCisJCWRvX3Rlc3QoZXYpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9saWJvcC90ZXN0cy91dGY4X2NoZWNrZXIuc2ggYi9vcHJvZmlsZS0wLjkuNy9saWJvcC90ZXN0cy91dGY4X2NoZWNrZXIuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTQ3ZTkxMAotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2xpYm9wL3Rlc3RzL3V0ZjhfY2hlY2tlci5zaApAQCAtMCwwICsxLDE2IEBACisjIS9iaW4vc2gKKworIyBUaGlzIHNjcmlwdCB2YWxpZGF0ZXMgdGhhdCBhbGwgZXZlbnQgZGVzY3JpcHRpb25zIGluIHRoZSB2YXJpb3VzCisjIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBldmVudHMgZmlsZXMgY29udGFpbiBvbmx5IFVURi04IGNoYXJhY3RlcnMuCisjIFdoaWxlIHRoaXMgaXMgbm90IGEgcmVxdWlyZW1lbnQgZm9yIHRoZSBjb21tYW5kLWxpbmUgdG9vbHMgb2Ygb3Byb2ZpbGUsCisjIG1hbnkgR1VJIHRvb2xzIChpbiBwYXJ0aWN1bGFyLCB0aGUgb3Byb2ZpbGUgcGx1Z2luIGZyb20gRWNsaXBzZSBMVFApIGRvCisjIGhhdmUgc3VjaCBhIHJlcXVpcmVtZW50LgorCitDTURfT1VUUFVUPSQoZmluZCAuLi8uLi9ldmVudHMvIC1uYW1lIGV2ZW50cyAtdHlwZSBmIHwgeGFyZ3MgY2F0ICB8IHBlcmwgLW5lICcvXigoW1x4MDAtXHg3Zl18W1x4YzAtXHhkZl1bXHg4MC1ceGJmXXxbXHhlMC1ceGVmXVtceDgwLVx4YmZdezJ9fFtceGYwLVx4ZjddW1x4ODAtXHhiZl17M30pKikoLiopJC87cHJpbnQgIiRBUkdWOiQuOiIuKCQtWzNdKzEpLiI6JF8iIGlmIGxlbmd0aCgkMyknKQorCitpZiBbIC1uICIkQ01EX09VVFBVVCIgXSA7IHRoZW4KKwllY2hvICIgICA8PCBVVEYtOCB2YWxpZGF0aW9uIG9mIGV2ZW50cyBmaWxlcyBGQUlMRUQgPj4iCisJZWNobyAiJENNRF9PVVRQVVQiCisJZXhpdCAxCitmaQorCmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9saWJvcGFnZW50L01ha2VmaWxlLmFtIGIvb3Byb2ZpbGUtMC45LjcvbGlib3BhZ2VudC9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Yjg5MWEzCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvbGlib3BhZ2VudC9NYWtlZmlsZS5hbQpAQCAtMCwwICsxLDI1IEBACitwa2dsaWJfTFRMSUJSQVJJRVMgPSBsaWJvcGFnZW50LmxhCisKKyMgaW5zdGFsbCBvcGFnZW50LmggdG8gaW5jbHVkZSBkaXJlY3RvcnkKK2luY2x1ZGVfSEVBREVSUyA9IG9wYWdlbnQuaAorCitsaWJvcGFnZW50X2xhX1NPVVJDRVMgPSBvcGFnZW50LmMgXAorCQkJaml0ZHVtcC5oIFwKKwkJCW9wYWdlbnQuaAorCitFWFRSQV9ESVNUID0gb3BhZ2VudF9zeW1ib2xzLnZlcgorCisKK2xpYm9wYWdlbnRfbGFfQ0ZMQUdTID0gLWZQSUMgLUkgJHt0b3Bfc3JjZGlyfS9saWJvcCAtSSAke3RvcF9zcmNkaXJ9L2xpYnV0aWwKK2xpYm9wYWdlbnRfbGFfTElCQUREID0gJChCRkRfTElCUykKKworIyBEbyBub3QgaW5jcmVtZW50IHRoZSBtYWpvciB2ZXJzaW9uIGZvciB0aGlzIGxpYnJhcnkgZXhjZXB0IHRvCisjIGludGVudGlvbmFsbHkgYnJlYWsgYmFja3dhcmQgQUJJIGNvbXBhdGFiaWxpdHkuICBVc2UgdGhlCisjIHN5bWJvbCB2ZXJzaW9uaW5nIHRlY2huaXF1ZSAodmlhIHRoZSB2ZXJzaW9uIHNjcmlwdCkgdG8gYWRkIG5ldyBvcgorIyBjaGFuZ2UgZXhpc3RpbmcgZnVuY3Rpb25zOyB0aGVuIGp1c3QgaW5jcmVtZW50IHRoZSBtaW5vciB2ZXJzaW9uLgorIyBTZWUgaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2JpbnV0aWxzL21hbnVhbC9sZC0yLjkuMS9odG1sX25vZGUvbGRfMjUuaHRtbAorIyBmb3IgZGV0YWlscyBhYm91dCB0aGUgLS12ZXJzaW9uLXNjcmlwdCBvcHRpb24uCitsaWJvcGFnZW50X2xhX0xERkxBR1MgPSAtdmVyc2lvbi1pbmZvICAxOjA6MCBcCisJCQktV2wsLS12ZXJzaW9uLXNjcmlwdD0ke3RvcF9zcmNkaXJ9L2xpYm9wYWdlbnQvb3BhZ2VudF9zeW1ib2xzLnZlcgorCisKZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2xpYm9wYWdlbnQvTWFrZWZpbGUuaW4gYi9vcHJvZmlsZS0wLjkuNy9saWJvcGFnZW50L01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlOWRjYTMKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9saWJvcGFnZW50L01ha2VmaWxlLmluCkBAIC0wLDAgKzEsNjI2IEBACisjIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjExLjEgZnJvbSBNYWtlZmlsZS5hbS4KKyMgQGNvbmZpZ3VyZV9pbnB1dEAKKworIyBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsCisjIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyMgSW5jLgorIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAorIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCisjIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworQFNFVF9NQUtFQAorCisKK1ZQQVRIID0gQHNyY2RpckAKK3BrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAorcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACitwa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACitwa2dsaWJleGVjZGlyID0gJChsaWJleGVjZGlyKS9AUEFDS0FHRUAKK2FtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKK2luc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0CitpbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCitpbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKK0lOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCit0cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCitOT1JNQUxfSU5TVEFMTCA9IDoKK1BSRV9JTlNUQUxMID0gOgorUE9TVF9JTlNUQUxMID0gOgorTk9STUFMX1VOSU5TVEFMTCA9IDoKK1BSRV9VTklOU1RBTEwgPSA6CitQT1NUX1VOSU5TVEFMTCA9IDoKK2J1aWxkX3RyaXBsZXQgPSBAYnVpbGRACitob3N0X3RyaXBsZXQgPSBAaG9zdEAKK3N1YmRpciA9IGxpYm9wYWdlbnQKK0RJU1RfQ09NTU9OID0gJChpbmNsdWRlX0hFQURFUlMpICQoc3JjZGlyKS9NYWtlZmlsZS5hbSBcCisJJChzcmNkaXIpL01ha2VmaWxlLmluCitBQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00CithbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9tNC9iaW51dGlscy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9idWlsdGluZXhwZWN0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2NlbGxzcHViZmRzdXBwb3J0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2NvbXBpbGVyb3B0aW9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2NvbmZpZ21vZHVsZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jb3B5aWZjaGFuZ2UubTQgJCh0b3Bfc3JjZGlyKS9tNC9kb2Nib29rLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2V4dHJhZGlycy5tNCAkKHRvcF9zcmNkaXIpL200L2ZpbmRrZXJuZWwubTQgXAorCSQodG9wX3NyY2RpcikvbTQva2VybmVsb3B0aW9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2tlcm5lbHZlcnNpb24ubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWJ0b29sLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2x0b3B0aW9ucy5tNCAkKHRvcF9zcmNkaXIpL200L2x0c3VnYXIubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbHR2ZXJzaW9uLm00ICQodG9wX3NyY2RpcikvbTQvbHR+b2Jzb2xldGUubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbWFsbG9jYXR0cmlidXRlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3BvcHRjb25zdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9wcmVjb21waWxlZGhlYWRlci5tNCAkKHRvcF9zcmNkaXIpL200L3F0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3Jlc3VsdHluLm00ICQodG9wX3NyY2RpcikvbTQvc3N0cmVhbS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC90eXBlZGVmLm00ICQodG9wX3NyY2RpcikvY29uZmlndXJlLmluCithbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAorCSQoQUNMT0NBTF9NNCkKK21raW5zdGFsbGRpcnMgPSAkKGluc3RhbGxfc2gpIC1kCitDT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5oCitDT05GSUdfQ0xFQU5fRklMRVMgPQorQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTID0KK2FtX192cGF0aF9hZGpfc2V0dXAgPSBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOworYW1fX3ZwYXRoX2FkaiA9IGNhc2UgJCRwIGluIFwKKyAgICAkKHNyY2RpcikvKikgZj1gZWNobyAiJCRwIiB8IHNlZCAic3xeJCRzcmNkaXJzdHJpcC98fCJgOzsgXAorICAgICopIGY9JCRwOzsgXAorICBlc2FjOworYW1fX3N0cmlwX2RpciA9IGY9YGVjaG8gJCRwIHwgc2VkIC1lICdzfF4uKi98fCdgOworYW1fX2luc3RhbGxfbWF4ID0gNDAKK2FtX19ub2Jhc2Vfc3RyaXBfc2V0dXAgPSBcCisgIHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCp8XS9cXFxcJi9nJ2AKK2FtX19ub2Jhc2Vfc3RyaXAgPSBcCisgIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwIjsgZG9uZSB8IHNlZCAtZSAic3wkJHNyY2RpcnN0cmlwL3x8IgorYW1fX25vYmFzZV9saXN0ID0gJChhbV9fbm9iYXNlX3N0cmlwX3NldHVwKTsgXAorICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCAkJHAiOyBkb25lIHwgXAorICBzZWQgInN8ICQkc3JjZGlyc3RyaXAvfCB8OyInIC8gLipcLy8hcy8gLiovIC4vOyBzLFwoIC4qXCkvW14vXSokJCxcMSwnIHwgXAorICAkKEFXSykgJ0JFR0lOIHsgZmlsZXNbIi4iXSA9ICIiIH0geyBmaWxlc1skJDJdID0gZmlsZXNbJCQyXSAiICIgJCQxOyBcCisgICAgaWYgKCsrblskJDJdID09ICQoYW1fX2luc3RhbGxfbWF4KSkgXAorICAgICAgeyBwcmludCAkJDIsIGZpbGVzWyQkMl07IG5bJCQyXSA9IDA7IGZpbGVzWyQkMl0gPSAiIiB9IH0gXAorICAgIEVORCB7IGZvciAoZGlyIGluIGZpbGVzKSBwcmludCBkaXIsIGZpbGVzW2Rpcl0gfScKK2FtX19iYXNlX2xpc3QgPSBcCisgIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycgfCBcCisgIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycKK2FtX19pbnN0YWxsZGlycyA9ICIkKERFU1RESVIpJChwa2dsaWJkaXIpIiAiJChERVNURElSKSQoaW5jbHVkZWRpcikiCitMVExJQlJBUklFUyA9ICQocGtnbGliX0xUTElCUkFSSUVTKQorYW1fX0RFUEVOREVOQ0lFU18xID0KK2xpYm9wYWdlbnRfbGFfREVQRU5ERU5DSUVTID0gJChhbV9fREVQRU5ERU5DSUVTXzEpCithbV9saWJvcGFnZW50X2xhX09CSkVDVFMgPSBsaWJvcGFnZW50X2xhLW9wYWdlbnQubG8KK2xpYm9wYWdlbnRfbGFfT0JKRUNUUyA9ICQoYW1fbGlib3BhZ2VudF9sYV9PQkpFQ1RTKQorbGlib3BhZ2VudF9sYV9MSU5LID0gJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAorCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpICQobGlib3BhZ2VudF9sYV9DRkxBR1MpIFwKKwkkKENGTEFHUykgJChsaWJvcGFnZW50X2xhX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKK0RFRkFVTFRfSU5DTFVERVMgPSAtSS5AYW1fX2lzcmNAIC1JJCh0b3BfYnVpbGRkaXIpCitkZXBjb21wID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9kZXBjb21wCithbV9fZGVwZmlsZXNfbWF5YmUgPSBkZXBmaWxlcworYW1fX212ID0gbXYgLWYKK0NPTVBJTEUgPSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgXAorCSQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKK0xUQ09NUElMRSA9ICQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSBcCisJLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpIFwKKwkkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpCitDQ0xEID0gJChDQykKK0xJTksgPSAkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgXAorCS0tbW9kZT1saW5rICQoQ0NMRCkgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAkKEFNX0xERkxBR1MpIFwKKwkkKExERkxBR1MpIC1vICRACitTT1VSQ0VTID0gJChsaWJvcGFnZW50X2xhX1NPVVJDRVMpCitESVNUX1NPVVJDRVMgPSAkKGxpYm9wYWdlbnRfbGFfU09VUkNFUykKK0hFQURFUlMgPSAkKGluY2x1ZGVfSEVBREVSUykKK0VUQUdTID0gZXRhZ3MKK0NUQUdTID0gY3RhZ3MKK0RJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCitBQ0xPQ0FMID0gQEFDTE9DQUxACitBTVRBUiA9IEBBTVRBUkAKK0FSID0gQEFSQAorQVVUT0NPTkYgPSBAQVVUT0NPTkZACitBVVRPSEVBREVSID0gQEFVVE9IRUFERVJACitBVVRPTUFLRSA9IEBBVVRPTUFLRUAKK0FXSyA9IEBBV0tACitCRkRfTElCUyA9IEBCRkRfTElCU0AKK0NBVF9FTlRSWV9FTkQgPSBAQ0FUX0VOVFJZX0VOREAKK0NBVF9FTlRSWV9TVEFSVCA9IEBDQVRfRU5UUllfU1RBUlRACitDQyA9IEBDQ0AKK0NDREVQTU9ERSA9IEBDQ0RFUE1PREVACitDRkxBR1MgPSBAQ0ZMQUdTQAorQ1BQID0gQENQUEAKK0NQUEZMQUdTID0gQENQUEZMQUdTQAorQ1hYID0gQENYWEAKK0NYWENQUCA9IEBDWFhDUFBACitDWFhERVBNT0RFID0gQENYWERFUE1PREVACitDWFhGTEFHUyA9IEBDWFhGTEFHU0AKK0NZR1BBVEhfVyA9IEBDWUdQQVRIX1dACitEQVRFID0gQERBVEVACitERUZTID0gQERFRlNACitERVBESVIgPSBAREVQRElSQAorRE9DQk9PS19ST09UID0gQERPQ0JPT0tfUk9PVEAKK0RTWU1VVElMID0gQERTWU1VVElMQAorRFVNUEJJTiA9IEBEVU1QQklOQAorRUNIT19DID0gQEVDSE9fQ0AKK0VDSE9fTiA9IEBFQ0hPX05ACitFQ0hPX1QgPSBARUNIT19UQAorRUdSRVAgPSBARUdSRVBACitFWEVFWFQgPSBARVhFRVhUQAorRVhUUkFfQ0ZMQUdTX01PRFVMRSA9IEBFWFRSQV9DRkxBR1NfTU9EVUxFQAorRkdSRVAgPSBARkdSRVBACitHUkVQID0gQEdSRVBACitJTlNUQUxMID0gQElOU1RBTExACitJTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAorSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKK0lOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAorSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKK0pBVkFfSE9NRURJUiA9IEBKQVZBX0hPTUVESVJACitLSU5DID0gQEtJTkNACitLU1JDID0gQEtTUkNACitLVkVSUyA9IEBLVkVSU0AKK0xEID0gQExEQAorTERGTEFHUyA9IEBMREZMQUdTQAorTElCRVJUWV9MSUJTID0gQExJQkVSVFlfTElCU0AKK0xJQk9CSlMgPSBATElCT0JKU0AKK0xJQlMgPSBATElCU0AKK0xJQlRPT0wgPSBATElCVE9PTEAKK0xJUE8gPSBATElQT0AKK0xOX1MgPSBATE5fU0AKK0xUTElCT0JKUyA9IEBMVExJQk9CSlNACitNQUtFSU5GTyA9IEBNQUtFSU5GT0AKK01LRElSX1AgPSBATUtESVJfUEAKK01PQyA9IEBNT0NACitNT0RJTlNUQUxMRElSID0gQE1PRElOU1RBTExESVJACitOTSA9IEBOTUAKK05NRURJVCA9IEBOTUVESVRACitPQkpEVU1QID0gQE9CSkRVTVBACitPQkpFWFQgPSBAT0JKRVhUQAorT1BST0ZJTEVfRElSID0gQE9QUk9GSUxFX0RJUkAKK09QUk9GSUxFX01PRFVMRV9BUkNIID0gQE9QUk9GSUxFX01PRFVMRV9BUkNIQAorT1BfQ0ZMQUdTID0gQE9QX0NGTEFHU0AKK09QX0NYWEZMQUdTID0gQE9QX0NYWEZMQUdTQAorT1BfRE9DRElSID0gQE9QX0RPQ0RJUkAKK09UT09MID0gQE9UT09MQAorT1RPT0w2NCA9IEBPVE9PTDY0QAorUEFDS0FHRSA9IEBQQUNLQUdFQAorUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACitQQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAorUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACitQQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAorUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACitQQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAorUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACitQS0dfQ09ORklHID0gQFBLR19DT05GSUdACitQS0dfQ09ORklHX0xJQkRJUiA9IEBQS0dfQ09ORklHX0xJQkRJUkAKK1BLR19DT05GSUdfUEFUSCA9IEBQS0dfQ09ORklHX1BBVEhACitQT1BUX0xJQlMgPSBAUE9QVF9MSUJTQAorUFRSRElGRl9UX1RZUEUgPSBAUFRSRElGRl9UX1RZUEVACitRVF9DRkxBR1MgPSBAUVRfQ0ZMQUdTQAorUVRfSU5DTFVERVMgPSBAUVRfSU5DTFVERVNACitRVF9MREZMQUdTID0gQFFUX0xERkxBR1NACitRVF9MSUIgPSBAUVRfTElCQAorUVRfTElCUyA9IEBRVF9MSUJTQAorUVRfVkVSU0lPTiA9IEBRVF9WRVJTSU9OQAorUkFOTElCID0gQFJBTkxJQkAKK1NFRCA9IEBTRURACitTRVRfTUFLRSA9IEBTRVRfTUFLRUAKK1NIRUxMID0gQFNIRUxMQAorU0laRV9UX1RZUEUgPSBAU0laRV9UX1RZUEVACitTVFJJUCA9IEBTVFJJUEAKK1VJQyA9IEBVSUNACitVSUNoZWxwID0gQFVJQ2hlbHBACitWRVJTSU9OID0gQFZFUlNJT05ACitYTUtNRiA9IEBYTUtNRkAKK1hNTF9DQVRBTE9HID0gQFhNTF9DQVRBTE9HQAorWFNMVFBST0MgPSBAWFNMVFBST0NACitYU0xUUFJPQ19GTEFHUyA9IEBYU0xUUFJPQ19GTEFHU0AKK1hfQ0ZMQUdTID0gQFhfQ0ZMQUdTQAorWF9FWFRSQV9MSUJTID0gQFhfRVhUUkFfTElCU0AKK1hfTElCUyA9IEBYX0xJQlNACitYX1BSRV9MSUJTID0gQFhfUFJFX0xJQlNACithYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAorYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAorYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAorYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACithY19jdF9DQyA9IEBhY19jdF9DQ0AKK2FjX2N0X0NYWCA9IEBhY19jdF9DWFhACithY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACithbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKK2FtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACithbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAorYW1fX3RhciA9IEBhbV9fdGFyQAorYW1fX3VudGFyID0gQGFtX191bnRhckAKK2JpbmRpciA9IEBiaW5kaXJACitidWlsZCA9IEBidWlsZEAKK2J1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAorYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKK2J1aWxkX29zID0gQGJ1aWxkX29zQAorYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKK2J1aWxkZGlyID0gQGJ1aWxkZGlyQAorZGF0YWRpciA9IEBkYXRhZGlyQAorZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACitkb2NkaXIgPSBAZG9jZGlyQAorZHZpZGlyID0gQGR2aWRpckAKK2V4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAoraG9zdCA9IEBob3N0QAoraG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAoraG9zdF9jcHUgPSBAaG9zdF9jcHVACitob3N0X29zID0gQGhvc3Rfb3NACitob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKK2h0bWxkaXIgPSBAaHRtbGRpckAKK2luY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKK2luZm9kaXIgPSBAaW5mb2RpckAKK2luc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKK2xpYmRpciA9IEBsaWJkaXJACitsaWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACitsb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAorbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAorbHRfRUNITyA9IEBsdF9FQ0hPQAorbWFuZGlyID0gQG1hbmRpckAKK21rZGlyX3AgPSBAbWtkaXJfcEAKK29sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKK3BkZmRpciA9IEBwZGZkaXJACitwcmVmaXggPSBAcHJlZml4QAorcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAorcHNkaXIgPSBAcHNkaXJACitzYmluZGlyID0gQHNiaW5kaXJACitzaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKK3NyY2RpciA9IEBzcmNkaXJACitzeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACit0YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAordG9wX2J1aWxkX3ByZWZpeCA9IEB0b3BfYnVpbGRfcHJlZml4QAordG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKK3RvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKK3RvcGRpciA9IEB0b3BkaXJACitwa2dsaWJfTFRMSUJSQVJJRVMgPSBsaWJvcGFnZW50LmxhCisKKyMgaW5zdGFsbCBvcGFnZW50LmggdG8gaW5jbHVkZSBkaXJlY3RvcnkKK2luY2x1ZGVfSEVBREVSUyA9IG9wYWdlbnQuaAorbGlib3BhZ2VudF9sYV9TT1VSQ0VTID0gb3BhZ2VudC5jIFwKKwkJCWppdGR1bXAuaCBcCisJCQlvcGFnZW50LmgKKworRVhUUkFfRElTVCA9IG9wYWdlbnRfc3ltYm9scy52ZXIKK2xpYm9wYWdlbnRfbGFfQ0ZMQUdTID0gLWZQSUMgLUkgJHt0b3Bfc3JjZGlyfS9saWJvcCAtSSAke3RvcF9zcmNkaXJ9L2xpYnV0aWwKK2xpYm9wYWdlbnRfbGFfTElCQUREID0gJChCRkRfTElCUykKKworIyBEbyBub3QgaW5jcmVtZW50IHRoZSBtYWpvciB2ZXJzaW9uIGZvciB0aGlzIGxpYnJhcnkgZXhjZXB0IHRvCisjIGludGVudGlvbmFsbHkgYnJlYWsgYmFja3dhcmQgQUJJIGNvbXBhdGFiaWxpdHkuICBVc2UgdGhlCisjIHN5bWJvbCB2ZXJzaW9uaW5nIHRlY2huaXF1ZSAodmlhIHRoZSB2ZXJzaW9uIHNjcmlwdCkgdG8gYWRkIG5ldyBvcgorIyBjaGFuZ2UgZXhpc3RpbmcgZnVuY3Rpb25zOyB0aGVuIGp1c3QgaW5jcmVtZW50IHRoZSBtaW5vciB2ZXJzaW9uLgorIyBTZWUgaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2JpbnV0aWxzL21hbnVhbC9sZC0yLjkuMS9odG1sX25vZGUvbGRfMjUuaHRtbAorIyBmb3IgZGV0YWlscyBhYm91dCB0aGUgLS12ZXJzaW9uLXNjcmlwdCBvcHRpb24uCitsaWJvcGFnZW50X2xhX0xERkxBR1MgPSAtdmVyc2lvbi1pbmZvICAxOjA6MCBcCisJCQktV2wsLS12ZXJzaW9uLXNjcmlwdD0ke3RvcF9zcmNkaXJ9L2xpYm9wYWdlbnQvb3BhZ2VudF9zeW1ib2xzLnZlcgorCithbGw6IGFsbC1hbQorCisuU1VGRklYRVM6CisuU1VGRklYRVM6IC5jIC5sbyAubyAub2JqCiskKHNyY2RpcikvTWFrZWZpbGUuaW46ICAkKHNyY2RpcikvTWFrZWZpbGUuYW0gICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCUBmb3IgZGVwIGluICQ/OyBkbyBcCisJICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKKwkgICAgKiQkZGVwKikgXAorCSAgICAgICggY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoICkgXAorCSAgICAgICAgJiYgeyBpZiB0ZXN0IC1mICRAOyB0aGVuIGV4aXQgMDsgZWxzZSBicmVhazsgZmk7IH07IFwKKwkgICAgICBleGl0IDE7OyBcCisJICBlc2FjOyBcCisJZG9uZTsgXAorCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZm9yZWlnbiBsaWJvcGFnZW50L01ha2VmaWxlJzsgXAorCSQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmIFwKKwkgICQoQVVUT01BS0UpIC0tZm9yZWlnbiBsaWJvcGFnZW50L01ha2VmaWxlCisuUFJFQ0lPVVM6IE1ha2VmaWxlCitNYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCisJQGNhc2UgJyQ/JyBpbiBcCisJICAqY29uZmlnLnN0YXR1cyopIFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoOzsgXAorCSAgKikgXAorCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCisJZXNhYzsKKworJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2RpcikvY29uZmlndXJlICQoQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCisKKyQodG9wX3NyY2RpcikvY29uZmlndXJlOiAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCiskKEFDTE9DQUxfTTQpOiAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorJChhbV9fYWNsb2NhbF9tNF9kZXBzKToKK2luc3RhbGwtcGtnbGliTFRMSUJSQVJJRVM6ICQocGtnbGliX0xUTElCUkFSSUVTKQorCUAkKE5PUk1BTF9JTlNUQUxMKQorCXRlc3QgLXogIiQocGtnbGliZGlyKSIgfHwgJChNS0RJUl9QKSAiJChERVNURElSKSQocGtnbGliZGlyKSIKKwlAbGlzdD0nJChwa2dsaWJfTFRMSUJSQVJJRVMpJzsgdGVzdCAtbiAiJChwa2dsaWJkaXIpIiB8fCBsaXN0PTsgXAorCWxpc3QyPTsgZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0IC1mICQkcDsgdGhlbiBcCisJICAgIGxpc3QyPSIkJGxpc3QyICQkcCI7IFwKKwkgIGVsc2UgOjsgZmk7IFwKKwlkb25lOyBcCisJdGVzdCAteiAiJCRsaXN0MiIgfHwgeyBcCisJICBlY2hvICIgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1pbnN0YWxsICQoSU5TVEFMTCkgJChJTlNUQUxMX1NUUklQX0ZMQUcpICQkbGlzdDIgJyQoREVTVERJUikkKHBrZ2xpYmRpciknIjsgXAorCSAgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1pbnN0YWxsICQoSU5TVEFMTCkgJChJTlNUQUxMX1NUUklQX0ZMQUcpICQkbGlzdDIgIiQoREVTVERJUikkKHBrZ2xpYmRpcikiOyBcCisJfQorCit1bmluc3RhbGwtcGtnbGliTFRMSUJSQVJJRVM6CisJQCQoTk9STUFMX1VOSU5TVEFMTCkKKwlAbGlzdD0nJChwa2dsaWJfTFRMSUJSQVJJRVMpJzsgdGVzdCAtbiAiJChwa2dsaWJkaXIpIiB8fCBsaXN0PTsgXAorCWZvciBwIGluICQkbGlzdDsgZG8gXAorCSAgJChhbV9fc3RyaXBfZGlyKSBcCisJICBlY2hvICIgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT11bmluc3RhbGwgcm0gLWYgJyQoREVTVERJUikkKHBrZ2xpYmRpcikvJCRmJyI7IFwKKwkgICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9dW5pbnN0YWxsIHJtIC1mICIkKERFU1RESVIpJChwa2dsaWJkaXIpLyQkZiI7IFwKKwlkb25lCisKK2NsZWFuLXBrZ2xpYkxUTElCUkFSSUVTOgorCS10ZXN0IC16ICIkKHBrZ2xpYl9MVExJQlJBUklFUykiIHx8IHJtIC1mICQocGtnbGliX0xUTElCUkFSSUVTKQorCUBsaXN0PSckKHBrZ2xpYl9MVExJQlJBUklFUyknOyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwkgIGRpcj0iYGVjaG8gJCRwIHwgc2VkIC1lICdzfC9bXi9dKiQkfHwnYCI7IFwKKwkgIHRlc3QgIiQkZGlyIiAhPSAiJCRwIiB8fCBkaXI9LjsgXAorCSAgZWNobyAicm0gLWYgXCIkJHtkaXJ9L3NvX2xvY2F0aW9uc1wiIjsgXAorCSAgcm0gLWYgIiQke2Rpcn0vc29fbG9jYXRpb25zIjsgXAorCWRvbmUKK2xpYm9wYWdlbnQubGE6ICQobGlib3BhZ2VudF9sYV9PQkpFQ1RTKSAkKGxpYm9wYWdlbnRfbGFfREVQRU5ERU5DSUVTKSAKKwkkKGxpYm9wYWdlbnRfbGFfTElOSykgLXJwYXRoICQocGtnbGliZGlyKSAkKGxpYm9wYWdlbnRfbGFfT0JKRUNUUykgJChsaWJvcGFnZW50X2xhX0xJQkFERCkgJChMSUJTKQorCittb3N0bHljbGVhbi1jb21waWxlOgorCS1ybSAtZiAqLiQoT0JKRVhUKQorCitkaXN0Y2xlYW4tY29tcGlsZToKKwktcm0gLWYgKi50YWIuYworCitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGlib3BhZ2VudF9sYS1vcGFnZW50LlBsb0BhbV9fcXVvdGVACisKKy5jLm86CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJCouVHBvIC1jIC1vICRAICQ8CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENPTVBJTEUpIC1jICQ8CisKKy5jLm9iajoKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDT01QSUxFKSAtYyBgJChDWUdQQVRIX1cpICckPCdgCisKKy5jLmxvOgorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMVENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJCouVHBvIC1jIC1vICRAICQ8CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTFRDT01QSUxFKSAtYyAtbyAkQCAkPAorCitsaWJvcGFnZW50X2xhLW9wYWdlbnQubG86IG9wYWdlbnQuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMSUJUT09MKSAgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJvcGFnZW50X2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJvcGFnZW50X2xhLW9wYWdlbnQubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYm9wYWdlbnRfbGEtb3BhZ2VudC5UcG8gLWMgLW8gbGlib3BhZ2VudF9sYS1vcGFnZW50LmxvIGB0ZXN0IC1mICdvcGFnZW50LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYG9wYWdlbnQuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQoREVQRElSKS9saWJvcGFnZW50X2xhLW9wYWdlbnQuVHBvICQoREVQRElSKS9saWJvcGFnZW50X2xhLW9wYWdlbnQuUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSdvcGFnZW50LmMnIG9iamVjdD0nbGlib3BhZ2VudF9sYS1vcGFnZW50LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMSUJUT09MKSAgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJvcGFnZW50X2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYm9wYWdlbnRfbGEtb3BhZ2VudC5sbyBgdGVzdCAtZiAnb3BhZ2VudC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BvcGFnZW50LmMKKworbW9zdGx5Y2xlYW4tbGlidG9vbDoKKwktcm0gLWYgKi5sbworCitjbGVhbi1saWJ0b29sOgorCS1ybSAtcmYgLmxpYnMgX2xpYnMKK2luc3RhbGwtaW5jbHVkZUhFQURFUlM6ICQoaW5jbHVkZV9IRUFERVJTKQorCUAkKE5PUk1BTF9JTlNUQUxMKQorCXRlc3QgLXogIiQoaW5jbHVkZWRpcikiIHx8ICQoTUtESVJfUCkgIiQoREVTVERJUikkKGluY2x1ZGVkaXIpIgorCUBsaXN0PSckKGluY2x1ZGVfSEVBREVSUyknOyB0ZXN0IC1uICIkKGluY2x1ZGVkaXIpIiB8fCBsaXN0PTsgXAorCWZvciBwIGluICQkbGlzdDsgZG8gXAorCSAgaWYgdGVzdCAtZiAiJCRwIjsgdGhlbiBkPTsgZWxzZSBkPSIkKHNyY2RpcikvIjsgZmk7IFwKKwkgIGVjaG8gIiQkZCQkcCI7IFwKKwlkb25lIHwgJChhbV9fYmFzZV9saXN0KSB8IFwKKwl3aGlsZSByZWFkIGZpbGVzOyBkbyBcCisJICBlY2hvICIgJChJTlNUQUxMX0hFQURFUikgJCRmaWxlcyAnJChERVNURElSKSQoaW5jbHVkZWRpciknIjsgXAorCSAgJChJTlNUQUxMX0hFQURFUikgJCRmaWxlcyAiJChERVNURElSKSQoaW5jbHVkZWRpcikiIHx8IGV4aXQgJCQ/OyBcCisJZG9uZQorCit1bmluc3RhbGwtaW5jbHVkZUhFQURFUlM6CisJQCQoTk9STUFMX1VOSU5TVEFMTCkKKwlAbGlzdD0nJChpbmNsdWRlX0hFQURFUlMpJzsgdGVzdCAtbiAiJChpbmNsdWRlZGlyKSIgfHwgbGlzdD07IFwKKwlmaWxlcz1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICQkcDsgZG9uZSB8IHNlZCAtZSAnc3xeLiovfHwnYDsgXAorCXRlc3QgLW4gIiQkZmlsZXMiIHx8IGV4aXQgMDsgXAorCWVjaG8gIiAoIGNkICckKERFU1RESVIpJChpbmNsdWRlZGlyKScgJiYgcm0gLWYiICQkZmlsZXMgIikiOyBcCisJY2QgIiQoREVTVERJUikkKGluY2x1ZGVkaXIpIiAmJiBybSAtZiAkJGZpbGVzCisKK0lEOiAkKEhFQURFUlMpICQoU09VUkNFUykgJChMSVNQKSAkKFRBR1NfRklMRVMpCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCisJICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCisJbWtpZCAtZklEICQkdW5pcXVlCit0YWdzOiBUQUdTCisKK1RBR1M6ICAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKKwkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCisJc2V0IHg7IFwKKwloZXJlPWBwd2RgOyBcCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorCXNoaWZ0OyBcCisJaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkKiQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKKwkgIHRlc3QgLW4gIiQkdW5pcXVlIiB8fCB1bmlxdWU9JCRlbXB0eV9maXg7IFwKKwkgIGlmIHRlc3QgJCQjIC1ndCAwOyB0aGVuIFwKKwkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAorCSAgICAgICIkJEAiICQkdW5pcXVlOyBcCisJICBlbHNlIFwKKwkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAorCSAgICAgICQkdW5pcXVlOyBcCisJICBmaTsgXAorCWZpCitjdGFnczogQ1RBR1MKK0NUQUdTOiAgJChIRUFERVJTKSAkKFNPVVJDRVMpICAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCisJCSQoVEFHU19GSUxFUykgJChMSVNQKQorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKwkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKwl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR1bmlxdWUiIFwKKwkgIHx8ICQoQ1RBR1MpICQoQ1RBR1NGTEFHUykgJChBTV9DVEFHU0ZMQUdTKSAkKENUQUdTX0FSR1MpIFwKKwkgICAgICQkdW5pcXVlCisKK0dUQUdTOgorCWhlcmU9YCQoYW1fX2NkKSAkKHRvcF9idWlsZGRpcikgJiYgcHdkYCBcCisJICAmJiAkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSBcCisJICAmJiBndGFncyAtaSAkKEdUQUdTX0FSR1MpICIkJGhlcmUiCisKK2Rpc3RjbGVhbi10YWdzOgorCS1ybSAtZiBUQUdTIElEIEdUQUdTIEdSVEFHUyBHU1lNUyBHUEFUSCB0YWdzCisKK2Rpc3RkaXI6ICQoRElTVEZJTEVTKQorCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisJbGlzdD0nJChESVNURklMRVMpJzsgXAorCSAgZGlzdF9maWxlcz1gZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8IFwKKwkgIHNlZCAtZSAic3xeJCRzcmNkaXJzdHJpcC98fDt0IiBcCisJICAgICAgLWUgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98O3QiYDsgXAorCWNhc2UgJCRkaXN0X2ZpbGVzIGluIFwKKwkgICovKikgJChNS0RJUl9QKSBgZWNobyAiJCRkaXN0X2ZpbGVzIiB8IFwKKwkJCSAgIHNlZCAnL1wvLyFkO3N8XnwkKGRpc3RkaXIpL3w7cywvW14vXSokJCwsJyB8IFwKKwkJCSAgIHNvcnQgLXVgIDs7IFwKKwllc2FjOyBcCisJZm9yIGZpbGUgaW4gJCRkaXN0X2ZpbGVzOyBkbyBcCisJICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCisJICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAorCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAorCSAgICBpZiB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkZmlsZSI7IHRoZW4gXAorCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAorCSAgICBmaTsgXAorCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKKwkgICAgICBjcCAtZnBSICQoc3JjZGlyKS8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCisJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisJICAgIGZpOyBcCisJICAgIGNwIC1mcFIgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKKwkgIGVsc2UgXAorCSAgICB0ZXN0IC1mICIkKGRpc3RkaXIpLyQkZmlsZSIgXAorCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICIkKGRpc3RkaXIpLyQkZmlsZSIgXAorCSAgICB8fCBleGl0IDE7IFwKKwkgIGZpOyBcCisJZG9uZQorY2hlY2stYW06IGFsbC1hbQorY2hlY2s6IGNoZWNrLWFtCithbGwtYW06IE1ha2VmaWxlICQoTFRMSUJSQVJJRVMpICQoSEVBREVSUykKK2luc3RhbGxkaXJzOgorCWZvciBkaXIgaW4gIiQoREVTVERJUikkKHBrZ2xpYmRpcikiICIkKERFU1RESVIpJChpbmNsdWRlZGlyKSI7IGRvIFwKKwkgIHRlc3QgLXogIiQkZGlyIiB8fCAkKE1LRElSX1ApICIkJGRpciI7IFwKKwlkb25lCitpbnN0YWxsOiBpbnN0YWxsLWFtCitpbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1hbQoraW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtYW0KK3VuaW5zdGFsbDogdW5pbnN0YWxsLWFtCisKK2luc3RhbGwtYW06IGFsbC1hbQorCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCisKK2luc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLWFtCitpbnN0YWxsLXN0cmlwOgorCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisJICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKKwkgIGB0ZXN0IC16ICckKFNUUklQKScgfHwgXAorCSAgICBlY2hvICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknImAgaW5zdGFsbAorbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKKworY2xlYW4tZ2VuZXJpYzoKKworZGlzdGNsZWFuLWdlbmVyaWM6CisJLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCisJLXRlc3QgLiA9ICIkKHNyY2RpcikiIHx8IHRlc3QgLXogIiQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpCisKK21haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKKwlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCisJQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgorY2xlYW46IGNsZWFuLWFtCisKK2NsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgY2xlYW4tcGtnbGliTFRMSUJSQVJJRVMgXAorCW1vc3RseWNsZWFuLWFtCisKK2Rpc3RjbGVhbjogZGlzdGNsZWFuLWFtCisJLXJtIC1yZiAuLyQoREVQRElSKQorCS1ybSAtZiBNYWtlZmlsZQorZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCisJZGlzdGNsZWFuLXRhZ3MKKworZHZpOiBkdmktYW0KKworZHZpLWFtOgorCitodG1sOiBodG1sLWFtCisKK2h0bWwtYW06CisKK2luZm86IGluZm8tYW0KKworaW5mby1hbToKKworaW5zdGFsbC1kYXRhLWFtOiBpbnN0YWxsLWluY2x1ZGVIRUFERVJTCisKK2luc3RhbGwtZHZpOiBpbnN0YWxsLWR2aS1hbQorCitpbnN0YWxsLWR2aS1hbToKKworaW5zdGFsbC1leGVjLWFtOiBpbnN0YWxsLXBrZ2xpYkxUTElCUkFSSUVTCisKK2luc3RhbGwtaHRtbDogaW5zdGFsbC1odG1sLWFtCisKK2luc3RhbGwtaHRtbC1hbToKKworaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KKworaW5zdGFsbC1pbmZvLWFtOgorCitpbnN0YWxsLW1hbjoKKworaW5zdGFsbC1wZGY6IGluc3RhbGwtcGRmLWFtCisKK2luc3RhbGwtcGRmLWFtOgorCitpbnN0YWxsLXBzOiBpbnN0YWxsLXBzLWFtCisKK2luc3RhbGwtcHMtYW06CisKK2luc3RhbGxjaGVjay1hbToKKworbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1hbQorCS1ybSAtcmYgLi8kKERFUERJUikKKwktcm0gLWYgTWFrZWZpbGUKK21haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKKworbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLWFtCisKK21vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgXAorCW1vc3RseWNsZWFuLWxpYnRvb2wKKworcGRmOiBwZGYtYW0KKworcGRmLWFtOgorCitwczogcHMtYW0KKworcHMtYW06CisKK3VuaW5zdGFsbC1hbTogdW5pbnN0YWxsLWluY2x1ZGVIRUFERVJTIHVuaW5zdGFsbC1wa2dsaWJMVExJQlJBUklFUworCisuTUFLRTogaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwCisKKy5QSE9OWTogQ1RBR1MgR1RBR1MgYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBjbGVhbi1nZW5lcmljIFwKKwljbGVhbi1saWJ0b29sIGNsZWFuLXBrZ2xpYkxUTElCUkFSSUVTIGN0YWdzIGRpc3RjbGVhbiBcCisJZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLWxpYnRvb2wgXAorCWRpc3RjbGVhbi10YWdzIGRpc3RkaXIgZHZpIGR2aS1hbSBodG1sIGh0bWwtYW0gaW5mbyBpbmZvLWFtIFwKKwlpbnN0YWxsIGluc3RhbGwtYW0gaW5zdGFsbC1kYXRhIGluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBcCisJaW5zdGFsbC1kdmktYW0gaW5zdGFsbC1leGVjIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgXAorCWluc3RhbGwtaHRtbC1hbSBpbnN0YWxsLWluY2x1ZGVIRUFERVJTIGluc3RhbGwtaW5mbyBcCisJaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIGluc3RhbGwtcGRmIGluc3RhbGwtcGRmLWFtIFwKKwlpbnN0YWxsLXBrZ2xpYkxUTElCUkFSSUVTIGluc3RhbGwtcHMgaW5zdGFsbC1wcy1hbSBcCisJaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIFwKKwltYWludGFpbmVyLWNsZWFuIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBcCisJbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wgXAorCXBkZiBwZGYtYW0gcHMgcHMtYW0gdGFncyB1bmluc3RhbGwgdW5pbnN0YWxsLWFtIFwKKwl1bmluc3RhbGwtaW5jbHVkZUhFQURFUlMgdW5pbnN0YWxsLXBrZ2xpYkxUTElCUkFSSUVTCisKKworIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KKyMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgorLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvbGlib3BhZ2VudC9qaXRkdW1wLmggYi9vcHJvZmlsZS0wLjkuNy9saWJvcGFnZW50L2ppdGR1bXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZmU4ZDQxCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvbGlib3BhZ2VudC9qaXRkdW1wLmgKQEAgLTAsMCArMSwxMDEgQEAKKy8qKgorICogQGZpbGUgaml0ZHVtcC5oCisgKiBIZWFkZXIgc3RydWN0dXJlIG9mIGEgSklULWR1bXAgZmlsZS4KKyAqCisgKiBAcmVtYXJrIENvcHlyaWdodCAyMDA3IE9Qcm9maWxlIGF1dGhvcnMKKyAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCisgKgorICogQGF1dGhvciBKZW5zIFdpbGtlCisgKiBATW9kaWZpY2F0aW9ucyBEYW5pZWwgSGFuc2VsCisgKgorICogQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDA3CisgKgorICovCisKKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworI2luY2x1ZGUgIm9wX3R5cGVzLmgiCisKKyNpZm5kZWYgSklURFVNUF9ICisjZGVmaW5lIEpJVERVTVBfSAorCisgLyoqCisgICogTWFnaWMgdG8gZG8gYSBzYW5pdHkgY2hlY2sgdGhhdCB0aGlzIGlzIGEgZHVtcCBmaWxlCisgICogY2hhcmFjdGVycyAiakl0TyIgKi8KKyNkZWZpbmUgSklUSEVBREVSX01BR0lDIDB4NEY3NDQ5NkEKKworLyoqCisgKiBNYWNybyB0byBjYWxjdWxhdGUgY291bnQgb2YgcGFkZGluZyBieXRlcworICogdG8gZXh0ZW5kIGEgc2l6ZSB0byBiZSA4LWJ5dGUgYWxpZ25lZC4gKi8KKyNkZWZpbmUgUEFERElOR184QUxJR05FRCh4KSAoKCgoeCkgKyA3KSAmIDcpIF4gNykKKworLyoqCisgKiBWZXJzaW9uIG51bWJlciB0byBhdm9pZCBjb25mbGljdHMsIGluY3JlYXNlCisgKiB0aGlzIHdoZW5ldmVyIHRoZSBoZWFkZXIgaXMgY2hhbmdlZCAqLworI2RlZmluZSBKSVRIRUFERVJfVkVSU0lPTiAxCisKK3N0cnVjdCBqaXRoZWFkZXIgeworCS8qIGNoYXJhY3RlcnMgImpJdE8iICovCisJdTMyIG1hZ2ljOworCS8qIHZlcnNpb24gb2YgdGhlIGR1bXAgKi8KKwl1MzIgdmVyc2lvbjsKKwl1MzIgdG90YWxzaXplOworCXUzMiBiZmRfYXJjaDsKKwl1MzIgYmZkX21hY2g7CisJdTY0IHRpbWVzdGFtcDsKKwljaGFyIGJmZF90YXJnZXRbMF07Cit9OworCitlbnVtIGppdF9yZWNvcmRfdHlwZSB7CisJSklUX0NPREVfTE9BRD0wLAorCUpJVF9DT0RFX1VOTE9BRD0xLAorCUpJVF9DT0RFX0NMT1NFPTIsCisJSklUX0NPREVfREVCVUdfSU5GTz0zCit9OworCisvKiBlYWNoIHJlY29yZCBzdGFydHMgYWx3YXlzIHdpdGggYSBpZCBhbmQgYSB0b3RhbF9zaXplICovCitzdHJ1Y3QganJfcHJlZml4IHsKKwl1MzIgaWQ7CisJdTMyIHRvdGFsX3NpemU7Cit9OworCisvKiByZWNvcmQwIChpZD0wKSBsb2dzIGEgaml0dGVkIGNvZGUgKi8KK3N0cnVjdCBqcl9jb2RlX2xvYWQgeworCXUzMiBpZDsKKwl1MzIgdG90YWxfc2l6ZTsKKwl1NjQgdGltZXN0YW1wOworCXU2NCB2bWE7CisJdTY0IGNvZGVfYWRkcjsKKwl1MzIgY29kZV9zaXplOworCXUzMiBhbGlnbjsKK307CisKKy8qIHJlY29yZDEgKGlkPTEpIGxvZ3MgYSBjb2RlIHVubG9hZCAqLworc3RydWN0IGpyX2NvZGVfdW5sb2FkIHsKKwl1MzIgaWQ7CisJdTMyIHRvdGFsX3NpemU7CisJdTY0IHRpbWVzdGFtcDsKKwl1NjQgdm1hOworfTsKKworLyogcmVjb3JkMiAoaWQ9MikgbG9ncyBlbmQgb2YgSlZNIGxpdmV0aW1lICovCitzdHJ1Y3QganJfY29kZV9jbG9zZSB7CisJdTMyIGlkOworCXUzMiB0b3RhbF9zaXplOworCXU2NCB0aW1lc3RhbXA7Cit9OworCisvKiByZWNvcmQzIChpZD0zKSBsb2dzIGRlYnVnIGxpbmUgaW5mb3JtYXRpb24uICovCitzdHJ1Y3QganJfY29kZV9kZWJ1Z19pbmZvIHsKKwl1MzIgaWQ7CisJdTMyIHRvdGFsX3NpemU7CisJdTY0IHRpbWVzdGFtcDsKKwl1NjQgY29kZV9hZGRyOworCXUzMiBucl9lbnRyeTsKKwl1MzIgYWxpZ247Cit9OworCisjZW5kaWYgLyogIUpJVERVTVBfSCAqLworCmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9saWJvcGFnZW50L29wYWdlbnQuYyBiL29wcm9maWxlLTAuOS43L2xpYm9wYWdlbnQvb3BhZ2VudC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkYjE0NzcKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9saWJvcGFnZW50L29wYWdlbnQuYwpAQCAtMCwwICsxLDM4OSBAQAorLyoqCisgKiBAZmlsZSBvcGFnZW50LmMKKyAqIEludGVyZmFjZSB0byByZXBvcnQgc3ltYm9sIG5hbWVzIGFuZCBkeW5hbWljYWxseSBnZW5lcmF0ZWQgY29kZSB0byBPcHJvZmlsZQorICoKKyAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDcgT1Byb2ZpbGUgYXV0aG9ycworICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqIEBhdXRob3IgSmVucyBXaWxrZQorICogQE1vZGlmaWNhdGlvbnMgRGFuaWVsIEhhbnNlbAorICoKKyAqIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwNworICoKKyAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBBVFRFTlRJT046IAorICogICBXaGVuIGFkZGluZyBuZXcgZnVuY3Rpb25zIHRvIHRoaXMgaW50ZXJmYWNlLCB5b3UgTVVTVCB1cGRhdGUKKyAqICAgb3BhZ2VudF9zeW1ib2xzLnZlci4KKyAqCisgKiAgIElmIGEgY2hhbmdlIGlzIG1hZGUgdG8gYW4gZXhpc3RpbmcgZXhwb3J0ZWQgZnVuY3Rpb24sIHBlcmZvcm0gdGhlCisgKiAgIHRoZSBmb2xsb3dpbmcgc3RlcHMuICBBcyBhbiBleGFtcGxlLCBhc3N1bWUgb3Bfb3Blbl9hZ2VudCgpCisgKiAgIGlzIGJlaW5nIHVwZGF0ZWQgdG8gaW5jbHVkZSBhICdkdW1wX2NvZGUnIHBhcmFtZXRlci4gCisgKiAgICAgMS4gVXBkYXRlIHRoZSBvcGFnZW50LnZlciBmaWxlIHdpdGggYSBuZXcgdmVyc2lvbiBub2RlLCBhbmQKKyAqICAgICAgICBhZGQgdGhlIG9wX29wZW5fYWdlbnQgdG8gaXQuICBOb3RlIHRoYXQgb3Bfb3Blbl9hZ2VudAorICogICAgICAgIGlzIGFsc28gc3RpbGwgZGVjbGFyZWQgaW4gdGhlIG9yaWdpbmFsIHZlcnNpb24gbm9kZS4KKyAqICAgICAyLiBBZGQgJ19fYXNtX18oIi5zeW12ZXIgPGJsYWg+IikgZGlyZWN0aXZlcyB0byB0aGlzIC5jIHNvdXJjZSBmaWxlLgorICogICAgICAgIEZvciB0aGlzIGV4YW1wbGUsIHRoZSBkaXJlY3RpdmVzIHdvdWxkIGJlIGFzIGZvbGxvd3M6CisgKiAgICAgICAgICAgIF9fYXNtX18oIi5zeW12ZXIgb3Bfb3Blbl9hZ2VudF8xXzAsb3Bfb3Blbl9hZ2VudEBPUEFHRU5UXzEuMCIpOworICogICAgICAgICAgICBfX2FzbV9fKCIuc3ltdmVyIG9wX29wZW5fYWdlbnRfMl8wLG9wX29wZW5fYWdlbnRAQE9QQUdFTlRfMi4wIik7CisgKiAgICAgMy4gVXBkYXRlIHRoZSBkZWNsYXJhdGlvbiBvZiBvcF9vcGVuX2FnZW50IGluIHRoZSBoZWFkZXIgZmlsZSB3aXRoCisgKiAgICAgICAgdGhlIGFkZGl0aW9uYWwgcGFyYW1ldGVyLgorICogICAgIDQuIENoYW5nZSB0aGUgbmFtZSBvZiB0aGUgb3JpZ2luYWwgb3Bfb3Blbl9hZ2VudCB0byAib3Bfb3Blbl9hZ2VudF8xXzAiCisgKiAgICAgICAgaW4gdGhpcyAuYyBzb3VyY2UgZmlsZS4KKyAqICAgICA1LiBBZGQgdGhlIG5ldyBvcF9vcGVuX2FnZW50XzJfMChpbnQgZHVtcF9jb2RlKSBmdW5jdGlvbiBpbiB0aGlzCisgKiAgICAgICAgLmMgc291cmNlIGZpbGUuCisgKiAgICAgICAgICAgIAorICogICBTZWUgbGlib3BhZ2VudC9NYWtlZmlsZS5hbSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8YmZkLmg+CisKKyNpbmNsdWRlICJvcGFnZW50LmgiCisjaW5jbHVkZSAib3BfY29uZmlnLmgiCisjaW5jbHVkZSAiaml0ZHVtcC5oIgorCisvLyBEZWNsYXJlIEJGRC1yZWxhdGVkIGdsb2JhbCB2YXJpYWJsZXMuCitzdGF0aWMgY2hhciAqIF9iZmRfdGFyZ2V0X25hbWU7CitzdGF0aWMgaW50IF9iZmRfYXJjaDsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgX2JmZF9tYWNoOworCisvLyBEZWZpbmUgQkZELXJlbGF0ZWQgZ2xvYmFsIHZhcmlhYmxlcy4KK3N0YXRpYyBpbnQgZGVmaW5lX2JmZF92YXJzKHZvaWQpCit7CisJYmZkICogYmZkOworCWJmZF9ib29sZWFuIHI7CisJaW50IGxlbjsKKyNkZWZpbmUgTUFYX1BBVEhMRU5HVEggMjA0OAorCWNoYXIgbXlwYXRoW01BWF9QQVRITEVOR1RIXTsKKyAgICAgCisJbGVuID0gcmVhZGxpbmsoIi9wcm9jL3NlbGYvZXhlIiwgbXlwYXRoLCBzaXplb2YobXlwYXRoKSk7CisgICAgIAorCWlmIChsZW4gPCAwKSB7CisJCWZwcmludGYoc3RkZXJyLCAibGlib3BhZ2VudDogcmVhZGxpbmsgL3Byb2Mvc2VsZi9leGUgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKwlpZiAobGVuID49IE1BWF9QQVRITEVOR1RIKSB7CisJCWZwcmludGYoc3RkZXJyLCAibGlib3BhZ2VudDogcmVhZGxpbmsgL3Byb2Mvc2VsZi9leGUgcmV0dXJuZWQiCisJCQkiIHBhdGggbGVuZ3RoIGxvbmdlciB0aGFuICVkLlxuIiwgTUFYX1BBVEhMRU5HVEgpOworCisJCXJldHVybiAtMTsKKwl9CisJbXlwYXRoW2xlbl0gPSAnXDAnOworCisJYmZkX2luaXQoKTsKKwliZmQgPSBiZmRfb3BlbnIobXlwYXRoLCBOVUxMKTsKKwlpZiAoYmZkID09IE5VTEwpIHsKKwkJYmZkX3BlcnJvcigiYmZkX29wZW5yIGVycm9yLiBDYW5ub3QgZ2V0IHJlcXVpcmVkIEJGRCBpbmZvIik7CisJCXJldHVybiAtMTsKKwl9CisJciA9IGJmZF9jaGVja19mb3JtYXQoYmZkLCBiZmRfb2JqZWN0KTsKKwlpZiAoIXIpIHsKKwkJYmZkX3BlcnJvcigiYmZkX2dldF9hcmNoIGVycm9yLiBDYW5ub3QgZ2V0IHJlcXVpcmVkIEJGRCBpbmZvIik7CisJCXJldHVybiAtMTsKKwl9CisJX2JmZF90YXJnZXRfbmFtZSA9ICBiZmQtPnh2ZWMtPm5hbWU7CisJX2JmZF9hcmNoID0gYmZkX2dldF9hcmNoKGJmZCk7CisJX2JmZF9tYWNoID0gYmZkX2dldF9tYWNoKGJmZCk7CisKKwlyZXR1cm4gMDsKK30KKy8qKgorICogRGVmaW5lIHRoZSB2ZXJzaW9uIG9mIHRoZSBvcGFnZW50IGxpYnJhcnkuCisgKi8KKyNkZWZpbmUgT1BfTUFKT1JfVkVSU0lPTiAxCisjZGVmaW5lIE9QX01JTk9SX1ZFUlNJT04gMAorCisjZGVmaW5lIEFHRU5UX0RJUiBPUF9TRVNTSU9OX0RJUl9ERUZBVUxUICJqaXRkdW1wIgorCisjZGVmaW5lIE1TR19NQVhMRU4gMjAKKworb3BfYWdlbnRfdCBvcF9vcGVuX2FnZW50KHZvaWQpCit7CisJY2hhciBwYWRfYnl0ZXNbN10gPSB7MCwgMCwgMCwgMCwgMCwgMCwgMH07CisJaW50IHBhZF9jbnQ7CisJY2hhciBkdW1wX3BhdGhbUEFUSF9NQVhdOworCWNoYXIgZXJyX21zZ1tQQVRIX01BWCArIDE2XTsKKwlzdHJ1Y3Qgc3RhdCBkaXJzdGF0OworCWludCByYzsKKwlzdHJ1Y3Qgaml0aGVhZGVyIGhlYWRlcjsKKwlpbnQgZmQ7CisJc3RydWN0IHRpbWV2YWwgdHY7CisJRklMRSAqIGR1bXBmaWxlID0gTlVMTDsKKworCXJjID0gc3RhdChBR0VOVF9ESVIsICZkaXJzdGF0KTsKKwlpZiAocmMgfHwgIVNfSVNESVIoZGlyc3RhdC5zdF9tb2RlKSkgeworCQlpZiAoIXJjKQorCQkJZXJybm8gPSBFTk9URElSOworCQlmcHJpbnRmKHN0ZGVyciwibGlib3BhZ2VudDogSml0ZHVtcCBhZ2VudCBkaXJlY3RvcnkgJXMgIgorCQkJIm1pc3NpbmdcbiIsIEFHRU5UX0RJUik7CisJCWZwcmludGYoc3RkZXJyLCJsaWJvcGFnZW50OiBkbyBvcGNvbnRyb2wgLS1zZXR1cCBvciAiCisJCQkib3Bjb250cm9sIC0tcmVzZXQsIGZpcnN0XG4iKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCXNucHJpbnRmKGR1bXBfcGF0aCwgUEFUSF9NQVgsICIlcy8laS5kdW1wIiwgQUdFTlRfRElSLCBnZXRwaWQoKSk7CisJc25wcmludGYoZXJyX21zZywgUEFUSF9NQVggKyAxNiwgIkVycm9yIG9wZW5pbmcgJXNcbiIsIGR1bXBfcGF0aCk7CisJLy8gbWFrZSB0aGUgZHVtcCBmaWxlIG9ubHkgYWNjZXNzaWJsZSBmb3IgdGhlIHVzZXIgZm9yIHNlY3VyaXR5IHJlYXNvbi4KKwlmZCA9IGNyZWF0KGR1bXBfcGF0aCwgU19JUlVTUnxTX0lXVVNSKTsKKwlpZiAoZmQgPT0gLTEpIHsKKwkJZnByaW50ZihzdGRlcnIsICIlc1xuIiwgZXJyX21zZyk7CisJCXJldHVybiBOVUxMOworCX0KKwlkdW1wZmlsZSA9IGZkb3BlbihmZCwgInciKTsKKwlpZiAoIWR1bXBmaWxlKSB7CisJCWZwcmludGYoc3RkZXJyLCAiJXNcbiIsIGVycl9tc2cpOworCQlyZXR1cm4gTlVMTDsKKwl9CisJaWYgKGRlZmluZV9iZmRfdmFycygpKQorCQlyZXR1cm4gTlVMTDsKKwloZWFkZXIubWFnaWMgPSBKSVRIRUFERVJfTUFHSUM7CisJaGVhZGVyLnZlcnNpb24gPSBKSVRIRUFERVJfVkVSU0lPTjsKKwloZWFkZXIudG90YWxzaXplID0gc2l6ZW9mKGhlYWRlcikgKyBzdHJsZW4oX2JmZF90YXJnZXRfbmFtZSkgKyAxOworCS8qIGNhbGN1bGF0ZSBhbW91bnQgb2YgcGFkZGluZyAnXDAnICovCisJcGFkX2NudCA9IFBBRERJTkdfOEFMSUdORUQoaGVhZGVyLnRvdGFsc2l6ZSk7CisJaGVhZGVyLnRvdGFsc2l6ZSArPSBwYWRfY250OworCWhlYWRlci5iZmRfYXJjaCA9IF9iZmRfYXJjaDsKKwloZWFkZXIuYmZkX21hY2ggPSBfYmZkX21hY2g7CisJaWYgKGdldHRpbWVvZmRheSgmdHYsIE5VTEwpKSB7CisJCWZwcmludGYoc3RkZXJyLCAiZ2V0dGltZW9mZGF5IGZhaWxlZFxuIik7CisJCXJldHVybiBOVUxMOworCX0KKworCWhlYWRlci50aW1lc3RhbXAgPSB0di50dl9zZWM7CisJc25wcmludGYoZXJyX21zZywgUEFUSF9NQVggKyAxNiwgIkVycm9yIHdyaXRpbmcgdG8gJXMiLCBkdW1wX3BhdGgpOworCWlmICghZndyaXRlKCZoZWFkZXIsIHNpemVvZihoZWFkZXIpLCAxLCBkdW1wZmlsZSkpIHsKKwkJZnByaW50ZihzdGRlcnIsICIlc1xuIiwgZXJyX21zZyk7CisJCXJldHVybiBOVUxMOworCX0KKwlpZiAoIWZ3cml0ZShfYmZkX3RhcmdldF9uYW1lLCBzdHJsZW4oX2JmZF90YXJnZXRfbmFtZSkgKyAxLCAxLAorCQkgICAgZHVtcGZpbGUpKSB7CisJCWZwcmludGYoc3RkZXJyLCAiJXNcbiIsIGVycl9tc2cpOworCQlyZXR1cm4gTlVMTDsKKwl9CisJLyogd3JpdGUgcGFkZGluZyAnXDAnIGlmIG5lY2Vzc2FyeSAqLworCWlmIChwYWRfY250ICYmICFmd3JpdGUocGFkX2J5dGVzLCBwYWRfY250LCAxLCBkdW1wZmlsZSkpIHsKKwkJZnByaW50ZihzdGRlcnIsICIlc1xuIiwgZXJyX21zZyk7CisJCXJldHVybiBOVUxMOworCX0KKwlmZmx1c2goZHVtcGZpbGUpOworCXJldHVybiAob3BfYWdlbnRfdClkdW1wZmlsZTsKK30KKworCitpbnQgb3BfY2xvc2VfYWdlbnQob3BfYWdlbnRfdCBoZGwpCit7CisJc3RydWN0IGpyX2NvZGVfY2xvc2UgcmVjOworCXN0cnVjdCB0aW1ldmFsIHR2OworCUZJTEUgKiBkdW1wZmlsZSA9IChGSUxFICopIGhkbDsKKwlpZiAoIWR1bXBmaWxlKSB7CisJCWVycm5vID0gRUlOVkFMOworCQlyZXR1cm4gLTE7CisJfQorCXJlYy5pZCA9IEpJVF9DT0RFX0NMT1NFOworCXJlYy50b3RhbF9zaXplID0gc2l6ZW9mKHJlYyk7CisJaWYgKGdldHRpbWVvZmRheSgmdHYsIE5VTEwpKSB7CisJCWZwcmludGYoc3RkZXJyLCAiZ2V0dGltZW9mZGF5IGZhaWxlZFxuIik7CisJCXJldHVybiAtMTsKKwl9CisJcmVjLnRpbWVzdGFtcCA9IHR2LnR2X3NlYzsKKworCWlmICghZndyaXRlKCZyZWMsIHNpemVvZihyZWMpLCAxLCBkdW1wZmlsZSkpCisJCXJldHVybiAtMTsKKwlmY2xvc2UoZHVtcGZpbGUpOworCWR1bXBmaWxlID0gTlVMTDsKKwlyZXR1cm4gMDsKK30KKworCitpbnQgb3Bfd3JpdGVfbmF0aXZlX2NvZGUob3BfYWdlbnRfdCBoZGwsIGNoYXIgY29uc3QgKiBzeW1ib2xfbmFtZSwKKwl1aW50NjRfdCB2bWEsIHZvaWQgY29uc3QgKiBjb2RlLCB1bnNpZ25lZCBpbnQgY29uc3Qgc2l6ZSkKK3sKKwlzdHJ1Y3QganJfY29kZV9sb2FkIHJlYzsKKwlzdHJ1Y3QgdGltZXZhbCB0djsKKwlzaXplX3Qgc3pfc3ltYl9uYW1lOworCWNoYXIgcGFkX2J5dGVzWzddID0geyAwLCAwLCAwLCAwLCAwLCAwLCAwIH07CisJc2l6ZV90IHBhZGRpbmdfY291bnQ7CisJRklMRSAqIGR1bXBmaWxlID0gKEZJTEUgKikgaGRsOworCisJaWYgKCFkdW1wZmlsZSkgeworCQllcnJubyA9IEVJTlZBTDsKKwkJZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIGhkbCBhcmd1bWVudFxuIik7CisJCXJldHVybiAtMTsKKwl9CisJc3pfc3ltYl9uYW1lID0gc3RybGVuKHN5bWJvbF9uYW1lKSArIDE7CisKKwlyZWMuaWQgPSBKSVRfQ09ERV9MT0FEOworCXJlYy5jb2RlX3NpemUgPSBzaXplOworCXJlYy52bWEgPSB2bWE7CisJcmVjLmNvZGVfYWRkciA9ICh1NjQpICh1aW50cHRyX3QpIGNvZGU7CisJcmVjLnRvdGFsX3NpemUgPSBjb2RlID8gc2l6ZW9mKHJlYykgKyBzel9zeW1iX25hbWUgKyBzaXplIDoKKwkJCXNpemVvZihyZWMpICsgc3pfc3ltYl9uYW1lOworCS8qIGNhbGN1bGF0ZSBhbW91bnQgb2YgcGFkZGluZyAnXDAnICovCisJcGFkZGluZ19jb3VudCA9IFBBRERJTkdfOEFMSUdORUQocmVjLnRvdGFsX3NpemUpOworCXJlYy50b3RhbF9zaXplICs9IHBhZGRpbmdfY291bnQ7CisJaWYgKGdldHRpbWVvZmRheSgmdHYsIE5VTEwpKSB7CisJCWZwcmludGYoc3RkZXJyLCAiZ2V0dGltZW9mZGF5IGZhaWxlZFxuIik7CisJCXJldHVybiAtMTsKKwl9CisKKwlyZWMudGltZXN0YW1wID0gdHYudHZfc2VjOworCisJLyogbG9ja2luZyBtYWtlcyBzdXJlIHRoYXQgd2UgY29udGludW91c2x5IHdyaXRlIHRoaXMgcmVjb3JkLCBpZgorCSAqIHdlIGFyZSBjYWxsZWQgd2l0aGluIGEgbXVsdGktdGhyZWFkZWQgY29udGV4dCAqLworCWZsb2NrZmlsZShkdW1wZmlsZSk7CisJLyogV3JpdGUgcmVjb3JkLCBzeW1ib2wgbmFtZSwgY29kZSAob3B0aW9uYWxseSksIGFuZCAoaWYgbmVjZXNzYXJ5KQorCSAqIGFkZGl0b25hbCBwYWRkaW5nIFwwIGJ5dGVzLgorCSAqLworCWlmIChmd3JpdGVfdW5sb2NrZWQoJnJlYywgc2l6ZW9mKHJlYyksIDEsIGR1bXBmaWxlKSAmJgorCSAgICBmd3JpdGVfdW5sb2NrZWQoc3ltYm9sX25hbWUsIHN6X3N5bWJfbmFtZSwgMSwgZHVtcGZpbGUpKSB7CisJCWlmIChjb2RlKQorCQkJZndyaXRlX3VubG9ja2VkKGNvZGUsIHNpemUsIDEsIGR1bXBmaWxlKTsKKwkJaWYgKHBhZGRpbmdfY291bnQpCisJCQlmd3JpdGVfdW5sb2NrZWQocGFkX2J5dGVzLCBwYWRkaW5nX2NvdW50LCAxLCBkdW1wZmlsZSk7CisJCS8qIEFsd2F5cyBmbHVzaCB0byBlbnN1cmUgY29udmVyc2lvbiBjb2RlIHRvIGVsZiB3aWxsIHNlZQorCQkgKiBkYXRhIGFzIHNvb24gYXMgcG9zc2libGUgKi8KKwkJZmZsdXNoX3VubG9ja2VkKGR1bXBmaWxlKTsKKwkJZnVubG9ja2ZpbGUoZHVtcGZpbGUpOworCQlyZXR1cm4gMDsKKwl9CisJZmZsdXNoX3VubG9ja2VkKGR1bXBmaWxlKTsKKwlmdW5sb2NrZmlsZShkdW1wZmlsZSk7CisJcmV0dXJuIC0xOworfQorCisKK2ludCBvcF93cml0ZV9kZWJ1Z19saW5lX2luZm8ob3BfYWdlbnRfdCBoZGwsIHZvaWQgY29uc3QgKiBjb2RlLAorCQkJICAgICBzaXplX3QgbnJfZW50cnksCisJCQkgICAgIHN0cnVjdCBkZWJ1Z19saW5lX2luZm8gY29uc3QgKiBjb21waWxlX21hcCkKK3sKKwlzdHJ1Y3QganJfY29kZV9kZWJ1Z19pbmZvIHJlYzsKKwlsb25nIGN1cl9wb3MsIGxhc3RfcG9zOworCXN0cnVjdCB0aW1ldmFsIHR2OworCXNpemVfdCBpOworCXNpemVfdCBwYWRkaW5nX2NvdW50OworCWNoYXIgcGFkZF9ieXRlc1s3XSA9IHswLCAwLCAwLCAwLCAwLCAwLCAwfTsKKwlpbnQgcmMgPSAtMTsKKwlGSUxFICogZHVtcGZpbGUgPSAoRklMRSAqKSBoZGw7CisKKwlpZiAoIWR1bXBmaWxlKSB7CisJCWVycm5vID0gRUlOVkFMOworCQlmcHJpbnRmKHN0ZGVyciwgIkludmFsaWQgaGRsIGFyZ3VtZW50XG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKwkKKwkvKiB3cml0ZSBub3RoaW5nIGlmIG5vIGVudHJpZXMgYXJlIHByb3ZpZGVkICovCisJaWYgKG5yX2VudHJ5ID09IDApCisJCXJldHVybiAwOworCisJcmVjLmlkID0gSklUX0NPREVfREVCVUdfSU5GTzsKKwlyZWMuY29kZV9hZGRyID0gKHVpbnQ2NF90KSh1aW50cHRyX3QpY29kZTsKKwkvKiB3aWxsIGJlIGZpeGVkIGFmdGVyIHdyaXRpbmcgZGVidWcgbGluZSBpbmZvICovCisJcmVjLnRvdGFsX3NpemUgPSAwOworCXJlYy5ucl9lbnRyeSA9IG5yX2VudHJ5OworCWlmIChnZXR0aW1lb2ZkYXkoJnR2LCBOVUxMKSkgeworCQlmcHJpbnRmKHN0ZGVyciwgImdldHRpbWVvZmRheSBmYWlsZWRcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJcmVjLnRpbWVzdGFtcCA9IHR2LnR2X3NlYzsKKworCWZsb2NrZmlsZShkdW1wZmlsZSk7CisKKwlpZiAoKGN1cl9wb3MgPSBmdGVsbChkdW1wZmlsZSkpID09IC0xbCkKKwkJZ290byBlcnJvcjsKKwlpZiAoIWZ3cml0ZV91bmxvY2tlZCgmcmVjLCBzaXplb2YocmVjKSwgMSwgZHVtcGZpbGUpKQorCQlnb3RvIGVycm9yOworCWZvciAoaSA9IDA7IGkgPCBucl9lbnRyeTsgKytpKSB7CisJCWlmICghZndyaXRlX3VubG9ja2VkKCZjb21waWxlX21hcFtpXS52bWEsCisJCQkJICAgICBzaXplb2YoY29tcGlsZV9tYXBbaV0udm1hKSwgMSwKKwkJCQkgICAgIGR1bXBmaWxlKSB8fAorCQkgICAgIWZ3cml0ZV91bmxvY2tlZCgmY29tcGlsZV9tYXBbaV0ubGluZW5vLAorCQkJCSAgICAgc2l6ZW9mKGNvbXBpbGVfbWFwW2ldLmxpbmVubyksIDEsCisJCQkJICAgICBkdW1wZmlsZSkgfHwKKwkJICAgICFmd3JpdGVfdW5sb2NrZWQoY29tcGlsZV9tYXBbaV0uZmlsZW5hbWUsCisJCQkJICAgICBzdHJsZW4oY29tcGlsZV9tYXBbaV0uZmlsZW5hbWUpICsgMSwgMSwKKwkJCQkgICAgIGR1bXBmaWxlKSkKKwkJCWdvdG8gZXJyb3I7CisJfQorCisJaWYgKChsYXN0X3BvcyA9IGZ0ZWxsKGR1bXBmaWxlKSkgPT0gLTFsKQorCQlnb3RvIGVycm9yOworCXJlYy50b3RhbF9zaXplID0gbGFzdF9wb3MgLSBjdXJfcG9zOworCXBhZGRpbmdfY291bnQgPSBQQURESU5HXzhBTElHTkVEKHJlYy50b3RhbF9zaXplKTsKKwlyZWMudG90YWxfc2l6ZSArPSBwYWRkaW5nX2NvdW50OworCWlmIChwYWRkaW5nX2NvdW50ICYmICFmd3JpdGUocGFkZF9ieXRlcywgcGFkZGluZ19jb3VudCwgMSwgZHVtcGZpbGUpKQorCQlnb3RvIGVycm9yOworCWlmIChmc2VlayhkdW1wZmlsZSwgY3VyX3BvcywgU0VFS19TRVQpID09IC0xbCkKKwkJZ290byBlcnJvcjsKKwlpZiAoIWZ3cml0ZV91bmxvY2tlZCgmcmVjLCBzaXplb2YocmVjKSwgMSwgZHVtcGZpbGUpKQorCQlnb3RvIGVycm9yOworCWlmIChmc2VlayhkdW1wZmlsZSwgbGFzdF9wb3MgKyBwYWRkaW5nX2NvdW50LCBTRUVLX1NFVCkgPT0gLTEpCisJCWdvdG8gZXJyb3I7CisKKwlyYyA9IDA7CitlcnJvcjoKKwlmZmx1c2hfdW5sb2NrZWQoZHVtcGZpbGUpOworCWZ1bmxvY2tmaWxlKGR1bXBmaWxlKTsKKwlyZXR1cm4gcmM7Cit9CisKKworaW50IG9wX3VubG9hZF9uYXRpdmVfY29kZShvcF9hZ2VudF90IGhkbCwgdWludDY0X3Qgdm1hKQoreworCXN0cnVjdCBqcl9jb2RlX3VubG9hZCByZWM7CisJc3RydWN0IHRpbWV2YWwgdHY7CisJRklMRSAqIGR1bXBmaWxlID0gKEZJTEUgKikgaGRsOworCisJaWYgKCFkdW1wZmlsZSkgeworCQllcnJubyA9IEVJTlZBTDsKKwkJZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIGhkbCBhcmd1bWVudFxuIik7CisJCXJldHVybiAtMTsKKwl9CisKKwlyZWMuaWQgPSBKSVRfQ09ERV9VTkxPQUQ7CisJcmVjLnZtYSA9IHZtYTsKKwlyZWMudG90YWxfc2l6ZSA9IHNpemVvZihyZWMpOworCWlmIChnZXR0aW1lb2ZkYXkoJnR2LCBOVUxMKSkgeworCQlmcHJpbnRmKHN0ZGVyciwgImdldHRpbWVvZmRheSBmYWlsZWRcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCXJlYy50aW1lc3RhbXAgPSB0di50dl9zZWM7CisKKwlpZiAoIWZ3cml0ZSgmcmVjLCBzaXplb2YocmVjKSwgMSwgZHVtcGZpbGUpKQorCQlyZXR1cm4gLTE7CisJZmZsdXNoKGR1bXBmaWxlKTsKKwlyZXR1cm4gMDsKK30KKworaW50IG9wX21ham9yX3ZlcnNpb24odm9pZCkKK3sKKwlyZXR1cm4gT1BfTUFKT1JfVkVSU0lPTjsKK30KKworaW50IG9wX21pbm9yX3ZlcnNpb24odm9pZCkKK3sKKwlyZXR1cm4gT1BfTUlOT1JfVkVSU0lPTjsKK30KZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2xpYm9wYWdlbnQvb3BhZ2VudC5oIGIvb3Byb2ZpbGUtMC45LjcvbGlib3BhZ2VudC9vcGFnZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTIwZTM5OQotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2xpYm9wYWdlbnQvb3BhZ2VudC5oCkBAIC0wLDAgKzEsMTQ1IEBACisvKioKKyAqIEBmaWxlIG9wYWdlbnQuaAorICogSW50ZXJmYWNlIHRvIHJlcG9ydCBzeW1ib2wgbmFtZXMgYW5kIGR5bmFtaWNhbGx5IGdlbmVyYXRlZCBjb2RlIHRvIE9wcm9maWxlCisgKgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwNyBPUHJvZmlsZSBhdXRob3JzCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICogQGF1dGhvciBKZW5zIFdpbGtlCisgKiBATW9kaWZpY2F0aW9ucyBEYW5pZWwgSGFuc2VsCisgKgorICogQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDA3CisgKgorICovCisKKyNpZm5kZWYgX0xJQl9PUEFHRU5UX0gKKyNkZWZpbmUgX0xJQl9PUEFHRU5UX0gKKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCisjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKK2V4dGVybiAiQyIgeworI2VuZGlmCisgIAorc3RydWN0IGRlYnVnX2xpbmVfaW5mbyB7CisJdW5zaWduZWQgbG9uZyB2bWE7CisJdW5zaWduZWQgaW50IGxpbmVubzsKKwkvKiBUaGUgZmlsZW5hbWUgZm9ybWF0IGlzIHVuc3BlY2lmaWVkLCBhYnNvbHV0ZSBwYXRoLCByZWxhdGl2ZSBldGMuICovCisJY2hhciBjb25zdCAqIGZpbGVuYW1lOworfTsKKwordHlwZWRlZiB2b2lkICogb3BfYWdlbnRfdDsKKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGJ5IGFnZW50cyBiZWZvcmUgYW55IG90aGVyIGZ1bmN0aW9uLgorICogQ3JlYXRlcyBhbmQgb3BlbnMgYSBKSVQgZHVtcCBmaWxlIGluIC92YXIvbGliL29wcm9maWxlL2ppdGR1bXAKKyAqIHVzaW5nIHRoZSBuYW1pbmcgY29udmVudGlvbiA8cHJvY2Vzc19pZD4uZHVtcC4KKyAqCisgKiBSZXR1cm5zIGEgdmFsaWQgb3BfYWdlbnRfdCBoYW5kbGUgb3IgTlVMTC4gIElmIE5VTEwgaXMgcmV0dXJuZWQsIGVycm5vCisgKiBpcyBzZXQgdG8gaW5kaWNhdGUgdGhlIG5hdHVyZSBvZiB0aGUgZXJyb3IuCisgKiovCitvcF9hZ2VudF90IG9wX29wZW5fYWdlbnQodm9pZCk7CisKKy8qKgorICogRnJlZXMgYWxsIHJlc291cmNlcyBhbmQgY2xvc2VzIG9wZW4gZmlsZSBoYW5kbGVzLgorICoKKyAqIGhkbDogICAgICAgICBIYW5kbGUgcmV0dXJuZWQgZnJvbSBhbiBlYXJsaWVyIGNhbGwgdG8gb3Bfb3Blbl9hZ2VudCgpCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3M7IC0xIG90aGVyd2lzZS4gIElmIC0xIGlzIHJldHVybmVkLCBlcnJubyBpcworICogc2V0IHRvIGluZGljYXRlIHRoZSBuYXR1cmUgb2YgdGhlIGVycm9yLgorICoqLworaW50IG9wX2Nsb3NlX2FnZW50KG9wX2FnZW50X3QgaGRsKTsKKworLyoqCisgKiBTaWduYWwgdGhlIGR5bmFtaWMgZ2VuZXJhdGlvbiBvZiBuYXRpdmUgY29kZSBmcm9tIGEgdmlydHVhbCBtYWNoaW5lLgorICogV3JpdGVzIGEgSklUIGR1bXAgcmVjb3JkIHRvIHRoZSBvcGVuIEpJVCBkdW1wIGZpbGUgdXNpbmcKKyAqIHRoZSBwYXNzZWQgaW5mb3JtYXRpb24uCisgKgorICogaGRsOiAgICAgICAgIEhhbmRsZSByZXR1cm5lZCBmcm9tIGFuIGVhcmxpZXIgY2FsbCB0byBvcF9vcGVuX2FnZW50KCkKKyAqIHN5bWJvbF9uYW1lOiBUaGUgbmFtZSBvZiB0aGUgc3ltYm9sIGJlaW5nIGR5bmFtaWNhbGx5IGNvbXBpbGVkLgorICogICAgICAgICAgICAgIFRoaXMgbmFtZSBjYW4gKGFuZCBzaG91bGQpIGNvbnRhaW4gYWxsIG5lY2Vzc2FyeQorICogICAgICAgICAgICAgIGluZm9ybWF0aW9uIHRvIGRpc2FtYmlndWF0ZSBpdCBmcm9tIHN5bWJvbHMgb2YgdGhlCisgKiAgICAgICAgICAgICAgc2FtZSBuYW1lOyBlLmcuLCBjbGFzcywgbWV0aG9kIHNpZ25hdHVyZS4KKyAqIHZtYTogICAgICAgICBUaGUgdmlydHVhbCBtZW1vcnkgYWRkcmVzcyBvZiB0aGUgZXhlY3V0YWJsZSBjb2RlLgorICogY29kZTogICAgICAgIFBvaW50ZXIgdG8gdGhlIGxvY2F0aW9uIG9mIHRoZSBjb21waWxlZCBjb2RlLgorICoJCVRoZW9yZXRpY2FsbHksIHRoaXMgbWF5IGJlIGEgZGlmZmVyZW50IGxvY2F0aW9uIGZyb20KKyAqCQl0aGF0IGdpdmVuIGJ5IHRoZSB2bWEgYXJndW1lbnQuICBGb3Igc29tZSBKSVQgY29tcGlsZXJzLAorICoJCW9idGFpbmluZyB0aGUgY29kZSBtYXkgYmUgaW1wcmFjdGljYWwuICBGb3IgdGhpcyAob3IgYW55IG90aGVyKQorICoJCXJlYXNvbiwgdGhlIGFnZW50IGNhbiBjaG9vc2UgdG8gcGFzcyBOVUxMIGZvciB0aGlzIHBhcmFlbXRlci4KKyAqCQlJZiBOVUxMIGlzIHBhc3NlZCwgbm8gY29kZSB3aWxsIGJlIGNvcGllZCBpbnRvIHRoZSBKSVQgZHVtcAorICoJCWZpbGUuCisgKiBjb2RlX3NpemU6ICAgU2l6ZSBvZiB0aGUgY29tcGlsZWQgY29kZS4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzczsgLTEgb3RoZXJ3aXNlLiAgSWYgLTEgaXMgcmV0dXJuZWQsIGVycm5vIGlzCisgKiBzZXQgdG8gaW5kaWNhdGUgdGhlIG5hdHVyZSBvZiB0aGUgZXJyb3IuCisgKiovCitpbnQgb3Bfd3JpdGVfbmF0aXZlX2NvZGUob3BfYWdlbnRfdCBoZGwsIGNoYXIgY29uc3QgKiBzeW1ib2xfbmFtZSwKKwkJCSB1aW50NjRfdCB2bWEsIHZvaWQgY29uc3QgKiBjb2RlLAorCQkJIGNvbnN0IHVuc2lnbmVkIGludCBjb2RlX3NpemUpOworCisvKioKKyAqIEFkZCBkZWJ1ZyBsaW5lIGluZm9ybWF0aW9uIHRvIGEgcGllY2Ugb2YgY29kZS4gQW4gb3Bfd3JpdGVfbmF0aXZlX2NvZGUoKQorICogd2l0aCB0aGUgc2FtZSBjb2RlIHBvaW50ZXIgc2hvdWxkIGhhdmUgb2NjdXJyZWQgYmVmb3JlIHRoaXMgY2FsbC4gSXQncyBub3QKKyAqIG5lY2Vzc2FyeSB0byBwcm92aWRlIG9uZSBsaW5lbm8gaW5mb3JtYXRpb24gZW50cnkgcGVyIG1hY2hpbmUgaW5zdHJ1Y3Rpb247CisgKiB0aGUgYXJyYXkgY2FuIGNvbnRhaW4gaG9sZS4KKyAqCisgKiBoZGw6ICAgICAgICAgSGFuZGxlIHJldHVybmVkIGZyb20gYW4gZWFybGllciBjYWxsIHRvIG9wX29wZW5fYWdlbnQoKQorICogY29kZTogICAgICAgIFBvaW50ZXIgdG8gdGhlIGxvY2F0aW9uIG9mIHRoZSBjb2RlIHdpdGggZGVidWcgaW5mbworICogbnJfZW50cnk6ICAgIE51bWJlciBvZiBlbnRyaWVzIGluIGNvbXBpbGVfbWFwCisgKiBjb21waWxlX21hcDogQXJyYXkgb2Ygc3RydWN0IGRlYnVnX2xpbmVfaW5mby4gIFNlZSB0aGUgSlZNVEkgYWdlbnQKKyAqICAgICAgICAgICAgICBsaWJyYXJ5IGltcGxlbWVudGF0aW9uIGZvciBhbiBleGFtcGxlIG9mIHdoYXQgaW5mb3JtYXRpb24KKyAqICAgICAgICAgICAgICBzaG91bGQgYmUgcmV0cmlldmVkIGZyb20gYSBWTSB0byBmaWxsIG91dCB0aGlzIGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzOyAtMSBvdGhlcndpc2UuICBJZiAtMSBpcyByZXR1cm5lZCwgZXJybm8gaXMKKyAqIHNldCB0byBpbmRpY2F0ZSB0aGUgbmF0dXJlIG9mIHRoZSBlcnJvci4KKyAqKi8KK2ludCBvcF93cml0ZV9kZWJ1Z19saW5lX2luZm8ob3BfYWdlbnRfdCBoZGwsIHZvaWQgY29uc3QgKiBjb2RlLAorCQkJICAgICBzaXplX3QgbnJfZW50cnksCisJCQkgICAgIHN0cnVjdCBkZWJ1Z19saW5lX2luZm8gY29uc3QgKiBjb21waWxlX21hcCk7CisKKy8qKgorICogU2lnbmFsIHRoZSBpbnZhbGlkYXRpb24gb2YgbmF0aXZlIGNvZGUgZnJvbSBhIHZpcnR1YWwgbWFjaGluZS4KKyAqCisgKiBoZGw6ICAgICAgICAgSGFuZGxlIHJldHVybmVkIGZyb20gYW4gZWFybGllciBjYWxsIHRvIG9wX29wZW5fYWdlbnQoKQorICogdm1hOiAgICAgICAgIFRoZSB2aXJ0dWFsIG1lbW9yeSBhZGRyZXNzIG9mIHRoZSBjb21waWxlZCBjb2RlIGJlaW5nIHVubG9hZGVkLgorICogICAgICAgICAgICAgIEFuIG9wX3dyaXRlX25hdGl2ZV9jb2RlKCkgd2l0aCB0aGUgc2FtZSB2bWEgc2hvdWxkIGhhdmUKKyAqICAgICAgICAgICAgICBvY2N1cnJlZCBiZWZvcmUgdGhpcyBjYWxsLgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzOyAtMSBvdGhlcndpc2UuICBJZiAtMSBpcyByZXR1cm5lZCwgZXJybm8gaXMKKyAqIHNldCB0byBpbmRpY2F0ZSB0aGUgbmF0dXJlIG9mIHRoZSBlcnJvci4KKyAqKi8KK2ludCBvcF91bmxvYWRfbmF0aXZlX2NvZGUob3BfYWdlbnRfdCBoZGwsIHVpbnQ2NF90IHZtYSk7CisKKy8qKgorICogUmV0dXJucyB0aGUgbWFqb3IgdmVyc2lvbiBudW1iZXIgb2YgdGhlIGxpYm9wYWdlbnQgbGlicmFyeSB0aGF0IHdpbGwgYmUgdXNlZC4KKyAqKi8KK2ludCBvcF9tYWpvcl92ZXJzaW9uKHZvaWQpOworCisvKioKKyAqIFJldHVybnMgdGhlIG1pbm9yIHZlcnNpb24gbnVtYmVyIG9mIHRoZSBsaWJvcGFnZW50IGxpYnJhcnkgdGhhdCB3aWxsIGJlIHVzZWQuCisgKiovCitpbnQgb3BfbWlub3JfdmVyc2lvbih2b2lkKTsKKworLyogaWRlYSBob3cgdG8gcG9zdCBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGZvciBhIHBpZWNlIG9mIGNvZGUuCisgICB3ZSB1c2UgdGhlIGNvZGUgYWRkcmVzcyBhcyByZWZlcmVuY2UKK2ludCBvcF93cml0ZV9sb2FkZXJfbmFtZShjb25zdCB2b2lkKiBjb2RlX2FkZHIsIGNoYXIgY29uc3QgKiBsb2FkZXJfbmFtZSk7CisqLworCisjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKK30KKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2xpYm9wYWdlbnQvb3BhZ2VudF9zeW1ib2xzLnZlciBiL29wcm9maWxlLTAuOS43L2xpYm9wYWdlbnQvb3BhZ2VudF9zeW1ib2xzLnZlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTdkZGM4Ci0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvbGlib3BhZ2VudC9vcGFnZW50X3N5bWJvbHMudmVyCkBAIC0wLDAgKzEsMTQgQEAKK09QQUdFTlRfMS4wIHsKKwlnbG9iYWw6CisJCW9wX29wZW5fYWdlbnQ7CisJCW9wX2Nsb3NlX2FnZW50OworCQlvcF93cml0ZV9uYXRpdmVfY29kZTsKKwkJb3Bfd3JpdGVfZGVidWdfbGluZV9pbmZvOworCQlvcF91bmxvYWRfbmF0aXZlX2NvZGU7CisJCW9wX21ham9yX3ZlcnNpb247CisJCW9wX21pbm9yX3ZlcnNpb247CisKKwlsb2NhbDoKKwkJKjsKK307CisKZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2xpYm9wdCsrL01ha2VmaWxlLmFtIGIvb3Byb2ZpbGUtMC45LjcvbGlib3B0KysvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjE3NWNlNwotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2xpYm9wdCsrL01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsNSBAQAorQU1fQ1BQRkxBR1M9LUkgJHt0b3Bfc3JjZGlyfS9saWJ1dGlsKysgLUkgJHt0b3Bfc3JjZGlyfS9saWJ1dGlsCitBTV9DWFhGTEFHUyA9IEBPUF9DWFhGTEFHU0AKKworbm9pbnN0X0xJQlJBUklFUyA9IGxpYm9wdCsrLmEKK2xpYm9wdF9fX2FfU09VUkNFUyA9IHBvcHRfb3B0aW9ucy5jcHAgcG9wdF9vcHRpb25zLmgKZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2xpYm9wdCsrL01ha2VmaWxlLmluIGIvb3Byb2ZpbGUtMC45LjcvbGlib3B0KysvTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDgyZjhkNwotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2xpYm9wdCsrL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsNTMzIEBACisjIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjExLjEgZnJvbSBNYWtlZmlsZS5hbS4KKyMgQGNvbmZpZ3VyZV9pbnB1dEAKKworIyBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsCisjIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyMgSW5jLgorIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAorIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCisjIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworQFNFVF9NQUtFQAorCitWUEFUSCA9IEBzcmNkaXJACitwa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKK3BrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAorcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAorcGtnbGliZXhlY2RpciA9ICQobGliZXhlY2RpcikvQFBBQ0tBR0VACithbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCitpbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAoraW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYworaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCitJTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQordHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQorTk9STUFMX0lOU1RBTEwgPSA6CitQUkVfSU5TVEFMTCA9IDoKK1BPU1RfSU5TVEFMTCA9IDoKK05PUk1BTF9VTklOU1RBTEwgPSA6CitQUkVfVU5JTlNUQUxMID0gOgorUE9TVF9VTklOU1RBTEwgPSA6CitidWlsZF90cmlwbGV0ID0gQGJ1aWxkQAoraG9zdF90cmlwbGV0ID0gQGhvc3RACitzdWJkaXIgPSBsaWJvcHQrKworRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChzcmNkaXIpL01ha2VmaWxlLmluCitBQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00CithbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9tNC9iaW51dGlscy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9idWlsdGluZXhwZWN0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2NlbGxzcHViZmRzdXBwb3J0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2NvbXBpbGVyb3B0aW9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2NvbmZpZ21vZHVsZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jb3B5aWZjaGFuZ2UubTQgJCh0b3Bfc3JjZGlyKS9tNC9kb2Nib29rLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2V4dHJhZGlycy5tNCAkKHRvcF9zcmNkaXIpL200L2ZpbmRrZXJuZWwubTQgXAorCSQodG9wX3NyY2RpcikvbTQva2VybmVsb3B0aW9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2tlcm5lbHZlcnNpb24ubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWJ0b29sLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2x0b3B0aW9ucy5tNCAkKHRvcF9zcmNkaXIpL200L2x0c3VnYXIubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbHR2ZXJzaW9uLm00ICQodG9wX3NyY2RpcikvbTQvbHR+b2Jzb2xldGUubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbWFsbG9jYXR0cmlidXRlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3BvcHRjb25zdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9wcmVjb21waWxlZGhlYWRlci5tNCAkKHRvcF9zcmNkaXIpL200L3F0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3Jlc3VsdHluLm00ICQodG9wX3NyY2RpcikvbTQvc3N0cmVhbS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC90eXBlZGVmLm00ICQodG9wX3NyY2RpcikvY29uZmlndXJlLmluCithbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAorCSQoQUNMT0NBTF9NNCkKK21raW5zdGFsbGRpcnMgPSAkKGluc3RhbGxfc2gpIC1kCitDT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5oCitDT05GSUdfQ0xFQU5fRklMRVMgPQorQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTID0KK0xJQlJBUklFUyA9ICQobm9pbnN0X0xJQlJBUklFUykKK0FSRkxBR1MgPSBjcnUKK2xpYm9wdF9fX2FfQVIgPSAkKEFSKSAkKEFSRkxBR1MpCitsaWJvcHRfX19hX0xJQkFERCA9CithbV9saWJvcHRfX19hX09CSkVDVFMgPSBwb3B0X29wdGlvbnMuJChPQkpFWFQpCitsaWJvcHRfX19hX09CSkVDVFMgPSAkKGFtX2xpYm9wdF9fX2FfT0JKRUNUUykKK0RFRkFVTFRfSU5DTFVERVMgPSAtSS5AYW1fX2lzcmNAIC1JJCh0b3BfYnVpbGRkaXIpCitkZXBjb21wID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9kZXBjb21wCithbV9fZGVwZmlsZXNfbWF5YmUgPSBkZXBmaWxlcworYW1fX212ID0gbXYgLWYKK0NYWENPTVBJTEUgPSAkKENYWCkgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpIFwKKwkkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NYWEZMQUdTKSAkKENYWEZMQUdTKQorTFRDWFhDT01QSUxFID0gJChMSUJUT09MKSAtLXRhZz1DWFggJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSBcCisJLS1tb2RlPWNvbXBpbGUgJChDWFgpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSBcCisJJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DWFhGTEFHUykgJChDWFhGTEFHUykKK0NYWExEID0gJChDWFgpCitDWFhMSU5LID0gJChMSUJUT09MKSAtLXRhZz1DWFggJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSBcCisJLS1tb2RlPWxpbmsgJChDWFhMRCkgJChBTV9DWFhGTEFHUykgJChDWFhGTEFHUykgJChBTV9MREZMQUdTKSBcCisJJChMREZMQUdTKSAtbyAkQAorQ09NUElMRSA9ICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSBcCisJJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQorTFRDT01QSUxFID0gJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIFwKKwktLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgXAorCSQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKK0NDTEQgPSAkKENDKQorTElOSyA9ICQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSBcCisJLS1tb2RlPWxpbmsgJChDQ0xEKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpICQoQU1fTERGTEFHUykgXAorCSQoTERGTEFHUykgLW8gJEAKK1NPVVJDRVMgPSAkKGxpYm9wdF9fX2FfU09VUkNFUykKK0RJU1RfU09VUkNFUyA9ICQobGlib3B0X19fYV9TT1VSQ0VTKQorRVRBR1MgPSBldGFncworQ1RBR1MgPSBjdGFncworRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKK0FDTE9DQUwgPSBAQUNMT0NBTEAKK0FNVEFSID0gQEFNVEFSQAorQVIgPSBAQVJACitBVVRPQ09ORiA9IEBBVVRPQ09ORkAKK0FVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKK0FVVE9NQUtFID0gQEFVVE9NQUtFQAorQVdLID0gQEFXS0AKK0JGRF9MSUJTID0gQEJGRF9MSUJTQAorQ0FUX0VOVFJZX0VORCA9IEBDQVRfRU5UUllfRU5EQAorQ0FUX0VOVFJZX1NUQVJUID0gQENBVF9FTlRSWV9TVEFSVEAKK0NDID0gQENDQAorQ0NERVBNT0RFID0gQENDREVQTU9ERUAKK0NGTEFHUyA9IEBDRkxBR1NACitDUFAgPSBAQ1BQQAorQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACitDWFggPSBAQ1hYQAorQ1hYQ1BQID0gQENYWENQUEAKK0NYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKK0NYWEZMQUdTID0gQENYWEZMQUdTQAorQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKK0RBVEUgPSBAREFURUAKK0RFRlMgPSBAREVGU0AKK0RFUERJUiA9IEBERVBESVJACitET0NCT09LX1JPT1QgPSBARE9DQk9PS19ST09UQAorRFNZTVVUSUwgPSBARFNZTVVUSUxACitEVU1QQklOID0gQERVTVBCSU5ACitFQ0hPX0MgPSBARUNIT19DQAorRUNIT19OID0gQEVDSE9fTkAKK0VDSE9fVCA9IEBFQ0hPX1RACitFR1JFUCA9IEBFR1JFUEAKK0VYRUVYVCA9IEBFWEVFWFRACitFWFRSQV9DRkxBR1NfTU9EVUxFID0gQEVYVFJBX0NGTEFHU19NT0RVTEVACitGR1JFUCA9IEBGR1JFUEAKK0dSRVAgPSBAR1JFUEAKK0lOU1RBTEwgPSBASU5TVEFMTEAKK0lOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACitJTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAorSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACitJTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAorSkFWQV9IT01FRElSID0gQEpBVkFfSE9NRURJUkAKK0tJTkMgPSBAS0lOQ0AKK0tTUkMgPSBAS1NSQ0AKK0tWRVJTID0gQEtWRVJTQAorTEQgPSBATERACitMREZMQUdTID0gQExERkxBR1NACitMSUJFUlRZX0xJQlMgPSBATElCRVJUWV9MSUJTQAorTElCT0JKUyA9IEBMSUJPQkpTQAorTElCUyA9IEBMSUJTQAorTElCVE9PTCA9IEBMSUJUT09MQAorTElQTyA9IEBMSVBPQAorTE5fUyA9IEBMTl9TQAorTFRMSUJPQkpTID0gQExUTElCT0JKU0AKK01BS0VJTkZPID0gQE1BS0VJTkZPQAorTUtESVJfUCA9IEBNS0RJUl9QQAorTU9DID0gQE1PQ0AKK01PRElOU1RBTExESVIgPSBATU9ESU5TVEFMTERJUkAKK05NID0gQE5NQAorTk1FRElUID0gQE5NRURJVEAKK09CSkRVTVAgPSBAT0JKRFVNUEAKK09CSkVYVCA9IEBPQkpFWFRACitPUFJPRklMRV9ESVIgPSBAT1BST0ZJTEVfRElSQAorT1BST0ZJTEVfTU9EVUxFX0FSQ0ggPSBAT1BST0ZJTEVfTU9EVUxFX0FSQ0hACitPUF9DRkxBR1MgPSBAT1BfQ0ZMQUdTQAorT1BfQ1hYRkxBR1MgPSBAT1BfQ1hYRkxBR1NACitPUF9ET0NESVIgPSBAT1BfRE9DRElSQAorT1RPT0wgPSBAT1RPT0xACitPVE9PTDY0ID0gQE9UT09MNjRACitQQUNLQUdFID0gQFBBQ0tBR0VACitQQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKK1BBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACitQQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKK1BBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACitQQUNLQUdFX1VSTCA9IEBQQUNLQUdFX1VSTEAKK1BBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACitQQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKK1BLR19DT05GSUcgPSBAUEtHX0NPTkZJR0AKK1BLR19DT05GSUdfTElCRElSID0gQFBLR19DT05GSUdfTElCRElSQAorUEtHX0NPTkZJR19QQVRIID0gQFBLR19DT05GSUdfUEFUSEAKK1BPUFRfTElCUyA9IEBQT1BUX0xJQlNACitQVFJESUZGX1RfVFlQRSA9IEBQVFJESUZGX1RfVFlQRUAKK1FUX0NGTEFHUyA9IEBRVF9DRkxBR1NACitRVF9JTkNMVURFUyA9IEBRVF9JTkNMVURFU0AKK1FUX0xERkxBR1MgPSBAUVRfTERGTEFHU0AKK1FUX0xJQiA9IEBRVF9MSUJACitRVF9MSUJTID0gQFFUX0xJQlNACitRVF9WRVJTSU9OID0gQFFUX1ZFUlNJT05ACitSQU5MSUIgPSBAUkFOTElCQAorU0VEID0gQFNFREAKK1NFVF9NQUtFID0gQFNFVF9NQUtFQAorU0hFTEwgPSBAU0hFTExACitTSVpFX1RfVFlQRSA9IEBTSVpFX1RfVFlQRUAKK1NUUklQID0gQFNUUklQQAorVUlDID0gQFVJQ0AKK1VJQ2hlbHAgPSBAVUlDaGVscEAKK1ZFUlNJT04gPSBAVkVSU0lPTkAKK1hNS01GID0gQFhNS01GQAorWE1MX0NBVEFMT0cgPSBAWE1MX0NBVEFMT0dACitYU0xUUFJPQyA9IEBYU0xUUFJPQ0AKK1hTTFRQUk9DX0ZMQUdTID0gQFhTTFRQUk9DX0ZMQUdTQAorWF9DRkxBR1MgPSBAWF9DRkxBR1NACitYX0VYVFJBX0xJQlMgPSBAWF9FWFRSQV9MSUJTQAorWF9MSUJTID0gQFhfTElCU0AKK1hfUFJFX0xJQlMgPSBAWF9QUkVfTElCU0AKK2Fic19idWlsZGRpciA9IEBhYnNfYnVpbGRkaXJACithYnNfc3JjZGlyID0gQGFic19zcmNkaXJACithYnNfdG9wX2J1aWxkZGlyID0gQGFic190b3BfYnVpbGRkaXJACithYnNfdG9wX3NyY2RpciA9IEBhYnNfdG9wX3NyY2RpckAKK2FjX2N0X0NDID0gQGFjX2N0X0NDQAorYWNfY3RfQ1hYID0gQGFjX2N0X0NYWEAKK2FjX2N0X0RVTVBCSU4gPSBAYWNfY3RfRFVNUEJJTkAKK2FtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAorYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKK2FtX19xdW90ZSA9IEBhbV9fcXVvdGVACithbV9fdGFyID0gQGFtX190YXJACithbV9fdW50YXIgPSBAYW1fX3VudGFyQAorYmluZGlyID0gQGJpbmRpckAKK2J1aWxkID0gQGJ1aWxkQAorYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACitidWlsZF9jcHUgPSBAYnVpbGRfY3B1QAorYnVpbGRfb3MgPSBAYnVpbGRfb3NACitidWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAorYnVpbGRkaXIgPSBAYnVpbGRkaXJACitkYXRhZGlyID0gQGRhdGFkaXJACitkYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKK2RvY2RpciA9IEBkb2NkaXJACitkdmlkaXIgPSBAZHZpZGlyQAorZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACitob3N0ID0gQGhvc3RACitob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACitob3N0X2NwdSA9IEBob3N0X2NwdUAKK2hvc3Rfb3MgPSBAaG9zdF9vc0AKK2hvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAoraHRtbGRpciA9IEBodG1sZGlyQAoraW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAoraW5mb2RpciA9IEBpbmZvZGlyQAoraW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAorbGliZGlyID0gQGxpYmRpckAKK2xpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKK2xvY2FsZWRpciA9IEBsb2NhbGVkaXJACitsb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACitsdF9FQ0hPID0gQGx0X0VDSE9ACittYW5kaXIgPSBAbWFuZGlyQAorbWtkaXJfcCA9IEBta2Rpcl9wQAorb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAorcGRmZGlyID0gQHBkZmRpckAKK3ByZWZpeCA9IEBwcmVmaXhACitwcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACitwc2RpciA9IEBwc2RpckAKK3NiaW5kaXIgPSBAc2JpbmRpckAKK3NoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAorc3JjZGlyID0gQHNyY2RpckAKK3N5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKK3RhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACit0b3BfYnVpbGRfcHJlZml4ID0gQHRvcF9idWlsZF9wcmVmaXhACit0b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAordG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAordG9wZGlyID0gQHRvcGRpckAKK0FNX0NQUEZMQUdTID0gLUkgJHt0b3Bfc3JjZGlyfS9saWJ1dGlsKysgLUkgJHt0b3Bfc3JjZGlyfS9saWJ1dGlsCitBTV9DWFhGTEFHUyA9IEBPUF9DWFhGTEFHU0AKK25vaW5zdF9MSUJSQVJJRVMgPSBsaWJvcHQrKy5hCitsaWJvcHRfX19hX1NPVVJDRVMgPSBwb3B0X29wdGlvbnMuY3BwIHBvcHRfb3B0aW9ucy5oCithbGw6IGFsbC1hbQorCisuU1VGRklYRVM6CisuU1VGRklYRVM6IC5jcHAgLmxvIC5vIC5vYmoKKyQoc3JjZGlyKS9NYWtlZmlsZS5pbjogICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJQGZvciBkZXAgaW4gJD87IGRvIFwKKwkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAorCSAgICAqJCRkZXAqKSBcCisJICAgICAgKCBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggKSBcCisJICAgICAgICAmJiB7IGlmIHRlc3QgLWYgJEA7IHRoZW4gZXhpdCAwOyBlbHNlIGJyZWFrOyBmaTsgfTsgXAorCSAgICAgIGV4aXQgMTs7IFwKKwkgIGVzYWM7IFwKKwlkb25lOyBcCisJZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1mb3JlaWduIGxpYm9wdCsrL01ha2VmaWxlJzsgXAorCSQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmIFwKKwkgICQoQVVUT01BS0UpIC0tZm9yZWlnbiBsaWJvcHQrKy9NYWtlZmlsZQorLlBSRUNJT1VTOiBNYWtlZmlsZQorTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworCUBjYXNlICckPycgaW4gXAorCSAgKmNvbmZpZy5zdGF0dXMqKSBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKKwkgICopIFwKKwkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAorCWVzYWM7CisKKyQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorCiskKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorJChBQ0xPQ0FMX000KTogICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6CisKK2NsZWFuLW5vaW5zdExJQlJBUklFUzoKKwktdGVzdCAteiAiJChub2luc3RfTElCUkFSSUVTKSIgfHwgcm0gLWYgJChub2luc3RfTElCUkFSSUVTKQorbGlib3B0KysuYTogJChsaWJvcHRfX19hX09CSkVDVFMpICQobGlib3B0X19fYV9ERVBFTkRFTkNJRVMpIAorCS1ybSAtZiBsaWJvcHQrKy5hCisJJChsaWJvcHRfX19hX0FSKSBsaWJvcHQrKy5hICQobGlib3B0X19fYV9PQkpFQ1RTKSAkKGxpYm9wdF9fX2FfTElCQUREKQorCSQoUkFOTElCKSBsaWJvcHQrKy5hCisKK21vc3RseWNsZWFuLWNvbXBpbGU6CisJLXJtIC1mICouJChPQkpFWFQpCisKK2Rpc3RjbGVhbi1jb21waWxlOgorCS1ybSAtZiAqLnRhYi5jCisKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9wb3B0X29wdGlvbnMuUG9AYW1fX3F1b3RlQAorCisuY3BwLm86CitAYW1fX2Zhc3RkZXBDWFhfVFJVRUAJJChDWFhDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCAkPAorQGFtX19mYXN0ZGVwQ1hYX1RSVUVACSQoYW1fX212KSAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENYWF9GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENYWERFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAkkKENYWENPTVBJTEUpIC1jIC1vICRAICQ8CisKKy5jcHAub2JqOgorQGFtX19mYXN0ZGVwQ1hYX1RSVUVACSQoQ1hYQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYAorQGFtX19mYXN0ZGVwQ1hYX1RSVUVACSQoYW1fX212KSAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENYWF9GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENYWERFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAkkKENYWENPTVBJTEUpIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKKworLmNwcC5sbzoKK0BhbV9fZmFzdGRlcENYWF9UUlVFQAkkKExUQ1hYQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgJDwKK0BhbV9fZmFzdGRlcENYWF9UUlVFQAkkKGFtX19tdikgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENYWF9GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENYWERFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAkkKExUQ1hYQ09NUElMRSkgLWMgLW8gJEAgJDwKKworbW9zdGx5Y2xlYW4tbGlidG9vbDoKKwktcm0gLWYgKi5sbworCitjbGVhbi1saWJ0b29sOgorCS1ybSAtcmYgLmxpYnMgX2xpYnMKKworSUQ6ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKExJU1ApICQoVEFHU19GSUxFUykKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKwkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKwlta2lkIC1mSUQgJCR1bmlxdWUKK3RhZ3M6IFRBR1MKKworVEFHUzogICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAorCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKwlzZXQgeDsgXAorCWhlcmU9YHB3ZGA7IFwKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCisJICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCisJc2hpZnQ7IFwKKwlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCQqJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAorCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAorCSAgaWYgdGVzdCAkJCMgLWd0IDA7IHRoZW4gXAorCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCisJICAgICAgIiQkQCIgJCR1bmlxdWU7IFwKKwkgIGVsc2UgXAorCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCisJICAgICAgJCR1bmlxdWU7IFwKKwkgIGZpOyBcCisJZmkKK2N0YWdzOiBDVEFHUworQ1RBR1M6ICAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKKwkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHVuaXF1ZSIgXAorCSAgfHwgJChDVEFHUykgJChDVEFHU0ZMQUdTKSAkKEFNX0NUQUdTRkxBR1MpICQoQ1RBR1NfQVJHUykgXAorCSAgICAgJCR1bmlxdWUKKworR1RBR1M6CisJaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKKwkgICYmICQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpIFwKKwkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgIiQkaGVyZSIKKworZGlzdGNsZWFuLXRhZ3M6CisJLXJtIC1mIFRBR1MgSUQgR1RBR1MgR1JUQUdTIEdTWU1TIEdQQVRIIHRhZ3MKKworZGlzdGRpcjogJChESVNURklMRVMpCisJQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwlsaXN0PSckKERJU1RGSUxFUyknOyBcCisJICBkaXN0X2ZpbGVzPWBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRmaWxlOyBkb25lIHwgXAorCSAgc2VkIC1lICJzfF4kJHNyY2RpcnN0cmlwL3x8O3QiIFwKKwkgICAgICAtZSAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3w7dCJgOyBcCisJY2FzZSAkJGRpc3RfZmlsZXMgaW4gXAorCSAgKi8qKSAkKE1LRElSX1ApIGBlY2hvICIkJGRpc3RfZmlsZXMiIHwgXAorCQkJICAgc2VkICcvXC8vIWQ7c3xefCQoZGlzdGRpcikvfDtzLC9bXi9dKiQkLCwnIHwgXAorCQkJICAgc29ydCAtdWAgOzsgXAorCWVzYWM7IFwKKwlmb3IgZmlsZSBpbiAkJGRpc3RfZmlsZXM7IGRvIFwKKwkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKKwkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCisJICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCisJICAgIGlmIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRmaWxlIjsgdGhlbiBcCisJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisJICAgIGZpOyBcCisJICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAorCSAgICAgIGNwIC1mcFIgJChzcmNkaXIpLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKwkgICAgZmk7IFwKKwkgICAgY3AgLWZwUiAkJGQvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorCSAgZWxzZSBcCisJICAgIHRlc3QgLWYgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGV4aXQgMTsgXAorCSAgZmk7IFwKKwlkb25lCitjaGVjay1hbTogYWxsLWFtCitjaGVjazogY2hlY2stYW0KK2FsbC1hbTogTWFrZWZpbGUgJChMSUJSQVJJRVMpCitpbnN0YWxsZGlyczoKK2luc3RhbGw6IGluc3RhbGwtYW0KK2luc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLWFtCitpbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1hbQordW5pbnN0YWxsOiB1bmluc3RhbGwtYW0KKworaW5zdGFsbC1hbTogYWxsLWFtCisJQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KKworaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KK2luc3RhbGwtc3RyaXA6CisJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKKwkgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorCSAgYHRlc3QgLXogJyQoU1RSSVApJyB8fCBcCisJICAgIGVjaG8gIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciYCBpbnN0YWxsCittb3N0bHljbGVhbi1nZW5lcmljOgorCitjbGVhbi1nZW5lcmljOgorCitkaXN0Y2xlYW4tZ2VuZXJpYzoKKwktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKKwktdGVzdCAuID0gIiQoc3JjZGlyKSIgfHwgdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykKKworbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgorCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKKwlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCitjbGVhbjogY2xlYW4tYW0KKworY2xlYW4tYW06IGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBjbGVhbi1ub2luc3RMSUJSQVJJRVMgXAorCW1vc3RseWNsZWFuLWFtCisKK2Rpc3RjbGVhbjogZGlzdGNsZWFuLWFtCisJLXJtIC1yZiAuLyQoREVQRElSKQorCS1ybSAtZiBNYWtlZmlsZQorZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCisJZGlzdGNsZWFuLXRhZ3MKKworZHZpOiBkdmktYW0KKworZHZpLWFtOgorCitodG1sOiBodG1sLWFtCisKK2h0bWwtYW06CisKK2luZm86IGluZm8tYW0KKworaW5mby1hbToKKworaW5zdGFsbC1kYXRhLWFtOgorCitpbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktYW0KKworaW5zdGFsbC1kdmktYW06CisKK2luc3RhbGwtZXhlYy1hbToKKworaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KKworaW5zdGFsbC1odG1sLWFtOgorCitpbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQorCitpbnN0YWxsLWluZm8tYW06CisKK2luc3RhbGwtbWFuOgorCitpbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KKworaW5zdGFsbC1wZGYtYW06CisKK2luc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KKworaW5zdGFsbC1wcy1hbToKKworaW5zdGFsbGNoZWNrLWFtOgorCittYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCisJLXJtIC1yZiAuLyQoREVQRElSKQorCS1ybSAtZiBNYWtlZmlsZQorbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYworCittb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tYW0KKworbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCisJbW9zdGx5Y2xlYW4tbGlidG9vbAorCitwZGY6IHBkZi1hbQorCitwZGYtYW06CisKK3BzOiBwcy1hbQorCitwcy1hbToKKwordW5pbnN0YWxsLWFtOgorCisuTUFLRTogaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwCisKKy5QSE9OWTogQ1RBR1MgR1RBR1MgYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBjbGVhbi1nZW5lcmljIFwKKwljbGVhbi1saWJ0b29sIGNsZWFuLW5vaW5zdExJQlJBUklFUyBjdGFncyBkaXN0Y2xlYW4gXAorCWRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIGRpc3RjbGVhbi1saWJ0b29sIFwKKwlkaXN0Y2xlYW4tdGFncyBkaXN0ZGlyIGR2aSBkdmktYW0gaHRtbCBodG1sLWFtIGluZm8gaW5mby1hbSBcCisJaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgXAorCWluc3RhbGwtZHZpLWFtIGluc3RhbGwtZXhlYyBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1odG1sIFwKKwlpbnN0YWxsLWh0bWwtYW0gaW5zdGFsbC1pbmZvIGluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBcCisJaW5zdGFsbC1wZGYgaW5zdGFsbC1wZGYtYW0gaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIFwKKwlpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgXAorCW1haW50YWluZXItY2xlYW4gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIFwKKwltb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBcCisJcGRmIHBkZi1hbSBwcyBwcy1hbSB0YWdzIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0KKworCisjIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgorIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCisuTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9saWJvcHQrKy9wb3B0X29wdGlvbnMuY3BwIGIvb3Byb2ZpbGUtMC45LjcvbGlib3B0KysvcG9wdF9vcHRpb25zLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41M2E4YzgwCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvbGlib3B0KysvcG9wdF9vcHRpb25zLmNwcApAQCAtMCwwICsxLDMyNyBAQAorLyoqCisgKiBAZmlsZSBwb3B0X29wdGlvbnMuY3BwCisgKiBvcHRpb24gcGFyc2luZworICoKKyAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDIgT1Byb2ZpbGUgYXV0aG9ycworICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKKyAqCisgKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKKyAqIEBhdXRob3IgSm9obiBMZXZvbgorICovCisKKyNpbmNsdWRlIDxpb3N0cmVhbT4KKworI2luY2x1ZGUgIm9wX3BvcHQuaCIKKyNpbmNsdWRlICJvcF92ZXJzaW9uLmgiCisKKyNpbmNsdWRlICJwb3B0X29wdGlvbnMuaCIKKyNpbmNsdWRlICJzdHJpbmdfbWFuaXAuaCIKKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKworbmFtZXNwYWNlIHBvcHQgeworIAorLyoqCisgKiBvcHRpb25fYmFzZSAtIGJhc2UgY2xhc3MgZm9yIGltcGxlbWVudGF0aW9uIG9mIGEgY29tbWFuZCBsaW5lIG9wdGlvbgorICoKKyAqIEV2ZXJ5IGNvbW1hbmQgbGluZSBvcHRpb24gYWRkZWQgYmVmb3JlIGNhbGxpbmcgcGFyc2Vfb3B0aW9ucygpCisgKiBpcyBvZiB0aGlzIHR5cGUuCisgKi8KK2NsYXNzIG9wdGlvbl9iYXNlIHsKK3B1YmxpYzoKKwkvKioKKwkgKiBvcHRpb25fYmFzZSAtIGNvbnN0cnVjdCBhbiBvcHRpb24gd2l0aCB0aGUgZ2l2ZW4gb3B0aW9ucy4KKwkgKiBAcGFyYW0gb3B0aW9uX25hbWUgbmFtZSBwYXJ0IG9mIGxvbmcgZm9ybSBlLmcuIC0tb3B0aW9uCisJICogQHBhcmFtIHNob3J0X25hbWUgc2hvcnQgZm9ybSBuYW1lIGUuZy4gLW8KKwkgKiBAcGFyYW0gaGVscF9zdHIgc2hvcnQgZGVzY3JpcHRpb24gb2YgdGhlIG9wdGlvbgorCSAqIEBwYXJhbSBhcmdfaGVscF9zdHIgc2hvcnQgZGVzY3JpcHRpb24gb2YgdGhlIGFyZ3VtZW50IChpZiBhbnkpCisJICogQHBhcmFtIGRhdGEgYSBwb2ludGVyIHRvIHRoZSBkYXRhIHRvIGZpbGwgaW4KKwkgKiBAcGFyYW0gcG9wdF9mbGFncyB0aGUgcG9wdCBsaWJyYXJ5IGRhdGEgdHlwZQorCSAqLworCW9wdGlvbl9iYXNlKGNoYXIgY29uc3QgKiBvcHRpb25fbmFtZSwgY2hhciBzaG9ydF9uYW1lLAorCQkgICAgY2hhciBjb25zdCAqIGhlbHBfc3RyLCBjaGFyIGNvbnN0ICogYXJnX2hlbHBfc3RyLAorCQkgICAgdm9pZCAqIGRhdGEsIGludCBwb3B0X2ZsYWdzKTsKKworCXZpcnR1YWwgfm9wdGlvbl9iYXNlKCkge30KKworCS8qKgorCSAqIHBvc3RfcHJvY2VzcyAtIHBlcmZvcm0gYW55IG5lY2Vzc2FyeSBwb3N0LXByb2Nlc3NpbmcKKwkgKi8KKwl2aXJ0dWFsIHZvaWQgcG9zdF9wcm9jZXNzKCkge30KKworcHJvdGVjdGVkOgorCWNoYXIgY29uc3QgKiBvcHRpb25fbmFtZTsKK307CisKKworLyoqIHRoZSBwb3B0IGFycmF5IHNpbmdsZXRvbiBvcHRpb25zICovCitzdGF0aWMgdmVjdG9yPHBvcHRPcHRpb24+ICYgcG9wdF9vcHRpb25zKHZvaWQpCit7CisJc3RhdGljIHZlY3Rvcjxwb3B0T3B0aW9uPiAqeCA9IG5ldyh2ZWN0b3I8cG9wdE9wdGlvbj4pOworCXJldHVybiAqeDsKK30KKworc3RhdGljIHZlY3RvcjxvcHRpb25fYmFzZSAqPiAmIG9wdGlvbnNfbGlzdCh2b2lkKQoreworCXN0YXRpYyB2ZWN0b3I8b3B0aW9uX2Jhc2UgKj4gKnggPSBuZXcodmVjdG9yPG9wdGlvbl9iYXNlICo+KTsKKwlyZXR1cm4gKng7Cit9CisKK3N0YXRpYyBpbnQgc2hvd3ZlcnM7CisKK3N0YXRpYyBzdHJ1Y3QgcG9wdE9wdGlvbiBhcHBlbmRlZF9vcHRpb25zW10gPSB7CisJeyAidmVyc2lvbiIsICd2JywgUE9QVF9BUkdfTk9ORSwgJnNob3d2ZXJzLCAwLCAic2hvdyB2ZXJzaW9uIiwgTlVMTCwgfSwKKwlQT1BUX0FVVE9IRUxQCisJUE9QVF9UQUJMRUVORAorCX07CisKKworLyogb3B0aW9ucyBwYXJhbWV0ZXIgY2FuJ3QgYmUgYSBsb2NhbCB2YXJpYWJsZSBiZWNhdXNlIGNhbGxlciBjYW4gdXNlIHRoZQorICogcmV0dXJuZWQgcG9wdENvbnRleHQgd2hpY2ggY29udGFpbnMgIHBvaW50ZXIgaW5zaWRlIHRoZSBvcHRpb25zIGFycmF5ICovCitzdGF0aWMgcG9wdENvbnRleHQgZG9fcGFyc2Vfb3B0aW9ucyhpbnQgYXJnYywgY2hhciBjb25zdCAqKiBhcmd2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yPHBvcHRPcHRpb24+ICYgb3B0aW9ucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvcjxzdHJpbmc+ICYgYWRkaXRpb25hbF9wYXJhbXMpCit7CisJb3B0aW9ucyA9IHBvcHRfb3B0aW9ucygpOworCisJaW50IGNvbnN0IG5yX2FwcGVuZGVkX29wdGlvbnMgPQorCQlzaXplb2YoYXBwZW5kZWRfb3B0aW9ucykgLyBzaXplb2YoYXBwZW5kZWRfb3B0aW9uc1swXSk7CisKKwlvcHRpb25zLmluc2VydChvcHRpb25zLmVuZCgpLCBhcHBlbmRlZF9vcHRpb25zLAorCQkgICAgICAgYXBwZW5kZWRfb3B0aW9ucyArIG5yX2FwcGVuZGVkX29wdGlvbnMpOworCisJcG9wdENvbnRleHQgY29uID0gb3BfcG9wdEdldENvbnRleHQoTlVMTCwgYXJnYywgYXJndiwgJm9wdGlvbnNbMF0sIDApOworCisJaWYgKHNob3d2ZXJzKQorCQlzaG93X3ZlcnNpb24oYXJndlswXSk7CisKKwljaGFyIGNvbnN0ICogZmlsZTsKKwl3aGlsZSAoKGZpbGUgPSBwb3B0R2V0QXJnKGNvbikpICE9IDApCisJCWFkZGl0aW9uYWxfcGFyYW1zLnB1c2hfYmFjayhmaWxlKTsKKworCWZvciAoc2l6ZV90IGkgPSAwIDsgaSA8IG9wdGlvbnNfbGlzdCgpLnNpemUoKSA7ICsraSkKKwkJb3B0aW9uc19saXN0KClbaV0tPnBvc3RfcHJvY2VzcygpOworCisJcmV0dXJuIGNvbjsKK30KKworCit2b2lkIHBhcnNlX29wdGlvbnMoaW50IGFyZ2MsIGNoYXIgY29uc3QgKiogYXJndiwKKyAgICAgICAgICAgICAgICAgICB2ZWN0b3I8c3RyaW5nPiAmIGFkZGl0aW9uYWxfcGFyYW1zKQoreworCXZlY3Rvcjxwb3B0T3B0aW9uPiBvcHRpb25zOworCisJcG9wdENvbnRleHQgY29uID0KKwkJZG9fcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBvcHRpb25zLCBhZGRpdGlvbmFsX3BhcmFtcyk7CisKKwlwb3B0RnJlZUNvbnRleHQoY29uKTsKK30KKworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gY2xhc3Mgb3B0aW9uX2ltcDsKKworCisvKioKKyAqIG9wdGlvbjx2b2lkPiAtIGEgYmluYXJ5IG9wdGlvbgorICoKKyAqIFVzZSB0aGlzIG9wdGlvbiB0eXBlIGZvciBjb25zdHJ1Y3Rpbmcgc3BlY2lmaWVkIC8gbm90LXNwZWNpZmllZAorICogb3B0aW9ucyBlLmcuIC0tZnJvYgorICovCit0ZW1wbGF0ZSA8PiBjbGFzcyBvcHRpb25faW1wPHZvaWQ+IDogcHVibGljIG9wdGlvbl9iYXNlIHsKK3B1YmxpYzoKKwlvcHRpb25faW1wKGJvb2wgJiB2YWx1ZSwgY2hhciBjb25zdCAqIG9wdGlvbl9uYW1lLCBjaGFyIHNob3J0X25hbWUsCisJICAgICAgICAgICBjaGFyIGNvbnN0ICogaGVscF9zdHIpOworCisJfm9wdGlvbl9pbXAoKSB7fQorCisJdm9pZCBwb3N0X3Byb2Nlc3MoKTsKKworcHJpdmF0ZToKKwlib29sICYgdmFsdWU7CisJaW50IHBvcHRfdmFsdWU7Cit9OworCisKKy8qKgorICogb3B0aW9uPGludD4gLSBhIGludGVnZXIgb3B0aW9uCisgKgorICogVXNlIHRoaXMgZm9yIG9wdGlvbnMgdGFraW5nIGFuIGludGVnZXIgZS5nLiAtLWZyb2IgNgorICovCit0ZW1wbGF0ZSA8PiBjbGFzcyBvcHRpb25faW1wPGludD4gOiBwdWJsaWMgb3B0aW9uX2Jhc2UgeworcHVibGljOgorCW9wdGlvbl9pbXAoaW50ICYgdmFsdWUsIGNoYXIgY29uc3QgKiBvcHRpb25fbmFtZSwgY2hhciBzaG9ydF9uYW1lLAorCSAgICAgICAgICAgY2hhciBjb25zdCAqIGhlbHBfc3RyLCBjaGFyIGNvbnN0ICogYXJnX2hlbHBfc3RyKTsKKworCX5vcHRpb25faW1wKCkge30KK307CisKKworLyoqCisgKiBvcHRpb248c3RyaW5nPiAtIGEgc3RyaW5nIG9wdGlvbgorICoKKyAqIFVzZSB0aGlzIGZvciBvcHRpb25zIHRha2luZyBhIHN0cmluZyBlLmcuIC0tZnJvYiBwYXJzbGV5CisgKi8KK3RlbXBsYXRlIDw+IGNsYXNzIG9wdGlvbl9pbXA8c3RyaW5nPiA6IHB1YmxpYyBvcHRpb25fYmFzZSB7CitwdWJsaWM6CisJb3B0aW9uX2ltcChzdHJpbmcgJiB2YWx1ZSwgY2hhciBjb25zdCAqIG9wdGlvbl9uYW1lLAorCSAgICAgICAgICAgY2hhciBzaG9ydF9uYW1lLCBjaGFyIGNvbnN0ICogaGVscF9zdHIsCisJICAgICAgICAgICBjaGFyIGNvbnN0ICogYXJnX2hlbHBfc3RyKTsKKworCXZvaWQgcG9zdF9wcm9jZXNzKCk7CisKKwl+b3B0aW9uX2ltcCgpIHt9CisKK3ByaXZhdGU6CisJLy8gd2UgbmVlZCBhbiBpbnRlcm1lZGlhdGUgY2hhciBhcnJheSB0byBwYXNzIHRvIHBvcHQgbGlicworCWNoYXIgKiBwb3B0X3ZhbHVlOworCXN0cmluZyAmIHZhbHVlOworfTsKKworCisvKioKKyAqIG9wdGlvbjwgdmVjdG9yPHN0cmluZz4gPiAtIGEgc3RyaW5nIHZlY3RvciBvcHRpb24KKyAqCisgKiBVc2UgdGhpcyBmb3Igb3B0aW9ucyB0YWtpbmcgYSBudW1iZXIgb2Ygc3RyaW5nIGFyZ3VtZW50cywKKyAqIHNlcGFyYXRlZCBieSB0aGUgZ2l2ZW4gc2VwYXJhdG9yLgorICovCit0ZW1wbGF0ZSA8PiBjbGFzcyBvcHRpb25faW1wPCB2ZWN0b3I8c3RyaW5nPiA+IDogcHVibGljIG9wdGlvbl9iYXNlIHsKK3B1YmxpYzoKKwlvcHRpb25faW1wKHZlY3RvcjxzdHJpbmc+ICYgdmFsdWUsCisJICAgICAgICAgICBjaGFyIGNvbnN0ICogb3B0aW9uX25hbWUsIGNoYXIgc2hvcnRfbmFtZSwKKwkgICAgICAgICAgIGNoYXIgY29uc3QgKiBoZWxwX3N0ciwgY2hhciBjb25zdCAqIGFyZ19oZWxwX3N0ciwKKwkgICAgICAgICAgIGNoYXIgc2VwYXJhdG9yID0gJywnKTsKKworCXZvaWQgcG9zdF9wcm9jZXNzKCk7CisKKwl+b3B0aW9uX2ltcCgpIHt9CisKK3ByaXZhdGU6CisJdmVjdG9yPHN0cmluZz4gJiB2YWx1ZTsKKwkvLyB3ZSBuZWVkIGFuIGludGVybWVkaWF0ZSBjaGFyIGFycmF5IHRvIHBhc3MgdG8gcG9wdCBsaWJzCisJY2hhciAqIHBvcHRfdmFsdWU7CisJY2hhciBjb25zdCBzZXBhcmF0b3I7Cit9OworCisKK29wdGlvbjo6fm9wdGlvbigpCit7CisJZGVsZXRlIHRoZV9vcHRpb247Cit9CisKKworLy8vIG5vbiB0ZW1wbGF0aXplZCBjdG9yIGZvciBib29sZWFuIG9wdGlvbgorb3B0aW9uOjpvcHRpb24oYm9vbCAmIHZhbHVlLCBjaGFyIGNvbnN0ICogbmFtZSwgY2hhciBzaG9ydF9uYW1lLCBjaGFyIGNvbnN0ICogaGVscCkKKwk6IHRoZV9vcHRpb24obmV3IG9wdGlvbl9pbXA8dm9pZD4odmFsdWUsIG5hbWUsIHNob3J0X25hbWUsIGhlbHApKQoreworfQorCisKKy8vLyBzcGVjaWFsaXphdGlvbiBvZiBvcHRpb24gY3RvciBmb3IgaW50ZWdlciBvcHRpb24KK3RlbXBsYXRlIDw+CitvcHRpb246Om9wdGlvbihpbnQgJiB2YWx1ZSwgY2hhciBjb25zdCAqIG5hbWUsIGNoYXIgc2hvcnRfbmFtZSwKKyAgICAgICAgICAgICAgIGNoYXIgY29uc3QgKiBoZWxwLCBjaGFyIGNvbnN0ICogYXJnX2hlbHApCisJOiB0aGVfb3B0aW9uKG5ldyBvcHRpb25faW1wPGludD4KKwkJCSh2YWx1ZSwgbmFtZSwgc2hvcnRfbmFtZSwgaGVscCwgYXJnX2hlbHApKQoreworfQorCisKKy8vLyBzcGVjaWFsaXphdGlvbiBvZiBvcHRpb24gY3RvciBmb3Igc3RyaW5nIG9wdGlvbgordGVtcGxhdGUgPD4KK29wdGlvbjo6b3B0aW9uKHN0cmluZyAmIHZhbHVlLCBjaGFyIGNvbnN0ICogbmFtZSwgY2hhciBzaG9ydF9uYW1lLAorICAgICAgICAgICAgICAgY2hhciBjb25zdCAqIGhlbHAsIGNoYXIgY29uc3QgKiBhcmdfaGVscCkKKwk6IHRoZV9vcHRpb24obmV3IG9wdGlvbl9pbXA8c3RyaW5nPgorCQkJKHZhbHVlLCBuYW1lLCBzaG9ydF9uYW1lLCBoZWxwLCBhcmdfaGVscCkpCit7Cit9CisKKworLy8vIHNwZWNpYWxpemF0aW9uIG9mIG9wdGlvbiBjdG9yIGZvciB2ZWN0b3I8c3RyaW5nPiBvcHRpb24KK3RlbXBsYXRlIDw+CitvcHRpb246Om9wdGlvbih2ZWN0b3I8c3RyaW5nPiAmIHZhbHVlLCBjaGFyIGNvbnN0ICogbmFtZSwgY2hhciBzaG9ydF9uYW1lLAorICAgICAgICAgICAgICAgY2hhciBjb25zdCAqIGhlbHAsIGNoYXIgY29uc3QgKiBhcmdfaGVscCkKKwk6IHRoZV9vcHRpb24obmV3IG9wdGlvbl9pbXA8IHZlY3RvcjxzdHJpbmc+ID4KKwkJCSh2YWx1ZSwgbmFtZSwgc2hvcnRfbmFtZSwgaGVscCwgYXJnX2hlbHApKQoreworfQorCisKK29wdGlvbl9iYXNlOjpvcHRpb25fYmFzZShjaGFyIGNvbnN0ICogbmFtZSwgY2hhciBzaG9ydF9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgY29uc3QgKiBoZWxwLCBjaGFyIGNvbnN0ICogYXJnX2hlbHAsCisgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqIGRhdGEsIGludCBwb3B0X2ZsYWdzKQorCTogb3B0aW9uX25hbWUobmFtZSkKK3sKKwlwb3B0T3B0aW9uIGNvbnN0IG9wdCA9IHsgbmFtZSwgc2hvcnRfbmFtZSwgcG9wdF9mbGFncywKKwkgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSwgMCwgaGVscCwgYXJnX2hlbHAgfTsKKworCXBvcHRfb3B0aW9ucygpLnB1c2hfYmFjayhvcHQpOworCisJb3B0aW9uc19saXN0KCkucHVzaF9iYWNrKHRoaXMpOworfQorCisKK29wdGlvbl9pbXA8dm9pZD46Om9wdGlvbl9pbXAoYm9vbCAmIHZhbCwgY2hhciBjb25zdCAqIG5hbWUsIGNoYXIgc2hvcnRfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBjb25zdCAqIGhlbHApCisJOiBvcHRpb25fYmFzZShuYW1lLCBzaG9ydF9uYW1lLCBoZWxwLCAwLCAmcG9wdF92YWx1ZSwgUE9QVF9BUkdfTk9ORSksCisJICB2YWx1ZSh2YWwpLCBwb3B0X3ZhbHVlKDApCit7Cit9CisKKwordm9pZCBvcHRpb25faW1wPHZvaWQ+Ojpwb3N0X3Byb2Nlc3MoKQoreworCWlmIChwb3B0X3ZhbHVlKSB7CisJCWlmIChpc19wcmVmaXgob3B0aW9uX25hbWUsICJuby0iKSkKKwkJCXZhbHVlID0gIXBvcHRfdmFsdWU7CisJCWVsc2UgCisJCQl2YWx1ZSA9IHBvcHRfdmFsdWU7CisJfQorfQorCisKK29wdGlvbl9pbXA8aW50Pjo6b3B0aW9uX2ltcChpbnQgJiB2YWx1ZSwgY2hhciBjb25zdCAqIG5hbWUsIGNoYXIgc2hvcnRfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIGNvbnN0ICogaGVscCwgY2hhciBjb25zdCAqIGFyZ19oZWxwKQorCTogb3B0aW9uX2Jhc2UobmFtZSwgc2hvcnRfbmFtZSwgaGVscCwgYXJnX2hlbHAsICZ2YWx1ZSwgUE9QVF9BUkdfSU5UKQoreworfQorCisKK29wdGlvbl9pbXA8c3RyaW5nPjo6b3B0aW9uX2ltcChzdHJpbmcgJiB2YWwsIGNoYXIgY29uc3QgKiBuYW1lLCBjaGFyIHNob3J0X25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBjb25zdCAqIGhlbHAsIGNoYXIgY29uc3QgKiBhcmdfaGVscCkKKwk6IG9wdGlvbl9iYXNlKG5hbWUsIHNob3J0X25hbWUsIGhlbHAsIGFyZ19oZWxwLAorICAgICAgICAgICAgICAgICAgICAgICZwb3B0X3ZhbHVlLCBQT1BUX0FSR19TVFJJTkcpLAorCSAgcG9wdF92YWx1ZSgwKSwgdmFsdWUodmFsKQoreworfQorCisKK3ZvaWQgb3B0aW9uX2ltcDxzdHJpbmc+Ojpwb3N0X3Byb2Nlc3MoKQoreworCWlmIChwb3B0X3ZhbHVlKSB7CisJCXZhbHVlID0gcG9wdF92YWx1ZTsKKwkJcG9wdF92YWx1ZSA9IDA7CisJfQorfQorCisKK29wdGlvbl9pbXA8IHZlY3RvcjxzdHJpbmc+ID46Om9wdGlvbl9pbXAodmVjdG9yPHN0cmluZz4gJiB2YWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgY29uc3QgKiBuYW1lLCBjaGFyIHNob3J0X25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgY29uc3QgKiBoZWxwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIGNvbnN0ICogYXJnX2hlbHAsIGNoYXIgc2VwY2hhcikKKwk6IG9wdGlvbl9iYXNlKG5hbWUsIHNob3J0X25hbWUsIGhlbHAsIGFyZ19oZWxwLAorCSAgICAgICAgICAgICAgJnBvcHRfdmFsdWUsIFBPUFRfQVJHX1NUUklORyksCisJICB2YWx1ZSh2YWwpLCBwb3B0X3ZhbHVlKDApLCBzZXBhcmF0b3Ioc2VwY2hhcikKK3sKK30KKworCit2b2lkIG9wdGlvbl9pbXA8IHZlY3RvcjxzdHJpbmc+ID46OnBvc3RfcHJvY2VzcygpCit7CisJaWYgKHBvcHRfdmFsdWUpIHsKKwkJdmFsdWUgPSBzZXBhcmF0ZV90b2tlbihwb3B0X3ZhbHVlLCBzZXBhcmF0b3IpOworCisJCXBvcHRfdmFsdWUgPSAwOworCX0KK30KKworfSAvLyBuYW1lc3BhY2UgcG9wdApkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvbGlib3B0KysvcG9wdF9vcHRpb25zLmggYi9vcHJvZmlsZS0wLjkuNy9saWJvcHQrKy9wb3B0X29wdGlvbnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjcyYWE2Ci0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvbGlib3B0KysvcG9wdF9vcHRpb25zLmgKQEAgLTAsMCArMSwxMjMgQEAKKy8qKgorICogQGZpbGUgcG9wdF9vcHRpb25zLmgKKyAqIG9wdGlvbiBwYXJzaW5nCisgKgorICogVGhpcyBwcm92aWRlcyBhIHNpbXBsZSBmYWNpbGl0eSBmb3IgYWRkaW5nIGNvbW1hbmQtbGluZQorICogb3B0aW9ucywgYW5kIHBhcnNpbmcgdGhlbS4KKyAqCisgKiBZb3UgY2FuIGFkZCBhIG51bWJlciBvZiBvcHRpb25zIGFuZCB0aGVuIGNhbGwgcGFyc2Vfb3B0aW9ucygpCisgKiB0byBwcm9jZXNzIHRoZW0sIGZvciBleGFtcGxlIDoKKyAqCisgKiBcY29kZQorICogYm9vbCBhbGxvd19mcm9iOworICogc3RyaW5nIGZyb2I7CisgKiBzdGF0aWMgcG9wdDo6b3B0aW9uIGFsbG93X2Zyb2Jfb3B0KGFsbG93X2Zyb2IsICJhbGxvdy1mcm9iIiwgJ2EnLCAiYWxsb3cgZnJvYnMiKTsKKyAqIHN0YXRpYyBwb3B0OjpvcHRpb24gZnJvYl9vcHQoZnJvYiwgImZyb2IiLCAnZicsICJ3aGF0IHRvIGZyb2IiLCAibmFtZSIpOworICoKKyAqIC4uLgorICogcG9wdDo6cGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBhZGRfcGFyYW1zKTsKKyAqIFxlbmRjb2RlCisgKgorICogTm90ZSB0aGFuIGlmIHlvdSB0cnkgdG8gaW1wbGVtZW50IGFuIG9wdGlvbiBmb3IgYW4gdW5zdXBwb3J0ZWQgdHlwZSAgbGlrZSA6CisgKiBcY29kZQorICogc3RhdGljIHVuc2lnbmVkIGludCBpOworICogc3RhdGljIHBvcHQ6Om9wdGlvbiBpX29wdChpLCAuLi4uKTsKKyAqIFxlbmRjb2RlCisgKiB5b3UgZG9uJ3QgZ2V0IGEgY29tcGlsZSB0aW1lIGVycm9yIGJ1dCBhIGxpbmsgdGltZSBlcnJvci4KKyAqCisgKiBUaGUgY2FsbCB0byBwYXJzZV9vcHRpb25zKCkgd2lsbCBmaWxsIGluIGFsbG93X2Zyb2IgYW5kIGZyb2IsIGlmIHRoZXkKKyAqIGFyZSBwYXNzZWQgdG8gdGhlIHByb2dyYW0gKG15ZnJvYmJlciAtLWFsbG93LWZyb2IgLS1mcm9iIGZvbyksIGFuZCBwbGFjZQorICogYW55IGxlZnQgb3ZlciBjb21tYW5kIGxpbmUgYXJndW1lbnRzIGluIHRoZSBhZGRfcGFyYW1zIHZlY3Rvci4gTm90ZQorICogdGhhdCB0aGUgdGVtcGxhdGUgcGFyYW1ldGVyIGRlbm90ZXMgdGhlIHR5cGUgb2YgdGhlIG9wdGlvbiBhcmd1bWVudC4KKyAqCisgKiBXaGVuIHRoZSB0ZW1wbGF0ZSBwYXJhbWV0ZXIgdHlwZSBpcyBib29sLCBvcHRpb24gc3RhcnRpbmcgd2l0aCAibm8tIiBwcmVmaXgKKyAqIGFyZSBpbXBsaWNpdGVseSBjb25zaWRlcmVkIGFzIG5lZ2F0ZWQgYmVmb3JlIHdyaXRpbmcgdGhlIGFzc29jaWF0ZWQgYm9vbCBzbworICogdGhpcyB3aWxsIHdvcmsgYXMgZXhwZWN0ZWQ6CisgKiBcY29kZQorICogYm9vbCBkZW1hbmdsZTsKKyAqIHBvcHQ6Om9wdGlvbihkZW1hbmdsZSwgImRlbWFuZ2xlIiwgJ2QnLCAiZGVtYW5nbGUgQysrIHN5bWJvbHMiKSwKKyAqIHBvcHQ6Om9wdGlvbihkZW1hbmdsZSwgIm5vLWRlbWFuZ2xlIiwgJ1wwJywgImRvbid0IGRlbWFuZ2xlIEMrKyBzeW1ib2xzIiksCisgKiBcZW5kY29kZQorICoKKyAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDIgT1Byb2ZpbGUgYXV0aG9ycworICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKKyAqCisgKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKKyAqIEBhdXRob3IgSm9obiBMZXZvbgorICovCisKKyNpZm5kZWYgUE9QVF9PUFRJT05TX0gKKyNkZWZpbmUgUE9QVF9PUFRJT05TX0gKKworI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDx2ZWN0b3I+CisKK25hbWVzcGFjZSBwb3B0IHsKKyAKKy8qKgorICogcGFyc2Vfb3B0aW9ucyAtIHBhcnNlIGNvbW1hbmQgbGluZSBvcHRpb25zCisgKiBAcGFyYW0gYXJnYyBsaWtlIHRoZSBwYXJhbWV0ZXIgb2YgbWFpbigpCisgKiBAcGFyYW0gYXJndiBsaWtlIHRoZSBwYXJhbWV0ZXIgb2YgbWFpbigpCisgKiBAcGFyYW0gYWRkaXRpb25hbF9wYXJhbXMgYWRkaXRpb25hbCBvcHRpb25zIGFyZSBzdG9yZWQgaGVyZQorICoKKyAqIFBhcnNlIHRoZSBnaXZlbiBjb21tYW5kIGxpbmUgd2l0aCB0aGUgcHJldmlvdXMKKyAqIG9wdGlvbnMgY3JlYXRlZC4gTXVsdGlwbGUgYWRkaXRpb25hbCBhcmd1bWVudHMKKyAqIHRoYXQgYXJlIG5vdCByZWNvZ25pc2VkIHdpbGwgYmUgYWRkZWQgdG8gdGhlIGFkZGl0aW9uYWxfcGFyYW1zCisgKiB2ZWN0b3IuCisgKi8KK3ZvaWQgcGFyc2Vfb3B0aW9ucyhpbnQgYXJnYywgY2hhciBjb25zdCAqKiBhcmd2LAorICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiAmIGFkZGl0aW9uYWxfcGFyYW1zKTsKKworY2xhc3Mgb3B0aW9uX2Jhc2U7CisKKy8qKgorICogb3B0aW9uIC0gYmFzZSBjbGFzcyBmb3IgYSBjb21tYW5kIGxpbmUgb3B0aW9uCisgKgorICogRXZlcnkgY29tbWFuZCBsaW5lIG9wdGlvbiBhZGRlZCBiZWZvcmUgY2FsbGluZyBwYXJzZV9vcHRpb25zKCkKKyAqIGlzIG9mIHRoaXMgdHlwZS4KKyAqLworY2xhc3Mgb3B0aW9uIHsKK3B1YmxpYzoKKwkvKioKKwkgKiBUZW1wbGF0aXplZCBjb25zdHJ1Y3RvciBmb3IgYW4gb3B0aW9uLiBUaGlzIGFkZHMgdGhlIG9wdGlvbgorCSAqIHRvIHRoZSBvcHRpb24gbGlzdCBvbiBjb25zdHJ1Y3Rpb24uIFRoaXMgaXMgc3BlY2lhbGl6ZWQgZm9yCisJICogZWFjaCByZWNvZ25pc2VkIG9wdGlvbiB2YWx1ZSB0eXBlIGJlbG93LgorCSAqLworCXRlbXBsYXRlIDxjbGFzcyBUPiBvcHRpb24oVCAmLCBjaGFyIGNvbnN0ICogb3B0aW9uX25hbWUsCisJICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIHNob3J0X25hbWUsIGNoYXIgY29uc3QgKiBoZWxwX3N0ciwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgY29uc3QgKiBhcmdfaGVscF9zdHIpOworCisJLyoqCisJICogYm9vbGVhbiBvcGVyYXRpb25zIGRvbid0IGdldCB0aGUgc2FtZSBzZXQgb2YgcGFyYW1ldGVycyBhcyBvdGhlcgorCSAqIG9wdGlvbiwgYXMgdGhlcmUgaXMgbm8gYXJndW1lbnQgdG8gZ2l2ZSBoZWxwIGZvci4KKwkgKiBEdWUgdG8gYSBidWcgaW4gZ2NjIDIuOTUgd2UgY2FuJ3QgdXNlIGEgZGVmYXVsdCBwYXJhbWV0ZXIKKwkgKiBpbiB0aGUgdGVtcGxhdGl6ZWQgY3RvciBhYm92ZSBiZWNhdXNlIDIuOTUgaXMgdW5hYmxlIHRvIG1hdGNoCisJICogdGhlIHJpZ2h0IGN0b3IuIFNvIG9uIHdlIGFkZCBhIG5vbi10ZW1wbGF0aXplZCBjdG9yIHdpdGggYW4gZXhhY3QKKwkgKiBtYXRjaCBmb3IgYm9vbGVhbiBvcHRpb24uCisJICovCisJb3B0aW9uKGJvb2wgJiwgY2hhciBjb25zdCAqIG9wdGlvbl9uYW1lLAorCSAgICAgICBjaGFyIHNob3J0X25hbWUsIGNoYXIgY29uc3QgKiBoZWxwX3N0cik7CisKKwl+b3B0aW9uKCk7CisKK3ByaXZhdGU6CisJb3B0aW9uX2Jhc2UgKiB0aGVfb3B0aW9uOworfTsKKworCisvKioKKyAqIFRoZSBzdXBwb3J0ZWQgb3B0aW9uIHR5cGUsIGJvb2xlYW4gb3B0aW9uIGFyZSBtYXRjaGVkIGJ5IGEgbm9uIHRlbXBsYXRpemVkCisgKiBjdG9yIGFib3ZlLgorICovCit0ZW1wbGF0ZSA8PiBvcHRpb246Om9wdGlvbihpbnQgJiwgY2hhciBjb25zdCAqIG9wdGlvbl9uYW1lLCBjaGFyIHNob3J0X25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIGNvbnN0ICogaGVscF9zdHIsIGNoYXIgY29uc3QgKiBhcmdfaGVscF9zdHIpOwordGVtcGxhdGUgPD4gb3B0aW9uOjpvcHRpb24oc3RkOjpzdHJpbmcgJiwgY2hhciBjb25zdCAqIG9wdGlvbl9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBzaG9ydF9uYW1lLCBjaGFyIGNvbnN0ICogaGVscF9zdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIGNvbnN0ICogYXJnX2hlbHBfc3RyKTsKK3RlbXBsYXRlIDw+IG9wdGlvbjo6b3B0aW9uKHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiAmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBjb25zdCAqIG9wdGlvbl9uYW1lLCBjaGFyIHNob3J0X25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIGNvbnN0ICogaGVscF9zdHIsIGNoYXIgY29uc3QgKiBhcmdfaGVscF9zdHIpOworCit9IC8vIG5hbWVzcGFjZSBwb3B0CisKKyNlbmRpZiAvLyBQT1BUX09QVElPTlNfSApkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvbGlicHAvTWFrZWZpbGUuYW0gYi9vcHJvZmlsZS0wLjkuNy9saWJwcC9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjQ0ZDk4Ci0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvbGlicHAvTWFrZWZpbGUuYW0KQEAgLTAsMCArMSw1NyBAQAorQU1fQ1BQRkxBR1MgPSBcCisJLUkgJHt0b3Bfc3JjZGlyfS9saWJvcCBcCisJLUkgJHt0b3Bfc3JjZGlyfS9saWJ1dGlsIFwKKwktSSAke3RvcF9zcmNkaXJ9L2xpYmRiIFwKKwktSSAke3RvcF9zcmNkaXJ9L2xpYm9wdCsrIFwKKwktSSAke3RvcF9zcmNkaXJ9L2xpYnV0aWwrKyBcCisJLUkgJHt0b3Bfc3JjZGlyfS9saWJvcCsrIFwKKwktSSAke3RvcF9zcmNkaXJ9L2xpYnJlZ2V4CisKK0FNX0NYWEZMQUdTID0gQE9QX0NYWEZMQUdTQAorCitub2luc3RfTElCUkFSSUVTID0gbGlicHAuYQorbGlicHBfYV9TT1VSQ0VTID0gXAorCWFycmFuZ2VfcHJvZmlsZXMuY3BwIFwKKwlhcnJhbmdlX3Byb2ZpbGVzLmggXAorCWNhbGxncmFwaF9jb250YWluZXIuaCBcCisJY2FsbGdyYXBoX2NvbnRhaW5lci5jcHAgXAorCWRpZmZfY29udGFpbmVyLmNwcCBcCisJZGlmZl9jb250YWluZXIuaCBcCisJZmlsZW5hbWVfc3BlYy5jcHAgXAorCWZpbGVuYW1lX3NwZWMuaCBcCisJZm9ybWF0X2ZsYWdzLmggXAorCWZvcm1hdF9vdXRwdXQuY3BwIFwKKwlmb3JtYXRfb3V0cHV0LmggXAorCWltYWdlX2Vycm9ycy5oIFwKKwlpbWFnZV9lcnJvcnMuY3BwIFwKKwlsb2NhdGVfaW1hZ2VzLmNwcCBcCisJbG9jYXRlX2ltYWdlcy5oIFwKKwluYW1lX3N0b3JhZ2UuY3BwIFwKKwluYW1lX3N0b3JhZ2UuaCBcCisJb3BfaGVhZGVyLmNwcCBcCisJb3BfaGVhZGVyLmggXAorCXN5bWJvbC5jcHAgXAorCXN5bWJvbC5oIFwKKwlwYXJzZV9maWxlbmFtZS5jcHAgXAorCXBhcnNlX2ZpbGVuYW1lLmggXAorCXBvcHVsYXRlLmggXAorCXBvcHVsYXRlLmNwcCBcCisJcHJvZmlsZS5jcHAgXAorCXByb2ZpbGUuaCBcCisJcHJvZmlsZV9jb250YWluZXIuY3BwIFwKKwlwcm9maWxlX2NvbnRhaW5lci5oIFwKKwlwcm9maWxlX3NwZWMuY3BwIFwKKwlwcm9maWxlX3NwZWMuaCBcCisJc2FtcGxlX2NvbnRhaW5lci5jcHAgXAorCXNhbXBsZV9jb250YWluZXIuaCBcCisJc3ltYm9sX2NvbnRhaW5lci5jcHAgXAorCXN5bWJvbF9jb250YWluZXIuaCBcCisJc3ltYm9sX2Z1bmN0b3JzLmNwcCBcCisJc3ltYm9sX2Z1bmN0b3JzLmggXAorCXN5bWJvbF9zb3J0LmNwcCBcCisJc3ltYm9sX3NvcnQuaCBcCisJeG1sX3V0aWxzLmggXAorCXhtbF91dGlscy5jcHAgXAorCXBvcHVsYXRlX2Zvcl9zcHUuY3BwIFwKKwlwb3B1bGF0ZV9mb3Jfc3B1LmgKKwpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvbGlicHAvTWFrZWZpbGUuaW4gYi9vcHJvZmlsZS0wLjkuNy9saWJwcC9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDQ5NTAzCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvbGlicHAvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSw2MTQgQEAKKyMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTEuMSBmcm9tIE1ha2VmaWxlLmFtLgorIyBAY29uZmlndXJlX2lucHV0QAorCisjIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwKKyMgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorIyBJbmMuCisjIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0CisjIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKKyMgUEFSVElDVUxBUiBQVVJQT1NFLgorCitAU0VUX01BS0VACisKK1ZQQVRIID0gQHNyY2RpckAKK3BrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAorcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACitwa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACitwa2dsaWJleGVjZGlyID0gJChsaWJleGVjZGlyKS9AUEFDS0FHRUAKK2FtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKK2luc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0CitpbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCitpbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKK0lOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCit0cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCitOT1JNQUxfSU5TVEFMTCA9IDoKK1BSRV9JTlNUQUxMID0gOgorUE9TVF9JTlNUQUxMID0gOgorTk9STUFMX1VOSU5TVEFMTCA9IDoKK1BSRV9VTklOU1RBTEwgPSA6CitQT1NUX1VOSU5TVEFMTCA9IDoKK2J1aWxkX3RyaXBsZXQgPSBAYnVpbGRACitob3N0X3RyaXBsZXQgPSBAaG9zdEAKK3N1YmRpciA9IGxpYnBwCitESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKHNyY2RpcikvTWFrZWZpbGUuaW4KK0FDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKK2FtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL200L2JpbnV0aWxzLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2J1aWx0aW5leHBlY3QubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY2VsbHNwdWJmZHN1cHBvcnQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY29tcGlsZXJvcHRpb24ubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY29uZmlnbW9kdWxlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2NvcHlpZmNoYW5nZS5tNCAkKHRvcF9zcmNkaXIpL200L2RvY2Jvb2subTQgXAorCSQodG9wX3NyY2RpcikvbTQvZXh0cmFkaXJzLm00ICQodG9wX3NyY2RpcikvbTQvZmluZGtlcm5lbC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9rZXJuZWxvcHRpb24ubTQgXAorCSQodG9wX3NyY2RpcikvbTQva2VybmVsdmVyc2lvbi5tNCAkKHRvcF9zcmNkaXIpL200L2xpYnRvb2wubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbHRvcHRpb25zLm00ICQodG9wX3NyY2RpcikvbTQvbHRzdWdhci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9sdHZlcnNpb24ubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdH5vYnNvbGV0ZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9tYWxsb2NhdHRyaWJ1dGUubTQgXAorCSQodG9wX3NyY2RpcikvbTQvcG9wdGNvbnN0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3ByZWNvbXBpbGVkaGVhZGVyLm00ICQodG9wX3NyY2RpcikvbTQvcXQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvcmVzdWx0eW4ubTQgJCh0b3Bfc3JjZGlyKS9tNC9zc3RyZWFtLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3R5cGVkZWYubTQgJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuaW4KK2FtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCisJJChBQ0xPQ0FMX000KQorbWtpbnN0YWxsZGlycyA9ICQoaW5zdGFsbF9zaCkgLWQKK0NPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvY29uZmlnLmgKK0NPTkZJR19DTEVBTl9GSUxFUyA9CitDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMgPQorTElCUkFSSUVTID0gJChub2luc3RfTElCUkFSSUVTKQorQVJGTEFHUyA9IGNydQorbGlicHBfYV9BUiA9ICQoQVIpICQoQVJGTEFHUykKK2xpYnBwX2FfTElCQUREID0KK2FtX2xpYnBwX2FfT0JKRUNUUyA9IGFycmFuZ2VfcHJvZmlsZXMuJChPQkpFWFQpIFwKKwljYWxsZ3JhcGhfY29udGFpbmVyLiQoT0JKRVhUKSBkaWZmX2NvbnRhaW5lci4kKE9CSkVYVCkgXAorCWZpbGVuYW1lX3NwZWMuJChPQkpFWFQpIGZvcm1hdF9vdXRwdXQuJChPQkpFWFQpIFwKKwlpbWFnZV9lcnJvcnMuJChPQkpFWFQpIGxvY2F0ZV9pbWFnZXMuJChPQkpFWFQpIFwKKwluYW1lX3N0b3JhZ2UuJChPQkpFWFQpIG9wX2hlYWRlci4kKE9CSkVYVCkgc3ltYm9sLiQoT0JKRVhUKSBcCisJcGFyc2VfZmlsZW5hbWUuJChPQkpFWFQpIHBvcHVsYXRlLiQoT0JKRVhUKSBwcm9maWxlLiQoT0JKRVhUKSBcCisJcHJvZmlsZV9jb250YWluZXIuJChPQkpFWFQpIHByb2ZpbGVfc3BlYy4kKE9CSkVYVCkgXAorCXNhbXBsZV9jb250YWluZXIuJChPQkpFWFQpIHN5bWJvbF9jb250YWluZXIuJChPQkpFWFQpIFwKKwlzeW1ib2xfZnVuY3RvcnMuJChPQkpFWFQpIHN5bWJvbF9zb3J0LiQoT0JKRVhUKSBcCisJeG1sX3V0aWxzLiQoT0JKRVhUKSBwb3B1bGF0ZV9mb3Jfc3B1LiQoT0JKRVhUKQorbGlicHBfYV9PQkpFQ1RTID0gJChhbV9saWJwcF9hX09CSkVDVFMpCitERUZBVUxUX0lOQ0xVREVTID0gLUkuQGFtX19pc3JjQCAtSSQodG9wX2J1aWxkZGlyKQorZGVwY29tcCA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvZGVwY29tcAorYW1fX2RlcGZpbGVzX21heWJlID0gZGVwZmlsZXMKK2FtX19tdiA9IG12IC1mCitDWFhDT01QSUxFID0gJChDWFgpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSBcCisJJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DWFhGTEFHUykgJChDWFhGTEFHUykKK0xUQ1hYQ09NUElMRSA9ICQoTElCVE9PTCkgLS10YWc9Q1hYICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgXAorCS0tbW9kZT1jb21waWxlICQoQ1hYKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgXAorCSQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ1hYRkxBR1MpICQoQ1hYRkxBR1MpCitDWFhMRCA9ICQoQ1hYKQorQ1hYTElOSyA9ICQoTElCVE9PTCkgLS10YWc9Q1hYICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgXAorCS0tbW9kZT1saW5rICQoQ1hYTEQpICQoQU1fQ1hYRkxBR1MpICQoQ1hYRkxBR1MpICQoQU1fTERGTEFHUykgXAorCSQoTERGTEFHUykgLW8gJEAKK0NPTVBJTEUgPSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgXAorCSQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKK0xUQ09NUElMRSA9ICQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSBcCisJLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpIFwKKwkkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpCitDQ0xEID0gJChDQykKK0xJTksgPSAkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgXAorCS0tbW9kZT1saW5rICQoQ0NMRCkgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAkKEFNX0xERkxBR1MpIFwKKwkkKExERkxBR1MpIC1vICRACitTT1VSQ0VTID0gJChsaWJwcF9hX1NPVVJDRVMpCitESVNUX1NPVVJDRVMgPSAkKGxpYnBwX2FfU09VUkNFUykKK0VUQUdTID0gZXRhZ3MKK0NUQUdTID0gY3RhZ3MKK0RJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCitBQ0xPQ0FMID0gQEFDTE9DQUxACitBTVRBUiA9IEBBTVRBUkAKK0FSID0gQEFSQAorQVVUT0NPTkYgPSBAQVVUT0NPTkZACitBVVRPSEVBREVSID0gQEFVVE9IRUFERVJACitBVVRPTUFLRSA9IEBBVVRPTUFLRUAKK0FXSyA9IEBBV0tACitCRkRfTElCUyA9IEBCRkRfTElCU0AKK0NBVF9FTlRSWV9FTkQgPSBAQ0FUX0VOVFJZX0VOREAKK0NBVF9FTlRSWV9TVEFSVCA9IEBDQVRfRU5UUllfU1RBUlRACitDQyA9IEBDQ0AKK0NDREVQTU9ERSA9IEBDQ0RFUE1PREVACitDRkxBR1MgPSBAQ0ZMQUdTQAorQ1BQID0gQENQUEAKK0NQUEZMQUdTID0gQENQUEZMQUdTQAorQ1hYID0gQENYWEAKK0NYWENQUCA9IEBDWFhDUFBACitDWFhERVBNT0RFID0gQENYWERFUE1PREVACitDWFhGTEFHUyA9IEBDWFhGTEFHU0AKK0NZR1BBVEhfVyA9IEBDWUdQQVRIX1dACitEQVRFID0gQERBVEVACitERUZTID0gQERFRlNACitERVBESVIgPSBAREVQRElSQAorRE9DQk9PS19ST09UID0gQERPQ0JPT0tfUk9PVEAKK0RTWU1VVElMID0gQERTWU1VVElMQAorRFVNUEJJTiA9IEBEVU1QQklOQAorRUNIT19DID0gQEVDSE9fQ0AKK0VDSE9fTiA9IEBFQ0hPX05ACitFQ0hPX1QgPSBARUNIT19UQAorRUdSRVAgPSBARUdSRVBACitFWEVFWFQgPSBARVhFRVhUQAorRVhUUkFfQ0ZMQUdTX01PRFVMRSA9IEBFWFRSQV9DRkxBR1NfTU9EVUxFQAorRkdSRVAgPSBARkdSRVBACitHUkVQID0gQEdSRVBACitJTlNUQUxMID0gQElOU1RBTExACitJTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAorSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKK0lOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAorSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKK0pBVkFfSE9NRURJUiA9IEBKQVZBX0hPTUVESVJACitLSU5DID0gQEtJTkNACitLU1JDID0gQEtTUkNACitLVkVSUyA9IEBLVkVSU0AKK0xEID0gQExEQAorTERGTEFHUyA9IEBMREZMQUdTQAorTElCRVJUWV9MSUJTID0gQExJQkVSVFlfTElCU0AKK0xJQk9CSlMgPSBATElCT0JKU0AKK0xJQlMgPSBATElCU0AKK0xJQlRPT0wgPSBATElCVE9PTEAKK0xJUE8gPSBATElQT0AKK0xOX1MgPSBATE5fU0AKK0xUTElCT0JKUyA9IEBMVExJQk9CSlNACitNQUtFSU5GTyA9IEBNQUtFSU5GT0AKK01LRElSX1AgPSBATUtESVJfUEAKK01PQyA9IEBNT0NACitNT0RJTlNUQUxMRElSID0gQE1PRElOU1RBTExESVJACitOTSA9IEBOTUAKK05NRURJVCA9IEBOTUVESVRACitPQkpEVU1QID0gQE9CSkRVTVBACitPQkpFWFQgPSBAT0JKRVhUQAorT1BST0ZJTEVfRElSID0gQE9QUk9GSUxFX0RJUkAKK09QUk9GSUxFX01PRFVMRV9BUkNIID0gQE9QUk9GSUxFX01PRFVMRV9BUkNIQAorT1BfQ0ZMQUdTID0gQE9QX0NGTEFHU0AKK09QX0NYWEZMQUdTID0gQE9QX0NYWEZMQUdTQAorT1BfRE9DRElSID0gQE9QX0RPQ0RJUkAKK09UT09MID0gQE9UT09MQAorT1RPT0w2NCA9IEBPVE9PTDY0QAorUEFDS0FHRSA9IEBQQUNLQUdFQAorUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACitQQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAorUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACitQQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAorUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACitQQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAorUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACitQS0dfQ09ORklHID0gQFBLR19DT05GSUdACitQS0dfQ09ORklHX0xJQkRJUiA9IEBQS0dfQ09ORklHX0xJQkRJUkAKK1BLR19DT05GSUdfUEFUSCA9IEBQS0dfQ09ORklHX1BBVEhACitQT1BUX0xJQlMgPSBAUE9QVF9MSUJTQAorUFRSRElGRl9UX1RZUEUgPSBAUFRSRElGRl9UX1RZUEVACitRVF9DRkxBR1MgPSBAUVRfQ0ZMQUdTQAorUVRfSU5DTFVERVMgPSBAUVRfSU5DTFVERVNACitRVF9MREZMQUdTID0gQFFUX0xERkxBR1NACitRVF9MSUIgPSBAUVRfTElCQAorUVRfTElCUyA9IEBRVF9MSUJTQAorUVRfVkVSU0lPTiA9IEBRVF9WRVJTSU9OQAorUkFOTElCID0gQFJBTkxJQkAKK1NFRCA9IEBTRURACitTRVRfTUFLRSA9IEBTRVRfTUFLRUAKK1NIRUxMID0gQFNIRUxMQAorU0laRV9UX1RZUEUgPSBAU0laRV9UX1RZUEVACitTVFJJUCA9IEBTVFJJUEAKK1VJQyA9IEBVSUNACitVSUNoZWxwID0gQFVJQ2hlbHBACitWRVJTSU9OID0gQFZFUlNJT05ACitYTUtNRiA9IEBYTUtNRkAKK1hNTF9DQVRBTE9HID0gQFhNTF9DQVRBTE9HQAorWFNMVFBST0MgPSBAWFNMVFBST0NACitYU0xUUFJPQ19GTEFHUyA9IEBYU0xUUFJPQ19GTEFHU0AKK1hfQ0ZMQUdTID0gQFhfQ0ZMQUdTQAorWF9FWFRSQV9MSUJTID0gQFhfRVhUUkFfTElCU0AKK1hfTElCUyA9IEBYX0xJQlNACitYX1BSRV9MSUJTID0gQFhfUFJFX0xJQlNACithYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAorYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAorYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAorYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACithY19jdF9DQyA9IEBhY19jdF9DQ0AKK2FjX2N0X0NYWCA9IEBhY19jdF9DWFhACithY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACithbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKK2FtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACithbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAorYW1fX3RhciA9IEBhbV9fdGFyQAorYW1fX3VudGFyID0gQGFtX191bnRhckAKK2JpbmRpciA9IEBiaW5kaXJACitidWlsZCA9IEBidWlsZEAKK2J1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAorYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKK2J1aWxkX29zID0gQGJ1aWxkX29zQAorYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKK2J1aWxkZGlyID0gQGJ1aWxkZGlyQAorZGF0YWRpciA9IEBkYXRhZGlyQAorZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACitkb2NkaXIgPSBAZG9jZGlyQAorZHZpZGlyID0gQGR2aWRpckAKK2V4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAoraG9zdCA9IEBob3N0QAoraG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAoraG9zdF9jcHUgPSBAaG9zdF9jcHVACitob3N0X29zID0gQGhvc3Rfb3NACitob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKK2h0bWxkaXIgPSBAaHRtbGRpckAKK2luY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKK2luZm9kaXIgPSBAaW5mb2RpckAKK2luc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKK2xpYmRpciA9IEBsaWJkaXJACitsaWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACitsb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAorbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAorbHRfRUNITyA9IEBsdF9FQ0hPQAorbWFuZGlyID0gQG1hbmRpckAKK21rZGlyX3AgPSBAbWtkaXJfcEAKK29sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKK3BkZmRpciA9IEBwZGZkaXJACitwcmVmaXggPSBAcHJlZml4QAorcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAorcHNkaXIgPSBAcHNkaXJACitzYmluZGlyID0gQHNiaW5kaXJACitzaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKK3NyY2RpciA9IEBzcmNkaXJACitzeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACit0YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAordG9wX2J1aWxkX3ByZWZpeCA9IEB0b3BfYnVpbGRfcHJlZml4QAordG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKK3RvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKK3RvcGRpciA9IEB0b3BkaXJACitBTV9DUFBGTEFHUyA9IFwKKwktSSAke3RvcF9zcmNkaXJ9L2xpYm9wIFwKKwktSSAke3RvcF9zcmNkaXJ9L2xpYnV0aWwgXAorCS1JICR7dG9wX3NyY2Rpcn0vbGliZGIgXAorCS1JICR7dG9wX3NyY2Rpcn0vbGlib3B0KysgXAorCS1JICR7dG9wX3NyY2Rpcn0vbGlidXRpbCsrIFwKKwktSSAke3RvcF9zcmNkaXJ9L2xpYm9wKysgXAorCS1JICR7dG9wX3NyY2Rpcn0vbGlicmVnZXgKKworQU1fQ1hYRkxBR1MgPSBAT1BfQ1hYRkxBR1NACitub2luc3RfTElCUkFSSUVTID0gbGlicHAuYQorbGlicHBfYV9TT1VSQ0VTID0gXAorCWFycmFuZ2VfcHJvZmlsZXMuY3BwIFwKKwlhcnJhbmdlX3Byb2ZpbGVzLmggXAorCWNhbGxncmFwaF9jb250YWluZXIuaCBcCisJY2FsbGdyYXBoX2NvbnRhaW5lci5jcHAgXAorCWRpZmZfY29udGFpbmVyLmNwcCBcCisJZGlmZl9jb250YWluZXIuaCBcCisJZmlsZW5hbWVfc3BlYy5jcHAgXAorCWZpbGVuYW1lX3NwZWMuaCBcCisJZm9ybWF0X2ZsYWdzLmggXAorCWZvcm1hdF9vdXRwdXQuY3BwIFwKKwlmb3JtYXRfb3V0cHV0LmggXAorCWltYWdlX2Vycm9ycy5oIFwKKwlpbWFnZV9lcnJvcnMuY3BwIFwKKwlsb2NhdGVfaW1hZ2VzLmNwcCBcCisJbG9jYXRlX2ltYWdlcy5oIFwKKwluYW1lX3N0b3JhZ2UuY3BwIFwKKwluYW1lX3N0b3JhZ2UuaCBcCisJb3BfaGVhZGVyLmNwcCBcCisJb3BfaGVhZGVyLmggXAorCXN5bWJvbC5jcHAgXAorCXN5bWJvbC5oIFwKKwlwYXJzZV9maWxlbmFtZS5jcHAgXAorCXBhcnNlX2ZpbGVuYW1lLmggXAorCXBvcHVsYXRlLmggXAorCXBvcHVsYXRlLmNwcCBcCisJcHJvZmlsZS5jcHAgXAorCXByb2ZpbGUuaCBcCisJcHJvZmlsZV9jb250YWluZXIuY3BwIFwKKwlwcm9maWxlX2NvbnRhaW5lci5oIFwKKwlwcm9maWxlX3NwZWMuY3BwIFwKKwlwcm9maWxlX3NwZWMuaCBcCisJc2FtcGxlX2NvbnRhaW5lci5jcHAgXAorCXNhbXBsZV9jb250YWluZXIuaCBcCisJc3ltYm9sX2NvbnRhaW5lci5jcHAgXAorCXN5bWJvbF9jb250YWluZXIuaCBcCisJc3ltYm9sX2Z1bmN0b3JzLmNwcCBcCisJc3ltYm9sX2Z1bmN0b3JzLmggXAorCXN5bWJvbF9zb3J0LmNwcCBcCisJc3ltYm9sX3NvcnQuaCBcCisJeG1sX3V0aWxzLmggXAorCXhtbF91dGlscy5jcHAgXAorCXBvcHVsYXRlX2Zvcl9zcHUuY3BwIFwKKwlwb3B1bGF0ZV9mb3Jfc3B1LmgKKworYWxsOiBhbGwtYW0KKworLlNVRkZJWEVTOgorLlNVRkZJWEVTOiAuY3BwIC5sbyAubyAub2JqCiskKHNyY2RpcikvTWFrZWZpbGUuaW46ICAkKHNyY2RpcikvTWFrZWZpbGUuYW0gICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCUBmb3IgZGVwIGluICQ/OyBkbyBcCisJICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKKwkgICAgKiQkZGVwKikgXAorCSAgICAgICggY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoICkgXAorCSAgICAgICAgJiYgeyBpZiB0ZXN0IC1mICRAOyB0aGVuIGV4aXQgMDsgZWxzZSBicmVhazsgZmk7IH07IFwKKwkgICAgICBleGl0IDE7OyBcCisJICBlc2FjOyBcCisJZG9uZTsgXAorCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZm9yZWlnbiBsaWJwcC9NYWtlZmlsZSc7IFwKKwkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCisJICAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gbGlicHAvTWFrZWZpbGUKKy5QUkVDSU9VUzogTWFrZWZpbGUKK01ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKKwlAY2FzZSAnJD8nIGluIFwKKwkgICpjb25maWcuc3RhdHVzKikgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCisJICAqKSBcCisJICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKKwllc2FjOworCiskKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKworJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6ICAkKGFtX19jb25maWd1cmVfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyQoQUNMT0NBTF9NNCk6ICAkKGFtX19hY2xvY2FsX200X2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCiskKGFtX19hY2xvY2FsX200X2RlcHMpOgorCitjbGVhbi1ub2luc3RMSUJSQVJJRVM6CisJLXRlc3QgLXogIiQobm9pbnN0X0xJQlJBUklFUykiIHx8IHJtIC1mICQobm9pbnN0X0xJQlJBUklFUykKK2xpYnBwLmE6ICQobGlicHBfYV9PQkpFQ1RTKSAkKGxpYnBwX2FfREVQRU5ERU5DSUVTKSAKKwktcm0gLWYgbGlicHAuYQorCSQobGlicHBfYV9BUikgbGlicHAuYSAkKGxpYnBwX2FfT0JKRUNUUykgJChsaWJwcF9hX0xJQkFERCkKKwkkKFJBTkxJQikgbGlicHAuYQorCittb3N0bHljbGVhbi1jb21waWxlOgorCS1ybSAtZiAqLiQoT0JKRVhUKQorCitkaXN0Y2xlYW4tY29tcGlsZToKKwktcm0gLWYgKi50YWIuYworCitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvYXJyYW5nZV9wcm9maWxlcy5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvY2FsbGdyYXBoX2NvbnRhaW5lci5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvZGlmZl9jb250YWluZXIuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2ZpbGVuYW1lX3NwZWMuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2Zvcm1hdF9vdXRwdXQuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2ltYWdlX2Vycm9ycy5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbG9jYXRlX2ltYWdlcy5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbmFtZV9zdG9yYWdlLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9vcF9oZWFkZXIuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3BhcnNlX2ZpbGVuYW1lLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9wb3B1bGF0ZS5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvcG9wdWxhdGVfZm9yX3NwdS5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvcHJvZmlsZS5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvcHJvZmlsZV9jb250YWluZXIuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3Byb2ZpbGVfc3BlYy5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvc2FtcGxlX2NvbnRhaW5lci5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvc3ltYm9sLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9zeW1ib2xfY29udGFpbmVyLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9zeW1ib2xfZnVuY3RvcnMuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3N5bWJvbF9zb3J0LlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS94bWxfdXRpbHMuUG9AYW1fX3F1b3RlQAorCisuY3BwLm86CitAYW1fX2Zhc3RkZXBDWFhfVFJVRUAJJChDWFhDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCAkPAorQGFtX19mYXN0ZGVwQ1hYX1RSVUVACSQoYW1fX212KSAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENYWF9GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENYWERFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAkkKENYWENPTVBJTEUpIC1jIC1vICRAICQ8CisKKy5jcHAub2JqOgorQGFtX19mYXN0ZGVwQ1hYX1RSVUVACSQoQ1hYQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYAorQGFtX19mYXN0ZGVwQ1hYX1RSVUVACSQoYW1fX212KSAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENYWF9GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENYWERFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAkkKENYWENPTVBJTEUpIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKKworLmNwcC5sbzoKK0BhbV9fZmFzdGRlcENYWF9UUlVFQAkkKExUQ1hYQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgJDwKK0BhbV9fZmFzdGRlcENYWF9UUlVFQAkkKGFtX19tdikgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENYWF9GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENYWERFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAkkKExUQ1hYQ09NUElMRSkgLWMgLW8gJEAgJDwKKworbW9zdGx5Y2xlYW4tbGlidG9vbDoKKwktcm0gLWYgKi5sbworCitjbGVhbi1saWJ0b29sOgorCS1ybSAtcmYgLmxpYnMgX2xpYnMKKworSUQ6ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKExJU1ApICQoVEFHU19GSUxFUykKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKwkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKwlta2lkIC1mSUQgJCR1bmlxdWUKK3RhZ3M6IFRBR1MKKworVEFHUzogICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAorCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKwlzZXQgeDsgXAorCWhlcmU9YHB3ZGA7IFwKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCisJICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCisJc2hpZnQ7IFwKKwlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCQqJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAorCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAorCSAgaWYgdGVzdCAkJCMgLWd0IDA7IHRoZW4gXAorCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCisJICAgICAgIiQkQCIgJCR1bmlxdWU7IFwKKwkgIGVsc2UgXAorCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCisJICAgICAgJCR1bmlxdWU7IFwKKwkgIGZpOyBcCisJZmkKK2N0YWdzOiBDVEFHUworQ1RBR1M6ICAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKKwkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHVuaXF1ZSIgXAorCSAgfHwgJChDVEFHUykgJChDVEFHU0ZMQUdTKSAkKEFNX0NUQUdTRkxBR1MpICQoQ1RBR1NfQVJHUykgXAorCSAgICAgJCR1bmlxdWUKKworR1RBR1M6CisJaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKKwkgICYmICQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpIFwKKwkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgIiQkaGVyZSIKKworZGlzdGNsZWFuLXRhZ3M6CisJLXJtIC1mIFRBR1MgSUQgR1RBR1MgR1JUQUdTIEdTWU1TIEdQQVRIIHRhZ3MKKworZGlzdGRpcjogJChESVNURklMRVMpCisJQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwlsaXN0PSckKERJU1RGSUxFUyknOyBcCisJICBkaXN0X2ZpbGVzPWBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRmaWxlOyBkb25lIHwgXAorCSAgc2VkIC1lICJzfF4kJHNyY2RpcnN0cmlwL3x8O3QiIFwKKwkgICAgICAtZSAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3w7dCJgOyBcCisJY2FzZSAkJGRpc3RfZmlsZXMgaW4gXAorCSAgKi8qKSAkKE1LRElSX1ApIGBlY2hvICIkJGRpc3RfZmlsZXMiIHwgXAorCQkJICAgc2VkICcvXC8vIWQ7c3xefCQoZGlzdGRpcikvfDtzLC9bXi9dKiQkLCwnIHwgXAorCQkJICAgc29ydCAtdWAgOzsgXAorCWVzYWM7IFwKKwlmb3IgZmlsZSBpbiAkJGRpc3RfZmlsZXM7IGRvIFwKKwkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKKwkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCisJICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCisJICAgIGlmIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRmaWxlIjsgdGhlbiBcCisJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisJICAgIGZpOyBcCisJICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAorCSAgICAgIGNwIC1mcFIgJChzcmNkaXIpLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKwkgICAgZmk7IFwKKwkgICAgY3AgLWZwUiAkJGQvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorCSAgZWxzZSBcCisJICAgIHRlc3QgLWYgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGV4aXQgMTsgXAorCSAgZmk7IFwKKwlkb25lCitjaGVjay1hbTogYWxsLWFtCitjaGVjazogY2hlY2stYW0KK2FsbC1hbTogTWFrZWZpbGUgJChMSUJSQVJJRVMpCitpbnN0YWxsZGlyczoKK2luc3RhbGw6IGluc3RhbGwtYW0KK2luc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLWFtCitpbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1hbQordW5pbnN0YWxsOiB1bmluc3RhbGwtYW0KKworaW5zdGFsbC1hbTogYWxsLWFtCisJQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KKworaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KK2luc3RhbGwtc3RyaXA6CisJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKKwkgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorCSAgYHRlc3QgLXogJyQoU1RSSVApJyB8fCBcCisJICAgIGVjaG8gIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciYCBpbnN0YWxsCittb3N0bHljbGVhbi1nZW5lcmljOgorCitjbGVhbi1nZW5lcmljOgorCitkaXN0Y2xlYW4tZ2VuZXJpYzoKKwktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKKwktdGVzdCAuID0gIiQoc3JjZGlyKSIgfHwgdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykKKworbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgorCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKKwlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCitjbGVhbjogY2xlYW4tYW0KKworY2xlYW4tYW06IGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBjbGVhbi1ub2luc3RMSUJSQVJJRVMgXAorCW1vc3RseWNsZWFuLWFtCisKK2Rpc3RjbGVhbjogZGlzdGNsZWFuLWFtCisJLXJtIC1yZiAuLyQoREVQRElSKQorCS1ybSAtZiBNYWtlZmlsZQorZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCisJZGlzdGNsZWFuLXRhZ3MKKworZHZpOiBkdmktYW0KKworZHZpLWFtOgorCitodG1sOiBodG1sLWFtCisKK2h0bWwtYW06CisKK2luZm86IGluZm8tYW0KKworaW5mby1hbToKKworaW5zdGFsbC1kYXRhLWFtOgorCitpbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktYW0KKworaW5zdGFsbC1kdmktYW06CisKK2luc3RhbGwtZXhlYy1hbToKKworaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KKworaW5zdGFsbC1odG1sLWFtOgorCitpbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQorCitpbnN0YWxsLWluZm8tYW06CisKK2luc3RhbGwtbWFuOgorCitpbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KKworaW5zdGFsbC1wZGYtYW06CisKK2luc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KKworaW5zdGFsbC1wcy1hbToKKworaW5zdGFsbGNoZWNrLWFtOgorCittYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCisJLXJtIC1yZiAuLyQoREVQRElSKQorCS1ybSAtZiBNYWtlZmlsZQorbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYworCittb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tYW0KKworbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCisJbW9zdGx5Y2xlYW4tbGlidG9vbAorCitwZGY6IHBkZi1hbQorCitwZGYtYW06CisKK3BzOiBwcy1hbQorCitwcy1hbToKKwordW5pbnN0YWxsLWFtOgorCisuTUFLRTogaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwCisKKy5QSE9OWTogQ1RBR1MgR1RBR1MgYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBjbGVhbi1nZW5lcmljIFwKKwljbGVhbi1saWJ0b29sIGNsZWFuLW5vaW5zdExJQlJBUklFUyBjdGFncyBkaXN0Y2xlYW4gXAorCWRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIGRpc3RjbGVhbi1saWJ0b29sIFwKKwlkaXN0Y2xlYW4tdGFncyBkaXN0ZGlyIGR2aSBkdmktYW0gaHRtbCBodG1sLWFtIGluZm8gaW5mby1hbSBcCisJaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgXAorCWluc3RhbGwtZHZpLWFtIGluc3RhbGwtZXhlYyBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1odG1sIFwKKwlpbnN0YWxsLWh0bWwtYW0gaW5zdGFsbC1pbmZvIGluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBcCisJaW5zdGFsbC1wZGYgaW5zdGFsbC1wZGYtYW0gaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIFwKKwlpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgXAorCW1haW50YWluZXItY2xlYW4gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIFwKKwltb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBcCisJcGRmIHBkZi1hbSBwcyBwcy1hbSB0YWdzIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0KKworCisjIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgorIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCisuTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9saWJwcC9hcnJhbmdlX3Byb2ZpbGVzLmNwcCBiL29wcm9maWxlLTAuOS43L2xpYnBwL2FycmFuZ2VfcHJvZmlsZXMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzZTdmZWIKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9saWJwcC9hcnJhbmdlX3Byb2ZpbGVzLmNwcApAQCAtMCwwICsxLDg2OCBAQAorLyoqCisgKiBAZmlsZSBhcnJhbmdlX3Byb2ZpbGVzLmNwcAorICogQ2xhc3NpZnkgYW5kIHByb2Nlc3MgYSBsaXN0IG9mIGNhbmRpZGF0ZSBzYW1wbGUgZmlsZXMKKyAqIGludG8gbWVyZ2VkIHNldHMgYW5kIGNsYXNzZXMuCisgKgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMyBPUHJvZmlsZSBhdXRob3JzCisgKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORworICoKKyAqIEBhdXRob3IgSm9obiBMZXZvbgorICovCisKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8Y3N0ZGxpYj4KKyNpbmNsdWRlIDxpb3N0cmVhbT4KKyNpbmNsdWRlIDxpdGVyYXRvcj4KKyNpbmNsdWRlIDxtYXA+CisjaW5jbHVkZSA8c2V0PgorCisjaW5jbHVkZSAic3RyaW5nX21hbmlwLmgiCisjaW5jbHVkZSAib3BfaGVhZGVyLmgiCisjaW5jbHVkZSAib3BfZXhjZXB0aW9uLmgiCisKKyNpbmNsdWRlICJhcnJhbmdlX3Byb2ZpbGVzLmgiCisjaW5jbHVkZSAiZm9ybWF0X291dHB1dC5oIgorI2luY2x1ZGUgInhtbF91dGlscy5oIgorI2luY2x1ZGUgInBhcnNlX2ZpbGVuYW1lLmgiCisjaW5jbHVkZSAibG9jYXRlX2ltYWdlcy5oIgorCit1c2luZyBuYW1lc3BhY2Ugc3RkOworCituYW1lc3BhY2UgeworCitpbnQgbnVtZXJpY19jb21wYXJlKHN0cmluZyBjb25zdCAmIGxocywgc3RyaW5nIGNvbnN0ICYgcmhzKQoreworCWlmIChsaHMgPT0gImFsbCIgJiYgcmhzID09ICJhbGwiKQorCQlyZXR1cm4gMDsKKwkvLyB3ZSBjaG9vc2UgYW4gb3JkZXIgYXJiaXRyYXJpbHkKKwlpZiAobGhzID09ICJhbGwiKQorCQlyZXR1cm4gMTsKKwlpZiAocmhzID09ICJhbGwiKQorCQlyZXR1cm4gLTE7CisJdW5zaWduZWQgaW50IGxoc3ZhbCA9IG9wX2xleGljYWxfY2FzdDx1bnNpZ25lZCBpbnQ+KGxocyk7CisJdW5zaWduZWQgaW50IHJoc3ZhbCA9IG9wX2xleGljYWxfY2FzdDx1bnNpZ25lZCBpbnQ+KHJocyk7CisJaWYgKGxoc3ZhbCA9PSByaHN2YWwpCisJCXJldHVybiAwOworCWlmIChsaHN2YWwgPCByaHN2YWwpCisJCXJldHVybiAtMTsKKwlyZXR1cm4gMTsKK30KKworCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKworCisvLyBnbG9iYWwgdG8gZml4IHNvbWUgQysrIG9ic2N1cmUgY29ybmVyIGNhc2UuCitib29sIG9wZXJhdG9yPChwcm9maWxlX2NsYXNzIGNvbnN0ICYgbGhzLAorICAgICAgICAgICAgICAgcHJvZmlsZV9jbGFzcyBjb25zdCAmIHJocykKK3sKKwlwcm9maWxlX3RlbXBsYXRlIGNvbnN0ICYgbHQgPSBsaHMucHRlbXBsYXRlOworCXByb2ZpbGVfdGVtcGxhdGUgY29uc3QgJiBydCA9IHJocy5wdGVtcGxhdGU7CisJaW50IGNvbXA7CisKKwkvLyBUaGUgcHJvZmlsZSBjbGFzc2VzIGFyZSB1c2VkIHRvIHRyYXZlcnNlIHRoZSBzYW1wbGUgZGF0YQorCS8vIGFycmF5cy4gIFdlIGNyZWF0ZSBYTUwgZWxlbWVudHMgZm9yIDxwcm9jZXNzPiBhbmQgPHRocmVhZD4KKwkvLyB0aGF0IGNvbnRhaW4gdGhlIHNhbXBsZSBkYXRhIHRoYXQgY2FuIHRoZW4gYmUgZGl2aWRlZCBhbW9uZ3N0CisJLy8gQ1BVLCBldmVudCwgbWFzayBheGVzIHNvIGl0IGlzIG1vcmUgY29udmVuaWVudCB0byBoYXZlIHRoZQorCS8vIHByb2Nlc3MgYW5kIHRocmVhZCBjbGFzc2VzIGJlIHRoZSBvdXRlcm1vc3QgbmVzdGluZyBsZXZlbCBvZgorCS8vIHRoZSBzYW1wbGUgZGF0YSBhcnJheXMKKwlpZiAoIXdhbnRfeG1sKSB7CisJCWNvbXAgPSBudW1lcmljX2NvbXBhcmUobHQuY3B1LCBydC5jcHUpOworCQlpZiAoY29tcCkKKwkJCXJldHVybiBjb21wIDwgMDsKKwl9CisKKwljb21wID0gbnVtZXJpY19jb21wYXJlKGx0LnRnaWQsIHJ0LnRnaWQpOworCWlmIChjb21wKQorCQlyZXR1cm4gY29tcCA8IDA7CisKKwljb21wID0gbnVtZXJpY19jb21wYXJlKGx0LnRpZCwgcnQudGlkKTsKKwlpZiAoY29tcCkKKwkJcmV0dXJuIGNvbXAgPCAwOworCisJY29tcCA9IG51bWVyaWNfY29tcGFyZShsdC51bml0bWFzaywgcnQudW5pdG1hc2spOworCWlmIChjb21wKQorCQlyZXR1cm4gY29tcCA8IDA7CisKKwlpZiAod2FudF94bWwpIHsKKwkJaWYgKGx0LmV2ZW50ICE9IHJ0LmV2ZW50KQorCQkJcmV0dXJuIGx0LmV2ZW50IDwgcnQuZXZlbnQ7CisJCWlmIChsdC5jb3VudCAhPSBydC5jb3VudCkKKwkJCXJldHVybiBsdC5jb3VudCA8IHJ0LmNvdW50OworCisJCXJldHVybiBudW1lcmljX2NvbXBhcmUobHQuY3B1LCBydC5jcHUpIDwgMDsKKwl9IGVsc2UgeworCQlpZiAobHQuZXZlbnQgPT0gcnQuZXZlbnQpCisJCQlyZXR1cm4gbHQuY291bnQgPCBydC5jb3VudDsKKwkJcmV0dXJuIGx0LmV2ZW50IDwgcnQuZXZlbnQ7CisJfQorfQorCituYW1lc3BhY2UgeworCitzdHJ1Y3QgYXhpc190IHsKKwlzdHJpbmcgbmFtZTsKKwlzdHJpbmcgc3VnZ2VzdGlvbjsKK30gYXhlc1tBWElTX01BWF0gPSB7CisJeyAiZXZlbnQiLCAic3BlY2lmeSBldmVudDosIGNvdW50OiBvciB1bml0bWFzazogKHNlZSBhbHNvIC0tbWVyZ2U9dW5pdG1hc2spIiB9LAorCXsgInRnaWQiLCAic3BlY2lmeSB0Z2lkOiBvciAtLW1lcmdlIHRnaWQiIH0sCisJeyAidGlkIiwgInNwZWNpZnkgdGlkOiBvciAtLW1lcmdlIHRpZCIgfSwKKwl7ICJjcHUiLCAic3BlY2lmeSBjcHU6IG9yIC0tbWVyZ2UgY3B1IiB9LAorfTsKKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKKworYm9vbCBwcm9maWxlX2NsYXNzZXM6Om1hdGNoZXMocHJvZmlsZV9jbGFzc2VzIGNvbnN0ICYgY2xhc3NlcykKK3sKKwlpZiAodi5zaXplKCkgIT0gY2xhc3Nlcy52LnNpemUoKSkKKwkJcmV0dXJuIGZhbHNlOworCisJYXhpc190eXBlcyBjb25zdCBheGlzMiA9IGNsYXNzZXMuYXhpczsKKworCXN3aXRjaCAoYXhpcykgeworCQljYXNlIEFYSVNfRVZFTlQ6CisJCQlicmVhazsKKwkJY2FzZSBBWElTX1RHSUQ6CisJCWNhc2UgQVhJU19USUQ6CisJCQlyZXR1cm4gYXhpczIgPT0gQVhJU19USUQgfHwgYXhpczIgPT0gQVhJU19UR0lEOworCQljYXNlIEFYSVNfQ1BVOgorCQkJcmV0dXJuIGF4aXMyID09IEFYSVNfQ1BVOworCQljYXNlIEFYSVNfTUFYOgorCQkJcmV0dXJuIGZhbHNlOworCX0KKworCS8vIGNoZWNrIHRoYXQgdGhlIGV2ZW50cyBtYXRjaCAoc2FtZSBldmVudCwgY291bnQpCisKKwl2ZWN0b3I8cHJvZmlsZV9jbGFzcz46OmNvbnN0X2l0ZXJhdG9yIGl0MSA9IHYuYmVnaW4oKTsKKwl2ZWN0b3I8cHJvZmlsZV9jbGFzcz46OmNvbnN0X2l0ZXJhdG9yIGVuZDEgPSB2LmVuZCgpOworCXZlY3Rvcjxwcm9maWxlX2NsYXNzPjo6Y29uc3RfaXRlcmF0b3IgaXQyID0gY2xhc3Nlcy52LmJlZ2luKCk7CisKKwl3aGlsZSAoaXQxICE9IGVuZDEpIHsKKwkJaWYgKGl0MS0+cHRlbXBsYXRlLmV2ZW50ICE9IGl0Mi0+cHRlbXBsYXRlLmV2ZW50KQorCQkJcmV0dXJuIGZhbHNlOworCQlpZiAoaXQxLT5wdGVtcGxhdGUuY291bnQgIT0gaXQyLT5wdGVtcGxhdGUuY291bnQpCisJCQlyZXR1cm4gZmFsc2U7CisJCS8vIGRpZmZlcmluZyB1bml0IG1hc2sgaXMgY29uc2lkZXJlZCBjb21wYXJhYmxlCisJCSsraXQxOworCQkrK2l0MjsKKwl9CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworbmFtZXNwYWNlIHsKKwordHlwZWRlZiBncm93YWJsZV92ZWN0b3I8c3RyaW5nPiBldmVudF9hcnJheV90OwordHlwZWRlZiBncm93YWJsZV92ZWN0b3I8c3RyaW5nPjo6c2l6ZV90eXBlIGV2ZW50X2luZGV4X3Q7CisKK2Jvb2wgbmV3X2V2ZW50X2luZGV4KHN0cmluZyBldmVudCwgZXZlbnRfYXJyYXlfdCAmIGV2ZW50cywgZXZlbnRfaW5kZXhfdCAmIGluZGV4KQoreworCWV2ZW50X2luZGV4X3Qgc3ogPSBldmVudHMuc2l6ZSgpOworCWZvciAoZXZlbnRfaW5kZXhfdCBpID0gMDsgaSAhPSBzejsgKytpKSB7CisJCWlmIChldmVudHNbaV0gPT0gZXZlbnQpIHsKKwkJCWluZGV4ID0gaTsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCX0KKworCWluZGV4ID0gc3o7CisJZXZlbnRzW3N6XSA9IGV2ZW50OworCXJldHVybiB0cnVlOworfQorCisKKy8vLyBXZSBoYXZlIG1vcmUgdGhhbiBvbmUgYXhpcyBvZiBjbGFzc2lmaWNhdGlvbiwgdGVsbCB0aGUgdXNlci4KK3ZvaWQgcmVwb3J0X2Vycm9yKHByb2ZpbGVfY2xhc3NlcyBjb25zdCAmIGNsYXNzZXMsIGF4aXNfdHlwZXMgbmV3YXhpcykKK3sKKwlzdHJpbmcgc3RyID0gIkFscmVhZHkgZGlzcGxheWluZyByZXN1bHRzIGZvciBwYXJhbWV0ZXIgIjsKKwlzdHIgKz0gYXhlc1tjbGFzc2VzLmF4aXNdLm5hbWU7CisJc3RyICs9ICIgd2l0aCB2YWx1ZXM6XG4iOworCXZlY3Rvcjxwcm9maWxlX2NsYXNzPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBjbGFzc2VzLnYuYmVnaW4oKTsKKwl2ZWN0b3I8cHJvZmlsZV9jbGFzcz46OmNvbnN0X2l0ZXJhdG9yIGNvbnN0IGVuZCA9IGNsYXNzZXMudi5lbmQoKTsKKworCS8vIFdlIHNob3cgZXJyb3IgZm9yIHRoZSBmaXJzdCBjb25mbGljdGluZyBheGlzIGJ1dCBvbiB0aGlzCisJLy8gYXhpcyB3ZSBjYW4gZ2V0IG9ubHkgYSBmZXcgZGlmZmVyZW50IGl0LT5uYW1lLCB3ZSBkaXNwbGF5IG9ubHkKKwkvLyB0aGVzZSBkaWZmZXJlbnQgbmFtZS4KKwlzZXQgPHN0cmluZz4gbmFtZV9zZWVuOworCXNpemVfdCBpID0gNTsKKwlmb3IgKDsgaXQgIT0gZW5kICYmIGk7ICsraXQpIHsKKwkJaWYgKG5hbWVfc2Vlbi5maW5kKGl0LT5uYW1lKSA9PSBuYW1lX3NlZW4uZW5kKCkpIHsKKwkJCW5hbWVfc2Vlbi5pbnNlcnQoaXQtPm5hbWUpOworCQkJc3RyICs9IGl0LT5uYW1lICsgIiwiOworCQkJLS1pOworCQl9CisJfQorCisJaWYgKCFpKSB7CisJCXN0ciArPSAiIGFuZCAiOworCQlzdHIgKz0gb3BfbGV4aWNhbF9jYXN0PHN0cmluZz4oY2xhc3Nlcy52LnNpemUoKSAtIDUpOworCQlzdHIgKz0gIiBtb3JlLCI7CisJfQorCisJc3RyICs9ICJcbndoaWNoIGNvbmZsaWN0cyB3aXRoIHBhcmFtZXRlciAiOworCXN0ciArPSBheGVzW25ld2F4aXNdLm5hbWUgKz0gIi5cbiI7CisJc3RyICs9ICJTdWdnZXN0aW9uOiAiOworCXN0ciArPSBheGVzW2NsYXNzZXMuYXhpc10uc3VnZ2VzdGlvbjsKKwl0aHJvdyBvcF9mYXRhbF9lcnJvcihzdHIpOworfQorCisKKy8qKgorICogY2hlY2sgdGhhdCB0d28gZGlmZmVyZW50IGF4ZXMgYXJlIE9LIC0gdGhpcyBpcyBvbmx5CisgKiBhbGxvd2VkIGlmIHRoZXkgYXJlIFRHSUQsVElEIGFuZCBmb3IgZWFjaCBjbGFzcywKKyAqIHRpZCA9PSB0Z2lkCisgKi8KK2Jvb2wgYWxsb3dfYXhlcyhwcm9maWxlX2NsYXNzZXMgY29uc3QgJiBjbGFzc2VzLCBheGlzX3R5cGVzIG5ld2F4aXMpCit7CisJLy8gTm8gcHJldmlvdXMgYXhpcyAtIE9LCisJaWYgKGNsYXNzZXMuYXhpcyA9PSBBWElTX01BWCkKKwkJcmV0dXJuIHRydWU7CisKKwlpZiAoY2xhc3Nlcy5heGlzICE9IEFYSVNfVElEICYmIGNsYXNzZXMuYXhpcyAhPSBBWElTX1RHSUQpCisJCXJldHVybiBmYWxzZTsKKworCWlmIChuZXdheGlzICE9IEFYSVNfVElEICYmIG5ld2F4aXMgIT0gQVhJU19UR0lEKQorCQlyZXR1cm4gZmFsc2U7CisKKwl2ZWN0b3I8cHJvZmlsZV9jbGFzcz46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gY2xhc3Nlcy52LmJlZ2luKCk7CisJdmVjdG9yPHByb2ZpbGVfY2xhc3M+Ojpjb25zdF9pdGVyYXRvciBjb25zdCBlbmQgPSBjbGFzc2VzLnYuZW5kKCk7CisKKwlmb3IgKDsgaXQgIT0gZW5kOyArK2l0KSB7CisJCWlmIChpdC0+cHRlbXBsYXRlLnRnaWQgIT0gaXQtPnB0ZW1wbGF0ZS50aWQpCisJCQlyZXR1cm4gZmFsc2U7CisJfQorCisJcmV0dXJuIHRydWU7Cit9CisKKworLy8vIGZpbmQgdGhlIGZpcnN0IHNhbXBsZSBmaWxlIGhlYWRlciBpbiB0aGUgY2xhc3MKK29wZF9oZWFkZXIgY29uc3QgZ2V0X2ZpcnN0X2hlYWRlcihwcm9maWxlX2NsYXNzIGNvbnN0ICYgcGNsYXNzKQoreworCXByb2ZpbGVfc2V0IGNvbnN0ICYgcHJvZmlsZSA9ICoocGNsYXNzLnByb2ZpbGVzLmJlZ2luKCkpOworCisJc3RyaW5nIGZpbGU7CisKKwkvLyBjb3VsZCBiZSBvbmx5IG9uZSBtYWluIGFwcCwgd2l0aCBubyBzYW1wbGVzIGZvciB0aGUgbWFpbiBpbWFnZQorCWlmIChwcm9maWxlLmZpbGVzLmVtcHR5KCkpIHsKKwkJcHJvZmlsZV9kZXBfc2V0IGNvbnN0ICYgZGVwID0gKihwcm9maWxlLmRlcHMuYmVnaW4oKSk7CisJCWxpc3Q8cHJvZmlsZV9zYW1wbGVfZmlsZXM+IGNvbnN0ICYgZmlsZXMgPSBkZXAuZmlsZXM7CisJCXByb2ZpbGVfc2FtcGxlX2ZpbGVzIGNvbnN0ICYgc2FtcGxlX2ZpbGVzID0gKihmaWxlcy5iZWdpbigpKTsKKwkJaWYgKCFzYW1wbGVfZmlsZXMuc2FtcGxlX2ZpbGVuYW1lLmVtcHR5KCkpCisJCQlmaWxlID0gc2FtcGxlX2ZpbGVzLnNhbXBsZV9maWxlbmFtZTsKKwkJZWxzZQorCQkJZmlsZSA9ICpzYW1wbGVfZmlsZXMuY2dfZmlsZXMuYmVnaW4oKTsKKwl9IGVsc2UgeworCQlwcm9maWxlX3NhbXBsZV9maWxlcyBjb25zdCAmIHNhbXBsZV9maWxlcyAKKwkJCT0gKihwcm9maWxlLmZpbGVzLmJlZ2luKCkpOworCQlpZiAoIXNhbXBsZV9maWxlcy5zYW1wbGVfZmlsZW5hbWUuZW1wdHkoKSkKKwkJCWZpbGUgPSBzYW1wbGVfZmlsZXMuc2FtcGxlX2ZpbGVuYW1lOworCQllbHNlCisJCQlmaWxlID0gKnNhbXBsZV9maWxlcy5jZ19maWxlcy5iZWdpbigpOworCX0KKworCXJldHVybiByZWFkX2hlYWRlcihmaWxlKTsKK30KKworLy8vIG1lcmdlIHNhbXBsZSBmaWxlIGhlYWRlciBpbiB0aGUgcHJvZmlsZV9zYW1wbGVfZmlsZXMKK3ZvaWQgbWVyZ2VfaGVhZGVyKHByb2ZpbGVfc2FtcGxlX2ZpbGVzIGNvbnN0ICYgZmlsZXMsIG9wZF9oZWFkZXIgJiBoZWFkZXIpCit7CisJaWYgKCFmaWxlcy5zYW1wbGVfZmlsZW5hbWUuZW1wdHkoKSkgeworCQlvcGRfaGVhZGVyIGNvbnN0IHRlbXAgPSByZWFkX2hlYWRlcihmaWxlcy5zYW1wbGVfZmlsZW5hbWUpOworCQloZWFkZXIuY3RyX3VtIHw9ICB0ZW1wLmN0cl91bTsKKwl9CisKKwlsaXN0PHN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gZmlsZXMuY2dfZmlsZXMuYmVnaW4oKTsKKwlsaXN0PHN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGNvbnN0IGVuZCA9IGZpbGVzLmNnX2ZpbGVzLmVuZCgpOworCWZvciAoIDsgaXQgIT0gZW5kOyArK2l0KSB7CisJCW9wZF9oZWFkZXIgY29uc3QgdGVtcCA9IHJlYWRfaGVhZGVyKCppdCk7CisJCWhlYWRlci5jdHJfdW0gfD0gdGVtcC5jdHJfdW07CisJfQorfQorCisvLy8gbWVyZ2Ugc2FtcGxlIGZpbGUgaGVhZGVyIGluIHRoZSBjbGFzcworb3BkX2hlYWRlciBjb25zdCBnZXRfaGVhZGVyKHByb2ZpbGVfY2xhc3MgY29uc3QgJiBwY2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVyZ2Vfb3B0aW9uIGNvbnN0ICYgbWVyZ2VfYnkpCit7CisJb3BkX2hlYWRlciBoZWFkZXIgPSBnZXRfZmlyc3RfaGVhZGVyKHBjbGFzcyk7CisKKwlpZiAoIW1lcmdlX2J5LnVuaXRtYXNrKQorCQlyZXR1cm4gaGVhZGVyOworCisJcHJvZmlsZV9zZXQgY29uc3QgJiBwcm9maWxlID0gKihwY2xhc3MucHJvZmlsZXMuYmVnaW4oKSk7CisKKwl0eXBlZGVmIGxpc3Q8cHJvZmlsZV9zYW1wbGVfZmlsZXM+Ojpjb25zdF9pdGVyYXRvciBjaXRlcmF0b3I7CisKKwljaXRlcmF0b3IgaXQgPSBwcm9maWxlLmZpbGVzLmJlZ2luKCk7CisJY2l0ZXJhdG9yIGNvbnN0IGVuZCA9IHByb2ZpbGUuZmlsZXMuZW5kKCk7CisJZm9yICggOyBpdCAhPSBlbmQ7ICsraXQpCisJCW1lcmdlX2hlYWRlcigqaXQsIGhlYWRlcik7CisKKwlsaXN0PHByb2ZpbGVfZGVwX3NldD46OmNvbnN0X2l0ZXJhdG9yIGRlcF9pdCA9IHByb2ZpbGUuZGVwcy5iZWdpbigpOworCWxpc3Q8cHJvZmlsZV9kZXBfc2V0Pjo6Y29uc3RfaXRlcmF0b3IgZGVwX2VuZCA9IHByb2ZpbGUuZGVwcy5lbmQoKTsKKwlmb3IgKCA7IGRlcF9pdCAhPSBkZXBfZW5kOyArK2RlcF9pdCkgeworCQljaXRlcmF0b3IgaXQgPSBkZXBfaXQtPmZpbGVzLmJlZ2luKCk7CisJCWNpdGVyYXRvciBjb25zdCBlbmQgPSBkZXBfaXQtPmZpbGVzLmVuZCgpOworCQlmb3IgKCA7IGl0ICE9IGVuZDsgKytpdCkKKwkJCW1lcmdlX2hlYWRlcigqaXQsIGhlYWRlcik7CisJfQorCisJcmV0dXJuIGhlYWRlcjsKK30KKworCisvLy8gR2l2ZSBodW1hbi1yZWFkYWJsZSBuYW1lcyB0byBlYWNoIGNsYXNzLgordm9pZCBuYW1lX2NsYXNzZXMocHJvZmlsZV9jbGFzc2VzICYgY2xhc3NlcywgbWVyZ2Vfb3B0aW9uIGNvbnN0ICYgbWVyZ2VfYnkpCit7CisJb3BkX2hlYWRlciBoZWFkZXIgPSBnZXRfaGVhZGVyKGNsYXNzZXMudlswXSwgbWVyZ2VfYnkpOworCisJY2xhc3Nlcy5ldmVudCA9IGRlc2NyaWJlX2hlYWRlcihoZWFkZXIpOworCWNsYXNzZXMuY3B1aW5mbyA9IGRlc2NyaWJlX2NwdShoZWFkZXIpOworCisJLy8gSWYgd2UncmUgc3BsaXR0aW5nIG9uIGV2ZW50IGFueXdheSwgY2xlYXIgb3V0IHRoZQorCS8vIGdsb2JhbCBldmVudCBuYW1lCisJaWYgKGNsYXNzZXMuYXhpcyA9PSBBWElTX0VWRU5UKQorCQljbGFzc2VzLmV2ZW50LmVyYXNlKCk7CisKKwl2ZWN0b3I8cHJvZmlsZV9jbGFzcz46Oml0ZXJhdG9yIGl0ID0gY2xhc3Nlcy52LmJlZ2luKCk7CisJdmVjdG9yPHByb2ZpbGVfY2xhc3M+OjppdGVyYXRvciBjb25zdCBlbmQgPSBjbGFzc2VzLnYuZW5kKCk7CisKKwlmb3IgKDsgaXQgIT0gZW5kOyArK2l0KSB7CisJCWl0LT5uYW1lID0gYXhlc1tjbGFzc2VzLmF4aXNdLm5hbWUgKyAiOiI7CisJCXN3aXRjaCAoY2xhc3Nlcy5heGlzKSB7CisJCWNhc2UgQVhJU19FVkVOVDoKKwkJCWl0LT5uYW1lID0gaXQtPnB0ZW1wbGF0ZS5ldmVudAorCQkJCSsgIjoiICsgaXQtPnB0ZW1wbGF0ZS5jb3VudDsKKwkJCWhlYWRlciA9IGdldF9oZWFkZXIoKml0LCBtZXJnZV9ieSk7CisJCQlpdC0+bG9uZ25hbWUgPSBkZXNjcmliZV9oZWFkZXIoaGVhZGVyKTsKKwkJCWJyZWFrOworCQljYXNlIEFYSVNfVEdJRDoKKwkJCWl0LT5uYW1lICs9IGl0LT5wdGVtcGxhdGUudGdpZDsKKwkJCWl0LT5sb25nbmFtZSA9ICJQcm9jZXNzZXMgd2l0aCBhIHRocmVhZCBncm91cCBJRCBvZiAiOworCQkJaXQtPmxvbmduYW1lICs9IGl0LT5wdGVtcGxhdGUudGdpZDsKKwkJCWJyZWFrOworCQljYXNlIEFYSVNfVElEOgorCQkJaXQtPm5hbWUgKz0gaXQtPnB0ZW1wbGF0ZS50aWQ7CisJCQlpdC0+bG9uZ25hbWUgPSAiUHJvY2Vzc2VzIHdpdGggYSB0aHJlYWQgSUQgb2YgIjsKKwkJCWl0LT5sb25nbmFtZSArPSBpdC0+cHRlbXBsYXRlLnRpZDsKKwkJCWJyZWFrOworCQljYXNlIEFYSVNfQ1BVOgorCQkJaXQtPm5hbWUgKz0gaXQtPnB0ZW1wbGF0ZS5jcHU7CisJCQlpdC0+bG9uZ25hbWUgPSAiU2FtcGxlcyBvbiBDUFUgIiArIGl0LT5wdGVtcGxhdGUuY3B1OworCQkJYnJlYWs7CisJCWNhc2UgQVhJU19NQVg6OworCQl9CisJfQorfQorCisKKy8qKgorICogTmFtZSBhbmQgdmVyaWZ5IGNsYXNzZXMuCisgKi8KK3ZvaWQgaWRlbnRpZnlfY2xhc3Nlcyhwcm9maWxlX2NsYXNzZXMgJiBjbGFzc2VzLAorICAgICAgICAgICAgICAgICAgICAgIG1lcmdlX29wdGlvbiBjb25zdCAmIG1lcmdlX2J5KQoreworCXByb2ZpbGVfdGVtcGxhdGUgJiBwdGVtcGxhdGUgPSBjbGFzc2VzLnZbMF0ucHRlbXBsYXRlOworCWJvb2wgY2hhbmdlZFtBWElTX01BWF0gPSB7IGZhbHNlLCB9OworCisJdmVjdG9yPHByb2ZpbGVfY2xhc3M+OjppdGVyYXRvciBpdCA9IGNsYXNzZXMudi5iZWdpbigpOworCSsraXQ7CisJdmVjdG9yPHByb2ZpbGVfY2xhc3M+OjppdGVyYXRvciBlbmQgPSBjbGFzc2VzLnYuZW5kKCk7CisKKwkvLyBvbmx5IG9uZSBjbGFzcywgbmFtZSBpdCBhZnRlciB0aGUgZXZlbnQKKwlpZiAoaXQgPT0gZW5kKQorCQljaGFuZ2VkW0FYSVNfRVZFTlRdID0gdHJ1ZTsKKworCWZvciAoOyBpdCAhPSBlbmQ7ICsraXQpIHsKKwkJaWYgKGl0LT5wdGVtcGxhdGUuZXZlbnQgIT0gcHRlbXBsYXRlLmV2ZW50CisJCSAgICB8fCAgaXQtPnB0ZW1wbGF0ZS5jb3VudCAhPSBwdGVtcGxhdGUuY291bnQKKwkJICAgIC8vIHVuaXQgbWFzayBhcmUgbWVyZ2VhYmxlCisJCSAgICB8fCAoIW1lcmdlX2J5LnVuaXRtYXNrCisJCQkmJiBpdC0+cHRlbXBsYXRlLnVuaXRtYXNrICE9IHB0ZW1wbGF0ZS51bml0bWFzaykpCisJCQljaGFuZ2VkW0FYSVNfRVZFTlRdID0gdHJ1ZTsKKworCQkvLyB3ZSBuZWVkIHRoZSBtZXJnZSBjaGVja3MgaGVyZSBiZWNhdXNlIGVhY2gKKwkJLy8gdGVtcGxhdGUgaXMgZmlsbGVkIGluIGZyb20gdGhlIGZpcnN0IG5vbgorCQkvLyBtYXRjaGluZyBwcm9maWxlLCBzbyBqdXN0IGJlY2F1c2UgdGhleSBkaWZmZXIKKwkJLy8gZG9lc24ndCBtZWFuIGl0J3MgdGhlIGF4aXMgd2UgY2FyZSBhYm91dAorCQlpZiAoIW1lcmdlX2J5LnRnaWQgJiYgaXQtPnB0ZW1wbGF0ZS50Z2lkICE9IHB0ZW1wbGF0ZS50Z2lkKQorCQkJY2hhbmdlZFtBWElTX1RHSURdID0gdHJ1ZTsKKworCQlpZiAoIW1lcmdlX2J5LnRpZCAmJiBpdC0+cHRlbXBsYXRlLnRpZCAhPSBwdGVtcGxhdGUudGlkKQorCQkJY2hhbmdlZFtBWElTX1RJRF0gPSB0cnVlOworCisJCWlmICghbWVyZ2VfYnkuY3B1ICYmIGl0LT5wdGVtcGxhdGUuY3B1ICE9IHB0ZW1wbGF0ZS5jcHUpCisJCQljaGFuZ2VkW0FYSVNfQ1BVXSA9IHRydWU7CisJfQorCisJY2xhc3Nlcy5heGlzID0gQVhJU19NQVg7CisKKwlmb3IgKHNpemVfdCBpID0gMDsgaSA8IEFYSVNfTUFYOyArK2kpIHsKKwkJaWYgKCFjaGFuZ2VkW2ldKQorCQkJY29udGludWU7CisKKwkJaWYgKCFhbGxvd19heGVzKGNsYXNzZXMsIGF4aXNfdHlwZXMoaSkpKQorCQkJcmVwb3J0X2Vycm9yKGNsYXNzZXMsIGF4aXNfdHlwZXMoaSkpOworCQljbGFzc2VzLmF4aXMgPSBheGlzX3R5cGVzKGkpOworCQkvKiBkbyB0aGlzIGVhcmx5IGZvciByZXBvcnRfZXJyb3IgKi8KKwkJbmFtZV9jbGFzc2VzKGNsYXNzZXMsIG1lcmdlX2J5KTsKKwl9CisKKwlpZiAoY2xhc3Nlcy5heGlzID09IEFYSVNfTUFYKSB7CisJCWNlcnIgPDwgIkludGVybmFsIGVycm9yIC0gbm8gZXF1aXZhbGVuY2UgY2xhc3MgYXhpcyIgPDwgZW5kbDsKKwkJYWJvcnQoKTsKKwl9Cit9CisKK3ZvaWQgaWRlbnRpZnlfeG1sX2NsYXNzZXMocHJvZmlsZV9jbGFzc2VzICYgY2xhc3NlcywgbWVyZ2Vfb3B0aW9uIGNvbnN0ICYgbWVyZ2VfYnkpCit7CisJb3BkX2hlYWRlciBoZWFkZXIgPSBnZXRfaGVhZGVyKGNsYXNzZXMudlswXSwgbWVyZ2VfYnkpOworCisJdmVjdG9yPHByb2ZpbGVfY2xhc3M+OjppdGVyYXRvciBpdCA9IGNsYXNzZXMudi5iZWdpbigpOworCXZlY3Rvcjxwcm9maWxlX2NsYXNzPjo6aXRlcmF0b3IgZW5kID0gY2xhc3Nlcy52LmVuZCgpOworCisJZXZlbnRfaW5kZXhfdCBldmVudF9udW07CisJZXZlbnRfaW5kZXhfdCBldmVudF9tYXggPSAwOworCWV2ZW50X2FycmF5X3QgZXZlbnRfYXJyYXk7CisJc2l6ZV90IG5yX2NwdXMgPSAwOworCWJvb2wgaGFzX25vbnplcm9fbWFzayA9IGZhbHNlOworCisJb3N0cmluZ3N0cmVhbSBldmVudF9zZXR1cDsKKworCS8vIGZpbGwgaW4gWE1MIGlkZW50aWZ5aW5nIGVhY2ggZXZlbnQsIGFuZCByZXBsYWNlIGV2ZW50IG5hbWUgYnkgZXZlbnRfbnVtCisJZm9yICg7IGl0ICE9IGVuZDsgKytpdCkgeworCQlzdHJpbmcgbWFzayA9IGl0LT5wdGVtcGxhdGUudW5pdG1hc2s7CisJCWlmIChtYXNrLmZpbmRfZmlyc3Rfb2YoIngxMjM0NTY3ODlhYmNkZWZBQkNERUYiKSAhPSBzdHJpbmc6Om5wb3MpCisJCQloYXNfbm9uemVyb19tYXNrID0gdHJ1ZTsKKwkJaWYgKG5ld19ldmVudF9pbmRleChpdC0+cHRlbXBsYXRlLmV2ZW50LCBldmVudF9hcnJheSwgZXZlbnRfbnVtKSkgeworCQkJLy8gcmVwbGFjZSBpdC0+cHRlbXBsYXRlLmV2ZW50IHdpdGggdGhlIGV2ZW50X251bSBzdHJpbmcKKwkJCS8vIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgd2UndmUgc2VlbiB0aGlzIGV2ZW50CisJCQloZWFkZXIgPSBnZXRfaGVhZGVyKCppdCwgbWVyZ2VfYnkpOworCQkJZXZlbnRfc2V0dXAgPDwgZGVzY3JpYmVfaGVhZGVyKGhlYWRlcik7CisJCQlldmVudF9tYXggPSBldmVudF9udW07CisJCX0KKwkJaWYgKGl0LT5wdGVtcGxhdGUuY3B1ICE9ICJhbGwiKSB7CisJCQlzaXplX3QgY3B1ID0gYXRvaShpdC0+cHRlbXBsYXRlLmNwdS5jX3N0cigpKTsKKwkJCWlmIChjcHUgPiBucl9jcHVzKSBucl9jcHVzID0gY3B1OworCQl9CisKKwkJb3N0cmluZ3N0cmVhbSBzdHI7CisJCXN0ciA8PCBldmVudF9udW07CisJCWl0LT5wdGVtcGxhdGUuZXZlbnQgPSBzdHIuc3RyKCk7CisJfQorCXhtbF91dGlsczo6c2V0X25yX2NwdXMoKytucl9jcHVzKTsKKwl4bWxfdXRpbHM6OnNldF9ucl9ldmVudHMoZXZlbnRfbWF4KzEpOworCWlmIChoYXNfbm9uemVyb19tYXNrKQorCQl4bWxfdXRpbHM6OnNldF9oYXNfbm9uemVyb19tYXNrcygpOworCWNsYXNzZXMuZXZlbnQgPSBldmVudF9zZXR1cC5zdHIoKTsKKwljbGFzc2VzLmNwdWluZm8gPSBkZXNjcmliZV9jcHUoaGVhZGVyKTsKK30KKworLy8vIGNvbnN0cnVjdCBhIGNsYXNzIHRlbXBsYXRlIGZyb20gYSBwcm9maWxlCitwcm9maWxlX3RlbXBsYXRlIGNvbnN0Cit0ZW1wbGF0ZV9mcm9tX3Byb2ZpbGUocGFyc2VkX2ZpbGVuYW1lIGNvbnN0ICYgcGFyc2VkLAorICAgICAgICAgICAgICAgICAgICAgIG1lcmdlX29wdGlvbiBjb25zdCAmIG1lcmdlX2J5KQoreworCXByb2ZpbGVfdGVtcGxhdGUgcHRlbXBsYXRlOworCisJcHRlbXBsYXRlLmV2ZW50ID0gcGFyc2VkLmV2ZW50OworCXB0ZW1wbGF0ZS5jb3VudCA9IHBhcnNlZC5jb3VudDsKKworCWlmICghbWVyZ2VfYnkudW5pdG1hc2spCisJCXB0ZW1wbGF0ZS51bml0bWFzayA9IHBhcnNlZC51bml0bWFzazsKKwlpZiAoIW1lcmdlX2J5LnRnaWQpCisJCXB0ZW1wbGF0ZS50Z2lkID0gcGFyc2VkLnRnaWQ7CisJaWYgKCFtZXJnZV9ieS50aWQpCisJCXB0ZW1wbGF0ZS50aWQgPSBwYXJzZWQudGlkOworCWlmICghbWVyZ2VfYnkuY3B1KQorCQlwdGVtcGxhdGUuY3B1ID0gcGFyc2VkLmNwdTsKKwlyZXR1cm4gcHRlbXBsYXRlOworfQorCisKKy8qKgorICogRmluZCBhIG1hdGNoaW5nIGNsYXNzIHRoZSBzYW1wbGUgZmlsZSBjb3VsZCBnbyBpbiwgb3IgZ2VuZXJhdGUKKyAqIGEgbmV3IGNsYXNzIGlmIG5lZWRlZC4KKyAqIFRoaXMgaXMgdGhlIGhlYXJ0IG9mIHRoZSBtZXJnaW5nIGFuZCBjbGFzc2lmaWNhdGlvbiBwcm9jZXNzLgorICogVGhlIHJldHVybmVkIHZhbHVlIGlzIG5vbi1jb25zdCByZWZlcmVuY2UgYnV0IHRoZSBwdGVtcGxhdGUgbWVtYmVyCisgKiBtdXN0IGJlIGNvbnNpZGVyZWQgYXMgY29uc3QKKyAqLworcHJvZmlsZV9jbGFzcyAmIGZpbmRfY2xhc3Moc2V0PHByb2ZpbGVfY2xhc3M+ICYgY2xhc3NlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlZF9maWxlbmFtZSBjb25zdCAmIHBhcnNlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lcmdlX29wdGlvbiBjb25zdCAmIG1lcmdlX2J5KQoreworCXByb2ZpbGVfY2xhc3MgY2xzOworCWNscy5wdGVtcGxhdGUgPSB0ZW1wbGF0ZV9mcm9tX3Byb2ZpbGUocGFyc2VkLCBtZXJnZV9ieSk7CisKKwlwYWlyPHNldDxwcm9maWxlX2NsYXNzPjo6aXRlcmF0b3IsIGJvb2w+IHJldCA9IGNsYXNzZXMuaW5zZXJ0KGNscyk7CisKKwlyZXR1cm4gY29uc3RfY2FzdDxwcm9maWxlX2NsYXNzICY+KCpyZXQuZmlyc3QpOworfQorCisvKioKKyAqIFNhbml0eSBjaGVjayA6IHdlIGNhbid0IG92ZXJ3cml0ZSBzYW1wbGVfZmlsZW5hbWUsIGlmIHdlIGFib3J0IGhlcmUgaXQgbWVhbnMKKyAqIHdlIGZhaWwgdG8gZGV0ZWN0IHRoYXQgcGFyc2VkIHNhbXBsZSBmaWxlbmFtZSBmb3IgdHdvIGRpc3RpbmN0IHNhbXBsZXMKKyAqIGZpbGVuYW1lIG11c3QgZ28gaW4gdHdvIGRpc3RpbmN0IHByb2ZpbGVfc2FtcGxlX2ZpbGVzLiBUaGlzIGFzc3VtcHRpb24gaXMKKyAqIGZhbHNlIGZvciBjYWxsZ3JhcGggc2FtcGxlcyBmaWxlcyBzbyB0aGlzIGZ1bmN0aW9uIGlzIG9ubHkgY2FsbGVkIGZvciBub24gY2cKKyAqIGZpbGVzLgorICovCit2b2lkIHNhbml0aXplX3Byb2ZpbGVfc2FtcGxlX2ZpbGVzKHByb2ZpbGVfc2FtcGxlX2ZpbGVzIGNvbnN0ICYgc2FtcGxlX2ZpbGVzLAorICAgIHBhcnNlZF9maWxlbmFtZSBjb25zdCAmIHBhcnNlZCkKK3sKKwkvLyBXZSBjYW4ndCBhbGxvdyB0byBvdmVyd3JpdGUgc2FtcGxlX2ZpbGVuYW1lLgorCWlmICghc2FtcGxlX2ZpbGVzLnNhbXBsZV9maWxlbmFtZS5lbXB0eSgpKSB7CisJCW9zdHJpbmdzdHJlYW0gb3V0OworCQlvdXQgPDwgInNhbml0aXplX3Byb2ZpbGVfc2FtcGxlX2ZpbGVzKCk6IHNhbXBsZSBmaWxlICIKKwkJICAgIDw8ICJwYXJzZWQgdHdpY2UgP1xuc2FtcGxlX2ZpbGVuYW1lOlxuIgorCQkgICAgPDwgc2FtcGxlX2ZpbGVzLnNhbXBsZV9maWxlbmFtZSA8PCBlbmRsCisJCSAgICA8PCBwYXJzZWQgPDwgZW5kbDsKKwkJdGhyb3cgb3BfZmF0YWxfZXJyb3Iob3V0LnN0cigpKTsKKwl9Cit9CisKKworLyoqCisgKiBBZGQgYSBzYW1wbGUgZmlsZW5hbWUgKGVpdGhlciBjZyBvciBub24gY2cgZmlsZXMpIHRvIHRoaXMgcHJvZmlsZS4KKyAqLwordm9pZAorYWRkX3RvX3Byb2ZpbGVfc2FtcGxlX2ZpbGVzKHByb2ZpbGVfc2FtcGxlX2ZpbGVzICYgc2FtcGxlX2ZpbGVzLAorICAgIHBhcnNlZF9maWxlbmFtZSBjb25zdCAmIHBhcnNlZCkKK3sKKwlpZiAocGFyc2VkLmNnX2ltYWdlLmVtcHR5KCkpIHsKKwkJLy8gV2UgY2FuJ3QgYWxsb3cgdG8gb3ZlcndyaXRlIHNhbXBsZV9maWxlbmFtZS4KKwkJc2FuaXRpemVfcHJvZmlsZV9zYW1wbGVfZmlsZXMoc2FtcGxlX2ZpbGVzLCBwYXJzZWQpOworCisJCXNhbXBsZV9maWxlcy5zYW1wbGVfZmlsZW5hbWUgPSBwYXJzZWQuZmlsZW5hbWU7CisJfSBlbHNlIHsKKwkJc2FtcGxlX2ZpbGVzLmNnX2ZpbGVzLnB1c2hfYmFjayhwYXJzZWQuZmlsZW5hbWUpOworCX0KK30KKworCisvKioKKyAqIHdlIG5lZWQgdG8gZml4IGNnIGZpbGVuYW1lOiBhIGNhbGxncmFwaCBmaWxlbmFtZSBjYW4gb2NjdXIgYmVmb3JlIHRoZSBiaW5hcnkKKyAqIG5vbiBjYWxsZ3JhcGggc2FtcGxlcyBmaWxlbmFtZSBvY2N1ciBzbyB3ZSBtdXN0IHNlYXJjaC4KKyAqLworcHJvZmlsZV9zYW1wbGVfZmlsZXMgJgorZmluZF9wcm9maWxlX3NhbXBsZV9maWxlcyhsaXN0PHByb2ZpbGVfc2FtcGxlX2ZpbGVzPiAmIGZpbGVzLAorCQkJICBwYXJzZWRfZmlsZW5hbWUgY29uc3QgJiBwYXJzZWQsCisJCQkgIGV4dHJhX2ltYWdlcyBjb25zdCAmIGV4dHJhKQoreworCWxpc3Q8cHJvZmlsZV9zYW1wbGVfZmlsZXM+OjppdGVyYXRvciBpdDsKKwlsaXN0PHByb2ZpbGVfc2FtcGxlX2ZpbGVzPjo6aXRlcmF0b3IgY29uc3QgZW5kID0gZmlsZXMuZW5kKCk7CisJZm9yIChpdCA9IGZpbGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworCQlpZiAoIWl0LT5zYW1wbGVfZmlsZW5hbWUuZW1wdHkoKSkgeworCQkJcGFyc2VkX2ZpbGVuYW1lIHBzYW1wbGVfZmlsZW5hbWUgPQorCQkJICBwYXJzZV9maWxlbmFtZShpdC0+c2FtcGxlX2ZpbGVuYW1lLCBleHRyYSk7CisJCQlpZiAocHNhbXBsZV9maWxlbmFtZS5saWJfaW1hZ2UgPT0gcGFyc2VkLmxpYl9pbWFnZSAmJgorCQkJICAgIHBzYW1wbGVfZmlsZW5hbWUuaW1hZ2UgPT0gcGFyc2VkLmltYWdlICYmCisJCQkgICAgcHNhbXBsZV9maWxlbmFtZS5wcm9maWxlX3NwZWNfZXF1YWwocGFyc2VkKSkKKwkJCQlyZXR1cm4gKml0OworCQl9CisKKwkJbGlzdDxzdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBjaXQ7CisJCWxpc3Q8c3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgY29uc3QgY2VuZCA9IGl0LT5jZ19maWxlcy5lbmQoKTsKKwkJZm9yIChjaXQgPSBpdC0+Y2dfZmlsZXMuYmVnaW4oKTsgY2l0ICE9IGNlbmQ7ICsrY2l0KSB7CisJCQlwYXJzZWRfZmlsZW5hbWUgcGNnX2ZpbGVuYW1lID0KKwkJCQlwYXJzZV9maWxlbmFtZSgqY2l0LCBleHRyYSk7CisJCQlpZiAocGNnX2ZpbGVuYW1lLmxpYl9pbWFnZSA9PSBwYXJzZWQubGliX2ltYWdlICYmCisJCQkgICAgcGNnX2ZpbGVuYW1lLmltYWdlID09IHBhcnNlZC5pbWFnZSAmJgorCQkJICAgIHBjZ19maWxlbmFtZS5wcm9maWxlX3NwZWNfZXF1YWwocGFyc2VkKSkKKwkJCQlyZXR1cm4gKml0OworCQl9CisJfQorCisJLy8gbm90IGZvdW5kLCBjcmVhdGUgYSBuZXcgb25lCisJZmlsZXMucHVzaF9iYWNrKHByb2ZpbGVfc2FtcGxlX2ZpbGVzKCkpOworCXJldHVybiBmaWxlcy5iYWNrKCk7Cit9CisKKworLyoqCisgKiBBZGQgYSBwcm9maWxlIHRvIHBhcnRpY3VsYXIgcHJvZmlsZSBzZXQuIElmIHRoZSBuZXcgcHJvZmlsZSBpcworICogYSBkZXBlbmRlbnQgaW1hZ2UsIGl0IGdldHMgYWRkZWQgdG8gdGhlIGRlcCBsaXN0LCBvciBqdXN0IHBsYWNlZAorICogb24gdGhlIG5vcm1hbCBsaXN0IG9mIHByb2ZpbGVzIG90aGVyd2lzZS4KKyAqLwordm9pZAorYWRkX3RvX3Byb2ZpbGVfc2V0KHByb2ZpbGVfc2V0ICYgc2V0LCBwYXJzZWRfZmlsZW5hbWUgY29uc3QgJiBwYXJzZWQsCisJCSAgIGJvb2wgbWVyZ2VfYnlfbGliLCBleHRyYV9pbWFnZXMgY29uc3QgJiBleHRyYSkKK3sKKwlpZiAocGFyc2VkLmltYWdlID09IHBhcnNlZC5saWJfaW1hZ2UgJiYgIW1lcmdlX2J5X2xpYikgeworCQlwcm9maWxlX3NhbXBsZV9maWxlcyAmIHNhbXBsZV9maWxlcyA9CisJCQlmaW5kX3Byb2ZpbGVfc2FtcGxlX2ZpbGVzKHNldC5maWxlcywgcGFyc2VkLCBleHRyYSk7CisJCWFkZF90b19wcm9maWxlX3NhbXBsZV9maWxlcyhzYW1wbGVfZmlsZXMsIHBhcnNlZCk7CisJCXJldHVybjsKKwl9CisKKwlsaXN0PHByb2ZpbGVfZGVwX3NldD46Oml0ZXJhdG9yIGl0ID0gc2V0LmRlcHMuYmVnaW4oKTsKKwlsaXN0PHByb2ZpbGVfZGVwX3NldD46Oml0ZXJhdG9yIGNvbnN0IGVuZCA9IHNldC5kZXBzLmVuZCgpOworCisJZm9yICg7IGl0ICE9IGVuZDsgKytpdCkgeworCQlpZiAoaXQtPmxpYl9pbWFnZSA9PSBwYXJzZWQubGliX2ltYWdlICYmICFtZXJnZV9ieV9saWIgJiYKKwkJCQlwYXJzZWQuaml0X2R1bXBmaWxlX2V4aXN0cyA9PSBmYWxzZSkgeworCQkJcHJvZmlsZV9zYW1wbGVfZmlsZXMgJiBzYW1wbGVfZmlsZXMgPQorCQkJCWZpbmRfcHJvZmlsZV9zYW1wbGVfZmlsZXMoaXQtPmZpbGVzLCBwYXJzZWQsCisJCQkJCQkJICBleHRyYSk7CisJCQlhZGRfdG9fcHJvZmlsZV9zYW1wbGVfZmlsZXMoc2FtcGxlX2ZpbGVzLCBwYXJzZWQpOworCQkJcmV0dXJuOworCQl9CisJfQorCisJcHJvZmlsZV9kZXBfc2V0IGRlcHNldDsKKwlkZXBzZXQubGliX2ltYWdlID0gcGFyc2VkLmxpYl9pbWFnZTsKKwlwcm9maWxlX3NhbXBsZV9maWxlcyAmIHNhbXBsZV9maWxlcyA9CisJCWZpbmRfcHJvZmlsZV9zYW1wbGVfZmlsZXMoZGVwc2V0LmZpbGVzLCBwYXJzZWQsIGV4dHJhKTsKKwlhZGRfdG9fcHJvZmlsZV9zYW1wbGVfZmlsZXMoc2FtcGxlX2ZpbGVzLCBwYXJzZWQpOworCXNldC5kZXBzLnB1c2hfYmFjayhkZXBzZXQpOworfQorCisKKy8qKgorICogQWRkIGEgcHJvZmlsZSB0byBhIHBhcnRpY3VsYXIgZXF1aXZhbGVuY2UgY2xhc3MuIFRoZSBwcmV2aW91cyBtYXRjaGluZworICogd2lsbCBoYXZlIGVuc3VyZWQgdGhlIHByb2ZpbGUgImZpdHMiLCBzbyBub3cgaXQncyBqdXN0IGEgbWF0dGVyIG9mCisgKiBmaW5kaW5nIHdoaWNoIHNhbXBsZSBmaWxlIGxpc3QgaXQgbmVlZHMgdG8gZ28gb24uCisgKi8KK3ZvaWQgYWRkX3Byb2ZpbGUocHJvZmlsZV9jbGFzcyAmIHBjbGFzcywgcGFyc2VkX2ZpbGVuYW1lIGNvbnN0ICYgcGFyc2VkLAorCQkgYm9vbCBtZXJnZV9ieV9saWIsIGV4dHJhX2ltYWdlcyBjb25zdCAmIGV4dHJhKQoreworCWxpc3Q8cHJvZmlsZV9zZXQ+OjppdGVyYXRvciBpdCA9IHBjbGFzcy5wcm9maWxlcy5iZWdpbigpOworCWxpc3Q8cHJvZmlsZV9zZXQ+OjppdGVyYXRvciBjb25zdCBlbmQgPSBwY2xhc3MucHJvZmlsZXMuZW5kKCk7CisKKwlmb3IgKDsgaXQgIT0gZW5kOyArK2l0KSB7CisJCWlmIChpdC0+aW1hZ2UgPT0gcGFyc2VkLmltYWdlKSB7CisJCQlhZGRfdG9fcHJvZmlsZV9zZXQoKml0LCBwYXJzZWQsIG1lcmdlX2J5X2xpYiwgZXh0cmEpOworCQkJcmV0dXJuOworCQl9CisJfQorCisJcHJvZmlsZV9zZXQgc2V0OworCXNldC5pbWFnZSA9IHBhcnNlZC5pbWFnZTsKKwlhZGRfdG9fcHJvZmlsZV9zZXQoc2V0LCBwYXJzZWQsIG1lcmdlX2J5X2xpYiwgZXh0cmEpOworCXBjbGFzcy5wcm9maWxlcy5wdXNoX2JhY2soc2V0KTsKK30KKworfSAgLy8gYW5vbiBuYW1lc3BhY2UKKworCitwcm9maWxlX2NsYXNzZXMgY29uc3QKK2FycmFuZ2VfcHJvZmlsZXMobGlzdDxzdHJpbmc+IGNvbnN0ICYgZmlsZXMsIG1lcmdlX29wdGlvbiBjb25zdCAmIG1lcmdlX2J5LAorCQkgZXh0cmFfaW1hZ2VzIGNvbnN0ICYgZXh0cmEpCit7CisJc2V0PHByb2ZpbGVfY2xhc3M+IHRlbXBfY2xhc3NlczsKKworCWxpc3Q8c3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBmaWxlcy5iZWdpbigpOworCWxpc3Q8c3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgY29uc3QgZW5kID0gZmlsZXMuZW5kKCk7CisKKwlmb3IgKDsgaXQgIT0gZW5kOyArK2l0KSB7CisJCXBhcnNlZF9maWxlbmFtZSBwYXJzZWQgPSBwYXJzZV9maWxlbmFtZSgqaXQsIGV4dHJhKTsKKworCQlpZiAocGFyc2VkLmxpYl9pbWFnZS5lbXB0eSgpKQorCQkJcGFyc2VkLmxpYl9pbWFnZSA9IHBhcnNlZC5pbWFnZTsKKworCQkvLyBUaGlzIHNpbXBsaWZpZXMgdGhlIGFkZCBvZiB0aGUgcHJvZmlsZSBsYXRlciwKKwkJLy8gaWYgd2UncmUgbGliLW1lcmdpbmcsIHRoZW4gdGhlIGFwcF9pbWFnZSBjYW5ub3QKKwkJLy8gbWF0dGVyLiBBZnRlciB0aGlzLCBhbnkgbm9uLWRlcGVuZGVudCBoYXMKKwkJLy8gaW1hZ2UgPT0gbGliX2ltYWdlCisJCWlmIChtZXJnZV9ieS5saWIpCisJCQlwYXJzZWQuaW1hZ2UgPSBwYXJzZWQubGliX2ltYWdlOworCisJCXByb2ZpbGVfY2xhc3MgJiBwY2xhc3MgPQorCQkJZmluZF9jbGFzcyh0ZW1wX2NsYXNzZXMsIHBhcnNlZCwgbWVyZ2VfYnkpOworCQlhZGRfcHJvZmlsZShwY2xhc3MsIHBhcnNlZCwgbWVyZ2VfYnkubGliLCBleHRyYSk7CisJfQorCisJcHJvZmlsZV9jbGFzc2VzIGNsYXNzZXM7CisJY29weSh0ZW1wX2NsYXNzZXMuYmVnaW4oKSwgdGVtcF9jbGFzc2VzLmVuZCgpLAorCSAgICAgYmFja19pbnNlcnRlcihjbGFzc2VzLnYpKTsKKworCWlmIChjbGFzc2VzLnYuZW1wdHkoKSkKKwkJcmV0dXJuIGNsYXNzZXM7CisKKwkvLyBzb3J0IGJ5IHRlbXBsYXRlIGZvciBuaWNlbHkgb3JkZXJlZCBjb2x1bW5zCisJc3RhYmxlX3NvcnQoY2xhc3Nlcy52LmJlZ2luKCksIGNsYXNzZXMudi5lbmQoKSk7CisKKwlpZiAod2FudF94bWwpCisJCWlkZW50aWZ5X3htbF9jbGFzc2VzKGNsYXNzZXMsIG1lcmdlX2J5KTsKKwllbHNlCisJCWlkZW50aWZ5X2NsYXNzZXMoY2xhc3NlcywgbWVyZ2VfYnkpOworCisJY2xhc3Nlcy5leHRyYV9mb3VuZF9pbWFnZXMgPSBleHRyYTsKKworCXJldHVybiBjbGFzc2VzOworfQorCisKK29zdHJlYW0gJiBvcGVyYXRvcjw8KG9zdHJlYW0gJiBvdXQsIHByb2ZpbGVfc2FtcGxlX2ZpbGVzIGNvbnN0ICYgc2FtcGxlX2ZpbGVzKQoreworCW91dCA8PCAic2FtcGxlX2ZpbGVuYW1lOiAiIDw8IHNhbXBsZV9maWxlcy5zYW1wbGVfZmlsZW5hbWUgPDwgZW5kbDsKKwlvdXQgPDwgImNhbGxncmFwaCBmaWxlbmFtZXM6XG4iOworCWNvcHkoc2FtcGxlX2ZpbGVzLmNnX2ZpbGVzLmJlZ2luKCksIHNhbXBsZV9maWxlcy5jZ19maWxlcy5lbmQoKSwKKwkgICAgIG9zdHJlYW1faXRlcmF0b3I8c3RyaW5nPihvdXQsICJcbiIpKTsKKwlyZXR1cm4gb3V0OworfQorCitvc3RyZWFtICYgb3BlcmF0b3I8PChvc3RyZWFtICYgb3V0LCBwcm9maWxlX2RlcF9zZXQgY29uc3QgJiBwZGVwX3NldCkKK3sKKwlvdXQgPDwgImxpYl9pbWFnZTogIiA8PCBwZGVwX3NldC5saWJfaW1hZ2UgPDwgZW5kbDsKKworCWxpc3Q8cHJvZmlsZV9zYW1wbGVfZmlsZXM+Ojpjb25zdF9pdGVyYXRvciBpdDsKKwlsaXN0PHByb2ZpbGVfc2FtcGxlX2ZpbGVzPjo6Y29uc3RfaXRlcmF0b3IgY29uc3QgZW5kID0KKwkJcGRlcF9zZXQuZmlsZXMuZW5kKCk7CisJc2l6ZV90IGkgPSAwOworCWZvciAoaXQgPSBwZGVwX3NldC5maWxlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisJCW91dCA8PCAicHJvZmlsZV9zYW1wbGVfZmlsZXMgIyIgPDwgaSsrIDw8ICI6XG4iIDw8ICppdDsKKworCXJldHVybiBvdXQ7Cit9CisKK29zdHJlYW0gJiBvcGVyYXRvcjw8KG9zdHJlYW0gJiBvdXQsIHByb2ZpbGVfc2V0IGNvbnN0ICYgcHNldCkKK3sKKwlvdXQgPDwgImltYWdlOiAiIDw8IHBzZXQuaW1hZ2UgPDwgZW5kbDsKKworCWxpc3Q8cHJvZmlsZV9zYW1wbGVfZmlsZXM+Ojpjb25zdF9pdGVyYXRvciBpdDsKKwlsaXN0PHByb2ZpbGVfc2FtcGxlX2ZpbGVzPjo6Y29uc3RfaXRlcmF0b3IgY29uc3QgZW5kID0KKwkJcHNldC5maWxlcy5lbmQoKTsKKwlzaXplX3QgaSA9IDA7CisJZm9yIChpdCA9IHBzZXQuZmlsZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorCQlvdXQgPDwgInByb2ZpbGVfc2FtcGxlX2ZpbGVzICMiIDw8IGkrKyA8PCAiOlxuIiA8PCAqaXQ7CisKKwlsaXN0PHByb2ZpbGVfZGVwX3NldD46OmNvbnN0X2l0ZXJhdG9yIGNpdDsKKwlsaXN0PHByb2ZpbGVfZGVwX3NldD46OmNvbnN0X2l0ZXJhdG9yIGNvbnN0IGNlbmQgPSBwc2V0LmRlcHMuZW5kKCk7CisJaSA9IDA7CisJZm9yIChjaXQgPSBwc2V0LmRlcHMuYmVnaW4oKTsgY2l0ICE9IGNlbmQ7ICsrY2l0KQorCQlvdXQgPDwgInByb2ZpbGVfZGVwX3NldCAjIiA8PCBpKysgPDwgIjpcbiIgPDwgKmNpdDsKKworCXJldHVybiBvdXQ7Cit9CisKK29zdHJlYW0gJiBvcGVyYXRvcjw8KG9zdHJlYW0gJiBvdXQsIHByb2ZpbGVfdGVtcGxhdGUgY29uc3QgJiBwdGVtcGxhdGUpCit7CisJb3V0IDw8ICJldmVudDogIiA8PCBwdGVtcGxhdGUuZXZlbnQgPDwgZW5kbAorCSAgICA8PCAiY291bnQ6ICIgPDwgcHRlbXBsYXRlLmNvdW50IDw8IGVuZGwKKwkgICAgPDwgInVuaXRtYXNrOiAiIDw8IHB0ZW1wbGF0ZS51bml0bWFzayA8PCBlbmRsCisJICAgIDw8ICJ0Z2lkOiAiIDw8IHB0ZW1wbGF0ZS50Z2lkIDw8IGVuZGwKKwkgICAgPDwgInRpZDogIiA8PCBwdGVtcGxhdGUudGlkIDw8IGVuZGwKKwkgICAgPDwgImNwdTogIiA8PCBwdGVtcGxhdGUuY3B1IDw8IGVuZGw7CisJcmV0dXJuIG91dDsKK30KKworb3N0cmVhbSAmIG9wZXJhdG9yPDwob3N0cmVhbSAmIG91dCwgcHJvZmlsZV9jbGFzcyBjb25zdCAmIHBjbGFzcykKK3sKKwlvdXQgPDwgIm5hbWU6ICIgPDwgcGNsYXNzLm5hbWUgPDwgZW5kbAorCSAgICA8PCAibG9uZ25hbWU6ICIgPDwgcGNsYXNzLmxvbmduYW1lIDw8IGVuZGwKKwkgICAgPDwgInB0ZW1wbGF0ZTpcbiIgPDwgcGNsYXNzLnB0ZW1wbGF0ZTsKKworCXNpemVfdCBpID0gMDsKKwlsaXN0PHByb2ZpbGVfc2V0Pjo6Y29uc3RfaXRlcmF0b3IgaXQ7CisJbGlzdDxwcm9maWxlX3NldD46OmNvbnN0X2l0ZXJhdG9yIGNvbnN0IGVuZCA9IHBjbGFzcy5wcm9maWxlcy5lbmQoKTsKKwlmb3IgKGl0ID0gcGNsYXNzLnByb2ZpbGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKwkJb3V0IDw8ICJwcm9maWxlc19zZXQgIyIgPDwgaSsrIDw8ICI6XG4iIDw8ICppdDsKKworCXJldHVybiBvdXQ7Cit9CisKK29zdHJlYW0gJiBvcGVyYXRvcjw8KG9zdHJlYW0gJiBvdXQsIHByb2ZpbGVfY2xhc3NlcyBjb25zdCAmIHBjbGFzc2VzKQoreworCW91dCA8PCAiZXZlbnQ6ICIgPDwgcGNsYXNzZXMuZXZlbnQgPDwgZW5kbAorCSAgICA8PCAiY3B1aW5mbzogIiA8PCBwY2xhc3Nlcy5jcHVpbmZvIDw8IGVuZGw7CisKKwlmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBjbGFzc2VzLnYuc2l6ZSgpOyArK2kpCisJCW91dCA8PCAiY2xhc3MgIyIgPDwgaSA8PCAiOlxuIiA8PCBwY2xhc3Nlcy52W2ldOworCisJcmV0dXJuIG91dDsKK30KKworCituYW1lc3BhY2UgeworCisvLy8gYWRkIHRoZSBmaWxlcyB0byBncm91cCBvZiBpbWFnZSBzZXRzCit2b2lkIGFkZF90b19ncm91cChpbWFnZV9ncm91cF9zZXQgJiBncm91cCwgc3RyaW5nIGNvbnN0ICYgYXBwX2ltYWdlLAorICAgICAgICAgICAgICAgICAgbGlzdDxwcm9maWxlX3NhbXBsZV9maWxlcz4gY29uc3QgJiBmaWxlcykKK3sKKwlpbWFnZV9zZXQgc2V0OworCXNldC5hcHBfaW1hZ2UgPSBhcHBfaW1hZ2U7CisJc2V0LmZpbGVzID0gZmlsZXM7CisJZ3JvdXAucHVzaF9iYWNrKHNldCk7Cit9CisKKwordHlwZWRlZiBtYXA8c3RyaW5nLCBpbnZlcnRlZF9wcm9maWxlPiBhcHBfbWFwX3Q7CisKKworaW52ZXJ0ZWRfcHJvZmlsZSAmCitnZXRfaXByb2ZpbGUoYXBwX21hcF90ICYgYXBwX21hcCwgc3RyaW5nIGNvbnN0ICYgaW1hZ2UsIHNpemVfdCBucl9jbGFzc2VzKQoreworCWFwcF9tYXBfdDo6aXRlcmF0b3IgYWl0ID0gYXBwX21hcC5maW5kKGltYWdlKTsKKwlpZiAoYWl0ICE9IGFwcF9tYXAuZW5kKCkpCisJCXJldHVybiBhaXQtPnNlY29uZDsKKworCWludmVydGVkX3Byb2ZpbGUgaXA7CisJaXAuaW1hZ2UgPSBpbWFnZTsKKwlpcC5ncm91cHMucmVzaXplKG5yX2NsYXNzZXMpOworCWFwcF9tYXBbaW1hZ2VdID0gaXA7CisJcmV0dXJuIGFwcF9tYXBbaW1hZ2VdOworfQorCisKKy8vLyBQdWxsIG91dCBhbGwgdGhlIGltYWdlcywgcmVtb3ZpbmcgYW55IHdlIGNhbid0IGFjY2Vzcy4KK3ZvaWQKK3ZlcmlmeV9hbmRfZmlsbChhcHBfbWFwX3QgJiBhcHBfbWFwLCBsaXN0PGludmVydGVkX3Byb2ZpbGU+ICYgcGxpc3QsCisJCWV4dHJhX2ltYWdlcyBjb25zdCAmIGV4dHJhKQoreworCWFwcF9tYXBfdDo6aXRlcmF0b3IgaXQgPSBhcHBfbWFwLmJlZ2luKCk7CisJYXBwX21hcF90OjppdGVyYXRvciBjb25zdCBlbmQgPSBhcHBfbWFwLmVuZCgpOworCisJZm9yICg7IGl0ICE9IGVuZDsgKytpdCkgeworCQlwbGlzdC5wdXNoX2JhY2soaXQtPnNlY29uZCk7CisJCWludmVydGVkX3Byb2ZpbGUgJiBpcCA9IHBsaXN0LmJhY2soKTsKKwkJZXh0cmEuZmluZF9pbWFnZV9wYXRoKGlwLmltYWdlLCBpcC5lcnJvciwgZmFsc2UpOworCX0KK30KKworfSAvLyBhbm9uIG5hbWVzcGFjZQorCisKK2xpc3Q8aW52ZXJ0ZWRfcHJvZmlsZT4gY29uc3QKK2ludmVydF9wcm9maWxlcyhwcm9maWxlX2NsYXNzZXMgY29uc3QgJiBjbGFzc2VzKQoreworCWFwcF9tYXBfdCBhcHBfbWFwOworCisJc2l6ZV90IG5yX2NsYXNzZXMgPSBjbGFzc2VzLnYuc2l6ZSgpOworCisJZm9yIChzaXplX3QgaSA9IDA7IGkgPCBucl9jbGFzc2VzOyArK2kpIHsKKwkJbGlzdDxwcm9maWxlX3NldD46OmNvbnN0X2l0ZXJhdG9yIHBpdAorCQkJPSBjbGFzc2VzLnZbaV0ucHJvZmlsZXMuYmVnaW4oKTsKKwkJbGlzdDxwcm9maWxlX3NldD46OmNvbnN0X2l0ZXJhdG9yIHBlbmQKKwkJCT0gY2xhc3Nlcy52W2ldLnByb2ZpbGVzLmVuZCgpOworCisJCWZvciAoOyBwaXQgIT0gcGVuZDsgKytwaXQpIHsKKwkJCS8vIGZpbGVzIGNhbiBiZSBlbXB0eSBpZiBzYW1wbGVzIGZvciBhIGxpYiBpbWFnZQorCQkJLy8gYnV0IG5vbmUgZm9yIHRoZSBtYWluIGltYWdlLiBEZWFsIHdpdGggaXQgaGVyZQorCQkJLy8gcmF0aGVyIHRoYW4gbGF0ZXIuCisJCQlpZiAocGl0LT5maWxlcy5zaXplKCkpIHsKKwkJCQlpbnZlcnRlZF9wcm9maWxlICYgaXAgPSBnZXRfaXByb2ZpbGUoYXBwX21hcCwKKwkJCQkJcGl0LT5pbWFnZSwgbnJfY2xhc3Nlcyk7CisJCQkJYWRkX3RvX2dyb3VwKGlwLmdyb3Vwc1tpXSwgcGl0LT5pbWFnZSwgcGl0LT5maWxlcyk7CisJCQl9CisKKwkJCWxpc3Q8cHJvZmlsZV9kZXBfc2V0Pjo6Y29uc3RfaXRlcmF0b3IgZGl0CisJCQkJPSBwaXQtPmRlcHMuYmVnaW4oKTsKKwkJCWxpc3Q8cHJvZmlsZV9kZXBfc2V0Pjo6Y29uc3RfaXRlcmF0b3IgY29uc3QgZGVuZAorCQkJCT0gcGl0LT5kZXBzLmVuZCgpOworCisJCQlmb3IgKDsgIGRpdCAhPSBkZW5kOyArK2RpdCkgeworCQkJCWludmVydGVkX3Byb2ZpbGUgJiBpcCA9IGdldF9pcHJvZmlsZShhcHBfbWFwLAorCQkJCQlkaXQtPmxpYl9pbWFnZSwgbnJfY2xhc3Nlcyk7CisJCQkJYWRkX3RvX2dyb3VwKGlwLmdyb3Vwc1tpXSwgcGl0LT5pbWFnZSwKKwkJCQkgICAgICAgICAgICAgZGl0LT5maWxlcyk7CisJCQl9CisJCX0KKwl9CisKKwlsaXN0PGludmVydGVkX3Byb2ZpbGU+IGludmVydGVkX2xpc3Q7CisKKwl2ZXJpZnlfYW5kX2ZpbGwoYXBwX21hcCwgaW52ZXJ0ZWRfbGlzdCwgY2xhc3Nlcy5leHRyYV9mb3VuZF9pbWFnZXMpOworCisJcmV0dXJuIGludmVydGVkX2xpc3Q7Cit9CmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9saWJwcC9hcnJhbmdlX3Byb2ZpbGVzLmggYi9vcHJvZmlsZS0wLjkuNy9saWJwcC9hcnJhbmdlX3Byb2ZpbGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODA1N2M2NwotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2xpYnBwL2FycmFuZ2VfcHJvZmlsZXMuaApAQCAtMCwwICsxLDI0NiBAQAorLyoqCisgKiBAZmlsZSBhcnJhbmdlX3Byb2ZpbGVzLmgKKyAqIENsYXNzaWZ5IGFuZCBwcm9jZXNzIGEgbGlzdCBvZiBjYW5kaWRhdGUgc2FtcGxlIGZpbGVzCisgKiBpbnRvIG1lcmdlZCBzZXRzIGFuZCBjbGFzc2VzLgorICoKKyAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDMgT1Byb2ZpbGUgYXV0aG9ycworICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKKyAqCisgKiBAYXV0aG9yIEpvaG4gTGV2b24KKyAqLworCisjaWZuZGVmIEFSUkFOR0VfUFJPRklMRVNfSAorI2RlZmluZSBBUlJBTkdFX1BST0ZJTEVTX0gKKworI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDxsaXN0PgorI2luY2x1ZGUgPHZlY3Rvcj4KKyNpbmNsdWRlIDxpb3Nmd2Q+CisKKyNpbmNsdWRlICJpbWFnZV9lcnJvcnMuaCIKKyNpbmNsdWRlICJsb2NhdGVfaW1hZ2VzLmgiCisKKy8qKgorICogc3RvcmUgbWVyZ2luZyBvcHRpb25zIG9wdGlvbnMgdXNlZCB0byBjbGFzc2lmeSBwcm9maWxlcworICovCitzdHJ1Y3QgbWVyZ2Vfb3B0aW9uIHsKKwlib29sIGNwdTsKKwlib29sIGxpYjsKKwlib29sIHRpZDsKKwlib29sIHRnaWQ7CisJYm9vbCB1bml0bWFzazsKK307CisKKworLyoqCisgKiBUaGlzIGRlc2NyaWJlcyB3aGljaCBwYXJhbWV0ZXJzIGFyZSBzZXQgZm9yIGVhY2gKKyAqIGVxdWl2YWxlbmNlIGNsYXNzLgorICovCitzdHJ1Y3QgcHJvZmlsZV90ZW1wbGF0ZSB7CisJc3RkOjpzdHJpbmcgZXZlbnQ7CisJc3RkOjpzdHJpbmcgY291bnQ7CisJc3RkOjpzdHJpbmcgdW5pdG1hc2s7CisJc3RkOjpzdHJpbmcgdGdpZDsKKwlzdGQ6OnN0cmluZyB0aWQ7CisJc3RkOjpzdHJpbmcgY3B1OworfTsKKworCisvKioKKyAqIEEgc2FtcGxlcyBmaWxlbmFtZSArIGl0cyBhc3NvY2lhdGVkIGNhbGxncmFwaCBzYW1wbGUgZmlsZW5hbWUuCisgKi8KK3N0cnVjdCBwcm9maWxlX3NhbXBsZV9maWxlcyB7CisJLyoqCisJICogVGhpcyBtZW1iZXIgY2FuIGJlIGVtcHR5IHNpbmNlIGl0IGlzIHBvc3NpYmxlIHRvIGdldCBjYWxsZ3JhcGgKKwkgKiB3L28gYW55IHNhbXBsZXMgdG8gdGhlIGJpbmFyeS4gZS5nIGFuIGFwcGxpY2F0aW9uIHdoaWNoIGRlZmVyIGFsbAorCSAqIHdvcmtzIHRvIHNoYXJlZCBsaWJyYXJ5IGJ1dCBpZiBhcnJhbmdlX3Byb2ZpbGVzIHJlY2VpdmUgYSBzYW1wbGUKKwkgKiBmaWxlIGxpc3QgZmlsdGVyZWQgZnJvbSBjZyBmaWxlIHNhbXBsZV9maWxlbmFtZSBjYW4ndCBiZSBlbXB0eQorCSAqLworCXN0ZDo6c3RyaW5nIHNhbXBsZV9maWxlbmFtZTsKKwkvKioKKwkgKiBMaXN0IG9mIGNhbGxncmFwaCBzYW1wbGUgZmlsZW5hbWUuIElmIHRoZSB7ZGVwfSBwYXJ0IG9mCisJICogY2dfZmlsZW5hbWUgIT0ge2NnfSBwYXJ0IGl0J3MgYSBjcm9zcyBiaW5hcnkgc2FtcGxlcyBmaWxlLgorCSAqLworCXN0ZDo6bGlzdDxzdGQ6OnN0cmluZz4gY2dfZmlsZXM7Cit9OworCisKKy8qKgorICogQSBudW1iZXIgb2YgcHJvZmlsZXMgZmlsZXMgdGhhdCBhcmUgYWxsIGRlcGVuZGVudCBvbgorICogdGhlIHNhbWUgbWFpbiAoYXBwbGljYXRpb24pIHByb2ZpbGUsIGZvciB0aGUgc2FtZQorICogZGVwZW5kZW50IGltYWdlLgorICovCitzdHJ1Y3QgcHJvZmlsZV9kZXBfc2V0IHsKKwkvLy8gd2hpY2ggZGVwZW5kZW50IGltYWdlIGlzIHRoaXMgc2V0IGZvcgorCXN0ZDo6c3RyaW5nIGxpYl9pbWFnZTsKKworCS8vLyB0aGUgYWN0dWFsIHNhbXBsZSBmaWxlcyBvcHRpb25uYWx5IGluY2x1ZGluZyBjYWxsZ3JhcGggc2FtcGxlIGZpbGVzCisJc3RkOjpsaXN0PHByb2ZpbGVfc2FtcGxlX2ZpbGVzPiBmaWxlczsKK307CisKKy8qKgorICogQSBudW1iZXIgb2YgcHJvZmlsZSBmaWxlcyBhbGwgZm9yIHRoZSBzYW1lIGJpbmFyeSB3aXRoIHRoZSBzYW1lCisgKiBwcm9maWxlIHNwZWNpZmljYXRpb24gKGFmdGVyIG1lcmdpbmcpLiBJbmNsdWRlcyB0aGUgc2V0IG9mIGRlcGVuZGVudAorICogcHJvZmlsZSBmaWxlcywgaWYgYW55LgorICoKKyAqIEZvciBleGFtcGxlLCB3ZSBjb3VsZCBoYXZlIGltYWdlID09ICIvYmluL2Jhc2giLCB3aGVyZSBmaWxlcworICogY29udGFpbnMgYWxsIHByb2ZpbGVzIGFnYWluc3QgL2Jpbi9iYXNoLCBhbmQgZGVwcyBjb250YWlucworICogdGhlIHNhbXBsZSBmaWxlIGxpc3QgZm9yIC9saWIvbGliYy5zbywgL2xpYi9sZC5zbyBldGMuCisgKi8KK3N0cnVjdCBwcm9maWxlX3NldCB7CisJc3RkOjpzdHJpbmcgaW1hZ2U7CisKKwkvLy8gdGhlIGFjdHVhbCBzYW1wbGUgZmlsZXMgZm9yIHRoZSBtYWluIGltYWdlIGFuZCB0aGUgYXNvY2lhdGVkCisJLy8vIGNhbGxncmFwaCBmaWxlcworCXN0ZDo6bGlzdDxwcm9maWxlX3NhbXBsZV9maWxlcz4gZmlsZXM7CisKKwkvLy8gYWxsIHByb2ZpbGUgZmlsZXMgZGVwZW5kZW50IG9uIHRoZSBtYWluIGltYWdlCisJc3RkOjpsaXN0PHByb2ZpbGVfZGVwX3NldD4gZGVwczsKK307CisKKworLyoqCisgKiBBIGNsYXNzIGNvbGxlY3Rpb24gb2YgcHJvZmlsZXMuIFRoaXMgaXMgYW4gZXF1aXZhbGVuY2UgY2xhc3MgYW5kCisgKiB3aWxsIGNvcnJlc3BvbmQgdG8gY29sdW1uYXIgb3V0cHV0IG9mIG9wcmVwb3J0LgorICovCitzdHJ1Y3QgcHJvZmlsZV9jbGFzcyB7CisJc3RkOjpsaXN0PHByb2ZpbGVfc2V0PiBwcm9maWxlczsKKworCS8vLyBodW1hbi1yZWFkYWJsZSBjb2x1bW4gbmFtZQorCXN0ZDo6c3RyaW5nIG5hbWU7CisKKwkvLy8gaHVtYW4tcmVhZGFibGUgbG9uZyBuYW1lCisJc3RkOjpzdHJpbmcgbG9uZ25hbWU7CisKKwkvLy8gbWVyZ2luZyBtYXRjaGVzIGFnYWluc3QgdGhpcworCXByb2ZpbGVfdGVtcGxhdGUgcHRlbXBsYXRlOworfTsKKworCisvKioKKyAqIFRoZSAiYXhpcyIgc2F5cyB3aGF0IHdlJ3ZlIHVzZWQgdG8gc3BsaXQgdGhlIHNhbXBsZQorICogZmlsZXMgaW50byB0aGUgY2xhc3Nlcy4gT25seSBvbmUgaXMgYWxsb3dlZC4KKyAqLworZW51bSBheGlzX3R5cGVzIHsKKwlBWElTX0VWRU5ULAorCUFYSVNfVEdJRCwKKwlBWElTX1RJRCwKKwlBWElTX0NQVSwKKwlBWElTX01BWAorfTsKKworCitzdHJ1Y3QgcHJvZmlsZV9jbGFzc2VzIHsKKwkvKioKKwkgKiBUaGlzIGlzIG9ubHkgc2V0IGlmIHdlJ3JlIG5vdCBjbGFzc2lmeWluZyBvbiBldmVudC9jb3VudAorCSAqIGFueXdheSAtIGlmIHdlJ3JlIGNsYXNzaWZ5aW5nIG9uIGV2ZW50L2NvdW50LCB0aGVuIHdlJ2xsCisJICogYWxyZWFkeSBvdXRwdXQgdGhlIGRldGFpbHMgb2YgZWFjaCBjbGFzcydzIGV2ZW50L2NvdW50LgorCSAqCisJICogSXQncyBvbmx5IHVzZWQgd2hlbiBjbGFzc2lmeWluZyBieSBDUFUsIHRnaWQgZXRjLiBzbyB0aGUKKwkgKiB1c2VyIGNhbiBzdGlsbCBzZWUgd2hhdCBwZXJmY3RyIGV2ZW50IHdhcyB1c2VkLgorCSAqLworCXN0ZDo6c3RyaW5nIGV2ZW50OworCisJLy8vIENQVSBpbmZvCisJc3RkOjpzdHJpbmcgY3B1aW5mbzsKKworCS8vLyB0aGUgYWN0dWFsIGNsYXNzZXMKKwlzdGQ6OnZlY3Rvcjxwcm9maWxlX2NsYXNzPiB2OworCisJLy8vIHRoZSBheGlzIG9mIHRoZSBjbGFzc2VzCisJYXhpc190eXBlcyBheGlzOworCisJLy8vIHRoZSBleHRyYSBpbWFnZXMgdG8gY29uc2lkZXIgZm9yIHRoaXMgcHJvZmlsZV9jbGFzc2VzCisJZXh0cmFfaW1hZ2VzIGV4dHJhX2ZvdW5kX2ltYWdlczsKKworCS8vLyBpcyB0aGlzIGNsYXNzIHNldCBjb21wYXJhYmxlIHdpdGggYW5vdGhlcj8KKwlib29sIG1hdGNoZXMocHJvZmlsZV9jbGFzc2VzIGNvbnN0ICYgY2xhc3Nlcyk7Cit9OworCisKK3N0ZDo6b3N0cmVhbSAmIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtICYsIHByb2ZpbGVfc2FtcGxlX2ZpbGVzIGNvbnN0ICYpOworc3RkOjpvc3RyZWFtICYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0gJiwgcHJvZmlsZV9kZXBfc2V0IGNvbnN0ICYpOworc3RkOjpvc3RyZWFtICYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0gJiwgcHJvZmlsZV9zZXQgY29uc3QgJik7CitzdGQ6Om9zdHJlYW0gJiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSAmLCBwcm9maWxlX3RlbXBsYXRlIGNvbnN0ICYpOworc3RkOjpvc3RyZWFtICYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0gJiwgcHJvZmlsZV9jbGFzcyBjb25zdCAmKTsKK3N0ZDo6b3N0cmVhbSAmIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtICYsIHByb2ZpbGVfY2xhc3NlcyBjb25zdCAmKTsKKworCisvKioKKyAqIFRha2UgYSBsaXN0IG9mIHNhbXBsZSBmaWxlbmFtZXMsIGFuZCBwcm9jZXNzIHRoZW0gaW50byBhIHNldCBvZgorICogY2xhc3NlcyBjb250YWluaW5nIHByb2ZpbGVfc2V0cy4gTWVyZ2luZyBpcyBkb25lIGF0IHRoaXMgc3RhZ2UKKyAqIGFzIHdlbGwgYXMgYXR0YWNoaW5nIGRlcGVuZGVudCBwcm9maWxlcyB0byB0aGUgbWFpbiBpbWFnZS4KKyAqCisgKiBUaGUgY2xhc3NlcyBjb3JyZXNwb25kIHRvIHRoZSBjb2x1bW5zIHlvdSdsbCBnZXQgaW4gb3ByZXBvcnQ6CisgKiB0aGlzIGNhbiBiZSBhIG51bWJlciBvZiBldmVudHMsIG9yIGRpZmZlcmVudCBDUFVzLCBldGMuCisgKi8KK3Byb2ZpbGVfY2xhc3NlcyBjb25zdAorYXJyYW5nZV9wcm9maWxlcyhzdGQ6Omxpc3Q8c3RkOjpzdHJpbmc+IGNvbnN0ICYgZmlsZXMsCisJCSBtZXJnZV9vcHRpb24gY29uc3QgJiBtZXJnZV9ieSwgZXh0cmFfaW1hZ2VzIGNvbnN0ICYgZXh0cmEpOworCisKKy8qKgorICogQSBzZXQgb2Ygc2FtcGxlIGZpbGVzIHdoZXJlIHRoZSBpbWFnZSBiaW5hcnkgdG8gb3BlbgorICogYXJlIGFsbCB0aGUgc2FtZS4KKyAqLworc3RydWN0IGltYWdlX3NldCB7CisJLy8vIHRoaXMgaXMgbWFpbiBhcHAgaW1hZ2UsICpub3QqIG5lY2Vzc2FyaWx5CisJLy8vIHRoZSBvbmUgd2UgbmVlZCB0byBvcGVuCisJc3RkOjpzdHJpbmcgYXBwX2ltYWdlOworCisJLy8vIHRoZSBzYW1wbGUgZmlsZXMKKwlzdGQ6Omxpc3Q8cHJvZmlsZV9zYW1wbGVfZmlsZXM+IGZpbGVzOworfTsKKwordHlwZWRlZiBzdGQ6Omxpc3Q8aW1hZ2Vfc2V0PiBpbWFnZV9ncm91cF9zZXQ7CisKKy8qKgorICogQWxsIHNhbXBsZSBmaWxlcyB3aGVyZSB0aGUgYmluYXJ5IGltYWdlIHRvIG9wZW4gaXMKKyAqIHRoZSBzYW1lLgorICoKKyAqIFRoaXMgaXMgdGhlICJpbnZlcnNlIiB0byBzb21lIGRlZ3JlZSBvZiBwcm9maWxlX3NldC4KKyAqIEZvciBleGFtcGxlLCBoZXJlIHdlIG1pZ2h0IGhhdmUgaW1hZ2UgPSAiL2xpYi9saWJjLnNvIiwKKyAqIHdpdGggZ3JvdXBzIGJlaW5nIHRoZSBwcm9maWxlIGNsYXNzaWZpY2F0aW9ucworICogdGdpZDo0MDQsIHRnaWQ6MzAxLCBldGMuCisgKgorICogV2l0aGluIGVhY2ggZ3JvdXAgdGhlcmUncyBhIG51bWJlciBvZiBpbWFnZV9zZXRzLgorICogQWxsIHRoZSBzYW1wbGUgZmlsZXMgbGlzdGVkIHdpdGhpbiB0aGUgaW1hZ2Vfc2V0cworICogYXJlIHN0aWxsIGZvciAvbGliL2xpYmMuc28sIGJ1dCB0aGV5IG1heSBoYXZlCisgKiBkaWZmZXJlbnQgYXBwX2ltYWdlIHZhbHVlcywgZS5nLiAvYmluL2Jhc2guCisgKiBXZSBuZWVkIHRvIGtlZXAgdHJhY2sgb2YgdGhlIGFwcF9pbWFnZSB2YWx1ZXMgdG8KKyAqIG1ha2Ugb3ByZXBvcnQgZ2l2ZSB0aGUgcmlnaHQgaW5mbyBpbiB0aGUgImFwcCIKKyAqIGNvbHVtbi4KKyAqLworc3RydWN0IGludmVydGVkX3Byb2ZpbGUgeworCWludmVydGVkX3Byb2ZpbGUoKSA6IGVycm9yKGltYWdlX29rKSB7fQorCS8vLyB0aGUgaW1hZ2UgdG8gb3BlbgorCXN0ZDo6c3RyaW5nIGltYWdlOworCisJLy8vIGFuIGVycm9yIGZvdW5kIGluIHJlYWRpbmcgdGhlIGltYWdlCisJbXV0YWJsZSBpbWFnZV9lcnJvciBlcnJvcjsKKworCS8vLyBhbGwgc2FtcGxlIGZpbGVzIHdpdGggZGF0YSBmb3IgdGhlIGFib3ZlIGltYWdlCisJc3RkOjp2ZWN0b3I8aW1hZ2VfZ3JvdXBfc2V0PiBncm91cHM7Cit9OworCisKKy8qKgorICogSW52ZXJ0IHRoZSBwcm9maWxlIHNldC4gRm9yIG9wcmVwb3J0IC1sLCBvcGFubm90YXRlIGV0Yy4sCisgKiBwcm9jZXNzaW5nIHRoZSBwcm9maWxlX2NsYXNzZXMgZGlyZWN0bHkgaXMgc2xvdywgYmVjYXVzZQorICogd2UgZW5kIHVwIG9wZW5pbmcgQkZEcyBtdWx0aXBsZSB0aW1lcyAoZm9yIGVhY2ggY2xhc3MsCisgKiBkZXBlbmRlbnQgaW1hZ2VzIGV0Yy4pLiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYW4gaW52ZXJ0ZWQKKyAqIHNldCBvZiBzYW1wbGUgZmlsZXMsIHdoZXJlIHRoZSBwcmltYXJ5IHNvcnQgaXMgb24gdGhlIGJpbmFyeQorICogaW1hZ2UgdG8gb3Blbi4KKyAqCisgKiBUaHVzIGVhY2ggZWxlbWVudCBpbiB0aGUgcmV0dXJuZWQgbGlzdCBpcyBmb3IgZXhhY3RseSBvbmUKKyAqIGJpbmFyeSBmaWxlIHRoYXQgd2UncmUgZ29pbmcgdG8gYmZkX29wZW5yKCkuIEF0dGFjaGVkIHRvIHRoYXQKKyAqIGlzIHRoZSBhY3R1YWwgc2FtcGxlIGZpbGVzIHdlIG5lZWQgdG8gcHJvY2VzcyBmb3IgdGhhdCBiaW5hcnkKKyAqIGZpbGUuIEluIG9yZGVyIHRvIGdldCB0aGUgb3V0cHV0IHJpZ2h0LCB0aGVzZSBoYXZlIHRvIGJlCisgKiBtYXJrZWQgd2l0aCB0aGUgcHJvZmlsZSBjbGFzcyB0aGV5J3JlIGZyb20gKGhlbmNlIHRoZSBncm91cHMKKyAqIHZlY3RvciksIGFuZCB0aGUgYXBwIGltYWdlIHRoYXQgb3duZWQgdGhlIHNhbXBsZSBmaWxlLCBpZgorICogYXBwbGljYWJsZSAoaGVuY2UgaW1hZ2Vfc2V0KS4KKyAqLworc3RkOjpsaXN0PGludmVydGVkX3Byb2ZpbGU+IGNvbnN0CitpbnZlcnRfcHJvZmlsZXMocHJvZmlsZV9jbGFzc2VzIGNvbnN0ICYgY2xhc3Nlcyk7CisKKyNlbmRpZiAvKiAhQVJSQU5HRV9QUk9GSUxFU19IICovCmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9saWJwcC9jYWxsZ3JhcGhfY29udGFpbmVyLmNwcCBiL29wcm9maWxlLTAuOS43L2xpYnBwL2NhbGxncmFwaF9jb250YWluZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkNDJlZTQKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9saWJwcC9jYWxsZ3JhcGhfY29udGFpbmVyLmNwcApAQCAtMCwwICsxLDYwNiBAQAorLyoqCisgKiBAZmlsZSBjYWxsZ3JhcGhfY29udGFpbmVyLmNwcAorICogQ29udGFpbmVyIGFzc29jaWF0aW5nIHN5bWJvbHMgYW5kIGNhbGxlci9jYWxsZXIgc3ltYm9scworICoKKyAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDQgT1Byb2ZpbGUgYXV0aG9ycworICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKKyAqCisgKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKKyAqIEBhdXRob3IgSm9obiBMZXZvbgorICovCisKKyNpbmNsdWRlIDxjc3RkbGliPgorCisjaW5jbHVkZSA8bWFwPgorI2luY2x1ZGUgPHNldD4KKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8aXRlcmF0b3I+CisjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPGlvc3RyZWFtPgorI2luY2x1ZGUgPG51bWVyaWM+CisKKyNpbmNsdWRlICJjYWxsZ3JhcGhfY29udGFpbmVyLmgiCisjaW5jbHVkZSAiY3ZlcmIuaCIKKyNpbmNsdWRlICJwYXJzZV9maWxlbmFtZS5oIgorI2luY2x1ZGUgInByb2ZpbGVfY29udGFpbmVyLmgiCisjaW5jbHVkZSAiYXJyYW5nZV9wcm9maWxlcy5oIiAKKyNpbmNsdWRlICJwb3B1bGF0ZS5oIgorI2luY2x1ZGUgInN0cmluZ19maWx0ZXIuaCIKKyNpbmNsdWRlICJvcF9iZmQuaCIKKyNpbmNsdWRlICJvcF9zYW1wbGVfZmlsZS5oIgorI2luY2x1ZGUgImxvY2F0ZV9pbWFnZXMuaCIKKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKworbmFtZXNwYWNlIHsKKworYm9vbCBvcGVyYXRvcj09KGNnX3N5bWJvbCBjb25zdCAmIGxocywgY2dfc3ltYm9sIGNvbnN0ICYgcmhzKQoreworCWxlc3Nfc3ltYm9sIGNtcF9zeW1iOworCXJldHVybiAhY21wX3N5bWIobGhzLCByaHMpICYmICFjbXBfc3ltYihyaHMsIGxocyk7Cit9CisKKworLy8gd2Ugc3RvcmUge2NhbGxlcixjYWxsZWV9IGluc2lkZSBhIHNpbmdsZSB1NjQKK29kYl9rZXlfdCBjYWxsZXJfdG9fa2V5KHUzMiB2YWx1ZSkKK3sKKwlyZXR1cm4gb2RiX2tleV90KHZhbHVlKSA8PCAzMjsKK30KKworCit1MzIga2V5X3RvX2NhbGxlZShvZGJfa2V5X3Qga2V5KQoreworCXJldHVybiBrZXkgJiAweGZmZmZmZmZmOworfQorCisKK2Jvb2wgY29tcGFyZV9ieV9jYWxsZWVfdm1hKHBhaXI8b2RiX2tleV90LCBjb3VudF90eXBlPiBjb25zdCAmIGxocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhaXI8b2RiX2tleV90LCBjb3VudF90eXBlPiBjb25zdCAmIHJocykKK3sKKwlyZXR1cm4gKGtleV90b19jYWxsZWUobGhzLmZpcnN0KSkgPCAoa2V5X3RvX2NhbGxlZShyaHMuZmlyc3QpKTsKK30KKworCisvKgorICogV2UgbmVlZCAyIGNvbXBhcmF0b3JzIGZvciBjYWxsZ3JhcGggdG8gZ2V0IHRoZSBkZXNpcmVkIG91dHB1dDoKKyAqCisgKgljYWxsZXJfd2l0aF9mZXdfc2FtcGxlcworICoJY2FsbGVyX3dpdGhfbWFueV9zYW1wbGVzCisgKiBmdW5jdGlvbl93aXRoX21hbnlfc2FtcGxlcworICoJY2FsbGVlX3dpdGhfbWFueV9zYW1wbGVzCisgKgljYWxsZWVfd2l0aF9mZXdfc2FtcGxlcworICovCisKK2Jvb2wKK2NvbXBhcmVfYXJjX2NvdW50KHN5bWJvbF9lbnRyeSBjb25zdCAmIGxocywgc3ltYm9sX2VudHJ5IGNvbnN0ICYgcmhzKQoreworCXJldHVybiBsaHMuc2FtcGxlLmNvdW50c1swXSA8IHJocy5zYW1wbGUuY291bnRzWzBdOworfQorCisKK2Jvb2wKK2NvbXBhcmVfYXJjX2NvdW50X3JldmVyc2Uoc3ltYm9sX2VudHJ5IGNvbnN0ICYgbGhzLCBzeW1ib2xfZW50cnkgY29uc3QgJiByaHMpCit7CisJcmV0dXJuIHJocy5zYW1wbGUuY291bnRzWzBdIDwgbGhzLnNhbXBsZS5jb3VudHNbMF07Cit9CisKKworLy8gZmluZCB0aGUgbmVhcmVzdCBiZmQgc3ltYm9sIGZvciB0aGUgZ2l2ZW4gZmlsZSBvZmZzZXQgYW5kIGNoZWNrIGl0J3MKKy8vIGluIHJhbmdlCitvcF9iZmRfc3ltYm9sIGNvbnN0ICoKK2dldF9zeW1ib2xfYnlfZmlsZXBvcyhvcF9iZmQgY29uc3QgJiBiZmQsIHUzMiBiZmRfb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgIHZtYV90IG9mZnNldCwgc3ltYm9sX2luZGV4X3QgJiBpKQoreworCW9mZnNldCArPSBiZmRfb2Zmc2V0OworCW9wX2JmZF9zeW1ib2wgdG1wc3ltKG9mZnNldCwgMCwgc3RyaW5nKCkpOworCisJLy8gc29ydGVkIGJ5IGZpbGVwb3Mgc28gdGhpcyB3aWxsIGZpbmQgdGhlIG5lYXJlc3QKKwl2ZWN0b3I8b3BfYmZkX3N5bWJvbD46OmNvbnN0X2l0ZXJhdG9yIGl0ID0KKwkJdXBwZXJfYm91bmQoYmZkLnN5bXMuYmVnaW4oKSwgYmZkLnN5bXMuZW5kKCksIHRtcHN5bSk7CisKKwlpZiAoaXQgIT0gYmZkLnN5bXMuYmVnaW4oKSkKKwkJLS1pdDsKKworCWlmIChpdCA9PSBiZmQuc3ltcy5lbmQoKSkgeworCQljZXJyIDw8ICJnZXRfc3ltYm9sX2J5X2ZpbGVwb3M6IG5vIHN5bWJvbHMgYXQgYWxsPyIgPDwgZW5kbDsKKwkJYWJvcnQoKTsKKwl9CisKKwkvLyBpZiB0aGUgb2Zmc2V0IGlzIHBhc3QgdGhlIGVuZCBvZiB0aGUgc3ltYm9sLCB3ZSBkaWRuJ3QgZmluZCBvbmUKKwl1MzIgY29uc3QgZW5kX29mZnNldCA9IGl0LT5zaXplKCkgKyBpdC0+ZmlsZXBvcygpOworCisJaWYgKG9mZnNldCA+PSBlbmRfb2Zmc2V0KSB7CisJCS8vIGxldCdzIGJlIHZlcmJvc2UgZm9yIG5vdworCQljZXJyIDw8ICJ3YXJuaW5nOiBkcm9wcGluZyBoeXBlcnNwYWNlIHNhbXBsZSBhdCBvZmZzZXQgIgorCQkgICAgIDw8IGhleCA8PCBvZmZzZXQgPDwgIiA+PSAiIDw8IGVuZF9vZmZzZXQKKwkJICAgICA8PCAiIGZvciBiaW5hcnkgIiA8PCBiZmQuZ2V0X2ZpbGVuYW1lKCkgPDwgZGVjIDw8IGVuZGw7CisJCXJldHVybiBOVUxMOworCX0KKworCWkgPSBkaXN0YW5jZShiZmQuc3ltcy5iZWdpbigpLCBpdCk7CisJcmV0dXJuICYoKml0KTsKK30KKworCisvLy8gdGVtcG9yYXJ5IGNhbGxlciBhbmQgY2FsbGVlIGRhdGEgaGVsZCBkdXJpbmcgcHJvY2Vzc2luZworY2xhc3MgY2FsbF9kYXRhIHsKK3B1YmxpYzoKKwljYWxsX2RhdGEocHJvZmlsZV9jb250YWluZXIgY29uc3QgJiBwLCBwcm9maWxlX3QgY29uc3QgJiBwciwKKwkgICAgICAgICAgb3BfYmZkIGNvbnN0ICYgYmZkLCB1MzIgYm9mZiwgaW1hZ2VfbmFtZV9pZCBpaWQsCisJICAgICAgICAgIGltYWdlX25hbWVfaWQgYWlkLCBib29sIGRlYnVnX2luZm8pCisJCTogcGMocCksIHByb2ZpbGUocHIpLCBiKGJmZCksIGJvZmZzZXQoYm9mZiksIGltYWdlKGlpZCksCisJCSAgYXBwKGFpZCksIGRlYnVnKGRlYnVnX2luZm8pIHt9CisKKwkvLy8gcG9pbnQgdG8gYSBjYWxsZXIgc3ltYm9sCisJdm9pZCBjYWxsZXJfc3ltKHN5bWJvbF9pbmRleF90IGkpIHsKKwkJc3ltID0gc3ltYm9sX2VudHJ5KCk7CisKKwkJdW5zaWduZWQgbG9uZyBsb25nIHN0YXJ0OworCQl1bnNpZ25lZCBsb25nIGxvbmcgZW5kOworCQliLmdldF9zeW1ib2xfcmFuZ2UoaSwgc3RhcnQsIGVuZCk7CisKKwkJc2FtcGxlcy5jbGVhcigpOworCisJCS8vIHNlZSBwcm9maWxlX3Q6OnNhbXBsZXNfcmFuZ2UoKSBmb3Igd2h5IHdlIG5lZWQgdGhpcyBjaGVjaworCQlpZiAoc3RhcnQgPiBib2Zmc2V0KSB7CisJCQlwcm9maWxlX3Q6Oml0ZXJhdG9yX3BhaXIgcF9pdCA9IHByb2ZpbGUuc2FtcGxlc19yYW5nZSgKKwkJCQljYWxsZXJfdG9fa2V5KHN0YXJ0IC0gYm9mZnNldCksCisJCQkJY2FsbGVyX3RvX2tleShlbmQgLSBib2Zmc2V0KSk7CisKKwkJCS8vIE91ciBvZGJfa2V5X3QgY29udGFpbiAoZnJvbV9laXAgPDwgMzIgfCB0b19laXApLAorCQkJLy8gdGhlIHJhbmdlIG9mIGtleXMgd2Ugc2VsZWN0ZWQgYWJvdmUgY29udGFpbnMgb25lCisJCQkvLyBjYWxsZXIgYnV0IGRpZmZlcmVudCBjYWxsZWVzLCBhbmQgZHVlIHRvIHRoZQorCQkJLy8gb3JkZXJpbmcgY2FsbGVlIG9mZnNldHMgYXJlIG5vdCBjb25zZWN1dGl2ZTogc28KKwkJCS8vIHdlIG11c3Qgc29ydCB0aGVtIGZpcnN0LgorCisJCQlmb3IgKDsgcF9pdC5maXJzdCAhPSBwX2l0LnNlY29uZDsgKytwX2l0LmZpcnN0KSB7CisJCQkJc2FtcGxlcy5wdXNoX2JhY2sobWFrZV9wYWlyKHBfaXQuZmlyc3Qudm1hKCksCisJCQkJCXBfaXQuZmlyc3QuY291bnQoKSkpOworCQkJfQorCisJCQlzb3J0KHNhbXBsZXMuYmVnaW4oKSwgc2FtcGxlcy5lbmQoKSwKKwkJCSAgICAgY29tcGFyZV9ieV9jYWxsZWVfdm1hKTsKKwkJfQorCisJCXN5bS5zaXplID0gZW5kIC0gc3RhcnQ7CisJCXN5bS5uYW1lID0gc3ltYm9sX25hbWVzLmNyZWF0ZShiLnN5bXNbaV0ubmFtZSgpKTsKKwkJc3ltLnNhbXBsZS52bWEgPSBiLnN5bXNbaV0udm1hKCk7CisKKwkJZmluaXNoX3N5bShpLCBzdGFydCk7CisKKwkJaWYgKGN2ZXJiIDw8IHZkZWJ1ZykgeworCQkJY3ZlcmIgPDwgdmRlYnVnIDw8IGhleCA8PCAiQ2FsbGVyIHN5bTogIgorCQkJICAgICAgPDwgYi5zeW1zW2ldLm5hbWUoKSA8PCAiIGZpbGVwb3MgIiA8PCBzdGFydAorCQkJICAgICAgPDwgIi0iIDw8IGVuZCA8PCBkZWMgPDwgZW5kbDsKKwkJfQorCX0KKworCS8vLyBwb2ludCB0byBhIGNhbGxlZSBzeW1ib2wKKwlib29sIGNhbGxlZV9zeW0odTMyIG9mZikgeworCQlzeW0gPSBzeW1ib2xfZW50cnkoKTsKKworCQlzeW1ib2xfaW5kZXhfdCBpID0gMDsKKwkJb3BfYmZkX3N5bWJvbCBjb25zdCAqIGJmZHN5bSA9CisJCQlnZXRfc3ltYm9sX2J5X2ZpbGVwb3MoYiwgYm9mZnNldCwgb2ZmLCBpKTsKKworCQlpZiAoIWJmZHN5bSkKKwkJCXJldHVybiBmYWxzZTsKKworCQljYWxsZWVfZW5kID0gYmZkc3ltLT5zaXplKCkgKyBiZmRzeW0tPmZpbGVwb3MoKSAtIGJvZmZzZXQ7CisKKwkJc3ltLnNpemUgPSBiZmRzeW0tPnNpemUoKTsKKwkJc3ltLm5hbWUgPSBzeW1ib2xfbmFtZXMuY3JlYXRlKGJmZHN5bS0+bmFtZSgpKTsKKwkJc3ltLnNhbXBsZS52bWEgPSBiZmRzeW0tPnZtYSgpOworCisJCWZpbmlzaF9zeW0oaSwgYmZkc3ltLT5maWxlcG9zKCkpOworCisJCWlmIChjdmVyYiA8PCB2ZGVidWcpIHsKKwkJCWN2ZXJiIDw8IHZkZWJ1ZyA8PCBoZXggPDwgIkNhbGxlZSBzeW06ICIKKwkJCSAgICAgIDw8IGJmZHN5bS0+bmFtZSgpIDw8ICIgZmlsZXBvcyAiCisJCQkgICAgICA8PCBiZmRzeW0tPmZpbGVwb3MoKSA8PCAiLSIKKwkJCSAgICAgIDw8IChiZmRzeW0tPmZpbGVwb3MoKSArIGJmZHN5bS0+c2l6ZSgpKQorCQkJICAgICAgPDwgZGVjIDw8IGVuZGw7CisJCX0KKwkJcmV0dXJuIHRydWU7CisJfQorCisJdm9pZCB2ZXJib3NlX2JmZChzdHJpbmcgY29uc3QgJiBwcmVmaXgpIGNvbnN0IHsKKwkJY3ZlcmIgPDwgdmRlYnVnIDw8IHByZWZpeCA8PCAiICIgPDwgYi5nZXRfZmlsZW5hbWUoKQorCQkgICAgICA8PCAiIG9mZnNldCAiIDw8IGJvZmZzZXQgPDwgIiBhcHAgIgorCQkgICAgICA8PCBpbWFnZV9uYW1lcy5uYW1lKGFwcCkgPDwgZW5kbDsKKwl9CisKKwl0eXBlZGVmIHZlY3RvcjxwYWlyPG9kYl9rZXlfdCwgY291bnRfdHlwZT4gPiBzYW1wbGVzX3Q7CisKKwl0eXBlZGVmIHNhbXBsZXNfdDo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CisKKwlzYW1wbGVzX3Qgc2FtcGxlczsKKwlzeW1ib2xfZW50cnkgc3ltOworCXUzMiBjYWxsZWVfZW5kOworCitwcml2YXRlOgorCS8vLyBmaWxsIGluIHRoZSByZXN0IG9mIHRoZSBzeW0KKwl2b2lkIGZpbmlzaF9zeW0oc3ltYm9sX2luZGV4X3QgaSwgdW5zaWduZWQgbG9uZyBzdGFydCkgeworCQlzeW0uaW1hZ2VfbmFtZSA9IGltYWdlOworCQlzeW0uYXBwX25hbWUgPSBhcHA7CisJCXN5bWJvbF9lbnRyeSBjb25zdCAqIHNlbGYgPSBwYy5maW5kKHN5bSk7CisJCWlmIChzZWxmKQorCQkJc3ltLnNhbXBsZS5jb3VudHMgPSBzZWxmLT5zYW1wbGUuY291bnRzOworCisJCWlmIChkZWJ1ZykgeworCQkJc3RyaW5nIGZpbGVuYW1lOworCQkJZmlsZV9sb2NhdGlvbiAmIGxvYyA9IHN5bS5zYW1wbGUuZmlsZV9sb2M7CisJCQlpZiAoYi5nZXRfbGluZW5yKGksIHN0YXJ0LCBmaWxlbmFtZSwgbG9jLmxpbmVucikpCisJCQkJbG9jLmZpbGVuYW1lID0gZGVidWdfbmFtZXMuY3JlYXRlKGZpbGVuYW1lKTsKKwkJfQorCX0KKworCXByb2ZpbGVfY29udGFpbmVyIGNvbnN0ICYgcGM7CisJcHJvZmlsZV90IGNvbnN0ICYgcHJvZmlsZTsKKwlvcF9iZmQgY29uc3QgJiBiOworCXUzMiBib2Zmc2V0OworCWltYWdlX25hbWVfaWQgaW1hZ2U7CisJaW1hZ2VfbmFtZV9pZCBhcHA7CisJYm9vbCBkZWJ1ZzsKK307CisKKworLy8vIGFjY3VtdWxhdGUgYWxsIHNhbXBsZXMgZm9yIGEgZ2l2ZW4gY2FsbGVyL2NhbGxlZSBwYWlyCitjb3VudF90eXBlCithY2N1bXVsYXRlX2NhbGxlZShjYWxsX2RhdGE6OmNvbnN0X2l0ZXJhdG9yICYgaXQsIGNhbGxfZGF0YTo6Y29uc3RfaXRlcmF0b3IgZW5kLAorICAgICAgICAgICAgICAgICAgdTMyIGNhbGxlZV9lbmQpCit7CisJY291bnRfdHlwZSBjb3VudCA9IDA7CisJY2FsbF9kYXRhOjpjb25zdF9pdGVyYXRvciBjb25zdCBzdGFydCA9IGl0OworCisJd2hpbGUgKGl0ICE9IGVuZCkgeworCQl1MzIgb2Zmc2V0ID0ga2V5X3RvX2NhbGxlZShpdC0+Zmlyc3QpOworCisJCWlmIChjdmVyYiA8PCAodmRlYnVnICYgdmxldmVsMSkpIHsKKwkJCWN2ZXJiIDw8ICh2ZGVidWcgJiB2bGV2ZWwxKSA8PCBoZXggPDwgIm9mZnNldDogIgorCQkJICAgICAgPDwgb2Zmc2V0IDw8IGRlYyA8PCBlbmRsOworCQl9CisKKwkJLy8gc3RvcCBpZiB3ZSBwYXNzIHRoZSBlbmQgb2YgdGhlIGNhbGxlZQorCQlpZiAob2Zmc2V0ID49IGNhbGxlZV9lbmQpCisJCQlicmVhazsKKworCQljb3VudCArPSBpdC0+c2Vjb25kOworCQkrK2l0OworCX0KKworCS8vIElmIHdlIGhhdmVuJ3QgYWR2YW5jZWQgYXQgYWxsLCB0aGVuIHdlJ2xsIGdldAorCS8vIGFuIGluZmluaXRlIGxvb3AsIHNvIHdlIG11c3QgYWJvcnQuCisJaWYgKGl0ID09IHN0YXJ0KSB7CisJCWNlcnIgPDwgImZhaWx1cmUgdG8gYWR2YW5jZSBpdGVyYXRvclxuIjsKKwkJYWJvcnQoKTsKKwl9CisKKwlyZXR1cm4gY291bnQ7Cit9CisKKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKKwordm9pZCBhcmNfcmVjb3JkZXI6OgorYWRkKHN5bWJvbF9lbnRyeSBjb25zdCAmIGNhbGxlciwgc3ltYm9sX2VudHJ5IGNvbnN0ICogY2FsbGVlLAorICAgIGNvdW50X2FycmF5X3QgY29uc3QgJiBhcmNfY291bnQpCit7CisJY2dfZGF0YSAmIGRhdGEgPSBzeW1fbWFwW2NhbGxlcl07CisKKwkvLyBJZiB3ZSBoYXZlIGEgY2FsbGVlLCBhZGQgaXQgdG8gdGhlIGNhbGxlcidzIGxpc3QsIHRoZW4KKwkvLyBhZGQgdGhlIGNhbGxlciB0byB0aGUgY2FsbGVlJ3MgbGlzdC4KKwlpZiAoY2FsbGVlKSB7CisJCWRhdGEuY2FsbGVlc1sqY2FsbGVlXSArPSBhcmNfY291bnQ7CisKKwkJY2dfZGF0YSAmIGNhbGxlZV9kYXRhID0gc3ltX21hcFsqY2FsbGVlXTsKKworCQljYWxsZWVfZGF0YS5jYWxsZXJzW2NhbGxlcl0gKz0gYXJjX2NvdW50OworCX0KK30KKworCit2b2lkIGFyY19yZWNvcmRlcjo6cHJvY2Vzc19jaGlsZHJlbihjZ19zeW1ib2wgJiBzeW0sIGRvdWJsZSB0aHJlc2hvbGQpCit7CisJLy8gZ2VuZXJhdGUgdGhlIHN5bnRoZXRpYyBzZWxmIGVudHJ5IGZvciB0aGUgc3ltYm9sCisJc3ltYm9sX2VudHJ5IHNlbGYgPSBzeW07CisKKwlzZWxmLm5hbWUgPSBzeW1ib2xfbmFtZXMuY3JlYXRlKHN5bWJvbF9uYW1lcy5kZW1hbmdsZShzZWxmLm5hbWUpCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIgW3NlbGZdIik7CisKKwlzeW0udG90YWxfY2FsbGVlX2NvdW50ICs9IHNlbGYuc2FtcGxlLmNvdW50czsKKwlzeW0uY2FsbGVlcy5wdXNoX2JhY2soc2VsZik7CisKKwlzb3J0KHN5bS5jYWxsZXJzLmJlZ2luKCksIHN5bS5jYWxsZXJzLmVuZCgpLCBjb21wYXJlX2FyY19jb3VudCk7CisJc29ydChzeW0uY2FsbGVlcy5iZWdpbigpLCBzeW0uY2FsbGVlcy5lbmQoKSwgY29tcGFyZV9hcmNfY291bnRfcmV2ZXJzZSk7CisKKwkvLyBGSVhNRTogdGhpcyByZWxpZXMgb24gc29ydCBhbHdheXMgYmVpbmcgc2FtcGxlIGNvdW50CisKKwljZ19zeW1ib2w6OmNoaWxkcmVuOjppdGVyYXRvciBjaXQgPSBzeW0uY2FsbGVycy5iZWdpbigpOworCWNnX3N5bWJvbDo6Y2hpbGRyZW46Oml0ZXJhdG9yIGNlbmQgPSBzeW0uY2FsbGVycy5lbmQoKTsKKworCXdoaWxlIChjaXQgIT0gY2VuZCAmJiBvcF9yYXRpbyhjaXQtPnNhbXBsZS5jb3VudHNbMF0sCisJICAgICAgIHN5bS50b3RhbF9jYWxsZXJfY291bnRbMF0pIDwgdGhyZXNob2xkKQorCQkrK2NpdDsKKworCWlmIChjaXQgIT0gY2VuZCkKKwkJc3ltLmNhbGxlcnMuZXJhc2Uoc3ltLmNhbGxlcnMuYmVnaW4oKSwgY2l0KTsKKworCWNpdCA9IHN5bS5jYWxsZWVzLmJlZ2luKCk7CisJY2VuZCA9IHN5bS5jYWxsZWVzLmVuZCgpOworCisJd2hpbGUgKGNpdCAhPSBjZW5kICYmIG9wX3JhdGlvKGNpdC0+c2FtcGxlLmNvdW50c1swXSwKKwkgICAgICAgc3ltLnRvdGFsX2NhbGxlZV9jb3VudFswXSkgPj0gdGhyZXNob2xkKQorCQkrK2NpdDsKKworCWlmIChjaXQgIT0gY2VuZCkKKwkJc3ltLmNhbGxlZXMuZXJhc2UoY2l0LCBzeW0uY2FsbGVlcy5lbmQoKSk7Cit9CisKKwordm9pZCBhcmNfcmVjb3JkZXI6OgorcHJvY2Vzcyhjb3VudF9hcnJheV90IHRvdGFsLCBkb3VibGUgdGhyZXNob2xkLAorICAgICAgICBzdHJpbmdfZmlsdGVyIGNvbnN0ICYgc3ltX2ZpbHRlcikKK3sKKwltYXBfdDo6Y29uc3RfaXRlcmF0b3IgaXQ7CisJbWFwX3Q6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHN5bV9tYXAuZW5kKCk7CisKKwlmb3IgKGl0ID0gc3ltX21hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKwkJY2dfc3ltYm9sIHN5bSgoKml0KS5maXJzdCk7CisJCWNnX2RhdGEgY29uc3QgJiBkYXRhID0gKCppdCkuc2Vjb25kOworCisJCS8vIHRocmVzaG9sZCBvdXQgdGhlIG1haW4gc3ltYm9sIGlmIG5lZWRlZAorCQlpZiAob3BfcmF0aW8oc3ltLnNhbXBsZS5jb3VudHNbMF0sIHRvdGFsWzBdKSA8IHRocmVzaG9sZCkKKwkJCWNvbnRpbnVlOworCisJCS8vIEZJWE1FOiBzbG93PworCQlpZiAoIXN5bV9maWx0ZXIubWF0Y2goc3ltYm9sX25hbWVzLmRlbWFuZ2xlKHN5bS5uYW1lKSkpCisJCQljb250aW51ZTsKKworCQljZ19kYXRhOjpjaGlsZHJlbjo6Y29uc3RfaXRlcmF0b3IgY2l0OworCQljZ19kYXRhOjpjaGlsZHJlbjo6Y29uc3RfaXRlcmF0b3IgY2VuZCA9IGRhdGEuY2FsbGVycy5lbmQoKTsKKworCQlmb3IgKGNpdCA9IGRhdGEuY2FsbGVycy5iZWdpbigpOyBjaXQgIT0gY2VuZDsgKytjaXQpIHsKKwkJCXN5bWJvbF9lbnRyeSBjc3ltID0gY2l0LT5maXJzdDsKKwkJCWNzeW0uc2FtcGxlLmNvdW50cyA9IGNpdC0+c2Vjb25kOworCQkJc3ltLmNhbGxlcnMucHVzaF9iYWNrKGNzeW0pOworCQkJc3ltLnRvdGFsX2NhbGxlcl9jb3VudCArPSBjaXQtPnNlY29uZDsKKwkJfQorCisJCWNlbmQgPSBkYXRhLmNhbGxlZXMuZW5kKCk7CisKKwkJZm9yIChjaXQgPSBkYXRhLmNhbGxlZXMuYmVnaW4oKTsgY2l0ICE9IGNlbmQ7ICsrY2l0KSB7CisJCQlzeW1ib2xfZW50cnkgY3N5bSA9IGNpdC0+Zmlyc3Q7CisJCQljc3ltLnNhbXBsZS5jb3VudHMgPSBjaXQtPnNlY29uZDsKKwkJCXN5bS5jYWxsZWVzLnB1c2hfYmFjayhjc3ltKTsKKwkJCXN5bS50b3RhbF9jYWxsZWVfY291bnQgKz0gY2l0LT5zZWNvbmQ7CisJCX0KKworCQlwcm9jZXNzX2NoaWxkcmVuKHN5bSwgdGhyZXNob2xkKTsKKworCQkvLyBpbnNlcnQgc3ltIGludG8gY2dfc3ltc19vYmpzCisJCS8vIHRoZW4gc3RvcmUgcG9pbnRlciB0byBzeW0gaW4gY2dfc3ltcworCQljZ19zeW1zLnB1c2hfYmFjaygmKCpjZ19zeW1zX29ianMuaW5zZXJ0KGNnX3N5bXNfb2Jqcy5lbmQoKSwgc3ltKSkpOworCX0KK30KKworCitzeW1ib2xfY29sbGVjdGlvbiBjb25zdCAmIGFyY19yZWNvcmRlcjo6Z2V0X3N5bWJvbHMoKSBjb25zdAoreworCXJldHVybiBjZ19zeW1zOworfQorCisKK3ZvaWQgY2FsbGdyYXBoX2NvbnRhaW5lcjo6cG9wdWxhdGUobGlzdDxpbnZlcnRlZF9wcm9maWxlPiBjb25zdCAmIGlwcm9maWxlcywKKyAgIGV4dHJhX2ltYWdlcyBjb25zdCAmIGV4dHJhLCBib29sIGRlYnVnX2luZm8sIGRvdWJsZSB0aHJlc2hvbGQsCisgICBib29sIG1lcmdlX2xpYiwgc3RyaW5nX2ZpbHRlciBjb25zdCAmIHN5bV9maWx0ZXIpCit7CisJdGhpcy0+ZXh0cmFfZm91bmRfaW1hZ2VzID0gZXh0cmE7CisJLy8gbm9uIGNhbGxncmFwaCBzYW1wbGVzIGNvbnRhaW5lciwgd2UgcmVjb3JkIHNhbXBsZSBhdCBzeW1ib2wgbGV2ZWwKKwkvLyBub3QgYXQgdm1hIGxldmVsLgorCXByb2ZpbGVfY29udGFpbmVyIHBjKGRlYnVnX2luZm8sIGZhbHNlLCBleHRyYV9mb3VuZF9pbWFnZXMpOworCisJbGlzdDxpbnZlcnRlZF9wcm9maWxlPjo6Y29uc3RfaXRlcmF0b3IgaXQ7CisJbGlzdDxpbnZlcnRlZF9wcm9maWxlPjo6Y29uc3RfaXRlcmF0b3IgY29uc3QgZW5kID0gaXByb2ZpbGVzLmVuZCgpOworCWZvciAoaXQgPSBpcHJvZmlsZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisJCS8vIHBvcHVsYXRlX2NhbGxlcl9pbWFnZSB0YWtlIGNhcmUgYWJvdXQgZW1wdHkgc2FtcGxlIGZpbGVuYW1lCisJCXBvcHVsYXRlX2Zvcl9pbWFnZShwYywgKml0LCBzeW1fZmlsdGVyLCAwKTsKKwl9CisKKwlhZGRfc3ltYm9scyhwYyk7CisKKwl0b3RhbF9jb3VudCA9IHBjLnNhbXBsZXNfY291bnQoKTsKKworCWZvciAoaXQgPSBpcHJvZmlsZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisJCWZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaXQtPmdyb3Vwcy5zaXplKCk7ICsraSkgeworCQkJcG9wdWxhdGUoaXQtPmdyb3Vwc1tpXSwgaXQtPmltYWdlLAorCQkJCWksIHBjLCBkZWJ1Z19pbmZvLCBtZXJnZV9saWIpOworCQl9CisJfQorCisJcmVjb3JkZXIucHJvY2Vzcyh0b3RhbF9jb3VudCwgdGhyZXNob2xkIC8gMTAwLjAsIHN5bV9maWx0ZXIpOworfQorCisKK3ZvaWQgY2FsbGdyYXBoX2NvbnRhaW5lcjo6cG9wdWxhdGUobGlzdDxpbWFnZV9zZXQ+IGNvbnN0ICYgbHNldCwKKwlzdHJpbmcgY29uc3QgJiBhcHBfaW1hZ2UsIHNpemVfdCBwY2xhc3MsCisJcHJvZmlsZV9jb250YWluZXIgY29uc3QgJiBwYywgYm9vbCBkZWJ1Z19pbmZvLCBib29sIG1lcmdlX2xpYikKK3sKKwlsaXN0PGltYWdlX3NldD46OmNvbnN0X2l0ZXJhdG9yIGxpdDsKKwlsaXN0PGltYWdlX3NldD46OmNvbnN0X2l0ZXJhdG9yIGNvbnN0IGxlbmQgPSBsc2V0LmVuZCgpOworCWZvciAobGl0ID0gbHNldC5iZWdpbigpOyBsaXQgIT0gbGVuZDsgKytsaXQpIHsKKwkJbGlzdDxwcm9maWxlX3NhbXBsZV9maWxlcz46OmNvbnN0X2l0ZXJhdG9yIHBpdDsKKwkJbGlzdDxwcm9maWxlX3NhbXBsZV9maWxlcz46OmNvbnN0X2l0ZXJhdG9yIHBlbmQKKwkJCT0gbGl0LT5maWxlcy5lbmQoKTsKKwkJZm9yIChwaXQgPSBsaXQtPmZpbGVzLmJlZ2luKCk7IHBpdCAhPSBwZW5kOyArK3BpdCkgeworCQkJcG9wdWxhdGUocGl0LT5jZ19maWxlcywgYXBwX2ltYWdlLAorCQkJCSBwY2xhc3MsIHBjLCBkZWJ1Z19pbmZvLCBtZXJnZV9saWIpOworCQl9CisJfQorfQorCisKK3ZvaWQgY2FsbGdyYXBoX2NvbnRhaW5lcjo6cG9wdWxhdGUobGlzdDxzdHJpbmc+IGNvbnN0ICYgY2dfZmlsZXMsCisJc3RyaW5nIGNvbnN0ICYgYXBwX2ltYWdlLCBzaXplX3QgcGNsYXNzLAorCXByb2ZpbGVfY29udGFpbmVyIGNvbnN0ICYgcGMsIGJvb2wgZGVidWdfaW5mbywgYm9vbCBtZXJnZV9saWIpCit7CisJbGlzdDxzdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdDsKKwlsaXN0PHN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGNvbnN0IGVuZCA9IGNnX2ZpbGVzLmVuZCgpOworCWZvciAoaXQgPSBjZ19maWxlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKwkJY3ZlcmIgPDwgdmRlYnVnIDw8ICJzYW1wbGVzIGZpbGUgOiAiIDw8ICppdCA8PCBlbmRsOworCisJCXBhcnNlZF9maWxlbmFtZSBjYWxsZXJfZmlsZSA9CisJCQlwYXJzZV9maWxlbmFtZSgqaXQsIGV4dHJhX2ZvdW5kX2ltYWdlcyk7CisJCXN0cmluZyBjb25zdCBhcHBfbmFtZSA9IGNhbGxlcl9maWxlLmltYWdlOworCisJCWltYWdlX2Vycm9yIGVycm9yOworCQlleHRyYV9mb3VuZF9pbWFnZXMuZmluZF9pbWFnZV9wYXRoKGNhbGxlcl9maWxlLmxpYl9pbWFnZSwKKwkJCQllcnJvciwgZmFsc2UpOworCisJCWlmIChlcnJvciAhPSBpbWFnZV9vaykKKwkJCXJlcG9ydF9pbWFnZV9lcnJvcihjYWxsZXJfZmlsZS5saWJfaW1hZ2UsCisJCQkJCSAgIGVycm9yLCBmYWxzZSwgZXh0cmFfZm91bmRfaW1hZ2VzKTsKKworCQlib29sIGNhbGxlcl9iZmRfb2sgPSB0cnVlOworCQlvcF9iZmQgY2FsbGVyX2JmZChjYWxsZXJfZmlsZS5saWJfaW1hZ2UsCisJCQlzdHJpbmdfZmlsdGVyKCksIGV4dHJhX2ZvdW5kX2ltYWdlcywgY2FsbGVyX2JmZF9vayk7CisJCWlmICghY2FsbGVyX2JmZF9vaykKKwkJCXJlcG9ydF9pbWFnZV9lcnJvcihjYWxsZXJfZmlsZS5saWJfaW1hZ2UsCisJCQkgICAgICAgICAgICAgICAgICAgaW1hZ2VfZm9ybWF0X2ZhaWx1cmUsIGZhbHNlLAorCQkJCQkgICBleHRyYV9mb3VuZF9pbWFnZXMpOworCisJCXBhcnNlZF9maWxlbmFtZSBjYWxsZWVfZmlsZSA9CisJCQlwYXJzZV9maWxlbmFtZSgqaXQsIGV4dHJhX2ZvdW5kX2ltYWdlcyk7CisKKwkJZXh0cmFfZm91bmRfaW1hZ2VzLmZpbmRfaW1hZ2VfcGF0aChjYWxsZWVfZmlsZS5jZ19pbWFnZSwKKwkJCQllcnJvciwgZmFsc2UpOworCQlpZiAoZXJyb3IgIT0gaW1hZ2Vfb2spCisJCQlyZXBvcnRfaW1hZ2VfZXJyb3IoY2FsbGVlX2ZpbGUuY2dfaW1hZ2UsCisJCQkJCSAgIGVycm9yLCBmYWxzZSwgZXh0cmFfZm91bmRfaW1hZ2VzKTsKKworCQlib29sIGNhbGxlZV9iZmRfb2sgPSB0cnVlOworCQlvcF9iZmQgY2FsbGVlX2JmZChjYWxsZWVfZmlsZS5jZ19pbWFnZSwKKwkJCXN0cmluZ19maWx0ZXIoKSwgZXh0cmFfZm91bmRfaW1hZ2VzLCBjYWxsZWVfYmZkX29rKTsKKwkJaWYgKCFjYWxsZWVfYmZkX29rKQorCQkJcmVwb3J0X2ltYWdlX2Vycm9yKGNhbGxlZV9maWxlLmNnX2ltYWdlLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZV9mb3JtYXRfZmFpbHVyZSwgZmFsc2UsCisJCQkJCSAgIGV4dHJhX2ZvdW5kX2ltYWdlcyk7CisKKwkJcHJvZmlsZV90IHByb2ZpbGU7CisJCS8vIFdlIGNhbid0IHVzZSBzdGFydF9vZmZzZXQgc3VwcG9ydCBpbiBwcm9maWxlX3QsIGdpdmUKKwkJLy8gaXQgYSB6ZXJvIG9mZnNldCBhbmQgd2Ugd2lsbCBmaXggdGhhdCBpbiBhZGQoKQorCQlwcm9maWxlLmFkZF9zYW1wbGVfZmlsZSgqaXQpOworCQlhZGQocHJvZmlsZSwgY2FsbGVyX2JmZCwgY2FsbGVyX2JmZF9vaywgY2FsbGVlX2JmZCwKKwkJICAgIG1lcmdlX2xpYiA/IGFwcF9pbWFnZSA6IGFwcF9uYW1lLCBwYywKKwkJICAgIGRlYnVnX2luZm8sIHBjbGFzcyk7CisJfQorfQorCisKK3ZvaWQgY2FsbGdyYXBoX2NvbnRhaW5lcjo6CithZGQocHJvZmlsZV90IGNvbnN0ICYgcHJvZmlsZSwgb3BfYmZkIGNvbnN0ICYgY2FsbGVyX2JmZCwgYm9vbCBjYWxsZXJfYmZkX29rLAorICAgb3BfYmZkIGNvbnN0ICYgY2FsbGVlX2JmZCwgc3RyaW5nIGNvbnN0ICYgYXBwX25hbWUsCisgICBwcm9maWxlX2NvbnRhaW5lciBjb25zdCAmIHBjLCBib29sIGRlYnVnX2luZm8sIHNpemVfdCBwY2xhc3MpCit7CisJc3RyaW5nIGNvbnN0IGltYWdlX25hbWUgPSBjYWxsZXJfYmZkLmdldF9maWxlbmFtZSgpOworCisJb3BkX2hlYWRlciBjb25zdCAmIGhlYWRlciA9IHByb2ZpbGUuZ2V0X2hlYWRlcigpOworCisJLy8gV2UgY2FuJ3QgdXNlIGtlcm5lbCBzYW1wbGUgZmlsZSB3L28gdGhlIGJpbmFyeSBlbHNlIHdlIHdpbGwKKwkvLyB1c2UgaXQgd2l0aCBhIHplcm8gb2Zmc2V0LCB0aGUgY29kZSBiZWxvdyB3aWxsIGFib3J0IGJlY2F1c2UKKwkvLyB3ZSB3aWxsIGdldCBpbmNvcnJlY3QgY2FsbGVlIHN1Yi1yYW5nZSBhbmQgb3V0IG9mIHJhbmdlCisJLy8gY2FsbGVlIHZtYS4gRklYTUUKKwlpZiAoaGVhZGVyLmlzX2tlcm5lbCAmJiAhY2FsbGVyX2JmZF9vaykKKwkJcmV0dXJuOworCisJLy8gV2UgbXVzdCBoYW5kbGUgc3RhcnRfb2Zmc2V0LCB0aGlzIG9mZnNldCBjYW4gYmUgZGlmZmVyZW50IGZvciB0aGUKKwkvLyBjYWxsZXIgYW5kIHRoZSBjYWxsZWU6IGtlcm5lbCBzYW1wbGUgdHJhdmVyc2luZyB0aGUgc3lzY2FsbCBiYXJyaWVyLgorCXUzMiBjYWxsZXJfb2Zmc2V0OworCWlmIChoZWFkZXIuaXNfa2VybmVsKQorCQljYWxsZXJfb2Zmc2V0ID0gY2FsbGVyX2JmZC5nZXRfc3RhcnRfb2Zmc2V0KDApOworCWVsc2UKKwkJY2FsbGVyX29mZnNldCA9IGhlYWRlci5hbm9uX3N0YXJ0OworCisJdTMyIGNhbGxlZV9vZmZzZXQ7CisJaWYgKGhlYWRlci5jZ190b19pc19rZXJuZWwpCisJCWNhbGxlZV9vZmZzZXQgPSBjYWxsZWVfYmZkLmdldF9zdGFydF9vZmZzZXQoMCk7CisJZWxzZQorCQljYWxsZWVfb2Zmc2V0ID0gaGVhZGVyLmNnX3RvX2Fub25fc3RhcnQ7CisKKwlpbWFnZV9uYW1lX2lkIGltYWdlX2lkID0gaW1hZ2VfbmFtZXMuY3JlYXRlKGltYWdlX25hbWUpOworCWltYWdlX25hbWVfaWQgY2FsbGVlX2ltYWdlX2lkID0gaW1hZ2VfbmFtZXMuY3JlYXRlKGNhbGxlZV9iZmQuZ2V0X2ZpbGVuYW1lKCkpOworCWltYWdlX25hbWVfaWQgYXBwX2lkID0gaW1hZ2VfbmFtZXMuY3JlYXRlKGFwcF9uYW1lKTsKKworCWNhbGxfZGF0YSBjYWxsZXIocGMsIHByb2ZpbGUsIGNhbGxlcl9iZmQsIGNhbGxlcl9vZmZzZXQsIGltYWdlX2lkLAorCSAgICAgICAgICAgICAgICAgICBhcHBfaWQsIGRlYnVnX2luZm8pOworCWNhbGxfZGF0YSBjYWxsZWUocGMsIHByb2ZpbGUsIGNhbGxlZV9iZmQsIGNhbGxlZV9vZmZzZXQsCisJICAgICAgICAgICAgICAgICAgIGNhbGxlZV9pbWFnZV9pZCwgYXBwX2lkLCBkZWJ1Z19pbmZvKTsKKworCWlmIChjdmVyYiA8PCB2ZGVidWcpIHsKKwkJY2FsbGVyLnZlcmJvc2VfYmZkKCJDYWxsZXI6Iik7CisJCWNhbGxlZS52ZXJib3NlX2JmZCgiQ2FsbGVlOiIpOworCX0KKworCS8vIEZvciBlYWNoIHN5bWJvbCBpbiB0aGUgY2FsbGVyIGJmZCwgcHJvY2VzcyBhbGwgYXJjcyB0bworCS8vIGNhbGxlZSBiZmQgc3ltYm9scworCisJZm9yIChzeW1ib2xfaW5kZXhfdCBpID0gMDsgaSA8IGNhbGxlcl9iZmQuc3ltcy5zaXplKCk7ICsraSkgeworCisJCWNhbGxlci5jYWxsZXJfc3ltKGkpOworCisJCWNhbGxfZGF0YTo6Y29uc3RfaXRlcmF0b3IgZGl0ID0gY2FsbGVyLnNhbXBsZXMuYmVnaW4oKTsKKwkJY2FsbF9kYXRhOjpjb25zdF9pdGVyYXRvciBkZW5kID0gY2FsbGVyLnNhbXBsZXMuZW5kKCk7CisJCXdoaWxlIChkaXQgIT0gZGVuZCkgeworCQkJLy8gaWYgd2UgY2FuJ3QgZmluZCB0aGUgY2FsbGVlLCBza2lwIGFuIGFyYworCQkJaWYgKCFjYWxsZWUuY2FsbGVlX3N5bShrZXlfdG9fY2FsbGVlKGRpdC0+Zmlyc3QpKSkgeworCQkJCSsrZGl0OworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQljb3VudF9hcnJheV90IGFyY19jb3VudDsKKwkJCWFyY19jb3VudFtwY2xhc3NdID0KKwkJCQlhY2N1bXVsYXRlX2NhbGxlZShkaXQsIGRlbmQsIGNhbGxlZS5jYWxsZWVfZW5kKTsKKworCQkJcmVjb3JkZXIuYWRkKGNhbGxlci5zeW0sICZjYWxsZWUuc3ltLCBhcmNfY291bnQpOworCQl9CisJfQorfQorCisKK3ZvaWQgY2FsbGdyYXBoX2NvbnRhaW5lcjo6YWRkX3N5bWJvbHMocHJvZmlsZV9jb250YWluZXIgY29uc3QgJiBwYykKK3sKKwlzeW1ib2xfY29udGFpbmVyOjpzeW1ib2xzX3Q6Oml0ZXJhdG9yIGl0OworCXN5bWJvbF9jb250YWluZXI6OnN5bWJvbHNfdDo6aXRlcmF0b3IgY29uc3QgZW5kID0gcGMuZW5kX3N5bWJvbCgpOworCisJZm9yIChpdCA9IHBjLmJlZ2luX3N5bWJvbCgpOyBpdCAhPSBlbmQ7ICsraXQpCisJCXJlY29yZGVyLmFkZCgqaXQsIDAsIGNvdW50X2FycmF5X3QoKSk7Cit9CisKKworY29sdW1uX2ZsYWdzIGNhbGxncmFwaF9jb250YWluZXI6Om91dHB1dF9oaW50KCkgY29uc3QKK3sKKwljb2x1bW5fZmxhZ3Mgb3V0cHV0X2hpbnRzID0gY2Zfbm9uZTsKKworCS8vIEZJWE1FOiBjb3N0bHk6IG11c3Qgd2UgYWNjZXNzIGRpcmVjdGx5IHJlY29yZGVyIG1hcCA/CisJc3ltYm9sX2NvbGxlY3Rpb24gc3ltcyA9IHJlY29yZGVyLmdldF9zeW1ib2xzKCk7CisKKwlzeW1ib2xfY29sbGVjdGlvbjo6aXRlcmF0b3IgaXQ7CisJc3ltYm9sX2NvbGxlY3Rpb246Oml0ZXJhdG9yIGNvbnN0IGVuZCA9IHN5bXMuZW5kKCk7CisJZm9yIChpdCA9IHN5bXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorCQlvdXRwdXRfaGludHMgPSAoKml0KS0+b3V0cHV0X2hpbnQob3V0cHV0X2hpbnRzKTsKKworCXJldHVybiBvdXRwdXRfaGludHM7Cit9CisKKworY291bnRfYXJyYXlfdCBjYWxsZ3JhcGhfY29udGFpbmVyOjpzYW1wbGVzX2NvdW50KCkgY29uc3QKK3sKKwlyZXR1cm4gdG90YWxfY291bnQ7Cit9CisKKworc3ltYm9sX2NvbGxlY3Rpb24gY29uc3QgJiBjYWxsZ3JhcGhfY29udGFpbmVyOjpnZXRfc3ltYm9scygpIGNvbnN0Cit7CisJcmV0dXJuIHJlY29yZGVyLmdldF9zeW1ib2xzKCk7Cit9CmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9saWJwcC9jYWxsZ3JhcGhfY29udGFpbmVyLmggYi9vcHJvZmlsZS0wLjkuNy9saWJwcC9jYWxsZ3JhcGhfY29udGFpbmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjk5YTBhYQotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2xpYnBwL2NhbGxncmFwaF9jb250YWluZXIuaApAQCAtMCwwICsxLDE3MSBAQAorLyoqCisgKiBAZmlsZSBjYWxsZ3JhcGhfY29udGFpbmVyLmgKKyAqIENvbnRhaW5lciBhc3NvY2lhdGluZyBzeW1ib2xzIGFuZCBjYWxsZXIvY2FsbGVyIHN5bWJvbHMKKyAqCisgKiBAcmVtYXJrIENvcHlyaWdodCAyMDA0IE9Qcm9maWxlIGF1dGhvcnMKKyAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCisgKgorICogQGF1dGhvciBQaGlsaXBwZSBFbGllCisgKiBAYXV0aG9yIEpvaG4gTGV2b24KKyAqLworCisjaWZuZGVmIENBTExHUkFQSF9DT05UQUlORVJfSAorI2RlZmluZSBDQUxMR1JBUEhfQ09OVEFJTkVSX0gKKworI2luY2x1ZGUgPHNldD4KKyNpbmNsdWRlIDx2ZWN0b3I+CisjaW5jbHVkZSA8c3RyaW5nPgorCisjaW5jbHVkZSAic3ltYm9sLmgiCisjaW5jbHVkZSAic3ltYm9sX2Z1bmN0b3JzLmgiCisjaW5jbHVkZSAic3RyaW5nX2ZpbHRlci5oIgorI2luY2x1ZGUgImxvY2F0ZV9pbWFnZXMuaCIKKworY2xhc3MgcHJvZmlsZV9jb250YWluZXI7CitjbGFzcyBpbnZlcnRlZF9wcm9maWxlOworY2xhc3MgcHJvZmlsZV90OworY2xhc3MgaW1hZ2Vfc2V0OworY2xhc3Mgb3BfYmZkOworCisKKy8qKgorICogRHVyaW5nIGJ1aWxkaW5nIGEgY2FsbGdyYXBoX2NvbnRhaW5lciB3ZSBzdG9yZSBhbGwgY2FsbGVyL2NhbGxlZQorICogcmVsYXRpb25zaGlwIGluIHRoaXMgY29udGFpbmVyLgorICoKKyAqIEFuICJhcmMiIGlzIHNpbXBseSBhIGRlc2NyaXB0aW9uIG9mIGEgY2FsbCBmcm9tIG9uZSBmdW5jdGlvbiB0bworICogYW5vdGhlci4KKyAqLworY2xhc3MgYXJjX3JlY29yZGVyIHsKK3B1YmxpYzoKKwl+YXJjX3JlY29yZGVyKCkge30KKworCS8qKgorCSAqIEFkZCBhIHN5bWJvbCBhcmMuCisJICogQHBhcmFtIGNhbGxlciAgVGhlIGNhbGxpbmcgc3ltYm9sCisJICogQHBhcmFtIGNhbGxlZSAgVGhlIGNhbGxlZCBzeW1ib2wKKwkgKiBAcGFyYW0gYXJjX2NvdW50ICBwcm9maWxlIGRhdGEgZm9yIHRoZSBhcmNzCisJICoKKwkgKiBJZiB0aGUgY2FsbGVlIGlzIE5VTEwsIG9ubHkgdGhlIGNhbGxlciBpcyBhZGRlZCB0byB0aGUgbWFpbgorCSAqIGxpc3QuIFRoaXMgaXMgdXNlZCB0byBpbml0aWFsbHkgcG9wdWxhdGUgdGhlIHJlY29yZGVyIHdpdGgKKwkgKiB0aGUgc3ltYm9scy4KKwkgKi8KKwl2b2lkIGFkZChzeW1ib2xfZW50cnkgY29uc3QgJiBjYWxsZXIsIHN5bWJvbF9lbnRyeSBjb25zdCAqIGNhbGxlZSwKKwkgICAgICAgICBjb3VudF9hcnJheV90IGNvbnN0ICYgYXJjX2NvdW50KTsKKworCS8vLyByZXR1cm4gYWxsIHRoZSBjZyBzeW1ib2xzCisJc3ltYm9sX2NvbGxlY3Rpb24gY29uc3QgJiBnZXRfc3ltYm9scygpIGNvbnN0OworCisJLyoqCisJICogQWZ0ZXIgcG9wdWxhdGlvbiwgYnVpbGQgdGhlIGZpbmFsIG91dHB1dCwgYW5kIGRvCisJICogdGhyZXNob2xkaW5nLgorCSAqLworCXZvaWQgcHJvY2Vzcyhjb3VudF9hcnJheV90IHRvdGFsLCBkb3VibGUgdGhyZXNob2xkLAorCSAgICAgICAgICAgICBzdHJpbmdfZmlsdGVyIGNvbnN0ICYgZmlsdGVyKTsKKworcHJpdmF0ZToKKwkvKioKKwkgKiBJbnRlcm5hbCBzdHJ1Y3R1cmUgdXNlZCBkdXJpbmcgY29sbGF0aW9uLiBXZSB1c2UgYSBtYXAgdG8KKwkgKiBhbGxvdyBxdWljayBsb29rdXAgb2YgY2hpbGRyZW4gKHdlJ2xsIGRvIHRoaXMgc2V2ZXJhbCB0aW1lcworCSAqIGlmIHdlIGhhdmUgbW9yZSB0aGFuIG9uZSBwcm9maWxlIGNsYXNzKS4gRWFjaCBjaGlsZCBtYXBzIGZyb20KKwkgKiB0aGUgc3ltYm9sIHRvIHRoZSByZWxldmFudCBhcmMgZGF0YS4KKwkgKi8KKwlzdHJ1Y3QgY2dfZGF0YSB7CisJCWNnX2RhdGEoKSB7fQorCisJCXR5cGVkZWYgc3RkOjptYXA8c3ltYm9sX2VudHJ5LCBjb3VudF9hcnJheV90LCBsZXNzX3N5bWJvbD4gY2hpbGRyZW47CisKKwkJLy8vIGNhbGxlcnMgb2YgdGhpcyBzeW1ib2wKKwkJY2hpbGRyZW4gY2FsbGVyczsKKwkJLy8vIGNhbGxlZXMgb2YgdGhpcyBzeW1ib2wKKwkJY2hpbGRyZW4gY2FsbGVlczsKKwl9OworCisJLyoqCisJICogU29ydCBhbmQgdGhyZXNob2xkIGNhbGxlcnMgYW5kIGNhbGxlZXMuCisJICovCisJdm9pZCBwcm9jZXNzX2NoaWxkcmVuKGNnX3N5bWJvbCAmIHN5bSwgZG91YmxlIHRocmVzaG9sZCk7CisKKwl0eXBlZGVmIHN0ZDo6bWFwPHN5bWJvbF9lbnRyeSwgY2dfZGF0YSwgbGVzc19zeW1ib2w+IG1hcF90OworCisJLy8vIGFsbCB0aGUgc3ltYm9scyAodXNlZCBkdXJpbmcgcHJvY2Vzc2luZykKKwltYXBfdCBzeW1fbWFwOworCisJLy8vIHN5bWJvbCBvYmplY3RzIHBvaW50ZWQgdG8gYnkgcG9pbnRlcnMgaW4gdmVjdG9yIGNnX3N5bXMKKwljZ19jb2xsZWN0aW9uX29ianMgY2dfc3ltc19vYmpzOworCisJLy8vIGZpbmFsIG91dHB1dCBkYXRhCisJc3ltYm9sX2NvbGxlY3Rpb24gY2dfc3ltczsKK307CisKKworLyoqCisgKiBTdG9yZSBhbGwgY2FsbGdyYXBoIGluZm9ybWF0aW9uIGZvciB0aGUgZ2l2ZW4gcHJvZmlsZXMKKyAqLworY2xhc3MgY2FsbGdyYXBoX2NvbnRhaW5lciB7CitwdWJsaWM6CisJLyoqCisJICogUG9wdWxhdGUgdGhlIGNvbnRhaW5lciwgbXVzdCBiZSBjYWxsZWQgb25jZSBvbmx5LgorCSAqIEBwYXJhbSBpcHJvZmlsZXMgIHNhbXBsZSBmaWxlIGxpc3QgaW5jbHVkaW5nIGNhbGxncmFwaCBmaWxlcy4KKwkgKiBAcGFyYW0gZXh0cmEgIGV4dHJhIGltYWdlIGxpc3QgdG8gZml4dXAgYmluYXJ5IG5hbWUuCisJICogQHBhcmFtIGRlYnVnX2luZm8gIHRydWUgaWYgd2UgbXVzdCByZWNvcmQgbGluZW5yIGluZm9ybWF0aW9uCisJICogQHBhcmFtIHRocmVzaG9sZCAgaWdub3JlIHNhbXBsZSBwZXJjZW50IGJlbG93IHRoaXMgdGhyZXNob2xkCisJICogQHBhcmFtIG1lcmdlX2xpYiAgbWVyZ2UgbGlicmFyeSBzYW1wbGVzCisJICogQHBhcmFtIHN5bV9maWx0ZXIgIHN5bWJvbCBmaWx0ZXIKKwkgKgorCSAqIEN1cnJlbnRseSBhbGwgZXJyb3JzIGNvcmUgZHVtcC4KKwkgKiBGSVhNRTogY29uc2lkZXIgaWYgdGhpcyBzaG91bGQgYmUgYSBjdG9yCisJICovCisJdm9pZCBwb3B1bGF0ZShzdGQ6Omxpc3Q8aW52ZXJ0ZWRfcHJvZmlsZT4gY29uc3QgJiBpcHJvZmlsZXMsCisJCSAgICAgIGV4dHJhX2ltYWdlcyBjb25zdCAmIGV4dHJhLCBib29sIGRlYnVnX2luZm8sCisJCSAgICAgIGRvdWJsZSB0aHJlc2hvbGQsIGJvb2wgbWVyZ2VfbGliLAorCQkgICAgICBzdHJpbmdfZmlsdGVyIGNvbnN0ICYgc3ltX2ZpbHRlcik7CisKKwkvLy8gcmV0dXJuIGhpbnQgb24gaG93IGRhdGEgbXVzdCBiZSBkaXNwbGF5ZWQuCisJY29sdW1uX2ZsYWdzIG91dHB1dF9oaW50KCkgY29uc3Q7CisKKwkvLy8gcmV0dXJuIHRoZSB0b3RhbCBudW1iZXIgb2Ygc2FtcGxlcy4KKwljb3VudF9hcnJheV90IHNhbXBsZXNfY291bnQoKSBjb25zdDsKKworCS8vIHJldHVybiBhbGwgdGhlIGNnIHN5bWJvbHMKKwlzeW1ib2xfY29sbGVjdGlvbiBjb25zdCAmIGdldF9zeW1ib2xzKCkgY29uc3Q7CisKK3ByaXZhdGU6CisJLyoqCisJICogUmVjb3JkIGNhbGxlci9jYWxsZWUgZm9yIG9uZSBjZyBmaWxlCisJICogQHBhcmFtIHByb2ZpbGUgIG9uZSBjYWxsZ3JhcGggZmlsZSBzdG9yZWQgaW4gYSBwcm9maWxlX3QKKwkgKiBAcGFyYW0gY2FsbGVyX2JmZCAgdGhlIGNhbGxlciBiZmQKKwkgKiBAcGFyYW0gYmZkX2NhbGxlcl9vayAgdHJ1ZSBpZiB3ZSBzdWNjZWZ1bGx5IG9wZW4gdGhlIGJpbmFyeQorCSAqIEBwYXJhbSBjYWxsZWVfYmZkICB0aGUgY2FsbGVlIGJmZAorCSAqIEBwYXJhbSBhcHBfbmFtZSAgdGhlIG93bmluZyBhcHBsaWNhdGlvbgorCSAqIEBwYXJhbSBwYyAgdGhlIHByb2ZpbGVfY29udGFpbmVyIGhvbGRpbmcgYWxsIG5vbiBjZyBzYW1wbGVzLgorCSAqIEBwYXJhbSBkZWJ1Z19pbmZvICByZWNvcmQgbGluZW5yIGRlYnVnIGluZm9ybWF0aW9uCisJICogQHBhcmFtIHBjbGFzcyAgcHJvZmlsZSBjbGFzcyBucgorCSAqLworCXZvaWQgYWRkKHByb2ZpbGVfdCBjb25zdCAmIHByb2ZpbGUsIG9wX2JmZCBjb25zdCAmIGNhbGxlcl9iZmQsCisJICAgICAgICAgYm9vbCBiZmRfY2FsbGVyX29rLCBvcF9iZmQgY29uc3QgJiBjYWxsZWVfYmZkLAorCQkgc3RkOjpzdHJpbmcgY29uc3QgJiBhcHBfbmFtZSwgcHJvZmlsZV9jb250YWluZXIgY29uc3QgJiBwYywKKwkJIGJvb2wgZGVidWdfaW5mbywgc2l6ZV90IHBjbGFzcyk7CisKKwl2b2lkIHBvcHVsYXRlKHN0ZDo6bGlzdDxpbWFnZV9zZXQ+IGNvbnN0ICYgbHNldCwKKwkJICAgICAgc3RkOjpzdHJpbmcgY29uc3QgJiBhcHBfaW1hZ2UsCisJCSAgICAgIHNpemVfdCBwY2xhc3MsIHByb2ZpbGVfY29udGFpbmVyIGNvbnN0ICYgcGMsCisJCSAgICAgIGJvb2wgZGVidWdfaW5mbywgYm9vbCBtZXJnZV9saWIpOworCXZvaWQgcG9wdWxhdGUoc3RkOjpsaXN0PHN0ZDo6c3RyaW5nPiBjb25zdCAmIGNnX2ZpbGVzLAorCQkgICAgICBzdGQ6OnN0cmluZyBjb25zdCAmIGFwcF9pbWFnZSwKKwkJICAgICAgc2l6ZV90IHBjbGFzcywgcHJvZmlsZV9jb250YWluZXIgY29uc3QgJiBwYywKKwkJICAgICAgYm9vbCBkZWJ1Z19pbmZvLCBib29sIG1lcmdlX2xpYik7CisKKwkvLy8gcmVjb3JkIGFsbCBtYWluIHN5bWJvbHMKKwl2b2lkIGFkZF9zeW1ib2xzKHByb2ZpbGVfY29udGFpbmVyIGNvbnN0ICYgcGMpOworCisJLy8vIENhY2hlZCB2YWx1ZSBvZiBzYW1wbGVzIGNvdW50LgorCWNvdW50X2FycmF5X3QgdG90YWxfY291bnQ7CisKKwkvLy8gQSBzdHJ1Y3R1cmVkIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjYWxsZ3JhcGguCisJYXJjX3JlY29yZGVyIHJlY29yZGVyOworCitwdWJsaWM6ICAvLyBGSVhNRQorCWV4dHJhX2ltYWdlcyBleHRyYV9mb3VuZF9pbWFnZXM7Cit9OworCisjZW5kaWYgLyogIUNBTExHUkFQSF9DT05UQUlORVJfSCAqLwpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvbGlicHAvZGlmZl9jb250YWluZXIuY3BwIGIvb3Byb2ZpbGUtMC45LjcvbGlicHAvZGlmZl9jb250YWluZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3NjI5MTYKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9saWJwcC9kaWZmX2NvbnRhaW5lci5jcHAKQEAgLTAsMCArMSwxNTkgQEAKKy8qKgorICogQGZpbGUgZGlmZl9jb250YWluZXIuY3BwCisgKiBDb250YWluZXIgZm9yIGRpZmZlZCBzeW1ib2xzCisgKgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwNSBPUHJvZmlsZSBhdXRob3JzCisgKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORworICoKKyAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQorICogQGF1dGhvciBKb2huIExldm9uCisgKi8KKworLyogb2xkZXIgZ2xpYmMgaGFzIEM5OSBJTkZJTklUWSBpbiBfR05VX1NPVVJDRSAqLworI2lmbmRlZiBfR05VX1NPVVJDRQorI2RlZmluZSBfR05VX1NPVVJDRQorI2VuZGlmCisKKyNpbmNsdWRlICJkaWZmX2NvbnRhaW5lci5oIgorCisjaW5jbHVkZSA8Y21hdGg+CisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisKKworbmFtZXNwYWNlIHsKKworCisvLy8gYSBjb21wYXJhdG9yIHN1aXRhYmxlIGZvciBkaWZmaW5nIHN5bWJvbHMKK2Jvb2wgcm91Z2hfbGVzcyhzeW1ib2xfZW50cnkgY29uc3QgJiBsaHMsIHN5bWJvbF9lbnRyeSBjb25zdCAmIHJocykKK3sKKwlpZiAobGhzLmltYWdlX25hbWUgIT0gcmhzLmltYWdlX25hbWUpCisJCXJldHVybiBsaHMuaW1hZ2VfbmFtZSA8IHJocy5pbWFnZV9uYW1lOworCisJaWYgKGxocy5hcHBfbmFtZSAhPSByaHMuYXBwX25hbWUpCisJCXJldHVybiBsaHMuYXBwX25hbWUgPCByaHMuYXBwX25hbWU7CisKKwlpZiAobGhzLm5hbWUgIT0gcmhzLm5hbWUpCisJCXJldHVybiBsaHMubmFtZSA8IHJocy5uYW1lOworCisJcmV0dXJuIGZhbHNlOworfQorCisKKy8vLyBwb3NzaWJseSBhZGQgYSBkaWZmIHN5bQordm9pZAorYWRkX3N5bShkaWZmX2NvbGxlY3Rpb24gJiBzeW1zLCBkaWZmX3N5bWJvbCBjb25zdCAmIHN5bSwKKyAgICAgICAgcHJvZmlsZV9jb250YWluZXI6OnN5bWJvbF9jaG9pY2UgJiBjaG9pY2UpCit7CisJaWYgKGNob2ljZS5tYXRjaF9pbWFnZQorCSAgICAmJiAoaW1hZ2VfbmFtZXMubmFtZShzeW0uaW1hZ2VfbmFtZSkgIT0gY2hvaWNlLmltYWdlX25hbWUpKQorCQlyZXR1cm47CisKKwlpZiAoZmFicyhzeW0uZGlmZnNbMF0pIDwgY2hvaWNlLnRocmVzaG9sZCkKKwkJcmV0dXJuOworCisJY2hvaWNlLmhpbnRzID0gc3ltLm91dHB1dF9oaW50KGNob2ljZS5oaW50cyk7CisJc3ltcy5wdXNoX2JhY2soc3ltKTsKK30KKworCisvLy8gYWRkIGEgc3ltYm9sIG5vdCBwcmVzZW50IGluIHRoZSBuZXcgcHJvZmlsZQordm9pZAorc3ltYm9sX29sZChkaWZmX2NvbGxlY3Rpb24gJiBzeW1zLCBzeW1ib2xfZW50cnkgY29uc3QgJiBzeW0sCisgICAgICAgICAgIHByb2ZpbGVfY29udGFpbmVyOjpzeW1ib2xfY2hvaWNlICYgY2hvaWNlKQoreworCWRpZmZfc3ltYm9sIHN5bWJvbChzeW0pOworCXN5bWJvbC5kaWZmcy5maWxsKHN5bS5zYW1wbGUuY291bnRzLnNpemUoKSwgLUlORklOSVRZKTsKKwlhZGRfc3ltKHN5bXMsIHN5bWJvbCwgY2hvaWNlKTsKK30KKworCisvLy8gYWRkIGEgc3ltYm9sIG5vdCBwcmVzZW50IGluIHRoZSBvbGQgcHJvZmlsZQordm9pZAorc3ltYm9sX25ldyhkaWZmX2NvbGxlY3Rpb24gJiBzeW1zLCBzeW1ib2xfZW50cnkgY29uc3QgJiBzeW0sCisgICAgICAgICAgIHByb2ZpbGVfY29udGFpbmVyOjpzeW1ib2xfY2hvaWNlICYgY2hvaWNlKQoreworCWRpZmZfc3ltYm9sIHN5bWJvbChzeW0pOworCXN5bWJvbC5kaWZmcy5maWxsKHN5bS5zYW1wbGUuY291bnRzLnNpemUoKSwgSU5GSU5JVFkpOworCWFkZF9zeW0oc3ltcywgc3ltYm9sLCBjaG9pY2UpOworfQorCisKKy8vLyBhZGQgYSBkaWZmZWQgc3ltYm9sCit2b2lkIHN5bWJvbF9kaWZmKGRpZmZfY29sbGVjdGlvbiAmIHN5bXMsCisgICAgICAgICAgICAgICAgIHN5bWJvbF9lbnRyeSBjb25zdCAmIHN5bTEsIGNvdW50X2FycmF5X3QgY29uc3QgJiB0b3RhbDEsCisgICAgICAgICAgICAgICAgIHN5bWJvbF9lbnRyeSBjb25zdCAmIHN5bTIsIGNvdW50X2FycmF5X3QgY29uc3QgJiB0b3RhbDIsCisgICAgICAgICAgICAgICAgIHByb2ZpbGVfY29udGFpbmVyOjpzeW1ib2xfY2hvaWNlICYgY2hvaWNlKQoreworCWRpZmZfc3ltYm9sIHN5bWJvbChzeW0yKTsKKworCXNpemVfdCBzaXplID0gc3ltMi5zYW1wbGUuY291bnRzLnNpemUoKTsKKwlmb3IgKHNpemVfdCBpID0gMDsgaSAhPSBzaXplOyArK2kpIHsKKwkJZG91YmxlIHBlcmNlbnQxOworCQlkb3VibGUgcGVyY2VudDI7CisJCXBlcmNlbnQxID0gb3BfcmF0aW8oc3ltMS5zYW1wbGUuY291bnRzW2ldLCB0b3RhbDFbaV0pOworCQlwZXJjZW50MiA9IG9wX3JhdGlvKHN5bTIuc2FtcGxlLmNvdW50c1tpXSwgdG90YWwyW2ldKTsKKwkJc3ltYm9sLmRpZmZzW2ldID0gb3BfcmF0aW8ocGVyY2VudDIgLSBwZXJjZW50MSwgcGVyY2VudDEpOworCQlzeW1ib2wuZGlmZnNbaV0gKj0gMTAwLjA7CisJfQorCisJYWRkX3N5bShzeW1zLCBzeW1ib2wsIGNob2ljZSk7Cit9CisKKworfTsgLy8gbmFtZXNwYWNlIGFub24KKworCitkaWZmX2NvbnRhaW5lcjo6ZGlmZl9jb250YWluZXIocHJvZmlsZV9jb250YWluZXIgY29uc3QgJiBjMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9maWxlX2NvbnRhaW5lciBjb25zdCAmIGMyKQorCTogcGMxKGMxKSwgcGMyKGMyKSwKKwkgIHRvdGFsMShwYzEuc2FtcGxlc19jb3VudCgpKSwgdG90YWwyKHBjMi5zYW1wbGVzX2NvdW50KCkpCit7Cit9CisKKworZGlmZl9jb2xsZWN0aW9uIGNvbnN0CitkaWZmX2NvbnRhaW5lcjo6Z2V0X3N5bWJvbHMocHJvZmlsZV9jb250YWluZXI6OnN5bWJvbF9jaG9pY2UgJiBjaG9pY2UpIGNvbnN0Cit7CisJZGlmZl9jb2xsZWN0aW9uIHN5bXM7CisKKwkvKgorCSAqIERvIGEgcGFpcndpc2UgY29tcGFyaXNvbiBvZiB0aGUgdHdvIHN5bWJvbCBzZXRzLiBXZSdyZQorCSAqIHJlbHlpbmcgaGVyZSBvbiB0aGUgc3ltYm9sIGNvbnRhaW5lciBiZWluZyBzb3J0ZWQgc3VjaAorCSAqIHRoYXQgcm91Z2hfbGVzcygpIGlzIHN1aXRhYmxlIGZvciBpdGVyYXRpbmcgdGhyb3VnaCB0aGUKKwkgKiB0d28gbGlzdHMgKHNlZSBsZXNzX3N5bWJvbCkuCisJICovCisKKwlzeW1ib2xfY29udGFpbmVyOjpzeW1ib2xzX3Q6Oml0ZXJhdG9yIGl0MSA9IHBjMS5iZWdpbl9zeW1ib2woKTsKKwlzeW1ib2xfY29udGFpbmVyOjpzeW1ib2xzX3Q6Oml0ZXJhdG9yIGVuZDEgPSBwYzEuZW5kX3N5bWJvbCgpOworCXN5bWJvbF9jb250YWluZXI6OnN5bWJvbHNfdDo6aXRlcmF0b3IgaXQyID0gcGMyLmJlZ2luX3N5bWJvbCgpOworCXN5bWJvbF9jb250YWluZXI6OnN5bWJvbHNfdDo6aXRlcmF0b3IgZW5kMiA9IHBjMi5lbmRfc3ltYm9sKCk7CisKKwl3aGlsZSAoaXQxICE9IGVuZDEgJiYgaXQyICE9IGVuZDIpIHsKKwkJaWYgKHJvdWdoX2xlc3MoKml0MSwgKml0MikpIHsKKwkJCXN5bWJvbF9vbGQoc3ltcywgKml0MSwgY2hvaWNlKTsKKwkJCSsraXQxOworCQl9IGVsc2UgaWYgKHJvdWdoX2xlc3MoKml0MiwgKml0MSkpIHsKKwkJCXN5bWJvbF9uZXcoc3ltcywgKml0MiwgY2hvaWNlKTsKKwkJCSsraXQyOworCQl9IGVsc2UgeworCQkJc3ltYm9sX2RpZmYoc3ltcywgKml0MSwgdG90YWwxLCAqaXQyLCB0b3RhbDIsIGNob2ljZSk7CisJCQkrK2l0MTsKKwkJCSsraXQyOworCQl9CisJfQorCisJZm9yICg7IGl0MSAhPSBlbmQxOyArK2l0MSkKKwkJc3ltYm9sX29sZChzeW1zLCAqaXQxLCBjaG9pY2UpOworCisJZm9yICg7IGl0MiAhPSBlbmQyOyArK2l0MikKKwkJc3ltYm9sX25ldyhzeW1zLCAqaXQyLCBjaG9pY2UpOworCisJcmV0dXJuIHN5bXM7Cit9CisKKworY291bnRfYXJyYXlfdCBjb25zdCBkaWZmX2NvbnRhaW5lcjo6c2FtcGxlc19jb3VudCgpIGNvbnN0Cit7CisJcmV0dXJuIHRvdGFsMjsKK30KZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2xpYnBwL2RpZmZfY29udGFpbmVyLmggYi9vcHJvZmlsZS0wLjkuNy9saWJwcC9kaWZmX2NvbnRhaW5lci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0YjQzMWQKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9saWJwcC9kaWZmX2NvbnRhaW5lci5oCkBAIC0wLDAgKzEsNTAgQEAKKy8qKgorICogQGZpbGUgZGlmZl9jb250YWluZXIuaAorICogQ29udGFpbmVyIGZvciBkaWZmZWQgc3ltYm9scworICoKKyAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDUgT1Byb2ZpbGUgYXV0aG9ycworICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKKyAqCisgKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKKyAqIEBhdXRob3IgSm9obiBMZXZvbgorICovCisKKyNpZm5kZWYgRElGRl9DT05UQUlORVJfSAorI2RlZmluZSBESUZGX0NPTlRBSU5FUl9ICisKKyNpbmNsdWRlICJwcm9maWxlX2NvbnRhaW5lci5oIgorCisKKy8qKgorICogU3RvcmUgdHdvIHByb2ZpbGVzIGZvciBkaWZmaW5nLgorICovCitjbGFzcyBkaWZmX2NvbnRhaW5lciA6IG5vbmNvcHlhYmxlIHsKK3B1YmxpYzoKKwkvLy8gcG9wdWxhdGUgdGhlIGNvbGxlY3Rpb24gb2YgZGlmZmVkIHN5bWJvbHMKKwlkaWZmX2NvbnRhaW5lcihwcm9maWxlX2NvbnRhaW5lciBjb25zdCAmIHBjMSwKKwkgICAgICAgICAgICAgICBwcm9maWxlX2NvbnRhaW5lciBjb25zdCAmIHBjMik7CisKKwl+ZGlmZl9jb250YWluZXIoKSB7fQorIAorCS8vLyByZXR1cm4gYSBjb2xsZWN0aW9uIG9mIGRpZmZlZCBzeW1ib2xzCisJZGlmZl9jb2xsZWN0aW9uIGNvbnN0CisJCWdldF9zeW1ib2xzKHByb2ZpbGVfY29udGFpbmVyOjpzeW1ib2xfY2hvaWNlICYgY2hvaWNlKSBjb25zdDsKKworCS8vLyB0b3RhbCBjb3VudCBmb3IgJ25ldycgcHJvZmlsZQorCWNvdW50X2FycmF5X3QgY29uc3Qgc2FtcGxlc19jb3VudCgpIGNvbnN0OworCitwcml2YXRlOgorCS8vLyBmaXJzdCBwcm9maWxlCisJcHJvZmlsZV9jb250YWluZXIgY29uc3QgJiBwYzE7CisKKwkvLy8gc2Vjb25kIHByb2ZpbGUKKwlwcm9maWxlX2NvbnRhaW5lciBjb25zdCAmIHBjMjsKKworCS8vLyBzYW1wbGVzIGNvdW50IGZvciBwYzEKKwljb3VudF9hcnJheV90IHRvdGFsMTsKKworCS8vLyBzYW1wbGVzIGNvdW50IGZvciBwYzIKKwljb3VudF9hcnJheV90IHRvdGFsMjsKK307CisKKyNlbmRpZiAvKiAhRElGRl9DT05UQUlORVJfSCAqLwpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvbGlicHAvZmlsZW5hbWVfc3BlYy5jcHAgYi9vcHJvZmlsZS0wLjkuNy9saWJwcC9maWxlbmFtZV9zcGVjLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmE3NGRiCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvbGlicHAvZmlsZW5hbWVfc3BlYy5jcHAKQEAgLTAsMCArMSw4MSBAQAorLyoqCisgKiBAZmlsZSBmaWxlbmFtZV9zcGVjLmNwcAorICogQ29udGFpbmVyIGhvbGRpbmcgYSBzYW1wbGUgZmlsZW5hbWUgc3BsaXQgaW50byBpdHMgY29tcG9uZW50cworICoKKyAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDMgT1Byb2ZpbGUgYXV0aG9ycworICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKKyAqCisgKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKKyAqLworCisjaW5jbHVkZSA8c3RyaW5nPgorCisjaW5jbHVkZSAiZmlsZW5hbWVfc3BlYy5oIgorI2luY2x1ZGUgInBhcnNlX2ZpbGVuYW1lLmgiCisjaW5jbHVkZSAiZ2VuZXJpY19zcGVjLmgiCisjaW5jbHVkZSAibG9jYXRlX2ltYWdlcy5oIgorCisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisKKworZmlsZW5hbWVfc3BlYzo6ZmlsZW5hbWVfc3BlYyhzdHJpbmcgY29uc3QgJiBmaWxlbmFtZSwKKwkJCSAgICAgZXh0cmFfaW1hZ2VzIGNvbnN0ICYgZXh0cmEpCit7CisJc2V0X3NhbXBsZV9maWxlbmFtZShmaWxlbmFtZSwgZXh0cmEpOworfQorCisKK2ZpbGVuYW1lX3NwZWM6OmZpbGVuYW1lX3NwZWMoKQorCTogaW1hZ2UoIioiKSwgbGliX2ltYWdlKCIqIikKK3sKK30KKworCitib29sIGZpbGVuYW1lX3NwZWM6Om1hdGNoKGZpbGVuYW1lX3NwZWMgY29uc3QgJiByaHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZyBjb25zdCAmIGJpbmFyeSkgY29uc3QKK3sKKwlpZiAoIXRpZC5tYXRjaChyaHMudGlkKSB8fCAhY3B1Lm1hdGNoKHJocy5jcHUpIHx8CisJICAgICF0Z2lkLm1hdGNoKHJocy50Z2lkKSB8fCBjb3VudCAhPSByaHMuY291bnQgfHwKKwkgICAgdW5pdG1hc2sgIT0gcmhzLnVuaXRtYXNrIHx8IGV2ZW50ICE9IHJocy5ldmVudCkgeworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJaWYgKGJpbmFyeS5lbXB0eSgpKQorCQlyZXR1cm4gaW1hZ2UgPT0gcmhzLmltYWdlICYmIGxpYl9pbWFnZSA9PSByaHMubGliX2ltYWdlOworCisJLy8gUFA6My4zIGlmIGJpbmFyeSBpcyBub3QgZW1wdHkgd2UgbXVzdCBtYXRjaCBlaXRoZXIgdGhlCisJLy8gbGliX25hbWUgaWYgcHJlc2VudCBvciB0aGUgaW1hZ2UgbmFtZQorCWlmICghcmhzLmxpYl9pbWFnZS5lbXB0eSgpKSB7CisJCS8vIEZJWE1FOiB1c2UgZm5tYXRjaCA/CisJCXJldHVybiByaHMubGliX2ltYWdlID09IGJpbmFyeTsKKwl9CisKKwkvLyBGSVhNRTogdXNlIGZubWF0Y2ggPworCXJldHVybiByaHMuaW1hZ2UgPT0gYmluYXJ5OworfQorCisKK3ZvaWQgZmlsZW5hbWVfc3BlYzo6c2V0X3NhbXBsZV9maWxlbmFtZShzdHJpbmcgY29uc3QgJiBmaWxlbmFtZSwKKwlleHRyYV9pbWFnZXMgY29uc3QgJiBleHRyYSkKK3sKKwlwYXJzZWRfZmlsZW5hbWUgcGFyc2VkID0gcGFyc2VfZmlsZW5hbWUoZmlsZW5hbWUsIGV4dHJhKTsKKworCWltYWdlID0gcGFyc2VkLmltYWdlOworCWxpYl9pbWFnZSA9IHBhcnNlZC5saWJfaW1hZ2U7CisJY2dfaW1hZ2UgPSBwYXJzZWQuY2dfaW1hZ2U7CisJZXZlbnQgPSBwYXJzZWQuZXZlbnQ7CisJY291bnQgPSBvcF9sZXhpY2FsX2Nhc3Q8aW50PihwYXJzZWQuY291bnQpOworCXVuaXRtYXNrID0gb3BfbGV4aWNhbF9jYXN0PHVuc2lnbmVkIGludD4ocGFyc2VkLnVuaXRtYXNrKTsKKwl0Z2lkLnNldChwYXJzZWQudGdpZCk7CisJdGlkLnNldChwYXJzZWQudGlkKTsKKwljcHUuc2V0KHBhcnNlZC5jcHUpOworfQorCisKK2Jvb2wgZmlsZW5hbWVfc3BlYzo6aXNfZGVwZW5kZW50KCkgY29uc3QKK3sKKwlpZiAoY2dfaW1hZ2UuZW1wdHkoKSkKKwkJcmV0dXJuIGltYWdlICE9IGxpYl9pbWFnZTsKKwlyZXR1cm4gY2dfaW1hZ2UgIT0gaW1hZ2UgfHwgY2dfaW1hZ2UgIT0gbGliX2ltYWdlOworfQpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvbGlicHAvZmlsZW5hbWVfc3BlYy5oIGIvb3Byb2ZpbGUtMC45LjcvbGlicHAvZmlsZW5hbWVfc3BlYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljNTBjNjAKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9saWJwcC9maWxlbmFtZV9zcGVjLmgKQEAgLTAsMCArMSw4NCBAQAorLyoqCisgKiBAZmlsZSBmaWxlbmFtZV9zcGVjLmgKKyAqIENvbnRhaW5lciBob2xkaW5nIGEgc2FtcGxlIGZpbGVuYW1lIHNwbGl0IGludG8gaXRzIGNvbXBvbmVudHMKKyAqCisgKiBAcmVtYXJrIENvcHlyaWdodCAyMDAzIE9Qcm9maWxlIGF1dGhvcnMKKyAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCisgKgorICogQGF1dGhvciBQaGlsaXBwZSBFbGllCisgKi8KKworI2lmbmRlZiBGSUxFTkFNRV9TUEVDX0gKKyNkZWZpbmUgRklMRU5BTUVfU1BFQ19ICisKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdHJpbmc+CisKKyNpbmNsdWRlICJnZW5lcmljX3NwZWMuaCIKKworY2xhc3MgcHJvZmlsZV9zcGVjOworY2xhc3MgZXh0cmFfaW1hZ2VzOworCisvKioKKyAqIEEgY2xhc3MgdG8gc3BsaXQgYW5kIHN0b3JlIGNvbXBvbmVudHMgb2YgYSBzYW1wbGUgZmlsZW5hbWUuCisgKiBUaGVzZSBkZXJpdmVkIHZhbHVlcyBhcmUgdGhlbiB1c2VkIHRvIG1hdGNoIGFnYWluc3QgYQorICogcHJvZmlsZV9zcGVjIGFzIGdpdmVuIGJ5IHRoZSB1c2VyLgorICovCitjbGFzcyBmaWxlbmFtZV9zcGVjCit7CisJZnJpZW5kIGNsYXNzIHByb2ZpbGVfc3BlYzsKKworcHVibGljOgorCS8qKgorCSAqIEBwYXJhbSBmaWxlbmFtZSAgdGhlIHNhbXBsZXMgZmlsZW5hbWUKKwkgKiBAcGFyYW0gZXh0cmEgIGV4dHJhIGJpbmFyeSBpbWFnZSBsb2NhdGlvbgorCSAqCisJICogYnVpbGQgYSBmaWxlbmFtZV9zcGVjIGZyb20gYSBzYW1wbGVzIGZpbGVuYW1lCisJICovCisJZmlsZW5hbWVfc3BlYyhzdGQ6OnN0cmluZyBjb25zdCAmIGZpbGVuYW1lLAorCQkgICAgICBleHRyYV9pbWFnZXMgY29uc3QgJiBleHRyYSk7CisKKwlmaWxlbmFtZV9zcGVjKCk7CisKKwkvKioKKwkgKiBAcGFyYW0gZmlsZW5hbWUgIGEgc2FtcGxlIGZpbGVuYW1lCisJICogQHBhcmFtIGV4dHJhICBleHRyYSBiaW5hcnkgaW1hZ2UgbG9jYXRpb24KKwkgKgorCSAqIHNldHVwIGZpbGVuYW1lIHNwZWMgYWNjb3JkaW5nIHRvIHRoZSBzYW1wbGVzIGZpbGVuYW1lLiBQUDozLjE5IHRvCisJICogMy4yNQorCSAqLworCXZvaWQgc2V0X3NhbXBsZV9maWxlbmFtZShzdGQ6OnN0cmluZyBjb25zdCAmIGZpbGVuYW1lLAorCQkJCSBleHRyYV9pbWFnZXMgY29uc3QgJiBleHRyYSk7CisKKwkvKioKKwkgKiBAcGFyYW0gcmhzICByaWdodCBoYW5kIHNpZGUgb2YgdGhlIG1hdGNoIG9wZXJhdG9yCisJICogQHBhcmFtIGJpbmFyeSAgaWYgYmluYXJ5IGlzIG5vbi1lbXB0eSwgYW5kIG1hdGNoZXMKKwkgKiB0aGUgYmluYXJ5IG9yIGxpYiBuYW1lLCB1c2UgaXQgcmF0aGVyIHRoYW4gdGhlCisJICogb25lIGluIHJocy4KKwkgKgorCSAqIHJldHVybiB0cnVlIGlmICp0aGlzIG1hdGNoIHJocywgbWF0Y2hpbmcgaWY6CisJICogIC0gaW1hZ2VfbmFtZSBhcmUgaWRlbnRpY2FsCisJICogIC0gbGliX25hbWUgYXJlIGlkZW50aWNhbAorCSAqICAtIGV2ZW50X3NwZWMgbWF0Y2gKKwkgKgorCSAqIFRoaXMgb3BlcmF0aW9uIGlzIG5vdCBjb21tdXRhdGl2ZS4gRmlyc3QgcGFydCBvZiBQUDozLjI0CisJICovCisJYm9vbCBtYXRjaChmaWxlbmFtZV9zcGVjIGNvbnN0ICYgcmhzLAorCSAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QgJiBiaW5hcnkpIGNvbnN0OworCisJYm9vbCBpc19kZXBlbmRlbnQoKSBjb25zdDsKKworcHJpdmF0ZToKKwlzdGQ6OnN0cmluZyBpbWFnZTsKKwlzdGQ6OnN0cmluZyBsaWJfaW1hZ2U7CisJc3RkOjpzdHJpbmcgY2dfaW1hZ2U7CisJc3RkOjpzdHJpbmcgZXZlbnQ7CisJaW50IGNvdW50OworCXVuc2lnbmVkIGludCB1bml0bWFzazsKKwlnZW5lcmljX3NwZWM8cGlkX3Q+IHRnaWQ7CisJZ2VuZXJpY19zcGVjPHBpZF90PiB0aWQ7CisJZ2VuZXJpY19zcGVjPGludD4gY3B1OworfTsKKworCisjZW5kaWYgLyogIUZJTEVOQU1FX1NQRUNfSCAqLwpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvbGlicHAvZm9ybWF0X2ZsYWdzLmggYi9vcHJvZmlsZS0wLjkuNy9saWJwcC9mb3JtYXRfZmxhZ3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjY4YWUxCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvbGlicHAvZm9ybWF0X2ZsYWdzLmgKQEAgLTAsMCArMSw2OSBAQAorLyoqCisgKiBAZmlsZSBmb3JtYXRfZmxhZ3MuaAorICogb3V0cHV0IG9wdGlvbnMKKyAqCisgKiBAcmVtYXJrIENvcHlyaWdodCAyMDAyIE9Qcm9maWxlIGF1dGhvcnMKKyAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCisgKgorICogQGF1dGhvciBKb2huIExldm9uCisgKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKKyAqLworCisjaWZuZGVmIEZPUk1BVF9GTEFHU19ICisjZGVmaW5lIEZPUk1BVF9GTEFHU19ICisKKy8qKgorICogZmxhZ3MgcGFzc2VkIHRvIHRoZSBjdG9yIG9mIGFuIG91dHB1dF9zeW1ib2wgb2JqZWN0LgorICoKKyAqIFxzYSBmb3JtYXRfb3V0cHV0Ojpmb3JtYXR0ZXIKKyAqLworZW51bSBmb3JtYXRfZmxhZ3MgeworCWZmX25vbmUgPSAwLAorCS8vLyBhIGZvcm1hdHRlZCBtZW1vcnkgYWRkcmVzcworCWZmX3ZtYSA9IDEgPDwgMCwKKwkvLy8gb3V0cHV0IGRlYnVnIGZpbGVuYW1lIGFuZCBsaW5lIG5yLgorCWZmX2xpbmVucl9pbmZvID0gMSA8PCAxLAorCS8vLyBvdXRwdXQgdGhlIGltYWdlIG5hbWUgZm9yIHRoaXMgbGluZQorCWZmX2ltYWdlX25hbWUgPSAxIDw8IDMsCisJLy8vIG91dHB1dCBvd25pbmcgYXBwbGljYXRpb24gbmFtZQorCWZmX2FwcF9uYW1lID0gMSA8PCA0LAorCS8vLyBvdXRwdXQgdGhlIChkZW1hbmdsZWQpIHN5bWJvbCBuYW1lCisJZmZfc3ltYl9uYW1lID0gMSA8PCA1LAorCisJLyoqIEBuYW1lIHN1YnNldCBvZiBmbGFncyB1c2VkIGJ5IG9wcmVwb3J0X2Zvcm1hdHRlciAqLworCS8vQHsKKwkvLy8gbnVtYmVyIG9mIHNhbXBsZXMKKwlmZl9ucl9zYW1wbGVzID0gMSA8PCA2LAorCS8vLyBudW1iZXIgb2Ygc2FtcGxlcyBhY2N1bXVsYXRlZAorCWZmX25yX3NhbXBsZXNfY3VtdWxhdGVkID0gMSA8PCA3LAorCS8vLyByZWxhdGl2ZSBwZXJjZW50YWdlIG9mIHNhbXBsZXMKKwlmZl9wZXJjZW50ID0gMSA8PCA4LAorCS8vLyByZWxhdGl2ZSBwZXJjZW50YWdlIG9mIHNhbXBsZXMgYWNjdW11bGF0ZWQKKwlmZl9wZXJjZW50X2N1bXVsYXRlZCA9IDEgPDwgOSwKKwkvKioKKwkgKiBPdXRwdXQgcGVyY2VudGFnZSBmb3IgZGV0YWlscywgbm90IHJlbGF0aXZlCisJICogdG8gc3ltYm9sIGJ1dCByZWxhdGl2ZSB0byB0aGUgdG90YWwgbnIgb2Ygc2FtcGxlcworCSAqLworCWZmX3BlcmNlbnRfZGV0YWlscyA9IDEgPDwgMTAsCisJLyoqCisJICogT3V0cHV0IHBlcmNlbnRhZ2UgZm9yIGRldGFpbHMsIG5vdCByZWxhdGl2ZQorCSAqIHRvIHN5bWJvbCBidXQgcmVsYXRpdmUgdG8gdGhlIHRvdGFsIG5yIG9mIHNhbXBsZXMsCisJICogYWNjdW11bGF0ZWQKKwkgKi8KKwlmZl9wZXJjZW50X2N1bXVsYXRlZF9kZXRhaWxzID0gMSA8PCAxMSwKKwkvLy8gb3V0cHV0IGRpZmYgdmFsdWUKKwlmZl9kaWZmID0gMSA8PCAxMiwKKwkvL0B9Cit9OworCisKKy8qKgorICogR2VuZXJhbCBoaW50cyBhYm91dCBmb3JtYXR0aW5nIG9mIHRoZSBjb2x1bW5hciBvdXRwdXQuCisgKi8KK2VudW0gY29sdW1uX2ZsYWdzIHsKKwljZl9ub25lID0gMCwKKwljZl82NGJpdF92bWEgPSAxIDw8IDAsCisJY2ZfaW1hZ2VfbmFtZSA9IDEgPDwgMQorfTsKKworI2VuZGlmIC8vIEZPUk1BVF9GTEFHU19ICmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9saWJwcC9mb3JtYXRfb3V0cHV0LmNwcCBiL29wcm9maWxlLTAuOS43L2xpYnBwL2Zvcm1hdF9vdXRwdXQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlNDJkYzgKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9saWJwcC9mb3JtYXRfb3V0cHV0LmNwcApAQCAtMCwwICsxLDEwNDkgQEAKKy8qKgorICogQGZpbGUgZm9ybWF0X291dHB1dC5jcHAKKyAqIG91dHB1dHRpbmcgZm9ybWF0IGZvciBzeW1ib2wgbGlzdHMKKyAqCisgKiBAcmVtYXJrIENvcHlyaWdodCAyMDAyIE9Qcm9maWxlIGF1dGhvcnMKKyAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCisgKgorICogQGF1dGhvciBQaGlsaXBwZSBFbGllCisgKiBAYXV0aG9yIEpvaG4gTGV2b24KKyAqLworCisvKiBvbGRlciBnbGliYyBoYXMgQzk5IElORklOSVRZIGluIF9HTlVfU09VUkNFICovCisjaWZuZGVmIF9HTlVfU09VUkNFCisjZGVmaW5lIF9HTlVfU09VUkNFCisjZW5kaWYKKworI2luY2x1ZGUgPGNhc3NlcnQ+CisjaW5jbHVkZSA8c3N0cmVhbT4KKyNpbmNsdWRlIDxpb21hbmlwPgorI2luY2x1ZGUgPGlvc3RyZWFtPgorI2luY2x1ZGUgPGNtYXRoPgorCisjaW5jbHVkZSAic3RyaW5nX21hbmlwLmgiCisjaW5jbHVkZSAic3RyaW5nX2ZpbHRlci5oIgorCisjaW5jbHVkZSAiZm9ybWF0X291dHB1dC5oIgorI2luY2x1ZGUgInByb2ZpbGVfY29udGFpbmVyLmgiCisjaW5jbHVkZSAiY2FsbGdyYXBoX2NvbnRhaW5lci5oIgorI2luY2x1ZGUgImRpZmZfY29udGFpbmVyLmgiCisjaW5jbHVkZSAiYXJyYW5nZV9wcm9maWxlcy5oIgorI2luY2x1ZGUgInhtbF9vdXRwdXQuaCIKKyNpbmNsdWRlICJ4bWxfdXRpbHMuaCIKKyNpbmNsdWRlICJjdmVyYi5oIgorCit1c2luZyBuYW1lc3BhY2Ugc3RkOworCituYW1lc3BhY2UgeworCisKK3N0cmluZyBjb25zdCBnZXRfbGluZW5yX2luZm8oZmlsZV9sb2NhdGlvbiBjb25zdCBmbG9jLCBib29sIGxmKQoreworCW9zdHJpbmdzdHJlYW0gb3V0OworCisJc3RyaW5nIGNvbnN0ICYgZmlsZW5hbWUgPSBsZgorCQk/IGRlYnVnX25hbWVzLm5hbWUoZmxvYy5maWxlbmFtZSkKKwkJOiBkZWJ1Z19uYW1lcy5iYXNlbmFtZShmbG9jLmZpbGVuYW1lKTsKKworCWlmICghZmlsZW5hbWUuZW1wdHkoKSkKKwkJb3V0IDw8IGZpbGVuYW1lIDw8ICI6IiA8PCBmbG9jLmxpbmVucjsKKwllbHNlIAorCQlvdXQgPDwgIihubyBsb2NhdGlvbiBpbmZvcm1hdGlvbikiOworCisJcmV0dXJuIG91dC5zdHIoKTsKK30KKworc3RyaW5nIGdldF92bWEoYmZkX3ZtYSB2bWEsIGJvb2wgdm1hXzY0KQoreworCW9zdHJpbmdzdHJlYW0gb3V0OworCWludCB3aWR0aCA9IHZtYV82NCA/IDE2IDogODsKKworCW91dCA8PCBoZXggPDwgc2V0dyh3aWR0aCkgPDwgc2V0ZmlsbCgnMCcpIDw8IHZtYTsKKworCXJldHVybiBvdXQuc3RyKCk7Cit9CisKK3N0cmluZyBnZXRfcGVyY2VudChjb3VudF90eXBlIGRpdmlkZW5kLCBjb3VudF90eXBlIGRpdmlzb3IpCit7CisJZG91YmxlIHJhdGlvID0gb3BfcmF0aW8oZGl2aWRlbmQsIGRpdmlzb3IpOworCisJcmV0dXJuIDo6Zm9ybWF0X3BlcmNlbnQocmF0aW8gKiAxMDAsIHBlcmNlbnRfaW50X3dpZHRoLAorCSAgICAgICAgICAgICAgICAgICAgIHBlcmNlbnRfZnJhY3Rfd2lkdGgpOworfQorCitib29sIGV4dHJhY3RfbGluZW5yX2luZm8oc3RyaW5nIGNvbnN0ICYgaW5mbywgc3RyaW5nICYgZmlsZSwgc2l6ZV90ICYgbGluZSkKK3sKKwlsaW5lID0gMDsKKwlmaWxlID0gIiI7CisJc3RyaW5nOjpzaXplX3R5cGUgY29sb25fcG9zID0gaW5mby5maW5kKCI6Iik7CisKKwlpZiAoY29sb25fcG9zID09IHN0cmluZzo6bnBvcykKKwkJcmV0dXJuIGZhbHNlOworCisJZmlsZSA9IGluZm8uc3Vic3RyKDAsIGNvbG9uX3Bvcyk7CisJaXN0cmluZ3N0cmVhbSBpc19pbmZvKGluZm8uc3Vic3RyKGNvbG9uX3BvcysxKSk7CisJaXNfaW5mbyA+PiBsaW5lOworCXJldHVybiB0cnVlOworfQorCisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCituYW1lc3BhY2UgZm9ybWF0X291dHB1dCB7CisKK2Zvcm1hdHRlcjo6Zm9ybWF0dGVyKGV4dHJhX2ltYWdlcyBjb25zdCAmIGV4dHJhKQorCToKKwlucl9jbGFzc2VzKDEpLAorCWZsYWdzKGZmX25vbmUpLAorCXZtYV82NChmYWxzZSksCisJbG9uZ19maWxlbmFtZXMoZmFsc2UpLAorCW5lZWRfaGVhZGVyKHRydWUpLAorCWV4dHJhX2ZvdW5kX2ltYWdlcyhleHRyYSkKK3sKKwlmb3JtYXRfbWFwW2ZmX3ZtYV0gPSBmaWVsZF9kZXNjcmlwdGlvbig5LCAidm1hIiwgJmZvcm1hdHRlcjo6Zm9ybWF0X3ZtYSk7CisJZm9ybWF0X21hcFtmZl9ucl9zYW1wbGVzXSA9IGZpZWxkX2Rlc2NyaXB0aW9uKDksICJzYW1wbGVzIiwgJmZvcm1hdHRlcjo6Zm9ybWF0X25yX3NhbXBsZXMpOworCWZvcm1hdF9tYXBbZmZfbnJfc2FtcGxlc19jdW11bGF0ZWRdID0gZmllbGRfZGVzY3JpcHRpb24oMTQsICJjdW0uIHNhbXBsZXMiLCAmZm9ybWF0dGVyOjpmb3JtYXRfbnJfY3VtdWxhdGVkX3NhbXBsZXMpOworCWZvcm1hdF9tYXBbZmZfcGVyY2VudF0gPSBmaWVsZF9kZXNjcmlwdGlvbig5LCAiJSIsICZmb3JtYXR0ZXI6OmZvcm1hdF9wZXJjZW50KTsKKwlmb3JtYXRfbWFwW2ZmX3BlcmNlbnRfY3VtdWxhdGVkXSA9IGZpZWxkX2Rlc2NyaXB0aW9uKDExLCAiY3VtLiAlIiwgJmZvcm1hdHRlcjo6Zm9ybWF0X2N1bXVsYXRlZF9wZXJjZW50KTsKKwlmb3JtYXRfbWFwW2ZmX2xpbmVucl9pbmZvXSA9IGZpZWxkX2Rlc2NyaXB0aW9uKDI4LCAibGluZW5yIGluZm8iLCAmZm9ybWF0dGVyOjpmb3JtYXRfbGluZW5yX2luZm8pOworCWZvcm1hdF9tYXBbZmZfaW1hZ2VfbmFtZV0gPSBmaWVsZF9kZXNjcmlwdGlvbigyNSwgImltYWdlIG5hbWUiLCAmZm9ybWF0dGVyOjpmb3JtYXRfaW1hZ2VfbmFtZSk7CisJZm9ybWF0X21hcFtmZl9hcHBfbmFtZV0gPSBmaWVsZF9kZXNjcmlwdGlvbigyNSwgImFwcCBuYW1lIiwgJmZvcm1hdHRlcjo6Zm9ybWF0X2FwcF9uYW1lKTsKKwlmb3JtYXRfbWFwW2ZmX3N5bWJfbmFtZV0gPSBmaWVsZF9kZXNjcmlwdGlvbigzMCwgInN5bWJvbCBuYW1lIiwgJmZvcm1hdHRlcjo6Zm9ybWF0X3N5bWJfbmFtZSk7CisJZm9ybWF0X21hcFtmZl9wZXJjZW50X2RldGFpbHNdID0gZmllbGRfZGVzY3JpcHRpb24oOSwgIiUiLCAmZm9ybWF0dGVyOjpmb3JtYXRfcGVyY2VudF9kZXRhaWxzKTsKKwlmb3JtYXRfbWFwW2ZmX3BlcmNlbnRfY3VtdWxhdGVkX2RldGFpbHNdID0gZmllbGRfZGVzY3JpcHRpb24oMTAsICJjdW0uICUiLCAmZm9ybWF0dGVyOjpmb3JtYXRfY3VtdWxhdGVkX3BlcmNlbnRfZGV0YWlscyk7CisJZm9ybWF0X21hcFtmZl9kaWZmXSA9IGZpZWxkX2Rlc2NyaXB0aW9uKDEwLCAiZGlmZiAlIiwgJmZvcm1hdHRlcjo6Zm9ybWF0X2RpZmYpOworfQorCisKK2Zvcm1hdHRlcjo6fmZvcm1hdHRlcigpCit7Cit9CisKKwordm9pZCBmb3JtYXR0ZXI6OnNldF9ucl9jbGFzc2VzKHNpemVfdCBucikKK3sKKwlucl9jbGFzc2VzID0gbnI7Cit9CisKKwordm9pZCBmb3JtYXR0ZXI6OmFkZF9mb3JtYXQoZm9ybWF0X2ZsYWdzIGZsYWcpCit7CisJZmxhZ3MgPSBzdGF0aWNfY2FzdDxmb3JtYXRfZmxhZ3M+KGZsYWdzIHwgZmxhZyk7Cit9CisKKwordm9pZCBmb3JtYXR0ZXI6OnNob3dfaGVhZGVyKGJvb2wgb25fb2ZmKQoreworCW5lZWRfaGVhZGVyID0gb25fb2ZmOworfQorIAorCit2b2lkIGZvcm1hdHRlcjo6dm1hX2Zvcm1hdF82NGJpdChib29sIG9uX29mZikKK3sKKwl2bWFfNjQgPSBvbl9vZmY7Cit9CisKKwordm9pZCBmb3JtYXR0ZXI6OnNob3dfbG9uZ19maWxlbmFtZXMoYm9vbCBvbl9vZmYpCit7CisJbG9uZ19maWxlbmFtZXMgPSBvbl9vZmY7Cit9CisKKwordm9pZCBmb3JtYXR0ZXI6OnNob3dfZ2xvYmFsX3BlcmNlbnQoYm9vbCBvbl9vZmYpCit7CisJZ2xvYmFsX3BlcmNlbnQgPSBvbl9vZmY7Cit9CisKKwordm9pZCBmb3JtYXR0ZXI6Om91dHB1dF9oZWFkZXIob3N0cmVhbSAmIG91dCkKK3sKKwlpZiAoIW5lZWRfaGVhZGVyKQorCQlyZXR1cm47CisKKwlzaXplX3QgcGFkZGluZyA9IDA7CisKKwkvLyBmaXJzdCBvdXRwdXQgdGhlIHZtYSBmaWVsZAorCWlmIChmbGFncyAmIGZmX3ZtYSkKKwkJcGFkZGluZyA9IG91dHB1dF9oZWFkZXJfZmllbGQob3V0LCBmZl92bWEsIHBhZGRpbmcpOworCisJLy8gdGhlIGZpZWxkIHJlcGVhdGVkIGZvciBlYWNoIHByb2ZpbGUgY2xhc3MKKwlmb3IgKHNpemVfdCBwY2xhc3MgPSAwIDsgcGNsYXNzIDwgbnJfY2xhc3NlczsgKytwY2xhc3MpIHsKKwkJaWYgKGZsYWdzICYgZmZfbnJfc2FtcGxlcykKKwkJCXBhZGRpbmcgPSBvdXRwdXRfaGVhZGVyX2ZpZWxkKG91dCwKKwkJCSAgICAgIGZmX25yX3NhbXBsZXMsIHBhZGRpbmcpOworCisJCWlmIChmbGFncyAmIGZmX25yX3NhbXBsZXNfY3VtdWxhdGVkKQorCQkJcGFkZGluZyA9IG91dHB1dF9oZWFkZXJfZmllbGQob3V0LCAKKwkJCSAgICAgICBmZl9ucl9zYW1wbGVzX2N1bXVsYXRlZCwgcGFkZGluZyk7CisKKwkJaWYgKGZsYWdzICYgZmZfcGVyY2VudCkKKwkJCXBhZGRpbmcgPSBvdXRwdXRfaGVhZGVyX2ZpZWxkKG91dCwKKwkJCSAgICAgICBmZl9wZXJjZW50LCBwYWRkaW5nKTsKKworCQlpZiAoZmxhZ3MgJiBmZl9wZXJjZW50X2N1bXVsYXRlZCkKKwkJCXBhZGRpbmcgPSBvdXRwdXRfaGVhZGVyX2ZpZWxkKG91dCwKKwkJCSAgICAgICBmZl9wZXJjZW50X2N1bXVsYXRlZCwgcGFkZGluZyk7CisKKwkJaWYgKGZsYWdzICYgZmZfZGlmZikKKwkJCXBhZGRpbmcgPSBvdXRwdXRfaGVhZGVyX2ZpZWxkKG91dCwKKwkJCQlmZl9kaWZmLCBwYWRkaW5nKTsKKworCQlpZiAoZmxhZ3MgJiBmZl9wZXJjZW50X2RldGFpbHMpCisJCQlwYWRkaW5nID0gb3V0cHV0X2hlYWRlcl9maWVsZChvdXQsCisJCQkgICAgICAgZmZfcGVyY2VudF9kZXRhaWxzLCBwYWRkaW5nKTsKKworCQlpZiAoZmxhZ3MgJiBmZl9wZXJjZW50X2N1bXVsYXRlZF9kZXRhaWxzKQorCQkJcGFkZGluZyA9IG91dHB1dF9oZWFkZXJfZmllbGQob3V0LAorCQkJICAgICAgIGZmX3BlcmNlbnRfY3VtdWxhdGVkX2RldGFpbHMsIHBhZGRpbmcpOworCX0KKworCS8vIG5vdyB0aGUgcmVtYWluaW5nIGZpZWxkCisJaWYgKGZsYWdzICYgZmZfbGluZW5yX2luZm8pCisJCXBhZGRpbmcgPSBvdXRwdXRfaGVhZGVyX2ZpZWxkKG91dCwgZmZfbGluZW5yX2luZm8sIHBhZGRpbmcpOworCisJaWYgKGZsYWdzICYgZmZfaW1hZ2VfbmFtZSkKKwkJcGFkZGluZyA9IG91dHB1dF9oZWFkZXJfZmllbGQob3V0LCBmZl9pbWFnZV9uYW1lLCBwYWRkaW5nKTsKKworCWlmIChmbGFncyAmIGZmX2FwcF9uYW1lKQorCQlwYWRkaW5nID0gb3V0cHV0X2hlYWRlcl9maWVsZChvdXQsIGZmX2FwcF9uYW1lLCBwYWRkaW5nKTsKKworCWlmIChmbGFncyAmIGZmX3N5bWJfbmFtZSkKKwkJcGFkZGluZyA9IG91dHB1dF9oZWFkZXJfZmllbGQob3V0LCBmZl9zeW1iX25hbWUsIHBhZGRpbmcpOworCisJb3V0IDw8ICJcbiI7Cit9CisKKworLy8vIGRlc2NyaWJlIGVhY2ggcG9zc2libGUgZmllbGQgb2YgY29sdW1tbmVkIG91dHB1dC4KKy8vIEZJWE1FOiB1c2UgJSBvZiB0aGUgc2NyZWVuIHdpZHRoIGhlcmUuIHN1bSBvZiAlIGVxdWFsIHRvIDEwMCwgdGhlbiBjYWxjdWxhdGUKKy8vIHJhdGlvIGJldHdlZW4gMTAwIGFuZCB0aGUgc2VsZWN0ZWQgJSB0byBncm93IG5vbiBmaXhlZCBmaWVsZCB1c2UgYWxzbworLy8gbGliW24/XWN1cnNlcyB0byBnZXQgdGhlIGNvbnNvbGUgd2lkdGggKGxvb2sgaW5mbyBzb3VyY2UpIChzbyBvbiBhZGQgYSBmaXhlZAorLy8gZmllbGQgZmxhZ3MpCitzaXplX3QgZm9ybWF0dGVyOjoKK291dHB1dF9maWVsZChvc3RyZWFtICYgb3V0LCBmaWVsZF9kYXR1bSBjb25zdCAmIGRhdHVtLAorICAgICAgICAgICAgIGZvcm1hdF9mbGFncyBmbCwgc2l6ZV90IHBhZGRpbmcsIGJvb2wgaGlkZV9pbW11dGFibGUpCit7CisJaWYgKCFoaWRlX2ltbXV0YWJsZSkgeworCQlvdXQgPDwgc3RyaW5nKHBhZGRpbmcsICcgJyk7CisKKwkJZmllbGRfZGVzY3JpcHRpb24gY29uc3QgJiBmaWVsZChmb3JtYXRfbWFwW2ZsXSk7CisJCXN0cmluZyBzdHIgPSAodGhpcy0+KmZpZWxkLmZvcm1hdHRlcikoZGF0dW0pOworCQlvdXQgPDwgc3RyOworCisJCS8vIGF0IGxlYXN0IG9uZSBzZXBhcmF0b3IgY2hhcgorCQlwYWRkaW5nID0gMTsKKwkJaWYgKHN0ci5sZW5ndGgoKSA8IGZpZWxkLndpZHRoKQorCQkJcGFkZGluZyA9IGZpZWxkLndpZHRoIC0gc3RyLmxlbmd0aCgpOworCX0gZWxzZSB7CisJCWZpZWxkX2Rlc2NyaXB0aW9uIGNvbnN0ICYgZmllbGQoZm9ybWF0X21hcFtmbF0pOworCQlwYWRkaW5nICs9IGZpZWxkLndpZHRoOworCX0KKworCXJldHVybiBwYWRkaW5nOworfQorCisgCitzaXplX3QgZm9ybWF0dGVyOjoKK291dHB1dF9oZWFkZXJfZmllbGQob3N0cmVhbSAmIG91dCwgZm9ybWF0X2ZsYWdzIGZsLCBzaXplX3QgcGFkZGluZykKK3sKKwlvdXQgPDwgc3RyaW5nKHBhZGRpbmcsICcgJyk7CisKKwlmaWVsZF9kZXNjcmlwdGlvbiBjb25zdCAmIGZpZWxkKGZvcm1hdF9tYXBbZmxdKTsKKwlvdXQgPDwgZmllbGQuaGVhZGVyX25hbWU7CisKKwkvLyBhdCBsZWFzdCBvbmUgc2VwYXJhdG9yIGNoYXIKKwlwYWRkaW5nID0gMTsKKwlpZiAoZmllbGQuaGVhZGVyX25hbWUubGVuZ3RoKCkgPCBmaWVsZC53aWR0aCkKKwkJcGFkZGluZyA9IGZpZWxkLndpZHRoIC0gZmllbGQuaGVhZGVyX25hbWUubGVuZ3RoKCk7CisKKwlyZXR1cm4gcGFkZGluZzsKK30KKyAKKworc3RyaW5nIGZvcm1hdHRlcjo6Zm9ybWF0X3ZtYShmaWVsZF9kYXR1bSBjb25zdCAmIGYpCit7CisJcmV0dXJuIGdldF92bWEoZi5zYW1wbGUudm1hLCB2bWFfNjQpOworfQorCisgCitzdHJpbmcgZm9ybWF0dGVyOjpmb3JtYXRfc3ltYl9uYW1lKGZpZWxkX2RhdHVtIGNvbnN0ICYgZikKK3sKKwlyZXR1cm4gc3ltYm9sX25hbWVzLmRlbWFuZ2xlKGYuc3ltYm9sLm5hbWUpOworfQorCisKK3N0cmluZyBmb3JtYXR0ZXI6OmZvcm1hdF9pbWFnZV9uYW1lKGZpZWxkX2RhdHVtIGNvbnN0ICYgZikKK3sKKwlyZXR1cm4gZ2V0X2ltYWdlX25hbWUoZi5zeW1ib2wuaW1hZ2VfbmFtZSwgCisJCWxvbmdfZmlsZW5hbWVzIAorCQkJPyBpbWFnZV9uYW1lX3N0b3JhZ2U6OmludF9yZWFsX2ZpbGVuYW1lCisJCQk6IGltYWdlX25hbWVfc3RvcmFnZTo6aW50X3JlYWxfYmFzZW5hbWUsCisJCWV4dHJhX2ZvdW5kX2ltYWdlcyk7Cit9CisKKyAKK3N0cmluZyBmb3JtYXR0ZXI6OmZvcm1hdF9hcHBfbmFtZShmaWVsZF9kYXR1bSBjb25zdCAmIGYpCit7CisJcmV0dXJuIGdldF9pbWFnZV9uYW1lKGYuc3ltYm9sLmFwcF9uYW1lLAorCQlsb25nX2ZpbGVuYW1lcyAKKwkJCT8gaW1hZ2VfbmFtZV9zdG9yYWdlOjppbnRfcmVhbF9maWxlbmFtZQorCQkJOiBpbWFnZV9uYW1lX3N0b3JhZ2U6OmludF9yZWFsX2Jhc2VuYW1lLAorCQlleHRyYV9mb3VuZF9pbWFnZXMpOworfQorCisgCitzdHJpbmcgZm9ybWF0dGVyOjpmb3JtYXRfbGluZW5yX2luZm8oZmllbGRfZGF0dW0gY29uc3QgJiBmKQoreworCXJldHVybiBnZXRfbGluZW5yX2luZm8oZi5zYW1wbGUuZmlsZV9sb2MsIGxvbmdfZmlsZW5hbWVzKTsKK30KKworIAorc3RyaW5nIGZvcm1hdHRlcjo6Zm9ybWF0X25yX3NhbXBsZXMoZmllbGRfZGF0dW0gY29uc3QgJiBmKQoreworCW9zdHJpbmdzdHJlYW0gb3V0OworCW91dCA8PCBmLnNhbXBsZS5jb3VudHNbZi5wY2xhc3NdOworCXJldHVybiBvdXQuc3RyKCk7Cit9CisKKyAKK3N0cmluZyBmb3JtYXR0ZXI6OmZvcm1hdF9ucl9jdW11bGF0ZWRfc2FtcGxlcyhmaWVsZF9kYXR1bSBjb25zdCAmIGYpCit7CisJaWYgKGYuZGlmZiA9PSAtSU5GSU5JVFkpCisJCXJldHVybiAiLS0tIjsKKwlvc3RyaW5nc3RyZWFtIG91dDsKKwlmLmNvdW50cy5jdW11bGF0ZWRfc2FtcGxlc1tmLnBjbGFzc10gKz0gZi5zYW1wbGUuY291bnRzW2YucGNsYXNzXTsKKwlvdXQgPDwgZi5jb3VudHMuY3VtdWxhdGVkX3NhbXBsZXNbZi5wY2xhc3NdOworCXJldHVybiBvdXQuc3RyKCk7Cit9CisKKyAKK3N0cmluZyBmb3JtYXR0ZXI6OmZvcm1hdF9wZXJjZW50KGZpZWxkX2RhdHVtIGNvbnN0ICYgZikKK3sKKwlpZiAoZi5kaWZmID09IC1JTkZJTklUWSkKKwkJcmV0dXJuICItLS0iOworCXJldHVybiBnZXRfcGVyY2VudChmLnNhbXBsZS5jb3VudHNbZi5wY2xhc3NdLCBmLmNvdW50cy50b3RhbFtmLnBjbGFzc10pOworfQorCisgCitzdHJpbmcgZm9ybWF0dGVyOjpmb3JtYXRfY3VtdWxhdGVkX3BlcmNlbnQoZmllbGRfZGF0dW0gY29uc3QgJiBmKQoreworCWlmIChmLmRpZmYgPT0gLUlORklOSVRZKQorCQlyZXR1cm4gIi0tLSI7CisJZi5jb3VudHMuY3VtdWxhdGVkX3BlcmNlbnRbZi5wY2xhc3NdICs9IGYuc2FtcGxlLmNvdW50c1tmLnBjbGFzc107CisKKwlyZXR1cm4gZ2V0X3BlcmNlbnQoZi5jb3VudHMuY3VtdWxhdGVkX3BlcmNlbnRbZi5wY2xhc3NdLAorCSAgICAgICAgICAgICAgICAgICBmLmNvdW50cy50b3RhbFtmLnBjbGFzc10pOworfQorCisgCitzdHJpbmcgZm9ybWF0dGVyOjpmb3JtYXRfcGVyY2VudF9kZXRhaWxzKGZpZWxkX2RhdHVtIGNvbnN0ICYgZikKK3sKKwlyZXR1cm4gZ2V0X3BlcmNlbnQoZi5zYW1wbGUuY291bnRzW2YucGNsYXNzXSwKKwkJZi5jb3VudHMudG90YWxbZi5wY2xhc3NdKTsKK30KKworIAorc3RyaW5nIGZvcm1hdHRlcjo6Zm9ybWF0X2N1bXVsYXRlZF9wZXJjZW50X2RldGFpbHMoZmllbGRfZGF0dW0gY29uc3QgJiBmKQoreworCWYuY291bnRzLmN1bXVsYXRlZF9wZXJjZW50X2RldGFpbHNbZi5wY2xhc3NdICs9IGYuc2FtcGxlLmNvdW50c1tmLnBjbGFzc107CisKKwlyZXR1cm4gZ2V0X3BlcmNlbnQoZi5jb3VudHMuY3VtdWxhdGVkX3BlcmNlbnRfZGV0YWlsc1tmLnBjbGFzc10sCisJICAgICAgICAgICAgICAgICAgIGYuY291bnRzLnRvdGFsW2YucGNsYXNzXSk7Cit9CisKKworc3RyaW5nIGZvcm1hdHRlcjo6Zm9ybWF0X2RpZmYoZmllbGRfZGF0dW0gY29uc3QgJiBmKQoreworCWlmIChmLmRpZmYgPT0gSU5GSU5JVFkpCisJCXJldHVybiAiKysrIjsKKwllbHNlIGlmIChmLmRpZmYgPT0gLUlORklOSVRZKQorCQlyZXR1cm4gIi0tLSI7CisKKwlyZXR1cm4gOjpmb3JtYXRfcGVyY2VudChmLmRpZmYsIHBlcmNlbnRfaW50X3dpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJjZW50X2ZyYWN0X3dpZHRoLCB0cnVlKTsKK30KKworCit2b2lkIGZvcm1hdHRlcjo6Citkb19vdXRwdXQob3N0cmVhbSAmIG91dCwgc3ltYm9sX2VudHJ5IGNvbnN0ICYgc3ltYiwgc2FtcGxlX2VudHJ5IGNvbnN0ICYgc2FtcGxlLAorICAgICAgICAgIGNvdW50c190ICYgYywgZGlmZl9hcnJheV90IGNvbnN0ICYgZGlmZnMsIGJvb2wgaGlkZV9pbW11dGFibGUpCit7CisJc2l6ZV90IHBhZGRpbmcgPSAwOworCisJLy8gZmlyc3Qgb3V0cHV0IHRoZSB2bWEgZmllbGQKKwlmaWVsZF9kYXR1bSBkYXR1bShzeW1iLCBzYW1wbGUsIDAsIGMsIGV4dHJhX2ZvdW5kX2ltYWdlcyk7CisJaWYgKGZsYWdzICYgZmZfdm1hKQorCQlwYWRkaW5nID0gb3V0cHV0X2ZpZWxkKG91dCwgZGF0dW0sIGZmX3ZtYSwgcGFkZGluZywgZmFsc2UpOworCisJLy8gcmVwZWF0ZWQgZmllbGRzIGZvciBlYWNoIHByb2ZpbGUgY2xhc3MKKwlmb3IgKHNpemVfdCBwY2xhc3MgPSAwIDsgcGNsYXNzIDwgbnJfY2xhc3NlczsgKytwY2xhc3MpIHsKKwkJZmllbGRfZGF0dW0gZGF0dW0oc3ltYiwgc2FtcGxlLCBwY2xhc3MsIGMsCisJCQkJICBleHRyYV9mb3VuZF9pbWFnZXMsIGRpZmZzW3BjbGFzc10pOworCisJCWlmIChmbGFncyAmIGZmX25yX3NhbXBsZXMpCisJCQlwYWRkaW5nID0gb3V0cHV0X2ZpZWxkKG91dCwgZGF0dW0sCisJCQkgICAgICAgZmZfbnJfc2FtcGxlcywgcGFkZGluZywgZmFsc2UpOworCisJCWlmIChmbGFncyAmIGZmX25yX3NhbXBsZXNfY3VtdWxhdGVkKQorCQkJcGFkZGluZyA9IG91dHB1dF9maWVsZChvdXQsIGRhdHVtLCAKKwkJCSAgICAgICBmZl9ucl9zYW1wbGVzX2N1bXVsYXRlZCwgcGFkZGluZywgZmFsc2UpOworCisJCWlmIChmbGFncyAmIGZmX3BlcmNlbnQpCisJCQlwYWRkaW5nID0gb3V0cHV0X2ZpZWxkKG91dCwgZGF0dW0sCisJCQkgICAgICAgZmZfcGVyY2VudCwgcGFkZGluZywgZmFsc2UpOworCisJCWlmIChmbGFncyAmIGZmX3BlcmNlbnRfY3VtdWxhdGVkKQorCQkJcGFkZGluZyA9IG91dHB1dF9maWVsZChvdXQsIGRhdHVtLAorCQkJICAgICAgIGZmX3BlcmNlbnRfY3VtdWxhdGVkLCBwYWRkaW5nLCBmYWxzZSk7CisKKwkJaWYgKGZsYWdzICYgZmZfZGlmZikKKwkJCXBhZGRpbmcgPSBvdXRwdXRfZmllbGQob3V0LCBkYXR1bSwKKwkJCQlmZl9kaWZmLCBwYWRkaW5nLCBmYWxzZSk7CisKKwkJaWYgKGZsYWdzICYgZmZfcGVyY2VudF9kZXRhaWxzKQorCQkJcGFkZGluZyA9IG91dHB1dF9maWVsZChvdXQsIGRhdHVtLAorCQkJICAgICAgIGZmX3BlcmNlbnRfZGV0YWlscywgcGFkZGluZywgZmFsc2UpOworCisJCWlmIChmbGFncyAmIGZmX3BlcmNlbnRfY3VtdWxhdGVkX2RldGFpbHMpCisJCQlwYWRkaW5nID0gb3V0cHV0X2ZpZWxkKG91dCwgZGF0dW0sCisJCQkgICAgICAgZmZfcGVyY2VudF9jdW11bGF0ZWRfZGV0YWlscywgcGFkZGluZywgZmFsc2UpOworCX0KKworCS8vIG5vdyB0aGUgcmVtYWluaW5nIGZpZWxkCisJaWYgKGZsYWdzICYgZmZfbGluZW5yX2luZm8pCisJCXBhZGRpbmcgPSBvdXRwdXRfZmllbGQob3V0LCBkYXR1bSwgZmZfbGluZW5yX2luZm8sCisJCSAgICAgICBwYWRkaW5nLCBmYWxzZSk7CisKKwlpZiAoZmxhZ3MgJiBmZl9pbWFnZV9uYW1lKQorCQlwYWRkaW5nID0gb3V0cHV0X2ZpZWxkKG91dCwgZGF0dW0sIGZmX2ltYWdlX25hbWUsCisJCSAgICAgICBwYWRkaW5nLCBoaWRlX2ltbXV0YWJsZSk7CisKKwlpZiAoZmxhZ3MgJiBmZl9hcHBfbmFtZSkKKwkJcGFkZGluZyA9IG91dHB1dF9maWVsZChvdXQsIGRhdHVtLCBmZl9hcHBfbmFtZSwKKwkJICAgICAgIHBhZGRpbmcsIGhpZGVfaW1tdXRhYmxlKTsKKworCWlmIChmbGFncyAmIGZmX3N5bWJfbmFtZSkKKwkJcGFkZGluZyA9IG91dHB1dF9maWVsZChvdXQsIGRhdHVtLCBmZl9zeW1iX25hbWUsCisJCSAgICAgICBwYWRkaW5nLCBoaWRlX2ltbXV0YWJsZSk7CisKKwlvdXQgPDwgIlxuIjsKK30KKworCitvcHJlcG9ydF9mb3JtYXR0ZXI6Om9wcmVwb3J0X2Zvcm1hdHRlcihwcm9maWxlX2NvbnRhaW5lciBjb25zdCAmIHApCisJOgorCWZvcm1hdHRlcihwLmV4dHJhX2ZvdW5kX2ltYWdlcyksCisJcHJvZmlsZShwKSwKKwluZWVkX2RldGFpbHMoZmFsc2UpCit7CisJY291bnRzLnRvdGFsID0gcHJvZmlsZS5zYW1wbGVzX2NvdW50KCk7Cit9CisKKyAKK3ZvaWQgb3ByZXBvcnRfZm9ybWF0dGVyOjpzaG93X2RldGFpbHMoYm9vbCBvbl9vZmYpCit7CisJbmVlZF9kZXRhaWxzID0gb25fb2ZmOworfQorCisKK3ZvaWQgb3ByZXBvcnRfZm9ybWF0dGVyOjpvdXRwdXQob3N0cmVhbSAmIG91dCwgc3ltYm9sX2VudHJ5IGNvbnN0ICogc3ltYikKK3sKKwlkb19vdXRwdXQob3V0LCAqc3ltYiwgc3ltYi0+c2FtcGxlLCBjb3VudHMpOworCisJaWYgKG5lZWRfZGV0YWlscykKKwkJb3V0cHV0X2RldGFpbHMob3V0LCBzeW1iKTsKK30KKworCit2b2lkIG9wcmVwb3J0X2Zvcm1hdHRlcjo6CitvdXRwdXQob3N0cmVhbSAmIG91dCwgc3ltYm9sX2NvbGxlY3Rpb24gY29uc3QgJiBzeW1zKQoreworCW91dHB1dF9oZWFkZXIob3V0KTsKKworCXN5bWJvbF9jb2xsZWN0aW9uOjpjb25zdF9pdGVyYXRvciBpdCA9IHN5bXMuYmVnaW4oKTsKKwlzeW1ib2xfY29sbGVjdGlvbjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gc3ltcy5lbmQoKTsKKwlmb3IgKDsgaXQgIT0gZW5kOyArK2l0KQorCQlvdXRwdXQob3V0LCAqaXQpOworfQorCisKK3ZvaWQgb3ByZXBvcnRfZm9ybWF0dGVyOjoKK291dHB1dF9kZXRhaWxzKG9zdHJlYW0gJiBvdXQsIHN5bWJvbF9lbnRyeSBjb25zdCAqIHN5bWIpCit7CisJY291bnRzX3QgYyA9IGNvdW50czsKKworCWlmICghZ2xvYmFsX3BlcmNlbnQpCisJCWMudG90YWwgPSBzeW1iLT5zYW1wbGUuY291bnRzOworCisJLy8gY3VtdWxhdGVkIHBlcmNlbnQgYXJlIHJlbGF0aXZlIHRvIGN1cnJlbnQgc3ltYm9sLgorCWMuY3VtdWxhdGVkX3NhbXBsZXMgPSBjb3VudF9hcnJheV90KCk7CisJYy5jdW11bGF0ZWRfcGVyY2VudCA9IGNvdW50X2FycmF5X3QoKTsKKworCXNhbXBsZV9jb250YWluZXI6OnNhbXBsZXNfaXRlcmF0b3IgaXQgPSBwcm9maWxlLmJlZ2luKHN5bWIpOworCXNhbXBsZV9jb250YWluZXI6OnNhbXBsZXNfaXRlcmF0b3IgZW5kID0gcHJvZmlsZS5lbmQoc3ltYik7CisJZm9yICg7IGl0ICE9IGVuZDsgKytpdCkgeworCQlvdXQgPDwgIiAgIjsKKwkJZG9fb3V0cHV0KG91dCwgKnN5bWIsIGl0LT5zZWNvbmQsIGMsIGRpZmZfYXJyYXlfdCgpLCB0cnVlKTsKKwl9Cit9CisKKyAKK2NnX2Zvcm1hdHRlcjo6Y2dfZm9ybWF0dGVyKGNhbGxncmFwaF9jb250YWluZXIgY29uc3QgJiBwcm9maWxlKQorCToKKwlmb3JtYXR0ZXIocHJvZmlsZS5leHRyYV9mb3VuZF9pbWFnZXMpCit7CisJY291bnRzLnRvdGFsID0gcHJvZmlsZS5zYW1wbGVzX2NvdW50KCk7Cit9CisKKwordm9pZCBjZ19mb3JtYXR0ZXI6Om91dHB1dChvc3RyZWFtICYgb3V0LCBzeW1ib2xfY29sbGVjdGlvbiBjb25zdCAmIHN5bXMpCit7CisJLy8gYW1vdW50IG9mIHNwYWNpbmcgcHJlZml4aW5nIGNoaWxkIGFuZCBwYXJlbnQgbGluZXMKKwlzdHJpbmcgY29uc3QgY2hpbGRfcGFyZW50X3ByZWZpeCgiICAiKTsKKworCW91dHB1dF9oZWFkZXIob3V0KTsKKworCW91dCA8PCBzdHJpbmcoNzksICctJykgPDwgZW5kbDsKKworCXN5bWJvbF9jb2xsZWN0aW9uOjpjb25zdF9pdGVyYXRvciBpdDsKKwlzeW1ib2xfY29sbGVjdGlvbjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gc3ltcy5lbmQoKTsKKworCWZvciAoaXQgPSBzeW1zLmJlZ2luKCk7IGl0IDwgZW5kOyArK2l0KSB7CisJCWNnX3N5bWJvbCBjb25zdCAqIHN5bSA9IGR5bmFtaWNfY2FzdDxjZ19zeW1ib2wgY29uc3QgKj4oKml0KTsKKworCQljZ19zeW1ib2w6OmNoaWxkcmVuOjpjb25zdF9pdGVyYXRvciBjaXQ7CisJCWNnX3N5bWJvbDo6Y2hpbGRyZW46OmNvbnN0X2l0ZXJhdG9yIGNlbmQgPSBzeW0tPmNhbGxlcnMuZW5kKCk7CisKKwkJY291bnRzX3QgYzsKKwkJaWYgKGdsb2JhbF9wZXJjZW50KQorCQkJYy50b3RhbCA9IGNvdW50cy50b3RhbDsKKwkJZWxzZQorCQkJYy50b3RhbCA9IHN5bS0+dG90YWxfY2FsbGVyX2NvdW50OworCisJCWZvciAoY2l0ID0gc3ltLT5jYWxsZXJzLmJlZ2luKCk7IGNpdCAhPSBjZW5kOyArK2NpdCkgeworCQkJb3V0IDw8IGNoaWxkX3BhcmVudF9wcmVmaXg7CisJCQlkb19vdXRwdXQob3V0LCAqY2l0LCBjaXQtPnNhbXBsZSwgYyk7CisJCX0KKworCQlkb19vdXRwdXQob3V0LCAqc3ltLCBzeW0tPnNhbXBsZSwgY291bnRzKTsKKworCQljID0gY291bnRzX3QoKTsKKwkJaWYgKGdsb2JhbF9wZXJjZW50KQorCQkJYy50b3RhbCA9IGNvdW50cy50b3RhbDsKKwkJZWxzZQorCQkJYy50b3RhbCA9IHN5bS0+dG90YWxfY2FsbGVlX2NvdW50OworCisJCWNlbmQgPSBzeW0tPmNhbGxlZXMuZW5kKCk7CisKKwkJZm9yIChjaXQgPSBzeW0tPmNhbGxlZXMuYmVnaW4oKTsgY2l0ICE9IGNlbmQ7ICsrY2l0KSB7CisJCQlvdXQgPDwgY2hpbGRfcGFyZW50X3ByZWZpeDsKKwkJCWRvX291dHB1dChvdXQsICpjaXQsIGNpdC0+c2FtcGxlLCBjKTsKKwkJfQorCisJCW91dCA8PCBzdHJpbmcoNzksICctJykgPDwgZW5kbDsKKwl9Cit9CisKKworZGlmZl9mb3JtYXR0ZXI6OmRpZmZfZm9ybWF0dGVyKGRpZmZfY29udGFpbmVyIGNvbnN0ICYgcHJvZmlsZSwKKwkJCSAgICAgICBleHRyYV9pbWFnZXMgY29uc3QgJiBleHRyYSkKKwk6CisJZm9ybWF0dGVyKGV4dHJhKQoreworCWNvdW50cy50b3RhbCA9IHByb2ZpbGUuc2FtcGxlc19jb3VudCgpOworfQorCisKK3ZvaWQgZGlmZl9mb3JtYXR0ZXI6Om91dHB1dChvc3RyZWFtICYgb3V0LCBkaWZmX2NvbGxlY3Rpb24gY29uc3QgJiBzeW1zKQoreworCW91dHB1dF9oZWFkZXIob3V0KTsKKworCWRpZmZfY29sbGVjdGlvbjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBzeW1zLmJlZ2luKCk7CisJZGlmZl9jb2xsZWN0aW9uOjpjb25zdF9pdGVyYXRvciBlbmQgPSBzeW1zLmVuZCgpOworCWZvciAoOyBpdCAhPSBlbmQ7ICsraXQpCisJCWRvX291dHB1dChvdXQsICppdCwgaXQtPnNhbXBsZSwgY291bnRzLCBpdC0+ZGlmZnMpOworfQorCisvLyBsb2NhbCB2YXJpYWJsZXMgdXNlZCBpbiBnZW5lcmF0aW9uIG9mIFhNTAorLy8gYnVmZmVyIGRldGFpbHMgZm9yIG91dHB1dCBsYXRlcgorb3N0cmluZ3N0cmVhbSBieXRlc19vdXQ7CisKKy8vIG1vZHVsZStzeW1ib2wgdGFibGUgZm9yIGRldGVjdGluZyBkdXBsaWNhdGUgc3ltYm9scworbWFwPHN0cmluZywgc2l6ZV90PiBzeW1ib2xfZGF0YV90YWJsZTsKK3NpemVfdCBzeW1ib2xfZGF0YV9pbmRleCA9IDA7CisKKy8qIFJldHVybiBhbnkgZXhpc3RpbmcgaW5kZXggb3IgYWRkIHRvIHRoZSB0YWJsZSAqLworc2l6ZV90IHhtbF9nZXRfc3ltYm9sX2luZGV4KHN0cmluZyBjb25zdCAmIG5hbWUpCit7CisJc2l6ZV90IGluZGV4ID0gc3ltYm9sX2RhdGFfaW5kZXg7CisJbWFwPHN0cmluZywgc2l6ZV90Pjo6aXRlcmF0b3IgaXQgPSBzeW1ib2xfZGF0YV90YWJsZS5maW5kKG5hbWUpOworCisJaWYgKGl0ID09IHN5bWJvbF9kYXRhX3RhYmxlLmVuZCgpKSB7CisJCXN5bWJvbF9kYXRhX3RhYmxlW25hbWVdID0gc3ltYm9sX2RhdGFfaW5kZXgrKzsKKwkJcmV0dXJuIGluZGV4OworCX0KKworCXJldHVybiBpdC0+c2Vjb25kOworfQorCisKK2NsYXNzIHN5bWJvbF9kZXRhaWxzX3QgeworcHVibGljOgorCXN5bWJvbF9kZXRhaWxzX3QoKSB7IHNpemUgPSBpbmRleCA9IDA7IGlkID0gLTE7IH0KKwlpbnQgaWQ7CisJc2l6ZV90IHNpemU7CisJc2l6ZV90IGluZGV4OworCXN0cmluZyBkZXRhaWxzOworfTsKKwordHlwZWRlZiBncm93YWJsZV92ZWN0b3I8c3ltYm9sX2RldGFpbHNfdD4gc3ltYm9sX2RldGFpbHNfYXJyYXlfdDsKK3N5bWJvbF9kZXRhaWxzX2FycmF5X3Qgc3ltYm9sX2RldGFpbHM7CitzaXplX3QgZGV0YWlsX3RhYmxlX2luZGV4ID0gMDsKKworeG1sX2Zvcm1hdHRlcjo6Cit4bWxfZm9ybWF0dGVyKHByb2ZpbGVfY29udGFpbmVyIGNvbnN0ICogcCwKKwkgICAgICBzeW1ib2xfY29sbGVjdGlvbiAmIHMsIGV4dHJhX2ltYWdlcyBjb25zdCAmIGV4dHJhLAorCSAgICAgIHN0cmluZ19maWx0ZXIgY29uc3QgJiBzZikKKwk6CisJZm9ybWF0dGVyKGV4dHJhKSwKKwlwcm9maWxlKHApLAorCXN5bWJvbHMocyksCisJbmVlZF9kZXRhaWxzKGZhbHNlKSwKKwlzeW1ib2xfZmlsdGVyKHNmKQoreworCWlmIChwcm9maWxlKQorCQljb3VudHMudG90YWwgPSBwcm9maWxlLT5zYW1wbGVzX2NvdW50KCk7Cit9CisKKwordm9pZCB4bWxfZm9ybWF0dGVyOjoKK3Nob3dfZGV0YWlscyhib29sIG9uX29mZikKK3sKKwluZWVkX2RldGFpbHMgPSBvbl9vZmY7Cit9CisKKwordm9pZCB4bWxfZm9ybWF0dGVyOjpvdXRwdXQob3N0cmVhbSAmIG91dCkKK3sKKwl4bWxfc3VwcG9ydC0+YnVpbGRfc3ViY2xhc3NlcyhvdXQpOworCisJeG1sX3N1cHBvcnQtPm91dHB1dF9wcm9ncmFtX3N0cnVjdHVyZShvdXQpOworCW91dHB1dF9zeW1ib2xfZGF0YShvdXQpOworCWlmIChuZWVkX2RldGFpbHMpIHsKKwkJb3V0IDw8IG9wZW5fZWxlbWVudChERVRBSUxfVEFCTEUpOworCQlmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN5bWJvbF9kZXRhaWxzLnNpemUoKTsgKytpKSB7CisJCQlpbnQgaWQgPSBzeW1ib2xfZGV0YWlsc1tpXS5pZDsKKworCQkJaWYgKGlkID49IDApIHsKKwkJCQlvdXQgPDwgb3Blbl9lbGVtZW50KFNZTUJPTF9ERVRBSUxTLCB0cnVlKTsKKwkJCQlvdXQgPDwgaW5pdF9hdHRyKFRBQkxFX0lELCAoc2l6ZV90KWlkKTsKKwkJCQlvdXQgPDwgY2xvc2VfZWxlbWVudChOT05FLCB0cnVlKTsKKwkJCQlvdXQgPDwgc3ltYm9sX2RldGFpbHNbaV0uZGV0YWlsczsKKwkJCQlvdXQgPDwgY2xvc2VfZWxlbWVudChTWU1CT0xfREVUQUlMUyk7CisJCQl9CisJCX0KKwkJb3V0IDw8IGNsb3NlX2VsZW1lbnQoREVUQUlMX1RBQkxFKTsKKworCQkvLyBvdXRwdXQgYnl0ZXNUYWJsZQorCQlvdXQgPDwgb3Blbl9lbGVtZW50KEJZVEVTX1RBQkxFKTsKKwkJb3V0IDw8IGJ5dGVzX291dC5zdHIoKTsKKwkJb3V0IDw8IGNsb3NlX2VsZW1lbnQoQllURVNfVEFCTEUpOworCX0KKworCW91dCA8PCBjbG9zZV9lbGVtZW50KFBST0ZJTEUpOworfQorCitib29sCit4bWxfZm9ybWF0dGVyOjpnZXRfYmZkX29iamVjdChzeW1ib2xfZW50cnkgY29uc3QgKiBzeW1iLCBvcF9iZmQgKiAmIGFiZmQpIGNvbnN0Cit7CisJYm9vbCBvayA9IHRydWU7CisKKwlzdHJpbmcgY29uc3QgJiBpbWFnZV9uYW1lID0gZ2V0X2ltYWdlX25hbWUoc3ltYi0+aW1hZ2VfbmFtZSwKKwkJaW1hZ2VfbmFtZV9zdG9yYWdlOjppbnRfZmlsZW5hbWUsIGV4dHJhX2ZvdW5kX2ltYWdlcyk7CisJaWYgKHN5bWItPnNwdV9vZmZzZXQpIHsKKwkJLy8gRklYTUU6IHdoYXQgYWJvdXQgYXJjaGl2ZTp0bXAsIGFjdHVhbGx5IGl0J3Mgbm90IHN1cHBvcnRlZAorCQkvLyBmb3Igc3B1IHNpbmNlIG9wYXJjaGl2ZSBkb2Vzbid0IGFyY2hpdmUgdGhlIHJlYWwgZmlsZSBidXQKKwkJLy8gaW4gZnV0dXJlIGl0IHdvdWxkIHdvcmsgPworCQlzdHJpbmcgdG1wID0gZ2V0X2ltYWdlX25hbWUoc3ltYi0+ZW1iZWRkaW5nX2ZpbGVuYW1lLCAKKwkJCWltYWdlX25hbWVfc3RvcmFnZTo6aW50X2ZpbGVuYW1lLCBleHRyYV9mb3VuZF9pbWFnZXMpOworCQlpZiAoYWJmZCAmJiBhYmZkLT5nZXRfZmlsZW5hbWUoKSA9PSB0bXApCisJCQlyZXR1cm4gdHJ1ZTsKKwkJZGVsZXRlIGFiZmQ7CisJCWFiZmQgPSBuZXcgb3BfYmZkKHN5bWItPnNwdV9vZmZzZXQsIHRtcCwKKwkJCQkgIHN5bWJvbF9maWx0ZXIsIGV4dHJhX2ZvdW5kX2ltYWdlcywgb2spOworCX0gZWxzZSB7CisJCWlmIChhYmZkICYmIGFiZmQtPmdldF9maWxlbmFtZSgpID09IGltYWdlX25hbWUpCisJCQlyZXR1cm4gdHJ1ZTsKKwkJZGVsZXRlIGFiZmQ7CisJCWFiZmQgPSBuZXcgb3BfYmZkKGltYWdlX25hbWUsIHN5bWJvbF9maWx0ZXIsCisJCQkJICBleHRyYV9mb3VuZF9pbWFnZXMsIG9rKTsKKworCX0KKworCWlmICghb2spIHsKKwkJcmVwb3J0X2ltYWdlX2Vycm9yKGltYWdlX25hbWUsIGltYWdlX2Zvcm1hdF9mYWlsdXJlLAorCQkJCSAgIGZhbHNlLCBleHRyYV9mb3VuZF9pbWFnZXMpOworCQlkZWxldGUgYWJmZDsKKwkJYWJmZCA9IDA7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlyZXR1cm4gdHJ1ZTsKK30KKwordm9pZCB4bWxfZm9ybWF0dGVyOjoKK291dHB1dF90aGVfc3ltYm9sX2RhdGEob3N0cmVhbSAmIG91dCwgc3ltYm9sX2VudHJ5IGNvbnN0ICogc3ltYiwgb3BfYmZkICogJiBhYmZkKQoreworCXN0cmluZyBjb25zdCBuYW1lID0gc3ltYm9sX25hbWVzLm5hbWUoc3ltYi0+bmFtZSk7CisJYXNzZXJ0KG5hbWUuc2l6ZSgpID4gMCk7CisKKwlzdHJpbmcgY29uc3QgaW1hZ2UgPSBnZXRfaW1hZ2VfbmFtZShzeW1iLT5pbWFnZV9uYW1lLAorCQlpbWFnZV9uYW1lX3N0b3JhZ2U6OmludF9maWxlbmFtZSwgZXh0cmFfZm91bmRfaW1hZ2VzKTsKKwlzdHJpbmcgY29uc3QgcW5hbWUgPSBpbWFnZSArICI6IiArIG5hbWU7CisJbWFwPHN0cmluZywgc2l6ZV90Pjo6aXRlcmF0b3Igc2RfaXQgPSBzeW1ib2xfZGF0YV90YWJsZS5maW5kKHFuYW1lKTsKKworCWlmIChzZF9pdCAhPSBzeW1ib2xfZGF0YV90YWJsZS5lbmQoKSkgeworCQkvLyBmaXJzdCB0aW1lIHdlJ3ZlIHNlZW4gdGhpcyBzeW1ib2wKKwkJb3V0IDw8IG9wZW5fZWxlbWVudChTWU1CT0xfREFUQSwgdHJ1ZSk7CisJCW91dCA8PCBpbml0X2F0dHIoVEFCTEVfSUQsIHNkX2l0LT5zZWNvbmQpOworCisJCWZpZWxkX2RhdHVtIGRhdHVtKCpzeW1iLCBzeW1iLT5zYW1wbGUsIDAsIGNvdW50cywKKwkJCQkgIGV4dHJhX2ZvdW5kX2ltYWdlcyk7CisKKwkJb3V0cHV0X2F0dHJpYnV0ZShvdXQsIGRhdHVtLCBmZl9zeW1iX25hbWUsIE5BTUUpOworCisJCWlmIChmbGFncyAmIGZmX2xpbmVucl9pbmZvKSB7CisJCQlvdXRwdXRfYXR0cmlidXRlKG91dCwgZGF0dW0sIGZmX2xpbmVucl9pbmZvLCBTT1VSQ0VfRklMRSk7CisJCQlvdXRwdXRfYXR0cmlidXRlKG91dCwgZGF0dW0sIGZmX2xpbmVucl9pbmZvLCBTT1VSQ0VfTElORSk7CisJCX0KKworCQlpZiAobmFtZS5zaXplKCkgPiAwICYmIG5hbWVbMF0gIT0gJz8nKSB7CisJCQlvdXRwdXRfYXR0cmlidXRlKG91dCwgZGF0dW0sIGZmX3ZtYSwgU1RBUlRJTkdfQUREUik7CisKKwkJCWlmIChuZWVkX2RldGFpbHMpIHsKKwkJCQlnZXRfYmZkX29iamVjdChzeW1iLCBhYmZkKTsKKwkJCQlpZiAoYWJmZCAmJiBhYmZkLT5zeW1ib2xfaGFzX2NvbnRlbnRzKHN5bWItPnN5bV9pbmRleCkpCisJCQkJCXhtbF9zdXBwb3J0LT5vdXRwdXRfc3ltYm9sX2J5dGVzKGJ5dGVzX291dCwgc3ltYiwgc2RfaXQtPnNlY29uZCwgKmFiZmQpOworCQkJfQorCQl9CisJCW91dCA8PCBjbG9zZV9lbGVtZW50KCk7CisKKwkJLy8gc2VlbiBzbyByZW1vdmUgKG90aGVyd2lzZSBnZXQgc2V2ZXJhbCAibm8gc3ltYm9scyIpCisJCXN5bWJvbF9kYXRhX3RhYmxlLmVyYXNlKHFuYW1lKTsKKwl9Cit9CisKK3ZvaWQgeG1sX2Zvcm1hdHRlcjo6b3V0cHV0X2NnX2NoaWxkcmVuKG9zdHJlYW0gJiBvdXQsIAorCWNnX3N5bWJvbDo6Y2hpbGRyZW4gY29uc3QgY2dfc3ltYiwgb3BfYmZkICogJiBhYmZkKQoreworCWNnX3N5bWJvbDo6Y2hpbGRyZW46OmNvbnN0X2l0ZXJhdG9yIGNpdDsKKwljZ19zeW1ib2w6OmNoaWxkcmVuOjpjb25zdF9pdGVyYXRvciBjZW5kID0gY2dfc3ltYi5lbmQoKTsKKworCWZvciAoY2l0ID0gY2dfc3ltYi5iZWdpbigpOyBjaXQgIT0gY2VuZDsgKytjaXQpIHsKKwkJc3RyaW5nIGNvbnN0IG5hbWUgPSBzeW1ib2xfbmFtZXMubmFtZShjaXQtPm5hbWUpOworCQlzdHJpbmcgY29uc3QgaW1hZ2UgPSBnZXRfaW1hZ2VfbmFtZShjaXQtPmltYWdlX25hbWUsCisJCQlpbWFnZV9uYW1lX3N0b3JhZ2U6OmludF9maWxlbmFtZSwgZXh0cmFfZm91bmRfaW1hZ2VzKTsKKwkJc3RyaW5nIGNvbnN0IHFuYW1lID0gaW1hZ2UgKyAiOiIgKyBuYW1lOworCQltYXA8c3RyaW5nLCBzaXplX3Q+OjppdGVyYXRvciBzZF9pdCA9IHN5bWJvbF9kYXRhX3RhYmxlLmZpbmQocW5hbWUpOworCisJCWlmIChzZF9pdCAhPSBzeW1ib2xfZGF0YV90YWJsZS5lbmQoKSkgeworCQkJc3ltYm9sX2VudHJ5IGNvbnN0ICogY2hpbGQgPSAmKCpjaXQpOworCQkJb3V0cHV0X3RoZV9zeW1ib2xfZGF0YShvdXQsIGNoaWxkLCBhYmZkKTsKKwkJfQorCX0KK30KKwordm9pZCB4bWxfZm9ybWF0dGVyOjpvdXRwdXRfc3ltYm9sX2RhdGEob3N0cmVhbSAmIG91dCkKK3sKKwlvcF9iZmQgKiBhYmZkID0gTlVMTDsKKwlzeW1faXRlcmF0b3IgaXQgPSBzeW1ib2xzLmJlZ2luKCk7CisJc3ltX2l0ZXJhdG9yIGVuZCA9IHN5bWJvbHMuZW5kKCk7CisKKwlvdXQgPDwgb3Blbl9lbGVtZW50KFNZTUJPTF9UQUJMRSk7CisJZm9yICggOyBpdCAhPSBlbmQ7ICsraXQpIHsKKwkJc3ltYm9sX2VudHJ5IGNvbnN0ICogc3ltYiA9ICppdDsKKwkJY2dfc3ltYm9sIGNvbnN0ICogY2dfc3ltYiA9IGR5bmFtaWNfY2FzdDxjZ19zeW1ib2wgY29uc3QgKj4oc3ltYik7CisJCW91dHB1dF90aGVfc3ltYm9sX2RhdGEob3V0LCBzeW1iLCBhYmZkKTsKKwkJaWYgKGNnX3N5bWIpIHsKKwkJCS8qIG1ha2Ugc3VyZSBjYWxsZXJzL2NhbGxlZXMgYXJlIGluY2x1ZGVkIGluIFNZTUJPTF9UQUJMRSAqLworCQkJb3V0cHV0X2NnX2NoaWxkcmVuKG91dCwgY2dfc3ltYi0+Y2FsbGVycywgYWJmZCk7CisJCQlvdXRwdXRfY2dfY2hpbGRyZW4ob3V0LCBjZ19zeW1iLT5jYWxsZWVzLCBhYmZkKTsKKwkJfQorCX0KKwlvdXQgPDwgY2xvc2VfZWxlbWVudChTWU1CT0xfVEFCTEUpOworCisJZGVsZXRlIGFiZmQ7Cit9CisKK3N0cmluZyAgeG1sX2Zvcm1hdHRlcjo6CitvdXRwdXRfc3ltYm9sX2RldGFpbHMoc3ltYm9sX2VudHJ5IGNvbnN0ICogc3ltYiwKKyAgICBzaXplX3QgJiBkZXRhaWxfaW5kZXgsIHNpemVfdCBjb25zdCBsbywgc2l6ZV90IGNvbnN0IGhpKQoreworCWlmICghaGFzX3NhbXBsZV9jb3VudHMoc3ltYi0+c2FtcGxlLmNvdW50cywgbG8sIGhpKSkKKwkJcmV0dXJuICIiOworCisJc2FtcGxlX2NvbnRhaW5lcjo6c2FtcGxlc19pdGVyYXRvciBpdCA9IHByb2ZpbGUtPmJlZ2luKHN5bWIpOworCXNhbXBsZV9jb250YWluZXI6OnNhbXBsZXNfaXRlcmF0b3IgZW5kID0gcHJvZmlsZS0+ZW5kKHN5bWIpOworCisJb3N0cmluZ3N0cmVhbSBzdHI7CisJZm9yICg7IGl0ICE9IGVuZDsgKytpdCkgeworCQljb3VudHNfdCBjOworCisJCWZvciAoc2l6ZV90IHAgPSBsbzsgcCA8PSBoaTsgKytwKSAgeworCQkJc2l6ZV90IGNvdW50ID0gaXQtPnNlY29uZC5jb3VudHNbcF07CisKKwkJCWlmIChjb3VudCA9PSAwKSBjb250aW51ZTsKKworCQkJc3RyIDw8IG9wZW5fZWxlbWVudChERVRBSUxfREFUQSwgdHJ1ZSk7CisJCQlzdHIgPDwgaW5pdF9hdHRyKFRBQkxFX0lELCBkZXRhaWxfaW5kZXgrKyk7CisKKwkJCS8vIGZpcnN0IG91dHB1dCB0aGUgdm1hIGZpZWxkCisJCQlmaWVsZF9kYXR1bSBkYXR1bSgqc3ltYiwgaXQtPnNlY29uZCwgMCwgYywgCisJCQkJCSAgZXh0cmFfZm91bmRfaW1hZ2VzLCAwLjApOworCQkJb3V0cHV0X2F0dHJpYnV0ZShzdHIsIGRhdHVtLCBmZl92bWEsIFZNQSk7CisJCQlpZiAoZmZfbGluZW5yX2luZm8pIHsKKwkJCQlzdHJpbmcgc3ltX2ZpbGU7CisJCQkJc2l6ZV90IHN5bV9saW5lOworCQkJCXN0cmluZyBzYW1wX2ZpbGU7CisJCQkJc2l6ZV90IHNhbXBfbGluZTsKKwkJCQlzdHJpbmcgc3ltX2luZm8gPSBnZXRfbGluZW5yX2luZm8oc3ltYi0+c2FtcGxlLmZpbGVfbG9jLCB0cnVlKTsKKwkJCQlzdHJpbmcgc2FtcF9pbmZvID0gZ2V0X2xpbmVucl9pbmZvKGl0LT5zZWNvbmQuZmlsZV9sb2MsIHRydWUpOworCisJCQkJaWYgKGV4dHJhY3RfbGluZW5yX2luZm8oc2FtcF9pbmZvLCBzYW1wX2ZpbGUsIHNhbXBfbGluZSkpIHsKKwkJCQkJaWYgKGV4dHJhY3RfbGluZW5yX2luZm8oc3ltX2luZm8sIHN5bV9maWxlLCBzeW1fbGluZSkpIHsKKwkJCQkJCS8vIG9ubHkgb3V0cHV0IHNvdXJjZV9maWxlIGlmIGl0IGlzIGRpZmZlcmVudCB0aGFuIHRoZSBzeW1ib2wncyAKKwkJCQkJCS8vIHNvdXJjZSBmaWxlLiAgdGhpcyBjYW4gaGFwcGVuIHdpdGggaW5saW5lZCBmdW5jdGlvbnMgaW4KKwkJCQkJCS8vICNpbmNsdWRlZCBoZWFkZXIgZmlsZXMKKwkJCQkJCWlmIChzeW1fZmlsZSAhPSBzYW1wX2ZpbGUpCisJCQkJCQkJc3RyIDw8IGluaXRfYXR0cihTT1VSQ0VfRklMRSwgc2FtcF9maWxlKTsKKwkJCQkJfQorCQkJCQlzdHIgPDwgaW5pdF9hdHRyKFNPVVJDRV9MSU5FLCBzYW1wX2xpbmUpOworCQkJCX0KKwkJCX0KKwkJCXN0ciA8PCBjbG9zZV9lbGVtZW50KE5PTkUsIHRydWUpOworCisJCQkvLyBvdXRwdXQgYnVmZmVyZWQgc2FtcGxlIGRhdGEKKwkJCW91dHB1dF9zYW1wbGVfZGF0YShzdHIsIGl0LT5zZWNvbmQsIHApOworCisJCQlzdHIgPDwgY2xvc2VfZWxlbWVudChERVRBSUxfREFUQSk7CisJCX0KKwl9CisJcmV0dXJuIHN0ci5zdHIoKTsKK30KKwordm9pZCB4bWxfZm9ybWF0dGVyOjoKK291dHB1dF9zeW1ib2wob3N0cmVhbSAmIG91dCwKKwlzeW1ib2xfZW50cnkgY29uc3QgKiBzeW1iLCBzaXplX3QgbG8sIHNpemVfdCBoaSwgYm9vbCBpc19tb2R1bGUpCit7CisJb3N0cmluZ3N0cmVhbSBzdHI7CisJLy8gcG9pbnRsZXNzIHJlZmVyZW5jZSB0byBpc19tb2R1bGUsIHJlbW92ZSBpbnNhbmUgY29tcGlsZXIgd2FybmluZworCXNpemVfdCBpbmR4ID0gaXNfbW9kdWxlID8gMCA6IDE7CisKKwkvLyBvdXRwdXQgc3ltYm9sJ3Mgc3VtbWFyeSBkYXRhIGZvciBlYWNoIHByb2ZpbGUgY2xhc3MKKwlib29sIGdvdF9zYW1wbGVzID0gZmFsc2U7CisKKwlmb3IgKHNpemVfdCBwID0gbG87IHAgPD0gaGk7ICsrcCkgeworCQlnb3Rfc2FtcGxlcyB8PSB4bWxfc3VwcG9ydC0+b3V0cHV0X3N1bW1hcnlfZGF0YShzdHIsCisJCSAgICBzeW1iLT5zYW1wbGUuY291bnRzLCBwKTsKKwl9CisKKwlpZiAoIWdvdF9zYW1wbGVzKQorCQlyZXR1cm47CisKKwlpZiAoY3ZlcmIgPDwgdnhtbCkKKwkJb3V0IDw8ICI8IS0tIHN5bWJvbF9yZWY9IiA8PCBzeW1ib2xfbmFtZXMubmFtZShzeW1iLT5uYW1lKSA8PAorCQkJIiAtLT4iIDw8IGVuZGw7CisKKwlvdXQgPDwgb3Blbl9lbGVtZW50KFNZTUJPTCwgdHJ1ZSk7CisKKwlzdHJpbmcgY29uc3QgbmFtZSA9IHN5bWJvbF9uYW1lcy5uYW1lKHN5bWItPm5hbWUpOworCWFzc2VydChuYW1lLnNpemUoKSA+IDApOworCQorCXN0cmluZyBjb25zdCBpbWFnZSA9IGdldF9pbWFnZV9uYW1lKHN5bWItPmltYWdlX25hbWUsCisJCWltYWdlX25hbWVfc3RvcmFnZTo6aW50X2ZpbGVuYW1lLCBleHRyYV9mb3VuZF9pbWFnZXMpOworCXN0cmluZyBjb25zdCBxbmFtZSA9IGltYWdlICsgIjoiICsgbmFtZTsKKworCWluZHggPSB4bWxfZ2V0X3N5bWJvbF9pbmRleChxbmFtZSk7CisKKwlvdXQgPDwgaW5pdF9hdHRyKElEX1JFRiwgaW5keCk7CisKKwlpZiAobmVlZF9kZXRhaWxzKSB7CisJCW9zdHJpbmdzdHJlYW0gZGV0YWlsczsKKwkJc3ltYm9sX2RldGFpbHNfdCAmIHNkID0gc3ltYm9sX2RldGFpbHNbaW5keF07CisJCXNpemVfdCBjb25zdCBkZXRhaWxfbG8gPSBzZC5pbmRleDsKKworCQlzdHJpbmcgZGV0YWlsX3N0ciA9IG91dHB1dF9zeW1ib2xfZGV0YWlscyhzeW1iLCBzZC5pbmRleCwgbG8sIGhpKTsKKworCQlpZiAoZGV0YWlsX3N0ci5zaXplKCkgPiAwKSB7CisJCQlpZiAoc2QuaWQgPCAwKQorCQkJCXNkLmlkID0gaW5keDsKKwkJCWRldGFpbHMgPDwgZGV0YWlsX3N0cjsKKwkJfQorCisJCWlmIChzZC5pbmRleCA+IGRldGFpbF9sbykgeworCQkJc2QuZGV0YWlscyA9IHNkLmRldGFpbHMgKyBkZXRhaWxzLnN0cigpOworCQkJb3V0IDw8IGluaXRfYXR0cihERVRBSUxfTE8sIGRldGFpbF9sbyk7CisJCQlvdXQgPDwgaW5pdF9hdHRyKERFVEFJTF9ISSwgc2QuaW5kZXgtMSk7CisJCX0KKwl9CisJb3V0IDw8IGNsb3NlX2VsZW1lbnQoTk9ORSwgdHJ1ZSk7CisJLy8gb3V0cHV0IHN1bW1hcnkKKwlvdXQgPDwgc3RyLnN0cigpOworCW91dCA8PCBjbG9zZV9lbGVtZW50KFNZTUJPTCk7Cit9CisKKwordm9pZCB4bWxfZm9ybWF0dGVyOjoKK291dHB1dF9zYW1wbGVfZGF0YShvc3RyZWFtICYgb3V0LCBzYW1wbGVfZW50cnkgY29uc3QgJiBzYW1wbGUsIHNpemVfdCBwY2xhc3MpCit7CisJb3V0IDw8IG9wZW5fZWxlbWVudChDT1VOVCwgdHJ1ZSk7CisJb3V0IDw8IGluaXRfYXR0cihDTEFTUywgY2xhc3Nlcy52W3BjbGFzc10ubmFtZSk7CisJb3V0IDw8IGNsb3NlX2VsZW1lbnQoTk9ORSwgdHJ1ZSk7CisJb3V0IDw8IHNhbXBsZS5jb3VudHNbcGNsYXNzXTsKKwlvdXQgPDwgY2xvc2VfZWxlbWVudChDT1VOVCk7Cit9CisKKwordm9pZCB4bWxfZm9ybWF0dGVyOjoKK291dHB1dF9hdHRyaWJ1dGUob3N0cmVhbSAmIG91dCwgZmllbGRfZGF0dW0gY29uc3QgJiBkYXR1bSwKKyAgICAgICAgICAgICAgICAgZm9ybWF0X2ZsYWdzIGZsLCB0YWdfdCB0YWcpCit7CisJZmllbGRfZGVzY3JpcHRpb24gY29uc3QgJiBmaWVsZChmb3JtYXRfbWFwW2ZsXSk7CisKKwlzdHJpbmcgc3RyID0gKHRoaXMtPipmaWVsZC5mb3JtYXR0ZXIpKGRhdHVtKTsKKworCWlmICghc3RyLmVtcHR5KCkpIHsKKwkJaWYgKGZsID09IGZmX2xpbmVucl9pbmZvICYmICh0YWcgPT0gU09VUkNFX0xJTkUgfHwgdGFnID09IFNPVVJDRV9GSUxFKSkgeworCQkJc3RyaW5nIGZpbGU7CisJCQlzaXplX3QgbGluZTsKKworCQkJaWYgKGV4dHJhY3RfbGluZW5yX2luZm8oc3RyLCBmaWxlLCBsaW5lKSkgeworCQkJCWlmICh0YWcgPT0gU09VUkNFX0xJTkUpCisJCQkJCW91dCA8PCBpbml0X2F0dHIodGFnLCBsaW5lKTsKKwkJCQllbHNlCisJCQkJCW91dCA8PCBpbml0X2F0dHIodGFnLCBmaWxlKTsKKwkJCX0KKwkJfSBlbHNlCisJCQlvdXQgPDwgIiAiIDw8IGluaXRfYXR0cih0YWcsIHN0cik7CisJfQorfQorCit4bWxfY2dfZm9ybWF0dGVyOjoKK3htbF9jZ19mb3JtYXR0ZXIoY2FsbGdyYXBoX2NvbnRhaW5lciBjb25zdCAmIGNnLCBzeW1ib2xfY29sbGVjdGlvbiAmIHMsCisJCSBzdHJpbmdfZmlsdGVyIGNvbnN0ICYgc2YpCisJOgorCXhtbF9mb3JtYXR0ZXIoMCwgcywgY2cuZXh0cmFfZm91bmRfaW1hZ2VzLCBzZiksCisJY2FsbGdyYXBoKGNnKQoreworCWNvdW50cy50b3RhbCA9IGNhbGxncmFwaC5zYW1wbGVzX2NvdW50KCk7Cit9CisKK3ZvaWQgeG1sX2NnX2Zvcm1hdHRlcjo6CitvdXRwdXRfc3ltYm9sX2NvcmUob3N0cmVhbSAmIG91dCwgY2dfc3ltYm9sOjpjaGlsZHJlbiBjb25zdCBjZ19zeW1iLAorICAgICAgIHN0cmluZyBjb25zdCBzZWxmbmFtZSwgc3RyaW5nIGNvbnN0IHFuYW1lLAorICAgICAgIHNpemVfdCBsbywgc2l6ZV90IGhpLCBib29sIGlzX21vZHVsZSwgdGFnX3QgdGFnKQoreworCWNnX3N5bWJvbDo6Y2hpbGRyZW46OmNvbnN0X2l0ZXJhdG9yIGNpdDsKKwljZ19zeW1ib2w6OmNoaWxkcmVuOjpjb25zdF9pdGVyYXRvciBjZW5kID0gY2dfc3ltYi5lbmQoKTsKKworCWZvciAoY2l0ID0gY2dfc3ltYi5iZWdpbigpOyBjaXQgIT0gY2VuZDsgKytjaXQpIHsKKwkJc3RyaW5nIGNvbnN0ICYgbW9kdWxlID0gZ2V0X2ltYWdlX25hbWUoKGNpdCktPmltYWdlX25hbWUsCisJCQlpbWFnZV9uYW1lX3N0b3JhZ2U6OmludF9maWxlbmFtZSwgZXh0cmFfZm91bmRfaW1hZ2VzKTsKKwkJYm9vbCBzZWxmID0gZmFsc2U7CisJCW9zdHJpbmdzdHJlYW0gc3RyOworCQlzaXplX3QgaW5keDsKKworCQkvLyBvdXRwdXQgc3ltYm9sJ3Mgc3VtbWFyeSBkYXRhIGZvciBlYWNoIHByb2ZpbGUgY2xhc3MKKwkJZm9yIChzaXplX3QgcCA9IGxvOyBwIDw9IGhpOyArK3ApCisJCQl4bWxfc3VwcG9ydC0+b3V0cHV0X3N1bW1hcnlfZGF0YShzdHIsIGNpdC0+c2FtcGxlLmNvdW50cywgcCk7CisKKwkJaWYgKGN2ZXJiIDw8IHZ4bWwpCisJCQlvdXQgPDwgIjwhLS0gc3ltYm9sX3JlZj0iIDw8IHN5bWJvbF9uYW1lcy5uYW1lKGNpdC0+bmFtZSkgPDwKKwkJCQkiIC0tPiIgPDwgZW5kbDsKKworCQlpZiAoaXNfbW9kdWxlKSB7CisJCQlvdXQgPDwgb3Blbl9lbGVtZW50KE1PRFVMRSwgdHJ1ZSk7CisJCQlvdXQgPDwgaW5pdF9hdHRyKE5BTUUsIG1vZHVsZSkgPDwgY2xvc2VfZWxlbWVudChOT05FLCB0cnVlKTsKKwkJfQorCisJCW91dCA8PCBvcGVuX2VsZW1lbnQoU1lNQk9MLCB0cnVlKTsKKworCQlzdHJpbmcgY29uc3Qgc3ltbmFtZSA9IHN5bWJvbF9uYW1lcy5uYW1lKGNpdC0+bmFtZSk7CisJCWFzc2VydChzeW1uYW1lLnNpemUoKSA+IDApOworCisJCXN0cmluZyBjb25zdCBzeW1xbmFtZSA9IG1vZHVsZSArICI6IiArIHN5bW5hbWU7CisKKwkJLy8gRmluZCBhbnkgc2VsZiByZWZlcmVuY2VzIGFuZCBoYW5kbGUKKwkJaWYgKChzeW1uYW1lID09IHNlbGZuYW1lKSAmJiAodGFnID09IENBTExFRVMpKSB7CisJCQlzZWxmID0gdHJ1ZTsKKwkJCWluZHggPSB4bWxfZ2V0X3N5bWJvbF9pbmRleChxbmFtZSk7CisJCX0gZWxzZSB7CisJCQlpbmR4ID0geG1sX2dldF9zeW1ib2xfaW5kZXgoc3ltcW5hbWUpOworCQl9CisKKwkJb3V0IDw8IGluaXRfYXR0cihJRF9SRUYsIGluZHgpOworCisJCWlmIChzZWxmKQorCQkJb3V0IDw8IGluaXRfYXR0cihTRUxGUkVGLCAidHJ1ZSIpOworCisJCW91dCA8PCBjbG9zZV9lbGVtZW50KE5PTkUsIHRydWUpOworCQlvdXQgPDwgc3RyLnN0cigpOworCQlvdXQgPDwgY2xvc2VfZWxlbWVudChTWU1CT0wpOworCisJCWlmIChpc19tb2R1bGUpCisJCQlvdXQgPDwgY2xvc2VfZWxlbWVudChNT0RVTEUpOworCX0KK30KKworCit2b2lkIHhtbF9jZ19mb3JtYXR0ZXI6Ogorb3V0cHV0X3N5bWJvbChvc3RyZWFtICYgb3V0LAorCXN5bWJvbF9lbnRyeSBjb25zdCAqIHN5bWIsIHNpemVfdCBsbywgc2l6ZV90IGhpLCBib29sIGlzX21vZHVsZSkKK3sKKwljZ19zeW1ib2wgY29uc3QgKiBjZ19zeW1iID0gZHluYW1pY19jYXN0PGNnX3N5bWJvbCBjb25zdCAqPihzeW1iKTsKKwlvc3RyaW5nc3RyZWFtIHN0cjsKKwlzaXplX3QgaW5keDsKKworCS8vIG91dHB1dCBzeW1ib2wncyBzdW1tYXJ5IGRhdGEgZm9yIGVhY2ggcHJvZmlsZSBjbGFzcworCWZvciAoc2l6ZV90IHAgPSBsbzsgcCA8PSBoaTsgKytwKQorCQl4bWxfc3VwcG9ydC0+b3V0cHV0X3N1bW1hcnlfZGF0YShzdHIsIHN5bWItPnNhbXBsZS5jb3VudHMsIHApOworCisJaWYgKGN2ZXJiIDw8IHZ4bWwpCisJCW91dCA8PCAiPCEtLSBzeW1ib2xfcmVmPSIgPDwgc3ltYm9sX25hbWVzLm5hbWUoc3ltYi0+bmFtZSkgPDwKKwkJCSIgLS0+IiA8PCBlbmRsOworCisJb3V0IDw8IG9wZW5fZWxlbWVudChTWU1CT0wsIHRydWUpOworCisJc3RyaW5nIGNvbnN0IG5hbWUgPSBzeW1ib2xfbmFtZXMubmFtZShzeW1iLT5uYW1lKTsKKwlhc3NlcnQobmFtZS5zaXplKCkgPiAwKTsKKworCXN0cmluZyBjb25zdCBpbWFnZSA9IGdldF9pbWFnZV9uYW1lKHN5bWItPmltYWdlX25hbWUsCisJCWltYWdlX25hbWVfc3RvcmFnZTo6aW50X2ZpbGVuYW1lLCBleHRyYV9mb3VuZF9pbWFnZXMpOworCXN0cmluZyBjb25zdCBxbmFtZSA9IGltYWdlICsgIjoiICsgbmFtZTsKKworCXN0cmluZyBjb25zdCBzZWxmbmFtZSA9IHN5bWJvbF9uYW1lcy5kZW1hbmdsZShzeW1iLT5uYW1lKSArICIgW3NlbGZdIjsKKworCWluZHggPSB4bWxfZ2V0X3N5bWJvbF9pbmRleChxbmFtZSk7CisKKwlvdXQgPDwgaW5pdF9hdHRyKElEX1JFRiwgaW5keCk7CisKKwlvdXQgPDwgY2xvc2VfZWxlbWVudChOT05FLCB0cnVlKTsKKworCW91dCA8PCBvcGVuX2VsZW1lbnQoQ0FMTEVSUyk7CisJaWYgKGNnX3N5bWIpCisJCW91dHB1dF9zeW1ib2xfY29yZShvdXQsIGNnX3N5bWItPmNhbGxlcnMsIHNlbGZuYW1lLCBxbmFtZSwgbG8sIGhpLCBpc19tb2R1bGUsIENBTExFUlMpOworCW91dCA8PCBjbG9zZV9lbGVtZW50KENBTExFUlMpOworCisJb3V0IDw8IG9wZW5fZWxlbWVudChDQUxMRUVTKTsKKwlpZiAoY2dfc3ltYikKKwkJb3V0cHV0X3N5bWJvbF9jb3JlKG91dCwgY2dfc3ltYi0+Y2FsbGVlcywgc2VsZm5hbWUsIHFuYW1lLCBsbywgaGksIGlzX21vZHVsZSwgQ0FMTEVFUyk7CisKKwlvdXQgPDwgY2xvc2VfZWxlbWVudChDQUxMRUVTKTsKKworCS8vIG91dHB1dCBzdW1tYXJ5CisJb3V0IDw8IHN0ci5zdHIoKTsKKwlvdXQgPDwgY2xvc2VfZWxlbWVudChTWU1CT0wpOworfQorCit9IC8vIG5hbWVzcGFjZSBmb3JtYXRfb3V0cHV0CmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9saWJwcC9mb3JtYXRfb3V0cHV0LmggYi9vcHJvZmlsZS0wLjkuNy9saWJwcC9mb3JtYXRfb3V0cHV0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGU1MjdkNQotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2xpYnBwL2Zvcm1hdF9vdXRwdXQuaApAQCAtMCwwICsxLDMyNCBAQAorLyoqCisgKiBAZmlsZSBmb3JtYXRfb3V0cHV0LmgKKyAqIG91dHB1dHRpbmcgZm9ybWF0IGZvciBzeW1ib2wgbGlzdHMKKyAqCisgKiBAcmVtYXJrIENvcHlyaWdodCAyMDAyIE9Qcm9maWxlIGF1dGhvcnMKKyAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCisgKgorICogQGF1dGhvciBQaGlsaXBwZSBFbGllCisgKiBAYXV0aG9yIEpvaG4gTGV2b24KKyAqLworCisjaWZuZGVmIEZPUk1BVF9PVVRQVVRfSAorI2RlZmluZSBGT1JNQVRfT1VUUFVUX0gKKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPG1hcD4KKyNpbmNsdWRlIDxpb3Nmd2Q+CisKKyNpbmNsdWRlICJmb3JtYXRfZmxhZ3MuaCIKKyNpbmNsdWRlICJzeW1ib2wuaCIKKyNpbmNsdWRlICJzdHJpbmdfZmlsdGVyLmgiCisjaW5jbHVkZSAieG1sX291dHB1dC5oIgorCitjbGFzcyBzeW1ib2xfZW50cnk7CitjbGFzcyBzYW1wbGVfZW50cnk7CitjbGFzcyBjYWxsZ3JhcGhfY29udGFpbmVyOworY2xhc3MgcHJvZmlsZV9jb250YWluZXI7CitjbGFzcyBkaWZmX2NvbnRhaW5lcjsKK2NsYXNzIGV4dHJhX2ltYWdlczsKK2NsYXNzIG9wX2JmZDsKKworc3RydWN0IHByb2ZpbGVfY2xhc3NlczsKKy8vIEZJWE1FOiBzaG91bGQgYmUgcGFzc2VkIHRvIHRoZSBkZXJpdmVkIGNsYXNzIGZvcm1hdHRlciBjdG9yCitleHRlcm4gcHJvZmlsZV9jbGFzc2VzIGNsYXNzZXM7CisKK25hbWVzcGFjZSBmb3JtYXRfb3V0cHV0IHsKKworLy8vIGJhc2UgY2xhc3MgZm9yIGZvcm1hdHRlciwgaGFuZGxlIGNvbW1vbiBvcHRpb25zIHRvIGZvcm1hdHRlcgorY2xhc3MgZm9ybWF0dGVyIHsKK3B1YmxpYzoKKwlmb3JtYXR0ZXIoZXh0cmFfaW1hZ2VzIGNvbnN0ICYgZXh0cmEpOworCXZpcnR1YWwgfmZvcm1hdHRlcigpOworCisJLy8vIGFkZCBhIGdpdmVuIGNvbHVtbgorCXZvaWQgYWRkX2Zvcm1hdChmb3JtYXRfZmxhZ3MgZmxhZyk7CisKKwkvLy8gc2V0IHRoZSBuZWVkX2hlYWRlciBib29sZWFuIHRvIGZhbHNlCisJdm9pZCBzaG93X2hlYWRlcihib29sKTsKKwkvLy8gZm9ybWF0IGZvciA2NCBiaXQgd2lkZSBWTUFzCisJdm9pZCB2bWFfZm9ybWF0XzY0Yml0KGJvb2wpOworCS8vLyBzaG93IGxvbmcgKGZ1bGwgcGF0aCkgZmlsZW5hbWVzCisJdm9pZCBzaG93X2xvbmdfZmlsZW5hbWVzKGJvb2wpOworCS8vLyB1c2UgZ2xvYmFsIGNvdW50IHJhdGhlciBzeW1ib2wgY291bnQgZm9yIGRldGFpbHMgcGVyY2VudAorCXZvaWQgc2hvd19nbG9iYWxfcGVyY2VudChib29sKTsKKworCS8qKgorCSAqIFNldCB0aGUgbnVtYmVyIG9mIGNvbGxlY3RlZCBwcm9maWxlIGNsYXNzZXMuIEVhY2ggY2xhc3MKKwkgKiB3aWxsIG91dHB1dCBzYW1wbGUgY291bnQgYW5kIHBlcmNlbnRhZ2UgaW4gZXh0cmEgY29sdW1ucy4KKwkgKgorCSAqIFRoaXMgY2xhc3MgYXNzdW1lcyB0aGF0IHRoZSBwcm9maWxlIGluZm9ybWF0aW9uIGhhcyBiZWVuCisJICogcG9wdWxhdGVkIHdpdGggdGhlIHJpZ2h0IG51bWJlciBvZiBjbGFzc2VzLgorCSAqLworCXZvaWQgc2V0X25yX2NsYXNzZXMoc2l6ZV90IG5yX2NsYXNzZXMpOworCisJLy8vIG91dHB1dCB0YWJsZSBoZWFkZXIsIGltcGxlbWVudGVkIGJ5IGNhbGxpbmcgdGhlIHZpcnR1YWwgZnVuY3Rpb24KKwkvLy8gb3V0cHV0X2hlYWRlcl9maWVsZCgpCisJdm9pZCBvdXRwdXRfaGVhZGVyKHN0ZDo6b3N0cmVhbSAmIG91dCk7CisKK3Byb3RlY3RlZDoKKwlzdHJ1Y3QgY291bnRzX3QgeworCQkvLy8gdG90YWwgc2FtcGxlIGNvdW50CisJCWNvdW50X2FycmF5X3QgdG90YWw7CisJCS8vLyBzYW1wbGVzIHNvIGZhcgorCQljb3VudF9hcnJheV90IGN1bXVsYXRlZF9zYW1wbGVzOworCQkvLy8gcGVyY2VudGFnZSBzbyBmYXIKKwkJY291bnRfYXJyYXlfdCBjdW11bGF0ZWRfcGVyY2VudDsKKwkJLy8vIGRldGFpbGVkIHBlcmNlbnRhZ2Ugc28gZmFyCisJCWNvdW50X2FycmF5X3QgY3VtdWxhdGVkX3BlcmNlbnRfZGV0YWlsczsKKwl9OworCisJLy8vIGRhdGEgcGFzc2VkIGZvciBvdXRwdXQKKwlzdHJ1Y3QgZmllbGRfZGF0dW0geworCQlmaWVsZF9kYXR1bShzeW1ib2xfZW50cnkgY29uc3QgJiBzeW0sCisJCSAgICAgICAgICAgIHNhbXBsZV9lbnRyeSBjb25zdCAmIHMsCisJCQkgICAgc2l6ZV90IHBjLCBjb3VudHNfdCAmIGMsCisJCQkgICAgZXh0cmFfaW1hZ2VzIGNvbnN0ICYgZXh0cmEsIGRvdWJsZSBkID0gMC4wKQorCQkJOiBzeW1ib2woc3ltKSwgc2FtcGxlKHMpLCBwY2xhc3MocGMpLAorCQkJICBjb3VudHMoYyksIGV4dHJhKGV4dHJhKSwgZGlmZihkKSB7fQorCQlzeW1ib2xfZW50cnkgY29uc3QgJiBzeW1ib2w7CisJCXNhbXBsZV9lbnRyeSBjb25zdCAmIHNhbXBsZTsKKwkJc2l6ZV90IHBjbGFzczsKKwkJY291bnRzX3QgJiBjb3VudHM7CisJCWV4dHJhX2ltYWdlcyBjb25zdCAmIGV4dHJhOworCQlkb3VibGUgZGlmZjsKKwl9OworIAorCS8vLyBmb3JtYXQgY2FsbGJhY2sgdHlwZQorCXR5cGVkZWYgc3RkOjpzdHJpbmcgKGZvcm1hdHRlcjo6KmZjdF9mb3JtYXQpKGZpZWxkX2RhdHVtIGNvbnN0ICYpOworIAorCS8qKiBAbmFtZSBmb3JtYXQgZnVuY3Rpb25zLgorCSAqIFRoZSBzZXQgb2YgZm9ybWF0dGluZyBmdW5jdGlvbnMsIHVzZWQgaW50ZXJuYWxseSBieSBvdXRwdXQoKS4KKwkgKi8KKwkvL0B7CisJc3RkOjpzdHJpbmcgZm9ybWF0X3ZtYShmaWVsZF9kYXR1bSBjb25zdCAmKTsKKwlzdGQ6OnN0cmluZyBmb3JtYXRfc3ltYl9uYW1lKGZpZWxkX2RhdHVtIGNvbnN0ICYpOworCXN0ZDo6c3RyaW5nIGZvcm1hdF9pbWFnZV9uYW1lKGZpZWxkX2RhdHVtIGNvbnN0ICYpOworCXN0ZDo6c3RyaW5nIGZvcm1hdF9hcHBfbmFtZShmaWVsZF9kYXR1bSBjb25zdCAmKTsKKwlzdGQ6OnN0cmluZyBmb3JtYXRfbGluZW5yX2luZm8oZmllbGRfZGF0dW0gY29uc3QgJik7CisJc3RkOjpzdHJpbmcgZm9ybWF0X25yX3NhbXBsZXMoZmllbGRfZGF0dW0gY29uc3QgJik7CisJc3RkOjpzdHJpbmcgZm9ybWF0X25yX2N1bXVsYXRlZF9zYW1wbGVzKGZpZWxkX2RhdHVtIGNvbnN0ICYpOworCXN0ZDo6c3RyaW5nIGZvcm1hdF9wZXJjZW50KGZpZWxkX2RhdHVtIGNvbnN0ICYpOworCXN0ZDo6c3RyaW5nIGZvcm1hdF9jdW11bGF0ZWRfcGVyY2VudChmaWVsZF9kYXR1bSBjb25zdCAmKTsKKwlzdGQ6OnN0cmluZyBmb3JtYXRfcGVyY2VudF9kZXRhaWxzKGZpZWxkX2RhdHVtIGNvbnN0ICYpOworCXN0ZDo6c3RyaW5nIGZvcm1hdF9jdW11bGF0ZWRfcGVyY2VudF9kZXRhaWxzKGZpZWxkX2RhdHVtIGNvbnN0ICYpOworCXN0ZDo6c3RyaW5nIGZvcm1hdF9kaWZmKGZpZWxkX2RhdHVtIGNvbnN0ICYpOworCS8vQH0KKyAKKwkvLy8gZGVjcmliZSBvbmUgZmllbGQgb2YgdGhlIGNvbHVtbW5lZCBvdXRwdXQuCisJc3RydWN0IGZpZWxkX2Rlc2NyaXB0aW9uIHsKKwkJZmllbGRfZGVzY3JpcHRpb24oKSB7fQorCQlmaWVsZF9kZXNjcmlwdGlvbihzdGQ6OnNpemVfdCB3LCBzdGQ6OnN0cmluZyBoLAorCQkJCSAgZmN0X2Zvcm1hdCBmKQorCQkJOiB3aWR0aCh3KSwgaGVhZGVyX25hbWUoaCksIGZvcm1hdHRlcihmKSB7fQorIAorCQlzdGQ6OnNpemVfdCB3aWR0aDsKKwkJc3RkOjpzdHJpbmcgaGVhZGVyX25hbWU7CisJCWZjdF9mb3JtYXQgZm9ybWF0dGVyOworCX07CisgCisJdHlwZWRlZiBzdGQ6Om1hcDxmb3JtYXRfZmxhZ3MsIGZpZWxkX2Rlc2NyaXB0aW9uPiBmb3JtYXRfbWFwX3Q7CisKKwkvLy8gYWN0dWFsbHkgZG8gb3V0cHV0CisJdm9pZCBkb19vdXRwdXQoc3RkOjpvc3RyZWFtICYgb3V0LCBzeW1ib2xfZW50cnkgY29uc3QgJiBzeW1ib2wsCisJCSAgICAgIHNhbXBsZV9lbnRyeSBjb25zdCAmIHNhbXBsZSwgY291bnRzX3QgJiBjLAorCSAgICAgICAgICAgICAgZGlmZl9hcnJheV90IGNvbnN0ICYgPSBkaWZmX2FycmF5X3QoKSwKKwkgICAgICAgICAgICAgIGJvb2wgaGlkZV9pbW11dGFibGVfZmllbGQgPSBmYWxzZSk7CisgCisJLy8vIHJldHVybnMgdGhlIG5yIG9mIGNoYXIgbmVlZGVkIHRvIHBhZCB0aGlzIGZpZWxkCisJc2l6ZV90IG91dHB1dF9oZWFkZXJfZmllbGQoc3RkOjpvc3RyZWFtICYgb3V0LCBmb3JtYXRfZmxhZ3MgZmwsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHBhZGRpbmcpOworCisJLy8vIHJldHVybnMgdGhlIG5yIG9mIGNoYXIgbmVlZGVkIHRvIHBhZCB0aGlzIGZpZWxkCisJc2l6ZV90IG91dHB1dF9maWVsZChzdGQ6Om9zdHJlYW0gJiBvdXQsIGZpZWxkX2RhdHVtIGNvbnN0ICYgZGF0dW0sCisJCQkgICBmb3JtYXRfZmxhZ3MgZmwsIHNpemVfdCBwYWRkaW5nLAorCQkJICAgYm9vbCBoaWRlX2ltbXV0YWJsZSk7CisgCisJLy8vIHN0b3JlcyBmdW5jdG9ycyBmb3IgZG9pbmcgYWN0dWFsIGZvcm1hdHRpbmcKKwlmb3JtYXRfbWFwX3QgZm9ybWF0X21hcDsKKworCS8vLyBudW1iZXIgb2YgcHJvZmlsZSBjbGFzc2VzCisJc2l6ZV90IG5yX2NsYXNzZXM7CisKKwkvLy8gdG90YWwgY291bnRzCisJY291bnRzX3QgY291bnRzOworCisJLy8vIGZvcm1hdHRpbmcgZmxhZ3Mgc2V0CisJZm9ybWF0X2ZsYWdzIGZsYWdzOworCS8vLyB0cnVlIGlmIHdlIG5lZWQgdG8gZm9ybWF0IGFzIDY0IGJpdHMgcXVhbnRpdGllcworCWJvb2wgdm1hXzY0OworCS8vLyBmYWxzZSBpZiB3ZSB1c2UgYmFzZW5hbWUoZmlsZW5hbWUpIGluIG91dHB1dCByYXRoZXIgZmlsZW5hbWUKKwlib29sIGxvbmdfZmlsZW5hbWVzOworCS8vLyB0cnVlIGlmIHdlIG5lZWQgdG8gc2hvdyBoZWFkZXIgYmVmb3JlIHRoZSBmaXJzdCBvdXRwdXQKKwlib29sIG5lZWRfaGVhZGVyOworCS8vLyBib29sIGlmIGRldGFpbHMgcGVyY2VudGFnZSBhcmUgcmVsYXRpdmUgdG8gdG90YWwgY291bnQgcmF0aGVyIHRvCisJLy8vIHN5bWJvbCBjb3VudAorCWJvb2wgZ2xvYmFsX3BlcmNlbnQ7CisKKwkvLy8gVG8gcmV0cmlldmUgdGhlIHJlYWwgaW1hZ2UgbG9jYXRpb24sIHVzZWZ1bGwgd2hlbiBhY3Rpbmcgb24KKwkvLy8gYW4gYXJjaGl2ZSBhbmQgZm9yIDIuNiBrZXJuZWwgbW9kdWxlcworCWV4dHJhX2ltYWdlcyBjb25zdCAmIGV4dHJhX2ZvdW5kX2ltYWdlczsKK307CisgCisKKy8vLyBjbGFzcyB0byBvdXRwdXQgaW4gYSBjb2x1bW5lZCBmb3JtYXQgc3ltYm9scyBhbmQgYXNzb2NpYXRlZCBzYW1wbGVzCitjbGFzcyBvcHJlcG9ydF9mb3JtYXR0ZXIgOiBwdWJsaWMgZm9ybWF0dGVyIHsKK3B1YmxpYzoKKwkvLy8gYnVpbGQgYSByZWFkeSB0byB1c2UgZm9ybWF0dGVyCisJb3ByZXBvcnRfZm9ybWF0dGVyKHByb2ZpbGVfY29udGFpbmVyIGNvbnN0ICYgcHJvZmlsZSk7CisKKwkvKiogb3V0cHV0IGEgdmVjdG9yIG9mIHN5bWJvbHMgdG8gb3V0IGFjY29yZGluZyB0byB0aGUgb3V0cHV0IGZvcm1hdAorCSAqIHNwZWNpZmllciBwcmV2aW91c2x5IHNldCBieSBjYWxsKHMpIHRvIGFkZF9mb3JtYXQoKSAqLworCXZvaWQgb3V0cHV0KHN0ZDo6b3N0cmVhbSAmIG91dCwgc3ltYm9sX2NvbGxlY3Rpb24gY29uc3QgJiBzeW1zKTsKKworCS8vLyBzZXQgdGhlIG91dHB1dF9kZXRhaWxzIGJvb2xlYW4KKwl2b2lkIHNob3dfZGV0YWlscyhib29sKTsKKworcHJpdmF0ZToKKyAKKwkvKiogb3V0cHV0IG9uZSBzeW1ib2wgc3ltYiB0byBvdXQgYWNjb3JkaW5nIHRvIHRoZSBvdXRwdXQgZm9ybWF0CisJICogc3BlY2lmaWVyIHByZXZpb3VzbHkgc2V0IGJ5IGNhbGwocykgdG8gYWRkX2Zvcm1hdCgpICovCisJdm9pZCBvdXRwdXQoc3RkOjpvc3RyZWFtICYgb3V0LCBzeW1ib2xfZW50cnkgY29uc3QgKiBzeW1iKTsKKworCS8vLyBvdXRwdXQgZGV0YWlscyBmb3IgdGhlIHN5bWJvbAorCXZvaWQgb3V0cHV0X2RldGFpbHMoc3RkOjpvc3RyZWFtICYgb3V0LCBzeW1ib2xfZW50cnkgY29uc3QgKiBzeW1iKTsKKyAKKwkvLy8gY29udGFpbmVyIHdlIHdvcmsgZnJvbQorCXByb2ZpbGVfY29udGFpbmVyIGNvbnN0ICYgcHJvZmlsZTsKKyAKKwkvLy8gdHJ1ZSBpZiB3ZSBuZWVkIHRvIHNob3cgZGV0YWlscyBmb3IgZWFjaCBzeW1ib2xzCisJYm9vbCBuZWVkX2RldGFpbHM7Cit9OworCisKKy8vLyBjbGFzcyB0byBvdXRwdXQgaW4gYSBjb2x1bW5lZCBmb3JtYXQgY2FsbGVyL2NhbGxlZSBhbmQgYXNzb2NpYXRlZCBzYW1wbGVzCitjbGFzcyBjZ19mb3JtYXR0ZXIgOiBwdWJsaWMgZm9ybWF0dGVyIHsKK3B1YmxpYzoKKwkvLy8gYnVpbGQgYSByZWFkeSB0byB1c2UgZm9ybWF0dGVyCisJY2dfZm9ybWF0dGVyKGNhbGxncmFwaF9jb250YWluZXIgY29uc3QgJiBwcm9maWxlKTsKKworCS8qKiBvdXRwdXQgY2FsbGdyYXBoIGluZm9ybWF0aW9uIGFjY29yZGluZyB0byB0aGUgcHJldmlvdXNseSBmb3JtYXQKKwkgKiBzcGVjaWZpZXIgc2V0IGJ5IGNhbGwocykgdG8gYWRkX2Zvcm1hdCgpICovCisJdm9pZCBvdXRwdXQoc3RkOjpvc3RyZWFtICYgb3V0LCBzeW1ib2xfY29sbGVjdGlvbiBjb25zdCAmIHN5bXMpOworfTsKKworLy8vIGNsYXNzIHRvIG91dHB1dCBhIGNvbHVtbmVkIGZvcm1hdCBzeW1ib2xzIHBsdXMgZGlmZiB2YWx1ZXMKK2NsYXNzIGRpZmZfZm9ybWF0dGVyIDogcHVibGljIGZvcm1hdHRlciB7CitwdWJsaWM6CisJLy8vIGJ1aWxkIGEgcmVhZHkgdG8gdXNlIGZvcm1hdHRlcgorCWRpZmZfZm9ybWF0dGVyKGRpZmZfY29udGFpbmVyIGNvbnN0ICYgcHJvZmlsZSwKKwkJICAgICAgIGV4dHJhX2ltYWdlcyBjb25zdCAmIGV4dHJhKTsKKworCS8qKgorCSAqIE91dHB1dCBhIHZlY3RvciBvZiBzeW1ib2xzIHRvIG91dCBhY2NvcmRpbmcgdG8gdGhlIG91dHB1dAorCSAqIGZvcm1hdCBzcGVjaWZpZXIgcHJldmlvdXNseSBzZXQgYnkgY2FsbChzKSB0byBhZGRfZm9ybWF0KCkKKwkgKi8KKwl2b2lkIG91dHB1dChzdGQ6Om9zdHJlYW0gJiBvdXQsIGRpZmZfY29sbGVjdGlvbiBjb25zdCAmIHN5bXMpOworCitwcml2YXRlOgorCS8vLyBvdXRwdXQgYSBzaW5nbGUgc3ltYm9sCisJdm9pZCBvdXRwdXQoc3RkOjpvc3RyZWFtICYgb3V0LCBkaWZmX3N5bWJvbCBjb25zdCAmIHN5bSk7CisKK307CisKKworLy8vIGNsYXNzIHRvIG91dHB1dCBpbiBYTUwgZm9ybWF0CitjbGFzcyB4bWxfZm9ybWF0dGVyIDogcHVibGljIGZvcm1hdHRlciB7CitwdWJsaWM6CisJLy8vIGJ1aWxkIGEgcmVhZHkgdG8gdXNlIGZvcm1hdHRlcgorCXhtbF9mb3JtYXR0ZXIocHJvZmlsZV9jb250YWluZXIgY29uc3QgKiBwcm9maWxlLAorCQkgICAgICBzeW1ib2xfY29sbGVjdGlvbiAmIHN5bWJvbHMsIGV4dHJhX2ltYWdlcyBjb25zdCAmIGV4dHJhLAorCQkgICAgICBzdHJpbmdfZmlsdGVyIGNvbnN0ICYgc3ltYm9sX2ZpbHRlcik7CisKKwkvLyBvdXRwdXQgYm9keSBvZiBYTUwgb3V0cHV0CisJdm9pZCBvdXRwdXQoc3RkOjpvc3RyZWFtICYgb3V0KTsKKworCS8qKiBvdXRwdXQgb25lIHN5bWJvbCBzeW1iIHRvIG91dCBhY2NvcmRpbmcgdG8gdGhlIG91dHB1dCBmb3JtYXQKKwkgKiBzcGVjaWZpZXIgcHJldmlvdXNseSBzZXQgYnkgY2FsbChzKSB0byBhZGRfZm9ybWF0KCkgKi8KKwl2aXJ0dWFsIHZvaWQgb3V0cHV0X3N5bWJvbChzdGQ6Om9zdHJlYW0gJiBvdXQsCisJCXN5bWJvbF9lbnRyeSBjb25zdCAqIHN5bWIsIHNpemVfdCBsbywgc2l6ZV90IGhpLAorCQlib29sIGlzX21vZHVsZSk7CisKKwkvLy8gb3V0cHV0IGRldGFpbHMgZm9yIHRoZSBzeW1ib2wKKwlzdGQ6OnN0cmluZyBvdXRwdXRfc3ltYm9sX2RldGFpbHMoc3ltYm9sX2VudHJ5IGNvbnN0ICogc3ltYiwKKwkJc2l6ZV90ICYgZGV0YWlsX2luZGV4LCBzaXplX3QgY29uc3QgbG8sIHNpemVfdCBjb25zdCBoaSk7CisKKwkvLy8gc2V0IHRoZSBvdXRwdXRfZGV0YWlscyBib29sZWFuCisJdm9pZCBzaG93X2RldGFpbHMoYm9vbCk7CisKKwkvLyBvdXRwdXQgU3ltYm9sRGF0YSBYTUwgZWxlbWVudHMKKwl2b2lkIG91dHB1dF9zeW1ib2xfZGF0YShzdGQ6Om9zdHJlYW0gJiBvdXQpOworCitwcml2YXRlOgorCS8vLyBjb250YWluZXIgd2Ugd29yayBmcm9tCisJcHJvZmlsZV9jb250YWluZXIgY29uc3QgKiBwcm9maWxlOworIAorCS8vIG9yZGVyZWQgY29sbGVjdGlvbiBvZiBzeW1ib2xzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHByb2ZpbGUKKwlzeW1ib2xfY29sbGVjdGlvbiAmIHN5bWJvbHM7CisKKwkvLy8gdHJ1ZSBpZiB3ZSBuZWVkIHRvIHNob3cgZGV0YWlscyBmb3IgZWFjaCBzeW1ib2xzCisJYm9vbCBuZWVkX2RldGFpbHM7CisKKwkvLyBjb3VudCBvZiBEZXRhaWxEYXRhIGl0ZW1zIG91dHB1dCBzbyBmYXIKKwlzaXplX3QgZGV0YWlsX2NvdW50OworCisJLy8vIHdpdGggLS1kZXRhaWxzIHdlIG5lZWQgdG8gcmVvcGVuIHRoZSBiZmQgb2JqZWN0IGZvciBlYWNoIHN5bWIgdG8KKwkvLy8gZ2V0IGl0J3MgY29udGVudHMsIGhlbmNlIHdlIHN0b3JlIHRoZSBmaWx0ZXIgdXNlZCBieSB0aGUgYmZkIGN0b3IuCisJc3RyaW5nX2ZpbHRlciBjb25zdCAmIHN5bWJvbF9maWx0ZXI7CisKKwl2b2lkIG91dHB1dF9zYW1wbGVfZGF0YShzdGQ6Om9zdHJlYW0gJiBvdXQsCisJCXNhbXBsZV9lbnRyeSBjb25zdCAmIHNhbXBsZSwgc2l6ZV90IGNvdW50KTsKKworCS8vLyBvdXRwdXQgYXR0cmlidXRlIGluIFhNTAorCXZvaWQgb3V0cHV0X2F0dHJpYnV0ZShzdGQ6Om9zdHJlYW0gJiBvdXQsIGZpZWxkX2RhdHVtIGNvbnN0ICYgZGF0dW0sCisJCQkgICAgICBmb3JtYXRfZmxhZ3MgZmwsIHRhZ190IHRhZyk7CisKKwkvLy8gUmV0cmlldmUgYSBiZmQgb2JqZWN0IGZvciB0aGlzIHN5bWJvbCwgcmVvcGVuaW5nIGEgbmV3IGJmZCBvYmplY3QKKwkvLy8gb25seSBpZiBuZWNlc3NhcnkKKwlib29sIGdldF9iZmRfb2JqZWN0KHN5bWJvbF9lbnRyeSBjb25zdCAqIHN5bWIsIG9wX2JmZCAqICYgYWJmZCkgY29uc3Q7CisKKwl2b2lkIG91dHB1dF90aGVfc3ltYm9sX2RhdGEoc3RkOjpvc3RyZWFtICYgb3V0LAorCQlzeW1ib2xfZW50cnkgY29uc3QgKiBzeW1iLCBvcF9iZmQgKiAmIGFiZmQpOworCisJdm9pZCBvdXRwdXRfY2dfY2hpbGRyZW4oc3RkOjpvc3RyZWFtICYgb3V0LAorCQljZ19zeW1ib2w6OmNoaWxkcmVuIGNvbnN0IGNnX3N5bWIsIG9wX2JmZCAqICYgYWJmZCk7Cit9OworCisvLyBjYWxsZ3JhcGggWE1MIG91dHB1dCB2ZXJzaW9uCitjbGFzcyB4bWxfY2dfZm9ybWF0dGVyIDogcHVibGljIHhtbF9mb3JtYXR0ZXIgeworcHVibGljOgorCS8vLyBidWlsZCBhIHJlYWR5IHRvIHVzZSBmb3JtYXR0ZXIKKwl4bWxfY2dfZm9ybWF0dGVyKGNhbGxncmFwaF9jb250YWluZXIgY29uc3QgJiBjYWxsZ3JhcGgsCisJCXN5bWJvbF9jb2xsZWN0aW9uICYgc3ltYm9scywgc3RyaW5nX2ZpbHRlciBjb25zdCAmIHNmKTsKKworCS8qKiBvdXRwdXQgb25lIHN5bWJvbCBzeW1iIHRvIG91dCBhY2NvcmRpbmcgdG8gdGhlIG91dHB1dCBmb3JtYXQKKwkgKiBzcGVjaWZpZXIgcHJldmlvdXNseSBzZXQgYnkgY2FsbChzKSB0byBhZGRfZm9ybWF0KCkgKi8KKwl2aXJ0dWFsIHZvaWQgb3V0cHV0X3N5bWJvbChzdGQ6Om9zdHJlYW0gJiBvdXQsCisJCXN5bWJvbF9lbnRyeSBjb25zdCAqIHN5bWIsIHNpemVfdCBsbywgc2l6ZV90IGhpLCBib29sIGlzX21vZHVsZSk7CisKK3ByaXZhdGU6CisJLy8vIGNvbnRhaW5lciB3ZSB3b3JrIGZyb20KKwljYWxsZ3JhcGhfY29udGFpbmVyIGNvbnN0ICYgY2FsbGdyYXBoOworCisJdm9pZCBvdXRwdXRfc3ltYm9sX2NvcmUoc3RkOjpvc3RyZWFtICYgb3V0LAorCQljZ19zeW1ib2w6OmNoaWxkcmVuIGNvbnN0IGNnX3N5bWIsCisJCXN0ZDo6c3RyaW5nIGNvbnN0IHNlbGZuYW1lLCBzdGQ6OnN0cmluZyBjb25zdCBxbmFtZSwKKwkJc2l6ZV90IGxvLCBzaXplX3QgaGksIGJvb2wgaXNfbW9kdWxlLCB0YWdfdCB0YWcpOworfTsKKworfSAvLyBuYW1lc3BhY2UgZm9ybWF0X291dHB1dCAKKworCisjZW5kaWYgLyogIUZPUk1BVF9PVVRQVVRfSCAqLwpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvbGlicHAvaW1hZ2VfZXJyb3JzLmNwcCBiL29wcm9maWxlLTAuOS43L2xpYnBwL2ltYWdlX2Vycm9ycy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDlkMjExZQotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2xpYnBwL2ltYWdlX2Vycm9ycy5jcHAKQEAgLTAsMCArMSw4NyBAQAorLyoqCisgKiBAZmlsZSBpbWFnZV9lcnJvcnMuY3BwCisgKiBSZXBvcnQgZXJyb3JzIGluIGltYWdlcworICoKKyAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDIgT1Byb2ZpbGUgYXV0aG9ycworICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKKyAqCisgKiBAYXV0aG9yIEpvaG4gTGV2b24KKyAqLworCisjaW5jbHVkZSAiaW1hZ2VfZXJyb3JzLmgiCisKKyNpbmNsdWRlICJhcnJhbmdlX3Byb2ZpbGVzLmgiCisjaW5jbHVkZSAic3RyaW5nX21hbmlwLmgiCisjaW5jbHVkZSAibG9jYXRlX2ltYWdlcy5oIgorCisjaW5jbHVkZSA8aW9zdHJlYW0+CisjaW5jbHVkZSA8c2V0PgorCit1c2luZyBuYW1lc3BhY2Ugc3RkOworCituYW1lc3BhY2UgeworCitzZXQ8c3RyaW5nPiByZXBvcnRlZF9pbWFnZXNfZXJyb3I7CisKK30KKwordm9pZCByZXBvcnRfaW1hZ2VfZXJyb3Ioc3RyaW5nIGNvbnN0ICYgaW1hZ2UsIGltYWdlX2Vycm9yIGVycm9yLCBib29sIGZhdGFsLAorCQkJZXh0cmFfaW1hZ2VzIGNvbnN0ICYgZXh0cmEpCit7CisJaWYgKGVycm9yID09IGltYWdlX29rKQorCQlyZXR1cm47CisKKwlzdHJpbmcgaW1hZ2VfbmFtZSA9IGV4dHJhLmdldF9hcmNoaXZlX3BhdGgoKSArIGltYWdlOworCisJaWYgKHJlcG9ydGVkX2ltYWdlc19lcnJvci5maW5kKGltYWdlX25hbWUpID09CisJICAgIHJlcG9ydGVkX2ltYWdlc19lcnJvci5lbmQoKSkgeworCQlyZXBvcnRlZF9pbWFnZXNfZXJyb3IuaW5zZXJ0KGltYWdlX25hbWUpOworCisJCS8vIEZJWE1FOiBoYWNreQorCQlpZiAoZXJyb3IgPT0gaW1hZ2Vfbm90X2ZvdW5kICYmIGlzX3ByZWZpeChpbWFnZSwgImFub24gIikpCisJCQlyZXR1cm47CisKKwkJY2VyciA8PCAoZmF0YWwgPyAiZXJyb3I6ICIgOiAid2FybmluZzogIik7CisJCWNlcnIgPDwgaW1hZ2VfbmFtZSA8PCAnICc7CisKKwkJc3dpdGNoIChlcnJvcikgeworCQkJY2FzZSBpbWFnZV9ub3RfZm91bmQ6CisJCQkJY2VyciA8PCAiY291bGQgbm90IGJlIGZvdW5kLlxuIjsKKwkJCQlicmVhazsKKworCQkJY2FzZSBpbWFnZV91bnJlYWRhYmxlOgorCQkJCWNlcnIgPDwgImNvdWxkIG5vdCBiZSByZWFkLlxuIjsKKwkJCQlicmVhazsKKworCQkJY2FzZSBpbWFnZV9tdWx0aXBsZV9tYXRjaDoKKwkJCQljZXJyIDw8ICJtYXRjaGVzIG1vcmUgdGhhbiBvbmUgZmlsZTogIgorCQkJCSAgICAiZGV0YWlsZWQgcHJvZmlsZSB3aWxsIG5vdCBiZSBwcm92aWRlZC5cbiI7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgaW1hZ2VfZm9ybWF0X2ZhaWx1cmU6CisJCQkJY2VyciA8PCAiaXMgbm90IGluIGEgdXNhYmxlIGJpbmFyeSBmb3JtYXQuXG4iOworCQkJCWJyZWFrOworCisJCQljYXNlIGltYWdlX29rOgorCQkJCWJyZWFrOworCQl9CisJfQorfQorCisKK3ZvaWQgcmVwb3J0X2ltYWdlX2Vycm9yKGludmVydGVkX3Byb2ZpbGUgY29uc3QgJiBwcm9maWxlLCBib29sIGZhdGFsLAorCQkJZXh0cmFfaW1hZ2VzIGNvbnN0ICYgZXh0cmEpCit7CisJcmVwb3J0X2ltYWdlX2Vycm9yKHByb2ZpbGUuaW1hZ2UsIHByb2ZpbGUuZXJyb3IsIGZhdGFsLCBleHRyYSk7Cit9CisKKwordm9pZCByZXBvcnRfaW1hZ2VfZXJyb3JzKGxpc3Q8aW52ZXJ0ZWRfcHJvZmlsZT4gY29uc3QgJiBwbGlzdCwKKwkJCSBleHRyYV9pbWFnZXMgY29uc3QgJiBleHRyYSkKK3sKKwlsaXN0PGludmVydGVkX3Byb2ZpbGU+Ojpjb25zdF9pdGVyYXRvciBpdCA9IHBsaXN0LmJlZ2luKCk7CisJbGlzdDxpbnZlcnRlZF9wcm9maWxlPjo6Y29uc3RfaXRlcmF0b3IgY29uc3QgZW5kID0gcGxpc3QuZW5kKCk7CisKKwlmb3IgKDsgaXQgIT0gZW5kOyArK2l0KQorCQlyZXBvcnRfaW1hZ2VfZXJyb3IoKml0LCBmYWxzZSwgZXh0cmEpOworfQpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvbGlicHAvaW1hZ2VfZXJyb3JzLmggYi9vcHJvZmlsZS0wLjkuNy9saWJwcC9pbWFnZV9lcnJvcnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWE2OTdjCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvbGlicHAvaW1hZ2VfZXJyb3JzLmgKQEAgLTAsMCArMSw0MyBAQAorLyoqCisgKiBAZmlsZSBpbWFnZV9lcnJvcnMuaAorICogUmVwb3J0IGVycm9ycyBpbiBpbWFnZXMKKyAqCisgKiBAcmVtYXJrIENvcHlyaWdodCAyMDAyIE9Qcm9maWxlIGF1dGhvcnMKKyAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCisgKgorICogQGF1dGhvciBKb2huIExldm9uCisgKi8KKworI2lmbmRlZiBJTUFHRV9FUlJPUlNfSAorI2RlZmluZSBJTUFHRV9FUlJPUlNfSAorCisjaW5jbHVkZSA8bGlzdD4KKyNpbmNsdWRlIDxzdHJpbmc+CisKK2NsYXNzIGludmVydGVkX3Byb2ZpbGU7CitjbGFzcyBleHRyYV9pbWFnZXM7CisKKy8vLyBwb3NzaWJsZSByZWFzb25zIHdoeSB3ZSBjYW4ndCByZWFkIGEgYmluYXJ5IGltYWdlCitlbnVtIGltYWdlX2Vycm9yIHsKKwlpbWFnZV9vayA9IDAsCisJaW1hZ2Vfbm90X2ZvdW5kLAorCWltYWdlX3VucmVhZGFibGUsCisJaW1hZ2VfZm9ybWF0X2ZhaWx1cmUsCisJaW1hZ2VfbXVsdGlwbGVfbWF0Y2gKK307CisKKy8vLyBvdXRwdXQgd2h5IHRoZSBpbWFnZSBwYXNzZWQgY2FuJ3QgYmUgcmVhZCB0byBzdGRlcnIsIHdlIHdhcnJhbnR5IG9ubHkgb25lCisvLy8gZXJyb3IgcmVwb3J0IGJ5IGltYWdlIG5hbWUuCit2b2lkCityZXBvcnRfaW1hZ2VfZXJyb3Ioc3RkOjpzdHJpbmcgY29uc3QgJiBpbWFnZSwgaW1hZ2VfZXJyb3IgZXJyb3IsIGJvb2wgZmF0YWwsCisJCSAgIGV4dHJhX2ltYWdlcyBjb25zdCAmIGV4dHJhKTsKKworLy8vIG91dHB1dCB3aHkgdGhlIGltYWdlIHBhc3NlZCBjYW4ndCBiZSByZWFkIHRvIHN0ZGVycgordm9pZCByZXBvcnRfaW1hZ2VfZXJyb3IoaW52ZXJ0ZWRfcHJvZmlsZSBjb25zdCAmIHByb2ZpbGUsIGJvb2wgZmF0YWwsCisJCQlleHRyYV9pbWFnZXMgY29uc3QgJiBleHRyYSk7CisKKy8vLyBvdXRwdXQgd2h5IGFueSBiYWQgaW1hZ2VzIGNhbid0IGJlIHJlYWQgdG8gc3RkZXJyCit2b2lkIHJlcG9ydF9pbWFnZV9lcnJvcnMoc3RkOjpsaXN0PGludmVydGVkX3Byb2ZpbGU+IGNvbnN0ICYgcGxpc3QsCisJCQkgZXh0cmFfaW1hZ2VzIGNvbnN0ICYgZXh0cmEpOworCisjZW5kaWYgLyogSU1BR0VfRVJST1JTX0ggKi8KZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2xpYnBwL2xvY2F0ZV9pbWFnZXMuY3BwIGIvb3Byb2ZpbGUtMC45LjcvbGlicHAvbG9jYXRlX2ltYWdlcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDI2YWRmZAotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2xpYnBwL2xvY2F0ZV9pbWFnZXMuY3BwCkBAIC0wLDAgKzEsMjI1IEBACisvKioKKyAqIEBmaWxlIGxvY2F0ZV9pbWFnZXMuY3BwCisgKiBDb21tYW5kLWxpbmUgaGVscGVyCisgKgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMiBPUHJvZmlsZSBhdXRob3JzCisgKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORworICoKKyAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQorICogQGF1dGhvciBKb2huIExldm9uCisgKi8KKworI2luY2x1ZGUgImZpbGVfbWFuaXAuaCIKKyNpbmNsdWRlICJsb2NhdGVfaW1hZ2VzLmgiCisjaW5jbHVkZSAic3RyaW5nX21hbmlwLmgiCisKKyNpbmNsdWRlIDxjZXJybm8+CisjaW5jbHVkZSA8aW9zdHJlYW0+CisjaW5jbHVkZSA8c3N0cmVhbT4KKyNpbmNsdWRlIDxjc3RkbGliPgorCit1c2luZyBuYW1lc3BhY2Ugc3RkOworCisKK2ludCBleHRyYV9pbWFnZXM6OnN1aWQ7CisKK2V4dHJhX2ltYWdlczo6ZXh0cmFfaW1hZ2VzKCkKKwk6CisJdWlkKCsrc3VpZCkKK3sKK30KKworCit2b2lkIGV4dHJhX2ltYWdlczo6cG9wdWxhdGUodmVjdG9yPHN0cmluZz4gY29uc3QgJiBwYXRocywKKwkJCSAgICBzdHJpbmcgY29uc3QgJiBwcmVmaXhfcGF0aCkKK3sKKwl2ZWN0b3I8c3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgY2l0ID0gcGF0aHMuYmVnaW4oKTsKKwl2ZWN0b3I8c3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gcGF0aHMuZW5kKCk7CisJZm9yICg7IGNpdCAhPSBlbmQ7ICsrY2l0KSB7CisJCXN0cmluZyBjb25zdCBwYXRoID0gb3BfcmVhbHBhdGgocHJlZml4X3BhdGggKyAqY2l0KTsKKwkJbGlzdDxzdHJpbmc+IGZpbGVfbGlzdDsKKwkJY3JlYXRlX2ZpbGVfbGlzdChmaWxlX2xpc3QsIHBhdGgsICIqIiwgdHJ1ZSk7CisJCWxpc3Q8c3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgbGl0ID0gZmlsZV9saXN0LmJlZ2luKCk7CisJCWxpc3Q8c3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgbGVuZCA9IGZpbGVfbGlzdC5lbmQoKTsKKwkJZm9yICg7IGxpdCAhPSBsZW5kOyArK2xpdCkgeworCQkJdmFsdWVfdHlwZSB2KG9wX2Jhc2VuYW1lKCpsaXQpLCBvcF9kaXJuYW1lKCpsaXQpKTsKKwkJCWltYWdlcy5pbnNlcnQodik7CisJCX0KKwl9Cit9CisKKwordm9pZCBleHRyYV9pbWFnZXM6OnBvcHVsYXRlKHZlY3RvcjxzdHJpbmc+IGNvbnN0ICYgcGF0aHMsCisJCQkgICAgc3RyaW5nIGNvbnN0ICYgYXJjaGl2ZV9wYXRoXywKKwkJCSAgICBzdHJpbmcgY29uc3QgJiByb290X3BhdGhfKQoreworCWFyY2hpdmVfcGF0aCA9IGFyY2hpdmVfcGF0aF87CisJaWYgKCFhcmNoaXZlX3BhdGguZW1wdHkoKSkKKwkJYXJjaGl2ZV9wYXRoID0gb3BfcmVhbHBhdGgoYXJjaGl2ZV9wYXRoKTsKKworCXJvb3RfcGF0aCA9IG9wX3JlYWxwYXRoKHJvb3RfcGF0aF8pOworCWlmICghcm9vdF9wYXRoLmVtcHR5KCkpCisJCXJvb3RfcGF0aCA9IG9wX3JlYWxwYXRoKHJvb3RfcGF0aCk7CisKKwlpZiAocm9vdF9wYXRoLmVtcHR5KCkgJiYgYXJjaGl2ZV9wYXRoLmVtcHR5KCkpCisJCXBvcHVsYXRlKHBhdGhzLCAiIik7CisJaWYgKCFhcmNoaXZlX3BhdGguZW1wdHkoKSkKKwkJcG9wdWxhdGUocGF0aHMsIGFyY2hpdmVfcGF0aCk7CisJaWYgKCFyb290X3BhdGguZW1wdHkoKSAmJiByb290X3BhdGggIT0gYXJjaGl2ZV9wYXRoKQorCQlwb3B1bGF0ZShwYXRocywgcm9vdF9wYXRoKTsKK30KKworCit2ZWN0b3I8c3RyaW5nPiBjb25zdCBleHRyYV9pbWFnZXM6OmZpbmQoc3RyaW5nIGNvbnN0ICYgbmFtZSkgY29uc3QKK3sKKwlleHRyYV9pbWFnZXM6Om1hdGNoZXIgbWF0Y2gobmFtZSk7CisJcmV0dXJuIGZpbmQobWF0Y2gpOworfQorCisKK3ZlY3RvcjxzdHJpbmc+IGNvbnN0CitleHRyYV9pbWFnZXM6OmZpbmQoZXh0cmFfaW1hZ2VzOjptYXRjaGVyIGNvbnN0ICYgbWF0Y2gpIGNvbnN0Cit7CisJdmVjdG9yPHN0cmluZz4gbWF0Y2hlczsKKworCWNvbnN0X2l0ZXJhdG9yIGNpdCA9IGltYWdlcy5iZWdpbigpOworCWNvbnN0X2l0ZXJhdG9yIGVuZCA9IGltYWdlcy5lbmQoKTsKKworCWZvciAoOyBjaXQgIT0gZW5kOyArK2NpdCkgeworCQlpZiAobWF0Y2goY2l0LT5maXJzdCkpCisJCQltYXRjaGVzLnB1c2hfYmFjayhjaXQtPnNlY29uZCArICcvJyArIGNpdC0+Zmlyc3QpOworCX0KKworCXJldHVybiBtYXRjaGVzOworfQorCisKK25hbWVzcGFjZSB7CisKKy8qKgorICogRnVuY3Rpb24gb2JqZWN0IGZvciBtYXRjaGluZyBhIG1vZHVsZSBmaWxlbmFtZSwgd2hpY2gKKyAqIGhhcyBpdHMgb3duIHNwZWNpYWwgbWFuZ2xpbmcgcnVsZXMgaW4gMi42IGtlcm5lbHMuCisgKi8KK3N0cnVjdCBtb2R1bGVfbWF0Y2hlciA6IHB1YmxpYyBleHRyYV9pbWFnZXM6Om1hdGNoZXIgeworcHVibGljOgorCWV4cGxpY2l0IG1vZHVsZV9tYXRjaGVyKHN0cmluZyBjb25zdCAmIHMpCisJCTogZXh0cmFfaW1hZ2VzOjptYXRjaGVyKHMpIHt9CisKKwl2aXJ0dWFsIGJvb2wgb3BlcmF0b3IoKShzdHJpbmcgY29uc3QgJiBjYW5kaWRhdGUpIGNvbnN0IHsKKwkJaWYgKGNhbmRpZGF0ZS5sZW5ndGgoKSAhPSB2YWx1ZS5sZW5ndGgoKSkKKwkJCXJldHVybiBmYWxzZTsKKworCQlmb3IgKHN0cmluZzo6c2l6ZV90eXBlIGkgPSAwIDsgaSA8IHZhbHVlLmxlbmd0aCgpIDsgKytpKSB7CisJCQlpZiAodmFsdWVbaV0gPT0gY2FuZGlkYXRlW2ldKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKHZhbHVlW2ldID09ICdfJyAmJgorCQkJCShjYW5kaWRhdGVbaV0gPT0gJywnIHx8IGNhbmRpZGF0ZVtpXSA9PSAnLScpKQorCQkJCWNvbnRpbnVlOworCQkJcmV0dXJuIGZhbHNlOworCQl9CisKKwkJcmV0dXJuIHRydWU7CisJfQorfTsKKworfSAvLyBhbm9uIG5hbWVzcGFjZQorCitzdHJpbmcgY29uc3QgZXh0cmFfaW1hZ2VzOjpsb2NhdGVfaW1hZ2Uoc3RyaW5nIGNvbnN0ICYgaW1hZ2VfbmFtZSwKKwkJCSAgIGltYWdlX2Vycm9yICYgZXJyb3IsIGJvb2wgZml4dXApIGNvbnN0Cit7CisJLy8gU2tpcCBzZWFyY2ggc2luY2Ugcm9vdF9wYXRoIGNhbiBiZSBub24gZW1wdHkgYW5kIHdlIHdhbnQKKwkvLyB0byBsb29rdXAgb25seSBpbiByb290X3BhdGggaW4gdGhpcyBjYXNlLgorCWlmICghYXJjaGl2ZV9wYXRoLmVtcHR5KCkpIHsKKwkJc3RyaW5nIGltYWdlID0gb3BfcmVhbHBhdGgoYXJjaGl2ZV9wYXRoICsgaW1hZ2VfbmFtZSk7CisJCWlmIChvcF9maWxlX3JlYWRhYmxlKGltYWdlKSkgeworCQkJZXJyb3IgPSBpbWFnZV9vazsKKwkJCXJldHVybiBmaXh1cCA/IGltYWdlIDogaW1hZ2VfbmFtZTsKKwkJfQorCisJCWlmIChlcnJubyA9PSBFQUNDRVMpIHsKKwkJCWVycm9yID0gaW1hZ2VfdW5yZWFkYWJsZTsKKwkJCXJldHVybiBpbWFnZV9uYW1lOworCQl9CisJfQorCisJLy8gV2UgY2F0Y2ggYSBjYXNlIHdoZXJlIHJvb3RfcGF0aC5lbXB0eSgpIHNpbmNlIHdlIHNraXBwZWQgYQorCS8vIHNlYXJjaCBpbiAiLyIgYWJvdmUgd2hlbiBhcmNoaXZlX3BhdGggaXMgZW1wdHkuIFRoZSBjYXNlIHdoZXJlCisJLy8gcm9vdF9wYXRoLmVtcHR5KCkgJiYgYXJjaGl2ZV9wYXRoLmVtcHR5KCkgaXMgdGhlIG5vcm1hbCBvbmUsIG5vbmUKKwkvLyBvZiAtLXJvb3Qgb3IgYXJjaGl2ZTogYXMgYmVlbiBnaXZlbiBvbiBjb21tYW5kIGxpbmUuCisJaWYgKCFyb290X3BhdGguZW1wdHkoKSB8fCBhcmNoaXZlX3BhdGguZW1wdHkoKSkgeworCQlzdHJpbmcgaW1hZ2UgPSBvcF9yZWFscGF0aChyb290X3BhdGggKyBpbWFnZV9uYW1lKTsKKwkJaWYgKG9wX2ZpbGVfcmVhZGFibGUoaW1hZ2UpKSB7CisJCQllcnJvciA9IGltYWdlX29rOworCQkJcmV0dXJuIGZpeHVwID8gaW1hZ2UgOiBpbWFnZV9uYW1lOworCQl9CisJfQorCisJZXJyb3IgPSBpbWFnZV9ub3RfZm91bmQ7CisJcmV0dXJuIGltYWdlX25hbWU7Cit9CisKK3N0cmluZyBjb25zdCBleHRyYV9pbWFnZXM6OmZpbmRfaW1hZ2VfcGF0aChzdHJpbmcgY29uc3QgJiBpbWFnZV9uYW1lLAorCWltYWdlX2Vycm9yICYgZXJyb3IsIGJvb2wgZml4dXApIGNvbnN0Cit7CisJZXJyb3IgPSBpbWFnZV9vazsKKworCXN0cmluZyBjb25zdCBpbWFnZSA9IGxvY2F0ZV9pbWFnZShpbWFnZV9uYW1lLCBlcnJvciwgZml4dXApOworCWlmIChlcnJvciAhPSBpbWFnZV9ub3RfZm91bmQpCisJCXJldHVybiBpbWFnZTsKKworCXN0cmluZyBjb25zdCBiYXNlID0gb3BfYmFzZW5hbWUoaW1hZ2UpOworCisJdmVjdG9yPHN0cmluZz4gcmVzdWx0ID0gZmluZChiYXNlKTsKKworCS8vIG5vdCBmb3VuZCwgdHJ5IGEgbW9kdWxlIHNlYXJjaAorCWlmIChyZXN1bHQuZW1wdHkoKSkKKwkJcmVzdWx0ID0gZmluZChtb2R1bGVfbWF0Y2hlcihiYXNlICsgIi5rbyIpKTsKKworCWlmIChyZXN1bHQuZW1wdHkoKSkgeworCQllcnJvciA9IGltYWdlX25vdF9mb3VuZDsKKwkJcmV0dXJuIGltYWdlX25hbWU7CisJfQorCisJaWYgKHJlc3VsdC5zaXplKCkgPT0gMSkgeworCQllcnJvciA9IGltYWdlX29rOworCQlyZXR1cm4gZml4dXAgPyByZXN1bHRbMF0gOiBpbWFnZV9uYW1lOworCX0KKworCS8vIFdlIGNhbid0IGdldCBtdWx0aXBsZSByZXN1bHQgZXhjZXB0IGlmIG9ubHkgb25lIHJlc3VsdCBpcyBwcmVmaXhlZAorCS8vIGJ5IGFyY2hpdmVfcGF0aCBvciBieSByb290X3BhdGguCisJc2l6ZV90IGNvdW50ID0gMDsKKwlzaXplX3QgaW5kZXggPSAwOworCWZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVzdWx0LnNpemUoKSAmJiBjb3VudCA8IDI7ICsraSkgeworCQlpZiAoaXNfcHJlZml4KHJlc3VsdFtpXSwgYXJjaGl2ZV9wYXRoKSkgeworCQkJaW5kZXggPSBpOworCQkJKytjb3VudDsKKwkJfQorCX0KKworCWlmIChjb3VudCA9PSAwKSB7CisJCWZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVzdWx0LnNpemUoKSAmJiBjb3VudCA8IDI7ICsraSkgeworCQkJaWYgKGlzX3ByZWZpeChyZXN1bHRbaV0sIHJvb3RfcGF0aCkpIHsKKwkJCQlpbmRleCA9IGk7CisJCQkJKytjb3VudDsKKwkJCX0KKwkJfQorCX0KKworCWlmIChjb3VudCA9PSAxKSB7CisJCWVycm9yID0gaW1hZ2Vfb2s7CisJCXJldHVybiBmaXh1cCA/IHJlc3VsdFtpbmRleF0gOiBpbWFnZV9uYW1lOworCX0KKworCWVycm9yID0gaW1hZ2VfbXVsdGlwbGVfbWF0Y2g7CisJcmV0dXJuIGltYWdlX25hbWU7Cit9CisKKworc3RyaW5nIGV4dHJhX2ltYWdlczo6c3RyaXBfcGF0aF9wcmVmaXgoc3RyaW5nIGNvbnN0ICYgaW1hZ2UpIGNvbnN0Cit7CisJaWYgKGFyY2hpdmVfcGF0aC5sZW5ndGgoKSAmJiBpc19wcmVmaXgoaW1hZ2UsIGFyY2hpdmVfcGF0aCkpCisJCXJldHVybiBpbWFnZS5zdWJzdHIoYXJjaGl2ZV9wYXRoLnNpemUoKSk7CisJaWYgKHJvb3RfcGF0aC5sZW5ndGgoKSAmJiBpc19wcmVmaXgoaW1hZ2UsIHJvb3RfcGF0aCkpCisJCXJldHVybiBpbWFnZS5zdWJzdHIocm9vdF9wYXRoLnNpemUoKSk7CisJcmV0dXJuIGltYWdlOworfQpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvbGlicHAvbG9jYXRlX2ltYWdlcy5oIGIvb3Byb2ZpbGUtMC45LjcvbGlicHAvbG9jYXRlX2ltYWdlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjNzI5ODkKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9saWJwcC9sb2NhdGVfaW1hZ2VzLmgKQEAgLTAsMCArMSwxMDcgQEAKKy8qKgorICogQGZpbGUgbG9jYXRlX2ltYWdlcy5oCisgKiBMb2NhdGlvbiBvZiBiaW5hcnkgaW1hZ2VzCisgKgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMiBPUHJvZmlsZSBhdXRob3JzCisgKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORworICoKKyAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQorICogQGF1dGhvciBKb2huIExldm9uCisgKi8KKworI2lmbmRlZiBMT0NBVEVfSU1BR0VTX0gKKyNkZWZpbmUgTE9DQVRFX0lNQUdFU19ICisKKyNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8bWFwPgorI2luY2x1ZGUgPHZlY3Rvcj4KKworI2luY2x1ZGUgImltYWdlX2Vycm9ycy5oIgorCisvKioKKyAqIEEgY2xhc3MgY29udGFpbmluZyBtYXBwaW5ncyBmcm9tIGFuIGltYWdlIGJhc2VuYW1lLAorICogc3VjaCBhcyAnZmxvcHB5LmtvJywgdG8gbG9jYXRpb25zIGluIHRoZSBwYXRocyBwYXNzZWQKKyAqIGluIHRvIHBvcHVsYXRlKCkuCisgKgorICogVGhlIG5hbWUgbWF5IGV4aXN0IG11bHRpcGxlIHRpbWVzOyBhbGwgbG9jYXRpb25zIGFyZSByZWNvcmRlZAorICogaW4gdGhpcyBjb250YWluZXIuCisgKi8KK2NsYXNzIGV4dHJhX2ltYWdlcyB7CitwdWJsaWM6CisJZXh0cmFfaW1hZ2VzKCk7CisKKwkvLy8gYWRkIGFsbCBmaWxlbmFtZXMgZm91bmQgaW4gdGhlIGdpdmVuIHBhdGhzIHByZWZpeGVkIGJ5IHRoZQorCS8vLyBhcmNoaXZlIHBhdGggb3IgdGhlIHJvb3QgcGF0aCwgcmVjdXJzaXZlbHkKKwl2b2lkIHBvcHVsYXRlKHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25zdCAmIHBhdGhzLAorCQkgICAgICBzdGQ6OnN0cmluZyBjb25zdCAmIGFyY2hpdmVfcGF0aCwKKwkJICAgICAgc3RkOjpzdHJpbmcgY29uc3QgJiByb290X3BhdGgpOworCisJLy8vIGJhc2UgY2xhc3MgZm9yIG1hdGNoZXIgZnVuY3RvcnMgb2JqZWN0CisJc3RydWN0IG1hdGNoZXIgeworCQlzdGQ6OnN0cmluZyBjb25zdCAmIHZhbHVlOworCXB1YmxpYzoKKwkJZXhwbGljaXQgbWF0Y2hlcihzdGQ6OnN0cmluZyBjb25zdCAmIHYpIDogdmFsdWUodikge30KKwkJdmlydHVhbCB+bWF0Y2hlcigpIHt9CisJCS8vLyBkZWZhdWx0IGZ1bmN0b3IgYWxsb3dpbmcgdHJpdmlhbCBtYXRjaAorCQl2aXJ0dWFsIGJvb2wgb3BlcmF0b3IoKShzdGQ6OnN0cmluZyBjb25zdCAmIHN0cikgY29uc3QgeworCQkJcmV0dXJuIHN0ciA9PSB2YWx1ZTsKKwkJfQorCX07CisKKwkvKioKKwkgKiByZXR1cm4gYSB2ZWN0b3Igb2YgYWxsIGRpcmVjdG9yaWVzIHRoYXQgbWF0Y2ggdGhlIGZ1bmN0b3IKKwkgKi8KKwlzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uc3QgZmluZChtYXRjaGVyIGNvbnN0ICYgbWF0Y2gpIGNvbnN0OworCisJLy8vIHJldHVybiBhIHZlY3RvciBvZiBhbGwgZGlyZWN0b3JpZXMgdGhhdCBtYXRjaCB0aGUgZ2l2ZW4gbmFtZQorCXN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25zdCBmaW5kKHN0ZDo6c3RyaW5nIGNvbnN0ICYgbmFtZSkgY29uc3Q7CisKKwkvKioKKwkgKiBAcGFyYW0gaW1hZ2VfbmFtZSBiaW5hcnkgaW1hZ2UgbmFtZQorCSAqIEBwYXJhbSBlcnJvciBlcnJvcnMgYXJlIGZsYWdnZWQgaW4gdGhpcyBwYXNzZWQgZW51bSByZWYKKwkgKiBAcGFyYW0gZml4dXAgaWYgdHJ1ZSByZXR1cm4gdGhlIGZpeGVkIGltYWdlIG5hbWUgZWxzZSBhbHdheXMgcmV0dXJuCisJICogIGltYWdlX25hbWUgYW5kIHVwZGF0ZSBlcnJvcgorCSAqCisJICogTG9jYXRlIGEgKG51bWJlciBvZikgbWF0Y2hpbmcgYWJzb2x1dGUgcGF0aHMgdG8gdGhlIGdpdmVuIGltYWdlCisJICogbmFtZS4gSWYgd2UgZmFpbCB0byBmaW5kIHRoZSBmaWxlIHdlIGZpbGwgaW4gZXJyb3IgYW5kIHJldHVybiB0aGUKKwkgKiBvcmlnaW5hbCBzdHJpbmcuCisJICovCisJc3RkOjpzdHJpbmcgY29uc3QgZmluZF9pbWFnZV9wYXRoKHN0ZDo6c3RyaW5nIGNvbnN0ICYgaW1hZ2VfbmFtZSwKKwkJCQlpbWFnZV9lcnJvciAmIGVycm9yLCBib29sIGZpeHVwKSBjb25zdDsKKworCS8vLyByZXR1cm4gdGhlIGFyY2hpdmUgcGF0aCB1c2VkIHRvIHBvcHVsYXRlIHRoZSBpbWFnZXMgbmFtZSBtYXAKKwlzdGQ6OnN0cmluZyBnZXRfYXJjaGl2ZV9wYXRoKCkgY29uc3QgeyByZXR1cm4gYXJjaGl2ZV9wYXRoOyB9CisKKwkvLy8gR2l2ZW4gYW4gaW1hZ2UgbmFtZSByZXR1cm5lZCBieSBmaW5kX2ltYWdlX3BhdGgoKSByZXR1cm4KKwkvLy8gYSBmaWxlbmFtZSB3aXRoIHRoZSBhcmNoaXZlX3BhdGggb3Igcm9vdF9wYXRoIHN0cmlwcGVkLgorCXN0ZDo6c3RyaW5nIHN0cmlwX3BhdGhfcHJlZml4KHN0ZDo6c3RyaW5nIGNvbnN0ICYgaW1hZ2UpIGNvbnN0OworCisJLy8vIHJldHVybiB0aGUgdWlkIGZvciB0aGlzIGV4dHJhX2ltYWdlcywgZmlyc3QgdmFsaWQgdWlkIGlzIDEKKwlpbnQgZ2V0X3VpZCgpIGNvbnN0IHsgcmV0dXJuIHVpZDsgfQorCitwcml2YXRlOgorCXZvaWQgcG9wdWxhdGUoc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0ICYgcGF0aHMsCisJCSAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0ICYgcHJlZml4X3BhdGgpOworCisJc3RkOjpzdHJpbmcgY29uc3QgbG9jYXRlX2ltYWdlKHN0ZDo6c3RyaW5nIGNvbnN0ICYgaW1hZ2VfbmFtZSwKKwkJCQlpbWFnZV9lcnJvciAmIGVycm9yLCBib29sIGZpeHVwKSBjb25zdDsKKworCXR5cGVkZWYgc3RkOjptdWx0aW1hcDxzdGQ6OnN0cmluZywgc3RkOjpzdHJpbmc+IGltYWdlc190OworCXR5cGVkZWYgaW1hZ2VzX3Q6OnZhbHVlX3R5cGUgdmFsdWVfdHlwZTsKKwl0eXBlZGVmIGltYWdlc190Ojpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKKworCS8vLyBtYXAgZnJvbSBpbWFnZSBiYXNlbmFtZSB0byBvd25pbmcgZGlyZWN0b3J5CisJaW1hZ2VzX3QgaW1hZ2VzOworCS8vLyB0aGUgYXJjaGl2ZSBwYXRoIHBhc3NlZCB0byBwb3B1bGF0ZSB0aGUgaW1hZ2VzIG5hbWUgbWFwLgorCXN0ZDo6c3RyaW5nIGFyY2hpdmVfcGF0aDsKKwkvLy8gQSBwcmVmaXggYWRkZWQgdG8gbG9jYXRlIGJpbmFyaWVzIGlmIHRoZXkgY2FuJ3QgYmUgZm91bmQKKwkvLy8gdGhyb3VnaCB0aGUgYXJjaGl2ZSBwYXRoCisJc3RkOjpzdHJpbmcgcm9vdF9wYXRoOworCisJLy8vIHVuaXF1ZSBpZGVudGlmaWVyLCBmaXJzdCB2YWxpZCB1aWQgaXMgMQorCWludCB1aWQ7CisJLy8vIHVuaXF1ZSB1aWQgZ2VuZXJhdG9yCisJc3RhdGljIGludCBzdWlkOworfTsKKworI2VuZGlmIC8qIExPQ0FURV9JTUFHRVNfSCAqLwpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvbGlicHAvbmFtZV9zdG9yYWdlLmNwcCBiL29wcm9maWxlLTAuOS43L2xpYnBwL25hbWVfc3RvcmFnZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzY2NDU3MwotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2xpYnBwL25hbWVfc3RvcmFnZS5jcHAKQEAgLTAsMCArMSwxMDIgQEAKKy8qKgorICogQGZpbGUgbmFtZV9zdG9yYWdlLmNwcAorICogU3RvcmFnZSBvZiBnbG9iYWwgbmFtZXMgKGZpbGVuYW1lcyBhbmQgc3ltYm9scykKKyAqCisgKiBAcmVtYXJrIENvcHlyaWdodCAyMDAyIE9Qcm9maWxlIGF1dGhvcnMKKyAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCisgKgorICogQGF1dGhvciBQaGlsaXBwZSBFbGllCisgKiBAYXV0aG9yIEpvaG4gTGV2b24KKyAqLworCisjaW5jbHVkZSAibmFtZV9zdG9yYWdlLmgiCisjaW5jbHVkZSAiZGVtYW5nbGVfc3ltYm9sLmgiCisjaW5jbHVkZSAiZmlsZV9tYW5pcC5oIgorI2luY2x1ZGUgInN0cmluZ19tYW5pcC5oIgorI2luY2x1ZGUgImxvY2F0ZV9pbWFnZXMuaCIKKyNpbmNsdWRlICJvcF9leGNlcHRpb24uaCIKKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKworaW1hZ2VfbmFtZV9zdG9yYWdlIGltYWdlX25hbWVzOworZGVidWdfbmFtZV9zdG9yYWdlIGRlYnVnX25hbWVzOworc3ltYm9sX25hbWVfc3RvcmFnZSBzeW1ib2xfbmFtZXM7CisKKworc3RyaW5nIGNvbnN0ICYgaW1hZ2VfbmFtZV9zdG9yYWdlOjpiYXNlbmFtZShpbWFnZV9uYW1lX2lkIGlkKSBjb25zdAoreworCXN0b3JlZF9maWxlbmFtZSBjb25zdCAmIG4gPSBnZXQoaWQpOworCWlmIChuLmJhc2VfZmlsZW5hbWUuZW1wdHkoKSkKKwkJbi5iYXNlX2ZpbGVuYW1lID0gb3BfYmFzZW5hbWUobi5maWxlbmFtZSk7CisJcmV0dXJuIG4uYmFzZV9maWxlbmFtZTsKK30KKworCitzdHJpbmcgY29uc3QgJiBpbWFnZV9uYW1lX3N0b3JhZ2U6OmdldF9uYW1lKGltYWdlX25hbWVfaWQgaWQsCisJCQkJCSAgICBpbWFnZV9uYW1lX3R5cGUgdHlwZSwKKwkJCQkJICAgIGV4dHJhX2ltYWdlcyBjb25zdCAmIGV4dHJhKSBjb25zdAoreworCXN0b3JlZF9maWxlbmFtZSBjb25zdCAmIG4gPSBnZXQoaWQpOworCWlmICh0eXBlID09IGludF9maWxlbmFtZSkgeworCQlyZXR1cm4gbi5maWxlbmFtZTsKKwl9IGVsc2UgaWYgKHR5cGUgPT0gaW50X2Jhc2VuYW1lKSB7CisJCXJldHVybiBiYXNlbmFtZShpZCk7CisJfSBlbHNlIGlmICh0eXBlID09IGludF9yZWFsX2Jhc2VuYW1lKSB7CisJCWlmIChuLmV4dHJhX2ltYWdlc191aWQgPT0gMCkgeworCQkJLy8gcmVjdXJzaXZlIGNhbGwgdG8gaW5pdCByZWFsX2ZpbGVuYW1lLgorCQkJZ2V0X25hbWUoaWQsIGludF9yZWFsX2ZpbGVuYW1lLCBleHRyYSk7CisJCQluLnJlYWxfYmFzZV9maWxlbmFtZSA9IG9wX2Jhc2VuYW1lKG4ucmVhbF9maWxlbmFtZSk7CisJCX0KKwkJcmV0dXJuIG4ucmVhbF9iYXNlX2ZpbGVuYW1lOworCX0gZWxzZSBpZiAodHlwZSA9PSBpbnRfcmVhbF9maWxlbmFtZSkgeworCQlpZiAobi5leHRyYV9pbWFnZXNfdWlkID09IDApIHsKKwkJCS8vIFdlIGlnbm9yZSBlcnJvciBoZXJlLCB0aGUgcmVhbCBwYXRoIHdpbGwgYmUKKwkJCS8vIGlkZW50aWNhbCB0byB0aGUgbmFtZSBkZXJpdmVkIGZyb20gdGhlIHNhbXBsZQorCQkJLy8gZmlsZW5hbWUgaW4gdGhpcyBjYXNlLiBGSVhNRTogdGhpcyBtZWFuIHRoYW4gdGhlCisJCQkvLyBhcmNoaXZlIHBhdGggd2lsbCBiZSBpZ25vcmVkIGlmIGFuIGVycm9yIG9jY3VyLgorCQkJaW1hZ2VfZXJyb3IgZXJyb3I7CisJCQluLnJlYWxfZmlsZW5hbWUgPSBleHRyYS5maW5kX2ltYWdlX3BhdGgobmFtZShpZCksCisJCQkJCQkJCWVycm9yLCB0cnVlKTsKKwkJCW4uZXh0cmFfaW1hZ2VzX3VpZCA9IGV4dHJhLmdldF91aWQoKTsKKwkJfQorCisJCWlmIChuLmV4dHJhX2ltYWdlc191aWQgPT0gZXh0cmEuZ2V0X3VpZCgpKQorCQkJcmV0dXJuIG4ucmVhbF9maWxlbmFtZTsKKwkJdGhyb3cgb3BfcnVudGltZV9lcnJvcigiaW1hZ2VfbmFtZV9zdG9yYWdlOjpnZXRfbmFtZSgpIGNhbGxlZCIKKwkJCQkgICAgICAgIiB3aXRoIGRpZmZlcmVudCBleHRyYSBwYXJhbWV0ZXIiKTsKKwl9CisKKwl0aHJvdyBvcF9ydW50aW1lX2Vycm9yKCJpbnZhbGlkIHBhcmFtZXRlciB0byIKKwkJCSAgICAgICAiIGltYWdlX25hbWVfc3RvcmFnZTs7Z2V0X25hbWUoKSIpOworfQorCisKK3N0cmluZyBjb25zdCAmIGRlYnVnX25hbWVfc3RvcmFnZTo6YmFzZW5hbWUoZGVidWdfbmFtZV9pZCBpZCkgY29uc3QKK3sKKwlzdG9yZWRfbmFtZSBjb25zdCAmIG4gPSBnZXQoaWQpOworCWlmIChuLm5hbWVfcHJvY2Vzc2VkLmVtcHR5KCkpCisJCW4ubmFtZV9wcm9jZXNzZWQgPSBvcF9iYXNlbmFtZShuLm5hbWUpOworCXJldHVybiBuLm5hbWVfcHJvY2Vzc2VkOworfQorCisKK3N0cmluZyBjb25zdCAmIHN5bWJvbF9uYW1lX3N0b3JhZ2U6OmRlbWFuZ2xlKHN5bWJvbF9uYW1lX2lkIGlkKSBjb25zdAoreworCXN0b3JlZF9uYW1lIGNvbnN0ICYgbiA9IGdldChpZCk7CisJaWYgKCFuLm5hbWVfcHJvY2Vzc2VkLmVtcHR5KCkgfHwgbi5uYW1lLmVtcHR5KCkpCisJCXJldHVybiBuLm5hbWVfcHJvY2Vzc2VkOworCisJaWYgKG4ubmFtZVswXSAhPSAnPycpIHsKKwkJbi5uYW1lX3Byb2Nlc3NlZCA9IGRlbWFuZ2xlX3N5bWJvbChuLm5hbWUpOworCQlyZXR1cm4gbi5uYW1lX3Byb2Nlc3NlZDsKKwl9CisKKwlpZiAobi5uYW1lLmxlbmd0aCgpIDwgMiB8fCBuLm5hbWVbMV0gIT0gJz8nKSB7CisJCW4ubmFtZV9wcm9jZXNzZWQgPSAiKG5vIHN5bWJvbHMpIjsKKwkJcmV0dXJuIG4ubmFtZV9wcm9jZXNzZWQ7CisJfQorCQorCW4ubmFtZV9wcm9jZXNzZWQgPSAiYW5vbnltb3VzIHN5bWJvbCBmcm9tIHNlY3Rpb24gIjsKKwluLm5hbWVfcHJvY2Vzc2VkICs9IGx0cmltKG4ubmFtZSwgIj8iKTsKKwlyZXR1cm4gbi5uYW1lX3Byb2Nlc3NlZDsKK30KZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2xpYnBwL25hbWVfc3RvcmFnZS5oIGIvb3Byb2ZpbGUtMC45LjcvbGlicHAvbmFtZV9zdG9yYWdlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzExZmJlOAotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2xpYnBwL25hbWVfc3RvcmFnZS5oCkBAIC0wLDAgKzEsMTU5IEBACisvKioKKyAqIEBmaWxlIG5hbWVfc3RvcmFnZS5oCisgKiBUeXBlLXNhZmUgdW5pcXVlIHN0b3JhZ2Ugb2YgZ2xvYmFsIG5hbWVzIChmaWxlbmFtZXMgYW5kIHN5bWJvbHMpCisgKgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMiBPUHJvZmlsZSBhdXRob3JzCisgKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORworICoKKyAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQorICogQGF1dGhvciBKb2huIExldm9uCisgKi8KKworI2lmbmRlZiBOQU1FX1NUT1JBR0VfSAorI2RlZmluZSBOQU1FX1NUT1JBR0VfSAorCisjaW5jbHVkZSA8c3RyaW5nPgorCisjaW5jbHVkZSAidW5pcXVlX3N0b3JhZ2UuaCIKKworY2xhc3MgZXh0cmFfaW1hZ2VzOworCisvLy8gc3RvcmUgb3JpZ2luYWwgbmFtZSBhbmQgcHJvY2Vzc2VkIG5hbWUKK3N0cnVjdCBzdG9yZWRfbmFtZSB7CisJc3RvcmVkX25hbWUoc3RkOjpzdHJpbmcgY29uc3QgJiBuID0gc3RkOjpzdHJpbmcoKSkKKwkJOiBuYW1lKG4pIHt9CisKKwlib29sIG9wZXJhdG9yPChzdG9yZWRfbmFtZSBjb25zdCAmIHJocykgY29uc3QgeworCQlyZXR1cm4gbmFtZSA8IHJocy5uYW1lOworCX0KKworCXN0ZDo6c3RyaW5nIG5hbWU7CisJbXV0YWJsZSBzdGQ6OnN0cmluZyBuYW1lX3Byb2Nlc3NlZDsKK307CisKKworLy8vIHBhcnRpYWwgc3BlY2lhbGl6YXRpb24gZm9yIHVuaXF1ZSBzdG9yYWdlIG9mIG5hbWVzCit0ZW1wbGF0ZSA8dHlwZW5hbWUgST4gc3RydWN0IG5hbWVfc3RvcmFnZSA6IHVuaXF1ZV9zdG9yYWdlPEksIHN0b3JlZF9uYW1lPiB7CisKKwl0eXBlZGVmIHR5cGVuYW1lIHVuaXF1ZV9zdG9yYWdlPEksIHN0b3JlZF9uYW1lPjo6aWRfdmFsdWUgaWRfdmFsdWU7CisKKwlzdGQ6OnN0cmluZyBjb25zdCAmIG5hbWUoaWRfdmFsdWUgY29uc3QgJiBpZCkgY29uc3QgeworCQlyZXR1cm4gdW5pcXVlX3N0b3JhZ2U8SSwgc3RvcmVkX25hbWU+OjpnZXQoaWQpLm5hbWU7CisJfQorfTsKKworCitjbGFzcyBkZWJ1Z19uYW1lX3RhZzsKKy8vLyBhIGRlYnVnIGZpbGVuYW1lCit0eXBlZGVmIG5hbWVfc3RvcmFnZTxkZWJ1Z19uYW1lX3RhZz46OmlkX3ZhbHVlIGRlYnVnX25hbWVfaWQ7CisKKy8vLyBjbGFzcyBzdG9yaW5nIGEgc2V0IG9mIHNoYXJlZCBkZWJ1ZyBuYW1lIChzb3VyY2UgZmlsZW5hbWUpCitzdHJ1Y3QgZGVidWdfbmFtZV9zdG9yYWdlIDogbmFtZV9zdG9yYWdlPGRlYnVnX25hbWVfdGFnPiB7CisJLy8vIHJldHVybiB0aGUgYmFzZW5hbWUgZm9yIHRoZSBnaXZlbiBJRAorCXN0ZDo6c3RyaW5nIGNvbnN0ICYgYmFzZW5hbWUoZGVidWdfbmFtZV9pZCBpZCkgY29uc3Q7Cit9OworCisvLy8gc3RvcmUgb3JpZ2luYWwgbmFtZSBhbmQgcHJvY2Vzc2VkIG5hbWUKK3N0cnVjdCBzdG9yZWRfZmlsZW5hbWUgeworCXN0b3JlZF9maWxlbmFtZShzdGQ6OnN0cmluZyBjb25zdCAmIG4gPSBzdGQ6OnN0cmluZygpKQorCQk6IGZpbGVuYW1lKG4pLCBleHRyYV9pbWFnZXNfdWlkKDApIHt9CisKKwlib29sIG9wZXJhdG9yPChzdG9yZWRfZmlsZW5hbWUgY29uc3QgJiByaHMpIGNvbnN0IHsKKwkJcmV0dXJuIGZpbGVuYW1lIDwgcmhzLmZpbGVuYW1lOworCX0KKworCXN0ZDo6c3RyaW5nIGZpbGVuYW1lOworCW11dGFibGUgc3RkOjpzdHJpbmcgYmFzZV9maWxlbmFtZTsKKwltdXRhYmxlIHN0ZDo6c3RyaW5nIHJlYWxfZmlsZW5hbWU7CisJbXV0YWJsZSBzdGQ6OnN0cmluZyByZWFsX2Jhc2VfZmlsZW5hbWU7CisJbXV0YWJsZSBpbnQgZXh0cmFfaW1hZ2VzX3VpZDsKK307CisKKy8vLyBwYXJ0aWFsIHNwZWNpYWxpemF0aW9uIGZvciB1bmlxdWUgc3RvcmFnZSBvZiBmaWxlbmFtZXMKK3RlbXBsYXRlIDx0eXBlbmFtZSBJPiAKK3N0cnVjdCBmaWxlbmFtZV9zdG9yYWdlIDogdW5pcXVlX3N0b3JhZ2U8SSwgc3RvcmVkX2ZpbGVuYW1lPiB7CisKKwl0eXBlZGVmIHR5cGVuYW1lIHVuaXF1ZV9zdG9yYWdlPEksIHN0b3JlZF9maWxlbmFtZT46OmlkX3ZhbHVlIGlkX3ZhbHVlOworCisJc3RkOjpzdHJpbmcgY29uc3QgJiBuYW1lKGlkX3ZhbHVlIGNvbnN0ICYgaWQpIGNvbnN0IHsKKwkJcmV0dXJuIHVuaXF1ZV9zdG9yYWdlPEksIHN0b3JlZF9maWxlbmFtZT46OmdldChpZCkuZmlsZW5hbWU7CisJfQorfTsKKworY2xhc3MgaW1hZ2VfbmFtZV90YWc7CisvLy8gYW4gaW1hZ2UgbmFtZQordHlwZWRlZiBmaWxlbmFtZV9zdG9yYWdlPGltYWdlX25hbWVfdGFnPjo6aWRfdmFsdWUgaW1hZ2VfbmFtZV9pZDsKKworLy8vIGNsYXNzIHN0b3JpbmcgYSBzZXQgb2Ygc2hhcmVkIGltYWdlIG5hbWUKK3N0cnVjdCBpbWFnZV9uYW1lX3N0b3JhZ2UgOiBmaWxlbmFtZV9zdG9yYWdlPGltYWdlX25hbWVfdGFnPiB7CisJZW51bSBpbWFnZV9uYW1lX3R5cGUgeworCQkvLy8gaW1hZ2UgbmFtZSBiYXNlZCBvbiB0aGUgc2FtcGxlIGZpbGVuYW1lIHcvbyBwYXRoCisJCWludF9iYXNlbmFtZSwKKwkJLy8vIGltYWdlIG5hbWUgYmFzZWQgb24gdGhlIHNhbXBsZSBmaWxlbmFtZQorCQlpbnRfZmlsZW5hbWUsCisJCS8vLyByZWFsIGltYWdlIG5hbWUsIGNhbiBiZSBkaWZmZXJlbnQgZm9yIG1vZHVsZS4KKwkJaW50X3JlYWxfYmFzZW5hbWUsCisJCS8vLyBzYW1lIGFzIGludF9yZWFsX2Jhc2VuYW1lICsgdGhlIGNvbXBsZXRlIHBhdGgsIGluY2x1ZGluZyBhbgorCQkvLy8gb3B0aW9ubmFsIGFyY2hpdmVfcGF0aCBwYXNzZWQgdHJvdWdoIHByb2ZpbGVfc3BlYworCQlpbnRfcmVhbF9maWxlbmFtZSwKKwl9OworCisJLyoqCisJICogQHBhcmFtIGlkICB0aGUgaW1hZ2UgbmFtZSBpZAorCSAqIEBwYXJhbSB0eXBlICB0aGUgaW1hZ2UgbmFtZSB0eXBlCisJICogQHBhcmFtIGV4dHJhICBleHRyYSBsb2NhdGlvbnMgd2hlcmUgdGhlIGltYWdlIGNhbiBiZSBmb3VuZAorCSAqCisJICogSWYgdHlwZSA9PSBpbnRfcmVhbF9uYW1lIChyZXNwLiBpbnRfcmVhbF9maWxlbmFtZSkgYW5kIHRoZSBpbWFnZQorCSAqIGNhbid0IGJlIGxvY2F0ZWQgdGhlIHJldHVybiB2YWx1ZSBpcyB0aGUgc2FtZSBhcyBpZiBnZXRfbmFtZSgpCisJICogd2FzIGNhbGxlZCB3aXRoIGludF9uYW1lIChyZXNwLiBpbnRfZmlsZW5hbWUpLgorCSAqCisJICogbXVsdGlwbGUgY2FsbCB3aXRoIHRoZSBpbWFnZV9uYW1lX2lkIGFuZCBkaWZmZXJlbnQgZXh0cmEgcGFyYW1ldGVyCisJICogd2lsbCB0aHJvdyBhIHJ1bnRpbWUgZXJyb3IsIG11bHRpcGxlIGV4dHJhX2ltYWdlcyBhcmUgcG9zc2libGUKKwkgKiB3aXRoIGRpZmZlcmVudGlhbCBwcm9maWxlIGJ1dCB0aGUgbmFtZS4gRklYTUUKKwkgKi8KKwlzdGQ6OnN0cmluZyBjb25zdCAmIGdldF9uYW1lKGltYWdlX25hbWVfaWQgaWQsCisJCQkJICAgICBpbWFnZV9uYW1lX3R5cGUgdHlwZSwKKwkJCQkgICAgIGV4dHJhX2ltYWdlcyBjb25zdCAmIGV4dHJhKSBjb25zdDsKKworCS8vLyByZXR1cm4gdGhlIGJhc2VuYW1lIG5hbWUgZm9yIHRoZSBnaXZlbiBJRAorCXN0ZDo6c3RyaW5nIGNvbnN0ICYgYmFzZW5hbWUoaW1hZ2VfbmFtZV9pZCkgY29uc3Q7Cit9OworCisKK2NsYXNzIHN5bWJvbF9uYW1lX3RhZzsKKy8vLyBhIChkZW1hbmdsZWQpIHN5bWJvbAordHlwZWRlZiBuYW1lX3N0b3JhZ2U8c3ltYm9sX25hbWVfdGFnPjo6aWRfdmFsdWUgc3ltYm9sX25hbWVfaWQ7CisKKy8vLyBjbGFzcyBzdG9yaW5nIGEgc2V0IG9mIHNoYXJlZCBzeW1ib2wgbmFtZQorc3RydWN0IHN5bWJvbF9uYW1lX3N0b3JhZ2UgOiBuYW1lX3N0b3JhZ2U8c3ltYm9sX25hbWVfdGFnPiB7CisJLy8vIHJldHVybiB0aGUgZGVtYW5nbGVkIG5hbWUgZm9yIHRoZSBnaXZlbiBJRAorCXN0ZDo6c3RyaW5nIGNvbnN0ICYgZGVtYW5nbGUoc3ltYm9sX25hbWVfaWQgaWQpIGNvbnN0OworfTsKKworCisvLy8gZm9yIGltYWdlcworZXh0ZXJuIGltYWdlX25hbWVfc3RvcmFnZSBpbWFnZV9uYW1lczsKKworLy8vIGZvciBkZWJ1ZyBmaWxlbmFtZXMgaS5lLiBzb3VyY2UgZmlsZW5hbWUKK2V4dGVybiBkZWJ1Z19uYW1lX3N0b3JhZ2UgZGVidWdfbmFtZXM7CisKKy8vLyBmb3Igc3ltYm9scworZXh0ZXJuIHN5bWJvbF9uYW1lX3N0b3JhZ2Ugc3ltYm9sX25hbWVzOworCisKKy8qKgorICogZGVidWcgbmFtZSBzcGVjaWFsaXNhdGlvbiBmb3IgY29tcGFyaXNvbi4KKyAqCisgKiBXZSBjb21wYXJlIGJ5IG5hbWUgcmF0aGVyIGJ5IGlkIHNpbmNlIHdoYXQgdXNlciB3aWxsIHNlZSBhcmUKKyAqIGZpbGVuYW1lIGFuZCB3aGVuIHRoZSBjcml0ZXJpYSAic2FtcGxlcyBjb3VudCIgZ2l2ZSBpZGVudGljYWwKKyAqIHJlc3VsdCBpdCdzIGJldHRlciB0byBvYnRhaW4gcmVzdWx0IHNvcnRlZCBieSB0aGUgdXNlciB2aXNpYmxlCisgKiBwcm9wZXJ0eSBmaWxlbmFtZSByYXRoZXIgdGhhbiBieSBhbiBvYnNjdXJlLCBpbnZpc2libGUgZnJvbSB1c2VyCisgKiBwb2ludCBvZiB2aWV3LCBmaWxlIGlkZW50aWZpZXIgcHJvcGVydHkKKyAqLwordGVtcGxhdGU8PiBpbmxpbmUgYm9vbAorZGVidWdfbmFtZV9pZDo6b3BlcmF0b3I8KGRlYnVnX25hbWVfaWQgY29uc3QgJiByaHMpIGNvbnN0Cit7CisJcmV0dXJuIGRlYnVnX25hbWVzLm5hbWUoKnRoaXMpIDwgZGVidWdfbmFtZXMubmFtZShyaHMpOworfQorCisjZW5kaWYgLyogIU5BTUVfU1RPUkFHRV9IICovCmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9saWJwcC9vcF9oZWFkZXIuY3BwIGIvb3Byb2ZpbGUtMC45LjcvbGlicHAvb3BfaGVhZGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTQwMTVhCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvbGlicHAvb3BfaGVhZGVyLmNwcApAQCAtMCwwICsxLDI2NCBAQAorLyoqCisgKiBAZmlsZSBvcF9oZWFkZXIuY3BwCisgKiB2YXJpb3VzIGZyZWUgZnVuY3Rpb24gYWN0aW5nIG9uIGEgc2FtcGxlIGZpbGUgaGVhZGVyCisgKgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwNCBPUHJvZmlsZSBhdXRob3JzCisgKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORworICoKKyAqIEBhdXRob3IgSm9obiBMZXZvbgorICogQGF1dGhvciBQaGlsaXBwZSBFbGllCisgKiBATW9kaWZpY2F0aW9ucyBEYW5pZWwgSGFuc2VsCisgKi8KKworI2luY2x1ZGUgPGNzdHJpbmc+CisjaW5jbHVkZSA8aW9zdHJlYW0+CisjaW5jbHVkZSA8Y3N0ZGxpYj4KKyNpbmNsdWRlIDxpb21hbmlwPgorI2luY2x1ZGUgPHNldD4KKyNpbmNsdWRlIDxzc3RyZWFtPgorI2luY2x1ZGUgPGNzdHJpbmc+CisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKyNpbmNsdWRlICJvcF9jb25maWcuaCIKKyNpbmNsdWRlICJvcF9leGNlcHRpb24uaCIKKyNpbmNsdWRlICJvZGIuaCIKKyNpbmNsdWRlICJvcF9jcHVfdHlwZS5oIgorI2luY2x1ZGUgIm9wX2ZpbGUuaCIKKyNpbmNsdWRlICJvcF9oZWFkZXIuaCIKKyNpbmNsdWRlICJvcF9ldmVudHMuaCIKKyNpbmNsdWRlICJzdHJpbmdfbWFuaXAuaCIKKyNpbmNsdWRlICJmb3JtYXRfb3V0cHV0LmgiCisjaW5jbHVkZSAieG1sX3V0aWxzLmgiCisjaW5jbHVkZSAiY3ZlcmIuaCIKKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKworZXh0ZXJuIHZlcmJvc2UgdmJmZDsKKwordm9pZCBvcF9jaGVja19oZWFkZXIob3BkX2hlYWRlciBjb25zdCAmIGgxLCBvcGRfaGVhZGVyIGNvbnN0ICYgaDIsCisJCSAgICAgc3RyaW5nIGNvbnN0ICYgZmlsZW5hbWUpCit7CisJaWYgKGgxLm10aW1lICE9IGgyLm10aW1lKSB7CisJCW9zdHJpbmdzdHJlYW0gb3M7CisJCW9zIDw8ICJoZWFkZXIgdGltZXN0YW1wcyBhcmUgZGlmZmVyZW50ICgiCisJCSAgIDw8IGgxLm10aW1lIDw8ICIsICIgPDwgaDIubXRpbWUgPDwgIikgZm9yICIKKwkJICAgPDwgZmlsZW5hbWUgPDwgIlxuIjsKKwkJdGhyb3cgb3BfZmF0YWxfZXJyb3Iob3Muc3RyKCkpOworCX0KKworCWlmIChoMS5pc19rZXJuZWwgIT0gaDIuaXNfa2VybmVsKSB7CisJCW9zdHJpbmdzdHJlYW0gb3M7CisJCW9zIDw8ICJoZWFkZXIgaXNfa2VybmVsIGZsYWdzIGFyZSBkaWZmZXJlbnQgZm9yICIKKwkJICAgPDwgZmlsZW5hbWUgPDwgIlxuIjsKKwkJdGhyb3cgb3BfZmF0YWxfZXJyb3Iob3Muc3RyKCkpOworCX0KKwkKKwkvLyBOb3RlIHRoYXQgaW4gdGhlIGdlbmVyYXRlZCBFTEYgZmlsZSBmb3IgYW5vbnltb3VzIGNvZGUgdGhlIHZtYQorCS8vIG9mIHRoZSBzeW1ib2wgaXMgZXhhY2x0eSB0aGUgc2FtZSB2bWEgYXMgdGhlIGNvZGUgaGFkIGR1cmluZyBzYW1wbGluZy4KKwkKKwkvLyBOb3RlIHRoYXQgd2UgZG9uJ3QgY2hlY2sgQ1BVIHNwZWVkIHNpbmNlIHRoYXQgY2FuIHZhcnkKKwkvLyBmcmVlbHkgb24gdGhlIHNhbWUgbWFjaGluZQorfQorCisKK25hbWVzcGFjZSB7CisKK3NldDxzdHJpbmc+IHdhcm5lZF9maWxlczsKKworfQorCitib29sIGlzX2ppdF9zYW1wbGUoc3RyaW5nIGNvbnN0ICYgZmlsZW5hbWUpCit7CisJLy8gc3VmZml4IGZvciBKSVQgc2FtcGxlIGZpbGVzIChzZWUgRklYTUUgaW4gY2hlY2tfbXRpbWUoKSBiZWxvdykKKwlzdHJpbmcgc3VmID0gIi5qbyI7CisJCisJc3RyaW5nOjpzaXplX3R5cGUgcG9zOworCXBvcyA9IGZpbGVuYW1lLnJmaW5kKHN1Zik7CisJLy8gZm9yIEpJVCBzYW1wbGUgZmlsZXMgZG8gbm90IG91dHB1dCB0aGUgd2FybmluZyB0byBzdGRlcnIuCisJaWYgKHBvcyAhPSBzdHJpbmc6Om5wb3MgJiYgcG9zID09IGZpbGVuYW1lLnNpemUoKSAtIHN1Zi5zaXplKCkpCisJCXJldHVybiB0cnVlOworCWVsc2UKKwkJcmV0dXJuIGZhbHNlOworfQorCit2b2lkIGNoZWNrX210aW1lKHN0cmluZyBjb25zdCAmIGZpbGUsIG9wZF9oZWFkZXIgY29uc3QgJiBoZWFkZXIpCit7CisJdGltZV90IGNvbnN0IG5ld210aW1lID0gb3BfZ2V0X210aW1lKGZpbGUuY19zdHIoKSk7CisKKwlpZiAobmV3bXRpbWUgPT0gaGVhZGVyLm10aW1lKQorCQlyZXR1cm47CisKKwlpZiAod2FybmVkX2ZpbGVzLmZpbmQoZmlsZSkgIT0gd2FybmVkX2ZpbGVzLmVuZCgpKQorCQlyZXR1cm47CisKKwl3YXJuZWRfZmlsZXMuaW5zZXJ0KGZpbGUpOworCisJLy8gRmlsZXMgd2UgY291bGRuJ3QgZ2V0IG10aW1lIG9mIGhhdmUgemVybyBtdGltZQorCWlmICghaGVhZGVyLm10aW1lKSB7CisJCS8vIEZJWE1FOiBoZWFkZXIubXRpbWUgZm9yIEpJVCBzYW1wbGUgZmlsZXMgaXMgMC4gVGhlIHByb2JsZW0gY291bGQgYmUgdGhhdAorCQkvLyAgICAgICAgaW4gb3BkX21hbmdsaW5nLmM6b3BkX29wZW5fc2FtcGxlX2ZpbGUoKSB0aGUgY2FsbCBvZiBmaWxsX2hlYWRlcigpCisJCS8vICAgICAgICB0aGluayB0aGF0IHRoZSBKSVQgc2FtcGxlIGZpbGUgaXMgbm90IGEgYmluYXJ5IGZpbGUuCisJCWlmIChpc19qaXRfc2FtcGxlKGZpbGUpKSB7CisJCQljdmVyYiA8PCB2YmZkIDw8ICJ3YXJuaW5nOiBjb3VsZCBub3QgY2hlY2sgdGhhdCB0aGUgYmluYXJ5IGZpbGUgIgorCQkJICAgICAgPDwgZmlsZSA8PCAiIGhhcyBub3QgYmVlbiBtb2RpZmllZCBzaW5jZSAiCisJCQkgICAgICAidGhlIHByb2ZpbGUgd2FzIHRha2VuLiBSZXN1bHRzIG1heSBiZSBpbmFjY3VyYXRlLlxuIjsKKwkJfSBlbHNlIHsKKwkJCWNlcnIgPDwgIndhcm5pbmc6IGNvdWxkIG5vdCBjaGVjayB0aGF0IHRoZSBiaW5hcnkgZmlsZSAiCisJCQkgICAgIDw8IGZpbGUgPDwgIiBoYXMgbm90IGJlZW4gbW9kaWZpZWQgc2luY2UgIgorCQkJICAgICAidGhlIHByb2ZpbGUgd2FzIHRha2VuLiBSZXN1bHRzIG1heSBiZSBpbmFjY3VyYXRlLlxuIjsKKwkJfQorCX0gZWxzZSB7CisJCXN0YXRpYyBib29sIHdhcm5lZF9hbHJlYWR5ID0gZmFsc2U7CisKKwkJY2VyciA8PCAid2FybmluZzogdGhlIGxhc3QgbW9kaWZpZWQgdGltZSBvZiB0aGUgYmluYXJ5IGZpbGUgIgorCQkgICAgICJkb2VzIG5vdCBtYXRjaCB0aGF0IG9mIHRoZSBzYW1wbGUgZmlsZSBmb3IgIiA8PCBmaWxlCisJCSAgICAgPDwgIlxuIjsKKworCQlpZiAoIXdhcm5lZF9hbHJlYWR5KSB7CisJCQljZXJyIDw8ICJFaXRoZXIgdGhpcyBpcyB0aGUgd3JvbmcgYmluYXJ5IG9yIHRoZSBiaW5hcnkgIgorCQkJImhhcyBiZWVuIG1vZGlmaWVkIHNpbmNlIHRoZSBzYW1wbGUgZmlsZSB3YXMgY3JlYXRlZC5cbiI7CisJCQl3YXJuZWRfYWxyZWFkeSA9IHRydWU7CisJCX0KKwl9Cit9CisKKworb3BkX2hlYWRlciBjb25zdCByZWFkX2hlYWRlcihzdHJpbmcgY29uc3QgJiBzYW1wbGVfZmlsZW5hbWUpCit7CisJaW50IGZkID0gb3BlbihzYW1wbGVfZmlsZW5hbWUuY19zdHIoKSwgT19SRE9OTFkpOworCWlmIChmZCA8IDApCisJCXRocm93IG9wX2ZhdGFsX2Vycm9yKCJDYW4ndCBvcGVuIHNhbXBsZSBmaWxlOiIgKworCQkJCSAgICAgc2FtcGxlX2ZpbGVuYW1lKTsKKworCW9wZF9oZWFkZXIgaGVhZGVyOworCWlmIChyZWFkKGZkLCAmaGVhZGVyLCBzaXplb2YoaGVhZGVyKSkgIT0gc2l6ZW9mKGhlYWRlcikpIHsKKwkJY2xvc2UoZmQpOworCQl0aHJvdyBvcF9mYXRhbF9lcnJvcigiQ2FuJ3QgcmVhZCBzYW1wbGUgZmlsZSBoZWFkZXI6IiArCisJCQkJICAgICBzYW1wbGVfZmlsZW5hbWUpOworCX0KKworCWlmIChtZW1jbXAoaGVhZGVyLm1hZ2ljLCBPUERfTUFHSUMsIHNpemVvZihoZWFkZXIubWFnaWMpKSkgeworCQljbG9zZShmZCk7CisJCXRocm93IG9wX2ZhdGFsX2Vycm9yKCJJbnZhbGlkIHNhbXBsZSBmaWxlLCAiCisJCQkJICAgICAiYmFkIG1hZ2ljIG51bWJlcjogIiArCisJCQkJICAgICBzYW1wbGVfZmlsZW5hbWUpOworCX0KKworCWNsb3NlKGZkKTsKKworCXJldHVybiBoZWFkZXI7Cit9CisKKworbmFtZXNwYWNlIHsKKworc3RyaW5nIGNvbnN0IG9wX3ByaW50X2V2ZW50KG9wX2NwdSBjcHVfdHlwZSwgdTMyIHR5cGUsIHUzMiB1bSwgdTMyIGNvdW50KQoreworCXN0cmluZyBzdHI7CisKKwlpZiAoY3B1X3R5cGUgPT0gQ1BVX1RJTUVSX0lOVCkgeworCQlzdHIgKz0gIlByb2ZpbGluZyB0aHJvdWdoIHRpbWVyIGludGVycnVwdCI7CisJCXJldHVybiBzdHI7CisJfQorCisJc3RydWN0IG9wX2V2ZW50ICogZXZlbnQgPSBvcF9maW5kX2V2ZW50KGNwdV90eXBlLCB0eXBlLCB1bSk7CisKKwlpZiAoIWV2ZW50KSB7CisJCWV2ZW50ID0gb3BfZmluZF9ldmVudF9hbnkoY3B1X3R5cGUsIHR5cGUpOworCQlpZiAoIWV2ZW50KSB7IAorCQkJY2VyciA8PCAiQ291bGQgbm90IGxvY2F0ZSBldmVudCAiIDw8IGludCh0eXBlKSA8PCBlbmRsOworCQkJc3RyID0gIlVua25vd24gZXZlbnQiOworCQkJcmV0dXJuIHN0cjsKKwkJfQorCX0KKworCWNoYXIgY29uc3QgKiB1bV9kZXNjID0gMDsKKworCWZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZXZlbnQtPnVuaXQtPm51bTsgKytpKSB7CisJCWlmIChldmVudC0+dW5pdC0+dW1baV0udmFsdWUgPT0gdW0pCisJCQl1bV9kZXNjID0gZXZlbnQtPnVuaXQtPnVtW2ldLmRlc2M7CisJfQorCisJc3RyICs9IHN0cmluZygiQ291bnRlZCAiKSArIGV2ZW50LT5uYW1lOworCXN0ciArPSBzdHJpbmcoIiBldmVudHMgKCIpICsgZXZlbnQtPmRlc2MgKyAiKSI7CisKKwlpZiAoY3B1X3R5cGUgIT0gQ1BVX1JUQykgeworCQlzdHIgKz0gIiB3aXRoIGEgdW5pdCBtYXNrIG9mIDB4IjsKKworCQlvc3RyaW5nc3RyZWFtIHNzOworCQlzcyA8PCBoZXggPDwgc2V0dygyKSA8PCBzZXRmaWxsKCcwJykgPDwgdW5zaWduZWQodW0pOworCQlzdHIgKz0gc3Muc3RyKCk7CisKKwkJc3RyICs9ICIgKCI7CisJCXN0ciArPSB1bV9kZXNjID8gdW1fZGVzYyA6ICJtdWx0aXBsZSBmbGFncyI7CisJCXN0ciArPSAiKSI7CisJfQorCisJc3RyICs9ICIgY291bnQgIiArIG9wX2xleGljYWxfY2FzdDxzdHJpbmc+KGNvdW50KTsKKwlyZXR1cm4gc3RyOworfQorCitzdHJpbmcgY29uc3Qgb3BfeG1sX3ByaW50X2V2ZW50KG9wX2NwdSBjcHVfdHlwZSwgdTMyIHR5cGUsIHUzMiB1bSwgdTMyIGNvdW50KQoreworCXN0cmluZyB1bml0X21hc2s7CisKKwlpZiAoY3B1X3R5cGUgPT0gQ1BVX1RJTUVSX0lOVCB8fCBjcHVfdHlwZSA9PSBDUFVfUlRDKQorCQlyZXR1cm4geG1sX3V0aWxzOjpnZXRfdGltZXJfc2V0dXAoKHNpemVfdCljb3VudCk7CisKKwlzdHJ1Y3Qgb3BfZXZlbnQgKiBldmVudCA9IG9wX2ZpbmRfZXZlbnQoY3B1X3R5cGUsIHR5cGUsIHVtKTsKKwlpZiAoIWV2ZW50KSB7CisJCWV2ZW50ID0gb3BfZmluZF9ldmVudF9hbnkoY3B1X3R5cGUsIHR5cGUpOworCQlpZiAoIWV2ZW50KSB7IAorCQkJY2VyciA8PCAiQ291bGQgbm90IGxvY2F0ZSBldmVudCAiIDw8IGludCh0eXBlKSA8PCBlbmRsOworCQkJcmV0dXJuICIiOworCQl9CisJfQorCisJaWYgKGNwdV90eXBlICE9IENQVV9SVEMpIHsKKwkJb3N0cmluZ3N0cmVhbSBzdHJfb3V0OworCQlzdHJfb3V0IDw8IHVtOworCQl1bml0X21hc2sgPSBzdHJfb3V0LnN0cigpOworCX0KKworCXJldHVybiB4bWxfdXRpbHM6OmdldF9ldmVudF9zZXR1cChzdHJpbmcoZXZlbnQtPm5hbWUpLAorCQkoc2l6ZV90KWNvdW50LCB1bml0X21hc2spOworfQorCit9CisKK3N0cmluZyBjb25zdCBkZXNjcmliZV9oZWFkZXIob3BkX2hlYWRlciBjb25zdCAmIGhlYWRlcikKK3sKKwlvcF9jcHUgY3B1ID0gc3RhdGljX2Nhc3Q8b3BfY3B1PihoZWFkZXIuY3B1X3R5cGUpOworCisJaWYgKHdhbnRfeG1sKQorCQlyZXR1cm4gb3BfeG1sX3ByaW50X2V2ZW50KGNwdSwgaGVhZGVyLmN0cl9ldmVudCwKKwkgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyLmN0cl91bSwgaGVhZGVyLmN0cl9jb3VudCk7CisJZWxzZQorCQlyZXR1cm4gb3BfcHJpbnRfZXZlbnQoY3B1LCBoZWFkZXIuY3RyX2V2ZW50LAorCSAgICAgICAgICAgICAgICAgICAgICBoZWFkZXIuY3RyX3VtLCBoZWFkZXIuY3RyX2NvdW50KTsKK30KKworCitzdHJpbmcgY29uc3QgZGVzY3JpYmVfY3B1KG9wZF9oZWFkZXIgY29uc3QgJiBoZWFkZXIpCit7CisJb3BfY3B1IGNwdSA9IHN0YXRpY19jYXN0PG9wX2NwdT4oaGVhZGVyLmNwdV90eXBlKTsKKworCXN0cmluZyBzdHI7CisJaWYgKHdhbnRfeG1sKSB7CisJCXN0cmluZyBjcHVfbmFtZSA9IG9wX2dldF9jcHVfbmFtZShjcHUpOworCisJCXN0ciA9IHhtbF91dGlsczo6Z2V0X3Byb2ZpbGVfaGVhZGVyKGNwdV9uYW1lLCBoZWFkZXIuY3B1X3NwZWVkKTsKKwl9IGVsc2UgeworCQlzdHIgKz0gc3RyaW5nKCJDUFU6ICIpICsgb3BfZ2V0X2NwdV90eXBlX3N0cihjcHUpOworCQlzdHIgKz0gIiwgc3BlZWQgIjsKKworCQlvc3RyaW5nc3RyZWFtIHNzOworCQlzcyA8PCBoZWFkZXIuY3B1X3NwZWVkOworCQlzdHIgKz0gc3Muc3RyKCkgKyAiIE1IeiAoZXN0aW1hdGVkKSI7CisJfQorCXJldHVybiBzdHI7Cit9CmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9saWJwcC9vcF9oZWFkZXIuaCBiL29wcm9maWxlLTAuOS43L2xpYnBwL29wX2hlYWRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwZmM0OGYKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9saWJwcC9vcF9oZWFkZXIuaApAQCAtMCwwICsxLDU2IEBACisvKioKKyAqIEBmaWxlIG9wX2hlYWRlci5oCisgKiB2YXJpb3VzIGZyZWUgZnVuY3Rpb24gYWN0aW5nIG9uIGEgc2FtcGxlIGZpbGUgaGVhZGVyCisgKgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMiBPUHJvZmlsZSBhdXRob3JzCisgKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORworICoKKyAqIEBhdXRob3IgSm9obiBMZXZvbgorICogQGF1dGhvciBQaGlsaXBwZSBFbGllCisgKi8KKworI2lmbmRlZiBPUF9IRUFERVJfSAorI2RlZmluZSBPUF9IRUFERVJfSAorCisjaW5jbHVkZSA8aW9zZndkPgorI2luY2x1ZGUgPHN0cmluZz4KKworI2luY2x1ZGUgIm9wX3NhbXBsZV9maWxlLmgiCisKKy8qKgorICogQHBhcmFtIGgxIHNhbXBsZSBmaWxlIGhlYWRlcgorICogQHBhcmFtIGgyIHNhbXBsZSBmaWxlIGhlYWRlcgorICogQHBhcmFtIGZpbGVuYW1lIHNhbXBsZSBmaWxlbmFtZQorICoKKyAqIGNoZWNrIHRoYXQgdGhlIGgxIGFuZCBoMiBhcmUgY29oZXJlbnQgKHNhbWUgc2l6ZSwgc2FtZSBtdGltZSBldGMuKQorICogYWxsIGVycm9yIGFyZSBmYXRhbAorICovCit2b2lkIG9wX2NoZWNrX2hlYWRlcihvcGRfaGVhZGVyIGNvbnN0ICYgaDEsIG9wZF9oZWFkZXIgY29uc3QgJiBoMiwKKyAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0ICYgZmlsZW5hbWUpOworCitib29sIGlzX2ppdF9zYW1wbGUoc3RkOjpzdHJpbmcgY29uc3QgJiBmaWxlbmFtZSk7CisKKy8qKgorICogY2hlY2sgbXRpbWUgb2Ygc2FtcGxlcyBmaWxlIGhlYWRlciBhZ2FpbnN0IGZpbGUKKyAqIGFsbCBlcnJvciBhcmUgZmF0YWwKKyAqLwordm9pZCBjaGVja19tdGltZShzdGQ6OnN0cmluZyBjb25zdCAmIGZpbGUsIG9wZF9oZWFkZXIgY29uc3QgJiBoZWFkZXIpOworCisvKioKKyAqIEBwYXJhbSBzYW1wbGVfZmlsZW5hbWUgIHRoZSBzYW1wbGUgdG8gb3BlbgorICoKKyAqIFJldHVybiB0aGUgaGVhZGVyIG9mIHRoaXMgc2FtcGxlIGZpbGUuIE9ubHkgdGhlIG1hZ2ljIG51bWJlciBpcyBjaGVja2VkCisgKiB0aGUgdmVyc2lvbiBudW1iZXIgaXMgbm90IGNoZWNrZWQuIEFsbCBlcnJvciBhcmUgZmF0YWwKKyAqLworb3BkX2hlYWRlciBjb25zdCByZWFkX2hlYWRlcihzdGQ6OnN0cmluZyBjb25zdCAmIHNhbXBsZV9maWxlbmFtZSk7CisKKy8qKgorICogb3V0cHV0IGEgcmVhZGFibGUgZm9ybSBvZiBoZWFkZXIsIHRoaXMgZG9uJ3QgaW5jbHVkZSB0aGUgY3B1IHR5cGUKKyAqIGFuZCBzcGVlZAorICovCitzdGQ6OnN0cmluZyBjb25zdCBkZXNjcmliZV9oZWFkZXIob3BkX2hlYWRlciBjb25zdCAmIGhlYWRlcik7CisKKy8vLyBvdXRwdXQgYSByZWFkYWJsZSBmb3JtIG9mIGNwdSB0eXBlIGFuZCBzcGVlZAorc3RkOjpzdHJpbmcgY29uc3QgZGVzY3JpYmVfY3B1KG9wZF9oZWFkZXIgY29uc3QgJiBoZWFkZXIpOworCisjZW5kaWYgLy8gT1BfSEVBREVSX0gKZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2xpYnBwL3BhcnNlX2ZpbGVuYW1lLmNwcCBiL29wcm9maWxlLTAuOS43L2xpYnBwL3BhcnNlX2ZpbGVuYW1lLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODQ0ODJhCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvbGlicHAvcGFyc2VfZmlsZW5hbWUuY3BwCkBAIC0wLDAgKzEsMjUyIEBACisvKioKKyAqIEBmaWxlIHBhcnNlX2ZpbGVuYW1lLmNwcAorICogU3BsaXQgYSBzYW1wbGUgZmlsZW5hbWUgaW50byBpdHMgY29uc3RpdHVlbnQgcGFydHMKKyAqCisgKiBAcmVtYXJrIENvcHlyaWdodCAyMDAzIE9Qcm9maWxlIGF1dGhvcnMKKyAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCisgKgorICogQGF1dGhvciBQaGlsaXBwZSBFbGllCisgKi8KKworI2luY2x1ZGUgPHN0ZGV4Y2VwdD4KKyNpbmNsdWRlIDx2ZWN0b3I+CisjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPGlvc3RyZWFtPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisKKyNpbmNsdWRlICJwYXJzZV9maWxlbmFtZS5oIgorI2luY2x1ZGUgImZpbGVfbWFuaXAuaCIKKyNpbmNsdWRlICJzdHJpbmdfbWFuaXAuaCIKKyNpbmNsdWRlICJsb2NhdGVfaW1hZ2VzLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisKK25hbWVzcGFjZSB7CisKKy8vIFBQOjMuMTkgZXZlbnRfbmFtZS5jb3VudC51bml0bWFzay50Z2lkLnRpZC5jcHUKK3BhcnNlZF9maWxlbmFtZSBwYXJzZV9ldmVudF9zcGVjKHN0cmluZyBjb25zdCAmIGV2ZW50X3NwZWMpCit7CisJdHlwZWRlZiB2ZWN0b3I8c3RyaW5nPiBwYXJ0c190eXBlOworCXR5cGVkZWYgcGFydHNfdHlwZTo6c2l6ZV90eXBlIHNpemVfdHlwZTsKKworCXNpemVfdHlwZSBjb25zdCBucl9wYXJ0cyA9IDY7CisKKwlwYXJ0c190eXBlIHBhcnRzID0gc2VwYXJhdGVfdG9rZW4oZXZlbnRfc3BlYywgJy4nKTsKKworCWlmIChwYXJ0cy5zaXplKCkgIT0gbnJfcGFydHMpIHsKKwkJdGhyb3cgaW52YWxpZF9hcmd1bWVudCgicGFyc2VfZXZlbnRfc3BlYygpOiBiYWQgZXZlbnQgc3BlY2lmaWNhdGlvbjogIiArIGV2ZW50X3NwZWMpOworCX0KKworCWZvciAoc2l6ZV90eXBlIGkgPSAwOyBpIDwgbnJfcGFydHMgOyArK2kpIHsKKwkJaWYgKHBhcnRzW2ldLmVtcHR5KCkpIHsKKwkJCXRocm93IGludmFsaWRfYXJndW1lbnQoInBhcnNlX2V2ZW50X3NwZWMoKTogYmFkIGV2ZW50IHNwZWNpZmljYXRpb246ICIgKyBldmVudF9zcGVjKTsKKwkJfQorCX0KKworCXBhcnNlZF9maWxlbmFtZSByZXN1bHQ7CisKKwlzaXplX3R5cGUgaSA9IDA7CisJcmVzdWx0LmV2ZW50ID0gcGFydHNbaSsrXTsKKwlyZXN1bHQuY291bnQgPSBwYXJ0c1tpKytdOworCXJlc3VsdC51bml0bWFzayA9IHBhcnRzW2krK107CisJcmVzdWx0LnRnaWQgPSBwYXJ0c1tpKytdOworCXJlc3VsdC50aWQgPSBwYXJ0c1tpKytdOworCXJlc3VsdC5jcHUgPSBwYXJ0c1tpKytdOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworCisvKioKKyAqIEBwYXJhbSBjb21wb25lbnQgIHBhdGggY29tcG9uZW50CisgKgorICogcmVtb3ZlIGZyb20gcGF0aF9jb21wb25lbnQgYWxsIGRpcmVjdG9yeSBsZWZ0IHRvIHtyb290fSwge2tlcm59IG9yIHthbm9ufQorICovCit2b2lkIHJlbW92ZV9iYXNlX2Rpcih2ZWN0b3I8c3RyaW5nPiAmIHBhdGgpCit7CisJdmVjdG9yPHN0cmluZz46Oml0ZXJhdG9yIGl0OworCWZvciAoaXQgPSBwYXRoLmJlZ2luKCk7IGl0ICE9IHBhdGguZW5kKCk7ICsraXQpIHsKKwkJaWYgKCppdCA9PSAie3Jvb3R9IiB8fCAqaXQgPT0gIntrZXJufSIgIHx8ICppdCA9PSAie2Fub259IikKKwkJCWJyZWFrOworCX0KKworCXBhdGguZXJhc2UocGF0aC5iZWdpbigpLCBpdCk7Cit9CisKKworLy8vIEhhbmRsZSBhbiBhbm9uIHJlZ2lvbi4gUHJldHR5IHByaW50IHRoZSBkZXRhaWxzLgorLy8vIFRoZSBzZWNvbmQgYXJndW1lbnQgaXMgdGhlIGFub24gcG9ydGlvbiBvZiB0aGUgcGF0aCB3aGljaCB3aWxsCisvLy8gY29udGFpbiBleHRyYSBkZXRhaWxzIHN1Y2ggYXMgdGhlIGFub24gcmVnaW9uIG5hbWUgKHVua25vd24sIHZkc28sIGhlYXAgZXRjLikKK3N0cmluZyBjb25zdCBwYXJzZV9hbm9uKHN0cmluZyBjb25zdCAmIHN0ciwgc3RyaW5nIGNvbnN0ICYgc3RyMikKK3sKKwlzdHJpbmcgbmFtZSA9IHN0cjI7CisJLy8gR2V0IHJpZCBvZiAie2Fub246CisJbmFtZS5lcmFzZSgwLCA2KTsKKwkvLyBDYXRjaCB0aGUgY2FzZSB3aGVyZSB3ZSBlbmQgdXAgd2l0aCBhbiBlbXB0eSBzdHJpbmcuICBUaGlzIHNob3VsZAorCS8vIG5ldmVyIGhhcHBlbiwgZXhjZXB0IHdoZXJlIHRoaW5ncyBoYXZlIGdvbmUgYXdmdWxseSBiYWQgd2l0aCBwcm9maWxlCisJLy8gZGF0YSBjb2xsZWN0aW9uLCByZXN1bHRpbmcgaW4gb25lIG9yIG1vcmUgYm9ndXMgc2FtcGxlIGZpbGVzLgorCWlmKDAgPT0gbmFtZS5zaXplKCkpCisJCXRocm93IGludmFsaWRfYXJndW1lbnQoInBhcnNlX2Fub24oKSBpbnZhbGlkIG5hbWU6ICIgKyBzdHIyICsgIlxuIgorCQkJKyAiVGhpcyBlcnJvciBpbmRpY2F0ZXMgeW91ciBzYW1wbGUgZGF0YSBpcyBzdXNwZWN0LiBJdCBpcyAiCisJCQkrICJyZWNvbW1lbmRlZCB5b3UgZG8gYSAtLXJlc2V0IGFuZCBjb2xsZWN0IG5ldyBwcm9maWxlIGRhdGEuIik7CisJLy8gR2V0IHJpZCBvZiB0aGUgdHJhaWxpbmcgJ30nCisJbmFtZS5lcmFzZShuYW1lLnNpemUoKSAtIDEsIDEpOworCXZlY3RvcjxzdHJpbmc+IHBhcnRzID0gc2VwYXJhdGVfdG9rZW4oc3RyLCAnLicpOworCWlmIChwYXJ0cy5zaXplKCkgIT0gMykKKwkJdGhyb3cgaW52YWxpZF9hcmd1bWVudCgicGFyc2VfYW5vbigpIGludmFsaWQgbmFtZTogIiArIHN0cik7CisKKwlzdHJpbmcgcmV0ID0gbmFtZSArIiAodGdpZDoiOworCXJldCArPSBwYXJ0c1swXSArICIgcmFuZ2U6IiArIHBhcnRzWzFdICsgIi0iICsgcGFydHNbMl0gKyAiKSI7CisJcmV0dXJuIHJldDsKK30KKworCit9ICAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKKworLyoKKyAqICB2YWxpZCBmaWxlbmFtZSBhcmUgdmFyaWF0aW9ucyBvbjoKKyAqCisgKiB7a2Vybn0vbmFtZS9ldmVudF9zcGVjCisgKiB7cm9vdH0vcGF0aC90by9iaW4ve2RlcH0ve3Jvb3R9L3BhdGgvdG8vYmluL2V2ZW50X3NwZWMKKyAqIHtyb290fS9wYXRoL3RvL2Jpbi97ZGVwfS97YW5vbjphbm9ufS9waWQuc3RhcnQuZW5kL2V2ZW50X3NwZWMKKyAqIHtyb290fS9wYXRoL3RvL2Jpbi97ZGVwfS97YW5vbjpbdmRzb119L3BpZC5zdGFydC5lbmQvZXZlbnRfc3BlYworICoge3Jvb3R9L3BhdGgvdG8vYmluL3tkZXB9L3trZXJufS9uYW1lL2V2ZW50X3NwZWMKKyAqIHtyb290fS9wYXRoL3RvL2Jpbi97ZGVwfS97cm9vdH0vcGF0aC90by9iaW4ve2NnfS97cm9vdH0vcGF0aC90by9iaW4vZXZlbnRfc3BlYworCisgKgorICogd2hlcmUgL25hbWUvIGRlbm90ZSBhIHVuaXF1ZSBwYXRoIGNvbXBvbmVudAorICovCitwYXJzZWRfZmlsZW5hbWUgcGFyc2VfZmlsZW5hbWUoc3RyaW5nIGNvbnN0ICYgZmlsZW5hbWUsCisJCQkgICAgICAgZXh0cmFfaW1hZ2VzIGNvbnN0ICYgZXh0cmFfZm91bmRfaW1hZ2VzKQoreworCXN0cnVjdCBzdGF0IHN0OworCisJc3RyaW5nOjpzaXplX3R5cGUgcG9zID0gZmlsZW5hbWUuZmluZF9sYXN0X29mKCcvJyk7CisJaWYgKHBvcyA9PSBzdHJpbmc6Om5wb3MpIHsKKwkJdGhyb3cgaW52YWxpZF9hcmd1bWVudCgicGFyc2VfZmlsZW5hbWUoKSBpbnZhbGlkIGZpbGVuYW1lOiAiICsKKwkJCQkgICAgICAgZmlsZW5hbWUpOworCX0KKwlzdHJpbmcgZXZlbnRfc3BlYyA9IGZpbGVuYW1lLnN1YnN0cihwb3MgKyAxKTsKKwlzdHJpbmcgZmlsZW5hbWVfc3BlYyA9IGZpbGVuYW1lLnN1YnN0cigwLCBwb3MpOworCisJcGFyc2VkX2ZpbGVuYW1lIHJlc3VsdCA9IHBhcnNlX2V2ZW50X3NwZWMoZXZlbnRfc3BlYyk7CisKKwlyZXN1bHQuZmlsZW5hbWUgPSBmaWxlbmFtZTsKKworCXZlY3RvcjxzdHJpbmc+IHBhdGggPSBzZXBhcmF0ZV90b2tlbihmaWxlbmFtZV9zcGVjLCAnLycpOworCisJcmVtb3ZlX2Jhc2VfZGlyKHBhdGgpOworCisJLy8gcHBfaW50ZXJmYWNlIFBQOjMuMTkgdG8gUFA6My4yMyBwYXRoIG11c3Qgc3RhcnQgZWl0aGVyIHdpdGgge3Jvb3R9CisJLy8gb3Ige2tlcm59IGFuZCB3ZSBtdXN0IGZvdW5kIGF0IGxlYXN0IDIgY29tcG9uZW50LCByZW1vdmVfYmFzZV9kaXIoKQorCS8vIHJldHVybiBhbiBlbXB0eSBwYXRoIGlmIHtyb290fSBvciB7a2Vybn0gYXJlIG5vdCBmb3VuZAorCWlmIChwYXRoLnNpemUoKSA8IDIpIHsKKwkJdGhyb3cgaW52YWxpZF9hcmd1bWVudCgicGFyc2VfZmlsZW5hbWUoKSBpbnZhbGlkIGZpbGVuYW1lOiAiICsKKwkJCQkgICAgICAgZmlsZW5hbWUpOworCX0KKworCXNpemVfdCBpOworCWZvciAoaSA9IDEgOyBpIDwgcGF0aC5zaXplKCkgOyArK2kpIHsKKwkJaWYgKHBhdGhbaV0gPT0gIntkZXB9IikKKwkJCWJyZWFrOworCisJCXJlc3VsdC5pbWFnZSArPSAiLyIgKyBwYXRoW2ldOworCX0KKworCWlmIChpID09IHBhdGguc2l6ZSgpKSB7CisJCXRocm93IGludmFsaWRfYXJndW1lbnQoInBhcnNlX2ZpbGVuYW1lKCkgaW52YWxpZCBmaWxlbmFtZTogIiArCisJCQkJICAgICAgIGZpbGVuYW1lKTsKKwl9CisKKwkvLyBza2lwICJ7ZGVwfSIKKwkrK2k7CisKKwkvLyBQUDozLjE5IHtkZXB9LyBtdXN0IGJlIGZvbGxvd2VkIGJ5IHtrZXJufS8sIHtyb290fS8gb3Ige2Fub259LworCWlmIChwYXRoW2ldICE9ICJ7a2Vybn0iICYmIHBhdGhbaV0gIT0gIntyb290fSIgJiYKKwkgICAgcGF0aFtpXS5maW5kKCJ7YW5vbiIsIDApICE9IDApIHsKKwkJdGhyb3cgaW52YWxpZF9hcmd1bWVudCgicGFyc2VfZmlsZW5hbWUoKSBpbnZhbGlkIGZpbGVuYW1lOiAiICsKKwkJCQkgICAgICAgZmlsZW5hbWUpOworCX0KKworCWJvb2wgYW5vbiA9IHBhdGhbaV0uZmluZCgie2Fub246IiwgMCkgPT0gMDsKKworCS8vIHNraXAgIntyb290fSIsICJ7a2Vybn0iIG9yICJ7YW5vbjouKn0iCisJKytpOworCisJZm9yICg7IGkgPCBwYXRoLnNpemUoKTsgKytpKSB7CisJCWlmIChwYXRoW2ldID09ICJ7Y2d9IikKKwkJCWJyZWFrOworCisJCWlmIChhbm9uKSB7CisJCQlwb3MgPSBmaWxlbmFtZV9zcGVjLnJmaW5kKCcuJyk7CisJCQlwb3MgPSBmaWxlbmFtZV9zcGVjLnJmaW5kKCcuJywgcG9zLTEpOworCQkJaWYgKHBvcyA9PSBzdHJpbmc6Om5wb3MpIHsKKwkJCQl0aHJvdyBpbnZhbGlkX2FyZ3VtZW50KCJwYXJzZV9maWxlbmFtZSgpIHBpZC5hZGRyLmFkZHIgbmFtZSBleHBlY3RlZDogIiArCisJCQkJCQkgICAgICAgZmlsZW5hbWVfc3BlYyk7CisJCQl9CisJCQlzdHJpbmcgaml0ZHVtcCA9IGZpbGVuYW1lX3NwZWMuc3Vic3RyKDAsIHBvcykgKyAiLmpvIjsKKwkJCS8vIGlmIGEgaml0ZHVtcCBmaWxlIGV4aXN0cywgd2UgcG9pbnQgdG8gdGhpcyBmaWxlCisJCQlpZiAoIXN0YXQoaml0ZHVtcC5jX3N0cigpLCAmc3QpKSB7CisJCQkJLy8gbGF0ZXIgY29kZSBhc3N1bWVzIGFuIG9wdGlvbmFsIHByZWZpeCBwYXRoCisJCQkJLy8gaXMgc3RyaXBwZWQgZnJvbSB0aGUgbGliX2ltYWdlLgorCQkJCXJlc3VsdC5saWJfaW1hZ2UgPQorCQkJCQlleHRyYV9mb3VuZF9pbWFnZXMuc3RyaXBfcGF0aF9wcmVmaXgoaml0ZHVtcCk7CisJCQkJcmVzdWx0LmppdF9kdW1wZmlsZV9leGlzdHMgPSB0cnVlOworCQkJfSBlbHNlIHsKKwkJCQlyZXN1bHQubGliX2ltYWdlID0gIHBhcnNlX2Fub24ocGF0aFtpXSwgcGF0aFtpIC0gMV0pOworCQkJfQorCQkJaSsrOworCQkJYnJlYWs7CisJCX0gZWxzZSB7CisJCQlyZXN1bHQubGliX2ltYWdlICs9ICIvIiArIHBhdGhbaV07CisJCX0KKwl9CisKKwlpZiAoaSA9PSBwYXRoLnNpemUoKSkKKwkJcmV0dXJuIHJlc3VsdDsKKworCS8vIHNraXAgIntjZ30iCisJKytpOworCWlmIChpID09IHBhdGguc2l6ZSgpIHx8CisJICAgIChwYXRoW2ldICE9ICJ7a2Vybn0iICYmIHBhdGhbaV0gIT0gIntyb290fSIgJiYKKwkgICAgIHBhdGhbaV0uZmluZCgie2Fub24iLCAwKSAhPSAwKSkgeworCQl0aHJvdyBpbnZhbGlkX2FyZ3VtZW50KCJwYXJzZV9maWxlbmFtZSgpIGludmFsaWQgZmlsZW5hbWU6ICIKKwkJICAgICAgICAgICAgICAgICAgICAgICArIGZpbGVuYW1lKTsKKwl9CisKKwkvLyBza2lwICJ7cm9vdH0iLCAie2tlcm59IiBvciAie2Fub259IgorCWFub24gPSAocGF0aFtpXS5maW5kKCJ7YW5vbiIsIDApID09IDApOworCSsraTsKKworCWlmIChhbm9uKSB7CisJCXJlc3VsdC5jZ19pbWFnZSA9IHBhcnNlX2Fub24ocGF0aFtpXSwgcGF0aFtpIC0gMV0pOworCQlpKys7CisJfSBlbHNlIHsKKwkJZm9yICg7IGkgPCBwYXRoLnNpemUoKTsgKytpKQorCQkJcmVzdWx0LmNnX2ltYWdlICs9ICIvIiArIHBhdGhbaV07CisJfQorCisJcmV0dXJuIHJlc3VsdDsKK30KKworYm9vbCBwYXJzZWRfZmlsZW5hbWU6OnByb2ZpbGVfc3BlY19lcXVhbChwYXJzZWRfZmlsZW5hbWUgY29uc3QgJiBwYXJzZWQpCit7CisJcmV0dXJuIAlldmVudCA9PSBwYXJzZWQuZXZlbnQgJiYKKwkJY291bnQgPT0gcGFyc2VkLmNvdW50ICYmCisJCXVuaXRtYXNrID09IHBhcnNlZC51bml0bWFzayAmJgorCQl0Z2lkID09IHBhcnNlZC50Z2lkICYmCisJCXRpZCA9PSBwYXJzZWQudGlkICYmCisJCWNwdSA9PSBwYXJzZWQuY3B1OworfQorCitvc3RyZWFtICYgb3BlcmF0b3I8PChvc3RyZWFtICYgb3V0LCBwYXJzZWRfZmlsZW5hbWUgY29uc3QgJiBkYXRhKQoreworCW91dCA8PCBkYXRhLmZpbGVuYW1lIDw8IGVuZGw7CisJb3V0IDw8IGRhdGEuaW1hZ2UgPDwgIiAiIDw8IGRhdGEubGliX2ltYWdlIDw8ICIgIgorCSAgICA8PCBkYXRhLmV2ZW50IDw8ICIgIiA8PCBkYXRhLmNvdW50IDw8ICIgIgorCSAgICA8PCBkYXRhLnVuaXRtYXNrIDw8ICIgIiA8PCBkYXRhLnRnaWQgPDwgIiAiCisJICAgIDw8IGRhdGEudGlkIDw8ICIgIiA8PCBkYXRhLmNwdSA8PCBlbmRsOworCisJcmV0dXJuIG91dDsKK30KZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2xpYnBwL3BhcnNlX2ZpbGVuYW1lLmggYi9vcHJvZmlsZS0wLjkuNy9saWJwcC9wYXJzZV9maWxlbmFtZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwMjRmOWIKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9saWJwcC9wYXJzZV9maWxlbmFtZS5oCkBAIC0wLDAgKzEsNjUgQEAKKy8qKgorICogQGZpbGUgcGFyc2VfZmlsZW5hbWUuaAorICogU3BsaXQgYSBzYW1wbGUgZmlsZW5hbWUgaW50byBpdHMgY29uc3RpdHVlbnQgcGFydHMKKyAqCisgKiBAcmVtYXJrIENvcHlyaWdodCAyMDAzIE9Qcm9maWxlIGF1dGhvcnMKKyAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCisgKgorICogQGF1dGhvciBQaGlsaXBwZSBFbGllCisgKi8KKworI2lmbmRlZiBQQVJTRV9GSUxFTkFNRV9ICisjZGVmaW5lIFBBUlNFX0ZJTEVOQU1FX0gKKworI2luY2x1ZGUgPHN0cmluZz4KKworY2xhc3MgZXh0cmFfaW1hZ2VzOworCisvKioKKyAqIGEgY29udmVuaWVuY2UgY2xhc3MgdG8gc3RvcmUgcmVzdWx0IG9mIHBhcnNlX2ZpbGVuYW1lKCkKKyAqLworc3RydWN0IHBhcnNlZF9maWxlbmFtZQoreworCXN0ZDo6c3RyaW5nIGltYWdlOworCXN0ZDo6c3RyaW5nIGxpYl9pbWFnZTsKKwkvLy8gZGVzdGluYXRpb24gaW1hZ2UgZm9yIGNhbGwgZ3JhcGggZmlsZSwgZW1wdHkgaWYgdGhpcyBzYW1wbGUKKwkvLy8gZmlsZSBpcyBub3QgYSBjYWxsZ3JhcGggZmlsZS4KKwlzdGQ6OnN0cmluZyBjZ19pbWFnZTsKKwlzdGQ6OnN0cmluZyBldmVudDsKKwlzdGQ6OnN0cmluZyBjb3VudDsKKwlzdGQ6OnN0cmluZyB1bml0bWFzazsKKwlzdGQ6OnN0cmluZyB0Z2lkOworCXN0ZDo6c3RyaW5nIHRpZDsKKwlzdGQ6OnN0cmluZyBjcHU7CisKKwkvLy8gcmV0dXJuIHRydWUgaWYgdGhlIHByb2ZpbGUgc3BlY2lmaWNhdGlvbiBhcmUgaWRlbnRpY2FsLgorCWJvb2wgcHJvZmlsZV9zcGVjX2VxdWFsKHBhcnNlZF9maWxlbmFtZSBjb25zdCAmIHBhcnNlZCk7CisKKwkvKioKKwkgKiB0aGUgb3JpZ2luYWwgc2FtcGxlIGZpbGVuYW1lIGZyb20gd2hpY2ggdGhlCisJICogYWJvdmUgY29tcG9uZW50cyBhcmUgYnVpbHQKKwkgKi8KKwlzdGQ6OnN0cmluZyBmaWxlbmFtZTsKKwlib29sIGppdF9kdW1wZmlsZV9leGlzdHM7Cit9OworCisKKy8vLyBkZWJ1Z2dpbmcgaGVscGVyCitzdGQ6Om9zdHJlYW0gJiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSAmLCBwYXJzZWRfZmlsZW5hbWUgY29uc3QgJik7CisKKworLyoqCisgKiBwYXJzZSBhIHNhbXBsZSBmaWxlbmFtZQorICogQHBhcmFtIGZpbGVuYW1lIGluOiBhIHNhbXBsZSBmaWxlbmFtZQorICogQHBhcmFtIGV4dHJhX2ZvdW5kX2ltYWdlcyBiaW5hcnkgaW1hZ2UgbG9jYXRpb24KKyAqCisgKiBmaWxlbmFtZSBpcyBzcGxpdCBpbnRvIGNvbnN0aXR1ZW50IHBhcnRzLCB0aGUgbGliX2ltYWdlIGlzIG9wdGlvbmFsCisgKiBhbmQgY2FuIGJlIGVtcHR5IG9uIHN1Y2Nlc3NmdWxsIGNhbGwuIEFsbCBvdGhlciBlcnJvciBhcmUgZmF0YWwuCisgKiBGaWxlbmFtZXMgYXJlIGVuY29kZWQgYXMgYWNjb3JkaW5nIHRvIFBQOjMuMTkgdG8gUFA6My4yNQorICoKKyAqIGFsbCBlcnJvcnMgdGhyb3cgYW4gc3RkOjppbnZhbGlkX2FyZ3VtZW50IGV4Y2VwdGlvbgorICovCitwYXJzZWRfZmlsZW5hbWUgcGFyc2VfZmlsZW5hbWUoc3RkOjpzdHJpbmcgY29uc3QgJiBmaWxlbmFtZSwKKwkJCSAgICAgICBleHRyYV9pbWFnZXMgY29uc3QgJiBleHRyYV9mb3VuZF9pbWFnZXMpOworCisjZW5kaWYgLyogIVBBUlNFX0ZJTEVOQU1FX0ggKi8KZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2xpYnBwL3BvcHVsYXRlLmNwcCBiL29wcm9maWxlLTAuOS43L2xpYnBwL3BvcHVsYXRlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTgzNTMxCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvbGlicHAvcG9wdWxhdGUuY3BwCkBAIC0wLDAgKzEsMTEwIEBACisvKioKKyAqIEBmaWxlIHBvcHVsYXRlLmNwcAorICogRmlsbCB1cCBhIHByb2ZpbGVfY29udGFpbmVyIGZyb20gaW52ZXJ0ZWQgcHJvZmlsZXMKKyAqCisgKiBAcmVtYXJrIENvcHlyaWdodCAyMDAzIE9Qcm9maWxlIGF1dGhvcnMKKyAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCisgKgorICogQGF1dGhvciBKb2huIExldm9uCisgKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKKyAqCisgKiBNb2RpZmllZCBieSBNYXluYXJkIEpvaG5zb24gPG1heW5hcmRqQHVzLmlibS5jb20+CisgKiAoQykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDA3CisgKi8KKworI2luY2x1ZGUgInByb2ZpbGUuaCIKKyNpbmNsdWRlICJwcm9maWxlX2NvbnRhaW5lci5oIgorI2luY2x1ZGUgImFycmFuZ2VfcHJvZmlsZXMuaCIKKyNpbmNsdWRlICJvcF9iZmQuaCIKKyNpbmNsdWRlICJvcF9oZWFkZXIuaCIKKyNpbmNsdWRlICJwb3B1bGF0ZS5oIgorI2luY2x1ZGUgInBvcHVsYXRlX2Zvcl9zcHUuaCIKKworI2luY2x1ZGUgImltYWdlX2Vycm9ycy5oIgorCisjaW5jbHVkZSA8aW9zdHJlYW0+CisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisKK25hbWVzcGFjZSB7CisKKy8vLyBsb2FkIG1lcmdlZCBmaWxlcyBmb3Igb25lIHNldCBvZiBzYW1wbGUgZmlsZXMKK2Jvb2wKK3BvcHVsYXRlX2Zyb21fZmlsZXMocHJvZmlsZV90ICYgcHJvZmlsZSwgb3BfYmZkIGNvbnN0ICYgYWJmZCwKKyAgICAgICAgICAgICAgICAgICAgbGlzdDxwcm9maWxlX3NhbXBsZV9maWxlcz4gY29uc3QgJiBmaWxlcykKK3sKKwlsaXN0PHByb2ZpbGVfc2FtcGxlX2ZpbGVzPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBmaWxlcy5iZWdpbigpOworCWxpc3Q8cHJvZmlsZV9zYW1wbGVfZmlsZXM+Ojpjb25zdF9pdGVyYXRvciBjb25zdCBlbmQgPSBmaWxlcy5lbmQoKTsKKworCWJvb2wgZm91bmQgPSBmYWxzZTsKKwkvLyB3ZSBjYW4ndCBoYW5kbGUgY2cgZmlsZXMgaGVyZSBvYnZpb3VzbHkKKwlmb3IgKDsgaXQgIT0gZW5kOyArK2l0KSB7CisJCS8vIEEgYml0IHVnbHkgYnV0IHdlIG11c3QgYWNjZXB0IHNpbGVudGx5IGVtcHR5IHNhbXBsZSBmaWxlbmFtZQorCQkvLyBzaW5jZSB3ZSBjYW4gY3JlYXRlIGEgcHJvZmlsZV9zYW1wbGVfZmlsZXMgZm9yIGNnIGZpbGUgb25seQorCQkvLyAoaS5lIG5vIHNhbXBsZSB0byB0aGUgYmluYXJ5KQorCQlpZiAoIWl0LT5zYW1wbGVfZmlsZW5hbWUuZW1wdHkoKSkgeworCQkJcHJvZmlsZS5hZGRfc2FtcGxlX2ZpbGUoaXQtPnNhbXBsZV9maWxlbmFtZSk7CisJCQlwcm9maWxlLnNldF9vZmZzZXQoYWJmZCk7CisJCQlmb3VuZCA9IHRydWU7CisJCX0KKwl9CisKKwlyZXR1cm4gZm91bmQ7Cit9CisKK30gIC8vIGFub24gbmFtZXNwYWNlCisKKwordm9pZAorcG9wdWxhdGVfZm9yX2ltYWdlKHByb2ZpbGVfY29udGFpbmVyICYgc2FtcGxlcywgaW52ZXJ0ZWRfcHJvZmlsZSBjb25zdCAmIGlwLAorCXN0cmluZ19maWx0ZXIgY29uc3QgJiBzeW1ib2xfZmlsdGVyLCBib29sICogaGFzX2RlYnVnX2luZm8pCit7CisJaWYgKGlzX3NwdV9wcm9maWxlKGlwKSkgeworCQlwb3B1bGF0ZV9mb3Jfc3B1X2ltYWdlKHNhbXBsZXMsIGlwLCBzeW1ib2xfZmlsdGVyLAorCQkJCSAgICAgICBoYXNfZGVidWdfaW5mbyk7CisJCXJldHVybjsKKwl9CisKKwlib29sIG9rID0gaXAuZXJyb3IgPT0gaW1hZ2Vfb2s7CisJb3BfYmZkIGFiZmQoaXAuaW1hZ2UsIHN5bWJvbF9maWx0ZXIsCisJCSAgICBzYW1wbGVzLmV4dHJhX2ZvdW5kX2ltYWdlcywgb2spOworCWlmICghb2sgJiYgaXAuZXJyb3IgPT0gaW1hZ2Vfb2spCisJCWlwLmVycm9yID0gaW1hZ2VfZm9ybWF0X2ZhaWx1cmU7CisKKwlpZiAoaXAuZXJyb3IgPT0gaW1hZ2VfZm9ybWF0X2ZhaWx1cmUpCisJCXJlcG9ydF9pbWFnZV9lcnJvcihpcCwgZmFsc2UsIHNhbXBsZXMuZXh0cmFfZm91bmRfaW1hZ2VzKTsKKworCW9wZF9oZWFkZXIgaGVhZGVyOworCisJYm9vbCBmb3VuZCA9IGZhbHNlOworCWZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaXAuZ3JvdXBzLnNpemUoKTsgKytpKSB7CisJCWxpc3Q8aW1hZ2Vfc2V0Pjo6Y29uc3RfaXRlcmF0b3IgaXQKKwkJCT0gaXAuZ3JvdXBzW2ldLmJlZ2luKCk7CisJCWxpc3Q8aW1hZ2Vfc2V0Pjo6Y29uc3RfaXRlcmF0b3IgY29uc3QgZW5kCisJCQk9IGlwLmdyb3Vwc1tpXS5lbmQoKTsKKworCQkvLyB3ZSBjYW4gb25seSBzaGFyZSBhIHByb2ZpbGVfdCBhbW9uZ3N0IGVhY2gKKwkJLy8gaW1hZ2Vfc2V0J3MgZmlsZXMgLSB0aGlzIGlzIGJlY2F1c2UgaXQtPmFwcF9pbWFnZQorCQkvLyBjaGFuZ2VzLCBhbmQgdGhlIC5hZGQoKSB3b3VsZCBtaXMtYXR0cmlidXRlCisJCS8vIHRvIHRoZSB3cm9uZyBhcHBfaW1hZ2Ugb3RoZXJ3aXNlCisJCWZvciAoOyBpdCAhPSBlbmQ7ICsraXQpIHsKKwkJCXByb2ZpbGVfdCBwcm9maWxlOworCQkJaWYgKHBvcHVsYXRlX2Zyb21fZmlsZXMocHJvZmlsZSwgYWJmZCwgaXQtPmZpbGVzKSkgeworCQkJCWhlYWRlciA9IHByb2ZpbGUuZ2V0X2hlYWRlcigpOworCQkJCXNhbXBsZXMuYWRkKHByb2ZpbGUsIGFiZmQsIGl0LT5hcHBfaW1hZ2UsIGkpOworCQkJCWZvdW5kID0gdHJ1ZTsKKwkJCX0KKwkJfQorCX0KKworCWlmIChmb3VuZCA9PSB0cnVlICYmIGlwLmVycm9yID09IGltYWdlX29rKSB7CisJCWltYWdlX2Vycm9yIGVycm9yOworCQlzdHJpbmcgZmlsZW5hbWUgPQorCQkJc2FtcGxlcy5leHRyYV9mb3VuZF9pbWFnZXMuZmluZF9pbWFnZV9wYXRoKAorCQkJCWlwLmltYWdlLCBlcnJvciwgdHJ1ZSk7CisJCWNoZWNrX210aW1lKGZpbGVuYW1lLCBoZWFkZXIpOworCX0KKworCWlmIChoYXNfZGVidWdfaW5mbykKKwkJKmhhc19kZWJ1Z19pbmZvID0gYWJmZC5oYXNfZGVidWdfaW5mbygpOworfQpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvbGlicHAvcG9wdWxhdGUuaCBiL29wcm9maWxlLTAuOS43L2xpYnBwL3BvcHVsYXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGYxM2UwOQotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2xpYnBwL3BvcHVsYXRlLmgKQEAgLTAsMCArMSwyNSBAQAorLyoqCisgKiBAZmlsZSBwb3B1bGF0ZS5oCisgKiBGaWxsIHVwIGEgcHJvZmlsZV9jb250YWluZXIgZnJvbSBpbnZlcnRlZCBwcm9maWxlcworICoKKyAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDMgT1Byb2ZpbGUgYXV0aG9ycworICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKKyAqCisgKiBAYXV0aG9yIEpvaG4gTGV2b24KKyAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQorICovCisKKyNpZm5kZWYgUE9QVUxBVEVfSAorI2RlZmluZSBQT1BVTEFURV9ICisKK2NsYXNzIHByb2ZpbGVfY29udGFpbmVyOworY2xhc3MgaW52ZXJ0ZWRfcHJvZmlsZTsKK2NsYXNzIHN0cmluZ19maWx0ZXI7CisKKworLy8vIExvYWQgYWxsIHNhbXBsZSBmaWxlIGluZm9ybWF0aW9uIGZvciBleGFjdGx5IG9uZSBiaW5hcnkgaW1hZ2UuCit2b2lkCitwb3B1bGF0ZV9mb3JfaW1hZ2UocHJvZmlsZV9jb250YWluZXIgJiBzYW1wbGVzLCBpbnZlcnRlZF9wcm9maWxlIGNvbnN0ICYgaXAsCisgICBzdHJpbmdfZmlsdGVyIGNvbnN0ICYgc3ltYm9sX2ZpbHRlciwgYm9vbCAqIGhhc19kZWJ1Z19pbmZvKTsKKworI2VuZGlmIC8qIFBPUFVMQVRFX0ggKi8KZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2xpYnBwL3BvcHVsYXRlX2Zvcl9zcHUuY3BwIGIvb3Byb2ZpbGUtMC45LjcvbGlicHAvcG9wdWxhdGVfZm9yX3NwdS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGY0NjA2YgotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2xpYnBwL3BvcHVsYXRlX2Zvcl9zcHUuY3BwCkBAIC0wLDAgKzEsMTY2IEBACisvKioKKyAqIEBmaWxlIGxpYnBwL3BvcHVsYXRlX2Zvcl9zcHUuY3BwCisgKiBGaWxsIHVwIGEgcHJvZmlsZV9jb250YWluZXIgZnJvbSBpbnZlcnRlZCBwcm9maWxlcyBmb3IKKyAqIGEgQ2VsbCBCRSBTUFUgcHJvZmlsZQorICoKKyAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDcgT1Byb2ZpbGUgYXV0aG9ycworICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKKyAqCisgKiBAYXV0aG9yIE1heW5hcmQgSm9obnNvbgorICogKEMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwNworICovCisKKyNpbmNsdWRlICJwcm9maWxlLmgiCisjaW5jbHVkZSAicHJvZmlsZV9jb250YWluZXIuaCIKKyNpbmNsdWRlICJhcnJhbmdlX3Byb2ZpbGVzLmgiCisjaW5jbHVkZSAib3BfYmZkLmgiCisjaW5jbHVkZSAib3BfaGVhZGVyLmgiCisjaW5jbHVkZSAicG9wdWxhdGUuaCIKKyNpbmNsdWRlICJwb3B1bGF0ZV9mb3Jfc3B1LmgiCisKKyNpbmNsdWRlICJpbWFnZV9lcnJvcnMuaCIKKworI2luY2x1ZGUgPGlvc3RyZWFtPgorCit1c2luZyBuYW1lc3BhY2Ugc3RkOworCituYW1lc3BhY2UgeworCitzdGF0aWMgaW50IHNwdV9wcm9maWxlID0gdW5rbm93bl9wcm9maWxlOworCisvKgorICogT24gQ2VsbCBCcm9hZGJhbmQgRW5naW5lLCBhbiBhcHBsaWNhdGlvbiBleGVjdXRpbmcgb24gYW4gU1BFIG1heQorICogaGF2ZSBiZWVuIGxvYWRlZCBmcm9tIGEgc2VwYXJhdGUgU1BVIGV4ZWN1dGFibGUgYmluYXJ5IGZpbGUgb3IgbWF5CisgKiBoYXZlIGJlZW4gbG9hZGVkIGZyb20gYW4gZW1iZWRkZWQgc2VjdGlvbiBvZiBhIFBQRSBhcHBsaWNhdGlvbiBvcgorICogc2hhcmVkIGxpYnJhcnkuICBJbiB0aGUgZW1iZWRkZWQgY2FzZSwgdGhlIGVtYmVkZGluZyBmaWxlIG1heSBhY3R1YWxseQorICogY29udGFpbiBtdWx0aXBsZSBTUFUgaW1hZ2VzLCByZXN1bHRpbmcgaW4gZGlmZmVyZW50IFNQVSBpbWFnZXMgYmVpbmcgbG9hZGVkCisgKiBvbnRvIGRpZmZlcmVudCBTUFVzLiAgVGh1cywgdGhlIFNQVXMgbWF5IGJlIGV4ZWN1dGluZyBkaWZmZXJlbnQgY29kZSwgZXZlbgorICogdGhvdWdoIHRoZSBhcHBsaWNhdGlvbiBvZiB0aGUgcGFyZW50IFBQRSBwcm9jZXNzIGlzIHRoZSBzYW1lLiAgVGhlcmVmb3JlLAorICogd2UgbXVzdCBiZSBzdXJlIHRvIGNyZWF0ZSBhIHNlcGFyYXRlIG9wX2JmZCBvYmplY3QgZm9yIGVhY2ggU1BVLiAgV2hlbiBkb2luZworICogc28gYmVsb3csIHdlIGV4YW1pbmUgaGVhZGVyLmVtYmVkZGVkX29mZnNldC4gIElmIGVtYmVkZGVkX29mZnNldCBpcyA+IDAsIGl0J3MKKyAqIGludGVycHJldGVkIGFzIHRoZSBvZmZzZXQgb2YgYW4gU1BVIGltYWdlIGVtYmVkZGVkIGluIHRoZSBjb250YWluaW5nIGZpbGUsCisgKiBzbyB0aGUgZmlsZW5hbWUgdG8gZG8gdGhlIGNoZWNrX210aW1lIG9uIGlzIHRoZSBjb250YWluaW5nIGZpbGUsIGlwLmltYWdlOworICogb3RoZXJ3aXNlLCB0aGUgZmlsZW5hbWUgdG8gZG8gdGhlIGNoZWNrX210aW1lIG9uIGlzIHRoZSBzZXBhcmF0ZSBiYWNraW5nCisgKiBmaWxlIG9mIHRoZSBTUFUgaW1hZ2UsIGFiZmQtPmZpbGVuYW1lLgorICovCit2b2lkCitwb3B1bGF0ZV9zcHVfcHJvZmlsZV9mcm9tX2ZpbGVzKGxpc3Q8cHJvZmlsZV9zYW1wbGVfZmlsZXM+IGNvbnN0ICYgZmlsZXMsCisJCQkJc3RyaW5nIGNvbnN0IGFwcF9pbWFnZSwKKwkJCQlwcm9maWxlX2NvbnRhaW5lciAmIHNhbXBsZXMsCisJCQkJaW52ZXJ0ZWRfcHJvZmlsZSBjb25zdCAmIGlwLAorCQkJCXN0cmluZ19maWx0ZXIgY29uc3QgJiBzeW1ib2xfZmlsdGVyLAorCQkJCXNpemVfdCBpcF9ncnBfbnVtLCBib29sICogaGFzX2RlYnVnX2luZm8pCit7CisJc3RyaW5nIGFyY2hpdmVfcGF0aCA9IHNhbXBsZXMuZXh0cmFfZm91bmRfaW1hZ2VzLmdldF9hcmNoaXZlX3BhdGgoKTsKKwlib29sIG9rID0gaXAuZXJyb3IgPT0gaW1hZ2Vfb2s7CisJb3BfYmZkICogYWJmZCA9IE5VTEw7CisJc3RyaW5nIGZuYW1lX3RvX2NoZWNrOworCWxpc3Q8cHJvZmlsZV9zYW1wbGVfZmlsZXM+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGZpbGVzLmJlZ2luKCk7CisJbGlzdDxwcm9maWxlX3NhbXBsZV9maWxlcz46OmNvbnN0X2l0ZXJhdG9yIGNvbnN0IGVuZCA9IGZpbGVzLmVuZCgpOworCWZvciAoOyBpdCAhPSBlbmQ7ICsraXQpIHsKKwkJcHJvZmlsZV90IHByb2ZpbGU7CisJCWlmIChpdC0+c2FtcGxlX2ZpbGVuYW1lLmVtcHR5KCkpCisJCQljb250aW51ZTsKKworCQlwcm9maWxlLmFkZF9zYW1wbGVfZmlsZShpdC0+c2FtcGxlX2ZpbGVuYW1lKTsKKwkJb3BkX2hlYWRlciBoZWFkZXIgPSBwcm9maWxlLmdldF9oZWFkZXIoKTsKKwkJaWYgKGhlYWRlci5lbWJlZGRlZF9vZmZzZXQpIHsKKwkJCWFiZmQgPSBuZXcgb3BfYmZkKGhlYWRlci5lbWJlZGRlZF9vZmZzZXQsCisJCQkJCSAgaXAuaW1hZ2UsCisJCQkJCSAgc3ltYm9sX2ZpbHRlciwKKwkJCQkJICBzYW1wbGVzLmV4dHJhX2ZvdW5kX2ltYWdlcywKKwkJCQkJICBvayk7CisJCQlmbmFtZV90b19jaGVjayA9IGlwLmltYWdlOworCQl9IGVsc2UgeworCQkJYWJmZCA9IG5ldyBvcF9iZmQoaXAuaW1hZ2UsCisJCQkJCSAgc3ltYm9sX2ZpbHRlciwKKwkJCQkJICBzYW1wbGVzLmV4dHJhX2ZvdW5kX2ltYWdlcywKKwkJCQkJICBvayk7CisJCQlmbmFtZV90b19jaGVjayA9IGFiZmQtPmdldF9maWxlbmFtZSgpOworCQl9CisJCXByb2ZpbGUuc2V0X29mZnNldCgqYWJmZCk7CisJCWlmICghb2sgJiYgaXAuZXJyb3IgPT0gaW1hZ2Vfb2spCisJCQlpcC5lcnJvciA9IGltYWdlX2Zvcm1hdF9mYWlsdXJlOworCisJCWlmIChpcC5lcnJvciA9PSBpbWFnZV9mb3JtYXRfZmFpbHVyZSkKKwkJCXJlcG9ydF9pbWFnZV9lcnJvcihpcCwgZmFsc2UsCisJCQkJCSAgIHNhbXBsZXMuZXh0cmFfZm91bmRfaW1hZ2VzKTsKKworCQlzYW1wbGVzLmFkZChwcm9maWxlLCAqYWJmZCwgYXBwX2ltYWdlLCBpcF9ncnBfbnVtKTsKKwkJaWYgKGlwLmVycm9yID09IGltYWdlX29rKSB7CisJCQlpbWFnZV9lcnJvciBlcnJvcjsKKwkJCXN0cmluZyBmaWxlbmFtZSA9CisJCQkJc2FtcGxlcy5leHRyYV9mb3VuZF9pbWFnZXMuZmluZF9pbWFnZV9wYXRoKAorCQkJCQlmbmFtZV90b19jaGVjaywgZXJyb3IsIHRydWUpOworCQkJY2hlY2tfbXRpbWUoZmlsZW5hbWUsIHByb2ZpbGUuZ2V0X2hlYWRlcigpKTsKKwkJfQorCisJCWlmIChoYXNfZGVidWdfaW5mbyAmJiAhKmhhc19kZWJ1Z19pbmZvKQorCQkJKmhhc19kZWJ1Z19pbmZvID0gYWJmZC0+aGFzX2RlYnVnX2luZm8oKTsKKwkJZGVsZXRlIGFiZmQ7CisJfQorfQorfSAgLy8gYW5vbiBuYW1lc3BhY2UKKwordm9pZAorcG9wdWxhdGVfZm9yX3NwdV9pbWFnZShwcm9maWxlX2NvbnRhaW5lciAmIHNhbXBsZXMsCisJCSAgICAgICBpbnZlcnRlZF9wcm9maWxlIGNvbnN0ICYgaXAsCisJCSAgICAgICBzdHJpbmdfZmlsdGVyIGNvbnN0ICYgc3ltYm9sX2ZpbHRlciwKKwkJICAgICAgIGJvb2wgKiBoYXNfZGVidWdfaW5mbykKK3sKKworCWZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaXAuZ3JvdXBzLnNpemUoKTsgKytpKSB7CisJCWxpc3QgPCBpbWFnZV9zZXQgPjo6Y29uc3RfaXRlcmF0b3IgaXQ9CisJCQlpcC5ncm91cHNbaV0uYmVnaW4oKTsKKwkJbGlzdCA8IGltYWdlX3NldCA+Ojpjb25zdF9pdGVyYXRvciBjb25zdCBlbmQKKwkJCT0gaXAuZ3JvdXBzW2ldLmVuZCgpOworCisJCWZvciAoOyBpdCAhPSBlbmQ7ICsraXQpCisJCQlwb3B1bGF0ZV9zcHVfcHJvZmlsZV9mcm9tX2ZpbGVzKGl0LT5maWxlcywKKwkJCQlpdC0+YXBwX2ltYWdlLCBzYW1wbGVzLCBpcCwKKwkJCQlzeW1ib2xfZmlsdGVyLCBpLCBoYXNfZGVidWdfaW5mbyk7CisJfQorfQorCitib29sIGlzX3NwdV9wcm9maWxlKGludmVydGVkX3Byb2ZpbGUgY29uc3QgJiBpcCkKK3sKKwlib29sIHJldHZhbCA9IGZhbHNlOworCXN0cmluZyBzZm5hbWUgPSAiIjsKKwlpZiAoc3B1X3Byb2ZpbGUgIT0gdW5rbm93bl9wcm9maWxlKQorCQlyZXR1cm4gc3B1X3Byb2ZpbGU7CisKKwlpZiAoIWlwLmdyb3Vwcy5zaXplKCkpCisJCXJldHVybiBmYWxzZTsKKworCWZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaXAuZ3JvdXBzLnNpemUoKTsgKytpKSB7CisJCWxpc3Q8aW1hZ2Vfc2V0Pjo6Y29uc3RfaXRlcmF0b3IgZ3JwX2l0CisJCQk9IGlwLmdyb3Vwc1tpXS5iZWdpbigpOworCQlsaXN0PGltYWdlX3NldD46OmNvbnN0X2l0ZXJhdG9yIGNvbnN0IGdycF9lbmQKKwkJCT0gaXAuZ3JvdXBzW2ldLmVuZCgpOworCisJCWZvciAoOyBncnBfaXQgIT0gZ3JwX2VuZDsgKytncnBfaXQpIHsKKwkJCWxpc3Q8cHJvZmlsZV9zYW1wbGVfZmlsZXM+Ojpjb25zdF9pdGVyYXRvciBzZmlsZXNfaXQgPQorCQkJCWdycF9pdC0+ZmlsZXMuYmVnaW4oKTsKKwkJCWxpc3Q8cHJvZmlsZV9zYW1wbGVfZmlsZXM+Ojpjb25zdF9pdGVyYXRvciBzZmlsZXNfZW5kID0KKwkJCQlncnBfaXQtPmZpbGVzLmVuZCgpOworCQkJZm9yICg7IHNmaWxlc19pdCAhPSBzZmlsZXNfZW5kOyArK3NmaWxlc19pdCkgeworCQkJCWlmICghc2ZpbGVzX2l0LT5zYW1wbGVfZmlsZW5hbWUuZW1wdHkoKSkgeworCQkJCQlzZm5hbWUgPSBzZmlsZXNfaXQtPnNhbXBsZV9maWxlbmFtZTsKKwkJCQkJZ290byBkb19jaGVjazsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisJZ290byBvdXQ7CisKK2RvX2NoZWNrOgorCXNwdV9wcm9maWxlID0gcHJvZmlsZV90Ojppc19zcHVfc2FtcGxlX2ZpbGUoc2ZuYW1lKTsKKworCWlmIChzcHVfcHJvZmlsZSA9PSBjZWxsX3NwdV9wcm9maWxlKQorCQlyZXR2YWwgPSB0cnVlOworCitvdXQ6CisJcmV0dXJuIHJldHZhbDsKK30KKworCmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9saWJwcC9wb3B1bGF0ZV9mb3Jfc3B1LmggYi9vcHJvZmlsZS0wLjkuNy9saWJwcC9wb3B1bGF0ZV9mb3Jfc3B1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWM0ODA5OQotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2xpYnBwL3BvcHVsYXRlX2Zvcl9zcHUuaApAQCAtMCwwICsxLDQyIEBACisvKioKKyAqIEBmaWxlIGxpYnBwL3BvcHVsYXRlX2Zvcl9zcHUuaAorICogRmlsbCB1cCBhIHByb2ZpbGVfY29udGFpbmVyIGZyb20gaW52ZXJ0ZWQgcHJvZmlsZXMgZm9yCisgKiBhIENlbGwgQkUgU1BVIHByb2ZpbGUKKyAqCisgKiBAcmVtYXJrIENvcHlyaWdodCAyMDA3IE9Qcm9maWxlIGF1dGhvcnMKKyAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCisgKgorICogQGF1dGhvciBNYXluYXJkIEpvaG5zb24KKyAqIChDKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDcKKyAqLworCisjaWZuZGVmIFBPUFVMQVRFX0ZPUl9TUFVfSAorI2RlZmluZSBQT1BVTEFURV9GT1JfU1BVX0gKKworY2xhc3MgcHJvZmlsZV9jb250YWluZXI7CitjbGFzcyBpbnZlcnRlZF9wcm9maWxlOworY2xhc3Mgc3RyaW5nX2ZpbHRlcjsKKworLyoKKyAqIFdoZW4gcHJvZmlsaW5nIFNQVXMgb24gQ2VsbCBCcm9hZGJhbmQgRW5naW5lLCBhbGwgc2FtcGxlIGZpbGUKKyAqIGhlYWRlcnMgZ2V0IGEgZmxhZyBzZXQgaW5kaWNhdGluZyAic3B1X3Byb2ZpbGUiLiAgVGhpcyBmdW5jdGlvbgorICogY2hlY2tzIHRoZSBmaXJzdCBzYW1wbGUgZmlsZSBmb3IgdGhpcyBpbmRpY2F0b3IuCisgKi8KK2Jvb2wgaXNfc3B1X3Byb2ZpbGUoaW52ZXJ0ZWRfcHJvZmlsZSBjb25zdCAmIGlwKTsKKworLyoKKyAqIFRoaXMgaXMgYSBzcGVjaWFsLXB1cnBvc2UgZnVuY3Rpb24gZm9yIENFTEwgQkUgU1BVIHByb2ZpbGluZy4KKyAqIFNlZSBwb3B1bGF0ZV9zcHVfcHJvZmlsZV9mcm9tX2ZpbGVzIHByb2xvZ3VlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KK3ZvaWQgcG9wdWxhdGVfZm9yX3NwdV9pbWFnZShwcm9maWxlX2NvbnRhaW5lciAmIHNhbXBsZXMsCisJCQkgICAgaW52ZXJ0ZWRfcHJvZmlsZSBjb25zdCAmIGlwLAorCQkJICAgIHN0cmluZ19maWx0ZXIgY29uc3QgJiBzeW1ib2xfZmlsdGVyLAorCQkJICAgIGJvb2wgKiBoYXNfZGVidWdfaW5mbyk7CisKK2VudW0gcHJvZmlsZV90eXBlIHsKKwl1bmtub3duX3Byb2ZpbGUgPSAtMSwKKwlub3JtYWxfcHJvZmlsZSwKKwljZWxsX3NwdV9wcm9maWxlCit9OworCisjZW5kaWYgLyogUE9QVUxBVEVfRk9SX1NQVV9IICovCmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9saWJwcC9wcm9maWxlLmNwcCBiL29wcm9maWxlLTAuOS43L2xpYnBwL3Byb2ZpbGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxMTc1MDgKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9saWJwcC9wcm9maWxlLmNwcApAQCAtMCwwICsxLDE4NyBAQAorLyoqCisgKiBAZmlsZSBwcm9maWxlLmNwcAorICogRW5jYXBzdWxhdGlvbiBmb3Igc2FtcGxlcyBmaWxlcyBvdmVyIGFsbCBwcm9maWxlIGNsYXNzZXMKKyAqIGJlbG9uZ2luZyB0byB0aGUgc2FtZSBiaW5hcnkgaW1hZ2UKKyAqCisgKiBAcmVtYXJrIENvcHlyaWdodCAyMDAyIE9Qcm9maWxlIGF1dGhvcnMKKyAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCisgKgorICogQGF1dGhvciBQaGlsaXBwZSBFbGllCisgKiBAYXV0aG9yIEpvaG4gTGV2b24KKyAqLworCisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8Y3N0cmluZz4KKworI2luY2x1ZGUgPGlvc3RyZWFtPgorI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDxzc3RyZWFtPgorI2luY2x1ZGUgPGNzdHJpbmc+CisKKyNpbmNsdWRlIDxjZXJybm8+CisKKyNpbmNsdWRlICJvcF9leGNlcHRpb24uaCIKKyNpbmNsdWRlICJvcF9oZWFkZXIuaCIKKyNpbmNsdWRlICJvcF9jb25maWcuaCIKKyNpbmNsdWRlICJvcF9zYW1wbGVfZmlsZS5oIgorI2luY2x1ZGUgInByb2ZpbGUuaCIKKyNpbmNsdWRlICJvcF9iZmQuaCIKKyNpbmNsdWRlICJjdmVyYi5oIgorI2luY2x1ZGUgInBvcHVsYXRlX2Zvcl9zcHUuaCIKKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKworcHJvZmlsZV90Ojpwcm9maWxlX3QoKQorCTogc3RhcnRfb2Zmc2V0KDApCit7Cit9CisKKworLy8gc3RhdGljIG1lbWJlcgorY291bnRfdHlwZSBwcm9maWxlX3Q6OnNhbXBsZV9jb3VudChzdHJpbmcgY29uc3QgJiBmaWxlbmFtZSkKK3sKKwlvZGJfdCBzYW1wbGVzX2RiOworCisJb3Blbl9zYW1wbGVfZmlsZShmaWxlbmFtZSwgc2FtcGxlc19kYik7CisKKwljb3VudF90eXBlIGNvdW50ID0gMDsKKworCW9kYl9ub2RlX25yX3Qgbm9kZV9uciwgcG9zOworCW9kYl9ub2RlX3QgKiBub2RlID0gb2RiX2dldF9pdGVyYXRvcigmc2FtcGxlc19kYiwgJm5vZGVfbnIpOworCWZvciAocG9zID0gMDsgcG9zIDwgbm9kZV9ucjsgKytwb3MpCisJCWNvdW50ICs9IG5vZGVbcG9zXS52YWx1ZTsKKworCW9kYl9jbG9zZSgmc2FtcGxlc19kYik7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKKy8vc3RhdGljIG1lbWJlcgorZW51bSBwcm9maWxlX3R5cGUgcHJvZmlsZV90Ojppc19zcHVfc2FtcGxlX2ZpbGUoc3RyaW5nIGNvbnN0ICYgZmlsZW5hbWUpCit7CisJcHJvZmlsZV90eXBlIHJldHZhbDsKKwlvZGJfdCBzYW1wbGVzX2RiOworCW9wZW5fc2FtcGxlX2ZpbGUoZmlsZW5hbWUsIHNhbXBsZXNfZGIpOworCW9wZF9oZWFkZXIgY29uc3QgJiBoZHIgPQorCQkqc3RhdGljX2Nhc3Q8b3BkX2hlYWRlciAqPihvZGJfZ2V0X2RhdGEoJnNhbXBsZXNfZGIpKTsKKwlyZXR2YWwgPSBoZHIuc3B1X3Byb2ZpbGUgPyBjZWxsX3NwdV9wcm9maWxlOiBub3JtYWxfcHJvZmlsZTsKKwlvZGJfY2xvc2UoJnNhbXBsZXNfZGIpOworCXJldHVybiByZXR2YWw7Cit9CisKKy8vc3RhdGljIG1lbWJlcgordm9pZCBwcm9maWxlX3Q6Om9wZW5fc2FtcGxlX2ZpbGUoc3RyaW5nIGNvbnN0ICYgZmlsZW5hbWUsIG9kYl90ICYgZGIpCit7CisJLy8gQ2hlY2sgZmlyc3QgaWYgdGhlIHNhbXBsZSBmaWxlIHZlcnNpb24gaXMgb2sgZWxzZSBvZGJfb3BlbigpIGNhbgorCS8vIGZhaWwgYW5kIHRoZSBlcnJvciBtZXNzYWdlIHdpbGwgYmUgb2JzY3VyZS4KKwlvcGRfaGVhZGVyIGhlYWQgPSByZWFkX2hlYWRlcihmaWxlbmFtZSk7CisKKwlpZiAoaGVhZC52ZXJzaW9uICE9IE9QRF9WRVJTSU9OKSB7CisJCW9zdHJpbmdzdHJlYW0gb3M7CisJCW9zIDw8ICJvcHJvZnBwOiBzYW1wbGVzIGZpbGVzIHZlcnNpb24gbWlzbWF0Y2gsIGFyZSB5b3UgIgorCQkgICA8PCAicnVubmluZyBhIGRhZW1vbiBhbmQgcG9zdC1wcm9maWxlIHRvb2xzIHdpdGggdmVyc2lvbiAiCisJCSAgIDw8ICAibWlzbWF0Y2ggP1xuIjsKKwkJdGhyb3cgb3BfZmF0YWxfZXJyb3Iob3Muc3RyKCkpOworCX0KKworCWludCByYyA9IG9kYl9vcGVuKCZkYiwgZmlsZW5hbWUuY19zdHIoKSwgT0RCX1JET05MWSwKKwkJc2l6ZW9mKHN0cnVjdCBvcGRfaGVhZGVyKSk7CisKKwlpZiAocmMpCisJCXRocm93IG9wX2ZhdGFsX2Vycm9yKGZpbGVuYW1lICsgIjogIiArIHN0cmVycm9yKHJjKSk7Cit9CisKK3ZvaWQgcHJvZmlsZV90OjphZGRfc2FtcGxlX2ZpbGUoc3RyaW5nIGNvbnN0ICYgZmlsZW5hbWUpCit7CisJb2RiX3Qgc2FtcGxlc19kYjsKKworCW9wZW5fc2FtcGxlX2ZpbGUoZmlsZW5hbWUsIHNhbXBsZXNfZGIpOworCisJb3BkX2hlYWRlciBjb25zdCAmIGhlYWQgPQorCQkqc3RhdGljX2Nhc3Q8b3BkX2hlYWRlciAqPihvZGJfZ2V0X2RhdGEoJnNhbXBsZXNfZGIpKTsKKworCS8vIGlmIHdlIGFscmVhZHkgcmVhZCBhIHNhbXBsZSBmaWxlIGhlYWRlciBwb2ludGVyIGlzIG5vbiBudWxsCisJaWYgKGZpbGVfaGVhZGVyLmdldCgpKQorCQlvcF9jaGVja19oZWFkZXIoaGVhZCwgKmZpbGVfaGVhZGVyLCBmaWxlbmFtZSk7CisJZWxzZQorCQlmaWxlX2hlYWRlci5yZXNldChuZXcgb3BkX2hlYWRlcihoZWFkKSk7CisKKwlvZGJfbm9kZV9ucl90IG5vZGVfbnIsIHBvczsKKwlvZGJfbm9kZV90ICogbm9kZSA9IG9kYl9nZXRfaXRlcmF0b3IoJnNhbXBsZXNfZGIsICZub2RlX25yKTsKKworCWZvciAocG9zID0gMDsgcG9zIDwgbm9kZV9ucjsgKytwb3MpIHsKKwkJb3JkZXJlZF9zYW1wbGVzX3Q6Oml0ZXJhdG9yIGl0ID0gCisJCSAgICBvcmRlcmVkX3NhbXBsZXMuZmluZChub2RlW3Bvc10ua2V5KTsKKwkJaWYgKGl0ICE9IG9yZGVyZWRfc2FtcGxlcy5lbmQoKSkgeworCQkJaXQtPnNlY29uZCArPSBub2RlW3Bvc10udmFsdWU7CisJCX0gZWxzZSB7CisJCQlvcmRlcmVkX3NhbXBsZXNfdDo6dmFsdWVfdHlwZQorCQkJCXZhbChub2RlW3Bvc10ua2V5LCBub2RlW3Bvc10udmFsdWUpOworCQkJb3JkZXJlZF9zYW1wbGVzLmluc2VydCh2YWwpOworCQl9CisJfQorCisJb2RiX2Nsb3NlKCZzYW1wbGVzX2RiKTsKK30KKworCit2b2lkIHByb2ZpbGVfdDo6c2V0X29mZnNldChvcF9iZmQgY29uc3QgJiBhYmZkKQoreworCS8vIGlmIG5vIGJmZCBmaWxlIGhhcyBiZWVuIGxvY2F0ZWQgZm9yIHRoaXMgc2FtcGxlcyBmaWxlLCB3ZSBjYW4ndAorCS8vIHNoaWZ0IHNhbXBsZSBiZWNhdXNlIGFiZmQuZ2V0X3N5bWJvbF9yYW5nZSgpIHJldHVybiB0aGUgd2hvbGUKKwkvLyBhZGRyZXNzIHNwYWNlIGFuZCBzZXR0aW5nIGEgbm9uIHplcm8gc3RhcnRfb2Zmc2V0IHdpbGwgb3ZlcmZsb3cKKwkvLyBpbiBnZXRfc3ltYm9sX3JhbmdlKCkgY2FsbGVyLgorCWlmIChhYmZkLnZhbGlkKCkpIHsKKwkJb3BkX2hlYWRlciBjb25zdCAmIGhlYWRlciA9IGdldF9oZWFkZXIoKTsKKwkJaWYgKGhlYWRlci5hbm9uX3N0YXJ0KSB7CisJCQlzdGFydF9vZmZzZXQgPSBoZWFkZXIuYW5vbl9zdGFydDsKKwkJfSBlbHNlIGlmIChoZWFkZXIuaXNfa2VybmVsKSB7CisJCQlzdGFydF9vZmZzZXQgPSBhYmZkLmdldF9zdGFydF9vZmZzZXQoMCk7CisJCX0KKwl9CisJY3ZlcmIgPDwgKHZkZWJ1ZykgPDwgInN0YXJ0X29mZnNldCBpcyBub3cgIiA8PCBzdGFydF9vZmZzZXQgPDwgZW5kbDsKK30KKworCitwcm9maWxlX3Q6Oml0ZXJhdG9yX3BhaXIKK3Byb2ZpbGVfdDo6c2FtcGxlc19yYW5nZShvZGJfa2V5X3Qgc3RhcnQsIG9kYl9rZXlfdCBlbmQpIGNvbnN0Cit7CisJLy8gQ2hlY2sgdGhlIHN0YXJ0IHBvc2l0aW9uIGlzbid0IGJlZm9yZSBzdGFydF9vZmZzZXQ6CisJLy8gdGhpcyBhdm9pZHMgd3JhcHBpbmcvdW5kZXJmbG93aW5nIHN0YXJ0L2VuZC4KKwkvLyBUaGlzIGNhbiBoYXBwZW4gb24gZS5nLiBBUk0ga2VybmVscywgd2hlcmUgLmluaXQgaXMKKwkvLyBtYXBwZWQgYmVmb3JlIC50ZXh0IC0gd2UganVzdCBoYXZlIHRvIHNraXAgYW55IHN1Y2gKKwkvLyAuaW5pdCBzeW1ib2xzLgorCWlmIChzdGFydCA8IHN0YXJ0X29mZnNldCkgeworCQlyZXR1cm4gbWFrZV9wYWlyKGNvbnN0X2l0ZXJhdG9yKG9yZGVyZWRfc2FtcGxlcy5lbmQoKSwgMCksIAorCQkJY29uc3RfaXRlcmF0b3Iob3JkZXJlZF9zYW1wbGVzLmVuZCgpLCAwKSk7CisJfQorCQorCXN0YXJ0IC09IHN0YXJ0X29mZnNldDsKKwllbmQgLT0gc3RhcnRfb2Zmc2V0OworCisJLy8gc2FuaXR5IGNoZWNrIGlmIHN0YXJ0ID4gZW5kIGNhbGxlciB3aWxsIGVudGVyIGludG8gYW4gaW5maW5pdGUgbG9vcAorCWlmIChzdGFydCA+IGVuZCkgeworCQl0aHJvdyBvcF9mYXRhbF9lcnJvcigicHJvZmlsZV90OjpzYW1wbGVzX3JhbmdlKCk6IHN0YXJ0ID4gZW5kIgorCQkJIiBzb21ldGhpbmcgd3Jvbmcgd2l0aCBrZXJuZWwgb3IgbW9kdWxlIGxheW91dCA/XG4iCisJCQkicGxlYXNlIHJlcG9ydCBwcm9ibGVtIHRvICIKKwkJCSJvcHJvZmlsZS1saXN0QGxpc3RzLnNvdXJjZWZvcmdlLm5ldCIpOworCX0KKworCW9yZGVyZWRfc2FtcGxlc190Ojpjb25zdF9pdGVyYXRvciBmaXJzdCA9IAorCQlvcmRlcmVkX3NhbXBsZXMubG93ZXJfYm91bmQoc3RhcnQpOworCW9yZGVyZWRfc2FtcGxlc190Ojpjb25zdF9pdGVyYXRvciBsYXN0ID0KKwkJb3JkZXJlZF9zYW1wbGVzLmxvd2VyX2JvdW5kKGVuZCk7CisKKwlyZXR1cm4gbWFrZV9wYWlyKGNvbnN0X2l0ZXJhdG9yKGZpcnN0LCBzdGFydF9vZmZzZXQpLAorCQljb25zdF9pdGVyYXRvcihsYXN0LCBzdGFydF9vZmZzZXQpKTsKK30KKworCitwcm9maWxlX3Q6Oml0ZXJhdG9yX3BhaXIgcHJvZmlsZV90OjpzYW1wbGVzX3JhbmdlKCkgY29uc3QKK3sKKwlvcmRlcmVkX3NhbXBsZXNfdDo6Y29uc3RfaXRlcmF0b3IgZmlyc3QgPSBvcmRlcmVkX3NhbXBsZXMuYmVnaW4oKTsKKwlvcmRlcmVkX3NhbXBsZXNfdDo6Y29uc3RfaXRlcmF0b3IgbGFzdCA9IG9yZGVyZWRfc2FtcGxlcy5lbmQoKTsKKworCXJldHVybiBtYWtlX3BhaXIoY29uc3RfaXRlcmF0b3IoZmlyc3QsIHN0YXJ0X29mZnNldCksCisJCWNvbnN0X2l0ZXJhdG9yKGxhc3QsIHN0YXJ0X29mZnNldCkpOworfQpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvbGlicHAvcHJvZmlsZS5oIGIvb3Byb2ZpbGUtMC45LjcvbGlicHAvcHJvZmlsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2MzM1NWQKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9saWJwcC9wcm9maWxlLmgKQEAgLTAsMCArMSwxODcgQEAKKy8qKgorICogQGZpbGUgcHJvZmlsZS5oCisgKiBFbmNhcHN1bGF0aW9uIGZvciBzYW1wbGVzIGZpbGVzIG92ZXIgYWxsIHByb2ZpbGUgY2xhc3NlcworICogYmVsb25naW5nIHRvIHRoZSBzYW1lIGJpbmFyeSBpbWFnZQorICoKKyAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDIgT1Byb2ZpbGUgYXV0aG9ycworICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKKyAqCisgKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKKyAqIEBhdXRob3IgSm9obiBMZXZvbgorICovCisKKyNpZm5kZWYgUFJPRklMRV9ICisjZGVmaW5lIFBST0ZJTEVfSAorCisjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPG1hcD4KKyNpbmNsdWRlIDxpdGVyYXRvcj4KKworI2luY2x1ZGUgIm9kYi5oIgorI2luY2x1ZGUgIm9wX3R5cGVzLmgiCisjaW5jbHVkZSAidXRpbGl0eS5oIgorI2luY2x1ZGUgInBvcHVsYXRlX2Zvcl9zcHUuaCIKKworY2xhc3Mgb3BkX2hlYWRlcjsKK2NsYXNzIG9wX2JmZDsKKworLyoqCisgKiBDbGFzcyBjb250YWluaW5nIGEgc2luZ2xlIHNhbXBsZSBmaWxlIGNvbnRlbnRzLgorICogaS5lLiBzZXQgb2YgY291bnQgdmFsdWVzIGZvciBWTUEgb2Zmc2V0cyBmb3IKKyAqIGEgcGFydGljdWxhciBiaW5hcnkuCisgKi8KK2NsYXNzIHByb2ZpbGVfdCA6IG5vbmNvcHlhYmxlIHsKK3B1YmxpYzoKKwkvKioKKwkgKiBwcm9maWxlX3QgLSBjb25zdHJ1Y3QgYW4gZW1wdHkgIHByb2ZpbGVfdCBvYmplY3QKKwkgKi8KKwlwcm9maWxlX3QoKTsKKworCS8vLyByZXR1cm4gdHJ1ZSBpZiBubyBzYW1wbGUgZmlsZSBoYXMgYmVlbiBsb2FkZWQKKwlib29sIGVtcHR5KCkgY29uc3QgeyByZXR1cm4gIWZpbGVfaGVhZGVyLmdldCgpOyB9CisgCisJLy8vIHJldHVybiB0aGUgaGVhZGVyIG9mIHRoZSBsYXN0IG9wZW5lZCBzYW1wbGVzIGZpbGUKKwlvcGRfaGVhZGVyIGNvbnN0ICYgZ2V0X2hlYWRlcigpIGNvbnN0IHsKKwkJcmV0dXJuICpmaWxlX2hlYWRlcjsKKwl9CisKKwkvKioKKwkgKiBjb3VudCBzYW1wbGVzIGNvdW50IHcvbyByZWNvcmRpbmcgdGhlbQorCSAqIEBwYXJhbSBmaWxlbmFtZSBzYW1wbGUgZmlsZW5hbWUKKwkgKgorCSAqIGNvbnZlbmllbmNlIGludGVyZmFjZSBmb3IgcmF3IGFjY2VzcyB0byBzYW1wbGUgY291bnQgdy9vIHJlY29yZGluZworCSAqIHRoZW0uIEl0J3MgcGxhY2VkIGhlcmUgc28gYWxsIGFjY2VzcyB0byBzYW1wbGVzIGZpbGVzIGdvIHRocm91Z2gKKwkgKiBwcm9maWxlX3Qgc3RhdGljIG9yIG5vbiBzdGF0aWMgbWVtYmVyLgorCSAqLworCXN0YXRpYyBjb3VudF90eXBlIHNhbXBsZV9jb3VudChzdGQ6OnN0cmluZyBjb25zdCAmIGZpbGVuYW1lKTsKKworCS8qKgorCSAqIEluZGljYXRlIGlmIGdpdmVuIHNhbXBsZSBmaWxlIGlzIGZyb20gYSBDZWxsIEJyb2FkYmFuZCBFbmdpbmUKKwkgKiBTUFUgcHJvZmlsZQorCSAqIEBwYXJhbSBmaWxlbmFtZSBzYW1wbGUgZmlsZW5hbWUKKwkgKgorCSAqIENvbnZlbmllbmNlIGludGVyZmFjZSBwdXQgaGVyZSBzbyBhbGwgYWNjZXNzIHRvIHNhbXBsZXMgZmlsZXMKKwkgKiBnbyB0aHJvdWdoIHByb2ZpbGVfdCBzdGF0aWMgb3Igbm9uIHN0YXRpYyBtZW1iZXIuCisJICovCisJc3RhdGljIGVudW0gcHJvZmlsZV90eXBlIGlzX3NwdV9zYW1wbGVfZmlsZShzdGQ6OnN0cmluZyBjb25zdCAmIGZpbGVuYW1lKTsKKworCS8qKgorCSAqIGN1bXVsYXRlIHNhbXBsZSBmaWxlIHRvIG91ciBjb250YWluZXIgb2Ygc2FtcGxlcworCSAqIEBwYXJhbSBmaWxlbmFtZSAgc2FtcGxlIGZpbGUgbmFtZQorCSAqCisJICogc3RvcmUgc2FtcGxlcyBmb3Igb25lIHNhbXBsZSBmaWxlLCBzYW1wbGUgZmlsZSBoZWFkZXIgaXMgc2FuaXRpemVkLgorCSAqCisJICogYWxsIGVycm9yIGFyZSBmYXRhbAorCSAqLworCXZvaWQgYWRkX3NhbXBsZV9maWxlKHN0ZDo6c3RyaW5nIGNvbnN0ICYgZmlsZW5hbWUpOworCisJLy8vIFNldCBhbiBhcHByb3ByaWF0ZSBzdGFydCBvZmZzZXQsIHNlZSBjb21tZW50cyBiZWxvdy4KKwl2b2lkIHNldF9vZmZzZXQob3BfYmZkIGNvbnN0ICYgYWJmZCk7CisKKwljbGFzcyBjb25zdF9pdGVyYXRvcjsKKwl0eXBlZGVmIHN0ZDo6cGFpcjxjb25zdF9pdGVyYXRvciwgY29uc3RfaXRlcmF0b3I+IGl0ZXJhdG9yX3BhaXI7CisKKwkvKioKKwkgKiBAcGFyYW0gc3RhcnQgIHN0YXJ0IG9mZnNldAorCSAqIEBwYXJhbSBlbmQgIGVuZCBvZmZzZXQKKwkgKgorCSAqIHJldHVybiBhbiBpdGVyYXRvciBwYWlyIHRvIFtzdGFydCwgZW5kKSByYW5nZQorCSAqLworCWl0ZXJhdG9yX3BhaXIKKwlzYW1wbGVzX3JhbmdlKG9kYl9rZXlfdCBzdGFydCwgb2RiX2tleV90IGVuZCkgY29uc3Q7CisKKwkvLy8gcmV0dXJuIGEgcGFpciBvZiBpdGVyYXRvciBmb3IgYWxsIHNhbXBsZXMKKwlpdGVyYXRvcl9wYWlyIHNhbXBsZXNfcmFuZ2UoKSBjb25zdDsKKworcHJpdmF0ZToKKwkvLy8gaGVscGVyIGZvciBzYW1wbGVfY291bnQoKSBhbmQgYWRkX3NhbXBsZV9maWxlKCkuIEFsbCBlcnJvciBsYXVuY2gKKwkvLy8gYW4gZXhjZXB0aW9uLgorCXN0YXRpYyB2b2lkCisJb3Blbl9zYW1wbGVfZmlsZShzdGQ6OnN0cmluZyBjb25zdCAmIGZpbGVuYW1lLCBvZGJfdCAmKTsKKworCS8vLyBjb3B5IG9mIHRoZSBzYW1wbGVzIGZpbGUgaGVhZGVyCisJc2NvcGVkX3B0cjxvcGRfaGVhZGVyPiBmaWxlX2hlYWRlcjsKKworCS8vLyBzdG9yYWdlIHR5cGUgZm9yIHNhbXBsZXMgc29ydGVkIGJ5IGVpcAorCXR5cGVkZWYgc3RkOjptYXA8b2RiX2tleV90LCBjb3VudF90eXBlPiBvcmRlcmVkX3NhbXBsZXNfdDsKKworCS8qKgorCSAqIFNhbXBsZXMgYXJlIHN0b3JlZCBpbiBoYXNoIHRhYmxlLCBpdGVyYXRpbmcgb3ZlciBoYXNoIHRhYmxlIGRvbid0CisJICogcHJvdmlkZSBhbnkgb3JkZXJpbmcsIHRoZSBhYm92ZSBjb3VudCgpIGludGVyZmFjZSByZWx5IG9uIHNhbXBsZXMKKwkgKiBvcmRlcmVkIGJ5IGVpcC4gVGhpcyBtYXAgaXMgb25seSBhIHRlbXBvcmFyeSBzdG9yYWdlIHdoZXJlIHNhbXBsZXMKKwkgKiBhcmUgb3JkZXJlZCBieSBlaXAuCisJICovCisJb3JkZXJlZF9zYW1wbGVzX3Qgb3JkZXJlZF9zYW1wbGVzOworCisJLyoqCisJICogRm9yIGNlcnRhaW4gcHJvZmlsZXMsIHN1Y2ggYXMga2VybmVsL21vZHVsZXMsIGFuZCBhbm9uCisJICogcmVnaW9ucyB3aXRoIGEgbWF0Y2hpbmcgYmluYXJ5LCB0aGlzIHZhbHVlIGlzIG5vbi16ZXJvLAorCSAqIGFuZCByZXByZXNlbnRzIHRoZSBmaWxlIG9mZnNldCBvZiB0aGUgcmVsZXZhbnQgc2VjdGlvbi4KKwkgKgorCSAqIEZvciBrZXJuZWwgcHJvZmlsZXMsIHRoaXMgaXMgZG9uZSBiZWNhdXNlIHdlIHVzZSB0aGUgaW5mb3JtYXRpb24KKwkgKiBwcm92aWRlZCBpbiAvcHJvYy9rc3ltcywgd2hpY2ggb25seSBnaXZlcyB0aGUgbWFwcGVkIHBvc2l0aW9uIG9mCisJICogLnRleHQsIGFuZCB0aGUgc3ltYm9sIF90ZXh0IGZyb20gdm1saW51eC4gVGhpcyB2YWx1ZSBpcyB1c2VkIHRvIGZpeAorCSAqIHVwIHRoZSBzYW1wbGUgb2Zmc2V0cyBmb3Iga2VybmVsIGNvZGUgYXMgYSByZXN1bHQgb2YgdGhpcyBkaWZmZXJlbmNlCisJICoKKwkgKiBJbiB1c2VyLXNwYWNlIHNhbXBsZXMsIHRoZSBzYW1wbGUgb2Zmc2V0IGlzIGZyb20gdGhlIHN0YXJ0IG9mIHRoZQorCSAqIG1hcHBlZCBmaWxlLCBhcyBzZWVuIGluIC9wcm9jL3BpZC9tYXBzLiBUaGlzIGlzIGZpbmUgZm9yCisJICogbWFwcGluZ3Mgb2YgcGVybWFuZW50IGZpbGVzLCBidXQgd2l0aCBhbm9uIG1hcHBpbmdzLCB3ZSBuZWVkCisJICogdG8gYWRqdXN0IHRoZSBrZXkgdmFsdWVzIHRvIGJlIGEgZmlsZSBvZmZzZXQgYWdhaW5zdCB0aGUKKwkgKiAqYmluYXJ5KiAoaWYgdGhlcmUgaXMgb25lKS4gVGhpcyBjYW4gb2J2aW91c2x5IGJlIGRpZmZlcmVudC4KKwkgKiBTbyB3ZSBwYXNzIG91ciBhbm9uIG1hcHBpbmcgc3RhcnQgVk1BIHRvIG9wX2JmZCwgd2hpY2ggbG9va3MKKwkgKiBmb3IgYSBzZWN0aW9uIHdpdGggdGhhdCBWTUEsIHRoZW4gcmV0dXJucyB0aGUgc2VjdGlvbidzCisJICogZmlsZXBvcy4gU28gYWxsIGlzIGdvb2QuCisJICoKKwkgKiBGaW5hbGx5LCBub3RlIHRoYXQgZm9yIGNnIHdlIGNhbid0IHVzZSB0aGlzIGluc2lkZSB0aGUKKwkgKiBwcm9maWxlX3QsIGFzIHdlJ3JlIHN0b3JpbmcgdHdvIG9mZnNldHMgaW4gdGhlIGtleSB2YWx1ZS4gU28KKwkgKiB3ZSBkbyBpdCBsYXRlciBpbiB0aGF0IGNhc2UuCisJICoKKwkgKiBQaGV3LgorCSAqLworCXU2NCBzdGFydF9vZmZzZXQ7Cit9OworCisKKy8vIEl0IHdpbGwgYmUgZWFzaWVyIHRvIGRlcml2ZSBwcm9maWxlX3Q6OmNvbnN0X2l0ZXJhdG9yIGZyb20KKy8vIHN0ZDo6aXRlcmF0b3I8c3RkOjppbnB1dF9pdGVyYXRvcl90YWcsIHVuc2lnbmVkIGludD4gYnV0IHRoaXMgZG9lc24ndAorLy8gd29yayBmb3IgZ2NjIDw9IDIuOTUgc28gd2UgcHJvdmlkZSB0aGUgbmVjY2Vzc2FyeSB0eXBlZGVmIGluIHRoZSBoYXJkIHdheS4KKy8vIFNlZSBJU08gQysrIDE3LjQuMy4xIKcgMSBhbmQgMTQuNy4zIKcgOS4KK25hbWVzcGFjZSBzdGQgeworCXRlbXBsYXRlIDw+CisJCXN0cnVjdCBpdGVyYXRvcl90cmFpdHM8cHJvZmlsZV90Ojpjb25zdF9pdGVyYXRvcj4geworCQkJdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOworCQkJdHlwZWRlZiBjb3VudF90eXBlIHZhbHVlX3R5cGU7CisJCQl0eXBlZGVmIGNvdW50X3R5cGUgKiBwb2ludGVyOworCQkJdHlwZWRlZiBjb3VudF90eXBlICYgcmVmZXJlbmNlOworCQkJdHlwZWRlZiBpbnB1dF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CisJCX07Cit9CisKKworY2xhc3MgcHJvZmlsZV90Ojpjb25zdF9pdGVyYXRvcgoreworCXR5cGVkZWYgb3JkZXJlZF9zYW1wbGVzX3Q6OmNvbnN0X2l0ZXJhdG9yIGl0ZXJhdG9yX3Q7CitwdWJsaWM6CisJY29uc3RfaXRlcmF0b3IoKSA6IHN0YXJ0X29mZnNldCgwKSB7fQorCWNvbnN0X2l0ZXJhdG9yKGl0ZXJhdG9yX3QgaXRfLCB1NjQgc3RhcnRfb2Zmc2V0XykKKwkJOiBpdChpdF8pLCBzdGFydF9vZmZzZXQoc3RhcnRfb2Zmc2V0Xykge30KKworCWNvdW50X3R5cGUgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gaXQtPnNlY29uZDsgfQorCWNvbnN0X2l0ZXJhdG9yICYgb3BlcmF0b3IrKygpIHsgKytpdDsgcmV0dXJuICp0aGlzOyB9CisKKwlvZGJfa2V5X3Qgdm1hKCkgY29uc3QgeyByZXR1cm4gaXQtPmZpcnN0ICsgc3RhcnRfb2Zmc2V0OyB9CisJY291bnRfdHlwZSBjb3VudCgpIGNvbnN0IHsgcmV0dXJuICoqdGhpczsgfQorCisJYm9vbCBvcGVyYXRvciE9KGNvbnN0X2l0ZXJhdG9yIGNvbnN0ICYgcmhzKSBjb25zdCB7CisJCXJldHVybiBpdCAhPSByaHMuaXQ7CisJfQorCWJvb2wgb3BlcmF0b3I9PShjb25zdF9pdGVyYXRvciBjb25zdCAmIHJocykgY29uc3QgeworCQlyZXR1cm4gaXQgPT0gcmhzLml0OworCX0KKworcHJpdmF0ZToKKwlpdGVyYXRvcl90IGl0OworCXU2NCBzdGFydF9vZmZzZXQ7Cit9OworCisjZW5kaWYgLyogIVBST0ZJTEVfSCAqLwpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvbGlicHAvcHJvZmlsZV9jb250YWluZXIuY3BwIGIvb3Byb2ZpbGUtMC45LjcvbGlicHAvcHJvZmlsZV9jb250YWluZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4M2Q2YzgKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9saWJwcC9wcm9maWxlX2NvbnRhaW5lci5jcHAKQEAgLTAsMCArMSwzMzMgQEAKKy8qKgorICogQGZpbGUgcHJvZmlsZV9jb250YWluZXIuY3BwCisgKiBwcm9maWxlIGZpbGUgY29udGFpbmVyCisgKgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMiBPUHJvZmlsZSBhdXRob3JzCisgKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORworICoKKyAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQorICogQGF1dGhvciBKb2huIExldm9uCisgKi8KKworI2luY2x1ZGUgPHNldD4KKyNpbmNsdWRlIDx2ZWN0b3I+CisjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPGlvc3RyZWFtPgorI2luY2x1ZGUgPHNzdHJlYW0+CisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPG51bWVyaWM+CisKKyNpbmNsdWRlICJzeW1ib2wuaCIKKyNpbmNsdWRlICJvcF9oZWFkZXIuaCIKKyNpbmNsdWRlICJwcm9maWxlLmgiCisjaW5jbHVkZSAic3ltYm9sX2Z1bmN0b3JzLmgiCisjaW5jbHVkZSAicHJvZmlsZV9jb250YWluZXIuaCIKKyNpbmNsdWRlICJzYW1wbGVfY29udGFpbmVyLmgiCisjaW5jbHVkZSAic3ltYm9sX2NvbnRhaW5lci5oIgorI2luY2x1ZGUgInBvcHVsYXRlX2Zvcl9zcHUuaCIKKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKworbmFtZXNwYWNlIHsKKworc3RydWN0IGZpbGVuYW1lX2J5X3NhbXBsZXMgeworCWZpbGVuYW1lX2J5X3NhbXBsZXMoZGVidWdfbmFtZV9pZCBpZCwgZG91YmxlIHBlcmNlbnRfKQorCQk6IGZpbGVuYW1lKGlkKSwgcGVyY2VudChwZXJjZW50XykKKwkJe30KKworCWJvb2wgb3BlcmF0b3I8KGZpbGVuYW1lX2J5X3NhbXBsZXMgY29uc3QgJiBsaHMpIGNvbnN0IHsKKwkJaWYgKHBlcmNlbnQgIT0gbGhzLnBlcmNlbnQpCisJCQlyZXR1cm4gcGVyY2VudCA8IGxocy5wZXJjZW50OworCQlyZXR1cm4gZmlsZW5hbWUgPCBsaHMuZmlsZW5hbWU7CisJfQorCisJZGVidWdfbmFtZV9pZCBmaWxlbmFtZTsKKwkvLyByYXRpbyBvZiBzYW1wbGVzIHdoaWNoIGJlbG9uZ3MgdG8gdGhpcyBmaWxlbmFtZS4KKwlkb3VibGUgcGVyY2VudDsKK307CisKK30gIC8vIGFub24gbmFtZXNwYWNlCisKKworcHJvZmlsZV9jb250YWluZXI6OnByb2ZpbGVfY29udGFpbmVyKGJvb2wgZGVidWdfaW5mb18sIGJvb2wgbmVlZF9kZXRhaWxzXywKKwkJCQkgICAgIGV4dHJhX2ltYWdlcyBjb25zdCAmIGV4dHJhXykKKwk6CisJc3ltYm9scyhuZXcgc3ltYm9sX2NvbnRhaW5lciksCisJc2FtcGxlcyhuZXcgc2FtcGxlX2NvbnRhaW5lciksCisJZGVidWdfaW5mbyhkZWJ1Z19pbmZvXyksCisJbmVlZF9kZXRhaWxzKG5lZWRfZGV0YWlsc18pLAorCWV4dHJhX2ZvdW5kX2ltYWdlcyhleHRyYV8pCit7Cit9CisKKworcHJvZmlsZV9jb250YWluZXI6On5wcm9maWxlX2NvbnRhaW5lcigpCit7Cit9CisgCisKKy8vIFBvc3QgY29uZGl0aW9uOgorLy8gIHRoZSBzeW1ib2xzL3NhbXBsZXMgYXJlIHNvcnRlZCBieSBpbmNyZWFzaW5nIHZtYS4KKy8vICB0aGUgcmFuZ2Ugb2Ygc2FtcGxlX2VudHJ5IGluc2lkZSBlYWNoIHN5bWJvbCBlbnRyeSBhcmUgdmFsaWQKKy8vICB0aGUgc2FtcGxlc19ieV9maWxlX2xvYyBtZW1iZXIgdmFyIGlzIGNvcnJlY3RseSBzZXR1cC4KK3ZvaWQgcHJvZmlsZV9jb250YWluZXI6OmFkZChwcm9maWxlX3QgY29uc3QgJiBwcm9maWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wX2JmZCBjb25zdCAmIGFiZmQsIHN0cmluZyBjb25zdCAmIGFwcF9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBwY2xhc3MpCit7CisJc3RyaW5nIGNvbnN0IGltYWdlX25hbWUgPSBhYmZkLmdldF9maWxlbmFtZSgpOworCW9wZF9oZWFkZXIgaGVhZGVyID0gcHJvZmlsZS5nZXRfaGVhZGVyKCk7CisKKwlmb3IgKHN5bWJvbF9pbmRleF90IGkgPSAwOyBpIDwgYWJmZC5zeW1zLnNpemUoKTsgKytpKSB7CisKKwkJdW5zaWduZWQgbG9uZyBsb25nIHN0YXJ0ID0gMCwgZW5kID0gMDsKKwkJc3ltYm9sX2VudHJ5IHN5bWJfZW50cnk7CisKKwkJYWJmZC5nZXRfc3ltYm9sX3JhbmdlKGksIHN0YXJ0LCBlbmQpOworCisJCXByb2ZpbGVfdDo6aXRlcmF0b3JfcGFpciBwX2l0ID0KKwkJCXByb2ZpbGUuc2FtcGxlc19yYW5nZShzdGFydCwgZW5kKTsKKwkJY291bnRfdHlwZSBjb3VudCA9IGFjY3VtdWxhdGUocF9pdC5maXJzdCwgcF9pdC5zZWNvbmQsIDB1bGwpOworCisJCS8vIHNraXAgZW50cmllcyB3aXRoIG5vIHNhbXBsZXMKKwkJaWYgKGNvdW50ID09IDApCisJCQljb250aW51ZTsKKworCQlzeW1iX2VudHJ5LnNhbXBsZS5jb3VudHNbcGNsYXNzXSA9IGNvdW50OworCQl0b3RhbF9jb3VudFtwY2xhc3NdICs9IGNvdW50OworCisJCXN5bWJfZW50cnkuc2l6ZSA9IGVuZCAtIHN0YXJ0OworCisJCXN5bWJfZW50cnkubmFtZSA9IHN5bWJvbF9uYW1lcy5jcmVhdGUoYWJmZC5zeW1zW2ldLm5hbWUoKSk7CisJCXN5bWJfZW50cnkuc3ltX2luZGV4ID0gaTsKKworCQlzeW1iX2VudHJ5LnNhbXBsZS5maWxlX2xvYy5saW5lbnIgPSAwOworCQlpZiAoZGVidWdfaW5mbykgeworCQkJc3RyaW5nIGZpbGVuYW1lOworCQkJaWYgKGFiZmQuZ2V0X2xpbmVucihpLCBzdGFydCwgZmlsZW5hbWUsCisJCQkJc3ltYl9lbnRyeS5zYW1wbGUuZmlsZV9sb2MubGluZW5yKSkgeworCQkJCXN5bWJfZW50cnkuc2FtcGxlLmZpbGVfbG9jLmZpbGVuYW1lID0KKwkJCQkJZGVidWdfbmFtZXMuY3JlYXRlKGZpbGVuYW1lKTsKKwkJCX0KKwkJfQorCisJCXN5bWJfZW50cnkuaW1hZ2VfbmFtZSA9IGltYWdlX25hbWVzLmNyZWF0ZShpbWFnZV9uYW1lKTsKKwkJc3ltYl9lbnRyeS5hcHBfbmFtZSA9IGltYWdlX25hbWVzLmNyZWF0ZShhcHBfbmFtZSk7CisKKwkJc3ltYl9lbnRyeS5zYW1wbGUudm1hID0gYWJmZC5zeW1zW2ldLnZtYSgpOworCQlpZiAoKGhlYWRlci5zcHVfcHJvZmlsZSA9PSBjZWxsX3NwdV9wcm9maWxlKSAmJgorCQkgICAgaGVhZGVyLmVtYmVkZGVkX29mZnNldCkgeworCQkJc3ltYl9lbnRyeS5zcHVfb2Zmc2V0ID0gaGVhZGVyLmVtYmVkZGVkX29mZnNldDsKKwkJCXN5bWJfZW50cnkuZW1iZWRkaW5nX2ZpbGVuYW1lID0KKwkJCQlpbWFnZV9uYW1lcy5jcmVhdGUoYWJmZC5nZXRfZW1iZWRkaW5nX2ZpbGVuYW1lKCkpOworCQl9IGVsc2UgeworCQkJc3ltYl9lbnRyeS5zcHVfb2Zmc2V0ID0gMDsKKwkJfQorCQlzeW1ib2xfZW50cnkgY29uc3QgKiBzeW1ib2wgPSBzeW1ib2xzLT5pbnNlcnQoc3ltYl9lbnRyeSk7CisKKwkJaWYgKG5lZWRfZGV0YWlscykKKwkJCWFkZF9zYW1wbGVzKGFiZmQsIGksIHBfaXQsIHN5bWJvbCwgcGNsYXNzLCBzdGFydCk7CisJfQorfQorCisKK3ZvaWQKK3Byb2ZpbGVfY29udGFpbmVyOjphZGRfc2FtcGxlcyhvcF9iZmQgY29uc3QgJiBhYmZkLCBzeW1ib2xfaW5kZXhfdCBzeW1faW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZmlsZV90OjppdGVyYXRvcl9wYWlyIGNvbnN0ICYgcF9pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1ib2xfZW50cnkgY29uc3QgKiBzeW1ib2wsIHNpemVfdCBwY2xhc3MsCisJCQkgICAgICAgdW5zaWduZWQgbG9uZyBzdGFydCkKK3sKKwliZmRfdm1hIGJhc2Vfdm1hID0gYWJmZC5zeW1zW3N5bV9pbmRleF0udm1hKCk7CisKKwlwcm9maWxlX3Q6OmNvbnN0X2l0ZXJhdG9yIGl0OworCWZvciAoaXQgPSBwX2l0LmZpcnN0OyBpdCAhPSBwX2l0LnNlY29uZCA7ICsraXQpIHsKKwkJc2FtcGxlX2VudHJ5IHNhbXBsZTsKKworCQlzYW1wbGUuY291bnRzW3BjbGFzc10gPSBpdC5jb3VudCgpOworCisJCXNhbXBsZS5maWxlX2xvYy5saW5lbnIgPSAwOworCQlpZiAoZGVidWdfaW5mbykgeworCQkJc3RyaW5nIGZpbGVuYW1lOworCQkJaWYgKGFiZmQuZ2V0X2xpbmVucihzeW1faW5kZXgsIGl0LnZtYSgpLCBmaWxlbmFtZSwKKwkJCQkJc2FtcGxlLmZpbGVfbG9jLmxpbmVucikpIHsKKwkJCQlzYW1wbGUuZmlsZV9sb2MuZmlsZW5hbWUgPQorCQkJCQlkZWJ1Z19uYW1lcy5jcmVhdGUoZmlsZW5hbWUpOworCQkJfQorCQl9CisKKwkJc2FtcGxlLnZtYSA9IChpdC52bWEoKSAtIHN0YXJ0KSArIGJhc2Vfdm1hOworCisJCXNhbXBsZXMtPmluc2VydChzeW1ib2wsIHNhbXBsZSk7CisJfQorfQorCisKK3N5bWJvbF9jb2xsZWN0aW9uIGNvbnN0Citwcm9maWxlX2NvbnRhaW5lcjo6c2VsZWN0X3N5bWJvbHMoc3ltYm9sX2Nob2ljZSAmIGNob2ljZSkgY29uc3QKK3sKKwlzeW1ib2xfY29sbGVjdGlvbiByZXN1bHQ7CisKKwlkb3VibGUgY29uc3QgdGhyZXNob2xkID0gY2hvaWNlLnRocmVzaG9sZCAvIDEwMC4wOworCisJc3ltYm9sX2NvbnRhaW5lcjo6c3ltYm9sc190OjppdGVyYXRvciBpdCA9IHN5bWJvbHMtPmJlZ2luKCk7CisJc3ltYm9sX2NvbnRhaW5lcjo6c3ltYm9sc190OjppdGVyYXRvciBjb25zdCBlbmQgPSBzeW1ib2xzLT5lbmQoKTsKKworCWZvciAoOyBpdCAhPSBlbmQ7ICsraXQpIHsKKwkJaWYgKGNob2ljZS5tYXRjaF9pbWFnZQorCQkgICAgJiYgKGltYWdlX25hbWVzLm5hbWUoaXQtPmltYWdlX25hbWUpICE9IGNob2ljZS5pbWFnZV9uYW1lKSkKKwkJCWNvbnRpbnVlOworCisJCWRvdWJsZSBjb25zdCBwZXJjZW50ID0KKwkJCW9wX3JhdGlvKGl0LT5zYW1wbGUuY291bnRzWzBdLCB0b3RhbF9jb3VudFswXSk7CisKKwkJaWYgKHBlcmNlbnQgPj0gdGhyZXNob2xkKSB7CisJCQlyZXN1bHQucHVzaF9iYWNrKCYqaXQpOworCisJCQljaG9pY2UuaGludHMgPSBpdC0+b3V0cHV0X2hpbnQoY2hvaWNlLmhpbnRzKTsKKwkJfQorCX0KKworCXJldHVybiByZXN1bHQ7Cit9CisKKwordmVjdG9yPGRlYnVnX25hbWVfaWQ+IGNvbnN0Citwcm9maWxlX2NvbnRhaW5lcjo6c2VsZWN0X2ZpbGVuYW1lKGRvdWJsZSB0aHJlc2hvbGQpIGNvbnN0Cit7CisJc2V0PGRlYnVnX25hbWVfaWQ+IGZpbGVuYW1lX3NldDsKKworCXRocmVzaG9sZCAvPSAxMDAuMDsKKworCS8vIFRyeWluZyB0byBpdGVyYXRlIG9uIHN5bWJvbHMgdG8gY3JlYXRlIHRoZSBzZXQgb2YgZmlsZW5hbWVzIHdoaWNoCisJLy8gY29udGFpbiBzYW1wbGUgZG9lcyBub3Qgd29yazogYSBzeW1ib2wgY2FuIGNvbnRhaW4gc2FtcGxlcyBhbmQgdGhpcworCS8vIHN5bWJvbCBpcyBpbiBhIHNvdXJjZSBmaWxlIHRoYXQgY29udGFpbiB6ZXJvIHNhbXBsZSBiZWNhdXNlIG9ubHkKKwkvLyBpbmxpbmUgZnVuY3Rpb24gaW4gdGhpcyBzb3VyY2UgZmlsZSBjb250YWlucyBzYW1wbGVzLgorCXNhbXBsZV9jb250YWluZXI6OnNhbXBsZXNfaXRlcmF0b3Igc2l0ID0gc2FtcGxlcy0+YmVnaW4oKTsKKwlzYW1wbGVfY29udGFpbmVyOjpzYW1wbGVzX2l0ZXJhdG9yIGNvbnN0IHNlbmQgPSBzYW1wbGVzLT5lbmQoKTsKKworCWZvciAoOyBzaXQgIT0gc2VuZDsgKytzaXQpIHsKKwkJZGVidWdfbmFtZV9pZCBuYW1lX2lkID0gc2l0LT5zZWNvbmQuZmlsZV9sb2MuZmlsZW5hbWU7CisJCWlmIChuYW1lX2lkLnNldCgpKQorCQkJZmlsZW5hbWVfc2V0Lmluc2VydChuYW1lX2lkKTsKKwl9CisKKwkvLyBHaXZlIGEgc29ydCBvcmRlciBvbiBmaWxlbmFtZSBmb3IgdGhlIHNlbGVjdGVkIHBjbGFzcy4KKwl2ZWN0b3I8ZmlsZW5hbWVfYnlfc2FtcGxlcz4gZmlsZV9ieV9zYW1wbGVzOworCisJc2V0PGRlYnVnX25hbWVfaWQ+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGZpbGVuYW1lX3NldC5iZWdpbigpOworCXNldDxkZWJ1Z19uYW1lX2lkPjo6Y29uc3RfaXRlcmF0b3IgY29uc3QgZW5kID0gZmlsZW5hbWVfc2V0LmVuZCgpOworCWZvciAoOyBpdCAhPSBlbmQ7ICsraXQpIHsKKwkJLy8gRklYTUU6IGlzIHNhbXBsZXNfY291bnQoKSB0aGUgcmlnaHQgaW50ZXJmYWNlIG5vdyA/CisJCWNvdW50X2FycmF5X3QgY291bnRzID0gc2FtcGxlc19jb3VudCgqaXQpOworCisJCWRvdWJsZSBjb25zdCByYXRpbyA9IG9wX3JhdGlvKGNvdW50c1swXSwgdG90YWxfY291bnRbMF0pOworCQlmaWxlbmFtZV9ieV9zYW1wbGVzIGNvbnN0IGYoKml0LCByYXRpbyk7CisKKwkJZmlsZV9ieV9zYW1wbGVzLnB1c2hfYmFjayhmKTsKKwl9CisKKwkvLyBub3cgc29ydCB0aGUgZmlsZV9ieV9zYW1wbGVzIGVudHJ5LgorCXNvcnQoZmlsZV9ieV9zYW1wbGVzLmJlZ2luKCksIGZpbGVfYnlfc2FtcGxlcy5lbmQoKSk7CisKKwkvLyAyLjkxLjY2IGRvZXNuJ3QgbGlrZSBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIGluIHRoaXMgY29udGV4dAorCXZlY3RvcjxmaWxlbmFtZV9ieV9zYW1wbGVzPjo6cmV2ZXJzZV9pdGVyYXRvciBjaXQKKwkJPSBmaWxlX2J5X3NhbXBsZXMucmJlZ2luKCk7CisJdmVjdG9yPGZpbGVuYW1lX2J5X3NhbXBsZXM+OjpyZXZlcnNlX2l0ZXJhdG9yIGNvbnN0IGNlbmQKKwkJPSBmaWxlX2J5X3NhbXBsZXMucmVuZCgpOworCisJdmVjdG9yPGRlYnVnX25hbWVfaWQ+IHJlc3VsdDsKKwlmb3IgKDsgY2l0ICE9IGNlbmQ7ICsrY2l0KSB7CisJCWlmIChjaXQtPnBlcmNlbnQgPj0gdGhyZXNob2xkKQorCQkJcmVzdWx0LnB1c2hfYmFjayhjaXQtPmZpbGVuYW1lKTsKKwl9CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisKK2NvdW50X2FycmF5X3QgcHJvZmlsZV9jb250YWluZXI6OnNhbXBsZXNfY291bnQoKSBjb25zdAoreworCXJldHVybiB0b3RhbF9jb3VudDsKK30KKworCisvLyBSZXN0IGhlcmUgYXJlIGRlbGVnYXRlZCB0byBvdXIgcHJpdmF0ZSBpbXBsZW1lbnRhdGlvbi4KKworc3ltYm9sX2VudHJ5IGNvbnN0ICoKK3Byb2ZpbGVfY29udGFpbmVyOjpmaW5kX3N5bWJvbChzdHJpbmcgY29uc3QgJiBpbWFnZV9uYW1lLCBiZmRfdm1hIHZtYSkgY29uc3QKK3sKKwlyZXR1cm4gc3ltYm9scy0+ZmluZF9ieV92bWEoaW1hZ2VfbmFtZSwgdm1hKTsKK30KKworCitzeW1ib2xfY29sbGVjdGlvbiBjb25zdAorcHJvZmlsZV9jb250YWluZXI6OmZpbmRfc3ltYm9sKGRlYnVnX25hbWVfaWQgZmlsZW5hbWUsIHNpemVfdCBsaW5lbnIpIGNvbnN0Cit7CisJcmV0dXJuIHN5bWJvbHMtPmZpbmQoZmlsZW5hbWUsIGxpbmVucik7Cit9CisKKworc3ltYm9sX2NvbGxlY3Rpb24gY29uc3QKK3Byb2ZpbGVfY29udGFpbmVyOjpzZWxlY3Rfc3ltYm9scyhkZWJ1Z19uYW1lX2lkIGZpbGVuYW1lKSBjb25zdAoreworCXJldHVybiBzeW1ib2xzLT5maW5kKGZpbGVuYW1lKTsKK30KKworc2FtcGxlX2VudHJ5IGNvbnN0ICoKK3Byb2ZpbGVfY29udGFpbmVyOjpmaW5kX3NhbXBsZShzeW1ib2xfZW50cnkgY29uc3QgKiBzeW1ib2wsIGJmZF92bWEgdm1hKSBjb25zdAoreworCXJldHVybiBzYW1wbGVzLT5maW5kX2J5X3ZtYShzeW1ib2wsIHZtYSk7Cit9CisKKworY291bnRfYXJyYXlfdCBwcm9maWxlX2NvbnRhaW5lcjo6c2FtcGxlc19jb3VudChkZWJ1Z19uYW1lX2lkIGZpbGVuYW1lX2lkKSBjb25zdAoreworCXJldHVybiBzYW1wbGVzLT5hY2N1bXVsYXRlX3NhbXBsZXMoZmlsZW5hbWVfaWQpOworfQorCisKK2NvdW50X2FycmF5X3QgcHJvZmlsZV9jb250YWluZXI6OnNhbXBsZXNfY291bnQoZGVidWdfbmFtZV9pZCBmaWxlbmFtZSwKKwkJCQkgICAgc2l6ZV90IGxpbmVucikgY29uc3QKK3sKKwlyZXR1cm4gc2FtcGxlcy0+YWNjdW11bGF0ZV9zYW1wbGVzKGZpbGVuYW1lLCBsaW5lbnIpOworfQorCisKK3NhbXBsZV9jb250YWluZXI6OnNhbXBsZXNfaXRlcmF0b3IKK3Byb2ZpbGVfY29udGFpbmVyOjpiZWdpbihzeW1ib2xfZW50cnkgY29uc3QgKiBzeW1ib2wpIGNvbnN0Cit7CisJcmV0dXJuIHNhbXBsZXMtPmJlZ2luKHN5bWJvbCk7Cit9CisKKworc2FtcGxlX2NvbnRhaW5lcjo6c2FtcGxlc19pdGVyYXRvcgorcHJvZmlsZV9jb250YWluZXI6OmVuZChzeW1ib2xfZW50cnkgY29uc3QgKiBzeW1ib2wpIGNvbnN0Cit7CisJcmV0dXJuIHNhbXBsZXMtPmVuZChzeW1ib2wpOworfQorCisKK3NhbXBsZV9jb250YWluZXI6OnNhbXBsZXNfaXRlcmF0b3IgcHJvZmlsZV9jb250YWluZXI6OmJlZ2luKCkgY29uc3QKK3sKKwlyZXR1cm4gc2FtcGxlcy0+YmVnaW4oKTsKK30KKworCitzYW1wbGVfY29udGFpbmVyOjpzYW1wbGVzX2l0ZXJhdG9yIHByb2ZpbGVfY29udGFpbmVyOjplbmQoKSBjb25zdAoreworCXJldHVybiBzYW1wbGVzLT5lbmQoKTsKK30KKworc3ltYm9sX2VudHJ5IGNvbnN0ICogcHJvZmlsZV9jb250YWluZXI6OmZpbmQoc3ltYm9sX2VudHJ5IGNvbnN0ICYgc3ltYm9sKSBjb25zdAoreworCXJldHVybiBzeW1ib2xzLT5maW5kKHN5bWJvbCk7Cit9CisKK3N5bWJvbF9jb250YWluZXI6OnN5bWJvbHNfdDo6aXRlcmF0b3IgcHJvZmlsZV9jb250YWluZXI6OmJlZ2luX3N5bWJvbCgpIGNvbnN0Cit7CisJcmV0dXJuIHN5bWJvbHMtPmJlZ2luKCk7Cit9CisKK3N5bWJvbF9jb250YWluZXI6OnN5bWJvbHNfdDo6aXRlcmF0b3IgcHJvZmlsZV9jb250YWluZXI6OmVuZF9zeW1ib2woKSBjb25zdAoreworCXJldHVybiBzeW1ib2xzLT5lbmQoKTsKK30KZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2xpYnBwL3Byb2ZpbGVfY29udGFpbmVyLmggYi9vcHJvZmlsZS0wLjkuNy9saWJwcC9wcm9maWxlX2NvbnRhaW5lci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyMmY1ZDMKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9saWJwcC9wcm9maWxlX2NvbnRhaW5lci5oCkBAIC0wLDAgKzEsMTg4IEBACisvKioKKyAqIEBmaWxlIHByb2ZpbGVfY29udGFpbmVyLmgKKyAqIENvbnRhaW5lciBhc3NvY2lhdGluZyBzeW1ib2xzIGFuZCBzYW1wbGVzCisgKgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMiwgMjAwMyBPUHJvZmlsZSBhdXRob3JzCisgKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORworICoKKyAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQorICogQGF1dGhvciBKb2huIExldm9uCisgKi8KKworI2lmbmRlZiBQUk9GSUxFX0NPTlRBSU5FUl9ICisjZGVmaW5lIFBST0ZJTEVfQ09OVEFJTkVSX0gKKworI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDx2ZWN0b3I+CisKKyNpbmNsdWRlICJwcm9maWxlLmgiCisjaW5jbHVkZSAidXRpbGl0eS5oIgorI2luY2x1ZGUgIm9wX2JmZC5oIgorI2luY2x1ZGUgInNhbXBsZV9jb250YWluZXIuaCIKKyNpbmNsdWRlICJzeW1ib2xfY29udGFpbmVyLmgiCisjaW5jbHVkZSAiZm9ybWF0X2ZsYWdzLmgiCisjaW5jbHVkZSAibG9jYXRlX2ltYWdlcy5oIgorCitjbGFzcyBzdHJpbmdfZmlsdGVyOworY2xhc3Mgc3ltYm9sX2VudHJ5OworY2xhc3Mgc2FtcGxlX2VudHJ5OworCisvKioKKyAqIFN0b3JlIG11bHRpcGxlIHNhbXBsZXMgZmlsZXMgYmVsb25naW5nIHRvIHRoZSBzYW1lIHByb2ZpbGluZyBzZXNzaW9uLgorICogVGhpcyBpcyB0aGUgbWFpbiBjb250YWluZXIgY2FwYWJsZSBvZiBob2xkaW5nIHRoZSBwcm9maWxlcyBmb3IgYXJiaXRyYXJ5CisgKiBiaW5hcnkgaW1hZ2VzIGFuZCBhcmJpdHJhcnkgcHJvZmlsZSBjbGFzc2VzLgorICovCitjbGFzcyBwcm9maWxlX2NvbnRhaW5lciA6IG5vbmNvcHlhYmxlIHsKK3B1YmxpYzoKKwkvKioKKwkgKiBCdWlsZCBhbiBvYmplY3QgdG8gc3RvcmUgaW5mb3JtYXRpb24gb24gc2FtcGxlcy4gQWxsIHBhcmFtZXRlcnMKKwkgKiBhY3RzIGFzIGhpbnQgZm9yIHdoYXQgeW91IHdpbGwgcmVxdWVzdCBhZnRlciByZWNvcmRpbmcgc2FtcGxlcyBhbmQKKwkgKiBzbyBhbGxvdyBvcHRpbWl6YXRpb25zIGR1cmluZyByZWNvcmRpbmcgdGhlIGluZm9ybWF0aW9uLgorCSAqCisJICogQHBhcmFtIGRlYnVnX2luZm8gSWYgdHJ1ZSBsaW5lIG51bWJlcnMgYW5kIHNvdXJjZSBmaWxlcyBhcmUKKwkgKiByZWNvcmRlZC4KKwkgKiBAcGFyYW0gbmVlZF9kZXRhaWxzIElmIHRydWUgaWYgd2UgbmVlZCB0byByZWNvcmQgYWxsIHNhbXBsZXMgb3IgdG8KKwkgKiB0byByZWNvcmQgdGhlbSBhdCBzeW1ib2wgbGV2ZWwuCisJICogQHBhcmFtIGV4dHJhIGV4dHJhIGltYWdlcyBsb2NhdGlvbgorCSAqLworCXByb2ZpbGVfY29udGFpbmVyKGJvb2wgZGVidWdfaW5mbywgYm9vbCBuZWVkX2RldGFpbHMsCisJCQkgIGV4dHJhX2ltYWdlcyBjb25zdCAmIGV4dHJhKTsKKworCX5wcm9maWxlX2NvbnRhaW5lcigpOworIAorCS8qKgorCSAqIGFkZCgpIC0gcmVjb3JkIHN5bWJvbHMvc2FtcGxlcyBpbiB0aGUgdW5kZXJseWluZyBjb250YWluZXIKKwkgKgorCSAqIEBwYXJhbSBwcm9maWxlIHRoZSBzYW1wbGVzIGZpbGVzIGNvbnRhaW5lcgorCSAqIEBwYXJhbSBhYmZkIHRoZSBhc3NvY2lhdGVkIGJmZCBvYmplY3QKKwkgKiBAcGFyYW0gYXBwX25hbWUgdGhlIG93bmluZyBhcHBsaWNhdGlvbiBuYW1lIG9mIHNhbXBsZQorCSAqIEBwYXJhbSBwY2xhc3MgdGhlIHByb2ZpbGUgY2xhc3MgdG8gYWRkIHJlc3VsdHMgZm9yCisJICoKKwkgKiBhZGQoKSBpcyBhbiBoZWxwZXIgZm9yIGRlbGF5ZWQgY3Rvci4gVGFrZSBjYXJlIHlvdSBjYW4ndCBzYWZlbHkKKwkgKiBtYWtlIGFueSBjYWxsIHRvIGFkZCBhZnRlciBhbnkgb3RoZXIgbWVtYmVyIGZ1bmN0aW9uIGNhbGwuCisJICogT2J2aW91c2x5IHlvdSBjYW4gYWRkIG9ubHkgc2FtcGxlcyBmaWxlcyB3aGljaCBhcmUgY29oZXJlbnQgKHNhbWUKKwkgKiBzYW1wbGluZyByYXRlLCBzYW1lIGV2ZW50cyBldGMuKQorCSAqLworCXZvaWQgYWRkKHByb2ZpbGVfdCBjb25zdCAmIHByb2ZpbGUsIG9wX2JmZCBjb25zdCAmIGFiZmQsCisJCSBzdGQ6OnN0cmluZyBjb25zdCAmIGFwcF9uYW1lLCBzaXplX3QgcGNsYXNzKTsKKworCS8vLyBGaW5kIGEgc3ltYm9sIGZyb20gaXRzIGltYWdlX25hbWUsIHZtYSwgcmV0dXJuIHplcm8gaWYgbm8gc3ltYm9sCisJLy8vIGZvciB0aGlzIGltYWdlIGF0IHRoaXMgdm1hCisJc3ltYm9sX2VudHJ5IGNvbnN0ICogZmluZF9zeW1ib2woc3RkOjpzdHJpbmcgY29uc3QgJiBpbWFnZV9uYW1lLAorCQkJCQkgYmZkX3ZtYSB2bWEpIGNvbnN0OworCisJLy8vIEZpbmQgdGhlIHN5bWJvbHMgZnJvbSBpdHMgZmlsZW5hbWUsIGxpbmVuciwgcmV0dXJuIGFuIGVtcHR5CisJLy8vIHN5bWJvbF9jb2xsZWN0aW9uIGlmIG5vIHN5bWJvbCBhdCB0aGlzIGxvY2F0aW9uCisJc3ltYm9sX2NvbGxlY3Rpb24gY29uc3QgZmluZF9zeW1ib2woZGVidWdfbmFtZV9pZCBmaWxlbmFtZSwKKwkJCQkJc2l6ZV90IGxpbmVucikgY29uc3Q7CisKKwkvLy8gRmluZCBhIHNhbXBsZSBieSBpdHMgc3ltYm9sLCB2bWEsIHJldHVybiB6ZXJvIGlmIHRoZXJlIGlzIG5vIHNhbXBsZQorCS8vLyBhdCB0aGlzIHZtYQorCXNhbXBsZV9lbnRyeSBjb25zdCAqIGZpbmRfc2FtcGxlKHN5bWJvbF9lbnRyeSBjb25zdCAqIHN5bWJvbCwKKwkJCQkJIGJmZF92bWEgdm1hKSBjb25zdDsKKworCS8vLyBGaW5kIGEgc3ltYm9sLiBSZXR1cm4gTlVMTCBpZiBub3QgZm91bmQuCisJc3ltYm9sX2VudHJ5IGNvbnN0ICogZmluZChzeW1ib2xfZW50cnkgY29uc3QgJiBzeW1ib2wpIGNvbnN0OworCisJLy8vIHVzZWQgZm9yIHNlbGVjdF9zeW1ib2xzKCkKKwlzdHJ1Y3Qgc3ltYm9sX2Nob2ljZSB7CisJCXN5bWJvbF9jaG9pY2UoKQorCQkJOiBoaW50cyhjZl9ub25lKSwgdGhyZXNob2xkKDAuMCksIG1hdGNoX2ltYWdlKGZhbHNlKSB7fQorCisJCS8vLyBoaW50cyBmaWxsZWQgaW4KKwkJY29sdW1uX2ZsYWdzIGhpbnRzOworCQkvLy8gcGVyY2VudGFnZSB0aHJlc2hvbGQKKwkJZG91YmxlIHRocmVzaG9sZDsKKwkJLy8vIG1hdGNoIHRoZSBpbWFnZSBuYW1lIG9ubHkKKwkJYm9vbCBtYXRjaF9pbWFnZTsKKwkJLy8vIG93bmluZyBpbWFnZSBuYW1lCisJCXN0ZDo6c3RyaW5nIGltYWdlX25hbWU7CisJfTsKKworCS8qKgorCSAqIHNlbGVjdF9zeW1ib2xzIC0gY3JlYXRlIGEgc2V0IG9mIHN5bWJvbHMgc29ydGVkIGJ5IHNhbXBsZSBjb3VudAorCSAqIEBwYXJhbSBjaG9pY2UgIHBhcmFtZXRlcnMgdG8gdXNlL2ZpbGwgaW4gd2hlbiBzZWxlY3RpbmcKKwkgKi8KKwlzeW1ib2xfY29sbGVjdGlvbiBjb25zdCBzZWxlY3Rfc3ltYm9scyhzeW1ib2xfY2hvaWNlICYgY2hvaWNlKSBjb25zdDsKKworCS8qKgorCSAqIHNlbGVjdF9zeW1ib2xzIC0gY3JlYXRlIGEgc2V0IG9mIHN5bWJvbHMgYmVsb25naW5nIHRvIGEgZ2l2ZW4gc291cmNlCisJICogQHBhcmFtIGZpbGVuYW1lICBzb3VyY2UgZmlsZSB3aGVyZSBhcmUgZGVmaW5lZCB0aGUgcmV0dXJuZWQgc3ltYm9scworCSAqLworCXN5bWJvbF9jb2xsZWN0aW9uIGNvbnN0IHNlbGVjdF9zeW1ib2xzKGRlYnVnX25hbWVfaWQgZmlsZW5hbWUpIGNvbnN0OworCisJLy8vIExpa2Ugc2VsZWN0X3N5bWJvbHMgZm9yIGZpbGVuYW1lIHdpdGhvdXQgYWxsb3dpbmcgc29ydCBieSB2bWEuCisJc3RkOjp2ZWN0b3I8ZGVidWdfbmFtZV9pZD4gY29uc3Qgc2VsZWN0X2ZpbGVuYW1lKGRvdWJsZSB0aHJlc2hvbGQpIGNvbnN0OworCisJLy8vIHJldHVybiB0aGUgdG90YWwgbnVtYmVyIG9mIHNhbXBsZXMKKwljb3VudF9hcnJheV90IHNhbXBsZXNfY291bnQoKSBjb25zdDsKKworCS8vLyBHZXQgdGhlIHNhbXBsZXMgY291bnQgd2hpY2ggYmVsb25ncyB0byBmaWxlbmFtZS4gUmV0dXJuIDAgaWYKKwkvLy8gbm8gc2FtcGxlcyBmb3VuZC4KKwljb3VudF9hcnJheV90IHNhbXBsZXNfY291bnQoZGVidWdfbmFtZV9pZCBmaWxlbmFtZV9pZCkgY29uc3Q7CisJLy8vIEdldCB0aGUgc2FtcGxlcyBjb3VudCB3aGljaCBiZWxvbmdzIHRvIGZpbGVuYW1lLCBsaW5lbnIuIFJldHVybgorCS8vLyAwIGlmIG5vIHNhbXBsZXMgZm91bmQuCisJY291bnRfYXJyYXlfdCBzYW1wbGVzX2NvdW50KGRlYnVnX25hbWVfaWQgZmlsZW5hbWUsCisJCQkgICBzaXplX3QgbGluZW5yKSBjb25zdDsKKworCS8vLyByZXR1cm4gYW4gaXRlcmF0b3IgdG8gdGhlIGZpcnN0IHN5bWJvbAorCXN5bWJvbF9jb250YWluZXI6OnN5bWJvbHNfdDo6aXRlcmF0b3IgYmVnaW5fc3ltYm9sKCkgY29uc3Q7CisJLy8vIHJldHVybiBhbiBpdGVyYXRvciB0byB0aGUgbGFzdCBzeW1ib2wKKwlzeW1ib2xfY29udGFpbmVyOjpzeW1ib2xzX3Q6Oml0ZXJhdG9yIGVuZF9zeW1ib2woKSBjb25zdDsKKworCS8vLyByZXR1cm4gaXRlcmF0b3IgdG8gdGhlIGZpcnN0IHNhbXBsZXMKKwlzYW1wbGVfY29udGFpbmVyOjpzYW1wbGVzX2l0ZXJhdG9yIGJlZ2luKCkgY29uc3Q7CisJLy8vIHJldHVybiBpdGVyYXRvciB0byB0aGUgbGFzdCBzYW1wbGVzCisJc2FtcGxlX2NvbnRhaW5lcjo6c2FtcGxlc19pdGVyYXRvciBlbmQoKSBjb25zdDsKKworCS8vLyByZXR1cm4gaXRlcmF0b3IgdG8gdGhlIGZpcnN0IHNhbXBsZXMgZm9yIHRoaXMgc3ltYm9sCisJc2FtcGxlX2NvbnRhaW5lcjo6c2FtcGxlc19pdGVyYXRvciBiZWdpbihzeW1ib2xfZW50cnkgY29uc3QgKikgY29uc3Q7CisJLy8vIHJldHVybiBpdGVyYXRvciB0byB0aGUgbGFzdCBzYW1wbGVzIGZvciB0aGlzIHN5bWJvbAorCXNhbXBsZV9jb250YWluZXI6OnNhbXBsZXNfaXRlcmF0b3IgZW5kKHN5bWJvbF9lbnRyeSBjb25zdCAqKSBjb25zdDsKKworcHJpdmF0ZToKKwkvLy8gaGVscGVyIGZvciBhZGQoKQorCXZvaWQgYWRkX3NhbXBsZXMob3BfYmZkIGNvbnN0ICYgYWJmZCwgc3ltYm9sX2luZGV4X3Qgc3ltX2luZGV4LAorCSAgICAgICAgICAgICAgICAgcHJvZmlsZV90OjppdGVyYXRvcl9wYWlyIGNvbnN0ICYsCisJICAgICAgICAgICAgICAgICBzeW1ib2xfZW50cnkgY29uc3QgKiBzeW1ib2wsIHNpemVfdCBwY2xhc3MsCisJCQkgdW5zaWduZWQgbG9uZyBzdGFydCk7CisKKwkvKioKKwkgKiBjcmVhdGUgYW4gdW5pcXVlIGFydGlmaWNpYWwgc3ltYm9sIGZvciBhbiBvZmZzZXQgcmFuZ2UuIFRoZSByYW5nZQorCSAqIGlzIG9ubHkgYSBoaW50IG9mIHRoZSBtYXhpbXVtIHNpemUgb2YgdGhlIGNyZWF0ZWQgc3ltYm9sLiBXZQorCSAqIGdpdmUgdG8gdGhlIHN5bWJvbCBhbiB1bmlxdWUgbmFtZSBhcyA/aW1hZ2VfZmlsZV9uYW1lI29yZGVyIGFuZAorCSAqIGEgcmFuZ2UgdXAgdG8gdGhlIG5lYXJlc3Qgb2Ygc3ltcyBvciBmb3IgdGhlIHdob2xlIHJhbmdlIGlmIG5vCisJICogc3ltcyBleGlzdCBhZnRlciB0aGUgc3RhcnQgb2Zmc2V0LiB0aGUgZW5kIHBhcmFtZXRlciBpcyB1cGRhdGVkCisJICogdG8gcmVmbGVjdCB0aGUgc3ltYm9sIHJhbmdlLgorCSAqCisJICogVGhlIHJhdGlvbmFsZSBoZXJlIGlzIHRvIHRyeSB0byBjcmVhdGUgc3ltYm9scyBmb3IgYWxpZ25tZW50IGJldHdlZW4KKwkgKiBmdW5jdGlvbiBhcyBsaXR0bGUgYXMgcG9zc2libGUgYW5kIHRvIGNyZWF0ZSBtZWFuaW5nZnVsbCBzeW1ib2xzCisJICogZm9yIHNwZWNpYWwgY2FzZSBzdWNoIGltYWdlIHcvbyBzeW1ib2wuCisJICovCisJc3RkOjpzdHJpbmcgY3JlYXRlX2FydGlmaWNpYWxfc3ltYm9sKG9wX2JmZCBjb25zdCAmIGFiZmQsIHUzMiBzdGFydCwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTMyICYgZW5kLCBzaXplX3QgJiBvcmRlcik7CisKKwkvLy8gVGhlIHN5bWJvbHMgY29sbGVjdGVkIGJ5IHBwIHRvb2xzIHNvcnRlZCBieSBpbmNyZWFzZWQgdm1hLCBwcm92aWRlCisJLy8vIGFsc28gYSBzb3J0IG9yZGVyIG9uIHNhbXBsZXMgY291bnQgZm9yIGVhY2ggcHJvZmlsZSBjbGFzcworCXNjb3BlZF9wdHI8c3ltYm9sX2NvbnRhaW5lcj4gc3ltYm9sczsKKwkvLy8gVGhlIHNhbXBsZXMgY291bnQgY29sbGVjdGVkIGJ5IHBwIHRvb2xzIHNvcnRlZCBieSBpbmNyZWFzZWQgdm1hLAorCS8vLyBwcm92aWRlIGFsc28gYSBzb3J0IG9yZGVyIG9uIChmaWxlbmFtZSwgbGluZW5yKQorCXNjb3BlZF9wdHI8c2FtcGxlX2NvbnRhaW5lcj4gc2FtcGxlczsKKwkvLy8gYnVpbGQoKSBtdXN0IGNvdW50IHNhbXBsZXMgY291bnQgZm9yIGVhY2ggcHJvZmlsZSBjbGFzcyBzbyBjYWNoZSBpdAorCS8vLyBoZXJlIHNpbmNlIHVzZXIgb2YgcHJvZmlsZV9jb250YWluZXIgb2Z0ZW4gbmVlZCBpdCBsYXRlci4KKwljb3VudF9hcnJheV90IHRvdGFsX2NvdW50OworCisJLyoqCisJICogT3B0aW1pemF0aW9uIGhpbnRzIGZvciB3aGF0IGluZm9ybWF0aW9uIHdlIGFyZSBnb2luZyB0byBuZWVkLAorCSAqIHNlZSB0aGUgZXhwbGFuYXRpb24gaW4gcHJvZmlsZV9jb250YWluZXIoKQkKKwkgKi8KKwkvL0B7CisJYm9vbCBkZWJ1Z19pbmZvOworCWJvb2wgbmVlZF9kZXRhaWxzOworCS8vQH0KKworcHVibGljOiAvLyBGSVhNRQorCWV4dHJhX2ltYWdlcyBleHRyYV9mb3VuZF9pbWFnZXM7Cit9OworCisjZW5kaWYgLyogIVBST0ZJTEVfQ09OVEFJTkVSX0ggKi8KZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2xpYnBwL3Byb2ZpbGVfc3BlYy5jcHAgYi9vcHJvZmlsZS0wLjkuNy9saWJwcC9wcm9maWxlX3NwZWMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhNzdhNzQKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9saWJwcC9wcm9maWxlX3NwZWMuY3BwCkBAIC0wLDAgKzEsNTczIEBACisvKioKKyAqIEBmaWxlIHByb2ZpbGVfc3BlYy5jcHAKKyAqIENvbnRhaW5zIGEgUFAgcHJvZmlsZSBzcGVjaWZpY2F0aW9uCisgKgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMyBPUHJvZmlsZSBhdXRob3JzCisgKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORworICoKKyAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQorICovCisKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8c2V0PgorI2luY2x1ZGUgPHNzdHJlYW0+CisjaW5jbHVkZSA8aXRlcmF0b3I+CisjaW5jbHVkZSA8aW9zdHJlYW0+CisjaW5jbHVkZSA8ZGlyZW50Lmg+CisKKyNpbmNsdWRlICJmaWxlX21hbmlwLmgiCisjaW5jbHVkZSAib3BfY29uZmlnLmgiCisjaW5jbHVkZSAicHJvZmlsZV9zcGVjLmgiCisjaW5jbHVkZSAic3RyaW5nX21hbmlwLmgiCisjaW5jbHVkZSAiZ2xvYl9maWx0ZXIuaCIKKyNpbmNsdWRlICJsb2NhdGVfaW1hZ2VzLmgiCisjaW5jbHVkZSAib3BfZXhjZXB0aW9uLmgiCisjaW5jbHVkZSAib3BfaGVhZGVyLmgiCisjaW5jbHVkZSAib3BfZmlsZWlvLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisKK25hbWVzcGFjZSB7CisKKy8vIFBQOjMuNywgZnVsbCBwYXRoLCBvciByZWxhdGl2ZSBwYXRoLiBJZiB3ZSBjYW4ndCBmaW5kIGl0LAorLy8gd2Ugc2hvdWxkIG1haW50YWluIHRoZSBvcmlnaW5hbCB0byBtYWludGFpbiB0aGUgd29yZGV4cCBldGMuCitzdHJpbmcgY29uc3QgZml4dXBfaW1hZ2Vfc3BlYyhzdHJpbmcgY29uc3QgJiBzdHIsIGV4dHJhX2ltYWdlcyBjb25zdCAmIGV4dHJhKQoreworCS8vIE9uIGVycm9yIGZpbmRfaW1hZ2VfcGF0aCgpIHJldHVybiBzdHIsIHNvIGlmIGFuIG9jY3VyIHdlIHdpbGwKKwkvLyB1c2UgdGhlIHByb3ZpZGVkIGltYWdlX25hbWUgbm90IHRoZSBmaXhlZCBvbmUuCisJaW1hZ2VfZXJyb3IgZXJyb3I7CisJcmV0dXJuIGV4dHJhLmZpbmRfaW1hZ2VfcGF0aChzdHIsIGVycm9yLCB0cnVlKTsKK30KKwordm9pZCBmaXh1cF9pbWFnZV9zcGVjKHZlY3RvcjxzdHJpbmc+ICYgaW1hZ2VzLCBleHRyYV9pbWFnZXMgY29uc3QgJiBleHRyYSkKK3sKKwl2ZWN0b3I8c3RyaW5nPjo6aXRlcmF0b3IgaXQgPSBpbWFnZXMuYmVnaW4oKTsKKwl2ZWN0b3I8c3RyaW5nPjo6aXRlcmF0b3IgY29uc3QgZW5kID0gaW1hZ2VzLmVuZCgpOworCisJZm9yICg7IGl0ICE9IGVuZDsgKytpdCkKKwkJKml0ID0gZml4dXBfaW1hZ2Vfc3BlYygqaXQsIGV4dHJhKTsKK30KKworfSAgLy8gYW5vbiBuYW1lc3BhY2UKKworCitwcm9maWxlX3NwZWM6OnByb2ZpbGVfc3BlYygpCisJOgorCWV4dHJhX2ZvdW5kX2ltYWdlcygpCit7CisJcGFyc2VfdGFibGVbImFyY2hpdmUiXSA9ICZwcm9maWxlX3NwZWM6OnBhcnNlX2FyY2hpdmVfcGF0aDsKKwlwYXJzZV90YWJsZVsic2Vzc2lvbiJdID0gJnByb2ZpbGVfc3BlYzo6cGFyc2Vfc2Vzc2lvbjsKKwlwYXJzZV90YWJsZVsic2Vzc2lvbi1leGNsdWRlIl0gPQorCQkmcHJvZmlsZV9zcGVjOjpwYXJzZV9zZXNzaW9uX2V4Y2x1ZGU7CisJcGFyc2VfdGFibGVbImltYWdlIl0gPSAmcHJvZmlsZV9zcGVjOjpwYXJzZV9pbWFnZTsKKwlwYXJzZV90YWJsZVsiaW1hZ2UtZXhjbHVkZSJdID0gJnByb2ZpbGVfc3BlYzo6cGFyc2VfaW1hZ2VfZXhjbHVkZTsKKwlwYXJzZV90YWJsZVsibGliLWltYWdlIl0gPSAmcHJvZmlsZV9zcGVjOjpwYXJzZV9saWJfaW1hZ2U7CisJcGFyc2VfdGFibGVbImV2ZW50Il0gPSAmcHJvZmlsZV9zcGVjOjpwYXJzZV9ldmVudDsKKwlwYXJzZV90YWJsZVsiY291bnQiXSA9ICZwcm9maWxlX3NwZWM6OnBhcnNlX2NvdW50OworCXBhcnNlX3RhYmxlWyJ1bml0LW1hc2siXSA9ICZwcm9maWxlX3NwZWM6OnBhcnNlX3VuaXRtYXNrOworCXBhcnNlX3RhYmxlWyJ0aWQiXSA9ICZwcm9maWxlX3NwZWM6OnBhcnNlX3RpZDsKKwlwYXJzZV90YWJsZVsidGdpZCJdID0gJnByb2ZpbGVfc3BlYzo6cGFyc2VfdGdpZDsKKwlwYXJzZV90YWJsZVsiY3B1Il0gPSAmcHJvZmlsZV9zcGVjOjpwYXJzZV9jcHU7Cit9CisKKwordm9pZCBwcm9maWxlX3NwZWM6OnBhcnNlKHN0cmluZyBjb25zdCAmIHRhZ192YWx1ZSkKK3sKKwlzdHJpbmcgdmFsdWU7CisJYWN0aW9uX3QgYWN0aW9uID0gZ2V0X2hhbmRsZXIodGFnX3ZhbHVlLCB2YWx1ZSk7CisJaWYgKCFhY3Rpb24pIHsKKwkJdGhyb3cgaW52YWxpZF9hcmd1bWVudCgicHJvZmlsZV9zcGVjOjpwYXJzZSgpOiBub3QgIgorCQkJCSAgICAgICAiYSB2YWxpZCB0YWcgXCIiICsgdGFnX3ZhbHVlICsgIlwiIik7CisJfQorCisJKHRoaXMtPiphY3Rpb24pKHZhbHVlKTsKK30KKworCitib29sIHByb2ZpbGVfc3BlYzo6aXNfdmFsaWRfdGFnKHN0cmluZyBjb25zdCAmIHRhZ192YWx1ZSkKK3sKKwlzdHJpbmcgdmFsdWU7CisJcmV0dXJuIGdldF9oYW5kbGVyKHRhZ192YWx1ZSwgdmFsdWUpOworfQorCisKK3ZvaWQgcHJvZmlsZV9zcGVjOjpzZXRfaW1hZ2Vfb3JfbGliX25hbWUoc3RyaW5nIGNvbnN0ICYgc3RyKQoreworCS8qIEZJWE1FOiB3aGF0IGRvZXMgc3BlYyBzYXkgYWJvdXQgdGhpcyBiZWluZyBhbGxvd2VkIHRvIGJlCisJICogYSBjb21tYSBsaXN0IG9yIG5vdCA/ICovCisJaW1hZ2Vfb3JfbGliX2ltYWdlLnB1c2hfYmFjayhmaXh1cF9pbWFnZV9zcGVjKHN0ciwgZXh0cmFfZm91bmRfaW1hZ2VzKSk7Cit9CisKKwordm9pZCBwcm9maWxlX3NwZWM6OnBhcnNlX2FyY2hpdmVfcGF0aChzdHJpbmcgY29uc3QgJiBzdHIpCit7CisJYXJjaGl2ZV9wYXRoID0gb3BfcmVhbHBhdGgoc3RyKTsKK30KKworCitzdHJpbmcgcHJvZmlsZV9zcGVjOjpnZXRfYXJjaGl2ZV9wYXRoKCkgY29uc3QKK3sKKwlyZXR1cm4gYXJjaGl2ZV9wYXRoOworfQorCisKK3ZvaWQgcHJvZmlsZV9zcGVjOjpwYXJzZV9zZXNzaW9uKHN0cmluZyBjb25zdCAmIHN0cikKK3sKKwlzZXNzaW9uID0gc2VwYXJhdGVfdG9rZW4oc3RyLCAnLCcpOworfQorCisKK3ZvaWQgcHJvZmlsZV9zcGVjOjpwYXJzZV9zZXNzaW9uX2V4Y2x1ZGUoc3RyaW5nIGNvbnN0ICYgc3RyKQoreworCXNlc3Npb25fZXhjbHVkZSA9IHNlcGFyYXRlX3Rva2VuKHN0ciwgJywnKTsKK30KKworCit2b2lkIHByb2ZpbGVfc3BlYzo6cGFyc2VfaW1hZ2Uoc3RyaW5nIGNvbnN0ICYgc3RyKQoreworCWltYWdlID0gc2VwYXJhdGVfdG9rZW4oc3RyLCAnLCcpOworCWZpeHVwX2ltYWdlX3NwZWMoaW1hZ2UsIGV4dHJhX2ZvdW5kX2ltYWdlcyk7Cit9CisKKwordm9pZCBwcm9maWxlX3NwZWM6OnBhcnNlX2ltYWdlX2V4Y2x1ZGUoc3RyaW5nIGNvbnN0ICYgc3RyKQoreworCWltYWdlX2V4Y2x1ZGUgPSBzZXBhcmF0ZV90b2tlbihzdHIsICcsJyk7CisJZml4dXBfaW1hZ2Vfc3BlYyhpbWFnZV9leGNsdWRlLCBleHRyYV9mb3VuZF9pbWFnZXMpOworfQorCisKK3ZvaWQgcHJvZmlsZV9zcGVjOjpwYXJzZV9saWJfaW1hZ2Uoc3RyaW5nIGNvbnN0ICYgc3RyKQoreworCWxpYl9pbWFnZSA9IHNlcGFyYXRlX3Rva2VuKHN0ciwgJywnKTsKKwlmaXh1cF9pbWFnZV9zcGVjKGxpYl9pbWFnZSwgZXh0cmFfZm91bmRfaW1hZ2VzKTsKK30KKworCit2b2lkIHByb2ZpbGVfc3BlYzo6cGFyc2VfZXZlbnQoc3RyaW5nIGNvbnN0ICYgc3RyKQoreworCWV2ZW50LnNldChzdHIpOworfQorCisKK3ZvaWQgcHJvZmlsZV9zcGVjOjpwYXJzZV9jb3VudChzdHJpbmcgY29uc3QgJiBzdHIpCit7CisJY291bnQuc2V0KHN0cik7Cit9CisKKwordm9pZCBwcm9maWxlX3NwZWM6OnBhcnNlX3VuaXRtYXNrKHN0cmluZyBjb25zdCAmIHN0cikKK3sKKwl1bml0bWFzay5zZXQoc3RyKTsKK30KKworCit2b2lkIHByb2ZpbGVfc3BlYzo6cGFyc2VfdGlkKHN0cmluZyBjb25zdCAmIHN0cikKK3sKKwl0aWQuc2V0KHN0cik7Cit9CisKKwordm9pZCBwcm9maWxlX3NwZWM6OnBhcnNlX3RnaWQoc3RyaW5nIGNvbnN0ICYgc3RyKQoreworCXRnaWQuc2V0KHN0cik7Cit9CisKKwordm9pZCBwcm9maWxlX3NwZWM6OnBhcnNlX2NwdShzdHJpbmcgY29uc3QgJiBzdHIpCit7CisJY3B1LnNldChzdHIpOworfQorCisKK3Byb2ZpbGVfc3BlYzo6YWN0aW9uX3QKK3Byb2ZpbGVfc3BlYzo6Z2V0X2hhbmRsZXIoc3RyaW5nIGNvbnN0ICYgdGFnX3ZhbHVlLCBzdHJpbmcgJiB2YWx1ZSkKK3sKKwlzdHJpbmc6OnNpemVfdHlwZSBwb3MgPSB0YWdfdmFsdWUuZmluZF9maXJzdF9vZignOicpOworCWlmIChwb3MgPT0gc3RyaW5nOjpucG9zKQorCQlyZXR1cm4gMDsKKworCXN0cmluZyB0YWcodGFnX3ZhbHVlLnN1YnN0cigwLCBwb3MpKTsKKwl2YWx1ZSA9IHRhZ192YWx1ZS5zdWJzdHIocG9zICsgMSk7CisKKwlwYXJzZV90YWJsZV90Ojpjb25zdF9pdGVyYXRvciBpdCA9IHBhcnNlX3RhYmxlLmZpbmQodGFnKTsKKwlpZiAoaXQgPT0gcGFyc2VfdGFibGUuZW5kKCkpCisJCXJldHVybiAwOworCisJcmV0dXJuIGl0LT5zZWNvbmQ7Cit9CisKKworbmFtZXNwYWNlIHsKKworLy8vIHJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZSBmcm9tIHRoZSBwcm9maWxlIHNwZWMgbWF5IG1hdGNoIHRoZSBjb21tYQorLy8vIGxpc3QKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Citib29sIGNvbW1hX21hdGNoKGNvbW1hX2xpc3Q8VD4gY29uc3QgJiBjbCwgZ2VuZXJpY19zcGVjPFQ+IGNvbnN0ICYgdmFsdWUpCit7CisJLy8gaWYgdGhlIHByb2ZpbGUgc3BlYyBpcyAiYWxsIiB3ZSBtYXRjaCB0aGUgc2FtcGxlIGZpbGUKKwlpZiAoIWNsLmlzX3NldCgpKQorCQlyZXR1cm4gdHJ1ZTsKKwkKKwkvLyBhbiAiYWxsIiBzYW1wbGUgZmlsZSBzaG91bGQgbmV2ZXIgbWF0Y2ggc3BlY2lmaWVkIHByb2ZpbGUKKwkvLyBzcGVjIHZhbHVlcworCWlmICghdmFsdWUuaXNfc2V0KCkpCisJCXJldHVybiBmYWxzZTsKKworCS8vIG5vdyBtYXRjaCBlYWNoIHByb2ZpbGUgc3BlYyB2YWx1ZSBhZ2FpbnN0IHRoZSBzYW1wbGUgZmlsZQorCXJldHVybiBjbC5tYXRjaCh2YWx1ZS52YWx1ZSgpKTsKK30KKworfQorCisKK2Jvb2wgcHJvZmlsZV9zcGVjOjptYXRjaChmaWxlbmFtZV9zcGVjIGNvbnN0ICYgc3BlYykgY29uc3QKK3sKKwlib29sIG1hdGNoZWRfYnlfaW1hZ2Vfb3JfbGliX2ltYWdlID0gZmFsc2U7CisKKwkvLyBXZSBuZWVkIHRoZSB0cnVlIGltYWdlIG5hbWUgbm90IHRoZSBvbmUgYmFzZWQgb24gdGhlIHNhbXBsZQorCS8vIGZpbGVuYW1lIGZvciB0aGUgYmVuZWZpdCBvZiBtb2R1bGUgd2hpY2ggaGF2ZSAvb3Byb2ZpbGUgaW4gdGhlaXIKKwkvLyBzYW1wbGUgZmlsZW5hbWUuIFRoaXMgYWxsb3cgdG8gc3BlY2lmeSBwcm9maWxlIHNwZWMgYmFzZWQgb24gdGhlCisJLy8gcmVhbCBuYW1lIG9mIHRoZSBpbWFnZSwgZS5nLiAnYmluYXJ5OipvcHJvZmlsZS5rbycKKwlzdHJpbmcgc2ltYWdlID0gZml4dXBfaW1hZ2Vfc3BlYyhzcGVjLmltYWdlLCBleHRyYV9mb3VuZF9pbWFnZXMpOworCXN0cmluZyBzbGliX2ltYWdlID0gZml4dXBfaW1hZ2Vfc3BlYyhzcGVjLmxpYl9pbWFnZSwKKwkJCQkJICAgICBleHRyYV9mb3VuZF9pbWFnZXMpOworCisJLy8gUFA6My4xOQorCWlmICghaW1hZ2Vfb3JfbGliX2ltYWdlLmVtcHR5KCkpIHsKKwkJZ2xvYl9maWx0ZXIgZmlsdGVyKGltYWdlX29yX2xpYl9pbWFnZSwgaW1hZ2VfZXhjbHVkZSk7CisJCWlmIChmaWx0ZXIubWF0Y2goc2ltYWdlKSB8fCBmaWx0ZXIubWF0Y2goc2xpYl9pbWFnZSkpCisJCQltYXRjaGVkX2J5X2ltYWdlX29yX2xpYl9pbWFnZSA9IHRydWU7CisJfQorCisJaWYgKCFtYXRjaGVkX2J5X2ltYWdlX29yX2xpYl9pbWFnZSkgeworCQkvLyBQUDozLjcgMy44CisJCWlmICghaW1hZ2UuZW1wdHkoKSkgeworCQkJZ2xvYl9maWx0ZXIgZmlsdGVyKGltYWdlLCBpbWFnZV9leGNsdWRlKTsKKwkJCWlmICghZmlsdGVyLm1hdGNoKHNpbWFnZSkpCisJCQkJcmV0dXJuIGZhbHNlOworCQl9IGVsc2UgaWYgKCFpbWFnZV9vcl9saWJfaW1hZ2UuZW1wdHkoKSkgeworCQkJLy8gaW1hZ2UuZW1wdHkoKSBtZWFucyBtYXRjaCBhbGwgZXhjZXB0IGlmIHVzZXIKKwkJCS8vIHNwZWNpZmllZCBpbWFnZV9vcl9saWJfaW1hZ2UKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCisJCS8vIFBQOjMuOSAzLjEwCisJCWlmICghbGliX2ltYWdlLmVtcHR5KCkpIHsKKwkJCWdsb2JfZmlsdGVyIGZpbHRlcihsaWJfaW1hZ2UsIGltYWdlX2V4Y2x1ZGUpOworCQkJaWYgKCFmaWx0ZXIubWF0Y2goc2xpYl9pbWFnZSkpCisJCQkJcmV0dXJuIGZhbHNlOworCQl9IGVsc2UgaWYgKGltYWdlLmVtcHR5KCkgJiYgIWltYWdlX29yX2xpYl9pbWFnZS5lbXB0eSgpKSB7CisJCQkvLyBsaWJfaW1hZ2UgZW1wdHkgbWVhbnMgbWF0Y2ggYWxsIGV4Y2VwdCBpZiB1c2VyCisJCQkvLyBzcGVjaWZpZWQgaW1hZ2Vfb3JfbGliX2ltYWdlICpvciogd2UgYWxyZWFkeQorCQkJLy8gbWF0Y2hlZCB0aGlzIHNwZWMgdGhyb3VnaCBpbWFnZQorCQkJcmV0dXJuIGZhbHNlOworCQl9CisJfQorCisJaWYgKCFtYXRjaGVkX2J5X2ltYWdlX29yX2xpYl9pbWFnZSkgeworCQkvLyBpZiB3ZSBkb24ndCBtYXRjaCBieSBpbWFnZV9vcl9saWJfaW1hZ2Ugd2UgbXVzdCB0cnkgdG8KKwkJLy8gZXhjbHVkZSBmcm9tIHNwZWMsIGV4Y2x1c2lvbiBmcm9tIGltYWdlX29yX2xpYl9pbWFnZSBoYXMKKwkJLy8gYmVlbiBoYW5kbGVkIGFib3ZlCisJCXZlY3RvcjxzdHJpbmc+IGVtcHR5OworCQlnbG9iX2ZpbHRlciBmaWx0ZXIoZW1wdHksIGltYWdlX2V4Y2x1ZGUpOworCQlpZiAoIWZpbHRlci5tYXRjaChzaW1hZ2UpKQorCQkJcmV0dXJuIGZhbHNlOworCQlpZiAoIXNwZWMubGliX2ltYWdlLmVtcHR5KCkgJiYgIWZpbHRlci5tYXRjaChzbGliX2ltYWdlKSkKKwkJCXJldHVybiBmYWxzZTsKKwl9CisKKwlpZiAoIWV2ZW50Lm1hdGNoKHNwZWMuZXZlbnQpKQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZiAoIWNvdW50Lm1hdGNoKHNwZWMuY291bnQpKQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZiAoIXVuaXRtYXNrLm1hdGNoKHNwZWMudW5pdG1hc2spKQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZiAoIWNvbW1hX21hdGNoKGNwdSwgc3BlYy5jcHUpKQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZiAoIWNvbW1hX21hdGNoKHRpZCwgc3BlYy50aWQpKQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZiAoIWNvbW1hX21hdGNoKHRnaWQsIHNwZWMudGdpZCkpCisJCXJldHVybiBmYWxzZTsKKworCXJldHVybiB0cnVlOworfQorCisKK3Byb2ZpbGVfc3BlYyBwcm9maWxlX3NwZWM6OmNyZWF0ZShsaXN0PHN0cmluZz4gY29uc3QgJiBhcmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvcjxzdHJpbmc+IGNvbnN0ICYgaW1hZ2VfcGF0aCwKKwkJCQkgIHN0cmluZyBjb25zdCAmIHJvb3RfcGF0aCkKK3sKKwlwcm9maWxlX3NwZWMgc3BlYzsKKwlzZXQ8c3RyaW5nPiB0YWdfc2VlbjsKKwl2ZWN0b3I8c3RyaW5nPiB0ZW1wX2ltYWdlX29yX2xpYjsKKworCWxpc3Q8c3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBhcmdzLmJlZ2luKCk7CisJbGlzdDxzdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBhcmdzLmVuZCgpOworCisJZm9yICg7IGl0ICE9IGVuZDsgKytpdCkgeworCQlpZiAoc3BlYy5pc192YWxpZF90YWcoKml0KSkgeworCQkJaWYgKHRhZ19zZWVuLmZpbmQoKml0KSAhPSB0YWdfc2Vlbi5lbmQoKSkgeworCQkJCXRocm93IG9wX3J1bnRpbWVfZXJyb3IoInRhZyBzcGVjaWZpZWQgIgorCQkJCSAgICAgICAibW9yZSB0aGFuIG9uY2U6ICIgKyAqaXQpOworCQkJfQorCQkJdGFnX3NlZW4uaW5zZXJ0KCppdCk7CisJCQlzcGVjLnBhcnNlKCppdCk7CisJCX0gZWxzZSB7CisJCQlzdHJpbmcgY29uc3QgZmlsZSA9IG9wX3JlYWxwYXRoKCppdCk7CisJCQl0ZW1wX2ltYWdlX29yX2xpYi5wdXNoX2JhY2soZmlsZSk7CisJCX0KKwl9CisKKwkvLyBQUDozLjUgbm8gc2Vzc2lvbiBnaXZlbiBtZWFucyB1c2UgdGhlIGN1cnJlbnQgc2Vzc2lvbi4KKwlpZiAoc3BlYy5zZXNzaW9uLmVtcHR5KCkpCisJCXNwZWMuc2Vzc2lvbi5wdXNoX2JhY2soImN1cnJlbnQiKTsKKworCWJvb2wgb2sgPSB0cnVlOworCXZlY3RvcjxzdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpcF9pdCA9IGltYWdlX3BhdGguYmVnaW4oKTsKKwlmb3IgKCA7IGlwX2l0ICE9IGltYWdlX3BhdGguZW5kKCk7ICsraXBfaXQpIHsKKwkJaWYgKCFpc19kaXJlY3Rvcnkoc3BlYy5nZXRfYXJjaGl2ZV9wYXRoKCkgKyAiLyIgKyAqaXBfaXQpKSB7CisJCQljZXJyIDw8IHNwZWMuZ2V0X2FyY2hpdmVfcGF0aCgpICsgIi8iICsgKmlwX2l0IDw8ICIgaXNuJ3QgYSB2YWxpZCBkaXJlY3RvcnlcbiI7CisJCQlvayA9IGZhbHNlOworCQl9CisJfQorCWlmICghb2spCisJCXRocm93IG9wX3J1bnRpbWVfZXJyb3IoImludmFsaWQgLS1pbWFnZS1wYXRoPSBvcHRpb25zIik7CisKKwlzcGVjLmV4dHJhX2ZvdW5kX2ltYWdlcy5wb3B1bGF0ZShpbWFnZV9wYXRoLCBzcGVjLmdldF9hcmNoaXZlX3BhdGgoKSwKKwkJCQkJIHJvb3RfcGF0aCk7CisJdmVjdG9yPHN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGltID0gdGVtcF9pbWFnZV9vcl9saWIuYmVnaW4oKTsKKwl2ZWN0b3I8c3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgbGFzdCA9IHRlbXBfaW1hZ2Vfb3JfbGliLmVuZCgpOworCWZvciAoOyBpbSAhPSBsYXN0OyArK2ltKQorCQlzcGVjLnNldF9pbWFnZV9vcl9saWJfbmFtZSgqaW0pOworCisJcmV0dXJuIHNwZWM7Cit9CisKK25hbWVzcGFjZSB7CisKK3ZlY3RvcjxzdHJpbmc+IGZpbHRlcl9zZXNzaW9uKHZlY3RvcjxzdHJpbmc+IGNvbnN0ICYgc2Vzc2lvbiwKKwkJCSAgICAgIHZlY3RvcjxzdHJpbmc+IGNvbnN0ICYgc2Vzc2lvbl9leGNsdWRlKQoreworCXZlY3RvcjxzdHJpbmc+IHJlc3VsdChzZXNzaW9uKTsKKworCWlmIChyZXN1bHQuZW1wdHkoKSkKKwkJcmVzdWx0LnB1c2hfYmFjaygiY3VycmVudCIpOworCisJZm9yIChzaXplX3QgaSA9IDAgOyBpIDwgc2Vzc2lvbl9leGNsdWRlLnNpemUoKSA7ICsraSkgeworCQkvLyBGSVhNRTogd291bGQgd2UgdXNlIGZubWF0Y2ggb24gZWFjaCBpdGVtLCBhcmUgd2UgYWxsb3dlZAorCQkvLyB0byAtLXNlc3Npb249Y3VycmVudCogPworCQl2ZWN0b3I8c3RyaW5nPjo6aXRlcmF0b3IgaXQgPQorCQkJZmluZChyZXN1bHQuYmVnaW4oKSwgcmVzdWx0LmVuZCgpLCBzZXNzaW9uX2V4Y2x1ZGVbaV0pOworCisJCWlmIChpdCAhPSByZXN1bHQuZW5kKCkpCisJCQlyZXN1bHQuZXJhc2UoaXQpOworCX0KKworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBib29sIGludmFsaWRfc2FtcGxlX2ZpbGU7Citib29sIHZhbGlkX2NhbmRpZGF0ZShzdHJpbmcgY29uc3QgJiBiYXNlX2Rpciwgc3RyaW5nIGNvbnN0ICYgZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICBwcm9maWxlX3NwZWMgY29uc3QgJiBzcGVjLCBib29sIGV4Y2x1ZGVfZGVwZW5kZW50LAorICAgICAgICAgICAgICAgICAgICAgYm9vbCBleGNsdWRlX2NnKQoreworCWlmIChleGNsdWRlX2NnICYmIGZpbGVuYW1lLmZpbmQoIntjZ30iKSAhPSBzdHJpbmc6Om5wb3MpCisJCXJldHVybiBmYWxzZTsKKworCS8vIHN0cmlwIG91dCBub24gc2FtcGxlIGZpbGVzCisJc3RyaW5nIGNvbnN0ICYgc3ViID0gZmlsZW5hbWUuc3Vic3RyKGJhc2VfZGlyLnNpemUoKSwgc3RyaW5nOjpucG9zKTsKKwlpZiAoIWlzX3ByZWZpeChzdWIsICIve3Jvb3R9LyIpICYmICFpc19wcmVmaXgoc3ViLCAiL3trZXJufS8iKSkKKwkJcmV0dXJuIGZhbHNlOworCisJLyogV2hlbiBvdmVyZmxvd3Mgb2NjdXIgaW4gdGhlIG9wcm9maWxlIGtlcm5lbCBkcml2ZXIncyBzYW1wbGUKKwkgKiBidWZmZXJzIChjYXVzZWQgYnkgdG9vIGhpZ2ggb2YgYSBzYW1wbGluZyByYXRlKSwgaXQncyBwb3NzaWJsZQorCSAqIGZvciBzYW1wbGVzIHRvIGJlIG1pcy1hdHRyaWJ1dGVkLiAgQSBjb21tb24gc2NlbmFyaW8gaXMgdGhhdCwKKwkgKiB3aGlsZSBwcm9maWxpbmcgcHJvY2VzcyAnYWJjJyBydW5uaW5nIGJpbmFyeSAneHp5JywgdGhlIHRhc2sKKwkgKiBzd2l0Y2ggZm9yICdhYmMnIGdldHMgZHJvcHBlZCBzb21laG93LiAgVGhlbiwgc2FtcGxlcyBhcmUgdGFrZW4KKwkgKiBmb3IgdGhlICd4eXonIGJpbmFyeS4gIEluIHRoZSBhdHRlbXB0IHRvIGF0dHJpYnV0ZSB0aGUgc2FtcGxlcyB0bworCSAqIHRoZSBhc3NvY2lhdGVkIGJpbmFyeSwgdGhlIG9wcm9maWxlIGtlcm5lbCBjb2RlIGV4YW1pbmVzIHRoZQorCSAqIHRoZSBtZW1vcnkgbWFwcGluZ3MgZm9yIHRoZSBsYXN0IHByb2Nlc3MgZm9yIHdoaWNoIGl0IHJlY29yZGVkCisJICogYSB0YXNrIHN3aXRjaC4gIFdoZW4gcHJvZmlsaW5nIGF0IGEgdmVyeSBoaWdoIHJhdGUsIHRoZSBvcHJvZmlsZQorCSAqIGRhZW1vbiBpcyBvZnRlbiB0aGUgcHJvY2VzcyB0aGF0IGlzIG1pc3Rha2VubHkgZXhhbWluZWQuICBUaGVuIHRoZQorCSAqIHNhbXBsZSBmcm9tIGJpbmFyeSAneHl6JyBpcyBtYXRjaGVkIHRvIHNvbWUgZmlsZSB0aGF0J3Mgb3BlbiBpbgorCSAqIG9wcm9maWxlZCdzIG1lbW9yeSBzcGFjZS4gIEJlY2F1c2Ugb3Byb2ZpbGVkIGhhcyBtYW55IHNhbXBsZSBmaWxlcworCSAqIG9wZW4gYXQgYW55IGdpdmVuIHRpbWUsIHRoZXJlJ3MgYSBnb29kIGNoYW5jZSB0aGUgc2FtcGxlJ3MgVk1BIGlzCisJICogY29udGFpbmVkIHdpdGhpbiBvbmUgb2YgdGhvc2Ugc2FtcGxlIGZpbGVzLiAgU28sIG9uY2UgZmluZGluZyB0aGlzCisJICogYm9ndXMgbWF0Y2gsIHRoZSBvcHJvZmlsZSBrZXJuZWwgcmVjb3JkcyBhIGNvb2tpZSBzd2l0Y2ggZm9yIHRoZQorCSAqIHNhbXBsZSBmaWxlLiAgVGhpcyBzY2VuYXJpbyBpcyBtYWRlIGV2ZW4gbW9yZSBsaWtlbHkgaWYgYSBoaWdoCisJICogc2FtcGxpbmcgcmF0ZSAoZS5nLiwgcHJvZmlsaW5nIG9uIHNldmVyYWwgZXZlbnRzKSBpcyBwYWlyZWQgd2l0aAorCSAqIGNhbGxncmFwaCBkYXRhIGNvbGxlY3Rpb24uCisJICoKKwkgKiBXaGVuIHRoZSBkYWVtb24gcHJvY2Vzc2VzIHRoaXMgc2FtcGxlIGRhdGEgZnJvbSB0aGUga2VybmVsLCBpdAorCSAqIGNyZWF0ZXMgYSBzYW1wbGUgZmlsZSBmb3IgdGhlIHNhbXBsZSBmaWxlLCByZXN1bHRpbmcgaW4gc29tZXRoaW5nCisJICogb2YgdGhlIGZvcm06CisJICogICAgPHNlc3Npb24tZGlyPi9bYmxhaF08c2Vzc2lvbi1kaXI+L1tibGFoXQorCSAqCisJICogV2hlbiB0aGUgc2FtcGxlIGRhdGEgaXMgcG9zdC1wcm9jZXNzZWQsIHRoZSBzYW1wbGUgZmlsZSBpcyBwYXJzZWQgdG8KKwkgKiB0cnkgdG8gZGV0ZXJtaW5lIHRoZSBuYW1lIG9mIHRoZSBiaW5hcnksIGJ1dCBpdCBnZXRzIGhvcnJpYmx5IGNvbmZ1c2VkLgorCSAqIEF0IGJlc3QsIHRoZSBwb3N0LXByb2Nlc3NpbmcgdG9vbCB3aWxsIHNwaXQgb3V0IHNvbWUgd2FybmluZyBtZXNzYWdlcywKKwkgKiBzdWNoIGFzOgorCSAqIHdhcm5pbmc6CisJICogL2xpYjY0L2xpYmRsLTIuOS5zby9DWUNMRVMuMTAwMDAuMC5hbGwuYWxsLmFsbC97ZGVwfS97cm9vdH0vdmFyL2xpYi9vcHJvZmlsZS9zYW1wbGVzL2N1cnJlbnQve3Jvb3R9L2xpYjY0L2xpYmRsLTIuOS5zby97ZGVwfS97cm9vdH0vbGliNjQvbGliZGwtMi45LnNvL1BNX1JVTl9DWUNfR1JQMTIuMTAwMDAuMC5hbGwuYWxsLmFsbAorCSAqIGNvdWxkIG5vdCBiZSBmb3VuZC4KKwkgKgorCSAqIEF0IHdvcnN0LCB0aGUgcGFyc2luZyBtYXkgcmVzdWx0IGluIGFuICJpbnZhbGlkIGFyZ3VtZW50IiBydW50aW1lIGVycm9yCisJICogYmVjYXVzZSBvZiB0aGUgaW5hYmlsaXR5IHRvIHBhcnNlIGEgc2FtcGxlIGZpbGUgd2hvc2UgbmFtZSBjb250YWlucyB0aGF0CisJICogb2YgYW5vdGhlciBzYW1wbGUgZmlsZS4gIFRoaXMgdHlwaWNhbGx5IHNlZW1zIHRvIGhhcHBlbiB3aGVuIGNhbGxncmFwaAorCSAqIGRhdGEgaXMgYmVpbmcgY29sbGVjdGVkLgorCSAqCisJICogVGhlIG5leHQgc2V2ZXJhbCBsaW5lcyBvZiBjb2RlIGNoZWNrcyBpZiB0aGUgcGFzc2VkIGZpbGVuYW1lCisJICogY29udGFpbnMgPHNlc3Npb24tZGlyPi9zYW1wbGVzOyBpZiBzbywgd2UgZGlzY2FyZCBpdCBhcyBhbgorCSAqIGludmFsaWQgc2FtcGxlIGZpbGUuCisJICovCisKKwl1bnNpZ25lZCBpbnQgaiA9IGJhc2VfZGlyLnJmaW5kKCcvJyk7CisJc3RyaW5nIHNlc3Npb25fc2FtcGxlc19kaXIgPSBiYXNlX2Rpci5zdWJzdHIoMCwgaik7CisJaWYgKHN1Yi5maW5kKHNlc3Npb25fc2FtcGxlc19kaXIpICE9IHN0cmluZzo6bnBvcykgeworCQlpbnZhbGlkX3NhbXBsZV9maWxlID0gdHJ1ZTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCS8vIHN0cmlwIG91dCBnZW5lcmF0ZWQgSklUIG9iamVjdCBmaWxlcyBmb3Igc2FtcGxlcyBvZiBhbm9ueW1vdXMgcmVnaW9ucworCWlmIChpc19qaXRfc2FtcGxlKHN1YikpCisJCXJldHVybiBmYWxzZTsKKworCWZpbGVuYW1lX3NwZWMgZmlsZV9zcGVjKGZpbGVuYW1lLCBzcGVjLmV4dHJhX2ZvdW5kX2ltYWdlcyk7CisJaWYgKHNwZWMubWF0Y2goZmlsZV9zcGVjKSkgeworCQlpZiAoZXhjbHVkZV9kZXBlbmRlbnQgJiYgZmlsZV9zcGVjLmlzX2RlcGVuZGVudCgpKQorCQkJcmV0dXJuIGZhbHNlOworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKKworLyoqCisgKiBQcmludCBhIHdhcm5pbmcgbWVzc2FnZSBpZiB3ZSBkZXRlY3QgYW55IHNhbXBsZSBidWZmZXIgb3ZlcmZsb3dzCisgKiBvY2N1cnJlZCBpbiB0aGUga2VybmVsIGRyaXZlci4gCisgKi8KK3ZvaWQgd2Fybl9pZl9rZXJuX2J1ZmZzX292ZXJmbG93KHN0cmluZyBjb25zdCAmIHNlc3Npb25fc2FtcGxlc19kaXIpCit7CisJRElSICogZGlyOworCXN0cnVjdCBkaXJlbnQgKiBkaXJlbnQ7CisJc3RyaW5nIHN0YXRzX3BhdGg7CisJaW50IHJldCA9IDA7CisJCisJc3RhdHNfcGF0aCA9IHNlc3Npb25fc2FtcGxlc19kaXIgKyAic3RhdHMvIjsKKwlyZXQgPSBvcF9yZWFkX2ludF9mcm9tX2ZpbGUoKHN0YXRzX3BhdGggKyAiZXZlbnRfbG9zdF9vdmVyZmxvdyIpLgorCQkJCSAgICBjX3N0cigpLCAwKTsKKworCWlmICghKGRpciA9IG9wZW5kaXIoc3RhdHNfcGF0aC5jX3N0cigpKSkpIHsKKwkJcmV0ID0gLTE7CisJCWdvdG8gZG9uZTsKKwl9CisKKwl3aGlsZSAoKGRpcmVudCA9IHJlYWRkaXIoZGlyKSkgJiYgIXJldCkgeworCQlpbnQgY3B1X25yOworCQlzdHJpbmcgcGF0aDsKKwkJaWYgKHNzY2FuZihkaXJlbnQtPmRfbmFtZSwgImNwdSVkIiwgJmNwdV9ucikgIT0gMSkKKwkJCWNvbnRpbnVlOworCQlwYXRoID0gc3RhdHNfcGF0aCArIGRpcmVudC0+ZF9uYW1lICsgIi8iOworCQlyZXQgPSBvcF9yZWFkX2ludF9mcm9tX2ZpbGUoKHBhdGggKyAic2FtcGxlX2xvc3Rfb3ZlcmZsb3ciKS4KKwkJCQkJICAgIGNfc3RyKCksIDApOworCX0KKwljbG9zZWRpcihkaXIpOworCisgZG9uZToKKwlpZiAocmV0ID4gMCkgeworCQljZXJyIDw8ICJXQVJOSU5HISBUaGUgT1Byb2ZpbGUga2VybmVsIGRyaXZlciByZXBvcnRzIHNhbXBsZSAiCisJCSAgICAgPDwgImJ1ZmZlciBvdmVyZmxvd3MuIiA8PCBlbmRsOworCQljZXJyIDw8ICJTdWNoIG92ZXJmbG93cyBjYW4gcmVzdWx0IGluIGluY29ycmVjdCBzYW1wbGUgYXR0cmlidXRpb24iCisJCSAgICAgPDwgIiwgaW52YWxpZCBzYW1wbGUiIDw8IGVuZGwKKwkJICAgICA8PAkiZmlsZXMgYW5kIG90aGVyIHN5bXB0b21zLiAgIgorCQkgICAgIDw8ICJTZWUgdGhlIG9wcm9maWxlZC5sb2cgZm9yIGRldGFpbHMuIiA8PCBlbmRsOworCQljZXJyIDw8ICJZb3Ugc2hvdWxkIGFkanVzdCB5b3VyIHNhbXBsaW5nIGZyZXF1ZW5jeSB0byBlbGltaW5hdGUiCisJCSAgICAgPDwgIiAob3IgYXQgbGVhc3QgbWluaW1pemUpIiA8PCBlbmRsCisJCSAgICAgPDwJInRoZXNlIG92ZXJmbG93cy4iIDw8IGVuZGw7CisJfQorfQorCisKK30gIC8vIGFub255bW91cyBuYW1lc3BhY2UKKworCitsaXN0PHN0cmluZz4gcHJvZmlsZV9zcGVjOjpnZW5lcmF0ZV9maWxlX2xpc3QoYm9vbCBleGNsdWRlX2RlcGVuZGVudCwKKyAgYm9vbCBleGNsdWRlX2NnKSBjb25zdAoreworCS8vIEZJWE1FOiBpc24ndCByZW1vdmVfZHVwbGljYXRlcyBmYXN0ZXIgdGhhbiBkb2luZyB0aGlzLCB0aGVuIGNvcHkoKSA/CisJc2V0PHN0cmluZz4gdW5pcXVlX2ZpbGVzOworCisJdmVjdG9yPHN0cmluZz4gc2Vzc2lvbnMgPSBmaWx0ZXJfc2Vzc2lvbihzZXNzaW9uLCBzZXNzaW9uX2V4Y2x1ZGUpOworCisJaWYgKHNlc3Npb25zLmVtcHR5KCkpIHsKKwkJb3N0cmluZ3N0cmVhbSBvczsKKwkJb3MgPDwgIk5vIHNlc3Npb24gZ2l2ZW5cbiIKKwkJICAgPDwgImluY2x1ZGVkIHNlc3Npb24gd2FzOlxuIjsKKwkJY29weShzZXNzaW9uLmJlZ2luKCksIHNlc3Npb24uZW5kKCksCisJCSAgICAgb3N0cmVhbV9pdGVyYXRvcjxzdHJpbmc+KG9zLCAiXG4iKSk7CisJCW9zIDw8ICJleGNsdWRlZCBzZXNzaW9uIHdhczpcbiI7CisJCWNvcHkoc2Vzc2lvbl9leGNsdWRlLmJlZ2luKCksIHNlc3Npb25fZXhjbHVkZS5lbmQoKSwKKwkJICAgICBvc3RyZWFtX2l0ZXJhdG9yPHN0cmluZz4ob3MsICJcbiIpKTsKKwkJdGhyb3cgaW52YWxpZF9hcmd1bWVudChvcy5zdHIoKSk7CisJfQorCisJYm9vbCBmb3VuZF9maWxlID0gZmFsc2U7CisKKwl2ZWN0b3I8c3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgY2l0ID0gc2Vzc2lvbnMuYmVnaW4oKTsKKwl2ZWN0b3I8c3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gc2Vzc2lvbnMuZW5kKCk7CisKKwlmb3IgKDsgY2l0ICE9IGVuZDsgKytjaXQpIHsKKwkJaWYgKGNpdC0+ZW1wdHkoKSkKKwkJCWNvbnRpbnVlOworCisJCXN0cmluZyBiYXNlX2RpcjsKKwkJaW52YWxpZF9zYW1wbGVfZmlsZSA9IGZhbHNlOworCQlpZiAoKCpjaXQpWzBdICE9ICcuJyAmJiAoKmNpdClbMF0gIT0gJy8nKQorCQkJYmFzZV9kaXIgPSBhcmNoaXZlX3BhdGggKyBvcF9zYW1wbGVzX2RpcjsKKwkJYmFzZV9kaXIgKz0gKmNpdDsKKworCQliYXNlX2RpciA9IG9wX3JlYWxwYXRoKGJhc2VfZGlyKTsKKworCQlsaXN0PHN0cmluZz4gZmlsZXM7CisJCWNyZWF0ZV9maWxlX2xpc3QoZmlsZXMsIGJhc2VfZGlyLCAiKiIsIHRydWUpOworCisJCWlmICghZmlsZXMuZW1wdHkoKSkgeworCQkJZm91bmRfZmlsZSA9IHRydWU7CisJCQl3YXJuX2lmX2tlcm5fYnVmZnNfb3ZlcmZsb3coYmFzZV9kaXIgKyAiLyIpOworCQl9CisKKwkJbGlzdDxzdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGZpbGVzLmJlZ2luKCk7CisJCWxpc3Q8c3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgZmVuZCA9IGZpbGVzLmVuZCgpOworCQlmb3IgKDsgaXQgIT0gZmVuZDsgKytpdCkgeworCQkJaWYgKHZhbGlkX2NhbmRpZGF0ZShiYXNlX2RpciwgKml0LCAqdGhpcywKKwkJCSAgICBleGNsdWRlX2RlcGVuZGVudCwgZXhjbHVkZV9jZykpIHsKKwkJCQl1bmlxdWVfZmlsZXMuaW5zZXJ0KCppdCk7CisJCQl9CisJCX0KKwkJaWYgKGludmFsaWRfc2FtcGxlX2ZpbGUpIHsKKwkJCWNlcnIgPDwgIldhcm5pbmc6IEludmFsaWQgc2FtcGxlIGZpbGVzIGZvdW5kIGluICIKKwkJCSAgICAgPDwgYmFzZV9kaXIgPDwgZW5kbDsKKwkJCWNlcnIgPDwgIlRoaXMgcHJvYmxlbSBjYW4gYmUgY2F1c2VkIGJ5IHRvbyBoaWdoIG9mIGEgc2FtcGxpbmcgcmF0ZS4iCisJCQkgICAgIDw8IGVuZGw7CisJCX0KKwl9CisKKwlpZiAoIWZvdW5kX2ZpbGUpIHsKKwkJb3N0cmluZ3N0cmVhbSBvczsKKwkJb3MgIDw8ICJObyBzYW1wbGUgZmlsZSBmb3VuZDogdHJ5IHJ1bm5pbmcgb3Bjb250cm9sIC0tZHVtcFxuIgorCQkgICAgPDwgIm9yIHNwZWNpZnkgYSBzZXNzaW9uIGNvbnRhaW5pbmcgc2FtcGxlIGZpbGVzXG4iOworCQl0aHJvdyBvcF9mYXRhbF9lcnJvcihvcy5zdHIoKSk7CisJfQorCisJbGlzdDxzdHJpbmc+IHJlc3VsdDsKKwljb3B5KHVuaXF1ZV9maWxlcy5iZWdpbigpLCB1bmlxdWVfZmlsZXMuZW5kKCksIGJhY2tfaW5zZXJ0ZXIocmVzdWx0KSk7CisKKwlyZXR1cm4gcmVzdWx0OworfQpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvbGlicHAvcHJvZmlsZV9zcGVjLmggYi9vcHJvZmlsZS0wLjkuNy9saWJwcC9wcm9maWxlX3NwZWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OGIzNGM0Ci0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvbGlicHAvcHJvZmlsZV9zcGVjLmgKQEAgLTAsMCArMSwxNDMgQEAKKy8qKgorICogQGZpbGUgcHJvZmlsZV9zcGVjLmgKKyAqIENvbnRhaW5zIGEgUFAgcHJvZmlsZSBzcGVjaWZpY2F0aW9uCisgKgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMyBPUHJvZmlsZSBhdXRob3JzCisgKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORworICoKKyAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQorICovCisKKyNpZm5kZWYgUFJPRklMRV9TUEVDX0gKKyNkZWZpbmUgUFJPRklMRV9TUEVDX0gKKworI2luY2x1ZGUgPG1hcD4KKyNpbmNsdWRlIDx2ZWN0b3I+CisjaW5jbHVkZSA8bGlzdD4KKworI2luY2x1ZGUgImZpbGVuYW1lX3NwZWMuaCIKKyNpbmNsdWRlICJjb21tYV9saXN0LmgiCisjaW5jbHVkZSAibG9jYXRlX2ltYWdlcy5oIgorCisvKioKKyAqIEhvbGRzIGEgcGFyc2VkIHByb2ZpbGUgc3BlYyBjb21wb3NlZCBvZiB0YWc6dmFsdWUgcGFpcnMsIGFzIGdpdmVuIGluCisgKiBwcF9pbnRlcmZhY2UgZG9jdW1lbnRhdGlvbi4KKyAqCisgKiAgQGludGVybmFsIGltcGxlbWVudGVkIHRocm91Z2ggYSBtYXAgb2Ygc3RyaW5nLCBwb2ludGVyIHRvIGZ1bmN0aW9uIG1lbWJlcgorICogIGluZGV4ZWQgYnkgdGFnX25hbWUuCisgKi8KK2NsYXNzIHByb2ZpbGVfc3BlYworeworcHVibGljOgorCS8qKgorCSAqIEBwYXJhbSBhcmdzICBhIHZlY3RvciBvZiBub24gb3B0aW9ucyBzdHJpbmdzCisJICogQHBhcmFtIGV4dHJhIGV4dHJhIGltYWdlIHBhdGhzIHRvIHNlYXJjaAorCSAqCisJICogRmFjdG9yeSByZXR1cm5pbmcgYSBwcm9maWxlX3NwZWMgaW5zdGFuY2Ugc3RvcmluZyBhbGwgdmFsaWQKKwkgKiB0YWc6dmFsdWUgY29udGFpbmVkIGluIGFyZ3MgdmVjdG9yIGRvaW5nIGFsc28gYWxpYXMKKwkgKiBzdWJzdGl0dXRpb24sIG5vbi12YWxpZCB0YWc6dmFsdWUgb3B0aW9ucyBhcmUgY29uc2lkZXJlZAorCSAqIGFzIGltYWdlOnZhbHVlCisJICovCisJc3RhdGljIHByb2ZpbGVfc3BlYyBjcmVhdGUoc3RkOjpsaXN0PHN0ZDo6c3RyaW5nPiBjb25zdCAmIGFyZ3MsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0ICYgaW1hZ2VfcGF0aCwKKwkJCQkgICBzdGQ6OnN0cmluZyBjb25zdCAmIHJvb3RfcGF0aCk7CisKKwkvKioKKwkgKiBAcGFyYW0gZXhjbHVkZV9kZXBlbmRlbnQgIHdoZXRoZXIgdG8gZXhjbHVkZSBkZXBlbmRlbnQgc3ViLWltYWdlcworCSAqIEBwYXJhbSBleGNsdWRlX2NnICB3aGV0aGVyIHRvIGV4Y2x1ZGUgY2FsbCBncmFwaCBmaWxlCisJICoKKwkgKiBVc2UgdGhlIHNwZWMgdG8gZ2VuZXJhdGUgdGhlIGxpc3Qgb2YgY2FuZGlkYXRlIHNhbXBsZSBmaWxlcy4KKwkgKi8KKwlzdGQ6Omxpc3Q8c3RkOjpzdHJpbmc+CisJZ2VuZXJhdGVfZmlsZV9saXN0KGJvb2wgZXhjbHVkZV9kZXBlbmRlbnQsIGJvb2wgZXhjbHVkZV9jZykgY29uc3Q7CisKKwkvKioKKwkgKiBAcGFyYW0gZmlsZV9zcGVjICB0aGUgZmlsZW5hbWUgc3BlY2lmaWNhdGlvbiB0byBjaGVjaworCSAqCisJICogcmV0dXJuIHRydWUgaWYgZmlsZW5hbWUgbWF0Y2ggdGhlIHNwZWMuIFBQOjMuMjQgaW50ZXJuYWwgbG9vcAorCSAqLworCWJvb2wgbWF0Y2goZmlsZW5hbWVfc3BlYyBjb25zdCAmIGZpbGVfc3BlYykgY29uc3Q7CisKKwkvKioKKwkgKiByZXR1cm4gYXJjaGl2ZSBuYW1lCisJICogcmV0dXJucyBhbiBlbXB0eSBzdHJpbmcgaWYgbm90IHVzaW5nIGFuIGFyY2hpdmUuCisJICovCisJc3RkOjpzdHJpbmcgZ2V0X2FyY2hpdmVfcGF0aCgpIGNvbnN0OworCitwcml2YXRlOgorCXByb2ZpbGVfc3BlYygpOworCisJLyoqCisJICogQHBhcmFtIHRhZ192YWx1ZSAgYSAidGFnOnZhbHVlIiB0byBpbnRlcnByZXQsIGFsbCBlcnJvciB0aHJvdyBhbgorCSAqIGludmFsaWRfYXJndW1lbnQgZXhjZXB0aW9uLgorCSAqLworCXZvaWQgcGFyc2Uoc3RkOjpzdHJpbmcgY29uc3QgJiB0YWdfdmFsdWUpOworCisJLyoqCisJICogQHBhcmFtIGltYWdlIGFuIGltYWdlIG9yIGEgbGlicmF5IG5hbWUgZ2l2ZW4gb24gY29tbWFuZCBsaW5lCisJICoKKwkgKiBVc2VkIGZvciBlLmcuICJvcHJlcG9ydCAvYmluL215YmluYXJ5Ii4gV2UgZG9uJ3Qga25vdyB5ZXQKKwkgKiBpZiB0aGlzIGlzIGFuIGFwcGxpY2F0aW9uIG9yIGEgZGVwZW5kZW50IGltYWdlLgorCSAqLworCXZvaWQgc2V0X2ltYWdlX29yX2xpYl9uYW1lKHN0ZDo6c3RyaW5nIGNvbnN0ICYgaW1hZ2UpOworCisJLyoqCisJICogQHBhcmFtIHN0ciAgYSAidGFnOnZhbHVlIgorCSAqCisJICogcmV0dXJuIHRydWUgaWYgdGFnIGlzIGEgdmFsaWQgdGFnCisJICovCisJYm9vbCBpc192YWxpZF90YWcoc3RkOjpzdHJpbmcgY29uc3QgJiBzdHIpOworCisJLyoqCisJICogaW1wbGVtZW50IHRhZyBwYXJzaW5nOiBQUDozLjMgdG8gMy4xNgorCSAqLworCXZvaWQgcGFyc2VfYXJjaGl2ZV9wYXRoKHN0ZDo6c3RyaW5nIGNvbnN0ICYpOworCXZvaWQgcGFyc2Vfc2Vzc2lvbihzdGQ6OnN0cmluZyBjb25zdCAmKTsKKwl2b2lkIHBhcnNlX3Nlc3Npb25fZXhjbHVkZShzdGQ6OnN0cmluZyBjb25zdCAmKTsKKwl2b2lkIHBhcnNlX2ltYWdlKHN0ZDo6c3RyaW5nIGNvbnN0ICYpOworCXZvaWQgcGFyc2VfaW1hZ2VfZXhjbHVkZShzdGQ6OnN0cmluZyBjb25zdCAmKTsKKwl2b2lkIHBhcnNlX2xpYl9pbWFnZShzdGQ6OnN0cmluZyBjb25zdCAmKTsKKwl2b2lkIHBhcnNlX2V2ZW50KHN0ZDo6c3RyaW5nIGNvbnN0ICYpOworCXZvaWQgcGFyc2VfY291bnQoc3RkOjpzdHJpbmcgY29uc3QgJik7CisJdm9pZCBwYXJzZV91bml0bWFzayhzdGQ6OnN0cmluZyBjb25zdCAmKTsKKwl2b2lkIHBhcnNlX3RpZChzdGQ6OnN0cmluZyBjb25zdCAmKTsKKwl2b2lkIHBhcnNlX3RnaWQoc3RkOjpzdHJpbmcgY29uc3QgJik7CisJdm9pZCBwYXJzZV9jcHUoc3RkOjpzdHJpbmcgY29uc3QgJik7CisKKwl0eXBlZGVmIHZvaWQgKHByb2ZpbGVfc3BlYzo6KmFjdGlvbl90KShzdGQ6OnN0cmluZyBjb25zdCAmKTsKKwl0eXBlZGVmIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBhY3Rpb25fdD4gcGFyc2VfdGFibGVfdDsKKwlwYXJzZV90YWJsZV90IHBhcnNlX3RhYmxlOworCisJLyoqCisJICogQHBhcmFtIHRhZ192YWx1ZSAgaW5wdXQgInRhZzp2YWx1ZSIgc3RyaW5nCisJICogQHBhcmFtIHZhbHVlICBpZiBzdWNjZXNzIHJldHVybiB0aGUgdmFsdWUgcGFydCBvZiB0YWdfdmFsdWUKKwkgKiBoZWxwZXIgZm9yIHNldC9pc192YWxpZF90YWcgcHVibGljIGludGVyZmFjZQorCSAqCisJICogcmV0dXJuIG51bGwgaWYgdGFnIGlzIG5vdCB2YWxpZCwgZWxzZSByZXR1cm4gdGhlIHBvaW50ZXIgdG8gbWVtYmVyCisJICogZnVuY3Rpb24gdG8gYXBwbHkgYW5kIHRoZSB2YWx1ZSBpbiB2YWx1ZSBwYXJhbWV0ZXIKKwkgKi8KKwlhY3Rpb25fdCBnZXRfaGFuZGxlcihzdGQ6OnN0cmluZyBjb25zdCAmIHRhZ192YWx1ZSwKKwkJCSAgICAgc3RkOjpzdHJpbmcgJiB2YWx1ZSk7CisKKwlzdGQ6OnN0cmluZyBhcmNoaXZlX3BhdGg7CisJc3RkOjpzdHJpbmcgYmluYXJ5OworCXN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBzZXNzaW9uOworCXN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBzZXNzaW9uX2V4Y2x1ZGU7CisJc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGltYWdlOworCXN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBpbWFnZV9leGNsdWRlOworCXN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBsaWJfaW1hZ2U7CisJY29tbWFfbGlzdDxzdGQ6OnN0cmluZz4gZXZlbnQ7CisJY29tbWFfbGlzdDxpbnQ+IGNvdW50OworCWNvbW1hX2xpc3Q8dW5zaWduZWQgaW50PiB1bml0bWFzazsKKwljb21tYV9saXN0PHBpZF90PiB0aWQ7CisJY29tbWFfbGlzdDxwaWRfdD4gdGdpZDsKKwljb21tYV9saXN0PGludD4gY3B1OworCS8vIHNwZWNpZmllZCBieSB1c2VyIG9uIGNvbW1hbmQgbGlrZSBvcHJlcG9ydCBpbWFnZTEgaW1hZ2UyIC4uLgorCXN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBpbWFnZV9vcl9saWJfaW1hZ2U7CisKK3B1YmxpYzogLy8gRklYTUUKKwkvLy8gZXh0cmEgc2VhcmNoIHBhdGggZm9yIGltYWdlcworCWV4dHJhX2ltYWdlcyBleHRyYV9mb3VuZF9pbWFnZXM7Cit9OworCisjZW5kaWYgLyogIVBST0ZJTEVfU1BFQ19IICovCmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9saWJwcC9zYW1wbGVfY29udGFpbmVyLmNwcCBiL29wcm9maWxlLTAuOS43L2xpYnBwL3NhbXBsZV9jb250YWluZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5MGJiNzQKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9saWJwcC9zYW1wbGVfY29udGFpbmVyLmNwcApAQCAtMCwwICsxLDE0MSBAQAorLyoqCisgKiBAZmlsZSBzYW1wbGVfY29udGFpbmVyLmNwcAorICogSW50ZXJuYWwgY29udGFpbmVyIGZvciBzYW1wbGVzCisgKgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMiwgMjAwMyBPUHJvZmlsZSBhdXRob3JzCisgKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORworICoKKyAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQorICogQGF1dGhvciBKb2huIExldm9uCisgKi8KKworI2luY2x1ZGUgPGNsaW1pdHM+CisjaW5jbHVkZSA8c2V0PgorI2luY2x1ZGUgPG51bWVyaWM+CisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPHZlY3Rvcj4KKworI2luY2x1ZGUgInNhbXBsZV9jb250YWluZXIuaCIKKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKworbmFtZXNwYWNlIHsKKworLy8gRklYTUU6IGVmZmljaWVuY3kgPworY291bnRfYXJyYXlfdCBhZGRfY291bnRzKGNvdW50X2FycmF5X3QgY29uc3QgJiBjb3VudHMsCisJCQkgICBzYW1wbGVfZW50cnkgY29uc3QgKiBzKQoreworCWNvdW50X2FycmF5X3QgdGVtcChjb3VudHMpOworCXRlbXAgKz0gcy0+Y291bnRzOworCXJldHVybiB0ZW1wOworfQorCit9IC8vIG5hbWVzcGFjZSBhbm9uCisKKworc2FtcGxlX2NvbnRhaW5lcjo6c2FtcGxlc19pdGVyYXRvciBzYW1wbGVfY29udGFpbmVyOjpiZWdpbigpIGNvbnN0Cit7CisJcmV0dXJuIHNhbXBsZXMuYmVnaW4oKTsKK30KKworCitzYW1wbGVfY29udGFpbmVyOjpzYW1wbGVzX2l0ZXJhdG9yIHNhbXBsZV9jb250YWluZXI6OmVuZCgpIGNvbnN0Cit7CisJcmV0dXJuIHNhbXBsZXMuZW5kKCk7Cit9CisKKworc2FtcGxlX2NvbnRhaW5lcjo6c2FtcGxlc19pdGVyYXRvcgorc2FtcGxlX2NvbnRhaW5lcjo6YmVnaW4oc3ltYm9sX2VudHJ5IGNvbnN0ICogc3ltYm9sKSBjb25zdAoreworCXNhbXBsZXNfc3RvcmFnZTo6a2V5X3R5cGUga2V5KHN5bWJvbCwgMCk7CisKKwlyZXR1cm4gc2FtcGxlcy5sb3dlcl9ib3VuZChrZXkpOworfQorCisKK3NhbXBsZV9jb250YWluZXI6OnNhbXBsZXNfaXRlcmF0b3IgCitzYW1wbGVfY29udGFpbmVyOjplbmQoc3ltYm9sX2VudHJ5IGNvbnN0ICogc3ltYm9sKSBjb25zdAoreworCXNhbXBsZXNfc3RvcmFnZTo6a2V5X3R5cGUga2V5KHN5bWJvbCwgfmJmZF92bWEoMCkpOworCisJcmV0dXJuIHNhbXBsZXMudXBwZXJfYm91bmQoa2V5KTsKK30KKworCit2b2lkIHNhbXBsZV9jb250YWluZXI6Omluc2VydChzeW1ib2xfZW50cnkgY29uc3QgKiBzeW1ib2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVfZW50cnkgY29uc3QgJiBzYW1wbGUpCit7CisJc2FtcGxlc19zdG9yYWdlOjprZXlfdHlwZSBrZXkoc3ltYm9sLCBzYW1wbGUudm1hKTsKKworCXNhbXBsZXNfc3RvcmFnZTo6aXRlcmF0b3IgaXQgPSBzYW1wbGVzLmZpbmQoa2V5KTsKKwlpZiAoaXQgIT0gc2FtcGxlcy5lbmQoKSkgeworCQlpdC0+c2Vjb25kLmNvdW50cyArPSBzYW1wbGUuY291bnRzOworCX0gZWxzZSB7CisJCXNhbXBsZXNba2V5XSA9IHNhbXBsZTsKKwl9Cit9CisKKworY291bnRfYXJyYXlfdAorc2FtcGxlX2NvbnRhaW5lcjo6YWNjdW11bGF0ZV9zYW1wbGVzKGRlYnVnX25hbWVfaWQgZmlsZW5hbWVfaWQpIGNvbnN0Cit7CisJYnVpbGRfYnlfbG9jKCk7CisKKwlzYW1wbGVfZW50cnkgbG93ZXIsIHVwcGVyOworCisJbG93ZXIuZmlsZV9sb2MuZmlsZW5hbWUgPSB1cHBlci5maWxlX2xvYy5maWxlbmFtZSA9IGZpbGVuYW1lX2lkOworCWxvd2VyLmZpbGVfbG9jLmxpbmVuciA9IDA7CisJdXBwZXIuZmlsZV9sb2MubGluZW5yID0gSU5UX01BWDsKKworCXR5cGVkZWYgc2FtcGxlc19ieV9sb2NfdDo6Y29uc3RfaXRlcmF0b3IgaXRlcmF0b3I7CisKKwlpdGVyYXRvciBpdDEgPSBzYW1wbGVzX2J5X2xvYy5sb3dlcl9ib3VuZCgmbG93ZXIpOworCWl0ZXJhdG9yIGl0MiA9IHNhbXBsZXNfYnlfbG9jLnVwcGVyX2JvdW5kKCZ1cHBlcik7CisKKwlyZXR1cm4gYWNjdW11bGF0ZShpdDEsIGl0MiwgY291bnRfYXJyYXlfdCgpLCBhZGRfY291bnRzKTsKK30KKworCitzYW1wbGVfZW50cnkgY29uc3QgKgorc2FtcGxlX2NvbnRhaW5lcjo6ZmluZF9ieV92bWEoc3ltYm9sX2VudHJ5IGNvbnN0ICogc3ltYm9sLCBiZmRfdm1hIHZtYSkgY29uc3QKK3sKKwlzYW1wbGVfaW5kZXhfdCBrZXkoc3ltYm9sLCB2bWEpOworCXNhbXBsZXNfaXRlcmF0b3IgaXQgPSBzYW1wbGVzLmZpbmQoa2V5KTsKKwlpZiAoaXQgIT0gc2FtcGxlcy5lbmQoKSkKKwkJcmV0dXJuICZpdC0+c2Vjb25kOworCisJcmV0dXJuIDA7Cit9CisKKworY291bnRfYXJyYXlfdAorc2FtcGxlX2NvbnRhaW5lcjo6YWNjdW11bGF0ZV9zYW1wbGVzKGRlYnVnX25hbWVfaWQgZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxpbmVucikgY29uc3QKK3sKKwlidWlsZF9ieV9sb2MoKTsKKworCXNhbXBsZV9lbnRyeSBzYW1wbGU7CisKKwlzYW1wbGUuZmlsZV9sb2MuZmlsZW5hbWUgPSBmaWxlbmFtZTsKKwlzYW1wbGUuZmlsZV9sb2MubGluZW5yID0gbGluZW5yOworCisJdHlwZWRlZiBwYWlyPHNhbXBsZXNfYnlfbG9jX3Q6OmNvbnN0X2l0ZXJhdG9yLAorCQlzYW1wbGVzX2J5X2xvY190Ojpjb25zdF9pdGVyYXRvcj4gaXRfcGFpcjsKKworCWl0X3BhaXIgaXRwID0gc2FtcGxlc19ieV9sb2MuZXF1YWxfcmFuZ2UoJnNhbXBsZSk7CisKKwlyZXR1cm4gYWNjdW11bGF0ZShpdHAuZmlyc3QsIGl0cC5zZWNvbmQsIGNvdW50X2FycmF5X3QoKSwgYWRkX2NvdW50cyk7Cit9CisKKwordm9pZCBzYW1wbGVfY29udGFpbmVyOjpidWlsZF9ieV9sb2MoKSBjb25zdAoreworCWlmICghc2FtcGxlc19ieV9sb2MuZW1wdHkoKSkKKwkJcmV0dXJuOworCisJc2FtcGxlc19pdGVyYXRvciBjaXQgPSBzYW1wbGVzLmJlZ2luKCk7CisJc2FtcGxlc19pdGVyYXRvciBlbmQgPSBzYW1wbGVzLmVuZCgpOworCWZvciAoOyBjaXQgIT0gZW5kOyArK2NpdCkKKwkJc2FtcGxlc19ieV9sb2MuaW5zZXJ0KCZjaXQtPnNlY29uZCk7Cit9CmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9saWJwcC9zYW1wbGVfY29udGFpbmVyLmggYi9vcHJvZmlsZS0wLjkuNy9saWJwcC9zYW1wbGVfY29udGFpbmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzRjOWFiMAotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2xpYnBwL3NhbXBsZV9jb250YWluZXIuaApAQCAtMCwwICsxLDc3IEBACisvKioKKyAqIEBmaWxlIHNhbXBsZV9jb250YWluZXIuaAorICogSW50ZXJuYWwgaW1wbGVtZW50YXRpb24gb2Ygc2FtcGxlIGNvbnRhaW5lcgorICoKKyAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDIgT1Byb2ZpbGUgYXV0aG9ycworICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKKyAqCisgKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKKyAqIEBhdXRob3IgSm9obiBMZXZvbgorICovCisKKyNpZm5kZWYgU0FNUExFX0NPTlRBSU5FUl9ICisjZGVmaW5lIFNBTVBMRV9DT05UQUlORVJfSAorCisjaW5jbHVkZSA8bWFwPgorI2luY2x1ZGUgPHNldD4KKyNpbmNsdWRlIDxzdHJpbmc+CisKKyNpbmNsdWRlICJzeW1ib2wuaCIKKyNpbmNsdWRlICJzeW1ib2xfZnVuY3RvcnMuaCIKKworLyoqCisgKiBBcmJpdHJhcnkgY29udGFpbmVyIG9mIHNhbXBsZSBlbnRyaWVzLiBDYW4gcmV0dXJuCisgKiBudW1iZXIgb2Ygc2FtcGxlcyBmb3IgYSBmaWxlIG9yIGxpbmUgbnVtYmVyIGFuZAorICogcmV0dXJuIHRoZSBwYXJ0aWN1bGFyIHNhbXBsZSBpbmZvcm1hdGlvbiBmb3IgYSBWTUEuCisgKi8KK2NsYXNzIHNhbXBsZV9jb250YWluZXIgeworCXR5cGVkZWYgc3RkOjpwYWlyPHN5bWJvbF9lbnRyeSBjb25zdCAqLCBiZmRfdm1hPiBzYW1wbGVfaW5kZXhfdDsKK3B1YmxpYzoKKwl0eXBlZGVmIHN0ZDo6bWFwPHNhbXBsZV9pbmRleF90LCBzYW1wbGVfZW50cnk+IHNhbXBsZXNfc3RvcmFnZTsKKwl0eXBlZGVmIHNhbXBsZXNfc3RvcmFnZTo6Y29uc3RfaXRlcmF0b3Igc2FtcGxlc19pdGVyYXRvcjsKKworCS8vLyByZXR1cm4gaXRlcmF0b3IgdG8gdGhlIGZpcnN0IHNhbXBsZXMgZm9yIHRoaXMgc3ltYm9sCisJc2FtcGxlc19pdGVyYXRvciBiZWdpbihzeW1ib2xfZW50cnkgY29uc3QgKikgY29uc3Q7CisJLy8vIHJldHVybiBpdGVyYXRvciB0byB0aGUgbGFzdCBzYW1wbGVzIGZvciB0aGlzIHN5bWJvbAorCXNhbXBsZXNfaXRlcmF0b3IgZW5kKHN5bWJvbF9lbnRyeSBjb25zdCAqKSBjb25zdDsKKworCS8vLyByZXR1cm4gaXRlcmF0b3IgdG8gdGhlIGZpcnN0IHNhbXBsZXMKKwlzYW1wbGVzX2l0ZXJhdG9yIGJlZ2luKCkgY29uc3Q7CisJLy8vIHJldHVybiBpdGVyYXRvciB0byB0aGUgbGFzdCBzYW1wbGVzCisJc2FtcGxlc19pdGVyYXRvciBlbmQoKSBjb25zdDsKKworCS8vLyBpbnNlcnQgYSBzYW1wbGUgZW50cnkgYnkgY3JlYXRpbmcgYSBuZXcgZW50cnkgb3IgYnkgY3VtdWxhdGluZworCS8vLyBzYW1wbGVzIGludG8gYW4gZXhpc3Rpbmcgb25lLiBDYW4gb25seSBiZSBkb25lIGJlZm9yZSBhbnkgbG9va3VwcworCXZvaWQgaW5zZXJ0KHN5bWJvbF9lbnRyeSBjb25zdCAqIHN5bWJvbCwgc2FtcGxlX2VudHJ5IGNvbnN0ICYpOworCisJLy8vIHJldHVybiBuciBvZiBzYW1wbGVzIGluIHRoZSBnaXZlbiBmaWxlbmFtZQorCWNvdW50X2FycmF5X3QgYWNjdW11bGF0ZV9zYW1wbGVzKGRlYnVnX25hbWVfaWQgZmlsZW5hbWVfaWQpIGNvbnN0OworCisJLy8vIHJldHVybiBuciBvZiBzYW1wbGVzIGF0IHRoZSBnaXZlbiBsaW5lIG5yIGluIHRoZSBnaXZlbiBmaWxlCisJY291bnRfYXJyYXlfdCBhY2N1bXVsYXRlX3NhbXBsZXMoZGVidWdfbmFtZV9pZCwgc2l6ZV90IGxpbmVucikgY29uc3Q7CisKKwkvLy8gcmV0dXJuIHRoZSBzYW1wbGUgZW50cnkgZm9yIHRoZSBnaXZlbiBpbWFnZV9uYW1lIGFuZCB2bWEgaWYgYW55CisJc2FtcGxlX2VudHJ5IGNvbnN0ICogZmluZF9ieV92bWEoc3ltYm9sX2VudHJ5IGNvbnN0ICogc3ltYm9sLAorCQkJCQkgYmZkX3ZtYSB2bWEpIGNvbnN0OworCitwcml2YXRlOgorCS8vLyBidWlsZCB0aGUgc3ltYm9sIGJ5IGZpbGUtbG9jYXRpb24gY2FjaGUKKwl2b2lkIGJ1aWxkX2J5X2xvYygpIGNvbnN0OworCisJLy8vIG1haW4gc2FtcGxlIGVudHJ5IGNvbnRhaW5lcgorCXNhbXBsZXNfc3RvcmFnZSBzYW1wbGVzOworCisJdHlwZWRlZiBzdGQ6Om11bHRpc2V0PHNhbXBsZV9lbnRyeSBjb25zdCAqLCBsZXNzX2J5X2ZpbGVfbG9jPgorCQlzYW1wbGVzX2J5X2xvY190OworCisJLy8gbXVzdCBiZSBkZWNsYXJlZCBhZnRlciB0aGUgc2FtcGxlc19zdG9yYWdlIHRvIGVuc3VyZSBhCisJLy8gY29ycmVjdCBsaWZlLXRpbWUuCisKKwkvKioKKwkgKiBTYW1wbGUgZW50cmllcyBieSBmaWxlIGxvY2F0aW9uLiBMYXppbHkgYnVpbHQgd2hlbiBuZWNlc3NhcnksCisJICogc28gbXV0YWJsZS4KKwkgKi8KKwltdXRhYmxlIHNhbXBsZXNfYnlfbG9jX3Qgc2FtcGxlc19ieV9sb2M7Cit9OworCisjZW5kaWYgLyogU0FNUExFX0NPTlRBSU5FUl9IICovCmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9saWJwcC9zeW1ib2wuY3BwIGIvb3Byb2ZpbGUtMC45LjcvbGlicHAvc3ltYm9sLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjM5NTcxCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvbGlicHAvc3ltYm9sLmNwcApAQCAtMCwwICsxLDQ5IEBACisvKioKKyAqIEBmaWxlIHN5bWJvbC5jcHAKKyAqIFN5bWJvbCBjb250YWluZXJzCisgKgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMiwgMjAwNCBPUHJvZmlsZSBhdXRob3JzCisgKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORworICoKKyAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQorICogQGF1dGhvciBKb2huIExldm9uCisgKi8KKworCisjaW5jbHVkZSAic3ltYm9sLmgiCisjaW5jbHVkZSAibG9jYXRlX2ltYWdlcy5oIgorCisjaW5jbHVkZSA8aW9zdHJlYW0+CisjaW5jbHVkZSA8c3RyaW5nPgorCit1c2luZyBuYW1lc3BhY2Ugc3RkOworCitjb2x1bW5fZmxhZ3Mgc3ltYm9sX2VudHJ5OjpvdXRwdXRfaGludChjb2x1bW5fZmxhZ3MgZmwpIGNvbnN0Cit7CisJaWYgKGFwcF9uYW1lICE9IGltYWdlX25hbWUpCisJCWZsID0gY29sdW1uX2ZsYWdzKGZsIHwgY2ZfaW1hZ2VfbmFtZSk7CisKKwkvLyBGSVhNRTogc2VlIGNvbW1lbnQgaW4gc3ltYm9sLmg6IHdoeSB3ZSBkb24ndCB1c2Ugc2FtcGxlLnZtYSArIHNpemUgPworCWlmIChzYW1wbGUudm1hICYgfjB4ZmZmZmZmZmZMTFUpCisJCWZsID0gY29sdW1uX2ZsYWdzKGZsIHwgY2ZfNjRiaXRfdm1hKTsKKworCXJldHVybiBmbDsKK30KKworCisKK2Jvb2wgaGFzX3NhbXBsZV9jb3VudHMoY291bnRfYXJyYXlfdCBjb25zdCAmIGNvdW50cywgc2l6ZV90IGxvLCBzaXplX3QgaGkpCit7CisJZm9yIChzaXplX3QgaSA9IGxvOyBpIDw9IGhpOyArK2kpCisJCWlmIChjb3VudHNbaV0gIT0gMCkKKwkJCXJldHVybiB0cnVlOworCXJldHVybiBmYWxzZTsKK30KKworCitzdHJpbmcgY29uc3QgJiBnZXRfaW1hZ2VfbmFtZShpbWFnZV9uYW1lX2lkIGlkLAorCQkJICAgICAgaW1hZ2VfbmFtZV9zdG9yYWdlOjppbWFnZV9uYW1lX3R5cGUgdHlwZSwKKwkJCSAgICAgIGV4dHJhX2ltYWdlcyBjb25zdCAmIGV4dHJhKQoreworCXJldHVybiBpbWFnZV9uYW1lcy5nZXRfbmFtZShpZCwgdHlwZSwgZXh0cmEpOworfQpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvbGlicHAvc3ltYm9sLmggYi9vcHJvZmlsZS0wLjkuNy9saWJwcC9zeW1ib2wuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTI3MjRkCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvbGlicHAvc3ltYm9sLmgKQEAgLTAsMCArMSwxNDggQEAKKy8qKgorICogQGZpbGUgc3ltYm9sLmgKKyAqIFN5bWJvbCBjb250YWluZXJzCisgKgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMiwgMjAwNCBPUHJvZmlsZSBhdXRob3JzCisgKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORworICoKKyAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQorICogQGF1dGhvciBKb2huIExldm9uCisgKi8KKworI2lmbmRlZiBTWU1CT0xfSAorI2RlZmluZSBTWU1CT0xfSAorCisjaW5jbHVkZSAibmFtZV9zdG9yYWdlLmgiCisjaW5jbHVkZSAiZ3Jvd2FibGVfdmVjdG9yLmgiCisjaW5jbHVkZSAic3BhcnNlX2FycmF5LmgiCisjaW5jbHVkZSAiZm9ybWF0X2ZsYWdzLmgiCisjaW5jbHVkZSAib3BfdHlwZXMuaCIKKworI2luY2x1ZGUgPGJmZC5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorCisjaW5jbHVkZSA8bGlzdD4KKworY2xhc3MgZXh0cmFfaW1hZ2VzOworCisKKy8vLyBmb3Igc3RvcmluZyBzYW1wbGUgY291bnRzCit0eXBlZGVmIHNwYXJzZV9hcnJheTx1MzIsIGNvdW50X3R5cGU+IGNvdW50X2FycmF5X3Q7CisKKworLy8vIEEgc2ltcGxlIGNvbnRhaW5lciBmb3IgYSBmaWxlbm86bGluZW5yIGxvY2F0aW9uLgorc3RydWN0IGZpbGVfbG9jYXRpb24geworCWZpbGVfbG9jYXRpb24oKSA6IGxpbmVucigwKSB7fQorCS8vLyBlbXB0eSBpZiBub3QgdmFsaWQuCisJZGVidWdfbmFtZV9pZCBmaWxlbmFtZTsKKwkvLy8gMCBtZWFucyBpbnZhbGlkIG9yIGNvZGUgaXMgZ2VuZXJhdGVkIGludGVybmFsbHkgYnkgdGhlIGNvbXBpbGVyCisJdW5zaWduZWQgaW50IGxpbmVucjsKKworCWJvb2wgb3BlcmF0b3I8KGZpbGVfbG9jYXRpb24gY29uc3QgJiByaHMpIGNvbnN0IHsKKwkJLy8gTm90ZSB3ZSBzb3J0IG9uIGZpbGVuYW1lIGlkIG5vdCBvbiBzdHJpbmcKKwkJcmV0dXJuIGZpbGVuYW1lIDwgcmhzLmZpbGVuYW1lIHx8CisJCSAgKGZpbGVuYW1lID09IHJocy5maWxlbmFtZSAmJiBsaW5lbnIgPCByaHMubGluZW5yKTsKKwl9Cit9OworCisKKy8vLyBhc3NvY2lhdGUgdm1hIGFkZHJlc3Mgd2l0aCBhIGZpbGUgbG9jYXRpb24gYW5kIGEgc2FtcGxlcyBjb3VudAorc3RydWN0IHNhbXBsZV9lbnRyeSB7CisJc2FtcGxlX2VudHJ5KCkgOiB2bWEoMCkge30KKwkvLy8gRnJvbSB3aGVyZSBmaWxlIGxvY2F0aW9uIGNvbWVzIHRoZSBzYW1wbGVzCisJZmlsZV9sb2NhdGlvbiBmaWxlX2xvYzsKKwkvLy8gRnJvbSB3aGVyZSB2aXJ0dWFsIG1lbW9yeSBhZGRyZXNzIGNvbWVzIHRoZSBzYW1wbGVzCisJYmZkX3ZtYSB2bWE7CisJLy8vIHRoZSBzYW1wbGVzIGNvdW50CisJY291bnRfYXJyYXlfdCBjb3VudHM7Cit9OworCisKKy8vLyBhc3NvY2lhdGUgYSBzeW1ib2wgd2l0aCBhIGZpbGUgbG9jYXRpb24sIHNhbXBsZXMgY291bnQgYW5kIHZtYSBhZGRyZXNzCitjbGFzcyBzeW1ib2xfZW50cnkgeworcHVibGljOgorCXN5bWJvbF9lbnRyeSgpIDogc2l6ZSgwKSB7fQorCXZpcnR1YWwgfnN5bWJvbF9lbnRyeSgpIHt9CisKKwkvLy8gd2hpY2ggaW1hZ2UgdGhpcyBzeW1ib2wgYmVsb25ncyB0bworCWltYWdlX25hbWVfaWQgaW1hZ2VfbmFtZTsKKwkvLy8gb3duaW5nIGFwcGxpY2F0aW9uIG5hbWU6IGlkZW50aWNhbCB0byBpbWFnZSBuYW1lIGlmIHByb2ZpbGluZworCS8vLyBzZXNzaW9uIGRpZCBub3Qgc2VwYXJhdGUgc2FtcGxlcyBmb3Igc2hhcmVkIGxpYnMgb3IgaWYgaW1hZ2VfbmFtZQorCS8vLyBpcyBub3QgYSBzaGFyZWQgbGliCisJaW1hZ2VfbmFtZV9pZCBhcHBfbmFtZTsKKwkvLyBpbmRleCBpbnRvIHRoZSBvcF9iZmQgc3ltYm9sIHRhYmxlCisJc2l6ZV90IHN5bV9pbmRleDsKKwkvLy8gZmlsZSBsb2NhdGlvbiwgdm1hIGFuZCBjdW11bGF0ZWQgc2FtcGxlcyBjb3VudCBmb3IgdGhpcyBzeW1ib2wKKwlzYW1wbGVfZW50cnkgc2FtcGxlOworCS8vLyBuYW1lIG9mIHN5bWJvbAorCXN5bWJvbF9uYW1lX2lkIG5hbWU7CisJLy8vIHN5bWJvbCBzaXplIGFzIGNhbGN1bGF0ZWQgYnkgb3BfYmZkLCBzdGFydCBvZiBzeW1ib2wgaXMgc2FtcGxlLnZtYQorCXNpemVfdCBzaXplOworCisJLyoqCisJICogQHBhcmFtIGZsICBpbnB1dCBoaW50CisJICoKKwkgKiBjb21iaW5lIGZsIHdpdGggdGhlIGNhbGN1bGF0ZWQgaGludC4gSXQncyB0aGVvcmV0aWNhbGx5IHBvc3NpYmxlCisJICogdGhhdCB3ZSBnZXQgYSBzeW1ib2wgd2hlcmUgaXRzIHNhbXBsZXMgcGFzcyB0aGUgYm9yZGVyIGxpbmUsIGJ1dAorCSAqIHRoZSBzdGFydCBpcyBiZWxvdyBpdCwgYnV0IHRoZSB0aGUgaGludCBpcyBvbmx5IHVzZWQgZm9yIGZvcm1hdHRpbmcKKwkgKi8KKwljb2x1bW5fZmxhZ3Mgb3V0cHV0X2hpbnQoY29sdW1uX2ZsYWdzIGZsKSBjb25zdDsKKwl1aW50NjRfdCBzcHVfb2Zmc2V0OworCWltYWdlX25hbWVfaWQgZW1iZWRkaW5nX2ZpbGVuYW1lOworfTsKKworCisvLy8gYSBjb2xsZWN0aW9uIG9mIHNvcnRlZCBzeW1ib2xzCit0eXBlZGVmIHN0ZDo6dmVjdG9yPHN5bWJvbF9lbnRyeSBjb25zdCAqPiBzeW1ib2xfY29sbGVjdGlvbjsKKworCisvKioKKyAqIFRoZSBwdWJsaWMgZGF0YSBmb3IgY2FsbC1ncmFwaCBzeW1ib2xzLiBFYWNoIGNhbGxlci9jYWxsZWUgaGFzCisgKiB0aGUgc2FtcGxlIGNvdW50cyByZXBsYWNlZCB3aXRoIHRoZSByZWxldmFudCBhcmMgY291bnRzLCB3aGlsc3QKKyAqIHRoZSBjZ19zeW1ib2wgcmV0YWlucyBpdHMgc2VsZiBjb3VudC4KKyAqLworY2xhc3MgY2dfc3ltYm9sIDogcHVibGljIHN5bWJvbF9lbnRyeSB7CitwdWJsaWM6CisJY2dfc3ltYm9sKHN5bWJvbF9lbnRyeSBjb25zdCAmIHN5bSkgOiBzeW1ib2xfZW50cnkoc3ltKSB7fQorCisJdHlwZWRlZiBzdGQ6OnZlY3RvcjxzeW1ib2xfZW50cnk+IGNoaWxkcmVuOworCisJLy8vIGFsbCBjYWxsZXJzIG9mIHRoaXMgc3ltYm9sCisJY2hpbGRyZW4gY2FsbGVyczsKKwkvLy8gdG90YWwgY291bnQgb2YgY2FsbGVycworCWNvdW50X2FycmF5X3QgdG90YWxfY2FsbGVyX2NvdW50OworCisJLy8vIGFsbCBzeW1ib2xzIGNhbGxlZCBieSB0aGlzIHN5bWJvbAorCWNoaWxkcmVuIGNhbGxlZXM7CisJLy8vIHRvdGFsIGNvdW50IG9mIGNhbGxlZXMKKwljb3VudF9hcnJheV90IHRvdGFsX2NhbGxlZV9jb3VudDsKK307CisKKy8vLyBhIGNvbGxlY3Rpb24gb2Ygc29ydGVkIGNhbGxncmFwaCBzeW1ib2wgb2JqZWN0cwordHlwZWRlZiBzdGQ6Omxpc3Q8Y2dfc3ltYm9sPiBjZ19jb2xsZWN0aW9uX29ianM7CisKKy8vLyBmb3Igc3RvcmluZyBkaWZmICVhZ2VzCit0eXBlZGVmIGdyb3dhYmxlX3ZlY3Rvcjxkb3VibGU+IGRpZmZfYXJyYXlfdDsKKworCisvKioKKyAqIERhdGEgZm9yIGEgZGlmZmVkIHN5bWJvbC4KKyAqLworc3RydWN0IGRpZmZfc3ltYm9sIDogcHVibGljIHN5bWJvbF9lbnRyeSAgeworCWRpZmZfc3ltYm9sKHN5bWJvbF9lbnRyeSBjb25zdCAmIHN5bSkgOiBzeW1ib2xfZW50cnkoc3ltKSB7fQorCisJLy8vIGRpZmYgJWFnZSB2YWx1ZXMgZm9yIGVhY2ggcHJvZmlsZSBjbGFzcworCWRpZmZfYXJyYXlfdCBkaWZmczsKK307CisKKworLy8vIGEgY29sbGVjdGlvbiBvZiBkaWZmZWQgc3ltYm9scwordHlwZWRlZiBzdGQ6OnZlY3RvcjxkaWZmX3N5bWJvbD4gZGlmZl9jb2xsZWN0aW9uOworCitib29sIGhhc19zYW1wbGVfY291bnRzKGNvdW50X2FycmF5X3QgY29uc3QgJiBjb3VudHMsIHNpemVfdCBsbywgc2l6ZV90IGhpKTsKK3N0ZDo6c3RyaW5nIGNvbnN0ICYgZ2V0X2ltYWdlX25hbWUoaW1hZ2VfbmFtZV9pZCBpZCwKKwkJCQkgICBpbWFnZV9uYW1lX3N0b3JhZ2U6OmltYWdlX25hbWVfdHlwZSB0eXBlLAorCQkJCSAgIGV4dHJhX2ltYWdlcyBjb25zdCAmIGV4dHJhKTsKKworCisjZW5kaWYgLyogIVNZTUJPTF9IICovCmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9saWJwcC9zeW1ib2xfY29udGFpbmVyLmNwcCBiL29wcm9maWxlLTAuOS43L2xpYnBwL3N5bWJvbF9jb250YWluZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1YWE3NmYKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9saWJwcC9zeW1ib2xfY29udGFpbmVyLmNwcApAQCAtMCwwICsxLDEyNCBAQAorLyoqCisgKiBAZmlsZSBzeW1ib2xfY29udGFpbmVyLmNwcAorICogSW50ZXJuYWwgY29udGFpbmVyIGZvciBzeW1ib2xzCisgKgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMiBPUHJvZmlsZSBhdXRob3JzCisgKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORworICoKKyAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQorICogQGF1dGhvciBKb2huIExldm9uCisgKi8KKworI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8c2V0PgorI2luY2x1ZGUgPHZlY3Rvcj4KKworI2luY2x1ZGUgInN5bWJvbF9jb250YWluZXIuaCIKKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKworc3ltYm9sX2NvbnRhaW5lcjo6c2l6ZV90eXBlIHN5bWJvbF9jb250YWluZXI6OnNpemUoKSBjb25zdAoreworCXJldHVybiBzeW1ib2xzLnNpemUoKTsKK30KKworCitzeW1ib2xfZW50cnkgY29uc3QgKiBzeW1ib2xfY29udGFpbmVyOjppbnNlcnQoc3ltYm9sX2VudHJ5IGNvbnN0ICYgc3ltYikKK3sKKwlwYWlyPHN5bWJvbHNfdDo6aXRlcmF0b3IsIGJvb2w+IHAgPSBzeW1ib2xzLmluc2VydChzeW1iKTsKKwlpZiAoIXAuc2Vjb25kKSB7CisJCS8vIHNhZmU6IGNvdW50IGlzIG5vdCB1c2VkIGJ5IHNvcnRpbmcgY3JpdGVyaWEKKwkJc3ltYm9sX2VudHJ5ICogc3ltYm9sID0gY29uc3RfY2FzdDxzeW1ib2xfZW50cnkqPigmKnAuZmlyc3QpOworCQlzeW1ib2wtPnNhbXBsZS5jb3VudHMgKz0gc3ltYi5zYW1wbGUuY291bnRzOworCX0KKworCXJldHVybiAmKnAuZmlyc3Q7Cit9CisKKworc3ltYm9sX2NvbGxlY3Rpb24gY29uc3QKK3N5bWJvbF9jb250YWluZXI6OmZpbmQoZGVidWdfbmFtZV9pZCBmaWxlbmFtZSwgc2l6ZV90IGxpbmVucikgY29uc3QKK3sKKwlidWlsZF9ieV9sb2MoKTsKKworCXN5bWJvbF9lbnRyeSBzeW1ib2w7CisJc3ltYm9sLnNhbXBsZS5maWxlX2xvYy5maWxlbmFtZSA9IGZpbGVuYW1lOworCXN5bWJvbC5zYW1wbGUuZmlsZV9sb2MubGluZW5yID0gbGluZW5yOworCisJc3ltYm9sX2NvbGxlY3Rpb24gcmVzdWx0OworCisJdHlwZWRlZiBzeW1ib2xzX2J5X2xvY190Ojpjb25zdF9pdGVyYXRvciBpdDsKKwlwYWlyPGl0LCBpdD4gcF9pdCA9IHN5bWJvbHNfYnlfbG9jLmVxdWFsX3JhbmdlKCZzeW1ib2wpOworCWZvciAoIDsgcF9pdC5maXJzdCAhPSBwX2l0LnNlY29uZDsgKytwX2l0LmZpcnN0KQorCQlyZXN1bHQucHVzaF9iYWNrKCpwX2l0LmZpcnN0KTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKKworc3ltYm9sX2NvbGxlY3Rpb24gY29uc3QKK3N5bWJvbF9jb250YWluZXI6OmZpbmQoZGVidWdfbmFtZV9pZCBmaWxlbmFtZSkgY29uc3QKK3sKKwlidWlsZF9ieV9sb2MoKTsKKworCXN5bWJvbF9lbnRyeSBzeW1ib2w7CisJc3ltYm9sLnNhbXBsZS5maWxlX2xvYy5maWxlbmFtZSA9IGZpbGVuYW1lOworCXN5bWJvbC5zYW1wbGUuZmlsZV9sb2MubGluZW5yID0gMDsKKworCXR5cGVkZWYgc3ltYm9sc19ieV9sb2NfdDo6Y29uc3RfaXRlcmF0b3IgaXQ7CisJaXQgZmlyc3QgPSBzeW1ib2xzX2J5X2xvYy5sb3dlcl9ib3VuZCgmc3ltYm9sKTsKKwlzeW1ib2wuc2FtcGxlLmZpbGVfbG9jLmxpbmVuciA9ICh1bnNpZ25lZCBpbnQpc2l6ZV90KC0xKTsKKwlpdCBsYXN0ICA9IHN5bWJvbHNfYnlfbG9jLnVwcGVyX2JvdW5kKCZzeW1ib2wpOworCisJc3ltYm9sX2NvbGxlY3Rpb24gcmVzdWx0OworCWZvciAoIDsgZmlyc3QgIT0gbGFzdCA7ICsrZmlyc3QpCisJCXJlc3VsdC5wdXNoX2JhY2soKmZpcnN0KTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKKwordm9pZCBzeW1ib2xfY29udGFpbmVyOjpidWlsZF9ieV9sb2MoKSBjb25zdAoreworCWlmICghc3ltYm9sc19ieV9sb2MuZW1wdHkoKSkKKwkJcmV0dXJuOworCisJc3ltYm9sc190Ojpjb25zdF9pdGVyYXRvciBjaXQgPSBzeW1ib2xzLmJlZ2luKCk7CisJc3ltYm9sc190Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBzeW1ib2xzLmVuZCgpOworCWZvciAoOyBjaXQgIT0gZW5kOyArK2NpdCkKKwkJc3ltYm9sc19ieV9sb2MuaW5zZXJ0KCYqY2l0KTsKK30KKworCitzeW1ib2xfZW50cnkgY29uc3QgKiBzeW1ib2xfY29udGFpbmVyOjpmaW5kX2J5X3ZtYShzdHJpbmcgY29uc3QgJiBpbWFnZV9uYW1lLAorCQkJCQkJICAgYmZkX3ZtYSB2bWEpIGNvbnN0Cit7CisJLy8gRklYTUU6IHRoaXMgaXMgdG9vIGluZWZmaWNpZW50IHByb2JhYmx5CisJc3ltYm9sc190Ojpjb25zdF9pdGVyYXRvciBpdDsKKwlmb3IgKGl0ID0gc3ltYm9scy5iZWdpbigpOyBpdCAhPSBzeW1ib2xzLmVuZCgpOyArK2l0KSB7CisJCWlmIChpdC0+c2FtcGxlLnZtYSA9PSB2bWEgJiYKKwkJICAgIGltYWdlX25hbWVzLm5hbWUoaXQtPmltYWdlX25hbWUpID09IGltYWdlX25hbWUpCisJCQlyZXR1cm4gJippdDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworCitzeW1ib2xfY29udGFpbmVyOjpzeW1ib2xzX3Q6Oml0ZXJhdG9yIHN5bWJvbF9jb250YWluZXI6OmJlZ2luKCkKK3sKKwlyZXR1cm4gc3ltYm9scy5iZWdpbigpOworfQorCisKK3N5bWJvbF9jb250YWluZXI6OnN5bWJvbHNfdDo6aXRlcmF0b3Igc3ltYm9sX2NvbnRhaW5lcjo6ZW5kKCkKK3sKKwlyZXR1cm4gc3ltYm9scy5lbmQoKTsKK30KKworc3ltYm9sX2VudHJ5IGNvbnN0ICogc3ltYm9sX2NvbnRhaW5lcjo6ZmluZChzeW1ib2xfZW50cnkgY29uc3QgJiBzeW1ib2wpIGNvbnN0Cit7CisJc3ltYm9sc190Ojpjb25zdF9pdGVyYXRvciBpdCA9IHN5bWJvbHMuZmluZChzeW1ib2wpOworCXJldHVybiBpdCA9PSBzeW1ib2xzLmVuZCgpID8gMCA6ICYqaXQ7Cit9CmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9saWJwcC9zeW1ib2xfY29udGFpbmVyLmggYi9vcHJvZmlsZS0wLjkuNy9saWJwcC9zeW1ib2xfY29udGFpbmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGM3NjRlMQotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2xpYnBwL3N5bWJvbF9jb250YWluZXIuaApAQCAtMCwwICsxLDk0IEBACisvKioKKyAqIEBmaWxlIHN5bWJvbF9jb250YWluZXIuaAorICogSW50ZXJuYWwgY29udGFpbmVyIGZvciBzeW1ib2xzCisgKgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMiwgMjAwMyBPUHJvZmlsZSBhdXRob3JzCisgKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORworICoKKyAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQorICogQGF1dGhvciBKb2huIExldm9uCisgKi8KKworI2lmbmRlZiBTWU1CT0xfQ09OVEFJTkVSX0gKKyNkZWZpbmUgU1lNQk9MX0NPTlRBSU5FUl9ICisKKyNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8c2V0PgorCisjaW5jbHVkZSAic3ltYm9sLmgiCisjaW5jbHVkZSAic3ltYm9sX2Z1bmN0b3JzLmgiCisKKy8qKgorICogQW4gYXJiaXRyYXJ5IGNvbnRhaW5lciBvZiBzeW1ib2xzLiBTdXBwb3J0cyBsb29rdXAKKyAqIGJ5IG5hbWUsIGJ5IFZNQSwgYW5kIGJ5IGZpbGUgbG9jYXRpb24uCisgKgorICogTG9va3VwIGJ5IG5hbWUgb3IgYnkgVk1BIGlzIE8obikuIExvb2t1cCBieSBmaWxlIGxvY2F0aW9uCisgKiBpcyBPKGxvZyhuKSkuCisgKi8KK2NsYXNzIHN5bWJvbF9jb250YWluZXIgeworcHVibGljOgorCS8vLyBjb250YWluZXIgdHlwZQorCXR5cGVkZWYgc3RkOjpzZXQ8c3ltYm9sX2VudHJ5LCBsZXNzX3N5bWJvbD4gc3ltYm9sc190OworCisJdHlwZWRlZiBzeW1ib2xzX3Q6OnNpemVfdHlwZSBzaXplX3R5cGU7CisKKwkvLy8gcmV0dXJuIHRoZSBudW1iZXIgb2Ygc3ltYm9scyBzdG9yZWQKKwlzaXplX3R5cGUgc2l6ZSgpIGNvbnN0OworCisJLyoqCisJICogSW5zZXJ0IGEgbmV3IHN5bWJvbC4gSWYgdGhlIHN5bWJvbCBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgY29udGFpbmVyLAorCSAqIHRoZW4gdGhlIHNhbXBsZSBjb3VudHMgYXJlIGFjY3VtdWxhdGVkLgorCSAqIFJldHVybnMgdGhlIG5ld2x5IGNyZWF0ZWQgc3ltYm9sIG9yIHRoZSBleGlzdGluZyBvbmUuIFRoaXMgcG9pbnRlcgorCSAqIHJlbWFpbnMgdmFsaWQgZHVyaW5nIHRoZSB3aG9sZSBsaWZlIHRpbWUgb2YgYSBzeW1ib2xfY29udGFpbmVyCisJICogb2JqZWN0IGFuZCBpcyB3YXJyYW50ZWQgdW5pcXVlIGFjY29yZGluZyB0byBsZXNzX3N5bWJvbCBjb21wYXJhdG9yLgorCSAqIENhbiBvbmx5IGJlIGRvbmUgYmVmb3JlIGFueSBmaWxlLWxvY2F0aW9uIGJhc2VkIGxvb2t1cHMsIHNpbmNlIHRoZQorCSAqIHR3byBsb29rdXAgbWV0aG9kcyBhcmUgbm90IHN5bmNocm9uaXNlZC4KKwkgKi8KKwlzeW1ib2xfZW50cnkgY29uc3QgKiBpbnNlcnQoc3ltYm9sX2VudHJ5IGNvbnN0ICYpOworCisJLy8vIGZpbmQgdGhlIHN5bWJvbHMgYXQgdGhlIGdpdmVuIGZpbGVuYW1lIGFuZCBsaW5lIG51bWJlciwgaWYgYW55CisJc3ltYm9sX2NvbGxlY3Rpb24gY29uc3QgZmluZChkZWJ1Z19uYW1lX2lkIGZpbGVuYW1lLCBzaXplX3QgbGluZW5yKSBjb25zdDsKKworCS8vLyBmaW5kIHRoZSBzeW1ib2xzIGRlZmluZWQgaW4gdGhlIGdpdmVuIGZpbGVuYW1lLCBpZiBhbnkKKwlzeW1ib2xfY29sbGVjdGlvbiBjb25zdCBmaW5kKGRlYnVnX25hbWVfaWQgZmlsZW5hbWUpIGNvbnN0OworCisJLy8vIGZpbmQgdGhlIHN5bWJvbCB3aXRoIHRoZSBnaXZlbiBpbWFnZV9uYW1lIHZtYSBpZiBhbnkKKwlzeW1ib2xfZW50cnkgY29uc3QgKiBmaW5kX2J5X3ZtYShzdGQ6OnN0cmluZyBjb25zdCAmIGltYWdlX25hbWUsCisJCQkJCSBiZmRfdm1hIHZtYSkgY29uc3Q7CisKKwkvLy8gU2VhcmNoIGEgc3ltYm9sLiBSZXR1cm4gTlVMTCBpZiBub3QgZm91bmQuCisJc3ltYm9sX2VudHJ5IGNvbnN0ICogZmluZChzeW1ib2xfZW50cnkgY29uc3QgJiBzeW1ib2wpIGNvbnN0OworCisJLy8vIHJldHVybiBzdGFydCBvZiBzeW1ib2xzCisJc3ltYm9sc190OjppdGVyYXRvciBiZWdpbigpOworCisJLy8vIHJldHVybiBlbmQgb2Ygc3ltYm9scworCXN5bWJvbHNfdDo6aXRlcmF0b3IgZW5kKCk7CisKK3ByaXZhdGU6CisJLy8vIGJ1aWxkIHRoZSBzeW1ib2wgYnkgZmlsZS1sb2NhdGlvbiBjYWNoZQorCXZvaWQgYnVpbGRfYnlfbG9jKCkgY29uc3Q7CisKKwkvKioKKwkgKiBUaGUgbWFpbiBjb250YWluZXIgb2Ygc3ltYm9scy4gTXVsdGlwbGUgc3ltYm9scyB3aXRoIHRoZSBzYW1lCisJICogbmFtZSBhcmUgYWxsb3dlZC4KKwkgKi8KKwlzeW1ib2xzX3Qgc3ltYm9sczsKKworCS8qKgorCSAqIERpZmZlcmVudGx5LW5hbWVkIHN5bWJvbCBhdCBzYW1lIGZpbGUgbG9jYXRpb24gYXJlIGFsbG93ZWQgZS5nLgorCSAqIHRlbXBsYXRlIGluc3RhbnRpYXRpb24uCisJICovCisJdHlwZWRlZiBzdGQ6Om11bHRpc2V0PHN5bWJvbF9lbnRyeSBjb25zdCAqLCBsZXNzX2J5X2ZpbGVfbG9jPgorCQlzeW1ib2xzX2J5X2xvY190OworCisJLy8gbXVzdCBiZSBkZWNsYXJlZCBhZnRlciB0aGUgc2V0IHRvIGVuc3VyZSBhIGNvcnJlY3QgbGlmZS10aW1lLgorCisJLyoqCisJICogU3ltYm9scyBzb3J0ZWQgYnkgbG9jYXRpb24gb3JkZXIuIExhemlseSBidWlsdCBvbiByZXF1ZXN0LAorCSAqIHNvIG11dGFibGUuCisJICovCisJbXV0YWJsZSBzeW1ib2xzX2J5X2xvY190IHN5bWJvbHNfYnlfbG9jOworfTsKKworI2VuZGlmIC8qIFNZTUJPTF9DT05UQUlORVJfSCAqLwpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvbGlicHAvc3ltYm9sX2Z1bmN0b3JzLmNwcCBiL29wcm9maWxlLTAuOS43L2xpYnBwL3N5bWJvbF9mdW5jdG9ycy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQxMDdjMwotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2xpYnBwL3N5bWJvbF9mdW5jdG9ycy5jcHAKQEAgLTAsMCArMSwzMCBAQAorLyoqCisgKiBAZmlsZSBzeW1ib2xfZnVuY3RvcnMuY3BwCisgKiBGdW5jdG9ycyBmb3Igc3ltYm9sL3NhbXBsZSBjb21wYXJpc29uCisgKgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMiBPUHJvZmlsZSBhdXRob3JzCisgKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORworICoKKyAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQorICogQGF1dGhvciBKb2huIExldm9uCisgKi8KKworI2luY2x1ZGUgInN5bWJvbF9mdW5jdG9ycy5oIgorCitib29sIGxlc3Nfc3ltYm9sOjpvcGVyYXRvcigpKHN5bWJvbF9lbnRyeSBjb25zdCAmIGxocywKKwkJCSAgICAgc3ltYm9sX2VudHJ5IGNvbnN0ICYgcmhzKSBjb25zdAoreworCWlmIChsaHMuaW1hZ2VfbmFtZSAhPSByaHMuaW1hZ2VfbmFtZSkKKwkJcmV0dXJuIGxocy5pbWFnZV9uYW1lIDwgcmhzLmltYWdlX25hbWU7CisKKwlpZiAobGhzLmFwcF9uYW1lICE9IHJocy5hcHBfbmFtZSkKKwkJcmV0dXJuIGxocy5hcHBfbmFtZSA8IHJocy5hcHBfbmFtZTsKKworCWlmIChsaHMubmFtZSAhPSByaHMubmFtZSkKKwkJcmV0dXJuIGxocy5uYW1lIDwgcmhzLm5hbWU7CisKKwlpZiAobGhzLnNhbXBsZS52bWEgIT0gcmhzLnNhbXBsZS52bWEpCisJCXJldHVybiBsaHMuc2FtcGxlLnZtYSA8IHJocy5zYW1wbGUudm1hOworCisJcmV0dXJuIGxocy5zaXplIDwgcmhzLnNpemU7Cit9CmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9saWJwcC9zeW1ib2xfZnVuY3RvcnMuaCBiL29wcm9maWxlLTAuOS43L2xpYnBwL3N5bWJvbF9mdW5jdG9ycy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzYTcyNTMKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9saWJwcC9zeW1ib2xfZnVuY3RvcnMuaApAQCAtMCwwICsxLDM4IEBACisvKioKKyAqIEBmaWxlIHN5bWJvbF9mdW5jdG9ycy5oCisgKiBGdW5jdG9ycyBmb3Igc3ltYm9sL3NhbXBsZSBjb21wYXJpc29uCisgKgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMiwgMjAwMyBPUHJvZmlsZSBhdXRob3JzCisgKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORworICoKKyAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQorICogQGF1dGhvciBKb2huIExldm9uCisgKi8KKworI2lmbmRlZiBTWU1CT0xfRlVOQ1RPUlNfSAorI2RlZmluZSBTWU1CT0xfRlVOQ1RPUlNfSAorCisjaW5jbHVkZSAic3ltYm9sLmgiCisKKy8vLyBjb21wYXJlIGJhc2VkIG9uIGZpbGUgbG9jYXRpb24KK3N0cnVjdCBsZXNzX2J5X2ZpbGVfbG9jIHsKKwlib29sIG9wZXJhdG9yKCkoc2FtcGxlX2VudHJ5IGNvbnN0ICogbGhzLAorCQkJc2FtcGxlX2VudHJ5IGNvbnN0ICogcmhzKSBjb25zdCB7CisJCXJldHVybiBsaHMtPmZpbGVfbG9jIDwgcmhzLT5maWxlX2xvYzsKKwl9CisKKwlib29sIG9wZXJhdG9yKCkoc3ltYm9sX2VudHJ5IGNvbnN0ICogbGhzLAorCQkJc3ltYm9sX2VudHJ5IGNvbnN0ICogcmhzKSBjb25zdCB7CisJCXJldHVybiBsaHMtPnNhbXBsZS5maWxlX2xvYyA8IHJocy0+c2FtcGxlLmZpbGVfbG9jOworCX0KK307CisKKworLy8vIGNvbXBhcmUgYmFzZWQgb24gc3ltYm9sIGNvbnRlbnRzCitzdHJ1Y3QgbGVzc19zeW1ib2wgeworCS8vIGltcGxlbWVudGF0aW9uIGNvbXBhcmUgYnkgaWQgcmF0aGVyIHRoYW4gYnkgc3RyaW5nCisJYm9vbCBvcGVyYXRvcigpKHN5bWJvbF9lbnRyeSBjb25zdCAmIGxocywKKwkJCXN5bWJvbF9lbnRyeSBjb25zdCAmIHJocykgY29uc3Q7Cit9OworCisjZW5kaWYgLyogU1lNQk9MX0ZVTkNUT1JTX0ggKi8KZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2xpYnBwL3N5bWJvbF9zb3J0LmNwcCBiL29wcm9maWxlLTAuOS43L2xpYnBwL3N5bWJvbF9zb3J0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTFmZTI4Ci0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvbGlicHAvc3ltYm9sX3NvcnQuY3BwCkBAIC0wLDAgKzEsMTkwIEBACisvKioKKyAqIEBmaWxlIHN5bWJvbF9zb3J0LmNwcAorICogU29ydGluZyBzeW1ib2xzCisgKgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMiwgMjAwMyBPUHJvZmlsZSBhdXRob3JzCisgKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORworICoKKyAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQorICogQGF1dGhvciBKb2huIExldm9uCisgKi8KKworI2luY2x1ZGUgInN5bWJvbF9zb3J0LmgiCisjaW5jbHVkZSAic3ltYm9sX2Z1bmN0b3JzLmgiCisKKyNpbmNsdWRlICJuYW1lX3N0b3JhZ2UuaCIKKyNpbmNsdWRlICJvcF9leGNlcHRpb24uaCIKKworI2luY2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRlIDxzc3RyZWFtPgorCit1c2luZyBuYW1lc3BhY2Ugc3RkOworCituYW1lc3BhY2UgeworCitib29sIGxvbmdfZmlsZW5hbWVzOworCitpbnQgaW1hZ2VfY29tcGFyZShpbWFnZV9uYW1lX2lkIGwsIGltYWdlX25hbWVfaWQgcikKK3sKKwlpZiAobG9uZ19maWxlbmFtZXMpCisJCXJldHVybiBpbWFnZV9uYW1lcy5uYW1lKGwpLmNvbXBhcmUoaW1hZ2VfbmFtZXMubmFtZShyKSk7CisJcmV0dXJuIGltYWdlX25hbWVzLmJhc2VuYW1lKGwpLmNvbXBhcmUoaW1hZ2VfbmFtZXMuYmFzZW5hbWUocikpOworfQorCisKK2ludCBkZWJ1Z19jb21wYXJlKGRlYnVnX25hbWVfaWQgbCwgZGVidWdfbmFtZV9pZCByKQoreworCWlmIChsb25nX2ZpbGVuYW1lcykKKwkJcmV0dXJuIGRlYnVnX25hbWVzLm5hbWUobCkuY29tcGFyZShkZWJ1Z19uYW1lcy5uYW1lKHIpKTsKKwlyZXR1cm4gZGVidWdfbmFtZXMuYmFzZW5hbWUobCkuY29tcGFyZShkZWJ1Z19uYW1lcy5iYXNlbmFtZShyKSk7Cit9CisKKworaW50IGNvbXBhcmVfYnkoc29ydF9vcHRpb25zOjpzb3J0X29yZGVyIG9yZGVyLAorICAgICAgICAgICAgICAgc3ltYm9sX2VudHJ5IGNvbnN0ICYgbGhzLCBzeW1ib2xfZW50cnkgY29uc3QgJiByaHMpCit7CisJc3dpdGNoIChvcmRlcikgeworCQljYXNlIHNvcnRfb3B0aW9uczo6c2FtcGxlOgorCQkJaWYgKGxocy5zYW1wbGUuY291bnRzWzBdIDwgcmhzLnNhbXBsZS5jb3VudHNbMF0pCisJCQkJcmV0dXJuIDE7CisJCQlpZiAobGhzLnNhbXBsZS5jb3VudHNbMF0gPiByaHMuc2FtcGxlLmNvdW50c1swXSkKKwkJCQlyZXR1cm4gLTE7CisJCQlyZXR1cm4gMDsKKworCQljYXNlIHNvcnRfb3B0aW9uczo6c3ltYm9sOgorCQkJcmV0dXJuIHN5bWJvbF9uYW1lcy5kZW1hbmdsZShsaHMubmFtZSkuY29tcGFyZSgKKwkJCQlzeW1ib2xfbmFtZXMuZGVtYW5nbGUocmhzLm5hbWUpKTsKKworCQljYXNlIHNvcnRfb3B0aW9uczo6aW1hZ2U6CisJCQlyZXR1cm4gaW1hZ2VfY29tcGFyZShsaHMuaW1hZ2VfbmFtZSwgcmhzLmltYWdlX25hbWUpOworCisJCWNhc2Ugc29ydF9vcHRpb25zOjphcHBfbmFtZToKKwkJCXJldHVybiBpbWFnZV9jb21wYXJlKGxocy5hcHBfbmFtZSwgcmhzLmFwcF9uYW1lKTsKKworCQljYXNlIHNvcnRfb3B0aW9uczo6dm1hOgorCQkJaWYgKGxocy5zYW1wbGUudm1hIDwgcmhzLnNhbXBsZS52bWEpCisJCQkJcmV0dXJuIC0xOworCQkJaWYgKGxocy5zYW1wbGUudm1hID4gcmhzLnNhbXBsZS52bWEpCisJCQkJcmV0dXJuIDE7CisJCQlyZXR1cm4gMDsKKworCQljYXNlIHNvcnRfb3B0aW9uczo6ZGVidWc6IHsKKwkJCWZpbGVfbG9jYXRpb24gY29uc3QgJiBmMSA9IGxocy5zYW1wbGUuZmlsZV9sb2M7CisJCQlmaWxlX2xvY2F0aW9uIGNvbnN0ICYgZjIgPSByaHMuc2FtcGxlLmZpbGVfbG9jOworCQkJaW50IHJldCA9IGRlYnVnX2NvbXBhcmUoZjEuZmlsZW5hbWUsIGYyLmZpbGVuYW1lKTsKKwkJCWlmIChyZXQgPT0gMCkKKwkJCQlyZXQgPSBmMS5saW5lbnIgLSBmMi5saW5lbnI7CisJCQlyZXR1cm4gcmV0OworCQl9CisKKwkJZGVmYXVsdDogeworCQkJLy8gc3RhdGljX2Nhc3Q8PiB0byBzaHV0IHVwIGcrKyAyLjkxLjY2IHdoaWNoIHdhcm4KKwkJCS8vIGFib3V0IGFtYmlndWl0eSBiZXR3ZWVuIDw8KGludCkgYW5kIDw8KGxvbmcgaW50KQorCQkJb3N0cmluZ3N0cmVhbSBvczsKKwkJCW9zIDw8ICJjb21wYXJlX2J5KCk6IHVua25vd24gc29ydCBvcHRpb246ICIKKwkJCSAgIDw8IHN0YXRpY19jYXN0PGludD4ob3JkZXIpIDw8IGVuZGw7CisJCQl0aHJvdyBvcF9mYXRhbF9lcnJvcihvcy5zdHIoKSk7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworCitzdHJ1Y3Qgc3ltYm9sX2NvbXBhcmUgeworCXN5bWJvbF9jb21wYXJlKHZlY3Rvcjxzb3J0X29wdGlvbnM6OnNvcnRfb3JkZXI+IGNvbnN0ICYgb3JkZXIsCisJICAgICAgICAgICAgICAgYm9vbCByZXZlcnNlKQorCQk6IGNvbXBhcmVfb3JkZXIob3JkZXIpLCByZXZlcnNlX3NvcnQocmV2ZXJzZSkge30KKworCWJvb2wgb3BlcmF0b3IoKShzeW1ib2xfZW50cnkgY29uc3QgKiBsaHMsCisJCQlzeW1ib2xfZW50cnkgY29uc3QgKiByaHMpIGNvbnN0IHsKKwkJcmV0dXJuIG9wZXJhdG9yKCkoKmxocywgKnJocyk7CisJfQorCisJYm9vbCBvcGVyYXRvcigpKHN5bWJvbF9lbnRyeSBjb25zdCAmIGxocywKKwkJCXN5bWJvbF9lbnRyeSBjb25zdCAmIHJocykgY29uc3Q7CisKK3Byb3RlY3RlZDoKKwl2ZWN0b3I8c29ydF9vcHRpb25zOjpzb3J0X29yZGVyPiBjb25zdCAmIGNvbXBhcmVfb3JkZXI7CisJYm9vbCByZXZlcnNlX3NvcnQ7Cit9OworCisKK2Jvb2wgc3ltYm9sX2NvbXBhcmU6Om9wZXJhdG9yKCkoc3ltYm9sX2VudHJ5IGNvbnN0ICYgbGhzLAorCQkJCXN5bWJvbF9lbnRyeSBjb25zdCAmIHJocykgY29uc3QKK3sKKwlmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvbXBhcmVfb3JkZXIuc2l6ZSgpOyArK2kpIHsKKwkJaW50IHJldCA9IGNvbXBhcmVfYnkoY29tcGFyZV9vcmRlcltpXSwgbGhzLCByaHMpOworCisJCWlmIChyZXZlcnNlX3NvcnQpCisJCQlyZXQgPSAtcmV0OworCQlpZiAocmV0ICE9IDApCisJCQlyZXR1cm4gcmV0IDwgMDsKKwl9CisJcmV0dXJuIGZhbHNlOworfQorCisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCisKK3ZvaWQgc29ydF9vcHRpb25zOjoKK3NvcnQoc3ltYm9sX2NvbGxlY3Rpb24gJiBzeW1zLCBib29sIHJldmVyc2Vfc29ydCwgYm9vbCBsZikgY29uc3QKK3sKKwlsb25nX2ZpbGVuYW1lcyA9IGxmOworCisJdmVjdG9yPHNvcnRfb3JkZXI+IHNvcnRfb3B0aW9uKG9wdGlvbnMpOworCWZvciAoc29ydF9vcmRlciBjdXIgPSBmaXJzdDsgY3VyICE9IGxhc3Q7IGN1ciA9IHNvcnRfb3JkZXIoY3VyICsgMSkpIHsKKwkJaWYgKGZpbmQoc29ydF9vcHRpb24uYmVnaW4oKSwgc29ydF9vcHRpb24uZW5kKCksIGN1cikgPT0KKwkJICAgIHNvcnRfb3B0aW9uLmVuZCgpKQorCQkJc29ydF9vcHRpb24ucHVzaF9iYWNrKGN1cik7CisJfQorCisJc3RhYmxlX3NvcnQoc3ltcy5iZWdpbigpLCBzeW1zLmVuZCgpLAorCSAgICAgICAgICAgIHN5bWJvbF9jb21wYXJlKHNvcnRfb3B0aW9uLCByZXZlcnNlX3NvcnQpKTsKK30KKworCit2b2lkIHNvcnRfb3B0aW9uczo6Citzb3J0KGRpZmZfY29sbGVjdGlvbiAmIHN5bXMsIGJvb2wgcmV2ZXJzZV9zb3J0LCBib29sIGxmKSBjb25zdAoreworCWxvbmdfZmlsZW5hbWVzID0gbGY7CisKKwl2ZWN0b3I8c29ydF9vcmRlcj4gc29ydF9vcHRpb24ob3B0aW9ucyk7CisJZm9yIChzb3J0X29yZGVyIGN1ciA9IGZpcnN0OyBjdXIgIT0gbGFzdDsgY3VyID0gc29ydF9vcmRlcihjdXIgKyAxKSkgeworCQlpZiAoZmluZChzb3J0X29wdGlvbi5iZWdpbigpLCBzb3J0X29wdGlvbi5lbmQoKSwgY3VyKSA9PQorCQkgICAgc29ydF9vcHRpb24uZW5kKCkpCisJCQlzb3J0X29wdGlvbi5wdXNoX2JhY2soY3VyKTsKKwl9CisKKwlzdGFibGVfc29ydChzeW1zLmJlZ2luKCksIHN5bXMuZW5kKCksCisJICAgICAgICAgICAgc3ltYm9sX2NvbXBhcmUoc29ydF9vcHRpb24sIHJldmVyc2Vfc29ydCkpOworfQorCisKK3ZvaWQgc29ydF9vcHRpb25zOjphZGRfc29ydF9vcHRpb24oc3RyaW5nIGNvbnN0ICYgbmFtZSkKK3sKKwlpZiAobmFtZSA9PSAidm1hIikgeworCQlvcHRpb25zLnB1c2hfYmFjayh2bWEpOworCX0gZWxzZSBpZiAobmFtZSA9PSAic2FtcGxlIikgeworCQlvcHRpb25zLnB1c2hfYmFjayhzYW1wbGUpOworCX0gZWxzZSBpZiAobmFtZSA9PSAic3ltYm9sIikgeworCQlvcHRpb25zLnB1c2hfYmFjayhzeW1ib2wpOworCX0gZWxzZSBpZiAobmFtZSA9PSAiZGVidWciKSB7CisJCW9wdGlvbnMucHVzaF9iYWNrKGRlYnVnKTsKKwl9IGVsc2UgaWYgKG5hbWUgPT0gImltYWdlIikgeworCQlvcHRpb25zLnB1c2hfYmFjayhpbWFnZSk7CisJfSBlbHNlIGlmIChuYW1lID09ICJhcHAtbmFtZSIpIHsKKwkJb3B0aW9ucy5wdXNoX2JhY2soYXBwX25hbWUpOworCX0gZWxzZSB7CisJCW9zdHJpbmdzdHJlYW0gb3M7CisJCW9zIDw8ICJ1bmtub3duIHNvcnQgb3B0aW9uOiAiIDw8IG5hbWUgPDwgZW5kbDsKKwkJdGhyb3cgb3BfZmF0YWxfZXJyb3Iob3Muc3RyKCkpOworCX0KK30KKworCit2b2lkIHNvcnRfb3B0aW9uczo6YWRkX3NvcnRfb3B0aW9uKHNvcnRfb3B0aW9uczo6c29ydF9vcmRlciBvcmRlcikKK3sKKwlvcHRpb25zLnB1c2hfYmFjayhvcmRlcik7Cit9CmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9saWJwcC9zeW1ib2xfc29ydC5oIGIvb3Byb2ZpbGUtMC45LjcvbGlicHAvc3ltYm9sX3NvcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYWRjOTI4Ci0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvbGlicHAvc3ltYm9sX3NvcnQuaApAQCAtMCwwICsxLDUzIEBACisvKioKKyAqIEBmaWxlIHN5bWJvbF9zb3J0LmgKKyAqIFNvcnRpbmcgc3ltYm9scworICoKKyAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDIsIDIwMDMgT1Byb2ZpbGUgYXV0aG9ycworICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKKyAqCisgKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKKyAqIEBhdXRob3IgSm9obiBMZXZvbgorICovCisKKyNpZm5kZWYgU1lNQk9MX1NPUlRfSAorI2RlZmluZSBTWU1CT0xfU09SVF9ICisKKyNpbmNsdWRlICJzeW1ib2wuaCIKKworI2luY2x1ZGUgPHZlY3Rvcj4KKyNpbmNsdWRlIDxzdHJpbmc+CisKK3N0cnVjdCBzb3J0X29wdGlvbnMgeworCWVudW0gc29ydF9vcmRlciB7CisJCS8vIG9yZGVyIGdpdmUgc29ydCBvcmRlciBpZiBjYWxsZXIgZG9lc24ndCBzcGVjaWZ5IG9uZQorCQlmaXJzdCwKKwkJc2FtcGxlID0gZmlyc3QsCisJCWltYWdlLAorCQlhcHBfbmFtZSwKKwkJc3ltYm9sLAorCQlkZWJ1ZywKKwkJdm1hLAorCQlsYXN0CisJfTsKKworCXNvcnRfb3B0aW9ucygpIHt9CisKKwl2b2lkIGFkZF9zb3J0X29wdGlvbihzdGQ6OnN0cmluZyBjb25zdCAmIG5hbWUpOworCXZvaWQgYWRkX3NvcnRfb3B0aW9uKHNvcnRfb3JkZXIgb3JkZXIpOworCisJLyoqCisJICogU29ydCB0aGUgZ2l2ZW4gY29udGFpbmVyIGJ5IHRoZSBnaXZlbiBjcml0ZXJpYS4KKwkgKi8KKwl2b2lkIHNvcnQoc3ltYm9sX2NvbGxlY3Rpb24gJiBzeW1zLCBib29sIHJldmVyc2Vfc29ydCwKKwkgICAgICAgICAgYm9vbCBsb25nX2ZpbGVuYW1lcykgY29uc3Q7CisKKwkvKioKKwkgKiBTb3J0IHRoZSBnaXZlbiBjb250YWluZXIgYnkgdGhlIGdpdmVuIGNyaXRlcmlhLgorCSAqLworCXZvaWQgc29ydChkaWZmX2NvbGxlY3Rpb24gJiBzeW1zLCBib29sIHJldmVyc2Vfc29ydCwKKwkgICAgICAgICAgYm9vbCBsb25nX2ZpbGVuYW1lcykgY29uc3Q7CisKKwlzdGQ6OnZlY3Rvcjxzb3J0X29yZGVyPiBvcHRpb25zOworfTsKKworI2VuZGlmIC8vIFNZTUJPTF9TT1JUX0gKZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2xpYnBwL3htbF91dGlscy5jcHAgYi9vcHJvZmlsZS0wLjkuNy9saWJwcC94bWxfdXRpbHMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlMTg5ZjgKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9saWJwcC94bWxfdXRpbHMuY3BwCkBAIC0wLDAgKzEsMTAzOCBAQAorLyoqCisgKiBAZmlsZSB4bWxfdXRpbHMuY3BwCisgKiB1dGlsaXR5IHJvdXRpbmVzIGZvciBnZW5lcmF0aW5nIFhNTAorICoKKyAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDYgT1Byb2ZpbGUgYXV0aG9ycworICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKKyAqCisgKiBAYXV0aG9yIERhdmUgTm9tdXJhCisgKi8KKworI2luY2x1ZGUgPGlvc3RyZWFtPgorI2luY2x1ZGUgPHNzdHJlYW0+CisKKyNpbmNsdWRlICJ4bWxfdXRpbHMuaCIKKyNpbmNsdWRlICJmb3JtYXRfb3V0cHV0LmgiCisjaW5jbHVkZSAiYXJyYW5nZV9wcm9maWxlcy5oIgorI2luY2x1ZGUgIm9wX2JmZC5oIgorI2luY2x1ZGUgImN2ZXJiLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisKK2Jvb2wgd2FudF94bWwgPSBmYWxzZTsKKworc2l6ZV90IG5yX2NsYXNzZXMgPSAwOworc2l6ZV90IG5yX2NwdXMgPSAwOworc2l6ZV90IG5yX2V2ZW50cyA9IDA7CitzeW1faXRlcmF0b3Igc3ltYm9sc19iZWdpbjsKK3N5bV9pdGVyYXRvciBzeW1ib2xzX2VuZDsKKy8vIGhhbmRsZSBvbiB4bWxfZm9ybWF0dGVyIG9iamVjdAorZm9ybWF0X291dHB1dDo6eG1sX2Zvcm1hdHRlciAqIHhtbF9vdXQ7Cit4bWxfdXRpbHMgKiB4bWxfc3VwcG9ydDsKK3NpemVfdCB4bWxfdXRpbHM6OmV2ZW50c19pbmRleCA9IDA7Citib29sIHhtbF91dGlsczo6aGFzX25vbnplcm9fbWFza3MgPSBmYWxzZTsKK29zdHJpbmdzdHJlYW0geG1sX29wdGlvbnM7CisKKworCituYW1lc3BhY2UgeworCitib29sIGhhc19zZXBhcmF0ZWRfY3B1X2luZm8oKQoreworCXJldHVybiBjbGFzc2VzLnZbMF0ucHRlbXBsYXRlLmNwdSAhPSAiYWxsIjsKK30KKworCitzdHJpbmcgZ2V0X2V2ZW50X251bShzaXplX3QgcGNsYXNzKQoreworCXJldHVybiBjbGFzc2VzLnZbcGNsYXNzXS5wdGVtcGxhdGUuZXZlbnQ7Cit9CisKKworc2l6ZV90IGdldF9uZXh0X2V2ZW50X251bV9wY2xhc3Moc2l6ZV90IHN0YXJ0KQoreworCXN0cmluZyBjdXJfZXZlbnQgPSBnZXRfZXZlbnRfbnVtKHN0YXJ0KTsKKwlzaXplX3QgaTsKKwlmb3IgKGkgPSBzdGFydDsKKwkJaSA8IG5yX2NsYXNzZXMgJiYgZ2V0X2V2ZW50X251bShpKSA9PSBjdXJfZXZlbnQ7CisJCSsraSkgOworCXJldHVybiBpOworfQorCisKK3ZvaWQgZHVtcF9zeW1ib2woc3RyaW5nIGNvbnN0ICYgcHJlZml4LCBzeW1faXRlcmF0b3IgaXQsIGJvb2wgd2FudF9ubCA9IHRydWUpCit7CisJaWYgKGl0ID09IHN5bWJvbHNfZW5kKQorCQljdmVyYiA8PCB2eG1sIDw8IHByZWZpeCA8PCAiRU5EIjsKKwllbHNlCisJCWN2ZXJiIDw8IHZ4bWwgPDwgcHJlZml4IDw8IHN5bWJvbF9uYW1lcy5uYW1lKCgqaXQpLT5uYW1lKTsKKwlpZiAod2FudF9ubCkKKwkJY3ZlcmIgPDwgdnhtbCA8PCBlbmRsOworfQorCisKK3ZvaWQgZHVtcF9zeW1ib2xzKHN0cmluZyBjb25zdCAmIHByZWZpeCwgc3ltX2l0ZXJhdG9yIGIsIHN5bV9pdGVyYXRvciBlKQoreworCWlmIChiID09IChzeW1faXRlcmF0b3IpMCkKKwkJcmV0dXJuOworCisJZm9yIChzeW1faXRlcmF0b3IgaXQgPSBiOyBpdCAhPSBlOyArK2l0KQorCQlkdW1wX3N5bWJvbChwcmVmaXgsIGl0LCB0cnVlKTsKK30KKworCisKK3ZvaWQgZHVtcF9jbGFzc2VzKCkKK3sKKwljdmVyYiA8PCB2eG1sIDw8ICI8IS0tIGNsYXNzZXMgZHVtcCIgPDwgZW5kbDsKKwljdmVyYiA8PCB2eG1sIDw8IGNsYXNzZXMuZXZlbnQ7CisJY3ZlcmIgPDwgdnhtbCA8PCAiY2xhc3Nlcy5zaXplPSAiIDw8IGNsYXNzZXMudi5zaXplKCkgPDwgZW5kbDsKKwlmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNsYXNzZXMudi5zaXplKCk7ICsraSkgeworCQljdmVyYiA8PCB2eG1sIDw8ICItLS0gY2xhc3MgIiA8PCBpIDw8ICI6IiA8PCBjbGFzc2VzLnZbaV0ubmFtZSA8PCAiIC0tLSIgPDwgZW5kbDsKKwkJY3ZlcmIgPDwgdnhtbCA8PCBjbGFzc2VzLnZbaV0ucHRlbXBsYXRlOworCX0KKwljdmVyYiA8PCB2eG1sIDw8ICItLT4iIDw8IGVuZGw7Cit9CisKKworYm9vbCBoYXNfc2VwYXJhdGVkX3RocmVhZF9pbmZvKCkKK3sKKwlyZXR1cm4gY2xhc3Nlcy52WzBdLnB0ZW1wbGF0ZS50aWQgIT0gImFsbCI7Cit9CisKKworc3RyaW5nIGdldF9jcHVfbnVtKHNpemVfdCBwY2xhc3MpCit7CisJcmV0dXJuIGNsYXNzZXMudltwY2xhc3NdLnB0ZW1wbGF0ZS5jcHU7Cit9CisKKworfTsgIC8vIGFub255bW91cyBuYW1lc3BhY2UKKworeG1sX3V0aWxzOjp4bWxfdXRpbHMoZm9ybWF0X291dHB1dDo6eG1sX2Zvcm1hdHRlciAqIHhvLAorCQkgICAgIHN5bWJvbF9jb2xsZWN0aW9uIGNvbnN0ICYgcywgc2l6ZV90IG5jLAorCQkgICAgIGV4dHJhX2ltYWdlcyBjb25zdCAmIGV4dHJhKQorCToKKwloYXNfc3ViY2xhc3NlcyhmYWxzZSksCisJYnl0ZXNfaW5kZXgoMCksCisJZXh0cmFfZm91bmRfaW1hZ2VzKGV4dHJhKQoreworCXhtbF9vdXQgPSB4bzsKKwlucl9jbGFzc2VzID0gbmM7CisJc3ltYm9sc19iZWdpbiA9IHMuYmVnaW4oKTsKKwlzeW1ib2xzX2VuZCA9IHMuZW5kKCk7CisJbXVsdGlwbGVfZXZlbnRzID0gZ2V0X25leHRfZXZlbnRfbnVtX3BjbGFzcygwKSAhPSBucl9jbGFzc2VzOworCisJaWYgKGhhc19zZXBhcmF0ZWRfY3B1X2luZm8oKSkgeworCQlzaXplX3QgY3B1cyA9IDA7CisJCS8vIGNvdW50IG51bWJlciBvZiBjcHVzCisJCWZvciAoc2l6ZV90IHAgPSAwOyBwIDwgbnJfY2xhc3NlczsgKytwKSAgeworCQkJc2l6ZV90IGNwdSA9IGF0b2koY2xhc3Nlcy52W3BdLnB0ZW1wbGF0ZS5jcHUuY19zdHIoKSk7CisJCQlpZiAoY3B1ID4gY3B1cykgY3B1cyA9IGNwdTsKKwkJfQorCQkvLyBjcHVzIG5hbWVzIHN0YXJ0IHdpdGggMAorCQlucl9jcHVzID0gY3B1cyArIDE7CisJfQorfQorCisKK3N0cmluZyB4bWxfdXRpbHM6OmdldF90aW1lcl9zZXR1cChzaXplX3QgY291bnQpCit7CisJcmV0dXJuIG9wZW5fZWxlbWVudChUSU1FUl9TRVRVUCwgdHJ1ZSkgKworCQlpbml0X2F0dHIoUlRDX0lOVEVSUlVQVFMsIGNvdW50KSArIGNsb3NlX2VsZW1lbnQoKTsKK30KKworCitzdHJpbmcgeG1sX3V0aWxzOjpnZXRfZXZlbnRfc2V0dXAoc3RyaW5nIGV2ZW50LCBzaXplX3QgY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZyB1bml0X21hc2spCit7CisJb3N0cmluZ3N0cmVhbSBzdHI7CisKKwlzdHIgPDwgb3Blbl9lbGVtZW50KEVWRU5UX1NFVFVQLCB0cnVlKTsKKwlzdHIgPDwgaW5pdF9hdHRyKFRBQkxFX0lELCBldmVudHNfaW5kZXgrKyk7CisJc3RyIDw8IGluaXRfYXR0cihFVkVOVF9OQU1FLCBldmVudCk7CisJaWYgKHVuaXRfbWFzay5zaXplKCkgIT0gMCkgc3RyIDw8IGluaXRfYXR0cihVTklUX01BU0ssIHVuaXRfbWFzayk7CisJc3RyIDw8IGluaXRfYXR0cihTRVRVUF9DT1VOVCwgKHNpemVfdCljb3VudCkgKyBjbG9zZV9lbGVtZW50KCk7CisJcmV0dXJuIHN0ci5zdHIoKTsKK30KKworCitzdHJpbmcgeG1sX3V0aWxzOjpnZXRfcHJvZmlsZV9oZWFkZXIoc3RyaW5nIGNwdV9uYW1lLCBkb3VibGUgY29uc3Qgc3BlZWQpCit7CisJb3N0cmluZ3N0cmVhbSBzdHI7CisJc3RyaW5nIGNwdV90eXBlOworCXN0cmluZyBwcm9jZXNzb3I7CisJc3RyaW5nOjpzaXplX3R5cGUgc2xhc2hfcG9zID0gY3B1X25hbWUuZmluZCgiLyIpOworCisJaWYgKHNsYXNoX3BvcyA9PSBzdHJpbmc6Om5wb3MpIHsKKwkJY3B1X3R5cGUgPSBjcHVfbmFtZTsKKwkJcHJvY2Vzc29yID0gIiI7CisJfSBlbHNlIHsKKwkJY3B1X3R5cGUgPSBjcHVfbmFtZS5zdWJzdHIoMCwgc2xhc2hfcG9zKTsKKwkJcHJvY2Vzc29yID0gY3B1X25hbWUuc3Vic3RyKHNsYXNoX3BvcysxKTsKKwl9CisKKwlzdHIgPDwgaW5pdF9hdHRyKENQVV9OQU1FLCBjcHVfdHlwZSkgPDwgZW5kbDsKKwlpZiAocHJvY2Vzc29yLnNpemUoKSA+IDApIAorCQlzdHIgPDwgaW5pdF9hdHRyKFBST0NFU1NPUiwgc3RyaW5nKHByb2Nlc3NvcikpIDw8IGVuZGw7CisJaWYgKG5yX2NwdXMgPiAxKSBzdHIgPDwgaW5pdF9hdHRyKFNFUEFSQVRFRF9DUFVTLCBucl9jcHVzKSA8PCBlbmRsOworCXN0ciA8PCBpbml0X2F0dHIoTUhaLCBzcGVlZCkgPDwgZW5kbDsKKworCXJldHVybiBzdHIuc3RyKCk7Cit9CisKKwordm9pZCB4bWxfdXRpbHM6OnNldF9ucl9jcHVzKHNpemVfdCBjcHVzKQoreworCW5yX2NwdXMgPSBjcHVzOworfQorCit2b2lkIHhtbF91dGlsczo6c2V0X25yX2V2ZW50cyhzaXplX3QgZXZlbnRzKQoreworCW5yX2V2ZW50cyA9IGV2ZW50czsKK30KKwordm9pZCB4bWxfdXRpbHM6OnNldF9oYXNfbm9uemVyb19tYXNrcygpCit7CisJaGFzX25vbnplcm9fbWFza3MgPSB0cnVlOworfQorCisKK3ZvaWQgeG1sX3V0aWxzOjphZGRfb3B0aW9uKHRhZ190IHRhZywgc3RyaW5nIGNvbnN0ICYgdmFsdWUpCit7CisJeG1sX29wdGlvbnMgPDwgaW5pdF9hdHRyKHRhZywgdmFsdWUpOworfQorCisKK3ZvaWQgeG1sX3V0aWxzOjphZGRfb3B0aW9uKHRhZ190IHRhZywgbGlzdDxzdHJpbmc+IGNvbnN0ICYgdmFsdWUpCit7CisJbGlzdDxzdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBiZWdpbiA9IHZhbHVlLmJlZ2luKCk7CisJbGlzdDxzdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSB2YWx1ZS5lbmQoKTsKKwlsaXN0PHN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGNpdCA9IGJlZ2luOworCW9zdHJpbmdzdHJlYW0gc3RyOworCisJZm9yICg7IGNpdCAhPSBlbmQ7ICsrY2l0KSB7CisJCWlmIChjaXQgIT0gYmVnaW4pCisJCQlzdHIgPDwgIiwiOworCQlzdHIgPDwgKmNpdDsKKwl9CisJeG1sX29wdGlvbnMgPDwgaW5pdF9hdHRyKHRhZywgc3RyLnN0cigpKTsKK30KKworCit2b2lkIHhtbF91dGlsczo6YWRkX29wdGlvbih0YWdfdCB0YWcsIHZlY3RvcjxzdHJpbmc+IGNvbnN0ICYgdmFsdWUpCit7CisJdmVjdG9yPHN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGJlZ2luID0gdmFsdWUuYmVnaW4oKTsKKwl2ZWN0b3I8c3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gdmFsdWUuZW5kKCk7CisJdmVjdG9yPHN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGNpdCA9IGJlZ2luOworCW9zdHJpbmdzdHJlYW0gc3RyOworCisJZm9yICg7IGNpdCAhPSBlbmQ7ICsrY2l0KSB7CisJCWlmIChjaXQgIT0gYmVnaW4pCisJCQlzdHIgPDwgIiwiOworCQlzdHIgPDwgKmNpdDsKKwl9CisJeG1sX29wdGlvbnMgPDwgaW5pdF9hdHRyKHRhZywgc3RyLnN0cigpKTsKK30KKworCit2b2lkIHhtbF91dGlsczo6YWRkX29wdGlvbih0YWdfdCB0YWcsIGJvb2wgdmFsdWUpCit7CisJeG1sX29wdGlvbnMgPDwgaW5pdF9hdHRyKHRhZywgKHZhbHVlID8gInRydWUiIDogImZhbHNlIikpOworfQorCisKK3ZvaWQgeG1sX3V0aWxzOjpvdXRwdXRfeG1sX2hlYWRlcihzdHJpbmcgY29uc3QgJiBjb21tYW5kX29wdGlvbnMsCisgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZyBjb25zdCAmIGNwdV9pbmZvLCBzdHJpbmcgY29uc3QgJiBldmVudHMpCit7CisJLy8gdGhlIGludGVnZXIgcG9ydGlvbiBpbmRpY2F0ZXMgdGhlIHNjaGVtYSB2ZXJzaW9uIGFuZCBzaG91bGQgY2hhbmdlCisJLy8gYm90aCBoZXJlIGFuZCBpbiB0aGUgc2NoZW1hIGZpbGUgd2hlbiBtYWpvciBjaGFuZ2VzIGFyZSBtYWRlIHRvCisJLy8gdGhlIHNjaGVtYS4gIGNoYW5nZXMgdG8gb3ByZXBvcnQsIG9yIG1pbm9yIGNoYW5nZXMgdG8gdGhlIHNjaGVtYQorCS8vIGNhbiBiZSBpbmRpY2F0ZWQgYnkgY2hhbmdlcyB0byB0aGUgZnJhY3Rpb24gcGFydC4KKwlzdHJpbmcgY29uc3Qgc2NoZW1hX3ZlcnNpb24gPSAiMy4wIjsKKworCS8vIFRoaXMgaXMgdGhlIFhNTCB2ZXJzaW9uLCBub3Qgc2NoZW1hIHZlcnNpb24uCisJc3RyaW5nIGNvbnN0IHhtbF9oZWFkZXIgPSAiPD94bWwgdmVyc2lvbj1cIjEuMFwiID8+IjsKKworCWNvdXQgPDwgeG1sX2hlYWRlciA8PCBlbmRsOworCWNvdXQgPDwgb3Blbl9lbGVtZW50KFBST0ZJTEUsIHRydWUpOworCWNvdXQgPDwgaW5pdF9hdHRyKFNDSEVNQV9WRVJTSU9OLCBzY2hlbWFfdmVyc2lvbik7CisKKwljb3V0IDw8IGNwdV9pbmZvOworCWNvdXQgPDwgaW5pdF9hdHRyKFRJVExFLCAib3ByZXBvcnQgIiArIGNvbW1hbmRfb3B0aW9ucyk7CisJY291dCA8PCBjbG9zZV9lbGVtZW50KE5PTkUsIHRydWUpOworCisJY291dCA8PCBvcGVuX2VsZW1lbnQoT1BUSU9OUywgdHJ1ZSkgPDwgeG1sX29wdGlvbnMuc3RyKCk7CisJY291dCA8PCBjbG9zZV9lbGVtZW50KCk7CisKKwljb3V0IDw8IG9wZW5fZWxlbWVudChTRVRVUCkgPDwgZXZlbnRzOworCWNvdXQgPDwgY2xvc2VfZWxlbWVudChTRVRVUCkgPDwgZW5kbDsKK30KKworY2xhc3Mgc3ViY2xhc3NfaW5mb190IHsKK3B1YmxpYzoKKwlzdHJpbmcgdW5pdG1hc2s7CisJc3RyaW5nIHN1YmNsYXNzX25hbWU7Cit9OworCit0eXBlZGVmIGdyb3dhYmxlX3ZlY3RvcjxzdWJjbGFzc19pbmZvX3Q+IHN1YmNsYXNzX2FycmF5X3Q7Cit0eXBlZGVmIGdyb3dhYmxlX3ZlY3RvcjxzdWJjbGFzc19hcnJheV90PiBldmVudF9zdWJjbGFzc190OwordHlwZWRlZiBncm93YWJsZV92ZWN0b3I8ZXZlbnRfc3ViY2xhc3NfdD4gY3B1X3N1YmNsYXNzX3Q7CisKK3ZvaWQgeG1sX3V0aWxzOjpidWlsZF9zdWJjbGFzc2VzKG9zdHJlYW0gJiBvdXQpCit7CisJc2l6ZV90IHN1YmNsYXNzZXMgPSAwOworCXN0cmluZyBzdWJjbGFzc19uYW1lOworCS8vIHdoZW4gLS1zZXBhcmF0ZT1jcHUgd2Ugd2lsbCBoYXZlIGFuIGV2ZW50X3N1YmNsYXNzIGFycmF5IGZvciBlYWNoIGNwdQorCWNwdV9zdWJjbGFzc190IGNwdV9zdWJjbGFzc2VzOworCisJZXZlbnRfc3ViY2xhc3NfdCBldmVudF9zdWJjbGFzc2VzOworCisJaWYgKG5yX2NwdXMgPD0gMSAmJiBucl9ldmVudHMgPD0gMSAmJiAhaGFzX25vbnplcm9fbWFza3MpCisJCXJldHVybjsKKworCW91dCA8PCBvcGVuX2VsZW1lbnQoQ0xBU1NFUyk7CisJZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjbGFzc2VzLnYuc2l6ZSgpOyArK2kpIHsKKwkJcHJvZmlsZV9jbGFzcyAmIHBjbGFzcyA9IGNsYXNzZXMudltpXTsKKwkJc2l6ZV90IGV2ZW50ID0gYXRvaShwY2xhc3MucHRlbXBsYXRlLmV2ZW50LmNfc3RyKCkpOworCisJCXN1YmNsYXNzX2FycmF5X3QgKiBzY19wdHI7CisKKwkJLy8gc2VsZWN0IHRoZSByaWdodCBzdWJjbGFzcyBhcnJheQorCQlpZiAobnJfY3B1cyA9PSAxKSB7CisJCQlzY19wdHIgPSAmZXZlbnRfc3ViY2xhc3Nlc1tldmVudF07CisJCX0gZWxzZSB7CisJCQlzaXplX3QgY3B1ID0gYXRvaShwY2xhc3MucHRlbXBsYXRlLmNwdS5jX3N0cigpKTsKKwkJCXNjX3B0ciA9ICZjcHVfc3ViY2xhc3Nlc1tjcHVdW2V2ZW50XTsKKwkJfQorCisJCS8vIHNlYXJjaCBmb3IgYW4gZXhpc3RpbmcgdW5pdG1hc2sKKwkJc3ViY2xhc3NfbmFtZSA9ICIiOworCQlmb3IgKHNpemVfdCBqID0gMDsgaiA8IHNjX3B0ci0+c2l6ZSgpOyArK2opIHsKKwkJCWlmICgoKnNjX3B0cilbal0udW5pdG1hc2sgPT0gcGNsYXNzLnB0ZW1wbGF0ZS51bml0bWFzaykgeworCQkJCXN1YmNsYXNzX25hbWUgPSAoKnNjX3B0cilbal0uc3ViY2xhc3NfbmFtZTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCWlmIChzdWJjbGFzc19uYW1lLnNpemUoKSA9PSAwKSB7CisJCQlvc3RyaW5nc3RyZWFtIHN0cjsKKwkJCXNpemVfdCBuZXdfaW5kZXggPSBzY19wdHItPnNpemUoKTsKKworCQkJLy8gbm8gbWF0Y2ggZm91bmQsIGNyZWF0ZSBhIG5ldyBlbnRyeQorCQkJc3RyIDw8ICJjIiA8PCBzdWJjbGFzc2VzKys7CisJCQlzdWJjbGFzc19uYW1lID0gc3RyLnN0cigpOworCQkJKCpzY19wdHIpW25ld19pbmRleF0udW5pdG1hc2sgPSBwY2xhc3MucHRlbXBsYXRlLnVuaXRtYXNrOworCQkJKCpzY19wdHIpW25ld19pbmRleF0uc3ViY2xhc3NfbmFtZSA9IHN1YmNsYXNzX25hbWU7CisJCQlvdXQgPDwgb3Blbl9lbGVtZW50KENMQVNTLCB0cnVlKTsKKwkJCW91dCA8PCBpbml0X2F0dHIoTkFNRSwgc3ViY2xhc3NfbmFtZSk7CisJCQlpZiAobnJfY3B1cyA+IDEpIAorCQkJCW91dCA8PCBpbml0X2F0dHIoQ1BVX05VTSwgcGNsYXNzLnB0ZW1wbGF0ZS5jcHUpOworCQkJaWYgKG5yX2V2ZW50cyA+IDEpIAorCQkJCW91dCA8PCBpbml0X2F0dHIoRVZFTlRfTlVNLCBldmVudCk7CisJCQlpZiAoaGFzX25vbnplcm9fbWFza3MpIAorCQkJCW91dCA8PCBpbml0X2F0dHIoRVZFTlRfTUFTSywgcGNsYXNzLnB0ZW1wbGF0ZS51bml0bWFzayk7CisJCQlvdXQgPDwgY2xvc2VfZWxlbWVudCgpOworCQl9CisKKwkJcGNsYXNzLm5hbWUgPSBzdWJjbGFzc19uYW1lOworCX0KKwlvdXQgPDwgY2xvc2VfZWxlbWVudChDTEFTU0VTKTsKKwloYXNfc3ViY2xhc3NlcyA9IHRydWU7Cit9CisKKworc3RyaW5nCitnZXRfY291bnRzX3N0cmluZyhjb3VudF9hcnJheV90IGNvbnN0ICYgY291bnRzLCBzaXplX3QgYmVnaW4sIHNpemVfdCBlbmQpCit7CisJb3N0cmluZ3N0cmVhbSBzdHI7CisJYm9vbCBnb3RfY291bnQgPSBmYWxzZTsKKworCS8vIGlmIG5vIGNwdSBzZXBhcmF0aW9uIHRoZW4gcmV0dXJuIGEgc2ltcGxlIGNvdW50LCBvbWl0IHplcm8gY291bnRzCisJaWYgKG5yX2NwdXMgPT0gMSkgeworCQlzaXplX3QgY291bnQgPSBjb3VudHNbYmVnaW5dOworCQlpZiAoY291bnQgPT0gMCkKKwkJCXJldHVybiAiIjsKKwkJc3RyIDw8IGNvdW50OworCQlyZXR1cm4gc3RyLnN0cigpOworCX0KKworCWZvciAoc2l6ZV90IHAgPSBiZWdpbjsgcCAhPSBlbmQ7ICsrcCkgeworCQlzaXplX3QgY291bnQgPSBjb3VudHNbcF07CisJCWlmIChwICE9IGJlZ2luKSBzdHIgPDwgIiwiOworCQlpZiAoY291bnQgIT0gMCkgeworCQkJZ290X2NvdW50ID0gdHJ1ZTsKKwkJCXN0ciA8PCBjb3VudDsKKwkJfQorCX0KKwlyZXR1cm4gZ290X2NvdW50ID8gc3RyLnN0cigpIDogIiI7Cit9CisKKwordm9pZAoreG1sX3V0aWxzOjpvdXRwdXRfc3ltYm9sX2J5dGVzKG9zdHJlYW0gJiBvdXQsIHN5bWJvbF9lbnRyeSBjb25zdCAqIHN5bWIsCisJCQkgICAgICAgc2l6ZV90IHN5bV9pZCwgb3BfYmZkIGNvbnN0ICYgYWJmZCkKK3sKKwlzaXplX3Qgc2l6ZSA9IHN5bWItPnNpemU7CisJc2NvcGVkX2FycmF5PHVuc2lnbmVkIGNoYXI+IGNvbnRlbnRzKG5ldyB1bnNpZ25lZCBjaGFyW3NpemVdKTsKKwlpZiAoYWJmZC5nZXRfc3ltYm9sX2NvbnRlbnRzKHN5bWItPnN5bV9pbmRleCwgY29udGVudHMuZ2V0KCkpKSB7CisJCXN0cmluZyBjb25zdCBuYW1lID0gc3ltYm9sX25hbWVzLm5hbWUoc3ltYi0+bmFtZSk7CisJCW91dCA8PCBvcGVuX2VsZW1lbnQoQllURVMsIHRydWUpIDw8IGluaXRfYXR0cihUQUJMRV9JRCwgc3ltX2lkKTsKKwkJb3V0IDw8IGNsb3NlX2VsZW1lbnQoTk9ORSwgdHJ1ZSk7CisJCWZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CisJCQljaGFyIGhleF9tYXBbXSA9ICIwMTIzNDU2Nzg5QUJDREVGIjsKKwkJCWNoYXIgaGV4WzJdOworCQkJaGV4WzBdID0gaGV4X21hcFsoY29udGVudHNbaV0gPj4gNCkgJiAweGZdOworCQkJaGV4WzFdID0gaGV4X21hcFtjb250ZW50c1tpXSAmIDB4Zl07CisJCQlvdXQgPDwgaGV4WzBdIDw8IGhleFsxXTsKKwkJfQorCQlvdXQgPDwgY2xvc2VfZWxlbWVudChCWVRFUyk7CisJfQorfQorCisKK2Jvb2wKK3htbF91dGlsczo6b3V0cHV0X3N1bW1hcnlfZGF0YShvc3RyZWFtICYgb3V0LCBjb3VudF9hcnJheV90IGNvbnN0ICYgc3VtbWFyeSwgc2l6ZV90IHBjbGFzcykKK3sKKwlzaXplX3QgY29uc3QgY291bnQgPSBzdW1tYXJ5W3BjbGFzc107CisKKwlpZiAoY291bnQgPT0gMCkKKwkJcmV0dXJuIGZhbHNlOworCisJb3V0IDw8IG9wZW5fZWxlbWVudChDT1VOVCwgaGFzX3N1YmNsYXNzZXMpOworCWlmIChoYXNfc3ViY2xhc3NlcykgeworCQlvdXQgPDwgaW5pdF9hdHRyKENMQVNTLCBjbGFzc2VzLnZbcGNsYXNzXS5uYW1lKTsKKwkJb3V0IDw8IGNsb3NlX2VsZW1lbnQoTk9ORSwgdHJ1ZSk7CisJfQorCW91dCA8PCBjb3VudDsKKwlvdXQgPDwgY2xvc2VfZWxlbWVudChDT1VOVCk7CisJcmV0dXJuIHRydWU7Cit9CisKK2NsYXNzIG1vZHVsZV9pbmZvIHsKK3B1YmxpYzoKKwltb2R1bGVfaW5mbygpCisJCXsgbG8gPSBoaSA9IDA7IG5hbWUgPSAiIjsgYmVnaW4gPSBlbmQgPSAoc3ltX2l0ZXJhdG9yKTA7fQorCXZvaWQgZHVtcCgpOworCXZvaWQgYnVpbGRfbW9kdWxlKHN0cmluZyBjb25zdCAmIG4sIHN5bV9pdGVyYXRvciBpdCwKKwkgICAgICAgICAgICAgICAgICBzaXplX3QgbCwgc2l6ZV90IGgpOworCXN0cmluZyBnZXRfbmFtZSgpIHsgcmV0dXJuIG5hbWU7IH0KKwl2b2lkIHNldF9sbyhzaXplX3QgbCkgeyBsbyA9IGw7IH0KKwl2b2lkIHNldF9oaShzaXplX3QgaCkgeyBoaSA9IGg7IH0KKwljb3VudF9hcnJheV90IGNvbnN0ICYgZ2V0X3N1bW1hcnkoKSB7IHJldHVybiBzdW1tYXJ5OyB9CisJdm9pZCBzZXRfYmVnaW4oc3ltX2l0ZXJhdG9yIGIpOworCXZvaWQgc2V0X2VuZChzeW1faXRlcmF0b3IgZSk7CisJdm9pZCBhZGRfdG9fc3VtbWFyeShjb3VudF9hcnJheV90IGNvbnN0ICYgY291bnRzKTsKKwl2b2lkIG91dHB1dChvc3RyZWFtICYgb3V0KTsKKwlib29sIGlzX2Nsb3NlZChzdHJpbmcgY29uc3QgJiBuKTsKK3Byb3RlY3RlZDoKKwl2b2lkIG91dHB1dF9zdW1tYXJ5KG9zdHJlYW0gJiBvdXQpOworCXZvaWQgb3V0cHV0X3N5bWJvbHMob3N0cmVhbSAmIG91dCwgYm9vbCBpc19tb2R1bGUpOworCisJc3RyaW5nIG5hbWU7CisJc3ltX2l0ZXJhdG9yIGJlZ2luOworCXN5bV9pdGVyYXRvciBlbmQ7CisKKwkvLyBzdW1tYXJ5IHNhbXBsZSBkYXRhCisJY291bnRfYXJyYXlfdCBzdW1tYXJ5OworCisJLy8gcmFuZ2Ugb2YgcHJvZmlsZSBjbGFzc2VzIGFwcHJvcHJhdGUgZm9yIHRoaXMgbW9kdWxlCisJc2l6ZV90IGxvOworCXNpemVfdCBoaTsKK307CisKK2NsYXNzIHRocmVhZF9pbmZvIDogcHVibGljIG1vZHVsZV9pbmZvIHsKK3B1YmxpYzoKKwl0aHJlYWRfaW5mbygpIHsgbnJfbW9kdWxlcyA9IDA7IH0KKworCXZvaWQgYnVpbGRfdGhyZWFkKHN0cmluZyBjb25zdCAmIHRpZCwgc2l6ZV90IGwsIHNpemVfdCBoKTsKKwlib29sIGFkZF9tb2R1bGVzKHN0cmluZyBjb25zdCAmIG1vZHVsZSwgc3ltX2l0ZXJhdG9yIGl0KTsKKwl2b2lkIGFkZF9tb2R1bGVfc3ltYm9sKHN0cmluZyBjb25zdCAmIG4sIHN5bV9pdGVyYXRvciBpdCk7CisJdm9pZCBzdW1tYXJpemUoKTsKKwl2b2lkIHNldF9lbmQoc3ltX2l0ZXJhdG9yIGVuZCk7CisJc3RyaW5nIGNvbnN0IGdldF90aWQoKSB7IHJldHVybiB0aHJlYWRfaWQ7IH0KKwl2b2lkIG91dHB1dChvc3RyZWFtICYgb3V0KTsKKwl2b2lkIGR1bXAoKTsKK3ByaXZhdGU6CisJLy8gaW5kaWNlcyBpbnRvIHRoZSBjbGFzc2VzIGFycmF5IGFwcGxpY2FibGUgdG8gdGhpcyBwcm9jZXNzCisJc2l6ZV90IG5yX21vZHVsZXM7CisJc3RyaW5nIHRocmVhZF9pZDsKKwlncm93YWJsZV92ZWN0b3I8bW9kdWxlX2luZm8+IG15X21vZHVsZXM7Cit9OworCitjbGFzcyBwcm9jZXNzX2luZm8gOiBwdWJsaWMgbW9kdWxlX2luZm8geworcHVibGljOgorCXByb2Nlc3NfaW5mbygpIHsgbnJfdGhyZWFkcyA9IDA7IH0KKwl2b2lkIGJ1aWxkX3Byb2Nlc3Moc3RyaW5nIGNvbnN0ICYgcGlkLCBzaXplX3QgbCwgc2l6ZV90IGgpOworCXZvaWQgYWRkX3RocmVhZChzdHJpbmcgY29uc3QgJiB0aWQsIHNpemVfdCBsLCBzaXplX3QgaCk7CisJdm9pZCBhZGRfbW9kdWxlcyhzdHJpbmcgY29uc3QgJiBtb2R1bGUsCisJCXN0cmluZyBjb25zdCAmIGFwcF9uYW1lLCBzeW1faXRlcmF0b3IgaXQpOworCXZvaWQgc3VtbWFyaXplKCk7CisJdm9pZCBzZXRfZW5kKHN5bV9pdGVyYXRvciBlbmQpOworCXZvaWQgb3V0cHV0KG9zdHJlYW0gJiBvdXQpOworCXZvaWQgZHVtcCgpOworcHJpdmF0ZToKKwlzaXplX3QgbnJfdGhyZWFkczsKKwlzdHJpbmcgcHJvY2Vzc19pZDsKKwlncm93YWJsZV92ZWN0b3I8dGhyZWFkX2luZm8+IG15X3RocmVhZHM7CisKK307CitjbGFzcyBwcm9jZXNzX3Jvb3RfaW5mbyB7CitwdWJsaWM6CisJcHJvY2Vzc19yb290X2luZm8oKSB7IG5yX3Byb2Nlc3NlcyA9IDA7IH0KKwlwcm9jZXNzX2luZm8gKiBhZGRfcHJvY2VzcyhzdHJpbmcgY29uc3QgJiBwaWQsIHNpemVfdCBsbywgc2l6ZV90IGhpKTsKKwl2b2lkIGFkZF9tb2R1bGVzKHN0cmluZyBjb25zdCAmIG1vZHVsZSwgc3RyaW5nIGNvbnN0ICYgYXBwX25hbWUsCisJCXN5bV9pdGVyYXRvciBpdCk7CisJdm9pZCBzdW1tYXJpemUoKTsKKwl2b2lkIHN1bW1hcml6ZV9wcm9jZXNzZXMoZXh0cmFfaW1hZ2VzIGNvbnN0ICYgZXh0cmFfZm91bmRfaW1hZ2VzKTsKKwl2b2lkIHNldF9wcm9jZXNzX2VuZCgpOworCXZvaWQgb3V0cHV0X3Byb2Nlc3Nfc3ltYm9scyhvc3RyZWFtICYgb3V0KTsKKwl2b2lkIGR1bXBfcHJvY2Vzc2VzKCk7Citwcml2YXRlOgorCXNpemVfdCBucl9wcm9jZXNzZXM7CisKKwlncm93YWJsZV92ZWN0b3I8cHJvY2Vzc19pbmZvPiBwcm9jZXNzZXM7Cit9OworCitjbGFzcyBiaW5hcnlfaW5mbyA6IHB1YmxpYyBtb2R1bGVfaW5mbyB7CitwdWJsaWM6CisJYmluYXJ5X2luZm8oKSB7IG5yX21vZHVsZXMgPSAwOyB9CisJdm9pZCBvdXRwdXQob3N0cmVhbSAmIG91dCk7CisJYmluYXJ5X2luZm8gKiBidWlsZF9iaW5hcnkoc3RyaW5nIGNvbnN0ICYgbik7CisJdm9pZCBhZGRfbW9kdWxlX3N5bWJvbChzdHJpbmcgY29uc3QgJiBtb2R1bGUsIHN0cmluZyBjb25zdCAmIGFwcCwKKwkJc3ltX2l0ZXJhdG9yIGl0KTsKKwl2b2lkIGNsb3NlX2JpbmFyeShzeW1faXRlcmF0b3IgaXQpOworCXZvaWQgZHVtcCgpOworcHJpdmF0ZToKKwlzaXplX3QgbnJfbW9kdWxlczsKKworCWdyb3dhYmxlX3ZlY3Rvcjxtb2R1bGVfaW5mbz4gbXlfbW9kdWxlczsKK307CisKKworY2xhc3MgYmluYXJ5X3Jvb3RfaW5mbyB7CitwdWJsaWM6CisJYmluYXJ5X3Jvb3RfaW5mbygpIHsgbnJfYmluYXJpZXMgPSAwOyB9CisJYmluYXJ5X2luZm8gKiBhZGRfYmluYXJ5KHN0cmluZyBjb25zdCAmIG4sIHN5bV9pdGVyYXRvciBpdCk7CisJdm9pZCBzdW1tYXJpemVfYmluYXJpZXMoZXh0cmFfaW1hZ2VzIGNvbnN0ICYgZXh0cmFfZm91bmRfaW1hZ2VzKTsKKwl2b2lkIG91dHB1dF9iaW5hcnlfc3ltYm9scyhvc3RyZWFtICYgb3V0KTsKKwl2b2lkIGR1bXBfYmluYXJpZXMoKTsKK3ByaXZhdGU6CisJc2l6ZV90IG5yX2JpbmFyaWVzOworCisJZ3Jvd2FibGVfdmVjdG9yPGJpbmFyeV9pbmZvPiBiaW5hcmllczsKK307CisKK3N0YXRpYyBwcm9jZXNzX3Jvb3RfaW5mbyBwcm9jZXNzZXNfcm9vdDsKK3N0YXRpYyBiaW5hcnlfcm9vdF9pbmZvIGJpbmFyaWVzX3Jvb3Q7CisKKwordm9pZCBtb2R1bGVfaW5mbzo6CitidWlsZF9tb2R1bGUoc3RyaW5nIGNvbnN0ICYgbiwgc3ltX2l0ZXJhdG9yIGl0LCBzaXplX3QgbCwgc2l6ZV90IGgpCit7CisJbmFtZSA9IG47CisJYmVnaW4gPSBpdDsKKwlsbyA9IGw7CisJaGkgPSBoOworfQorCisKK3ZvaWQgbW9kdWxlX2luZm86OmFkZF90b19zdW1tYXJ5KGNvdW50X2FycmF5X3QgY29uc3QgJiBjb3VudHMpCit7CisJZm9yIChzaXplX3QgcGNsYXNzID0gbG8gOyBwY2xhc3MgPD0gaGk7ICsrcGNsYXNzKQorCQlzdW1tYXJ5W3BjbGFzc10gKz0gY291bnRzW3BjbGFzc107Cit9CisKKwordm9pZCBtb2R1bGVfaW5mbzo6c2V0X2JlZ2luKHN5bV9pdGVyYXRvciBiKQoreworCWlmIChiZWdpbiA9PSAoc3ltX2l0ZXJhdG9yKTApCisJCWJlZ2luID0gYjsKK30KKworCit2b2lkIG1vZHVsZV9pbmZvOjpzZXRfZW5kKHN5bV9pdGVyYXRvciBlKQoreworCWlmIChlbmQgPT0gKHN5bV9pdGVyYXRvcikwKQorCQllbmQgPSBlOworfQorCisKK2Jvb2wgbW9kdWxlX2luZm86OmlzX2Nsb3NlZChzdHJpbmcgY29uc3QgJiBuKQoreworCXJldHVybiAobmFtZSA9PSBuKSAmJiBlbmQgIT0gKHN5bV9pdGVyYXRvcikwOworfQorCisKK3ZvaWQgbW9kdWxlX2luZm86OmR1bXAoKQoreworCWN2ZXJiIDw8IHZ4bWwgPDwgIgltb2R1bGU6Y2xhc3MoIiA8PCBsbyA8PCAiLCIgPDwgaGkgPDwgIik9IjsKKwljdmVyYiA8PCB2eG1sIDw8IG5hbWUgPDwgZW5kbDsKKwlkdW1wX3N5bWJvbHMoIgkJIiwgYmVnaW4sIGVuZCk7Cit9CisKKwordm9pZCBtb2R1bGVfaW5mbzo6b3V0cHV0KG9zdHJlYW0gJiBvdXQpCit7CisJb3V0IDw8IG9wZW5fZWxlbWVudChNT0RVTEUsIHRydWUpOworCW91dCA8PCBpbml0X2F0dHIoTkFNRSwgbmFtZSkgPDwgY2xvc2VfZWxlbWVudChOT05FLCB0cnVlKTsKKwlvdXRwdXRfc3VtbWFyeShvdXQpOworCW91dHB1dF9zeW1ib2xzKG91dCwgdHJ1ZSk7CisJb3V0IDw8IGNsb3NlX2VsZW1lbnQoTU9EVUxFKTsKK30KKworCit2b2lkIG1vZHVsZV9pbmZvOjpvdXRwdXRfc3VtbWFyeShvc3RyZWFtICYgb3V0KQoreworCWZvciAoc2l6ZV90IHAgPSBsbzsgcCA8PSBoaTsgKytwKQorCQkodm9pZCl4bWxfc3VwcG9ydC0+b3V0cHV0X3N1bW1hcnlfZGF0YShvdXQsIHN1bW1hcnksIHApOworfQorCisKK3ZvaWQgbW9kdWxlX2luZm86Om91dHB1dF9zeW1ib2xzKG9zdHJlYW0gJiBvdXQsIGJvb2wgaXNfbW9kdWxlKQoreworCWlmIChiZWdpbiA9PSAoc3ltX2l0ZXJhdG9yKTApCisJCXJldHVybjsKKworCWZvciAoc3ltX2l0ZXJhdG9yIGl0ID0gYmVnaW47IGl0ICE9IGVuZDsgKytpdCkKKwkJeG1sX291dC0+b3V0cHV0X3N5bWJvbChvdXQsICppdCwgbG8sIGhpLCBpc19tb2R1bGUpOworfQorCisKK3ZvaWQgYmluYXJ5X2luZm86OmNsb3NlX2JpbmFyeShzeW1faXRlcmF0b3IgaXQpCit7CisJc2V0X2VuZChpdCk7CisJaWYgKG5yX21vZHVsZXMgPiAwKSB7CisJCW1vZHVsZV9pbmZvICYgbSA9IG15X21vZHVsZXNbbnJfbW9kdWxlcy0xXTsKKwkJbS5zZXRfZW5kKGl0KTsKKwl9Cit9CisKKwordm9pZCBiaW5hcnlfaW5mbzo6ZHVtcCgpCit7CisJY3ZlcmIgPDwgdnhtbCA8PCAiYXBwX25hbWU9IiA8PCBuYW1lIDw8IGVuZGw7CisJaWYgKGJlZ2luICE9IChzeW1faXRlcmF0b3IpMCkKKwkJZHVtcF9zeW1ib2xzKCIJIiwgYmVnaW4sIGVuZCk7CisKKwlmb3IgKHNpemVfdCBpID0gMDsgaSA8IG5yX21vZHVsZXM7ICsraSkKKwkJbXlfbW9kdWxlc1tpXS5kdW1wKCk7Cit9CisKKwordm9pZCBiaW5hcnlfaW5mbzo6CithZGRfbW9kdWxlX3N5bWJvbChzdHJpbmcgY29uc3QgJiBtb2R1bGUsIHN0cmluZyBjb25zdCAmIGFwcCwKKwlzeW1faXRlcmF0b3IgaXQpCit7CisJc2l6ZV90IG0gPSBucl9tb2R1bGVzOworCisJaWYgKG1vZHVsZSA9PSBhcHApIHsKKwkJLy8gc2V0IGJlZ2luIHN5bWJvbCBmb3IgYmluYXJ5IGlmIG5vdCBzZXQKKwkJc2V0X2JlZ2luKGl0KTsKKworCQlpZiAobSA+IDApIHsKKwkJCS8vIGNsb3NlIG91dCBjdXJyZW50IG1vZHVsZQorCQkJbW9kdWxlX2luZm8gJiBtb2QgPSBteV9tb2R1bGVzW20tMV07CisJCQltb2Quc2V0X2VuZChpdCk7CisJCX0KKworCQkvLyBhZGQgc3ltYm9sIGNvdW50IHRvIGJpbmFyeSBjb3VudAorCQlhZGRfdG9fc3VtbWFyeSgoKml0KS0+c2FtcGxlLmNvdW50cyk7CisJCXJldHVybjsKKwl9CisKKwlzdHJpbmcgY3VycmVudF9tb2R1bGVfbmFtZSA9IChtID09IDAgPyAiIiA6IG15X21vZHVsZXNbbS0xXS5nZXRfbmFtZSgpKTsKKwlpZiAobW9kdWxlICE9IGN1cnJlbnRfbW9kdWxlX25hbWUpIHsKKwkJLy8gd2UgaGF2ZSBhIG1vZHVsZSBkaXN0aW5jdCBmcm9tIGl0J3MgYmluYXJ5OiAtLXNlcGFyYXRlPWxpYgorCQkvLyBhbmQgdGhpcyBpcyB0aGUgZmlyc3Qgc3ltYm9sIGZvciB0aGlzIG1vZHVsZQorCQlpZiAobSAhPSAwKSB7CisJCQkvLyBjbG9zZSBvdXQgY3VycmVudCBtb2R1bGUKKwkJCW1vZHVsZV9pbmZvICYgbW9kID0gbXlfbW9kdWxlc1ttLTFdOworCQkJbW9kLnNldF9lbmQoaXQpOworCQkJYWRkX3RvX3N1bW1hcnkobW9kLmdldF9zdW1tYXJ5KCkpOworCQl9CisKKwkJLy8gbWFyayBlbmQgb2YgZW5jbG9zaW5nIGJpbmFyeSBzeW1ib2xzIGlmIHRoZXJlIGhhdmUgYmVlbiBhbnkKKwkJLy8gTk9URTogaXQgaXMgcG9zc2libGUgZm9yIHRoZSBiaW5hcnkncyBzeW1ib2xzIHRvIGZvbGxvdyBpdHMKKwkJLy8gbW9kdWxlIHN5bWJvbHMKKwkJaWYgKGJlZ2luICE9IChzeW1faXRlcmF0b3IpMCAmJiBlbmQgPT0gKHN5bV9pdGVyYXRvcikwKQorCQkJc2V0X2VuZChpdCk7CisKKwkJLy8gYnVpbGQgdGhlIG5ldyBtb2R1bGUKKwkJbnJfbW9kdWxlcysrOworCQlteV9tb2R1bGVzW21dLmJ1aWxkX21vZHVsZShtb2R1bGUsIGl0LCAwLCBucl9jbGFzc2VzLTEpOworCX0KKworCS8vIHByb3BhZ2F0ZSB0aGlzIHN5bWJvbHMgY291bnRzIHRvIHRoZSBtb2R1bGUKKwlteV9tb2R1bGVzW25yX21vZHVsZXMtMV0uYWRkX3RvX3N1bW1hcnkoKCppdCktPnNhbXBsZS5jb3VudHMpOworfQorCisKK3ZvaWQgYmluYXJ5X3Jvb3RfaW5mbzo6CitzdW1tYXJpemVfYmluYXJpZXMoZXh0cmFfaW1hZ2VzIGNvbnN0ICYgZXh0cmFfZm91bmRfaW1hZ2VzKQoreworCWJpbmFyeV9pbmZvICogY3VycmVudF9iaW5hcnkgPSAwOworCXN0cmluZyBjdXJyZW50X2JpbmFyeV9uYW1lID0gIiI7CisKKwlmb3IgKHN5bV9pdGVyYXRvciBpdCA9IHN5bWJvbHNfYmVnaW4gOyBpdCAhPSBzeW1ib2xzX2VuZDsgKytpdCkgeworCQlzdHJpbmcgYmluYXJ5ID0gZ2V0X2ltYWdlX25hbWUoKCppdCktPmFwcF9uYW1lLAorCQkJaW1hZ2VfbmFtZV9zdG9yYWdlOjppbnRfZmlsZW5hbWUsIGV4dHJhX2ZvdW5kX2ltYWdlcyk7CisJCXN0cmluZyBtb2R1bGUgPSBnZXRfaW1hZ2VfbmFtZSgoKml0KS0+aW1hZ2VfbmFtZSwKKwkJCWltYWdlX25hbWVfc3RvcmFnZTo6aW50X2ZpbGVuYW1lLCBleHRyYV9mb3VuZF9pbWFnZXMpOworCisJCWlmIChiaW5hcnkgIT0gY3VycmVudF9iaW5hcnlfbmFtZSkgeworCQkJY3VycmVudF9iaW5hcnkgPSBiaW5hcmllc19yb290LmFkZF9iaW5hcnkoYmluYXJ5LCBpdCk7CisJCQljdXJyZW50X2JpbmFyeV9uYW1lID0gYmluYXJ5OworCQl9CisKKwkJY3VycmVudF9iaW5hcnktPmFkZF9tb2R1bGVfc3ltYm9sKG1vZHVsZSwgYmluYXJ5LCBpdCk7CisJfQorCisJLy8gY2xvc2Ugb3V0IGxhc3QgYmluYXJ5IGFuZCBtb2R1bGUKKwljdXJyZW50X2JpbmFyeS0+Y2xvc2VfYmluYXJ5KHN5bWJvbHNfZW5kKTsKK30KKworCitwcm9jZXNzX2luZm8gKgorcHJvY2Vzc19yb290X2luZm86OmFkZF9wcm9jZXNzKHN0cmluZyBjb25zdCAmIHBpZCwgc2l6ZV90IGxvLCBzaXplX3QgaGkpCit7CisJcHJvY2Vzc2VzW25yX3Byb2Nlc3Nlc10uYnVpbGRfcHJvY2VzcyhwaWQsIGxvLCBoaSk7CisJcmV0dXJuICZwcm9jZXNzZXNbbnJfcHJvY2Vzc2VzKytdOworfQorCisKK3ZvaWQgcHJvY2Vzc19yb290X2luZm86OgorYWRkX21vZHVsZXMoc3RyaW5nIGNvbnN0ICYgbW9kdWxlLCBzdHJpbmcgY29uc3QgJiBhcHBfbmFtZSwKKwlzeW1faXRlcmF0b3IgaXQpCit7CisJZm9yIChzaXplX3QgcCA9IDA7IHAgPCBucl9wcm9jZXNzZXM7ICsrcCkKKwkJcHJvY2Vzc2VzW3BdLmFkZF9tb2R1bGVzKG1vZHVsZSwgYXBwX25hbWUsIGl0KTsKK30KKworCisKK3ZvaWQgcHJvY2Vzc19yb290X2luZm86OnN1bW1hcml6ZSgpCit7CisJZm9yIChzaXplX3QgcCA9IDA7IHAgPCBucl9wcm9jZXNzZXM7ICsrcCkKKwkJcHJvY2Vzc2VzW3BdLnN1bW1hcml6ZSgpOworfQorCisKK3ZvaWQgcHJvY2Vzc19yb290X2luZm86Ogorc3VtbWFyaXplX3Byb2Nlc3NlcyhleHRyYV9pbWFnZXMgY29uc3QgJiBleHRyYV9mb3VuZF9pbWFnZXMpCit7CisJLy8gYWRkIG1vZHVsZXMgdG8gdGhlIGFwcHJvcHJpYXRlIHRocmVhZHMgaW4gdGhlIHByb2Nlc3MgaGllcmFyY2h5CisJZm9yIChzeW1faXRlcmF0b3IgaXQgPSBzeW1ib2xzX2JlZ2luIDsgaXQgIT0gc3ltYm9sc19lbmQ7ICsraXQpIHsKKwkJc3RyaW5nIGJpbmFyeSA9IGdldF9pbWFnZV9uYW1lKCgqaXQpLT5hcHBfbmFtZSwgCisJCQlpbWFnZV9uYW1lX3N0b3JhZ2U6OmludF9maWxlbmFtZSwgZXh0cmFfZm91bmRfaW1hZ2VzKTsKKwkJc3RyaW5nIG1vZHVsZSA9IGdldF9pbWFnZV9uYW1lKCgqaXQpLT5pbWFnZV9uYW1lLAorCQkJaW1hZ2VfbmFtZV9zdG9yYWdlOjppbnRfZmlsZW5hbWUsIGV4dHJhX2ZvdW5kX2ltYWdlcyk7CisKKwkJcHJvY2Vzc2VzX3Jvb3QuYWRkX21vZHVsZXMobW9kdWxlLCBiaW5hcnksIGl0KTsKKwl9CisKKwkvLyBzZXQgZW5kIHN5bWJvbCBib3VuZGFyeSBmb3IgYWxsIG1vZHVsZXMgaW4gYWxsIHRocmVhZHMKKwlwcm9jZXNzZXNfcm9vdC5zZXRfcHJvY2Vzc19lbmQoKTsKKworCS8vIHByb3BhZ2F0ZSBzdW1tYXJpZXMgdG8gcHJvY2Vzcy90aHJlYWQKKwlwcm9jZXNzZXNfcm9vdC5zdW1tYXJpemUoKTsKK30KKworCit2b2lkIHByb2Nlc3Nfcm9vdF9pbmZvOjpzZXRfcHJvY2Vzc19lbmQoKQoreworCWZvciAoc2l6ZV90IHAgPSAwOyBwIDwgbnJfcHJvY2Vzc2VzOyArK3ApCisJCXByb2Nlc3Nlc1twXS5zZXRfZW5kKHN5bWJvbHNfZW5kKTsKK30KKwordm9pZCBwcm9jZXNzX3Jvb3RfaW5mbzo6b3V0cHV0X3Byb2Nlc3Nfc3ltYm9scyhvc3RyZWFtICYgb3V0KQoreworCWZvciAoc2l6ZV90IHAgPSAwOyBwIDwgbnJfcHJvY2Vzc2VzOyArK3ApCisJCXByb2Nlc3Nlc1twXS5vdXRwdXQob3V0KTsKK30KKworCit2b2lkIHByb2Nlc3Nfcm9vdF9pbmZvOjpkdW1wX3Byb2Nlc3NlcygpCit7CisJY3ZlcmIgPDwgdnhtbCA8PCAiPCEtLSBwcm9jZXNzZXNfZHVtcDoiIDw8IGVuZGw7CisJZm9yIChzaXplX3QgcCA9IDA7IHAgPCBucl9wcm9jZXNzZXM7ICsrcCkKKwkJcHJvY2Vzc2VzW3BdLmR1bXAoKTsKKwljdmVyYiA8PCB2eG1sIDw8ICJlbmQgcHJvY2Vzc2VzX2R1bXAgLS0+IiA8PCBlbmRsOworfQorCitiaW5hcnlfaW5mbyAqCitiaW5hcnlfaW5mbzo6YnVpbGRfYmluYXJ5KHN0cmluZyBjb25zdCAmIG4pCit7CisJbmFtZSA9IG47CisJbG8gPSAwOworCWhpID0gbnJfY2xhc3Nlcy0xOworCXJldHVybiB0aGlzOworfQorCisKK3ZvaWQgYmluYXJ5X2luZm86Om91dHB1dChvc3RyZWFtICYgb3V0KQoreworCW91dCA8PCBvcGVuX2VsZW1lbnQoQklOQVJZLCB0cnVlKTsKKwlvdXQgPDwgaW5pdF9hdHRyKE5BTUUsIG5hbWUpIDw8IGNsb3NlX2VsZW1lbnQoTk9ORSwgdHJ1ZSk7CisKKwlvdXRwdXRfc3VtbWFyeShvdXQpOworCW91dHB1dF9zeW1ib2xzKG91dCwgZmFsc2UpOworCWZvciAoc2l6ZV90IGEgPSAwOyBhIDwgbnJfbW9kdWxlczsgKythKQorCQlteV9tb2R1bGVzW2FdLm91dHB1dChvdXQpOworCisJb3V0IDw8IGNsb3NlX2VsZW1lbnQoQklOQVJZKTsKK30KKworCitiaW5hcnlfaW5mbyAqCitiaW5hcnlfcm9vdF9pbmZvOjphZGRfYmluYXJ5KHN0cmluZyBjb25zdCAmIG4sIHN5bV9pdGVyYXRvciBpdCkKK3sKKwlzaXplX3QgYSA9IG5yX2JpbmFyaWVzKys7CisKKwkvLyBjbG9zZSBvdXQgcHJldmlvdXMgYmluYXJ5IGFuZCBtb2R1bGUKKwlpZiAoYSA+IDApIGJpbmFyaWVzW2EtMV0uY2xvc2VfYmluYXJ5KGl0KTsKKwlyZXR1cm4gYmluYXJpZXNbYV0uYnVpbGRfYmluYXJ5KG4pOworfQorCisKK3ZvaWQgYmluYXJ5X3Jvb3RfaW5mbzo6b3V0cHV0X2JpbmFyeV9zeW1ib2xzKG9zdHJlYW0gJiBvdXQpCit7CisJZm9yIChzaXplX3QgYSA9IDA7IGEgPCBucl9iaW5hcmllczsgKythKQorCQliaW5hcmllc1thXS5vdXRwdXQob3V0KTsKK30KKworCit2b2lkIGJpbmFyeV9yb290X2luZm86OmR1bXBfYmluYXJpZXMoKQoreworCWN2ZXJiIDw8IHZ4bWwgPDwgIjwhLS0gYmluYXJpZXNfZHVtcDoiIDw8IGVuZGw7CisJZm9yIChzaXplX3QgcCA9IDA7IHAgPCBucl9iaW5hcmllczsgKytwKQorCQliaW5hcmllc1twXS5kdW1wKCk7CisJY3ZlcmIgPDwgdnhtbCA8PCAiZW5kIHByb2Nlc3Nlc19kdW1wIC0tPiIgPDwgZW5kbDsKK30KKworCit2b2lkIHByb2Nlc3NfaW5mbzo6YnVpbGRfcHJvY2VzcyhzdHJpbmcgY29uc3QgJiBwaWQsIHNpemVfdCBsLCBzaXplX3QgaCkKK3sKKwlwcm9jZXNzX2lkID0gcGlkOworCWxvID0gbDsKKwloaSA9IGg7Cit9CisKKwordm9pZCBwcm9jZXNzX2luZm86OmFkZF90aHJlYWQoc3RyaW5nIGNvbnN0ICYgdGlkLCBzaXplX3QgbCwgc2l6ZV90IGgpCit7CisJbXlfdGhyZWFkc1tucl90aHJlYWRzKytdLmJ1aWxkX3RocmVhZCh0aWQsIGwsIGgpOworfQorCisKK3ZvaWQgcHJvY2Vzc19pbmZvOjphZGRfbW9kdWxlcyhzdHJpbmcgY29uc3QgJiBtb2R1bGUsCisJc3RyaW5nIGNvbnN0ICYgYXBwX25hbWUsIHN5bV9pdGVyYXRvciBpdCkKK3sKKwlib29sIGFkZGVkID0gZmFsc2U7CisJZm9yIChzaXplX3QgdCA9IDA7IHQgPCBucl90aHJlYWRzOyArK3QpCisJCWFkZGVkIHw9IG15X3RocmVhZHNbdF0uYWRkX21vZHVsZXMobW9kdWxlLCBpdCk7CisJaWYgKGFkZGVkICYmIG5hbWUuc2l6ZSgpID09IDApIG5hbWUgPSBhcHBfbmFtZTsKK30KKworCit2b2lkIHByb2Nlc3NfaW5mbzo6c3VtbWFyaXplKCkKK3sKKwlmb3IgKHNpemVfdCB0ID0gMDsgdCA8IG5yX3RocmVhZHM7ICsrdCkgeworCQl0aHJlYWRfaW5mbyAmIHRociA9IG15X3RocmVhZHNbdF07CisJCXRoci5zdW1tYXJpemUoKTsKKwkJYWRkX3RvX3N1bW1hcnkodGhyLmdldF9zdW1tYXJ5KCkpOworCX0KK30KKworCit2b2lkIHRocmVhZF9pbmZvOjpidWlsZF90aHJlYWQoc3RyaW5nIGNvbnN0ICYgdGlkLCBzaXplX3QgbCwgc2l6ZV90IGgpCit7CisJdGhyZWFkX2lkID0gdGlkOworCWxvID0gbDsKKwloaSA9IGg7Cit9CisKKwordm9pZCB0aHJlYWRfaW5mbzo6c3VtbWFyaXplKCkKK3sKKwlmb3IgKHNpemVfdCBtID0gMDsgbSA8IG5yX21vZHVsZXM7ICsrbSkKKwkJYWRkX3RvX3N1bW1hcnkobXlfbW9kdWxlc1ttXS5nZXRfc3VtbWFyeSgpKTsKK30KKworCit2b2lkIHRocmVhZF9pbmZvOjpzZXRfZW5kKHN5bV9pdGVyYXRvciBlbmQpCit7CisJZm9yIChzaXplX3QgbSA9IDA7IG0gPCBucl9tb2R1bGVzOyArK20pCisJCW15X21vZHVsZXNbbV0uc2V0X2VuZChlbmQpOworfQorCisKK3ZvaWQgdGhyZWFkX2luZm86OmFkZF9tb2R1bGVfc3ltYm9sKHN0cmluZyBjb25zdCAmIG4sIHN5bV9pdGVyYXRvciBpdCkKK3sKKwltb2R1bGVfaW5mbyAmIG0gPSBteV9tb2R1bGVzW25yX21vZHVsZXMrK107CisJbS5idWlsZF9tb2R1bGUobiwgaXQsIGxvLCBoaSk7CisJbS5hZGRfdG9fc3VtbWFyeSgoKml0KS0+c2FtcGxlLmNvdW50cyk7Cit9CisKK3ZvaWQgdGhyZWFkX2luZm86Om91dHB1dChvc3RyZWFtICYgb3V0KQoreworCW9zdHJpbmdzdHJlYW0gdGhyZWFkX3N1bW1hcnk7CisJb3N0cmluZ3N0cmVhbSBtb2R1bGVzX291dHB1dDsKKworCW91dHB1dF9zdW1tYXJ5KHRocmVhZF9zdW1tYXJ5KTsKKworCWZvciAoc2l6ZV90IG0gPSAwOyBtIDwgbnJfbW9kdWxlczsgKyttKQorCQlteV9tb2R1bGVzW21dLm91dHB1dChtb2R1bGVzX291dHB1dCk7CisKKwkvLyBpZ25vcmUgdGhyZWFkcyB3aXRoIG5vIHNhbXBsZSBkYXRhCisJaWYgKG1vZHVsZXNfb3V0cHV0LnN0cigpLnNpemUoKSA9PSAwICYmIHRocmVhZF9zdW1tYXJ5LnN0cigpLnNpemUoKSA9PSAwKQorCQlyZXR1cm47CisKKwlvdXQgPDwgb3Blbl9lbGVtZW50KFRIUkVBRCwgdHJ1ZSk7CisJb3V0IDw8IGluaXRfYXR0cihUSFJFQURfSUQsIHRocmVhZF9pZCkgPDwgY2xvc2VfZWxlbWVudChOT05FLCB0cnVlKTsKKwlvdXQgPDwgdGhyZWFkX3N1bW1hcnkuc3RyKCk7CisJb3V0IDw8IG1vZHVsZXNfb3V0cHV0LnN0cigpOworCW91dCA8PCBjbG9zZV9lbGVtZW50KFRIUkVBRCk7Cit9CisKKworYm9vbCB0aHJlYWRfaW5mbzo6YWRkX21vZHVsZXMoc3RyaW5nIGNvbnN0ICYgbW9kdWxlLCBzeW1faXRlcmF0b3IgaXQpCit7CisJc3RyaW5nIG9sZF9uYW1lID0KKwkJKG5yX21vZHVsZXMgPT0gMCA/ICIiIDogbXlfbW9kdWxlc1tucl9tb2R1bGVzLTFdLmdldF9uYW1lKCkpOworCWlmIChucl9tb2R1bGVzID4gMCAmJiBvbGRfbmFtZSAhPSBtb2R1bGUpIHsKKwkJbW9kdWxlX2luZm8gJiBtID0gbXlfbW9kdWxlc1tucl9tb2R1bGVzLTFdOworCQkvLyBjbG9zZSBvdXQgcHJldmlvdXMgbW9kdWxlIGlmIGl0IGhhc24ndCBhbHJlYWR5IGJlZW4gY2xvc2VkIG91dAorCQlpZiAoIW0uaXNfY2xvc2VkKG9sZF9uYW1lKSkKKwkJCW0uc2V0X2VuZChpdCk7CisJfQorCisJLy8gYWRkIGEgbmV3IG1vZHVsZSBmb3IgdGhpcyBzeW1ib2wgaWYgaXQgaGFzIGEgbm9uLXplcm8gY291bnQKKwlpZiAobnJfbW9kdWxlcyA9PSAwIHx8IG1vZHVsZSAhPSBvbGRfbmFtZSkgeworCQlpZiAoaGFzX3NhbXBsZV9jb3VudHMoKCppdCktPnNhbXBsZS5jb3VudHMsIGxvLCBoaSkpIHsKKwkJCWFkZF9tb2R1bGVfc3ltYm9sKG1vZHVsZSwgaXQpOworCQkJcmV0dXJuIHRydWU7CisJCX0KKwl9IGVsc2UgeworCQkvLyBwcm9wYWdhdGUgc3ltYm9scyBjb3VudCB0byBtb2R1bGUKKwkJbXlfbW9kdWxlc1tucl9tb2R1bGVzLTFdLmFkZF90b19zdW1tYXJ5KCgqaXQpLT5zYW1wbGUuY291bnRzKTsKKwl9CisJcmV0dXJuIGZhbHNlOworfQorCisKK3ZvaWQgdGhyZWFkX2luZm86OmR1bXAoKQoreworCWN2ZXJiIDw8IHZ4bWwgPDwgInRpZD0iIDw8IHRocmVhZF9pZCA8PCBlbmRsOworCWZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnJfbW9kdWxlczsgKytpKQorCQlteV9tb2R1bGVzW2ldLmR1bXAoKTsKK30KKworCit2b2lkIHByb2Nlc3NfaW5mbzo6c2V0X2VuZChzeW1faXRlcmF0b3IgZW5kKQoreworCWZvciAoc2l6ZV90IHQgPSAwOyB0IDwgbnJfdGhyZWFkczsgKyt0KQorCQlteV90aHJlYWRzW3RdLnNldF9lbmQoZW5kKTsKK30KKworCit2b2lkIHByb2Nlc3NfaW5mbzo6b3V0cHV0KG9zdHJlYW0gJiBvdXQpCit7CisJb3N0cmluZ3N0cmVhbSBwcm9jZXNzX3N1bW1hcnk7CisJb3N0cmluZ3N0cmVhbSB0aHJlYWRfb3V0cHV0OworCisJb3V0cHV0X3N1bW1hcnkocHJvY2Vzc19zdW1tYXJ5KTsKKworCWZvciAoc2l6ZV90IHQgPSAwOyB0IDwgbnJfdGhyZWFkczsgKyt0KQorCQlteV90aHJlYWRzW3RdLm91dHB1dCh0aHJlYWRfb3V0cHV0KTsKKworCS8vIGlnbm9yZSBwcm9jZXNzZXMgd2l0aCBubyBzYW1wbGUgZGF0YQorCWlmICh0aHJlYWRfb3V0cHV0LnN0cigpLnNpemUoKSA9PSAwICYmIHByb2Nlc3Nfc3VtbWFyeS5zdHIoKS5zaXplKCkgPT0gMCkKKwkJcmV0dXJuOworCisJb3V0IDw8IG9wZW5fZWxlbWVudChQUk9DRVNTLCB0cnVlKTsKKwlvdXQgPDwgaW5pdF9hdHRyKFBST0NfSUQsIHByb2Nlc3NfaWQpOworCW91dCA8PCBpbml0X2F0dHIoTkFNRSwgbmFtZSkgPDwgY2xvc2VfZWxlbWVudChOT05FLCB0cnVlKTsKKwlvdXQgPDwgcHJvY2Vzc19zdW1tYXJ5LnN0cigpOworCW91dCA8PCB0aHJlYWRfb3V0cHV0LnN0cigpOworCW91dCA8PCBjbG9zZV9lbGVtZW50KFBST0NFU1MpOworfQorCisKK3ZvaWQgcHJvY2Vzc19pbmZvOjpkdW1wKCkKK3sKKwljdmVyYiA8PCB2eG1sIDw8ICJwaWQ9IiA8PCBwcm9jZXNzX2lkIDw8ICIgYXBwPSIgPDwgbmFtZSA8PCBlbmRsOworCWZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnJfdGhyZWFkczsgKytpKQorCQlteV90aHJlYWRzW2ldLmR1bXAoKTsKK30KKworc2l6ZV90IGdldF9uZXh0X3RnaWRfcGNsYXNzKHNpemVfdCBzdGFydCkKK3sKKwlzdHJpbmcgY3VyX3RnaWQgPSBjbGFzc2VzLnZbc3RhcnRdLnB0ZW1wbGF0ZS50Z2lkOworCXNpemVfdCBpID0gc3RhcnQ7CisJZm9yIChpID0gc3RhcnQ7CisJCWkgPCBucl9jbGFzc2VzICYmIGNsYXNzZXMudltpXS5wdGVtcGxhdGUudGdpZCA9PSBjdXJfdGdpZDsKKwkJKytpKSA7CisJcmV0dXJuIGk7Cit9CisKKworc2l6ZV90IGdldF9uZXh0X3RpZF9wY2xhc3Moc2l6ZV90IHN0YXJ0KQoreworCXN0cmluZyBjdXJfdGlkID0gY2xhc3Nlcy52W3N0YXJ0XS5wdGVtcGxhdGUudGlkOworCXNpemVfdCBpOworCWZvciAoaSA9IHN0YXJ0OworCQlpIDwgbnJfY2xhc3NlcyAmJiBjbGFzc2VzLnZbaV0ucHRlbXBsYXRlLnRpZCA9PSBjdXJfdGlkOworCQkrK2kpIDsKKwlyZXR1cm4gaTsKK30KKworCisvLyBidWlsZCB0aGUgcHJvY2Vzcy90aHJlYWQvbW9kdWxlIGhpZXJhcmNoeSB0aGF0IHdpbGwgYWxsb3cgdXMgbGF0ZXIKKy8vIHRvIGNvbGxlY3QgdGhlIHN1bW1hcnkgc2FtcGxlIGRhdGEgYXQgZWFjaCBsZXZlbCBhbmQgdGhlbgorLy8gdHJhdmVyc2UgdGhlIGhpZXJhcmNoeSB0byBpbnRlcnNwZXJzZSB0aGUgc3VtbWFyeSBkYXRhIGZvciB0aGUKKy8vIHN5bWJvbHMKK3ZvaWQgYnVpbGRfcHJvY2Vzc190cmVlKCkKK3sKKwlzaXplX3QgdGdpZCA9IDA7CisJc2l6ZV90IHRpZCA9IDA7CisKKwkvLyBidWlsZCB0aGUgc3RydWN0dXJlIHJlcHJlc2VudGluZyB0aGUgcHJvY2Vzcy90aHJlYWQvbW9kdWxlIGhpZXJhcmNoeQorCS8vIGZvciBob2xkaW5nIHRoZSBzdW1tYXJ5IGRhdGEgYXNzb2NpYXRlZCB3aXRoIGVhY2ggbGV2ZWwgYW5kIHRvIGJlCisJLy8gdHJhdmVyc2VkIHdoZW4gb3V0cHV0dGluZyB0aGUgYm9keSBvZiB0aGUgWE1MCisJZG8geworCQlzaXplX3QgbmV4dF90Z2lkID0gZ2V0X25leHRfdGdpZF9wY2xhc3ModGdpZCk7CisJCXN0cmluZyBjb25zdCB0Z2lkX3N0ciA9IGNsYXNzZXMudlt0Z2lkXS5wdGVtcGxhdGUudGdpZDsKKworCQlwcm9jZXNzX2luZm8gKiBwID0gcHJvY2Vzc2VzX3Jvb3QuYWRkX3Byb2Nlc3ModGdpZF9zdHIsIHRnaWQsIG5leHRfdGdpZC0xKTsKKworCQlkbyB7CisJCQlzaXplX3QgbmV4dF90aWQgPSBnZXRfbmV4dF90aWRfcGNsYXNzKHRpZCk7CisKKwkJCS8vIGJ1aWxkIGFycmF5IG9mIHRocmVhZHMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcHJvY2VzcworCQkJcC0+YWRkX3RocmVhZChjbGFzc2VzLnZbdGlkXS5wdGVtcGxhdGUudGlkLCB0aWQsIG5leHRfdGlkLTEpOworCQkJdGlkID0gbmV4dF90aWQ7CisJCX0gd2hpbGUgKHRpZCAhPSBuZXh0X3RnaWQpOworCQl0Z2lkID0gbmV4dF90Z2lkOworCX0gd2hpbGUgKHRnaWQgIT0gbnJfY2xhc3Nlcyk7Cit9CisKK3ZvaWQgeG1sX3V0aWxzOjpvdXRwdXRfcHJvZ3JhbV9zdHJ1Y3R1cmUob3N0cmVhbSAmIG91dCkKK3sKKworCWlmIChjdmVyYiA8PCB2eG1sKQorCQlkdW1wX2NsYXNzZXMoKTsKKworCWlmIChoYXNfc2VwYXJhdGVkX3RocmVhZF9pbmZvKCkpIHsKKwkJYnVpbGRfcHJvY2Vzc190cmVlKCk7CisJCXByb2Nlc3Nlc19yb290LnN1bW1hcml6ZV9wcm9jZXNzZXMoZXh0cmFfZm91bmRfaW1hZ2VzKTsKKwkJaWYgKGN2ZXJiIDw8IHZ4bWwpCisJCQlwcm9jZXNzZXNfcm9vdC5kdW1wX3Byb2Nlc3NlcygpOworCQlwcm9jZXNzZXNfcm9vdC5vdXRwdXRfcHJvY2Vzc19zeW1ib2xzKG91dCk7CisJfSBlbHNlIHsKKwkJYmluYXJpZXNfcm9vdC5zdW1tYXJpemVfYmluYXJpZXMoZXh0cmFfZm91bmRfaW1hZ2VzKTsKKwkJaWYgKGN2ZXJiIDw8IHZ4bWwpCisJCQliaW5hcmllc19yb290LmR1bXBfYmluYXJpZXMoKTsKKwkJYmluYXJpZXNfcm9vdC5vdXRwdXRfYmluYXJ5X3N5bWJvbHMob3V0KTsKKwl9Cit9CmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9saWJwcC94bWxfdXRpbHMuaCBiL29wcm9maWxlLTAuOS43L2xpYnBwL3htbF91dGlscy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2OGU5NDMKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9saWJwcC94bWxfdXRpbHMuaApAQCAtMCwwICsxLDY1IEBACisvKioKKyAqIEBmaWxlIHhtbF91dGlscy5oCisgKiB1dGlsaXR5IHJvdXRpbmVzIGZvciBnZW5lcmF0aW5nIFhNTAorICoKKyAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDYgT1Byb2ZpbGUgYXV0aG9ycworICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKKyAqCisgKiBAYXV0aG9yIERhdmUgTm9tdXJhCisgKi8KKworI2lmbmRlZiBYTUxfVVRJTFNfSAorI2RlZmluZSBYTUxfVVRJTFNfSAorCisjaW5jbHVkZSAic3ltYm9sLmgiCisjaW5jbHVkZSAiZm9ybWF0X291dHB1dC5oIgorI2luY2x1ZGUgInhtbF9vdXRwdXQuaCIKKwordHlwZWRlZiBzeW1ib2xfY29sbGVjdGlvbjo6Y29uc3RfaXRlcmF0b3Igc3ltX2l0ZXJhdG9yOworZXh0ZXJuIGJvb2wgd2FudF94bWw7CisKK2NsYXNzIGV4dHJhX2ltYWdlczsKK2NsYXNzIG9wX2JmZDsKKworY2xhc3MgeG1sX3V0aWxzIHsKK3B1YmxpYzoKKwl4bWxfdXRpbHMoZm9ybWF0X291dHB1dDo6eG1sX2Zvcm1hdHRlciAqIHhvLAorCQlzeW1ib2xfY29sbGVjdGlvbiBjb25zdCAmIHMsIHNpemVfdCBuYywKKwkJZXh0cmFfaW1hZ2VzIGNvbnN0ICYgZXh0cmEpOworCS8vIHRoZXNlIG1lbWJlcnMgYXJlIHN0YXRpYyBiZWNhdXNlIHRoZXkgYXJlIGludm9rZWQgYmVmb3JlCisJLy8gdGhlIHhtbF91dGlscyBvYmplY3QgaGFzIGJlZW4gY3JlYXRlZAorCXN0YXRpYyBzdGQ6OnN0cmluZyBnZXRfdGltZXJfc2V0dXAoc2l6ZV90IGNvdW50KTsKKwlzdGF0aWMgc3RkOjpzdHJpbmcgZ2V0X2V2ZW50X3NldHVwKHN0ZDo6c3RyaW5nIGV2ZW50LCBzaXplX3QgY291bnQsCisJCQkJCSAgIHN0ZDo6c3RyaW5nIHVuaXRfbWFzayk7CisJc3RhdGljIHN0ZDo6c3RyaW5nIGdldF9wcm9maWxlX2hlYWRlcihzdGQ6OnN0cmluZyBjcHVfbmFtZSwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBjb25zdCBzcGVlZCk7CisJc3RhdGljIHZvaWQgc2V0X25yX2NwdXMoc2l6ZV90IGNwdXMpOworCXN0YXRpYyB2b2lkIHNldF9ucl9ldmVudHMoc2l6ZV90IGV2ZW50cyk7CisJc3RhdGljIHZvaWQgc2V0X2hhc19ub256ZXJvX21hc2tzKCk7CisJc3RhdGljIHZvaWQgYWRkX29wdGlvbih0YWdfdCB0YWcsIGJvb2wgdmFsdWUpOworCXN0YXRpYyB2b2lkIGFkZF9vcHRpb24odGFnX3QgdGFnLCBzdGQ6OnN0cmluZyBjb25zdCAmIHZhbHVlKTsKKwlzdGF0aWMgdm9pZCBhZGRfb3B0aW9uKHRhZ190IHRhZywgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0ICYgdmFsdWUpOworCXN0YXRpYyB2b2lkIGFkZF9vcHRpb24odGFnX3QgdGFnLCBzdGQ6Omxpc3Q8c3RkOjpzdHJpbmc+IGNvbnN0ICYgdmFsdWUpOworCisJc3RhdGljIHZvaWQgb3V0cHV0X3htbF9oZWFkZXIoc3RkOjpzdHJpbmcgY29uc3QgJiBjb21tYW5kX29wdGlvbnMsCisJCQkJCQkgICBzdGQ6OnN0cmluZyBjb25zdCAmIGNwdV9pbmZvLAorCQkJCQkJICAgc3RkOjpzdHJpbmcgY29uc3QgJiBldmVudHMpOworCXZvaWQgb3V0cHV0X3N5bWJvbF9ieXRlcyhzdGQ6Om9zdHJlYW0gJiBvdXQsIHN5bWJvbF9lbnRyeSBjb25zdCAqIHN5bWIsCisJICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBzeW1faWQsIG9wX2JmZCBjb25zdCAmIGFiZmQpOworCWJvb2wgb3V0cHV0X3N1bW1hcnlfZGF0YShzdGQ6Om9zdHJlYW0gJiBvdXQsIGNvdW50X2FycmF5X3QgY29uc3QgJiBzdW1tYXJ5LAorCQkJCQkJCSBzaXplX3QgcGNsYXNzKTsKKwlzaXplX3QgZ2V0X3N5bWJvbF9pbmRleChzeW1faXRlcmF0b3IgY29uc3QgaXQpOworCXZvaWQgb3V0cHV0X3Byb2dyYW1fc3RydWN0dXJlKHN0ZDo6b3N0cmVhbSAmIG91dCk7CisJdm9pZCBidWlsZF9zdWJjbGFzc2VzKHN0ZDo6b3N0cmVhbSAmIG91dCk7Citwcml2YXRlOgorCWJvb2wgbXVsdGlwbGVfZXZlbnRzOworCWJvb2wgaGFzX3N1YmNsYXNzZXM7CisJc2l6ZV90IGJ5dGVzX2luZGV4OworCWV4dHJhX2ltYWdlcyBjb25zdCAmIGV4dHJhX2ZvdW5kX2ltYWdlczsKKwlzdGF0aWMgYm9vbCBoYXNfbm9uemVyb19tYXNrczsKKwlzdGF0aWMgc2l6ZV90IGV2ZW50c19pbmRleDsKK307CisKK2V4dGVybiB4bWxfdXRpbHMgKiB4bWxfc3VwcG9ydDsKKworI2VuZGlmIC8qICFYTUxfVVRJTFNfSCAqLwpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvbGlicmVnZXgvTWFrZWZpbGUuYW0gYi9vcHJvZmlsZS0wLjkuNy9saWJyZWdleC9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTJkMzA3Ci0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvbGlicmVnZXgvTWFrZWZpbGUuYW0KQEAgLTAsMCArMSwxNyBAQAorU1VCRElSUyA9IC4gdGVzdHMKKworQU1fQ1BQRkxBR1MgPSAtSSAke3RvcF9zcmNkaXJ9L2xpYnV0aWwrKworQU1fQ1hYRkxBR1MgPSBAT1BfQ1hYRkxBR1NACisKK25vaW5zdF9MSUJSQVJJRVMgPSBsaWJvcF9yZWdleC5hCisKK2xpYm9wX3JlZ2V4X2FfU09VUkNFUyA9IFwKKwlvcF9yZWdleC5jcHAgXAorCW9wX3JlZ2V4LmggXAorCWRlbWFuZ2xlX3N5bWJvbC5oIFwKKwlkZW1hbmdsZV9zeW1ib2wuY3BwIFwKKwlkZW1hbmdsZV9qYXZhX3N5bWJvbC5oIFwKKwlkZW1hbmdsZV9qYXZhX3N5bWJvbC5jcHAKKworZGF0YWRpciA9ICQocHJlZml4KS9zaGFyZS9vcHJvZmlsZQorbm9kaXN0X2RhdGFfREFUQSA9IHN0bC5wYXQKZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2xpYnJlZ2V4L01ha2VmaWxlLmluIGIvb3Byb2ZpbGUtMC45LjcvbGlicmVnZXgvTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTU1M2U3ZQotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2xpYnJlZ2V4L01ha2VmaWxlLmluCkBAIC0wLDAgKzEsNzQ5IEBACisjIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjExLjEgZnJvbSBNYWtlZmlsZS5hbS4KKyMgQGNvbmZpZ3VyZV9pbnB1dEAKKworIyBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsCisjIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyMgSW5jLgorIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAorIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCisjIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworQFNFVF9NQUtFQAorCisKK1ZQQVRIID0gQHNyY2RpckAKK3BrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAorcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACitwa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACitwa2dsaWJleGVjZGlyID0gJChsaWJleGVjZGlyKS9AUEFDS0FHRUAKK2FtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKK2luc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0CitpbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCitpbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKK0lOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCit0cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCitOT1JNQUxfSU5TVEFMTCA9IDoKK1BSRV9JTlNUQUxMID0gOgorUE9TVF9JTlNUQUxMID0gOgorTk9STUFMX1VOSU5TVEFMTCA9IDoKK1BSRV9VTklOU1RBTEwgPSA6CitQT1NUX1VOSU5TVEFMTCA9IDoKK2J1aWxkX3RyaXBsZXQgPSBAYnVpbGRACitob3N0X3RyaXBsZXQgPSBAaG9zdEAKK3N1YmRpciA9IGxpYnJlZ2V4CitESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKHNyY2RpcikvTWFrZWZpbGUuaW4gXAorCSQoc3JjZGlyKS9zdGwucGF0LmluCitBQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00CithbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9tNC9iaW51dGlscy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9idWlsdGluZXhwZWN0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2NlbGxzcHViZmRzdXBwb3J0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2NvbXBpbGVyb3B0aW9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2NvbmZpZ21vZHVsZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jb3B5aWZjaGFuZ2UubTQgJCh0b3Bfc3JjZGlyKS9tNC9kb2Nib29rLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2V4dHJhZGlycy5tNCAkKHRvcF9zcmNkaXIpL200L2ZpbmRrZXJuZWwubTQgXAorCSQodG9wX3NyY2RpcikvbTQva2VybmVsb3B0aW9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2tlcm5lbHZlcnNpb24ubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWJ0b29sLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2x0b3B0aW9ucy5tNCAkKHRvcF9zcmNkaXIpL200L2x0c3VnYXIubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbHR2ZXJzaW9uLm00ICQodG9wX3NyY2RpcikvbTQvbHR+b2Jzb2xldGUubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbWFsbG9jYXR0cmlidXRlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3BvcHRjb25zdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9wcmVjb21waWxlZGhlYWRlci5tNCAkKHRvcF9zcmNkaXIpL200L3F0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3Jlc3VsdHluLm00ICQodG9wX3NyY2RpcikvbTQvc3N0cmVhbS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC90eXBlZGVmLm00ICQodG9wX3NyY2RpcikvY29uZmlndXJlLmluCithbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAorCSQoQUNMT0NBTF9NNCkKK21raW5zdGFsbGRpcnMgPSAkKGluc3RhbGxfc2gpIC1kCitDT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5oCitDT05GSUdfQ0xFQU5fRklMRVMgPSBzdGwucGF0CitDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMgPQorTElCUkFSSUVTID0gJChub2luc3RfTElCUkFSSUVTKQorQVJGTEFHUyA9IGNydQorbGlib3BfcmVnZXhfYV9BUiA9ICQoQVIpICQoQVJGTEFHUykKK2xpYm9wX3JlZ2V4X2FfTElCQUREID0KK2FtX2xpYm9wX3JlZ2V4X2FfT0JKRUNUUyA9IG9wX3JlZ2V4LiQoT0JKRVhUKSBcCisJZGVtYW5nbGVfc3ltYm9sLiQoT0JKRVhUKSBkZW1hbmdsZV9qYXZhX3N5bWJvbC4kKE9CSkVYVCkKK2xpYm9wX3JlZ2V4X2FfT0JKRUNUUyA9ICQoYW1fbGlib3BfcmVnZXhfYV9PQkpFQ1RTKQorREVGQVVMVF9JTkNMVURFUyA9IC1JLkBhbV9faXNyY0AgLUkkKHRvcF9idWlsZGRpcikKK2RlcGNvbXAgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL2RlcGNvbXAKK2FtX19kZXBmaWxlc19tYXliZSA9IGRlcGZpbGVzCithbV9fbXYgPSBtdiAtZgorQ1hYQ09NUElMRSA9ICQoQ1hYKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgXAorCSQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ1hYRkxBR1MpICQoQ1hYRkxBR1MpCitMVENYWENPTVBJTEUgPSAkKExJQlRPT0wpIC0tdGFnPUNYWCAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIFwKKwktLW1vZGU9Y29tcGlsZSAkKENYWCkgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpIFwKKwkkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NYWEZMQUdTKSAkKENYWEZMQUdTKQorQ1hYTEQgPSAkKENYWCkKK0NYWExJTksgPSAkKExJQlRPT0wpIC0tdGFnPUNYWCAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIFwKKwktLW1vZGU9bGluayAkKENYWExEKSAkKEFNX0NYWEZMQUdTKSAkKENYWEZMQUdTKSAkKEFNX0xERkxBR1MpIFwKKwkkKExERkxBR1MpIC1vICRACitDT01QSUxFID0gJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpIFwKKwkkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpCitMVENPTVBJTEUgPSAkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgXAorCS0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSBcCisJJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQorQ0NMRCA9ICQoQ0MpCitMSU5LID0gJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIFwKKwktLW1vZGU9bGluayAkKENDTEQpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgJChBTV9MREZMQUdTKSBcCisJJChMREZMQUdTKSAtbyAkQAorU09VUkNFUyA9ICQobGlib3BfcmVnZXhfYV9TT1VSQ0VTKQorRElTVF9TT1VSQ0VTID0gJChsaWJvcF9yZWdleF9hX1NPVVJDRVMpCitSRUNVUlNJVkVfVEFSR0VUUyA9IGFsbC1yZWN1cnNpdmUgY2hlY2stcmVjdXJzaXZlIGR2aS1yZWN1cnNpdmUgXAorCWh0bWwtcmVjdXJzaXZlIGluZm8tcmVjdXJzaXZlIGluc3RhbGwtZGF0YS1yZWN1cnNpdmUgXAorCWluc3RhbGwtZHZpLXJlY3Vyc2l2ZSBpbnN0YWxsLWV4ZWMtcmVjdXJzaXZlIFwKKwlpbnN0YWxsLWh0bWwtcmVjdXJzaXZlIGluc3RhbGwtaW5mby1yZWN1cnNpdmUgXAorCWluc3RhbGwtcGRmLXJlY3Vyc2l2ZSBpbnN0YWxsLXBzLXJlY3Vyc2l2ZSBpbnN0YWxsLXJlY3Vyc2l2ZSBcCisJaW5zdGFsbGNoZWNrLXJlY3Vyc2l2ZSBpbnN0YWxsZGlycy1yZWN1cnNpdmUgcGRmLXJlY3Vyc2l2ZSBcCisJcHMtcmVjdXJzaXZlIHVuaW5zdGFsbC1yZWN1cnNpdmUKK2FtX192cGF0aF9hZGpfc2V0dXAgPSBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOworYW1fX3ZwYXRoX2FkaiA9IGNhc2UgJCRwIGluIFwKKyAgICAkKHNyY2RpcikvKikgZj1gZWNobyAiJCRwIiB8IHNlZCAic3xeJCRzcmNkaXJzdHJpcC98fCJgOzsgXAorICAgICopIGY9JCRwOzsgXAorICBlc2FjOworYW1fX3N0cmlwX2RpciA9IGY9YGVjaG8gJCRwIHwgc2VkIC1lICdzfF4uKi98fCdgOworYW1fX2luc3RhbGxfbWF4ID0gNDAKK2FtX19ub2Jhc2Vfc3RyaXBfc2V0dXAgPSBcCisgIHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCp8XS9cXFxcJi9nJ2AKK2FtX19ub2Jhc2Vfc3RyaXAgPSBcCisgIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwIjsgZG9uZSB8IHNlZCAtZSAic3wkJHNyY2RpcnN0cmlwL3x8IgorYW1fX25vYmFzZV9saXN0ID0gJChhbV9fbm9iYXNlX3N0cmlwX3NldHVwKTsgXAorICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCAkJHAiOyBkb25lIHwgXAorICBzZWQgInN8ICQkc3JjZGlyc3RyaXAvfCB8OyInIC8gLipcLy8hcy8gLiovIC4vOyBzLFwoIC4qXCkvW14vXSokJCxcMSwnIHwgXAorICAkKEFXSykgJ0JFR0lOIHsgZmlsZXNbIi4iXSA9ICIiIH0geyBmaWxlc1skJDJdID0gZmlsZXNbJCQyXSAiICIgJCQxOyBcCisgICAgaWYgKCsrblskJDJdID09ICQoYW1fX2luc3RhbGxfbWF4KSkgXAorICAgICAgeyBwcmludCAkJDIsIGZpbGVzWyQkMl07IG5bJCQyXSA9IDA7IGZpbGVzWyQkMl0gPSAiIiB9IH0gXAorICAgIEVORCB7IGZvciAoZGlyIGluIGZpbGVzKSBwcmludCBkaXIsIGZpbGVzW2Rpcl0gfScKK2FtX19iYXNlX2xpc3QgPSBcCisgIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycgfCBcCisgIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycKK2FtX19pbnN0YWxsZGlycyA9ICIkKERFU1RESVIpJChkYXRhZGlyKSIKK0RBVEEgPSAkKG5vZGlzdF9kYXRhX0RBVEEpCitSRUNVUlNJVkVfQ0xFQU5fVEFSR0VUUyA9IG1vc3RseWNsZWFuLXJlY3Vyc2l2ZSBjbGVhbi1yZWN1cnNpdmUJXAorICBkaXN0Y2xlYW4tcmVjdXJzaXZlIG1haW50YWluZXItY2xlYW4tcmVjdXJzaXZlCitBTV9SRUNVUlNJVkVfVEFSR0VUUyA9ICQoUkVDVVJTSVZFX1RBUkdFVFM6LXJlY3Vyc2l2ZT0pIFwKKwkkKFJFQ1VSU0lWRV9DTEVBTl9UQVJHRVRTOi1yZWN1cnNpdmU9KSB0YWdzIFRBR1MgY3RhZ3MgQ1RBR1MgXAorCWRpc3RkaXIKK0VUQUdTID0gZXRhZ3MKK0NUQUdTID0gY3RhZ3MKK0RJU1RfU1VCRElSUyA9ICQoU1VCRElSUykKK0RJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCithbV9fcmVsYXRpdml6ZSA9IFwKKyAgZGlyMD1gcHdkYDsgXAorICBzZWRfZmlyc3Q9J3MsXlwoW14vXSpcKS8uKiQkLFwxLCc7IFwKKyAgc2VkX3Jlc3Q9J3MsXlteL10qLyosLCc7IFwKKyAgc2VkX2xhc3Q9J3MsXi4qL1woW14vXSpcKSQkLFwxLCc7IFwKKyAgc2VkX2J1dGxhc3Q9J3MsLypbXi9dKiQkLCwnOyBcCisgIHdoaWxlIHRlc3QgLW4gIiQkZGlyMSI7IGRvIFwKKyAgICBmaXJzdD1gZWNobyAiJCRkaXIxIiB8IHNlZCAtZSAiJCRzZWRfZmlyc3QiYDsgXAorICAgIGlmIHRlc3QgIiQkZmlyc3QiICE9ICIuIjsgdGhlbiBcCisgICAgICBpZiB0ZXN0ICIkJGZpcnN0IiA9ICIuLiI7IHRoZW4gXAorICAgICAgICBkaXIyPWBlY2hvICIkJGRpcjAiIHwgc2VkIC1lICIkJHNlZF9sYXN0ImAvIiQkZGlyMiI7IFwKKyAgICAgICAgZGlyMD1gZWNobyAiJCRkaXIwIiB8IHNlZCAtZSAiJCRzZWRfYnV0bGFzdCJgOyBcCisgICAgICBlbHNlIFwKKyAgICAgICAgZmlyc3QyPWBlY2hvICIkJGRpcjIiIHwgc2VkIC1lICIkJHNlZF9maXJzdCJgOyBcCisgICAgICAgIGlmIHRlc3QgIiQkZmlyc3QyIiA9ICIkJGZpcnN0IjsgdGhlbiBcCisgICAgICAgICAgZGlyMj1gZWNobyAiJCRkaXIyIiB8IHNlZCAtZSAiJCRzZWRfcmVzdCJgOyBcCisgICAgICAgIGVsc2UgXAorICAgICAgICAgIGRpcjI9Ii4uLyQkZGlyMiI7IFwKKyAgICAgICAgZmk7IFwKKyAgICAgICAgZGlyMD0iJCRkaXIwIi8iJCRmaXJzdCI7IFwKKyAgICAgIGZpOyBcCisgICAgZmk7IFwKKyAgICBkaXIxPWBlY2hvICIkJGRpcjEiIHwgc2VkIC1lICIkJHNlZF9yZXN0ImA7IFwKKyAgZG9uZTsgXAorICByZWxkaXI9IiQkZGlyMiIKK0FDTE9DQUwgPSBAQUNMT0NBTEAKK0FNVEFSID0gQEFNVEFSQAorQVIgPSBAQVJACitBVVRPQ09ORiA9IEBBVVRPQ09ORkAKK0FVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKK0FVVE9NQUtFID0gQEFVVE9NQUtFQAorQVdLID0gQEFXS0AKK0JGRF9MSUJTID0gQEJGRF9MSUJTQAorQ0FUX0VOVFJZX0VORCA9IEBDQVRfRU5UUllfRU5EQAorQ0FUX0VOVFJZX1NUQVJUID0gQENBVF9FTlRSWV9TVEFSVEAKK0NDID0gQENDQAorQ0NERVBNT0RFID0gQENDREVQTU9ERUAKK0NGTEFHUyA9IEBDRkxBR1NACitDUFAgPSBAQ1BQQAorQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACitDWFggPSBAQ1hYQAorQ1hYQ1BQID0gQENYWENQUEAKK0NYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKK0NYWEZMQUdTID0gQENYWEZMQUdTQAorQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKK0RBVEUgPSBAREFURUAKK0RFRlMgPSBAREVGU0AKK0RFUERJUiA9IEBERVBESVJACitET0NCT09LX1JPT1QgPSBARE9DQk9PS19ST09UQAorRFNZTVVUSUwgPSBARFNZTVVUSUxACitEVU1QQklOID0gQERVTVBCSU5ACitFQ0hPX0MgPSBARUNIT19DQAorRUNIT19OID0gQEVDSE9fTkAKK0VDSE9fVCA9IEBFQ0hPX1RACitFR1JFUCA9IEBFR1JFUEAKK0VYRUVYVCA9IEBFWEVFWFRACitFWFRSQV9DRkxBR1NfTU9EVUxFID0gQEVYVFJBX0NGTEFHU19NT0RVTEVACitGR1JFUCA9IEBGR1JFUEAKK0dSRVAgPSBAR1JFUEAKK0lOU1RBTEwgPSBASU5TVEFMTEAKK0lOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACitJTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAorSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACitJTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAorSkFWQV9IT01FRElSID0gQEpBVkFfSE9NRURJUkAKK0tJTkMgPSBAS0lOQ0AKK0tTUkMgPSBAS1NSQ0AKK0tWRVJTID0gQEtWRVJTQAorTEQgPSBATERACitMREZMQUdTID0gQExERkxBR1NACitMSUJFUlRZX0xJQlMgPSBATElCRVJUWV9MSUJTQAorTElCT0JKUyA9IEBMSUJPQkpTQAorTElCUyA9IEBMSUJTQAorTElCVE9PTCA9IEBMSUJUT09MQAorTElQTyA9IEBMSVBPQAorTE5fUyA9IEBMTl9TQAorTFRMSUJPQkpTID0gQExUTElCT0JKU0AKK01BS0VJTkZPID0gQE1BS0VJTkZPQAorTUtESVJfUCA9IEBNS0RJUl9QQAorTU9DID0gQE1PQ0AKK01PRElOU1RBTExESVIgPSBATU9ESU5TVEFMTERJUkAKK05NID0gQE5NQAorTk1FRElUID0gQE5NRURJVEAKK09CSkRVTVAgPSBAT0JKRFVNUEAKK09CSkVYVCA9IEBPQkpFWFRACitPUFJPRklMRV9ESVIgPSBAT1BST0ZJTEVfRElSQAorT1BST0ZJTEVfTU9EVUxFX0FSQ0ggPSBAT1BST0ZJTEVfTU9EVUxFX0FSQ0hACitPUF9DRkxBR1MgPSBAT1BfQ0ZMQUdTQAorT1BfQ1hYRkxBR1MgPSBAT1BfQ1hYRkxBR1NACitPUF9ET0NESVIgPSBAT1BfRE9DRElSQAorT1RPT0wgPSBAT1RPT0xACitPVE9PTDY0ID0gQE9UT09MNjRACitQQUNLQUdFID0gQFBBQ0tBR0VACitQQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKK1BBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACitQQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKK1BBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACitQQUNLQUdFX1VSTCA9IEBQQUNLQUdFX1VSTEAKK1BBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACitQQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKK1BLR19DT05GSUcgPSBAUEtHX0NPTkZJR0AKK1BLR19DT05GSUdfTElCRElSID0gQFBLR19DT05GSUdfTElCRElSQAorUEtHX0NPTkZJR19QQVRIID0gQFBLR19DT05GSUdfUEFUSEAKK1BPUFRfTElCUyA9IEBQT1BUX0xJQlNACitQVFJESUZGX1RfVFlQRSA9IEBQVFJESUZGX1RfVFlQRUAKK1FUX0NGTEFHUyA9IEBRVF9DRkxBR1NACitRVF9JTkNMVURFUyA9IEBRVF9JTkNMVURFU0AKK1FUX0xERkxBR1MgPSBAUVRfTERGTEFHU0AKK1FUX0xJQiA9IEBRVF9MSUJACitRVF9MSUJTID0gQFFUX0xJQlNACitRVF9WRVJTSU9OID0gQFFUX1ZFUlNJT05ACitSQU5MSUIgPSBAUkFOTElCQAorU0VEID0gQFNFREAKK1NFVF9NQUtFID0gQFNFVF9NQUtFQAorU0hFTEwgPSBAU0hFTExACitTSVpFX1RfVFlQRSA9IEBTSVpFX1RfVFlQRUAKK1NUUklQID0gQFNUUklQQAorVUlDID0gQFVJQ0AKK1VJQ2hlbHAgPSBAVUlDaGVscEAKK1ZFUlNJT04gPSBAVkVSU0lPTkAKK1hNS01GID0gQFhNS01GQAorWE1MX0NBVEFMT0cgPSBAWE1MX0NBVEFMT0dACitYU0xUUFJPQyA9IEBYU0xUUFJPQ0AKK1hTTFRQUk9DX0ZMQUdTID0gQFhTTFRQUk9DX0ZMQUdTQAorWF9DRkxBR1MgPSBAWF9DRkxBR1NACitYX0VYVFJBX0xJQlMgPSBAWF9FWFRSQV9MSUJTQAorWF9MSUJTID0gQFhfTElCU0AKK1hfUFJFX0xJQlMgPSBAWF9QUkVfTElCU0AKK2Fic19idWlsZGRpciA9IEBhYnNfYnVpbGRkaXJACithYnNfc3JjZGlyID0gQGFic19zcmNkaXJACithYnNfdG9wX2J1aWxkZGlyID0gQGFic190b3BfYnVpbGRkaXJACithYnNfdG9wX3NyY2RpciA9IEBhYnNfdG9wX3NyY2RpckAKK2FjX2N0X0NDID0gQGFjX2N0X0NDQAorYWNfY3RfQ1hYID0gQGFjX2N0X0NYWEAKK2FjX2N0X0RVTVBCSU4gPSBAYWNfY3RfRFVNUEJJTkAKK2FtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAorYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKK2FtX19xdW90ZSA9IEBhbV9fcXVvdGVACithbV9fdGFyID0gQGFtX190YXJACithbV9fdW50YXIgPSBAYW1fX3VudGFyQAorYmluZGlyID0gQGJpbmRpckAKK2J1aWxkID0gQGJ1aWxkQAorYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACitidWlsZF9jcHUgPSBAYnVpbGRfY3B1QAorYnVpbGRfb3MgPSBAYnVpbGRfb3NACitidWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAorYnVpbGRkaXIgPSBAYnVpbGRkaXJACitkYXRhZGlyID0gJChwcmVmaXgpL3NoYXJlL29wcm9maWxlCitkYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKK2RvY2RpciA9IEBkb2NkaXJACitkdmlkaXIgPSBAZHZpZGlyQAorZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACitob3N0ID0gQGhvc3RACitob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACitob3N0X2NwdSA9IEBob3N0X2NwdUAKK2hvc3Rfb3MgPSBAaG9zdF9vc0AKK2hvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAoraHRtbGRpciA9IEBodG1sZGlyQAoraW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAoraW5mb2RpciA9IEBpbmZvZGlyQAoraW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAorbGliZGlyID0gQGxpYmRpckAKK2xpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKK2xvY2FsZWRpciA9IEBsb2NhbGVkaXJACitsb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACitsdF9FQ0hPID0gQGx0X0VDSE9ACittYW5kaXIgPSBAbWFuZGlyQAorbWtkaXJfcCA9IEBta2Rpcl9wQAorb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAorcGRmZGlyID0gQHBkZmRpckAKK3ByZWZpeCA9IEBwcmVmaXhACitwcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACitwc2RpciA9IEBwc2RpckAKK3NiaW5kaXIgPSBAc2JpbmRpckAKK3NoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAorc3JjZGlyID0gQHNyY2RpckAKK3N5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKK3RhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACit0b3BfYnVpbGRfcHJlZml4ID0gQHRvcF9idWlsZF9wcmVmaXhACit0b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAordG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAordG9wZGlyID0gQHRvcGRpckAKK1NVQkRJUlMgPSAuIHRlc3RzCitBTV9DUFBGTEFHUyA9IC1JICR7dG9wX3NyY2Rpcn0vbGlidXRpbCsrCitBTV9DWFhGTEFHUyA9IEBPUF9DWFhGTEFHU0AKK25vaW5zdF9MSUJSQVJJRVMgPSBsaWJvcF9yZWdleC5hCitsaWJvcF9yZWdleF9hX1NPVVJDRVMgPSBcCisJb3BfcmVnZXguY3BwIFwKKwlvcF9yZWdleC5oIFwKKwlkZW1hbmdsZV9zeW1ib2wuaCBcCisJZGVtYW5nbGVfc3ltYm9sLmNwcCBcCisJZGVtYW5nbGVfamF2YV9zeW1ib2wuaCBcCisJZGVtYW5nbGVfamF2YV9zeW1ib2wuY3BwCisKK25vZGlzdF9kYXRhX0RBVEEgPSBzdGwucGF0CithbGw6IGFsbC1yZWN1cnNpdmUKKworLlNVRkZJWEVTOgorLlNVRkZJWEVTOiAuY3BwIC5sbyAubyAub2JqCiskKHNyY2RpcikvTWFrZWZpbGUuaW46ICAkKHNyY2RpcikvTWFrZWZpbGUuYW0gICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCUBmb3IgZGVwIGluICQ/OyBkbyBcCisJICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKKwkgICAgKiQkZGVwKikgXAorCSAgICAgICggY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoICkgXAorCSAgICAgICAgJiYgeyBpZiB0ZXN0IC1mICRAOyB0aGVuIGV4aXQgMDsgZWxzZSBicmVhazsgZmk7IH07IFwKKwkgICAgICBleGl0IDE7OyBcCisJICBlc2FjOyBcCisJZG9uZTsgXAorCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZm9yZWlnbiBsaWJyZWdleC9NYWtlZmlsZSc7IFwKKwkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCisJICAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gbGlicmVnZXgvTWFrZWZpbGUKKy5QUkVDSU9VUzogTWFrZWZpbGUKK01ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKKwlAY2FzZSAnJD8nIGluIFwKKwkgICpjb25maWcuc3RhdHVzKikgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCisJICAqKSBcCisJICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKKwllc2FjOworCiskKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKworJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6ICAkKGFtX19jb25maWd1cmVfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyQoQUNMT0NBTF9NNCk6ICAkKGFtX19hY2xvY2FsX200X2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCiskKGFtX19hY2xvY2FsX200X2RlcHMpOgorc3RsLnBhdDogJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMgJChzcmNkaXIpL3N0bC5wYXQuaW4KKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQAorCitjbGVhbi1ub2luc3RMSUJSQVJJRVM6CisJLXRlc3QgLXogIiQobm9pbnN0X0xJQlJBUklFUykiIHx8IHJtIC1mICQobm9pbnN0X0xJQlJBUklFUykKK2xpYm9wX3JlZ2V4LmE6ICQobGlib3BfcmVnZXhfYV9PQkpFQ1RTKSAkKGxpYm9wX3JlZ2V4X2FfREVQRU5ERU5DSUVTKSAKKwktcm0gLWYgbGlib3BfcmVnZXguYQorCSQobGlib3BfcmVnZXhfYV9BUikgbGlib3BfcmVnZXguYSAkKGxpYm9wX3JlZ2V4X2FfT0JKRUNUUykgJChsaWJvcF9yZWdleF9hX0xJQkFERCkKKwkkKFJBTkxJQikgbGlib3BfcmVnZXguYQorCittb3N0bHljbGVhbi1jb21waWxlOgorCS1ybSAtZiAqLiQoT0JKRVhUKQorCitkaXN0Y2xlYW4tY29tcGlsZToKKwktcm0gLWYgKi50YWIuYworCitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvZGVtYW5nbGVfamF2YV9zeW1ib2wuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2RlbWFuZ2xlX3N5bWJvbC5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvb3BfcmVnZXguUG9AYW1fX3F1b3RlQAorCisuY3BwLm86CitAYW1fX2Zhc3RkZXBDWFhfVFJVRUAJJChDWFhDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCAkPAorQGFtX19mYXN0ZGVwQ1hYX1RSVUVACSQoYW1fX212KSAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENYWF9GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENYWERFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAkkKENYWENPTVBJTEUpIC1jIC1vICRAICQ8CisKKy5jcHAub2JqOgorQGFtX19mYXN0ZGVwQ1hYX1RSVUVACSQoQ1hYQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYAorQGFtX19mYXN0ZGVwQ1hYX1RSVUVACSQoYW1fX212KSAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENYWF9GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENYWERFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAkkKENYWENPTVBJTEUpIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKKworLmNwcC5sbzoKK0BhbV9fZmFzdGRlcENYWF9UUlVFQAkkKExUQ1hYQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgJDwKK0BhbV9fZmFzdGRlcENYWF9UUlVFQAkkKGFtX19tdikgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENYWF9GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENYWERFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAkkKExUQ1hYQ09NUElMRSkgLWMgLW8gJEAgJDwKKworbW9zdGx5Y2xlYW4tbGlidG9vbDoKKwktcm0gLWYgKi5sbworCitjbGVhbi1saWJ0b29sOgorCS1ybSAtcmYgLmxpYnMgX2xpYnMKK2luc3RhbGwtbm9kaXN0X2RhdGFEQVRBOiAkKG5vZGlzdF9kYXRhX0RBVEEpCisJQCQoTk9STUFMX0lOU1RBTEwpCisJdGVzdCAteiAiJChkYXRhZGlyKSIgfHwgJChNS0RJUl9QKSAiJChERVNURElSKSQoZGF0YWRpcikiCisJQGxpc3Q9JyQobm9kaXN0X2RhdGFfREFUQSknOyB0ZXN0IC1uICIkKGRhdGFkaXIpIiB8fCBsaXN0PTsgXAorCWZvciBwIGluICQkbGlzdDsgZG8gXAorCSAgaWYgdGVzdCAtZiAiJCRwIjsgdGhlbiBkPTsgZWxzZSBkPSIkKHNyY2RpcikvIjsgZmk7IFwKKwkgIGVjaG8gIiQkZCQkcCI7IFwKKwlkb25lIHwgJChhbV9fYmFzZV9saXN0KSB8IFwKKwl3aGlsZSByZWFkIGZpbGVzOyBkbyBcCisJICBlY2hvICIgJChJTlNUQUxMX0RBVEEpICQkZmlsZXMgJyQoREVTVERJUikkKGRhdGFkaXIpJyI7IFwKKwkgICQoSU5TVEFMTF9EQVRBKSAkJGZpbGVzICIkKERFU1RESVIpJChkYXRhZGlyKSIgfHwgZXhpdCAkJD87IFwKKwlkb25lCisKK3VuaW5zdGFsbC1ub2Rpc3RfZGF0YURBVEE6CisJQCQoTk9STUFMX1VOSU5TVEFMTCkKKwlAbGlzdD0nJChub2Rpc3RfZGF0YV9EQVRBKSc7IHRlc3QgLW4gIiQoZGF0YWRpcikiIHx8IGxpc3Q9OyBcCisJZmlsZXM9YGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAkJHA7IGRvbmUgfCBzZWQgLWUgJ3N8Xi4qL3x8J2A7IFwKKwl0ZXN0IC1uICIkJGZpbGVzIiB8fCBleGl0IDA7IFwKKwllY2hvICIgKCBjZCAnJChERVNURElSKSQoZGF0YWRpciknICYmIHJtIC1mIiAkJGZpbGVzICIpIjsgXAorCWNkICIkKERFU1RESVIpJChkYXRhZGlyKSIgJiYgcm0gLWYgJCRmaWxlcworCisjIFRoaXMgZGlyZWN0b3J5J3Mgc3ViZGlyZWN0b3JpZXMgYXJlIG1vc3RseSBpbmRlcGVuZGVudDsgeW91IGNhbiBjZAorIyBpbnRvIHRoZW0gYW5kIHJ1biBgbWFrZScgd2l0aG91dCBnb2luZyB0aHJvdWdoIHRoaXMgTWFrZWZpbGUuCisjIFRvIGNoYW5nZSB0aGUgdmFsdWVzIG9mIGBtYWtlJyB2YXJpYWJsZXM6IGluc3RlYWQgb2YgZWRpdGluZyBNYWtlZmlsZXMsCisjICgxKSBpZiB0aGUgdmFyaWFibGUgaXMgc2V0IGluIGBjb25maWcuc3RhdHVzJywgZWRpdCBgY29uZmlnLnN0YXR1cycKKyMgICAgICh3aGljaCB3aWxsIGNhdXNlIHRoZSBNYWtlZmlsZXMgdG8gYmUgcmVnZW5lcmF0ZWQgd2hlbiB5b3UgcnVuIGBtYWtlJyk7CisjICgyKSBvdGhlcndpc2UsIHBhc3MgdGhlIGRlc2lyZWQgdmFsdWVzIG9uIHRoZSBgbWFrZScgY29tbWFuZCBsaW5lLgorJChSRUNVUlNJVkVfVEFSR0VUUyk6CisJQGZhaWw9IGZhaWxjb209J2V4aXQgMSc7IFwKKwlmb3IgZiBpbiB4ICQkTUFLRUZMQUdTOyBkbyBcCisJICBjYXNlICQkZiBpbiBcCisJICAgICo9KiB8IC0tWyFrXSopOzsgXAorCSAgICAqayopIGZhaWxjb209J2ZhaWw9eWVzJzs7IFwKKwkgIGVzYWM7IFwKKwlkb25lOyBcCisJZG90X3NlZW49bm87IFwKKwl0YXJnZXQ9YGVjaG8gJEAgfCBzZWQgcy8tcmVjdXJzaXZlLy9gOyBcCisJbGlzdD0nJChTVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICBlY2hvICJNYWtpbmcgJCR0YXJnZXQgaW4gJCRzdWJkaXIiOyBcCisJICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAiLiI7IHRoZW4gXAorCSAgICBkb3Rfc2Vlbj15ZXM7IFwKKwkgICAgbG9jYWxfdGFyZ2V0PSIkJHRhcmdldC1hbSI7IFwKKwkgIGVsc2UgXAorCSAgICBsb2NhbF90YXJnZXQ9IiQkdGFyZ2V0IjsgXAorCSAgZmk7IFwKKwkgICgkKGFtX19jZCkgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgJCRsb2NhbF90YXJnZXQpIFwKKwkgIHx8IGV2YWwgJCRmYWlsY29tOyBcCisJZG9uZTsgXAorCWlmIHRlc3QgIiQkZG90X3NlZW4iID0gIm5vIjsgdGhlbiBcCisJICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSAiJCR0YXJnZXQtYW0iIHx8IGV4aXQgMTsgXAorCWZpOyB0ZXN0IC16ICIkJGZhaWwiCisKKyQoUkVDVVJTSVZFX0NMRUFOX1RBUkdFVFMpOgorCUBmYWlsPSBmYWlsY29tPSdleGl0IDEnOyBcCisJZm9yIGYgaW4geCAkJE1BS0VGTEFHUzsgZG8gXAorCSAgY2FzZSAkJGYgaW4gXAorCSAgICAqPSogfCAtLVsha10qKTs7IFwKKwkgICAgKmsqKSBmYWlsY29tPSdmYWlsPXllcyc7OyBcCisJICBlc2FjOyBcCisJZG9uZTsgXAorCWRvdF9zZWVuPW5vOyBcCisJY2FzZSAiJEAiIGluIFwKKwkgIGRpc3RjbGVhbi0qIHwgbWFpbnRhaW5lci1jbGVhbi0qKSBsaXN0PSckKERJU1RfU1VCRElSUyknIDs7IFwKKwkgICopIGxpc3Q9JyQoU1VCRElSUyknIDs7IFwKKwllc2FjOyBcCisJcmV2PScnOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAorCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gIi4iOyB0aGVuIDo7IGVsc2UgXAorCSAgICByZXY9IiQkc3ViZGlyICQkcmV2IjsgXAorCSAgZmk7IFwKKwlkb25lOyBcCisJcmV2PSIkJHJldiAuIjsgXAorCXRhcmdldD1gZWNobyAkQCB8IHNlZCBzLy1yZWN1cnNpdmUvL2A7IFwKKwlmb3Igc3ViZGlyIGluICQkcmV2OyBkbyBcCisJICBlY2hvICJNYWtpbmcgJCR0YXJnZXQgaW4gJCRzdWJkaXIiOyBcCisJICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAiLiI7IHRoZW4gXAorCSAgICBsb2NhbF90YXJnZXQ9IiQkdGFyZ2V0LWFtIjsgXAorCSAgZWxzZSBcCisJICAgIGxvY2FsX3RhcmdldD0iJCR0YXJnZXQiOyBcCisJICBmaTsgXAorCSAgKCQoYW1fX2NkKSAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSAkJGxvY2FsX3RhcmdldCkgXAorCSAgfHwgZXZhbCAkJGZhaWxjb207IFwKKwlkb25lICYmIHRlc3QgLXogIiQkZmFpbCIKK3RhZ3MtcmVjdXJzaXZlOgorCWxpc3Q9JyQoU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAorCSAgdGVzdCAiJCRzdWJkaXIiID0gLiB8fCAoJChhbV9fY2QpICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIHRhZ3MpOyBcCisJZG9uZQorY3RhZ3MtcmVjdXJzaXZlOgorCWxpc3Q9JyQoU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAorCSAgdGVzdCAiJCRzdWJkaXIiID0gLiB8fCAoJChhbV9fY2QpICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGN0YWdzKTsgXAorCWRvbmUKKworSUQ6ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKExJU1ApICQoVEFHU19GSUxFUykKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKwkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKwlta2lkIC1mSUQgJCR1bmlxdWUKK3RhZ3M6IFRBR1MKKworVEFHUzogdGFncy1yZWN1cnNpdmUgJChIRUFERVJTKSAkKFNPVVJDRVMpICAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCisJCSQoVEFHU19GSUxFUykgJChMSVNQKQorCXNldCB4OyBcCisJaGVyZT1gcHdkYDsgXAorCWlmICgkKEVUQUdTKSAtLWV0YWdzLWluY2x1ZGUgLS12ZXJzaW9uKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gXAorCSAgaW5jbHVkZV9vcHRpb249LS1ldGFncy1pbmNsdWRlOyBcCisJICBlbXB0eV9maXg9LjsgXAorCWVsc2UgXAorCSAgaW5jbHVkZV9vcHRpb249LS1pbmNsdWRlOyBcCisJICBlbXB0eV9maXg9OyBcCisJZmk7IFwKKwlsaXN0PSckKFNVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKwkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9IC47IHRoZW4gOjsgZWxzZSBcCisJICAgIHRlc3QgISAtZiAkJHN1YmRpci9UQUdTIHx8IFwKKwkgICAgICBzZXQgIiQkQCIgIiQkaW5jbHVkZV9vcHRpb249JCRoZXJlLyQkc3ViZGlyL1RBR1MiOyBcCisJICBmaTsgXAorCWRvbmU7IFwKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCisJICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCisJc2hpZnQ7IFwKKwlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCQqJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAorCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAorCSAgaWYgdGVzdCAkJCMgLWd0IDA7IHRoZW4gXAorCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCisJICAgICAgIiQkQCIgJCR1bmlxdWU7IFwKKwkgIGVsc2UgXAorCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCisJICAgICAgJCR1bmlxdWU7IFwKKwkgIGZpOyBcCisJZmkKK2N0YWdzOiBDVEFHUworQ1RBR1M6IGN0YWdzLXJlY3Vyc2l2ZSAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKKwkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHVuaXF1ZSIgXAorCSAgfHwgJChDVEFHUykgJChDVEFHU0ZMQUdTKSAkKEFNX0NUQUdTRkxBR1MpICQoQ1RBR1NfQVJHUykgXAorCSAgICAgJCR1bmlxdWUKKworR1RBR1M6CisJaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKKwkgICYmICQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpIFwKKwkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgIiQkaGVyZSIKKworZGlzdGNsZWFuLXRhZ3M6CisJLXJtIC1mIFRBR1MgSUQgR1RBR1MgR1JUQUdTIEdTWU1TIEdQQVRIIHRhZ3MKKworZGlzdGRpcjogJChESVNURklMRVMpCisJQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwlsaXN0PSckKERJU1RGSUxFUyknOyBcCisJICBkaXN0X2ZpbGVzPWBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRmaWxlOyBkb25lIHwgXAorCSAgc2VkIC1lICJzfF4kJHNyY2RpcnN0cmlwL3x8O3QiIFwKKwkgICAgICAtZSAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3w7dCJgOyBcCisJY2FzZSAkJGRpc3RfZmlsZXMgaW4gXAorCSAgKi8qKSAkKE1LRElSX1ApIGBlY2hvICIkJGRpc3RfZmlsZXMiIHwgXAorCQkJICAgc2VkICcvXC8vIWQ7c3xefCQoZGlzdGRpcikvfDtzLC9bXi9dKiQkLCwnIHwgXAorCQkJICAgc29ydCAtdWAgOzsgXAorCWVzYWM7IFwKKwlmb3IgZmlsZSBpbiAkJGRpc3RfZmlsZXM7IGRvIFwKKwkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKKwkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCisJICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCisJICAgIGlmIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRmaWxlIjsgdGhlbiBcCisJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisJICAgIGZpOyBcCisJICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAorCSAgICAgIGNwIC1mcFIgJChzcmNkaXIpLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKwkgICAgZmk7IFwKKwkgICAgY3AgLWZwUiAkJGQvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorCSAgZWxzZSBcCisJICAgIHRlc3QgLWYgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGV4aXQgMTsgXAorCSAgZmk7IFwKKwlkb25lCisJQGxpc3Q9JyQoRElTVF9TVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAuOyB0aGVuIDo7IGVsc2UgXAorCSAgICB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkc3ViZGlyIiBcCisJICAgIHx8ICQoTUtESVJfUCkgIiQoZGlzdGRpcikvJCRzdWJkaXIiIFwKKwkgICAgfHwgZXhpdCAxOyBcCisJICBmaTsgXAorCWRvbmUKKwlAbGlzdD0nJChESVNUX1NVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKwkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9IC47IHRoZW4gOjsgZWxzZSBcCisJICAgIGRpcjE9JCRzdWJkaXI7IGRpcjI9IiQoZGlzdGRpcikvJCRzdWJkaXIiOyBcCisJICAgICQoYW1fX3JlbGF0aXZpemUpOyBcCisJICAgIG5ld19kaXN0ZGlyPSQkcmVsZGlyOyBcCisJICAgIGRpcjE9JCRzdWJkaXI7IGRpcjI9IiQodG9wX2Rpc3RkaXIpIjsgXAorCSAgICAkKGFtX19yZWxhdGl2aXplKTsgXAorCSAgICBuZXdfdG9wX2Rpc3RkaXI9JCRyZWxkaXI7IFwKKwkgICAgZWNobyAiIChjZCAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSB0b3BfZGlzdGRpcj0iJCRuZXdfdG9wX2Rpc3RkaXIiIGRpc3RkaXI9IiQkbmV3X2Rpc3RkaXIiIFxcIjsgXAorCSAgICBlY2hvICIgICAgIGFtX19yZW1vdmVfZGlzdGRpcj06IGFtX19za2lwX2xlbmd0aF9jaGVjaz06IGFtX19za2lwX21vZGVfZml4PTogZGlzdGRpcikiOyBcCisJICAgICgkKGFtX19jZCkgJCRzdWJkaXIgJiYgXAorCSAgICAgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIFwKKwkgICAgICAgIHRvcF9kaXN0ZGlyPSIkJG5ld190b3BfZGlzdGRpciIgXAorCSAgICAgICAgZGlzdGRpcj0iJCRuZXdfZGlzdGRpciIgXAorCQlhbV9fcmVtb3ZlX2Rpc3RkaXI9OiBcCisJCWFtX19za2lwX2xlbmd0aF9jaGVjaz06IFwKKwkJYW1fX3NraXBfbW9kZV9maXg9OiBcCisJICAgICAgICBkaXN0ZGlyKSBcCisJICAgICAgfHwgZXhpdCAxOyBcCisJICBmaTsgXAorCWRvbmUKK2NoZWNrLWFtOiBhbGwtYW0KK2NoZWNrOiBjaGVjay1yZWN1cnNpdmUKK2FsbC1hbTogTWFrZWZpbGUgJChMSUJSQVJJRVMpICQoREFUQSkKK2luc3RhbGxkaXJzOiBpbnN0YWxsZGlycy1yZWN1cnNpdmUKK2luc3RhbGxkaXJzLWFtOgorCWZvciBkaXIgaW4gIiQoREVTVERJUikkKGRhdGFkaXIpIjsgZG8gXAorCSAgdGVzdCAteiAiJCRkaXIiIHx8ICQoTUtESVJfUCkgIiQkZGlyIjsgXAorCWRvbmUKK2luc3RhbGw6IGluc3RhbGwtcmVjdXJzaXZlCitpbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1yZWN1cnNpdmUKK2luc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLXJlY3Vyc2l2ZQordW5pbnN0YWxsOiB1bmluc3RhbGwtcmVjdXJzaXZlCisKK2luc3RhbGwtYW06IGFsbC1hbQorCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCisKK2luc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLXJlY3Vyc2l2ZQoraW5zdGFsbC1zdHJpcDoKKwkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAorCSAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCisJICBgdGVzdCAteiAnJChTVFJJUCknIHx8IFwKKwkgICAgZWNobyAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyJgIGluc3RhbGwKK21vc3RseWNsZWFuLWdlbmVyaWM6CisKK2NsZWFuLWdlbmVyaWM6CisKK2Rpc3RjbGVhbi1nZW5lcmljOgorCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQorCS10ZXN0IC4gPSAiJChzcmNkaXIpIiB8fCB0ZXN0IC16ICIkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKQorCittYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6CisJQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgorCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKK2NsZWFuOiBjbGVhbi1yZWN1cnNpdmUKKworY2xlYW4tYW06IGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBjbGVhbi1ub2luc3RMSUJSQVJJRVMgXAorCW1vc3RseWNsZWFuLWFtCisKK2Rpc3RjbGVhbjogZGlzdGNsZWFuLXJlY3Vyc2l2ZQorCS1ybSAtcmYgLi8kKERFUERJUikKKwktcm0gLWYgTWFrZWZpbGUKK2Rpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAorCWRpc3RjbGVhbi10YWdzCisKK2R2aTogZHZpLXJlY3Vyc2l2ZQorCitkdmktYW06CisKK2h0bWw6IGh0bWwtcmVjdXJzaXZlCisKK2h0bWwtYW06CisKK2luZm86IGluZm8tcmVjdXJzaXZlCisKK2luZm8tYW06CisKK2luc3RhbGwtZGF0YS1hbTogaW5zdGFsbC1ub2Rpc3RfZGF0YURBVEEKKworaW5zdGFsbC1kdmk6IGluc3RhbGwtZHZpLXJlY3Vyc2l2ZQorCitpbnN0YWxsLWR2aS1hbToKKworaW5zdGFsbC1leGVjLWFtOgorCitpbnN0YWxsLWh0bWw6IGluc3RhbGwtaHRtbC1yZWN1cnNpdmUKKworaW5zdGFsbC1odG1sLWFtOgorCitpbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1yZWN1cnNpdmUKKworaW5zdGFsbC1pbmZvLWFtOgorCitpbnN0YWxsLW1hbjoKKworaW5zdGFsbC1wZGY6IGluc3RhbGwtcGRmLXJlY3Vyc2l2ZQorCitpbnN0YWxsLXBkZi1hbToKKworaW5zdGFsbC1wczogaW5zdGFsbC1wcy1yZWN1cnNpdmUKKworaW5zdGFsbC1wcy1hbToKKworaW5zdGFsbGNoZWNrLWFtOgorCittYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLXJlY3Vyc2l2ZQorCS1ybSAtcmYgLi8kKERFUERJUikKKwktcm0gLWYgTWFrZWZpbGUKK21haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKKworbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLXJlY3Vyc2l2ZQorCittb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIFwKKwltb3N0bHljbGVhbi1saWJ0b29sCisKK3BkZjogcGRmLXJlY3Vyc2l2ZQorCitwZGYtYW06CisKK3BzOiBwcy1yZWN1cnNpdmUKKworcHMtYW06CisKK3VuaW5zdGFsbC1hbTogdW5pbnN0YWxsLW5vZGlzdF9kYXRhREFUQQorCisuTUFLRTogJChSRUNVUlNJVkVfQ0xFQU5fVEFSR0VUUykgJChSRUNVUlNJVkVfVEFSR0VUUykgY3RhZ3MtcmVjdXJzaXZlIFwKKwlpbnN0YWxsLWFtIGluc3RhbGwtc3RyaXAgdGFncy1yZWN1cnNpdmUKKworLlBIT05ZOiAkKFJFQ1VSU0lWRV9DTEVBTl9UQVJHRVRTKSAkKFJFQ1VSU0lWRV9UQVJHRVRTKSBDVEFHUyBHVEFHUyBcCisJYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgXAorCWNsZWFuLW5vaW5zdExJQlJBUklFUyBjdGFncyBjdGFncy1yZWN1cnNpdmUgZGlzdGNsZWFuIFwKKwlkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4tbGlidG9vbCBcCisJZGlzdGNsZWFuLXRhZ3MgZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgaHRtbC1hbSBpbmZvIGluZm8tYW0gXAorCWluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZHZpIFwKKwlpbnN0YWxsLWR2aS1hbSBpbnN0YWxsLWV4ZWMgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaHRtbCBcCisJaW5zdGFsbC1odG1sLWFtIGluc3RhbGwtaW5mbyBpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gXAorCWluc3RhbGwtbm9kaXN0X2RhdGFEQVRBIGluc3RhbGwtcGRmIGluc3RhbGwtcGRmLWFtIGluc3RhbGwtcHMgXAorCWluc3RhbGwtcHMtYW0gaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgaW5zdGFsbGNoZWNrLWFtIFwKKwlpbnN0YWxsZGlycyBpbnN0YWxsZGlycy1hbSBtYWludGFpbmVyLWNsZWFuIFwKKwltYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gbW9zdGx5Y2xlYW4tY29tcGlsZSBcCisJbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sIHBkZiBwZGYtYW0gcHMgcHMtYW0gXAorCXRhZ3MgdGFncy1yZWN1cnNpdmUgdW5pbnN0YWxsIHVuaW5zdGFsbC1hbSBcCisJdW5pbnN0YWxsLW5vZGlzdF9kYXRhREFUQQorCisKKyMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCisjIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KKy5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2xpYnJlZ2V4L2RlbWFuZ2xlX2phdmFfc3ltYm9sLmNwcCBiL29wcm9maWxlLTAuOS43L2xpYnJlZ2V4L2RlbWFuZ2xlX2phdmFfc3ltYm9sLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjc1ZTZjCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvbGlicmVnZXgvZGVtYW5nbGVfamF2YV9zeW1ib2wuY3BwCkBAIC0wLDAgKzEsMjM4IEBACisvKioKKyAqIEBmaWxlIGRlbWFuZ2xlX2phdmFfc3ltYm9sLmNwcAorICogRGVtYW5nbGUgYSBqYXZhIHN5bWJvbAorICoKKyAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDcgT1Byb2ZpbGUgYXV0aG9ycworICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKKyAqCisgKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKKyAqLworCisjaW5jbHVkZSAiZGVtYW5nbGVfamF2YV9zeW1ib2wuaCIKKworI2luY2x1ZGUgPGFsZ29yaXRobT4KKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKworbmFtZXNwYWNlIHsKKworLyoqCisgKiBUaGUgZ3JhbW1hciB3ZSBpbXBsZW1lbnQ6CisgKgorICogZmllbGRfdHlwZToKKyAqICAgIGJhc2VfdHlwZSB8IG9iamVjdF90eXBlIHwgYXJyYXlfdHlwZQorICogYmFzZV90eXBlOgorICogICAgQiB8IEMgfCBEIHwgRiB8IEkgfCBKIHwgUyB8IFoKKyAqIG9iamVjdF90eXBlOgorICogICAgTDxjbGFzc25hbWU+OworICogYXJyYXlfdHlwZToKKyAqICAgIFtmaWVsZF90eXBlCisgKiBtZXRob2RfZGVzY3JpcHRvcjoKKyAqICAgICggZmllbGRfdHlwZSogKSByZXR1cm5fZGVzY3JpcHRvcgorICogcmV0dXJuX2Rlc2NyaXB0b3I6CisgKiAgICBmaWVsZF90eXBlIHwgVgorICogbWV0aG9kX3NpZ25hdHVyZToKKyAqICAgIG9iamVjdF90eXBlIG1ldGhvZF9uYW1lIG1ldGhvZF9kZXNjcmlwdG9yCisgKgorICovCisKK2Jvb2wgYXJyYXlfdHlwZShzdHJpbmcgJiByZXN1bHQsCisJc3RyaW5nOjpjb25zdF9pdGVyYXRvciAmIGJlZ2luLCBzdHJpbmc6OmNvbnN0X2l0ZXJhdG9yIGVuZCk7Citib29sIG9iamVjdF90eXBlKHN0cmluZyAmIHJlc3VsdCwKKwlzdHJpbmc6OmNvbnN0X2l0ZXJhdG9yICYgYmVnaW4sIHN0cmluZzo6Y29uc3RfaXRlcmF0b3IgZW5kKTsKKworCitib29sIGJhc2VfdHlwZShzdHJpbmcgJiByZXN1bHQsCisJc3RyaW5nOjpjb25zdF9pdGVyYXRvciAmIGJlZ2luLCBzdHJpbmc6OmNvbnN0X2l0ZXJhdG9yIGVuZCkKK3sKKwlib29sIHJldCA9IHRydWU7CisKKwlpZiAoYmVnaW4gPT0gZW5kKQorCQlyZXR1cm4gZmFsc2U7CisKKwlzd2l0Y2ggKCpiZWdpbikgeworCWNhc2UgJ0InOiByZXN1bHQgKz0gImJ5dGUiOyAgICBicmVhazsKKwljYXNlICdDJzogcmVzdWx0ICs9ICJjaGFyIjsgICAgYnJlYWs7CisJY2FzZSAnRCc6IHJlc3VsdCArPSAiZG91YmxlIjsgIGJyZWFrOworCWNhc2UgJ0YnOiByZXN1bHQgKz0gImZsb2F0IjsgICBicmVhazsKKwljYXNlICdJJzogcmVzdWx0ICs9ICJpbnQiOyAgICAgYnJlYWs7CisJY2FzZSAnSic6IHJlc3VsdCArPSAibG9uZyI7ICAgIGJyZWFrOworCWNhc2UgJ1MnOiByZXN1bHQgKz0gInNob3J0IjsgICBicmVhazsKKwljYXNlICdaJzogcmVzdWx0ICs9ICJib29sZWFuIjsgYnJlYWs7CisJZGVmYXVsdDogIHJldCA9IGZhbHNlOyAgICAgICAgIGJyZWFrOworCX0KKworCWlmIChyZXQpCisJCSsrYmVnaW47CisJcmV0dXJuIHJldDsKK30KKworCitib29sIGZpZWxkX3R5cGUoc3RyaW5nICYgcmVzdWx0LAorCXN0cmluZzo6Y29uc3RfaXRlcmF0b3IgJiBiZWdpbiwgc3RyaW5nOjpjb25zdF9pdGVyYXRvciBlbmQpCit7CisJaWYgKGJhc2VfdHlwZShyZXN1bHQsIGJlZ2luLCBlbmQpKQorCQlyZXR1cm4gdHJ1ZTsKKworCWlmIChvYmplY3RfdHlwZShyZXN1bHQsIGJlZ2luLCBlbmQpKQorCQlyZXR1cm4gdHJ1ZTsKKworCWlmIChhcnJheV90eXBlKHJlc3VsdCwgYmVnaW4sIGVuZCkpCisJCXJldHVybiB0cnVlOworCisJcmV0dXJuIGZhbHNlOworfQorCisKK2Jvb2wgYXJyYXlfdHlwZShzdHJpbmcgJiByZXN1bHQsCisJc3RyaW5nOjpjb25zdF9pdGVyYXRvciAmIGJlZ2luLCBzdHJpbmc6OmNvbnN0X2l0ZXJhdG9yIGVuZCkKK3sKKwlpZiAoYmVnaW4gPT0gZW5kIHx8ICpiZWdpbiAhPSAnWycpCisJCXJldHVybiBmYWxzZTsKKworCSsrYmVnaW47CisJaWYgKGZpZWxkX3R5cGUocmVzdWx0LCBiZWdpbiwgZW5kKSkgeworCQlyZXN1bHQgKz0gIltdIjsKKwkJcmV0dXJuIHRydWU7CisJfQorCisJcmV0dXJuIGZhbHNlOworfQorCisKK2Jvb2wgbGlzdF9vZl9maWVsZF90eXBlKHN0cmluZyAmIHJlc3VsdCwKKwlzdHJpbmc6OmNvbnN0X2l0ZXJhdG9yICYgYmVnaW4sIHN0cmluZzo6Y29uc3RfaXRlcmF0b3IgZW5kKQoreworCWJvb2wgZmlyc3QgPSBmYWxzZTsKKwl3aGlsZSAoYmVnaW4gIT0gZW5kKSB7CisJCWlmIChmaXJzdCkKKwkJCXJlc3VsdCArPSAiLCAiOworCisJCWlmICghZmllbGRfdHlwZShyZXN1bHQsIGJlZ2luLCBlbmQpKQorCQkJcmV0dXJuIGZhbHNlOworCisJCWZpcnN0ID0gdHJ1ZTsKKwl9CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworCitib29sIHJldHVybl9kZXNjcmlwdG9yKHN0cmluZyAmIHJlc3VsdCwKKwlzdHJpbmc6OmNvbnN0X2l0ZXJhdG9yICYgYmVnaW4sIHN0cmluZzo6Y29uc3RfaXRlcmF0b3IgZW5kKQoreworCWlmIChiZWdpbiA9PSBlbmQpCisJCXJldHVybiBmYWxzZTsKKwlpZiAoKmJlZ2luID09ICdWJykgeworCQkrK2JlZ2luOworCQlyZXN1bHQgPSAidm9pZCAiICsgcmVzdWx0OworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwlzdHJpbmcgdGVtcDsKKwlpZiAoIWZpZWxkX3R5cGUodGVtcCwgYmVnaW4sIGVuZCkpCisJCXJldHVybiBmYWxzZTsKKwlyZXN1bHQgPSB0ZW1wICsgIiAiICsgcmVzdWx0OworCisJcmV0dXJuIHRydWU7Cit9CisKKworYm9vbCBtZXRob2RfZGVzY3JpcHRvcihzdHJpbmcgJiByZXN1bHQsCisJc3RyaW5nOjpjb25zdF9pdGVyYXRvciAmIGJlZ2luLCBzdHJpbmc6OmNvbnN0X2l0ZXJhdG9yIGVuZCkKK3sKKwlpZiAoYmVnaW4gPT0gZW5kIHx8ICpiZWdpbiAhPSAnKCcpCisJCXJldHVybiBmYWxzZTsKKwkrK2JlZ2luOworCXN0cmluZzo6Y29uc3RfaXRlcmF0b3IgcG9zID0gZmluZChiZWdpbiwgZW5kLCAnKScpOworCWlmIChwb3MgPT0gZW5kKQorCQlyZXR1cm4gZmFsc2U7CisKKwlyZXN1bHQgKz0gIigiOworCisJaWYgKCFsaXN0X29mX2ZpZWxkX3R5cGUocmVzdWx0LCBiZWdpbiwgcG9zKSkKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKGJlZ2luID09IGVuZCB8fCAqYmVnaW4gIT0gJyknKQorCQlyZXR1cm4gZmFsc2U7CisKKwkrK2JlZ2luOworCisJaWYgKCFyZXR1cm5fZGVzY3JpcHRvcihyZXN1bHQsIGJlZ2luLCBlbmQpKQorCQlyZXR1cm4gZmFsc2U7CisKKwlyZXN1bHQgKz0gJyknOworCisJcmV0dXJuIHRydWU7Cit9CisKKworYm9vbCBtZXRob2RlX25hbWUoc3RyaW5nICYgcmVzdWx0LAorCXN0cmluZzo6Y29uc3RfaXRlcmF0b3IgJiBiZWdpbiwgc3RyaW5nOjpjb25zdF9pdGVyYXRvciBlbmQpCit7CisJaWYgKGJlZ2luID09IGVuZCkKKwkJcmV0dXJuIGZhbHNlOworCisJc3RyaW5nOjpjb25zdF9pdGVyYXRvciBwb3MgPSBmaW5kKGJlZ2luLCBlbmQsICcoJyk7CisJaWYgKHBvcyA9PSBlbmQpCisJCXJldHVybiBmYWxzZTsKKworCXJlc3VsdCArPSAnLicgKyAgc3RyaW5nKGJlZ2luLCBwb3MpOworCWJlZ2luID0gcG9zOworCisJcmV0dXJuIHRydWU7Cit9CisKKworYm9vbCBvYmplY3RfdHlwZShzdHJpbmcgJiByZXN1bHQsCisJc3RyaW5nOjpjb25zdF9pdGVyYXRvciAmIGJlZ2luLCBzdHJpbmc6OmNvbnN0X2l0ZXJhdG9yIGVuZCkKK3sKKwlpZiAoYmVnaW4gPT0gZW5kIHx8ICpiZWdpbiAhPSAnTCcpCisJCXJldHVybiBmYWxzZTsKKwlzdHJpbmc6OmNvbnN0X2l0ZXJhdG9yIHBvcyA9IGZpbmQoYmVnaW4sIGVuZCwgJzsnKTsKKwlpZiAocG9zID09IGVuZCkKKwkJcmV0dXJuIGZhbHNlOworCisJc3RyaW5nIHRlbXAgPSBzdHJpbmcoYmVnaW4gKyAxLCBwb3MpOworCXJlcGxhY2UodGVtcC5iZWdpbigpLCB0ZW1wLmVuZCgpLCAnLycsICcuJyk7CisJcmVzdWx0ICs9IHRlbXA7CisKKwliZWdpbiA9IHBvcyArIDE7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworCitzdHJpbmcgZGVtYW5nbGVfc3ltYm9sKHN0cmluZzo6Y29uc3RfaXRlcmF0b3IgYmVnaW4sCisJCSAgICAgICBzdHJpbmc6OmNvbnN0X2l0ZXJhdG9yIGVuZCkKK3sKKwlzdHJpbmcgcmVzdWx0OworCisJaWYgKCFvYmplY3RfdHlwZShyZXN1bHQsIGJlZ2luLCBlbmQpKQorCQlyZXR1cm4gc3RyaW5nKCk7CisKKwlpZiAoIW1ldGhvZGVfbmFtZShyZXN1bHQsIGJlZ2luLCBlbmQpKQorCQlyZXR1cm4gc3RyaW5nKCk7CisKKwlpZiAoIW1ldGhvZF9kZXNjcmlwdG9yKHJlc3VsdCwgYmVnaW4sIGVuZCkpCisJCXJldHVybiBzdHJpbmcoKTsKKworCWlmIChiZWdpbiAhPSBlbmQpIHsKKwkJaWYgKCpiZWdpbiA9PSAnficpIHsKKwkJCS8vIHNwZWNpYWwgY2FzZSBmb3IgZGlzYW1iaWd1YXRlZCBzeW1ib2wuCisJCQlyZXN1bHQgKz0gc3RyaW5nKGJlZ2luLCBlbmQpOworCQl9IGVsc2UgeworCQkJcmV0dXJuIHN0cmluZygpOworCQl9CisJfQorCisJcmV0dXJuIHJlc3VsdDsKK30KKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKKworc3RyaW5nIGNvbnN0IGRlbWFuZ2xlX2phdmFfc3ltYm9sKHN0cmluZyBjb25zdCAmIG5hbWUpCit7CisJcmV0dXJuIGRlbWFuZ2xlX3N5bWJvbChuYW1lLmJlZ2luKCksIG5hbWUuZW5kKCkpOworfQpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvbGlicmVnZXgvZGVtYW5nbGVfamF2YV9zeW1ib2wuaCBiL29wcm9maWxlLTAuOS43L2xpYnJlZ2V4L2RlbWFuZ2xlX2phdmFfc3ltYm9sLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2FiOTgzNgotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2xpYnJlZ2V4L2RlbWFuZ2xlX2phdmFfc3ltYm9sLmgKQEAgLTAsMCArMSwxOSBAQAorLyoqCisgKiBAZmlsZSBkZW1hbmdsZV9qYXZhX3N5bWJvbC5oCisgKiBEZW1hbmdsZSBhIGphdmEgc3ltYm9sCisgKgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwNyBPUHJvZmlsZSBhdXRob3JzCisgKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORworICoKKyAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQorICovCisKKyNpZm5kZWYgREVNQU5HTEVfSkFWQV9TWU1CT0xfSAorI2RlZmluZSBERU1BTkdMRV9KQVZBX1NZTUJPTF9ICisKKyNpbmNsdWRlIDxzdHJpbmc+CisKKy8vLyBSZXR1cm4gYW4gZW1wdHkgc3RyaW5nIG9uIGVycm9yCitzdGQ6OnN0cmluZyBjb25zdCBkZW1hbmdsZV9qYXZhX3N5bWJvbChzdGQ6OnN0cmluZyBjb25zdCAmIG5hbWUpOworCisjZW5kaWYgLy8gREVNQU5HTEVfSkFWQV9TWU1CT0xfSApkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvbGlicmVnZXgvZGVtYW5nbGVfc3ltYm9sLmNwcCBiL29wcm9maWxlLTAuOS43L2xpYnJlZ2V4L2RlbWFuZ2xlX3N5bWJvbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQ3MWZjNQotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2xpYnJlZ2V4L2RlbWFuZ2xlX3N5bWJvbC5jcHAKQEAgLTAsMCArMSw3MCBAQAorLyoqCisgKiBAZmlsZSBkZW1hbmdsZV9zeW1ib2wuY3BwCisgKiBEZW1hbmdsZSBhIEMrKyBzeW1ib2wKKyAqCisgKiBAcmVtYXJrIENvcHlyaWdodCAyMDAyIE9Qcm9maWxlIGF1dGhvcnMKKyAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCisgKgorICogQGF1dGhvciBKb2huIExldm9uCisgKi8KKworI2luY2x1ZGUgPGNzdGRsaWI+CisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgImRlbWFuZ2xlX3N5bWJvbC5oIgorI2luY2x1ZGUgImRlbWFuZ2xlX2phdmFfc3ltYm9sLmgiCisjaW5jbHVkZSAib3BfcmVnZXguaCIKKworLy8gZnJvbSBsaWJpYmVydHkKKy8qQHtcbmFtZSBkZW1hbmdsZSBvcHRpb24gcGFyYW1ldGVyICovCisjaWZuZGVmIERNR0xfUEFSQU1TCisjIGRlZmluZSBETUdMX1BBUkFNUyAgICAgKDEgPDwgMCkgICAgICAgIC8qKjwgSW5jbHVkZSBmdW5jdGlvbiBhcmdzICovCisjZW5kaWYKKyNpZm5kZWYgRE1HTF9BTlNJCisjIGRlZmluZSBETUdMX0FOU0kgICAgICAgKDEgPDwgMSkgICAgICAgIC8qKjwgSW5jbHVkZSBjb25zdCwgdm9sYXRpbGUsIGV0YyAqLworI2VuZGlmCisvKkB9Ki8KK2V4dGVybiAiQyIgY2hhciAqIGNwbHVzX2RlbWFuZ2xlKGNoYXIgY29uc3QgKiBtYW5nbGVkLCBpbnQgb3B0aW9ucyk7CisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisKK25hbWVzcGFjZSBvcHRpb25zIHsKKwlleHRlcm4gZGVtYW5nbGVfdHlwZSBkZW1hbmdsZTsKK30KKworc3RyaW5nIGNvbnN0IGRlbWFuZ2xlX3N5bWJvbChzdHJpbmcgY29uc3QgJiBuYW1lKQoreworCWlmIChvcHRpb25zOjpkZW1hbmdsZSA9PSBkbXRfbm9uZSkKKwkJcmV0dXJuIG5hbWU7CisKKwkvLyBEbyBub3QgdHJ5IHRvIHN0cmlwIGxlYWRpbmcgdW5kZXJzY29yZSwgYXMgdGhpcyBsZWFkcyB0byBtYW55CisJLy8gQysrIGRlbWFuZ2xpbmcgZmFpbHVyZXMuIEhvd2V2ZXIgd2Ugc3RyaXAgb2ZmIGEgbGVhZGluZyAnLicKKyAgICAgICAgLy8gYXMgZ2VuZXJhdGVkIG9uIFBQQzY0CisJc3RyaW5nIGNvbnN0ICYgdG1wID0gKG5hbWVbMF0gPT0gJy4nID8gbmFtZS5zdWJzdHIoMSkgOiBuYW1lKTsKKwljaGFyICogdW5tYW5nbGVkID0gY3BsdXNfZGVtYW5nbGUodG1wLmNfc3RyKCksIERNR0xfUEFSQU1TIHwgRE1HTF9BTlNJKTsKKworCWlmICghdW5tYW5nbGVkKSB7CisJCXN0cmluZyByZXN1bHQgPSBkZW1hbmdsZV9qYXZhX3N5bWJvbChuYW1lKTsKKwkJaWYgKCFyZXN1bHQuZW1wdHkoKSkKKwkJCXJldHVybiByZXN1bHQ7CisJCXJldHVybiBuYW1lOworCX0KKworCXN0cmluZyByZXN1bHQodW5tYW5nbGVkKTsKKwlmcmVlKHVubWFuZ2xlZCk7CisKKwlpZiAob3B0aW9uczo6ZGVtYW5nbGUgPT0gZG10X3NtYXJ0KSB7CisJCXN0YXRpYyBib29sIGluaXQgPSBmYWxzZTsKKwkJc3RhdGljIHJlZ3VsYXJfZXhwcmVzc2lvbl9yZXBsYWNlIHJlZ2V4OworCQlpZiAoaW5pdCA9PSBmYWxzZSkgeworCQkJc2V0dXBfcmVnZXgocmVnZXgsIE9QX0RBVEFESVIgIi9zdGwucGF0Iik7CisJCQlpbml0ID0gdHJ1ZTsKKwkJfQorCQkvLyB3ZSBkb24ndCBwcm90ZWN0IGFnYWluc3QgZXhjZXB0aW9uIGhlcmUsIHBhdHRlcm4gbXVzdCBiZQorCQkvLyByaWdodCBhbmQgdXNlciBjYW4gZWFzaWx5IHdvcmstYXJvdW5kIGJ5IHVzaW5nIC1kCisJCXJlZ2V4LmV4ZWN1dGUocmVzdWx0KTsKKwl9CisKKwlyZXR1cm4gcmVzdWx0OworfQpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvbGlicmVnZXgvZGVtYW5nbGVfc3ltYm9sLmggYi9vcHJvZmlsZS0wLjkuNy9saWJyZWdleC9kZW1hbmdsZV9zeW1ib2wuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMmNlZmEzCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvbGlicmVnZXgvZGVtYW5nbGVfc3ltYm9sLmgKQEAgLTAsMCArMSw0MCBAQAorLyoqCisgKiBAZmlsZSBkZW1hbmdsZV9zeW1ib2wuaAorICogRGVtYW5nbGUgYSBDKysgc3ltYm9sCisgKgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMiBPUHJvZmlsZSBhdXRob3JzCisgKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORworICoKKyAqIEBhdXRob3IgSm9obiBMZXZvbgorICovCisKKyNpZm5kZWYgREVNQU5HTEVfU1lNQk9MX0gKKyNkZWZpbmUgREVNQU5HTEVfU1lNQk9MX0gKKworI2luY2x1ZGUgPHN0cmluZz4KKworLy8vIGRlbWFuZ2xlIHR5cGU6IHNwZWNpZnkgd2hhdCBkZW1hbmdsaW5nIHdlIHVzZQorZW51bSBkZW1hbmdsZV90eXBlIHsKKwkvLy8gbm8gZGVtYW5nbGluZy4KKwlkbXRfbm9uZSwKKwkvLy8gdXNlIGNwbHVzX2RlbWFuZ2xlKCkKKwlkbXRfbm9ybWFsLAorCS8vLyBub3JtYWwgcGx1cyBhIHBhc3MgdGhyb3VnaCB0aGUgcmVndWxhciBleHByZXNzaW9uIHRvIHNpbXBsaWZ5CisJLy8vIHRoZSBtYW5nbGVkIG5hbWUKKwlkbXRfc21hcnQKK307CisKKy8qKgorICogZGVtYW5nbGVfc3ltYm9sIC0gZGVtYW5nbGUgYSBzeW1ib2wKKyAqIEBwYXJhbSBuYW1lIHRoZSBtYW5nbGVkIHN5bWJvbCBuYW1lCisgKiBAcmV0dXJuIHRoZSBkZW1hbmdsZWQgbmFtZQorICoKKyAqIERlbWFuZ2xlIHRoZSBzeW1ib2wgbmFtZSwgaWYgdGhlIGdsb2JhbAorICogdmFyaWFibGUgZGVtYW5nbGUgaXMgdHJ1ZS4KKyAqCisgKiBUaGUgZGVtYW5nbGVkIG5hbWUgbGlzdHMgdGhlIHBhcmFtZXRlcnMgYW5kIHR5cGUKKyAqIHF1YWxpZmllcnMgc3VjaCBhcyAiY29uc3QiLgorICovCitzdGQ6OnN0cmluZyBjb25zdCBkZW1hbmdsZV9zeW1ib2woc3RkOjpzdHJpbmcgY29uc3QgJiBuYW1lKTsKKworI2VuZGlmIC8vIERFTUFOR0xFX1NZTUJPTF9ICmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9saWJyZWdleC9vcF9yZWdleC5jcHAgYi9vcHJvZmlsZS0wLjkuNy9saWJyZWdleC9vcF9yZWdleC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDVmZmExMgotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2xpYnJlZ2V4L29wX3JlZ2V4LmNwcApAQCAtMCwwICsxLDMwOSBAQAorLyoqCisgKiBAZmlsZSBvcF9yZWdleC5jcHAKKyAqIFRoaXMgZmlsZSBjb250YWlucyBpbXBsZW1lbnRhdGlvbiBmb3IgYSBsaWdodHdlaWdodCB3cmFwcGVyIGFyb3VuZAorICogbGliYyByZWdleCwgcHJvdmlkaW5nIHJlZ3VsYXIgZXhwcmVzc2lvbiBtYXRjaCBhbmQgcmVwbGFjZSBmYWNpbGl0eS4KKyAqCisgKiBAcmVtYXJrIENvcHlyaWdodCAyMDAzIE9Qcm9maWxlIGF1dGhvcnMKKyAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCisgKiBAcmVtYXJrIElkZWEgY29tZXMgZnJvbSBUZXh0RmlsdCBwcm9qZWN0IDxodHRwOi8vdGV4dGZpbHQuc291cmNlZm9yZ2UubmV0PgorICoKKyAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQorICovCisKKyNpbmNsdWRlIDxjZXJybm8+CisKKyNpbmNsdWRlIDxpb3N0cmVhbT4KKyNpbmNsdWRlIDxmc3RyZWFtPgorCisjaW5jbHVkZSAic3RyaW5nX21hbmlwLmgiCisKKyNpbmNsdWRlICJvcF9yZWdleC5oIgorCit1c2luZyBuYW1lc3BhY2Ugc3RkOworCituYW1lc3BhY2UgeworCitzdHJpbmcgb3BfcmVnZXJyb3IoaW50IGVyciwgcmVnZXhfdCBjb25zdCAmIHJlZ2V4cCkKK3sKKwlzaXplX3QgbmVlZGVkX3NpemUgPSByZWdlcnJvcihlcnIsICZyZWdleHAsIDAsIDApOworCWNoYXIgKiBidWZmZXIgPSBuZXcgY2hhcltuZWVkZWRfc2l6ZV07CisJcmVnZXJyb3IoZXJyLCAmcmVnZXhwLCBidWZmZXIsIG5lZWRlZF9zaXplKTsKKworCXJldHVybiBidWZmZXI7Cit9CisKKwordm9pZCBvcF9yZWdjb21wKHJlZ2V4X3QgJiByZWdleHAsIHN0cmluZyBjb25zdCAmIHBhdHRlcm4pCit7CisJaW50IGVyciA9IHJlZ2NvbXAoJnJlZ2V4cCwgcGF0dGVybi5jX3N0cigpLCBSRUdfRVhURU5ERUQpOworCWlmIChlcnIpIHsKKwkJdGhyb3cgYmFkX3JlZ2V4KCJyZWdjb21wIGVycm9yOiAiICsgb3BfcmVnZXJyb3IoZXJyLCByZWdleHApCisJCQkJKyAiIGZvciBwYXR0ZXJuIDogIiArIHBhdHRlcm4pOworCX0KK30KKworCitib29sIG9wX3JlZ2V4ZWMocmVnZXhfdCBjb25zdCAmIHJlZ2V4LCBzdHJpbmcgY29uc3QgJiBzdHIsIHJlZ21hdGNoX3QgKiBtYXRjaCwKKwkgICAgICAgc2l6ZV90IG5tYXRjaCkKK3sKKwlyZXR1cm4gcmVnZXhlYygmcmVnZXgsIHN0ci5jX3N0cigpLCBubWF0Y2gsIG1hdGNoLCAwKSAhPSBSRUdfTk9NQVRDSDsKK30KKworCit2b2lkIG9wX3JlZ2ZyZWUocmVnZXhfdCAmIHJlZ2V4cCkKK3sKKwlyZWdmcmVlKCZyZWdleHApOworfQorCisKKy8vIHJldHVybiB0aGUgaW5kZXggbnVtYmVyIGFzc29jaWF0ZWQgd2l0aCBhIGNoYXIgc2VlbiBpbiBhICJceCIuCisvLyBBbGxvd2VkIHJhbmdlIGFyZSBmb3IgeCBpcyBbMC05YS16XSByZXR1cm4gc2l6ZV90KC0xKSBpZiB4IGlzIG5vdCBpbgorLy8gdGhlc2UgcmFuZ2VzLgorc2l6ZV90IHN1YmV4cHJfaW5kZXgoY2hhciBjaCkKK3sKKwlpZiAoaXNkaWdpdChjaCkpCisJCXJldHVybiBjaCAtICcwJzsKKwlpZiAoY2ggPj0gJ2EnICYmIGNoIDw9ICd6JykKKwkJcmV0dXJuIGNoIC0gJ2EnICsgMTA7CisJcmV0dXJuIHNpemVfdCgtMSk7Cit9CisKK30gIC8vIGFub255bW91cyBuYW1lc3BhY2UKKworCitiYWRfcmVnZXg6OmJhZF9yZWdleChzdHJpbmcgY29uc3QgJiBwYXR0ZXJuKQorCTogb3BfZXhjZXB0aW9uKHBhdHRlcm4pCit7Cit9CisKKworcmVndWxhcl9leHByZXNzaW9uX3JlcGxhY2U6OnJlZ3VsYXJfZXhwcmVzc2lvbl9yZXBsYWNlKHNpemVfdCBsaW1pdF8sCisJCQkJCQkgICAgICAgc2l6ZV90IGxpbWl0X2RlZnMpCisJOgorCWxpbWl0KGxpbWl0XyksCisJbGltaXRfZGVmc19leHBhbnNpb24obGltaXRfZGVmcykKK3sKK30KKworCityZWd1bGFyX2V4cHJlc3Npb25fcmVwbGFjZTo6fnJlZ3VsYXJfZXhwcmVzc2lvbl9yZXBsYWNlKCkKK3sKKwlmb3IgKHNpemVfdCBpID0gMCA7IGkgPCByZWdleF9yZXBsYWNlLnNpemUoKSA7ICsraSkKKwkJb3BfcmVnZnJlZShyZWdleF9yZXBsYWNlW2ldLnJlZ2V4cCk7Cit9CisKKwordm9pZCByZWd1bGFyX2V4cHJlc3Npb25fcmVwbGFjZTo6YWRkX2RlZmluaXRpb24oc3RyaW5nIGNvbnN0ICYgbmFtZSwKKwkJCQkJCXN0cmluZyBjb25zdCAmIGRlZmluaXRpb24pCit7CisJZGVmc1tuYW1lXSA9IGV4cGFuZF9zdHJpbmcoZGVmaW5pdGlvbik7Cit9CisKKwordm9pZCByZWd1bGFyX2V4cHJlc3Npb25fcmVwbGFjZTo6YWRkX3BhdHRlcm4oc3RyaW5nIGNvbnN0ICYgcGF0dGVybiwKKwkJCQkJICAgICBzdHJpbmcgY29uc3QgJiByZXBsYWNlKQoreworCXN0cmluZyBleHBhbmRlZF9wYXR0ZXJuID0gZXhwYW5kX3N0cmluZyhwYXR0ZXJuKTsKKworCXJlZ2V4X3QgcmVnZXhwOworCW9wX3JlZ2NvbXAocmVnZXhwLCBleHBhbmRlZF9wYXR0ZXJuKTsKKwlyZXBsYWNlX3QgcmVnZXggPSB7IHJlZ2V4cCwgcmVwbGFjZSB9OworCXJlZ2V4X3JlcGxhY2UucHVzaF9iYWNrKHJlZ2V4KTsKK30KKworCitzdHJpbmcgcmVndWxhcl9leHByZXNzaW9uX3JlcGxhY2U6OmV4cGFuZF9zdHJpbmcoc3RyaW5nIGNvbnN0ICYgaW5wdXQpCit7CisJc3RyaW5nIGxhc3QsIGV4cGFuZGVkKGlucHV0KTsKKwlzaXplX3QgaSA9IDA7CisJZm9yIChpID0gMCA7IGkgPCBsaW1pdF9kZWZzX2V4cGFuc2lvbiA7ICsraSkgeworCQlsYXN0ID0gZXhwYW5kZWQ7CisJCWV4cGFuZGVkID0gc3Vic3RpdHV0ZV9kZWZpbml0aW9uKGxhc3QpOworCQlpZiAoZXhwYW5kZWQgPT0gbGFzdCkKKwkJCWJyZWFrOworCX0KKworCWlmIChpID09IGxpbWl0X2RlZnNfZXhwYW5zaW9uKQorCQl0aHJvdyBiYWRfcmVnZXgoInRvbyBtYW55IHN1YnN0aXR1dGlvbiBmb3I6ICsgaW5wdXQiKTsKKworCXJldHVybiBsYXN0OworfQorCisKK3N0cmluZyByZWd1bGFyX2V4cHJlc3Npb25fcmVwbGFjZTo6c3Vic3RpdHV0ZV9kZWZpbml0aW9uKHN0cmluZyBjb25zdCAmIHBhdHRlcm4pCit7CisJc3RyaW5nIHJlc3VsdDsKKwlib29sIHByZXZpb3VzX2lzX2VzY2FwZSA9IGZhbHNlOworCisJZm9yIChzaXplX3QgaSA9IDAgOyBpIDwgcGF0dGVybi5sZW5ndGgoKSA7ICsraSkgeworCQlpZiAocGF0dGVybltpXSA9PSAnJCcgJiYgIXByZXZpb3VzX2lzX2VzY2FwZSkgeworCQkJc2l6ZV90IHBvcyA9IHBhdHRlcm4uZmluZCgneycsIGkpOworCQkJaWYgKHBvcyAhPSBpICsgMSkgeworCQkJCXRocm93IGJhZF9yZWdleCgiaW52YWxpZCAkIGluIHBhdHRlcm46ICIgKyBwYXR0ZXJuKTsKKwkJCX0KKwkJCXNpemVfdCBlbmQgPSBwYXR0ZXJuLmZpbmQoJ30nLCBpKTsKKwkJCWlmIChlbmQgPT0gc3RyaW5nOjpucG9zKSB7CisJCQkJdGhyb3cgYmFkX3JlZ2V4KCJubyBtYXRjaGluZyAnfScgaW4gcGF0dGVybjogIiArIHBhdHRlcm4pOworCQkJfQorCQkJc3RyaW5nIGRlZl9uYW1lID0gcGF0dGVybi5zdWJzdHIocG9zKzEsIChlbmQtcG9zKSAtIDEpOworCQkJaWYgKGRlZnMuZmluZChkZWZfbmFtZSkgPT0gZGVmcy5lbmQoKSkgeworCQkJCXRocm93IGJhZF9yZWdleCgiZGVmaW5pdGlvbiBub3QgZm91bmQgYW5kIHVzZWQgaW4gcGF0dGVybjogKCIKKwkJCQkJCSsgZGVmX25hbWUgKyAiKSAiICsgcGF0dGVybik7CisJCQl9CisJCQlyZXN1bHQgKz0gZGVmc1tkZWZfbmFtZV07CisJCQlpID0gZW5kOworCQl9IGVsc2UgeworCQkJaWYgKHBhdHRlcm5baV0gPT0gJ1xcJyAmJiAhcHJldmlvdXNfaXNfZXNjYXBlKQorCQkJCXByZXZpb3VzX2lzX2VzY2FwZSA9IHRydWU7CisJCQllbHNlCisJCQkJcHJldmlvdXNfaXNfZXNjYXBlID0gZmFsc2U7CisJCQlyZXN1bHQgKz0gcGF0dGVybltpXTsKKwkJfQorCX0KKworCXJldHVybiByZXN1bHQ7Cit9CisKKworLy8gRklYTUUgbGltaXQgb3V0cHV0IHN0cmluZyBzaXplID8gKGNhdXNlIHdlIGNhbiBoYXZlIGV4cG9uZW50aWFsIGdyb3dpbmcKKy8vIG9mIG91dHB1dCBzdHJpbmcgdGhyb3VnaCBhIHJ1bGUgImEiID0gImFhIikKK2Jvb2wgcmVndWxhcl9leHByZXNzaW9uX3JlcGxhY2U6OmV4ZWN1dGUoc3RyaW5nICYgc3RyKSBjb25zdAoreworCWJvb2wgY2hhbmdlZCA9IHRydWU7CisJZm9yIChzaXplX3QgbnJfaXRlciA9IDA7IGNoYW5nZWQgJiYgbnJfaXRlciA8IGxpbWl0IDsgKytucl9pdGVyKSB7CisJCWNoYW5nZWQgPSBmYWxzZTsKKwkJZm9yIChzaXplX3QgaSA9IDAgOyBpIDwgcmVnZXhfcmVwbGFjZS5zaXplKCkgOyArK2kpIHsKKwkJCWlmIChkb19leGVjdXRlKHN0ciwgcmVnZXhfcmVwbGFjZVtpXSkpCisJCQkJY2hhbmdlZCA9IHRydWU7CisJCX0KKwl9CisKKwkvLyB0aGlzIGRvbid0IHJldHVybiBpZiB0aGUgaW5wdXQgc3RyaW5nIGhhcyBiZWVuIGNoYW5nZWQgYnV0IGlmCisJLy8gd2UgcmVhY2ggdGhlIGxpbWl0IG51bWJlciBvZiBpdGVyYXRpb24uCisJcmV0dXJuIGNoYW5nZWQgPT0gZmFsc2U7Cit9CisKKworYm9vbCByZWd1bGFyX2V4cHJlc3Npb25fcmVwbGFjZTo6ZG9fZXhlY3V0ZShzdHJpbmcgJiBzdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VfdCBjb25zdCAmIHJlZ2V4cCkgY29uc3QKK3sKKwlib29sIGNoYW5nZWQgPSBmYWxzZTsKKworCXJlZ21hdGNoX3QgbWF0Y2hbbWF4X21hdGNoXTsKKwlmb3IgKHNpemVfdCBpdGVyID0gMDsKKwkgICAgIG9wX3JlZ2V4ZWMocmVnZXhwLnJlZ2V4cCwgc3RyLCBtYXRjaCwgbWF4X21hdGNoKSAmJiBpdGVyIDwgbGltaXQ7CisJICAgICBpdGVyKyspIHsKKwkJY2hhbmdlZCA9IHRydWU7CisJCWRvX3JlcGxhY2Uoc3RyLCByZWdleHAucmVwbGFjZSwgbWF0Y2gpOworCX0KKworCXJldHVybiBjaGFuZ2VkOworfQorCisKK3JlZ21hdGNoX3QgY29uc3QgJgorcmVndWxhcl9leHByZXNzaW9uX3JlcGxhY2U6OmdldF9tYXRjaChyZWdtYXRjaF90IGNvbnN0ICogbWF0Y2gsIGNoYXIgaWR4KSBjb25zdAoreworCXNpemVfdCBzdWJfZXhwciA9IHN1YmV4cHJfaW5kZXgoaWR4KTsKKwlpZiAoc3ViX2V4cHIgPT0gc2l6ZV90KC0xKSkKKwkJdGhyb3cgYmFkX3JlZ2V4KCJleHBlY3QgZ3JvdXAgaW5kZXg6ICIgKyBpZHgpOworCWlmIChzdWJfZXhwciA+PSBtYXhfbWF0Y2gpCisJCXRocm93IGJhZF9yZWdleCgiaWxsZWdhbCBncm91cCBpbmRleCA6IiArIGlkeCk7CisJcmV0dXJuIG1hdGNoW3N1Yl9leHByXTsKK30KKwordm9pZCByZWd1bGFyX2V4cHJlc3Npb25fcmVwbGFjZTo6ZG9fcmVwbGFjZQorKHN0cmluZyAmIHN0ciwgc3RyaW5nIGNvbnN0ICYgcmVwbGFjZSwgcmVnbWF0Y2hfdCBjb25zdCAqIG1hdGNoKSBjb25zdAoreworCXN0cmluZyBpbnNlcnRlZDsKKwlmb3IgKHNpemVfdCBpID0gMCA7IGkgPCByZXBsYWNlLmxlbmd0aCgpIDsgKytpKSB7CisJCWlmIChyZXBsYWNlW2ldID09ICdcXCcpIHsKKwkJCWlmIChpID09IHJlcGxhY2UubGVuZ3RoKCkgLSAxKSB7CisJCQkJdGhyb3cgYmFkX3JlZ2V4KCJpbGxlZ2FsIFxcIHRyYWlsZXI6ICIgKworCQkJCSAgICAgICAgICAgICAgICByZXBsYWNlKTsKKwkJCX0KKwkJCSsraTsKKwkJCWlmIChyZXBsYWNlW2ldID09ICdcXCcpIHsKKwkJCQlpbnNlcnRlZCArPSAnXFwnOworCQkJfSAgZWxzZSB7CisJCQkJcmVnbWF0Y2hfdCBjb25zdCAmIG1hdGNoZWQgPSBnZXRfbWF0Y2gobWF0Y2gsCisJCQkJCXJlcGxhY2VbaV0pOworCQkJCWlmIChtYXRjaGVkLnJtX3NvID09IC0xICYmIAorCQkJCSAgICBtYXRjaGVkLnJtX2VvID09IC0xKSB7CisJCQkJCS8vIGVtcHR5IG1hdGNoOiBub3RoaW5nIHRvZG8KKwkJCQl9IGVsc2UgaWYgKG1hdGNoZWQucm1fc28gPT0gLTEgfHwKKwkJCQkJICAgbWF0Y2hlZC5ybV9lbyA9PSAtMSkgeworCQkJCQl0aHJvdyBiYWRfcmVnZXgoImlsbGVnYWwgbWF0Y2g6ICIgKworCQkJCQkJcmVwbGFjZSk7CisJCQkJfSBlbHNlIHsKKwkJCQkJaW5zZXJ0ZWQgKz0gc3RyLnN1YnN0cihtYXRjaGVkLnJtX3NvLAorCQkJCQkgICAgbWF0Y2hlZC5ybV9lbyAtIG1hdGNoZWQucm1fc28pOworCQkJCX0KKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWluc2VydGVkICs9IHJlcGxhY2VbaV07CisJCX0KKwl9CisKKwlzaXplX3QgZmlyc3QgPSBtYXRjaFswXS5ybV9zbzsKKwlzaXplX3QgY291bnQgPSBtYXRjaFswXS5ybV9lbyAtIG1hdGNoWzBdLnJtX3NvOworCisJc3RyLnJlcGxhY2UoZmlyc3QsIGNvdW50LCBpbnNlcnRlZCk7Cit9CisKKwordm9pZCBzZXR1cF9yZWdleChyZWd1bGFyX2V4cHJlc3Npb25fcmVwbGFjZSAmIHJlZ2V4LAorICAgICAgICAgICAgICAgICBzdHJpbmcgY29uc3QgJiBmaWxlbmFtZSkKK3sKKwlpZnN0cmVhbSBpbihmaWxlbmFtZS5jX3N0cigpKTsKKwlpZiAoIWluKSB7CisJCXRocm93IG9wX3J1bnRpbWVfZXJyb3IoIkNhbid0IG9wZW4gZmlsZSAiICsgZmlsZW5hbWUgKworCQkJCSIgZm9yIHJlYWRpbmciLCBlcnJubyk7CisJfQorCisJcmVndWxhcl9leHByZXNzaW9uX3JlcGxhY2UgdmFyX25hbWVfcnVsZTsKKwl2YXJfbmFtZV9ydWxlLmFkZF9wYXR0ZXJuKCJeXFwkKFtfYS16QS1aXVtfYS16QS1aMC05XSopWyBdKj0uKiIsICJcXDEiKTsKKwlyZWd1bGFyX2V4cHJlc3Npb25fcmVwbGFjZSB2YXJfdmFsdWVfcnVsZTsKKwl2YXJfdmFsdWVfcnVsZS5hZGRfcGF0dGVybigiLio9WyBdKlwiKC4qKVwiIiwgIlxcMSIpOworCisJcmVndWxhcl9leHByZXNzaW9uX3JlcGxhY2UgbGVmdF9ydWxlOworCWxlZnRfcnVsZS5hZGRfcGF0dGVybigiWyBdKlwiKC4qKVwiWyBdKj0uKiIsICJcXDEiKTsKKwlyZWd1bGFyX2V4cHJlc3Npb25fcmVwbGFjZSByaWdodF9ydWxlOworCXJpZ2h0X3J1bGUuYWRkX3BhdHRlcm4oIi4qPVsgXSpcIiguKilcIiIsICJcXDEiKTsKKworCXN0cmluZyBsaW5lOworCXdoaWxlIChnZXRsaW5lKGluLCBsaW5lKSkgeworCQlsaW5lID0gdHJpbShsaW5lKTsKKwkJaWYgKGxpbmUuZW1wdHkoKSB8fCBsaW5lWzBdID09ICcjJykKKwkJCWNvbnRpbnVlOworCisJCXN0cmluZyB0ZW1wID0gbGluZTsKKwkJdmFyX25hbWVfcnVsZS5leGVjdXRlKHRlbXApOworCQlpZiAodGVtcCA9PSBsaW5lKSB7CisJCQlzdHJpbmcgbGVmdCA9IGxpbmU7CisJCQlsZWZ0X3J1bGUuZXhlY3V0ZShsZWZ0KTsKKwkJCWlmIChsZWZ0ID09IGxpbmUpIHsKKwkJCQl0aHJvdyBiYWRfcmVnZXgoImludmFsaWQgaW5wdXQgZmlsZTogXCIiICsgbGluZSArICciJyk7CisJCQl9CisKKwkJCXN0cmluZyByaWdodCA9IGxpbmU7CisJCQlyaWdodF9ydWxlLmV4ZWN1dGUocmlnaHQpOworCQkJaWYgKHJpZ2h0ID09IGxpbmUpIHsKKwkJCQl0aHJvdyBiYWRfcmVnZXgoImludmFsaWQgaW5wdXQgZmlsZTogXCIiICsgbGluZSArICciJyk7CisJCQl9CisKKwkJCXJlZ2V4LmFkZF9wYXR0ZXJuKGxlZnQsIHJpZ2h0KTsKKwkJfSBlbHNlIHsKKwkJCS8vIHRlbXAgIT0gbGluZSA9PT4gdmFyX25hbWVfcnVsZSBzdWNjZWVkIHRvIHN1YnN0aXR1dGUKKwkJCS8vIGludG8gdGVtcCB0aGUgdmFyX25hbWUgcHJlc2VudCBpbiBsaW5lCisJCQlzdHJpbmcgdmFyX25hbWUgPSB0ZW1wOworCQkJc3RyaW5nIHZhcl92YWx1ZSA9IGxpbmU7CisJCQl2YXJfdmFsdWVfcnVsZS5leGVjdXRlKHZhcl92YWx1ZSk7CisJCQlpZiAodmFyX3ZhbHVlID09IGxpbmUpIHsKKwkJCQl0aHJvdyBiYWRfcmVnZXgoImludmFsaWQgaW5wdXQgZmlsZTogXCIiICsgbGluZSArICciJyk7CisJCQl9CisKKwkJCXJlZ2V4LmFkZF9kZWZpbml0aW9uKHZhcl9uYW1lLCB2YXJfdmFsdWUpOworCQl9CisJfQorfQpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvbGlicmVnZXgvb3BfcmVnZXguaCBiL29wcm9maWxlLTAuOS43L2xpYnJlZ2V4L29wX3JlZ2V4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDIzYjk4MAotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2xpYnJlZ2V4L29wX3JlZ2V4LmgKQEAgLTAsMCArMSwxMzAgQEAKKy8qKgorICogQGZpbGUgb3BfcmVnZXguaAorICogVGhpcyBmaWxlIGNvbnRhaW5zIHZhcmlvdXMgZGVmaW5pdGlvbnMgYW5kIGludGVyZmFjZSBmb3IgYQorICogbGlnaHR3ZWlnaHQgd3JhcHBlciBhcm91bmQgbGliYyByZWdleCwgcHJvdmlkaW5nIG1hdGNoCisgKiBhbmQgcmVwbGFjZSBmYWNpbGl0eS4KKyAqCisgKiBAcmVtYXJrIENvcHlyaWdodCAyMDAzIE9Qcm9maWxlIGF1dGhvcnMKKyAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCisgKiBAcmVtYXJrIElkZWEgY29tZXMgZnJvbSBUZXh0RmlsdCBwcm9qZWN0IDxodHRwOi8vdGV4dGZpbHQuc291cmNlZm9yZ2UubmV0PgorICoKKyAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQorICovCisKKyNpZm5kZWYgT1BfUkVHRVhfSAorI2RlZmluZSBPUF9SRUdFWF9ICisKKy8vIHJlcXVpcmVkIGJ5IHBvc2l4IGJlZm9yZSBpbmNsdWRpbmcgcmVnZXguaAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHJlZ2V4Lmg+CisKKyNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8dmVjdG9yPgorI2luY2x1ZGUgPG1hcD4KKworI2luY2x1ZGUgIm9wX2V4Y2VwdGlvbi5oIgorCisvKioKKyAqIGlsbCBmb3JtZWQgcmVndWxhciBleHByZXNzaW9uIG9yIGV4cHJlc3Npb24gdGhyb3cgc3VjaCBleGNlcHRpb24KKyAqLworc3RydWN0IGJhZF9yZWdleCA6IG9wX2V4Y2VwdGlvbiB7CisJYmFkX3JlZ2V4KHN0ZDo6c3RyaW5nIGNvbnN0ICYgcGF0dGVybik7Cit9OworCisvKioKKyAqIGxpZ2h0d2VpZ2h0IGVuY2Fwc3VsYXRpb24gb2YgcmVnZXggbGliIHNlYXJjaCBhbmQgcmVwbGFjZQorICoKKyAqIFNlZSBzdGwucGF0IGZvciBmdXJ0aGVyIGRldGFpbHMgYW5kIGV4YW1wbGVzIG9mIHVzZWQgc3ludGF4LgorICovCitjbGFzcyByZWd1bGFyX2V4cHJlc3Npb25fcmVwbGFjZSB7CitwdWJsaWM6CisJLyoqCisJICogQHBhcmFtIGxpbWl0IGxpbWl0IG9uIG51bWJlciBvZiBzZWFyY2ggYW5kIHJlcGxhY2UgZG9uZQorCSAqIEBwYXJhbSBsaW1pdF9kZWZzX2V4cGFuc2lvbiBsaW1pdCBvbiBudW1iZXIgb2YgZXhwYW5zaW9uIGRvbmUKKwkgKiAgZHVyaW5nIHJlcGxhY2VtZW50IG9mIHJlZ3VsYXIgZGVmaW5pdGlvbiBuYW1lIGJ5IHRoZWlyIGV4cGFuc2lvbgorCSAqCisJICogYnVpbGQgYW4gb2JqZWN0IGhvbGRpbmcgcmVndWxhciBkZWZpbnRpb24gYW5kIHJlZ3VsYXIgZXhwcmVzc2lvbgorCSAqICYgcmVwbGFjZSwgcHJlcGFyaW5nIGl0IGZvciBzdWJzdGl0dXRpb24gYWxhIHNlZAorCSAqLworCXJlZ3VsYXJfZXhwcmVzc2lvbl9yZXBsYWNlKHNpemVfdCBsaW1pdCA9IDEwMCwKKwkJCQkgICBzaXplX3QgbGltaXRfZGVmc19leHBhbnNpb24gPSAxMDApOworCX5yZWd1bGFyX2V4cHJlc3Npb25fcmVwbGFjZSgpOworCisJLyoqCisJICogQHBhcmFtIG5hbWUgYSByZWd1bGFyIGRlZmluaXRpb24gbmFtZQorCSAqIEBwYXJhbSByZXBsYWNlIHRoZSBzdHJpbmcgdG8gc3Vic2l0dXRlIGluIG90aGVyIHJlZ3VsYXIgZGVmaW5pdGlvbgorCSAqIG9yIHJlZ3VsYXIgZXhlcHJlc3Npb24gd2hlbiB0aGlzIHJlZ3VsYXIgZGVmaW50aW9uIG5hbWUgaXMKKwkgKiBlbmNvdXRlcmVkLgorCSAqLworCXZvaWQgYWRkX2RlZmluaXRpb24oc3RkOjpzdHJpbmcgY29uc3QgJiBuYW1lLAorCQkJICAgIHN0ZDo6c3RyaW5nIGNvbnN0ICYgcmVwbGFjZSk7CisJLyoqCisJICogQHBhcmFtIHBhdHRlcm4gYSByZWd1bGFyIGV4cHJlc3Npb24gcGF0dGVybiwgUE9TSVggZXh0ZW5kZWQgbm90YXRpb24KKwkgKiBAcGFyYW0gcmVwbGFjZSB0aGUgcmVwbGFjZSBzdHJpbmcgdG8gdXNlIHdoZW4gdGhpcyByZWd1bGFyCisJICogIGV4cHJlc3Npb24gaXMgbWF0Y2hlZAorCSAqCisJICogWW91IGNhbiBpbWJlZCByZWd1bGFyIGRlZmluaXRpb24gaW4gcGF0dGVybiBidXQgbm90IGluIHJlcGxhY2UuCisJICovCisJdm9pZCBhZGRfcGF0dGVybihzdGQ6OnN0cmluZyBjb25zdCAmIHBhdHRlcm4sCisJCQkgc3RkOjpzdHJpbmcgY29uc3QgJiByZXBsYWNlKTsKKworCS8qKgorCSAqIEBwYXJhbSBzdHIgdGhlIGlucHV0L291dHB1dCBzdHJpbmcgd2hlcmUgd2Ugc2VhcmNoIHBhdHRlcm4gYW5kCisJICogcmVwbGFjZSB0aGVtLgorCSAqCisJICogRXhlY3V0ZSBsb29wIGF0IG1heCBsaW1pdCB0aW1lIG9uIHRoZSBzZXQgb2YgcmVndWxhciBleHByZXNzaW9uCisJICoKKwkgKiBSZXR1cm4gdHJ1ZSBpZiB0b28gbWFueSBtYXRjaCBvY2N1ciBhbmQgcmVwbGFjaW5nIGhhcyBiZWVuIHN0b3BwZWQKKwkgKiBkdWUgdG8gcmVhY2ggbGltaXRfZGVmc19leHBhbnNpb24uIFlvdSBjYW4gdGVzdCBpZiBzb21lIHBhdHRlcm4gaGFzCisJICogYmVlbiBtYXRjaGVkIGJ5IHNhdmluZyB0aGUgaW5wdXQgc3RyaW5nIGFuZCBjb21wYXJpbmcgaXQgdG8gdGhlIG5ldworCSAqIHZhbHVlLiBUaGVyZSBpcyBubyB3YXkgdG8gZGV0ZWN0IHMvYS9hIGJlY2F1c2UgdGhlIG91dHB1dCBzdHJpbmcKKwkgKiB3aWxsIGJlIGlkZW50aWNhbCB0byB0aGUgaW5wdXQgc3RyaW5nLgorCSAqLworCWJvb2wgZXhlY3V0ZShzdGQ6OnN0cmluZyAmIHN0cikgY29uc3Q7Citwcml2YXRlOgorCXN0cnVjdCByZXBsYWNlX3QgeworCQkvLyB3aGVuIHRoaXMgcmVnZXhwIGlzIG1hdGNoZWQKKwkJcmVnZXhfdCByZWdleHA7CisJCS8vIHJlcGxhY2UgdGhlIG1hdGNoZWQgcGFydCB3aXRoIHRoaXMgc3RyaW5nCisJCXN0ZDo6c3RyaW5nIHJlcGxhY2U7CisJfTsKKworCS8vIGhlbHBlciB0byBleGVjdXRlCisJYm9vbCBkb19leGVjdXRlKHN0ZDo6c3RyaW5nICYgc3RyLCByZXBsYWNlX3QgY29uc3QgJiByZWdleHApIGNvbnN0OworCXZvaWQgZG9fcmVwbGFjZShzdGQ6OnN0cmluZyAmIHN0ciwgc3RkOjpzdHJpbmcgY29uc3QgJiByZXBsYWNlLAorCQkJcmVnbWF0Y2hfdCBjb25zdCAqIG1hdGNoKSBjb25zdDsKKworCS8vIGhlbHBlciB0byBhZGRfZGVmaW5pdGlvbigpIGFuZCBhZGRfcGF0dGVybigpCisJc3RkOjpzdHJpbmcgZXhwYW5kX3N0cmluZyhzdGQ6OnN0cmluZyBjb25zdCAmIGlucHV0KTsKKworCS8vIGhlbHBlciB0byBhZGRfcGF0dGVybgorCXN0ZDo6c3RyaW5nIHN1YnN0aXR1dGVfZGVmaW5pdGlvbihzdGQ6OnN0cmluZyBjb25zdCAmIHBhdHRlcm4pOworCisJLy8gcmV0dXJuIHRoZSBtYXRjaCBvZiB0aHJvdyBpZiBpZHggaXMgaW52YWxpZAorCXJlZ21hdGNoX3QgY29uc3QgJiBnZXRfbWF0Y2gocmVnbWF0Y2hfdCBjb25zdCAqIG1hdGNoLCBjaGFyIGlkeCkgY29uc3Q7CisKKwkvLyBkb24ndCBpbmNyZWFzZSB0b28sIGl0IGhhdmUgZGlyZWN0IGltcGFjdCBvbiBwZXJmb3JtYW5jZS4gVGhpcyBsaW1pdAorCS8vIHRoZSBudW1iZXIgb2YgZ3JvdXBpbmcgZXhwcmVzc2lvbiBhbGxvd2VkIGluIGEgcmVndWxhciBleHByZXNzaW9uCisJLy8gTm90ZSB0aGFuIHlvdSBjYW4gdXNlIGdyb3VwaW5nIG1hdGNoIG9wZXJhdG9yID4gOSBvbmx5IGluIHRoZQorCS8vIHJlcGxhY2UgcnVsZSBub3QgaW4gbWF0Y2ggcmVndWxhciBleHByZXNzaW9uIHNpbmNlIFBPU0lYIGRvbid0IGFsbG93CisJLy8gbW9yZSB0aGFuIFw5IGluIG1hdGNoaW5nIHNlcXVlbmNlLgorCXN0YXRpYyBjb25zdCBzaXplX3QgbWF4X21hdGNoID0gMTY7CisKKwlzaXplX3QgbGltaXQ7CisJc2l6ZV90IGxpbWl0X2RlZnNfZXhwYW5zaW9uOworCXN0ZDo6dmVjdG9yPHJlcGxhY2VfdD4gcmVnZXhfcmVwbGFjZTsKKwkvLy8gZGljdGlvbmFyeSBvZiByZWd1bGFyIGRlZmluaXRpb24KKwl0eXBlZGVmIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBzdGQ6OnN0cmluZz4gZGVmc19kaWN0OworCWRlZnNfZGljdCBkZWZzOworfTsKKworLyoqCisgKiBAcGFyYW0gcmVnZXggdGhlIHJlZ3VsYXJfZXhwcmVzc2lvbl9yZXBsYWNlIHRvIGZpbGwKKyAqIEBwYXJhbSBmaWxlbmFtZSB0aGUgZmlsZW5hbWUgZnJvbSB3aGVyZSB0aGUgZGVpZm5pdGlvbiBhbmQgcGF0dGVybiBhcmUgcmVhZAorICoKKyAqIGFkZCB0byByZWdleCBwYXR0ZXJuIGFuZCByZWd1bGFyIGRlZmluaXRpb24gcmVhZCBmcm9tIHRoZSBnaXZlbiBmaWxlCisgKi8KK3ZvaWQgc2V0dXBfcmVnZXgocmVndWxhcl9leHByZXNzaW9uX3JlcGxhY2UmIHJlZ2V4LAorCQkgc3RkOjpzdHJpbmcgY29uc3QgJiBmaWxlbmFtZSk7CisKKyNlbmRpZiAvKiAhT1BfUkVHRVhfSCAqLwpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvbGlicmVnZXgvc3RsLnBhdC5pbiBiL29wcm9maWxlLTAuOS43L2xpYnJlZ2V4L3N0bC5wYXQuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTA5MjM1YQotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2xpYnJlZ2V4L3N0bC5wYXQuaW4KQEAgLTAsMCArMSwxNjIgQEAKKyMgZm9ybWF0IDoKKyMgJG5hbWUgPSAicmVndWxhcl9kZWZpbml0aW9uIgorIyAicGF0dGVybiIgPSAic3Vic3RpdHVlZF9wYXR0ZXJuIgorIyBwYXR0ZXJuIGNhbiBjb250YWluIHJlZmVyZW5jZSB0byByZWd1bGFyIGRlZmluaXRpb24gd2l0aCAke25hbWV9CisjIHRoaXMgb2NjdXJlbmNlIGFyZSBzdWJzdGl0dWVkIGluIHBhdHRlcm4gYnkgdGhlaXIgZGVmaW5pdGlvbgorCisjIHJlZ3VsYXJfZGVmaW5pdGlvbiBjb250YWluaW5nIG90aGVyIHJlZ3VsYXJfZGVmaW5pdGlvbiByZWZlciBhbHdheXMgdG8gYQorIyBwcmV2aW91c2x5IGRlZmluZWQgcmVndWxhciBkZWZpbml0aW9uIHNvIHRoZXkgY2FuIGxvb2sgbGlrZSByZWN1cnNpdmUgYnV0IGFyZQorIyBub3QuIG9wX3JlZ2V4LmNwcCBkbyBzdWNlc3NpdmUgYXBwbHkgb2YgcGF0dGVybiB3aGlsc3QgY2hhbmdlIG9jY3VyICh3aXRoIGEKKyMgaGFyZCBsaW1pdCBvbiBudW1iZXIgb2Ygc3Vic2l0dXRpb25zKSBzbyB5b3UgY2FuIGFwcGx5IHN1Y2Nlc3NpdmUgY2hhbmdlIHRvCisjIHRyYW5zbGF0ZSBmaXJzdCB0byBhbiBpbnRlcm1lZGlhdGUgc2ltcGxpZmllZCBmb3JtIHRoZW4gY29udGludWUgc3Vic3RpdHV0aW9uCisjIGluIGFub3RoZXIgcGF0dGVybiAoc2VlIGlvc2Z3ZCBzZWN0aW9uKS4gVGhlIG51bWJlciBvZiBncm91cGluZyByZWdleHAgaXMKKyMgbGltaXRlZCwgc2VlIHN0YXRpYyBjb25zdCBzaXplX3QgbWF4X21hdGNoOyBpbiBvcF9yZWdleC5oLiBOb3RlIHRoYW4gbWFuZ2xlZAorIyBuYW1lIHByb2R1Y2UgY2FuIGJlIGlsbGVnYWwgYXMgSSBjaG9vc2UgdG8gb3V0cHV0IGxpa2UgdmVjdG9yPHR5cGU8VD4+IHJhdGhlcgorIyB0aGFuIHZlY3Rvcjx0eXBlPFQ+ID4KKworIyBtYW4gcmVnZXggaXMgYSBmcmllbmQsIGlzIGl0IHlvdXIgPworCiskaW50ZWdlciA9ICJcPFswLTldKyIKKyRpZGVudGlmaWVyID0gIlw8W19hLXpBLVpdW19hLXpBLVowLTldKiIKKyR0eXBlbmFtZSA9ICIke2lkZW50aWZpZXJ9KDo6JHtpZGVudGlmaWVyfSkqIgorJHR5cGVuYW1lID0gIiR7dHlwZW5hbWV9KDwke3R5cGVuYW1lfSgsICR7dHlwZW5hbWV9KSo+KSoiCisjIGFkZGluZyBtb3JlIHN1YnN0aXR1dGlvbiBhbGxvdyBtb3JlIG5lc3RlZCB0ZW1wbGF0ZWQgdHlwZSBidXQgd2UgcnVuIG91dCBvZgorIyBcZGlnaXQgd2hpY2ggaXMgYSB3YWxsLiBJbmRlZWQgaWYgeW91IGFkZCBtb3JlICgpIGdyb3VwaW5nIHlvdSBuZWVkIHRvCisjIHJlbmFtZSBhbGwgcmVsZXZhbnQgXGRpZ2l0IGluIHBhdHRlcm4gd2hpY2ggdXNlIHRoaXMgcmVndWxhciBkZWZpbml0aW9uCisjICR0eXBlbmFtZSA9ICIke3R5cGVuYW1lfSg8JHt0eXBlbmFtZX0oLCAke3R5cGVuYW1lfSkqPikqIgorIyBmaW5hbGx5IGFkZCBzdGFuZGFyZCBDIHR5cGUgbm90IHJlY29nbml6ZWQgYnkgYWJvdmUgcGF0dGVybnMsIHRoZSB3YXkgdG8gYWRkCisjIHBvaW50ZXIgaXMgdWdseSBidXQgd2UgY2FuJ3QgYWRkIGFueSBncm91cGluZyB0byBub3Qgb3ZlcnJ1biA5IG1heCBncm91cAorIyBpbiBsZWZ0IHBhdHRlcm4gcnVsZXMgc2lkZS4uCiskdHlwZW5hbWUgPSAiKCR7dHlwZW5hbWV9WyBdKlwqKnx1bnNpZ25lZCBzaG9ydFsgXSoqXCoqfHVuc2lnbmVkIGludFsgXSpcKip8dW5zaWduZWQgbG9uZ1sgXSpcKip8dW5zaWduZWQgY2hhclsgXSpcKip8c2lnbmVkIGNoYXJbIF0qXCoqfGxvbmcgbG9uZ1sgXSpcKip8dW5zaWduZWQgbG9uZyBsb25nWyBdKlwqKnxsb25nIGRvdWJsZVsgXSpcKiopIgorJHB0cmRpZmZfdF90eXBlID0gIihpbnR8bG9uZykiCisKKworIyBGSVhNRTogcmVhbGx5IGRpc2N1c3NhYmxlIGJ1dCBzaW1wbGlmeSBvdXRwdXQgYW5kIHRoZSBuZXh0IHBhdHRlcm4uCisiXDxzdGQ6OiIgPSAiIgorIiA+IiA9ICI+IgorIyBmb3IgdGhlc2UgdHdvIHdlIGNhbid0IG1hdGNoIGJlZ2luIG9mIHdvcmQuCisiXHthbm9ueW1vdXNcfTo6IiA9ICIiCisiXChhbm9ueW1vdXMgbmFtZXNwYWNlXCk6OiIgPSAiIgorCisjIHNwZWNpZmljIHRvIGdjYyAyLjk1CisiXDxiYXNpY19zdHJpbmc8Y2hhciwgc3RyaW5nX2NoYXJfdHJhaXRzPGNoYXI+LCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8dHJ1ZSwgMD4+IiA9ICJzdHJpbmciCisjIHR3byBwYXNzLCBmaXJzdCBzaHJpbmsgYWxsb2NhdG9yPD4gdGhlbiBsZXNzPD4gYWxsb3dpbmcgbWFwIHdpdGggdXNlciBkZWZpbmVkCisjIGNvbXBhcmF0b3IKKyJcPChtdWx0aSk/bWFwPCR7dHlwZW5hbWV9LCAke3R5cGVuYW1lfSwgJHt0eXBlbmFtZX0sIGFsbG9jYXRvcjxcOD4+IiA9ICJcMW1hcDxcMiwgXDgsIFxlPiIKKyJcPChtdWx0aSk/bWFwPCR7dHlwZW5hbWV9LCAke3R5cGVuYW1lfSwgbGVzczxcMj4+IiA9ICJcMW1hcDxcMiwgXDg+IgorCisiXDxiaXRzZXQ8KCR7aW50ZWdlcn0pLCB1bnNpZ25lZCBsb25nPiIgPSAiYml0c2V0PFwxPiIKKyJcPChbaW9dc3RyZWFtX2l0ZXJhdG9yKTxjaGFyLCAke3B0cmRpZmZfdF90eXBlfT4iID0gIlwxPGNoYXI+IgorCisjIGNvbW1vbiB0byBhbGwgc3VwcG9ydGVkIGdjYyB2ZXJzaW9uLgorIlw8ZGVxdWU8JHt0eXBlbmFtZX0sIGFsbG9jYXRvcjxcMT4sIDA+IiA9ICJkZXF1ZTxcMT4iCisiXDwoc3RhY2t8cXVldWUpPCR7dHlwZW5hbWV9LCBkZXF1ZTxcMj4+IiA9ICJcMTxcMj4iCisiXDwodmVjdG9yfGxpc3R8ZGVxdWUpPCR7dHlwZW5hbWV9LCBhbGxvY2F0b3I8XDI+PiIgPSAiXDE8XDI+IgorIyBzdHJpY3RseSBzcGVha2luZyAzcmQgcGFyYW1ldGVycyBpcyBsZXNzPENvbnRhaW5lclR5cGU6OnZhbHVlX3R5cGU+CisiXDxwcmlvcml0eV9xdWV1ZTwke3R5cGVuYW1lfSwgdmVjdG9yPFwxPiwgbGVzczxcMT4+IiA9ICJwcmlvcml0eV9xdWV1ZTxcMT4iCisjIHR3byBwYXNzLCBmaXJzdCBzaHJpbmsgYWxsb2NhdG9yPD4gdGhlbiBsZXNzPD4gYWxsb3dpbmcgbWFwIHdpdGggdXNlciBkZWZpbmVkCisjIGNvbXBhcmF0b3IKKyJcPChtdWx0aSk/c2V0PCR7dHlwZW5hbWV9LCAke3R5cGVuYW1lfSwgYWxsb2NhdG9yPFwyPj4iID0gIlwxc2V0PFwyLCBcOD4iCisiXDwobXVsdGkpP3NldDwke3R5cGVuYW1lfSwgbGVzczxcMj4+IiA9ICJcMXNldDxcMj4iCisKKyMgZ2V0IHJpZGUgb2YgX1JiX3RyZWUgaXRlcmF0b3IgdHlwZWRlZiwgdGhlc2UgYXJlIGFsc28gbWFwcGVkIGJ5IG1hcC9zZXQgYnV0CisjIHdlIGNhbid0IGRpc3Rpbmd1aXNoIGEgc2V0PHBhaXI8aW50LCBpbnQ+Pjo6aXRlcmF0b3IgYW5kIGEKKyMgbWFwPGludCwgaW50Pjo6aXRlcmF0b3IgYXMgdGhleSBkZWNheSB0byBhbiBpZGVudGljYWwgdHlwZWRlZiBzbyB3ZSBkb24ndCB0cnkKKyMgdG8gYmUgY2xldmVyIGhlcmUuCisiXDxfUmJfdHJlZV9pdGVyYXRvcjwke3R5cGVuYW1lfSwgXDEgY29uc3RbIF0qJiwgXDEgY29uc3RbIF0qXCo+IiA9ICJfUmJfdHJlZTxcMT46OmNvbnN0X2l0ZXJhdG9yIgorIlw8X1JiX3RyZWVfaXRlcmF0b3I8JHt0eXBlbmFtZX0sIFwxWyBdKiYsIFwxWyBdKlwqPiIgPSAiX1JiX3RyZWU8XDE+OjppdGVyYXRvciIKKyMgaW1wb3J0YW50IHNwZWNpYWwgY2FzZSBmb3IgbWFwL211bHRpbWFwIGl0ZXJhdG9yCisiXDxfUmJfdHJlZV9pdGVyYXRvcjwocGFpcjwke3R5cGVuYW1lfSBjb25zdCwgJHt0eXBlbmFtZX0+KSwgXDEgY29uc3RbIF0qJiwgXDEgY29uc3RbIF0qXCo+IiA9ICJfUmJfdHJlZTxcMT46OmNvbnN0X2l0ZXJhdG9yIgorIlw8X1JiX3RyZWVfaXRlcmF0b3I8KHBhaXI8JHt0eXBlbmFtZX0gY29uc3QsICR7dHlwZW5hbWV9PiksIFwxWyBdKiYsIFwxWyBdKlwqPiIgPSAiX1JiX3RyZWU8XDE+OjppdGVyYXRvciIKKyMgMi45NS8zLjIgc2V0L211bHRpc2V0IGltcGxlbWVudGF0aW9uCisiXDxfUmJfdHJlZTwke3R5cGVuYW1lfSwgXDEsIF9JZGVudGl0eTxcMT4sICR7dHlwZW5hbWV9LCBhbGxvY2F0b3I8XDE+PiIgPSAiX1JiX3RyZWU8XDEsIFwxLCBfSWRlbnRpdHk8XDE+LCBcNz4iCisiX1JiX3RyZWU8JHt0eXBlbmFtZX0sIFwxLCBfSWRlbnRpdHk8XDE+LCBsZXNzPFwxPj4iID0gIl9SYl90cmVlPFwxLCBcMSwgX0lkZW50aXR5PFwxPj4iCisjIDIuOTUgbWFwL211bHRpbWFwIGltcGxlbWVudGF0aW9uCisiXDxfUmJfdHJlZTwke3R5cGVuYW1lfSwgcGFpcjxcMSBjb25zdCwgKCR7dHlwZW5hbWV9KCBjb25zdCk/KT4sIF9TZWxlY3Qxc3Q8cGFpcjxcMSBjb25zdCwgXDc+PiwgbGVzczxcMT4sIGFsbG9jYXRvcjxcNz4+IiA9ICJfUmJfdHJlZTxcMSwgcGFpcjxcMSBjb25zdCwgXDc+LCBfU2VsZWN0MXN0PHBhaXI8XDEgY29uc3QsIFw3Pj4sIGxlc3M8XDE+PiIKKyMgMy4yIG1hcC9tdWx0aW1hcCBpbXBsZW1lbnRhdGlvbgorIlw8X1JiX3RyZWU8JHt0eXBlbmFtZX0sIHBhaXI8XDEgY29uc3QsICR7dHlwZW5hbWV9PiwgX1NlbGVjdDFzdDxwYWlyPFwxIGNvbnN0LCBcNz4+LCBsZXNzPFwxPiwgYWxsb2NhdG9yPHBhaXI8XDEgY29uc3QsIFw3Pj4+IiA9ICJfUmJfdHJlZTxcMSwgcGFpcjxcMSBjb25zdCwgXDc+LCBfU2VsZWN0MXN0PHBhaXI8XDEgY29uc3QsIFw3Pj4sIGxlc3M8XDE+PiIKKyMgbm93IHdlIGNhbiBzaHJpbmsgZGVmYXVsdCBjb21wYXJhdG9yLgorIlw8X1JiX3RyZWU8JHt0eXBlbmFtZX0sIHBhaXI8XDEgY29uc3QsICgke3R5cGVuYW1lfSggY29uc3QpPyk+LCBfU2VsZWN0MXN0PHBhaXI8XDEgY29uc3QsIFw3Pj4sIGxlc3M8XDE+PiIgPSAiX1JiX3RyZWU8XDEsIHBhaXI8XDEgY29uc3QsIFw3PiwgX1NlbGVjdDFzdDxwYWlyPFwxIGNvbnN0LCBcNz4+PiIKKyMgZ2V0IHJpZCBvZiBfU2VsZWN0MXN0IGFuZCBfSWRlbnRpdHkKKyMgRklYTUU6IHRoZSBwcmVzZW5jZSBvZCBfSWRlbnRpdHk8PiBhbmQgX1NlbGVjdDFzdDw+IGFsbG93ZWQgdG8gcXVpY2tseQorIyBkaWZmZXJlbnRpYXRlIGEgc2V0IG9yIGEgbWFwLCB0aGUgcnVsZSBub3cgdG8gZGlmZmVyZW50aWF0ZSB0aGVtIGlzOgorIyBzZWNvbmQgcGFyYW1ldGVyIHRvIF9SYl90cmVlKiBpcyBhIHBhaXI8PiA9PT4gbWFwIGVsc2Ugc2V0PD4uIEVpdGhlciB3ZSBuZWVkCisjIHRvIGRvY3VtZW50IHRoaXMgb3IgcmVtb3ZlIF9JZGVudGl0eSBhbmQgX1NlbGVjdDFzdCBwYXR0ZXJuCisiXDxfSWRlbnRpdHk8JHt0eXBlbmFtZX0+IiA9ICJcMSIKKyJcPF9TZWxlY3Qxc3Q8cGFpcjwke3R5cGVuYW1lfSBjb25zdCwgJHt0eXBlbmFtZX0oIGNvbnN0KT8+PiIgPSAiXDEgY29uc3QiCisKKyJcPF9MaXN0X2Jhc2U8JHt0eXBlbmFtZX0sIGFsbG9jYXRvcjxcMT4+IiA9ICJfTGlzdF9iYXNlPFwxPiIKKworIyAyLjk1IHRlbXBsYXRpemVkIG9wZXJhdG9yPDwgYW5kID4+IGV4aXN0IG9ubHkgZm9yIHN0ZDo6c3RyaW5nCisiXDxvc3RyZWFtICYgb3BlcmF0b3I8PDxjaGFyLCBzdHJpbmdfY2hhcl90cmFpdHM8Y2hhcj4sIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTx0cnVlLCAwPj5cKG9zdHJlYW0gJiwgc3RyaW5nIGNvbnN0ICZcKSIgPSAib3N0cmVhbSAmIG9wZXJhdG9yPDwob3N0cmVhbSAmLCBzdHJpbmcgY29uc3QgJikiCisiXDxpc3RyZWFtICYgKG9wZXJhdG9yPj58Z2V0bGluZSk8Y2hhciwgc3RyaW5nX2NoYXJfdHJhaXRzPGNoYXI+LCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8dHJ1ZSwgMD4+XChpc3RyZWFtICYsIHN0cmluZyAmXCkiID0gImlzdHJlYW0gJiBcMShpc3RyZWFtICYsIHN0cmluZyAmKSIKKworIyAzLjAgdGVtcGxhdGl6ZWQgb3BlcmF0b3I8PCBhbmQgPj4gZXhpc3Qgb25seSBmb3Igc3RkOjpzdHJpbmcKKyJcPG9zdHJlYW0mIG9wZXJhdG9yPDwgPGNoYXIsIGNoYXJfdHJhaXRzPGNoYXI+LCBhbGxvY2F0b3I8Y2hhcj4+XChvc3RyZWFtJiwgc3RyaW5nIGNvbnN0JlwpIiA9ICJvc3RyZWFtICYgb3BlcmF0b3I8PChvc3RyZWFtICYsIHN0cmluZyBjb25zdCAmKSIKKyJcPGlzdHJlYW0mIChvcGVyYXRvcj4+fGdldGxpbmUpIDxjaGFyLCBjaGFyX3RyYWl0czxjaGFyPiwgYWxsb2NhdG9yPGNoYXI+PlwoaXN0cmVhbSYsIHN0cmluZyZcKSIgPSAiaXN0cmVhbSAmIFwxKGlzdHJlYW0gJiwgc3RyaW5nICYpIgorCisjIDIuOTUvMy4yIGFsZ29yaXRobQorIlw8KCR7dHlwZW5hbWV9KCBjb25zdCk/KSBcKiBmaW5kPFwxIFwqLCAke3R5cGVuYW1lfT5cKFwxIFwqLCBcMSBcKiwgXDkgY29uc3QgJiwgJHt0eXBlbmFtZX1cKSIgPSAiXDEgKiBmaW5kKFwxICosIFwxICosIFw5IGNvbnN0ICYsIFxmKSIKKworIlw8KCR7dHlwZW5hbWV9KCBjb25zdCk/KSBcKiBmaW5kX2lmPFwxIFwqLCAke3R5cGVuYW1lfT5cKFwxIFwqLCBcMSBcKiwgXDksIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKSIgPSAiXDEgKiBmaW5kX2lmKFwxICosIFwxICosIFw5LCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykiCisKKyMgZ2NjIDMuMiwgbm90IHRlc3RlZCBvbiAzLjAsIDMuMSBidXQgcHJvYmFibHkgd29yay4KKyMgRklYTUU6IHRoZXJlIGlzIGEgcG90ZW50aWFsIHByb2JsZW0gaGVyZSB3aXRoIG1hcDxpbnQgY29uc3QsIGxvbmc+CisjIHRoZSBwYWlyIGJlY29tZSBwYWlyPFwyLCBcOD4gbm90IHBhaXI8XDIgY29uc3QsIFw4Piwgd2hvIHVzZSB0aGUgYWJvdmUsCisjIGlzIGl0IGxlZ2FsID8KKyMgdHdvIHBhc3MsIGZpcnN0IHNocmluayBhbGxvY2F0b3I8PiB0aGVuIGxlc3M8PiBhbGxvd2luZyBtYXAgd2l0aCB1c2VyIGRlZmluZWQKKyMgY29tcGFyYXRvcgorIlw8KG11bHRpKT9tYXA8JHt0eXBlbmFtZX0sICR7dHlwZW5hbWV9LCAke3R5cGVuYW1lfSwgYWxsb2NhdG9yPHBhaXI8XDIgY29uc3QsIFw4Pj4+IiA9ICJcMW1hcDxcMiwgXDgsIFxlPiIKKyMgdGhpcyBvbmUgZXhpc3QgYWxyZWFkeSBmb3IgMi45NSB0aGUgZmlyc3QgdHJhbnNmb3JtYXRpb24gZ2l2aW5nIGEgY29tbW9uCisjIGZvcm0gZm9yIDIuOTUvMy4yCisjICJcPChtdWx0aSk/bWFwPCR7dHlwZW5hbWV9LCAke3R5cGVuYW1lfSwgbGVzczxcMj4+IiA9ICJcMW1hcDxcMiwgXDg+IgorCisiXDxiaXRzZXQ8XCh1bnNpZ25lZCggbG9uZyk/XCkoJHtpbnRlZ2VyfSk+IiA9ICJiaXRzZXQ8XDI+IgorCisjIGl0ZXJhdG9yCisiXDxpdGVyYXRvcjwoaW5wdXR8b3V0cHV0fGZvcndhcmR8YmlkaXJlY3Rpb25hbHxyYW5kb20pX2l0ZXJhdG9yX3RhZywgJHt0eXBlbmFtZX0sICgke3B0cmRpZmZfdF90eXBlfSksIFw4XCosIFw4Jj4iID0gIml0ZXJhdG9yPFwxX2l0ZXJhdG9yX3RhZywgXDI+IgorIlw8KFtpb11zdHJlYW1faXRlcmF0b3IpPCR7dHlwZW5hbWV9LCBjaGFyLCBjaGFyX3RyYWl0czxjaGFyPiwgJHtwdHJkaWZmX3RfdHlwZX0+IiA9ICJcMTxcMj4iCisKKyMgX19nbnVfY3h4OjpfX25vcm1hbF9pdGVyYXRvciBhcmUgdXNlZCBpbiB0d28gY29udGV4dDogYmFzaWNfc3RyaW5nPD4gYW5kCisjIHZlY3RvcjxUPiB3ZSBkZWNheSB0aGVtIHRvIHN0cmluZzo6aXRlcmF0b3IsIHZlY3RvcjxUPjo6aXRlcmF0b3IKKyJcPF9fZ251X2N4eDo6X19ub3JtYWxfaXRlcmF0b3I8Y2hhciBjb25zdFwqLCBzdHJpbmc+IiA9ICJzdHJpbmc6OmNvbnN0X2l0ZXJhdG9yIgorIlw8X19nbnVfY3h4OjpfX25vcm1hbF9pdGVyYXRvcjxjaGFyXCosIHN0cmluZz4iID0gInN0cmluZzo6aXRlcmF0b3IiCisiXDxfX2dudV9jeHg6Ol9fbm9ybWFsX2l0ZXJhdG9yPHdjaGFyX3QgY29uc3RcKiwgd3N0cmluZz4iID0gIndzdHJpbmc6OmNvbnN0X2l0ZXJhdG9yIgorIlw8X19nbnVfY3h4OjpfX25vcm1hbF9pdGVyYXRvcjx3Y2hhcl90XCosIHdzdHJpbmc+IiA9ICJ3c3RyaW5nOjppdGVyYXRvciIKKyJcPF9fZ251X2N4eDo6X19ub3JtYWxfaXRlcmF0b3I8JHt0eXBlbmFtZX0gY29uc3RcKiwgdmVjdG9yPFwxPj4iID0gInZlY3RvcjxcMT46OmNvbnN0X2l0ZXJhdG9yIgorIlw8X19nbnVfY3h4OjpfX25vcm1hbF9pdGVyYXRvcjwke3R5cGVuYW1lfVwqLCB2ZWN0b3I8XDE+PiIgPSAidmVjdG9yPFwxPjo6aXRlcmF0b3IiCisKKyMgMi45NSB1c2Ugb25seSBfTGlzdF9pdGVyYXRvciwgMy4yIHVzZSBhbHNvIF9MaXN0X2l0ZXJhdG9yX2Jhc2UgYnV0IHNpbmNlCisjIGxpc3Q6Oml0ZXJhdG9yIGlzIGEgdHlwZWRlZiB0byBfTGlzdF9pdGVyYXRvciB3ZSBkb24ndCBuZWVkIHRvIGRlYWwgd2l0aAorIyBfTGlzdF9pdGVyYXRvcl9iYXNlCisiXDxfTGlzdF9pdGVyYXRvcjwke3R5cGVuYW1lfSwgXDFbIF0qJiwgXDFbIF0qXCo+IiA9ICJsaXN0PFwxPjo6aXRlcmF0b3IiCisiXDxfTGlzdF9pdGVyYXRvcjwke3R5cGVuYW1lfSwgXDEgY29uc3RbIF0qJiwgXDEgY29uc3RbIF0qXCo+IiA9ICJsaXN0PFwxPjo6Y29uc3RfaXRlcmF0b3IiCisKKyMgaW9zZndkLCBzdGQ6OnN0cmluZyBhbmQgc3RkOjp3c3RyaW5nCisjIGZpcnN0IHRyYW5zbGF0ZSBmcm9tICJiYXNpY194eHg8VCwgY2hhcl90cmFpdHM8VD4+IiB0byAiYmFzaWNfeHh4PFQ+IgorIlw8KFtpb11zdHJlYW1idWZfaXRlcmF0b3J8YmFzaWNfKGlvc3xzdHJlYW1idWZ8KFtpb118aW8pc3RyZWFtfGZpbGVidWZ8W2lvXT9mc3RyZWFtKSk8JHt0eXBlbmFtZX0sIGNoYXJfdHJhaXRzPFw0Pj4iID0gIlwxPFw0PiIKKyMgYXMgYWJvdmUgdHJhbnNsYXRlIGZyb20gImJhc2ljX3h4eDxULCBjaGFyX3RyYWl0czxUPiwgLi4uPiIgdG8gImJhc2ljX3h4eDxUPiIKKyJcPGJhc2ljXyhzdHJpbmcoYnVmKT98W2lvXT9zdHJpbmdzdHJlYW0pPzwke3R5cGVuYW1lfSwgY2hhcl90cmFpdHM8XDM+LCBhbGxvY2F0b3I8XDM+PiIgPSAiYmFzaWNfXDE8XDM+IgorIyBub3cgd2UgY2FuIHRyYW5zbGF0ZSB0aGUgdHdvIGFib3ZlIGZvciBjaGFyLCB3Y2hhcl90IHRvIHN0YW5kYXJkZXNlIHR5cGVkZWYKKyRpb3Nmd2RfbmFtZSA9ICJcPGJhc2ljXyhzdHJpbmd8aW9zfChzdHJlYW18ZmlsZXxzdHJpbmcpYnVmfChpfG98aW8pc3RyZWFtfFtpb10/KGZzdHJlYW18c3RyaW5nc3RyZWFtKSkiCisiXDwke2lvc2Z3ZF9uYW1lfTxjaGFyPiIgPSAiXDEiCisiXDwke2lvc2Z3ZF9uYW1lfTx3Y2hhcl90PiIgPSAid1wxIgorCisjIHN0cmVhbXBvcyBhbmQgd3N0cmVhbXBvcyBkZWNheSB0byB0aGUgc2FtZSB0eXBlLCB0aGV5IGFyZSB1bmRpc3Rpbmd1c2hhYmxlCisjIGluIG1hbmdsZWQgbmFtZSBzbyBzdWJzdGl0dXRlIGZvciB0aGUgbW9zdCBwcm9iYWJsZSwgbm90IGEgYmlnIGRlYWwKKyJcPGZwb3M8X19tYnN0YXRlX3Q+IiA9ICJzdHJlYW1wb3MiCisKKyMgbG9jYWxlCisjIHN0cmljdGx5IHNwZWFraW5nIHRoaXMgYWNjZXB0IG51bV9wdXQ8Li4uLCBpc3RyZWFtX2l0ZXJhdG9yPC4uLj4gPiBvcgorIyBudW1fZ2V0PC4uLiwgb3N0cmVhbV9pdGVyYXRvcjwuLi4+ID4gYnV0IHRoaXMgY2FuJ3QgY29tcGlsZSBzbyBubyBiaWcgZGVhbAorIlw8KG1vbmV5fHRpbWV8bnVtKV8ocHV0fGdldCk8JHt0eXBlbmFtZX0sIChpfG8pc3RyZWFtYnVmX2l0ZXJhdG9yPFwzPj4iID0gIlwxX1wyPFwzPiIKKyJcPG1vbmV5cHVuY3QoX2J5bmFtZSk/PCR7dHlwZW5hbWV9LCBcKGJvb2xcKTA+IiA9ICJtb25leXB1bmN0XDE8XDI+IgorCisjIDMuMiBhbGdvcml0aG0KKyJcPCh2ZWN0b3I8JHt0eXBlbmFtZX0+OjooY29uc3RfKT9pdGVyYXRvcikgZmluZDxcMSwgJHt0eXBlbmFtZX0+XChcMSwgXDEsIFw5IGNvbnN0JiwgJHt0eXBlbmFtZX1cKSIgPSAiXDEgZmluZChcMSwgXDEsIFw5IGNvbnN0JiwgXGYpIgorCisiXDwoKHN0cmluZ3x3c3RyaW5nKTo6KGNvbnN0Xyk/aXRlcmF0b3IpIGZpbmQ8XDEsICR7dHlwZW5hbWV9PlwoXDEsIFwxLCBcNCBjb25zdCYsICR7dHlwZW5hbWV9XCkiID0gIlwxIGZpbmQoXDEsIFwxLCBcNCBjb25zdCYsIFxhKSIKKworIlw8KHZlY3Rvcjwke3R5cGVuYW1lfT46Oihjb25zdF8pP2l0ZXJhdG9yKSBmaW5kX2lmPFwxLCAke3R5cGVuYW1lfT5cKFwxLCBcMSwgXDksIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnXCkiID0gIlwxIGZpbmRfaWYoXDEsIFwxLCBcOSwgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpIgorCisiXDwoKHN0cmluZ3x3c3RyaW5nKTo6KGNvbnN0Xyk/aXRlcmF0b3IpIGZpbmRfaWY8XDEsICR7dHlwZW5hbWV9PlwoXDEsIFwxLCBcNCwgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWdcKSIgPSAiXDEgZmluZF9pZihcMSwgXDEsIFw0LCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykiCmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9saWJyZWdleC90ZXN0cy9NYWtlZmlsZS5hbSBiL29wcm9maWxlLTAuOS43L2xpYnJlZ2V4L3Rlc3RzL01ha2VmaWxlLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmMTk4MzgKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9saWJyZWdleC90ZXN0cy9NYWtlZmlsZS5hbQpAQCAtMCwwICsxLDIxIEBACitBTV9DUFBGTEFHUyA9IFwKKwktSSAke3RvcF9zcmNkaXJ9L2xpYnV0aWwrKyBcCisJLUkgJHt0b3Bfc3JjZGlyfS9saWJyZWdleAorCitBTV9DWFhGTEFHUyA9IEBPUF9DWFhGTEFHU0AKKworY2hlY2tfUFJPR1JBTVMgPSByZWdleF90ZXN0IGphdmFfdGVzdAorCityZWdleF90ZXN0X1NPVVJDRVMgPSByZWdleF90ZXN0LmNwcAorcmVnZXhfdGVzdF9MREFERCA9IFwKKwkuLi9saWJvcF9yZWdleC5hIFwKKwkuLi8uLi9saWJ1dGlsKysvbGlidXRpbCsrLmEKKworamF2YV90ZXN0X1NPVVJDRVMgPSBqYXZhX3Rlc3QuY3BwCitqYXZhX3Rlc3RfTERBREQgPSBcCisJLi4vbGlib3BfcmVnZXguYSBcCisJLi4vLi4vbGlidXRpbCsrL2xpYnV0aWwrKy5hCisKK0VYVFJBX0RJU1QgPSBtYW5nbGVkLW5hbWUuaW4KKworVEVTVFMgPSAke2NoZWNrX1BST0dSQU1TfQpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvbGlicmVnZXgvdGVzdHMvTWFrZWZpbGUuaW4gYi9vcHJvZmlsZS0wLjkuNy9saWJyZWdleC90ZXN0cy9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZmJhMDY0Ci0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvbGlicmVnZXgvdGVzdHMvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSw2NDYgQEAKKyMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTEuMSBmcm9tIE1ha2VmaWxlLmFtLgorIyBAY29uZmlndXJlX2lucHV0QAorCisjIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwKKyMgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorIyBJbmMuCisjIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0CisjIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKKyMgUEFSVElDVUxBUiBQVVJQT1NFLgorCitAU0VUX01BS0VACitWUEFUSCA9IEBzcmNkaXJACitwa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKK3BrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAorcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAorcGtnbGliZXhlY2RpciA9ICQobGliZXhlY2RpcikvQFBBQ0tBR0VACithbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCitpbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAoraW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYworaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCitJTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQordHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQorTk9STUFMX0lOU1RBTEwgPSA6CitQUkVfSU5TVEFMTCA9IDoKK1BPU1RfSU5TVEFMTCA9IDoKK05PUk1BTF9VTklOU1RBTEwgPSA6CitQUkVfVU5JTlNUQUxMID0gOgorUE9TVF9VTklOU1RBTEwgPSA6CitidWlsZF90cmlwbGV0ID0gQGJ1aWxkQAoraG9zdF90cmlwbGV0ID0gQGhvc3RACitjaGVja19QUk9HUkFNUyA9IHJlZ2V4X3Rlc3QkKEVYRUVYVCkgamF2YV90ZXN0JChFWEVFWFQpCitURVNUUyA9ICQoY2hlY2tfUFJPR1JBTVMpCitzdWJkaXIgPSBsaWJyZWdleC90ZXN0cworRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChzcmNkaXIpL01ha2VmaWxlLmluIFwKKwkkKHNyY2RpcikvbWFuZ2xlZC1uYW1lLmluCitBQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00CithbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9tNC9iaW51dGlscy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9idWlsdGluZXhwZWN0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2NlbGxzcHViZmRzdXBwb3J0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2NvbXBpbGVyb3B0aW9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2NvbmZpZ21vZHVsZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jb3B5aWZjaGFuZ2UubTQgJCh0b3Bfc3JjZGlyKS9tNC9kb2Nib29rLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2V4dHJhZGlycy5tNCAkKHRvcF9zcmNkaXIpL200L2ZpbmRrZXJuZWwubTQgXAorCSQodG9wX3NyY2RpcikvbTQva2VybmVsb3B0aW9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2tlcm5lbHZlcnNpb24ubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWJ0b29sLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2x0b3B0aW9ucy5tNCAkKHRvcF9zcmNkaXIpL200L2x0c3VnYXIubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbHR2ZXJzaW9uLm00ICQodG9wX3NyY2RpcikvbTQvbHR+b2Jzb2xldGUubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbWFsbG9jYXR0cmlidXRlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3BvcHRjb25zdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9wcmVjb21waWxlZGhlYWRlci5tNCAkKHRvcF9zcmNkaXIpL200L3F0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3Jlc3VsdHluLm00ICQodG9wX3NyY2RpcikvbTQvc3N0cmVhbS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC90eXBlZGVmLm00ICQodG9wX3NyY2RpcikvY29uZmlndXJlLmluCithbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAorCSQoQUNMT0NBTF9NNCkKK21raW5zdGFsbGRpcnMgPSAkKGluc3RhbGxfc2gpIC1kCitDT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5oCitDT05GSUdfQ0xFQU5fRklMRVMgPSBtYW5nbGVkLW5hbWUKK0NPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9CithbV9qYXZhX3Rlc3RfT0JKRUNUUyA9IGphdmFfdGVzdC4kKE9CSkVYVCkKK2phdmFfdGVzdF9PQkpFQ1RTID0gJChhbV9qYXZhX3Rlc3RfT0JKRUNUUykKK2phdmFfdGVzdF9ERVBFTkRFTkNJRVMgPSAuLi9saWJvcF9yZWdleC5hIC4uLy4uL2xpYnV0aWwrKy9saWJ1dGlsKysuYQorYW1fcmVnZXhfdGVzdF9PQkpFQ1RTID0gcmVnZXhfdGVzdC4kKE9CSkVYVCkKK3JlZ2V4X3Rlc3RfT0JKRUNUUyA9ICQoYW1fcmVnZXhfdGVzdF9PQkpFQ1RTKQorcmVnZXhfdGVzdF9ERVBFTkRFTkNJRVMgPSAuLi9saWJvcF9yZWdleC5hIC4uLy4uL2xpYnV0aWwrKy9saWJ1dGlsKysuYQorREVGQVVMVF9JTkNMVURFUyA9IC1JLkBhbV9faXNyY0AgLUkkKHRvcF9idWlsZGRpcikKK2RlcGNvbXAgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL2RlcGNvbXAKK2FtX19kZXBmaWxlc19tYXliZSA9IGRlcGZpbGVzCithbV9fbXYgPSBtdiAtZgorQ1hYQ09NUElMRSA9ICQoQ1hYKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgXAorCSQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ1hYRkxBR1MpICQoQ1hYRkxBR1MpCitMVENYWENPTVBJTEUgPSAkKExJQlRPT0wpIC0tdGFnPUNYWCAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIFwKKwktLW1vZGU9Y29tcGlsZSAkKENYWCkgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpIFwKKwkkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NYWEZMQUdTKSAkKENYWEZMQUdTKQorQ1hYTEQgPSAkKENYWCkKK0NYWExJTksgPSAkKExJQlRPT0wpIC0tdGFnPUNYWCAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIFwKKwktLW1vZGU9bGluayAkKENYWExEKSAkKEFNX0NYWEZMQUdTKSAkKENYWEZMQUdTKSAkKEFNX0xERkxBR1MpIFwKKwkkKExERkxBR1MpIC1vICRACitTT1VSQ0VTID0gJChqYXZhX3Rlc3RfU09VUkNFUykgJChyZWdleF90ZXN0X1NPVVJDRVMpCitESVNUX1NPVVJDRVMgPSAkKGphdmFfdGVzdF9TT1VSQ0VTKSAkKHJlZ2V4X3Rlc3RfU09VUkNFUykKK0VUQUdTID0gZXRhZ3MKK0NUQUdTID0gY3RhZ3MKK2FtX190dHlfY29sb3JzID0gXAorcmVkPTsgZ3JuPTsgbGduPTsgYmx1PTsgc3RkPQorRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKK0FDTE9DQUwgPSBAQUNMT0NBTEAKK0FNVEFSID0gQEFNVEFSQAorQVIgPSBAQVJACitBVVRPQ09ORiA9IEBBVVRPQ09ORkAKK0FVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKK0FVVE9NQUtFID0gQEFVVE9NQUtFQAorQVdLID0gQEFXS0AKK0JGRF9MSUJTID0gQEJGRF9MSUJTQAorQ0FUX0VOVFJZX0VORCA9IEBDQVRfRU5UUllfRU5EQAorQ0FUX0VOVFJZX1NUQVJUID0gQENBVF9FTlRSWV9TVEFSVEAKK0NDID0gQENDQAorQ0NERVBNT0RFID0gQENDREVQTU9ERUAKK0NGTEFHUyA9IEBDRkxBR1NACitDUFAgPSBAQ1BQQAorQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACitDWFggPSBAQ1hYQAorQ1hYQ1BQID0gQENYWENQUEAKK0NYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKK0NYWEZMQUdTID0gQENYWEZMQUdTQAorQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKK0RBVEUgPSBAREFURUAKK0RFRlMgPSBAREVGU0AKK0RFUERJUiA9IEBERVBESVJACitET0NCT09LX1JPT1QgPSBARE9DQk9PS19ST09UQAorRFNZTVVUSUwgPSBARFNZTVVUSUxACitEVU1QQklOID0gQERVTVBCSU5ACitFQ0hPX0MgPSBARUNIT19DQAorRUNIT19OID0gQEVDSE9fTkAKK0VDSE9fVCA9IEBFQ0hPX1RACitFR1JFUCA9IEBFR1JFUEAKK0VYRUVYVCA9IEBFWEVFWFRACitFWFRSQV9DRkxBR1NfTU9EVUxFID0gQEVYVFJBX0NGTEFHU19NT0RVTEVACitGR1JFUCA9IEBGR1JFUEAKK0dSRVAgPSBAR1JFUEAKK0lOU1RBTEwgPSBASU5TVEFMTEAKK0lOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACitJTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAorSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACitJTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAorSkFWQV9IT01FRElSID0gQEpBVkFfSE9NRURJUkAKK0tJTkMgPSBAS0lOQ0AKK0tTUkMgPSBAS1NSQ0AKK0tWRVJTID0gQEtWRVJTQAorTEQgPSBATERACitMREZMQUdTID0gQExERkxBR1NACitMSUJFUlRZX0xJQlMgPSBATElCRVJUWV9MSUJTQAorTElCT0JKUyA9IEBMSUJPQkpTQAorTElCUyA9IEBMSUJTQAorTElCVE9PTCA9IEBMSUJUT09MQAorTElQTyA9IEBMSVBPQAorTE5fUyA9IEBMTl9TQAorTFRMSUJPQkpTID0gQExUTElCT0JKU0AKK01BS0VJTkZPID0gQE1BS0VJTkZPQAorTUtESVJfUCA9IEBNS0RJUl9QQAorTU9DID0gQE1PQ0AKK01PRElOU1RBTExESVIgPSBATU9ESU5TVEFMTERJUkAKK05NID0gQE5NQAorTk1FRElUID0gQE5NRURJVEAKK09CSkRVTVAgPSBAT0JKRFVNUEAKK09CSkVYVCA9IEBPQkpFWFRACitPUFJPRklMRV9ESVIgPSBAT1BST0ZJTEVfRElSQAorT1BST0ZJTEVfTU9EVUxFX0FSQ0ggPSBAT1BST0ZJTEVfTU9EVUxFX0FSQ0hACitPUF9DRkxBR1MgPSBAT1BfQ0ZMQUdTQAorT1BfQ1hYRkxBR1MgPSBAT1BfQ1hYRkxBR1NACitPUF9ET0NESVIgPSBAT1BfRE9DRElSQAorT1RPT0wgPSBAT1RPT0xACitPVE9PTDY0ID0gQE9UT09MNjRACitQQUNLQUdFID0gQFBBQ0tBR0VACitQQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKK1BBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACitQQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKK1BBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACitQQUNLQUdFX1VSTCA9IEBQQUNLQUdFX1VSTEAKK1BBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACitQQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKK1BLR19DT05GSUcgPSBAUEtHX0NPTkZJR0AKK1BLR19DT05GSUdfTElCRElSID0gQFBLR19DT05GSUdfTElCRElSQAorUEtHX0NPTkZJR19QQVRIID0gQFBLR19DT05GSUdfUEFUSEAKK1BPUFRfTElCUyA9IEBQT1BUX0xJQlNACitQVFJESUZGX1RfVFlQRSA9IEBQVFJESUZGX1RfVFlQRUAKK1FUX0NGTEFHUyA9IEBRVF9DRkxBR1NACitRVF9JTkNMVURFUyA9IEBRVF9JTkNMVURFU0AKK1FUX0xERkxBR1MgPSBAUVRfTERGTEFHU0AKK1FUX0xJQiA9IEBRVF9MSUJACitRVF9MSUJTID0gQFFUX0xJQlNACitRVF9WRVJTSU9OID0gQFFUX1ZFUlNJT05ACitSQU5MSUIgPSBAUkFOTElCQAorU0VEID0gQFNFREAKK1NFVF9NQUtFID0gQFNFVF9NQUtFQAorU0hFTEwgPSBAU0hFTExACitTSVpFX1RfVFlQRSA9IEBTSVpFX1RfVFlQRUAKK1NUUklQID0gQFNUUklQQAorVUlDID0gQFVJQ0AKK1VJQ2hlbHAgPSBAVUlDaGVscEAKK1ZFUlNJT04gPSBAVkVSU0lPTkAKK1hNS01GID0gQFhNS01GQAorWE1MX0NBVEFMT0cgPSBAWE1MX0NBVEFMT0dACitYU0xUUFJPQyA9IEBYU0xUUFJPQ0AKK1hTTFRQUk9DX0ZMQUdTID0gQFhTTFRQUk9DX0ZMQUdTQAorWF9DRkxBR1MgPSBAWF9DRkxBR1NACitYX0VYVFJBX0xJQlMgPSBAWF9FWFRSQV9MSUJTQAorWF9MSUJTID0gQFhfTElCU0AKK1hfUFJFX0xJQlMgPSBAWF9QUkVfTElCU0AKK2Fic19idWlsZGRpciA9IEBhYnNfYnVpbGRkaXJACithYnNfc3JjZGlyID0gQGFic19zcmNkaXJACithYnNfdG9wX2J1aWxkZGlyID0gQGFic190b3BfYnVpbGRkaXJACithYnNfdG9wX3NyY2RpciA9IEBhYnNfdG9wX3NyY2RpckAKK2FjX2N0X0NDID0gQGFjX2N0X0NDQAorYWNfY3RfQ1hYID0gQGFjX2N0X0NYWEAKK2FjX2N0X0RVTVBCSU4gPSBAYWNfY3RfRFVNUEJJTkAKK2FtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAorYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKK2FtX19xdW90ZSA9IEBhbV9fcXVvdGVACithbV9fdGFyID0gQGFtX190YXJACithbV9fdW50YXIgPSBAYW1fX3VudGFyQAorYmluZGlyID0gQGJpbmRpckAKK2J1aWxkID0gQGJ1aWxkQAorYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACitidWlsZF9jcHUgPSBAYnVpbGRfY3B1QAorYnVpbGRfb3MgPSBAYnVpbGRfb3NACitidWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAorYnVpbGRkaXIgPSBAYnVpbGRkaXJACitkYXRhZGlyID0gQGRhdGFkaXJACitkYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKK2RvY2RpciA9IEBkb2NkaXJACitkdmlkaXIgPSBAZHZpZGlyQAorZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACitob3N0ID0gQGhvc3RACitob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACitob3N0X2NwdSA9IEBob3N0X2NwdUAKK2hvc3Rfb3MgPSBAaG9zdF9vc0AKK2hvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAoraHRtbGRpciA9IEBodG1sZGlyQAoraW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAoraW5mb2RpciA9IEBpbmZvZGlyQAoraW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAorbGliZGlyID0gQGxpYmRpckAKK2xpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKK2xvY2FsZWRpciA9IEBsb2NhbGVkaXJACitsb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACitsdF9FQ0hPID0gQGx0X0VDSE9ACittYW5kaXIgPSBAbWFuZGlyQAorbWtkaXJfcCA9IEBta2Rpcl9wQAorb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAorcGRmZGlyID0gQHBkZmRpckAKK3ByZWZpeCA9IEBwcmVmaXhACitwcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACitwc2RpciA9IEBwc2RpckAKK3NiaW5kaXIgPSBAc2JpbmRpckAKK3NoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAorc3JjZGlyID0gQHNyY2RpckAKK3N5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKK3RhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACit0b3BfYnVpbGRfcHJlZml4ID0gQHRvcF9idWlsZF9wcmVmaXhACit0b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAordG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAordG9wZGlyID0gQHRvcGRpckAKK0FNX0NQUEZMQUdTID0gXAorCS1JICR7dG9wX3NyY2Rpcn0vbGlidXRpbCsrIFwKKwktSSAke3RvcF9zcmNkaXJ9L2xpYnJlZ2V4CisKK0FNX0NYWEZMQUdTID0gQE9QX0NYWEZMQUdTQAorcmVnZXhfdGVzdF9TT1VSQ0VTID0gcmVnZXhfdGVzdC5jcHAKK3JlZ2V4X3Rlc3RfTERBREQgPSBcCisJLi4vbGlib3BfcmVnZXguYSBcCisJLi4vLi4vbGlidXRpbCsrL2xpYnV0aWwrKy5hCisKK2phdmFfdGVzdF9TT1VSQ0VTID0gamF2YV90ZXN0LmNwcAoramF2YV90ZXN0X0xEQUREID0gXAorCS4uL2xpYm9wX3JlZ2V4LmEgXAorCS4uLy4uL2xpYnV0aWwrKy9saWJ1dGlsKysuYQorCitFWFRSQV9ESVNUID0gbWFuZ2xlZC1uYW1lLmluCithbGw6IGFsbC1hbQorCisuU1VGRklYRVM6CisuU1VGRklYRVM6IC5jcHAgLmxvIC5vIC5vYmoKKyQoc3JjZGlyKS9NYWtlZmlsZS5pbjogICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJQGZvciBkZXAgaW4gJD87IGRvIFwKKwkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAorCSAgICAqJCRkZXAqKSBcCisJICAgICAgKCBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggKSBcCisJICAgICAgICAmJiB7IGlmIHRlc3QgLWYgJEA7IHRoZW4gZXhpdCAwOyBlbHNlIGJyZWFrOyBmaTsgfTsgXAorCSAgICAgIGV4aXQgMTs7IFwKKwkgIGVzYWM7IFwKKwlkb25lOyBcCisJZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1mb3JlaWduIGxpYnJlZ2V4L3Rlc3RzL01ha2VmaWxlJzsgXAorCSQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmIFwKKwkgICQoQVVUT01BS0UpIC0tZm9yZWlnbiBsaWJyZWdleC90ZXN0cy9NYWtlZmlsZQorLlBSRUNJT1VTOiBNYWtlZmlsZQorTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworCUBjYXNlICckPycgaW4gXAorCSAgKmNvbmZpZy5zdGF0dXMqKSBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKKwkgICopIFwKKwkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAorCWVzYWM7CisKKyQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorCiskKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorJChBQ0xPQ0FMX000KTogICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6CittYW5nbGVkLW5hbWU6ICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzICQoc3JjZGlyKS9tYW5nbGVkLW5hbWUuaW4KKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQAorCitjbGVhbi1jaGVja1BST0dSQU1TOgorCUBsaXN0PSckKGNoZWNrX1BST0dSQU1TKSc7IHRlc3QgLW4gIiQkbGlzdCIgfHwgZXhpdCAwOyBcCisJZWNobyAiIHJtIC1mIiAkJGxpc3Q7IFwKKwlybSAtZiAkJGxpc3QgfHwgZXhpdCAkJD87IFwKKwl0ZXN0IC1uICIkKEVYRUVYVCkiIHx8IGV4aXQgMDsgXAorCWxpc3Q9YGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwIjsgZG9uZSB8IHNlZCAncy8kKEVYRUVYVCkkJC8vJ2A7IFwKKwllY2hvICIgcm0gLWYiICQkbGlzdDsgXAorCXJtIC1mICQkbGlzdAoramF2YV90ZXN0JChFWEVFWFQpOiAkKGphdmFfdGVzdF9PQkpFQ1RTKSAkKGphdmFfdGVzdF9ERVBFTkRFTkNJRVMpIAorCUBybSAtZiBqYXZhX3Rlc3QkKEVYRUVYVCkKKwkkKENYWExJTkspICQoamF2YV90ZXN0X09CSkVDVFMpICQoamF2YV90ZXN0X0xEQUREKSAkKExJQlMpCityZWdleF90ZXN0JChFWEVFWFQpOiAkKHJlZ2V4X3Rlc3RfT0JKRUNUUykgJChyZWdleF90ZXN0X0RFUEVOREVOQ0lFUykgCisJQHJtIC1mIHJlZ2V4X3Rlc3QkKEVYRUVYVCkKKwkkKENYWExJTkspICQocmVnZXhfdGVzdF9PQkpFQ1RTKSAkKHJlZ2V4X3Rlc3RfTERBREQpICQoTElCUykKKworbW9zdGx5Y2xlYW4tY29tcGlsZToKKwktcm0gLWYgKi4kKE9CSkVYVCkKKworZGlzdGNsZWFuLWNvbXBpbGU6CisJLXJtIC1mICoudGFiLmMKKworQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2phdmFfdGVzdC5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvcmVnZXhfdGVzdC5Qb0BhbV9fcXVvdGVACisKKy5jcHAubzoKK0BhbV9fZmFzdGRlcENYWF9UUlVFQAkkKENYWENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJCouVHBvIC1jIC1vICRAICQ8CitAYW1fX2Zhc3RkZXBDWFhfVFJVRUAJJChhbV9fbXYpICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ1hYREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACSQoQ1hYQ09NUElMRSkgLWMgLW8gJEAgJDwKKworLmNwcC5vYmo6CitAYW1fX2Zhc3RkZXBDWFhfVFJVRUAJJChDWFhDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgCitAYW1fX2Zhc3RkZXBDWFhfVFJVRUAJJChhbV9fbXYpICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ1hYREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACSQoQ1hYQ09NUElMRSkgLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYAorCisuY3BwLmxvOgorQGFtX19mYXN0ZGVwQ1hYX1RSVUVACSQoTFRDWFhDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCAkPAorQGFtX19mYXN0ZGVwQ1hYX1RSVUVACSQoYW1fX212KSAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENYWF9GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ1hYREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACSQoTFRDWFhDT01QSUxFKSAtYyAtbyAkQCAkPAorCittb3N0bHljbGVhbi1saWJ0b29sOgorCS1ybSAtZiAqLmxvCisKK2NsZWFuLWxpYnRvb2w6CisJLXJtIC1yZiAubGlicyBfbGlicworCitJRDogJChIRUFERVJTKSAkKFNPVVJDRVMpICQoTElTUCkgJChUQUdTX0ZJTEVTKQorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorCW1raWQgLWZJRCAkJHVuaXF1ZQordGFnczogVEFHUworCitUQUdTOiAgJChIRUFERVJTKSAkKFNPVVJDRVMpICAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCisJCSQoVEFHU19GSUxFUykgJChMSVNQKQorCXNldCB4OyBcCisJaGVyZT1gcHdkYDsgXAorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKwkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKwlzaGlmdDsgXAorCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJCokJHVuaXF1ZSI7IHRoZW4gOjsgZWxzZSBcCisJICB0ZXN0IC1uICIkJHVuaXF1ZSIgfHwgdW5pcXVlPSQkZW1wdHlfZml4OyBcCisJICBpZiB0ZXN0ICQkIyAtZ3QgMDsgdGhlbiBcCisJICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKwkgICAgICAiJCRAIiAkJHVuaXF1ZTsgXAorCSAgZWxzZSBcCisJICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKwkgICAgICAkJHVuaXF1ZTsgXAorCSAgZmk7IFwKKwlmaQorY3RhZ3M6IENUQUdTCitDVEFHUzogICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAorCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCisJICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCisJdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdW5pcXVlIiBcCisJICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCisJICAgICAkJHVuaXF1ZQorCitHVEFHUzoKKwloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAorCSAgJiYgJChhbV9fY2QpICQodG9wX3NyY2RpcikgXAorCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAiJCRoZXJlIgorCitkaXN0Y2xlYW4tdGFnczoKKwktcm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncworCitjaGVjay1URVNUUzogJChURVNUUykKKwlAZmFpbGVkPTA7IGFsbD0wOyB4ZmFpbD0wOyB4cGFzcz0wOyBza2lwPTA7IFwKKwlzcmNkaXI9JChzcmNkaXIpOyBleHBvcnQgc3JjZGlyOyBcCisJbGlzdD0nICQoVEVTVFMpICc7IFwKKwkkKGFtX190dHlfY29sb3JzKTsgXAorCWlmIHRlc3QgLW4gIiQkbGlzdCI7IHRoZW4gXAorCSAgZm9yIHRzdCBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAuLyQkdHN0OyB0aGVuIGRpcj0uLzsgXAorCSAgICBlbGlmIHRlc3QgLWYgJCR0c3Q7IHRoZW4gZGlyPTsgXAorCSAgICBlbHNlIGRpcj0iJChzcmNkaXIpLyI7IGZpOyBcCisJICAgIGlmICQoVEVTVFNfRU5WSVJPTk1FTlQpICQke2Rpcn0kJHRzdDsgdGhlbiBcCisJICAgICAgYWxsPWBleHByICQkYWxsICsgMWA7IFwKKwkgICAgICBjYXNlICIgJChYRkFJTF9URVNUUykgIiBpbiBcCisJICAgICAgKltcIFwJXSQkdHN0W1wgXAldKikgXAorCQl4cGFzcz1gZXhwciAkJHhwYXNzICsgMWA7IFwKKwkJZmFpbGVkPWBleHByICQkZmFpbGVkICsgMWA7IFwKKwkJY29sPSQkcmVkOyByZXM9WFBBU1M7IFwKKwkgICAgICA7OyBcCisJICAgICAgKikgXAorCQljb2w9JCRncm47IHJlcz1QQVNTOyBcCisJICAgICAgOzsgXAorCSAgICAgIGVzYWM7IFwKKwkgICAgZWxpZiB0ZXN0ICQkPyAtbmUgNzc7IHRoZW4gXAorCSAgICAgIGFsbD1gZXhwciAkJGFsbCArIDFgOyBcCisJICAgICAgY2FzZSAiICQoWEZBSUxfVEVTVFMpICIgaW4gXAorCSAgICAgICpbXCBcCV0kJHRzdFtcIFwJXSopIFwKKwkJeGZhaWw9YGV4cHIgJCR4ZmFpbCArIDFgOyBcCisJCWNvbD0kJGxnbjsgcmVzPVhGQUlMOyBcCisJICAgICAgOzsgXAorCSAgICAgICopIFwKKwkJZmFpbGVkPWBleHByICQkZmFpbGVkICsgMWA7IFwKKwkJY29sPSQkcmVkOyByZXM9RkFJTDsgXAorCSAgICAgIDs7IFwKKwkgICAgICBlc2FjOyBcCisJICAgIGVsc2UgXAorCSAgICAgIHNraXA9YGV4cHIgJCRza2lwICsgMWA7IFwKKwkgICAgICBjb2w9JCRibHU7IHJlcz1TS0lQOyBcCisJICAgIGZpOyBcCisJICAgIGVjaG8gIiQke2NvbH0kJHJlcyQke3N0ZH06ICQkdHN0IjsgXAorCSAgZG9uZTsgXAorCSAgaWYgdGVzdCAiJCRhbGwiIC1lcSAxOyB0aGVuIFwKKwkgICAgdGVzdHM9InRlc3QiOyBcCisJICAgIEFsbD0iIjsgXAorCSAgZWxzZSBcCisJICAgIHRlc3RzPSJ0ZXN0cyI7IFwKKwkgICAgQWxsPSJBbGwgIjsgXAorCSAgZmk7IFwKKwkgIGlmIHRlc3QgIiQkZmFpbGVkIiAtZXEgMDsgdGhlbiBcCisJICAgIGlmIHRlc3QgIiQkeGZhaWwiIC1lcSAwOyB0aGVuIFwKKwkgICAgICBiYW5uZXI9IiQkQWxsJCRhbGwgJCR0ZXN0cyBwYXNzZWQiOyBcCisJICAgIGVsc2UgXAorCSAgICAgIGlmIHRlc3QgIiQkeGZhaWwiIC1lcSAxOyB0aGVuIGZhaWx1cmVzPWZhaWx1cmU7IGVsc2UgZmFpbHVyZXM9ZmFpbHVyZXM7IGZpOyBcCisJICAgICAgYmFubmVyPSIkJEFsbCQkYWxsICQkdGVzdHMgYmVoYXZlZCBhcyBleHBlY3RlZCAoJCR4ZmFpbCBleHBlY3RlZCAkJGZhaWx1cmVzKSI7IFwKKwkgICAgZmk7IFwKKwkgIGVsc2UgXAorCSAgICBpZiB0ZXN0ICIkJHhwYXNzIiAtZXEgMDsgdGhlbiBcCisJICAgICAgYmFubmVyPSIkJGZhaWxlZCBvZiAkJGFsbCAkJHRlc3RzIGZhaWxlZCI7IFwKKwkgICAgZWxzZSBcCisJICAgICAgaWYgdGVzdCAiJCR4cGFzcyIgLWVxIDE7IHRoZW4gcGFzc2VzPXBhc3M7IGVsc2UgcGFzc2VzPXBhc3NlczsgZmk7IFwKKwkgICAgICBiYW5uZXI9IiQkZmFpbGVkIG9mICQkYWxsICQkdGVzdHMgZGlkIG5vdCBiZWhhdmUgYXMgZXhwZWN0ZWQgKCQkeHBhc3MgdW5leHBlY3RlZCAkJHBhc3NlcykiOyBcCisJICAgIGZpOyBcCisJICBmaTsgXAorCSAgZGFzaGVzPSIkJGJhbm5lciI7IFwKKwkgIHNraXBwZWQ9IiI7IFwKKwkgIGlmIHRlc3QgIiQkc2tpcCIgLW5lIDA7IHRoZW4gXAorCSAgICBpZiB0ZXN0ICIkJHNraXAiIC1lcSAxOyB0aGVuIFwKKwkgICAgICBza2lwcGVkPSIoJCRza2lwIHRlc3Qgd2FzIG5vdCBydW4pIjsgXAorCSAgICBlbHNlIFwKKwkgICAgICBza2lwcGVkPSIoJCRza2lwIHRlc3RzIHdlcmUgbm90IHJ1bikiOyBcCisJICAgIGZpOyBcCisJICAgIHRlc3QgYGVjaG8gIiQkc2tpcHBlZCIgfCB3YyAtY2AgLWxlIGBlY2hvICIkJGJhbm5lciIgfCB3YyAtY2AgfHwgXAorCSAgICAgIGRhc2hlcz0iJCRza2lwcGVkIjsgXAorCSAgZmk7IFwKKwkgIHJlcG9ydD0iIjsgXAorCSAgaWYgdGVzdCAiJCRmYWlsZWQiIC1uZSAwICYmIHRlc3QgLW4gIiQoUEFDS0FHRV9CVUdSRVBPUlQpIjsgdGhlbiBcCisJICAgIHJlcG9ydD0iUGxlYXNlIHJlcG9ydCB0byAkKFBBQ0tBR0VfQlVHUkVQT1JUKSI7IFwKKwkgICAgdGVzdCBgZWNobyAiJCRyZXBvcnQiIHwgd2MgLWNgIC1sZSBgZWNobyAiJCRiYW5uZXIiIHwgd2MgLWNgIHx8IFwKKwkgICAgICBkYXNoZXM9IiQkcmVwb3J0IjsgXAorCSAgZmk7IFwKKwkgIGRhc2hlcz1gZWNobyAiJCRkYXNoZXMiIHwgc2VkIHMvLi89L2dgOyBcCisJICBpZiB0ZXN0ICIkJGZhaWxlZCIgLWVxIDA7IHRoZW4gXAorCSAgICBlY2hvICIkJGdybiQkZGFzaGVzIjsgXAorCSAgZWxzZSBcCisJICAgIGVjaG8gIiQkcmVkJCRkYXNoZXMiOyBcCisJICBmaTsgXAorCSAgZWNobyAiJCRiYW5uZXIiOyBcCisJICB0ZXN0IC16ICIkJHNraXBwZWQiIHx8IGVjaG8gIiQkc2tpcHBlZCI7IFwKKwkgIHRlc3QgLXogIiQkcmVwb3J0IiB8fCBlY2hvICIkJHJlcG9ydCI7IFwKKwkgIGVjaG8gIiQkZGFzaGVzJCRzdGQiOyBcCisJICB0ZXN0ICIkJGZhaWxlZCIgLWVxIDA7IFwKKwllbHNlIDo7IGZpCisKK2Rpc3RkaXI6ICQoRElTVEZJTEVTKQorCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisJbGlzdD0nJChESVNURklMRVMpJzsgXAorCSAgZGlzdF9maWxlcz1gZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8IFwKKwkgIHNlZCAtZSAic3xeJCRzcmNkaXJzdHJpcC98fDt0IiBcCisJICAgICAgLWUgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98O3QiYDsgXAorCWNhc2UgJCRkaXN0X2ZpbGVzIGluIFwKKwkgICovKikgJChNS0RJUl9QKSBgZWNobyAiJCRkaXN0X2ZpbGVzIiB8IFwKKwkJCSAgIHNlZCAnL1wvLyFkO3N8XnwkKGRpc3RkaXIpL3w7cywvW14vXSokJCwsJyB8IFwKKwkJCSAgIHNvcnQgLXVgIDs7IFwKKwllc2FjOyBcCisJZm9yIGZpbGUgaW4gJCRkaXN0X2ZpbGVzOyBkbyBcCisJICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCisJICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAorCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAorCSAgICBpZiB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkZmlsZSI7IHRoZW4gXAorCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAorCSAgICBmaTsgXAorCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKKwkgICAgICBjcCAtZnBSICQoc3JjZGlyKS8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCisJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisJICAgIGZpOyBcCisJICAgIGNwIC1mcFIgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKKwkgIGVsc2UgXAorCSAgICB0ZXN0IC1mICIkKGRpc3RkaXIpLyQkZmlsZSIgXAorCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICIkKGRpc3RkaXIpLyQkZmlsZSIgXAorCSAgICB8fCBleGl0IDE7IFwKKwkgIGZpOyBcCisJZG9uZQorY2hlY2stYW06IGFsbC1hbQorCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICQoY2hlY2tfUFJPR1JBTVMpCisJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgY2hlY2stVEVTVFMKK2NoZWNrOiBjaGVjay1hbQorYWxsLWFtOiBNYWtlZmlsZQoraW5zdGFsbGRpcnM6CitpbnN0YWxsOiBpbnN0YWxsLWFtCitpbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1hbQoraW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtYW0KK3VuaW5zdGFsbDogdW5pbnN0YWxsLWFtCisKK2luc3RhbGwtYW06IGFsbC1hbQorCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCisKK2luc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLWFtCitpbnN0YWxsLXN0cmlwOgorCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisJICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKKwkgIGB0ZXN0IC16ICckKFNUUklQKScgfHwgXAorCSAgICBlY2hvICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknImAgaW5zdGFsbAorbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKKworY2xlYW4tZ2VuZXJpYzoKKworZGlzdGNsZWFuLWdlbmVyaWM6CisJLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCisJLXRlc3QgLiA9ICIkKHNyY2RpcikiIHx8IHRlc3QgLXogIiQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpCisKK21haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKKwlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCisJQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgorY2xlYW46IGNsZWFuLWFtCisKK2NsZWFuLWFtOiBjbGVhbi1jaGVja1BST0dSQU1TIGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBcCisJbW9zdGx5Y2xlYW4tYW0KKworZGlzdGNsZWFuOiBkaXN0Y2xlYW4tYW0KKwktcm0gLXJmIC4vJChERVBESVIpCisJLXJtIC1mIE1ha2VmaWxlCitkaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKKwlkaXN0Y2xlYW4tdGFncworCitkdmk6IGR2aS1hbQorCitkdmktYW06CisKK2h0bWw6IGh0bWwtYW0KKworaHRtbC1hbToKKworaW5mbzogaW5mby1hbQorCitpbmZvLWFtOgorCitpbnN0YWxsLWRhdGEtYW06CisKK2luc3RhbGwtZHZpOiBpbnN0YWxsLWR2aS1hbQorCitpbnN0YWxsLWR2aS1hbToKKworaW5zdGFsbC1leGVjLWFtOgorCitpbnN0YWxsLWh0bWw6IGluc3RhbGwtaHRtbC1hbQorCitpbnN0YWxsLWh0bWwtYW06CisKK2luc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLWFtCisKK2luc3RhbGwtaW5mby1hbToKKworaW5zdGFsbC1tYW46CisKK2luc3RhbGwtcGRmOiBpbnN0YWxsLXBkZi1hbQorCitpbnN0YWxsLXBkZi1hbToKKworaW5zdGFsbC1wczogaW5zdGFsbC1wcy1hbQorCitpbnN0YWxsLXBzLWFtOgorCitpbnN0YWxsY2hlY2stYW06CisKK21haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tYW0KKwktcm0gLXJmIC4vJChERVBESVIpCisJLXJtIC1mIE1ha2VmaWxlCittYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCisKK21vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1hbQorCittb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIFwKKwltb3N0bHljbGVhbi1saWJ0b29sCisKK3BkZjogcGRmLWFtCisKK3BkZi1hbToKKworcHM6IHBzLWFtCisKK3BzLWFtOgorCit1bmluc3RhbGwtYW06CisKKy5NQUtFOiBjaGVjay1hbSBpbnN0YWxsLWFtIGluc3RhbGwtc3RyaXAKKworLlBIT05ZOiBDVEFHUyBHVEFHUyBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLVRFU1RTIGNoZWNrLWFtIGNsZWFuIFwKKwljbGVhbi1jaGVja1BST0dSQU1TIGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBjdGFncyBcCisJZGlzdGNsZWFuIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKKwlkaXN0Y2xlYW4tbGlidG9vbCBkaXN0Y2xlYW4tdGFncyBkaXN0ZGlyIGR2aSBkdmktYW0gaHRtbCBcCisJaHRtbC1hbSBpbmZvIGluZm8tYW0gaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBcCisJaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZHZpIGluc3RhbGwtZHZpLWFtIGluc3RhbGwtZXhlYyBcCisJaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaHRtbCBpbnN0YWxsLWh0bWwtYW0gaW5zdGFsbC1pbmZvIFwKKwlpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gaW5zdGFsbC1wZGYgaW5zdGFsbC1wZGYtYW0gXAorCWluc3RhbGwtcHMgaW5zdGFsbC1wcy1hbSBpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBcCisJaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIG1haW50YWluZXItY2xlYW4gXAorCW1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBtb3N0bHljbGVhbi1jb21waWxlIFwKKwltb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wgcGRmIHBkZi1hbSBwcyBwcy1hbSBcCisJdGFncyB1bmluc3RhbGwgdW5pbnN0YWxsLWFtCisKKworIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KKyMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgorLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvbGlicmVnZXgvdGVzdHMvamF2YV90ZXN0LmNwcCBiL29wcm9maWxlLTAuOS43L2xpYnJlZ2V4L3Rlc3RzL2phdmFfdGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzViNDEzMAotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2xpYnJlZ2V4L3Rlc3RzL2phdmFfdGVzdC5jcHAKQEAgLTAsMCArMSw2NSBAQAorLyoqCisgKiBAZmlsZSBqYXZhX3Rlc3QuY3BwCisgKgorICogQSBzaW1wbGUgdGVzdCBmb3IgamF2YSBkZW1hbmdsaW5nLiBSdW4gaXQgdGhyb3VnaDoKKyAqICQgamF2YV90ZXN0CisgKgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwNyBPUHJvZmlsZSBhdXRob3JzCisgKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORworICoKKyAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQorICovCisKKyNpbmNsdWRlICJkZW1hbmdsZV9qYXZhX3N5bWJvbC5oIgorCisjaW5jbHVkZSAib3BfcmVnZXguaCIKKworI2luY2x1ZGUgPGlvc3RyZWFtPgorI2luY2x1ZGUgPGZzdHJlYW0+CisKKyNpbmNsdWRlIDxjc3RkbGliPgorCit1c2luZyBuYW1lc3BhY2Ugc3RkOworCituYW1lc3BhY2UgeworCit2b2lkIGNoZWNrX3Jlc3VsdChzdHJpbmcgY29uc3QgJiBpbnB1dCwgc3RyaW5nIGNvbnN0ICYgb3V0cHV0LAorCQkJIHN0cmluZyBjb25zdCAmIHJlc3VsdCkKK3sKKwlpZiAocmVzdWx0ICE9IG91dHB1dCkgeworCQljZXJyIDw8ICJmb3I6XG5cIiIgPDwgaW5wdXQgPDwgIlwiXG4iCisJCSAgICAgPDwgImV4cGVjdDpcblwiIiA8PCBvdXRwdXQgPDwgIlwiXG4iCisJCSAgICAgPDwgImZvdW5kOlxuXCIiIDw8IHJlc3VsdCA8PCAiXCJcbiI7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9Cit9CisKK3N0cnVjdCBpbnB1dF9vdXRwdXQgeworCWNoYXIgY29uc3QgKiBtYW5nbGVkOworCWNoYXIgY29uc3QgKiBleHBlY3Q7Cit9OworCitpbnB1dF9vdXRwdXQgbWFuZ2xlX3Rlc3RzW10gPSB7CisJeyAiTHRlc3QkdGVzdF8xO2YyKEkpViIsICJ2b2lkIHRlc3QkdGVzdF8xLmYyKGludCkiIH0sCisJeyAiTHRlc3Q7ZjQoKVYiLCAidm9pZCB0ZXN0LmY0KCkiIH0sCisJeyAiTHRlc3Q7ZjIoSUkpViIsICJ2b2lkIHRlc3QuZjIoaW50LCBpbnQpIiB9LAorCXsgIkx0ZXN0JEhlbGxvVGhyZWFkO3J1bigpVn4xIiwgInZvaWQgdGVzdCRIZWxsb1RocmVhZC5ydW4oKX4xIiB9LAorCXsgIkxzdW4vc2VjdXJpdHkvcHJvdmlkZXIvU0hBO2ltcGxDb21wcmVzcyhbQkkpViIsICJ2b2lkIHN1bi5zZWN1cml0eS5wcm92aWRlci5TSEEuaW1wbENvbXByZXNzKGJ5dGVbXSwgaW50KSIgfSwKKwl7ICJMamF2YS9sYW5nL1N0cmluZztlcXVhbHMoTGphdmEvbGFuZy9PYmplY3Q7KVoiLCAiYm9vbGVhbiBqYXZhLmxhbmcuU3RyaW5nLmVxdWFscyhqYXZhLmxhbmcuT2JqZWN0KSIgfSwKKwl7ICJMb3JnL2VjbGlwc2Uvc3d0L2dyYXBoaWNzL0ltYWdlRGF0YTtibGl0KElbQklJSUlJSUlJSUlJW0JJSUlbQklJSUlJSUlJSUlaWilWIiwgInZvaWQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlRGF0YS5ibGl0KGludCwgYnl0ZVtdLCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgYnl0ZVtdLCBpbnQsIGludCwgaW50LCBieXRlW10sIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgYm9vbGVhbiwgYm9vbGVhbikiIH0sCisJeyAwLCAwIH0KK307CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCitpbnQgbWFpbih2b2lkKQoreworCWlucHV0X291dHB1dCBjb25zdCAqIGN1cjsKKwlmb3IgKGN1ciA9IG1hbmdsZV90ZXN0czsgY3VyLT5tYW5nbGVkOyArK2N1cikgeworCQlzdHJpbmcgcmVzdWx0ID0gZGVtYW5nbGVfamF2YV9zeW1ib2woY3VyLT5tYW5nbGVkKTsKKwkJY2hlY2tfcmVzdWx0KGN1ci0+bWFuZ2xlZCwgY3VyLT5leHBlY3QsIHJlc3VsdCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2xpYnJlZ2V4L3Rlc3RzL21hbmdsZWQtbmFtZS5pbiBiL29wcm9maWxlLTAuOS43L2xpYnJlZ2V4L3Rlc3RzL21hbmdsZWQtbmFtZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZWU0YmM4Ci0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvbGlicmVnZXgvdGVzdHMvbWFuZ2xlZC1uYW1lLmluCkBAIC0wLDAgKzEsNDUzIEBACisjIHRlc3QgZm9yIHN0bCBiZWF1dGlmaWVyLCBkbyBvcF9yZWdleF90ZXN0IDwgbWFuZ2xlZC1uYW1lLnR4dAorIyBsaW5lIGdvIGJ5IGNvdXBsZSBtYW5nbGVkIG5hbWUgdGhlbiBleHBlY3RlZCBuYW1lIGFmdGVyIHJ1biwgbGluZQorIyBzdGFydGluZyBieSAjIGFuZCBibGFuayBsaW5lIGFyZSBpZ25vcmVkLiBUaGUgdGVzdCBtdXN0IG91dHB1dCBub3RoaW5nIGlmCisjIHN1Y2Nlc3NmdWxsCisKKyMgYmVmb3JlIHJlbW92aW5nIHRlc3RzIHRoaW5rIGl0IHRha2UgdGltZSB0byB3cml0ZSB0aGVtLiBUaGlzIGlzIGludGVuZGVkCisjIHRvIGJlIGEgY292ZXJhZ2UgdGVzdCBvZiBhbGwgcGF0dGVybiBpbiBzdGwucGF0LgorCisjIGcrKyAyLjk1IHN0bCBtYW5nbGVkIG5hbWUKKworYmFzaWNfc3RyaW5nPGNoYXIsIHN0cmluZ19jaGFyX3RyYWl0czxjaGFyPiwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPHRydWUsIDA+ID4KK3N0cmluZworCitwcmVmaXhfYmFzaWNfc3RyaW5nPGNoYXIsIHN0cmluZ19jaGFyX3RyYWl0czxjaGFyPiwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPHRydWUsIDA+ID4KK3ByZWZpeF9iYXNpY19zdHJpbmc8Y2hhciwgc3RyaW5nX2NoYXJfdHJhaXRzPGNoYXI+LCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8dHJ1ZSwgMD4+CisKK3ZlY3RvcjxiYXNpY19zdHJpbmc8Y2hhciwgc3RyaW5nX2NoYXJfdHJhaXRzPGNoYXI+LCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8dHJ1ZSwgMD4gPiwgYWxsb2NhdG9yPGJhc2ljX3N0cmluZzxjaGFyLCBzdHJpbmdfY2hhcl90cmFpdHM8Y2hhcj4sIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTx0cnVlLCAwPiA+ID4gPgordmVjdG9yPHN0cmluZz4KKworbWFwPGludCwgaW1hZ2VfbmFtZSwgbGVzczxpbnQ+LCBhbGxvY2F0b3I8aW1hZ2VfbmFtZT4gPgorbWFwPGludCwgaW1hZ2VfbmFtZT4KKworbWFwPGJhc2ljX3N0cmluZzxjaGFyLCBzdHJpbmdfY2hhcl90cmFpdHM8Y2hhcj4sIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTx0cnVlLCAwPiA+LCBpbWFnZV9uYW1lLCBsZXNzPGJhc2ljX3N0cmluZzxjaGFyLCBzdHJpbmdfY2hhcl90cmFpdHM8Y2hhcj4sIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTx0cnVlLCAwPiA+ID4sIGFsbG9jYXRvcjxpbWFnZV9uYW1lPiA+CittYXA8c3RyaW5nLCBpbWFnZV9uYW1lPgorCittdWx0aW1hcDxpbnQsIGxvbmcsIGxlc3M8aW50PiwgYWxsb2NhdG9yPGxvbmc+ID4KK211bHRpbWFwPGludCwgbG9uZz4KKworcHJlZml4X211bHRpbWFwPGludCwgbG9uZywgbGVzczxpbnQ+LCBhbGxvY2F0b3I8bG9uZz4gPgorcHJlZml4X211bHRpbWFwPGludCwgbG9uZywgbGVzczxpbnQ+LCBhbGxvY2F0b3I8bG9uZz4+CisKK21hcDxpbnQsIGxvbmcsIGNvbXBhcmUsIGFsbG9jYXRvcjxsb25nPiA+CittYXA8aW50LCBsb25nLCBjb21wYXJlPgorCitiaXRzZXQ8MzMsIHVuc2lnbmVkIGxvbmc+CitiaXRzZXQ8MzM+CisKK2lzdHJlYW1faXRlcmF0b3I8Y2hhciwgQFBUUkRJRkZfVF9UWVBFQD4KK2lzdHJlYW1faXRlcmF0b3I8Y2hhcj4KKworb3N0cmVhbV9pdGVyYXRvcjxjaGFyLCBAUFRSRElGRl9UX1RZUEVAPgorb3N0cmVhbV9pdGVyYXRvcjxjaGFyPgorCisjIHNoYXJlZCBiZXR3ZWVuIGFsbCBzdXBwb3J0ZWQgZ2NjIHZlcnNpb24KK2RlcXVlPGludCwgYWxsb2NhdG9yPGludD4sIDA+CitkZXF1ZTxpbnQ+CisKK3N0ZDo6ZGVxdWU8aW50LCBzdGQ6OmFsbG9jYXRvcjxpbnQ+LCAwPgorZGVxdWU8aW50PgorCitwcmVmaXhfZGVxdWU8aW50LCBhbGxvY2F0b3I8aW50PiwgMD4KK3ByZWZpeF9kZXF1ZTxpbnQsIGFsbG9jYXRvcjxpbnQ+LCAwPgorCitsaXN0PGludCwgYWxsb2NhdG9yPGludD4gPgorbGlzdDxpbnQ+CisKK2xpc3Q8b3BfYmZkX3N5bWJvbCwgYWxsb2NhdG9yPG9wX2JmZF9zeW1ib2w+ID4KK2xpc3Q8b3BfYmZkX3N5bWJvbD4KKworX0xpc3RfaXRlcmF0b3I8aW50LCBpbnQgY29uc3QgJiwgaW50IGNvbnN0ICo+CitsaXN0PGludD46OmNvbnN0X2l0ZXJhdG9yCisKK19MaXN0X2l0ZXJhdG9yPGludCwgaW50ICYsIGludCAqPgorbGlzdDxpbnQ+OjppdGVyYXRvcgorCitwcmVmaXhfbGlzdDxpbnQsIGFsbG9jYXRvcjxpbnQ+ID4KK3ByZWZpeF9saXN0PGludCwgYWxsb2NhdG9yPGludD4+CisKK3N0ZDo6bGlzdDxpbnQsIHN0ZDo6YWxsb2NhdG9yPGludD4gPgorbGlzdDxpbnQ+CisKK3F1ZXVlPGludCwgZGVxdWU8aW50LCBhbGxvY2F0b3I8aW50PiwgMD4gPgorcXVldWU8aW50PgorCitwcmVmaXhfcXVldWU8aW50LCBkZXF1ZTxpbnQsIGFsbG9jYXRvcjxpbnQ+LCAwPiA+CitwcmVmaXhfcXVldWU8aW50LCBkZXF1ZTxpbnQ+PgorCitzdGQ6OnF1ZXVlPGludCwgc3RkOjpkZXF1ZTxpbnQsIGFsbG9jYXRvcjxpbnQ+LCAwPiA+CitxdWV1ZTxpbnQ+CisKKyMgZ2V0IHJpZGUgb2YgX1JiX3RyZWUgdHlwZWRlZiwgdGhlc2UgYXJlIGFsc28gbWFwcGVkIGJ5IG1hcC9zZXQgYnV0IHdlIGNhbid0CisjIGRpc3Rpbmd1aXNoIGEgc2V0PHBhaXI8aW50LCBpbnQ+Pjo6aXRlcmF0b3IgYW5kIGEgIG1hcDxpbnQsIGludD46Oml0ZXJhdG9yCisjIGFzIHRoZXkgZGVjYXkgdG8gYW4gaWRlbnRpY2FsIHR5cGVkZWYgc28gd2UgZG9uJ3QgdHJ5IHRvIGJlIGNsZXZlciBoZXJlLgorX1JiX3RyZWVfaXRlcmF0b3I8VCwgVCBjb25zdCAmLCBUIGNvbnN0ICo+CitfUmJfdHJlZTxUPjo6Y29uc3RfaXRlcmF0b3IKKworX1JiX3RyZWVfaXRlcmF0b3I8VCwgVCAmLCBUICo+CitfUmJfdHJlZTxUPjo6aXRlcmF0b3IKKworIyB0aGlzIHJ1biB0aHJvdWdoIHNwZWNpYWwgY2FzZSBwYXR0ZXJuCitfUmJfdHJlZV9pdGVyYXRvcjxwYWlyPHN0cmluZyBjb25zdCwgaW1hZ2VfbmFtZT4sIHBhaXI8c3RyaW5nIGNvbnN0LCBpbWFnZV9uYW1lPiBjb25zdCAmLCBwYWlyPHN0cmluZyBjb25zdCwgaW1hZ2VfbmFtZT4gY29uc3QgKj4KK19SYl90cmVlPHBhaXI8c3RyaW5nIGNvbnN0LCBpbWFnZV9uYW1lPj46OmNvbnN0X2l0ZXJhdG9yCisKK19SYl90cmVlX2l0ZXJhdG9yPHBhaXI8c3RyaW5nIGNvbnN0LCBpbWFnZV9uYW1lPiwgcGFpcjxzdHJpbmcgY29uc3QsIGltYWdlX25hbWU+ICYsIHBhaXI8c3RyaW5nIGNvbnN0LCBpbWFnZV9uYW1lPiAqPgorX1JiX3RyZWU8cGFpcjxzdHJpbmcgY29uc3QsIGltYWdlX25hbWU+Pjo6aXRlcmF0b3IKKworX1JiX3RyZWU8aW50LCBpbnQsIF9JZGVudGl0eTxpbnQ+LCBsZXNzPGludD4sIGFsbG9jYXRvcjxpbnQ+ID4KK19SYl90cmVlPGludCwgaW50LCBpbnQ+CisKK19SYl90cmVlPHN0cmluZywgcGFpcjxzdHJpbmcgY29uc3QsIGludCBjb25zdD4sIF9TZWxlY3Qxc3Q8cGFpcjxzdHJpbmcgY29uc3QsIGludCBjb25zdD4+LCBsZXNzPHN0cmluZz4sIGFsbG9jYXRvcjxpbnQgY29uc3Q+PgorX1JiX3RyZWU8c3RyaW5nLCBwYWlyPHN0cmluZyBjb25zdCwgaW50IGNvbnN0Piwgc3RyaW5nIGNvbnN0PgorCitfU2VsZWN0MXN0PHBhaXI8aW50IGNvbnN0LCBsb25nPiA+CitpbnQgY29uc3QKKworX1NlbGVjdDFzdDxwYWlyPGludCBjb25zdCwgbG9uZyBjb25zdD4gPgoraW50IGNvbnN0CisKK19TZWxlY3Qxc3Q8cGFpcjxzdHJpbmcgY29uc3QsIHNwbGl0X3NhbXBsZV9maWxlbmFtZSBjb25zdD4+CitzdHJpbmcgY29uc3QKKworX0lkZW50aXR5PGludD4KK2ludAorCisjIHRoaXMgdGVzdCBmYWlsIHNpbmNlIHBhaXI8PiBpcyBub3QgcmVjb2duaXplZCBhcyBhIHR5cGUKKyMgX1NlbGVjdDFzdDxwYWlyPHBhaXI8c3ltYm9sX2VudHJ5IGNvbnN0ICosIHVuc2lnbmVkIGxvbmcgbG9uZz4gY29uc3QsIHNhbXBsZV9lbnRyeT4+CisjIHBhaXI8c3ltYm9sX2VudHJ5IGNvbnN0ICosIHVuc2lnbmVkIGxvbmcgbG9uZz4gY29uc3QKKworIyAyLjk1IG1hcC9tdWx0aW1hcAorX1JiX3RyZWU8aW50LCBwYWlyPGludCBjb25zdCwgbG9uZz4sIF9TZWxlY3Qxc3Q8cGFpcjxpbnQgY29uc3QsIGxvbmc+ID4sIGxlc3M8aW50PiwgYWxsb2NhdG9yPGxvbmc+ID4KK19SYl90cmVlPGludCwgcGFpcjxpbnQgY29uc3QsIGxvbmc+LCBpbnQgY29uc3Q+CisjIDMuMiBtYXAvbXVsdGltYXAKK19SYl90cmVlPGludCwgcGFpcjxpbnQgY29uc3QsIGxvbmc+LCBfU2VsZWN0MXN0PHBhaXI8aW50IGNvbnN0LCBsb25nPiA+LCBsZXNzPGludD4sIGFsbG9jYXRvcjxwYWlyPGludCBjb25zdCwgbG9uZz4gPiA+CitfUmJfdHJlZTxpbnQsIHBhaXI8aW50IGNvbnN0LCBsb25nPiwgaW50IGNvbnN0PgorCitfTGlzdF9iYXNlPHN0cmluZywgYWxsb2NhdG9yPHN0cmluZz4+CitfTGlzdF9iYXNlPHN0cmluZz4KKworIyBzdHJpY3RseSBzcGVha2luZyAzcmQgcGFyYW1ldGVycyBpcyBsZXNzPENvbnRhaW5lclR5cGU6OnZhbHVlX3R5cGU+Citwcmlvcml0eV9xdWV1ZTxpbnQsIHZlY3RvcjxpbnQsIGFsbG9jYXRvcjxpbnQ+ID4sIGxlc3M8aW50PiA+Citwcmlvcml0eV9xdWV1ZTxpbnQ+CisKK3ByZWZpeF9wcmlvcml0eV9xdWV1ZTxpbnQsIHZlY3RvcjxpbnQsIGFsbG9jYXRvcjxpbnQ+ID4sIGxlc3M8aW50PiA+CitwcmVmaXhfcHJpb3JpdHlfcXVldWU8aW50LCB2ZWN0b3I8aW50PiwgbGVzczxpbnQ+PgorCitzdGQ6OnByaW9yaXR5X3F1ZXVlPGludCwgc3RkOjp2ZWN0b3I8aW50LCBzdGQ6OmFsbG9jYXRvcjxpbnQ+ID4sIHN0ZDo6bGVzczxpbnQ+ID4KK3ByaW9yaXR5X3F1ZXVlPGludD4KKwordmVjdG9yPGludCwgYWxsb2NhdG9yPGludD4gPgordmVjdG9yPGludD4KKwordmVjdG9yPGJvb2wsIGFsbG9jYXRvcjxib29sPiA+Cit2ZWN0b3I8Ym9vbD4KKwordmVjdG9yPGJsb2NrMTo6YmxvY2syLCBhbGxvY2F0b3I8YmxvY2sxOjpibG9jazI+ID4KK3ZlY3RvcjxibG9jazE6OmJsb2NrMj4KKworc3RhY2s8aW50LCBkZXF1ZTxpbnQsIGFsbG9jYXRvcjxpbnQ+LCAwPiA+CitzdGFjazxpbnQ+CisKK3ByZWZpeF9zdGFjazxpbnQsIGRlcXVlPGludCwgYWxsb2NhdG9yPGludD4sIDA+ID4KK3ByZWZpeF9zdGFjazxpbnQsIGRlcXVlPGludD4+CisKK3N0ZDo6c3RhY2s8aW50LCBzdGQ6OmRlcXVlPGludCwgc3RkOjphbGxvY2F0b3I8aW50PiwgMD4gPgorc3RhY2s8aW50PgorCisjIHRlc3QgY29tcGxleCB0eXBlbmFtZSwgd2UgZG9uJ3Qgc3VwcG9ydCBtb3JlIHRoYW4gb25lIGxldmVsIG9mIG5lc3RpbmcKK3ZlY3RvcjxsaXN0PGludCwgYWxsb2NhdG9yPGludD4gPiwgYWxsb2NhdG9yPGxpc3Q8aW50LCBhbGxvY2F0b3I8aW50PiA+ID4gPgordmVjdG9yPGxpc3Q8aW50Pj4KKworc3RkOjp2ZWN0b3I8c3RkOjpsaXN0PGludCwgc3RkOjphbGxvY2F0b3I8aW50PiA+LCBzdGQ6OmFsbG9jYXRvcjxsaXN0PGludCwgc3RkOjphbGxvY2F0b3I8aW50PiA+ID4gPgordmVjdG9yPGxpc3Q8aW50Pj4KKworc2V0PGludCwgbGVzczxpbnQ+LCBhbGxvY2F0b3I8aW50PiA+CitzZXQ8aW50PgorCitzZXQ8YmFzaWNfc3RyaW5nPGNoYXIsIHN0cmluZ19jaGFyX3RyYWl0czxjaGFyPiwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPHRydWUsIDA+ID4sIGxlc3M8YmFzaWNfc3RyaW5nPGNoYXIsIHN0cmluZ19jaGFyX3RyYWl0czxjaGFyPiwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPHRydWUsIDA+ID4gPiwgYWxsb2NhdG9yPGJhc2ljX3N0cmluZzxjaGFyLCBzdHJpbmdfY2hhcl90cmFpdHM8Y2hhcj4sIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTx0cnVlLCAwPiA+ID4gPgorc2V0PHN0cmluZz4KKworc2V0PGludCwgbGVzc19ieV9maWxlX2xvYywgYWxsb2NhdG9yPGludD4gPgorc2V0PGludCwgbGVzc19ieV9maWxlX2xvYz4KKworcHJlZml4X3NldDxpbnQsIGxlc3M8aW50PiwgYWxsb2NhdG9yPGludD4gPgorcHJlZml4X3NldDxpbnQsIGxlc3M8aW50PiwgYWxsb2NhdG9yPGludD4+CisKK3ByZWZpeF9zZXQ8aW50LCBsZXNzPGludD4sIGFsbG9jYXRvcjxpbnQ+ID4KK3ByZWZpeF9zZXQ8aW50LCBsZXNzPGludD4sIGFsbG9jYXRvcjxpbnQ+PgorCittdWx0aXNldDxpbnQsIGxlc3M8aW50PiwgYWxsb2NhdG9yPGludD4gPgorbXVsdGlzZXQ8aW50PgorCisjIHRlc3QgdGhhbiBwb2ludGVyIGFuZCByZWZlcmVuY2UgdG8gcG9pbnRlciBhcmUgaGFuZGxlZAordmVjdG9yPGludCAqLCBhbGxvY2F0b3I8aW50ICo+ID4KK3ZlY3RvcjxpbnQgKj4KKwordmVjdG9yPHVuc2lnbmVkIGludCAqLCBhbGxvY2F0b3I8dW5zaWduZWQgaW50ICo+ID4KK3ZlY3Rvcjx1bnNpZ25lZCBpbnQgKj4KKworIyBhbGdvcml0aG0sIHdpbGwgd29yayBmb3IgMy4yIHRvby4KK2ludCAqIGZpbmQ8aW50ICosIGludD4oaW50ICosIGludCAqLCBpbnQgY29uc3QgJiwgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCitpbnQgKiBmaW5kKGludCAqLCBpbnQgKiwgaW50IGNvbnN0ICYsIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQorY2hhciBjb25zdCAqIGZpbmRfaWY8Y2hhciBjb25zdCAqLCBjb21wYXJlPihjaGFyIGNvbnN0ICosIGNoYXIgY29uc3QgKiwgY29tcGFyZSwgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCitjaGFyIGNvbnN0ICogZmluZF9pZihjaGFyIGNvbnN0ICosIGNoYXIgY29uc3QgKiwgY29tcGFyZSwgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCisKKyMgZ2NjIDMuMgorc3RkOjpiYXNpY19zdHJpbmc8Y2hhciwgc3RkOjpjaGFyX3RyYWl0czxjaGFyPiwgc3RkOjphbGxvY2F0b3I8Y2hhcj4gPgorc3RyaW5nCisKK3N0ZDo6YmFzaWNfc3RyaW5nPHdjaGFyX3QsIHN0ZDo6Y2hhcl90cmFpdHM8d2NoYXJfdD4sIHN0ZDo6YWxsb2NhdG9yPHdjaGFyX3Q+ID4KK3dzdHJpbmcKKworIyBfX25vcm1hbF9pdGVyYXRvciBhcmUgdHJlYXRlZCBhIHBhcnQKK19fZ251X2N4eDo6X19ub3JtYWxfaXRlcmF0b3I8Y2hhciBjb25zdCosIHN0cmluZz4KK3N0cmluZzo6Y29uc3RfaXRlcmF0b3IKK19fZ251X2N4eDo6X19ub3JtYWxfaXRlcmF0b3I8Y2hhciosIHN0cmluZz4KK3N0cmluZzo6aXRlcmF0b3IKK19fZ251X2N4eDo6X19ub3JtYWxfaXRlcmF0b3I8d2NoYXJfdCosIHdzdHJpbmc+Cit3c3RyaW5nOjppdGVyYXRvcgorX19nbnVfY3h4OjpfX25vcm1hbF9pdGVyYXRvcjx3Y2hhcl90IGNvbnN0Kiwgd3N0cmluZz4KK3dzdHJpbmc6OmNvbnN0X2l0ZXJhdG9yCitzdGQ6OnJldmVyc2VfaXRlcmF0b3I8X19nbnVfY3h4OjpfX25vcm1hbF9pdGVyYXRvcjxjaGFyKiwgc3RyaW5nPj4KK3JldmVyc2VfaXRlcmF0b3I8c3RyaW5nOjppdGVyYXRvcj4KKworX19nbnVfY3h4OjpfX25vcm1hbF9pdGVyYXRvcjxpbnQgY29uc3QqLCB2ZWN0b3I8aW50Pj4KK3ZlY3RvcjxpbnQ+Ojpjb25zdF9pdGVyYXRvcgorX19nbnVfY3h4OjpfX25vcm1hbF9pdGVyYXRvcjxpbnQqLCB2ZWN0b3I8aW50Pj4KK3ZlY3RvcjxpbnQ+OjppdGVyYXRvcgorc3RkOjpyZXZlcnNlX2l0ZXJhdG9yPF9fZ251X2N4eDo6X19ub3JtYWxfaXRlcmF0b3I8aW50IGNvbnN0KiwgdmVjdG9yPGludD4+CityZXZlcnNlX2l0ZXJhdG9yPHZlY3RvcjxpbnQ+Ojpjb25zdF9pdGVyYXRvcgorCitzdGQ6Om1hcDxpbnQsIGxvbmcsIHN0ZDo6bGVzczxpbnQ+LCBzdGQ6OmFsbG9jYXRvcjxzdGQ6OnBhaXI8aW50IGNvbnN0LCBsb25nPiA+ID4KK21hcDxpbnQsIGxvbmc+CisKK3N0ZDo6bXVsdGltYXA8aW50LCBsb25nLCBzdGQ6Omxlc3M8aW50Piwgc3RkOjphbGxvY2F0b3I8c3RkOjpwYWlyPGludCBjb25zdCwgbG9uZz4gPiA+CittdWx0aW1hcDxpbnQsIGxvbmc+CisKK3N0ZDo6bWFwPGludCwgbG9uZywgY29tcGFyZSwgc3RkOjphbGxvY2F0b3I8c3RkOjpwYWlyPGludCBjb25zdCwgbG9uZz4gPiA+CittYXA8aW50LCBsb25nLCBjb21wYXJlPgorCisjIHBhcmFtZXRlciBpcyBzaXplX3Qgb24geDg2IGl0J3MgYW4gdW5zaWduZWQKK2JpdHNldDwoQFNJWkVfVF9UWVBFQCkzMz4KK2JpdHNldDwzMz4KKworIyAzLCA0LCA1dGggcGFyYW1zIGFyZSBwdHJkaWZmX3QgaXQncyBhbiBpbnQgb24geDg2CitzdGQ6Oml0ZXJhdG9yPHN0ZDo6aW5wdXRfaXRlcmF0b3JfdGFnLCBpbnQsIEBQVFJESUZGX1RfVFlQRUAsIEBQVFJESUZGX1RfVFlQRUAqLCBAUFRSRElGRl9UX1RZUEVAJj4KK2l0ZXJhdG9yPGlucHV0X2l0ZXJhdG9yX3RhZywgaW50PgorCitzdGQ6Oml0ZXJhdG9yPHN0ZDo6b3V0cHV0X2l0ZXJhdG9yX3RhZywgaW50LCBAUFRSRElGRl9UX1RZUEVALCBAUFRSRElGRl9UX1RZUEVAKiwgQFBUUkRJRkZfVF9UWVBFQCY+CitpdGVyYXRvcjxvdXRwdXRfaXRlcmF0b3JfdGFnLCBpbnQ+CisKK3N0ZDo6aXRlcmF0b3I8c3RkOjpmb3J3YXJkX2l0ZXJhdG9yX3RhZywgaW50LCBAUFRSRElGRl9UX1RZUEVALCBAUFRSRElGRl9UX1RZUEVAKiwgQFBUUkRJRkZfVF9UWVBFQCY+CitpdGVyYXRvcjxmb3J3YXJkX2l0ZXJhdG9yX3RhZywgaW50PgorCitzdGQ6Oml0ZXJhdG9yPHN0ZDo6YmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcsIGludCwgQFBUUkRJRkZfVF9UWVBFQCwgQFBUUkRJRkZfVF9UWVBFQCosIEBQVFJESUZGX1RfVFlQRUAmPgoraXRlcmF0b3I8YmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcsIGludD4KKworc3RkOjppdGVyYXRvcjxzdGQ6OnJhbmRvbV9pdGVyYXRvcl90YWcsIGludCwgQFBUUkRJRkZfVF9UWVBFQCwgQFBUUkRJRkZfVF9UWVBFQCosIEBQVFJESUZGX1RfVFlQRUAmPgoraXRlcmF0b3I8cmFuZG9tX2l0ZXJhdG9yX3RhZywgaW50PgorCisjIDR0aCBwYXJtcyBpcyBwdHJkaWZmX3QKK3N0ZDo6aXN0cmVhbV9pdGVyYXRvcjxsb25nLCBjaGFyLCBzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+LCBAUFRSRElGRl9UX1RZUEVAPgoraXN0cmVhbV9pdGVyYXRvcjxsb25nPgorCitzdGQ6Om9zdHJlYW1faXRlcmF0b3I8bG9uZywgY2hhciwgc3RkOjpjaGFyX3RyYWl0czxjaGFyPiwgQFBUUkRJRkZfVF9UWVBFQD4KK29zdHJlYW1faXRlcmF0b3I8bG9uZz4KKworIyBzaW1wbGUgZW5vdWdoLCBpdCdzIGp1c3QgPGlvc2Z3ZD4KK3N0ZDo6YmFzaWNfaW9zPGludCwgc3RkOjpjaGFyX3RyYWl0czxpbnQ+ID4KK2Jhc2ljX2lvczxpbnQ+CisKK3N0ZDo6YmFzaWNfc3RyZWFtYnVmPGludCwgc3RkOjpjaGFyX3RyYWl0czxpbnQ+ID4KK2Jhc2ljX3N0cmVhbWJ1ZjxpbnQ+CisKK3N0ZDo6YmFzaWNfaXN0cmVhbTxpbnQsIHN0ZDo6Y2hhcl90cmFpdHM8aW50PiA+CitiYXNpY19pc3RyZWFtPGludD4KKworc3RkOjpiYXNpY19vc3RyZWFtPGludCwgc3RkOjpjaGFyX3RyYWl0czxpbnQ+ID4KK2Jhc2ljX29zdHJlYW08aW50PgorCitzdGQ6OmJhc2ljX2lvc3RyZWFtPGludCwgc3RkOjpjaGFyX3RyYWl0czxpbnQ+ID4KK2Jhc2ljX2lvc3RyZWFtPGludD4KKworc3RkOjpiYXNpY19maWxlYnVmPGludCwgc3RkOjpjaGFyX3RyYWl0czxpbnQ+ID4KK2Jhc2ljX2ZpbGVidWY8aW50PgorCitzdGQ6OmJhc2ljX2lmc3RyZWFtPGludCwgc3RkOjpjaGFyX3RyYWl0czxpbnQ+ID4KK2Jhc2ljX2lmc3RyZWFtPGludD4KKworc3RkOjpiYXNpY19vZnN0cmVhbTxpbnQsIHN0ZDo6Y2hhcl90cmFpdHM8aW50PiA+CitiYXNpY19vZnN0cmVhbTxpbnQ+CisKK3N0ZDo6YmFzaWNfZnN0cmVhbTxpbnQsIHN0ZDo6Y2hhcl90cmFpdHM8aW50PiA+CitiYXNpY19mc3RyZWFtPGludD4KKworc3RkOjppc3RyZWFtYnVmX2l0ZXJhdG9yPGxvbmcsIHN0ZDo6Y2hhcl90cmFpdHM8bG9uZz4gPgoraXN0cmVhbWJ1Zl9pdGVyYXRvcjxsb25nPgorCitzdGQ6Om9zdHJlYW1idWZfaXRlcmF0b3I8bG9uZywgc3RkOjpjaGFyX3RyYWl0czxsb25nPiA+Citvc3RyZWFtYnVmX2l0ZXJhdG9yPGxvbmc+CisKK3N0ZDo6YmFzaWNfc3RyaW5nYnVmPGxvbmcsIHN0ZDo6Y2hhcl90cmFpdHM8bG9uZz4sIHN0ZDo6YWxsb2NhdG9yPGxvbmc+ID4KK2Jhc2ljX3N0cmluZ2J1Zjxsb25nPgorCitzdGQ6OmJhc2ljX2lzdHJpbmdzdHJlYW08bG9uZywgc3RkOjpjaGFyX3RyYWl0czxsb25nPiwgc3RkOjphbGxvY2F0b3I8bG9uZz4gPgorYmFzaWNfaXN0cmluZ3N0cmVhbTxsb25nPgorCitzdGQ6OmJhc2ljX29zdHJpbmdzdHJlYW08bG9uZywgc3RkOjpjaGFyX3RyYWl0czxsb25nPiwgc3RkOjphbGxvY2F0b3I8bG9uZz4gPgorYmFzaWNfb3N0cmluZ3N0cmVhbTxsb25nPgorCitzdGQ6OmJhc2ljX3N0cmluZ3N0cmVhbTxsb25nLCBzdGQ6OmNoYXJfdHJhaXRzPGxvbmc+LCBzdGQ6OmFsbG9jYXRvcjxsb25nPiA+CitiYXNpY19zdHJpbmdzdHJlYW08bG9uZz4KKworIyBhbGwgdGhlIGFib3ZlIGludGFudGlhdGVkIHdpdGggY2hhciBhbmQgd2NoYXJfdCBmYWxsYmFjayB0byBzdGFuZGFyZGlzZWQKKyMgdHlwZWRlZiBleGNlcHQgaXN0cmVhbWJ1Zl9pdGVyYXRvciBhbmQgb3N0cmVhbWJ1Zl9pdGVyYXRvcgorCitzdGQ6OmJhc2ljX2lvczxjaGFyLCBzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+ID4KK2lvcworc3RkOjpiYXNpY19pb3M8d2NoYXJfdCwgc3RkOjpjaGFyX3RyYWl0czx3Y2hhcl90PiA+Cit3aW9zCisKK3N0ZDo6YmFzaWNfc3RyZWFtYnVmPGNoYXIsIHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4gPgorc3RyZWFtYnVmCitzdGQ6OmJhc2ljX3N0cmVhbWJ1Zjx3Y2hhcl90LCBzdGQ6OmNoYXJfdHJhaXRzPHdjaGFyX3Q+ID4KK3dzdHJlYW1idWYKKworc3RkOjpiYXNpY19pc3RyZWFtPGNoYXIsIHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4gPgoraXN0cmVhbQorc3RkOjpiYXNpY19pc3RyZWFtPHdjaGFyX3QsIHN0ZDo6Y2hhcl90cmFpdHM8d2NoYXJfdD4gPgord2lzdHJlYW0KKworc3RkOjpiYXNpY19vc3RyZWFtPGNoYXIsIHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4gPgorb3N0cmVhbQorc3RkOjpiYXNpY19vc3RyZWFtPHdjaGFyX3QsIHN0ZDo6Y2hhcl90cmFpdHM8d2NoYXJfdD4gPgord29zdHJlYW0KKworc3RkOjpiYXNpY19pb3N0cmVhbTxjaGFyLCBzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+ID4KK2lvc3RyZWFtCitzdGQ6OmJhc2ljX2lvc3RyZWFtPHdjaGFyX3QsIHN0ZDo6Y2hhcl90cmFpdHM8d2NoYXJfdD4gPgord2lvc3RyZWFtCisKK3N0ZDo6YmFzaWNfZmlsZWJ1ZjxjaGFyLCBzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+ID4KK2ZpbGVidWYKK3N0ZDo6YmFzaWNfZmlsZWJ1Zjx3Y2hhcl90LCBzdGQ6OmNoYXJfdHJhaXRzPHdjaGFyX3Q+ID4KK3dmaWxlYnVmCisKK3N0ZDo6YmFzaWNfaWZzdHJlYW08Y2hhciwgc3RkOjpjaGFyX3RyYWl0czxjaGFyPiA+CitpZnN0cmVhbQorc3RkOjpiYXNpY19pZnN0cmVhbTx3Y2hhcl90LCBzdGQ6OmNoYXJfdHJhaXRzPHdjaGFyX3Q+ID4KK3dpZnN0cmVhbQorCitzdGQ6OmJhc2ljX29mc3RyZWFtPGNoYXIsIHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4gPgorb2ZzdHJlYW0KK3N0ZDo6YmFzaWNfb2ZzdHJlYW08d2NoYXJfdCwgc3RkOjpjaGFyX3RyYWl0czx3Y2hhcl90PiA+Cit3b2ZzdHJlYW0KKworc3RkOjpiYXNpY19mc3RyZWFtPGNoYXIsIHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4gPgorZnN0cmVhbQorc3RkOjpiYXNpY19mc3RyZWFtPHdjaGFyX3QsIHN0ZDo6Y2hhcl90cmFpdHM8d2NoYXJfdD4gPgord2ZzdHJlYW0KKworc3RkOjpiYXNpY19zdHJpbmdidWY8Y2hhciwgc3RkOjpjaGFyX3RyYWl0czxjaGFyPiwgc3RkOjphbGxvY2F0b3I8Y2hhcj4gPgorc3RyaW5nYnVmCitzdGQ6OmJhc2ljX3N0cmluZ2J1Zjx3Y2hhcl90LCBzdGQ6OmNoYXJfdHJhaXRzPHdjaGFyX3Q+LCBzdGQ6OmFsbG9jYXRvcjx3Y2hhcl90PiA+Cit3c3RyaW5nYnVmCisKK3N0ZDo6YmFzaWNfaXN0cmluZ3N0cmVhbTxjaGFyLCBzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+LCBzdGQ6OmFsbG9jYXRvcjxjaGFyPiA+Citpc3RyaW5nc3RyZWFtCitzdGQ6OmJhc2ljX2lzdHJpbmdzdHJlYW08d2NoYXJfdCwgc3RkOjpjaGFyX3RyYWl0czx3Y2hhcl90Piwgc3RkOjphbGxvY2F0b3I8d2NoYXJfdD4gPgord2lzdHJpbmdzdHJlYW0KKworc3RkOjpiYXNpY19vc3RyaW5nc3RyZWFtPGNoYXIsIHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4sIHN0ZDo6YWxsb2NhdG9yPGNoYXI+ID4KK29zdHJpbmdzdHJlYW0KK3N0ZDo6YmFzaWNfb3N0cmluZ3N0cmVhbTx3Y2hhcl90LCBzdGQ6OmNoYXJfdHJhaXRzPHdjaGFyX3Q+LCBzdGQ6OmFsbG9jYXRvcjx3Y2hhcl90PiA+Cit3b3N0cmluZ3N0cmVhbQorCitzdGQ6OmJhc2ljX3N0cmluZ3N0cmVhbTxjaGFyLCBzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+LCBzdGQ6OmFsbG9jYXRvcjxjaGFyPiA+CitzdHJpbmdzdHJlYW0KK3N0ZDo6YmFzaWNfc3RyaW5nc3RyZWFtPHdjaGFyX3QsIHN0ZDo6Y2hhcl90cmFpdHM8d2NoYXJfdD4sIHN0ZDo6YWxsb2NhdG9yPHdjaGFyX3Q+ID4KK3dzdHJpbmdzdHJlYW0KKworIyB0aGVzZSB0d28gYXJlIGFsc28gaW4gaW9zZncsIG5hbWVseQorIyB0eXBlZGVmIGZwb3M8Y2hhcl90cmFpdHM8Y2hhcj46OnN0YXRlX3R5cGU+ICBzdHJlYW1wb3M7CisjIHR5cGVkZWYgZnBvczxjaGFyX3RyYWl0czx3Y2hhcl90Pjo6c3RhdGVfdHlwZT4gd3N0cmVhbXBvczsKKyMgYnV0IHR3aWNlIGRlY2F5IHRvIGZwb3M8X19tYnN0YXRlPiwgd2UgY2hvb3NlZCB0byB0cmFuc2xhdGUgdG8gc3RyZWFtcG9zCitzdGQ6OmZwb3M8X19tYnN0YXRlX3Q+CitzdHJlYW1wb3MKKworIyBsb2NhbGUKK3N0ZDo6bnVtX3B1dDxjaGFyLCBzdGQ6Om9zdHJlYW1idWZfaXRlcmF0b3I8Y2hhcj4gPgorbnVtX3B1dDxjaGFyPgorc3RkOjpudW1fcHV0PHdjaGFyX3QsIHN0ZDo6b3N0cmVhbWJ1Zl9pdGVyYXRvcjx3Y2hhcl90PiA+CitudW1fcHV0PHdjaGFyX3Q+CitzdGQ6Om51bV9nZXQ8Y2hhciwgc3RkOjppc3RyZWFtYnVmX2l0ZXJhdG9yPGNoYXI+ID4KK251bV9nZXQ8Y2hhcj4KK3N0ZDo6bnVtX2dldDx3Y2hhcl90LCBzdGQ6OmlzdHJlYW1idWZfaXRlcmF0b3I8d2NoYXJfdD4gPgorbnVtX2dldDx3Y2hhcl90PgorCitzdGQ6OnRpbWVfcHV0PGNoYXIsIHN0ZDo6b3N0cmVhbWJ1Zl9pdGVyYXRvcjxjaGFyPiA+Cit0aW1lX3B1dDxjaGFyPgorc3RkOjp0aW1lX3B1dDx3Y2hhcl90LCBzdGQ6Om9zdHJlYW1idWZfaXRlcmF0b3I8d2NoYXJfdD4gPgordGltZV9wdXQ8d2NoYXJfdD4KK3N0ZDo6dGltZV9nZXQ8Y2hhciwgc3RkOjppc3RyZWFtYnVmX2l0ZXJhdG9yPGNoYXI+ID4KK3RpbWVfZ2V0PGNoYXI+CitzdGQ6OnRpbWVfZ2V0PHdjaGFyX3QsIHN0ZDo6aXN0cmVhbWJ1Zl9pdGVyYXRvcjx3Y2hhcl90PiA+Cit0aW1lX2dldDx3Y2hhcl90PgorCitzdGQ6Om1vbmV5X3B1dDxjaGFyLCBzdGQ6Om9zdHJlYW1idWZfaXRlcmF0b3I8Y2hhcj4gPgorbW9uZXlfcHV0PGNoYXI+CitzdGQ6Om1vbmV5X3B1dDx3Y2hhcl90LCBzdGQ6Om9zdHJlYW1idWZfaXRlcmF0b3I8d2NoYXJfdD4gPgorbW9uZXlfcHV0PHdjaGFyX3Q+CitzdGQ6Om1vbmV5X2dldDxjaGFyLCBzdGQ6OmlzdHJlYW1idWZfaXRlcmF0b3I8Y2hhcj4gPgorbW9uZXlfZ2V0PGNoYXI+CitzdGQ6Om1vbmV5X2dldDx3Y2hhcl90LCBzdGQ6OmlzdHJlYW1idWZfaXRlcmF0b3I8d2NoYXJfdD4gPgorbW9uZXlfZ2V0PHdjaGFyX3Q+CisKK3N0ZDo6bW9uZXlwdW5jdDxjaGFyLCAoYm9vbCkwPgorbW9uZXlwdW5jdDxjaGFyPgorc3RkOjptb25leXB1bmN0PHdjaGFyX3QsIChib29sKTA+Cittb25leXB1bmN0PHdjaGFyX3Q+CitzdGQ6Om1vbmV5cHVuY3RfYnluYW1lPGNoYXIsIChib29sKTA+Cittb25leXB1bmN0X2J5bmFtZTxjaGFyPgorc3RkOjptb25leXB1bmN0X2J5bmFtZTx3Y2hhcl90LCAoYm9vbCkwPgorbW9uZXlwdW5jdF9ieW5hbWU8d2NoYXJfdD4KKworIyBhbGdvcml0aG0KK3ZlY3RvcjxzdHJpbmc+OjppdGVyYXRvciBmaW5kPHZlY3RvcjxzdHJpbmc+OjppdGVyYXRvciwgc3RyaW5nPih2ZWN0b3I8c3RyaW5nPjo6aXRlcmF0b3IsIHZlY3RvcjxzdHJpbmc+OjppdGVyYXRvciwgc3RyaW5nIGNvbnN0JiwgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCit2ZWN0b3I8c3RyaW5nPjo6aXRlcmF0b3IgZmluZCh2ZWN0b3I8c3RyaW5nPjo6aXRlcmF0b3IsIHZlY3RvcjxzdHJpbmc+OjppdGVyYXRvciwgc3RyaW5nIGNvbnN0JiwgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCisKK3N0cmluZzo6aXRlcmF0b3IgZmluZDxzdHJpbmc6Oml0ZXJhdG9yLCBpbnQ+KHN0cmluZzo6aXRlcmF0b3IsIHN0cmluZzo6aXRlcmF0b3IsIGludCBjb25zdCYsIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQorc3RyaW5nOjppdGVyYXRvciBmaW5kKHN0cmluZzo6aXRlcmF0b3IsIHN0cmluZzo6aXRlcmF0b3IsIGludCBjb25zdCYsIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQorCit2ZWN0b3I8aW50Pjo6aXRlcmF0b3IgZmluZDx2ZWN0b3I8aW50Pjo6aXRlcmF0b3IsIGludD4odmVjdG9yPGludD46Oml0ZXJhdG9yLCB2ZWN0b3I8aW50Pjo6aXRlcmF0b3IsIGludCBjb25zdCYsIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQordmVjdG9yPGludD46Oml0ZXJhdG9yIGZpbmQodmVjdG9yPGludD46Oml0ZXJhdG9yLCB2ZWN0b3I8aW50Pjo6aXRlcmF0b3IsIGludCBjb25zdCYsIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQorCitjaGFyIGNvbnN0ICogZmluZDxjaGFyIGNvbnN0ICosIGludD4oY2hhciBjb25zdCAqLCBjaGFyIGNvbnN0ICosIGludCBjb25zdCAmLCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykKK2NoYXIgY29uc3QgKiBmaW5kKGNoYXIgY29uc3QgKiwgY2hhciBjb25zdCAqLCBpbnQgY29uc3QgJiwgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCisKK3N0cmluZzo6Y29uc3RfaXRlcmF0b3IgZmluZDxzdHJpbmc6OmNvbnN0X2l0ZXJhdG9yLCBpbnQ+KHN0cmluZzo6Y29uc3RfaXRlcmF0b3IsIHN0cmluZzo6Y29uc3RfaXRlcmF0b3IsIGludCBjb25zdCYsIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQorc3RyaW5nOjpjb25zdF9pdGVyYXRvciBmaW5kKHN0cmluZzo6Y29uc3RfaXRlcmF0b3IsIHN0cmluZzo6Y29uc3RfaXRlcmF0b3IsIGludCBjb25zdCYsIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQorCitzdHJpbmc6OmNvbnN0X2l0ZXJhdG9yIGZpbmRfaWY8c3RyaW5nOjpjb25zdF9pdGVyYXRvciwgY29tcGFyZT4oc3RyaW5nOjpjb25zdF9pdGVyYXRvciwgc3RyaW5nOjpjb25zdF9pdGVyYXRvciwgY29tcGFyZSwgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCitzdHJpbmc6OmNvbnN0X2l0ZXJhdG9yIGZpbmRfaWYoc3RyaW5nOjpjb25zdF9pdGVyYXRvciwgc3RyaW5nOjpjb25zdF9pdGVyYXRvciwgY29tcGFyZSwgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCisKK3ZlY3RvcjxpbnQ+OjppdGVyYXRvciBmaW5kX2lmPHZlY3RvcjxpbnQ+OjppdGVyYXRvciwgY29tcGFyZT4odmVjdG9yPGludD46Oml0ZXJhdG9yLCB2ZWN0b3I8aW50Pjo6aXRlcmF0b3IsIGNvbXBhcmUsIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQordmVjdG9yPGludD46Oml0ZXJhdG9yIGZpbmRfaWYodmVjdG9yPGludD46Oml0ZXJhdG9yLCB2ZWN0b3I8aW50Pjo6aXRlcmF0b3IsIGNvbXBhcmUsIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQorCitvc3RyZWFtICYgb3BlcmF0b3I8PDxjaGFyLCBzdHJpbmdfY2hhcl90cmFpdHM8Y2hhcj4sIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTx0cnVlLCAwPj4ob3N0cmVhbSAmLCBzdHJpbmcgY29uc3QgJikKK29zdHJlYW0gJiBvcGVyYXRvcjw8KG9zdHJlYW0gJiwgc3RyaW5nIGNvbnN0ICYpCisKK2lzdHJlYW0gJiBvcGVyYXRvcj4+PGNoYXIsIHN0cmluZ19jaGFyX3RyYWl0czxjaGFyPiwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPHRydWUsIDA+Pihpc3RyZWFtICYsIHN0cmluZyAmKQoraXN0cmVhbSAmIG9wZXJhdG9yPj4oaXN0cmVhbSAmLCBzdHJpbmcgJikKKworaXN0cmVhbSAmIGdldGxpbmU8Y2hhciwgc3RyaW5nX2NoYXJfdHJhaXRzPGNoYXI+LCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8dHJ1ZSwgMD4+KGlzdHJlYW0gJiwgc3RyaW5nICYpCitpc3RyZWFtICYgZ2V0bGluZShpc3RyZWFtICYsIHN0cmluZyAmKQorCitvc3RyZWFtJiBvcGVyYXRvcjw8IDxjaGFyLCBjaGFyX3RyYWl0czxjaGFyPiwgYWxsb2NhdG9yPGNoYXI+Pihvc3RyZWFtJiwgc3RyaW5nIGNvbnN0JikKK29zdHJlYW0gJiBvcGVyYXRvcjw8KG9zdHJlYW0gJiwgc3RyaW5nIGNvbnN0ICYpCisKK2lzdHJlYW0mIG9wZXJhdG9yPj4gPGNoYXIsIGNoYXJfdHJhaXRzPGNoYXI+LCBhbGxvY2F0b3I8Y2hhcj4+KGlzdHJlYW0mLCBzdHJpbmcmKQoraXN0cmVhbSAmIG9wZXJhdG9yPj4oaXN0cmVhbSAmLCBzdHJpbmcgJikKKworc3RkOjpiYXNpY19vc3RyZWFtPGNoYXIsIHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4gPjo6b3BlcmF0b3I8PChsb25nKQorb3N0cmVhbTo6b3BlcmF0b3I8PChsb25nKQpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvbGlicmVnZXgvdGVzdHMvcmVnZXhfdGVzdC5jcHAgYi9vcHJvZmlsZS0wLjkuNy9saWJyZWdleC90ZXN0cy9yZWdleF90ZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzRmMDBmCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvbGlicmVnZXgvdGVzdHMvcmVnZXhfdGVzdC5jcHAKQEAgLTAsMCArMSw5NCBAQAorLyoqCisgKiBAZmlsZSByZWdleF90ZXN0LmNwcAorICoKKyAqIEEgc2ltcGxlIHRlc3QgZm9yIGxpYnJlZ2V4LiBSdW4gaXQgdGhyb3VnaDoKKyAqICQgcmVnZXhfdGVzdAorICogb3IKKyAqICQgcmVnZXhfdGVzdCBmaWxlbmFtZShzKQorICogd2hlbiBubyBhcmd1bWVudCBpcyBwcm92aWRlZCAibWFuZ2xlZC1uYW1lIiBpcyB1c2VkLAorICogc2VlIGl0IGZvciB0aGUgaW5wdXQgZmlsZSBmb3JtYXQKKyAqCisgKiBAcmVtYXJrIENvcHlyaWdodCAyMDAzIE9Qcm9maWxlIGF1dGhvcnMKKyAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCisgKgorICogQGF1dGhvciBQaGlsaXBwZSBFbGllCisgKi8KKworI2luY2x1ZGUgInN0cmluZ19tYW5pcC5oIgorCisjaW5jbHVkZSAib3BfcmVnZXguaCIKKworI2luY2x1ZGUgPGlvc3RyZWFtPgorI2luY2x1ZGUgPGZzdHJlYW0+CisKKyNpbmNsdWRlIDxjc3RkbGliPgorCit1c2luZyBuYW1lc3BhY2Ugc3RkOworCitzdGF0aWMgaW50IG5yX2Vycm9yID0gMDsKKworc3RhdGljIHZvaWQgZG9fdGVzdChpc3RyZWFtJiBmaW4pCit7CisJcmVndWxhcl9leHByZXNzaW9uX3JlcGxhY2UgcmVwOworCisJc2V0dXBfcmVnZXgocmVwLCAiLi4vc3RsLnBhdCIpOworCisJc3RyaW5nIHRlc3QsIGV4cGVjdCwgbGFzdDsKKwlib29sIGZpcnN0ID0gdHJ1ZTsKKwl3aGlsZSAoZ2V0bGluZShmaW4sIGxhc3QpKSB7CisJCWxhc3QgPSB0cmltKGxhc3QpOworCQlpZiAobGFzdC5sZW5ndGgoKSA9PSAwIHx8IGxhc3RbMF0gPT0gJyMnKQorCQkJY29udGludWU7CisKKwkJaWYgKGZpcnN0KSB7CisJCQl0ZXN0ID0gbGFzdDsKKwkJCWZpcnN0ID0gZmFsc2U7CisJCX0gZWxzZSB7CisJCQlleHBlY3QgPSBsYXN0OworCQkJZmlyc3QgPSB0cnVlOworCQkJc3RyaW5nIHN0cih0ZXN0KTsKKwkJCXJlcC5leGVjdXRlKHN0cik7CisJCQlpZiAoc3RyICE9IGV4cGVjdCkgeworCQkJCWNlcnIgPDwgIm1pc3RtYXRjaDogdGVzdCwgZXhwZWN0LCByZXR1cm5lZFxuIgorCQkJCSAgICAgPDwgJyInIDw8IHRlc3QgPDwgJyInIDw8IGVuZGwKKwkJCQkgICAgIDw8ICciJyA8PCBleHBlY3QgPDwgJyInIDw8IGVuZGwKKwkJCQkgICAgIDw8ICciJyA8PCBzdHIgPDwgJyInIDw8IGVuZGw7CisJCQkJKytucl9lcnJvcjsKKwkJCX0KKwkJfQorCX0KKworCWlmICghZmlyc3QpCisJCWNlcnIgPDwgImlucHV0IGZpbGUgaWxsIGZvcm1lZFxuIjsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiBhcmd2W10pCit7CisJdHJ5IHsKKwkJaWYgKGFyZ2MgPiAxKSB7CisJCQlmb3IgKGludCBpID0gMTsgaSA8IGFyZ2M7ICsraSkgeworCQkJCWlmc3RyZWFtIGZpbihhcmd2W2ldKTsKKwkJCQlkb190ZXN0KGZpbik7CisJCQl9CisJCX0gZWxzZSB7CisJCQlpZnN0cmVhbSBmaW4oIm1hbmdsZWQtbmFtZSIpOworCQkJaWYgKCFmaW4pIHsKKwkJCQljZXJyIDw8ICJVbmFibGUgdG8gb3BlbiBpbnB1dCB0ZXN0ICIKKwkJCQkgICAgIDw8ICJcIm1hbmdsZWRfbmFtZVwiXG4iIDw8IGVuZGw7CisJCQkJZXhpdChFWElUX0ZBSUxVUkUpOworCQkJfQorCQkJZG9fdGVzdChmaW4pOworCQl9CisJfQorCWNhdGNoIChiYWRfcmVnZXggY29uc3QgJiBlKSB7CisJCWNlcnIgPDwgImJhZF9yZWdleCAiIDw8IGUud2hhdCgpIDw8IGVuZGw7CisJCXJldHVybiBFWElUX0ZBSUxVUkU7CisJfQorCWNhdGNoIChleGNlcHRpb24gY29uc3QgJiBlKSB7CisJCWNlcnIgPDwgImV4Y2VwdGlvbjogIiA8PCBlLndoYXQoKSA8PCBlbmRsOworCQlyZXR1cm4gRVhJVF9GQUlMVVJFOworCX0KKworCXJldHVybiBucl9lcnJvciA/IEVYSVRfRkFJTFVSRSA6IEVYSVRfU1VDQ0VTUzsKK30KKwpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvbGlidXRpbCsrL01ha2VmaWxlLmFtIGIvb3Byb2ZpbGUtMC45LjcvbGlidXRpbCsrL01ha2VmaWxlLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2ZmFiMmMKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9saWJ1dGlsKysvTWFrZWZpbGUuYW0KQEAgLTAsMCArMSw0NCBAQAorU1VCRElSUyA9IC4gdGVzdHMKKworQU1fQ1BQRkxBR1M9IFwKKwktSSAke3RvcF9zcmNkaXJ9L2xpYnV0aWwgXAorCS1JICR7dG9wX3NyY2Rpcn0vbGlib3AgXAorCS1JICR7dG9wX3NyY2Rpcn0vbGlicHAKKworQU1fQ1hYRkxBR1MgPSBAT1BfQ1hYRkxBR1NACisKK25vaW5zdF9MSUJSQVJJRVMgPSBsaWJ1dGlsKysuYQorbGlidXRpbF9fX2FfU09VUkNFUyA9IFwKKwlvcF9iZmQuY3BwIFwKKwlvcF9iZmQuaCBcCisJYmZkX3N1cHBvcnQuY3BwIFwKKwliZmRfc3VwcG9ydC5oIFwKKwlzdHJpbmdfZmlsdGVyLmNwcCBcCisJc3RyaW5nX2ZpbHRlci5oIFwKKwlnbG9iX2ZpbHRlci5jcHAgXAorCWdsb2JfZmlsdGVyLmggXAorCWdyb3dhYmxlX3ZlY3Rvci5oIFwKKwlwYXRoX2ZpbHRlci5jcHAgXAorCXBhdGhfZmlsdGVyLmggXAorCWZpbGVfbWFuaXAuY3BwIFwKKwlmaWxlX21hbmlwLmggXAorCXNwYXJzZV9hcnJheS5oIFwKKwlzdHJlYW1fdXRpbC5jcHAgXAorCXN0cmVhbV91dGlsLmggXAorCXN0cmluZ19tYW5pcC5jcHAgXAorCXN0cmluZ19tYW5pcC5oIFwKKwljdmVyYi5jcHAgXAorCWN2ZXJiLmggXAorCWdlbmVyaWNfc3BlYy5oIFwKKwlvcF9leGNlcHRpb24uY3BwIFwKKwlvcF9leGNlcHRpb24uaCBcCisJY2hpbGRfcmVhZGVyLmNwcCBcCisJY2hpbGRfcmVhZGVyLmggXAorCXVuaXF1ZV9zdG9yYWdlLmggXAorCXV0aWxpdHkuaCBcCisJY2FjaGVkX3ZhbHVlLmggXAorCWNvbW1hX2xpc3QuaCBcCisJeG1sX291dHB1dC5oIFwKKwl4bWxfb3V0cHV0LmNwcCBcCisJYmZkX3NwdV9zdXBwb3J0LmNwcCBcCisJb3Bfc3B1X2JmZC5jcHAKZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2xpYnV0aWwrKy9NYWtlZmlsZS5pbiBiL29wcm9maWxlLTAuOS43L2xpYnV0aWwrKy9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzNlZDcwCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvbGlidXRpbCsrL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsNzQ0IEBACisjIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjExLjEgZnJvbSBNYWtlZmlsZS5hbS4KKyMgQGNvbmZpZ3VyZV9pbnB1dEAKKworIyBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsCisjIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyMgSW5jLgorIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAorIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCisjIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworQFNFVF9NQUtFQAorCitWUEFUSCA9IEBzcmNkaXJACitwa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKK3BrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAorcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAorcGtnbGliZXhlY2RpciA9ICQobGliZXhlY2RpcikvQFBBQ0tBR0VACithbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCitpbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAoraW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYworaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCitJTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQordHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQorTk9STUFMX0lOU1RBTEwgPSA6CitQUkVfSU5TVEFMTCA9IDoKK1BPU1RfSU5TVEFMTCA9IDoKK05PUk1BTF9VTklOU1RBTEwgPSA6CitQUkVfVU5JTlNUQUxMID0gOgorUE9TVF9VTklOU1RBTEwgPSA6CitidWlsZF90cmlwbGV0ID0gQGJ1aWxkQAoraG9zdF90cmlwbGV0ID0gQGhvc3RACitzdWJkaXIgPSBsaWJ1dGlsKysKK0RJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmFtICQoc3JjZGlyKS9NYWtlZmlsZS5pbgorQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAorYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvbTQvYmludXRpbHMubTQgXAorCSQodG9wX3NyY2RpcikvbTQvYnVpbHRpbmV4cGVjdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jZWxsc3B1YmZkc3VwcG9ydC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jb21waWxlcm9wdGlvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jb25maWdtb2R1bGUubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY29weWlmY2hhbmdlLm00ICQodG9wX3NyY2RpcikvbTQvZG9jYm9vay5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9leHRyYWRpcnMubTQgJCh0b3Bfc3JjZGlyKS9tNC9maW5ka2VybmVsLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2tlcm5lbG9wdGlvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9rZXJuZWx2ZXJzaW9uLm00ICQodG9wX3NyY2RpcikvbTQvbGlidG9vbC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9sdG9wdGlvbnMubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdHN1Z2FyLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2x0dmVyc2lvbi5tNCAkKHRvcF9zcmNkaXIpL200L2x0fm9ic29sZXRlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L21hbGxvY2F0dHJpYnV0ZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9wb3B0Y29uc3QubTQgXAorCSQodG9wX3NyY2RpcikvbTQvcHJlY29tcGlsZWRoZWFkZXIubTQgJCh0b3Bfc3JjZGlyKS9tNC9xdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9yZXN1bHR5bi5tNCAkKHRvcF9zcmNkaXIpL200L3NzdHJlYW0ubTQgXAorCSQodG9wX3NyY2RpcikvbTQvdHlwZWRlZi5tNCAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5pbgorYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKKwkkKEFDTE9DQUxfTTQpCitta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAorQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAorQ09ORklHX0NMRUFOX0ZJTEVTID0KK0NPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9CitMSUJSQVJJRVMgPSAkKG5vaW5zdF9MSUJSQVJJRVMpCitBUkZMQUdTID0gY3J1CitsaWJ1dGlsX19fYV9BUiA9ICQoQVIpICQoQVJGTEFHUykKK2xpYnV0aWxfX19hX0xJQkFERCA9CithbV9saWJ1dGlsX19fYV9PQkpFQ1RTID0gb3BfYmZkLiQoT0JKRVhUKSBiZmRfc3VwcG9ydC4kKE9CSkVYVCkgXAorCXN0cmluZ19maWx0ZXIuJChPQkpFWFQpIGdsb2JfZmlsdGVyLiQoT0JKRVhUKSBcCisJcGF0aF9maWx0ZXIuJChPQkpFWFQpIGZpbGVfbWFuaXAuJChPQkpFWFQpIFwKKwlzdHJlYW1fdXRpbC4kKE9CSkVYVCkgc3RyaW5nX21hbmlwLiQoT0JKRVhUKSBjdmVyYi4kKE9CSkVYVCkgXAorCW9wX2V4Y2VwdGlvbi4kKE9CSkVYVCkgY2hpbGRfcmVhZGVyLiQoT0JKRVhUKSBcCisJeG1sX291dHB1dC4kKE9CSkVYVCkgYmZkX3NwdV9zdXBwb3J0LiQoT0JKRVhUKSBcCisJb3Bfc3B1X2JmZC4kKE9CSkVYVCkKK2xpYnV0aWxfX19hX09CSkVDVFMgPSAkKGFtX2xpYnV0aWxfX19hX09CSkVDVFMpCitERUZBVUxUX0lOQ0xVREVTID0gLUkuQGFtX19pc3JjQCAtSSQodG9wX2J1aWxkZGlyKQorZGVwY29tcCA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvZGVwY29tcAorYW1fX2RlcGZpbGVzX21heWJlID0gZGVwZmlsZXMKK2FtX19tdiA9IG12IC1mCitDWFhDT01QSUxFID0gJChDWFgpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSBcCisJJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DWFhGTEFHUykgJChDWFhGTEFHUykKK0xUQ1hYQ09NUElMRSA9ICQoTElCVE9PTCkgLS10YWc9Q1hYICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgXAorCS0tbW9kZT1jb21waWxlICQoQ1hYKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgXAorCSQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ1hYRkxBR1MpICQoQ1hYRkxBR1MpCitDWFhMRCA9ICQoQ1hYKQorQ1hYTElOSyA9ICQoTElCVE9PTCkgLS10YWc9Q1hYICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgXAorCS0tbW9kZT1saW5rICQoQ1hYTEQpICQoQU1fQ1hYRkxBR1MpICQoQ1hYRkxBR1MpICQoQU1fTERGTEFHUykgXAorCSQoTERGTEFHUykgLW8gJEAKK0NPTVBJTEUgPSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgXAorCSQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKK0xUQ09NUElMRSA9ICQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSBcCisJLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpIFwKKwkkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpCitDQ0xEID0gJChDQykKK0xJTksgPSAkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgXAorCS0tbW9kZT1saW5rICQoQ0NMRCkgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAkKEFNX0xERkxBR1MpIFwKKwkkKExERkxBR1MpIC1vICRACitTT1VSQ0VTID0gJChsaWJ1dGlsX19fYV9TT1VSQ0VTKQorRElTVF9TT1VSQ0VTID0gJChsaWJ1dGlsX19fYV9TT1VSQ0VTKQorUkVDVVJTSVZFX1RBUkdFVFMgPSBhbGwtcmVjdXJzaXZlIGNoZWNrLXJlY3Vyc2l2ZSBkdmktcmVjdXJzaXZlIFwKKwlodG1sLXJlY3Vyc2l2ZSBpbmZvLXJlY3Vyc2l2ZSBpbnN0YWxsLWRhdGEtcmVjdXJzaXZlIFwKKwlpbnN0YWxsLWR2aS1yZWN1cnNpdmUgaW5zdGFsbC1leGVjLXJlY3Vyc2l2ZSBcCisJaW5zdGFsbC1odG1sLXJlY3Vyc2l2ZSBpbnN0YWxsLWluZm8tcmVjdXJzaXZlIFwKKwlpbnN0YWxsLXBkZi1yZWN1cnNpdmUgaW5zdGFsbC1wcy1yZWN1cnNpdmUgaW5zdGFsbC1yZWN1cnNpdmUgXAorCWluc3RhbGxjaGVjay1yZWN1cnNpdmUgaW5zdGFsbGRpcnMtcmVjdXJzaXZlIHBkZi1yZWN1cnNpdmUgXAorCXBzLXJlY3Vyc2l2ZSB1bmluc3RhbGwtcmVjdXJzaXZlCitSRUNVUlNJVkVfQ0xFQU5fVEFSR0VUUyA9IG1vc3RseWNsZWFuLXJlY3Vyc2l2ZSBjbGVhbi1yZWN1cnNpdmUJXAorICBkaXN0Y2xlYW4tcmVjdXJzaXZlIG1haW50YWluZXItY2xlYW4tcmVjdXJzaXZlCitBTV9SRUNVUlNJVkVfVEFSR0VUUyA9ICQoUkVDVVJTSVZFX1RBUkdFVFM6LXJlY3Vyc2l2ZT0pIFwKKwkkKFJFQ1VSU0lWRV9DTEVBTl9UQVJHRVRTOi1yZWN1cnNpdmU9KSB0YWdzIFRBR1MgY3RhZ3MgQ1RBR1MgXAorCWRpc3RkaXIKK0VUQUdTID0gZXRhZ3MKK0NUQUdTID0gY3RhZ3MKK0RJU1RfU1VCRElSUyA9ICQoU1VCRElSUykKK0RJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCithbV9fcmVsYXRpdml6ZSA9IFwKKyAgZGlyMD1gcHdkYDsgXAorICBzZWRfZmlyc3Q9J3MsXlwoW14vXSpcKS8uKiQkLFwxLCc7IFwKKyAgc2VkX3Jlc3Q9J3MsXlteL10qLyosLCc7IFwKKyAgc2VkX2xhc3Q9J3MsXi4qL1woW14vXSpcKSQkLFwxLCc7IFwKKyAgc2VkX2J1dGxhc3Q9J3MsLypbXi9dKiQkLCwnOyBcCisgIHdoaWxlIHRlc3QgLW4gIiQkZGlyMSI7IGRvIFwKKyAgICBmaXJzdD1gZWNobyAiJCRkaXIxIiB8IHNlZCAtZSAiJCRzZWRfZmlyc3QiYDsgXAorICAgIGlmIHRlc3QgIiQkZmlyc3QiICE9ICIuIjsgdGhlbiBcCisgICAgICBpZiB0ZXN0ICIkJGZpcnN0IiA9ICIuLiI7IHRoZW4gXAorICAgICAgICBkaXIyPWBlY2hvICIkJGRpcjAiIHwgc2VkIC1lICIkJHNlZF9sYXN0ImAvIiQkZGlyMiI7IFwKKyAgICAgICAgZGlyMD1gZWNobyAiJCRkaXIwIiB8IHNlZCAtZSAiJCRzZWRfYnV0bGFzdCJgOyBcCisgICAgICBlbHNlIFwKKyAgICAgICAgZmlyc3QyPWBlY2hvICIkJGRpcjIiIHwgc2VkIC1lICIkJHNlZF9maXJzdCJgOyBcCisgICAgICAgIGlmIHRlc3QgIiQkZmlyc3QyIiA9ICIkJGZpcnN0IjsgdGhlbiBcCisgICAgICAgICAgZGlyMj1gZWNobyAiJCRkaXIyIiB8IHNlZCAtZSAiJCRzZWRfcmVzdCJgOyBcCisgICAgICAgIGVsc2UgXAorICAgICAgICAgIGRpcjI9Ii4uLyQkZGlyMiI7IFwKKyAgICAgICAgZmk7IFwKKyAgICAgICAgZGlyMD0iJCRkaXIwIi8iJCRmaXJzdCI7IFwKKyAgICAgIGZpOyBcCisgICAgZmk7IFwKKyAgICBkaXIxPWBlY2hvICIkJGRpcjEiIHwgc2VkIC1lICIkJHNlZF9yZXN0ImA7IFwKKyAgZG9uZTsgXAorICByZWxkaXI9IiQkZGlyMiIKK0FDTE9DQUwgPSBAQUNMT0NBTEAKK0FNVEFSID0gQEFNVEFSQAorQVIgPSBAQVJACitBVVRPQ09ORiA9IEBBVVRPQ09ORkAKK0FVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKK0FVVE9NQUtFID0gQEFVVE9NQUtFQAorQVdLID0gQEFXS0AKK0JGRF9MSUJTID0gQEJGRF9MSUJTQAorQ0FUX0VOVFJZX0VORCA9IEBDQVRfRU5UUllfRU5EQAorQ0FUX0VOVFJZX1NUQVJUID0gQENBVF9FTlRSWV9TVEFSVEAKK0NDID0gQENDQAorQ0NERVBNT0RFID0gQENDREVQTU9ERUAKK0NGTEFHUyA9IEBDRkxBR1NACitDUFAgPSBAQ1BQQAorQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACitDWFggPSBAQ1hYQAorQ1hYQ1BQID0gQENYWENQUEAKK0NYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKK0NYWEZMQUdTID0gQENYWEZMQUdTQAorQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKK0RBVEUgPSBAREFURUAKK0RFRlMgPSBAREVGU0AKK0RFUERJUiA9IEBERVBESVJACitET0NCT09LX1JPT1QgPSBARE9DQk9PS19ST09UQAorRFNZTVVUSUwgPSBARFNZTVVUSUxACitEVU1QQklOID0gQERVTVBCSU5ACitFQ0hPX0MgPSBARUNIT19DQAorRUNIT19OID0gQEVDSE9fTkAKK0VDSE9fVCA9IEBFQ0hPX1RACitFR1JFUCA9IEBFR1JFUEAKK0VYRUVYVCA9IEBFWEVFWFRACitFWFRSQV9DRkxBR1NfTU9EVUxFID0gQEVYVFJBX0NGTEFHU19NT0RVTEVACitGR1JFUCA9IEBGR1JFUEAKK0dSRVAgPSBAR1JFUEAKK0lOU1RBTEwgPSBASU5TVEFMTEAKK0lOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACitJTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAorSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACitJTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAorSkFWQV9IT01FRElSID0gQEpBVkFfSE9NRURJUkAKK0tJTkMgPSBAS0lOQ0AKK0tTUkMgPSBAS1NSQ0AKK0tWRVJTID0gQEtWRVJTQAorTEQgPSBATERACitMREZMQUdTID0gQExERkxBR1NACitMSUJFUlRZX0xJQlMgPSBATElCRVJUWV9MSUJTQAorTElCT0JKUyA9IEBMSUJPQkpTQAorTElCUyA9IEBMSUJTQAorTElCVE9PTCA9IEBMSUJUT09MQAorTElQTyA9IEBMSVBPQAorTE5fUyA9IEBMTl9TQAorTFRMSUJPQkpTID0gQExUTElCT0JKU0AKK01BS0VJTkZPID0gQE1BS0VJTkZPQAorTUtESVJfUCA9IEBNS0RJUl9QQAorTU9DID0gQE1PQ0AKK01PRElOU1RBTExESVIgPSBATU9ESU5TVEFMTERJUkAKK05NID0gQE5NQAorTk1FRElUID0gQE5NRURJVEAKK09CSkRVTVAgPSBAT0JKRFVNUEAKK09CSkVYVCA9IEBPQkpFWFRACitPUFJPRklMRV9ESVIgPSBAT1BST0ZJTEVfRElSQAorT1BST0ZJTEVfTU9EVUxFX0FSQ0ggPSBAT1BST0ZJTEVfTU9EVUxFX0FSQ0hACitPUF9DRkxBR1MgPSBAT1BfQ0ZMQUdTQAorT1BfQ1hYRkxBR1MgPSBAT1BfQ1hYRkxBR1NACitPUF9ET0NESVIgPSBAT1BfRE9DRElSQAorT1RPT0wgPSBAT1RPT0xACitPVE9PTDY0ID0gQE9UT09MNjRACitQQUNLQUdFID0gQFBBQ0tBR0VACitQQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKK1BBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACitQQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKK1BBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACitQQUNLQUdFX1VSTCA9IEBQQUNLQUdFX1VSTEAKK1BBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACitQQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKK1BLR19DT05GSUcgPSBAUEtHX0NPTkZJR0AKK1BLR19DT05GSUdfTElCRElSID0gQFBLR19DT05GSUdfTElCRElSQAorUEtHX0NPTkZJR19QQVRIID0gQFBLR19DT05GSUdfUEFUSEAKK1BPUFRfTElCUyA9IEBQT1BUX0xJQlNACitQVFJESUZGX1RfVFlQRSA9IEBQVFJESUZGX1RfVFlQRUAKK1FUX0NGTEFHUyA9IEBRVF9DRkxBR1NACitRVF9JTkNMVURFUyA9IEBRVF9JTkNMVURFU0AKK1FUX0xERkxBR1MgPSBAUVRfTERGTEFHU0AKK1FUX0xJQiA9IEBRVF9MSUJACitRVF9MSUJTID0gQFFUX0xJQlNACitRVF9WRVJTSU9OID0gQFFUX1ZFUlNJT05ACitSQU5MSUIgPSBAUkFOTElCQAorU0VEID0gQFNFREAKK1NFVF9NQUtFID0gQFNFVF9NQUtFQAorU0hFTEwgPSBAU0hFTExACitTSVpFX1RfVFlQRSA9IEBTSVpFX1RfVFlQRUAKK1NUUklQID0gQFNUUklQQAorVUlDID0gQFVJQ0AKK1VJQ2hlbHAgPSBAVUlDaGVscEAKK1ZFUlNJT04gPSBAVkVSU0lPTkAKK1hNS01GID0gQFhNS01GQAorWE1MX0NBVEFMT0cgPSBAWE1MX0NBVEFMT0dACitYU0xUUFJPQyA9IEBYU0xUUFJPQ0AKK1hTTFRQUk9DX0ZMQUdTID0gQFhTTFRQUk9DX0ZMQUdTQAorWF9DRkxBR1MgPSBAWF9DRkxBR1NACitYX0VYVFJBX0xJQlMgPSBAWF9FWFRSQV9MSUJTQAorWF9MSUJTID0gQFhfTElCU0AKK1hfUFJFX0xJQlMgPSBAWF9QUkVfTElCU0AKK2Fic19idWlsZGRpciA9IEBhYnNfYnVpbGRkaXJACithYnNfc3JjZGlyID0gQGFic19zcmNkaXJACithYnNfdG9wX2J1aWxkZGlyID0gQGFic190b3BfYnVpbGRkaXJACithYnNfdG9wX3NyY2RpciA9IEBhYnNfdG9wX3NyY2RpckAKK2FjX2N0X0NDID0gQGFjX2N0X0NDQAorYWNfY3RfQ1hYID0gQGFjX2N0X0NYWEAKK2FjX2N0X0RVTVBCSU4gPSBAYWNfY3RfRFVNUEJJTkAKK2FtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAorYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKK2FtX19xdW90ZSA9IEBhbV9fcXVvdGVACithbV9fdGFyID0gQGFtX190YXJACithbV9fdW50YXIgPSBAYW1fX3VudGFyQAorYmluZGlyID0gQGJpbmRpckAKK2J1aWxkID0gQGJ1aWxkQAorYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACitidWlsZF9jcHUgPSBAYnVpbGRfY3B1QAorYnVpbGRfb3MgPSBAYnVpbGRfb3NACitidWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAorYnVpbGRkaXIgPSBAYnVpbGRkaXJACitkYXRhZGlyID0gQGRhdGFkaXJACitkYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKK2RvY2RpciA9IEBkb2NkaXJACitkdmlkaXIgPSBAZHZpZGlyQAorZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACitob3N0ID0gQGhvc3RACitob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACitob3N0X2NwdSA9IEBob3N0X2NwdUAKK2hvc3Rfb3MgPSBAaG9zdF9vc0AKK2hvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAoraHRtbGRpciA9IEBodG1sZGlyQAoraW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAoraW5mb2RpciA9IEBpbmZvZGlyQAoraW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAorbGliZGlyID0gQGxpYmRpckAKK2xpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKK2xvY2FsZWRpciA9IEBsb2NhbGVkaXJACitsb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACitsdF9FQ0hPID0gQGx0X0VDSE9ACittYW5kaXIgPSBAbWFuZGlyQAorbWtkaXJfcCA9IEBta2Rpcl9wQAorb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAorcGRmZGlyID0gQHBkZmRpckAKK3ByZWZpeCA9IEBwcmVmaXhACitwcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACitwc2RpciA9IEBwc2RpckAKK3NiaW5kaXIgPSBAc2JpbmRpckAKK3NoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAorc3JjZGlyID0gQHNyY2RpckAKK3N5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKK3RhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACit0b3BfYnVpbGRfcHJlZml4ID0gQHRvcF9idWlsZF9wcmVmaXhACit0b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAordG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAordG9wZGlyID0gQHRvcGRpckAKK1NVQkRJUlMgPSAuIHRlc3RzCitBTV9DUFBGTEFHUyA9IFwKKwktSSAke3RvcF9zcmNkaXJ9L2xpYnV0aWwgXAorCS1JICR7dG9wX3NyY2Rpcn0vbGlib3AgXAorCS1JICR7dG9wX3NyY2Rpcn0vbGlicHAKKworQU1fQ1hYRkxBR1MgPSBAT1BfQ1hYRkxBR1NACitub2luc3RfTElCUkFSSUVTID0gbGlidXRpbCsrLmEKK2xpYnV0aWxfX19hX1NPVVJDRVMgPSBcCisJb3BfYmZkLmNwcCBcCisJb3BfYmZkLmggXAorCWJmZF9zdXBwb3J0LmNwcCBcCisJYmZkX3N1cHBvcnQuaCBcCisJc3RyaW5nX2ZpbHRlci5jcHAgXAorCXN0cmluZ19maWx0ZXIuaCBcCisJZ2xvYl9maWx0ZXIuY3BwIFwKKwlnbG9iX2ZpbHRlci5oIFwKKwlncm93YWJsZV92ZWN0b3IuaCBcCisJcGF0aF9maWx0ZXIuY3BwIFwKKwlwYXRoX2ZpbHRlci5oIFwKKwlmaWxlX21hbmlwLmNwcCBcCisJZmlsZV9tYW5pcC5oIFwKKwlzcGFyc2VfYXJyYXkuaCBcCisJc3RyZWFtX3V0aWwuY3BwIFwKKwlzdHJlYW1fdXRpbC5oIFwKKwlzdHJpbmdfbWFuaXAuY3BwIFwKKwlzdHJpbmdfbWFuaXAuaCBcCisJY3ZlcmIuY3BwIFwKKwljdmVyYi5oIFwKKwlnZW5lcmljX3NwZWMuaCBcCisJb3BfZXhjZXB0aW9uLmNwcCBcCisJb3BfZXhjZXB0aW9uLmggXAorCWNoaWxkX3JlYWRlci5jcHAgXAorCWNoaWxkX3JlYWRlci5oIFwKKwl1bmlxdWVfc3RvcmFnZS5oIFwKKwl1dGlsaXR5LmggXAorCWNhY2hlZF92YWx1ZS5oIFwKKwljb21tYV9saXN0LmggXAorCXhtbF9vdXRwdXQuaCBcCisJeG1sX291dHB1dC5jcHAgXAorCWJmZF9zcHVfc3VwcG9ydC5jcHAgXAorCW9wX3NwdV9iZmQuY3BwCisKK2FsbDogYWxsLXJlY3Vyc2l2ZQorCisuU1VGRklYRVM6CisuU1VGRklYRVM6IC5jcHAgLmxvIC5vIC5vYmoKKyQoc3JjZGlyKS9NYWtlZmlsZS5pbjogICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJQGZvciBkZXAgaW4gJD87IGRvIFwKKwkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAorCSAgICAqJCRkZXAqKSBcCisJICAgICAgKCBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggKSBcCisJICAgICAgICAmJiB7IGlmIHRlc3QgLWYgJEA7IHRoZW4gZXhpdCAwOyBlbHNlIGJyZWFrOyBmaTsgfTsgXAorCSAgICAgIGV4aXQgMTs7IFwKKwkgIGVzYWM7IFwKKwlkb25lOyBcCisJZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1mb3JlaWduIGxpYnV0aWwrKy9NYWtlZmlsZSc7IFwKKwkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCisJICAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gbGlidXRpbCsrL01ha2VmaWxlCisuUFJFQ0lPVVM6IE1ha2VmaWxlCitNYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCisJQGNhc2UgJyQ/JyBpbiBcCisJICAqY29uZmlnLnN0YXR1cyopIFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoOzsgXAorCSAgKikgXAorCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCisJZXNhYzsKKworJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2RpcikvY29uZmlndXJlICQoQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCisKKyQodG9wX3NyY2RpcikvY29uZmlndXJlOiAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCiskKEFDTE9DQUxfTTQpOiAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorJChhbV9fYWNsb2NhbF9tNF9kZXBzKToKKworY2xlYW4tbm9pbnN0TElCUkFSSUVTOgorCS10ZXN0IC16ICIkKG5vaW5zdF9MSUJSQVJJRVMpIiB8fCBybSAtZiAkKG5vaW5zdF9MSUJSQVJJRVMpCitsaWJ1dGlsKysuYTogJChsaWJ1dGlsX19fYV9PQkpFQ1RTKSAkKGxpYnV0aWxfX19hX0RFUEVOREVOQ0lFUykgCisJLXJtIC1mIGxpYnV0aWwrKy5hCisJJChsaWJ1dGlsX19fYV9BUikgbGlidXRpbCsrLmEgJChsaWJ1dGlsX19fYV9PQkpFQ1RTKSAkKGxpYnV0aWxfX19hX0xJQkFERCkKKwkkKFJBTkxJQikgbGlidXRpbCsrLmEKKworbW9zdGx5Y2xlYW4tY29tcGlsZToKKwktcm0gLWYgKi4kKE9CSkVYVCkKKworZGlzdGNsZWFuLWNvbXBpbGU6CisJLXJtIC1mICoudGFiLmMKKworQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2JmZF9zcHVfc3VwcG9ydC5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvYmZkX3N1cHBvcnQuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2NoaWxkX3JlYWRlci5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvY3ZlcmIuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2ZpbGVfbWFuaXAuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2dsb2JfZmlsdGVyLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9vcF9iZmQuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL29wX2V4Y2VwdGlvbi5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvb3Bfc3B1X2JmZC5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvcGF0aF9maWx0ZXIuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3N0cmVhbV91dGlsLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9zdHJpbmdfZmlsdGVyLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9zdHJpbmdfbWFuaXAuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3htbF9vdXRwdXQuUG9AYW1fX3F1b3RlQAorCisuY3BwLm86CitAYW1fX2Zhc3RkZXBDWFhfVFJVRUAJJChDWFhDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCAkPAorQGFtX19mYXN0ZGVwQ1hYX1RSVUVACSQoYW1fX212KSAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENYWF9GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENYWERFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAkkKENYWENPTVBJTEUpIC1jIC1vICRAICQ8CisKKy5jcHAub2JqOgorQGFtX19mYXN0ZGVwQ1hYX1RSVUVACSQoQ1hYQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYAorQGFtX19mYXN0ZGVwQ1hYX1RSVUVACSQoYW1fX212KSAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENYWF9GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENYWERFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAkkKENYWENPTVBJTEUpIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKKworLmNwcC5sbzoKK0BhbV9fZmFzdGRlcENYWF9UUlVFQAkkKExUQ1hYQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgJDwKK0BhbV9fZmFzdGRlcENYWF9UUlVFQAkkKGFtX19tdikgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENYWF9GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENYWERFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAkkKExUQ1hYQ09NUElMRSkgLWMgLW8gJEAgJDwKKworbW9zdGx5Y2xlYW4tbGlidG9vbDoKKwktcm0gLWYgKi5sbworCitjbGVhbi1saWJ0b29sOgorCS1ybSAtcmYgLmxpYnMgX2xpYnMKKworIyBUaGlzIGRpcmVjdG9yeSdzIHN1YmRpcmVjdG9yaWVzIGFyZSBtb3N0bHkgaW5kZXBlbmRlbnQ7IHlvdSBjYW4gY2QKKyMgaW50byB0aGVtIGFuZCBydW4gYG1ha2UnIHdpdGhvdXQgZ29pbmcgdGhyb3VnaCB0aGlzIE1ha2VmaWxlLgorIyBUbyBjaGFuZ2UgdGhlIHZhbHVlcyBvZiBgbWFrZScgdmFyaWFibGVzOiBpbnN0ZWFkIG9mIGVkaXRpbmcgTWFrZWZpbGVzLAorIyAoMSkgaWYgdGhlIHZhcmlhYmxlIGlzIHNldCBpbiBgY29uZmlnLnN0YXR1cycsIGVkaXQgYGNvbmZpZy5zdGF0dXMnCisjICAgICAod2hpY2ggd2lsbCBjYXVzZSB0aGUgTWFrZWZpbGVzIHRvIGJlIHJlZ2VuZXJhdGVkIHdoZW4geW91IHJ1biBgbWFrZScpOworIyAoMikgb3RoZXJ3aXNlLCBwYXNzIHRoZSBkZXNpcmVkIHZhbHVlcyBvbiB0aGUgYG1ha2UnIGNvbW1hbmQgbGluZS4KKyQoUkVDVVJTSVZFX1RBUkdFVFMpOgorCUBmYWlsPSBmYWlsY29tPSdleGl0IDEnOyBcCisJZm9yIGYgaW4geCAkJE1BS0VGTEFHUzsgZG8gXAorCSAgY2FzZSAkJGYgaW4gXAorCSAgICAqPSogfCAtLVsha10qKTs7IFwKKwkgICAgKmsqKSBmYWlsY29tPSdmYWlsPXllcyc7OyBcCisJICBlc2FjOyBcCisJZG9uZTsgXAorCWRvdF9zZWVuPW5vOyBcCisJdGFyZ2V0PWBlY2hvICRAIHwgc2VkIHMvLXJlY3Vyc2l2ZS8vYDsgXAorCWxpc3Q9JyQoU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAorCSAgZWNobyAiTWFraW5nICQkdGFyZ2V0IGluICQkc3ViZGlyIjsgXAorCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gIi4iOyB0aGVuIFwKKwkgICAgZG90X3NlZW49eWVzOyBcCisJICAgIGxvY2FsX3RhcmdldD0iJCR0YXJnZXQtYW0iOyBcCisJICBlbHNlIFwKKwkgICAgbG9jYWxfdGFyZ2V0PSIkJHRhcmdldCI7IFwKKwkgIGZpOyBcCisJICAoJChhbV9fY2QpICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICQkbG9jYWxfdGFyZ2V0KSBcCisJICB8fCBldmFsICQkZmFpbGNvbTsgXAorCWRvbmU7IFwKKwlpZiB0ZXN0ICIkJGRvdF9zZWVuIiA9ICJubyI7IHRoZW4gXAorCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgIiQkdGFyZ2V0LWFtIiB8fCBleGl0IDE7IFwKKwlmaTsgdGVzdCAteiAiJCRmYWlsIgorCiskKFJFQ1VSU0lWRV9DTEVBTl9UQVJHRVRTKToKKwlAZmFpbD0gZmFpbGNvbT0nZXhpdCAxJzsgXAorCWZvciBmIGluIHggJCRNQUtFRkxBR1M7IGRvIFwKKwkgIGNhc2UgJCRmIGluIFwKKwkgICAgKj0qIHwgLS1bIWtdKik7OyBcCisJICAgICprKikgZmFpbGNvbT0nZmFpbD15ZXMnOzsgXAorCSAgZXNhYzsgXAorCWRvbmU7IFwKKwlkb3Rfc2Vlbj1ubzsgXAorCWNhc2UgIiRAIiBpbiBcCisJICBkaXN0Y2xlYW4tKiB8IG1haW50YWluZXItY2xlYW4tKikgbGlzdD0nJChESVNUX1NVQkRJUlMpJyA7OyBcCisJICAqKSBsaXN0PSckKFNVQkRJUlMpJyA7OyBcCisJZXNhYzsgXAorCXJldj0nJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKwkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9ICIuIjsgdGhlbiA6OyBlbHNlIFwKKwkgICAgcmV2PSIkJHN1YmRpciAkJHJldiI7IFwKKwkgIGZpOyBcCisJZG9uZTsgXAorCXJldj0iJCRyZXYgLiI7IFwKKwl0YXJnZXQ9YGVjaG8gJEAgfCBzZWQgcy8tcmVjdXJzaXZlLy9gOyBcCisJZm9yIHN1YmRpciBpbiAkJHJldjsgZG8gXAorCSAgZWNobyAiTWFraW5nICQkdGFyZ2V0IGluICQkc3ViZGlyIjsgXAorCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gIi4iOyB0aGVuIFwKKwkgICAgbG9jYWxfdGFyZ2V0PSIkJHRhcmdldC1hbSI7IFwKKwkgIGVsc2UgXAorCSAgICBsb2NhbF90YXJnZXQ9IiQkdGFyZ2V0IjsgXAorCSAgZmk7IFwKKwkgICgkKGFtX19jZCkgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgJCRsb2NhbF90YXJnZXQpIFwKKwkgIHx8IGV2YWwgJCRmYWlsY29tOyBcCisJZG9uZSAmJiB0ZXN0IC16ICIkJGZhaWwiCit0YWdzLXJlY3Vyc2l2ZToKKwlsaXN0PSckKFNVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKwkgIHRlc3QgIiQkc3ViZGlyIiA9IC4gfHwgKCQoYW1fX2NkKSAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSB0YWdzKTsgXAorCWRvbmUKK2N0YWdzLXJlY3Vyc2l2ZToKKwlsaXN0PSckKFNVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKwkgIHRlc3QgIiQkc3ViZGlyIiA9IC4gfHwgKCQoYW1fX2NkKSAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBjdGFncyk7IFwKKwlkb25lCisKK0lEOiAkKEhFQURFUlMpICQoU09VUkNFUykgJChMSVNQKSAkKFRBR1NfRklMRVMpCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCisJICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCisJbWtpZCAtZklEICQkdW5pcXVlCit0YWdzOiBUQUdTCisKK1RBR1M6IHRhZ3MtcmVjdXJzaXZlICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAorCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKwlzZXQgeDsgXAorCWhlcmU9YHB3ZGA7IFwKKwlpZiAoJChFVEFHUykgLS1ldGFncy1pbmNsdWRlIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIFwKKwkgIGluY2x1ZGVfb3B0aW9uPS0tZXRhZ3MtaW5jbHVkZTsgXAorCSAgZW1wdHlfZml4PS47IFwKKwllbHNlIFwKKwkgIGluY2x1ZGVfb3B0aW9uPS0taW5jbHVkZTsgXAorCSAgZW1wdHlfZml4PTsgXAorCWZpOyBcCisJbGlzdD0nJChTVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAuOyB0aGVuIDo7IGVsc2UgXAorCSAgICB0ZXN0ICEgLWYgJCRzdWJkaXIvVEFHUyB8fCBcCisJICAgICAgc2V0ICIkJEAiICIkJGluY2x1ZGVfb3B0aW9uPSQkaGVyZS8kJHN1YmRpci9UQUdTIjsgXAorCSAgZmk7IFwKKwlkb25lOyBcCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorCXNoaWZ0OyBcCisJaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkKiQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKKwkgIHRlc3QgLW4gIiQkdW5pcXVlIiB8fCB1bmlxdWU9JCRlbXB0eV9maXg7IFwKKwkgIGlmIHRlc3QgJCQjIC1ndCAwOyB0aGVuIFwKKwkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAorCSAgICAgICIkJEAiICQkdW5pcXVlOyBcCisJICBlbHNlIFwKKwkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAorCSAgICAgICQkdW5pcXVlOyBcCisJICBmaTsgXAorCWZpCitjdGFnczogQ1RBR1MKK0NUQUdTOiBjdGFncy1yZWN1cnNpdmUgJChIRUFERVJTKSAkKFNPVVJDRVMpICAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCisJCSQoVEFHU19GSUxFUykgJChMSVNQKQorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKwkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKwl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR1bmlxdWUiIFwKKwkgIHx8ICQoQ1RBR1MpICQoQ1RBR1NGTEFHUykgJChBTV9DVEFHU0ZMQUdTKSAkKENUQUdTX0FSR1MpIFwKKwkgICAgICQkdW5pcXVlCisKK0dUQUdTOgorCWhlcmU9YCQoYW1fX2NkKSAkKHRvcF9idWlsZGRpcikgJiYgcHdkYCBcCisJICAmJiAkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSBcCisJICAmJiBndGFncyAtaSAkKEdUQUdTX0FSR1MpICIkJGhlcmUiCisKK2Rpc3RjbGVhbi10YWdzOgorCS1ybSAtZiBUQUdTIElEIEdUQUdTIEdSVEFHUyBHU1lNUyBHUEFUSCB0YWdzCisKK2Rpc3RkaXI6ICQoRElTVEZJTEVTKQorCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisJbGlzdD0nJChESVNURklMRVMpJzsgXAorCSAgZGlzdF9maWxlcz1gZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8IFwKKwkgIHNlZCAtZSAic3xeJCRzcmNkaXJzdHJpcC98fDt0IiBcCisJICAgICAgLWUgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98O3QiYDsgXAorCWNhc2UgJCRkaXN0X2ZpbGVzIGluIFwKKwkgICovKikgJChNS0RJUl9QKSBgZWNobyAiJCRkaXN0X2ZpbGVzIiB8IFwKKwkJCSAgIHNlZCAnL1wvLyFkO3N8XnwkKGRpc3RkaXIpL3w7cywvW14vXSokJCwsJyB8IFwKKwkJCSAgIHNvcnQgLXVgIDs7IFwKKwllc2FjOyBcCisJZm9yIGZpbGUgaW4gJCRkaXN0X2ZpbGVzOyBkbyBcCisJICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCisJICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAorCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAorCSAgICBpZiB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkZmlsZSI7IHRoZW4gXAorCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAorCSAgICBmaTsgXAorCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKKwkgICAgICBjcCAtZnBSICQoc3JjZGlyKS8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCisJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisJICAgIGZpOyBcCisJICAgIGNwIC1mcFIgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKKwkgIGVsc2UgXAorCSAgICB0ZXN0IC1mICIkKGRpc3RkaXIpLyQkZmlsZSIgXAorCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICIkKGRpc3RkaXIpLyQkZmlsZSIgXAorCSAgICB8fCBleGl0IDE7IFwKKwkgIGZpOyBcCisJZG9uZQorCUBsaXN0PSckKERJU1RfU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAorCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gLjsgdGhlbiA6OyBlbHNlIFwKKwkgICAgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJHN1YmRpciIgXAorCSAgICB8fCAkKE1LRElSX1ApICIkKGRpc3RkaXIpLyQkc3ViZGlyIiBcCisJICAgIHx8IGV4aXQgMTsgXAorCSAgZmk7IFwKKwlkb25lCisJQGxpc3Q9JyQoRElTVF9TVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAuOyB0aGVuIDo7IGVsc2UgXAorCSAgICBkaXIxPSQkc3ViZGlyOyBkaXIyPSIkKGRpc3RkaXIpLyQkc3ViZGlyIjsgXAorCSAgICAkKGFtX19yZWxhdGl2aXplKTsgXAorCSAgICBuZXdfZGlzdGRpcj0kJHJlbGRpcjsgXAorCSAgICBkaXIxPSQkc3ViZGlyOyBkaXIyPSIkKHRvcF9kaXN0ZGlyKSI7IFwKKwkgICAgJChhbV9fcmVsYXRpdml6ZSk7IFwKKwkgICAgbmV3X3RvcF9kaXN0ZGlyPSQkcmVsZGlyOyBcCisJICAgIGVjaG8gIiAoY2QgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgdG9wX2Rpc3RkaXI9IiQkbmV3X3RvcF9kaXN0ZGlyIiBkaXN0ZGlyPSIkJG5ld19kaXN0ZGlyIiBcXCI7IFwKKwkgICAgZWNobyAiICAgICBhbV9fcmVtb3ZlX2Rpc3RkaXI9OiBhbV9fc2tpcF9sZW5ndGhfY2hlY2s9OiBhbV9fc2tpcF9tb2RlX2ZpeD06IGRpc3RkaXIpIjsgXAorCSAgICAoJChhbV9fY2QpICQkc3ViZGlyICYmIFwKKwkgICAgICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBcCisJICAgICAgICB0b3BfZGlzdGRpcj0iJCRuZXdfdG9wX2Rpc3RkaXIiIFwKKwkgICAgICAgIGRpc3RkaXI9IiQkbmV3X2Rpc3RkaXIiIFwKKwkJYW1fX3JlbW92ZV9kaXN0ZGlyPTogXAorCQlhbV9fc2tpcF9sZW5ndGhfY2hlY2s9OiBcCisJCWFtX19za2lwX21vZGVfZml4PTogXAorCSAgICAgICAgZGlzdGRpcikgXAorCSAgICAgIHx8IGV4aXQgMTsgXAorCSAgZmk7IFwKKwlkb25lCitjaGVjay1hbTogYWxsLWFtCitjaGVjazogY2hlY2stcmVjdXJzaXZlCithbGwtYW06IE1ha2VmaWxlICQoTElCUkFSSUVTKQoraW5zdGFsbGRpcnM6IGluc3RhbGxkaXJzLXJlY3Vyc2l2ZQoraW5zdGFsbGRpcnMtYW06CitpbnN0YWxsOiBpbnN0YWxsLXJlY3Vyc2l2ZQoraW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtcmVjdXJzaXZlCitpbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1yZWN1cnNpdmUKK3VuaW5zdGFsbDogdW5pbnN0YWxsLXJlY3Vyc2l2ZQorCitpbnN0YWxsLWFtOiBhbGwtYW0KKwlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQorCitpbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1yZWN1cnNpdmUKK2luc3RhbGwtc3RyaXA6CisJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKKwkgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorCSAgYHRlc3QgLXogJyQoU1RSSVApJyB8fCBcCisJICAgIGVjaG8gIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciYCBpbnN0YWxsCittb3N0bHljbGVhbi1nZW5lcmljOgorCitjbGVhbi1nZW5lcmljOgorCitkaXN0Y2xlYW4tZ2VuZXJpYzoKKwktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKKwktdGVzdCAuID0gIiQoc3JjZGlyKSIgfHwgdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykKKworbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgorCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKKwlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCitjbGVhbjogY2xlYW4tcmVjdXJzaXZlCisKK2NsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgY2xlYW4tbm9pbnN0TElCUkFSSUVTIFwKKwltb3N0bHljbGVhbi1hbQorCitkaXN0Y2xlYW46IGRpc3RjbGVhbi1yZWN1cnNpdmUKKwktcm0gLXJmIC4vJChERVBESVIpCisJLXJtIC1mIE1ha2VmaWxlCitkaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKKwlkaXN0Y2xlYW4tdGFncworCitkdmk6IGR2aS1yZWN1cnNpdmUKKworZHZpLWFtOgorCitodG1sOiBodG1sLXJlY3Vyc2l2ZQorCitodG1sLWFtOgorCitpbmZvOiBpbmZvLXJlY3Vyc2l2ZQorCitpbmZvLWFtOgorCitpbnN0YWxsLWRhdGEtYW06CisKK2luc3RhbGwtZHZpOiBpbnN0YWxsLWR2aS1yZWN1cnNpdmUKKworaW5zdGFsbC1kdmktYW06CisKK2luc3RhbGwtZXhlYy1hbToKKworaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtcmVjdXJzaXZlCisKK2luc3RhbGwtaHRtbC1hbToKKworaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tcmVjdXJzaXZlCisKK2luc3RhbGwtaW5mby1hbToKKworaW5zdGFsbC1tYW46CisKK2luc3RhbGwtcGRmOiBpbnN0YWxsLXBkZi1yZWN1cnNpdmUKKworaW5zdGFsbC1wZGYtYW06CisKK2luc3RhbGwtcHM6IGluc3RhbGwtcHMtcmVjdXJzaXZlCisKK2luc3RhbGwtcHMtYW06CisKK2luc3RhbGxjaGVjay1hbToKKworbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1yZWN1cnNpdmUKKwktcm0gLXJmIC4vJChERVBESVIpCisJLXJtIC1mIE1ha2VmaWxlCittYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCisKK21vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1yZWN1cnNpdmUKKworbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCisJbW9zdGx5Y2xlYW4tbGlidG9vbAorCitwZGY6IHBkZi1yZWN1cnNpdmUKKworcGRmLWFtOgorCitwczogcHMtcmVjdXJzaXZlCisKK3BzLWFtOgorCit1bmluc3RhbGwtYW06CisKKy5NQUtFOiAkKFJFQ1VSU0lWRV9DTEVBTl9UQVJHRVRTKSAkKFJFQ1VSU0lWRV9UQVJHRVRTKSBjdGFncy1yZWN1cnNpdmUgXAorCWluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcCB0YWdzLXJlY3Vyc2l2ZQorCisuUEhPTlk6ICQoUkVDVVJTSVZFX0NMRUFOX1RBUkdFVFMpICQoUkVDVVJTSVZFX1RBUkdFVFMpIENUQUdTIEdUQUdTIFwKKwlhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBcCisJY2xlYW4tbm9pbnN0TElCUkFSSUVTIGN0YWdzIGN0YWdzLXJlY3Vyc2l2ZSBkaXN0Y2xlYW4gXAorCWRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIGRpc3RjbGVhbi1saWJ0b29sIFwKKwlkaXN0Y2xlYW4tdGFncyBkaXN0ZGlyIGR2aSBkdmktYW0gaHRtbCBodG1sLWFtIGluZm8gaW5mby1hbSBcCisJaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgXAorCWluc3RhbGwtZHZpLWFtIGluc3RhbGwtZXhlYyBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1odG1sIFwKKwlpbnN0YWxsLWh0bWwtYW0gaW5zdGFsbC1pbmZvIGluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBcCisJaW5zdGFsbC1wZGYgaW5zdGFsbC1wZGYtYW0gaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIFwKKwlpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgXAorCWluc3RhbGxkaXJzLWFtIG1haW50YWluZXItY2xlYW4gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIFwKKwltb3N0bHljbGVhbiBtb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgXAorCW1vc3RseWNsZWFuLWxpYnRvb2wgcGRmIHBkZi1hbSBwcyBwcy1hbSB0YWdzIHRhZ3MtcmVjdXJzaXZlIFwKKwl1bmluc3RhbGwgdW5pbnN0YWxsLWFtCisKKworIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KKyMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgorLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvbGlidXRpbCsrL2JmZF9zcHVfc3VwcG9ydC5jcHAgYi9vcHJvZmlsZS0wLjkuNy9saWJ1dGlsKysvYmZkX3NwdV9zdXBwb3J0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZGQ0OTdkCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvbGlidXRpbCsrL2JmZF9zcHVfc3VwcG9ydC5jcHAKQEAgLTAsMCArMSwxMTYgQEAKKy8qKgorICogQGZpbGUgbGlidXRpbCsrL2JmZF9zcHVfc3VwcG9ydC5jcHAKKyAqIFNwZWNpYWwgQkZEIGZ1bmN0aW9ucyBmb3IgcHJvY2Vzc2luZyBhIENlbGwgQkUgU1BVIHByb2ZpbGUKKyAqCisgKiBAcmVtYXJrIENvcHlyaWdodCAyMDA3IE9Qcm9maWxlIGF1dGhvcnMKKyAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCisgKgorICogQGF1dGhvciBNYXluYXJkIEpvaG5zb24KKyAqIChDKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDcKKyAqLworCisjaW5jbHVkZSAiYmZkX3N1cHBvcnQuaCIKKyNpbmNsdWRlICJvcF9iZmQuaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJjdmVyYi5oIgorCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxpb3N0cmVhbT4KKyNpbmNsdWRlIDxmc3RyZWFtPgorI2luY2x1ZGUgPHNzdHJlYW0+CisjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPGNzdHJpbmc+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKK3N0cnVjdCBzcHVfZWxmIHsKKwlGSUxFICogc3RyZWFtOworCW9mZl90IHNwdV9vZmZzZXQ7Cit9OworCit1c2luZyBuYW1lc3BhY2Ugc3RkOworCitleHRlcm4gdmVyYm9zZSB2YmZkOworCisjaWZkZWYgSEFWRV9CRkRfT1BFTlJfSU9WRUNfV0lUSF83UEFSTVMKKworbmFtZXNwYWNlIHsKKworc3RhdGljIHZvaWQgKgorc3B1X2JmZF9pb3ZlY19vcGVuKGJmZCAqIG5iZmQsIHZvaWQgKiBvcGVuX2Nsb3N1cmUpCit7CisJLyogQ2hlY2tpbmcgbmJmZCBpc24ndCByZWFsbHkgbmVjZXNzYXJ5LCBleGNlcHQgdG8gc2lsZW5jZQorCSAqIGNvbXBpbGUgd2FybmluZy4gIEluIGZhY3QsIG5iZmQgd2lsbCBhbHdheXMgYmUgbm9uLU5VTEwuCisJICovCisJaWYgKG5iZmQpCisJCXJldHVybiBvcGVuX2Nsb3N1cmU7CisJZWxzZQorCQlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGludAorc3B1X2JmZF9pb3ZlY19jbG9zZShiZmQgKiBuYmZkLCB2b2lkICogc3RyZWFtKQoreworCXNwdV9lbGYgKiBteV9zdHJlYW0gPSAoc3B1X2VsZiAqKSBzdHJlYW07CisKKwlmY2xvc2UobXlfc3RyZWFtLT5zdHJlYW0pOworCWZyZWUobXlfc3RyZWFtKTsKKwkvKiBDaGVja2luZyBuYmZkIGlzbid0IHJlYWxseSBuZWNlc3NhcnksIGV4Y2VwdCB0byBzaWxlbmNlCisJICogY29tcGlsZSB3YXJuaW5nLiAgSW4gZmFjdCwgbmJmZCB3aWxsIGFsd2F5cyBiZSBub24tTlVMTC4KKwkgKi8KKwlpZiAobmJmZCkKKwkJcmV0dXJuIDE7CisJZWxzZQorCQlyZXR1cm4gMDsKK30KKworc3RhdGljIGZpbGVfcHRyCitzcHVfYmZkX2lvdmVjX3ByZWFkKGJmZCAqIGFiZmQsIHZvaWQgKiBzdHJlYW0sIHZvaWQgKiBidWYsCisJCSAgICBmaWxlX3B0ciBuYnl0ZXMsIGZpbGVfcHRyIG9mZnNldCkKK3sKKwlzcHVfZWxmICogbXlfc3RyZWFtID0gKHNwdV9lbGYgKikgc3RyZWFtOworCWZzZWVrKG15X3N0cmVhbS0+c3RyZWFtLCBteV9zdHJlYW0tPnNwdV9vZmZzZXQgKyBvZmZzZXQsCisJICAgICAgU0VFS19TRVQpOworCW5ieXRlcyA9IGZyZWFkKGJ1Ziwgc2l6ZW9mKGNoYXIpLCBuYnl0ZXMsIG15X3N0cmVhbS0+c3RyZWFtKTsKKwkvKiBDaGVja2luZyBhYmZkIGlzbid0IHJlYWxseSBuZWNlc3NhcnksIGV4Y2VwdCB0byBzaWxlbmNlCisJICogY29tcGlsZSB3YXJuaW5nLiAgSW4gZmFjdCwgYWJmZCB3aWxsIGFsd2F5cyBiZSBub24tTlVMTC4KKwkgKi8KKwlpZiAoYWJmZCkKKwkJcmV0dXJuIG5ieXRlczsKKwllbHNlCisJCXJldHVybiAwOworfQorfSAvLyBuYW1lc3BhY2UgYW5vbgorI2VuZGlmCisKK2JmZCAqCitzcHVfb3Blbl9iZmQoc3RyaW5nIGNvbnN0IG5hbWUsIGludCBmZCwgdWludDY0X3Qgb2Zmc2V0X3RvX3NwdV9lbGYpCit7CisKKwliZmQgKiBuYmZkID0gTlVMTDsKKwlzcHVfZWxmICogc3B1X2VsZl9zdHJlYW0gPSAoc3B1X2VsZiAqKW1hbGxvYyhzaXplb2Yoc3B1X2VsZikpOworCisJRklMRSAqIGZwID0gZmRvcGVuKGZkLCAiciIpOworCXNwdV9lbGZfc3RyZWFtLT5zdHJlYW0gPSBmcDsKKwlzcHVfZWxmX3N0cmVhbS0+c3B1X29mZnNldCA9IG9mZnNldF90b19zcHVfZWxmOworI2lmZGVmIEhBVkVfQkZEX09QRU5SX0lPVkVDX1dJVEhfN1BBUk1TCisJbmJmZCA9IGJmZF9vcGVucl9pb3ZlYyhzdHJkdXAobmFtZS5jX3N0cigpKSwgImVsZjMyLXNwdSIsCisJCQkgICAgICAgc3B1X2JmZF9pb3ZlY19vcGVuLCBzcHVfZWxmX3N0cmVhbSwKKwkJCSAgICAgICBzcHVfYmZkX2lvdmVjX3ByZWFkLCBzcHVfYmZkX2lvdmVjX2Nsb3NlLCBOVUxMKTsKKyNlbHNlCisJb3N0cmluZ3N0cmVhbSBvczsKKwlvcyA8PCAiQXR0ZW1wdCB0byBwcm9jZXNzIGEgQ2VsbCBCcm9hZGJhbmQgRW5naW5lIFNQVSBwcm9maWxlIHdpdGhvdXQiCisJICAgPDwgInByb3BlciBCRkQgc3VwcG9ydC5cbiIKKwkgICA8PCAiUmVidWlsZCB0aGUgb3ByZXBvcnQgdXRpbGl0eSB3aXRoIHRoZSBjb3JyZWN0IEJGRCBsaWJyYXJ5LlxuIgorCSAgIDw8ICJTZWUgdGhlIE9Qcm9maWxlIHVzZXIgbWFudWFsIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuIjsKKwl0aHJvdyBvcF9ydW50aW1lX2Vycm9yKG9zLnN0cigpKTsKKyNlbmRpZgorCWlmICghbmJmZCkgeworCQljdmVyYiA8PCB2YmZkIDw8ICJzcHVfb3Blbl9iZmQgZmFpbGVkIGZvciAiIDw8IG5hbWUgPDwgZW5kbDsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJYmZkX2NoZWNrX2Zvcm1hdChuYmZkLCBiZmRfb2JqZWN0KTsKKworCXJldHVybiBuYmZkOworfQpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvbGlidXRpbCsrL2JmZF9zdXBwb3J0LmNwcCBiL29wcm9maWxlLTAuOS43L2xpYnV0aWwrKy9iZmRfc3VwcG9ydC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjlkNjkzOAotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2xpYnV0aWwrKy9iZmRfc3VwcG9ydC5jcHAKQEAgLTAsMCArMSw2NzUgQEAKKy8qKgorICogQGZpbGUgYmZkX3N1cHBvcnQuY3BwCisgKiBCRkQgbXVjayB3ZSBoYXZlIHRvIGRlYWwgd2l0aC4KKyAqCisgKiBAcmVtYXJrIENvcHlyaWdodCAyMDA1IE9Qcm9maWxlIGF1dGhvcnMKKyAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCisgKgorICogQGF1dGhvciBKb2huIExldm9uCisgKi8KKworI2luY2x1ZGUgImJmZF9zdXBwb3J0LmgiCisKKyNpbmNsdWRlICJvcF9iZmQuaCIKKyNpbmNsdWRlICJvcF9maWxlaW8uaCIKKyNpbmNsdWRlICJvcF9jb25maWcuaCIKKyNpbmNsdWRlICJzdHJpbmdfbWFuaXAuaCIKKyNpbmNsdWRlICJmaWxlX21hbmlwLmgiCisjaW5jbHVkZSAiY3ZlcmIuaCIKKyNpbmNsdWRlICJsb2NhdGVfaW1hZ2VzLmgiCisKKyNpbmNsdWRlIDxjc3RkbGliPgorI2luY2x1ZGUgPGNzdHJpbmc+CisjaW5jbHVkZSA8Y2Fzc2VydD4KKyNpbmNsdWRlIDxpb3N0cmVhbT4KKyNpbmNsdWRlIDxmc3RyZWFtPgorI2luY2x1ZGUgPHNzdHJlYW0+CisjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPGNzdHJpbmc+CisjaW5jbHVkZSA8Y3N0ZGxpYj4KKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKworZXh0ZXJuIHZlcmJvc2UgdmJmZDsKKworbmFtZXNwYWNlIHsKKworCit2b2lkIGNoZWNrX2Zvcm1hdChzdHJpbmcgY29uc3QgJiBmaWxlLCBiZmQgKiogaWJmZCkKK3sKKwlpZiAoIWJmZF9jaGVja19mb3JtYXRfbWF0Y2hlcygqaWJmZCwgYmZkX29iamVjdCwgTlVMTCkpIHsKKwkJY3ZlcmIgPDwgdmJmZCA8PCAiQkZEIGZvcm1hdCBmYWlsdXJlIGZvciAiIDw8IGZpbGUgPDwgZW5kbDsKKwkJYmZkX2Nsb3NlKCppYmZkKTsKKwkJKmliZmQgPSBOVUxMOworCX0KK30KKworCitib29sIHNlcGFyYXRlX2RlYnVnX2ZpbGVfZXhpc3RzKHN0cmluZyAmIG5hbWUsIHVuc2lnbmVkIGxvbmcgY29uc3QgY3JjLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFfaW1hZ2VzIGNvbnN0ICYgZXh0cmEpCit7CisJdW5zaWduZWQgbG9uZyBmaWxlX2NyYyA9IDA7CisJLy8gVGhlIHNpemUgb2YgMiAqIDEwMjQgZWxlbWVudHMgZm9yIHRoZSBidWZmZXIgaXMgYXJiaXRyYXJ5LgorCWNoYXIgYnVmZmVyWzIgKiAxMDI0XTsKKworCWltYWdlX2Vycm9yIGltZ19vazsKKwlzdHJpbmcgY29uc3QgaW1hZ2VfcGF0aCA9IGV4dHJhLmZpbmRfaW1hZ2VfcGF0aChuYW1lLCBpbWdfb2ssIHRydWUpOworCisJaWYgKGltZ19vayAhPSBpbWFnZV9vaykKKwkJcmV0dXJuIGZhbHNlOworCisJbmFtZSA9IGltYWdlX3BhdGg7CisKKwlpZnN0cmVhbSBmaWxlKGltYWdlX3BhdGguY19zdHIoKSk7CisJaWYgKCFmaWxlKQorCQlyZXR1cm4gZmFsc2U7CisKKwljdmVyYiA8PCB2YmZkIDw8ICJmb3VuZCAiIDw8IG5hbWU7CisJd2hpbGUgKGZpbGUpIHsKKwkJZmlsZS5yZWFkKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpOworCQlmaWxlX2NyYyA9IGNhbGNfY3JjMzIoZmlsZV9jcmMsIAorCQkJCSAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY2hhciAqPigmYnVmZmVyWzBdKSwKKwkJCQkgICAgICBmaWxlLmdjb3VudCgpKTsKKwl9CisJY3ZlcmIgPDwgdmJmZCA8PCAiIHdpdGggY3JjMzIgPSAiIDw8IGhleCA8PCBmaWxlX2NyYyA8PCBlbmRsOworCXJldHVybiBjcmMgPT0gZmlsZV9jcmM7Cit9CisKKworYm9vbCBnZXRfZGVidWdfbGlua19pbmZvKGJmZCAqIGliZmQsIHN0cmluZyAmIGZpbGVuYW1lLCB1bnNpZ25lZCBsb25nICYgY3JjMzIpCit7CisJYXNlY3Rpb24gKiBzZWN0OworCisJY3ZlcmIgPDwgdmJmZCA8PCAiZmV0Y2hpbmcgLmdudV9kZWJ1Z2xpbmsgc2VjdGlvbiIgPDwgZW5kbDsKKwlzZWN0ID0gYmZkX2dldF9zZWN0aW9uX2J5X25hbWUoaWJmZCwgIi5nbnVfZGVidWdsaW5rIik7CisJCisJaWYgKHNlY3QgPT0gTlVMTCkKKwkJcmV0dXJuIGZhbHNlOworCQorCWJmZF9zaXplX3R5cGUgZGVidWdsaW5rX3NpemUgPSBiZmRfc2VjdGlvbl9zaXplKGliZmQsIHNlY3QpOyAgCisJY2hhciBjb250ZW50c1tkZWJ1Z2xpbmtfc2l6ZV07CisJY3ZlcmIgPDwgdmJmZAorCSAgICAgIDw8ICIuZ251X2RlYnVnbGluayBzZWN0aW9uIGhhcyBzaXplICIgPDwgZGVidWdsaW5rX3NpemUgPDwgZW5kbDsKKwkKKwlpZiAoIWJmZF9nZXRfc2VjdGlvbl9jb250ZW50cyhpYmZkLCBzZWN0LCAKKwkJCQkgcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBjaGFyICo+KGNvbnRlbnRzKSwgCisJCQkJIHN0YXRpY19jYXN0PGZpbGVfcHRyPigwKSwgZGVidWdsaW5rX3NpemUpKSB7CisJCWJmZF9wZXJyb3IoImJmZF9nZXRfc2VjdGlvbl9jb250ZW50czpnZXRfZGVidWc6Iik7CisJCWV4aXQoMik7CisJfQorCQorCS8qIENSQyB2YWx1ZSBpcyBzdG9yZWQgYWZ0ZXIgdGhlIGZpbGVuYW1lLCBhbGlnbmVkIHVwIHRvIDQgYnl0ZXMuICovCisJc2l6ZV90IGZpbGVuYW1lX2xlbiA9IHN0cmxlbihjb250ZW50cyk7CisJc2l6ZV90IGNyY19vZmZzZXQgPSBmaWxlbmFtZV9sZW4gKyAxOworCWNyY19vZmZzZXQgPSAoY3JjX29mZnNldCArIDMpICYgfjM7CisJCisJY3JjMzIgPSBiZmRfZ2V0XzMyKGliZmQsIAorCQkJICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8YmZkX2J5dGUgKj4oY29udGVudHMgKyBjcmNfb2Zmc2V0KSk7CisJZmlsZW5hbWUgPSBzdHJpbmcoY29udGVudHMsIGZpbGVuYW1lX2xlbik7CisJY3ZlcmIgPDwgdmJmZCA8PCAiLmdudV9kZWJ1Z2xpbmsgZmlsZW5hbWUgaXMgIiA8PCBmaWxlbmFtZSA8PCBlbmRsOworCXJldHVybiB0cnVlOworfQorCisKKy8qKgorICogV2l0aCBPYmplY3RpdmUgQywgd2UnbGwgZ2V0IHN0cmluZ3MgbGlrZToKKyAqCisgKiBfaV9HU1VuaWNvZGVTdHJpbmdfX3JhbmdlT2ZDaGFyYWN0ZXJTZXRGcm9tU2V0X29wdGlvbnNfcmFuZ2UKKyAqCisgKiBmb3IgdGhlIHN5bWJvbCBuYW1lLCBhbmQ6CisgKiAtW0dTVW5pY29kZVN0cmluZyByYW5nZU9mQ2hhcmFjdGVyRnJvbVNldDpvcHRpb25zOnJhbmdlOl0KKyAqCisgKiBmb3IgdGhlIGZ1bmN0aW9uIG5hbWUsIHNvIHdlIGhhdmUgdG8gZG8gc29tZSBsb29zZXIgbWF0Y2hpbmcKKyAqIHRoYW4gZm9yIG90aGVyIGxhbmd1YWdlcyAodW5mb3J0dW5hdGVseSwgaXQncyBub3QgcG9zc2libGUKKyAqIHRvIGRlbWFuZ2xlIE9iamVjdGl2ZSBDIHN5bWJvbHMpLgorICovCitib29sIG9iamNfbWF0Y2goc3RyaW5nIGNvbnN0ICYgc3ltLCBzdHJpbmcgY29uc3QgJiBtZXRob2QpCit7CisJaWYgKG1ldGhvZC5sZW5ndGgoKSA8IDMpCisJCXJldHVybiBmYWxzZTsKKworCXN0cmluZyBtYW5nbGVkOworCisJaWYgKGlzX3ByZWZpeChtZXRob2QsICItWyIpKSB7CisJCW1hbmdsZWQgKz0gIl9pXyI7CisJfSBlbHNlIGlmIChpc19wcmVmaXgobWV0aG9kLCAiK1siKSkgeworCQltYW5nbGVkICs9ICJfY18iOworCX0gZWxzZSB7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlzdHJpbmc6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWV0aG9kLmJlZ2luKCkgKyAyOworCXN0cmluZzo6Y29uc3RfaXRlcmF0b3IgY29uc3QgZW5kID0gbWV0aG9kLmVuZCgpOworCisJYm9vbCBmb3VuZF9wYXJlbiA9IGZhbHNlOworCisJZm9yICg7IGl0ICE9IGVuZDsgKytpdCkgeworCQlzd2l0Y2ggKCppdCkgeworCQljYXNlICcgJzoKKwkJCW1hbmdsZWQgKz0gJ18nOworCQkJaWYgKCFmb3VuZF9wYXJlbikKKwkJCQltYW5nbGVkICs9ICdfJzsKKwkJCWJyZWFrOworCQljYXNlICc6JzoKKwkJCW1hbmdsZWQgKz0gJ18nOworCQkJYnJlYWs7CisJCWNhc2UgJyknOgorCQljYXNlICddJzoKKwkJCWJyZWFrOworCQljYXNlICcoJzoKKwkJCWZvdW5kX3BhcmVuID0gdHJ1ZTsKKwkJCW1hbmdsZWQgKz0gJ18nOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQltYW5nbGVkICs9ICppdDsJCisJCX0KKwl9CisKKwlyZXR1cm4gc3ltID09IG1hbmdsZWQ7Cit9CisKKworLyoKKyAqIFdpdGggYSBiaW5hcnkgaW1hZ2Ugd2hlcmUgc29tZSBvYmplY3RzIGFyZSBtaXNzaW5nIGRlYnVnCisgKiBpbmZvLCB3ZSBjYW4gZW5kIHVwIGF0dHJpYnV0aW5nIHRvIGEgY29tcGxldGVseSBkaWZmZXJlbnQKKyAqIGZ1bmN0aW9uICgjNDg0NjYwKTogYmZkX25lYXJlc3RfbGluZSgpIHdpbGwgaGFwcGlseSBtb3ZlIGZyb20gb25lCisgKiBzeW1ib2wgdG8gdGhlIG5lYXJlc3Qgb25lIGl0IGNhbiBmaW5kIHdpdGggZGVidWcgaW5mb3JtYXRpb24uCisgKiBUbyBtaXRpZ2F0ZSB0aGlzIHByb2JsZW0sIHdlIGNoZWNrIHRoYXQgdGhlIHN5bWJvbCBuYW1lCisgKiBtYXRjaGVzIHRoZSByZXR1cm5lZCBmdW5jdGlvbiBuYW1lLgorICoKKyAqIEhvd2V2ZXIsIHRoaXMgY2hlY2sgZmFpbHMgaW4gc29tZSBjYXNlcyBpdCBzaG91bGRuJ3Q6CisgKiBPYmplY3RpdmUgQywgYW5kIEMrKyBzdGF0aWMgaW5saW5lIGZ1bmN0aW9ucyAoYXMgZGlzY3Vzc2VkIGluCisgKiBHQ0MgYnVnemlsbGEgIzExNzc0KS4gU28sIHdlIGhhdmUgYSBsb29zZXIgY2hlY2sgdGhhdAorICogYWNjZXB0cyBtZXJlbHkgYSBzdWJzdHJpbmcsIHBsdXMgc29tZSBtYWdpYyBmb3IgT2JqZWN0aXZlIEMuCisgKgorICogSWYgZXZlbiB0aGUgbG9vc2UgY2hlY2sgZmFpbHMsIHRoZW4gd2UgZ2l2ZSB1cC4KKyAqLworYm9vbCBpc19jb3JyZWN0X2Z1bmN0aW9uKHN0cmluZyBjb25zdCAmIGZ1bmN0aW9uLCBzdHJpbmcgY29uc3QgJiBuYW1lKQoreworCWlmIChuYW1lID09IGZ1bmN0aW9uKQorCQlyZXR1cm4gdHJ1ZTsKKworCWlmIChvYmpjX21hdGNoKG5hbWUsIGZ1bmN0aW9uKSkKKwkJcmV0dXJuIHRydWU7CisKKwkvLyB3YXJuIHRoZSB1c2VyIGlmIHdlIGhhZCB0byB1c2UgdGhlIGxvb3NlIGNoZWNrCisJaWYgKG5hbWUuZmluZChmdW5jdGlvbikgIT0gc3RyaW5nOjpucG9zKSB7CisJCXN0YXRpYyBib29sIHdhcm5lZCA9IGZhbHNlOworCQlpZiAoIXdhcm5lZCkgeworCQkJY2VyciA8PCAid2FybmluZzogc29tZSBmdW5jdGlvbnMgY29tcGlsZWQgd2l0aG91dCAiCisJCQkgICAgIDw8ICJkZWJ1ZyBpbmZvcm1hdGlvbiBtYXkgaGF2ZSBpbmNvcnJlY3Qgc291cmNlICIKKwkJCSAgICAgPDwgImxpbmUgYXR0cmlidXRpb25zIiA8PCBlbmRsOworCQkJCXdhcm5lZCA9IHRydWU7CisJCX0KKwkJY3ZlcmIgPDwgdmJmZCA8PCAiaXNfY29ycmVjdF9mdW5jdGlvbigiIDw8IGZ1bmN0aW9uIDw8ICIsICIKKwkJICAgICAgPDwgbmFtZSA8PCAiKSBmdXp6eSBtYXRjaC4iIDw8IGVuZGw7CisJCXJldHVybiB0cnVlOworCX0KKworCXJldHVybiBmYWxzZTsKK30KKworCisvKgorICogYmludXRpbHMgMi4xMiBhbmQgYmVsb3cgaGF2ZSBhIHNtYWxsIGJ1ZyB3aGVyZSBmdW5jdGlvbnMgd2l0aG91dCBhCisgKiBkZWJ1ZyBlbnRyeSBhdCB0aGUgcHJvbG9ndWUgc3RhcnQgZG8gbm90IGdpdmUgYSB1c2VmdWwgbGluZSBudW1iZXIKKyAqIGZyb20gYmZkX2ZpbmRfbmVhcmVzdF9saW5lKCkuIFRoaXMgY2FuIGhhcHBlbiB3aXRoIGNlcnRhaW4gZ2NjCisgKiB2ZXJzaW9ucyBzdWNoIGFzIDIuOTUuCisgKgorICogV2Ugd29yayBhcm91bmQgdGhpcyBwcm9ibGVtIGJ5IHNjYW5uaW5nIGZvcndhcmQgZm9yIGEgdm1hIHdpdGggdmFsaWQKKyAqIGxpbmVuciBpbmZvLCBpZiB3ZSBjYW4ndCBnZXQgYSB2YWxpZCBsaW5lIG51bWJlci4gIFByb2JsZW0gdW5jb3ZlcmVkCisgKiBieSBOb3JiZXJ0IEthdWZtYW5uLiBUaGUgd29yay1hcm91bmQgZGVjcmVhc2VzLCBvbiB0aGUgdGluY2FzCisgKiBhcHBsaWNhdGlvbiwgdGhlIG51bWJlciBvZiBmYWlsdXJlIHRvIHJldHJpZXZlIGxpbmVuciBpbmZvIGZyb20gODM1CisgKiB0byAxNzMuIE1vc3Qgb2YgdGhlIHJlbWFpbmluZyBhcmUgYysrIGlubGluZSBmdW5jdGlvbnMgbWFpbmx5IGZyb20KKyAqIHRoZSBTVEwgbGlicmFyeS4gRml4ICM1Mjk2MjIKKyAqLwordm9pZCBmaXh1cF9saW5lbnIoYmZkICogYWJmZCwgYXNlY3Rpb24gKiBzZWN0aW9uLCBhc3ltYm9sICoqIHN5bXMsCisJCSAgc3RyaW5nIGNvbnN0ICYgbmFtZSwgYmZkX3ZtYSBwYywKKyAgICAgICAgICAgICAgICAgIGNoYXIgY29uc3QgKiogZmlsZW5hbWUsIHVuc2lnbmVkIGludCAqIGxpbmUpCit7CisJY2hhciBjb25zdCAqIGNmaWxlbmFtZTsKKwljaGFyIGNvbnN0ICogZnVuY3Rpb247CisJdW5zaWduZWQgaW50IGxpbmVucjsKKworCS8vIEZJWE1FOiBsb29raW5nIGF0IGRlYnVnIGluZm8gZm9yIGFsbCBnY2MgdmVyc2lvbiBzaG93cyB0aGFuCisJLy8gdGhlIHNhbWUgcHJvYmxlbXMgY2FuIC1wZXJoYXBzLSBvY2N1ciBmb3IgZXBpbG9nIGNvZGU6IGZpbmQgYQorCS8vIHNhbXBsZXMgZmlsZXMgd2l0aCBzYW1wbGVzIGluIGVwaWxvZyBhbmQgdHJ5IG9wcmVwb3J0IC1sIC1nCisJLy8gb24gaXQsIGNoZWNrIGl0IGFsc28gd2l0aCBvcGFubm90YXRlLgorCisJLy8gZmlyc3QgcmVzdHJpY3QgdGhlIHNlYXJjaCBvbiBhIHNlbnNpYmxlIHJhbmdlIG9mIHZtYSwgMTYgaXMKKwkvLyBhbiBpbnR1aXRpdmUgdmFsdWUgYmFzZWQgb24gZXBpbG9nIGNvZGUgbG9vaworCXNpemVfdCBtYXhfc2VhcmNoID0gMTY7CisJc2l6ZV90IHNlY3Rpb25fc2l6ZSA9IGJmZF9zZWN0aW9uX3NpemUoYWJmZCwgc2VjdGlvbik7CisJaWYgKHBjICsgbWF4X3NlYXJjaCA+IHNlY3Rpb25fc2l6ZSkKKwkJbWF4X3NlYXJjaCA9IHNlY3Rpb25fc2l6ZSAtIHBjOworCisJZm9yIChzaXplX3QgaSA9IDE7IGkgPCBtYXhfc2VhcmNoOyArK2kpIHsKKwkJYm9vbCByZXQgPSBiZmRfZmluZF9uZWFyZXN0X2xpbmUoYWJmZCwgc2VjdGlvbiwgc3ltcywgcGMgKyBpLAorCQkJCQkJICZjZmlsZW5hbWUsICZmdW5jdGlvbiwKKwkJCQkJCSAmbGluZW5yKTsKKworCQlpZiAocmV0ICYmIGNmaWxlbmFtZSAmJiBmdW5jdGlvbiAmJiBsaW5lbnIgIT0gMAorCQkgICAgJiYgaXNfY29ycmVjdF9mdW5jdGlvbihmdW5jdGlvbiwgbmFtZSkpIHsKKwkJCSpmaWxlbmFtZSA9IGNmaWxlbmFtZTsKKwkJCSpsaW5lID0gbGluZW5yOworCQkJcmV0dXJuOworCQl9CisJfQorfQorCisKK30gLy8gbmFtZXNwYWNlIGFub24KKworCitiZmQgKiBvcGVuX2JmZChzdHJpbmcgY29uc3QgJiBmaWxlKQoreworCS8qIGJmZCBrZWVwcyBpdHMgb3duIHJlZmVyZW5jZSB0byB0aGUgZmlsZW5hbWUgY2hhciAqLAorCSAqIHNvIGl0IG11c3QgaGF2ZSBhIGxpZmV0aW1lIGxvbmdlciB0aGFuIHRoZSBpYmZkICovCisJYmZkICogaWJmZCA9IGJmZF9vcGVucihmaWxlLmNfc3RyKCksIE5VTEwpOworCWlmICghaWJmZCkgeworCQljdmVyYiA8PCB2YmZkIDw8ICJiZmRfb3BlbnIgZmFpbGVkIGZvciAiIDw8IGZpbGUgPDwgZW5kbDsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJY2hlY2tfZm9ybWF0KGZpbGUsICZpYmZkKTsKKworCXJldHVybiBpYmZkOworfQorCisKK2JmZCAqIGZkb3Blbl9iZmQoc3RyaW5nIGNvbnN0ICYgZmlsZSwgaW50IGZkKQoreworCS8qIGJmZCBrZWVwcyBpdHMgb3duIHJlZmVyZW5jZSB0byB0aGUgZmlsZW5hbWUgY2hhciAqLAorCSAqIHNvIGl0IG11c3QgaGF2ZSBhIGxpZmV0aW1lIGxvbmdlciB0aGFuIHRoZSBpYmZkICovCisJYmZkICogaWJmZCA9IGJmZF9mZG9wZW5yKGZpbGUuY19zdHIoKSwgTlVMTCwgZmQpOworCWlmICghaWJmZCkgeworCQljdmVyYiA8PCB2YmZkIDw8ICJiZmRfb3BlbnIgZmFpbGVkIGZvciAiIDw8IGZpbGUgPDwgZW5kbDsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJY2hlY2tfZm9ybWF0KGZpbGUsICZpYmZkKTsKKworCXJldHVybiBpYmZkOworfQorCisKK2Jvb2wgZmluZF9zZXBhcmF0ZV9kZWJ1Z19maWxlKGJmZCAqIGliZmQsIHN0cmluZyBjb25zdCAmIGZpbGVwYXRoX2luLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZyAmIGRlYnVnX2ZpbGVuYW1lLCBleHRyYV9pbWFnZXMgY29uc3QgJiBleHRyYSkKK3sKKwlzdHJpbmcgZmlsZXBhdGgoZmlsZXBhdGhfaW4pOworCXN0cmluZyBiYXNlbmFtZTsKKwl1bnNpZ25lZCBsb25nIGNyYzMyOworCQorCWlmICghZ2V0X2RlYnVnX2xpbmtfaW5mbyhpYmZkLCBiYXNlbmFtZSwgY3JjMzIpKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvLyBXb3JrIG91dCB0aGUgaW1hZ2UgZmlsZSdzIGRpcmVjdG9yeSBwcmVmaXgKKwlzdHJpbmcgZmlsZWRpciA9IG9wX2Rpcm5hbWUoZmlsZXBhdGgpOworCS8vIE1ha2Ugc3VyZSBpdCBzdGFydHMgd2l0aCAvCisJaWYgKGZpbGVkaXIuc2l6ZSgpID4gMCAmJiBmaWxlZGlyLmF0KGZpbGVkaXIuc2l6ZSgpIC0gMSkgIT0gJy8nKQorCQlmaWxlZGlyICs9ICcvJzsKKworCXN0cmluZyBmaXJzdF90cnkoZmlsZWRpciArICIuZGVidWcvIiArIGJhc2VuYW1lKTsKKwlzdHJpbmcgc2Vjb25kX3RyeShERUJVR0RJUiArIGZpbGVkaXIgKyBiYXNlbmFtZSk7CisJc3RyaW5nIHRoaXJkX3RyeShmaWxlZGlyICsgYmFzZW5hbWUpOworCisJY3ZlcmIgPDwgdmJmZCA8PCAibG9va2luZyBmb3IgZGVidWdnaW5nIGZpbGUgIiA8PCBiYXNlbmFtZSAKKwkgICAgICA8PCAiIHdpdGggY3JjMzIgPSAiIDw8IGhleCA8PCBjcmMzMiA8PCBlbmRsOworCisJaWYgKHNlcGFyYXRlX2RlYnVnX2ZpbGVfZXhpc3RzKGZpcnN0X3RyeSwgY3JjMzIsIGV4dHJhKSkgCisJCWRlYnVnX2ZpbGVuYW1lID0gZmlyc3RfdHJ5OyAKKwllbHNlIGlmIChzZXBhcmF0ZV9kZWJ1Z19maWxlX2V4aXN0cyhzZWNvbmRfdHJ5LCBjcmMzMiwgZXh0cmEpKQorCQlkZWJ1Z19maWxlbmFtZSA9IHNlY29uZF90cnk7CisJZWxzZSBpZiAoc2VwYXJhdGVfZGVidWdfZmlsZV9leGlzdHModGhpcmRfdHJ5LCBjcmMzMiwgZXh0cmEpKQorCQlkZWJ1Z19maWxlbmFtZSA9IHRoaXJkX3RyeTsKKwllbHNlCisJCXJldHVybiBmYWxzZTsKKwkKKwlyZXR1cm4gdHJ1ZTsKK30KKworCitib29sIGludGVyZXN0aW5nX3N5bWJvbChhc3ltYm9sICogc3ltKQoreworCS8vICM3MTc3MjAgc29tZSBiaW51dGlscyBhcmUgbWlzY29tcGlsZWQgYnkgZ2NjIDIuOTUsIG9uZSBvZiB0aGUKKwkvLyB0eXBpY2FsIHN5bXB0b20gY2FuIGJlIGNhdGNoZWQgaGVyZS4KKwlpZiAoIXN5bS0+c2VjdGlvbikgeworCQlvc3RyaW5nc3RyZWFtIG9zOworCQlvcyA8PCAiWW91ciB2ZXJzaW9uIG9mIGJpbnV0aWxzIHNlZW1zIHRvIGhhdmUgYSBidWcuXG4iCisJCSAgIDw8ICJSZWFkIGh0dHA6Ly9vcHJvZmlsZS5zZi5uZXQvZmFxLyNiaW51dGlsc2J1Z1xuIjsKKwkJdGhyb3cgb3BfcnVudGltZV9lcnJvcihvcy5zdHIoKSk7CisJfQorCisJaWYgKCEoc3ltLT5zZWN0aW9uLT5mbGFncyAmIFNFQ19DT0RFKSkKKwkJcmV0dXJuIGZhbHNlOworCisJLy8gcmV0dXJuaW5nIHRydWUgZm9yIGZpeCB1cCBpbiBvcF9iZmRfc3ltYm9sKCkKKwlpZiAoIXN5bS0+bmFtZSB8fCBzeW0tPm5hbWVbMF0gPT0gJ1wwJykKKwkJcmV0dXJuIHRydWU7CisJLyogQVJNIGFzc2VtYmxlciBpbnRlcm5hbCBtYXBwaW5nIHN5bWJvbHMgYXJlbid0IGludGVyZXN0aW5nICovCisJaWYgKChzdHJjbXAoIiRhIiwgc3ltLT5uYW1lKSA9PSAwKSB8fAorCSAgICAoc3RyY21wKCIkdCIsIHN5bS0+bmFtZSkgPT0gMCkgfHwKKwkgICAgKHN0cmNtcCgiJGQiLCBzeW0tPm5hbWUpID09IDApKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvLyBDKysgZXhjZXB0aW9uIHN0dWZmCisJaWYgKHN5bS0+bmFtZVswXSA9PSAnLicgJiYgc3ltLT5uYW1lWzFdID09ICdMJykKKwkJcmV0dXJuIGZhbHNlOworCisJLyogVGhpcyBjYXNlIGNhbm5vdCBiZSBtb3ZlZCB0byBib3Jpbmdfc3ltYm9sKCksCisJICogYmVjYXVzZSB0aGF0J3Mgb25seSB1c2VkIGZvciBkdXBsaWNhdGUgVk1BcywKKwkgKiBhbmQgc29tZXRpbWVzIHRoaXMgc3ltYm9sIGFwcGVhcnMgYXQgYW4gYWRkcmVzcworCSAqIGRpZmZlcmVudCBmcm9tIGFsbCBvdGhlciBzeW1ib2xzLgorCSAqLworCWlmICghc3RyY21wKCJnY2MyX2NvbXBpbGVkLiIsIHN5bS0+bmFtZSkpCisJCXJldHVybiBmYWxzZTsKKworICAgICAgICBpZiAoc3ltLT5mbGFncyAmIEJTRl9TRUNUSU9OX1NZTSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKwlpZiAoIShzeW0tPnNlY3Rpb24tPmZsYWdzICYgU0VDX0xPQUQpKQorCQlyZXR1cm4gZmFsc2U7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworCitib29sIGJvcmluZ19zeW1ib2wob3BfYmZkX3N5bWJvbCBjb25zdCAmIGZpcnN0LCBvcF9iZmRfc3ltYm9sIGNvbnN0ICYgc2Vjb25kKQoreworCWlmIChmaXJzdC5uYW1lKCkgPT0gIkxldGV4dCIpCisJCXJldHVybiB0cnVlOworCWVsc2UgaWYgKHNlY29uZC5uYW1lKCkgPT0gIkxldGV4dCIpCisJCXJldHVybiBmYWxzZTsKKworCWlmIChmaXJzdC5uYW1lKCkuc3Vic3RyKDAsIDIpID09ICI/PyIpCisJCXJldHVybiB0cnVlOworCWVsc2UgaWYgKHNlY29uZC5uYW1lKCkuc3Vic3RyKDAsIDIpID09ICI/PyIpCisJCXJldHVybiBmYWxzZTsKKworCWlmIChmaXJzdC5oaWRkZW4oKSAmJiAhc2Vjb25kLmhpZGRlbigpKQorCQlyZXR1cm4gdHJ1ZTsKKwllbHNlIGlmICghZmlyc3QuaGlkZGVuKCkgJiYgc2Vjb25kLmhpZGRlbigpKQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZiAoZmlyc3QubmFtZSgpWzBdID09ICdfJyAmJiBzZWNvbmQubmFtZSgpWzBdICE9ICdfJykKKwkJcmV0dXJuIHRydWU7CisJZWxzZSBpZiAoZmlyc3QubmFtZSgpWzBdICE9ICdfJyAmJiBzZWNvbmQubmFtZSgpWzBdID09ICdfJykKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKGZpcnN0LndlYWsoKSAmJiAhc2Vjb25kLndlYWsoKSkKKwkJcmV0dXJuIHRydWU7CisJZWxzZSBpZiAoIWZpcnN0LndlYWsoKSAmJiBzZWNvbmQud2VhaygpKQorCQlyZXR1cm4gZmFsc2U7CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKKworYm9vbCBiZmRfaW5mbzo6aGFzX2RlYnVnX2luZm8oKSBjb25zdAoreworCWlmICghdmFsaWQoKSkKKwkJcmV0dXJuIGZhbHNlOworCisJZm9yIChhc2VjdGlvbiBjb25zdCAqIHNlY3QgPSBhYmZkLT5zZWN0aW9uczsgc2VjdDsgc2VjdCA9IHNlY3QtPm5leHQpIHsKKwkJaWYgKHNlY3QtPmZsYWdzICYgU0VDX0RFQlVHR0lORykKKwkJCXJldHVybiB0cnVlOworCX0KKworCXJldHVybiBmYWxzZTsKK30KKworCitiZmRfaW5mbzo6fmJmZF9pbmZvKCkKK3sKKwlmcmVlKHN5bnRoX3N5bXMpOworCWNsb3NlKCk7Cit9CisKKwordm9pZCBiZmRfaW5mbzo6Y2xvc2UoKQoreworCWlmIChhYmZkKQorCQliZmRfY2xvc2UoYWJmZCk7Cit9CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGNhbGxlZCB3aGVuIHByb2Nlc3Npbmcgc3ltYm9scyByZXRyaWV2ZWQgZnJvbSBhCisgKiBkZWJ1Z2luZm8gZmlsZSB0aGF0IGlzIHNlcGFyYXRlIGZyb20gdGhlIGFjdHVhbCBydW50aW1lIGJpbmFyeSBpbWFnZS4KKyAqIFNlcGFyYXRlIGRlYnVnaW5mbyBmaWxlcyBtYXkgYmUgbmVlZGVkIGluIHR3byBkaWZmZXJlbnQgY2FzZXM6CisgKiAgIDEpIHRoZSByZWFsIGltYWdlIGlzIGNvbXBsZXRlbHkgc3RyaXBwZWQsIHdoZXJlIHRoZXJlIGlzIG5vIHN5bWJvbAorCWluZm9ybWF0aW9uIGF0IGFsbAorICogICAyKSB0aGUgcmVhbCBpbWFnZSBoYXMgZGVidWdpbmZvIHN0cmlwcGVkLCBhbmQgdGhlIHVzZXIgaXMgcmVxdWVzdGluZyAiLWciCisgKiAgIChzcmMgZmlsZS9saW5lIG51bSBpbmZvKQorICogQWZ0ZXIgYWxsIHN5bWJvbHMgYXJlIGdhdGhlcmVkIHVwLCB0aGVyZSB3aWxsIGJlIHNvbWUgZmlsdGVyaW5nL3JlbW92YWwgb2YKKyAqIHVubmVjZXNzYXJ5IHN5bWJvbHMuICBJbiBwYXJ0aWN1bGFyLCB0aGUgYmZkX2luZm86OmludGVyZXN0aW5nX3N5bWJvbCgpCisgKiBmdW5jdGlvbiBmaWx0ZXJzIG91dCBzeW1ib2xzIHdob3NlIHNlY3Rpb24ncyBmbGFnIHZhbHVlIGRvZXMgbm90IGluY2x1ZGUKKyAqIFNFQ19MT0FELiAgVGhpcyBmaWx0ZXJpbmcgaXMgcmVxdWlyZWQsIHNvIGl0IG11c3QgYmUgcmV0YWluZWQuICBIb3dldmVyLAorICogd2UgcnVuIGludG8gYSBwcm9ibGVtIHdpdGggc3ltYm9scyBmcm9tIGRlYnVnaW5mbyBmaWxlcywgc2luY2UgdGhlCisgKiBzZWN0aW9uIGZsYWcgZG9lcyBOT1QgaW5jbHVkZSBTRUNfTE9BRC4gIFRvIHNvbHZlIHRoaXMgcHJvYmxlbSwgdGhlCisgKiB0cmFuc2xhdGVfZGVidWdpbmZvX3N5bXMgZnVuY3Rpb24gbWFwcyB0aGUgZGVidWdpbmZvIHN5bWJvbCdzIHNlY3Rpb25zIHRvCisgKiB0aGF0IG9mIHRoZWlyIGNvcnJlc3BvbmRpbmcgcmVhbCBpbWFnZS4KKyovCit2b2lkIGJmZF9pbmZvOjp0cmFuc2xhdGVfZGVidWdpbmZvX3N5bXMoYXN5bWJvbCAqKiBkYmdfc3ltcywgbG9uZyBucl9kYmdfc3ltcykKK3sKKwl1bnNpZ25lZCBpbnQgaW1nX3NlY3RfY250ID0gMDsKKwliZmQgKiBpbWFnZV9iZmQgPSBpbWFnZV9iZmRfaW5mby0+YWJmZDsKKwltdWx0aW1hcDxzdHJpbmcsIGJmZF9zZWN0aW9uICo+IGltYWdlX3NlY3Rpb25zOworCisJZm9yIChiZmRfc2VjdGlvbiAqIHNlY3QgPSBpbWFnZV9iZmQtPnNlY3Rpb25zOworCSAgICAgc2VjdCAmJiBpbWdfc2VjdF9jbnQgPCBpbWFnZV9iZmQtPnNlY3Rpb25fY291bnQ7CisJICAgICBzZWN0ID0gc2VjdC0+bmV4dCkgeworCQkvLyBBIGNvbW1lbnQgc2VjdGlvbiBtYXJrcyB0aGUgZW5kIG9mIHRoZSBuZWVkZWQgc2VjdGlvbnMKKwkJaWYgKHN0cnN0cihzZWN0LT5uYW1lLCAiLmNvbW1lbnQiKSA9PSBzZWN0LT5uYW1lKQorCQkJYnJlYWs7CisJCWltYWdlX3NlY3Rpb25zLmluc2VydChwYWlyPHN0cmluZywgYmZkX3NlY3Rpb24gKj4oc2VjdC0+bmFtZSwgc2VjdCkpOworCQlpbWdfc2VjdF9jbnQrKzsKKwl9CisKKwlhc3ltYm9sICogc3ltID0gZGJnX3N5bXNbMF07CisJc3RyaW5nIHByZXZfc2VjdF9uYW1lID0gIiI7CisJYmZkX3NlY3Rpb24gKiBtYXRjaGVkX3NlY3Rpb24gPSBOVUxMOworCWZvciAoaW50IGkgPSAwOyBpIDwgbnJfZGJnX3N5bXM7IHN5bSA9IGRiZ19zeW1zWysraV0pIHsKKwkJYm9vbCBzZWN0aW9uX3N3aXRjaDsKKworCQlpZiAoc3RyY21wKHByZXZfc2VjdF9uYW1lLmNfc3RyKCksIHN5bS0+c2VjdGlvbi0+bmFtZSkpIHsKKwkJCXNlY3Rpb25fc3dpdGNoID0gdHJ1ZTsKKwkJCXByZXZfc2VjdF9uYW1lID0gc3ltLT5zZWN0aW9uLT5uYW1lOworCQl9IGVsc2UgeworCQkJc2VjdGlvbl9zd2l0Y2ggPSBmYWxzZTsKKwkJfQorCQlpZiAoc3ltLT5zZWN0aW9uLT5vd25lciAmJiBzeW0tPnNlY3Rpb24tPm93bmVyID09IGFiZmQpIHsKKwkJCWlmIChzZWN0aW9uX3N3aXRjaCApIHsKKwkJCQltYXRjaGVkX3NlY3Rpb24gPSBOVUxMOworCQkJCW11bHRpbWFwPHN0cmluZywgYmZkX3NlY3Rpb24gKj46Oml0ZXJhdG9yIGl0OworCQkJCXBhaXI8bXVsdGltYXA8c3RyaW5nLCBiZmRfc2VjdGlvbiAqPjo6aXRlcmF0b3IsCisJCQkJICAgICBtdWx0aW1hcDxzdHJpbmcsIGJmZF9zZWN0aW9uICo+OjppdGVyYXRvcj4gcmFuZ2U7CisKKwkJCQlyYW5nZSA9IGltYWdlX3NlY3Rpb25zLmVxdWFsX3JhbmdlKHN5bS0+c2VjdGlvbi0+bmFtZSk7CisJCQkJZm9yIChpdCA9IHJhbmdlLmZpcnN0OyBpdCAhPSByYW5nZS5zZWNvbmQ7IGl0KyspIHsKKwkJCQkJaWYgKCgqaXQpLnNlY29uZC0+dm1hID09IHN5bS0+c2VjdGlvbi0+dm1hKSB7CisJCQkJCQltYXRjaGVkX3NlY3Rpb24gPSAoKml0KS5zZWNvbmQ7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJCWlmIChtYXRjaGVkX3NlY3Rpb24pIHsKKwkJCQlzeW0tPnNlY3Rpb24gPSBtYXRjaGVkX3NlY3Rpb247CisJCQkJc3ltLT50aGVfYmZkID0gaW1hZ2VfYmZkOworCQkJfQorCQl9CisJfQorfQorCisjaWYgU1lOVEhFU0laRV9TWU1CT0xTCitib29sIGJmZF9pbmZvOjpnZXRfc3ludGhfc3ltYm9scygpCit7CisJZXh0ZXJuIGNvbnN0IGJmZF90YXJnZXQgYmZkX2VsZjY0X3Bvd2VycGNfdmVjOworCWV4dGVybiBjb25zdCBiZmRfdGFyZ2V0IGJmZF9lbGY2NF9wb3dlcnBjbGVfdmVjOworCWJvb2wgaXNfZWxmNjRfcG93ZXJwY190YXJnZXQgPSAoYWJmZC0+eHZlYyA9PSAmYmZkX2VsZjY0X3Bvd2VycGNfdmVjKQorCQl8fCAoYWJmZC0+eHZlYyA9PSAmYmZkX2VsZjY0X3Bvd2VycGNsZV92ZWMpOworCisJaWYgKCFpc19lbGY2NF9wb3dlcnBjX3RhcmdldCkKKwkJcmV0dXJuIGZhbHNlOworCisJdm9pZCAqIGJ1ZjsKKwl1aW50IHRtcDsKKwlsb25nIG5yX21pbmlfc3ltcyA9IGJmZF9yZWFkX21pbmlzeW1ib2xzKGFiZmQsIDAsICZidWYsICZ0bXApOworCWlmIChucl9taW5pX3N5bXMgPCAxKQorCQlyZXR1cm4gZmFsc2U7CisKKwlhc3ltYm9sICoqIG1pbmlfc3ltcyA9IChhc3ltYm9sICoqKWJ1ZjsKKwlidWYgPSBOVUxMOworCWJmZCAqIHN5bnRoX2JmZDsKKworCS8qIEZvciBwcGM2NCwgYSBkZWJ1Z2luZm8gZmlsZSBieSBpdHNlbGYgZG9lcyBub3QgaG9sZCBlbm91Z2ggc3ltYm9sCisJICogaW5mb3JtYXRpb24gZm9yIHVzIHRvIHByb3Blcmx5IGF0dHJpYnV0ZSBzYW1wbGVzIHRvIHN5bWJvbHMuICBJZgorCSAqIHRoZSBpbWFnZSBmaWxlJ3MgYmZkIGhhcyBubyBzeW1ib2xzIChhcyBpbiBhIHN1cGVyLXN0cmlwcGVkIGxpYnJhcnkpLAorCSAqIHRoZW4gd2UgbmVlZCB0byBkbyB0aGUgZXh0cmEgcHJvY2Vzc2luZyBpbiB0cmFuc2xhdGVfZGVidWdpbmZvX3N5bXMuCisJICovCisJaWYgKGltYWdlX2JmZF9pbmZvICYmIGltYWdlX2JmZF9pbmZvLT5ucl9zeW1zID09IDApIHsKKwkJdHJhbnNsYXRlX2RlYnVnaW5mb19zeW1zKG1pbmlfc3ltcywgbnJfbWluaV9zeW1zKTsKKwkJc3ludGhfYmZkID0gaW1hZ2VfYmZkX2luZm8tPmFiZmQ7CisJfSBlbHNlCisJCXN5bnRoX2JmZCA9IGFiZmQ7CisJCisJbG9uZyBucl9zeW50aF9zeW1zID0gYmZkX2dldF9zeW50aGV0aWNfc3ltdGFiKHN5bnRoX2JmZCwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnJfbWluaV9zeW1zLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5pX3N5bXMsIDAsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsICZzeW50aF9zeW1zKTsKKworCWlmIChucl9zeW50aF9zeW1zIDwgMCkgeworCQlmcmVlKG1pbmlfc3ltcyk7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwljdmVyYiA8PCB2YmZkIDw8ICJtaW5pX3N5bXM6ICIgPDwgZGVjIDw8IG5yX21pbmlfc3ltcyA8PCBoZXggPDwgZW5kbDsKKwljdmVyYiA8PCB2YmZkIDw8ICJzeW50aF9zeW1zOiAiIDw8IGRlYyA8PCBucl9zeW50aF9zeW1zIDw8IGhleCA8PCBlbmRsOworCisJbnJfc3ltcyA9IG5yX21pbmlfc3ltcyArIG5yX3N5bnRoX3N5bXM7CisJc3ltcy5yZXNldChuZXcgYXN5bWJvbCAqW25yX3N5bXMgKyAxXSk7CisKKwlmb3IgKHNpemVfdCBpID0gMDsgaSA8IChzaXplX3QpbnJfbWluaV9zeW1zOyArK2kpCisJCXN5bXNbaV0gPSBtaW5pX3N5bXNbaV07CisKKworCWZvciAoc2l6ZV90IGkgPSAwOyBpIDwgKHNpemVfdClucl9zeW50aF9zeW1zOyArK2kpCisJCXN5bXNbbnJfbWluaV9zeW1zICsgaV0gPSBzeW50aF9zeW1zICsgaTsKKwkKKworCWZyZWUobWluaV9zeW1zKTsKKworCS8vIGJmZF9jYW5vbmljYWxpemVfc3ltdGFiIGRvZXMgdGhpcywgc28gc2hhbGwgd2UKKwlzeW1zW25yX3N5bXNdID0gTlVMTDsKKworCXJldHVybiB0cnVlOworfQorI2Vsc2UKK2Jvb2wgYmZkX2luZm86OmdldF9zeW50aF9zeW1ib2xzKCkKK3sKKwlyZXR1cm4gZmFsc2U7Cit9CisjZW5kaWYgLyogU1lOVEhFU0laRV9TWU1CT0xTICovCisKKwordm9pZCBiZmRfaW5mbzo6Z2V0X3N5bWJvbHMoKQoreworCWlmICghYWJmZCkKKwkJcmV0dXJuOworCisJY3ZlcmIgPDwgdmJmZCA8PCAiYmZkX2luZm86OmdldF9zeW1ib2xzKCkgZm9yICIKKwkgICAgICA8PCBiZmRfZ2V0X2ZpbGVuYW1lKGFiZmQpIDw8IGVuZGw7CisKKwlpZiAoZ2V0X3N5bnRoX3N5bWJvbHMoKSkKKwkJcmV0dXJuOworCisJaWYgKGJmZF9nZXRfZmlsZV9mbGFncyhhYmZkKSAmIEhBU19TWU1TKQorCQlucl9zeW1zID0gYmZkX2dldF9zeW10YWJfdXBwZXJfYm91bmQoYWJmZCk7CisKKwljdmVyYiA8PCB2YmZkIDw8ICJiZmRfZ2V0X3N5bXRhYl91cHBlcl9ib3VuZDogIiA8PCBkZWMKKwkgICAgICA8PCBucl9zeW1zIDw8IGhleCA8PCBlbmRsOworCisJbnJfc3ltcyAvPSBzaXplb2YoYXN5bWJvbCAqKTsKKworCWlmIChucl9zeW1zIDwgMSkKKwkJcmV0dXJuOworCisJc3ltcy5yZXNldChuZXcgYXN5bWJvbCAqW25yX3N5bXNdKTsKKworCW5yX3N5bXMgPSBiZmRfY2Fub25pY2FsaXplX3N5bXRhYihhYmZkLCBzeW1zLmdldCgpKTsKKworCWlmIChpbWFnZV9iZmRfaW5mbykKKwkJdHJhbnNsYXRlX2RlYnVnaW5mb19zeW1zKHN5bXMuZ2V0KCksIG5yX3N5bXMpOworCisJY3ZlcmIgPDwgdmJmZCA8PCAiYmZkX2Nhbm9uaWNhbGl6ZV9zeW10YWI6ICIgPDwgZGVjCisJICAgICAgPDwgbnJfc3ltcyA8PCBoZXggPDwgZW5kbDsKK30KKworCitsaW5lbnJfaW5mbyBjb25zdAorZmluZF9uZWFyZXN0X2xpbmUoYmZkX2luZm8gY29uc3QgJiBiLCBvcF9iZmRfc3ltYm9sIGNvbnN0ICYgc3ltLAorICAgICAgICAgICAgICAgICAgYmZkX3ZtYSBvZmZzZXQsIGJvb2wgYW5vbl9vYmopCit7CisJY2hhciBjb25zdCAqIGZ1bmN0aW9uID0gIiI7CisJY2hhciBjb25zdCAqIGNmaWxlbmFtZSA9ICIiOworCXVuc2lnbmVkIGludCBsaW5lbnIgPSAwOworCWxpbmVucl9pbmZvIGluZm87CisJYmZkICogYWJmZDsKKwlhc3ltYm9sICoqIHN5bXM7CisJYXNlY3Rpb24gKiBzZWN0aW9uOworCWJmZF92bWEgcGM7CisJYm9vbCByZXQ7CisKKwlpZiAoIWIudmFsaWQoKSkKKwkJZ290byBmYWlsOworCisJLy8gdGFrZSBjYXJlIGFib3V0IGFydGlmaWNpYWwgc3ltYm9sCisJaWYgKCFzeW0uc3ltYm9sKCkpCisJCWdvdG8gZmFpbDsKKworCWFiZmQgPSBiLmFiZmQ7CisJc3ltcyA9IGIuc3ltcy5nZXQoKTsKKwlpZiAoIXN5bXMpCisJCWdvdG8gZmFpbDsKKwlzZWN0aW9uID0gc3ltLnN5bWJvbCgpLT5zZWN0aW9uOworCWlmIChhbm9uX29iaikKKwkJcGMgPSBvZmZzZXQgLSBzeW0uc3ltYm9sKCktPnNlY3Rpb24tPnZtYTsKKwllbHNlCisJCXBjID0gKHN5bS52YWx1ZSgpICsgb2Zmc2V0KSAtIHN5bS5maWxlcG9zKCk7CisKKwlpZiAoKGJmZF9nZXRfc2VjdGlvbl9mbGFncyhhYmZkLCBzZWN0aW9uKSAmIFNFQ19BTExPQykgPT0gMCkKKwkJZ290byBmYWlsOworCisJaWYgKHBjID49IGJmZF9zZWN0aW9uX3NpemUoYWJmZCwgc2VjdGlvbikpCisJCWdvdG8gZmFpbDsKKworCXJldCA9IGJmZF9maW5kX25lYXJlc3RfbGluZShhYmZkLCBzZWN0aW9uLCBzeW1zLCBwYywgJmNmaWxlbmFtZSwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZnVuY3Rpb24sICZsaW5lbnIpOworCisJaWYgKCFyZXQgfHwgIWNmaWxlbmFtZSB8fCAhZnVuY3Rpb24pCisJCWdvdG8gZmFpbDsKKworCS8qCisJICogaXNfY29ycmVjdF9mdW5jdGlvbiBkb2VzIG5vdCBoYW5kbGUgdGhlIGNhc2Ugb2Ygc3RhdGljIGlubGluZXMsCisJICogYnV0IGlmIHRoZSBsaW5lbnIgaXMgbm9uLXplcm8gaW4gdGhlIGlubGluZSBjYXNlLCBpdCBpcyB0aGUgY29ycmVjdAorCSAqIGxpbmUgbnVtYmVyLgorCSAqLworCWlmIChsaW5lbnIgPT0gMCAmJiAhaXNfY29ycmVjdF9mdW5jdGlvbihmdW5jdGlvbiwgc3ltLm5hbWUoKSkpCisJCWdvdG8gZmFpbDsKKworCWlmIChsaW5lbnIgPT0gMCkgeworCQlmaXh1cF9saW5lbnIoYWJmZCwgc2VjdGlvbiwgc3ltcywgc3ltLm5hbWUoKSwgcGMsICZjZmlsZW5hbWUsCisJCSAgICAgICAgICAgICAmbGluZW5yKTsKKwl9CisKKwlpbmZvLmZvdW5kID0gdHJ1ZTsKKwlpbmZvLmZpbGVuYW1lID0gY2ZpbGVuYW1lOworCWluZm8ubGluZSA9IGxpbmVucjsKKwlyZXR1cm4gaW5mbzsKKworZmFpbDoKKwlpbmZvLmZvdW5kID0gZmFsc2U7CisJLy8gc29tZSBzdGwgbGFja3Mgc3RyaW5nOjpjbGVhcigpCisJaW5mby5maWxlbmFtZS5lcmFzZShpbmZvLmZpbGVuYW1lLmJlZ2luKCksIGluZm8uZmlsZW5hbWUuZW5kKCkpOworCWluZm8ubGluZSA9IDA7CisJcmV0dXJuIGluZm87Cit9CmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9saWJ1dGlsKysvYmZkX3N1cHBvcnQuaCBiL29wcm9maWxlLTAuOS43L2xpYnV0aWwrKy9iZmRfc3VwcG9ydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmNmEzNjkKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9saWJ1dGlsKysvYmZkX3N1cHBvcnQuaApAQCAtMCwwICsxLDE1NiBAQAorLyoqCisgKiBAZmlsZSBiZmRfc3VwcG9ydC5oCisgKiBCRkQgbXVjayB3ZSBoYXZlIHRvIGRlYWwgd2l0aC4KKyAqCisgKiBAcmVtYXJrIENvcHlyaWdodCAyMDA1IE9Qcm9maWxlIGF1dGhvcnMKKyAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCisgKgorICogQGF1dGhvciBKb2huIExldm9uCisgKi8KKworI2lmbmRlZiBCRkRfU1VQUE9SVF9ICisjZGVmaW5lIEJGRF9TVVBQT1JUX0gKKworI2luY2x1ZGUgInV0aWxpdHkuaCIKKyNpbmNsdWRlICJvcF90eXBlcy5oIgorI2luY2x1ZGUgImxvY2F0ZV9pbWFnZXMuaCIKKworI2luY2x1ZGUgPGJmZC5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorCisjaW5jbHVkZSA8c3RyaW5nPgorCitjbGFzcyBvcF9iZmRfc3ltYm9sOworCisvLy8gaG9sZGVyIGZvciBCRkQgc3RhdGUgd2UgbXVzdCBrZWVwCitzdHJ1Y3QgYmZkX2luZm8geworCWJmZF9pbmZvKCkgOiBhYmZkKDApLCBucl9zeW1zKDApLCBzeW50aF9zeW1zKDApLCBpbWFnZV9iZmRfaW5mbygwKSB7fQorCisJfmJmZF9pbmZvKCk7CisKKwkvLy8gY2xvc2UgdGhlIEJGRCwgc2V0dGluZyBhYmZkIHRvIE5VTEwKKwl2b2lkIGNsb3NlKCk7CisKKwkvLy8gcmV0dXJuIHRydWUgaWYgQkZEIGlzIHJlYWRhYmxlCisJYm9vbCB2YWxpZCgpIGNvbnN0IHsgcmV0dXJuIGFiZmQ7IH0KKworCS8vLyByZXR1cm4gdHJ1ZSBpZiBCRkQgaGFzIGRlYnVnIGluZm8KKwlib29sIGhhc19kZWJ1Z19pbmZvKCkgY29uc3Q7CisKKwkvLy8gcGljayBvdXQgdGhlIHN5bWJvbHMgZnJvbSB0aGUgYmZkLCBpZiB3ZSBjYW4KKwl2b2lkIGdldF9zeW1ib2xzKCk7CisKKwkvLy8gdGhlIGFjdHVhbCBCRkQKKwliZmQgKiBhYmZkOworCS8vLyBub3JtYWwgc3ltYm9scyAoaW5jbHVkZXMgc3ludGhlc2l6ZWQgc3ltYm9scykKKwlzY29wZWRfYXJyYXk8YXN5bWJvbCAqPiBzeW1zOworCS8vLyBuci4gc3ltYm9scworCXNpemVfdCBucl9zeW1zOworCisJdm9pZCBzZXRfaW1hZ2VfYmZkX2luZm8oYmZkX2luZm8gKiBpYmZkKSB7IGltYWdlX2JmZF9pbmZvID0gaWJmZDsgfQorCitwcml2YXRlOgorCS8qKgorCSAqIEFjcXVpcmUgdGhlIHN5bnRoZXRpYyBzeW1ib2xzIGlmIHdlIG5lZWQgdG8uCisJICovCisJYm9vbCBnZXRfc3ludGhfc3ltYm9scygpOworCisJLyoqCisJICogT24gUFBDNjQsIHN5bnRoX3N5bXMgcG9pbnRzIHRvIGFuIGFycmF5IG9mIHN5bnRoZXRpYyBhc3ltYm9sCisJICogc3RydWN0cyByZXR1cm5lZCBmcm9tIGJmZF9nZXRfc3ludGhldGljX3N5bXRhYi4gIFRoZSBzeW1zCisJICogbWVtYmVyIHBvaW50cyBpbnRvIHRoaXMgYXJyYXksIHNvIHdlIGhhdmUgdG8ga2VlcCBpdCBhcm91bmQKKwkgKiB1bnRpbCB+YmZkX2luZm8gdGltZS4KKwkgKi8KKwlhc3ltYm9sICogc3ludGhfc3ltczsKKworCS8qKgorCSAqIFVuZGVyIGNlcnRhaW4gY2lyY3Vtc3RhbmNlcywgY29ycmVjdCBoYW5kbGluZyBvZiB0aGUgYmZkIGZvciBhCisJICogZGVidWdpbmZvIGZpbGUgaXMgbm90IHBvc3NpYmxlIHdpdGhvdXQgYWNjZXNzIHRvIHRoZSBiZmQgZm9yCisJICogdGhlIGFjdHVhbCBpbWFnZSBmaWxlLiAgVGhlIGltYWdlX2JmZF9pbmZvIGZpZWxkIHByb3ZpZGVzIGFjY2VzcyB0bworCSAqIHRoYXQgYmZkIHdoZW4gdGhpcyBiZmRfaW5mbyBpcyBmb3IgYSBkZWJ1Z2luZm8gZmlsZTsgb3RoZXJ3aXNlCisJICogaW1hZ2VfYmZkX2luZm8gaXMgTlVMTC4KKwkgKi8gCisJYmZkX2luZm8gKiBpbWFnZV9iZmRfaW5mbzsKKworCS8qIFRvIGFkZHJlc3MgYSBkaWZmZXJlbnQgaXNzdWUsIHdlIGRpc2NhcmQgc3ltYm9scyB3aG9zZSBzZWN0aW9uCisJICogZmxhZyBkb2VzIG5vdCBjb250YWluIFNFQ19MT0FELiAgQnV0IHNpbmNlIHRoaXMgaXMgdHJ1ZSBmb3Igc3ltYm9scworCSAqIGZvdW5kIGluIGRlYnVnaW5mbyBmaWxlcywgd2UgbXVzdCBydW4gdGhvc2UgZGVidWdpbmZvIHN5bWJvbHMKKwkgKiB0aHJvdWdoIHRoZSBmdW5jdGlvbiBiZWxvdyB0byBwcmV2ZW50IHRoZW0gZnJvbSBiZWluZyBpbmFkdmVydGVudGx5CisJICogZGlzY2FyZGVkLiAgVGhpcyBmdW5jdGlvbiBtYXBzIHRoZSBzZWN0aW9ucyBmcm9tIHRoZSBzeW1ib2xzIGluCisJICogdGhlIGRlYnVnaW5mbyBiZmQgdG8gdGhvc2Ugb2YgdGhlIHJlYWwgaW1hZ2UgYmZkLiAgVGhlbiwgd2hlbgorCSAqIHdlIGxhdGVyIGRvIHN5bWJvbCBmaWx0ZXJpbmcsIHdlIHNlZSB0aGUgc2VjdGlvbnMgZnJvbSB0aGUgcmVhbAorCSAqIGJmZCwgd2hpY2ggZG8gY29udGFpbiBTRUNfTE9BRCBpbiB0aGUgc2VjdGlvbiBmbGFnLgorCSAqLworCXZvaWQgdHJhbnNsYXRlX2RlYnVnaW5mb19zeW1zKGFzeW1ib2wgKiogZGJnX3N5bXMsIGxvbmcgbnJfZGJnX3N5bXMpOworCit9OworCisKKy8qCisgKiBmaW5kX3NlcGFyYXRlX2RlYnVnX2ZpbGUgLSByZXR1cm4gdHJ1ZSBpZiBhIHZhbGlkIHNlcGFyYXRlIGRlYnVnIGZpbGUgZm91bmQKKyAqIEBwYXJhbSBpYmZkIGJpbmFyeSBmaWxlCisgKiBAcGFyYW0gZGlyX2luIGRpcmVjdG9yeSBob2xkaW5nIHRoZSBiaW5hcnkgZmlsZQorICogQHBhcmFtIGdsb2JhbF9pbgorICogQHBhcmFtIGZpbGVuYW1lIHBhdGggdG8gdmFsaWQgZGVidWcgZmlsZQorICoKKyAqIFNlYXJjaCBvcmRlciBmb3IgZGVidWcgZmlsZSBhbmQgdXNlIGZpcnN0IG9uZSBmb3VuZDoKKyAqIDEpIGRpcl9pbiBkaXJlY3RvcnkKKyAqIDIpIGRpcl9pbi8uZGVidWcgZGlyZWN0b3J5CisgKiAzKSBnbG9iYWxfaW4vZGlyX2luIGRpcmVjdG9yeQorICoKKyAqIE5ld2VyIGJpbnV0aWxzIGFuZCBMaW51eCBkaXN0cmlidXRpb25zIChlLmcuIEZlZG9yYSkgYWxsb3cgdGhlCisgKiBjcmVhdGlvbiBvZiBkZWJ1ZyBmaWxlcyB0aGF0IGFyZSBzZXBhcmF0ZSBmcm9tIHRoZSBiaW5hcnkuIFRoZQorICogZGVidWdnaW5nIGluZm9ybWF0aW9uIGlzIHN0cmlwcGVkIG91dCBvZiB0aGUgYmluYXJ5IGZpbGUsIHBsYWNlZCBpbgorICogdGhpcyBzZXBhcmF0ZSBmaWxlLCBhbmQgYSBsaW5rIHRvIHRoZSBuZXcgZmlsZSBpcyBwbGFjZWQgaW4gdGhlCisgKiBiaW5hcnkuIFRoZSBkZWJ1ZyBmaWxlcyBob2xkIHRoZSBpbmZvcm1hdGlvbiBuZWVkZWQgYnkgdGhlIGRlYnVnZ2VyCisgKiAoYW5kIE9Qcm9maWxlKSB0byBtYXAgbWFjaGluZSBpbnN0cnVjdGlvbnMgYmFjayB0byBzb3VyY2UgY29kZS4KKyAqLworZXh0ZXJuIGJvb2wKK2ZpbmRfc2VwYXJhdGVfZGVidWdfZmlsZShiZmQgKiBpYmZkLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCAmIGZpbGVwYXRoX2luLAorICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nICYgZGVidWdfZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFfaW1hZ2VzIGNvbnN0ICYgZXh0cmEpOworCisvLy8gb3BlbiB0aGUgZ2l2ZW4gQkZECitiZmQgKiBvcGVuX2JmZChzdGQ6OnN0cmluZyBjb25zdCAmIGZpbGUpOworCisvLy8gb3BlbiB0aGUgZ2l2ZW4gQkZEIGZyb20gdGhlIGZkCitiZmQgKiBmZG9wZW5fYmZkKHN0ZDo6c3RyaW5nIGNvbnN0ICYgZmlsZSwgaW50IGZkKTsKKworLy8vIFJldHVybiBhIEJGRCBmb3IgYW4gU1BVIEVMRiBlbWJlZGRlZCBpbiBQUEUgYmluYXJ5IGZpbGUKK2JmZCAqIHNwdV9vcGVuX2JmZChzdGQ6OnN0cmluZyBjb25zdCBuYW1lLCBpbnQgZmQsIHVpbnQ2NF90IG9mZnNldF90b19zcHVfZWxmKTsKKworLy8vIFJldHVybiB0cnVlIGlmIHRoZSBzeW1ib2wgaXMgd29ydGggbG9va2luZyBhdAorYm9vbCBpbnRlcmVzdGluZ19zeW1ib2woYXN5bWJvbCAqIHN5bSk7CisKKy8qKgorICogcmV0dXJuIHRydWUgaWYgdGhlIGZpcnN0IHN5bWJvbCBpcyBsZXNzIGludGVyZXN0aW5nIHRoYW4gdGhlIHNlY29uZCBzeW1ib2wKKyAqIGJvcmluZyBzeW1ib2wgYXJlIGVsaW1pbmF0ZWQgd2hlbiBtdWx0aXBsZSBzeW1ib2wgZXhpc3QgYXQgdGhlIHNhbWUgdm1hCisgKi8KK2Jvb2wgYm9yaW5nX3N5bWJvbChvcF9iZmRfc3ltYm9sIGNvbnN0ICYgZmlyc3QsIG9wX2JmZF9zeW1ib2wgY29uc3QgJiBzZWNvbmQpOworCisvLy8gZGVidWcgaW5mbyBmb3IgYSBnaXZlbiBwYworc3RydWN0IGxpbmVucl9pbmZvIHsKKwkvLy8gZGlkIHdlIGZpbmQgc29tZXRoaW5nPworCWJvb2wgZm91bmQ7CisJLy8vIGZpbGVuYW1lCisJc3RkOjpzdHJpbmcgZmlsZW5hbWU7CisJLy8vIGxpbmUgbnVtYmVyCisJdW5zaWduZWQgaW50IGxpbmU7Cit9OworCisvKioKKyAqIEF0dGVtcHQgdG8gbG9jYXRlIGEgZmlsZW5hbWUgKyBsaW5lIG51bWJlciBmb3IgdGhlIGdpdmVuIHN5bWJvbCBhbmQKKyAqIG9mZnNldC4KKyAqCisgKiBUaGUgYmZkIG9iamVjdCBpcyBlaXRoZXIgdGhlIG9iamVjdCBhc3NvY2lhdGVkIHdpdGggdGhlIGJpbmFyeSBvciB0aGUKKyAqIG9uY2UgYXNzb2NpYXRlZCB3aXRoIHRoZSBzZXBhcmF0ZWQgZGVidWcgaW5mbyBmaWxlIHNvIGZpbmRfbmVhcmVzdF9saW5lKCkKKyAqIGNhbid0IGxvb2t1cCB0aGUgc2VjdGlvbiBjb250ZW50cyBvZiBjb2RlIHNlY3Rpb24gZXRjLiBUaGUgZmlsZXBvcyBvZgorICogZGVidWdpbmZvIHN5bWJvbHMgYXJlIGRpZmZlcmVudCBmcm9tIHRoZSBvcmlnaW5hbCBmaWxlIGJ1dCB3ZSBmaXhlZCBzeW1ib2wKKyAqIGZpbGVwb3MgZWFybGllci4KKyAqLworbGluZW5yX2luZm8gY29uc3QKK2ZpbmRfbmVhcmVzdF9saW5lKGJmZF9pbmZvIGNvbnN0ICYgaWJmZCwgb3BfYmZkX3N5bWJvbCBjb25zdCAmIHN5bSwKKyAgICAgICAgICAgICAgICAgIGJmZF92bWEgb2Zmc2V0LCBib29sIGFub25fb2JqKTsKKworI2VuZGlmIC8qICFCRkRfU1VQUE9SVF9IICovCmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9saWJ1dGlsKysvY2FjaGVkX3ZhbHVlLmggYi9vcHJvZmlsZS0wLjkuNy9saWJ1dGlsKysvY2FjaGVkX3ZhbHVlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzYyZTE2YQotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2xpYnV0aWwrKy9jYWNoZWRfdmFsdWUuaApAQCAtMCwwICsxLDUyIEBACisvKioKKyAqIEBmaWxlIGNhY2hlZF92YWx1ZS5oCisgKiBIb2xkIGEgY2FjaGVkIHZhbHVlLgorICoKKyAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDUgT1Byb2ZpbGUgYXV0aG9ycworICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKKyAqCisgKiBAYXV0aG9yIEpvaG4gTGV2b24KKyAqLworCisjaWZuZGVmIENBQ0hFRF9WQUxVRV9ICisjZGVmaW5lIENBQ0hFRF9WQUxVRV9ICisKKyNpbmNsdWRlICJvcF9leGNlcHRpb24uaCIKKworLyoqCisgKiBIb2xkIGEgc2luZ2xlIHZhbHVlLCByZXR1cm5pbmcgYSBjYWNoZWQgdmFsdWUgaWYgdGhlcmUgaXMgb25lLgorICovCit0ZW1wbGF0ZSA8Y2xhc3MgVD4KK2NsYXNzIGNhY2hlZF92YWx1ZQoreworcHVibGljOgorCWNhY2hlZF92YWx1ZSgpIDogc2V0KGZhbHNlKSB7fQorCisJdHlwZWRlZiBUIHZhbHVlX3R5cGU7CisKKwkvLy8gcmV0dXJuIHRoZSBjYWNoZWQgdmFsdWUKKwl2YWx1ZV90eXBlIGNvbnN0IGdldCgpIGNvbnN0IHsKKwkJaWYgKCFzZXQpCisJCQl0aHJvdyBvcF9mYXRhbF9lcnJvcigiY2FjaGVkIHZhbHVlIG5vdCBzZXQiKTsKKwkJcmV0dXJuIHZhbHVlOworCX0KKworCS8vLyByZXR1cm4gdHJ1ZSBpZiBhIHZhbHVlIGlzIGNhY2hlZAorCWJvb2wgY2FjaGVkKCkgY29uc3QgeyByZXR1cm4gc2V0OyB9CisKKwkvLy8gc2V0IHRoZSBjb250YWluZWQgdmFsdWUKKwl2YWx1ZV90eXBlIGNvbnN0IHJlc2V0KHZhbHVlX3R5cGUgY29uc3QgJiB2YWwpIHsKKwkJdmFsdWUgPSB2YWw7CisJCXNldCA9IHRydWU7CisJCXJldHVybiB2YWx1ZTsKKwl9CisKK3ByaXZhdGU6CisJLy8vIHRoZSBjYWNoZWQgdmFsdWUKKwl2YWx1ZV90eXBlIHZhbHVlOworCS8vLyBpcyB0aGUgdmFsdWUgdmFsaWQ/CisJYm9vbCBzZXQ7Cit9OworCisKKyNlbmRpZiAvKiAhQ0FDSEVEX1ZBTFVFX0ggKi8KZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2xpYnV0aWwrKy9jaGlsZF9yZWFkZXIuY3BwIGIvb3Byb2ZpbGUtMC45LjcvbGlidXRpbCsrL2NoaWxkX3JlYWRlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjE0YzYwYwotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2xpYnV0aWwrKy9jaGlsZF9yZWFkZXIuY3BwCkBAIC0wLDAgKzEsMjc2IEBACisvKioKKyAqIEBmaWxlIGNoaWxkX3JlYWRlci5jcHAKKyAqIEZhY2lsaXR5IGZvciByZWFkaW5nIGZyb20gY2hpbGQgcHJvY2Vzc2VzCisgKgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMiBPUHJvZmlsZSBhdXRob3JzCisgKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORworICoKKyAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQorICogQGF1dGhvciBKb2huIExldm9uCisgKi8KKworI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN5cy93YWl0Lmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisKKyNpbmNsdWRlIDxjZXJybm8+CisjaW5jbHVkZSA8c3N0cmVhbT4KKyNpbmNsdWRlIDxpb3N0cmVhbT4KKyNpbmNsdWRlIDxjc3RyaW5nPgorI2luY2x1ZGUgPGNzdGRsaWI+CisKKyNpbmNsdWRlICJvcF9saWJpYmVydHkuaCIKKyNpbmNsdWRlICJjaGlsZF9yZWFkZXIuaCIKKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKworY2hpbGRfcmVhZGVyOjpjaGlsZF9yZWFkZXIoc3RyaW5nIGNvbnN0ICYgY21kLCB2ZWN0b3I8c3RyaW5nPiBjb25zdCAmIGFyZ3MpCisJOgorCWZkMSgtMSksIGZkMigtMSksCisJcG9zMSgwKSwgZW5kMSgwKSwKKwlwb3MyKDApLCBlbmQyKDApLAorCXBpZCgwKSwKKwlmaXJzdF9lcnJvcigwKSwKKwlidWYyKDApLCBzel9idWYyKDApLAorCWJ1ZjEobmV3IGNoYXJbUElQRV9CVUZdKSwKKwlwcm9jZXNzX25hbWUoY21kKSwKKwlpc190ZXJtaW5hdGVkKHRydWUpLAorCXRlcm1pbmF0ZV9vbl9leGNlcHRpb24oZmFsc2UpLAorCWZvcmtlZChmYWxzZSkKK3sKKwlleGVjX2NvbW1hbmQoY21kLCBhcmdzKTsKK30KKworCitjaGlsZF9yZWFkZXI6On5jaGlsZF9yZWFkZXIoKQoreworCXRlcm1pbmF0ZV9wcm9jZXNzKCk7CisJZGVsZXRlIFtdIGJ1ZjE7CisJaWYgKGJ1ZjIpIHsKKwkJLy8gYWxsb2NhdGVkIHRocm91Z2ggQyBhbGxvYworCQlmcmVlKGJ1ZjIpOworCX0KK30KKworCit2b2lkIGNoaWxkX3JlYWRlcjo6ZXhlY19jb21tYW5kKHN0cmluZyBjb25zdCAmIGNtZCwgdmVjdG9yPHN0cmluZz4gY29uc3QgJiBhcmdzKQoreworCWludCBwc3Rkb3V0WzJdOworCWludCBwc3RkZXJyWzJdOworCisJaWYgKHBpcGUocHN0ZG91dCkgPT0gLTEgfHwgcGlwZShwc3RkZXJyKSA9PSAtMSkgeworCQlmaXJzdF9lcnJvciA9IGVycm5vOworCQlyZXR1cm47CisJfQorCisJcGlkID0gZm9yaygpOworCXN3aXRjaCAocGlkKSB7CisJCWNhc2UgLTE6CisJCQlmaXJzdF9lcnJvciA9IGVycm5vOworCQkJcmV0dXJuOworCisJCWNhc2UgMDogeworCQkJY2hhciBjb25zdCAqKiBhcmd2ID0gbmV3IGNoYXIgY29uc3QgKlthcmdzLnNpemUoKSArIDJdOworCQkJc2l6ZV90IGk7CisJCQlhcmd2WzBdID0gY21kLmNfc3RyKCk7CisKKwkJCWZvciAoaSA9IDEgOyBpIDw9IGFyZ3Muc2l6ZSgpIDsgKytpKQorCQkJCWFyZ3ZbaV0gPSBhcmdzW2kgLSAxXS5jX3N0cigpOworCisJCQlhcmd2W2ldID0gMDsKKworCQkJLy8gY2hpbGQ6IHdlIGNhbiBjbGVhbnVwIGEgZmV3IGZkCisJCQljbG9zZShwc3Rkb3V0WzBdKTsKKwkJCWR1cDIocHN0ZG91dFsxXSwgU1RET1VUX0ZJTEVOTyk7CisJCQljbG9zZShwc3Rkb3V0WzFdKTsKKwkJCWNsb3NlKHBzdGRlcnJbMF0pOworCQkJZHVwMihwc3RkZXJyWzFdLCBTVERFUlJfRklMRU5PKTsKKwkJCWNsb3NlKHBzdGRlcnJbMV0pOworCisJCQlleGVjdnAoY21kLmNfc3RyKCksIChjaGFyICogY29uc3QgKilhcmd2KTsKKworCQkJaW50IHJldF9jb2RlID0gZXJybm87CisKKwkJCS8vIHdlIGNhbiBjb21tdW5pY2F0ZSB3aXRoIHBhcmVudCBieSB3cml0aW5nIHRvIHN0ZGVycgorCQkJLy8gYW5kIGJ5IHJldHVybmluZyBhIG5vbiB6ZXJvIGVycm9yIGNvZGUuIFNldHRpbmcKKwkJCS8vIGZpcnN0X2Vycm9yIGluIHRoZSBjaGlsZCBpcyBhIG5vbi1zZW5zZQorCisJCQkvLyB3ZSBhcmUgaW4gdGhlIGNoaWxkIHByb2Nlc3M6IHNvIHRoaXMgZXJyb3IgbWVzc2FnZQorCQkJLy8gaXMgcmVkaXJlY3QgdG8gdGhlIHBhcmVudCBwcm9jZXNzCisJCQljZXJyIDw8ICJDb3VsZG4ndCBleGVjIFwiIiA8PCBjbWQgPDwgIlwiIDogIgorCQkJICAgICA8PCBzdHJlcnJvcihlcnJubykgPDwgZW5kbDsKKwkJCWV4aXQocmV0X2NvZGUpOworCQl9CisKKwkJZGVmYXVsdDo7CisJCQkvLyBwYXJlbnQ6IHdlIGRvIG5vdCB3cml0ZSBvbiB0aGVzZSBmZC4KKwkJCWNsb3NlKHBzdGRvdXRbMV0pOworCQkJY2xvc2UocHN0ZGVyclsxXSk7CisJCQlmb3JrZWQgPSB0cnVlOworCQkJYnJlYWs7CisJfQorCisJZmQxID0gcHN0ZG91dFswXTsKKwlmZDIgPSBwc3RkZXJyWzBdOworCisJaXNfdGVybWluYXRlZCA9IGZhbHNlOworCisJcmV0dXJuOworfQorCisKK2Jvb2wgY2hpbGRfcmVhZGVyOjpibG9ja19yZWFkKCkKK3sKKwlmZF9zZXQgcmVhZF9mczsKKworCUZEX1pFUk8oJnJlYWRfZnMpOworCUZEX1NFVChmZDEsICZyZWFkX2ZzKTsKKwlGRF9TRVQoZmQyLCAmcmVhZF9mcyk7CisKKwlpZiAoc2VsZWN0KG1heChmZDEsIGZkMikgKyAxLCAmcmVhZF9mcywgMCwgMCwgMCkgPj0gMCkgeworCQlpZiAoRkRfSVNTRVQoZmQxLCAmcmVhZF9mcykpIHsKKwkJCXNzaXplX3QgdGVtcCA9IHJlYWQoZmQxLCBidWYxLCBQSVBFX0JVRik7CisJCQlpZiAodGVtcCA+PSAwKQorCQkJCWVuZDEgPSB0ZW1wOworCQkJZWxzZQorCQkJCWVuZDEgPSAwOworCQl9CisKKwkJaWYgKEZEX0lTU0VUKGZkMiwgJnJlYWRfZnMpKSB7CisJCQlpZiAoZW5kMiA+PSBzel9idWYyKSB7CisJCQkJc3pfYnVmMiA9IHN6X2J1ZjIgPyBzel9idWYyICogMiA6IFBJUEVfQlVGOworCQkJCWJ1ZjIgPSAoY2hhciAqKXhyZWFsbG9jKGJ1ZjIsIHN6X2J1ZjIpOworCQkJfQorCisJCQlzc2l6ZV90IHRlbXAgPSByZWFkKGZkMiwgYnVmMiArIGVuZDIsIHN6X2J1ZjIgLSBlbmQyKTsKKwkJCWlmICh0ZW1wID4gMCkKKwkJCQllbmQyICs9IHRlbXA7CisJCX0KKwl9CisKKwlib29sIHJldCA9ICEoZW5kMSA9PSAwICYmIGVuZDIgPT0gMCk7CisKKwlpZiAoZW5kMSA9PSAtMSkKKwkJZW5kMSA9IDA7CisJaWYgKGVuZDIgPT0gLTEpCisJCWVuZDIgPSAwOworCisJcmV0dXJuIHJldDsKK30KKworCitib29sIGNoaWxkX3JlYWRlcjo6Z2V0bGluZShzdHJpbmcgJiByZXN1bHQpCit7CisJLy8gc29tZSBzdGwgbGFja3Mgc3RyaW5nOjpjbGVhcigpCisJcmVzdWx0LmVyYXNlKHJlc3VsdC5iZWdpbigpLCByZXN1bHQuZW5kKCkpOworCisJYm9vbCBvayA9IHRydWU7CisJYm9vbCByZXQgPSB0cnVlOworCWJvb2wgY2FuX3N0b3AgPSBmYWxzZTsKKwlkbyB7CisJCWludCB0ZW1wID0gZW5kMjsKKwkJaWYgKHBvczEgPj0gZW5kMSkgeworCQkJcG9zMSA9IDA7CisJCQlyZXQgPSBibG9ja19yZWFkKCk7CisJCX0KKworCQkvLyBmb3IgZWZmaWNpZW5jeSB0cnkgdG8gY29weSBhcyBtdWNoIGFzIHdlIGNhbiBvZiBkYXRhCisJCXNzaXplX3QgdGVtcF9wb3MgPSBwb3MxOworCQl3aGlsZSAodGVtcF9wb3MgPCBlbmQxICYmIG9rKSB7CisJCQljaGFyIGNoID0gYnVmMVt0ZW1wX3BvcysrXTsKKwkJCWlmIChjaCA9PSAnXG4nKQorCQkJCW9rID0gZmFsc2U7CisJCX0KKworCQkvLyAhb2sgPT0+IGVuZGwgaGFzIGJlZW4gcmVhZCBzbyBkbyBub3QgY29weSBpdC4KKwkJcmVzdWx0LmFwcGVuZCgmYnVmMVtwb3MxXSwgKHRlbXBfcG9zIC0gcG9zMSkgLSAhb2spOworCisJCWlmICghb2sgfHwgIWVuZDEpCisJCQljYW5fc3RvcCA9IHRydWU7CisKKwkJLy8gcmVhZGluZyB6ZXJvIGJ5dGUgZnJvbSBzdGRvdXQgZG9uJ3QgbWVhbiB0aGFuIHdlIGV4aGF1c3RlZAorCQkvLyBhbGwgc3Rkb3V0IG91dHB1dCwgd2UgbXVzdCBjb250aW51ZSB0byB0cnkgdW50aWwgcmVhZGluZworCQkvLyBzdGRvdXQgYW5kIHN0ZGVyciByZXR1cm4gemVybyBieXRlLgorCQlpZiAob2sgJiYgdGVtcCAhPSBlbmQyKQorCQkJY2FuX3N0b3AgPSBmYWxzZTsKKworCQlwb3MxID0gdGVtcF9wb3M7CisJfSB3aGlsZSAoIWNhbl9zdG9wKTsKKworCS8vIElzIHRoaXMgY29ycmVjdCA/CisJcmV0dXJuIGVuZDEgIT0gMCB8fCByZXN1bHQubGVuZ3RoKCkgIT0gMDsKK30KKworCitib29sIGNoaWxkX3JlYWRlcjo6Z2V0X2RhdGEob3N0cmVhbSAmIG91dCwgb3N0cmVhbSAmIGVycikKK3sKKwlib29sIHJldCA9IHRydWU7CisJd2hpbGUgKHJldCkgeworCQlyZXQgPSBibG9ja19yZWFkKCk7CisKKwkJb3V0LndyaXRlKGJ1ZjEsIGVuZDEpOworCQllcnIud3JpdGUoYnVmMiwgZW5kMik7CisKKwkJZW5kMSA9IGVuZDIgPSAwOworCX0KKworCXJldHVybiBmaXJzdF9lcnJvciA9PSAwOworfQorCisKK2ludCBjaGlsZF9yZWFkZXI6OnRlcm1pbmF0ZV9wcm9jZXNzKCkKK3sKKwkvLyBjYW4gYmUgY2FsbGVkIGV4cGxpY2l0ZWx5IG9yIGJ5IGR0b3IsCisJLy8gd2UgbXVzdCBwcm90ZWN0IGFnYWluc3QgbXVsdGlwbGUgY2FsbAorCWlmICghaXNfdGVybWluYXRlZCkgeworCQlpbnQgcmV0OworCQl3YWl0cGlkKHBpZCwgJnJldCwgMCk7CisKKwkJaXNfdGVybWluYXRlZCA9IHRydWU7CisKKwkJaWYgKFdJRkVYSVRFRChyZXQpKSB7CisJCQlmaXJzdF9lcnJvciA9IFdFWElUU1RBVFVTKHJldCkgfCBXSUZTSUdOQUxFRChyZXQpOworCQl9IGVsc2UgaWYgKFdJRlNJR05BTEVEKHJldCkpIHsKKwkJCXRlcm1pbmF0ZV9vbl9leGNlcHRpb24gPSB0cnVlOworCQkJZmlyc3RfZXJyb3IgPSBXVEVSTVNJRyhyZXQpOworCQl9IGVsc2UgeworCQkJLy8gRklYTUU6IHRoaXMgc2VlbXMgaW1wb3NzaWJsZSwgd2FpdHBpZCAqbXVzdCogd2FpdAorCQkJLy8gYW5kIGVpdGhlciB0aGUgcHJvY2VzcyB0ZXJtaW5hdGUgbm9ybWFsbHkgb3IgdGhyb3VnaAorCQkJLy8gYSBzaWduYWwuCisJCQlmaXJzdF9lcnJvciA9IC0xOworCQl9CisJfQorCisJaWYgKGZkMSAhPSAtMSkgeworCQljbG9zZShmZDEpOworCQlmZDEgPSAtMTsKKwl9CisJaWYgKGZkMiAhPSAtMSkgeworCQljbG9zZShmZDIpOworCQlmZDIgPSAtMTsKKwl9CisKKwlyZXR1cm4gZmlyc3RfZXJyb3I7Cit9CisKKworc3RyaW5nIGNoaWxkX3JlYWRlcjo6ZXJyb3Jfc3RyKCkgY29uc3QKK3sKKwlvc3RyaW5nc3RyZWFtIGVycjsKKwlpZiAoIWZvcmtlZCkgeworCQllcnIgPDwgc3RyaW5nKCJ1bmFibGUgdG8gZm9yaywgZXJyb3I6ICIpCisJCSAgICA8PCBzdHJlcnJvcihmaXJzdF9lcnJvcik7CisJfSBlbHNlIGlmIChpc190ZXJtaW5hdGVkKSB7CisJCWlmIChmaXJzdF9lcnJvcikgeworCQkJaWYgKHRlcm1pbmF0ZV9vbl9leGNlcHRpb24pIHsKKwkJCQllcnIgPDwgcHJvY2Vzc19uYW1lIDw8ICIgdGVybWluYXRlZCBieSBzaWduYWwgIgorCQkJCSAgICA8PCBmaXJzdF9lcnJvcjsKKwkJCX0gZWxzZSB7CisJCQkJZXJyIDw8IHByb2Nlc3NfbmFtZSA8PCAiIHJldHVybiAiCisJCQkJICAgIDw8IGZpcnN0X2Vycm9yOworCQkJfQorCQl9CisJfQorCisJcmV0dXJuIGVyci5zdHIoKTsKK30KZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2xpYnV0aWwrKy9jaGlsZF9yZWFkZXIuaCBiL29wcm9maWxlLTAuOS43L2xpYnV0aWwrKy9jaGlsZF9yZWFkZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mM2JmNzFhCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvbGlidXRpbCsrL2NoaWxkX3JlYWRlci5oCkBAIC0wLDAgKzEsMTExIEBACisvKioKKyAqIEBmaWxlIGNoaWxkX3JlYWRlci5oCisgKiBGYWNpbGl0eSBmb3IgcmVhZGluZyBmcm9tIGNoaWxkIHByb2Nlc3NlcworICoKKyAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDIgT1Byb2ZpbGUgYXV0aG9ycworICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKKyAqCisgKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKKyAqIEBhdXRob3IgSm9obiBMZXZvbgorICovCisKKyNpZm5kZWYgQ0hJTERfUkVBREVSX0gKKyNkZWZpbmUgQ0hJTERfUkVBREVSX0gKKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCisjaW5jbHVkZSA8dmVjdG9yPgorI2luY2x1ZGUgPHN0cmluZz4KKworLyoqCisgKiBhIGNsYXNzIHRvIHJlYWQgc3Rkb3V0IC8gc3RkZXJyIGZyb20gYSBjaGlsZCBwcm9jZXNzLgorICoKKyAqIHR3byBpbnRlcmZhY2VzIGFyZSBwcm92aWRlZC4gcmVhZCBsaW5lIGJ5IGxpbmU6IGdldGxpbmUoKSBvciByZWFkIGFsbCBkYXRhCisgKiBpbiBvbmUgOiBnZXRfZGF0YSgpLiBJbiBhbGwgY2FzZSBnZXRfZGF0YSgpIG11c3QgYmUgY2FsbGVkIG9uY2UgdG8gZmx1c2ggdGhlCisgKiBzdGRlcnIgY2hpbGQgb3V0cHV0CisgKi8KKy8qCisgKiBGSVhNRTogY29kZSByZXZpZXcgaXMgbmVlZGVkOgorICogIC0gY2hlY2sgdGhlIGdldGxpbmUoKS9nZXRfZGF0YSgpL2Jsb2NrX3JlYWQoKSBpbnRlcmZhY2UuCisgKiAgdGhlIGV4cGVjdGVkIGJlaGF2aW9yIGlzOgorICogIGNhbGxlciBjYW4gY2FsbCBnZXRsaW5lIHVudGlsIG5vdGhpbmcgaXMgYXZhaWxhYmxlIGZyb20gdGhlIHN0ZG91dCBvZiB0aGUKKyAqIGNoaWxkLiBpbiB0aGlzIGNhc2UgY2hpbGQgc3RkZXJyIGlzIGFjdW11bGF0ZWQgaW4gYnVmMiBhbmQgY2FuIGJlIHJlYWQKKyAqIHRocm91Z2ggZ2V0X2RhdGEoKS4gZ2V0X2RhdGEoKSBpcyBibG9ja2luZyB1bnRpbCB0aGUgY2hpbGQgY2xvc2Ugc3RkZXJyIC8KKyAqIHN0ZG91dCAoZXZlbiBpZiB0aGUgY2hpbGQgZGllIGJ5IGEgc2lnbmFsID8pLiBUaGUgZm9sbG93aW5nIGNvcm5lciBjYXNlIG11c3QKKyAqIHdvcmsgYnV0IEknbSB1bnN1cmUgaWYgdGhlIGNvZGUgcmVmbGVjdCB0aGlzIGJlaGF2aW9yOiB0aGUgbGFzdCBsaW5lIG9mIHRoZQorICogY2hpbGQgc3Rkb3V0IGhhdmUgbm90IG5lY2Vzc2FyaWxseSBhIExGIHRlcm1pbmF0b3IuIHRoZSBjaGlsZCBjYW4gb3V0cHV0IGFueQorICogc2l6ZSBvZiBkYXRhIGluIHN0ZGVyci4KKyAqLworY2xhc3MgY2hpbGRfcmVhZGVyIHsKK3B1YmxpYzoKKwkvKiogZm9yayBhIHByb2Nlc3MuIHVzZSBlcnJvcigpIHRvIGdldCBlcnJvciBjb2RlLiBEbyBub3QgdHJ5IHRvCisJICogdXNlIG90aGVyIHB1YmxpYyBtZW1iZXIgaW50ZXJmYWNlIGlmIGVycm9yKCkgcmV0dXJuIG5vbi16ZXJvICovCisJY2hpbGRfcmVhZGVyKHN0ZDo6c3RyaW5nIGNvbnN0ICYgY21kLAorCQlzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uc3QgJiBhcmdzKTsKKworCS8qKiB3YWl0IGZvciB0aGUgdGVybWluYXRpb24gb2YgdGhlIGNoaWxkIHByb2Nlc3MgaWYgdGhpcyBoYXZlIG5vdAorCSAqIGFscmVhZHkgb2NjdXIuIEluIHRoaXMgY2FzZSByZXR1cm4gY29kZSBvZiB0aGUgY2hpbGQgcHJvY2VzcyBpcyBub3QKKwkgKiBhdmFpbGFibGUuICovCisJfmNoaWxkX3JlYWRlcigpOworCisJLyoqIGZpbGwgcmVzdWx0IGZyb20gb24gbGluZSBvZiBzdGRvdXQgb2YgdGhlIGNoaWxkIHByb2Nlc3MuCisJICogbXVzdCBiZSB1c2VkIGFzOgorCSAqIGNoaWxkX3JlYWRlciByZWFkZXIoLi4uKTsKKwkgKiB3aGlsZSAocmVhZGVyLmdldGxpbmUobGluZSkpIC4uLi4gKi8KKwlib29sIGdldGxpbmUoc3RkOjpzdHJpbmcgJiByZXN1bHQpOworCisJLyoqIGZpbGwgb3V0IC8gZXJyIHdpdGggdGhlIHN0ZG91dCAvIHN0ZGVyciBvZiB0aGUgY2hpbGQgcHJvY2Vzcy4KKwkgKiBZb3UgY2FuIGNhbGwgdGhpcyBhZnRlciBjYWxsaW5nIG9uZSBvciBtb3JlIHRpbWUgZ2V0bGluZSguLi4pLiBUaGlzCisJICogY2FsbCBpcyBibG9ja2luZyB1bnRpbCB0aGUgY2hpbGQgZGllIGFuZCBzbyBvbiBhbGwgc3Vic2VxdWVudAorCSAqIGNhbGwgd2lsbCBmYWlsICovCisJYm9vbCBnZXRfZGF0YShzdGQ6Om9zdHJlYW0gJiBvdXQsIHN0ZDo6b3N0cmVhbSAmIGVycik7CisKKwkvKiogcmF0aGVyIHRvIHJlbHkgb24gZHRvciB0byB3YWl0IGZvciB0aGUgdGVybWluYXRpb24gb2YgdGhlIGNoaWxkIHlvdQorCSAqIGNhbiB1c2UgdGVybWluYXRlX3Byb2Nlc3MoKSB0byBnZXQgdGhlIHJldHVybiBjb2RlIG9mIHRoZSBjaGlsZAorCSAqIHByb2Nlc3MgKi8KKwlpbnQgdGVybWluYXRlX3Byb2Nlc3MoKTsKKworCS8qKiByZXR1cm4gdGhlIHN0YXR1cyBvZiB0aGUgZmlyc3QgZXJyb3IgZW5jb3V0ZXJlZAorCSAqICE9IDAgOiBzb21ldGhpbmcgZmVlbCB3cm9uZywgdXNlIGVycm9yX3N0cigpIHRvIGdldCBhbiBlcnJvcgorCSAqIG1lc3NhZ2UgKi8KKwlpbnQgZXJyb3IoKSBjb25zdCB7IHJldHVybiBmaXJzdF9lcnJvcjsgfQorCisJLyoqCisJICogcmV0dXJuIGFuIGVycm9yIG1lc3NhZ2UgaWYgYXBwcm9wcmlhdGUsIGlmIHRoZSBwcm9jZXNzIGhhcworCSAqIGJlZW4gc3VjY2Vzc2Z1bGx5IGV4ZWMnZWQgYW5kIGlzIG5vdCB0ZXJtaW5hdGUgdGhlIGVycm9yIG1lc3NhZ2UKKwkgKiBpcyBhbHdheXMgZW1wdHkuIEVycm9yIG1lc3NhZ2UgaXMgYWxzbyBlbXB0eSBpZiB0aGUgY2hpbGQgcHJvY2VzcworCSAqIHRlcm1pbmF0ZSBzdWNjZXNzZnVsbHkuIEVsc2UgdGhyZWUgdHlwZSBvZiBlcnJvciBtZXNzYWdlIGV4aXN0OgorCSAqICAtICJ1bmFibGUgdG8gZm9yayIgZm9sbG93ZWQgYnkgc3RlcnJvcihlcnJubykKKwkgKiAgLSAicHJvY2Vzc19uYW1lIHJldHVybiB4eHgiICB4eHggaXMgcmV0dXJuIGNvZGUKKwkgKiAgLSAicHJvY2Vzc19uYW1lIHRlcm1pbmF0ZWQgYnkgc2lnbmFsIHh4eCIgeHh4IGlzIHNpZ25hbCBudW1iZXIKKwkgKi8KKwlzdGQ6OnN0cmluZyBlcnJvcl9zdHIoKSBjb25zdDsKKworcHJpdmF0ZToKKwkvLyBjdG9yIGhlbHBlcjogY3JlYXRlIHRoZSBjaGlsZCBwcm9jZXNzLgorCXZvaWQgZXhlY19jb21tYW5kKHN0ZDo6c3RyaW5nIGNvbnN0ICYgY21kLAorCQkJICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uc3QgJiBhcmdzKTsKKwkvLyByZXR1cm4gZmFsc2Ugd2hlbiBlb2YgY29uZGl0aW9uIGlzIHJlYWNoZWQgb24gZmQxLiBmZDIgY2FuIGhhdmUKKwkvLyBhbHJlYWR5IGlucHV0IGluIHRoZSBwaXBlIGJ1ZmZlciBvciBpbiBidWYyLgorCWJvb2wgYmxvY2tfcmVhZCgpOworCisJaW50IGZkMTsKKwlpbnQgZmQyOworCXNzaXplX3QgcG9zMTsKKwlzc2l6ZV90IGVuZDE7CisJc3NpemVfdCBwb3MyOworCXNzaXplX3QgZW5kMjsKKwlwaWRfdCBwaWQ7CisJaW50IGZpcnN0X2Vycm9yOworCS8vIGNoaWxkIHN0ZGVyciBpcyBoYW5kbGVkIGVzcGVjaWFsbHksIHdlIG5lZWQgdG8gcmV0YWluIGRhdGEgZXZlbgorCS8vIGlmIGNhbGxlciByZWFkIG9ubHkgc3Rkb3V0IG9mIHRoZSBjaGlsZC4KKwljaGFyICogYnVmMjsKKwlzc2l6ZV90IHN6X2J1ZjI7CisJY2hhciAqIGJ1ZjE7CisJc3RkOjpzdHJpbmcgcHJvY2Vzc19uYW1lOworCWJvb2wgaXNfdGVybWluYXRlZDsKKwlib29sIHRlcm1pbmF0ZV9vbl9leGNlcHRpb247CisJYm9vbCBmb3JrZWQ7Cit9OworCisjZW5kaWYgLy8gQ0hJTERfUkVBREVSX0gKZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2xpYnV0aWwrKy9jb21tYV9saXN0LmggYi9vcHJvZmlsZS0wLjkuNy9saWJ1dGlsKysvY29tbWFfbGlzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4NjhlZTAKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9saWJ1dGlsKysvY29tbWFfbGlzdC5oCkBAIC0wLDAgKzEsMTAyIEBACisvKioKKyAqIEBmaWxlIGNvbW1hX2xpc3QuaAorICogQ29udGFpbmVyIGhvbGRpbmcgaXRlbXMgZnJvbSBhIGxpc3Qgb2YgY29tbWEgc2VwYXJhdGVkIGl0ZW1zCisgKgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMyBPUHJvZmlsZSBhdXRob3JzCisgKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORworICoKKyAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQorICovCisKKyNpZm5kZWYgQ09NTUFfTElTVF9ICisjZGVmaW5lIENPTU1BX0xJU1RfSAorCisjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHZlY3Rvcj4KKworI2luY2x1ZGUgInN0cmluZ19tYW5pcC5oIgorCisvKioKKyAqIGhvbGQgYSBsaXN0IG9mIGl0ZW0gb2YgdHlwZSBULCB0cmFja2luZyBhbHNvIGlmIGl0ZW0gaGFzIGJlZW4gc2V0LgorICovCit0ZW1wbGF0ZSA8Y2xhc3MgVD4KK2NsYXNzIGNvbW1hX2xpc3QKK3sKK3B1YmxpYzoKKwljb21tYV9saXN0KCk7CisKKwkvKioKKwkgKiBAcGFyYW0gc3RyICBsaXN0IG9mIGNvbW1hIHNlcGFyYXRlZCBpdGVtCisJICoKKwkgKiBzZXR1cCBpdGVtcyBhcnJheSBhY2NvcmRpbmcgdG8gc3RyIHBhcmFtZXRlcnMuIEltcGxlbWVudCBQUDozLjE3CisJICogdy9vIHJlc3RyaWN0aW9uIG9uIGNoYXJzZXQgYW5kIHdpdGggdGhlIHNwZWNpYWwgc3RyaW5nIGFsbCB3aGljaAorCSAqIG1hdGNoIGFueXRoaW5nLgorCSAqLworCXZvaWQgc2V0KHN0ZDo6c3RyaW5nIGNvbnN0ICYgc3RyKTsKKworCS8vLyByZXR1cm4gdHJ1ZSBpZiBhIHNwZWNpZmljIHZhbHVlIGlzIGhlbGQgYnkgdGhpcyBjb250YWluZXIKKwlib29sIGlzX3NldCgpIGNvbnN0IHsKKwkJcmV0dXJuICFpc19hbGw7CisJfQorCisJLyoqCisJICogQHBhcmFtIHZhbHVlICB0aGUgdmFsdWUgdG8gdGVzdAorCSAqCisJICogcmV0dXJuIHRydWUgaWYgdmFsdWUgbWF0Y2ggb25lIHRoZSBzdG9yZWQgdmFsdWUgaW4gaXRlbXMKKwkgKi8KKwlib29sIG1hdGNoKFQgY29uc3QgJiB2YWx1ZSkgY29uc3Q7CisKK3ByaXZhdGU6CisJdHlwZWRlZiBUIHZhbHVlX3R5cGU7CisJdHlwZWRlZiBzdGQ6OnZlY3Rvcjx2YWx1ZV90eXBlPiBjb250YWluZXJfdHlwZTsKKwl0eXBlZGVmIHR5cGVuYW1lIGNvbnRhaW5lcl90eXBlOjpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKKwlib29sIGlzX2FsbDsKKwljb250YWluZXJfdHlwZSBpdGVtczsKK307CisKKwordGVtcGxhdGUgPGNsYXNzIFQ+Citjb21tYV9saXN0PFQ+Ojpjb21tYV9saXN0KCkKKwk6IGlzX2FsbCh0cnVlKQoreworfQorCisKK3RlbXBsYXRlIDxjbGFzcyBUPgordm9pZCBjb21tYV9saXN0PFQ+OjpzZXQoc3RkOjpzdHJpbmcgY29uc3QgJiBzdHIpCit7CisJaXRlbXMuY2xlYXIoKTsKKworCWlzX2FsbCA9IGZhbHNlOworCisJc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHJlc3VsdCA9IHNlcGFyYXRlX3Rva2VuKHN0ciwgJywnKTsKKwlmb3IgKHNpemVfdCBpID0gMCA7IGkgPCByZXN1bHQuc2l6ZSgpIDsgKytpKSB7CisJCWlmIChyZXN1bHRbaV0gPT0gImFsbCIpIHsKKwkJCWlzX2FsbCA9IHRydWU7CisJCQlpdGVtcy5jbGVhcigpOworCQkJYnJlYWs7CisJCX0KKwkJaXRlbXMucHVzaF9iYWNrKG9wX2xleGljYWxfY2FzdDxUPihyZXN1bHRbaV0pKTsKKwl9Cit9CisKKwordGVtcGxhdGUgPGNsYXNzIFQ+Citib29sIGNvbW1hX2xpc3Q8VD46Om1hdGNoKFQgY29uc3QgJiB2YWx1ZSkgY29uc3QKK3sKKwlpZiAoaXNfYWxsKQorCQlyZXR1cm4gdHJ1ZTsKKworCWNvbnN0X2l0ZXJhdG9yIGNpdCA9IGl0ZW1zLmJlZ2luKCk7CisJY29uc3RfaXRlcmF0b3IgY29uc3QgZW5kID0gaXRlbXMuZW5kKCk7CisKKwlmb3IgKDsgY2l0ICE9IGVuZDsgKytjaXQpIHsKKwkJaWYgKHZhbHVlID09ICpjaXQpCisJCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKKworI2VuZGlmIC8qICFDT01NQV9MSVNUX0ggKi8KZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2xpYnV0aWwrKy9jdmVyYi5jcHAgYi9vcHJvZmlsZS0wLjkuNy9saWJ1dGlsKysvY3ZlcmIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1MGFhNTUKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9saWJ1dGlsKysvY3ZlcmIuY3BwCkBAIC0wLDAgKzEsMTIzIEBACisvKioKKyAqIEBmaWxlIGN2ZXJiLmNwcAorICogdmVyYm9zZSBvdXRwdXQgc3RyZWFtCisgKgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMiwgMjAwNCAgT1Byb2ZpbGUgYXV0aG9ycworICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKKyAqCisgKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKKyAqIEBhdXRob3IgSm9obiBMZXZvbgorICovCisKKyNpbmNsdWRlIDxjc3RyaW5nPgorCisjaW5jbHVkZSA8ZnN0cmVhbT4KKyNpbmNsdWRlIDxpb3N0cmVhbT4KKyNpbmNsdWRlIDxtYXA+CisjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPGNzdHJpbmc+CisKKyNpbmNsdWRlICJjdmVyYi5oIgorCit1c2luZyBuYW1lc3BhY2Ugc3RkOworCitjdmVyYl9vYmplY3QgY3ZlcmI7Cit2ZXJib3NlIHZsZXZlbDEoImxldmVsMSIpOwordmVyYm9zZSB2ZGVidWcoImRlYnVnIik7Cit2ZXJib3NlIHZzdGF0cygic3RhdHMiKTsKK3ZlcmJvc2UgdnNmaWxlKCJzZmlsZSIpOwordmVyYm9zZSB2eG1sKCJ4bWwiKTsKKworbmFtZXNwYWNlIHsKKworLy8gVGhlIHJpZ2h0IHdheSBpcyB0byB1c2U6IG9mc3RyZWFtIGZvdXQ7IGJ1dCBjdmVyYihmb3V0LnJkYnVmKCkpIHJlY2VpdmUKKy8vIGEgbnVsbCBwb2ludGVyIGFuZCBzdGwgc2hpcHBlZCB3aXRoIDIuOTEgc2VnZmF1bHQuCitvZnN0cmVhbSBmb3V0KCIvZGV2L251bGwiKTsKK29zdHJlYW0gbnVsbF9zdHJlYW0oZm91dC5yZGJ1ZigpKTsKKworLy8gVXNlZCB0byBzZXR1cCB0aGUgYmFkIGJpdCBpbiBvdXIgbnVsbCBzdHJlYW0gc28gb3V0cHV0IHdpbGwgZmFpbCBlYXJsaWVyCisvLyBhbmQgb3ZlcmhlYWQgd2lsbCBiZSBzbWFsbGVyLgorc3RydWN0IHNldHVwX3N0cmVhbSB7CisJc2V0dXBfc3RyZWFtKCk7Cit9OworCitzZXR1cF9zdHJlYW06OnNldHVwX3N0cmVhbSgpCit7CisJbnVsbF9zdHJlYW0uY2xlYXIoaW9zOjpiYWRiaXQpOworfQorCitzZXR1cF9zdHJlYW0gc2V0dXA7CisKKy8vIFdlIHVzZSBhIG11bHRpbWFwIGJlY2F1c2UgdXNlciBjYW4gY3JlYXRlIG11bHRpcGxlIHZlcmJvc2Ugb2JqZWN0IHdpdGgKKy8vIHRoZSBzYW1lIG5hbWUsIHRoZXNlIGFyZSBzeW5vbnltb3VzLCBzZXR0aW5nIHVwIG9uZSB0byB0cnVlIHdpbGwgc2V0dXAKKy8vIGFsbCB3aXRoIHRoZSBzYW1lIG5hbWUgdG8gdHJ1ZS4KK3R5cGVkZWYgbXVsdGltYXA8c3RyaW5nLCB2ZXJib3NlICo+IHJlY29yZGVyX3Q7CisvLyBUaGUgcmVjb3JkZXIgaXMgbGF6aWxseSBjcmVhdGVkIGJ5IHZlcmJvc2Ugb2JqZWN0IGN0b3IKK3N0YXRpYyByZWNvcmRlcl90ICogb2JqZWN0X21hcDsKKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKKwordmVyYm9zZTo6dmVyYm9zZShjaGFyIGNvbnN0ICogbmFtZSkKKwk6CisJc2V0KGZhbHNlKQoreworCS8vIGFsbCBwYXJhbXMgaXMgdHJlYXRlZCBhIHBhcnQsIHRoZXJlIGlzIG5vIG5lZWQgdG8gY3JlYXRlIGEKKwkvLyB2ZXJib3NlIGFsbCgiYWxsIik7IGl0J3MgbWVhbmluZ2xlc3MuICJhbGwiIHZlcmJvc2UgbmFtZWQgb2JqZWN0IGlzCisJLy8gcmVzZXJ2ZWQuCisJaWYgKHN0cmNtcChuYW1lLCAiYWxsIikgPT0gMCkKKwkJcmV0dXJuOworCWlmICghb2JqZWN0X21hcCkKKwkJb2JqZWN0X21hcCA9IG5ldyByZWNvcmRlcl90OworCW9iamVjdF9tYXAtPmluc2VydChyZWNvcmRlcl90Ojp2YWx1ZV90eXBlKG5hbWUsIHRoaXMpKTsKK30KKworCit2ZXJib3NlIHZlcmJvc2U6Om9wZXJhdG9yfCh2ZXJib3NlIGNvbnN0ICYgcmhzKQoreworCXZlcmJvc2UgcmVzdWx0KCp0aGlzKTsKKwlyZXN1bHQuc2V0ID0gcmVzdWx0LnNldCB8fCByaHMuc2V0OworCXJldHVybiByZXN1bHQ7Cit9CisKKwordmVyYm9zZSB2ZXJib3NlOjpvcGVyYXRvciYodmVyYm9zZSBjb25zdCAmIHJocykKK3sKKwl2ZXJib3NlIHJlc3VsdCgqdGhpcyk7CisJcmVzdWx0LnNldCA9IHJlc3VsdC5zZXQgJiYgcmhzLnNldDsKKwlyZXR1cm4gcmVzdWx0OworfQorCisKK2Jvb2wgdmVyYm9zZTo6c2V0dXAoc3RyaW5nIGNvbnN0ICYgbmFtZSkKK3sKKwlpZiAobmFtZSA9PSAiYWxsIikgeworCQludWxsX3N0cmVhbS5yZGJ1Zihjb3V0LnJkYnVmKCkpOworCQludWxsX3N0cmVhbS5jbGVhcigpOworCQlyZXR1cm4gdHJ1ZTsKKwl9CisJaWYgKCFvYmplY3RfbWFwKQorCQlvYmplY3RfbWFwID0gbmV3IHJlY29yZGVyX3Q7CisJcGFpcjxyZWNvcmRlcl90OjppdGVyYXRvciwgcmVjb3JkZXJfdDo6aXRlcmF0b3I+IHBfaXQgPQorCQlvYmplY3RfbWFwLT5lcXVhbF9yYW5nZShuYW1lKTsKKwlpZiAocF9pdC5maXJzdCA9PSBwX2l0LnNlY29uZCkKKwkJcmV0dXJuIGZhbHNlOworCWZvciAoOyBwX2l0LmZpcnN0ICE9IHBfaXQuc2Vjb25kOyArK3BfaXQuZmlyc3QpCisJCXBfaXQuZmlyc3QtPnNlY29uZC0+c2V0ID0gdHJ1ZTsKKwlyZXR1cm4gdHJ1ZTsKK30KKworCitib29sIHZlcmJvc2U6OnNldHVwKHZlY3RvcjxzdHJpbmc+IGNvbnN0ICYgbmFtZXMpCit7CisJZm9yIChzaXplX3QgaSA9IDA7IGkgPCBuYW1lcy5zaXplKCk7ICsraSkKKwkJaWYgKCFzZXR1cChuYW1lc1tpXSkpCisJCQlyZXR1cm4gZmFsc2U7CisJcmV0dXJuIHRydWU7Cit9CisKKworb3N0cmVhbSYgb3BlcmF0b3I8PChjdmVyYl9vYmplY3QgJiwgdmVyYm9zZSBjb25zdCAmIHYpCit7CisJcmV0dXJuIHYuc2V0ID8gY291dCA6IG51bGxfc3RyZWFtOworfQpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvbGlidXRpbCsrL2N2ZXJiLmggYi9vcHJvZmlsZS0wLjkuNy9saWJ1dGlsKysvY3ZlcmIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDVjNTI4Ci0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvbGlidXRpbCsrL2N2ZXJiLmgKQEAgLTAsMCArMSw4MyBAQAorLyoqCisgKiBAZmlsZSBjdmVyYi5oCisgKiB2ZXJib3NlIG91dHB1dCBzdHJlYW0KKyAqCisgKiBAcmVtYXJrIENvcHlyaWdodCAyMDAyLCAyMDA0IE9Qcm9maWxlIGF1dGhvcnMKKyAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCisgKgorICogQGF1dGhvciBQaGlsaXBwZSBFbGllCisgKiBAYXV0aG9yIEpvaG4gTGV2b24KKyAqLworCisjaWZuZGVmIENWRVJCX0gKKyNkZWZpbmUgQ1ZFUkJfSAorCisjaW5jbHVkZSA8aW9zZndkPgorI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDx2ZWN0b3I+CisKK3N0cnVjdCBjdmVyYl9vYmplY3QgeyB9OworCisvKioKKyAqIHZlcmJvc2Ugb2JqZWN0LCBhbGwgb3V0cHV0IHRocm91Z2ggdGhpcyBzdHJlYW0gYXJlIG1hZGUgb25seQorICogaWYgYSB2ZXJib3NlIG9iamVjdCB3aXRoIGEgdHJ1ZSBzdGF0ZSBpcyBpbmplY3RlZCBpbiB0aGUgc3RyZWFtLgorICovCitleHRlcm4gY3ZlcmJfb2JqZWN0IGN2ZXJiOworCisvKioKKyAqIHR5cGljYWwgdXNlOgorICogZGVjbGFyZSBzb21lIHZlcmJvc2UgZ2xvYmFsIG9iamVjdDoKKyAqIHZlcmJvc2UgZGVidWcoImRlYnVnIik7CisgKiB2ZXJib3NlIHN0YXRzKCJzdGF0cyIpOworICogdmVyYm9zZSBsZXZlbDIoImxldmVsMiIpOworICoKKyAqIHNldHVwIGZyb20gY29tbWFuZCBsaW5lIHRoZSBzdGF0ZSBvZiB0aGVzZSBvYmplY3RzCisgKgorICogdmVyYm9zZTo6c2V0dXAoY29tbWFuZF9saW5lX2FyZ3NfdG8nLS12ZXJib3NlPScpOworICoKKyAqIGN2ZXJiIDw8IHN0YXRzIDw8ICJzdGF0c1xuIjsKKyAqIGN2ZXJiIDw8IChzdGF0cyZsZXZlbDIpIDw8ICJ2ZXJ5IHZlcmJvc2Ugc3RhdHNcbiIKKyAqIGN2ZXJiIDw8IChzdGF0c3xkZWJ1ZykgPDwgImJhclxuIjsKKyAqIHRoZXNlIHdpbGwgZ2l2ZSBhIGNvbXBpbGUgdGltZSBlcnJvcgorICogY3ZlcmIgPDwgc3RhdHMgPDwgImZvbyIgPDwgZGVidWcgPDwgImJhciI7IAorICogY291dCA8PCBzdGF0cyA8PCAiZm9vIjsKKyAqCisgKiBJbiBjcml0aWNhbCBjb2RlIHBhdGggY3ZlcmIgY2FuIGJlIHVzZWQgaW4gdGhlIG1vcmUgZWZmaWNpZW50IHdheToKKyAqIGlmIChjdmVyYiA8PCB2ZGVidWcpCisgKiAgICBjdmVyYiA8PCB2ZGVidWcgPDwgImZvbyIgPDwgImJhciI7CisgKiB0aGUgY29uZGl0aW9uIHRlc3QgdGhlIGZhaWxzIGJpdCBmb3IgdGhlIHJldHVybmVkIHN0cmVhbSB3aGlsZSB0aGUgbGF0ZXIKKyAqIGJ1aWxkIGEgc2VudHJ5IG9iamVjdCBmb3IgZWFjaCA8PCAobW9yZSBlZmZpY2llbnQgZXZlbiB3aXRoIG9uZSBsZXZlbCBvZiA8PCkKKyAqLworY2xhc3MgdmVyYm9zZSB7CisJLy8vIFRoZSByZXR1cm5lZCBzdHJlYW0gaXMgZWl0aGVyIGEgbnVsbCBzdHJlYW0gb3IgY291dC4KKwlmcmllbmQgc3RkOjpvc3RyZWFtICYgb3BlcmF0b3I8PChjdmVyYl9vYmplY3QgJiwgdmVyYm9zZSBjb25zdCAmKTsKK3B1YmxpYzoKKwkvKioKKwkgKiBjcmVhdGUgYSB2ZXJib3NlIG9iamVjdCBuYW1lZCBuYW1lLCB0aGUgY3RvciBhdXRvLXJlZ2lzdGVyIG5hbWUKKwkgKiBhcyBhIHZlcmJvc2Ugb2JqZWN0LCB0aGUgc2V0IHN0YXRlIGNhbiBiZSBpbnRpYWxpemVkIHRocm91Z2gKKwkgKiB2ZXJib3NlOjpzZXR1cChuYW1lKQorCSAqLworCXZlcmJvc2UoY2hhciBjb25zdCAqIG5hbWUpOworCisJdmVyYm9zZSBvcGVyYXRvcnwodmVyYm9zZSBjb25zdCAmKTsKKwl2ZXJib3NlIG9wZXJhdG9yJih2ZXJib3NlIGNvbnN0ICYpOworCisJLy8vIFJldHVybiBmYWxzZSBpZiB0aGlzIG5hbWVkIHZlcmJvc2Ugb2JqZWN0IGhhcyBub3QgYmUgcmVnaXN0cmVkLgorCXN0YXRpYyBib29sIHNldHVwKHN0ZDo6c3RyaW5nIGNvbnN0ICYpOworCS8vLyBjb252ZW5pZW50IGludGVyZmFjZSBjYWxsaW5nIHRoZSBhYm92ZSBmb3Igc3RyaW5nIGluIGFyZ3MKKwlzdGF0aWMgYm9vbCBzZXR1cChzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uc3QgJiBhcmdzKTsKK3ByaXZhdGU6CisJYm9vbCBzZXQ7Cit9OworCisvKioKKyAqIHByZWRlZmluZWQgZ2VuZXJhbCBwdXJwb3NlIHZlcmJvc2Ugb2JqZWN0LCBjb21tZW50IGdpdmUgdGhlaXIgbmFtZXMKKyAqLworZXh0ZXJuIHZlcmJvc2UgdmxldmVsMTsgLyoqPCBuYW1lZCAibGV2ZWwxIiAqLworZXh0ZXJuIHZlcmJvc2UgdmRlYnVnOyAgLyoqPCBuYW1lZCAiZGVidWciICAqLworZXh0ZXJuIHZlcmJvc2UgdnN0YXRzOyAgLyoqPCBuYW1lZCAic3RhdHMiICAqLworLy8gYWxsIHNhbXBsZSBmaWxlbmFtZSBtYW5pcHVsYXRpb24uCitleHRlcm4gdmVyYm9zZSB2c2ZpbGU7ICAvKio8IG5hbWVkICJzZmlsZSIgKi8KK2V4dGVybiB2ZXJib3NlIHZ4bWw7ICAvKio8IG5hbWVkICJ4bWwiICovCisKKyNlbmRpZiAvKiAhQ1ZFUkJfSCAqLwpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvbGlidXRpbCsrL2ZpbGVfbWFuaXAuY3BwIGIvb3Byb2ZpbGUtMC45LjcvbGlidXRpbCsrL2ZpbGVfbWFuaXAuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlYzc0NzMKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9saWJ1dGlsKysvZmlsZV9tYW5pcC5jcHAKQEAgLTAsMCArMSwxODEgQEAKKy8qKgorICogQGZpbGUgZmlsZV9tYW5pcC5jcHAKKyAqIFVzZWZ1bCBmaWxlIG1hbmFnZW1lbnQgaGVscGVycworICoKKyAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDIgT1Byb2ZpbGUgYXV0aG9ycworICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKKyAqCisgKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKKyAqIEBhdXRob3IgSm9obiBMZXZvbgorICovCisKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8dXRpbWUuaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworI2luY2x1ZGUgPGNzdGRpbz4KKyNpbmNsdWRlIDxjZXJybm8+CisjaW5jbHVkZSA8aW9zdHJlYW0+CisjaW5jbHVkZSA8ZnN0cmVhbT4KKyNpbmNsdWRlIDx2ZWN0b3I+CisKKyNpbmNsdWRlICJvcF9maWxlLmgiCisKKyNpbmNsdWRlICJmaWxlX21hbmlwLmgiCisjaW5jbHVkZSAic3RyaW5nX21hbmlwLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisKKworYm9vbCBjb3B5X2ZpbGUoc3RyaW5nIGNvbnN0ICYgc291cmNlLCBzdHJpbmcgY29uc3QgJiBkZXN0aW5hdGlvbikKK3sKKwlpbnQgcmV0dmFsOworCXN0cnVjdCBzdGF0IGJ1ZjsKKwlpZiAoc3RhdChzb3VyY2UuY19zdHIoKSwgJmJ1ZikpCisJCXJldHVybiBmYWxzZTsKKworCWlmICghb3BfZmlsZV9yZWFkYWJsZShzb3VyY2UpKQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZnN0cmVhbSBpbihzb3VyY2UuY19zdHIoKSk7CisJaWYgKCFpbikKKwkJcmV0dXJuIGZhbHNlOworCisJbW9kZV90IG1vZGUgPSBidWYuc3RfbW9kZSAmIH5TX0lGTVQ7CisJaWYgKCEobW9kZSAmIFNfSVdVU1IpKQorCQltb2RlIHw9IFNfSVdVU1I7CisKKwlpbnQgZmQgPSBvcGVuKGRlc3RpbmF0aW9uLmNfc3RyKCksIE9fUkRXUnxPX0NSRUFULCBtb2RlKTsKKwlpZiAoZmQgPCAwKQorCQlyZXR1cm4gZmFsc2U7CisJY2xvc2UoZmQpOworCisKKwkvLyBpZ25vcmUgZXJyb3IgaGVyZTogYSBzaW1wbGUgdXNlciBjYW4gY29weSBhIHJvb3Qucm9vdCA3NDQgZmlsZQorCS8vIGJ1dCBjYW4ndCBjaG93biB0aGUgY29waWVkIGZpbGUgdG8gcm9vdC4KKwlyZXR2YWwgPSBjaG93bihkZXN0aW5hdGlvbi5jX3N0cigpLCBidWYuc3RfdWlkLCBidWYuc3RfZ2lkKTsKKworCS8vIGEgc2NvcGUgdG8gZW5zdXJlIG91dCBpcyBjbG9zZWQgYmVmb3JlIGNoYW5naW5nIGlzIG10aW1lL2F0aW1lCisJeworCW9mc3RyZWFtIG91dChkZXN0aW5hdGlvbi5jX3N0cigpLCBpb3M6OnRydW5jKTsKKwlpZiAoIW91dCkKKwkJcmV0dXJuIGZhbHNlOworCW91dCA8PCBpbi5yZGJ1ZigpOworCX0KKworCXN0cnVjdCB1dGltYnVmIHV0aW07CisJdXRpbS5hY3RpbWUgPSBidWYuc3RfYXRpbWU7CisJdXRpbS5tb2R0aW1lID0gYnVmLnN0X210aW1lOworCWlmICh1dGltZShkZXN0aW5hdGlvbi5jX3N0cigpLCAmdXRpbSkpCisJCXJldHVybiBmYWxzZTsKKworCXJldHVybiB0cnVlOworfQorCisKK2Jvb2wgaXNfZGlyZWN0b3J5KHN0cmluZyBjb25zdCAmIGRpcm5hbWUpCit7CisJc3RydWN0IHN0YXQgc3Q7CisJcmV0dXJuICFzdGF0KGRpcm5hbWUuY19zdHIoKSwgJnN0KSAmJiBTX0lTRElSKHN0LnN0X21vZGUpOworfQorCisKK2Jvb2wgaXNfZmlsZXNfaWRlbnRpY2FsKHN0cmluZyBjb25zdCAmIGZpbGUxLCBzdHJpbmcgY29uc3QgJiBmaWxlMikKK3sKKwlzdHJ1Y3Qgc3RhdCBzdDE7CisJc3RydWN0IHN0YXQgc3QyOworCisJaWYgKHN0YXQoZmlsZTEuY19zdHIoKSwgJnN0MSkgPT0gMCAmJiBzdGF0KGZpbGUyLmNfc3RyKCksICZzdDIpID09IDApIHsKKwkJaWYgKHN0MS5zdF9kZXYgPT0gc3QyLnN0X2RldiAmJiBzdDEuc3RfaW5vID09IHN0Mi5zdF9pbm8pCisJCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKKworc3RyaW5nIGNvbnN0IG9wX3JlYWxwYXRoKHN0cmluZyBjb25zdCAmIG5hbWUpCit7CisJc3RhdGljIGNoYXIgdG1wW1BBVEhfTUFYXTsKKwlpZiAoIXJlYWxwYXRoKG5hbWUuY19zdHIoKSwgdG1wKSkKKwkJcmV0dXJuIG5hbWU7CisJcmV0dXJuIHN0cmluZyh0bXApOworfQorCisKK2Jvb2wgb3BfZmlsZV9yZWFkYWJsZShzdHJpbmcgY29uc3QgJiBmaWxlKQoreworCXJldHVybiBvcF9maWxlX3JlYWRhYmxlKGZpbGUuY19zdHIoKSk7Cit9CisKK3N0YXRpYyB2b2lkIGdldF9wYXRobmFtZShjb25zdCBjaGFyICogcGF0aG5hbWUsIHZvaWQgKiBuYW1lX2xpc3QpCit7CisJbGlzdDxzdHJpbmc+ICogZmlsZV9saXN0ID0gKGxpc3Q8c3RyaW5nPiAqKW5hbWVfbGlzdDsKKwlmaWxlX2xpc3QtPnB1c2hfYmFjayhwYXRobmFtZSk7Cit9CisKK2Jvb2wgY3JlYXRlX2ZpbGVfbGlzdChsaXN0PHN0cmluZz4gJiBmaWxlX2xpc3QsIHN0cmluZyBjb25zdCAmIGJhc2VfZGlyLAorCQkgICAgICBzdHJpbmcgY29uc3QgJiBmaWx0ZXIsIGJvb2wgcmVjdXJzaXZlKQoreworCXJldHVybiAhZ2V0X21hdGNoaW5nX3BhdGhuYW1lcygmZmlsZV9saXN0LCBnZXRfcGF0aG5hbWUsCisJCQkJICAgICAgIGJhc2VfZGlyLmNfc3RyKCksIGZpbHRlci5jX3N0cigpLAorCQkJCSAgICAgICByZWN1cnNpdmUgPyBNQVRDSF9BTllfRU5UUllfUkVDVVJTSU9OIDoKKwkJCQkgICAgICAgTk9fUkVDVVJTSU9OKSA/IHRydWUgOiBmYWxzZTsKKyAKK30KKworCisvKioKKyAqIEBwYXJhbSBwYXRoX25hbWUgdGhlIHBhdGggd2hlcmUgd2UgcmVtb3ZlIHRyYWlsaW5nICcvJworICoKKyAqIGVyYXNlIGFsbCB0cmFpbGluZyAnLycgaW4gcGF0aF9uYW1lIGV4Y2VwdCBpZiB0aGUgbGFzdCAnLycgaXMgYXQgcG9zIDAKKyAqLworc3RhdGljIHN0cmluZyBlcmFzZV90cmFpbGluZ19wYXRoX3NlcGFyYXRvcihzdHJpbmcgY29uc3QgJiBwYXRoX25hbWUpCit7CisJc3RyaW5nIHJlc3VsdChwYXRoX25hbWUpOworCisJd2hpbGUgKHJlc3VsdC5sZW5ndGgoKSA+IDEpIHsKKwkJaWYgKHJlc3VsdFtyZXN1bHQubGVuZ3RoKCkgLSAxXSAhPSAnLycpCisJCQlicmVhazsKKwkJcmVzdWx0LmVyYXNlKHJlc3VsdC5sZW5ndGgoKSAtIDEsIDEpOworCX0KKworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0cmluZyBvcF9kaXJuYW1lKHN0cmluZyBjb25zdCAmIGZpbGVfbmFtZSkKK3sKKwlzdHJpbmcgcmVzdWx0ID0gZXJhc2VfdHJhaWxpbmdfcGF0aF9zZXBhcmF0b3IoZmlsZV9uYW1lKTsKKwlpZiAocmVzdWx0LmZpbmRfZmlyc3Rfb2YoJy8nKSA9PSBzdHJpbmc6Om5wb3MpCisJCXJldHVybiAiLiI7IAkgCisgIAkgCisJLy8gY2F0Y2ggcmVzdWx0ID09ICIvIiAJIAorCWlmIChyZXN1bHQubGVuZ3RoKCkgPT0gMSkgCSAKKwkJcmV0dXJuIHJlc3VsdDsKKworCXNpemVfdCBwb3MgPSByZXN1bHQuZmluZF9sYXN0X29mKCcvJyk7IAkgCisKKwkvLyAiL3VzciIgbXVzdCByZXR1cm4gIi8iIAkgCisJaWYgKHBvcyA9PSAwKSAJIAorCQlwb3MgPSAxOyAJIAorCisJcmVzdWx0LmVyYXNlKHBvcywgcmVzdWx0Lmxlbmd0aCgpIC0gcG9zKTsgCSAKKworCS8vICIvLy8vdXNyIiBtdXN0IHJldHVybiAiLyIKKwlyZXR1cm4gZXJhc2VfdHJhaWxpbmdfcGF0aF9zZXBhcmF0b3IocmVzdWx0KTsKK30KKworCitzdHJpbmcgb3BfYmFzZW5hbWUoc3RyaW5nIGNvbnN0ICYgcGF0aF9uYW1lKQoreworCXN0cmluZyByZXN1bHQgPSBlcmFzZV90cmFpbGluZ19wYXRoX3NlcGFyYXRvcihwYXRoX25hbWUpOworCisJLy8gY2F0Y2ggcmVzdWx0ID09ICIvIgorCWlmIChyZXN1bHQubGVuZ3RoKCkgPT0gMSkKKwkJcmV0dXJuIHJlc3VsdDsKKworCXJldHVybiBlcmFzZV90b19sYXN0X29mKHJlc3VsdCwgJy8nKTsKK30KZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2xpYnV0aWwrKy9maWxlX21hbmlwLmggYi9vcHJvZmlsZS0wLjkuNy9saWJ1dGlsKysvZmlsZV9tYW5pcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3ZjdjZDcKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9saWJ1dGlsKysvZmlsZV9tYW5pcC5oCkBAIC0wLDAgKzEsODkgQEAKKy8qKgorICogQGZpbGUgZmlsZV9tYW5pcC5oCisgKiBVc2VmdWwgZmlsZSBtYW5hZ2VtZW50IGhlbHBlcnMKKyAqCisgKiBAcmVtYXJrIENvcHlyaWdodCAyMDAyIE9Qcm9maWxlIGF1dGhvcnMKKyAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCisgKgorICogQGF1dGhvciBQaGlsaXBwZSBFbGllCisgKiBAYXV0aG9yIEpvaG4gTGV2b24KKyAqLworCisjaWZuZGVmIEZJTEVfTUFOSVBfSAorI2RlZmluZSBGSUxFX01BTklQX0gKKworI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDxsaXN0PgorCisKKy8qKgorICogY29weV9maWxlIC0gY29weSBhIGZpbGUuCisgKiBAcGFyYW0gc291cmNlICAgICAgICBmaWxlbmFtZSB0byBjb3B5IGZyb20KKyAqIEBwYXJhbSBkZXN0aW5hdGlvbiAgIGZpbGVuYW1lIHRvIGNvcHkgaW50bworICoKKyAqIHRoZSBsYXN0IG1vZGlmaWNhdGlvbiB0aW1lIG9mIHRoZSBzb3VyY2UgZmlsZSBpcyBwcmVzZXJ2ZWQsIGZpbGUgYXR0cmlidXRlCisgKiBhbmQgb3duZXIgYXJlIHByZXNlcnZlZCBpZiBwb3NzaWJsZS4gUmV0dXJuIHRydWUgaWYgY29weWluZyBzdWNjZXNzZnVsLgorICovCitib29sIGNvcHlfZmlsZShzdGQ6OnN0cmluZyBjb25zdCAmIHNvdXJjZSwgc3RkOjpzdHJpbmcgY29uc3QgJiBkZXN0aW5hdGlvbik7CisKKy8vLyByZXR1cm4gdHJ1ZSBpZiBkaXIgaXMgYW4gZXhpc3RpbmcgZGlyZWN0b3J5Citib29sIGlzX2RpcmVjdG9yeShzdGQ6OnN0cmluZyBjb25zdCAmIGRpcm5hbWUpOworCisvKioKKyAqIGlzX2ZpbGVfaWRlbnRpY2FsIC0gY2hlY2sgZm9yIGlkZW50aWNhbCBmaWxlcworICogQHBhcmFtIGZpbGUxICBmaXJzdCBmaWxlbmFtZQorICogQHBhcmFtIGZpbGUyICBzZWNvbmQgZmlsZW5hbWUKKyAqCisgKiByZXR1cm4gdHJ1ZSBpZiB0aGUgdHdvIGZpbGVuYW1lcyBiZWxvbmcgdG8gdGhlIHNhbWUgZmlsZQorICovCitib29sIGlzX2ZpbGVzX2lkZW50aWNhbChzdGQ6OnN0cmluZyBjb25zdCAmIGZpbGUxLCBzdGQ6OnN0cmluZyBjb25zdCAmIGZpbGUyKTsKKworLyoqCisgKiBvcF9yZWFscGF0aCAtIHJlc29sdmUgc3ltbGlua3MgZXRjLgorICogUmVzb2x2ZSBhIHBhdGggYXMgbXVjaCBhcyBwb3NzaWJsZS4gQWNjb3VudHMgZm9yIHJlbGF0aXZlCisgKiBwYXRocyAoZnJvbSBjd2QpLCAiLi4iIGFuZCAiLiIuIEZvciBzdWNjZXNzLCB0aGUgdGFyZ2V0CisgKiBmaWxlIG11c3QgZXhpc3QgIQorICoKKyAqIFJlc29sdmUgYSBzeW1ib2xpYyBsaW5rIGFzIGZhciBhcyBwb3NzaWJsZS4KKyAqIFJldHVybnMgdGhlIG9yaWdpbmFsIHN0cmluZyBvbiBmYWlsdXJlLgorICovCitzdGQ6OnN0cmluZyBjb25zdCBvcF9yZWFscGF0aChzdGQ6OnN0cmluZyBjb25zdCAmIG5hbWUpOworCisvLy8gcmV0dXJuIHRydWUgaWYgdGhlIGdpdmVuIGZpbGUgaXMgcmVhZGFibGUKK2Jvb2wgb3BfZmlsZV9yZWFkYWJsZShzdGQ6OnN0cmluZyBjb25zdCAmIGZpbGUpOworCisvKioKKyAqIEBwYXJhbSBmaWxlX2xpc3Qgd2hlcmUgdG8gc3RvcmUgcmVzdWx0CisgKiBAcGFyYW0gYmFzZV9kaXIgZGlyZWN0b3J5IGZyb20gd2hlcmUgbG9va3VwIHN0YXJ0CisgKiBAcGFyYW0gZmlsdGVyIGEgZmlsZW5hbWUgZmlsdGVyCisgKiBAcGFyYW0gcmVjdXJzaXZlIGlmIHRydWUgbG9va3VwIGluIHN1Yi1kaXJlY3RvcnkKKyAqCisgKiBjcmVhdGUgYSBmaWxlbGlzdCB1bmRlciBiYXNlX2RpciwgZmlsdGVyZWQgYnkgZmlsdGVyIGFuZCBvcHRpb25hbGx5CisgKiBsb29raW5nIGluIHN1Yi1kaXJlY3RvcnkuIElmIHdlIGxvb2sgaW4gc3ViLWRpcmVjdG9yeSBvbmx5IHN1Yi1kaXJlY3RvcnkKKyAqIHdoaWNoIG1hdGNoIGZpbHRlciBhcmUgdHJhdmVyc2VkLgorICovCitib29sIGNyZWF0ZV9maWxlX2xpc3Qoc3RkOjpsaXN0PHN0ZDo6c3RyaW5nPiAmIGZpbGVfbGlzdCwKKwkJICAgICAgc3RkOjpzdHJpbmcgY29uc3QgJiBiYXNlX2RpciwKKwkJICAgICAgc3RkOjpzdHJpbmcgY29uc3QgJiBmaWx0ZXIgPSAiKiIsCisJCSAgICAgIGJvb2wgcmVjdXJzaXZlID0gZmFsc2UpOworCisvKioKKyAqIG9wX2Rpcm5hbWUgLSBnZXQgdGhlIHBhdGggY29tcG9uZW50IG9mIGEgZmlsZW5hbWUKKyAqIEBwYXJhbSBmaWxlX25hbWUgIGZpbGVuYW1lCisgKgorICogUmV0dXJucyB0aGUgcGF0aCBuYW1lIG9mIGEgZmlsZW5hbWUgd2l0aCB0cmFpbGluZyAnLycgcmVtb3ZlZC4KKyAqLworc3RkOjpzdHJpbmcgb3BfZGlybmFtZShzdGQ6OnN0cmluZyBjb25zdCAmIGZpbGVfbmFtZSk7CisKKy8qKgorICogb3BfYmFzZW5hbWUgLSBnZXQgdGhlIGJhc2VuYW1lIG9mIGEgcGF0aAorICogQHBhcmFtIHBhdGhfbmFtZSAgcGF0aAorICoKKyAqIFJldHVybnMgdGhlIGJhc2VuYW1lIG9mIGEgcGF0aCB3aXRoIHRyYWlsaW5nICcvJyByZW1vdmVkLgorICoKKyAqIEFsd2F5cyB1c2UgdGhpcyBpbnN0ZWFkIG9mIHRoZSBDIGJhc2VuYW1lKCkgLSBoZWFkZXIgb3JkZXIKKyAqIGNhbiBhZmZlY3QgYmVoYXZpb3VyICBmb3IgYmFzZW5hbWUoIi8iKQorICovCitzdGQ6OnN0cmluZyBvcF9iYXNlbmFtZShzdGQ6OnN0cmluZyBjb25zdCAmIHBhdGhfbmFtZSk7CisKKyNlbmRpZiAvKiAhRklMRV9NQU5JUF9IICovCmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9saWJ1dGlsKysvZ2VuZXJpY19zcGVjLmggYi9vcHJvZmlsZS0wLjkuNy9saWJ1dGlsKysvZ2VuZXJpY19zcGVjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMThiZmY1MQotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2xpYnV0aWwrKy9nZW5lcmljX3NwZWMuaApAQCAtMCwwICsxLDk3IEBACisvKioKKyAqIEBmaWxlIGdlbmVyaWNfc3BlYy5oCisgKiBDb250YWluZXIgaG9sZGluZyBhbiBpdGVtIG9yIGEgc3BlY2lhbCAibWF0Y2ggYWxsIiBpdGVtCisgKgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMyBPUHJvZmlsZSBhdXRob3JzCisgKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORworICoKKyAqIEBhdXRob3IgSm9obiBMZXZvbgorICogQGF1dGhvciBQaGlsaXBwZSBFbGllCisgKi8KKworI2lmbmRlZiBHRU5FUklDX1NQRUNfSAorI2RlZmluZSBHRU5FUklDX1NQRUNfSAorCisjaW5jbHVkZSA8c3RkZXhjZXB0PgorI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDxzc3RyZWFtPgorCisjaW5jbHVkZSAic3RyaW5nX21hbmlwLmgiCisKKworLyoqCisgKiB1c2VkIHRvIGhvbGQgc29tZXRoaW5nIGxpa2UgeyBpbnQgY3B1X25yLCBib29sIGlzX2FsbCB9OworICogdG8gc3RvcmUgYSBzdWIgcGFydCBvZiBhIHNhbXBsZXMgZmlsZW5hbWUgc2VlIFBQOjMuMjEuCisgKi8KK3RlbXBsYXRlIDxjbGFzcyBUPgorY2xhc3MgZ2VuZXJpY19zcGVjCit7CitwdWJsaWM6CisJLyoqCisJICogYnVpbGQgYSBkZWZhdWx0IHNwZWMgd2hpY2ggbWF0Y2ggYW55dGhpbmcKKwkgKi8KKwlnZW5lcmljX3NwZWMoKTsKKworCS8vLyBidWlsZCBhIHNwZWMgZnJvbSBhIHN0cmluZywgdmFsaWQgYXJndW1lbnQgYXJlICJhbGwiCisJLy8vIG9yIGEgc3RyaW5nIGNvbnZlcnRpYmxlIHRvIFQgdGhyb3VnaCBpc3RyaW5ndHJlYW0oc3RyKSA+PiBkYXRhCisJLy8vIGNvbnZlcnNpb24gaXMgc3RyaWN0LCBubyBzcGFjZSBhcmUgYWxsb3dlZCBhdCBiZWdpbiBvciBlbmQgb2Ygc3RyCisJdm9pZCBzZXQoc3RkOjpzdHJpbmcgY29uc3QgJik7CisKKwkvLy8gcmV0dXJuIHRydWUgaWYgYSBzcGVjaWZpYyB2YWx1ZSBpcyBoZWxkIGJ5IHRoaXMgY29udGFpbmVyCisJYm9vbCBpc19zZXQoKSBjb25zdCB7CisJCXJldHVybiAhaXNfYWxsOworCX0KKworCS8vLyByZXR1cm4gdGhlIHNwZWNpZmljIHZhbHVlIChvbmx5IGlmIGlzX3NldCgpID09IHRydWUpCisJVCBjb25zdCB2YWx1ZSgpIGNvbnN0IHsKKwkJaWYgKCFpc19hbGwpCisJCQlyZXR1cm4gZGF0YTsKKwkJdGhyb3cgc3RkOjpvdXRfb2ZfcmFuZ2UoImdlbmVyaWNfc3BlYyBob2xkcyBubyB2YWx1ZSIpOworCX0KKworCS8vLyByZXR1cm4gdHJ1ZSBpZiByaHMgbWF0Y2ggdGhpcyBzcGVjLiBTdWIgcGFydCBvZiBQUDozLjI0CisJYm9vbCBtYXRjaChUIGNvbnN0ICYgcmhzKSBjb25zdCB7CisJCXJldHVybiByaHMgPT0gZGF0YTsKKwl9CisKKwkvLy8gcmV0dXJuIHRydWUgaWYgcmhzIG1hdGNoIHRoaXMgc3BlYy4gU3ViIHBhcnQgb2YgUFA6My4yNAorCWJvb2wgbWF0Y2goZ2VuZXJpY19zcGVjPFQ+IGNvbnN0ICYgcmhzKSBjb25zdCB7CisJCXJldHVybiBpc19hbGwgfHwgcmhzLmlzX2FsbCB8fCByaHMuZGF0YSA9PSBkYXRhOworCX0KKworcHJpdmF0ZToKKwlUIGRhdGE7CisJYm9vbCBpc19hbGw7Cit9OworCisKK3RlbXBsYXRlIDxjbGFzcyBUPgorZ2VuZXJpY19zcGVjPFQ+OjpnZW5lcmljX3NwZWMoKQorCToKKwlkYXRhKFQoKSksCisJaXNfYWxsKHRydWUpCit7Cit9CisKKwordGVtcGxhdGUgPGNsYXNzIFQ+Cit2b2lkIGdlbmVyaWNfc3BlYzxUPjo6c2V0KHN0ZDo6c3RyaW5nIGNvbnN0ICYgc3RyKQoreworCWlmIChzdHIgPT0gImFsbCIpIHsKKwkJaXNfYWxsID0gdHJ1ZTsKKwkJcmV0dXJuOworCX0KKworCWlzX2FsbCA9IGZhbHNlOworCWRhdGEgPSBvcF9sZXhpY2FsX2Nhc3Q8VD4oc3RyKTsKK30KKworCisvLy8gV2UgZG9uJ3QgdXNlIGdlbmVyaWNfc3BlYzxzdHJpbmc+LCBzaW5jZSBpdCdzIHByb2JhYmx5IGFuIGVycm9yIHRvIHRyeQorLy8vIHRvIHVzZSBnZW5lcmljX3NwZWM8c3RyaW5nPiB3ZSBzcGVjaWFsaXplIGJ1dCBkb24ndCBkZWZpbmUgaXQgdG8gZ2V0IGEKKy8vLyBsaW5rIGVycm9yICh1c2luZyBnZW5lcmljX3NwZWM8c3RyaW5nPiBpcyBwcm9ibGVtYXRpYyBiZWNhdXNlIGcuc2V0KCJhbGwiKQorLy8vIGlzIGFtYmlndW91cykKK3RlbXBsYXRlIDw+Cit2b2lkIGdlbmVyaWNfc3BlYzxzdGQ6OnN0cmluZz46OnNldChzdGQ6OnN0cmluZyBjb25zdCAmIHN0cik7CisKKyNlbmRpZiAvKiAhR0VORVJJQ19TUEVDX0ggKi8KZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2xpYnV0aWwrKy9nbG9iX2ZpbHRlci5jcHAgYi9vcHJvZmlsZS0wLjkuNy9saWJ1dGlsKysvZ2xvYl9maWx0ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0NDU0OWYKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9saWJ1dGlsKysvZ2xvYl9maWx0ZXIuY3BwCkBAIC0wLDAgKzEsMzkgQEAKKy8qKgorICogQGZpbGUgZ2xvYl9maWx0ZXIuY3BwCisgKiBGaWx0ZXIgc3RyaW5ncyBiYXNlZCBvbiBnbG9iYmVkIGV4Y2x1ZGUvaW5jbHVkZSBsaXN0CisgKgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMiBPUHJvZmlsZSBhdXRob3JzCisgKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORworICoKKyAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQorICogQGF1dGhvciBKb2huIExldm9uCisgKi8KKworI2luY2x1ZGUgPGZubWF0Y2guaD4KKworI2luY2x1ZGUgPGFsZ29yaXRobT4KKworI2luY2x1ZGUgImdsb2JfZmlsdGVyLmgiCisjaW5jbHVkZSAic3RyaW5nX21hbmlwLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisKK2Jvb2wgZ2xvYl9maWx0ZXI6OmZubWF0Y2hlcjo6b3BlcmF0b3IoKShzdHJpbmcgY29uc3QgJiBzKQoreworCXJldHVybiBmbm1hdGNoKHMuY19zdHIoKSwgc3RyXy5jX3N0cigpLCAwKSAhPSBGTk1fTk9NQVRDSDsKK30KKworCitib29sIGdsb2JfZmlsdGVyOjptYXRjaChzdHJpbmcgY29uc3QgJiBzdHIpIGNvbnN0Cit7CisJdmVjdG9yPHN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGNpdDsKKwljaXQgPSBmaW5kX2lmKGV4Y2x1ZGUuYmVnaW4oKSwgZXhjbHVkZS5lbmQoKSwgZm5tYXRjaGVyKHN0cikpOworCWlmIChjaXQgIT0gZXhjbHVkZS5lbmQoKSkKKwkJcmV0dXJuIGZhbHNlOworCisJY2l0ID0gZmluZF9pZihpbmNsdWRlLmJlZ2luKCksIGluY2x1ZGUuZW5kKCksIGZubWF0Y2hlcihzdHIpKTsKKwlpZiAoaW5jbHVkZS5lbXB0eSgpIHx8IGNpdCAhPSBpbmNsdWRlLmVuZCgpKQorCQlyZXR1cm4gdHJ1ZTsKKworCXJldHVybiBmYWxzZTsKK30KZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2xpYnV0aWwrKy9nbG9iX2ZpbHRlci5oIGIvb3Byb2ZpbGUtMC45LjcvbGlidXRpbCsrL2dsb2JfZmlsdGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjg4N2NiZgotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2xpYnV0aWwrKy9nbG9iX2ZpbHRlci5oCkBAIC0wLDAgKzEsNTcgQEAKKy8qKgorICogQGZpbGUgZ2xvYl9maWx0ZXIuaAorICogRmlsdGVyIHN0cmluZ3MgYmFzZWQgb24gZ2xvYmJlZCBleGNsdWRlL2luY2x1ZGUgbGlzdAorICoKKyAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDIgT1Byb2ZpbGUgYXV0aG9ycworICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKKyAqCisgKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKKyAqIEBhdXRob3IgSm9obiBMZXZvbgorICovCisKKyNpZm5kZWYgR0xPQl9GSUxURVJfSAorI2RlZmluZSBHTE9CX0ZJTFRFUl9ICisKKyNpbmNsdWRlICJzdHJpbmdfZmlsdGVyLmgiCisKKy8qKgorICogZ2xvYl9maWx0ZXIgLSBmaWx0ZXJpbmcgb2YgYSBzdHJpbmcgYmFzZWQgb24gZ2xvYmJlZCBpbmNsdWRlL2V4Y2x1ZGUgbGlzdAorICoKKyAqIFRoaXMgY2xhc3MgaXMgYW4gb3JhY2xlIG9uIHdoZXRoZXIgYSBwYXJ0aWN1bGFyIHN0cmluZyBtYXRjaGVzCisgKiB0aGUgZ2l2ZW4gbGlzdCBvZiBpbmNsdWRlZCBhbmQgZXhjbHVkZWQgc3RyaW5ncy4KKyAqCisgKiBUaGlzIGNsYXNzIGdpdmVzIGdsb2ItYmFzZWQgbWF0Y2hlcyBvbiBlYWNoIHBhdHRlcm4sIGFzIHdpdGggZm5tYXRjaCgzKQorICovCitjbGFzcyBnbG9iX2ZpbHRlciA6IHB1YmxpYyBzdHJpbmdfZmlsdGVyIHsKK3B1YmxpYzoKKwkvKioKKwkgKiBJbml0aWFsaXNlIHRoZSBmaWx0ZXIgd2l0aCB0aGUgaW5jbHVkZSBhbmQgZXhjbHVkZSBsaXN0LCAKKwkgKiBjb21tYS1zZXBhcmF0ZWQuCisJICovCisJZ2xvYl9maWx0ZXIoc3RkOjpzdHJpbmcgY29uc3QgJiBpbmNsdWRlX3BhdHRlcm5zLAorCSAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0ICYgZXhjbHVkZV9wYXR0ZXJucykKKwkJOiBzdHJpbmdfZmlsdGVyKGluY2x1ZGVfcGF0dGVybnMsIGV4Y2x1ZGVfcGF0dGVybnMpIHt9CisKKwkvKioKKwkgKiBJbml0aWFsaXNlIHRoZSBmaWx0ZXIgd2l0aCB0aGUgaW5jbHVkZSBhbmQgZXhjbHVkZSBsaXN0LgorCSAqLworCWdsb2JfZmlsdGVyKHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25zdCAmIGluY2x1ZGVfcGF0dGVybnMsCisJICAgICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0ICYgZXhjbHVkZV9wYXR0ZXJucykKKwkJOiBzdHJpbmdfZmlsdGVyKGluY2x1ZGVfcGF0dGVybnMsIGV4Y2x1ZGVfcGF0dGVybnMpIHt9CisKKwkvLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBzdHJpbmcgbWF0Y2hlcworCXZpcnR1YWwgYm9vbCBtYXRjaChzdGQ6OnN0cmluZyBjb25zdCAmIHN0cikgY29uc3Q7CisKK3Byb3RlY3RlZDoKKworCS8vLyBmdW5jdGlvbiBvYmplY3QgZm9yIGZubWF0Y2hpbmcKKwlzdHJ1Y3QgZm5tYXRjaGVyIHsKKwkJZm5tYXRjaGVyKHN0ZDo6c3RyaW5nIGNvbnN0ICYgc3RyKSA6IHN0cl8oc3RyKSB7fQorCisJCWJvb2wgb3BlcmF0b3IoKShzdGQ6OnN0cmluZyBjb25zdCAmIHMpOworCisJCXN0ZDo6c3RyaW5nIGNvbnN0ICYgc3RyXzsKKwl9OworfTsKKworI2VuZGlmIC8qIEdMT0JfRklMVEVSX0ggKi8KZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2xpYnV0aWwrKy9ncm93YWJsZV92ZWN0b3IuaCBiL29wcm9maWxlLTAuOS43L2xpYnV0aWwrKy9ncm93YWJsZV92ZWN0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTAyNDZhCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvbGlidXRpbCsrL2dyb3dhYmxlX3ZlY3Rvci5oCkBAIC0wLDAgKzEsMTA1IEBACisvKioKKyAqIEBmaWxlIGdyb3dhYmxlX3ZlY3Rvci5oCisgKiBBdXRvLWV4cGFuZGluZyB2ZWN0b3IgdHlwZQorICoKKyAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDIgT1Byb2ZpbGUgYXV0aG9ycworICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKKyAqCisgKiBAYXV0aG9yIEpvaG4gTGV2b24KKyAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQorICovCisKKyNpZm5kZWYgR1JPV0FCTEVfVkVDVE9SX0gKKyNkZWZpbmUgR1JPV0FCTEVfVkVDVE9SX0gKKworI2luY2x1ZGUgPHZlY3Rvcj4KKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8ZnVuY3Rpb25hbD4KKworLyoqCisgKiBBIHNpbXBsZSBncm93YWJsZSB2ZWN0b3IgdGVtcGxhdGUuCisgKi8KK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBjbGFzcyBncm93YWJsZV92ZWN0b3IgeworcHVibGljOgorCXR5cGVkZWYgc3RkOjp2ZWN0b3I8VD4gY29udGFpbmVyX3R5cGU7CisJdHlwZWRlZiB0eXBlbmFtZSBjb250YWluZXJfdHlwZTo6c2l6ZV90eXBlIHNpemVfdHlwZTsKKworCisJLyoqCisJICogSW5kZXggaW50byB0aGUgdmVjdG9yIGZvciBhIHZhbHVlLiBBbiBvdXQgb2YKKwkgKiBib3VuZHMgaW5kZXggd2lsbCByZXR1cm4gYSBkZWZhdWx0LWNvbnN0cnVjdGVkIHZhbHVlLgorCSAqLworCVQgb3BlcmF0b3JbXShzaXplX3R5cGUgaW5kZXgpIGNvbnN0IHsKKwkJaWYgKGluZGV4ID49IGNvbnRhaW5lci5zaXplKCkpCisJCQlyZXR1cm4gVCgpOworCQlyZXR1cm4gY29udGFpbmVyW2luZGV4XTsKKwl9CisKKworCS8qKgorCSAqIEluZGV4IGludG8gdGhlIHZlY3RvciBmb3IgYSB2YWx1ZS4gSWYgdGhlIGluZGV4IGlzIGxhcmdlciB0aGFuCisJICogdGhlIGN1cnJlbnQgbWF4IGluZGV4LCB0aGUgYXJyYXkgaXMgZXhwYW5kZWQsIGRlZmF1bHQtZmlsbGluZworCSAqIGFueSBpbnRlcm1lZGlhcnkgZ2Fwcy4KKwkgKi8KKwlUICYgb3BlcmF0b3JbXShzaXplX3R5cGUgaW5kZXgpIHsKKwkJaWYgKGluZGV4ID49IGNvbnRhaW5lci5zaXplKCkpCisJCQljb250YWluZXIucmVzaXplKGluZGV4ICsgMSk7CisJCXJldHVybiBjb250YWluZXJbaW5kZXhdOworCX0KKworCisJLyoqCisJICogdmVjdG9yaXplZCArPSBvcGVyYXRvcgorCSAqLworCWdyb3dhYmxlX3ZlY3RvcjxUPiAmIG9wZXJhdG9yKz0oZ3Jvd2FibGVfdmVjdG9yPFQ+IGNvbnN0ICYgcmhzKSB7CisJCWlmIChyaHMuY29udGFpbmVyLnNpemUoKSA+IGNvbnRhaW5lci5zaXplKCkpCisJCQljb250YWluZXIucmVzaXplKHJocy5jb250YWluZXIuc2l6ZSgpKTsKKworCQlzaXplX3R5cGUgbWluX3NpemUgPSBtaW4oY29udGFpbmVyLnNpemUoKSwgcmhzLmNvbnRhaW5lci5zaXplKCkpOworCQlmb3IgKHNpemVfdHlwZSBpID0gMCA7IGkgPCBtaW5fc2l6ZTsgKytpKQorCQkJY29udGFpbmVyW2ldICs9IHJocy5jb250YWluZXJbaV07CisKKwkJcmV0dXJuICp0aGlzOworCX0KKworCisJLyoqCisJICogdmVjdG9yaXplZCAtPSBvcGVyYXRvciwgb3ZlcmZsb3cgc2hvdWxkbid0IG9jY3VyIGR1cmluZyBzdWJzdHJhY3Rpb24KKwkgKiAoaW93OiBmb3IgZWFjaCBjb21wb25lbnRzIGxoc1tpXSA+PSByaHNbaV0KKwkgKi8KKwlncm93YWJsZV92ZWN0b3I8VD4gJiBvcGVyYXRvci09KGdyb3dhYmxlX3ZlY3RvcjxUPiBjb25zdCAmIHJocykgeworCQlpZiAocmhzLmNvbnRhaW5lci5zaXplKCkgPiBjb250YWluZXIuc2l6ZSgpKQorCQkJY29udGFpbmVyLnJlc2l6ZShyaHMuY29udGFpbmVyLnNpemUoKSk7CisKKwkJc2l6ZV90eXBlIG1pbl9zaXplID0gbWluKGNvbnRhaW5lci5zaXplKCksIHJocy5jb250YWluZXIuc2l6ZSgpKTsKKwkJZm9yIChzaXplX3R5cGUgaSA9IDAgOyBpIDwgbWluX3NpemU7ICsraSkKKwkJCWNvbnRhaW5lcltpXSAtPSByaHMuY29udGFpbmVyW2ldOworCisJCXJldHVybiAqdGhpczsKKwl9CisKKworCS8vLyByZXR1cm4gY3VycmVudCBzaXplIG9mIHZlY3RvcgorCXNpemVfdHlwZSBzaXplKCkgY29uc3QgeworCQlyZXR1cm4gY29udGFpbmVyLnNpemUoKTsKKwl9CisKKworCS8vLyBmaWxsIGNvbnRhaW5lciB3aXRoIGdpdmVuIHZhbHVlCisJdm9pZCBmaWxsKHNpemVfdHlwZSBzaXplLCBUIGNvbnN0ICYgdmFsdWUpIHsKKwkJY29udGFpbmVyLnJlc2l6ZShzaXplLCB2YWx1ZSk7CisJfQorCisKKwkvLy8gcmV0dXJuIHRydWUgaWYgYWxsIGVsZW1lbnRzIGhhdmUgdGhlIGRlZmF1bHQgY29uc3RydWN0ZWQgdmFsdWUKKwlib29sIHplcm8oKSBjb25zdCB7CisJCXJldHVybiBzdGQ6OmZpbmRfaWYoY29udGFpbmVyLmJlZ2luKCksIGNvbnRhaW5lci5lbmQoKSwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpiaW5kMm5kKHN0ZDo6bm90X2VxdWFsX3RvPFQ+KCksIFQoKSkpCisJCQkJCT09IGNvbnRhaW5lci5lbmQoKTsKKwl9CisKK3ByaXZhdGU6CisJY29udGFpbmVyX3R5cGUgY29udGFpbmVyOworfTsKKworI2VuZGlmIC8vIEdST1dBQkxFX1ZFQ1RPUl9ICmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9saWJ1dGlsKysvb3BfYmZkLmNwcCBiL29wcm9maWxlLTAuOS43L2xpYnV0aWwrKy9vcF9iZmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwM2E5OWQKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9saWJ1dGlsKysvb3BfYmZkLmNwcApAQCAtMCwwICsxLDQ3NSBAQAorLyoqCisgKiBAZmlsZSBvcF9iZmQuY3BwCisgKiBFbmNhcHN1bGF0aW9uIG9mIGJmZCBvYmplY3RzCisgKgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMiBPUHJvZmlsZSBhdXRob3JzCisgKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORworICoKKyAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQorICogQGF1dGhvciBKb2huIExldm9uCisgKi8KKworI2luY2x1ZGUgIm9wX2ZpbGUuaCIKKyNpbmNsdWRlICJvcF9jb25maWcuaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8Y3N0cmluZz4KKworI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisKKyNpbmNsdWRlIDxjc3RkbGliPgorCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPGlvc3RyZWFtPgorI2luY2x1ZGUgPGlvbWFuaXA+CisjaW5jbHVkZSA8c3N0cmVhbT4KKworI2luY2x1ZGUgIm9wX2JmZC5oIgorI2luY2x1ZGUgImxvY2F0ZV9pbWFnZXMuaCIKKyNpbmNsdWRlICJzdHJpbmdfZmlsdGVyLmgiCisjaW5jbHVkZSAic3RyZWFtX3V0aWwuaCIKKyNpbmNsdWRlICJjdmVyYi5oIgorCit1c2luZyBuYW1lc3BhY2Ugc3RkOworCisKK3ZlcmJvc2UgdmJmZCgiYmZkIik7CisKKworbmFtZXNwYWNlIHsKKworLy8vIGZ1bmN0aW9uIG9iamVjdCBmb3IgZmlsdGVyaW5nIHN5bWJvbHMgdG8gcmVtb3ZlCitzdHJ1Y3QgcmVtb3ZlX2ZpbHRlciB7CisJcmVtb3ZlX2ZpbHRlcihzdHJpbmdfZmlsdGVyIGNvbnN0ICYgZmlsdGVyKQorCQk6IGZpbHRlcl8oZmlsdGVyKSB7fQorCisJYm9vbCBvcGVyYXRvcigpKG9wX2JmZF9zeW1ib2wgY29uc3QgJiBzeW1ib2wpIHsKKwkJcmV0dXJuICFmaWx0ZXJfLm1hdGNoKHN5bWJvbC5uYW1lKCkpOworCX0KKworCXN0cmluZ19maWx0ZXIgZmlsdGVyXzsKK307CisKKworfSAvLyBuYW1lc3BhY2UgYW5vbgorCisKK29wX2JmZF9zeW1ib2w6Om9wX2JmZF9zeW1ib2woYXN5bWJvbCBjb25zdCAqIGEpCisJOiBiZmRfc3ltYm9sKGEpLCBzeW1iX3ZhbHVlKGEtPnZhbHVlKSwKKwkgIHNlY3Rpb25fZmlsZXBvcyhhLT5zZWN0aW9uLT5maWxlcG9zKSwKKwkgIHNlY3Rpb25fdm1hKGEtPnNlY3Rpb24tPnZtYSksCisJICBzeW1iX3NpemUoMCksIHN5bWJfaGlkZGVuKGZhbHNlKSwgc3ltYl93ZWFrKGZhbHNlKSwKKwkgIHN5bWJfYXJ0aWZpY2lhbChmYWxzZSkKK3sKKwkvLyBTb21lIHNlY3Rpb25zIGhhdmUgdW5uYW1lZCBzeW1ib2xzIGluIHRoZW0uIElmCisJLy8gd2UganVzdCBpZ25vcmUgdGhlbSB0aGVuIHdlIGVuZCB1cCBzdGlja2luZworCS8vIHRoaW5ncyBsaWtlIC5wbHQgaGl0cyBpbnNpZGUgb2YgX2luaXQuIFNvIGluc3RlYWQKKwkvLyB3ZSBuYW1lIHRoZSBzeW1ib2wgYWZ0ZXIgdGhlIHNlY3Rpb24uCisJaWYgKGEtPm5hbWUgJiYgYS0+bmFtZVswXSAhPSAnXDAnKSB7CisJCXN5bWJfbmFtZSA9IGEtPm5hbWU7CisJCXN5bWJfd2VhayA9IGEtPmZsYWdzICYgQlNGX1dFQUs7CisJCXN5bWJfaGlkZGVuID0gKGEtPmZsYWdzICYgQlNGX0xPQ0FMKQorIAkJCSYmICEoYS0+ZmxhZ3MgJiBCU0ZfR0xPQkFMKTsKKwl9IGVsc2UgeworCQlzeW1iX25hbWUgPSBzdHJpbmcoIj8/IikgKyBhLT5zZWN0aW9uLT5uYW1lOworCX0KK30KKworCitvcF9iZmRfc3ltYm9sOjpvcF9iZmRfc3ltYm9sKGJmZF92bWEgdm1hLCBzaXplX3Qgc2l6ZSwgc3RyaW5nIGNvbnN0ICYgbmFtZSkKKwk6IGJmZF9zeW1ib2woMCksIHN5bWJfdmFsdWUodm1hKSwKKwkgIHNlY3Rpb25fZmlsZXBvcygwKSwgc2VjdGlvbl92bWEoMCksCisJICBzeW1iX3NpemUoc2l6ZSksIHN5bWJfbmFtZShuYW1lKSwKKwkgIHN5bWJfYXJ0aWZpY2lhbCh0cnVlKQoreworfQorCisKK2Jvb2wgb3BfYmZkX3N5bWJvbDo6b3BlcmF0b3I8KG9wX2JmZF9zeW1ib2wgY29uc3QgJiByaHMpIGNvbnN0Cit7CisJcmV0dXJuIGZpbGVwb3MoKSA8IHJocy5maWxlcG9zKCk7Cit9CisKK3Vuc2lnbmVkIGxvbmcgb3BfYmZkX3N5bWJvbDo6c3ltYm9sX2VuZHBvcyh2b2lkKSBjb25zdAoreworCXJldHVybiBiZmRfc3ltYm9sLT5zZWN0aW9uLT5maWxlcG9zICsgYmZkX3N5bWJvbC0+c2VjdGlvbi0+c2l6ZTsKK30KKworCitvcF9iZmQ6Om9wX2JmZChzdHJpbmcgY29uc3QgJiBmbmFtZSwgc3RyaW5nX2ZpbHRlciBjb25zdCAmIHN5bWJvbF9maWx0ZXIsCisJICAgICAgIGV4dHJhX2ltYWdlcyBjb25zdCAmIGV4dHJhX2ltYWdlcywgYm9vbCAmIG9rKQorCToKKwlmaWxlbmFtZShmbmFtZSksCisJYXJjaGl2ZV9wYXRoKGV4dHJhX2ltYWdlcy5nZXRfYXJjaGl2ZV9wYXRoKCkpLAorCWV4dHJhX2ZvdW5kX2ltYWdlcyhleHRyYV9pbWFnZXMpLAorCWZpbGVfc2l6ZSgtMSksCisJYW5vbl9vYmooZmFsc2UpCit7CisJaW50IGZkOworCXN0cnVjdCBzdGF0IHN0OworCS8vIGFmdGVyIGNyZWF0aW5nIGFsbCBzeW1ib2wgaXQncyBjb252ZW5pZW50IGZvciB1c2VyIGNvZGUgdG8gYWNjZXNzCisJLy8gc3ltYm9scyB0aHJvdWdoIGEgdmVjdG9yLiBXZSB1c2UgYW4gaW50ZXJtZWRpYXRlIGxpc3QgdG8gYXZvaWQgYQorCS8vIE8oTrIpIGJlaGF2aW9yIHdoZW4gd2Ugd2lsbCBmaWx0ZXIgdmVjdG9yIGVsZW1lbnQgYmVsb3cKKwlzeW1ib2xzX2ZvdW5kX3Qgc3ltYm9sczsKKwlhc2VjdGlvbiBjb25zdCAqIHNlY3Q7CisJc3RyaW5nIHN1ZiA9ICIuam8iOworCisJaW1hZ2VfZXJyb3IgaW1nX29rOworCXN0cmluZyBjb25zdCBpbWFnZV9wYXRoID0KKwkJZXh0cmFfaW1hZ2VzLmZpbmRfaW1hZ2VfcGF0aChmaWxlbmFtZSwgaW1nX29rLCB0cnVlKTsKKworCWN2ZXJiIDw8IHZiZmQgPDwgIm9wX2JmZCBjdG9yIGZvciAiIDw8IGltYWdlX3BhdGggPDwgZW5kbDsKKworCS8vIGlmIHRoZXJlJ3MgYSBwcm9ibGVtIGFscmVhZHksIGRvbid0IHRyeSB0byBvcGVuIGl0CisJaWYgKCFvayB8fCBpbWdfb2sgIT0gaW1hZ2Vfb2spIHsKKwkJY3ZlcmIgPDwgdmJmZCA8PCAiY2FuJ3QgbG9jYXRlICIgPDwgaW1hZ2VfcGF0aCA8PCBlbmRsOworCQlnb3RvIG91dF9mYWlsOworCX0KKworCWZkID0gb3BlbihpbWFnZV9wYXRoLmNfc3RyKCksIE9fUkRPTkxZKTsKKwlpZiAoZmQgPT0gLTEpIHsKKwkJY3ZlcmIgPDwgdmJmZCA8PCAib3BlbiBmYWlsZWQgZm9yICIgPDwgaW1hZ2VfcGF0aCA8PCBlbmRsOworCQlvayA9IGZhbHNlOworCQlnb3RvIG91dF9mYWlsOworCX0KKworCWlmIChmc3RhdChmZCwgJnN0KSkgeworCQljdmVyYiA8PCB2YmZkIDw8ICJzdGF0IGZhaWxlZCBmb3IgIiA8PCBpbWFnZV9wYXRoIDw8IGVuZGw7CisJCW9rID0gZmFsc2U7CisJCWdvdG8gb3V0X2ZhaWw7CisJfQorCisJZmlsZV9zaXplID0gc3Quc3Rfc2l6ZTsKKworCWliZmQuYWJmZCA9IGZkb3Blbl9iZmQoaW1hZ2VfcGF0aCwgZmQpOworCisJaWYgKCFpYmZkLnZhbGlkKCkpIHsKKwkJY3ZlcmIgPDwgdmJmZCA8PCAiZmRvcGVuX2JmZCBmYWlsZWQgZm9yICIgPDwgaW1hZ2VfcGF0aCA8PCBlbmRsOworCQlvayA9IGZhbHNlOworCQlnb3RvIG91dF9mYWlsOworCX0KKworCXN0cmluZzo6c2l6ZV90eXBlIHBvczsKKwlwb3MgPSBmaWxlbmFtZS5yZmluZChzdWYpOworCWlmIChwb3MgIT0gc3RyaW5nOjpucG9zICYmIHBvcyA9PSBmaWxlbmFtZS5zaXplKCkgLSBzdWYuc2l6ZSgpKQorCQlhbm9uX29iaiA9IHRydWU7CisKKworCS8vIGZpbmQgLnRleHQgYW5kIHVzZSBpdAorCWZvciAoc2VjdCA9IGliZmQuYWJmZC0+c2VjdGlvbnM7IHNlY3Q7IHNlY3QgPSBzZWN0LT5uZXh0KSB7CisJCWlmIChzZWN0LT5mbGFncyAmIFNFQ19DT0RFKSB7CisJCQlpZiAoZmlsZXBvc19tYXBbc2VjdC0+bmFtZV0gIT0gMCkgeworCQkJCWNlcnIgPDwgIkZvdW5kIHNlY3Rpb24gXCIiIDw8IHNlY3QtPm5hbWUKKwkJCQkgICAgIDw8ICJcIiB0d2ljZSBmb3IgIiA8PCBnZXRfZmlsZW5hbWUoKQorCQkJCSAgICAgPDwgZW5kbDsKKwkJCQlhYm9ydCgpOworCQkJfQorCisJCQlmaWxlcG9zX21hcFtzZWN0LT5uYW1lXSA9IHNlY3QtPmZpbGVwb3M7CisKKwkJCWlmIChzZWN0LT52bWEgPT0gMCAmJiBzdHJjbXAoc2VjdC0+bmFtZSwgIi50ZXh0IikpCisJCQkJZmlsdGVyZWRfc2VjdGlvbi5wdXNoX2JhY2soc2VjdCk7CisJCX0KKwl9CisKKwlnZXRfc3ltYm9scyhzeW1ib2xzKTsKKworb3V0OgorCWFkZF9zeW1ib2xzKHN5bWJvbHMsIHN5bWJvbF9maWx0ZXIpOworCXJldHVybjsKK291dF9mYWlsOgorCWliZmQuY2xvc2UoKTsKKwlkYmZkLmNsb3NlKCk7CisJLy8gbWFrZSB0aGUgZmFrZSBzeW1ib2wgZml0IHdpdGhpbiB0aGUgZmFrZSBmaWxlCisJZmlsZV9zaXplID0gLTE7CisJZ290byBvdXQ7Cit9CisKKworb3BfYmZkOjp+b3BfYmZkKCkKK3sKK30KKworCit1bnNpZ25lZCBsb25nIG9wX2JmZDo6Z2V0X3N0YXJ0X29mZnNldChiZmRfdm1hIHZtYSkgY29uc3QKK3sKKwlpZiAoIXZtYSB8fCAhaWJmZC52YWxpZCgpKSB7CisJCWZpbGVwb3NfbWFwX3Q6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gZmlsZXBvc19tYXAuZmluZCgiLnRleHQiKTsKKwkJaWYgKGl0ICE9IGZpbGVwb3NfbWFwLmVuZCgpKQorCQkJcmV0dXJuIGl0LT5zZWNvbmQ7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiAwOworfQorCisKK3ZvaWQgb3BfYmZkOjpnZXRfc3ltYm9scyhvcF9iZmQ6OnN5bWJvbHNfZm91bmRfdCAmIHN5bWJvbHMpCit7CisJaWJmZC5nZXRfc3ltYm9scygpOworCisJLy8gT24gc2VwYXJhdGUgZGVidWcgZmlsZSBzeXN0ZW1zLCB0aGUgbWFpbiBiZmQgaGFzIG5vIHN5bWJvbHMsCisJLy8gc28gZXZlbiBmb3Igbm9uIC1nIHJlcG9ydHMsIHdlIHdhbnQgdG8gcHJvY2VzcyB0aGUgZGJmZC4KKwkvLyBUaGlzIGh1cnRzIHVzIHByZXR0eSBiYWRseSAodGhlIENSQyksIGJ1dCB3ZSByZWFsbHkgZG9uJ3QKKwkvLyBoYXZlIG11Y2ggY2hvaWNlIGF0IHRoZSBtb21lbnQuCisJaGFzX2RlYnVnX2luZm8oKTsKKworCWRiZmQuc2V0X2ltYWdlX2JmZF9pbmZvKCZpYmZkKTsKKwlkYmZkLmdldF9zeW1ib2xzKCk7CisKKwlzaXplX3QgaTsKKwlmb3IgKGkgPSAwOyBpIDwgaWJmZC5ucl9zeW1zOyArK2kpIHsKKwkJaWYgKCFpbnRlcmVzdGluZ19zeW1ib2woaWJmZC5zeW1zW2ldKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoZmluZChmaWx0ZXJlZF9zZWN0aW9uLmJlZ2luKCksIGZpbHRlcmVkX3NlY3Rpb24uZW5kKCksCisJCQkgaWJmZC5zeW1zW2ldLT5zZWN0aW9uKSAhPSBmaWx0ZXJlZF9zZWN0aW9uLmVuZCgpKQorCQkJY29udGludWU7CisJCXN5bWJvbHMucHVzaF9iYWNrKG9wX2JmZF9zeW1ib2woaWJmZC5zeW1zW2ldKSk7CisJfQorCisJZm9yIChpID0gMDsgaSA8IGRiZmQubnJfc3ltczsgKytpKSB7CisJCWlmICghaW50ZXJlc3Rpbmdfc3ltYm9sKGRiZmQuc3ltc1tpXSkpCisJCQljb250aW51ZTsKKworCQkvLyBuZWVkIHRvIHVzZSBmaWxlcG9zIG9mIG9yaWdpbmFsIGZpbGUncyBzZWN0aW9uIGZvcgorCQkvLyBkZWJ1ZyBmaWxlIHN5bWJvbHMuIFdlIHByb2JhYmx5IG5lZWQgdG8gYmUgbW9yZQorCQkvLyBjYXJlZnVsIGZvciBzcGVjaWFsIHN5bWJvbHMgd2hpY2ggaGF2ZSAtPnNlY3Rpb24gZnJvbQorCQkvLyAucm9kYXRhIGxpa2UgKkFCUyoKKwkJdTMyIGZpbGVwb3MgPSBmaWxlcG9zX21hcFtkYmZkLnN5bXNbaV0tPnNlY3Rpb24tPm5hbWVdOworCQlpZiAoZmlsZXBvcyAhPSAwKQorCQkJZGJmZC5zeW1zW2ldLT5zZWN0aW9uLT5maWxlcG9zID0gZmlsZXBvczsKKwkJc3ltYm9scy5wdXNoX2JhY2sob3BfYmZkX3N5bWJvbChkYmZkLnN5bXNbaV0pKTsKKwl9CisKKwlzeW1ib2xzLnNvcnQoKTsKKworCXN5bWJvbHNfZm91bmRfdDo6aXRlcmF0b3IgaXQgPSBzeW1ib2xzLmJlZ2luKCk7CisKKwkvLyB3ZSBuZWVkIHRvIGVuc3VyZSB0aGFuIGZvciBhIGdpdmVuIHZtYSBvbmx5IG9uZSBzeW1ib2wgZXhpc3QgZWxzZQorCS8vIHdlIHJlYWQgbW9yZSB0aGFuIG9uZSB0aW1lIHNvbWUgc2FtcGxlcy4gRml4ICM1MjYwOTgKKwl3aGlsZSAoaXQgIT0gc3ltYm9scy5lbmQoKSkgeworCQlzeW1ib2xzX2ZvdW5kX3Q6Oml0ZXJhdG9yIHRlbXAgPSBpdDsKKwkJKyt0ZW1wOworCQlpZiAodGVtcCAhPSBzeW1ib2xzLmVuZCgpICYmIChpdC0+dm1hKCkgPT0gdGVtcC0+dm1hKCkpICYmCisJCQkoaXQtPmZpbGVwb3MoKSA9PSB0ZW1wLT5maWxlcG9zKCkpKSB7CisJCQlpZiAoYm9yaW5nX3N5bWJvbCgqaXQsICp0ZW1wKSkgeworCQkJCWl0ID0gc3ltYm9scy5lcmFzZShpdCk7CisJCQl9IGVsc2UgeworCQkJCXN5bWJvbHMuZXJhc2UodGVtcCk7CisJCQl9CisJCX0gZWxzZSB7CisJCQkrK2l0OworCQl9CisJfQorCisJLy8gbm93IHdlIGNhbiBjYWxjdWxhdGUgdGhlIHN5bWJvbCBzaXplLCB3ZSBjYW4ndCBmaXJzdCBpbmNsdWRlL2V4Y2x1ZGUKKwkvLyBzeW1ib2xzIGJlY2F1c2UgdGhlIHNpemUgb2Ygc3ltYm9sIGlzIGNhbGN1bGF0ZWQgZnJvbSB0aGUgZGlmZmVyZW5jZQorCS8vIGJldHdlZW4gdGhlIHZtYSBvZiBhIHN5bWJvbCBhbmQgdGhlIG5leHQgb25lLgorCWZvciAoaXQgPSBzeW1ib2xzLmJlZ2luKCkgOyBpdCAhPSBzeW1ib2xzLmVuZCgpOyArK2l0KSB7CisJCW9wX2JmZF9zeW1ib2wgY29uc3QgKiBuZXh0ID0gMDsKKwkJc3ltYm9sc19mb3VuZF90OjppdGVyYXRvciB0ZW1wID0gaXQ7CisJCSsrdGVtcDsKKwkJaWYgKHRlbXAgIT0gc3ltYm9scy5lbmQoKSkKKwkJCW5leHQgPSAmKnRlbXA7CisJCWl0LT5zaXplKHN5bWJvbF9zaXplKCppdCwgbmV4dCkpOworCX0KK30KKworCit2b2lkIG9wX2JmZDo6YWRkX3N5bWJvbHMob3BfYmZkOjpzeW1ib2xzX2ZvdW5kX3QgJiBzeW1ib2xzLAorICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ19maWx0ZXIgY29uc3QgJiBzeW1ib2xfZmlsdGVyKQoreworCS8vIGltYWdlcyB3aXRoIG5vIHN5bWJvbHMgZGVidWcgaW5mbyBhdmFpbGFibGUgZ2V0IGEgcGxhY2Vob2xkZXIgc3ltYm9sCisJaWYgKHN5bWJvbHMuZW1wdHkoKSkKKwkJc3ltYm9scy5wdXNoX2JhY2soY3JlYXRlX2FydGlmaWNpYWxfc3ltYm9sKCkpOworCisJY3ZlcmIgPDwgdmJmZCA8PCAibnVtYmVyIG9mIHN5bWJvbHMgYmVmb3JlIGZpbHRlcmluZyAiCisJICAgICAgPDwgZGVjIDw8IHN5bWJvbHMuc2l6ZSgpIDw8IGhleCA8PCBlbmRsOworCisJc3ltYm9sc19mb3VuZF90OjppdGVyYXRvciBpdDsKKwlpdCA9IHJlbW92ZV9pZihzeW1ib2xzLmJlZ2luKCksIHN5bWJvbHMuZW5kKCksCisJICAgICAgICAgICAgICAgcmVtb3ZlX2ZpbHRlcihzeW1ib2xfZmlsdGVyKSk7CisKKwljb3B5KHN5bWJvbHMuYmVnaW4oKSwgaXQsIGJhY2tfaW5zZXJ0ZXIoc3ltcykpOworCisJY3ZlcmIgPDwgdmJmZCA8PCAibnVtYmVyIG9mIHN5bWJvbHMgbm93ICIKKwkgICAgICA8PCBkZWMgPDwgc3ltcy5zaXplKCkgPDwgaGV4IDw8IGVuZGw7Cit9CisKKworYmZkX3ZtYSBvcF9iZmQ6Om9mZnNldF90b19wYyhiZmRfdm1hIG9mZnNldCkgY29uc3QKK3sKKwlhc2VjdGlvbiBjb25zdCAqIHNlY3QgPSBpYmZkLmFiZmQtPnNlY3Rpb25zOworCisJZm9yICg7IHNlY3Q7IHNlY3QgPSBzZWN0LT5uZXh0KSB7CisJCWlmIChvZmZzZXQgPj0gYmZkX3ZtYShzZWN0LT5maWxlcG9zKSAmJgorCQkgICAgKCFzZWN0LT5uZXh0IHx8IG9mZnNldCA8IGJmZF92bWEoc2VjdC0+bmV4dC0+ZmlsZXBvcykpKSB7CisJCQlyZXR1cm4gc2VjdC0+dm1hICsgKG9mZnNldCAtIHNlY3QtPmZpbGVwb3MpOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK2Jvb2wgb3BfYmZkOjoKK3N5bWJvbF9oYXNfY29udGVudHMoc3ltYm9sX2luZGV4X3Qgc3ltX2lkeCkKK3sKKwlvcF9iZmRfc3ltYm9sIGNvbnN0ICYgYmZkX3N5bSA9IHN5bXNbc3ltX2lkeF07CisJc3RyaW5nIGNvbnN0IG5hbWUgPSBiZmRfc3ltLm5hbWUoKTsKKwlpZiAobmFtZS5zaXplKCkgPT0gMCB8fCBiZmRfc3ltLmFydGlmaWNpYWwoKSB8fCAhaWJmZC52YWxpZCgpKQorCQlyZXR1cm4gZmFsc2U7CisJZWxzZQorCQlyZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBvcF9iZmQ6OgorZ2V0X3N5bWJvbF9jb250ZW50cyhzeW1ib2xfaW5kZXhfdCBzeW1faW5kZXgsIHVuc2lnbmVkIGNoYXIgKiBjb250ZW50cykgY29uc3QKK3sKKwlvcF9iZmRfc3ltYm9sIGNvbnN0ICYgYmZkX3N5bSA9IHN5bXNbc3ltX2luZGV4XTsKKwlzaXplX3Qgc2l6ZSA9IGJmZF9zeW0uc2l6ZSgpOworCisJaWYgKCFiZmRfZ2V0X3NlY3Rpb25fY29udGVudHMoaWJmZC5hYmZkLCBiZmRfc3ltLnN5bWJvbCgpLT5zZWN0aW9uLCAKKwkJCQkgY29udGVudHMsIAorCQkJCSBzdGF0aWNfY2FzdDxmaWxlX3B0cj4oYmZkX3N5bS52YWx1ZSgpKSwgc2l6ZSkpIHsKKwkJcmV0dXJuIGZhbHNlOworCX0KKwlyZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBvcF9iZmQ6Omhhc19kZWJ1Z19pbmZvKCkgY29uc3QKK3sKKwlpZiAoZGVidWdfaW5mby5jYWNoZWQoKSkKKwkJcmV0dXJuIGRlYnVnX2luZm8uZ2V0KCk7CisKKwlpZiAoIWliZmQudmFsaWQoKSkKKwkJcmV0dXJuIGRlYnVnX2luZm8ucmVzZXQoZmFsc2UpOworCisJaWYgKGliZmQuaGFzX2RlYnVnX2luZm8oKSkKKwkJcmV0dXJuIGRlYnVnX2luZm8ucmVzZXQodHJ1ZSk7CisKKwkvLyBjaGVjayB0byBzZWUgaWYgdGhlcmUgaXMgYW4gLmRlYnVnIGZpbGUKKworCWlmIChmaW5kX3NlcGFyYXRlX2RlYnVnX2ZpbGUoaWJmZC5hYmZkLCBmaWxlbmFtZSwgZGVidWdfZmlsZW5hbWUsIGV4dHJhX2ZvdW5kX2ltYWdlcykpIHsKKwkJY3ZlcmIgPDwgdmJmZCA8PCAibm93IGxvYWRpbmc6ICIgPDwgZGVidWdfZmlsZW5hbWUgPDwgZW5kbDsKKwkJZGJmZC5hYmZkID0gb3Blbl9iZmQoZGVidWdfZmlsZW5hbWUpOworCQlpZiAoZGJmZC5oYXNfZGVidWdfaW5mbygpKQorCQkJcmV0dXJuIGRlYnVnX2luZm8ucmVzZXQodHJ1ZSk7CisJfQorCisJLy8gLmRlYnVnIGlzIG9wdGlvbmFsLCBzbyB3aWxsIG5vdCBmYWlsIGlmIHRoZXJlJ3MgYSBwcm9ibGVtCisJY3ZlcmIgPDwgdmJmZCA8PCAiZmFpbGVkIHRvIHByb2Nlc3Mgc2VwYXJhdGUgZGVidWcgZmlsZSAiCisJICAgICAgPDwgZGVidWdfZmlsZW5hbWUgPDwgZW5kbDsKKworCXJldHVybiBkZWJ1Z19pbmZvLnJlc2V0KGZhbHNlKTsKK30KKworCitib29sIG9wX2JmZDo6Z2V0X2xpbmVucihzeW1ib2xfaW5kZXhfdCBzeW1faWR4LCBiZmRfdm1hIG9mZnNldCwKKwkJCXN0cmluZyAmIHNvdXJjZV9maWxlbmFtZSwgdW5zaWduZWQgaW50ICYgbGluZW5yKSBjb25zdAoreworCWlmICghaGFzX2RlYnVnX2luZm8oKSkKKwkJcmV0dXJuIGZhbHNlOworCisJYmZkX2luZm8gY29uc3QgJiBiID0gZGJmZC52YWxpZCgpID8gZGJmZCA6IGliZmQ7CisJb3BfYmZkX3N5bWJvbCBjb25zdCAmIHN5bSA9IHN5bXNbc3ltX2lkeF07CisKKwlsaW5lbnJfaW5mbyBjb25zdCBpbmZvID0gZmluZF9uZWFyZXN0X2xpbmUoYiwgc3ltLCBvZmZzZXQsIGFub25fb2JqKTsKKworCWlmICghaW5mby5mb3VuZCkKKwkJcmV0dXJuIGZhbHNlOworCisJc291cmNlX2ZpbGVuYW1lID0gaW5mby5maWxlbmFtZTsKKwlsaW5lbnIgPSBpbmZvLmxpbmU7CisJcmV0dXJuIHRydWU7Cit9CisKKworc2l6ZV90IG9wX2JmZDo6c3ltYm9sX3NpemUob3BfYmZkX3N5bWJvbCBjb25zdCAmIHN5bSwKKwkJCSAgIG9wX2JmZF9zeW1ib2wgY29uc3QgKiBuZXh0KSBjb25zdAoreworCXVuc2lnbmVkIGxvbmcgbG9uZyBzdGFydCA9IHN5bS5maWxlcG9zKCk7CisJdW5zaWduZWQgbG9uZyBsb25nIGVuZDsKKworCWlmIChuZXh0ICYmIChzeW0uc2VjdGlvbigpICE9IG5leHQtPnNlY3Rpb24oKSkpCisJCWVuZCA9IHN5bS5zeW1ib2xfZW5kcG9zKCk7CisJZWxzZQorCQllbmQgPSBuZXh0ID8gbmV4dC0+ZmlsZXBvcygpIDogZmlsZV9zaXplOworCisJaWYgKHN0YXJ0ID4gZW5kKQorCQlyZXR1cm4gMDsKKworCXJldHVybiBlbmQgLSBzdGFydDsKK30KKworCit2b2lkIG9wX2JmZDo6Z2V0X3N5bWJvbF9yYW5nZShzeW1ib2xfaW5kZXhfdCBzeW1faWR4LAorCQkJICAgICAgdW5zaWduZWQgbG9uZyBsb25nICYgc3RhcnQsIHVuc2lnbmVkIGxvbmcgbG9uZyAmIGVuZCkgY29uc3QKK3sKKwlvcF9iZmRfc3ltYm9sIGNvbnN0ICYgc3ltID0gc3ltc1tzeW1faWR4XTsKKworCWJvb2wgY29uc3QgdmVyYm9zZSA9IGN2ZXJiIDw8ICh2YmZkICYgdmxldmVsMSk7CisKKwlpZiAoYW5vbl9vYmopCisJCXN0YXJ0ID0gc3ltLnZtYSgpOworCWVsc2UKKwkJc3RhcnQgPSBzeW0uZmlsZXBvcygpOworCWVuZCA9IHN0YXJ0ICsgc3ltLnNpemUoKTsKKworCWlmICghdmVyYm9zZSkKKwkJcmV0dXJuOworCisJaW9fc3RhdGUgc3RhdGUoY3ZlcmIgPDwgKHZiZmQgJiB2bGV2ZWwxKSk7CisKKwljdmVyYiA8PCAodmJmZCAmIHZsZXZlbDEpIDw8ICJzeW1ib2wgIiA8PCBzeW0ubmFtZSgpCisJICAgICAgPDwgIiwgdmFsdWUgIiA8PCBoZXggPDwgc3ltLnZhbHVlKCkgPDwgZW5kbDsKKwljdmVyYiA8PCAodmJmZCAmIHZsZXZlbDEpCisJICAgICAgPDwgInN0YXJ0ICIgPDwgaGV4IDw8IHN0YXJ0IDw8ICIsIGVuZCAiIDw8IGVuZCA8PCBlbmRsOworCisJaWYgKHN5bS5zeW1ib2woKSkgeworCQljdmVyYiA8PCAodmJmZCAmIHZsZXZlbDEpIDw8ICJpbiBzZWN0aW9uICIKKwkJICAgICAgPDwgc3ltLnN5bWJvbCgpLT5zZWN0aW9uLT5uYW1lIDw8ICIsIGZpbGVwb3MgIgorCQkgICAgICA8PCBoZXggPDwgc3ltLnN5bWJvbCgpLT5zZWN0aW9uLT5maWxlcG9zIDw8IGVuZGw7CisJfQorfQorCisKK3ZvaWQgb3BfYmZkOjpnZXRfdm1hX3JhbmdlKGJmZF92bWEgJiBzdGFydCwgYmZkX3ZtYSAmIGVuZCkgY29uc3QKK3sKKwlpZiAoIXN5bXMuZW1wdHkoKSkgeworCQkvLyBzeW1zIGFyZSBzb3J0ZWQgYnkgdm1hIHNvIHZtYSBvZiB0aGUgZmlyc3Qgc3ltYm9sIGFuZCB2bWEgKworCQkvLyBzaXplIG9mIHRoZSBsYXN0IHN5bWJvbCBnaXZlIHRoZSB2bWEgcmFuZ2UgZm9yIGdwcm9mIG91dHB1dAorCQlvcF9iZmRfc3ltYm9sIGNvbnN0ICYgbGFzdF9zeW1iID0gc3ltc1tzeW1zLnNpemUoKSAtIDFdOworCQlzdGFydCA9IHN5bXNbMF0udm1hKCk7CisJCS8vIGVuZCBpcyBleGNsdWRlZCBmcm9tIHJhbmdlIHNvICsgMSAqaWYqIGxhc3Rfc3ltYi5zaXplKCkgIT0gMAorCQllbmQgPSBsYXN0X3N5bWIudm1hKCkgKyBsYXN0X3N5bWIuc2l6ZSgpICsgKGxhc3Rfc3ltYi5zaXplKCkgIT0gMCk7CisJfSBlbHNlIHsKKwkJc3RhcnQgPSAwOworCQllbmQgPSBmaWxlX3NpemU7CisJfQorfQorCisKK29wX2JmZF9zeW1ib2wgY29uc3Qgb3BfYmZkOjpjcmVhdGVfYXJ0aWZpY2lhbF9zeW1ib2woKQoreworCisJYmZkX3ZtYSBzdGFydCwgZW5kOworCWdldF92bWFfcmFuZ2Uoc3RhcnQsIGVuZCk7CisJcmV0dXJuIG9wX2JmZF9zeW1ib2woc3RhcnQsIGVuZCAtIHN0YXJ0LCBnZXRfZmlsZW5hbWUoKSk7Cit9CisKKworc3RyaW5nIG9wX2JmZDo6Z2V0X2ZpbGVuYW1lKCkgY29uc3QKK3sKKwlyZXR1cm4gZmlsZW5hbWU7Cit9CisKKworc2l6ZV90IG9wX2JmZDo6YmZkX2FyY2hfYml0c19wZXJfYWRkcmVzcygpIGNvbnN0Cit7CisJaWYgKGliZmQudmFsaWQoKSkKKwkJcmV0dXJuIDo6YmZkX2FyY2hfYml0c19wZXJfYWRkcmVzcyhpYmZkLmFiZmQpOworCS8vIEZJWE1FOiB0aGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgb25seSBpZiB0aGUgdW5kZXJsaW5lZCBpYmZkCisJLy8gaXMgb2ssIG11c3Qgd2UgdGhyb3cgPworCXJldHVybiBzaXplb2YoYmZkX3ZtYSk7Cit9CmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9saWJ1dGlsKysvb3BfYmZkLmggYi9vcHJvZmlsZS0wLjkuNy9saWJ1dGlsKysvb3BfYmZkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmY1MDIyYwotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2xpYnV0aWwrKy9vcF9iZmQuaApAQCAtMCwwICsxLDMwNSBAQAorLyoqCisgKiBAZmlsZSBvcF9iZmQuaAorICogRW5jYXBzdWxhdGlvbiBvZiBiZmQgb2JqZWN0cworICoKKyAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDIgT1Byb2ZpbGUgYXV0aG9ycworICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKKyAqCisgKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKKyAqIEBhdXRob3IgSm9obiBMZXZvbgorICovCisKKyNpZm5kZWYgT1BfQkZEX0gKKyNkZWZpbmUgT1BfQkZEX0gKKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSA8dmVjdG9yPgorI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDxsaXN0PgorI2luY2x1ZGUgPG1hcD4KKyNpbmNsdWRlIDxzZXQ+CisKKyNpbmNsdWRlICJiZmRfc3VwcG9ydC5oIgorI2luY2x1ZGUgImxvY2F0ZV9pbWFnZXMuaCIKKyNpbmNsdWRlICJ1dGlsaXR5LmgiCisjaW5jbHVkZSAiY2FjaGVkX3ZhbHVlLmgiCisjaW5jbHVkZSAib3BfdHlwZXMuaCIKKworY2xhc3Mgb3BfYmZkOworY2xhc3Mgc3RyaW5nX2ZpbHRlcjsKK2NsYXNzIGV4dHJhX2ltYWdlczsKKworLy8vIGFsbCBzeW1ib2wgdmVjdG9yIGluZGV4aW5nIHVzZXMgdGhpcyB0eXBlCit0eXBlZGVmIHNpemVfdCBzeW1ib2xfaW5kZXhfdDsKKworLyoqCisgKiBBIHN5bWJvbCBkZXNjcmlwdGlvbiBmcm9tIGEgYmZkIHBvaW50IG9mIHZpZXcuIFRoaXMgZHVwbGljYXRlCisgKiBpbmZvcm1hdGlvbiBwb2ludGVkIGJ5IGFuIGFzeW1ib2wsIHdlIG5lZWQgdGhpcyBkdXBsaWNhdGlvbiBpbiBjYXNlCisgKiB0aGUgc3ltYm9sIGlzIGFuIGFydGlmaWNpYWwgc3ltYm9sCisgKi8KK2NsYXNzIG9wX2JmZF9zeW1ib2wgeworcHVibGljOgorCisJLy8vIGN0b3IgZm9yIHJlYWwgc3ltYm9scworCW9wX2JmZF9zeW1ib2woYXN5bWJvbCBjb25zdCAqIGEpOworCisJLy8vIGN0b3IgZm9yIGFydGlmaWNpYWwgc3ltYm9scworCW9wX2JmZF9zeW1ib2woYmZkX3ZtYSB2bWEsIHNpemVfdCBzaXplLCBzdGQ6OnN0cmluZyBjb25zdCAmIG5hbWUpOworCisJYmZkX3ZtYSB2bWEoKSBjb25zdCB7IHJldHVybiBzeW1iX3ZhbHVlICsgc2VjdGlvbl92bWE7IH0KKwl1bnNpZ25lZCBsb25nIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gc3ltYl92YWx1ZTsgfQorCXVuc2lnbmVkIGxvbmcgZmlsZXBvcygpIGNvbnN0IHsgcmV0dXJuIHN5bWJfdmFsdWUgKyBzZWN0aW9uX2ZpbGVwb3M7IH0KKwl1bnNpZ25lZCBsb25nIHN5bWJvbF9lbmRwb3Modm9pZCkgY29uc3Q7CisJYXNlY3Rpb24gY29uc3QgKiBzZWN0aW9uKHZvaWQpIGNvbnN0IHsgcmV0dXJuIGJmZF9zeW1ib2wtPnNlY3Rpb247IH0KKwlzdGQ6OnN0cmluZyBjb25zdCAmIG5hbWUoKSBjb25zdCB7IHJldHVybiBzeW1iX25hbWU7IH0KKwlhc3ltYm9sIGNvbnN0ICogc3ltYm9sKCkgY29uc3QgeyByZXR1cm4gYmZkX3N5bWJvbDsgfQorCXNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gc3ltYl9zaXplOyB9CisJdm9pZCBzaXplKHNpemVfdCBzKSB7IHN5bWJfc2l6ZSA9IHM7IH0KKwlib29sIGhpZGRlbigpIGNvbnN0IHsgcmV0dXJuIHN5bWJfaGlkZGVuOyB9CisJYm9vbCB3ZWFrKCkgY29uc3QgeyByZXR1cm4gc3ltYl93ZWFrOyB9CisJYm9vbCBhcnRpZmljaWFsKCkgY29uc3QgeyByZXR1cm4gc3ltYl9hcnRpZmljaWFsOyB9CisKKwkvLy8gY29tcGFyZSB0d28gc3ltYm9scyBieSB0aGVpciBmaWxlcG9zKCkKKwlib29sIG9wZXJhdG9yPChvcF9iZmRfc3ltYm9sIGNvbnN0ICYgbGhzKSBjb25zdDsKKworcHJpdmF0ZToKKwkvLy8gdGhlIG9yaWdpbmFsIGJmZCBzeW1ib2wsIHRoaXMgY2FuIGJlIG51bGwgaWYgdGhlIHN5bWJvbCBpcyBhbgorCS8vLyBhcnRpZmljaWFsIHN5bWJvbAorCWFzeW1ib2wgY29uc3QgKiBiZmRfc3ltYm9sOworCS8vLyB0aGUgb2Zmc2V0IG9mIHRoaXMgc3ltYm9sIHJlbGF0aXZlIHRvIHRoZSBiZWdpbiBvZiB0aGUgc2VjdGlvbidzCisJLy8vIHN5bWJvbAorCXVuc2lnbmVkIGxvbmcgc3ltYl92YWx1ZTsKKwkvLy8gdGhlIHNlY3Rpb24gZmlsZXBvcyBmb3IgdGhpcyBzeW1ib2wKKwl1bnNpZ25lZCBsb25nIHNlY3Rpb25fZmlsZXBvczsKKwkvLy8gdGhlIHNlY3Rpb24gdm1hIGZvciB0aGlzIHN5bWJvbAorCWJmZF92bWEgc2VjdGlvbl92bWE7CisJLy8vIHRoZSBzaXplIG9mIHRoaXMgc3ltYm9sCisJc2l6ZV90IHN5bWJfc2l6ZTsKKwkvLy8gdGhlIG5hbWUgb2YgdGhlIHN5bWJvbAorCXN0ZDo6c3RyaW5nIHN5bWJfbmFtZTsKKwkvLy8gbm9ybWFsbHkgbm90IGV4dGVybmFsbHkgdmlzaWJsZSBzeW1ib2wKKwlib29sIHN5bWJfaGlkZGVuOworCS8vLyB3aGV0aGVyIG90aGVyIHN5bWJvbHMgY2FuIG92ZXJyaWRlIGl0CisJYm9vbCBzeW1iX3dlYWs7CisJLy8vIHN5bWJvbCBpcyBhcnRpZmljaWFsbHkgY3JlYXRlZAorCWJvb2wgc3ltYl9hcnRpZmljaWFsOworCS8vLyBjb2RlIGJ5dGVzIGNvcnJlc3BvbmRpbmcgdG8gc3ltYm9sIC0tIHVzZWQgZm9yIFhNTCBnZW5lcmF0aW9uCisJc3RkOjpzdHJpbmcgc3ltYl9ieXRlczsKK307CisKKy8qKgorICogRW5jYXBzdWxhdGlvbiBvZiBhIGJmZCBvYmplY3QuIFNpbXBsaWZpZXMgb3Blbi9jbG9zZSBvZiBiZmQsIGVudW1lcmF0aW5nCisgKiBzeW1ib2xzIGFuZCByZXRyaWV2aW5nIGluZm9ybWF0aW9ucyBmb3Igc3ltYm9scyBvciB2bWEuCisgKgorICogVXNlIG9mIHRoaXMgY2xhc3MgcmVsaWVzIG9uIGEgc3RkOjpvc3RyZWFtIGN2ZXJiCisgKi8KK2NsYXNzIG9wX2JmZCB7CitwdWJsaWM6CisJLyoqCisJICogQHBhcmFtIGZpbGVuYW1lICB0aGUgbmFtZSBvZiB0aGUgaW1hZ2UgZmlsZQorCSAqIEBwYXJhbSBzeW1ib2xfZmlsdGVyICBmaWx0ZXIgdG8gYXBwbHkgdG8gc3ltYm9scworCSAqIEBwYXJhbSBleHRyYV9pbWFnZXMgY29udGFpbmVyIHdoZXJlIGFsbCBleHRyYSBjYW5kaWRhdGUgZmlsZW5hbWVzCisJICogICAgYXJlIHN0b3JlZAorCSAqIEBwYXJhbSBvayBpbi1vdXQgcGFyYW1ldGVyOiBvbiBpbiwgaWYgbm90IHNldCwgZG9uJ3QKKwkgKiBvcGVuIHRoZSBiZmQgKGJlY2F1c2UgaXQncyBub3QgdGhlcmUgb3Igd2hhdGV2ZXIpLiBPbiBvdXQsCisJICogaXQncyBzZXQgdG8gZmFsc2UgaWYgdGhlIGJmZCBjb3VsZG4ndCBiZSBsb2FkZWQuCisJICovCisJb3BfYmZkKHN0ZDo6c3RyaW5nIGNvbnN0ICYgZmlsZW5hbWUsCisJICAgICAgIHN0cmluZ19maWx0ZXIgY29uc3QgJiBzeW1ib2xfZmlsdGVyLAorCSAgICAgICBleHRyYV9pbWFnZXMgY29uc3QgJiBleHRyYV9pbWFnZXMsCisJICAgICAgIGJvb2wgJiBvayk7CisKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdG9yIGlzIHVzZWQgd2hlbiBwcm9jZXNzaW5nIGFuIFNQVSBwcm9maWxlCisJICogd2hlcmUgdGhlIFNQVSBFTEYgaXMgZW1iZWRkZWQgd2l0aGluIHRoZSBQUEUgYmluYXJ5LgorCSAqLworCW9wX2JmZCh1aW50NjRfdCBzcHVfb2Zmc2V0LAorCSAgICAgICBzdGQ6OnN0cmluZyBjb25zdCAmIGZpbGVuYW1lLAorCSAgICAgICBzdHJpbmdfZmlsdGVyIGNvbnN0ICYgc3ltYm9sX2ZpbHRlciwKKwkgICAgICAgZXh0cmFfaW1hZ2VzIGNvbnN0ICYgZXh0cmFfaW1hZ2VzLAorCSAgICAgICBib29sICYgb2spOworCisJc3RkOjpzdHJpbmcgZ2V0X2VtYmVkZGluZ19maWxlbmFtZSgpIGNvbnN0IHsgcmV0dXJuIGVtYmVkZGluZ19maWxlbmFtZTsgfQorCisJLy8vIGNsb3NlIGFuIG9wZW5lZCBiZmQgaW1hZ2UgYW5kIGZyZWUgYWxsIHJlbGF0ZWQgcmVzb3VyY2VzCisJfm9wX2JmZCgpOworCisJLyoqCisJICogQHBhcmFtIHN5bV9pZHggaW5kZXggb2YgdGhlIHN5bWJvbAorCSAqIEBwYXJhbSBvZmZzZXQgZmVudHJ5IG51bWJlcgorCSAqIEBwYXJhbSBmaWxlbmFtZSBvdXRwdXQgcGFyYW1ldGVyIHRvIHN0b3JlIGZpbGVuYW1lCisJICogQHBhcmFtIGxpbmVuciBvdXRwdXQgcGFyYW1ldGVyIHRvIHN0b3JlIGxpbmVuci4KKwkgKgorCSAqIFJldHJpZXZlIHRoZSByZWxldmFudCBmaW5lbmFtZTpsaW5lbnIgaW5mb3JtYXRpb24gZm9yIHRoZSBzeW1faWR4CisJICogYXQgb2Zmc2V0LiBJZiB0aGUgbG9va3VwIGZhaWxzLCByZXR1cm4gZmFsc2UuIEluIHNvbWUgY2FzZXMgdGhpcworCSAqIGZ1bmN0aW9uIGNhbiByZXRyaWV2ZSB0aGUgZmlsZW5hbWUgYW5kIHJldHVybiB0cnVlIGJ1dCBmYWlsIHRvCisJICogcmV0cmlldmUgdGhlIGxpbmVuciBhbmQgc28gY2FuIHJldHVybiB6ZXJvIGluIGxpbmVucgorCSAqLworCWJvb2wgZ2V0X2xpbmVucihzeW1ib2xfaW5kZXhfdCBzeW1faWR4LCBiZmRfdm1hIG9mZnNldCwKKwkJCXN0ZDo6c3RyaW5nICYgZmlsZW5hbWUsIHVuc2lnbmVkIGludCAmIGxpbmVucikgY29uc3Q7CisKKwkvKioKKwkgKiBAcGFyYW0gc3ltX2lkeCBzeW1ib2wgaW5kZXgKKwkgKiBAcGFyYW0gc3RhcnQgcmVmZXJlbmNlIHRvIHN0YXJ0IHZhcgorCSAqIEBwYXJhbSBlbmQgcmVmZXJlbmNlIHRvIGVuZCB2YXIKKwkgKgorCSAqIENhbGN1bGF0ZXMgdGhlIHJhbmdlIG9mIHNhbXBsZSBmaWxlIGVudHJpZXMgY292ZXJlZCBieSBzeW0uIHN0YXJ0CisJICogYW5kIGVuZCB3aWxsIGJlIGZpbGxlZCBpbiBhcHByb3ByaWF0ZWx5LiBJZiBpbmRleCBpcyB0aGUgbGFzdCBlbnRyeQorCSAqIGluIHN5bWJvbCB0YWJsZSwgYWxsIGVudHJpZXMgdXAgdG8gdGhlIGVuZCBvZiB0aGUgc2FtcGxlIGZpbGUgd2lsbAorCSAqIGJlIHVzZWQuICBBZnRlciBjYWxjdWxhdGluZyBzdGFydCBhbmQgZW5kIHRoZXkgYXJlIHNhbml0aXplZAorCSAqCisJICogQWxsIGVycm9ycyBhcmUgZmF0YWwuCisJICovCisJdm9pZCBnZXRfc3ltYm9sX3JhbmdlKHN5bWJvbF9pbmRleF90IHN5bV9pZHgsCisJCQkgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgJiBzdGFydCwgdW5zaWduZWQgbG9uZyBsb25nICYgZW5kKSBjb25zdDsKKworCS8qKgorCSAqIEBwYXJhbSBzdGFydCByZWZlcmVuY2UgdG8gdGhlIHN0YXJ0IHZtYQorCSAqIEBwYXJhbSBlbmQgcmVmZXJlbmNlIHRvIHRoZSBlbmQgdm1hCisJICoKKwkgKiByZXR1cm4gaW4gc3RhcnQsIGVuZCB0aGUgdm1hIHJhbmdlIGZvciB0aGlzIGJpbmFyeSBvYmplY3QuCisJICovCisJdm9pZCBnZXRfdm1hX3JhbmdlKGJmZF92bWEgJiBzdGFydCwgYmZkX3ZtYSAmIGVuZCkgY29uc3Q7CisKKwkvKiogcmV0dXJuIHRoZSByZWxvY2F0ZWQgUEMgdmFsdWUgZm9yIHRoZSBnaXZlbiBmaWxlIG9mZnNldCAqLworCWJmZF92bWEgb2Zmc2V0X3RvX3BjKGJmZF92bWEgb2Zmc2V0KSBjb25zdDsKKworCS8qKgorCSAqIElmIHBhc3NlZCAwLCByZXR1cm4gdGhlIGZpbGUgcG9zaXRpb24gb2YgdGhlIC50ZXh0IHNlY3Rpb24uCisJICogT3RoZXJ3aXNlLCByZXR1cm4gdGhlIGZpbGVwb3Mgb2YgYSBzZWN0aW9uIHdpdGggYSBtYXRjaGluZworCSAqIHZtYS4KKwkgKi8KKwl1bnNpZ25lZCBsb25nIGdldF9zdGFydF9vZmZzZXQoYmZkX3ZtYSB2bWEgPSAwKSBjb25zdDsKKyAKKwkvKioKKwkgKiBSZXR1cm4gdGhlIGltYWdlIG5hbWUgb2YgdGhlIHVuZGVybHlpbmcgYmluYXJ5IGltYWdlLiBGb3IgYW4KKwkgKiBhcmNoaXZlLCB0aGlzIHJldHVybnMgdGhlIHBhdGggKndpdGhpbiogdGhlIGFyY2hpdmUsIG5vdCB0aGUKKwkgKiBmdWxsIHBhdGggb2YgdGhlIGZpbGUuCisJICovCisJc3RkOjpzdHJpbmcgZ2V0X2ZpbGVuYW1lKCkgY29uc3Q7CisKKwkvLy8gc29ydGVkIHZlY3RvciBieSB2bWEgb2YgaW50ZXJlc3Rpbmcgc3ltYm9sLgorCXN0ZDo6dmVjdG9yPG9wX2JmZF9zeW1ib2w+IHN5bXM7CisKKwkvLy8gcmV0dXJuIGluIGJpdHMgdGhlIGJmZF92bWEgc2l6ZSBmb3IgdGhpcyBiaW5hcnkuIFRoaXMgaXMgbmVlZGVkCisJLy8vIGJlY2F1c2UgZ3Byb2Ygb3V0cHV0IGRlcGVuZCBvbiB0aGUgYmZkX3ZtYSBmb3IgKnRoaXMqIGJpbmFyeQorCS8vLyBhbmQgZG8gbm90IGRlcGVuZCBvbiBzaXplb2YoYmZkX3ZtYSkKKwlzaXplX3QgYmZkX2FyY2hfYml0c19wZXJfYWRkcmVzcygpIGNvbnN0OworCisJLy8vIHJldHVybiB0cnVlIGlmIGJpbmFyeSBjb250YWluIHNvbWUgZGVidWcgaW5mb3JtYXRpb24KKwlib29sIGhhc19kZWJ1Z19pbmZvKCkgY29uc3Q7CisKKwkvKioKKwkgKiBAcGFyYW0gc3ltX2lkeCBzeW1ib2wgaW5kZXgKKwkgKgorCSAqIFJldHVybiB0cnVlIG9yIGZhbHNlLCBpbmRpY2F0aW5nIHdoZXRoZXIgb3Igbm90IHRoZQorCSAqIHN5bWJvbCByZWZlcmVuY2VkIGJ5IHRoZSBwYXNzZWQgc3ltX2lkeCBoYXMgY29kZSBhdmFpbGFibGUuCisJICogU29tZSBzeW1ib2xzIGhhdmUgbm8gY29kZSBhc3NvY2lhdGVkIHdpdGggdGhlbTsgZm9yIGV4YW1wbGUsCisJICogYXJ0aWZpY2lhbCBzeW1ib2xzIGNyZWF0ZWQgZm9yIGFub255bW91cyBtZW1vcnkgc2FtcGxlcyBvciBmb3IKKwkgKiBzdHJpcHBlZCBiaW5hcmllcyB3aXRoIG5vIHN5bWJvbCBkZWJ1ZyBpbmZvLiAgQWRkaXRpb25hbGx5LAorCSAqIGlmIHRoZSBiZmQgb2JqZWN0IGFzc29jaWF0ZWQgd2l0aCB0aGUgc3ltYm9sIGlzIG5vdCB2YWxpZCwKKwkgKiB0aGlzIGZ1bmN0aW9uIHdpbGwgYWxzbyByZXR1cm4gZmFsc2UuCisJICoKKwkgKiBOT1RFOiAgVGhpcyBjYWxsIHNob3VsZCBiZSBtYWRlIHByaW9yIHRvIGludm9raW5nCisJICogICAgICAgIGdldF9zeW1ib2xfY29udGVudHMgdG8gYXZvaWQgdW5uZWNlc3NhcmlseSBhbGxvY2F0aW5nCisJICogICAgICAgIG1lbW9yeSBmb3IgdGhlIHN5bWJvbCBjb250ZW50cy4KKwkgKi8KKwlib29sIHN5bWJvbF9oYXNfY29udGVudHMoc3ltYm9sX2luZGV4X3Qgc3ltX2lkeCk7CisKKwlib29sIGdldF9zeW1ib2xfY29udGVudHMoc3ltYm9sX2luZGV4X3Qgc3ltX2luZGV4LAorCQl1bnNpZ25lZCBjaGFyICogY29udGVudHMpIGNvbnN0OworCisJYm9vbCB2YWxpZCgpIGNvbnN0IHsgcmV0dXJuIGliZmQudmFsaWQoKTsgfQorCitwcml2YXRlOgorCS8vLyB0ZW1wb3JhcnkgY29udGFpbmVyIHR5cGUgZm9yIGdldHRpbmcgc3ltYm9scworCXR5cGVkZWYgc3RkOjpsaXN0PG9wX2JmZF9zeW1ib2w+IHN5bWJvbHNfZm91bmRfdDsKKworCS8qKgorCSAqIFBhcnNlIGFuZCBzb3J0IGluIGFzY2VuZGluZyBvcmRlciBhbGwgc3ltYm9scworCSAqIGluIHRoZSBmaWxlIHBvaW50ZWQgdG8gYnkgYWJmZCB0aGF0IHJlc2lkZSBpbgorCSAqIGEgJVNFQ19DT0RFIHNlY3Rpb24uCisJICoKKwkgKiBUaGUgc3ltYm9scyBhcmUgZmlsdGVyZWQgdGhyb3VnaAorCSAqIHRoZSBpbnRlcmVzdGluZ19zeW1ib2woKSBwcmVkaWNhdGUgYW5kIHNvcnRlZAorCSAqIHdpdGggb3BfYmZkX3N5bWJvbDo6b3BlcmF0b3I8KCkgY29tcGFyYXRvci4KKwkgKi8KKwl2b2lkIGdldF9zeW1ib2xzKHN5bWJvbHNfZm91bmRfdCAmIHN5bWJvbHMpOworCisJLyoqCisJICogSGVscGVyIGZ1bmN0aW9uIGZvciBnZXRfc3ltYm9scy4KKwkgKiBQb3B1bGF0ZXMgYmZkX3N5bXMgYW5kIGV4dHJhY3RzIHRoZSAiaW50ZXJlc3Rpbmdfc3ltYm9sInMuCisJICovCisJdm9pZCBnZXRfc3ltYm9sc19mcm9tX2ZpbGUoYmZkX2luZm8gJiBiZmQsIHNpemVfdCBzdGFydCwKKwkJCQkgICBvcF9iZmQ6OnN5bWJvbHNfZm91bmRfdCAmIHN5bWJvbHMsCisJCQkJICAgYm9vbCBkZWJ1Z19maWxlKTsKKworCS8qKgorCSAqIEFkZCB0aGUgc3ltYm9scyBpbiB0aGUgYmluYXJ5LCBhcHBseWluZyBmaWx0ZXJpbmcsCisJICogYW5kIGhhbmRsaW5nIGFydGlmaWNpYWwgc3ltYm9scy4KKwkgKi8KKwl2b2lkIGFkZF9zeW1ib2xzKHN5bWJvbHNfZm91bmRfdCAmIHN5bWJvbHMsCisJICAgICAgICAgICAgICAgICBzdHJpbmdfZmlsdGVyIGNvbnN0ICYgc3ltYm9sX2ZpbHRlcik7CisKKwkvKioKKwkgKiBzeW1ib2xfc2l6ZSAtIHJldHVybiB0aGUgc2l6ZSBvZiBhIHN5bWJvbAorCSAqIEBwYXJhbSBzeW0gIHN5bWJvbCB0byBnZXQgc2l6ZQorCSAqIEBwYXJhbSBuZXh0ICBuZXh0IHN5bWJvbCBpbiB2bWEgb3JkZXIgaWYgYW55CisJICovCisJc2l6ZV90IHN5bWJvbF9zaXplKG9wX2JmZF9zeW1ib2wgY29uc3QgJiBzeW0sCisJCQkgICBvcF9iZmRfc3ltYm9sIGNvbnN0ICogbmV4dCkgY29uc3Q7CisKKwkvLy8gY3JlYXRlIGFuIGFydGlmaWNpYWwgc3ltYm9sIGZvciBhIHN5bWJvbGxlc3MgYmluYXJ5CisJb3BfYmZkX3N5bWJvbCBjb25zdCBjcmVhdGVfYXJ0aWZpY2lhbF9zeW1ib2woKTsKKworICAgICAgICAvKiBHZW5lcmF0ZSBzeW1ib2xzIHVzaW5nIGJmZCBmdW5jdGlvbnMgZm9yCisJICogdGhlIGltYWdlIGZpbGUgYXNzb2NpYXRlZCB3aXRoIHRoZSBpYmZkIGFyZy4KKwkgKi8KKwl1aW50IHByb2Nlc3Nfc3ltdGFiKGJmZF9pbmZvICogYmZkLCB1aW50IHN0YXJ0KTsKKworCS8vLyBmaWxlbmFtZSB3ZSBvcGVuIChub3QgaW5jbHVkaW5nIGFyY2hpdmUgcGF0aCkKKwlzdGQ6OnN0cmluZyBmaWxlbmFtZTsKKworCS8vLyBwYXRoIHRvIGFyY2hpdmUKKwlzdGQ6OnN0cmluZyBhcmNoaXZlX3BhdGg7CisKKwkvLy8gcmVmZXJlbmNlIHRvIGV4dHJhX2ltYWdlcworCWV4dHJhX2ltYWdlcyBjb25zdCAmIGV4dHJhX2ZvdW5kX2ltYWdlczsKKworCS8vLyBmaWxlIHNpemUgaW4gYnl0ZXMKKwlvZmZfdCBmaWxlX3NpemU7CisKKwkvLy8gY29ycmVzcG9uZGluZyBkZWJ1ZyBmaWxlIG5hbWUKKwltdXRhYmxlIHN0ZDo6c3RyaW5nIGRlYnVnX2ZpbGVuYW1lOworCisJLy8vIHRydWUgaWYgYXQgbGVhc3Qgb25lIHNlY3Rpb24gaGFzIChmbGFncyAmIFNFQ19ERUJVR0dJTkcpICE9IDAKKwltdXRhYmxlIGNhY2hlZF92YWx1ZTxib29sPiBkZWJ1Z19pbmZvOworCisJLy8vIG91ciBtYWluIGJmZCBvYmplY3Q6IC5iZmQgbWF5IGJlIE5VTEwKKwliZmRfaW5mbyBpYmZkOworCisJLy8gY29ycmVzcG9uZGluZyBkZWJ1ZyBiZmQgb2JqZWN0LCBpZiBvbmUgaXMgZm91bmQKKwltdXRhYmxlIGJmZF9pbmZvIGRiZmQ7CisKKwkvLy8gc2VjdGlvbnMgd2Ugd2lsbCBhdm9pZCB0byB1c2Ugc3ltYm9sIGZyb20sIHRoaXMgaXMgbmVlZGVkCisJLy8vIGJlY2F1c2UgZWxmIGZpbGUgYWxsb3dzIHNlY3Rpb25zIHdpdGggaWRlbnRpY2FsIHZtYSBhbmQgd2UgY2FuJ3QKKwkvLy8gYWxsb3cgb3ZlcmxhcHBpbmcgc3ltYm9scy4gU3VjaCBlbGYgbGF5b3V0IGlzIHVzZWQgYWN0dWFsbHkgYnkKKwkvLy8ga2VybmVsIG1vZHVsZXMgd2hlcmUgYWxsIGNvZGUgc2VjdGlvbiB2bWEgYXJlIHNldCB0byAwLgorCXN0ZDo6dmVjdG9yPGFzZWN0aW9uIGNvbnN0ICo+IGZpbHRlcmVkX3NlY3Rpb247CisKKwl0eXBlZGVmIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCB1MzI+IGZpbGVwb3NfbWFwX3Q7CisJLy8gbWFwcGluZyBvZiBzZWN0aW9uIG5hbWVzIHRvIGZpbGVwb3MgaW4gdGhlIG9yaWdpbmFsIGJpbmFyeQorCWZpbGVwb3NfbWFwX3QgZmlsZXBvc19tYXA7CisKKwkvKioKKwkgKiBJZiBzcHVfb2Zmc2V0IGlzIG5vbi16ZXJvLCBlbWJlZGRpbmdfZmlsZW5hbWUgaXMgdGhlIGZpbGUgY29udGFpbmluZworCSAqIHRoZSBlbWJlZGRlZCBTUFUgaW1hZ2UuCisJICovCisJc3RkOjpzdHJpbmcgZW1iZWRkaW5nX2ZpbGVuYW1lOworCisJYm9vbCBhbm9uX29iajsKK307CisKKworI2VuZGlmIC8qICFPUF9CRkRfSCAqLwpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvbGlidXRpbCsrL29wX2V4Y2VwdGlvbi5jcHAgYi9vcHJvZmlsZS0wLjkuNy9saWJ1dGlsKysvb3BfZXhjZXB0aW9uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzViOWJjCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvbGlidXRpbCsrL29wX2V4Y2VwdGlvbi5jcHAKQEAgLTAsMCArMSw1NSBAQAorLyoqCisgKiBAZmlsZSBvcF9leGNlcHRpb24uY3BwCisgKiBleGNlcHRpb24gYmFzZSBjbGFzcworICoKKyAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDMgT1Byb2ZpbGUgYXV0aG9ycworICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKKyAqCisgKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKKyAqIEBhdXRob3IgSm9obiBMZXZvbgorICovCisKKyNpbmNsdWRlIDxjc3RyaW5nPgorCisjaW5jbHVkZSAib3BfZXhjZXB0aW9uLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisKK29wX2V4Y2VwdGlvbjo6b3BfZXhjZXB0aW9uKHN0cmluZyBjb25zdCAmIG1zZykKKwk6CisJbWVzc2FnZShtc2cpCit7Cit9CisKK29wX2V4Y2VwdGlvbjo6fm9wX2V4Y2VwdGlvbigpIHRocm93KCkKK3sKK30KKworY2hhciBjb25zdCAqIG9wX2V4Y2VwdGlvbjo6d2hhdCgpIGNvbnN0IHRocm93KCkKK3sKKwlyZXR1cm4gbWVzc2FnZS5jX3N0cigpOworfQorCisKK29wX2ZhdGFsX2Vycm9yOjpvcF9mYXRhbF9lcnJvcihzdHJpbmcgY29uc3QgJiBtc2cpCisJOgorCW9wX2V4Y2VwdGlvbihtc2cpCit7Cit9CisKKworb3BfcnVudGltZV9lcnJvcjo6b3BfcnVudGltZV9lcnJvcihzdHJpbmcgY29uc3QgJiBtc2cpCisJOgorCXJ1bnRpbWVfZXJyb3IobXNnKQoreworfQorCitvcF9ydW50aW1lX2Vycm9yOjpvcF9ydW50aW1lX2Vycm9yKHN0cmluZyBjb25zdCAmIG1zZywgaW50IGNlcnJubykKKwk6CisJcnVudGltZV9lcnJvcihtc2cgKyAiXG5jYXVzZTogIiArIHN0cmVycm9yKGNlcnJubykpCit7Cit9CisKK29wX3J1bnRpbWVfZXJyb3I6On5vcF9ydW50aW1lX2Vycm9yKCkgdGhyb3coKQoreworfQpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvbGlidXRpbCsrL29wX2V4Y2VwdGlvbi5oIGIvb3Byb2ZpbGUtMC45LjcvbGlidXRpbCsrL29wX2V4Y2VwdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmMzQ0ZWQKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9saWJ1dGlsKysvb3BfZXhjZXB0aW9uLmgKQEAgLTAsMCArMSw2MCBAQAorLyoqCisgKiBAZmlsZSBvcF9leGNlcHRpb24uaAorICogZXhjZXB0aW9uIGJhc2UgY2xhc3MKKyAqCisgKiBUaGlzIHByb3ZpZGUgc2ltcGxlIGJhc2UgY2xhc3MgZm9yIGV4Y2VwdGlvbiBvYmplY3QuIEFsbAorICogZXhjZXB0aW9uIGFyZSBkZXJpdmVkIGZyb20gZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBmcm9tCisgKiBzdGQ6OmV4Y2VwdGlvbi4gVGhpcyBjbGFzcyBhcmUgbm90IGl0ZW5kZWQgdG8gYmUgY2F0Y2hlZAorICogaW4geW91ciBjb2RlIGV4Y2VwdCBhdCB0b3AgbGV2ZWwsIGRlcml2ZSB3aGF0IHlvdSB3YW50CisgKiBhbmQgY2F0Y2ggZGVyaXZlZCBjbGFzcyByYXRoZXIuCisgKgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMyBPUHJvZmlsZSBhdXRob3JzCisgKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORworICoKKyAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQorICogQGF1dGhvciBKb2huIExldm9uCisgKi8KKworI2lmbmRlZiBPUF9FWENFUFRJT05fSAorI2RlZmluZSBPUF9FWENFUFRJT05fSAorCisjaW5jbHVkZSA8c3RkZXhjZXB0PgorI2luY2x1ZGUgPHN0cmluZz4KKworCisvKioKKyAqIGV4Y2VwdGlvbiBhYnN0cmFjdCBiYXNlIGNsYXNzCisgKi8KK2NsYXNzIG9wX2V4Y2VwdGlvbiA6IHB1YmxpYyBzdGQ6OmV4Y2VwdGlvbiB7CitwdWJsaWM6CisJZXhwbGljaXQgb3BfZXhjZXB0aW9uKHN0ZDo6c3RyaW5nIGNvbnN0JiBtc2cpOworCX5vcF9leGNlcHRpb24oKSB0aHJvdygpID0gMDsKKworCWNoYXIgY29uc3QgKiB3aGF0KCkgY29uc3QgdGhyb3coKTsKK3ByaXZhdGU6CisJc3RkOjpzdHJpbmcgbWVzc2FnZTsKK307CisKKworLyoqCisgKiBmYXRhbCBleGNlcHRpb24sIG5ldmVyIGNhdGNoIGl0IGV4Y2VwdCBhdCB0b3AgbGV2ZWwgKGxpa2VseSBtYWluIG9yCisgKiBndWkpLiBJbnRlbmRlZCB0byByZXBsYWNlIGNlcnIgPDwgImJsYWgiOyBleGl0KEVYSVRfRkFJTFVSRSk7IGJ5IGEKKyAqIHRocm93IG9wX2ZhdGFsX2Vycm9yKCJibGFoIikgd2hlbiByZXR1cm5pbmcgZXJyb3IgY29kZSBpcyBub3QgYW4gb3B0aW9uCisgKi8KK3N0cnVjdCBvcF9mYXRhbF9lcnJvciA6IG9wX2V4Y2VwdGlvbgoreworCWV4cGxpY2l0IG9wX2ZhdGFsX2Vycm9yKHN0ZDo6c3RyaW5nIGNvbnN0ICYgbXNnKTsKK307CisKKy8qKgorICogRW5jYXBzdWxhdGUgYSBydW50aW1lIGVycm9yIHdpdGggb3Igdy9vIGEgdmFsaWQgZXJybm8KKyAqLworc3RydWN0IG9wX3J1bnRpbWVfZXJyb3IgOiBzdGQ6OnJ1bnRpbWVfZXJyb3IKK3sKKwlleHBsaWNpdCBvcF9ydW50aW1lX2Vycm9yKHN0ZDo6c3RyaW5nIGNvbnN0ICYgZXJyKTsKKwlvcF9ydW50aW1lX2Vycm9yKHN0ZDo6c3RyaW5nIGNvbnN0ICYgZXJyLCBpbnQgY2Vycm5vKTsKKwl+b3BfcnVudGltZV9lcnJvcigpIHRocm93KCk7Cit9OworCisKKyNlbmRpZiAvKiAhT1BfRVhDRVBUSU9OX0ggKi8KZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2xpYnV0aWwrKy9vcF9zcHVfYmZkLmNwcCBiL29wcm9maWxlLTAuOS43L2xpYnV0aWwrKy9vcF9zcHVfYmZkLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Mjk0OWU3Ci0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvbGlidXRpbCsrL29wX3NwdV9iZmQuY3BwCkBAIC0wLDAgKzEsMTg1IEBACisvKioKKyAqIEBmaWxlIGxpYnV0aWwrKy9vcF9zcHVfYmZkLmNwcAorICogRW5jYXBzdWxhdGlvbiBvZiBiZmQgb2JqZWN0cyBmb3IgQ2VsbCBCRSBTUFUKKyAqCisgKiBAcmVtYXJrIENvcHlyaWdodCAyMDA3IE9Qcm9maWxlIGF1dGhvcnMKKyAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCisgKgorICogQGF1dGhvciBNYXluYXJkIEpvaG5zb24KKyAqIChDKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDcKKyAqLworCisKKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8Y3N0ZGxpYj4KKyNpbmNsdWRlIDxjc3RyaW5nPgorCisjaW5jbHVkZSA8aW9zdHJlYW0+CisjaW5jbHVkZSA8Y3N0cmluZz4KKyNpbmNsdWRlIDxjc3RkbGliPgorCisjaW5jbHVkZSAib3BfYmZkLmgiCisjaW5jbHVkZSAibG9jYXRlX2ltYWdlcy5oIgorI2luY2x1ZGUgIm9wX2xpYmliZXJ0eS5oIgorI2luY2x1ZGUgInN0cmluZ19maWx0ZXIuaCIKKyNpbmNsdWRlICJjdmVyYi5oIgorCisjZGVmaW5lIE9QX1NQVV9EWU5fRkxBRwkJMHgxMDAwMDAwMAkvKiBrZXJuZWwgbW9kdWxlIGFkZHMgdGhpcyBvZmZzZXQgKi8KKwkJCQkJCS8qIHRvIFNQVSBjb2RlIGl0IGNhbid0IGZpbmQgaW4gdGhlIG1hcCAqLworI2RlZmluZSBPUF9TUFVfTUVNU0laRQkJMHgzZmZmZgkJLyogUGh5c2ljYWwgbWVtb3J5IHNpemUgb24gYW4gU1BVICovCisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisKK2V4dGVybiB2ZXJib3NlIHZiZmQ7CisKKy8qCisgKiBUaGlzIG92ZXJsb2FkIG9mIHRoZSBvcF9iZmQgY29uc3RydWN0b3IgaXMgcGF0dGVybmVkIGFmdGVyIHRoZQorICogY29uc3RydWN0b3IgaW4gbGlidXRpbCsrL29wX2JmZC5jcHAsIHdpdGggdGhlIGFkZGl0aW9uYWwgcHJvY2Vzc2luZworICogbmVlZGVkIHRvIGhhbmRsZSBhbiBlbWJlZGRlZCBzcHUgb2Zmc2V0LgorICovCitvcF9iZmQ6Om9wX2JmZCh1aW50NjRfdCBzcHVfb2Zmc2V0LCBzdHJpbmcgY29uc3QgJiBmbmFtZSwKKwkgICAgICAgc3RyaW5nX2ZpbHRlciBjb25zdCAmIHN5bWJvbF9maWx0ZXIsIAorCSAgICAgICBleHRyYV9pbWFnZXMgY29uc3QgJiBleHRyYV9pbWFnZXMsIGJvb2wgJiBvaykKKwk6CisJYXJjaGl2ZV9wYXRoKGV4dHJhX2ltYWdlcy5nZXRfYXJjaGl2ZV9wYXRoKCkpLAorCWV4dHJhX2ZvdW5kX2ltYWdlcyhleHRyYV9pbWFnZXMpLAorCWZpbGVfc2l6ZSgtMSksCisJZW1iZWRkaW5nX2ZpbGVuYW1lKGZuYW1lKSwKKwlhbm9uX29iaihmYWxzZSkKK3sKKwlpbnQgZmQ7CisJc3RydWN0IHN0YXQgc3Q7CisJaW50IG5vdGVzX3JlbWFpbmluZzsKKwlib29sIHNwdV9ub3RlX2ZvdW5kID0gZmFsc2U7CisJc2l6ZV90IHNlY19zaXplID0gMDsKKwl1bnNpZ25lZCBpbnQgb2N0X3Blcl9ieXRlOworCWFzZWN0aW9uICogbm90ZSA9IE5VTEw7CisKKwlzeW1ib2xzX2ZvdW5kX3Qgc3ltYm9sczsKKwlhc2VjdGlvbiBjb25zdCAqIHNlY3Q7CisKKwlpbWFnZV9lcnJvciBpbWFnZV9vazsKKwlzdHJpbmcgY29uc3QgaW1hZ2VfcGF0aCA9CisJCWV4dHJhX2ltYWdlcy5maW5kX2ltYWdlX3BhdGgoZm5hbWUsIGltYWdlX29rLCB0cnVlKTsKKworCWN2ZXJiIDw8IHZiZmQgPDwgIm9wX2JmZCBjdG9yIGZvciAiIDw8IGltYWdlX3BhdGggPDwgZW5kbDsKKwlpZiAoIW9rKQorCQlnb3RvIG91dF9mYWlsOworCisJZmQgPSBvcGVuKGltYWdlX3BhdGguY19zdHIoKSwgT19SRE9OTFkpOworCWlmIChmZCA9PSAtMSkgeworCQljdmVyYiA8PCB2YmZkIDw8ICJvcGVuIGZhaWxlZCBmb3IgIiA8PCBpbWFnZV9wYXRoIDw8IGVuZGw7CisJCW9rID0gZmFsc2U7CisJCWdvdG8gb3V0X2ZhaWw7CisJfQorCisJaWYgKGZzdGF0KGZkLCAmc3QpKSB7CisJCWN2ZXJiIDw8IHZiZmQgPDwgInN0YXQgZmFpbGVkIGZvciAiIDw8IGltYWdlX3BhdGggPDwgZW5kbDsKKwkJb2sgPSBmYWxzZTsKKwkJZ290byBvdXRfZmFpbDsKKwl9CisKKwlmaWxlX3NpemUgPSBzdC5zdF9zaXplOworCWliZmQuYWJmZCA9IHNwdV9vcGVuX2JmZChpbWFnZV9wYXRoLCBmZCwgc3B1X29mZnNldCk7CisKKwlpZiAoIWliZmQudmFsaWQoKSkgeworCQljdmVyYiA8PCB2YmZkIDw8ICJmZG9wZW5fYmZkIGZhaWxlZCBmb3IgIiA8PCBpbWFnZV9wYXRoIDw8IGVuZGw7CisJCW9rID0gZmFsc2U7CisJCWdvdG8gb3V0X2ZhaWw7CisJfQorCisJLyogRm9yIGVtYmVkZGVkIFNQVSBFTEYsIGEgbm90ZSBzZWN0aW9uIG5hbWVkICcubm90ZS5zcHVfbmFtZScKKwkgKiBjb250YWlucyB0aGUgbmFtZSBvZiB0aGUgU1BVIGJpbmFyeSBpbWFnZSBpbiB0aGUgZGVzY3JpcHRpb24KKwkgKiBmaWVsZC4KKwkgKi8KKwlub3RlID0gYmZkX2dldF9zZWN0aW9uX2J5X25hbWUoaWJmZC5hYmZkLCAiLm5vdGUuc3B1X25hbWUiKTsKKwlpZiAoIW5vdGUpIHsKKwkJY3ZlcmIgPDwgdmJmZCA8PCAiTm8gLm5vdGUuc3B1LW5hbWUgc2VjdGlvbiBmb3VuZCIgPDwgZW5kbDsKKwkJZ290byBmaW5kX3NlY19jb2RlOworCX0KKwljdmVyYiA8PCB2YmZkIDw8ICJmb3VuZCAubm90ZS5zcHVfbmFtZSBzZWN0aW9uIiA8PCBlbmRsOworCisJYmZkX2J5dGUgKiBzZWNfY29udGVudHM7CisJb2N0X3Blcl9ieXRlID0gYmZkX29jdGV0c19wZXJfYnl0ZShpYmZkLmFiZmQpOworCXNlY19zaXplID0gYmZkX3NlY3Rpb25fc2l6ZShpYmZkLmFiZmQsIG5vdGUpL29jdF9wZXJfYnl0ZTsKKworCXNlY19jb250ZW50cyA9IChiZmRfYnl0ZSAqKSB4bWFsbG9jKHNlY19zaXplKTsKKwlpZiAoIWJmZF9nZXRfc2VjdGlvbl9jb250ZW50cyhpYmZkLmFiZmQsIG5vdGUsIHNlY19jb250ZW50cywKKwkJCQkgICAgICAwLCBzZWNfc2l6ZSkpIHsKKwkJY3ZlcmIgPDwgdmJmZCA8PCAiYmZkX2dldF9zZWN0aW9uX2NvbnRlbnRzIHdpdGggc2l6ZSAiCisJCSAgICAgIDw8IHNlY19zaXplIDw8ICIgcmV0dXJuZWQgYW4gZXJyb3IiIDw8IGVuZGw7CisJCW9rID0gZmFsc2U7CisJCWdvdG8gb3V0X2ZhaWw7CisJfQorCW5vdGVzX3JlbWFpbmluZyA9IHNlY19zaXplOworCXdoaWxlIChub3Rlc19yZW1haW5pbmcgJiYgIXNwdV9ub3RlX2ZvdW5kKSB7CisJCXVuc2lnbmVkIGludCAgbnNpemUsIGRzaXplLCB0eXBlOworCQluc2l6ZSA9ICooKHVuc2lnbmVkIGludCAqKSBzZWNfY29udGVudHMpOworCQlkc2l6ZSA9ICooKHVuc2lnbmVkIGludCAqKSBzZWNfY29udGVudHMgKzEpOworCQl0eXBlID0gKigodW5zaWduZWQgaW50ICopIHNlY19jb250ZW50cyArMik7CisJCWludCByZW1haW5kZXIsIGRlc2Nfc3RhcnQsIG5hbWVfcGFkX2xlbmd0aCwgZGVzY19wYWRfbGVuZ3RoOworCQluYW1lX3BhZF9sZW5ndGggPSBkZXNjX3BhZF9sZW5ndGggPSAwOworCQkvKiBDYWxjdWxhdGUgcGFkZGluZyBmb3IgNC1ieXRlIGFsaWdubWVudCAqLworCQlyZW1haW5kZXIgPSBuc2l6ZSAlIDQ7CisJCWlmIChyZW1haW5kZXIgIT0gMCkKKwkJCW5hbWVfcGFkX2xlbmd0aCA9IDQgLSByZW1haW5kZXI7CisJCWRlc2Nfc3RhcnQgPSAxMiArIG5zaXplICsgbmFtZV9wYWRfbGVuZ3RoOworCQlpZiAodHlwZSAhPSAxKSB7CisJCQlpbnQgbm90ZV9yZWNvcmRfbGVuZ3RoOworCQkJaWYgKChyZW1haW5kZXIgPSAoZHNpemUgJSA0KSkgIT0gMCkKKwkJCQlkZXNjX3BhZF9sZW5ndGggPSA0IC0gcmVtYWluZGVyOworCQkJbm90ZV9yZWNvcmRfbGVuZ3RoID0gMTIgKyBuc2l6ZSArCisJCQkJbmFtZV9wYWRfbGVuZ3RoICsgZHNpemUgKyBkZXNjX3BhZF9sZW5ndGg7CisJCQlub3Rlc19yZW1haW5pbmcgLT0gbm90ZV9yZWNvcmRfbGVuZ3RoOworCQkJc2VjX2NvbnRlbnRzICs9IG5vdGVfcmVjb3JkX2xlbmd0aDsKKwkJCWNvbnRpbnVlOworCQl9IGVsc2UgeworCQkJc3B1X25vdGVfZm91bmQgPSB0cnVlOworCQkJLyogTXVzdCBtZW1jcHkgdGhlIGRhdGEgZnJvbSBzZWNfY29udGVudHMgdG8gYQorCQkJICogJ2NoYXIgKicgZmlyc3QsIHRoZW4gc3RyaW5naWZ5IGl0LCBzaW5jZQorCQkJICogdGhlIHR5cGUgb2Ygc2VjX2NvbnRlbnRzIChiZmRfYnl0ZSAqKSBjYW5ub3QgYmUKKwkJCSAqIHVzZWQgYXMgaW5wdXQgZm9yIGNyZWF0aW5nIGEgc3RyaW5nLgorCQkJICovCisJCQljaGFyICogZGVzY3JpcHRpb24gPSAoY2hhciAqKSB4bWFsbG9jKGRzaXplKTsKKwkJCW1lbWNweShkZXNjcmlwdGlvbiwgc2VjX2NvbnRlbnRzICsgZGVzY19zdGFydCwgZHNpemUpOworCQkJZmlsZW5hbWUgPSBkZXNjcmlwdGlvbjsKKwkJCWZyZWUoZGVzY3JpcHRpb24pOworCQl9CisJfQorCWZyZWUoc2VjX2NvbnRlbnRzKTsKKwkvKiBEZWZhdWx0IHRvIGFwcCBuYW1lIGZvciB0aGUgaW1hZ2UgbmFtZSAqLworCWlmIChzcHVfbm90ZV9mb3VuZCA9PSBmYWxzZSkKKwkJZmlsZW5hbWUgPSBmbmFtZTsKKworZmluZF9zZWNfY29kZToKKwlmb3IgKHNlY3QgPSBpYmZkLmFiZmQtPnNlY3Rpb25zOyBzZWN0OyBzZWN0ID0gc2VjdC0+bmV4dCkgeworCQlpZiAoc2VjdC0+ZmxhZ3MgJiBTRUNfQ09ERSkgeworCQkJaWYgKGZpbGVwb3NfbWFwW3NlY3QtPm5hbWVdICE9IDApIHsKKwkJCQljZXJyIDw8ICJGb3VuZCBzZWN0aW9uIFwiIiA8PCBzZWN0LT5uYW1lCisJCQkJICAgICA8PCAiXCIgdHdpY2UgZm9yICIgPDwgZ2V0X2ZpbGVuYW1lKCkKKwkJCQkgICAgIDw8IGVuZGw7CisJCQkJYWJvcnQoKTsKKwkJCX0KKworCQkJZmlsZXBvc19tYXBbc2VjdC0+bmFtZV0gPSBzZWN0LT5maWxlcG9zOworCQl9CisJfQorCisJZ2V0X3N5bWJvbHMoc3ltYm9scyk7CisKKwkvKiBJbiBzb21lIGNhc2VzIHRoZSBTUFUgbGlicmFyeSBjb2RlIGdlbmVyYXRlcyBjb2RlIHN0dWJzIG9uIHRoZSBzdGFjay4gKi8KKwkvKiBUaGUga2VybmVsIG1vZHVsZSByZW1hcHMgdGhvc2UgYWRkcmVzc2VzIHNvIGFkZCBhbiBlbnRyeSB0byBjYXRjaC9yZXBvcnQgdGhlbS4gKi8KKwlzeW1ib2xzLnB1c2hfYmFjayhvcF9iZmRfc3ltYm9sKE9QX1NQVV9EWU5fRkxBRywgT1BfU1BVX01FTVNJWkUsCisJCQkgICJfX3NlbmRfdG9fcHBlKHN0YWNrKSIpKTsKKworb3V0OgorCWFkZF9zeW1ib2xzKHN5bWJvbHMsIHN5bWJvbF9maWx0ZXIpOworCXJldHVybjsKK291dF9mYWlsOgorCWliZmQuY2xvc2UoKTsKKwlkYmZkLmNsb3NlKCk7CisJZmlsZV9zaXplID0gLTE7CisJZ290byBvdXQ7Cit9CisKZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2xpYnV0aWwrKy9wYXRoX2ZpbHRlci5jcHAgYi9vcHJvZmlsZS0wLjkuNy9saWJ1dGlsKysvcGF0aF9maWx0ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0ZGI5NGUKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9saWJ1dGlsKysvcGF0aF9maWx0ZXIuY3BwCkBAIC0wLDAgKzEsNjggQEAKKy8qKgorICogQGZpbGUgcGF0aF9maWx0ZXIuY3BwCisgKiBGaWx0ZXIgcGF0aHMgYmFzZWQgb24gZ2xvYmJlZCBleGNsdWRlL2luY2x1ZGUgbGlzdAorICoKKyAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDIgT1Byb2ZpbGUgYXV0aG9ycworICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKKyAqCisgKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKKyAqIEBhdXRob3IgSm9obiBMZXZvbgorICovCisKKyNpbmNsdWRlIDxmbm1hdGNoLmg+CisKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisKKyNpbmNsdWRlICJwYXRoX2ZpbHRlci5oIgorI2luY2x1ZGUgInN0cmluZ19tYW5pcC5oIgorI2luY2x1ZGUgImZpbGVfbWFuaXAuaCIKKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKworYm9vbCBwYXRoX2ZpbHRlcjo6bWF0Y2goc3RyaW5nIGNvbnN0ICYgc3RyKSBjb25zdAoreworCXZlY3RvcjxzdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBjaXQ7CisKKwkvLyBmaXJzdCwgaWYgYW55IGNvbXBvbmVudCBvZiB0aGUgZGlyIGlzIGxpc3RlZCBpbiBleGNsdWRlIC0+IG5vCisJc3RyaW5nIGNvbXAgPSBvcF9kaXJuYW1lKHN0cik7CisJd2hpbGUgKCFjb21wLmVtcHR5KCkgJiYgY29tcCAhPSAiLyIpIHsKKwkJY2l0ID0gZmluZF9pZihleGNsdWRlLmJlZ2luKCksIGV4Y2x1ZGUuZW5kKCksCisJCQlmbm1hdGNoZXIob3BfYmFzZW5hbWUoY29tcCkpKTsKKwkJaWYgKGNpdCAhPSBleGNsdWRlLmVuZCgpKQorCQkJcmV0dXJuIGZhbHNlOworCisJCS8vIGRpcm5hbWUoImZvbyIpID09ICJmb28iCisJCWlmIChjb21wID09IG9wX2Rpcm5hbWUoY29tcCkpCisJCQlicmVhazsKKwkJY29tcCA9IG9wX2Rpcm5hbWUoY29tcCk7CisJfQorCisJc3RyaW5nIGNvbnN0IGJhc2UgPSBvcF9iYXNlbmFtZShzdHIpOworCisJLy8gbm93IGlmIHRoZSBmaWxlIG5hbWUgaXMgc3BlY2lmaWNhbGx5IGV4Y2x1ZGVkIC0+IG5vCisJY2l0ID0gZmluZF9pZihleGNsdWRlLmJlZ2luKCksIGV4Y2x1ZGUuZW5kKCksIGZubWF0Y2hlcihiYXNlKSk7CisJaWYgKGNpdCAhPSBleGNsdWRlLmVuZCgpKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvLyBub3cgaWYgdGhlIGZpbGUgbmFtZSBpcyBzcGVjaWZpY2FsbHkgaW5jbHVkZWQgLT4geWVzCisJY2l0ID0gZmluZF9pZihpbmNsdWRlLmJlZ2luKCksIGluY2x1ZGUuZW5kKCksIGZubWF0Y2hlcihiYXNlKSk7CisJaWYgKGNpdCAhPSBpbmNsdWRlLmVuZCgpKQorCQlyZXR1cm4gdHJ1ZTsKKworCS8vIG5vdyBpZiBhbnkgY29tcG9uZW50IG9mIHRoZSBwYXRoIGlzIGluY2x1ZGVkIC0+IHllcworCS8vIG5vdGUgdGhhdCB0aGUgaW5jbHVkZSBwYXR0ZXJuIGRlZmF1bHRzIHRvICcqJworCXN0cmluZyBjb21waSA9IG9wX2Rpcm5hbWUoc3RyKTsKKwl3aGlsZSAoIWNvbXBpLmVtcHR5KCkgJiYgY29tcGkgIT0gIi8iKSB7CisJCWNpdCA9IGZpbmRfaWYoaW5jbHVkZS5iZWdpbigpLCBpbmNsdWRlLmVuZCgpLAorCQkJZm5tYXRjaGVyKG9wX2Jhc2VuYW1lKGNvbXBpKSkpOworCQlpZiAoY2l0ICE9IGluY2x1ZGUuZW5kKCkpCisJCQlyZXR1cm4gdHJ1ZTsKKworCQkvLyBkaXJuYW1lKCJmb28iKSA9PSAiZm9vIgorCQlpZiAoY29tcGkgPT0gb3BfZGlybmFtZShjb21waSkpCisJCQlicmVhazsKKwkJY29tcGkgPSBvcF9kaXJuYW1lKGNvbXBpKTsKKwl9CisKKwlyZXR1cm4gaW5jbHVkZS5lbXB0eSgpOworfQpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvbGlidXRpbCsrL3BhdGhfZmlsdGVyLmggYi9vcHJvZmlsZS0wLjkuNy9saWJ1dGlsKysvcGF0aF9maWx0ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTIwM2ZiCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvbGlidXRpbCsrL3BhdGhfZmlsdGVyLmgKQEAgLTAsMCArMSw0OCBAQAorLyoqCisgKiBAZmlsZSBwYXRoX2ZpbHRlci5oCisgKiBGaWx0ZXIgcGF0aHMgYmFzZWQgb24gZ2xvYmJlZCBleGNsdWRlL2luY2x1ZGUgbGlzdAorICoKKyAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDIgT1Byb2ZpbGUgYXV0aG9ycworICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKKyAqCisgKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKKyAqIEBhdXRob3IgSm9obiBMZXZvbgorICovCisKKyNpZm5kZWYgUEFUSF9GSUxURVJfSAorI2RlZmluZSBQQVRIX0ZJTFRFUl9ICisKKyNpbmNsdWRlICJnbG9iX2ZpbHRlci5oIgorCisvKioKKyAqIHBhdGhfZmlsdGVyIC0gZmlsdGVyaW5nIG9mIGEgc3RyaW5nIGJhc2VkIG9uIGdsb2JiZWQgaW5jbHVkZS9leGNsdWRlIGxpc3QKKyAqCisgKiBUaGlzIGNsYXNzIGlzIGFuIG9yYWNsZSBvbiB3aGV0aGVyIGEgcGFydGljdWxhciBzdHJpbmcgbWF0Y2hlcworICogdGhlIGdpdmVuIGxpc3Qgb2YgaW5jbHVkZWQgYW5kIGV4Y2x1ZGVkIHN0cmluZ3MuCisgKgorICogVGhpcyBjbGFzcyBnaXZlcyBnbG9iLWJhc2VkIG1hdGNoZXMgb24gZWFjaCBwYXR0ZXJuLCBhcyB3aXRoIGZubWF0Y2goMyksCisgKiB3aGVyZSBlYWNoIGNvbXBvbmVudCBvZiB0aGUgY2FuZGlkYXRlIHBhdGggaXMgY29uc2lkZXJlZCBzZXBhcmF0ZWx5LgorICovCitjbGFzcyBwYXRoX2ZpbHRlciA6IHB1YmxpYyBnbG9iX2ZpbHRlciB7CitwdWJsaWM6CisJLyoqCisJICogSW5pdGlhbGlzZSB0aGUgZmlsdGVyIHdpdGggdGhlIGluY2x1ZGUgYW5kIGV4Y2x1ZGUgbGlzdCwKKwkgKiBjb21tYS1zZXBhcmF0ZWQuCisJICovCisJcGF0aF9maWx0ZXIoc3RkOjpzdHJpbmcgY29uc3QgJiBpbmNsdWRlX3BhdHRlcm5zID0gc3RkOjpzdHJpbmcoKSwKKwkgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCAmIGV4Y2x1ZGVfcGF0dGVybnMgPSBzdGQ6OnN0cmluZygpKQorCQk6IGdsb2JfZmlsdGVyKGluY2x1ZGVfcGF0dGVybnMsIGV4Y2x1ZGVfcGF0dGVybnMpIHt9CisKKwkvKioKKwkgKiBJbml0aWFsaXNlIHRoZSBmaWx0ZXIgd2l0aCB0aGUgaW5jbHVkZSBhbmQgZXhjbHVkZSBsaXN0LgorCSAqLworCXBhdGhfZmlsdGVyKHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25zdCAmIGluY2x1ZGVfcGF0dGVybnMsCisJICAgICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0ICYgZXhjbHVkZV9wYXR0ZXJucykKKwkJOiBnbG9iX2ZpbHRlcihpbmNsdWRlX3BhdHRlcm5zLCBleGNsdWRlX3BhdHRlcm5zKSB7fQorCisKKwkvLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBzdHJpbmcgbWF0Y2hlcworCXZpcnR1YWwgYm9vbCBtYXRjaChzdGQ6OnN0cmluZyBjb25zdCAmIHN0cikgY29uc3Q7Cit9OworCisjZW5kaWYgLyogUEFUSF9GSUxURVJfSCAqLwpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvbGlidXRpbCsrL3NwYXJzZV9hcnJheS5oIGIvb3Byb2ZpbGUtMC45LjcvbGlidXRpbCsrL3NwYXJzZV9hcnJheS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4MWZkMzEKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9saWJ1dGlsKysvc3BhcnNlX2FycmF5LmgKQEAgLTAsMCArMSwxMDAgQEAKKy8qKgorICogQGZpbGUgc3BhcnNlX2FycmF5LmgKKyAqIEF1dG8tZXhwYW5kaW5nIHNwYXJzZSBhcnJheSB0eXBlCisgKgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwNyBPUHJvZmlsZSBhdXRob3JzCisgKiBAcmVtYXJrIENvcHlyaWdodCAoYykgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcywgMjAwNy4KKyAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCisgKgorICogQGF1dGhvciBEYXZlIE5vbXVyYSA8ZGNubHRjQHVzLmlibS5jb20+CisgKi8KKworI2lmbmRlZiBTUEFSU0VfQVJSQVlfSAorI2RlZmluZSBTUEFSU0VfQVJSQVlfSAorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgSSwgdHlwZW5hbWUgVD4gY2xhc3Mgc3BhcnNlX2FycmF5IHsKK3B1YmxpYzoKKwl0eXBlZGVmIHN0ZDo6bWFwPEksIFQ+IGNvbnRhaW5lcl90eXBlOworCXR5cGVkZWYgdHlwZW5hbWUgY29udGFpbmVyX3R5cGU6OnNpemVfdHlwZSBzaXplX3R5cGU7CisKKwkvKioKKwkgKiBJbmRleCBpbnRvIHRoZSBtYXAgZm9yIGEgdmFsdWUuCisJICogTk9URTogc2luY2Ugc3RkOjptYXAgZG9lcy9jYW4gbm90IGhhdmUgYSBjb25zdCBtZW1iZXIgZnVuY3Rpb24gZm9yCisJICogb3BlcmF0b3JbXSwgdGhpcyBjb25zdCBtZW1iZXIgZnVuY3Rpb24gc2ltcGx5IHJldHVybnMgMCBmb3IgCisJICogcHJvZmlsZSBjbGFzc2VzIHRoYXQgYXJlbid0IHJlcHJlc2VudGVkIGluIHRoZSBtYXAuCisJICogVGhpcyBtZW1iZXIgZnVuY3Rpb24gd2lsbCBvbmx5IGJlIGludm9rZWQgZm9yIHF1ZXJpZXMgb2YgdGhlCisJICogc3BhcnNlIGFycmF5LgorCSAqLworCVQgb3BlcmF0b3JbXShzaXplX3R5cGUgaW5kZXgpIGNvbnN0IHsKKwkJdHlwZW5hbWUgY29udGFpbmVyX3R5cGU6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gY29udGFpbmVyLmZpbmQoaW5kZXgpOworCQlpZiAoaXQgIT0gY29udGFpbmVyLmVuZCgpKQorCQkJcmV0dXJuIGl0LT5zZWNvbmQ7CisJCWVsc2UKKwkJCXJldHVybiAwOworCX0KKworCisJLyoqCisJICogSW5kZXggaW50byB0aGUgdmVjdG9yIGZvciBhIHZhbHVlLiBJZiB0aGUgaW5kZXggaXMgbGFyZ2VyIHRoYW4KKwkgKiB0aGUgY3VycmVudCBtYXggaW5kZXgsIGEgbmV3IGFycmF5IGVudHJ5IGlzIGNyZWF0ZWQuCisJICovCisJVCAmIG9wZXJhdG9yW10oc2l6ZV90eXBlIGluZGV4KSB7CisJCXJldHVybiBjb250YWluZXJbaW5kZXhdOworCX0KKworCisJLyoqCisJICogdmVjdG9yaXplZCArPSBvcGVyYXRvcgorCSAqLworCXNwYXJzZV9hcnJheSAmIG9wZXJhdG9yKz0oc3BhcnNlX2FycmF5IGNvbnN0ICYgcmhzKSB7CisJCXR5cGVuYW1lIGNvbnRhaW5lcl90eXBlOjpjb25zdF9pdGVyYXRvciBpdCA9IHJocy5jb250YWluZXIuYmVnaW4oKTsKKwkJdHlwZW5hbWUgY29udGFpbmVyX3R5cGU6OmNvbnN0X2l0ZXJhdG9yIGl0X2VuZCA9IHJocy5jb250YWluZXIuZW5kKCk7CisJCWZvciAoIDsgaXQgIT0gaXRfZW5kOyBpdCsrKQorCQkJY29udGFpbmVyW2l0LT5maXJzdF0gKz0gaXQtPnNlY29uZDsKKworCQlyZXR1cm4gKnRoaXM7CisJfQorCisKKwkvKioKKwkgKiB2ZWN0b3JpemVkIC09IG9wZXJhdG9yLCBvdmVyZmxvdyBzaG91bGRuJ3Qgb2NjdXIgZHVyaW5nIHN1YnN0cmFjdGlvbgorCSAqIChpb3c6IGZvciBlYWNoIGNvbXBvbmVudHMgbGhzW2ldID49IHJoc1tpXQorCSAqLworCXNwYXJzZV9hcnJheSAmIG9wZXJhdG9yLT0oc3BhcnNlX2FycmF5IGNvbnN0ICYgcmhzKSB7CisJCXR5cGVuYW1lIGNvbnRhaW5lcl90eXBlOjpjb25zdF9pdGVyYXRvciBpdCA9IHJocy5jb250YWluZXIuYmVnaW4oKTsKKwkJdHlwZW5hbWUgY29udGFpbmVyX3R5cGU6OmNvbnN0X2l0ZXJhdG9yIGl0X2VuZCA9IHJocy5jb250YWluZXIuZW5kKCk7CisJCWZvciAoIDsgaXQgIT0gaXRfZW5kOyBpdCsrKQorCQkJY29udGFpbmVyW2l0LT5maXJzdF0gLT0gaXQtPnNlY29uZDsKKworCQlyZXR1cm4gKnRoaXM7CisJfQorCisKKwkvKioKKwkgKiByZXR1cm4gdGhlIG1heGltdW0gaW5kZXggb2YgdGhlIGFycmF5ICsgMSBvciAwIGlmIHRoZSBhcnJheQorCSAqIGlzIGVtcHR5LgorCSAqLworCXNpemVfdHlwZSBzaXplKCkgY29uc3QgeworCQlpZiAoY29udGFpbmVyLnNpemUoKSA9PSAwKQorCQkJcmV0dXJuIDA7CisJCXR5cGVuYW1lIGNvbnRhaW5lcl90eXBlOjpjb25zdF9pdGVyYXRvciBsYXN0ID0gY29udGFpbmVyLmVuZCgpOworCQktLWxhc3Q7CisJCXJldHVybiBsYXN0LT5maXJzdCArIDE7CisJfQorCisKKwkvLy8gcmV0dXJuIHRydWUgaWYgYWxsIGVsZW1lbnRzIGhhdmUgdGhlIGRlZmF1bHQgY29uc3RydWN0ZWQgdmFsdWUKKwlib29sIHplcm8oKSBjb25zdCB7CisJCXR5cGVuYW1lIGNvbnRhaW5lcl90eXBlOjpjb25zdF9pdGVyYXRvciBpdCA9IGNvbnRhaW5lci5iZWdpbigpOworCQl0eXBlbmFtZSBjb250YWluZXJfdHlwZTo6Y29uc3RfaXRlcmF0b3IgaXRfZW5kID0gY29udGFpbmVyLmVuZCgpOworCQlmb3IgKCA7IGl0ICE9IGl0X2VuZDsgaXQrKykKKwkJCWlmIChpdC0+c2Vjb25kICE9IDApCisJCQkJcmV0dXJuIGZhbHNlOworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKK3ByaXZhdGU6CisJY29udGFpbmVyX3R5cGUgY29udGFpbmVyOworfTsKKworI2VuZGlmIC8vIFNQQVJTRV9BUlJBWV9ICmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9saWJ1dGlsKysvc3RyZWFtX3V0aWwuY3BwIGIvb3Byb2ZpbGUtMC45LjcvbGlidXRpbCsrL3N0cmVhbV91dGlsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTBiMGQzCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvbGlidXRpbCsrL3N0cmVhbV91dGlsLmNwcApAQCAtMCwwICsxLDMxIEBACisvKioKKyAqIEBmaWxlIHN0cmVhbV91dGlsLmNwcAorICogQysrIHN0cmVhbSB1dGlsaXR5CisgKgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMyBPUHJvZmlsZSBhdXRob3JzCisgKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORworICoKKyAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQorICogQGF1dGhvciBKb2huIExldm9uCisgKi8KKworI2luY2x1ZGUgInN0cmVhbV91dGlsLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisKK2lvX3N0YXRlOjppb19zdGF0ZShpb3MgJiBzdHJlYW1fKQorCToKKwlzdHJlYW0oc3RyZWFtXyksCisJZm9ybWF0KHN0cmVhbS5mbGFncygpKSwKKwlwcmVjaXNpb24oc3RyZWFtLnByZWNpc2lvbigpKSwKKwlmaWxsKHN0cmVhbS5maWxsKCkpCit7Cit9CisKKworaW9fc3RhdGU6On5pb19zdGF0ZSgpCit7CisJc3RyZWFtLmZsYWdzKGZvcm1hdCk7CisJc3RyZWFtLnByZWNpc2lvbihwcmVjaXNpb24pOworCXN0cmVhbS5maWxsKGZpbGwpOworfQpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvbGlidXRpbCsrL3N0cmVhbV91dGlsLmggYi9vcHJvZmlsZS0wLjkuNy9saWJ1dGlsKysvc3RyZWFtX3V0aWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wY2NlZTlhCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvbGlidXRpbCsrL3N0cmVhbV91dGlsLmgKQEAgLTAsMCArMSwzOSBAQAorLyoqCisgKiBAZmlsZSBzdHJlYW1fdXRpbC5oCisgKiBDKysgc3RyZWFtIHV0aWxpdHkKKyAqCisgKiBAcmVtYXJrIENvcHlyaWdodCAyMDAzIE9Qcm9maWxlIGF1dGhvcnMKKyAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCisgKgorICogQGF1dGhvciBQaGlsaXBwZSBFbGllCisgKiBAYXV0aG9yIEpvaG4gTGV2b24KKyAqLworCisjaWZuZGVmIFNUUkVBTV9VVElMX0gKKyNkZWZpbmUgU1RSRUFNX1VUSUxfSAorCisjaW5jbHVkZSA8aW9zdHJlYW0+CisKKy8vLyBjbGFzcyB3aGljaCBzYXZlIGEgc3RyZWFtIHN0YXRlIGFuZCByZXN0b3JlIGl0IGF0IGR0b3IgdGltZQorY2xhc3MgaW9fc3RhdGUgeworcHVibGljOgorCS8qKgorCSAqIHNhdmUgdGhlIHN0cmVhbSBmbGFncywgcHJlY2lzaW9uIGFuZCBmaWxsIGNoYXIuCisJICoKKwkgKiB3aWR0aCBpcyByZXN0b3JlZCBhdCBlbmQgb2YgZXhwcmVzc2lvbiwgdGhlcmUgaXMgbm8gbmVlZCB0byBzYXZlIGl0LgorCSAqIHRpZSBhbmQgbG9jYWxlIGFyZSBub3Qgc2F2ZWQgY3VycmVudGx5CisJICoKKwkgKiBlcnJvciBzdGF0ZSBzaG91bGRuJ3QgYmUgc2F2ZWQuCisJICovCisJaW9fc3RhdGUoc3RkOjppb3MgJiBzdHJlYW0pOworCS8vLyByZXN0b3JlIHRoZSBzdHJlYW0gc3RhdGUKKwl+aW9fc3RhdGUoKTsKK3ByaXZhdGU6CisJc3RkOjppb3MgJiBzdHJlYW07CisKKwlzdGQ6Omlvczo6Zm10ZmxhZ3MgZm9ybWF0OworCXN0ZDo6c3RyZWFtc2l6ZSBwcmVjaXNpb247CisJY2hhciBmaWxsOworfTsKKworI2VuZGlmIC8qICFTVFJFQU1fVVRJTF9IICovCmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9saWJ1dGlsKysvc3RyaW5nX2ZpbHRlci5jcHAgYi9vcHJvZmlsZS0wLjkuNy9saWJ1dGlsKysvc3RyaW5nX2ZpbHRlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmExMGNjNgotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2xpYnV0aWwrKy9zdHJpbmdfZmlsdGVyLmNwcApAQCAtMCwwICsxLDQ5IEBACisvKioKKyAqIEBmaWxlIHN0cmluZ19maWx0ZXIuY3BwCisgKiBGaWx0ZXIgc3RyaW5ncyBiYXNlZCBvbiBleGNsdWRlL2luY2x1ZGUgbGlzdAorICoKKyAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDIgT1Byb2ZpbGUgYXV0aG9ycworICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKKyAqCisgKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKKyAqIEBhdXRob3IgSm9obiBMZXZvbgorICovCisKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisKKyNpbmNsdWRlICJzdHJpbmdfZmlsdGVyLmgiCisjaW5jbHVkZSAic3RyaW5nX21hbmlwLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisKKworc3RyaW5nX2ZpbHRlcjo6c3RyaW5nX2ZpbHRlcihzdHJpbmcgY29uc3QgJiBpbmNsdWRlX3BhdHRlcm5zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcgY29uc3QgJiBleGNsdWRlX3BhdHRlcm5zKQorCTogaW5jbHVkZShzZXBhcmF0ZV90b2tlbihpbmNsdWRlX3BhdHRlcm5zLCAnLCcpKSwKKwkgIGV4Y2x1ZGUoc2VwYXJhdGVfdG9rZW4oZXhjbHVkZV9wYXR0ZXJucywgJywnKSkKK3sKK30KKworCitzdHJpbmdfZmlsdGVyOjpzdHJpbmdfZmlsdGVyKHZlY3RvcjxzdHJpbmc+IGNvbnN0ICYgaW5jbHVkZV9wYXR0ZXJucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yPHN0cmluZz4gY29uc3QgJiBleGNsdWRlX3BhdHRlcm5zKQorCTogaW5jbHVkZShpbmNsdWRlX3BhdHRlcm5zKSwKKwlleGNsdWRlKGV4Y2x1ZGVfcGF0dGVybnMpCit7Cit9CisKKworLy8gRklYTUU6IFBQIHJlZmVyZW5jZQorYm9vbCBzdHJpbmdfZmlsdGVyOjptYXRjaChzdHJpbmcgY29uc3QgJiBzdHIpIGNvbnN0Cit7CisJdmVjdG9yPHN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGNpdDsKKwljaXQgPSBmaW5kKGV4Y2x1ZGUuYmVnaW4oKSwgZXhjbHVkZS5lbmQoKSwgc3RyKTsKKwlpZiAoY2l0ICE9IGV4Y2x1ZGUuZW5kKCkpCisJCXJldHVybiBmYWxzZTsKKworCWNpdCA9IGZpbmQoaW5jbHVkZS5iZWdpbigpLCBpbmNsdWRlLmVuZCgpLCBzdHIpOworCWlmIChpbmNsdWRlLmVtcHR5KCkgfHwgY2l0ICE9IGluY2x1ZGUuZW5kKCkpCisJCXJldHVybiB0cnVlOworCisJcmV0dXJuIGZhbHNlOworfQpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvbGlidXRpbCsrL3N0cmluZ19maWx0ZXIuaCBiL29wcm9maWxlLTAuOS43L2xpYnV0aWwrKy9zdHJpbmdfZmlsdGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzAwOGZlMwotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2xpYnV0aWwrKy9zdHJpbmdfZmlsdGVyLmgKQEAgLTAsMCArMSw1NSBAQAorLyoqCisgKiBAZmlsZSBzdHJpbmdfZmlsdGVyLmgKKyAqIEZpbHRlciBzdHJpbmdzIGJhc2VkIG9uIGV4Y2x1ZGUvaW5jbHVkZSBsaXN0CisgKgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMiBPUHJvZmlsZSBhdXRob3JzCisgKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORworICoKKyAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQorICogQGF1dGhvciBKb2huIExldm9uCisgKi8KKworI2lmbmRlZiBTVFJJTkdfRklMVEVSX0gKKyNkZWZpbmUgU1RSSU5HX0ZJTFRFUl9ICisKKyNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8dmVjdG9yPgorCisvKioKKyAqIHN0cmluZ19maWx0ZXIgLSBmaWx0ZXJpbmcgb2YgYSBzdHJpbmcgYmFzZWQgb24gaW5jbHVkZS9leGNsdWRlIGxpc3QKKyAqCisgKiBUaGlzIGNsYXNzIGlzIGFuIG9yYWNsZSBvbiB3aGV0aGVyIGEgcGFydGljdWxhciBzdHJpbmcgbWF0Y2hlcworICogdGhlIGdpdmVuIGxpc3Qgb2YgaW5jbHVkZWQgYW5kIGV4Y2x1ZGVkIHN0cmluZ3MuCisgKgorICogVGhpcyBiYXNlIGNsYXNzIGdpdmVzIGEgZGVmYXVsdCBleGFjdC1tYXRjaCBzZW1hbnRpY3MuCisgKi8KK2NsYXNzIHN0cmluZ19maWx0ZXIgeworcHVibGljOgorCXN0cmluZ19maWx0ZXIoKSB7fQorCisJLyoqCisJICogSW5pdGlhbGlzZSB0aGUgZmlsdGVyIHdpdGggdGhlIGluY2x1ZGUgYW5kIGV4Y2x1ZGUgbGlzdCwKKwkgKiBjb21tYS1zZXBhcmF0ZWQuCisJICovCisJc3RyaW5nX2ZpbHRlcihzdGQ6OnN0cmluZyBjb25zdCAmIGluY2x1ZGVfcGF0dGVybnMsCisJICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCAmIGV4Y2x1ZGVfcGF0dGVybnMpOworCisJLyoqCisJICogSW5pdGlhbGlzZSB0aGUgZmlsdGVyIHdpdGggdGhlIGluY2x1ZGUgYW5kIGV4Y2x1ZGUgbGlzdC4KKwkgKi8KKwlzdHJpbmdfZmlsdGVyKHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25zdCAmIGluY2x1ZGVfcGF0dGVybnMsCisJICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uc3QgJiBleGNsdWRlX3BhdHRlcm5zKTsKKworCXZpcnR1YWwgfnN0cmluZ19maWx0ZXIoKSB7fQorCisJLy8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gc3RyaW5nIG1hdGNoZXMKKwl2aXJ0dWFsIGJvb2wgbWF0Y2goc3RkOjpzdHJpbmcgY29uc3QgJiBzdHIpIGNvbnN0OworCitwcm90ZWN0ZWQ6CisJLy8vIGluY2x1ZGUgcGF0dGVybnMKKwlzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gaW5jbHVkZTsKKwkvLy8gZXhjbHVkZSBwYXR0ZXJucworCXN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBleGNsdWRlOworfTsKKworI2VuZGlmIC8qIFNUUklOR19GSUxURVJfSCAqLwpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvbGlidXRpbCsrL3N0cmluZ19tYW5pcC5jcHAgYi9vcHJvZmlsZS0wLjkuNy9saWJ1dGlsKysvc3RyaW5nX21hbmlwLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTgzNmIxCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvbGlidXRpbCsrL3N0cmluZ19tYW5pcC5jcHAKQEAgLTAsMCArMSwxNDggQEAKKy8qKgorICogQGZpbGUgc3RyaW5nX21hbmlwLmNwcAorICogc3RkOjpzdHJpbmcgaGVscGVycworICoKKyAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDIgT1Byb2ZpbGUgYXV0aG9ycworICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKKyAqCisgKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKKyAqIEBhdXRob3IgSm9obiBMZXZvbgorICovCisKKyNpbmNsdWRlIDxzc3RyZWFtPgorI2luY2x1ZGUgPGlvbWFuaXA+CisKKyNpbmNsdWRlIDxjc3RkbGliPgorI2luY2x1ZGUgPGNtYXRoPgorCisjaW5jbHVkZSAic3RyaW5nX21hbmlwLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisKKworc3RyaW5nIGVyYXNlX3RvX2xhc3Rfb2Yoc3RyaW5nIGNvbnN0ICYgc3RyLCBjaGFyIGNoKQoreworCXN0cmluZyByZXN1bHQgPSBzdHI7CisJc3RyaW5nOjpzaXplX3R5cGUgcG9zID0gcmVzdWx0LmZpbmRfbGFzdF9vZihjaCk7CisJaWYgKHBvcyAhPSBzdHJpbmc6Om5wb3MpCisJCXJlc3VsdC5lcmFzZSgwLCBwb3MgKyAxKTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKKworc3RyaW5nIHNwbGl0KHN0cmluZyAmIHMsIGNoYXIgYykKK3sKKwlzdHJpbmc6OnNpemVfdHlwZSBpID0gcy5maW5kX2ZpcnN0X29mKGMpOworCWlmIChpID09IHN0cmluZzo6bnBvcykKKwkJcmV0dXJuIHN0cmluZygpOworCisJc3RyaW5nIGNvbnN0IHRhaWwgPSBzLnN1YnN0cihpICsgMSk7CisJcyA9IHMuc3Vic3RyKDAsIGkpOworCXJldHVybiB0YWlsOworfQorCisKK2Jvb2wgaXNfcHJlZml4KHN0cmluZyBjb25zdCAmIHMsIHN0cmluZyBjb25zdCAmIHByZWZpeCkKK3sKKwkvLyBnY2MgMi45NSBhbmQgYmVsb3cgZG9uJ3QgaGF2ZSB0aGlzCisJLy8gcmV0dXJuIHMuY29tcGFyZSgwLCBwcmVmaXgubGVuZ3RoKCksIHByZWZpeCkgPT0gMDsKKwlyZXR1cm4gcy5maW5kKHByZWZpeCkgPT0gMDsKK30KKworCit2ZWN0b3I8c3RyaW5nPiBzZXBhcmF0ZV90b2tlbihzdHJpbmcgY29uc3QgJiBzdHIsIGNoYXIgc2VwKQoreworCXZlY3RvcjxzdHJpbmc+IHJlc3VsdDsKKwlzdHJpbmcgbmV4dDsKKworCWZvciAoc2l6ZV90IHBvcyA9IDAgOyBwb3MgIT0gc3RyLmxlbmd0aCgpIDsgKytwb3MpIHsKKwkJY2hhciBjaCA9IHN0cltwb3NdOworCQlpZiAoY2ggPT0gJ1xcJykgeworCQkJaWYgKHBvcyA8IHN0ci5sZW5ndGgoKSAtIDEgJiYgc3RyW3BvcyArIDFdID09IHNlcCkgeworCQkJCSsrcG9zOworCQkJCW5leHQgKz0gc2VwOworCQkJfSBlbHNlIHsKKwkJCQluZXh0ICs9ICdcXCc7CisJCQl9CisJCX0gZWxzZSBpZiAoY2ggPT0gc2VwKSB7CisJCQlyZXN1bHQucHVzaF9iYWNrKG5leHQpOworCQkJLy8gc29tZSBzdGwgbGFja3Mgc3RyaW5nOjpjbGVhcigpCisJCQluZXh0LmVyYXNlKG5leHQuYmVnaW4oKSwgbmV4dC5lbmQoKSk7CisJCX0gZWxzZSB7CisJCQluZXh0ICs9IGNoOworCQl9CisJfQorCisJaWYgKCFuZXh0LmVtcHR5KCkpCisJCXJlc3VsdC5wdXNoX2JhY2sobmV4dCk7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisKK3N0cmluZyBsdHJpbShzdHJpbmcgY29uc3QgJiBzdHIsIHN0cmluZyBjb25zdCAmIHRvdHJpbSkKK3sKKwlzdHJpbmcgcmVzdWx0KHN0cik7CisKKwlyZXR1cm4gcmVzdWx0LmVyYXNlKDAsIHJlc3VsdC5maW5kX2ZpcnN0X25vdF9vZih0b3RyaW0pKTsKK30KKworCitzdHJpbmcgcnRyaW0oc3RyaW5nIGNvbnN0ICYgc3RyLCBzdHJpbmcgY29uc3QgJiB0b3RyaW0pCit7CisJc3RyaW5nIHJlc3VsdChzdHIpOworCisJcmV0dXJuIHJlc3VsdC5lcmFzZShyZXN1bHQuZmluZF9sYXN0X25vdF9vZih0b3RyaW0pICsgMSk7Cit9CisKKworc3RyaW5nIHRyaW0oc3RyaW5nIGNvbnN0ICYgc3RyLCBzdHJpbmcgY29uc3QgJiB0b3RyaW0pCit7CisJcmV0dXJuIHJ0cmltKGx0cmltKHN0ciwgdG90cmltKSwgdG90cmltKTsKK30KKworCitzdHJpbmcgY29uc3QKK2Zvcm1hdF9wZXJjZW50KGRvdWJsZSB2YWx1ZSwgc2l6ZV90IGludF93aWR0aCwgc2l6ZV90IGZyYWN0X3dpZHRoLCBib29sIHNob3dwb3MpCit7CisJb3N0cmluZ3N0cmVhbSBvczsKKworCWlmICh2YWx1ZSA9PSAwLjApCisJCXJldHVybiBzdHJpbmcoaW50X3dpZHRoICsgZnJhY3Rfd2lkdGgsICcgJykgKyAiMCI7CisKKwlpZiAoc2hvd3BvcykKKwkJb3Muc2V0Zihpb3M6OnNob3dwb3MpOworCisJaWYgKGZhYnModmFsdWUpID4gLjAwMSkgeworCQkvLyBvcyA8PCBmaXhlZCA8PCB2YWx1ZSB1bnN1cHBvcnRlZCBieSBnY2MgMi45NQorCQlvcy5zZXRmKGlvczo6Zml4ZWQsIGlvczo6ZmxvYXRmaWVsZCk7CisJCW9zIDw8IHNldHcoaW50X3dpZHRoICsgZnJhY3Rfd2lkdGggKyAxKQorCQkgICA8PCBzZXRwcmVjaXNpb24oZnJhY3Rfd2lkdGgpIDw8IHZhbHVlOworCX0gZWxzZSB7CisJCS8vIG9zIDw8IHNjaWVudGlmaWMgPDwgdmFsdWUgdW5zdXBwb3J0ZWQgYnkgZ2NjIDIuOTUKKwkJb3Muc2V0Zihpb3M6OnNjaWVudGlmaWMsIGlvczo6ZmxvYXRmaWVsZCk7CisJCW9zIDw8IHNldHcoaW50X3dpZHRoICsgZnJhY3Rfd2lkdGggKyAxKQorCQkgICAvLyAtIDMgdG8gY291bnQgZXhwb25lbnQgcGFydAorCQkgICA8PCBzZXRwcmVjaXNpb24oZnJhY3Rfd2lkdGggLSAzKSA8PCB2YWx1ZTsKKwl9CisKKwlzdHJpbmcgZm9ybWF0dGVkID0gb3Muc3RyKCk7CisJaWYgKGlzX3ByZWZpeChmb3JtYXR0ZWQsICIxMDAuIikpCisJCWZvcm1hdHRlZC5lcmFzZShmb3JtYXR0ZWQuc2l6ZSgpIC0gMSk7CisJcmV0dXJuIGZvcm1hdHRlZDsKK30KKworCit0ZW1wbGF0ZSA8PgordW5zaWduZWQgaW50IG9wX2xleGljYWxfY2FzdDx1bnNpZ25lZCBpbnQsIHN0cmluZz4oc3RyaW5nIGNvbnN0ICYgc3RyKQoreworCWNoYXIqIGVuZHB0cjsKKworCS8vIDIuOTEuNjYgZml4CisJdW5zaWduZWQgbG9uZyByZXQgPSAwOworCXJldCA9IHN0cnRvdWwoc3RyLmNfc3RyKCksICZlbmRwdHIsIDApOworCWlmICgqZW5kcHRyKQorCQl0aHJvdyBpbnZhbGlkX2FyZ3VtZW50KCJvcF9sZXhpY2FsX2Nhc3QoXCIiKyBzdHIgKyJcIikiKTsKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvbGlidXRpbCsrL3N0cmluZ19tYW5pcC5oIGIvb3Byb2ZpbGUtMC45LjcvbGlidXRpbCsrL3N0cmluZ19tYW5pcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1NzU5ZjMKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9saWJ1dGlsKysvc3RyaW5nX21hbmlwLmgKQEAgLTAsMCArMSwxMDcgQEAKKy8qKgorICogQGZpbGUgc3RyaW5nX21hbmlwLmgKKyAqIHN0ZDo6c3RyaW5nIGhlbHBlcnMKKyAqCisgKiBAcmVtYXJrIENvcHlyaWdodCAyMDAyIE9Qcm9maWxlIGF1dGhvcnMKKyAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCisgKgorICogQGF1dGhvciBQaGlsaXBwZSBFbGllCisgKiBAYXV0aG9yIEpvaG4gTGV2b24KKyAqLworCisjaWZuZGVmIFNUUklOR19NQU5JUF9ICisjZGVmaW5lIFNUUklOR19NQU5JUF9ICisKKyNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8dmVjdG9yPgorI2luY2x1ZGUgPHNzdHJlYW0+CisjaW5jbHVkZSA8c3RkZXhjZXB0PgorCisvKioKKyAqIEBwYXJhbSBzdHIgc3RyaW5nCisgKiBAcGFyYW0gY2ggdGhlIGNoYXJhY3RlcnRvIHNlYXJjaAorICoKKyAqIGVyYXNlIGNoYXIgZnJvbSB0aGUgYmVnaW4gb2Ygc3RyIHRvIHRoZSBsYXN0CisgKiBvY2N1cmVuY2Ugb2YgY2ggZnJvbSBhbmQgcmV0dXJuIHRoZSBzdHJpbmcKKyAqLworc3RkOjpzdHJpbmcgZXJhc2VfdG9fbGFzdF9vZihzdGQ6OnN0cmluZyBjb25zdCAmIHN0ciwgY2hhciBjaCk7CisKKy8vLyBzcGxpdCBzdHJpbmcgcyBieSBmaXJzdCBvY2N1cmVuY2Ugb2YgY2hhciBjLCByZXR1cm5pbmcgdGhlIHNlY29uZCBwYXJ0LgorLy8vIHMgaXMgc2V0IHRvIHRoZSBmaXJzdCBwYXJ0LiBOZWl0aGVyIGluY2x1ZGUgdGhlIHNwbGl0IGNoYXJhY3Rlcgorc3RkOjpzdHJpbmcgc3BsaXQoc3RkOjpzdHJpbmcgJiBzLCBjaGFyIGMpOworCisvLy8gcmV0dXJuIHRydWUgaWYgInByZWZpeCIgaXMgYSBwcmVmaXggb2YgInMiLCBiZWhhdmlvciBpcyB1bmRlZmluZWQKKy8vLyBpZiBwcmVmaXggaXMgYW4gZW1wdHkgc3RyaW5nCitib29sIGlzX3ByZWZpeChzdGQ6OnN0cmluZyBjb25zdCAmIHMsIHN0ZDo6c3RyaW5nIGNvbnN0ICYgcHJlZml4KTsKKworLyoqCisgKiBAcGFyYW0gc3RyIHRoZSBzdHJpbmcgdG8gdG9rZW5pemUKKyAqIEBwYXJhbSBzZXAgdGhlIHNlcGFyYXRvcl9jaGFyCisgKgorICogc2VwYXJhdGUgZmllbGRzIGluIGEgc3RyaW5nIGluIGEgbGlzdCBvZiB0b2tlbjsgZmllbGQgYXJlCisgKiBzZXBhcmF0ZWQgYnkgdGhlIHNlcCBjaGFyYWN0ZXIsIHNlcCBjaGFyIGNhbiBiZSBlc2NhcGVkCisgKiBieSAnXFwnIHRvIHNwZWNpZnkgYSBzZXAgY2hhciBpbiBhIHRva2VuLCAnXFwnIG5vdCBmb2xsb3dlZAorICogYnkgYSBzZXAgaXMgdGFrZW4gYXMgaXQgZS5nLiAiXCxcYSIgLS0+ICIsXGEiCisgKi8KK3N0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBzZXBhcmF0ZV90b2tlbihzdGQ6OnN0cmluZyBjb25zdCAmIHN0ciwgY2hhciBzZXApOworCisvLy8gcmVtb3ZlIHRyaW0gY2hhcnMgZnJvbSBzdGFydCBvZiBpbnB1dCBzdHJpbmcgcmV0dXJuIHRoZSBuZXcgc3RyaW5nCitzdGQ6OnN0cmluZyBsdHJpbShzdGQ6OnN0cmluZyBjb25zdCAmIHN0ciwgc3RkOjpzdHJpbmcgY29uc3QgJiB0b3RyaW0gPSAiXHQgIik7CisvLy8gcmVtb3ZlIHRyaW0gY2hhcnMgZnJvbSBlbmQgb2YgaW5wdXQgc3RyaW5nIHJldHVybiB0aGUgbmV3IHN0cmluZworc3RkOjpzdHJpbmcgcnRyaW0oc3RkOjpzdHJpbmcgY29uc3QgJiBzdHIsIHN0ZDo6c3RyaW5nIGNvbnN0ICYgdG90cmltID0gIlx0ICIpOworLy8vIGx0cmltKHJ0cmltKHN0cikpCitzdGQ6OnN0cmluZyB0cmltKHN0ZDo6c3RyaW5nIGNvbnN0ICYgc3RyLCBzdGQ6OnN0cmluZyBjb25zdCAmIHRvdHJpbSA9ICJcdCAiKTsKKworLyoqCisgKiBmb3JtYXRfcGVyY2VudCAtIHNtYXJ0IGZvcm1hdCBvZiBkb3VibGUgcGVyY2VudGFnZSB2YWx1ZQorICogQHBhcmFtIHZhbHVlIC0gdGhlIHZhbHVlCisgKiBAcGFyYW0gaW50X3dpZHRoIC0gdGhlIG1heGltdW0gaW50ZWdlciBpbnRlZ2VyIHdpZHRoIGRlZmF1bHQgdG8gMgorICogQHBhcmFtIGZyYWNfd2lkdGggLSB0aGUgZnJhY3Rpb25uYXJ5IHdpZHRoIGRlZmF1bHQgdG8gNAorICogQHBhcmFtIHNob3dwb3MgLSBzaG93ICsgc2lnbiBmb3IgcG9zaXRpdmUgdmFsdWVzCisgKgorICogVGhpcyBmb3JtYXRzIGEgcGVyY2VudGFnZSBpbnRvIGV4YWN0bHkgdGhlIGdpdmVuIHdpZHRoIGFuZCByZXR1cm5zCisgKiBpdC4gSWYgdGhlIGludGVnZXIgcGFydCBpcyBsYXJnZXIgdGhhbiB0aGUgZ2l2ZW4gaW50X3dpZHRoLCB0aGUKKyAqIHJldHVybmVkIHN0cmluZyB3aWxsIGJlIHdpZGVyLiBUaGUgcmV0dXJuZWQgc3RyaW5nIGlzIG5ldmVyCisgKiBzaG9ydGVyIHRoYW4gKGZyYWN0X3dpdGggKyBpbnRfd2lkdGggKyAxKQorICoKKyAqLworc3RkOjpzdHJpbmcgY29uc3QKK2Zvcm1hdF9wZXJjZW50KGRvdWJsZSB2YWx1ZSwgc2l6ZV90IGludF93aWR0aCwKKyAgICAgICAgICAgICAgIHNpemVfdCBmcmFjX3dpZHRoLCBib29sIHNob3dwb3MgPSBmYWxzZSk7CisKKy8vLyBwcmVmZXJlZCB3aWR0aCB0byBmb3JtYXQgcGVyY2VudGFnZQorc3RhdGljIHVuc2lnbmVkIGludCBjb25zdCBwZXJjZW50X2ludF93aWR0aCA9IDI7CitzdGF0aWMgdW5zaWduZWQgaW50IGNvbnN0IHBlcmNlbnRfZnJhY3Rfd2lkdGggPSA0Oworc3RhdGljIHVuc2lnbmVkIGludCBjb25zdCBwZXJjZW50X3dpZHRoID0gcGVyY2VudF9pbnRfd2lkdGggKyBwZXJjZW50X2ZyYWN0X3dpZHRoICsgMTsKKworCisvKioKKyAqIEBwYXJhbSBzcmMgIGlucHV0IHBhcmFtZXRlcgorICogY29udmVydCBGcm9tIHNyYyB0byBhIFQgdGhyb3VnaCBhbiBpc3RyaW5nc3RyZWFtLgorICoKKyAqIFRocm93cyBpbnZhbGlkX2FyZ3VtZW50IGlmIGNvbnZlcnNpb24gZmFpbC4KKyAqCisgKiBOb3RlIHRoYXQgdGhpcyBpcyBub3QgYXMgZm9vbHByb29mIGFzIGJvb3N0J3MgbGV4aWNhbF9jYXN0CisgKi8KK3RlbXBsYXRlIDx0eXBlbmFtZSBUbywgdHlwZW5hbWUgRnJvbT4KK1RvIG9wX2xleGljYWxfY2FzdChGcm9tIGNvbnN0ICYgc3JjKQoreworCXN0ZDo6b3N0cmluZ3N0cmVhbSBpbjsKKwlpZiAoIShpbiA8PCBzcmMpKQorCQl0aHJvdyBzdGQ6OmludmFsaWRfYXJndW1lbnQoIm9wX2xleGljYWxfY2FzdDxUPigpIik7CisJc3RkOjppc3RyaW5nc3RyZWFtIG91dChpbi5zdHIoKSk7CisJVG8gdmFsdWU7CisJaWYgKCEob3V0ID4+IHZhbHVlKSkgeworCQl0aHJvdyBzdGQ6OmludmFsaWRfYXJndW1lbnQoIm9wX2xleGljYWxfY2FzdDxUPihcIiIgKworCQkgICAgaW4uc3RyKCkgKyJcIikiKTsKKwl9CisJcmV0dXJuIHZhbHVlOworfQorCisvLyBzcGVjaWFsaXphdGlvbiBhY2NlcHRpbmcgaGV4YWRlY2ltYWwgYW5kIG9jdGFsIG51bWJlciBpbiBpbnB1dC4gTm90ZSB0aGF0CisvLyBvcF9sZXhpY2FsX2Nhc3Q8dW5zaWduZWQgaW50PigiMHgyMyIpOyB3aWxsIGZhaWwgYmVjYXVzZSBpdCBjYWxsIHRoZQorLy8gbm9uIHNwZWNpYWxpemVkIHRlbXBsYXRlLgordGVtcGxhdGUgPD4KK3Vuc2lnbmVkIGludCBvcF9sZXhpY2FsX2Nhc3Q8dW5zaWduZWQgaW50PihzdGQ6OnN0cmluZyBjb25zdCAmIHN0cik7CisKKyNlbmRpZiAvKiAhU1RSSU5HX01BTklQX0ggKi8KZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2xpYnV0aWwrKy90ZXN0cy9NYWtlZmlsZS5hbSBiL29wcm9maWxlLTAuOS43L2xpYnV0aWwrKy90ZXN0cy9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mY2M5YTdkCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvbGlidXRpbCsrL3Rlc3RzL01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsNDkgQEAKKworUkVBTFBBVEg9IHJlYWRsaW5rIC1mCisKK1NSQ0RJUiA6PSAkKHNoZWxsICQoUkVBTFBBVEgpICQodG9wZGlyKS9saWJ1dGlsKysvdGVzdHMvICkKKworQU1fQ1BQRkxBR1MgPSBcCisJLUkgJHt0b3Bfc3JjZGlyfS9saWJ1dGlsKysgLUQgU1JDRElSPSJcIiQoU1JDRElSKS9cIiIKKworQ09NTU9OX0xJQlMgPSAuLi9saWJ1dGlsKysuYSAuLi8uLi9saWJ1dGlsL2xpYnV0aWwuYQorCitMSUJTID0gQExJQkVSVFlfTElCU0AKKworQU1fQ1hYRkxBR1MgPSBAT1BfQ1hYRkxBR1NACisKK2NoZWNrX1BST0dSQU1TID0gXAorCXN0cmluZ19tYW5pcF90ZXN0cyBcCisJc3RyaW5nX2ZpbHRlcl90ZXN0cyBcCisJY29tbWFfbGlzdF90ZXN0cyBcCisJZmlsZV9tYW5pcF90ZXN0cyBcCisJZ2xvYl9maWx0ZXJfdGVzdHMgXAorCXBhdGhfZmlsdGVyX3Rlc3RzIFwKKwljYWNoZWRfdmFsdWVfdGVzdHMgXAorCXV0aWxpdHlfdGVzdHMKKworc3RyaW5nX21hbmlwX3Rlc3RzX1NPVVJDRVMgPSBzdHJpbmdfbWFuaXBfdGVzdHMuY3BwCitzdHJpbmdfbWFuaXBfdGVzdHNfTERBREQgPSAke0NPTU1PTl9MSUJTfQorCitzdHJpbmdfZmlsdGVyX3Rlc3RzX1NPVVJDRVMgPSBzdHJpbmdfZmlsdGVyX3Rlc3RzLmNwcAorc3RyaW5nX2ZpbHRlcl90ZXN0c19MREFERCA9ICR7Q09NTU9OX0xJQlN9CisKK2dsb2JfZmlsdGVyX3Rlc3RzX1NPVVJDRVMgPSBnbG9iX2ZpbHRlcl90ZXN0cy5jcHAKK2dsb2JfZmlsdGVyX3Rlc3RzX0xEQUREID0gJHtDT01NT05fTElCU30KKworcGF0aF9maWx0ZXJfdGVzdHNfU09VUkNFUyA9IHBhdGhfZmlsdGVyX3Rlc3RzLmNwcAorcGF0aF9maWx0ZXJfdGVzdHNfTERBREQgPSAke0NPTU1PTl9MSUJTfQorCitjb21tYV9saXN0X3Rlc3RzX1NPVVJDRVMgPSBjb21tYV9saXN0X3Rlc3RzLmNwcAorY29tbWFfbGlzdF90ZXN0c19MREFERCA9ICR7Q09NTU9OX0xJQlN9CisKK2ZpbGVfbWFuaXBfdGVzdHNfU09VUkNFUyA9IGZpbGVfbWFuaXBfdGVzdHMuY3BwCitmaWxlX21hbmlwX3Rlc3RzX0xEQUREID0gJHtDT01NT05fTElCU30KKworY2FjaGVkX3ZhbHVlX3Rlc3RzX1NPVVJDRVMgPSBjYWNoZWRfdmFsdWVfdGVzdHMuY3BwCitjYWNoZWRfdmFsdWVfdGVzdHNfTERBREQgPSAke0NPTU1PTl9MSUJTfQorCit1dGlsaXR5X3Rlc3RzX1NPVVJDRVMgPSB1dGlsaXR5X3Rlc3RzLmNwcAordXRpbGl0eV90ZXN0c19MREFERCA9ICR7Q09NTU9OX0xJQlN9CisKK1RFU1RTID0gJHtjaGVja19QUk9HUkFNU30KZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2xpYnV0aWwrKy90ZXN0cy9NYWtlZmlsZS5pbiBiL29wcm9maWxlLTAuOS43L2xpYnV0aWwrKy90ZXN0cy9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOWE5MjIzCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvbGlidXRpbCsrL3Rlc3RzL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsNzAzIEBACisjIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjExLjEgZnJvbSBNYWtlZmlsZS5hbS4KKyMgQGNvbmZpZ3VyZV9pbnB1dEAKKworIyBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsCisjIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyMgSW5jLgorIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAorIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCisjIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworQFNFVF9NQUtFQAorVlBBVEggPSBAc3JjZGlyQAorcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACitwa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAorYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAoraW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKK2luc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKK2luc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYworSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKK3RyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKK05PUk1BTF9JTlNUQUxMID0gOgorUFJFX0lOU1RBTEwgPSA6CitQT1NUX0lOU1RBTEwgPSA6CitOT1JNQUxfVU5JTlNUQUxMID0gOgorUFJFX1VOSU5TVEFMTCA9IDoKK1BPU1RfVU5JTlNUQUxMID0gOgorYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKK2hvc3RfdHJpcGxldCA9IEBob3N0QAorY2hlY2tfUFJPR1JBTVMgPSBzdHJpbmdfbWFuaXBfdGVzdHMkKEVYRUVYVCkgXAorCXN0cmluZ19maWx0ZXJfdGVzdHMkKEVYRUVYVCkgY29tbWFfbGlzdF90ZXN0cyQoRVhFRVhUKSBcCisJZmlsZV9tYW5pcF90ZXN0cyQoRVhFRVhUKSBnbG9iX2ZpbHRlcl90ZXN0cyQoRVhFRVhUKSBcCisJcGF0aF9maWx0ZXJfdGVzdHMkKEVYRUVYVCkgY2FjaGVkX3ZhbHVlX3Rlc3RzJChFWEVFWFQpIFwKKwl1dGlsaXR5X3Rlc3RzJChFWEVFWFQpCitURVNUUyA9ICQoY2hlY2tfUFJPR1JBTVMpCitzdWJkaXIgPSBsaWJ1dGlsKysvdGVzdHMKK0RJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmFtICQoc3JjZGlyKS9NYWtlZmlsZS5pbgorQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAorYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvbTQvYmludXRpbHMubTQgXAorCSQodG9wX3NyY2RpcikvbTQvYnVpbHRpbmV4cGVjdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jZWxsc3B1YmZkc3VwcG9ydC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jb21waWxlcm9wdGlvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jb25maWdtb2R1bGUubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY29weWlmY2hhbmdlLm00ICQodG9wX3NyY2RpcikvbTQvZG9jYm9vay5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9leHRyYWRpcnMubTQgJCh0b3Bfc3JjZGlyKS9tNC9maW5ka2VybmVsLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2tlcm5lbG9wdGlvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9rZXJuZWx2ZXJzaW9uLm00ICQodG9wX3NyY2RpcikvbTQvbGlidG9vbC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9sdG9wdGlvbnMubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdHN1Z2FyLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2x0dmVyc2lvbi5tNCAkKHRvcF9zcmNkaXIpL200L2x0fm9ic29sZXRlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L21hbGxvY2F0dHJpYnV0ZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9wb3B0Y29uc3QubTQgXAorCSQodG9wX3NyY2RpcikvbTQvcHJlY29tcGlsZWRoZWFkZXIubTQgJCh0b3Bfc3JjZGlyKS9tNC9xdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9yZXN1bHR5bi5tNCAkKHRvcF9zcmNkaXIpL200L3NzdHJlYW0ubTQgXAorCSQodG9wX3NyY2RpcikvbTQvdHlwZWRlZi5tNCAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5pbgorYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKKwkkKEFDTE9DQUxfTTQpCitta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAorQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAorQ09ORklHX0NMRUFOX0ZJTEVTID0KK0NPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9CithbV9jYWNoZWRfdmFsdWVfdGVzdHNfT0JKRUNUUyA9IGNhY2hlZF92YWx1ZV90ZXN0cy4kKE9CSkVYVCkKK2NhY2hlZF92YWx1ZV90ZXN0c19PQkpFQ1RTID0gJChhbV9jYWNoZWRfdmFsdWVfdGVzdHNfT0JKRUNUUykKK2NhY2hlZF92YWx1ZV90ZXN0c19ERVBFTkRFTkNJRVMgPSAkKENPTU1PTl9MSUJTKQorYW1fY29tbWFfbGlzdF90ZXN0c19PQkpFQ1RTID0gY29tbWFfbGlzdF90ZXN0cy4kKE9CSkVYVCkKK2NvbW1hX2xpc3RfdGVzdHNfT0JKRUNUUyA9ICQoYW1fY29tbWFfbGlzdF90ZXN0c19PQkpFQ1RTKQorY29tbWFfbGlzdF90ZXN0c19ERVBFTkRFTkNJRVMgPSAkKENPTU1PTl9MSUJTKQorYW1fZmlsZV9tYW5pcF90ZXN0c19PQkpFQ1RTID0gZmlsZV9tYW5pcF90ZXN0cy4kKE9CSkVYVCkKK2ZpbGVfbWFuaXBfdGVzdHNfT0JKRUNUUyA9ICQoYW1fZmlsZV9tYW5pcF90ZXN0c19PQkpFQ1RTKQorZmlsZV9tYW5pcF90ZXN0c19ERVBFTkRFTkNJRVMgPSAkKENPTU1PTl9MSUJTKQorYW1fZ2xvYl9maWx0ZXJfdGVzdHNfT0JKRUNUUyA9IGdsb2JfZmlsdGVyX3Rlc3RzLiQoT0JKRVhUKQorZ2xvYl9maWx0ZXJfdGVzdHNfT0JKRUNUUyA9ICQoYW1fZ2xvYl9maWx0ZXJfdGVzdHNfT0JKRUNUUykKK2dsb2JfZmlsdGVyX3Rlc3RzX0RFUEVOREVOQ0lFUyA9ICQoQ09NTU9OX0xJQlMpCithbV9wYXRoX2ZpbHRlcl90ZXN0c19PQkpFQ1RTID0gcGF0aF9maWx0ZXJfdGVzdHMuJChPQkpFWFQpCitwYXRoX2ZpbHRlcl90ZXN0c19PQkpFQ1RTID0gJChhbV9wYXRoX2ZpbHRlcl90ZXN0c19PQkpFQ1RTKQorcGF0aF9maWx0ZXJfdGVzdHNfREVQRU5ERU5DSUVTID0gJChDT01NT05fTElCUykKK2FtX3N0cmluZ19maWx0ZXJfdGVzdHNfT0JKRUNUUyA9IHN0cmluZ19maWx0ZXJfdGVzdHMuJChPQkpFWFQpCitzdHJpbmdfZmlsdGVyX3Rlc3RzX09CSkVDVFMgPSAkKGFtX3N0cmluZ19maWx0ZXJfdGVzdHNfT0JKRUNUUykKK3N0cmluZ19maWx0ZXJfdGVzdHNfREVQRU5ERU5DSUVTID0gJChDT01NT05fTElCUykKK2FtX3N0cmluZ19tYW5pcF90ZXN0c19PQkpFQ1RTID0gc3RyaW5nX21hbmlwX3Rlc3RzLiQoT0JKRVhUKQorc3RyaW5nX21hbmlwX3Rlc3RzX09CSkVDVFMgPSAkKGFtX3N0cmluZ19tYW5pcF90ZXN0c19PQkpFQ1RTKQorc3RyaW5nX21hbmlwX3Rlc3RzX0RFUEVOREVOQ0lFUyA9ICQoQ09NTU9OX0xJQlMpCithbV91dGlsaXR5X3Rlc3RzX09CSkVDVFMgPSB1dGlsaXR5X3Rlc3RzLiQoT0JKRVhUKQordXRpbGl0eV90ZXN0c19PQkpFQ1RTID0gJChhbV91dGlsaXR5X3Rlc3RzX09CSkVDVFMpCit1dGlsaXR5X3Rlc3RzX0RFUEVOREVOQ0lFUyA9ICQoQ09NTU9OX0xJQlMpCitERUZBVUxUX0lOQ0xVREVTID0gLUkuQGFtX19pc3JjQCAtSSQodG9wX2J1aWxkZGlyKQorZGVwY29tcCA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvZGVwY29tcAorYW1fX2RlcGZpbGVzX21heWJlID0gZGVwZmlsZXMKK2FtX19tdiA9IG12IC1mCitDWFhDT01QSUxFID0gJChDWFgpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSBcCisJJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DWFhGTEFHUykgJChDWFhGTEFHUykKK0xUQ1hYQ09NUElMRSA9ICQoTElCVE9PTCkgLS10YWc9Q1hYICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgXAorCS0tbW9kZT1jb21waWxlICQoQ1hYKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgXAorCSQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ1hYRkxBR1MpICQoQ1hYRkxBR1MpCitDWFhMRCA9ICQoQ1hYKQorQ1hYTElOSyA9ICQoTElCVE9PTCkgLS10YWc9Q1hYICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgXAorCS0tbW9kZT1saW5rICQoQ1hYTEQpICQoQU1fQ1hYRkxBR1MpICQoQ1hYRkxBR1MpICQoQU1fTERGTEFHUykgXAorCSQoTERGTEFHUykgLW8gJEAKK1NPVVJDRVMgPSAkKGNhY2hlZF92YWx1ZV90ZXN0c19TT1VSQ0VTKSAkKGNvbW1hX2xpc3RfdGVzdHNfU09VUkNFUykgXAorCSQoZmlsZV9tYW5pcF90ZXN0c19TT1VSQ0VTKSAkKGdsb2JfZmlsdGVyX3Rlc3RzX1NPVVJDRVMpIFwKKwkkKHBhdGhfZmlsdGVyX3Rlc3RzX1NPVVJDRVMpICQoc3RyaW5nX2ZpbHRlcl90ZXN0c19TT1VSQ0VTKSBcCisJJChzdHJpbmdfbWFuaXBfdGVzdHNfU09VUkNFUykgJCh1dGlsaXR5X3Rlc3RzX1NPVVJDRVMpCitESVNUX1NPVVJDRVMgPSAkKGNhY2hlZF92YWx1ZV90ZXN0c19TT1VSQ0VTKSBcCisJJChjb21tYV9saXN0X3Rlc3RzX1NPVVJDRVMpICQoZmlsZV9tYW5pcF90ZXN0c19TT1VSQ0VTKSBcCisJJChnbG9iX2ZpbHRlcl90ZXN0c19TT1VSQ0VTKSAkKHBhdGhfZmlsdGVyX3Rlc3RzX1NPVVJDRVMpIFwKKwkkKHN0cmluZ19maWx0ZXJfdGVzdHNfU09VUkNFUykgJChzdHJpbmdfbWFuaXBfdGVzdHNfU09VUkNFUykgXAorCSQodXRpbGl0eV90ZXN0c19TT1VSQ0VTKQorRVRBR1MgPSBldGFncworQ1RBR1MgPSBjdGFncworYW1fX3R0eV9jb2xvcnMgPSBcCityZWQ9OyBncm49OyBsZ249OyBibHU9OyBzdGQ9CitESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQorQUNMT0NBTCA9IEBBQ0xPQ0FMQAorQU1UQVIgPSBAQU1UQVJACitBUiA9IEBBUkAKK0FVVE9DT05GID0gQEFVVE9DT05GQAorQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAorQVVUT01BS0UgPSBAQVVUT01BS0VACitBV0sgPSBAQVdLQAorQkZEX0xJQlMgPSBAQkZEX0xJQlNACitDQVRfRU5UUllfRU5EID0gQENBVF9FTlRSWV9FTkRACitDQVRfRU5UUllfU1RBUlQgPSBAQ0FUX0VOVFJZX1NUQVJUQAorQ0MgPSBAQ0NACitDQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAorQ0ZMQUdTID0gQENGTEFHU0AKK0NQUCA9IEBDUFBACitDUFBGTEFHUyA9IEBDUFBGTEFHU0AKK0NYWCA9IEBDWFhACitDWFhDUFAgPSBAQ1hYQ1BQQAorQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAorQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACitDWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAorREFURSA9IEBEQVRFQAorREVGUyA9IEBERUZTQAorREVQRElSID0gQERFUERJUkAKK0RPQ0JPT0tfUk9PVCA9IEBET0NCT09LX1JPT1RACitEU1lNVVRJTCA9IEBEU1lNVVRJTEAKK0RVTVBCSU4gPSBARFVNUEJJTkAKK0VDSE9fQyA9IEBFQ0hPX0NACitFQ0hPX04gPSBARUNIT19OQAorRUNIT19UID0gQEVDSE9fVEAKK0VHUkVQID0gQEVHUkVQQAorRVhFRVhUID0gQEVYRUVYVEAKK0VYVFJBX0NGTEFHU19NT0RVTEUgPSBARVhUUkFfQ0ZMQUdTX01PRFVMRUAKK0ZHUkVQID0gQEZHUkVQQAorR1JFUCA9IEBHUkVQQAorSU5TVEFMTCA9IEBJTlNUQUxMQAorSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKK0lOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACitJTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKK0lOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACitKQVZBX0hPTUVESVIgPSBASkFWQV9IT01FRElSQAorS0lOQyA9IEBLSU5DQAorS1NSQyA9IEBLU1JDQAorS1ZFUlMgPSBAS1ZFUlNACitMRCA9IEBMREAKK0xERkxBR1MgPSBATERGTEFHU0AKK0xJQkVSVFlfTElCUyA9IEBMSUJFUlRZX0xJQlNACitMSUJPQkpTID0gQExJQk9CSlNACitMSUJTID0gQExJQkVSVFlfTElCU0AKK0xJQlRPT0wgPSBATElCVE9PTEAKK0xJUE8gPSBATElQT0AKK0xOX1MgPSBATE5fU0AKK0xUTElCT0JKUyA9IEBMVExJQk9CSlNACitNQUtFSU5GTyA9IEBNQUtFSU5GT0AKK01LRElSX1AgPSBATUtESVJfUEAKK01PQyA9IEBNT0NACitNT0RJTlNUQUxMRElSID0gQE1PRElOU1RBTExESVJACitOTSA9IEBOTUAKK05NRURJVCA9IEBOTUVESVRACitPQkpEVU1QID0gQE9CSkRVTVBACitPQkpFWFQgPSBAT0JKRVhUQAorT1BST0ZJTEVfRElSID0gQE9QUk9GSUxFX0RJUkAKK09QUk9GSUxFX01PRFVMRV9BUkNIID0gQE9QUk9GSUxFX01PRFVMRV9BUkNIQAorT1BfQ0ZMQUdTID0gQE9QX0NGTEFHU0AKK09QX0NYWEZMQUdTID0gQE9QX0NYWEZMQUdTQAorT1BfRE9DRElSID0gQE9QX0RPQ0RJUkAKK09UT09MID0gQE9UT09MQAorT1RPT0w2NCA9IEBPVE9PTDY0QAorUEFDS0FHRSA9IEBQQUNLQUdFQAorUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACitQQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAorUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACitQQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAorUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACitQQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAorUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACitQS0dfQ09ORklHID0gQFBLR19DT05GSUdACitQS0dfQ09ORklHX0xJQkRJUiA9IEBQS0dfQ09ORklHX0xJQkRJUkAKK1BLR19DT05GSUdfUEFUSCA9IEBQS0dfQ09ORklHX1BBVEhACitQT1BUX0xJQlMgPSBAUE9QVF9MSUJTQAorUFRSRElGRl9UX1RZUEUgPSBAUFRSRElGRl9UX1RZUEVACitRVF9DRkxBR1MgPSBAUVRfQ0ZMQUdTQAorUVRfSU5DTFVERVMgPSBAUVRfSU5DTFVERVNACitRVF9MREZMQUdTID0gQFFUX0xERkxBR1NACitRVF9MSUIgPSBAUVRfTElCQAorUVRfTElCUyA9IEBRVF9MSUJTQAorUVRfVkVSU0lPTiA9IEBRVF9WRVJTSU9OQAorUkFOTElCID0gQFJBTkxJQkAKK1NFRCA9IEBTRURACitTRVRfTUFLRSA9IEBTRVRfTUFLRUAKK1NIRUxMID0gQFNIRUxMQAorU0laRV9UX1RZUEUgPSBAU0laRV9UX1RZUEVACitTVFJJUCA9IEBTVFJJUEAKK1VJQyA9IEBVSUNACitVSUNoZWxwID0gQFVJQ2hlbHBACitWRVJTSU9OID0gQFZFUlNJT05ACitYTUtNRiA9IEBYTUtNRkAKK1hNTF9DQVRBTE9HID0gQFhNTF9DQVRBTE9HQAorWFNMVFBST0MgPSBAWFNMVFBST0NACitYU0xUUFJPQ19GTEFHUyA9IEBYU0xUUFJPQ19GTEFHU0AKK1hfQ0ZMQUdTID0gQFhfQ0ZMQUdTQAorWF9FWFRSQV9MSUJTID0gQFhfRVhUUkFfTElCU0AKK1hfTElCUyA9IEBYX0xJQlNACitYX1BSRV9MSUJTID0gQFhfUFJFX0xJQlNACithYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAorYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAorYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAorYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACithY19jdF9DQyA9IEBhY19jdF9DQ0AKK2FjX2N0X0NYWCA9IEBhY19jdF9DWFhACithY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACithbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKK2FtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACithbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAorYW1fX3RhciA9IEBhbV9fdGFyQAorYW1fX3VudGFyID0gQGFtX191bnRhckAKK2JpbmRpciA9IEBiaW5kaXJACitidWlsZCA9IEBidWlsZEAKK2J1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAorYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKK2J1aWxkX29zID0gQGJ1aWxkX29zQAorYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKK2J1aWxkZGlyID0gQGJ1aWxkZGlyQAorZGF0YWRpciA9IEBkYXRhZGlyQAorZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACitkb2NkaXIgPSBAZG9jZGlyQAorZHZpZGlyID0gQGR2aWRpckAKK2V4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAoraG9zdCA9IEBob3N0QAoraG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAoraG9zdF9jcHUgPSBAaG9zdF9jcHVACitob3N0X29zID0gQGhvc3Rfb3NACitob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKK2h0bWxkaXIgPSBAaHRtbGRpckAKK2luY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKK2luZm9kaXIgPSBAaW5mb2RpckAKK2luc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKK2xpYmRpciA9IEBsaWJkaXJACitsaWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACitsb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAorbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAorbHRfRUNITyA9IEBsdF9FQ0hPQAorbWFuZGlyID0gQG1hbmRpckAKK21rZGlyX3AgPSBAbWtkaXJfcEAKK29sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKK3BkZmRpciA9IEBwZGZkaXJACitwcmVmaXggPSBAcHJlZml4QAorcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAorcHNkaXIgPSBAcHNkaXJACitzYmluZGlyID0gQHNiaW5kaXJACitzaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKK3NyY2RpciA9IEBzcmNkaXJACitzeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACit0YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAordG9wX2J1aWxkX3ByZWZpeCA9IEB0b3BfYnVpbGRfcHJlZml4QAordG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKK3RvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKK3RvcGRpciA9IEB0b3BkaXJACitSRUFMUEFUSCA9IHJlYWRsaW5rIC1mCitTUkNESVIgOj0gJChzaGVsbCAkKFJFQUxQQVRIKSAkKHRvcGRpcikvbGlidXRpbCsrL3Rlc3RzLyApCitBTV9DUFBGTEFHUyA9IFwKKwktSSAke3RvcF9zcmNkaXJ9L2xpYnV0aWwrKyAtRCBTUkNESVI9IlwiJChTUkNESVIpL1wiIgorCitDT01NT05fTElCUyA9IC4uL2xpYnV0aWwrKy5hIC4uLy4uL2xpYnV0aWwvbGlidXRpbC5hCitBTV9DWFhGTEFHUyA9IEBPUF9DWFhGTEFHU0AKK3N0cmluZ19tYW5pcF90ZXN0c19TT1VSQ0VTID0gc3RyaW5nX21hbmlwX3Rlc3RzLmNwcAorc3RyaW5nX21hbmlwX3Rlc3RzX0xEQUREID0gJHtDT01NT05fTElCU30KK3N0cmluZ19maWx0ZXJfdGVzdHNfU09VUkNFUyA9IHN0cmluZ19maWx0ZXJfdGVzdHMuY3BwCitzdHJpbmdfZmlsdGVyX3Rlc3RzX0xEQUREID0gJHtDT01NT05fTElCU30KK2dsb2JfZmlsdGVyX3Rlc3RzX1NPVVJDRVMgPSBnbG9iX2ZpbHRlcl90ZXN0cy5jcHAKK2dsb2JfZmlsdGVyX3Rlc3RzX0xEQUREID0gJHtDT01NT05fTElCU30KK3BhdGhfZmlsdGVyX3Rlc3RzX1NPVVJDRVMgPSBwYXRoX2ZpbHRlcl90ZXN0cy5jcHAKK3BhdGhfZmlsdGVyX3Rlc3RzX0xEQUREID0gJHtDT01NT05fTElCU30KK2NvbW1hX2xpc3RfdGVzdHNfU09VUkNFUyA9IGNvbW1hX2xpc3RfdGVzdHMuY3BwCitjb21tYV9saXN0X3Rlc3RzX0xEQUREID0gJHtDT01NT05fTElCU30KK2ZpbGVfbWFuaXBfdGVzdHNfU09VUkNFUyA9IGZpbGVfbWFuaXBfdGVzdHMuY3BwCitmaWxlX21hbmlwX3Rlc3RzX0xEQUREID0gJHtDT01NT05fTElCU30KK2NhY2hlZF92YWx1ZV90ZXN0c19TT1VSQ0VTID0gY2FjaGVkX3ZhbHVlX3Rlc3RzLmNwcAorY2FjaGVkX3ZhbHVlX3Rlc3RzX0xEQUREID0gJHtDT01NT05fTElCU30KK3V0aWxpdHlfdGVzdHNfU09VUkNFUyA9IHV0aWxpdHlfdGVzdHMuY3BwCit1dGlsaXR5X3Rlc3RzX0xEQUREID0gJHtDT01NT05fTElCU30KK2FsbDogYWxsLWFtCisKKy5TVUZGSVhFUzoKKy5TVUZGSVhFUzogLmNwcCAubG8gLm8gLm9iagorJChzcmNkaXIpL01ha2VmaWxlLmluOiAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKKwlAZm9yIGRlcCBpbiAkPzsgZG8gXAorCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCisJICAgICokJGRlcCopIFwKKwkgICAgICAoIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCApIFwKKwkgICAgICAgICYmIHsgaWYgdGVzdCAtZiAkQDsgdGhlbiBleGl0IDA7IGVsc2UgYnJlYWs7IGZpOyB9OyBcCisJICAgICAgZXhpdCAxOzsgXAorCSAgZXNhYzsgXAorCWRvbmU7IFwKKwllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gbGlidXRpbCsrL3Rlc3RzL01ha2VmaWxlJzsgXAorCSQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmIFwKKwkgICQoQVVUT01BS0UpIC0tZm9yZWlnbiBsaWJ1dGlsKysvdGVzdHMvTWFrZWZpbGUKKy5QUkVDSU9VUzogTWFrZWZpbGUKK01ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKKwlAY2FzZSAnJD8nIGluIFwKKwkgICpjb25maWcuc3RhdHVzKikgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCisJICAqKSBcCisJICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKKwllc2FjOworCiskKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKworJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6ICAkKGFtX19jb25maWd1cmVfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyQoQUNMT0NBTF9NNCk6ICAkKGFtX19hY2xvY2FsX200X2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCiskKGFtX19hY2xvY2FsX200X2RlcHMpOgorCitjbGVhbi1jaGVja1BST0dSQU1TOgorCUBsaXN0PSckKGNoZWNrX1BST0dSQU1TKSc7IHRlc3QgLW4gIiQkbGlzdCIgfHwgZXhpdCAwOyBcCisJZWNobyAiIHJtIC1mIiAkJGxpc3Q7IFwKKwlybSAtZiAkJGxpc3QgfHwgZXhpdCAkJD87IFwKKwl0ZXN0IC1uICIkKEVYRUVYVCkiIHx8IGV4aXQgMDsgXAorCWxpc3Q9YGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwIjsgZG9uZSB8IHNlZCAncy8kKEVYRUVYVCkkJC8vJ2A7IFwKKwllY2hvICIgcm0gLWYiICQkbGlzdDsgXAorCXJtIC1mICQkbGlzdAorY2FjaGVkX3ZhbHVlX3Rlc3RzJChFWEVFWFQpOiAkKGNhY2hlZF92YWx1ZV90ZXN0c19PQkpFQ1RTKSAkKGNhY2hlZF92YWx1ZV90ZXN0c19ERVBFTkRFTkNJRVMpIAorCUBybSAtZiBjYWNoZWRfdmFsdWVfdGVzdHMkKEVYRUVYVCkKKwkkKENYWExJTkspICQoY2FjaGVkX3ZhbHVlX3Rlc3RzX09CSkVDVFMpICQoY2FjaGVkX3ZhbHVlX3Rlc3RzX0xEQUREKSAkKExJQlMpCitjb21tYV9saXN0X3Rlc3RzJChFWEVFWFQpOiAkKGNvbW1hX2xpc3RfdGVzdHNfT0JKRUNUUykgJChjb21tYV9saXN0X3Rlc3RzX0RFUEVOREVOQ0lFUykgCisJQHJtIC1mIGNvbW1hX2xpc3RfdGVzdHMkKEVYRUVYVCkKKwkkKENYWExJTkspICQoY29tbWFfbGlzdF90ZXN0c19PQkpFQ1RTKSAkKGNvbW1hX2xpc3RfdGVzdHNfTERBREQpICQoTElCUykKK2ZpbGVfbWFuaXBfdGVzdHMkKEVYRUVYVCk6ICQoZmlsZV9tYW5pcF90ZXN0c19PQkpFQ1RTKSAkKGZpbGVfbWFuaXBfdGVzdHNfREVQRU5ERU5DSUVTKSAKKwlAcm0gLWYgZmlsZV9tYW5pcF90ZXN0cyQoRVhFRVhUKQorCSQoQ1hYTElOSykgJChmaWxlX21hbmlwX3Rlc3RzX09CSkVDVFMpICQoZmlsZV9tYW5pcF90ZXN0c19MREFERCkgJChMSUJTKQorZ2xvYl9maWx0ZXJfdGVzdHMkKEVYRUVYVCk6ICQoZ2xvYl9maWx0ZXJfdGVzdHNfT0JKRUNUUykgJChnbG9iX2ZpbHRlcl90ZXN0c19ERVBFTkRFTkNJRVMpIAorCUBybSAtZiBnbG9iX2ZpbHRlcl90ZXN0cyQoRVhFRVhUKQorCSQoQ1hYTElOSykgJChnbG9iX2ZpbHRlcl90ZXN0c19PQkpFQ1RTKSAkKGdsb2JfZmlsdGVyX3Rlc3RzX0xEQUREKSAkKExJQlMpCitwYXRoX2ZpbHRlcl90ZXN0cyQoRVhFRVhUKTogJChwYXRoX2ZpbHRlcl90ZXN0c19PQkpFQ1RTKSAkKHBhdGhfZmlsdGVyX3Rlc3RzX0RFUEVOREVOQ0lFUykgCisJQHJtIC1mIHBhdGhfZmlsdGVyX3Rlc3RzJChFWEVFWFQpCisJJChDWFhMSU5LKSAkKHBhdGhfZmlsdGVyX3Rlc3RzX09CSkVDVFMpICQocGF0aF9maWx0ZXJfdGVzdHNfTERBREQpICQoTElCUykKK3N0cmluZ19maWx0ZXJfdGVzdHMkKEVYRUVYVCk6ICQoc3RyaW5nX2ZpbHRlcl90ZXN0c19PQkpFQ1RTKSAkKHN0cmluZ19maWx0ZXJfdGVzdHNfREVQRU5ERU5DSUVTKSAKKwlAcm0gLWYgc3RyaW5nX2ZpbHRlcl90ZXN0cyQoRVhFRVhUKQorCSQoQ1hYTElOSykgJChzdHJpbmdfZmlsdGVyX3Rlc3RzX09CSkVDVFMpICQoc3RyaW5nX2ZpbHRlcl90ZXN0c19MREFERCkgJChMSUJTKQorc3RyaW5nX21hbmlwX3Rlc3RzJChFWEVFWFQpOiAkKHN0cmluZ19tYW5pcF90ZXN0c19PQkpFQ1RTKSAkKHN0cmluZ19tYW5pcF90ZXN0c19ERVBFTkRFTkNJRVMpIAorCUBybSAtZiBzdHJpbmdfbWFuaXBfdGVzdHMkKEVYRUVYVCkKKwkkKENYWExJTkspICQoc3RyaW5nX21hbmlwX3Rlc3RzX09CSkVDVFMpICQoc3RyaW5nX21hbmlwX3Rlc3RzX0xEQUREKSAkKExJQlMpCit1dGlsaXR5X3Rlc3RzJChFWEVFWFQpOiAkKHV0aWxpdHlfdGVzdHNfT0JKRUNUUykgJCh1dGlsaXR5X3Rlc3RzX0RFUEVOREVOQ0lFUykgCisJQHJtIC1mIHV0aWxpdHlfdGVzdHMkKEVYRUVYVCkKKwkkKENYWExJTkspICQodXRpbGl0eV90ZXN0c19PQkpFQ1RTKSAkKHV0aWxpdHlfdGVzdHNfTERBREQpICQoTElCUykKKworbW9zdGx5Y2xlYW4tY29tcGlsZToKKwktcm0gLWYgKi4kKE9CSkVYVCkKKworZGlzdGNsZWFuLWNvbXBpbGU6CisJLXJtIC1mICoudGFiLmMKKworQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2NhY2hlZF92YWx1ZV90ZXN0cy5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvY29tbWFfbGlzdF90ZXN0cy5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvZmlsZV9tYW5pcF90ZXN0cy5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvZ2xvYl9maWx0ZXJfdGVzdHMuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3BhdGhfZmlsdGVyX3Rlc3RzLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9zdHJpbmdfZmlsdGVyX3Rlc3RzLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9zdHJpbmdfbWFuaXBfdGVzdHMuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3V0aWxpdHlfdGVzdHMuUG9AYW1fX3F1b3RlQAorCisuY3BwLm86CitAYW1fX2Zhc3RkZXBDWFhfVFJVRUAJJChDWFhDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCAkPAorQGFtX19mYXN0ZGVwQ1hYX1RSVUVACSQoYW1fX212KSAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENYWF9GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENYWERFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAkkKENYWENPTVBJTEUpIC1jIC1vICRAICQ8CisKKy5jcHAub2JqOgorQGFtX19mYXN0ZGVwQ1hYX1RSVUVACSQoQ1hYQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYAorQGFtX19mYXN0ZGVwQ1hYX1RSVUVACSQoYW1fX212KSAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENYWF9GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENYWERFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAkkKENYWENPTVBJTEUpIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKKworLmNwcC5sbzoKK0BhbV9fZmFzdGRlcENYWF9UUlVFQAkkKExUQ1hYQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgJDwKK0BhbV9fZmFzdGRlcENYWF9UUlVFQAkkKGFtX19tdikgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENYWF9GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENYWERFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAkkKExUQ1hYQ09NUElMRSkgLWMgLW8gJEAgJDwKKworbW9zdGx5Y2xlYW4tbGlidG9vbDoKKwktcm0gLWYgKi5sbworCitjbGVhbi1saWJ0b29sOgorCS1ybSAtcmYgLmxpYnMgX2xpYnMKKworSUQ6ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKExJU1ApICQoVEFHU19GSUxFUykKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKwkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKwlta2lkIC1mSUQgJCR1bmlxdWUKK3RhZ3M6IFRBR1MKKworVEFHUzogICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAorCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKwlzZXQgeDsgXAorCWhlcmU9YHB3ZGA7IFwKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCisJICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCisJc2hpZnQ7IFwKKwlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCQqJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAorCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAorCSAgaWYgdGVzdCAkJCMgLWd0IDA7IHRoZW4gXAorCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCisJICAgICAgIiQkQCIgJCR1bmlxdWU7IFwKKwkgIGVsc2UgXAorCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCisJICAgICAgJCR1bmlxdWU7IFwKKwkgIGZpOyBcCisJZmkKK2N0YWdzOiBDVEFHUworQ1RBR1M6ICAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKKwkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHVuaXF1ZSIgXAorCSAgfHwgJChDVEFHUykgJChDVEFHU0ZMQUdTKSAkKEFNX0NUQUdTRkxBR1MpICQoQ1RBR1NfQVJHUykgXAorCSAgICAgJCR1bmlxdWUKKworR1RBR1M6CisJaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKKwkgICYmICQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpIFwKKwkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgIiQkaGVyZSIKKworZGlzdGNsZWFuLXRhZ3M6CisJLXJtIC1mIFRBR1MgSUQgR1RBR1MgR1JUQUdTIEdTWU1TIEdQQVRIIHRhZ3MKKworY2hlY2stVEVTVFM6ICQoVEVTVFMpCisJQGZhaWxlZD0wOyBhbGw9MDsgeGZhaWw9MDsgeHBhc3M9MDsgc2tpcD0wOyBcCisJc3JjZGlyPSQoc3JjZGlyKTsgZXhwb3J0IHNyY2RpcjsgXAorCWxpc3Q9JyAkKFRFU1RTKSAnOyBcCisJJChhbV9fdHR5X2NvbG9ycyk7IFwKKwlpZiB0ZXN0IC1uICIkJGxpc3QiOyB0aGVuIFwKKwkgIGZvciB0c3QgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgLi8kJHRzdDsgdGhlbiBkaXI9Li87IFwKKwkgICAgZWxpZiB0ZXN0IC1mICQkdHN0OyB0aGVuIGRpcj07IFwKKwkgICAgZWxzZSBkaXI9IiQoc3JjZGlyKS8iOyBmaTsgXAorCSAgICBpZiAkKFRFU1RTX0VOVklST05NRU5UKSAkJHtkaXJ9JCR0c3Q7IHRoZW4gXAorCSAgICAgIGFsbD1gZXhwciAkJGFsbCArIDFgOyBcCisJICAgICAgY2FzZSAiICQoWEZBSUxfVEVTVFMpICIgaW4gXAorCSAgICAgICpbXCBcCV0kJHRzdFtcIFwJXSopIFwKKwkJeHBhc3M9YGV4cHIgJCR4cGFzcyArIDFgOyBcCisJCWZhaWxlZD1gZXhwciAkJGZhaWxlZCArIDFgOyBcCisJCWNvbD0kJHJlZDsgcmVzPVhQQVNTOyBcCisJICAgICAgOzsgXAorCSAgICAgICopIFwKKwkJY29sPSQkZ3JuOyByZXM9UEFTUzsgXAorCSAgICAgIDs7IFwKKwkgICAgICBlc2FjOyBcCisJICAgIGVsaWYgdGVzdCAkJD8gLW5lIDc3OyB0aGVuIFwKKwkgICAgICBhbGw9YGV4cHIgJCRhbGwgKyAxYDsgXAorCSAgICAgIGNhc2UgIiAkKFhGQUlMX1RFU1RTKSAiIGluIFwKKwkgICAgICAqW1wgXAldJCR0c3RbXCBcCV0qKSBcCisJCXhmYWlsPWBleHByICQkeGZhaWwgKyAxYDsgXAorCQljb2w9JCRsZ247IHJlcz1YRkFJTDsgXAorCSAgICAgIDs7IFwKKwkgICAgICAqKSBcCisJCWZhaWxlZD1gZXhwciAkJGZhaWxlZCArIDFgOyBcCisJCWNvbD0kJHJlZDsgcmVzPUZBSUw7IFwKKwkgICAgICA7OyBcCisJICAgICAgZXNhYzsgXAorCSAgICBlbHNlIFwKKwkgICAgICBza2lwPWBleHByICQkc2tpcCArIDFgOyBcCisJICAgICAgY29sPSQkYmx1OyByZXM9U0tJUDsgXAorCSAgICBmaTsgXAorCSAgICBlY2hvICIkJHtjb2x9JCRyZXMkJHtzdGR9OiAkJHRzdCI7IFwKKwkgIGRvbmU7IFwKKwkgIGlmIHRlc3QgIiQkYWxsIiAtZXEgMTsgdGhlbiBcCisJICAgIHRlc3RzPSJ0ZXN0IjsgXAorCSAgICBBbGw9IiI7IFwKKwkgIGVsc2UgXAorCSAgICB0ZXN0cz0idGVzdHMiOyBcCisJICAgIEFsbD0iQWxsICI7IFwKKwkgIGZpOyBcCisJICBpZiB0ZXN0ICIkJGZhaWxlZCIgLWVxIDA7IHRoZW4gXAorCSAgICBpZiB0ZXN0ICIkJHhmYWlsIiAtZXEgMDsgdGhlbiBcCisJICAgICAgYmFubmVyPSIkJEFsbCQkYWxsICQkdGVzdHMgcGFzc2VkIjsgXAorCSAgICBlbHNlIFwKKwkgICAgICBpZiB0ZXN0ICIkJHhmYWlsIiAtZXEgMTsgdGhlbiBmYWlsdXJlcz1mYWlsdXJlOyBlbHNlIGZhaWx1cmVzPWZhaWx1cmVzOyBmaTsgXAorCSAgICAgIGJhbm5lcj0iJCRBbGwkJGFsbCAkJHRlc3RzIGJlaGF2ZWQgYXMgZXhwZWN0ZWQgKCQkeGZhaWwgZXhwZWN0ZWQgJCRmYWlsdXJlcykiOyBcCisJICAgIGZpOyBcCisJICBlbHNlIFwKKwkgICAgaWYgdGVzdCAiJCR4cGFzcyIgLWVxIDA7IHRoZW4gXAorCSAgICAgIGJhbm5lcj0iJCRmYWlsZWQgb2YgJCRhbGwgJCR0ZXN0cyBmYWlsZWQiOyBcCisJICAgIGVsc2UgXAorCSAgICAgIGlmIHRlc3QgIiQkeHBhc3MiIC1lcSAxOyB0aGVuIHBhc3Nlcz1wYXNzOyBlbHNlIHBhc3Nlcz1wYXNzZXM7IGZpOyBcCisJICAgICAgYmFubmVyPSIkJGZhaWxlZCBvZiAkJGFsbCAkJHRlc3RzIGRpZCBub3QgYmVoYXZlIGFzIGV4cGVjdGVkICgkJHhwYXNzIHVuZXhwZWN0ZWQgJCRwYXNzZXMpIjsgXAorCSAgICBmaTsgXAorCSAgZmk7IFwKKwkgIGRhc2hlcz0iJCRiYW5uZXIiOyBcCisJICBza2lwcGVkPSIiOyBcCisJICBpZiB0ZXN0ICIkJHNraXAiIC1uZSAwOyB0aGVuIFwKKwkgICAgaWYgdGVzdCAiJCRza2lwIiAtZXEgMTsgdGhlbiBcCisJICAgICAgc2tpcHBlZD0iKCQkc2tpcCB0ZXN0IHdhcyBub3QgcnVuKSI7IFwKKwkgICAgZWxzZSBcCisJICAgICAgc2tpcHBlZD0iKCQkc2tpcCB0ZXN0cyB3ZXJlIG5vdCBydW4pIjsgXAorCSAgICBmaTsgXAorCSAgICB0ZXN0IGBlY2hvICIkJHNraXBwZWQiIHwgd2MgLWNgIC1sZSBgZWNobyAiJCRiYW5uZXIiIHwgd2MgLWNgIHx8IFwKKwkgICAgICBkYXNoZXM9IiQkc2tpcHBlZCI7IFwKKwkgIGZpOyBcCisJICByZXBvcnQ9IiI7IFwKKwkgIGlmIHRlc3QgIiQkZmFpbGVkIiAtbmUgMCAmJiB0ZXN0IC1uICIkKFBBQ0tBR0VfQlVHUkVQT1JUKSI7IHRoZW4gXAorCSAgICByZXBvcnQ9IlBsZWFzZSByZXBvcnQgdG8gJChQQUNLQUdFX0JVR1JFUE9SVCkiOyBcCisJICAgIHRlc3QgYGVjaG8gIiQkcmVwb3J0IiB8IHdjIC1jYCAtbGUgYGVjaG8gIiQkYmFubmVyIiB8IHdjIC1jYCB8fCBcCisJICAgICAgZGFzaGVzPSIkJHJlcG9ydCI7IFwKKwkgIGZpOyBcCisJICBkYXNoZXM9YGVjaG8gIiQkZGFzaGVzIiB8IHNlZCBzLy4vPS9nYDsgXAorCSAgaWYgdGVzdCAiJCRmYWlsZWQiIC1lcSAwOyB0aGVuIFwKKwkgICAgZWNobyAiJCRncm4kJGRhc2hlcyI7IFwKKwkgIGVsc2UgXAorCSAgICBlY2hvICIkJHJlZCQkZGFzaGVzIjsgXAorCSAgZmk7IFwKKwkgIGVjaG8gIiQkYmFubmVyIjsgXAorCSAgdGVzdCAteiAiJCRza2lwcGVkIiB8fCBlY2hvICIkJHNraXBwZWQiOyBcCisJICB0ZXN0IC16ICIkJHJlcG9ydCIgfHwgZWNobyAiJCRyZXBvcnQiOyBcCisJICBlY2hvICIkJGRhc2hlcyQkc3RkIjsgXAorCSAgdGVzdCAiJCRmYWlsZWQiIC1lcSAwOyBcCisJZWxzZSA6OyBmaQorCitkaXN0ZGlyOiAkKERJU1RGSUxFUykKKwlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisJdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCWxpc3Q9JyQoRElTVEZJTEVTKSc7IFwKKwkgIGRpc3RfZmlsZXM9YGZvciBmaWxlIGluICQkbGlzdDsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBcCisJICBzZWQgLWUgInN8XiQkc3JjZGlyc3RyaXAvfHw7dCIgXAorCSAgICAgIC1lICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfDt0ImA7IFwKKwljYXNlICQkZGlzdF9maWxlcyBpbiBcCisJICAqLyopICQoTUtESVJfUCkgYGVjaG8gIiQkZGlzdF9maWxlcyIgfCBcCisJCQkgICBzZWQgJy9cLy8hZDtzfF58JChkaXN0ZGlyKS98O3MsL1teL10qJCQsLCcgfCBcCisJCQkgICBzb3J0IC11YCA7OyBcCisJZXNhYzsgXAorCWZvciBmaWxlIGluICQkZGlzdF9maWxlczsgZG8gXAorCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAorCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKKwkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKKwkgICAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJGZpbGUiOyB0aGVuIFwKKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKwkgICAgZmk7IFwKKwkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCisJICAgICAgY3AgLWZwUiAkKHNyY2RpcikvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAorCSAgICBmaTsgXAorCSAgICBjcCAtZnBSICQkZC8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCisJICBlbHNlIFwKKwkgICAgdGVzdCAtZiAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKKwkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKKwkgICAgfHwgZXhpdCAxOyBcCisJICBmaTsgXAorCWRvbmUKK2NoZWNrLWFtOiBhbGwtYW0KKwkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSAkKGNoZWNrX1BST0dSQU1TKQorCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGNoZWNrLVRFU1RTCitjaGVjazogY2hlY2stYW0KK2FsbC1hbTogTWFrZWZpbGUKK2luc3RhbGxkaXJzOgoraW5zdGFsbDogaW5zdGFsbC1hbQoraW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtYW0KK2luc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLWFtCit1bmluc3RhbGw6IHVuaW5zdGFsbC1hbQorCitpbnN0YWxsLWFtOiBhbGwtYW0KKwlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQorCitpbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1hbQoraW5zdGFsbC1zdHJpcDoKKwkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAorCSAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCisJICBgdGVzdCAteiAnJChTVFJJUCknIHx8IFwKKwkgICAgZWNobyAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyJgIGluc3RhbGwKK21vc3RseWNsZWFuLWdlbmVyaWM6CisKK2NsZWFuLWdlbmVyaWM6CisKK2Rpc3RjbGVhbi1nZW5lcmljOgorCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQorCS10ZXN0IC4gPSAiJChzcmNkaXIpIiB8fCB0ZXN0IC16ICIkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKQorCittYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6CisJQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgorCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKK2NsZWFuOiBjbGVhbi1hbQorCitjbGVhbi1hbTogY2xlYW4tY2hlY2tQUk9HUkFNUyBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgXAorCW1vc3RseWNsZWFuLWFtCisKK2Rpc3RjbGVhbjogZGlzdGNsZWFuLWFtCisJLXJtIC1yZiAuLyQoREVQRElSKQorCS1ybSAtZiBNYWtlZmlsZQorZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCisJZGlzdGNsZWFuLXRhZ3MKKworZHZpOiBkdmktYW0KKworZHZpLWFtOgorCitodG1sOiBodG1sLWFtCisKK2h0bWwtYW06CisKK2luZm86IGluZm8tYW0KKworaW5mby1hbToKKworaW5zdGFsbC1kYXRhLWFtOgorCitpbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktYW0KKworaW5zdGFsbC1kdmktYW06CisKK2luc3RhbGwtZXhlYy1hbToKKworaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KKworaW5zdGFsbC1odG1sLWFtOgorCitpbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQorCitpbnN0YWxsLWluZm8tYW06CisKK2luc3RhbGwtbWFuOgorCitpbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KKworaW5zdGFsbC1wZGYtYW06CisKK2luc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KKworaW5zdGFsbC1wcy1hbToKKworaW5zdGFsbGNoZWNrLWFtOgorCittYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCisJLXJtIC1yZiAuLyQoREVQRElSKQorCS1ybSAtZiBNYWtlZmlsZQorbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYworCittb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tYW0KKworbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCisJbW9zdGx5Y2xlYW4tbGlidG9vbAorCitwZGY6IHBkZi1hbQorCitwZGYtYW06CisKK3BzOiBwcy1hbQorCitwcy1hbToKKwordW5pbnN0YWxsLWFtOgorCisuTUFLRTogY2hlY2stYW0gaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwCisKKy5QSE9OWTogQ1RBR1MgR1RBR1MgYWxsIGFsbC1hbSBjaGVjayBjaGVjay1URVNUUyBjaGVjay1hbSBjbGVhbiBcCisJY2xlYW4tY2hlY2tQUk9HUkFNUyBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgY3RhZ3MgXAorCWRpc3RjbGVhbiBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCisJZGlzdGNsZWFuLWxpYnRvb2wgZGlzdGNsZWFuLXRhZ3MgZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgXAorCWh0bWwtYW0gaW5mbyBpbmZvLWFtIGluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgXAorCWluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBpbnN0YWxsLWR2aS1hbSBpbnN0YWxsLWV4ZWMgXAorCWluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgaW5zdGFsbC1odG1sLWFtIGluc3RhbGwtaW5mbyBcCisJaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIGluc3RhbGwtcGRmIGluc3RhbGwtcGRmLWFtIFwKKwlpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgXAorCWluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBtYWludGFpbmVyLWNsZWFuIFwKKwltYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gbW9zdGx5Y2xlYW4tY29tcGlsZSBcCisJbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sIHBkZiBwZGYtYW0gcHMgcHMtYW0gXAorCXRhZ3MgdW5pbnN0YWxsIHVuaW5zdGFsbC1hbQorCisKKyMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCisjIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KKy5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2xpYnV0aWwrKy90ZXN0cy9jYWNoZWRfdmFsdWVfdGVzdHMuY3BwIGIvb3Byb2ZpbGUtMC45LjcvbGlidXRpbCsrL3Rlc3RzL2NhY2hlZF92YWx1ZV90ZXN0cy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjUwYzVkNAotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2xpYnV0aWwrKy90ZXN0cy9jYWNoZWRfdmFsdWVfdGVzdHMuY3BwCkBAIC0wLDAgKzEsODAgQEAKKy8qKgorICogQGZpbGUgY2FjaGVkX3ZhbHVlX3Rlc3RzLmNwcAorICogdGVzdHMgY2FjaGVkX3ZhbHVlLmgKKyAqCisgKiBAcmVtYXJrIENvcHlyaWdodCAyMDA1IE9Qcm9maWxlIGF1dGhvcnMKKyAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCisgKgorICogQGF1dGhvciBKb2huIExldm9uCisgKi8KKworI2luY2x1ZGUgPGNzdGRsaWI+CisjaW5jbHVkZSA8aW9zdHJlYW0+CisjaW5jbHVkZSA8c3RyaW5nPgorCisjaW5jbHVkZSAiY2FjaGVkX3ZhbHVlLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisKK25hbWVzcGFjZSB7CisKKworYm9vbCBjaGVja190aHJvdyhjYWNoZWRfdmFsdWU8Ym9vbD4gY29uc3QgJiBib29sdmFsKQoreworCXRyeSB7CisJCWJvb2wgZm9vID0gYm9vbHZhbC5nZXQoKTsKKwkJZm9vID0gZmFsc2U7CisJfSBjYXRjaCAob3BfZmF0YWxfZXJyb3IgY29uc3QgJiBlKSB7CisJCXJldHVybiB0cnVlOworCX0KKwlyZXR1cm4gZmFsc2U7Cit9CisKKworaW50IGNoZWNrX2NhY2hlZCh2b2lkKQoreworCWNhY2hlZF92YWx1ZTxib29sPiBib29sdmFsOworCWNhY2hlZF92YWx1ZTxzdHJpbmc+IHN0cnZhbDsKKworCWlmICghY2hlY2tfdGhyb3coYm9vbHZhbCkpIHsKKwkJY2VyciA8PCAiZ2V0KCkgb24gbm8gdmFsdWUgZGlkbid0IHRocm93XG4iOworCQlyZXR1cm4gRVhJVF9GQUlMVVJFOworCX0KKworCWlmIChib29sdmFsLnJlc2V0KGZhbHNlKSAhPSBmYWxzZSB8fCBib29sdmFsLmdldCgpICE9IGZhbHNlKSB7CisJCWNlcnIgPDwgInJlc2V0KCkgb2YgY2FjaGVkIHZhbHVlIFwiZmFsc2VcIiBkaWRuJ3Qgd29ya1xuIjsKKwkJcmV0dXJuIEVYSVRfRkFJTFVSRTsKKwl9CisKKwlpZiAoYm9vbHZhbC5yZXNldCh0cnVlKSAhPSB0cnVlIHx8IGJvb2x2YWwuZ2V0KCkgIT0gdHJ1ZSkgeworCQljZXJyIDw8ICJyZXNldCgpIG9mIGNhY2hlZCB2YWx1ZSBcInRydWVcIiBkaWRuJ3Qgd29ya1xuIjsKKwkJcmV0dXJuIEVYSVRfRkFJTFVSRTsKKwl9CisKKwlpZiAoc3RydmFsLnJlc2V0KCJmb28iKSAhPSAiZm9vIiB8fCBzdHJ2YWwuZ2V0KCkgIT0gImZvbyIpIHsKKwkJY2VyciA8PCAicmVzZXQoKSBvZiBjYWNoZWQgdmFsdWUgXCJmb29cIiBkaWRuJ3Qgd29ya1xuIjsKKwkJcmV0dXJuIEVYSVRfRkFJTFVSRTsKKwl9CisKKwlpZiAoc3RydmFsLnJlc2V0KCIiKSAhPSAiIiB8fCBzdHJ2YWwuZ2V0KCkgIT0gIiIpIHsKKwkJY2VyciA8PCAicmVzZXQoKSBvZiBjYWNoZWQgdmFsdWUgXCJcIiBkaWRuJ3Qgd29ya1xuIjsKKwkJcmV0dXJuIEVYSVRfRkFJTFVSRTsKKwl9CisKKwlyZXR1cm4gRVhJVF9TVUNDRVNTOworfQorCit9OworCitpbnQgbWFpbigpCit7CisJdHJ5IHsKKwkJY2hlY2tfY2FjaGVkKCk7CisJfQorCWNhdGNoICguLi4pIHsKKwkJY2VyciA8PCAidW5rbm93biBleGNlcHRpb25cbiI7CisJCXJldHVybiBFWElUX0ZBSUxVUkU7CisJfQorCisJcmV0dXJuIEVYSVRfU1VDQ0VTUzsKK30KZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2xpYnV0aWwrKy90ZXN0cy9jb21tYV9saXN0X3Rlc3RzLmNwcCBiL29wcm9maWxlLTAuOS43L2xpYnV0aWwrKy90ZXN0cy9jb21tYV9saXN0X3Rlc3RzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzBmZWVmCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvbGlidXRpbCsrL3Rlc3RzL2NvbW1hX2xpc3RfdGVzdHMuY3BwCkBAIC0wLDAgKzEsNzAgQEAKKy8qKgorICogQGZpbGUgY29tbWFfbGlzdF90ZXN0cy5jcHAKKyAqCisgKiBAcmVtYXJrIENvcHlyaWdodCAyMDAzIE9Qcm9maWxlIGF1dGhvcnMKKyAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCisgKgorICogQGF1dGhvciBKb2huIExldm9uCisgKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKKyAqLworCisjaW5jbHVkZSA8c3RkbGliLmg+CisKKyNpbmNsdWRlIDxpb3N0cmVhbT4KKworI2luY2x1ZGUgImNvbW1hX2xpc3QuaCIKKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKworI2RlZmluZSBjaGVjayhjbGlzdCwgdmFsLCByZXN1bHQpIFwKKwlpZiAoY2xpc3QubWF0Y2godmFsKSAhPSByZXN1bHQpIHsgXAorCQljZXJyIDw8ICJcIiIgPDwgI3ZhbCA8PCAiXCIgbWF0Y2hlZCB3aXRoICIgI2NsaXN0IFwKKwkJICAgICA8PCAiIGRpZCBub3QgcmV0dXJuICIgI3Jlc3VsdCA8PCBlbmRsOyBcCisJCWV4aXQoRVhJVF9GQUlMVVJFKTsgXAorCX0KKworaW50IG1haW4oKQoreworCWNvbW1hX2xpc3Q8aW50PiBjMTsKKworCWNoZWNrKGMxLCAxLCB0cnVlKTsKKworCWMxLnNldCgiMiIpOworCisJY2hlY2soYzEsIDIsIHRydWUpOworCWNoZWNrKGMxLCAzLCBmYWxzZSk7CisKKwljMS5zZXQoIjMiKTsKKworCWNoZWNrKGMxLCAyLCBmYWxzZSk7CisJY2hlY2soYzEsIDMsIHRydWUpOworCisJYzEuc2V0KCIyLDMiKTsKKworCWNoZWNrKGMxLCAyLCB0cnVlKTsKKwljaGVjayhjMSwgMywgdHJ1ZSk7CisJY2hlY2soYzEsIDQsIGZhbHNlKTsKKworCWMxLnNldCgiYWxsIik7CisKKwljaGVjayhjMSwgMiwgdHJ1ZSk7CisJY2hlY2soYzEsIDQsIHRydWUpOworCWNoZWNrKGMxLCA1LCB0cnVlKTsKKworCWNvbW1hX2xpc3Q8aW50PiBjMjsKKworCWMyLnNldCgiNixhbGwiKTsKKworCWNoZWNrKGMyLCA0LCB0cnVlKTsKKwljaGVjayhjMiwgMCwgdHJ1ZSk7CisKKwljMi5zZXQoImFsbCw2Iik7CisKKwljaGVjayhjMiwgNCwgdHJ1ZSk7CisJY2hlY2soYzIsIDAsIHRydWUpOworCisJYzIuc2V0KCIxMCIpOworCWNoZWNrKGMyLCAxMCwgdHJ1ZSk7CisJY2hlY2soYzIsIDExLCBmYWxzZSk7CisJcmV0dXJuIEVYSVRfU1VDQ0VTUzsKK30KZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2xpYnV0aWwrKy90ZXN0cy9maWxlX21hbmlwX3Rlc3RzLmNwcCBiL29wcm9maWxlLTAuOS43L2xpYnV0aWwrKy90ZXN0cy9maWxlX21hbmlwX3Rlc3RzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZmUxNjFiCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvbGlidXRpbCsrL3Rlc3RzL2ZpbGVfbWFuaXBfdGVzdHMuY3BwCkBAIC0wLDAgKzEsMjQxIEBACisvKioKKyAqIEBmaWxlIGZpbGVfbWFuaXBfdGVzdHMuY3BwCisgKgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMyBPUHJvZmlsZSBhdXRob3JzCisgKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORworICoKKyAqIEBhdXRob3IgSm9obiBMZXZvbgorICogQGF1dGhvciBQaGlsaXBwZSBFbGllCisgKi8KKworI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPGlvc3RyZWFtPgorI2luY2x1ZGUgPGxpc3Q+CisKKyNpbmNsdWRlICJmaWxlX21hbmlwLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBJbnB1dCwgdHlwZW5hbWUgT3V0cHV0Pgorc3RydWN0IGlucHV0X291dHB1dCB7CisJSW5wdXQgaW5wdXQ7CisJT3V0cHV0IG91dHB1dDsKK307CisKKwordGVtcGxhdGUgPHR5cGVuYW1lIElucHV0LCB0eXBlbmFtZSBPdXRwdXQsIHR5cGVuYW1lIFJlc3VsdD4KK3N0YXRpYyB2b2lkIGNoZWNrX3Jlc3VsdChjaGFyIGNvbnN0ICogZmN0X25hbWUsIElucHV0IGNvbnN0ICYgaW5wdXQsCisJCSAgT3V0cHV0IGNvbnN0ICYgb3V0cHV0LCBSZXN1bHQgY29uc3QgJiByZXN1bHQpCit7CisJaWYgKHJlc3VsdCAhPSBvdXRwdXQpIHsKKwkJY2VyciA8PCBmY3RfbmFtZSA8PCAiICIKKwkJICAgICA8PCAiZm9yOlxuXCIiIDw8IGlucHV0IDw8ICJcIlxuIgorCQkgICAgIDw8ICJleHBlY3Q6XG5cIiIgPDwgb3V0cHV0IDw8ICJcIlxuIgorCQkgICAgIDw8ICJmb3VuZDpcblwiIiA8PCByZXN1bHQgPDwgIlwiXG4iOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgSW5wdXQsIHR5cGVuYW1lIE91dHB1dCwgdHlwZW5hbWUgUmVzdWx0Pgorc3RhdGljIHZvaWQgY2hlY2tfcmVzdWx0KGNoYXIgY29uc3QgKiBmY3RfbmFtZSwgSW5wdXQgY29uc3QgJiBpbnB1dDEsCisJSW5wdXQgaW5wdXQyLCBPdXRwdXQgY29uc3QgJiBvdXRwdXQsIFJlc3VsdCBjb25zdCAmIHJlc3VsdCkKK3sKKwlpZiAocmVzdWx0ICE9IG91dHB1dCkgeworCQljZXJyIDw8IGZjdF9uYW1lIDw8ICI6IFxuIgorCQkgICAgIDw8ICJmb3I6XG5cIiIgPDwgaW5wdXQxIDw8ICJcIlxuIgorCQkgICAgIDw8ICJcIiIgPDwgaW5wdXQyIDw8ICJcIlxuIgorCQkgICAgIDw8ICJleHBlY3Q6XG5cIiIgPDwgb3V0cHV0IDw8ICJcIlxuIgorCQkgICAgIDw8ICJmb3VuZDpcblwiIiA8PCByZXN1bHQgPDwgIlwiXG4iOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorfQorCisKK3N0YXRpYyBpbnB1dF9vdXRwdXQ8Y2hhciBjb25zdCAqLCBjaGFyIGNvbnN0ICo+IGV4cGVjdF9kaXJuYW1lW10gPQoreworCXsgIi8iLCAiLyIgfSwKKwl7ICIvLy8vLy8iLCAiLyIgfSwKKwl7ICIvdXNyIiwgIi8iIH0sCisJeyAiLy8vdXNyIiwgIi8iIH0sCisJLy8gc3VwcmlzaW5nIGJ1dCBjb25mb3JtIHRvIGRpcm5hbWUoMSkKKwl7ICIvLy91c3IvZGlyIiwgIi8vL3VzciIgfSwKKwl7ICJ1c3IvZGlyIiwgInVzciIgfSwKKwl7ICJ1c3IiLCAiLiIgfSwKKwl7ICJuIiwgIi4iIH0sCisJeyAiLi4vLi4iLCAiLi4iIH0sCisJeyAiLy4uLy4uIiwgIi8uLiIgfSwKKwl7ICIuLy4uIiwgIi4iIH0sCisJeyAiLi8uIiwgIi4iIH0sCisJeyAiLi4iLCAiLiIgfSwKKwl7ICIuIiwgIi4iIH0sCisJeyAiIiwgIi4iIH0sCisJeyAwLCAwIH0KK307CisKK3N0YXRpYyB2b2lkIGRpcm5hbWVfdGVzdHMoKQoreworCWlucHV0X291dHB1dDxjaGFyIGNvbnN0ICosIGNoYXIgY29uc3QgKj4gY29uc3QgKiBjdXI7CisJZm9yIChjdXIgPSBleHBlY3RfZGlybmFtZTsgY3VyLT5pbnB1dDsgKytjdXIpIHsKKwkJc3RyaW5nIHJlc3VsdCA9IG9wX2Rpcm5hbWUoY3VyLT5pbnB1dCk7CisJCWNoZWNrX3Jlc3VsdCgiZGlybmFtZSIsIGN1ci0+aW5wdXQsIGN1ci0+b3V0cHV0LCByZXN1bHQpOworCX0KK30KKworCitzdGF0aWMgaW5wdXRfb3V0cHV0PGNoYXIgY29uc3QgKiwgY2hhciBjb25zdCo+IGV4cGVjdF9iYXNlbmFtZVtdID0KK3sKKwl7ICIvIiwgIi8iIH0sCisJeyAiLy8vLy8vIiwgIi8iIH0sCisJeyAiL3VzciIsICJ1c3IiIH0sCisJeyAiLy8vdXNyIiwgInVzciIgfSwKKwl7ICIvLy91c3IvZGlyIiwgImRpciIgfSwKKwl7ICIvLy91c3IvL2RpciIsICJkaXIiIH0sCisJeyAidXNyL2RpciIsICJkaXIiIH0sCisJeyAidXNyIiwgInVzciIgfSwKKwl7ICIuLi8uLiIsICIuLiIgfSwKKwl7ICIvLi4vLi4iLCAiLi4iIH0sCisJeyAiLi8uLiIsICIuLiIgfSwKKwl7ICIuLy4iLCAiLiIgfSwKKwl7ICIuIiwgIi4iIH0sCisJeyAwLCAwIH0KK307CisKK3N0YXRpYyB2b2lkIGJhc2VuYW1lX3Rlc3RzKCkKK3sKKwlpbnB1dF9vdXRwdXQ8Y2hhciBjb25zdCAqLCBjaGFyIGNvbnN0ICo+IGNvbnN0ICogY3VyOworCWZvciAoY3VyID0gZXhwZWN0X2Jhc2VuYW1lOyBjdXItPmlucHV0OyArK2N1cikgeworCQlzdHJpbmcgcmVzdWx0ID0gb3BfYmFzZW5hbWUoY3VyLT5pbnB1dCk7CisJCWNoZWNrX3Jlc3VsdCgiYmFzZW5hbWUiLCBjdXItPmlucHV0LCBjdXItPm91dHB1dCwgcmVzdWx0KTsKKwl9Cit9CisKKworc3RhdGljIGlucHV0X291dHB1dDxjaGFyIGNvbnN0ICosIGJvb2w+IGV4cGVjdF9pc19kaXJlY3RvcnlbXSA9Cit7CisJeyAiLiIsIHRydWUgfSwKKwl7ICIvLiIsIHRydWUgfSwKKwl7ICIuLyIsIHRydWUgfSwKKwl7ICIvIiwgdHJ1ZSB9LAorCXsgIi4uLyIsIHRydWUgfSwKKwl7ICIuLi8uIiwgdHJ1ZSB9LAorCXsgIm5vbl9leGlzdGluZ19kaXIiLCBmYWxzZSB9LAorCXsgMCwgMCB9Cit9OworCitzdGF0aWMgdm9pZCBpc19kaXJlY3RvcnlfdGVzdHMoKQoreworCWlucHV0X291dHB1dDxjaGFyIGNvbnN0ICosIGJvb2w+IGNvbnN0ICogY3VyOworCWZvciAoY3VyID0gZXhwZWN0X2lzX2RpcmVjdG9yeTsgY3VyLT5pbnB1dDsgKytjdXIpIHsKKwkJYm9vbCByZXN1bHQgPSBpc19kaXJlY3RvcnkoY3VyLT5pbnB1dCk7CisJCWNoZWNrX3Jlc3VsdCgiaXNfZGlyZWN0b3J5IiwgY3VyLT5pbnB1dCwgY3VyLT5vdXRwdXQsIHJlc3VsdCk7CisJfQorfQorCisKK3N0YXRpYyBpbnB1dF9vdXRwdXQ8cGFpcjxzdHJpbmcsIHN0cmluZz4sIGJvb2w+CitleHBlY3RfaXNfZmlsZXNfaWRlbnRpY2FsW10gPSB7CisjZGVmaW5lIE1BS0VfUEFJUihhLCBiKSBtYWtlX3BhaXIoc3RyaW5nKGEpLCBzdHJpbmcoYikpCisJeyBNQUtFX1BBSVIoX19GSUxFX18sIF9fRklMRV9fKSwgdHJ1ZSB9LAorCXsgTUFLRV9QQUlSKF9fRklMRV9fLCAibm90X2V4aXN0aW5nIiksIGZhbHNlIH0sCisJeyBNQUtFX1BBSVIoIm5vdF9leGlzaXRpbmciLCBfX0ZJTEVfXyksIGZhbHNlIH0sCisJeyBNQUtFX1BBSVIoIm5vdF9leGlzaXRpbmciLCAibm90X2V4aXN0aW5nIiksIGZhbHNlIH0sCisJeyBNQUtFX1BBSVIoIiIsICIiKSwgZmFsc2UgfQorI3VuZGVmIE1BS0VfUEFJUgorfTsKKwordm9pZCBpc19maWxlc19pZGVudGljYWxfdGVzdHMoY2hhciBjb25zdCAqIHByb2dfbmFtZSkKK3sKKwljaGVja19yZXN1bHQoImlzX2ZpbGVzX2lkZW50aWNhbCIsIHByb2dfbmFtZSwgcHJvZ19uYW1lLAorCSAgICAgICAgICAgICBpc19maWxlc19pZGVudGljYWwocHJvZ19uYW1lLCBwcm9nX25hbWUpLCB0cnVlKTsKKworCWlucHV0X291dHB1dDxwYWlyPHN0cmluZywgc3RyaW5nPiwgYm9vbD4gY29uc3QgKiBjdXI7CisJZm9yIChjdXIgPSBleHBlY3RfaXNfZmlsZXNfaWRlbnRpY2FsOyAhY3VyLT5pbnB1dC5maXJzdC5lbXB0eSgpOyArK2N1cikgeworCQlib29sIHJlc3VsdCA9IGlzX2ZpbGVzX2lkZW50aWNhbChjdXItPmlucHV0LmZpcnN0LAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXItPmlucHV0LnNlY29uZCk7CisJCWNoZWNrX3Jlc3VsdCgiaXNfZmlsZXNfaWRlbnRpY2FsIiwgY3VyLT5pbnB1dC5maXJzdCwKKwkJICAgICAgICAgICAgIGN1ci0+aW5wdXQuc2Vjb25kLCBjdXItPm91dHB1dCwgcmVzdWx0KTsKKwl9Cit9CisKKworc3RhdGljIGlucHV0X291dHB1dDxjaGFyIGNvbnN0ICosIGJvb2w+IGV4cGVjdF9vcF9maWxlX3JlYWRhYmxlW10gPQoreworCXsgX19GSUxFX18sIHRydWUgfSwKKwl7ICIuLyIgX19GSUxFX18sIHRydWUgfSwKKwl7ICIuIiwgZmFsc2UgfSwKKwl7ICIvLiIsIGZhbHNlIH0sCisJeyAiLi8iLCBmYWxzZSB9LAorCXsgIi8iLCBmYWxzZSB9LAorCXsgIi4uLyIsIGZhbHNlIH0sCisJeyAiLi4vLiIsIGZhbHNlIH0sCisJeyAibm9uX2V4aXN0aW5nX2ZpbGUiLCBmYWxzZSB9LAorCXsgMCwgMCB9Cit9OworCitzdGF0aWMgdm9pZCBvcF9maWxlX3JlYWRhYmxlX3Rlc3RzKCkKK3sKKwlpbnB1dF9vdXRwdXQ8Y2hhciBjb25zdCAqLCBib29sPiBjb25zdCAqIGN1cjsKKwlmb3IgKGN1ciA9IGV4cGVjdF9vcF9maWxlX3JlYWRhYmxlOyBjdXItPmlucHV0OyArK2N1cikgeworCQlib29sIHJlc3VsdCA9IG9wX2ZpbGVfcmVhZGFibGUoY3VyLT5pbnB1dCk7CisJCWNoZWNrX3Jlc3VsdCgib3BfZmlsZV9yZWFkYWJsZSIsIGN1ci0+aW5wdXQsIGN1ci0+b3V0cHV0LCByZXN1bHQpOworCX0KK30KKworCitzdGF0aWMgaW5wdXRfb3V0cHV0PHN0cmluZywgc3RyaW5nPiBleHBlY3RfcmVhbHBhdGhbXSA9Cit7CisJLy8gcmVhbHBhdGgoKSBmaWxlIGFyZ3VtZW50IG11c3QgZXhpc3RzLgorCXsgImZpbGVfbWFuaXBfdGVzdHMubyIsICJmaWxlX21hbmlwX3Rlc3RzLm8iIH0sCisJeyAiLi4vdGVzdHMvIiAiZmlsZV9tYW5pcF90ZXN0cy5vIiwgImZpbGVfbWFuaXBfdGVzdHMubyIgfSwKKwl7ICIuLy8uLy8iICJmaWxlX21hbmlwX3Rlc3RzLm8iLCAiZmlsZV9tYW5pcF90ZXN0cy5vIiB9LAorCS8vIFBPU0lYIG5hbWVzcGFjZXMgaWdub3JlZCBieSByZWFscGF0aCgzKQorCXsgIi8vIiwgIi8iIH0sCisJeyAiLy91c3IiLCAiL3VzciIgfSwKKwl7ICIvLy8iLCAiLyIgfSwKKwl7ICIiLCAiIiB9Cit9OworCisKKy8vIEZJWE1FOiB1c2VmdWwgdG8gdGVzdCBzeW1saW5rcyB0b28KK3N0YXRpYyB2b2lkIHJlYWxwYXRoX3Rlc3RzKCkKK3sKKwlpbnB1dF9vdXRwdXQ8c3RyaW5nLCBzdHJpbmc+IGNvbnN0ICogY3VyOworCWZvciAoY3VyID0gZXhwZWN0X3JlYWxwYXRoOyAhY3VyLT5pbnB1dC5lbXB0eSgpOyArK2N1cikgeworCQlzdHJpbmcgcmVzdWx0ID0gb3BfcmVhbHBhdGgoY3VyLT5pbnB1dCk7CisJCXN0cmluZyBleHBlY3QgPSBjdXItPm91dHB1dDsKKwkJaWYgKGN1ci0+aW5wdXRbMF0gIT0gJy8nKQorCQkJZXhwZWN0ID0gU1JDRElSICsgZXhwZWN0OworCQljaGVja19yZXN1bHQoIm9wX3JlYWxwYXRoIiwgY3VyLT5pbnB1dCwKKwkJICAgICAgICAgICAgZXhwZWN0LCByZXN1bHQpOworCX0KK30KKworCit2b2lkIGNyZWF0ZV9maWxlX2xpc3RfdGVzdHMoKQoreworCWxpc3Q8c3RyaW5nPiByZXN1bHQ7CisJaWYgKCFjcmVhdGVfZmlsZV9saXN0KHJlc3VsdCwgIi4iKSkgeworCQljZXJyIDw8ICJjcmVhdGVfZmlsZV9saXN0KCkgZmFpbFxuIjsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKwlpZiAocmVzdWx0LmVtcHR5KCkpIHsKKwkJY2VyciA8PCAiY3JlYXRlX2ZpbGVfbGlzdCgpOyBlbXB0eSByZXN1bHRcbiI7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9Cit9CisKKworaW50IG1haW4oaW50LCBjaGFyICogYXJndltdKQoreworCWRpcm5hbWVfdGVzdHMoKTsKKwliYXNlbmFtZV90ZXN0cygpOworCWlzX2RpcmVjdG9yeV90ZXN0cygpOworCWlzX2ZpbGVzX2lkZW50aWNhbF90ZXN0cyhhcmd2WzBdKTsKKwlvcF9maWxlX3JlYWRhYmxlX3Rlc3RzKCk7CisJcmVhbHBhdGhfdGVzdHMoKTsKKwljcmVhdGVfZmlsZV9saXN0X3Rlc3RzKCk7CisJcmV0dXJuIEVYSVRfU1VDQ0VTUzsKK30KZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2xpYnV0aWwrKy90ZXN0cy9nbG9iX2ZpbHRlcl90ZXN0cy5jcHAgYi9vcHJvZmlsZS0wLjkuNy9saWJ1dGlsKysvdGVzdHMvZ2xvYl9maWx0ZXJfdGVzdHMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4OGEzZWQKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9saWJ1dGlsKysvdGVzdHMvZ2xvYl9maWx0ZXJfdGVzdHMuY3BwCkBAIC0wLDAgKzEsNTMgQEAKKy8qKgorICogQGZpbGUgZ2xvYl9maWx0ZXJfdGVzdHMuY3BwCisgKgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMyBPUHJvZmlsZSBhdXRob3JzCisgKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORworICoKKyAqIEBhdXRob3IgSm9obiBMZXZvbgorICogQGF1dGhvciBQaGlsaXBwZSBFbGllCisgKi8KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisjaW5jbHVkZSA8aW9zdHJlYW0+CisKKyNpbmNsdWRlICJnbG9iX2ZpbHRlci5oIgorCit1c2luZyBuYW1lc3BhY2Ugc3RkOworCisjZGVmaW5lIGNoZWNrKGZpbHRlciwgc3RyLCByZXN1bHQpIFwKKwlpZiAoZmlsdGVyLm1hdGNoKHN0cikgIT0gcmVzdWx0KSB7IFwKKwkJY2VyciA8PCAiXCIiIDw8IHN0ciA8PCAiXCIgbWF0Y2hlZCB3aXRoICIgI2ZpbHRlciBcCisJCSAgICAgPDwgIiBkaWQgbm90IHJldHVybiAiICNyZXN1bHQgPDwgZW5kbDsgXAorCQlleGl0KEVYSVRfRkFJTFVSRSk7IFwKKwl9CisKK2ludCBtYWluKCkKK3sKKwlnbG9iX2ZpbHRlciBmMSgiZm9vLCpiYXIiLCAiZm9vYmFyIik7CisJY2hlY2soZjEsICJmb28vYmFyZm9vYmFyIiwgdHJ1ZSk7CisJY2hlY2soZjEsICJmb28vYmFyIiwgdHJ1ZSk7CisJY2hlY2soZjEsICIvZm9vL2Zvb2Jhci9mb28iLCBmYWxzZSk7CisJY2hlY2soZjEsICJmb29vYmFyMSIsIGZhbHNlKTsKKwljaGVjayhmMSwgImZvbzEiLCBmYWxzZSk7CisJY2hlY2soZjEsICJmb29iYXIiLCBmYWxzZSk7CisJY2hlY2soZjEsICJiYXIxIiwgZmFsc2UpOworCisJZ2xvYl9maWx0ZXIgZjIoImZvbyIsICIiKTsKKwljaGVjayhmMiwgImZvbyIsIHRydWUpOworCWNoZWNrKGYyLCAiZm9vMSIsIGZhbHNlKTsKKwljaGVjayhmMiwgImZvby9mb28iLCBmYWxzZSk7CisKKwlnbG9iX2ZpbHRlciBmMygiIiwgImZvbyIpOworCWNoZWNrKGYzLCAiZm9vIiwgZmFsc2UpOworCWNoZWNrKGYzLCAiZm9vMSIsIHRydWUpOworCWNoZWNrKGYzLCAiZm9vL2ZvbyIsIHRydWUpOworCisJZ2xvYl9maWx0ZXIgZjQoImZvbyIsICJmb28iKTsKKwljaGVjayhmNCwgImZvbyIsIGZhbHNlKTsKKwljaGVjayhmNCwgImZvbzEiLCBmYWxzZSk7CisJY2hlY2soZjQsICJmb28vZm9vIiwgZmFsc2UpOworCisJcmV0dXJuIEVYSVRfU1VDQ0VTUzsKK30KZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2xpYnV0aWwrKy90ZXN0cy9wYXRoX2ZpbHRlcl90ZXN0cy5jcHAgYi9vcHJvZmlsZS0wLjkuNy9saWJ1dGlsKysvdGVzdHMvcGF0aF9maWx0ZXJfdGVzdHMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2NjRkMGYKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9saWJ1dGlsKysvdGVzdHMvcGF0aF9maWx0ZXJfdGVzdHMuY3BwCkBAIC0wLDAgKzEsNzggQEAKKy8qKgorICogQGZpbGUgcGF0aF9maWx0ZXJfdGVzdHMuY3BwCisgKgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMyBPUHJvZmlsZSBhdXRob3JzCisgKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORworICoKKyAqIEBhdXRob3IgSm9obiBMZXZvbgorICogQGF1dGhvciBQaGlsaXBwZSBFbGllCisgKi8KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisjaW5jbHVkZSA8aW9zdHJlYW0+CisKKyNpbmNsdWRlICJwYXRoX2ZpbHRlci5oIgorCit1c2luZyBuYW1lc3BhY2Ugc3RkOworCisjZGVmaW5lIGNoZWNrKGZpbHRlciwgc3RyLCByZXN1bHQpIFwKKwlpZiAoZmlsdGVyLm1hdGNoKHN0cikgIT0gcmVzdWx0KSB7IFwKKwkJY2VyciA8PCAiXCIiIDw8IHN0ciA8PCAiXCIgbWF0Y2hlZCB3aXRoICIgI2ZpbHRlciBcCisJCSAgICAgPDwgIiBkaWQgbm90IHJldHVybiAiICNyZXN1bHQgPDwgZW5kbDsgXAorCQlleGl0KEVYSVRfRkFJTFVSRSk7IFwKKwl9CisKK2ludCBtYWluKCkKK3sKKwlwYXRoX2ZpbHRlciBmMSgiZm9vLCpiYXIiLCAiZm9vYmFyIik7CisJY2hlY2soZjEsICJmb28vYmFyZm9vYmFyIiwgdHJ1ZSk7CisJY2hlY2soZjEsICJmb28vYmFyIiwgdHJ1ZSk7CisJY2hlY2soZjEsICIvZm9vL2Zvb2Jhci9mb28iLCBmYWxzZSk7CisJY2hlY2soZjEsICJmb29vYmFyMSIsIGZhbHNlKTsKKwljaGVjayhmMSwgImZvbzEiLCBmYWxzZSk7CisJY2hlY2soZjEsICJmb29iYXIiLCBmYWxzZSk7CisJY2hlY2soZjEsICJiYXIxIiwgZmFsc2UpOworCisJcGF0aF9maWx0ZXIgZjIoImZvbyIsICIiKTsKKwljaGVjayhmMiwgImZvbyIsIHRydWUpOworCWNoZWNrKGYyLCAiZm9vMSIsIGZhbHNlKTsKKwljaGVjayhmMiwgImZvby9mb28iLCB0cnVlKTsKKworCXBhdGhfZmlsdGVyIGYzKCIiLCAiZm9vIik7CisJY2hlY2soZjMsICJmb28iLCBmYWxzZSk7CisJY2hlY2soZjMsICJmb28xIiwgdHJ1ZSk7CisJY2hlY2soZjMsICJmb28vZm9vIiwgZmFsc2UpOworCisJcGF0aF9maWx0ZXIgZjQoImZvbyIsICJmb28iKTsKKwljaGVjayhmNCwgImZvbyIsIGZhbHNlKTsKKwljaGVjayhmNCwgImZvbzEiLCBmYWxzZSk7CisJY2hlY2soZjQsICJmb28vZm9vIiwgZmFsc2UpOworCisJcGF0aF9maWx0ZXIgZjUoIipmb28qIiwgIipiYXIqIik7CisJY2hlY2soZjUsICJmb28iLCB0cnVlKTsKKwljaGVjayhmNSwgImJhciIsIGZhbHNlKTsKKwljaGVjayhmNSwgImZvb2JhciIsIGZhbHNlKTsKKwljaGVjayhmNSwgImJhcmZvbyIsIGZhbHNlKTsKKwljaGVjayhmNSwgImZvby9iYXIiLCBmYWxzZSk7CisKKwlwYXRoX2ZpbHRlciBmNigiIGZvbyxiYXIiLCAiYmFyICIpOworCWNoZWNrKGY2LCAiZm9vIiwgZmFsc2UpOworCWNoZWNrKGY2LCAiZm9vICIsIGZhbHNlKTsKKwljaGVjayhmNiwgIiBmb28iLCB0cnVlKTsKKwljaGVjayhmNiwgImJhciIsIHRydWUpOworCWNoZWNrKGY2LCAiYmFyICIsIGZhbHNlKTsKKwljaGVjayhmNiwgIiBiYXIiLCBmYWxzZSk7CisJY2hlY2soZjYsICJmb28gIiwgZmFsc2UpOworCWNoZWNrKGY2LCAiZm9vLyBiYXIiLCBmYWxzZSk7CisKKwlwYXRoX2ZpbHRlciBmNygiLiIsICIiKTsKKwljaGVjayhmNywgIi4iLCB0cnVlKTsKKwkvLyBhIGJpdCBzdXJwcmlzaW5nIGJ1dCByaWdodCBJTUhPLCBvdXIgaW1wbGVtZW50YXRpb24gdXNlIHN1Y2Nlc3NpdmUKKwkvLyBkaXJuYW1lKGlucHV0KSB0byBjaGVjayB2cyB0aGUgaW5jbHVkZWQgcGF0aCBhbmQKKwkvLyBkaXJuYW1lKCJmb28iKSA9PSAiLiIgc28gYWxsIHJlbGF0aXZlIHBhdGggaW5wdXQgbWF0Y2ggYSAiLiIKKwkvLyBpbmNsdWRlZCBmaWx0ZXIKKwljaGVjayhmNywgImZvbyIsIHRydWUpOworCisJcmV0dXJuIEVYSVRfU1VDQ0VTUzsKK30KZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2xpYnV0aWwrKy90ZXN0cy9zdHJpbmdfZmlsdGVyX3Rlc3RzLmNwcCBiL29wcm9maWxlLTAuOS43L2xpYnV0aWwrKy90ZXN0cy9zdHJpbmdfZmlsdGVyX3Rlc3RzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDA2MDM5Ci0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvbGlidXRpbCsrL3Rlc3RzL3N0cmluZ19maWx0ZXJfdGVzdHMuY3BwCkBAIC0wLDAgKzEsOTAgQEAKKy8qKgorICogQGZpbGUgc3RyaW5nX2ZpbHRlcl90ZXN0cy5jcHAKKyAqCisgKiBAcmVtYXJrIENvcHlyaWdodCAyMDAzIE9Qcm9maWxlIGF1dGhvcnMKKyAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCisgKgorICogQGF1dGhvciBKb2huIExldm9uCisgKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKKyAqLworCisjaW5jbHVkZSA8c3RkbGliLmg+CisKKyNpbmNsdWRlIDxpb3N0cmVhbT4KKworI2luY2x1ZGUgInN0cmluZ19maWx0ZXIuaCIKKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKworI2RlZmluZSBjaGVjayhmaWx0ZXIsIHN0ciwgcmVzdWx0KSBcCisJaWYgKGZpbHRlci5tYXRjaChzdHIpICE9IHJlc3VsdCkgeyBcCisJCWNlcnIgPDwgIlwiIiA8PCBzdHIgPDwgIlwiIG1hdGNoZWQgd2l0aCAiICNmaWx0ZXIgXAorCQkgICAgIDw8ICIgZGlkIG5vdCByZXR1cm4gIiAjcmVzdWx0IDw8IGVuZGw7IFwKKwkJZXhpdChFWElUX0ZBSUxVUkUpOyBcCisJfQorCitpbnQgbWFpbigpCit7CisJc3RyaW5nX2ZpbHRlciBmMTsKKwljaGVjayhmMSwgIiIsIHRydWUpOworCWNoZWNrKGYxLCAib2siLCB0cnVlKTsKKworCXN0cmluZ19maWx0ZXIgZjIoIm9rIiwgIiIpOworCWNoZWNrKGYyLCAib2siLCB0cnVlKTsKKwljaGVjayhmMiwgIm5vIiwgZmFsc2UpOworCisJc3RyaW5nX2ZpbHRlciBmMygiIiwgIm5vIik7CisJY2hlY2soZjMsICJvayIsIHRydWUpOworCWNoZWNrKGYzLCAibm8iLCBmYWxzZSk7CisKKwlzdHJpbmdfZmlsdGVyIGY0KCJvayxvazIsIiwgIiIpOworCWNoZWNrKGY0LCAib2siLCB0cnVlKTsKKwljaGVjayhmNCwgIm9rMiIsIHRydWUpOworCWNoZWNrKGY0LCAibm8iLCBmYWxzZSk7CisKKwlzdHJpbmdfZmlsdGVyIGY1KCJvayxvazIiLCAibm8sbm8yIik7CisJY2hlY2soZjUsICJvayIsIHRydWUpOworCWNoZWNrKGY1LCAib2syIiwgdHJ1ZSk7CisJY2hlY2soZjUsICJubyIsIGZhbHNlKTsKKwljaGVjayhmNSwgIm5vMiIsIGZhbHNlKTsKKworCXZlY3RvcjxzdHJpbmc+IHYxOworCXZlY3RvcjxzdHJpbmc+IHYyOworCisJc3RyaW5nX2ZpbHRlciBmNih2MSwgdjIpOworCWNoZWNrKGY2LCAiIiwgdHJ1ZSk7CisJY2hlY2soZjYsICJvayIsIHRydWUpOworCisJdjEucHVzaF9iYWNrKCJvayIpOworCXYxLnB1c2hfYmFjaygib2syIik7CisKKwlzdHJpbmdfZmlsdGVyIGY3KHYxLCB2Mik7CisJY2hlY2soZjcsICJvayIsIHRydWUpOworCWNoZWNrKGY3LCAib2syIiwgdHJ1ZSk7CisJY2hlY2soZjcsICJubyIsIGZhbHNlKTsKKworCXYxLmNsZWFyKCk7CisKKwl2Mi5wdXNoX2JhY2soIm5vIik7CisJdjIucHVzaF9iYWNrKCJubzIiKTsKKworCXN0cmluZ19maWx0ZXIgZjgodjEsIHYyKTsKKwljaGVjayhmOCwgIm9rIiwgdHJ1ZSk7CisJY2hlY2soZjgsICJubyIsIGZhbHNlKTsKKwljaGVjayhmOCwgIm5vIiwgZmFsc2UpOworCisJdjEucHVzaF9iYWNrKCJvayIpOworCXYxLnB1c2hfYmFjaygib2syIik7CisKKwlzdHJpbmdfZmlsdGVyIGY5KHYxLCB2Mik7CisJY2hlY2soZjksICJvayIsIHRydWUpOworCWNoZWNrKGY5LCAibm8yIiwgZmFsc2UpOworCisJc3RyaW5nX2ZpbHRlciBmMTAoIiBmb28gIiwgIiIpOworCWNoZWNrKGYxMCwgIiBmb28gIiwgdHJ1ZSk7CisJY2hlY2soZjEwLCAiIGZvbyIsIGZhbHNlKTsKKwljaGVjayhmMTAsICJmb28gIiwgZmFsc2UpOworCWNoZWNrKGYxMCwgImZvbyIsIGZhbHNlKTsKKworCXJldHVybiBFWElUX1NVQ0NFU1M7Cit9CmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9saWJ1dGlsKysvdGVzdHMvc3RyaW5nX21hbmlwX3Rlc3RzLmNwcCBiL29wcm9maWxlLTAuOS43L2xpYnV0aWwrKy90ZXN0cy9zdHJpbmdfbWFuaXBfdGVzdHMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjYjA3ZGYKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9saWJ1dGlsKysvdGVzdHMvc3RyaW5nX21hbmlwX3Rlc3RzLmNwcApAQCAtMCwwICsxLDMyNSBAQAorLyoqCisgKiBAZmlsZSBzdHJpbmdfbWFuaXBfdGVzdHMuY3BwCisgKgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMyBPUHJvZmlsZSBhdXRob3JzCisgKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORworICoKKyAqIEBhdXRob3IgSm9obiBMZXZvbgorICogQGF1dGhvciBQaGlsaXBwZSBFbGllCisgKi8KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPGl0ZXJhdG9yPgorI2luY2x1ZGUgPGlvc3RyZWFtPgorI2luY2x1ZGUgPHV0aWxpdHk+CisKKyNpbmNsdWRlICJzdHJpbmdfbWFuaXAuaCIKKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKwordGVtcGxhdGUgPHR5cGVuYW1lIElucHV0LCB0eXBlbmFtZSBPdXRwdXQ+CitzdHJ1Y3QgaW5wdXRfb3V0cHV0IHsKKwlJbnB1dCBpbnB1dDsKKwlPdXRwdXQgb3V0cHV0OworfTsKKworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgSW5wdXQsIHR5cGVuYW1lIE91dHB1dCwgdHlwZW5hbWUgUmVzdWx0Pgorc3RhdGljIHZvaWQgY2hlY2tfcmVzdWx0KGNoYXIgY29uc3QgKiBmY3RfbmFtZSwgSW5wdXQgY29uc3QgJiBpbnB1dCwKKwkJICBPdXRwdXQgY29uc3QgJiBvdXRwdXQsIFJlc3VsdCBjb25zdCAmIHJlc3VsdCkKK3sKKwlpZiAocmVzdWx0ICE9IG91dHB1dCkgeworCQljZXJyIDw8IGZjdF9uYW1lIDw8ICI6IFxuIgorCQkgICAgIDw8ICJmb3I6XG5cIiIgPDwgaW5wdXQgPDwgIlwiXG4iCisJCSAgICAgPDwgImV4cGVjdDpcblwiIiA8PCBvdXRwdXQgPDwgIlwiXG4iCisJCSAgICAgPDwgImZvdW5kOlxuXCIiIDw8IHJlc3VsdCA8PCAiXCJcbiI7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9Cit9CisKKworc3RhdGljIGlucHV0X291dHB1dDxjaGFyIGNvbnN0KiwgY2hhciBjb25zdCo+IGV4cGVjdF9lcmFzZVtdID0KK3sKKwl7ICIiLCAiIiB9LAorCXsgIjs7OyIsICIiIH0sCisJeyAiYWI7OztjZCIsICJjZCIgfSwKKwl7ICI7OztjZCIsICJjZCIgfSwKKwl7ICJhYjs7OyIsICIiIH0sCisJeyAwLCAwIH0KK307CisKK3N0YXRpYyB2b2lkIGVyYXNlX3RvX2xhc3Rfb2ZfdGVzdHMoKQoreworCWlucHV0X291dHB1dDxjaGFyIGNvbnN0ICosIGNoYXIgY29uc3QqPiBjb25zdCAqIGN1cjsKKwlmb3IgKGN1ciA9IGV4cGVjdF9lcmFzZTsgY3VyLT5pbnB1dDsgKytjdXIpIHsKKwkJc3RyaW5nIHJlc3VsdCA9IGVyYXNlX3RvX2xhc3Rfb2YoY3VyLT5pbnB1dCwgJzsnKTsKKwkJY2hlY2tfcmVzdWx0KCJlcmFzZV90b19sYXN0X29mKCkiLCBjdXItPmlucHV0LCBjdXItPm91dHB1dCwKKwkJCSAgICAgcmVzdWx0KTsKKwl9Cit9CisKKworc3RhdGljIGlucHV0X291dHB1dDxjaGFyIGNvbnN0ICosIHBhaXI8c3RyaW5nLCBzdHJpbmc+ID4gZXhwZWN0X3NwbGl0W10gPQoreworI2RlZmluZSBNQUtFX1BBSVIoYSwgYikgIG1ha2VfcGFpcihzdHJpbmcoYSksIHN0cmluZyhiKSkKKwl7ICJhYjtjZCIsIE1BS0VfUEFJUigiYWIiLCAiY2QiKSB9LAorCXsgIjtjZCIsICAgTUFLRV9QQUlSKCIiLCAgICJjZCIpIH0sCisJeyAiYWI7IiwgICBNQUtFX1BBSVIoImFiIiwgIiIpICAgfSwKKwl7ICJiO2QiLCAgIE1BS0VfUEFJUigiYiIsICAiZCIpICB9LAorCXsgIjtkIiwgICAgTUFLRV9QQUlSKCIiLCAgICJkIikgIH0sCisJeyAiYTsiLCAgICBNQUtFX1BBSVIoImEiLCAgIiIpICAgfSwKKwl7ICI7IiwgICAgIE1BS0VfUEFJUigiIiwgICAiIikgICB9LAorCXsgIiIsICAgICAgTUFLRV9QQUlSKCIiLCAgICIiKSAgIH0sCisJeyAwLCAgICAgICBNQUtFX1BBSVIoIiIsICAgIiIpICAgfQorI3VuZGVmIE1BS0VfUEFJUgorfTsKKworc3RhdGljIHZvaWQgc3BsaXRfdGVzdHMoKQoreworCWlucHV0X291dHB1dDxjaGFyIGNvbnN0ICosIHBhaXI8c3RyaW5nLCBzdHJpbmc+ID4gY29uc3QgKiBjdXI7CisJZm9yIChjdXIgPSBleHBlY3Rfc3BsaXQ7IGN1ci0+aW5wdXQ7ICsrY3VyKSB7CisJCXN0cmluZyB0ZW1wID0gY3VyLT5pbnB1dDsKKwkJc3RyaW5nIHJlc3VsdCA9IHNwbGl0KHRlbXAsICc7Jyk7CisJCWNoZWNrX3Jlc3VsdCgic3BsaXQoKSIsIGN1ci0+aW5wdXQsIGN1ci0+b3V0cHV0LmZpcnN0LCB0ZW1wKTsKKwkJY2hlY2tfcmVzdWx0KCJzcGxpdCgpIiwgY3VyLT5pbnB1dCwgY3VyLT5vdXRwdXQuc2Vjb25kLCByZXN1bHQpOworCX0KK30KKworc3RhdGljIGlucHV0X291dHB1dDxjaGFyIGNvbnN0ICosIHBhaXI8c3RyaW5nLCBib29sPiA+IGV4cGVjdF9pc19wcmVmaXhbXSA9Cit7CisjZGVmaW5lIE1BS0VfUEFJUihhLCBiKSAgbWFrZV9wYWlyKHN0cmluZyhhKSwgYikKKwl7ICJhYmNkIiwgTUFLRV9QQUlSKCJhYmMiLCB0cnVlKSB9LAorCXsgImFiY2QiLCBNQUtFX1BBSVIoImFjIiwgZmFsc2UpIH0sCisJeyAiYmFiY2QiLCBNQUtFX1BBSVIoImFiYyIsIGZhbHNlKSB9LAorCS8vIHRoZXNlIGludm9rZSB1bmRlZmluZWQgYmVoYXZpb3IgZnJvbSBpc19wcmVmaXgsIHdlIGtlZXAgdGhlbQorCS8vIGZvciB0aGUgcmVjb3JkLgorLy8JeyAiYmFiY2QiLCBNQUtFX1BBSVIoIiIsIGZhbHNlKSB9LAorLy8JeyAiIiwgTUFLRV9QQUlSKCIiLCBmYWxzZSkgfSwKKwl7IDAsIE1BS0VfUEFJUigiIiwgdHJ1ZSkgfQorI3VuZGVmIE1BS0VfUEFJUgorfTsKKworc3RhdGljIHZvaWQgaXNfcHJlZml4X3Rlc3RzKCkKK3sKKwlpbnB1dF9vdXRwdXQ8Y2hhciBjb25zdCAqLCBwYWlyPHN0cmluZywgYm9vbD4gPiBjb25zdCAqIGN1cjsKKwlmb3IgKGN1ciA9IGV4cGVjdF9pc19wcmVmaXg7IGN1ci0+aW5wdXQ7ICsrY3VyKSB7CisJCWJvb2wgcmVzdWx0ID0gaXNfcHJlZml4KGN1ci0+aW5wdXQsIGN1ci0+b3V0cHV0LmZpcnN0KTsKKwkJaWYgKHJlc3VsdCAhPSBjdXItPm91dHB1dC5zZWNvbmQpIHsKKwkJCWNlcnIgPDwgImlzX3ByZWZpeCgiIDw8IGN1ci0+aW5wdXQgPDwgIiwgIgorCQkJICAgICA8PCBjdXItPm91dHB1dC5maXJzdCA8PCAiKSAiCisJCQkgICAgIDw8ICJyZXR1cm4gIiA8PCByZXN1bHQgPDwgZW5kbDsKKwkJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwkJfQorCX0KK30KKworCitzdGF0aWMgY29uc3Qgc2l6ZV90IG1heF90b2tlbiA9IDg7CitzdGF0aWMgaW5wdXRfb3V0cHV0PGNoYXIgY29uc3QgKiwgY2hhciBjb25zdCAqW21heF90b2tlbl0+IGV4cGVjdF9zZXBhcmF0ZV90b2tlbltdID0KK3sKKwl7ICJhYSIsIHsgImFhIiB9IH0sCisJeyAiYVxcYyIsIHsgImFcXGMiIH0gfSwKKwl7ICJhXFxcXGMiLCB7ICJhXFxcXGMiIH0gfSwKKwl7ICJhXFxcXGNcXCIsIHsgImFcXFxcY1xcIiB9IH0sCisJeyAiYWI7Y2Q7ZWY7Z2giLCB7ICJhYiIsICJjZCIsICJlZiIsICJnaCIgfSB9LAorCXsgImFiXFw7Y2QiLCB7ICJhYjtjZCIgfSB9LAorCXsgImE7YSIsIHsgImEiLCAiYSIgfSB9LAorCXsgIjthIiwgeyAiIiwgImEiIH0gfSwKKwl7ICI7IiwgeyAiIiwgIiIgfSB9LAorCXsgIjs7IiwgeyAiIiwgIiIsICIiIH0gfSwKKwl7IDAsIHsgMCwgfSB9Cit9OworCisKK3N0YXRpYyB2b2lkIHNlcGFyYXRlX3Rva2VuX3Rlc3RzKCkKK3sKKwlpbnB1dF9vdXRwdXQ8Y2hhciBjb25zdCAqLCBjaGFyIGNvbnN0ICpbbWF4X3Rva2VuXT4gY29uc3QgKiBjdXI7CisJZm9yIChjdXIgPSBleHBlY3Rfc2VwYXJhdGVfdG9rZW47IGN1ci0+aW5wdXQ7ICsrY3VyKSB7CisJCXZlY3RvcjxzdHJpbmc+IHJlc3VsdCA9IHNlcGFyYXRlX3Rva2VuKGN1ci0+aW5wdXQsICc7Jyk7CisJCWlmIChyZXN1bHQuc2l6ZSgpID4gbWF4X3Rva2VuKSB7CisJCQljZXJyIDw8ICJzZXBhcmF0ZV90b2tlbigpOiB0b28gbWFueSB0b2tlblxuIiAKKwkJCSAgICAgPDwgImlucHV0OlxuIgorCQkJICAgICA8PCAnIicgPDwgY3VyLT5pbnB1dCA8PCAiXCJcbiIKKwkJCSAgICAgPDwgIm91dHB1dFxuIjsKKwkJCWNvcHkocmVzdWx0LmJlZ2luKCksIHJlc3VsdC5lbmQoKSwKKwkJCSAgICAgb3N0cmVhbV9pdGVyYXRvcjxzdHJpbmc+KGNlcnIsICJcbiIpKTsKKwkJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwkJfQorCQlmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlc3VsdC5zaXplKCk7ICsraSkgeworCQkJaWYgKHJlc3VsdFtpXSAhPSBjdXItPm91dHB1dFtpXSkgeworCQkJCWNlcnIgPDwgInNlcGFyYXRlX3Rva2VuKCk6XG4iIAorCQkJCSAgICAgPDwgImlucHV0OlxuIgorCQkJCSAgICAgPDwgY3VyLT5pbnB1dCA8PCBlbmRsOworCQkJCWNlcnIgPDwgImV4cGVjdDpcbiI7CisJCQkJZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYXhfdG9rZW47ICsraSkgeworCQkJCQlpZiAoIWN1ci0+b3V0cHV0W2ldKQorCQkJCQkJYnJlYWs7CisJCQkJCWNlcnIgPDwgY3VyLT5vdXRwdXRbaV0gPDwgZW5kbDsKKwkJCQl9CisJCQkJY2VyciA8PCAib3V0cHV0OlxuIjsKKwkJCQljb3B5KHJlc3VsdC5iZWdpbigpLCByZXN1bHQuZW5kKCksCisJCQkJICAgICBvc3RyZWFtX2l0ZXJhdG9yPHN0cmluZz4oY2VyciwgIlxuIikpOworCQkJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwkJCX0KKwkJfQorCX0KK30KKworCitzdGF0aWMgaW5wdXRfb3V0cHV0PGNoYXIgY29uc3QgKiwgY2hhciBjb25zdCAqPiBleHBlY3RfcnRyaW1bXSA9Cit7CisJeyAiYWJjIiwgImFiYyIgfSwKKwl7ICJhYmMgICIsICJhYmMiIH0sCisJeyAiIGFiYyAgIiwgIiBhYmMiIH0sCisJeyAiIGFiYyBcdCBcdCIsICIgYWJjIiB9LAorCXsgIiAiLCAiIiB9LAorCXsgIlx0IFx0IiwgIiIgfSwKKwl7ICIiLCAiIiB9LAorCXsgMCwgMCB9Cit9OworCitzdGF0aWMgdm9pZCBydHJpbV90ZXN0cygpCit7CisJaW5wdXRfb3V0cHV0PGNoYXIgY29uc3QgKiwgY2hhciBjb25zdCo+IGNvbnN0ICogY3VyOworCWZvciAoY3VyID0gZXhwZWN0X3J0cmltOyBjdXItPmlucHV0OyArK2N1cikgeworCQlzdHJpbmcgcmVzdWx0ID0gcnRyaW0oY3VyLT5pbnB1dCk7CisJCWNoZWNrX3Jlc3VsdCgicnRyaW0oKSIsIGN1ci0+aW5wdXQsIGN1ci0+b3V0cHV0LCByZXN1bHQpOworCX0KK30KKworCitzdGF0aWMgaW5wdXRfb3V0cHV0PGNoYXIgY29uc3QgKiwgY2hhciBjb25zdCAqPiBleHBlY3RfbHRyaW1bXSA9Cit7CisJeyAiYWJjIiwgImFiYyIgfSwKKwl7ICJhYmMgIiwgImFiYyAiIH0sCisJeyAiIGFiYyAiLCAiYWJjICIgfSwKKwl7ICJcdCAgXHRhYmMgIiwgImFiYyAiIH0sCisJeyAiICIsICIiIH0sCisJeyAiXHQgXHQiLCAiIiB9LAorCXsgIiIsICIiIH0sCisJeyAwLCAwIH0KK307CisKK3N0YXRpYyB2b2lkIGx0cmltX3Rlc3RzKCkKK3sKKwlpbnB1dF9vdXRwdXQ8Y2hhciBjb25zdCAqLCBjaGFyIGNvbnN0Kj4gY29uc3QgKiBjdXI7CisJZm9yIChjdXIgPSBleHBlY3RfbHRyaW07IGN1ci0+aW5wdXQ7ICsrY3VyKSB7CisJCXN0cmluZyByZXN1bHQgPSBsdHJpbShjdXItPmlucHV0KTsKKwkJY2hlY2tfcmVzdWx0KCJsdHJpbSgpIiwgY3VyLT5pbnB1dCwgY3VyLT5vdXRwdXQsIHJlc3VsdCk7CisJfQorfQorCisKK3N0YXRpYyBpbnB1dF9vdXRwdXQ8Y2hhciBjb25zdCAqLCBjaGFyIGNvbnN0ICo+IGV4cGVjdF90cmltW10gPQoreworCXsgImFiYyIsICJhYmMiIH0sCisJeyAiYWJjICIsICJhYmMiIH0sCisJeyAiIGFiYyAiLCAiYWJjIiB9LAorCXsgIlx0ICBcdGFiYyBcdCIsICJhYmMiIH0sCisJeyAiICIsICIiIH0sCisJeyAiXHQgXHQiLCAiIiB9LAorCXsgIiIsICIiIH0sCisJeyAwLCAwIH0KK307CisKK3N0YXRpYyB2b2lkIHRyaW1fdGVzdHMoKQoreworCWlucHV0X291dHB1dDxjaGFyIGNvbnN0ICosIGNoYXIgY29uc3QqPiBjb25zdCAqIGN1cjsKKwlmb3IgKGN1ciA9IGV4cGVjdF90cmltOyBjdXItPmlucHV0OyArK2N1cikgeworCQlzdHJpbmcgcmVzdWx0ID0gdHJpbShjdXItPmlucHV0KTsKKwkJY2hlY2tfcmVzdWx0KCJ0cmltKCkiLCBjdXItPmlucHV0LCBjdXItPm91dHB1dCwgcmVzdWx0KTsKKwl9Cit9CisKKworc3RhdGljIGlucHV0X291dHB1dDxkb3VibGUsIGNoYXIgY29uc3QgKj4gZXhwZWN0X2Zvcm1hdF9wZXJjZW50W10gPQoreworCXsgMi4yLCAgICAgICAgIiAyLjIwMDAiIH0sCisJeyAwLCAgICAgICAgICAiICAgICAgMCIgfSwKKwl7IDEwMC4wMCwgICAgICIxMDAuMDAwIiB9LAorCXsgOTkuOTk5OTksICAgIjEwMC4wMDAiIH0sCisJeyAwLjAwMDAwMzQ0LCAiMy40ZS0wNiIgfSwKKwkvLyBGSVhNRSwgbXVzdCBiZSAzLmUtMTI0IGJ1dCBvdXRwdXQgaXMgMy40ZS0xMjQKKy8vCXsgMC4zNGUtMTIzLCAgIjMuZS0xMjQiIH0sCisJeyAtMS4wLCAwIH0KK307CisKK3N0YXRpYyB2b2lkIGZvcm1hdF9wZXJjZW50X3Rlc3RzKCkKK3sKKwlpbnB1dF9vdXRwdXQ8ZG91YmxlLCBjaGFyIGNvbnN0Kj4gY29uc3QgKiBjdXI7CisJZm9yIChjdXIgPSBleHBlY3RfZm9ybWF0X3BlcmNlbnQ7IGN1ci0+aW5wdXQgIT0gLTEuMDsgKytjdXIpIHsKKwkJc3RyaW5nIHJlc3VsdCA9IGZvcm1hdF9wZXJjZW50KGN1ci0+aW5wdXQsIHBlcmNlbnRfaW50X3dpZHRoLAorCQkgICAgICBwZXJjZW50X2ZyYWN0X3dpZHRoKTsKKwkJY2hlY2tfcmVzdWx0KCJmb3JtYXRfcGVyY2VudCgpIiwgY3VyLT5pbnB1dCwgY3VyLT5vdXRwdXQsCisJCQkgICAgIHJlc3VsdCk7CisJfQorfQorCisKK3N0YXRpYyBpbnB1dF9vdXRwdXQ8dW5zaWduZWQgaW50LCBjaGFyIGNvbnN0ICo+IGV4cGVjdF9mcm9tX3N0cl90b191aW50W10gPQoreworCXsgMTIzLCAiMTIzIiB9LAorCXsgMzMsICIzMyIgfSwKKwl7IDAsICIwIiB9LAorCXsgMCwgMCB9Cit9OworCitzdGF0aWMgdm9pZCB0b3N0cl90ZXN0cygpCit7CisJaW5wdXRfb3V0cHV0PHVuc2lnbmVkIGludCwgY2hhciBjb25zdCAqPiBjb25zdCAqIGN1cjsKKwlmb3IgKGN1ciA9IGV4cGVjdF9mcm9tX3N0cl90b191aW50OyBjdXItPm91dHB1dDsgKytjdXIpIHsKKwkJc3RyaW5nIHJlc3VsdCA9IG9wX2xleGljYWxfY2FzdDxzdHJpbmc+KGN1ci0+aW5wdXQpOworCQljaGVja19yZXN1bHQoIm9wX2xleGljYWxfY2FzdCgpIiwgY3VyLT5pbnB1dCwKKwkJICAgICBjdXItPm91dHB1dCwgcmVzdWx0KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHRvdWludF90ZXN0cygpCit7CisJLy8gcmV2ZXJzZWQgaW5wdXQvb3V0cHV0IG9mIHRoZSBwcmV2aW91cyB0ZXN0cworCWlucHV0X291dHB1dDx1bnNpZ25lZCBpbnQsIGNoYXIgY29uc3QgKj4gY29uc3QgKiBjdXI7CisJZm9yIChjdXIgPSBleHBlY3RfZnJvbV9zdHJfdG9fdWludDsgY3VyLT5vdXRwdXQ7ICsrY3VyKSB7CisJCXVuc2lnbmVkIGludCByZXN1bHQgPQorCQkJb3BfbGV4aWNhbF9jYXN0PHVuc2lnbmVkIGludD4oY3VyLT5vdXRwdXQpOworCQljaGVja19yZXN1bHQoIm9wX2xleGljYWxfY2FzdCgpIiwgY3VyLT5vdXRwdXQsIGN1ci0+aW5wdXQsCisJCSAgICAgcmVzdWx0KTsKKwl9Cit9CisKKworc3RhdGljIGlucHV0X291dHB1dDxjaGFyIGNvbnN0KiwgYm9vbD4gZXhwZWN0X2Zyb21fc3RyX3RvX2Jvb2xbXSA9Cit7CisJeyAiMCIsIGZhbHNlIH0sCisJeyAiMSIsIHRydWUgfSwKKwl7IDAsIDAgfQorfTsKKworc3RhdGljIHZvaWQgdG9ib29sX3Rlc3RzKCkKK3sKKwlpbnB1dF9vdXRwdXQ8Y2hhciBjb25zdCAqLCBib29sPiBjb25zdCAqIGN1cjsKKwlmb3IgKGN1ciA9IGV4cGVjdF9mcm9tX3N0cl90b19ib29sOyBjdXItPmlucHV0OyArK2N1cikgeworCQlib29sIHJlc3VsdCA9IG9wX2xleGljYWxfY2FzdDxib29sPihjdXItPmlucHV0KTsKKwkJY2hlY2tfcmVzdWx0KCJvcF9sZXhpY2FsX2Nhc3QoKSIsIGN1ci0+aW5wdXQsIGN1ci0+b3V0cHV0LAorCQkgICAgIHJlc3VsdCk7CisJfQorfQorCisvLyBGSVhNRTogbW9yZSBvcF9sZXhpY2FsX2Nhc3Q8PiB0ZXN0cworCitpbnQgbWFpbigpCit7CisJZXJhc2VfdG9fbGFzdF9vZl90ZXN0cygpOworCXRvc3RyX3Rlc3RzKCk7CisJdG91aW50X3Rlc3RzKCk7CisJdG9ib29sX3Rlc3RzKCk7CisJc3BsaXRfdGVzdHMoKTsKKwlpc19wcmVmaXhfdGVzdHMoKTsKKwlzZXBhcmF0ZV90b2tlbl90ZXN0cygpOworCXJ0cmltX3Rlc3RzKCk7CisJbHRyaW1fdGVzdHMoKTsKKwl0cmltX3Rlc3RzKCk7CisJZm9ybWF0X3BlcmNlbnRfdGVzdHMoKTsKKwlyZXR1cm4gRVhJVF9TVUNDRVNTOworfQpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvbGlidXRpbCsrL3Rlc3RzL3V0aWxpdHlfdGVzdHMuY3BwIGIvb3Byb2ZpbGUtMC45LjcvbGlidXRpbCsrL3Rlc3RzL3V0aWxpdHlfdGVzdHMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkZTAwMGYKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9saWJ1dGlsKysvdGVzdHMvdXRpbGl0eV90ZXN0cy5jcHAKQEAgLTAsMCArMSwxMTggQEAKKy8qKgorICogQGZpbGUgdXRpbGl0eV90ZXN0cy5jcHAKKyAqIHRlc3RzIHV0aWxpdHkuaCBhbmQgb3BfZXhjZXB0aW9uLmgKKyAqCisgKiBAcmVtYXJrIENvcHlyaWdodCAyMDAzIE9Qcm9maWxlIGF1dGhvcnMKKyAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCisgKgorICogQGF1dGhvciBKb2huIExldm9uCisgKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKKyAqLworCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8bmV3PgorI2luY2x1ZGUgPGlvc3RyZWFtPgorCisjaW5jbHVkZSAidXRpbGl0eS5oIgorI2luY2x1ZGUgIm9wX2V4Y2VwdGlvbi5oIgorCit1c2luZyBuYW1lc3BhY2Ugc3RkOworCitzdGF0aWMgaW50IG5iX25ldzsKK3N0YXRpYyBpbnQgbmJfbmV3X2FycmF5OworCit2b2lkKiBvcGVyYXRvciBuZXcoc2l6ZV90IHNpemUpIHRocm93KGJhZF9hbGxvYykKK3sKKwluYl9uZXcrKzsKKwlyZXR1cm4gbWFsbG9jKHNpemUpOworfQorCit2b2lkKiBvcGVyYXRvciBuZXdbXShzaXplX3Qgc2l6ZSkgdGhyb3coYmFkX2FsbG9jKQoreworCW5iX25ld19hcnJheSsrOworCXJldHVybiBtYWxsb2Moc2l6ZSk7Cit9CisKK3ZvaWQgb3BlcmF0b3IgZGVsZXRlKHZvaWQgKiBwKSB0aHJvdygpCit7CisJbmJfbmV3LS07CisJaWYgKHApCisJCWZyZWUocCk7Cit9CisKK3ZvaWQgb3BlcmF0b3IgZGVsZXRlW10odm9pZCAqIHApIHRocm93KCkKK3sKKwluYl9uZXdfYXJyYXktLTsKKwlpZiAocCkKKwkJZnJlZShwKTsKK30KKworCit2b2lkIGNoZWNrX2FsbG9jKCkKK3sKKwlpZiAobmJfbmV3KSB7CisJCWNlcnIgPDwgIm5ldyhzaXplX3QpIGxlYWtcbiI7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisKKwlpZiAobmJfbmV3X2FycmF5KSB7CisJCWNlcnIgPDwgIm5ld1tdKHNpemVfdCkgbGVha1xuIjsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KK30KKworCitzdHJ1Y3QgQSB7fTsKKwordGVtcGxhdGUgPHR5cGVuYW1lIFRocm93LCB0eXBlbmFtZSBDYXRjaD4KK3ZvaWQgdGhyb3dfdGVzdHMoKQoreworCXNjb3BlZF9wdHI8QT4gYShuZXcgQSk7CisJdHJ5IHsKKwkJc2NvcGVkX3B0cjxBPiBhKG5ldyBBKTsKKwkJdGhyb3cgVGhyb3coIiIpOworCX0KKwljYXRjaCAoQ2F0Y2ggY29uc3QgJikgeworCX0KK30KKworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVGhyb3csIHR5cGVuYW1lIENhdGNoPgordm9pZCB0aHJvd190ZXN0cyhib29sKQoreworCXNjb3BlZF9hcnJheTxBPiBiKG5ldyBBWzEwXSk7CisJdHJ5IHsKKwkJc2NvcGVkX2FycmF5PEE+IGEobmV3IEFbMTBdKTsKKwkJdGhyb3cgVGhyb3coIiIpOworCX0KKwljYXRjaCAoQ2F0Y2ggY29uc3QgJikgeworCX0KK30KKworCit2b2lkIHRlc3RzX25ldygpCit7CisJdGhyb3dfdGVzdHM8b3BfZmF0YWxfZXJyb3IsIG9wX2ZhdGFsX2Vycm9yPigpOworCXRocm93X3Rlc3RzPG9wX2ZhdGFsX2Vycm9yLCBvcF9leGNlcHRpb24+KCk7CisJdGhyb3dfdGVzdHM8b3BfcnVudGltZV9lcnJvciwgb3BfcnVudGltZV9lcnJvcj4oKTsKKwl0aHJvd190ZXN0czxvcF9ydW50aW1lX2Vycm9yLCBydW50aW1lX2Vycm9yPigpOworCXRocm93X3Rlc3RzPG9wX2ZhdGFsX2Vycm9yLCBvcF9mYXRhbF9lcnJvcj4odHJ1ZSk7CisJdGhyb3dfdGVzdHM8b3BfZmF0YWxfZXJyb3IsIG9wX2V4Y2VwdGlvbj4odHJ1ZSk7CisJdGhyb3dfdGVzdHM8b3BfcnVudGltZV9lcnJvciwgb3BfcnVudGltZV9lcnJvcj4odHJ1ZSk7CisJdGhyb3dfdGVzdHM8b3BfcnVudGltZV9lcnJvciwgcnVudGltZV9lcnJvcj4odHJ1ZSk7Cit9CisKKworaW50IG1haW4oKQoreworCXRyeSB7CisJCXRlc3RzX25ldygpOworCQljaGVja19hbGxvYygpOworCX0KKwljYXRjaCAoLi4uKSB7CisJCWNlcnIgPDwgInVua25vd24gZXhjZXB0aW9uXG4iOworCQlyZXR1cm4gRVhJVF9GQUlMVVJFOworCX0KKworCXJldHVybiBFWElUX1NVQ0NFU1M7Cit9CmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9saWJ1dGlsKysvdW5pcXVlX3N0b3JhZ2UuaCBiL29wcm9maWxlLTAuOS43L2xpYnV0aWwrKy91bmlxdWVfc3RvcmFnZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0M2M2ZWUKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9saWJ1dGlsKysvdW5pcXVlX3N0b3JhZ2UuaApAQCAtMCwwICsxLDExMCBAQAorLyoqCisgKiBAZmlsZSB1bmlxdWVfc3RvcmFnZS5oCisgKiBVbmlxdWUgc3RvcmFnZSBvZiB2YWx1ZXMKKyAqCisgKiBAcmVtYXJrIENvcHlyaWdodCAyMDAyIE9Qcm9maWxlIGF1dGhvcnMKKyAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCisgKgorICogQGF1dGhvciBQaGlsaXBwZSBFbGllCisgKiBAYXV0aG9yIEpvaG4gTGV2b24KKyAqLworCisjaWZuZGVmIFVOSVFVRV9TVE9SQUdFX0gKKyNkZWZpbmUgVU5JUVVFX1NUT1JBR0VfSAorCisjaW5jbHVkZSA8dmVjdG9yPgorI2luY2x1ZGUgPG1hcD4KKyNpbmNsdWRlIDxzdGRleGNlcHQ+CisKKy8qKgorICogU3RvcmUgdmFsdWVzIHN1Y2ggdGhhdCBvbmx5IG9uZSBjb3B5IG9mIHRoZSB2YWx1ZQorICogaXMgZXZlciBzdG9yZWQuCisgKgorICogSSBpcyBhbiBhcmJpdHJhcnkgdHlwZW5hbWUgdGhhdCdzIG5ldmVyCisgKiB1c2VkLgorICoKKyAqIEl0IGlzIGEgcmVxdWlyZWQgcGFyYW1ldGVyIGluIG9yZGVyIHRvIGVuZm9yY2UKKyAqIHR5cGUtc2FmZXR5IGZvciBhIGNvbGxlY3Rpb24uCisgKgorICogVGhlIHZhbHVlIHR5cGUgIlYiIG11c3QgYmUgZGVmYXVsdC1jb25zdHJ1Y3RpYmxlLAorICogYW5kIHRoaXMgaXMgdGhlIHZhbHVlIHJldHVybmVkIGJ5IGEgc3RvcmVkIGlkX3ZhbHVlCisgKiB3aGVyZSAuc2V0KCkgaXMgZmFsc2UKKyAqLwordGVtcGxhdGUgPHR5cGVuYW1lIEksIHR5cGVuYW1lIFY+IGNsYXNzIHVuaXF1ZV9zdG9yYWdlIHsKKworcHVibGljOgorCXVuaXF1ZV9zdG9yYWdlKCkgeworCQkvLyBpZCAwCisJCXZhbHVlcy5wdXNoX2JhY2soVigpKTsKKwl9CisKKwl2aXJ0dWFsIH51bmlxdWVfc3RvcmFnZSgpIHt9CisKKwl0eXBlZGVmIHN0ZDo6dmVjdG9yPFY+IHN0b3JlZF92YWx1ZXM7CisKKwkvLy8gdGhlIGFjdHVhbCBJRCB0eXBlCisJc3RydWN0IGlkX3ZhbHVlIHsKKwkJLy8vIGlkID09IDAgbWVhbnMgImVtcHR5IiAvICJ1bmRlZmluZWQiCisJCWlkX3ZhbHVlKCkgOiBpZCgwKSB7fQorCisJCS8vLyBkb2VzIHRoaXMgSUQgbWFwIHRvIGEgbm9uLWRlZmF1bHQgdmFsdWUgPworCQlib29sIHNldCgpIGNvbnN0IHsKKwkJCXJldHVybiBpZDsKKwkJfQorCisJCWJvb2wgb3BlcmF0b3I8KGlkX3ZhbHVlIGNvbnN0ICYgcmhzKSBjb25zdCB7CisJCQlyZXR1cm4gaWQgPCByaHMuaWQ7CisJCX0KKworCQlib29sIG9wZXJhdG9yPT0oaWRfdmFsdWUgY29uc3QgJiByaHMpIGNvbnN0IHsKKwkJCXJldHVybiBpZCA9PSByaHMuaWQ7CisJCX0KKworCQlib29sIG9wZXJhdG9yIT0oaWRfdmFsdWUgY29uc3QgJiByaHMpIGNvbnN0IHsKKwkJCXJldHVybiAhKGlkID09IHJocy5pZCk7CisJCX0KKworCXByaXZhdGU6CisJCWZyaWVuZCBjbGFzcyB1bmlxdWVfc3RvcmFnZTxJLCBWPjsKKworCQl0eXBlZGVmIHR5cGVuYW1lIHN0b3JlZF92YWx1ZXM6OnNpemVfdHlwZSBzaXplX3R5cGU7CisKKwkJZXhwbGljaXQgaWRfdmFsdWUoc2l6ZV90eXBlIHMpIDogaWQocykge30KKworCQkvLy8gYWN0dWFsIElEIHZhbHVlCisJCXNpemVfdHlwZSBpZDsKKwl9OworCisKKwkvLy8gZW5zdXJlIHRoaXMgdmFsdWUgaXMgYXZhaWxhYmxlCisJaWRfdmFsdWUgY29uc3QgY3JlYXRlKFYgY29uc3QgJiB2YWx1ZSkgeworCQl0eXBlbmFtZSBpZF9tYXA6OnZhbHVlX3R5cGUgdmFsKHZhbHVlLCBpZF92YWx1ZSh2YWx1ZXMuc2l6ZSgpKSk7CisJCXN0ZDo6cGFpcjx0eXBlbmFtZSBpZF9tYXA6Oml0ZXJhdG9yLCBib29sPgorCQkJaW5zZXJ0ZWQgPSBpZHMuaW5zZXJ0KHZhbCk7CisJCWlmIChpbnNlcnRlZC5zZWNvbmQpCisJCQl2YWx1ZXMucHVzaF9iYWNrKHZhbHVlKTsKKworCQlyZXR1cm4gaW5zZXJ0ZWQuZmlyc3QtPnNlY29uZDsKKwl9CisKKworCS8vLyByZXR1cm4gdGhlIHN0b3JlZCB2YWx1ZSBmb3IgdGhlIGdpdmVuIElECisJViBjb25zdCAmIGdldChpZF92YWx1ZSBjb25zdCAmIGlkKSBjb25zdCB7CisJCS8vIHNvbWUgc3RsIGxhY2sgYXQoKSwgc28gd2UgZW11bGF0ZSBpdAorCQlpZiAoaWQuaWQgPCB2YWx1ZXMuc2l6ZSgpKQorCQkJcmV0dXJuIHZhbHVlc1tpZC5pZF07CisKKwkJdGhyb3cgc3RkOjpvdXRfb2ZfcmFuZ2UoInVuaXF1ZV9zdG9yYWdlOjpnZXQoKTogb3V0IG9mIGJvdW5kcyIpOworCX0KKworcHJpdmF0ZToKKwl0eXBlZGVmIHN0ZDo6bWFwPFYsIGlkX3ZhbHVlPiBpZF9tYXA7CisKKwkvLy8gdGhlIGNvbnRhaW5lZCB2YWx1ZXMKKwlzdG9yZWRfdmFsdWVzIHZhbHVlczsKKworCS8vLyBtYXAgZnJvbSBJRCB0byB2YWx1ZQorCWlkX21hcCBpZHM7Cit9OworCisjZW5kaWYgLyogIVVOSVFVRV9TVE9SQUdFX0ggKi8KZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2xpYnV0aWwrKy91dGlsaXR5LmggYi9vcHJvZmlsZS0wLjkuNy9saWJ1dGlsKysvdXRpbGl0eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzYzM2Y2EKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9saWJ1dGlsKysvdXRpbGl0eS5oCkBAIC0wLDAgKzEsMTAyIEBACisvKioKKyAqIEBmaWxlIHV0aWxpdHkuaAorICogR2VuZXJhbCBwdXJwb3NlIEMrKyB1dGlsaXR5CisgKgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMiBPUHJvZmlsZSBhdXRob3JzCisgKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORworICoKKyAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQorICogQGF1dGhvciBKb2huIExldm9uCisgKi8KKworI2lmbmRlZiBVVElMSVRZX0gKKyNkZWZpbmUgVVRJTElUWV9ICisKKyNpbmNsdWRlIDxjc3RkZGVmPgorCisvKiogbm9uY29weWFibGUgOiBvYmplY3Qgb2YgY2xhc3MgZGVyaXZlZCBmcm9tIHRoaXMgY2xhc3MgY2FuJ3QgYmUgY29waWVkCisgKiBhbmQgaXNuJ3QgY29weS1jb25zdHJ1Y3RpYmxlICovCitjbGFzcyBub25jb3B5YWJsZSB7Citwcm90ZWN0ZWQ6CisJbm9uY29weWFibGUoKSB7fQorCX5ub25jb3B5YWJsZSgpIHt9Citwcml2YXRlOgorCW5vbmNvcHlhYmxlKG5vbmNvcHlhYmxlIGNvbnN0ICYpOworCW5vbmNvcHlhYmxlIGNvbnN0ICYgb3BlcmF0b3I9KG5vbmNvcHlhYmxlIGNvbnN0ICYpOworfTsKKworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBzY29wZWRfcHRyIHsKK3B1YmxpYzoKKwlleHBsaWNpdCBzY29wZWRfcHRyKFQgKiBwID0gMCkgOiBwXyhwKSB7fQorCX5zY29wZWRfcHRyKCkgeyBkZWxldGUgcF87IH0KKworCXZvaWQgcmVzZXQoVCAqIHAgPSAwKSB7CisJCWlmIChwID09IHBfKQorCQkJcmV0dXJuOworCQlkZWxldGUgcF87CisJCXBfID0gcDsKKwl9CisgCisJVCAmIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuICpwXzsgfQorCVQgKiBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gcF87IH0KKwlUICogZ2V0KCkgY29uc3QgeyByZXR1cm4gcF87IH0KKyAKKwl2b2lkIHN3YXAoc2NvcGVkX3B0ciAmIHNwKSB7CisJCVQgKiB0bXAgPSBzcC5wXzsKKwkJc3AucF8gPSBwXzsKKwkJcF8gPSB0bXA7CisJfQorIAorcHJpdmF0ZToKKwlzY29wZWRfcHRyICYgb3BlcmF0b3I9KHNjb3BlZF9wdHIgY29uc3QgJik7CisJc2NvcGVkX3B0cihzY29wZWRfcHRyIGNvbnN0ICYpOworCVQgKiBwXzsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNzIHNjb3BlZF9hcnJheSB7CitwdWJsaWM6CisJZXhwbGljaXQgc2NvcGVkX2FycmF5KFQgKiBwID0gMCkgOiBwXyhwKSB7fQorCX5zY29wZWRfYXJyYXkoKSB7IGRlbGV0ZSBbXSBwXzsgfQorCisJdm9pZCByZXNldChUICogcCA9IDApIHsKKwkJaWYgKHAgPT0gcF8pCisJCQlyZXR1cm47CisJCWRlbGV0ZSBbXSBwXzsKKwkJcF8gPSBwOworCX0KKyAKKwlUICYgb3BlcmF0b3JbXShzdGQ6OnB0cmRpZmZfdCBpKSBjb25zdCB7IHJldHVybiBwX1tpXTsgfQorCVQgKiBnZXQoKSBjb25zdCB7IHJldHVybiBwXzsgfQorIAorCXZvaWQgc3dhcChzY29wZWRfYXJyYXkgJiBzcCkgeworCQlUICogdG1wID0gc3AucF87CisJCXNwLnBfID0gcF87CisJCXBfID0gdG1wOworCX0KKyAKK3ByaXZhdGU6CisJc2NvcGVkX2FycmF5ICYgb3BlcmF0b3I9KHNjb3BlZF9hcnJheSBjb25zdCAmKTsKKwlzY29wZWRfYXJyYXkoc2NvcGVkX2FycmF5IGNvbnN0ICYpOworCVQgKiBwXzsKK307CisKKy8qKgorICogQHBhcmFtIGNvdW50CisgKiBAcGFyYW0gdG90YWwKKyAqCisgKiByZXR1cm4gdG90YWwgPT0gMCA/IDEuMCA6IChjb3VudCAvIHRvdGFsKTsKKyAqLworaW5saW5lIGRvdWJsZSBvcF9yYXRpbyhkb3VibGUgY291bnQsIGRvdWJsZSB0b3RhbCkKK3sKKwlyZXR1cm4gdG90YWwgPT0gMCA/IDAuMCA6IChjb3VudCAvIHRvdGFsKTsKK30KKyAKKy8vIFBhcnQgY29weXJpZ2h0OgorLy8gIChDKSBDb3B5cmlnaHQgYm9vc3Qub3JnIDE5OTkuIFBlcm1pc3Npb24gdG8gY29weSwgdXNlLCBtb2RpZnksIHNlbGwKKy8vICBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGlzIGdyYW50ZWQgcHJvdmlkZWQgdGhpcyBjb3B5cmlnaHQKKy8vICBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLiBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dAorLy8gIGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eSwgYW5kIHdpdGggbm8gY2xhaW0gYXMgdG8gaXRzIHN1aXRhYmlsaXR5IGZvcgorLy8gIGFueSBwdXJwb3NlLgorCisjZW5kaWYgLyogIVVUSUxJVFlfSCAqLwpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvbGlidXRpbCsrL3htbF9vdXRwdXQuY3BwIGIvb3Byb2ZpbGUtMC45LjcvbGlidXRpbCsrL3htbF9vdXRwdXQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4MGMyYTgKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9saWJ1dGlsKysveG1sX291dHB1dC5jcHAKQEAgLTAsMCArMSw4MiBAQAorLyoqCisgKiBAZmlsZSB4bWxfb3V0cHV0LmNwcAorICogdXRpbGl0eSByb3V0aW5lcyBmb3Igd3JpdGluZyBYTUwKKyAqCisgKiBAcmVtYXJrIENvcHlyaWdodCAyMDA2IE9Qcm9maWxlIGF1dGhvcnMKKyAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCisgKgorICogQGF1dGhvciBEYXZlIE5vbXVyYQorICovCisKKyNpbmNsdWRlIDxzc3RyZWFtPgorI2luY2x1ZGUgPGlvc3RyZWFtPgorCisjaW5jbHVkZSAib3BfeG1sX291dC5oIgorI2luY2x1ZGUgInhtbF9vdXRwdXQuaCIKKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKworI2RlZmluZSBNQVhfWE1MX0JVRiAxNjM4NAorc3RhdGljIGNoYXIgYnVmW01BWF9YTUxfQlVGXTsKKworc3RyaW5nIHRhZ19uYW1lKHRhZ190IHRhZykKK3sKKwlvc3RyaW5nc3RyZWFtIG91dDsKKwlvdXQgPDwgeG1sX3RhZ19uYW1lKHRhZyk7CisJcmV0dXJuIG91dC5zdHIoKTsKK30KKworCitzdHJpbmcgb3Blbl9lbGVtZW50KHRhZ190IHRhZywgYm9vbCB3aXRoX2F0dHJzKQoreworCW9zdHJpbmdzdHJlYW0gb3V0OworCisJYnVmWzBdID0gJ1wwJzsKKwlvcGVuX3htbF9lbGVtZW50KHRhZywgd2l0aF9hdHRycywgYnVmLCBNQVhfWE1MX0JVRik7CisJb3V0IDw8IGJ1ZjsKKwlyZXR1cm4gb3V0LnN0cigpOworfQorCisKK3N0cmluZyBjbG9zZV9lbGVtZW50KHRhZ190IHRhZywgYm9vbCBoYXNfbmVzdGVkKQoreworCW9zdHJpbmdzdHJlYW0gb3V0OworCisJYnVmWzBdID0gJ1wwJzsKKwljbG9zZV94bWxfZWxlbWVudCh0YWcsIGhhc19uZXN0ZWQsIGJ1ZiwgTUFYX1hNTF9CVUYpOworCW91dCA8PCBidWY7CisJcmV0dXJuIG91dC5zdHIoKTsKK30KKworCitzdHJpbmcgaW5pdF9hdHRyKHRhZ190IGF0dHIsIHNpemVfdCB2YWx1ZSkKK3sKKwlvc3RyaW5nc3RyZWFtIG91dDsKKworCWJ1ZlswXSA9ICdcMCc7CisJaW5pdF94bWxfaW50X2F0dHIoYXR0ciwgdmFsdWUsIGJ1ZiwgTUFYX1hNTF9CVUYpOworCW91dCA8PCBidWY7CisJcmV0dXJuIG91dC5zdHIoKTsKK30KKworCitzdHJpbmcgaW5pdF9hdHRyKHRhZ190IGF0dHIsIGRvdWJsZSB2YWx1ZSkKK3sKKwlvc3RyaW5nc3RyZWFtIG91dDsKKworCWJ1ZlswXSA9ICdcMCc7CisJaW5pdF94bWxfZGJsX2F0dHIoYXR0ciwgdmFsdWUsIGJ1ZiwgTUFYX1hNTF9CVUYpOworCW91dCA8PCBidWY7CisJcmV0dXJuIG91dC5zdHIoKTsKK30KKworCitzdHJpbmcgaW5pdF9hdHRyKHRhZ190IGF0dHIsIHN0cmluZyBjb25zdCAmIHN0cikKK3sKKwlvc3RyaW5nc3RyZWFtIG91dDsKKworCWJ1ZlswXSA9ICdcMCc7CisJaW5pdF94bWxfc3RyX2F0dHIoYXR0ciwgc3RyLmNfc3RyKCksIGJ1ZiwgTUFYX1hNTF9CVUYpOworCW91dCA8PCBidWY7CisJcmV0dXJuIG91dC5zdHIoKTsKK30KZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2xpYnV0aWwrKy94bWxfb3V0cHV0LmggYi9vcHJvZmlsZS0wLjkuNy9saWJ1dGlsKysveG1sX291dHB1dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4OTM2Y2QKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9saWJ1dGlsKysveG1sX291dHB1dC5oCkBAIC0wLDAgKzEsMjIgQEAKKy8qKgorICogQGZpbGUgeG1sX291dHB1dC5oCisgKiB1dGlsaXR5IHJvdXRpbmVzIGZvciB3cml0aW5nIFhNTAorICoKKyAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDYgT1Byb2ZpbGUgYXV0aG9ycworICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKKyAqCisgKiBAYXV0aG9yIERhdmUgTm9tdXJhCisgKi8KKworI2lmbmRlZiBYTUxfT1VUUFVUX0gKKyNkZWZpbmUgWE1MX09VVFBVVF9ICisjaW5jbHVkZSAib3BfeG1sX291dC5oIgorCitzdGQ6OnN0cmluZyB0YWdfbmFtZSh0YWdfdCB0YWcpOworc3RkOjpzdHJpbmcgb3Blbl9lbGVtZW50KHRhZ190IHRhZywgYm9vbCB3aXRoX2F0dHJzID0gZmFsc2UpOworc3RkOjpzdHJpbmcgY2xvc2VfZWxlbWVudCh0YWdfdCB0YWcgPSBOT05FLCBib29sIGhhc19uZXN0ZWQgPSBmYWxzZSk7CitzdGQ6OnN0cmluZyBpbml0X2F0dHIodGFnX3QgYXR0ciwgc2l6ZV90IHZhbHVlKTsKK3N0ZDo6c3RyaW5nIGluaXRfYXR0cih0YWdfdCBhdHRyLCBkb3VibGUgdmFsdWUpOworc3RkOjpzdHJpbmcgaW5pdF9hdHRyKHRhZ190IGF0dHIsIHN0ZDo6c3RyaW5nIGNvbnN0ICYgc3RyKTsKKworI2VuZGlmIC8qIFhNTF9PVVRQVVRfSCAqLwpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvbGlidXRpbC9NYWtlZmlsZS5hbSBiL29wcm9maWxlLTAuOS43L2xpYnV0aWwvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2YxOWYxMgotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2xpYnV0aWwvTWFrZWZpbGUuYW0KQEAgLTAsMCArMSwzMSBAQAorU1VCRElSUyA9IC4gdGVzdHMKKworQU1fQ1BQRkxBR1M9LUkgJHt0b3Bfc3JjZGlyfS9saWJvcAorQU1fQ0ZMQUdTID0gQE9QX0NGTEFHU0AKKworbm9pbnN0X0xJQlJBUklFUyA9IGxpYnV0aWwuYQorbGlidXRpbF9hX1NPVVJDRVMgPSBcCisJb3BfZGV2aWNlaW8uYyBcCisJb3BfbG9ja2ZpbGUuYyBcCisJb3BfZmlsZS5jIFwKKwlvcF9maWxlaW8uYyBcCisJb3BfZ2V0X3RpbWUuYyBcCisJb3BfbGliaWJlcnR5LmMgXAorCW9wX3BvcHQuYyBcCisJb3Bfc3RyaW5nLmMgXAorCW9wX2NwdWZyZXEuYyBcCisJb3BfZGV2aWNlaW8uaCBcCisJb3BfZmlsZWlvLmggXAorCW9wX2xpYmliZXJ0eS5oIFwKKwlvcF9sb2NrZmlsZS5oIFwKKwlvcF90eXBlcy5oIFwKKwlvcF9maWxlLmggXAorCW9wX2dldF90aW1lLmggXAorCW9wX2xpc3QuaCBcCisJb3BfcG9wdC5oIFwKKwlvcF9zdHJpbmcuaCBcCisJb3BfY3B1ZnJlcS5oIFwKKwlvcF92ZXJzaW9uLmMgXAorCW9wX3ZlcnNpb24uaCBcCisJb3BfZ3Jvd2FibGVfYnVmZmVyLmMgXAorCW9wX2dyb3dhYmxlX2J1ZmZlci5oCmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9saWJ1dGlsL01ha2VmaWxlLmluIGIvb3Byb2ZpbGUtMC45LjcvbGlidXRpbC9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZmVlNmU1Ci0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvbGlidXRpbC9NYWtlZmlsZS5pbgpAQCAtMCwwICsxLDcxNyBAQAorIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS4xMS4xIGZyb20gTWFrZWZpbGUuYW0uCisjIEBjb25maWd1cmVfaW5wdXRACisKKyMgQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLAorIyAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisjIEluYy4KKyMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKKyMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQorIyBQQVJUSUNVTEFSIFBVUlBPU0UuCisKK0BTRVRfTUFLRUAKKworVlBBVEggPSBAc3JjZGlyQAorcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACitwa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAorYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAoraW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKK2luc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKK2luc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYworSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKK3RyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKK05PUk1BTF9JTlNUQUxMID0gOgorUFJFX0lOU1RBTEwgPSA6CitQT1NUX0lOU1RBTEwgPSA6CitOT1JNQUxfVU5JTlNUQUxMID0gOgorUFJFX1VOSU5TVEFMTCA9IDoKK1BPU1RfVU5JTlNUQUxMID0gOgorYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKK2hvc3RfdHJpcGxldCA9IEBob3N0QAorc3ViZGlyID0gbGlidXRpbAorRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChzcmNkaXIpL01ha2VmaWxlLmluCitBQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00CithbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9tNC9iaW51dGlscy5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9idWlsdGluZXhwZWN0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2NlbGxzcHViZmRzdXBwb3J0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2NvbXBpbGVyb3B0aW9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2NvbmZpZ21vZHVsZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jb3B5aWZjaGFuZ2UubTQgJCh0b3Bfc3JjZGlyKS9tNC9kb2Nib29rLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2V4dHJhZGlycy5tNCAkKHRvcF9zcmNkaXIpL200L2ZpbmRrZXJuZWwubTQgXAorCSQodG9wX3NyY2RpcikvbTQva2VybmVsb3B0aW9uLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2tlcm5lbHZlcnNpb24ubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWJ0b29sLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2x0b3B0aW9ucy5tNCAkKHRvcF9zcmNkaXIpL200L2x0c3VnYXIubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbHR2ZXJzaW9uLm00ICQodG9wX3NyY2RpcikvbTQvbHR+b2Jzb2xldGUubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbWFsbG9jYXR0cmlidXRlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3BvcHRjb25zdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9wcmVjb21waWxlZGhlYWRlci5tNCAkKHRvcF9zcmNkaXIpL200L3F0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3Jlc3VsdHluLm00ICQodG9wX3NyY2RpcikvbTQvc3N0cmVhbS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC90eXBlZGVmLm00ICQodG9wX3NyY2RpcikvY29uZmlndXJlLmluCithbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAorCSQoQUNMT0NBTF9NNCkKK21raW5zdGFsbGRpcnMgPSAkKGluc3RhbGxfc2gpIC1kCitDT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5oCitDT05GSUdfQ0xFQU5fRklMRVMgPQorQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTID0KK0xJQlJBUklFUyA9ICQobm9pbnN0X0xJQlJBUklFUykKK0FSRkxBR1MgPSBjcnUKK2xpYnV0aWxfYV9BUiA9ICQoQVIpICQoQVJGTEFHUykKK2xpYnV0aWxfYV9MSUJBREQgPQorYW1fbGlidXRpbF9hX09CSkVDVFMgPSBvcF9kZXZpY2Vpby4kKE9CSkVYVCkgb3BfbG9ja2ZpbGUuJChPQkpFWFQpIFwKKwlvcF9maWxlLiQoT0JKRVhUKSBvcF9maWxlaW8uJChPQkpFWFQpIG9wX2dldF90aW1lLiQoT0JKRVhUKSBcCisJb3BfbGliaWJlcnR5LiQoT0JKRVhUKSBvcF9wb3B0LiQoT0JKRVhUKSBvcF9zdHJpbmcuJChPQkpFWFQpIFwKKwlvcF9jcHVmcmVxLiQoT0JKRVhUKSBvcF92ZXJzaW9uLiQoT0JKRVhUKSBcCisJb3BfZ3Jvd2FibGVfYnVmZmVyLiQoT0JKRVhUKQorbGlidXRpbF9hX09CSkVDVFMgPSAkKGFtX2xpYnV0aWxfYV9PQkpFQ1RTKQorREVGQVVMVF9JTkNMVURFUyA9IC1JLkBhbV9faXNyY0AgLUkkKHRvcF9idWlsZGRpcikKK2RlcGNvbXAgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL2RlcGNvbXAKK2FtX19kZXBmaWxlc19tYXliZSA9IGRlcGZpbGVzCithbV9fbXYgPSBtdiAtZgorQ09NUElMRSA9ICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSBcCisJJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQorTFRDT01QSUxFID0gJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIFwKKwktLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgXAorCSQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKK0NDTEQgPSAkKENDKQorTElOSyA9ICQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSBcCisJLS1tb2RlPWxpbmsgJChDQ0xEKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpICQoQU1fTERGTEFHUykgXAorCSQoTERGTEFHUykgLW8gJEAKK1NPVVJDRVMgPSAkKGxpYnV0aWxfYV9TT1VSQ0VTKQorRElTVF9TT1VSQ0VTID0gJChsaWJ1dGlsX2FfU09VUkNFUykKK1JFQ1VSU0lWRV9UQVJHRVRTID0gYWxsLXJlY3Vyc2l2ZSBjaGVjay1yZWN1cnNpdmUgZHZpLXJlY3Vyc2l2ZSBcCisJaHRtbC1yZWN1cnNpdmUgaW5mby1yZWN1cnNpdmUgaW5zdGFsbC1kYXRhLXJlY3Vyc2l2ZSBcCisJaW5zdGFsbC1kdmktcmVjdXJzaXZlIGluc3RhbGwtZXhlYy1yZWN1cnNpdmUgXAorCWluc3RhbGwtaHRtbC1yZWN1cnNpdmUgaW5zdGFsbC1pbmZvLXJlY3Vyc2l2ZSBcCisJaW5zdGFsbC1wZGYtcmVjdXJzaXZlIGluc3RhbGwtcHMtcmVjdXJzaXZlIGluc3RhbGwtcmVjdXJzaXZlIFwKKwlpbnN0YWxsY2hlY2stcmVjdXJzaXZlIGluc3RhbGxkaXJzLXJlY3Vyc2l2ZSBwZGYtcmVjdXJzaXZlIFwKKwlwcy1yZWN1cnNpdmUgdW5pbnN0YWxsLXJlY3Vyc2l2ZQorUkVDVVJTSVZFX0NMRUFOX1RBUkdFVFMgPSBtb3N0bHljbGVhbi1yZWN1cnNpdmUgY2xlYW4tcmVjdXJzaXZlCVwKKyAgZGlzdGNsZWFuLXJlY3Vyc2l2ZSBtYWludGFpbmVyLWNsZWFuLXJlY3Vyc2l2ZQorQU1fUkVDVVJTSVZFX1RBUkdFVFMgPSAkKFJFQ1VSU0lWRV9UQVJHRVRTOi1yZWN1cnNpdmU9KSBcCisJJChSRUNVUlNJVkVfQ0xFQU5fVEFSR0VUUzotcmVjdXJzaXZlPSkgdGFncyBUQUdTIGN0YWdzIENUQUdTIFwKKwlkaXN0ZGlyCitFVEFHUyA9IGV0YWdzCitDVEFHUyA9IGN0YWdzCitESVNUX1NVQkRJUlMgPSAkKFNVQkRJUlMpCitESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQorYW1fX3JlbGF0aXZpemUgPSBcCisgIGRpcjA9YHB3ZGA7IFwKKyAgc2VkX2ZpcnN0PSdzLF5cKFteL10qXCkvLiokJCxcMSwnOyBcCisgIHNlZF9yZXN0PSdzLF5bXi9dKi8qLCwnOyBcCisgIHNlZF9sYXN0PSdzLF4uKi9cKFteL10qXCkkJCxcMSwnOyBcCisgIHNlZF9idXRsYXN0PSdzLC8qW14vXSokJCwsJzsgXAorICB3aGlsZSB0ZXN0IC1uICIkJGRpcjEiOyBkbyBcCisgICAgZmlyc3Q9YGVjaG8gIiQkZGlyMSIgfCBzZWQgLWUgIiQkc2VkX2ZpcnN0ImA7IFwKKyAgICBpZiB0ZXN0ICIkJGZpcnN0IiAhPSAiLiI7IHRoZW4gXAorICAgICAgaWYgdGVzdCAiJCRmaXJzdCIgPSAiLi4iOyB0aGVuIFwKKyAgICAgICAgZGlyMj1gZWNobyAiJCRkaXIwIiB8IHNlZCAtZSAiJCRzZWRfbGFzdCJgLyIkJGRpcjIiOyBcCisgICAgICAgIGRpcjA9YGVjaG8gIiQkZGlyMCIgfCBzZWQgLWUgIiQkc2VkX2J1dGxhc3QiYDsgXAorICAgICAgZWxzZSBcCisgICAgICAgIGZpcnN0Mj1gZWNobyAiJCRkaXIyIiB8IHNlZCAtZSAiJCRzZWRfZmlyc3QiYDsgXAorICAgICAgICBpZiB0ZXN0ICIkJGZpcnN0MiIgPSAiJCRmaXJzdCI7IHRoZW4gXAorICAgICAgICAgIGRpcjI9YGVjaG8gIiQkZGlyMiIgfCBzZWQgLWUgIiQkc2VkX3Jlc3QiYDsgXAorICAgICAgICBlbHNlIFwKKyAgICAgICAgICBkaXIyPSIuLi8kJGRpcjIiOyBcCisgICAgICAgIGZpOyBcCisgICAgICAgIGRpcjA9IiQkZGlyMCIvIiQkZmlyc3QiOyBcCisgICAgICBmaTsgXAorICAgIGZpOyBcCisgICAgZGlyMT1gZWNobyAiJCRkaXIxIiB8IHNlZCAtZSAiJCRzZWRfcmVzdCJgOyBcCisgIGRvbmU7IFwKKyAgcmVsZGlyPSIkJGRpcjIiCitBQ0xPQ0FMID0gQEFDTE9DQUxACitBTVRBUiA9IEBBTVRBUkAKK0FSID0gQEFSQAorQVVUT0NPTkYgPSBAQVVUT0NPTkZACitBVVRPSEVBREVSID0gQEFVVE9IRUFERVJACitBVVRPTUFLRSA9IEBBVVRPTUFLRUAKK0FXSyA9IEBBV0tACitCRkRfTElCUyA9IEBCRkRfTElCU0AKK0NBVF9FTlRSWV9FTkQgPSBAQ0FUX0VOVFJZX0VOREAKK0NBVF9FTlRSWV9TVEFSVCA9IEBDQVRfRU5UUllfU1RBUlRACitDQyA9IEBDQ0AKK0NDREVQTU9ERSA9IEBDQ0RFUE1PREVACitDRkxBR1MgPSBAQ0ZMQUdTQAorQ1BQID0gQENQUEAKK0NQUEZMQUdTID0gQENQUEZMQUdTQAorQ1hYID0gQENYWEAKK0NYWENQUCA9IEBDWFhDUFBACitDWFhERVBNT0RFID0gQENYWERFUE1PREVACitDWFhGTEFHUyA9IEBDWFhGTEFHU0AKK0NZR1BBVEhfVyA9IEBDWUdQQVRIX1dACitEQVRFID0gQERBVEVACitERUZTID0gQERFRlNACitERVBESVIgPSBAREVQRElSQAorRE9DQk9PS19ST09UID0gQERPQ0JPT0tfUk9PVEAKK0RTWU1VVElMID0gQERTWU1VVElMQAorRFVNUEJJTiA9IEBEVU1QQklOQAorRUNIT19DID0gQEVDSE9fQ0AKK0VDSE9fTiA9IEBFQ0hPX05ACitFQ0hPX1QgPSBARUNIT19UQAorRUdSRVAgPSBARUdSRVBACitFWEVFWFQgPSBARVhFRVhUQAorRVhUUkFfQ0ZMQUdTX01PRFVMRSA9IEBFWFRSQV9DRkxBR1NfTU9EVUxFQAorRkdSRVAgPSBARkdSRVBACitHUkVQID0gQEdSRVBACitJTlNUQUxMID0gQElOU1RBTExACitJTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAorSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKK0lOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAorSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKK0pBVkFfSE9NRURJUiA9IEBKQVZBX0hPTUVESVJACitLSU5DID0gQEtJTkNACitLU1JDID0gQEtTUkNACitLVkVSUyA9IEBLVkVSU0AKK0xEID0gQExEQAorTERGTEFHUyA9IEBMREZMQUdTQAorTElCRVJUWV9MSUJTID0gQExJQkVSVFlfTElCU0AKK0xJQk9CSlMgPSBATElCT0JKU0AKK0xJQlMgPSBATElCU0AKK0xJQlRPT0wgPSBATElCVE9PTEAKK0xJUE8gPSBATElQT0AKK0xOX1MgPSBATE5fU0AKK0xUTElCT0JKUyA9IEBMVExJQk9CSlNACitNQUtFSU5GTyA9IEBNQUtFSU5GT0AKK01LRElSX1AgPSBATUtESVJfUEAKK01PQyA9IEBNT0NACitNT0RJTlNUQUxMRElSID0gQE1PRElOU1RBTExESVJACitOTSA9IEBOTUAKK05NRURJVCA9IEBOTUVESVRACitPQkpEVU1QID0gQE9CSkRVTVBACitPQkpFWFQgPSBAT0JKRVhUQAorT1BST0ZJTEVfRElSID0gQE9QUk9GSUxFX0RJUkAKK09QUk9GSUxFX01PRFVMRV9BUkNIID0gQE9QUk9GSUxFX01PRFVMRV9BUkNIQAorT1BfQ0ZMQUdTID0gQE9QX0NGTEFHU0AKK09QX0NYWEZMQUdTID0gQE9QX0NYWEZMQUdTQAorT1BfRE9DRElSID0gQE9QX0RPQ0RJUkAKK09UT09MID0gQE9UT09MQAorT1RPT0w2NCA9IEBPVE9PTDY0QAorUEFDS0FHRSA9IEBQQUNLQUdFQAorUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACitQQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAorUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACitQQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAorUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACitQQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAorUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACitQS0dfQ09ORklHID0gQFBLR19DT05GSUdACitQS0dfQ09ORklHX0xJQkRJUiA9IEBQS0dfQ09ORklHX0xJQkRJUkAKK1BLR19DT05GSUdfUEFUSCA9IEBQS0dfQ09ORklHX1BBVEhACitQT1BUX0xJQlMgPSBAUE9QVF9MSUJTQAorUFRSRElGRl9UX1RZUEUgPSBAUFRSRElGRl9UX1RZUEVACitRVF9DRkxBR1MgPSBAUVRfQ0ZMQUdTQAorUVRfSU5DTFVERVMgPSBAUVRfSU5DTFVERVNACitRVF9MREZMQUdTID0gQFFUX0xERkxBR1NACitRVF9MSUIgPSBAUVRfTElCQAorUVRfTElCUyA9IEBRVF9MSUJTQAorUVRfVkVSU0lPTiA9IEBRVF9WRVJTSU9OQAorUkFOTElCID0gQFJBTkxJQkAKK1NFRCA9IEBTRURACitTRVRfTUFLRSA9IEBTRVRfTUFLRUAKK1NIRUxMID0gQFNIRUxMQAorU0laRV9UX1RZUEUgPSBAU0laRV9UX1RZUEVACitTVFJJUCA9IEBTVFJJUEAKK1VJQyA9IEBVSUNACitVSUNoZWxwID0gQFVJQ2hlbHBACitWRVJTSU9OID0gQFZFUlNJT05ACitYTUtNRiA9IEBYTUtNRkAKK1hNTF9DQVRBTE9HID0gQFhNTF9DQVRBTE9HQAorWFNMVFBST0MgPSBAWFNMVFBST0NACitYU0xUUFJPQ19GTEFHUyA9IEBYU0xUUFJPQ19GTEFHU0AKK1hfQ0ZMQUdTID0gQFhfQ0ZMQUdTQAorWF9FWFRSQV9MSUJTID0gQFhfRVhUUkFfTElCU0AKK1hfTElCUyA9IEBYX0xJQlNACitYX1BSRV9MSUJTID0gQFhfUFJFX0xJQlNACithYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAorYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAorYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAorYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACithY19jdF9DQyA9IEBhY19jdF9DQ0AKK2FjX2N0X0NYWCA9IEBhY19jdF9DWFhACithY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACithbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKK2FtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACithbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAorYW1fX3RhciA9IEBhbV9fdGFyQAorYW1fX3VudGFyID0gQGFtX191bnRhckAKK2JpbmRpciA9IEBiaW5kaXJACitidWlsZCA9IEBidWlsZEAKK2J1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAorYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKK2J1aWxkX29zID0gQGJ1aWxkX29zQAorYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKK2J1aWxkZGlyID0gQGJ1aWxkZGlyQAorZGF0YWRpciA9IEBkYXRhZGlyQAorZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACitkb2NkaXIgPSBAZG9jZGlyQAorZHZpZGlyID0gQGR2aWRpckAKK2V4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAoraG9zdCA9IEBob3N0QAoraG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAoraG9zdF9jcHUgPSBAaG9zdF9jcHVACitob3N0X29zID0gQGhvc3Rfb3NACitob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKK2h0bWxkaXIgPSBAaHRtbGRpckAKK2luY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKK2luZm9kaXIgPSBAaW5mb2RpckAKK2luc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKK2xpYmRpciA9IEBsaWJkaXJACitsaWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACitsb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAorbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAorbHRfRUNITyA9IEBsdF9FQ0hPQAorbWFuZGlyID0gQG1hbmRpckAKK21rZGlyX3AgPSBAbWtkaXJfcEAKK29sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKK3BkZmRpciA9IEBwZGZkaXJACitwcmVmaXggPSBAcHJlZml4QAorcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAorcHNkaXIgPSBAcHNkaXJACitzYmluZGlyID0gQHNiaW5kaXJACitzaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKK3NyY2RpciA9IEBzcmNkaXJACitzeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACit0YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAordG9wX2J1aWxkX3ByZWZpeCA9IEB0b3BfYnVpbGRfcHJlZml4QAordG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKK3RvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKK3RvcGRpciA9IEB0b3BkaXJACitTVUJESVJTID0gLiB0ZXN0cworQU1fQ1BQRkxBR1MgPSAtSSAke3RvcF9zcmNkaXJ9L2xpYm9wCitBTV9DRkxBR1MgPSBAT1BfQ0ZMQUdTQAorbm9pbnN0X0xJQlJBUklFUyA9IGxpYnV0aWwuYQorbGlidXRpbF9hX1NPVVJDRVMgPSBcCisJb3BfZGV2aWNlaW8uYyBcCisJb3BfbG9ja2ZpbGUuYyBcCisJb3BfZmlsZS5jIFwKKwlvcF9maWxlaW8uYyBcCisJb3BfZ2V0X3RpbWUuYyBcCisJb3BfbGliaWJlcnR5LmMgXAorCW9wX3BvcHQuYyBcCisJb3Bfc3RyaW5nLmMgXAorCW9wX2NwdWZyZXEuYyBcCisJb3BfZGV2aWNlaW8uaCBcCisJb3BfZmlsZWlvLmggXAorCW9wX2xpYmliZXJ0eS5oIFwKKwlvcF9sb2NrZmlsZS5oIFwKKwlvcF90eXBlcy5oIFwKKwlvcF9maWxlLmggXAorCW9wX2dldF90aW1lLmggXAorCW9wX2xpc3QuaCBcCisJb3BfcG9wdC5oIFwKKwlvcF9zdHJpbmcuaCBcCisJb3BfY3B1ZnJlcS5oIFwKKwlvcF92ZXJzaW9uLmMgXAorCW9wX3ZlcnNpb24uaCBcCisJb3BfZ3Jvd2FibGVfYnVmZmVyLmMgXAorCW9wX2dyb3dhYmxlX2J1ZmZlci5oCisKK2FsbDogYWxsLXJlY3Vyc2l2ZQorCisuU1VGRklYRVM6CisuU1VGRklYRVM6IC5jIC5sbyAubyAub2JqCiskKHNyY2RpcikvTWFrZWZpbGUuaW46ICAkKHNyY2RpcikvTWFrZWZpbGUuYW0gICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCUBmb3IgZGVwIGluICQ/OyBkbyBcCisJICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKKwkgICAgKiQkZGVwKikgXAorCSAgICAgICggY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoICkgXAorCSAgICAgICAgJiYgeyBpZiB0ZXN0IC1mICRAOyB0aGVuIGV4aXQgMDsgZWxzZSBicmVhazsgZmk7IH07IFwKKwkgICAgICBleGl0IDE7OyBcCisJICBlc2FjOyBcCisJZG9uZTsgXAorCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZm9yZWlnbiBsaWJ1dGlsL01ha2VmaWxlJzsgXAorCSQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmIFwKKwkgICQoQVVUT01BS0UpIC0tZm9yZWlnbiBsaWJ1dGlsL01ha2VmaWxlCisuUFJFQ0lPVVM6IE1ha2VmaWxlCitNYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCisJQGNhc2UgJyQ/JyBpbiBcCisJICAqY29uZmlnLnN0YXR1cyopIFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoOzsgXAorCSAgKikgXAorCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCisJZXNhYzsKKworJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2RpcikvY29uZmlndXJlICQoQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCisKKyQodG9wX3NyY2RpcikvY29uZmlndXJlOiAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCiskKEFDTE9DQUxfTTQpOiAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorJChhbV9fYWNsb2NhbF9tNF9kZXBzKToKKworY2xlYW4tbm9pbnN0TElCUkFSSUVTOgorCS10ZXN0IC16ICIkKG5vaW5zdF9MSUJSQVJJRVMpIiB8fCBybSAtZiAkKG5vaW5zdF9MSUJSQVJJRVMpCitsaWJ1dGlsLmE6ICQobGlidXRpbF9hX09CSkVDVFMpICQobGlidXRpbF9hX0RFUEVOREVOQ0lFUykgCisJLXJtIC1mIGxpYnV0aWwuYQorCSQobGlidXRpbF9hX0FSKSBsaWJ1dGlsLmEgJChsaWJ1dGlsX2FfT0JKRUNUUykgJChsaWJ1dGlsX2FfTElCQUREKQorCSQoUkFOTElCKSBsaWJ1dGlsLmEKKworbW9zdGx5Y2xlYW4tY29tcGlsZToKKwktcm0gLWYgKi4kKE9CSkVYVCkKKworZGlzdGNsZWFuLWNvbXBpbGU6CisJLXJtIC1mICoudGFiLmMKKworQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL29wX2NwdWZyZXEuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL29wX2RldmljZWlvLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9vcF9maWxlLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9vcF9maWxlaW8uUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL29wX2dldF90aW1lLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9vcF9ncm93YWJsZV9idWZmZXIuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL29wX2xpYmliZXJ0eS5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvb3BfbG9ja2ZpbGUuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL29wX3BvcHQuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL29wX3N0cmluZy5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvb3BfdmVyc2lvbi5Qb0BhbV9fcXVvdGVACisKKy5jLm86CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJCouVHBvIC1jIC1vICRAICQ8CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENPTVBJTEUpIC1jICQ8CisKKy5jLm9iajoKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDT01QSUxFKSAtYyBgJChDWUdQQVRIX1cpICckPCdgCisKKy5jLmxvOgorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMVENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJCouVHBvIC1jIC1vICRAICQ8CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTFRDT01QSUxFKSAtYyAtbyAkQCAkPAorCittb3N0bHljbGVhbi1saWJ0b29sOgorCS1ybSAtZiAqLmxvCisKK2NsZWFuLWxpYnRvb2w6CisJLXJtIC1yZiAubGlicyBfbGlicworCisjIFRoaXMgZGlyZWN0b3J5J3Mgc3ViZGlyZWN0b3JpZXMgYXJlIG1vc3RseSBpbmRlcGVuZGVudDsgeW91IGNhbiBjZAorIyBpbnRvIHRoZW0gYW5kIHJ1biBgbWFrZScgd2l0aG91dCBnb2luZyB0aHJvdWdoIHRoaXMgTWFrZWZpbGUuCisjIFRvIGNoYW5nZSB0aGUgdmFsdWVzIG9mIGBtYWtlJyB2YXJpYWJsZXM6IGluc3RlYWQgb2YgZWRpdGluZyBNYWtlZmlsZXMsCisjICgxKSBpZiB0aGUgdmFyaWFibGUgaXMgc2V0IGluIGBjb25maWcuc3RhdHVzJywgZWRpdCBgY29uZmlnLnN0YXR1cycKKyMgICAgICh3aGljaCB3aWxsIGNhdXNlIHRoZSBNYWtlZmlsZXMgdG8gYmUgcmVnZW5lcmF0ZWQgd2hlbiB5b3UgcnVuIGBtYWtlJyk7CisjICgyKSBvdGhlcndpc2UsIHBhc3MgdGhlIGRlc2lyZWQgdmFsdWVzIG9uIHRoZSBgbWFrZScgY29tbWFuZCBsaW5lLgorJChSRUNVUlNJVkVfVEFSR0VUUyk6CisJQGZhaWw9IGZhaWxjb209J2V4aXQgMSc7IFwKKwlmb3IgZiBpbiB4ICQkTUFLRUZMQUdTOyBkbyBcCisJICBjYXNlICQkZiBpbiBcCisJICAgICo9KiB8IC0tWyFrXSopOzsgXAorCSAgICAqayopIGZhaWxjb209J2ZhaWw9eWVzJzs7IFwKKwkgIGVzYWM7IFwKKwlkb25lOyBcCisJZG90X3NlZW49bm87IFwKKwl0YXJnZXQ9YGVjaG8gJEAgfCBzZWQgcy8tcmVjdXJzaXZlLy9gOyBcCisJbGlzdD0nJChTVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICBlY2hvICJNYWtpbmcgJCR0YXJnZXQgaW4gJCRzdWJkaXIiOyBcCisJICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAiLiI7IHRoZW4gXAorCSAgICBkb3Rfc2Vlbj15ZXM7IFwKKwkgICAgbG9jYWxfdGFyZ2V0PSIkJHRhcmdldC1hbSI7IFwKKwkgIGVsc2UgXAorCSAgICBsb2NhbF90YXJnZXQ9IiQkdGFyZ2V0IjsgXAorCSAgZmk7IFwKKwkgICgkKGFtX19jZCkgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgJCRsb2NhbF90YXJnZXQpIFwKKwkgIHx8IGV2YWwgJCRmYWlsY29tOyBcCisJZG9uZTsgXAorCWlmIHRlc3QgIiQkZG90X3NlZW4iID0gIm5vIjsgdGhlbiBcCisJICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSAiJCR0YXJnZXQtYW0iIHx8IGV4aXQgMTsgXAorCWZpOyB0ZXN0IC16ICIkJGZhaWwiCisKKyQoUkVDVVJTSVZFX0NMRUFOX1RBUkdFVFMpOgorCUBmYWlsPSBmYWlsY29tPSdleGl0IDEnOyBcCisJZm9yIGYgaW4geCAkJE1BS0VGTEFHUzsgZG8gXAorCSAgY2FzZSAkJGYgaW4gXAorCSAgICAqPSogfCAtLVsha10qKTs7IFwKKwkgICAgKmsqKSBmYWlsY29tPSdmYWlsPXllcyc7OyBcCisJICBlc2FjOyBcCisJZG9uZTsgXAorCWRvdF9zZWVuPW5vOyBcCisJY2FzZSAiJEAiIGluIFwKKwkgIGRpc3RjbGVhbi0qIHwgbWFpbnRhaW5lci1jbGVhbi0qKSBsaXN0PSckKERJU1RfU1VCRElSUyknIDs7IFwKKwkgICopIGxpc3Q9JyQoU1VCRElSUyknIDs7IFwKKwllc2FjOyBcCisJcmV2PScnOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAorCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gIi4iOyB0aGVuIDo7IGVsc2UgXAorCSAgICByZXY9IiQkc3ViZGlyICQkcmV2IjsgXAorCSAgZmk7IFwKKwlkb25lOyBcCisJcmV2PSIkJHJldiAuIjsgXAorCXRhcmdldD1gZWNobyAkQCB8IHNlZCBzLy1yZWN1cnNpdmUvL2A7IFwKKwlmb3Igc3ViZGlyIGluICQkcmV2OyBkbyBcCisJICBlY2hvICJNYWtpbmcgJCR0YXJnZXQgaW4gJCRzdWJkaXIiOyBcCisJICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAiLiI7IHRoZW4gXAorCSAgICBsb2NhbF90YXJnZXQ9IiQkdGFyZ2V0LWFtIjsgXAorCSAgZWxzZSBcCisJICAgIGxvY2FsX3RhcmdldD0iJCR0YXJnZXQiOyBcCisJICBmaTsgXAorCSAgKCQoYW1fX2NkKSAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSAkJGxvY2FsX3RhcmdldCkgXAorCSAgfHwgZXZhbCAkJGZhaWxjb207IFwKKwlkb25lICYmIHRlc3QgLXogIiQkZmFpbCIKK3RhZ3MtcmVjdXJzaXZlOgorCWxpc3Q9JyQoU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAorCSAgdGVzdCAiJCRzdWJkaXIiID0gLiB8fCAoJChhbV9fY2QpICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIHRhZ3MpOyBcCisJZG9uZQorY3RhZ3MtcmVjdXJzaXZlOgorCWxpc3Q9JyQoU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAorCSAgdGVzdCAiJCRzdWJkaXIiID0gLiB8fCAoJChhbV9fY2QpICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGN0YWdzKTsgXAorCWRvbmUKKworSUQ6ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKExJU1ApICQoVEFHU19GSUxFUykKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKwkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKwlta2lkIC1mSUQgJCR1bmlxdWUKK3RhZ3M6IFRBR1MKKworVEFHUzogdGFncy1yZWN1cnNpdmUgJChIRUFERVJTKSAkKFNPVVJDRVMpICAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCisJCSQoVEFHU19GSUxFUykgJChMSVNQKQorCXNldCB4OyBcCisJaGVyZT1gcHdkYDsgXAorCWlmICgkKEVUQUdTKSAtLWV0YWdzLWluY2x1ZGUgLS12ZXJzaW9uKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gXAorCSAgaW5jbHVkZV9vcHRpb249LS1ldGFncy1pbmNsdWRlOyBcCisJICBlbXB0eV9maXg9LjsgXAorCWVsc2UgXAorCSAgaW5jbHVkZV9vcHRpb249LS1pbmNsdWRlOyBcCisJICBlbXB0eV9maXg9OyBcCisJZmk7IFwKKwlsaXN0PSckKFNVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKwkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9IC47IHRoZW4gOjsgZWxzZSBcCisJICAgIHRlc3QgISAtZiAkJHN1YmRpci9UQUdTIHx8IFwKKwkgICAgICBzZXQgIiQkQCIgIiQkaW5jbHVkZV9vcHRpb249JCRoZXJlLyQkc3ViZGlyL1RBR1MiOyBcCisJICBmaTsgXAorCWRvbmU7IFwKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCisJICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCisJc2hpZnQ7IFwKKwlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCQqJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAorCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAorCSAgaWYgdGVzdCAkJCMgLWd0IDA7IHRoZW4gXAorCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCisJICAgICAgIiQkQCIgJCR1bmlxdWU7IFwKKwkgIGVsc2UgXAorCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCisJICAgICAgJCR1bmlxdWU7IFwKKwkgIGZpOyBcCisJZmkKK2N0YWdzOiBDVEFHUworQ1RBR1M6IGN0YWdzLXJlY3Vyc2l2ZSAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKKwkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHVuaXF1ZSIgXAorCSAgfHwgJChDVEFHUykgJChDVEFHU0ZMQUdTKSAkKEFNX0NUQUdTRkxBR1MpICQoQ1RBR1NfQVJHUykgXAorCSAgICAgJCR1bmlxdWUKKworR1RBR1M6CisJaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKKwkgICYmICQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpIFwKKwkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgIiQkaGVyZSIKKworZGlzdGNsZWFuLXRhZ3M6CisJLXJtIC1mIFRBR1MgSUQgR1RBR1MgR1JUQUdTIEdTWU1TIEdQQVRIIHRhZ3MKKworZGlzdGRpcjogJChESVNURklMRVMpCisJQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwlsaXN0PSckKERJU1RGSUxFUyknOyBcCisJICBkaXN0X2ZpbGVzPWBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRmaWxlOyBkb25lIHwgXAorCSAgc2VkIC1lICJzfF4kJHNyY2RpcnN0cmlwL3x8O3QiIFwKKwkgICAgICAtZSAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3w7dCJgOyBcCisJY2FzZSAkJGRpc3RfZmlsZXMgaW4gXAorCSAgKi8qKSAkKE1LRElSX1ApIGBlY2hvICIkJGRpc3RfZmlsZXMiIHwgXAorCQkJICAgc2VkICcvXC8vIWQ7c3xefCQoZGlzdGRpcikvfDtzLC9bXi9dKiQkLCwnIHwgXAorCQkJICAgc29ydCAtdWAgOzsgXAorCWVzYWM7IFwKKwlmb3IgZmlsZSBpbiAkJGRpc3RfZmlsZXM7IGRvIFwKKwkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKKwkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCisJICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCisJICAgIGlmIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRmaWxlIjsgdGhlbiBcCisJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisJICAgIGZpOyBcCisJICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAorCSAgICAgIGNwIC1mcFIgJChzcmNkaXIpLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKwkgICAgZmk7IFwKKwkgICAgY3AgLWZwUiAkJGQvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorCSAgZWxzZSBcCisJICAgIHRlc3QgLWYgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGV4aXQgMTsgXAorCSAgZmk7IFwKKwlkb25lCisJQGxpc3Q9JyQoRElTVF9TVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAuOyB0aGVuIDo7IGVsc2UgXAorCSAgICB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkc3ViZGlyIiBcCisJICAgIHx8ICQoTUtESVJfUCkgIiQoZGlzdGRpcikvJCRzdWJkaXIiIFwKKwkgICAgfHwgZXhpdCAxOyBcCisJICBmaTsgXAorCWRvbmUKKwlAbGlzdD0nJChESVNUX1NVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKwkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9IC47IHRoZW4gOjsgZWxzZSBcCisJICAgIGRpcjE9JCRzdWJkaXI7IGRpcjI9IiQoZGlzdGRpcikvJCRzdWJkaXIiOyBcCisJICAgICQoYW1fX3JlbGF0aXZpemUpOyBcCisJICAgIG5ld19kaXN0ZGlyPSQkcmVsZGlyOyBcCisJICAgIGRpcjE9JCRzdWJkaXI7IGRpcjI9IiQodG9wX2Rpc3RkaXIpIjsgXAorCSAgICAkKGFtX19yZWxhdGl2aXplKTsgXAorCSAgICBuZXdfdG9wX2Rpc3RkaXI9JCRyZWxkaXI7IFwKKwkgICAgZWNobyAiIChjZCAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSB0b3BfZGlzdGRpcj0iJCRuZXdfdG9wX2Rpc3RkaXIiIGRpc3RkaXI9IiQkbmV3X2Rpc3RkaXIiIFxcIjsgXAorCSAgICBlY2hvICIgICAgIGFtX19yZW1vdmVfZGlzdGRpcj06IGFtX19za2lwX2xlbmd0aF9jaGVjaz06IGFtX19za2lwX21vZGVfZml4PTogZGlzdGRpcikiOyBcCisJICAgICgkKGFtX19jZCkgJCRzdWJkaXIgJiYgXAorCSAgICAgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIFwKKwkgICAgICAgIHRvcF9kaXN0ZGlyPSIkJG5ld190b3BfZGlzdGRpciIgXAorCSAgICAgICAgZGlzdGRpcj0iJCRuZXdfZGlzdGRpciIgXAorCQlhbV9fcmVtb3ZlX2Rpc3RkaXI9OiBcCisJCWFtX19za2lwX2xlbmd0aF9jaGVjaz06IFwKKwkJYW1fX3NraXBfbW9kZV9maXg9OiBcCisJICAgICAgICBkaXN0ZGlyKSBcCisJICAgICAgfHwgZXhpdCAxOyBcCisJICBmaTsgXAorCWRvbmUKK2NoZWNrLWFtOiBhbGwtYW0KK2NoZWNrOiBjaGVjay1yZWN1cnNpdmUKK2FsbC1hbTogTWFrZWZpbGUgJChMSUJSQVJJRVMpCitpbnN0YWxsZGlyczogaW5zdGFsbGRpcnMtcmVjdXJzaXZlCitpbnN0YWxsZGlycy1hbToKK2luc3RhbGw6IGluc3RhbGwtcmVjdXJzaXZlCitpbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1yZWN1cnNpdmUKK2luc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLXJlY3Vyc2l2ZQordW5pbnN0YWxsOiB1bmluc3RhbGwtcmVjdXJzaXZlCisKK2luc3RhbGwtYW06IGFsbC1hbQorCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCisKK2luc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLXJlY3Vyc2l2ZQoraW5zdGFsbC1zdHJpcDoKKwkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAorCSAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCisJICBgdGVzdCAteiAnJChTVFJJUCknIHx8IFwKKwkgICAgZWNobyAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyJgIGluc3RhbGwKK21vc3RseWNsZWFuLWdlbmVyaWM6CisKK2NsZWFuLWdlbmVyaWM6CisKK2Rpc3RjbGVhbi1nZW5lcmljOgorCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQorCS10ZXN0IC4gPSAiJChzcmNkaXIpIiB8fCB0ZXN0IC16ICIkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKQorCittYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6CisJQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgorCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKK2NsZWFuOiBjbGVhbi1yZWN1cnNpdmUKKworY2xlYW4tYW06IGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBjbGVhbi1ub2luc3RMSUJSQVJJRVMgXAorCW1vc3RseWNsZWFuLWFtCisKK2Rpc3RjbGVhbjogZGlzdGNsZWFuLXJlY3Vyc2l2ZQorCS1ybSAtcmYgLi8kKERFUERJUikKKwktcm0gLWYgTWFrZWZpbGUKK2Rpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAorCWRpc3RjbGVhbi10YWdzCisKK2R2aTogZHZpLXJlY3Vyc2l2ZQorCitkdmktYW06CisKK2h0bWw6IGh0bWwtcmVjdXJzaXZlCisKK2h0bWwtYW06CisKK2luZm86IGluZm8tcmVjdXJzaXZlCisKK2luZm8tYW06CisKK2luc3RhbGwtZGF0YS1hbToKKworaW5zdGFsbC1kdmk6IGluc3RhbGwtZHZpLXJlY3Vyc2l2ZQorCitpbnN0YWxsLWR2aS1hbToKKworaW5zdGFsbC1leGVjLWFtOgorCitpbnN0YWxsLWh0bWw6IGluc3RhbGwtaHRtbC1yZWN1cnNpdmUKKworaW5zdGFsbC1odG1sLWFtOgorCitpbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1yZWN1cnNpdmUKKworaW5zdGFsbC1pbmZvLWFtOgorCitpbnN0YWxsLW1hbjoKKworaW5zdGFsbC1wZGY6IGluc3RhbGwtcGRmLXJlY3Vyc2l2ZQorCitpbnN0YWxsLXBkZi1hbToKKworaW5zdGFsbC1wczogaW5zdGFsbC1wcy1yZWN1cnNpdmUKKworaW5zdGFsbC1wcy1hbToKKworaW5zdGFsbGNoZWNrLWFtOgorCittYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLXJlY3Vyc2l2ZQorCS1ybSAtcmYgLi8kKERFUERJUikKKwktcm0gLWYgTWFrZWZpbGUKK21haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKKworbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLXJlY3Vyc2l2ZQorCittb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIFwKKwltb3N0bHljbGVhbi1saWJ0b29sCisKK3BkZjogcGRmLXJlY3Vyc2l2ZQorCitwZGYtYW06CisKK3BzOiBwcy1yZWN1cnNpdmUKKworcHMtYW06CisKK3VuaW5zdGFsbC1hbToKKworLk1BS0U6ICQoUkVDVVJTSVZFX0NMRUFOX1RBUkdFVFMpICQoUkVDVVJTSVZFX1RBUkdFVFMpIGN0YWdzLXJlY3Vyc2l2ZSBcCisJaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwIHRhZ3MtcmVjdXJzaXZlCisKKy5QSE9OWTogJChSRUNVUlNJVkVfQ0xFQU5fVEFSR0VUUykgJChSRUNVUlNJVkVfVEFSR0VUUykgQ1RBR1MgR1RBR1MgXAorCWFsbCBhbGwtYW0gY2hlY2sgY2hlY2stYW0gY2xlYW4gY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIFwKKwljbGVhbi1ub2luc3RMSUJSQVJJRVMgY3RhZ3MgY3RhZ3MtcmVjdXJzaXZlIGRpc3RjbGVhbiBcCisJZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLWxpYnRvb2wgXAorCWRpc3RjbGVhbi10YWdzIGRpc3RkaXIgZHZpIGR2aS1hbSBodG1sIGh0bWwtYW0gaW5mbyBpbmZvLWFtIFwKKwlpbnN0YWxsIGluc3RhbGwtYW0gaW5zdGFsbC1kYXRhIGluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBcCisJaW5zdGFsbC1kdmktYW0gaW5zdGFsbC1leGVjIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgXAorCWluc3RhbGwtaHRtbC1hbSBpbnN0YWxsLWluZm8gaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIFwKKwlpbnN0YWxsLXBkZiBpbnN0YWxsLXBkZi1hbSBpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gXAorCWluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBcCisJaW5zdGFsbGRpcnMtYW0gbWFpbnRhaW5lci1jbGVhbiBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgXAorCW1vc3RseWNsZWFuIG1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCisJbW9zdGx5Y2xlYW4tbGlidG9vbCBwZGYgcGRmLWFtIHBzIHBzLWFtIHRhZ3MgdGFncy1yZWN1cnNpdmUgXAorCXVuaW5zdGFsbCB1bmluc3RhbGwtYW0KKworCisjIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgorIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCisuTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9saWJ1dGlsL29wX2NwdWZyZXEuYyBiL29wcm9maWxlLTAuOS43L2xpYnV0aWwvb3BfY3B1ZnJlcS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3Y2ZlZTQKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9saWJ1dGlsL29wX2NwdWZyZXEuYwpAQCAtMCwwICsxLDEzMyBAQAorLyoqCisgKiBAZmlsZSBvcF9jcHVmcmVxLmMKKyAqIGdldCBjcHUgZnJlcXVlbmN5IGRlZmluaXRpb24KKyAqCisgKiBAcmVtYXJrIENvcHlyaWdodCAyMDExIE9Qcm9maWxlIGF1dGhvcnMKKyAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCisgKgorICogQGF1dGhvciBKb2huIExldm9uCisgKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKKyAqIEBhdXRob3IgU3VyYXZlZSBTdXRoaWt1bHBhbml0CisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKKyNpbmNsdWRlICJvcF9maWxlaW8uaCIKKworLyoKKyAqIFVzZSBmcmVxdWVuY3kgaW5mb3JtYXRpb24gZnJvbSAvcHJvYy9jcHVpbmZvLiBUaGlzIHNob3VsZCBiZSBhdmFpbGFibGUgaW4gbW9zdCBjYXNlLgorICogSG93ZXZlciwgdGhpcyBudW1iZXIgaXMgdGhlIGN1cnJlbnQgY3B1IGZyZXF1ZW5jeSB3aGljaCBjb3VsZCBiZSBpbiB0aGUgaWRsZSBzdGF0ZS4KKyAqIFdlIHNob3VsZCBhY3R1YWxseSByZXBvcnQgdGhlIG1heCBmcmVxdWVuY3kgYmVjYXVzZSB0aGUgY3B1IHNob3VsZCBzd2l0Y2ggaW50byB0aGUKKyAqIGhpZ2hlc3QgcG93ZXIgc3RhdGUgd2hlbiBydW5uaW5nLgorICovCitzdGF0aWMgZG91YmxlIG9wX2NwdV9mcmVxX2NwdWluZm8odm9pZCkKK3sKKwlkb3VibGUgZnZhbCA9IDAuMDsKKwl1bnNpZ25lZCBsb25nIHV2YWw7CisJY2hhciAqIGxpbmUgPSBOVUxMOworCisJRklMRSAqIGZwID0gb3BfdHJ5X29wZW5fZmlsZSgiL3Byb2MvY3B1aW5mbyIsICJyIik7CisJaWYgKCFmcCkKKwkJcmV0dXJuIDAuMDsKKworCXdoaWxlICgxKSB7CisJCWxpbmUgPSBvcF9nZXRfbGluZShmcCk7CisKKwkJaWYgKCFsaW5lKQorCQkJYnJlYWs7CisKKwkJaWYgKGxpbmVbMF0gPT0gJ1wwJykgeworCQkJZnJlZShsaW5lKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogeDg2L3BhcmlzYy9pYTY0L3g4Nl82NCAqLworCQlpZiAoc3NjYW5mKGxpbmUsICJjcHUgTUh6IDogJWxmIiwgJmZ2YWwpID09IDEpCisJCQlicmVhazsKKwkJLyogcHBjL3BwYzY0ICovCisJCWlmIChzc2NhbmYobGluZSwgImNsb2NrIDogJWxmTUh6IiwgJmZ2YWwpID09IDEpCisJCQlicmVhazsKKwkJLyogYWxwaGEgKi8KKwkJaWYgKHNzY2FuZihsaW5lLCAiY3ljbGUgZnJlcXVlbmN5IFtIel0gOiAlbHUiLCAmdXZhbCkgPT0gMSkgeworCQkJZnZhbCA9IHV2YWwgLyAxRTY7CisJCQlicmVhazsKKwkJfQorCQkvKiBzcGFyYzY0IGlmIENPTkZJR19TTVAgb25seSAqLworCQlpZiAoc3NjYW5mKGxpbmUsICJDcHUwQ2xrVGNrIDogJWx4IiwgJnV2YWwpID09IDEpIHsKKwkJCWZ2YWwgPSB1dmFsIC8gMUU2OworCQkJYnJlYWs7CisJCX0KKwkJLyogbWlwcyBpbmNsdWRpbmcgbG9vbmdzb24yICovCisJCWlmIChzc2NhbmYobGluZSwgIkJvZ29NSVBTCQk6ICVsdSIsICZ1dmFsKSA9PSAxKSB7CisJCQlmdmFsID0gdXZhbCAqIDMgLyAyOworCQkJYnJlYWs7CisJCX0KKwkJLyogczM5MCBkb2Vzbid0IHByb3ZpZGUgY3B1IGZyZXEsIGNoZWNrZWQgdXAgdG8gMi42LXRlc3Q0ICovCisKKwkJZnJlZShsaW5lKTsKKwl9CisKKwlpZiAobGluZSkKKwkJZnJlZShsaW5lKTsKKwlvcF9jbG9zZV9maWxlKGZwKTsKKworCXJldHVybiBmdmFsOworfQorCisKKy8qCisgKiBVc2UgZnJlcXVlbmN5IGluZm9ybWF0aW9uIGZyb20gL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvY3B1MC9jcHVmcmVxL2NwdWluZm9fbWF4X2ZyZXEKKyAqIFRoaXMgbnVtYmVyIGlzIHRoZSBtYXhpbXVtIGNwdSBmcmVxdWVuY3kgb2YgdGhlIHByb2Nlc3Nvci4KKyAqLworc3RhdGljIGRvdWJsZSBvcF9jcHVfZnJlcV9zeXNfZGV2aWNlcyh2b2lkKQoreworCWRvdWJsZSBmdmFsID0gMC4wOworCWNoYXIgKiBsaW5lID0gTlVMTDsKKworCUZJTEUgKiBmcCA9IG9wX3RyeV9vcGVuX2ZpbGUoIi9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdTAvY3B1ZnJlcS9jcHVpbmZvX21heF9mcmVxIiwgInIiKTsKKwlpZiAoIWZwKQorCQlyZXR1cm4gMC4wOworCisJd2hpbGUgKDEpIHsKKwkJbGluZSA9IG9wX2dldF9saW5lKGZwKTsKKworCQlpZiAoIWxpbmUpCisJCQlicmVhazsKKworCQlpZiAobGluZVswXSA9PSAnXDAnKSB7CisJCQlmcmVlKGxpbmUpOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAoc3NjYW5mKGxpbmUsICIlbGYiLCAmZnZhbCkgPT0gMSkKKwkJCWJyZWFrOworCisJCWZyZWUobGluZSk7CisJfQorCisJaWYgKGxpbmUpCisJCWZyZWUobGluZSk7CisJb3BfY2xvc2VfZmlsZShmcCk7CisKKwlyZXR1cm4gZnZhbDsKK30KKworCitkb3VibGUgb3BfY3B1X2ZyZXF1ZW5jeSh2b2lkKQoreworCS8qCisJICogVHlwaWNhbGx5LCBzeXN0ZW0gY2hhbmdlcyB0aGUgZnJlcXVlbmN5IHNjYWxpbmcgb2YgdGhlIGNwdXMKKwkgKiBiYXNlZCBvbiB0aGUgd29ya2xvYWQuICAvcHJvYy9jcHVpbmZvIHJlcG9ydHMgdGhlIGN1cnJlbnQKKwkgKiBmcmVxdWVuY3kgdmFsdWUgd2hpY2ggbWlnaHQgbm90IGJlIGF0IHRoZSBtYXhpbXVtIGF0IHRoZSB0aW1lCisJICogb2YgcXVlcnkuICBTaW5jZSBjcHUgc3dpdGNoIGludG8gcnVubmluZyBzdGF0ZSB3aXRoIG1heCBmcmVxdWVuY3kKKwkgKiB3aGVuIHVuZGVyIHdvcmtsb2FkLCB3ZSBzaG91bGQgbWFrZSBzdXJlIHRvIHJlcG9ydCB0aGUgbWF4IGZyZXF1ZW5jeQorCSAqIHZhbHVlIGFjcXVpcmluZyBmcm9tIC9zeXMvZGV2aWNlcyB3aGVuIGF2YWlsYWJsZS4KKwkgKi8KKworCWRvdWJsZSBmcmVxID0gb3BfY3B1X2ZyZXFfc3lzX2RldmljZXMoKTsKKwlpZiAoZnJlcSA9PSAwKSB7CisJCWZyZXEgPSBvcF9jcHVfZnJlcV9jcHVpbmZvKCk7CisJfQorCXJldHVybiBmcmVxOworfQpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvbGlidXRpbC9vcF9jcHVmcmVxLmggYi9vcHJvZmlsZS0wLjkuNy9saWJ1dGlsL29wX2NwdWZyZXEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjg3Njg4Ci0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvbGlidXRpbC9vcF9jcHVmcmVxLmgKQEAgLTAsMCArMSwzMSBAQAorLyoqCisgKiBAZmlsZSBvcF9jcHVmcmVxLmgKKyAqIGdldCBjcHUgZnJlcXVlbmN5IGRlY2xhcmF0aW9uCisgKgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAxMSBPUHJvZmlsZSBhdXRob3JzCisgKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORworICoKKyAqIEBhdXRob3IgSm9obiBMZXZvbgorICogQGF1dGhvciBQaGlsaXBwZSBFbGllCisgKiBAYXV0aG9yIFN1cmF2ZWUgU3V0aGlrdWxwYW5pdAorICovCisKKyNpZm5kZWYgT1BfQ1BVRlJFUV9ICisjZGVmaW5lIE9QX0NQVUZSRVFfSAorCisjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qCisgKiByZXR1cm4gdGhlIGVzdGltYXRlZCBjcHUgZnJlcXVlbmN5IGluIE1oeiwKKyAqIHJldHVybiAwIGlmIHRoaXMgaW5mb3JtYXRpb24KKyAqIGlzIG5vdCBhdmFsYWlibGUgZS5nLiBzcGFyYzY0IHdpdGggYSBub24gU01QIGtlcm5lbAorICovCitkb3VibGUgb3BfY3B1X2ZyZXF1ZW5jeSh2b2lkKTsKKworI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpCit9CisjZW5kaWYKKworI2VuZGlmIC8qICFPUF9DUFVGUkVRX0ggKi8KZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2xpYnV0aWwvb3BfZGV2aWNlaW8uYyBiL29wcm9maWxlLTAuOS43L2xpYnV0aWwvb3BfZGV2aWNlaW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjEwMzA0Ci0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvbGlidXRpbC9vcF9kZXZpY2Vpby5jCkBAIC0wLDAgKzEsNDIgQEAKKy8qKgorICogQGZpbGUgb3BfZGV2aWNlaW8uYworICogUmVhZGluZyBmcm9tIGEgc3BlY2lhbCBkZXZpY2UKKyAqCisgKiBAcmVtYXJrIENvcHlyaWdodCAyMDAyIE9Qcm9maWxlIGF1dGhvcnMKKyAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCisgKgorICogQGF1dGhvciBKb2huIExldm9uCisgKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKKyAqLworCisjaW5jbHVkZSAib3BfZGV2aWNlaW8uaCIKKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisKK2ZkX3Qgb3Bfb3Blbl9kZXZpY2UoY2hhciBjb25zdCAqIG5hbWUpCit7CisJcmV0dXJuIG9wZW4obmFtZSwgT19SRE9OTFkpOworfQorCisKK3NzaXplX3Qgb3BfcmVhZF9kZXZpY2UoZmRfdCBkZXZmZCwgdm9pZCAqIGJ1Ziwgc2l6ZV90IHNpemUpCit7CisJc3NpemVfdCBjb3VudDsKKworCWxzZWVrKGRldmZkLCAwLCBTRUVLX1NFVCk7CisKKwljb3VudCA9IHJlYWQoZGV2ZmQsIGJ1Ziwgc2l6ZSk7CisKKwlpZiAoY291bnQgPCAwICYmIGVycm5vICE9IEVJTlRSICYmIGVycm5vICE9IEVBR0FJTikgeworCQlwZXJyb3IoIm9wcm9maWxlZDpvcF9yZWFkX2RldmljZTogIik7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisKKwlyZXR1cm4gY291bnQ7Cit9CmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9saWJ1dGlsL29wX2RldmljZWlvLmggYi9vcHJvZmlsZS0wLjkuNy9saWJ1dGlsL29wX2RldmljZWlvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjNiZDRjMgotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2xpYnV0aWwvb3BfZGV2aWNlaW8uaApAQCAtMCwwICsxLDU3IEBACisvKioKKyAqIEBmaWxlIG9wX2RldmljZWlvLmgKKyAqIFJlYWRpbmcgZnJvbSBhIHNwZWNpYWwgZGV2aWNlCisgKgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMiBPUHJvZmlsZSBhdXRob3JzCisgKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORworICoKKyAqIEBhdXRob3IgSm9obiBMZXZvbgorICogQGF1dGhvciBQaGlsaXBwZSBFbGllCisgKi8KKworI2lmbmRlZiBPUF9ERVZJQ0VJT19ICisjZGVmaW5lIE9QX0RFVklDRUlPX0gKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisjaW5jbHVkZSAib3BfdHlwZXMuaCIKKworI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisvKioKKyAqIG9wX29wZW5fZGV2aWNlIC0gb3BlbiBhIHNwZWNpYWwgY2hhciBkZXZpY2UgZm9yIHJlYWRpbmcKKyAqIEBwYXJhbSBuYW1lICBmaWxlIG5hbWUgb2YgZGV2aWNlIGZpbGUKKyAqCisgKiBPcGVuIHRoZSBzcGVjaWFsIGZpbGUgbmFtZS4gUmV0dXJucyB0aGUgZmlsZSBkZXNjcmlwdG9yCisgKiBmb3IgdGhlIGZpbGUgb3IgLTEgb24gZXJyb3IuCisgKi8KK2ZkX3Qgb3Bfb3Blbl9kZXZpY2UoY2hhciBjb25zdCAqIG5hbWUpOworCisvKioKKyAqIG9wX3JlYWRfZGV2aWNlIC0gcmVhZCBmcm9tIGEgc3BlY2lhbCBjaGFyIGRldmljZQorICogQHBhcmFtIGRldmZkICBmaWxlIGRlc2NyaXB0b3Igb2YgZGV2aWNlCisgKiBAcGFyYW0gYnVmICBidWZmZXIKKyAqIEBwYXJhbSBzaXplICBzaXplIG9mIGJ1ZmZlcgorICoKKyAqIFJlYWQgc2l6ZSBieXRlcyBmcm9tIGEgZGV2aWNlIGludG8gYnVmZmVyIGJ1Zi4KKyAqIEEgc2VlayB0byB0aGUgc3RhcnQgb2YgdGhlIGRldmljZSBmaWxlIGlzIGRvbmUgZmlyc3QKKyAqIHRoZW4gYSByZWFkIGlzIHJlcXVlc3RlZCBpbiBvbmUgZ28gb2Ygc2l6ZSBieXRlcy4KKyAqCisgKiBJdCBpcyB0aGUgY2FsbGVyJ3MgcmVzcG9uc2liaWxpdHkgdG8gZG8gZnVydGhlciBvcF9yZWFkX2RldmljZSgpCisgKiBjYWxscyBpZiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJlYWQgaXMgbm90IHdoYXQgaXMgcmVxdWVzdGVkCisgKiAod2hlcmUgdGhpcyBpcyBhcHBsaWNhYmxlKS4KKyAqCisgKiBUaGUgbnVtYmVyIG9mIGJ5dGVzIHJlYWQgaXMgcmV0dXJuZWQsIG9yIGEgbmVnYXRpdmUgbnVtYmVyCisgKiBvbiBmYWlsdXJlIChpbiB3aGljaCBjYXNlIGVycm5vIHdpbGwgYmUgc2V0KS4gSWYgdGhlIGNhbGwgaXMKKyAqIGludGVycnVwdGVkLCB0aGVuIGVycm5vIHdpbGwgYmUgRUlOVFIsIGFuZCB0aGUgY2xpZW50IHNob3VsZAorICogYXJyYW5nZSBmb3IgcmUtc3RhcnRpbmcgdGhlIHJlYWQgaWYgbmVjZXNzYXJ5LgorICovCitzc2l6ZV90IG9wX3JlYWRfZGV2aWNlKGZkX3QgZGV2ZmQsIHZvaWQgKiBidWYsIHNpemVfdCBzaXplKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIE9QX0RFVklDRUlPX0ggKi8KZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2xpYnV0aWwvb3BfZmlsZS5jIGIvb3Byb2ZpbGUtMC45LjcvbGlidXRpbC9vcF9maWxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQ1OTk1YQotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2xpYnV0aWwvb3BfZmlsZS5jCkBAIC0wLDAgKzEsMTk1IEBACisvKioKKyAqIEBmaWxlIG9wX2ZpbGUuYworICogVXNlZnVsIGZpbGUgbWFuYWdlbWVudCBoZWxwZXJzCisgKgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMiBPUHJvZmlsZSBhdXRob3JzCisgKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORworICoKKyAqIEBhdXRob3IgSm9obiBMZXZvbgorICogQGF1dGhvciBQaGlsaXBwZSBFbGllCisgKi8KKworI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxkaXJlbnQuaD4KKyNpbmNsdWRlIDxmbm1hdGNoLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorCisjaW5jbHVkZSAib3BfZmlsZS5oIgorI2luY2x1ZGUgIm9wX2xpYmliZXJ0eS5oIgorCitpbnQgb3BfZmlsZV9yZWFkYWJsZShjaGFyIGNvbnN0ICogZmlsZSkKK3sKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwlyZXR1cm4gIXN0YXQoZmlsZSwgJnN0KSAmJiBTX0lTUkVHKHN0LnN0X21vZGUpICYmICFhY2Nlc3MoZmlsZSwgUl9PSyk7Cit9CisKKwordGltZV90IG9wX2dldF9tdGltZShjaGFyIGNvbnN0ICogZmlsZSkKK3sKKwlzdHJ1Y3Qgc3RhdCBzdDsKKworCWlmIChzdGF0KGZpbGUsICZzdCkpCisJCXJldHVybiAwOworCisJcmV0dXJuIHN0LnN0X210aW1lOworfQorCisKK2ludCBjcmVhdGVfZGlyKGNoYXIgY29uc3QgKiBkaXIpCit7CisJaWYgKG1rZGlyKGRpciwgMDc1NSkpIHsKKwkJLyogRklYTUU6IERvZXMgbm90IHZlcmlmeSBleGlzdGluZyBpcyBhIGRpciAqLworCQlpZiAoZXJybm8gPT0gRUVYSVNUKQorCQkJcmV0dXJuIDA7CisJCXJldHVybiBlcnJubzsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworCitpbnQgY3JlYXRlX3BhdGgoY2hhciBjb25zdCAqIHBhdGgpCit7CisJaW50IHJldCA9IDA7CisKKwljaGFyICogc3RyID0geHN0cmR1cChwYXRoKTsKKworCWNoYXIgKiBwb3MgPSBzdHJbMF0gPT0gJy8nID8gc3RyICsgMSA6IHN0cjsKKworCWZvciAoIDsgKHBvcyA9IHN0cmNocihwb3MsICcvJykpICE9IE5VTEw7ICsrcG9zKSB7CisJCSpwb3MgPSAnXDAnOworCQlyZXQgPSBjcmVhdGVfZGlyKHN0cik7CisJCSpwb3MgPSAnLyc7CisJCWlmIChyZXQpCisJCQlicmVhazsKKwl9CisKKwlmcmVlKHN0cik7CisJcmV0dXJuIHJldDsKK30KKworCitpbmxpbmUgc3RhdGljIGludCBpc19kb3Rfb3JfZG90ZG90KGNoYXIgY29uc3QgKiBuYW1lKQoreworCXJldHVybiBuYW1lWzBdID09ICcuJyAmJgorCQkobmFtZVsxXSA9PSAnXDAnIHx8CisJCSAobmFtZVsxXSA9PSAnLicgJiYgbmFtZVsyXSA9PSAnXDAnKSk7Cit9CisKKworLyogSWYgbm9uLW51bGwgaXMgcmV0dXJuZWQsIHRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGZyZWVpbmcKKyAqIHRoZSBtZW1vcnkgYWxsb2NhdGVkIGZvciB0aGUgcmV0dXJuIHZhbHVlLiAqLworc3RhdGljIGNoYXIgKiBtYWtlX3BhdGhuYW1lX2Zyb21fZGlyZW50KGNoYXIgY29uc3QgKiBiYXNlZGlyLAorCQkJCSAgICAgIHN0cnVjdCBkaXJlbnQgKiBlbnQsCisJCQkJICAgICAgc3RydWN0IHN0YXQgKiBzdF9idWYpCit7CisJaW50IG5hbWVfbGVuOworCWNoYXIgKiBuYW1lOworCW5hbWVfbGVuID0gc3RybGVuKGJhc2VkaXIpICsgc3RybGVuKCIvIikgKyBzdHJsZW4oZW50LT5kX25hbWUpICsgMTsKKwluYW1lID0geG1hbGxvYyhuYW1lX2xlbik7CisJc3ByaW50ZihuYW1lLCAiJXMvJXMiLCBiYXNlZGlyLAllbnQtPmRfbmFtZSk7CisJaWYgKHN0YXQobmFtZSwgc3RfYnVmKSAhPSAwKQorCXsKKwkJc3RydWN0IHN0YXQgbHN0YXRfYnVmOworCQlpbnQgZXJyID0gZXJybm87CisJCWlmIChsc3RhdChuYW1lLCAmbHN0YXRfYnVmKSA9PSAwICYmCisJCQkgICAgU19JU0xOSyhsc3RhdF9idWYuc3RfbW9kZSkpIHsKKwkJCS8vIGRhbmdsaW5nIHN5bWxpbmsgLS0gc2lsZW50bHkgaWdub3JlCisJCX0gZWxzZSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgInN0YXQgZmFpbGVkIGZvciAlcyAoJXMpXG4iLAorCQkJICAgICAgICAgICAgICAgIG5hbWUsIHN0cmVycm9yKGVycikpOworCQl9CisJCWZyZWUobmFtZSk7CisJCW5hbWUgPSBOVUxMOworCX0KKwlyZXR1cm4gbmFtZTsKK30KKworCitpbnQgZ2V0X21hdGNoaW5nX3BhdGhuYW1lcyh2b2lkICogbmFtZV9saXN0LCBnZXRfcGF0aG5hbWVfY2FsbGJhY2sgZ2V0cGF0aG5hbWUsCisJCQkgICBjaGFyIGNvbnN0ICogYmFzZV9kaXIsIGNoYXIgY29uc3QgKiBmaWx0ZXIsCisJCQkgICBlbnVtIHJlY3Vyc2lvbl90eXBlIHJlY3Vyc2lvbikKK3sKKy8qIFRoZSBhbGdvcml0aG0gYmVsb3cgZGVwZW5kcyBvbiByZWN1cnNpb24gdHlwZSAob2Ygd2hpY2ggdGhlcmUgYXJlIDMpCisgKiBhbmQgd2hldGhlciB0aGUgY3VycmVudCBkaXJlbnQgbWF0Y2hlcyB0aGUgZmlsdGVyLiAgVGhlcmUgYXJlIDYgcG9zc2libGUKKyAqIGRpZmZlcmVudCBiZWhhdmlvcnMsIHdoaWNoIGlzIHdoeSB3ZSBkZWZpbmUgNiBjYXNlIGJlbG93IGluIHRoZSBzd2l0Y2gKKyAqIHN0YXRlbWVudCBvZiB0aGUgYWxnb3JpdGhtLiAgQWN0dWFsbHksIHdoZW4gdGhlIHJlY3Vyc2lvbiB0eXBlIGlzCisgKiBNQVRDSF9ESVJfT05MWV9SRUNVUlNJT04sIHRoZSBiZWhhdmlvciBpcyB0aGUgc2FtZSwgd2hldGhlciBvciBub3QgdGhlIGRpcgorICogZW50cnkgbWF0Y2hlcyB0aGUgZmlsdGVyLiAgSG93ZXZlciwgdGhlIGJlaGF2aW9yIG9mIHRoZSByZWN1cnNpb24gdHlwZXMKKyAqIE5PX1JFQ1VSU0lPTiBhbmQgTUFUQ0hfQU5ZX0VOVFJZX1JFQ1VSU0lPTiBkbyBkZXBlbmQgb24gdGhlIGRpciBlbnRyeQorICogZmlsdGVyIG1hdGNoLCBzbyBmb3Igc2ltcGxpY2l0eSwgd2UgcGVyZm9ybSB0aGlzIG1hdGNoIGZvciBhbGwgcmVjdXJzaW9uCisgKiB0eXBlcyBhbmQgbG9naWNhbGx5IE9SIHRoZSBtYXRjaCByZXN1bHQgd2l0aCB0aGUgIHZhbHVlIG9mIHRoZSBwYXNzZWQKKyAqIHJlY3Vyc2lvbl90eXBlLgorICovCisjZGVmaW5lIE5PX01BVENIIDAKKyNkZWZpbmUgTUFUQ0ggMQorCisJRElSICogZGlyOworCXN0cnVjdCBkaXJlbnQgKiBlbnQ7CisJc3RydWN0IHN0YXQgc3RhdF9idWZmZXI7CisJaW50IG1hdGNoOworCWNoYXIgKiBuYW1lID0gTlVMTDsKKworCWlmICghKGRpciA9IG9wZW5kaXIoYmFzZV9kaXIpKSkKKwkJcmV0dXJuIC0xOworCXdoaWxlICgoZW50ID0gcmVhZGRpcihkaXIpKSAhPSAwKSB7CisJCWlmIChpc19kb3Rfb3JfZG90ZG90KGVudC0+ZF9uYW1lKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoZm5tYXRjaChmaWx0ZXIsIGVudC0+ZF9uYW1lLCAwKSA9PSAwKQorCQkJbWF0Y2ggPSAxOworCQllbHNlCisJCQltYXRjaCA9IDA7CisKKwkJc3dpdGNoIChyZWN1cnNpb24gfCBtYXRjaCkgeworCQljYXNlIE5PX1JFQ1VSU0lPTiArIE5PX01BVENIOgorCQljYXNlIE1BVENIX0FOWV9FTlRSWV9SRUNVUlNJT04gKyBOT19NQVRDSDoKKwkJCS8vIG5vdGhpbmcgdG8gZG8gYnV0IGNvbnRpbnVlIHRoZSBsb29wCisJCQlicmVhazsKKwkJY2FzZSBOT19SRUNVUlNJT04gKyBNQVRDSDoKKwkJCWdldHBhdGhuYW1lKGVudC0+ZF9uYW1lLCBuYW1lX2xpc3QpOworCQkJYnJlYWs7CisJCWNhc2UgTUFUQ0hfQU5ZX0VOVFJZX1JFQ1VSU0lPTiArIE1BVENIOgorCQkJbmFtZSA9IG1ha2VfcGF0aG5hbWVfZnJvbV9kaXJlbnQoYmFzZV9kaXIsIGVudCwKKwkJCQkJCSAgICAgICAmc3RhdF9idWZmZXIpOworCQkJaWYgKG5hbWUpIHsKKwkJCQlpZiAoU19JU0RJUihzdGF0X2J1ZmZlci5zdF9tb2RlKSkgeworCQkJCQlnZXRfbWF0Y2hpbmdfcGF0aG5hbWVzKAorCQkJCQkJbmFtZV9saXN0LCBnZXRwYXRobmFtZSwKKwkJCQkJCW5hbWUsIGZpbHRlciwgcmVjdXJzaW9uKTsKKwkJCQl9IGVsc2UgeworCQkJCQlnZXRwYXRobmFtZShuYW1lLCBuYW1lX2xpc3QpOworCQkJCX0KKwkJCX0KKwkJCWZyZWUobmFtZSk7CisJCQlicmVhazsKKwkJY2FzZSBNQVRDSF9ESVJfT05MWV9SRUNVUlNJT04gKyBOT19NQVRDSDoKKwkJY2FzZSBNQVRDSF9ESVJfT05MWV9SRUNVUlNJT04gKyBNQVRDSDoKKwkJCW5hbWUgPSBtYWtlX3BhdGhuYW1lX2Zyb21fZGlyZW50KGJhc2VfZGlyLCBlbnQsCisJCQkJCQkgICAgICAgJnN0YXRfYnVmZmVyKTsKKwkJCWlmIChuYW1lICYmIFNfSVNESVIoc3RhdF9idWZmZXIuc3RfbW9kZSkpIHsKKwkJCQkvKiBDaGVjayBpZiBmdWxsIGRpcmVjdG9yeSBuYW1lIGNvbnRhaW5zCisJCQkJICogbWF0Y2ggdG8gdGhlIGZpbHRlcjsgaWYgc28sIGFkZCBpdCB0bworCQkJCSAqIG5hbWVfbGlzdCBhbmQgcXVpdDsgZWxzZSwgcmVjdXJzZS4KKwkJCQkgKi8KKwkJCQlpZiAoIWZubWF0Y2goZmlsdGVyLCBuYW1lLCAwKSkgeworCQkJCQlnZXRwYXRobmFtZShuYW1lLCBuYW1lX2xpc3QpOworCQkJCX0gZWxzZSB7CisJCQkJCWdldF9tYXRjaGluZ19wYXRobmFtZXMoCisJCQkJCQluYW1lX2xpc3QsIGdldHBhdGhuYW1lLAorCQkJCQkJbmFtZSwgZmlsdGVyLCByZWN1cnNpb24pOworCQkJCX0KKwkJCX0KKwkJCWZyZWUobmFtZSk7CisJCQlicmVhazsKKwkJfQorCX0KKwljbG9zZWRpcihkaXIpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9saWJ1dGlsL29wX2ZpbGUuaCBiL29wcm9maWxlLTAuOS43L2xpYnV0aWwvb3BfZmlsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyMjg2MmMKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9saWJ1dGlsL29wX2ZpbGUuaApAQCAtMCwwICsxLDEwOSBAQAorLyoqCisgKiBAZmlsZSBvcF9maWxlLmgKKyAqIFVzZWZ1bCBmaWxlIG1hbmFnZW1lbnQgaGVscGVycworICoKKyAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDIgT1Byb2ZpbGUgYXV0aG9ycworICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKKyAqCisgKiBAYXV0aG9yIEpvaG4gTGV2b24KKyAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQorICovCisKKyNpZm5kZWYgT1BfRklMRV9ICisjZGVmaW5lIE9QX0ZJTEVfSAorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKworLyoqCisgKiBvcF9maWxlX3JlYWRhYmxlIC0gaXMgYSBmaWxlIHJlYWRhYmxlCisgKiBAcGFyYW0gZmlsZSBmaWxlIG5hbWUKKyAqCisgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgZ2l2ZW4gZmlsZSBpcyByZWFkYWJsZSBhbmQgcmVndWxhci4KKyAqCisgKiBCZXdhcmUgb2YgcmFjZSBjb25kaXRpb25zICEKKyAqLworaW50IG9wX2ZpbGVfcmVhZGFibGUoY2hhciBjb25zdCAqIGZpbGUpOworCisvKioKKyAqIG9wX2dldF9tdGltZSAtIGdldCBtdGltZSBvZiBmaWxlCisgKiBAcGFyYW0gZmlsZSAgZmlsZSBuYW1lCisgKgorICogUmV0dXJucyB0aGUgbXRpbWUgb2YgdGhlIGdpdmVuIGZpbGUgb3IgMCBvbiBmYWlsdXJlCisgKi8KK3RpbWVfdCBvcF9nZXRfbXRpbWUoY2hhciBjb25zdCAqIGZpbGUpOworCisvKioKKyAqIGNyZWF0ZV9kaXIgLSBjcmVhdGUgYSBkaXJlY3RvcnkKKyAqIEBwYXJhbSBkaXIgIHRoZSBkaXJlY3RvcnkgbmFtZSB0byBjcmVhdGUKKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2Vzcy4KKyAqLworaW50IGNyZWF0ZV9kaXIoY2hhciBjb25zdCAqIGRpcik7CisKKworLyoqCisgKiBjcmVhdGVfcGF0aCAtIGNyZWF0ZSBhIHBhdGgKKyAqIEBwYXJhbSBwYXRoICB0aGUgcGF0aCB0byBjcmVhdGUKKyAqCisgKiBjcmVhdGUgZGlyZWN0b3J5IGZvciBlYWNoIGRpciBjb21wb25lbnRzIGluIHBhdGgKKyAqIHRoZSBsYXN0IHBhdGggY29tcG9uZW50IGlzIG5vdCBjb25zaWRlcmVkIGFzIGEgZGlyZWN0b3J5CisgKiBidXQgYXMgYSBmaWxlbmFtZQorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLgorICovCitpbnQgY3JlYXRlX3BhdGgoY2hhciBjb25zdCAqIHBhdGgpOworCisvKioKKyAqIENsaWVudHMgb2YgZ2V0X21hdGNoaW5nX3BhdGhuYW1lcyBtdXN0IHByb3ZpZGUgdGhlaXIgb3duIGltcGxlbWVudGF0aW9uCisgKiBvZiBnZXRfcGF0aG5hbWVfY2FsbGJhY2suCisgKi8KK3R5cGVkZWYgdm9pZCAoKmdldF9wYXRobmFtZV9jYWxsYmFjaykoY2hhciBjb25zdCAqIHBhdGhuYW1lLCB2b2lkICogbmFtZV9saXN0KTsKKworLyogVGhpcyBlbnVtIGlzIGludGVuZGVkIHNvbGVseSBmb3IgdGhlIHVzZSBvZiBnZXRfbWF0Y2hpbmdfcGF0aG5hbWVzKCksCisgKiBiaXQgMCBpcyByZXNlcnZlZCBmb3IgaW50ZXJuYWwgdXNlLi4qLworZW51bSByZWN1cnNpb25fdHlwZSB7CisJTk9fUkVDVVJTSU9OID0gMiwKKwlNQVRDSF9BTllfRU5UUllfUkVDVVJTSU9OID0gNCwKKwlNQVRDSF9ESVJfT05MWV9SRUNVUlNJT04gPSA4LAorfTsKKy8qKgorICogQHBhcmFtIG5hbWVfbGlzdCB3aGVyZSB0byBzdG9yZSByZXN1bHQKKyAqIEBwYXJhbSBnZXRfcGF0aG5hbWVfY2FsbGJhY2sgY2xpZW50LXByb3ZpZGVkIGNhbGxiYWNrIGZ1bmN0aW9uCisgKiBAcGFyYW0gYmFzZV9kaXIgZGlyZWN0b3J5IGZyb20gd2hlcmUgbG9va3VwIHN0YXJ0cworICogQHBhcmFtIGZpbHRlciBhIHBhdGhuYW1lIGZpbHRlcgorICogQHBhcmFtIHJlY3Vyc2lvbiByZWN1cnNpb25fdHlwZSAtLSBzZWUgYWJvdmUgZW51bSBhbmQgZm9sbG93aW5nIGRlc2NyaXB0aW9uOgorICoJTk9fUkVDVVJTSU9OOiAgRmluZCBtYXRjaGluZyBmaWxlcyBmcm9tIHBhc3NlZCBiYXNlX2RpciBhbmQgY2FsbAorICogICAgICAgICAgZ2V0X3BhdGhuYW1lX2NhbGxiYWNrIHRvIGFkZCBlbnRyeSB0byBuYW1lX2xpc3QgdG8gYmUgcmV0dXJuZWQuCisgKglNQVRDSF9BTllfRU5UUllfUkVDVVJTSU9OOiBTdGFydGluZyBhdCBiYXNlX2RpciwgZm9yIGVhY2ggZW50cnkgaW4gdGhlCisgKgkgICBkaXIgdGhhdCBtYXRjaGVzIHRoZSBmaWx0ZXI6IGlmIGVudHJ5IGlzIG9mIHR5cGUgJ2RpcicsIHJlY3Vyc2U7CisgKiAgICAgICAgIGVsc2UgY2FsbCBnZXRfcGF0aG5hbWVfY2FsbGJhY2sgdG8gYWRkIGVudHJ5IHRvIG5hbWVfbGlzdCB0byBiZQorICogICAgICAgICByZXR1cm5lZC4KKyAqCU1BVENIX0RJUl9PTkxZX1JFQ1VSU0lPTjogU3RhcnRpbmcgYXQgYmFzZV9kaXIsIGlmIGFuIGVudHJ5IGluIHRoZQorICogICAgICAgICBkaXIgaXMgb2YgdHlwZSAnZGlyJyBhbmQgaXRzIGNvbXBsZXRlIHBhdGhuYW1lIGNvbnRhaW5zIGEgbWF0Y2ggdG8KKyAqICAgICAgICAgdGhlIGZpbHRlciwgY2FsbCBnZXRfcGF0aG5hbWVfY2FsbGJhY2sgdG8gYWRkIGVudHJ5IHRvIG5hbWVfbGlzdCB0bworICogICAgICAgICBiZSByZXR1cm5lZDsgZWxzZSByZWN1cnNlLgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLgorICoKKyAqIFJldHVybiBhIGxpc3Qgb2YgcGF0aG5hbWVzIHVuZGVyIGJhc2VfZGlyLCBmaWx0ZXJlZCBieSBmaWx0ZXIgYW5kIG9wdGlvbmFsbHkKKyAqIGxvb2tpbmcgaW4gc3ViLWRpcmVjdG9yeS4gU2VlIGRlc2NyaXB0aW9uIGFib3ZlIG9mIHRoZSByZWN1cnNpb25fdHlwZSAKKyAqIHBhcmFtZXRlciBmb3IgbW9yZSBkZXRhaWxzLgorICogICAgTk9URTogRm9yIEMgY2xpZW50czogWW91ciBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgZ2V0X3BhdGhuYW1lX2NhbGxiYWNrCisgKiAgICAgICAgICBmdW5jdGlvbiB3aWxsIHByb2JhYmx5IGR5bmFtaWNhbGx5IGFsbG9jYXRlIHN0b3JhZ2UgZm9yIGVsZW1lbnRzCisgKiAgICAgICAgICBhZGRlZCB0byBuYW1lX2xpc3QuICBJZiBzbywgcmVtZW1iZXIgdG8gZnJlZSB0aGF0IG1lbW9yeSB3aGVuIGl0J3MKKyAqICAgICAgICAgIG5vIGxvbmdlciBuZWVkZWQuCisgKi8KK2ludCBnZXRfbWF0Y2hpbmdfcGF0aG5hbWVzKHZvaWQgKiBuYW1lX2xpc3QsIGdldF9wYXRobmFtZV9jYWxsYmFjaywKKwkJCSAgIGNoYXIgY29uc3QgKiBiYXNlX2RpciwgY2hhciBjb25zdCAqIGZpbHRlciwKKwkJCSAgIGVudW0gcmVjdXJzaW9uX3R5cGUgcmVjdXJzaW9uKTsKKworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogT1BfRklMRV9IICovCmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9saWJ1dGlsL29wX2ZpbGVpby5jIGIvb3Byb2ZpbGUtMC45LjcvbGlidXRpbC9vcF9maWxlaW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjNlMjFkCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvbGlidXRpbC9vcF9maWxlaW8uYwpAQCAtMCwwICsxLDIyOCBAQAorLyoqCisgKiBAZmlsZSBvcF9maWxlaW8uYworICogUmVhZGluZyBmcm9tIC8gd3JpdGluZyB0byBmaWxlcworICoKKyAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDIgT1Byb2ZpbGUgYXV0aG9ycworICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKKyAqCisgKiBAYXV0aG9yIEpvaG4gTGV2b24KKyAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQorICovCisKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2luY2x1ZGUgIm9wX2ZpbGVpby5oIgorCisjaW5jbHVkZSAib3BfbGliaWJlcnR5LmgiCisKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCitzdGF0aWMgRklMRSAqIG9wX2RvX29wZW5fZmlsZShjaGFyIGNvbnN0ICogbmFtZSwgY2hhciBjb25zdCAqIG1vZGUsIGludCBmYXRhbCkKK3sKKwlGSUxFICogZnA7CisKKwlmcCA9IGZvcGVuKG5hbWUsIG1vZGUpOworCisJaWYgKCFmcCkgeworCQlpZiAoZmF0YWwpIHsKKwkJCWZwcmludGYoc3RkZXJyLCJvcHJvZmlsZWQ6b3BfZG9fb3Blbl9maWxlOiAlczogJXMiLAorCQkJCW5hbWUsIHN0cmVycm9yKGVycm5vKSk7CisJCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJCX0KKwl9CisKKwlyZXR1cm4gZnA7Cit9CisKKworRklMRSAqIG9wX3RyeV9vcGVuX2ZpbGUoY2hhciBjb25zdCAqIG5hbWUsIGNoYXIgY29uc3QgKiBtb2RlKQoreworCXJldHVybiBvcF9kb19vcGVuX2ZpbGUobmFtZSwgbW9kZSwgMCk7Cit9CisKKworRklMRSAqIG9wX29wZW5fZmlsZShjaGFyIGNvbnN0ICogbmFtZSwgY2hhciBjb25zdCAqIG1vZGUpCit7CisJcmV0dXJuIG9wX2RvX29wZW5fZmlsZShuYW1lLCBtb2RlLCAxKTsKK30KKworCit2b2lkIG9wX2Nsb3NlX2ZpbGUoRklMRSAqIGZwKQoreworCWlmIChmY2xvc2UoZnApKQorCQlwZXJyb3IoIm9wcm9maWxlZDpvcF9jbG9zZV9maWxlOiAiKTsKK30KKworCit2b2lkIG9wX3dyaXRlX2ZpbGUoRklMRSAqIGZwLCB2b2lkIGNvbnN0ICogYnVmLCBzaXplX3Qgc2l6ZSkKK3sKKwlzaXplX3Qgd3JpdHRlbjsKKworCWlmIChzaXplID09IDApCisJCXJldHVybjsKKworCXdyaXR0ZW4gPSBmd3JpdGUoYnVmLCBzaXplLCAxLCBmcCk7CisKKwlpZiAod3JpdHRlbiAhPSAxKSB7CisJCWZwcmludGYoc3RkZXJyLAorCQkJIm9wcm9maWxlZDpvcF93cml0ZV9maWxlOiB3cm90ZSBsZXNzIHRoYW4gZXhwZWN0ZWQ6ICVsdSBieXRlcy5cbiIsCisJCQkodW5zaWduZWQgbG9uZylzaXplKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KK30KKworCit2b2lkIG9wX3dyaXRlX3U4KEZJTEUgKiBmcCwgdTggdmFsKQoreworCW9wX3dyaXRlX2ZpbGUoZnAsICZ2YWwsIHNpemVvZih2YWwpKTsKK30KKworCit2b2lkIG9wX3dyaXRlX3UzMihGSUxFICogZnAsIHUzMiB2YWwpCit7CisJb3Bfd3JpdGVfZmlsZShmcCwgJnZhbCwgc2l6ZW9mKHZhbCkpOworfQorCisKK3ZvaWQgb3Bfd3JpdGVfdTY0KEZJTEUgKiBmcCwgdTY0IHZhbCkKK3sKKwlvcF93cml0ZV9maWxlKGZwLCAmdmFsLCBzaXplb2YodmFsKSk7Cit9CisKKwordTMyIG9wX3JlYWRfaW50X2Zyb21fZmlsZShjaGFyIGNvbnN0ICogZmlsZW5hbWUsIGludCBmYXRhbCkKK3sKKwlGSUxFICogZnA7CisJdTMyIHZhbHVlOworCisJZnAgPSBmb3BlbihmaWxlbmFtZSwgInIiKTsKKwlpZiAoZnAgPT0gTlVMTCkgeworCQlpZiAoIWZhdGFsKQorCQkJcmV0dXJuICh1MzIpLTE7CisJCWZwcmludGYoc3RkZXJyLAorCQkJIm9wX3JlYWRfaW50X2Zyb21fZmlsZTogRmFpbGVkIHRvIG9wZW4gJXMsIHJlYXNvbiAlc1xuIiwKKwkJCWZpbGVuYW1lLCBzdHJlcnJvcihlcnJubykpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorCisJaWYgKGZzY2FuZihmcCwgIiV1IiwgJnZhbHVlKSAhPSAxKSB7CisJCWZjbG9zZShmcCk7CisJCWlmICghZmF0YWwpCisJCQlyZXR1cm4gKHUzMiktMTsKKwkJZnByaW50ZihzdGRlcnIsCisJCQkib3BfcmVhZF9pbnRfZnJvbV9maWxlOiBGYWlsZWQgdG8gY29udmVydCBjb250ZW50cyBvZiBmaWxlICVzIHRvIGludGVnZXJcbiIsCisJCQlmaWxlbmFtZSk7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisKKwlmY2xvc2UoZnApOworCisJcmV0dXJuIHZhbHVlOworfQorCisKK2NoYXIgKiBvcF9nZXRfbGluZShGSUxFICogZnApCit7CisJY2hhciAqIGJ1ZjsKKwljaGFyICogY3A7CisJaW50IGM7CisJc2l6ZV90IG1heCA9IDUxMjsKKworCWJ1ZiA9IHhtYWxsb2MobWF4KTsKKwljcCA9IGJ1ZjsKKworCXdoaWxlICgxKSB7CisJCXN3aXRjaCAoYyA9IGdldGMoZnApKSB7CisJCQljYXNlIEVPRjoKKwkJCQlmcmVlKGJ1Zik7CisJCQkJcmV0dXJuIE5VTEw7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgJ1xuJzoKKwkJCWNhc2UgJ1wwJzoKKwkJCQkqY3AgPSAnXDAnOworCQkJCXJldHVybiBidWY7CisJCQkJYnJlYWs7CisKKwkJCWRlZmF1bHQ6CisJCQkJKmNwID0gKGNoYXIpYzsKKwkJCQljcCsrOworCQkJCWlmICgoKHNpemVfdCkoY3AgLSBidWYpKSA9PSBtYXgpIHsKKwkJCQkJYnVmID0geHJlYWxsb2MoYnVmLCBtYXggKyAxMjgpOworCQkJCQljcCA9IGJ1ZiArIG1heDsKKwkJCQkJbWF4ICs9IDEyODsKKwkJCQl9CisJCQkJYnJlYWs7CisJCX0KKwl9Cit9CisKKworLyogRklYTUUgdGhlIGRlYnVnIGluZm8gc3R1ZmYgc2hvdWxkIGJlIGhhbmRsZWQgYnkgYmludXRpbHMgKi8KK3Vuc2lnbmVkIGxvbmcKK2NhbGNfY3JjMzIodW5zaWduZWQgbG9uZyBjcmMsIHVuc2lnbmVkIGNoYXIgKiBidWYsIHNpemVfdCBsZW4pCit7CisJc3RhdGljIGNvbnN0IHVuc2lnbmVkIGxvbmcgY3JjMzJfdGFibGVbMjU2XSA9CisJeworCQkweDAwMDAwMDAwLCAweDc3MDczMDk2LCAweGVlMGU2MTJjLCAweDk5MDk1MWJhLCAweDA3NmRjNDE5LAorCQkweDcwNmFmNDhmLCAweGU5NjNhNTM1LCAweDllNjQ5NWEzLCAweDBlZGI4ODMyLCAweDc5ZGNiOGE0LAorCQkweGUwZDVlOTFlLCAweDk3ZDJkOTg4LCAweDA5YjY0YzJiLCAweDdlYjE3Y2JkLCAweGU3YjgyZDA3LAorCQkweDkwYmYxZDkxLCAweDFkYjcxMDY0LCAweDZhYjAyMGYyLCAweGYzYjk3MTQ4LCAweDg0YmU0MWRlLAorCQkweDFhZGFkNDdkLCAweDZkZGRlNGViLCAweGY0ZDRiNTUxLCAweDgzZDM4NWM3LCAweDEzNmM5ODU2LAorCQkweDY0NmJhOGMwLCAweGZkNjJmOTdhLCAweDhhNjVjOWVjLCAweDE0MDE1YzRmLCAweDYzMDY2Y2Q5LAorCQkweGZhMGYzZDYzLCAweDhkMDgwZGY1LCAweDNiNmUyMGM4LCAweDRjNjkxMDVlLCAweGQ1NjA0MWU0LAorCQkweGEyNjc3MTcyLCAweDNjMDNlNGQxLCAweDRiMDRkNDQ3LCAweGQyMGQ4NWZkLCAweGE1MGFiNTZiLAorCQkweDM1YjVhOGZhLCAweDQyYjI5ODZjLCAweGRiYmJjOWQ2LCAweGFjYmNmOTQwLCAweDMyZDg2Y2UzLAorCQkweDQ1ZGY1Yzc1LCAweGRjZDYwZGNmLCAweGFiZDEzZDU5LCAweDI2ZDkzMGFjLCAweDUxZGUwMDNhLAorCQkweGM4ZDc1MTgwLCAweGJmZDA2MTE2LCAweDIxYjRmNGI1LCAweDU2YjNjNDIzLCAweGNmYmE5NTk5LAorCQkweGI4YmRhNTBmLCAweDI4MDJiODllLCAweDVmMDU4ODA4LCAweGM2MGNkOWIyLCAweGIxMGJlOTI0LAorCQkweDJmNmY3Yzg3LCAweDU4Njg0YzExLCAweGMxNjExZGFiLCAweGI2NjYyZDNkLCAweDc2ZGM0MTkwLAorIAkJMHgwMWRiNzEwNiwgMHg5OGQyMjBiYywgMHhlZmQ1MTAyYSwgMHg3MWIxODU4OSwgMHgwNmI2YjUxZiwKKwkJMHg5ZmJmZTRhNSwgMHhlOGI4ZDQzMywgMHg3ODA3YzlhMiwgMHgwZjAwZjkzNCwgMHg5NjA5YTg4ZSwKKwkJMHhlMTBlOTgxOCwgMHg3ZjZhMGRiYiwgMHgwODZkM2QyZCwgMHg5MTY0NmM5NywgMHhlNjYzNWMwMSwKKwkJMHg2YjZiNTFmNCwgMHgxYzZjNjE2MiwgMHg4NTY1MzBkOCwgMHhmMjYyMDA0ZSwgMHg2YzA2OTVlZCwKKwkJMHgxYjAxYTU3YiwgMHg4MjA4ZjRjMSwgMHhmNTBmYzQ1NywgMHg2NWIwZDljNiwgMHgxMmI3ZTk1MCwKKwkJMHg4YmJlYjhlYSwgMHhmY2I5ODg3YywgMHg2MmRkMWRkZiwgMHgxNWRhMmQ0OSwgMHg4Y2QzN2NmMywKKwkJMHhmYmQ0NGM2NSwgMHg0ZGIyNjE1OCwgMHgzYWI1NTFjZSwgMHhhM2JjMDA3NCwgMHhkNGJiMzBlMiwKKwkJMHg0YWRmYTU0MSwgMHgzZGQ4OTVkNywgMHhhNGQxYzQ2ZCwgMHhkM2Q2ZjRmYiwgMHg0MzY5ZTk2YSwKKwkJMHgzNDZlZDlmYywgMHhhZDY3ODg0NiwgMHhkYTYwYjhkMCwgMHg0NDA0MmQ3MywgMHgzMzAzMWRlNSwKKwkJMHhhYTBhNGM1ZiwgMHhkZDBkN2NjOSwgMHg1MDA1NzEzYywgMHgyNzAyNDFhYSwgMHhiZTBiMTAxMCwKKwkJMHhjOTBjMjA4NiwgMHg1NzY4YjUyNSwgMHgyMDZmODViMywgMHhiOTY2ZDQwOSwgMHhjZTYxZTQ5ZiwKKwkJMHg1ZWRlZjkwZSwgMHgyOWQ5Yzk5OCwgMHhiMGQwOTgyMiwgMHhjN2Q3YThiNCwgMHg1OWIzM2QxNywKKwkJMHgyZWI0MGQ4MSwgMHhiN2JkNWMzYiwgMHhjMGJhNmNhZCwgMHhlZGI4ODMyMCwgMHg5YWJmYjNiNiwKKwkJMHgwM2I2ZTIwYywgMHg3NGIxZDI5YSwgMHhlYWQ1NDczOSwgMHg5ZGQyNzdhZiwgMHgwNGRiMjYxNSwKKwkJMHg3M2RjMTY4MywgMHhlMzYzMGIxMiwgMHg5NDY0M2I4NCwgMHgwZDZkNmEzZSwgMHg3YTZhNWFhOCwKKwkJMHhlNDBlY2YwYiwgMHg5MzA5ZmY5ZCwgMHgwYTAwYWUyNywgMHg3ZDA3OWViMSwgMHhmMDBmOTM0NCwKKwkJMHg4NzA4YTNkMiwgMHgxZTAxZjI2OCwgMHg2OTA2YzJmZSwgMHhmNzYyNTc1ZCwgMHg4MDY1NjdjYiwKKwkJMHgxOTZjMzY3MSwgMHg2ZTZiMDZlNywgMHhmZWQ0MWI3NiwgMHg4OWQzMmJlMCwgMHgxMGRhN2E1YSwKKwkJMHg2N2RkNGFjYywgMHhmOWI5ZGY2ZiwgMHg4ZWJlZWZmOSwgMHgxN2I3YmU0MywgMHg2MGIwOGVkNSwKKwkJMHhkNmQ2YTNlOCwgMHhhMWQxOTM3ZSwgMHgzOGQ4YzJjNCwgMHg0ZmRmZjI1MiwgMHhkMWJiNjdmMSwKKwkJMHhhNmJjNTc2NywgMHgzZmI1MDZkZCwgMHg0OGIyMzY0YiwgMHhkODBkMmJkYSwgMHhhZjBhMWI0YywKKwkJMHgzNjAzNGFmNiwgMHg0MTA0N2E2MCwgMHhkZjYwZWZjMywgMHhhODY3ZGY1NSwgMHgzMTZlOGVlZiwKKwkJMHg0NjY5YmU3OSwgMHhjYjYxYjM4YywgMHhiYzY2ODMxYSwgMHgyNTZmZDJhMCwgMHg1MjY4ZTIzNiwKKwkJMHhjYzBjNzc5NSwgMHhiYjBiNDcwMywgMHgyMjAyMTZiOSwgMHg1NTA1MjYyZiwgMHhjNWJhM2JiZSwKKwkJMHhiMmJkMGIyOCwgMHgyYmI0NWE5MiwgMHg1Y2IzNmEwNCwgMHhjMmQ3ZmZhNywgMHhiNWQwY2YzMSwKKwkJMHgyY2Q5OWU4YiwgMHg1YmRlYWUxZCwgMHg5YjY0YzJiMCwgMHhlYzYzZjIyNiwgMHg3NTZhYTM5YywKKwkJMHgwMjZkOTMwYSwgMHg5YzA5MDZhOSwgMHhlYjBlMzYzZiwgMHg3MjA3Njc4NSwgMHgwNTAwNTcxMywKKwkJMHg5NWJmNGE4MiwgMHhlMmI4N2ExNCwgMHg3YmIxMmJhZSwgMHgwY2I2MWIzOCwgMHg5MmQyOGU5YiwKKwkJMHhlNWQ1YmUwZCwgMHg3Y2RjZWZiNywgMHgwYmRiZGYyMSwgMHg4NmQzZDJkNCwgMHhmMWQ0ZTI0MiwKKwkJMHg2OGRkYjNmOCwgMHgxZmRhODM2ZSwgMHg4MWJlMTZjZCwgMHhmNmI5MjY1YiwgMHg2ZmIwNzdlMSwKKwkJMHgxOGI3NDc3NywgMHg4ODA4NWFlNiwgMHhmZjBmNmE3MCwgMHg2NjA2M2JjYSwgMHgxMTAxMGI1YywKKwkJMHg4ZjY1OWVmZiwgMHhmODYyYWU2OSwgMHg2MTZiZmZkMywgMHgxNjZjY2Y0NSwgMHhhMDBhZTI3OCwKKwkJMHhkNzBkZDJlZSwgMHg0ZTA0ODM1NCwgMHgzOTAzYjNjMiwgMHhhNzY3MjY2MSwgMHhkMDYwMTZmNywKKwkJMHg0OTY5NDc0ZCwgMHgzZTZlNzdkYiwgMHhhZWQxNmE0YSwgMHhkOWQ2NWFkYywgMHg0MGRmMGI2NiwKKwkJMHgzN2Q4M2JmMCwgMHhhOWJjYWU1MywgMHhkZWJiOWVjNSwgMHg0N2IyY2Y3ZiwgMHgzMGI1ZmZlOSwKKwkJMHhiZGJkZjIxYywgMHhjYWJhYzI4YSwgMHg1M2IzOTMzMCwgMHgyNGI0YTNhNiwgMHhiYWQwMzYwNSwKKwkJMHhjZGQ3MDY5MywgMHg1NGRlNTcyOSwgMHgyM2Q5NjdiZiwgMHhiMzY2N2EyZSwgMHhjNDYxNGFiOCwKKwkJMHg1ZDY4MWIwMiwgMHgyYTZmMmI5NCwgMHhiNDBiYmUzNywgMHhjMzBjOGVhMSwgMHg1YTA1ZGYxYiwKKwkJMHgyZDAyZWY4ZAorCX07CisJdW5zaWduZWQgY2hhciAqIGVuZDsKKworCWNyYyA9IH5jcmMgJiAweGZmZmZmZmZmOworCWZvciAoZW5kID0gYnVmICsgbGVuOyBidWYgPCBlbmQ7ICsrYnVmKQorCQljcmMgPSBjcmMzMl90YWJsZVsoY3JjIF4gKmJ1ZikgJiAweGZmXSBeIChjcmMgPj4gOCk7CisJcmV0dXJuIH5jcmMgJiAweGZmZmZmZmZmOworfQpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvbGlidXRpbC9vcF9maWxlaW8uaCBiL29wcm9maWxlLTAuOS43L2xpYnV0aWwvb3BfZmlsZWlvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDliMTI2ZAotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2xpYnV0aWwvb3BfZmlsZWlvLmgKQEAgLTAsMCArMSwxNDAgQEAKKy8qKgorICogQGZpbGUgb3BfZmlsZWlvLmgKKyAqIFJlYWRpbmcgZnJvbSAvIHdyaXRpbmcgdG8gZmlsZXMKKyAqCisgKiBAcmVtYXJrIENvcHlyaWdodCAyMDAyIE9Qcm9maWxlIGF1dGhvcnMKKyAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCisgKgorICogQGF1dGhvciBKb2huIExldm9uCisgKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKKyAqLworCisjaWZuZGVmIE9QX0ZJTEVJT19ICisjZGVmaW5lIE9QX0ZJTEVJT19ICisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworI2luY2x1ZGUgIm9wX3R5cGVzLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorCisvKioKKyAqIG9wX3RyeV9vcGVuX2ZpbGUgLSBvcGVuIGEgZmlsZQorICogQHBhcmFtIG5hbWUgIGZpbGUgbmFtZQorICogQHBhcmFtIG1vZGUgIG1vZGUgc3RyaW5nCisgKgorICogT3BlbiBhIGZpbGUgbmFtZS4KKyAqIFJldHVybnMgZmlsZSBoYW5kbGUgb3IgJU5VTEwgb24gZmFpbHVyZS4KKyAqLworRklMRSAqIG9wX3RyeV9vcGVuX2ZpbGUoY2hhciBjb25zdCAqIG5hbWUsIGNoYXIgY29uc3QgKiBtb2RlKTsKKworLyoqCisgKiBvcF9vcGVuX2ZpbGUgLSBvcGVuIGEgZmlsZQorICogQHBhcmFtIG5hbWUgIGZpbGUgbmFtZQorICogQHBhcmFtIG1vZGUgIG1vZGUgc3RyaW5nCisgKgorICogT3BlbiBhIGZpbGUgbmFtZS4KKyAqIEZhaWx1cmUgdG8gb3BlbiBpcyBmYXRhbC4KKyAqLworRklMRSAqIG9wX29wZW5fZmlsZShjaGFyIGNvbnN0ICogbmFtZSwgY2hhciBjb25zdCAqIG1vZGUpOworCisvKioKKyAqIG9wX3JlYWRfaW50X2Zyb21fZmlsZSAtIHBhcnNlIGFuIEFTQ0lJIHZhbHVlIGZyb20gYSBmaWxlIGludG8gYW4gaW50ZWdlcgorICogQHBhcmFtIGZpbGVuYW1lICBuYW1lIG9mIGZpbGUgdG8gcGFyc2UgaW50ZWdlciB2YWx1ZSBmcm9tCisgKiBAcGFyYW0gZmF0YWwgIG5vbi16ZXJvIGlmIGFueSBlcnJvciBtdXN0IGJlIGZhdGFsCisgKgorICogUmVhZHMgYW4gQVNDSUkgaW50ZWdlciBmcm9tIHRoZSBnaXZlbiBmaWxlLiBJZiBhbiBlcnJvciBvY2N1ciBhbmQgZmF0YWwgaXMKKyAqIHplcm8gKHUzMiktMSBpcyByZXR1cm5lZCBlbHNlIHRoZSB2YWx1ZSByZWFkIGluIGlzIHJldHVybmVkLgorICovCit1MzIgb3BfcmVhZF9pbnRfZnJvbV9maWxlKGNoYXIgY29uc3QgKiBmaWxlbmFtZSwgaW50IGZhdGFsKTsKKworLyoqCisgKiBvcF9jbG9zZV9maWxlIC0gY2xvc2UgYSBmaWxlCisgKiBAcGFyYW0gZnAgIGZpbGUgcG9pbnRlcgorICoKKyAqIENsb3NlcyBhIGZpbGUgcG9pbnRlci4gQSBub24tZmF0YWwKKyAqIGVycm9yIG1lc3NhZ2UgaXMgcHJvZHVjZWQgaWYgdGhlCisgKiBjbG9zZSBmYWlscy4KKyAqLwordm9pZCBvcF9jbG9zZV9maWxlKEZJTEUgKiBmcCk7CisKKy8qKgorICogb3Bfd3JpdGVfZmlsZSAtIHdyaXRlIHRvIGEgZmlsZQorICogQHBhcmFtIGZwICBmaWxlIHBvaW50ZXIKKyAqIEBwYXJhbSBidWYgIGJ1ZmZlcgorICogQHBhcmFtIHNpemUgIG5yLiBvZiBieXRlcyB0byB3cml0ZQorICoKKyAqIFdyaXRlIHNpemUgYnl0ZXMgb2YgYnVmZmVyIGJ1ZiB0byBhIGZpbGUuCisgKiBGYWlsdXJlIGlzIGZhdGFsLgorICovCit2b2lkIG9wX3dyaXRlX2ZpbGUoRklMRSAqIGZwLCB2b2lkIGNvbnN0ICogYnVmLCBzaXplX3Qgc2l6ZSk7CisKKy8qKgorICogb3Bfd3JpdGVfdTMyIC0gd3JpdGUgZm91ciBieXRlcyB0byBhIGZpbGUKKyAqIEBwYXJhbSBmcCAgZmlsZSBwb2ludGVyCisgKiBAcGFyYW0gdmFsICB2YWx1ZSB0byB3cml0ZQorICoKKyAqIFdyaXRlIGFuIHVuc2lnbmVkIGZvdXItYnl0ZSB2YWx1ZSB2YWwgdG8gYSBmaWxlLgorICogRmFpbHVyZSBpcyBmYXRhbC4KKyAqCisgKiBObyBieXRlLXN3YXBwaW5nIGlzIGRvbmUuCisgKi8KK3ZvaWQgb3Bfd3JpdGVfdTMyKEZJTEUgKiBmcCwgdTMyIHZhbCk7CisKKy8qKgorICogb3Bfd3JpdGVfdTY0IC0gd3JpdGUgZWlnaHQgYnl0ZXMgdG8gYSBmaWxlCisgKiBAcGFyYW0gZnAgIGZpbGUgcG9pbnRlcgorICogQHBhcmFtIHZhbCAgdmFsdWUgdG8gd3JpdGUKKyAqCisgKiBXcml0ZSBhbiB1bnNpZ25lZCBlaWdodC1ieXRlIHZhbHVlIHZhbCB0byBhIGZpbGUuCisgKiBGYWlsdXJlIGlzIGZhdGFsLgorICoKKyAqIE5vIGJ5dGUtc3dhcHBpbmcgaXMgZG9uZS4KKyAqLwordm9pZCBvcF93cml0ZV91NjQoRklMRSAqIGZwLCB1NjQgdmFsKTsKKworLyoqCisgKiBvcF93cml0ZV91OCAtIHdyaXRlIGEgYnl0ZSB0byBhIGZpbGUKKyAqIEBwYXJhbSBmcCAgZmlsZSBwb2ludGVyCisgKiBAcGFyYW0gdmFsICB2YWx1ZSB0byB3cml0ZQorICoKKyAqIFdyaXRlIGFuIHVuc2lnbmVkIGJ5dGUgdmFsdWUgdmFsIHRvIGEgZmlsZS4KKyAqIEZhaWx1cmUgaXMgZmF0YWwuCisgKi8KK3ZvaWQgb3Bfd3JpdGVfdTgoRklMRSAqIGZwLCB1OCB2YWwpOworCisvKioKKyAqIG9wX2dldF9saW5lIC0gcmVhZCBhbiBBU0NJSSBsaW5lIGZyb20gYSBmaWxlCisgKiBAcGFyYW0gZnAgIGZpbGUgcG9pbnRlcgorICoKKyAqIEdldCBhIGxpbmUgb2YgQVNDSUkgdGV4dCBmcm9tIGEgZmlsZS4gVGhlIGZpbGUgaXMgcmVhZAorICogdXAgdG8gdGhlIGZpcnN0ICdcMCcgb3IgJ1xuJy4gQSB0cmFpbGluZyAnXG4nIGlzIGRlbGV0ZWQuCisgKgorICogUmV0dXJucyB0aGUgZHluYW1pY2FsbHktYWxsb2NhdGVkIHN0cmluZyBjb250YWluaW5nCisgKiB0aGF0IGxpbmUuIEF0IHRoZSBlbmQgb2YgYSBmaWxlIE5VTEwgd2lsbCBiZSByZXR1cm5lZC4KKyAqIGJlIHJldHVybmVkLgorICoKKyAqIFRoZSBzdHJpbmcgcmV0dXJuZWQgbXVzdCBiZSBmcmVlKClkIGJ5IHRoZSBjYWxsZXIuCisgKgorICogZ2V0bGluZSgpIGlzIG5vdCBhIHByb3BlciBzb2x1dGlvbiB0byByZXBsYWNlIHRoaXMgZnVuY3Rpb24KKyAqLworY2hhciAqIG9wX2dldF9saW5lKEZJTEUgKiBmcCk7CisKKy8qKgorICogY2FsY19jcmMzMgorICogQHBhcmFtIGNyYyBjdXJyZW50IHZhbHVlCisgKiBAcGFyYW0gYnVmIHBvaW50ZXIgdG8gYnVmZmVyCisgKiBAcGFyYW0gbGVuCisgKgorICogUmV0dXJucyBjdXJyZW50IGNyYyBjb21wdXRlZCBmcm9tIHRoZSBjcmMgYXJndW1lbnQgYW5kIHRoZQorICogY2hhcmFjdGVycyBpbiBsZW4gY2hhcmFjdGVycyBpbiBidWYuCisgKi8KK3Vuc2lnbmVkIGxvbmcgY2FsY19jcmMzMih1bnNpZ25lZCBsb25nIGNyYywgdW5zaWduZWQgY2hhciAqIGJ1Ziwgc2l6ZV90IGxlbik7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBPUF9GSUxFSU9fSCAqLwpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvbGlidXRpbC9vcF9nZXRfdGltZS5jIGIvb3Byb2ZpbGUtMC45LjcvbGlidXRpbC9vcF9nZXRfdGltZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwOTRjNjMKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9saWJ1dGlsL29wX2dldF90aW1lLmMKQEAgLTAsMCArMSwyNCBAQAorLyoqCisgKiBAZmlsZSBvcF9nZXRfdGltZS5jCisgKiBHZXQgY3VycmVudCB0aW1lIGFzIGEgc3RyaW5nCisgKgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMiBPUHJvZmlsZSBhdXRob3JzCisgKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORworICoKKyAqIEBhdXRob3IgSm9obiBMZXZvbgorICogQGF1dGhvciBQaGlsaXBwZSBFbGllCisgKi8KKworI2luY2x1ZGUgIm9wX2dldF90aW1lLmgiCisKKyNpbmNsdWRlIDx0aW1lLmg+CisKK2NoYXIgKiBvcF9nZXRfdGltZSh2b2lkKQoreworCXRpbWVfdCB0ID0gdGltZShOVUxMKTsKKworCWlmICh0ID09IC0xKQorCQlyZXR1cm4gIiI7CisKKwlyZXR1cm4gY3RpbWUoJnQpOworfQpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvbGlidXRpbC9vcF9nZXRfdGltZS5oIGIvb3Byb2ZpbGUtMC45LjcvbGlidXRpbC9vcF9nZXRfdGltZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmOTYyNzMKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9saWJ1dGlsL29wX2dldF90aW1lLmgKQEAgLTAsMCArMSwzMyBAQAorLyoqCisgKiBAZmlsZSBvcF9nZXRfdGltZS5oCisgKiBHZXQgY3VycmVudCB0aW1lIGFzIGEgc3RyaW5nCisgKgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMiBPUHJvZmlsZSBhdXRob3JzCisgKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORworICoKKyAqIEBhdXRob3IgSm9obiBMZXZvbgorICogQGF1dGhvciBQaGlsaXBwZSBFbGllCisgKi8KKworI2lmbmRlZiBPUF9HRVRfVElNRV9ICisjZGVmaW5lIE9QX0dFVF9USU1FX0gKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAqIG9wX2dldF90aW1lIC0gZ2V0IGN1cnJlbnQgZGF0ZSBhbmQgdGltZQorICoKKyAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IGRhdGUKKyAqIGFuZCB0aW1lLCBvciBhbiBlbXB0eSBzdHJpbmcgb24gZXJyb3IuCisgKgorICogVGhlIHN0cmluZyBpcyBzdGF0aWNhbGx5IGFsbG9jYXRlZCBhbmQgc2hvdWxkIG5vdCBiZSBmcmVlZC4KKyAqLworY2hhciAqIG9wX2dldF90aW1lKHZvaWQpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogT1BfR0VUX1RJTUVfSCAqLwpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvbGlidXRpbC9vcF9ncm93YWJsZV9idWZmZXIuYyBiL29wcm9maWxlLTAuOS43L2xpYnV0aWwvb3BfZ3Jvd2FibGVfYnVmZmVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDEzOGYzNgotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2xpYnV0aWwvb3BfZ3Jvd2FibGVfYnVmZmVyLmMKQEAgLTAsMCArMSw0NiBAQAorLyoqCisgKiBAZmlsZSBvcF9ncm93YWJsZV9idWZmZXIuYworICogYSBncm93YWJsZSBidWZmZXIgaW1wbGVtZW50YXRpb24KKyAqCisgKiBAcmVtYXJrIENvcHlyaWdodCAyMDA3IE9Qcm9maWxlIGF1dGhvcnMKKyAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCisgKgorICogQGF1dGhvciBQaGlsaXBwZSBFbGllCisgKi8KKworI2luY2x1ZGUgIm9wX2dyb3dhYmxlX2J1ZmZlci5oIgorI2luY2x1ZGUgIm9wX2xpYmliZXJ0eS5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKK3ZvaWQgaW5pdF9idWZmZXIoc3RydWN0IGdyb3dhYmxlX2J1ZmZlciAqIGIpCit7CisJYi0+bWF4X3NpemUgPSAwOworCWItPnNpemUgPSAwOworCWItPnAgPSBOVUxMOworfQorCisKK3ZvaWQgZnJlZV9idWZmZXIoc3RydWN0IGdyb3dhYmxlX2J1ZmZlciAqIGIpCit7CisJZnJlZShiLT5wKTsKK30KKworCitzdGF0aWMgdm9pZCBncm93X2J1ZmZlcihzdHJ1Y3QgZ3Jvd2FibGVfYnVmZmVyICogYikKK3sKKwlzaXplX3QgbmV3X3NpemUgPSAoYi0+bWF4X3NpemUgKyBiLT5zaXplKSAqIDI7CisJYi0+cCA9IHhyZWFsbG9jKGItPnAsIG5ld19zaXplKTsKKwliLT5tYXhfc2l6ZSA9IG5ld19zaXplOworfQorCisKK3ZvaWQgYWRkX2RhdGEoc3RydWN0IGdyb3dhYmxlX2J1ZmZlciAqIGIsIHZvaWQgY29uc3QgKiBkYXRhLCBzaXplX3QgbGVuKQoreworCXNpemVfdCBvbGRfc2l6ZSA9IGItPnNpemU7CisJYi0+c2l6ZSArPSBsZW47CisJaWYgKGItPnNpemUgPiBiLT5tYXhfc2l6ZSkKKwkJZ3Jvd19idWZmZXIoYik7CisJbWVtY3B5KGItPnAgKyBvbGRfc2l6ZSwgZGF0YSwgbGVuKTsKK30KZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2xpYnV0aWwvb3BfZ3Jvd2FibGVfYnVmZmVyLmggYi9vcHJvZmlsZS0wLjkuNy9saWJ1dGlsL29wX2dyb3dhYmxlX2J1ZmZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5MTk2OWEKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9saWJ1dGlsL29wX2dyb3dhYmxlX2J1ZmZlci5oCkBAIC0wLDAgKzEsNDUgQEAKKy8qKgorICogQGZpbGUgb3BfZ3Jvd2FibGVfYnVmZmVyLmgKKyAqIGEgZ3Jvd2FibGUgYnVmZmVyIGludGVyZmFjZQorICoKKyAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDcgT1Byb2ZpbGUgYXV0aG9ycworICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKKyAqCisgKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKKyAqLworCisjaWZuZGVmIE9QX0dST1dBQkxFX0JVRkZFUl9ICisjZGVmaW5lIE9QX0dST1dBQkxFX0JVRkZFUl9ICisKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKworc3RydWN0IGdyb3dhYmxlX2J1ZmZlciB7CisJdm9pZCAqIHA7CisJc2l6ZV90IHNpemU7CisJc2l6ZV90IG1heF9zaXplOworfTsKKworLyoqCisgKiBpbml0X2J1ZmZlciAtIGluaXRpYWxpemUgYW4gZW1wdHkgYnVmZmVyCisgKiBAcGFyYW0gYnVmZmVyIHRoZSBidWZmZXIgdG8gaW5pdGlhbGl6ZQorICoKKyAqIGluaXRfYnVmZmVyIGRvIG5vdCBkbyBhbnkgYWxsb2NhdGlvbiwgdGhlIGZpcnN0IGFsbG9jYXRpb24gd2lsbCBvY2N1cgorICogd2hlbiBhZGRfZGF0YSgpIHdpdGggYSBub24gemVybyBsZW4gcGFyYW0gd2lsbCBiZSBjYWxsZWQuCisgKi8KK3ZvaWQgaW5pdF9idWZmZXIoc3RydWN0IGdyb3dhYmxlX2J1ZmZlciAqIGJ1ZmZlcik7CisKKy8qKgorICogZnJlZV9idWZmZXIgLSBmcmVlIHRoZSBtZW1vcnkgYWxsb2NhdGVkIGZvciB0aGlzIGJ1ZmZlcgorICogQHBhcmFtIGJ1ZmZlciB0aGUgYnVmZmVyIHRvIGZyZWUKKyAqLwordm9pZCBmcmVlX2J1ZmZlcihzdHJ1Y3QgZ3Jvd2FibGVfYnVmZmVyICogYnVmZmVyKTsKKworLyoqCisgKiBhZGRfZGF0YSAtIGFkZCBkYXRhIHRvIHRoaXMgYnVmZmVyCisgKiBAcGFyYW0gYiB0aGUgYnVmZmVyIHdoZXJlIHRvIGFkZCBkYXRhCisgKiBAcGFyYW0gZGF0YSBhIHBvaW50ZXIgdG8gdGhlIGRhdGEgdG8gYWRkCisgKiBAcGFyYW0gbGVuIG51bWJlciBvZiBieXRlIHRvIGFkZCB0byB0aGUgYnVmZmVyCisgKi8KK3ZvaWQgYWRkX2RhdGEoc3RydWN0IGdyb3dhYmxlX2J1ZmZlciAqIGIsIHZvaWQgY29uc3QgKiBkYXRhLCBzaXplX3QgbGVuKTsKKworI2VuZGlmIC8qICFPUF9HUk9XQUJMRV9CVUZGRVJfSCAqLwpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvbGlidXRpbC9vcF9saWJpYmVydHkuYyBiL29wcm9maWxlLTAuOS43L2xpYnV0aWwvb3BfbGliaWJlcnR5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGNmNDVkMwotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2xpYnV0aWwvb3BfbGliaWJlcnR5LmMKQEAgLTAsMCArMSwzOCBAQAorLyoqCisgKiBAZmlsZSBvcF9saWJpYmVydHkuYworICogV3JhcHBlciBmb3IgbGliaWJlcnR5IC0gYWx3YXlzIHVzZSB0aGlzIGluc3RlYWQgb2YKKyAqIGxpYmliZXJ0eS5oCisgKgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMiBPUHJvZmlsZSBhdXRob3JzCisgKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORworICoKKyAqIEBhdXRob3IgSm9obiBMZXZvbgorICogQGF1dGhvciBQaGlsaXBwZSBFbGllCisgKi8KKworI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSAib3BfbGliaWJlcnR5LmgiCisKKyNpZm5kZWYgSEFWRV9YQ0FMTE9DCisvKiBzb21lIHN5c3RlbSBoYXZlIGEgdmFsaWQgbGliaWJlcnR5IHdpdGhvdXQgeGNhbGxvYyAqLwordm9pZCAqIHhjYWxsb2Moc2l6ZV90IG5fZWxlbSwgc2l6ZV90IHN6KQoreworCXZvaWQgKiBwdHIgPSB4bWFsbG9jKG5fZWxlbSAqIHN6KTsKKworCW1lbXNldChwdHIsICdcMCcsIG5fZWxlbSAqIHN6KTsKKworCXJldHVybiBwdHI7Cit9CisjZW5kaWYKKworI2lmbmRlZiBIQVZFX1hNRU1EVVAKK3ZvaWQgKiB4bWVtZHVwICh2b2lkIGNvbnN0ICogaW5wdXQsIHNpemVfdCBjb3B5X3NpemUsIHNpemVfdCBhbGxvY19zaXplKQoreworCXZvaWQgKiBvdXRwdXQgPSB4Y2FsbG9jKDEsIGFsbG9jX3NpemUpOworCisJbWVtY3B5KG91dHB1dCwgaW5wdXQsIGNvcHlfc2l6ZSk7CisKKwlyZXR1cm4gb3V0cHV0OworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9saWJ1dGlsL29wX2xpYmliZXJ0eS5oIGIvb3Byb2ZpbGUtMC45LjcvbGlidXRpbC9vcF9saWJpYmVydHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MzcyYTEwCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvbGlidXRpbC9vcF9saWJpYmVydHkuaApAQCAtMCwwICsxLDcyIEBACisvKioKKyAqIEBmaWxlIG9wX2xpYmliZXJ0eS5oCisgKiBXcmFwcGVyIGZvciBsaWJpYmVydHkgLSBhbHdheXMgdXNlIHRoaXMgaW5zdGVhZCBvZgorICogbGliaWJlcnR5LmgKKyAqCisgKiBAcmVtYXJrIENvcHlyaWdodCAyMDAyIE9Qcm9maWxlIGF1dGhvcnMKKyAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCisgKgorICogQGF1dGhvciBKb2huIExldm9uCisgKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKKyAqLworCisjaWZuZGVmIE9QX0xJQklCRVJUWV9ICisjZGVmaW5lIE9QX0xJQklCRVJUWV9ICisKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWZkZWYgTUFMTE9DX0FUVFJJQlVURV9PSworI2RlZmluZSBPUF9BVFRSSUJfTUFMTE9DCV9fYXR0cmlidXRlX18oKG1hbGxvYykpCisjZWxzZQorI2RlZmluZSBPUF9BVFRSSUJfTUFMTE9DCisjZW5kaWYKKworI2lmZGVmIEhBVkVfTElCSUJFUlRZX0gKKyNpbmNsdWRlIDxsaWJpYmVydHkuaD4KKyNlbHNlCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyogc29tZSBzeXN0ZW0gaGF2ZSBhIGxpYmliZXJ0eS5hIGJ1dCBubyBsaWJpYmVydHkuaCBzbyB3ZSBtdXN0IHByb3ZpZGUKKyAqIG91cnNlbGYgdGhlIG1pc3NpbmcgcHJvdG8gKi8KKyNpZm5kZWYgSEFWRV9MSUJJQkVSVFlfSAorLyogU2V0IHRoZSBwcm9ncmFtIG5hbWUgdXNlZCBieSB4bWFsbG9jLiAgKi8KK3ZvaWQgeG1hbGxvY19zZXRfcHJvZ3JhbV9uYW1lKGNoYXIgY29uc3QgKik7CisKKy8qIEFsbG9jYXRlIG1lbW9yeSB3aXRob3V0IGZhaWwuICBJZiBtYWxsb2MgZmFpbHMsIHRoaXMgd2lsbCBwcmludCBhCisgICBtZXNzYWdlIHRvIHN0ZGVyciAodXNpbmcgdGhlIG5hbWUgc2V0IGJ5IHhtYWxsb2Nfc2V0X3Byb2dyYW1fbmFtZSwKKyAgIGlmIGFueSkgYW5kIHRoZW4gY2FsbCB4ZXhpdC4gICovCit2b2lkICogeG1hbGxvYyhzaXplX3QpIE9QX0FUVFJJQl9NQUxMT0M7CisKKy8qIFJlYWxsb2NhdGUgbWVtb3J5IHdpdGhvdXQgZmFpbC4gIFRoaXMgd29ya3MgbGlrZSB4bWFsbG9jLiAgTm90ZSwKKyAgIHJlYWxsb2MgdHlwZSBmdW5jdGlvbnMgYXJlIG5vdCBzdWl0YWJsZSBmb3IgYXR0cmlidXRlIG1hbGxvYyBzaW5jZQorICAgdGhleSBtYXkgcmV0dXJuIHRoZSBzYW1lIGFkZHJlc3MgYWNyb3NzIG11bHRpcGxlIGNhbGxzLiAqLwordm9pZCAqIHhyZWFsbG9jKHZvaWQgKiwgc2l6ZV90KTsKKworLyogQWxsb2NhdGUgbWVtb3J5IHdpdGhvdXQgZmFpbCBhbmQgc2V0IGl0IHRvIHplcm8uICBUaGlzIHdvcmtzIGxpa2UgeG1hbGxvYyAqLwordm9pZCAqIHhjYWxsb2Moc2l6ZV90LCBzaXplX3QpIE9QX0FUVFJJQl9NQUxMT0M7CisKKy8qIENvcHkgYSBzdHJpbmcgaW50byBhIG1lbW9yeSBidWZmZXIgd2l0aG91dCBmYWlsLiAgKi8KK2NoYXIgKiB4c3RyZHVwKGNoYXIgY29uc3QgKikgT1BfQVRUUklCX01BTExPQzsKKworLyoqCisgKiBEdXBsaWNhdGVzIGEgcmVnaW9uIG9mIG1lbW9yeSB3aXRob3V0IGZhaWwuICBGaXJzdCwgYWxsb2Nfc2l6ZSBieXRlcworICogYXJlIGFsbG9jYXRlZCwgdGhlbiBjb3B5X3NpemUgYnl0ZXMgZnJvbSBpbnB1dCBhcmUgY29waWVkIGludG8KKyAqIGl0LCBhbmQgdGhlIG5ldyBtZW1vcnkgaXMgcmV0dXJuZWQuICBJZiBmZXdlciBieXRlcyBhcmUgY29waWVkIHRoYW4gd2VyZQorICogYWxsb2NhdGVkLCB0aGUgcmVtYWluaW5nIG1lbW9yeSBpcyB6ZXJvZWQuCisgKi8KK3ZvaWQgKiB4bWVtZHVwKHZvaWQgY29uc3QgKiwgc2l6ZV90LCBzaXplX3QpIE9QX0FUVFJJQl9NQUxMT0M7CisKKyNlbmRpZgkvKiAhSEFWRV9MSUJJQkVSVFlfSCAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogIUhBVkVfTElCSUJFUlRZX0ggKi8KKworI2VuZGlmIC8qIE9QX0xJQklCRVJUWV9IICovCmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9saWJ1dGlsL29wX2xpc3QuaCBiL29wcm9maWxlLTAuOS43L2xpYnV0aWwvb3BfbGlzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkMGNkOGEKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9saWJ1dGlsL29wX2xpc3QuaApAQCAtMCwwICsxLDE3NyBAQAorLyoqCisgKiBAZmlsZSBvcF9saXN0LmgKKyAqIEtlcm5lbC1zdHlsZSBsaXN0cworICoKKyAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDIgT1Byb2ZpbGUgYXV0aG9ycworICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKKyAqCisgKiBAYXV0aG9yIExpbnV4IGtlcm5lbCBhdXRob3JzCisgKi8KKworI2lmbmRlZiBPUF9MSVNUX0gKKyNkZWZpbmUgT1BfTElTVF9ICisKKy8qCisgKiBTaW1wbGUgZG91Ymx5IGxpbmtlZCBsaXN0IGltcGxlbWVudGF0aW9uLgorICoKKyAqIFNvbWUgb2YgdGhlIGludGVybmFsIGZ1bmN0aW9ucyAoIl9feHh4IikgYXJlIHVzZWZ1bCB3aGVuCisgKiBtYW5pcHVsYXRpbmcgd2hvbGUgbGlzdHMgcmF0aGVyIHRoYW4gc2luZ2xlIGVudHJpZXMsIGFzCisgKiBzb21ldGltZXMgd2UgYWxyZWFkeSBrbm93IHRoZSBuZXh0L3ByZXYgZW50cmllcyBhbmQgd2UgY2FuCisgKiBnZW5lcmF0ZSBiZXR0ZXIgY29kZSBieSB1c2luZyB0aGVtIGRpcmVjdGx5IHJhdGhlciB0aGFuCisgKiB1c2luZyB0aGUgZ2VuZXJpYyBzaW5nbGUtZW50cnkgcm91dGluZXMuCisgKi8KKworc3RydWN0IGxpc3RfaGVhZCB7CisJc3RydWN0IGxpc3RfaGVhZCAqIG5leHQsICogcHJldjsKK307CisKKy8qKgorICogbGlzdF9pbml0IC0gaW5pdCBhIG5ldyBlbnRyeQorICogQHBhcmFtIHB0ciAgdGhlIGxpc3QgdG8gaW5pdAorICoKKyAqIEluaXQgYSBsaXN0IGhlYWQgdG8gY3JlYXRlIGFuIGVtcHR5IGxpc3QgZnJvbSBpdAorICovCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGxpc3RfaW5pdChzdHJ1Y3QgbGlzdF9oZWFkICogcHRyKQoreworCXB0ci0+bmV4dCA9IHB0cjsKKwlwdHItPnByZXYgPSBwdHI7Cit9CisKKy8qCisgKiBJbnNlcnQgYSBuZXcgZW50cnkgYmV0d2VlbiB0d28ga25vd24gY29uc2VjdXRpdmUgZW50cmllcy4KKyAqCisgKiBUaGlzIGlzIG9ubHkgZm9yIGludGVybmFsIGxpc3QgbWFuaXB1bGF0aW9uIHdoZXJlIHdlIGtub3cKKyAqIHRoZSBwcmV2L25leHQgZW50cmllcyBhbHJlYWR5IQorICovCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fbGlzdF9hZGQoc3RydWN0IGxpc3RfaGVhZCAqIG5ld19lbnRyeSwKKwlzdHJ1Y3QgbGlzdF9oZWFkICogcHJldiwKKwlzdHJ1Y3QgbGlzdF9oZWFkICogbmV4dCkKK3sKKwluZXh0LT5wcmV2ID0gbmV3X2VudHJ5OworCW5ld19lbnRyeS0+bmV4dCA9IG5leHQ7CisJbmV3X2VudHJ5LT5wcmV2ID0gcHJldjsKKwlwcmV2LT5uZXh0ID0gbmV3X2VudHJ5OworfQorCisvKioKKyAqIGxpc3RfYWRkIC0gYWRkIGEgbmV3IGVudHJ5CisgKiBAcGFyYW0gbmV3ICBuZXcgZW50cnkgdG8gYmUgYWRkZWQKKyAqIEBwYXJhbSBoZWFkICBsaXN0IGhlYWQgdG8gYWRkIGl0IGFmdGVyCisgKgorICogSW5zZXJ0IGEgbmV3IGVudHJ5IGFmdGVyIHRoZSBzcGVjaWZpZWQgaGVhZC4KKyAqIFRoaXMgaXMgZ29vZCBmb3IgaW1wbGVtZW50aW5nIHN0YWNrcy4KKyAqLworc3RhdGljIF9faW5saW5lX18gdm9pZCBsaXN0X2FkZChzdHJ1Y3QgbGlzdF9oZWFkICogbmV3X2VudHJ5LCBzdHJ1Y3QgbGlzdF9oZWFkICogaGVhZCkKK3sKKwlfX2xpc3RfYWRkKG5ld19lbnRyeSwgaGVhZCwgaGVhZC0+bmV4dCk7Cit9CisKKy8qKgorICogbGlzdF9hZGRfdGFpbCAtIGFkZCBhIG5ldyBlbnRyeQorICogQHBhcmFtIG5ldyAgbmV3IGVudHJ5IHRvIGJlIGFkZGVkCisgKiBAcGFyYW0gaGVhZCAgbGlzdCBoZWFkIHRvIGFkZCBpdCBiZWZvcmUKKyAqCisgKiBJbnNlcnQgYSBuZXcgZW50cnkgYmVmb3JlIHRoZSBzcGVjaWZpZWQgaGVhZC4KKyAqIFRoaXMgaXMgdXNlZnVsIGZvciBpbXBsZW1lbnRpbmcgcXVldWVzLgorICovCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGxpc3RfYWRkX3RhaWwoc3RydWN0IGxpc3RfaGVhZCAqIG5ld19lbnRyeSwgc3RydWN0IGxpc3RfaGVhZCAqIGhlYWQpCit7CisJX19saXN0X2FkZChuZXdfZW50cnksIGhlYWQtPnByZXYsIGhlYWQpOworfQorCisvKgorICogRGVsZXRlIGEgbGlzdCBlbnRyeSBieSBtYWtpbmcgdGhlIHByZXYvbmV4dCBlbnRyaWVzCisgKiBwb2ludCB0byBlYWNoIG90aGVyLgorICoKKyAqIFRoaXMgaXMgb25seSBmb3IgaW50ZXJuYWwgbGlzdCBtYW5pcHVsYXRpb24gd2hlcmUgd2Uga25vdworICogdGhlIHByZXYvbmV4dCBlbnRyaWVzIGFscmVhZHkhCisgKi8KK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19saXN0X2RlbChzdHJ1Y3QgbGlzdF9oZWFkICogcHJldiwKKwkJCQkgIHN0cnVjdCBsaXN0X2hlYWQgKiBuZXh0KQoreworCW5leHQtPnByZXYgPSBwcmV2OworCXByZXYtPm5leHQgPSBuZXh0OworfQorCisvKioKKyAqIGxpc3RfZGVsIC0gZGVsZXRlcyBlbnRyeSBmcm9tIGxpc3QuCisgKiBAcGFyYW0gZW50cnkgIHRoZSBlbGVtZW50IHRvIGRlbGV0ZSBmcm9tIHRoZSBsaXN0LgorICogTm90ZTogbGlzdF9lbXB0eSBvbiBlbnRyeSBkb2VzIG5vdCByZXR1cm4gdHJ1ZSBhZnRlciB0aGlzLCB0aGUgZW50cnkgaXMgaW4gYW4gdW5kZWZpbmVkIHN0YXRlLgorICovCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGxpc3RfZGVsKHN0cnVjdCBsaXN0X2hlYWQgKiBlbnRyeSkKK3sKKwlfX2xpc3RfZGVsKGVudHJ5LT5wcmV2LCBlbnRyeS0+bmV4dCk7Cit9CisKKy8qKgorICogbGlzdF9kZWxfaW5pdCAtIGRlbGV0ZXMgZW50cnkgZnJvbSBsaXN0IGFuZCByZWluaXRpYWxpemUgaXQuCisgKiBAcGFyYW0gZW50cnkgIHRoZSBlbGVtZW50IHRvIGRlbGV0ZSBmcm9tIHRoZSBsaXN0LgorICovCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGxpc3RfZGVsX2luaXQoc3RydWN0IGxpc3RfaGVhZCAqIGVudHJ5KQoreworCV9fbGlzdF9kZWwoZW50cnktPnByZXYsIGVudHJ5LT5uZXh0KTsKKwlsaXN0X2luaXQoZW50cnkpOworfQorCisvKioKKyAqIGxpc3RfZW1wdHkgLSB0ZXN0cyB3aGV0aGVyIGEgbGlzdCBpcyBlbXB0eQorICogQHBhcmFtIGhlYWQgIHRoZSBsaXN0IHRvIHRlc3QuCisgKi8KK3N0YXRpYyBfX2lubGluZV9fIGludCBsaXN0X2VtcHR5KHN0cnVjdCBsaXN0X2hlYWQgY29uc3QgKiBoZWFkKQoreworCXJldHVybiBoZWFkLT5uZXh0ID09IGhlYWQ7Cit9CisKKy8qKgorICogbGlzdF9zcGxpY2UgLSBqb2luIHR3byBsaXN0cworICogQHBhcmFtIGxpc3QgIHRoZSBuZXcgbGlzdCB0byBhZGQuCisgKiBAcGFyYW0gaGVhZCAgdGhlIHBsYWNlIHRvIGFkZCBpdCBpbiB0aGUgZmlyc3QgbGlzdC4KKyAqLworc3RhdGljIF9faW5saW5lX18gdm9pZCBsaXN0X3NwbGljZShzdHJ1Y3QgbGlzdF9oZWFkICogbGlzdCwgc3RydWN0IGxpc3RfaGVhZCAqIGhlYWQpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqIGZpcnN0ID0gbGlzdC0+bmV4dDsKKworCWlmIChmaXJzdCAhPSBsaXN0KSB7CisJCXN0cnVjdCBsaXN0X2hlYWQgKiBsYXN0ID0gbGlzdC0+cHJldjsKKwkJc3RydWN0IGxpc3RfaGVhZCAqIGF0ID0gaGVhZC0+bmV4dDsKKworCQlmaXJzdC0+cHJldiA9IGhlYWQ7CisJCWhlYWQtPm5leHQgPSBmaXJzdDsKKworCQlsYXN0LT5uZXh0ID0gYXQ7CisJCWF0LT5wcmV2ID0gbGFzdDsKKwl9Cit9CisKKy8qKgorICogbGlzdF9lbnRyeSAtIGdldCB0aGUgc3RydWN0IGZvciB0aGlzIGVudHJ5CisgKiBAcGFyYW0gcHRyIAl0aGUgJnN0cnVjdCBsaXN0X2hlYWQgcG9pbnRlci4KKyAqIEBwYXJhbSB0eXBlIAl0aGUgdHlwZSBvZiB0aGUgc3RydWN0IHRoaXMgaXMgZW1iZWRkZWQgaW4uCisgKiBAcGFyYW0gbWVtYmVyIAl0aGUgbmFtZSBvZiB0aGUgbGlzdF9zdHJ1Y3Qgd2l0aGluIHRoZSBzdHJ1Y3QuCisgKi8KKyNkZWZpbmUgbGlzdF9lbnRyeShwdHIsIHR5cGUsIG1lbWJlcikgXAorCSgodHlwZSAqKSgoY2hhciAqKShwdHIpLSh1bnNpZ25lZCBsb25nKSgmKCh0eXBlICopMCktPm1lbWJlcikpKQorCisvKioKKyAqIGxpc3RfZm9yX2VhY2ggLSBpdGVyYXRlIG92ZXIgYSBsaXN0CisgKiBAcGFyYW0gcG9zIAl0aGUgJnN0cnVjdCBsaXN0X2hlYWQgdG8gdXNlIGFzIGEgbG9vcCBjb3VudGVyLgorICogQHBhcmFtIGhlYWQgCXRoZSBoZWFkIGZvciB5b3VyIGxpc3QuCisgKi8KKyNkZWZpbmUgbGlzdF9mb3JfZWFjaChwb3MsIGhlYWQpIFwKKwlmb3IgKHBvcyA9IChoZWFkKS0+bmV4dDsgcG9zICE9IChoZWFkKTsgcG9zID0gcG9zLT5uZXh0KQorCisvKioKKyAqIGxpc3RfZm9yX2VhY2hfc2FmZSAtIGl0ZXJhdGUgb3ZlciBhIGxpc3Qgc2FmZSBhZ2FpbnN0IHJlbW92YWwgb2YgbGlzdCBlbnRyeQorICogQHBhcmFtIHBvcyAJdGhlICZzdHJ1Y3QgbGlzdF9oZWFkIHRvIHVzZSBhcyBhIGxvb3AgY291bnRlci4KKyAqIEBwYXJhbSBuIAkJYW5vdGhlciAmc3RydWN0IGxpc3RfaGVhZCB0byB1c2UgYXMgdGVtcG9yYXJ5IHN0b3JhZ2UKKyAqIEBwYXJhbSBoZWFkIAl0aGUgaGVhZCBmb3IgeW91ciBsaXN0LgorICovCisjZGVmaW5lIGxpc3RfZm9yX2VhY2hfc2FmZShwb3MsIG4sIGhlYWQpIFwKKwlmb3IgKHBvcyA9IChoZWFkKS0+bmV4dCwgbiA9IHBvcy0+bmV4dDsgcG9zICE9IChoZWFkKTsgXAorCQlwb3MgPSBuLCBuID0gcG9zLT5uZXh0KQorCisjZGVmaW5lIExJU1RfSEVBRF9JTklUKG5hbWUpIHsgJihuYW1lKSwgJihuYW1lKSB9CisKKyNkZWZpbmUgTElTVF9IRUFEKG5hbWUpIHN0cnVjdCBsaXN0X2hlYWQgbmFtZSA9IExJU1RfSEVBRF9JTklUKG5hbWUpCisKKyNlbmRpZiAvKiBPUF9MSVNUX0ggKi8KZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2xpYnV0aWwvb3BfbG9ja2ZpbGUuYyBiL29wcm9maWxlLTAuOS43L2xpYnV0aWwvb3BfbG9ja2ZpbGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNmUzMjQ5Ci0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvbGlidXRpbC9vcF9sb2NrZmlsZS5jCkBAIC0wLDAgKzEsNjkgQEAKKy8qKgorICogQGZpbGUgb3BfbG9ja2ZpbGUuYworICogUElELWJhc2VkIGxvY2tmaWxlIG1hbmFnZW1lbnQKKyAqCisgKiBAcmVtYXJrIENvcHlyaWdodCAyMDAyIE9Qcm9maWxlIGF1dGhvcnMKKyAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCisgKgorICogQGF1dGhvciBKb2huIExldm9uCisgKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKKyAqLworCisjaW5jbHVkZSAib3BfbG9ja2ZpbGUuaCIKKyNpbmNsdWRlICJvcF9maWxlLmgiCisKKyNpbmNsdWRlIDxlcnJuby5oPgorCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworc3RhdGljIHBpZF90IG9wX3JlYWRfbG9ja19maWxlKGNoYXIgY29uc3QgKiBmaWxlKQoreworCUZJTEUgKiBmcDsKKwlwaWRfdCB2YWx1ZTsKKworCWZwID0gZm9wZW4oZmlsZSwgInIiKTsKKwlpZiAoZnAgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoZnNjYW5mKGZwLCAiJWQiLCAmdmFsdWUpICE9IDEpIHsKKwkJZmNsb3NlKGZwKTsKKwkJcmV0dXJuIDA7CisJfQorCisJZmNsb3NlKGZwKTsKKworCXJldHVybiB2YWx1ZTsKK30KKworCitpbnQgb3Bfd3JpdGVfbG9ja19maWxlKGNoYXIgY29uc3QgKiBmaWxlKQoreworCUZJTEUgKiBmcDsKKworCWlmIChvcF9maWxlX3JlYWRhYmxlKGZpbGUpKSB7CisJCXBpZF90IHBpZCA9IG9wX3JlYWRfbG9ja19maWxlKGZpbGUpOworCisJCS8qIEZJWE1FOiBFU1JDSCB2cy4gRVBFUk0gKi8KKwkJaWYgKGtpbGwocGlkLCAwKSkgeworCQkJaW50IGVyciA9IHVubGluayhmaWxlKTsKKwkJCWZwcmludGYoc3RkZXJyLCAiUmVtb3Zpbmcgc3RhbGUgbG9jayBmaWxlICVzXG4iLAorCQkJCWZpbGUpOworCQkJaWYgKGVycikKKwkJCQlyZXR1cm4gZXJyOworCQl9IGVsc2UgeworCQkJcmV0dXJuIEVFWElTVDsKKwkJfQorCX0KKworCWZwID0gZm9wZW4oZmlsZSwgInciKTsKKwlpZiAoIWZwKQorCQlyZXR1cm4gZXJybm87CisKKwlmcHJpbnRmKGZwLCAiJWQiLCBnZXRwaWQoKSk7CisJZmNsb3NlKGZwKTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvbGlidXRpbC9vcF9sb2NrZmlsZS5oIGIvb3Byb2ZpbGUtMC45LjcvbGlidXRpbC9vcF9sb2NrZmlsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjYzI2OWMKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9saWJ1dGlsL29wX2xvY2tmaWxlLmgKQEAgLTAsMCArMSwzNCBAQAorLyoqCisgKiBAZmlsZSBvcF9sb2NrZmlsZS5oCisgKiBQSUQtYmFzZWQgbG9ja2ZpbGUgbWFuYWdlbWVudAorICoKKyAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDIgT1Byb2ZpbGUgYXV0aG9ycworICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKKyAqCisgKiBAYXV0aG9yIEpvaG4gTGV2b24KKyAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQorICovCisKKyNpZm5kZWYgT1BfTE9DS0ZJTEVfSAorI2RlZmluZSBPUF9MT0NLRklMRV9ICisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCisvKioKKyAqIG9wX3dyaXRlX2xvY2tfZmlsZSAtIHdyaXRlIGEgbG9jayBmaWxlCisgKiBccmV0dXJuIGVycm5vIG9uIGZhaWx1cmUsIG9yIDAgb24gc3VjY2VzcworICoKKyAqIFdyaXRlIHRoZSBwaWQgaW50byB0aGUgZ2l2ZW4gbG9jayBmaWxlLiBTdGFsZQorICogbG9jayBmaWxlcyBhcmUgZGV0ZWN0ZWQgYW5kIHJlc2V0LgorICovCitpbnQgb3Bfd3JpdGVfbG9ja19maWxlKGNoYXIgY29uc3QgKiBmaWxlKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIE9QX0xPQ0tGSUxFX0ggKi8KZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2xpYnV0aWwvb3BfcG9wdC5jIGIvb3Byb2ZpbGUtMC45LjcvbGlidXRpbC9vcF9wb3B0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGU5NjM2NAotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2xpYnV0aWwvb3BfcG9wdC5jCkBAIC0wLDAgKzEsNDMgQEAKKy8qKgorICogQGZpbGUgb3BfcG9wdC5jCisgKiBXcmFwcGVyIGZvciBsaWJwb3B0IC0gYWx3YXlzIHVzZSB0aGlzIHJhdGhlcgorICogdGhhbiBwb3B0LmgKKyAqCisgKiBAcmVtYXJrIENvcHlyaWdodCAyMDAyIE9Qcm9maWxlIGF1dGhvcnMKKyAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCisgKgorICogQGF1dGhvciBKb2huIExldm9uCisgKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKKyAqLworCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSAib3BfbGliaWJlcnR5LmgiCisjaW5jbHVkZSAib3BfcG9wdC5oIgorCitwb3B0Q29udGV4dCBvcF9wb3B0R2V0Q29udGV4dChjaGFyIGNvbnN0ICogbmFtZSwKKwkJaW50IGFyZ2MsIGNoYXIgY29uc3QgKiogYXJndiwKKwkJc3RydWN0IHBvcHRPcHRpb24gY29uc3QgKiBvcHRpb25zLCBpbnQgZmxhZ3MpCit7CisJcG9wdENvbnRleHQgb3B0Y29uOworCWludCBjOworCisJeG1hbGxvY19zZXRfcHJvZ3JhbV9uYW1lKGFyZ3ZbMF0pOworCisjaWZkZWYgQ09OU1RfUE9QVAorCW9wdGNvbiA9IHBvcHRHZXRDb250ZXh0KG5hbWUsIGFyZ2MsIGFyZ3YsIG9wdGlvbnMsIGZsYWdzKTsKKyNlbHNlCisJb3B0Y29uID0gcG9wdEdldENvbnRleHQoKGNoYXIgKiluYW1lLCBhcmdjLCAoY2hhciAqKilhcmd2LCBvcHRpb25zLCBmbGFncyk7CisjZW5kaWYKKworCWMgPSBwb3B0R2V0TmV4dE9wdChvcHRjb24pOworCisJaWYgKGMgPCAtMSkgeworCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiAlczogJXNcbiIsIGFyZ3ZbMF0sCisJCQlwb3B0QmFkT3B0aW9uKG9wdGNvbiwgUE9QVF9CQURPUFRJT05fTk9BTElBUyksCisJCQlwb3B0U3RyZXJyb3IoYykpOworCQlwb3B0UHJpbnRIZWxwKG9wdGNvbiwgc3RkZXJyLCAwKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKworCXJldHVybiBvcHRjb247Cit9CmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9saWJ1dGlsL29wX3BvcHQuaCBiL29wcm9maWxlLTAuOS43L2xpYnV0aWwvb3BfcG9wdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzZGZhNmMKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9saWJ1dGlsL29wX3BvcHQuaApAQCAtMCwwICsxLDQyIEBACisvKioKKyAqIEBmaWxlIG9wX3BvcHQuaAorICogV3JhcHBlciBmb3IgbGlicG9wdCAtIGFsd2F5cyB1c2UgdGhpcyByYXRoZXIKKyAqIHRoYW4gcG9wdC5oCisgKgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMiBPUHJvZmlsZSBhdXRob3JzCisgKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORworICoKKyAqIEBhdXRob3IgSm9obiBMZXZvbgorICogQGF1dGhvciBQaGlsaXBwZSBFbGllCisgKi8KKworI2lmbmRlZiBPUF9QT1BUX0gKKyNkZWZpbmUgT1BfUE9QVF9ICisKKyNpbmNsdWRlIDxwb3B0Lmg+CisKKy8vIG5vdCBpbiBzb21lIHZlcnNpb25zIG9mIHBvcHQuaAorI2lmbmRlZiBQT1BUX1RBQkxFRU5ECisjZGVmaW5lIFBPUFRfVEFCTEVFTkQgeyBOVUxMLCAnXDAnLCAwLCAwLCAwLCBOVUxMLCBOVUxMIH0KKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qKgorICogb3BfcG9wdEdldENvbnRleHQgLSB3cmFwcGVyIGZvciBwb3B0CisgKgorICogVXNlIHRoaXMgaW5zdGVhZCBvZiBwb3B0R2V0Q29udGV4dCB0byBjb3BlIHdpdGgKKyAqIGRpZmZlcmVudCBwb3B0IHZlcnNpb25zLiBUaGlzIGFsc28gaGFuZGxlIHVucmVjb2duaXplZAorICogb3B0aW9ucy4gQWxsIGVycm9yIGFyZSBmYXRhbC4KKyAqLworcG9wdENvbnRleHQgb3BfcG9wdEdldENvbnRleHQoY2hhciBjb25zdCAqIG5hbWUsCisgICAgICAgICAgICAgICAgaW50IGFyZ2MsIGNoYXIgY29uc3QgKiogYXJndiwKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgcG9wdE9wdGlvbiBjb25zdCAqIG9wdGlvbnMsIGludCBmbGFncyk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBPUF9QT1BUX0ggKi8KZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2xpYnV0aWwvb3Bfc3RyaW5nLmMgYi9vcHJvZmlsZS0wLjkuNy9saWJ1dGlsL29wX3N0cmluZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0NDAyOTkKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9saWJ1dGlsL29wX3N0cmluZy5jCkBAIC0wLDAgKzEsNjIgQEAKKy8qKgorICogQGZpbGUgb3Bfc3RyaW5nLmMKKyAqIGdlbmVyYWwgcHVycG9zZSBDIHN0cmluZyBoYW5kbGluZyBpbXBsZW1lbnRhdGlvbi4KKyAqCisgKiBAcmVtYXJrIENvcHlyaWdodCAyMDAzIE9Qcm9maWxlIGF1dGhvcnMKKyAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCisgKgorICogQGF1dGhvciBKb2huIExldm9uCisgKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKKyAqLworCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSAib3BfbGliaWJlcnR5LmgiCisKKworY2hhciAqIG9wX3hzdHJuZHVwKGNoYXIgY29uc3QgKiBzLCBzaXplX3QgbGVuKQoreworCXJldHVybiB4bWVtZHVwKHMsIGxlbiwgbGVuICsgMSk7Cit9CisKKworc2l6ZV90IG9wX2hhc2hfc3RyaW5nKGNoYXIgY29uc3QgKiBzdHIpCit7CisJc2l6ZV90IGhhc2ggPSAwOworCWZvciAoOyAqc3RyOyArK3N0cikKKwkJaGFzaCBePSAoaGFzaCA8PCAxNikgXiAoaGFzaCA+PiA4KSBeICpzdHI7CisJcmV0dXJuIGhhc2g7Cit9CisKKworaW50IHN0cmlzcHJlZml4KGNoYXIgY29uc3QgKiBzdHIsIGNoYXIgY29uc3QgKiBwcmVmaXgpCit7CisJcmV0dXJuIHN0cnN0cihzdHIsIHByZWZpeCkgPT0gc3RyOworfQorCisKK2NoYXIgY29uc3QgKiBza2lwX3dzKGNoYXIgY29uc3QgKiBjKQoreworCXdoaWxlICgqYyA9PSAnICcgfHwgKmMgPT0gJ1x0JyB8fCAqYyA9PSAnXG4nKQorCQkrK2M7CisJcmV0dXJuIGM7Cit9CisKKworY2hhciBjb25zdCAqIHNraXBfbm9ud3MoY2hhciBjb25zdCAqIGMpCit7CisJd2hpbGUgKCpjICYmICpjICE9ICcgJyAmJiAqYyAhPSAnXHQnICYmICpjICE9ICdcbicpCisJCSsrYzsKKwlyZXR1cm4gYzsKK30KKworCitpbnQgZW1wdHlfbGluZShjaGFyIGNvbnN0ICogYykKK3sKKwlyZXR1cm4gISpza2lwX3dzKGMpOworfQorCisKK2ludCBjb21tZW50X2xpbmUoY2hhciBjb25zdCAqIGMpCit7CisJcmV0dXJuICpza2lwX3dzKGMpID09ICcjJzsKK30KZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2xpYnV0aWwvb3Bfc3RyaW5nLmggYi9vcHJvZmlsZS0wLjkuNy9saWJ1dGlsL29wX3N0cmluZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5M2ZhNmYKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9saWJ1dGlsL29wX3N0cmluZy5oCkBAIC0wLDAgKzEsODEgQEAKKy8qKgorICogQGZpbGUgb3Bfc3RyaW5nLmgKKyAqIGdlbmVyYWwgcHVycG9zZSBDIHN0cmluZyBoYW5kbGluZyBkZWNsYXJhdGlvbnMuCisgKgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMyBPUHJvZmlsZSBhdXRob3JzCisgKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORworICoKKyAqIEBhdXRob3IgSm9obiBMZXZvbgorICogQGF1dGhvciBQaGlsaXBwZSBFbGllCisgKi8KKworI2lmbmRlZiBPUF9TVFJJTkdfSAorI2RlZmluZSBPUF9TVFJJTkdfSAorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqCisgKiBAcGFyYW0gIHM6IGlucHV0IHN0cmluZworICogQHBhcmFtIGxlbjogbGVuIGNoYXIgdG8gY29weQorICoKKyAqIEFsbG9jYXRlIGFuZCBjb3B5IGxlbiBjaGFyYWN0ZXIgZnJvbSBzIHRvIGEgbmV3bHkgYWxsb2NhdGVkIGJ1ZmZlciB0aGVuCisgKiBhcHBlbmQgYSAnXDAnIHRlcm1pbmF0b3IuIFJldHVybiB0aGUgbmV3bHkgYWxsb2NhdGVkIHN0cmluZworICovCitjaGFyICogb3BfeHN0cm5kdXAoY2hhciBjb25zdCAqIHMsIHNpemVfdCBsZW4pOworCisvKioKKyAqIEBwYXJhbSAgczogc3RyaW5nIHRvIGhhc2gKKyAqCisgKiBHZW5lcmF0ZSBhIGhhc2ggY29kZSBmcm9tIGEgc3RyaW5nCisgKi8KK3NpemVfdCBvcF9oYXNoX3N0cmluZyhjaGFyIGNvbnN0ICogcyk7CisKKy8qKgorICogQHBhcmFtIHN0cjogc3RyaW5nIHRvIHRlc3QKKyAqIEBwYXJhbSBwcmVmaXg6IHByZWZpeCBzdHJpbmcKKyAqCisgKiByZXR1cm4gbm9uIHplcm8gaWYgcHJlZml4IHBhcmFtZXRlcnMgaXMgYSBwcmVmaXggb2Ygc3RyCisgKi8KK2ludCBzdHJpc3ByZWZpeChjaGFyIGNvbnN0ICogc3RyLCBjaGFyIGNvbnN0ICogcHJlZml4KTsKKworLyoqCisgKiBAcGFyYW0gYzogaW5wdXQgc3RyaW5nCisgKgorICogcmV0dXJuIGEgcG9pbnRlciB0byB0aGUgZmlyc3QgbG9jYXRpb24gaW4gYyB3aGljaCBpcyBub3QgYSBibGFuayBzcGFjZQorICogd2hlcmUgYmxhbmsgc3BhY2UgYXJlIGluICIgXHRcbiIKKyAqLworY2hhciBjb25zdCAqIHNraXBfd3MoY2hhciBjb25zdCAqIGMpOworCisvKioKKyAqIEBwYXJhbSBjOiBpbnB1dCBzdHJpbmcKKyAqCisgKiByZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBmaXJzdCBsb2NhdGlvbiBpbiBjIHdoaWNoIGlzIGEgYmxhbmsgc3BhY2UKKyAqIHdoZXJlIGJsYW5rIHNwYWNlIGFyZSBpbiAiIFx0XG4iCisgKi8KK2NoYXIgY29uc3QgKiBza2lwX25vbndzKGNoYXIgY29uc3QgKiBjKTsKKworLyoqCisgKiBAcGFyYW0gYzogaW5wdXQgc3RyaW5nCisgKgorICogcmV0dXJuIG5vbiB6ZXJvIGlmIGMgc3RyaW5nIGNvbnRhaW5zIG9ubHkgYmxhbmsgc3BhY2UKKyAqIHdoZXJlIGJsYW5rIHNwYWNlIGFyZSBpbiAiIFx0XG4iCisgKi8KK2ludCBlbXB0eV9saW5lKGNoYXIgY29uc3QgKiBjKTsKKworLyoqCisgKiBAcGFyYW0gYzogaW5wdXQgc3RyaW5nCisgKgorICogcmV0dXJuIG5vbiB6ZXJvIGlmIGMgc3RyaW5nIGlzIGEgY29tbWVudC4gQ29tbWVudCBhcmUgbGluZXMgd2l0aCBvcHRpb25hbAorICogYmxhbmsgc3BhY2UgYXQgbGVmdCB0aGVuIGEgJyMnIGNoYXJhY3Rlci4gQmxhbmsgc3BhY2UgYXJlIGluICIgXHRcbiIKKyAqLworaW50IGNvbW1lbnRfbGluZShjaGFyIGNvbnN0ICogYyk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiAhT1BfU1RSSU5HX0ggKi8KZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2xpYnV0aWwvb3BfdHlwZXMuaCBiL29wcm9maWxlLTAuOS43L2xpYnV0aWwvb3BfdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDI1YjIzCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvbGlidXRpbC9vcF90eXBlcy5oCkBAIC0wLDAgKzEsMzcgQEAKKy8qKgorICogQGZpbGUgb3BfdHlwZXMuaAorICogR2VuZXJhbC11dGlsaXR5IHR5cGVzCisgKgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMiBPUHJvZmlsZSBhdXRob3JzCisgKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORworICoKKyAqIEBhdXRob3IgSm9obiBMZXZvbgorICogQGF1dGhvciBQaGlsaXBwZSBFbGllCisgKi8KKworI2lmbmRlZiBPUF9UWVBFU19ICisjZGVmaW5lIE9QX1RZUEVTX0gKKworI2lmbmRlZiBfX0tFUk5FTF9fCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKworLypAe1xuYW1lIG1pc2NlbGxhbmVvdXMgdHlwZXMgKi8KK3R5cGVkZWYgdW5zaWduZWQgY2hhciB1ODsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgdTE2OwordHlwZWRlZiB1bnNpZ25lZCBpbnQgdTMyOwordHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgdTY0OwordHlwZWRlZiBpbnQgZmRfdDsKKy8qQH0qLworCisvKiogZ2VuZXJpYyB0eXBlIGZvciBob2xkaW5nIGFkZHJlc3NlcyAqLwordHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgdm1hX3Q7CisKKy8qKiBnZW5lcmljIHR5cGUgdG8gaG9sZCBhIHNhbXBsZSBjb3VudCBpbiBwcCB0b29scyAqLwordHlwZWRlZiB1NjQgY291bnRfdHlwZTsKKworI2Vsc2UKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2VuZGlmCisKKyNlbmRpZiAvKiBPUF9UWVBFU19IICovCmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9saWJ1dGlsL29wX3ZlcnNpb24uYyBiL29wcm9maWxlLTAuOS43L2xpYnV0aWwvb3BfdmVyc2lvbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5YTg0NGUKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9saWJ1dGlsL29wX3ZlcnNpb24uYwpAQCAtMCwwICsxLDI0IEBACisvKioKKyAqIEBmaWxlIG9wX3ZlcnNpb24uYworICogb3V0cHV0IHZlcnNpb24gc3RyaW5nCisgKgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMyBPUHJvZmlsZSBhdXRob3JzCisgKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORworICoKKyAqIEBhdXRob3IgSm9obiBMZXZvbgorICogQGF1dGhvciBQaGlsaXBwZSBFbGllCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKKyNpbmNsdWRlICJvcF92ZXJzaW9uLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisKK3ZvaWQgc2hvd192ZXJzaW9uKGNoYXIgY29uc3QgKiBhcHBfbmFtZSkKK3sKKwkvKiBEbyBub3QgY2hhbmdlIHRoZSB2ZXJzaW9uIGZvcm1hdDogaXQgaXMgZG9jdW1lbnRlZCBpbiBodG1sIGRvYyAqLworCXByaW50ZigiJXM6ICIgUEFDS0FHRSAiICIgVkVSU0lPTiAiIGNvbXBpbGVkIG9uICIKKwkgICAgICAgX19EQVRFX18gIiAiIF9fVElNRV9fICJcbiIsIGFwcF9uYW1lKTsKKwlleGl0KEVYSVRfU1VDQ0VTUyk7Cit9CmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9saWJ1dGlsL29wX3ZlcnNpb24uaCBiL29wcm9maWxlLTAuOS43L2xpYnV0aWwvb3BfdmVyc2lvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzYTgzNjUKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9saWJ1dGlsL29wX3ZlcnNpb24uaApAQCAtMCwwICsxLDI2IEBACisvKioKKyAqIEBmaWxlIG9wX3ZlcnNpb24uaAorICogb3V0cHV0IHZlcnNpb24gc3RyaW5nCisgKgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMyBPUHJvZmlsZSBhdXRob3JzCisgKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORworICoKKyAqIEBhdXRob3IgSm9obiBMZXZvbgorICogQGF1dGhvciBQaGlsaXBwZSBFbGllCisgKi8KKworI2lmbmRlZiBPUF9WRVJTSU9OX0gKKyNkZWZpbmUgT1BfVkVSU0lPTl9ICisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqIG91dHB1dCB0aGUgdmVyc2lvbiBzdHJpbmcgKi8KK3ZvaWQgc2hvd192ZXJzaW9uKGNoYXIgY29uc3QgKiBhcHBfbmFtZSk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiAhT1BfVkVSU0lPTl9IICovCmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9saWJ1dGlsL3Rlc3RzL01ha2VmaWxlLmFtIGIvb3Byb2ZpbGUtMC45LjcvbGlidXRpbC90ZXN0cy9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZmEzNjBlCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvbGlidXRpbC90ZXN0cy9NYWtlZmlsZS5hbQpAQCAtMCwwICsxLDE1IEBACitBTV9DUFBGTEFHUyA9IFwKKwktSSAke3RvcF9zcmNkaXJ9L2xpYnV0aWwKKworQU1fQ0ZMQUdTID0gQE9QX0NGTEFHU0AKKworTElCUyA9IEBMSUJFUlRZX0xJQlNACisKK2NoZWNrX1BST0dSQU1TID0gZmlsZV90ZXN0cyBzdHJpbmdfdGVzdHMKKworZmlsZV90ZXN0c19TT1VSQ0VTID0gZmlsZV90ZXN0cy5jCitmaWxlX3Rlc3RzX0xEQUREID0gLi4vbGlidXRpbC5hCitzdHJpbmdfdGVzdHNfU09VUkNFUyA9IHN0cmluZ190ZXN0cy5jCitzdHJpbmdfdGVzdHNfTERBREQgPSAuLi9saWJ1dGlsLmEKKworVEVTVFMgPSAke2NoZWNrX1BST0dSQU1TfQpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvbGlidXRpbC90ZXN0cy9NYWtlZmlsZS5pbiBiL29wcm9maWxlLTAuOS43L2xpYnV0aWwvdGVzdHMvTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjRiYWZlYwotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2xpYnV0aWwvdGVzdHMvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSw2MzUgQEAKKyMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTEuMSBmcm9tIE1ha2VmaWxlLmFtLgorIyBAY29uZmlndXJlX2lucHV0QAorCisjIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwKKyMgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorIyBJbmMuCisjIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0CisjIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKKyMgUEFSVElDVUxBUiBQVVJQT1NFLgorCitAU0VUX01BS0VACitWUEFUSCA9IEBzcmNkaXJACitwa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKK3BrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAorcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAorcGtnbGliZXhlY2RpciA9ICQobGliZXhlY2RpcikvQFBBQ0tBR0VACithbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCitpbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAoraW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYworaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCitJTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQordHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQorTk9STUFMX0lOU1RBTEwgPSA6CitQUkVfSU5TVEFMTCA9IDoKK1BPU1RfSU5TVEFMTCA9IDoKK05PUk1BTF9VTklOU1RBTEwgPSA6CitQUkVfVU5JTlNUQUxMID0gOgorUE9TVF9VTklOU1RBTEwgPSA6CitidWlsZF90cmlwbGV0ID0gQGJ1aWxkQAoraG9zdF90cmlwbGV0ID0gQGhvc3RACitjaGVja19QUk9HUkFNUyA9IGZpbGVfdGVzdHMkKEVYRUVYVCkgc3RyaW5nX3Rlc3RzJChFWEVFWFQpCitURVNUUyA9ICQoY2hlY2tfUFJPR1JBTVMpCitzdWJkaXIgPSBsaWJ1dGlsL3Rlc3RzCitESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKHNyY2RpcikvTWFrZWZpbGUuaW4KK0FDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKK2FtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL200L2JpbnV0aWxzLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2J1aWx0aW5leHBlY3QubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY2VsbHNwdWJmZHN1cHBvcnQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY29tcGlsZXJvcHRpb24ubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY29uZmlnbW9kdWxlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2NvcHlpZmNoYW5nZS5tNCAkKHRvcF9zcmNkaXIpL200L2RvY2Jvb2subTQgXAorCSQodG9wX3NyY2RpcikvbTQvZXh0cmFkaXJzLm00ICQodG9wX3NyY2RpcikvbTQvZmluZGtlcm5lbC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9rZXJuZWxvcHRpb24ubTQgXAorCSQodG9wX3NyY2RpcikvbTQva2VybmVsdmVyc2lvbi5tNCAkKHRvcF9zcmNkaXIpL200L2xpYnRvb2wubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbHRvcHRpb25zLm00ICQodG9wX3NyY2RpcikvbTQvbHRzdWdhci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9sdHZlcnNpb24ubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdH5vYnNvbGV0ZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9tYWxsb2NhdHRyaWJ1dGUubTQgXAorCSQodG9wX3NyY2RpcikvbTQvcG9wdGNvbnN0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3ByZWNvbXBpbGVkaGVhZGVyLm00ICQodG9wX3NyY2RpcikvbTQvcXQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvcmVzdWx0eW4ubTQgJCh0b3Bfc3JjZGlyKS9tNC9zc3RyZWFtLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3R5cGVkZWYubTQgJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuaW4KK2FtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCisJJChBQ0xPQ0FMX000KQorbWtpbnN0YWxsZGlycyA9ICQoaW5zdGFsbF9zaCkgLWQKK0NPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvY29uZmlnLmgKK0NPTkZJR19DTEVBTl9GSUxFUyA9CitDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMgPQorYW1fZmlsZV90ZXN0c19PQkpFQ1RTID0gZmlsZV90ZXN0cy4kKE9CSkVYVCkKK2ZpbGVfdGVzdHNfT0JKRUNUUyA9ICQoYW1fZmlsZV90ZXN0c19PQkpFQ1RTKQorZmlsZV90ZXN0c19ERVBFTkRFTkNJRVMgPSAuLi9saWJ1dGlsLmEKK2FtX3N0cmluZ190ZXN0c19PQkpFQ1RTID0gc3RyaW5nX3Rlc3RzLiQoT0JKRVhUKQorc3RyaW5nX3Rlc3RzX09CSkVDVFMgPSAkKGFtX3N0cmluZ190ZXN0c19PQkpFQ1RTKQorc3RyaW5nX3Rlc3RzX0RFUEVOREVOQ0lFUyA9IC4uL2xpYnV0aWwuYQorREVGQVVMVF9JTkNMVURFUyA9IC1JLkBhbV9faXNyY0AgLUkkKHRvcF9idWlsZGRpcikKK2RlcGNvbXAgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL2RlcGNvbXAKK2FtX19kZXBmaWxlc19tYXliZSA9IGRlcGZpbGVzCithbV9fbXYgPSBtdiAtZgorQ09NUElMRSA9ICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSBcCisJJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQorTFRDT01QSUxFID0gJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIFwKKwktLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgXAorCSQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKK0NDTEQgPSAkKENDKQorTElOSyA9ICQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSBcCisJLS1tb2RlPWxpbmsgJChDQ0xEKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpICQoQU1fTERGTEFHUykgXAorCSQoTERGTEFHUykgLW8gJEAKK1NPVVJDRVMgPSAkKGZpbGVfdGVzdHNfU09VUkNFUykgJChzdHJpbmdfdGVzdHNfU09VUkNFUykKK0RJU1RfU09VUkNFUyA9ICQoZmlsZV90ZXN0c19TT1VSQ0VTKSAkKHN0cmluZ190ZXN0c19TT1VSQ0VTKQorRVRBR1MgPSBldGFncworQ1RBR1MgPSBjdGFncworYW1fX3R0eV9jb2xvcnMgPSBcCityZWQ9OyBncm49OyBsZ249OyBibHU9OyBzdGQ9CitESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQorQUNMT0NBTCA9IEBBQ0xPQ0FMQAorQU1UQVIgPSBAQU1UQVJACitBUiA9IEBBUkAKK0FVVE9DT05GID0gQEFVVE9DT05GQAorQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAorQVVUT01BS0UgPSBAQVVUT01BS0VACitBV0sgPSBAQVdLQAorQkZEX0xJQlMgPSBAQkZEX0xJQlNACitDQVRfRU5UUllfRU5EID0gQENBVF9FTlRSWV9FTkRACitDQVRfRU5UUllfU1RBUlQgPSBAQ0FUX0VOVFJZX1NUQVJUQAorQ0MgPSBAQ0NACitDQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAorQ0ZMQUdTID0gQENGTEFHU0AKK0NQUCA9IEBDUFBACitDUFBGTEFHUyA9IEBDUFBGTEFHU0AKK0NYWCA9IEBDWFhACitDWFhDUFAgPSBAQ1hYQ1BQQAorQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAorQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACitDWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAorREFURSA9IEBEQVRFQAorREVGUyA9IEBERUZTQAorREVQRElSID0gQERFUERJUkAKK0RPQ0JPT0tfUk9PVCA9IEBET0NCT09LX1JPT1RACitEU1lNVVRJTCA9IEBEU1lNVVRJTEAKK0RVTVBCSU4gPSBARFVNUEJJTkAKK0VDSE9fQyA9IEBFQ0hPX0NACitFQ0hPX04gPSBARUNIT19OQAorRUNIT19UID0gQEVDSE9fVEAKK0VHUkVQID0gQEVHUkVQQAorRVhFRVhUID0gQEVYRUVYVEAKK0VYVFJBX0NGTEFHU19NT0RVTEUgPSBARVhUUkFfQ0ZMQUdTX01PRFVMRUAKK0ZHUkVQID0gQEZHUkVQQAorR1JFUCA9IEBHUkVQQAorSU5TVEFMTCA9IEBJTlNUQUxMQAorSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKK0lOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACitJTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKK0lOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACitKQVZBX0hPTUVESVIgPSBASkFWQV9IT01FRElSQAorS0lOQyA9IEBLSU5DQAorS1NSQyA9IEBLU1JDQAorS1ZFUlMgPSBAS1ZFUlNACitMRCA9IEBMREAKK0xERkxBR1MgPSBATERGTEFHU0AKK0xJQkVSVFlfTElCUyA9IEBMSUJFUlRZX0xJQlNACitMSUJPQkpTID0gQExJQk9CSlNACitMSUJTID0gQExJQkVSVFlfTElCU0AKK0xJQlRPT0wgPSBATElCVE9PTEAKK0xJUE8gPSBATElQT0AKK0xOX1MgPSBATE5fU0AKK0xUTElCT0JKUyA9IEBMVExJQk9CSlNACitNQUtFSU5GTyA9IEBNQUtFSU5GT0AKK01LRElSX1AgPSBATUtESVJfUEAKK01PQyA9IEBNT0NACitNT0RJTlNUQUxMRElSID0gQE1PRElOU1RBTExESVJACitOTSA9IEBOTUAKK05NRURJVCA9IEBOTUVESVRACitPQkpEVU1QID0gQE9CSkRVTVBACitPQkpFWFQgPSBAT0JKRVhUQAorT1BST0ZJTEVfRElSID0gQE9QUk9GSUxFX0RJUkAKK09QUk9GSUxFX01PRFVMRV9BUkNIID0gQE9QUk9GSUxFX01PRFVMRV9BUkNIQAorT1BfQ0ZMQUdTID0gQE9QX0NGTEFHU0AKK09QX0NYWEZMQUdTID0gQE9QX0NYWEZMQUdTQAorT1BfRE9DRElSID0gQE9QX0RPQ0RJUkAKK09UT09MID0gQE9UT09MQAorT1RPT0w2NCA9IEBPVE9PTDY0QAorUEFDS0FHRSA9IEBQQUNLQUdFQAorUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACitQQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAorUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACitQQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAorUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACitQQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAorUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACitQS0dfQ09ORklHID0gQFBLR19DT05GSUdACitQS0dfQ09ORklHX0xJQkRJUiA9IEBQS0dfQ09ORklHX0xJQkRJUkAKK1BLR19DT05GSUdfUEFUSCA9IEBQS0dfQ09ORklHX1BBVEhACitQT1BUX0xJQlMgPSBAUE9QVF9MSUJTQAorUFRSRElGRl9UX1RZUEUgPSBAUFRSRElGRl9UX1RZUEVACitRVF9DRkxBR1MgPSBAUVRfQ0ZMQUdTQAorUVRfSU5DTFVERVMgPSBAUVRfSU5DTFVERVNACitRVF9MREZMQUdTID0gQFFUX0xERkxBR1NACitRVF9MSUIgPSBAUVRfTElCQAorUVRfTElCUyA9IEBRVF9MSUJTQAorUVRfVkVSU0lPTiA9IEBRVF9WRVJTSU9OQAorUkFOTElCID0gQFJBTkxJQkAKK1NFRCA9IEBTRURACitTRVRfTUFLRSA9IEBTRVRfTUFLRUAKK1NIRUxMID0gQFNIRUxMQAorU0laRV9UX1RZUEUgPSBAU0laRV9UX1RZUEVACitTVFJJUCA9IEBTVFJJUEAKK1VJQyA9IEBVSUNACitVSUNoZWxwID0gQFVJQ2hlbHBACitWRVJTSU9OID0gQFZFUlNJT05ACitYTUtNRiA9IEBYTUtNRkAKK1hNTF9DQVRBTE9HID0gQFhNTF9DQVRBTE9HQAorWFNMVFBST0MgPSBAWFNMVFBST0NACitYU0xUUFJPQ19GTEFHUyA9IEBYU0xUUFJPQ19GTEFHU0AKK1hfQ0ZMQUdTID0gQFhfQ0ZMQUdTQAorWF9FWFRSQV9MSUJTID0gQFhfRVhUUkFfTElCU0AKK1hfTElCUyA9IEBYX0xJQlNACitYX1BSRV9MSUJTID0gQFhfUFJFX0xJQlNACithYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAorYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAorYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAorYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACithY19jdF9DQyA9IEBhY19jdF9DQ0AKK2FjX2N0X0NYWCA9IEBhY19jdF9DWFhACithY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACithbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKK2FtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACithbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAorYW1fX3RhciA9IEBhbV9fdGFyQAorYW1fX3VudGFyID0gQGFtX191bnRhckAKK2JpbmRpciA9IEBiaW5kaXJACitidWlsZCA9IEBidWlsZEAKK2J1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAorYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKK2J1aWxkX29zID0gQGJ1aWxkX29zQAorYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKK2J1aWxkZGlyID0gQGJ1aWxkZGlyQAorZGF0YWRpciA9IEBkYXRhZGlyQAorZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACitkb2NkaXIgPSBAZG9jZGlyQAorZHZpZGlyID0gQGR2aWRpckAKK2V4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAoraG9zdCA9IEBob3N0QAoraG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAoraG9zdF9jcHUgPSBAaG9zdF9jcHVACitob3N0X29zID0gQGhvc3Rfb3NACitob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKK2h0bWxkaXIgPSBAaHRtbGRpckAKK2luY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKK2luZm9kaXIgPSBAaW5mb2RpckAKK2luc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKK2xpYmRpciA9IEBsaWJkaXJACitsaWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACitsb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAorbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAorbHRfRUNITyA9IEBsdF9FQ0hPQAorbWFuZGlyID0gQG1hbmRpckAKK21rZGlyX3AgPSBAbWtkaXJfcEAKK29sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKK3BkZmRpciA9IEBwZGZkaXJACitwcmVmaXggPSBAcHJlZml4QAorcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAorcHNkaXIgPSBAcHNkaXJACitzYmluZGlyID0gQHNiaW5kaXJACitzaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKK3NyY2RpciA9IEBzcmNkaXJACitzeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACit0YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAordG9wX2J1aWxkX3ByZWZpeCA9IEB0b3BfYnVpbGRfcHJlZml4QAordG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKK3RvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKK3RvcGRpciA9IEB0b3BkaXJACitBTV9DUFBGTEFHUyA9IFwKKwktSSAke3RvcF9zcmNkaXJ9L2xpYnV0aWwKKworQU1fQ0ZMQUdTID0gQE9QX0NGTEFHU0AKK2ZpbGVfdGVzdHNfU09VUkNFUyA9IGZpbGVfdGVzdHMuYworZmlsZV90ZXN0c19MREFERCA9IC4uL2xpYnV0aWwuYQorc3RyaW5nX3Rlc3RzX1NPVVJDRVMgPSBzdHJpbmdfdGVzdHMuYworc3RyaW5nX3Rlc3RzX0xEQUREID0gLi4vbGlidXRpbC5hCithbGw6IGFsbC1hbQorCisuU1VGRklYRVM6CisuU1VGRklYRVM6IC5jIC5sbyAubyAub2JqCiskKHNyY2RpcikvTWFrZWZpbGUuaW46ICAkKHNyY2RpcikvTWFrZWZpbGUuYW0gICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCUBmb3IgZGVwIGluICQ/OyBkbyBcCisJICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKKwkgICAgKiQkZGVwKikgXAorCSAgICAgICggY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoICkgXAorCSAgICAgICAgJiYgeyBpZiB0ZXN0IC1mICRAOyB0aGVuIGV4aXQgMDsgZWxzZSBicmVhazsgZmk7IH07IFwKKwkgICAgICBleGl0IDE7OyBcCisJICBlc2FjOyBcCisJZG9uZTsgXAorCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZm9yZWlnbiBsaWJ1dGlsL3Rlc3RzL01ha2VmaWxlJzsgXAorCSQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmIFwKKwkgICQoQVVUT01BS0UpIC0tZm9yZWlnbiBsaWJ1dGlsL3Rlc3RzL01ha2VmaWxlCisuUFJFQ0lPVVM6IE1ha2VmaWxlCitNYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCisJQGNhc2UgJyQ/JyBpbiBcCisJICAqY29uZmlnLnN0YXR1cyopIFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoOzsgXAorCSAgKikgXAorCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCisJZXNhYzsKKworJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2RpcikvY29uZmlndXJlICQoQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCisKKyQodG9wX3NyY2RpcikvY29uZmlndXJlOiAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCiskKEFDTE9DQUxfTTQpOiAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorJChhbV9fYWNsb2NhbF9tNF9kZXBzKToKKworY2xlYW4tY2hlY2tQUk9HUkFNUzoKKwlAbGlzdD0nJChjaGVja19QUk9HUkFNUyknOyB0ZXN0IC1uICIkJGxpc3QiIHx8IGV4aXQgMDsgXAorCWVjaG8gIiBybSAtZiIgJCRsaXN0OyBcCisJcm0gLWYgJCRsaXN0IHx8IGV4aXQgJCQ/OyBcCisJdGVzdCAtbiAiJChFWEVFWFQpIiB8fCBleGl0IDA7IFwKKwlsaXN0PWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCI7IGRvbmUgfCBzZWQgJ3MvJChFWEVFWFQpJCQvLydgOyBcCisJZWNobyAiIHJtIC1mIiAkJGxpc3Q7IFwKKwlybSAtZiAkJGxpc3QKK2ZpbGVfdGVzdHMkKEVYRUVYVCk6ICQoZmlsZV90ZXN0c19PQkpFQ1RTKSAkKGZpbGVfdGVzdHNfREVQRU5ERU5DSUVTKSAKKwlAcm0gLWYgZmlsZV90ZXN0cyQoRVhFRVhUKQorCSQoTElOSykgJChmaWxlX3Rlc3RzX09CSkVDVFMpICQoZmlsZV90ZXN0c19MREFERCkgJChMSUJTKQorc3RyaW5nX3Rlc3RzJChFWEVFWFQpOiAkKHN0cmluZ190ZXN0c19PQkpFQ1RTKSAkKHN0cmluZ190ZXN0c19ERVBFTkRFTkNJRVMpIAorCUBybSAtZiBzdHJpbmdfdGVzdHMkKEVYRUVYVCkKKwkkKExJTkspICQoc3RyaW5nX3Rlc3RzX09CSkVDVFMpICQoc3RyaW5nX3Rlc3RzX0xEQUREKSAkKExJQlMpCisKK21vc3RseWNsZWFuLWNvbXBpbGU6CisJLXJtIC1mICouJChPQkpFWFQpCisKK2Rpc3RjbGVhbi1jb21waWxlOgorCS1ybSAtZiAqLnRhYi5jCisKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9maWxlX3Rlc3RzLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9zdHJpbmdfdGVzdHMuUG9AYW1fX3F1b3RlQAorCisuYy5vOgorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCAkPAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDT01QSUxFKSAtYyAkPAorCisuYy5vYmo6CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJCouVHBvIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ09NUElMRSkgLWMgYCQoQ1lHUEFUSF9XKSAnJDwnYAorCisuYy5sbzoKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoTFRDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCAkPAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExUQ09NUElMRSkgLWMgLW8gJEAgJDwKKworbW9zdGx5Y2xlYW4tbGlidG9vbDoKKwktcm0gLWYgKi5sbworCitjbGVhbi1saWJ0b29sOgorCS1ybSAtcmYgLmxpYnMgX2xpYnMKKworSUQ6ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKExJU1ApICQoVEFHU19GSUxFUykKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKwkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKwlta2lkIC1mSUQgJCR1bmlxdWUKK3RhZ3M6IFRBR1MKKworVEFHUzogICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAorCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKwlzZXQgeDsgXAorCWhlcmU9YHB3ZGA7IFwKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCisJICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCisJc2hpZnQ7IFwKKwlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCQqJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAorCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAorCSAgaWYgdGVzdCAkJCMgLWd0IDA7IHRoZW4gXAorCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCisJICAgICAgIiQkQCIgJCR1bmlxdWU7IFwKKwkgIGVsc2UgXAorCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCisJICAgICAgJCR1bmlxdWU7IFwKKwkgIGZpOyBcCisJZmkKK2N0YWdzOiBDVEFHUworQ1RBR1M6ICAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKKwkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHVuaXF1ZSIgXAorCSAgfHwgJChDVEFHUykgJChDVEFHU0ZMQUdTKSAkKEFNX0NUQUdTRkxBR1MpICQoQ1RBR1NfQVJHUykgXAorCSAgICAgJCR1bmlxdWUKKworR1RBR1M6CisJaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKKwkgICYmICQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpIFwKKwkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgIiQkaGVyZSIKKworZGlzdGNsZWFuLXRhZ3M6CisJLXJtIC1mIFRBR1MgSUQgR1RBR1MgR1JUQUdTIEdTWU1TIEdQQVRIIHRhZ3MKKworY2hlY2stVEVTVFM6ICQoVEVTVFMpCisJQGZhaWxlZD0wOyBhbGw9MDsgeGZhaWw9MDsgeHBhc3M9MDsgc2tpcD0wOyBcCisJc3JjZGlyPSQoc3JjZGlyKTsgZXhwb3J0IHNyY2RpcjsgXAorCWxpc3Q9JyAkKFRFU1RTKSAnOyBcCisJJChhbV9fdHR5X2NvbG9ycyk7IFwKKwlpZiB0ZXN0IC1uICIkJGxpc3QiOyB0aGVuIFwKKwkgIGZvciB0c3QgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgLi8kJHRzdDsgdGhlbiBkaXI9Li87IFwKKwkgICAgZWxpZiB0ZXN0IC1mICQkdHN0OyB0aGVuIGRpcj07IFwKKwkgICAgZWxzZSBkaXI9IiQoc3JjZGlyKS8iOyBmaTsgXAorCSAgICBpZiAkKFRFU1RTX0VOVklST05NRU5UKSAkJHtkaXJ9JCR0c3Q7IHRoZW4gXAorCSAgICAgIGFsbD1gZXhwciAkJGFsbCArIDFgOyBcCisJICAgICAgY2FzZSAiICQoWEZBSUxfVEVTVFMpICIgaW4gXAorCSAgICAgICpbXCBcCV0kJHRzdFtcIFwJXSopIFwKKwkJeHBhc3M9YGV4cHIgJCR4cGFzcyArIDFgOyBcCisJCWZhaWxlZD1gZXhwciAkJGZhaWxlZCArIDFgOyBcCisJCWNvbD0kJHJlZDsgcmVzPVhQQVNTOyBcCisJICAgICAgOzsgXAorCSAgICAgICopIFwKKwkJY29sPSQkZ3JuOyByZXM9UEFTUzsgXAorCSAgICAgIDs7IFwKKwkgICAgICBlc2FjOyBcCisJICAgIGVsaWYgdGVzdCAkJD8gLW5lIDc3OyB0aGVuIFwKKwkgICAgICBhbGw9YGV4cHIgJCRhbGwgKyAxYDsgXAorCSAgICAgIGNhc2UgIiAkKFhGQUlMX1RFU1RTKSAiIGluIFwKKwkgICAgICAqW1wgXAldJCR0c3RbXCBcCV0qKSBcCisJCXhmYWlsPWBleHByICQkeGZhaWwgKyAxYDsgXAorCQljb2w9JCRsZ247IHJlcz1YRkFJTDsgXAorCSAgICAgIDs7IFwKKwkgICAgICAqKSBcCisJCWZhaWxlZD1gZXhwciAkJGZhaWxlZCArIDFgOyBcCisJCWNvbD0kJHJlZDsgcmVzPUZBSUw7IFwKKwkgICAgICA7OyBcCisJICAgICAgZXNhYzsgXAorCSAgICBlbHNlIFwKKwkgICAgICBza2lwPWBleHByICQkc2tpcCArIDFgOyBcCisJICAgICAgY29sPSQkYmx1OyByZXM9U0tJUDsgXAorCSAgICBmaTsgXAorCSAgICBlY2hvICIkJHtjb2x9JCRyZXMkJHtzdGR9OiAkJHRzdCI7IFwKKwkgIGRvbmU7IFwKKwkgIGlmIHRlc3QgIiQkYWxsIiAtZXEgMTsgdGhlbiBcCisJICAgIHRlc3RzPSJ0ZXN0IjsgXAorCSAgICBBbGw9IiI7IFwKKwkgIGVsc2UgXAorCSAgICB0ZXN0cz0idGVzdHMiOyBcCisJICAgIEFsbD0iQWxsICI7IFwKKwkgIGZpOyBcCisJICBpZiB0ZXN0ICIkJGZhaWxlZCIgLWVxIDA7IHRoZW4gXAorCSAgICBpZiB0ZXN0ICIkJHhmYWlsIiAtZXEgMDsgdGhlbiBcCisJICAgICAgYmFubmVyPSIkJEFsbCQkYWxsICQkdGVzdHMgcGFzc2VkIjsgXAorCSAgICBlbHNlIFwKKwkgICAgICBpZiB0ZXN0ICIkJHhmYWlsIiAtZXEgMTsgdGhlbiBmYWlsdXJlcz1mYWlsdXJlOyBlbHNlIGZhaWx1cmVzPWZhaWx1cmVzOyBmaTsgXAorCSAgICAgIGJhbm5lcj0iJCRBbGwkJGFsbCAkJHRlc3RzIGJlaGF2ZWQgYXMgZXhwZWN0ZWQgKCQkeGZhaWwgZXhwZWN0ZWQgJCRmYWlsdXJlcykiOyBcCisJICAgIGZpOyBcCisJICBlbHNlIFwKKwkgICAgaWYgdGVzdCAiJCR4cGFzcyIgLWVxIDA7IHRoZW4gXAorCSAgICAgIGJhbm5lcj0iJCRmYWlsZWQgb2YgJCRhbGwgJCR0ZXN0cyBmYWlsZWQiOyBcCisJICAgIGVsc2UgXAorCSAgICAgIGlmIHRlc3QgIiQkeHBhc3MiIC1lcSAxOyB0aGVuIHBhc3Nlcz1wYXNzOyBlbHNlIHBhc3Nlcz1wYXNzZXM7IGZpOyBcCisJICAgICAgYmFubmVyPSIkJGZhaWxlZCBvZiAkJGFsbCAkJHRlc3RzIGRpZCBub3QgYmVoYXZlIGFzIGV4cGVjdGVkICgkJHhwYXNzIHVuZXhwZWN0ZWQgJCRwYXNzZXMpIjsgXAorCSAgICBmaTsgXAorCSAgZmk7IFwKKwkgIGRhc2hlcz0iJCRiYW5uZXIiOyBcCisJICBza2lwcGVkPSIiOyBcCisJICBpZiB0ZXN0ICIkJHNraXAiIC1uZSAwOyB0aGVuIFwKKwkgICAgaWYgdGVzdCAiJCRza2lwIiAtZXEgMTsgdGhlbiBcCisJICAgICAgc2tpcHBlZD0iKCQkc2tpcCB0ZXN0IHdhcyBub3QgcnVuKSI7IFwKKwkgICAgZWxzZSBcCisJICAgICAgc2tpcHBlZD0iKCQkc2tpcCB0ZXN0cyB3ZXJlIG5vdCBydW4pIjsgXAorCSAgICBmaTsgXAorCSAgICB0ZXN0IGBlY2hvICIkJHNraXBwZWQiIHwgd2MgLWNgIC1sZSBgZWNobyAiJCRiYW5uZXIiIHwgd2MgLWNgIHx8IFwKKwkgICAgICBkYXNoZXM9IiQkc2tpcHBlZCI7IFwKKwkgIGZpOyBcCisJICByZXBvcnQ9IiI7IFwKKwkgIGlmIHRlc3QgIiQkZmFpbGVkIiAtbmUgMCAmJiB0ZXN0IC1uICIkKFBBQ0tBR0VfQlVHUkVQT1JUKSI7IHRoZW4gXAorCSAgICByZXBvcnQ9IlBsZWFzZSByZXBvcnQgdG8gJChQQUNLQUdFX0JVR1JFUE9SVCkiOyBcCisJICAgIHRlc3QgYGVjaG8gIiQkcmVwb3J0IiB8IHdjIC1jYCAtbGUgYGVjaG8gIiQkYmFubmVyIiB8IHdjIC1jYCB8fCBcCisJICAgICAgZGFzaGVzPSIkJHJlcG9ydCI7IFwKKwkgIGZpOyBcCisJICBkYXNoZXM9YGVjaG8gIiQkZGFzaGVzIiB8IHNlZCBzLy4vPS9nYDsgXAorCSAgaWYgdGVzdCAiJCRmYWlsZWQiIC1lcSAwOyB0aGVuIFwKKwkgICAgZWNobyAiJCRncm4kJGRhc2hlcyI7IFwKKwkgIGVsc2UgXAorCSAgICBlY2hvICIkJHJlZCQkZGFzaGVzIjsgXAorCSAgZmk7IFwKKwkgIGVjaG8gIiQkYmFubmVyIjsgXAorCSAgdGVzdCAteiAiJCRza2lwcGVkIiB8fCBlY2hvICIkJHNraXBwZWQiOyBcCisJICB0ZXN0IC16ICIkJHJlcG9ydCIgfHwgZWNobyAiJCRyZXBvcnQiOyBcCisJICBlY2hvICIkJGRhc2hlcyQkc3RkIjsgXAorCSAgdGVzdCAiJCRmYWlsZWQiIC1lcSAwOyBcCisJZWxzZSA6OyBmaQorCitkaXN0ZGlyOiAkKERJU1RGSUxFUykKKwlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisJdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCWxpc3Q9JyQoRElTVEZJTEVTKSc7IFwKKwkgIGRpc3RfZmlsZXM9YGZvciBmaWxlIGluICQkbGlzdDsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBcCisJICBzZWQgLWUgInN8XiQkc3JjZGlyc3RyaXAvfHw7dCIgXAorCSAgICAgIC1lICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfDt0ImA7IFwKKwljYXNlICQkZGlzdF9maWxlcyBpbiBcCisJICAqLyopICQoTUtESVJfUCkgYGVjaG8gIiQkZGlzdF9maWxlcyIgfCBcCisJCQkgICBzZWQgJy9cLy8hZDtzfF58JChkaXN0ZGlyKS98O3MsL1teL10qJCQsLCcgfCBcCisJCQkgICBzb3J0IC11YCA7OyBcCisJZXNhYzsgXAorCWZvciBmaWxlIGluICQkZGlzdF9maWxlczsgZG8gXAorCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAorCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKKwkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKKwkgICAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJGZpbGUiOyB0aGVuIFwKKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKwkgICAgZmk7IFwKKwkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCisJICAgICAgY3AgLWZwUiAkKHNyY2RpcikvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAorCSAgICBmaTsgXAorCSAgICBjcCAtZnBSICQkZC8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCisJICBlbHNlIFwKKwkgICAgdGVzdCAtZiAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKKwkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKKwkgICAgfHwgZXhpdCAxOyBcCisJICBmaTsgXAorCWRvbmUKK2NoZWNrLWFtOiBhbGwtYW0KKwkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSAkKGNoZWNrX1BST0dSQU1TKQorCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGNoZWNrLVRFU1RTCitjaGVjazogY2hlY2stYW0KK2FsbC1hbTogTWFrZWZpbGUKK2luc3RhbGxkaXJzOgoraW5zdGFsbDogaW5zdGFsbC1hbQoraW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtYW0KK2luc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLWFtCit1bmluc3RhbGw6IHVuaW5zdGFsbC1hbQorCitpbnN0YWxsLWFtOiBhbGwtYW0KKwlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQorCitpbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1hbQoraW5zdGFsbC1zdHJpcDoKKwkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAorCSAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCisJICBgdGVzdCAteiAnJChTVFJJUCknIHx8IFwKKwkgICAgZWNobyAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyJgIGluc3RhbGwKK21vc3RseWNsZWFuLWdlbmVyaWM6CisKK2NsZWFuLWdlbmVyaWM6CisKK2Rpc3RjbGVhbi1nZW5lcmljOgorCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQorCS10ZXN0IC4gPSAiJChzcmNkaXIpIiB8fCB0ZXN0IC16ICIkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKQorCittYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6CisJQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgorCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKK2NsZWFuOiBjbGVhbi1hbQorCitjbGVhbi1hbTogY2xlYW4tY2hlY2tQUk9HUkFNUyBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgXAorCW1vc3RseWNsZWFuLWFtCisKK2Rpc3RjbGVhbjogZGlzdGNsZWFuLWFtCisJLXJtIC1yZiAuLyQoREVQRElSKQorCS1ybSAtZiBNYWtlZmlsZQorZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCisJZGlzdGNsZWFuLXRhZ3MKKworZHZpOiBkdmktYW0KKworZHZpLWFtOgorCitodG1sOiBodG1sLWFtCisKK2h0bWwtYW06CisKK2luZm86IGluZm8tYW0KKworaW5mby1hbToKKworaW5zdGFsbC1kYXRhLWFtOgorCitpbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktYW0KKworaW5zdGFsbC1kdmktYW06CisKK2luc3RhbGwtZXhlYy1hbToKKworaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KKworaW5zdGFsbC1odG1sLWFtOgorCitpbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQorCitpbnN0YWxsLWluZm8tYW06CisKK2luc3RhbGwtbWFuOgorCitpbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KKworaW5zdGFsbC1wZGYtYW06CisKK2luc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KKworaW5zdGFsbC1wcy1hbToKKworaW5zdGFsbGNoZWNrLWFtOgorCittYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCisJLXJtIC1yZiAuLyQoREVQRElSKQorCS1ybSAtZiBNYWtlZmlsZQorbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYworCittb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tYW0KKworbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCisJbW9zdGx5Y2xlYW4tbGlidG9vbAorCitwZGY6IHBkZi1hbQorCitwZGYtYW06CisKK3BzOiBwcy1hbQorCitwcy1hbToKKwordW5pbnN0YWxsLWFtOgorCisuTUFLRTogY2hlY2stYW0gaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwCisKKy5QSE9OWTogQ1RBR1MgR1RBR1MgYWxsIGFsbC1hbSBjaGVjayBjaGVjay1URVNUUyBjaGVjay1hbSBjbGVhbiBcCisJY2xlYW4tY2hlY2tQUk9HUkFNUyBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgY3RhZ3MgXAorCWRpc3RjbGVhbiBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCisJZGlzdGNsZWFuLWxpYnRvb2wgZGlzdGNsZWFuLXRhZ3MgZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgXAorCWh0bWwtYW0gaW5mbyBpbmZvLWFtIGluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgXAorCWluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBpbnN0YWxsLWR2aS1hbSBpbnN0YWxsLWV4ZWMgXAorCWluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgaW5zdGFsbC1odG1sLWFtIGluc3RhbGwtaW5mbyBcCisJaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIGluc3RhbGwtcGRmIGluc3RhbGwtcGRmLWFtIFwKKwlpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgXAorCWluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBtYWludGFpbmVyLWNsZWFuIFwKKwltYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gbW9zdGx5Y2xlYW4tY29tcGlsZSBcCisJbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sIHBkZiBwZGYtYW0gcHMgcHMtYW0gXAorCXRhZ3MgdW5pbnN0YWxsIHVuaW5zdGFsbC1hbQorCisKKyMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCisjIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KKy5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L2xpYnV0aWwvdGVzdHMvZmlsZV90ZXN0cy5jIGIvb3Byb2ZpbGUtMC45LjcvbGlidXRpbC90ZXN0cy9maWxlX3Rlc3RzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDUyYWJkYgotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L2xpYnV0aWwvdGVzdHMvZmlsZV90ZXN0cy5jCkBAIC0wLDAgKzEsNjkgQEAKKy8qKgorICogQGZpbGUgZmlsZV90ZXN0cy5jCisgKgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMiBPUHJvZmlsZSBhdXRob3JzCisgKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORworICoKKyAqIEBhdXRob3IgSm9obiBMZXZvbgorICogQGF1dGhvciBQaGlsaXBwZSBFbGllCisgKi8KKworI2luY2x1ZGUgIm9wX2ZpbGUuaCIKKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisKK3N0YXRpYyBjaGFyICogdGVzdHNbXVsyXSA9IHsKKwl7ICIvdXNyL2Jpbi8uLi9iaW4iLCAiL3Vzci9iaW4iIH0sCisJeyAiLy4uL3Vzci9iaW4vIiwgIi91c3IvYmluIiB9LAorCXsgIi8uLi8uLi91c3IvYmluLyIsICIvdXNyL2JpbiIgfSwKKwl7ICIvLi4vLi4vdXNyL2Jpbi8uIiwgIi91c3IvYmluIiB9LAorCXsgIi8uLi8uLi91c3IvYmluLy4vIiwgIi91c3IvYmluIiB9LAorCXsgIi91c3IvLi9iaW4iLCAiL3Vzci9iaW4iIH0sCisJeyAiL3Vzci8uLy4vYmluIiwgIi91c3IvYmluIiB9LAorCXsgIi91c3IvLy8iLCAiL3VzciIgfSwKKwl7ICIuLi8iLCAiLyIgfSwKKwl7ICIuLyIsICIvdXNyIiB9LAorCXsgIi4iLCAiL3VzciIgfSwKKwl7ICIuLy4uLyIsICIvIiB9LAorCXsgImJpbi8uLi9iaW4vLi4vIiwgIi91c3IiIH0sCisJeyAiLi4vLi4vLi4vLi4vLi4vIiwgIi8iIH0sCisJeyAiL3Vzci9iaW4vLi4vLi4vLi4iLCAiLyIgfSwKKwl7ICIvdXNyL2Jpbi8uLi8uLi8uLi8iLCAiLyIgfSwKKwl7ICIuLy4vLiIsICIvdXNyIiB9LAorCS8qIFBPU0lYIG5hbWVzcGFjZSBpZ25vcmVkIGJ5IHJlYWxwYXRoKDMpICovCisJeyAiLy8iLCAiLyIgfSwKKwl7ICIvL3VzciIsICIvdXNyIiB9LAorCXsgIi8vLyIsICIvIiB9LAorCXsgTlVMTCwgTlVMTCB9LAorfTsKKworaW50IG1haW4odm9pZCkKK3sKKwljaGFyIHRtcFtQQVRIX01BWF07CisJc2l6ZV90IGkgPSAwOworCisJaWYgKGNoZGlyKCIvdXNyIikpIHsKKwkJZnByaW50ZihzdGRlcnIsICJjaGRpcihcIi91c3JcIikgZmFpbGVkIGZvciAlc1xuIiwgdGVzdHNbaV1bMF0pOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorCisJd2hpbGUgKHRlc3RzW2ldWzBdKSB7CisJCWlmICghcmVhbHBhdGgodGVzdHNbaV1bMF0sIHRtcCkpIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiTlVMTCByZXR1cm4gZm9yICVzXG4iLCB0ZXN0c1tpXVswXSk7CisJCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJCX0KKworCQlpZiAoc3RyY21wKHRtcCwgdGVzdHNbaV1bMV0pKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIiVzIGRvZXMgbm90IG1hdGNoICVzIGdpdmVuICVzXG4iLAorCQkJICAgICAgICB0bXAsIHRlc3RzW2ldWzFdLCB0ZXN0c1tpXVswXSk7CisJCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJCX0KKwkJKytpOworCX0KKworCXJldHVybiBFWElUX1NVQ0NFU1M7Cit9CmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9saWJ1dGlsL3Rlc3RzL3N0cmluZ190ZXN0cy5jIGIvb3Byb2ZpbGUtMC45LjcvbGlidXRpbC90ZXN0cy9zdHJpbmdfdGVzdHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjEzMmNmCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvbGlidXRpbC90ZXN0cy9zdHJpbmdfdGVzdHMuYwpAQCAtMCwwICsxLDkxIEBACisvKioKKyAqIEBmaWxlIHN0cmluZ190ZXN0cy5jCisgKgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMiBPUHJvZmlsZSBhdXRob3JzCisgKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORworICoKKyAqIEBhdXRob3IgSm9obiBMZXZvbgorICogQGF1dGhvciBQaGlsaXBwZSBFbGllCisgKi8KKworI2luY2x1ZGUgIm9wX3N0cmluZy5oIgorCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKwordm9pZCBlcnJvcihjaGFyIGNvbnN0ICogc3RyKQoreworCWZwcmludGYoc3RkZXJyLCAiJXNcbiIsIHN0cik7CisJZXhpdChFWElUX0ZBSUxVUkUpOworfQorCisKK2ludCBtYWluKCkKK3sKKwlpZiAoIXN0cmlzcHJlZml4KCIiLCAiIikpCisJCWVycm9yKCJcIlwiIGlzIG5vdCBhIHByZWZpeCBvZiBcIlwiIik7CisJaWYgKCFzdHJpc3ByZWZpeCgiYSIsICIiKSkKKwkJZXJyb3IoIlwiXCIgaXMgbm90IGEgcHJlZml4IG9mIGEiKTsKKwlpZiAoIXN0cmlzcHJlZml4KCJhIiwgImEiKSkKKwkJZXJyb3IoImEgaXMgbm90IGEgcHJlZml4IG9mIGEiKTsKKwlpZiAoIXN0cmlzcHJlZml4KCJhYSIsICJhIikpCisJCWVycm9yKCJhIGlzIG5vdCBhIHByZWZpeCBvZiBhYSIpOworCWlmIChzdHJpc3ByZWZpeCgiYSIsICJiIikpCisJCWVycm9yKCJiIGlzIGEgcHJlZml4IG9mIGEiKTsKKworCWlmIChzdHJjbXAoc2tpcF93cygiIiksICIiKSkKKwkJZXJyb3IoInNraXBfd3Mgb2YgXCJcIiBpcyBub3QgXCJcIiIpOworCWlmIChzdHJjbXAoc2tpcF93cygiXG5hIiksICJhIikpCisJCWVycm9yKCJza2lwX3dzIG9mIFxcbmEgaXMgbm90IGEiKTsKKwlpZiAoc3RyY21wKHNraXBfd3MoIlxuXG5hIiksICJhIikpCisJCWVycm9yKCJza2lwX3dzIG9mIFxcblxcbmEgaXMgbm90IGEiKTsKKwlpZiAoc3RyY21wKHNraXBfd3MoIlxuIGEiKSwgImEiKSkKKwkJZXJyb3IoInNraXBfd3Mgb2YgXFxuIGEgaXMgbm90IGEiKTsKKwlpZiAoc3RyY21wKHNraXBfd3MoIlxuIFx0YSIpLCAiYSIpKQorCQllcnJvcigic2tpcF93cyBvZiBcXG4gXFx0YSBpcyBub3QgYSIpOworCWlmIChzdHJjbXAoc2tpcF93cygiXG4gXHQiKSwgIiIpKQorCQllcnJvcigic2tpcF93cyBvZiBcXG4gXFx0IGlzIG5vdCBcIlwiIik7CisJaWYgKHN0cmNtcChza2lwX3dzKCIgIiksICIiKSkKKwkJZXJyb3IoInNraXBfd3Mgb2YgXCIgXCIgaXMgbm90IFwiXCIiKTsKKworCWlmIChzdHJjbXAoc2tpcF9ub253cygiIiksICIiKSkKKwkJZXJyb3IoInNraXBfbm9ud3Mgb2YgXCJcIiBpcyBub3QgXCJcIiIpOworCWlmIChzdHJjbXAoc2tpcF9ub253cygiYSIpLCAiIikpCisJCWVycm9yKCJza2lwX25vbndzIG9mIGEgaXMgbm90IFwiXCIiKTsKKwlpZiAoc3RyY21wKHNraXBfbm9ud3MoIlxuIiksICJcbiIpKQorCQllcnJvcigic2tpcF9ub253cyBvZiBcXG4gaXMgbm90IFxcbiIpOworCWlmIChzdHJjbXAoc2tpcF9ub253cygiICIpLCAiICIpKQorCQllcnJvcigic2tpcF9ub253cyBvZiBcIiBcIiBpcyBub3QgXCIgXCIiKTsKKwlpZiAoc3RyY21wKHNraXBfbm9ud3MoIlx0IiksICJcdCIpKQorCQllcnJvcigic2tpcF9ub253cyBvZiBcXHQgaXMgbm90IFxcdCIpOworCWlmIChzdHJjbXAoc2tpcF9ub253cygiYVxuIiksICJcbiIpKQorCQllcnJvcigic2tpcF9ub253cyBvZiBhXFxuIGlzIG5vdCBcXG4iKTsKKwlpZiAoc3RyY21wKHNraXBfbm9ud3MoImFiIiksICIiKSkKKwkJZXJyb3IoInNraXBfbm9ud3Mgb2YgYWIgaXMgbm90IFwiXCIiKTsKKworCWlmICghZW1wdHlfbGluZSgiIikpCisJCWVycm9yKCJlbXB0eV9saW5lIGlzIGZhbHNlIGZvciBcIlwiIik7CisJaWYgKCFlbXB0eV9saW5lKCJcblx0ICIpKQorCQllcnJvcigiZW1wdHlfbGluZSBpcyBmYWxzZSBmb3IgXCJcXG5cXG4gXCIiKTsKKwlpZiAoIWVtcHR5X2xpbmUoIiAiKSkKKwkJZXJyb3IoImVtcHR5X2xpbmUgaXMgZmFsc2UgZm9yIFwiIFwiIik7CisJaWYgKGVtcHR5X2xpbmUoIlxyIikpCisJCWVycm9yKCJlbXB0eV9saW5lIGlzIHRydWUgZm9yIFxcciIpOworCisJaWYgKGNvbW1lbnRfbGluZSgiIikpCisJCWVycm9yKCJjb21tZW50X2xpbmUgaXMgdHJ1ZSBmb3IgXCJcIiIpOworCWlmIChjb21tZW50X2xpbmUoIlxuIikpCisJCWVycm9yKCJjb21tZW50X2xpbmUgaXMgdHJ1ZSBmb3IgXG4iKTsKKwlpZiAoIWNvbW1lbnRfbGluZSgiIyIpKQorCQllcnJvcigiY29tbWVudF9saW5lIGlzIGZhbHNlIGZvciAjIik7CisJaWYgKCFjb21tZW50X2xpbmUoIiAjIikpCisJCWVycm9yKCJjb21tZW50X2xpbmUgaXMgZmFsc2UgZm9yIFwiICNcIiIpOworCS8qIHRoaXMgaXMgd2hhdCB0aGUgc3BlYyBzYXlzICovCisJaWYgKCFjb21tZW50X2xpbmUoIlxuIyIpKQorCQllcnJvcigiY29tbWVudF9saW5lIGlzIGZhbHNlIGZvciBcXG4jIik7CisJaWYgKCFjb21tZW50X2xpbmUoIlx0IyIpKQorCQllcnJvcigiY29tbWVudF9saW5lIGlzIGZhbHNlIGZvciBcXHQjIik7CisKKwlyZXR1cm4gRVhJVF9TVUNDRVNTOworfQpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvbHRtYWluLnNoIGIvb3Byb2ZpbGUtMC45LjcvbHRtYWluLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmZhNGIxZTEKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9sdG1haW4uc2gKQEAgLTAsMCArMSw4NDEzIEBACisjIEdlbmVyYXRlZCBmcm9tIGx0bWFpbi5tNHNoLgorCisjIGx0bWFpbi5zaCAoR05VIGxpYnRvb2wpIDIuMi42YgorIyBXcml0dGVuIGJ5IEdvcmRvbiBNYXR6aWdrZWl0IDxnb3JkQGdudS5haS5taXQuZWR1PiwgMTk5NgorCisjIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyAyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBUaGlzIGlzIGZyZWUgc29mdHdhcmU7IHNlZSB0aGUgc291cmNlIGZvciBjb3B5aW5nIGNvbmRpdGlvbnMuICBUaGVyZSBpcyBOTworIyB3YXJyYW50eTsgbm90IGV2ZW4gZm9yIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworIyBHTlUgTGlidG9vbCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorIyBpZiB5b3UgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIHByb2dyYW0gb3IgbGlicmFyeSB0aGF0CisjIGlzIGJ1aWx0IHVzaW5nIEdOVSBMaWJ0b29sLCB5b3UgbWF5IGluY2x1ZGUgdGhpcyBmaWxlIHVuZGVyIHRoZQorIyBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKyMKKyMgR05VIExpYnRvb2wgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisjIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIEdOVSBMaWJ0b29sOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgYSBjb3B5CisjIGNhbiBiZSBkb3dubG9hZGVkIGZyb20gaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC5odG1sLAorIyBvciBvYnRhaW5lZCBieSB3cml0aW5nIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorCisjIFVzYWdlOiAkcHJvZ25hbWUgW09QVElPTl0uLi4gW01PREUtQVJHXS4uLgorIworIyBQcm92aWRlIGdlbmVyYWxpemVkIGxpYnJhcnktYnVpbGRpbmcgc3VwcG9ydCBzZXJ2aWNlcy4KKyMKKyMgICAgIC0tY29uZmlnICAgICAgICAgICAgIHNob3cgYWxsIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzCisjICAgICAtLWRlYnVnICAgICAgICAgICAgICBlbmFibGUgdmVyYm9zZSBzaGVsbCB0cmFjaW5nCisjIC1uLCAtLWRyeS1ydW4gICAgICAgICAgICBkaXNwbGF5IGNvbW1hbmRzIHdpdGhvdXQgbW9kaWZ5aW5nIGFueSBmaWxlcworIyAgICAgLS1mZWF0dXJlcyAgICAgICAgICAgZGlzcGxheSBiYXNpYyBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGFuZCBleGl0CisjICAgICAtLW1vZGU9TU9ERSAgICAgICAgICB1c2Ugb3BlcmF0aW9uIG1vZGUgTU9ERQorIyAgICAgLS1wcmVzZXJ2ZS1kdXAtZGVwcyAgZG9uJ3QgcmVtb3ZlIGR1cGxpY2F0ZSBkZXBlbmRlbmN5IGxpYnJhcmllcworIyAgICAgLS1xdWlldCwgLS1zaWxlbnQgICAgZG9uJ3QgcHJpbnQgaW5mb3JtYXRpb25hbCBtZXNzYWdlcworIyAgICAgLS10YWc9VEFHICAgICAgICAgICAgdXNlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGZyb20gdGFnIFRBRworIyAtdiwgLS12ZXJib3NlICAgICAgICAgICAgcHJpbnQgaW5mb3JtYXRpb25hbCBtZXNzYWdlcyAoZGVmYXVsdCkKKyMgICAgIC0tdmVyc2lvbiAgICAgICAgICAgIHByaW50IHZlcnNpb24gaW5mb3JtYXRpb24KKyMgLWgsIC0taGVscCAgICAgICAgICAgICAgIHByaW50IHNob3J0IG9yIGxvbmcgaGVscCBtZXNzYWdlCisjCisjIE1PREUgbXVzdCBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKyMKKyMgICAgICAgY2xlYW4gICAgICAgICAgICAgIHJlbW92ZSBmaWxlcyBmcm9tIHRoZSBidWlsZCBkaXJlY3RvcnkKKyMgICAgICAgY29tcGlsZSAgICAgICAgICAgIGNvbXBpbGUgYSBzb3VyY2UgZmlsZSBpbnRvIGEgbGlidG9vbCBvYmplY3QKKyMgICAgICAgZXhlY3V0ZSAgICAgICAgICAgIGF1dG9tYXRpY2FsbHkgc2V0IGxpYnJhcnkgcGF0aCwgdGhlbiBydW4gYSBwcm9ncmFtCisjICAgICAgIGZpbmlzaCAgICAgICAgICAgICBjb21wbGV0ZSB0aGUgaW5zdGFsbGF0aW9uIG9mIGxpYnRvb2wgbGlicmFyaWVzCisjICAgICAgIGluc3RhbGwgICAgICAgICAgICBpbnN0YWxsIGxpYnJhcmllcyBvciBleGVjdXRhYmxlcworIyAgICAgICBsaW5rICAgICAgICAgICAgICAgY3JlYXRlIGEgbGlicmFyeSBvciBhbiBleGVjdXRhYmxlCisjICAgICAgIHVuaW5zdGFsbCAgICAgICAgICByZW1vdmUgbGlicmFyaWVzIGZyb20gYW4gaW5zdGFsbGVkIGRpcmVjdG9yeQorIworIyBNT0RFLUFSR1MgdmFyeSBkZXBlbmRpbmcgb24gdGhlIE1PREUuCisjIFRyeSBgJHByb2duYW1lIC0taGVscCAtLW1vZGU9TU9ERScgZm9yIGEgbW9yZSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiBNT0RFLgorIworIyBXaGVuIHJlcG9ydGluZyBhIGJ1ZywgcGxlYXNlIGRlc2NyaWJlIGEgdGVzdCBjYXNlIHRvIHJlcHJvZHVjZSBpdCBhbmQKKyMgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOgorIworIyAgICAgICBob3N0LXRyaXBsZXQ6CSRob3N0CisjICAgICAgIHNoZWxsOgkJJFNIRUxMCisjICAgICAgIGNvbXBpbGVyOgkJJExUQ0MKKyMgICAgICAgY29tcGlsZXIgZmxhZ3M6CQkkTFRDRkxBR1MKKyMgICAgICAgbGlua2VyOgkJJExEIChnbnU/ICR3aXRoX2dudV9sZCkKKyMgICAgICAgJHByb2duYW1lOgkJKEdOVSBsaWJ0b29sKSAyLjIuNmIgRGViaWFuLTIuMi42Yi0ydWJ1bnR1MworIyAgICAgICBhdXRvbWFrZToJCSRhdXRvbWFrZV92ZXJzaW9uCisjICAgICAgIGF1dG9jb25mOgkJJGF1dG9jb25mX3ZlcnNpb24KKyMKKyMgUmVwb3J0IGJ1Z3MgdG8gPGJ1Zy1saWJ0b29sQGdudS5vcmc+LgorCitQUk9HUkFNPWx0bWFpbi5zaAorUEFDS0FHRT1saWJ0b29sCitWRVJTSU9OPSIyLjIuNmIgRGViaWFuLTIuMi42Yi0ydWJ1bnR1MyIKK1RJTUVTVEFNUD0iIgorcGFja2FnZV9yZXZpc2lvbj0xLjMwMTcKKworIyBCZSBCb3VybmUgY29tcGF0aWJsZQoraWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IiAmJiAoZW11bGF0ZSBzaCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIGVtdWxhdGUgc2gKKyAgTlVMTENNRD06CisgICMgWnNoIDMueCBhbmQgNC54IHBlcmZvcm1zIHdvcmQgc3BsaXR0aW5nIG9uICR7MSsiJEAifSwgd2hpY2gKKyAgIyBpcyBjb250cmFyeSB0byBvdXIgdXNhZ2UuICBEaXNhYmxlIHRoaXMgZmVhdHVyZS4KKyAgYWxpYXMgLWcgJyR7MSsiJEAifSc9JyIkQCInCisgIHNldG9wdCBOT19HTE9CX1NVQlNUCitlbHNlCisgIGNhc2UgYChzZXQgLW8pIDI+L2Rldi9udWxsYCBpbiAqcG9zaXgqKSBzZXQgLW8gcG9zaXg7OyBlc2FjCitmaQorQklOX1NIPXhwZzQ7IGV4cG9ydCBCSU5fU0ggIyBmb3IgVHJ1NjQKK0RVQUxDQVNFPTE7IGV4cG9ydCBEVUFMQ0FTRSAjIGZvciBNS1Mgc2gKKworIyBOTFMgbnVpc2FuY2VzOiBXZSBzYXZlIHRoZSBvbGQgdmFsdWVzIHRvIHJlc3RvcmUgZHVyaW5nIGV4ZWN1dGUgbW9kZS4KKyMgT25seSBzZXQgTEFORyBhbmQgTENfQUxMIHRvIEMgaWYgYWxyZWFkeSBzZXQuCisjIFRoZXNlIG11c3Qgbm90IGJlIHNldCB1bmNvbmRpdGlvbmFsbHkgYmVjYXVzZSBub3QgYWxsIHN5c3RlbXMgdW5kZXJzdGFuZAorIyBlLmcuIExBTkc9QyAobm90YWJseSBTQ08pLgorbHRfdXNlcl9sb2NhbGU9CitsdF9zYWZlX2xvY2FsZT0KK2ZvciBsdF92YXIgaW4gTEFORyBMQU5HVUFHRSBMQ19BTEwgTENfQ1RZUEUgTENfQ09MTEFURSBMQ19NRVNTQUdFUworZG8KKyAgZXZhbCAiaWYgdGVzdCBcIlwkeyRsdF92YXIrc2V0fVwiID0gc2V0OyB0aGVuCisgICAgICAgICAgc2F2ZV8kbHRfdmFyPVwkJGx0X3ZhcgorICAgICAgICAgICRsdF92YXI9QworCSAgZXhwb3J0ICRsdF92YXIKKwkgIGx0X3VzZXJfbG9jYWxlPVwiJGx0X3Zhcj1cXFwkc2F2ZV9cJGx0X3ZhcjsgXCRsdF91c2VyX2xvY2FsZVwiCisJICBsdF9zYWZlX2xvY2FsZT1cIiRsdF92YXI9QzsgXCRsdF9zYWZlX2xvY2FsZVwiCisJZmkiCitkb25lCisKKyRsdF91bnNldCBDRFBBVEgKKworCisKKworCis6ICR7Q1A9ImNwIC1mIn0KKzogJHtFQ0hPPSJlY2hvIn0KKzogJHtFR1JFUD0iL2Jpbi9ncmVwIC1FIn0KKzogJHtGR1JFUD0iL2Jpbi9ncmVwIC1GIn0KKzogJHtHUkVQPSIvYmluL2dyZXAifQorOiAke0xOX1M9ImxuIC1zIn0KKzogJHtNQUtFPSJtYWtlIn0KKzogJHtNS0RJUj0ibWtkaXIifQorOiAke01WPSJtdiAtZiJ9Cis6ICR7Uk09InJtIC1mIn0KKzogJHtTRUQ9Ii9iaW4vc2VkIn0KKzogJHtTSEVMTD0iJHtDT05GSUdfU0hFTEwtL2Jpbi9zaH0ifQorOiAke1hzZWQ9IiRTRUQgLWUgMXMvXlgvLyJ9CisKKyMgR2xvYmFsIHZhcmlhYmxlczoKK0VYSVRfU1VDQ0VTUz0wCitFWElUX0ZBSUxVUkU9MQorRVhJVF9NSVNNQVRDSD02MyAgIyAkPyA9IDYzIGlzIHVzZWQgdG8gaW5kaWNhdGUgdmVyc2lvbiBtaXNtYXRjaCB0byBtaXNzaW5nLgorRVhJVF9TS0lQPTc3CSAgIyAkPyA9IDc3IGlzIHVzZWQgdG8gaW5kaWNhdGUgYSBza2lwcGVkIHRlc3QgdG8gYXV0b21ha2UuCisKK2V4aXRfc3RhdHVzPSRFWElUX1NVQ0NFU1MKKworIyBNYWtlIHN1cmUgSUZTIGhhcyBhIHNlbnNpYmxlIGRlZmF1bHQKK2x0X25sPScKKycKK0lGUz0iIAkkbHRfbmwiCisKK2Rpcm5hbWU9InMsL1teL10qJCwsIgorYmFzZW5hbWU9InMsXi4qLywsIgorCisjIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgZmlsZSBhcHBlbmQgbm9uZGlyX3JlcGxhY2VtZW50CisjIHBlcmZvcm0gZnVuY19iYXNlbmFtZSBhbmQgZnVuY19kaXJuYW1lIGluIGEgc2luZ2xlIGZ1bmN0aW9uCisjIGNhbGw6CisjICAgZGlybmFtZTogIENvbXB1dGUgdGhlIGRpcm5hbWUgb2YgRklMRS4gIElmIG5vbmVtcHR5LAorIyAgICAgICAgICAgICBhZGQgQVBQRU5EIHRvIHRoZSByZXN1bHQsIG90aGVyd2lzZSBzZXQgcmVzdWx0CisjICAgICAgICAgICAgIHRvIE5PTkRJUl9SRVBMQUNFTUVOVC4KKyMgICAgICAgICAgICAgdmFsdWUgcmV0dXJuZWQgaW4gIiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorIyAgIGJhc2VuYW1lOiBDb21wdXRlIGZpbGVuYW1lIG9mIEZJTEUuCisjICAgICAgICAgICAgIHZhbHVlIHJldHVuZWQgaW4gIiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKyMgSW1wbGVtZW50YXRpb24gbXVzdCBiZSBrZXB0IHN5bmNocm9uaXplZCB3aXRoIGZ1bmNfZGlybmFtZQorIyBhbmQgZnVuY19iYXNlbmFtZS4gRm9yIGVmZmljaWVuY3ksIHdlIGRvIG5vdCBkZWxlZ2F0ZSB0bworIyB0aG9zZSBmdW5jdGlvbnMgYnV0IGluc3RlYWQgZHVwbGljYXRlIHRoZSBmdW5jdGlvbmFsaXR5IGhlcmUuCitmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICgpCit7CisgICMgRXh0cmFjdCBzdWJkaXJlY3RvcnkgZnJvbSB0aGUgYXJndW1lbnQuCisgIGZ1bmNfZGlybmFtZV9yZXN1bHQ9YCRFQ0hPICJYJHsxfSIgfCAkWHNlZCAtZSAiJGRpcm5hbWUiYAorICBpZiB0ZXN0ICJYJGZ1bmNfZGlybmFtZV9yZXN1bHQiID0gIlgkezF9IjsgdGhlbgorICAgIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iCisgIGVsc2UKKyAgICBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkZnVuY19kaXJuYW1lX3Jlc3VsdCR7Mn0iCisgIGZpCisgIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PWAkRUNITyAiWCR7MX0iIHwgJFhzZWQgLWUgIiRiYXNlbmFtZSJgCit9CisKKyMgR2VuZXJhdGVkIHNoZWxsIGZ1bmN0aW9ucyBpbnNlcnRlZCBoZXJlLgorCisjIFdvcmsgYXJvdW5kIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgaXNzdWUgb24gSVJJWCA2LjUuIE9uIElSSVggNi40Kywgc2gKKyMgaXMga3NoIGJ1dCB3aGVuIHRoZSBzaGVsbCBpcyBpbnZva2VkIGFzICJzaCIgYW5kIHRoZSBjdXJyZW50IHZhbHVlIG9mCisjIHRoZSBfWFBHIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIG5vdCBlcXVhbCB0byAxIChvbmUpLCB0aGUgc3BlY2lhbAorIyBwb3NpdGlvbmFsIHBhcmFtZXRlciAkMCwgd2l0aGluIGEgZnVuY3Rpb24gY2FsbCwgaXMgdGhlIG5hbWUgb2YgdGhlCisjIGZ1bmN0aW9uLgorcHJvZ3BhdGg9IiQwIgorCisjIFRoZSBuYW1lIG9mIHRoaXMgcHJvZ3JhbToKKyMgSW4gdGhlIHVubGlrZWx5IGV2ZW50ICRwcm9nbmFtZSBiZWdhbiB3aXRoIGEgJy0nLCBpdCB3b3VsZCBwbGF5IGhhdm9jIHdpdGgKKyMgZnVuY19lY2hvIChpbWFnaW5lIHByb2duYW1lPS1uKSwgc28gd2UgcHJlcGVuZCAuLyBpbiB0aGF0IGNhc2U6CitmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICIkcHJvZ3BhdGgiCitwcm9nbmFtZT0kZnVuY19iYXNlbmFtZV9yZXN1bHQKK2Nhc2UgJHByb2duYW1lIGluCisgIC0qKSBwcm9nbmFtZT0uLyRwcm9nbmFtZSA7OworZXNhYworCisjIE1ha2Ugc3VyZSB3ZSBoYXZlIGFuIGFic29sdXRlIHBhdGggZm9yIHJlZXhlY3V0aW9uOgorY2FzZSAkcHJvZ3BhdGggaW4KKyAgW1xcL10qfFtBLVphLXpdOlxcKikgOzsKKyAgKltcXC9dKikKKyAgICAgcHJvZ2Rpcj0kZnVuY19kaXJuYW1lX3Jlc3VsdAorICAgICBwcm9nZGlyPWBjZCAiJHByb2dkaXIiICYmIHB3ZGAKKyAgICAgcHJvZ3BhdGg9IiRwcm9nZGlyLyRwcm9nbmFtZSIKKyAgICAgOzsKKyAgKikKKyAgICAgc2F2ZV9JRlM9IiRJRlMiCisgICAgIElGUz06CisgICAgIGZvciBwcm9nZGlyIGluICRQQVRIOyBkbworICAgICAgIElGUz0iJHNhdmVfSUZTIgorICAgICAgIHRlc3QgLXggIiRwcm9nZGlyLyRwcm9nbmFtZSIgJiYgYnJlYWsKKyAgICAgZG9uZQorICAgICBJRlM9IiRzYXZlX0lGUyIKKyAgICAgdGVzdCAtbiAiJHByb2dkaXIiIHx8IHByb2dkaXI9YHB3ZGAKKyAgICAgcHJvZ3BhdGg9IiRwcm9nZGlyLyRwcm9nbmFtZSIKKyAgICAgOzsKK2VzYWMKKworIyBTZWQgc3Vic3RpdHV0aW9uIHRoYXQgaGVscHMgdXMgZG8gcm9idXN0IHF1b3RpbmcuICBJdCBiYWNrc2xhc2hpZmllcworIyBtZXRhY2hhcmFjdGVycyB0aGF0IGFyZSBzdGlsbCBhY3RpdmUgd2l0aGluIGRvdWJsZS1xdW90ZWQgc3RyaW5ncy4KK1hzZWQ9IiR7U0VEfSInIC1lIDFzL15YLy8nCitzZWRfcXVvdGVfc3Vic3Q9J3MvXChbYCIkXFxdXCkvXFxcMS9nJworCisjIFNhbWUgYXMgYWJvdmUsIGJ1dCBkbyBub3QgcXVvdGUgdmFyaWFibGUgcmVmZXJlbmNlcy4KK2RvdWJsZV9xdW90ZV9zdWJzdD0ncy9cKFsiYFxcXVwpL1xcXDEvZycKKworIyBSZS1gXCcgcGFyYW1ldGVyIGV4cGFuc2lvbnMgaW4gb3V0cHV0IG9mIGRvdWJsZV9xdW90ZV9zdWJzdCB0aGF0IHdlcmUKKyMgYFwnLWVkIGluIGlucHV0IHRvIHRoZSBzYW1lLiAgSWYgYW4gb2RkIG51bWJlciBvZiBgXCcgcHJlY2VkZWQgYSAnJCcKKyMgaW4gaW5wdXQgdG8gZG91YmxlX3F1b3RlX3N1YnN0LCB0aGF0ICckJyB3YXMgcHJvdGVjdGVkIGZyb20gZXhwYW5zaW9uLgorIyBTaW5jZSBlYWNoIGlucHV0IGBcJyBpcyBub3cgdHdvIGBcJ3MsIGxvb2sgZm9yIGFueSBudW1iZXIgb2YgcnVucyBvZgorIyBmb3VyIGBcJ3MgZm9sbG93ZWQgYnkgdHdvIGBcJ3MgYW5kIHRoZW4gYSAnJCcuICBgXCcgdGhhdCAnJCcuCiticz0nXFwnCiticzI9J1xcXFwnCiticzQ9J1xcXFxcXFxcJworZG9sbGFyPSdcJCcKK3NlZF9kb3VibGVfYmFja3NsYXNoPSJcCisgIHMvJGJzNC8mXFwKKy9nCisgIHMvXiRiczIkZG9sbGFyLyRicyYvCisgIHMvXFwoW14kYnNdXFwpJGJzMiRkb2xsYXIvXFwxJGJzMiRicyRkb2xsYXIvZworICBzL1xuLy9nIgorCisjIFN0YW5kYXJkIG9wdGlvbnM6CitvcHRfZHJ5X3J1bj1mYWxzZQorb3B0X2hlbHA9ZmFsc2UKK29wdF9xdWlldD1mYWxzZQorb3B0X3ZlcmJvc2U9ZmFsc2UKK29wdF93YXJuaW5nPToKKworIyBmdW5jX2VjaG8gYXJnLi4uCisjIEVjaG8gcHJvZ3JhbSBuYW1lIHByZWZpeGVkIG1lc3NhZ2UsIGFsb25nIHdpdGggdGhlIGN1cnJlbnQgbW9kZQorIyBuYW1lIGlmIGl0IGhhcyBiZWVuIHNldCB5ZXQuCitmdW5jX2VjaG8gKCkKK3sKKyAgICAkRUNITyAiJHByb2duYW1lJHttb2RlKzogfSRtb2RlOiAkKiIKK30KKworIyBmdW5jX3ZlcmJvc2UgYXJnLi4uCisjIEVjaG8gcHJvZ3JhbSBuYW1lIHByZWZpeGVkIG1lc3NhZ2UgaW4gdmVyYm9zZSBtb2RlIG9ubHkuCitmdW5jX3ZlcmJvc2UgKCkKK3sKKyAgICAkb3B0X3ZlcmJvc2UgJiYgZnVuY19lY2hvICR7MSsiJEAifQorCisgICAgIyBBIGJ1ZyBpbiBiYXNoIGhhbHRzIHRoZSBzY3JpcHQgaWYgdGhlIGxhc3QgbGluZSBvZiBhIGZ1bmN0aW9uCisgICAgIyBmYWlscyB3aGVuIHNldCAtZSBpcyBpbiBmb3JjZSwgc28gd2UgbmVlZCBhbm90aGVyIGNvbW1hbmQgdG8KKyAgICAjIHdvcmsgYXJvdW5kIHRoYXQ6CisgICAgOgorfQorCisjIGZ1bmNfZXJyb3IgYXJnLi4uCisjIEVjaG8gcHJvZ3JhbSBuYW1lIHByZWZpeGVkIG1lc3NhZ2UgdG8gc3RhbmRhcmQgZXJyb3IuCitmdW5jX2Vycm9yICgpCit7CisgICAgJEVDSE8gIiRwcm9nbmFtZSR7bW9kZSs6IH0kbW9kZTogIiR7MSsiJEAifSAxPiYyCit9CisKKyMgZnVuY193YXJuaW5nIGFyZy4uLgorIyBFY2hvIHByb2dyYW0gbmFtZSBwcmVmaXhlZCB3YXJuaW5nIG1lc3NhZ2UgdG8gc3RhbmRhcmQgZXJyb3IuCitmdW5jX3dhcm5pbmcgKCkKK3sKKyAgICAkb3B0X3dhcm5pbmcgJiYgJEVDSE8gIiRwcm9nbmFtZSR7bW9kZSs6IH0kbW9kZTogd2FybmluZzogIiR7MSsiJEAifSAxPiYyCisKKyAgICAjIGJhc2ggYnVnIGFnYWluOgorICAgIDoKK30KKworIyBmdW5jX2ZhdGFsX2Vycm9yIGFyZy4uLgorIyBFY2hvIHByb2dyYW0gbmFtZSBwcmVmaXhlZCBtZXNzYWdlIHRvIHN0YW5kYXJkIGVycm9yLCBhbmQgZXhpdC4KK2Z1bmNfZmF0YWxfZXJyb3IgKCkKK3sKKyAgICBmdW5jX2Vycm9yICR7MSsiJEAifQorICAgIGV4aXQgJEVYSVRfRkFJTFVSRQorfQorCisjIGZ1bmNfZmF0YWxfaGVscCBhcmcuLi4KKyMgRWNobyBwcm9ncmFtIG5hbWUgcHJlZml4ZWQgbWVzc2FnZSB0byBzdGFuZGFyZCBlcnJvciwgZm9sbG93ZWQgYnkKKyMgYSBoZWxwIGhpbnQsIGFuZCBleGl0LgorZnVuY19mYXRhbF9oZWxwICgpCit7CisgICAgZnVuY19lcnJvciAkezErIiRAIn0KKyAgICBmdW5jX2ZhdGFsX2Vycm9yICIkaGVscCIKK30KK2hlbHA9IlRyeSBcYCRwcm9nbmFtZSAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIgICMjIGRlZmF1bHQKKworCisjIGZ1bmNfZ3JlcCBleHByZXNzaW9uIGZpbGVuYW1lCisjIENoZWNrIHdoZXRoZXIgRVhQUkVTU0lPTiBtYXRjaGVzIGFueSBsaW5lIG9mIEZJTEVOQU1FLCB3aXRob3V0IG91dHB1dC4KK2Z1bmNfZ3JlcCAoKQoreworICAgICRHUkVQICIkMSIgIiQyIiA+L2Rldi9udWxsIDI+JjEKK30KKworCisjIGZ1bmNfbWtkaXJfcCBkaXJlY3RvcnktcGF0aAorIyBNYWtlIHN1cmUgdGhlIGVudGlyZSBwYXRoIHRvIERJUkVDVE9SWS1QQVRIIGlzIGF2YWlsYWJsZS4KK2Z1bmNfbWtkaXJfcCAoKQoreworICAgIG15X2RpcmVjdG9yeV9wYXRoPSIkMSIKKyAgICBteV9kaXJfbGlzdD0KKworICAgIGlmIHRlc3QgLW4gIiRteV9kaXJlY3RvcnlfcGF0aCIgJiYgdGVzdCAiJG9wdF9kcnlfcnVuIiAhPSAiOiI7IHRoZW4KKworICAgICAgIyBQcm90ZWN0IGRpcmVjdG9yeSBuYW1lcyBzdGFydGluZyB3aXRoIGAtJworICAgICAgY2FzZSAkbXlfZGlyZWN0b3J5X3BhdGggaW4KKyAgICAgICAgLSopIG15X2RpcmVjdG9yeV9wYXRoPSIuLyRteV9kaXJlY3RvcnlfcGF0aCIgOzsKKyAgICAgIGVzYWMKKworICAgICAgIyBXaGlsZSBzb21lIHBvcnRpb24gb2YgRElSIGRvZXMgbm90IHlldCBleGlzdC4uLgorICAgICAgd2hpbGUgdGVzdCAhIC1kICIkbXlfZGlyZWN0b3J5X3BhdGgiOyBkbworICAgICAgICAjIC4uLm1ha2UgYSBsaXN0IGluIHRvcG1vc3QgZmlyc3Qgb3JkZXIuICBVc2UgYSBjb2xvbiBkZWxpbWl0ZWQKKwkjIGxpc3QgaW5jYXNlIHNvbWUgcG9ydGlvbiBvZiBwYXRoIGNvbnRhaW5zIHdoaXRlc3BhY2UuCisgICAgICAgIG15X2Rpcl9saXN0PSIkbXlfZGlyZWN0b3J5X3BhdGg6JG15X2Rpcl9saXN0IgorCisgICAgICAgICMgSWYgdGhlIGxhc3QgcG9ydGlvbiBhZGRlZCBoYXMgbm8gc2xhc2ggaW4gaXQsIHRoZSBsaXN0IGlzIGRvbmUKKyAgICAgICAgY2FzZSAkbXlfZGlyZWN0b3J5X3BhdGggaW4gKi8qKSA7OyAqKSBicmVhayA7OyBlc2FjCisKKyAgICAgICAgIyAuLi5vdGhlcndpc2UgdGhyb3cgYXdheSB0aGUgY2hpbGQgZGlyZWN0b3J5IGFuZCBsb29wCisgICAgICAgIG15X2RpcmVjdG9yeV9wYXRoPWAkRUNITyAiWCRteV9kaXJlY3RvcnlfcGF0aCIgfCAkWHNlZCAtZSAiJGRpcm5hbWUiYAorICAgICAgZG9uZQorICAgICAgbXlfZGlyX2xpc3Q9YCRFQ0hPICJYJG15X2Rpcl9saXN0IiB8ICRYc2VkIC1lICdzLDoqJCwsJ2AKKworICAgICAgc2F2ZV9ta2Rpcl9wX0lGUz0iJElGUyI7IElGUz0nOicKKyAgICAgIGZvciBteV9kaXIgaW4gJG15X2Rpcl9saXN0OyBkbworCUlGUz0iJHNhdmVfbWtkaXJfcF9JRlMiCisgICAgICAgICMgbWtkaXIgY2FuIGZhaWwgd2l0aCBhIGBGaWxlIGV4aXN0JyBlcnJvciBpZiB0d28gcHJvY2Vzc2VzCisgICAgICAgICMgdHJ5IHRvIGNyZWF0ZSBvbmUgb2YgdGhlIGRpcmVjdG9yaWVzIGNvbmN1cnJlbnRseS4gIERvbid0CisgICAgICAgICMgc3RvcCBpbiB0aGF0IGNhc2UhCisgICAgICAgICRNS0RJUiAiJG15X2RpciIgMj4vZGV2L251bGwgfHwgOgorICAgICAgZG9uZQorICAgICAgSUZTPSIkc2F2ZV9ta2Rpcl9wX0lGUyIKKworICAgICAgIyBCYWlsIG91dCBpZiB3ZSAob3Igc29tZSBvdGhlciBwcm9jZXNzKSBmYWlsZWQgdG8gY3JlYXRlIGEgZGlyZWN0b3J5LgorICAgICAgdGVzdCAtZCAiJG15X2RpcmVjdG9yeV9wYXRoIiB8fCBcCisgICAgICAgIGZ1bmNfZmF0YWxfZXJyb3IgIkZhaWxlZCB0byBjcmVhdGUgXGAkMSciCisgICAgZmkKK30KKworCisjIGZ1bmNfbWt0ZW1wZGlyIFtzdHJpbmddCisjIE1ha2UgYSB0ZW1wb3JhcnkgZGlyZWN0b3J5IHRoYXQgd29uJ3QgY2xhc2ggd2l0aCBvdGhlciBydW5uaW5nCisjIGxpYnRvb2wgcHJvY2Vzc2VzLCBhbmQgYXZvaWRzIHJhY2UgY29uZGl0aW9ucyBpZiBwb3NzaWJsZS4gIElmCisjIGdpdmVuLCBTVFJJTkcgaXMgdGhlIGJhc2VuYW1lIGZvciB0aGF0IGRpcmVjdG9yeS4KK2Z1bmNfbWt0ZW1wZGlyICgpCit7CisgICAgbXlfdGVtcGxhdGU9IiR7VE1QRElSLS90bXB9LyR7MS0kcHJvZ25hbWV9IgorCisgICAgaWYgdGVzdCAiJG9wdF9kcnlfcnVuIiA9ICI6IjsgdGhlbgorICAgICAgIyBSZXR1cm4gYSBkaXJlY3RvcnkgbmFtZSwgYnV0IGRvbid0IGNyZWF0ZSBpdCBpbiBkcnktcnVuIG1vZGUKKyAgICAgIG15X3RtcGRpcj0iJHtteV90ZW1wbGF0ZX0tJCQiCisgICAgZWxzZQorCisgICAgICAjIElmIG1rdGVtcCB3b3JrcywgdXNlIHRoYXQgZmlyc3QgYW5kIGZvcmVtb3N0CisgICAgICBteV90bXBkaXI9YG1rdGVtcCAtZCAiJHtteV90ZW1wbGF0ZX0tWFhYWFhYWFgiIDI+L2Rldi9udWxsYAorCisgICAgICBpZiB0ZXN0ICEgLWQgIiRteV90bXBkaXIiOyB0aGVuCisgICAgICAgICMgRmFpbGluZyB0aGF0LCBhdCBsZWFzdCB0cnkgYW5kIHVzZSAkUkFORE9NIHRvIGF2b2lkIGEgcmFjZQorICAgICAgICBteV90bXBkaXI9IiR7bXlfdGVtcGxhdGV9LSR7UkFORE9NLTB9JCQiCisKKyAgICAgICAgc2F2ZV9ta3RlbXBkaXJfdW1hc2s9YHVtYXNrYAorICAgICAgICB1bWFzayAwMDc3CisgICAgICAgICRNS0RJUiAiJG15X3RtcGRpciIKKyAgICAgICAgdW1hc2sgJHNhdmVfbWt0ZW1wZGlyX3VtYXNrCisgICAgICBmaQorCisgICAgICAjIElmIHdlJ3JlIG5vdCBpbiBkcnktcnVuIG1vZGUsIGJvbWIgb3V0IG9uIGZhaWx1cmUKKyAgICAgIHRlc3QgLWQgIiRteV90bXBkaXIiIHx8IFwKKyAgICAgICAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGNyZWF0ZSB0ZW1wb3JhcnkgZGlyZWN0b3J5IFxgJG15X3RtcGRpciciCisgICAgZmkKKworICAgICRFQ0hPICJYJG15X3RtcGRpciIgfCAkWHNlZAorfQorCisKKyMgZnVuY19xdW90ZV9mb3JfZXZhbCBhcmcKKyMgQWVzdGhldGljYWxseSBxdW90ZSBBUkcgdG8gYmUgZXZhbGVkIGxhdGVyLgorIyBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdHdvIHZhbHVlczogRlVOQ19RVU9URV9GT1JfRVZBTF9SRVNVTFQKKyMgaXMgZG91YmxlLXF1b3RlZCwgc3VpdGFibGUgZm9yIGEgc3Vic2VxdWVudCBldmFsLCB3aGVyZWFzCisjIEZVTkNfUVVPVEVfRk9SX0VWQUxfVU5RVU9URURfUkVTVUxUIGhhcyBtZXJlbHkgYWxsIGNoYXJhY3RlcnMKKyMgd2hpY2ggYXJlIHN0aWxsIGFjdGl2ZSB3aXRoaW4gZG91YmxlIHF1b3RlcyBiYWNrc2xhc2hpZmllZC4KK2Z1bmNfcXVvdGVfZm9yX2V2YWwgKCkKK3sKKyAgICBjYXNlICQxIGluCisgICAgICAqW1xcXGBcIlwkXSopCisJZnVuY19xdW90ZV9mb3JfZXZhbF91bnF1b3RlZF9yZXN1bHQ9YCRFQ0hPICJYJDEiIHwgJFhzZWQgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYCA7OworICAgICAgKikKKyAgICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbF91bnF1b3RlZF9yZXN1bHQ9IiQxIiA7OworICAgIGVzYWMKKworICAgIGNhc2UgJGZ1bmNfcXVvdGVfZm9yX2V2YWxfdW5xdW90ZWRfcmVzdWx0IGluCisgICAgICAjIERvdWJsZS1xdW90ZSBhcmdzIGNvbnRhaW5pbmcgc2hlbGwgbWV0YWNoYXJhY3RlcnMgdG8gZGVsYXkKKyAgICAgICMgd29yZCBzcGxpdHRpbmcsIGNvbW1hbmQgc3Vic3RpdHV0aW9uIGFuZCBhbmQgdmFyaWFibGUKKyAgICAgICMgZXhwYW5zaW9uIGZvciBhIHN1YnNlcXVlbnQgZXZhbC4KKyAgICAgICMgTWFueSBCb3VybmUgc2hlbGxzIGNhbm5vdCBoYW5kbGUgY2xvc2UgYnJhY2tldHMgY29ycmVjdGx5CisgICAgICAjIGluIHNjYW4gc2V0cywgc28gd2Ugc3BlY2lmeSBpdCBzZXBhcmF0ZWx5LgorICAgICAgKltcW1x+XCNcXlwmXCpcKFwpXHtcfVx8XDtcPFw+XD9cJ1wgXAldKnwqXSp8IiIpCisgICAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0PSJcIiRmdW5jX3F1b3RlX2Zvcl9ldmFsX3VucXVvdGVkX3Jlc3VsdFwiIgorICAgICAgICA7OworICAgICAgKikKKyAgICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQ9IiRmdW5jX3F1b3RlX2Zvcl9ldmFsX3VucXVvdGVkX3Jlc3VsdCIKKyAgICBlc2FjCit9CisKKworIyBmdW5jX3F1b3RlX2Zvcl9leHBhbmQgYXJnCisjIEFlc3RoZXRpY2FsbHkgcXVvdGUgQVJHIHRvIGJlIGV2YWxlZCBsYXRlcjsgc2FtZSBhcyBhYm92ZSwKKyMgYnV0IGRvIG5vdCBxdW90ZSB2YXJpYWJsZSByZWZlcmVuY2VzLgorZnVuY19xdW90ZV9mb3JfZXhwYW5kICgpCit7CisgICAgY2FzZSAkMSBpbgorICAgICAgKltcXFxgXCJdKikKKwlteV9hcmc9YCRFQ0hPICJYJDEiIHwgJFhzZWQgXAorCSAgICAtZSAiJGRvdWJsZV9xdW90ZV9zdWJzdCIgLWUgIiRzZWRfZG91YmxlX2JhY2tzbGFzaCJgIDs7CisgICAgICAqKQorICAgICAgICBteV9hcmc9IiQxIiA7OworICAgIGVzYWMKKworICAgIGNhc2UgJG15X2FyZyBpbgorICAgICAgIyBEb3VibGUtcXVvdGUgYXJncyBjb250YWluaW5nIHNoZWxsIG1ldGFjaGFyYWN0ZXJzIHRvIGRlbGF5CisgICAgICAjIHdvcmQgc3BsaXR0aW5nIGFuZCBjb21tYW5kIHN1YnN0aXR1dGlvbiBmb3IgYSBzdWJzZXF1ZW50IGV2YWwuCisgICAgICAjIE1hbnkgQm91cm5lIHNoZWxscyBjYW5ub3QgaGFuZGxlIGNsb3NlIGJyYWNrZXRzIGNvcnJlY3RseQorICAgICAgIyBpbiBzY2FuIHNldHMsIHNvIHdlIHNwZWNpZnkgaXQgc2VwYXJhdGVseS4KKyAgICAgICpbXFtcflwjXF5cJlwqXChcKVx7XH1cfFw7XDxcPlw/XCdcIFwJXSp8Kl0qfCIiKQorICAgICAgICBteV9hcmc9IlwiJG15X2FyZ1wiIgorICAgICAgICA7OworICAgIGVzYWMKKworICAgIGZ1bmNfcXVvdGVfZm9yX2V4cGFuZF9yZXN1bHQ9IiRteV9hcmciCit9CisKKworIyBmdW5jX3Nob3dfZXZhbCBjbWQgW2ZhaWxfZXhwXQorIyBVbmxlc3Mgb3B0X3NpbGVudCBpcyB0cnVlLCB0aGVuIG91dHB1dCBDTUQuICBUaGVuLCBpZiBvcHRfZHJ5cnVuIGlzCisjIG5vdCB0cnVlLCBldmFsdWF0ZSBDTUQuICBJZiB0aGUgZXZhbHVhdGlvbiBvZiBDTUQgZmFpbHMsIGFuZCBGQUlMX0VYUAorIyBpcyBnaXZlbiwgdGhlbiBldmFsdWF0ZSBpdC4KK2Z1bmNfc2hvd19ldmFsICgpCit7CisgICAgbXlfY21kPSIkMSIKKyAgICBteV9mYWlsX2V4cD0iJHsyLTp9IgorCisgICAgJHtvcHRfc2lsZW50LWZhbHNlfSB8fCB7CisgICAgICBmdW5jX3F1b3RlX2Zvcl9leHBhbmQgIiRteV9jbWQiCisgICAgICBldmFsICJmdW5jX2VjaG8gJGZ1bmNfcXVvdGVfZm9yX2V4cGFuZF9yZXN1bHQiCisgICAgfQorCisgICAgaWYgJHtvcHRfZHJ5X3J1bi1mYWxzZX07IHRoZW4gOjsgZWxzZQorICAgICAgZXZhbCAiJG15X2NtZCIKKyAgICAgIG15X3N0YXR1cz0kPworICAgICAgaWYgdGVzdCAiJG15X3N0YXR1cyIgLWVxIDA7IHRoZW4gOjsgZWxzZQorCWV2YWwgIihleGl0ICRteV9zdGF0dXMpOyAkbXlfZmFpbF9leHAiCisgICAgICBmaQorICAgIGZpCit9CisKKworIyBmdW5jX3Nob3dfZXZhbF9sb2NhbGUgY21kIFtmYWlsX2V4cF0KKyMgVW5sZXNzIG9wdF9zaWxlbnQgaXMgdHJ1ZSwgdGhlbiBvdXRwdXQgQ01ELiAgVGhlbiwgaWYgb3B0X2RyeXJ1biBpcworIyBub3QgdHJ1ZSwgZXZhbHVhdGUgQ01ELiAgSWYgdGhlIGV2YWx1YXRpb24gb2YgQ01EIGZhaWxzLCBhbmQgRkFJTF9FWFAKKyMgaXMgZ2l2ZW4sIHRoZW4gZXZhbHVhdGUgaXQuICBVc2UgdGhlIHNhdmVkIGxvY2FsZSBmb3IgZXZhbHVhdGlvbi4KK2Z1bmNfc2hvd19ldmFsX2xvY2FsZSAoKQoreworICAgIG15X2NtZD0iJDEiCisgICAgbXlfZmFpbF9leHA9IiR7Mi06fSIKKworICAgICR7b3B0X3NpbGVudC1mYWxzZX0gfHwgeworICAgICAgZnVuY19xdW90ZV9mb3JfZXhwYW5kICIkbXlfY21kIgorICAgICAgZXZhbCAiZnVuY19lY2hvICRmdW5jX3F1b3RlX2Zvcl9leHBhbmRfcmVzdWx0IgorICAgIH0KKworICAgIGlmICR7b3B0X2RyeV9ydW4tZmFsc2V9OyB0aGVuIDo7IGVsc2UKKyAgICAgIGV2YWwgIiRsdF91c2VyX2xvY2FsZQorCSAgICAkbXlfY21kIgorICAgICAgbXlfc3RhdHVzPSQ/CisgICAgICBldmFsICIkbHRfc2FmZV9sb2NhbGUiCisgICAgICBpZiB0ZXN0ICIkbXlfc3RhdHVzIiAtZXEgMDsgdGhlbiA6OyBlbHNlCisJZXZhbCAiKGV4aXQgJG15X3N0YXR1cyk7ICRteV9mYWlsX2V4cCIKKyAgICAgIGZpCisgICAgZmkKK30KKworCisKKworCisjIGZ1bmNfdmVyc2lvbgorIyBFY2hvIHZlcnNpb24gbWVzc2FnZSB0byBzdGFuZGFyZCBvdXRwdXQgYW5kIGV4aXQuCitmdW5jX3ZlcnNpb24gKCkKK3sKKyAgICAkU0VEIC1uICcvXiMgJyRQUk9HUkFNJyAoR05VIC8sLyMgd2FycmFudHk7IC8geworICAgICAgICBzL14jIC8vCisJcy9eIyAqJC8vCisgICAgICAgIHMvXCgoQylcKVsgMC05LC1dKlwoIFsxLTldWzAtOV0qXCkvXDFcMi8KKyAgICAgICAgcAorICAgICB9JyA8ICIkcHJvZ3BhdGgiCisgICAgIGV4aXQgJD8KK30KKworIyBmdW5jX3VzYWdlCisjIEVjaG8gc2hvcnQgaGVscCBtZXNzYWdlIHRvIHN0YW5kYXJkIG91dHB1dCBhbmQgZXhpdC4KK2Z1bmNfdXNhZ2UgKCkKK3sKKyAgICAkU0VEIC1uICcvXiMgVXNhZ2U6LywvIyAtaC8geworICAgICAgICBzL14jIC8vCisJcy9eIyAqJC8vCisJcy9cJHByb2duYW1lLyckcHJvZ25hbWUnLworCXAKKyAgICB9JyA8ICIkcHJvZ3BhdGgiCisgICAgJEVDSE8KKyAgICAkRUNITyAicnVuIFxgJHByb2duYW1lIC0taGVscCB8IG1vcmUnIGZvciBmdWxsIHVzYWdlIgorICAgIGV4aXQgJD8KK30KKworIyBmdW5jX2hlbHAKKyMgRWNobyBsb25nIGhlbHAgbWVzc2FnZSB0byBzdGFuZGFyZCBvdXRwdXQgYW5kIGV4aXQuCitmdW5jX2hlbHAgKCkKK3sKKyAgICAkU0VEIC1uICcvXiMgVXNhZ2U6LywvIyBSZXBvcnQgYnVncyB0by8geworICAgICAgICBzL14jIC8vCisJcy9eIyAqJC8vCisJcypcJHByb2duYW1lKickcHJvZ25hbWUnKgorCXMqXCRob3N0KiciJGhvc3QiJyoKKwlzKlwkU0hFTEwqJyIkU0hFTEwiJyoKKwlzKlwkTFRDQyonIiRMVENDIicqCisJcypcJExUQ0ZMQUdTKiciJExUQ0ZMQUdTIicqCisJcypcJExEKiciJExEIicqCisJcy9cJHdpdGhfZ251X2xkLyciJHdpdGhfZ251X2xkIicvCisJcy9cJGF1dG9tYWtlX3ZlcnNpb24vJyJgKGF1dG9tYWtlIC0tdmVyc2lvbikgMj4vZGV2L251bGwgfCRTRUQgMXFgIicvCisJcy9cJGF1dG9jb25mX3ZlcnNpb24vJyJgKGF1dG9jb25mIC0tdmVyc2lvbikgMj4vZGV2L251bGwgfCRTRUQgMXFgIicvCisJcAorICAgICB9JyA8ICIkcHJvZ3BhdGgiCisgICAgZXhpdCAkPworfQorCisjIGZ1bmNfbWlzc2luZ19hcmcgYXJnbmFtZQorIyBFY2hvIHByb2dyYW0gbmFtZSBwcmVmaXhlZCBtZXNzYWdlIHRvIHN0YW5kYXJkIGVycm9yIGFuZCBzZXQgZ2xvYmFsCisjIGV4aXRfY21kLgorZnVuY19taXNzaW5nX2FyZyAoKQoreworICAgIGZ1bmNfZXJyb3IgIm1pc3NpbmcgYXJndW1lbnQgZm9yICQxIgorICAgIGV4aXRfY21kPWV4aXQKK30KKworZXhpdF9jbWQ9OgorCisKKworCisKKyMgQ2hlY2sgdGhhdCB3ZSBoYXZlIGEgd29ya2luZyAkRUNITy4KK2lmIHRlc3QgIlgkMSIgPSBYLS1uby1yZWV4ZWM7IHRoZW4KKyAgIyBEaXNjYXJkIHRoZSAtLW5vLXJlZXhlYyBmbGFnLCBhbmQgY29udGludWUuCisgIHNoaWZ0CitlbGlmIHRlc3QgIlgkMSIgPSBYLS1mYWxsYmFjay1lY2hvOyB0aGVuCisgICMgQXZvaWQgaW5saW5lIGRvY3VtZW50IGhlcmUsIGl0IG1heSBiZSBsZWZ0IG92ZXIKKyAgOgorZWxpZiB0ZXN0ICJYYHsgJEVDSE8gJ1x0JzsgfSAyPi9kZXYvbnVsbGAiID0gJ1hcdCc7IHRoZW4KKyAgIyBZaXBwZWUsICRFQ0hPIHdvcmtzIQorICA6CitlbHNlCisgICMgUmVzdGFydCB1bmRlciB0aGUgY29ycmVjdCBzaGVsbCwgYW5kIHRoZW4gbWF5YmUgJEVDSE8gd2lsbCB3b3JrLgorICBleGVjICRTSEVMTCAiJHByb2dwYXRoIiAtLW5vLXJlZXhlYyAkezErIiRAIn0KK2ZpCisKK2lmIHRlc3QgIlgkMSIgPSBYLS1mYWxsYmFjay1lY2hvOyB0aGVuCisgICMgdXNlZCBhcyBmYWxsYmFjayBlY2hvCisgIHNoaWZ0CisgIGNhdCA8PEVPRgorJCoKK0VPRgorICBleGl0ICRFWElUX1NVQ0NFU1MKK2ZpCisKK21hZ2ljPSIlJSVNQUdJQyB2YXJpYWJsZSUlJSIKK21hZ2ljX2V4ZT0iJSUlTUFHSUMgRVhFIHZhcmlhYmxlJSUlIgorCisjIEdsb2JhbCB2YXJpYWJsZXMuCisjICRtb2RlIGlzIHVuc2V0Citub25vcHQ9CitleGVjdXRlX2RsZmlsZXM9CitwcmVzZXJ2ZV9hcmdzPQorbG8ybz0icy9cXC5sb1wkLy4ke29iamV4dH0vIgorbzJsbz0icy9cXC4ke29iamV4dH1cJC8ubG8vIgorZXh0cmFjdGVkX2FyY2hpdmVzPQorZXh0cmFjdGVkX3NlcmlhbD0wCisKK29wdF9kcnlfcnVuPWZhbHNlCitvcHRfZHVwbGljYXRlX2RlcHM9ZmFsc2UKK29wdF9zaWxlbnQ9ZmFsc2UKK29wdF9kZWJ1Zz06CisKKyMgSWYgdGhpcyB2YXJpYWJsZSBpcyBzZXQgaW4gYW55IG9mIHRoZSBhY3Rpb25zLCB0aGUgY29tbWFuZCBpbiBpdAorIyB3aWxsIGJlIGV4ZWNlZCBhdCB0aGUgZW5kLiAgVGhpcyBwcmV2ZW50cyBoZXJlLWRvY3VtZW50cyBmcm9tIGJlaW5nCisjIGxlZnQgb3ZlciBieSBzaGVsbHMuCitleGVjX2NtZD0KKworIyBmdW5jX2ZhdGFsX2NvbmZpZ3VyYXRpb24gYXJnLi4uCisjIEVjaG8gcHJvZ3JhbSBuYW1lIHByZWZpeGVkIG1lc3NhZ2UgdG8gc3RhbmRhcmQgZXJyb3IsIGZvbGxvd2VkIGJ5CisjIGEgY29uZmlndXJhdGlvbiBmYWlsdXJlIGhpbnQsIGFuZCBleGl0LgorZnVuY19mYXRhbF9jb25maWd1cmF0aW9uICgpCit7CisgICAgZnVuY19lcnJvciAkezErIiRAIn0KKyAgICBmdW5jX2Vycm9yICJTZWUgdGhlICRQQUNLQUdFIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uIgorICAgIGZ1bmNfZmF0YWxfZXJyb3IgIkZhdGFsIGNvbmZpZ3VyYXRpb24gZXJyb3IuIgorfQorCisKKyMgZnVuY19jb25maWcKKyMgRGlzcGxheSB0aGUgY29uZmlndXJhdGlvbiBmb3IgYWxsIHRoZSB0YWdzIGluIHRoaXMgc2NyaXB0LgorZnVuY19jb25maWcgKCkKK3sKKyAgICByZV9iZWdpbmNmPSdeIyAjIyMgQkVHSU4gTElCVE9PTCcKKyAgICByZV9lbmRjZj0nXiMgIyMjIEVORCBMSUJUT09MJworCisgICAgIyBEZWZhdWx0IGNvbmZpZ3VyYXRpb24uCisgICAgJFNFRCAiMSwvJHJlX2JlZ2luY2YgQ09ORklHL2Q7LyRyZV9lbmRjZiBDT05GSUcvLFwkZCIgPCAiJHByb2dwYXRoIgorCisgICAgIyBOb3cgcHJpbnQgdGhlIGNvbmZpZ3VyYXRpb25zIGZvciB0aGUgdGFncy4KKyAgICBmb3IgdGFnbmFtZSBpbiAkdGFnbGlzdDsgZG8KKyAgICAgICRTRUQgLW4gIi8kcmVfYmVnaW5jZiBUQUcgQ09ORklHOiAkdGFnbmFtZVwkLywvJHJlX2VuZGNmIFRBRyBDT05GSUc6ICR0YWduYW1lXCQvcCIgPCAiJHByb2dwYXRoIgorICAgIGRvbmUKKworICAgIGV4aXQgJD8KK30KKworIyBmdW5jX2ZlYXR1cmVzCisjIERpc3BsYXkgdGhlIGZlYXR1cmVzIHN1cHBvcnRlZCBieSB0aGlzIHNjcmlwdC4KK2Z1bmNfZmVhdHVyZXMgKCkKK3sKKyAgICAkRUNITyAiaG9zdDogJGhvc3QiCisgICAgaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSB5ZXM7IHRoZW4KKyAgICAgICRFQ0hPICJlbmFibGUgc2hhcmVkIGxpYnJhcmllcyIKKyAgICBlbHNlCisgICAgICAkRUNITyAiZGlzYWJsZSBzaGFyZWQgbGlicmFyaWVzIgorICAgIGZpCisgICAgaWYgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiA9IHllczsgdGhlbgorICAgICAgJEVDSE8gImVuYWJsZSBzdGF0aWMgbGlicmFyaWVzIgorICAgIGVsc2UKKyAgICAgICRFQ0hPICJkaXNhYmxlIHN0YXRpYyBsaWJyYXJpZXMiCisgICAgZmkKKworICAgIGV4aXQgJD8KK30KKworIyBmdW5jX2VuYWJsZV90YWcgdGFnbmFtZQorIyBWZXJpZnkgdGhhdCBUQUdOQU1FIGlzIHZhbGlkLCBhbmQgZWl0aGVyIGZsYWcgYW4gZXJyb3IgYW5kIGV4aXQsIG9yCisjIGVuYWJsZSB0aGUgVEFHTkFNRSB0YWcuICBXZSBhbHNvIGFkZCBUQUdOQU1FIHRvIHRoZSBnbG9iYWwgJHRhZ2xpc3QKKyMgdmFyaWFibGUgaGVyZS4KK2Z1bmNfZW5hYmxlX3RhZyAoKQoreworICAjIEdsb2JhbCB2YXJpYWJsZToKKyAgdGFnbmFtZT0iJDEiCisKKyAgcmVfYmVnaW5jZj0iXiMgIyMjIEJFR0lOIExJQlRPT0wgVEFHIENPTkZJRzogJHRhZ25hbWVcJCIKKyAgcmVfZW5kY2Y9Il4jICMjIyBFTkQgTElCVE9PTCBUQUcgQ09ORklHOiAkdGFnbmFtZVwkIgorICBzZWRfZXh0cmFjdGNmPSIvJHJlX2JlZ2luY2YvLC8kcmVfZW5kY2YvcCIKKworICAjIFZhbGlkYXRlIHRhZ25hbWUuCisgIGNhc2UgJHRhZ25hbWUgaW4KKyAgICAqWyEtX0EtWmEtejAtOSwvXSopCisgICAgICBmdW5jX2ZhdGFsX2Vycm9yICJpbnZhbGlkIHRhZyBuYW1lOiAkdGFnbmFtZSIKKyAgICAgIDs7CisgIGVzYWMKKworICAjIERvbid0IHRlc3QgZm9yIHRoZSAiZGVmYXVsdCIgQyB0YWcsIGFzIHdlIGtub3cgaXQncworICAjIHRoZXJlIGJ1dCBub3Qgc3BlY2lhbGx5IG1hcmtlZC4KKyAgY2FzZSAkdGFnbmFtZSBpbgorICAgIENDKSA7OworICAgICopCisgICAgICBpZiAkR1JFUCAiJHJlX2JlZ2luY2YiICIkcHJvZ3BhdGgiID4vZGV2L251bGwgMj4mMTsgdGhlbgorCXRhZ2xpc3Q9IiR0YWdsaXN0ICR0YWduYW1lIgorCisJIyBFdmFsdWF0ZSB0aGUgY29uZmlndXJhdGlvbi4gIEJlIGNhcmVmdWwgdG8gcXVvdGUgdGhlIHBhdGgKKwkjIGFuZCB0aGUgc2VkIHNjcmlwdCwgdG8gYXZvaWQgc3BsaXR0aW5nIG9uIHdoaXRlc3BhY2UsIGJ1dAorCSMgYWxzbyBkb24ndCB1c2Ugbm9uLXBvcnRhYmxlIHF1b3RlcyB3aXRoaW4gYmFja3F1b3RlcyB3aXRoaW4KKwkjIHF1b3RlcyB3ZSBoYXZlIHRvIGRvIGl0IGluIDIgc3RlcHM6CisJZXh0cmFjdGVkY2Y9YCRTRUQgLW4gLWUgIiRzZWRfZXh0cmFjdGNmIiA8ICIkcHJvZ3BhdGgiYAorCWV2YWwgIiRleHRyYWN0ZWRjZiIKKyAgICAgIGVsc2UKKwlmdW5jX2Vycm9yICJpZ25vcmluZyB1bmtub3duIHRhZyAkdGFnbmFtZSIKKyAgICAgIGZpCisgICAgICA7OworICBlc2FjCit9CisKKyMgUGFyc2Ugb3B0aW9ucyBvbmNlLCB0aG9yb3VnaGx5LiAgVGhpcyBjb21lcyBhcyBzb29uIGFzIHBvc3NpYmxlIGluCisjIHRoZSBzY3JpcHQgdG8gbWFrZSB0aGluZ3MgbGlrZSBgbGlidG9vbCAtLXZlcnNpb24nIGhhcHBlbiBxdWlja2x5LgoreworCisgICMgU2hvcnRoYW5kIGZvciAtLW1vZGU9Zm9vLCBvbmx5IHZhbGlkIGFzIHRoZSBmaXJzdCBhcmd1bWVudAorICBjYXNlICQxIGluCisgIGNsZWFufGNsZWF8Y2xlfGNsKQorICAgIHNoaWZ0OyBzZXQgZHVtbXkgLS1tb2RlIGNsZWFuICR7MSsiJEAifTsgc2hpZnQKKyAgICA7OworICBjb21waWxlfGNvbXBpbHxjb21waXxjb21wfGNvbXxjb3xjKQorICAgIHNoaWZ0OyBzZXQgZHVtbXkgLS1tb2RlIGNvbXBpbGUgJHsxKyIkQCJ9OyBzaGlmdAorICAgIDs7CisgIGV4ZWN1dGV8ZXhlY3V0fGV4ZWN1fGV4ZWN8ZXhlfGV4fGUpCisgICAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgZXhlY3V0ZSAkezErIiRAIn07IHNoaWZ0CisgICAgOzsKKyAgZmluaXNofGZpbmlzfGZpbml8ZmlufGZpfGYpCisgICAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgZmluaXNoICR7MSsiJEAifTsgc2hpZnQKKyAgICA7OworICBpbnN0YWxsfGluc3RhbHxpbnN0YXxpbnN0fGluc3xpbnxpKQorICAgIHNoaWZ0OyBzZXQgZHVtbXkgLS1tb2RlIGluc3RhbGwgJHsxKyIkQCJ9OyBzaGlmdAorICAgIDs7CisgIGxpbmt8bGlufGxpfGwpCisgICAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgbGluayAkezErIiRAIn07IHNoaWZ0CisgICAgOzsKKyAgdW5pbnN0YWxsfHVuaW5zdGFsfHVuaW5zdGF8dW5pbnN0fHVuaW5zfHVuaW58dW5pfHVufHUpCisgICAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgdW5pbnN0YWxsICR7MSsiJEAifTsgc2hpZnQKKyAgICA7OworICBlc2FjCisKKyAgIyBQYXJzZSBub24tbW9kZSBzcGVjaWZpYyBhcmd1bWVudHM6CisgIHdoaWxlIHRlc3QgIiQjIiAtZ3QgMDsgZG8KKyAgICBvcHQ9IiQxIgorICAgIHNoaWZ0CisKKyAgICBjYXNlICRvcHQgaW4KKyAgICAgIC0tY29uZmlnKQkJZnVuY19jb25maWcJCQkJCTs7CisKKyAgICAgIC0tZGVidWcpCQlwcmVzZXJ2ZV9hcmdzPSIkcHJlc2VydmVfYXJncyAkb3B0IgorCQkJZnVuY19lY2hvICJlbmFibGluZyBzaGVsbCB0cmFjZSBtb2RlIgorCQkJb3B0X2RlYnVnPSdzZXQgLXgnCisJCQkkb3B0X2RlYnVnCisJCQk7OworCisgICAgICAtZGxvcGVuKQkJdGVzdCAiJCMiIC1lcSAwICYmIGZ1bmNfbWlzc2luZ19hcmcgIiRvcHQiICYmIGJyZWFrCisJCQlleGVjdXRlX2RsZmlsZXM9IiRleGVjdXRlX2RsZmlsZXMgJDEiCisJCQlzaGlmdAorCQkJOzsKKworICAgICAgLS1kcnktcnVuIHwgLW4pCW9wdF9kcnlfcnVuPToJCQkJCTs7CisgICAgICAtLWZlYXR1cmVzKSAgICAgICBmdW5jX2ZlYXR1cmVzCQkJCQk7OworICAgICAgLS1maW5pc2gpCQltb2RlPSJmaW5pc2giCQkJCQk7OworCisgICAgICAtLW1vZGUpCQl0ZXN0ICIkIyIgLWVxIDAgJiYgZnVuY19taXNzaW5nX2FyZyAiJG9wdCIgJiYgYnJlYWsKKwkJCWNhc2UgJDEgaW4KKwkJCSAgIyBWYWxpZCBtb2RlIGFyZ3VtZW50czoKKwkJCSAgY2xlYW4pCTs7CisJCQkgIGNvbXBpbGUpCTs7CisJCQkgIGV4ZWN1dGUpCTs7CisJCQkgIGZpbmlzaCkJOzsKKwkJCSAgaW5zdGFsbCkJOzsKKwkJCSAgbGluaykJCTs7CisJCQkgIHJlbGluaykJOzsKKwkJCSAgdW5pbnN0YWxsKQk7OworCisJCQkgICMgQ2F0Y2ggYW55dGhpbmcgZWxzZSBhcyBhbiBlcnJvcgorCQkJICAqKSBmdW5jX2Vycm9yICJpbnZhbGlkIGFyZ3VtZW50IGZvciAkb3B0IgorCQkJICAgICBleGl0X2NtZD1leGl0CisJCQkgICAgIGJyZWFrCisJCQkgICAgIDs7CisJCSAgICAgICAgZXNhYworCisJCQltb2RlPSIkMSIKKwkJCXNoaWZ0CisJCQk7OworCisgICAgICAtLXByZXNlcnZlLWR1cC1kZXBzKQorCQkJb3B0X2R1cGxpY2F0ZV9kZXBzPToJCQkJOzsKKworICAgICAgLS1xdWlldHwtLXNpbGVudCkJcHJlc2VydmVfYXJncz0iJHByZXNlcnZlX2FyZ3MgJG9wdCIKKwkJCW9wdF9zaWxlbnQ9OgorCQkJOzsKKworICAgICAgLS12ZXJib3NlfCAtdikJcHJlc2VydmVfYXJncz0iJHByZXNlcnZlX2FyZ3MgJG9wdCIKKwkJCW9wdF9zaWxlbnQ9ZmFsc2UKKwkJCTs7CisKKyAgICAgIC0tdGFnKQkJdGVzdCAiJCMiIC1lcSAwICYmIGZ1bmNfbWlzc2luZ19hcmcgIiRvcHQiICYmIGJyZWFrCisJCQlwcmVzZXJ2ZV9hcmdzPSIkcHJlc2VydmVfYXJncyAkb3B0ICQxIgorCQkJZnVuY19lbmFibGVfdGFnICIkMSIJIyB0YWduYW1lIGlzIHNldCBoZXJlCisJCQlzaGlmdAorCQkJOzsKKworICAgICAgIyBTZXBhcmF0ZSBvcHRhcmdzIHRvIGxvbmcgb3B0aW9uczoKKyAgICAgIC1kbG9wZW49KnwtLW1vZGU9KnwtLXRhZz0qKQorCQkJZnVuY19vcHRfc3BsaXQgIiRvcHQiCisJCQlzZXQgZHVtbXkgIiRmdW5jX29wdF9zcGxpdF9vcHQiICIkZnVuY19vcHRfc3BsaXRfYXJnIiAkezErIiRAIn0KKwkJCXNoaWZ0CisJCQk7OworCisgICAgICAtXD98LWgpCQlmdW5jX3VzYWdlCQkJCQk7OworICAgICAgLS1oZWxwKQkJb3B0X2hlbHA9OgkJCQkJOzsKKyAgICAgIC0tdmVyc2lvbikJZnVuY192ZXJzaW9uCQkJCQk7OworCisgICAgICAtKikJCWZ1bmNfZmF0YWxfaGVscCAidW5yZWNvZ25pemVkIG9wdGlvbiBcYCRvcHQnIgk7OworCisgICAgICAqKQkJbm9ub3B0PSIkb3B0IgorCQkJYnJlYWsKKwkJCTs7CisgICAgZXNhYworICBkb25lCisKKworICBjYXNlICRob3N0IGluCisgICAgKmN5Z3dpbiogfCAqbWluZ3cqIHwgKnB3MzIqIHwgKmNlZ2NjKikKKyAgICAgICMgZG9uJ3QgZWxpbWluYXRlIGR1cGxpY2F0aW9ucyBpbiAkcG9zdGRlcHMgYW5kICRwcmVkZXBzCisgICAgICBvcHRfZHVwbGljYXRlX2NvbXBpbGVyX2dlbmVyYXRlZF9kZXBzPToKKyAgICAgIDs7CisgICAgKikKKyAgICAgIG9wdF9kdXBsaWNhdGVfY29tcGlsZXJfZ2VuZXJhdGVkX2RlcHM9JG9wdF9kdXBsaWNhdGVfZGVwcworICAgICAgOzsKKyAgZXNhYworCisgICMgSGF2aW5nIHdhcm5lZCBhYm91dCBhbGwgbWlzLXNwZWNpZmllZCBvcHRpb25zLCBiYWlsIG91dCBpZgorICAjIGFueXRoaW5nIHdhcyB3cm9uZy4KKyAgJGV4aXRfY21kICRFWElUX0ZBSUxVUkUKK30KKworIyBmdW5jX2NoZWNrX3ZlcnNpb25fbWF0Y2gKKyMgRW5zdXJlIHRoYXQgd2UgYXJlIHVzaW5nIG00IG1hY3JvcywgYW5kIGxpYnRvb2wgc2NyaXB0IGZyb20gdGhlIHNhbWUKKyMgcmVsZWFzZSBvZiBsaWJ0b29sLgorZnVuY19jaGVja192ZXJzaW9uX21hdGNoICgpCit7CisgIGlmIHRlc3QgIiRwYWNrYWdlX3JldmlzaW9uIiAhPSAiJG1hY3JvX3JldmlzaW9uIjsgdGhlbgorICAgIGlmIHRlc3QgIiRWRVJTSU9OIiAhPSAiJG1hY3JvX3ZlcnNpb24iOyB0aGVuCisgICAgICBpZiB0ZXN0IC16ICIkbWFjcm9fdmVyc2lvbiI7IHRoZW4KKyAgICAgICAgY2F0ID4mMiA8PF9MVF9FT0YKKyRwcm9nbmFtZTogVmVyc2lvbiBtaXNtYXRjaCBlcnJvci4gIFRoaXMgaXMgJFBBQ0tBR0UgJFZFUlNJT04sIGJ1dCB0aGUKKyRwcm9nbmFtZTogZGVmaW5pdGlvbiBvZiB0aGlzIExUX0lOSVQgY29tZXMgZnJvbSBhbiBvbGRlciByZWxlYXNlLgorJHByb2duYW1lOiBZb3Ugc2hvdWxkIHJlY3JlYXRlIGFjbG9jYWwubTQgd2l0aCBtYWNyb3MgZnJvbSAkUEFDS0FHRSAkVkVSU0lPTgorJHByb2duYW1lOiBhbmQgcnVuIGF1dG9jb25mIGFnYWluLgorX0xUX0VPRgorICAgICAgZWxzZQorICAgICAgICBjYXQgPiYyIDw8X0xUX0VPRgorJHByb2duYW1lOiBWZXJzaW9uIG1pc21hdGNoIGVycm9yLiAgVGhpcyBpcyAkUEFDS0FHRSAkVkVSU0lPTiwgYnV0IHRoZQorJHByb2duYW1lOiBkZWZpbml0aW9uIG9mIHRoaXMgTFRfSU5JVCBjb21lcyBmcm9tICRQQUNLQUdFICRtYWNyb192ZXJzaW9uLgorJHByb2duYW1lOiBZb3Ugc2hvdWxkIHJlY3JlYXRlIGFjbG9jYWwubTQgd2l0aCBtYWNyb3MgZnJvbSAkUEFDS0FHRSAkVkVSU0lPTgorJHByb2duYW1lOiBhbmQgcnVuIGF1dG9jb25mIGFnYWluLgorX0xUX0VPRgorICAgICAgZmkKKyAgICBlbHNlCisgICAgICBjYXQgPiYyIDw8X0xUX0VPRgorJHByb2duYW1lOiBWZXJzaW9uIG1pc21hdGNoIGVycm9yLiAgVGhpcyBpcyAkUEFDS0FHRSAkVkVSU0lPTiwgcmV2aXNpb24gJHBhY2thZ2VfcmV2aXNpb24sCiskcHJvZ25hbWU6IGJ1dCB0aGUgZGVmaW5pdGlvbiBvZiB0aGlzIExUX0lOSVQgY29tZXMgZnJvbSByZXZpc2lvbiAkbWFjcm9fcmV2aXNpb24uCiskcHJvZ25hbWU6IFlvdSBzaG91bGQgcmVjcmVhdGUgYWNsb2NhbC5tNCB3aXRoIG1hY3JvcyBmcm9tIHJldmlzaW9uICRwYWNrYWdlX3JldmlzaW9uCiskcHJvZ25hbWU6IG9mICRQQUNLQUdFICRWRVJTSU9OIGFuZCBydW4gYXV0b2NvbmYgYWdhaW4uCitfTFRfRU9GCisgICAgZmkKKworICAgIGV4aXQgJEVYSVRfTUlTTUFUQ0gKKyAgZmkKK30KKworCisjIyAtLS0tLS0tLS0tLSAjIworIyMgICAgTWFpbi4gICAgIyMKKyMjIC0tLS0tLS0tLS0tICMjCisKKyRvcHRfaGVscCB8fCB7CisgICMgU2FuaXR5IGNoZWNrcyBmaXJzdDoKKyAgZnVuY19jaGVja192ZXJzaW9uX21hdGNoCisKKyAgaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgIT0geWVzICYmIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgIT0geWVzOyB0aGVuCisgICAgZnVuY19mYXRhbF9jb25maWd1cmF0aW9uICJub3QgY29uZmlndXJlZCB0byBidWlsZCBhbnkga2luZCBvZiBsaWJyYXJ5IgorICBmaQorCisgIHRlc3QgLXogIiRtb2RlIiAmJiBmdW5jX2ZhdGFsX2Vycm9yICJlcnJvcjogeW91IG11c3Qgc3BlY2lmeSBhIE1PREUuIgorCisKKyAgIyBEYXJ3aW4gc3Vja3MKKyAgZXZhbCBzdGRfc2hyZXh0PVwiJHNocmV4dF9jbWRzXCIKKworCisgICMgT25seSBleGVjdXRlIG1vZGUgaXMgYWxsb3dlZCB0byBoYXZlIC1kbG9wZW4gZmxhZ3MuCisgIGlmIHRlc3QgLW4gIiRleGVjdXRlX2RsZmlsZXMiICYmIHRlc3QgIiRtb2RlIiAhPSBleGVjdXRlOyB0aGVuCisgICAgZnVuY19lcnJvciAidW5yZWNvZ25pemVkIG9wdGlvbiBcYC1kbG9wZW4nIgorICAgICRFQ0hPICIkaGVscCIgMT4mMgorICAgIGV4aXQgJEVYSVRfRkFJTFVSRQorICBmaQorCisgICMgQ2hhbmdlIHRoZSBoZWxwIG1lc3NhZ2UgdG8gYSBtb2RlLXNwZWNpZmljIG9uZS4KKyAgZ2VuZXJpY19oZWxwPSIkaGVscCIKKyAgaGVscD0iVHJ5IFxgJHByb2duYW1lIC0taGVscCAtLW1vZGU9JG1vZGUnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIKK30KKworCisjIGZ1bmNfbGFsaWJfcCBmaWxlCisjIFRydWUgaWZmIEZJTEUgaXMgYSBsaWJ0b29sIGAubGEnIGxpYnJhcnkgb3IgYC5sbycgb2JqZWN0IGZpbGUuCisjIFRoaXMgZnVuY3Rpb24gaXMgb25seSBhIGJhc2ljIHNhbml0eSBjaGVjazsgaXQgd2lsbCBoYXJkbHkgZmx1c2ggb3V0CisjIGRldGVybWluZWQgaW1wb3N0ZXJzLgorZnVuY19sYWxpYl9wICgpCit7CisgICAgdGVzdCAtZiAiJDEiICYmCisgICAgICAkU0VEIC1lIDRxICIkMSIgMj4vZGV2L251bGwgXAorICAgICAgICB8ICRHUkVQICJeIyBHZW5lcmF0ZWQgYnkgLiokUEFDS0FHRSIgPiAvZGV2L251bGwgMj4mMQorfQorCisjIGZ1bmNfbGFsaWJfdW5zYWZlX3AgZmlsZQorIyBUcnVlIGlmZiBGSUxFIGlzIGEgbGlidG9vbCBgLmxhJyBsaWJyYXJ5IG9yIGAubG8nIG9iamVjdCBmaWxlLgorIyBUaGlzIGZ1bmN0aW9uIGltcGxlbWVudHMgdGhlIHNhbWUgY2hlY2sgYXMgZnVuY19sYWxpYl9wIHdpdGhvdXQKKyMgcmVzb3J0aW5nIHRvIGV4dGVybmFsIHByb2dyYW1zLiAgVG8gdGhpcyBlbmQsIGl0IHJlZGlyZWN0cyBzdGRpbiBhbmQKKyMgY2xvc2VzIGl0IGFmdGVyd2FyZHMsIHdpdGhvdXQgc2F2aW5nIHRoZSBvcmlnaW5hbCBmaWxlIGRlc2NyaXB0b3IuCisjIEFzIGEgc2FmZXR5IG1lYXN1cmUsIHVzZSBpdCBvbmx5IHdoZXJlIGEgbmVnYXRpdmUgcmVzdWx0IHdvdWxkIGJlCisjIGZhdGFsIGFueXdheS4gIFdvcmtzIGlmIGBmaWxlJyBkb2VzIG5vdCBleGlzdC4KK2Z1bmNfbGFsaWJfdW5zYWZlX3AgKCkKK3sKKyAgICBsYWxpYl9wPW5vCisgICAgaWYgdGVzdCAtZiAiJDEiICYmIHRlc3QgLXIgIiQxIiAmJiBleGVjIDU8JjAgPCIkMSI7IHRoZW4KKwlmb3IgbGFsaWJfcF9sIGluIDEgMiAzIDQKKwlkbworCSAgICByZWFkIGxhbGliX3BfbGluZQorCSAgICBjYXNlICIkbGFsaWJfcF9saW5lIiBpbgorCQlcI1wgR2VuZXJhdGVkXCBieVwgKiRQQUNLQUdFKiApIGxhbGliX3A9eWVzOyBicmVhazs7CisJICAgIGVzYWMKKwlkb25lCisJZXhlYyAwPCY1IDU8Ji0KKyAgICBmaQorICAgIHRlc3QgIiRsYWxpYl9wIiA9IHllcworfQorCisjIGZ1bmNfbHR3cmFwcGVyX3NjcmlwdF9wIGZpbGUKKyMgVHJ1ZSBpZmYgRklMRSBpcyBhIGxpYnRvb2wgd3JhcHBlciBzY3JpcHQKKyMgVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGEgYmFzaWMgc2FuaXR5IGNoZWNrOyBpdCB3aWxsIGhhcmRseSBmbHVzaCBvdXQKKyMgZGV0ZXJtaW5lZCBpbXBvc3RlcnMuCitmdW5jX2x0d3JhcHBlcl9zY3JpcHRfcCAoKQoreworICAgIGZ1bmNfbGFsaWJfcCAiJDEiCit9CisKKyMgZnVuY19sdHdyYXBwZXJfZXhlY3V0YWJsZV9wIGZpbGUKKyMgVHJ1ZSBpZmYgRklMRSBpcyBhIGxpYnRvb2wgd3JhcHBlciBleGVjdXRhYmxlCisjIFRoaXMgZnVuY3Rpb24gaXMgb25seSBhIGJhc2ljIHNhbml0eSBjaGVjazsgaXQgd2lsbCBoYXJkbHkgZmx1c2ggb3V0CisjIGRldGVybWluZWQgaW1wb3N0ZXJzLgorZnVuY19sdHdyYXBwZXJfZXhlY3V0YWJsZV9wICgpCit7CisgICAgZnVuY19sdHdyYXBwZXJfZXhlY19zdWZmaXg9CisgICAgY2FzZSAkMSBpbgorICAgICouZXhlKSA7OworICAgICopIGZ1bmNfbHR3cmFwcGVyX2V4ZWNfc3VmZml4PS5leGUgOzsKKyAgICBlc2FjCisgICAgJEdSRVAgIiRtYWdpY19leGUiICIkMSRmdW5jX2x0d3JhcHBlcl9leGVjX3N1ZmZpeCIgPi9kZXYvbnVsbCAyPiYxCit9CisKKyMgZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZSBmaWxlCisjIEFzc3VtZXMgZmlsZSBpcyBhbiBsdHdyYXBwZXJfZXhlY3V0YWJsZQorIyB1c2VzICRmaWxlIHRvIGRldGVybWluZSB0aGUgYXBwcm9wcmlhdGUgZmlsZW5hbWUgZm9yIGEKKyMgdGVtcG9yYXJ5IGx0d3JhcHBlcl9zY3JpcHQuCitmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lICgpCit7CisgICAgZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZV9yZXN1bHQ9IiIKKyAgICBpZiBmdW5jX2x0d3JhcHBlcl9leGVjdXRhYmxlX3AgIiQxIjsgdGhlbgorCWZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgIiQxIiAiIiAiLiIKKwlmdW5jX3N0cmlwbmFtZSAnJyAnLmV4ZScgIiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKwlmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lX3Jlc3VsdD0iJGZ1bmNfZGlybmFtZV9yZXN1bHQvJG9iamRpci8ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdH1fbHRzaHdyYXBwZXIiCisgICAgZmkKK30KKworIyBmdW5jX2x0d3JhcHBlcl9wIGZpbGUKKyMgVHJ1ZSBpZmYgRklMRSBpcyBhIGxpYnRvb2wgd3JhcHBlciBzY3JpcHQgb3Igd3JhcHBlciBleGVjdXRhYmxlCisjIFRoaXMgZnVuY3Rpb24gaXMgb25seSBhIGJhc2ljIHNhbml0eSBjaGVjazsgaXQgd2lsbCBoYXJkbHkgZmx1c2ggb3V0CisjIGRldGVybWluZWQgaW1wb3N0ZXJzLgorZnVuY19sdHdyYXBwZXJfcCAoKQoreworICAgIGZ1bmNfbHR3cmFwcGVyX3NjcmlwdF9wICIkMSIgfHwgZnVuY19sdHdyYXBwZXJfZXhlY3V0YWJsZV9wICIkMSIKK30KKworCisjIGZ1bmNfZXhlY3V0ZV9jbWRzIGNvbW1hbmRzIGZhaWxfY21kCisjIEV4ZWN1dGUgdGlsZGUtZGVsaW1pdGVkIENPTU1BTkRTLgorIyBJZiBGQUlMX0NNRCBpcyBnaXZlbiwgZXZhbCB0aGF0IHVwb24gZmFpbHVyZS4KKyMgRkFJTF9DTUQgbWF5IHJlYWQtYWNjZXNzIHRoZSBjdXJyZW50IGNvbW1hbmQgaW4gdmFyaWFibGUgQ01EIQorZnVuY19leGVjdXRlX2NtZHMgKCkKK3sKKyAgICAkb3B0X2RlYnVnCisgICAgc2F2ZV9pZnM9JElGUzsgSUZTPSd+JworICAgIGZvciBjbWQgaW4gJDE7IGRvCisgICAgICBJRlM9JHNhdmVfaWZzCisgICAgICBldmFsIGNtZD1cIiRjbWRcIgorICAgICAgZnVuY19zaG93X2V2YWwgIiRjbWQiICIkezItOn0iCisgICAgZG9uZQorICAgIElGUz0kc2F2ZV9pZnMKK30KKworCisjIGZ1bmNfc291cmNlIGZpbGUKKyMgU291cmNlIEZJTEUsIGFkZGluZyBkaXJlY3RvcnkgY29tcG9uZW50IGlmIG5lY2Vzc2FyeS4KKyMgTm90ZSB0aGF0IGl0IGlzIG5vdCBuZWNlc3Nhcnkgb24gY3lnd2luL21pbmd3IHRvIGFwcGVuZCBhIGRvdCB0bworIyBGSUxFIGV2ZW4gaWYgYm90aCBGSUxFIGFuZCBGSUxFLmV4ZSBleGlzdDogYXV0b21hdGljLWFwcGVuZC0uZXhlCisjIGJlaGF2aW9yIGhhcHBlbnMgb25seSBmb3IgZXhlYygzKSwgbm90IGZvciBvcGVuKDIpISAgQWxzbywgc291cmNpbmcKKyMgYEZJTEUuJyBkb2VzIG5vdCB3b3JrIG9uIGN5Z3dpbiBtYW5hZ2VkIG1vdW50cy4KK2Z1bmNfc291cmNlICgpCit7CisgICAgJG9wdF9kZWJ1ZworICAgIGNhc2UgJDEgaW4KKyAgICAqLyogfCAqXFwqKQkuICIkMSIgOzsKKyAgICAqKQkJLiAiLi8kMSIgOzsKKyAgICBlc2FjCit9CisKKworIyBmdW5jX2luZmVyX3RhZyBhcmcKKyMgSW5mZXIgdGFnZ2VkIGNvbmZpZ3VyYXRpb24gdG8gdXNlIGlmIGFueSBhcmUgYXZhaWxhYmxlIGFuZAorIyBpZiBvbmUgd2Fzbid0IGNob3NlbiB2aWEgdGhlICItLXRhZyIgY29tbWFuZCBsaW5lIG9wdGlvbi4KKyMgT25seSBhdHRlbXB0IHRoaXMgaWYgdGhlIGNvbXBpbGVyIGluIHRoZSBiYXNlIGNvbXBpbGUKKyMgY29tbWFuZCBkb2Vzbid0IG1hdGNoIHRoZSBkZWZhdWx0IGNvbXBpbGVyLgorIyBhcmcgaXMgdXN1YWxseSBvZiB0aGUgZm9ybSAnZ2NjIC4uLicKK2Z1bmNfaW5mZXJfdGFnICgpCit7CisgICAgJG9wdF9kZWJ1ZworICAgIGlmIHRlc3QgLW4gIiRhdmFpbGFibGVfdGFncyIgJiYgdGVzdCAteiAiJHRhZ25hbWUiOyB0aGVuCisgICAgICBDQ19xdW90ZWQ9CisgICAgICBmb3IgYXJnIGluICRDQzsgZG8KKyAgICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJGFyZyIKKwlDQ19xdW90ZWQ9IiRDQ19xdW90ZWQgJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorICAgICAgZG9uZQorICAgICAgY2FzZSAkQCBpbgorICAgICAgIyBCbGFua3MgaW4gdGhlIGNvbW1hbmQgbWF5IGhhdmUgYmVlbiBzdHJpcHBlZCBieSB0aGUgY2FsbGluZyBzaGVsbCwKKyAgICAgICMgYnV0IG5vdCBmcm9tIHRoZSBDQyBlbnZpcm9ubWVudCB2YXJpYWJsZSB3aGVuIGNvbmZpZ3VyZSB3YXMgcnVuLgorICAgICAgIiAkQ0MgIiogfCAiJENDICIqIHwgIiBgJEVDSE8gJENDYCAiKiB8ICJgJEVDSE8gJENDYCAiKiB8ICIgJENDX3F1b3RlZCIqIHwgIiRDQ19xdW90ZWQgIiogfCAiIGAkRUNITyAkQ0NfcXVvdGVkYCAiKiB8ICJgJEVDSE8gJENDX3F1b3RlZGAgIiopIDs7CisgICAgICAjIEJsYW5rcyBhdCB0aGUgc3RhcnQgb2YgJGJhc2VfY29tcGlsZSB3aWxsIGNhdXNlIHRoaXMgdG8gZmFpbAorICAgICAgIyBpZiB3ZSBkb24ndCBjaGVjayBmb3IgdGhlbSBhcyB3ZWxsLgorICAgICAgKikKKwlmb3IgeiBpbiAkYXZhaWxhYmxlX3RhZ3M7IGRvCisJICBpZiAkR1JFUCAiXiMgIyMjIEJFR0lOIExJQlRPT0wgVEFHIENPTkZJRzogJHokIiA8ICIkcHJvZ3BhdGgiID4gL2Rldi9udWxsOyB0aGVuCisJICAgICMgRXZhbHVhdGUgdGhlIGNvbmZpZ3VyYXRpb24uCisJICAgIGV2YWwgImAke1NFRH0gLW4gLWUgJy9eIyAjIyMgQkVHSU4gTElCVE9PTCBUQUcgQ09ORklHOiAnJHonJC8sL14jICMjIyBFTkQgTElCVE9PTCBUQUcgQ09ORklHOiAnJHonJC9wJyA8ICRwcm9ncGF0aGAiCisJICAgIENDX3F1b3RlZD0KKwkgICAgZm9yIGFyZyBpbiAkQ0M7IGRvCisJICAgICAgIyBEb3VibGUtcXVvdGUgYXJncyBjb250YWluaW5nIG90aGVyIHNoZWxsIG1ldGFjaGFyYWN0ZXJzLgorCSAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRhcmciCisJICAgICAgQ0NfcXVvdGVkPSIkQ0NfcXVvdGVkICRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKwkgICAgZG9uZQorCSAgICBjYXNlICIkQCAiIGluCisJICAgICAgIiAkQ0MgIiogfCAiJENDICIqIHwgIiBgJEVDSE8gJENDYCAiKiB8ICJgJEVDSE8gJENDYCAiKiB8ICIgJENDX3F1b3RlZCIqIHwgIiRDQ19xdW90ZWQgIiogfCAiIGAkRUNITyAkQ0NfcXVvdGVkYCAiKiB8ICJgJEVDSE8gJENDX3F1b3RlZGAgIiopCisJICAgICAgIyBUaGUgY29tcGlsZXIgaW4gdGhlIGJhc2UgY29tcGlsZSBjb21tYW5kIG1hdGNoZXMKKwkgICAgICAjIHRoZSBvbmUgaW4gdGhlIHRhZ2dlZCBjb25maWd1cmF0aW9uLgorCSAgICAgICMgQXNzdW1lIHRoaXMgaXMgdGhlIHRhZ2dlZCBjb25maWd1cmF0aW9uIHdlIHdhbnQuCisJICAgICAgdGFnbmFtZT0kegorCSAgICAgIGJyZWFrCisJICAgICAgOzsKKwkgICAgZXNhYworCSAgZmkKKwlkb25lCisJIyBJZiAkdGFnbmFtZSBzdGlsbCBpc24ndCBzZXQsIHRoZW4gbm8gdGFnZ2VkIGNvbmZpZ3VyYXRpb24KKwkjIHdhcyBmb3VuZCBhbmQgbGV0IHRoZSB1c2VyIGtub3cgdGhhdCB0aGUgIi0tdGFnIiBjb21tYW5kCisJIyBsaW5lIG9wdGlvbiBtdXN0IGJlIHVzZWQuCisJaWYgdGVzdCAteiAiJHRhZ25hbWUiOyB0aGVuCisJICBmdW5jX2VjaG8gInVuYWJsZSB0byBpbmZlciB0YWdnZWQgY29uZmlndXJhdGlvbiIKKwkgIGZ1bmNfZmF0YWxfZXJyb3IgInNwZWNpZnkgYSB0YWcgd2l0aCBcYC0tdGFnJyIKKyMJZWxzZQorIwkgIGZ1bmNfdmVyYm9zZSAidXNpbmcgJHRhZ25hbWUgdGFnZ2VkIGNvbmZpZ3VyYXRpb24iCisJZmkKKwk7OworICAgICAgZXNhYworICAgIGZpCit9CisKKworCisjIGZ1bmNfd3JpdGVfbGlidG9vbF9vYmplY3Qgb3V0cHV0X25hbWUgcGljX25hbWUgbm9ucGljX25hbWUKKyMgQ3JlYXRlIGEgbGlidG9vbCBvYmplY3QgZmlsZSAoYW5hbG9nb3VzIHRvIGEgIi5sYSIgZmlsZSksCisjIGJ1dCBkb24ndCBjcmVhdGUgaXQgaWYgd2UncmUgZG9pbmcgYSBkcnkgcnVuLgorZnVuY193cml0ZV9saWJ0b29sX29iamVjdCAoKQoreworICAgIHdyaXRlX2xpYm9iaj0kezF9CisgICAgaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSB5ZXM7IHRoZW4KKyAgICAgIHdyaXRlX2xvYmo9XCckezJ9XCcKKyAgICBlbHNlCisgICAgICB3cml0ZV9sb2JqPW5vbmUKKyAgICBmaQorCisgICAgaWYgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiA9IHllczsgdGhlbgorICAgICAgd3JpdGVfb2xkb2JqPVwnJHszfVwnCisgICAgZWxzZQorICAgICAgd3JpdGVfb2xkb2JqPW5vbmUKKyAgICBmaQorCisgICAgJG9wdF9kcnlfcnVuIHx8IHsKKyAgICAgIGNhdCA+JHt3cml0ZV9saWJvYmp9VCA8PEVPRgorIyAkd3JpdGVfbGlib2JqIC0gYSBsaWJ0b29sIG9iamVjdCBmaWxlCisjIEdlbmVyYXRlZCBieSAkUFJPR1JBTSAoR05VICRQQUNLQUdFJFRJTUVTVEFNUCkgJFZFUlNJT04KKyMKKyMgUGxlYXNlIERPIE5PVCBkZWxldGUgdGhpcyBmaWxlIQorIyBJdCBpcyBuZWNlc3NhcnkgZm9yIGxpbmtpbmcgdGhlIGxpYnJhcnkuCisKKyMgTmFtZSBvZiB0aGUgUElDIG9iamVjdC4KK3BpY19vYmplY3Q9JHdyaXRlX2xvYmoKKworIyBOYW1lIG9mIHRoZSBub24tUElDIG9iamVjdAorbm9uX3BpY19vYmplY3Q9JHdyaXRlX29sZG9iagorCitFT0YKKyAgICAgICRNViAiJHt3cml0ZV9saWJvYmp9VCIgIiR7d3JpdGVfbGlib2JqfSIKKyAgICB9Cit9CisKKyMgZnVuY19tb2RlX2NvbXBpbGUgYXJnLi4uCitmdW5jX21vZGVfY29tcGlsZSAoKQoreworICAgICRvcHRfZGVidWcKKyAgICAjIEdldCB0aGUgY29tcGlsYXRpb24gY29tbWFuZCBhbmQgdGhlIHNvdXJjZSBmaWxlLgorICAgIGJhc2VfY29tcGlsZT0KKyAgICBzcmNmaWxlPSIkbm9ub3B0IiAgIyAgYWx3YXlzIGtlZXAgYSBub24tZW1wdHkgdmFsdWUgaW4gInNyY2ZpbGUiCisgICAgc3VwcHJlc3Nfb3B0PXllcworICAgIHN1cHByZXNzX291dHB1dD0KKyAgICBhcmdfbW9kZT1ub3JtYWwKKyAgICBsaWJvYmo9CisgICAgbGF0ZXI9CisgICAgcGllX2ZsYWc9CisKKyAgICBmb3IgYXJnCisgICAgZG8KKyAgICAgIGNhc2UgJGFyZ19tb2RlIGluCisgICAgICBhcmcgICkKKwkjIGRvIG5vdCAiY29udGludWUiLiAgSW5zdGVhZCwgYWRkIHRoaXMgdG8gYmFzZV9jb21waWxlCisJbGFzdGFyZz0iJGFyZyIKKwlhcmdfbW9kZT1ub3JtYWwKKwk7OworCisgICAgICB0YXJnZXQgKQorCWxpYm9iaj0iJGFyZyIKKwlhcmdfbW9kZT1ub3JtYWwKKwljb250aW51ZQorCTs7CisKKyAgICAgIG5vcm1hbCApCisJIyBBY2NlcHQgYW55IGNvbW1hbmQtbGluZSBvcHRpb25zLgorCWNhc2UgJGFyZyBpbgorCS1vKQorCSAgdGVzdCAtbiAiJGxpYm9iaiIgJiYgXAorCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJ5b3UgY2Fubm90IHNwZWNpZnkgXGAtbycgbW9yZSB0aGFuIG9uY2UiCisJICBhcmdfbW9kZT10YXJnZXQKKwkgIGNvbnRpbnVlCisJICA7OworCisJLXBpZSB8IC1mcGllIHwgLWZQSUUpCisgICAgICAgICAgcGllX2ZsYWc9IiRwaWVfZmxhZyAkYXJnIgorCSAgY29udGludWUKKwkgIDs7CisKKwktc2hhcmVkIHwgLXN0YXRpYyB8IC1wcmVmZXItcGljIHwgLXByZWZlci1ub24tcGljKQorCSAgbGF0ZXI9IiRsYXRlciAkYXJnIgorCSAgY29udGludWUKKwkgIDs7CisKKwktbm8tc3VwcHJlc3MpCisJICBzdXBwcmVzc19vcHQ9bm8KKwkgIGNvbnRpbnVlCisJICA7OworCisJLVhjb21waWxlcikKKwkgIGFyZ19tb2RlPWFyZyAgIyAgdGhlIG5leHQgb25lIGdvZXMgaW50byB0aGUgImJhc2VfY29tcGlsZSIgYXJnIGxpc3QKKwkgIGNvbnRpbnVlICAgICAgIyAgVGhlIGN1cnJlbnQgInNyY2ZpbGUiIHdpbGwgZWl0aGVyIGJlIHJldGFpbmVkIG9yCisJICA7OyAgICAgICAgICAgICMgIHJlcGxhY2VkIGxhdGVyLiAgSSB3b3VsZCBndWVzcyB0aGF0IHdvdWxkIGJlIGEgYnVnLgorCisJLVdjLCopCisJICBmdW5jX3N0cmlwbmFtZSAnLVdjLCcgJycgIiRhcmciCisJICBhcmdzPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwkgIGxhc3Rhcmc9CisJICBzYXZlX2lmcz0iJElGUyI7IElGUz0nLCcKKwkgIGZvciBhcmcgaW4gJGFyZ3M7IGRvCisJICAgIElGUz0iJHNhdmVfaWZzIgorCSAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkYXJnIgorCSAgICBsYXN0YXJnPSIkbGFzdGFyZyAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisJICBkb25lCisJICBJRlM9IiRzYXZlX2lmcyIKKwkgIGZ1bmNfc3RyaXBuYW1lICcgJyAnJyAiJGxhc3RhcmciCisJICBsYXN0YXJnPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKworCSAgIyBBZGQgdGhlIGFyZ3VtZW50cyB0byBiYXNlX2NvbXBpbGUuCisJICBiYXNlX2NvbXBpbGU9IiRiYXNlX2NvbXBpbGUgJGxhc3RhcmciCisJICBjb250aW51ZQorCSAgOzsKKworCSopCisJICAjIEFjY2VwdCB0aGUgY3VycmVudCBhcmd1bWVudCBhcyB0aGUgc291cmNlIGZpbGUuCisJICAjIFRoZSBwcmV2aW91cyAic3JjZmlsZSIgYmVjb21lcyB0aGUgY3VycmVudCBhcmd1bWVudC4KKwkgICMKKwkgIGxhc3Rhcmc9IiRzcmNmaWxlIgorCSAgc3JjZmlsZT0iJGFyZyIKKwkgIDs7CisJZXNhYyAgIyAgY2FzZSAkYXJnCisJOzsKKyAgICAgIGVzYWMgICAgIyAgY2FzZSAkYXJnX21vZGUKKworICAgICAgIyBBZXN0aGV0aWNhbGx5IHF1b3RlIHRoZSBwcmV2aW91cyBhcmd1bWVudC4KKyAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRsYXN0YXJnIgorICAgICAgYmFzZV9jb21waWxlPSIkYmFzZV9jb21waWxlICRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKyAgICBkb25lICMgZm9yIGFyZworCisgICAgY2FzZSAkYXJnX21vZGUgaW4KKyAgICBhcmcpCisgICAgICBmdW5jX2ZhdGFsX2Vycm9yICJ5b3UgbXVzdCBzcGVjaWZ5IGFuIGFyZ3VtZW50IGZvciAtWGNvbXBpbGUiCisgICAgICA7OworICAgIHRhcmdldCkKKyAgICAgIGZ1bmNfZmF0YWxfZXJyb3IgInlvdSBtdXN0IHNwZWNpZnkgYSB0YXJnZXQgd2l0aCBcYC1vJyIKKyAgICAgIDs7CisgICAgKikKKyAgICAgICMgR2V0IHRoZSBuYW1lIG9mIHRoZSBsaWJyYXJ5IG9iamVjdC4KKyAgICAgIHRlc3QgLXogIiRsaWJvYmoiICYmIHsKKwlmdW5jX2Jhc2VuYW1lICIkc3JjZmlsZSIKKwlsaWJvYmo9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKyAgICAgIH0KKyAgICAgIDs7CisgICAgZXNhYworCisgICAgIyBSZWNvZ25pemUgc2V2ZXJhbCBkaWZmZXJlbnQgZmlsZSBzdWZmaXhlcy4KKyAgICAjIElmIHRoZSB1c2VyIHNwZWNpZmllcyAtbyBmaWxlLm8sIGl0IGlzIHJlcGxhY2VkIHdpdGggZmlsZS5sbworICAgIGNhc2UgJGxpYm9iaiBpbgorICAgICouW2NDRlNpZm1zb10gfCBcCisgICAgKi5hZGEgfCAqLmFkYiB8ICouYWRzIHwgKi5hc20gfCBcCisgICAgKi5jKysgfCAqLmNjIHwgKi5paSB8ICouY2xhc3MgfCAqLmNwcCB8ICouY3h4IHwgXAorICAgICouW2ZGXVswOV0/IHwgKi5mb3IgfCAqLmphdmEgfCAqLm9iaiB8ICouc3gpCisgICAgICBmdW5jX3hmb3JtICIkbGlib2JqIgorICAgICAgbGlib2JqPSRmdW5jX3hmb3JtX3Jlc3VsdAorICAgICAgOzsKKyAgICBlc2FjCisKKyAgICBjYXNlICRsaWJvYmogaW4KKyAgICAqLmxvKSBmdW5jX2xvMm8gIiRsaWJvYmoiOyBvYmo9JGZ1bmNfbG8yb19yZXN1bHQgOzsKKyAgICAqKQorICAgICAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGRldGVybWluZSBuYW1lIG9mIGxpYnJhcnkgb2JqZWN0IGZyb20gXGAkbGlib2JqJyIKKyAgICAgIDs7CisgICAgZXNhYworCisgICAgZnVuY19pbmZlcl90YWcgJGJhc2VfY29tcGlsZQorCisgICAgZm9yIGFyZyBpbiAkbGF0ZXI7IGRvCisgICAgICBjYXNlICRhcmcgaW4KKyAgICAgIC1zaGFyZWQpCisJdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgIT0geWVzICYmIFwKKwkgIGZ1bmNfZmF0YWxfY29uZmlndXJhdGlvbiAiY2FuIG5vdCBidWlsZCBhIHNoYXJlZCBsaWJyYXJ5IgorCWJ1aWxkX29sZF9saWJzPW5vCisJY29udGludWUKKwk7OworCisgICAgICAtc3RhdGljKQorCWJ1aWxkX2xpYnRvb2xfbGlicz1ubworCWJ1aWxkX29sZF9saWJzPXllcworCWNvbnRpbnVlCisJOzsKKworICAgICAgLXByZWZlci1waWMpCisJcGljX21vZGU9eWVzCisJY29udGludWUKKwk7OworCisgICAgICAtcHJlZmVyLW5vbi1waWMpCisJcGljX21vZGU9bm8KKwljb250aW51ZQorCTs7CisgICAgICBlc2FjCisgICAgZG9uZQorCisgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJGxpYm9iaiIKKyAgICB0ZXN0ICJYJGxpYm9iaiIgIT0gIlgkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiIFwKKyAgICAgICYmICRFQ0hPICJYJGxpYm9iaiIgfCAkR1JFUCAnW11+I14qe307PD4/IiciJyInCSAmKCl8YCRbXScgXAorICAgICAgJiYgZnVuY193YXJuaW5nICJsaWJvYmogbmFtZSBcYCRsaWJvYmonIG1heSBub3QgY29udGFpbiBzaGVsbCBzcGVjaWFsIGNoYXJhY3RlcnMuIgorICAgIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgIiRvYmoiICIvIiAiIgorICAgIG9iam5hbWU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKyAgICB4ZGlyPSIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKKyAgICBsb2JqPSR7eGRpcn0kb2JqZGlyLyRvYmpuYW1lCisKKyAgICB0ZXN0IC16ICIkYmFzZV9jb21waWxlIiAmJiBcCisgICAgICBmdW5jX2ZhdGFsX2hlbHAgInlvdSBtdXN0IHNwZWNpZnkgYSBjb21waWxhdGlvbiBjb21tYW5kIgorCisgICAgIyBEZWxldGUgYW55IGxlZnRvdmVyIGxpYnJhcnkgb2JqZWN0cy4KKyAgICBpZiB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiID0geWVzOyB0aGVuCisgICAgICByZW1vdmVsaXN0PSIkb2JqICRsb2JqICRsaWJvYmogJHtsaWJvYmp9VCIKKyAgICBlbHNlCisgICAgICByZW1vdmVsaXN0PSIkbG9iaiAkbGlib2JqICR7bGlib2JqfVQiCisgICAgZmkKKworICAgICMgT24gQ3lnd2luIHRoZXJlJ3Mgbm8gInJlYWwiIFBJQyBmbGFnIHNvIHdlIG11c3QgYnVpbGQgYm90aCBvYmplY3QgdHlwZXMKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgb3MyKiB8IGNlZ2NjKikKKyAgICAgIHBpY19tb2RlPWRlZmF1bHQKKyAgICAgIDs7CisgICAgZXNhYworICAgIGlmIHRlc3QgIiRwaWNfbW9kZSIgPSBubyAmJiB0ZXN0ICIkZGVwbGlic19jaGVja19tZXRob2QiICE9IHBhc3NfYWxsOyB0aGVuCisgICAgICAjIG5vbi1QSUMgY29kZSBpbiBzaGFyZWQgbGlicmFyaWVzIGlzIG5vdCBzdXBwb3J0ZWQKKyAgICAgIHBpY19tb2RlPWRlZmF1bHQKKyAgICBmaQorCisgICAgIyBDYWxjdWxhdGUgdGhlIGZpbGVuYW1lIG9mIHRoZSBvdXRwdXQgb2JqZWN0IGlmIGNvbXBpbGVyIGRvZXMKKyAgICAjIG5vdCBzdXBwb3J0IC1vIHdpdGggLWMKKyAgICBpZiB0ZXN0ICIkY29tcGlsZXJfY19vIiA9IG5vOyB0aGVuCisgICAgICBvdXRwdXRfb2JqPWAkRUNITyAiWCRzcmNmaWxlIiB8ICRYc2VkIC1lICdzJV4uKi8lJScgLWUgJ3MlXC5bXi5dKiQlJSdgLiR7b2JqZXh0fQorICAgICAgbG9ja2ZpbGU9IiRvdXRwdXRfb2JqLmxvY2siCisgICAgZWxzZQorICAgICAgb3V0cHV0X29iaj0KKyAgICAgIG5lZWRfbG9ja3M9bm8KKyAgICAgIGxvY2tmaWxlPQorICAgIGZpCisKKyAgICAjIExvY2sgdGhpcyBjcml0aWNhbCBzZWN0aW9uIGlmIGl0IGlzIG5lZWRlZAorICAgICMgV2UgdXNlIHRoaXMgc2NyaXB0IGZpbGUgdG8gbWFrZSB0aGUgbGluaywgaXQgYXZvaWRzIGNyZWF0aW5nIGEgbmV3IGZpbGUKKyAgICBpZiB0ZXN0ICIkbmVlZF9sb2NrcyIgPSB5ZXM7IHRoZW4KKyAgICAgIHVudGlsICRvcHRfZHJ5X3J1biB8fCBsbiAiJHByb2dwYXRoIiAiJGxvY2tmaWxlIiAyPi9kZXYvbnVsbDsgZG8KKwlmdW5jX2VjaG8gIldhaXRpbmcgZm9yICRsb2NrZmlsZSB0byBiZSByZW1vdmVkIgorCXNsZWVwIDIKKyAgICAgIGRvbmUKKyAgICBlbGlmIHRlc3QgIiRuZWVkX2xvY2tzIiA9IHdhcm47IHRoZW4KKyAgICAgIGlmIHRlc3QgLWYgIiRsb2NrZmlsZSI7IHRoZW4KKwkkRUNITyAiXAorKioqIEVSUk9SLCAkbG9ja2ZpbGUgZXhpc3RzIGFuZCBjb250YWluczoKK2BjYXQgJGxvY2tmaWxlIDI+L2Rldi9udWxsYAorCitUaGlzIGluZGljYXRlcyB0aGF0IGFub3RoZXIgcHJvY2VzcyBpcyB0cnlpbmcgdG8gdXNlIHRoZSBzYW1lCit0ZW1wb3Jhcnkgb2JqZWN0IGZpbGUsIGFuZCBsaWJ0b29sIGNvdWxkIG5vdCB3b3JrIGFyb3VuZCBpdCBiZWNhdXNlCit5b3VyIGNvbXBpbGVyIGRvZXMgbm90IHN1cHBvcnQgXGAtYycgYW5kIFxgLW8nIHRvZ2V0aGVyLiAgSWYgeW91CityZXBlYXQgdGhpcyBjb21waWxhdGlvbiwgaXQgbWF5IHN1Y2NlZWQsIGJ5IGNoYW5jZSwgYnV0IHlvdSBoYWQgYmV0dGVyCithdm9pZCBwYXJhbGxlbCBidWlsZHMgKG1ha2UgLWopIGluIHRoaXMgcGxhdGZvcm0sIG9yIGdldCBhIGJldHRlcgorY29tcGlsZXIuIgorCisJJG9wdF9kcnlfcnVuIHx8ICRSTSAkcmVtb3ZlbGlzdAorCWV4aXQgJEVYSVRfRkFJTFVSRQorICAgICAgZmkKKyAgICAgIHJlbW92ZWxpc3Q9IiRyZW1vdmVsaXN0ICRvdXRwdXRfb2JqIgorICAgICAgJEVDSE8gIiRzcmNmaWxlIiA+ICIkbG9ja2ZpbGUiCisgICAgZmkKKworICAgICRvcHRfZHJ5X3J1biB8fCAkUk0gJHJlbW92ZWxpc3QKKyAgICByZW1vdmVsaXN0PSIkcmVtb3ZlbGlzdCAkbG9ja2ZpbGUiCisgICAgdHJhcCAnJG9wdF9kcnlfcnVuIHx8ICRSTSAkcmVtb3ZlbGlzdDsgZXhpdCAkRVhJVF9GQUlMVVJFJyAxIDIgMTUKKworICAgIGlmIHRlc3QgLW4gIiRmaXhfc3JjZmlsZV9wYXRoIjsgdGhlbgorICAgICAgZXZhbCBzcmNmaWxlPVwiJGZpeF9zcmNmaWxlX3BhdGhcIgorICAgIGZpCisgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJHNyY2ZpbGUiCisgICAgcXNyY2ZpbGU9JGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0CisKKyAgICAjIE9ubHkgYnVpbGQgYSBQSUMgb2JqZWN0IGlmIHdlIGFyZSBidWlsZGluZyBsaWJ0b29sIGxpYnJhcmllcy4KKyAgICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IHllczsgdGhlbgorICAgICAgIyBXaXRob3V0IHRoaXMgYXNzaWdubWVudCwgYmFzZV9jb21waWxlIGdldHMgZW1wdGllZC4KKyAgICAgIGZic2RfaGlkZW91c19zaF9idWc9JGJhc2VfY29tcGlsZQorCisgICAgICBpZiB0ZXN0ICIkcGljX21vZGUiICE9IG5vOyB0aGVuCisJY29tbWFuZD0iJGJhc2VfY29tcGlsZSAkcXNyY2ZpbGUgJHBpY19mbGFnIgorICAgICAgZWxzZQorCSMgRG9uJ3QgYnVpbGQgUElDIGNvZGUKKwljb21tYW5kPSIkYmFzZV9jb21waWxlICRxc3JjZmlsZSIKKyAgICAgIGZpCisKKyAgICAgIGZ1bmNfbWtkaXJfcCAiJHhkaXIkb2JqZGlyIgorCisgICAgICBpZiB0ZXN0IC16ICIkb3V0cHV0X29iaiI7IHRoZW4KKwkjIFBsYWNlIFBJQyBvYmplY3RzIGluICRvYmpkaXIKKwljb21tYW5kPSIkY29tbWFuZCAtbyAkbG9iaiIKKyAgICAgIGZpCisKKyAgICAgIGZ1bmNfc2hvd19ldmFsX2xvY2FsZSAiJGNvbW1hbmQiCVwKKyAgICAgICAgICAndGVzdCAtbiAiJG91dHB1dF9vYmoiICYmICRSTSAkcmVtb3ZlbGlzdDsgZXhpdCAkRVhJVF9GQUlMVVJFJworCisgICAgICBpZiB0ZXN0ICIkbmVlZF9sb2NrcyIgPSB3YXJuICYmCisJIHRlc3QgIlhgY2F0ICRsb2NrZmlsZSAyPi9kZXYvbnVsbGAiICE9ICJYJHNyY2ZpbGUiOyB0aGVuCisJJEVDSE8gIlwKKyoqKiBFUlJPUiwgJGxvY2tmaWxlIGNvbnRhaW5zOgorYGNhdCAkbG9ja2ZpbGUgMj4vZGV2L251bGxgCisKK2J1dCBpdCBzaG91bGQgY29udGFpbjoKKyRzcmNmaWxlCisKK1RoaXMgaW5kaWNhdGVzIHRoYXQgYW5vdGhlciBwcm9jZXNzIGlzIHRyeWluZyB0byB1c2UgdGhlIHNhbWUKK3RlbXBvcmFyeSBvYmplY3QgZmlsZSwgYW5kIGxpYnRvb2wgY291bGQgbm90IHdvcmsgYXJvdW5kIGl0IGJlY2F1c2UKK3lvdXIgY29tcGlsZXIgZG9lcyBub3Qgc3VwcG9ydCBcYC1jJyBhbmQgXGAtbycgdG9nZXRoZXIuICBJZiB5b3UKK3JlcGVhdCB0aGlzIGNvbXBpbGF0aW9uLCBpdCBtYXkgc3VjY2VlZCwgYnkgY2hhbmNlLCBidXQgeW91IGhhZCBiZXR0ZXIKK2F2b2lkIHBhcmFsbGVsIGJ1aWxkcyAobWFrZSAtaikgaW4gdGhpcyBwbGF0Zm9ybSwgb3IgZ2V0IGEgYmV0dGVyCitjb21waWxlci4iCisKKwkkb3B0X2RyeV9ydW4gfHwgJFJNICRyZW1vdmVsaXN0CisJZXhpdCAkRVhJVF9GQUlMVVJFCisgICAgICBmaQorCisgICAgICAjIEp1c3QgbW92ZSB0aGUgb2JqZWN0IGlmIG5lZWRlZCwgdGhlbiBnbyBvbiB0byBjb21waWxlIHRoZSBuZXh0IG9uZQorICAgICAgaWYgdGVzdCAtbiAiJG91dHB1dF9vYmoiICYmIHRlc3QgIlgkb3V0cHV0X29iaiIgIT0gIlgkbG9iaiI7IHRoZW4KKwlmdW5jX3Nob3dfZXZhbCAnJE1WICIkb3V0cHV0X29iaiIgIiRsb2JqIicgXAorCSAgJ2Vycm9yPSQ/OyAkb3B0X2RyeV9ydW4gfHwgJFJNICRyZW1vdmVsaXN0OyBleGl0ICRlcnJvcicKKyAgICAgIGZpCisKKyAgICAgICMgQWxsb3cgZXJyb3IgbWVzc2FnZXMgb25seSBmcm9tIHRoZSBmaXJzdCBjb21waWxhdGlvbi4KKyAgICAgIGlmIHRlc3QgIiRzdXBwcmVzc19vcHQiID0geWVzOyB0aGVuCisJc3VwcHJlc3Nfb3V0cHV0PScgPi9kZXYvbnVsbCAyPiYxJworICAgICAgZmkKKyAgICBmaQorCisgICAgIyBPbmx5IGJ1aWxkIGEgcG9zaXRpb24tZGVwZW5kZW50IG9iamVjdCBpZiB3ZSBidWlsZCBvbGQgbGlicmFyaWVzLgorICAgIGlmIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSB5ZXM7IHRoZW4KKyAgICAgIGlmIHRlc3QgIiRwaWNfbW9kZSIgIT0geWVzOyB0aGVuCisJIyBEb24ndCBidWlsZCBQSUMgY29kZQorCWNvbW1hbmQ9IiRiYXNlX2NvbXBpbGUgJHFzcmNmaWxlJHBpZV9mbGFnIgorICAgICAgZWxzZQorCWNvbW1hbmQ9IiRiYXNlX2NvbXBpbGUgJHFzcmNmaWxlICRwaWNfZmxhZyIKKyAgICAgIGZpCisgICAgICBpZiB0ZXN0ICIkY29tcGlsZXJfY19vIiA9IHllczsgdGhlbgorCWNvbW1hbmQ9IiRjb21tYW5kIC1vICRvYmoiCisgICAgICBmaQorCisgICAgICAjIFN1cHByZXNzIGNvbXBpbGVyIG91dHB1dCBpZiB3ZSBhbHJlYWR5IGRpZCBhIFBJQyBjb21waWxhdGlvbi4KKyAgICAgIGNvbW1hbmQ9IiRjb21tYW5kJHN1cHByZXNzX291dHB1dCIKKyAgICAgIGZ1bmNfc2hvd19ldmFsX2xvY2FsZSAiJGNvbW1hbmQiIFwKKyAgICAgICAgJyRvcHRfZHJ5X3J1biB8fCAkUk0gJHJlbW92ZWxpc3Q7IGV4aXQgJEVYSVRfRkFJTFVSRScKKworICAgICAgaWYgdGVzdCAiJG5lZWRfbG9ja3MiID0gd2FybiAmJgorCSB0ZXN0ICJYYGNhdCAkbG9ja2ZpbGUgMj4vZGV2L251bGxgIiAhPSAiWCRzcmNmaWxlIjsgdGhlbgorCSRFQ0hPICJcCisqKiogRVJST1IsICRsb2NrZmlsZSBjb250YWluczoKK2BjYXQgJGxvY2tmaWxlIDI+L2Rldi9udWxsYAorCitidXQgaXQgc2hvdWxkIGNvbnRhaW46Ciskc3JjZmlsZQorCitUaGlzIGluZGljYXRlcyB0aGF0IGFub3RoZXIgcHJvY2VzcyBpcyB0cnlpbmcgdG8gdXNlIHRoZSBzYW1lCit0ZW1wb3Jhcnkgb2JqZWN0IGZpbGUsIGFuZCBsaWJ0b29sIGNvdWxkIG5vdCB3b3JrIGFyb3VuZCBpdCBiZWNhdXNlCit5b3VyIGNvbXBpbGVyIGRvZXMgbm90IHN1cHBvcnQgXGAtYycgYW5kIFxgLW8nIHRvZ2V0aGVyLiAgSWYgeW91CityZXBlYXQgdGhpcyBjb21waWxhdGlvbiwgaXQgbWF5IHN1Y2NlZWQsIGJ5IGNoYW5jZSwgYnV0IHlvdSBoYWQgYmV0dGVyCithdm9pZCBwYXJhbGxlbCBidWlsZHMgKG1ha2UgLWopIGluIHRoaXMgcGxhdGZvcm0sIG9yIGdldCBhIGJldHRlcgorY29tcGlsZXIuIgorCisJJG9wdF9kcnlfcnVuIHx8ICRSTSAkcmVtb3ZlbGlzdAorCWV4aXQgJEVYSVRfRkFJTFVSRQorICAgICAgZmkKKworICAgICAgIyBKdXN0IG1vdmUgdGhlIG9iamVjdCBpZiBuZWVkZWQKKyAgICAgIGlmIHRlc3QgLW4gIiRvdXRwdXRfb2JqIiAmJiB0ZXN0ICJYJG91dHB1dF9vYmoiICE9ICJYJG9iaiI7IHRoZW4KKwlmdW5jX3Nob3dfZXZhbCAnJE1WICIkb3V0cHV0X29iaiIgIiRvYmoiJyBcCisJICAnZXJyb3I9JD87ICRvcHRfZHJ5X3J1biB8fCAkUk0gJHJlbW92ZWxpc3Q7IGV4aXQgJGVycm9yJworICAgICAgZmkKKyAgICBmaQorCisgICAgJG9wdF9kcnlfcnVuIHx8IHsKKyAgICAgIGZ1bmNfd3JpdGVfbGlidG9vbF9vYmplY3QgIiRsaWJvYmoiICIkb2JqZGlyLyRvYmpuYW1lIiAiJG9iam5hbWUiCisKKyAgICAgICMgVW5sb2NrIHRoZSBjcml0aWNhbCBzZWN0aW9uIGlmIGl0IHdhcyBsb2NrZWQKKyAgICAgIGlmIHRlc3QgIiRuZWVkX2xvY2tzIiAhPSBubzsgdGhlbgorCXJlbW92ZWxpc3Q9JGxvY2tmaWxlCisgICAgICAgICRSTSAiJGxvY2tmaWxlIgorICAgICAgZmkKKyAgICB9CisKKyAgICBleGl0ICRFWElUX1NVQ0NFU1MKK30KKworJG9wdF9oZWxwIHx8IHsKK3Rlc3QgIiRtb2RlIiA9IGNvbXBpbGUgJiYgZnVuY19tb2RlX2NvbXBpbGUgJHsxKyIkQCJ9Cit9CisKK2Z1bmNfbW9kZV9oZWxwICgpCit7CisgICAgIyBXZSBuZWVkIHRvIGRpc3BsYXkgaGVscCBmb3IgZWFjaCBvZiB0aGUgbW9kZXMuCisgICAgY2FzZSAkbW9kZSBpbgorICAgICAgIiIpCisgICAgICAgICMgR2VuZXJpYyBoZWxwIGlzIGV4dHJhY3RlZCBmcm9tIHRoZSB1c2FnZSBjb21tZW50cworICAgICAgICAjIGF0IHRoZSBzdGFydCBvZiB0aGlzIGZpbGUuCisgICAgICAgIGZ1bmNfaGVscAorICAgICAgICA7OworCisgICAgICBjbGVhbikKKyAgICAgICAgJEVDSE8gXAorIlVzYWdlOiAkcHJvZ25hbWUgW09QVElPTl0uLi4gLS1tb2RlPWNsZWFuIFJNIFtSTS1PUFRJT05dLi4uIEZJTEUuLi4KKworUmVtb3ZlIGZpbGVzIGZyb20gdGhlIGJ1aWxkIGRpcmVjdG9yeS4KKworUk0gaXMgdGhlIG5hbWUgb2YgdGhlIHByb2dyYW0gdG8gdXNlIHRvIGRlbGV0ZSBmaWxlcyBhc3NvY2lhdGVkIHdpdGggZWFjaCBGSUxFCisodHlwaWNhbGx5IFxgL2Jpbi9ybScpLiAgUk0tT1BUSU9OUyBhcmUgb3B0aW9ucyAoc3VjaCBhcyBcYC1mJykgdG8gYmUgcGFzc2VkCit0byBSTS4KKworSWYgRklMRSBpcyBhIGxpYnRvb2wgbGlicmFyeSwgb2JqZWN0IG9yIHByb2dyYW0sIGFsbCB0aGUgZmlsZXMgYXNzb2NpYXRlZAord2l0aCBpdCBhcmUgZGVsZXRlZC4gT3RoZXJ3aXNlLCBvbmx5IEZJTEUgaXRzZWxmIGlzIGRlbGV0ZWQgdXNpbmcgUk0uIgorICAgICAgICA7OworCisgICAgICBjb21waWxlKQorICAgICAgJEVDSE8gXAorIlVzYWdlOiAkcHJvZ25hbWUgW09QVElPTl0uLi4gLS1tb2RlPWNvbXBpbGUgQ09NUElMRS1DT01NQU5ELi4uIFNPVVJDRUZJTEUKKworQ29tcGlsZSBhIHNvdXJjZSBmaWxlIGludG8gYSBsaWJ0b29sIGxpYnJhcnkgb2JqZWN0LgorCitUaGlzIG1vZGUgYWNjZXB0cyB0aGUgZm9sbG93aW5nIGFkZGl0aW9uYWwgb3B0aW9uczoKKworICAtbyBPVVRQVVQtRklMRSAgICBzZXQgdGhlIG91dHB1dCBmaWxlIG5hbWUgdG8gT1VUUFVULUZJTEUKKyAgLW5vLXN1cHByZXNzICAgICAgZG8gbm90IHN1cHByZXNzIGNvbXBpbGVyIG91dHB1dCBmb3IgbXVsdGlwbGUgcGFzc2VzCisgIC1wcmVmZXItcGljICAgICAgIHRyeSB0byBidWlsZGluZyBQSUMgb2JqZWN0cyBvbmx5CisgIC1wcmVmZXItbm9uLXBpYyAgIHRyeSB0byBidWlsZGluZyBub24tUElDIG9iamVjdHMgb25seQorICAtc2hhcmVkICAgICAgICAgICBkbyBub3QgYnVpbGQgYSBcYC5vJyBmaWxlIHN1aXRhYmxlIGZvciBzdGF0aWMgbGlua2luZworICAtc3RhdGljICAgICAgICAgICBvbmx5IGJ1aWxkIGEgXGAubycgZmlsZSBzdWl0YWJsZSBmb3Igc3RhdGljIGxpbmtpbmcKKworQ09NUElMRS1DT01NQU5EIGlzIGEgY29tbWFuZCB0byBiZSB1c2VkIGluIGNyZWF0aW5nIGEgXGBzdGFuZGFyZCcgb2JqZWN0IGZpbGUKK2Zyb20gdGhlIGdpdmVuIFNPVVJDRUZJTEUuCisKK1RoZSBvdXRwdXQgZmlsZSBuYW1lIGlzIGRldGVybWluZWQgYnkgcmVtb3ZpbmcgdGhlIGRpcmVjdG9yeSBjb21wb25lbnQgZnJvbQorU09VUkNFRklMRSwgdGhlbiBzdWJzdGl0dXRpbmcgdGhlIEMgc291cmNlIGNvZGUgc3VmZml4IFxgLmMnIHdpdGggdGhlCitsaWJyYXJ5IG9iamVjdCBzdWZmaXgsIFxgLmxvJy4iCisgICAgICAgIDs7CisKKyAgICAgIGV4ZWN1dGUpCisgICAgICAgICRFQ0hPIFwKKyJVc2FnZTogJHByb2duYW1lIFtPUFRJT05dLi4uIC0tbW9kZT1leGVjdXRlIENPTU1BTkQgW0FSR1NdLi4uCisKK0F1dG9tYXRpY2FsbHkgc2V0IGxpYnJhcnkgcGF0aCwgdGhlbiBydW4gYSBwcm9ncmFtLgorCitUaGlzIG1vZGUgYWNjZXB0cyB0aGUgZm9sbG93aW5nIGFkZGl0aW9uYWwgb3B0aW9uczoKKworICAtZGxvcGVuIEZJTEUgICAgICBhZGQgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIEZJTEUgdG8gdGhlIGxpYnJhcnkgcGF0aAorCitUaGlzIG1vZGUgc2V0cyB0aGUgbGlicmFyeSBwYXRoIGVudmlyb25tZW50IHZhcmlhYmxlIGFjY29yZGluZyB0byBcYC1kbG9wZW4nCitmbGFncy4KKworSWYgYW55IG9mIHRoZSBBUkdTIGFyZSBsaWJ0b29sIGV4ZWN1dGFibGUgd3JhcHBlcnMsIHRoZW4gdGhleSBhcmUgdHJhbnNsYXRlZAoraW50byB0aGVpciBjb3JyZXNwb25kaW5nIHVuaW5zdGFsbGVkIGJpbmFyeSwgYW5kIGFueSBvZiB0aGVpciByZXF1aXJlZCBsaWJyYXJ5CitkaXJlY3RvcmllcyBhcmUgYWRkZWQgdG8gdGhlIGxpYnJhcnkgcGF0aC4KKworVGhlbiwgQ09NTUFORCBpcyBleGVjdXRlZCwgd2l0aCBBUkdTIGFzIGFyZ3VtZW50cy4iCisgICAgICAgIDs7CisKKyAgICAgIGZpbmlzaCkKKyAgICAgICAgJEVDSE8gXAorIlVzYWdlOiAkcHJvZ25hbWUgW09QVElPTl0uLi4gLS1tb2RlPWZpbmlzaCBbTElCRElSXS4uLgorCitDb21wbGV0ZSB0aGUgaW5zdGFsbGF0aW9uIG9mIGxpYnRvb2wgbGlicmFyaWVzLgorCitFYWNoIExJQkRJUiBpcyBhIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIGxpYnRvb2wgbGlicmFyaWVzLgorCitUaGUgY29tbWFuZHMgdGhhdCB0aGlzIG1vZGUgZXhlY3V0ZXMgbWF5IHJlcXVpcmUgc3VwZXJ1c2VyIHByaXZpbGVnZXMuICBVc2UKK3RoZSBcYC0tZHJ5LXJ1bicgb3B0aW9uIGlmIHlvdSBqdXN0IHdhbnQgdG8gc2VlIHdoYXQgd291bGQgYmUgZXhlY3V0ZWQuIgorICAgICAgICA7OworCisgICAgICBpbnN0YWxsKQorICAgICAgICAkRUNITyBcCisiVXNhZ2U6ICRwcm9nbmFtZSBbT1BUSU9OXS4uLiAtLW1vZGU9aW5zdGFsbCBJTlNUQUxMLUNPTU1BTkQuLi4KKworSW5zdGFsbCBleGVjdXRhYmxlcyBvciBsaWJyYXJpZXMuCisKK0lOU1RBTEwtQ09NTUFORCBpcyB0aGUgaW5zdGFsbGF0aW9uIGNvbW1hbmQuICBUaGUgZmlyc3QgY29tcG9uZW50IHNob3VsZCBiZQorZWl0aGVyIHRoZSBcYGluc3RhbGwnIG9yIFxgY3AnIHByb2dyYW0uCisKK1RoZSBmb2xsb3dpbmcgY29tcG9uZW50cyBvZiBJTlNUQUxMLUNPTU1BTkQgYXJlIHRyZWF0ZWQgc3BlY2lhbGx5OgorCisgIC1pbnN0LXByZWZpeCBQUkVGSVgtRElSICBVc2UgUFJFRklYLURJUiBhcyBhIHN0YWdpbmcgYXJlYSBmb3IgaW5zdGFsbGF0aW9uCisKK1RoZSByZXN0IG9mIHRoZSBjb21wb25lbnRzIGFyZSBpbnRlcnByZXRlZCBhcyBhcmd1bWVudHMgdG8gdGhhdCBjb21tYW5kIChvbmx5CitCU0QtY29tcGF0aWJsZSBpbnN0YWxsIG9wdGlvbnMgYXJlIHJlY29nbml6ZWQpLiIKKyAgICAgICAgOzsKKworICAgICAgbGluaykKKyAgICAgICAgJEVDSE8gXAorIlVzYWdlOiAkcHJvZ25hbWUgW09QVElPTl0uLi4gLS1tb2RlPWxpbmsgTElOSy1DT01NQU5ELi4uCisKK0xpbmsgb2JqZWN0IGZpbGVzIG9yIGxpYnJhcmllcyB0b2dldGhlciB0byBmb3JtIGFub3RoZXIgbGlicmFyeSwgb3IgdG8KK2NyZWF0ZSBhbiBleGVjdXRhYmxlIHByb2dyYW0uCisKK0xJTkstQ09NTUFORCBpcyBhIGNvbW1hbmQgdXNpbmcgdGhlIEMgY29tcGlsZXIgdGhhdCB5b3Ugd291bGQgdXNlIHRvIGNyZWF0ZQorYSBwcm9ncmFtIGZyb20gc2V2ZXJhbCBvYmplY3QgZmlsZXMuCisKK1RoZSBmb2xsb3dpbmcgY29tcG9uZW50cyBvZiBMSU5LLUNPTU1BTkQgYXJlIHRyZWF0ZWQgc3BlY2lhbGx5OgorCisgIC1hbGwtc3RhdGljICAgICAgIGRvIG5vdCBkbyBhbnkgZHluYW1pYyBsaW5raW5nIGF0IGFsbAorICAtYXZvaWQtdmVyc2lvbiAgICBkbyBub3QgYWRkIGEgdmVyc2lvbiBzdWZmaXggaWYgcG9zc2libGUKKyAgLWRsb3BlbiBGSUxFICAgICAgXGAtZGxwcmVvcGVuJyBGSUxFIGlmIGl0IGNhbm5vdCBiZSBkbG9wZW5lZCBhdCBydW50aW1lCisgIC1kbHByZW9wZW4gRklMRSAgIGxpbmsgaW4gRklMRSBhbmQgYWRkIGl0cyBzeW1ib2xzIHRvIGx0X3ByZWxvYWRlZF9zeW1ib2xzCisgIC1leHBvcnQtZHluYW1pYyAgIGFsbG93IHN5bWJvbHMgZnJvbSBPVVRQVVQtRklMRSB0byBiZSByZXNvbHZlZCB3aXRoIGRsc3ltKDMpCisgIC1leHBvcnQtc3ltYm9scyBTWU1GSUxFCisgICAgICAgICAgICAgICAgICAgIHRyeSB0byBleHBvcnQgb25seSB0aGUgc3ltYm9scyBsaXN0ZWQgaW4gU1lNRklMRQorICAtZXhwb3J0LXN5bWJvbHMtcmVnZXggUkVHRVgKKyAgICAgICAgICAgICAgICAgICAgdHJ5IHRvIGV4cG9ydCBvbmx5IHRoZSBzeW1ib2xzIG1hdGNoaW5nIFJFR0VYCisgIC1MTElCRElSICAgICAgICAgIHNlYXJjaCBMSUJESVIgZm9yIHJlcXVpcmVkIGluc3RhbGxlZCBsaWJyYXJpZXMKKyAgLWxOQU1FICAgICAgICAgICAgT1VUUFVULUZJTEUgcmVxdWlyZXMgdGhlIGluc3RhbGxlZCBsaWJyYXJ5IGxpYk5BTUUKKyAgLW1vZHVsZSAgICAgICAgICAgYnVpbGQgYSBsaWJyYXJ5IHRoYXQgY2FuIGRsb3BlbmVkCisgIC1uby1mYXN0LWluc3RhbGwgIGRpc2FibGUgdGhlIGZhc3QtaW5zdGFsbCBtb2RlCisgIC1uby1pbnN0YWxsICAgICAgIGxpbmsgYSBub3QtaW5zdGFsbGFibGUgZXhlY3V0YWJsZQorICAtbm8tdW5kZWZpbmVkICAgICBkZWNsYXJlIHRoYXQgYSBsaWJyYXJ5IGRvZXMgbm90IHJlZmVyIHRvIGV4dGVybmFsIHN5bWJvbHMKKyAgLW8gT1VUUFVULUZJTEUgICAgY3JlYXRlIE9VVFBVVC1GSUxFIGZyb20gdGhlIHNwZWNpZmllZCBvYmplY3RzCisgIC1vYmplY3RsaXN0IEZJTEUgIFVzZSBhIGxpc3Qgb2Ygb2JqZWN0IGZpbGVzIGZvdW5kIGluIEZJTEUgdG8gc3BlY2lmeSBvYmplY3RzCisgIC1wcmVjaW91cy1maWxlcy1yZWdleCBSRUdFWAorICAgICAgICAgICAgICAgICAgICBkb24ndCByZW1vdmUgb3V0cHV0IGZpbGVzIG1hdGNoaW5nIFJFR0VYCisgIC1yZWxlYXNlIFJFTEVBU0UgIHNwZWNpZnkgcGFja2FnZSByZWxlYXNlIGluZm9ybWF0aW9uCisgIC1ycGF0aCBMSUJESVIgICAgIHRoZSBjcmVhdGVkIGxpYnJhcnkgd2lsbCBldmVudHVhbGx5IGJlIGluc3RhbGxlZCBpbiBMSUJESVIKKyAgLVJbIF1MSUJESVIgICAgICAgYWRkIExJQkRJUiB0byB0aGUgcnVudGltZSBwYXRoIG9mIHByb2dyYW1zIGFuZCBsaWJyYXJpZXMKKyAgLXNoYXJlZCAgICAgICAgICAgb25seSBkbyBkeW5hbWljIGxpbmtpbmcgb2YgbGlidG9vbCBsaWJyYXJpZXMKKyAgLXNocmV4dCBTVUZGSVggICAgb3ZlcnJpZGUgdGhlIHN0YW5kYXJkIHNoYXJlZCBsaWJyYXJ5IGZpbGUgZXh0ZW5zaW9uCisgIC1zdGF0aWMgICAgICAgICAgIGRvIG5vdCBkbyBhbnkgZHluYW1pYyBsaW5raW5nIG9mIHVuaW5zdGFsbGVkIGxpYnRvb2wgbGlicmFyaWVzCisgIC1zdGF0aWMtbGlidG9vbC1saWJzCisgICAgICAgICAgICAgICAgICAgIGRvIG5vdCBkbyBhbnkgZHluYW1pYyBsaW5raW5nIG9mIGxpYnRvb2wgbGlicmFyaWVzCisgIC12ZXJzaW9uLWluZm8gQ1VSUkVOVFs6UkVWSVNJT05bOkFHRV1dCisgICAgICAgICAgICAgICAgICAgIHNwZWNpZnkgbGlicmFyeSB2ZXJzaW9uIGluZm8gW2VhY2ggdmFyaWFibGUgZGVmYXVsdHMgdG8gMF0KKyAgLXdlYWsgTElCTkFNRSAgICAgZGVjbGFyZSB0aGF0IHRoZSB0YXJnZXQgcHJvdmlkZXMgdGhlIExJQk5BTUUgaW50ZXJmYWNlCisKK0FsbCBvdGhlciBvcHRpb25zIChhcmd1bWVudHMgYmVnaW5uaW5nIHdpdGggXGAtJykgYXJlIGlnbm9yZWQuCisKK0V2ZXJ5IG90aGVyIGFyZ3VtZW50IGlzIHRyZWF0ZWQgYXMgYSBmaWxlbmFtZS4gIEZpbGVzIGVuZGluZyBpbiBcYC5sYScgYXJlCit0cmVhdGVkIGFzIHVuaW5zdGFsbGVkIGxpYnRvb2wgbGlicmFyaWVzLCBvdGhlciBmaWxlcyBhcmUgc3RhbmRhcmQgb3IgbGlicmFyeQorb2JqZWN0IGZpbGVzLgorCitJZiB0aGUgT1VUUFVULUZJTEUgZW5kcyBpbiBcYC5sYScsIHRoZW4gYSBsaWJ0b29sIGxpYnJhcnkgaXMgY3JlYXRlZCwKK29ubHkgbGlicmFyeSBvYmplY3RzIChcYC5sbycgZmlsZXMpIG1heSBiZSBzcGVjaWZpZWQsIGFuZCBcYC1ycGF0aCcgaXMKK3JlcXVpcmVkLCBleGNlcHQgd2hlbiBjcmVhdGluZyBhIGNvbnZlbmllbmNlIGxpYnJhcnkuCisKK0lmIE9VVFBVVC1GSUxFIGVuZHMgaW4gXGAuYScgb3IgXGAubGliJywgdGhlbiBhIHN0YW5kYXJkIGxpYnJhcnkgaXMgY3JlYXRlZAordXNpbmcgXGBhcicgYW5kIFxgcmFubGliJywgb3Igb24gV2luZG93cyB1c2luZyBcYGxpYicuCisKK0lmIE9VVFBVVC1GSUxFIGVuZHMgaW4gXGAubG8nIG9yIFxgLiR7b2JqZXh0fScsIHRoZW4gYSByZWxvYWRhYmxlIG9iamVjdCBmaWxlCitpcyBjcmVhdGVkLCBvdGhlcndpc2UgYW4gZXhlY3V0YWJsZSBwcm9ncmFtIGlzIGNyZWF0ZWQuIgorICAgICAgICA7OworCisgICAgICB1bmluc3RhbGwpCisgICAgICAgICRFQ0hPIFwKKyJVc2FnZTogJHByb2duYW1lIFtPUFRJT05dLi4uIC0tbW9kZT11bmluc3RhbGwgUk0gW1JNLU9QVElPTl0uLi4gRklMRS4uLgorCitSZW1vdmUgbGlicmFyaWVzIGZyb20gYW4gaW5zdGFsbGF0aW9uIGRpcmVjdG9yeS4KKworUk0gaXMgdGhlIG5hbWUgb2YgdGhlIHByb2dyYW0gdG8gdXNlIHRvIGRlbGV0ZSBmaWxlcyBhc3NvY2lhdGVkIHdpdGggZWFjaCBGSUxFCisodHlwaWNhbGx5IFxgL2Jpbi9ybScpLiAgUk0tT1BUSU9OUyBhcmUgb3B0aW9ucyAoc3VjaCBhcyBcYC1mJykgdG8gYmUgcGFzc2VkCit0byBSTS4KKworSWYgRklMRSBpcyBhIGxpYnRvb2wgbGlicmFyeSwgYWxsIHRoZSBmaWxlcyBhc3NvY2lhdGVkIHdpdGggaXQgYXJlIGRlbGV0ZWQuCitPdGhlcndpc2UsIG9ubHkgRklMRSBpdHNlbGYgaXMgZGVsZXRlZCB1c2luZyBSTS4iCisgICAgICAgIDs7CisKKyAgICAgICopCisgICAgICAgIGZ1bmNfZmF0YWxfaGVscCAiaW52YWxpZCBvcGVyYXRpb24gbW9kZSBcYCRtb2RlJyIKKyAgICAgICAgOzsKKyAgICBlc2FjCisKKyAgICAkRUNITworICAgICRFQ0hPICJUcnkgXGAkcHJvZ25hbWUgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBvdGhlciBtb2Rlcy4iCisKKyAgICBleGl0ICQ/Cit9CisKKyAgIyBOb3cgdGhhdCB3ZSd2ZSBjb2xsZWN0ZWQgYSBwb3NzaWJsZSAtLW1vZGUgYXJnLCBzaG93IGhlbHAgaWYgbmVjZXNzYXJ5CisgICRvcHRfaGVscCAmJiBmdW5jX21vZGVfaGVscAorCisKKyMgZnVuY19tb2RlX2V4ZWN1dGUgYXJnLi4uCitmdW5jX21vZGVfZXhlY3V0ZSAoKQoreworICAgICRvcHRfZGVidWcKKyAgICAjIFRoZSBmaXJzdCBhcmd1bWVudCBpcyB0aGUgY29tbWFuZCBuYW1lLgorICAgIGNtZD0iJG5vbm9wdCIKKyAgICB0ZXN0IC16ICIkY21kIiAmJiBcCisgICAgICBmdW5jX2ZhdGFsX2hlbHAgInlvdSBtdXN0IHNwZWNpZnkgYSBDT01NQU5EIgorCisgICAgIyBIYW5kbGUgLWRsb3BlbiBmbGFncyBpbW1lZGlhdGVseS4KKyAgICBmb3IgZmlsZSBpbiAkZXhlY3V0ZV9kbGZpbGVzOyBkbworICAgICAgdGVzdCAtZiAiJGZpbGUiIFwKKwl8fCBmdW5jX2ZhdGFsX2hlbHAgIlxgJGZpbGUnIGlzIG5vdCBhIGZpbGUiCisKKyAgICAgIGRpcj0KKyAgICAgIGNhc2UgJGZpbGUgaW4KKyAgICAgICoubGEpCisJIyBDaGVjayB0byBzZWUgdGhhdCB0aGlzIHJlYWxseSBpcyBhIGxpYnRvb2wgYXJjaGl2ZS4KKwlmdW5jX2xhbGliX3Vuc2FmZV9wICIkZmlsZSIgXAorCSAgfHwgZnVuY19mYXRhbF9oZWxwICJcYCRsaWInIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIKKworCSMgUmVhZCB0aGUgbGlidG9vbCBsaWJyYXJ5LgorCWRsbmFtZT0KKwlsaWJyYXJ5X25hbWVzPQorCWZ1bmNfc291cmNlICIkZmlsZSIKKworCSMgU2tpcCB0aGlzIGxpYnJhcnkgaWYgaXQgY2Fubm90IGJlIGRsb3BlbmVkLgorCWlmIHRlc3QgLXogIiRkbG5hbWUiOyB0aGVuCisJICAjIFdhcm4gaWYgaXQgd2FzIGEgc2hhcmVkIGxpYnJhcnkuCisJICB0ZXN0IC1uICIkbGlicmFyeV9uYW1lcyIgJiYgXAorCSAgICBmdW5jX3dhcm5pbmcgIlxgJGZpbGUnIHdhcyBub3QgbGlua2VkIHdpdGggXGAtZXhwb3J0LWR5bmFtaWMnIgorCSAgY29udGludWUKKwlmaQorCisJZnVuY19kaXJuYW1lICIkZmlsZSIgIiIgIi4iCisJZGlyPSIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKKworCWlmIHRlc3QgLWYgIiRkaXIvJG9iamRpci8kZGxuYW1lIjsgdGhlbgorCSAgZGlyPSIkZGlyLyRvYmpkaXIiCisJZWxzZQorCSAgaWYgdGVzdCAhIC1mICIkZGlyLyRkbG5hbWUiOyB0aGVuCisJICAgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBmaW5kIFxgJGRsbmFtZScgaW4gXGAkZGlyJyBvciBcYCRkaXIvJG9iamRpciciCisJICBmaQorCWZpCisJOzsKKworICAgICAgKi5sbykKKwkjIEp1c3QgYWRkIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgLmxvIGZpbGUuCisJZnVuY19kaXJuYW1lICIkZmlsZSIgIiIgIi4iCisJZGlyPSIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKKwk7OworCisgICAgICAqKQorCWZ1bmNfd2FybmluZyAiXGAtZGxvcGVuJyBpcyBpZ25vcmVkIGZvciBub24tbGlidG9vbCBsaWJyYXJpZXMgYW5kIG9iamVjdHMiCisJY29udGludWUKKwk7OworICAgICAgZXNhYworCisgICAgICAjIEdldCB0aGUgYWJzb2x1dGUgcGF0aG5hbWUuCisgICAgICBhYnNkaXI9YGNkICIkZGlyIiAmJiBwd2RgCisgICAgICB0ZXN0IC1uICIkYWJzZGlyIiAmJiBkaXI9IiRhYnNkaXIiCisKKyAgICAgICMgTm93IGFkZCB0aGUgZGlyZWN0b3J5IHRvIHNobGlicGF0aF92YXIuCisgICAgICBpZiBldmFsICJ0ZXN0IC16IFwiXCQkc2hsaWJwYXRoX3ZhclwiIjsgdGhlbgorCWV2YWwgIiRzaGxpYnBhdGhfdmFyPVwiXCRkaXJcIiIKKyAgICAgIGVsc2UKKwlldmFsICIkc2hsaWJwYXRoX3Zhcj1cIlwkZGlyOlwkJHNobGlicGF0aF92YXJcIiIKKyAgICAgIGZpCisgICAgZG9uZQorCisgICAgIyBUaGlzIHZhcmlhYmxlIHRlbGxzIHdyYXBwZXIgc2NyaXB0cyBqdXN0IHRvIHNldCBzaGxpYnBhdGhfdmFyCisgICAgIyByYXRoZXIgdGhhbiBydW5uaW5nIHRoZWlyIHByb2dyYW1zLgorICAgIGxpYnRvb2xfZXhlY3V0ZV9tYWdpYz0iJG1hZ2ljIgorCisgICAgIyBDaGVjayBpZiBhbnkgb2YgdGhlIGFyZ3VtZW50cyBpcyBhIHdyYXBwZXIgc2NyaXB0LgorICAgIGFyZ3M9CisgICAgZm9yIGZpbGUKKyAgICBkbworICAgICAgY2FzZSAkZmlsZSBpbgorICAgICAgLSopIDs7CisgICAgICAqKQorCSMgRG8gYSB0ZXN0IHRvIHNlZSBpZiB0aGlzIGlzIHJlYWxseSBhIGxpYnRvb2wgcHJvZ3JhbS4KKwlpZiBmdW5jX2x0d3JhcHBlcl9zY3JpcHRfcCAiJGZpbGUiOyB0aGVuCisJICBmdW5jX3NvdXJjZSAiJGZpbGUiCisJICAjIFRyYW5zZm9ybSBhcmcgdG8gd3JhcHBlZCBuYW1lLgorCSAgZmlsZT0iJHByb2dkaXIvJHByb2dyYW0iCisJZWxpZiBmdW5jX2x0d3JhcHBlcl9leGVjdXRhYmxlX3AgIiRmaWxlIjsgdGhlbgorCSAgZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZSAiJGZpbGUiCisJICBmdW5jX3NvdXJjZSAiJGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWVfcmVzdWx0IgorCSAgIyBUcmFuc2Zvcm0gYXJnIHRvIHdyYXBwZWQgbmFtZS4KKwkgIGZpbGU9IiRwcm9nZGlyLyRwcm9ncmFtIgorCWZpCisJOzsKKyAgICAgIGVzYWMKKyAgICAgICMgUXVvdGUgYXJndW1lbnRzICh0byBwcmVzZXJ2ZSBzaGVsbCBtZXRhY2hhcmFjdGVycykuCisgICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkZmlsZSIKKyAgICAgIGFyZ3M9IiRhcmdzICRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKyAgICBkb25lCisKKyAgICBpZiB0ZXN0ICJYJG9wdF9kcnlfcnVuIiA9IFhmYWxzZTsgdGhlbgorICAgICAgaWYgdGVzdCAtbiAiJHNobGlicGF0aF92YXIiOyB0aGVuCisJIyBFeHBvcnQgdGhlIHNobGlicGF0aF92YXIuCisJZXZhbCAiZXhwb3J0ICRzaGxpYnBhdGhfdmFyIgorICAgICAgZmkKKworICAgICAgIyBSZXN0b3JlIHNhdmVkIGVudmlyb25tZW50IHZhcmlhYmxlcworICAgICAgZm9yIGx0X3ZhciBpbiBMQU5HIExBTkdVQUdFIExDX0FMTCBMQ19DVFlQRSBMQ19DT0xMQVRFIExDX01FU1NBR0VTCisgICAgICBkbworCWV2YWwgImlmIHRlc3QgXCJcJHtzYXZlXyRsdF92YXIrc2V0fVwiID0gc2V0OyB0aGVuCisgICAgICAgICAgICAgICAgJGx0X3Zhcj1cJHNhdmVfJGx0X3ZhcjsgZXhwb3J0ICRsdF92YXIKKwkgICAgICBlbHNlCisJCSRsdF91bnNldCAkbHRfdmFyCisJICAgICAgZmkiCisgICAgICBkb25lCisKKyAgICAgICMgTm93IHByZXBhcmUgdG8gYWN0dWFsbHkgZXhlYyB0aGUgY29tbWFuZC4KKyAgICAgIGV4ZWNfY21kPSJcJGNtZCRhcmdzIgorICAgIGVsc2UKKyAgICAgICMgRGlzcGxheSB3aGF0IHdvdWxkIGJlIGRvbmUuCisgICAgICBpZiB0ZXN0IC1uICIkc2hsaWJwYXRoX3ZhciI7IHRoZW4KKwlldmFsICJcJEVDSE8gXCJcJHNobGlicGF0aF92YXI9XCQkc2hsaWJwYXRoX3ZhclwiIgorCSRFQ0hPICJleHBvcnQgJHNobGlicGF0aF92YXIiCisgICAgICBmaQorICAgICAgJEVDSE8gIiRjbWQkYXJncyIKKyAgICAgIGV4aXQgJEVYSVRfU1VDQ0VTUworICAgIGZpCit9CisKK3Rlc3QgIiRtb2RlIiA9IGV4ZWN1dGUgJiYgZnVuY19tb2RlX2V4ZWN1dGUgJHsxKyIkQCJ9CisKKworIyBmdW5jX21vZGVfZmluaXNoIGFyZy4uLgorZnVuY19tb2RlX2ZpbmlzaCAoKQoreworICAgICRvcHRfZGVidWcKKyAgICBsaWJkaXJzPSIkbm9ub3B0IgorICAgIGFkbWluY21kcz0KKworICAgIGlmIHRlc3QgLW4gIiRmaW5pc2hfY21kcyRmaW5pc2hfZXZhbCIgJiYgdGVzdCAtbiAiJGxpYmRpcnMiOyB0aGVuCisgICAgICBmb3IgZGlyCisgICAgICBkbworCWxpYmRpcnM9IiRsaWJkaXJzICRkaXIiCisgICAgICBkb25lCisKKyAgICAgIGZvciBsaWJkaXIgaW4gJGxpYmRpcnM7IGRvCisJaWYgdGVzdCAtbiAiJGZpbmlzaF9jbWRzIjsgdGhlbgorCSAgIyBEbyBlYWNoIGNvbW1hbmQgaW4gdGhlIGZpbmlzaCBjb21tYW5kcy4KKwkgIGZ1bmNfZXhlY3V0ZV9jbWRzICIkZmluaXNoX2NtZHMiICdhZG1pbmNtZHM9IiRhZG1pbmNtZHMKKyciJGNtZCInIicKKwlmaQorCWlmIHRlc3QgLW4gIiRmaW5pc2hfZXZhbCI7IHRoZW4KKwkgICMgRG8gdGhlIHNpbmdsZSBmaW5pc2hfZXZhbC4KKwkgIGV2YWwgY21kcz1cIiRmaW5pc2hfZXZhbFwiCisJICAkb3B0X2RyeV9ydW4gfHwgZXZhbCAiJGNtZHMiIHx8IGFkbWluY21kcz0iJGFkbWluY21kcworICAgICAgICRjbWRzIgorCWZpCisgICAgICBkb25lCisgICAgZmkKKworICAgICMgRXhpdCBoZXJlIGlmIHRoZXkgd2FudGVkIHNpbGVudCBtb2RlLgorICAgICRvcHRfc2lsZW50ICYmIGV4aXQgJEVYSVRfU1VDQ0VTUworCisgICAgJEVDSE8gIlgtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiB8ICRYc2VkCisgICAgJEVDSE8gIkxpYnJhcmllcyBoYXZlIGJlZW4gaW5zdGFsbGVkIGluOiIKKyAgICBmb3IgbGliZGlyIGluICRsaWJkaXJzOyBkbworICAgICAgJEVDSE8gIiAgICRsaWJkaXIiCisgICAgZG9uZQorICAgICRFQ0hPCisgICAgJEVDSE8gIklmIHlvdSBldmVyIGhhcHBlbiB0byB3YW50IHRvIGxpbmsgYWdhaW5zdCBpbnN0YWxsZWQgbGlicmFyaWVzIgorICAgICRFQ0hPICJpbiBhIGdpdmVuIGRpcmVjdG9yeSwgTElCRElSLCB5b3UgbXVzdCBlaXRoZXIgdXNlIGxpYnRvb2wsIGFuZCIKKyAgICAkRUNITyAic3BlY2lmeSB0aGUgZnVsbCBwYXRobmFtZSBvZiB0aGUgbGlicmFyeSwgb3IgdXNlIHRoZSBcYC1MTElCRElSJyIKKyAgICAkRUNITyAiZmxhZyBkdXJpbmcgbGlua2luZyBhbmQgZG8gYXQgbGVhc3Qgb25lIG9mIHRoZSBmb2xsb3dpbmc6IgorICAgIGlmIHRlc3QgLW4gIiRzaGxpYnBhdGhfdmFyIjsgdGhlbgorICAgICAgJEVDSE8gIiAgIC0gYWRkIExJQkRJUiB0byB0aGUgXGAkc2hsaWJwYXRoX3ZhcicgZW52aXJvbm1lbnQgdmFyaWFibGUiCisgICAgICAkRUNITyAiICAgICBkdXJpbmcgZXhlY3V0aW9uIgorICAgIGZpCisgICAgaWYgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyIjsgdGhlbgorICAgICAgJEVDSE8gIiAgIC0gYWRkIExJQkRJUiB0byB0aGUgXGAkcnVucGF0aF92YXInIGVudmlyb25tZW50IHZhcmlhYmxlIgorICAgICAgJEVDSE8gIiAgICAgZHVyaW5nIGxpbmtpbmciCisgICAgZmkKKyAgICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyI7IHRoZW4KKyAgICAgIGxpYmRpcj1MSUJESVIKKyAgICAgIGV2YWwgZmxhZz1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKworICAgICAgJEVDSE8gIiAgIC0gdXNlIHRoZSBcYCRmbGFnJyBsaW5rZXIgZmxhZyIKKyAgICBmaQorICAgIGlmIHRlc3QgLW4gIiRhZG1pbmNtZHMiOyB0aGVuCisgICAgICAkRUNITyAiICAgLSBoYXZlIHlvdXIgc3lzdGVtIGFkbWluaXN0cmF0b3IgcnVuIHRoZXNlIGNvbW1hbmRzOiRhZG1pbmNtZHMiCisgICAgZmkKKyAgICBpZiB0ZXN0IC1mIC9ldGMvbGQuc28uY29uZjsgdGhlbgorICAgICAgJEVDSE8gIiAgIC0gaGF2ZSB5b3VyIHN5c3RlbSBhZG1pbmlzdHJhdG9yIGFkZCBMSUJESVIgdG8gXGAvZXRjL2xkLnNvLmNvbmYnIgorICAgIGZpCisgICAgJEVDSE8KKworICAgICRFQ0hPICJTZWUgYW55IG9wZXJhdGluZyBzeXN0ZW0gZG9jdW1lbnRhdGlvbiBhYm91dCBzaGFyZWQgbGlicmFyaWVzIGZvciIKKyAgICBjYXNlICRob3N0IGluCisgICAgICBzb2xhcmlzMi5bNjc4OV18c29sYXJpczIuMVswLTldKQorICAgICAgICAkRUNITyAibW9yZSBpbmZvcm1hdGlvbiwgc3VjaCBhcyB0aGUgbGQoMSksIGNybGUoMSkgYW5kIGxkLnNvKDgpIG1hbnVhbCIKKwkkRUNITyAicGFnZXMuIgorCTs7CisgICAgICAqKQorICAgICAgICAkRUNITyAibW9yZSBpbmZvcm1hdGlvbiwgc3VjaCBhcyB0aGUgbGQoMSkgYW5kIGxkLnNvKDgpIG1hbnVhbCBwYWdlcy4iCisgICAgICAgIDs7CisgICAgZXNhYworICAgICRFQ0hPICJYLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgfCAkWHNlZAorICAgIGV4aXQgJEVYSVRfU1VDQ0VTUworfQorCit0ZXN0ICIkbW9kZSIgPSBmaW5pc2ggJiYgZnVuY19tb2RlX2ZpbmlzaCAkezErIiRAIn0KKworCisjIGZ1bmNfbW9kZV9pbnN0YWxsIGFyZy4uLgorZnVuY19tb2RlX2luc3RhbGwgKCkKK3sKKyAgICAkb3B0X2RlYnVnCisgICAgIyBUaGVyZSBtYXkgYmUgYW4gb3B0aW9uYWwgc2goMSkgYXJndW1lbnQgYXQgdGhlIGJlZ2lubmluZyBvZgorICAgICMgaW5zdGFsbF9wcm9nIChlc3BlY2lhbGx5IG9uIFdpbmRvd3MgTlQpLgorICAgIGlmIHRlc3QgIiRub25vcHQiID0gIiRTSEVMTCIgfHwgdGVzdCAiJG5vbm9wdCIgPSAvYmluL3NoIHx8CisgICAgICAgIyBBbGxvdyB0aGUgdXNlIG9mIEdOVSBzaHRvb2wncyBpbnN0YWxsIGNvbW1hbmQuCisgICAgICAgJEVDSE8gIlgkbm9ub3B0IiB8ICRHUkVQIHNodG9vbCA+L2Rldi9udWxsOyB0aGVuCisgICAgICAjIEFlc3RoZXRpY2FsbHkgcXVvdGUgaXQuCisgICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkbm9ub3B0IgorICAgICAgaW5zdGFsbF9wcm9nPSIkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQgIgorICAgICAgYXJnPSQxCisgICAgICBzaGlmdAorICAgIGVsc2UKKyAgICAgIGluc3RhbGxfcHJvZz0KKyAgICAgIGFyZz0kbm9ub3B0CisgICAgZmkKKworICAgICMgVGhlIHJlYWwgZmlyc3QgYXJndW1lbnQgc2hvdWxkIGJlIHRoZSBuYW1lIG9mIHRoZSBpbnN0YWxsYXRpb24gcHJvZ3JhbS4KKyAgICAjIEFlc3RoZXRpY2FsbHkgcXVvdGUgaXQuCisgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJGFyZyIKKyAgICBpbnN0YWxsX3Byb2c9IiRpbnN0YWxsX3Byb2ckZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisKKyAgICAjIFdlIG5lZWQgdG8gYWNjZXB0IGF0IGxlYXN0IGFsbCB0aGUgQlNEIGluc3RhbGwgZmxhZ3MuCisgICAgZGVzdD0KKyAgICBmaWxlcz0KKyAgICBvcHRzPQorICAgIHByZXY9CisgICAgaW5zdGFsbF90eXBlPQorICAgIGlzZGlyPW5vCisgICAgc3RyaXBtZT0KKyAgICBmb3IgYXJnCisgICAgZG8KKyAgICAgIGlmIHRlc3QgLW4gIiRkZXN0IjsgdGhlbgorCWZpbGVzPSIkZmlsZXMgJGRlc3QiCisJZGVzdD0kYXJnCisJY29udGludWUKKyAgICAgIGZpCisKKyAgICAgIGNhc2UgJGFyZyBpbgorICAgICAgLWQpIGlzZGlyPXllcyA7OworICAgICAgLWYpCisJY2FzZSAiICRpbnN0YWxsX3Byb2cgIiBpbgorCSpbXFxcIC9dY3BcICopIDs7CisJKikgcHJldj0kYXJnIDs7CisJZXNhYworCTs7CisgICAgICAtZyB8IC1tIHwgLW8pCisJcHJldj0kYXJnCisJOzsKKyAgICAgIC1zKQorCXN0cmlwbWU9IiAtcyIKKwljb250aW51ZQorCTs7CisgICAgICAtKikKKwk7OworICAgICAgKikKKwkjIElmIHRoZSBwcmV2aW91cyBvcHRpb24gbmVlZGVkIGFuIGFyZ3VtZW50LCB0aGVuIHNraXAgaXQuCisJaWYgdGVzdCAtbiAiJHByZXYiOyB0aGVuCisJICBwcmV2PQorCWVsc2UKKwkgIGRlc3Q9JGFyZworCSAgY29udGludWUKKwlmaQorCTs7CisgICAgICBlc2FjCisKKyAgICAgICMgQWVzdGhldGljYWxseSBxdW90ZSB0aGUgYXJndW1lbnQuCisgICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkYXJnIgorICAgICAgaW5zdGFsbF9wcm9nPSIkaW5zdGFsbF9wcm9nICRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKyAgICBkb25lCisKKyAgICB0ZXN0IC16ICIkaW5zdGFsbF9wcm9nIiAmJiBcCisgICAgICBmdW5jX2ZhdGFsX2hlbHAgInlvdSBtdXN0IHNwZWNpZnkgYW4gaW5zdGFsbCBwcm9ncmFtIgorCisgICAgdGVzdCAtbiAiJHByZXYiICYmIFwKKyAgICAgIGZ1bmNfZmF0YWxfaGVscCAidGhlIFxgJHByZXYnIG9wdGlvbiByZXF1aXJlcyBhbiBhcmd1bWVudCIKKworICAgIGlmIHRlc3QgLXogIiRmaWxlcyI7IHRoZW4KKyAgICAgIGlmIHRlc3QgLXogIiRkZXN0IjsgdGhlbgorCWZ1bmNfZmF0YWxfaGVscCAibm8gZmlsZSBvciBkZXN0aW5hdGlvbiBzcGVjaWZpZWQiCisgICAgICBlbHNlCisJZnVuY19mYXRhbF9oZWxwICJ5b3UgbXVzdCBzcGVjaWZ5IGEgZGVzdGluYXRpb24iCisgICAgICBmaQorICAgIGZpCisKKyAgICAjIFN0cmlwIGFueSB0cmFpbGluZyBzbGFzaCBmcm9tIHRoZSBkZXN0aW5hdGlvbi4KKyAgICBmdW5jX3N0cmlwbmFtZSAnJyAnLycgIiRkZXN0IgorICAgIGRlc3Q9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCisgICAgIyBDaGVjayB0byBzZWUgdGhhdCB0aGUgZGVzdGluYXRpb24gaXMgYSBkaXJlY3RvcnkuCisgICAgdGVzdCAtZCAiJGRlc3QiICYmIGlzZGlyPXllcworICAgIGlmIHRlc3QgIiRpc2RpciIgPSB5ZXM7IHRoZW4KKyAgICAgIGRlc3RkaXI9IiRkZXN0IgorICAgICAgZGVzdG5hbWU9CisgICAgZWxzZQorICAgICAgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAiJGRlc3QiICIiICIuIgorICAgICAgZGVzdGRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQiCisgICAgICBkZXN0bmFtZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorCisgICAgICAjIE5vdCBhIGRpcmVjdG9yeSwgc28gY2hlY2sgdG8gc2VlIHRoYXQgdGhlcmUgaXMgb25seSBvbmUgZmlsZSBzcGVjaWZpZWQuCisgICAgICBzZXQgZHVtbXkgJGZpbGVzOyBzaGlmdAorICAgICAgdGVzdCAiJCMiIC1ndCAxICYmIFwKKwlmdW5jX2ZhdGFsX2hlbHAgIlxgJGRlc3QnIGlzIG5vdCBhIGRpcmVjdG9yeSIKKyAgICBmaQorICAgIGNhc2UgJGRlc3RkaXIgaW4KKyAgICBbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIDs7CisgICAgKikKKyAgICAgIGZvciBmaWxlIGluICRmaWxlczsgZG8KKwljYXNlICRmaWxlIGluCisJKi5sbykgOzsKKwkqKQorCSAgZnVuY19mYXRhbF9oZWxwICJcYCRkZXN0ZGlyJyBtdXN0IGJlIGFuIGFic29sdXRlIGRpcmVjdG9yeSBuYW1lIgorCSAgOzsKKwllc2FjCisgICAgICBkb25lCisgICAgICA7OworICAgIGVzYWMKKworICAgICMgVGhpcyB2YXJpYWJsZSB0ZWxscyB3cmFwcGVyIHNjcmlwdHMganVzdCB0byBzZXQgdmFyaWFibGVzIHJhdGhlcgorICAgICMgdGhhbiBydW5uaW5nIHRoZWlyIHByb2dyYW1zLgorICAgIGxpYnRvb2xfaW5zdGFsbF9tYWdpYz0iJG1hZ2ljIgorCisgICAgc3RhdGljbGlicz0KKyAgICBmdXR1cmVfbGliZGlycz0KKyAgICBjdXJyZW50X2xpYmRpcnM9CisgICAgZm9yIGZpbGUgaW4gJGZpbGVzOyBkbworCisgICAgICAjIERvIGVhY2ggaW5zdGFsbGF0aW9uLgorICAgICAgY2FzZSAkZmlsZSBpbgorICAgICAgKi4kbGliZXh0KQorCSMgRG8gdGhlIHN0YXRpYyBsaWJyYXJpZXMgbGF0ZXIuCisJc3RhdGljbGlicz0iJHN0YXRpY2xpYnMgJGZpbGUiCisJOzsKKworICAgICAgKi5sYSkKKwkjIENoZWNrIHRvIHNlZSB0aGF0IHRoaXMgcmVhbGx5IGlzIGEgbGlidG9vbCBhcmNoaXZlLgorCWZ1bmNfbGFsaWJfdW5zYWZlX3AgIiRmaWxlIiBcCisJICB8fCBmdW5jX2ZhdGFsX2hlbHAgIlxgJGZpbGUnIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIKKworCWxpYnJhcnlfbmFtZXM9CisJb2xkX2xpYnJhcnk9CisJcmVsaW5rX2NvbW1hbmQ9CisJZnVuY19zb3VyY2UgIiRmaWxlIgorCisJIyBBZGQgdGhlIGxpYmRpciB0byBjdXJyZW50X2xpYmRpcnMgaWYgaXQgaXMgdGhlIGRlc3RpbmF0aW9uLgorCWlmIHRlc3QgIlgkZGVzdGRpciIgPSAiWCRsaWJkaXIiOyB0aGVuCisJICBjYXNlICIkY3VycmVudF9saWJkaXJzICIgaW4KKwkgICoiICRsaWJkaXIgIiopIDs7CisJICAqKSBjdXJyZW50X2xpYmRpcnM9IiRjdXJyZW50X2xpYmRpcnMgJGxpYmRpciIgOzsKKwkgIGVzYWMKKwllbHNlCisJICAjIE5vdGUgdGhlIGxpYmRpciBhcyBhIGZ1dHVyZSBsaWJkaXIuCisJICBjYXNlICIkZnV0dXJlX2xpYmRpcnMgIiBpbgorCSAgKiIgJGxpYmRpciAiKikgOzsKKwkgICopIGZ1dHVyZV9saWJkaXJzPSIkZnV0dXJlX2xpYmRpcnMgJGxpYmRpciIgOzsKKwkgIGVzYWMKKwlmaQorCisJZnVuY19kaXJuYW1lICIkZmlsZSIgIi8iICIiCisJZGlyPSIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKKwlkaXI9IiRkaXIkb2JqZGlyIgorCisJaWYgdGVzdCAtbiAiJHJlbGlua19jb21tYW5kIjsgdGhlbgorCSAgIyBEZXRlcm1pbmUgdGhlIHByZWZpeCB0aGUgdXNlciBoYXMgYXBwbGllZCB0byBvdXIgZnV0dXJlIGRpci4KKwkgIGluc3RfcHJlZml4X2Rpcj1gJEVDSE8gIlgkZGVzdGRpciIgfCAkWHNlZCAtZSAicyUkbGliZGlyXCQlJSJgCisKKwkgICMgRG9uJ3QgYWxsb3cgdGhlIHVzZXIgdG8gcGxhY2UgdXMgb3V0c2lkZSBvZiBvdXIgZXhwZWN0ZWQKKwkgICMgbG9jYXRpb24gYi9jIHRoaXMgcHJldmVudHMgZmluZGluZyBkZXBlbmRlbnQgbGlicmFyaWVzIHRoYXQKKwkgICMgYXJlIGluc3RhbGxlZCB0byB0aGUgc2FtZSBwcmVmaXguCisJICAjIEF0IHByZXNlbnQsIHRoaXMgY2hlY2sgZG9lc24ndCBhZmZlY3Qgd2luZG93cyAuZGxsJ3MgdGhhdAorCSAgIyBhcmUgaW5zdGFsbGVkIGludG8gJGxpYmRpci8uLi9iaW4gKGN1cnJlbnRseSwgdGhhdCB3b3JrcyBmaW5lKQorCSAgIyBidXQgaXQncyBzb21ldGhpbmcgdG8ga2VlcCBhbiBleWUgb24uCisJICB0ZXN0ICIkaW5zdF9wcmVmaXhfZGlyIiA9ICIkZGVzdGRpciIgJiYgXAorCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJlcnJvcjogY2Fubm90IGluc3RhbGwgXGAkZmlsZScgdG8gYSBkaXJlY3Rvcnkgbm90IGVuZGluZyBpbiAkbGliZGlyIgorCisJICBpZiB0ZXN0IC1uICIkaW5zdF9wcmVmaXhfZGlyIjsgdGhlbgorCSAgICAjIFN0aWNrIHRoZSBpbnN0X3ByZWZpeF9kaXIgZGF0YSBpbnRvIHRoZSBsaW5rIGNvbW1hbmQuCisJICAgIHJlbGlua19jb21tYW5kPWAkRUNITyAiWCRyZWxpbmtfY29tbWFuZCIgfCAkWHNlZCAtZSAicyVAaW5zdF9wcmVmaXhfZGlyQCUtaW5zdC1wcmVmaXgtZGlyICRpbnN0X3ByZWZpeF9kaXIlImAKKwkgIGVsc2UKKwkgICAgcmVsaW5rX2NvbW1hbmQ9YCRFQ0hPICJYJHJlbGlua19jb21tYW5kIiB8ICRYc2VkIC1lICJzJUBpbnN0X3ByZWZpeF9kaXJAJSUiYAorCSAgZmkKKworCSAgZnVuY193YXJuaW5nICJyZWxpbmtpbmcgXGAkZmlsZSciCisJICBmdW5jX3Nob3dfZXZhbCAiJHJlbGlua19jb21tYW5kIiBcCisJICAgICdmdW5jX2ZhdGFsX2Vycm9yICJlcnJvcjogcmVsaW5rIFxgJGZpbGUnXCcnIHdpdGggdGhlIGFib3ZlIGNvbW1hbmQgYmVmb3JlIGluc3RhbGxpbmcgaXQiJworCWZpCisKKwkjIFNlZSB0aGUgbmFtZXMgb2YgdGhlIHNoYXJlZCBsaWJyYXJ5LgorCXNldCBkdW1teSAkbGlicmFyeV9uYW1lczsgc2hpZnQKKwlpZiB0ZXN0IC1uICIkMSI7IHRoZW4KKwkgIHJlYWxuYW1lPSIkMSIKKwkgIHNoaWZ0CisKKwkgIHNyY25hbWU9IiRyZWFsbmFtZSIKKwkgIHRlc3QgLW4gIiRyZWxpbmtfY29tbWFuZCIgJiYgc3JjbmFtZT0iJHJlYWxuYW1lIlQKKworCSAgIyBJbnN0YWxsIHRoZSBzaGFyZWQgbGlicmFyeSBhbmQgYnVpbGQgdGhlIHN5bWxpbmtzLgorCSAgZnVuY19zaG93X2V2YWwgIiRpbnN0YWxsX3Byb2cgJGRpci8kc3JjbmFtZSAkZGVzdGRpci8kcmVhbG5hbWUiIFwKKwkgICAgICAnZXhpdCAkPycKKwkgIHRzdHJpcG1lPSIkc3RyaXBtZSIKKwkgIGNhc2UgJGhvc3Rfb3MgaW4KKwkgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKwkgICAgY2FzZSAkcmVhbG5hbWUgaW4KKwkgICAgKi5kbGwuYSkKKwkgICAgICB0c3RyaXBtZT0iIgorCSAgICAgIDs7CisJICAgIGVzYWMKKwkgICAgOzsKKwkgIGVzYWMKKwkgIGlmIHRlc3QgLW4gIiR0c3RyaXBtZSIgJiYgdGVzdCAtbiAiJHN0cmlwbGliIjsgdGhlbgorCSAgICBmdW5jX3Nob3dfZXZhbCAiJHN0cmlwbGliICRkZXN0ZGlyLyRyZWFsbmFtZSIgJ2V4aXQgJD8nCisJICBmaQorCisJICBpZiB0ZXN0ICIkIyIgLWd0IDA7IHRoZW4KKwkgICAgIyBEZWxldGUgdGhlIG9sZCBzeW1saW5rcywgYW5kIGNyZWF0ZSBuZXcgb25lcy4KKwkgICAgIyBUcnkgYGxuIC1zZicgZmlyc3QsIGJlY2F1c2UgdGhlIGBsbicgYmluYXJ5IG1pZ2h0IGRlcGVuZCBvbgorCSAgICAjIHRoZSBzeW1saW5rIHdlIHJlcGxhY2UhICBTb2xhcmlzIC9iaW4vbG4gZG9lcyBub3QgdW5kZXJzdGFuZCAtZiwKKwkgICAgIyBzbyB3ZSBhbHNvIG5lZWQgdG8gdHJ5IHJtICYmIGxuIC1zLgorCSAgICBmb3IgbGlua25hbWUKKwkgICAgZG8KKwkgICAgICB0ZXN0ICIkbGlua25hbWUiICE9ICIkcmVhbG5hbWUiIFwKKwkJJiYgZnVuY19zaG93X2V2YWwgIihjZCAkZGVzdGRpciAmJiB7ICRMTl9TIC1mICRyZWFsbmFtZSAkbGlua25hbWUgfHwgeyAkUk0gJGxpbmtuYW1lICYmICRMTl9TICRyZWFsbmFtZSAkbGlua25hbWU7IH07IH0pIgorCSAgICBkb25lCisJICBmaQorCisJICAjIERvIGVhY2ggY29tbWFuZCBpbiB0aGUgcG9zdGluc3RhbGwgY29tbWFuZHMuCisJICBsaWI9IiRkZXN0ZGlyLyRyZWFsbmFtZSIKKwkgIGZ1bmNfZXhlY3V0ZV9jbWRzICIkcG9zdGluc3RhbGxfY21kcyIgJ2V4aXQgJD8nCisJZmkKKworCSMgSW5zdGFsbCB0aGUgcHNldWRvLWxpYnJhcnkgZm9yIGluZm9ybWF0aW9uIHB1cnBvc2VzLgorCWZ1bmNfYmFzZW5hbWUgIiRmaWxlIgorCW5hbWU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKwlpbnN0bmFtZT0iJGRpci8kbmFtZSJpCisJZnVuY19zaG93X2V2YWwgIiRpbnN0YWxsX3Byb2cgJGluc3RuYW1lICRkZXN0ZGlyLyRuYW1lIiAnZXhpdCAkPycKKworCSMgTWF5YmUgaW5zdGFsbCB0aGUgc3RhdGljIGxpYnJhcnksIHRvby4KKwl0ZXN0IC1uICIkb2xkX2xpYnJhcnkiICYmIHN0YXRpY2xpYnM9IiRzdGF0aWNsaWJzICRkaXIvJG9sZF9saWJyYXJ5IgorCTs7CisKKyAgICAgICoubG8pCisJIyBJbnN0YWxsIChpLmUuIGNvcHkpIGEgbGlidG9vbCBvYmplY3QuCisKKwkjIEZpZ3VyZSBvdXQgZGVzdGluYXRpb24gZmlsZSBuYW1lLCBpZiBpdCB3YXNuJ3QgYWxyZWFkeSBzcGVjaWZpZWQuCisJaWYgdGVzdCAtbiAiJGRlc3RuYW1lIjsgdGhlbgorCSAgZGVzdGZpbGU9IiRkZXN0ZGlyLyRkZXN0bmFtZSIKKwllbHNlCisJICBmdW5jX2Jhc2VuYW1lICIkZmlsZSIKKwkgIGRlc3RmaWxlPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisJICBkZXN0ZmlsZT0iJGRlc3RkaXIvJGRlc3RmaWxlIgorCWZpCisKKwkjIERlZHVjZSB0aGUgbmFtZSBvZiB0aGUgZGVzdGluYXRpb24gb2xkLXN0eWxlIG9iamVjdCBmaWxlLgorCWNhc2UgJGRlc3RmaWxlIGluCisJKi5sbykKKwkgIGZ1bmNfbG8ybyAiJGRlc3RmaWxlIgorCSAgc3RhdGljZGVzdD0kZnVuY19sbzJvX3Jlc3VsdAorCSAgOzsKKwkqLiRvYmpleHQpCisJICBzdGF0aWNkZXN0PSIkZGVzdGZpbGUiCisJICBkZXN0ZmlsZT0KKwkgIDs7CisJKikKKwkgIGZ1bmNfZmF0YWxfaGVscCAiY2Fubm90IGNvcHkgYSBsaWJ0b29sIG9iamVjdCB0byBcYCRkZXN0ZmlsZSciCisJICA7OworCWVzYWMKKworCSMgSW5zdGFsbCB0aGUgbGlidG9vbCBvYmplY3QgaWYgcmVxdWVzdGVkLgorCXRlc3QgLW4gIiRkZXN0ZmlsZSIgJiYgXAorCSAgZnVuY19zaG93X2V2YWwgIiRpbnN0YWxsX3Byb2cgJGZpbGUgJGRlc3RmaWxlIiAnZXhpdCAkPycKKworCSMgSW5zdGFsbCB0aGUgb2xkIG9iamVjdCBpZiBlbmFibGVkLgorCWlmIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSB5ZXM7IHRoZW4KKwkgICMgRGVkdWNlIHRoZSBuYW1lIG9mIHRoZSBvbGQtc3R5bGUgb2JqZWN0IGZpbGUuCisJICBmdW5jX2xvMm8gIiRmaWxlIgorCSAgc3RhdGljb2JqPSRmdW5jX2xvMm9fcmVzdWx0CisJICBmdW5jX3Nob3dfZXZhbCAiJGluc3RhbGxfcHJvZyBcJHN0YXRpY29iaiBcJHN0YXRpY2Rlc3QiICdleGl0ICQ/JworCWZpCisJZXhpdCAkRVhJVF9TVUNDRVNTCisJOzsKKworICAgICAgKikKKwkjIEZpZ3VyZSBvdXQgZGVzdGluYXRpb24gZmlsZSBuYW1lLCBpZiBpdCB3YXNuJ3QgYWxyZWFkeSBzcGVjaWZpZWQuCisJaWYgdGVzdCAtbiAiJGRlc3RuYW1lIjsgdGhlbgorCSAgZGVzdGZpbGU9IiRkZXN0ZGlyLyRkZXN0bmFtZSIKKwllbHNlCisJICBmdW5jX2Jhc2VuYW1lICIkZmlsZSIKKwkgIGRlc3RmaWxlPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisJICBkZXN0ZmlsZT0iJGRlc3RkaXIvJGRlc3RmaWxlIgorCWZpCisKKwkjIElmIHRoZSBmaWxlIGlzIG1pc3NpbmcsIGFuZCB0aGVyZSBpcyBhIC5leGUgb24gdGhlIGVuZCwgc3RyaXAgaXQKKwkjIGJlY2F1c2UgaXQgaXMgbW9zdCBsaWtlbHkgYSBsaWJ0b29sIHNjcmlwdCB3ZSBhY3R1YWxseSB3YW50IHRvCisJIyBpbnN0YWxsCisJc3RyaXBwZWRfZXh0PSIiCisJY2FzZSAkZmlsZSBpbgorCSAgKi5leGUpCisJICAgIGlmIHRlc3QgISAtZiAiJGZpbGUiOyB0aGVuCisJICAgICAgZnVuY19zdHJpcG5hbWUgJycgJy5leGUnICIkZmlsZSIKKwkgICAgICBmaWxlPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwkgICAgICBzdHJpcHBlZF9leHQ9Ii5leGUiCisJICAgIGZpCisJICAgIDs7CisJZXNhYworCisJIyBEbyBhIHRlc3QgdG8gc2VlIGlmIHRoaXMgaXMgcmVhbGx5IGEgbGlidG9vbCBwcm9ncmFtLgorCWNhc2UgJGhvc3QgaW4KKwkqY3lnd2luKiB8ICptaW5ndyopCisJICAgIGlmIGZ1bmNfbHR3cmFwcGVyX2V4ZWN1dGFibGVfcCAiJGZpbGUiOyB0aGVuCisJICAgICAgZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZSAiJGZpbGUiCisJICAgICAgd3JhcHBlcj0kZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZV9yZXN1bHQKKwkgICAgZWxzZQorCSAgICAgIGZ1bmNfc3RyaXBuYW1lICcnICcuZXhlJyAiJGZpbGUiCisJICAgICAgd3JhcHBlcj0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJICAgIGZpCisJICAgIDs7CisJKikKKwkgICAgd3JhcHBlcj0kZmlsZQorCSAgICA7OworCWVzYWMKKwlpZiBmdW5jX2x0d3JhcHBlcl9zY3JpcHRfcCAiJHdyYXBwZXIiOyB0aGVuCisJICBub3RpbnN0X2RlcGxpYnM9CisJICByZWxpbmtfY29tbWFuZD0KKworCSAgZnVuY19zb3VyY2UgIiR3cmFwcGVyIgorCisJICAjIENoZWNrIHRoZSB2YXJpYWJsZXMgdGhhdCBzaG91bGQgaGF2ZSBiZWVuIHNldC4KKwkgIHRlc3QgLXogIiRnZW5lcmF0ZWRfYnlfbGlidG9vbF92ZXJzaW9uIiAmJiBcCisJICAgIGZ1bmNfZmF0YWxfZXJyb3IgImludmFsaWQgbGlidG9vbCB3cmFwcGVyIHNjcmlwdCBcYCR3cmFwcGVyJyIKKworCSAgZmluYWxpemU9eWVzCisJICBmb3IgbGliIGluICRub3RpbnN0X2RlcGxpYnM7IGRvCisJICAgICMgQ2hlY2sgdG8gc2VlIHRoYXQgZWFjaCBsaWJyYXJ5IGlzIGluc3RhbGxlZC4KKwkgICAgbGliZGlyPQorCSAgICBpZiB0ZXN0IC1mICIkbGliIjsgdGhlbgorCSAgICAgIGZ1bmNfc291cmNlICIkbGliIgorCSAgICBmaQorCSAgICBsaWJmaWxlPSIkbGliZGlyLyJgJEVDSE8gIlgkbGliIiB8ICRYc2VkIC1lICdzJV4uKi8lJWcnYCAjIyMgdGVzdHN1aXRlOiBza2lwIG5lc3RlZCBxdW90aW5nIHRlc3QKKwkgICAgaWYgdGVzdCAtbiAiJGxpYmRpciIgJiYgdGVzdCAhIC1mICIkbGliZmlsZSI7IHRoZW4KKwkgICAgICBmdW5jX3dhcm5pbmcgIlxgJGxpYicgaGFzIG5vdCBiZWVuIGluc3RhbGxlZCBpbiBcYCRsaWJkaXInIgorCSAgICAgIGZpbmFsaXplPW5vCisJICAgIGZpCisJICBkb25lCisKKwkgIHJlbGlua19jb21tYW5kPQorCSAgZnVuY19zb3VyY2UgIiR3cmFwcGVyIgorCisJICBvdXRwdXRuYW1lPQorCSAgaWYgdGVzdCAiJGZhc3RfaW5zdGFsbCIgPSBubyAmJiB0ZXN0IC1uICIkcmVsaW5rX2NvbW1hbmQiOyB0aGVuCisJICAgICRvcHRfZHJ5X3J1biB8fCB7CisJICAgICAgaWYgdGVzdCAiJGZpbmFsaXplIiA9IHllczsgdGhlbgorCSAgICAgICAgdG1wZGlyPWBmdW5jX21rdGVtcGRpcmAKKwkJZnVuY19iYXNlbmFtZSAiJGZpbGUkc3RyaXBwZWRfZXh0IgorCQlmaWxlPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisJICAgICAgICBvdXRwdXRuYW1lPSIkdG1wZGlyLyRmaWxlIgorCSAgICAgICAgIyBSZXBsYWNlIHRoZSBvdXRwdXQgZmlsZSBzcGVjaWZpY2F0aW9uLgorCSAgICAgICAgcmVsaW5rX2NvbW1hbmQ9YCRFQ0hPICJYJHJlbGlua19jb21tYW5kIiB8ICRYc2VkIC1lICdzJUBPVVRQVVRAJSciJG91dHB1dG5hbWUiJyVnJ2AKKworCSAgICAgICAgJG9wdF9zaWxlbnQgfHwgeworCSAgICAgICAgICBmdW5jX3F1b3RlX2Zvcl9leHBhbmQgIiRyZWxpbmtfY29tbWFuZCIKKwkJICBldmFsICJmdW5jX2VjaG8gJGZ1bmNfcXVvdGVfZm9yX2V4cGFuZF9yZXN1bHQiCisJICAgICAgICB9CisJICAgICAgICBpZiBldmFsICIkcmVsaW5rX2NvbW1hbmQiOyB0aGVuIDoKKwkgICAgICAgICAgZWxzZQorCQkgIGZ1bmNfZXJyb3IgImVycm9yOiByZWxpbmsgXGAkZmlsZScgd2l0aCB0aGUgYWJvdmUgY29tbWFuZCBiZWZvcmUgaW5zdGFsbGluZyBpdCIKKwkJICAkb3B0X2RyeV9ydW4gfHwgJHtSTX1yICIkdG1wZGlyIgorCQkgIGNvbnRpbnVlCisJICAgICAgICBmaQorCSAgICAgICAgZmlsZT0iJG91dHB1dG5hbWUiCisJICAgICAgZWxzZQorCSAgICAgICAgZnVuY193YXJuaW5nICJjYW5ub3QgcmVsaW5rIFxgJGZpbGUnIgorCSAgICAgIGZpCisJICAgIH0KKwkgIGVsc2UKKwkgICAgIyBJbnN0YWxsIHRoZSBiaW5hcnkgdGhhdCB3ZSBjb21waWxlZCBlYXJsaWVyLgorCSAgICBmaWxlPWAkRUNITyAiWCRmaWxlJHN0cmlwcGVkX2V4dCIgfCAkWHNlZCAtZSAicyVcKFteL10qXCkkJSRvYmpkaXIvXDElImAKKwkgIGZpCisJZmkKKworCSMgcmVtb3ZlIC5leGUgc2luY2UgY3lnd2luIC91c3IvYmluL2luc3RhbGwgd2lsbCBhcHBlbmQgYW5vdGhlcgorCSMgb25lIGFueXdheQorCWNhc2UgJGluc3RhbGxfcHJvZywkaG9zdCBpbgorCSovdXNyL2Jpbi9pbnN0YWxsKiwqY3lnd2luKikKKwkgIGNhc2UgJGZpbGU6JGRlc3RmaWxlIGluCisJICAqLmV4ZToqLmV4ZSkKKwkgICAgIyB0aGlzIGlzIG9rCisJICAgIDs7CisJICAqLmV4ZToqKQorCSAgICBkZXN0ZmlsZT0kZGVzdGZpbGUuZXhlCisJICAgIDs7CisJICAqOiouZXhlKQorCSAgICBmdW5jX3N0cmlwbmFtZSAnJyAnLmV4ZScgIiRkZXN0ZmlsZSIKKwkgICAgZGVzdGZpbGU9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCSAgICA7OworCSAgZXNhYworCSAgOzsKKwllc2FjCisJZnVuY19zaG93X2V2YWwgIiRpbnN0YWxsX3Byb2dcJHN0cmlwbWUgXCRmaWxlIFwkZGVzdGZpbGUiICdleGl0ICQ/JworCSRvcHRfZHJ5X3J1biB8fCBpZiB0ZXN0IC1uICIkb3V0cHV0bmFtZSI7IHRoZW4KKwkgICR7Uk19ciAiJHRtcGRpciIKKwlmaQorCTs7CisgICAgICBlc2FjCisgICAgZG9uZQorCisgICAgZm9yIGZpbGUgaW4gJHN0YXRpY2xpYnM7IGRvCisgICAgICBmdW5jX2Jhc2VuYW1lICIkZmlsZSIKKyAgICAgIG5hbWU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKworICAgICAgIyBTZXQgdXAgdGhlIHJhbmxpYiBwYXJhbWV0ZXJzLgorICAgICAgb2xkbGliPSIkZGVzdGRpci8kbmFtZSIKKworICAgICAgZnVuY19zaG93X2V2YWwgIiRpbnN0YWxsX3Byb2cgXCRmaWxlIFwkb2xkbGliIiAnZXhpdCAkPycKKworICAgICAgaWYgdGVzdCAtbiAiJHN0cmlwbWUiICYmIHRlc3QgLW4gIiRvbGRfc3RyaXBsaWIiOyB0aGVuCisJZnVuY19zaG93X2V2YWwgIiRvbGRfc3RyaXBsaWIgJG9sZGxpYiIgJ2V4aXQgJD8nCisgICAgICBmaQorCisgICAgICAjIERvIGVhY2ggY29tbWFuZCBpbiB0aGUgcG9zdGluc3RhbGwgY29tbWFuZHMuCisgICAgICBmdW5jX2V4ZWN1dGVfY21kcyAiJG9sZF9wb3N0aW5zdGFsbF9jbWRzIiAnZXhpdCAkPycKKyAgICBkb25lCisKKyAgICB0ZXN0IC1uICIkZnV0dXJlX2xpYmRpcnMiICYmIFwKKyAgICAgIGZ1bmNfd2FybmluZyAicmVtZW1iZXIgdG8gcnVuIFxgJHByb2duYW1lIC0tZmluaXNoJGZ1dHVyZV9saWJkaXJzJyIKKworICAgIGlmIHRlc3QgLW4gIiRjdXJyZW50X2xpYmRpcnMiOyB0aGVuCisgICAgICAjIE1heWJlIGp1c3QgZG8gYSBkcnkgcnVuLgorICAgICAgJG9wdF9kcnlfcnVuICYmIGN1cnJlbnRfbGliZGlycz0iIC1uJGN1cnJlbnRfbGliZGlycyIKKyAgICAgIGV4ZWNfY21kPSckU0hFTEwgJHByb2dwYXRoICRwcmVzZXJ2ZV9hcmdzIC0tZmluaXNoJGN1cnJlbnRfbGliZGlycycKKyAgICBlbHNlCisgICAgICBleGl0ICRFWElUX1NVQ0NFU1MKKyAgICBmaQorfQorCit0ZXN0ICIkbW9kZSIgPSBpbnN0YWxsICYmIGZ1bmNfbW9kZV9pbnN0YWxsICR7MSsiJEAifQorCisKKyMgZnVuY19nZW5lcmF0ZV9kbHN5bXMgb3V0cHV0bmFtZSBvcmlnaW5hdG9yIHBpY19wCisjIEV4dHJhY3Qgc3ltYm9scyBmcm9tIGRscHJlZmlsZXMgYW5kIGNyZWF0ZSAke291dHB1dG5hbWV9Uy5vIHdpdGgKKyMgYSBkbHByZW9wZW4gc3ltYm9sIHRhYmxlLgorZnVuY19nZW5lcmF0ZV9kbHN5bXMgKCkKK3sKKyAgICAkb3B0X2RlYnVnCisgICAgbXlfb3V0cHV0bmFtZT0iJDEiCisgICAgbXlfb3JpZ2luYXRvcj0iJDIiCisgICAgbXlfcGljX3A9IiR7My1ub30iCisgICAgbXlfcHJlZml4PWAkRUNITyAiJG15X29yaWdpbmF0b3IiIHwgc2VkICdzJVteYS16QS1aMC05XSVfJWcnYAorICAgIG15X2Rsc3ltcz0KKworICAgIGlmIHRlc3QgLW4gIiRkbGZpbGVzJGRscHJlZmlsZXMiIHx8IHRlc3QgIiRkbHNlbGYiICE9IG5vOyB0aGVuCisgICAgICBpZiB0ZXN0IC1uICIkTk0iICYmIHRlc3QgLW4gIiRnbG9iYWxfc3ltYm9sX3BpcGUiOyB0aGVuCisJbXlfZGxzeW1zPSIke215X291dHB1dG5hbWV9Uy5jIgorICAgICAgZWxzZQorCWZ1bmNfZXJyb3IgIm5vdCBjb25maWd1cmVkIHRvIGV4dHJhY3QgZ2xvYmFsIHN5bWJvbHMgZnJvbSBkbHByZW9wZW5lZCBmaWxlcyIKKyAgICAgIGZpCisgICAgZmkKKworICAgIGlmIHRlc3QgLW4gIiRteV9kbHN5bXMiOyB0aGVuCisgICAgICBjYXNlICRteV9kbHN5bXMgaW4KKyAgICAgICIiKSA7OworICAgICAgKi5jKQorCSMgRGlzY292ZXIgdGhlIG5saXN0IG9mIGVhY2ggb2YgdGhlIGRsZmlsZXMuCisJbmxpc3Q9IiRvdXRwdXRfb2JqZGlyLyR7bXlfb3V0cHV0bmFtZX0ubm0iCisKKwlmdW5jX3Nob3dfZXZhbCAiJFJNICRubGlzdCAke25saXN0fVMgJHtubGlzdH1UIgorCisJIyBQYXJzZSB0aGUgbmFtZSBsaXN0IGludG8gYSBzb3VyY2UgZmlsZS4KKwlmdW5jX3ZlcmJvc2UgImNyZWF0aW5nICRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiCisKKwkkb3B0X2RyeV9ydW4gfHwgJEVDSE8gPiAiJG91dHB1dF9vYmpkaXIvJG15X2Rsc3ltcyIgIlwKKy8qICRteV9kbHN5bXMgLSBzeW1ib2wgcmVzb2x1dGlvbiB0YWJsZSBmb3IgXGAkbXlfb3V0cHV0bmFtZScgZGxzeW0gZW11bGF0aW9uLiAqLworLyogR2VuZXJhdGVkIGJ5ICRQUk9HUkFNIChHTlUgJFBBQ0tBR0UkVElNRVNUQU1QKSAkVkVSU0lPTiAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiBcIkNcIiB7CisjZW5kaWYKKworLyogRXh0ZXJuYWwgc3ltYm9sIGRlY2xhcmF0aW9ucyBmb3IgdGhlIGNvbXBpbGVyLiAqL1wKKyIKKworCWlmIHRlc3QgIiRkbHNlbGYiID0geWVzOyB0aGVuCisJICBmdW5jX3ZlcmJvc2UgImdlbmVyYXRpbmcgc3ltYm9sIGxpc3QgZm9yIFxgJG91dHB1dCciCisKKwkgICRvcHRfZHJ5X3J1biB8fCBlY2hvICc6IEBQUk9HUkFNQCAnID4gIiRubGlzdCIKKworCSAgIyBBZGQgb3VyIG93biBwcm9ncmFtIG9iamVjdHMgdG8gdGhlIHN5bWJvbCBsaXN0LgorCSAgcHJvZ2ZpbGVzPWAkRUNITyAiWCRvYmpzJG9sZF9kZXBsaWJzIiB8ICRTUDJOTCB8ICRYc2VkIC1lICIkbG8ybyIgfCAkTkwyU1BgCisJICBmb3IgcHJvZ2ZpbGUgaW4gJHByb2dmaWxlczsgZG8KKwkgICAgZnVuY192ZXJib3NlICJleHRyYWN0aW5nIGdsb2JhbCBDIHN5bWJvbHMgZnJvbSBcYCRwcm9nZmlsZSciCisJICAgICRvcHRfZHJ5X3J1biB8fCBldmFsICIkTk0gJHByb2dmaWxlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSA+PiAnJG5saXN0JyIKKwkgIGRvbmUKKworCSAgaWYgdGVzdCAtbiAiJGV4Y2x1ZGVfZXhwc3ltcyI7IHRoZW4KKwkgICAgJG9wdF9kcnlfcnVuIHx8IHsKKwkgICAgICBldmFsICckRUdSRVAgLXYgIiAoJGV4Y2x1ZGVfZXhwc3ltcykkIiAiJG5saXN0IiA+ICIkbmxpc3QiVCcKKwkgICAgICBldmFsICckTVYgIiRubGlzdCJUICIkbmxpc3QiJworCSAgICB9CisJICBmaQorCisJICBpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHNfcmVnZXgiOyB0aGVuCisJICAgICRvcHRfZHJ5X3J1biB8fCB7CisJICAgICAgZXZhbCAnJEVHUkVQIC1lICIkZXhwb3J0X3N5bWJvbHNfcmVnZXgiICIkbmxpc3QiID4gIiRubGlzdCJUJworCSAgICAgIGV2YWwgJyRNViAiJG5saXN0IlQgIiRubGlzdCInCisJICAgIH0KKwkgIGZpCisKKwkgICMgUHJlcGFyZSB0aGUgbGlzdCBvZiBleHBvcnRlZCBzeW1ib2xzCisJICBpZiB0ZXN0IC16ICIkZXhwb3J0X3N5bWJvbHMiOyB0aGVuCisJICAgIGV4cG9ydF9zeW1ib2xzPSIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZS5leHAiCisJICAgICRvcHRfZHJ5X3J1biB8fCB7CisJICAgICAgJFJNICRleHBvcnRfc3ltYm9scworCSAgICAgIGV2YWwgIiR7U0VEfSAtbiAtZSAnL146IEBQUk9HUkFNQCAkL2QnIC1lICdzL14uKiBcKC4qXCkkL1wxL3AnICInPCAiJG5saXN0IiA+ICIkZXhwb3J0X3N5bWJvbHMiJworCSAgICAgIGNhc2UgJGhvc3QgaW4KKwkgICAgICAqY3lnd2luKiB8ICptaW5ndyogfCAqY2VnY2MqICkKKyAgICAgICAgICAgICAgICBldmFsICJlY2hvIEVYUE9SVFMgIic+ICIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZS5kZWYiJworICAgICAgICAgICAgICAgIGV2YWwgJ2NhdCAiJGV4cG9ydF9zeW1ib2xzIiA+PiAiJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUuZGVmIicKKwkgICAgICAgIDs7CisJICAgICAgZXNhYworCSAgICB9CisJICBlbHNlCisJICAgICRvcHRfZHJ5X3J1biB8fCB7CisJICAgICAgZXZhbCAiJHtTRUR9IC1lICdzL1woW10uWypeJF1cKS9cXFxcXDEvZycgLWUgJ3MvXi8gLycgLWUgJ3MvJC8kLyciJyA8ICIkZXhwb3J0X3N5bWJvbHMiID4gIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmV4cCInCisJICAgICAgZXZhbCAnJEdSRVAgLWYgIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmV4cCIgPCAiJG5saXN0IiA+ICIkbmxpc3QiVCcKKwkgICAgICBldmFsICckTVYgIiRubGlzdCJUICIkbmxpc3QiJworCSAgICAgIGNhc2UgJGhvc3QgaW4KKwkgICAgICAgICpjeWd3aW4gfCAqbWluZ3cqIHwgKmNlZ2NjKiApCisJICAgICAgICAgIGV2YWwgImVjaG8gRVhQT1JUUyAiJz4gIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmRlZiInCisJICAgICAgICAgIGV2YWwgJ2NhdCAiJG5saXN0IiA+PiAiJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUuZGVmIicKKwkgICAgICAgICAgOzsKKwkgICAgICBlc2FjCisJICAgIH0KKwkgIGZpCisJZmkKKworCWZvciBkbHByZWZpbGUgaW4gJGRscHJlZmlsZXM7IGRvCisJICBmdW5jX3ZlcmJvc2UgImV4dHJhY3RpbmcgZ2xvYmFsIEMgc3ltYm9scyBmcm9tIFxgJGRscHJlZmlsZSciCisJICBmdW5jX2Jhc2VuYW1lICIkZGxwcmVmaWxlIgorCSAgbmFtZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorCSAgJG9wdF9kcnlfcnVuIHx8IHsKKwkgICAgZXZhbCAnJEVDSE8gIjogJG5hbWUgIiA+PiAiJG5saXN0IicKKwkgICAgZXZhbCAiJE5NICRkbHByZWZpbGUgMj4vZGV2L251bGwgfCAkZ2xvYmFsX3N5bWJvbF9waXBlID4+ICckbmxpc3QnIgorCSAgfQorCWRvbmUKKworCSRvcHRfZHJ5X3J1biB8fCB7CisJICAjIE1ha2Ugc3VyZSB3ZSBoYXZlIGF0IGxlYXN0IGFuIGVtcHR5IGZpbGUuCisJICB0ZXN0IC1mICIkbmxpc3QiIHx8IDogPiAiJG5saXN0IgorCisJICBpZiB0ZXN0IC1uICIkZXhjbHVkZV9leHBzeW1zIjsgdGhlbgorCSAgICAkRUdSRVAgLXYgIiAoJGV4Y2x1ZGVfZXhwc3ltcykkIiAiJG5saXN0IiA+ICIkbmxpc3QiVAorCSAgICAkTVYgIiRubGlzdCJUICIkbmxpc3QiCisJICBmaQorCisJICAjIFRyeSBzb3J0aW5nIGFuZCB1bmlxdWlmeWluZyB0aGUgb3V0cHV0LgorCSAgaWYgJEdSRVAgLXYgIl46ICIgPCAiJG5saXN0IiB8CisJICAgICAgaWYgc29ydCAtayAzIDwvZGV2L251bGwgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisJCXNvcnQgLWsgMworCSAgICAgIGVsc2UKKwkJc29ydCArMgorCSAgICAgIGZpIHwKKwkgICAgICB1bmlxID4gIiRubGlzdCJTOyB0aGVuCisJICAgIDoKKwkgIGVsc2UKKwkgICAgJEdSRVAgLXYgIl46ICIgPCAiJG5saXN0IiA+ICIkbmxpc3QiUworCSAgZmkKKworCSAgaWYgdGVzdCAtZiAiJG5saXN0IlM7IHRoZW4KKwkgICAgZXZhbCAiJGdsb2JhbF9zeW1ib2xfdG9fY2RlY2wiJyA8ICIkbmxpc3QiUyA+PiAiJG91dHB1dF9vYmpkaXIvJG15X2Rsc3ltcyInCisJICBlbHNlCisJICAgICRFQ0hPICcvKiBOT05FICovJyA+PiAiJG91dHB1dF9vYmpkaXIvJG15X2Rsc3ltcyIKKwkgIGZpCisKKwkgICRFQ0hPID4+ICIkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIiAiXAorCisvKiBUaGUgbWFwcGluZyBiZXR3ZWVuIHN5bWJvbCBuYW1lcyBhbmQgc3ltYm9scy4gICovCit0eXBlZGVmIHN0cnVjdCB7CisgIGNvbnN0IGNoYXIgKm5hbWU7CisgIHZvaWQgKmFkZHJlc3M7Cit9IGx0X2Rsc3ltbGlzdDsKKyIKKwkgIGNhc2UgJGhvc3QgaW4KKwkgICpjeWd3aW4qIHwgKm1pbmd3KiB8ICpjZWdjYyogKQorCSAgICAkRUNITyA+PiAiJG91dHB1dF9vYmpkaXIvJG15X2Rsc3ltcyIgIlwKKy8qIERBVEEgaW1wb3J0cyBmcm9tIERMTHMgb24gV0lOMzIgY29uJ3QgYmUgY29uc3QsIGJlY2F1c2UKKyAgIHJ1bnRpbWUgcmVsb2NhdGlvbnMgYXJlIHBlcmZvcm1lZCAtLSBzZWUgbGQncyBkb2N1bWVudGF0aW9uCisgICBvbiBwc2V1ZG8tcmVsb2NzLiAgKi8iCisJICAgIGx0X2Rsc3ltX2NvbnN0PSA7OworCSAgKm9zZjUqKQorCSAgICBlY2hvID4+ICIkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIiAiXAorLyogVGhpcyBzeXN0ZW0gZG9lcyBub3QgY29wZSB3ZWxsIHdpdGggcmVsb2NhdGlvbnMgaW4gY29uc3QgZGF0YSAqLyIKKwkgICAgbHRfZGxzeW1fY29uc3Q9IDs7CisJICAqKQorCSAgICBsdF9kbHN5bV9jb25zdD1jb25zdCA7OworCSAgZXNhYworCisJICAkRUNITyA+PiAiJG91dHB1dF9vYmpkaXIvJG15X2Rsc3ltcyIgIlwKK2V4dGVybiAkbHRfZGxzeW1fY29uc3QgbHRfZGxzeW1saXN0CitsdF8ke215X3ByZWZpeH1fTFRYX3ByZWxvYWRlZF9zeW1ib2xzW107CiskbHRfZGxzeW1fY29uc3QgbHRfZGxzeW1saXN0CitsdF8ke215X3ByZWZpeH1fTFRYX3ByZWxvYWRlZF9zeW1ib2xzW10gPQore1wKKyAgeyBcIiRteV9vcmlnaW5hdG9yXCIsICh2b2lkICopIDAgfSwiCisKKwkgIGNhc2UgJG5lZWRfbGliX3ByZWZpeCBpbgorCSAgbm8pCisJICAgIGV2YWwgIiRnbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzIiA8ICIkbmxpc3QiID4+ICIkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIgorCSAgICA7OworCSAgKikKKwkgICAgZXZhbCAiJGdsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeCIgPCAiJG5saXN0IiA+PiAiJG91dHB1dF9vYmpkaXIvJG15X2Rsc3ltcyIKKwkgICAgOzsKKwkgIGVzYWMKKwkgICRFQ0hPID4+ICIkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIiAiXAorICB7MCwgKHZvaWQgKikgMH0KK307CisKKy8qIFRoaXMgd29ya3MgYXJvdW5kIGEgcHJvYmxlbSBpbiBGcmVlQlNEIGxpbmtlciAqLworI2lmZGVmIEZSRUVCU0RfV09SS0FST1VORAorc3RhdGljIGNvbnN0IHZvaWQgKmx0X3ByZWxvYWRlZF9zZXR1cCgpIHsKKyAgcmV0dXJuIGx0XyR7bXlfcHJlZml4fV9MVFhfcHJlbG9hZGVkX3N5bWJvbHM7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWZcCisiCisJfSAjICEkb3B0X2RyeV9ydW4KKworCXBpY19mbGFnX2Zvcl9zeW10YWJsZT0KKwljYXNlICIkY29tcGlsZV9jb21tYW5kICIgaW4KKwkqIiAtc3RhdGljICIqKSA7OworCSopCisJICBjYXNlICRob3N0IGluCisJICAjIGNvbXBpbGluZyB0aGUgc3ltYm9sIHRhYmxlIGZpbGUgd2l0aCBwaWNfZmxhZyB3b3JrcyBhcm91bmQKKwkgICMgYSBGcmVlQlNEIGJ1ZyB0aGF0IGNhdXNlcyBwcm9ncmFtcyB0byBjcmFzaCB3aGVuIC1sbSBpcworCSAgIyBsaW5rZWQgYmVmb3JlIGFueSBvdGhlciBQSUMgb2JqZWN0LiAgQnV0IHdlIG11c3Qgbm90IHVzZQorCSAgIyBwaWNfZmxhZyB3aGVuIGxpbmtpbmcgd2l0aCAtc3RhdGljLiAgVGhlIHByb2JsZW0gZXhpc3RzIGluCisJICAjIEZyZWVCU0QgMi4yLjYgYW5kIGlzIGZpeGVkIGluIEZyZWVCU0QgMy4xLgorCSAgKi0qLWZyZWVic2QyKnwqLSotZnJlZWJzZDMuMCp8Ki0qLWZyZWVic2RlbGYzLjAqKQorCSAgICBwaWNfZmxhZ19mb3Jfc3ltdGFibGU9IiAkcGljX2ZsYWcgLURGUkVFQlNEX1dPUktBUk9VTkQiIDs7CisJICAqLSotaHB1eCopCisJICAgIHBpY19mbGFnX2Zvcl9zeW10YWJsZT0iICRwaWNfZmxhZyIgIDs7CisJICAqKQorCSAgICBpZiB0ZXN0ICJYJG15X3BpY19wIiAhPSBYbm87IHRoZW4KKwkgICAgICBwaWNfZmxhZ19mb3Jfc3ltdGFibGU9IiAkcGljX2ZsYWciCisJICAgIGZpCisJICAgIDs7CisJICBlc2FjCisJICA7OworCWVzYWMKKwlzeW10YWJfY2ZsYWdzPQorCWZvciBhcmcgaW4gJExUQ0ZMQUdTOyBkbworCSAgY2FzZSAkYXJnIGluCisJICAtcGllIHwgLWZwaWUgfCAtZlBJRSkgOzsKKwkgICopIHN5bXRhYl9jZmxhZ3M9IiRzeW10YWJfY2ZsYWdzICRhcmciIDs7CisJICBlc2FjCisJZG9uZQorCisJIyBOb3cgY29tcGlsZSB0aGUgZHluYW1pYyBzeW1ib2wgZmlsZS4KKwlmdW5jX3Nob3dfZXZhbCAnKGNkICRvdXRwdXRfb2JqZGlyICYmICRMVENDJHN5bXRhYl9jZmxhZ3MgLWMkbm9fYnVpbHRpbl9mbGFnJHBpY19mbGFnX2Zvcl9zeW10YWJsZSAiJG15X2Rsc3ltcyIpJyAnZXhpdCAkPycKKworCSMgQ2xlYW4gdXAgdGhlIGdlbmVyYXRlZCBmaWxlcy4KKwlmdW5jX3Nob3dfZXZhbCAnJFJNICIkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIiAiJG5saXN0IiAiJHtubGlzdH1TIiAiJHtubGlzdH1UIicKKworCSMgVHJhbnNmb3JtIHRoZSBzeW1ib2wgZmlsZSBpbnRvIHRoZSBjb3JyZWN0IG5hbWUuCisJc3ltZmlsZW9iaj0iJG91dHB1dF9vYmpkaXIvJHtteV9vdXRwdXRuYW1lfVMuJG9iamV4dCIKKwljYXNlICRob3N0IGluCisJKmN5Z3dpbiogfCAqbWluZ3cqIHwgKmNlZ2NjKiApCisJICBpZiB0ZXN0IC1mICIkb3V0cHV0X29iamRpci8kbXlfb3V0cHV0bmFtZS5kZWYiOyB0aGVuCisJICAgIGNvbXBpbGVfY29tbWFuZD1gJEVDSE8gIlgkY29tcGlsZV9jb21tYW5kIiB8ICRYc2VkIC1lICJzJUBTWU1GSUxFQCUkb3V0cHV0X29iamRpci8kbXlfb3V0cHV0bmFtZS5kZWYgJHN5bWZpbGVvYmolImAKKwkgICAgZmluYWxpemVfY29tbWFuZD1gJEVDSE8gIlgkZmluYWxpemVfY29tbWFuZCIgfCAkWHNlZCAtZSAicyVAU1lNRklMRUAlJG91dHB1dF9vYmpkaXIvJG15X291dHB1dG5hbWUuZGVmICRzeW1maWxlb2JqJSJgCisJICBlbHNlCisJICAgIGNvbXBpbGVfY29tbWFuZD1gJEVDSE8gIlgkY29tcGlsZV9jb21tYW5kIiB8ICRYc2VkIC1lICJzJUBTWU1GSUxFQCUkc3ltZmlsZW9iaiUiYAorCSAgICBmaW5hbGl6ZV9jb21tYW5kPWAkRUNITyAiWCRmaW5hbGl6ZV9jb21tYW5kIiB8ICRYc2VkIC1lICJzJUBTWU1GSUxFQCUkc3ltZmlsZW9iaiUiYAorCSAgZmkKKwkgIDs7CisJKikKKwkgIGNvbXBpbGVfY29tbWFuZD1gJEVDSE8gIlgkY29tcGlsZV9jb21tYW5kIiB8ICRYc2VkIC1lICJzJUBTWU1GSUxFQCUkc3ltZmlsZW9iaiUiYAorCSAgZmluYWxpemVfY29tbWFuZD1gJEVDSE8gIlgkZmluYWxpemVfY29tbWFuZCIgfCAkWHNlZCAtZSAicyVAU1lNRklMRUAlJHN5bWZpbGVvYmolImAKKwkgIDs7CisJZXNhYworCTs7CisgICAgICAqKQorCWZ1bmNfZmF0YWxfZXJyb3IgInVua25vd24gc3VmZml4IGZvciBcYCRteV9kbHN5bXMnIgorCTs7CisgICAgICBlc2FjCisgICAgZWxzZQorICAgICAgIyBXZSBrZWVwIGdvaW5nIGp1c3QgaW4gY2FzZSB0aGUgdXNlciBkaWRuJ3QgcmVmZXIgdG8KKyAgICAgICMgbHRfcHJlbG9hZGVkX3N5bWJvbHMuICBUaGUgbGlua2VyIHdpbGwgZmFpbCBpZiBnbG9iYWxfc3ltYm9sX3BpcGUKKyAgICAgICMgcmVhbGx5IHdhcyByZXF1aXJlZC4KKworICAgICAgIyBOdWxsaWZ5IHRoZSBzeW1ib2wgZmlsZS4KKyAgICAgIGNvbXBpbGVfY29tbWFuZD1gJEVDSE8gIlgkY29tcGlsZV9jb21tYW5kIiB8ICRYc2VkIC1lICJzJSBAU1lNRklMRUAlJSJgCisgICAgICBmaW5hbGl6ZV9jb21tYW5kPWAkRUNITyAiWCRmaW5hbGl6ZV9jb21tYW5kIiB8ICRYc2VkIC1lICJzJSBAU1lNRklMRUAlJSJgCisgICAgZmkKK30KKworIyBmdW5jX3dpbjMyX2xpYmlkIGFyZworIyByZXR1cm4gdGhlIGxpYnJhcnkgdHlwZSBvZiBmaWxlICdhcmcnCisjCisjIE5lZWQgYSBsb3Qgb2YgZ29vIHRvIGhhbmRsZSAqYm90aCogRExMcyBhbmQgaW1wb3J0IGxpYnMKKyMgSGFzIHRvIGJlIGEgc2hlbGwgZnVuY3Rpb24gaW4gb3JkZXIgdG8gJ2VhdCcgdGhlIGFyZ3VtZW50CisjIHRoYXQgaXMgc3VwcGxpZWQgd2hlbiAkZmlsZV9tYWdpY19jb21tYW5kIGlzIGNhbGxlZC4KK2Z1bmNfd2luMzJfbGliaWQgKCkKK3sKKyAgJG9wdF9kZWJ1ZworICB3aW4zMl9saWJpZF90eXBlPSJ1bmtub3duIgorICB3aW4zMl9maWxlcmVzPWBmaWxlIC1MICQxIDI+L2Rldi9udWxsYAorICBjYXNlICR3aW4zMl9maWxlcmVzIGluCisgICphclwgYXJjaGl2ZVwgaW1wb3J0XCBsaWJyYXJ5KikgIyBkZWZpbml0ZWx5IGltcG9ydAorICAgIHdpbjMyX2xpYmlkX3R5cGU9Ing4NiBhcmNoaXZlIGltcG9ydCIKKyAgICA7OworICAqYXJcIGFyY2hpdmUqKSAjIGNvdWxkIGJlIGFuIGltcG9ydCwgb3Igc3RhdGljCisgICAgaWYgZXZhbCAkT0JKRFVNUCAtZiAkMSB8ICRTRUQgLWUgJzEwcScgMj4vZGV2L251bGwgfAorICAgICAgICRFR1JFUCAnZmlsZSBmb3JtYXQgcGUtaTM4NiguKmFyY2hpdGVjdHVyZTogaTM4Nik/JyA+L2Rldi9udWxsIDsgdGhlbgorICAgICAgd2luMzJfbm1yZXM9YGV2YWwgJE5NIC1mIHBvc2l4IC1BICQxIHwKKwkkU0VEIC1uIC1lICcKKwkgICAgMSwxMDB7CisJCS8gSSAveworCQkgICAgcywuKixpbXBvcnQsCisJCSAgICBwCisJCSAgICBxCisJCX0KKwkgICAgfSdgCisgICAgICBjYXNlICR3aW4zMl9ubXJlcyBpbgorICAgICAgaW1wb3J0KikgIHdpbjMyX2xpYmlkX3R5cGU9Ing4NiBhcmNoaXZlIGltcG9ydCI7OworICAgICAgKikgICAgICAgIHdpbjMyX2xpYmlkX3R5cGU9Ing4NiBhcmNoaXZlIHN0YXRpYyI7OworICAgICAgZXNhYworICAgIGZpCisgICAgOzsKKyAgKkRMTCopCisgICAgd2luMzJfbGliaWRfdHlwZT0ieDg2IERMTCIKKyAgICA7OworICAqZXhlY3V0YWJsZSopICMgYnV0IHNoZWxsIHNjcmlwdHMgYXJlICJleGVjdXRhYmxlIiB0b28uLi4KKyAgICBjYXNlICR3aW4zMl9maWxlcmVzIGluCisgICAgKk1TXCBXaW5kb3dzXCBQRVwgSW50ZWwqKQorICAgICAgd2luMzJfbGliaWRfdHlwZT0ieDg2IERMTCIKKyAgICAgIDs7CisgICAgZXNhYworICAgIDs7CisgIGVzYWMKKyAgJEVDSE8gIiR3aW4zMl9saWJpZF90eXBlIgorfQorCisKKworIyBmdW5jX2V4dHJhY3RfYW5fYXJjaGl2ZSBkaXIgb2xkbGliCitmdW5jX2V4dHJhY3RfYW5fYXJjaGl2ZSAoKQoreworICAgICRvcHRfZGVidWcKKyAgICBmX2V4X2FuX2FyX2Rpcj0iJDEiOyBzaGlmdAorICAgIGZfZXhfYW5fYXJfb2xkbGliPSIkMSIKKyAgICBmdW5jX3Nob3dfZXZhbCAiKGNkIFwkZl9leF9hbl9hcl9kaXIgJiYgJEFSIHggXCJcJGZfZXhfYW5fYXJfb2xkbGliXCIpIiAnZXhpdCAkPycKKyAgICBpZiAoJEFSIHQgIiRmX2V4X2FuX2FyX29sZGxpYiIgfCBzb3J0IHwgc29ydCAtdWMgPi9kZXYvbnVsbCAyPiYxKTsgdGhlbgorICAgICA6CisgICAgZWxzZQorICAgICAgZnVuY19mYXRhbF9lcnJvciAib2JqZWN0IG5hbWUgY29uZmxpY3RzIGluIGFyY2hpdmU6ICRmX2V4X2FuX2FyX2Rpci8kZl9leF9hbl9hcl9vbGRsaWIiCisgICAgZmkKK30KKworCisjIGZ1bmNfZXh0cmFjdF9hcmNoaXZlcyBnZW50b3Agb2xkbGliIC4uLgorZnVuY19leHRyYWN0X2FyY2hpdmVzICgpCit7CisgICAgJG9wdF9kZWJ1ZworICAgIG15X2dlbnRvcD0iJDEiOyBzaGlmdAorICAgIG15X29sZGxpYnM9JHsxKyIkQCJ9CisgICAgbXlfb2xkb2Jqcz0iIgorICAgIG15X3hsaWI9IiIKKyAgICBteV94YWJzPSIiCisgICAgbXlfeGRpcj0iIgorCisgICAgZm9yIG15X3hsaWIgaW4gJG15X29sZGxpYnM7IGRvCisgICAgICAjIEV4dHJhY3QgdGhlIG9iamVjdHMuCisgICAgICBjYXNlICRteV94bGliIGluCisJW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSBteV94YWJzPSIkbXlfeGxpYiIgOzsKKwkqKSBteV94YWJzPWBwd2RgIi8kbXlfeGxpYiIgOzsKKyAgICAgIGVzYWMKKyAgICAgIGZ1bmNfYmFzZW5hbWUgIiRteV94bGliIgorICAgICAgbXlfeGxpYj0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorICAgICAgbXlfeGxpYl91PSRteV94bGliCisgICAgICB3aGlsZSA6OyBkbworICAgICAgICBjYXNlICIgJGV4dHJhY3RlZF9hcmNoaXZlcyAiIGluCisJKiIgJG15X3hsaWJfdSAiKikKKwkgIGZ1bmNfYXJpdGggJGV4dHJhY3RlZF9zZXJpYWwgKyAxCisJICBleHRyYWN0ZWRfc2VyaWFsPSRmdW5jX2FyaXRoX3Jlc3VsdAorCSAgbXlfeGxpYl91PWx0JGV4dHJhY3RlZF9zZXJpYWwtJG15X3hsaWIgOzsKKwkqKSBicmVhayA7OworCWVzYWMKKyAgICAgIGRvbmUKKyAgICAgIGV4dHJhY3RlZF9hcmNoaXZlcz0iJGV4dHJhY3RlZF9hcmNoaXZlcyAkbXlfeGxpYl91IgorICAgICAgbXlfeGRpcj0iJG15X2dlbnRvcC8kbXlfeGxpYl91IgorCisgICAgICBmdW5jX21rZGlyX3AgIiRteV94ZGlyIgorCisgICAgICBjYXNlICRob3N0IGluCisgICAgICAqLWRhcndpbiopCisJZnVuY192ZXJib3NlICJFeHRyYWN0aW5nICRteV94YWJzIgorCSMgRG8gbm90IGJvdGhlciBkb2luZyBhbnl0aGluZyBpZiBqdXN0IGEgZHJ5IHJ1bgorCSRvcHRfZHJ5X3J1biB8fCB7CisJICBkYXJ3aW5fb3JpZ19kaXI9YHB3ZGAKKwkgIGNkICRteV94ZGlyIHx8IGV4aXQgJD8KKwkgIGRhcndpbl9hcmNoaXZlPSRteV94YWJzCisJICBkYXJ3aW5fY3VyZGlyPWBwd2RgCisJICBkYXJ3aW5fYmFzZV9hcmNoaXZlPWBiYXNlbmFtZSAiJGRhcndpbl9hcmNoaXZlImAKKwkgIGRhcndpbl9hcmNoZXM9YCRMSVBPIC1pbmZvICIkZGFyd2luX2FyY2hpdmUiIDI+L2Rldi9udWxsIHwgJEdSRVAgQXJjaGl0ZWN0dXJlcyAyPi9kZXYvbnVsbCB8fCB0cnVlYAorCSAgaWYgdGVzdCAtbiAiJGRhcndpbl9hcmNoZXMiOyB0aGVuCisJICAgIGRhcndpbl9hcmNoZXM9YCRFQ0hPICIkZGFyd2luX2FyY2hlcyIgfCAkU0VEIC1lICdzLy4qYXJlOi8vJ2AKKwkgICAgZGFyd2luX2FyY2g9CisJICAgIGZ1bmNfdmVyYm9zZSAiJGRhcndpbl9iYXNlX2FyY2hpdmUgaGFzIG11bHRpcGxlIGFyY2hpdGVjdHVyZXMgJGRhcndpbl9hcmNoZXMiCisJICAgIGZvciBkYXJ3aW5fYXJjaCBpbiAgJGRhcndpbl9hcmNoZXMgOyBkbworCSAgICAgIGZ1bmNfbWtkaXJfcCAidW5mYXQtJCQvJHtkYXJ3aW5fYmFzZV9hcmNoaXZlfS0ke2Rhcndpbl9hcmNofSIKKwkgICAgICAkTElQTyAtdGhpbiAkZGFyd2luX2FyY2ggLW91dHB1dCAidW5mYXQtJCQvJHtkYXJ3aW5fYmFzZV9hcmNoaXZlfS0ke2Rhcndpbl9hcmNofS8ke2Rhcndpbl9iYXNlX2FyY2hpdmV9IiAiJHtkYXJ3aW5fYXJjaGl2ZX0iCisJICAgICAgY2QgInVuZmF0LSQkLyR7ZGFyd2luX2Jhc2VfYXJjaGl2ZX0tJHtkYXJ3aW5fYXJjaH0iCisJICAgICAgZnVuY19leHRyYWN0X2FuX2FyY2hpdmUgImBwd2RgIiAiJHtkYXJ3aW5fYmFzZV9hcmNoaXZlfSIKKwkgICAgICBjZCAiJGRhcndpbl9jdXJkaXIiCisJICAgICAgJFJNICJ1bmZhdC0kJC8ke2Rhcndpbl9iYXNlX2FyY2hpdmV9LSR7ZGFyd2luX2FyY2h9LyR7ZGFyd2luX2Jhc2VfYXJjaGl2ZX0iCisJICAgIGRvbmUgIyAkZGFyd2luX2FyY2hlcworICAgICAgICAgICAgIyMgT2theSBub3cgd2UndmUgYSBidW5jaCBvZiB0aGluIG9iamVjdHMsIGdvdHRhIGZhdHRlbiB0aGVtIHVwIDopCisJICAgIGRhcndpbl9maWxlbGlzdD1gZmluZCB1bmZhdC0kJCAtdHlwZSBmIC1uYW1lIFwqLm8gLXByaW50IC1vIC1uYW1lIFwqLmxvIC1wcmludCB8ICRTRUQgLWUgIiRiYXNlbmFtZSIgfCBzb3J0IC11YAorCSAgICBkYXJ3aW5fZmlsZT0KKwkgICAgZGFyd2luX2ZpbGVzPQorCSAgICBmb3IgZGFyd2luX2ZpbGUgaW4gJGRhcndpbl9maWxlbGlzdDsgZG8KKwkgICAgICBkYXJ3aW5fZmlsZXM9YGZpbmQgdW5mYXQtJCQgLW5hbWUgJGRhcndpbl9maWxlIC1wcmludCB8ICROTDJTUGAKKwkgICAgICAkTElQTyAtY3JlYXRlIC1vdXRwdXQgIiRkYXJ3aW5fZmlsZSIgJGRhcndpbl9maWxlcworCSAgICBkb25lICMgJGRhcndpbl9maWxlbGlzdAorCSAgICAkUk0gLXJmIHVuZmF0LSQkCisJICAgIGNkICIkZGFyd2luX29yaWdfZGlyIgorCSAgZWxzZQorCSAgICBjZCAkZGFyd2luX29yaWdfZGlyCisJICAgIGZ1bmNfZXh0cmFjdF9hbl9hcmNoaXZlICIkbXlfeGRpciIgIiRteV94YWJzIgorCSAgZmkgIyAkZGFyd2luX2FyY2hlcworCX0gIyAhJG9wdF9kcnlfcnVuCisJOzsKKyAgICAgICopCisgICAgICAgIGZ1bmNfZXh0cmFjdF9hbl9hcmNoaXZlICIkbXlfeGRpciIgIiRteV94YWJzIgorCTs7CisgICAgICBlc2FjCisgICAgICBteV9vbGRvYmpzPSIkbXlfb2xkb2JqcyAiYGZpbmQgJG15X3hkaXIgLW5hbWUgXCouJG9iamV4dCAtcHJpbnQgLW8gLW5hbWUgXCoubG8gLXByaW50IHwgJE5MMlNQYAorICAgIGRvbmUKKworICAgIGZ1bmNfZXh0cmFjdF9hcmNoaXZlc19yZXN1bHQ9IiRteV9vbGRvYmpzIgorfQorCisKKworIyBmdW5jX2VtaXRfd3JhcHBlcl9wYXJ0MSBbYXJnPW5vXQorIworIyBFbWl0IHRoZSBmaXJzdCBwYXJ0IG9mIGEgbGlidG9vbCB3cmFwcGVyIHNjcmlwdCBvbiBzdGRvdXQuCisjIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlIGRlc2NyaXB0aW9uIGFzc29jaWF0ZWQgd2l0aAorIyBmdW5jX2VtaXRfd3JhcHBlcigpLCBiZWxvdy4KK2Z1bmNfZW1pdF93cmFwcGVyX3BhcnQxICgpCit7CisJZnVuY19lbWl0X3dyYXBwZXJfcGFydDFfYXJnMT1ubworCWlmIHRlc3QgLW4gIiQxIiA7IHRoZW4KKwkgIGZ1bmNfZW1pdF93cmFwcGVyX3BhcnQxX2FyZzE9JDEKKwlmaQorCisJJEVDSE8gIlwKKyMhICRTSEVMTAorCisjICRvdXRwdXQgLSB0ZW1wb3Jhcnkgd3JhcHBlciBzY3JpcHQgZm9yICRvYmpkaXIvJG91dHB1dG5hbWUKKyMgR2VuZXJhdGVkIGJ5ICRQUk9HUkFNIChHTlUgJFBBQ0tBR0UkVElNRVNUQU1QKSAkVkVSU0lPTgorIworIyBUaGUgJG91dHB1dCBwcm9ncmFtIGNhbm5vdCBiZSBkaXJlY3RseSBleGVjdXRlZCB1bnRpbCBhbGwgdGhlIGxpYnRvb2wKKyMgbGlicmFyaWVzIHRoYXQgaXQgZGVwZW5kcyBvbiBhcmUgaW5zdGFsbGVkLgorIworIyBUaGlzIHdyYXBwZXIgc2NyaXB0IHNob3VsZCBuZXZlciBiZSBtb3ZlZCBvdXQgb2YgdGhlIGJ1aWxkIGRpcmVjdG9yeS4KKyMgSWYgaXQgaXMsIGl0IHdpbGwgbm90IG9wZXJhdGUgY29ycmVjdGx5LgorCisjIFNlZCBzdWJzdGl0dXRpb24gdGhhdCBoZWxwcyB1cyBkbyByb2J1c3QgcXVvdGluZy4gIEl0IGJhY2tzbGFzaGlmaWVzCisjIG1ldGFjaGFyYWN0ZXJzIHRoYXQgYXJlIHN0aWxsIGFjdGl2ZSB3aXRoaW4gZG91YmxlLXF1b3RlZCBzdHJpbmdzLgorWHNlZD0nJHtTRUR9IC1lIDFzL15YLy8nCitzZWRfcXVvdGVfc3Vic3Q9JyRzZWRfcXVvdGVfc3Vic3QnCisKKyMgQmUgQm91cm5lIGNvbXBhdGlibGUKK2lmIHRlc3QgLW4gXCJcJHtaU0hfVkVSU0lPTitzZXR9XCIgJiYgKGVtdWxhdGUgc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbgorICBlbXVsYXRlIHNoCisgIE5VTExDTUQ9OgorICAjIFpzaCAzLnggYW5kIDQueCBwZXJmb3JtcyB3b3JkIHNwbGl0dGluZyBvbiBcJHsxK1wiXCRAXCJ9LCB3aGljaAorICAjIGlzIGNvbnRyYXJ5IHRvIG91ciB1c2FnZS4gIERpc2FibGUgdGhpcyBmZWF0dXJlLgorICBhbGlhcyAtZyAnXCR7MStcIlwkQFwifSc9J1wiXCRAXCInCisgIHNldG9wdCBOT19HTE9CX1NVQlNUCitlbHNlCisgIGNhc2UgXGAoc2V0IC1vKSAyPi9kZXYvbnVsbFxgIGluICpwb3NpeCopIHNldCAtbyBwb3NpeDs7IGVzYWMKK2ZpCitCSU5fU0g9eHBnNDsgZXhwb3J0IEJJTl9TSCAjIGZvciBUcnU2NAorRFVBTENBU0U9MTsgZXhwb3J0IERVQUxDQVNFICMgZm9yIE1LUyBzaAorCisjIFRoZSBIUC1VWCBrc2ggYW5kIFBPU0lYIHNoZWxsIHByaW50IHRoZSB0YXJnZXQgZGlyZWN0b3J5IHRvIHN0ZG91dAorIyBpZiBDRFBBVEggaXMgc2V0LgorKHVuc2V0IENEUEFUSCkgPi9kZXYvbnVsbCAyPiYxICYmIHVuc2V0IENEUEFUSAorCityZWxpbmtfY29tbWFuZD1cIiRyZWxpbmtfY29tbWFuZFwiCisKKyMgVGhpcyBlbnZpcm9ubWVudCB2YXJpYWJsZSBkZXRlcm1pbmVzIG91ciBvcGVyYXRpb24gbW9kZS4KK2lmIHRlc3QgXCJcJGxpYnRvb2xfaW5zdGFsbF9tYWdpY1wiID0gXCIkbWFnaWNcIjsgdGhlbgorICAjIGluc3RhbGwgbW9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIHZhcmlhYmxlczoKKyAgZ2VuZXJhdGVkX2J5X2xpYnRvb2xfdmVyc2lvbj0nJG1hY3JvX3ZlcnNpb24nCisgIG5vdGluc3RfZGVwbGlicz0nJG5vdGluc3RfZGVwbGlicycKK2Vsc2UKKyAgIyBXaGVuIHdlIGFyZSBzb3VyY2VkIGluIGV4ZWN1dGUgbW9kZSwgXCRmaWxlIGFuZCBcJEVDSE8gYXJlIGFscmVhZHkgc2V0LgorICBpZiB0ZXN0IFwiXCRsaWJ0b29sX2V4ZWN1dGVfbWFnaWNcIiAhPSBcIiRtYWdpY1wiOyB0aGVuCisgICAgRUNITz1cIiRxZWNob1wiCisgICAgZmlsZT1cIlwkMFwiCisgICAgIyBNYWtlIHN1cmUgZWNobyB3b3Jrcy4KKyAgICBpZiB0ZXN0IFwiWFwkMVwiID0gWC0tbm8tcmVleGVjOyB0aGVuCisgICAgICAjIERpc2NhcmQgdGhlIC0tbm8tcmVleGVjIGZsYWcsIGFuZCBjb250aW51ZS4KKyAgICAgIHNoaWZ0CisgICAgZWxpZiB0ZXN0IFwiWFxgeyBcJEVDSE8gJ1x0JzsgfSAyPi9kZXYvbnVsbFxgXCIgPSAnWFx0JzsgdGhlbgorICAgICAgIyBZaXBwZWUsIFwkRUNITyB3b3JrcyEKKyAgICAgIDoKKyAgICBlbHNlCisgICAgICAjIFJlc3RhcnQgdW5kZXIgdGhlIGNvcnJlY3Qgc2hlbGwsIGFuZCB0aGVuIG1heWJlIFwkRUNITyB3aWxsIHdvcmsuCisgICAgICBleGVjICRTSEVMTCBcIlwkMFwiIC0tbm8tcmVleGVjIFwkezErXCJcJEBcIn0KKyAgICBmaQorICBmaVwKKyIKKwkkRUNITyAiXAorCisgICMgRmluZCB0aGUgZGlyZWN0b3J5IHRoYXQgdGhpcyBzY3JpcHQgbGl2ZXMgaW4uCisgIHRoaXNkaXI9XGBcJEVDSE8gXCJYXCRmaWxlXCIgfCBcJFhzZWQgLWUgJ3MlL1teL10qJCUlJ1xgCisgIHRlc3QgXCJ4XCR0aGlzZGlyXCIgPSBcInhcJGZpbGVcIiAmJiB0aGlzZGlyPS4KKworICAjIEZvbGxvdyBzeW1ib2xpYyBsaW5rcyB1bnRpbCB3ZSBnZXQgdG8gdGhlIHJlYWwgdGhpc2Rpci4KKyAgZmlsZT1cYGxzIC1sZCBcIlwkZmlsZVwiIHwgJHtTRUR9IC1uICdzLy4qLT4gLy9wJ1xgCisgIHdoaWxlIHRlc3QgLW4gXCJcJGZpbGVcIjsgZG8KKyAgICBkZXN0ZGlyPVxgXCRFQ0hPIFwiWFwkZmlsZVwiIHwgXCRYc2VkIC1lICdzJS9bXi9dKlwkJSUnXGAKKworICAgICMgSWYgdGhlcmUgd2FzIGEgZGlyZWN0b3J5IGNvbXBvbmVudCwgdGhlbiBjaGFuZ2UgdGhpc2Rpci4KKyAgICBpZiB0ZXN0IFwieFwkZGVzdGRpclwiICE9IFwieFwkZmlsZVwiOyB0aGVuCisgICAgICBjYXNlIFwiXCRkZXN0ZGlyXCIgaW4KKyAgICAgIFtcXFxcL10qIHwgW0EtWmEtel06W1xcXFwvXSopIHRoaXNkaXI9XCJcJGRlc3RkaXJcIiA7OworICAgICAgKikgdGhpc2Rpcj1cIlwkdGhpc2Rpci9cJGRlc3RkaXJcIiA7OworICAgICAgZXNhYworICAgIGZpCisKKyAgICBmaWxlPVxgXCRFQ0hPIFwiWFwkZmlsZVwiIHwgXCRYc2VkIC1lICdzJV4uKi8lJSdcYAorICAgIGZpbGU9XGBscyAtbGQgXCJcJHRoaXNkaXIvXCRmaWxlXCIgfCAke1NFRH0gLW4gJ3MvLiotPiAvL3AnXGAKKyAgZG9uZQorIgorfQorIyBlbmQ6IGZ1bmNfZW1pdF93cmFwcGVyX3BhcnQxCisKKyMgZnVuY19lbWl0X3dyYXBwZXJfcGFydDIgW2FyZz1ub10KKyMKKyMgRW1pdCB0aGUgc2Vjb25kIHBhcnQgb2YgYSBsaWJ0b29sIHdyYXBwZXIgc2NyaXB0IG9uIHN0ZG91dC4KKyMgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSB0aGUgZGVzY3JpcHRpb24gYXNzb2NpYXRlZCB3aXRoCisjIGZ1bmNfZW1pdF93cmFwcGVyKCksIGJlbG93LgorZnVuY19lbWl0X3dyYXBwZXJfcGFydDIgKCkKK3sKKwlmdW5jX2VtaXRfd3JhcHBlcl9wYXJ0Ml9hcmcxPW5vCisJaWYgdGVzdCAtbiAiJDEiIDsgdGhlbgorCSAgZnVuY19lbWl0X3dyYXBwZXJfcGFydDJfYXJnMT0kMQorCWZpCisKKwkkRUNITyAiXAorCisgICMgVXN1YWxseSAnbm8nLCBleGNlcHQgb24gY3lnd2luL21pbmd3IHdoZW4gZW1iZWRkZWQgaW50bworICAjIHRoZSBjd3JhcHBlci4KKyAgV1JBUFBFUl9TQ1JJUFRfQkVMT05HU19JTl9PQkpESVI9JGZ1bmNfZW1pdF93cmFwcGVyX3BhcnQyX2FyZzEKKyAgaWYgdGVzdCBcIlwkV1JBUFBFUl9TQ1JJUFRfQkVMT05HU19JTl9PQkpESVJcIiA9IFwieWVzXCI7IHRoZW4KKyAgICAjIHNwZWNpYWwgY2FzZSBmb3IgJy4nCisgICAgaWYgdGVzdCBcIlwkdGhpc2RpclwiID0gXCIuXCI7IHRoZW4KKyAgICAgIHRoaXNkaXI9XGBwd2RcYAorICAgIGZpCisgICAgIyByZW1vdmUgLmxpYnMgZnJvbSB0aGlzZGlyCisgICAgY2FzZSBcIlwkdGhpc2RpclwiIGluCisgICAgKltcXFxcL10kb2JqZGlyICkgdGhpc2Rpcj1cYFwkRUNITyBcIlhcJHRoaXNkaXJcIiB8IFwkWHNlZCAtZSAncyVbXFxcXC9dW15cXFxcL10qJCUlJ1xgIDs7CisgICAgJG9iamRpciApICAgdGhpc2Rpcj0uIDs7CisgICAgZXNhYworICBmaQorCisgICMgVHJ5IHRvIGdldCB0aGUgYWJzb2x1dGUgZGlyZWN0b3J5IG5hbWUuCisgIGFic2Rpcj1cYGNkIFwiXCR0aGlzZGlyXCIgJiYgcHdkXGAKKyAgdGVzdCAtbiBcIlwkYWJzZGlyXCIgJiYgdGhpc2Rpcj1cIlwkYWJzZGlyXCIKKyIKKworCWlmIHRlc3QgIiRmYXN0X2luc3RhbGwiID0geWVzOyB0aGVuCisJICAkRUNITyAiXAorICBwcm9ncmFtPWx0LSckb3V0cHV0bmFtZSckZXhlZXh0CisgIHByb2dkaXI9XCJcJHRoaXNkaXIvJG9iamRpclwiCisKKyAgaWYgdGVzdCAhIC1mIFwiXCRwcm9nZGlyL1wkcHJvZ3JhbVwiIHx8CisgICAgIHsgZmlsZT1cYGxzIC0xZHQgXCJcJHByb2dkaXIvXCRwcm9ncmFtXCIgXCJcJHByb2dkaXIvLi4vXCRwcm9ncmFtXCIgMj4vZGV2L251bGwgfCAke1NFRH0gMXFcYDsgXFwKKyAgICAgICB0ZXN0IFwiWFwkZmlsZVwiICE9IFwiWFwkcHJvZ2Rpci9cJHByb2dyYW1cIjsgfTsgdGhlbgorCisgICAgZmlsZT1cIlwkXCQtXCRwcm9ncmFtXCIKKworICAgIGlmIHRlc3QgISAtZCBcIlwkcHJvZ2RpclwiOyB0aGVuCisgICAgICAkTUtESVIgXCJcJHByb2dkaXJcIgorICAgIGVsc2UKKyAgICAgICRSTSBcIlwkcHJvZ2Rpci9cJGZpbGVcIgorICAgIGZpIgorCisJICAkRUNITyAiXAorCisgICAgIyByZWxpbmsgZXhlY3V0YWJsZSBpZiBuZWNlc3NhcnkKKyAgICBpZiB0ZXN0IC1uIFwiXCRyZWxpbmtfY29tbWFuZFwiOyB0aGVuCisgICAgICBpZiByZWxpbmtfY29tbWFuZF9vdXRwdXQ9XGBldmFsIFwkcmVsaW5rX2NvbW1hbmQgMj4mMVxgOyB0aGVuIDoKKyAgICAgIGVsc2UKKwkkRUNITyBcIlwkcmVsaW5rX2NvbW1hbmRfb3V0cHV0XCIgPiYyCisJJFJNIFwiXCRwcm9nZGlyL1wkZmlsZVwiCisJZXhpdCAxCisgICAgICBmaQorICAgIGZpCisKKyAgICAkTVYgXCJcJHByb2dkaXIvXCRmaWxlXCIgXCJcJHByb2dkaXIvXCRwcm9ncmFtXCIgMj4vZGV2L251bGwgfHwKKyAgICB7ICRSTSBcIlwkcHJvZ2Rpci9cJHByb2dyYW1cIjsKKyAgICAgICRNViBcIlwkcHJvZ2Rpci9cJGZpbGVcIiBcIlwkcHJvZ2Rpci9cJHByb2dyYW1cIjsgfQorICAgICRSTSBcIlwkcHJvZ2Rpci9cJGZpbGVcIgorICBmaSIKKwllbHNlCisJICAkRUNITyAiXAorICBwcm9ncmFtPSckb3V0cHV0bmFtZScKKyAgcHJvZ2Rpcj1cIlwkdGhpc2Rpci8kb2JqZGlyXCIKKyIKKwlmaQorCisJJEVDSE8gIlwKKworICBpZiB0ZXN0IC1mIFwiXCRwcm9nZGlyL1wkcHJvZ3JhbVwiOyB0aGVuIgorCisJIyBFeHBvcnQgb3VyIHNobGlicGF0aF92YXIgaWYgd2UgaGF2ZSBvbmUuCisJaWYgdGVzdCAiJHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aCIgPSB5ZXMgJiYgdGVzdCAtbiAiJHNobGlicGF0aF92YXIiICYmIHRlc3QgLW4gIiR0ZW1wX3JwYXRoIjsgdGhlbgorCSAgJEVDSE8gIlwKKyAgICAjIEFkZCBvdXIgb3duIGxpYnJhcnkgcGF0aCB0byAkc2hsaWJwYXRoX3ZhcgorICAgICRzaGxpYnBhdGhfdmFyPVwiJHRlbXBfcnBhdGhcJCRzaGxpYnBhdGhfdmFyXCIKKworICAgICMgU29tZSBzeXN0ZW1zIGNhbm5vdCBjb3BlIHdpdGggY29sb24tdGVybWluYXRlZCAkc2hsaWJwYXRoX3ZhcgorICAgICMgVGhlIHNlY29uZCBjb2xvbiBpcyBhIHdvcmthcm91bmQgZm9yIGEgYnVnIGluIEJlT1MgUjQgc2VkCisgICAgJHNobGlicGF0aF92YXI9XGBcJEVDSE8gXCJYXCQkc2hsaWJwYXRoX3ZhclwiIHwgXCRYc2VkIC1lICdzLzo6KlwkLy8nXGAKKworICAgIGV4cG9ydCAkc2hsaWJwYXRoX3ZhcgorIgorCWZpCisKKwkjIGZpeHVwIHRoZSBkbGwgc2VhcmNocGF0aCBpZiB3ZSBuZWVkIHRvLgorCWlmIHRlc3QgLW4gIiRkbGxzZWFyY2hwYXRoIjsgdGhlbgorCSAgJEVDSE8gIlwKKyAgICAjIEFkZCB0aGUgZGxsIHNlYXJjaCBwYXRoIGNvbXBvbmVudHMgdG8gdGhlIGV4ZWN1dGFibGUgUEFUSAorICAgIFBBVEg9JGRsbHNlYXJjaHBhdGg6XCRQQVRICisiCisJZmkKKworCSRFQ0hPICJcCisgICAgaWYgdGVzdCBcIlwkbGlidG9vbF9leGVjdXRlX21hZ2ljXCIgIT0gXCIkbWFnaWNcIjsgdGhlbgorICAgICAgIyBSdW4gdGhlIGFjdHVhbCBwcm9ncmFtIHdpdGggb3VyIGFyZ3VtZW50cy4KKyIKKwljYXNlICRob3N0IGluCisJIyBCYWNrc2xhc2hlcyBzZXBhcmF0ZSBkaXJlY3RvcmllcyBvbiBwbGFpbiB3aW5kb3dzCisJKi0qLW1pbmd3IHwgKi0qLW9zMiogfCAqLWNlZ2NjKikKKwkgICRFQ0hPICJcCisgICAgICBleGVjIFwiXCRwcm9nZGlyXFxcXFwkcHJvZ3JhbVwiIFwkezErXCJcJEBcIn0KKyIKKwkgIDs7CisKKwkqKQorCSAgJEVDSE8gIlwKKyAgICAgIGV4ZWMgXCJcJHByb2dkaXIvXCRwcm9ncmFtXCIgXCR7MStcIlwkQFwifQorIgorCSAgOzsKKwllc2FjCisJJEVDSE8gIlwKKyAgICAgIFwkRUNITyBcIlwkMDogY2Fubm90IGV4ZWMgXCRwcm9ncmFtIFwkKlwiIDE+JjIKKyAgICAgIGV4aXQgMQorICAgIGZpCisgIGVsc2UKKyAgICAjIFRoZSBwcm9ncmFtIGRvZXNuJ3QgZXhpc3QuCisgICAgXCRFQ0hPIFwiXCQwOiBlcnJvcjogXFxcYFwkcHJvZ2Rpci9cJHByb2dyYW0nIGRvZXMgbm90IGV4aXN0XCIgMT4mMgorICAgIFwkRUNITyBcIlRoaXMgc2NyaXB0IGlzIGp1c3QgYSB3cmFwcGVyIGZvciBcJHByb2dyYW0uXCIgMT4mMgorICAgICRFQ0hPIFwiU2VlIHRoZSAkUEFDS0FHRSBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLlwiIDE+JjIKKyAgICBleGl0IDEKKyAgZmkKK2ZpXAorIgorfQorIyBlbmQ6IGZ1bmNfZW1pdF93cmFwcGVyX3BhcnQyCisKKworIyBmdW5jX2VtaXRfd3JhcHBlciBbYXJnPW5vXQorIworIyBFbWl0IGEgbGlidG9vbCB3cmFwcGVyIHNjcmlwdCBvbiBzdGRvdXQuCisjIERvbid0IGRpcmVjdGx5IG9wZW4gYSBmaWxlIGJlY2F1c2Ugd2UgbWF5IHdhbnQgdG8KKyMgaW5jb3Jwb3JhdGUgdGhlIHNjcmlwdCBjb250ZW50cyB3aXRoaW4gYSBjeWd3aW4vbWluZ3cKKyMgd3JhcHBlciBleGVjdXRhYmxlLiAgTXVzdCBPTkxZIGJlIGNhbGxlZCBmcm9tIHdpdGhpbgorIyBmdW5jX21vZGVfbGluayBiZWNhdXNlIGl0IGRlcGVuZHMgb24gYSBudW1iZXIgb2YgdmFyaWFibGVzCisjIHNldCB0aGVyZWluLgorIworIyBBUkcgaXMgdGhlIHZhbHVlIHRoYXQgdGhlIFdSQVBQRVJfU0NSSVBUX0JFTE9OR1NfSU5fT0JKRElSCisjIHZhcmlhYmxlIHdpbGwgdGFrZS4gIElmICd5ZXMnLCB0aGVuIHRoZSBlbWl0dGVkIHNjcmlwdAorIyB3aWxsIGFzc3VtZSB0aGF0IHRoZSBkaXJlY3RvcnkgaW4gd2hpY2ggaXQgaXMgc3RvcmVkIGlzCisjIHRoZSAkb2JqZGlyIGRpcmVjdG9yeS4gIFRoaXMgaXMgYSBjeWd3aW4vbWluZ3ctc3BlY2lmaWMKKyMgYmVoYXZpb3IuCitmdW5jX2VtaXRfd3JhcHBlciAoKQoreworCWZ1bmNfZW1pdF93cmFwcGVyX2FyZzE9bm8KKwlpZiB0ZXN0IC1uICIkMSIgOyB0aGVuCisJICBmdW5jX2VtaXRfd3JhcHBlcl9hcmcxPSQxCisJZmkKKworCSMgc3BsaXQgdGhpcyB1cCBzbyB0aGF0IGZ1bmNfZW1pdF9jd3JhcHBlcmV4ZV9zcmMKKwkjIGNhbiBjYWxsIGVhY2ggcGFydCBpbmRlcGVuZGVudGx5LgorCWZ1bmNfZW1pdF93cmFwcGVyX3BhcnQxICIke2Z1bmNfZW1pdF93cmFwcGVyX2FyZzF9IgorCWZ1bmNfZW1pdF93cmFwcGVyX3BhcnQyICIke2Z1bmNfZW1pdF93cmFwcGVyX2FyZzF9IgorfQorCisKKyMgZnVuY190b19ob3N0X3BhdGggYXJnCisjCisjIENvbnZlcnQgcGF0aHMgdG8gaG9zdCBmb3JtYXQgd2hlbiB1c2VkIHdpdGggYnVpbGQgdG9vbHMuCisjIEludGVuZGVkIGZvciB1c2Ugd2l0aCAibmF0aXZlIiBtaW5ndyAod2hlcmUgbGlidG9vbCBpdHNlbGYKKyMgaXMgcnVubmluZyB1bmRlciB0aGUgbXN5cyBzaGVsbCksIG9yIGluIHRoZSBmb2xsb3dpbmcgY3Jvc3MtCisjIGJ1aWxkIGVudmlyb25tZW50czoKKyMgICAgJGJ1aWxkICAgICAgICAgICRob3N0CisjICAgIG1pbmd3IChtc3lzKSAgICBtaW5ndyAgW2UuZy4gbmF0aXZlXQorIyAgICBjeWd3aW4gICAgICAgICAgbWluZ3cKKyMgICAgKm5peCArIHdpbmUgICAgIG1pbmd3CisjIHdoZXJlIHdpbmUgaXMgZXF1aXBwZWQgd2l0aCB0aGUgYHdpbmVwYXRoJyBleGVjdXRhYmxlLgorIyBJbiB0aGUgbmF0aXZlIG1pbmd3IGNhc2UsIHRoZSAobXN5cykgc2hlbGwgYXV0b21hdGljYWxseQorIyBjb252ZXJ0cyBwYXRocyBmb3IgYW55IG5vbi1tc3lzIGFwcGxpY2F0aW9ucyBpdCBsYXVuY2hlcywKKyMgYnV0IHRoYXQgZmFjaWxpdHkgaXNuJ3QgYXZhaWxhYmxlIGZyb20gaW5zaWRlIHRoZSBjd3JhcHBlci4KKyMgU2ltaWxhciBhY2NvbW1vZGF0aW9ucyBhcmUgbmVjZXNzYXJ5IGZvciAkaG9zdCBtaW5ndyBhbmQKKyMgJGJ1aWxkIGN5Z3dpbi4gIENhbGxpbmcgdGhpcyBmdW5jdGlvbiBkb2VzIG5vIGhhcm0gZm9yIG90aGVyCisjICRob3N0LyRidWlsZCBjb21iaW5hdGlvbnMgbm90IGxpc3RlZCBhYm92ZS4KKyMKKyMgQVJHIGlzIHRoZSBwYXRoIChvbiAkYnVpbGQpIHRoYXQgc2hvdWxkIGJlIGNvbnZlcnRlZCB0bworIyB0aGUgcHJvcGVyIHJlcHJlc2VudGF0aW9uIGZvciAkaG9zdC4gVGhlIHJlc3VsdCBpcyBzdG9yZWQKKyMgaW4gJGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdC4KK2Z1bmNfdG9faG9zdF9wYXRoICgpCit7CisgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0iJDEiCisgIGlmIHRlc3QgLW4gIiQxIiA7IHRoZW4KKyAgICBjYXNlICRob3N0IGluCisgICAgICAqbWluZ3cqICkKKyAgICAgICAgbHRfc2VkX25haXZlX2JhY2tzbGFzaGlmeT0nc3xcXFxcKnxcXHxnO3N8L3xcXHxnO3N8XFx8XFxcXHxnJworICAgICAgICBjYXNlICRidWlsZCBpbgorICAgICAgICAgICptaW5ndyogKSAjIGFjdHVhbGx5LCBtc3lzCisgICAgICAgICAgICAjIGF3a3dhcmQ6IGNtZCBhcHBlbmRzIHNwYWNlcyB0byByZXN1bHQKKyAgICAgICAgICAgIGx0X3NlZF9zdHJpcF90cmFpbGluZ19zcGFjZXM9InMvWyBdKlwkLy8iCisgICAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aF90bXAxPWAoIGNtZCAvL2MgZWNobyAiJDEiIHxcCisgICAgICAgICAgICAgICRTRUQgLWUgIiRsdF9zZWRfc3RyaXBfdHJhaWxpbmdfc3BhY2VzIiApIDI+L2Rldi9udWxsIHx8IGVjaG8gIiJgCisgICAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9YGVjaG8gIiRmdW5jX3RvX2hvc3RfcGF0aF90bXAxIiB8XAorICAgICAgICAgICAgICAkU0VEIC1lICIkbHRfc2VkX25haXZlX2JhY2tzbGFzaGlmeSJgCisgICAgICAgICAgICA7OworICAgICAgICAgICpjeWd3aW4qICkKKyAgICAgICAgICAgIGZ1bmNfdG9faG9zdF9wYXRoX3RtcDE9YGN5Z3BhdGggLXcgIiQxImAKKyAgICAgICAgICAgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD1gZWNobyAiJGZ1bmNfdG9faG9zdF9wYXRoX3RtcDEiIHxcCisgICAgICAgICAgICAgICRTRUQgLWUgIiRsdF9zZWRfbmFpdmVfYmFja3NsYXNoaWZ5ImAKKyAgICAgICAgICAgIDs7CisgICAgICAgICAgKiApCisgICAgICAgICAgICAjIFVuZm9ydHVuYXRlbHksIHdpbmVwYXRoIGRvZXMgbm90IGV4aXQgd2l0aCBhIG5vbi16ZXJvCisgICAgICAgICAgICAjIGVycm9yIGNvZGUsIHNvIHdlIGFyZSBmb3JjZWQgdG8gY2hlY2sgdGhlIGNvbnRlbnRzIG9mCisgICAgICAgICAgICAjIHN0ZG91dC4gT24gdGhlIG90aGVyIGhhbmQsIGlmIHRoZSBjb21tYW5kIGlzIG5vdAorICAgICAgICAgICAgIyBmb3VuZCwgdGhlIHNoZWxsIHdpbGwgc2V0IGFuIGV4aXQgY29kZSBvZiAxMjcgYW5kIHByaW50CisgICAgICAgICAgICAjICphbiBlcnJvciBtZXNzYWdlKiB0byBzdGRvdXQuIFNvIHdlIG11c3QgY2hlY2sgZm9yIGJvdGgKKyAgICAgICAgICAgICMgZXJyb3IgY29kZSBvZiB6ZXJvIEFORCBub24tZW1wdHkgc3Rkb3V0LCB3aGljaCBleHBsYWlucworICAgICAgICAgICAgIyB0aGUgb2RkIGNvbnN0cnVjdGlvbjoKKyAgICAgICAgICAgIGZ1bmNfdG9faG9zdF9wYXRoX3RtcDE9YHdpbmVwYXRoIC13ICIkMSIgMj4vZGV2L251bGxgCisgICAgICAgICAgICBpZiB0ZXN0ICIkPyIgLWVxIDAgJiYgdGVzdCAtbiAiJHtmdW5jX3RvX2hvc3RfcGF0aF90bXAxfSI7IHRoZW4KKyAgICAgICAgICAgICAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PWBlY2hvICIkZnVuY190b19ob3N0X3BhdGhfdG1wMSIgfFwKKyAgICAgICAgICAgICAgICAkU0VEIC1lICIkbHRfc2VkX25haXZlX2JhY2tzbGFzaGlmeSJgCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICMgQWxsb3cgd2FybmluZyBiZWxvdy4KKyAgICAgICAgICAgICAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSIiCisgICAgICAgICAgICBmaQorICAgICAgICAgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgICBpZiB0ZXN0IC16ICIkZnVuY190b19ob3N0X3BhdGhfcmVzdWx0IiA7IHRoZW4KKyAgICAgICAgICBmdW5jX2Vycm9yICJDb3VsZCBub3QgZGV0ZXJtaW5lIGhvc3QgcGF0aCBjb3JyZXNwb25kaW5nIHRvIgorICAgICAgICAgIGZ1bmNfZXJyb3IgIiAgJyQxJyIKKyAgICAgICAgICBmdW5jX2Vycm9yICJDb250aW51aW5nLCBidXQgdW5pbnN0YWxsZWQgZXhlY3V0YWJsZXMgbWF5IG5vdCB3b3JrLiIKKyAgICAgICAgICAjIEZhbGxiYWNrOgorICAgICAgICAgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0iJDEiCisgICAgICAgIGZpCisgICAgICAgIDs7CisgICAgZXNhYworICBmaQorfQorIyBlbmQ6IGZ1bmNfdG9faG9zdF9wYXRoCisKKyMgZnVuY190b19ob3N0X3BhdGhsaXN0IGFyZworIworIyBDb252ZXJ0IHBhdGhsaXN0cyB0byBob3N0IGZvcm1hdCB3aGVuIHVzZWQgd2l0aCBidWlsZCB0b29scy4KKyMgU2VlIGZ1bmNfdG9faG9zdF9wYXRoKCksIGFib3ZlLiBUaGlzIGZ1bmN0aW9uIHN1cHBvcnRzIHRoZQorIyBmb2xsb3dpbmcgJGJ1aWxkLyRob3N0IGNvbWJpbmF0aW9ucyAoYnV0IGRvZXMgbm8gaGFybSBmb3IKKyMgY29tYmluYXRpb25zIG5vdCBsaXN0ZWQgaGVyZSk6CisjICAgICRidWlsZCAgICAgICAgICAkaG9zdAorIyAgICBtaW5ndyAobXN5cykgICAgbWluZ3cgIFtlLmcuIG5hdGl2ZV0KKyMgICAgY3lnd2luICAgICAgICAgIG1pbmd3CisjICAgICpuaXggKyB3aW5lICAgICBtaW5ndworIworIyBQYXRoIHNlcGFyYXRvcnMgYXJlIGFsc28gY29udmVydGVkIGZyb20gJGJ1aWxkIGZvcm1hdCB0bworIyAkaG9zdCBmb3JtYXQuIElmIEFSRyBiZWdpbnMgb3IgZW5kcyB3aXRoIGEgcGF0aCBzZXBhcmF0b3IKKyMgY2hhcmFjdGVyLCBpdCBpcyBwcmVzZXJ2ZWQgKGJ1dCBjb252ZXJ0ZWQgdG8gJGhvc3QgZm9ybWF0KQorIyBvbiBvdXRwdXQuCisjCisjIEFSRyBpcyBhIHBhdGhsaXN0IChvbiAkYnVpbGQpIHRoYXQgc2hvdWxkIGJlIGNvbnZlcnRlZCB0bworIyB0aGUgcHJvcGVyIHJlcHJlc2VudGF0aW9uIG9uICRob3N0LiBUaGUgcmVzdWx0IGlzIHN0b3JlZAorIyBpbiAkZnVuY190b19ob3N0X3BhdGhsaXN0X3Jlc3VsdC4KK2Z1bmNfdG9faG9zdF9wYXRobGlzdCAoKQoreworICBmdW5jX3RvX2hvc3RfcGF0aGxpc3RfcmVzdWx0PSIkMSIKKyAgaWYgdGVzdCAtbiAiJDEiIDsgdGhlbgorICAgIGNhc2UgJGhvc3QgaW4KKyAgICAgICptaW5ndyogKQorICAgICAgICBsdF9zZWRfbmFpdmVfYmFja3NsYXNoaWZ5PSdzfFxcXFwqfFxcfGc7c3wvfFxcfGc7c3xcXHxcXFxcfGcnCisgICAgICAgICMgUmVtb3ZlIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHBhdGggc2VwYXJhdG9yIGNoYXJhY3RlcnMgZnJvbQorICAgICAgICAjIEFSRy4gbXN5cyBiZWhhdmlvciBpcyBpbmNvbnNpc3RlbnQgaGVyZSwgY3lncGF0aCB0dXJucyB0aGVtCisgICAgICAgICMgaW50byAnLjsnIGFuZCAnOy4nLCBhbmQgd2luZXBhdGggaWdub3JlcyB0aGVtIGNvbXBsZXRlbHkuCisgICAgICAgIGZ1bmNfdG9faG9zdF9wYXRobGlzdF90bXAyPSIkMSIKKyAgICAgICAgIyBPbmNlIHNldCBmb3IgdGhpcyBjYWxsLCB0aGlzIHZhcmlhYmxlIHNob3VsZCBub3QgYmUKKyAgICAgICAgIyByZWFzc2lnbmVkLiBJdCBpcyB1c2VkIGluIHRoYSBmYWxsYmFjayBjYXNlLgorICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aGxpc3RfdG1wMT1gZWNobyAiJGZ1bmNfdG9faG9zdF9wYXRobGlzdF90bXAyIiB8XAorICAgICAgICAgICRTRUQgLWUgJ3N8XjoqfHwnIC1lICdzfDoqJHx8J2AKKyAgICAgICAgY2FzZSAkYnVpbGQgaW4KKyAgICAgICAgICAqbWluZ3cqICkgIyBBY3R1YWxseSwgbXN5cy4KKyAgICAgICAgICAgICMgQXdrd2FyZDogY21kIGFwcGVuZHMgc3BhY2VzIHRvIHJlc3VsdC4KKyAgICAgICAgICAgIGx0X3NlZF9zdHJpcF90cmFpbGluZ19zcGFjZXM9InMvWyBdKlwkLy8iCisgICAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aGxpc3RfdG1wMj1gKCBjbWQgLy9jIGVjaG8gIiRmdW5jX3RvX2hvc3RfcGF0aGxpc3RfdG1wMSIgfFwKKyAgICAgICAgICAgICAgJFNFRCAtZSAiJGx0X3NlZF9zdHJpcF90cmFpbGluZ19zcGFjZXMiICkgMj4vZGV2L251bGwgfHwgZWNobyAiImAKKyAgICAgICAgICAgIGZ1bmNfdG9faG9zdF9wYXRobGlzdF9yZXN1bHQ9YGVjaG8gIiRmdW5jX3RvX2hvc3RfcGF0aGxpc3RfdG1wMiIgfFwKKyAgICAgICAgICAgICAgJFNFRCAtZSAiJGx0X3NlZF9uYWl2ZV9iYWNrc2xhc2hpZnkiYAorICAgICAgICAgICAgOzsKKyAgICAgICAgICAqY3lnd2luKiApCisgICAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aGxpc3RfdG1wMj1gY3lncGF0aCAtdyAtcCAiJGZ1bmNfdG9faG9zdF9wYXRobGlzdF90bXAxImAKKyAgICAgICAgICAgIGZ1bmNfdG9faG9zdF9wYXRobGlzdF9yZXN1bHQ9YGVjaG8gIiRmdW5jX3RvX2hvc3RfcGF0aGxpc3RfdG1wMiIgfFwKKyAgICAgICAgICAgICAgJFNFRCAtZSAiJGx0X3NlZF9uYWl2ZV9iYWNrc2xhc2hpZnkiYAorICAgICAgICAgICAgOzsKKyAgICAgICAgICAqICkKKyAgICAgICAgICAgICMgdW5mb3J0dW5hdGVseSwgd2luZXBhdGggZG9lc24ndCBjb252ZXJ0IHBhdGhsaXN0cworICAgICAgICAgICAgZnVuY190b19ob3N0X3BhdGhsaXN0X3Jlc3VsdD0iIgorICAgICAgICAgICAgZnVuY190b19ob3N0X3BhdGhsaXN0X29sZElGUz0kSUZTCisgICAgICAgICAgICBJRlM9OgorICAgICAgICAgICAgZm9yIGZ1bmNfdG9faG9zdF9wYXRobGlzdF9mIGluICRmdW5jX3RvX2hvc3RfcGF0aGxpc3RfdG1wMSA7IGRvCisgICAgICAgICAgICAgIElGUz0kZnVuY190b19ob3N0X3BhdGhsaXN0X29sZElGUworICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkZnVuY190b19ob3N0X3BhdGhsaXN0X2YiIDsgdGhlbgorICAgICAgICAgICAgICAgIGZ1bmNfdG9faG9zdF9wYXRoICIkZnVuY190b19ob3N0X3BhdGhsaXN0X2YiCisgICAgICAgICAgICAgICAgaWYgdGVzdCAtbiAiJGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdCIgOyB0aGVuCisgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkZnVuY190b19ob3N0X3BhdGhsaXN0X3Jlc3VsdCIgOyB0aGVuCisgICAgICAgICAgICAgICAgICAgIGZ1bmNfdG9faG9zdF9wYXRobGlzdF9yZXN1bHQ9IiRmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQiCisgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGZ1bmNfdG9faG9zdF9wYXRobGlzdF9yZXN1bHQ9IiRmdW5jX3RvX2hvc3RfcGF0aGxpc3RfcmVzdWx0OyRmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQiCisgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgIElGUz06CisgICAgICAgICAgICBkb25lCisgICAgICAgICAgICBJRlM9JGZ1bmNfdG9faG9zdF9wYXRobGlzdF9vbGRJRlMKKyAgICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgaWYgdGVzdCAteiAiJGZ1bmNfdG9faG9zdF9wYXRobGlzdF9yZXN1bHQiIDsgdGhlbgorICAgICAgICAgIGZ1bmNfZXJyb3IgIkNvdWxkIG5vdCBkZXRlcm1pbmUgdGhlIGhvc3QgcGF0aChzKSBjb3JyZXNwb25kaW5nIHRvIgorICAgICAgICAgIGZ1bmNfZXJyb3IgIiAgJyQxJyIKKyAgICAgICAgICBmdW5jX2Vycm9yICJDb250aW51aW5nLCBidXQgdW5pbnN0YWxsZWQgZXhlY3V0YWJsZXMgbWF5IG5vdCB3b3JrLiIKKyAgICAgICAgICAjIEZhbGxiYWNrLiBUaGlzIG1heSBicmVhayBpZiAkMSBjb250YWlucyBET1Mtc3R5bGUgZHJpdmUKKyAgICAgICAgICAjIHNwZWNpZmljYXRpb25zLiBUaGUgZml4IGlzIG5vdCB0byBjb21wbGljYXRlIHRoZSBleHByZXNzaW9uCisgICAgICAgICAgIyBiZWxvdywgYnV0IGZvciB0aGUgdXNlciB0byBwcm92aWRlIGEgd29ya2luZyB3aW5lIGluc3RhbGxhdGlvbgorICAgICAgICAgICMgd2l0aCB3aW5lcGF0aCBzbyB0aGF0IHBhdGggdHJhbnNsYXRpb24gaW4gdGhlIGNyb3NzLXRvLW1pbmd3CisgICAgICAgICAgIyBjYXNlIHdvcmtzIHByb3Blcmx5LgorICAgICAgICAgIGx0X3JlcGxhY2VfcGF0aHNlcF9uaXhfdG9fZG9zPSJzfDp8O3xnIgorICAgICAgICAgIGZ1bmNfdG9faG9zdF9wYXRobGlzdF9yZXN1bHQ9YGVjaG8gIiRmdW5jX3RvX2hvc3RfcGF0aGxpc3RfdG1wMSIgfFwKKyAgICAgICAgICAgICRTRUQgLWUgIiRsdF9yZXBsYWNlX3BhdGhzZXBfbml4X3RvX2RvcyJgCisgICAgICAgIGZpCisgICAgICAgICMgTm93LCBhZGQgdGhlIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHBhdGggc2VwYXJhdG9ycyBiYWNrCisgICAgICAgIGNhc2UgIiQxIiBpbgorICAgICAgICAgIDoqICkgZnVuY190b19ob3N0X3BhdGhsaXN0X3Jlc3VsdD0iOyRmdW5jX3RvX2hvc3RfcGF0aGxpc3RfcmVzdWx0IgorICAgICAgICAgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgICBjYXNlICIkMSIgaW4KKyAgICAgICAgICAqOiApIGZ1bmNfdG9faG9zdF9wYXRobGlzdF9yZXN1bHQ9IiRmdW5jX3RvX2hvc3RfcGF0aGxpc3RfcmVzdWx0OyIKKyAgICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgOzsKKyAgICBlc2FjCisgIGZpCit9CisjIGVuZDogZnVuY190b19ob3N0X3BhdGhsaXN0CisKKyMgZnVuY19lbWl0X2N3cmFwcGVyZXhlX3NyYworIyBlbWl0IHRoZSBzb3VyY2UgY29kZSBmb3IgYSB3cmFwcGVyIGV4ZWN1dGFibGUgb24gc3Rkb3V0CisjIE11c3QgT05MWSBiZSBjYWxsZWQgZnJvbSB3aXRoaW4gZnVuY19tb2RlX2xpbmsgYmVjYXVzZQorIyBpdCBkZXBlbmRzIG9uIGEgbnVtYmVyIG9mIHZhcmlhYmxlIHNldCB0aGVyZWluLgorZnVuY19lbWl0X2N3cmFwcGVyZXhlX3NyYyAoKQoreworCWNhdCA8PEVPRgorCisvKiAkY3dyYXBwZXJzb3VyY2UgLSB0ZW1wb3Jhcnkgd3JhcHBlciBleGVjdXRhYmxlIGZvciAkb2JqZGlyLyRvdXRwdXRuYW1lCisgICBHZW5lcmF0ZWQgYnkgJFBST0dSQU0gKEdOVSAkUEFDS0FHRSRUSU1FU1RBTVApICRWRVJTSU9OCisKKyAgIFRoZSAkb3V0cHV0IHByb2dyYW0gY2Fubm90IGJlIGRpcmVjdGx5IGV4ZWN1dGVkIHVudGlsIGFsbCB0aGUgbGlidG9vbAorICAgbGlicmFyaWVzIHRoYXQgaXQgZGVwZW5kcyBvbiBhcmUgaW5zdGFsbGVkLgorCisgICBUaGlzIHdyYXBwZXIgZXhlY3V0YWJsZSBzaG91bGQgbmV2ZXIgYmUgbW92ZWQgb3V0IG9mIHRoZSBidWlsZCBkaXJlY3RvcnkuCisgICBJZiBpdCBpcywgaXQgd2lsbCBub3Qgb3BlcmF0ZSBjb3JyZWN0bHkuCisKKyAgIEN1cnJlbnRseSwgaXQgc2ltcGx5IGV4ZWNzIHRoZSB3cmFwcGVyICpzY3JpcHQqICIkU0hFTEwgJG91dHB1dCIsCisgICBidXQgY291bGQgZXZlbnR1YWxseSBhYnNvcmIgYWxsIG9mIHRoZSBzY3JpcHRzIGZ1bmN0aW9uYWxpdHkgYW5kCisgICBleGVjICRvYmpkaXIvJG91dHB1dG5hbWUgZGlyZWN0bHkuCisqLworRU9GCisJICAgIGNhdCA8PCJFT0YiCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpZmRlZiBfTVNDX1ZFUgorIyBpbmNsdWRlIDxkaXJlY3QuaD4KKyMgaW5jbHVkZSA8cHJvY2Vzcy5oPgorIyBpbmNsdWRlIDxpby5oPgorIyBkZWZpbmUgc2V0bW9kZSBfc2V0bW9kZQorI2Vsc2UKKyMgaW5jbHVkZSA8dW5pc3RkLmg+CisjIGluY2x1ZGUgPHN0ZGludC5oPgorIyBpZmRlZiBfX0NZR1dJTl9fCisjICBpbmNsdWRlIDxpby5oPgorIyAgZGVmaW5lIEhBVkVfU0VURU5WCisjICBpZmRlZiBfX1NUUklDVF9BTlNJX18KK2NoYXIgKnJlYWxwYXRoIChjb25zdCBjaGFyICosIGNoYXIgKik7CitpbnQgcHV0ZW52IChjaGFyICopOworaW50IHNldGVudiAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGludCk7CisjICBlbmRpZgorIyBlbmRpZgorI2VuZGlmCisjaW5jbHVkZSA8bWFsbG9jLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKworI2lmIGRlZmluZWQoUEFUSF9NQVgpCisjIGRlZmluZSBMVF9QQVRITUFYIFBBVEhfTUFYCisjZWxpZiBkZWZpbmVkKE1BWFBBVEhMRU4pCisjIGRlZmluZSBMVF9QQVRITUFYIE1BWFBBVEhMRU4KKyNlbHNlCisjIGRlZmluZSBMVF9QQVRITUFYIDEwMjQKKyNlbmRpZgorCisjaWZuZGVmIFNfSVhPVEgKKyMgZGVmaW5lIFNfSVhPVEggMAorI2VuZGlmCisjaWZuZGVmIFNfSVhHUlAKKyMgZGVmaW5lIFNfSVhHUlAgMAorI2VuZGlmCisKKyNpZmRlZiBfTVNDX1ZFUgorIyBkZWZpbmUgU19JWFVTUiBfU19JRVhFQworIyBkZWZpbmUgc3RhdCBfc3RhdAorIyBpZm5kZWYgX0lOVFBUUl9UX0RFRklORUQKKyMgIGRlZmluZSBpbnRwdHJfdCBpbnQKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZuZGVmIERJUl9TRVBBUkFUT1IKKyMgZGVmaW5lIERJUl9TRVBBUkFUT1IgJy8nCisjIGRlZmluZSBQQVRIX1NFUEFSQVRPUiAnOicKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoX1dJTjMyKSB8fCBkZWZpbmVkIChfX01TRE9TX18pIHx8IGRlZmluZWQgKF9fREpHUFBfXykgfHwgXAorICBkZWZpbmVkIChfX09TMl9fKQorIyBkZWZpbmUgSEFWRV9ET1NfQkFTRURfRklMRV9TWVNURU0KKyMgZGVmaW5lIEZPUEVOX1dCICJ3YiIKKyMgaWZuZGVmIERJUl9TRVBBUkFUT1JfMgorIyAgZGVmaW5lIERJUl9TRVBBUkFUT1JfMiAnXFwnCisjIGVuZGlmCisjIGlmbmRlZiBQQVRIX1NFUEFSQVRPUl8yCisjICBkZWZpbmUgUEFUSF9TRVBBUkFUT1JfMiAnOycKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZuZGVmIERJUl9TRVBBUkFUT1JfMgorIyBkZWZpbmUgSVNfRElSX1NFUEFSQVRPUihjaCkgKChjaCkgPT0gRElSX1NFUEFSQVRPUikKKyNlbHNlIC8qIERJUl9TRVBBUkFUT1JfMiAqLworIyBkZWZpbmUgSVNfRElSX1NFUEFSQVRPUihjaCkgXAorCSgoKGNoKSA9PSBESVJfU0VQQVJBVE9SKSB8fCAoKGNoKSA9PSBESVJfU0VQQVJBVE9SXzIpKQorI2VuZGlmIC8qIERJUl9TRVBBUkFUT1JfMiAqLworCisjaWZuZGVmIFBBVEhfU0VQQVJBVE9SXzIKKyMgZGVmaW5lIElTX1BBVEhfU0VQQVJBVE9SKGNoKSAoKGNoKSA9PSBQQVRIX1NFUEFSQVRPUikKKyNlbHNlIC8qIFBBVEhfU0VQQVJBVE9SXzIgKi8KKyMgZGVmaW5lIElTX1BBVEhfU0VQQVJBVE9SKGNoKSAoKGNoKSA9PSBQQVRIX1NFUEFSQVRPUl8yKQorI2VuZGlmIC8qIFBBVEhfU0VQQVJBVE9SXzIgKi8KKworI2lmZGVmIF9fQ1lHV0lOX18KKyMgZGVmaW5lIEZPUEVOX1dCICJ3YiIKKyNlbmRpZgorCisjaWZuZGVmIEZPUEVOX1dCCisjIGRlZmluZSBGT1BFTl9XQiAidyIKKyNlbmRpZgorI2lmbmRlZiBfT19CSU5BUlkKKyMgZGVmaW5lIF9PX0JJTkFSWSAwCisjZW5kaWYKKworI2RlZmluZSBYTUFMTE9DKHR5cGUsIG51bSkgICAgICAoKHR5cGUgKikgeG1hbGxvYyAoKG51bSkgKiBzaXplb2YodHlwZSkpKQorI2RlZmluZSBYRlJFRShzdGFsZSkgZG8geyBcCisgIGlmIChzdGFsZSkgeyBmcmVlICgodm9pZCAqKSBzdGFsZSk7IHN0YWxlID0gMDsgfSBcCit9IHdoaWxlICgwKQorCisjdW5kZWYgTFRXUkFQUEVSX0RFQlVHUFJJTlRGCisjaWYgZGVmaW5lZCBERUJVR1dSQVBQRVIKKyMgZGVmaW5lIExUV1JBUFBFUl9ERUJVR1BSSU5URihhcmdzKSBsdHdyYXBwZXJfZGVidWdwcmludGYgYXJncworc3RhdGljIHZvaWQKK2x0d3JhcHBlcl9kZWJ1Z3ByaW50ZiAoY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisgICAgdmFfbGlzdCBhcmdzOworICAgIHZhX3N0YXJ0IChhcmdzLCBmbXQpOworICAgICh2b2lkKSB2ZnByaW50ZiAoc3RkZXJyLCBmbXQsIGFyZ3MpOworICAgIHZhX2VuZCAoYXJncyk7Cit9CisjZWxzZQorIyBkZWZpbmUgTFRXUkFQUEVSX0RFQlVHUFJJTlRGKGFyZ3MpCisjZW5kaWYKKworY29uc3QgY2hhciAqcHJvZ3JhbV9uYW1lID0gTlVMTDsKKwordm9pZCAqeG1hbGxvYyAoc2l6ZV90IG51bSk7CitjaGFyICp4c3RyZHVwIChjb25zdCBjaGFyICpzdHJpbmcpOworY29uc3QgY2hhciAqYmFzZV9uYW1lIChjb25zdCBjaGFyICpuYW1lKTsKK2NoYXIgKmZpbmRfZXhlY3V0YWJsZSAoY29uc3QgY2hhciAqd3JhcHBlcik7CitjaGFyICpjaGFzZV9zeW1saW5rcyAoY29uc3QgY2hhciAqcGF0aHNwZWMpOworaW50IG1ha2VfZXhlY3V0YWJsZSAoY29uc3QgY2hhciAqcGF0aCk7CitpbnQgY2hlY2tfZXhlY3V0YWJsZSAoY29uc3QgY2hhciAqcGF0aCk7CitjaGFyICpzdHJlbmR6YXAgKGNoYXIgKnN0ciwgY29uc3QgY2hhciAqcGF0KTsKK3ZvaWQgbHRfZmF0YWwgKGNvbnN0IGNoYXIgKm1lc3NhZ2UsIC4uLik7Cit2b2lkIGx0X3NldGVudiAoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpOworY2hhciAqbHRfZXh0ZW5kX3N0ciAoY29uc3QgY2hhciAqb3JpZ192YWx1ZSwgY29uc3QgY2hhciAqYWRkLCBpbnQgdG9fZW5kKTsKK3ZvaWQgbHRfb3B0X3Byb2Nlc3NfZW52X3NldCAoY29uc3QgY2hhciAqYXJnKTsKK3ZvaWQgbHRfb3B0X3Byb2Nlc3NfZW52X3ByZXBlbmQgKGNvbnN0IGNoYXIgKmFyZyk7Cit2b2lkIGx0X29wdF9wcm9jZXNzX2Vudl9hcHBlbmQgKGNvbnN0IGNoYXIgKmFyZyk7CitpbnQgbHRfc3BsaXRfbmFtZV92YWx1ZSAoY29uc3QgY2hhciAqYXJnLCBjaGFyKiogbmFtZSwgY2hhcioqIHZhbHVlKTsKK3ZvaWQgbHRfdXBkYXRlX2V4ZV9wYXRoIChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSk7Cit2b2lkIGx0X3VwZGF0ZV9saWJfcGF0aCAoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpOworCitzdGF0aWMgY29uc3QgY2hhciAqc2NyaXB0X3RleHRfcGFydDEgPQorRU9GCisKKwkgICAgZnVuY19lbWl0X3dyYXBwZXJfcGFydDEgeWVzIHwKKwkgICAgICAgICRTRUQgLWUgJ3MvXChbXFwiXVwpL1xcXDEvZycgXAorCSAgICAgICAgICAgICAtZSAncy9eLyAgIi8nIC1lICdzLyQvXFxuIi8nCisJICAgIGVjaG8gIjsiCisJICAgIGNhdCA8PEVPRgorCitzdGF0aWMgY29uc3QgY2hhciAqc2NyaXB0X3RleHRfcGFydDIgPQorRU9GCisJICAgIGZ1bmNfZW1pdF93cmFwcGVyX3BhcnQyIHllcyB8CisJICAgICAgICAkU0VEIC1lICdzL1woW1xcIl1cKS9cXFwxL2cnIFwKKwkgICAgICAgICAgICAgLWUgJ3MvXi8gICIvJyAtZSAncy8kL1xcbiIvJworCSAgICBlY2hvICI7IgorCisJICAgIGNhdCA8PEVPRgorY29uc3QgY2hhciAqIE1BR0lDX0VYRSA9ICIkbWFnaWNfZXhlIjsKK2NvbnN0IGNoYXIgKiBMSUJfUEFUSF9WQVJOQU1FID0gIiRzaGxpYnBhdGhfdmFyIjsKK0VPRgorCisJICAgIGlmIHRlc3QgIiRzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgiID0geWVzICYmIHRlc3QgLW4gIiRzaGxpYnBhdGhfdmFyIiAmJiB0ZXN0IC1uICIkdGVtcF9ycGF0aCI7IHRoZW4KKyAgICAgICAgICAgICAgZnVuY190b19ob3N0X3BhdGhsaXN0ICIkdGVtcF9ycGF0aCIKKwkgICAgICBjYXQgPDxFT0YKK2NvbnN0IGNoYXIgKiBMSUJfUEFUSF9WQUxVRSAgID0gIiRmdW5jX3RvX2hvc3RfcGF0aGxpc3RfcmVzdWx0IjsKK0VPRgorCSAgICBlbHNlCisJICAgICAgY2F0IDw8IkVPRiIKK2NvbnN0IGNoYXIgKiBMSUJfUEFUSF9WQUxVRSAgID0gIiI7CitFT0YKKwkgICAgZmkKKworCSAgICBpZiB0ZXN0IC1uICIkZGxsc2VhcmNocGF0aCI7IHRoZW4KKyAgICAgICAgICAgICAgZnVuY190b19ob3N0X3BhdGhsaXN0ICIkZGxsc2VhcmNocGF0aDoiCisJICAgICAgY2F0IDw8RU9GCitjb25zdCBjaGFyICogRVhFX1BBVEhfVkFSTkFNRSA9ICJQQVRIIjsKK2NvbnN0IGNoYXIgKiBFWEVfUEFUSF9WQUxVRSAgID0gIiRmdW5jX3RvX2hvc3RfcGF0aGxpc3RfcmVzdWx0IjsKK0VPRgorCSAgICBlbHNlCisJICAgICAgY2F0IDw8IkVPRiIKK2NvbnN0IGNoYXIgKiBFWEVfUEFUSF9WQVJOQU1FID0gIiI7Citjb25zdCBjaGFyICogRVhFX1BBVEhfVkFMVUUgICA9ICIiOworRU9GCisJICAgIGZpCisKKwkgICAgaWYgdGVzdCAiJGZhc3RfaW5zdGFsbCIgPSB5ZXM7IHRoZW4KKwkgICAgICBjYXQgPDxFT0YKK2NvbnN0IGNoYXIgKiBUQVJHRVRfUFJPR1JBTV9OQU1FID0gImx0LSRvdXRwdXRuYW1lIjsgLyogaG9wZWZ1bGx5LCBubyAuZXhlICovCitFT0YKKwkgICAgZWxzZQorCSAgICAgIGNhdCA8PEVPRgorY29uc3QgY2hhciAqIFRBUkdFVF9QUk9HUkFNX05BTUUgPSAiJG91dHB1dG5hbWUiOyAvKiBob3BlZnVsbHksIG5vIC5leGUgKi8KK0VPRgorCSAgICBmaQorCisKKwkgICAgY2F0IDw8IkVPRiIKKworI2RlZmluZSBMVFdSQVBQRVJfT1BUSU9OX1BSRUZJWCAgICAgICAgICItLWx0LSIKKyNkZWZpbmUgTFRXUkFQUEVSX09QVElPTl9QUkVGSVhfTEVOR1RIICA1CisKK3N0YXRpYyBjb25zdCBzaXplX3Qgb3B0X3ByZWZpeF9sZW4gICAgICAgICA9IExUV1JBUFBFUl9PUFRJT05fUFJFRklYX0xFTkdUSDsKK3N0YXRpYyBjb25zdCBjaGFyICpsdHdyYXBwZXJfb3B0aW9uX3ByZWZpeCA9IExUV1JBUFBFUl9PUFRJT05fUFJFRklYOworCitzdGF0aWMgY29uc3QgY2hhciAqZHVtcHNjcmlwdF9vcHQgICAgICAgPSBMVFdSQVBQRVJfT1BUSU9OX1BSRUZJWCAiZHVtcC1zY3JpcHQiOworCitzdGF0aWMgY29uc3Qgc2l6ZV90IGVudl9zZXRfb3B0X2xlbiAgICAgPSBMVFdSQVBQRVJfT1BUSU9OX1BSRUZJWF9MRU5HVEggKyA3Oworc3RhdGljIGNvbnN0IGNoYXIgKmVudl9zZXRfb3B0ICAgICAgICAgID0gTFRXUkFQUEVSX09QVElPTl9QUkVGSVggImVudi1zZXQiOworICAvKiBhcmd1bWVudCBpcyBwdXRlbnYtc3R5bGUgImZvbz1iYXIiLCB2YWx1ZSBvZiBmb28gaXMgc2V0IHRvIGJhciAqLworCitzdGF0aWMgY29uc3Qgc2l6ZV90IGVudl9wcmVwZW5kX29wdF9sZW4gPSBMVFdSQVBQRVJfT1BUSU9OX1BSRUZJWF9MRU5HVEggKyAxMTsKK3N0YXRpYyBjb25zdCBjaGFyICplbnZfcHJlcGVuZF9vcHQgICAgICA9IExUV1JBUFBFUl9PUFRJT05fUFJFRklYICJlbnYtcHJlcGVuZCI7CisgIC8qIGFyZ3VtZW50IGlzIHB1dGVudi1zdHlsZSAiZm9vPWJhciIsIG5ldyB2YWx1ZSBvZiBmb28gaXMgYmFyJHtmb299ICovCisKK3N0YXRpYyBjb25zdCBzaXplX3QgZW52X2FwcGVuZF9vcHRfbGVuICA9IExUV1JBUFBFUl9PUFRJT05fUFJFRklYX0xFTkdUSCArIDEwOworc3RhdGljIGNvbnN0IGNoYXIgKmVudl9hcHBlbmRfb3B0ICAgICAgID0gTFRXUkFQUEVSX09QVElPTl9QUkVGSVggImVudi1hcHBlbmQiOworICAvKiBhcmd1bWVudCBpcyBwdXRlbnYtc3R5bGUgImZvbz1iYXIiLCBuZXcgdmFsdWUgb2YgZm9vIGlzICR7Zm9vfWJhciAqLworCitpbnQKK21haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgIGNoYXIgKipuZXdhcmd6OworICBpbnQgIG5ld2FyZ2M7CisgIGNoYXIgKnRtcF9wYXRoc3BlYzsKKyAgY2hhciAqYWN0dWFsX2N3cmFwcGVyX3BhdGg7CisgIGNoYXIgKmFjdHVhbF9jd3JhcHBlcl9uYW1lOworICBjaGFyICp0YXJnZXRfbmFtZTsKKyAgY2hhciAqbHRfYXJndl96ZXJvOworICBpbnRwdHJfdCBydmFsID0gMTI3OworCisgIGludCBpOworCisgIHByb2dyYW1fbmFtZSA9IChjaGFyICopIHhzdHJkdXAgKGJhc2VfbmFtZSAoYXJndlswXSkpOworICBMVFdSQVBQRVJfREVCVUdQUklOVEYgKCgiKG1haW4pIGFyZ3ZbMF0gICAgICA6ICVzXG4iLCBhcmd2WzBdKSk7CisgIExUV1JBUFBFUl9ERUJVR1BSSU5URiAoKCIobWFpbikgcHJvZ3JhbV9uYW1lIDogJXNcbiIsIHByb2dyYW1fbmFtZSkpOworCisgIC8qIHZlcnkgc2ltcGxlIGFyZyBwYXJzaW5nOyBkb24ndCB3YW50IHRvIHJlbHkgb24gZ2V0b3B0ICovCisgIGZvciAoaSA9IDE7IGkgPCBhcmdjOyBpKyspCisgICAgeworICAgICAgaWYgKHN0cmNtcCAoYXJndltpXSwgZHVtcHNjcmlwdF9vcHQpID09IDApCisJeworRU9GCisJICAgIGNhc2UgIiRob3N0IiBpbgorCSAgICAgICptaW5ndyogfCAqY3lnd2luKiApCisJCSMgbWFrZSBzdGRvdXQgdXNlICJ1bml4IiBsaW5lIGVuZGluZ3MKKwkJZWNobyAiICAgICAgICAgIHNldG1vZGUoMSxfT19CSU5BUlkpOyIKKwkJOzsKKwkgICAgICBlc2FjCisKKwkgICAgY2F0IDw8IkVPRiIKKwkgIHByaW50ZiAoIiVzIiwgc2NyaXB0X3RleHRfcGFydDEpOworCSAgcHJpbnRmICgiJXMiLCBzY3JpcHRfdGV4dF9wYXJ0Mik7CisJICByZXR1cm4gMDsKKwl9CisgICAgfQorCisgIG5ld2FyZ3ogPSBYTUFMTE9DIChjaGFyICosIGFyZ2MgKyAxKTsKKyAgdG1wX3BhdGhzcGVjID0gZmluZF9leGVjdXRhYmxlIChhcmd2WzBdKTsKKyAgaWYgKHRtcF9wYXRoc3BlYyA9PSBOVUxMKQorICAgIGx0X2ZhdGFsICgiQ291bGRuJ3QgZmluZCAlcyIsIGFyZ3ZbMF0pOworICBMVFdSQVBQRVJfREVCVUdQUklOVEYgKCgiKG1haW4pIGZvdW5kIGV4ZSAoYmVmb3JlIHN5bWxpbmsgY2hhc2UpIGF0IDogJXNcbiIsCisJCQkgIHRtcF9wYXRoc3BlYykpOworCisgIGFjdHVhbF9jd3JhcHBlcl9wYXRoID0gY2hhc2Vfc3ltbGlua3MgKHRtcF9wYXRoc3BlYyk7CisgIExUV1JBUFBFUl9ERUJVR1BSSU5URiAoKCIobWFpbikgZm91bmQgZXhlIChhZnRlciBzeW1saW5rIGNoYXNlKSBhdCA6ICVzXG4iLAorCQkJICBhY3R1YWxfY3dyYXBwZXJfcGF0aCkpOworICBYRlJFRSAodG1wX3BhdGhzcGVjKTsKKworICBhY3R1YWxfY3dyYXBwZXJfbmFtZSA9IHhzdHJkdXAoIGJhc2VfbmFtZSAoYWN0dWFsX2N3cmFwcGVyX3BhdGgpKTsKKyAgc3RyZW5kemFwIChhY3R1YWxfY3dyYXBwZXJfcGF0aCwgYWN0dWFsX2N3cmFwcGVyX25hbWUpOworCisgIC8qIHdyYXBwZXIgbmFtZSB0cmFuc2Zvcm1zICovCisgIHN0cmVuZHphcCAoYWN0dWFsX2N3cmFwcGVyX25hbWUsICIuZXhlIik7CisgIHRtcF9wYXRoc3BlYyA9IGx0X2V4dGVuZF9zdHIgKGFjdHVhbF9jd3JhcHBlcl9uYW1lLCAiLmV4ZSIsIDEpOworICBYRlJFRSAoYWN0dWFsX2N3cmFwcGVyX25hbWUpOworICBhY3R1YWxfY3dyYXBwZXJfbmFtZSA9IHRtcF9wYXRoc3BlYzsKKyAgdG1wX3BhdGhzcGVjID0gMDsKKworICAvKiB0YXJnZXRfbmFtZSB0cmFuc2Zvcm1zIC0tIHVzZSBhY3R1YWwgdGFyZ2V0IHByb2dyYW0gbmFtZTsgbWlnaHQgaGF2ZSBsdC0gcHJlZml4ICovCisgIHRhcmdldF9uYW1lID0geHN0cmR1cCAoYmFzZV9uYW1lIChUQVJHRVRfUFJPR1JBTV9OQU1FKSk7CisgIHN0cmVuZHphcCAodGFyZ2V0X25hbWUsICIuZXhlIik7CisgIHRtcF9wYXRoc3BlYyA9IGx0X2V4dGVuZF9zdHIgKHRhcmdldF9uYW1lLCAiLmV4ZSIsIDEpOworICBYRlJFRSAodGFyZ2V0X25hbWUpOworICB0YXJnZXRfbmFtZSA9IHRtcF9wYXRoc3BlYzsKKyAgdG1wX3BhdGhzcGVjID0gMDsKKworICBMVFdSQVBQRVJfREVCVUdQUklOVEYgKCgiKG1haW4pIGxpYnRvb2wgdGFyZ2V0IG5hbWU6ICVzXG4iLAorCQkJICB0YXJnZXRfbmFtZSkpOworRU9GCisKKwkgICAgY2F0IDw8RU9GCisgIG5ld2FyZ3pbMF0gPQorICAgIFhNQUxMT0MgKGNoYXIsIChzdHJsZW4gKGFjdHVhbF9jd3JhcHBlcl9wYXRoKSArCisJCSAgICBzdHJsZW4gKCIkb2JqZGlyIikgKyAxICsgc3RybGVuIChhY3R1YWxfY3dyYXBwZXJfbmFtZSkgKyAxKSk7CisgIHN0cmNweSAobmV3YXJnelswXSwgYWN0dWFsX2N3cmFwcGVyX3BhdGgpOworICBzdHJjYXQgKG5ld2FyZ3pbMF0sICIkb2JqZGlyIik7CisgIHN0cmNhdCAobmV3YXJnelswXSwgIi8iKTsKK0VPRgorCisJICAgIGNhdCA8PCJFT0YiCisgIC8qIHN0b3AgaGVyZSwgYW5kIGNvcHkgc28gd2UgZG9uJ3QgaGF2ZSB0byBkbyB0aGlzIHR3aWNlICovCisgIHRtcF9wYXRoc3BlYyA9IHhzdHJkdXAgKG5ld2FyZ3pbMF0pOworCisgIC8qIGRvIE5PVCB3YW50IHRoZSBsdC0gcHJlZml4IGhlcmUsIHNvIHVzZSBhY3R1YWxfY3dyYXBwZXJfbmFtZSAqLworICBzdHJjYXQgKG5ld2FyZ3pbMF0sIGFjdHVhbF9jd3JhcHBlcl9uYW1lKTsKKworICAvKiBETyB3YW50IHRoZSBsdC0gcHJlZml4IGhlcmUgaWYgaXQgZXhpc3RzLCBzbyB1c2UgdGFyZ2V0X25hbWUgKi8KKyAgbHRfYXJndl96ZXJvID0gbHRfZXh0ZW5kX3N0ciAodG1wX3BhdGhzcGVjLCB0YXJnZXRfbmFtZSwgMSk7CisgIFhGUkVFICh0bXBfcGF0aHNwZWMpOworICB0bXBfcGF0aHNwZWMgPSBOVUxMOworRU9GCisKKwkgICAgY2FzZSAkaG9zdF9vcyBpbgorCSAgICAgIG1pbmd3KikKKwkgICAgY2F0IDw8IkVPRiIKKyAgeworICAgIGNoYXIqIHA7CisgICAgd2hpbGUgKChwID0gc3RyY2hyIChuZXdhcmd6WzBdLCAnXFwnKSkgIT0gTlVMTCkKKyAgICAgIHsKKwkqcCA9ICcvJzsKKyAgICAgIH0KKyAgICB3aGlsZSAoKHAgPSBzdHJjaHIgKGx0X2FyZ3ZfemVybywgJ1xcJykpICE9IE5VTEwpCisgICAgICB7CisJKnAgPSAnLyc7CisgICAgICB9CisgIH0KK0VPRgorCSAgICA7OworCSAgICBlc2FjCisKKwkgICAgY2F0IDw8IkVPRiIKKyAgWEZSRUUgKHRhcmdldF9uYW1lKTsKKyAgWEZSRUUgKGFjdHVhbF9jd3JhcHBlcl9wYXRoKTsKKyAgWEZSRUUgKGFjdHVhbF9jd3JhcHBlcl9uYW1lKTsKKworICBsdF9zZXRlbnYgKCJCSU5fU0giLCAieHBnNCIpOyAvKiBmb3IgVHJ1NjQgKi8KKyAgbHRfc2V0ZW52ICgiRFVBTENBU0UiLCAiMSIpOyAgLyogZm9yIE1TSyBzaCAqLworICBsdF91cGRhdGVfbGliX3BhdGggKExJQl9QQVRIX1ZBUk5BTUUsIExJQl9QQVRIX1ZBTFVFKTsKKyAgbHRfdXBkYXRlX2V4ZV9wYXRoIChFWEVfUEFUSF9WQVJOQU1FLCBFWEVfUEFUSF9WQUxVRSk7CisKKyAgbmV3YXJnYz0wOworICBmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrKQorICAgIHsKKyAgICAgIGlmIChzdHJuY21wIChhcmd2W2ldLCBlbnZfc2V0X29wdCwgZW52X3NldF9vcHRfbGVuKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgaWYgKGFyZ3ZbaV1bZW52X3NldF9vcHRfbGVuXSA9PSAnPScpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnAgPSBhcmd2W2ldICsgZW52X3NldF9vcHRfbGVuICsgMTsKKyAgICAgICAgICAgICAgbHRfb3B0X3Byb2Nlc3NfZW52X3NldCAocCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgZWxzZSBpZiAoYXJndltpXVtlbnZfc2V0X29wdF9sZW5dID09ICdcMCcgJiYgaSArIDEgPCBhcmdjKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBsdF9vcHRfcHJvY2Vzc19lbnZfc2V0IChhcmd2WysraV0pOyAvKiBkb24ndCBjb3B5ICovCisgICAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgbHRfZmF0YWwgKCIlcyBtaXNzaW5nIHJlcXVpcmVkIGFyZ3VtZW50IiwgZW52X3NldF9vcHQpOworICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICBpZiAoc3RybmNtcCAoYXJndltpXSwgZW52X3ByZXBlbmRfb3B0LCBlbnZfcHJlcGVuZF9vcHRfbGVuKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgaWYgKGFyZ3ZbaV1bZW52X3ByZXBlbmRfb3B0X2xlbl0gPT0gJz0nKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjb25zdCBjaGFyICpwID0gYXJndltpXSArIGVudl9wcmVwZW5kX29wdF9sZW4gKyAxOworICAgICAgICAgICAgICBsdF9vcHRfcHJvY2Vzc19lbnZfcHJlcGVuZCAocCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgZWxzZSBpZiAoYXJndltpXVtlbnZfcHJlcGVuZF9vcHRfbGVuXSA9PSAnXDAnICYmIGkgKyAxIDwgYXJnYykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgbHRfb3B0X3Byb2Nlc3NfZW52X3ByZXBlbmQgKGFyZ3ZbKytpXSk7IC8qIGRvbid0IGNvcHkgKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBsdF9mYXRhbCAoIiVzIG1pc3NpbmcgcmVxdWlyZWQgYXJndW1lbnQiLCBlbnZfcHJlcGVuZF9vcHQpOworICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICBpZiAoc3RybmNtcCAoYXJndltpXSwgZW52X2FwcGVuZF9vcHQsIGVudl9hcHBlbmRfb3B0X2xlbikgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgIGlmIChhcmd2W2ldW2Vudl9hcHBlbmRfb3B0X2xlbl0gPT0gJz0nKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjb25zdCBjaGFyICpwID0gYXJndltpXSArIGVudl9hcHBlbmRfb3B0X2xlbiArIDE7CisgICAgICAgICAgICAgIGx0X29wdF9wcm9jZXNzX2Vudl9hcHBlbmQgKHApOworICAgICAgICAgICAgfQorICAgICAgICAgIGVsc2UgaWYgKGFyZ3ZbaV1bZW52X2FwcGVuZF9vcHRfbGVuXSA9PSAnXDAnICYmIGkgKyAxIDwgYXJnYykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgbHRfb3B0X3Byb2Nlc3NfZW52X2FwcGVuZCAoYXJndlsrK2ldKTsgLyogZG9uJ3QgY29weSAqLworICAgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGx0X2ZhdGFsICgiJXMgbWlzc2luZyByZXF1aXJlZCBhcmd1bWVudCIsIGVudl9hcHBlbmRfb3B0KTsKKyAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgaWYgKHN0cm5jbXAgKGFyZ3ZbaV0sIGx0d3JhcHBlcl9vcHRpb25fcHJlZml4LCBvcHRfcHJlZml4X2xlbikgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgIC8qIGhvd2V2ZXIsIGlmIHRoZXJlIGlzIGFuIG9wdGlvbiBpbiB0aGUgTFRXUkFQUEVSX09QVElPTl9QUkVGSVgKKyAgICAgICAgICAgICBuYW1lc3BhY2UsIGJ1dCBpdCBpcyBub3Qgb25lIG9mIHRoZSBvbmVzIHdlIGtub3cgYWJvdXQgYW5kCisgICAgICAgICAgICAgaGF2ZSBhbHJlYWR5IGRlYWx0IHdpdGgsIGFib3ZlIChpbmx1ZGluZyBkdW1wLXNjcmlwdCksIHRoZW4KKyAgICAgICAgICAgICByZXBvcnQgYW4gZXJyb3IuIE90aGVyd2lzZSwgdGFyZ2V0cyBtaWdodCBiZWdpbiB0byBiZWxpZXZlCisgICAgICAgICAgICAgdGhleSBhcmUgYWxsb3dlZCB0byB1c2Ugb3B0aW9ucyBpbiB0aGUgTFRXUkFQUEVSX09QVElPTl9QUkVGSVgKKyAgICAgICAgICAgICBuYW1lc3BhY2UuIFRoZSBmaXJzdCB0aW1lIGFueSB1c2VyIGNvbXBsYWlucyBhYm91dCB0aGlzLCB3ZSdsbAorICAgICAgICAgICAgIG5lZWQgdG8gbWFrZSBMVFdSQVBQRVJfT1BUSU9OX1BSRUZJWCBhIGNvbmZpZ3VyZS10aW1lIG9wdGlvbgorICAgICAgICAgICAgIG9yIGEgY29uZmlndXJlLmFjLXNldHRhYmxlIHZhbHVlLgorICAgICAgICAgICAqLworICAgICAgICAgIGx0X2ZhdGFsICgiVW5yZWNvZ25pemVkIG9wdGlvbiBpbiAlcyBuYW1lc3BhY2U6ICclcyciLAorICAgICAgICAgICAgICAgICAgICBsdHdyYXBwZXJfb3B0aW9uX3ByZWZpeCwgYXJndltpXSk7CisgICAgICAgIH0KKyAgICAgIC8qIG90aGVyd2lzZSAuLi4gKi8KKyAgICAgIG5ld2FyZ3pbKytuZXdhcmdjXSA9IHhzdHJkdXAgKGFyZ3ZbaV0pOworICAgIH0KKyAgbmV3YXJnelsrK25ld2FyZ2NdID0gTlVMTDsKKworICBMVFdSQVBQRVJfREVCVUdQUklOVEYgICAgICgoIihtYWluKSBsdF9hcmd2X3plcm8gOiAlc1xuIiwgKGx0X2FyZ3ZfemVybyA/IGx0X2FyZ3ZfemVybyA6ICI8TlVMTD4iKSkpOworICBmb3IgKGkgPSAwOyBpIDwgbmV3YXJnYzsgaSsrKQorICAgIHsKKyAgICAgIExUV1JBUFBFUl9ERUJVR1BSSU5URiAoKCIobWFpbikgbmV3YXJnelslZF0gICA6ICVzXG4iLCBpLCAobmV3YXJneltpXSA/IG5ld2FyZ3pbaV0gOiAiPE5VTEw+IikpKTsKKyAgICB9CisKK0VPRgorCisJICAgIGNhc2UgJGhvc3Rfb3MgaW4KKwkgICAgICBtaW5ndyopCisJCWNhdCA8PCJFT0YiCisgIC8qIGV4ZWN2IGRvZXNuJ3QgYWN0dWFsbHkgd29yayBvbiBtaW5ndyBhcyBleHBlY3RlZCBvbiB1bml4ICovCisgIHJ2YWwgPSBfc3Bhd252IChfUF9XQUlULCBsdF9hcmd2X3plcm8sIChjb25zdCBjaGFyICogY29uc3QgKikgbmV3YXJneik7CisgIGlmIChydmFsID09IC0xKQorICAgIHsKKyAgICAgIC8qIGZhaWxlZCB0byBzdGFydCBwcm9jZXNzICovCisgICAgICBMVFdSQVBQRVJfREVCVUdQUklOVEYgKCgiKG1haW4pIGZhaWxlZCB0byBsYXVuY2ggdGFyZ2V0IFwiJXNcIjogZXJybm8gPSAlZFxuIiwgbHRfYXJndl96ZXJvLCBlcnJubykpOworICAgICAgcmV0dXJuIDEyNzsKKyAgICB9CisgIHJldHVybiBydmFsOworRU9GCisJCTs7CisJICAgICAgKikKKwkJY2F0IDw8IkVPRiIKKyAgZXhlY3YgKGx0X2FyZ3ZfemVybywgbmV3YXJneik7CisgIHJldHVybiBydmFsOyAvKiA9MTI3LCBidXQgYXZvaWRzIHVudXNlZCB2YXJpYWJsZSB3YXJuaW5nICovCitFT0YKKwkJOzsKKwkgICAgZXNhYworCisJICAgIGNhdCA8PCJFT0YiCit9CisKK3ZvaWQgKgoreG1hbGxvYyAoc2l6ZV90IG51bSkKK3sKKyAgdm9pZCAqcCA9ICh2b2lkICopIG1hbGxvYyAobnVtKTsKKyAgaWYgKCFwKQorICAgIGx0X2ZhdGFsICgiTWVtb3J5IGV4aGF1c3RlZCIpOworCisgIHJldHVybiBwOworfQorCitjaGFyICoKK3hzdHJkdXAgKGNvbnN0IGNoYXIgKnN0cmluZykKK3sKKyAgcmV0dXJuIHN0cmluZyA/IHN0cmNweSAoKGNoYXIgKikgeG1hbGxvYyAoc3RybGVuIChzdHJpbmcpICsgMSksCisJCQkgIHN0cmluZykgOiBOVUxMOworfQorCitjb25zdCBjaGFyICoKK2Jhc2VfbmFtZSAoY29uc3QgY2hhciAqbmFtZSkKK3sKKyAgY29uc3QgY2hhciAqYmFzZTsKKworI2lmIGRlZmluZWQgKEhBVkVfRE9TX0JBU0VEX0ZJTEVfU1lTVEVNKQorICAvKiBTa2lwIG92ZXIgdGhlIGRpc2sgbmFtZSBpbiBNU0RPUyBwYXRobmFtZXMuICovCisgIGlmIChpc2FscGhhICgodW5zaWduZWQgY2hhcikgbmFtZVswXSkgJiYgbmFtZVsxXSA9PSAnOicpCisgICAgbmFtZSArPSAyOworI2VuZGlmCisKKyAgZm9yIChiYXNlID0gbmFtZTsgKm5hbWU7IG5hbWUrKykKKyAgICBpZiAoSVNfRElSX1NFUEFSQVRPUiAoKm5hbWUpKQorICAgICAgYmFzZSA9IG5hbWUgKyAxOworICByZXR1cm4gYmFzZTsKK30KKworaW50CitjaGVja19leGVjdXRhYmxlIChjb25zdCBjaGFyICpwYXRoKQoreworICBzdHJ1Y3Qgc3RhdCBzdDsKKworICBMVFdSQVBQRVJfREVCVUdQUklOVEYgKCgiKGNoZWNrX2V4ZWN1dGFibGUpICA6ICVzXG4iLAorCQkJICBwYXRoID8gKCpwYXRoID8gcGF0aCA6ICJFTVBUWSEiKSA6ICJOVUxMISIpKTsKKyAgaWYgKCghcGF0aCkgfHwgKCEqcGF0aCkpCisgICAgcmV0dXJuIDA7CisKKyAgaWYgKChzdGF0IChwYXRoLCAmc3QpID49IDApCisgICAgICAmJiAoc3Quc3RfbW9kZSAmIChTX0lYVVNSIHwgU19JWEdSUCB8IFNfSVhPVEgpKSkKKyAgICByZXR1cm4gMTsKKyAgZWxzZQorICAgIHJldHVybiAwOworfQorCitpbnQKK21ha2VfZXhlY3V0YWJsZSAoY29uc3QgY2hhciAqcGF0aCkKK3sKKyAgaW50IHJ2YWwgPSAwOworICBzdHJ1Y3Qgc3RhdCBzdDsKKworICBMVFdSQVBQRVJfREVCVUdQUklOVEYgKCgiKG1ha2VfZXhlY3V0YWJsZSkgICA6ICVzXG4iLAorCQkJICBwYXRoID8gKCpwYXRoID8gcGF0aCA6ICJFTVBUWSEiKSA6ICJOVUxMISIpKTsKKyAgaWYgKCghcGF0aCkgfHwgKCEqcGF0aCkpCisgICAgcmV0dXJuIDA7CisKKyAgaWYgKHN0YXQgKHBhdGgsICZzdCkgPj0gMCkKKyAgICB7CisgICAgICBydmFsID0gY2htb2QgKHBhdGgsIHN0LnN0X21vZGUgfCBTX0lYT1RIIHwgU19JWEdSUCB8IFNfSVhVU1IpOworICAgIH0KKyAgcmV0dXJuIHJ2YWw7Cit9CisKKy8qIFNlYXJjaGVzIGZvciB0aGUgZnVsbCBwYXRoIG9mIHRoZSB3cmFwcGVyLiAgUmV0dXJucworICAgbmV3bHkgYWxsb2NhdGVkIGZ1bGwgcGF0aCBuYW1lIGlmIGZvdW5kLCBOVUxMIG90aGVyd2lzZQorICAgRG9lcyBub3QgY2hhc2Ugc3ltbGlua3MsIGV2ZW4gb24gcGxhdGZvcm1zIHRoYXQgc3VwcG9ydCB0aGVtLgorKi8KK2NoYXIgKgorZmluZF9leGVjdXRhYmxlIChjb25zdCBjaGFyICp3cmFwcGVyKQoreworICBpbnQgaGFzX3NsYXNoID0gMDsKKyAgY29uc3QgY2hhciAqcDsKKyAgY29uc3QgY2hhciAqcF9uZXh0OworICAvKiBzdGF0aWMgYnVmZmVyIGZvciBnZXRjd2QgKi8KKyAgY2hhciB0bXBbTFRfUEFUSE1BWCArIDFdOworICBpbnQgdG1wX2xlbjsKKyAgY2hhciAqY29uY2F0X25hbWU7CisKKyAgTFRXUkFQUEVSX0RFQlVHUFJJTlRGICgoIihmaW5kX2V4ZWN1dGFibGUpICAgOiAlc1xuIiwKKwkJCSAgd3JhcHBlciA/ICgqd3JhcHBlciA/IHdyYXBwZXIgOiAiRU1QVFkhIikgOiAiTlVMTCEiKSk7CisKKyAgaWYgKCh3cmFwcGVyID09IE5VTEwpIHx8ICgqd3JhcHBlciA9PSAnXDAnKSkKKyAgICByZXR1cm4gTlVMTDsKKworICAvKiBBYnNvbHV0ZSBwYXRoPyAqLworI2lmIGRlZmluZWQgKEhBVkVfRE9TX0JBU0VEX0ZJTEVfU1lTVEVNKQorICBpZiAoaXNhbHBoYSAoKHVuc2lnbmVkIGNoYXIpIHdyYXBwZXJbMF0pICYmIHdyYXBwZXJbMV0gPT0gJzonKQorICAgIHsKKyAgICAgIGNvbmNhdF9uYW1lID0geHN0cmR1cCAod3JhcHBlcik7CisgICAgICBpZiAoY2hlY2tfZXhlY3V0YWJsZSAoY29uY2F0X25hbWUpKQorCXJldHVybiBjb25jYXRfbmFtZTsKKyAgICAgIFhGUkVFIChjb25jYXRfbmFtZSk7CisgICAgfQorICBlbHNlCisgICAgeworI2VuZGlmCisgICAgICBpZiAoSVNfRElSX1NFUEFSQVRPUiAod3JhcHBlclswXSkpCisJeworCSAgY29uY2F0X25hbWUgPSB4c3RyZHVwICh3cmFwcGVyKTsKKwkgIGlmIChjaGVja19leGVjdXRhYmxlIChjb25jYXRfbmFtZSkpCisJICAgIHJldHVybiBjb25jYXRfbmFtZTsKKwkgIFhGUkVFIChjb25jYXRfbmFtZSk7CisJfQorI2lmIGRlZmluZWQgKEhBVkVfRE9TX0JBU0VEX0ZJTEVfU1lTVEVNKQorICAgIH0KKyNlbmRpZgorCisgIGZvciAocCA9IHdyYXBwZXI7ICpwOyBwKyspCisgICAgaWYgKCpwID09ICcvJykKKyAgICAgIHsKKwloYXNfc2xhc2ggPSAxOworCWJyZWFrOworICAgICAgfQorICBpZiAoIWhhc19zbGFzaCkKKyAgICB7CisgICAgICAvKiBubyBzbGFzaGVzOyBzZWFyY2ggUEFUSCAqLworICAgICAgY29uc3QgY2hhciAqcGF0aCA9IGdldGVudiAoIlBBVEgiKTsKKyAgICAgIGlmIChwYXRoICE9IE5VTEwpCisJeworCSAgZm9yIChwID0gcGF0aDsgKnA7IHAgPSBwX25leHQpCisJICAgIHsKKwkgICAgICBjb25zdCBjaGFyICpxOworCSAgICAgIHNpemVfdCBwX2xlbjsKKwkgICAgICBmb3IgKHEgPSBwOyAqcTsgcSsrKQorCQlpZiAoSVNfUEFUSF9TRVBBUkFUT1IgKCpxKSkKKwkJICBicmVhazsKKwkgICAgICBwX2xlbiA9IHEgLSBwOworCSAgICAgIHBfbmV4dCA9ICgqcSA9PSAnXDAnID8gcSA6IHEgKyAxKTsKKwkgICAgICBpZiAocF9sZW4gPT0gMCkKKwkJeworCQkgIC8qIGVtcHR5IHBhdGg6IGN1cnJlbnQgZGlyZWN0b3J5ICovCisJCSAgaWYgKGdldGN3ZCAodG1wLCBMVF9QQVRITUFYKSA9PSBOVUxMKQorCQkgICAgbHRfZmF0YWwgKCJnZXRjd2QgZmFpbGVkIik7CisJCSAgdG1wX2xlbiA9IHN0cmxlbiAodG1wKTsKKwkJICBjb25jYXRfbmFtZSA9CisJCSAgICBYTUFMTE9DIChjaGFyLCB0bXBfbGVuICsgMSArIHN0cmxlbiAod3JhcHBlcikgKyAxKTsKKwkJICBtZW1jcHkgKGNvbmNhdF9uYW1lLCB0bXAsIHRtcF9sZW4pOworCQkgIGNvbmNhdF9uYW1lW3RtcF9sZW5dID0gJy8nOworCQkgIHN0cmNweSAoY29uY2F0X25hbWUgKyB0bXBfbGVuICsgMSwgd3JhcHBlcik7CisJCX0KKwkgICAgICBlbHNlCisJCXsKKwkJICBjb25jYXRfbmFtZSA9CisJCSAgICBYTUFMTE9DIChjaGFyLCBwX2xlbiArIDEgKyBzdHJsZW4gKHdyYXBwZXIpICsgMSk7CisJCSAgbWVtY3B5IChjb25jYXRfbmFtZSwgcCwgcF9sZW4pOworCQkgIGNvbmNhdF9uYW1lW3BfbGVuXSA9ICcvJzsKKwkJICBzdHJjcHkgKGNvbmNhdF9uYW1lICsgcF9sZW4gKyAxLCB3cmFwcGVyKTsKKwkJfQorCSAgICAgIGlmIChjaGVja19leGVjdXRhYmxlIChjb25jYXRfbmFtZSkpCisJCXJldHVybiBjb25jYXRfbmFtZTsKKwkgICAgICBYRlJFRSAoY29uY2F0X25hbWUpOworCSAgICB9CisJfQorICAgICAgLyogbm90IGZvdW5kIGluIFBBVEg7IGFzc3VtZSBjdXJkaXIgKi8KKyAgICB9CisgIC8qIFJlbGF0aXZlIHBhdGggfCBub3QgZm91bmQgaW4gcGF0aDogcHJlcGVuZCBjd2QgKi8KKyAgaWYgKGdldGN3ZCAodG1wLCBMVF9QQVRITUFYKSA9PSBOVUxMKQorICAgIGx0X2ZhdGFsICgiZ2V0Y3dkIGZhaWxlZCIpOworICB0bXBfbGVuID0gc3RybGVuICh0bXApOworICBjb25jYXRfbmFtZSA9IFhNQUxMT0MgKGNoYXIsIHRtcF9sZW4gKyAxICsgc3RybGVuICh3cmFwcGVyKSArIDEpOworICBtZW1jcHkgKGNvbmNhdF9uYW1lLCB0bXAsIHRtcF9sZW4pOworICBjb25jYXRfbmFtZVt0bXBfbGVuXSA9ICcvJzsKKyAgc3RyY3B5IChjb25jYXRfbmFtZSArIHRtcF9sZW4gKyAxLCB3cmFwcGVyKTsKKworICBpZiAoY2hlY2tfZXhlY3V0YWJsZSAoY29uY2F0X25hbWUpKQorICAgIHJldHVybiBjb25jYXRfbmFtZTsKKyAgWEZSRUUgKGNvbmNhdF9uYW1lKTsKKyAgcmV0dXJuIE5VTEw7Cit9CisKK2NoYXIgKgorY2hhc2Vfc3ltbGlua3MgKGNvbnN0IGNoYXIgKnBhdGhzcGVjKQoreworI2lmbmRlZiBTX0lTTE5LCisgIHJldHVybiB4c3RyZHVwIChwYXRoc3BlYyk7CisjZWxzZQorICBjaGFyIGJ1ZltMVF9QQVRITUFYXTsKKyAgc3RydWN0IHN0YXQgczsKKyAgY2hhciAqdG1wX3BhdGhzcGVjID0geHN0cmR1cCAocGF0aHNwZWMpOworICBjaGFyICpwOworICBpbnQgaGFzX3N5bWxpbmtzID0gMDsKKyAgd2hpbGUgKHN0cmxlbiAodG1wX3BhdGhzcGVjKSAmJiAhaGFzX3N5bWxpbmtzKQorICAgIHsKKyAgICAgIExUV1JBUFBFUl9ERUJVR1BSSU5URiAoKCJjaGVja2luZyBwYXRoIGNvbXBvbmVudCBmb3Igc3ltbGlua3M6ICVzXG4iLAorCQkJICAgICAgdG1wX3BhdGhzcGVjKSk7CisgICAgICBpZiAobHN0YXQgKHRtcF9wYXRoc3BlYywgJnMpID09IDApCisJeworCSAgaWYgKFNfSVNMTksgKHMuc3RfbW9kZSkgIT0gMCkKKwkgICAgeworCSAgICAgIGhhc19zeW1saW5rcyA9IDE7CisJICAgICAgYnJlYWs7CisJICAgIH0KKworCSAgLyogc2VhcmNoIGJhY2t3YXJkcyBmb3IgbGFzdCBESVJfU0VQQVJBVE9SICovCisJICBwID0gdG1wX3BhdGhzcGVjICsgc3RybGVuICh0bXBfcGF0aHNwZWMpIC0gMTsKKwkgIHdoaWxlICgocCA+IHRtcF9wYXRoc3BlYykgJiYgKCFJU19ESVJfU0VQQVJBVE9SICgqcCkpKQorCSAgICBwLS07CisJICBpZiAoKHAgPT0gdG1wX3BhdGhzcGVjKSAmJiAoIUlTX0RJUl9TRVBBUkFUT1IgKCpwKSkpCisJICAgIHsKKwkgICAgICAvKiBubyBtb3JlIERJUl9TRVBBUkFUT1JTIGxlZnQgKi8KKwkgICAgICBicmVhazsKKwkgICAgfQorCSAgKnAgPSAnXDAnOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBjaGFyICplcnJzdHIgPSBzdHJlcnJvciAoZXJybm8pOworCSAgbHRfZmF0YWwgKCJFcnJvciBhY2Nlc3NpbmcgZmlsZSAlcyAoJXMpIiwgdG1wX3BhdGhzcGVjLCBlcnJzdHIpOworCX0KKyAgICB9CisgIFhGUkVFICh0bXBfcGF0aHNwZWMpOworCisgIGlmICghaGFzX3N5bWxpbmtzKQorICAgIHsKKyAgICAgIHJldHVybiB4c3RyZHVwIChwYXRoc3BlYyk7CisgICAgfQorCisgIHRtcF9wYXRoc3BlYyA9IHJlYWxwYXRoIChwYXRoc3BlYywgYnVmKTsKKyAgaWYgKHRtcF9wYXRoc3BlYyA9PSAwKQorICAgIHsKKyAgICAgIGx0X2ZhdGFsICgiQ291bGQgbm90IGZvbGxvdyBzeW1saW5rcyBmb3IgJXMiLCBwYXRoc3BlYyk7CisgICAgfQorICByZXR1cm4geHN0cmR1cCAodG1wX3BhdGhzcGVjKTsKKyNlbmRpZgorfQorCitjaGFyICoKK3N0cmVuZHphcCAoY2hhciAqc3RyLCBjb25zdCBjaGFyICpwYXQpCit7CisgIHNpemVfdCBsZW4sIHBhdGxlbjsKKworICBhc3NlcnQgKHN0ciAhPSBOVUxMKTsKKyAgYXNzZXJ0IChwYXQgIT0gTlVMTCk7CisKKyAgbGVuID0gc3RybGVuIChzdHIpOworICBwYXRsZW4gPSBzdHJsZW4gKHBhdCk7CisKKyAgaWYgKHBhdGxlbiA8PSBsZW4pCisgICAgeworICAgICAgc3RyICs9IGxlbiAtIHBhdGxlbjsKKyAgICAgIGlmIChzdHJjbXAgKHN0ciwgcGF0KSA9PSAwKQorCSpzdHIgPSAnXDAnOworICAgIH0KKyAgcmV0dXJuIHN0cjsKK30KKworc3RhdGljIHZvaWQKK2x0X2Vycm9yX2NvcmUgKGludCBleGl0X3N0YXR1cywgY29uc3QgY2hhciAqbW9kZSwKKwkgICAgICAgY29uc3QgY2hhciAqbWVzc2FnZSwgdmFfbGlzdCBhcCkKK3sKKyAgZnByaW50ZiAoc3RkZXJyLCAiJXM6ICVzOiAiLCBwcm9ncmFtX25hbWUsIG1vZGUpOworICB2ZnByaW50ZiAoc3RkZXJyLCBtZXNzYWdlLCBhcCk7CisgIGZwcmludGYgKHN0ZGVyciwgIi5cbiIpOworCisgIGlmIChleGl0X3N0YXR1cyA+PSAwKQorICAgIGV4aXQgKGV4aXRfc3RhdHVzKTsKK30KKwordm9pZAorbHRfZmF0YWwgKGNvbnN0IGNoYXIgKm1lc3NhZ2UsIC4uLikKK3sKKyAgdmFfbGlzdCBhcDsKKyAgdmFfc3RhcnQgKGFwLCBtZXNzYWdlKTsKKyAgbHRfZXJyb3JfY29yZSAoRVhJVF9GQUlMVVJFLCAiRkFUQUwiLCBtZXNzYWdlLCBhcCk7CisgIHZhX2VuZCAoYXApOworfQorCit2b2lkCitsdF9zZXRlbnYgKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKQoreworICBMVFdSQVBQRVJfREVCVUdQUklOVEYgKCgiKGx0X3NldGVudikgc2V0dGluZyAnJXMnIHRvICclcydcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIChuYW1lID8gbmFtZSA6ICI8TlVMTD4iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHZhbHVlID8gdmFsdWUgOiAiPE5VTEw+IikpKTsKKyAgeworI2lmZGVmIEhBVkVfU0VURU5WCisgICAgLyogYWx3YXlzIG1ha2UgYSBjb3B5LCBmb3IgY29uc2lzdGVuY3kgd2l0aCAhSEFWRV9TRVRFTlYgKi8KKyAgICBjaGFyICpzdHIgPSB4c3RyZHVwICh2YWx1ZSk7CisgICAgc2V0ZW52IChuYW1lLCBzdHIsIDEpOworI2Vsc2UKKyAgICBpbnQgbGVuID0gc3RybGVuIChuYW1lKSArIDEgKyBzdHJsZW4gKHZhbHVlKSArIDE7CisgICAgY2hhciAqc3RyID0gWE1BTExPQyAoY2hhciwgbGVuKTsKKyAgICBzcHJpbnRmIChzdHIsICIlcz0lcyIsIG5hbWUsIHZhbHVlKTsKKyAgICBpZiAocHV0ZW52IChzdHIpICE9IEVYSVRfU1VDQ0VTUykKKyAgICAgIHsKKyAgICAgICAgWEZSRUUgKHN0cik7CisgICAgICB9CisjZW5kaWYKKyAgfQorfQorCitjaGFyICoKK2x0X2V4dGVuZF9zdHIgKGNvbnN0IGNoYXIgKm9yaWdfdmFsdWUsIGNvbnN0IGNoYXIgKmFkZCwgaW50IHRvX2VuZCkKK3sKKyAgY2hhciAqbmV3X3ZhbHVlOworICBpZiAob3JpZ192YWx1ZSAmJiAqb3JpZ192YWx1ZSkKKyAgICB7CisgICAgICBpbnQgb3JpZ192YWx1ZV9sZW4gPSBzdHJsZW4gKG9yaWdfdmFsdWUpOworICAgICAgaW50IGFkZF9sZW4gPSBzdHJsZW4gKGFkZCk7CisgICAgICBuZXdfdmFsdWUgPSBYTUFMTE9DIChjaGFyLCBhZGRfbGVuICsgb3JpZ192YWx1ZV9sZW4gKyAxKTsKKyAgICAgIGlmICh0b19lbmQpCisgICAgICAgIHsKKyAgICAgICAgICBzdHJjcHkgKG5ld192YWx1ZSwgb3JpZ192YWx1ZSk7CisgICAgICAgICAgc3RyY3B5IChuZXdfdmFsdWUgKyBvcmlnX3ZhbHVlX2xlbiwgYWRkKTsKKyAgICAgICAgfQorICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgc3RyY3B5IChuZXdfdmFsdWUsIGFkZCk7CisgICAgICAgICAgc3RyY3B5IChuZXdfdmFsdWUgKyBhZGRfbGVuLCBvcmlnX3ZhbHVlKTsKKyAgICAgICAgfQorICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIG5ld192YWx1ZSA9IHhzdHJkdXAgKGFkZCk7CisgICAgfQorICByZXR1cm4gbmV3X3ZhbHVlOworfQorCitpbnQKK2x0X3NwbGl0X25hbWVfdmFsdWUgKGNvbnN0IGNoYXIgKmFyZywgY2hhcioqIG5hbWUsIGNoYXIqKiB2YWx1ZSkKK3sKKyAgY29uc3QgY2hhciAqcDsKKyAgaW50IGxlbjsKKyAgaWYgKCFhcmcgfHwgISphcmcpCisgICAgcmV0dXJuIDE7CisKKyAgcCA9IHN0cmNociAoYXJnLCAoaW50KSc9Jyk7CisKKyAgaWYgKCFwKQorICAgIHJldHVybiAxOworCisgICp2YWx1ZSA9IHhzdHJkdXAgKCsrcCk7CisKKyAgbGVuID0gc3RybGVuIChhcmcpIC0gc3RybGVuICgqdmFsdWUpOworICAqbmFtZSA9IFhNQUxMT0MgKGNoYXIsIGxlbik7CisgIHN0cm5jcHkgKCpuYW1lLCBhcmcsIGxlbi0xKTsKKyAgKCpuYW1lKVtsZW4gLSAxXSA9ICdcMCc7CisKKyAgcmV0dXJuIDA7Cit9CisKK3ZvaWQKK2x0X29wdF9wcm9jZXNzX2Vudl9zZXQgKGNvbnN0IGNoYXIgKmFyZykKK3sKKyAgY2hhciAqbmFtZSA9IE5VTEw7CisgIGNoYXIgKnZhbHVlID0gTlVMTDsKKworICBpZiAobHRfc3BsaXRfbmFtZV92YWx1ZSAoYXJnLCAmbmFtZSwgJnZhbHVlKSAhPSAwKQorICAgIHsKKyAgICAgIFhGUkVFIChuYW1lKTsKKyAgICAgIFhGUkVFICh2YWx1ZSk7CisgICAgICBsdF9mYXRhbCAoImJhZCBhcmd1bWVudCBmb3IgJXM6ICclcyciLCBlbnZfc2V0X29wdCwgYXJnKTsKKyAgICB9CisKKyAgbHRfc2V0ZW52IChuYW1lLCB2YWx1ZSk7CisgIFhGUkVFIChuYW1lKTsKKyAgWEZSRUUgKHZhbHVlKTsKK30KKwordm9pZAorbHRfb3B0X3Byb2Nlc3NfZW52X3ByZXBlbmQgKGNvbnN0IGNoYXIgKmFyZykKK3sKKyAgY2hhciAqbmFtZSA9IE5VTEw7CisgIGNoYXIgKnZhbHVlID0gTlVMTDsKKyAgY2hhciAqbmV3X3ZhbHVlID0gTlVMTDsKKworICBpZiAobHRfc3BsaXRfbmFtZV92YWx1ZSAoYXJnLCAmbmFtZSwgJnZhbHVlKSAhPSAwKQorICAgIHsKKyAgICAgIFhGUkVFIChuYW1lKTsKKyAgICAgIFhGUkVFICh2YWx1ZSk7CisgICAgICBsdF9mYXRhbCAoImJhZCBhcmd1bWVudCBmb3IgJXM6ICclcyciLCBlbnZfcHJlcGVuZF9vcHQsIGFyZyk7CisgICAgfQorCisgIG5ld192YWx1ZSA9IGx0X2V4dGVuZF9zdHIgKGdldGVudiAobmFtZSksIHZhbHVlLCAwKTsKKyAgbHRfc2V0ZW52IChuYW1lLCBuZXdfdmFsdWUpOworICBYRlJFRSAobmV3X3ZhbHVlKTsKKyAgWEZSRUUgKG5hbWUpOworICBYRlJFRSAodmFsdWUpOworfQorCit2b2lkCitsdF9vcHRfcHJvY2Vzc19lbnZfYXBwZW5kIChjb25zdCBjaGFyICphcmcpCit7CisgIGNoYXIgKm5hbWUgPSBOVUxMOworICBjaGFyICp2YWx1ZSA9IE5VTEw7CisgIGNoYXIgKm5ld192YWx1ZSA9IE5VTEw7CisKKyAgaWYgKGx0X3NwbGl0X25hbWVfdmFsdWUgKGFyZywgJm5hbWUsICZ2YWx1ZSkgIT0gMCkKKyAgICB7CisgICAgICBYRlJFRSAobmFtZSk7CisgICAgICBYRlJFRSAodmFsdWUpOworICAgICAgbHRfZmF0YWwgKCJiYWQgYXJndW1lbnQgZm9yICVzOiAnJXMnIiwgZW52X2FwcGVuZF9vcHQsIGFyZyk7CisgICAgfQorCisgIG5ld192YWx1ZSA9IGx0X2V4dGVuZF9zdHIgKGdldGVudiAobmFtZSksIHZhbHVlLCAxKTsKKyAgbHRfc2V0ZW52IChuYW1lLCBuZXdfdmFsdWUpOworICBYRlJFRSAobmV3X3ZhbHVlKTsKKyAgWEZSRUUgKG5hbWUpOworICBYRlJFRSAodmFsdWUpOworfQorCit2b2lkCitsdF91cGRhdGVfZXhlX3BhdGggKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKQoreworICBMVFdSQVBQRVJfREVCVUdQUklOVEYgKCgiKGx0X3VwZGF0ZV9leGVfcGF0aCkgbW9kaWZ5aW5nICclcycgYnkgcHJlcGVuZGluZyAnJXMnXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAobmFtZSA/IG5hbWUgOiAiPE5VTEw+IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICh2YWx1ZSA/IHZhbHVlIDogIjxOVUxMPiIpKSk7CisKKyAgaWYgKG5hbWUgJiYgKm5hbWUgJiYgdmFsdWUgJiYgKnZhbHVlKQorICAgIHsKKyAgICAgIGNoYXIgKm5ld192YWx1ZSA9IGx0X2V4dGVuZF9zdHIgKGdldGVudiAobmFtZSksIHZhbHVlLCAwKTsKKyAgICAgIC8qIHNvbWUgc3lzdGVtcyBjYW4ndCBjb3BlIHdpdGggYSAnOictdGVybWluYXRlZCBwYXRoICMnICovCisgICAgICBpbnQgbGVuID0gc3RybGVuIChuZXdfdmFsdWUpOworICAgICAgd2hpbGUgKCgobGVuID0gc3RybGVuIChuZXdfdmFsdWUpKSA+IDApICYmIElTX1BBVEhfU0VQQVJBVE9SIChuZXdfdmFsdWVbbGVuLTFdKSkKKyAgICAgICAgeworICAgICAgICAgIG5ld192YWx1ZVtsZW4tMV0gPSAnXDAnOworICAgICAgICB9CisgICAgICBsdF9zZXRlbnYgKG5hbWUsIG5ld192YWx1ZSk7CisgICAgICBYRlJFRSAobmV3X3ZhbHVlKTsKKyAgICB9Cit9CisKK3ZvaWQKK2x0X3VwZGF0ZV9saWJfcGF0aCAoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpCit7CisgIExUV1JBUFBFUl9ERUJVR1BSSU5URiAoKCIobHRfdXBkYXRlX2xpYl9wYXRoKSBtb2RpZnlpbmcgJyVzJyBieSBwcmVwZW5kaW5nICclcydcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIChuYW1lID8gbmFtZSA6ICI8TlVMTD4iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHZhbHVlID8gdmFsdWUgOiAiPE5VTEw+IikpKTsKKworICBpZiAobmFtZSAmJiAqbmFtZSAmJiB2YWx1ZSAmJiAqdmFsdWUpCisgICAgeworICAgICAgY2hhciAqbmV3X3ZhbHVlID0gbHRfZXh0ZW5kX3N0ciAoZ2V0ZW52IChuYW1lKSwgdmFsdWUsIDApOworICAgICAgbHRfc2V0ZW52IChuYW1lLCBuZXdfdmFsdWUpOworICAgICAgWEZSRUUgKG5ld192YWx1ZSk7CisgICAgfQorfQorCisKK0VPRgorfQorIyBlbmQ6IGZ1bmNfZW1pdF9jd3JhcHBlcmV4ZV9zcmMKKworIyBmdW5jX21vZGVfbGluayBhcmcuLi4KK2Z1bmNfbW9kZV9saW5rICgpCit7CisgICAgJG9wdF9kZWJ1ZworICAgIGNhc2UgJGhvc3QgaW4KKyAgICAqLSotY3lnd2luKiB8ICotKi1taW5ndyogfCAqLSotcHczMiogfCAqLSotb3MyKiB8ICotY2VnY2MqKQorICAgICAgIyBJdCBpcyBpbXBvc3NpYmxlIHRvIGxpbmsgYSBkbGwgd2l0aG91dCB0aGlzIHNldHRpbmcsIGFuZAorICAgICAgIyB3ZSBzaG91bGRuJ3QgZm9yY2UgdGhlIG1ha2VmaWxlIG1haW50YWluZXIgdG8gZmlndXJlIG91dAorICAgICAgIyB3aGljaCBzeXN0ZW0gd2UgYXJlIGNvbXBpbGluZyBmb3IgaW4gb3JkZXIgdG8gcGFzcyBhbiBleHRyYQorICAgICAgIyBmbGFnIGZvciBldmVyeSBsaWJ0b29sIGludm9jYXRpb24uCisgICAgICAjIGFsbG93X3VuZGVmaW5lZD1ubworCisgICAgICAjIEZJWE1FOiBVbmZvcnR1bmF0ZWx5LCB0aGVyZSBhcmUgcHJvYmxlbXMgd2l0aCB0aGUgYWJvdmUgd2hlbiB0cnlpbmcKKyAgICAgICMgdG8gbWFrZSBhIGRsbCB3aGljaCBoYXMgdW5kZWZpbmVkIHN5bWJvbHMsIGluIHdoaWNoIGNhc2Ugbm90CisgICAgICAjIGV2ZW4gYSBzdGF0aWMgbGlicmFyeSBpcyBidWlsdC4gIEZvciBub3csIHdlIG5lZWQgdG8gc3BlY2lmeQorICAgICAgIyAtbm8tdW5kZWZpbmVkIG9uIHRoZSBsaWJ0b29sIGxpbmsgbGluZSB3aGVuIHdlIGNhbiBiZSBjZXJ0YWluCisgICAgICAjIHRoYXQgYWxsIHN5bWJvbHMgYXJlIHNhdGlzZmllZCwgb3RoZXJ3aXNlIHdlIGdldCBhIHN0YXRpYyBsaWJyYXJ5LgorICAgICAgYWxsb3dfdW5kZWZpbmVkPXllcworICAgICAgOzsKKyAgICAqKQorICAgICAgYWxsb3dfdW5kZWZpbmVkPXllcworICAgICAgOzsKKyAgICBlc2FjCisgICAgbGlidG9vbF9hcmdzPSRub25vcHQKKyAgICBiYXNlX2NvbXBpbGU9IiRub25vcHQgJEAiCisgICAgY29tcGlsZV9jb21tYW5kPSRub25vcHQKKyAgICBmaW5hbGl6ZV9jb21tYW5kPSRub25vcHQKKworICAgIGNvbXBpbGVfcnBhdGg9CisgICAgZmluYWxpemVfcnBhdGg9CisgICAgY29tcGlsZV9zaGxpYnBhdGg9CisgICAgZmluYWxpemVfc2hsaWJwYXRoPQorICAgIGNvbnZlbmllbmNlPQorICAgIG9sZF9jb252ZW5pZW5jZT0KKyAgICBkZXBsaWJzPQorICAgIG9sZF9kZXBsaWJzPQorICAgIGNvbXBpbGVyX2ZsYWdzPQorICAgIGxpbmtlcl9mbGFncz0KKyAgICBkbGxzZWFyY2hwYXRoPQorICAgIGxpYl9zZWFyY2hfcGF0aD1gcHdkYAorICAgIGluc3RfcHJlZml4X2Rpcj0KKyAgICBuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncz0KKworICAgIGF2b2lkX3ZlcnNpb249bm8KKyAgICBkbGZpbGVzPQorICAgIGRscHJlZmlsZXM9CisgICAgZGxzZWxmPW5vCisgICAgZXhwb3J0X2R5bmFtaWM9bm8KKyAgICBleHBvcnRfc3ltYm9scz0KKyAgICBleHBvcnRfc3ltYm9sc19yZWdleD0KKyAgICBnZW5lcmF0ZWQ9CisgICAgbGlib2Jqcz0KKyAgICBsdGxpYnM9CisgICAgbW9kdWxlPW5vCisgICAgbm9faW5zdGFsbD1ubworICAgIG9ianM9CisgICAgbm9uX3BpY19vYmplY3RzPQorICAgIHByZWNpb3VzX2ZpbGVzX3JlZ2V4PQorICAgIHByZWZlcl9zdGF0aWNfbGlicz1ubworICAgIHByZWxvYWQ9bm8KKyAgICBwcmV2PQorICAgIHByZXZhcmc9CisgICAgcmVsZWFzZT0KKyAgICBycGF0aD0KKyAgICB4cnBhdGg9CisgICAgcGVybV9ycGF0aD0KKyAgICB0ZW1wX3JwYXRoPQorICAgIHRocmVhZF9zYWZlPW5vCisgICAgdmluZm89CisgICAgdmluZm9fbnVtYmVyPW5vCisgICAgd2Vha19saWJzPQorICAgIHNpbmdsZV9tb2R1bGU9IiR7d2x9LXNpbmdsZV9tb2R1bGUiCisgICAgZnVuY19pbmZlcl90YWcgJGJhc2VfY29tcGlsZQorCisgICAgIyBXZSBuZWVkIHRvIGtub3cgLXN0YXRpYywgdG8gZ2V0IHRoZSByaWdodCBvdXRwdXQgZmlsZW5hbWVzLgorICAgIGZvciBhcmcKKyAgICBkbworICAgICAgY2FzZSAkYXJnIGluCisgICAgICAtc2hhcmVkKQorCXRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiICE9IHllcyAmJiBcCisJICBmdW5jX2ZhdGFsX2NvbmZpZ3VyYXRpb24gImNhbiBub3QgYnVpbGQgYSBzaGFyZWQgbGlicmFyeSIKKwlidWlsZF9vbGRfbGlicz1ubworCWJyZWFrCisJOzsKKyAgICAgIC1hbGwtc3RhdGljIHwgLXN0YXRpYyB8IC1zdGF0aWMtbGlidG9vbC1saWJzKQorCWNhc2UgJGFyZyBpbgorCS1hbGwtc3RhdGljKQorCSAgaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSB5ZXMgJiYgdGVzdCAteiAiJGxpbmtfc3RhdGljX2ZsYWciOyB0aGVuCisJICAgIGZ1bmNfd2FybmluZyAiY29tcGxldGUgc3RhdGljIGxpbmtpbmcgaXMgaW1wb3NzaWJsZSBpbiB0aGlzIGNvbmZpZ3VyYXRpb24iCisJICBmaQorCSAgaWYgdGVzdCAtbiAiJGxpbmtfc3RhdGljX2ZsYWciOyB0aGVuCisJICAgIGRsb3Blbl9zZWxmPSRkbG9wZW5fc2VsZl9zdGF0aWMKKwkgIGZpCisJICBwcmVmZXJfc3RhdGljX2xpYnM9eWVzCisJICA7OworCS1zdGF0aWMpCisJICBpZiB0ZXN0IC16ICIkcGljX2ZsYWciICYmIHRlc3QgLW4gIiRsaW5rX3N0YXRpY19mbGFnIjsgdGhlbgorCSAgICBkbG9wZW5fc2VsZj0kZGxvcGVuX3NlbGZfc3RhdGljCisJICBmaQorCSAgcHJlZmVyX3N0YXRpY19saWJzPWJ1aWx0CisJICA7OworCS1zdGF0aWMtbGlidG9vbC1saWJzKQorCSAgaWYgdGVzdCAteiAiJHBpY19mbGFnIiAmJiB0ZXN0IC1uICIkbGlua19zdGF0aWNfZmxhZyI7IHRoZW4KKwkgICAgZGxvcGVuX3NlbGY9JGRsb3Blbl9zZWxmX3N0YXRpYworCSAgZmkKKwkgIHByZWZlcl9zdGF0aWNfbGlicz15ZXMKKwkgIDs7CisJZXNhYworCWJ1aWxkX2xpYnRvb2xfbGlicz1ubworCWJ1aWxkX29sZF9saWJzPXllcworCWJyZWFrCisJOzsKKyAgICAgIGVzYWMKKyAgICBkb25lCisKKyAgICAjIFNlZSBpZiBvdXIgc2hhcmVkIGFyY2hpdmVzIGRlcGVuZCBvbiBzdGF0aWMgYXJjaGl2ZXMuCisgICAgdGVzdCAtbiAiJG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMiICYmIGJ1aWxkX29sZF9saWJzPXllcworCisgICAgIyBHbyB0aHJvdWdoIHRoZSBhcmd1bWVudHMsIHRyYW5zZm9ybWluZyB0aGVtIG9uIHRoZSB3YXkuCisgICAgd2hpbGUgdGVzdCAiJCMiIC1ndCAwOyBkbworICAgICAgYXJnPSIkMSIKKyAgICAgIHNoaWZ0CisgICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkYXJnIgorICAgICAgcWFyZz0kZnVuY19xdW90ZV9mb3JfZXZhbF91bnF1b3RlZF9yZXN1bHQKKyAgICAgIGZ1bmNfYXBwZW5kIGxpYnRvb2xfYXJncyAiICRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKworICAgICAgIyBJZiB0aGUgcHJldmlvdXMgb3B0aW9uIG5lZWRzIGFuIGFyZ3VtZW50LCBhc3NpZ24gaXQuCisgICAgICBpZiB0ZXN0IC1uICIkcHJldiI7IHRoZW4KKwljYXNlICRwcmV2IGluCisJb3V0cHV0KQorCSAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgQE9VVFBVVEAiCisJICBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgQE9VVFBVVEAiCisJICA7OworCWVzYWMKKworCWNhc2UgJHByZXYgaW4KKwlkbGZpbGVzfGRscHJlZmlsZXMpCisJICBpZiB0ZXN0ICIkcHJlbG9hZCIgPSBubzsgdGhlbgorCSAgICAjIEFkZCB0aGUgc3ltYm9sIG9iamVjdCBpbnRvIHRoZSBsaW5raW5nIGNvbW1hbmRzLgorCSAgICBmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiBAU1lNRklMRUAiCisJICAgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiBAU1lNRklMRUAiCisJICAgIHByZWxvYWQ9eWVzCisJICBmaQorCSAgY2FzZSAkYXJnIGluCisJICAqLmxhIHwgKi5sbykgOzsgICMgV2UgaGFuZGxlIHRoZXNlIGNhc2VzIGJlbG93LgorCSAgZm9yY2UpCisJICAgIGlmIHRlc3QgIiRkbHNlbGYiID0gbm87IHRoZW4KKwkgICAgICBkbHNlbGY9bmVlZGxlc3MKKwkgICAgICBleHBvcnRfZHluYW1pYz15ZXMKKwkgICAgZmkKKwkgICAgcHJldj0KKwkgICAgY29udGludWUKKwkgICAgOzsKKwkgIHNlbGYpCisJICAgIGlmIHRlc3QgIiRwcmV2IiA9IGRscHJlZmlsZXM7IHRoZW4KKwkgICAgICBkbHNlbGY9eWVzCisJICAgIGVsaWYgdGVzdCAiJHByZXYiID0gZGxmaWxlcyAmJiB0ZXN0ICIkZGxvcGVuX3NlbGYiICE9IHllczsgdGhlbgorCSAgICAgIGRsc2VsZj15ZXMKKwkgICAgZWxzZQorCSAgICAgIGRsc2VsZj1uZWVkbGVzcworCSAgICAgIGV4cG9ydF9keW5hbWljPXllcworCSAgICBmaQorCSAgICBwcmV2PQorCSAgICBjb250aW51ZQorCSAgICA7OworCSAgKikKKwkgICAgaWYgdGVzdCAiJHByZXYiID0gZGxmaWxlczsgdGhlbgorCSAgICAgIGRsZmlsZXM9IiRkbGZpbGVzICRhcmciCisJICAgIGVsc2UKKwkgICAgICBkbHByZWZpbGVzPSIkZGxwcmVmaWxlcyAkYXJnIgorCSAgICBmaQorCSAgICBwcmV2PQorCSAgICBjb250aW51ZQorCSAgICA7OworCSAgZXNhYworCSAgOzsKKwlleHBzeW1zKQorCSAgZXhwb3J0X3N5bWJvbHM9IiRhcmciCisJICB0ZXN0IC1mICIkYXJnIiBcCisJICAgIHx8IGZ1bmNfZmF0YWxfZXJyb3IgInN5bWJvbCBmaWxlIFxgJGFyZycgZG9lcyBub3QgZXhpc3QiCisJICBwcmV2PQorCSAgY29udGludWUKKwkgIDs7CisJZXhwc3ltc19yZWdleCkKKwkgIGV4cG9ydF9zeW1ib2xzX3JlZ2V4PSIkYXJnIgorCSAgcHJldj0KKwkgIGNvbnRpbnVlCisJICA7OworCWZyYW1ld29yaykKKwkgIGNhc2UgJGhvc3QgaW4KKwkgICAgKi0qLWRhcndpbiopCisJICAgICAgY2FzZSAiJGRlcGxpYnMgIiBpbgorCQkqIiAkcWFyZy5sdGZyYW1ld29yayAiKikgOzsKKwkJKikgZGVwbGlicz0iJGRlcGxpYnMgJHFhcmcubHRmcmFtZXdvcmsiICMgdGhpcyBpcyBmaXhlZCBsYXRlcgorCQkgICA7OworCSAgICAgIGVzYWMKKwkgICAgICA7OworCSAgZXNhYworCSAgcHJldj0KKwkgIGNvbnRpbnVlCisJICA7OworCWluc3RfcHJlZml4KQorCSAgaW5zdF9wcmVmaXhfZGlyPSIkYXJnIgorCSAgcHJldj0KKwkgIGNvbnRpbnVlCisJICA7OworCW9iamVjdGxpc3QpCisJICBpZiB0ZXN0IC1mICIkYXJnIjsgdGhlbgorCSAgICBzYXZlX2FyZz0kYXJnCisJICAgIG1vcmVhcmdzPQorCSAgICBmb3IgZmlsIGluIGBjYXQgIiRzYXZlX2FyZyJgCisJICAgIGRvCisjCSAgICAgIG1vcmVhcmdzPSIkbW9yZWFyZ3MgJGZpbCIKKwkgICAgICBhcmc9JGZpbAorCSAgICAgICMgQSBsaWJ0b29sLWNvbnRyb2xsZWQgb2JqZWN0LgorCisJICAgICAgIyBDaGVjayB0byBzZWUgdGhhdCB0aGlzIHJlYWxseSBpcyBhIGxpYnRvb2wgb2JqZWN0LgorCSAgICAgIGlmIGZ1bmNfbGFsaWJfdW5zYWZlX3AgIiRhcmciOyB0aGVuCisJCXBpY19vYmplY3Q9CisJCW5vbl9waWNfb2JqZWN0PQorCisJCSMgUmVhZCB0aGUgLmxvIGZpbGUKKwkJZnVuY19zb3VyY2UgIiRhcmciCisKKwkJaWYgdGVzdCAteiAiJHBpY19vYmplY3QiIHx8CisJCSAgIHRlc3QgLXogIiRub25fcGljX29iamVjdCIgfHwKKwkJICAgdGVzdCAiJHBpY19vYmplY3QiID0gbm9uZSAmJgorCQkgICB0ZXN0ICIkbm9uX3BpY19vYmplY3QiID0gbm9uZTsgdGhlbgorCQkgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBmaW5kIG5hbWUgb2Ygb2JqZWN0IGZvciBcYCRhcmcnIgorCQlmaQorCisJCSMgRXh0cmFjdCBzdWJkaXJlY3RvcnkgZnJvbSB0aGUgYXJndW1lbnQuCisJCWZ1bmNfZGlybmFtZSAiJGFyZyIgIi8iICIiCisJCXhkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorCisJCWlmIHRlc3QgIiRwaWNfb2JqZWN0IiAhPSBub25lOyB0aGVuCisJCSAgIyBQcmVwZW5kIHRoZSBzdWJkaXJlY3RvcnkgdGhlIG9iamVjdCBpcyBmb3VuZCBpbi4KKwkJICBwaWNfb2JqZWN0PSIkeGRpciRwaWNfb2JqZWN0IgorCisJCSAgaWYgdGVzdCAiJHByZXYiID0gZGxmaWxlczsgdGhlbgorCQkgICAgaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSB5ZXMgJiYgdGVzdCAiJGRsb3Blbl9zdXBwb3J0IiA9IHllczsgdGhlbgorCQkgICAgICBkbGZpbGVzPSIkZGxmaWxlcyAkcGljX29iamVjdCIKKwkJICAgICAgcHJldj0KKwkJICAgICAgY29udGludWUKKwkJICAgIGVsc2UKKwkJICAgICAgIyBJZiBsaWJ0b29sIG9iamVjdHMgYXJlIHVuc3VwcG9ydGVkLCB0aGVuIHdlIG5lZWQgdG8gcHJlbG9hZC4KKwkJICAgICAgcHJldj1kbHByZWZpbGVzCisJCSAgICBmaQorCQkgIGZpCisKKwkJICAjIENIRUNLIE1FOiAgSSB0aGluayBJIGJ1c3RlZCB0aGlzLiAgLU9zc2FtYQorCQkgIGlmIHRlc3QgIiRwcmV2IiA9IGRscHJlZmlsZXM7IHRoZW4KKwkJICAgICMgUHJlbG9hZCB0aGUgb2xkLXN0eWxlIG9iamVjdC4KKwkJICAgIGRscHJlZmlsZXM9IiRkbHByZWZpbGVzICRwaWNfb2JqZWN0IgorCQkgICAgcHJldj0KKwkJICBmaQorCisJCSAgIyBBIFBJQyBvYmplY3QuCisJCSAgZnVuY19hcHBlbmQgbGlib2JqcyAiICRwaWNfb2JqZWN0IgorCQkgIGFyZz0iJHBpY19vYmplY3QiCisJCWZpCisKKwkJIyBOb24tUElDIG9iamVjdC4KKwkJaWYgdGVzdCAiJG5vbl9waWNfb2JqZWN0IiAhPSBub25lOyB0aGVuCisJCSAgIyBQcmVwZW5kIHRoZSBzdWJkaXJlY3RvcnkgdGhlIG9iamVjdCBpcyBmb3VuZCBpbi4KKwkJICBub25fcGljX29iamVjdD0iJHhkaXIkbm9uX3BpY19vYmplY3QiCisKKwkJICAjIEEgc3RhbmRhcmQgbm9uLVBJQyBvYmplY3QKKwkJICBmdW5jX2FwcGVuZCBub25fcGljX29iamVjdHMgIiAkbm9uX3BpY19vYmplY3QiCisJCSAgaWYgdGVzdCAteiAiJHBpY19vYmplY3QiIHx8IHRlc3QgIiRwaWNfb2JqZWN0IiA9IG5vbmUgOyB0aGVuCisJCSAgICBhcmc9IiRub25fcGljX29iamVjdCIKKwkJICBmaQorCQllbHNlCisJCSAgIyBJZiB0aGUgUElDIG9iamVjdCBleGlzdHMsIHVzZSBpdCBpbnN0ZWFkLgorCQkgICMgJHhkaXIgd2FzIHByZXBlbmRlZCB0byAkcGljX29iamVjdCBhYm92ZS4KKwkJICBub25fcGljX29iamVjdD0iJHBpY19vYmplY3QiCisJCSAgZnVuY19hcHBlbmQgbm9uX3BpY19vYmplY3RzICIgJG5vbl9waWNfb2JqZWN0IgorCQlmaQorCSAgICAgIGVsc2UKKwkJIyBPbmx5IGFuIGVycm9yIGlmIG5vdCBkb2luZyBhIGRyeS1ydW4uCisJCWlmICRvcHRfZHJ5X3J1bjsgdGhlbgorCQkgICMgRXh0cmFjdCBzdWJkaXJlY3RvcnkgZnJvbSB0aGUgYXJndW1lbnQuCisJCSAgZnVuY19kaXJuYW1lICIkYXJnIiAiLyIgIiIKKwkJICB4ZGlyPSIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKKworCQkgIGZ1bmNfbG8ybyAiJGFyZyIKKwkJICBwaWNfb2JqZWN0PSR4ZGlyJG9iamRpci8kZnVuY19sbzJvX3Jlc3VsdAorCQkgIG5vbl9waWNfb2JqZWN0PSR4ZGlyJGZ1bmNfbG8yb19yZXN1bHQKKwkJICBmdW5jX2FwcGVuZCBsaWJvYmpzICIgJHBpY19vYmplY3QiCisJCSAgZnVuY19hcHBlbmQgbm9uX3BpY19vYmplY3RzICIgJG5vbl9waWNfb2JqZWN0IgorCSAgICAgICAgZWxzZQorCQkgIGZ1bmNfZmF0YWxfZXJyb3IgIlxgJGFyZycgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBvYmplY3QiCisJCWZpCisJICAgICAgZmkKKwkgICAgZG9uZQorCSAgZWxzZQorCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJsaW5rIGlucHV0IGZpbGUgXGAkYXJnJyBkb2VzIG5vdCBleGlzdCIKKwkgIGZpCisJICBhcmc9JHNhdmVfYXJnCisJICBwcmV2PQorCSAgY29udGludWUKKwkgIDs7CisJcHJlY2lvdXNfcmVnZXgpCisJICBwcmVjaW91c19maWxlc19yZWdleD0iJGFyZyIKKwkgIHByZXY9CisJICBjb250aW51ZQorCSAgOzsKKwlyZWxlYXNlKQorCSAgcmVsZWFzZT0iLSRhcmciCisJICBwcmV2PQorCSAgY29udGludWUKKwkgIDs7CisJcnBhdGggfCB4cnBhdGgpCisJICAjIFdlIG5lZWQgYW4gYWJzb2x1dGUgcGF0aC4KKwkgIGNhc2UgJGFyZyBpbgorCSAgW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSA7OworCSAgKikKKwkgICAgZnVuY19mYXRhbF9lcnJvciAib25seSBhYnNvbHV0ZSBydW4tcGF0aHMgYXJlIGFsbG93ZWQiCisJICAgIDs7CisJICBlc2FjCisJICBpZiB0ZXN0ICIkcHJldiIgPSBycGF0aDsgdGhlbgorCSAgICBjYXNlICIkcnBhdGggIiBpbgorCSAgICAqIiAkYXJnICIqKSA7OworCSAgICAqKSBycGF0aD0iJHJwYXRoICRhcmciIDs7CisJICAgIGVzYWMKKwkgIGVsc2UKKwkgICAgY2FzZSAiJHhycGF0aCAiIGluCisJICAgICoiICRhcmcgIiopIDs7CisJICAgICopIHhycGF0aD0iJHhycGF0aCAkYXJnIiA7OworCSAgICBlc2FjCisJICBmaQorCSAgcHJldj0KKwkgIGNvbnRpbnVlCisJICA7OworCXNocmV4dCkKKwkgIHNocmV4dF9jbWRzPSIkYXJnIgorCSAgcHJldj0KKwkgIGNvbnRpbnVlCisJICA7OworCXdlYWspCisJICB3ZWFrX2xpYnM9IiR3ZWFrX2xpYnMgJGFyZyIKKwkgIHByZXY9CisJICBjb250aW51ZQorCSAgOzsKKwl4Y2NsaW5rZXIpCisJICBsaW5rZXJfZmxhZ3M9IiRsaW5rZXJfZmxhZ3MgJHFhcmciCisJICBjb21waWxlcl9mbGFncz0iJGNvbXBpbGVyX2ZsYWdzICRxYXJnIgorCSAgcHJldj0KKwkgIGZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICRxYXJnIgorCSAgZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICRxYXJnIgorCSAgY29udGludWUKKwkgIDs7CisJeGNvbXBpbGVyKQorCSAgY29tcGlsZXJfZmxhZ3M9IiRjb21waWxlcl9mbGFncyAkcWFyZyIKKwkgIHByZXY9CisJICBmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAkcWFyZyIKKwkgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkcWFyZyIKKwkgIGNvbnRpbnVlCisJICA7OworCXhsaW5rZXIpCisJICBsaW5rZXJfZmxhZ3M9IiRsaW5rZXJfZmxhZ3MgJHFhcmciCisJICBjb21waWxlcl9mbGFncz0iJGNvbXBpbGVyX2ZsYWdzICR3bCRxYXJnIgorCSAgcHJldj0KKwkgIGZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICR3bCRxYXJnIgorCSAgZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICR3bCRxYXJnIgorCSAgY29udGludWUKKwkgIDs7CisJKikKKwkgIGV2YWwgIiRwcmV2PVwiXCRhcmdcIiIKKwkgIHByZXY9CisJICBjb250aW51ZQorCSAgOzsKKwllc2FjCisgICAgICBmaSAjIHRlc3QgLW4gIiRwcmV2IgorCisgICAgICBwcmV2YXJnPSIkYXJnIgorCisgICAgICBjYXNlICRhcmcgaW4KKyAgICAgIC1hbGwtc3RhdGljKQorCWlmIHRlc3QgLW4gIiRsaW5rX3N0YXRpY19mbGFnIjsgdGhlbgorCSAgIyBTZWUgY29tbWVudCBmb3IgLXN0YXRpYyBmbGFnIGJlbG93LCBmb3IgbW9yZSBkZXRhaWxzLgorCSAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJGxpbmtfc3RhdGljX2ZsYWciCisJICBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJGxpbmtfc3RhdGljX2ZsYWciCisJZmkKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1hbGxvdy11bmRlZmluZWQpCisJIyBGSVhNRTogcmVtb3ZlIHRoaXMgZmxhZyBzb21ldGltZSBpbiB0aGUgZnV0dXJlLgorCWZ1bmNfZmF0YWxfZXJyb3IgIlxgLWFsbG93LXVuZGVmaW5lZCcgbXVzdCBub3QgYmUgdXNlZCBiZWNhdXNlIGl0IGlzIHRoZSBkZWZhdWx0IgorCTs7CisKKyAgICAgIC1hdm9pZC12ZXJzaW9uKQorCWF2b2lkX3ZlcnNpb249eWVzCisJY29udGludWUKKwk7OworCisgICAgICAtZGxvcGVuKQorCXByZXY9ZGxmaWxlcworCWNvbnRpbnVlCisJOzsKKworICAgICAgLWRscHJlb3BlbikKKwlwcmV2PWRscHJlZmlsZXMKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1leHBvcnQtZHluYW1pYykKKwlleHBvcnRfZHluYW1pYz15ZXMKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1leHBvcnQtc3ltYm9scyB8IC1leHBvcnQtc3ltYm9scy1yZWdleCkKKwlpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHMiIHx8IHRlc3QgLW4gIiRleHBvcnRfc3ltYm9sc19yZWdleCI7IHRoZW4KKwkgIGZ1bmNfZmF0YWxfZXJyb3IgIm1vcmUgdGhhbiBvbmUgLWV4cG9ydGVkLXN5bWJvbHMgYXJndW1lbnQgaXMgbm90IGFsbG93ZWQiCisJZmkKKwlpZiB0ZXN0ICJYJGFyZyIgPSAiWC1leHBvcnQtc3ltYm9scyI7IHRoZW4KKwkgIHByZXY9ZXhwc3ltcworCWVsc2UKKwkgIHByZXY9ZXhwc3ltc19yZWdleAorCWZpCisJY29udGludWUKKwk7OworCisgICAgICAtZnJhbWV3b3JrKQorCXByZXY9ZnJhbWV3b3JrCisJY29udGludWUKKwk7OworCisgICAgICAtaW5zdC1wcmVmaXgtZGlyKQorCXByZXY9aW5zdF9wcmVmaXgKKwljb250aW51ZQorCTs7CisKKyAgICAgICMgVGhlIG5hdGl2ZSBJUklYIGxpbmtlciB1bmRlcnN0YW5kcyAtTEFORzoqLCAtTElTVDoqIGFuZCAtTE5POioKKyAgICAgICMgc28sIGlmIHdlIHNlZSB0aGVzZSBmbGFncyBiZSBjYXJlZnVsIG5vdCB0byB0cmVhdCB0aGVtIGxpa2UgLUwKKyAgICAgIC1MW0EtWl1bQS1aXSo6KikKKwljYXNlICR3aXRoX2djYy8kaG9zdCBpbgorCW5vLyotKi1pcml4KiB8IC8qLSotaXJpeCopCisJICBmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAkYXJnIgorCSAgZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICRhcmciCisJICA7OworCWVzYWMKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1MKikKKwlmdW5jX3N0cmlwbmFtZSAnLUwnICcnICIkYXJnIgorCWRpcj0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJaWYgdGVzdCAteiAiJGRpciI7IHRoZW4KKwkgIGlmIHRlc3QgIiQjIiAtZ3QgMDsgdGhlbgorCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJyZXF1aXJlIG5vIHNwYWNlIGJldHdlZW4gXGAtTCcgYW5kIFxgJDEnIgorCSAgZWxzZQorCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJuZWVkIHBhdGggZm9yIFxgLUwnIG9wdGlvbiIKKwkgIGZpCisJZmkKKwkjIFdlIG5lZWQgYW4gYWJzb2x1dGUgcGF0aC4KKwljYXNlICRkaXIgaW4KKwlbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIDs7CisJKikKKwkgIGFic2Rpcj1gY2QgIiRkaXIiICYmIHB3ZGAKKwkgIHRlc3QgLXogIiRhYnNkaXIiICYmIFwKKwkgICAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGRldGVybWluZSBhYnNvbHV0ZSBkaXJlY3RvcnkgbmFtZSBvZiBcYCRkaXInIgorCSAgZGlyPSIkYWJzZGlyIgorCSAgOzsKKwllc2FjCisJY2FzZSAiJGRlcGxpYnMgIiBpbgorCSoiIC1MJGRpciAiKikgOzsKKwkqKQorCSAgZGVwbGlicz0iJGRlcGxpYnMgLUwkZGlyIgorCSAgbGliX3NlYXJjaF9wYXRoPSIkbGliX3NlYXJjaF9wYXRoICRkaXIiCisJICA7OworCWVzYWMKKwljYXNlICRob3N0IGluCisJKi0qLWN5Z3dpbiogfCAqLSotbWluZ3cqIHwgKi0qLXB3MzIqIHwgKi0qLW9zMiogfCAqLWNlZ2NjKikKKwkgIHRlc3RiaW5kaXI9YCRFQ0hPICJYJGRpciIgfCAkWHNlZCAtZSAncyovbGliJCovYmluKidgCisJICBjYXNlIDokZGxsc2VhcmNocGF0aDogaW4KKwkgICoiOiRkaXI6IiopIDs7CisJICA6OikgZGxsc2VhcmNocGF0aD0kZGlyOzsKKwkgICopIGRsbHNlYXJjaHBhdGg9IiRkbGxzZWFyY2hwYXRoOiRkaXIiOzsKKwkgIGVzYWMKKwkgIGNhc2UgOiRkbGxzZWFyY2hwYXRoOiBpbgorCSAgKiI6JHRlc3RiaW5kaXI6IiopIDs7CisJICA6OikgZGxsc2VhcmNocGF0aD0kdGVzdGJpbmRpcjs7CisJICAqKSBkbGxzZWFyY2hwYXRoPSIkZGxsc2VhcmNocGF0aDokdGVzdGJpbmRpciI7OworCSAgZXNhYworCSAgOzsKKwllc2FjCisJY29udGludWUKKwk7OworCisgICAgICAtbCopCisJaWYgdGVzdCAiWCRhcmciID0gIlgtbGMiIHx8IHRlc3QgIlgkYXJnIiA9ICJYLWxtIjsgdGhlbgorCSAgY2FzZSAkaG9zdCBpbgorCSAgKi0qLWN5Z3dpbiogfCAqLSotbWluZ3cqIHwgKi0qLXB3MzIqIHwgKi0qLWJlb3MqIHwgKi1jZWdjYyopCisJICAgICMgVGhlc2Ugc3lzdGVtcyBkb24ndCBhY3R1YWxseSBoYXZlIGEgQyBvciBtYXRoIGxpYnJhcnkgKGFzIHN1Y2gpCisJICAgIGNvbnRpbnVlCisJICAgIDs7CisJICAqLSotb3MyKikKKwkgICAgIyBUaGVzZSBzeXN0ZW1zIGRvbid0IGFjdHVhbGx5IGhhdmUgYSBDIGxpYnJhcnkgKGFzIHN1Y2gpCisJICAgIHRlc3QgIlgkYXJnIiA9ICJYLWxjIiAmJiBjb250aW51ZQorCSAgICA7OworCSAgKi0qLW9wZW5ic2QqIHwgKi0qLWZyZWVic2QqIHwgKi0qLWRyYWdvbmZseSopCisJICAgICMgRG8gbm90IGluY2x1ZGUgbGliYyBkdWUgdG8gdXMgaGF2aW5nIGxpYmMvbGliY19yLgorCSAgICB0ZXN0ICJYJGFyZyIgPSAiWC1sYyIgJiYgY29udGludWUKKwkgICAgOzsKKwkgICotKi1yaGFwc29keSogfCAqLSotZGFyd2luMS5bMDEyXSkKKwkgICAgIyBSaGFwc29keSBDIGFuZCBtYXRoIGxpYnJhcmllcyBhcmUgaW4gdGhlIFN5c3RlbSBmcmFtZXdvcmsKKwkgICAgZGVwbGlicz0iJGRlcGxpYnMgU3lzdGVtLmx0ZnJhbWV3b3JrIgorCSAgICBjb250aW51ZQorCSAgICA7OworCSAgKi0qLXNjbzMuMnY1KiB8ICotKi1zY281djYqKQorCSAgICAjIENhdXNlcyBwcm9ibGVtcyB3aXRoIF9fY3R5cGUKKwkgICAgdGVzdCAiWCRhcmciID0gIlgtbGMiICYmIGNvbnRpbnVlCisJICAgIDs7CisJICAqLSotc3lzdjQuMnV3MiogfCAqLSotc3lzdjUqIHwgKi0qLXVuaXh3YXJlKiB8ICotKi1PcGVuVU5JWCopCisJICAgICMgQ29tcGlsZXIgaW5zZXJ0cyBsaWJjIGluIHRoZSBjb3JyZWN0IHBsYWNlIGZvciB0aHJlYWRzIHRvIHdvcmsKKwkgICAgdGVzdCAiWCRhcmciID0gIlgtbGMiICYmIGNvbnRpbnVlCisJICAgIDs7CisJICBlc2FjCisJZWxpZiB0ZXN0ICJYJGFyZyIgPSAiWC1sY19yIjsgdGhlbgorCSBjYXNlICRob3N0IGluCisJICotKi1vcGVuYnNkKiB8ICotKi1mcmVlYnNkKiB8ICotKi1kcmFnb25mbHkqKQorCSAgICMgRG8gbm90IGluY2x1ZGUgbGliY19yIGRpcmVjdGx5LCB1c2UgLXB0aHJlYWQgZmxhZy4KKwkgICBjb250aW51ZQorCSAgIDs7CisJIGVzYWMKKwlmaQorCWRlcGxpYnM9IiRkZXBsaWJzICRhcmciCisJY29udGludWUKKwk7OworCisgICAgICAtbW9kdWxlKQorCW1vZHVsZT15ZXMKKwljb250aW51ZQorCTs7CisKKyAgICAgICMgVHJ1NjQgVU5JWCB1c2VzIC1tb2RlbCBbYXJnXSB0byBkZXRlcm1pbmUgdGhlIGxheW91dCBvZiBDKysKKyAgICAgICMgY2xhc3NlcywgbmFtZSBtYW5nbGluZywgYW5kIGV4Y2VwdGlvbiBoYW5kbGluZy4KKyAgICAgICMgRGFyd2luIHVzZXMgdGhlIC1hcmNoIGZsYWcgdG8gZGV0ZXJtaW5lIG91dHB1dCBhcmNoaXRlY3R1cmUuCisgICAgICAtbW9kZWx8LWFyY2h8LWlzeXNyb290KQorCWNvbXBpbGVyX2ZsYWdzPSIkY29tcGlsZXJfZmxhZ3MgJGFyZyIKKwlmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAkYXJnIgorCWZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkYXJnIgorCXByZXY9eGNvbXBpbGVyCisJY29udGludWUKKwk7OworCisgICAgICAtbXR8LW10aHJlYWRzfC1rdGhyZWFkfC1LdGhyZWFkfC1wdGhyZWFkfC1wdGhyZWFkc3wtLXRocmVhZC1zYWZlfC10aHJlYWRzKQorCWNvbXBpbGVyX2ZsYWdzPSIkY29tcGlsZXJfZmxhZ3MgJGFyZyIKKwlmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAkYXJnIgorCWZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkYXJnIgorCWNhc2UgIiRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAiIGluCisJICAgICoiICRhcmcgIiopIDs7CisJICAgICogKSBuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncz0iJG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICRhcmciIDs7CisJZXNhYworCWNvbnRpbnVlCisJOzsKKworICAgICAgLW11bHRpX21vZHVsZSkKKwlzaW5nbGVfbW9kdWxlPSIke3dsfS1tdWx0aV9tb2R1bGUiCisJY29udGludWUKKwk7OworCisgICAgICAtbm8tZmFzdC1pbnN0YWxsKQorCWZhc3RfaW5zdGFsbD1ubworCWNvbnRpbnVlCisJOzsKKworICAgICAgLW5vLWluc3RhbGwpCisJY2FzZSAkaG9zdCBpbgorCSotKi1jeWd3aW4qIHwgKi0qLW1pbmd3KiB8ICotKi1wdzMyKiB8ICotKi1vczIqIHwgKi0qLWRhcndpbiogfCAqLWNlZ2NjKikKKwkgICMgVGhlIFBBVEggaGFja2VyeSBpbiB3cmFwcGVyIHNjcmlwdHMgaXMgcmVxdWlyZWQgb24gV2luZG93cworCSAgIyBhbmQgRGFyd2luIGluIG9yZGVyIGZvciB0aGUgbG9hZGVyIHRvIGZpbmQgYW55IGRsbHMgaXQgbmVlZHMuCisJICBmdW5jX3dhcm5pbmcgIlxgLW5vLWluc3RhbGwnIGlzIGlnbm9yZWQgZm9yICRob3N0IgorCSAgZnVuY193YXJuaW5nICJhc3N1bWluZyBcYC1uby1mYXN0LWluc3RhbGwnIGluc3RlYWQiCisJICBmYXN0X2luc3RhbGw9bm8KKwkgIDs7CisJKikgbm9faW5zdGFsbD15ZXMgOzsKKwllc2FjCisJY29udGludWUKKwk7OworCisgICAgICAtbm8tdW5kZWZpbmVkKQorCWFsbG93X3VuZGVmaW5lZD1ubworCWNvbnRpbnVlCisJOzsKKworICAgICAgLW9iamVjdGxpc3QpCisJcHJldj1vYmplY3RsaXN0CisJY29udGludWUKKwk7OworCisgICAgICAtbykgcHJldj1vdXRwdXQgOzsKKworICAgICAgLXByZWNpb3VzLWZpbGVzLXJlZ2V4KQorCXByZXY9cHJlY2lvdXNfcmVnZXgKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1yZWxlYXNlKQorCXByZXY9cmVsZWFzZQorCWNvbnRpbnVlCisJOzsKKworICAgICAgLXJwYXRoKQorCXByZXY9cnBhdGgKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1SKQorCXByZXY9eHJwYXRoCisJY29udGludWUKKwk7OworCisgICAgICAtUiopCisJZnVuY19zdHJpcG5hbWUgJy1SJyAnJyAiJGFyZyIKKwlkaXI9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCSMgV2UgbmVlZCBhbiBhYnNvbHV0ZSBwYXRoLgorCWNhc2UgJGRpciBpbgorCVtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgOzsKKwkqKQorCSAgZnVuY19mYXRhbF9lcnJvciAib25seSBhYnNvbHV0ZSBydW4tcGF0aHMgYXJlIGFsbG93ZWQiCisJICA7OworCWVzYWMKKwljYXNlICIkeHJwYXRoICIgaW4KKwkqIiAkZGlyICIqKSA7OworCSopIHhycGF0aD0iJHhycGF0aCAkZGlyIiA7OworCWVzYWMKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1zaGFyZWQpCisJIyBUaGUgZWZmZWN0cyBvZiAtc2hhcmVkIGFyZSBkZWZpbmVkIGluIGEgcHJldmlvdXMgbG9vcC4KKwljb250aW51ZQorCTs7CisKKyAgICAgIC1zaHJleHQpCisJcHJldj1zaHJleHQKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1zdGF0aWMgfCAtc3RhdGljLWxpYnRvb2wtbGlicykKKwkjIFRoZSBlZmZlY3RzIG9mIC1zdGF0aWMgYXJlIGRlZmluZWQgaW4gYSBwcmV2aW91cyBsb29wLgorCSMgV2UgdXNlZCB0byBkbyB0aGUgc2FtZSBhcyAtYWxsLXN0YXRpYyBvbiBwbGF0Zm9ybXMgdGhhdAorCSMgZGlkbid0IGhhdmUgYSBQSUMgZmxhZywgYnV0IHRoZSBhc3N1bXB0aW9uIHRoYXQgdGhlIGVmZmVjdHMKKwkjIHdvdWxkIGJlIGVxdWl2YWxlbnQgd2FzIHdyb25nLiAgSXQgd291bGQgYnJlYWsgb24gYXQgbGVhc3QKKwkjIERpZ2l0YWwgVW5peCBhbmQgQUlYLgorCWNvbnRpbnVlCisJOzsKKworICAgICAgLXRocmVhZC1zYWZlKQorCXRocmVhZF9zYWZlPXllcworCWNvbnRpbnVlCisJOzsKKworICAgICAgLXZlcnNpb24taW5mbykKKwlwcmV2PXZpbmZvCisJY29udGludWUKKwk7OworCisgICAgICAtdmVyc2lvbi1udW1iZXIpCisJcHJldj12aW5mbworCXZpbmZvX251bWJlcj15ZXMKKwljb250aW51ZQorCTs7CisKKyAgICAgIC13ZWFrKQorICAgICAgICBwcmV2PXdlYWsKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1XYywqKQorCWZ1bmNfc3RyaXBuYW1lICctV2MsJyAnJyAiJGFyZyIKKwlhcmdzPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwlhcmc9CisJc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JywnCisJZm9yIGZsYWcgaW4gJGFyZ3M7IGRvCisJICBJRlM9IiRzYXZlX2lmcyIKKyAgICAgICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkZmxhZyIKKwkgIGFyZz0iJGFyZyAkd2wkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisJICBjb21waWxlcl9mbGFncz0iJGNvbXBpbGVyX2ZsYWdzICRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKwlkb25lCisJSUZTPSIkc2F2ZV9pZnMiCisJZnVuY19zdHJpcG5hbWUgJyAnICcnICIkYXJnIgorCWFyZz0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJOzsKKworICAgICAgLVdsLCopCisJZnVuY19zdHJpcG5hbWUgJy1XbCwnICcnICIkYXJnIgorCWFyZ3M9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCWFyZz0KKwlzYXZlX2lmcz0iJElGUyI7IElGUz0nLCcKKwlmb3IgZmxhZyBpbiAkYXJnczsgZG8KKwkgIElGUz0iJHNhdmVfaWZzIgorICAgICAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRmbGFnIgorCSAgYXJnPSIkYXJnICR3bCRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKwkgIGNvbXBpbGVyX2ZsYWdzPSIkY29tcGlsZXJfZmxhZ3MgJHdsJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorCSAgbGlua2VyX2ZsYWdzPSIkbGlua2VyX2ZsYWdzICRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKwlkb25lCisJSUZTPSIkc2F2ZV9pZnMiCisJZnVuY19zdHJpcG5hbWUgJyAnICcnICIkYXJnIgorCWFyZz0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJOzsKKworICAgICAgLVhjb21waWxlcikKKwlwcmV2PXhjb21waWxlcgorCWNvbnRpbnVlCisJOzsKKworICAgICAgLVhsaW5rZXIpCisJcHJldj14bGlua2VyCisJY29udGludWUKKwk7OworCisgICAgICAtWENDbGlua2VyKQorCXByZXY9eGNjbGlua2VyCisJY29udGludWUKKwk7OworCisgICAgICAjIC1tc2dfKiBmb3Igb3NmIGNjCisgICAgICAtbXNnXyopCisJZnVuY19xdW90ZV9mb3JfZXZhbCAiJGFyZyIKKwlhcmc9IiRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKwk7OworCisgICAgICAjIC02NCwgLW1pcHNbMC05XSBlbmFibGUgNjQtYml0IG1vZGUgb24gdGhlIFNHSSBjb21waWxlcgorICAgICAgIyAtclswLTldWzAtOV0qIHNwZWNpZmllcyB0aGUgcHJvY2Vzc29yIG9uIHRoZSBTR0kgY29tcGlsZXIKKyAgICAgICMgLXhhcmNoPSosIC14dGFyZ2V0PSogZW5hYmxlIDY0LWJpdCBtb2RlIG9uIHRoZSBTdW4gY29tcGlsZXIKKyAgICAgICMgK0RBKiwgK0REKiBlbmFibGUgNjQtYml0IG1vZGUgb24gdGhlIEhQIGNvbXBpbGVyCisgICAgICAjIC1xKiBwYXNzIHRocm91Z2ggY29tcGlsZXIgYXJncyBmb3IgdGhlIElCTSBjb21waWxlcgorICAgICAgIyAtbSosIC10WzQ1XSosIC10eHNjYWxlKiBwYXNzIHRocm91Z2ggYXJjaGl0ZWN0dXJlLXNwZWNpZmljCisgICAgICAjIGNvbXBpbGVyIGFyZ3MgZm9yIEdDQworICAgICAgIyAtRi9wYXRoIGdpdmVzIHBhdGggdG8gdW5pbnN0YWxsZWQgZnJhbWV3b3JrcywgZ2NjIG9uIGRhcndpbgorICAgICAgIyAtcCwgLXBnLCAtLWNvdmVyYWdlLCAtZnByb2ZpbGUtKiBwYXNzIHRocm91Z2ggcHJvZmlsaW5nIGZsYWcgZm9yIEdDQworICAgICAgIyBAZmlsZSBHQ0MgcmVzcG9uc2UgZmlsZXMKKyAgICAgIC02NHwtbWlwc1swLTldfC1yWzAtOV1bMC05XSp8LXhhcmNoPSp8LXh0YXJnZXQ9KnwrREEqfCtERCp8LXEqfC1tKnwgXAorICAgICAgLXRbNDVdKnwtdHhzY2FsZSp8LXB8LXBnfC0tY292ZXJhZ2V8LWZwcm9maWxlLSp8LUYqfEAqKQorICAgICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkYXJnIgorCWFyZz0iJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorICAgICAgICBmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAkYXJnIgorICAgICAgICBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJGFyZyIKKyAgICAgICAgY29tcGlsZXJfZmxhZ3M9IiRjb21waWxlcl9mbGFncyAkYXJnIgorICAgICAgICBjb250aW51ZQorICAgICAgICA7OworCisgICAgICAjIFNvbWUgb3RoZXIgY29tcGlsZXIgZmxhZy4KKyAgICAgIC0qIHwgKyopCisgICAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRhcmciCisJYXJnPSIkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisJOzsKKworICAgICAgKi4kb2JqZXh0KQorCSMgQSBzdGFuZGFyZCBvYmplY3QuCisJb2Jqcz0iJG9ianMgJGFyZyIKKwk7OworCisgICAgICAqLmxvKQorCSMgQSBsaWJ0b29sLWNvbnRyb2xsZWQgb2JqZWN0LgorCisJIyBDaGVjayB0byBzZWUgdGhhdCB0aGlzIHJlYWxseSBpcyBhIGxpYnRvb2wgb2JqZWN0LgorCWlmIGZ1bmNfbGFsaWJfdW5zYWZlX3AgIiRhcmciOyB0aGVuCisJICBwaWNfb2JqZWN0PQorCSAgbm9uX3BpY19vYmplY3Q9CisKKwkgICMgUmVhZCB0aGUgLmxvIGZpbGUKKwkgIGZ1bmNfc291cmNlICIkYXJnIgorCisJICBpZiB0ZXN0IC16ICIkcGljX29iamVjdCIgfHwKKwkgICAgIHRlc3QgLXogIiRub25fcGljX29iamVjdCIgfHwKKwkgICAgIHRlc3QgIiRwaWNfb2JqZWN0IiA9IG5vbmUgJiYKKwkgICAgIHRlc3QgIiRub25fcGljX29iamVjdCIgPSBub25lOyB0aGVuCisJICAgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBmaW5kIG5hbWUgb2Ygb2JqZWN0IGZvciBcYCRhcmcnIgorCSAgZmkKKworCSAgIyBFeHRyYWN0IHN1YmRpcmVjdG9yeSBmcm9tIHRoZSBhcmd1bWVudC4KKwkgIGZ1bmNfZGlybmFtZSAiJGFyZyIgIi8iICIiCisJICB4ZGlyPSIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKKworCSAgaWYgdGVzdCAiJHBpY19vYmplY3QiICE9IG5vbmU7IHRoZW4KKwkgICAgIyBQcmVwZW5kIHRoZSBzdWJkaXJlY3RvcnkgdGhlIG9iamVjdCBpcyBmb3VuZCBpbi4KKwkgICAgcGljX29iamVjdD0iJHhkaXIkcGljX29iamVjdCIKKworCSAgICBpZiB0ZXN0ICIkcHJldiIgPSBkbGZpbGVzOyB0aGVuCisJICAgICAgaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSB5ZXMgJiYgdGVzdCAiJGRsb3Blbl9zdXBwb3J0IiA9IHllczsgdGhlbgorCQlkbGZpbGVzPSIkZGxmaWxlcyAkcGljX29iamVjdCIKKwkJcHJldj0KKwkJY29udGludWUKKwkgICAgICBlbHNlCisJCSMgSWYgbGlidG9vbCBvYmplY3RzIGFyZSB1bnN1cHBvcnRlZCwgdGhlbiB3ZSBuZWVkIHRvIHByZWxvYWQuCisJCXByZXY9ZGxwcmVmaWxlcworCSAgICAgIGZpCisJICAgIGZpCisKKwkgICAgIyBDSEVDSyBNRTogIEkgdGhpbmsgSSBidXN0ZWQgdGhpcy4gIC1Pc3NhbWEKKwkgICAgaWYgdGVzdCAiJHByZXYiID0gZGxwcmVmaWxlczsgdGhlbgorCSAgICAgICMgUHJlbG9hZCB0aGUgb2xkLXN0eWxlIG9iamVjdC4KKwkgICAgICBkbHByZWZpbGVzPSIkZGxwcmVmaWxlcyAkcGljX29iamVjdCIKKwkgICAgICBwcmV2PQorCSAgICBmaQorCisJICAgICMgQSBQSUMgb2JqZWN0LgorCSAgICBmdW5jX2FwcGVuZCBsaWJvYmpzICIgJHBpY19vYmplY3QiCisJICAgIGFyZz0iJHBpY19vYmplY3QiCisJICBmaQorCisJICAjIE5vbi1QSUMgb2JqZWN0LgorCSAgaWYgdGVzdCAiJG5vbl9waWNfb2JqZWN0IiAhPSBub25lOyB0aGVuCisJICAgICMgUHJlcGVuZCB0aGUgc3ViZGlyZWN0b3J5IHRoZSBvYmplY3QgaXMgZm91bmQgaW4uCisJICAgIG5vbl9waWNfb2JqZWN0PSIkeGRpciRub25fcGljX29iamVjdCIKKworCSAgICAjIEEgc3RhbmRhcmQgbm9uLVBJQyBvYmplY3QKKwkgICAgZnVuY19hcHBlbmQgbm9uX3BpY19vYmplY3RzICIgJG5vbl9waWNfb2JqZWN0IgorCSAgICBpZiB0ZXN0IC16ICIkcGljX29iamVjdCIgfHwgdGVzdCAiJHBpY19vYmplY3QiID0gbm9uZSA7IHRoZW4KKwkgICAgICBhcmc9IiRub25fcGljX29iamVjdCIKKwkgICAgZmkKKwkgIGVsc2UKKwkgICAgIyBJZiB0aGUgUElDIG9iamVjdCBleGlzdHMsIHVzZSBpdCBpbnN0ZWFkLgorCSAgICAjICR4ZGlyIHdhcyBwcmVwZW5kZWQgdG8gJHBpY19vYmplY3QgYWJvdmUuCisJICAgIG5vbl9waWNfb2JqZWN0PSIkcGljX29iamVjdCIKKwkgICAgZnVuY19hcHBlbmQgbm9uX3BpY19vYmplY3RzICIgJG5vbl9waWNfb2JqZWN0IgorCSAgZmkKKwllbHNlCisJICAjIE9ubHkgYW4gZXJyb3IgaWYgbm90IGRvaW5nIGEgZHJ5LXJ1bi4KKwkgIGlmICRvcHRfZHJ5X3J1bjsgdGhlbgorCSAgICAjIEV4dHJhY3Qgc3ViZGlyZWN0b3J5IGZyb20gdGhlIGFyZ3VtZW50LgorCSAgICBmdW5jX2Rpcm5hbWUgIiRhcmciICIvIiAiIgorCSAgICB4ZGlyPSIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKKworCSAgICBmdW5jX2xvMm8gIiRhcmciCisJICAgIHBpY19vYmplY3Q9JHhkaXIkb2JqZGlyLyRmdW5jX2xvMm9fcmVzdWx0CisJICAgIG5vbl9waWNfb2JqZWN0PSR4ZGlyJGZ1bmNfbG8yb19yZXN1bHQKKwkgICAgZnVuY19hcHBlbmQgbGlib2JqcyAiICRwaWNfb2JqZWN0IgorCSAgICBmdW5jX2FwcGVuZCBub25fcGljX29iamVjdHMgIiAkbm9uX3BpY19vYmplY3QiCisJICBlbHNlCisJICAgIGZ1bmNfZmF0YWxfZXJyb3IgIlxgJGFyZycgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBvYmplY3QiCisJICBmaQorCWZpCisJOzsKKworICAgICAgKi4kbGliZXh0KQorCSMgQW4gYXJjaGl2ZS4KKwlkZXBsaWJzPSIkZGVwbGlicyAkYXJnIgorCW9sZF9kZXBsaWJzPSIkb2xkX2RlcGxpYnMgJGFyZyIKKwljb250aW51ZQorCTs7CisKKyAgICAgICoubGEpCisJIyBBIGxpYnRvb2wtY29udHJvbGxlZCBsaWJyYXJ5LgorCisJaWYgdGVzdCAiJHByZXYiID0gZGxmaWxlczsgdGhlbgorCSAgIyBUaGlzIGxpYnJhcnkgd2FzIHNwZWNpZmllZCB3aXRoIC1kbG9wZW4uCisJICBkbGZpbGVzPSIkZGxmaWxlcyAkYXJnIgorCSAgcHJldj0KKwllbGlmIHRlc3QgIiRwcmV2IiA9IGRscHJlZmlsZXM7IHRoZW4KKwkgICMgVGhlIGxpYnJhcnkgd2FzIHNwZWNpZmllZCB3aXRoIC1kbHByZW9wZW4uCisJICBkbHByZWZpbGVzPSIkZGxwcmVmaWxlcyAkYXJnIgorCSAgcHJldj0KKwllbHNlCisJICBkZXBsaWJzPSIkZGVwbGlicyAkYXJnIgorCWZpCisJY29udGludWUKKwk7OworCisgICAgICAjIFNvbWUgb3RoZXIgY29tcGlsZXIgYXJndW1lbnQuCisgICAgICAqKQorCSMgVW5rbm93biBhcmd1bWVudHMgaW4gYm90aCBmaW5hbGl6ZV9jb21tYW5kIGFuZCBjb21waWxlX2NvbW1hbmQgbmVlZAorCSMgdG8gYmUgYWVzdGhldGljYWxseSBxdW90ZWQgYmVjYXVzZSB0aGV5IGFyZSBldmFsZWQgbGF0ZXIuCisJZnVuY19xdW90ZV9mb3JfZXZhbCAiJGFyZyIKKwlhcmc9IiRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKwk7OworICAgICAgZXNhYyAjIGFyZworCisgICAgICAjIE5vdyBhY3R1YWxseSBzdWJzdGl0dXRlIHRoZSBhcmd1bWVudCBpbnRvIHRoZSBjb21tYW5kcy4KKyAgICAgIGlmIHRlc3QgLW4gIiRhcmciOyB0aGVuCisJZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJGFyZyIKKwlmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJGFyZyIKKyAgICAgIGZpCisgICAgZG9uZSAjIGFyZ3VtZW50IHBhcnNpbmcgbG9vcAorCisgICAgdGVzdCAtbiAiJHByZXYiICYmIFwKKyAgICAgIGZ1bmNfZmF0YWxfaGVscCAidGhlIFxgJHByZXZhcmcnIG9wdGlvbiByZXF1aXJlcyBhbiBhcmd1bWVudCIKKworICAgIGlmIHRlc3QgIiRleHBvcnRfZHluYW1pYyIgPSB5ZXMgJiYgdGVzdCAtbiAiJGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYyI7IHRoZW4KKyAgICAgIGV2YWwgYXJnPVwiJGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY1wiCisgICAgICBmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAkYXJnIgorICAgICAgZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICRhcmciCisgICAgZmkKKworICAgIG9sZGxpYnM9CisgICAgIyBjYWxjdWxhdGUgdGhlIG5hbWUgb2YgdGhlIGZpbGUsIHdpdGhvdXQgaXRzIGRpcmVjdG9yeQorICAgIGZ1bmNfYmFzZW5hbWUgIiRvdXRwdXQiCisgICAgb3V0cHV0bmFtZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorICAgIGxpYm9ianNfc2F2ZT0iJGxpYm9ianMiCisKKyAgICBpZiB0ZXN0IC1uICIkc2hsaWJwYXRoX3ZhciI7IHRoZW4KKyAgICAgICMgZ2V0IHRoZSBkaXJlY3RvcmllcyBsaXN0ZWQgaW4gJHNobGlicGF0aF92YXIKKyAgICAgIGV2YWwgc2hsaWJfc2VhcmNoX3BhdGg9XGBcJEVDSE8gXCJYXCR7JHNobGlicGF0aF92YXJ9XCIgXHwgXCRYc2VkIC1lIFwncy86LyAvZ1wnXGAKKyAgICBlbHNlCisgICAgICBzaGxpYl9zZWFyY2hfcGF0aD0KKyAgICBmaQorICAgIGV2YWwgc3lzX2xpYl9zZWFyY2hfcGF0aD1cIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWNcIgorICAgIGV2YWwgc3lzX2xpYl9kbHNlYXJjaF9wYXRoPVwiJHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjXCIKKworICAgIGZ1bmNfZGlybmFtZSAiJG91dHB1dCIgIi8iICIiCisgICAgb3V0cHV0X29iamRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQkb2JqZGlyIgorICAgICMgQ3JlYXRlIHRoZSBvYmplY3QgZGlyZWN0b3J5LgorICAgIGZ1bmNfbWtkaXJfcCAiJG91dHB1dF9vYmpkaXIiCisKKyAgICAjIERldGVybWluZSB0aGUgdHlwZSBvZiBvdXRwdXQKKyAgICBjYXNlICRvdXRwdXQgaW4KKyAgICAiIikKKyAgICAgIGZ1bmNfZmF0YWxfaGVscCAieW91IG11c3Qgc3BlY2lmeSBhbiBvdXRwdXQgZmlsZSIKKyAgICAgIDs7CisgICAgKi4kbGliZXh0KSBsaW5rbW9kZT1vbGRsaWIgOzsKKyAgICAqLmxvIHwgKi4kb2JqZXh0KSBsaW5rbW9kZT1vYmogOzsKKyAgICAqLmxhKSBsaW5rbW9kZT1saWIgOzsKKyAgICAqKSBsaW5rbW9kZT1wcm9nIDs7ICMgQW55dGhpbmcgZWxzZSBzaG91bGQgYmUgYSBwcm9ncmFtLgorICAgIGVzYWMKKworICAgIHNwZWNpYWxkZXBsaWJzPQorCisgICAgbGlicz0KKyAgICAjIEZpbmQgYWxsIGludGVyZGVwZW5kZW50IGRlcGxpYnMgYnkgc2VhcmNoaW5nIGZvciBsaWJyYXJpZXMKKyAgICAjIHRoYXQgYXJlIGxpbmtlZCBtb3JlIHRoYW4gb25jZSAoZS5nLiAtbGEgLWxiIC1sYSkKKyAgICBmb3IgZGVwbGliIGluICRkZXBsaWJzOyBkbworICAgICAgaWYgJG9wdF9kdXBsaWNhdGVfZGVwcyA7IHRoZW4KKwljYXNlICIkbGlicyAiIGluCisJKiIgJGRlcGxpYiAiKikgc3BlY2lhbGRlcGxpYnM9IiRzcGVjaWFsZGVwbGlicyAkZGVwbGliIiA7OworCWVzYWMKKyAgICAgIGZpCisgICAgICBsaWJzPSIkbGlicyAkZGVwbGliIgorICAgIGRvbmUKKworICAgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBsaWI7IHRoZW4KKyAgICAgIGxpYnM9IiRwcmVkZXBzICRsaWJzICRjb21waWxlcl9saWJfc2VhcmNoX3BhdGggJHBvc3RkZXBzIgorCisgICAgICAjIENvbXB1dGUgbGlicmFyaWVzIHRoYXQgYXJlIGxpc3RlZCBtb3JlIHRoYW4gb25jZSBpbiAkcHJlZGVwcworICAgICAgIyAkcG9zdGRlcHMgYW5kIG1hcmsgdGhlbSBhcyBzcGVjaWFsIChpLmUuLCB3aG9zZSBkdXBsaWNhdGVzIGFyZQorICAgICAgIyBub3QgdG8gYmUgZWxpbWluYXRlZCkuCisgICAgICBwcmVfcG9zdF9kZXBzPQorICAgICAgaWYgJG9wdF9kdXBsaWNhdGVfY29tcGlsZXJfZ2VuZXJhdGVkX2RlcHM7IHRoZW4KKwlmb3IgcHJlX3Bvc3RfZGVwIGluICRwcmVkZXBzICRwb3N0ZGVwczsgZG8KKwkgIGNhc2UgIiRwcmVfcG9zdF9kZXBzICIgaW4KKwkgICoiICRwcmVfcG9zdF9kZXAgIiopIHNwZWNpYWxkZXBsaWJzPSIkc3BlY2lhbGRlcGxpYnMgJHByZV9wb3N0X2RlcHMiIDs7CisJICBlc2FjCisJICBwcmVfcG9zdF9kZXBzPSIkcHJlX3Bvc3RfZGVwcyAkcHJlX3Bvc3RfZGVwIgorCWRvbmUKKyAgICAgIGZpCisgICAgICBwcmVfcG9zdF9kZXBzPQorICAgIGZpCisKKyAgICBkZXBsaWJzPQorICAgIG5ld2RlcGVuZGVuY3lfbGlicz0KKyAgICBuZXdsaWJfc2VhcmNoX3BhdGg9CisgICAgbmVlZF9yZWxpbms9bm8gIyB3aGV0aGVyIHdlJ3JlIGxpbmtpbmcgYW55IHVuaW5zdGFsbGVkIGxpYnRvb2wgbGlicmFyaWVzCisgICAgbm90aW5zdF9kZXBsaWJzPSAjIG5vdC1pbnN0YWxsZWQgbGlidG9vbCBsaWJyYXJpZXMKKyAgICBub3RpbnN0X3BhdGg9ICMgcGF0aHMgdGhhdCBjb250YWluIG5vdC1pbnN0YWxsZWQgbGlidG9vbCBsaWJyYXJpZXMKKworICAgIGNhc2UgJGxpbmttb2RlIGluCisgICAgbGliKQorCXBhc3Nlcz0iY29udiBkbHByZW9wZW4gbGluayIKKwlmb3IgZmlsZSBpbiAkZGxmaWxlcyAkZGxwcmVmaWxlczsgZG8KKwkgIGNhc2UgJGZpbGUgaW4KKwkgICoubGEpIDs7CisJICAqKQorCSAgICBmdW5jX2ZhdGFsX2hlbHAgImxpYnJhcmllcyBjYW4gXGAtZGxvcGVuJyBvbmx5IGxpYnRvb2wgbGlicmFyaWVzOiAkZmlsZSIKKwkgICAgOzsKKwkgIGVzYWMKKwlkb25lCisJOzsKKyAgICBwcm9nKQorCWNvbXBpbGVfZGVwbGlicz0KKwlmaW5hbGl6ZV9kZXBsaWJzPQorCWFsbGRlcGxpYnM9bm8KKwluZXdkbGZpbGVzPQorCW5ld2RscHJlZmlsZXM9CisJcGFzc2VzPSJjb252IHNjYW4gZGxvcGVuIGRscHJlb3BlbiBsaW5rIgorCTs7CisgICAgKikgIHBhc3Nlcz0iY29udiIKKwk7OworICAgIGVzYWMKKworICAgIGZvciBwYXNzIGluICRwYXNzZXM7IGRvCisgICAgICAjIFRoZSBwcmVvcGVuIHBhc3MgaW4gbGliIG1vZGUgcmV2ZXJzZXMgJGRlcGxpYnM7IHB1dCBpdCBiYWNrIGhlcmUKKyAgICAgICMgc28gdGhhdCAtTCBjb21lcyBiZWZvcmUgbGlicyB0aGF0IG5lZWQgaXQgZm9yIGluc3RhbmNlLi4uCisgICAgICBpZiB0ZXN0ICIkbGlua21vZGUsJHBhc3MiID0gImxpYixsaW5rIjsgdGhlbgorCSMjIEZJWE1FOiBGaW5kIHRoZSBwbGFjZSB3aGVyZSB0aGUgbGlzdCBpcyByZWJ1aWx0IGluIHRoZSB3cm9uZworCSMjICAgICAgICBvcmRlciwgYW5kIGZpeCBpdCB0aGVyZSBwcm9wZXJseQorICAgICAgICB0bXBfZGVwbGlicz0KKwlmb3IgZGVwbGliIGluICRkZXBsaWJzOyBkbworCSAgdG1wX2RlcGxpYnM9IiRkZXBsaWIgJHRtcF9kZXBsaWJzIgorCWRvbmUKKwlkZXBsaWJzPSIkdG1wX2RlcGxpYnMiCisgICAgICBmaQorCisgICAgICBpZiB0ZXN0ICIkbGlua21vZGUsJHBhc3MiID0gImxpYixsaW5rIiB8fAorCSB0ZXN0ICIkbGlua21vZGUsJHBhc3MiID0gInByb2csc2NhbiI7IHRoZW4KKwlsaWJzPSIkZGVwbGlicyIKKwlkZXBsaWJzPQorICAgICAgZmkKKyAgICAgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nOyB0aGVuCisJY2FzZSAkcGFzcyBpbgorCWRsb3BlbikgbGlicz0iJGRsZmlsZXMiIDs7CisJZGxwcmVvcGVuKSBsaWJzPSIkZGxwcmVmaWxlcyIgOzsKKwlsaW5rKQorCSAgbGlicz0iJGRlcGxpYnMgJURFUExJQlMlIgorCSAgdGVzdCAiWCRsaW5rX2FsbF9kZXBsaWJzIiAhPSBYbm8gJiYgbGlicz0iJGxpYnMgJGRlcGVuZGVuY3lfbGlicyIKKwkgIDs7CisJZXNhYworICAgICAgZmkKKyAgICAgIGlmIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgPSAibGliLGRscHJlb3BlbiI7IHRoZW4KKwkjIENvbGxlY3QgYW5kIGZvcndhcmQgZGVwbGlicyBvZiBwcmVvcGVuZWQgbGlidG9vbCBsaWJzCisJZm9yIGxpYiBpbiAkZGxwcmVmaWxlczsgZG8KKwkgICMgSWdub3JlIG5vbi1saWJ0b29sLWxpYnMKKwkgIGRlcGVuZGVuY3lfbGlicz0KKwkgIGNhc2UgJGxpYiBpbgorCSAgKi5sYSkJZnVuY19zb3VyY2UgIiRsaWIiIDs7CisJICBlc2FjCisKKwkgICMgQ29sbGVjdCBwcmVvcGVuZWQgbGlidG9vbCBkZXBsaWJzLCBleGNlcHQgYW55IHRoaXMgbGlicmFyeQorCSAgIyBoYXMgZGVjbGFyZWQgYXMgd2VhayBsaWJzCisJICBmb3IgZGVwbGliIGluICRkZXBlbmRlbmN5X2xpYnM7IGRvCisgICAgICAgICAgICBkZXBsaWJfYmFzZT1gJEVDSE8gIlgkZGVwbGliIiB8ICRYc2VkIC1lICIkYmFzZW5hbWUiYAorCSAgICBjYXNlICIgJHdlYWtfbGlicyAiIGluCisJICAgICoiICRkZXBsaWJfYmFzZSAiKikgOzsKKwkgICAgKikgZGVwbGlicz0iJGRlcGxpYnMgJGRlcGxpYiIgOzsKKwkgICAgZXNhYworCSAgZG9uZQorCWRvbmUKKwlsaWJzPSIkZGxwcmVmaWxlcyIKKyAgICAgIGZpCisgICAgICBpZiB0ZXN0ICIkcGFzcyIgPSBkbG9wZW47IHRoZW4KKwkjIENvbGxlY3QgZGxwcmVvcGVuZWQgbGlicmFyaWVzCisJc2F2ZV9kZXBsaWJzPSIkZGVwbGlicyIKKwlkZXBsaWJzPQorICAgICAgZmkKKworICAgICAgZm9yIGRlcGxpYiBpbiAkbGliczsgZG8KKwlsaWI9CisJZm91bmQ9bm8KKwljYXNlICRkZXBsaWIgaW4KKwktbXR8LW10aHJlYWRzfC1rdGhyZWFkfC1LdGhyZWFkfC1wdGhyZWFkfC1wdGhyZWFkc3wtLXRocmVhZC1zYWZlfC10aHJlYWRzKQorCSAgaWYgdGVzdCAiJGxpbmttb2RlLCRwYXNzIiA9ICJwcm9nLGxpbmsiOyB0aGVuCisJICAgIGNvbXBpbGVfZGVwbGlicz0iJGRlcGxpYiAkY29tcGlsZV9kZXBsaWJzIgorCSAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGVwbGliICRmaW5hbGl6ZV9kZXBsaWJzIgorCSAgZWxzZQorCSAgICBjb21waWxlcl9mbGFncz0iJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWIiCisJICAgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBsaWIgOyB0aGVuCisJCWNhc2UgIiRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAiIGluCisJCSAgICAqIiAkZGVwbGliICIqKSA7OworCQkgICAgKiApIG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzPSIkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgJGRlcGxpYiIgOzsKKwkJZXNhYworCSAgICBmaQorCSAgZmkKKwkgIGNvbnRpbnVlCisJICA7OworCS1sKikKKwkgIGlmIHRlc3QgIiRsaW5rbW9kZSIgIT0gbGliICYmIHRlc3QgIiRsaW5rbW9kZSIgIT0gcHJvZzsgdGhlbgorCSAgICBmdW5jX3dhcm5pbmcgIlxgLWwnIGlzIGlnbm9yZWQgZm9yIGFyY2hpdmVzL29iamVjdHMiCisJICAgIGNvbnRpbnVlCisJICBmaQorCSAgZnVuY19zdHJpcG5hbWUgJy1sJyAnJyAiJGRlcGxpYiIKKwkgIG5hbWU9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCSAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IGxpYjsgdGhlbgorCSAgICBzZWFyY2hkaXJzPSIkbmV3bGliX3NlYXJjaF9wYXRoICRsaWJfc2VhcmNoX3BhdGggJGNvbXBpbGVyX2xpYl9zZWFyY2hfZGlycyAkc3lzX2xpYl9zZWFyY2hfcGF0aCAkc2hsaWJfc2VhcmNoX3BhdGgiCisJICBlbHNlCisJICAgIHNlYXJjaGRpcnM9IiRuZXdsaWJfc2VhcmNoX3BhdGggJGxpYl9zZWFyY2hfcGF0aCAkc3lzX2xpYl9zZWFyY2hfcGF0aCAkc2hsaWJfc2VhcmNoX3BhdGgiCisJICBmaQorCSAgZm9yIHNlYXJjaGRpciBpbiAkc2VhcmNoZGlyczsgZG8KKwkgICAgZm9yIHNlYXJjaF9leHQgaW4gLmxhICRzdGRfc2hyZXh0IC5zbyAuYTsgZG8KKwkgICAgICAjIFNlYXJjaCB0aGUgbGlidG9vbCBsaWJyYXJ5CisJICAgICAgbGliPSIkc2VhcmNoZGlyL2xpYiR7bmFtZX0ke3NlYXJjaF9leHR9IgorCSAgICAgIGlmIHRlc3QgLWYgIiRsaWIiOyB0aGVuCisJCWlmIHRlc3QgIiRzZWFyY2hfZXh0IiA9ICIubGEiOyB0aGVuCisJCSAgZm91bmQ9eWVzCisJCWVsc2UKKwkJICBmb3VuZD1ubworCQlmaQorCQlicmVhayAyCisJICAgICAgZmkKKwkgICAgZG9uZQorCSAgZG9uZQorCSAgaWYgdGVzdCAiJGZvdW5kIiAhPSB5ZXM7IHRoZW4KKwkgICAgIyBkZXBsaWIgZG9lc24ndCBzZWVtIHRvIGJlIGEgbGlidG9vbCBsaWJyYXJ5CisJICAgIGlmIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgPSAicHJvZyxsaW5rIjsgdGhlbgorCSAgICAgIGNvbXBpbGVfZGVwbGlicz0iJGRlcGxpYiAkY29tcGlsZV9kZXBsaWJzIgorCSAgICAgIGZpbmFsaXplX2RlcGxpYnM9IiRkZXBsaWIgJGZpbmFsaXplX2RlcGxpYnMiCisJICAgIGVsc2UKKwkgICAgICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgorCSAgICAgIHRlc3QgIiRsaW5rbW9kZSIgPSBsaWIgJiYgbmV3ZGVwZW5kZW5jeV9saWJzPSIkZGVwbGliICRuZXdkZXBlbmRlbmN5X2xpYnMiCisJICAgIGZpCisJICAgIGNvbnRpbnVlCisJICBlbHNlICMgZGVwbGliIGlzIGEgbGlidG9vbCBsaWJyYXJ5CisJICAgICMgSWYgJGFsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcyAmJiAkZGVwbGliIGlzIGEgc3RkbGliLAorCSAgICAjIFdlIG5lZWQgdG8gZG8gc29tZSBzcGVjaWFsIHRoaW5ncyBoZXJlLCBhbmQgbm90IGxhdGVyLgorCSAgICBpZiB0ZXN0ICJYJGFsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcyIgPSAiWHllcyIgOyB0aGVuCisJICAgICAgY2FzZSAiICRwcmVkZXBzICRwb3N0ZGVwcyAiIGluCisJICAgICAgKiIgJGRlcGxpYiAiKikKKwkJaWYgZnVuY19sYWxpYl9wICIkbGliIjsgdGhlbgorCQkgIGxpYnJhcnlfbmFtZXM9CisJCSAgb2xkX2xpYnJhcnk9CisJCSAgZnVuY19zb3VyY2UgIiRsaWIiCisJCSAgZm9yIGwgaW4gJG9sZF9saWJyYXJ5ICRsaWJyYXJ5X25hbWVzOyBkbworCQkgICAgbGw9IiRsIgorCQkgIGRvbmUKKwkJICBpZiB0ZXN0ICJYJGxsIiA9ICJYJG9sZF9saWJyYXJ5IiA7IHRoZW4gIyBvbmx5IHN0YXRpYyB2ZXJzaW9uIGF2YWlsYWJsZQorCQkgICAgZm91bmQ9bm8KKwkJICAgIGZ1bmNfZGlybmFtZSAiJGxpYiIgIiIgIi4iCisJCSAgICBsYWRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQiCisJCSAgICBsaWI9JGxhZGlyLyRvbGRfbGlicmFyeQorCQkgICAgaWYgdGVzdCAiJGxpbmttb2RlLCRwYXNzIiA9ICJwcm9nLGxpbmsiOyB0aGVuCisJCSAgICAgIGNvbXBpbGVfZGVwbGlicz0iJGRlcGxpYiAkY29tcGlsZV9kZXBsaWJzIgorCQkgICAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGVwbGliICRmaW5hbGl6ZV9kZXBsaWJzIgorCQkgICAgZWxzZQorCQkgICAgICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgorCQkgICAgICB0ZXN0ICIkbGlua21vZGUiID0gbGliICYmIG5ld2RlcGVuZGVuY3lfbGlicz0iJGRlcGxpYiAkbmV3ZGVwZW5kZW5jeV9saWJzIgorCQkgICAgZmkKKwkJICAgIGNvbnRpbnVlCisJCSAgZmkKKwkJZmkKKwkJOzsKKwkgICAgICAqKSA7OworCSAgICAgIGVzYWMKKwkgICAgZmkKKwkgIGZpCisJICA7OyAjIC1sCisJKi5sdGZyYW1ld29yaykKKwkgIGlmIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgPSAicHJvZyxsaW5rIjsgdGhlbgorCSAgICBjb21waWxlX2RlcGxpYnM9IiRkZXBsaWIgJGNvbXBpbGVfZGVwbGlicyIKKwkgICAgZmluYWxpemVfZGVwbGlicz0iJGRlcGxpYiAkZmluYWxpemVfZGVwbGlicyIKKwkgIGVsc2UKKwkgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKKwkgICAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IGxpYiA7IHRoZW4KKwkJY2FzZSAiJG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICIgaW4KKwkJICAgICoiICRkZXBsaWIgIiopIDs7CisJCSAgICAqICkgbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3M9IiRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAkZGVwbGliIiA7OworCQllc2FjCisJICAgIGZpCisJICBmaQorCSAgY29udGludWUKKwkgIDs7CisJLUwqKQorCSAgY2FzZSAkbGlua21vZGUgaW4KKwkgIGxpYikKKwkgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKKwkgICAgdGVzdCAiJHBhc3MiID0gY29udiAmJiBjb250aW51ZQorCSAgICBuZXdkZXBlbmRlbmN5X2xpYnM9IiRkZXBsaWIgJG5ld2RlcGVuZGVuY3lfbGlicyIKKwkgICAgZnVuY19zdHJpcG5hbWUgJy1MJyAnJyAiJGRlcGxpYiIKKwkgICAgbmV3bGliX3NlYXJjaF9wYXRoPSIkbmV3bGliX3NlYXJjaF9wYXRoICRmdW5jX3N0cmlwbmFtZV9yZXN1bHQiCisJICAgIDs7CisJICBwcm9nKQorCSAgICBpZiB0ZXN0ICIkcGFzcyIgPSBjb252OyB0aGVuCisJICAgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKKwkgICAgICBjb250aW51ZQorCSAgICBmaQorCSAgICBpZiB0ZXN0ICIkcGFzcyIgPSBzY2FuOyB0aGVuCisJICAgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKKwkgICAgZWxzZQorCSAgICAgIGNvbXBpbGVfZGVwbGlicz0iJGRlcGxpYiAkY29tcGlsZV9kZXBsaWJzIgorCSAgICAgIGZpbmFsaXplX2RlcGxpYnM9IiRkZXBsaWIgJGZpbmFsaXplX2RlcGxpYnMiCisJICAgIGZpCisJICAgIGZ1bmNfc3RyaXBuYW1lICctTCcgJycgIiRkZXBsaWIiCisJICAgIG5ld2xpYl9zZWFyY2hfcGF0aD0iJG5ld2xpYl9zZWFyY2hfcGF0aCAkZnVuY19zdHJpcG5hbWVfcmVzdWx0IgorCSAgICA7OworCSAgKikKKwkgICAgZnVuY193YXJuaW5nICJcYC1MJyBpcyBpZ25vcmVkIGZvciBhcmNoaXZlcy9vYmplY3RzIgorCSAgICA7OworCSAgZXNhYyAjIGxpbmttb2RlCisJICBjb250aW51ZQorCSAgOzsgIyAtTAorCS1SKikKKwkgIGlmIHRlc3QgIiRwYXNzIiA9IGxpbms7IHRoZW4KKwkgICAgZnVuY19zdHJpcG5hbWUgJy1SJyAnJyAiJGRlcGxpYiIKKwkgICAgZGlyPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwkgICAgIyBNYWtlIHN1cmUgdGhlIHhycGF0aCBjb250YWlucyBvbmx5IHVuaXF1ZSBkaXJlY3Rvcmllcy4KKwkgICAgY2FzZSAiJHhycGF0aCAiIGluCisJICAgICoiICRkaXIgIiopIDs7CisJICAgICopIHhycGF0aD0iJHhycGF0aCAkZGlyIiA7OworCSAgICBlc2FjCisJICBmaQorCSAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKKwkgIGNvbnRpbnVlCisJICA7OworCSoubGEpIGxpYj0iJGRlcGxpYiIgOzsKKwkqLiRsaWJleHQpCisJICBpZiB0ZXN0ICIkcGFzcyIgPSBjb252OyB0aGVuCisJICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisJICAgIGNvbnRpbnVlCisJICBmaQorCSAgY2FzZSAkbGlua21vZGUgaW4KKwkgIGxpYikKKwkgICAgIyBMaW5raW5nIGNvbnZlbmllbmNlIG1vZHVsZXMgaW50byBzaGFyZWQgbGlicmFyaWVzIGlzIGFsbG93ZWQsCisJICAgICMgYnV0IGxpbmtpbmcgb3RoZXIgc3RhdGljIGxpYnJhcmllcyBpcyBub24tcG9ydGFibGUuCisJICAgIGNhc2UgIiAkZGxwcmVjb252ZW5pZW5jZWxpYnMgIiBpbgorCSAgICAqIiAkZGVwbGliICIqKSA7OworCSAgICAqKQorCSAgICAgIHZhbGlkX2FfbGliPW5vCisJICAgICAgY2FzZSAkZGVwbGlic19jaGVja19tZXRob2QgaW4KKwkJbWF0Y2hfcGF0dGVybiopCisJCSAgc2V0IGR1bW15ICRkZXBsaWJzX2NoZWNrX21ldGhvZDsgc2hpZnQKKwkJICBtYXRjaF9wYXR0ZXJuX3JlZ2V4PWBleHByICIkZGVwbGlic19jaGVja19tZXRob2QiIDogIiQxIFwoLipcKSJgCisJCSAgaWYgZXZhbCAiXCRFQ0hPIFwiWCRkZXBsaWJcIiIgMj4vZGV2L251bGwgfCAkWHNlZCAtZSAxMHEgXAorCQkgICAgfCAkRUdSRVAgIiRtYXRjaF9wYXR0ZXJuX3JlZ2V4IiA+IC9kZXYvbnVsbDsgdGhlbgorCQkgICAgdmFsaWRfYV9saWI9eWVzCisJCSAgZmkKKwkJOzsKKwkJcGFzc19hbGwpCisJCSAgdmFsaWRfYV9saWI9eWVzCisJCTs7CisJICAgICAgZXNhYworCSAgICAgIGlmIHRlc3QgIiR2YWxpZF9hX2xpYiIgIT0geWVzOyB0aGVuCisJCSRFQ0hPCisJCSRFQ0hPICIqKiogV2FybmluZzogVHJ5aW5nIHRvIGxpbmsgd2l0aCBzdGF0aWMgbGliIGFyY2hpdmUgJGRlcGxpYi4iCisJCSRFQ0hPICIqKiogSSBoYXZlIHRoZSBjYXBhYmlsaXR5IHRvIG1ha2UgdGhhdCBsaWJyYXJ5IGF1dG9tYXRpY2FsbHkgbGluayBpbiB3aGVuIgorCQkkRUNITyAiKioqIHlvdSBsaW5rIHRvIHRoaXMgbGlicmFyeS4gIEJ1dCBJIGNhbiBvbmx5IGRvIHRoaXMgaWYgeW91IGhhdmUgYSIKKwkJJEVDSE8gIioqKiBzaGFyZWQgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgd2hpY2ggeW91IGRvIG5vdCBhcHBlYXIgdG8gaGF2ZSIKKwkJJEVDSE8gIioqKiBiZWNhdXNlIHRoZSBmaWxlIGV4dGVuc2lvbnMgLiRsaWJleHQgb2YgdGhpcyBhcmd1bWVudCBtYWtlcyBtZSBiZWxpZXZlIgorCQkkRUNITyAiKioqIHRoYXQgaXQgaXMganVzdCBhIHN0YXRpYyBhcmNoaXZlIHRoYXQgSSBzaG91bGQgbm90IHVzZSBoZXJlLiIKKwkgICAgICBlbHNlCisJCSRFQ0hPCisJCSRFQ0hPICIqKiogV2FybmluZzogTGlua2luZyB0aGUgc2hhcmVkIGxpYnJhcnkgJG91dHB1dCBhZ2FpbnN0IHRoZSIKKwkJJEVDSE8gIioqKiBzdGF0aWMgbGlicmFyeSAkZGVwbGliIGlzIG5vdCBwb3J0YWJsZSEiCisJCWRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisJICAgICAgZmkKKwkgICAgICA7OworCSAgICBlc2FjCisJICAgIGNvbnRpbnVlCisJICAgIDs7CisJICBwcm9nKQorCSAgICBpZiB0ZXN0ICIkcGFzcyIgIT0gbGluazsgdGhlbgorCSAgICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisJICAgIGVsc2UKKwkgICAgICBjb21waWxlX2RlcGxpYnM9IiRkZXBsaWIgJGNvbXBpbGVfZGVwbGlicyIKKwkgICAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGVwbGliICRmaW5hbGl6ZV9kZXBsaWJzIgorCSAgICBmaQorCSAgICBjb250aW51ZQorCSAgICA7OworCSAgZXNhYyAjIGxpbmttb2RlCisJICA7OyAjICouJGxpYmV4dAorCSoubG8gfCAqLiRvYmpleHQpCisJICBpZiB0ZXN0ICIkcGFzcyIgPSBjb252OyB0aGVuCisJICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisJICBlbGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nOyB0aGVuCisJICAgIGlmIHRlc3QgIiRwYXNzIiA9IGRscHJlb3BlbiB8fCB0ZXN0ICIkZGxvcGVuX3N1cHBvcnQiICE9IHllcyB8fCB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IG5vOyB0aGVuCisJICAgICAgIyBJZiB0aGVyZSBpcyBubyBkbG9wZW4gc3VwcG9ydCBvciB3ZSdyZSBsaW5raW5nIHN0YXRpY2FsbHksCisJICAgICAgIyB3ZSBuZWVkIHRvIHByZWxvYWQuCisJICAgICAgbmV3ZGxwcmVmaWxlcz0iJG5ld2RscHJlZmlsZXMgJGRlcGxpYiIKKwkgICAgICBjb21waWxlX2RlcGxpYnM9IiRkZXBsaWIgJGNvbXBpbGVfZGVwbGlicyIKKwkgICAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGVwbGliICRmaW5hbGl6ZV9kZXBsaWJzIgorCSAgICBlbHNlCisJICAgICAgbmV3ZGxmaWxlcz0iJG5ld2RsZmlsZXMgJGRlcGxpYiIKKwkgICAgZmkKKwkgIGZpCisJICBjb250aW51ZQorCSAgOzsKKwklREVQTElCUyUpCisJICBhbGxkZXBsaWJzPXllcworCSAgY29udGludWUKKwkgIDs7CisJZXNhYyAjIGNhc2UgJGRlcGxpYgorCisJaWYgdGVzdCAiJGZvdW5kIiA9IHllcyB8fCB0ZXN0IC1mICIkbGliIjsgdGhlbiA6CisJZWxzZQorCSAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGZpbmQgdGhlIGxpYnJhcnkgXGAkbGliJyBvciB1bmhhbmRsZWQgYXJndW1lbnQgXGAkZGVwbGliJyIKKwlmaQorCisJIyBDaGVjayB0byBzZWUgdGhhdCB0aGlzIHJlYWxseSBpcyBhIGxpYnRvb2wgYXJjaGl2ZS4KKwlmdW5jX2xhbGliX3Vuc2FmZV9wICIkbGliIiBcCisJICB8fCBmdW5jX2ZhdGFsX2Vycm9yICJcYCRsaWInIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIKKworCWZ1bmNfZGlybmFtZSAiJGxpYiIgIiIgIi4iCisJbGFkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorCisJZGxuYW1lPQorCWRsb3Blbj0KKwlkbHByZW9wZW49CisJbGliZGlyPQorCWxpYnJhcnlfbmFtZXM9CisJb2xkX2xpYnJhcnk9CisJaW5oZXJpdGVkX2xpbmtlcl9mbGFncz0KKwkjIElmIHRoZSBsaWJyYXJ5IHdhcyBpbnN0YWxsZWQgd2l0aCBhbiBvbGQgcmVsZWFzZSBvZiBsaWJ0b29sLAorCSMgaXQgd2lsbCBub3QgcmVkZWZpbmUgdmFyaWFibGVzIGluc3RhbGxlZCwgb3Igc2hvdWxkbm90bGluaworCWluc3RhbGxlZD15ZXMKKwlzaG91bGRub3RsaW5rPW5vCisJYXZvaWR0ZW1wcnBhdGg9CisKKworCSMgUmVhZCB0aGUgLmxhIGZpbGUKKwlmdW5jX3NvdXJjZSAiJGxpYiIKKworCSMgQ29udmVydCAiLWZyYW1ld29yayBmb28iIHRvICJmb28ubHRmcmFtZXdvcmsiCisJaWYgdGVzdCAtbiAiJGluaGVyaXRlZF9saW5rZXJfZmxhZ3MiOyB0aGVuCisJICB0bXBfaW5oZXJpdGVkX2xpbmtlcl9mbGFncz1gJEVDSE8gIlgkaW5oZXJpdGVkX2xpbmtlcl9mbGFncyIgfCAkWHNlZCAtZSAncy8tZnJhbWV3b3JrIFwoW14gJF0qXCkvXDEubHRmcmFtZXdvcmsvZydgCisJICBmb3IgdG1wX2luaGVyaXRlZF9saW5rZXJfZmxhZyBpbiAkdG1wX2luaGVyaXRlZF9saW5rZXJfZmxhZ3M7IGRvCisJICAgIGNhc2UgIiAkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgIiBpbgorCSAgICAgICoiICR0bXBfaW5oZXJpdGVkX2xpbmtlcl9mbGFnICIqKSA7OworCSAgICAgICopIG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzPSIkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgJHRtcF9pbmhlcml0ZWRfbGlua2VyX2ZsYWciOzsKKwkgICAgZXNhYworCSAgZG9uZQorCWZpCisJZGVwZW5kZW5jeV9saWJzPWAkRUNITyAiWCAkZGVwZW5kZW5jeV9saWJzIiB8ICRYc2VkIC1lICdzJSBcKFteICRdKlwpLmx0ZnJhbWV3b3JrJSAtZnJhbWV3b3JrIFwxJWcnYAorCWlmIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgPSAibGliLGxpbmsiIHx8CisJICAgdGVzdCAiJGxpbmttb2RlLCRwYXNzIiA9ICJwcm9nLHNjYW4iIHx8CisJICAgeyB0ZXN0ICIkbGlua21vZGUiICE9IHByb2cgJiYgdGVzdCAiJGxpbmttb2RlIiAhPSBsaWI7IH07IHRoZW4KKwkgIHRlc3QgLW4gIiRkbG9wZW4iICYmIGRsZmlsZXM9IiRkbGZpbGVzICRkbG9wZW4iCisJICB0ZXN0IC1uICIkZGxwcmVvcGVuIiAmJiBkbHByZWZpbGVzPSIkZGxwcmVmaWxlcyAkZGxwcmVvcGVuIgorCWZpCisKKwlpZiB0ZXN0ICIkcGFzcyIgPSBjb252OyB0aGVuCisJICAjIE9ubHkgY2hlY2sgZm9yIGNvbnZlbmllbmNlIGxpYnJhcmllcworCSAgZGVwbGlicz0iJGxpYiAkZGVwbGlicyIKKwkgIGlmIHRlc3QgLXogIiRsaWJkaXIiOyB0aGVuCisJICAgIGlmIHRlc3QgLXogIiRvbGRfbGlicmFyeSI7IHRoZW4KKwkgICAgICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgZmluZCBuYW1lIG9mIGxpbmsgbGlicmFyeSBmb3IgXGAkbGliJyIKKwkgICAgZmkKKwkgICAgIyBJdCBpcyBhIGxpYnRvb2wgY29udmVuaWVuY2UgbGlicmFyeSwgc28gYWRkIGluIGl0cyBvYmplY3RzLgorCSAgICBjb252ZW5pZW5jZT0iJGNvbnZlbmllbmNlICRsYWRpci8kb2JqZGlyLyRvbGRfbGlicmFyeSIKKwkgICAgb2xkX2NvbnZlbmllbmNlPSIkb2xkX2NvbnZlbmllbmNlICRsYWRpci8kb2JqZGlyLyRvbGRfbGlicmFyeSIKKwkgICAgdG1wX2xpYnM9CisJICAgIGZvciBkZXBsaWIgaW4gJGRlcGVuZGVuY3lfbGliczsgZG8KKwkgICAgICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgorCSAgICAgIGlmICRvcHRfZHVwbGljYXRlX2RlcHMgOyB0aGVuCisJCWNhc2UgIiR0bXBfbGlicyAiIGluCisJCSoiICRkZXBsaWIgIiopIHNwZWNpYWxkZXBsaWJzPSIkc3BlY2lhbGRlcGxpYnMgJGRlcGxpYiIgOzsKKwkJZXNhYworCSAgICAgIGZpCisJICAgICAgdG1wX2xpYnM9IiR0bXBfbGlicyAkZGVwbGliIgorCSAgICBkb25lCisJICBlbGlmIHRlc3QgIiRsaW5rbW9kZSIgIT0gcHJvZyAmJiB0ZXN0ICIkbGlua21vZGUiICE9IGxpYjsgdGhlbgorCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJcYCRsaWInIGlzIG5vdCBhIGNvbnZlbmllbmNlIGxpYnJhcnkiCisJICBmaQorCSAgY29udGludWUKKwlmaSAjICRwYXNzID0gY29udgorCisKKwkjIEdldCB0aGUgbmFtZSBvZiB0aGUgbGlicmFyeSB3ZSBsaW5rIGFnYWluc3QuCisJbGlua2xpYj0KKwlmb3IgbCBpbiAkb2xkX2xpYnJhcnkgJGxpYnJhcnlfbmFtZXM7IGRvCisJICBsaW5rbGliPSIkbCIKKwlkb25lCisJaWYgdGVzdCAteiAiJGxpbmtsaWIiOyB0aGVuCisJICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgZmluZCBuYW1lIG9mIGxpbmsgbGlicmFyeSBmb3IgXGAkbGliJyIKKwlmaQorCisJIyBUaGlzIGxpYnJhcnkgd2FzIHNwZWNpZmllZCB3aXRoIC1kbG9wZW4uCisJaWYgdGVzdCAiJHBhc3MiID0gZGxvcGVuOyB0aGVuCisJICBpZiB0ZXN0IC16ICIkbGliZGlyIjsgdGhlbgorCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgLWRsb3BlbiBhIGNvbnZlbmllbmNlIGxpYnJhcnk6IFxgJGxpYiciCisJICBmaQorCSAgaWYgdGVzdCAteiAiJGRsbmFtZSIgfHwKKwkgICAgIHRlc3QgIiRkbG9wZW5fc3VwcG9ydCIgIT0geWVzIHx8CisJICAgICB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IG5vOyB0aGVuCisJICAgICMgSWYgdGhlcmUgaXMgbm8gZGxuYW1lLCBubyBkbG9wZW4gc3VwcG9ydCBvciB3ZSdyZSBsaW5raW5nCisJICAgICMgc3RhdGljYWxseSwgd2UgbmVlZCB0byBwcmVsb2FkLiAgV2UgYWxzbyBuZWVkIHRvIHByZWxvYWQgYW55CisJICAgICMgZGVwZW5kZW50IGxpYnJhcmllcyBzbyBsaWJsdGRsJ3MgZGVwbGliIHByZWxvYWRlciBkb2Vzbid0CisJICAgICMgYm9tYiBvdXQgaW4gdGhlIGxvYWQgZGVwbGlicyBwaGFzZS4KKwkgICAgZGxwcmVmaWxlcz0iJGRscHJlZmlsZXMgJGxpYiAkZGVwZW5kZW5jeV9saWJzIgorCSAgZWxzZQorCSAgICBuZXdkbGZpbGVzPSIkbmV3ZGxmaWxlcyAkbGliIgorCSAgZmkKKwkgIGNvbnRpbnVlCisJZmkgIyAkcGFzcyA9IGRsb3BlbgorCisJIyBXZSBuZWVkIGFuIGFic29sdXRlIHBhdGguCisJY2FzZSAkbGFkaXIgaW4KKwlbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIGFic19sYWRpcj0iJGxhZGlyIiA7OworCSopCisJICBhYnNfbGFkaXI9YGNkICIkbGFkaXIiICYmIHB3ZGAKKwkgIGlmIHRlc3QgLXogIiRhYnNfbGFkaXIiOyB0aGVuCisJICAgIGZ1bmNfd2FybmluZyAiY2Fubm90IGRldGVybWluZSBhYnNvbHV0ZSBkaXJlY3RvcnkgbmFtZSBvZiBcYCRsYWRpciciCisJICAgIGZ1bmNfd2FybmluZyAicGFzc2luZyBpdCBsaXRlcmFsbHkgdG8gdGhlIGxpbmtlciwgYWx0aG91Z2ggaXQgbWlnaHQgZmFpbCIKKwkgICAgYWJzX2xhZGlyPSIkbGFkaXIiCisJICBmaQorCSAgOzsKKwllc2FjCisJZnVuY19iYXNlbmFtZSAiJGxpYiIKKwlsYW5hbWU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKworCSMgRmluZCB0aGUgcmVsZXZhbnQgb2JqZWN0IGRpcmVjdG9yeSBhbmQgbGlicmFyeSBuYW1lLgorCWlmIHRlc3QgIlgkaW5zdGFsbGVkIiA9IFh5ZXM7IHRoZW4KKwkgIGlmIHRlc3QgISAtZiAiJGxpYmRpci8kbGlua2xpYiIgJiYgdGVzdCAtZiAiJGFic19sYWRpci8kbGlua2xpYiI7IHRoZW4KKwkgICAgZnVuY193YXJuaW5nICJsaWJyYXJ5IFxgJGxpYicgd2FzIG1vdmVkLiIKKwkgICAgZGlyPSIkbGFkaXIiCisJICAgIGFic2Rpcj0iJGFic19sYWRpciIKKwkgICAgbGliZGlyPSIkYWJzX2xhZGlyIgorCSAgZWxzZQorCSAgICBkaXI9IiRsaWJkaXIiCisJICAgIGFic2Rpcj0iJGxpYmRpciIKKwkgIGZpCisJICB0ZXN0ICJYJGhhcmRjb2RlX2F1dG9tYXRpYyIgPSBYeWVzICYmIGF2b2lkdGVtcHJwYXRoPXllcworCWVsc2UKKwkgIGlmIHRlc3QgISAtZiAiJGxhZGlyLyRvYmpkaXIvJGxpbmtsaWIiICYmIHRlc3QgLWYgIiRhYnNfbGFkaXIvJGxpbmtsaWIiOyB0aGVuCisJICAgIGRpcj0iJGxhZGlyIgorCSAgICBhYnNkaXI9IiRhYnNfbGFkaXIiCisJICAgICMgUmVtb3ZlIHRoaXMgc2VhcmNoIHBhdGggbGF0ZXIKKwkgICAgbm90aW5zdF9wYXRoPSIkbm90aW5zdF9wYXRoICRhYnNfbGFkaXIiCisJICBlbHNlCisJICAgIGRpcj0iJGxhZGlyLyRvYmpkaXIiCisJICAgIGFic2Rpcj0iJGFic19sYWRpci8kb2JqZGlyIgorCSAgICAjIFJlbW92ZSB0aGlzIHNlYXJjaCBwYXRoIGxhdGVyCisJICAgIG5vdGluc3RfcGF0aD0iJG5vdGluc3RfcGF0aCAkYWJzX2xhZGlyIgorCSAgZmkKKwlmaSAjICRpbnN0YWxsZWQgPSB5ZXMKKwlmdW5jX3N0cmlwbmFtZSAnbGliJyAnLmxhJyAiJGxhbmFtZSIKKwluYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKworCSMgVGhpcyBsaWJyYXJ5IHdhcyBzcGVjaWZpZWQgd2l0aCAtZGxwcmVvcGVuLgorCWlmIHRlc3QgIiRwYXNzIiA9IGRscHJlb3BlbjsgdGhlbgorCSAgaWYgdGVzdCAteiAiJGxpYmRpciIgJiYgdGVzdCAiJGxpbmttb2RlIiA9IHByb2c7IHRoZW4KKwkgICAgZnVuY19mYXRhbF9lcnJvciAib25seSBsaWJyYXJpZXMgbWF5IC1kbHByZW9wZW4gYSBjb252ZW5pZW5jZSBsaWJyYXJ5OiBcYCRsaWInIgorCSAgZmkKKwkgICMgUHJlZmVyIHVzaW5nIGEgc3RhdGljIGxpYnJhcnkgKHNvIHRoYXQgbm8gc2lsbHkgX0RZTkFNSUMgc3ltYm9scworCSAgIyBhcmUgcmVxdWlyZWQgdG8gbGluaykuCisJICBpZiB0ZXN0IC1uICIkb2xkX2xpYnJhcnkiOyB0aGVuCisJICAgIG5ld2RscHJlZmlsZXM9IiRuZXdkbHByZWZpbGVzICRkaXIvJG9sZF9saWJyYXJ5IgorCSAgICAjIEtlZXAgYSBsaXN0IG9mIHByZW9wZW5lZCBjb252ZW5pZW5jZSBsaWJyYXJpZXMgdG8gY2hlY2sKKwkgICAgIyB0aGF0IHRoZXkgYXJlIGJlaW5nIHVzZWQgY29ycmVjdGx5IGluIHRoZSBsaW5rIHBhc3MuCisJICAgIHRlc3QgLXogIiRsaWJkaXIiICYmIFwKKwkJZGxwcmVjb252ZW5pZW5jZWxpYnM9IiRkbHByZWNvbnZlbmllbmNlbGlicyAkZGlyLyRvbGRfbGlicmFyeSIKKwkgICMgT3RoZXJ3aXNlLCB1c2UgdGhlIGRsbmFtZSwgc28gdGhhdCBsdF9kbG9wZW4gZmluZHMgaXQuCisJICBlbGlmIHRlc3QgLW4gIiRkbG5hbWUiOyB0aGVuCisJICAgIG5ld2RscHJlZmlsZXM9IiRuZXdkbHByZWZpbGVzICRkaXIvJGRsbmFtZSIKKwkgIGVsc2UKKwkgICAgbmV3ZGxwcmVmaWxlcz0iJG5ld2RscHJlZmlsZXMgJGRpci8kbGlua2xpYiIKKwkgIGZpCisJZmkgIyAkcGFzcyA9IGRscHJlb3BlbgorCisJaWYgdGVzdCAteiAiJGxpYmRpciI7IHRoZW4KKwkgICMgTGluayB0aGUgY29udmVuaWVuY2UgbGlicmFyeQorCSAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IGxpYjsgdGhlbgorCSAgICBkZXBsaWJzPSIkZGlyLyRvbGRfbGlicmFyeSAkZGVwbGlicyIKKwkgIGVsaWYgdGVzdCAiJGxpbmttb2RlLCRwYXNzIiA9ICJwcm9nLGxpbmsiOyB0aGVuCisJICAgIGNvbXBpbGVfZGVwbGlicz0iJGRpci8kb2xkX2xpYnJhcnkgJGNvbXBpbGVfZGVwbGlicyIKKwkgICAgZmluYWxpemVfZGVwbGlicz0iJGRpci8kb2xkX2xpYnJhcnkgJGZpbmFsaXplX2RlcGxpYnMiCisJICBlbHNlCisJICAgIGRlcGxpYnM9IiRsaWIgJGRlcGxpYnMiICMgdXNlZCBmb3IgcHJvZyxzY2FuIHBhc3MKKwkgIGZpCisJICBjb250aW51ZQorCWZpCisKKworCWlmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nICYmIHRlc3QgIiRwYXNzIiAhPSBsaW5rOyB0aGVuCisJICBuZXdsaWJfc2VhcmNoX3BhdGg9IiRuZXdsaWJfc2VhcmNoX3BhdGggJGxhZGlyIgorCSAgZGVwbGlicz0iJGxpYiAkZGVwbGlicyIKKworCSAgbGlua2FsbGRlcGxpYnM9bm8KKwkgIGlmIHRlc3QgIiRsaW5rX2FsbF9kZXBsaWJzIiAhPSBubyB8fCB0ZXN0IC16ICIkbGlicmFyeV9uYW1lcyIgfHwKKwkgICAgIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0gbm87IHRoZW4KKwkgICAgbGlua2FsbGRlcGxpYnM9eWVzCisJICBmaQorCisJICB0bXBfbGlicz0KKwkgIGZvciBkZXBsaWIgaW4gJGRlcGVuZGVuY3lfbGliczsgZG8KKwkgICAgY2FzZSAkZGVwbGliIGluCisJICAgIC1MKikgZnVuY19zdHJpcG5hbWUgJy1MJyAnJyAiJGRlcGxpYiIKKwkgICAgICAgICBuZXdsaWJfc2VhcmNoX3BhdGg9IiRuZXdsaWJfc2VhcmNoX3BhdGggJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCIKKwkJIDs7CisJICAgIGVzYWMKKwkgICAgIyBOZWVkIHRvIGxpbmsgYWdhaW5zdCBhbGwgZGVwZW5kZW5jeV9saWJzPworCSAgICBpZiB0ZXN0ICIkbGlua2FsbGRlcGxpYnMiID0geWVzOyB0aGVuCisJICAgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKKwkgICAgZWxzZQorCSAgICAgICMgTmVlZCB0byBoYXJkY29kZSBzaGFyZWQgbGlicmFyeSBwYXRocworCSAgICAgICMgb3IvYW5kIGxpbmsgYWdhaW5zdCBzdGF0aWMgbGlicmFyaWVzCisJICAgICAgbmV3ZGVwZW5kZW5jeV9saWJzPSIkZGVwbGliICRuZXdkZXBlbmRlbmN5X2xpYnMiCisJICAgIGZpCisJICAgIGlmICRvcHRfZHVwbGljYXRlX2RlcHMgOyB0aGVuCisJICAgICAgY2FzZSAiJHRtcF9saWJzICIgaW4KKwkgICAgICAqIiAkZGVwbGliICIqKSBzcGVjaWFsZGVwbGlicz0iJHNwZWNpYWxkZXBsaWJzICRkZXBsaWIiIDs7CisJICAgICAgZXNhYworCSAgICBmaQorCSAgICB0bXBfbGlicz0iJHRtcF9saWJzICRkZXBsaWIiCisJICBkb25lICMgZm9yIGRlcGxpYgorCSAgY29udGludWUKKwlmaSAjICRsaW5rbW9kZSA9IHByb2cuLi4KKworCWlmIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgPSAicHJvZyxsaW5rIjsgdGhlbgorCSAgaWYgdGVzdCAtbiAiJGxpYnJhcnlfbmFtZXMiICYmCisJICAgICB7IHsgdGVzdCAiJHByZWZlcl9zdGF0aWNfbGlicyIgPSBubyB8fAorCSAgICAgICAgIHRlc3QgIiRwcmVmZXJfc3RhdGljX2xpYnMsJGluc3RhbGxlZCIgPSAiYnVpbHQseWVzIjsgfSB8fAorCSAgICAgICB0ZXN0IC16ICIkb2xkX2xpYnJhcnkiOyB9OyB0aGVuCisJICAgICMgV2UgbmVlZCB0byBoYXJkY29kZSB0aGUgbGlicmFyeSBwYXRoCisJICAgIGlmIHRlc3QgLW4gIiRzaGxpYnBhdGhfdmFyIiAmJiB0ZXN0IC16ICIkYXZvaWR0ZW1wcnBhdGgiIDsgdGhlbgorCSAgICAgICMgTWFrZSBzdXJlIHRoZSBycGF0aCBjb250YWlucyBvbmx5IHVuaXF1ZSBkaXJlY3Rvcmllcy4KKwkgICAgICBjYXNlICIkdGVtcF9ycGF0aDoiIGluCisJICAgICAgKiIkYWJzZGlyOiIqKSA7OworCSAgICAgICopIHRlbXBfcnBhdGg9IiR0ZW1wX3JwYXRoJGFic2RpcjoiIDs7CisJICAgICAgZXNhYworCSAgICBmaQorCisJICAgICMgSGFyZGNvZGUgdGhlIGxpYnJhcnkgcGF0aC4KKwkgICAgIyBTa2lwIGRpcmVjdG9yaWVzIHRoYXQgYXJlIGluIHRoZSBzeXN0ZW0gZGVmYXVsdCBydW4tdGltZQorCSAgICAjIHNlYXJjaCBwYXRoLgorCSAgICBjYXNlICIgJHN5c19saWJfZGxzZWFyY2hfcGF0aCAiIGluCisJICAgICoiICRhYnNkaXIgIiopIDs7CisJICAgICopCisJICAgICAgY2FzZSAiJGNvbXBpbGVfcnBhdGggIiBpbgorCSAgICAgICoiICRhYnNkaXIgIiopIDs7CisJICAgICAgKikgY29tcGlsZV9ycGF0aD0iJGNvbXBpbGVfcnBhdGggJGFic2RpciIKKwkgICAgICBlc2FjCisJICAgICAgOzsKKwkgICAgZXNhYworCSAgICBjYXNlICIgJHN5c19saWJfZGxzZWFyY2hfcGF0aCAiIGluCisJICAgICoiICRsaWJkaXIgIiopIDs7CisJICAgICopCisJICAgICAgY2FzZSAiJGZpbmFsaXplX3JwYXRoICIgaW4KKwkgICAgICAqIiAkbGliZGlyICIqKSA7OworCSAgICAgICopIGZpbmFsaXplX3JwYXRoPSIkZmluYWxpemVfcnBhdGggJGxpYmRpciIKKwkgICAgICBlc2FjCisJICAgICAgOzsKKwkgICAgZXNhYworCSAgZmkgIyAkbGlua21vZGUsJHBhc3MgPSBwcm9nLGxpbmsuLi4KKworCSAgaWYgdGVzdCAiJGFsbGRlcGxpYnMiID0geWVzICYmCisJICAgICB7IHRlc3QgIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgPSBwYXNzX2FsbCB8fAorCSAgICAgICB7IHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0geWVzICYmCisJCSB0ZXN0IC1uICIkbGlicmFyeV9uYW1lcyI7IH07IH07IHRoZW4KKwkgICAgIyBXZSBvbmx5IG5lZWQgdG8gc2VhcmNoIGZvciBzdGF0aWMgbGlicmFyaWVzCisJICAgIGNvbnRpbnVlCisJICBmaQorCWZpCisKKwlsaW5rX3N0YXRpYz1ubyAjIFdoZXRoZXIgdGhlIGRlcGxpYiB3aWxsIGJlIGxpbmtlZCBzdGF0aWNhbGx5CisJdXNlX3N0YXRpY19saWJzPSRwcmVmZXJfc3RhdGljX2xpYnMKKwlpZiB0ZXN0ICIkdXNlX3N0YXRpY19saWJzIiA9IGJ1aWx0ICYmIHRlc3QgIiRpbnN0YWxsZWQiID0geWVzOyB0aGVuCisJICB1c2Vfc3RhdGljX2xpYnM9bm8KKwlmaQorCWlmIHRlc3QgLW4gIiRsaWJyYXJ5X25hbWVzIiAmJgorCSAgIHsgdGVzdCAiJHVzZV9zdGF0aWNfbGlicyIgPSBubyB8fCB0ZXN0IC16ICIkb2xkX2xpYnJhcnkiOyB9OyB0aGVuCisJICBjYXNlICRob3N0IGluCisJICAqY3lnd2luKiB8ICptaW5ndyogfCAqY2VnY2MqKQorCSAgICAgICMgTm8gcG9pbnQgaW4gcmVsaW5raW5nIERMTHMgYmVjYXVzZSBwYXRocyBhcmUgbm90IGVuY29kZWQKKwkgICAgICBub3RpbnN0X2RlcGxpYnM9IiRub3RpbnN0X2RlcGxpYnMgJGxpYiIKKwkgICAgICBuZWVkX3JlbGluaz1ubworCSAgICA7OworCSAgKikKKwkgICAgaWYgdGVzdCAiJGluc3RhbGxlZCIgPSBubzsgdGhlbgorCSAgICAgIG5vdGluc3RfZGVwbGlicz0iJG5vdGluc3RfZGVwbGlicyAkbGliIgorCSAgICAgIG5lZWRfcmVsaW5rPXllcworCSAgICBmaQorCSAgICA7OworCSAgZXNhYworCSAgIyBUaGlzIGlzIGEgc2hhcmVkIGxpYnJhcnkKKworCSAgIyBXYXJuIGFib3V0IHBvcnRhYmlsaXR5LCBjYW4ndCBsaW5rIGFnYWluc3QgLW1vZHVsZSdzIG9uIHNvbWUKKwkgICMgc3lzdGVtcyAoZGFyd2luKS4gIERvbid0IGJsZWF0IGFib3V0IGRsb3BlbmVkIG1vZHVsZXMgdGhvdWdoIQorCSAgZGxvcGVubW9kdWxlPSIiCisJICBmb3IgZGxwcmVtb2R1bGV0ZXN0IGluICRkbHByZWZpbGVzOyBkbworCSAgICBpZiB0ZXN0ICJYJGRscHJlbW9kdWxldGVzdCIgPSAiWCRsaWIiOyB0aGVuCisJICAgICAgZGxvcGVubW9kdWxlPSIkZGxwcmVtb2R1bGV0ZXN0IgorCSAgICAgIGJyZWFrCisJICAgIGZpCisJICBkb25lCisJICBpZiB0ZXN0IC16ICIkZGxvcGVubW9kdWxlIiAmJiB0ZXN0ICIkc2hvdWxkbm90bGluayIgPSB5ZXMgJiYgdGVzdCAiJHBhc3MiID0gbGluazsgdGhlbgorCSAgICAkRUNITworCSAgICBpZiB0ZXN0ICIkbGlua21vZGUiID0gcHJvZzsgdGhlbgorCSAgICAgICRFQ0hPICIqKiogV2FybmluZzogTGlua2luZyB0aGUgZXhlY3V0YWJsZSAkb3V0cHV0IGFnYWluc3QgdGhlIGxvYWRhYmxlIG1vZHVsZSIKKwkgICAgZWxzZQorCSAgICAgICRFQ0hPICIqKiogV2FybmluZzogTGlua2luZyB0aGUgc2hhcmVkIGxpYnJhcnkgJG91dHB1dCBhZ2FpbnN0IHRoZSBsb2FkYWJsZSBtb2R1bGUiCisJICAgIGZpCisJICAgICRFQ0hPICIqKiogJGxpbmtsaWIgaXMgbm90IHBvcnRhYmxlISIKKwkgIGZpCisJICBpZiB0ZXN0ICIkbGlua21vZGUiID0gbGliICYmCisJICAgICB0ZXN0ICIkaGFyZGNvZGVfaW50b19saWJzIiA9IHllczsgdGhlbgorCSAgICAjIEhhcmRjb2RlIHRoZSBsaWJyYXJ5IHBhdGguCisJICAgICMgU2tpcCBkaXJlY3RvcmllcyB0aGF0IGFyZSBpbiB0aGUgc3lzdGVtIGRlZmF1bHQgcnVuLXRpbWUKKwkgICAgIyBzZWFyY2ggcGF0aC4KKwkgICAgY2FzZSAiICRzeXNfbGliX2Rsc2VhcmNoX3BhdGggIiBpbgorCSAgICAqIiAkYWJzZGlyICIqKSA7OworCSAgICAqKQorCSAgICAgIGNhc2UgIiRjb21waWxlX3JwYXRoICIgaW4KKwkgICAgICAqIiAkYWJzZGlyICIqKSA7OworCSAgICAgICopIGNvbXBpbGVfcnBhdGg9IiRjb21waWxlX3JwYXRoICRhYnNkaXIiCisJICAgICAgZXNhYworCSAgICAgIDs7CisJICAgIGVzYWMKKwkgICAgY2FzZSAiICRzeXNfbGliX2Rsc2VhcmNoX3BhdGggIiBpbgorCSAgICAqIiAkbGliZGlyICIqKSA7OworCSAgICAqKQorCSAgICAgIGNhc2UgIiRmaW5hbGl6ZV9ycGF0aCAiIGluCisJICAgICAgKiIgJGxpYmRpciAiKikgOzsKKwkgICAgICAqKSBmaW5hbGl6ZV9ycGF0aD0iJGZpbmFsaXplX3JwYXRoICRsaWJkaXIiCisJICAgICAgZXNhYworCSAgICAgIDs7CisJICAgIGVzYWMKKwkgIGZpCisKKwkgIGlmIHRlc3QgLW4gIiRvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcyI7IHRoZW4KKwkgICAgIyBmaWd1cmUgb3V0IHRoZSBzb25hbWUKKwkgICAgc2V0IGR1bW15ICRsaWJyYXJ5X25hbWVzCisJICAgIHNoaWZ0CisJICAgIHJlYWxuYW1lPSIkMSIKKwkgICAgc2hpZnQKKwkgICAgbGlibmFtZT1gZXZhbCAiXFwkRUNITyBcIiRsaWJuYW1lX3NwZWNcIiJgCisJICAgICMgdXNlIGRsbmFtZSBpZiB3ZSBnb3QgaXQuIGl0J3MgcGVyZmVjdGx5IGdvb2QsIG5vPworCSAgICBpZiB0ZXN0IC1uICIkZGxuYW1lIjsgdGhlbgorCSAgICAgIHNvbmFtZT0iJGRsbmFtZSIKKwkgICAgZWxpZiB0ZXN0IC1uICIkc29uYW1lX3NwZWMiOyB0aGVuCisJICAgICAgIyBibGVoIHdpbmRvd3MKKwkgICAgICBjYXNlICRob3N0IGluCisJICAgICAgKmN5Z3dpbiogfCBtaW5ndyogfCAqY2VnY2MqKQorCSAgICAgICAgZnVuY19hcml0aCAkY3VycmVudCAtICRhZ2UKKwkJbWFqb3I9JGZ1bmNfYXJpdGhfcmVzdWx0CisJCXZlcnN1ZmZpeD0iLSRtYWpvciIKKwkJOzsKKwkgICAgICBlc2FjCisJICAgICAgZXZhbCBzb25hbWU9XCIkc29uYW1lX3NwZWNcIgorCSAgICBlbHNlCisJICAgICAgc29uYW1lPSIkcmVhbG5hbWUiCisJICAgIGZpCisKKwkgICAgIyBNYWtlIGEgbmV3IG5hbWUgZm9yIHRoZSBleHRyYWN0X2V4cHN5bXNfY21kcyB0byB1c2UKKwkgICAgc29yb290PSIkc29uYW1lIgorCSAgICBmdW5jX2Jhc2VuYW1lICIkc29yb290IgorCSAgICBzb25hbWU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKwkgICAgZnVuY19zdHJpcG5hbWUgJ2xpYicgJy5kbGwnICIkc29uYW1lIgorCSAgICBuZXdsaWI9bGliaW1wLSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQuYQorCisJICAgICMgSWYgdGhlIGxpYnJhcnkgaGFzIG5vIGV4cG9ydCBsaXN0LCB0aGVuIGNyZWF0ZSBvbmUgbm93CisJICAgIGlmIHRlc3QgLWYgIiRvdXRwdXRfb2JqZGlyLyRzb25hbWUtZGVmIjsgdGhlbiA6CisJICAgIGVsc2UKKwkgICAgICBmdW5jX3ZlcmJvc2UgImV4dHJhY3RpbmcgZXhwb3J0ZWQgc3ltYm9sIGxpc3QgZnJvbSBcYCRzb25hbWUnIgorCSAgICAgIGZ1bmNfZXhlY3V0ZV9jbWRzICIkZXh0cmFjdF9leHBzeW1zX2NtZHMiICdleGl0ICQ/JworCSAgICBmaQorCisJICAgICMgQ3JlYXRlICRuZXdsaWIKKwkgICAgaWYgdGVzdCAtZiAiJG91dHB1dF9vYmpkaXIvJG5ld2xpYiI7IHRoZW4gOjsgZWxzZQorCSAgICAgIGZ1bmNfdmVyYm9zZSAiZ2VuZXJhdGluZyBpbXBvcnQgbGlicmFyeSBmb3IgXGAkc29uYW1lJyIKKwkgICAgICBmdW5jX2V4ZWN1dGVfY21kcyAiJG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzIiAnZXhpdCAkPycKKwkgICAgZmkKKwkgICAgIyBtYWtlIHN1cmUgdGhlIGxpYnJhcnkgdmFyaWFibGVzIGFyZSBwb2ludGluZyB0byB0aGUgbmV3IGxpYnJhcnkKKwkgICAgZGlyPSRvdXRwdXRfb2JqZGlyCisJICAgIGxpbmtsaWI9JG5ld2xpYgorCSAgZmkgIyB0ZXN0IC1uICIkb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHMiCisKKwkgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nIHx8IHRlc3QgIiRtb2RlIiAhPSByZWxpbms7IHRoZW4KKwkgICAgYWRkX3NobGlicGF0aD0KKwkgICAgYWRkX2Rpcj0KKwkgICAgYWRkPQorCSAgICBsaWJfbGlua2VkPXllcworCSAgICBjYXNlICRoYXJkY29kZV9hY3Rpb24gaW4KKwkgICAgaW1tZWRpYXRlIHwgdW5zdXBwb3J0ZWQpCisJICAgICAgaWYgdGVzdCAiJGhhcmRjb2RlX2RpcmVjdCIgPSBubzsgdGhlbgorCQlhZGQ9IiRkaXIvJGxpbmtsaWIiCisJCWNhc2UgJGhvc3QgaW4KKwkJICAqLSotc2NvMy4ydjUuMC5bMDI0XSopIGFkZF9kaXI9Ii1MJGRpciIgOzsKKwkJICAqLSotc3lzdjQqdXcyKikgYWRkX2Rpcj0iLUwkZGlyIiA7OworCQkgICotKi1zeXN2NU9wZW5VTklYKiB8ICotKi1zeXN2NVVuaXhXYXJlNy5bMDFdLlsxMF0qIHwgXAorCQkgICAgKi0qLXVuaXh3YXJlNyopIGFkZF9kaXI9Ii1MJGRpciIgOzsKKwkJICAqLSotZGFyd2luKiApCisJCSAgICAjIGlmIHRoZSBsaWIgaXMgYSAobm9uLWRsb3BlbmVkKSBtb2R1bGUgdGhlbiB3ZSBjYW4gbm90CisJCSAgICAjIGxpbmsgYWdhaW5zdCBpdCwgc29tZW9uZSBpcyBpZ25vcmluZyB0aGUgZWFybGllciB3YXJuaW5ncworCQkgICAgaWYgL3Vzci9iaW4vZmlsZSAtTCAkYWRkIDI+IC9kZXYvbnVsbCB8CisJCQkgJEdSRVAgIjogW146XSogYnVuZGxlIiA+L2Rldi9udWxsIDsgdGhlbgorCQkgICAgICBpZiB0ZXN0ICJYJGRsb3Blbm1vZHVsZSIgIT0gIlgkbGliIjsgdGhlbgorCQkJJEVDSE8gIioqKiBXYXJuaW5nOiBsaWIgJGxpbmtsaWIgaXMgYSBtb2R1bGUsIG5vdCBhIHNoYXJlZCBsaWJyYXJ5IgorCQkJaWYgdGVzdCAteiAiJG9sZF9saWJyYXJ5IiA7IHRoZW4KKwkJCSAgJEVDSE8KKwkJCSAgJEVDSE8gIioqKiBBbmQgdGhlcmUgZG9lc24ndCBzZWVtIHRvIGJlIGEgc3RhdGljIGFyY2hpdmUgYXZhaWxhYmxlIgorCQkJICAkRUNITyAiKioqIFRoZSBsaW5rIHdpbGwgcHJvYmFibHkgZmFpbCwgc29ycnkiCisJCQllbHNlCisJCQkgIGFkZD0iJGRpci8kb2xkX2xpYnJhcnkiCisJCQlmaQorCQkgICAgICBlbGlmIHRlc3QgLW4gIiRvbGRfbGlicmFyeSI7IHRoZW4KKwkJCWFkZD0iJGRpci8kb2xkX2xpYnJhcnkiCisJCSAgICAgIGZpCisJCSAgICBmaQorCQllc2FjCisJICAgICAgZWxpZiB0ZXN0ICIkaGFyZGNvZGVfbWludXNfTCIgPSBubzsgdGhlbgorCQljYXNlICRob3N0IGluCisJCSotKi1zdW5vcyopIGFkZF9zaGxpYnBhdGg9IiRkaXIiIDs7CisJCWVzYWMKKwkJYWRkX2Rpcj0iLUwkZGlyIgorCQlhZGQ9Ii1sJG5hbWUiCisJICAgICAgZWxpZiB0ZXN0ICIkaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciIgPSBubzsgdGhlbgorCQlhZGRfc2hsaWJwYXRoPSIkZGlyIgorCQlhZGQ9Ii1sJG5hbWUiCisJICAgICAgZWxzZQorCQlsaWJfbGlua2VkPW5vCisJICAgICAgZmkKKwkgICAgICA7OworCSAgICByZWxpbmspCisJICAgICAgaWYgdGVzdCAiJGhhcmRjb2RlX2RpcmVjdCIgPSB5ZXMgJiYKKwkgICAgICAgICB0ZXN0ICIkaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlIiA9IG5vOyB0aGVuCisJCWFkZD0iJGRpci8kbGlua2xpYiIKKwkgICAgICBlbGlmIHRlc3QgIiRoYXJkY29kZV9taW51c19MIiA9IHllczsgdGhlbgorCQlhZGRfZGlyPSItTCRkaXIiCisJCSMgVHJ5IGxvb2tpbmcgZmlyc3QgaW4gdGhlIGxvY2F0aW9uIHdlJ3JlIGJlaW5nIGluc3RhbGxlZCB0by4KKwkJaWYgdGVzdCAtbiAiJGluc3RfcHJlZml4X2RpciI7IHRoZW4KKwkJICBjYXNlICRsaWJkaXIgaW4KKwkJICAgIFtcXC9dKikKKwkJICAgICAgYWRkX2Rpcj0iJGFkZF9kaXIgLUwkaW5zdF9wcmVmaXhfZGlyJGxpYmRpciIKKwkJICAgICAgOzsKKwkJICBlc2FjCisJCWZpCisJCWFkZD0iLWwkbmFtZSIKKwkgICAgICBlbGlmIHRlc3QgIiRoYXJkY29kZV9zaGxpYnBhdGhfdmFyIiA9IHllczsgdGhlbgorCQlhZGRfc2hsaWJwYXRoPSIkZGlyIgorCQlhZGQ9Ii1sJG5hbWUiCisJICAgICAgZWxzZQorCQlsaWJfbGlua2VkPW5vCisJICAgICAgZmkKKwkgICAgICA7OworCSAgICAqKSBsaWJfbGlua2VkPW5vIDs7CisJICAgIGVzYWMKKworCSAgICBpZiB0ZXN0ICIkbGliX2xpbmtlZCIgIT0geWVzOyB0aGVuCisJICAgICAgZnVuY19mYXRhbF9jb25maWd1cmF0aW9uICJ1bnN1cHBvcnRlZCBoYXJkY29kZSBwcm9wZXJ0aWVzIgorCSAgICBmaQorCisJICAgIGlmIHRlc3QgLW4gIiRhZGRfc2hsaWJwYXRoIjsgdGhlbgorCSAgICAgIGNhc2UgOiRjb21waWxlX3NobGlicGF0aDogaW4KKwkgICAgICAqIjokYWRkX3NobGlicGF0aDoiKikgOzsKKwkgICAgICAqKSBjb21waWxlX3NobGlicGF0aD0iJGNvbXBpbGVfc2hsaWJwYXRoJGFkZF9zaGxpYnBhdGg6IiA7OworCSAgICAgIGVzYWMKKwkgICAgZmkKKwkgICAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IHByb2c7IHRoZW4KKwkgICAgICB0ZXN0IC1uICIkYWRkX2RpciIgJiYgY29tcGlsZV9kZXBsaWJzPSIkYWRkX2RpciAkY29tcGlsZV9kZXBsaWJzIgorCSAgICAgIHRlc3QgLW4gIiRhZGQiICYmIGNvbXBpbGVfZGVwbGlicz0iJGFkZCAkY29tcGlsZV9kZXBsaWJzIgorCSAgICBlbHNlCisJICAgICAgdGVzdCAtbiAiJGFkZF9kaXIiICYmIGRlcGxpYnM9IiRhZGRfZGlyICRkZXBsaWJzIgorCSAgICAgIHRlc3QgLW4gIiRhZGQiICYmIGRlcGxpYnM9IiRhZGQgJGRlcGxpYnMiCisJICAgICAgaWYgdGVzdCAiJGhhcmRjb2RlX2RpcmVjdCIgIT0geWVzICYmCisJCSB0ZXN0ICIkaGFyZGNvZGVfbWludXNfTCIgIT0geWVzICYmCisJCSB0ZXN0ICIkaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciIgPSB5ZXM7IHRoZW4KKwkJY2FzZSA6JGZpbmFsaXplX3NobGlicGF0aDogaW4KKwkJKiI6JGxpYmRpcjoiKikgOzsKKwkJKikgZmluYWxpemVfc2hsaWJwYXRoPSIkZmluYWxpemVfc2hsaWJwYXRoJGxpYmRpcjoiIDs7CisJCWVzYWMKKwkgICAgICBmaQorCSAgICBmaQorCSAgZmkKKworCSAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IHByb2cgfHwgdGVzdCAiJG1vZGUiID0gcmVsaW5rOyB0aGVuCisJICAgIGFkZF9zaGxpYnBhdGg9CisJICAgIGFkZF9kaXI9CisJICAgIGFkZD0KKwkgICAgIyBGaW5hbGl6ZSBjb21tYW5kIGZvciBib3RoIGlzIHNpbXBsZToganVzdCBoYXJkY29kZSBpdC4KKwkgICAgaWYgdGVzdCAiJGhhcmRjb2RlX2RpcmVjdCIgPSB5ZXMgJiYKKwkgICAgICAgdGVzdCAiJGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSIgPSBubzsgdGhlbgorCSAgICAgIGFkZD0iJGxpYmRpci8kbGlua2xpYiIKKwkgICAgZWxpZiB0ZXN0ICIkaGFyZGNvZGVfbWludXNfTCIgPSB5ZXM7IHRoZW4KKwkgICAgICBhZGRfZGlyPSItTCRsaWJkaXIiCisJICAgICAgYWRkPSItbCRuYW1lIgorCSAgICBlbGlmIHRlc3QgIiRoYXJkY29kZV9zaGxpYnBhdGhfdmFyIiA9IHllczsgdGhlbgorCSAgICAgIGNhc2UgOiRmaW5hbGl6ZV9zaGxpYnBhdGg6IGluCisJICAgICAgKiI6JGxpYmRpcjoiKikgOzsKKwkgICAgICAqKSBmaW5hbGl6ZV9zaGxpYnBhdGg9IiRmaW5hbGl6ZV9zaGxpYnBhdGgkbGliZGlyOiIgOzsKKwkgICAgICBlc2FjCisJICAgICAgYWRkPSItbCRuYW1lIgorCSAgICBlbGlmIHRlc3QgIiRoYXJkY29kZV9hdXRvbWF0aWMiID0geWVzOyB0aGVuCisJICAgICAgaWYgdGVzdCAtbiAiJGluc3RfcHJlZml4X2RpciIgJiYKKwkJIHRlc3QgLWYgIiRpbnN0X3ByZWZpeF9kaXIkbGliZGlyLyRsaW5rbGliIiA7IHRoZW4KKwkJYWRkPSIkaW5zdF9wcmVmaXhfZGlyJGxpYmRpci8kbGlua2xpYiIKKwkgICAgICBlbHNlCisJCWFkZD0iJGxpYmRpci8kbGlua2xpYiIKKwkgICAgICBmaQorCSAgICBlbHNlCisJICAgICAgIyBXZSBjYW5ub3Qgc2VlbSB0byBoYXJkY29kZSBpdCwgZ3Vlc3Mgd2UnbGwgZmFrZSBpdC4KKwkgICAgICBhZGRfZGlyPSItTCRsaWJkaXIiCisJICAgICAgIyBUcnkgbG9va2luZyBmaXJzdCBpbiB0aGUgbG9jYXRpb24gd2UncmUgYmVpbmcgaW5zdGFsbGVkIHRvLgorCSAgICAgIGlmIHRlc3QgLW4gIiRpbnN0X3ByZWZpeF9kaXIiOyB0aGVuCisJCWNhc2UgJGxpYmRpciBpbgorCQkgIFtcXC9dKikKKwkJICAgIGFkZF9kaXI9IiRhZGRfZGlyIC1MJGluc3RfcHJlZml4X2RpciRsaWJkaXIiCisJCSAgICA7OworCQllc2FjCisJICAgICAgZmkKKwkgICAgICBhZGQ9Ii1sJG5hbWUiCisJICAgIGZpCisKKwkgICAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IHByb2c7IHRoZW4KKwkgICAgICB0ZXN0IC1uICIkYWRkX2RpciIgJiYgZmluYWxpemVfZGVwbGlicz0iJGFkZF9kaXIgJGZpbmFsaXplX2RlcGxpYnMiCisJICAgICAgdGVzdCAtbiAiJGFkZCIgJiYgZmluYWxpemVfZGVwbGlicz0iJGFkZCAkZmluYWxpemVfZGVwbGlicyIKKwkgICAgZWxzZQorCSAgICAgIHRlc3QgLW4gIiRhZGRfZGlyIiAmJiBkZXBsaWJzPSIkYWRkX2RpciAkZGVwbGlicyIKKwkgICAgICB0ZXN0IC1uICIkYWRkIiAmJiBkZXBsaWJzPSIkYWRkICRkZXBsaWJzIgorCSAgICBmaQorCSAgZmkKKwllbGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nOyB0aGVuCisJICAjIEhlcmUgd2UgYXNzdW1lIHRoYXQgb25lIG9mIGhhcmRjb2RlX2RpcmVjdCBvciBoYXJkY29kZV9taW51c19MCisJICAjIGlzIG5vdCB1bnN1cHBvcnRlZC4gIFRoaXMgaXMgdmFsaWQgb24gYWxsIGtub3duIHN0YXRpYyBhbmQKKwkgICMgc2hhcmVkIHBsYXRmb3Jtcy4KKwkgIGlmIHRlc3QgIiRoYXJkY29kZV9kaXJlY3QiICE9IHVuc3VwcG9ydGVkOyB0aGVuCisJICAgIHRlc3QgLW4gIiRvbGRfbGlicmFyeSIgJiYgbGlua2xpYj0iJG9sZF9saWJyYXJ5IgorCSAgICBjb21waWxlX2RlcGxpYnM9IiRkaXIvJGxpbmtsaWIgJGNvbXBpbGVfZGVwbGlicyIKKwkgICAgZmluYWxpemVfZGVwbGlicz0iJGRpci8kbGlua2xpYiAkZmluYWxpemVfZGVwbGlicyIKKwkgIGVsc2UKKwkgICAgY29tcGlsZV9kZXBsaWJzPSItbCRuYW1lIC1MJGRpciAkY29tcGlsZV9kZXBsaWJzIgorCSAgICBmaW5hbGl6ZV9kZXBsaWJzPSItbCRuYW1lIC1MJGRpciAkZmluYWxpemVfZGVwbGlicyIKKwkgIGZpCisJZWxpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IHllczsgdGhlbgorCSAgIyBOb3QgYSBzaGFyZWQgbGlicmFyeQorCSAgaWYgdGVzdCAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiAhPSBwYXNzX2FsbDsgdGhlbgorCSAgICAjIFdlJ3JlIHRyeWluZyBsaW5rIGEgc2hhcmVkIGxpYnJhcnkgYWdhaW5zdCBhIHN0YXRpYyBvbmUKKwkgICAgIyBidXQgdGhlIHN5c3RlbSBkb2Vzbid0IHN1cHBvcnQgaXQuCisKKwkgICAgIyBKdXN0IHByaW50IGEgd2FybmluZyBhbmQgYWRkIHRoZSBsaWJyYXJ5IHRvIGRlcGVuZGVuY3lfbGlicyBzbworCSAgICAjIHRoYXQgdGhlIHByb2dyYW0gY2FuIGJlIGxpbmtlZCBhZ2FpbnN0IHRoZSBzdGF0aWMgbGlicmFyeS4KKwkgICAgJEVDSE8KKwkgICAgJEVDSE8gIioqKiBXYXJuaW5nOiBUaGlzIHN5c3RlbSBjYW4gbm90IGxpbmsgdG8gc3RhdGljIGxpYiBhcmNoaXZlICRsaWIuIgorCSAgICAkRUNITyAiKioqIEkgaGF2ZSB0aGUgY2FwYWJpbGl0eSB0byBtYWtlIHRoYXQgbGlicmFyeSBhdXRvbWF0aWNhbGx5IGxpbmsgaW4gd2hlbiIKKwkgICAgJEVDSE8gIioqKiB5b3UgbGluayB0byB0aGlzIGxpYnJhcnkuICBCdXQgSSBjYW4gb25seSBkbyB0aGlzIGlmIHlvdSBoYXZlIGEiCisJICAgICRFQ0hPICIqKiogc2hhcmVkIHZlcnNpb24gb2YgdGhlIGxpYnJhcnksIHdoaWNoIHlvdSBkbyBub3QgYXBwZWFyIHRvIGhhdmUuIgorCSAgICBpZiB0ZXN0ICIkbW9kdWxlIiA9IHllczsgdGhlbgorCSAgICAgICRFQ0hPICIqKiogQnV0IGFzIHlvdSB0cnkgdG8gYnVpbGQgYSBtb2R1bGUgbGlicmFyeSwgbGlidG9vbCB3aWxsIHN0aWxsIGNyZWF0ZSAiCisJICAgICAgJEVDSE8gIioqKiBhIHN0YXRpYyBtb2R1bGUsIHRoYXQgc2hvdWxkIHdvcmsgYXMgbG9uZyBhcyB0aGUgZGxvcGVuaW5nIGFwcGxpY2F0aW9uIgorCSAgICAgICRFQ0hPICIqKiogaXMgbGlua2VkIHdpdGggdGhlIC1kbG9wZW4gZmxhZyB0byByZXNvbHZlIHN5bWJvbHMgYXQgcnVudGltZS4iCisJICAgICAgaWYgdGVzdCAteiAiJGdsb2JhbF9zeW1ib2xfcGlwZSI7IHRoZW4KKwkJJEVDSE8KKwkJJEVDSE8gIioqKiBIb3dldmVyLCB0aGlzIHdvdWxkIG9ubHkgd29yayBpZiBsaWJ0b29sIHdhcyBhYmxlIHRvIGV4dHJhY3Qgc3ltYm9sIgorCQkkRUNITyAiKioqIGxpc3RzIGZyb20gYSBwcm9ncmFtLCB1c2luZyBcYG5tJyBvciBlcXVpdmFsZW50LCBidXQgbGlidG9vbCBjb3VsZCIKKwkJJEVDSE8gIioqKiBub3QgZmluZCBzdWNoIGEgcHJvZ3JhbS4gIFNvLCB0aGlzIG1vZHVsZSBpcyBwcm9iYWJseSB1c2VsZXNzLiIKKwkJJEVDSE8gIioqKiBcYG5tJyBmcm9tIEdOVSBiaW51dGlscyBhbmQgYSBmdWxsIHJlYnVpbGQgbWF5IGhlbHAuIgorCSAgICAgIGZpCisJICAgICAgaWYgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiA9IG5vOyB0aGVuCisJCWJ1aWxkX2xpYnRvb2xfbGlicz1tb2R1bGUKKwkJYnVpbGRfb2xkX2xpYnM9eWVzCisJICAgICAgZWxzZQorCQlidWlsZF9saWJ0b29sX2xpYnM9bm8KKwkgICAgICBmaQorCSAgICBmaQorCSAgZWxzZQorCSAgICBkZXBsaWJzPSIkZGlyLyRvbGRfbGlicmFyeSAkZGVwbGlicyIKKwkgICAgbGlua19zdGF0aWM9eWVzCisJICBmaQorCWZpICMgbGluayBzaGFyZWQvc3RhdGljIGxpYnJhcnk/CisKKwlpZiB0ZXN0ICIkbGlua21vZGUiID0gbGliOyB0aGVuCisJICBpZiB0ZXN0IC1uICIkZGVwZW5kZW5jeV9saWJzIiAmJgorCSAgICAgeyB0ZXN0ICIkaGFyZGNvZGVfaW50b19saWJzIiAhPSB5ZXMgfHwKKwkgICAgICAgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiA9IHllcyB8fAorCSAgICAgICB0ZXN0ICIkbGlua19zdGF0aWMiID0geWVzOyB9OyB0aGVuCisJICAgICMgRXh0cmFjdCAtUiBmcm9tIGRlcGVuZGVuY3lfbGlicworCSAgICB0ZW1wX2RlcGxpYnM9CisJICAgIGZvciBsaWJkaXIgaW4gJGRlcGVuZGVuY3lfbGliczsgZG8KKwkgICAgICBjYXNlICRsaWJkaXIgaW4KKwkgICAgICAtUiopIGZ1bmNfc3RyaXBuYW1lICctUicgJycgIiRsaWJkaXIiCisJICAgICAgICAgICB0ZW1wX3hycGF0aD0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJCSAgIGNhc2UgIiAkeHJwYXRoICIgaW4KKwkJICAgKiIgJHRlbXBfeHJwYXRoICIqKSA7OworCQkgICAqKSB4cnBhdGg9IiR4cnBhdGggJHRlbXBfeHJwYXRoIjs7CisJCSAgIGVzYWM7OworCSAgICAgICopIHRlbXBfZGVwbGlicz0iJHRlbXBfZGVwbGlicyAkbGliZGlyIjs7CisJICAgICAgZXNhYworCSAgICBkb25lCisJICAgIGRlcGVuZGVuY3lfbGlicz0iJHRlbXBfZGVwbGlicyIKKwkgIGZpCisKKwkgIG5ld2xpYl9zZWFyY2hfcGF0aD0iJG5ld2xpYl9zZWFyY2hfcGF0aCAkYWJzZGlyIgorCSAgIyBMaW5rIGFnYWluc3QgdGhpcyBsaWJyYXJ5CisJICB0ZXN0ICIkbGlua19zdGF0aWMiID0gbm8gJiYgbmV3ZGVwZW5kZW5jeV9saWJzPSIkYWJzX2xhZGlyLyRsYW5hbWUgJG5ld2RlcGVuZGVuY3lfbGlicyIKKwkgICMgLi4uIGFuZCBpdHMgZGVwZW5kZW5jeV9saWJzCisJICB0bXBfbGlicz0KKwkgIGZvciBkZXBsaWIgaW4gJGRlcGVuZGVuY3lfbGliczsgZG8KKwkgICAgbmV3ZGVwZW5kZW5jeV9saWJzPSIkZGVwbGliICRuZXdkZXBlbmRlbmN5X2xpYnMiCisJICAgIGlmICRvcHRfZHVwbGljYXRlX2RlcHMgOyB0aGVuCisJICAgICAgY2FzZSAiJHRtcF9saWJzICIgaW4KKwkgICAgICAqIiAkZGVwbGliICIqKSBzcGVjaWFsZGVwbGlicz0iJHNwZWNpYWxkZXBsaWJzICRkZXBsaWIiIDs7CisJICAgICAgZXNhYworCSAgICBmaQorCSAgICB0bXBfbGlicz0iJHRtcF9saWJzICRkZXBsaWIiCisJICBkb25lCisKKwkgIGlmIHRlc3QgIiRsaW5rX2FsbF9kZXBsaWJzIiAhPSBubzsgdGhlbgorCSAgICAjIEFkZCB0aGUgc2VhcmNoIHBhdGhzIG9mIGFsbCBkZXBlbmRlbmN5IGxpYnJhcmllcworCSAgICBmb3IgZGVwbGliIGluICRkZXBlbmRlbmN5X2xpYnM7IGRvCisJICAgICAgcGF0aD0KKwkgICAgICBjYXNlICRkZXBsaWIgaW4KKwkgICAgICAtTCopIHBhdGg9IiRkZXBsaWIiIDs7CisJICAgICAgKi5sYSkKKwkgICAgICAgIGZ1bmNfZGlybmFtZSAiJGRlcGxpYiIgIiIgIi4iCisJCWRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQiCisJCSMgV2UgbmVlZCBhbiBhYnNvbHV0ZSBwYXRoLgorCQljYXNlICRkaXIgaW4KKwkJW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSBhYnNkaXI9IiRkaXIiIDs7CisJCSopCisJCSAgYWJzZGlyPWBjZCAiJGRpciIgJiYgcHdkYAorCQkgIGlmIHRlc3QgLXogIiRhYnNkaXIiOyB0aGVuCisJCSAgICBmdW5jX3dhcm5pbmcgImNhbm5vdCBkZXRlcm1pbmUgYWJzb2x1dGUgZGlyZWN0b3J5IG5hbWUgb2YgXGAkZGlyJyIKKwkJICAgIGFic2Rpcj0iJGRpciIKKwkJICBmaQorCQkgIDs7CisJCWVzYWMKKwkJaWYgJEdSRVAgIl5pbnN0YWxsZWQ9bm8iICRkZXBsaWIgPiAvZGV2L251bGw7IHRoZW4KKwkJY2FzZSAkaG9zdCBpbgorCQkqLSotZGFyd2luKikKKwkJICBkZXBkZXBsPQorCQkgIGV2YWwgZGVwbGlicmFyeV9uYW1lcz1gJHtTRUR9IC1uIC1lICdzL15saWJyYXJ5X25hbWVzPVwoLipcKSQvXDEvcCcgJGRlcGxpYmAKKwkJICBpZiB0ZXN0IC1uICIkZGVwbGlicmFyeV9uYW1lcyIgOyB0aGVuCisJCSAgICBmb3IgdG1wIGluICRkZXBsaWJyYXJ5X25hbWVzIDsgZG8KKwkJICAgICAgZGVwZGVwbD0kdG1wCisJCSAgICBkb25lCisJCSAgICBpZiB0ZXN0IC1mICIkYWJzZGlyLyRvYmpkaXIvJGRlcGRlcGwiIDsgdGhlbgorCQkgICAgICBkZXBkZXBsPSIkYWJzZGlyLyRvYmpkaXIvJGRlcGRlcGwiCisJCSAgICAgIGRhcndpbl9pbnN0YWxsX25hbWU9YCR7T1RPT0x9IC1MICRkZXBkZXBsIHwgYXdrICd7aWYgKE5SID09IDIpIHtwcmludCAkMTtleGl0fX0nYAorICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRkYXJ3aW5faW5zdGFsbF9uYW1lIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICBkYXJ3aW5faW5zdGFsbF9uYW1lPWAke09UT09MNjR9IC1MICRkZXBkZXBsICB8IGF3ayAne2lmIChOUiA9PSAyKSB7cHJpbnQgJDE7ZXhpdH19J2AKKyAgICAgICAgICAgICAgICAgICAgICBmaQorCQkgICAgICBjb21waWxlcl9mbGFncz0iJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWR5bGliX2ZpbGUgJHt3bH0ke2Rhcndpbl9pbnN0YWxsX25hbWV9OiR7ZGVwZGVwbH0iCisJCSAgICAgIGxpbmtlcl9mbGFncz0iJGxpbmtlcl9mbGFncyAtZHlsaWJfZmlsZSAke2Rhcndpbl9pbnN0YWxsX25hbWV9OiR7ZGVwZGVwbH0iCisJCSAgICAgIHBhdGg9CisJCSAgICBmaQorCQkgIGZpCisJCSAgOzsKKwkJKikKKwkJICBwYXRoPSItTCRhYnNkaXIvJG9iamRpciIKKwkJICA7OworCQllc2FjCisJCWVsc2UKKwkJICBldmFsIGxpYmRpcj1gJHtTRUR9IC1uIC1lICdzL15saWJkaXI9XCguKlwpJC9cMS9wJyAkZGVwbGliYAorCQkgIHRlc3QgLXogIiRsaWJkaXIiICYmIFwKKwkJICAgIGZ1bmNfZmF0YWxfZXJyb3IgIlxgJGRlcGxpYicgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIgorCQkgIHRlc3QgIiRhYnNkaXIiICE9ICIkbGliZGlyIiAmJiBcCisJCSAgICBmdW5jX3dhcm5pbmcgIlxgJGRlcGxpYicgc2VlbXMgdG8gYmUgbW92ZWQiCisKKwkJICBwYXRoPSItTCRhYnNkaXIiCisJCWZpCisJCTs7CisJICAgICAgZXNhYworCSAgICAgIGNhc2UgIiAkZGVwbGlicyAiIGluCisJICAgICAgKiIgJHBhdGggIiopIDs7CisJICAgICAgKikgZGVwbGlicz0iJHBhdGggJGRlcGxpYnMiIDs7CisJICAgICAgZXNhYworCSAgICBkb25lCisJICBmaSAjIGxpbmtfYWxsX2RlcGxpYnMgIT0gbm8KKwlmaSAjIGxpbmttb2RlID0gbGliCisgICAgICBkb25lICMgZm9yIGRlcGxpYiBpbiAkbGlicworICAgICAgaWYgdGVzdCAiJHBhc3MiID0gbGluazsgdGhlbgorCWlmIHRlc3QgIiRsaW5rbW9kZSIgPSAicHJvZyI7IHRoZW4KKwkgIGNvbXBpbGVfZGVwbGlicz0iJG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICRjb21waWxlX2RlcGxpYnMiCisJICBmaW5hbGl6ZV9kZXBsaWJzPSIkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgJGZpbmFsaXplX2RlcGxpYnMiCisJZWxzZQorCSAgY29tcGlsZXJfZmxhZ3M9IiRjb21waWxlcl9mbGFncyAiYCRFQ0hPICJYICRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyIgfCAkWHNlZCAtZSAncyUgXChbXiAkXSpcKS5sdGZyYW1ld29yayUgLWZyYW1ld29yayBcMSVnJ2AKKwlmaQorICAgICAgZmkKKyAgICAgIGRlcGVuZGVuY3lfbGlicz0iJG5ld2RlcGVuZGVuY3lfbGlicyIKKyAgICAgIGlmIHRlc3QgIiRwYXNzIiA9IGRscHJlb3BlbjsgdGhlbgorCSMgTGluayB0aGUgZGxwcmVvcGVuZWQgbGlicmFyaWVzIGJlZm9yZSBvdGhlciBsaWJyYXJpZXMKKwlmb3IgZGVwbGliIGluICRzYXZlX2RlcGxpYnM7IGRvCisJICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgorCWRvbmUKKyAgICAgIGZpCisgICAgICBpZiB0ZXN0ICIkcGFzcyIgIT0gZGxvcGVuOyB0aGVuCisJaWYgdGVzdCAiJHBhc3MiICE9IGNvbnY7IHRoZW4KKwkgICMgTWFrZSBzdXJlIGxpYl9zZWFyY2hfcGF0aCBjb250YWlucyBvbmx5IHVuaXF1ZSBkaXJlY3Rvcmllcy4KKwkgIGxpYl9zZWFyY2hfcGF0aD0KKwkgIGZvciBkaXIgaW4gJG5ld2xpYl9zZWFyY2hfcGF0aDsgZG8KKwkgICAgY2FzZSAiJGxpYl9zZWFyY2hfcGF0aCAiIGluCisJICAgICoiICRkaXIgIiopIDs7CisJICAgICopIGxpYl9zZWFyY2hfcGF0aD0iJGxpYl9zZWFyY2hfcGF0aCAkZGlyIiA7OworCSAgICBlc2FjCisJICBkb25lCisJICBuZXdsaWJfc2VhcmNoX3BhdGg9CisJZmkKKworCWlmIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgIT0gInByb2csbGluayI7IHRoZW4KKwkgIHZhcnM9ImRlcGxpYnMiCisJZWxzZQorCSAgdmFycz0iY29tcGlsZV9kZXBsaWJzIGZpbmFsaXplX2RlcGxpYnMiCisJZmkKKwlmb3IgdmFyIGluICR2YXJzIGRlcGVuZGVuY3lfbGliczsgZG8KKwkgICMgQWRkIGxpYnJhcmllcyB0byAkdmFyIGluIHJldmVyc2Ugb3JkZXIKKwkgIGV2YWwgdG1wX2xpYnM9XCJcJCR2YXJcIgorCSAgbmV3X2xpYnM9CisJICBmb3IgZGVwbGliIGluICR0bXBfbGliczsgZG8KKwkgICAgIyBGSVhNRTogUGVkYW50aWNhbGx5LCB0aGlzIGlzIHRoZSByaWdodCB0aGluZyB0byBkbywgc28KKwkgICAgIyAgICAgICAgdGhhdCBzb21lIG5hc3R5IGRlcGVuZGVuY3kgbG9vcCBpc24ndCBhY2NpZGVudGFsbHkKKwkgICAgIyAgICAgICAgYnJva2VuOgorCSAgICAjbmV3X2xpYnM9IiRkZXBsaWIgJG5ld19saWJzIgorCSAgICAjIFByYWdtYXRpY2FsbHksIHRoaXMgc2VlbXMgdG8gY2F1c2UgdmVyeSBmZXcgcHJvYmxlbXMgaW4KKwkgICAgIyBwcmFjdGljZToKKwkgICAgY2FzZSAkZGVwbGliIGluCisJICAgIC1MKikgbmV3X2xpYnM9IiRkZXBsaWIgJG5ld19saWJzIiA7OworCSAgICAtUiopIDs7CisJICAgICopCisJICAgICAgIyBBbmQgaGVyZSBpcyB0aGUgcmVhc29uOiB3aGVuIGEgbGlicmFyeSBhcHBlYXJzIG1vcmUKKwkgICAgICAjIHRoYW4gb25jZSBhcyBhbiBleHBsaWNpdCBkZXBlbmRlbmNlIG9mIGEgbGlicmFyeSwgb3IKKwkgICAgICAjIGlzIGltcGxpY2l0bHkgbGlua2VkIGluIG1vcmUgdGhhbiBvbmNlIGJ5IHRoZQorCSAgICAgICMgY29tcGlsZXIsIGl0IGlzIGNvbnNpZGVyZWQgc3BlY2lhbCwgYW5kIG11bHRpcGxlCisJICAgICAgIyBvY2N1cnJlbmNlcyB0aGVyZW9mIGFyZSBub3QgcmVtb3ZlZC4gIENvbXBhcmUgdGhpcworCSAgICAgICMgd2l0aCBoYXZpbmcgdGhlIHNhbWUgbGlicmFyeSBiZWluZyBsaXN0ZWQgYXMgYQorCSAgICAgICMgZGVwZW5kZW5jeSBvZiBtdWx0aXBsZSBvdGhlciBsaWJyYXJpZXM6IGluIHRoaXMgY2FzZSwKKwkgICAgICAjIHdlIGtub3cgKHBlZGFudGljYWxseSwgd2UgYXNzdW1lKSB0aGUgbGlicmFyeSBkb2VzIG5vdAorCSAgICAgICMgbmVlZCB0byBiZSBsaXN0ZWQgbW9yZSB0aGFuIG9uY2UsIHNvIHdlIGtlZXAgb25seSB0aGUKKwkgICAgICAjIGxhc3QgY29weS4gIFRoaXMgaXMgbm90IGFsd2F5cyByaWdodCwgYnV0IGl0IGlzIHJhcmUKKwkgICAgICAjIGVub3VnaCB0aGF0IHdlIHJlcXVpcmUgdXNlcnMgdGhhdCByZWFsbHkgbWVhbiB0byBwbGF5CisJICAgICAgIyBzdWNoIHVucG9ydGFibGUgbGlua2luZyB0cmlja3MgdG8gbGluayB0aGUgbGlicmFyeQorCSAgICAgICMgdXNpbmcgLVdsLC1sbmFtZSwgc28gdGhhdCBsaWJ0b29sIGRvZXMgbm90IGNvbnNpZGVyIGl0CisJICAgICAgIyBmb3IgZHVwbGljYXRlIHJlbW92YWwuCisJICAgICAgY2FzZSAiICRzcGVjaWFsZGVwbGlicyAiIGluCisJICAgICAgKiIgJGRlcGxpYiAiKikgbmV3X2xpYnM9IiRkZXBsaWIgJG5ld19saWJzIiA7OworCSAgICAgICopCisJCWNhc2UgIiAkbmV3X2xpYnMgIiBpbgorCQkqIiAkZGVwbGliICIqKSA7OworCQkqKSBuZXdfbGlicz0iJGRlcGxpYiAkbmV3X2xpYnMiIDs7CisJCWVzYWMKKwkJOzsKKwkgICAgICBlc2FjCisJICAgICAgOzsKKwkgICAgZXNhYworCSAgZG9uZQorCSAgdG1wX2xpYnM9CisJICBmb3IgZGVwbGliIGluICRuZXdfbGliczsgZG8KKwkgICAgY2FzZSAkZGVwbGliIGluCisJICAgIC1MKikKKwkgICAgICBjYXNlICIgJHRtcF9saWJzICIgaW4KKwkgICAgICAqIiAkZGVwbGliICIqKSA7OworCSAgICAgICopIHRtcF9saWJzPSIkdG1wX2xpYnMgJGRlcGxpYiIgOzsKKwkgICAgICBlc2FjCisJICAgICAgOzsKKwkgICAgKikgdG1wX2xpYnM9IiR0bXBfbGlicyAkZGVwbGliIiA7OworCSAgICBlc2FjCisJICBkb25lCisJICBldmFsICR2YXI9XCIkdG1wX2xpYnNcIgorCWRvbmUgIyBmb3IgdmFyCisgICAgICBmaQorICAgICAgIyBMYXN0IHN0ZXA6IHJlbW92ZSBydW50aW1lIGxpYnMgZnJvbSBkZXBlbmRlbmN5X2xpYnMKKyAgICAgICMgKHRoZXkgc3RheSBpbiBkZXBsaWJzKQorICAgICAgdG1wX2xpYnM9CisgICAgICBmb3IgaSBpbiAkZGVwZW5kZW5jeV9saWJzIDsgZG8KKwljYXNlICIgJHByZWRlcHMgJHBvc3RkZXBzICRjb21waWxlcl9saWJfc2VhcmNoX3BhdGggIiBpbgorCSoiICRpICIqKQorCSAgaT0iIgorCSAgOzsKKwllc2FjCisJaWYgdGVzdCAtbiAiJGkiIDsgdGhlbgorCSAgdG1wX2xpYnM9IiR0bXBfbGlicyAkaSIKKwlmaQorICAgICAgZG9uZQorICAgICAgZGVwZW5kZW5jeV9saWJzPSR0bXBfbGlicworICAgIGRvbmUgIyBmb3IgcGFzcworICAgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nOyB0aGVuCisgICAgICBkbGZpbGVzPSIkbmV3ZGxmaWxlcyIKKyAgICBmaQorICAgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nIHx8IHRlc3QgIiRsaW5rbW9kZSIgPSBsaWI7IHRoZW4KKyAgICAgIGRscHJlZmlsZXM9IiRuZXdkbHByZWZpbGVzIgorICAgIGZpCisKKyAgICBjYXNlICRsaW5rbW9kZSBpbgorICAgIG9sZGxpYikKKyAgICAgIGlmIHRlc3QgLW4gIiRkbGZpbGVzJGRscHJlZmlsZXMiIHx8IHRlc3QgIiRkbHNlbGYiICE9IG5vOyB0aGVuCisJZnVuY193YXJuaW5nICJcYC1kbG9wZW4nIGlzIGlnbm9yZWQgZm9yIGFyY2hpdmVzIgorICAgICAgZmkKKworICAgICAgY2FzZSAiICRkZXBsaWJzIiBpbgorICAgICAgKlwgLWwqIHwgKlwgLUwqKQorCWZ1bmNfd2FybmluZyAiXGAtbCcgYW5kIFxgLUwnIGFyZSBpZ25vcmVkIGZvciBhcmNoaXZlcyIgOzsKKyAgICAgIGVzYWMKKworICAgICAgdGVzdCAtbiAiJHJwYXRoIiAmJiBcCisJZnVuY193YXJuaW5nICJcYC1ycGF0aCcgaXMgaWdub3JlZCBmb3IgYXJjaGl2ZXMiCisKKyAgICAgIHRlc3QgLW4gIiR4cnBhdGgiICYmIFwKKwlmdW5jX3dhcm5pbmcgIlxgLVInIGlzIGlnbm9yZWQgZm9yIGFyY2hpdmVzIgorCisgICAgICB0ZXN0IC1uICIkdmluZm8iICYmIFwKKwlmdW5jX3dhcm5pbmcgIlxgLXZlcnNpb24taW5mby8tdmVyc2lvbi1udW1iZXInIGlzIGlnbm9yZWQgZm9yIGFyY2hpdmVzIgorCisgICAgICB0ZXN0IC1uICIkcmVsZWFzZSIgJiYgXAorCWZ1bmNfd2FybmluZyAiXGAtcmVsZWFzZScgaXMgaWdub3JlZCBmb3IgYXJjaGl2ZXMiCisKKyAgICAgIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9scyRleHBvcnRfc3ltYm9sc19yZWdleCIgJiYgXAorCWZ1bmNfd2FybmluZyAiXGAtZXhwb3J0LXN5bWJvbHMnIGlzIGlnbm9yZWQgZm9yIGFyY2hpdmVzIgorCisgICAgICAjIE5vdyBzZXQgdGhlIHZhcmlhYmxlcyBmb3IgYnVpbGRpbmcgb2xkIGxpYnJhcmllcy4KKyAgICAgIGJ1aWxkX2xpYnRvb2xfbGlicz1ubworICAgICAgb2xkbGlicz0iJG91dHB1dCIKKyAgICAgIG9ianM9IiRvYmpzJG9sZF9kZXBsaWJzIgorICAgICAgOzsKKworICAgIGxpYikKKyAgICAgICMgTWFrZSBzdXJlIHdlIG9ubHkgZ2VuZXJhdGUgbGlicmFyaWVzIG9mIHRoZSBmb3JtIGBsaWJOQU1FLmxhJy4KKyAgICAgIGNhc2UgJG91dHB1dG5hbWUgaW4KKyAgICAgIGxpYiopCisJZnVuY19zdHJpcG5hbWUgJ2xpYicgJy5sYScgIiRvdXRwdXRuYW1lIgorCW5hbWU9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCWV2YWwgc2hhcmVkX2V4dD1cIiRzaHJleHRfY21kc1wiCisJZXZhbCBsaWJuYW1lPVwiJGxpYm5hbWVfc3BlY1wiCisJOzsKKyAgICAgICopCisJdGVzdCAiJG1vZHVsZSIgPSBubyAmJiBcCisJICBmdW5jX2ZhdGFsX2hlbHAgImxpYnRvb2wgbGlicmFyeSBcYCRvdXRwdXQnIG11c3QgYmVnaW4gd2l0aCBcYGxpYiciCisKKwlpZiB0ZXN0ICIkbmVlZF9saWJfcHJlZml4IiAhPSBubzsgdGhlbgorCSAgIyBBZGQgdGhlICJsaWIiIHByZWZpeCBmb3IgbW9kdWxlcyBpZiByZXF1aXJlZAorCSAgZnVuY19zdHJpcG5hbWUgJycgJy5sYScgIiRvdXRwdXRuYW1lIgorCSAgbmFtZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJICBldmFsIHNoYXJlZF9leHQ9XCIkc2hyZXh0X2NtZHNcIgorCSAgZXZhbCBsaWJuYW1lPVwiJGxpYm5hbWVfc3BlY1wiCisJZWxzZQorCSAgZnVuY19zdHJpcG5hbWUgJycgJy5sYScgIiRvdXRwdXRuYW1lIgorCSAgbGlibmFtZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJZmkKKwk7OworICAgICAgZXNhYworCisgICAgICBpZiB0ZXN0IC1uICIkb2JqcyI7IHRoZW4KKwlpZiB0ZXN0ICIkZGVwbGlic19jaGVja19tZXRob2QiICE9IHBhc3NfYWxsOyB0aGVuCisJICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgYnVpbGQgbGlidG9vbCBsaWJyYXJ5IFxgJG91dHB1dCcgZnJvbSBub24tbGlidG9vbCBvYmplY3RzIG9uIHRoaXMgaG9zdDokb2JqcyIKKwllbHNlCisJICAkRUNITworCSAgJEVDSE8gIioqKiBXYXJuaW5nOiBMaW5raW5nIHRoZSBzaGFyZWQgbGlicmFyeSAkb3V0cHV0IGFnYWluc3QgdGhlIG5vbi1saWJ0b29sIgorCSAgJEVDSE8gIioqKiBvYmplY3RzICRvYmpzIGlzIG5vdCBwb3J0YWJsZSEiCisJICBsaWJvYmpzPSIkbGlib2JqcyAkb2JqcyIKKwlmaQorICAgICAgZmkKKworICAgICAgdGVzdCAiJGRsc2VsZiIgIT0gbm8gJiYgXAorCWZ1bmNfd2FybmluZyAiXGAtZGxvcGVuIHNlbGYnIGlzIGlnbm9yZWQgZm9yIGxpYnRvb2wgbGlicmFyaWVzIgorCisgICAgICBzZXQgZHVtbXkgJHJwYXRoCisgICAgICBzaGlmdAorICAgICAgdGVzdCAiJCMiIC1ndCAxICYmIFwKKwlmdW5jX3dhcm5pbmcgImlnbm9yaW5nIG11bHRpcGxlIFxgLXJwYXRoJ3MgZm9yIGEgbGlidG9vbCBsaWJyYXJ5IgorCisgICAgICBpbnN0YWxsX2xpYmRpcj0iJDEiCisKKyAgICAgIG9sZGxpYnM9CisgICAgICBpZiB0ZXN0IC16ICIkcnBhdGgiOyB0aGVuCisJaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSB5ZXM7IHRoZW4KKwkgICMgQnVpbGRpbmcgYSBsaWJ0b29sIGNvbnZlbmllbmNlIGxpYnJhcnkuCisJICAjIFNvbWUgY29tcGlsZXJzIGhhdmUgcHJvYmxlbXMgd2l0aCBhIGAuYWwnIGV4dGVuc2lvbiBzbworCSAgIyBjb252ZW5pZW5jZSBsaWJyYXJpZXMgc2hvdWxkIGhhdmUgdGhlIHNhbWUgZXh0ZW5zaW9uIGFuCisJICAjIGFyY2hpdmUgbm9ybWFsbHkgd291bGQuCisJICBvbGRsaWJzPSIkb3V0cHV0X29iamRpci8kbGlibmFtZS4kbGliZXh0ICRvbGRsaWJzIgorCSAgYnVpbGRfbGlidG9vbF9saWJzPWNvbnZlbmllbmNlCisJICBidWlsZF9vbGRfbGlicz15ZXMKKwlmaQorCisJdGVzdCAtbiAiJHZpbmZvIiAmJiBcCisJICBmdW5jX3dhcm5pbmcgIlxgLXZlcnNpb24taW5mby8tdmVyc2lvbi1udW1iZXInIGlzIGlnbm9yZWQgZm9yIGNvbnZlbmllbmNlIGxpYnJhcmllcyIKKworCXRlc3QgLW4gIiRyZWxlYXNlIiAmJiBcCisJICBmdW5jX3dhcm5pbmcgIlxgLXJlbGVhc2UnIGlzIGlnbm9yZWQgZm9yIGNvbnZlbmllbmNlIGxpYnJhcmllcyIKKyAgICAgIGVsc2UKKworCSMgUGFyc2UgdGhlIHZlcnNpb24gaW5mb3JtYXRpb24gYXJndW1lbnQuCisJc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JzonCisJc2V0IGR1bW15ICR2aW5mbyAwIDAgMAorCXNoaWZ0CisJSUZTPSIkc2F2ZV9pZnMiCisKKwl0ZXN0IC1uICIkNyIgJiYgXAorCSAgZnVuY19mYXRhbF9oZWxwICJ0b28gbWFueSBwYXJhbWV0ZXJzIHRvIFxgLXZlcnNpb24taW5mbyciCisKKwkjIGNvbnZlcnQgYWJzb2x1dGUgdmVyc2lvbiBudW1iZXJzIHRvIGxpYnRvb2wgYWdlcworCSMgdGhpcyByZXRhaW5zIGNvbXBhdGliaWxpdHkgd2l0aCAubGEgZmlsZXMgYW5kIGF0dGVtcHRzCisJIyB0byBtYWtlIHRoZSBjb2RlIGJlbG93IGEgYml0IG1vcmUgY29tcHJlaGVuc2libGUKKworCWNhc2UgJHZpbmZvX251bWJlciBpbgorCXllcykKKwkgIG51bWJlcl9tYWpvcj0iJDEiCisJICBudW1iZXJfbWlub3I9IiQyIgorCSAgbnVtYmVyX3JldmlzaW9uPSIkMyIKKwkgICMKKwkgICMgVGhlcmUgYXJlIHJlYWxseSBvbmx5IHR3byBraW5kcyAtLSB0aG9zZSB0aGF0CisJICAjIHVzZSB0aGUgY3VycmVudCByZXZpc2lvbiBhcyB0aGUgbWFqb3IgdmVyc2lvbgorCSAgIyBhbmQgdGhvc2UgdGhhdCBzdWJ0cmFjdCBhZ2UgYW5kIHVzZSBhZ2UgYXMKKwkgICMgYSBtaW5vciB2ZXJzaW9uLiAgQnV0LCB0aGVuIHRoZXJlIGlzIGlyaXgKKwkgICMgd2hpY2ggaGFzIGFuIGV4dHJhIDEgYWRkZWQganVzdCBmb3IgZnVuCisJICAjCisJICBjYXNlICR2ZXJzaW9uX3R5cGUgaW4KKwkgIGRhcndpbnxsaW51eHxvc2Z8d2luZG93c3xub25lKQorCSAgICBmdW5jX2FyaXRoICRudW1iZXJfbWFqb3IgKyAkbnVtYmVyX21pbm9yCisJICAgIGN1cnJlbnQ9JGZ1bmNfYXJpdGhfcmVzdWx0CisJICAgIGFnZT0iJG51bWJlcl9taW5vciIKKwkgICAgcmV2aXNpb249IiRudW1iZXJfcmV2aXNpb24iCisJICAgIDs7CisJICBmcmVlYnNkLWFvdXR8ZnJlZWJzZC1lbGZ8c3Vub3MpCisJICAgIGN1cnJlbnQ9IiRudW1iZXJfbWFqb3IiCisJICAgIHJldmlzaW9uPSIkbnVtYmVyX21pbm9yIgorCSAgICBhZ2U9IjAiCisJICAgIDs7CisJICBpcml4fG5vbnN0b3B1eCkKKwkgICAgZnVuY19hcml0aCAkbnVtYmVyX21ham9yICsgJG51bWJlcl9taW5vcgorCSAgICBjdXJyZW50PSRmdW5jX2FyaXRoX3Jlc3VsdAorCSAgICBhZ2U9IiRudW1iZXJfbWlub3IiCisJICAgIHJldmlzaW9uPSIkbnVtYmVyX21pbm9yIgorCSAgICBsdF9pcml4X2luY3JlbWVudD1ubworCSAgICA7OworCSAgKikKKwkgICAgZnVuY19mYXRhbF9jb25maWd1cmF0aW9uICIkbW9kZW5hbWU6IHVua25vd24gbGlicmFyeSB2ZXJzaW9uIHR5cGUgXGAkdmVyc2lvbl90eXBlJyIKKwkgICAgOzsKKwkgIGVzYWMKKwkgIDs7CisJbm8pCisJICBjdXJyZW50PSIkMSIKKwkgIHJldmlzaW9uPSIkMiIKKwkgIGFnZT0iJDMiCisJICA7OworCWVzYWMKKworCSMgQ2hlY2sgdGhhdCBlYWNoIG9mIHRoZSB0aGluZ3MgYXJlIHZhbGlkIG51bWJlcnMuCisJY2FzZSAkY3VycmVudCBpbgorCTB8WzEtOV18WzEtOV1bMC05XXxbMS05XVswLTldWzAtOV18WzEtOV1bMC05XVswLTldWzAtOV18WzEtOV1bMC05XVswLTldWzAtOV1bMC05XSkgOzsKKwkqKQorCSAgZnVuY19lcnJvciAiQ1VSUkVOVCBcYCRjdXJyZW50JyBtdXN0IGJlIGEgbm9ubmVnYXRpdmUgaW50ZWdlciIKKwkgIGZ1bmNfZmF0YWxfZXJyb3IgIlxgJHZpbmZvJyBpcyBub3QgdmFsaWQgdmVyc2lvbiBpbmZvcm1hdGlvbiIKKwkgIDs7CisJZXNhYworCisJY2FzZSAkcmV2aXNpb24gaW4KKwkwfFsxLTldfFsxLTldWzAtOV18WzEtOV1bMC05XVswLTldfFsxLTldWzAtOV1bMC05XVswLTldfFsxLTldWzAtOV1bMC05XVswLTldWzAtOV0pIDs7CisJKikKKwkgIGZ1bmNfZXJyb3IgIlJFVklTSU9OIFxgJHJldmlzaW9uJyBtdXN0IGJlIGEgbm9ubmVnYXRpdmUgaW50ZWdlciIKKwkgIGZ1bmNfZmF0YWxfZXJyb3IgIlxgJHZpbmZvJyBpcyBub3QgdmFsaWQgdmVyc2lvbiBpbmZvcm1hdGlvbiIKKwkgIDs7CisJZXNhYworCisJY2FzZSAkYWdlIGluCisJMHxbMS05XXxbMS05XVswLTldfFsxLTldWzAtOV1bMC05XXxbMS05XVswLTldWzAtOV1bMC05XXxbMS05XVswLTldWzAtOV1bMC05XVswLTldKSA7OworCSopCisJICBmdW5jX2Vycm9yICJBR0UgXGAkYWdlJyBtdXN0IGJlIGEgbm9ubmVnYXRpdmUgaW50ZWdlciIKKwkgIGZ1bmNfZmF0YWxfZXJyb3IgIlxgJHZpbmZvJyBpcyBub3QgdmFsaWQgdmVyc2lvbiBpbmZvcm1hdGlvbiIKKwkgIDs7CisJZXNhYworCisJaWYgdGVzdCAiJGFnZSIgLWd0ICIkY3VycmVudCI7IHRoZW4KKwkgIGZ1bmNfZXJyb3IgIkFHRSBcYCRhZ2UnIGlzIGdyZWF0ZXIgdGhhbiB0aGUgY3VycmVudCBpbnRlcmZhY2UgbnVtYmVyIFxgJGN1cnJlbnQnIgorCSAgZnVuY19mYXRhbF9lcnJvciAiXGAkdmluZm8nIGlzIG5vdCB2YWxpZCB2ZXJzaW9uIGluZm9ybWF0aW9uIgorCWZpCisKKwkjIENhbGN1bGF0ZSB0aGUgdmVyc2lvbiB2YXJpYWJsZXMuCisJbWFqb3I9CisJdmVyc3VmZml4PQorCXZlcnN0cmluZz0KKwljYXNlICR2ZXJzaW9uX3R5cGUgaW4KKwlub25lKSA7OworCisJZGFyd2luKQorCSAgIyBMaWtlIExpbnV4LCBidXQgd2l0aCB0aGUgY3VycmVudCB2ZXJzaW9uIGF2YWlsYWJsZSBpbgorCSAgIyB2ZXJzdHJpbmcgZm9yIGNvZGluZyBpdCBpbnRvIHRoZSBsaWJyYXJ5IGhlYWRlcgorCSAgZnVuY19hcml0aCAkY3VycmVudCAtICRhZ2UKKwkgIG1ham9yPS4kZnVuY19hcml0aF9yZXN1bHQKKwkgIHZlcnN1ZmZpeD0iJG1ham9yLiRhZ2UuJHJldmlzaW9uIgorCSAgIyBEYXJ3aW4gbGQgZG9lc24ndCBsaWtlIDAgZm9yIHRoZXNlIG9wdGlvbnMuLi4KKwkgIGZ1bmNfYXJpdGggJGN1cnJlbnQgKyAxCisJICBtaW5vcl9jdXJyZW50PSRmdW5jX2FyaXRoX3Jlc3VsdAorCSAgeGxjdmVyc3RyaW5nPSIke3dsfS1jb21wYXRpYmlsaXR5X3ZlcnNpb24gJHt3bH0kbWlub3JfY3VycmVudCAke3dsfS1jdXJyZW50X3ZlcnNpb24gJHt3bH0kbWlub3JfY3VycmVudC4kcmV2aXNpb24iCisJICB2ZXJzdHJpbmc9Ii1jb21wYXRpYmlsaXR5X3ZlcnNpb24gJG1pbm9yX2N1cnJlbnQgLWN1cnJlbnRfdmVyc2lvbiAkbWlub3JfY3VycmVudC4kcmV2aXNpb24iCisJICA7OworCisJZnJlZWJzZC1hb3V0KQorCSAgbWFqb3I9Ii4kY3VycmVudCIKKwkgIHZlcnN1ZmZpeD0iLiRjdXJyZW50LiRyZXZpc2lvbiI7CisJICA7OworCisJZnJlZWJzZC1lbGYpCisJICBtYWpvcj0iLiRjdXJyZW50IgorCSAgdmVyc3VmZml4PSIuJGN1cnJlbnQiCisJICA7OworCisJaXJpeCB8IG5vbnN0b3B1eCkKKwkgIGlmIHRlc3QgIlgkbHRfaXJpeF9pbmNyZW1lbnQiID0gIlhubyI7IHRoZW4KKwkgICAgZnVuY19hcml0aCAkY3VycmVudCAtICRhZ2UKKwkgIGVsc2UKKwkgICAgZnVuY19hcml0aCAkY3VycmVudCAtICRhZ2UgKyAxCisJICBmaQorCSAgbWFqb3I9JGZ1bmNfYXJpdGhfcmVzdWx0CisKKwkgIGNhc2UgJHZlcnNpb25fdHlwZSBpbgorCSAgICBub25zdG9wdXgpIHZlcnN0cmluZ19wcmVmaXg9bm9uc3RvcHV4IDs7CisJICAgICopICAgICAgICAgdmVyc3RyaW5nX3ByZWZpeD1zZ2kgOzsKKwkgIGVzYWMKKwkgIHZlcnN0cmluZz0iJHZlcnN0cmluZ19wcmVmaXgkbWFqb3IuJHJldmlzaW9uIgorCisJICAjIEFkZCBpbiBhbGwgdGhlIGludGVyZmFjZXMgdGhhdCB3ZSBhcmUgY29tcGF0aWJsZSB3aXRoLgorCSAgbG9vcD0kcmV2aXNpb24KKwkgIHdoaWxlIHRlc3QgIiRsb29wIiAtbmUgMDsgZG8KKwkgICAgZnVuY19hcml0aCAkcmV2aXNpb24gLSAkbG9vcAorCSAgICBpZmFjZT0kZnVuY19hcml0aF9yZXN1bHQKKwkgICAgZnVuY19hcml0aCAkbG9vcCAtIDEKKwkgICAgbG9vcD0kZnVuY19hcml0aF9yZXN1bHQKKwkgICAgdmVyc3RyaW5nPSIkdmVyc3RyaW5nX3ByZWZpeCRtYWpvci4kaWZhY2U6JHZlcnN0cmluZyIKKwkgIGRvbmUKKworCSAgIyBCZWZvcmUgdGhpcyBwb2ludCwgJG1ham9yIG11c3Qgbm90IGNvbnRhaW4gYC4nLgorCSAgbWFqb3I9LiRtYWpvcgorCSAgdmVyc3VmZml4PSIkbWFqb3IuJHJldmlzaW9uIgorCSAgOzsKKworCWxpbnV4KQorCSAgZnVuY19hcml0aCAkY3VycmVudCAtICRhZ2UKKwkgIG1ham9yPS4kZnVuY19hcml0aF9yZXN1bHQKKwkgIHZlcnN1ZmZpeD0iJG1ham9yLiRhZ2UuJHJldmlzaW9uIgorCSAgOzsKKworCW9zZikKKwkgIGZ1bmNfYXJpdGggJGN1cnJlbnQgLSAkYWdlCisJICBtYWpvcj0uJGZ1bmNfYXJpdGhfcmVzdWx0CisJICB2ZXJzdWZmaXg9Ii4kY3VycmVudC4kYWdlLiRyZXZpc2lvbiIKKwkgIHZlcnN0cmluZz0iJGN1cnJlbnQuJGFnZS4kcmV2aXNpb24iCisKKwkgICMgQWRkIGluIGFsbCB0aGUgaW50ZXJmYWNlcyB0aGF0IHdlIGFyZSBjb21wYXRpYmxlIHdpdGguCisJICBsb29wPSRhZ2UKKwkgIHdoaWxlIHRlc3QgIiRsb29wIiAtbmUgMDsgZG8KKwkgICAgZnVuY19hcml0aCAkY3VycmVudCAtICRsb29wCisJICAgIGlmYWNlPSRmdW5jX2FyaXRoX3Jlc3VsdAorCSAgICBmdW5jX2FyaXRoICRsb29wIC0gMQorCSAgICBsb29wPSRmdW5jX2FyaXRoX3Jlc3VsdAorCSAgICB2ZXJzdHJpbmc9IiR2ZXJzdHJpbmc6JHtpZmFjZX0uMCIKKwkgIGRvbmUKKworCSAgIyBNYWtlIGV4ZWN1dGFibGVzIGRlcGVuZCBvbiBvdXIgY3VycmVudCB2ZXJzaW9uLgorCSAgdmVyc3RyaW5nPSIkdmVyc3RyaW5nOiR7Y3VycmVudH0uMCIKKwkgIDs7CisKKwlxbngpCisJICBtYWpvcj0iLiRjdXJyZW50IgorCSAgdmVyc3VmZml4PSIuJGN1cnJlbnQiCisJICA7OworCisJc3Vub3MpCisJICBtYWpvcj0iLiRjdXJyZW50IgorCSAgdmVyc3VmZml4PSIuJGN1cnJlbnQuJHJldmlzaW9uIgorCSAgOzsKKworCXdpbmRvd3MpCisJICAjIFVzZSAnLScgcmF0aGVyIHRoYW4gJy4nLCBzaW5jZSB3ZSBvbmx5IHdhbnQgb25lCisJICAjIGV4dGVuc2lvbiBvbiBET1MgOC4zIGZpbGVzeXN0ZW1zLgorCSAgZnVuY19hcml0aCAkY3VycmVudCAtICRhZ2UKKwkgIG1ham9yPSRmdW5jX2FyaXRoX3Jlc3VsdAorCSAgdmVyc3VmZml4PSItJG1ham9yIgorCSAgOzsKKworCSopCisJICBmdW5jX2ZhdGFsX2NvbmZpZ3VyYXRpb24gInVua25vd24gbGlicmFyeSB2ZXJzaW9uIHR5cGUgXGAkdmVyc2lvbl90eXBlJyIKKwkgIDs7CisJZXNhYworCisJIyBDbGVhciB0aGUgdmVyc2lvbiBpbmZvIGlmIHdlIGRlZmF1bHRlZCwgYW5kIHRoZXkgc3BlY2lmaWVkIGEgcmVsZWFzZS4KKwlpZiB0ZXN0IC16ICIkdmluZm8iICYmIHRlc3QgLW4gIiRyZWxlYXNlIjsgdGhlbgorCSAgbWFqb3I9CisJICBjYXNlICR2ZXJzaW9uX3R5cGUgaW4KKwkgIGRhcndpbikKKwkgICAgIyB3ZSBjYW4ndCBjaGVjayBmb3IgIjAuMCIgaW4gYXJjaGl2ZV9jbWRzIGR1ZSB0byBxdW90aW5nCisJICAgICMgcHJvYmxlbXMsIHNvIHdlIHJlc2V0IGl0IGNvbXBsZXRlbHkKKwkgICAgdmVyc3RyaW5nPQorCSAgICA7OworCSAgKikKKwkgICAgdmVyc3RyaW5nPSIwLjAiCisJICAgIDs7CisJICBlc2FjCisJICBpZiB0ZXN0ICIkbmVlZF92ZXJzaW9uIiA9IG5vOyB0aGVuCisJICAgIHZlcnN1ZmZpeD0KKwkgIGVsc2UKKwkgICAgdmVyc3VmZml4PSIuMC4wIgorCSAgZmkKKwlmaQorCisJIyBSZW1vdmUgdmVyc2lvbiBpbmZvIGZyb20gbmFtZSBpZiB2ZXJzaW9uaW5nIHNob3VsZCBiZSBhdm9pZGVkCisJaWYgdGVzdCAiJGF2b2lkX3ZlcnNpb24iID0geWVzICYmIHRlc3QgIiRuZWVkX3ZlcnNpb24iID0gbm87IHRoZW4KKwkgIG1ham9yPQorCSAgdmVyc3VmZml4PQorCSAgdmVyc3RyaW5nPSIiCisJZmkKKworCSMgQ2hlY2sgdG8gc2VlIGlmIHRoZSBhcmNoaXZlIHdpbGwgaGF2ZSB1bmRlZmluZWQgc3ltYm9scy4KKwlpZiB0ZXN0ICIkYWxsb3dfdW5kZWZpbmVkIiA9IHllczsgdGhlbgorCSAgaWYgdGVzdCAiJGFsbG93X3VuZGVmaW5lZF9mbGFnIiA9IHVuc3VwcG9ydGVkOyB0aGVuCisJICAgIGZ1bmNfd2FybmluZyAidW5kZWZpbmVkIHN5bWJvbHMgbm90IGFsbG93ZWQgaW4gJGhvc3Qgc2hhcmVkIGxpYnJhcmllcyIKKwkgICAgYnVpbGRfbGlidG9vbF9saWJzPW5vCisJICAgIGJ1aWxkX29sZF9saWJzPXllcworCSAgZmkKKwllbHNlCisJICAjIERvbid0IGFsbG93IHVuZGVmaW5lZCBzeW1ib2xzLgorCSAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9IiRub191bmRlZmluZWRfZmxhZyIKKwlmaQorCisgICAgICBmaQorCisgICAgICBmdW5jX2dlbmVyYXRlX2Rsc3ltcyAiJGxpYm5hbWUiICIkbGlibmFtZSIgInllcyIKKyAgICAgIGxpYm9ianM9IiRsaWJvYmpzICRzeW1maWxlb2JqIgorICAgICAgdGVzdCAiWCRsaWJvYmpzIiA9ICJYICIgJiYgbGlib2Jqcz0KKworICAgICAgaWYgdGVzdCAiJG1vZGUiICE9IHJlbGluazsgdGhlbgorCSMgUmVtb3ZlIG91ciBvdXRwdXRzLCBidXQgZG9uJ3QgcmVtb3ZlIG9iamVjdCBmaWxlcyBzaW5jZSB0aGV5CisJIyBtYXkgaGF2ZSBiZWVuIGNyZWF0ZWQgd2hlbiBjb21waWxpbmcgUElDIG9iamVjdHMuCisJcmVtb3ZlbGlzdD0KKwl0ZW1wcmVtb3ZlbGlzdD1gJEVDSE8gIiRvdXRwdXRfb2JqZGlyLyoiYAorCWZvciBwIGluICR0ZW1wcmVtb3ZlbGlzdDsgZG8KKwkgIGNhc2UgJHAgaW4KKwkgICAgKi4kb2JqZXh0IHwgKi5nY25vKQorCSAgICAgICA7OworCSAgICAkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZSB8ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLiogfCAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9JHtyZWxlYXNlfS4qKQorCSAgICAgICBpZiB0ZXN0ICJYJHByZWNpb3VzX2ZpbGVzX3JlZ2V4IiAhPSAiWCI7IHRoZW4KKwkJIGlmICRFQ0hPICIkcCIgfCAkRUdSRVAgLWUgIiRwcmVjaW91c19maWxlc19yZWdleCIgPi9kZXYvbnVsbCAyPiYxCisJCSB0aGVuCisJCSAgIGNvbnRpbnVlCisJCSBmaQorCSAgICAgICBmaQorCSAgICAgICByZW1vdmVsaXN0PSIkcmVtb3ZlbGlzdCAkcCIKKwkgICAgICAgOzsKKwkgICAgKikgOzsKKwkgIGVzYWMKKwlkb25lCisJdGVzdCAtbiAiJHJlbW92ZWxpc3QiICYmIFwKKwkgIGZ1bmNfc2hvd19ldmFsICIke1JNfXIgXCRyZW1vdmVsaXN0IgorICAgICAgZmkKKworICAgICAgIyBOb3cgc2V0IHRoZSB2YXJpYWJsZXMgZm9yIGJ1aWxkaW5nIG9sZCBsaWJyYXJpZXMuCisgICAgICBpZiB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiID0geWVzICYmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiICE9IGNvbnZlbmllbmNlIDsgdGhlbgorCW9sZGxpYnM9IiRvbGRsaWJzICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLiRsaWJleHQiCisKKwkjIFRyYW5zZm9ybSAubG8gZmlsZXMgdG8gLm8gZmlsZXMuCisJb2xkb2Jqcz0iJG9ianMgImAkRUNITyAiWCRsaWJvYmpzIiB8ICRTUDJOTCB8ICRYc2VkIC1lICcvXC4nJHtsaWJleHR9JyQvZCcgLWUgIiRsbzJvIiB8ICROTDJTUGAKKyAgICAgIGZpCisKKyAgICAgICMgRWxpbWluYXRlIGFsbCB0ZW1wb3JhcnkgZGlyZWN0b3JpZXMuCisgICAgICAjZm9yIHBhdGggaW4gJG5vdGluc3RfcGF0aDsgZG8KKyAgICAgICMJbGliX3NlYXJjaF9wYXRoPWAkRUNITyAiWCRsaWJfc2VhcmNoX3BhdGggIiB8ICRYc2VkIC1lICJzJSAkcGF0aCAlICVnImAKKyAgICAgICMJZGVwbGlicz1gJEVDSE8gIlgkZGVwbGlicyAiIHwgJFhzZWQgLWUgInMlIC1MJHBhdGggJSAlZyJgCisgICAgICAjCWRlcGVuZGVuY3lfbGlicz1gJEVDSE8gIlgkZGVwZW5kZW5jeV9saWJzICIgfCAkWHNlZCAtZSAicyUgLUwkcGF0aCAlICVnImAKKyAgICAgICNkb25lCisKKyAgICAgIGlmIHRlc3QgLW4gIiR4cnBhdGgiOyB0aGVuCisJIyBJZiB0aGUgdXNlciBzcGVjaWZpZWQgYW55IHJwYXRoIGZsYWdzLCB0aGVuIGFkZCB0aGVtLgorCXRlbXBfeHJwYXRoPQorCWZvciBsaWJkaXIgaW4gJHhycGF0aDsgZG8KKwkgIHRlbXBfeHJwYXRoPSIkdGVtcF94cnBhdGggLVIkbGliZGlyIgorCSAgY2FzZSAiJGZpbmFsaXplX3JwYXRoICIgaW4KKwkgICoiICRsaWJkaXIgIiopIDs7CisJICAqKSBmaW5hbGl6ZV9ycGF0aD0iJGZpbmFsaXplX3JwYXRoICRsaWJkaXIiIDs7CisJICBlc2FjCisJZG9uZQorCWlmIHRlc3QgIiRoYXJkY29kZV9pbnRvX2xpYnMiICE9IHllcyB8fCB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiID0geWVzOyB0aGVuCisJICBkZXBlbmRlbmN5X2xpYnM9IiR0ZW1wX3hycGF0aCAkZGVwZW5kZW5jeV9saWJzIgorCWZpCisgICAgICBmaQorCisgICAgICAjIE1ha2Ugc3VyZSBkbGZpbGVzIGNvbnRhaW5zIG9ubHkgdW5pcXVlIGZpbGVzIHRoYXQgd29uJ3QgYmUgZGxwcmVvcGVuZWQKKyAgICAgIG9sZF9kbGZpbGVzPSIkZGxmaWxlcyIKKyAgICAgIGRsZmlsZXM9CisgICAgICBmb3IgbGliIGluICRvbGRfZGxmaWxlczsgZG8KKwljYXNlICIgJGRscHJlZmlsZXMgJGRsZmlsZXMgIiBpbgorCSoiICRsaWIgIiopIDs7CisJKikgZGxmaWxlcz0iJGRsZmlsZXMgJGxpYiIgOzsKKwllc2FjCisgICAgICBkb25lCisKKyAgICAgICMgTWFrZSBzdXJlIGRscHJlZmlsZXMgY29udGFpbnMgb25seSB1bmlxdWUgZmlsZXMKKyAgICAgIG9sZF9kbHByZWZpbGVzPSIkZGxwcmVmaWxlcyIKKyAgICAgIGRscHJlZmlsZXM9CisgICAgICBmb3IgbGliIGluICRvbGRfZGxwcmVmaWxlczsgZG8KKwljYXNlICIkZGxwcmVmaWxlcyAiIGluCisJKiIgJGxpYiAiKikgOzsKKwkqKSBkbHByZWZpbGVzPSIkZGxwcmVmaWxlcyAkbGliIiA7OworCWVzYWMKKyAgICAgIGRvbmUKKworICAgICAgaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSB5ZXM7IHRoZW4KKwlpZiB0ZXN0IC1uICIkcnBhdGgiOyB0aGVuCisJICBjYXNlICRob3N0IGluCisJICAqLSotY3lnd2luKiB8ICotKi1taW5ndyogfCAqLSotcHczMiogfCAqLSotb3MyKiB8ICotKi1iZW9zKiB8ICotY2VnY2MqKQorCSAgICAjIHRoZXNlIHN5c3RlbXMgZG9uJ3QgYWN0dWFsbHkgaGF2ZSBhIGMgbGlicmFyeSAoYXMgc3VjaCkhCisJICAgIDs7CisJICAqLSotcmhhcHNvZHkqIHwgKi0qLWRhcndpbjEuWzAxMl0pCisJICAgICMgUmhhcHNvZHkgQyBsaWJyYXJ5IGlzIGluIHRoZSBTeXN0ZW0gZnJhbWV3b3JrCisJICAgIGRlcGxpYnM9IiRkZXBsaWJzIFN5c3RlbS5sdGZyYW1ld29yayIKKwkgICAgOzsKKwkgICotKi1uZXRic2QqKQorCSAgICAjIERvbid0IGxpbmsgd2l0aCBsaWJjIHVudGlsIHRoZSBhLm91dCBsZC5zbyBpcyBmaXhlZC4KKwkgICAgOzsKKwkgICotKi1vcGVuYnNkKiB8ICotKi1mcmVlYnNkKiB8ICotKi1kcmFnb25mbHkqKQorCSAgICAjIERvIG5vdCBpbmNsdWRlIGxpYmMgZHVlIHRvIHVzIGhhdmluZyBsaWJjL2xpYmNfci4KKwkgICAgOzsKKwkgICotKi1zY28zLjJ2NSogfCAqLSotc2NvNXY2KikKKwkgICAgIyBDYXVzZXMgcHJvYmxlbXMgd2l0aCBfX2N0eXBlCisJICAgIDs7CisJICAqLSotc3lzdjQuMnV3MiogfCAqLSotc3lzdjUqIHwgKi0qLXVuaXh3YXJlKiB8ICotKi1PcGVuVU5JWCopCisJICAgICMgQ29tcGlsZXIgaW5zZXJ0cyBsaWJjIGluIHRoZSBjb3JyZWN0IHBsYWNlIGZvciB0aHJlYWRzIHRvIHdvcmsKKwkgICAgOzsKKwkgICopCisJICAgICMgQWRkIGxpYmMgdG8gZGVwbGlicyBvbiBhbGwgb3RoZXIgc3lzdGVtcyBpZiBuZWNlc3NhcnkuCisJICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX25lZWRfbGMiID0gInllcyI7IHRoZW4KKwkgICAgICBkZXBsaWJzPSIkZGVwbGlicyAtbGMiCisJICAgIGZpCisJICAgIDs7CisJICBlc2FjCisJZmkKKworCSMgVHJhbnNmb3JtIGRlcGxpYnMgaW50byBvbmx5IGRlcGxpYnMgdGhhdCBjYW4gYmUgbGlua2VkIGluIHNoYXJlZC4KKwluYW1lX3NhdmU9JG5hbWUKKwlsaWJuYW1lX3NhdmU9JGxpYm5hbWUKKwlyZWxlYXNlX3NhdmU9JHJlbGVhc2UKKwl2ZXJzdWZmaXhfc2F2ZT0kdmVyc3VmZml4CisJbWFqb3Jfc2F2ZT0kbWFqb3IKKwkjIEknbSBub3Qgc3VyZSBpZiBJJ20gdHJlYXRpbmcgdGhlIHJlbGVhc2UgY29ycmVjdGx5LiAgSSB0aGluaworCSMgcmVsZWFzZSBzaG91bGQgc2hvdyB1cCBpbiB0aGUgLWwgKGllIC1sZ21wNSkgc28gd2UgZG9uJ3Qgd2FudCB0bworCSMgYWRkIGl0IGluIHR3aWNlLiAgSXMgdGhhdCBjb3JyZWN0PworCXJlbGVhc2U9IiIKKwl2ZXJzdWZmaXg9IiIKKwltYWpvcj0iIgorCW5ld2RlcGxpYnM9CisJZHJvcHBlZGRlcHM9bm8KKwljYXNlICRkZXBsaWJzX2NoZWNrX21ldGhvZCBpbgorCXBhc3NfYWxsKQorCSAgIyBEb24ndCBjaGVjayBmb3Igc2hhcmVkL3N0YXRpYy4gIEV2ZXJ5dGhpbmcgd29ya3MuCisJICAjIFRoaXMgbWlnaHQgYmUgYSBsaXR0bGUgbmFpdmUuICBXZSBtaWdodCB3YW50IHRvIGNoZWNrCisJICAjIHdoZXRoZXIgdGhlIGxpYnJhcnkgZXhpc3RzIG9yIG5vdC4gIEJ1dCB0aGlzIGlzIG9uCisJICAjIG9zZjMgJiBvc2Y0IGFuZCBJJ20gbm90IHJlYWxseSBzdXJlLi4uIEp1c3QKKwkgICMgaW1wbGVtZW50aW5nIHdoYXQgd2FzIGFscmVhZHkgdGhlIGJlaGF2aW9yLgorCSAgbmV3ZGVwbGlicz0kZGVwbGlicworCSAgOzsKKwl0ZXN0X2NvbXBpbGUpCisJICAjIFRoaXMgY29kZSBzdHJlc3NlcyB0aGUgImxpYnJhcmllcyBhcmUgcHJvZ3JhbXMiIHBhcmFkaWdtIHRvIGl0cworCSAgIyBsaW1pdHMuIE1heWJlIGV2ZW4gYnJlYWtzIGl0LiAgV2UgY29tcGlsZSBhIHByb2dyYW0sIGxpbmtpbmcgaXQKKwkgICMgYWdhaW5zdCB0aGUgZGVwbGlicyBhcyBhIHByb3h5IGZvciB0aGUgbGlicmFyeS4gIFRoZW4gd2UgY2FuIGNoZWNrCisJICAjIHdoZXRoZXIgdGhleSBsaW5rZWQgaW4gc3RhdGljYWxseSBvciBkeW5hbWljYWxseSB3aXRoIGxkZC4KKwkgICRvcHRfZHJ5X3J1biB8fCAkUk0gY29uZnRlc3QuYworCSAgY2F0ID4gY29uZnRlc3QuYyA8PEVPRgorCSAgaW50IG1haW4oKSB7IHJldHVybiAwOyB9CitFT0YKKwkgICRvcHRfZHJ5X3J1biB8fCAkUk0gY29uZnRlc3QKKwkgIGlmICRMVENDICRMVENGTEFHUyAtbyBjb25mdGVzdCBjb25mdGVzdC5jICRkZXBsaWJzOyB0aGVuCisJICAgIGxkZF9vdXRwdXQ9YGxkZCBjb25mdGVzdGAKKwkgICAgZm9yIGkgaW4gJGRlcGxpYnM7IGRvCisJICAgICAgY2FzZSAkaSBpbgorCSAgICAgIC1sKikKKwkJZnVuY19zdHJpcG5hbWUgLWwgJycgIiRpIgorCQluYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwkJaWYgdGVzdCAiWCRhbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXMiID0gIlh5ZXMiIDsgdGhlbgorCQkgIGNhc2UgIiAkcHJlZGVwcyAkcG9zdGRlcHMgIiBpbgorCQkgICoiICRpICIqKQorCQkgICAgbmV3ZGVwbGlicz0iJG5ld2RlcGxpYnMgJGkiCisJCSAgICBpPSIiCisJCSAgICA7OworCQkgIGVzYWMKKwkJZmkKKwkJaWYgdGVzdCAtbiAiJGkiIDsgdGhlbgorCQkgIGxpYm5hbWU9YGV2YWwgIlxcJEVDSE8gXCIkbGlibmFtZV9zcGVjXCIiYAorCQkgIGRlcGxpYl9tYXRjaGVzPWBldmFsICJcXCRFQ0hPIFwiJGxpYnJhcnlfbmFtZXNfc3BlY1wiImAKKwkJICBzZXQgZHVtbXkgJGRlcGxpYl9tYXRjaGVzOyBzaGlmdAorCQkgIGRlcGxpYl9tYXRjaD0kMQorCQkgIGlmIHRlc3QgYGV4cHIgIiRsZGRfb3V0cHV0IiA6ICIuKiRkZXBsaWJfbWF0Y2giYCAtbmUgMCA7IHRoZW4KKwkJICAgIG5ld2RlcGxpYnM9IiRuZXdkZXBsaWJzICRpIgorCQkgIGVsc2UKKwkJICAgIGRyb3BwZWRkZXBzPXllcworCQkgICAgJEVDSE8KKwkJICAgICRFQ0hPICIqKiogV2FybmluZzogZHluYW1pYyBsaW5rZXIgZG9lcyBub3QgYWNjZXB0IG5lZWRlZCBsaWJyYXJ5ICRpLiIKKwkJICAgICRFQ0hPICIqKiogSSBoYXZlIHRoZSBjYXBhYmlsaXR5IHRvIG1ha2UgdGhhdCBsaWJyYXJ5IGF1dG9tYXRpY2FsbHkgbGluayBpbiB3aGVuIgorCQkgICAgJEVDSE8gIioqKiB5b3UgbGluayB0byB0aGlzIGxpYnJhcnkuICBCdXQgSSBjYW4gb25seSBkbyB0aGlzIGlmIHlvdSBoYXZlIGEiCisJCSAgICAkRUNITyAiKioqIHNoYXJlZCB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LCB3aGljaCBJIGJlbGlldmUgeW91IGRvIG5vdCBoYXZlIgorCQkgICAgJEVDSE8gIioqKiBiZWNhdXNlIGEgdGVzdF9jb21waWxlIGRpZCByZXZlYWwgdGhhdCB0aGUgbGlua2VyIGRpZCBub3QgdXNlIGl0IGZvciIKKwkJICAgICRFQ0hPICIqKiogaXRzIGR5bmFtaWMgZGVwZW5kZW5jeSBsaXN0IHRoYXQgcHJvZ3JhbXMgZ2V0IHJlc29sdmVkIHdpdGggYXQgcnVudGltZS4iCisJCSAgZmkKKwkJZmkKKwkJOzsKKwkgICAgICAqKQorCQluZXdkZXBsaWJzPSIkbmV3ZGVwbGlicyAkaSIKKwkJOzsKKwkgICAgICBlc2FjCisJICAgIGRvbmUKKwkgIGVsc2UKKwkgICAgIyBFcnJvciBvY2N1cnJlZCBpbiB0aGUgZmlyc3QgY29tcGlsZS4gIExldCdzIHRyeSB0byBzYWx2YWdlCisJICAgICMgdGhlIHNpdHVhdGlvbjogQ29tcGlsZSBhIHNlcGFyYXRlIHByb2dyYW0gZm9yIGVhY2ggbGlicmFyeS4KKwkgICAgZm9yIGkgaW4gJGRlcGxpYnM7IGRvCisJICAgICAgY2FzZSAkaSBpbgorCSAgICAgIC1sKikKKwkJZnVuY19zdHJpcG5hbWUgLWwgJycgIiRpIgorCQluYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwkJJG9wdF9kcnlfcnVuIHx8ICRSTSBjb25mdGVzdAorCQlpZiAkTFRDQyAkTFRDRkxBR1MgLW8gY29uZnRlc3QgY29uZnRlc3QuYyAkaTsgdGhlbgorCQkgIGxkZF9vdXRwdXQ9YGxkZCBjb25mdGVzdGAKKwkJICBpZiB0ZXN0ICJYJGFsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcyIgPSAiWHllcyIgOyB0aGVuCisJCSAgICBjYXNlICIgJHByZWRlcHMgJHBvc3RkZXBzICIgaW4KKwkJICAgICoiICRpICIqKQorCQkgICAgICBuZXdkZXBsaWJzPSIkbmV3ZGVwbGlicyAkaSIKKwkJICAgICAgaT0iIgorCQkgICAgICA7OworCQkgICAgZXNhYworCQkgIGZpCisJCSAgaWYgdGVzdCAtbiAiJGkiIDsgdGhlbgorCQkgICAgbGlibmFtZT1gZXZhbCAiXFwkRUNITyBcIiRsaWJuYW1lX3NwZWNcIiJgCisJCSAgICBkZXBsaWJfbWF0Y2hlcz1gZXZhbCAiXFwkRUNITyBcIiRsaWJyYXJ5X25hbWVzX3NwZWNcIiJgCisJCSAgICBzZXQgZHVtbXkgJGRlcGxpYl9tYXRjaGVzOyBzaGlmdAorCQkgICAgZGVwbGliX21hdGNoPSQxCisJCSAgICBpZiB0ZXN0IGBleHByICIkbGRkX291dHB1dCIgOiAiLiokZGVwbGliX21hdGNoImAgLW5lIDAgOyB0aGVuCisJCSAgICAgIG5ld2RlcGxpYnM9IiRuZXdkZXBsaWJzICRpIgorCQkgICAgZWxzZQorCQkgICAgICBkcm9wcGVkZGVwcz15ZXMKKwkJICAgICAgJEVDSE8KKwkJICAgICAgJEVDSE8gIioqKiBXYXJuaW5nOiBkeW5hbWljIGxpbmtlciBkb2VzIG5vdCBhY2NlcHQgbmVlZGVkIGxpYnJhcnkgJGkuIgorCQkgICAgICAkRUNITyAiKioqIEkgaGF2ZSB0aGUgY2FwYWJpbGl0eSB0byBtYWtlIHRoYXQgbGlicmFyeSBhdXRvbWF0aWNhbGx5IGxpbmsgaW4gd2hlbiIKKwkJICAgICAgJEVDSE8gIioqKiB5b3UgbGluayB0byB0aGlzIGxpYnJhcnkuICBCdXQgSSBjYW4gb25seSBkbyB0aGlzIGlmIHlvdSBoYXZlIGEiCisJCSAgICAgICRFQ0hPICIqKiogc2hhcmVkIHZlcnNpb24gb2YgdGhlIGxpYnJhcnksIHdoaWNoIHlvdSBkbyBub3QgYXBwZWFyIHRvIGhhdmUiCisJCSAgICAgICRFQ0hPICIqKiogYmVjYXVzZSBhIHRlc3RfY29tcGlsZSBkaWQgcmV2ZWFsIHRoYXQgdGhlIGxpbmtlciBkaWQgbm90IHVzZSB0aGlzIG9uZSIKKwkJICAgICAgJEVDSE8gIioqKiBhcyBhIGR5bmFtaWMgZGVwZW5kZW5jeSB0aGF0IHByb2dyYW1zIGNhbiBnZXQgcmVzb2x2ZWQgd2l0aCBhdCBydW50aW1lLiIKKwkJICAgIGZpCisJCSAgZmkKKwkJZWxzZQorCQkgIGRyb3BwZWRkZXBzPXllcworCQkgICRFQ0hPCisJCSAgJEVDSE8gIioqKiBXYXJuaW5nISAgTGlicmFyeSAkaSBpcyBuZWVkZWQgYnkgdGhpcyBsaWJyYXJ5IGJ1dCBJIHdhcyBub3QgYWJsZSB0byIKKwkJICAkRUNITyAiKioqIG1ha2UgaXQgbGluayBpbiEgIFlvdSB3aWxsIHByb2JhYmx5IG5lZWQgdG8gaW5zdGFsbCBpdCBvciBzb21lIgorCQkgICRFQ0hPICIqKiogbGlicmFyeSB0aGF0IGl0IGRlcGVuZHMgb24gYmVmb3JlIHRoaXMgbGlicmFyeSB3aWxsIGJlIGZ1bGx5IgorCQkgICRFQ0hPICIqKiogZnVuY3Rpb25hbC4gIEluc3RhbGxpbmcgaXQgYmVmb3JlIGNvbnRpbnVpbmcgd291bGQgYmUgZXZlbiBiZXR0ZXIuIgorCQlmaQorCQk7OworCSAgICAgICopCisJCW5ld2RlcGxpYnM9IiRuZXdkZXBsaWJzICRpIgorCQk7OworCSAgICAgIGVzYWMKKwkgICAgZG9uZQorCSAgZmkKKwkgIDs7CisJZmlsZV9tYWdpYyopCisJICBzZXQgZHVtbXkgJGRlcGxpYnNfY2hlY2tfbWV0aG9kOyBzaGlmdAorCSAgZmlsZV9tYWdpY19yZWdleD1gZXhwciAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiA6ICIkMSBcKC4qXCkiYAorCSAgZm9yIGFfZGVwbGliIGluICRkZXBsaWJzOyBkbworCSAgICBjYXNlICRhX2RlcGxpYiBpbgorCSAgICAtbCopCisJICAgICAgZnVuY19zdHJpcG5hbWUgLWwgJycgIiRhX2RlcGxpYiIKKwkgICAgICBuYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwkgICAgICBpZiB0ZXN0ICJYJGFsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcyIgPSAiWHllcyIgOyB0aGVuCisJCWNhc2UgIiAkcHJlZGVwcyAkcG9zdGRlcHMgIiBpbgorCQkqIiAkYV9kZXBsaWIgIiopCisJCSAgbmV3ZGVwbGlicz0iJG5ld2RlcGxpYnMgJGFfZGVwbGliIgorCQkgIGFfZGVwbGliPSIiCisJCSAgOzsKKwkJZXNhYworCSAgICAgIGZpCisJICAgICAgaWYgdGVzdCAtbiAiJGFfZGVwbGliIiA7IHRoZW4KKwkJbGlibmFtZT1gZXZhbCAiXFwkRUNITyBcIiRsaWJuYW1lX3NwZWNcIiJgCisJCWZvciBpIGluICRsaWJfc2VhcmNoX3BhdGggJHN5c19saWJfc2VhcmNoX3BhdGggJHNobGliX3NlYXJjaF9wYXRoOyBkbworCQkgIHBvdGVudGlhbF9saWJzPWBscyAkaS8kbGlibmFtZVsuLV0qIDI+L2Rldi9udWxsYAorCQkgIGZvciBwb3RlbnRfbGliIGluICRwb3RlbnRpYWxfbGliczsgZG8KKwkJICAgICAgIyBGb2xsb3cgc29mdCBsaW5rcy4KKwkJICAgICAgaWYgbHMgLWxMZCAiJHBvdGVudF9saWIiIDI+L2Rldi9udWxsIHwKKwkJCSAkR1JFUCAiIC0+ICIgPi9kZXYvbnVsbDsgdGhlbgorCQkJY29udGludWUKKwkJICAgICAgZmkKKwkJICAgICAgIyBUaGUgc3RhdGVtZW50IGFib3ZlIHRyaWVzIHRvIGF2b2lkIGVudGVyaW5nIGFuCisJCSAgICAgICMgZW5kbGVzcyBsb29wIGJlbG93LCBpbiBjYXNlIG9mIGN5Y2xpYyBsaW5rcy4KKwkJICAgICAgIyBXZSBtaWdodCBzdGlsbCBlbnRlciBhbiBlbmRsZXNzIGxvb3AsIHNpbmNlIGEgbGluaworCQkgICAgICAjIGxvb3AgY2FuIGJlIGNsb3NlZCB3aGlsZSB3ZSBmb2xsb3cgbGlua3MsCisJCSAgICAgICMgYnV0IHNvIHdoYXQ/CisJCSAgICAgIHBvdGxpYj0iJHBvdGVudF9saWIiCisJCSAgICAgIHdoaWxlIHRlc3QgLWggIiRwb3RsaWIiIDI+L2Rldi9udWxsOyBkbworCQkJcG90bGlibGluaz1gbHMgLWxkICRwb3RsaWIgfCAke1NFRH0gJ3MvLiogLT4gLy8nYAorCQkJY2FzZSAkcG90bGlibGluayBpbgorCQkJW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSBwb3RsaWI9IiRwb3RsaWJsaW5rIjs7CisJCQkqKSBwb3RsaWI9YCRFQ0hPICJYJHBvdGxpYiIgfCAkWHNlZCAtZSAncyxbXi9dKiQsLCdgIiRwb3RsaWJsaW5rIjs7CisJCQllc2FjCisJCSAgICAgIGRvbmUKKwkJICAgICAgaWYgZXZhbCAkZmlsZV9tYWdpY19jbWQgXCJcJHBvdGxpYlwiIDI+L2Rldi9udWxsIHwKKwkJCSAkU0VEIC1lIDEwcSB8CisJCQkgJEVHUkVQICIkZmlsZV9tYWdpY19yZWdleCIgPiAvZGV2L251bGw7IHRoZW4KKwkJCW5ld2RlcGxpYnM9IiRuZXdkZXBsaWJzICRhX2RlcGxpYiIKKwkJCWFfZGVwbGliPSIiCisJCQlicmVhayAyCisJCSAgICAgIGZpCisJCSAgZG9uZQorCQlkb25lCisJICAgICAgZmkKKwkgICAgICBpZiB0ZXN0IC1uICIkYV9kZXBsaWIiIDsgdGhlbgorCQlkcm9wcGVkZGVwcz15ZXMKKwkJJEVDSE8KKwkJJEVDSE8gIioqKiBXYXJuaW5nOiBsaW5rZXIgcGF0aCBkb2VzIG5vdCBoYXZlIHJlYWwgZmlsZSBmb3IgbGlicmFyeSAkYV9kZXBsaWIuIgorCQkkRUNITyAiKioqIEkgaGF2ZSB0aGUgY2FwYWJpbGl0eSB0byBtYWtlIHRoYXQgbGlicmFyeSBhdXRvbWF0aWNhbGx5IGxpbmsgaW4gd2hlbiIKKwkJJEVDSE8gIioqKiB5b3UgbGluayB0byB0aGlzIGxpYnJhcnkuICBCdXQgSSBjYW4gb25seSBkbyB0aGlzIGlmIHlvdSBoYXZlIGEiCisJCSRFQ0hPICIqKiogc2hhcmVkIHZlcnNpb24gb2YgdGhlIGxpYnJhcnksIHdoaWNoIHlvdSBkbyBub3QgYXBwZWFyIHRvIGhhdmUiCisJCSRFQ0hPICIqKiogYmVjYXVzZSBJIGRpZCBjaGVjayB0aGUgbGlua2VyIHBhdGggbG9va2luZyBmb3IgYSBmaWxlIHN0YXJ0aW5nIgorCQlpZiB0ZXN0IC16ICIkcG90bGliIiA7IHRoZW4KKwkJICAkRUNITyAiKioqIHdpdGggJGxpYm5hbWUgYnV0IG5vIGNhbmRpZGF0ZXMgd2VyZSBmb3VuZC4gKC4uLmZvciBmaWxlIG1hZ2ljIHRlc3QpIgorCQllbHNlCisJCSAgJEVDSE8gIioqKiB3aXRoICRsaWJuYW1lIGFuZCBub25lIG9mIHRoZSBjYW5kaWRhdGVzIHBhc3NlZCBhIGZpbGUgZm9ybWF0IHRlc3QiCisJCSAgJEVDSE8gIioqKiB1c2luZyBhIGZpbGUgbWFnaWMuIExhc3QgZmlsZSBjaGVja2VkOiAkcG90bGliIgorCQlmaQorCSAgICAgIGZpCisJICAgICAgOzsKKwkgICAgKikKKwkgICAgICAjIEFkZCBhIC1MIGFyZ3VtZW50LgorCSAgICAgIG5ld2RlcGxpYnM9IiRuZXdkZXBsaWJzICRhX2RlcGxpYiIKKwkgICAgICA7OworCSAgICBlc2FjCisJICBkb25lICMgR29uZSB0aHJvdWdoIGFsbCBkZXBsaWJzLgorCSAgOzsKKwltYXRjaF9wYXR0ZXJuKikKKwkgIHNldCBkdW1teSAkZGVwbGlic19jaGVja19tZXRob2Q7IHNoaWZ0CisJICBtYXRjaF9wYXR0ZXJuX3JlZ2V4PWBleHByICIkZGVwbGlic19jaGVja19tZXRob2QiIDogIiQxIFwoLipcKSJgCisJICBmb3IgYV9kZXBsaWIgaW4gJGRlcGxpYnM7IGRvCisJICAgIGNhc2UgJGFfZGVwbGliIGluCisJICAgIC1sKikKKwkgICAgICBmdW5jX3N0cmlwbmFtZSAtbCAnJyAiJGFfZGVwbGliIgorCSAgICAgIG5hbWU9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCSAgICAgIGlmIHRlc3QgIlgkYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzIiA9ICJYeWVzIiA7IHRoZW4KKwkJY2FzZSAiICRwcmVkZXBzICRwb3N0ZGVwcyAiIGluCisJCSoiICRhX2RlcGxpYiAiKikKKwkJICBuZXdkZXBsaWJzPSIkbmV3ZGVwbGlicyAkYV9kZXBsaWIiCisJCSAgYV9kZXBsaWI9IiIKKwkJICA7OworCQllc2FjCisJICAgICAgZmkKKwkgICAgICBpZiB0ZXN0IC1uICIkYV9kZXBsaWIiIDsgdGhlbgorCQlsaWJuYW1lPWBldmFsICJcXCRFQ0hPIFwiJGxpYm5hbWVfc3BlY1wiImAKKwkJZm9yIGkgaW4gJGxpYl9zZWFyY2hfcGF0aCAkc3lzX2xpYl9zZWFyY2hfcGF0aCAkc2hsaWJfc2VhcmNoX3BhdGg7IGRvCisJCSAgcG90ZW50aWFsX2xpYnM9YGxzICRpLyRsaWJuYW1lWy4tXSogMj4vZGV2L251bGxgCisJCSAgZm9yIHBvdGVudF9saWIgaW4gJHBvdGVudGlhbF9saWJzOyBkbworCQkgICAgcG90bGliPSIkcG90ZW50X2xpYiIgIyBzZWUgc3ltbGluay1jaGVjayBhYm92ZSBpbiBmaWxlX21hZ2ljIHRlc3QKKwkJICAgIGlmIGV2YWwgIlwkRUNITyBcIlgkcG90ZW50X2xpYlwiIiAyPi9kZXYvbnVsbCB8ICRYc2VkIC1lIDEwcSB8IFwKKwkJICAgICAgICRFR1JFUCAiJG1hdGNoX3BhdHRlcm5fcmVnZXgiID4gL2Rldi9udWxsOyB0aGVuCisJCSAgICAgIG5ld2RlcGxpYnM9IiRuZXdkZXBsaWJzICRhX2RlcGxpYiIKKwkJICAgICAgYV9kZXBsaWI9IiIKKwkJICAgICAgYnJlYWsgMgorCQkgICAgZmkKKwkJICBkb25lCisJCWRvbmUKKwkgICAgICBmaQorCSAgICAgIGlmIHRlc3QgLW4gIiRhX2RlcGxpYiIgOyB0aGVuCisJCWRyb3BwZWRkZXBzPXllcworCQkkRUNITworCQkkRUNITyAiKioqIFdhcm5pbmc6IGxpbmtlciBwYXRoIGRvZXMgbm90IGhhdmUgcmVhbCBmaWxlIGZvciBsaWJyYXJ5ICRhX2RlcGxpYi4iCisJCSRFQ0hPICIqKiogSSBoYXZlIHRoZSBjYXBhYmlsaXR5IHRvIG1ha2UgdGhhdCBsaWJyYXJ5IGF1dG9tYXRpY2FsbHkgbGluayBpbiB3aGVuIgorCQkkRUNITyAiKioqIHlvdSBsaW5rIHRvIHRoaXMgbGlicmFyeS4gIEJ1dCBJIGNhbiBvbmx5IGRvIHRoaXMgaWYgeW91IGhhdmUgYSIKKwkJJEVDSE8gIioqKiBzaGFyZWQgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgd2hpY2ggeW91IGRvIG5vdCBhcHBlYXIgdG8gaGF2ZSIKKwkJJEVDSE8gIioqKiBiZWNhdXNlIEkgZGlkIGNoZWNrIHRoZSBsaW5rZXIgcGF0aCBsb29raW5nIGZvciBhIGZpbGUgc3RhcnRpbmciCisJCWlmIHRlc3QgLXogIiRwb3RsaWIiIDsgdGhlbgorCQkgICRFQ0hPICIqKiogd2l0aCAkbGlibmFtZSBidXQgbm8gY2FuZGlkYXRlcyB3ZXJlIGZvdW5kLiAoLi4uZm9yIHJlZ2V4IHBhdHRlcm4gdGVzdCkiCisJCWVsc2UKKwkJICAkRUNITyAiKioqIHdpdGggJGxpYm5hbWUgYW5kIG5vbmUgb2YgdGhlIGNhbmRpZGF0ZXMgcGFzc2VkIGEgZmlsZSBmb3JtYXQgdGVzdCIKKwkJICAkRUNITyAiKioqIHVzaW5nIGEgcmVnZXggcGF0dGVybi4gTGFzdCBmaWxlIGNoZWNrZWQ6ICRwb3RsaWIiCisJCWZpCisJICAgICAgZmkKKwkgICAgICA7OworCSAgICAqKQorCSAgICAgICMgQWRkIGEgLUwgYXJndW1lbnQuCisJICAgICAgbmV3ZGVwbGlicz0iJG5ld2RlcGxpYnMgJGFfZGVwbGliIgorCSAgICAgIDs7CisJICAgIGVzYWMKKwkgIGRvbmUgIyBHb25lIHRocm91Z2ggYWxsIGRlcGxpYnMuCisJICA7OworCW5vbmUgfCB1bmtub3duIHwgKikKKwkgIG5ld2RlcGxpYnM9IiIKKwkgIHRtcF9kZXBsaWJzPWAkRUNITyAiWCAkZGVwbGlicyIgfCAkWHNlZCBcCisJICAgICAgLWUgJ3MvIC1sYyQvLycgLWUgJ3MvIC1bTFJdW14gXSovL2cnYAorCSAgaWYgdGVzdCAiWCRhbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXMiID0gIlh5ZXMiIDsgdGhlbgorCSAgICBmb3IgaSBpbiAkcHJlZGVwcyAkcG9zdGRlcHMgOyBkbworCSAgICAgICMgY2FuJ3QgdXNlIFhzZWQgYmVsb3csIGJlY2F1c2UgJGkgbWlnaHQgY29udGFpbiAnLycKKwkgICAgICB0bXBfZGVwbGlicz1gJEVDSE8gIlggJHRtcF9kZXBsaWJzIiB8ICRYc2VkIC1lICJzLCRpLCwiYAorCSAgICBkb25lCisJICBmaQorCSAgaWYgJEVDSE8gIlggJHRtcF9kZXBsaWJzIiB8ICRYc2VkIC1lICdzL1sJIF0vL2cnIHwKKwkgICAgICRHUkVQIC4gPi9kZXYvbnVsbDsgdGhlbgorCSAgICAkRUNITworCSAgICBpZiB0ZXN0ICJYJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiA9ICJYbm9uZSI7IHRoZW4KKwkgICAgICAkRUNITyAiKioqIFdhcm5pbmc6IGludGVyLWxpYnJhcnkgZGVwZW5kZW5jaWVzIGFyZSBub3Qgc3VwcG9ydGVkIGluIHRoaXMgcGxhdGZvcm0uIgorCSAgICBlbHNlCisJICAgICAgJEVDSE8gIioqKiBXYXJuaW5nOiBpbnRlci1saWJyYXJ5IGRlcGVuZGVuY2llcyBhcmUgbm90IGtub3duIHRvIGJlIHN1cHBvcnRlZC4iCisJICAgIGZpCisJICAgICRFQ0hPICIqKiogQWxsIGRlY2xhcmVkIGludGVyLWxpYnJhcnkgZGVwZW5kZW5jaWVzIGFyZSBiZWluZyBkcm9wcGVkLiIKKwkgICAgZHJvcHBlZGRlcHM9eWVzCisJICBmaQorCSAgOzsKKwllc2FjCisJdmVyc3VmZml4PSR2ZXJzdWZmaXhfc2F2ZQorCW1ham9yPSRtYWpvcl9zYXZlCisJcmVsZWFzZT0kcmVsZWFzZV9zYXZlCisJbGlibmFtZT0kbGlibmFtZV9zYXZlCisJbmFtZT0kbmFtZV9zYXZlCisKKwljYXNlICRob3N0IGluCisJKi0qLXJoYXBzb2R5KiB8ICotKi1kYXJ3aW4xLlswMTJdKQorCSAgIyBPbiBSaGFwc29keSByZXBsYWNlIHRoZSBDIGxpYnJhcnkgd2l0aCB0aGUgU3lzdGVtIGZyYW1ld29yaworCSAgbmV3ZGVwbGlicz1gJEVDSE8gIlggJG5ld2RlcGxpYnMiIHwgJFhzZWQgLWUgJ3MvIC1sYyAvIFN5c3RlbS5sdGZyYW1ld29yayAvJ2AKKwkgIDs7CisJZXNhYworCisJaWYgdGVzdCAiJGRyb3BwZWRkZXBzIiA9IHllczsgdGhlbgorCSAgaWYgdGVzdCAiJG1vZHVsZSIgPSB5ZXM7IHRoZW4KKwkgICAgJEVDSE8KKwkgICAgJEVDSE8gIioqKiBXYXJuaW5nOiBsaWJ0b29sIGNvdWxkIG5vdCBzYXRpc2Z5IGFsbCBkZWNsYXJlZCBpbnRlci1saWJyYXJ5IgorCSAgICAkRUNITyAiKioqIGRlcGVuZGVuY2llcyBvZiBtb2R1bGUgJGxpYm5hbWUuICBUaGVyZWZvcmUsIGxpYnRvb2wgd2lsbCBjcmVhdGUiCisJICAgICRFQ0hPICIqKiogYSBzdGF0aWMgbW9kdWxlLCB0aGF0IHNob3VsZCB3b3JrIGFzIGxvbmcgYXMgdGhlIGRsb3BlbmluZyIKKwkgICAgJEVDSE8gIioqKiBhcHBsaWNhdGlvbiBpcyBsaW5rZWQgd2l0aCB0aGUgLWRsb3BlbiBmbGFnLiIKKwkgICAgaWYgdGVzdCAteiAiJGdsb2JhbF9zeW1ib2xfcGlwZSI7IHRoZW4KKwkgICAgICAkRUNITworCSAgICAgICRFQ0hPICIqKiogSG93ZXZlciwgdGhpcyB3b3VsZCBvbmx5IHdvcmsgaWYgbGlidG9vbCB3YXMgYWJsZSB0byBleHRyYWN0IHN5bWJvbCIKKwkgICAgICAkRUNITyAiKioqIGxpc3RzIGZyb20gYSBwcm9ncmFtLCB1c2luZyBcYG5tJyBvciBlcXVpdmFsZW50LCBidXQgbGlidG9vbCBjb3VsZCIKKwkgICAgICAkRUNITyAiKioqIG5vdCBmaW5kIHN1Y2ggYSBwcm9ncmFtLiAgU28sIHRoaXMgbW9kdWxlIGlzIHByb2JhYmx5IHVzZWxlc3MuIgorCSAgICAgICRFQ0hPICIqKiogXGBubScgZnJvbSBHTlUgYmludXRpbHMgYW5kIGEgZnVsbCByZWJ1aWxkIG1heSBoZWxwLiIKKwkgICAgZmkKKwkgICAgaWYgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiA9IG5vOyB0aGVuCisJICAgICAgb2xkbGlicz0iJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuJGxpYmV4dCIKKwkgICAgICBidWlsZF9saWJ0b29sX2xpYnM9bW9kdWxlCisJICAgICAgYnVpbGRfb2xkX2xpYnM9eWVzCisJICAgIGVsc2UKKwkgICAgICBidWlsZF9saWJ0b29sX2xpYnM9bm8KKwkgICAgZmkKKwkgIGVsc2UKKwkgICAgJEVDSE8gIioqKiBUaGUgaW50ZXItbGlicmFyeSBkZXBlbmRlbmNpZXMgdGhhdCBoYXZlIGJlZW4gZHJvcHBlZCBoZXJlIHdpbGwgYmUiCisJICAgICRFQ0hPICIqKiogYXV0b21hdGljYWxseSBhZGRlZCB3aGVuZXZlciBhIHByb2dyYW0gaXMgbGlua2VkIHdpdGggdGhpcyBsaWJyYXJ5IgorCSAgICAkRUNITyAiKioqIG9yIGlzIGRlY2xhcmVkIHRvIC1kbG9wZW4gaXQuIgorCisJICAgIGlmIHRlc3QgIiRhbGxvd191bmRlZmluZWQiID0gbm87IHRoZW4KKwkgICAgICAkRUNITworCSAgICAgICRFQ0hPICIqKiogU2luY2UgdGhpcyBsaWJyYXJ5IG11c3Qgbm90IGNvbnRhaW4gdW5kZWZpbmVkIHN5bWJvbHMsIgorCSAgICAgICRFQ0hPICIqKiogYmVjYXVzZSBlaXRoZXIgdGhlIHBsYXRmb3JtIGRvZXMgbm90IHN1cHBvcnQgdGhlbSBvciIKKwkgICAgICAkRUNITyAiKioqIGl0IHdhcyBleHBsaWNpdGx5IHJlcXVlc3RlZCB3aXRoIC1uby11bmRlZmluZWQsIgorCSAgICAgICRFQ0hPICIqKiogbGlidG9vbCB3aWxsIG9ubHkgY3JlYXRlIGEgc3RhdGljIHZlcnNpb24gb2YgaXQuIgorCSAgICAgIGlmIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSBubzsgdGhlbgorCQlvbGRsaWJzPSIkb3V0cHV0X29iamRpci8kbGlibmFtZS4kbGliZXh0IgorCQlidWlsZF9saWJ0b29sX2xpYnM9bW9kdWxlCisJCWJ1aWxkX29sZF9saWJzPXllcworCSAgICAgIGVsc2UKKwkJYnVpbGRfbGlidG9vbF9saWJzPW5vCisJICAgICAgZmkKKwkgICAgZmkKKwkgIGZpCisJZmkKKwkjIERvbmUgY2hlY2tpbmcgZGVwbGlicyEKKwlkZXBsaWJzPSRuZXdkZXBsaWJzCisgICAgICBmaQorICAgICAgIyBUaW1lIHRvIGNoYW5nZSBhbGwgb3VyICJmb28ubHRmcmFtZXdvcmsiIHN0dWZmIGJhY2sgdG8gIi1mcmFtZXdvcmsgZm9vIgorICAgICAgY2FzZSAkaG9zdCBpbgorCSotKi1kYXJ3aW4qKQorCSAgbmV3ZGVwbGlicz1gJEVDSE8gIlggJG5ld2RlcGxpYnMiIHwgJFhzZWQgLWUgJ3MlIFwoW14gJF0qXCkubHRmcmFtZXdvcmslIC1mcmFtZXdvcmsgXDElZydgCisJICBuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncz1gJEVDSE8gIlggJG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzIiB8ICRYc2VkIC1lICdzJSBcKFteICRdKlwpLmx0ZnJhbWV3b3JrJSAtZnJhbWV3b3JrIFwxJWcnYAorCSAgZGVwbGlicz1gJEVDSE8gIlggJGRlcGxpYnMiIHwgJFhzZWQgLWUgJ3MlIFwoW14gJF0qXCkubHRmcmFtZXdvcmslIC1mcmFtZXdvcmsgXDElZydgCisJICA7OworICAgICAgZXNhYworCisgICAgICAjIG1vdmUgbGlicmFyeSBzZWFyY2ggcGF0aHMgdGhhdCBjb2luY2lkZSB3aXRoIHBhdGhzIHRvIG5vdCB5ZXQKKyAgICAgICMgaW5zdGFsbGVkIGxpYnJhcmllcyB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaWJyYXJ5IHNlYXJjaCBsaXN0CisgICAgICBuZXdfbGlicz0KKyAgICAgIGZvciBwYXRoIGluICRub3RpbnN0X3BhdGg7IGRvCisJY2FzZSAiICRuZXdfbGlicyAiIGluCisJKiIgLUwkcGF0aC8kb2JqZGlyICIqKSA7OworCSopCisJICBjYXNlICIgJGRlcGxpYnMgIiBpbgorCSAgKiIgLUwkcGF0aC8kb2JqZGlyICIqKQorCSAgICBuZXdfbGlicz0iJG5ld19saWJzIC1MJHBhdGgvJG9iamRpciIgOzsKKwkgIGVzYWMKKwkgIDs7CisJZXNhYworICAgICAgZG9uZQorICAgICAgZm9yIGRlcGxpYiBpbiAkZGVwbGliczsgZG8KKwljYXNlICRkZXBsaWIgaW4KKwktTCopCisJICBjYXNlICIgJG5ld19saWJzICIgaW4KKwkgICoiICRkZXBsaWIgIiopIDs7CisJICAqKSBuZXdfbGlicz0iJG5ld19saWJzICRkZXBsaWIiIDs7CisJICBlc2FjCisJICA7OworCSopIG5ld19saWJzPSIkbmV3X2xpYnMgJGRlcGxpYiIgOzsKKwllc2FjCisgICAgICBkb25lCisgICAgICBkZXBsaWJzPSIkbmV3X2xpYnMiCisKKyAgICAgICMgQWxsIHRoZSBsaWJyYXJ5LXNwZWNpZmljIHZhcmlhYmxlcyAoaW5zdGFsbF9saWJkaXIgaXMgc2V0IGFib3ZlKS4KKyAgICAgIGxpYnJhcnlfbmFtZXM9CisgICAgICBvbGRfbGlicmFyeT0KKyAgICAgIGRsbmFtZT0KKworICAgICAgIyBUZXN0IGFnYWluLCB3ZSBtYXkgaGF2ZSBkZWNpZGVkIG5vdCB0byBidWlsZCBpdCBhbnkgbW9yZQorICAgICAgaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSB5ZXM7IHRoZW4KKwlpZiB0ZXN0ICIkaGFyZGNvZGVfaW50b19saWJzIiA9IHllczsgdGhlbgorCSAgIyBIYXJkY29kZSB0aGUgbGlicmFyeSBwYXRocworCSAgaGFyZGNvZGVfbGliZGlycz0KKwkgIGRlcF9ycGF0aD0KKwkgIHJwYXRoPSIkZmluYWxpemVfcnBhdGgiCisJICB0ZXN0ICIkbW9kZSIgIT0gcmVsaW5rICYmIHJwYXRoPSIkY29tcGlsZV9ycGF0aCRycGF0aCIKKwkgIGZvciBsaWJkaXIgaW4gJHJwYXRoOyBkbworCSAgICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyI7IHRoZW4KKwkgICAgICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciI7IHRoZW4KKwkJaWYgdGVzdCAteiAiJGhhcmRjb2RlX2xpYmRpcnMiOyB0aGVuCisJCSAgaGFyZGNvZGVfbGliZGlycz0iJGxpYmRpciIKKwkJZWxzZQorCQkgICMgSnVzdCBhY2N1bXVsYXRlIHRoZSB1bmlxdWUgbGliZGlycy4KKwkJICBjYXNlICRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yJGhhcmRjb2RlX2xpYmRpcnMkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciBpbgorCQkgICoiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkbGliZGlyJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiKikKKwkJICAgIDs7CisJCSAgKikKKwkJICAgIGhhcmRjb2RlX2xpYmRpcnM9IiRoYXJkY29kZV9saWJkaXJzJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkbGliZGlyIgorCQkgICAgOzsKKwkJICBlc2FjCisJCWZpCisJICAgICAgZWxzZQorCQlldmFsIGZsYWc9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCisJCWRlcF9ycGF0aD0iJGRlcF9ycGF0aCAkZmxhZyIKKwkgICAgICBmaQorCSAgICBlbGlmIHRlc3QgLW4gIiRydW5wYXRoX3ZhciI7IHRoZW4KKwkgICAgICBjYXNlICIkcGVybV9ycGF0aCAiIGluCisJICAgICAgKiIgJGxpYmRpciAiKikgOzsKKwkgICAgICAqKSBwZXJtX3JwYXRoPSIkcGVybV9ycGF0aCAkbGliZGlyIiA7OworCSAgICAgIGVzYWMKKwkgICAgZmkKKwkgIGRvbmUKKwkgICMgU3Vic3RpdHV0ZSB0aGUgaGFyZGNvZGVkIGxpYmRpcnMgaW50byB0aGUgcnBhdGguCisJICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciIgJiYKKwkgICAgIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJzIjsgdGhlbgorCSAgICBsaWJkaXI9IiRoYXJkY29kZV9saWJkaXJzIgorCSAgICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZCI7IHRoZW4KKwkgICAgICBldmFsIGRlcF9ycGF0aD1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkXCIKKwkgICAgZWxzZQorCSAgICAgIGV2YWwgZGVwX3JwYXRoPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorCSAgICBmaQorCSAgZmkKKwkgIGlmIHRlc3QgLW4gIiRydW5wYXRoX3ZhciIgJiYgdGVzdCAtbiAiJHBlcm1fcnBhdGgiOyB0aGVuCisJICAgICMgV2Ugc2hvdWxkIHNldCB0aGUgcnVucGF0aF92YXIuCisJICAgIHJwYXRoPQorCSAgICBmb3IgZGlyIGluICRwZXJtX3JwYXRoOyBkbworCSAgICAgIHJwYXRoPSIkcnBhdGgkZGlyOiIKKwkgICAgZG9uZQorCSAgICBldmFsICIkcnVucGF0aF92YXI9JyRycGF0aFwkJHJ1bnBhdGhfdmFyJzsgZXhwb3J0ICRydW5wYXRoX3ZhciIKKwkgIGZpCisJICB0ZXN0IC1uICIkZGVwX3JwYXRoIiAmJiBkZXBsaWJzPSIkZGVwX3JwYXRoICRkZXBsaWJzIgorCWZpCisKKwlzaGxpYnBhdGg9IiRmaW5hbGl6ZV9zaGxpYnBhdGgiCisJdGVzdCAiJG1vZGUiICE9IHJlbGluayAmJiBzaGxpYnBhdGg9IiRjb21waWxlX3NobGlicGF0aCRzaGxpYnBhdGgiCisJaWYgdGVzdCAtbiAiJHNobGlicGF0aCI7IHRoZW4KKwkgIGV2YWwgIiRzaGxpYnBhdGhfdmFyPSckc2hsaWJwYXRoXCQkc2hsaWJwYXRoX3Zhcic7IGV4cG9ydCAkc2hsaWJwYXRoX3ZhciIKKwlmaQorCisJIyBHZXQgdGhlIHJlYWwgYW5kIGxpbmsgbmFtZXMgb2YgdGhlIGxpYnJhcnkuCisJZXZhbCBzaGFyZWRfZXh0PVwiJHNocmV4dF9jbWRzXCIKKwlldmFsIGxpYnJhcnlfbmFtZXM9XCIkbGlicmFyeV9uYW1lc19zcGVjXCIKKwlzZXQgZHVtbXkgJGxpYnJhcnlfbmFtZXMKKwlzaGlmdAorCXJlYWxuYW1lPSIkMSIKKwlzaGlmdAorCisJaWYgdGVzdCAtbiAiJHNvbmFtZV9zcGVjIjsgdGhlbgorCSAgZXZhbCBzb25hbWU9XCIkc29uYW1lX3NwZWNcIgorCWVsc2UKKwkgIHNvbmFtZT0iJHJlYWxuYW1lIgorCWZpCisJaWYgdGVzdCAteiAiJGRsbmFtZSI7IHRoZW4KKwkgIGRsbmFtZT0kc29uYW1lCisJZmkKKworCWxpYj0iJG91dHB1dF9vYmpkaXIvJHJlYWxuYW1lIgorCWxpbmtuYW1lcz0KKwlmb3IgbGluaworCWRvCisJICBsaW5rbmFtZXM9IiRsaW5rbmFtZXMgJGxpbmsiCisJZG9uZQorCisJIyBVc2Ugc3RhbmRhcmQgb2JqZWN0cyBpZiB0aGV5IGFyZSBwaWMKKwl0ZXN0IC16ICIkcGljX2ZsYWciICYmIGxpYm9ianM9YCRFQ0hPICJYJGxpYm9ianMiIHwgJFNQMk5MIHwgJFhzZWQgLWUgIiRsbzJvIiB8ICROTDJTUGAKKwl0ZXN0ICJYJGxpYm9ianMiID0gIlggIiAmJiBsaWJvYmpzPQorCisJZGVsZmlsZXM9CisJaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzIiAmJiB0ZXN0IC1uICIkaW5jbHVkZV9leHBzeW1zIjsgdGhlbgorCSAgJG9wdF9kcnlfcnVuIHx8IGNwICIkZXhwb3J0X3N5bWJvbHMiICIkb3V0cHV0X29iamRpci8kbGlibmFtZS51ZXhwIgorCSAgZXhwb3J0X3N5bWJvbHM9IiRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnVleHAiCisJICBkZWxmaWxlcz0iJGRlbGZpbGVzICRleHBvcnRfc3ltYm9scyIKKwlmaQorCisJb3JpZ19leHBvcnRfc3ltYm9scz0KKwljYXNlICRob3N0X29zIGluCisJY3lnd2luKiB8IG1pbmd3KiB8IGNlZ2NjKikKKwkgIGlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9scyIgJiYgdGVzdCAteiAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IjsgdGhlbgorCSAgICAjIGV4cG9ydGluZyB1c2luZyB1c2VyIHN1cHBsaWVkIHN5bWZpbGUKKwkgICAgaWYgdGVzdCAieGAkU0VEIDFxICRleHBvcnRfc3ltYm9sc2AiICE9IHhFWFBPUlRTOyB0aGVuCisJICAgICAgIyBhbmQgaXQncyBOT1QgYWxyZWFkeSBhIC5kZWYgZmlsZS4gTXVzdCBmaWd1cmUgb3V0CisJICAgICAgIyB3aGljaCBvZiB0aGUgZ2l2ZW4gc3ltYm9scyBhcmUgZGF0YSBzeW1ib2xzIGFuZCB0YWcKKwkgICAgICAjIHRoZW0gYXMgc3VjaC4gU28sIHRyaWdnZXIgdXNlIG9mIGV4cG9ydF9zeW1ib2xzX2NtZHMuCisJICAgICAgIyBleHBvcnRfc3ltYm9scyBnZXRzIHJlYXNzaWduZWQgaW5zaWRlIHRoZSAicHJlcGFyZQorCSAgICAgICMgdGhlIGxpc3Qgb2YgZXhwb3J0ZWQgc3ltYm9scyIgaWYgc3RhdGVtZW50LCBzbyB0aGUKKwkgICAgICAjIGluY2x1ZGVfZXhwc3ltcyBsb2dpYyBzdGlsbCB3b3Jrcy4KKwkgICAgICBvcmlnX2V4cG9ydF9zeW1ib2xzPSIkZXhwb3J0X3N5bWJvbHMiCisJICAgICAgZXhwb3J0X3N5bWJvbHM9CisJICAgICAgYWx3YXlzX2V4cG9ydF9zeW1ib2xzPXllcworCSAgICBmaQorCSAgZmkKKwkgIDs7CisJZXNhYworCisJIyBQcmVwYXJlIHRoZSBsaXN0IG9mIGV4cG9ydGVkIHN5bWJvbHMKKwlpZiB0ZXN0IC16ICIkZXhwb3J0X3N5bWJvbHMiOyB0aGVuCisJICBpZiB0ZXN0ICIkYWx3YXlzX2V4cG9ydF9zeW1ib2xzIiA9IHllcyB8fCB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHNfcmVnZXgiOyB0aGVuCisJICAgIGZ1bmNfdmVyYm9zZSAiZ2VuZXJhdGluZyBzeW1ib2wgbGlzdCBmb3IgXGAkbGlibmFtZS5sYSciCisJICAgIGV4cG9ydF9zeW1ib2xzPSIkb3V0cHV0X29iamRpci8kbGlibmFtZS5leHAiCisJICAgICRvcHRfZHJ5X3J1biB8fCAkUk0gJGV4cG9ydF9zeW1ib2xzCisJICAgIGNtZHM9JGV4cG9ydF9zeW1ib2xzX2NtZHMKKwkgICAgc2F2ZV9pZnM9IiRJRlMiOyBJRlM9J34nCisJICAgIGZvciBjbWQgaW4gJGNtZHM7IGRvCisJICAgICAgSUZTPSIkc2F2ZV9pZnMiCisJICAgICAgZXZhbCBjbWQ9XCIkY21kXCIKKwkgICAgICBmdW5jX2xlbiAiICRjbWQiCisJICAgICAgbGVuPSRmdW5jX2xlbl9yZXN1bHQKKwkgICAgICBpZiB0ZXN0ICIkbGVuIiAtbHQgIiRtYXhfY21kX2xlbiIgfHwgdGVzdCAiJG1heF9jbWRfbGVuIiAtbGUgLTE7IHRoZW4KKwkJZnVuY19zaG93X2V2YWwgIiRjbWQiICdleGl0ICQ/JworCQlza2lwcGVkX2V4cG9ydD1mYWxzZQorCSAgICAgIGVsc2UKKwkJIyBUaGUgY29tbWFuZCBsaW5lIGlzIHRvbyBsb25nIHRvIGV4ZWN1dGUgaW4gb25lIHN0ZXAuCisJCWZ1bmNfdmVyYm9zZSAidXNpbmcgcmVsb2FkYWJsZSBvYmplY3QgZmlsZSBmb3IgZXhwb3J0IGxpc3QuLi4iCisJCXNraXBwZWRfZXhwb3J0PToKKwkJIyBCcmVhayBvdXQgZWFybHksIG90aGVyd2lzZSBza2lwcGVkX2V4cG9ydCBtYXkgYmUKKwkJIyBzZXQgdG8gZmFsc2UgYnkgYSBsYXRlciBidXQgc2hvcnRlciBjbWQuCisJCWJyZWFrCisJICAgICAgZmkKKwkgICAgZG9uZQorCSAgICBJRlM9IiRzYXZlX2lmcyIKKwkgICAgaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IiAmJiB0ZXN0ICJYJHNraXBwZWRfZXhwb3J0IiAhPSAiWDoiOyB0aGVuCisJICAgICAgZnVuY19zaG93X2V2YWwgJyRFR1JFUCAtZSAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IiAiJGV4cG9ydF9zeW1ib2xzIiA+ICIke2V4cG9ydF9zeW1ib2xzfVQiJworCSAgICAgIGZ1bmNfc2hvd19ldmFsICckTVYgIiR7ZXhwb3J0X3N5bWJvbHN9VCIgIiRleHBvcnRfc3ltYm9scyInCisJICAgIGZpCisJICBmaQorCWZpCisKKwlpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHMiICYmIHRlc3QgLW4gIiRpbmNsdWRlX2V4cHN5bXMiOyB0aGVuCisJICB0bXBfZXhwb3J0X3N5bWJvbHM9IiRleHBvcnRfc3ltYm9scyIKKwkgIHRlc3QgLW4gIiRvcmlnX2V4cG9ydF9zeW1ib2xzIiAmJiB0bXBfZXhwb3J0X3N5bWJvbHM9IiRvcmlnX2V4cG9ydF9zeW1ib2xzIgorCSAgJG9wdF9kcnlfcnVuIHx8IGV2YWwgJyRFQ0hPICJYJGluY2x1ZGVfZXhwc3ltcyIgfCAkWHNlZCB8ICRTUDJOTCA+PiAiJHRtcF9leHBvcnRfc3ltYm9scyInCisJZmkKKworCWlmIHRlc3QgIlgkc2tpcHBlZF9leHBvcnQiICE9ICJYOiIgJiYgdGVzdCAtbiAiJG9yaWdfZXhwb3J0X3N5bWJvbHMiOyB0aGVuCisJICAjIFRoZSBnaXZlbiBleHBvcnRzX3N5bWJvbHMgZmlsZSBoYXMgdG8gYmUgZmlsdGVyZWQsIHNvIGZpbHRlciBpdC4KKwkgIGZ1bmNfdmVyYm9zZSAiZmlsdGVyIHN5bWJvbCBsaXN0IGZvciBcYCRsaWJuYW1lLmxhJyB0byB0YWcgREFUQSBleHBvcnRzIgorCSAgIyBGSVhNRTogJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZmlsdGVyIHBvdGVudGlhbGx5IGNvbnRhaW5zIGxvdHMgb2YKKwkgICMgJ3MnIGNvbW1hbmRzIHdoaWNoIG5vdCBhbGwgc2VkcyBjYW4gaGFuZGxlLiBHTlUgc2VkIHNob3VsZCBiZSBmaW5lCisJICAjIHRob3VnaC4gQWxzbywgdGhlIGZpbHRlciBzY2FsZXMgc3VwZXJsaW5lYXJseSB3aXRoIHRoZSBudW1iZXIgb2YKKwkgICMgZ2xvYmFsIHZhcmlhYmxlcy4gam9pbigxKSB3b3VsZCBiZSBuaWNlIGhlcmUsIGJ1dCB1bmZvcnR1bmF0ZWx5CisJICAjIGlzbid0IGEgYmxlc3NlZCB0b29sLgorCSAgJG9wdF9kcnlfcnVuIHx8ICRTRUQgLWUgJy9bICxdREFUQS8hZDtzLFwoLipcKVwoWyBcLF0uKlwpLHN8XlwxJHxcMVwyfCwnIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZmlsdGVyCisJICBkZWxmaWxlcz0iJGRlbGZpbGVzICRleHBvcnRfc3ltYm9scyAkb3V0cHV0X29iamRpci8kbGlibmFtZS5maWx0ZXIiCisJICBleHBvcnRfc3ltYm9scz0kb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWYKKwkgICRvcHRfZHJ5X3J1biB8fCAkU0VEIC1mICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmZpbHRlciA8ICRvcmlnX2V4cG9ydF9zeW1ib2xzID4gJGV4cG9ydF9zeW1ib2xzCisJZmkKKworCXRtcF9kZXBsaWJzPQorCWZvciB0ZXN0X2RlcGxpYiBpbiAkZGVwbGliczsgZG8KKwkgIGNhc2UgIiAkY29udmVuaWVuY2UgIiBpbgorCSAgKiIgJHRlc3RfZGVwbGliICIqKSA7OworCSAgKikKKwkgICAgdG1wX2RlcGxpYnM9IiR0bXBfZGVwbGlicyAkdGVzdF9kZXBsaWIiCisJICAgIDs7CisJICBlc2FjCisJZG9uZQorCWRlcGxpYnM9IiR0bXBfZGVwbGlicyIKKworCWlmIHRlc3QgLW4gIiRjb252ZW5pZW5jZSI7IHRoZW4KKwkgIGlmIHRlc3QgLW4gIiR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYyIgJiYKKwkgICAgdGVzdCAiJGNvbXBpbGVyX25lZWRzX29iamVjdCIgPSB5ZXMgJiYKKwkgICAgdGVzdCAteiAiJGxpYm9ianMiOyB0aGVuCisJICAgICMgZXh0cmFjdCB0aGUgYXJjaGl2ZXMsIHNvIHdlIGhhdmUgb2JqZWN0cyB0byBsaXN0LgorCSAgICAjIFRPRE86IGNvdWxkIG9wdGltaXplIHRoaXMgdG8ganVzdCBleHRyYWN0IG9uZSBhcmNoaXZlLgorCSAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0KKwkgIGZpCisJICBpZiB0ZXN0IC1uICIkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMiOyB0aGVuCisJICAgIHNhdmVfbGlib2Jqcz0kbGlib2JqcworCSAgICBldmFsIGxpYm9ianM9XCJcJGxpYm9ianMgJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjXCIKKwkgICAgdGVzdCAiWCRsaWJvYmpzIiA9ICJYICIgJiYgbGlib2Jqcz0KKwkgIGVsc2UKKwkgICAgZ2VudG9wPSIkb3V0cHV0X29iamRpci8ke291dHB1dG5hbWV9eCIKKwkgICAgZ2VuZXJhdGVkPSIkZ2VuZXJhdGVkICRnZW50b3AiCisKKwkgICAgZnVuY19leHRyYWN0X2FyY2hpdmVzICRnZW50b3AgJGNvbnZlbmllbmNlCisJICAgIGxpYm9ianM9IiRsaWJvYmpzICRmdW5jX2V4dHJhY3RfYXJjaGl2ZXNfcmVzdWx0IgorCSAgICB0ZXN0ICJYJGxpYm9ianMiID0gIlggIiAmJiBsaWJvYmpzPQorCSAgZmkKKwlmaQorCisJaWYgdGVzdCAiJHRocmVhZF9zYWZlIiA9IHllcyAmJiB0ZXN0IC1uICIkdGhyZWFkX3NhZmVfZmxhZ19zcGVjIjsgdGhlbgorCSAgZXZhbCBmbGFnPVwiJHRocmVhZF9zYWZlX2ZsYWdfc3BlY1wiCisJICBsaW5rZXJfZmxhZ3M9IiRsaW5rZXJfZmxhZ3MgJGZsYWciCisJZmkKKworCSMgTWFrZSBhIGJhY2t1cCBvZiB0aGUgdW5pbnN0YWxsZWQgbGlicmFyeSB3aGVuIHJlbGlua2luZworCWlmIHRlc3QgIiRtb2RlIiA9IHJlbGluazsgdGhlbgorCSAgJG9wdF9kcnlfcnVuIHx8IGV2YWwgJyhjZCAkb3V0cHV0X29iamRpciAmJiAkUk0gJHtyZWFsbmFtZX1VICYmICRNViAkcmVhbG5hbWUgJHtyZWFsbmFtZX1VKScgfHwgZXhpdCAkPworCWZpCisKKwkjIERvIGVhY2ggb2YgdGhlIGFyY2hpdmUgY29tbWFuZHMuCisJaWYgdGVzdCAiJG1vZHVsZSIgPSB5ZXMgJiYgdGVzdCAtbiAiJG1vZHVsZV9jbWRzIiA7IHRoZW4KKwkgIGlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9scyIgJiYgdGVzdCAtbiAiJG1vZHVsZV9leHBzeW1fY21kcyI7IHRoZW4KKwkgICAgZXZhbCB0ZXN0X2NtZHM9XCIkbW9kdWxlX2V4cHN5bV9jbWRzXCIKKwkgICAgY21kcz0kbW9kdWxlX2V4cHN5bV9jbWRzCisJICBlbHNlCisJICAgIGV2YWwgdGVzdF9jbWRzPVwiJG1vZHVsZV9jbWRzXCIKKwkgICAgY21kcz0kbW9kdWxlX2NtZHMKKwkgIGZpCisJZWxzZQorCSAgaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzIiAmJiB0ZXN0IC1uICIkYXJjaGl2ZV9leHBzeW1fY21kcyI7IHRoZW4KKwkgICAgZXZhbCB0ZXN0X2NtZHM9XCIkYXJjaGl2ZV9leHBzeW1fY21kc1wiCisJICAgIGNtZHM9JGFyY2hpdmVfZXhwc3ltX2NtZHMKKwkgIGVsc2UKKwkgICAgZXZhbCB0ZXN0X2NtZHM9XCIkYXJjaGl2ZV9jbWRzXCIKKwkgICAgY21kcz0kYXJjaGl2ZV9jbWRzCisJICBmaQorCWZpCisKKwlpZiB0ZXN0ICJYJHNraXBwZWRfZXhwb3J0IiAhPSAiWDoiICYmCisJICAgZnVuY19sZW4gIiAkdGVzdF9jbWRzIiAmJgorCSAgIGxlbj0kZnVuY19sZW5fcmVzdWx0ICYmCisJICAgdGVzdCAiJGxlbiIgLWx0ICIkbWF4X2NtZF9sZW4iIHx8IHRlc3QgIiRtYXhfY21kX2xlbiIgLWxlIC0xOyB0aGVuCisJICA6CisJZWxzZQorCSAgIyBUaGUgY29tbWFuZCBsaW5lIGlzIHRvbyBsb25nIHRvIGxpbmsgaW4gb25lIHN0ZXAsIGxpbmsgcGllY2V3aXNlCisJICAjIG9yLCBpZiB1c2luZyBHTlUgbGQgYW5kIHNraXBwZWRfZXhwb3J0IGlzIG5vdCA6LCB1c2UgYSBsaW5rZXIKKwkgICMgc2NyaXB0LgorCisJICAjIFNhdmUgdGhlIHZhbHVlIG9mICRvdXRwdXQgYW5kICRsaWJvYmpzIGJlY2F1c2Ugd2Ugd2FudCB0bworCSAgIyB1c2UgdGhlbSBsYXRlci4gIElmIHdlIGhhdmUgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsIHdlCisJICAjIHdhbnQgdG8gdXNlIHNhdmVfbGlib2JqcyBhcyBpdCB3YXMgYmVmb3JlCisJICAjIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjIHdhcyBleHBhbmRlZCwgYmVjYXVzZSB3ZSBjYW4ndAorCSAgIyBhc3N1bWUgdGhlIGxpbmtlciB1bmRlcnN0YW5kcyB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYy4KKwkgICMgVGhpcyBtYXkgaGF2ZSB0byBiZSByZXZpc2l0ZWQsIGluIGNhc2UgdG9vIG1hbnkKKwkgICMgY29udmVuaWVuY2UgbGlicmFyaWVzIGdldCBsaW5rZWQgaW4gYW5kIGVuZCB1cCBleGNlZWRpbmcKKwkgICMgdGhlIHNwZWMuCisJICBpZiB0ZXN0IC16ICIkY29udmVuaWVuY2UiIHx8IHRlc3QgLXogIiR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYyI7IHRoZW4KKwkgICAgc2F2ZV9saWJvYmpzPSRsaWJvYmpzCisJICBmaQorCSAgc2F2ZV9vdXRwdXQ9JG91dHB1dAorCSAgb3V0cHV0X2xhPWAkRUNITyAiWCRvdXRwdXQiIHwgJFhzZWQgLWUgIiRiYXNlbmFtZSJgCisKKwkgICMgQ2xlYXIgdGhlIHJlbG9hZGFibGUgb2JqZWN0IGNyZWF0aW9uIGNvbW1hbmQgcXVldWUgYW5kCisJICAjIGluaXRpYWxpemUgayB0byBvbmUuCisJICB0ZXN0X2NtZHM9CisJICBjb25jYXRfY21kcz0KKwkgIG9iamxpc3Q9CisJICBsYXN0X3JvYmo9CisJICBrPTEKKworCSAgaWYgdGVzdCAtbiAiJHNhdmVfbGlib2JqcyIgJiYgdGVzdCAiWCRza2lwcGVkX2V4cG9ydCIgIT0gIlg6IiAmJiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCisJICAgIG91dHB1dD0ke291dHB1dF9vYmpkaXJ9LyR7b3V0cHV0X2xhfS5sbmtzY3JpcHQKKwkgICAgZnVuY192ZXJib3NlICJjcmVhdGluZyBHTlUgbGQgc2NyaXB0OiAkb3V0cHV0IgorCSAgICAkRUNITyAnSU5QVVQgKCcgPiAkb3V0cHV0CisJICAgIGZvciBvYmogaW4gJHNhdmVfbGlib2JqcworCSAgICBkbworCSAgICAgICRFQ0hPICIkb2JqIiA+PiAkb3V0cHV0CisJICAgIGRvbmUKKwkgICAgJEVDSE8gJyknID4+ICRvdXRwdXQKKwkgICAgZGVsZmlsZXM9IiRkZWxmaWxlcyAkb3V0cHV0IgorCSAgZWxpZiB0ZXN0IC1uICIkc2F2ZV9saWJvYmpzIiAmJiB0ZXN0ICJYJHNraXBwZWRfZXhwb3J0IiAhPSAiWDoiICYmIHRlc3QgIlgkZmlsZV9saXN0X3NwZWMiICE9IFg7IHRoZW4KKwkgICAgb3V0cHV0PSR7b3V0cHV0X29iamRpcn0vJHtvdXRwdXRfbGF9LmxuaworCSAgICBmdW5jX3ZlcmJvc2UgImNyZWF0aW5nIGxpbmtlciBpbnB1dCBmaWxlIGxpc3Q6ICRvdXRwdXQiCisJICAgIDogPiAkb3V0cHV0CisJICAgIHNldCB4ICRzYXZlX2xpYm9ianMKKwkgICAgc2hpZnQKKwkgICAgZmlyc3RvYmo9CisJICAgIGlmIHRlc3QgIiRjb21waWxlcl9uZWVkc19vYmplY3QiID0geWVzOyB0aGVuCisJICAgICAgZmlyc3RvYmo9IiQxICIKKwkgICAgICBzaGlmdAorCSAgICBmaQorCSAgICBmb3Igb2JqCisJICAgIGRvCisJICAgICAgJEVDSE8gIiRvYmoiID4+ICRvdXRwdXQKKwkgICAgZG9uZQorCSAgICBkZWxmaWxlcz0iJGRlbGZpbGVzICRvdXRwdXQiCisJICAgIG91dHB1dD0kZmlyc3RvYmpcIiRmaWxlX2xpc3Rfc3BlYyRvdXRwdXRcIgorCSAgZWxzZQorCSAgICBpZiB0ZXN0IC1uICIkc2F2ZV9saWJvYmpzIjsgdGhlbgorCSAgICAgIGZ1bmNfdmVyYm9zZSAiY3JlYXRpbmcgcmVsb2FkYWJsZSBvYmplY3QgZmlsZXMuLi4iCisJICAgICAgb3V0cHV0PSRvdXRwdXRfb2JqZGlyLyRvdXRwdXRfbGEtJHtrfS4kb2JqZXh0CisJICAgICAgZXZhbCB0ZXN0X2NtZHM9XCIkcmVsb2FkX2NtZHNcIgorCSAgICAgIGZ1bmNfbGVuICIgJHRlc3RfY21kcyIKKwkgICAgICBsZW4wPSRmdW5jX2xlbl9yZXN1bHQKKwkgICAgICBsZW49JGxlbjAKKworCSAgICAgICMgTG9vcCBvdmVyIHRoZSBsaXN0IG9mIG9iamVjdHMgdG8gYmUgbGlua2VkLgorCSAgICAgIGZvciBvYmogaW4gJHNhdmVfbGlib2JqcworCSAgICAgIGRvCisJCWZ1bmNfbGVuICIgJG9iaiIKKwkJZnVuY19hcml0aCAkbGVuICsgJGZ1bmNfbGVuX3Jlc3VsdAorCQlsZW49JGZ1bmNfYXJpdGhfcmVzdWx0CisJCWlmIHRlc3QgIlgkb2JqbGlzdCIgPSBYIHx8CisJCSAgIHRlc3QgIiRsZW4iIC1sdCAiJG1heF9jbWRfbGVuIjsgdGhlbgorCQkgIGZ1bmNfYXBwZW5kIG9iamxpc3QgIiAkb2JqIgorCQllbHNlCisJCSAgIyBUaGUgY29tbWFuZCAkdGVzdF9jbWRzIGlzIGFsbW9zdCB0b28gbG9uZywgYWRkIGEKKwkJICAjIGNvbW1hbmQgdG8gdGhlIHF1ZXVlLgorCQkgIGlmIHRlc3QgIiRrIiAtZXEgMSA7IHRoZW4KKwkJICAgICMgVGhlIGZpcnN0IGZpbGUgZG9lc24ndCBoYXZlIGEgcHJldmlvdXMgY29tbWFuZCB0byBhZGQuCisJCSAgICBldmFsIGNvbmNhdF9jbWRzPVwiJHJlbG9hZF9jbWRzICRvYmpsaXN0ICRsYXN0X3JvYmpcIgorCQkgIGVsc2UKKwkJICAgICMgQWxsIHN1YnNlcXVlbnQgcmVsb2FkYWJsZSBvYmplY3QgZmlsZXMgd2lsbCBsaW5rIGluCisJCSAgICAjIHRoZSBsYXN0IG9uZSBjcmVhdGVkLgorCQkgICAgZXZhbCBjb25jYXRfY21kcz1cIlwkY29uY2F0X2NtZHN+JHJlbG9hZF9jbWRzICRvYmpsaXN0ICRsYXN0X3JvYmp+XCRSTSAkbGFzdF9yb2JqXCIKKwkJICBmaQorCQkgIGxhc3Rfcm9iaj0kb3V0cHV0X29iamRpci8kb3V0cHV0X2xhLSR7a30uJG9iamV4dAorCQkgIGZ1bmNfYXJpdGggJGsgKyAxCisJCSAgaz0kZnVuY19hcml0aF9yZXN1bHQKKwkJICBvdXRwdXQ9JG91dHB1dF9vYmpkaXIvJG91dHB1dF9sYS0ke2t9LiRvYmpleHQKKwkJICBvYmpsaXN0PSRvYmoKKwkJICBmdW5jX2xlbiAiICRsYXN0X3JvYmoiCisJCSAgZnVuY19hcml0aCAkbGVuMCArICRmdW5jX2xlbl9yZXN1bHQKKwkJICBsZW49JGZ1bmNfYXJpdGhfcmVzdWx0CisJCWZpCisJICAgICAgZG9uZQorCSAgICAgICMgSGFuZGxlIHRoZSByZW1haW5pbmcgb2JqZWN0cyBieSBjcmVhdGluZyBvbmUgbGFzdAorCSAgICAgICMgcmVsb2FkYWJsZSBvYmplY3QgZmlsZS4gIEFsbCBzdWJzZXF1ZW50IHJlbG9hZGFibGUgb2JqZWN0CisJICAgICAgIyBmaWxlcyB3aWxsIGxpbmsgaW4gdGhlIGxhc3Qgb25lIGNyZWF0ZWQuCisJICAgICAgdGVzdCAteiAiJGNvbmNhdF9jbWRzIiB8fCBjb25jYXRfY21kcz0kY29uY2F0X2NtZHN+CisJICAgICAgZXZhbCBjb25jYXRfY21kcz1cIlwke2NvbmNhdF9jbWRzfSRyZWxvYWRfY21kcyAkb2JqbGlzdCAkbGFzdF9yb2JqXCIKKwkgICAgICBpZiB0ZXN0IC1uICIkbGFzdF9yb2JqIjsgdGhlbgorCSAgICAgICAgZXZhbCBjb25jYXRfY21kcz1cIlwke2NvbmNhdF9jbWRzfX5cJFJNICRsYXN0X3JvYmpcIgorCSAgICAgIGZpCisJICAgICAgZGVsZmlsZXM9IiRkZWxmaWxlcyAkb3V0cHV0IgorCisJICAgIGVsc2UKKwkgICAgICBvdXRwdXQ9CisJICAgIGZpCisKKwkgICAgaWYgJHtza2lwcGVkX2V4cG9ydC1mYWxzZX07IHRoZW4KKwkgICAgICBmdW5jX3ZlcmJvc2UgImdlbmVyYXRpbmcgc3ltYm9sIGxpc3QgZm9yIFxgJGxpYm5hbWUubGEnIgorCSAgICAgIGV4cG9ydF9zeW1ib2xzPSIkb3V0cHV0X29iamRpci8kbGlibmFtZS5leHAiCisJICAgICAgJG9wdF9kcnlfcnVuIHx8ICRSTSAkZXhwb3J0X3N5bWJvbHMKKwkgICAgICBsaWJvYmpzPSRvdXRwdXQKKwkgICAgICAjIEFwcGVuZCB0aGUgY29tbWFuZCB0byBjcmVhdGUgdGhlIGV4cG9ydCBmaWxlLgorCSAgICAgIHRlc3QgLXogIiRjb25jYXRfY21kcyIgfHwgY29uY2F0X2NtZHM9JGNvbmNhdF9jbWRzfgorCSAgICAgIGV2YWwgY29uY2F0X2NtZHM9XCJcJGNvbmNhdF9jbWRzJGV4cG9ydF9zeW1ib2xzX2NtZHNcIgorCSAgICAgIGlmIHRlc3QgLW4gIiRsYXN0X3JvYmoiOyB0aGVuCisJCWV2YWwgY29uY2F0X2NtZHM9XCJcJGNvbmNhdF9jbWRzflwkUk0gJGxhc3Rfcm9ialwiCisJICAgICAgZmkKKwkgICAgZmkKKworCSAgICB0ZXN0IC1uICIkc2F2ZV9saWJvYmpzIiAmJgorCSAgICAgIGZ1bmNfdmVyYm9zZSAiY3JlYXRpbmcgYSB0ZW1wb3JhcnkgcmVsb2FkYWJsZSBvYmplY3QgZmlsZTogJG91dHB1dCIKKworCSAgICAjIExvb3AgdGhyb3VnaCB0aGUgY29tbWFuZHMgZ2VuZXJhdGVkIGFib3ZlIGFuZCBleGVjdXRlIHRoZW0uCisJICAgIHNhdmVfaWZzPSIkSUZTIjsgSUZTPSd+JworCSAgICBmb3IgY21kIGluICRjb25jYXRfY21kczsgZG8KKwkgICAgICBJRlM9IiRzYXZlX2lmcyIKKwkgICAgICAkb3B0X3NpbGVudCB8fCB7CisJCSAgZnVuY19xdW90ZV9mb3JfZXhwYW5kICIkY21kIgorCQkgIGV2YWwgImZ1bmNfZWNobyAkZnVuY19xdW90ZV9mb3JfZXhwYW5kX3Jlc3VsdCIKKwkgICAgICB9CisJICAgICAgJG9wdF9kcnlfcnVuIHx8IGV2YWwgIiRjbWQiIHx8IHsKKwkJbHRfZXhpdD0kPworCisJCSMgUmVzdG9yZSB0aGUgdW5pbnN0YWxsZWQgbGlicmFyeSBhbmQgZXhpdAorCQlpZiB0ZXN0ICIkbW9kZSIgPSByZWxpbms7IHRoZW4KKwkJICAoIGNkICIkb3V0cHV0X29iamRpciIgJiYgXAorCQkgICAgJFJNICIke3JlYWxuYW1lfVQiICYmIFwKKwkJICAgICRNViAiJHtyZWFsbmFtZX1VIiAiJHJlYWxuYW1lIiApCisJCWZpCisKKwkJZXhpdCAkbHRfZXhpdAorCSAgICAgIH0KKwkgICAgZG9uZQorCSAgICBJRlM9IiRzYXZlX2lmcyIKKworCSAgICBpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHNfcmVnZXgiICYmICR7c2tpcHBlZF9leHBvcnQtZmFsc2V9OyB0aGVuCisJICAgICAgZnVuY19zaG93X2V2YWwgJyRFR1JFUCAtZSAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IiAiJGV4cG9ydF9zeW1ib2xzIiA+ICIke2V4cG9ydF9zeW1ib2xzfVQiJworCSAgICAgIGZ1bmNfc2hvd19ldmFsICckTVYgIiR7ZXhwb3J0X3N5bWJvbHN9VCIgIiRleHBvcnRfc3ltYm9scyInCisJICAgIGZpCisJICBmaQorCisgICAgICAgICAgaWYgJHtza2lwcGVkX2V4cG9ydC1mYWxzZX07IHRoZW4KKwkgICAgaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzIiAmJiB0ZXN0IC1uICIkaW5jbHVkZV9leHBzeW1zIjsgdGhlbgorCSAgICAgIHRtcF9leHBvcnRfc3ltYm9scz0iJGV4cG9ydF9zeW1ib2xzIgorCSAgICAgIHRlc3QgLW4gIiRvcmlnX2V4cG9ydF9zeW1ib2xzIiAmJiB0bXBfZXhwb3J0X3N5bWJvbHM9IiRvcmlnX2V4cG9ydF9zeW1ib2xzIgorCSAgICAgICRvcHRfZHJ5X3J1biB8fCBldmFsICckRUNITyAiWCRpbmNsdWRlX2V4cHN5bXMiIHwgJFhzZWQgfCAkU1AyTkwgPj4gIiR0bXBfZXhwb3J0X3N5bWJvbHMiJworCSAgICBmaQorCisJICAgIGlmIHRlc3QgLW4gIiRvcmlnX2V4cG9ydF9zeW1ib2xzIjsgdGhlbgorCSAgICAgICMgVGhlIGdpdmVuIGV4cG9ydHNfc3ltYm9scyBmaWxlIGhhcyB0byBiZSBmaWx0ZXJlZCwgc28gZmlsdGVyIGl0LgorCSAgICAgIGZ1bmNfdmVyYm9zZSAiZmlsdGVyIHN5bWJvbCBsaXN0IGZvciBcYCRsaWJuYW1lLmxhJyB0byB0YWcgREFUQSBleHBvcnRzIgorCSAgICAgICMgRklYTUU6ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmZpbHRlciBwb3RlbnRpYWxseSBjb250YWlucyBsb3RzIG9mCisJICAgICAgIyAncycgY29tbWFuZHMgd2hpY2ggbm90IGFsbCBzZWRzIGNhbiBoYW5kbGUuIEdOVSBzZWQgc2hvdWxkIGJlIGZpbmUKKwkgICAgICAjIHRob3VnaC4gQWxzbywgdGhlIGZpbHRlciBzY2FsZXMgc3VwZXJsaW5lYXJseSB3aXRoIHRoZSBudW1iZXIgb2YKKwkgICAgICAjIGdsb2JhbCB2YXJpYWJsZXMuIGpvaW4oMSkgd291bGQgYmUgbmljZSBoZXJlLCBidXQgdW5mb3J0dW5hdGVseQorCSAgICAgICMgaXNuJ3QgYSBibGVzc2VkIHRvb2wuCisJICAgICAgJG9wdF9kcnlfcnVuIHx8ICRTRUQgLWUgJy9bICxdREFUQS8hZDtzLFwoLipcKVwoWyBcLF0uKlwpLHN8XlwxJHxcMVwyfCwnIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZmlsdGVyCisJICAgICAgZGVsZmlsZXM9IiRkZWxmaWxlcyAkZXhwb3J0X3N5bWJvbHMgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZmlsdGVyIgorCSAgICAgIGV4cG9ydF9zeW1ib2xzPSRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZgorCSAgICAgICRvcHRfZHJ5X3J1biB8fCAkU0VEIC1mICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmZpbHRlciA8ICRvcmlnX2V4cG9ydF9zeW1ib2xzID4gJGV4cG9ydF9zeW1ib2xzCisJICAgIGZpCisJICBmaQorCisJICBsaWJvYmpzPSRvdXRwdXQKKwkgICMgUmVzdG9yZSB0aGUgdmFsdWUgb2Ygb3V0cHV0LgorCSAgb3V0cHV0PSRzYXZlX291dHB1dAorCisJICBpZiB0ZXN0IC1uICIkY29udmVuaWVuY2UiICYmIHRlc3QgLW4gIiR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYyI7IHRoZW4KKwkgICAgZXZhbCBsaWJvYmpzPVwiXCRsaWJvYmpzICR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY1wiCisJICAgIHRlc3QgIlgkbGlib2JqcyIgPSAiWCAiICYmIGxpYm9ianM9CisJICBmaQorCSAgIyBFeHBhbmQgdGhlIGxpYnJhcnkgbGlua2luZyBjb21tYW5kcyBhZ2FpbiB0byByZXNldCB0aGUKKwkgICMgdmFsdWUgb2YgJGxpYm9ianMgZm9yIHBpZWNld2lzZSBsaW5raW5nLgorCisJICAjIERvIGVhY2ggb2YgdGhlIGFyY2hpdmUgY29tbWFuZHMuCisJICBpZiB0ZXN0ICIkbW9kdWxlIiA9IHllcyAmJiB0ZXN0IC1uICIkbW9kdWxlX2NtZHMiIDsgdGhlbgorCSAgICBpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHMiICYmIHRlc3QgLW4gIiRtb2R1bGVfZXhwc3ltX2NtZHMiOyB0aGVuCisJICAgICAgY21kcz0kbW9kdWxlX2V4cHN5bV9jbWRzCisJICAgIGVsc2UKKwkgICAgICBjbWRzPSRtb2R1bGVfY21kcworCSAgICBmaQorCSAgZWxzZQorCSAgICBpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHMiICYmIHRlc3QgLW4gIiRhcmNoaXZlX2V4cHN5bV9jbWRzIjsgdGhlbgorCSAgICAgIGNtZHM9JGFyY2hpdmVfZXhwc3ltX2NtZHMKKwkgICAgZWxzZQorCSAgICAgIGNtZHM9JGFyY2hpdmVfY21kcworCSAgICBmaQorCSAgZmkKKwlmaQorCisJaWYgdGVzdCAtbiAiJGRlbGZpbGVzIjsgdGhlbgorCSAgIyBBcHBlbmQgdGhlIGNvbW1hbmQgdG8gcmVtb3ZlIHRlbXBvcmFyeSBmaWxlcyB0byAkY21kcy4KKwkgIGV2YWwgY21kcz1cIlwkY21kc35cJFJNICRkZWxmaWxlc1wiCisJZmkKKworCSMgQWRkIGFueSBvYmplY3RzIGZyb20gcHJlbG9hZGVkIGNvbnZlbmllbmNlIGxpYnJhcmllcworCWlmIHRlc3QgLW4gIiRkbHByZWZpbGVzIjsgdGhlbgorCSAgZ2VudG9wPSIkb3V0cHV0X29iamRpci8ke291dHB1dG5hbWV9eCIKKwkgIGdlbmVyYXRlZD0iJGdlbmVyYXRlZCAkZ2VudG9wIgorCisJICBmdW5jX2V4dHJhY3RfYXJjaGl2ZXMgJGdlbnRvcCAkZGxwcmVmaWxlcworCSAgbGlib2Jqcz0iJGxpYm9ianMgJGZ1bmNfZXh0cmFjdF9hcmNoaXZlc19yZXN1bHQiCisJICB0ZXN0ICJYJGxpYm9ianMiID0gIlggIiAmJiBsaWJvYmpzPQorCWZpCisKKwlzYXZlX2lmcz0iJElGUyI7IElGUz0nficKKwlmb3IgY21kIGluICRjbWRzOyBkbworCSAgSUZTPSIkc2F2ZV9pZnMiCisJICBldmFsIGNtZD1cIiRjbWRcIgorCSAgJG9wdF9zaWxlbnQgfHwgeworCSAgICBmdW5jX3F1b3RlX2Zvcl9leHBhbmQgIiRjbWQiCisJICAgIGV2YWwgImZ1bmNfZWNobyAkZnVuY19xdW90ZV9mb3JfZXhwYW5kX3Jlc3VsdCIKKwkgIH0KKwkgICRvcHRfZHJ5X3J1biB8fCBldmFsICIkY21kIiB8fCB7CisJICAgIGx0X2V4aXQ9JD8KKworCSAgICAjIFJlc3RvcmUgdGhlIHVuaW5zdGFsbGVkIGxpYnJhcnkgYW5kIGV4aXQKKwkgICAgaWYgdGVzdCAiJG1vZGUiID0gcmVsaW5rOyB0aGVuCisJICAgICAgKCBjZCAiJG91dHB1dF9vYmpkaXIiICYmIFwKKwkgICAgICAgICRSTSAiJHtyZWFsbmFtZX1UIiAmJiBcCisJCSRNViAiJHtyZWFsbmFtZX1VIiAiJHJlYWxuYW1lIiApCisJICAgIGZpCisKKwkgICAgZXhpdCAkbHRfZXhpdAorCSAgfQorCWRvbmUKKwlJRlM9IiRzYXZlX2lmcyIKKworCSMgUmVzdG9yZSB0aGUgdW5pbnN0YWxsZWQgbGlicmFyeSBhbmQgZXhpdAorCWlmIHRlc3QgIiRtb2RlIiA9IHJlbGluazsgdGhlbgorCSAgJG9wdF9kcnlfcnVuIHx8IGV2YWwgJyhjZCAkb3V0cHV0X29iamRpciAmJiAkUk0gJHtyZWFsbmFtZX1UICYmICRNViAkcmVhbG5hbWUgJHtyZWFsbmFtZX1UICYmICRNViAke3JlYWxuYW1lfVUgJHJlYWxuYW1lKScgfHwgZXhpdCAkPworCisJICBpZiB0ZXN0IC1uICIkY29udmVuaWVuY2UiOyB0aGVuCisJICAgIGlmIHRlc3QgLXogIiR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYyI7IHRoZW4KKwkgICAgICBmdW5jX3Nob3dfZXZhbCAnJHtSTX1yICIkZ2VudG9wIicKKwkgICAgZmkKKwkgIGZpCisKKwkgIGV4aXQgJEVYSVRfU1VDQ0VTUworCWZpCisKKwkjIENyZWF0ZSBsaW5rcyB0byB0aGUgcmVhbCBsaWJyYXJ5LgorCWZvciBsaW5rbmFtZSBpbiAkbGlua25hbWVzOyBkbworCSAgaWYgdGVzdCAiJHJlYWxuYW1lIiAhPSAiJGxpbmtuYW1lIjsgdGhlbgorCSAgICBmdW5jX3Nob3dfZXZhbCAnKGNkICIkb3V0cHV0X29iamRpciIgJiYgJFJNICIkbGlua25hbWUiICYmICRMTl9TICIkcmVhbG5hbWUiICIkbGlua25hbWUiKScgJ2V4aXQgJD8nCisJICBmaQorCWRvbmUKKworCSMgSWYgLW1vZHVsZSBvciAtZXhwb3J0LWR5bmFtaWMgd2FzIHNwZWNpZmllZCwgc2V0IHRoZSBkbG5hbWUuCisJaWYgdGVzdCAiJG1vZHVsZSIgPSB5ZXMgfHwgdGVzdCAiJGV4cG9ydF9keW5hbWljIiA9IHllczsgdGhlbgorCSAgIyBPbiBhbGwga25vd24gb3BlcmF0aW5nIHN5c3RlbXMsIHRoZXNlIGFyZSBpZGVudGljYWwuCisJICBkbG5hbWU9IiRzb25hbWUiCisJZmkKKyAgICAgIGZpCisgICAgICA7OworCisgICAgb2JqKQorICAgICAgaWYgdGVzdCAtbiAiJGRsZmlsZXMkZGxwcmVmaWxlcyIgfHwgdGVzdCAiJGRsc2VsZiIgIT0gbm87IHRoZW4KKwlmdW5jX3dhcm5pbmcgIlxgLWRsb3BlbicgaXMgaWdub3JlZCBmb3Igb2JqZWN0cyIKKyAgICAgIGZpCisKKyAgICAgIGNhc2UgIiAkZGVwbGlicyIgaW4KKyAgICAgICpcIC1sKiB8ICpcIC1MKikKKwlmdW5jX3dhcm5pbmcgIlxgLWwnIGFuZCBcYC1MJyBhcmUgaWdub3JlZCBmb3Igb2JqZWN0cyIgOzsKKyAgICAgIGVzYWMKKworICAgICAgdGVzdCAtbiAiJHJwYXRoIiAmJiBcCisJZnVuY193YXJuaW5nICJcYC1ycGF0aCcgaXMgaWdub3JlZCBmb3Igb2JqZWN0cyIKKworICAgICAgdGVzdCAtbiAiJHhycGF0aCIgJiYgXAorCWZ1bmNfd2FybmluZyAiXGAtUicgaXMgaWdub3JlZCBmb3Igb2JqZWN0cyIKKworICAgICAgdGVzdCAtbiAiJHZpbmZvIiAmJiBcCisJZnVuY193YXJuaW5nICJcYC12ZXJzaW9uLWluZm8nIGlzIGlnbm9yZWQgZm9yIG9iamVjdHMiCisKKyAgICAgIHRlc3QgLW4gIiRyZWxlYXNlIiAmJiBcCisJZnVuY193YXJuaW5nICJcYC1yZWxlYXNlJyBpcyBpZ25vcmVkIGZvciBvYmplY3RzIgorCisgICAgICBjYXNlICRvdXRwdXQgaW4KKyAgICAgICoubG8pCisJdGVzdCAtbiAiJG9ianMkb2xkX2RlcGxpYnMiICYmIFwKKwkgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBidWlsZCBsaWJyYXJ5IG9iamVjdCBcYCRvdXRwdXQnIGZyb20gbm9uLWxpYnRvb2wgb2JqZWN0cyIKKworCWxpYm9iaj0kb3V0cHV0CisJZnVuY19sbzJvICIkbGlib2JqIgorCW9iaj0kZnVuY19sbzJvX3Jlc3VsdAorCTs7CisgICAgICAqKQorCWxpYm9iaj0KKwlvYmo9IiRvdXRwdXQiCisJOzsKKyAgICAgIGVzYWMKKworICAgICAgIyBEZWxldGUgdGhlIG9sZCBvYmplY3RzLgorICAgICAgJG9wdF9kcnlfcnVuIHx8ICRSTSAkb2JqICRsaWJvYmoKKworICAgICAgIyBPYmplY3RzIGZyb20gY29udmVuaWVuY2UgbGlicmFyaWVzLiAgVGhpcyBhc3N1bWVzCisgICAgICAjIHNpbmdsZS12ZXJzaW9uIGNvbnZlbmllbmNlIGxpYnJhcmllcy4gIFdoZW5ldmVyIHdlIGNyZWF0ZQorICAgICAgIyBkaWZmZXJlbnQgb25lcyBmb3IgUElDL25vbi1QSUMsIHRoaXMgd2UnbGwgaGF2ZSB0byBkdXBsaWNhdGUKKyAgICAgICMgdGhlIGV4dHJhY3Rpb24uCisgICAgICByZWxvYWRfY29udl9vYmpzPQorICAgICAgZ2VudG9wPQorICAgICAgIyByZWxvYWRfY21kcyBydW5zICRMRCBkaXJlY3RseSwgc28gbGV0IHVzIGdldCByaWQgb2YKKyAgICAgICMgLVdsIGZyb20gd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMgYW5kIGhvcGUgd2UgY2FuIGdldCBieSB3aXRoCisgICAgICAjIHR1cm5pbmcgY29tbWEgaW50byBzcGFjZS4uCisgICAgICB3bD0KKworICAgICAgaWYgdGVzdCAtbiAiJGNvbnZlbmllbmNlIjsgdGhlbgorCWlmIHRlc3QgLW4gIiR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYyI7IHRoZW4KKwkgIGV2YWwgdG1wX3dob2xlX2FyY2hpdmVfZmxhZ3M9XCIkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNcIgorCSAgcmVsb2FkX2NvbnZfb2Jqcz0kcmVsb2FkX29ianNcIGAkRUNITyAiWCR0bXBfd2hvbGVfYXJjaGl2ZV9mbGFncyIgfCAkWHNlZCAtZSAnc3wsfCB8ZydgCisJZWxzZQorCSAgZ2VudG9wPSIkb3V0cHV0X29iamRpci8ke29ian14IgorCSAgZ2VuZXJhdGVkPSIkZ2VuZXJhdGVkICRnZW50b3AiCisKKwkgIGZ1bmNfZXh0cmFjdF9hcmNoaXZlcyAkZ2VudG9wICRjb252ZW5pZW5jZQorCSAgcmVsb2FkX2NvbnZfb2Jqcz0iJHJlbG9hZF9vYmpzICRmdW5jX2V4dHJhY3RfYXJjaGl2ZXNfcmVzdWx0IgorCWZpCisgICAgICBmaQorCisgICAgICAjIENyZWF0ZSB0aGUgb2xkLXN0eWxlIG9iamVjdC4KKyAgICAgIHJlbG9hZF9vYmpzPSIkb2JqcyRvbGRfZGVwbGlicyAiYCRFQ0hPICJYJGxpYm9ianMiIHwgJFNQMk5MIHwgJFhzZWQgLWUgJy9cLicke2xpYmV4dH0kJy9kJyAtZSAnL1wubGliJC9kJyAtZSAiJGxvMm8iIHwgJE5MMlNQYCIgJHJlbG9hZF9jb252X29ianMiICMjIyB0ZXN0c3VpdGU6IHNraXAgbmVzdGVkIHF1b3RpbmcgdGVzdAorCisgICAgICBvdXRwdXQ9IiRvYmoiCisgICAgICBmdW5jX2V4ZWN1dGVfY21kcyAiJHJlbG9hZF9jbWRzIiAnZXhpdCAkPycKKworICAgICAgIyBFeGl0IGlmIHdlIGFyZW4ndCBkb2luZyBhIGxpYnJhcnkgb2JqZWN0IGZpbGUuCisgICAgICBpZiB0ZXN0IC16ICIkbGlib2JqIjsgdGhlbgorCWlmIHRlc3QgLW4gIiRnZW50b3AiOyB0aGVuCisJICBmdW5jX3Nob3dfZXZhbCAnJHtSTX1yICIkZ2VudG9wIicKKwlmaQorCisJZXhpdCAkRVhJVF9TVUNDRVNTCisgICAgICBmaQorCisgICAgICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiAhPSB5ZXM7IHRoZW4KKwlpZiB0ZXN0IC1uICIkZ2VudG9wIjsgdGhlbgorCSAgZnVuY19zaG93X2V2YWwgJyR7Uk19ciAiJGdlbnRvcCInCisJZmkKKworCSMgQ3JlYXRlIGFuIGludmFsaWQgbGlidG9vbCBvYmplY3QgaWYgbm8gUElDLCBzbyB0aGF0IHdlIGRvbid0CisJIyBhY2NpZGVudGFsbHkgbGluayBpdCBpbnRvIGEgcHJvZ3JhbS4KKwkjICRzaG93ICJlY2hvIHRpbWVzdGFtcCA+ICRsaWJvYmoiCisJIyAkb3B0X2RyeV9ydW4gfHwgZXZhbCAiZWNobyB0aW1lc3RhbXAgPiAkbGlib2JqIiB8fCBleGl0ICQ/CisJZXhpdCAkRVhJVF9TVUNDRVNTCisgICAgICBmaQorCisgICAgICBpZiB0ZXN0IC1uICIkcGljX2ZsYWciIHx8IHRlc3QgIiRwaWNfbW9kZSIgIT0gZGVmYXVsdDsgdGhlbgorCSMgT25seSBkbyBjb21tYW5kcyBpZiB3ZSByZWFsbHkgaGF2ZSBkaWZmZXJlbnQgUElDIG9iamVjdHMuCisJcmVsb2FkX29ianM9IiRsaWJvYmpzICRyZWxvYWRfY29udl9vYmpzIgorCW91dHB1dD0iJGxpYm9iaiIKKwlmdW5jX2V4ZWN1dGVfY21kcyAiJHJlbG9hZF9jbWRzIiAnZXhpdCAkPycKKyAgICAgIGZpCisKKyAgICAgIGlmIHRlc3QgLW4gIiRnZW50b3AiOyB0aGVuCisJZnVuY19zaG93X2V2YWwgJyR7Uk19ciAiJGdlbnRvcCInCisgICAgICBmaQorCisgICAgICBleGl0ICRFWElUX1NVQ0NFU1MKKyAgICAgIDs7CisKKyAgICBwcm9nKQorICAgICAgY2FzZSAkaG9zdCBpbgorCSpjeWd3aW4qKSBmdW5jX3N0cmlwbmFtZSAnJyAnLmV4ZScgIiRvdXRwdXQiCisJICAgICAgICAgIG91dHB1dD0kZnVuY19zdHJpcG5hbWVfcmVzdWx0LmV4ZTs7CisgICAgICBlc2FjCisgICAgICB0ZXN0IC1uICIkdmluZm8iICYmIFwKKwlmdW5jX3dhcm5pbmcgIlxgLXZlcnNpb24taW5mbycgaXMgaWdub3JlZCBmb3IgcHJvZ3JhbXMiCisKKyAgICAgIHRlc3QgLW4gIiRyZWxlYXNlIiAmJiBcCisJZnVuY193YXJuaW5nICJcYC1yZWxlYXNlJyBpcyBpZ25vcmVkIGZvciBwcm9ncmFtcyIKKworICAgICAgdGVzdCAiJHByZWxvYWQiID0geWVzIFwKKyAgICAgICAgJiYgdGVzdCAiJGRsb3Blbl9zdXBwb3J0IiA9IHVua25vd24gXAorCSYmIHRlc3QgIiRkbG9wZW5fc2VsZiIgPSB1bmtub3duIFwKKwkmJiB0ZXN0ICIkZGxvcGVuX3NlbGZfc3RhdGljIiA9IHVua25vd24gJiYgXAorCSAgZnVuY193YXJuaW5nICJcYExUX0lOSVQoW2Rsb3Blbl0pJyBub3QgdXNlZC4gQXNzdW1pbmcgbm8gZGxvcGVuIHN1cHBvcnQuIgorCisgICAgICBjYXNlICRob3N0IGluCisgICAgICAqLSotcmhhcHNvZHkqIHwgKi0qLWRhcndpbjEuWzAxMl0pCisJIyBPbiBSaGFwc29keSByZXBsYWNlIHRoZSBDIGxpYnJhcnkgaXMgdGhlIFN5c3RlbSBmcmFtZXdvcmsKKwljb21waWxlX2RlcGxpYnM9YCRFQ0hPICJYICRjb21waWxlX2RlcGxpYnMiIHwgJFhzZWQgLWUgJ3MvIC1sYyAvIFN5c3RlbS5sdGZyYW1ld29yayAvJ2AKKwlmaW5hbGl6ZV9kZXBsaWJzPWAkRUNITyAiWCAkZmluYWxpemVfZGVwbGlicyIgfCAkWHNlZCAtZSAncy8gLWxjIC8gU3lzdGVtLmx0ZnJhbWV3b3JrIC8nYAorCTs7CisgICAgICBlc2FjCisKKyAgICAgIGNhc2UgJGhvc3QgaW4KKyAgICAgICotKi1kYXJ3aW4qKQorCSMgRG9uJ3QgYWxsb3cgbGF6eSBsaW5raW5nLCBpdCBicmVha3MgQysrIGdsb2JhbCBjb25zdHJ1Y3RvcnMKKwkjIEJ1dCBpcyBzdXBwb3NlZGx5IGZpeGVkIG9uIDEwLjQgb3IgbGF0ZXIgKHlheSEpLgorCWlmIHRlc3QgIiR0YWduYW1lIiA9IENYWCA7IHRoZW4KKwkgIGNhc2UgJHtNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQtMTAuMH0gaW4KKwkgICAgMTAuWzAxMjNdKQorCSAgICAgIGNvbXBpbGVfY29tbWFuZD0iJGNvbXBpbGVfY29tbWFuZCAke3dsfS1iaW5kX2F0X2xvYWQiCisJICAgICAgZmluYWxpemVfY29tbWFuZD0iJGZpbmFsaXplX2NvbW1hbmQgJHt3bH0tYmluZF9hdF9sb2FkIgorCSAgICA7OworCSAgZXNhYworCWZpCisJIyBUaW1lIHRvIGNoYW5nZSBhbGwgb3VyICJmb28ubHRmcmFtZXdvcmsiIHN0dWZmIGJhY2sgdG8gIi1mcmFtZXdvcmsgZm9vIgorCWNvbXBpbGVfZGVwbGlicz1gJEVDSE8gIlggJGNvbXBpbGVfZGVwbGlicyIgfCAkWHNlZCAtZSAncyUgXChbXiAkXSpcKS5sdGZyYW1ld29yayUgLWZyYW1ld29yayBcMSVnJ2AKKwlmaW5hbGl6ZV9kZXBsaWJzPWAkRUNITyAiWCAkZmluYWxpemVfZGVwbGlicyIgfCAkWHNlZCAtZSAncyUgXChbXiAkXSpcKS5sdGZyYW1ld29yayUgLWZyYW1ld29yayBcMSVnJ2AKKwk7OworICAgICAgZXNhYworCisKKyAgICAgICMgbW92ZSBsaWJyYXJ5IHNlYXJjaCBwYXRocyB0aGF0IGNvaW5jaWRlIHdpdGggcGF0aHMgdG8gbm90IHlldAorICAgICAgIyBpbnN0YWxsZWQgbGlicmFyaWVzIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpYnJhcnkgc2VhcmNoIGxpc3QKKyAgICAgIG5ld19saWJzPQorICAgICAgZm9yIHBhdGggaW4gJG5vdGluc3RfcGF0aDsgZG8KKwljYXNlICIgJG5ld19saWJzICIgaW4KKwkqIiAtTCRwYXRoLyRvYmpkaXIgIiopIDs7CisJKikKKwkgIGNhc2UgIiAkY29tcGlsZV9kZXBsaWJzICIgaW4KKwkgICoiIC1MJHBhdGgvJG9iamRpciAiKikKKwkgICAgbmV3X2xpYnM9IiRuZXdfbGlicyAtTCRwYXRoLyRvYmpkaXIiIDs7CisJICBlc2FjCisJICA7OworCWVzYWMKKyAgICAgIGRvbmUKKyAgICAgIGZvciBkZXBsaWIgaW4gJGNvbXBpbGVfZGVwbGliczsgZG8KKwljYXNlICRkZXBsaWIgaW4KKwktTCopCisJICBjYXNlICIgJG5ld19saWJzICIgaW4KKwkgICoiICRkZXBsaWIgIiopIDs7CisJICAqKSBuZXdfbGlicz0iJG5ld19saWJzICRkZXBsaWIiIDs7CisJICBlc2FjCisJICA7OworCSopIG5ld19saWJzPSIkbmV3X2xpYnMgJGRlcGxpYiIgOzsKKwllc2FjCisgICAgICBkb25lCisgICAgICBjb21waWxlX2RlcGxpYnM9IiRuZXdfbGlicyIKKworCisgICAgICBjb21waWxlX2NvbW1hbmQ9IiRjb21waWxlX2NvbW1hbmQgJGNvbXBpbGVfZGVwbGlicyIKKyAgICAgIGZpbmFsaXplX2NvbW1hbmQ9IiRmaW5hbGl6ZV9jb21tYW5kICRmaW5hbGl6ZV9kZXBsaWJzIgorCisgICAgICBpZiB0ZXN0IC1uICIkcnBhdGgkeHJwYXRoIjsgdGhlbgorCSMgSWYgdGhlIHVzZXIgc3BlY2lmaWVkIGFueSBycGF0aCBmbGFncywgdGhlbiBhZGQgdGhlbS4KKwlmb3IgbGliZGlyIGluICRycGF0aCAkeHJwYXRoOyBkbworCSAgIyBUaGlzIGlzIHRoZSBtYWdpYyB0byB1c2UgLXJwYXRoLgorCSAgY2FzZSAiJGZpbmFsaXplX3JwYXRoICIgaW4KKwkgICoiICRsaWJkaXIgIiopIDs7CisJICAqKSBmaW5hbGl6ZV9ycGF0aD0iJGZpbmFsaXplX3JwYXRoICRsaWJkaXIiIDs7CisJICBlc2FjCisJZG9uZQorICAgICAgZmkKKworICAgICAgIyBOb3cgaGFyZGNvZGUgdGhlIGxpYnJhcnkgcGF0aHMKKyAgICAgIHJwYXRoPQorICAgICAgaGFyZGNvZGVfbGliZGlycz0KKyAgICAgIGZvciBsaWJkaXIgaW4gJGNvbXBpbGVfcnBhdGggJGZpbmFsaXplX3JwYXRoOyBkbworCWlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIjsgdGhlbgorCSAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiOyB0aGVuCisJICAgIGlmIHRlc3QgLXogIiRoYXJkY29kZV9saWJkaXJzIjsgdGhlbgorCSAgICAgIGhhcmRjb2RlX2xpYmRpcnM9IiRsaWJkaXIiCisJICAgIGVsc2UKKwkgICAgICAjIEp1c3QgYWNjdW11bGF0ZSB0aGUgdW5pcXVlIGxpYmRpcnMuCisJICAgICAgY2FzZSAkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRoYXJkY29kZV9saWJkaXJzJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IgaW4KKwkgICAgICAqIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yJGxpYmRpciRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIiopCisJCTs7CisJICAgICAgKikKKwkJaGFyZGNvZGVfbGliZGlycz0iJGhhcmRjb2RlX2xpYmRpcnMkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRsaWJkaXIiCisJCTs7CisJICAgICAgZXNhYworCSAgICBmaQorCSAgZWxzZQorCSAgICBldmFsIGZsYWc9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCisJICAgIHJwYXRoPSIkcnBhdGggJGZsYWciCisJICBmaQorCWVsaWYgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyIjsgdGhlbgorCSAgY2FzZSAiJHBlcm1fcnBhdGggIiBpbgorCSAgKiIgJGxpYmRpciAiKikgOzsKKwkgICopIHBlcm1fcnBhdGg9IiRwZXJtX3JwYXRoICRsaWJkaXIiIDs7CisJICBlc2FjCisJZmkKKwljYXNlICRob3N0IGluCisJKi0qLWN5Z3dpbiogfCAqLSotbWluZ3cqIHwgKi0qLXB3MzIqIHwgKi0qLW9zMiogfCAqLWNlZ2NjKikKKwkgIHRlc3RiaW5kaXI9YCR7RUNIT30gIiRsaWJkaXIiIHwgJHtTRUR9IC1lICdzKi9saWIkKi9iaW4qJ2AKKwkgIGNhc2UgOiRkbGxzZWFyY2hwYXRoOiBpbgorCSAgKiI6JGxpYmRpcjoiKikgOzsKKwkgIDo6KSBkbGxzZWFyY2hwYXRoPSRsaWJkaXI7OworCSAgKikgZGxsc2VhcmNocGF0aD0iJGRsbHNlYXJjaHBhdGg6JGxpYmRpciI7OworCSAgZXNhYworCSAgY2FzZSA6JGRsbHNlYXJjaHBhdGg6IGluCisJICAqIjokdGVzdGJpbmRpcjoiKikgOzsKKwkgIDo6KSBkbGxzZWFyY2hwYXRoPSR0ZXN0YmluZGlyOzsKKwkgICopIGRsbHNlYXJjaHBhdGg9IiRkbGxzZWFyY2hwYXRoOiR0ZXN0YmluZGlyIjs7CisJICBlc2FjCisJICA7OworCWVzYWMKKyAgICAgIGRvbmUKKyAgICAgICMgU3Vic3RpdHV0ZSB0aGUgaGFyZGNvZGVkIGxpYmRpcnMgaW50byB0aGUgcnBhdGguCisgICAgICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciIgJiYKKwkgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcnMiOyB0aGVuCisJbGliZGlyPSIkaGFyZGNvZGVfbGliZGlycyIKKwlldmFsIHJwYXRoPVwiICRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKyAgICAgIGZpCisgICAgICBjb21waWxlX3JwYXRoPSIkcnBhdGgiCisKKyAgICAgIHJwYXRoPQorICAgICAgaGFyZGNvZGVfbGliZGlycz0KKyAgICAgIGZvciBsaWJkaXIgaW4gJGZpbmFsaXplX3JwYXRoOyBkbworCWlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIjsgdGhlbgorCSAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiOyB0aGVuCisJICAgIGlmIHRlc3QgLXogIiRoYXJkY29kZV9saWJkaXJzIjsgdGhlbgorCSAgICAgIGhhcmRjb2RlX2xpYmRpcnM9IiRsaWJkaXIiCisJICAgIGVsc2UKKwkgICAgICAjIEp1c3QgYWNjdW11bGF0ZSB0aGUgdW5pcXVlIGxpYmRpcnMuCisJICAgICAgY2FzZSAkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRoYXJkY29kZV9saWJkaXJzJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IgaW4KKwkgICAgICAqIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yJGxpYmRpciRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIiopCisJCTs7CisJICAgICAgKikKKwkJaGFyZGNvZGVfbGliZGlycz0iJGhhcmRjb2RlX2xpYmRpcnMkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRsaWJkaXIiCisJCTs7CisJICAgICAgZXNhYworCSAgICBmaQorCSAgZWxzZQorCSAgICBldmFsIGZsYWc9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCisJICAgIHJwYXRoPSIkcnBhdGggJGZsYWciCisJICBmaQorCWVsaWYgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyIjsgdGhlbgorCSAgY2FzZSAiJGZpbmFsaXplX3Blcm1fcnBhdGggIiBpbgorCSAgKiIgJGxpYmRpciAiKikgOzsKKwkgICopIGZpbmFsaXplX3Blcm1fcnBhdGg9IiRmaW5hbGl6ZV9wZXJtX3JwYXRoICRsaWJkaXIiIDs7CisJICBlc2FjCisJZmkKKyAgICAgIGRvbmUKKyAgICAgICMgU3Vic3RpdHV0ZSB0aGUgaGFyZGNvZGVkIGxpYmRpcnMgaW50byB0aGUgcnBhdGguCisgICAgICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciIgJiYKKwkgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcnMiOyB0aGVuCisJbGliZGlyPSIkaGFyZGNvZGVfbGliZGlycyIKKwlldmFsIHJwYXRoPVwiICRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKyAgICAgIGZpCisgICAgICBmaW5hbGl6ZV9ycGF0aD0iJHJwYXRoIgorCisgICAgICBpZiB0ZXN0IC1uICIkbGlib2JqcyIgJiYgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiA9IHllczsgdGhlbgorCSMgVHJhbnNmb3JtIGFsbCB0aGUgbGlicmFyeSBvYmplY3RzIGludG8gc3RhbmRhcmQgb2JqZWN0cy4KKwljb21waWxlX2NvbW1hbmQ9YCRFQ0hPICJYJGNvbXBpbGVfY29tbWFuZCIgfCAkU1AyTkwgfCAkWHNlZCAtZSAiJGxvMm8iIHwgJE5MMlNQYAorCWZpbmFsaXplX2NvbW1hbmQ9YCRFQ0hPICJYJGZpbmFsaXplX2NvbW1hbmQiIHwgJFNQMk5MIHwgJFhzZWQgLWUgIiRsbzJvIiB8ICROTDJTUGAKKyAgICAgIGZpCisKKyAgICAgIGZ1bmNfZ2VuZXJhdGVfZGxzeW1zICIkb3V0cHV0bmFtZSIgIkBQUk9HUkFNQCIgIm5vIgorCisgICAgICAjIHRlbXBsYXRlIHByZWxpbmtpbmcgc3RlcAorICAgICAgaWYgdGVzdCAtbiAiJHByZWxpbmtfY21kcyI7IHRoZW4KKwlmdW5jX2V4ZWN1dGVfY21kcyAiJHByZWxpbmtfY21kcyIgJ2V4aXQgJD8nCisgICAgICBmaQorCisgICAgICB3cmFwcGVyc19yZXF1aXJlZD15ZXMKKyAgICAgIGNhc2UgJGhvc3QgaW4KKyAgICAgICpjeWd3aW4qIHwgKm1pbmd3KiApCisgICAgICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiICE9IHllczsgdGhlbgorICAgICAgICAgIHdyYXBwZXJzX3JlcXVpcmVkPW5vCisgICAgICAgIGZpCisgICAgICAgIDs7CisgICAgICAqY2VnY2MpCisgICAgICAgICMgRGlzYWJsZSB3cmFwcGVycyBmb3IgY2VnY2MsIHdlIGFyZSBjcm9zcyBjb21waWxpbmcgYW55d2F5LgorICAgICAgICB3cmFwcGVyc19yZXF1aXJlZD1ubworICAgICAgICA7OworICAgICAgKikKKyAgICAgICAgaWYgdGVzdCAiJG5lZWRfcmVsaW5rIiA9IG5vIHx8IHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiICE9IHllczsgdGhlbgorICAgICAgICAgIHdyYXBwZXJzX3JlcXVpcmVkPW5vCisgICAgICAgIGZpCisgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICBpZiB0ZXN0ICIkd3JhcHBlcnNfcmVxdWlyZWQiID0gbm87IHRoZW4KKwkjIFJlcGxhY2UgdGhlIG91dHB1dCBmaWxlIHNwZWNpZmljYXRpb24uCisJY29tcGlsZV9jb21tYW5kPWAkRUNITyAiWCRjb21waWxlX2NvbW1hbmQiIHwgJFhzZWQgLWUgJ3MlQE9VVFBVVEAlJyIkb3V0cHV0IiclZydgCisJbGlua19jb21tYW5kPSIkY29tcGlsZV9jb21tYW5kJGNvbXBpbGVfcnBhdGgiCisKKwkjIFdlIGhhdmUgbm8gdW5pbnN0YWxsZWQgbGlicmFyeSBkZXBlbmRlbmNpZXMsIHNvIGZpbmFsaXplIHJpZ2h0IG5vdy4KKwlleGl0X3N0YXR1cz0wCisJZnVuY19zaG93X2V2YWwgIiRsaW5rX2NvbW1hbmQiICdleGl0X3N0YXR1cz0kPycKKworCSMgRGVsZXRlIHRoZSBnZW5lcmF0ZWQgZmlsZXMuCisJaWYgdGVzdCAtZiAiJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfVMuJHtvYmpleHR9IjsgdGhlbgorCSAgZnVuY19zaG93X2V2YWwgJyRSTSAiJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfVMuJHtvYmpleHR9IicKKwlmaQorCisJZXhpdCAkZXhpdF9zdGF0dXMKKyAgICAgIGZpCisKKyAgICAgIGlmIHRlc3QgLW4gIiRjb21waWxlX3NobGlicGF0aCRmaW5hbGl6ZV9zaGxpYnBhdGgiOyB0aGVuCisJY29tcGlsZV9jb21tYW5kPSIkc2hsaWJwYXRoX3Zhcj1cIiRjb21waWxlX3NobGlicGF0aCRmaW5hbGl6ZV9zaGxpYnBhdGhcJCRzaGxpYnBhdGhfdmFyXCIgJGNvbXBpbGVfY29tbWFuZCIKKyAgICAgIGZpCisgICAgICBpZiB0ZXN0IC1uICIkZmluYWxpemVfc2hsaWJwYXRoIjsgdGhlbgorCWZpbmFsaXplX2NvbW1hbmQ9IiRzaGxpYnBhdGhfdmFyPVwiJGZpbmFsaXplX3NobGlicGF0aFwkJHNobGlicGF0aF92YXJcIiAkZmluYWxpemVfY29tbWFuZCIKKyAgICAgIGZpCisKKyAgICAgIGNvbXBpbGVfdmFyPQorICAgICAgZmluYWxpemVfdmFyPQorICAgICAgaWYgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyIjsgdGhlbgorCWlmIHRlc3QgLW4gIiRwZXJtX3JwYXRoIjsgdGhlbgorCSAgIyBXZSBzaG91bGQgc2V0IHRoZSBydW5wYXRoX3Zhci4KKwkgIHJwYXRoPQorCSAgZm9yIGRpciBpbiAkcGVybV9ycGF0aDsgZG8KKwkgICAgcnBhdGg9IiRycGF0aCRkaXI6IgorCSAgZG9uZQorCSAgY29tcGlsZV92YXI9IiRydW5wYXRoX3Zhcj1cIiRycGF0aFwkJHJ1bnBhdGhfdmFyXCIgIgorCWZpCisJaWYgdGVzdCAtbiAiJGZpbmFsaXplX3Blcm1fcnBhdGgiOyB0aGVuCisJICAjIFdlIHNob3VsZCBzZXQgdGhlIHJ1bnBhdGhfdmFyLgorCSAgcnBhdGg9CisJICBmb3IgZGlyIGluICRmaW5hbGl6ZV9wZXJtX3JwYXRoOyBkbworCSAgICBycGF0aD0iJHJwYXRoJGRpcjoiCisJICBkb25lCisJICBmaW5hbGl6ZV92YXI9IiRydW5wYXRoX3Zhcj1cIiRycGF0aFwkJHJ1bnBhdGhfdmFyXCIgIgorCWZpCisgICAgICBmaQorCisgICAgICBpZiB0ZXN0ICIkbm9faW5zdGFsbCIgPSB5ZXM7IHRoZW4KKwkjIFdlIGRvbid0IG5lZWQgdG8gY3JlYXRlIGEgd3JhcHBlciBzY3JpcHQuCisJbGlua19jb21tYW5kPSIkY29tcGlsZV92YXIkY29tcGlsZV9jb21tYW5kJGNvbXBpbGVfcnBhdGgiCisJIyBSZXBsYWNlIHRoZSBvdXRwdXQgZmlsZSBzcGVjaWZpY2F0aW9uLgorCWxpbmtfY29tbWFuZD1gJEVDSE8gIlgkbGlua19jb21tYW5kIiB8ICRYc2VkIC1lICdzJUBPVVRQVVRAJSciJG91dHB1dCInJWcnYAorCSMgRGVsZXRlIHRoZSBvbGQgb3V0cHV0IGZpbGUuCisJJG9wdF9kcnlfcnVuIHx8ICRSTSAkb3V0cHV0CisJIyBMaW5rIHRoZSBleGVjdXRhYmxlIGFuZCBleGl0CisJZnVuY19zaG93X2V2YWwgIiRsaW5rX2NvbW1hbmQiICdleGl0ICQ/JworCWV4aXQgJEVYSVRfU1VDQ0VTUworICAgICAgZmkKKworICAgICAgaWYgdGVzdCAiJGhhcmRjb2RlX2FjdGlvbiIgPSByZWxpbms7IHRoZW4KKwkjIEZhc3QgaW5zdGFsbGF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQKKwlsaW5rX2NvbW1hbmQ9IiRjb21waWxlX3ZhciRjb21waWxlX2NvbW1hbmQkY29tcGlsZV9ycGF0aCIKKwlyZWxpbmtfY29tbWFuZD0iJGZpbmFsaXplX3ZhciRmaW5hbGl6ZV9jb21tYW5kJGZpbmFsaXplX3JwYXRoIgorCisJZnVuY193YXJuaW5nICJ0aGlzIHBsYXRmb3JtIGRvZXMgbm90IGxpa2UgdW5pbnN0YWxsZWQgc2hhcmVkIGxpYnJhcmllcyIKKwlmdW5jX3dhcm5pbmcgIlxgJG91dHB1dCcgd2lsbCBiZSByZWxpbmtlZCBkdXJpbmcgaW5zdGFsbGF0aW9uIgorICAgICAgZWxzZQorCWlmIHRlc3QgIiRmYXN0X2luc3RhbGwiICE9IG5vOyB0aGVuCisJICBsaW5rX2NvbW1hbmQ9IiRmaW5hbGl6ZV92YXIkY29tcGlsZV9jb21tYW5kJGZpbmFsaXplX3JwYXRoIgorCSAgaWYgdGVzdCAiJGZhc3RfaW5zdGFsbCIgPSB5ZXM7IHRoZW4KKwkgICAgcmVsaW5rX2NvbW1hbmQ9YCRFQ0hPICJYJGNvbXBpbGVfdmFyJGNvbXBpbGVfY29tbWFuZCRjb21waWxlX3JwYXRoIiB8ICRYc2VkIC1lICdzJUBPVVRQVVRAJVwkcHJvZ2Rpci9cJGZpbGUlZydgCisJICBlbHNlCisJICAgICMgZmFzdF9pbnN0YWxsIGlzIHNldCB0byBuZWVkbGVzcworCSAgICByZWxpbmtfY29tbWFuZD0KKwkgIGZpCisJZWxzZQorCSAgbGlua19jb21tYW5kPSIkY29tcGlsZV92YXIkY29tcGlsZV9jb21tYW5kJGNvbXBpbGVfcnBhdGgiCisJICByZWxpbmtfY29tbWFuZD0iJGZpbmFsaXplX3ZhciRmaW5hbGl6ZV9jb21tYW5kJGZpbmFsaXplX3JwYXRoIgorCWZpCisgICAgICBmaQorCisgICAgICAjIFJlcGxhY2UgdGhlIG91dHB1dCBmaWxlIHNwZWNpZmljYXRpb24uCisgICAgICBsaW5rX2NvbW1hbmQ9YCRFQ0hPICJYJGxpbmtfY29tbWFuZCIgfCAkWHNlZCAtZSAncyVAT1VUUFVUQCUnIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lIiclZydgCisKKyAgICAgICMgRGVsZXRlIHRoZSBvbGQgb3V0cHV0IGZpbGVzLgorICAgICAgJG9wdF9kcnlfcnVuIHx8ICRSTSAkb3V0cHV0ICRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lICRvdXRwdXRfb2JqZGlyL2x0LSRvdXRwdXRuYW1lCisKKyAgICAgIGZ1bmNfc2hvd19ldmFsICIkbGlua19jb21tYW5kIiAnZXhpdCAkPycKKworICAgICAgIyBOb3cgY3JlYXRlIHRoZSB3cmFwcGVyIHNjcmlwdC4KKyAgICAgIGZ1bmNfdmVyYm9zZSAiY3JlYXRpbmcgJG91dHB1dCIKKworICAgICAgIyBRdW90ZSB0aGUgcmVsaW5rIGNvbW1hbmQgZm9yIHNoaXBwaW5nLgorICAgICAgaWYgdGVzdCAtbiAiJHJlbGlua19jb21tYW5kIjsgdGhlbgorCSMgUHJlc2VydmUgYW55IHZhcmlhYmxlcyB0aGF0IG1heSBhZmZlY3QgY29tcGlsZXIgYmVoYXZpb3IKKwlmb3IgdmFyIGluICR2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluazsgZG8KKwkgIGlmIGV2YWwgdGVzdCAteiBcIlwkeyR2YXIrc2V0fVwiOyB0aGVuCisJICAgIHJlbGlua19jb21tYW5kPSJ7IHRlc3QgLXogXCJcJHskdmFyK3NldH1cIiB8fCAkbHRfdW5zZXQgJHZhciB8fCB7ICR2YXI9OyBleHBvcnQgJHZhcjsgfTsgfTsgJHJlbGlua19jb21tYW5kIgorCSAgZWxpZiBldmFsIHZhcl92YWx1ZT1cJCR2YXI7IHRlc3QgLXogIiR2YXJfdmFsdWUiOyB0aGVuCisJICAgIHJlbGlua19jb21tYW5kPSIkdmFyPTsgZXhwb3J0ICR2YXI7ICRyZWxpbmtfY29tbWFuZCIKKwkgIGVsc2UKKwkgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJHZhcl92YWx1ZSIKKwkgICAgcmVsaW5rX2NvbW1hbmQ9IiR2YXI9JGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0OyBleHBvcnQgJHZhcjsgJHJlbGlua19jb21tYW5kIgorCSAgZmkKKwlkb25lCisJcmVsaW5rX2NvbW1hbmQ9IihjZCBgcHdkYDsgJHJlbGlua19jb21tYW5kKSIKKwlyZWxpbmtfY29tbWFuZD1gJEVDSE8gIlgkcmVsaW5rX2NvbW1hbmQiIHwgJFhzZWQgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYAorICAgICAgZmkKKworICAgICAgIyBRdW90ZSAkRUNITyBmb3Igc2hpcHBpbmcuCisgICAgICBpZiB0ZXN0ICJYJEVDSE8iID0gIlgkU0hFTEwgJHByb2dwYXRoIC0tZmFsbGJhY2stZWNobyI7IHRoZW4KKwljYXNlICRwcm9ncGF0aCBpbgorCVtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgcWVjaG89IiRTSEVMTCAkcHJvZ3BhdGggLS1mYWxsYmFjay1lY2hvIjs7CisJKikgcWVjaG89IiRTSEVMTCBgcHdkYC8kcHJvZ3BhdGggLS1mYWxsYmFjay1lY2hvIjs7CisJZXNhYworCXFlY2hvPWAkRUNITyAiWCRxZWNobyIgfCAkWHNlZCAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCisgICAgICBlbHNlCisJcWVjaG89YCRFQ0hPICJYJEVDSE8iIHwgJFhzZWQgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYAorICAgICAgZmkKKworICAgICAgIyBPbmx5IGFjdHVhbGx5IGRvIHRoaW5ncyBpZiBub3QgaW4gZHJ5IHJ1biBtb2RlLgorICAgICAgJG9wdF9kcnlfcnVuIHx8IHsKKwkjIHdpbjMyIHdpbGwgdGhpbmsgdGhlIHNjcmlwdCBpcyBhIGJpbmFyeSBpZiBpdCBoYXMKKwkjIGEgLmV4ZSBzdWZmaXgsIHNvIHdlIHN0cmlwIGl0IG9mZiBoZXJlLgorCWNhc2UgJG91dHB1dCBpbgorCSAgKi5leGUpIGZ1bmNfc3RyaXBuYW1lICcnICcuZXhlJyAiJG91dHB1dCIKKwkgICAgICAgICBvdXRwdXQ9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCA7OworCWVzYWMKKwkjIHRlc3QgZm9yIGN5Z3dpbiBiZWNhdXNlIG12IGZhaWxzIHcvbyAuZXhlIGV4dGVuc2lvbnMKKwljYXNlICRob3N0IGluCisJICAqY3lnd2luKikKKwkgICAgZXhlZXh0PS5leGUKKwkgICAgZnVuY19zdHJpcG5hbWUgJycgJy5leGUnICIkb3V0cHV0bmFtZSIKKwkgICAgb3V0cHV0bmFtZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0IDs7CisJICAqKSBleGVleHQ9IDs7CisJZXNhYworCWNhc2UgJGhvc3QgaW4KKwkgICpjeWd3aW4qIHwgKm1pbmd3KiApCisJICAgIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgIiRvdXRwdXQiICIiICIuIgorCSAgICBvdXRwdXRfbmFtZT0kZnVuY19iYXNlbmFtZV9yZXN1bHQKKwkgICAgb3V0cHV0X3BhdGg9JGZ1bmNfZGlybmFtZV9yZXN1bHQKKwkgICAgY3dyYXBwZXJzb3VyY2U9IiRvdXRwdXRfcGF0aC8kb2JqZGlyL2x0LSRvdXRwdXRfbmFtZS5jIgorCSAgICBjd3JhcHBlcj0iJG91dHB1dF9wYXRoLyRvdXRwdXRfbmFtZS5leGUiCisJICAgICRSTSAkY3dyYXBwZXJzb3VyY2UgJGN3cmFwcGVyCisJICAgIHRyYXAgIiRSTSAkY3dyYXBwZXJzb3VyY2UgJGN3cmFwcGVyOyBleGl0ICRFWElUX0ZBSUxVUkUiIDEgMiAxNQorCisJICAgIGZ1bmNfZW1pdF9jd3JhcHBlcmV4ZV9zcmMgPiAkY3dyYXBwZXJzb3VyY2UKKworCSAgICAjIFRoZSB3cmFwcGVyIGV4ZWN1dGFibGUgaXMgYnVpbHQgdXNpbmcgdGhlICRob3N0IGNvbXBpbGVyLAorCSAgICAjIGJlY2F1c2UgaXQgY29udGFpbnMgJGhvc3QgcGF0aHMgYW5kIGZpbGVzLiBJZiBjcm9zcy0KKwkgICAgIyBjb21waWxpbmcsIGl0LCBsaWtlIHRoZSB0YXJnZXQgZXhlY3V0YWJsZSwgbXVzdCBiZQorCSAgICAjIGV4ZWN1dGVkIG9uIHRoZSAkaG9zdCBvciB1bmRlciBhbiBlbXVsYXRpb24gZW52aXJvbm1lbnQuCisJICAgICRvcHRfZHJ5X3J1biB8fCB7CisJICAgICAgJExUQ0MgJExUQ0ZMQUdTIC1vICRjd3JhcHBlciAkY3dyYXBwZXJzb3VyY2UKKwkgICAgICAkU1RSSVAgJGN3cmFwcGVyCisJICAgIH0KKworCSAgICAjIE5vdywgY3JlYXRlIHRoZSB3cmFwcGVyIHNjcmlwdCBmb3IgZnVuY19zb3VyY2UgdXNlOgorCSAgICBmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lICRjd3JhcHBlcgorCSAgICAkUk0gJGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWVfcmVzdWx0CisJICAgIHRyYXAgIiRSTSAkZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZV9yZXN1bHQ7IGV4aXQgJEVYSVRfRkFJTFVSRSIgMSAyIDE1CisJICAgICRvcHRfZHJ5X3J1biB8fCB7CisJICAgICAgIyBub3RlOiB0aGlzIHNjcmlwdCB3aWxsIG5vdCBiZSBleGVjdXRlZCwgc28gZG8gbm90IGNobW9kLgorCSAgICAgIGlmIHRlc3QgIngkYnVpbGQiID0gIngkaG9zdCIgOyB0aGVuCisJCSRjd3JhcHBlciAtLWx0LWR1bXAtc2NyaXB0ID4gJGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWVfcmVzdWx0CisJICAgICAgZWxzZQorCQlmdW5jX2VtaXRfd3JhcHBlciBubyA+ICRmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lX3Jlc3VsdAorCSAgICAgIGZpCisJICAgIH0KKwkgIDs7CisJICAqICkKKwkgICAgJFJNICRvdXRwdXQKKwkgICAgdHJhcCAiJFJNICRvdXRwdXQ7IGV4aXQgJEVYSVRfRkFJTFVSRSIgMSAyIDE1CisKKwkgICAgZnVuY19lbWl0X3dyYXBwZXIgbm8gPiAkb3V0cHV0CisJICAgIGNobW9kICt4ICRvdXRwdXQKKwkgIDs7CisJZXNhYworICAgICAgfQorICAgICAgZXhpdCAkRVhJVF9TVUNDRVNTCisgICAgICA7OworICAgIGVzYWMKKworICAgICMgU2VlIGlmIHdlIG5lZWQgdG8gYnVpbGQgYW4gb2xkLWZhc2hpb25lZCBhcmNoaXZlLgorICAgIGZvciBvbGRsaWIgaW4gJG9sZGxpYnM7IGRvCisKKyAgICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0gY29udmVuaWVuY2U7IHRoZW4KKwlvbGRvYmpzPSIkbGlib2Jqc19zYXZlICRzeW1maWxlb2JqIgorCWFkZGxpYnM9IiRjb252ZW5pZW5jZSIKKwlidWlsZF9saWJ0b29sX2xpYnM9bm8KKyAgICAgIGVsc2UKKwlpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IG1vZHVsZTsgdGhlbgorCSAgb2xkb2Jqcz0iJGxpYm9ianNfc2F2ZSIKKwkgIGJ1aWxkX2xpYnRvb2xfbGlicz1ubworCWVsc2UKKwkgIG9sZG9ianM9IiRvbGRfZGVwbGlicyAkbm9uX3BpY19vYmplY3RzIgorCSAgaWYgdGVzdCAiJHByZWxvYWQiID0geWVzICYmIHRlc3QgLWYgIiRzeW1maWxlb2JqIjsgdGhlbgorCSAgICBvbGRvYmpzPSIkb2xkb2JqcyAkc3ltZmlsZW9iaiIKKwkgIGZpCisJZmkKKwlhZGRsaWJzPSIkb2xkX2NvbnZlbmllbmNlIgorICAgICAgZmkKKworICAgICAgaWYgdGVzdCAtbiAiJGFkZGxpYnMiOyB0aGVuCisJZ2VudG9wPSIkb3V0cHV0X29iamRpci8ke291dHB1dG5hbWV9eCIKKwlnZW5lcmF0ZWQ9IiRnZW5lcmF0ZWQgJGdlbnRvcCIKKworCWZ1bmNfZXh0cmFjdF9hcmNoaXZlcyAkZ2VudG9wICRhZGRsaWJzCisJb2xkb2Jqcz0iJG9sZG9ianMgJGZ1bmNfZXh0cmFjdF9hcmNoaXZlc19yZXN1bHQiCisgICAgICBmaQorCisgICAgICAjIERvIGVhY2ggY29tbWFuZCBpbiB0aGUgYXJjaGl2ZSBjb21tYW5kcy4KKyAgICAgIGlmIHRlc3QgLW4gIiRvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzIiAmJiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IHllczsgdGhlbgorCWNtZHM9JG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMKKyAgICAgIGVsc2UKKworCSMgQWRkIGFueSBvYmplY3RzIGZyb20gcHJlbG9hZGVkIGNvbnZlbmllbmNlIGxpYnJhcmllcworCWlmIHRlc3QgLW4gIiRkbHByZWZpbGVzIjsgdGhlbgorCSAgZ2VudG9wPSIkb3V0cHV0X29iamRpci8ke291dHB1dG5hbWV9eCIKKwkgIGdlbmVyYXRlZD0iJGdlbmVyYXRlZCAkZ2VudG9wIgorCisJICBmdW5jX2V4dHJhY3RfYXJjaGl2ZXMgJGdlbnRvcCAkZGxwcmVmaWxlcworCSAgb2xkb2Jqcz0iJG9sZG9ianMgJGZ1bmNfZXh0cmFjdF9hcmNoaXZlc19yZXN1bHQiCisJZmkKKworCSMgUE9TSVggZGVtYW5kcyBubyBwYXRocyB0byBiZSBlbmNvZGVkIGluIGFyY2hpdmVzLiAgV2UgaGF2ZQorCSMgdG8gYXZvaWQgY3JlYXRpbmcgYXJjaGl2ZXMgd2l0aCBkdXBsaWNhdGUgYmFzZW5hbWVzIGlmIHdlCisJIyBtaWdodCBoYXZlIHRvIGV4dHJhY3QgdGhlbSBhZnRlcndhcmRzLCBlLmcuLCB3aGVuIGNyZWF0aW5nIGEKKwkjIHN0YXRpYyBhcmNoaXZlIG91dCBvZiBhIGNvbnZlbmllbmNlIGxpYnJhcnksIG9yIHdoZW4gbGlua2luZworCSMgdGhlIGVudGlyZXR5IG9mIGEgbGlidG9vbCBhcmNoaXZlIGludG8gYW5vdGhlciAoY3VycmVudGx5CisJIyBub3Qgc3VwcG9ydGVkIGJ5IGxpYnRvb2wpLgorCWlmIChmb3Igb2JqIGluICRvbGRvYmpzCisJICAgIGRvCisJICAgICAgZnVuY19iYXNlbmFtZSAiJG9iaiIKKwkgICAgICAkRUNITyAiJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorCSAgICBkb25lIHwgc29ydCB8IHNvcnQgLXVjID4vZGV2L251bGwgMj4mMSk7IHRoZW4KKwkgIDoKKwllbHNlCisJICAkRUNITyAiY29weWluZyBzZWxlY3RlZCBvYmplY3QgZmlsZXMgdG8gYXZvaWQgYmFzZW5hbWUgY29uZmxpY3RzLi4uIgorCSAgZ2VudG9wPSIkb3V0cHV0X29iamRpci8ke291dHB1dG5hbWV9eCIKKwkgIGdlbmVyYXRlZD0iJGdlbmVyYXRlZCAkZ2VudG9wIgorCSAgZnVuY19ta2Rpcl9wICIkZ2VudG9wIgorCSAgc2F2ZV9vbGRvYmpzPSRvbGRvYmpzCisJICBvbGRvYmpzPQorCSAgY291bnRlcj0xCisJICBmb3Igb2JqIGluICRzYXZlX29sZG9ianMKKwkgIGRvCisJICAgIGZ1bmNfYmFzZW5hbWUgIiRvYmoiCisJICAgIG9iamJhc2U9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKwkgICAgY2FzZSAiICRvbGRvYmpzICIgaW4KKwkgICAgIiAiKSBvbGRvYmpzPSRvYmogOzsKKwkgICAgKltcIC9dIiRvYmpiYXNlICIqKQorCSAgICAgIHdoaWxlIDo7IGRvCisJCSMgTWFrZSBzdXJlIHdlIGRvbid0IHBpY2sgYW4gYWx0ZXJuYXRlIG5hbWUgdGhhdCBhbHNvCisJCSMgb3ZlcmxhcHMuCisJCW5ld29iaj1sdCRjb3VudGVyLSRvYmpiYXNlCisJCWZ1bmNfYXJpdGggJGNvdW50ZXIgKyAxCisJCWNvdW50ZXI9JGZ1bmNfYXJpdGhfcmVzdWx0CisJCWNhc2UgIiAkb2xkb2JqcyAiIGluCisJCSpbXCAvXSIkbmV3b2JqICIqKSA7OworCQkqKSBpZiB0ZXN0ICEgLWYgIiRnZW50b3AvJG5ld29iaiI7IHRoZW4gYnJlYWs7IGZpIDs7CisJCWVzYWMKKwkgICAgICBkb25lCisJICAgICAgZnVuY19zaG93X2V2YWwgImxuICRvYmogJGdlbnRvcC8kbmV3b2JqIHx8IGNwICRvYmogJGdlbnRvcC8kbmV3b2JqIgorCSAgICAgIG9sZG9ianM9IiRvbGRvYmpzICRnZW50b3AvJG5ld29iaiIKKwkgICAgICA7OworCSAgICAqKSBvbGRvYmpzPSIkb2xkb2JqcyAkb2JqIiA7OworCSAgICBlc2FjCisJICBkb25lCisJZmkKKwlldmFsIGNtZHM9XCIkb2xkX2FyY2hpdmVfY21kc1wiCisKKwlmdW5jX2xlbiAiICRjbWRzIgorCWxlbj0kZnVuY19sZW5fcmVzdWx0CisJaWYgdGVzdCAiJGxlbiIgLWx0ICIkbWF4X2NtZF9sZW4iIHx8IHRlc3QgIiRtYXhfY21kX2xlbiIgLWxlIC0xOyB0aGVuCisJICBjbWRzPSRvbGRfYXJjaGl2ZV9jbWRzCisJZWxzZQorCSAgIyB0aGUgY29tbWFuZCBsaW5lIGlzIHRvbyBsb25nIHRvIGxpbmsgaW4gb25lIHN0ZXAsIGxpbmsgaW4gcGFydHMKKwkgIGZ1bmNfdmVyYm9zZSAidXNpbmcgcGllY2V3aXNlIGFyY2hpdmUgbGlua2luZy4uLiIKKwkgIHNhdmVfUkFOTElCPSRSQU5MSUIKKwkgIFJBTkxJQj06CisJICBvYmpsaXN0PQorCSAgY29uY2F0X2NtZHM9CisJICBzYXZlX29sZG9ianM9JG9sZG9ianMKKwkgIG9sZG9ianM9CisJICAjIElzIHRoZXJlIGEgYmV0dGVyIHdheSBvZiBmaW5kaW5nIHRoZSBsYXN0IG9iamVjdCBpbiB0aGUgbGlzdD8KKwkgIGZvciBvYmogaW4gJHNhdmVfb2xkb2JqcworCSAgZG8KKwkgICAgbGFzdF9vbGRvYmo9JG9iagorCSAgZG9uZQorCSAgZXZhbCB0ZXN0X2NtZHM9XCIkb2xkX2FyY2hpdmVfY21kc1wiCisJICBmdW5jX2xlbiAiICR0ZXN0X2NtZHMiCisJICBsZW4wPSRmdW5jX2xlbl9yZXN1bHQKKwkgIGxlbj0kbGVuMAorCSAgZm9yIG9iaiBpbiAkc2F2ZV9vbGRvYmpzCisJICBkbworCSAgICBmdW5jX2xlbiAiICRvYmoiCisJICAgIGZ1bmNfYXJpdGggJGxlbiArICRmdW5jX2xlbl9yZXN1bHQKKwkgICAgbGVuPSRmdW5jX2FyaXRoX3Jlc3VsdAorCSAgICBmdW5jX2FwcGVuZCBvYmpsaXN0ICIgJG9iaiIKKwkgICAgaWYgdGVzdCAiJGxlbiIgLWx0ICIkbWF4X2NtZF9sZW4iOyB0aGVuCisJICAgICAgOgorCSAgICBlbHNlCisJICAgICAgIyB0aGUgYWJvdmUgY29tbWFuZCBzaG91bGQgYmUgdXNlZCBiZWZvcmUgaXQgZ2V0cyB0b28gbG9uZworCSAgICAgIG9sZG9ianM9JG9iamxpc3QKKwkgICAgICBpZiB0ZXN0ICIkb2JqIiA9ICIkbGFzdF9vbGRvYmoiIDsgdGhlbgorCQlSQU5MSUI9JHNhdmVfUkFOTElCCisJICAgICAgZmkKKwkgICAgICB0ZXN0IC16ICIkY29uY2F0X2NtZHMiIHx8IGNvbmNhdF9jbWRzPSRjb25jYXRfY21kc34KKwkgICAgICBldmFsIGNvbmNhdF9jbWRzPVwiXCR7Y29uY2F0X2NtZHN9JG9sZF9hcmNoaXZlX2NtZHNcIgorCSAgICAgIG9iamxpc3Q9CisJICAgICAgbGVuPSRsZW4wCisJICAgIGZpCisJICBkb25lCisJICBSQU5MSUI9JHNhdmVfUkFOTElCCisJICBvbGRvYmpzPSRvYmpsaXN0CisJICBpZiB0ZXN0ICJYJG9sZG9ianMiID0gIlgiIDsgdGhlbgorCSAgICBldmFsIGNtZHM9XCJcJGNvbmNhdF9jbWRzXCIKKwkgIGVsc2UKKwkgICAgZXZhbCBjbWRzPVwiXCRjb25jYXRfY21kc35cJG9sZF9hcmNoaXZlX2NtZHNcIgorCSAgZmkKKwlmaQorICAgICAgZmkKKyAgICAgIGZ1bmNfZXhlY3V0ZV9jbWRzICIkY21kcyIgJ2V4aXQgJD8nCisgICAgZG9uZQorCisgICAgdGVzdCAtbiAiJGdlbmVyYXRlZCIgJiYgXAorICAgICAgZnVuY19zaG93X2V2YWwgIiR7Uk19ciRnZW5lcmF0ZWQiCisKKyAgICAjIE5vdyBjcmVhdGUgdGhlIGxpYnRvb2wgYXJjaGl2ZS4KKyAgICBjYXNlICRvdXRwdXQgaW4KKyAgICAqLmxhKQorICAgICAgb2xkX2xpYnJhcnk9CisgICAgICB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiID0geWVzICYmIG9sZF9saWJyYXJ5PSIkbGlibmFtZS4kbGliZXh0IgorICAgICAgZnVuY192ZXJib3NlICJjcmVhdGluZyAkb3V0cHV0IgorCisgICAgICAjIFByZXNlcnZlIGFueSB2YXJpYWJsZXMgdGhhdCBtYXkgYWZmZWN0IGNvbXBpbGVyIGJlaGF2aW9yCisgICAgICBmb3IgdmFyIGluICR2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluazsgZG8KKwlpZiBldmFsIHRlc3QgLXogXCJcJHskdmFyK3NldH1cIjsgdGhlbgorCSAgcmVsaW5rX2NvbW1hbmQ9InsgdGVzdCAteiBcIlwkeyR2YXIrc2V0fVwiIHx8ICRsdF91bnNldCAkdmFyIHx8IHsgJHZhcj07IGV4cG9ydCAkdmFyOyB9OyB9OyAkcmVsaW5rX2NvbW1hbmQiCisJZWxpZiBldmFsIHZhcl92YWx1ZT1cJCR2YXI7IHRlc3QgLXogIiR2YXJfdmFsdWUiOyB0aGVuCisJICByZWxpbmtfY29tbWFuZD0iJHZhcj07IGV4cG9ydCAkdmFyOyAkcmVsaW5rX2NvbW1hbmQiCisJZWxzZQorCSAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJHZhcl92YWx1ZSIKKwkgIHJlbGlua19jb21tYW5kPSIkdmFyPSRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdDsgZXhwb3J0ICR2YXI7ICRyZWxpbmtfY29tbWFuZCIKKwlmaQorICAgICAgZG9uZQorICAgICAgIyBRdW90ZSB0aGUgbGluayBjb21tYW5kIGZvciBzaGlwcGluZy4KKyAgICAgIHJlbGlua19jb21tYW5kPSIoY2QgYHB3ZGA7ICRTSEVMTCAkcHJvZ3BhdGggJHByZXNlcnZlX2FyZ3MgLS1tb2RlPXJlbGluayAkbGlidG9vbF9hcmdzIEBpbnN0X3ByZWZpeF9kaXJAKSIKKyAgICAgIHJlbGlua19jb21tYW5kPWAkRUNITyAiWCRyZWxpbmtfY29tbWFuZCIgfCAkWHNlZCAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCisgICAgICBpZiB0ZXN0ICIkaGFyZGNvZGVfYXV0b21hdGljIiA9IHllcyA7IHRoZW4KKwlyZWxpbmtfY29tbWFuZD0KKyAgICAgIGZpCisKKyAgICAgICMgT25seSBjcmVhdGUgdGhlIG91dHB1dCBpZiBub3QgYSBkcnkgcnVuLgorICAgICAgJG9wdF9kcnlfcnVuIHx8IHsKKwlmb3IgaW5zdGFsbGVkIGluIG5vIHllczsgZG8KKwkgIGlmIHRlc3QgIiRpbnN0YWxsZWQiID0geWVzOyB0aGVuCisJICAgIGlmIHRlc3QgLXogIiRpbnN0YWxsX2xpYmRpciI7IHRoZW4KKwkgICAgICBicmVhaworCSAgICBmaQorCSAgICBvdXRwdXQ9IiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lImkKKwkgICAgIyBSZXBsYWNlIGFsbCB1bmluc3RhbGxlZCBsaWJ0b29sIGxpYnJhcmllcyB3aXRoIHRoZSBpbnN0YWxsZWQgb25lcworCSAgICBuZXdkZXBlbmRlbmN5X2xpYnM9CisJICAgIGZvciBkZXBsaWIgaW4gJGRlcGVuZGVuY3lfbGliczsgZG8KKwkgICAgICBjYXNlICRkZXBsaWIgaW4KKwkgICAgICAqLmxhKQorCQlmdW5jX2Jhc2VuYW1lICIkZGVwbGliIgorCQluYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisJCWV2YWwgbGliZGlyPWAke1NFRH0gLW4gLWUgJ3MvXmxpYmRpcj1cKC4qXCkkL1wxL3AnICRkZXBsaWJgCisJCXRlc3QgLXogIiRsaWJkaXIiICYmIFwKKwkJICBmdW5jX2ZhdGFsX2Vycm9yICJcYCRkZXBsaWInIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIKKwkJbmV3ZGVwZW5kZW5jeV9saWJzPSIkbmV3ZGVwZW5kZW5jeV9saWJzICRsaWJkaXIvJG5hbWUiCisJCTs7CisJICAgICAgKikgbmV3ZGVwZW5kZW5jeV9saWJzPSIkbmV3ZGVwZW5kZW5jeV9saWJzICRkZXBsaWIiIDs7CisJICAgICAgZXNhYworCSAgICBkb25lCisJICAgIGRlcGVuZGVuY3lfbGlicz0iJG5ld2RlcGVuZGVuY3lfbGlicyIKKwkgICAgbmV3ZGxmaWxlcz0KKworCSAgICBmb3IgbGliIGluICRkbGZpbGVzOyBkbworCSAgICAgIGNhc2UgJGxpYiBpbgorCSAgICAgICoubGEpCisJICAgICAgICBmdW5jX2Jhc2VuYW1lICIkbGliIgorCQluYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisJCWV2YWwgbGliZGlyPWAke1NFRH0gLW4gLWUgJ3MvXmxpYmRpcj1cKC4qXCkkL1wxL3AnICRsaWJgCisJCXRlc3QgLXogIiRsaWJkaXIiICYmIFwKKwkJICBmdW5jX2ZhdGFsX2Vycm9yICJcYCRsaWInIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIKKwkJbmV3ZGxmaWxlcz0iJG5ld2RsZmlsZXMgJGxpYmRpci8kbmFtZSIKKwkJOzsKKwkgICAgICAqKSBuZXdkbGZpbGVzPSIkbmV3ZGxmaWxlcyAkbGliIiA7OworCSAgICAgIGVzYWMKKwkgICAgZG9uZQorCSAgICBkbGZpbGVzPSIkbmV3ZGxmaWxlcyIKKwkgICAgbmV3ZGxwcmVmaWxlcz0KKwkgICAgZm9yIGxpYiBpbiAkZGxwcmVmaWxlczsgZG8KKwkgICAgICBjYXNlICRsaWIgaW4KKwkgICAgICAqLmxhKQorCQkjIE9ubHkgcGFzcyBwcmVvcGVuZWQgZmlsZXMgdG8gdGhlIHBzZXVkby1hcmNoaXZlIChmb3IKKwkJIyBldmVudHVhbCBsaW5raW5nIHdpdGggdGhlIGFwcC4gdGhhdCBsaW5rcyBpdCkgaWYgd2UKKwkJIyBkaWRuJ3QgYWxyZWFkeSBsaW5rIHRoZSBwcmVvcGVuZWQgb2JqZWN0cyBkaXJlY3RseSBpbnRvCisJCSMgdGhlIGxpYnJhcnk6CisJCWZ1bmNfYmFzZW5hbWUgIiRsaWIiCisJCW5hbWU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKwkJZXZhbCBsaWJkaXI9YCR7U0VEfSAtbiAtZSAncy9ebGliZGlyPVwoLipcKSQvXDEvcCcgJGxpYmAKKwkJdGVzdCAteiAiJGxpYmRpciIgJiYgXAorCQkgIGZ1bmNfZmF0YWxfZXJyb3IgIlxgJGxpYicgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIgorCQluZXdkbHByZWZpbGVzPSIkbmV3ZGxwcmVmaWxlcyAkbGliZGlyLyRuYW1lIgorCQk7OworCSAgICAgIGVzYWMKKwkgICAgZG9uZQorCSAgICBkbHByZWZpbGVzPSIkbmV3ZGxwcmVmaWxlcyIKKwkgIGVsc2UKKwkgICAgbmV3ZGxmaWxlcz0KKwkgICAgZm9yIGxpYiBpbiAkZGxmaWxlczsgZG8KKwkgICAgICBjYXNlICRsaWIgaW4KKwkJW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSBhYnM9IiRsaWIiIDs7CisJCSopIGFicz1gcHdkYCIvJGxpYiIgOzsKKwkgICAgICBlc2FjCisJICAgICAgbmV3ZGxmaWxlcz0iJG5ld2RsZmlsZXMgJGFicyIKKwkgICAgZG9uZQorCSAgICBkbGZpbGVzPSIkbmV3ZGxmaWxlcyIKKwkgICAgbmV3ZGxwcmVmaWxlcz0KKwkgICAgZm9yIGxpYiBpbiAkZGxwcmVmaWxlczsgZG8KKwkgICAgICBjYXNlICRsaWIgaW4KKwkJW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSBhYnM9IiRsaWIiIDs7CisJCSopIGFicz1gcHdkYCIvJGxpYiIgOzsKKwkgICAgICBlc2FjCisJICAgICAgbmV3ZGxwcmVmaWxlcz0iJG5ld2RscHJlZmlsZXMgJGFicyIKKwkgICAgZG9uZQorCSAgICBkbHByZWZpbGVzPSIkbmV3ZGxwcmVmaWxlcyIKKwkgIGZpCisJICAkUk0gJG91dHB1dAorCSAgIyBwbGFjZSBkbG5hbWUgaW4gY29ycmVjdCBwb3NpdGlvbiBmb3IgY3lnd2luCisJICB0ZGxuYW1lPSRkbG5hbWUKKwkgIGNhc2UgJGhvc3QsJG91dHB1dCwkaW5zdGFsbGVkLCRtb2R1bGUsJGRsbmFtZSBpbgorCSAgICAqY3lnd2luKiwqbGFpLHllcyxubywqLmRsbCB8ICptaW5ndyosKmxhaSx5ZXMsbm8sKi5kbGwgfCAqY2VnY2MqLCpsYWkseWVzLG5vLCouZGxsKSB0ZGxuYW1lPS4uL2Jpbi8kZGxuYW1lIDs7CisJICBlc2FjCisJICAkRUNITyA+ICRvdXRwdXQgIlwKKyMgJG91dHB1dG5hbWUgLSBhIGxpYnRvb2wgbGlicmFyeSBmaWxlCisjIEdlbmVyYXRlZCBieSAkUFJPR1JBTSAoR05VICRQQUNLQUdFJFRJTUVTVEFNUCkgJFZFUlNJT04KKyMKKyMgUGxlYXNlIERPIE5PVCBkZWxldGUgdGhpcyBmaWxlIQorIyBJdCBpcyBuZWNlc3NhcnkgZm9yIGxpbmtpbmcgdGhlIGxpYnJhcnkuCisKKyMgVGhlIG5hbWUgdGhhdCB3ZSBjYW4gZGxvcGVuKDMpLgorZGxuYW1lPSckdGRsbmFtZScKKworIyBOYW1lcyBvZiB0aGlzIGxpYnJhcnkuCitsaWJyYXJ5X25hbWVzPSckbGlicmFyeV9uYW1lcycKKworIyBUaGUgbmFtZSBvZiB0aGUgc3RhdGljIGFyY2hpdmUuCitvbGRfbGlicmFyeT0nJG9sZF9saWJyYXJ5JworCisjIExpbmtlciBmbGFncyB0aGF0IGNhbiBub3QgZ28gaW4gZGVwZW5kZW5jeV9saWJzLgoraW5oZXJpdGVkX2xpbmtlcl9mbGFncz0nJG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzJworCisjIExpYnJhcmllcyB0aGF0IHRoaXMgb25lIGRlcGVuZHMgdXBvbi4KK2RlcGVuZGVuY3lfbGlicz0nJGRlcGVuZGVuY3lfbGlicycKKworIyBOYW1lcyBvZiBhZGRpdGlvbmFsIHdlYWsgbGlicmFyaWVzIHByb3ZpZGVkIGJ5IHRoaXMgbGlicmFyeQord2Vha19saWJyYXJ5X25hbWVzPSckd2Vha19saWJzJworCisjIFZlcnNpb24gaW5mb3JtYXRpb24gZm9yICRsaWJuYW1lLgorY3VycmVudD0kY3VycmVudAorYWdlPSRhZ2UKK3JldmlzaW9uPSRyZXZpc2lvbgorCisjIElzIHRoaXMgYW4gYWxyZWFkeSBpbnN0YWxsZWQgbGlicmFyeT8KK2luc3RhbGxlZD0kaW5zdGFsbGVkCisKKyMgU2hvdWxkIHdlIHdhcm4gYWJvdXQgcG9ydGFiaWxpdHkgd2hlbiBsaW5raW5nIGFnYWluc3QgLW1vZHVsZXM/CitzaG91bGRub3RsaW5rPSRtb2R1bGUKKworIyBGaWxlcyB0byBkbG9wZW4vZGxwcmVvcGVuCitkbG9wZW49JyRkbGZpbGVzJworZGxwcmVvcGVuPSckZGxwcmVmaWxlcycKKworIyBEaXJlY3RvcnkgdGhhdCB0aGlzIGxpYnJhcnkgbmVlZHMgdG8gYmUgaW5zdGFsbGVkIGluOgorbGliZGlyPSckaW5zdGFsbF9saWJkaXInIgorCSAgaWYgdGVzdCAiJGluc3RhbGxlZCIgPSBubyAmJiB0ZXN0ICIkbmVlZF9yZWxpbmsiID0geWVzOyB0aGVuCisJICAgICRFQ0hPID4+ICRvdXRwdXQgIlwKK3JlbGlua19jb21tYW5kPVwiJHJlbGlua19jb21tYW5kXCIiCisJICBmaQorCWRvbmUKKyAgICAgIH0KKworICAgICAgIyBEbyBhIHN5bWJvbGljIGxpbmsgc28gdGhhdCB0aGUgbGlidG9vbCBhcmNoaXZlIGNhbiBiZSBmb3VuZCBpbgorICAgICAgIyBMRF9MSUJSQVJZX1BBVEggYmVmb3JlIHRoZSBwcm9ncmFtIGlzIGluc3RhbGxlZC4KKyAgICAgIGZ1bmNfc2hvd19ldmFsICcoIGNkICIkb3V0cHV0X29iamRpciIgJiYgJFJNICIkb3V0cHV0bmFtZSIgJiYgJExOX1MgIi4uLyRvdXRwdXRuYW1lIiAiJG91dHB1dG5hbWUiICknICdleGl0ICQ/JworICAgICAgOzsKKyAgICBlc2FjCisgICAgZXhpdCAkRVhJVF9TVUNDRVNTCit9CisKK3sgdGVzdCAiJG1vZGUiID0gbGluayB8fCB0ZXN0ICIkbW9kZSIgPSByZWxpbms7IH0gJiYKKyAgICBmdW5jX21vZGVfbGluayAkezErIiRAIn0KKworCisjIGZ1bmNfbW9kZV91bmluc3RhbGwgYXJnLi4uCitmdW5jX21vZGVfdW5pbnN0YWxsICgpCit7CisgICAgJG9wdF9kZWJ1ZworICAgIFJNPSIkbm9ub3B0IgorICAgIGZpbGVzPQorICAgIHJtZm9yY2U9CisgICAgZXhpdF9zdGF0dXM9MAorCisgICAgIyBUaGlzIHZhcmlhYmxlIHRlbGxzIHdyYXBwZXIgc2NyaXB0cyBqdXN0IHRvIHNldCB2YXJpYWJsZXMgcmF0aGVyCisgICAgIyB0aGFuIHJ1bm5pbmcgdGhlaXIgcHJvZ3JhbXMuCisgICAgbGlidG9vbF9pbnN0YWxsX21hZ2ljPSIkbWFnaWMiCisKKyAgICBmb3IgYXJnCisgICAgZG8KKyAgICAgIGNhc2UgJGFyZyBpbgorICAgICAgLWYpIFJNPSIkUk0gJGFyZyI7IHJtZm9yY2U9eWVzIDs7CisgICAgICAtKikgUk09IiRSTSAkYXJnIiA7OworICAgICAgKikgZmlsZXM9IiRmaWxlcyAkYXJnIiA7OworICAgICAgZXNhYworICAgIGRvbmUKKworICAgIHRlc3QgLXogIiRSTSIgJiYgXAorICAgICAgZnVuY19mYXRhbF9oZWxwICJ5b3UgbXVzdCBzcGVjaWZ5IGFuIFJNIHByb2dyYW0iCisKKyAgICBybWRpcnM9CisKKyAgICBvcmlnb2JqZGlyPSIkb2JqZGlyIgorICAgIGZvciBmaWxlIGluICRmaWxlczsgZG8KKyAgICAgIGZ1bmNfZGlybmFtZSAiJGZpbGUiICIiICIuIgorICAgICAgZGlyPSIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKKyAgICAgIGlmIHRlc3QgIlgkZGlyIiA9IFguOyB0aGVuCisJb2JqZGlyPSIkb3JpZ29iamRpciIKKyAgICAgIGVsc2UKKwlvYmpkaXI9IiRkaXIvJG9yaWdvYmpkaXIiCisgICAgICBmaQorICAgICAgZnVuY19iYXNlbmFtZSAiJGZpbGUiCisgICAgICBuYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisgICAgICB0ZXN0ICIkbW9kZSIgPSB1bmluc3RhbGwgJiYgb2JqZGlyPSIkZGlyIgorCisgICAgICAjIFJlbWVtYmVyIG9iamRpciBmb3IgcmVtb3ZhbCBsYXRlciwgYmVpbmcgY2FyZWZ1bCB0byBhdm9pZCBkdXBsaWNhdGVzCisgICAgICBpZiB0ZXN0ICIkbW9kZSIgPSBjbGVhbjsgdGhlbgorCWNhc2UgIiAkcm1kaXJzICIgaW4KKwkgICoiICRvYmpkaXIgIiopIDs7CisJICAqKSBybWRpcnM9IiRybWRpcnMgJG9iamRpciIgOzsKKwllc2FjCisgICAgICBmaQorCisgICAgICAjIERvbid0IGVycm9yIGlmIHRoZSBmaWxlIGRvZXNuJ3QgZXhpc3QgYW5kIHJtIC1mIHdhcyB1c2VkLgorICAgICAgaWYgeyB0ZXN0IC1MICIkZmlsZSI7IH0gPi9kZXYvbnVsbCAyPiYxIHx8CisJIHsgdGVzdCAtaCAiJGZpbGUiOyB9ID4vZGV2L251bGwgMj4mMSB8fAorCSB0ZXN0IC1mICIkZmlsZSI7IHRoZW4KKwk6CisgICAgICBlbGlmIHRlc3QgLWQgIiRmaWxlIjsgdGhlbgorCWV4aXRfc3RhdHVzPTEKKwljb250aW51ZQorICAgICAgZWxpZiB0ZXN0ICIkcm1mb3JjZSIgPSB5ZXM7IHRoZW4KKwljb250aW51ZQorICAgICAgZmkKKworICAgICAgcm1maWxlcz0iJGZpbGUiCisKKyAgICAgIGNhc2UgJG5hbWUgaW4KKyAgICAgICoubGEpCisJIyBQb3NzaWJseSBhIGxpYnRvb2wgYXJjaGl2ZSwgc28gdmVyaWZ5IGl0LgorCWlmIGZ1bmNfbGFsaWJfcCAiJGZpbGUiOyB0aGVuCisJICBmdW5jX3NvdXJjZSAkZGlyLyRuYW1lCisKKwkgICMgRGVsZXRlIHRoZSBsaWJ0b29sIGxpYnJhcmllcyBhbmQgc3ltbGlua3MuCisJICBmb3IgbiBpbiAkbGlicmFyeV9uYW1lczsgZG8KKwkgICAgcm1maWxlcz0iJHJtZmlsZXMgJG9iamRpci8kbiIKKwkgIGRvbmUKKwkgIHRlc3QgLW4gIiRvbGRfbGlicmFyeSIgJiYgcm1maWxlcz0iJHJtZmlsZXMgJG9iamRpci8kb2xkX2xpYnJhcnkiCisKKwkgIGNhc2UgIiRtb2RlIiBpbgorCSAgY2xlYW4pCisJICAgIGNhc2UgIiAgJGxpYnJhcnlfbmFtZXMgIiBpbgorCSAgICAjICIgICIgaW4gdGhlIGJlZ2lubmluZyBjYXRjaGVzIGVtcHR5ICRkbG5hbWUKKwkgICAgKiIgJGRsbmFtZSAiKikgOzsKKwkgICAgKikgcm1maWxlcz0iJHJtZmlsZXMgJG9iamRpci8kZGxuYW1lIiA7OworCSAgICBlc2FjCisJICAgIHRlc3QgLW4gIiRsaWJkaXIiICYmIHJtZmlsZXM9IiRybWZpbGVzICRvYmpkaXIvJG5hbWUgJG9iamRpci8ke25hbWV9aSIKKwkgICAgOzsKKwkgIHVuaW5zdGFsbCkKKwkgICAgaWYgdGVzdCAtbiAiJGxpYnJhcnlfbmFtZXMiOyB0aGVuCisJICAgICAgIyBEbyBlYWNoIGNvbW1hbmQgaW4gdGhlIHBvc3R1bmluc3RhbGwgY29tbWFuZHMuCisJICAgICAgZnVuY19leGVjdXRlX2NtZHMgIiRwb3N0dW5pbnN0YWxsX2NtZHMiICd0ZXN0ICIkcm1mb3JjZSIgPSB5ZXMgfHwgZXhpdF9zdGF0dXM9MScKKwkgICAgZmkKKworCSAgICBpZiB0ZXN0IC1uICIkb2xkX2xpYnJhcnkiOyB0aGVuCisJICAgICAgIyBEbyBlYWNoIGNvbW1hbmQgaW4gdGhlIG9sZF9wb3N0dW5pbnN0YWxsIGNvbW1hbmRzLgorCSAgICAgIGZ1bmNfZXhlY3V0ZV9jbWRzICIkb2xkX3Bvc3R1bmluc3RhbGxfY21kcyIgJ3Rlc3QgIiRybWZvcmNlIiA9IHllcyB8fCBleGl0X3N0YXR1cz0xJworCSAgICBmaQorCSAgICAjIEZJWE1FOiBzaG91bGQgcmVpbnN0YWxsIHRoZSBiZXN0IHJlbWFpbmluZyBzaGFyZWQgbGlicmFyeS4KKwkgICAgOzsKKwkgIGVzYWMKKwlmaQorCTs7CisKKyAgICAgICoubG8pCisJIyBQb3NzaWJseSBhIGxpYnRvb2wgb2JqZWN0LCBzbyB2ZXJpZnkgaXQuCisJaWYgZnVuY19sYWxpYl9wICIkZmlsZSI7IHRoZW4KKworCSAgIyBSZWFkIHRoZSAubG8gZmlsZQorCSAgZnVuY19zb3VyY2UgJGRpci8kbmFtZQorCisJICAjIEFkZCBQSUMgb2JqZWN0IHRvIHRoZSBsaXN0IG9mIGZpbGVzIHRvIHJlbW92ZS4KKwkgIGlmIHRlc3QgLW4gIiRwaWNfb2JqZWN0IiAmJgorCSAgICAgdGVzdCAiJHBpY19vYmplY3QiICE9IG5vbmU7IHRoZW4KKwkgICAgcm1maWxlcz0iJHJtZmlsZXMgJGRpci8kcGljX29iamVjdCIKKwkgIGZpCisKKwkgICMgQWRkIG5vbi1QSUMgb2JqZWN0IHRvIHRoZSBsaXN0IG9mIGZpbGVzIHRvIHJlbW92ZS4KKwkgIGlmIHRlc3QgLW4gIiRub25fcGljX29iamVjdCIgJiYKKwkgICAgIHRlc3QgIiRub25fcGljX29iamVjdCIgIT0gbm9uZTsgdGhlbgorCSAgICBybWZpbGVzPSIkcm1maWxlcyAkZGlyLyRub25fcGljX29iamVjdCIKKwkgIGZpCisJZmkKKwk7OworCisgICAgICAqKQorCWlmIHRlc3QgIiRtb2RlIiA9IGNsZWFuIDsgdGhlbgorCSAgbm9leGVuYW1lPSRuYW1lCisJICBjYXNlICRmaWxlIGluCisJICAqLmV4ZSkKKwkgICAgZnVuY19zdHJpcG5hbWUgJycgJy5leGUnICIkZmlsZSIKKwkgICAgZmlsZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJICAgIGZ1bmNfc3RyaXBuYW1lICcnICcuZXhlJyAiJG5hbWUiCisJICAgIG5vZXhlbmFtZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJICAgICMgJGZpbGUgd2l0aCAuZXhlIGhhcyBhbHJlYWR5IGJlZW4gYWRkZWQgdG8gcm1maWxlcywKKwkgICAgIyBhZGQgJGZpbGUgd2l0aG91dCAuZXhlCisJICAgIHJtZmlsZXM9IiRybWZpbGVzICRmaWxlIgorCSAgICA7OworCSAgZXNhYworCSAgIyBEbyBhIHRlc3QgdG8gc2VlIGlmIHRoaXMgaXMgYSBsaWJ0b29sIHByb2dyYW0uCisJICBpZiBmdW5jX2x0d3JhcHBlcl9wICIkZmlsZSI7IHRoZW4KKwkgICAgaWYgZnVuY19sdHdyYXBwZXJfZXhlY3V0YWJsZV9wICIkZmlsZSI7IHRoZW4KKwkgICAgICBmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lICIkZmlsZSIKKwkgICAgICByZWxpbmtfY29tbWFuZD0KKwkgICAgICBmdW5jX3NvdXJjZSAkZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZV9yZXN1bHQKKwkgICAgICBybWZpbGVzPSIkcm1maWxlcyAkZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZV9yZXN1bHQiCisJICAgIGVsc2UKKwkgICAgICByZWxpbmtfY29tbWFuZD0KKwkgICAgICBmdW5jX3NvdXJjZSAkZGlyLyRub2V4ZW5hbWUKKwkgICAgZmkKKworCSAgICAjIG5vdGUgJG5hbWUgc3RpbGwgY29udGFpbnMgLmV4ZSBpZiBpdCB3YXMgaW4gJGZpbGUgb3JpZ2luYWxseQorCSAgICAjIGFzIGRvZXMgdGhlIHZlcnNpb24gb2YgJGZpbGUgdGhhdCB3YXMgYWRkZWQgaW50byAkcm1maWxlcworCSAgICBybWZpbGVzPSIkcm1maWxlcyAkb2JqZGlyLyRuYW1lICRvYmpkaXIvJHtuYW1lfVMuJHtvYmpleHR9IgorCSAgICBpZiB0ZXN0ICIkZmFzdF9pbnN0YWxsIiA9IHllcyAmJiB0ZXN0IC1uICIkcmVsaW5rX2NvbW1hbmQiOyB0aGVuCisJICAgICAgcm1maWxlcz0iJHJtZmlsZXMgJG9iamRpci9sdC0kbmFtZSIKKwkgICAgZmkKKwkgICAgaWYgdGVzdCAiWCRub2V4ZW5hbWUiICE9ICJYJG5hbWUiIDsgdGhlbgorCSAgICAgIHJtZmlsZXM9IiRybWZpbGVzICRvYmpkaXIvbHQtJHtub2V4ZW5hbWV9LmMiCisJICAgIGZpCisJICBmaQorCWZpCisJOzsKKyAgICAgIGVzYWMKKyAgICAgIGZ1bmNfc2hvd19ldmFsICIkUk0gJHJtZmlsZXMiICdleGl0X3N0YXR1cz0xJworICAgIGRvbmUKKyAgICBvYmpkaXI9IiRvcmlnb2JqZGlyIgorCisgICAgIyBUcnkgdG8gcmVtb3ZlIHRoZSAke29iamRpcn1zIGluIHRoZSBkaXJlY3RvcmllcyB3aGVyZSB3ZSBkZWxldGVkIGZpbGVzCisgICAgZm9yIGRpciBpbiAkcm1kaXJzOyBkbworICAgICAgaWYgdGVzdCAtZCAiJGRpciI7IHRoZW4KKwlmdW5jX3Nob3dfZXZhbCAicm1kaXIgJGRpciA+L2Rldi9udWxsIDI+JjEiCisgICAgICBmaQorICAgIGRvbmUKKworICAgIGV4aXQgJGV4aXRfc3RhdHVzCit9CisKK3sgdGVzdCAiJG1vZGUiID0gdW5pbnN0YWxsIHx8IHRlc3QgIiRtb2RlIiA9IGNsZWFuOyB9ICYmCisgICAgZnVuY19tb2RlX3VuaW5zdGFsbCAkezErIiRAIn0KKwordGVzdCAteiAiJG1vZGUiICYmIHsKKyAgaGVscD0iJGdlbmVyaWNfaGVscCIKKyAgZnVuY19mYXRhbF9oZWxwICJ5b3UgbXVzdCBzcGVjaWZ5IGEgTU9ERSIKK30KKwordGVzdCAteiAiJGV4ZWNfY21kIiAmJiBcCisgIGZ1bmNfZmF0YWxfaGVscCAiaW52YWxpZCBvcGVyYXRpb24gbW9kZSBcYCRtb2RlJyIKKworaWYgdGVzdCAtbiAiJGV4ZWNfY21kIjsgdGhlbgorICBldmFsIGV4ZWMgIiRleGVjX2NtZCIKKyAgZXhpdCAkRVhJVF9GQUlMVVJFCitmaQorCitleGl0ICRleGl0X3N0YXR1cworCisKKyMgVGhlIFRBR3MgYmVsb3cgYXJlIGRlZmluZWQgc3VjaCB0aGF0IHdlIG5ldmVyIGdldCBpbnRvIGEgc2l0dWF0aW9uCisjIGluIHdoaWNoIHdlIGRpc2FibGUgYm90aCBraW5kcyBvZiBsaWJyYXJpZXMuICBHaXZlbiBjb25mbGljdGluZworIyBjaG9pY2VzLCB3ZSBnbyBmb3IgYSBzdGF0aWMgbGlicmFyeSwgdGhhdCBpcyB0aGUgbW9zdCBwb3J0YWJsZSwKKyMgc2luY2Ugd2UgY2FuJ3QgdGVsbCB3aGV0aGVyIHNoYXJlZCBsaWJyYXJpZXMgd2VyZSBkaXNhYmxlZCBiZWNhdXNlCisjIHRoZSB1c2VyIGFza2VkIGZvciB0aGF0IG9yIGJlY2F1c2UgdGhlIHBsYXRmb3JtIGRvZXNuJ3Qgc3VwcG9ydAorIyB0aGVtLiAgVGhpcyBpcyBwYXJ0aWN1bGFybHkgaW1wb3J0YW50IG9uIEFJWCwgYmVjYXVzZSB3ZSBkb24ndAorIyBzdXBwb3J0IGhhdmluZyBib3RoIHN0YXRpYyBhbmQgc2hhcmVkIGxpYnJhcmllcyBlbmFibGVkIGF0IHRoZSBzYW1lCisjIHRpbWUgb24gdGhhdCBwbGF0Zm9ybSwgc28gd2UgZGVmYXVsdCB0byBhIHNoYXJlZC1vbmx5IGNvbmZpZ3VyYXRpb24uCisjIElmIGEgZGlzYWJsZS1zaGFyZWQgdGFnIGlzIGdpdmVuLCB3ZSdsbCBmYWxsYmFjayB0byBhIHN0YXRpYy1vbmx5CisjIGNvbmZpZ3VyYXRpb24uICBCdXQgd2UnbGwgbmV2ZXIgZ28gZnJvbSBzdGF0aWMtb25seSB0byBzaGFyZWQtb25seS4KKworIyAjIyMgQkVHSU4gTElCVE9PTCBUQUcgQ09ORklHOiBkaXNhYmxlLXNoYXJlZAorYnVpbGRfbGlidG9vbF9saWJzPW5vCitidWlsZF9vbGRfbGlicz15ZXMKKyMgIyMjIEVORCBMSUJUT09MIFRBRyBDT05GSUc6IGRpc2FibGUtc2hhcmVkCisKKyMgIyMjIEJFR0lOIExJQlRPT0wgVEFHIENPTkZJRzogZGlzYWJsZS1zdGF0aWMKK2J1aWxkX29sZF9saWJzPWBjYXNlICRidWlsZF9saWJ0b29sX2xpYnMgaW4geWVzKSBlY2hvIG5vOzsgKikgZWNobyB5ZXM7OyBlc2FjYAorIyAjIyMgRU5EIExJQlRPT0wgVEFHIENPTkZJRzogZGlzYWJsZS1zdGF0aWMKKworIyBMb2NhbCBWYXJpYWJsZXM6CisjIG1vZGU6c2hlbGwtc2NyaXB0CisjIHNoLWluZGVudGF0aW9uOjIKKyMgRW5kOgorIyB2aTpzdz0yCisKZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L200L01ha2VmaWxlLmFtIGIvb3Byb2ZpbGUtMC45LjcvbTQvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWVjNTliZgotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L200L01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsMjEgQEAKKworIyBZb3Ugd2lsbCBuZWVkIHRvIHJ1biBhdXRvZ2VuLnNoIGFmdGVyIGFkZGluZyBzb21ldGhpbmcgaGVyZSBtYW51YWxseQorCitFWFRSQV9ESVNUID0gXAorCWJpbnV0aWxzLm00IFwKKwlidWlsdGluZXhwZWN0Lm00IFwKKwljb21waWxlcm9wdGlvbi5tNCBcCisJY29uZmlnbW9kdWxlLm00IFwKKwljb3B5aWZjaGFuZ2UubTQgXAorCWRvY2Jvb2subTQgXAorCWV4dHJhZGlycy5tNCBcCisJZmluZGtlcm5lbC5tNCBcCisJa2VybmVsb3B0aW9uLm00IFwKKwlrZXJuZWx2ZXJzaW9uLm00IFwKKwltYWxsb2NhdHRyaWJ1dGUubTQgXAorCXBvcHRjb25zdC5tNCBcCisJcHJlY29tcGlsZWRoZWFkZXIubTQgXAorCXF0Lm00IFwKKwlyZXN1bHR5bi5tNCBcCisJc3N0cmVhbS5tNCBcCisJdHlwZWRlZi5tNApkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvbTQvTWFrZWZpbGUuaW4gYi9vcHJvZmlsZS0wLjkuNy9tNC9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTdkMDU4Ci0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvbTQvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSw0MjkgQEAKKyMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTEuMSBmcm9tIE1ha2VmaWxlLmFtLgorIyBAY29uZmlndXJlX2lucHV0QAorCisjIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwKKyMgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorIyBJbmMuCisjIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0CisjIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKKyMgUEFSVElDVUxBUiBQVVJQT1NFLgorCitAU0VUX01BS0VACisKKyMgWW91IHdpbGwgbmVlZCB0byBydW4gYXV0b2dlbi5zaCBhZnRlciBhZGRpbmcgc29tZXRoaW5nIGhlcmUgbWFudWFsbHkKK1ZQQVRIID0gQHNyY2RpckAKK3BrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAorcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACitwa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACitwa2dsaWJleGVjZGlyID0gJChsaWJleGVjZGlyKS9AUEFDS0FHRUAKK2FtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKK2luc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0CitpbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCitpbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKK0lOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCit0cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCitOT1JNQUxfSU5TVEFMTCA9IDoKK1BSRV9JTlNUQUxMID0gOgorUE9TVF9JTlNUQUxMID0gOgorTk9STUFMX1VOSU5TVEFMTCA9IDoKK1BSRV9VTklOU1RBTEwgPSA6CitQT1NUX1VOSU5TVEFMTCA9IDoKK2J1aWxkX3RyaXBsZXQgPSBAYnVpbGRACitob3N0X3RyaXBsZXQgPSBAaG9zdEAKK3N1YmRpciA9IG00CitESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKHNyY2RpcikvTWFrZWZpbGUuaW4KK0FDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKK2FtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL200L2JpbnV0aWxzLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2J1aWx0aW5leHBlY3QubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY2VsbHNwdWJmZHN1cHBvcnQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY29tcGlsZXJvcHRpb24ubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY29uZmlnbW9kdWxlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2NvcHlpZmNoYW5nZS5tNCAkKHRvcF9zcmNkaXIpL200L2RvY2Jvb2subTQgXAorCSQodG9wX3NyY2RpcikvbTQvZXh0cmFkaXJzLm00ICQodG9wX3NyY2RpcikvbTQvZmluZGtlcm5lbC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9rZXJuZWxvcHRpb24ubTQgXAorCSQodG9wX3NyY2RpcikvbTQva2VybmVsdmVyc2lvbi5tNCAkKHRvcF9zcmNkaXIpL200L2xpYnRvb2wubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbHRvcHRpb25zLm00ICQodG9wX3NyY2RpcikvbTQvbHRzdWdhci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9sdHZlcnNpb24ubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdH5vYnNvbGV0ZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9tYWxsb2NhdHRyaWJ1dGUubTQgXAorCSQodG9wX3NyY2RpcikvbTQvcG9wdGNvbnN0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3ByZWNvbXBpbGVkaGVhZGVyLm00ICQodG9wX3NyY2RpcikvbTQvcXQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvcmVzdWx0eW4ubTQgJCh0b3Bfc3JjZGlyKS9tNC9zc3RyZWFtLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3R5cGVkZWYubTQgJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuaW4KK2FtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCisJJChBQ0xPQ0FMX000KQorbWtpbnN0YWxsZGlycyA9ICQoaW5zdGFsbF9zaCkgLWQKK0NPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvY29uZmlnLmgKK0NPTkZJR19DTEVBTl9GSUxFUyA9CitDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMgPQorU09VUkNFUyA9CitESVNUX1NPVVJDRVMgPQorRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKK0FDTE9DQUwgPSBAQUNMT0NBTEAKK0FNVEFSID0gQEFNVEFSQAorQVIgPSBAQVJACitBVVRPQ09ORiA9IEBBVVRPQ09ORkAKK0FVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKK0FVVE9NQUtFID0gQEFVVE9NQUtFQAorQVdLID0gQEFXS0AKK0JGRF9MSUJTID0gQEJGRF9MSUJTQAorQ0FUX0VOVFJZX0VORCA9IEBDQVRfRU5UUllfRU5EQAorQ0FUX0VOVFJZX1NUQVJUID0gQENBVF9FTlRSWV9TVEFSVEAKK0NDID0gQENDQAorQ0NERVBNT0RFID0gQENDREVQTU9ERUAKK0NGTEFHUyA9IEBDRkxBR1NACitDUFAgPSBAQ1BQQAorQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACitDWFggPSBAQ1hYQAorQ1hYQ1BQID0gQENYWENQUEAKK0NYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKK0NYWEZMQUdTID0gQENYWEZMQUdTQAorQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKK0RBVEUgPSBAREFURUAKK0RFRlMgPSBAREVGU0AKK0RFUERJUiA9IEBERVBESVJACitET0NCT09LX1JPT1QgPSBARE9DQk9PS19ST09UQAorRFNZTVVUSUwgPSBARFNZTVVUSUxACitEVU1QQklOID0gQERVTVBCSU5ACitFQ0hPX0MgPSBARUNIT19DQAorRUNIT19OID0gQEVDSE9fTkAKK0VDSE9fVCA9IEBFQ0hPX1RACitFR1JFUCA9IEBFR1JFUEAKK0VYRUVYVCA9IEBFWEVFWFRACitFWFRSQV9DRkxBR1NfTU9EVUxFID0gQEVYVFJBX0NGTEFHU19NT0RVTEVACitGR1JFUCA9IEBGR1JFUEAKK0dSRVAgPSBAR1JFUEAKK0lOU1RBTEwgPSBASU5TVEFMTEAKK0lOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACitJTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAorSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACitJTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAorSkFWQV9IT01FRElSID0gQEpBVkFfSE9NRURJUkAKK0tJTkMgPSBAS0lOQ0AKK0tTUkMgPSBAS1NSQ0AKK0tWRVJTID0gQEtWRVJTQAorTEQgPSBATERACitMREZMQUdTID0gQExERkxBR1NACitMSUJFUlRZX0xJQlMgPSBATElCRVJUWV9MSUJTQAorTElCT0JKUyA9IEBMSUJPQkpTQAorTElCUyA9IEBMSUJTQAorTElCVE9PTCA9IEBMSUJUT09MQAorTElQTyA9IEBMSVBPQAorTE5fUyA9IEBMTl9TQAorTFRMSUJPQkpTID0gQExUTElCT0JKU0AKK01BS0VJTkZPID0gQE1BS0VJTkZPQAorTUtESVJfUCA9IEBNS0RJUl9QQAorTU9DID0gQE1PQ0AKK01PRElOU1RBTExESVIgPSBATU9ESU5TVEFMTERJUkAKK05NID0gQE5NQAorTk1FRElUID0gQE5NRURJVEAKK09CSkRVTVAgPSBAT0JKRFVNUEAKK09CSkVYVCA9IEBPQkpFWFRACitPUFJPRklMRV9ESVIgPSBAT1BST0ZJTEVfRElSQAorT1BST0ZJTEVfTU9EVUxFX0FSQ0ggPSBAT1BST0ZJTEVfTU9EVUxFX0FSQ0hACitPUF9DRkxBR1MgPSBAT1BfQ0ZMQUdTQAorT1BfQ1hYRkxBR1MgPSBAT1BfQ1hYRkxBR1NACitPUF9ET0NESVIgPSBAT1BfRE9DRElSQAorT1RPT0wgPSBAT1RPT0xACitPVE9PTDY0ID0gQE9UT09MNjRACitQQUNLQUdFID0gQFBBQ0tBR0VACitQQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKK1BBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACitQQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKK1BBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACitQQUNLQUdFX1VSTCA9IEBQQUNLQUdFX1VSTEAKK1BBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACitQQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKK1BLR19DT05GSUcgPSBAUEtHX0NPTkZJR0AKK1BLR19DT05GSUdfTElCRElSID0gQFBLR19DT05GSUdfTElCRElSQAorUEtHX0NPTkZJR19QQVRIID0gQFBLR19DT05GSUdfUEFUSEAKK1BPUFRfTElCUyA9IEBQT1BUX0xJQlNACitQVFJESUZGX1RfVFlQRSA9IEBQVFJESUZGX1RfVFlQRUAKK1FUX0NGTEFHUyA9IEBRVF9DRkxBR1NACitRVF9JTkNMVURFUyA9IEBRVF9JTkNMVURFU0AKK1FUX0xERkxBR1MgPSBAUVRfTERGTEFHU0AKK1FUX0xJQiA9IEBRVF9MSUJACitRVF9MSUJTID0gQFFUX0xJQlNACitRVF9WRVJTSU9OID0gQFFUX1ZFUlNJT05ACitSQU5MSUIgPSBAUkFOTElCQAorU0VEID0gQFNFREAKK1NFVF9NQUtFID0gQFNFVF9NQUtFQAorU0hFTEwgPSBAU0hFTExACitTSVpFX1RfVFlQRSA9IEBTSVpFX1RfVFlQRUAKK1NUUklQID0gQFNUUklQQAorVUlDID0gQFVJQ0AKK1VJQ2hlbHAgPSBAVUlDaGVscEAKK1ZFUlNJT04gPSBAVkVSU0lPTkAKK1hNS01GID0gQFhNS01GQAorWE1MX0NBVEFMT0cgPSBAWE1MX0NBVEFMT0dACitYU0xUUFJPQyA9IEBYU0xUUFJPQ0AKK1hTTFRQUk9DX0ZMQUdTID0gQFhTTFRQUk9DX0ZMQUdTQAorWF9DRkxBR1MgPSBAWF9DRkxBR1NACitYX0VYVFJBX0xJQlMgPSBAWF9FWFRSQV9MSUJTQAorWF9MSUJTID0gQFhfTElCU0AKK1hfUFJFX0xJQlMgPSBAWF9QUkVfTElCU0AKK2Fic19idWlsZGRpciA9IEBhYnNfYnVpbGRkaXJACithYnNfc3JjZGlyID0gQGFic19zcmNkaXJACithYnNfdG9wX2J1aWxkZGlyID0gQGFic190b3BfYnVpbGRkaXJACithYnNfdG9wX3NyY2RpciA9IEBhYnNfdG9wX3NyY2RpckAKK2FjX2N0X0NDID0gQGFjX2N0X0NDQAorYWNfY3RfQ1hYID0gQGFjX2N0X0NYWEAKK2FjX2N0X0RVTVBCSU4gPSBAYWNfY3RfRFVNUEJJTkAKK2FtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAorYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKK2FtX19xdW90ZSA9IEBhbV9fcXVvdGVACithbV9fdGFyID0gQGFtX190YXJACithbV9fdW50YXIgPSBAYW1fX3VudGFyQAorYmluZGlyID0gQGJpbmRpckAKK2J1aWxkID0gQGJ1aWxkQAorYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACitidWlsZF9jcHUgPSBAYnVpbGRfY3B1QAorYnVpbGRfb3MgPSBAYnVpbGRfb3NACitidWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAorYnVpbGRkaXIgPSBAYnVpbGRkaXJACitkYXRhZGlyID0gQGRhdGFkaXJACitkYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKK2RvY2RpciA9IEBkb2NkaXJACitkdmlkaXIgPSBAZHZpZGlyQAorZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACitob3N0ID0gQGhvc3RACitob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACitob3N0X2NwdSA9IEBob3N0X2NwdUAKK2hvc3Rfb3MgPSBAaG9zdF9vc0AKK2hvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAoraHRtbGRpciA9IEBodG1sZGlyQAoraW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAoraW5mb2RpciA9IEBpbmZvZGlyQAoraW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAorbGliZGlyID0gQGxpYmRpckAKK2xpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKK2xvY2FsZWRpciA9IEBsb2NhbGVkaXJACitsb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACitsdF9FQ0hPID0gQGx0X0VDSE9ACittYW5kaXIgPSBAbWFuZGlyQAorbWtkaXJfcCA9IEBta2Rpcl9wQAorb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAorcGRmZGlyID0gQHBkZmRpckAKK3ByZWZpeCA9IEBwcmVmaXhACitwcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACitwc2RpciA9IEBwc2RpckAKK3NiaW5kaXIgPSBAc2JpbmRpckAKK3NoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAorc3JjZGlyID0gQHNyY2RpckAKK3N5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKK3RhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACit0b3BfYnVpbGRfcHJlZml4ID0gQHRvcF9idWlsZF9wcmVmaXhACit0b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAordG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAordG9wZGlyID0gQHRvcGRpckAKK0VYVFJBX0RJU1QgPSBcCisJYmludXRpbHMubTQgXAorCWJ1aWx0aW5leHBlY3QubTQgXAorCWNvbXBpbGVyb3B0aW9uLm00IFwKKwljb25maWdtb2R1bGUubTQgXAorCWNvcHlpZmNoYW5nZS5tNCBcCisJZG9jYm9vay5tNCBcCisJZXh0cmFkaXJzLm00IFwKKwlmaW5ka2VybmVsLm00IFwKKwlrZXJuZWxvcHRpb24ubTQgXAorCWtlcm5lbHZlcnNpb24ubTQgXAorCW1hbGxvY2F0dHJpYnV0ZS5tNCBcCisJcG9wdGNvbnN0Lm00IFwKKwlwcmVjb21waWxlZGhlYWRlci5tNCBcCisJcXQubTQgXAorCXJlc3VsdHluLm00IFwKKwlzc3RyZWFtLm00IFwKKwl0eXBlZGVmLm00CisKK2FsbDogYWxsLWFtCisKKy5TVUZGSVhFUzoKKyQoc3JjZGlyKS9NYWtlZmlsZS5pbjogICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJQGZvciBkZXAgaW4gJD87IGRvIFwKKwkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAorCSAgICAqJCRkZXAqKSBcCisJICAgICAgKCBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggKSBcCisJICAgICAgICAmJiB7IGlmIHRlc3QgLWYgJEA7IHRoZW4gZXhpdCAwOyBlbHNlIGJyZWFrOyBmaTsgfTsgXAorCSAgICAgIGV4aXQgMTs7IFwKKwkgIGVzYWM7IFwKKwlkb25lOyBcCisJZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1mb3JlaWduIG00L01ha2VmaWxlJzsgXAorCSQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmIFwKKwkgICQoQVVUT01BS0UpIC0tZm9yZWlnbiBtNC9NYWtlZmlsZQorLlBSRUNJT1VTOiBNYWtlZmlsZQorTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworCUBjYXNlICckPycgaW4gXAorCSAgKmNvbmZpZy5zdGF0dXMqKSBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKKwkgICopIFwKKwkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAorCWVzYWM7CisKKyQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorCiskKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorJChBQ0xPQ0FMX000KTogICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6CisKK21vc3RseWNsZWFuLWxpYnRvb2w6CisJLXJtIC1mICoubG8KKworY2xlYW4tbGlidG9vbDoKKwktcm0gLXJmIC5saWJzIF9saWJzCit0YWdzOiBUQUdTCitUQUdTOgorCitjdGFnczogQ1RBR1MKK0NUQUdTOgorCisKK2Rpc3RkaXI6ICQoRElTVEZJTEVTKQorCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisJbGlzdD0nJChESVNURklMRVMpJzsgXAorCSAgZGlzdF9maWxlcz1gZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8IFwKKwkgIHNlZCAtZSAic3xeJCRzcmNkaXJzdHJpcC98fDt0IiBcCisJICAgICAgLWUgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98O3QiYDsgXAorCWNhc2UgJCRkaXN0X2ZpbGVzIGluIFwKKwkgICovKikgJChNS0RJUl9QKSBgZWNobyAiJCRkaXN0X2ZpbGVzIiB8IFwKKwkJCSAgIHNlZCAnL1wvLyFkO3N8XnwkKGRpc3RkaXIpL3w7cywvW14vXSokJCwsJyB8IFwKKwkJCSAgIHNvcnQgLXVgIDs7IFwKKwllc2FjOyBcCisJZm9yIGZpbGUgaW4gJCRkaXN0X2ZpbGVzOyBkbyBcCisJICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCisJICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAorCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAorCSAgICBpZiB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkZmlsZSI7IHRoZW4gXAorCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAorCSAgICBmaTsgXAorCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKKwkgICAgICBjcCAtZnBSICQoc3JjZGlyKS8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCisJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisJICAgIGZpOyBcCisJICAgIGNwIC1mcFIgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKKwkgIGVsc2UgXAorCSAgICB0ZXN0IC1mICIkKGRpc3RkaXIpLyQkZmlsZSIgXAorCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICIkKGRpc3RkaXIpLyQkZmlsZSIgXAorCSAgICB8fCBleGl0IDE7IFwKKwkgIGZpOyBcCisJZG9uZQorY2hlY2stYW06IGFsbC1hbQorY2hlY2s6IGNoZWNrLWFtCithbGwtYW06IE1ha2VmaWxlCitpbnN0YWxsZGlyczoKK2luc3RhbGw6IGluc3RhbGwtYW0KK2luc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLWFtCitpbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1hbQordW5pbnN0YWxsOiB1bmluc3RhbGwtYW0KKworaW5zdGFsbC1hbTogYWxsLWFtCisJQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KKworaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KK2luc3RhbGwtc3RyaXA6CisJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKKwkgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorCSAgYHRlc3QgLXogJyQoU1RSSVApJyB8fCBcCisJICAgIGVjaG8gIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciYCBpbnN0YWxsCittb3N0bHljbGVhbi1nZW5lcmljOgorCitjbGVhbi1nZW5lcmljOgorCitkaXN0Y2xlYW4tZ2VuZXJpYzoKKwktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKKwktdGVzdCAuID0gIiQoc3JjZGlyKSIgfHwgdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykKKworbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgorCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKKwlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCitjbGVhbjogY2xlYW4tYW0KKworY2xlYW4tYW06IGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBtb3N0bHljbGVhbi1hbQorCitkaXN0Y2xlYW46IGRpc3RjbGVhbi1hbQorCS1ybSAtZiBNYWtlZmlsZQorZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tZ2VuZXJpYworCitkdmk6IGR2aS1hbQorCitkdmktYW06CisKK2h0bWw6IGh0bWwtYW0KKworaHRtbC1hbToKKworaW5mbzogaW5mby1hbQorCitpbmZvLWFtOgorCitpbnN0YWxsLWRhdGEtYW06CisKK2luc3RhbGwtZHZpOiBpbnN0YWxsLWR2aS1hbQorCitpbnN0YWxsLWR2aS1hbToKKworaW5zdGFsbC1leGVjLWFtOgorCitpbnN0YWxsLWh0bWw6IGluc3RhbGwtaHRtbC1hbQorCitpbnN0YWxsLWh0bWwtYW06CisKK2luc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLWFtCisKK2luc3RhbGwtaW5mby1hbToKKworaW5zdGFsbC1tYW46CisKK2luc3RhbGwtcGRmOiBpbnN0YWxsLXBkZi1hbQorCitpbnN0YWxsLXBkZi1hbToKKworaW5zdGFsbC1wczogaW5zdGFsbC1wcy1hbQorCitpbnN0YWxsLXBzLWFtOgorCitpbnN0YWxsY2hlY2stYW06CisKK21haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tYW0KKwktcm0gLWYgTWFrZWZpbGUKK21haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKKworbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLWFtCisKK21vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wKKworcGRmOiBwZGYtYW0KKworcGRmLWFtOgorCitwczogcHMtYW0KKworcHMtYW06CisKK3VuaW5zdGFsbC1hbToKKworLk1BS0U6IGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcAorCisuUEhPTlk6IGFsbCBhbGwtYW0gY2hlY2sgY2hlY2stYW0gY2xlYW4gY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIFwKKwlkaXN0Y2xlYW4gZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLWxpYnRvb2wgZGlzdGRpciBkdmkgXAorCWR2aS1hbSBodG1sIGh0bWwtYW0gaW5mbyBpbmZvLWFtIGluc3RhbGwgaW5zdGFsbC1hbSBcCisJaW5zdGFsbC1kYXRhIGluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBpbnN0YWxsLWR2aS1hbSBcCisJaW5zdGFsbC1leGVjIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgaW5zdGFsbC1odG1sLWFtIFwKKwlpbnN0YWxsLWluZm8gaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIGluc3RhbGwtcGRmIFwKKwlpbnN0YWxsLXBkZi1hbSBpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gaW5zdGFsbC1zdHJpcCBcCisJaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBtYWludGFpbmVyLWNsZWFuIFwKKwltYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCisJbW9zdGx5Y2xlYW4tbGlidG9vbCBwZGYgcGRmLWFtIHBzIHBzLWFtIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0KKworCisjIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgorIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCisuTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9tNC9iaW51dGlscy5tNCBiL29wcm9maWxlLTAuOS43L200L2JpbnV0aWxzLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1ZmIxNWEKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9tNC9iaW51dGlscy5tNApAQCAtMCwwICsxLDUzIEBACitkbmwgQVhfQklOVVRJTFMgLSBjaGVjayBmb3IgbmVlZGVkIGJpbnV0aWxzIHN0dWZmCisKK0FDX0RFRlVOKFtBWF9CSU5VVElMU10sCitbCitkbmwgc29tZSBkaXN0cm8gaGF2ZSBhIGxpYmliZXJ0eS5hIGJ1dCBkb2VzIG5vdCBoYXZlIGEgbGliaWJlcnR5LmgKK0FDX0NIRUNLX0hFQURFUlMobGliaWJlcnR5LmgpCitBQ19DSEVDS19MSUIoaWJlcnR5LCBjcGx1c19kZW1hbmdsZSwsIEFDX01TR19FUlJPUihbbGliZXJ0eSBsaWJyYXJ5IG5vdCBmb3VuZF0pKQorQUNfQ0hFQ0tfRlVOQ1MoeGNhbGxvYykKK0FDX0NIRUNLX0ZVTkNTKHhtZW1kdXApCitBQ19DSEVDS19MSUIoZGwsIGRsb3BlbiwgTElCUz0iJExJQlMgLWxkbCI7IERMX0xJQj0iLWxkbCIsIERMX0xJQj0iIikKK0FDX0NIRUNLX0xJQihpbnRsLCBtYWluLCBMSUJTPSIkTElCUyAtbGludGwiOyBJTlRMX0xJQj0iLWxpbnRsIiwgSU5UTF9MSUI9IiIpCisKK0FDX0NIRUNLX0xJQihiZmQsIGJmZF9vcGVuciwgTElCUz0iLWxiZmQgJExJQlMiOyBaX0xJQj0iIiwKKwlbQUNfQ0hFQ0tfTElCKHosIGNvbXByZXNzLAorZG5sIFVzZSBhIGRpZmZlcmVudCBiZmQgZnVuY3Rpb24gaGVyZSBzbyBhcyBub3QgdG8gdXNlIGNhY2hlZCByZXN1bHQgZnJvbSBhYm92ZQorCQlbQUNfQ0hFQ0tfTElCKGJmZCwgYmZkX2Zkb3BlbnIsIExJQlM9Ii1sYmZkIC1seiAkTElCUyI7IFpfTElCPSItbHoiLAorCQkJW0FDX01TR19FUlJPUihbYmZkIGxpYnJhcnkgbm90IGZvdW5kXSldLCAtbHopCisJCV0sCisJCVtBQ19NU0dfRVJST1IoW2xpYnogbGlicmFyeSBub3QgZm91bmQ7IHJlcXVpcmVkIGJ5IGxpYmJmZF0pXSkKKwldCispCisKK0FDX0xBTkdfUFVTSChDKQorIyBEZXRlcm1pbmUgaWYgYmZkX2dldF9zeW50aGV0aWNfc3ltdGFiIG1hY3JvIGlzIGF2YWlsYWJsZQorT1M9ImB1bmFtZWAiCitpZiB0ZXN0ICIkT1MiID0gIkxpbnV4IjsgdGhlbgorCUFDX01TR19DSEVDS0lORyhbd2hldGhlciBiZmRfZ2V0X3N5bnRoZXRpY19zeW10YWIoKSBleGlzdHMgaW4gQkZEIGxpYnJhcnldKQorCXJtIC1mIHRlc3QtZm9yLXN5bnRoCisJQUNfTEFOR19DT05GVEVTVCgKKwkJW0FDX0xBTkdfUFJPR1JBTShbWyNpbmNsdWRlIDxiZmQuaD5dXSwKKwkJCVtbYXN5bWJvbCAqIHN5bnRoc3ltczsJYmZkICogaWJmZCA9IDA7IAorCQkJbG9uZyBzeW50aF9jb3VudCA9IGJmZF9nZXRfc3ludGhldGljX3N5bXRhYihpYmZkLCAwLCAwLCAwLCAwLCAmc3ludGhzeW1zKTsKKwkJCWV4dGVybiBjb25zdCBiZmRfdGFyZ2V0IGJmZF9lbGY2NF9wb3dlcnBjX3ZlYzsKKwkJCWV4dGVybiBjb25zdCBiZmRfdGFyZ2V0IGJmZF9lbGY2NF9wb3dlcnBjbGVfdmVjOworCQkJY2hhciAqIHBwY19uYW1lID0gYmZkX2VsZjY0X3Bvd2VycGNfdmVjLm5hbWU7CisJCQljaGFyICogcHBjbGVfbmFtZSA9IGJmZF9lbGY2NF9wb3dlcnBjbGVfdmVjLm5hbWU7CisJCQlwcmludGYoIiVzICVzXG4iLCBwcGNfbmFtZSwgcHBjbGVfbmFtZSk7XV0pCisJCV0pCisJJENDIGNvbmZ0ZXN0LiRhY19leHQgJENGTEFHUyAkTERGTEFHUyAkTElCUyAtbyAgdGVzdC1mb3Itc3ludGggPiAvZGV2L251bGwgMj4mMQorCWlmIHRlc3QgLWYgdGVzdC1mb3Itc3ludGg7IHRoZW4KKwkJZWNobyAieWVzIgorCQlTWU5USEVTSVpFX1NZTUJPTFM9JzEnCisJZWxzZQorCQllY2hvICJubyIKKwkJU1lOVEhFU0laRV9TWU1CT0xTPScwJworCWZpCisJQUNfREVGSU5FX1VOUVVPVEVEKFNZTlRIRVNJWkVfU1lNQk9MUywgJFNZTlRIRVNJWkVfU1lNQk9MUywgW1N5bnRoZXNpemUgc3BlY2lhbCBzeW1ib2xzIHdoZW4gbmVlZGVkXSkKKwlybSAtZiB0ZXN0LWZvci1zeW50aCoKKworZmkKK0FDX0xBTkdfUE9QKEMpCitdCispCmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9tNC9idWlsdGluZXhwZWN0Lm00IGIvb3Byb2ZpbGUtMC45LjcvbTQvYnVpbHRpbmV4cGVjdC5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTc3NjQwCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvbTQvYnVpbHRpbmV4cGVjdC5tNApAQCAtMCwwICsxLDE1IEBACitkbmwgYnVpbHRpbl9leHBlY3QgaXMgdXNlZCBpbiBtb2R1bGUgd2UgY2FuJ3QgYWRkIHRoYXQgaW4gY29uZmlnLmgKK0FDX0RFRlVOKFtBWF9CVUlMVElOX0VYUEVDVF0sCitbCitBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgX19idWlsdGluX2V4cGVjdCBpcyB1bmRlcnN0b29kXSkKK1NBVkVfQ0ZMQUdTPSRDRkxBR1MKK0NGTEFHUz0iLVdlcnJvciAkQ0ZMQUdTIgorQUNfVFJZX0xJTksoLFsKK2ludCBpOworaWYgKF9fYnVpbHRpbl9leHBlY3QoaSwgMCkpIHsgfQorXSwKK0FDX01TR19SRVNVTFQoW3llc10pOyBFWFRSQV9DRkxBR1NfTU9EVUxFPSIkRVhUUkFfQ0ZMQUdTX01PRFVMRSAtREVYUEVDVF9PSyIsCitBQ19NU0dfUkVTVUxUKFtub10pOykKK0NGTEFHUz0kU0FWRV9DRkxBR1MgCitdCispIApkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvbTQvY2VsbHNwdWJmZHN1cHBvcnQubTQgYi9vcHJvZmlsZS0wLjkuNy9tNC9jZWxsc3B1YmZkc3VwcG9ydC5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDRlZTg3Ci0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvbTQvY2VsbHNwdWJmZHN1cHBvcnQubTQKQEAgLTAsMCArMSw1MiBAQAorZG5sIEFYX0NFTExfU1BVIC0gY2hlY2sgZm9yIG5lZWRlZCBiaW51dGlscyBzdHVmZiBmb3IgQ2VsbCBCRSBTUFUKK0FDX0RFRlVOKFtBWF9DRUxMX1NQVV0sCitbCisjIE9uIENlbGwgQkUgYXJjaGl0ZWN0dXJlLCBPUHJvZmlsZSB1c2VzIGJmZF9vcGVucl9pb3ZlYyB3aGVuIHByb2Nlc3Npbmcgc29tZQorIyBTUFUgcHJvZmlsZXMuICBUbyBwYXJzZSBlbWJlZGRlZCBTUFUgRUxGIG9uIENlbGwgQkUsIE9Qcm9maWxlIHJlcXVpcmVzIGEKKyMgdmVyc2lvbiBvZiBiZmRfb3BlbnJfaW92ZWMgdGhhdCBzdXBwb3J0cyB0aGUgZWxmMzItc3B1IHRhcmdldC4KKyMgVGhpcyB2ZXJzaW9uIG9mIHRoZSBmdW5jdGlvbiBhbHNvIGhhcyBhIDd0aCBwYXJhbWV0ZXIgdGhhdCdzIGJlZW4gYWRkZWQuCisjIEZpcnN0LCB3ZSBjaGVjayBmb3IgZXhpc3RlbmNlIG9mIHRoZSBiYXNlIGJmZF9vcGVucl9pb3ZlYy4gIElmIGl0IGV4aXN0cywKKyMgd2UgdGhlbiB1c2UgYSB0ZW1wb3JhcnkgdGVzdCBwcm9ncmFtIGJlbG93IHRoYXQgcGFzc2VzIDcgYXJndW1lbnRzIHRvCisjIGJmZF9vcGVucl9pb3ZlYzsgaWYgaXQgY29tcGlsZXMgT0ssIHdlIGFzc3VtZSB3ZSBoYXZlIHRoZSByaWdodCBCRkQKKyMgbGlicmFyeSB0byBzdXBwb3J0IENlbGwgQkUgU1BVIHByb2ZpbGluZy4KKworQUNfTEFOR19QVVNIKEMpCisKK0FDX0NIRUNLX0xJQihiZmQsIGJmZF9vcGVucl9pb3ZlYywKKwlbYmZkX29wZW5yX2lvdmVjX2V4aXN0cz0ieWVzIl0sCisJW2JmZF9vcGVucl9pb3ZlY19leGlzdHM9Im5vIl0KKykKKworaWYgdGVzdCAiJGJmZF9vcGVucl9pb3ZlY19leGlzdHMiID0gInllcyI7IHRoZW4KKwlBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgYmZkX29wZW5yX2lvdmVjIGhhcyBzZXZlbiBwYXJhbWV0ZXJzXSkKKwlBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFsjaW5jbHVkZSA8YmZkLmg+CisJICAjaW5jbHVkZSA8c3RkbGliLmg+CisJXSwKKwkgW1tzdHJ1Y3QgYmZkICpuYmZkID0gYmZkX29wZW5yX2lvdmVjKCJzb21lLWZpbGUiLCAiZWxmMzItc3B1IiwKKwkJCU5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpOworCSAgcmV0dXJuIDA7CisJXV0pXSwKKwlbQUNfREVGSU5FKFtIQVZFX0JGRF9PUEVOUl9JT1ZFQ19XSVRIXzdQQVJNU10sCisJCVtdLAorCQlbRGVmaW5lZCBpZiB5b3UgaGF2ZSB0aGUgdmVyc2lvbiBvZiBiZmRfb3BlbnJfaW92ZWMgd2l0aCA3IHBhcmFtZXRlcnNdKQorCWJmZF9vcGVuX2lvdmVjXzc9InllcyIKKwlBQ19NU0dfUkVTVUxUKFt5ZXNdKV0sCisJW0FDX01TR19SRVNVTFQoW25vXSldCisJKQorZmkKKworQUNfTEFOR19QT1AoQykKKworYXJjaD0idW5rbm93biIKK0FDX0FSR19XSVRIKHRhcmdldCwKK1sgIC0td2l0aC10YXJnZXQ9Y2VsbC1iZSAgIENoZWNrIEJGRCBzdXBwb3J0IGZvciBDZWxsIEJyb2FkYmFuZCBFbmdpbmUgU1BVIHByb2ZpbGluZ10sIGFyY2g9JHdpdGh2YWwpCisKK2lmIHRlc3QgIiRhcmNoIiA9ICJjZWxsLWJlIjsgdGhlbgorICAgICAgICBpZiB0ZXN0ICIkYmZkX29wZW5faW92ZWNfNyIgPSAieWVzIjsgdGhlbgorCSAgICAgICAgQUNfTVNHX05PVElDRShbQkZEIGxpYnJhcnkgaGFzIHN1cHBvcnQgZm9yIENlbGwgQnJvYWRiYW5kIEVuZ2luZSBTUFUgcHJvZmlsaW5nXSkKKwllbHNlCisJCUFDX0VSUk9SKFtCRkQgbGlicmFyeSBkb2VzIG5vdCBzdXBwb3J0IGVsZjMyLXNwdSB0YXJnZXQ7IFNQVSBwcm9maWxpbmcgaXMgdW5zdXBwb3J0ZWRdKQorCWZpCitmaQorXQorKQpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvbTQvY29tcGlsZXJvcHRpb24ubTQgYi9vcHJvZmlsZS0wLjkuNy9tNC9jb21waWxlcm9wdGlvbi5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZmVjMDY2Ci0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvbTQvY29tcGlsZXJvcHRpb24ubTQKQEAgLTAsMCArMSwyNiBAQAorZG5sIEFYX0NGTEFHU19PUFRJT05TKHZhci1uYW1lLCBvcHRpb24pCitkbmwgYWRkIG9wdGlvbiB0byB2YXItbmFtZSBpZiAkQ0Mgc3VwcG9ydCBpdC4KK0FDX0RFRlVOKFtBWF9DRkxBR1NfT1BUSU9OXSwgWworQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyICR7Q0N9ICQyIGlzIHVuZGVyc3Rvb2RdKQorQUNfTEFOR19TQVZFCitBQ19MQU5HX0MKK1NBVkVfQ0ZMQUdTPSRDRkxBR1MKK0NGTEFHUz0kMgorQUNfVFJZX0NPTVBJTEUoLFs7XSxBQ19NU0dfUkVTVUxUKFt5ZXNdKTsgJDE9IiR7JDF9ICQyIixBQ19NU0dfUkVTVUxUKFtub10pKQorQ0ZMQUdTPSRTQVZFX0NGTEFHUworQUNfTEFOR19SRVNUT1JFCitdKQorCisKK2RubCBBWF9DWFhGTEFHU19PUFRJT05TKHZhci1uYW1lLCBvcHRpb24pCitkbmwgYWRkIG9wdGlvbiB0byB2YXItbmFtZSBpZiAkQ1hYIHN1cHBvcnQgaXQuCitBQ19ERUZVTihbQVhfQ1hYRkxBR1NfT1BUSU9OXSwgWworQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyICR7Q1hYfSAkMiBpcyB1bmRlcnN0b29kXSkKK0FDX0xBTkdfU0FWRQorQUNfTEFOR19DUExVU1BMVVMKK1NBVkVfQ1hYRkxBR1M9JENYWEZMQUdTCitDWFhGTEFHUz0kMgorQUNfVFJZX0NPTVBJTEUoLFs7XSxBQ19NU0dfUkVTVUxUKFt5ZXNdKTsgJDE9IiR7JDF9ICQyIixBQ19NU0dfUkVTVUxUKFtub10pKQorQ1hYRkxBR1M9JFNBVkVfQ1hYRkxBR1MKK0FDX0xBTkdfUkVTVE9SRQorXSkKZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L200L2NvbmZpZ21vZHVsZS5tNCBiL29wcm9maWxlLTAuOS43L200L2NvbmZpZ21vZHVsZS5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OWZlMzRkCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvbTQvY29uZmlnbW9kdWxlLm00CkBAIC0wLDAgKzEsODAgQEAKK2RubCBIYW5kbGUgdGhlIDIuNCBtb2R1bGUgaW5zaWRlIG1vZHVsZS8KK0FDX0RFRlVOKFtBWF9DT05GSUdfTU9EVUxFXSwKK1sKK2lmIHRlc3QgISAtZiAkS0lOQy9saW51eC9hdXRvY29uZi5oOyB0aGVuCisJQUNfTVNHX0VSUk9SKFtubyBzdWl0YWJseSBjb25maWd1cmVkIGtlcm5lbCBpbmNsdWRlIHRyZWUgZm91bmRdKQorZmkKKworZG5sICAtLS0gR2V0IExpbnV4IGtlcm5lbCB2ZXJzaW9uIGFuZCBjb21waWxlIHBhcmFtZXRlcnMgLS0tCisKK0FDX1NVQlNUKEtWRVJTKQorQUNfTVNHX0NIRUNLSU5HKFtmb3Iga2VybmVsIHZlcnNpb25dKQorZG5sIGl0J3MgbGlrZSB0aGlzIHRvIGhhbmRsZSBtYW5kcmFrZSdzIGZ1YmFyIHZlcnNpb24uaCAtIGJ1ZyAjNDcxNDQ4CitldmFsIEtWRVJTPWBnY2MgLUkkS0lOQyAtRSAtZE0gJEtJTkMvbGludXgvdmVyc2lvbi5oIHwgZ3JlcCAtdyBVVFNfUkVMRUFTRSB8IGF3ayAne3ByaW50ICRbXTN9J2AKK0FDX01TR19SRVNVTFQoWyRLVkVSU10pCitjYXNlICIkS1ZFUlMiIGluCisyLjIuKnwyLjQuKikgOzsKKyopIEFDX01TR19FUlJPUihbVW5zdXBwb3J0ZWQga2VybmVsIHZlcnNpb25dKQorZXNhYworCitkbmwgQ2hlY2sgZm9yIHRoZSBtaW5pbWFsIGtlcm5lbCB2ZXJzaW9uIHN1cHBvcnRlZAorQUNfTVNHX0NIRUNLSU5HKFtrZXJuZWwgdmVyc2lvbl0pCitBWF9LRVJORUxfVkVSU0lPTigyLCAyLCAxMCwgPD0sIEFDX01TR19SRVNVTFQoW29rXSksIEFDX01TR19FUlJPUihbY2hlY2sgaHRtbCBkb2N1bWVudGF0aW9uIGluc3RhbGwgc2VjdGlvbl0pKQorCitkbmwgbGludXgvc3BpbmxvY2suaCBhZGRlZCBhdCBzb21lIHBvaW50IGluIHBhc3QKK0FDX01TR19DSEVDS0lORyhbZm9yICRLSU5DL2xpbnV4L3NwaW5sb2NrLmhdKQoraWYgdGVzdCAtZiAkS0lOQy9saW51eC9zcGlubG9jay5oOyB0aGVuCisJRVhUUkFfQ0ZMQUdTX01PRFVMRT0iJEVYVFJBX0NGTEFHU19NT0RVTEUgLURIQVZFX0xJTlVYX1NQSU5MT0NLX0hFQURFUiIKKwlBQ19NU0dfUkVTVUxUKFt5ZXNdKQorZWxzZQorCUFDX01TR19SRVNVTFQoW25vXSkKK2ZpCisKK0FDX01TR19DSEVDS0lORyhbZm9yIHJ0Y19sb2NrXSkKK2djYyAtSSRLSU5DIC1FICRLSU5DL2xpbnV4L21jMTQ2ODE4cnRjLmggfCBncmVwIHJ0Y19sb2NrID4vZGV2L251bGwKK2lmIHRlc3QgIiQ/IiAtZXEgMDsgdGhlbgorCUVYVFJBX0NGTEFHU19NT0RVTEU9IiRFWFRSQV9DRkxBR1NfTU9EVUxFIC1EUlRDX0xPQ0siCisJQUNfTVNHX1JFU1VMVChbeWVzXSkKK2Vsc2UKKwlBQ19NU0dfUkVTVUxUKFtub10pCitmaQorCSAKK2FyY2g9InVua25vd24iCitBQ19NU0dfQ0hFQ0tJTkcoZm9yIHg4NiBhcmNoaXRlY3R1cmUpCitBWF9LRVJORUxfT1BUSU9OKENPTkZJR19YODYsIHg4Nj0xLCB4ODY9MCkKK0FYX0tFUk5FTF9PUFRJT04oQ09ORklHX1g4Nl9XUF9XT1JLU19PSywgeDg2PTEsIHg4Nj0keDg2KQorQVhfTVNHX1JFU1VMVF9ZTigkeDg2KQordGVzdCAiJHg4NiIgPSAxICYmIGFyY2g9Ing4NiIKKwkKK2lmIHRlc3QgIiRhcmNoIiA9ICJ1bmtub3duIjsgdGhlbgorCUFDX01TR19DSEVDS0lORyhmb3IgaWE2NCBhcmNoaXRlY3R1cmUpCisgCUFYX0tFUk5FTF9PUFRJT04oQ09ORklHX0lBNjQsIGlhNjQ9MSwgaWE2ND0wKQorIAlBWF9NU0dfUkVTVUxUX1lOKCRpYTY0KQorIAl0ZXN0ICIkaWE2NCIgPSAxICYmIGFyY2g9ImlhNjQiCitmaQorCit0ZXN0ICIkYXJjaCIgPSAidW5rbm93biIgJiYgQUNfTVNHX0VSUk9SKFVuc3VwcG9ydGVkIGFyY2hpdGVjdHVyZSkKKworZG5sIGNoZWNrIHRvIHNlZSBpZiBrZXJuZWwgdmVyaW9uIGFwcHJvcHJpYXRlIGZvciBhcmNoCitBQ19NU0dfQ0hFQ0tJTkcoYXJjaC9rZXJuZWwgdmVyc2lvbiBjb21iaW5hdGlvbikKK2Nhc2UgIiRhcmNoIiBpbgoraWE2NCkKKwlBWF9LRVJORUxfVkVSU0lPTigyLCA0LCAxOCwgPCwgQUNfTVNHX1JFU1VMVChbb2tdKSwKKwkJQUNfTVNHX0VSUk9SKFt1bnN1cHBvcnRlZCBhcmNoL2tlcm5lbF0pKSA7OworKikgQUNfTVNHX1JFU1VMVChbb2tdKQorZXNhYworCitkbmwgZm9yIG5vdyB3ZSBkbyBub3Qgc3VwcG9ydCBQUkVFTVBUIHBhdGNoCitBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBwcmVlbXB0IHBhdGNoXSkKK0FYX0tFUk5FTF9PUFRJT04oQ09ORklHX1BSRUVNUFQscHJlZW1wdD0xLHByZWVtcHQ9MCkKK0FYX01TR19SRVNVTFRfWU4oWyRwcmVlbXB0XSkKK3Rlc3QgIiRwcmVlbXB0IiA9IDAgfHwgQUNfTVNHX0VSUk9SKFt1bnN1cHBvcnRlZCBrZXJuZWwgY29uZmlndXJhdGlvbiA6IENPTkZJR19QUkVFTVBUXSkKKworQUNfU1VCU1QoS0lOQykKKworTU9ESU5TVEFMTERJUj0vbGliL21vZHVsZXMvJEtWRVJTCisgCitPUFJPRklMRV9NT0RVTEVfQVJDSD0kYXJjaAorQUNfU1VCU1QoT1BST0ZJTEVfTU9EVUxFX0FSQ0gpCitdCispCmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9tNC9jb3B5aWZjaGFuZ2UubTQgYi9vcHJvZmlsZS0wLjkuNy9tNC9jb3B5aWZjaGFuZ2UubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQ2NGRlMAotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L200L2NvcHlpZmNoYW5nZS5tNApAQCAtMCwwICsxLDEzIEBACitkbmwgQVhfQ09QWV9JRl9DSEFOR0Uoc291cmNlLCBkZXN0KQorZG5sIGNvcHkgc291cmNlIHRvIGRlc3QgaWYgdGhleSBkb24ndCBjb21wYXJlIGVxdWFsbHkgb3IgaWYgZGVzdCBkb2Vzbid0IGV4aXN0CitBQ19ERUZVTihbQVhfQ09QWV9JRl9DSEFOR0VdLCBbCitpZiB0ZXN0IC1yICQyOyB0aGVuCisJaWYgY21wICQxICQyID4gL2Rldi9udWxsOyB0aGVuCisJCWVjaG8gJDIgaXMgdW5jaGFuZ2VkCisJZWxzZQorCQljcCAtZiAkMSAkMgorCWZpCitlbHNlCisJY3AgLWYgJDEgJDIKK2ZpCitdKQpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvbTQvZG9jYm9vay5tNCBiL29wcm9maWxlLTAuOS43L200L2RvY2Jvb2subTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTEzYjBiZAotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L200L2RvY2Jvb2subTQKQEAgLTAsMCArMSw1MyBAQAorZG5sIEFYX0NIRUNLX0RPQ0JPT0sKK0FDX0RFRlVOKFtBWF9DSEVDS19ET0NCT09LXSwgWworIyBJdCdzIGp1c3QgcnVkZSB0byBnbyBvdmVyIHRoZSBuZXQgdG8gYnVpbGQKK1hTTFRQUk9DX0ZMQUdTPS0tbm9uZXQKK0RPQ0JPT0tfUk9PVD0KK2lmIHRlc3QgISAtZiAvZXRjL3htbC9jYXRhbG9nOyB0aGVuCisJZm9yIGkgaW4gL3Vzci9zaGFyZS9zZ21sL2RvY2Jvb2svc3R5bGVzaGVldC94c2wvbndhbHNoIC91c3Ivc2hhcmUvc2dtbC9kb2Nib29rL3hzbC1zdHlsZXNoZWV0cy87CisJZG8KKwkJaWYgdGVzdCAtZCAiJGkiOyB0aGVuCisJCQlET0NCT09LX1JPT1Q9JGkKKwkJZmkKKwlkb25lCisKKwkjIExhc3QgcmVzb3J0IC0gdHJ5IG5ldAorCWlmIHRlc3QgLXogIiRET0NCT09LX1JPT1QiOyB0aGVuCisJCVhTTFRQUk9DX0ZMQUdTPQorCWZpCitlbHNlCisJWE1MX0NBVEFMT0c9L2V0Yy94bWwvY2F0YWxvZworCUNBVF9FTlRSWV9TVEFSVD0nPCEtLScKKwlDQVRfRU5UUllfRU5EPSctLT4nCitmaQorCitBQ19DSEVDS19QUk9HKFhTTFRQUk9DLHhzbHRwcm9jLHhzbHRwcm9jLCkKK1hTTFRQUk9DX1dPUktTPW5vCitpZiB0ZXN0IC1uICIkWFNMVFBST0MiOyB0aGVuCisJQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHhzbHRwcm9jIHdvcmtzXSkKKworCWlmIHRlc3QgLW4gIiRYTUxfQ0FUQUxPRyI7IHRoZW4KKwkJREJfRklMRT0iaHR0cDovL2RvY2Jvb2suc291cmNlZm9yZ2UubmV0L3JlbGVhc2UveHNsL2N1cnJlbnQveGh0bWwvZG9jYm9vay54c2wiCisJZWxzZQorCQlEQl9GSUxFPSIkRE9DQk9PS19ST09UL2RvY2Jvb2sueHNsIgorCWZpCisKKwkkWFNMVFBST0MgJFhTTFRQUk9DX0ZMQUdTICREQl9GSUxFID4vZGV2L251bGwgMj4mMSA8PCBFTkQKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9J0lTTy04ODU5LTEnPz4KKzwhRE9DVFlQRSBib29rIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4xLjIvL0VOIiAiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjEuMi9kb2Nib29reC5kdGQiPgorPGJvb2sgaWQ9InRlc3QiPgorPC9ib29rPgorRU5ECisJaWYgdGVzdCAiJD8iID0gMDsgdGhlbgorCQlYU0xUUFJPQ19XT1JLUz15ZXMKKwlmaQorCUFDX01TR19SRVNVTFQoJFhTTFRQUk9DX1dPUktTKQorZmkKK0FNX0NPTkRJVElPTkFMKGhhdmVfeHNsdHByb2MsIHRlc3QgIiRYU0xUUFJPQ19XT1JLUyIgPSAieWVzIikKKworQUNfU1VCU1QoWE1MX0NBVEFMT0cpCitBQ19TVUJTVChYU0xUUFJPQ19GTEFHUykKK0FDX1NVQlNUKERPQ0JPT0tfUk9PVCkKK0FDX1NVQlNUKENBVF9FTlRSWV9TVEFSVCkKK0FDX1NVQlNUKENBVF9FTlRSWV9FTkQpCitdKQpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvbTQvZXh0cmFkaXJzLm00IGIvb3Byb2ZpbGUtMC45LjcvbTQvZXh0cmFkaXJzLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExMmIwM2QKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9tNC9leHRyYWRpcnMubTQKQEAgLTAsMCArMSwzNiBAQAorZG5sIEFYX0VYVFJBX0RJUlMgLSBMZXQgdXNlciBzcGVjaWZ5IGV4dHJhIGRpcnMgZm9yIGluY2x1ZGUvbGlicworQUNfREVGVU4oW0FYX0VYVFJBX0RJUlNdLAorWworQUNfQVJHX1dJVEgoZXh0cmEtaW5jbHVkZXMsCitbICAtLXdpdGgtZXh0cmEtaW5jbHVkZXM9RElSICAgIGFkZCBleHRyYSBpbmNsdWRlIHBhdGhzXSwKKyAgdXNlX2V4dHJhX2luY2x1ZGVzPSIkd2l0aHZhbCIsCisgIHVzZV9leHRyYV9pbmNsdWRlcz1OTworKQoraWYgdGVzdCAtbiAiJHVzZV9leHRyYV9pbmNsdWRlcyIgJiYgXAorICAgICAgICB0ZXN0ICIkdXNlX2V4dHJhX2luY2x1ZGVzIiAhPSAiTk8iOyB0aGVuCisgIGFjX3NhdmVfaWZzPSRJRlMKKyAgSUZTPSc6JworICBmb3IgZGlyIGluICR1c2VfZXh0cmFfaW5jbHVkZXM7IGRvCisgICAgZXh0cmFfaW5jbHVkZXM9IiRleHRyYV9pbmNsdWRlcyAtSSRkaXIiCisgIGRvbmUKKyAgSUZTPSRhY19zYXZlX2lmcworICBDUFBGTEFHUz0iJENQUEZMQUdTICRleHRyYV9pbmNsdWRlcyIKK2ZpCisKK0FDX0FSR19XSVRIKGV4dHJhLWxpYnMsCitbICAtLXdpdGgtZXh0cmEtbGlicz1ESVIgICAgICAgIGFkZCBleHRyYSBsaWJyYXJ5IHBhdGhzXSwKKyAgdXNlX2V4dHJhX2xpYnM9JHdpdGh2YWwsCisgIHVzZV9leHRyYV9saWJzPU5PCispCitpZiB0ZXN0IC1uICIkdXNlX2V4dHJhX2xpYnMiICYmIFwKKyAgICAgICAgdGVzdCAiJHVzZV9leHRyYV9saWJzIiAhPSAiTk8iOyB0aGVuCisgICBhY19zYXZlX2lmcz0kSUZTCisgICBJRlM9JzonCisgICBmb3IgZGlyIGluICR1c2VfZXh0cmFfbGliczsgZG8KKyAgICAgZXh0cmFfbGlicmFyaWVzPSIkZXh0cmFfbGlicmFyaWVzIC1MJGRpciIKKyAgIGRvbmUKKyAgIElGUz0kYWNfc2F2ZV9pZnMKKyAgIExERkxBR1M9IiRMREZMQUdTICRleHRyYV9saWJyYXJpZXMiCitmaQorXQorKQpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvbTQvZmluZGtlcm5lbC5tNCBiL29wcm9maWxlLTAuOS43L200L2ZpbmRrZXJuZWwubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGY2NjQzNwotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L200L2ZpbmRrZXJuZWwubTQKQEAgLTAsMCArMSwyNyBAQAorZG5sIEZpbmQgdGhlIGtlcm5lbCBhbmQgaGFuZGxlIDIuNiBzZXR0aW5ncworQUNfREVGVU4oW0FYX0ZJTkRfS0VSTkVMXSwKK1sKK0FDX01TR19DSEVDS0lORyhbZm9yIGtlcm5lbCBPUHJvZmlsZSBzdXBwb3J0XSkKK0FDX0FSR19XSVRIKGtlcm5lbC1zdXBwb3J0LCBbICAtLXdpdGgta2VybmVsLXN1cHBvcnQgICAgICAgIFVzZSAyLjYga2VybmVsIChubyBrZXJuZWwgc291cmNlIHRyZWUgcmVxdWlyZWQpXSwKK2lmIHRlc3QgIiR3aXRodmFsIiA9ICJ5ZXMiOyB0aGVuCisJT1BST0ZJTEVfMjY9eWVzCitmaQorKSAKKworaWYgdGVzdCAiJE9QUk9GSUxFXzI2IiAhPSAieWVzIjsgdGhlbgorCWRubCAgLS0tIEZpbmQgdGhlIExpbnV4IGtlcm5lbCwgYXQgbGVhc3QgdGhlIGhlYWRlcnMgLS0tCisgCisJQUNfU1VCU1QoS1NSQykKKwlLU1JDPS9saWIvbW9kdWxlcy9gdW5hbWUgLXJgL2J1aWxkCisJQUNfQVJHX1dJVEgobGludXgsIFsgIC0td2l0aC1saW51eD1kaXIgICAgICAgICAgICAgUGF0aCB0byBMaW51eCBzb3VyY2UgdHJlZV0sIEtTUkM9JHdpdGh2YWwpIAorCUtJTkM9JEtTUkMvaW5jbHVkZQorCUFDX1NVQlNUKEtJTkMpCisKKwlBWF9LRVJORUxfT1BUSU9OKENPTkZJR19PUFJPRklMRSwgT1BST0ZJTEVfMjY9eWVzLCBPUFJPRklMRV8yNj1ubykKKwlBWF9LRVJORUxfT1BUSU9OKENPTkZJR19PUFJPRklMRV9NT0RVTEUsIE9QUk9GSUxFXzI2PXllcywgT1BST0ZJTEVfMjY9JE9QUk9GSUxFXzI2KQorZmkKK0FDX01TR19SRVNVTFQoJE9QUk9GSUxFXzI2KQorCitBTV9DT05ESVRJT05BTChrZXJuZWxfc3VwcG9ydCwgdGVzdCAiJE9QUk9GSUxFXzI2IiA9IHllcykKK10KKykKZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L200L2tlcm5lbG9wdGlvbi5tNCBiL29wcm9maWxlLTAuOS43L200L2tlcm5lbG9wdGlvbi5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OWNlNjVmCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvbTQva2VybmVsb3B0aW9uLm00CkBAIC0wLDAgKzEsMTMgQEAKK2RubCBBWF9LRVJORUxfT1BUSU9OKG9wdGlvbiwgYWN0aW9uLWlmLWZvdW5kLCBhY3Rpb24taWYtbm90LWZvdW5kKQorZG5sIHNlZSBpZiBhdXRvY29uZi5oIGRlZmluZXMgdGhlIG9wdGlvbgorQUNfREVGVU4oW0FYX0tFUk5FTF9PUFRJT05dLCBbCitTQVZFX0NGTEFHUz0kQ0ZMQUdTCitDRkxBR1M9Ii1JJEtJTkMgLU8yIC1EX19LRVJORUxfXyIKK0FDX1RSWV9DT01QSUxFKCBbI2luY2x1ZGUgPGxpbnV4L2F1dG9jb25mLmg+XSwKK1sKKyNpZm5kZWYgJDEKK2JyZWFrX21lX2hhcmQoXFxcKTsKKyNlbmRpZgorXSxbJDJdLFskM10sKQorQ0ZMQUdTPSRTQVZFX0NGTEFHUworXSkKZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L200L2tlcm5lbHZlcnNpb24ubTQgYi9vcHJvZmlsZS0wLjkuNy9tNC9rZXJuZWx2ZXJzaW9uLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiNGI4MDUKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9tNC9rZXJuZWx2ZXJzaW9uLm00CkBAIC0wLDAgKzEsMTYgQEAKK2RubCBBWF9LRVJORUxfVkVSU0lPTihtYWpvciwgbWlub3IsIGxldmVsLCBjb21wYXJpc29uLCBhY3Rpb24taWYtdHJ1ZSwgYWN0aW9uLWlmLWZhbHNlKQorQUNfREVGVU4oW0FYX0tFUk5FTF9WRVJTSU9OXSwgWworU0FWRV9DRkxBR1M9JENGTEFHUworQ0ZMQUdTPSItSSRLSU5DIC1EX19LRVJORUxfXyAtV2Vycm9yIgorQUNfVFJZX0NPTVBJTEUoIAorICBbCisgICNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisgIF0sCisgIFsKKyAgI2lmIExJTlVYX1ZFUlNJT05fQ09ERSAkNCBLRVJORUxfVkVSU0lPTigkMSwgJDIsICQzKQorICBicmVha19tZV9oYXJkKFxcXCk7CisgICNlbmRpZgorICBdLAorWyQ1XSxbJDZdLCkKK0NGTEFHUz0kU0FWRV9DRkxBR1MKK10pCmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9tNC9saWJ0b29sLm00IGIvb3Byb2ZpbGUtMC45LjcvbTQvbGlidG9vbC5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hM2ZlZTUzCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvbTQvbGlidG9vbC5tNApAQCAtMCwwICsxLDczNzcgQEAKKyMgbGlidG9vbC5tNCAtIENvbmZpZ3VyZSBsaWJ0b29sIGZvciB0aGUgaG9zdCBzeXN0ZW0uIC0qLUF1dG9jb25mLSotCisjCisjICAgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAzLCAyMDA0LCAyMDA1LAorIyAgICAgICAgICAgICAgICAgMjAwNiwgMjAwNywgMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgICBXcml0dGVuIGJ5IEdvcmRvbiBNYXR6aWdrZWl0LCAxOTk2CisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGdpdmVzCisjIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworbTRfZGVmaW5lKFtfTFRfQ09QWUlOR10sIFtkbmwKKyMgICBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDMsIDIwMDQsIDIwMDUsCisjICAgICAgICAgICAgICAgICAyMDA2LCAyMDA3LCAyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyAgIFdyaXR0ZW4gYnkgR29yZG9uIE1hdHppZ2tlaXQsIDE5OTYKKyMKKyMgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBHTlUgTGlidG9vbC4KKyMKKyMgR05VIExpYnRvb2wgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisjIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisjIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyMgaWYgeW91IGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIG9yIGxpYnJhcnkgdGhhdAorIyBpcyBidWlsdCB1c2luZyBHTlUgTGlidG9vbCwgeW91IG1heSBpbmNsdWRlIHRoaXMgZmlsZSB1bmRlciB0aGUKKyMgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisjCisjIEdOVSBMaWJ0b29sIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCBHTlUgTGlidG9vbDsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIGEgY29weQorIyBjYW4gYmUgZG93bmxvYWRlZCBmcm9tIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwuaHRtbCwgb3IKKyMgb2J0YWluZWQgYnkgd3JpdGluZyB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KK10pCisKKyMgc2VyaWFsIDU2IExUX0lOSVQKKworCisjIExUX1BSRVJFUShWRVJTSU9OKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ29tcGxhaW4gYW5kIGV4aXQgaWYgdGhpcyBsaWJ0b29sIHZlcnNpb24gaXMgbGVzcyB0aGF0IFZFUlNJT04uCittNF9kZWZ1bihbTFRfUFJFUkVRXSwKK1ttNF9pZihtNF92ZXJzaW9uX2NvbXBhcmUobTRfZGVmbihbTFRfUEFDS0FHRV9WRVJTSU9OXSksIFskMV0pLCAtMSwKKyAgICAgICBbbTRfZGVmYXVsdChbJDNdLAorCQkgICBbbTRfZmF0YWwoW0xpYnRvb2wgdmVyc2lvbiAkMSBvciBoaWdoZXIgaXMgcmVxdWlyZWRdLAorCQkgICAgICAgICAgICAgNjMpXSldLAorICAgICAgIFskMl0pXSkKKworCisjIF9MVF9DSEVDS19CVUlMRERJUgorIyAtLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ29tcGxhaW4gaWYgdGhlIGFic29sdXRlIGJ1aWxkIGRpcmVjdG9yeSBuYW1lIGNvbnRhaW5zIHVudXN1YWwgY2hhcmFjdGVycworbTRfZGVmdW4oW19MVF9DSEVDS19CVUlMRERJUl0sCitbY2FzZSBgcHdkYCBpbgorICAqXCAqIHwgKlwJKikKKyAgICBBQ19NU0dfV0FSTihbTGlidG9vbCBkb2VzIG5vdCBjb3BlIHdlbGwgd2l0aCB3aGl0ZXNwYWNlIGluIGBwd2RgXSkgOzsKK2VzYWMKK10pCisKKworIyBMVF9JTklUKFtPUFRJT05TXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbTFRfSU5JVF0sCitbQUNfUFJFUkVRKFsyLjU4XSlkbmwgV2UgdXNlIEFDX0lOQ0xVREVTX0RFRkFVTFQKK0FDX0JFRk9SRShbJDBdLCBbTFRfTEFOR10pZG5sCitBQ19CRUZPUkUoWyQwXSwgW0xUX09VVFBVVF0pZG5sCitBQ19CRUZPUkUoWyQwXSwgW0xURExfSU5JVF0pZG5sCittNF9yZXF1aXJlKFtfTFRfQ0hFQ0tfQlVJTERESVJdKWRubAorCitkbmwgQXV0b2NvbmYgZG9lc24ndCBjYXRjaCB1bmV4cGFuZGVkIExUXyBtYWNyb3MgYnkgZGVmYXVsdDoKK200X3BhdHRlcm5fZm9yYmlkKFteXz9MVF9bQS1aX10rJF0pZG5sCittNF9wYXR0ZXJuX2FsbG93KFteKF9MVF9FT0Z8TFRfRExHTE9CQUx8TFRfRExMQVpZX09SX05PV3xMVF9NVUxUSV9NT0RVTEUpJF0pZG5sCitkbmwgYWNsb2NhbCBkb2Vzbid0IHB1bGwgbHRvcHRpb25zLm00LCBsdHN1Z2FyLm00LCBvciBsdHZlcnNpb24ubTQKK2RubCB1bmxlc3Mgd2UgcmVxdWlyZSBhbiBBQ19ERUZVTmVkIG1hY3JvOgorQUNfUkVRVUlSRShbTFRPUFRJT05TX1ZFUlNJT05dKWRubAorQUNfUkVRVUlSRShbTFRTVUdBUl9WRVJTSU9OXSlkbmwKK0FDX1JFUVVJUkUoW0xUVkVSU0lPTl9WRVJTSU9OXSlkbmwKK0FDX1JFUVVJUkUoW0xUT0JTT0xFVEVfVkVSU0lPTl0pZG5sCittNF9yZXF1aXJlKFtfTFRfUFJPR19MVE1BSU5dKWRubAorCitkbmwgUGFyc2UgT1BUSU9OUworX0xUX1NFVF9PUFRJT05TKFskMF0sIFskMV0pCisKKyMgVGhpcyBjYW4gYmUgdXNlZCB0byByZWJ1aWxkIGxpYnRvb2wgd2hlbiBuZWVkZWQKK0xJQlRPT0xfREVQUz0iJGx0bWFpbiIKKworIyBBbHdheXMgdXNlIG91ciBvd24gbGlidG9vbC4KK0xJQlRPT0w9JyQoU0hFTEwpICQodG9wX2J1aWxkZGlyKS9saWJ0b29sJworQUNfU1VCU1QoTElCVE9PTClkbmwKKworX0xUX1NFVFVQCisKKyMgT25seSBleHBhbmQgb25jZToKK200X2RlZmluZShbTFRfSU5JVF0pCitdKSMgTFRfSU5JVAorCisjIE9sZCBuYW1lczoKK0FVX0FMSUFTKFtBQ19QUk9HX0xJQlRPT0xdLCBbTFRfSU5JVF0pCitBVV9BTElBUyhbQU1fUFJPR19MSUJUT09MXSwgW0xUX0lOSVRdKQorZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtBQ19QUk9HX0xJQlRPT0xdLCBbXSkKK2RubCBBQ19ERUZVTihbQU1fUFJPR19MSUJUT09MXSwgW10pCisKKworIyBfTFRfQ0NfQkFTRU5BTUUoQ0MpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ2FsY3VsYXRlIGNjX2Jhc2VuYW1lLiAgU2tpcCBrbm93biBjb21waWxlciB3cmFwcGVycyBhbmQgY3Jvc3MtcHJlZml4LgorbTRfZGVmdW4oW19MVF9DQ19CQVNFTkFNRV0sCitbZm9yIGNjX3RlbXAgaW4gJDEiIjsgZG8KKyAgY2FzZSAkY2NfdGVtcCBpbgorICAgIGNvbXBpbGUgfCAqW1tcXC9dXWNvbXBpbGUgfCBjY2FjaGUgfCAqW1tcXC9dXWNjYWNoZSApIDs7CisgICAgZGlzdGNjIHwgKltbXFwvXV1kaXN0Y2MgfCBwdXJpZnkgfCAqW1tcXC9dXXB1cmlmeSApIDs7CisgICAgXC0qKSA7OworICAgICopIGJyZWFrOzsKKyAgZXNhYworZG9uZQorY2NfYmFzZW5hbWU9YCRFQ0hPICJYJGNjX3RlbXAiIHwgJFhzZWQgLWUgJ3MlLiovJSUnIC1lICJzJV4kaG9zdF9hbGlhcy0lJSJgCitdKQorCisKKyMgX0xUX0ZJTEVVVElMU19ERUZBVUxUUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEl0IGlzIG9rYXkgdG8gdXNlIHRoZXNlIGZpbGUgY29tbWFuZHMgYW5kIGFzc3VtZSB0aGV5IGhhdmUgYmVlbiBzZXQKKyMgc2Vuc2libHkgYWZ0ZXIgYG00X3JlcXVpcmUoW19MVF9GSUxFVVRJTFNfREVGQVVMVFNdKScuCittNF9kZWZ1bihbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10sCitbOiAke0NQPSJjcCAtZiJ9Cis6ICR7TVY9Im12IC1mIn0KKzogJHtSTT0icm0gLWYifQorXSkjIF9MVF9GSUxFVVRJTFNfREVGQVVMVFMKKworCisjIF9MVF9TRVRVUAorIyAtLS0tLS0tLS0KK200X2RlZnVuKFtfTFRfU0VUVVBdLAorW0FDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSlkbmwKK0FDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9CVUlMRF0pZG5sCitfTFRfREVDTChbXSwgW2hvc3RfYWxpYXNdLCBbMF0sIFtUaGUgaG9zdCBzeXN0ZW1dKWRubAorX0xUX0RFQ0woW10sIFtob3N0XSwgWzBdKWRubAorX0xUX0RFQ0woW10sIFtob3N0X29zXSwgWzBdKWRubAorZG5sCitfTFRfREVDTChbXSwgW2J1aWxkX2FsaWFzXSwgWzBdLCBbVGhlIGJ1aWxkIHN5c3RlbV0pZG5sCitfTFRfREVDTChbXSwgW2J1aWxkXSwgWzBdKWRubAorX0xUX0RFQ0woW10sIFtidWlsZF9vc10sIFswXSlkbmwKK2RubAorQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pZG5sCitBQ19SRVFVSVJFKFtMVF9QQVRIX0xEXSlkbmwKK0FDX1JFUVVJUkUoW0xUX1BBVEhfTk1dKWRubAorZG5sCitBQ19SRVFVSVJFKFtBQ19QUk9HX0xOX1NdKWRubAordGVzdCAteiAiJExOX1MiICYmIExOX1M9ImxuIC1zIgorX0xUX0RFQ0woW10sIFtMTl9TXSwgWzFdLCBbV2hldGhlciB3ZSBuZWVkIHNvZnQgb3IgaGFyZCBsaW5rc10pZG5sCitkbmwKK0FDX1JFUVVJUkUoW0xUX0NNRF9NQVhfTEVOXSlkbmwKK19MVF9ERUNMKFtvYmpleHRdLCBbYWNfb2JqZXh0XSwgWzBdLCBbT2JqZWN0IGZpbGUgc3VmZml4IChub3JtYWxseSAibyIpXSlkbmwKK19MVF9ERUNMKFtdLCBbZXhlZXh0XSwgWzBdLCBbRXhlY3V0YWJsZSBmaWxlIHN1ZmZpeCAobm9ybWFsbHkgIiIpXSlkbmwKK2RubAorbTRfcmVxdWlyZShbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10pZG5sCittNF9yZXF1aXJlKFtfTFRfQ0hFQ0tfU0hFTExfRkVBVFVSRVNdKWRubAorbTRfcmVxdWlyZShbX0xUX0NNRF9SRUxPQURdKWRubAorbTRfcmVxdWlyZShbX0xUX0NIRUNLX01BR0lDX01FVEhPRF0pZG5sCittNF9yZXF1aXJlKFtfTFRfQ01EX09MRF9BUkNISVZFXSlkbmwKK200X3JlcXVpcmUoW19MVF9DTURfR0xPQkFMX1NZTUJPTFNdKWRubAorCitfTFRfQ09ORklHX0xJQlRPT0xfSU5JVChbCisjIFNlZSBpZiB3ZSBhcmUgcnVubmluZyBvbiB6c2gsIGFuZCBzZXQgdGhlIG9wdGlvbnMgd2hpY2ggYWxsb3cgb3VyCisjIGNvbW1hbmRzIHRocm91Z2ggd2l0aG91dCByZW1vdmFsIG9mIFwgZXNjYXBlcyBJTklULgoraWYgdGVzdCAtbiAiXCR7WlNIX1ZFUlNJT04rc2V0fSIgOyB0aGVuCisgICBzZXRvcHQgTk9fR0xPQl9TVUJTVAorZmkKK10pCitpZiB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0iIDsgdGhlbgorICAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKK2ZpCisKK19MVF9DSEVDS19PQkpESVIKKworbTRfcmVxdWlyZShbX0xUX1RBR19DT01QSUxFUl0pZG5sCitfTFRfUFJPR19FQ0hPX0JBQ0tTTEFTSAorCitjYXNlICRob3N0X29zIGluCithaXgzKikKKyAgIyBBSVggc29tZXRpbWVzIGhhcyBwcm9ibGVtcyB3aXRoIHRoZSBHQ0MgY29sbGVjdDIgcHJvZ3JhbS4gIEZvciBzb21lCisgICMgcmVhc29uLCBpZiB3ZSBzZXQgdGhlIENPTExFQ1RfTkFNRVMgZW52aXJvbm1lbnQgdmFyaWFibGUsIHRoZSBwcm9ibGVtcworICAjIHZhbmlzaCBpbiBhIHB1ZmYgb2Ygc21va2UuCisgIGlmIHRlc3QgIlgke0NPTExFQ1RfTkFNRVMrc2V0fSIgIT0gWHNldDsgdGhlbgorICAgIENPTExFQ1RfTkFNRVM9CisgICAgZXhwb3J0IENPTExFQ1RfTkFNRVMKKyAgZmkKKyAgOzsKK2VzYWMKKworIyBTZWQgc3Vic3RpdHV0aW9uIHRoYXQgaGVscHMgdXMgZG8gcm9idXN0IHF1b3RpbmcuICBJdCBiYWNrc2xhc2hpZmllcworIyBtZXRhY2hhcmFjdGVycyB0aGF0IGFyZSBzdGlsbCBhY3RpdmUgd2l0aGluIGRvdWJsZS1xdW90ZWQgc3RyaW5ncy4KK3NlZF9xdW90ZV9zdWJzdD0ncy9cKFtbImAkXFxdXVwpL1xcXDEvZycKKworIyBTYW1lIGFzIGFib3ZlLCBidXQgZG8gbm90IHF1b3RlIHZhcmlhYmxlIHJlZmVyZW5jZXMuCitkb3VibGVfcXVvdGVfc3Vic3Q9J3MvXChbWyJgXFxdXVwpL1xcXDEvZycKKworIyBTZWQgc3Vic3RpdHV0aW9uIHRvIGRlbGF5IGV4cGFuc2lvbiBvZiBhbiBlc2NhcGVkIHNoZWxsIHZhcmlhYmxlIGluIGEKKyMgZG91YmxlX3F1b3RlX3N1YnN0J2VkIHN0cmluZy4KK2RlbGF5X3ZhcmlhYmxlX3N1YnN0PSdzL1xcXFxcXFxcXFxcJC9cXFxcXFwkL2cnCisKKyMgU2VkIHN1YnN0aXR1dGlvbiB0byBkZWxheSBleHBhbnNpb24gb2YgYW4gZXNjYXBlZCBzaW5nbGUgcXVvdGUuCitkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3Q9J3MvJ1wnJy8nXCdcXFxcXFxcJ1wnJy9nJworCisjIFNlZCBzdWJzdGl0dXRpb24gdG8gYXZvaWQgYWNjaWRlbnRhbCBnbG9iYmluZyBpbiBldmFsZWQgZXhwcmVzc2lvbnMKK25vX2dsb2Jfc3Vic3Q9J3MvXCovXFxcKi9nJworCisjIEdsb2JhbCB2YXJpYWJsZXM6CitvZmlsZT1saWJ0b29sCitjYW5fYnVpbGRfc2hhcmVkPXllcworCisjIEFsbCBrbm93biBsaW5rZXJzIHJlcXVpcmUgYSBgLmEnIGFyY2hpdmUgZm9yIHN0YXRpYyBsaW5raW5nIChleGNlcHQgTVNWQywKKyMgd2hpY2ggbmVlZHMgJy5saWInKS4KK2xpYmV4dD1hCisKK3dpdGhfZ251X2xkPSIkbHRfY3ZfcHJvZ19nbnVfbGQiCisKK29sZF9DQz0iJENDIgorb2xkX0NGTEFHUz0iJENGTEFHUyIKKworIyBTZXQgc2FuZSBkZWZhdWx0cyBmb3IgdmFyaW91cyB2YXJpYWJsZXMKK3Rlc3QgLXogIiRDQyIgJiYgQ0M9Y2MKK3Rlc3QgLXogIiRMVENDIiAmJiBMVENDPSRDQwordGVzdCAteiAiJExUQ0ZMQUdTIiAmJiBMVENGTEFHUz0kQ0ZMQUdTCit0ZXN0IC16ICIkTEQiICYmIExEPWxkCit0ZXN0IC16ICIkYWNfb2JqZXh0IiAmJiBhY19vYmpleHQ9bworCitfTFRfQ0NfQkFTRU5BTUUoWyRjb21waWxlcl0pCisKKyMgT25seSBwZXJmb3JtIHRoZSBjaGVjayBmb3IgZmlsZSwgaWYgdGhlIGNoZWNrIG1ldGhvZCByZXF1aXJlcyBpdAordGVzdCAteiAiJE1BR0lDX0NNRCIgJiYgTUFHSUNfQ01EPWZpbGUKK2Nhc2UgJGRlcGxpYnNfY2hlY2tfbWV0aG9kIGluCitmaWxlX21hZ2ljKikKKyAgaWYgdGVzdCAiJGZpbGVfbWFnaWNfY21kIiA9ICckTUFHSUNfQ01EJzsgdGhlbgorICAgIF9MVF9QQVRIX01BR0lDCisgIGZpCisgIDs7Citlc2FjCisKKyMgVXNlIEMgZm9yIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gaW4gdGhlIGxpYnRvb2wgc2NyaXB0CitMVF9TVVBQT1JURURfVEFHKFtDQ10pCitfTFRfTEFOR19DX0NPTkZJRworX0xUX0xBTkdfREVGQVVMVF9DT05GSUcKK19MVF9DT05GSUdfQ09NTUFORFMKK10pIyBfTFRfU0VUVVAKKworCisjIF9MVF9QUk9HX0xUTUFJTgorIyAtLS0tLS0tLS0tLS0tLS0KKyMgTm90ZSB0aGF0IHRoaXMgY29kZSBpcyBjYWxsZWQgYm90aCBmcm9tIGBjb25maWd1cmUnLCBhbmQgYGNvbmZpZy5zdGF0dXMnCisjIG5vdyB0aGF0IHdlIHVzZSBBQ19DT05GSUdfQ09NTUFORFMgdG8gZ2VuZXJhdGUgbGlidG9vbC4gIE5vdGFibHksCisjIGBjb25maWcuc3RhdHVzJyBoYXMgbm8gdmFsdWUgZm9yIGFjX2F1eF9kaXIgdW5sZXNzIHdlIGFyZSB1c2luZyBBdXRvbWFrZSwKKyMgc28gd2UgcGFzcyBhIGNvcHkgYWxvbmcgdG8gbWFrZSBzdXJlIGl0IGhhcyBhIHNlbnNpYmxlIHZhbHVlIGFueXdheS4KK200X2RlZnVuKFtfTFRfUFJPR19MVE1BSU5dLAorW200X2lmZGVmKFtBQ19SRVFVSVJFX0FVWF9GSUxFXSwgW0FDX1JFUVVJUkVfQVVYX0ZJTEUoW2x0bWFpbi5zaF0pXSlkbmwKK19MVF9DT05GSUdfTElCVE9PTF9JTklUKFthY19hdXhfZGlyPSckYWNfYXV4X2RpciddKQorbHRtYWluPSIkYWNfYXV4X2Rpci9sdG1haW4uc2giCitdKSMgX0xUX1BST0dfTFRNQUlOCisKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgQWNjdW11bGF0ZSBjb2RlIGZvciBjcmVhdGluZyBsaWJ0b29sLiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCisjIFNvIHRoYXQgd2UgY2FuIHJlY3JlYXRlIGEgZnVsbCBsaWJ0b29sIHNjcmlwdCBpbmNsdWRpbmcgYWRkaXRpb25hbAorIyB0YWdzLCB3ZSBhY2N1bXVsYXRlIHRoZSBjaHVua3Mgb2YgY29kZSB0byBzZW5kIHRvIEFDX0NPTkZJR19DT01NQU5EUworIyBpbiBtYWNyb3MgYW5kIHRoZW4gbWFrZSBhIHNpbmdsZSBjYWxsIGF0IHRoZSBlbmQgdXNpbmcgdGhlIGBsaWJ0b29sJworIyBsYWJlbC4KKworCisjIF9MVF9DT05GSUdfTElCVE9PTF9JTklUKFtJTklULUNPTU1BTkRTXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBSZWdpc3RlciBJTklULUNPTU1BTkRTIHRvIGJlIHBhc3NlZCB0byBBQ19DT05GSUdfQ09NTUFORFMgbGF0ZXIuCittNF9kZWZpbmUoW19MVF9DT05GSUdfTElCVE9PTF9JTklUXSwKK1ttNF9pZnZhbChbJDFdLAorICAgICAgICAgIFttNF9hcHBlbmQoW19MVF9PVVRQVVRfTElCVE9PTF9JTklUXSwKKyAgICAgICAgICAgICAgICAgICAgIFskMQorXSldKV0pCisKKyMgSW5pdGlhbGl6ZS4KK200X2RlZmluZShbX0xUX09VVFBVVF9MSUJUT09MX0lOSVRdKQorCisKKyMgX0xUX0NPTkZJR19MSUJUT09MKFtDT01NQU5EU10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBSZWdpc3RlciBDT01NQU5EUyB0byBiZSBwYXNzZWQgdG8gQUNfQ09ORklHX0NPTU1BTkRTIGxhdGVyLgorbTRfZGVmaW5lKFtfTFRfQ09ORklHX0xJQlRPT0xdLAorW200X2lmdmFsKFskMV0sCisgICAgICAgICAgW200X2FwcGVuZChbX0xUX09VVFBVVF9MSUJUT09MX0NPTU1BTkRTXSwKKyAgICAgICAgICAgICAgICAgICAgIFskMQorXSldKV0pCisKKyMgSW5pdGlhbGl6ZS4KK200X2RlZmluZShbX0xUX09VVFBVVF9MSUJUT09MX0NPTU1BTkRTXSkKKworCisjIF9MVF9DT05GSUdfU0FWRV9DT01NQU5EUyhbQ09NTUFORFNdLCBbSU5JVF9DT01NQU5EU10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZ1bihbX0xUX0NPTkZJR19TQVZFX0NPTU1BTkRTXSwKK1tfTFRfQ09ORklHX0xJQlRPT0woWyQxXSkKK19MVF9DT05GSUdfTElCVE9PTF9JTklUKFskMl0pCitdKQorCisKKyMgX0xUX0ZPUk1BVF9DT01NRU5UKFtDT01NRU5UXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQWRkIGxlYWRpbmcgY29tbWVudCBtYXJrcyB0byB0aGUgc3RhcnQgb2YgZWFjaCBsaW5lLCBhbmQgYSB0cmFpbGluZworIyBmdWxsLXN0b3AgdG8gdGhlIHdob2xlIGNvbW1lbnQgaWYgb25lIGlzIG5vdCBwcmVzZW50IGFscmVhZHkuCittNF9kZWZpbmUoW19MVF9GT1JNQVRfQ09NTUVOVF0sCitbbTRfaWZ2YWwoWyQxXSwgWworbTRfYnBhdHN1YnN0KFttNF9icGF0c3Vic3QoWyQxXSwgW14gKl0sIFsjIF0pXSwKKyAgICAgICAgICAgICAgW1snYCRcXV0sIFtcXFwmXSldbTRfYm1hdGNoKFskMV0sIFtbIT8uXSRdLCBbXSwgWy5dKQorKV0pCisKKworCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIEZJWE1FOiBFbGltaW5hdGUgVkFSTkFNRSAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKKworIyBfTFRfREVDTChbQ09ORklHTkFNRV0sIFZBUk5BTUUsIFZBTFVFLCBbREVTQ1JJUFRJT05dLCBbSVMtVEFHR0VEP10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ09ORklHTkFNRSBpcyB0aGUgbmFtZSBnaXZlbiB0byB0aGUgdmFsdWUgaW4gdGhlIGxpYnRvb2wgc2NyaXB0LgorIyBWQVJOQU1FIGlzIHRoZSAoYmFzZSkgbmFtZSB1c2VkIGluIHRoZSBjb25maWd1cmUgc2NyaXB0LgorIyBWQUxVRSBtYXkgYmUgMCwgMSBvciAyIGZvciBhIGNvbXB1dGVkIHF1b3RlIGVzY2FwZWQgdmFsdWUgYmFzZWQgb24KKyMgVkFSTkFNRS4gIEFueSBvdGhlciB2YWx1ZSB3aWxsIGJlIHVzZWQgZGlyZWN0bHkuCittNF9kZWZpbmUoW19MVF9ERUNMXSwKK1tsdF9pZl9hcHBlbmRfdW5pcShbbHRfZGVjbF92YXJuYW1lc10sIFskMl0sIFssIF0sCisgICAgW2x0X2RpY3RfYWRkX3N1YmtleShbbHRfZGVjbF9kaWN0XSwgWyQyXSwgW2xpYnRvb2xfbmFtZV0sCisJW200X2lmdmFsKFskMV0sIFskMV0sIFskMl0pXSkKKyAgICBsdF9kaWN0X2FkZF9zdWJrZXkoW2x0X2RlY2xfZGljdF0sIFskMl0sIFt2YWx1ZV0sIFskM10pCisgICAgbTRfaWZ2YWwoWyQ0XSwKKwlbbHRfZGljdF9hZGRfc3Via2V5KFtsdF9kZWNsX2RpY3RdLCBbJDJdLCBbZGVzY3JpcHRpb25dLCBbJDRdKV0pCisgICAgbHRfZGljdF9hZGRfc3Via2V5KFtsdF9kZWNsX2RpY3RdLCBbJDJdLAorCVt0YWdnZWQ/XSwgW200X2lmdmFsKFskNV0sIFt5ZXNdLCBbbm9dKV0pXSkKK10pCisKKworIyBfTFRfVEFHREVDTChbQ09ORklHTkFNRV0sIFZBUk5BTUUsIFZBTFVFLCBbREVTQ1JJUFRJT05dKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtfTFRfVEFHREVDTF0sIFtfTFRfREVDTChbJDFdLCBbJDJdLCBbJDNdLCBbJDRdLCBbeWVzXSldKQorCisKKyMgbHRfZGVjbF90YWdfdmFybmFtZXMoW1NFUEFSQVRPUl0sIFtWQVJOQU1FMS4uLl0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtsdF9kZWNsX3RhZ192YXJuYW1lc10sCitbX2x0X2RlY2xfZmlsdGVyKFt0YWdnZWQ/XSwgW3llc10sICRAKV0pCisKKworIyBfbHRfZGVjbF9maWx0ZXIoU1VCS0VZLCBWQUxVRSwgW1NFUEFSQVRPUl0sIFtWQVJOQU1FMS4uXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW19sdF9kZWNsX2ZpbHRlcl0sCitbbTRfY2FzZShbJCNdLAorICBbMF0sIFttNF9mYXRhbChbJDA6IHRvbyBmZXcgYXJndW1lbnRzOiAkI10pXSwKKyAgWzFdLCBbbTRfZmF0YWwoWyQwOiB0b28gZmV3IGFyZ3VtZW50czogJCM6ICQxXSldLAorICBbMl0sIFtsdF9kaWN0X2ZpbHRlcihbbHRfZGVjbF9kaWN0XSwgWyQxXSwgWyQyXSwgW10sIGx0X2RlY2xfdmFybmFtZXMpXSwKKyAgWzNdLCBbbHRfZGljdF9maWx0ZXIoW2x0X2RlY2xfZGljdF0sIFskMV0sIFskMl0sIFskM10sIGx0X2RlY2xfdmFybmFtZXMpXSwKKyAgW2x0X2RpY3RfZmlsdGVyKFtsdF9kZWNsX2RpY3RdLCAkQCldKVtdZG5sCitdKQorCisKKyMgbHRfZGVjbF9xdW90ZV92YXJuYW1lcyhbU0VQQVJBVE9SXSwgW1ZBUk5BTUUxLi4uXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbbHRfZGVjbF9xdW90ZV92YXJuYW1lc10sCitbX2x0X2RlY2xfZmlsdGVyKFt2YWx1ZV0sIFsxXSwgJEApXSkKKworCisjIGx0X2RlY2xfZHF1b3RlX3Zhcm5hbWVzKFtTRVBBUkFUT1JdLCBbVkFSTkFNRTEuLi5dKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbbHRfZGVjbF9kcXVvdGVfdmFybmFtZXNdLAorW19sdF9kZWNsX2ZpbHRlcihbdmFsdWVdLCBbMl0sICRAKV0pCisKKworIyBsdF9kZWNsX3Zhcm5hbWVzX3RhZ2dlZChbU0VQQVJBVE9SXSwgW1ZBUk5BTUUxLi4uXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW2x0X2RlY2xfdmFybmFtZXNfdGFnZ2VkXSwKK1ttNF9hc3NlcnQoWyQjIDw9IDJdKWRubAorXyQwKG00X3F1b3RlKG00X2RlZmF1bHQoWyQxXSwgW1ssIF1dKSksCisgICAgbTRfaWZ2YWwoWyQyXSwgW1skMl1dLCBbbTRfZHF1b3RlKGx0X2RlY2xfdGFnX3Zhcm5hbWVzKV0pLAorICAgIG00X3NwbGl0KG00X25vcm1hbGl6ZShtNF9xdW90ZShfTFRfVEFHUykpLCBbIF0pKV0pCittNF9kZWZpbmUoW19sdF9kZWNsX3Zhcm5hbWVzX3RhZ2dlZF0sCitbbTRfaWZ2YWwoWyQzXSwgW2x0X2NvbWJpbmUoWyQxXSwgWyQyXSwgW19dLCAkMyldKV0pCisKKworIyBsdF9kZWNsX2FsbF92YXJuYW1lcyhbU0VQQVJBVE9SXSwgW1ZBUk5BTUUxLi4uXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW2x0X2RlY2xfYWxsX3Zhcm5hbWVzXSwKK1tfJDAobTRfcXVvdGUobTRfZGVmYXVsdChbJDFdLCBbWywgXV0pKSwKKyAgICAgbTRfaWYoWyQyXSwgW10sCisJICAgbTRfcXVvdGUobHRfZGVjbF92YXJuYW1lcyksCisJbTRfcXVvdGUobTRfc2hpZnQoJEApKSkpW11kbmwKK10pCittNF9kZWZpbmUoW19sdF9kZWNsX2FsbF92YXJuYW1lc10sCitbbHRfam9pbigkQCwgbHRfZGVjbF92YXJuYW1lc190YWdnZWQoWyQxXSwKKwkJCWx0X2RlY2xfdGFnX3Zhcm5hbWVzKFtbLCBdXSwgbTRfc2hpZnQoJEApKSkpZG5sCitdKQorCisKKyMgX0xUX0NPTkZJR19TVEFUVVNfREVDTEFSRShbVkFSTkFNRV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBRdW90ZSBhIHZhcmlhYmxlIHZhbHVlLCBhbmQgZm9yd2FyZCBpdCB0byBgY29uZmlnLnN0YXR1cycgc28gdGhhdCBpdHMKKyMgZGVjbGFyYXRpb24gdGhlcmUgd2lsbCBoYXZlIHRoZSBzYW1lIHZhbHVlIGFzIGluIGBjb25maWd1cmUnLiAgVkFSTkFNRQorIyBtdXN0IGhhdmUgYSBzaW5nbGUgcXVvdGUgZGVsaW1pdGVkIHZhbHVlIGZvciB0aGlzIHRvIHdvcmsuCittNF9kZWZpbmUoW19MVF9DT05GSUdfU1RBVFVTX0RFQ0xBUkVdLAorWyQxPSdgJEVDSE8gIlgkXVskMSIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJ10pCisKKworIyBfTFRfQ09ORklHX1NUQVRVU19ERUNMQVJBVElPTlMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFdlIGRlbGltaXQgbGlidG9vbCBjb25maWcgdmFyaWFibGVzIHdpdGggc2luZ2xlIHF1b3Rlcywgc28gd2hlbgorIyB3ZSB3cml0ZSB0aGVtIHRvIGNvbmZpZy5zdGF0dXMsIHdlIGhhdmUgdG8gYmUgc3VyZSB0byBxdW90ZSBhbGwKKyMgZW1iZWRkZWQgc2luZ2xlIHF1b3RlcyBwcm9wZXJseS4gIEluIGNvbmZpZ3VyZSwgdGhpcyBtYWNybyBleHBhbmRzCisjIGVhY2ggdmFyaWFibGUgZGVjbGFyZWQgd2l0aCBfTFRfREVDTCAoYW5kIF9MVF9UQUdERUNMKSBpbnRvOgorIworIyAgICA8dmFyPj0nYCRFQ0hPICJYJDx2YXI+IiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCittNF9kZWZ1bihbX0xUX0NPTkZJR19TVEFUVVNfREVDTEFSQVRJT05TXSwKK1ttNF9mb3JlYWNoKFtfbHRfdmFyXSwgbTRfcXVvdGUobHRfZGVjbF9hbGxfdmFybmFtZXMpLAorICAgIFttNF9uKFtfTFRfQ09ORklHX1NUQVRVU19ERUNMQVJFKF9sdF92YXIpXSldKV0pCisKKworIyBfTFRfTElCVE9PTF9UQUdTCisjIC0tLS0tLS0tLS0tLS0tLS0KKyMgT3V0cHV0IGNvbW1lbnQgYW5kIGxpc3Qgb2YgdGFncyBzdXBwb3J0ZWQgYnkgdGhlIHNjcmlwdAorbTRfZGVmdW4oW19MVF9MSUJUT09MX1RBR1NdLAorW19MVF9GT1JNQVRfQ09NTUVOVChbVGhlIG5hbWVzIG9mIHRoZSB0YWdnZWQgY29uZmlndXJhdGlvbnMgc3VwcG9ydGVkIGJ5IHRoaXMgc2NyaXB0XSlkbmwKK2F2YWlsYWJsZV90YWdzPSJfTFRfVEFHUyJkbmwKK10pCisKKworIyBfTFRfTElCVE9PTF9ERUNMQVJFKFZBUk5BTUUsIFtUQUddKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFeHRyYWN0IHRoZSBkaWN0aW9uYXJ5IHZhbHVlcyBmb3IgVkFSTkFNRSAob3B0aW9uYWxseSB3aXRoIFRBRykgYW5kCisjIGV4cGFuZCB0byBhIGNvbW1lbnRlZCBzaGVsbCB2YXJpYWJsZSBzZXR0aW5nOgorIworIyAgICAjIFNvbWUgY29tbWVudCBhYm91dCB3aGF0IFZBUiBpcyBmb3IuCisjICAgIHZpc2libGVfbmFtZT0kbHRfaW50ZXJuYWxfbmFtZQorbTRfZGVmaW5lKFtfTFRfTElCVE9PTF9ERUNMQVJFXSwKK1tfTFRfRk9STUFUX0NPTU1FTlQobTRfcXVvdGUobHRfZGljdF9mZXRjaChbbHRfZGVjbF9kaWN0XSwgWyQxXSwKKwkJCQkJICAgW2Rlc2NyaXB0aW9uXSkpKVtdZG5sCittNF9wdXNoZGVmKFtfbGlidG9vbF9uYW1lXSwKKyAgICBtNF9xdW90ZShsdF9kaWN0X2ZldGNoKFtsdF9kZWNsX2RpY3RdLCBbJDFdLCBbbGlidG9vbF9uYW1lXSkpKVtdZG5sCittNF9jYXNlKG00X3F1b3RlKGx0X2RpY3RfZmV0Y2goW2x0X2RlY2xfZGljdF0sIFskMV0sIFt2YWx1ZV0pKSwKKyAgICBbMF0sIFtfbGlidG9vbF9uYW1lPVskXSQxXSwKKyAgICBbMV0sIFtfbGlidG9vbF9uYW1lPSRsdF9bXSQxXSwKKyAgICBbMl0sIFtfbGlidG9vbF9uYW1lPSRsdF9bXSQxXSwKKyAgICBbX2xpYnRvb2xfbmFtZT1sdF9kaWN0X2ZldGNoKFtsdF9kZWNsX2RpY3RdLCBbJDFdLCBbdmFsdWVdKV0pW11kbmwKK200X2lmdmFsKFskMl0sIFtfJDJdKVtdbTRfcG9wZGVmKFtfbGlidG9vbF9uYW1lXSlbXWRubAorXSkKKworCisjIF9MVF9MSUJUT09MX0NPTkZJR19WQVJTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFByb2R1Y2UgY29tbWVudGVkIGRlY2xhcmF0aW9ucyBvZiBub24tdGFnZ2VkIGxpYnRvb2wgY29uZmlnIHZhcmlhYmxlcworIyBzdWl0YWJsZSBmb3IgaW5zZXJ0aW9uIGluIHRoZSBMSUJUT09MIENPTkZJRyBzZWN0aW9uIG9mIHRoZSBgbGlidG9vbCcKKyMgc2NyaXB0LiAgVGFnZ2VkIGxpYnRvb2wgY29uZmlnIHZhcmlhYmxlcyAoZXZlbiBmb3IgdGhlIExJQlRPT0wgQ09ORklHCisjIHNlY3Rpb24pIGFyZSBwcm9kdWNlZCBieSBfTFRfTElCVE9PTF9UQUdfVkFSUy4KK200X2RlZnVuKFtfTFRfTElCVE9PTF9DT05GSUdfVkFSU10sCitbbTRfZm9yZWFjaChbX2x0X3Zhcl0sCisgICAgbTRfcXVvdGUoX2x0X2RlY2xfZmlsdGVyKFt0YWdnZWQ/XSwgW25vXSwgW10sIGx0X2RlY2xfdmFybmFtZXMpKSwKKyAgICBbbTRfbihbX0xUX0xJQlRPT0xfREVDTEFSRShfbHRfdmFyKV0pXSldKQorCisKKyMgX0xUX0xJQlRPT0xfVEFHX1ZBUlMoVEFHKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW19MVF9MSUJUT09MX1RBR19WQVJTXSwKK1ttNF9mb3JlYWNoKFtfbHRfdmFyXSwgbTRfcXVvdGUobHRfZGVjbF90YWdfdmFybmFtZXMpLAorICAgIFttNF9uKFtfTFRfTElCVE9PTF9ERUNMQVJFKF9sdF92YXIsIFskMV0pXSldKV0pCisKKworIyBfTFRfVEFHVkFSKFZBUk5BTUUsIFtUQUdOQU1FXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW19MVF9UQUdWQVJdLCBbbTRfaWZ2YWwoWyQyXSwgWyQxXyQyXSwgWyQxXSldKQorCisKKyMgX0xUX0NPTkZJR19DT01NQU5EUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tCisjIFNlbmQgYWNjdW11bGF0ZWQgb3V0cHV0IHRvICRDT05GSUdfU1RBVFVTLiAgVGhhbmtzIHRvIHRoZSBsaXN0cyBvZgorIyB2YXJpYWJsZXMgZm9yIHNpbmdsZSBhbmQgZG91YmxlIHF1b3RlIGVzY2FwaW5nIHdlIHNhdmVkIGZyb20gY2FsbHMKKyMgdG8gX0xUX0RFQ0wsIHdlIGNhbiBwdXQgcXVvdGUgZXNjYXBlZCB2YXJpYWJsZXMgZGVjbGFyYXRpb25zCisjIGludG8gYGNvbmZpZy5zdGF0dXMnLCBhbmQgdGhlbiB0aGUgc2hlbGwgY29kZSB0byBxdW90ZSBlc2NhcGUgdGhlbSBpbgorIyBmb3IgbG9vcHMgaW4gYGNvbmZpZy5zdGF0dXMnLiAgRmluYWxseSwgYW55IGFkZGl0aW9uYWwgY29kZSBhY2N1bXVsYXRlZAorIyBmcm9tIGNhbGxzIHRvIF9MVF9DT05GSUdfTElCVE9PTF9JTklUIGlzIGV4cGFuZGVkLgorbTRfZGVmdW4oW19MVF9DT05GSUdfQ09NTUFORFNdLAorW0FDX1BST1ZJREVfSUZFTFNFKFtMVF9PVVRQVVRdLAorCWRubCBJZiB0aGUgbGlidG9vbCBnZW5lcmF0aW9uIGNvZGUgaGFzIGJlZW4gcGxhY2VkIGluICRDT05GSUdfTFQsCisJZG5sIGluc3RlYWQgb2YgZHVwbGljYXRpbmcgaXQgYWxsIG92ZXIgYWdhaW4gaW50byBjb25maWcuc3RhdHVzLAorCWRubCB0aGVuIHdlIHdpbGwgaGF2ZSBjb25maWcuc3RhdHVzIHJ1biAkQ09ORklHX0xUIGxhdGVyLCBzbyBpdAorCWRubCBuZWVkcyB0byBrbm93IHdoYXQgbmFtZSBpcyBzdG9yZWQgdGhlcmU6CisgICAgICAgIFtBQ19DT05GSUdfQ09NTUFORFMoW2xpYnRvb2xdLAorICAgICAgICAgICAgWyRTSEVMTCAkQ09ORklHX0xUIHx8IEFTX0VYSVQoMSldLCBbQ09ORklHX0xUPSckQ09ORklHX0xUJ10pXSwKKyAgICBkbmwgSWYgdGhlIGxpYnRvb2wgZ2VuZXJhdGlvbiBjb2RlIGlzIGRlc3RpbmVkIGZvciBjb25maWcuc3RhdHVzLAorICAgIGRubCBleHBhbmQgdGhlIGFjY3VtdWxhdGVkIGNvbW1hbmRzIGFuZCBpbml0IGNvZGUgbm93OgorICAgIFtBQ19DT05GSUdfQ09NTUFORFMoW2xpYnRvb2xdLAorICAgICAgICBbX0xUX09VVFBVVF9MSUJUT09MX0NPTU1BTkRTXSwgW19MVF9PVVRQVVRfTElCVE9PTF9DT01NQU5EU19JTklUXSldKQorXSkjX0xUX0NPTkZJR19DT01NQU5EUworCisKKyMgSW5pdGlhbGl6ZS4KK200X2RlZmluZShbX0xUX09VVFBVVF9MSUJUT09MX0NPTU1BTkRTX0lOSVRdLAorWworCisjIFRoZSBIUC1VWCBrc2ggYW5kIFBPU0lYIHNoZWxsIHByaW50IHRoZSB0YXJnZXQgZGlyZWN0b3J5IHRvIHN0ZG91dAorIyBpZiBDRFBBVEggaXMgc2V0LgorKHVuc2V0IENEUEFUSCkgPi9kZXYvbnVsbCAyPiYxICYmIHVuc2V0IENEUEFUSAorCitzZWRfcXVvdGVfc3Vic3Q9JyRzZWRfcXVvdGVfc3Vic3QnCitkb3VibGVfcXVvdGVfc3Vic3Q9JyRkb3VibGVfcXVvdGVfc3Vic3QnCitkZWxheV92YXJpYWJsZV9zdWJzdD0nJGRlbGF5X3ZhcmlhYmxlX3N1YnN0JworX0xUX0NPTkZJR19TVEFUVVNfREVDTEFSQVRJT05TCitMVENDPSckTFRDQycKK0xUQ0ZMQUdTPSckTFRDRkxBR1MnCitjb21waWxlcj0nJGNvbXBpbGVyX0RFRkFVTFQnCisKKyMgUXVvdGUgZXZhbGVkIHN0cmluZ3MuCitmb3IgdmFyIGluIGx0X2RlY2xfYWxsX3Zhcm5hbWVzKFtbIFwKK11dLCBsdF9kZWNsX3F1b3RlX3Zhcm5hbWVzKTsgZG8KKyAgICBjYXNlIFxgZXZhbCBcXFxcXCRFQ0hPICJYXFxcXFwkXCR2YXIiXGAgaW4KKyAgICAqW1tcXFxcXFxcYFxcIlxcXCRdXSopCisgICAgICBldmFsICJsdF9cJHZhcj1cXFxcXFwiXFxcYFxcXCRFQ0hPIFxcIlhcXFwkXCR2YXJcXCIgfCBcXFwkWHNlZCAtZSBcXCJcXFwkc2VkX3F1b3RlX3N1YnN0XFwiXFxcYFxcXFxcXCIiCisgICAgICA7OworICAgICopCisgICAgICBldmFsICJsdF9cJHZhcj1cXFxcXFwiXFxcJFwkdmFyXFxcXFxcIiIKKyAgICAgIDs7CisgICAgZXNhYworZG9uZQorCisjIERvdWJsZS1xdW90ZSBkb3VibGUtZXZhbGVkIHN0cmluZ3MuCitmb3IgdmFyIGluIGx0X2RlY2xfYWxsX3Zhcm5hbWVzKFtbIFwKK11dLCBsdF9kZWNsX2RxdW90ZV92YXJuYW1lcyk7IGRvCisgICAgY2FzZSBcYGV2YWwgXFxcXFwkRUNITyAiWFxcXFxcJFwkdmFyIlxgIGluCisgICAgKltbXFxcXFxcXGBcXCJcXFwkXV0qKQorICAgICAgZXZhbCAibHRfXCR2YXI9XFxcXFxcIlxcXGBcXFwkRUNITyBcXCJYXFxcJFwkdmFyXFwiIHwgXFxcJFhzZWQgLWUgXFwiXFxcJGRvdWJsZV9xdW90ZV9zdWJzdFxcIiAtZSBcXCJcXFwkc2VkX3F1b3RlX3N1YnN0XFwiIC1lIFxcIlxcXCRkZWxheV92YXJpYWJsZV9zdWJzdFxcIlxcXGBcXFxcXFwiIgorICAgICAgOzsKKyAgICAqKQorICAgICAgZXZhbCAibHRfXCR2YXI9XFxcXFxcIlxcXCRcJHZhclxcXFxcXCIiCisgICAgICA7OworICAgIGVzYWMKK2RvbmUKKworIyBGaXgtdXAgZmFsbGJhY2sgZWNobyBpZiBpdCB3YXMgbWFuZ2xlZCBieSB0aGUgYWJvdmUgcXVvdGluZyBydWxlcy4KK2Nhc2UgXCRsdF9FQ0hPIGluCisqJ1xcXFskXTAgLS1mYWxsYmFjay1lY2hvIicpZG5sICIKKyAgbHRfRUNITz1cYFwkRUNITyAiWFwkbHRfRUNITyIgfCBcJFhzZWQgLWUgJ3MvXFxcXFxcXFxcXFxcXFxcWyRdMCAtLWZhbGxiYWNrLWVjaG8iXFskXS9cWyRdMCAtLWZhbGxiYWNrLWVjaG8iLydcYAorICA7OworZXNhYworCitfTFRfT1VUUFVUX0xJQlRPT0xfSU5JVAorXSkKKworCisjIExUX09VVFBVVAorIyAtLS0tLS0tLS0KKyMgVGhpcyBtYWNybyBhbGxvd3MgZWFybHkgZ2VuZXJhdGlvbiBvZiB0aGUgbGlidG9vbCBzY3JpcHQgKGJlZm9yZQorIyBBQ19PVVRQVVQgaXMgY2FsbGVkKSwgaW5jYXNlIGl0IGlzIHVzZWQgaW4gY29uZmlndXJlIGZvciBjb21waWxhdGlvbgorIyB0ZXN0cy4KK0FDX0RFRlVOKFtMVF9PVVRQVVRdLAorWzogJHtDT05GSUdfTFQ9Li9jb25maWcubHR9CitBQ19NU0dfTk9USUNFKFtjcmVhdGluZyAkQ09ORklHX0xUXSkKK2NhdCA+IiRDT05GSUdfTFQiIDw8X0xURU9GCisjISAkU0hFTEwKKyMgR2VuZXJhdGVkIGJ5ICRhc19tZS4KKyMgUnVuIHRoaXMgZmlsZSB0byByZWNyZWF0ZSBhIGxpYnRvb2wgc3R1YiB3aXRoIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24uCisKK2x0X2NsX3NpbGVudD1mYWxzZQorU0hFTEw9XCR7Q09ORklHX1NIRUxMLSRTSEVMTH0KK19MVEVPRgorCitjYXQgPj4iJENPTkZJR19MVCIgPDxcX0xURU9GCitBU19TSEVMTF9TQU5JVElaRQorX0FTX1BSRVBBUkUKKworZXhlYyBBU19NRVNTQUdFX0ZEPiYxCitleGVjIEFTX01FU1NBR0VfTE9HX0ZEPj5jb25maWcubG9nCit7CisgIGVjaG8KKyAgQVNfQk9YKFtSdW5uaW5nICRhc19tZS5dKQorfSA+JkFTX01FU1NBR0VfTE9HX0ZECisKK2x0X2NsX2hlbHA9IlwKK1xgJGFzX21lJyBjcmVhdGVzIGEgbG9jYWwgbGlidG9vbCBzdHViIGZyb20gdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiwKK2ZvciB1c2UgaW4gZnVydGhlciBjb25maWd1cmUgdGltZSB0ZXN0cyBiZWZvcmUgdGhlIHJlYWwgbGlidG9vbCBpcworZ2VuZXJhdGVkLgorCitVc2FnZTogJFswXSBbW09QVElPTlNdXQorCisgIC1oLCAtLWhlbHAgICAgICBwcmludCB0aGlzIGhlbHAsIHRoZW4gZXhpdAorICAtViwgLS12ZXJzaW9uICAgcHJpbnQgdmVyc2lvbiBudW1iZXIsIHRoZW4gZXhpdAorICAtcSwgLS1xdWlldCAgICAgZG8gbm90IHByaW50IHByb2dyZXNzIG1lc3NhZ2VzCisgIC1kLCAtLWRlYnVnICAgICBkb24ndCByZW1vdmUgdGVtcG9yYXJ5IGZpbGVzCisKK1JlcG9ydCBidWdzIHRvIDxidWctbGlidG9vbEBnbnUub3JnPi4iCisKK2x0X2NsX3ZlcnNpb249IlwKK200X2lmc2V0KFtBQ19QQUNLQUdFX05BTUVdLCBbQUNfUEFDS0FHRV9OQU1FIF0pY29uZmlnLmx0W11kbmwKK200X2lmc2V0KFtBQ19QQUNLQUdFX1ZFUlNJT05dLCBbIEFDX1BBQ0tBR0VfVkVSU0lPTl0pCitjb25maWd1cmVkIGJ5ICRbMF0sIGdlbmVyYXRlZCBieSBtNF9QQUNLQUdFX1NUUklORy4KKworQ29weXJpZ2h0IChDKSAyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorVGhpcyBjb25maWcubHQgc2NyaXB0IGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2dpdmVzIHVubGltaXRlZCBwZXJtaXNpb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQgbW9kaWZ5IGl0LiIKKword2hpbGUgdGVzdCAkWyNdICE9IDAKK2RvCisgIGNhc2UgJFsxXSBpbgorICAgIC0tdmVyc2lvbiB8IC0tdiogfCAtViApCisgICAgICBlY2hvICIkbHRfY2xfdmVyc2lvbiI7IGV4aXQgMCA7OworICAgIC0taGVscCB8IC0taCogfCAtaCApCisgICAgICBlY2hvICIkbHRfY2xfaGVscCI7IGV4aXQgMCA7OworICAgIC0tZGVidWcgfCAtLWQqIHwgLWQgKQorICAgICAgZGVidWc9OiA7OworICAgIC0tcXVpZXQgfCAtLXEqIHwgLS1zaWxlbnQgfCAtLXMqIHwgLXEgKQorICAgICAgbHRfY2xfc2lsZW50PTogOzsKKworICAgIC0qKSBBQ19NU0dfRVJST1IoW3VucmVjb2duaXplZCBvcHRpb246ICRbMV0KK1RyeSBcYCRbMF0gLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5dKSA7OworCisgICAgKikgQUNfTVNHX0VSUk9SKFt1bnJlY29nbml6ZWQgYXJndW1lbnQ6ICRbMV0KK1RyeSBcYCRbMF0gLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5dKSA7OworICBlc2FjCisgIHNoaWZ0Citkb25lCisKK2lmICRsdF9jbF9zaWxlbnQ7IHRoZW4KKyAgZXhlYyBBU19NRVNTQUdFX0ZEPi9kZXYvbnVsbAorZmkKK19MVEVPRgorCitjYXQgPj4iJENPTkZJR19MVCIgPDxfTFRFT0YKK19MVF9PVVRQVVRfTElCVE9PTF9DT01NQU5EU19JTklUCitfTFRFT0YKKworY2F0ID4+IiRDT05GSUdfTFQiIDw8XF9MVEVPRgorQUNfTVNHX05PVElDRShbY3JlYXRpbmcgJG9maWxlXSkKK19MVF9PVVRQVVRfTElCVE9PTF9DT01NQU5EUworQVNfRVhJVCgwKQorX0xURU9GCitjaG1vZCAreCAiJENPTkZJR19MVCIKKworIyBjb25maWd1cmUgaXMgd3JpdGluZyB0byBjb25maWcubG9nLCBidXQgY29uZmlnLmx0IGRvZXMgaXRzIG93biByZWRpcmVjdGlvbiwKKyMgYXBwZW5kaW5nIHRvIGNvbmZpZy5sb2csIHdoaWNoIGZhaWxzIG9uIERPUywgYXMgY29uZmlnLmxvZyBpcyBzdGlsbCBrZXB0CisjIG9wZW4gYnkgY29uZmlndXJlLiAgSGVyZSB3ZSBleGVjIHRoZSBGRCB0byAvZGV2L251bGwsIGVmZmVjdGl2ZWx5IGNsb3NpbmcKKyMgY29uZmlnLmxvZywgc28gaXQgY2FuIGJlIHByb3Blcmx5IChyZSlvcGVuZWQgYW5kIGFwcGVuZGVkIHRvIGJ5IGNvbmZpZy5sdC4KK2lmIHRlc3QgIiRub19jcmVhdGUiICE9IHllczsgdGhlbgorICBsdF9jbF9zdWNjZXNzPToKKyAgdGVzdCAiJHNpbGVudCIgPSB5ZXMgJiYKKyAgICBsdF9jb25maWdfbHRfYXJncz0iJGx0X2NvbmZpZ19sdF9hcmdzIC0tcXVpZXQiCisgIGV4ZWMgQVNfTUVTU0FHRV9MT0dfRkQ+L2Rldi9udWxsCisgICRTSEVMTCAiJENPTkZJR19MVCIgJGx0X2NvbmZpZ19sdF9hcmdzIHx8IGx0X2NsX3N1Y2Nlc3M9ZmFsc2UKKyAgZXhlYyBBU19NRVNTQUdFX0xPR19GRD4+Y29uZmlnLmxvZworICAkbHRfY2xfc3VjY2VzcyB8fCBBU19FWElUKDEpCitmaQorXSkjIExUX09VVFBVVAorCisKKyMgX0xUX0NPTkZJRyhUQUcpCisjIC0tLS0tLS0tLS0tLS0tLQorIyBJZiBUQUcgaXMgdGhlIGJ1aWx0LWluIHRhZywgY3JlYXRlIGFuIGluaXRpYWwgbGlidG9vbCBzY3JpcHQgd2l0aCBhCisjIGRlZmF1bHQgY29uZmlndXJhdGlvbiBmcm9tIHRoZSB1bnRhZ2dlZCBjb25maWcgdmFycy4gIE90aGVyd2lzZSBhZGQgY29kZQorIyB0byBjb25maWcuc3RhdHVzIGZvciBhcHBlbmRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gbmFtZWQgYnkgVEFHIGZyb20gdGhlCisjIG1hdGNoaW5nIHRhZ2dlZCBjb25maWcgdmFycy4KK200X2RlZnVuKFtfTFRfQ09ORklHXSwKK1ttNF9yZXF1aXJlKFtfTFRfRklMRVVUSUxTX0RFRkFVTFRTXSlkbmwKK19MVF9DT05GSUdfU0FWRV9DT01NQU5EUyhbCisgIG00X2RlZmluZShbX0xUX1RBR10sIG00X2lmKFskMV0sIFtdLCBbQ10sIFskMV0pKWRubAorICBtNF9pZihfTFRfVEFHLCBbQ10sIFsKKyAgICAjIFNlZSBpZiB3ZSBhcmUgcnVubmluZyBvbiB6c2gsIGFuZCBzZXQgdGhlIG9wdGlvbnMgd2hpY2ggYWxsb3cgb3VyCisgICAgIyBjb21tYW5kcyB0aHJvdWdoIHdpdGhvdXQgcmVtb3ZhbCBvZiBcIGVzY2FwZXMuCisgICAgaWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IiA7IHRoZW4KKyAgICAgIHNldG9wdCBOT19HTE9CX1NVQlNUCisgICAgZmkKKworICAgIGNmZ2ZpbGU9IiR7b2ZpbGV9VCIKKyAgICB0cmFwICIkUk0gXCIkY2ZnZmlsZVwiOyBleGl0IDEiIDEgMiAxNQorICAgICRSTSAiJGNmZ2ZpbGUiCisKKyAgICBjYXQgPDxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKyMhICRTSEVMTAorCisjIGAkRUNITyAiJG9maWxlIiB8IHNlZCAncyVeLiovJSUnYCAtIFByb3ZpZGUgZ2VuZXJhbGl6ZWQgbGlicmFyeS1idWlsZGluZyBzdXBwb3J0IHNlcnZpY2VzLgorIyBHZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSAkYXNfbWUgKCRQQUNLQUdFJFRJTUVTVEFNUCkgJFZFUlNJT04KKyMgTGlidG9vbCB3YXMgY29uZmlndXJlZCBvbiBob3N0IGAoaG9zdG5hbWUgfHwgdW5hbWUgLW4pIDI+L2Rldi9udWxsIHwgc2VkIDFxYDoKKyMgTk9URTogQ2hhbmdlcyBtYWRlIHRvIHRoaXMgZmlsZSB3aWxsIGJlIGxvc3Q6IGxvb2sgYXQgbHRtYWluLnNoLgorIworX0xUX0NPUFlJTkcKK19MVF9MSUJUT09MX1RBR1MKKworIyAjIyMgQkVHSU4gTElCVE9PTCBDT05GSUcKK19MVF9MSUJUT09MX0NPTkZJR19WQVJTCitfTFRfTElCVE9PTF9UQUdfVkFSUworIyAjIyMgRU5EIExJQlRPT0wgQ09ORklHCisKK19MVF9FT0YKKworICBjYXNlICRob3N0X29zIGluCisgIGFpeDMqKQorICAgIGNhdCA8PFxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKyMgQUlYIHNvbWV0aW1lcyBoYXMgcHJvYmxlbXMgd2l0aCB0aGUgR0NDIGNvbGxlY3QyIHByb2dyYW0uICBGb3Igc29tZQorIyByZWFzb24sIGlmIHdlIHNldCB0aGUgQ09MTEVDVF9OQU1FUyBlbnZpcm9ubWVudCB2YXJpYWJsZSwgdGhlIHByb2JsZW1zCisjIHZhbmlzaCBpbiBhIHB1ZmYgb2Ygc21va2UuCitpZiB0ZXN0ICJYJHtDT0xMRUNUX05BTUVTK3NldH0iICE9IFhzZXQ7IHRoZW4KKyAgQ09MTEVDVF9OQU1FUz0KKyAgZXhwb3J0IENPTExFQ1RfTkFNRVMKK2ZpCitfTFRfRU9GCisgICAgOzsKKyAgZXNhYworCisgIF9MVF9QUk9HX0xUTUFJTgorCisgICMgV2UgdXNlIHNlZCBpbnN0ZWFkIG9mIGNhdCBiZWNhdXNlIGJhc2ggb24gREpHUFAgZ2V0cyBjb25mdXNlZCBpZgorICAjIGlmIGZpbmRzIG1peGVkIENSL0xGIGFuZCBMRi1vbmx5IGxpbmVzLiAgU2luY2Ugc2VkIG9wZXJhdGVzIGluCisgICMgdGV4dCBtb2RlLCBpdCBwcm9wZXJseSBjb252ZXJ0cyBsaW5lcyB0byBDUi9MRi4gIFRoaXMgYmFzaCBwcm9ibGVtCisgICMgaXMgcmVwb3J0ZWRseSBmaXhlZCwgYnV0IHdoeSBub3QgcnVuIG9uIG9sZCB2ZXJzaW9ucyB0b28/CisgIHNlZCAnL14jIEdlbmVyYXRlZCBzaGVsbCBmdW5jdGlvbnMgaW5zZXJ0ZWQgaGVyZS9xJyAiJGx0bWFpbiIgPj4gIiRjZmdmaWxlIiBcCisgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSI7IGV4aXQgMSkKKworICBfTFRfUFJPR19YU0lfU0hFTExGTlMKKworICBzZWQgLW4gJy9eIyBHZW5lcmF0ZWQgc2hlbGwgZnVuY3Rpb25zIGluc2VydGVkIGhlcmUvLCRwJyAiJGx0bWFpbiIgPj4gIiRjZmdmaWxlIiBcCisgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSI7IGV4aXQgMSkKKworICBtdiAtZiAiJGNmZ2ZpbGUiICIkb2ZpbGUiIHx8CisgICAgKHJtIC1mICIkb2ZpbGUiICYmIGNwICIkY2ZnZmlsZSIgIiRvZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlIikKKyAgY2htb2QgK3ggIiRvZmlsZSIKK10sCitbY2F0IDw8X0xUX0VPRiA+PiAiJG9maWxlIgorCitkbmwgVW5mb3J0dW5hdGVseSB3ZSBoYXZlIHRvIHVzZSAkMSBoZXJlLCBzaW5jZSBfTFRfVEFHIGlzIG5vdCBleHBhbmRlZAorZG5sIGluIGEgY29tbWVudCAoaWUgYWZ0ZXIgYSAjKS4KKyMgIyMjIEJFR0lOIExJQlRPT0wgVEFHIENPTkZJRzogJDEKK19MVF9MSUJUT09MX1RBR19WQVJTKF9MVF9UQUcpCisjICMjIyBFTkQgTElCVE9PTCBUQUcgQ09ORklHOiAkMQorX0xUX0VPRgorXSlkbmwgL200X2lmCitdLAorW200X2lmKFskMV0sIFtdLCBbCisgICAgUEFDS0FHRT0nJFBBQ0tBR0UnCisgICAgVkVSU0lPTj0nJFZFUlNJT04nCisgICAgVElNRVNUQU1QPSckVElNRVNUQU1QJworICAgIFJNPSckUk0nCisgICAgb2ZpbGU9JyRvZmlsZSddLCBbXSkKK10pZG5sIC9fTFRfQ09ORklHX1NBVkVfQ09NTUFORFMKK10pIyBfTFRfQ09ORklHCisKKworIyBMVF9TVVBQT1JURURfVEFHKFRBRykKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRyYWNlIHRoaXMgbWFjcm8gdG8gZGlzY292ZXIgd2hhdCB0YWdzIGFyZSBzdXBwb3J0ZWQgYnkgdGhlIGxpYnRvb2wKKyMgLS10YWcgb3B0aW9uLCB1c2luZzoKKyMgICAgYXV0b2NvbmYgLS10cmFjZSAnTFRfU1VQUE9SVEVEX1RBRzokMScKK0FDX0RFRlVOKFtMVF9TVVBQT1JURURfVEFHXSwgW10pCisKKworIyBDIHN1cHBvcnQgaXMgYnVpbHQtaW4gZm9yIG5vdworbTRfZGVmaW5lKFtfTFRfTEFOR19DX2VuYWJsZWRdLCBbXSkKK200X2RlZmluZShbX0xUX1RBR1NdLCBbXSkKKworCisjIExUX0xBTkcoTEFORykKKyMgLS0tLS0tLS0tLS0tLQorIyBFbmFibGUgbGlidG9vbCBzdXBwb3J0IGZvciB0aGUgZ2l2ZW4gbGFuZ3VhZ2UgaWYgbm90IGFscmVhZHkgZW5hYmxlZC4KK0FDX0RFRlVOKFtMVF9MQU5HXSwKK1tBQ19CRUZPUkUoWyQwXSwgW0xUX09VVFBVVF0pZG5sCittNF9jYXNlKFskMV0sCisgIFtDXSwJCQlbX0xUX0xBTkcoQyldLAorICBbQysrXSwJCVtfTFRfTEFORyhDWFgpXSwKKyAgW0phdmFdLAkJW19MVF9MQU5HKEdDSildLAorICBbRm9ydHJhbiA3N10sCQlbX0xUX0xBTkcoRjc3KV0sCisgIFtGb3J0cmFuXSwJCVtfTFRfTEFORyhGQyldLAorICBbV2luZG93cyBSZXNvdXJjZV0sCVtfTFRfTEFORyhSQyldLAorICBbbTRfaWZkZWYoW19MVF9MQU5HX10kMVtfQ09ORklHXSwKKyAgICBbX0xUX0xBTkcoJDEpXSwKKyAgICBbbTRfZmF0YWwoWyQwOiB1bnN1cHBvcnRlZCBsYW5ndWFnZTogIiQxIl0pXSldKWRubAorXSkjIExUX0xBTkcKKworCisjIF9MVF9MQU5HKExBTkdOQU1FKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZnVuKFtfTFRfTEFOR10sCitbbTRfaWZkZWYoW19MVF9MQU5HX10kMVtfZW5hYmxlZF0sIFtdLAorICBbTFRfU1VQUE9SVEVEX1RBRyhbJDFdKWRubAorICBtNF9hcHBlbmQoW19MVF9UQUdTXSwgWyQxIF0pZG5sCisgIG00X2RlZmluZShbX0xUX0xBTkdfXSQxW19lbmFibGVkXSwgW10pZG5sCisgIF9MVF9MQU5HXyQxX0NPTkZJRygkMSldKWRubAorXSkjIF9MVF9MQU5HCisKKworIyBfTFRfTEFOR19ERUZBVUxUX0NPTkZJRworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmdW4oW19MVF9MQU5HX0RFRkFVTFRfQ09ORklHXSwKK1tBQ19QUk9WSURFX0lGRUxTRShbQUNfUFJPR19DWFhdLAorICBbTFRfTEFORyhDWFgpXSwKKyAgW200X2RlZmluZShbQUNfUFJPR19DWFhdLCBkZWZuKFtBQ19QUk9HX0NYWF0pW0xUX0xBTkcoQ1hYKV0pXSkKKworQUNfUFJPVklERV9JRkVMU0UoW0FDX1BST0dfRjc3XSwKKyAgW0xUX0xBTkcoRjc3KV0sCisgIFttNF9kZWZpbmUoW0FDX1BST0dfRjc3XSwgZGVmbihbQUNfUFJPR19GNzddKVtMVF9MQU5HKEY3NyldKV0pCisKK0FDX1BST1ZJREVfSUZFTFNFKFtBQ19QUk9HX0ZDXSwKKyAgW0xUX0xBTkcoRkMpXSwKKyAgW200X2RlZmluZShbQUNfUFJPR19GQ10sIGRlZm4oW0FDX1BST0dfRkNdKVtMVF9MQU5HKEZDKV0pXSkKKworZG5sIFRoZSBjYWxsIHRvIFtBXVtNX1BST0dfR0NKXSBpcyBxdW90ZWQgbGlrZSB0aGF0IHRvIHN0b3AgYWNsb2NhbAorZG5sIHB1bGxpbmcgdGhpbmdzIGluIG5lZWRsZXNzbHkuCitBQ19QUk9WSURFX0lGRUxTRShbQUNfUFJPR19HQ0pdLAorICBbTFRfTEFORyhHQ0opXSwKKyAgW0FDX1BST1ZJREVfSUZFTFNFKFtBXVtNX1BST0dfR0NKXSwKKyAgICBbTFRfTEFORyhHQ0opXSwKKyAgICBbQUNfUFJPVklERV9JRkVMU0UoW0xUX1BST0dfR0NKXSwKKyAgICAgIFtMVF9MQU5HKEdDSildLAorICAgICAgW200X2lmZGVmKFtBQ19QUk9HX0dDSl0sCisJW200X2RlZmluZShbQUNfUFJPR19HQ0pdLCBkZWZuKFtBQ19QUk9HX0dDSl0pW0xUX0xBTkcoR0NKKV0pXSkKKyAgICAgICBtNF9pZmRlZihbQV1bTV9QUk9HX0dDSl0sCisJW200X2RlZmluZShbQV1bTV9QUk9HX0dDSl0sIGRlZm4oW0FdW01fUFJPR19HQ0pdKVtMVF9MQU5HKEdDSildKV0pCisgICAgICAgbTRfaWZkZWYoW0xUX1BST0dfR0NKXSwKKwlbbTRfZGVmaW5lKFtMVF9QUk9HX0dDSl0sIGRlZm4oW0xUX1BST0dfR0NKXSlbTFRfTEFORyhHQ0opXSldKV0pXSldKQorCitBQ19QUk9WSURFX0lGRUxTRShbTFRfUFJPR19SQ10sCisgIFtMVF9MQU5HKFJDKV0sCisgIFttNF9kZWZpbmUoW0xUX1BST0dfUkNdLCBkZWZuKFtMVF9QUk9HX1JDXSlbTFRfTEFORyhSQyldKV0pCitdKSMgX0xUX0xBTkdfREVGQVVMVF9DT05GSUcKKworIyBPYnNvbGV0ZSBtYWNyb3M6CitBVV9ERUZVTihbQUNfTElCVE9PTF9DWFhdLCBbTFRfTEFORyhDKyspXSkKK0FVX0RFRlVOKFtBQ19MSUJUT09MX0Y3N10sIFtMVF9MQU5HKEZvcnRyYW4gNzcpXSkKK0FVX0RFRlVOKFtBQ19MSUJUT09MX0ZDXSwgW0xUX0xBTkcoRm9ydHJhbildKQorQVVfREVGVU4oW0FDX0xJQlRPT0xfR0NKXSwgW0xUX0xBTkcoSmF2YSldKQorZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtBQ19MSUJUT09MX0NYWF0sIFtdKQorZG5sIEFDX0RFRlVOKFtBQ19MSUJUT09MX0Y3N10sIFtdKQorZG5sIEFDX0RFRlVOKFtBQ19MSUJUT09MX0ZDXSwgW10pCitkbmwgQUNfREVGVU4oW0FDX0xJQlRPT0xfR0NKXSwgW10pCisKKworIyBfTFRfVEFHX0NPTVBJTEVSCisjIC0tLS0tLS0tLS0tLS0tLS0KK200X2RlZnVuKFtfTFRfVEFHX0NPTVBJTEVSXSwKK1tBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSlkbmwKKworX0xUX0RFQ0woW0xUQ0NdLCBbQ0NdLCBbMV0sIFtBIEMgY29tcGlsZXJdKWRubAorX0xUX0RFQ0woW0xUQ0ZMQUdTXSwgW0NGTEFHU10sIFsxXSwgW0xUQ0MgY29tcGlsZXIgZmxhZ3NdKWRubAorX0xUX1RBR0RFQ0woW0NDXSwgW2NvbXBpbGVyXSwgWzFdLCBbQSBsYW5ndWFnZSBzcGVjaWZpYyBjb21waWxlcl0pZG5sCitfTFRfVEFHREVDTChbd2l0aF9nY2NdLCBbR0NDXSwgWzBdLCBbSXMgdGhlIGNvbXBpbGVyIHRoZSBHTlUgY29tcGlsZXI/XSlkbmwKKworIyBJZiBubyBDIGNvbXBpbGVyIHdhcyBzcGVjaWZpZWQsIHVzZSBDQy4KK0xUQ0M9JHtMVENDLSIkQ0MifQorCisjIElmIG5vIEMgY29tcGlsZXIgZmxhZ3Mgd2VyZSBzcGVjaWZpZWQsIHVzZSBDRkxBR1MuCitMVENGTEFHUz0ke0xUQ0ZMQUdTLSIkQ0ZMQUdTIn0KKworIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KK2NvbXBpbGVyPSRDQworXSkjIF9MVF9UQUdfQ09NUElMRVIKKworCisjIF9MVF9DT01QSUxFUl9CT0lMRVJQTEFURQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ2hlY2sgZm9yIGNvbXBpbGVyIGJvaWxlcnBsYXRlIG91dHB1dCBvciB3YXJuaW5ncyB3aXRoCisjIHRoZSBzaW1wbGUgY29tcGlsZXIgdGVzdCBjb2RlLgorbTRfZGVmdW4oW19MVF9DT01QSUxFUl9CT0lMRVJQTEFURV0sCitbbTRfcmVxdWlyZShbX0xUX0RFQ0xfU0VEXSlkbmwKK2FjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dAorZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPmNvbmZ0ZXN0LiRhY19leHQKK2V2YWwgIiRhY19jb21waWxlIiAyPiYxID4vZGV2L251bGwgfCAkU0VEICcvXiQvZDsgL14gKisvZCcgPmNvbmZ0ZXN0LmVycgorX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlPWBjYXQgY29uZnRlc3QuZXJyYAorJFJNIGNvbmZ0ZXN0KgorXSkjIF9MVF9DT01QSUxFUl9CT0lMRVJQTEFURQorCisKKyMgX0xUX0xJTktFUl9CT0lMRVJQTEFURQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENoZWNrIGZvciBsaW5rZXIgYm9pbGVycGxhdGUgb3V0cHV0IG9yIHdhcm5pbmdzIHdpdGgKKyMgdGhlIHNpbXBsZSBsaW5rIHRlc3QgY29kZS4KK200X2RlZnVuKFtfTFRfTElOS0VSX0JPSUxFUlBMQVRFXSwKK1ttNF9yZXF1aXJlKFtfTFRfREVDTF9TRURdKWRubAorYWNfb3V0ZmlsZT1jb25mdGVzdC4kYWNfb2JqZXh0CitlY2hvICIkbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlIiA+Y29uZnRlc3QuJGFjX2V4dAorZXZhbCAiJGFjX2xpbmsiIDI+JjEgPi9kZXYvbnVsbCB8ICRTRUQgJy9eJC9kOyAvXiAqKy9kJyA+Y29uZnRlc3QuZXJyCitfbHRfbGlua2VyX2JvaWxlcnBsYXRlPWBjYXQgY29uZnRlc3QuZXJyYAorJFJNIC1yIGNvbmZ0ZXN0KgorXSkjIF9MVF9MSU5LRVJfQk9JTEVSUExBVEUKKworIyBfTFRfUkVRVUlSRURfREFSV0lOX0NIRUNLUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZ1bl9vbmNlKFtfTFRfUkVRVUlSRURfREFSV0lOX0NIRUNLU10sWworICBjYXNlICRob3N0X29zIGluCisgICAgcmhhcHNvZHkqIHwgZGFyd2luKikKKyAgICBBQ19DSEVDS19UT09MKFtEU1lNVVRJTF0sIFtkc3ltdXRpbF0sIFs6XSkKKyAgICBBQ19DSEVDS19UT09MKFtOTUVESVRdLCBbbm1lZGl0XSwgWzpdKQorICAgIEFDX0NIRUNLX1RPT0woW0xJUE9dLCBbbGlwb10sIFs6XSkKKyAgICBBQ19DSEVDS19UT09MKFtPVE9PTF0sIFtvdG9vbF0sIFs6XSkKKyAgICBBQ19DSEVDS19UT09MKFtPVE9PTDY0XSwgW290b29sNjRdLCBbOl0pCisgICAgX0xUX0RFQ0woW10sIFtEU1lNVVRJTF0sIFsxXSwKKyAgICAgIFtUb29sIHRvIG1hbmlwdWxhdGUgYXJjaGl2ZWQgRFdBUkYgZGVidWcgc3ltYm9sIGZpbGVzIG9uIE1hYyBPUyBYXSkKKyAgICBfTFRfREVDTChbXSwgW05NRURJVF0sIFsxXSwKKyAgICAgIFtUb29sIHRvIGNoYW5nZSBnbG9iYWwgdG8gbG9jYWwgc3ltYm9scyBvbiBNYWMgT1MgWF0pCisgICAgX0xUX0RFQ0woW10sIFtMSVBPXSwgWzFdLAorICAgICAgW1Rvb2wgdG8gbWFuaXB1bGF0ZSBmYXQgb2JqZWN0cyBhbmQgYXJjaGl2ZXMgb24gTWFjIE9TIFhdKQorICAgIF9MVF9ERUNMKFtdLCBbT1RPT0xdLCBbMV0sCisgICAgICBbbGRkL3JlYWRlbGYgbGlrZSB0b29sIGZvciBNYWNoLU8gYmluYXJpZXMgb24gTWFjIE9TIFhdKQorICAgIF9MVF9ERUNMKFtdLCBbT1RPT0w2NF0sIFsxXSwKKyAgICAgIFtsZGQvcmVhZGVsZiBsaWtlIHRvb2wgZm9yIDY0IGJpdCBNYWNoLU8gYmluYXJpZXMgb24gTWFjIE9TIFggMTAuNF0pCisKKyAgICBBQ19DQUNIRV9DSEVDSyhbZm9yIC1zaW5nbGVfbW9kdWxlIGxpbmtlciBmbGFnXSxbbHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZF0sCisgICAgICBbbHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZD1ubworICAgICAgaWYgdGVzdCAteiAiJHtMVF9NVUxUSV9NT0RVTEV9IjsgdGhlbgorCSMgQnkgZGVmYXVsdCB3ZSB3aWxsIGFkZCB0aGUgLXNpbmdsZV9tb2R1bGUgZmxhZy4gWW91IGNhbiBvdmVycmlkZQorCSMgYnkgZWl0aGVyIHNldHRpbmcgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIExUX01VTFRJX01PRFVMRQorCSMgbm9uLWVtcHR5IGF0IGNvbmZpZ3VyZSB0aW1lLCBvciBieSBhZGRpbmcgLW11bHRpX21vZHVsZSB0byB0aGUKKwkjIGxpbmsgZmxhZ3MuCisJcm0gLXJmIGxpYmNvbmZ0ZXN0LmR5bGliKgorCWVjaG8gImludCBmb28odm9pZCl7cmV0dXJuIDE7fSIgPiBjb25mdGVzdC5jCisJZWNobyAiJExUQ0MgJExUQ0ZMQUdTICRMREZMQUdTIC1vIGxpYmNvbmZ0ZXN0LmR5bGliIFwKKy1keW5hbWljbGliIC1XbCwtc2luZ2xlX21vZHVsZSBjb25mdGVzdC5jIiA+JkFTX01FU1NBR0VfTE9HX0ZECisJJExUQ0MgJExUQ0ZMQUdTICRMREZMQUdTIC1vIGxpYmNvbmZ0ZXN0LmR5bGliIFwKKwkgIC1keW5hbWljbGliIC1XbCwtc2luZ2xlX21vZHVsZSBjb25mdGVzdC5jIDI+Y29uZnRlc3QuZXJyCisgICAgICAgIF9sdF9yZXN1bHQ9JD8KKwlpZiB0ZXN0IC1mIGxpYmNvbmZ0ZXN0LmR5bGliICYmIHRlc3QgISAtcyBjb25mdGVzdC5lcnIgJiYgdGVzdCAkX2x0X3Jlc3VsdCA9IDA7IHRoZW4KKwkgIGx0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2Q9eWVzCisJZWxzZQorCSAgY2F0IGNvbmZ0ZXN0LmVyciA+JkFTX01FU1NBR0VfTE9HX0ZECisJZmkKKwlybSAtcmYgbGliY29uZnRlc3QuZHlsaWIqCisJcm0gLWYgY29uZnRlc3QuKgorICAgICAgZmldKQorICAgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgLWV4cG9ydGVkX3N5bWJvbHNfbGlzdCBsaW5rZXIgZmxhZ10sCisgICAgICBbbHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0XSwKKyAgICAgIFtsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3Q9bm8KKyAgICAgIHNhdmVfTERGTEFHUz0kTERGTEFHUworICAgICAgZWNobyAiX21haW4iID4gY29uZnRlc3Quc3ltCisgICAgICBMREZMQUdTPSIkTERGTEFHUyAtV2wsLWV4cG9ydGVkX3N5bWJvbHNfbGlzdCxjb25mdGVzdC5zeW0iCisgICAgICBBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtdLFtdKV0sCisJW2x0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdD15ZXNdLAorCVtsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3Q9bm9dKQorCUxERkxBR1M9IiRzYXZlX0xERkxBR1MiCisgICAgXSkKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgcmhhcHNvZHkqIHwgZGFyd2luMS5bWzAxMl1dKQorICAgICAgX2x0X2Rhcl9hbGxvd191bmRlZmluZWQ9JyR7d2x9LXVuZGVmaW5lZCAke3dsfXN1cHByZXNzJyA7OworICAgIGRhcndpbjEuKikKKyAgICAgIF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkPScke3dsfS1mbGF0X25hbWVzcGFjZSAke3dsfS11bmRlZmluZWQgJHt3bH1zdXBwcmVzcycgOzsKKyAgICBkYXJ3aW4qKSAjIGRhcndpbiA1Lnggb24KKyAgICAgICMgaWYgcnVubmluZyBvbiAxMC41IG9yIGxhdGVyLCB0aGUgZGVwbG95bWVudCB0YXJnZXQgZGVmYXVsdHMKKyAgICAgICMgdG8gdGhlIE9TIHZlcnNpb24sIGlmIG9uIHg4NiwgYW5kIDEwLjQsIHRoZSBkZXBsb3ltZW50CisgICAgICAjIHRhcmdldCBkZWZhdWx0cyB0byAxMC40LiBEb24ndCB5b3UgbG92ZSBpdD8KKyAgICAgIGNhc2UgJHtNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQtMTAuMH0sJGhvc3QgaW4KKwkxMC4wLCo4NiotZGFyd2luOCp8MTAuMCwqLWRhcndpbltbOTFdXSopCisJICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHt3bH0tdW5kZWZpbmVkICR7d2x9ZHluYW1pY19sb29rdXAnIDs7CisJMTAuW1swMTJdXSopCisJICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHt3bH0tZmxhdF9uYW1lc3BhY2UgJHt3bH0tdW5kZWZpbmVkICR7d2x9c3VwcHJlc3MnIDs7CisJMTAuKikKKwkgIF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkPScke3dsfS11bmRlZmluZWQgJHt3bH1keW5hbWljX2xvb2t1cCcgOzsKKyAgICAgIGVzYWMKKyAgICA7OworICBlc2FjCisgICAgaWYgdGVzdCAiJGx0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2QiID0gInllcyI7IHRoZW4KKyAgICAgIF9sdF9kYXJfc2luZ2xlX21vZD0nJHNpbmdsZV9tb2R1bGUnCisgICAgZmkKKyAgICBpZiB0ZXN0ICIkbHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0IiA9ICJ5ZXMiOyB0aGVuCisgICAgICBfbHRfZGFyX2V4cG9ydF9zeW1zPScgJHt3bH0tZXhwb3J0ZWRfc3ltYm9sc19saXN0LCRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW0nCisgICAgZWxzZQorICAgICAgX2x0X2Rhcl9leHBvcnRfc3ltcz0nfiROTUVESVQgLXMgJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bSAke2xpYn0nCisgICAgZmkKKyAgICBpZiB0ZXN0ICIkRFNZTVVUSUwiICE9ICI6IjsgdGhlbgorICAgICAgX2x0X2RzeW11dGlsPSd+JERTWU1VVElMICRsaWIgfHwgOicKKyAgICBlbHNlCisgICAgICBfbHRfZHN5bXV0aWw9CisgICAgZmkKKyAgICA7OworICBlc2FjCitdKQorCisKKyMgX0xUX0RBUldJTl9MSU5LRVJfRkVBVFVSRVMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ2hlY2tzIGZvciBsaW5rZXIgYW5kIGNvbXBpbGVyIGZlYXR1cmVzIG9uIGRhcndpbgorbTRfZGVmdW4oW19MVF9EQVJXSU5fTElOS0VSX0ZFQVRVUkVTXSwKK1sKKyAgbTRfcmVxdWlyZShbX0xUX1JFUVVJUkVEX0RBUldJTl9DSEVDS1NdKQorICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KKyAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubworICBfTFRfVEFHVkFSKGhhcmRjb2RlX2F1dG9tYXRpYywgJDEpPXllcworICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT11bnN1cHBvcnRlZAorICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JycKKyAgX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCisgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0iJF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkIgorICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICBpZm9ydCopIF9sdF9kYXJfY2FuX3NoYXJlZD15ZXMgOzsKKyAgICAgKikgX2x0X2Rhcl9jYW5fc2hhcmVkPSRHQ0MgOzsKKyAgZXNhYworICBpZiB0ZXN0ICIkX2x0X2Rhcl9jYW5fc2hhcmVkIiA9ICJ5ZXMiOyB0aGVuCisgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9ZWNobworICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9IlwkQ0MgLWR5bmFtaWNsaWIgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiBcJGxpYm9ianMgXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSBcJHJwYXRoL1wkc29uYW1lIFwkdmVyc3RyaW5nICRfbHRfZGFyX3NpbmdsZV9tb2Qke19sdF9kc3ltdXRpbH0iCisgICAgX0xUX1RBR1ZBUihtb2R1bGVfY21kcywgJDEpPSJcJENDIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgLWJ1bmRsZSBcJGxpYm9ianMgXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3Mke19sdF9kc3ltdXRpbH0iCisgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9InNlZCAncyxeLF8sJyA8IFwkZXhwb3J0X3N5bWJvbHMgPiBcJG91dHB1dF9vYmpkaXIvXCR7bGlibmFtZX0tc3ltYm9scy5leHBzeW1+XCRDQyAtZHluYW1pY2xpYiBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lIFwkcnBhdGgvXCRzb25hbWUgXCR2ZXJzdHJpbmcgJHtfbHRfZGFyX3NpbmdsZV9tb2R9JHtfbHRfZGFyX2V4cG9ydF9zeW1zfSR7X2x0X2RzeW11dGlsfSIKKyAgICBfTFRfVEFHVkFSKG1vZHVsZV9leHBzeW1fY21kcywgJDEpPSJzZWQgLWUgJ3MsXixfLCcgPCBcJGV4cG9ydF9zeW1ib2xzID4gXCRvdXRwdXRfb2JqZGlyL1wke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltflwkQ0MgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiAtYnVuZGxlIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyR7X2x0X2Rhcl9leHBvcnRfc3ltc30ke19sdF9kc3ltdXRpbH0iCisgICAgbTRfaWYoWyQxXSwgW0NYWF0sCitbICAgaWYgdGVzdCAiJGx0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2QiICE9ICJ5ZXMiOyB0aGVuCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSJcJENDIC1yIC1rZWVwX3ByaXZhdGVfZXh0ZXJucyAtbm9zdGRsaWIgLW8gXCR7bGlifS1tYXN0ZXIubyBcJGxpYm9ianN+XCRDQyAtZHluYW1pY2xpYiBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIFwke2xpYn0tbWFzdGVyLm8gXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSBcJHJwYXRoL1wkc29uYW1lIFwkdmVyc3RyaW5nJHtfbHRfZHN5bXV0aWx9IgorICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9InNlZCAncyxeLF8sJyA8IFwkZXhwb3J0X3N5bWJvbHMgPiBcJG91dHB1dF9vYmpkaXIvXCR7bGlibmFtZX0tc3ltYm9scy5leHBzeW1+XCRDQyAtciAta2VlcF9wcml2YXRlX2V4dGVybnMgLW5vc3RkbGliIC1vIFwke2xpYn0tbWFzdGVyLm8gXCRsaWJvYmpzflwkQ0MgLWR5bmFtaWNsaWIgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiBcJHtsaWJ9LW1hc3Rlci5vIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzIC1pbnN0YWxsX25hbWUgXCRycGF0aC9cJHNvbmFtZSBcJHZlcnN0cmluZyR7X2x0X2Rhcl9leHBvcnRfc3ltc30ke19sdF9kc3ltdXRpbH0iCisgICAgZmkKK10sW10pCisgIGVsc2UKKyAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICBmaQorXSkKKworIyBfTFRfU1lTX01PRFVMRV9QQVRIX0FJWAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBMaW5rcyBhIG1pbmltYWwgcHJvZ3JhbSBhbmQgY2hlY2tzIHRoZSBleGVjdXRhYmxlCisjIGZvciB0aGUgc3lzdGVtIGRlZmF1bHQgaGFyZGNvZGVkIGxpYnJhcnkgcGF0aC4gSW4gbW9zdCBjYXNlcywKKyMgdGhpcyBpcyAvdXNyL2xpYjovbGliLCBidXQgd2hlbiB0aGUgTVBJIGNvbXBpbGVycyBhcmUgdXNlZAorIyB0aGUgbG9jYXRpb24gb2YgdGhlIGNvbW11bmljYXRpb24gYW5kIE1QSSBsaWJzIGFyZSBpbmNsdWRlZCB0b28uCisjIElmIHdlIGRvbid0IGZpbmQgYW55dGhpbmcsIHVzZSB0aGUgZGVmYXVsdCBsaWJyYXJ5IHBhdGggYWNjb3JkaW5nCisjIHRvIHRoZSBhaXggbGQgbWFudWFsLgorbTRfZGVmdW4oW19MVF9TWVNfTU9EVUxFX1BBVEhfQUlYXSwKK1ttNF9yZXF1aXJlKFtfTFRfREVDTF9TRURdKWRubAorQUNfTElOS19JRkVMU0UoQUNfTEFOR19QUk9HUkFNLFsKK2x0X2FpeF9saWJwYXRoX3NlZD0nCisgICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geworCS9eMC8geworCSAgICBzL14wICAqXCguKlwpJC9cMS8KKwkgICAgcAorCX0KKyAgICB9JworYWl4X2xpYnBhdGg9YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisjIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCitpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuCisgIGFpeF9saWJwYXRoPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorZmldLFtdKQoraWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCitdKSMgX0xUX1NZU19NT0RVTEVfUEFUSF9BSVgKKworCisjIF9MVF9TSEVMTF9JTklUKEFSRykKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtfTFRfU0hFTExfSU5JVF0sCitbaWZkZWYoW0FDX0RJVkVSU0lPTl9OT1RJQ0VdLAorCSAgICAgW0FDX0RJVkVSVF9QVVNIKEFDX0RJVkVSU0lPTl9OT1RJQ0UpXSwKKwkgW0FDX0RJVkVSVF9QVVNIKE5PVElDRSldKQorJDEKK0FDX0RJVkVSVF9QT1AKK10pIyBfTFRfU0hFTExfSU5JVAorCisKKyMgX0xUX1BST0dfRUNIT19CQUNLU0xBU0gKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQWRkIHNvbWUgY29kZSB0byB0aGUgc3RhcnQgb2YgdGhlIGdlbmVyYXRlZCBjb25maWd1cmUgc2NyaXB0IHdoaWNoCisjIHdpbGwgZmluZCBhbiBlY2hvIGNvbW1hbmQgd2hpY2ggZG9lc24ndCBpbnRlcnByZXQgYmFja3NsYXNoZXMuCittNF9kZWZ1bihbX0xUX1BST0dfRUNIT19CQUNLU0xBU0hdLAorW19MVF9TSEVMTF9JTklUKFsKKyMgQ2hlY2sgdGhhdCB3ZSBhcmUgcnVubmluZyB1bmRlciB0aGUgY29ycmVjdCBzaGVsbC4KK1NIRUxMPSR7Q09ORklHX1NIRUxMLS9iaW4vc2h9CisKK2Nhc2UgWCRsdF9FQ0hPIGluCitYKi0tZmFsbGJhY2stZWNobykKKyAgIyBSZW1vdmUgb25lIGxldmVsIG9mIHF1b3RhdGlvbiAod2hpY2ggd2FzIHJlcXVpcmVkIGZvciBNYWtlKS4KKyAgRUNITz1gZWNobyAiJGx0X0VDSE8iIHwgc2VkICdzLFxcXFxcWyRdXFxbJF0wLCdbJF0wJywnYAorICA7OworZXNhYworCitFQ0hPPSR7bHRfRUNITy1lY2hvfQoraWYgdGVzdCAiWFskXTEiID0gWC0tbm8tcmVleGVjOyB0aGVuCisgICMgRGlzY2FyZCB0aGUgLS1uby1yZWV4ZWMgZmxhZywgYW5kIGNvbnRpbnVlLgorICBzaGlmdAorZWxpZiB0ZXN0ICJYWyRdMSIgPSBYLS1mYWxsYmFjay1lY2hvOyB0aGVuCisgICMgQXZvaWQgaW5saW5lIGRvY3VtZW50IGhlcmUsIGl0IG1heSBiZSBsZWZ0IG92ZXIKKyAgOgorZWxpZiB0ZXN0ICJYYHsgJEVDSE8gJ1x0JzsgfSAyPi9kZXYvbnVsbGAiID0gJ1hcdCcgOyB0aGVuCisgICMgWWlwcGVlLCAkRUNITyB3b3JrcyEKKyAgOgorZWxzZQorICAjIFJlc3RhcnQgdW5kZXIgdGhlIGNvcnJlY3Qgc2hlbGwuCisgIGV4ZWMgJFNIRUxMICJbJF0wIiAtLW5vLXJlZXhlYyAkezErIlskXUAifQorZmkKKworaWYgdGVzdCAiWFskXTEiID0gWC0tZmFsbGJhY2stZWNobzsgdGhlbgorICAjIHVzZWQgYXMgZmFsbGJhY2sgZWNobworICBzaGlmdAorICBjYXQgPDxfTFRfRU9GCitbJF0qCitfTFRfRU9GCisgIGV4aXQgMAorZmkKKworIyBUaGUgSFAtVVgga3NoIGFuZCBQT1NJWCBzaGVsbCBwcmludCB0aGUgdGFyZ2V0IGRpcmVjdG9yeSB0byBzdGRvdXQKKyMgaWYgQ0RQQVRIIGlzIHNldC4KKyh1bnNldCBDRFBBVEgpID4vZGV2L251bGwgMj4mMSAmJiB1bnNldCBDRFBBVEgKKworaWYgdGVzdCAteiAiJGx0X0VDSE8iOyB0aGVuCisgIGlmIHRlc3QgIlgke2VjaG9fdGVzdF9zdHJpbmcrc2V0fSIgIT0gWHNldDsgdGhlbgorICAgICMgZmluZCBhIHN0cmluZyBhcyBsYXJnZSBhcyBwb3NzaWJsZSwgYXMgbG9uZyBhcyB0aGUgc2hlbGwgY2FuIGNvcGUgd2l0aCBpdAorICAgIGZvciBjbWQgaW4gJ3NlZCA1MHEgIlskXTAiJyAnc2VkIDIwcSAiWyRdMCInICdzZWQgMTBxICJbJF0wIicgJ3NlZCAycSAiWyRdMCInICdlY2hvIHRlc3QnOyBkbworICAgICAgIyBleHBlY3RlZCBzaXplczogbGVzcyB0aGFuIDJLYiwgMUtiLCA1MTIgYnl0ZXMsIDE2IGJ5dGVzLCAuLi4KKyAgICAgIGlmIHsgZWNob190ZXN0X3N0cmluZz1gZXZhbCAkY21kYDsgfSAyPi9kZXYvbnVsbCAmJgorCSB7IHRlc3QgIlgkZWNob190ZXN0X3N0cmluZyIgPSAiWCRlY2hvX3Rlc3Rfc3RyaW5nIjsgfSAyPi9kZXYvbnVsbAorICAgICAgdGhlbgorICAgICAgICBicmVhaworICAgICAgZmkKKyAgICBkb25lCisgIGZpCisKKyAgaWYgdGVzdCAiWGB7ICRFQ0hPICdcdCc7IH0gMj4vZGV2L251bGxgIiA9ICdYXHQnICYmCisgICAgIGVjaG9fdGVzdGluZ19zdHJpbmc9YHsgJEVDSE8gIiRlY2hvX3Rlc3Rfc3RyaW5nIjsgfSAyPi9kZXYvbnVsbGAgJiYKKyAgICAgdGVzdCAiWCRlY2hvX3Rlc3Rpbmdfc3RyaW5nIiA9ICJYJGVjaG9fdGVzdF9zdHJpbmciOyB0aGVuCisgICAgOgorICBlbHNlCisgICAgIyBUaGUgU29sYXJpcywgQUlYLCBhbmQgRGlnaXRhbCBVbml4IGRlZmF1bHQgZWNobyBwcm9ncmFtcyB1bnF1b3RlCisgICAgIyBiYWNrc2xhc2hlcy4gIFRoaXMgbWFrZXMgaXQgaW1wb3NzaWJsZSB0byBxdW90ZSBiYWNrc2xhc2hlcyB1c2luZworICAgICMgICBlY2hvICIkc29tZXRoaW5nIiB8IHNlZCAncy9cXC9cXFxcL2cnCisgICAgIworICAgICMgU28sIGZpcnN0IHdlIGxvb2sgZm9yIGEgd29ya2luZyBlY2hvIGluIHRoZSB1c2VyJ3MgUEFUSC4KKworICAgIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSRQQVRIX1NFUEFSQVRPUgorICAgIGZvciBkaXIgaW4gJFBBVEggL3Vzci91Y2I7IGRvCisgICAgICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgICAgIGlmICh0ZXN0IC1mICRkaXIvZWNobyB8fCB0ZXN0IC1mICRkaXIvZWNobyRhY19leGVleHQpICYmCisgICAgICAgICB0ZXN0ICJYYCgkZGlyL2VjaG8gJ1x0JykgMj4vZGV2L251bGxgIiA9ICdYXHQnICYmCisgICAgICAgICBlY2hvX3Rlc3Rpbmdfc3RyaW5nPWAoJGRpci9lY2hvICIkZWNob190ZXN0X3N0cmluZyIpIDI+L2Rldi9udWxsYCAmJgorICAgICAgICAgdGVzdCAiWCRlY2hvX3Rlc3Rpbmdfc3RyaW5nIiA9ICJYJGVjaG9fdGVzdF9zdHJpbmciOyB0aGVuCisgICAgICAgIEVDSE89IiRkaXIvZWNobyIKKyAgICAgICAgYnJlYWsKKyAgICAgIGZpCisgICAgZG9uZQorICAgIElGUz0iJGx0X3NhdmVfaWZzIgorCisgICAgaWYgdGVzdCAiWCRFQ0hPIiA9IFhlY2hvOyB0aGVuCisgICAgICAjIFdlIGRpZG4ndCBmaW5kIGEgYmV0dGVyIGVjaG8sIHNvIGxvb2sgZm9yIGFsdGVybmF0aXZlcy4KKyAgICAgIGlmIHRlc3QgIlhgeyBwcmludCAtciAnXHQnOyB9IDI+L2Rldi9udWxsYCIgPSAnWFx0JyAmJgorICAgICAgICAgZWNob190ZXN0aW5nX3N0cmluZz1geyBwcmludCAtciAiJGVjaG9fdGVzdF9zdHJpbmciOyB9IDI+L2Rldi9udWxsYCAmJgorICAgICAgICAgdGVzdCAiWCRlY2hvX3Rlc3Rpbmdfc3RyaW5nIiA9ICJYJGVjaG9fdGVzdF9zdHJpbmciOyB0aGVuCisgICAgICAgICMgVGhpcyBzaGVsbCBoYXMgYSBidWlsdGluIHByaW50IC1yIHRoYXQgZG9lcyB0aGUgdHJpY2suCisgICAgICAgIEVDSE89J3ByaW50IC1yJworICAgICAgZWxpZiB7IHRlc3QgLWYgL2Jpbi9rc2ggfHwgdGVzdCAtZiAvYmluL2tzaCRhY19leGVleHQ7IH0gJiYKKwkgICB0ZXN0ICJYJENPTkZJR19TSEVMTCIgIT0gWC9iaW4va3NoOyB0aGVuCisgICAgICAgICMgSWYgd2UgaGF2ZSBrc2gsIHRyeSBydW5uaW5nIGNvbmZpZ3VyZSBhZ2FpbiB3aXRoIGl0LgorICAgICAgICBPUklHSU5BTF9DT05GSUdfU0hFTEw9JHtDT05GSUdfU0hFTEwtL2Jpbi9zaH0KKyAgICAgICAgZXhwb3J0IE9SSUdJTkFMX0NPTkZJR19TSEVMTAorICAgICAgICBDT05GSUdfU0hFTEw9L2Jpbi9rc2gKKyAgICAgICAgZXhwb3J0IENPTkZJR19TSEVMTAorICAgICAgICBleGVjICRDT05GSUdfU0hFTEwgIlskXTAiIC0tbm8tcmVleGVjICR7MSsiWyRdQCJ9CisgICAgICBlbHNlCisgICAgICAgICMgVHJ5IHVzaW5nIHByaW50Zi4KKyAgICAgICAgRUNITz0ncHJpbnRmICVzXG4nCisgICAgICAgIGlmIHRlc3QgIlhgeyAkRUNITyAnXHQnOyB9IDI+L2Rldi9udWxsYCIgPSAnWFx0JyAmJgorCSAgIGVjaG9fdGVzdGluZ19zdHJpbmc9YHsgJEVDSE8gIiRlY2hvX3Rlc3Rfc3RyaW5nIjsgfSAyPi9kZXYvbnVsbGAgJiYKKwkgICB0ZXN0ICJYJGVjaG9fdGVzdGluZ19zdHJpbmciID0gIlgkZWNob190ZXN0X3N0cmluZyI7IHRoZW4KKwkgICMgQ29vbCwgcHJpbnRmIHdvcmtzCisJICA6CisgICAgICAgIGVsaWYgZWNob190ZXN0aW5nX3N0cmluZz1gKCRPUklHSU5BTF9DT05GSUdfU0hFTEwgIlskXTAiIC0tZmFsbGJhY2stZWNobyAnXHQnKSAyPi9kZXYvbnVsbGAgJiYKKwkgICAgIHRlc3QgIlgkZWNob190ZXN0aW5nX3N0cmluZyIgPSAnWFx0JyAmJgorCSAgICAgZWNob190ZXN0aW5nX3N0cmluZz1gKCRPUklHSU5BTF9DT05GSUdfU0hFTEwgIlskXTAiIC0tZmFsbGJhY2stZWNobyAiJGVjaG9fdGVzdF9zdHJpbmciKSAyPi9kZXYvbnVsbGAgJiYKKwkgICAgIHRlc3QgIlgkZWNob190ZXN0aW5nX3N0cmluZyIgPSAiWCRlY2hvX3Rlc3Rfc3RyaW5nIjsgdGhlbgorCSAgQ09ORklHX1NIRUxMPSRPUklHSU5BTF9DT05GSUdfU0hFTEwKKwkgIGV4cG9ydCBDT05GSUdfU0hFTEwKKwkgIFNIRUxMPSIkQ09ORklHX1NIRUxMIgorCSAgZXhwb3J0IFNIRUxMCisJICBFQ0hPPSIkQ09ORklHX1NIRUxMIFskXTAgLS1mYWxsYmFjay1lY2hvIgorICAgICAgICBlbGlmIGVjaG9fdGVzdGluZ19zdHJpbmc9YCgkQ09ORklHX1NIRUxMICJbJF0wIiAtLWZhbGxiYWNrLWVjaG8gJ1x0JykgMj4vZGV2L251bGxgICYmCisJICAgICB0ZXN0ICJYJGVjaG9fdGVzdGluZ19zdHJpbmciID0gJ1hcdCcgJiYKKwkgICAgIGVjaG9fdGVzdGluZ19zdHJpbmc9YCgkQ09ORklHX1NIRUxMICJbJF0wIiAtLWZhbGxiYWNrLWVjaG8gIiRlY2hvX3Rlc3Rfc3RyaW5nIikgMj4vZGV2L251bGxgICYmCisJICAgICB0ZXN0ICJYJGVjaG9fdGVzdGluZ19zdHJpbmciID0gIlgkZWNob190ZXN0X3N0cmluZyI7IHRoZW4KKwkgIEVDSE89IiRDT05GSUdfU0hFTEwgWyRdMCAtLWZhbGxiYWNrLWVjaG8iCisgICAgICAgIGVsc2UKKwkgICMgbWF5YmUgd2l0aCBhIHNtYWxsZXIgc3RyaW5nLi4uCisJICBwcmV2PToKKworCSAgZm9yIGNtZCBpbiAnZWNobyB0ZXN0JyAnc2VkIDJxICJbJF0wIicgJ3NlZCAxMHEgIlskXTAiJyAnc2VkIDIwcSAiWyRdMCInICdzZWQgNTBxICJbJF0wIic7IGRvCisJICAgIGlmIHsgdGVzdCAiWCRlY2hvX3Rlc3Rfc3RyaW5nIiA9ICJYYGV2YWwgJGNtZGAiOyB9IDI+L2Rldi9udWxsCisJICAgIHRoZW4KKwkgICAgICBicmVhaworCSAgICBmaQorCSAgICBwcmV2PSIkY21kIgorCSAgZG9uZQorCisJICBpZiB0ZXN0ICIkcHJldiIgIT0gJ3NlZCA1MHEgIlskXTAiJzsgdGhlbgorCSAgICBlY2hvX3Rlc3Rfc3RyaW5nPWBldmFsICRwcmV2YAorCSAgICBleHBvcnQgZWNob190ZXN0X3N0cmluZworCSAgICBleGVjICR7T1JJR0lOQUxfQ09ORklHX1NIRUxMLSR7Q09ORklHX1NIRUxMLS9iaW4vc2h9fSAiWyRdMCIgJHsxKyJbJF1AIn0KKwkgIGVsc2UKKwkgICAgIyBPb3BzLiAgV2UgbG9zdCBjb21wbGV0ZWx5LCBzbyBqdXN0IHN0aWNrIHdpdGggZWNoby4KKwkgICAgRUNITz1lY2hvCisJICBmaQorICAgICAgICBmaQorICAgICAgZmkKKyAgICBmaQorICBmaQorZmkKKworIyBDb3B5IGVjaG8gYW5kIHF1b3RlIHRoZSBjb3B5IHN1aXRhYmx5IGZvciBwYXNzaW5nIHRvIGxpYnRvb2wgZnJvbQorIyB0aGUgTWFrZWZpbGUsIGluc3RlYWQgb2YgcXVvdGluZyB0aGUgb3JpZ2luYWwsIHdoaWNoIGlzIHVzZWQgbGF0ZXIuCitsdF9FQ0hPPSRFQ0hPCitpZiB0ZXN0ICJYJGx0X0VDSE8iID0gIlgkQ09ORklHX1NIRUxMIFskXTAgLS1mYWxsYmFjay1lY2hvIjsgdGhlbgorICAgbHRfRUNITz0iJENPTkZJR19TSEVMTCBcXFwkXFskXTAgLS1mYWxsYmFjay1lY2hvIgorZmkKKworQUNfU1VCU1QobHRfRUNITykKK10pCitfTFRfREVDTChbXSwgW1NIRUxMXSwgWzFdLCBbU2hlbGwgdG8gdXNlIHdoZW4gaW52b2tpbmcgc2hlbGwgc2NyaXB0c10pCitfTFRfREVDTChbXSwgW0VDSE9dLCBbMV0sCisgICAgW0FuIGVjaG8gcHJvZ3JhbSB0aGF0IGRvZXMgbm90IGludGVycHJldCBiYWNrc2xhc2hlc10pCitdKSMgX0xUX1BST0dfRUNIT19CQUNLU0xBU0gKKworCisjIF9MVF9FTkFCTEVfTE9DSworIyAtLS0tLS0tLS0tLS0tLS0KK200X2RlZnVuKFtfTFRfRU5BQkxFX0xPQ0tdLAorW0FDX0FSR19FTkFCTEUoW2xpYnRvb2wtbG9ja10sCisgIFtBU19IRUxQX1NUUklORyhbLS1kaXNhYmxlLWxpYnRvb2wtbG9ja10sCisgICAgW2F2b2lkIGxvY2tpbmcgKG1pZ2h0IGJyZWFrIHBhcmFsbGVsIGJ1aWxkcyldKV0pCit0ZXN0ICJ4JGVuYWJsZV9saWJ0b29sX2xvY2siICE9IHhubyAmJiBlbmFibGVfbGlidG9vbF9sb2NrPXllcworCisjIFNvbWUgZmxhZ3MgbmVlZCB0byBiZSBwcm9wYWdhdGVkIHRvIHRoZSBjb21waWxlciBvciBsaW5rZXIgZm9yIGdvb2QKKyMgbGlidG9vbCBzdXBwb3J0LgorY2FzZSAkaG9zdCBpbgoraWE2NC0qLWhwdXgqKQorICAjIEZpbmQgb3V0IHdoaWNoIEFCSSB3ZSBhcmUgdXNpbmcuCisgIGVjaG8gJ2ludCBpOycgPiBjb25mdGVzdC4kYWNfZXh0CisgIGlmIEFDX1RSWV9FVkFMKGFjX2NvbXBpbGUpOyB0aGVuCisgICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC4kYWNfb2JqZXh0YCBpbgorICAgICAgKkVMRi0zMiopCisJSFBVWF9JQTY0X01PREU9IjMyIgorCTs7CisgICAgICAqRUxGLTY0KikKKwlIUFVYX0lBNjRfTU9ERT0iNjQiCisJOzsKKyAgICBlc2FjCisgIGZpCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgOzsKKyotKi1pcml4NiopCisgICMgRmluZCBvdXQgd2hpY2ggQUJJIHdlIGFyZSB1c2luZy4KKyAgZWNobyAnWyNdbGluZSBfX29saW5lX18gImNvbmZpZ3VyZSInID4gY29uZnRlc3QuJGFjX2V4dAorICBpZiBBQ19UUllfRVZBTChhY19jb21waWxlKTsgdGhlbgorICAgIGlmIHRlc3QgIiRsdF9jdl9wcm9nX2dudV9sZCIgPSB5ZXM7IHRoZW4KKyAgICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3QuJGFjX29iamV4dGAgaW4KKwkqMzItYml0KikKKwkgIExEPSIke0xELWxkfSAtbWVsZjMyYnNtaXAiCisJICA7OworCSpOMzIqKQorCSAgTEQ9IiR7TEQtbGR9IC1tZWxmMzJibWlwbjMyIgorCSAgOzsKKwkqNjQtYml0KikKKwkgIExEPSIke0xELWxkfSAtbWVsZjY0Ym1pcCIKKwk7OworICAgICAgZXNhYworICAgIGVsc2UKKyAgICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3QuJGFjX29iamV4dGAgaW4KKwkqMzItYml0KikKKwkgIExEPSIke0xELWxkfSAtMzIiCisJICA7OworCSpOMzIqKQorCSAgTEQ9IiR7TEQtbGR9IC1uMzIiCisJICA7OworCSo2NC1iaXQqKQorCSAgTEQ9IiR7TEQtbGR9IC02NCIKKwkgIDs7CisgICAgICBlc2FjCisgICAgZmkKKyAgZmkKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICA7OworCit4ODZfNjQtKmtmcmVlYnNkKi1nbnV8eDg2XzY0LSpsaW51eCp8cHBjKi0qbGludXgqfHBvd2VycGMqLSpsaW51eCp8IFwKK3MzOTAqLSpsaW51eCp8czM5MCotKnRwZip8c3BhcmMqLSpsaW51eCopCisgICMgRmluZCBvdXQgd2hpY2ggQUJJIHdlIGFyZSB1c2luZy4KKyAgZWNobyAnaW50IGk7JyA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgaWYgQUNfVFJZX0VWQUwoYWNfY29tcGlsZSk7IHRoZW4KKyAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0Lm9gIGluCisgICAgICAqMzItYml0KikKKwljYXNlICRob3N0IGluCisJICB4ODZfNjQtKmtmcmVlYnNkKi1nbnUpCisJICAgIExEPSIke0xELWxkfSAtbSBlbGZfaTM4Nl9mYnNkIgorCSAgICA7OworCSAgeDg2XzY0LSpsaW51eCopCisJICAgIExEPSIke0xELWxkfSAtbSBlbGZfaTM4NiIKKwkgICAgOzsKKwkgIHBwYzY0LSpsaW51eCp8cG93ZXJwYzY0LSpsaW51eCopCisJICAgIExEPSIke0xELWxkfSAtbSBlbGYzMnBwY2xpbnV4IgorCSAgICA7OworCSAgczM5MHgtKmxpbnV4KikKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZl9zMzkwIgorCSAgICA7OworCSAgc3BhcmM2NC0qbGludXgqKQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmMzJfc3BhcmMiCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICAqNjQtYml0KikKKwljYXNlICRob3N0IGluCisJICB4ODZfNjQtKmtmcmVlYnNkKi1nbnUpCisJICAgIExEPSIke0xELWxkfSAtbSBlbGZfeDg2XzY0X2Zic2QiCisJICAgIDs7CisJICB4ODZfNjQtKmxpbnV4KikKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZl94ODZfNjQiCisJICAgIDs7CisJICBwcGMqLSpsaW51eCp8cG93ZXJwYyotKmxpbnV4KikKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjY0cHBjIgorCSAgICA7OworCSAgczM5MCotKmxpbnV4KnxzMzkwKi0qdHBmKikKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjY0X3MzOTAiCisJICAgIDs7CisJICBzcGFyYyotKmxpbnV4KikKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjY0X3NwYXJjIgorCSAgICA7OworCWVzYWMKKwk7OworICAgIGVzYWMKKyAgZmkKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICA7OworCisqLSotc2NvMy4ydjUqKQorICAjIE9uIFNDTyBPcGVuU2VydmVyIDUsIHdlIG5lZWQgLWJlbGYgdG8gZ2V0IGZ1bGwtZmVhdHVyZWQgYmluYXJpZXMuCisgIFNBVkVfQ0ZMQUdTPSIkQ0ZMQUdTIgorICBDRkxBR1M9IiRDRkxBR1MgLWJlbGYiCisgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIHRoZSBDIGNvbXBpbGVyIG5lZWRzIC1iZWxmXSwgbHRfY3ZfY2NfbmVlZHNfYmVsZiwKKyAgICBbQUNfTEFOR19QVVNIKEMpCisgICAgIEFDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1tdXSxbW11dKV0sW2x0X2N2X2NjX25lZWRzX2JlbGY9eWVzXSxbbHRfY3ZfY2NfbmVlZHNfYmVsZj1ub10pCisgICAgIEFDX0xBTkdfUE9QXSkKKyAgaWYgdGVzdCB4IiRsdF9jdl9jY19uZWVkc19iZWxmIiAhPSB4InllcyI7IHRoZW4KKyAgICAjIHRoaXMgaXMgcHJvYmFibHkgZ2NjIDIuOC4wLCBlZ2NzIDEuMCBvciBuZXdlcjsgbm8gbmVlZCBmb3IgLWJlbGYKKyAgICBDRkxBR1M9IiRTQVZFX0NGTEFHUyIKKyAgZmkKKyAgOzsKK3NwYXJjKi0qc29sYXJpcyopCisgICMgRmluZCBvdXQgd2hpY2ggQUJJIHdlIGFyZSB1c2luZy4KKyAgZWNobyAnaW50IGk7JyA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgaWYgQUNfVFJZX0VWQUwoYWNfY29tcGlsZSk7IHRoZW4KKyAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0Lm9gIGluCisgICAgKjY0LWJpdCopCisgICAgICBjYXNlICRsdF9jdl9wcm9nX2dudV9sZCBpbgorICAgICAgeWVzKikgTEQ9IiR7TEQtbGR9IC1tIGVsZjY0X3NwYXJjIiA7OworICAgICAgKikKKwlpZiAke0xELWxkfSAtNjQgLXIgLW8gY29uZnRlc3QyLm8gY29uZnRlc3QubyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKwkgIExEPSIke0xELWxkfSAtNjQiCisJZmkKKwk7OworICAgICAgZXNhYworICAgICAgOzsKKyAgICBlc2FjCisgIGZpCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgOzsKK2VzYWMKKworbmVlZF9sb2Nrcz0iJGVuYWJsZV9saWJ0b29sX2xvY2siCitdKSMgX0xUX0VOQUJMRV9MT0NLCisKKworIyBfTFRfQ01EX09MRF9BUkNISVZFCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZnVuKFtfTFRfQ01EX09MRF9BUkNISVZFXSwKK1tBQ19DSEVDS19UT09MKEFSLCBhciwgZmFsc2UpCit0ZXN0IC16ICIkQVIiICYmIEFSPWFyCit0ZXN0IC16ICIkQVJfRkxBR1MiICYmIEFSX0ZMQUdTPWNydQorX0xUX0RFQ0woW10sIFtBUl0sIFsxXSwgW1RoZSBhcmNoaXZlcl0pCitfTFRfREVDTChbXSwgW0FSX0ZMQUdTXSwgWzFdKQorCitBQ19DSEVDS19UT09MKFNUUklQLCBzdHJpcCwgOikKK3Rlc3QgLXogIiRTVFJJUCIgJiYgU1RSSVA9OgorX0xUX0RFQ0woW10sIFtTVFJJUF0sIFsxXSwgW0Egc3ltYm9sIHN0cmlwcGluZyBwcm9ncmFtXSkKKworQUNfQ0hFQ0tfVE9PTChSQU5MSUIsIHJhbmxpYiwgOikKK3Rlc3QgLXogIiRSQU5MSUIiICYmIFJBTkxJQj06CitfTFRfREVDTChbXSwgW1JBTkxJQl0sIFsxXSwKKyAgICBbQ29tbWFuZHMgdXNlZCB0byBpbnN0YWxsIGFuIG9sZC1zdHlsZSBhcmNoaXZlXSkKKworIyBEZXRlcm1pbmUgY29tbWFuZHMgdG8gY3JlYXRlIG9sZC1zdHlsZSBzdGF0aWMgYXJjaGl2ZXMuCitvbGRfYXJjaGl2ZV9jbWRzPSckQVIgJEFSX0ZMQUdTICRvbGRsaWIkb2xkb2JqcycKK29sZF9wb3N0aW5zdGFsbF9jbWRzPSdjaG1vZCA2NDQgJG9sZGxpYicKK29sZF9wb3N0dW5pbnN0YWxsX2NtZHM9CisKK2lmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgb3BlbmJzZCopCisgICAgb2xkX3Bvc3RpbnN0YWxsX2NtZHM9IiRvbGRfcG9zdGluc3RhbGxfY21kc35cJFJBTkxJQiAtdCBcJG9sZGxpYiIKKyAgICA7OworICAqKQorICAgIG9sZF9wb3N0aW5zdGFsbF9jbWRzPSIkb2xkX3Bvc3RpbnN0YWxsX2NtZHN+XCRSQU5MSUIgXCRvbGRsaWIiCisgICAgOzsKKyAgZXNhYworICBvbGRfYXJjaGl2ZV9jbWRzPSIkb2xkX2FyY2hpdmVfY21kc35cJFJBTkxJQiBcJG9sZGxpYiIKK2ZpCitfTFRfREVDTChbXSwgW29sZF9wb3N0aW5zdGFsbF9jbWRzXSwgWzJdKQorX0xUX0RFQ0woW10sIFtvbGRfcG9zdHVuaW5zdGFsbF9jbWRzXSwgWzJdKQorX0xUX1RBR0RFQ0woW10sIFtvbGRfYXJjaGl2ZV9jbWRzXSwgWzJdLAorICAgIFtDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGFuIG9sZC1zdHlsZSBhcmNoaXZlXSkKK10pIyBfTFRfQ01EX09MRF9BUkNISVZFCisKKworIyBfTFRfQ09NUElMRVJfT1BUSU9OKE1FU1NBR0UsIFZBUklBQkxFLU5BTUUsIEZMQUdTLAorIwkJW09VVFBVVC1GSUxFXSwgW0FDVElPTi1TVUNDRVNTXSwgW0FDVElPTi1GQUlMVVJFXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDaGVjayB3aGV0aGVyIHRoZSBnaXZlbiBjb21waWxlciBvcHRpb24gd29ya3MKK0FDX0RFRlVOKFtfTFRfQ09NUElMRVJfT1BUSU9OXSwKK1ttNF9yZXF1aXJlKFtfTFRfRklMRVVUSUxTX0RFRkFVTFRTXSlkbmwKK200X3JlcXVpcmUoW19MVF9ERUNMX1NFRF0pZG5sCitBQ19DQUNIRV9DSEVDSyhbJDFdLCBbJDJdLAorICBbJDI9bm8KKyAgIG00X2lmKFskNF0sICwgW2FjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dF0sIFthY19vdXRmaWxlPSQ0XSkKKyAgIGVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAorICAgbHRfY29tcGlsZXJfZmxhZz0iJDMiCisgICAjIEluc2VydCB0aGUgb3B0aW9uIGVpdGhlciAoMSkgYWZ0ZXIgdGhlIGxhc3QgKkZMQUdTIHZhcmlhYmxlLCBvcgorICAgIyAoMikgYmVmb3JlIGEgd29yZCBjb250YWluaW5nICJjb25mdGVzdC4iLCBvciAoMykgYXQgdGhlIGVuZC4KKyAgICMgTm90ZSB0aGF0ICRhY19jb21waWxlIGl0c2VsZiBkb2VzIG5vdCBjb250YWluIGJhY2tzbGFzaGVzIGFuZCBiZWdpbnMKKyAgICMgd2l0aCBhIGRvbGxhciBzaWduIChub3QgYSBoeXBoZW4pLCBzbyB0aGUgZWNobyBzaG91bGQgd29yayBjb3JyZWN0bHkuCisgICAjIFRoZSBvcHRpb24gaXMgcmVmZXJlbmNlZCB2aWEgYSB2YXJpYWJsZSB0byBhdm9pZCBjb25mdXNpbmcgc2VkLgorICAgbHRfY29tcGlsZT1gZWNobyAiJGFjX2NvbXBpbGUiIHwgJFNFRCBcCisgICAtZSAnczouKkZMQUdTfVx7MCwxXH0gOiYkbHRfY29tcGlsZXJfZmxhZyA6OyB0JyBcCisgICAtZSAnczogW1teIF1dKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKKyAgIC1lICdzOiQ6ICRsdF9jb21waWxlcl9mbGFnOidgCisgICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6X19vbGluZV9fOiAkbHRfY29tcGlsZVwiIiA+JkFTX01FU1NBR0VfTE9HX0ZEKQorICAgKGV2YWwgIiRsdF9jb21waWxlIiAyPmNvbmZ0ZXN0LmVycikKKyAgIGFjX3N0YXR1cz0kPworICAgY2F0IGNvbmZ0ZXN0LmVyciA+JkFTX01FU1NBR0VfTE9HX0ZECisgICBlY2hvICIkYXNfbWU6X19vbGluZV9fOiBcJD8gPSAkYWNfc3RhdHVzIiA+JkFTX01FU1NBR0VfTE9HX0ZECisgICBpZiAoZXhpdCAkYWNfc3RhdHVzKSAmJiB0ZXN0IC1zICIkYWNfb3V0ZmlsZSI7IHRoZW4KKyAgICAgIyBUaGUgY29tcGlsZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKKyAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzIG90aGVyIHRoYW4gdGhlIHVzdWFsIG91dHB1dC4KKyAgICAgJEVDSE8gIlgkX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlIiB8ICRYc2VkIC1lICcvXiQvZCcgPmNvbmZ0ZXN0LmV4cAorICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjIKKyAgICAgaWYgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVyMiB8fCBkaWZmIGNvbmZ0ZXN0LmV4cCBjb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgICQyPXllcworICAgICBmaQorICAgZmkKKyAgICRSTSBjb25mdGVzdCoKK10pCisKK2lmIHRlc3QgeCJbJF0kMiIgPSB4eWVzOyB0aGVuCisgICAgbTRfaWYoWyQ1XSwgLCA6LCBbJDVdKQorZWxzZQorICAgIG00X2lmKFskNl0sICwgOiwgWyQ2XSkKK2ZpCitdKSMgX0xUX0NPTVBJTEVSX09QVElPTgorCisjIE9sZCBuYW1lOgorQVVfQUxJQVMoW0FDX0xJQlRPT0xfQ09NUElMRVJfT1BUSU9OXSwgW19MVF9DT01QSUxFUl9PUFRJT05dKQorZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtBQ19MSUJUT09MX0NPTVBJTEVSX09QVElPTl0sIFtdKQorCisKKyMgX0xUX0xJTktFUl9PUFRJT04oTUVTU0FHRSwgVkFSSUFCTEUtTkFNRSwgRkxBR1MsCisjICAgICAgICAgICAgICAgICAgW0FDVElPTi1TVUNDRVNTXSwgW0FDVElPTi1GQUlMVVJFXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDaGVjayB3aGV0aGVyIHRoZSBnaXZlbiBsaW5rZXIgb3B0aW9uIHdvcmtzCitBQ19ERUZVTihbX0xUX0xJTktFUl9PUFRJT05dLAorW200X3JlcXVpcmUoW19MVF9GSUxFVVRJTFNfREVGQVVMVFNdKWRubAorbTRfcmVxdWlyZShbX0xUX0RFQ0xfU0VEXSlkbmwKK0FDX0NBQ0hFX0NIRUNLKFskMV0sIFskMl0sCisgIFskMj1ubworICAgc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKKyAgIExERkxBR1M9IiRMREZMQUdTICQzIgorICAgZWNobyAiJGx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CisgICBpZiAoZXZhbCAkYWNfbGluayAyPmNvbmZ0ZXN0LmVycikgJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KKyAgICAgIyBUaGUgbGlua2VyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCisgICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncworICAgICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgICAgICMgQXBwZW5kIGFueSBlcnJvcnMgdG8gdGhlIGNvbmZpZy5sb2cuCisgICAgICAgY2F0IGNvbmZ0ZXN0LmVyciAxPiZBU19NRVNTQUdFX0xPR19GRAorICAgICAgICRFQ0hPICJYJF9sdF9saW5rZXJfYm9pbGVycGxhdGUiIHwgJFhzZWQgLWUgJy9eJC9kJyA+IGNvbmZ0ZXN0LmV4cAorICAgICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMgorICAgICAgIGlmIGRpZmYgY29uZnRlc3QuZXhwIGNvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCisgICAgICAgICAkMj15ZXMKKyAgICAgICBmaQorICAgICBlbHNlCisgICAgICAgJDI9eWVzCisgICAgIGZpCisgICBmaQorICAgJFJNIC1yIGNvbmZ0ZXN0KgorICAgTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKK10pCisKK2lmIHRlc3QgeCJbJF0kMiIgPSB4eWVzOyB0aGVuCisgICAgbTRfaWYoWyQ0XSwgLCA6LCBbJDRdKQorZWxzZQorICAgIG00X2lmKFskNV0sICwgOiwgWyQ1XSkKK2ZpCitdKSMgX0xUX0xJTktFUl9PUFRJT04KKworIyBPbGQgbmFtZToKK0FVX0FMSUFTKFtBQ19MSUJUT09MX0xJTktFUl9PUFRJT05dLCBbX0xUX0xJTktFUl9PUFRJT05dKQorZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtBQ19MSUJUT09MX0xJTktFUl9PUFRJT05dLCBbXSkKKworCisjIExUX0NNRF9NQVhfTEVOCisjLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbTFRfQ01EX01BWF9MRU5dLAorW0FDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSlkbmwKKyMgZmluZCB0aGUgbWF4aW11bSBsZW5ndGggb2YgY29tbWFuZCBsaW5lIGFyZ3VtZW50cworQUNfTVNHX0NIRUNLSU5HKFt0aGUgbWF4aW11bSBsZW5ndGggb2YgY29tbWFuZCBsaW5lIGFyZ3VtZW50c10pCitBQ19DQUNIRV9WQUwoW2x0X2N2X3N5c19tYXhfY21kX2xlbl0sIFtkbmwKKyAgaT0wCisgIHRlc3RzdHJpbmc9IkFCQ0QiCisKKyAgY2FzZSAkYnVpbGRfb3MgaW4KKyAgbXNkb3NkamdwcCopCisgICAgIyBPbiBESkdQUCwgdGhpcyB0ZXN0IGNhbiBibG93IHVwIHByZXR0eSBiYWRseSBkdWUgdG8gcHJvYmxlbXMgaW4gbGliYworICAgICMgKGFueSBzaW5nbGUgYXJndW1lbnQgZXhjZWVkaW5nIDIwMDAgYnl0ZXMgY2F1c2VzIGEgYnVmZmVyIG92ZXJydW4KKyAgICAjIGR1cmluZyBnbG9iIGV4cGFuc2lvbikuICBFdmVuIGlmIGl0IHdlcmUgZml4ZWQsIHRoZSByZXN1bHQgb2YgdGhpcworICAgICMgY2hlY2sgd291bGQgYmUgbGFyZ2VyIHRoYW4gaXQgc2hvdWxkIGJlLgorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0xMjI4ODsgICAgIyAxMksgaXMgYWJvdXQgcmlnaHQKKyAgICA7OworCisgIGdudSopCisgICAgIyBVbmRlciBHTlUgSHVyZCwgdGhpcyB0ZXN0IGlzIG5vdCByZXF1aXJlZCBiZWNhdXNlIHRoZXJlIGlzCisgICAgIyBubyBsaW1pdCB0byB0aGUgbGVuZ3RoIG9mIGNvbW1hbmQgbGluZSBhcmd1bWVudHMuCisgICAgIyBMaWJ0b29sIHdpbGwgaW50ZXJwcmV0IC0xIGFzIG5vIGxpbWl0IHdoYXRzb2V2ZXIKKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49LTE7CisgICAgOzsKKworICBjeWd3aW4qIHwgbWluZ3cqIHwgY2VnY2MqKQorICAgICMgT24gV2luOXgvTUUsIHRoaXMgdGVzdCBibG93cyB1cCAtLSBpdCBzdWNjZWVkcywgYnV0IHRha2VzCisgICAgIyBhYm91dCA1IG1pbnV0ZXMgYXMgdGhlIHRlc3RzdHJpbmcgZ3Jvd3MgZXhwb25lbnRpYWxseS4KKyAgICAjIFdvcnNlLCBzaW5jZSA5eC9NRSBhcmUgbm90IHByZS1lbXB0aXZlbHkgbXVsdGl0YXNraW5nLAorICAgICMgeW91IGVuZCB1cCB3aXRoIGEgImZyb3plbiIgY29tcHV0ZXIsIGV2ZW4gdGhvdWdoIHdpdGggcGF0aWVuY2UKKyAgICAjIHRoZSB0ZXN0IGV2ZW50dWFsbHkgc3VjY2VlZHMgKHdpdGggYSBtYXggbGluZSBsZW5ndGggb2YgMjU2aykuCisgICAgIyBJbnN0ZWFkLCBsZXQncyBqdXN0IHB1bnQ6IHVzZSB0aGUgbWluaW11bSBsaW5lbGVuZ3RoIHJlcG9ydGVkIGJ5CisgICAgIyBhbGwgb2YgdGhlIHN1cHBvcnRlZCBwbGF0Zm9ybXM6IDgxOTIgKG9uIE5ULzJLL1hQKS4KKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49ODE5MjsKKyAgICA7OworCisgIGFtaWdhb3MqKQorICAgICMgT24gQW1pZ2FPUyB3aXRoIHBka3NoLCB0aGlzIHRlc3QgdGFrZXMgaG91cnMsIGxpdGVyYWxseS4KKyAgICAjIFNvIHdlIGp1c3QgcHVudCBhbmQgdXNlIGEgbWluaW11bSBsaW5lIGxlbmd0aCBvZiA4MTkyLgorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj04MTkyOworICAgIDs7CisKKyAgbmV0YnNkKiB8IGZyZWVic2QqIHwgb3BlbmJzZCogfCBkYXJ3aW4qIHwgZHJhZ29uZmx5KikKKyAgICAjIFRoaXMgaGFzIGJlZW4gYXJvdW5kIHNpbmNlIDM4NkJTRCwgYXQgbGVhc3QuICBMaWtlbHkgZnVydGhlci4KKyAgICBpZiB0ZXN0IC14IC9zYmluL3N5c2N0bDsgdGhlbgorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWAvc2Jpbi9zeXNjdGwgLW4ga2Vybi5hcmdtYXhgCisgICAgZWxpZiB0ZXN0IC14IC91c3Ivc2Jpbi9zeXNjdGw7IHRoZW4KKyAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gL3Vzci9zYmluL3N5c2N0bCAtbiBrZXJuLmFyZ21heGAKKyAgICBlbHNlCisgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49NjU1MzYJIyB1c2FibGUgZGVmYXVsdCBmb3IgYWxsIEJTRHMKKyAgICBmaQorICAgICMgQW5kIGFkZCBhIHNhZmV0eSB6b25lCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gXC8gNGAKKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGV4cHIgJGx0X2N2X3N5c19tYXhfY21kX2xlbiBcKiAzYAorICAgIDs7CisKKyAgaW50ZXJpeCopCisgICAgIyBXZSBrbm93IHRoZSB2YWx1ZSAyNjIxNDQgYW5kIGhhcmRjb2RlIGl0IHdpdGggYSBzYWZldHkgem9uZSAobGlrZSBCU0QpCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTE5NjYwOAorICAgIDs7CisKKyAgb3NmKikKKyAgICAjIERyLiBIYW5zIEVra2VoYXJkIFBsZXNzZXIgcmVwb3J0cyBzZWVpbmcgYSBrZXJuZWwgcGFuaWMgcnVubmluZyBjb25maWd1cmUKKyAgICAjIGR1ZSB0byB0aGlzIHRlc3Qgd2hlbiBleGVjX2Rpc2FibGVfYXJnX2xpbWl0IGlzIDEgb24gVHJ1NjQuIEl0IGlzIG5vdAorICAgICMgbmljZSB0byBjYXVzZSBrZXJuZWwgcGFuaWNzIHNvIGxldHMgYXZvaWQgdGhlIGxvb3AgYmVsb3cuCisgICAgIyBGaXJzdCBzZXQgYSByZWFzb25hYmxlIGRlZmF1bHQuCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTE2Mzg0CisgICAgIworICAgIGlmIHRlc3QgLXggL3NiaW4vc3lzY29uZmlnOyB0aGVuCisgICAgICBjYXNlIGAvc2Jpbi9zeXNjb25maWcgLXEgcHJvYyBleGVjX2Rpc2FibGVfYXJnX2xpbWl0YCBpbgorICAgICAgICAqMSopIGx0X2N2X3N5c19tYXhfY21kX2xlbj0tMSA7OworICAgICAgZXNhYworICAgIGZpCisgICAgOzsKKyAgc2NvMy4ydjUqKQorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0xMDI0MDAKKyAgICA7OworICBzeXN2NSogfCBzY281djYqIHwgc3lzdjQuMnV3MiopCisgICAga2FyZ21heD1gZ3JlcCBBUkdfTUFYIC9ldGMvY29uZi9jZi5kL3N0dW5lIDI+L2Rldi9udWxsYAorICAgIGlmIHRlc3QgLW4gIiRrYXJnbWF4IjsgdGhlbgorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBlY2hvICRrYXJnbWF4IHwgc2VkICdzLy4qW1sJIF1dLy8nYAorICAgIGVsc2UKKyAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0zMjc2OAorICAgIGZpCisgICAgOzsKKyAgKikKKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YChnZXRjb25mIEFSR19NQVgpIDI+IC9kZXYvbnVsbGAKKyAgICBpZiB0ZXN0IC1uICIkbHRfY3Zfc3lzX21heF9jbWRfbGVuIjsgdGhlbgorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gXC8gNGAKKyAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIFwqIDNgCisgICAgZWxzZQorICAgICAgIyBNYWtlIHRlc3RzdHJpbmcgYSBsaXR0bGUgYmlnZ2VyIGJlZm9yZSB3ZSBkbyBhbnl0aGluZyB3aXRoIGl0LgorICAgICAgIyBhIDFLIHN0cmluZyBzaG91bGQgYmUgYSByZWFzb25hYmxlIHN0YXJ0LgorICAgICAgZm9yIGkgaW4gMSAyIDMgNCA1IDYgNyA4IDsgZG8KKyAgICAgICAgdGVzdHN0cmluZz0kdGVzdHN0cmluZyR0ZXN0c3RyaW5nCisgICAgICBkb25lCisgICAgICBTSEVMTD0ke1NIRUxMLSR7Q09ORklHX1NIRUxMLS9iaW4vc2h9fQorICAgICAgIyBJZiB0ZXN0IGlzIG5vdCBhIHNoZWxsIGJ1aWx0LWluLCB3ZSdsbCBwcm9iYWJseSBlbmQgdXAgY29tcHV0aW5nIGEKKyAgICAgICMgbWF4aW11bSBsZW5ndGggdGhhdCBpcyBvbmx5IGhhbGYgb2YgdGhlIGFjdHVhbCBtYXhpbXVtIGxlbmd0aCwgYnV0CisgICAgICAjIHdlIGNhbid0IHRlbGwuCisgICAgICB3aGlsZSB7IHRlc3QgIlgiYCRTSEVMTCBbJF0wIC0tZmFsbGJhY2stZWNobyAiWCR0ZXN0c3RyaW5nJHRlc3RzdHJpbmciIDI+L2Rldi9udWxsYCBcCisJICAgICAgICAgPSAiWFgkdGVzdHN0cmluZyR0ZXN0c3RyaW5nIjsgfSA+L2Rldi9udWxsIDI+JjEgJiYKKwkgICAgICB0ZXN0ICRpICE9IDE3ICMgMS8yIE1CIHNob3VsZCBiZSBlbm91Z2gKKyAgICAgIGRvCisgICAgICAgIGk9YGV4cHIgJGkgKyAxYAorICAgICAgICB0ZXN0c3RyaW5nPSR0ZXN0c3RyaW5nJHRlc3RzdHJpbmcKKyAgICAgIGRvbmUKKyAgICAgICMgT25seSBjaGVjayB0aGUgc3RyaW5nIGxlbmd0aCBvdXRzaWRlIHRoZSBsb29wLgorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICJYJHRlc3RzdHJpbmciIDogIi4qIiAyPiYxYAorICAgICAgdGVzdHN0cmluZz0KKyAgICAgICMgQWRkIGEgc2lnbmlmaWNhbnQgc2FmZXR5IGZhY3RvciBiZWNhdXNlIEMrKyBjb21waWxlcnMgY2FuIHRhY2sgb24KKyAgICAgICMgbWFzc2l2ZSBhbW91bnRzIG9mIGFkZGl0aW9uYWwgYXJndW1lbnRzIGJlZm9yZSBwYXNzaW5nIHRoZW0gdG8gdGhlCisgICAgICAjIGxpbmtlci4gIEl0IGFwcGVhcnMgYXMgdGhvdWdoIDEvMiBpcyBhIHVzYWJsZSB2YWx1ZS4KKyAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIFwvIDJgCisgICAgZmkKKyAgICA7OworICBlc2FjCitdKQoraWYgdGVzdCAtbiAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIDsgdGhlbgorICBBQ19NU0dfUkVTVUxUKCRsdF9jdl9zeXNfbWF4X2NtZF9sZW4pCitlbHNlCisgIEFDX01TR19SRVNVTFQobm9uZSkKK2ZpCittYXhfY21kX2xlbj0kbHRfY3Zfc3lzX21heF9jbWRfbGVuCitfTFRfREVDTChbXSwgW21heF9jbWRfbGVuXSwgWzBdLAorICAgIFtXaGF0IGlzIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBhIGNvbW1hbmQ/XSkKK10pIyBMVF9DTURfTUFYX0xFTgorCisjIE9sZCBuYW1lOgorQVVfQUxJQVMoW0FDX0xJQlRPT0xfU1lTX01BWF9DTURfTEVOXSwgW0xUX0NNRF9NQVhfTEVOXSkKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbQUNfTElCVE9PTF9TWVNfTUFYX0NNRF9MRU5dLCBbXSkKKworCisjIF9MVF9IRUFERVJfRExGQ04KKyMgLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmdW4oW19MVF9IRUFERVJfRExGQ05dLAorW0FDX0NIRUNLX0hFQURFUlMoW2RsZmNuLmhdLCBbXSwgW10sIFtBQ19JTkNMVURFU19ERUZBVUxUXSlkbmwKK10pIyBfTFRfSEVBREVSX0RMRkNOCisKKworIyBfTFRfVFJZX0RMT1BFTl9TRUxGIChBQ1RJT04tSUYtVFJVRSwgQUNUSU9OLUlGLVRSVUUtVy1VU0NPUkUsCisjICAgICAgICAgICAgICAgICAgICAgIEFDVElPTi1JRi1GQUxTRSwgQUNUSU9OLUlGLUNST1NTLUNPTVBJTElORykKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmdW4oW19MVF9UUllfRExPUEVOX1NFTEZdLAorW200X3JlcXVpcmUoW19MVF9IRUFERVJfRExGQ05dKWRubAoraWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgorICBbJDRdCitlbHNlCisgIGx0X2RsdW5rbm93bj0wOyBsdF9kbG5vX3VzY29yZT0xOyBsdF9kbG5lZWRfdXNjb3JlPTIKKyAgbHRfc3RhdHVzPSRsdF9kbHVua25vd24KKyAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PF9MVF9FT0YKK1sjbGluZSBfX29saW5lX18gImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCisjaWYgSEFWRV9ETEZDTl9ICisjaW5jbHVkZSA8ZGxmY24uaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2lmZGVmIFJUTERfR0xPQkFMCisjICBkZWZpbmUgTFRfRExHTE9CQUwJCVJUTERfR0xPQkFMCisjZWxzZQorIyAgaWZkZWYgRExfR0xPQkFMCisjICAgIGRlZmluZSBMVF9ETEdMT0JBTAkJRExfR0xPQkFMCisjICBlbHNlCisjICAgIGRlZmluZSBMVF9ETEdMT0JBTAkJMAorIyAgZW5kaWYKKyNlbmRpZgorCisvKiBXZSBtYXkgaGF2ZSB0byBkZWZpbmUgTFRfRExMQVpZX09SX05PVyBpbiB0aGUgY29tbWFuZCBsaW5lIGlmIHdlCisgICBmaW5kIG91dCBpdCBkb2VzIG5vdCB3b3JrIGluIHNvbWUgcGxhdGZvcm0uICovCisjaWZuZGVmIExUX0RMTEFaWV9PUl9OT1cKKyMgIGlmZGVmIFJUTERfTEFaWQorIyAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwkJUlRMRF9MQVpZCisjICBlbHNlCisjICAgIGlmZGVmIERMX0xBWlkKKyMgICAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwkJRExfTEFaWQorIyAgICBlbHNlCisjICAgICAgaWZkZWYgUlRMRF9OT1cKKyMgICAgICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCVJUTERfTk9XCisjICAgICAgZWxzZQorIyAgICAgICAgaWZkZWYgRExfTk9XCisjICAgICAgICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCURMX05PVworIyAgICAgICAgZWxzZQorIyAgICAgICAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwkwCisjICAgICAgICBlbmRpZgorIyAgICAgIGVuZGlmCisjICAgIGVuZGlmCisjICBlbmRpZgorI2VuZGlmCisKK3ZvaWQgZm5vcmQoKSB7IGludCBpPTQyO30KK2ludCBtYWluICgpCit7CisgIHZvaWQgKnNlbGYgPSBkbG9wZW4gKDAsIExUX0RMR0xPQkFMfExUX0RMTEFaWV9PUl9OT1cpOworICBpbnQgc3RhdHVzID0gJGx0X2RsdW5rbm93bjsKKworICBpZiAoc2VsZikKKyAgICB7CisgICAgICBpZiAoZGxzeW0gKHNlbGYsImZub3JkIikpICAgICAgIHN0YXR1cyA9ICRsdF9kbG5vX3VzY29yZTsKKyAgICAgIGVsc2UgaWYgKGRsc3ltKCBzZWxmLCJfZm5vcmQiKSkgc3RhdHVzID0gJGx0X2RsbmVlZF91c2NvcmU7CisgICAgICAvKiBkbGNsb3NlIChzZWxmKTsgKi8KKyAgICB9CisgIGVsc2UKKyAgICBwdXRzIChkbGVycm9yICgpKTsKKworICByZXR1cm4gc3RhdHVzOworfV0KK19MVF9FT0YKKyAgaWYgQUNfVFJZX0VWQUwoYWNfbGluaykgJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fSAyPi9kZXYvbnVsbDsgdGhlbgorICAgICguL2NvbmZ0ZXN0OyBleGl0OyApID4mQVNfTUVTU0FHRV9MT0dfRkQgMj4vZGV2L251bGwKKyAgICBsdF9zdGF0dXM9JD8KKyAgICBjYXNlIHgkbHRfc3RhdHVzIGluCisgICAgICB4JGx0X2Rsbm9fdXNjb3JlKSAkMSA7OworICAgICAgeCRsdF9kbG5lZWRfdXNjb3JlKSAkMiA7OworICAgICAgeCRsdF9kbHVua25vd258eCopICQzIDs7CisgICAgZXNhYworICBlbHNlIDoKKyAgICAjIGNvbXBpbGF0aW9uIGZhaWxlZAorICAgICQzCisgIGZpCitmaQorcm0gLWZyIGNvbmZ0ZXN0KgorXSkjIF9MVF9UUllfRExPUEVOX1NFTEYKKworCisjIExUX1NZU19ETE9QRU5fU0VMRgorIyAtLS0tLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtMVF9TWVNfRExPUEVOX1NFTEZdLAorW200X3JlcXVpcmUoW19MVF9IRUFERVJfRExGQ05dKWRubAoraWYgdGVzdCAieCRlbmFibGVfZGxvcGVuIiAhPSB4eWVzOyB0aGVuCisgIGVuYWJsZV9kbG9wZW49dW5rbm93bgorICBlbmFibGVfZGxvcGVuX3NlbGY9dW5rbm93bgorICBlbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljPXVua25vd24KK2Vsc2UKKyAgbHRfY3ZfZGxvcGVuPW5vCisgIGx0X2N2X2Rsb3Blbl9saWJzPQorCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgYmVvcyopCisgICAgbHRfY3ZfZGxvcGVuPSJsb2FkX2FkZF9vbiIKKyAgICBsdF9jdl9kbG9wZW5fbGlicz0KKyAgICBsdF9jdl9kbG9wZW5fc2VsZj15ZXMKKyAgICA7OworCisgIG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgIGx0X2N2X2Rsb3Blbj0iTG9hZExpYnJhcnkiCisgICAgbHRfY3ZfZGxvcGVuX2xpYnM9CisgICAgOzsKKworICBjeWd3aW4qKQorICAgIGx0X2N2X2Rsb3Blbj0iZGxvcGVuIgorICAgIGx0X2N2X2Rsb3Blbl9saWJzPQorICAgIDs7CisKKyAgZGFyd2luKikKKyAgIyBpZiBsaWJkbCBpcyBpbnN0YWxsZWQgd2UgbmVlZCB0byBsaW5rIGFnYWluc3QgaXQKKyAgICBBQ19DSEVDS19MSUIoW2RsXSwgW2Rsb3Blbl0sCisJCVtsdF9jdl9kbG9wZW49ImRsb3BlbiIgbHRfY3ZfZGxvcGVuX2xpYnM9Ii1sZGwiXSxbCisgICAgbHRfY3ZfZGxvcGVuPSJkeWxkIgorICAgIGx0X2N2X2Rsb3Blbl9saWJzPQorICAgIGx0X2N2X2Rsb3Blbl9zZWxmPXllcworICAgIF0pCisgICAgOzsKKworICAqKQorICAgIEFDX0NIRUNLX0ZVTkMoW3NobF9sb2FkXSwKKwkgIFtsdF9jdl9kbG9wZW49InNobF9sb2FkIl0sCisgICAgICBbQUNfQ0hFQ0tfTElCKFtkbGRdLCBbc2hsX2xvYWRdLAorCSAgICBbbHRfY3ZfZGxvcGVuPSJzaGxfbG9hZCIgbHRfY3ZfZGxvcGVuX2xpYnM9Ii1sZGxkIl0sCisJW0FDX0NIRUNLX0ZVTkMoW2Rsb3Blbl0sCisJICAgICAgW2x0X2N2X2Rsb3Blbj0iZGxvcGVuIl0sCisJICBbQUNfQ0hFQ0tfTElCKFtkbF0sIFtkbG9wZW5dLAorCQlbbHRfY3ZfZGxvcGVuPSJkbG9wZW4iIGx0X2N2X2Rsb3Blbl9saWJzPSItbGRsIl0sCisJICAgIFtBQ19DSEVDS19MSUIoW3N2bGRdLCBbZGxvcGVuXSwKKwkJICBbbHRfY3ZfZGxvcGVuPSJkbG9wZW4iIGx0X2N2X2Rsb3Blbl9saWJzPSItbHN2bGQiXSwKKwkgICAgICBbQUNfQ0hFQ0tfTElCKFtkbGRdLCBbZGxkX2xpbmtdLAorCQkgICAgW2x0X2N2X2Rsb3Blbj0iZGxkX2xpbmsiIGx0X2N2X2Rsb3Blbl9saWJzPSItbGRsZCJdKQorCSAgICAgIF0pCisJICAgIF0pCisJICBdKQorCV0pCisgICAgICBdKQorICAgIDs7CisgIGVzYWMKKworICBpZiB0ZXN0ICJ4JGx0X2N2X2Rsb3BlbiIgIT0geG5vOyB0aGVuCisgICAgZW5hYmxlX2Rsb3Blbj15ZXMKKyAgZWxzZQorICAgIGVuYWJsZV9kbG9wZW49bm8KKyAgZmkKKworICBjYXNlICRsdF9jdl9kbG9wZW4gaW4KKyAgZGxvcGVuKQorICAgIHNhdmVfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKKyAgICB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9kbGZjbl9oIiA9IHh5ZXMgJiYgQ1BQRkxBR1M9IiRDUFBGTEFHUyAtREhBVkVfRExGQ05fSCIKKworICAgIHNhdmVfTERGTEFHUz0iJExERkxBR1MiCisgICAgd2w9JGx0X3Byb2dfY29tcGlsZXJfd2wgZXZhbCBMREZMQUdTPVwiXCRMREZMQUdTICRleHBvcnRfZHluYW1pY19mbGFnX3NwZWNcIgorCisgICAgc2F2ZV9MSUJTPSIkTElCUyIKKyAgICBMSUJTPSIkbHRfY3ZfZGxvcGVuX2xpYnMgJExJQlMiCisKKyAgICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBhIHByb2dyYW0gY2FuIGRsb3BlbiBpdHNlbGZdLAorCSAgbHRfY3ZfZGxvcGVuX3NlbGYsIFtkbmwKKwkgIF9MVF9UUllfRExPUEVOX1NFTEYoCisJICAgIGx0X2N2X2Rsb3Blbl9zZWxmPXllcywgbHRfY3ZfZGxvcGVuX3NlbGY9eWVzLAorCSAgICBsdF9jdl9kbG9wZW5fc2VsZj1ubywgbHRfY3ZfZGxvcGVuX3NlbGY9Y3Jvc3MpCisgICAgXSkKKworICAgIGlmIHRlc3QgIngkbHRfY3ZfZGxvcGVuX3NlbGYiID0geHllczsgdGhlbgorICAgICAgd2w9JGx0X3Byb2dfY29tcGlsZXJfd2wgZXZhbCBMREZMQUdTPVwiXCRMREZMQUdTICRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY1wiCisgICAgICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBhIHN0YXRpY2FsbHkgbGlua2VkIHByb2dyYW0gY2FuIGRsb3BlbiBpdHNlbGZdLAorCSAgbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljLCBbZG5sCisJICBfTFRfVFJZX0RMT1BFTl9TRUxGKAorCSAgICBsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWM9eWVzLCBsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWM9eWVzLAorCSAgICBsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWM9bm8sICBsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWM9Y3Jvc3MpCisgICAgICBdKQorICAgIGZpCisKKyAgICBDUFBGTEFHUz0iJHNhdmVfQ1BQRkxBR1MiCisgICAgTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKKyAgICBMSUJTPSIkc2F2ZV9MSUJTIgorICAgIDs7CisgIGVzYWMKKworICBjYXNlICRsdF9jdl9kbG9wZW5fc2VsZiBpbgorICB5ZXN8bm8pIGVuYWJsZV9kbG9wZW5fc2VsZj0kbHRfY3ZfZGxvcGVuX3NlbGYgOzsKKyAgKikgZW5hYmxlX2Rsb3Blbl9zZWxmPXVua25vd24gOzsKKyAgZXNhYworCisgIGNhc2UgJGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYyBpbgorICB5ZXN8bm8pIGVuYWJsZV9kbG9wZW5fc2VsZl9zdGF0aWM9JGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYyA7OworICAqKSBlbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljPXVua25vd24gOzsKKyAgZXNhYworZmkKK19MVF9ERUNMKFtkbG9wZW5fc3VwcG9ydF0sIFtlbmFibGVfZGxvcGVuXSwgWzBdLAorCSBbV2hldGhlciBkbG9wZW4gaXMgc3VwcG9ydGVkXSkKK19MVF9ERUNMKFtkbG9wZW5fc2VsZl0sIFtlbmFibGVfZGxvcGVuX3NlbGZdLCBbMF0sCisJIFtXaGV0aGVyIGRsb3BlbiBvZiBwcm9ncmFtcyBpcyBzdXBwb3J0ZWRdKQorX0xUX0RFQ0woW2Rsb3Blbl9zZWxmX3N0YXRpY10sIFtlbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljXSwgWzBdLAorCSBbV2hldGhlciBkbG9wZW4gb2Ygc3RhdGljYWxseSBsaW5rZWQgcHJvZ3JhbXMgaXMgc3VwcG9ydGVkXSkKK10pIyBMVF9TWVNfRExPUEVOX1NFTEYKKworIyBPbGQgbmFtZToKK0FVX0FMSUFTKFtBQ19MSUJUT09MX0RMT1BFTl9TRUxGXSwgW0xUX1NZU19ETE9QRU5fU0VMRl0pCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0FDX0xJQlRPT0xfRExPUEVOX1NFTEZdLCBbXSkKKworCisjIF9MVF9DT01QSUxFUl9DX08oW1RBR05BTUVdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ2hlY2sgdG8gc2VlIGlmIG9wdGlvbnMgLWMgYW5kIC1vIGFyZSBzaW11bHRhbmVvdXNseSBzdXBwb3J0ZWQgYnkgY29tcGlsZXIuCisjIFRoaXMgbWFjcm8gZG9lcyBub3QgaGFyZCBjb2RlIHRoZSBjb21waWxlciBsaWtlIEFDX1BST0dfQ0NfQ19PLgorbTRfZGVmdW4oW19MVF9DT01QSUxFUl9DX09dLAorW200X3JlcXVpcmUoW19MVF9ERUNMX1NFRF0pZG5sCittNF9yZXF1aXJlKFtfTFRfRklMRVVUSUxTX0RFRkFVTFRTXSlkbmwKK200X3JlcXVpcmUoW19MVF9UQUdfQ09NUElMRVJdKWRubAorQUNfQ0FDSEVfQ0hFQ0soW2lmICRjb21waWxlciBzdXBwb3J0cyAtYyAtbyBmaWxlLiRhY19vYmpleHRdLAorICBbX0xUX1RBR1ZBUihsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbywgJDEpXSwKKyAgW19MVF9UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9jX28sICQxKT1ubworICAgJFJNIC1yIGNvbmZ0ZXN0IDI+L2Rldi9udWxsCisgICBta2RpciBjb25mdGVzdAorICAgY2QgY29uZnRlc3QKKyAgIG1rZGlyIG91dAorICAgZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CisKKyAgIGx0X2NvbXBpbGVyX2ZsYWc9Ii1vIG91dC9jb25mdGVzdDIuJGFjX29iamV4dCIKKyAgICMgSW5zZXJ0IHRoZSBvcHRpb24gZWl0aGVyICgxKSBhZnRlciB0aGUgbGFzdCAqRkxBR1MgdmFyaWFibGUsIG9yCisgICAjICgyKSBiZWZvcmUgYSB3b3JkIGNvbnRhaW5pbmcgImNvbmZ0ZXN0LiIsIG9yICgzKSBhdCB0aGUgZW5kLgorICAgIyBOb3RlIHRoYXQgJGFjX2NvbXBpbGUgaXRzZWxmIGRvZXMgbm90IGNvbnRhaW4gYmFja3NsYXNoZXMgYW5kIGJlZ2lucworICAgIyB3aXRoIGEgZG9sbGFyIHNpZ24gKG5vdCBhIGh5cGhlbiksIHNvIHRoZSBlY2hvIHNob3VsZCB3b3JrIGNvcnJlY3RseS4KKyAgIGx0X2NvbXBpbGU9YGVjaG8gIiRhY19jb21waWxlIiB8ICRTRUQgXAorICAgLWUgJ3M6LipGTEFHU31cezAsMVx9IDomJGx0X2NvbXBpbGVyX2ZsYWcgOjsgdCcgXAorICAgLWUgJ3M6IFtbXiBdXSpjb25mdGVzdFwuOiAkbHRfY29tcGlsZXJfZmxhZyY6OyB0JyBcCisgICAtZSAnczokOiAkbHRfY29tcGlsZXJfZmxhZzonYAorICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOl9fb2xpbmVfXzogJGx0X2NvbXBpbGVcIiIgPiZBU19NRVNTQUdFX0xPR19GRCkKKyAgIChldmFsICIkbHRfY29tcGlsZSIgMj5vdXQvY29uZnRlc3QuZXJyKQorICAgYWNfc3RhdHVzPSQ/CisgICBjYXQgb3V0L2NvbmZ0ZXN0LmVyciA+JkFTX01FU1NBR0VfTE9HX0ZECisgICBlY2hvICIkYXNfbWU6X19vbGluZV9fOiBcJD8gPSAkYWNfc3RhdHVzIiA+JkFTX01FU1NBR0VfTE9HX0ZECisgICBpZiAoZXhpdCAkYWNfc3RhdHVzKSAmJiB0ZXN0IC1zIG91dC9jb25mdGVzdDIuJGFjX29iamV4dAorICAgdGhlbgorICAgICAjIFRoZSBjb21waWxlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAorICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3MKKyAgICAgJEVDSE8gIlgkX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlIiB8ICRYc2VkIC1lICcvXiQvZCcgPiBvdXQvY29uZnRlc3QuZXhwCisgICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBvdXQvY29uZnRlc3QuZXJyID5vdXQvY29uZnRlc3QuZXIyCisgICAgIGlmIHRlc3QgISAtcyBvdXQvY29uZnRlc3QuZXIyIHx8IGRpZmYgb3V0L2NvbmZ0ZXN0LmV4cCBvdXQvY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KKyAgICAgICBfTFRfVEFHVkFSKGx0X2N2X3Byb2dfY29tcGlsZXJfY19vLCAkMSk9eWVzCisgICAgIGZpCisgICBmaQorICAgY2htb2QgdSt3IC4gMj4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgICRSTSBjb25mdGVzdCoKKyAgICMgU0dJIEMrKyBjb21waWxlciB3aWxsIGNyZWF0ZSBkaXJlY3Rvcnkgb3V0L2lpX2ZpbGVzLyBmb3IKKyAgICMgdGVtcGxhdGUgaW5zdGFudGlhdGlvbgorICAgdGVzdCAtZCBvdXQvaWlfZmlsZXMgJiYgJFJNIG91dC9paV9maWxlcy8qICYmIHJtZGlyIG91dC9paV9maWxlcworICAgJFJNIG91dC8qICYmIHJtZGlyIG91dAorICAgY2QgLi4KKyAgICRSTSAtciBjb25mdGVzdAorICAgJFJNIGNvbmZ0ZXN0KgorXSkKK19MVF9UQUdERUNMKFtjb21waWxlcl9jX29dLCBbbHRfY3ZfcHJvZ19jb21waWxlcl9jX29dLCBbMV0sCisJW0RvZXMgY29tcGlsZXIgc2ltdWx0YW5lb3VzbHkgc3VwcG9ydCAtYyBhbmQgLW8gb3B0aW9ucz9dKQorXSkjIF9MVF9DT01QSUxFUl9DX08KKworCisjIF9MVF9DT01QSUxFUl9GSUxFX0xPQ0tTKFtUQUdOQU1FXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDaGVjayB0byBzZWUgaWYgd2UgY2FuIGRvIGhhcmQgbGlua3MgdG8gbG9jayBzb21lIGZpbGVzIGlmIG5lZWRlZAorbTRfZGVmdW4oW19MVF9DT01QSUxFUl9GSUxFX0xPQ0tTXSwKK1ttNF9yZXF1aXJlKFtfTFRfRU5BQkxFX0xPQ0tdKWRubAorbTRfcmVxdWlyZShbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10pZG5sCitfTFRfQ09NUElMRVJfQ19PKFskMV0pCisKK2hhcmRfbGlua3M9Im5vdHRlc3RlZCIKK2lmIHRlc3QgIiRfTFRfVEFHVkFSKGx0X2N2X3Byb2dfY29tcGlsZXJfY19vLCAkMSkiID0gbm8gJiYgdGVzdCAiJG5lZWRfbG9ja3MiICE9IG5vOyB0aGVuCisgICMgZG8gbm90IG92ZXJ3cml0ZSB0aGUgdmFsdWUgb2YgbmVlZF9sb2NrcyBwcm92aWRlZCBieSB0aGUgdXNlcgorICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIHdlIGNhbiBsb2NrIHdpdGggaGFyZCBsaW5rc10pCisgIGhhcmRfbGlua3M9eWVzCisgICRSTSBjb25mdGVzdCoKKyAgbG4gY29uZnRlc3QuYSBjb25mdGVzdC5iIDI+L2Rldi9udWxsICYmIGhhcmRfbGlua3M9bm8KKyAgdG91Y2ggY29uZnRlc3QuYQorICBsbiBjb25mdGVzdC5hIGNvbmZ0ZXN0LmIgMj4mNSB8fCBoYXJkX2xpbmtzPW5vCisgIGxuIGNvbmZ0ZXN0LmEgY29uZnRlc3QuYiAyPi9kZXYvbnVsbCAmJiBoYXJkX2xpbmtzPW5vCisgIEFDX01TR19SRVNVTFQoWyRoYXJkX2xpbmtzXSkKKyAgaWYgdGVzdCAiJGhhcmRfbGlua3MiID0gbm87IHRoZW4KKyAgICBBQ19NU0dfV0FSTihbYCRDQycgZG9lcyBub3Qgc3VwcG9ydCBgLWMgLW8nLCBzbyBgbWFrZSAtaicgbWF5IGJlIHVuc2FmZV0pCisgICAgbmVlZF9sb2Nrcz13YXJuCisgIGZpCitlbHNlCisgIG5lZWRfbG9ja3M9bm8KK2ZpCitfTFRfREVDTChbXSwgW25lZWRfbG9ja3NdLCBbMV0sIFtNdXN0IHdlIGxvY2sgZmlsZXMgd2hlbiBkb2luZyBjb21waWxhdGlvbj9dKQorXSkjIF9MVF9DT01QSUxFUl9GSUxFX0xPQ0tTCisKKworIyBfTFRfQ0hFQ0tfT0JKRElSCisjIC0tLS0tLS0tLS0tLS0tLS0KK200X2RlZnVuKFtfTFRfQ0hFQ0tfT0JKRElSXSwKK1tBQ19DQUNIRV9DSEVDSyhbZm9yIG9iamRpcl0sIFtsdF9jdl9vYmpkaXJdLAorW3JtIC1mIC5saWJzIDI+L2Rldi9udWxsCitta2RpciAubGlicyAyPi9kZXYvbnVsbAoraWYgdGVzdCAtZCAubGliczsgdGhlbgorICBsdF9jdl9vYmpkaXI9LmxpYnMKK2Vsc2UKKyAgIyBNUy1ET1MgZG9lcyBub3QgYWxsb3cgZmlsZW5hbWVzIHRoYXQgYmVnaW4gd2l0aCBhIGRvdC4KKyAgbHRfY3Zfb2JqZGlyPV9saWJzCitmaQorcm1kaXIgLmxpYnMgMj4vZGV2L251bGxdKQorb2JqZGlyPSRsdF9jdl9vYmpkaXIKK19MVF9ERUNMKFtdLCBbb2JqZGlyXSwgWzBdLAorICAgICAgICAgW1RoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyB0ZW1wb3JhcnkgbGlidG9vbCBmaWxlc10pZG5sCittNF9wYXR0ZXJuX2FsbG93KFtMVF9PQkpESVJdKWRubAorQUNfREVGSU5FX1VOUVVPVEVEKExUX09CSkRJUiwgIiRsdF9jdl9vYmpkaXIvIiwKKyAgW0RlZmluZSB0byB0aGUgc3ViLWRpcmVjdG9yeSBpbiB3aGljaCBsaWJ0b29sIHN0b3JlcyB1bmluc3RhbGxlZCBsaWJyYXJpZXMuXSkKK10pIyBfTFRfQ0hFQ0tfT0JKRElSCisKKworIyBfTFRfTElOS0VSX0hBUkRDT0RFX0xJQlBBVEgoW1RBR05BTUVdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDaGVjayBoYXJkY29kaW5nIGF0dHJpYnV0ZXMuCittNF9kZWZ1bihbX0xUX0xJTktFUl9IQVJEQ09ERV9MSUJQQVRIXSwKK1tBQ19NU0dfQ0hFQ0tJTkcoW2hvdyB0byBoYXJkY29kZSBsaWJyYXJ5IHBhdGhzIGludG8gcHJvZ3JhbXNdKQorX0xUX1RBR1ZBUihoYXJkY29kZV9hY3Rpb24sICQxKT0KK2lmIHRlc3QgLW4gIiRfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKSIgfHwKKyAgIHRlc3QgLW4gIiRfTFRfVEFHVkFSKHJ1bnBhdGhfdmFyLCAkMSkiIHx8CisgICB0ZXN0ICJYJF9MVF9UQUdWQVIoaGFyZGNvZGVfYXV0b21hdGljLCAkMSkiID0gIlh5ZXMiIDsgdGhlbgorCisgICMgV2UgY2FuIGhhcmRjb2RlIG5vbi1leGlzdGVudCBkaXJlY3Rvcmllcy4KKyAgaWYgdGVzdCAiJF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSkiICE9IG5vICYmCisgICAgICMgSWYgdGhlIG9ubHkgbWVjaGFuaXNtIHRvIGF2b2lkIGhhcmRjb2RpbmcgaXMgc2hsaWJwYXRoX3Zhciwgd2UKKyAgICAgIyBoYXZlIHRvIHJlbGluaywgb3RoZXJ3aXNlIHdlIG1pZ2h0IGxpbmsgd2l0aCBhbiBpbnN0YWxsZWQgbGlicmFyeQorICAgICAjIHdoZW4gd2Ugc2hvdWxkIGJlIGxpbmtpbmcgd2l0aCBhIHlldC10by1iZS1pbnN0YWxsZWQgb25lCisgICAgICMjIHRlc3QgIiRfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKSIgIT0gbm8gJiYKKyAgICAgdGVzdCAiJF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpIiAhPSBubzsgdGhlbgorICAgICMgTGlua2luZyBhbHdheXMgaGFyZGNvZGVzIHRoZSB0ZW1wb3JhcnkgbGlicmFyeSBkaXJlY3RvcnkuCisgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9hY3Rpb24sICQxKT1yZWxpbmsKKyAgZWxzZQorICAgICMgV2UgY2FuIGxpbmsgd2l0aG91dCBoYXJkY29kaW5nLCBhbmQgd2UgY2FuIGhhcmRjb2RlIG5vbmV4aXN0aW5nIGRpcnMuCisgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9hY3Rpb24sICQxKT1pbW1lZGlhdGUKKyAgZmkKK2Vsc2UKKyAgIyBXZSBjYW5ub3QgaGFyZGNvZGUgYW55dGhpbmcsIG9yIGVsc2Ugd2UgY2FuIG9ubHkgaGFyZGNvZGUgZXhpc3RpbmcKKyAgIyBkaXJlY3Rvcmllcy4KKyAgX0xUX1RBR1ZBUihoYXJkY29kZV9hY3Rpb24sICQxKT11bnN1cHBvcnRlZAorZmkKK0FDX01TR19SRVNVTFQoWyRfTFRfVEFHVkFSKGhhcmRjb2RlX2FjdGlvbiwgJDEpXSkKKworaWYgdGVzdCAiJF9MVF9UQUdWQVIoaGFyZGNvZGVfYWN0aW9uLCAkMSkiID0gcmVsaW5rIHx8CisgICB0ZXN0ICIkX0xUX1RBR1ZBUihpbmhlcml0X3JwYXRoLCAkMSkiID0geWVzOyB0aGVuCisgICMgRmFzdCBpbnN0YWxsYXRpb24gaXMgbm90IHN1cHBvcnRlZAorICBlbmFibGVfZmFzdF9pbnN0YWxsPW5vCitlbGlmIHRlc3QgIiRzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgiID0geWVzIHx8CisgICAgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IG5vOyB0aGVuCisgICMgRmFzdCBpbnN0YWxsYXRpb24gaXMgbm90IG5lY2Vzc2FyeQorICBlbmFibGVfZmFzdF9pbnN0YWxsPW5lZWRsZXNzCitmaQorX0xUX1RBR0RFQ0woW10sIFtoYXJkY29kZV9hY3Rpb25dLCBbMF0sCisgICAgW0hvdyB0byBoYXJkY29kZSBhIHNoYXJlZCBsaWJyYXJ5IHBhdGggaW50byBhbiBleGVjdXRhYmxlXSkKK10pIyBfTFRfTElOS0VSX0hBUkRDT0RFX0xJQlBBVEgKKworCisjIF9MVF9DTURfU1RSSVBMSUIKKyMgLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmdW4oW19MVF9DTURfU1RSSVBMSUJdLAorW200X3JlcXVpcmUoW19MVF9ERUNMX0VHUkVQXSkKK3N0cmlwbGliPQorb2xkX3N0cmlwbGliPQorQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHN0cmlwcGluZyBsaWJyYXJpZXMgaXMgcG9zc2libGVdKQoraWYgdGVzdCAtbiAiJFNUUklQIiAmJiAkU1RSSVAgLVYgMj4mMSB8ICRHUkVQICJHTlUgc3RyaXAiID4vZGV2L251bGw7IHRoZW4KKyAgdGVzdCAteiAiJG9sZF9zdHJpcGxpYiIgJiYgb2xkX3N0cmlwbGliPSIkU1RSSVAgLS1zdHJpcC1kZWJ1ZyIKKyAgdGVzdCAteiAiJHN0cmlwbGliIiAmJiBzdHJpcGxpYj0iJFNUUklQIC0tc3RyaXAtdW5uZWVkZWQiCisgIEFDX01TR19SRVNVTFQoW3llc10pCitlbHNlCisjIEZJWE1FIC0gaW5zZXJ0IHNvbWUgcmVhbCB0ZXN0cywgaG9zdF9vcyBpc24ndCByZWFsbHkgZ29vZCBlbm91Z2gKKyAgY2FzZSAkaG9zdF9vcyBpbgorICBkYXJ3aW4qKQorICAgIGlmIHRlc3QgLW4gIiRTVFJJUCIgOyB0aGVuCisgICAgICBzdHJpcGxpYj0iJFNUUklQIC14IgorICAgICAgb2xkX3N0cmlwbGliPSIkU1RSSVAgLVMiCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgIGVsc2UKKyAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICBmaQorICAgIDs7CisgICopCisgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgIDs7CisgIGVzYWMKK2ZpCitfTFRfREVDTChbXSwgW29sZF9zdHJpcGxpYl0sIFsxXSwgW0NvbW1hbmRzIHRvIHN0cmlwIGxpYnJhcmllc10pCitfTFRfREVDTChbXSwgW3N0cmlwbGliXSwgWzFdKQorXSkjIF9MVF9DTURfU1RSSVBMSUIKKworCisjIF9MVF9TWVNfRFlOQU1JQ19MSU5LRVIoW1RBR10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFBPUlRNRSBGaWxsIGluIHlvdXIgbGQuc28gY2hhcmFjdGVyaXN0aWNzCittNF9kZWZ1bihbX0xUX1NZU19EWU5BTUlDX0xJTktFUl0sCitbQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKWRubAorbTRfcmVxdWlyZShbX0xUX0RFQ0xfRUdSRVBdKWRubAorbTRfcmVxdWlyZShbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10pZG5sCittNF9yZXF1aXJlKFtfTFRfREVDTF9PQkpEVU1QXSlkbmwKK200X3JlcXVpcmUoW19MVF9ERUNMX1NFRF0pZG5sCitBQ19NU0dfQ0hFQ0tJTkcoW2R5bmFtaWMgbGlua2VyIGNoYXJhY3RlcmlzdGljc10pCittNF9pZihbJDFdLAorCVtdLCBbCitpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICBjYXNlICRob3N0X29zIGluCisgICAgZGFyd2luKikgbHRfYXdrX2FyZz0iL15saWJyYXJpZXM6LywvTFIvIiA7OworICAgICopIGx0X2F3a19hcmc9Ii9ebGlicmFyaWVzOi8iIDs7CisgIGVzYWMKKyAgbHRfc2VhcmNoX3BhdGhfc3BlYz1gJENDIC1wcmludC1zZWFyY2gtZGlycyB8IGF3ayAkbHRfYXdrX2FyZyB8ICRTRUQgLWUgInMvXmxpYnJhcmllczovLyIgLWUgInMsPS8sLyxnImAKKyAgaWYgJEVDSE8gIiRsdF9zZWFyY2hfcGF0aF9zcGVjIiB8ICRHUkVQICc7JyA+L2Rldi9udWxsIDsgdGhlbgorICAgICMgaWYgdGhlIHBhdGggY29udGFpbnMgIjsiIHRoZW4gd2UgYXNzdW1lIGl0IHRvIGJlIHRoZSBzZXBhcmF0b3IKKyAgICAjIG90aGVyd2lzZSBkZWZhdWx0IHRvIHRoZSBzdGFuZGFyZCBwYXRoIHNlcGFyYXRvciAoaS5lLiAiOiIpIC0gaXQgaXMKKyAgICAjIGFzc3VtZWQgdGhhdCBubyBwYXJ0IG9mIGEgbm9ybWFsIHBhdGhuYW1lIGNvbnRhaW5zICI7IiBidXQgdGhhdCBzaG91bGQKKyAgICAjIG9rYXkgaW4gdGhlIHJlYWwgd29ybGQgd2hlcmUgIjsiIGluIGRpcnBhdGhzIGlzIGl0c2VsZiBwcm9ibGVtYXRpYy4KKyAgICBsdF9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJGx0X3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAncy87LyAvZydgCisgIGVsc2UKKyAgICBsdF9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJGx0X3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAgLWUgInMvJFBBVEhfU0VQQVJBVE9SLyAvZyJgCisgIGZpCisgICMgT2ssIG5vdyB3ZSBoYXZlIHRoZSBwYXRoLCBzZXBhcmF0ZWQgYnkgc3BhY2VzLCB3ZSBjYW4gc3RlcCB0aHJvdWdoIGl0CisgICMgYW5kIGFkZCBtdWx0aWxpYiBkaXIgaWYgbmVjZXNzYXJ5LgorICBsdF90bXBfbHRfc2VhcmNoX3BhdGhfc3BlYz0KKyAgbHRfbXVsdGlfb3NfZGlyPWAkQ0MgJENQUEZMQUdTICRDRkxBR1MgJExERkxBR1MgLXByaW50LW11bHRpLW9zLWRpcmVjdG9yeSAyPi9kZXYvbnVsbGAKKyAgZm9yIGx0X3N5c19wYXRoIGluICRsdF9zZWFyY2hfcGF0aF9zcGVjOyBkbworICAgIGlmIHRlc3QgLWQgIiRsdF9zeXNfcGF0aC8kbHRfbXVsdGlfb3NfZGlyIjsgdGhlbgorICAgICAgbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWM9IiRsdF90bXBfbHRfc2VhcmNoX3BhdGhfc3BlYyAkbHRfc3lzX3BhdGgvJGx0X211bHRpX29zX2RpciIKKyAgICBlbHNlCisgICAgICB0ZXN0IC1kICIkbHRfc3lzX3BhdGgiICYmIFwKKwlsdF90bXBfbHRfc2VhcmNoX3BhdGhfc3BlYz0iJGx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjICRsdF9zeXNfcGF0aCIKKyAgICBmaQorICBkb25lCisgIGx0X3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICRsdF90bXBfbHRfc2VhcmNoX3BhdGhfc3BlYyB8IGF3ayAnCitCRUdJTiB7UlM9IiAiOyBGUz0iL3xcbiI7fSB7CisgIGx0X2Zvbz0iIjsKKyAgbHRfY291bnQ9MDsKKyAgZm9yIChsdF9pID0gTkY7IGx0X2kgPiAwOyBsdF9pLS0pIHsKKyAgICBpZiAoJGx0X2kgIT0gIiIgJiYgJGx0X2kgIT0gIi4iKSB7CisgICAgICBpZiAoJGx0X2kgPT0gIi4uIikgeworICAgICAgICBsdF9jb3VudCsrOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKGx0X2NvdW50ID09IDApIHsKKyAgICAgICAgICBsdF9mb289Ii8iICRsdF9pIGx0X2ZvbzsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBsdF9jb3VudC0tOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9CisgIGlmIChsdF9mb28gIT0gIiIpIHsgbHRfZnJlcVtbbHRfZm9vXV0rKzsgfQorICBpZiAobHRfZnJlcVtbbHRfZm9vXV0gPT0gMSkgeyBwcmludCBsdF9mb287IH0KK30nYAorICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICRsdF9zZWFyY2hfcGF0aF9zcGVjYAorZWxzZQorICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii9saWIgL3Vzci9saWIgL3Vzci9sb2NhbC9saWIiCitmaV0pCitsaWJyYXJ5X25hbWVzX3NwZWM9CitsaWJuYW1lX3NwZWM9J2xpYiRuYW1lJworc29uYW1lX3NwZWM9CitzaHJleHRfY21kcz0iLnNvIgorcG9zdGluc3RhbGxfY21kcz0KK3Bvc3R1bmluc3RhbGxfY21kcz0KK2ZpbmlzaF9jbWRzPQorZmluaXNoX2V2YWw9CitzaGxpYnBhdGhfdmFyPQorc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXVua25vd24KK3ZlcnNpb25fdHlwZT1ub25lCitkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgbGQuc28iCitzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL2xpYiAvdXNyL2xpYiIKK25lZWRfbGliX3ByZWZpeD11bmtub3duCitoYXJkY29kZV9pbnRvX2xpYnM9bm8KKworIyB3aGVuIHlvdSBzZXQgbmVlZF92ZXJzaW9uIHRvIG5vLCBtYWtlIHN1cmUgaXQgZG9lcyBub3QgY2F1c2UgLXNldF92ZXJzaW9uCisjIGZsYWdzIHRvIGJlIGxlZnQgd2l0aG91dCBhcmd1bWVudHMKK25lZWRfdmVyc2lvbj11bmtub3duCisKK2Nhc2UgJGhvc3Rfb3MgaW4KK2FpeDMqKQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICRsaWJuYW1lLmEnCisgIHNobGlicGF0aF92YXI9TElCUEFUSAorCisgICMgQUlYIDMgaGFzIG5vIHZlcnNpb25pbmcgc3VwcG9ydCwgc28gd2UgYXBwZW5kIGEgbWFqb3IgdmVyc2lvbiB0byB0aGUgbmFtZS4KKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgOzsKKworYWl4W1s0LTldXSopCisgIHZlcnNpb25fdHlwZT1saW51eAorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKyAgICAjIEFJWCA1IHN1cHBvcnRzIElBNjQKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBlbHNlCisgICAgIyBXaXRoIEdDQyB1cCB0byAyLjk1LngsIGNvbGxlY3QyIHdvdWxkIGNyZWF0ZSBhbiBpbXBvcnQgZmlsZQorICAgICMgZm9yIGRlcGVuZGVuY2UgbGlicmFyaWVzLiAgVGhlIGltcG9ydCBmaWxlIHdvdWxkIHN0YXJ0IHdpdGgKKyAgICAjIHRoZSBsaW5lIGAjISAuJy4gIFRoaXMgd291bGQgY2F1c2UgdGhlIGdlbmVyYXRlZCBsaWJyYXJ5IHRvCisgICAgIyBkZXBlbmQgb24gYC4nLCBhbHdheXMgYW4gaW52YWxpZCBsaWJyYXJ5LiAgVGhpcyB3YXMgZml4ZWQgaW4KKyAgICAjIGRldmVsb3BtZW50IHNuYXBzaG90cyBvZiBHQ0MgcHJpb3IgdG8gMy4wLgorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIGFpeDQgfCBhaXg0LltbMDFdXSB8IGFpeDQuW1swMV1dLiopCisgICAgICBpZiB7IGVjaG8gJyNpZiBfX0dOVUNfXyA+IDIgfHwgKF9fR05VQ19fID09IDIgJiYgX19HTlVDX01JTk9SX18gPj0gOTcpJworCSAgIGVjaG8gJyB5ZXMgJworCSAgIGVjaG8gJyNlbmRpZic7IH0gfCAke0NDfSAtRSAtIHwgJEdSRVAgeWVzID4gL2Rldi9udWxsOyB0aGVuCisJOgorICAgICAgZWxzZQorCWNhbl9idWlsZF9zaGFyZWQ9bm8KKyAgICAgIGZpCisgICAgICA7OworICAgIGVzYWMKKyAgICAjIEFJWCAob24gUG93ZXIqKSBoYXMgbm8gdmVyc2lvbmluZyBzdXBwb3J0LCBzbyBjdXJyZW50bHkgd2UgY2FuIG5vdCBoYXJkY29kZSBjb3JyZWN0CisgICAgIyBzb25hbWUgaW50byBleGVjdXRhYmxlLiBQcm9iYWJseSB3ZSBjYW4gYWRkIHZlcnNpb25pbmcgc3VwcG9ydCB0bworICAgICMgY29sbGVjdDIsIHNvIGFkZGl0aW9uYWwgbGlua3MgY2FuIGJlIHVzZWZ1bCBpbiBmdXR1cmUuCisgICAgaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCisgICAgICAjIElmIHVzaW5nIHJ1biB0aW1lIGxpbmtpbmcgKG9uIEFJWCA0LjIgb3IgbGF0ZXIpIHVzZSBsaWI8bmFtZT4uc28KKyAgICAgICMgaW5zdGVhZCBvZiBsaWI8bmFtZT4uYSB0byBsZXQgcGVvcGxlIGtub3cgdGhhdCB0aGVzZSBhcmUgbm90CisgICAgICAjIHR5cGljYWwgQUlYIHNoYXJlZCBsaWJyYXJpZXMuCisgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgICBlbHNlCisgICAgICAjIFdlIHByZXNlcnZlIC5hIGFzIGV4dGVuc2lvbiBmb3Igc2hhcmVkIGxpYnJhcmllcyB0aHJvdWdoIEFJWDQuMgorICAgICAgIyBhbmQgbGF0ZXIgd2hlbiB3ZSBhcmUgbm90IGRvaW5nIHJ1biB0aW1lIGxpbmtpbmcuCisgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9LmEgJGxpYm5hbWUuYScKKyAgICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgICAgZmkKKyAgICBzaGxpYnBhdGhfdmFyPUxJQlBBVEgKKyAgZmkKKyAgOzsKKworYW1pZ2FvcyopCisgIGNhc2UgJGhvc3RfY3B1IGluCisgIHBvd2VycGMpCisgICAgIyBTaW5jZSBKdWx5IDIwMDcgQW1pZ2FPUzQgb2ZmaWNpYWxseSBzdXBwb3J0cyAuc28gbGlicmFyaWVzLgorICAgICMgV2hlbiBjb21waWxpbmcgdGhlIGV4ZWN1dGFibGUsIGFkZCAtdXNlLWR5bmxkIC1Mc29ianM6IHRvIHRoZSBjb21waWxlbGluZS4KKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgICA7OworICBtNjhrKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuaXhsaWJyYXJ5ICRsaWJuYW1lLmEnCisgICAgIyBDcmVhdGUgJHtsaWJuYW1lfV9peGxpYnJhcnkuYSBlbnRyaWVzIGluIC9zeXMvbGlicy4KKyAgICBmaW5pc2hfZXZhbD0nZm9yIGxpYiBpbiBgbHMgJGxpYmRpci8qLml4bGlicmFyeSAyPi9kZXYvbnVsbGA7IGRvIGxpYm5hbWU9YCRFQ0hPICJYJGxpYiIgfCAkWHNlZCAtZSAnXCcncyVeLiovXChbW14vXV0qXClcLml4bGlicmFyeSQlXDElJ1wnJ2A7IHRlc3QgJFJNIC9zeXMvbGlicy8ke2xpYm5hbWV9X2l4bGlicmFyeS5hOyAkc2hvdyAiY2QgL3N5cy9saWJzICYmICRMTl9TICRsaWIgJHtsaWJuYW1lfV9peGxpYnJhcnkuYSI7IGNkIC9zeXMvbGlicyAmJiAkTE5fUyAkbGliICR7bGlibmFtZX1faXhsaWJyYXJ5LmEgfHwgZXhpdCAxOyBkb25lJworICAgIDs7CisgIGVzYWMKKyAgOzsKKworYmVvcyopCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCisgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBsZC5zbyIKKyAgc2hsaWJwYXRoX3Zhcj1MSUJSQVJZX1BBVEgKKyAgOzsKKworYnNkaVtbNDVdXSopCisgIHZlcnNpb25fdHlwZT1saW51eAorICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnICRsaWJkaXInCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3NobGliIC91c3IvbGliIC91c3IvWDExL2xpYiAvdXNyL2NvbnRyaWIvbGliIC9saWIgL3Vzci9sb2NhbC9saWIiCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvc2hsaWIgL3Vzci9saWIgL3Vzci9sb2NhbC9saWIiCisgICMgdGhlIGRlZmF1bHQgbGQuc28uY29uZiBhbHNvIGNvbnRhaW5zIC91c3IvY29udHJpYi9saWIgYW5kCisgICMgL3Vzci9YMTFSNi9saWIgKC91c3IvWDExIGlzIGEgbGluayB0byAvdXNyL1gxMVI2KSwgYnV0IGxldCB1cyBhbGxvdworICAjIGxpYnRvb2wgdG8gaGFyZC1jb2RlIHRoZXNlIGludG8gcHJvZ3JhbXMKKyAgOzsKKworY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICB2ZXJzaW9uX3R5cGU9d2luZG93cworICBzaHJleHRfY21kcz0iLmRsbCIKKyAgbmVlZF92ZXJzaW9uPW5vCisgIG5lZWRfbGliX3ByZWZpeD1ubworCisgIGNhc2UgJEdDQywkaG9zdF9vcyBpbgorICB5ZXMsY3lnd2luKiB8IHllcyxtaW5ndyogfCB5ZXMscHczMiogfCB5ZXMsY2VnY2MqKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuZGxsLmEnCisgICAgIyBETEwgaXMgaW5zdGFsbGVkIHRvICQobGliZGlyKS8uLi9iaW4gYnkgcG9zdGluc3RhbGxfY21kcworICAgIHBvc3RpbnN0YWxsX2NtZHM9J2Jhc2VfZmlsZT1gYmFzZW5hbWUgXCR7ZmlsZX1gfgorICAgICAgZGxwYXRoPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZGlyLydcJydcJHtiYXNlX2ZpbGV9J1wnJ2k7IGVjaG8gXCRkbG5hbWUnXCcnYH4KKyAgICAgIGRsZGlyPSRkZXN0ZGlyL2BkaXJuYW1lIFwkZGxwYXRoYH4KKyAgICAgIHRlc3QgLWQgXCRkbGRpciB8fCBta2RpciAtcCBcJGRsZGlyfgorICAgICAgJGluc3RhbGxfcHJvZyAkZGlyLyRkbG5hbWUgXCRkbGRpci8kZGxuYW1lfgorICAgICAgY2htb2QgYSt4IFwkZGxkaXIvJGRsbmFtZX4KKyAgICAgIGlmIHRlc3QgLW4gJ1wnJyRzdHJpcG1lJ1wnJyAmJiB0ZXN0IC1uICdcJyckc3RyaXBsaWInXCcnOyB0aGVuCisgICAgICAgIGV2YWwgJ1wnJyRzdHJpcGxpYiBcJGRsZGlyLyRkbG5hbWUnXCcnIHx8IGV4aXQgXCQ/OworICAgICAgZmknCisgICAgcG9zdHVuaW5zdGFsbF9jbWRzPSdkbGRsbD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGZpbGU7IGVjaG8gXCRkbG5hbWUnXCcnYH4KKyAgICAgIGRscGF0aD0kZGlyL1wkZGxkbGx+CisgICAgICAgJFJNIFwkZGxwYXRoJworICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKworICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBjeWd3aW4qKQorICAgICAgIyBDeWd3aW4gRExMcyB1c2UgJ2N5ZycgcHJlZml4IHJhdGhlciB0aGFuICdsaWInCisgICAgICBzb25hbWVfc3BlYz0nYGVjaG8gJHtsaWJuYW1lfSB8IHNlZCAtZSAncy9ebGliL2N5Zy8nYGBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1tbLl1dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIgL2xpYi93MzJhcGkgL2xpYiAvdXNyL2xvY2FsL2xpYiIKKyAgICAgIDs7CisgICAgbWluZ3cqIHwgY2VnY2MqKQorICAgICAgIyBNaW5HVyBETExzIHVzZSB0cmFkaXRpb25hbCAnbGliJyBwcmVmaXgKKyAgICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvW1suXV0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JworICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkQ0MgLXByaW50LXNlYXJjaC1kaXJzIHwgJEdSRVAgIl5saWJyYXJpZXM6IiB8ICRTRUQgLWUgInMvXmxpYnJhcmllczovLyIgLWUgInMsPS8sLyxnImAKKyAgICAgIGlmICRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8IFskR1JFUCAnO1tjLXpDLVpdOi8nID4vZGV2L251bGxdOyB0aGVuCisgICAgICAgICMgSXQgaXMgbW9zdCBwcm9iYWJseSBhIFdpbmRvd3MgZm9ybWF0IFBBVEggcHJpbnRlZCBieQorICAgICAgICAjIG1pbmd3IGdjYywgYnV0IHdlIGFyZSBydW5uaW5nIG9uIEN5Z3dpbi4gR2NjIHByaW50cyBpdHMgc2VhcmNoCisgICAgICAgICMgcGF0aCB3aXRoIDsgc2VwYXJhdG9ycywgYW5kIHdpdGggZHJpdmUgbGV0dGVycy4gV2UgY2FuIGhhbmRsZSB0aGUKKyAgICAgICAgIyBkcml2ZSBsZXR0ZXJzIChjeWd3aW4gZmlsZXV0aWxzIHVuZGVyc3RhbmRzIHRoZW0pLCBzbyBsZWF2ZSB0aGVtLAorICAgICAgICAjIGVzcGVjaWFsbHkgYXMgd2UgbWlnaHQgcGFzcyBmaWxlcyBmb3VuZCB0aGVyZSB0byBhIG1pbmd3IG9iamR1bXAsCisgICAgICAgICMgd2hpY2ggd291bGRuJ3QgdW5kZXJzdGFuZCBhIGN5Z3dpbmlmaWVkIHBhdGguIEFoaC4KKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICdzLzsvIC9nJ2AKKyAgICAgIGVsc2UKKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEICAtZSAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKKyAgICAgIGZpCisgICAgICA7OworICAgIHB3MzIqKQorICAgICAgIyBwdzMyIERMTHMgdXNlICdwdycgcHJlZml4IHJhdGhlciB0aGFuICdsaWInCisgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9J2BlY2hvICR7bGlibmFtZX0gfCBzZWQgLWUgJ3MvXmxpYi9wdy8nYGBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1tbLl1dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKKyAgICAgIDs7CisgICAgZXNhYworICAgIDs7CisKKyAgKikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bWy5dXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUubGliJworICAgIDs7CisgIGVzYWMKKyAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKKyAgIyBGSVhNRTogZmlyc3Qgd2Ugc2hvdWxkIHNlYXJjaCAuIGFuZCB0aGUgZGlyZWN0b3J5IHRoZSBleGVjdXRhYmxlIGlzIGluCisgIHNobGlicGF0aF92YXI9UEFUSAorICA7OworCitkYXJ3aW4qIHwgcmhhcHNvZHkqKQorICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZHlsZCIKKyAgdmVyc2lvbl90eXBlPWRhcndpbgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke21ham9yfSRzaGFyZWRfZXh0ICR7bGlibmFtZX0kc2hhcmVkX2V4dCcKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHttYWpvcn0kc2hhcmVkX2V4dCcKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBzaGxpYnBhdGhfdmFyPURZTERfTElCUkFSWV9QQVRICisgIHNocmV4dF9jbWRzPSdgdGVzdCAuJG1vZHVsZSA9IC55ZXMgJiYgZWNobyAuc28gfHwgZWNobyAuZHlsaWJgJworbTRfaWYoWyQxXSwgW10sWworICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgL3Vzci9sb2NhbC9saWIiXSkKKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy91c3IvbG9jYWwvbGliIC9saWIgL3Vzci9saWInCisgIDs7CisKK2RndXgqKQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIDs7CisKK2ZyZWVic2QxKikKKyAgZHluYW1pY19saW5rZXI9bm8KKyAgOzsKKworZnJlZWJzZCogfCBkcmFnb25mbHkqKQorICAjIERyYWdvbkZseSBkb2VzIG5vdCBoYXZlIGFvdXQuICBXaGVuL2lmIHRoZXkgaW1wbGVtZW50IGEgbmV3CisgICMgdmVyc2lvbmluZyBtZWNoYW5pc20sIGFkanVzdCB0aGlzLgorICBpZiB0ZXN0IC14IC91c3IvYmluL29iamZvcm1hdDsgdGhlbgorICAgIG9iamZvcm1hdD1gL3Vzci9iaW4vb2JqZm9ybWF0YAorICBlbHNlCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgIGZyZWVic2RbWzEyM11dKikgb2JqZm9ybWF0PWFvdXQgOzsKKyAgICAqKSBvYmpmb3JtYXQ9ZWxmIDs7CisgICAgZXNhYworICBmaQorICB2ZXJzaW9uX3R5cGU9ZnJlZWJzZC0kb2JqZm9ybWF0CisgIGNhc2UgJHZlcnNpb25fdHlwZSBpbgorICAgIGZyZWVic2QtZWxmKikKKyAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgICAgbmVlZF92ZXJzaW9uPW5vCisgICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgICAgIDs7CisgICAgZnJlZWJzZC0qKQorICAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICRsaWJuYW1lJHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXgnCisgICAgICBuZWVkX3ZlcnNpb249eWVzCisgICAgICA7OworICBlc2FjCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgZnJlZWJzZDIqKQorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgICA7OworICBmcmVlYnNkMy5bWzAxXV0qIHwgZnJlZWJzZGVsZjMuW1swMV1dKikKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgICAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAgIDs7CisgIGZyZWVic2QzLltbMi05XV0qIHwgZnJlZWJzZGVsZjMuW1syLTldXSogfCBcCisgIGZyZWVic2Q0LltbMC01XV0gfCBmcmVlYnNkZWxmNC5bWzAtNV1dIHwgZnJlZWJzZDQuMS4xIHwgZnJlZWJzZGVsZjQuMS4xKQorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgICA7OworICAqKSAjIGZyb20gNC42IG9uLCBhbmQgRHJhZ29uRmx5CisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgICA7OworICBlc2FjCisgIDs7CisKK2dudSopCisgIHZlcnNpb25fdHlwZT1saW51eAorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0ke21ham9yfSAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICA7OworCitocHV4OSogfCBocHV4MTAqIHwgaHB1eDExKikKKyAgIyBHaXZlIGEgc29uYW1lIGNvcnJlc3BvbmRpbmcgdG8gdGhlIG1ham9yIHZlcnNpb24gc28gdGhhdCBkbGQuc2wgcmVmdXNlcyB0bworICAjIGxpbmsgYWdhaW5zdCBvdGhlciB2ZXJzaW9ucy4KKyAgdmVyc2lvbl90eXBlPXN1bm9zCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgaWE2NCopCisgICAgc2hyZXh0X2NtZHM9Jy5zbycKKyAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGRsZC5zbyIKKyAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMgIyBVbmxlc3MgK25vZW52dmFyIGlzIHNwZWNpZmllZC4KKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICAgIGlmIHRlc3QgIlgkSFBVWF9JQTY0X01PREUiID0gWDMyOyB0aGVuCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliL2hwdXgzMiAvdXNyL2xvY2FsL2xpYi9ocHV4MzIgL3Vzci9sb2NhbC9saWIiCisgICAgZWxzZQorICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYi9ocHV4NjQgL3Vzci9sb2NhbC9saWIvaHB1eDY0IgorICAgIGZpCisgICAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9JHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYworICAgIDs7CisgIGhwcGEqNjQqKQorICAgIHNocmV4dF9jbWRzPScuc2wnCisgICAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkbGQuc2wiCisgICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEggIyBIb3cgc2hvdWxkIHdlIGhhbmRsZSBTSExJQl9QQVRICisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcyAjIFVubGVzcyArbm9lbnZ2YXIgaXMgc3BlY2lmaWVkLgorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYi9wYTIwXzY0IC91c3IvY2NzL2xpYi9wYTIwXzY0IgorICAgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMKKyAgICA7OworICAqKQorICAgIHNocmV4dF9jbWRzPScuc2wnCisgICAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGRsZC5zbCIKKyAgICBzaGxpYnBhdGhfdmFyPVNITElCX1BBVEgKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8gIyArcyBpcyByZXF1aXJlZCB0byBlbmFibGUgU0hMSUJfUEFUSAorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgICAgOzsKKyAgZXNhYworICAjIEhQLVVYIHJ1bnMgKnJlYWxseSogc2xvd2x5IHVubGVzcyBzaGFyZWQgbGlicmFyaWVzIGFyZSBtb2RlIDU1NS4KKyAgcG9zdGluc3RhbGxfY21kcz0nY2htb2QgNTU1ICRsaWInCisgIDs7CisKK2ludGVyaXhbWzMtOV1dKikKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgZHluYW1pY19saW5rZXI9J0ludGVyaXggMy54IGxkLnNvLjEgKFBFLCBsaWtlIEVMRiknCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIDs7CisKK2lyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBub25zdG9wdXgqKSB2ZXJzaW9uX3R5cGU9bm9uc3RvcHV4IDs7CisgICAgKikKKwlpZiB0ZXN0ICIkbHRfY3ZfcHJvZ19nbnVfbGQiID0geWVzOyB0aGVuCisJCXZlcnNpb25fdHlwZT1saW51eAorCWVsc2UKKwkJdmVyc2lvbl90eXBlPWlyaXgKKwlmaSA7OworICBlc2FjCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBjYXNlICRob3N0X29zIGluCisgIGlyaXg1KiB8IG5vbnN0b3B1eCopCisgICAgbGlic3VmZj0gc2hsaWJzdWZmPQorICAgIDs7CisgICopCisgICAgY2FzZSAkTEQgaW4gIyBsaWJ0b29sLm00IHdpbGwgYWRkIG9uZSBvZiB0aGVzZSBzd2l0Y2hlcyB0byBMRAorICAgICotMzJ8KiItMzIgInwqLW1lbGYzMmJzbWlwfCoiLW1lbGYzMmJzbWlwICIpCisgICAgICBsaWJzdWZmPSBzaGxpYnN1ZmY9IGxpYm1hZ2ljPTMyLWJpdDs7CisgICAgKi1uMzJ8KiItbjMyICJ8Ki1tZWxmMzJibWlwbjMyfCoiLW1lbGYzMmJtaXBuMzIgIikKKyAgICAgIGxpYnN1ZmY9MzIgc2hsaWJzdWZmPU4zMiBsaWJtYWdpYz1OMzI7OworICAgICotNjR8KiItNjQgInwqLW1lbGY2NGJtaXB8KiItbWVsZjY0Ym1pcCAiKQorICAgICAgbGlic3VmZj02NCBzaGxpYnN1ZmY9NjQgbGlibWFnaWM9NjQtYml0OzsKKyAgICAqKSBsaWJzdWZmPSBzaGxpYnN1ZmY9IGxpYm1hZ2ljPW5ldmVyLW1hdGNoOzsKKyAgICBlc2FjCisgICAgOzsKKyAgZXNhYworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUlkke3NobGlic3VmZn1fUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiR7bGlic3VmZn0gL2xpYiR7bGlic3VmZn0gL3Vzci9sb2NhbC9saWIke2xpYnN1ZmZ9IgorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIke2xpYnN1ZmZ9IC9saWIke2xpYnN1ZmZ9IgorICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIDs7CisKKyMgTm8gc2hhcmVkIGxpYiBzdXBwb3J0IGZvciBMaW51eCBvbGRsZCwgYW91dCwgb3IgY29mZi4KK2xpbnV4Km9sZGxkKiB8IGxpbnV4KmFvdXQqIHwgbGludXgqY29mZiopCisgIGR5bmFtaWNfbGlua2VyPW5vCisgIDs7CisKKyMgVGhpcyBtdXN0IGJlIExpbnV4IEVMRi4KK2xpbnV4KiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSkKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnIC1uICRsaWJkaXInCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICAjIFNvbWUgYmludXRpbHMgbGQgYXJlIHBhdGNoZWQgdG8gc2V0IERUX1JVTlBBVEgKKyAgc2F2ZV9MREZMQUdTPSRMREZMQUdTCisgIHNhdmVfbGliZGlyPSRsaWJkaXIKKyAgZXZhbCAibGliZGlyPS9mb287IHdsPVwiJF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpXCI7IFwKKyAgICAgICBMREZMQUdTPVwiXCRMREZMQUdTICRfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKVwiIgorICBBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtdLFtdKV0sCisgICAgW0FTX0lGKFsgKCRPQkpEVU1QIC1wIGNvbmZ0ZXN0JGFjX2V4ZWV4dCkgMj4vZGV2L251bGwgfCBncmVwICJSVU5QQVRILiokbGliZGlyIiA+L2Rldi9udWxsXSwKKyAgICAgICBbc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllc10pXSkKKyAgTERGTEFHUz0kc2F2ZV9MREZMQUdTCisgIGxpYmRpcj0kc2F2ZV9saWJkaXIKKworICAjIFRoaXMgaW1wbGllcyBubyBmYXN0X2luc3RhbGwsIHdoaWNoIGlzIHVuYWNjZXB0YWJsZS4KKyAgIyBTb21lIHJld29yayB3aWxsIGJlIG5lZWRlZCB0byBhbGxvdyBmb3IgZmFzdF9pbnN0YWxsCisgICMgYmVmb3JlIHRoaXMgY2FuIGJlIGVuYWJsZWQuCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKworICAjIEFwcGVuZCBsZC5zby5jb25mIGNvbnRlbnRzIHRvIHRoZSBzZWFyY2ggcGF0aAorICBpZiB0ZXN0IC1mIC9ldGMvbGQuc28uY29uZjsgdGhlbgorICAgIGx0X2xkX2V4dHJhPWBhd2sgJy9eaW5jbHVkZSAvIHsgc3lzdGVtKHNwcmludGYoImNkIC9ldGM7IGNhdCAlcyAyPi9kZXYvbnVsbCIsIFxbJF0yKSk7IHNraXAgPSAxOyB9IHsgaWYgKCFza2lwKSBwcmludCBcWyRdMDsgc2tpcCA9IDA7IH0nIDwgL2V0Yy9sZC5zby5jb25mIHwgJFNFRCAtZSAncy8jLiovLzsvXlsJIF0qaHdjYXBbCSBdL2Q7cy9bOiwJXS8gL2c7cy89W149XSokLy87cy89W149IF0qIC8gL2c7L14kL2QnIHwgdHIgJ1xuJyAnICdgCisgICAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii9saWIgL3Vzci9saWIgJGx0X2xkX2V4dHJhIgorICBmaQorCisgICMgV2UgdXNlZCB0byB0ZXN0IGZvciAvbGliL2xkLnNvLjEgYW5kIGRpc2FibGUgc2hhcmVkIGxpYnJhcmllcyBvbgorICAjIHBvd2VycGMsIGJlY2F1c2UgTWtMaW51eCBvbmx5IHN1cHBvcnRlZCBzaGFyZWQgbGlicmFyaWVzIHdpdGggdGhlCisgICMgR05VIGR5bmFtaWMgbGlua2VyLiAgU2luY2UgdGhpcyB3YXMgYnJva2VuIHdpdGggY3Jvc3MgY29tcGlsZXJzLAorICAjIG1vc3QgcG93ZXJwYy1saW51eCBib3hlcyBzdXBwb3J0IGR5bmFtaWMgbGlua2luZyB0aGVzZSBkYXlzIGFuZAorICAjIHBlb3BsZSBjYW4gYWx3YXlzIC0tZGlzYWJsZS1zaGFyZWQsIHRoZSB0ZXN0IHdhcyByZW1vdmVkLCBhbmQgd2UKKyAgIyBhc3N1bWUgdGhlIEdOVS9MaW51eCBkeW5hbWljIGxpbmtlciBpcyBpbiB1c2UuCisgIGR5bmFtaWNfbGlua2VyPSdHTlUvTGludXggbGQuc28nCisgIDs7CisKK25ldGJzZGVsZiotZ251KQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICBkeW5hbWljX2xpbmtlcj0nTmV0QlNEIGxkLmVsZl9zbycKKyAgOzsKKworbmV0YnNkKikKKyAgdmVyc2lvbl90eXBlPXN1bm9zCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fID4vZGV2L251bGw7IHRoZW4KKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4JworICAgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnIC1tICRsaWJkaXInCisgICAgZHluYW1pY19saW5rZXI9J05ldEJTRCAoYS5vdXQpIGxkLnNvJworICBlbHNlCisgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKKyAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICAgIGR5bmFtaWNfbGlua2VyPSdOZXRCU0QgbGQuZWxmX3NvJworICBmaQorICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgOzsKKworbmV3c29zNikKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIDs7CisKKypudG8qIHwgKnFueCopCisgIHZlcnNpb25fdHlwZT1xbngKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgZHluYW1pY19saW5rZXI9J2xkcW54LnNvJworICA7OworCitvcGVuYnNkKikKKyAgdmVyc2lvbl90eXBlPXN1bm9zCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiIKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgICMgU29tZSBvbGRlciB2ZXJzaW9ucyBvZiBPcGVuQlNEICgzLjMgYXQgbGVhc3QpICpkbyogbmVlZCB2ZXJzaW9uZWQgbGlicy4KKyAgY2FzZSAkaG9zdF9vcyBpbgorICAgIG9wZW5ic2QzLjMgfCBvcGVuYnNkMy4zLiopCW5lZWRfdmVyc2lvbj15ZXMgOzsKKyAgICAqKQkJCQluZWVkX3ZlcnNpb249bm8gIDs7CisgIGVzYWMKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCcKKyAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgLW0gJGxpYmRpcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfX2AiIHx8IHRlc3QgIiRob3N0X29zLSRob3N0X2NwdSIgPSAib3BlbmJzZDIuOC1wb3dlcnBjIjsgdGhlbgorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIG9wZW5ic2QyLltbODldXSB8IG9wZW5ic2QyLltbODldXS4qKQorCXNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworCTs7CisgICAgICAqKQorCXNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKwk7OworICAgICAgZXNhYworICBlbHNlCisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBmaQorICA7OworCitvczIqKQorICBsaWJuYW1lX3NwZWM9JyRuYW1lJworICBzaHJleHRfY21kcz0iLmRsbCIKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUke3NoYXJlZF9leHR9ICRsaWJuYW1lLmEnCisgIGR5bmFtaWNfbGlua2VyPSdPUy8yIGxkLmV4ZScKKyAgc2hsaWJwYXRoX3Zhcj1MSUJQQVRICisgIDs7CisKK29zZjMqIHwgb3NmNCogfCBvc2Y1KikKKyAgdmVyc2lvbl90eXBlPW9zZgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3Ivc2hsaWIgL3Vzci9jY3MvbGliIC91c3IvbGliL2NtcGxycy9jYyAvdXNyL2xpYiAvdXNyL2xvY2FsL2xpYiAvdmFyL3NobGliIgorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIKKyAgOzsKKworcmRvcyopCisgIGR5bmFtaWNfbGlua2VyPW5vCisgIDs7CisKK3NvbGFyaXMqKQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICMgbGRkIGNvbXBsYWlucyB1bmxlc3MgbGlicmFyaWVzIGFyZSBleGVjdXRhYmxlCisgIHBvc3RpbnN0YWxsX2NtZHM9J2NobW9kICt4ICRsaWInCisgIDs7CisKK3N1bm9zNCopCisgIHZlcnNpb25fdHlwZT1zdW5vcworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4JworICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi91c3IvZXRjIiBsZGNvbmZpZyAkbGliZGlyJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKyAgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgZmkKKyAgbmVlZF92ZXJzaW9uPXllcworICA7OworCitzeXN2NCB8IHN5c3Y0LjMqKQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIGNhc2UgJGhvc3RfdmVuZG9yIGluCisgICAgc25pKQorICAgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgICAgIHJ1bnBhdGhfdmFyPUxEX1JVTl9QQVRICisgICAgICA7OworICAgIHNpZW1lbnMpCisgICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgICAgIDs7CisgICAgbW90b3JvbGEpCisgICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgICAgIG5lZWRfdmVyc2lvbj1ubworICAgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Jy9saWIgL3Vzci9saWIgL3Vzci9jY3MvbGliJworICAgICAgOzsKKyAgZXNhYworICA7OworCitzeXN2NCpNUCopCisgIGlmIHRlc3QgLWQgL3Vzci9uZWMgO3RoZW4KKyAgICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHtzaGFyZWRfZXh0fS4kdmVyc3VmZml4ICRsaWJuYW1lJHtzaGFyZWRfZXh0fS4kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgIHNvbmFtZV9zcGVjPSckbGlibmFtZSR7c2hhcmVkX2V4dH0uJG1ham9yJworICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIGZpCisgIDs7CisKK3N5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCogfCBzeXN2NCp1dzIqKQorICB2ZXJzaW9uX3R5cGU9ZnJlZWJzZC1lbGYKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9ICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKyAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Jy91c3IvbG9jYWwvbGliIC91c3IvZ251L2xpYiAvdXNyL2Njcy9saWIgL3Vzci9saWIgL2xpYicKKyAgZWxzZQorICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9jY3MvbGliIC91c3IvbGliJworICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIHNjbzMuMnY1KikKKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIC9saWIiCisJOzsKKyAgICBlc2FjCisgIGZpCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvdXNyL2xpYicKKyAgOzsKKwordHBmKikKKyAgIyBUUEYgaXMgYSBjcm9zcy10YXJnZXQgb25seS4gIFByZWZlcnJlZCBjcm9zcy1ob3N0ID0gR05VL0xpbnV4LgorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgOzsKKwordXRzNCopCisgIHZlcnNpb25fdHlwZT1saW51eAorICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgOzsKKworKikKKyAgZHluYW1pY19saW5rZXI9bm8KKyAgOzsKK2VzYWMKK0FDX01TR19SRVNVTFQoWyRkeW5hbWljX2xpbmtlcl0pCit0ZXN0ICIkZHluYW1pY19saW5rZXIiID0gbm8gJiYgY2FuX2J1aWxkX3NoYXJlZD1ubworCit2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0iUEFUSCAkc2hsaWJwYXRoX3ZhciAkcnVucGF0aF92YXIiCitpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICB2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0iJHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rIEdDQ19FWEVDX1BSRUZJWCBDT01QSUxFUl9QQVRIIExJQlJBUllfUEFUSCIKK2ZpCisKK2lmIHRlc3QgIiR7bHRfY3Zfc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjK3NldH0iID0gc2V0OyB0aGVuCisgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJGx0X2N2X3N5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIKK2ZpCitpZiB0ZXN0ICIke2x0X2N2X3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjK3NldH0iID0gc2V0OyB0aGVuCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIkbHRfY3Zfc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMiCitmaQorCitfTFRfREVDTChbXSwgW3ZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rXSwgWzFdLAorICAgIFtWYXJpYWJsZXMgd2hvc2UgdmFsdWVzIHNob3VsZCBiZSBzYXZlZCBpbiBsaWJ0b29sIHdyYXBwZXIgc2NyaXB0cyBhbmQKKyAgICByZXN0b3JlZCBhdCBsaW5rIHRpbWVdKQorX0xUX0RFQ0woW10sIFtuZWVkX2xpYl9wcmVmaXhdLCBbMF0sCisgICAgW0RvIHdlIG5lZWQgdGhlICJsaWIiIHByZWZpeCBmb3IgbW9kdWxlcz9dKQorX0xUX0RFQ0woW10sIFtuZWVkX3ZlcnNpb25dLCBbMF0sIFtEbyB3ZSBuZWVkIGEgdmVyc2lvbiBmb3IgbGlicmFyaWVzP10pCitfTFRfREVDTChbXSwgW3ZlcnNpb25fdHlwZV0sIFswXSwgW0xpYnJhcnkgdmVyc2lvbmluZyB0eXBlXSkKK19MVF9ERUNMKFtdLCBbcnVucGF0aF92YXJdLCBbMF0sICBbU2hhcmVkIGxpYnJhcnkgcnVudGltZSBwYXRoIHZhcmlhYmxlXSkKK19MVF9ERUNMKFtdLCBbc2hsaWJwYXRoX3Zhcl0sIFswXSxbU2hhcmVkIGxpYnJhcnkgcGF0aCB2YXJpYWJsZV0pCitfTFRfREVDTChbXSwgW3NobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aF0sIFswXSwKKyAgICBbSXMgc2hsaWJwYXRoIHNlYXJjaGVkIGJlZm9yZSB0aGUgaGFyZC1jb2RlZCBsaWJyYXJ5IHNlYXJjaCBwYXRoP10pCitfTFRfREVDTChbXSwgW2xpYm5hbWVfc3BlY10sIFsxXSwgW0Zvcm1hdCBvZiBsaWJyYXJ5IG5hbWUgcHJlZml4XSkKK19MVF9ERUNMKFtdLCBbbGlicmFyeV9uYW1lc19zcGVjXSwgWzFdLAorICAgIFtbTGlzdCBvZiBhcmNoaXZlIG5hbWVzLiAgRmlyc3QgbmFtZSBpcyB0aGUgcmVhbCBvbmUsIHRoZSByZXN0IGFyZSBsaW5rcy4KKyAgICBUaGUgbGFzdCBuYW1lIGlzIHRoZSBvbmUgdGhhdCB0aGUgbGlua2VyIGZpbmRzIHdpdGggLWxOQU1FXV0pCitfTFRfREVDTChbXSwgW3NvbmFtZV9zcGVjXSwgWzFdLAorICAgIFtbVGhlIGNvZGVkIG5hbWUgb2YgdGhlIGxpYnJhcnksIGlmIGRpZmZlcmVudCBmcm9tIHRoZSByZWFsIG5hbWVdXSkKK19MVF9ERUNMKFtdLCBbcG9zdGluc3RhbGxfY21kc10sIFsyXSwKKyAgICBbQ29tbWFuZCB0byB1c2UgYWZ0ZXIgaW5zdGFsbGF0aW9uIG9mIGEgc2hhcmVkIGFyY2hpdmVdKQorX0xUX0RFQ0woW10sIFtwb3N0dW5pbnN0YWxsX2NtZHNdLCBbMl0sCisgICAgW0NvbW1hbmQgdG8gdXNlIGFmdGVyIHVuaW5zdGFsbGF0aW9uIG9mIGEgc2hhcmVkIGFyY2hpdmVdKQorX0xUX0RFQ0woW10sIFtmaW5pc2hfY21kc10sIFsyXSwKKyAgICBbQ29tbWFuZHMgdXNlZCB0byBmaW5pc2ggYSBsaWJ0b29sIGxpYnJhcnkgaW5zdGFsbGF0aW9uIGluIGEgZGlyZWN0b3J5XSkKK19MVF9ERUNMKFtdLCBbZmluaXNoX2V2YWxdLCBbMV0sCisgICAgW1tBcyAiZmluaXNoX2NtZHMiLCBleGNlcHQgYSBzaW5nbGUgc2NyaXB0IGZyYWdtZW50IHRvIGJlIGV2YWxlZCBidXQKKyAgICBub3Qgc2hvd25dXSkKK19MVF9ERUNMKFtdLCBbaGFyZGNvZGVfaW50b19saWJzXSwgWzBdLAorICAgIFtXaGV0aGVyIHdlIHNob3VsZCBoYXJkY29kZSBsaWJyYXJ5IHBhdGhzIGludG8gbGlicmFyaWVzXSkKK19MVF9ERUNMKFtdLCBbc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjXSwgWzJdLAorICAgIFtDb21waWxlLXRpbWUgc3lzdGVtIHNlYXJjaCBwYXRoIGZvciBsaWJyYXJpZXNdKQorX0xUX0RFQ0woW10sIFtzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlY10sIFsyXSwKKyAgICBbUnVuLXRpbWUgc3lzdGVtIHNlYXJjaCBwYXRoIGZvciBsaWJyYXJpZXNdKQorXSkjIF9MVF9TWVNfRFlOQU1JQ19MSU5LRVIKKworCisjIF9MVF9QQVRIX1RPT0xfUFJFRklYKFRPT0wpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGZpbmQgYSBmaWxlIHByb2dyYW0gd2hpY2ggY2FuIHJlY29nbml6ZSBzaGFyZWQgbGlicmFyeQorQUNfREVGVU4oW19MVF9QQVRIX1RPT0xfUFJFRklYXSwKK1ttNF9yZXF1aXJlKFtfTFRfREVDTF9FR1JFUF0pZG5sCitBQ19NU0dfQ0hFQ0tJTkcoW2ZvciAkMV0pCitBQ19DQUNIRV9WQUwobHRfY3ZfcGF0aF9NQUdJQ19DTUQsCitbY2FzZSAkTUFHSUNfQ01EIGluCitbW1xcLypdIHwgID86W1xcL10qXSkKKyAgbHRfY3ZfcGF0aF9NQUdJQ19DTUQ9IiRNQUdJQ19DTUQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICA7OworKikKKyAgbHRfc2F2ZV9NQUdJQ19DTUQ9IiRNQUdJQ19DTUQiCisgIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZG5sICRhY19kdW1teSBmb3JjZXMgc3BsaXR0aW5nIG9uIGNvbnN0YW50IHVzZXItc3VwcGxpZWQgcGF0aHMuCitkbmwgUE9TSVguMiB3b3JkIHNwbGl0dGluZyBpcyBkb25lIG9ubHkgb24gdGhlIG91dHB1dCBvZiB3b3JkIGV4cGFuc2lvbnMsCitkbmwgbm90IGV2ZXJ5IHdvcmQuICBUaGlzIGNsb3NlcyBhIGxvbmdzdGFuZGluZyBzaCBzZWN1cml0eSBob2xlLgorICBhY19kdW1teT0ibTRfaWYoWyQyXSwgLCAkUEFUSCwgWyQyXSkiCisgIGZvciBhY19kaXIgaW4gJGFjX2R1bW15OyBkbworICAgIElGUz0iJGx0X3NhdmVfaWZzIgorICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCisgICAgaWYgdGVzdCAtZiAkYWNfZGlyLyQxOyB0aGVuCisgICAgICBsdF9jdl9wYXRoX01BR0lDX0NNRD0iJGFjX2Rpci8kMSIKKyAgICAgIGlmIHRlc3QgLW4gIiRmaWxlX21hZ2ljX3Rlc3RfZmlsZSI7IHRoZW4KKwljYXNlICRkZXBsaWJzX2NoZWNrX21ldGhvZCBpbgorCSJmaWxlX21hZ2ljICIqKQorCSAgZmlsZV9tYWdpY19yZWdleD1gZXhwciAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiA6ICJmaWxlX21hZ2ljIFwoLipcKSJgCisJICBNQUdJQ19DTUQ9IiRsdF9jdl9wYXRoX01BR0lDX0NNRCIKKwkgIGlmIGV2YWwgJGZpbGVfbWFnaWNfY21kIFwkZmlsZV9tYWdpY190ZXN0X2ZpbGUgMj4gL2Rldi9udWxsIHwKKwkgICAgJEVHUkVQICIkZmlsZV9tYWdpY19yZWdleCIgPiAvZGV2L251bGw7IHRoZW4KKwkgICAgOgorCSAgZWxzZQorCSAgICBjYXQgPDxfTFRfRU9GIDE+JjIKKworKioqIFdhcm5pbmc6IHRoZSBjb21tYW5kIGxpYnRvb2wgdXNlcyB0byBkZXRlY3Qgc2hhcmVkIGxpYnJhcmllcywKKyoqKiAkZmlsZV9tYWdpY19jbWQsIHByb2R1Y2VzIG91dHB1dCB0aGF0IGxpYnRvb2wgY2Fubm90IHJlY29nbml6ZS4KKyoqKiBUaGUgcmVzdWx0IGlzIHRoYXQgbGlidG9vbCBtYXkgZmFpbCB0byByZWNvZ25pemUgc2hhcmVkIGxpYnJhcmllcworKioqIGFzIHN1Y2guICBUaGlzIHdpbGwgYWZmZWN0IHRoZSBjcmVhdGlvbiBvZiBsaWJ0b29sIGxpYnJhcmllcyB0aGF0CisqKiogZGVwZW5kIG9uIHNoYXJlZCBsaWJyYXJpZXMsIGJ1dCBwcm9ncmFtcyBsaW5rZWQgd2l0aCBzdWNoIGxpYnRvb2wKKyoqKiBsaWJyYXJpZXMgd2lsbCB3b3JrIHJlZ2FyZGxlc3Mgb2YgdGhpcyBwcm9ibGVtLiAgTmV2ZXJ0aGVsZXNzLCB5b3UKKyoqKiBtYXkgd2FudCB0byByZXBvcnQgdGhlIHByb2JsZW0gdG8geW91ciBzeXN0ZW0gbWFuYWdlciBhbmQvb3IgdG8KKyoqKiBidWctbGlidG9vbEBnbnUub3JnCisKK19MVF9FT0YKKwkgIGZpIDs7CisJZXNhYworICAgICAgZmkKKyAgICAgIGJyZWFrCisgICAgZmkKKyAgZG9uZQorICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgTUFHSUNfQ01EPSIkbHRfc2F2ZV9NQUdJQ19DTUQiCisgIDs7Citlc2FjXSkKK01BR0lDX0NNRD0iJGx0X2N2X3BhdGhfTUFHSUNfQ01EIgoraWYgdGVzdCAtbiAiJE1BR0lDX0NNRCI7IHRoZW4KKyAgQUNfTVNHX1JFU1VMVCgkTUFHSUNfQ01EKQorZWxzZQorICBBQ19NU0dfUkVTVUxUKG5vKQorZmkKK19MVF9ERUNMKFtdLCBbTUFHSUNfQ01EXSwgWzBdLAorCSBbVXNlZCB0byBleGFtaW5lIGxpYnJhcmllcyB3aGVuIGZpbGVfbWFnaWNfY21kIGJlZ2lucyB3aXRoICJmaWxlIl0pZG5sCitdKSMgX0xUX1BBVEhfVE9PTF9QUkVGSVgKKworIyBPbGQgbmFtZToKK0FVX0FMSUFTKFtBQ19QQVRIX1RPT0xfUFJFRklYXSwgW19MVF9QQVRIX1RPT0xfUFJFRklYXSkKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbQUNfUEFUSF9UT09MX1BSRUZJWF0sIFtdKQorCisKKyMgX0xUX1BBVEhfTUFHSUMKKyMgLS0tLS0tLS0tLS0tLS0KKyMgZmluZCBhIGZpbGUgcHJvZ3JhbSB3aGljaCBjYW4gcmVjb2duaXplIGEgc2hhcmVkIGxpYnJhcnkKK200X2RlZnVuKFtfTFRfUEFUSF9NQUdJQ10sCitbX0xUX1BBVEhfVE9PTF9QUkVGSVgoJHthY190b29sX3ByZWZpeH1maWxlLCAvdXNyL2JpbiRQQVRIX1NFUEFSQVRPUiRQQVRIKQoraWYgdGVzdCAteiAiJGx0X2N2X3BhdGhfTUFHSUNfQ01EIjsgdGhlbgorICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICAgX0xUX1BBVEhfVE9PTF9QUkVGSVgoZmlsZSwgL3Vzci9iaW4kUEFUSF9TRVBBUkFUT1IkUEFUSCkKKyAgZWxzZQorICAgIE1BR0lDX0NNRD06CisgIGZpCitmaQorXSkjIF9MVF9QQVRIX01BR0lDCisKKworIyBMVF9QQVRIX0xECisjIC0tLS0tLS0tLS0KKyMgZmluZCB0aGUgcGF0aG5hbWUgdG8gdGhlIEdOVSBvciBub24tR05VIGxpbmtlcgorQUNfREVGVU4oW0xUX1BBVEhfTERdLAorW0FDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKWRubAorQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKWRubAorQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0JVSUxEXSlkbmwKK200X3JlcXVpcmUoW19MVF9ERUNMX1NFRF0pZG5sCittNF9yZXF1aXJlKFtfTFRfREVDTF9FR1JFUF0pZG5sCisKK0FDX0FSR19XSVRIKFtnbnUtbGRdLAorICAgIFtBU19IRUxQX1NUUklORyhbLS13aXRoLWdudS1sZF0sCisJW2Fzc3VtZSB0aGUgQyBjb21waWxlciB1c2VzIEdOVSBsZCBAPDpAZGVmYXVsdD1ub0A6PkBdKV0sCisgICAgW3Rlc3QgIiR3aXRodmFsIiA9IG5vIHx8IHdpdGhfZ251X2xkPXllc10sCisgICAgW3dpdGhfZ251X2xkPW5vXSlkbmwKKworYWNfcHJvZz1sZAoraWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgIyBDaGVjayBpZiBnY2MgLXByaW50LXByb2ctbmFtZT1sZCBnaXZlcyBhIHBhdGguCisgIEFDX01TR19DSEVDS0lORyhbZm9yIGxkIHVzZWQgYnkgJENDXSkKKyAgY2FzZSAkaG9zdCBpbgorICAqLSotbWluZ3cqKQorICAgICMgZ2NjIGxlYXZlcyBhIHRyYWlsaW5nIGNhcnJpYWdlIHJldHVybiB3aGljaCB1cHNldHMgbWluZ3cKKyAgICBhY19wcm9nPWAoJENDIC1wcmludC1wcm9nLW5hbWU9bGQpIDI+JjUgfCB0ciAtZCAnXDAxNSdgIDs7CisgICopCisgICAgYWNfcHJvZz1gKCRDQyAtcHJpbnQtcHJvZy1uYW1lPWxkKSAyPiY1YCA7OworICBlc2FjCisgIGNhc2UgJGFjX3Byb2cgaW4KKyAgICAjIEFjY2VwdCBhYnNvbHV0ZSBwYXRocy4KKyAgICBbW1xcL11dKiB8ID86W1tcXC9dXSopCisgICAgICByZV9kaXJlbHQ9Jy9bW14vXV1bW14vXV0qL1wuXC4vJworICAgICAgIyBDYW5vbmljYWxpemUgdGhlIHBhdGhuYW1lIG9mIGxkCisgICAgICBhY19wcm9nPWAkRUNITyAiJGFjX3Byb2cifCAkU0VEICdzJVxcXFwlLyVnJ2AKKyAgICAgIHdoaWxlICRFQ0hPICIkYWNfcHJvZyIgfCAkR1JFUCAiJHJlX2RpcmVsdCIgPiAvZGV2L251bGwgMj4mMTsgZG8KKwlhY19wcm9nPWAkRUNITyAkYWNfcHJvZ3wgJFNFRCAicyUkcmVfZGlyZWx0JS8lImAKKyAgICAgIGRvbmUKKyAgICAgIHRlc3QgLXogIiRMRCIgJiYgTEQ9IiRhY19wcm9nIgorICAgICAgOzsKKyAgIiIpCisgICAgIyBJZiBpdCBmYWlscywgdGhlbiBwcmV0ZW5kIHdlIGFyZW4ndCB1c2luZyBHQ0MuCisgICAgYWNfcHJvZz1sZAorICAgIDs7CisgICopCisgICAgIyBJZiBpdCBpcyByZWxhdGl2ZSwgdGhlbiBzZWFyY2ggZm9yIHRoZSBmaXJzdCBsZCBpbiBQQVRILgorICAgIHdpdGhfZ251X2xkPXVua25vd24KKyAgICA7OworICBlc2FjCitlbGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKyAgQUNfTVNHX0NIRUNLSU5HKFtmb3IgR05VIGxkXSkKK2Vsc2UKKyAgQUNfTVNHX0NIRUNLSU5HKFtmb3Igbm9uLUdOVSBsZF0pCitmaQorQUNfQ0FDSEVfVkFMKGx0X2N2X3BhdGhfTEQsCitbaWYgdGVzdCAteiAiJExEIjsgdGhlbgorICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0kUEFUSF9TRVBBUkFUT1IKKyAgZm9yIGFjX2RpciBpbiAkUEFUSDsgZG8KKyAgICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorICAgIGlmIHRlc3QgLWYgIiRhY19kaXIvJGFjX3Byb2ciIHx8IHRlc3QgLWYgIiRhY19kaXIvJGFjX3Byb2ckYWNfZXhlZXh0IjsgdGhlbgorICAgICAgbHRfY3ZfcGF0aF9MRD0iJGFjX2Rpci8kYWNfcHJvZyIKKyAgICAgICMgQ2hlY2sgdG8gc2VlIGlmIHRoZSBwcm9ncmFtIGlzIEdOVSBsZC4gIEknZCByYXRoZXIgdXNlIC0tdmVyc2lvbiwKKyAgICAgICMgYnV0IGFwcGFyZW50bHkgc29tZSB2YXJpYW50cyBvZiBHTlUgbGQgb25seSBhY2NlcHQgLXYuCisgICAgICAjIEJyZWFrIG9ubHkgaWYgaXQgd2FzIHRoZSBHTlUvbm9uLUdOVSBsZCB0aGF0IHdlIHByZWZlci4KKyAgICAgIGNhc2UgYCIkbHRfY3ZfcGF0aF9MRCIgLXYgMj4mMSA8L2Rldi9udWxsYCBpbgorICAgICAgKkdOVSogfCAqJ3dpdGggQkZEJyopCisJdGVzdCAiJHdpdGhfZ251X2xkIiAhPSBubyAmJiBicmVhaworCTs7CisgICAgICAqKQorCXRlc3QgIiR3aXRoX2dudV9sZCIgIT0geWVzICYmIGJyZWFrCisJOzsKKyAgICAgIGVzYWMKKyAgICBmaQorICBkb25lCisgIElGUz0iJGx0X3NhdmVfaWZzIgorZWxzZQorICBsdF9jdl9wYXRoX0xEPSIkTEQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorZmldKQorTEQ9IiRsdF9jdl9wYXRoX0xEIgoraWYgdGVzdCAtbiAiJExEIjsgdGhlbgorICBBQ19NU0dfUkVTVUxUKCRMRCkKK2Vsc2UKKyAgQUNfTVNHX1JFU1VMVChubykKK2ZpCit0ZXN0IC16ICIkTEQiICYmIEFDX01TR19FUlJPUihbbm8gYWNjZXB0YWJsZSBsZCBmb3VuZCBpbiBcJFBBVEhdKQorX0xUX1BBVEhfTERfR05VCitBQ19TVUJTVChbTERdKQorCitfTFRfVEFHREVDTChbXSwgW0xEXSwgWzFdLCBbVGhlIGxpbmtlciB1c2VkIHRvIGJ1aWxkIGxpYnJhcmllc10pCitdKSMgTFRfUEFUSF9MRAorCisjIE9sZCBuYW1lczoKK0FVX0FMSUFTKFtBTV9QUk9HX0xEXSwgW0xUX1BBVEhfTERdKQorQVVfQUxJQVMoW0FDX1BST0dfTERdLCBbTFRfUEFUSF9MRF0pCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0FNX1BST0dfTERdLCBbXSkKK2RubCBBQ19ERUZVTihbQUNfUFJPR19MRF0sIFtdKQorCisKKyMgX0xUX1BBVEhfTERfR05VCisjLSAtLS0tLS0tLS0tLS0tLQorbTRfZGVmdW4oW19MVF9QQVRIX0xEX0dOVV0sCitbQUNfQ0FDSEVfQ0hFQ0soW2lmIHRoZSBsaW5rZXIgKCRMRCkgaXMgR05VIGxkXSwgbHRfY3ZfcHJvZ19nbnVfbGQsCitbIyBJJ2QgcmF0aGVyIHVzZSAtLXZlcnNpb24gaGVyZSwgYnV0IGFwcGFyZW50bHkgc29tZSBHTlUgbGRzIG9ubHkgYWNjZXB0IC12LgorY2FzZSBgJExEIC12IDI+JjEgPC9kZXYvbnVsbGAgaW4KKypHTlUqIHwgKid3aXRoIEJGRCcqKQorICBsdF9jdl9wcm9nX2dudV9sZD15ZXMKKyAgOzsKKyopCisgIGx0X2N2X3Byb2dfZ251X2xkPW5vCisgIDs7Citlc2FjXSkKK3dpdGhfZ251X2xkPSRsdF9jdl9wcm9nX2dudV9sZAorXSkjIF9MVF9QQVRIX0xEX0dOVQorCisKKyMgX0xUX0NNRF9SRUxPQUQKKyMgLS0tLS0tLS0tLS0tLS0KKyMgZmluZCByZWxvYWQgZmxhZyBmb3IgbGlua2VyCisjICAgLS0gUE9SVE1FIFNvbWUgbGlua2VycyBtYXkgbmVlZCBhIGRpZmZlcmVudCByZWxvYWQgZmxhZy4KK200X2RlZnVuKFtfTFRfQ01EX1JFTE9BRF0sCitbQUNfQ0FDSEVfQ0hFQ0soW2ZvciAkTEQgb3B0aW9uIHRvIHJlbG9hZCBvYmplY3QgZmlsZXNdLAorICBsdF9jdl9sZF9yZWxvYWRfZmxhZywKKyAgW2x0X2N2X2xkX3JlbG9hZF9mbGFnPSctciddKQorcmVsb2FkX2ZsYWc9JGx0X2N2X2xkX3JlbG9hZF9mbGFnCitjYXNlICRyZWxvYWRfZmxhZyBpbgorIiIgfCAiICIqKSA7OworKikgcmVsb2FkX2ZsYWc9IiAkcmVsb2FkX2ZsYWciIDs7Citlc2FjCityZWxvYWRfY21kcz0nJExEJHJlbG9hZF9mbGFnIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCitjYXNlICRob3N0X29zIGluCisgIGRhcndpbiopCisgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICAgIHJlbG9hZF9jbWRzPSckTFRDQyAkTFRDRkxBR1MgLW5vc3RkbGliICR7d2x9LXIgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKKyAgICBlbHNlCisgICAgICByZWxvYWRfY21kcz0nJExEJHJlbG9hZF9mbGFnIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCisgICAgZmkKKyAgICA7OworZXNhYworX0xUX0RFQ0woW10sIFtyZWxvYWRfZmxhZ10sIFsxXSwgW0hvdyB0byBjcmVhdGUgcmVsb2FkYWJsZSBvYmplY3QgZmlsZXNdKWRubAorX0xUX0RFQ0woW10sIFtyZWxvYWRfY21kc10sIFsyXSlkbmwKK10pIyBfTFRfQ01EX1JFTE9BRAorCisKKyMgX0xUX0NIRUNLX01BR0lDX01FVEhPRAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGhvdyB0byBjaGVjayBmb3IgbGlicmFyeSBkZXBlbmRlbmNpZXMKKyMgIC0tIFBPUlRNRSBmaWxsIGluIHdpdGggdGhlIGR5bmFtaWMgbGlicmFyeSBjaGFyYWN0ZXJpc3RpY3MKK200X2RlZnVuKFtfTFRfQ0hFQ0tfTUFHSUNfTUVUSE9EXSwKK1ttNF9yZXF1aXJlKFtfTFRfREVDTF9FR1JFUF0pCittNF9yZXF1aXJlKFtfTFRfREVDTF9PQkpEVU1QXSkKK0FDX0NBQ0hFX0NIRUNLKFtob3cgdG8gcmVjb2duaXplIGRlcGVuZGVudCBsaWJyYXJpZXNdLAorbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QsCitbbHRfY3ZfZmlsZV9tYWdpY19jbWQ9JyRNQUdJQ19DTUQnCitsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0KK2x0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSd1bmtub3duJworIyBOZWVkIHRvIHNldCB0aGUgcHJlY2VkaW5nIHZhcmlhYmxlIG9uIGFsbCBwbGF0Zm9ybXMgdGhhdCBzdXBwb3J0CisjIGludGVybGlicmFyeSBkZXBlbmRlbmNpZXMuCisjICdub25lJyAtLSBkZXBlbmRlbmNpZXMgbm90IHN1cHBvcnRlZC4KKyMgYHVua25vd24nIC0tIHNhbWUgYXMgbm9uZSwgYnV0IGRvY3VtZW50cyB0aGF0IHdlIHJlYWxseSBkb24ndCBrbm93LgorIyAncGFzc19hbGwnIC0tIGFsbCBkZXBlbmRlbmNpZXMgcGFzc2VkIHdpdGggbm8gY2hlY2tzLgorIyAndGVzdF9jb21waWxlJyAtLSBjaGVjayBieSBtYWtpbmcgdGVzdCBwcm9ncmFtLgorIyAnZmlsZV9tYWdpYyBbW3JlZ2V4XV0nIC0tIGNoZWNrIGJ5IGxvb2tpbmcgZm9yIGZpbGVzIGluIGxpYnJhcnkgcGF0aAorIyB3aGljaCByZXNwb25kcyB0byB0aGUgJGZpbGVfbWFnaWNfY21kIHdpdGggYSBnaXZlbiBleHRlbmRlZCByZWdleC4KKyMgSWYgeW91IGhhdmUgYGZpbGUnIG9yIGVxdWl2YWxlbnQgb24geW91ciBzeXN0ZW0gYW5kIHlvdSdyZSBub3Qgc3VyZQorIyB3aGV0aGVyIGBwYXNzX2FsbCcgd2lsbCAqYWx3YXlzKiB3b3JrLCB5b3UgcHJvYmFibHkgd2FudCB0aGlzIG9uZS4KKworY2FzZSAkaG9zdF9vcyBpbgorYWl4W1s0LTldXSopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK2Jlb3MqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCitic2RpW1s0NV1dKikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgRUxGIFtbMC05XV1bWzAtOV1dKi1iaXQgW1tNTF1dU0IgKHNoYXJlZCBvYmplY3R8ZHluYW1pYyBsaWIpJworICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nL3Vzci9iaW4vZmlsZSAtTCcKKyAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9L3NobGliL2xpYmMuc28KKyAgOzsKKworY3lnd2luKikKKyAgIyBmdW5jX3dpbjMyX2xpYmlkIGlzIGEgc2hlbGwgZnVuY3Rpb24gZGVmaW5lZCBpbiBsdG1haW4uc2gKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgXng4NiBhcmNoaXZlIGltcG9ydHxeeDg2IERMTCcKKyAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9J2Z1bmNfd2luMzJfbGliaWQnCisgIDs7CisKK21pbmd3KiB8IHB3MzIqKQorICAjIEJhc2UgTVNZUy9NaW5HVyBkbyBub3QgcHJvdmlkZSB0aGUgJ2ZpbGUnIGNvbW1hbmQgbmVlZGVkIGJ5CisgICMgZnVuY193aW4zMl9saWJpZCBzaGVsbCBmdW5jdGlvbiwgc28gdXNlIGEgd2Vha2VyIHRlc3QgYmFzZWQgb24gJ29iamR1bXAnLAorICAjIHVubGVzcyB3ZSBmaW5kICdmaWxlJywgZm9yIGV4YW1wbGUgYmVjYXVzZSB3ZSBhcmUgY3Jvc3MtY29tcGlsaW5nLgorICBpZiAoIGZpbGUgLyApID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIF54ODYgYXJjaGl2ZSBpbXBvcnR8Xng4NiBETEwnCisgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9J2Z1bmNfd2luMzJfbGliaWQnCisgIGVsc2UKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBmaWxlIGZvcm1hdCBwZWkqLWkzODYoLiphcmNoaXRlY3R1cmU6IGkzODYpPycKKyAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nJE9CSkRVTVAgLWYnCisgIGZpCisgIDs7CisKK2NlZ2NjKQorICAjIHVzZSB0aGUgd2Vha2VyIHRlc3QgYmFzZWQgb24gJ29iamR1bXAnLiBTZWUgbWluZ3cqLgorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBmaWxlIGZvcm1hdCBwZS1hcm0tLipsaXR0bGUoLiphcmNoaXRlY3R1cmU6IGFybSk/JworICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nJE9CSkRVTVAgLWYnCisgIDs7CisKK2RhcndpbiogfCByaGFwc29keSopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK2ZyZWVic2QqIHwgZHJhZ29uZmx5KikKKyAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fID4gL2Rldi9udWxsOyB0aGVuCisgICAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgICBpKjg2ICkKKyAgICAgICMgTm90IHN1cmUgd2hldGhlciB0aGUgcHJlc2VuY2Ugb2YgT3BlbkJTRCBoZXJlIHdhcyBhIG1pc3Rha2UuCisgICAgICAjIExldCdzIGFjY2VwdCBib3RoIG9mIHRoZW0gdW50aWwgdGhpcyBpcyBjbGVhcmVkIHVwLgorICAgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgKEZyZWVCU0R8T3BlbkJTRHxEcmFnb25GbHkpL2lbWzMtOV1dODYgKGNvbXBhY3QgKT9kZW1hbmQgcGFnZWQgc2hhcmVkIGxpYnJhcnknCisgICAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0vdXNyL2Jpbi9maWxlCisgICAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT1gZWNobyAvdXNyL2xpYi9saWJjLnNvLipgCisgICAgICA7OworICAgIGVzYWMKKyAgZWxzZQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIGZpCisgIDs7CisKK2dudSopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK2hwdXgxMC4yMCogfCBocHV4MTEqKQorICBsdF9jdl9maWxlX21hZ2ljX2NtZD0vdXNyL2Jpbi9maWxlCisgIGNhc2UgJGhvc3RfY3B1IGluCisgIGlhNjQqKQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIChzW1swLTldXVtbMC05XV1bWzAtOV1dfEVMRi1bWzAtOV1dW1swLTldXSkgc2hhcmVkIG9iamVjdCBmaWxlIC0gSUE2NCcKKyAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0vdXNyL2xpYi9ocHV4MzIvbGliYy5zbworICAgIDs7CisgIGhwcGEqNjQqKQorICAgIFtsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyAoc1swLTldWzAtOV1bMC05XXxFTEYtWzAtOV1bMC05XSkgc2hhcmVkIG9iamVjdCBmaWxlIC0gUEEtUklTQyBbMC05XS5bMC05XSddCisgICAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9L3Vzci9saWIvcGEyMF82NC9saWJjLnNsCisgICAgOzsKKyAgKikKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyAoc1tbMC05XV1bWzAtOV1dW1swLTldXXxQQS1SSVNDW1swLTldXS5bWzAtOV1dKSBzaGFyZWQgbGlicmFyeScKKyAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0vdXNyL2xpYi9saWJjLnNsCisgICAgOzsKKyAgZXNhYworICA7OworCitpbnRlcml4W1szLTldXSopCisgICMgUElDIGNvZGUgaXMgYnJva2VuIG9uIEludGVyaXggMy54LCB0aGF0J3Mgd2h5IHxcLmEgbm90IHxfcGljXC5hIGhlcmUKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYltbXi9dXSsoXC5zb3xcLmEpJCcKKyAgOzsKKworaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKKyAgY2FzZSAkTEQgaW4KKyAgKi0zMnwqIi0zMiAiKSBsaWJtYWdpYz0zMi1iaXQ7OworICAqLW4zMnwqIi1uMzIgIikgbGlibWFnaWM9TjMyOzsKKyAgKi02NHwqIi02NCAiKSBsaWJtYWdpYz02NC1iaXQ7OworICAqKSBsaWJtYWdpYz1uZXZlci1tYXRjaDs7CisgIGVzYWMKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworIyBUaGlzIG11c3QgYmUgTGludXggRUxGLgorbGludXgqIHwgaypic2QqLWdudSB8IGtvcGVuc29sYXJpcyotZ251KQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCituZXRic2QqIHwgbmV0YnNkZWxmKi1nbnUpCisgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfXyA+IC9kZXYvbnVsbDsgdGhlbgorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbW14vXV0rKFwuc29cLltbMC05XV0rXC5bWzAtOV1dK3xfcGljXC5hKSQnCisgIGVsc2UKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nbWF0Y2hfcGF0dGVybiAvbGliW1teL11dKyhcLnNvfF9waWNcLmEpJCcKKyAgZmkKKyAgOzsKKworbmV3b3M2KikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgRUxGIFtbMC05XV1bWzAtOV1dKi1iaXQgW1tNTF1dU0IgKGV4ZWN1dGFibGV8ZHluYW1pYyBsaWIpJworICBsdF9jdl9maWxlX21hZ2ljX2NtZD0vdXNyL2Jpbi9maWxlCisgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS91c3IvbGliL2xpYm5scy5zbworICA7OworCisqbnRvKiB8ICpxbngqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCitvcGVuYnNkKikKKyAgaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfX2AiIHx8IHRlc3QgIiRob3N0X29zLSRob3N0X2NwdSIgPSAib3BlbmJzZDIuOC1wb3dlcnBjIjsgdGhlbgorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbW14vXV0rKFwuc29cLltbMC05XV0rXC5bWzAtOV1dK3xcLnNvfF9waWNcLmEpJCcKKyAgZWxzZQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbW14vXV0rKFwuc29cLltbMC05XV0rXC5bWzAtOV1dK3xfcGljXC5hKSQnCisgIGZpCisgIDs7CisKK29zZjMqIHwgb3NmNCogfCBvc2Y1KikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworcmRvcyopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK3NvbGFyaXMqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCitzeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgdW5peHdhcmUqIHwgT3BlblVOSVgqIHwgc3lzdjQqdXcyKikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworc3lzdjQgfCBzeXN2NC4zKikKKyAgY2FzZSAkaG9zdF92ZW5kb3IgaW4KKyAgbW90b3JvbGEpCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgRUxGIFtbMC05XV1bWzAtOV1dKi1iaXQgW1tNTF1dU0IgKHNoYXJlZCBvYmplY3R8ZHluYW1pYyBsaWIpIE1bWzAtOV1dW1swLTldXSogVmVyc2lvbiBbWzAtOV1dJworICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPWBlY2hvIC91c3IvbGliL2xpYmMuc28qYAorICAgIDs7CisgIG5jcikKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICAgIDs7CisgIHNlcXVlbnQpCisgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9Jy9iaW4vZmlsZScKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBFTEYgW1swLTldXVtbMC05XV0qLWJpdCBbW0xNXV1TQiAoc2hhcmVkIG9iamVjdHxkeW5hbWljIGxpYiApJworICAgIDs7CisgIHNuaSkKKyAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nL2Jpbi9maWxlJworICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSJmaWxlX21hZ2ljIEVMRiBbWzAtOV1dW1swLTldXSotYml0IFtbTE1dXVNCIGR5bmFtaWMgbGliIgorICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS9saWIvbGliYy5zbworICAgIDs7CisgIHNpZW1lbnMpCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgICA7OworICBwYykKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICAgIDs7CisgIGVzYWMKKyAgOzsKKwordHBmKikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKK2VzYWMKK10pCitmaWxlX21hZ2ljX2NtZD0kbHRfY3ZfZmlsZV9tYWdpY19jbWQKK2RlcGxpYnNfY2hlY2tfbWV0aG9kPSRsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZAordGVzdCAteiAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiAmJiBkZXBsaWJzX2NoZWNrX21ldGhvZD11bmtub3duCisKK19MVF9ERUNMKFtdLCBbZGVwbGlic19jaGVja19tZXRob2RdLCBbMV0sCisgICAgW01ldGhvZCB0byBjaGVjayB3aGV0aGVyIGRlcGVuZGVudCBsaWJyYXJpZXMgYXJlIHNoYXJlZCBvYmplY3RzXSkKK19MVF9ERUNMKFtdLCBbZmlsZV9tYWdpY19jbWRdLCBbMV0sCisgICAgW0NvbW1hbmQgdG8gdXNlIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPT0gImZpbGVfbWFnaWMiXSkKK10pIyBfTFRfQ0hFQ0tfTUFHSUNfTUVUSE9ECisKKworIyBMVF9QQVRIX05NCisjIC0tLS0tLS0tLS0KKyMgZmluZCB0aGUgcGF0aG5hbWUgdG8gYSBCU0QtIG9yIE1TLWNvbXBhdGlibGUgbmFtZSBsaXN0ZXIKK0FDX0RFRlVOKFtMVF9QQVRIX05NXSwKK1tBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSlkbmwKK0FDX0NBQ0hFX0NIRUNLKFtmb3IgQlNELSBvciBNUy1jb21wYXRpYmxlIG5hbWUgbGlzdGVyIChubSldLCBsdF9jdl9wYXRoX05NLAorW2lmIHRlc3QgLW4gIiROTSI7IHRoZW4KKyAgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisgIGx0X2N2X3BhdGhfTk09IiROTSIKK2Vsc2UKKyAgbHRfbm1fdG9fY2hlY2s9IiR7YWNfdG9vbF9wcmVmaXh9bm0iCisgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCIgJiYgdGVzdCAiJGJ1aWxkIiA9ICIkaG9zdCI7IHRoZW4KKyAgICBsdF9ubV90b19jaGVjaz0iJGx0X25tX3RvX2NoZWNrIG5tIgorICBmaQorICBmb3IgbHRfdG1wX25tIGluICRsdF9ubV90b19jaGVjazsgZG8KKyAgICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0kUEFUSF9TRVBBUkFUT1IKKyAgICBmb3IgYWNfZGlyIGluICRQQVRIIC91c3IvY2NzL2Jpbi9lbGYgL3Vzci9jY3MvYmluIC91c3IvdWNiIC9iaW47IGRvCisgICAgICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCisgICAgICB0bXBfbm09IiRhY19kaXIvJGx0X3RtcF9ubSIKKyAgICAgIGlmIHRlc3QgLWYgIiR0bXBfbm0iIHx8IHRlc3QgLWYgIiR0bXBfbm0kYWNfZXhlZXh0IiA7IHRoZW4KKwkjIENoZWNrIHRvIHNlZSBpZiB0aGUgbm0gYWNjZXB0cyBhIEJTRC1jb21wYXQgZmxhZy4KKwkjIEFkZGluZyB0aGUgYHNlZCAxcScgcHJldmVudHMgZmFsc2UgcG9zaXRpdmVzIG9uIEhQLVVYLCB3aGljaCBzYXlzOgorCSMgICBubTogdW5rbm93biBvcHRpb24gIkIiIGlnbm9yZWQKKwkjIFRydTY0J3Mgbm0gY29tcGxhaW5zIHRoYXQgL2Rldi9udWxsIGlzIGFuIGludmFsaWQgb2JqZWN0IGZpbGUKKwljYXNlIGAiJHRtcF9ubSIgLUIgL2Rldi9udWxsIDI+JjEgfCBzZWQgJzFxJ2AgaW4KKwkqL2Rldi9udWxsKiB8IConSW52YWxpZCBmaWxlIG9yIG9iamVjdCB0eXBlJyopCisJICBsdF9jdl9wYXRoX05NPSIkdG1wX25tIC1CIgorCSAgYnJlYWsKKwkgIDs7CisJKikKKwkgIGNhc2UgYCIkdG1wX25tIiAtcCAvZGV2L251bGwgMj4mMSB8IHNlZCAnMXEnYCBpbgorCSAgKi9kZXYvbnVsbCopCisJICAgIGx0X2N2X3BhdGhfTk09IiR0bXBfbm0gLXAiCisJICAgIGJyZWFrCisJICAgIDs7CisJICAqKQorCSAgICBsdF9jdl9wYXRoX05NPSR7bHRfY3ZfcGF0aF9OTT0iJHRtcF9ubSJ9ICMga2VlcCB0aGUgZmlyc3QgbWF0Y2gsIGJ1dAorCSAgICBjb250aW51ZSAjIHNvIHRoYXQgd2UgY2FuIHRyeSB0byBmaW5kIG9uZSB0aGF0IHN1cHBvcnRzIEJTRCBmbGFncworCSAgICA7OworCSAgZXNhYworCSAgOzsKKwllc2FjCisgICAgICBmaQorICAgIGRvbmUKKyAgICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgZG9uZQorICA6ICR7bHRfY3ZfcGF0aF9OTT1ub30KK2ZpXSkKK2lmIHRlc3QgIiRsdF9jdl9wYXRoX05NIiAhPSAibm8iOyB0aGVuCisgIE5NPSIkbHRfY3ZfcGF0aF9OTSIKK2Vsc2UKKyAgIyBEaWRuJ3QgZmluZCBhbnkgQlNEIGNvbXBhdGlibGUgbmFtZSBsaXN0ZXIsIGxvb2sgZm9yIGR1bXBiaW4uCisgIEFDX0NIRUNLX1RPT0xTKERVTVBCSU4sIFsiZHVtcGJpbiAtc3ltYm9scyIgImxpbmsgLWR1bXAgLXN5bWJvbHMiXSwgOikKKyAgQUNfU1VCU1QoW0RVTVBCSU5dKQorICBpZiB0ZXN0ICIkRFVNUEJJTiIgIT0gIjoiOyB0aGVuCisgICAgTk09IiREVU1QQklOIgorICBmaQorZmkKK3Rlc3QgLXogIiROTSIgJiYgTk09bm0KK0FDX1NVQlNUKFtOTV0pCitfTFRfREVDTChbXSwgW05NXSwgWzFdLCBbQSBCU0QtIG9yIE1TLWNvbXBhdGlibGUgbmFtZSBsaXN0ZXJdKWRubAorCitBQ19DQUNIRV9DSEVDSyhbdGhlIG5hbWUgbGlzdGVyICgkTk0pIGludGVyZmFjZV0sIFtsdF9jdl9ubV9pbnRlcmZhY2VdLAorICBbbHRfY3Zfbm1faW50ZXJmYWNlPSJCU0Qgbm0iCisgIGVjaG8gImludCBzb21lX3ZhcmlhYmxlID0gMDsiID4gY29uZnRlc3QuJGFjX2V4dAorICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6X19vbGluZV9fOiAkYWNfY29tcGlsZVwiIiA+JkFTX01FU1NBR0VfTE9HX0ZEKQorICAoZXZhbCAiJGFjX2NvbXBpbGUiIDI+Y29uZnRlc3QuZXJyKQorICBjYXQgY29uZnRlc3QuZXJyID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgKGV2YWwgZWNobyAiXCJcJGFzX21lOl9fb2xpbmVfXzogJE5NIFxcXCJjb25mdGVzdC4kYWNfb2JqZXh0XFxcIlwiIiA+JkFTX01FU1NBR0VfTE9HX0ZEKQorICAoZXZhbCAiJE5NIFwiY29uZnRlc3QuJGFjX29iamV4dFwiIiAyPmNvbmZ0ZXN0LmVyciA+IGNvbmZ0ZXN0Lm91dCkKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JkFTX01FU1NBR0VfTE9HX0ZECisgIChldmFsIGVjaG8gIlwiXCRhc19tZTpfX29saW5lX186IG91dHB1dFwiIiA+JkFTX01FU1NBR0VfTE9HX0ZEKQorICBjYXQgY29uZnRlc3Qub3V0ID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgaWYgJEdSRVAgJ0V4dGVybmFsLipzb21lX3ZhcmlhYmxlJyBjb25mdGVzdC5vdXQgPiAvZGV2L251bGw7IHRoZW4KKyAgICBsdF9jdl9ubV9pbnRlcmZhY2U9Ik1TIGR1bXBiaW4iCisgIGZpCisgIHJtIC1mIGNvbmZ0ZXN0Kl0pCitdKSMgTFRfUEFUSF9OTQorCisjIE9sZCBuYW1lczoKK0FVX0FMSUFTKFtBTV9QUk9HX05NXSwgW0xUX1BBVEhfTk1dKQorQVVfQUxJQVMoW0FDX1BST0dfTk1dLCBbTFRfUEFUSF9OTV0pCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0FNX1BST0dfTk1dLCBbXSkKK2RubCBBQ19ERUZVTihbQUNfUFJPR19OTV0sIFtdKQorCisKKyMgTFRfTElCX00KKyMgLS0tLS0tLS0KKyMgY2hlY2sgZm9yIG1hdGggbGlicmFyeQorQUNfREVGVU4oW0xUX0xJQl9NXSwKK1tBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pZG5sCitMSUJNPQorY2FzZSAkaG9zdCBpbgorKi0qLWJlb3MqIHwgKi0qLWN5Z3dpbiogfCAqLSotcHczMiogfCAqLSotZGFyd2luKikKKyAgIyBUaGVzZSBzeXN0ZW0gZG9uJ3QgaGF2ZSBsaWJtLCBvciBkb24ndCBuZWVkIGl0CisgIDs7CisqLW5jci1zeXN2NC4zKikKKyAgQUNfQ0hFQ0tfTElCKG13LCBfbXd2YWxpZGNoZWNrbCwgTElCTT0iLWxtdyIpCisgIEFDX0NIRUNLX0xJQihtLCBjb3MsIExJQk09IiRMSUJNIC1sbSIpCisgIDs7CisqKQorICBBQ19DSEVDS19MSUIobSwgY29zLCBMSUJNPSItbG0iKQorICA7OworZXNhYworQUNfU1VCU1QoW0xJQk1dKQorXSkjIExUX0xJQl9NCisKKyMgT2xkIG5hbWU6CitBVV9BTElBUyhbQUNfQ0hFQ0tfTElCTV0sIFtMVF9MSUJfTV0pCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0FDX0NIRUNLX0xJQk1dLCBbXSkKKworCisjIF9MVF9DT01QSUxFUl9OT19SVFRJKFtUQUdOQU1FXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmdW4oW19MVF9DT01QSUxFUl9OT19SVFRJXSwKK1ttNF9yZXF1aXJlKFtfTFRfVEFHX0NPTVBJTEVSXSlkbmwKKworX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZywgJDEpPQorCitpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnLCAkMSk9JyAtZm5vLWJ1aWx0aW4nCisKKyAgX0xUX0NPTVBJTEVSX09QVElPTihbaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1mbm8tcnR0aSAtZm5vLWV4Y2VwdGlvbnNdLAorICAgIGx0X2N2X3Byb2dfY29tcGlsZXJfcnR0aV9leGNlcHRpb25zLAorICAgIFstZm5vLXJ0dGkgLWZuby1leGNlcHRpb25zXSwgW10sCisgICAgW19MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcsICQxKT0iJF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcsICQxKSAtZm5vLXJ0dGkgLWZuby1leGNlcHRpb25zIl0pCitmaQorX0xUX1RBR0RFQ0woW25vX2J1aWx0aW5fZmxhZ10sIFtsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZ10sIFsxXSwKKwlbQ29tcGlsZXIgZmxhZyB0byB0dXJuIG9mZiBidWlsdGluIGZ1bmN0aW9uc10pCitdKSMgX0xUX0NPTVBJTEVSX05PX1JUVEkKKworCisjIF9MVF9DTURfR0xPQkFMX1NZTUJPTFMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmdW4oW19MVF9DTURfR0xPQkFMX1NZTUJPTFNdLAorW0FDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSlkbmwKK0FDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKWRubAorQUNfUkVRVUlSRShbTFRfUEFUSF9OTV0pZG5sCitBQ19SRVFVSVJFKFtMVF9QQVRIX0xEXSlkbmwKK200X3JlcXVpcmUoW19MVF9ERUNMX1NFRF0pZG5sCittNF9yZXF1aXJlKFtfTFRfREVDTF9FR1JFUF0pZG5sCittNF9yZXF1aXJlKFtfTFRfVEFHX0NPTVBJTEVSXSlkbmwKKworIyBDaGVjayBmb3IgY29tbWFuZCB0byBncmFiIHRoZSByYXcgc3ltYm9sIG5hbWUgZm9sbG93ZWQgYnkgQyBzeW1ib2wgZnJvbSBubS4KK0FDX01TR19DSEVDS0lORyhbY29tbWFuZCB0byBwYXJzZSAkTk0gb3V0cHV0IGZyb20gJGNvbXBpbGVyIG9iamVjdF0pCitBQ19DQUNIRV9WQUwoW2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGVdLAorWworIyBUaGVzZSBhcmUgc2FuZSBkZWZhdWx0cyB0aGF0IHdvcmsgb24gYXQgbGVhc3QgYSBmZXcgb2xkIHN5c3RlbXMuCisjIFtUaGV5IGNvbWUgZnJvbSBVbHRyaXguICBXaGF0IGNvdWxkIGJlIG9sZGVyIHRoYW4gVWx0cml4PyEhIDspXQorCisjIENoYXJhY3RlciBjbGFzcyBkZXNjcmliaW5nIE5NIGdsb2JhbCBzeW1ib2wgY29kZXMuCitzeW1jb2RlPSdbW0JDREVHUlNUXV0nCisKKyMgUmVnZXhwIHRvIG1hdGNoIHN5bWJvbHMgdGhhdCBjYW4gYmUgYWNjZXNzZWQgZGlyZWN0bHkgZnJvbSBDLgorc3ltcGF0PSdcKFtbX0EtWmEtel1dW1tfQS1aYS16MC05XV0qXCknCisKKyMgRGVmaW5lIHN5c3RlbS1zcGVjaWZpYyB2YXJpYWJsZXMuCitjYXNlICRob3N0X29zIGluCithaXgqKQorICBzeW1jb2RlPSdbW0JDRFRdXScKKyAgOzsKK2N5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgc3ltY29kZT0nW1tBQkNER0lTVFddXScKKyAgOzsKK2hwdXgqKQorICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorICAgIHN5bWNvZGU9J1tbQUJDREVHUlNUXV0nCisgIGZpCisgIDs7Citpcml4KiB8IG5vbnN0b3B1eCopCisgIHN5bWNvZGU9J1tbQkNERUdSU1RdXScKKyAgOzsKK29zZiopCisgIHN5bWNvZGU9J1tbQkNERUdRUlNUXV0nCisgIDs7Citzb2xhcmlzKikKKyAgc3ltY29kZT0nW1tCRFJUXV0nCisgIDs7CitzY28zLjJ2NSopCisgIHN5bWNvZGU9J1tbRFRdXScKKyAgOzsKK3N5c3Y0LjJ1dzIqKQorICBzeW1jb2RlPSdbW0RUXV0nCisgIDs7CitzeXN2NSogfCBzY281djYqIHwgdW5peHdhcmUqIHwgT3BlblVOSVgqKQorICBzeW1jb2RlPSdbW0FCRFRdXScKKyAgOzsKK3N5c3Y0KQorICBzeW1jb2RlPSdbW0RGTlNUVV1dJworICA7OworZXNhYworCisjIElmIHdlJ3JlIHVzaW5nIEdOVSBubSwgdGhlbiB1c2UgaXRzIHN0YW5kYXJkIHN5bWJvbCBjb2Rlcy4KK2Nhc2UgYCROTSAtViAyPiYxYCBpbgorKkdOVSogfCAqJ3dpdGggQkZEJyopCisgIHN5bWNvZGU9J1tbQUJDREdJUlNUV11dJyA7OworZXNhYworCisjIFRyYW5zZm9ybSBhbiBleHRyYWN0ZWQgc3ltYm9sIGxpbmUgaW50byBhIHByb3BlciBDIGRlY2xhcmF0aW9uLgorIyBTb21lIHN5c3RlbXMgKGVzcC4gb24gaWE2NCkgbGluayBkYXRhIGFuZCBjb2RlIHN5bWJvbHMgZGlmZmVyZW50bHksCisjIHNvIHVzZSB0aGlzIGdlbmVyYWwgYXBwcm9hY2guCitsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0ic2VkIC1uIC1lICdzL15UIC4qIFwoLipcKSQvZXh0ZXJuIGludCBcMSgpOy9wJyAtZSAncy9eJHN5bWNvZGUqIC4qIFwoLipcKSQvZXh0ZXJuIGNoYXIgXDE7L3AnIgorCisjIFRyYW5zZm9ybSBhbiBleHRyYWN0ZWQgc3ltYm9sIGxpbmUgaW50byBzeW1ib2wgbmFtZSBhbmQgc3ltYm9sIGFkZHJlc3MKK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSJzZWQgLW4gLWUgJ3MvXjogXChbW14gXV0qXCkgJC8gIHtcXFwiXDFcXFwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFtbXiBdXSpcKSBcKFtbXiBdXSpcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCciCitsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4PSJzZWQgLW4gLWUgJ3MvXjogXChbW14gXV0qXCkgJC8gIHtcXFwiXDFcXFwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFtbXiBdXSpcKSBcKGxpYltbXiBdXSpcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFtbXiBdXSpcKSBcKFtbXiBdXSpcKSQvICB7XCJsaWJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCciCisKKyMgSGFuZGxlIENSTEYgaW4gbWluZ3cgdG9vbCBjaGFpbgorb3B0X2NyPQorY2FzZSAkYnVpbGRfb3MgaW4KK21pbmd3KikKKyAgb3B0X2NyPWAkRUNITyAneFx7MCwxXH0nIHwgdHIgeCAnXDAxNSdgICMgb3B0aW9uIGNyIGluIHJlZ2V4cAorICA7OworZXNhYworCisjIFRyeSB3aXRob3V0IGEgcHJlZml4IHVuZGVyc2NvcmUsIHRoZW4gd2l0aCBpdC4KK2ZvciBhY19zeW1wcmZ4IGluICIiICJfIjsgZG8KKworICAjIFRyYW5zZm9ybSBzeW1jb2RlLCBzeW1wYXQsIGFuZCBzeW1wcmZ4IGludG8gYSByYXcgc3ltYm9sIGFuZCBhIEMgc3ltYm9sLgorICBzeW14ZnJtPSJcXDEgJGFjX3N5bXByZnhcXDIgXFwyIgorCisgICMgV3JpdGUgdGhlIHJhdyBhbmQgQyBpZGVudGlmaWVycy4KKyAgaWYgdGVzdCAiJGx0X2N2X25tX2ludGVyZmFjZSIgPSAiTVMgZHVtcGJpbiI7IHRoZW4KKyAgICAjIEZha2UgaXQgZm9yIGR1bXBiaW4gYW5kIHNheSBUIGZvciBhbnkgbm9uLXN0YXRpYyBmdW5jdGlvbgorICAgICMgYW5kIEQgZm9yIGFueSBnbG9iYWwgdmFyaWFibGUuCisgICAgIyBBbHNvIGZpbmQgQysrIGFuZCBfX2Zhc3RjYWxsIHN5bWJvbHMgZnJvbSBNU1ZDKyssCisgICAgIyB3aGljaCBzdGFydCB3aXRoIEAgb3IgPy4KKyAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSIkQVdLIFsnIlwKKyIgICAgIHtsYXN0X3NlY3Rpb249c2VjdGlvbjsgc2VjdGlvbj1cJCAzfTsiXAorIiAgICAgL1NlY3Rpb24gbGVuZ3RoIC4qI3JlbG9jcy4qKHBpY2sgYW55KS97aGlkZVtsYXN0X3NlY3Rpb25dPTF9OyJcCisiICAgICBcJCAwIX4vRXh0ZXJuYWwgKlx8L3tuZXh0fTsiXAorIiAgICAgLyAwKyBVTkRFRiAve25leHR9OyAvIFVOREVGIFwoW158XVwpKigpL3tuZXh0fTsiXAorIiAgICAge2lmKGhpZGVbc2VjdGlvbl0pIG5leHR9OyJcCisiICAgICB7Zj0wfTsgXCQgMH4vXChcKS4qXHwve2Y9MX07IHtwcmludGYgZiA/IFwiVCBcIiA6IFwiRCBcIn07IlwKKyIgICAgIHtzcGxpdChcJCAwLCBhLCAvXHx8XHIvKTsgc3BsaXQoYVsyXSwgcyl9OyJcCisiICAgICBzWzFdfi9eW0A/XS97cHJpbnQgc1sxXSwgc1sxXTsgbmV4dH07IlwKKyIgICAgIHNbMV1+cHJmeCB7c3BsaXQoc1sxXSx0LFwiQFwiKTsgcHJpbnQgdFsxXSwgc3Vic3RyKHRbMV0sbGVuZ3RoKHByZngpKX0iXAorIiAgICAgJyBwcmZ4PV4kYWNfc3ltcHJmeF0iCisgIGVsc2UKKyAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSJzZWQgLW4gLWUgJ3MvXi4qW1sJIF1dXCgkc3ltY29kZSRzeW1jb2RlKlwpW1sJIF1dW1sJIF1dKiRhY19zeW1wcmZ4JHN5bXBhdCRvcHRfY3IkLyRzeW14ZnJtL3AnIgorICBmaQorCisgICMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhlIHBpcGUgd29ya3MgY29ycmVjdGx5LgorICBwaXBlX3dvcmtzPW5vCisKKyAgcm0gLWYgY29uZnRlc3QqCisgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxfTFRfRU9GCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCitjaGFyIG5tX3Rlc3RfdmFyOwordm9pZCBubV90ZXN0X2Z1bmModm9pZCk7Cit2b2lkIG5tX3Rlc3RfZnVuYyh2b2lkKXt9CisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgoraW50IG1haW4oKXtubV90ZXN0X3Zhcj0nYSc7bm1fdGVzdF9mdW5jKCk7cmV0dXJuKDApO30KK19MVF9FT0YKKworICBpZiBBQ19UUllfRVZBTChhY19jb21waWxlKTsgdGhlbgorICAgICMgTm93IHRyeSB0byBncmFiIHRoZSBzeW1ib2xzLgorICAgIG5saXN0PWNvbmZ0ZXN0Lm5tCisgICAgaWYgQUNfVFJZX0VWQUwoTk0gY29uZnRlc3QuJGFjX29iamV4dCBcfCAkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSBcPiAkbmxpc3QpICYmIHRlc3QgLXMgIiRubGlzdCI7IHRoZW4KKyAgICAgICMgVHJ5IHNvcnRpbmcgYW5kIHVuaXF1aWZ5aW5nIHRoZSBvdXRwdXQuCisgICAgICBpZiBzb3J0ICIkbmxpc3QiIHwgdW5pcSA+ICIkbmxpc3QiVDsgdGhlbgorCW12IC1mICIkbmxpc3QiVCAiJG5saXN0IgorICAgICAgZWxzZQorCXJtIC1mICIkbmxpc3QiVAorICAgICAgZmkKKworICAgICAgIyBNYWtlIHN1cmUgdGhhdCB3ZSBzbmFnZ2VkIGFsbCB0aGUgc3ltYm9scyB3ZSBuZWVkLgorICAgICAgaWYgJEdSRVAgJyBubV90ZXN0X3ZhciQnICIkbmxpc3QiID4vZGV2L251bGw7IHRoZW4KKwlpZiAkR1JFUCAnIG5tX3Rlc3RfZnVuYyQnICIkbmxpc3QiID4vZGV2L251bGw7IHRoZW4KKwkgIGNhdCA8PF9MVF9FT0YgPiBjb25mdGVzdC4kYWNfZXh0CisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKK19MVF9FT0YKKwkgICMgTm93IGdlbmVyYXRlIHRoZSBzeW1ib2wgZmlsZS4KKwkgIGV2YWwgIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCInIDwgIiRubGlzdCIgfCAkR1JFUCAtdiBtYWluID4+IGNvbmZ0ZXN0LiRhY19leHQnCisKKwkgIGNhdCA8PF9MVF9FT0YgPj4gY29uZnRlc3QuJGFjX2V4dAorCisvKiBUaGUgbWFwcGluZyBiZXR3ZWVuIHN5bWJvbCBuYW1lcyBhbmQgc3ltYm9scy4gICovCitjb25zdCBzdHJ1Y3QgeworICBjb25zdCBjaGFyICpuYW1lOworICB2b2lkICAgICAgICphZGRyZXNzOworfQorbHRfX1BST0dSQU1fX0xUWF9wcmVsb2FkZWRfc3ltYm9sc1tbXV0gPQoreworICB7ICJAUFJPR1JBTUAiLCAodm9pZCAqKSAwIH0sCitfTFRfRU9GCisJICAkU0VEICJzL14kc3ltY29kZSRzeW1jb2RlKiBcKC4qXCkgXCguKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC8iIDwgIiRubGlzdCIgfCAkR1JFUCAtdiBtYWluID4+IGNvbmZ0ZXN0LiRhY19leHQKKwkgIGNhdCA8PFxfTFRfRU9GID4+IGNvbmZ0ZXN0LiRhY19leHQKKyAgezAsICh2b2lkICopIDB9Cit9OworCisvKiBUaGlzIHdvcmtzIGFyb3VuZCBhIHByb2JsZW0gaW4gRnJlZUJTRCBsaW5rZXIgKi8KKyNpZmRlZiBGUkVFQlNEX1dPUktBUk9VTkQKK3N0YXRpYyBjb25zdCB2b2lkICpsdF9wcmVsb2FkZWRfc2V0dXAoKSB7CisgIHJldHVybiBsdF9fUFJPR1JBTV9fTFRYX3ByZWxvYWRlZF9zeW1ib2xzOworfQorI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCitfTFRfRU9GCisJICAjIE5vdyB0cnkgbGlua2luZyB0aGUgdHdvIGZpbGVzLgorCSAgbXYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdHN0bS4kYWNfb2JqZXh0CisJICBsdF9zYXZlX0xJQlM9IiRMSUJTIgorCSAgbHRfc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCisJICBMSUJTPSJjb25mdHN0bS4kYWNfb2JqZXh0IgorCSAgQ0ZMQUdTPSIkQ0ZMQUdTJF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcsICQxKSIKKwkgIGlmIEFDX1RSWV9FVkFMKGFjX2xpbmspICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKwkgICAgcGlwZV93b3Jrcz15ZXMKKwkgIGZpCisJICBMSUJTPSIkbHRfc2F2ZV9MSUJTIgorCSAgQ0ZMQUdTPSIkbHRfc2F2ZV9DRkxBR1MiCisJZWxzZQorCSAgZWNobyAiY2Fubm90IGZpbmQgbm1fdGVzdF9mdW5jIGluICRubGlzdCIgPiZBU19NRVNTQUdFX0xPR19GRAorCWZpCisgICAgICBlbHNlCisJZWNobyAiY2Fubm90IGZpbmQgbm1fdGVzdF92YXIgaW4gJG5saXN0IiA+JkFTX01FU1NBR0VfTE9HX0ZECisgICAgICBmaQorICAgIGVsc2UKKyAgICAgIGVjaG8gImNhbm5vdCBydW4gJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUiID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgICBmaQorICBlbHNlCisgICAgZWNobyAiJHByb2duYW1lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JkFTX01FU1NBR0VfTE9HX0ZECisgICAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIGZpCisgIHJtIC1yZiBjb25mdGVzdCogY29uZnRzdCoKKworICAjIERvIG5vdCB1c2UgdGhlIGdsb2JhbF9zeW1ib2xfcGlwZSB1bmxlc3MgaXQgd29ya3MuCisgIGlmIHRlc3QgIiRwaXBlX3dvcmtzIiA9IHllczsgdGhlbgorICAgIGJyZWFrCisgIGVsc2UKKyAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPQorICBmaQorZG9uZQorXSkKK2lmIHRlc3QgLXogIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIjsgdGhlbgorICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0KK2ZpCitpZiB0ZXN0IC16ICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCI7IHRoZW4KKyAgQUNfTVNHX1JFU1VMVChmYWlsZWQpCitlbHNlCisgIEFDX01TR19SRVNVTFQob2spCitmaQorCitfTFRfREVDTChbZ2xvYmFsX3N5bWJvbF9waXBlXSwgW2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGVdLCBbMV0sCisgICAgW1Rha2UgdGhlIG91dHB1dCBvZiBubSBhbmQgcHJvZHVjZSBhIGxpc3Rpbmcgb2YgcmF3IHN5bWJvbHMgYW5kIEMgbmFtZXNdKQorX0xUX0RFQ0woW2dsb2JhbF9zeW1ib2xfdG9fY2RlY2xdLCBbbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2xdLCBbMV0sCisgICAgW1RyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgcHJvcGVyIEMgZGVjbGFyYXRpb25dKQorX0xUX0RFQ0woW2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NdLAorICAgIFtsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc10sIFsxXSwKKyAgICBbVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW4gYSBDIG5hbWUgYWRkcmVzcyBwYWlyXSkKK19MVF9ERUNMKFtnbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXhdLAorICAgIFtsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4XSwgWzFdLAorICAgIFtUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbiBhIEMgbmFtZSBhZGRyZXNzIHBhaXIgd2hlbiBsaWIgcHJlZml4IGlzIG5lZWRlZF0pCitdKSAjIF9MVF9DTURfR0xPQkFMX1NZTUJPTFMKKworCisjIF9MVF9DT01QSUxFUl9QSUMoW1RBR05BTUVdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZnVuKFtfTFRfQ09NUElMRVJfUElDXSwKK1ttNF9yZXF1aXJlKFtfTFRfVEFHX0NPTVBJTEVSXSlkbmwKK19MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPQorX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPQorX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPQorCitBQ19NU0dfQ0hFQ0tJTkcoW2ZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDXSkKK200X2lmKFskMV0sIFtDWFhdLCBbCisgICMgQysrIHNwZWNpZmljIGNhc2VzIGZvciBwaWMsIHN0YXRpYywgd2wsIGV0Yy4KKyAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KKyAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKyAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1zdGF0aWMnCisKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgYWl4KikKKyAgICAgICMgQWxsIEFJWCBjb2RlIGlzIFBJQy4KKyAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisJIyBBSVggNSBub3cgc3VwcG9ydHMgSUE2NCBwcm9jZXNzb3IKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBhbWlnYW9zKikKKyAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICBwb3dlcnBjKQorICAgICAgICAgICAgIyBzZWUgY29tbWVudCBhYm91dCBBbWlnYU9TNCAuc28gc3VwcG9ydAorICAgICAgICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZlBJQycKKyAgICAgICAgOzsKKyAgICAgIG02OGspCisgICAgICAgICAgICAjIEZJWE1FOiB3ZSBuZWVkIGF0IGxlYXN0IDY4MDIwIGNvZGUgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcywgYnV0CisgICAgICAgICAgICAjIGFkZGluZyB0aGUgYC1tNjgwMjAnIGZsYWcgdG8gR0NDIHByZXZlbnRzIGJ1aWxkaW5nIGFueXRoaW5nIGJldHRlciwKKyAgICAgICAgICAgICMgbGlrZSBgLW02ODA0MCcuCisgICAgICAgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1tNjgwMjAgLXJlc2lkZW50MzIgLW1hbHdheXMtcmVzdG9yZS1hNCcKKyAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICBiZW9zKiB8IGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCogfCBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgdGhlc2UgT1Nlcy4KKyAgICAgIDs7CisgICAgbWluZ3cqIHwgY3lnd2luKiB8IG9zMiogfCBwdzMyKiB8IGNlZ2NjKikKKyAgICAgICMgVGhpcyBoYWNrIGlzIHNvIHRoYXQgdGhlIHNvdXJjZSBmaWxlIGNhbiB0ZWxsIHdoZXRoZXIgaXQgaXMgYmVpbmcKKyAgICAgICMgYnVpbHQgZm9yIGluY2x1c2lvbiBpbiBhIGRsbCAoYW5kIHNob3VsZCBleHBvcnQgc3ltYm9scyBmb3IgZXhhbXBsZSkuCisgICAgICAjIEFsdGhvdWdoIHRoZSBjeWd3aW4gZ2NjIGlnbm9yZXMgLWZQSUMsIHN0aWxsIG5lZWQgdGhpcyBmb3Igb2xkLXN0eWxlCisgICAgICAjICgtLWRpc2FibGUtYXV0by1pbXBvcnQpIGxpYnJhcmllcworICAgICAgbTRfaWYoWyQxXSwgW0dDSl0sIFtdLAorCVtfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1ERExMX0VYUE9SVCddKQorICAgICAgOzsKKyAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQorICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgb24gdGhpcyBwbGF0Zm9ybQorICAgICAgIyBDb21tb24gc3ltYm9scyBub3QgYWxsb3dlZCBpbiBNSF9EWUxJQiBmaWxlcworICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZm5vLWNvbW1vbicKKyAgICAgIDs7CisgICAgKmRqZ3BwKikKKyAgICAgICMgREpHUFAgZG9lcyBub3Qgc3VwcG9ydCBzaGFyZWQgbGlicmFyaWVzIGF0IGFsbAorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPQorICAgICAgOzsKKyAgICBpbnRlcml4W1szLTldXSopCisgICAgICAjIEludGVyaXggMy54IGdjYyAtZnBpYy8tZlBJQyBvcHRpb25zIGdlbmVyYXRlIGJyb2tlbiBjb2RlLgorICAgICAgIyBJbnN0ZWFkLCB3ZSByZWxvY2F0ZSBzaGFyZWQgbGlicmFyaWVzIGF0IHJ1bnRpbWUuCisgICAgICA7OworICAgIHN5c3Y0Kk1QKikKKyAgICAgIGlmIHRlc3QgLWQgL3Vzci9uZWM7IHRoZW4KKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9LUtjb25mb3JtX3BpYworICAgICAgZmkKKyAgICAgIDs7CisgICAgaHB1eCopCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgNjQtYml0IFBBIEhQLVVYLCBidXQgbm90IGZvciAzMi1iaXQKKyAgICAgICMgUEEgSFAtVVguICBPbiBJQTY0IEhQLVVYLCBQSUMgaXMgdGhlIGRlZmF1bHQgYnV0IHRoZSBwaWMgZmxhZworICAgICAgIyBzZXRzIHRoZSBkZWZhdWx0IFRMUyBtb2RlbCBhbmQgYWZmZWN0cyBpbmxpbmluZy4KKyAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICBocHBhKjY0KikKKwk7OworICAgICAgKikKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDJworCTs7CisgICAgICBlc2FjCisgICAgICA7OworICAgICpxbngqIHwgKm50byopCisgICAgICAjIFFOWCB1c2VzIEdOVSBDKyssIGJ1dCBuZWVkIHRvIGRlZmluZSAtc2hhcmVkIG9wdGlvbiB0b28sIG90aGVyd2lzZQorICAgICAgIyBpdCB3aWxsIGNvcmVkdW1wLgorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZlBJQyAtc2hhcmVkJworICAgICAgOzsKKyAgICAqKQorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZlBJQycKKyAgICAgIDs7CisgICAgZXNhYworICBlbHNlCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgYWl4W1s0LTldXSopCisJIyBBbGwgQUlYIGNvZGUgaXMgUElDLgorCWlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisJICAjIEFJWCA1IG5vdyBzdXBwb3J0cyBJQTY0IHByb2Nlc3NvcgorCSAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKwllbHNlCisJICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1ibnNvIC1iSTovbGliL3N5c2NhbGxzLmV4cCcKKwlmaQorCTs7CisgICAgICBjaG9ydXMqKQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJY3hjaDY4KikKKwkgICMgR3JlZW4gSGlsbHMgQysrIENvbXBpbGVyCisJICAjIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0iLS1ub19hdXRvX2luc3RhbnRpYXRpb24gLXUgX19tYWluIC11IF9fcHJlbWFpbiAtdSBfYWJvcnQgLXIgJENPT0xfRElSL2xpYi9saWJPcmIuYSAkTVZNRV9ESVIvbGliL0NDL2xpYkMuYSAkTVZNRV9ESVIvbGliL2NsYXNzaXgvbGliY3gucy5hIgorCSAgOzsKKwllc2FjCisJOzsKKyAgICAgIGRndXgqKQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBlYysrKikKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKKwkgICAgOzsKKwkgIGdoY3gqKQorCSAgICAjIEdyZWVuIEhpbGxzIEMrKyBDb21waWxlcgorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1waWMnCisJICAgIDs7CisJICAqKQorCSAgICA7OworCWVzYWMKKwk7OworICAgICAgZnJlZWJzZCogfCBkcmFnb25mbHkqKQorCSMgRnJlZUJTRCB1c2VzIEdOVSBDKysKKwk7OworICAgICAgaHB1eDkqIHwgaHB1eDEwKiB8IGhwdXgxMSopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIENDKikKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nJHt3bH0tYSAke3dsfWFyY2hpdmUnCisJICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgIT0gaWE2NDsgdGhlbgorCSAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nK1onCisJICAgIGZpCisJICAgIDs7CisJICBhQ0MqKQorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPScke3dsfS1hICR7d2x9YXJjaGl2ZScKKwkgICAgY2FzZSAkaG9zdF9jcHUgaW4KKwkgICAgaHBwYSo2NCp8aWE2NCopCisJICAgICAgIyArWiB0aGUgZGVmYXVsdAorCSAgICAgIDs7CisJICAgICopCisJICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPScrWicKKwkgICAgICA7OworCSAgICBlc2FjCisJICAgIDs7CisJICAqKQorCSAgICA7OworCWVzYWMKKwk7OworICAgICAgaW50ZXJpeCopCisJIyBUaGlzIGlzIGM4OSwgd2hpY2ggaXMgTVMgVmlzdWFsIEMrKyAobm8gc2hhcmVkIGxpYnMpCisJIyBBbnlvbmUgd2FudHMgdG8gZG8gYSBwb3J0PworCTs7CisgICAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBDQyopCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1ub25fc2hhcmVkJworCSAgICAjIENDIHBpYyBmbGFnIC1LUElDIGlzIHRoZSBkZWZhdWx0LgorCSAgICA7OworCSAgKikKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgIGxpbnV4KiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSkKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgS0NDKikKKwkgICAgIyBLQUkgQysrIENvbXBpbGVyCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctLWJhY2tlbmQgLVdsLCcKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZlBJQycKKwkgICAgOzsKKwkgIGVjcGMqICkKKwkgICAgIyBvbGQgSW50ZWwgQysrIGZvciB4ODZfNjQgd2hpY2ggc3RpbGwgc3VwcG9ydGVkIC1LUElDLgorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctc3RhdGljJworCSAgICA7OworCSAgaWNwYyogKQorCSAgICAjIEludGVsIEMrKywgdXNlZCB0byBiZSBpbmNvbXBhdGlibGUgd2l0aCBHQ0MuCisJICAgICMgSUNDIDEwIGRvZXNuJ3QgYWNjZXB0IC1LUElDIGFueSBtb3JlLgorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZlBJQycKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctc3RhdGljJworCSAgICA7OworCSAgcGdDQyogfCBwZ2NwcCopCisJICAgICMgUG9ydGxhbmQgR3JvdXAgQysrIGNvbXBpbGVyCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mcGljJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworCSAgICA7OworCSAgY3h4KikKKwkgICAgIyBDb21wYXEgQysrCisJICAgICMgTWFrZSBzdXJlIHRoZSBQSUMgZmxhZyBpcyBlbXB0eS4gIEl0IGFwcGVhcnMgdGhhdCBhbGwgQWxwaGEKKwkgICAgIyBMaW51eCBhbmQgQ29tcGFxIFRydTY0IFVuaXggb2JqZWN0cyBhcmUgUElDLgorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9CisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLW5vbl9zaGFyZWQnCisJICAgIDs7CisJICB4bGMqIHwgeGxDKikKKwkgICAgIyBJQk0gWEwgOC4wIG9uIFBQQworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctcXBpYycKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctcXN0YXRpY2xpbmsnCisJICAgIDs7CisJICAqKQorCSAgICBjYXNlIGAkQ0MgLVYgMj4mMSB8IHNlZCA1cWAgaW4KKwkgICAgKlN1blwgQyopCisJICAgICAgIyBTdW4gQysrIDUuOQorCSAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCisJICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKwkgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVFvcHRpb24gbGQgJworCSAgICAgIDs7CisJICAgIGVzYWMKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgIGx5bnhvcyopCisJOzsKKyAgICAgIG04OGsqKQorCTs7CisgICAgICBtdnMqKQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBjeHgqKQorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1XIGMsZXhwb3J0YWxsJworCSAgICA7OworCSAgKikKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgIG5ldGJzZCogfCBuZXRic2RlbGYqLWdudSkKKwk7OworICAgICAgKnFueCogfCAqbnRvKikKKyAgICAgICAgIyBRTlggdXNlcyBHTlUgQysrLCBidXQgbmVlZCB0byBkZWZpbmUgLXNoYXJlZCBvcHRpb24gdG9vLCBvdGhlcndpc2UKKyAgICAgICAgIyBpdCB3aWxsIGNvcmVkdW1wLgorICAgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDIC1zaGFyZWQnCisgICAgICAgIDs7CisgICAgICBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIEtDQyopCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctLWJhY2tlbmQgLVdsLCcKKwkgICAgOzsKKwkgIFJDQyopCisJICAgICMgUmF0aW9uYWwgQysrIDIuNC4xCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLXBpYycKKwkgICAgOzsKKwkgIGN4eCopCisJICAgICMgRGlnaXRhbC9Db21wYXEgQysrCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCSAgICAjIE1ha2Ugc3VyZSB0aGUgUElDIGZsYWcgaXMgZW1wdHkuICBJdCBhcHBlYXJzIHRoYXQgYWxsIEFscGhhCisJICAgICMgTGludXggYW5kIENvbXBhcSBUcnU2NCBVbml4IG9iamVjdHMgYXJlIFBJQy4KKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPQorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1ub25fc2hhcmVkJworCSAgICA7OworCSAgKikKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgIHBzb3MqKQorCTs7CisgICAgICBzb2xhcmlzKikKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgQ0MqKQorCSAgICAjIFN1biBDKysgNC4yLCA1LnggYW5kIENlbnRlcmxpbmUgQysrCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctUW9wdGlvbiBsZCAnCisJICAgIDs7CisJICBnY3gqKQorCSAgICAjIEdyZWVuIEhpbGxzIEMrKyBDb21waWxlcgorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1QSUMnCisJICAgIDs7CisJICAqKQorCSAgICA7OworCWVzYWMKKwk7OworICAgICAgc3Vub3M0KikKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgQ0MqKQorCSAgICAjIFN1biBDKysgNC54CisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLXBpYycKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKwkgICAgOzsKKwkgIGxjYyopCisJICAgICMgTHVjaWQKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctcGljJworCSAgICA7OworCSAgKikKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgIHN5c3Y1KiB8IHVuaXh3YXJlKiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCBPcGVuVU5JWCopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIENDKikKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICB0YW5kZW0qKQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBOQ0MqKQorCSAgICAjIE5vblN0b3AtVVggTkNDIDMuMjAKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKKwkgICAgOzsKKwkgICopCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICB2eHdvcmtzKikKKwk7OworICAgICAgKikKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfY2FuX2J1aWxkX3NoYXJlZCwgJDEpPW5vCisJOzsKKyAgICBlc2FjCisgIGZpCitdLAorWworICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLXN0YXRpYycKKworICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIGFpeCopCisgICAgICAjIEFsbCBBSVggY29kZSBpcyBQSUMuCisgICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorCSMgQUlYIDUgbm93IHN1cHBvcnRzIElBNjQgcHJvY2Vzc29yCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKyAgICAgIGZpCisgICAgICA7OworCisgICAgYW1pZ2FvcyopCisgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgcG93ZXJwYykKKyAgICAgICAgICAgICMgc2VlIGNvbW1lbnQgYWJvdXQgQW1pZ2FPUzQgLnNvIHN1cHBvcnQKKyAgICAgICAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMnCisgICAgICAgIDs7CisgICAgICBtNjhrKQorICAgICAgICAgICAgIyBGSVhNRTogd2UgbmVlZCBhdCBsZWFzdCA2ODAyMCBjb2RlIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMsIGJ1dAorICAgICAgICAgICAgIyBhZGRpbmcgdGhlIGAtbTY4MDIwJyBmbGFnIHRvIEdDQyBwcmV2ZW50cyBidWlsZGluZyBhbnl0aGluZyBiZXR0ZXIsCisgICAgICAgICAgICAjIGxpa2UgYC1tNjgwNDAnLgorICAgICAgICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctbTY4MDIwIC1yZXNpZGVudDMyIC1tYWx3YXlzLXJlc3RvcmUtYTQnCisgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICA7OworCisgICAgYmVvcyogfCBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqIHwgb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQorICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIHRoZXNlIE9TZXMuCisgICAgICA7OworCisgICAgbWluZ3cqIHwgY3lnd2luKiB8IHB3MzIqIHwgb3MyKiB8IGNlZ2NjKikKKyAgICAgICMgVGhpcyBoYWNrIGlzIHNvIHRoYXQgdGhlIHNvdXJjZSBmaWxlIGNhbiB0ZWxsIHdoZXRoZXIgaXQgaXMgYmVpbmcKKyAgICAgICMgYnVpbHQgZm9yIGluY2x1c2lvbiBpbiBhIGRsbCAoYW5kIHNob3VsZCBleHBvcnQgc3ltYm9scyBmb3IgZXhhbXBsZSkuCisgICAgICAjIEFsdGhvdWdoIHRoZSBjeWd3aW4gZ2NjIGlnbm9yZXMgLWZQSUMsIHN0aWxsIG5lZWQgdGhpcyBmb3Igb2xkLXN0eWxlCisgICAgICAjICgtLWRpc2FibGUtYXV0by1pbXBvcnQpIGxpYnJhcmllcworICAgICAgbTRfaWYoWyQxXSwgW0dDSl0sIFtdLAorCVtfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1ERExMX0VYUE9SVCddKQorICAgICAgOzsKKworICAgIGRhcndpbiogfCByaGFwc29keSopCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBvbiB0aGlzIHBsYXRmb3JtCisgICAgICAjIENvbW1vbiBzeW1ib2xzIG5vdCBhbGxvd2VkIGluIE1IX0RZTElCIGZpbGVzCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mbm8tY29tbW9uJworICAgICAgOzsKKworICAgIGhwdXgqKQorICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIDY0LWJpdCBQQSBIUC1VWCwgYnV0IG5vdCBmb3IgMzItYml0CisgICAgICAjIFBBIEhQLVVYLiAgT24gSUE2NCBIUC1VWCwgUElDIGlzIHRoZSBkZWZhdWx0IGJ1dCB0aGUgcGljIGZsYWcKKyAgICAgICMgc2V0cyB0aGUgZGVmYXVsdCBUTFMgbW9kZWwgYW5kIGFmZmVjdHMgaW5saW5pbmcuCisgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgaHBwYSo2NCopCisJIyArWiB0aGUgZGVmYXVsdAorCTs7CisgICAgICAqKQorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMnCisJOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICBpbnRlcml4W1szLTldXSopCisgICAgICAjIEludGVyaXggMy54IGdjYyAtZnBpYy8tZlBJQyBvcHRpb25zIGdlbmVyYXRlIGJyb2tlbiBjb2RlLgorICAgICAgIyBJbnN0ZWFkLCB3ZSByZWxvY2F0ZSBzaGFyZWQgbGlicmFyaWVzIGF0IHJ1bnRpbWUuCisgICAgICA7OworCisgICAgbXNkb3NkamdwcCopCisgICAgICAjIEp1c3QgYmVjYXVzZSB3ZSB1c2UgR0NDIGRvZXNuJ3QgbWVhbiB3ZSBzdWRkZW5seSBnZXQgc2hhcmVkIGxpYnJhcmllcworICAgICAgIyBvbiBzeXN0ZW1zIHRoYXQgZG9uJ3Qgc3VwcG9ydCB0aGVtLgorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX2Nhbl9idWlsZF9zaGFyZWQsICQxKT1ubworICAgICAgZW5hYmxlX3NoYXJlZD1ubworICAgICAgOzsKKworICAgICpudG8qIHwgKnFueCopCisgICAgICAjIFFOWCB1c2VzIEdOVSBDKyssIGJ1dCBuZWVkIHRvIGRlZmluZSAtc2hhcmVkIG9wdGlvbiB0b28sIG90aGVyd2lzZQorICAgICAgIyBpdCB3aWxsIGNvcmVkdW1wLgorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZlBJQyAtc2hhcmVkJworICAgICAgOzsKKworICAgIHN5c3Y0Kk1QKikKKyAgICAgIGlmIHRlc3QgLWQgL3Vzci9uZWM7IHRoZW4KKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9LUtjb25mb3JtX3BpYworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICAqKQorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZlBJQycKKyAgICAgIDs7CisgICAgZXNhYworICBlbHNlCisgICAgIyBQT1JUTUUgQ2hlY2sgZm9yIGZsYWcgdG8gcGFzcyBsaW5rZXIgZmxhZ3MgdGhyb3VnaCB0aGUgc3lzdGVtIGNvbXBpbGVyLgorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBhaXgqKQorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisgICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorCSMgQUlYIDUgbm93IHN1cHBvcnRzIElBNjQgcHJvY2Vzc29yCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKyAgICAgIGVsc2UKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1ibnNvIC1iSTovbGliL3N5c2NhbGxzLmV4cCcKKyAgICAgIGZpCisgICAgICA7OworCisgICAgbWluZ3cqIHwgY3lnd2luKiB8IHB3MzIqIHwgb3MyKiB8IGNlZ2NjKikKKyAgICAgICMgVGhpcyBoYWNrIGlzIHNvIHRoYXQgdGhlIHNvdXJjZSBmaWxlIGNhbiB0ZWxsIHdoZXRoZXIgaXQgaXMgYmVpbmcKKyAgICAgICMgYnVpbHQgZm9yIGluY2x1c2lvbiBpbiBhIGRsbCAoYW5kIHNob3VsZCBleHBvcnQgc3ltYm9scyBmb3IgZXhhbXBsZSkuCisgICAgICBtNF9pZihbJDFdLCBbR0NKXSwgW10sCisJW19MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLURETExfRVhQT1JUJ10pCisgICAgICA7OworCisgICAgaHB1eDkqIHwgaHB1eDEwKiB8IGhwdXgxMSopCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKyAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IGZvciBJQTY0IEhQLVVYIGFuZCA2NC1iaXQgSFAtVVgsIGJ1dAorICAgICAgIyBub3QgZm9yIFBBIEhQLVVYLgorICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgICAgIGhwcGEqNjQqfGlhNjQqKQorCSMgK1ogdGhlIGRlZmF1bHQKKwk7OworICAgICAgKikKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9JytaJworCTs7CisgICAgICBlc2FjCisgICAgICAjIElzIHRoZXJlIGEgYmV0dGVyIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljIHRoYXQgd29ya3Mgd2l0aCB0aGUgYnVuZGxlZCBDQz8KKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nJHt3bH0tYSAke3dsfWFyY2hpdmUnCisgICAgICA7OworCisgICAgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworICAgICAgIyBQSUMgKHdpdGggLUtQSUMpIGlzIHRoZSBkZWZhdWx0LgorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctbm9uX3NoYXJlZCcKKyAgICAgIDs7CisKKyAgICBsaW51eCogfCBrKmJzZCotZ251IHwga29wZW5zb2xhcmlzKi1nbnUpCisgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgIyBvbGQgSW50ZWwgZm9yIHg4Nl82NCB3aGljaCBzdGlsbCBzdXBwb3J0ZWQgLUtQSUMuCisgICAgICBlY2MqKQorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctc3RhdGljJworICAgICAgICA7OworICAgICAgIyBpY2MgdXNlZCB0byBiZSBpbmNvbXBhdGlibGUgd2l0aCBHQ0MuCisgICAgICAjIElDQyAxMCBkb2Vzbid0IGFjY2VwdCAtS1BJQyBhbnkgbW9yZS4KKyAgICAgIGljYyogfCBpZm9ydCopCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZlBJQycKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1zdGF0aWMnCisgICAgICAgIDs7CisgICAgICAjIExhaGV5IEZvcnRyYW4gOC4xLgorICAgICAgbGY5NSopCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctLXNoYXJlZCcKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy0tc3RhdGljJworCTs7CisgICAgICBwZ2NjKiB8IHBnZjc3KiB8IHBnZjkwKiB8IHBnZjk1KikKKyAgICAgICAgIyBQb3J0bGFuZCBHcm91cCBjb21waWxlcnMgKCpub3QqIHRoZSBQZW50aXVtIGdjYyBjb21waWxlciwKKwkjIHdoaWNoIGxvb2tzIHRvIGJlIGEgZGVhZCBwcm9qZWN0KQorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZwaWMnCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKyAgICAgICAgOzsKKyAgICAgIGNjYyopCisgICAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworICAgICAgICAjIEFsbCBBbHBoYSBjb2RlIGlzIFBJQy4KKyAgICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctbm9uX3NoYXJlZCcKKyAgICAgICAgOzsKKyAgICAgIHhsKikKKwkjIElCTSBYTCBDIDguMC9Gb3J0cmFuIDEwLjEgb24gUFBDCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctcXBpYycKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1xc3RhdGljbGluaycKKwk7OworICAgICAgKikKKwljYXNlIGAkQ0MgLVYgMj4mMSB8IHNlZCA1cWAgaW4KKwkqU3VuXCBDKikKKwkgICMgU3VuIEMgNS45CisJICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJworCSAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKwkgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCSAgOzsKKwkqU3VuXCBGKikKKwkgICMgU3VuIEZvcnRyYW4gOC4zIHBhc3NlcyBhbGwgdW5yZWNvZ25pemVkIGZsYWdzIHRvIHRoZSBsaW5rZXIKKwkgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCisJICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworCSAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9JycKKwkgIDs7CisJZXNhYworCTs7CisgICAgICBlc2FjCisgICAgICA7OworCisgICAgbmV3c29zNikKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworICAgICAgOzsKKworICAgICpudG8qIHwgKnFueCopCisgICAgICAjIFFOWCB1c2VzIEdOVSBDKyssIGJ1dCBuZWVkIHRvIGRlZmluZSAtc2hhcmVkIG9wdGlvbiB0b28sIG90aGVyd2lzZQorICAgICAgIyBpdCB3aWxsIGNvcmVkdW1wLgorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZlBJQyAtc2hhcmVkJworICAgICAgOzsKKworICAgIG9zZjMqIHwgb3NmNCogfCBvc2Y1KikKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworICAgICAgIyBBbGwgT1NGLzEgY29kZSBpcyBQSUMuCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1ub25fc2hhcmVkJworICAgICAgOzsKKworICAgIHJkb3MqKQorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctbm9uX3NoYXJlZCcKKyAgICAgIDs7CisKKyAgICBzb2xhcmlzKikKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgIGY3NyogfCBmOTAqIHwgZjk1KikKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVFvcHRpb24gbGQgJzs7CisgICAgICAqKQorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJzs7CisgICAgICBlc2FjCisgICAgICA7OworCisgICAgc3Vub3M0KikKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctUW9wdGlvbiBsZCAnCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1QSUMnCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworICAgICAgOzsKKworICAgIHN5c3Y0IHwgc3lzdjQuMnV3MiogfCBzeXN2NC4zKikKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisgICAgICA7OworCisgICAgc3lzdjQqTVAqKQorICAgICAgaWYgdGVzdCAtZCAvdXNyL25lYyA7dGhlbgorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtjb25mb3JtX3BpYycKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBzeXN2NSogfCB1bml4d2FyZSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgT3BlblVOSVgqKQorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJworICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKyAgICAgIDs7CisKKyAgICB1bmljb3MqKQorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfY2FuX2J1aWxkX3NoYXJlZCwgJDEpPW5vCisgICAgICA7OworCisgICAgdXRzNCopCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1waWMnCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworICAgICAgOzsKKworICAgICopCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfY2FuX2J1aWxkX3NoYXJlZCwgJDEpPW5vCisgICAgICA7OworICAgIGVzYWMKKyAgZmkKK10pCitjYXNlICRob3N0X29zIGluCisgICMgRm9yIHBsYXRmb3JtcyB3aGljaCBkbyBub3Qgc3VwcG9ydCBQSUMsIC1EUElDIGlzIG1lYW5pbmdsZXNzOgorICAqZGpncHAqKQorICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0KKyAgICA7OworICAqKQorICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0iJF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKUAmdEBtNF9pZihbJDFdLFtdLFsgLURQSUNdLFttNF9pZihbJDFdLFtDWFhdLFsgLURQSUNdLFtdKV0pIgorICAgIDs7Citlc2FjCitBQ19NU0dfUkVTVUxUKFskX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpXSkKK19MVF9UQUdERUNMKFt3bF0sIFtsdF9wcm9nX2NvbXBpbGVyX3dsXSwgWzFdLAorCVtIb3cgdG8gcGFzcyBhIGxpbmtlciBmbGFnIHRocm91Z2ggdGhlIGNvbXBpbGVyXSkKKworIworIyBDaGVjayB0byBtYWtlIHN1cmUgdGhlIFBJQyBmbGFnIGFjdHVhbGx5IHdvcmtzLgorIworaWYgdGVzdCAtbiAiJF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKSI7IHRoZW4KKyAgX0xUX0NPTVBJTEVSX09QVElPTihbaWYgJGNvbXBpbGVyIFBJQyBmbGFnICRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSkgd29ya3NdLAorICAgIFtfTFRfVEFHVkFSKGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzLCAkMSldLAorICAgIFskX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpQCZ0QG00X2lmKFskMV0sW10sWyAtRFBJQ10sW200X2lmKFskMV0sW0NYWF0sWyAtRFBJQ10sW10pXSldLCBbXSwKKyAgICBbY2FzZSAkX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpIGluCisgICAgICIiIHwgIiAiKikgOzsKKyAgICAgKikgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSIgJF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKSIgOzsKKyAgICAgZXNhY10sCisgICAgW19MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0KKyAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX2Nhbl9idWlsZF9zaGFyZWQsICQxKT1ub10pCitmaQorX0xUX1RBR0RFQ0woW3BpY19mbGFnXSwgW2x0X3Byb2dfY29tcGlsZXJfcGljXSwgWzFdLAorCVtBZGRpdGlvbmFsIGNvbXBpbGVyIGZsYWdzIGZvciBidWlsZGluZyBsaWJyYXJ5IG9iamVjdHNdKQorCisjCisjIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgc3RhdGljIGZsYWcgYWN0dWFsbHkgd29ya3MuCisjCit3bD0kX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSkgZXZhbCBsdF90bXBfc3RhdGljX2ZsYWc9XCIkX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpXCIKK19MVF9MSU5LRVJfT1BUSU9OKFtpZiAkY29tcGlsZXIgc3RhdGljIGZsYWcgJGx0X3RtcF9zdGF0aWNfZmxhZyB3b3Jrc10sCisgIF9MVF9UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3MsICQxKSwKKyAgJGx0X3RtcF9zdGF0aWNfZmxhZywKKyAgW10sCisgIFtfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9XSkKK19MVF9UQUdERUNMKFtsaW5rX3N0YXRpY19mbGFnXSwgW2x0X3Byb2dfY29tcGlsZXJfc3RhdGljXSwgWzFdLAorCVtDb21waWxlciBmbGFnIHRvIHByZXZlbnQgZHluYW1pYyBsaW5raW5nXSkKK10pIyBfTFRfQ09NUElMRVJfUElDCisKKworIyBfTFRfTElOS0VSX1NITElCUyhbVEFHTkFNRV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgU2VlIGlmIHRoZSBsaW5rZXIgc3VwcG9ydHMgYnVpbGRpbmcgc2hhcmVkIGxpYnJhcmllcy4KK200X2RlZnVuKFtfTFRfTElOS0VSX1NITElCU10sCitbQUNfUkVRVUlSRShbTFRfUEFUSF9MRF0pZG5sCitBQ19SRVFVSVJFKFtMVF9QQVRIX05NXSlkbmwKK200X3JlcXVpcmUoW19MVF9GSUxFVVRJTFNfREVGQVVMVFNdKWRubAorbTRfcmVxdWlyZShbX0xUX0RFQ0xfRUdSRVBdKWRubAorbTRfcmVxdWlyZShbX0xUX0RFQ0xfU0VEXSlkbmwKK200X3JlcXVpcmUoW19MVF9DTURfR0xPQkFMX1NZTUJPTFNdKWRubAorbTRfcmVxdWlyZShbX0xUX1RBR19DT01QSUxFUl0pZG5sCitBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdGhlICRjb21waWxlciBsaW5rZXIgKCRMRCkgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllc10pCittNF9pZihbJDFdLCBbQ1hYXSwgWworICBfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEICdcJydzLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworICBjYXNlICRob3N0X29zIGluCisgIGFpeFtbNC05XV0qKQorICAgICMgSWYgd2UncmUgdXNpbmcgR05VIG5tLCB0aGVuIHdlIGRvbid0IHdhbnQgdGhlICItQyIgb3B0aW9uLgorICAgICMgLUMgbWVhbnMgZGVtYW5nbGUgdG8gQUlYIG5tLCBidXQgbWVhbnMgZG9uJ3QgZGVtYW5nbGUgd2l0aCBHTlUgbm0KKyAgICBpZiAkTk0gLVYgMj4mMSB8ICRHUkVQICdHTlUnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NIC1CcGcgJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgYXdrICdcJyd7IGlmICgoKFwkIDIgPT0gIlQiKSB8fCAoXCQgMiA9PSAiRCIpIHx8IChcJCAyID09ICJCIikpICYmIChbc3Vic3RyXShcJCAzLDEsMSkgIT0gIi4iKSkgeyBwcmludCBcJCAzIH0gfSdcJycgfCBzb3J0IC11ID4gJGV4cG9ydF9zeW1ib2xzJworICAgIGVsc2UKKyAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gLUJDcGcgJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgYXdrICdcJyd7IGlmICgoKFwkIDIgPT0gIlQiKSB8fCAoXCQgMiA9PSAiRCIpIHx8IChcJCAyID09ICJCIikpICYmIChbc3Vic3RyXShcJCAzLDEsMSkgIT0gIi4iKSkgeyBwcmludCBcJCAzIH0gfSdcJycgfCBzb3J0IC11ID4gJGV4cG9ydF9zeW1ib2xzJworICAgIGZpCisgICAgOzsKKyAgcHczMiopCisgICAgX0xUX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9IiRsdGRsbF9jbWRzIgorICA7OworICBjeWd3aW4qIHwgbWluZ3cqIHwgY2VnY2MqKQorICAgIF9MVF9UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW1tCQ0RHUlNdXVtbIF1dL3MvLipbWyBdXVwoW1teIF1dKlwpL1wxIERBVEEvOy9eLipbWyBdXV9fbm1fXy9zL14uKltbIF1dX19ubV9fXChbW14gXV0qXClbWyBdXVtbXiBdXSovXDEgREFUQS87L15JW1sgXV0vZDsvXltbQUlUV11dW1sgXV0vcy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKyAgOzsKKyAgbGludXgqIHwgaypic2QqLWdudSkKKyAgICBfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT1ubworICA7OworICAqKQorICAgIF9MVF9UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgJ1wnJ3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisgIDs7CisgIGVzYWMKKyAgX0xUX1RBR1ZBUihleGNsdWRlX2V4cHN5bXMsICQxKT1bJ19HTE9CQUxfT0ZGU0VUX1RBQkxFX3xfR0xPQkFMX19GW0lEXV8uKiddCitdLCBbCisgIHJ1bnBhdGhfdmFyPQorICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9CisgIF9MVF9UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9bm8KKyAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0KKyAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9CisgIF9MVF9UQUdWQVIoY29tcGlsZXJfbmVlZHNfb2JqZWN0LCAkMSk9bm8KKyAgX0xUX1RBR1ZBUihlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzLCAkMSk9bm8KKyAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0KKyAgX0xUX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAnXCcncy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKyAgX0xUX1RBR1ZBUihoYXJkY29kZV9hdXRvbWF0aWMsICQxKT1ubworICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vCisgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlLCAkMSk9bm8KKyAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9CisgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZCwgJDEpPQorICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT0KKyAgX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9bm8KKyAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9dW5zdXBwb3J0ZWQKKyAgX0xUX1RBR1ZBUihpbmhlcml0X3JwYXRoLCAkMSk9bm8KKyAgX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9dW5rbm93bgorICBfTFRfVEFHVkFSKG1vZHVsZV9jbWRzLCAkMSk9CisgIF9MVF9UQUdWQVIobW9kdWxlX2V4cHN5bV9jbWRzLCAkMSk9CisgIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcywgJDEpPQorICBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzLCAkMSk9CisgIF9MVF9UQUdWQVIodGhyZWFkX3NhZmVfZmxhZ19zcGVjLCAkMSk9CisgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0KKyAgIyBpbmNsdWRlX2V4cHN5bXMgc2hvdWxkIGJlIGEgbGlzdCBvZiBzcGFjZS1zZXBhcmF0ZWQgc3ltYm9scyB0byBiZSAqYWx3YXlzKgorICAjIGluY2x1ZGVkIGluIHRoZSBzeW1ib2wgbGlzdAorICBfTFRfVEFHVkFSKGluY2x1ZGVfZXhwc3ltcywgJDEpPQorICAjIGV4Y2x1ZGVfZXhwc3ltcyBjYW4gYmUgYW4gZXh0ZW5kZWQgcmVnZXhwIG9mIHN5bWJvbHMgdG8gZXhjbHVkZQorICAjIGl0IHdpbGwgYmUgd3JhcHBlZCBieSBgICgnIGFuZCBgKSQnLCBzbyBvbmUgbXVzdCBub3QgbWF0Y2ggYmVnaW5uaW5nIG9yCisgICMgZW5kIG9mIGxpbmUuICBFeGFtcGxlOiBgYXxiY3wuKmQuKicgd2lsbCBleGNsdWRlIHRoZSBzeW1ib2xzIGBhJyBhbmQgYGJjJywKKyAgIyBhcyB3ZWxsIGFzIGFueSBzeW1ib2wgdGhhdCBjb250YWlucyBgZCcuCisgIF9MVF9UQUdWQVIoZXhjbHVkZV9leHBzeW1zLCAkMSk9WydfR0xPQkFMX09GRlNFVF9UQUJMRV98X0dMT0JBTF9fRltJRF1fLionXQorICAjIEFsdGhvdWdoIF9HTE9CQUxfT0ZGU0VUX1RBQkxFXyBpcyBhIHZhbGlkIHN5bWJvbCBDIG5hbWUsIG1vc3QgYS5vdXQKKyAgIyBwbGF0Zm9ybXMgKGFiKXVzZSBpdCBpbiBQSUMgY29kZSwgYnV0IHRoZWlyIGxpbmtlcnMgZ2V0IGNvbmZ1c2VkIGlmCisgICMgdGhlIHN5bWJvbCBpcyBleHBsaWNpdGx5IHJlZmVyZW5jZWQuICBTaW5jZSBwb3J0YWJsZSBjb2RlIGNhbm5vdAorICAjIHJlbHkgb24gdGhpcyBzeW1ib2wgbmFtZSwgaXQncyBwcm9iYWJseSBmaW5lIHRvIG5ldmVyIGluY2x1ZGUgaXQgaW4KKyAgIyBwcmVsb2FkZWQgc3ltYm9sIHRhYmxlcy4KKyAgIyBFeGNsdWRlIHNoYXJlZCBsaWJyYXJ5IGluaXRpYWxpemF0aW9uL2ZpbmFsaXphdGlvbiBzeW1ib2xzLgorZG5sIE5vdGUgYWxzbyBhZGp1c3QgZXhjbHVkZV9leHBzeW1zIGZvciBDKysgYWJvdmUuCisgIGV4dHJhY3RfZXhwc3ltc19jbWRzPQorCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgICMgRklYTUU6IHRoZSBNU1ZDKysgcG9ydCBoYXNuJ3QgYmVlbiB0ZXN0ZWQgaW4gYSBsb29vb25nIHRpbWUKKyAgICAjIFdoZW4gbm90IHVzaW5nIGdjYywgd2UgY3VycmVudGx5IGFzc3VtZSB0aGF0IHdlIGFyZSB1c2luZworICAgICMgTWljcm9zb2Z0IFZpc3VhbCBDKysuCisgICAgaWYgdGVzdCAiJEdDQyIgIT0geWVzOyB0aGVuCisgICAgICB3aXRoX2dudV9sZD1ubworICAgIGZpCisgICAgOzsKKyAgaW50ZXJpeCopCisgICAgIyB3ZSBqdXN0IGhvcGUvYXNzdW1lIHRoaXMgaXMgZ2NjIGFuZCBub3QgYzg5ICg9IE1TVkMrKykKKyAgICB3aXRoX2dudV9sZD15ZXMKKyAgICA7OworICBvcGVuYnNkKikKKyAgICB3aXRoX2dudV9sZD1ubworICAgIDs7CisgIGxpbnV4KiB8IGsqYnNkKi1nbnUpCisgICAgX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9bm8KKyAgICA7OworICBlc2FjCisKKyAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT15ZXMKKyAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgorICAgICMgSWYgYXJjaGl2ZV9jbWRzIHJ1bnMgTEQsIG5vdCBDQywgd2xhcmMgc2hvdWxkIGJlIGVtcHR5CisgICAgd2xhcmM9JyR7d2x9JworCisgICAgIyBTZXQgc29tZSBkZWZhdWx0cyBmb3IgR05VIGxkIHdpdGggc2hhcmVkIGxpYnJhcnkgc3VwcG9ydC4gVGhlc2UKKyAgICAjIGFyZSByZXNldCBsYXRlciBpZiBzaGFyZWQgbGlicmFyaWVzIGFyZSBub3Qgc3VwcG9ydGVkLiBQdXR0aW5nIHRoZW0KKyAgICAjIGhlcmUgYWxsb3dzIHRoZW0gdG8gYmUgb3ZlcnJpZGRlbiBpZiBuZWNlc3NhcnkuCisgICAgcnVucGF0aF92YXI9TERfUlVOX1BBVEgKKyAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS1leHBvcnQtZHluYW1pYycKKyAgICAjIGFuY2llbnQgR05VIGxkIGRpZG4ndCBzdXBwb3J0IC0td2hvbGUtYXJjaGl2ZSBldC4gYWwuCisgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJ25vLXdob2xlLWFyY2hpdmUnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9IiR3bGFyYyInLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlICciJHdsYXJjIictLW5vLXdob2xlLWFyY2hpdmUnCisgICAgZWxzZQorICAgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPQorICAgIGZpCisgICAgc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nPW5vCisgICAgY2FzZSBgJExEIC12IDI+JjFgIGluCisgICAgICAqR05VXCBnb2xkKikgc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nPXllcyA7OworICAgICAgKlwgW1swMV1dLiogfCAqXCAyLltbMC05XV0uKiB8ICpcIDIuMTAuKikgOzsgIyBjYXRjaCB2ZXJzaW9ucyA8IDIuMTEKKyAgICAgICpcIDIuMTEuOTMuMC4yXCAqKSBzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmc9eWVzIDs7ICMgUkg3LjMgLi4uCisgICAgICAqXCAyLjExLjkyLjAuMTJcICopIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz15ZXMgOzsgIyBNYW5kcmFrZSA4LjIgLi4uCisgICAgICAqXCAyLjExLiopIDs7ICMgb3RoZXIgMi4xMSB2ZXJzaW9ucworICAgICAgKikgc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nPXllcyA7OworICAgIGVzYWMKKworICAgICMgU2VlIGlmIEdOVSBsZCBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzLgorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBhaXhbWzMtOV1dKikKKyAgICAgICMgT24gQUlYL1BQQywgdGhlIEdOVSBsaW5rZXIgaXMgdmVyeSBicm9rZW4KKyAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgIT0gaWE2NDsgdGhlbgorCV9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwljYXQgPDxfTFRfRU9GIDE+JjIKKworKioqIFdhcm5pbmc6IHRoZSBHTlUgbGlua2VyLCBhdCBsZWFzdCB1cCB0byByZWxlYXNlIDIuOS4xLCBpcyByZXBvcnRlZAorKioqIHRvIGJlIHVuYWJsZSB0byByZWxpYWJseSBjcmVhdGUgc2hhcmVkIGxpYnJhcmllcyBvbiBBSVguCisqKiogVGhlcmVmb3JlLCBsaWJ0b29sIGlzIGRpc2FibGluZyBzaGFyZWQgbGlicmFyaWVzIHN1cHBvcnQuICBJZiB5b3UKKyoqKiByZWFsbHkgY2FyZSBmb3Igc2hhcmVkIGxpYnJhcmllcywgeW91IG1heSB3YW50IHRvIG1vZGlmeSB5b3VyIFBBVEgKKyoqKiBzbyB0aGF0IGEgbm9uLUdOVSBsaW5rZXIgaXMgZm91bmQsIGFuZCB0aGVuIHJlc3RhcnQuCisKK19MVF9FT0YKKyAgICAgIGZpCisgICAgICA7OworCisgICAgYW1pZ2FvcyopCisgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgcG93ZXJwYykKKyAgICAgICAgICAgICMgc2VlIGNvbW1lbnQgYWJvdXQgQW1pZ2FPUzQgLnNvIHN1cHBvcnQKKyAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JycKKyAgICAgICAgOzsKKyAgICAgIG02OGspCisgICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckUk0gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBOQU1FICRsaWJuYW1lIiA+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgTElCUkFSWV9JRCAxIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIFZFUlNJT04gJG1ham9yIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIFJFVklTSU9OICRyZXZpc2lvbiIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kQVIgJEFSX0ZMQUdTICRsaWIgJGxpYm9ianN+JFJBTkxJQiAkbGlifihjZCAkb3V0cHV0X29iamRpciAmJiBhMml4bGlicmFyeSAtMzIpJworICAgICAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKKyAgICAgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcworICAgICAgICA7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgIGJlb3MqKQorICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorCV9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT11bnN1cHBvcnRlZAorCSMgSm9zZXBoIEJlY2tlbmJhY2ggPGpyYjNAYmVzdC5jb20+IHNheXMgc29tZSByZWxlYXNlcyBvZiBnY2MKKwkjIHN1cHBvcnQgLS11bmRlZmluZWQuICBUaGlzIGRlc2VydmVzIHNvbWUgaW52ZXN0aWdhdGlvbi4gIEZJWE1FCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1ub3N0YXJ0ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworICAgICAgZWxzZQorCV9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICAgIGZpCisgICAgICA7OworCisgICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgICAgIyBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKSBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywKKyAgICAgICMgYXMgdGhlcmUgaXMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLUwkbGliZGlyJworICAgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPXVuc3VwcG9ydGVkCisgICAgICBfTFRfVEFHVkFSKGFsd2F5c19leHBvcnRfc3ltYm9scywgJDEpPW5vCisgICAgICBfTFRfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKT15ZXMKKyAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW1tCQ0RHUlNdXVtbIF1dL3MvLipbWyBdXVwoW1teIF1dKlwpL1wxIERBVEEvJ1wnJyB8ICRTRUQgLWUgJ1wnJy9eW1tBSVRXXV1bWyBdXS9zLy4qW1sgXV0vLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKworICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJ2F1dG8taW1wb3J0JyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKKwkjIElmIHRoZSBleHBvcnQtc3ltYm9scyBmaWxlIGFscmVhZHkgaXMgYSAuZGVmIGZpbGUgKDFzdCBsaW5lCisJIyBpcyBFWFBPUlRTKSwgdXNlIGl0IGFzIGlzOyBvdGhlcndpc2UsIHByZXBlbmQuLi4KKwlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0naWYgdGVzdCAieGAkU0VEIDFxICRleHBvcnRfc3ltYm9sc2AiID0geEVYUE9SVFM7IHRoZW4KKwkgIGNwICRleHBvcnRfc3ltYm9scyAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKKwllbHNlCisJICBlY2hvIEVYUE9SVFMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKKwkgIGNhdCAkZXhwb3J0X3N5bWJvbHMgPj4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CisJZml+CisJJENDIC1zaGFyZWQgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWYgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCisgICAgICBlbHNlCisJX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBpbnRlcml4W1szLTldXSopCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoLCRsaWJkaXInCisgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1FJworICAgICAgIyBIYWNrOiBPbiBJbnRlcml4IDMueCwgd2UgY2Fubm90IGNvbXBpbGUgUElDIGJlY2F1c2Ugb2YgYSBicm9rZW4gZ2NjLgorICAgICAgIyBJbnN0ZWFkLCBzaGFyZWQgbGlicmFyaWVzIGFyZSBsb2FkZWQgYXQgYW4gaW1hZ2UgYmFzZSAoMHgxMDAwMDAwMCBieQorICAgICAgIyBkZWZhdWx0KSBhbmQgcmVsb2NhdGVkIGlmIHRoZXkgY29uZmxpY3QsIHdoaWNoIGlzIGEgc2xvdyB2ZXJ5IG1lbW9yeQorICAgICAgIyBjb25zdW1pbmcgYW5kIGZyYWdtZW50aW5nIHByb2Nlc3MuICBUbyBhdm9pZCB0aGlzLCB3ZSBwaWNrIGEgcmFuZG9tLAorICAgICAgIyAyNTYgS2lCLWFsaWduZWQgaW1hZ2UgYmFzZSBiZXR3ZWVuIDB4NTAwMDAwMDAgYW5kIDB4NkZGQzAwMDAgYXQgbGluaworICAgICAgIyB0aW1lLiAgTW92aW5nIHVwIGZyb20gMHgxMDAwMDAwMCBhbHNvIGFsbG93cyBtb3JlIHNicmsoMikgc3BhY2UuCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWgsJHNvbmFtZSAke3dsfS0taW1hZ2UtYmFzZSxgZXhwciAke1JBTkRPTS0kJH0gJSA0MDk2IC8gMiBcKiAyNjIxNDQgKyAxMzQyMTc3MjgwYCAtbyAkbGliJworICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J3NlZCAicyxeLF8sIiAkZXhwb3J0X3N5bWJvbHMgPiRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwc3ltfiRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCwkc29uYW1lICR7d2x9LS1yZXRhaW4tc3ltYm9scy1maWxlLCRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwc3ltICR7d2x9LS1pbWFnZS1iYXNlLGBleHByICR7UkFORE9NLSQkfSAlIDQwOTYgLyAyIFwqIDI2MjE0NCArIDEzNDIxNzcyODBgIC1vICRsaWInCisgICAgICA7OworCisgICAgZ251KiB8IGxpbnV4KiB8IHRwZiogfCBrKmJzZCotZ251IHwga29wZW5zb2xhcmlzKi1nbnUpCisgICAgICB0bXBfZGlldD1ubworICAgICAgaWYgdGVzdCAiJGhvc3Rfb3MiID0gbGludXgtZGlldGxpYmM7IHRoZW4KKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgZGlldFwgKikgdG1wX2RpZXQ9eWVzOzsJIyBsaW51eC1kaWV0bGliYyB3aXRoIHN0YXRpYyBsaW5raW5nICghZGlldC1keW4pCisJZXNhYworICAgICAgZmkKKyAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRFR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsIFwKKwkgJiYgdGVzdCAiJHRtcF9kaWV0IiA9IG5vCisgICAgICB0aGVuCisJdG1wX2FkZGZsYWc9CisJdG1wX3NoYXJlZGZsYWc9Jy1zaGFyZWQnCisJY2FzZSAkY2NfYmFzZW5hbWUsJGhvc3RfY3B1IGluCisgICAgICAgIHBnY2MqKQkJCQkjIFBvcnRsYW5kIEdyb3VwIEMgY29tcGlsZXIKKwkgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHt3bH0tLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgJEVDSE8gXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJworCSAgdG1wX2FkZGZsYWc9JyAkcGljX2ZsYWcnCisJICA7OworCXBnZjc3KiB8IHBnZjkwKiB8IHBnZjk1KikJIyBQb3J0bGFuZCBHcm91cCBmNzcgYW5kIGY5MCBjb21waWxlcnMKKwkgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHt3bH0tLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgJEVDSE8gXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJworCSAgdG1wX2FkZGZsYWc9JyAkcGljX2ZsYWcgLU1ub21haW4nIDs7CisJZWNjKixpYTY0KiB8IGljYyosaWE2NCopCSMgSW50ZWwgQyBjb21waWxlciBvbiBpYTY0CisJICB0bXBfYWRkZmxhZz0nIC1pX2R5bmFtaWMnIDs7CisJZWZjKixpYTY0KiB8IGlmb3J0KixpYTY0KikJIyBJbnRlbCBGb3J0cmFuIGNvbXBpbGVyIG9uIGlhNjQKKwkgIHRtcF9hZGRmbGFnPScgLWlfZHluYW1pYyAtbm9mb3JfbWFpbicgOzsKKwlpZmMqIHwgaWZvcnQqKQkJCSMgSW50ZWwgRm9ydHJhbiBjb21waWxlcgorCSAgdG1wX2FkZGZsYWc9JyAtbm9mb3JfbWFpbicgOzsKKwlsZjk1KikJCQkJIyBMYWhleSBGb3J0cmFuIDguMQorCSAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPQorCSAgdG1wX3NoYXJlZGZsYWc9Jy0tc2hhcmVkJyA7OworCXhsW1tjQ11dKikJCQkjIElCTSBYTCBDIDguMCBvbiBQUEMgKGRlYWwgd2l0aCB4bGYgYmVsb3cpCisJICB0bXBfc2hhcmVkZmxhZz0nLXFta3Nocm9iaicKKwkgIHRtcF9hZGRmbGFnPSA7OworCWVzYWMKKwljYXNlIGAkQ0MgLVYgMj4mMSB8IHNlZCA1cWAgaW4KKwkqU3VuXCBDKikJCQkjIFN1biBDIDUuOQorCSAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScke3dsfS0td2hvbGUtYXJjaGl2ZWBuZXdfY29udmVuaWVuY2U9OyBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0IC16IFwiJGNvbnZcIiB8fCBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7ICRFQ0hPIFwiJG5ld19jb252ZW5pZW5jZVwiYCAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKKwkgIF9MVF9UQUdWQVIoY29tcGlsZXJfbmVlZHNfb2JqZWN0LCAkMSk9eWVzCisJICB0bXBfc2hhcmVkZmxhZz0nLUcnIDs7CisJKlN1blwgRiopCQkJIyBTdW4gRm9ydHJhbiA4LjMKKwkgIHRtcF9zaGFyZWRmbGFnPSctRycgOzsKKwllc2FjCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDICciJHRtcF9zaGFyZWRmbGFnIiIkdG1wX2FkZGZsYWciJyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKworICAgICAgICBpZiB0ZXN0ICJ4JHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZyIgPSB4eWVzOyB0aGVuCisgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2VjaG8gInsgZ2xvYmFsOiIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisJICAgIGNhdCAkZXhwb3J0X3N5bWJvbHMgfCBzZWQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKwkgICAgZWNobyAibG9jYWw6ICo7IH07IiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisJICAgICRDQyAnIiR0bXBfc2hhcmVkZmxhZyIiJHRtcF9hZGRmbGFnIicgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXZlcnNpb24tc2NyaXB0ICR7d2x9JG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyIC1vICRsaWInCisgICAgICAgIGZpCisKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCXhsZiopCisJICAjIElCTSBYTCBGb3J0cmFuIDEwLjEgb24gUFBDIGNhbm5vdCBjcmVhdGUgc2hhcmVkIGxpYnMgaXRzZWxmCisJICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9Jy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAtLW5vLXdob2xlLWFyY2hpdmUnCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0KKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZCwgJDEpPSctcnBhdGggJGxpYmRpcicKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLW8gJGxpYicKKwkgIGlmIHRlc3QgIngkc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nIiA9IHh5ZXM7IHRoZW4KKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2VjaG8gInsgZ2xvYmFsOiIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisJICAgICAgY2F0ICRleHBvcnRfc3ltYm9scyB8IHNlZCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorCSAgICAgIGVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorCSAgICAgICRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLXZlcnNpb24tc2NyaXB0ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlciAtbyAkbGliJworCSAgZmkKKwkgIDs7CisJZXNhYworICAgICAgZWxzZQorICAgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgICAgICBmaQorICAgICAgOzsKKworICAgIG5ldGJzZCogfCBuZXRic2RlbGYqLWdudSkKKyAgICAgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfXyA+L2Rldi9udWxsOyB0aGVuCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1Cc2hhcmVhYmxlICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLW8gJGxpYicKKwl3bGFyYz0KKyAgICAgIGVsc2UKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgICAgICBmaQorICAgICAgOzsKKworICAgIHNvbGFyaXMqKQorICAgICAgaWYgJExEIC12IDI+JjEgfCAkR1JFUCAnQkZEIDJcLjgnID4gL2Rldi9udWxsOyB0aGVuCisJX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCWNhdCA8PF9MVF9FT0YgMT4mMgorCisqKiogV2FybmluZzogVGhlIHJlbGVhc2VzIDIuOC4qIG9mIHRoZSBHTlUgbGlua2VyIGNhbm5vdCByZWxpYWJseQorKioqIGNyZWF0ZSBzaGFyZWQgbGlicmFyaWVzIG9uIFNvbGFyaXMgc3lzdGVtcy4gIFRoZXJlZm9yZSwgbGlidG9vbAorKioqIGlzIGRpc2FibGluZyBzaGFyZWQgbGlicmFyaWVzIHN1cHBvcnQuICBXZSB1cmdlIHlvdSB0byB1cGdyYWRlIEdOVQorKioqIGJpbnV0aWxzIHRvIHJlbGVhc2UgMi45LjEgb3IgbmV3ZXIuICBBbm90aGVyIG9wdGlvbiBpcyB0byBtb2RpZnkKKyoqKiB5b3VyIFBBVEggb3IgY29tcGlsZXIgY29uZmlndXJhdGlvbiBzbyB0aGF0IHRoZSBuYXRpdmUgbGlua2VyIGlzCisqKiogdXNlZCwgYW5kIHRoZW4gcmVzdGFydC4KKworX0xUX0VPRgorICAgICAgZWxpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworICAgICAgZWxzZQorCV9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICAgIGZpCisgICAgICA7OworCisgICAgc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IHVuaXh3YXJlKiB8IE9wZW5VTklYKikKKyAgICAgIGNhc2UgYCRMRCAtdiAyPiYxYCBpbgorICAgICAgICAqXCBbWzAxXV0uKiB8ICpcIDIuW1swLTldXS4qIHwgKlwgMi4xW1swLTVdXS4qKQorCV9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwljYXQgPDxfTFRfRU9GIDE+JjIKKworKioqIFdhcm5pbmc6IFJlbGVhc2VzIG9mIHRoZSBHTlUgbGlua2VyIHByaW9yIHRvIDIuMTYuOTEuMC4zIGNhbiBub3QKKyoqKiByZWxpYWJseSBjcmVhdGUgc2hhcmVkIGxpYnJhcmllcyBvbiBTQ08gc3lzdGVtcy4gIFRoZXJlZm9yZSwgbGlidG9vbAorKioqIGlzIGRpc2FibGluZyBzaGFyZWQgbGlicmFyaWVzIHN1cHBvcnQuICBXZSB1cmdlIHlvdSB0byB1cGdyYWRlIEdOVQorKioqIGJpbnV0aWxzIHRvIHJlbGVhc2UgMi4xNi45MS4wLjMgb3IgbmV3ZXIuICBBbm90aGVyIG9wdGlvbiBpcyB0byBtb2RpZnkKKyoqKiB5b3VyIFBBVEggb3IgY29tcGlsZXIgY29uZmlndXJhdGlvbiBzbyB0aGF0IHRoZSBuYXRpdmUgbGlua2VyIGlzCisqKiogdXNlZCwgYW5kIHRoZW4gcmVzdGFydC4KKworX0xUX0VPRgorCTs7CisJKikKKwkgICMgRm9yIHNlY3VyaXR5IHJlYXNvbnMsIGl0IGlzIGhpZ2hseSByZWNvbW1lbmRlZCB0aGF0IHlvdSBhbHdheXMKKwkgICMgdXNlIGFic29sdXRlIHBhdGhzIGZvciBuYW1pbmcgc2hhcmVkIGxpYnJhcmllcywgYW5kIGV4Y2x1ZGUgdGhlCisJICAjIERUX1JVTlBBVEggdGFnIGZyb20gZXhlY3V0YWJsZXMgYW5kIGxpYnJhcmllcy4gIEJ1dCBkb2luZyBzbworCSAgIyByZXF1aXJlcyB0aGF0IHlvdSBjb21waWxlIGV2ZXJ5dGhpbmcgdHdpY2UsIHdoaWNoIGlzIGEgcGFpbi4KKwkgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKwkgIGVsc2UKKwkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCSAgZmkKKwk7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgIHN1bm9zNCopCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLWFzc2VydCBwdXJlLXRleHQgLUJzaGFyZWFibGUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgd2xhcmM9CisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKyAgICAgIDs7CisKKyAgICAqKQorICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgIGVsc2UKKwlfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgICAgICBmaQorICAgICAgOzsKKyAgICBlc2FjCisKKyAgICBpZiB0ZXN0ICIkX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKSIgPSBubzsgdGhlbgorICAgICAgcnVucGF0aF92YXI9CisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0KKyAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9CisgICAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9CisgICAgZmkKKyAgZWxzZQorICAgICMgUE9SVE1FIGZpbGwgaW4gYSBkZXNjcmlwdGlvbiBvZiB5b3VyIHN5c3RlbSdzIGxpbmtlciAobm90IEdOVSBsZCkKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgYWl4MyopCisgICAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKKyAgICAgIF9MVF9UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJExEIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtYkU6JGV4cG9ydF9zeW1ib2xzIC1UNTEyIC1INTEyIC1iTTpTUkV+JEFSICRBUl9GTEFHUyAkbGliICRvdXRwdXRfb2JqZGlyLyRzb25hbWUnCisgICAgICAjIE5vdGU6IHRoaXMgbGlua2VyIGhhcmRjb2RlcyB0aGUgZGlyZWN0b3JpZXMgaW4gTElCUEFUSCBpZiB0aGVyZQorICAgICAgIyBhcmUgbm8gZGlyZWN0b3JpZXMgc3BlY2lmaWVkIGJ5IC1MLgorICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllcyAmJiB0ZXN0IC16ICIkbHRfcHJvZ19jb21waWxlcl9zdGF0aWMiOyB0aGVuCisJIyBOZWl0aGVyIGRpcmVjdCBoYXJkY29kaW5nIG5vciBzdGF0aWMgbGlua2luZyBpcyBzdXBwb3J0ZWQgd2l0aCBhCisJIyBicm9rZW4gY29sbGVjdDIuCisJX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT11bnN1cHBvcnRlZAorICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBhaXhbWzQtOV1dKikKKyAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisJIyBPbiBJQTY0LCB0aGUgbGlua2VyIGRvZXMgcnVuIHRpbWUgbGlua2luZyBieSBkZWZhdWx0LCBzbyB3ZSBkb24ndAorCSMgaGF2ZSB0byBkbyBhbnl0aGluZyBzcGVjaWFsLgorCWFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KKwlleHBfc3ltX2ZsYWc9Jy1CZXhwb3J0JworCW5vX2VudHJ5X2ZsYWc9IiIKKyAgICAgIGVsc2UKKwkjIElmIHdlJ3JlIHVzaW5nIEdOVSBubSwgdGhlbiB3ZSBkb24ndCB3YW50IHRoZSAiLUMiIG9wdGlvbi4KKwkjIC1DIG1lYW5zIGRlbWFuZ2xlIHRvIEFJWCBubSwgYnV0IG1lYW5zIGRvbid0IGRlbWFuZ2xlIHdpdGggR05VIG5tCisJaWYgJE5NIC1WIDI+JjEgfCAkR1JFUCAnR05VJyA+IC9kZXYvbnVsbDsgdGhlbgorCSAgX0xUX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9JyROTSAtQnBnICRsaWJvYmpzICRjb252ZW5pZW5jZSB8IGF3ayAnXCcneyBpZiAoKChcJCAyID09ICJUIikgfHwgKFwkIDIgPT0gIkQiKSB8fCAoXCQgMiA9PSAiQiIpKSAmJiAoW3N1YnN0cl0oXCQgMywxLDEpICE9ICIuIikpIHsgcHJpbnQgXCQgMyB9IH0nXCcnIHwgc29ydCAtdSA+ICRleHBvcnRfc3ltYm9scycKKwllbHNlCisJICBfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NIC1CQ3BnICRsaWJvYmpzICRjb252ZW5pZW5jZSB8IGF3ayAnXCcneyBpZiAoKChcJCAyID09ICJUIikgfHwgKFwkIDIgPT0gIkQiKSB8fCAoXCQgMiA9PSAiQiIpKSAmJiAoW3N1YnN0cl0oXCQgMywxLDEpICE9ICIuIikpIHsgcHJpbnQgXCQgMyB9IH0nXCcnIHwgc29ydCAtdSA+ICRleHBvcnRfc3ltYm9scycKKwlmaQorCWFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KKworCSMgVGVzdCBpZiB3ZSBhcmUgdHJ5aW5nIHRvIHVzZSBydW4gdGltZSBsaW5raW5nIG9yIG5vcm1hbAorCSMgQUlYIHN0eWxlIGxpbmtpbmcuIElmIC1icnRsIGlzIHNvbWV3aGVyZSBpbiBMREZMQUdTLCB3ZQorCSMgbmVlZCB0byBkbyBydW50aW1lIGxpbmtpbmcuCisJY2FzZSAkaG9zdF9vcyBpbiBhaXg0LltbMjNdXXxhaXg0LltbMjNdXS4qfGFpeFtbNS05XV0qKQorCSAgZm9yIGxkX2ZsYWcgaW4gJExERkxBR1M7IGRvCisJICBpZiAodGVzdCAkbGRfZmxhZyA9ICItYnJ0bCIgfHwgdGVzdCAkbGRfZmxhZyA9ICItV2wsLWJydGwiKTsgdGhlbgorCSAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPXllcworCSAgICBicmVhaworCSAgZmkKKwkgIGRvbmUKKwkgIDs7CisJZXNhYworCisJZXhwX3N5bV9mbGFnPSctYmV4cG9ydCcKKwlub19lbnRyeV9mbGFnPSctYm5vZW50cnknCisgICAgICBmaQorCisgICAgICAjIFdoZW4gbGFyZ2UgZXhlY3V0YWJsZXMgb3Igc2hhcmVkIG9iamVjdHMgYXJlIGJ1aWx0LCBBSVggbGQgY2FuCisgICAgICAjIGhhdmUgcHJvYmxlbXMgY3JlYXRpbmcgdGhlIHRhYmxlIG9mIGNvbnRlbnRzLiAgSWYgbGlua2luZyBhIGxpYnJhcnkKKyAgICAgICMgb3IgcHJvZ3JhbSByZXN1bHRzIGluICJlcnJvciBUT0Mgb3ZlcmZsb3ciIGFkZCAtbW1pbmltYWwtdG9jIHRvCisgICAgICAjIENYWEZMQUdTL0NGTEFHUyBmb3IgZysrL2djYy4gIEluIHRoZSBjYXNlcyB3aGVyZSB0aGF0IGlzIG5vdAorICAgICAgIyBlbm91Z2ggdG8gZml4IHRoZSBwcm9ibGVtLCBhZGQgLVdsLC1iYmlndG9jIHRvIExERkxBR1MuCisKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JycKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSwgJDEpPXllcworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9JzonCisgICAgICBfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKKyAgICAgIF9MVF9UQUdWQVIoZmlsZV9saXN0X3NwZWMsICQxKT0nJHt3bH0tZiwnCisKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisJY2FzZSAkaG9zdF9vcyBpbiBhaXg0LltbMDEyXV18YWl4NC5bWzAxMl1dLiopCisJIyBXZSBvbmx5IHdhbnQgdG8gZG8gdGhpcyBvbiBBSVggNC4yIGFuZCBsb3dlciwgdGhlIGNoZWNrCisJIyBiZWxvdyBmb3IgYnJva2VuIGNvbGxlY3QyIGRvZXNuJ3Qgd29yayB1bmRlciA0LjMrCisJICBjb2xsZWN0Mm5hbWU9YCR7Q0N9IC1wcmludC1wcm9nLW5hbWU9Y29sbGVjdDJgCisJICBpZiB0ZXN0IC1mICIkY29sbGVjdDJuYW1lIiAmJgorCSAgIHN0cmluZ3MgIiRjb2xsZWN0Mm5hbWUiIHwgJEdSRVAgcmVzb2x2ZV9saWJfbmFtZSA+L2Rldi9udWxsCisJICB0aGVuCisJICAjIFdlIGhhdmUgcmV3b3JrZWQgY29sbGVjdDIKKwkgIDoKKwkgIGVsc2UKKwkgICMgV2UgaGF2ZSBvbGQgY29sbGVjdDIKKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9dW5zdXBwb3J0ZWQKKwkgICMgSXQgZmFpbHMgdG8gZmluZCB1bmluc3RhbGxlZCBsaWJyYXJpZXMgd2hlbiB0aGUgdW5pbnN0YWxsZWQKKwkgICMgcGF0aCBpcyBub3QgbGlzdGVkIGluIHRoZSBsaWJwYXRoLiAgU2V0dGluZyBoYXJkY29kZV9taW51c19MCisJICAjIHRvIHVuc3VwcG9ydGVkIGZvcmNlcyByZWxpbmtpbmcKKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcworCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPQorCSAgZmkKKwkgIDs7CisJZXNhYworCXNoYXJlZF9mbGFnPSctc2hhcmVkJworCWlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgorCSAgc2hhcmVkX2ZsYWc9IiRzaGFyZWRfZmxhZyAiJyR7d2x9LUcnCisJZmkKKwlfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT1ubworICAgICAgZWxzZQorCSMgbm90IHVzaW5nIGdjYworCWlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisJIyBWaXN1YWxBZ2UgQysrLCBWZXJzaW9uIDUuNSBmb3IgQUlYIDVMIGZvciBJQS02NCwgQmV0YSAzIFJlbGVhc2UKKwkjIGNob2tlcyBvbiAtV2wsLUcuIFRoZSBmb2xsb3dpbmcgbGluZSBpcyBjb3JyZWN0OgorCSAgc2hhcmVkX2ZsYWc9Jy1HJworCWVsc2UKKwkgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgorCSAgICBzaGFyZWRfZmxhZz0nJHt3bH0tRycKKwkgIGVsc2UKKwkgICAgc2hhcmVkX2ZsYWc9JyR7d2x9LWJNOlNSRScKKwkgIGZpCisJZmkKKyAgICAgIGZpCisKKyAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LWJleHBhbGwnCisgICAgICAjIEl0IHNlZW1zIHRoYXQgLWJleHBhbGwgZG9lcyBub3QgZXhwb3J0IHN5bWJvbHMgYmVnaW5uaW5nIHdpdGgKKyAgICAgICMgdW5kZXJzY29yZSAoXyksIHNvIGl0IGlzIGJldHRlciB0byBnZW5lcmF0ZSBhIGxpc3Qgb2Ygc3ltYm9scyB0byBleHBvcnQuCisgICAgICBfTFRfVEFHVkFSKGFsd2F5c19leHBvcnRfc3ltYm9scywgJDEpPXllcworICAgICAgaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCisJIyBXYXJuaW5nIC0gd2l0aG91dCB1c2luZyB0aGUgb3RoZXIgcnVudGltZSBsb2FkaW5nIGZsYWdzICgtYnJ0bCksCisJIyAtYmVyb2sgd2lsbCBsaW5rIHdpdGhvdXQgZXJyb3IsIGJ1dCBtYXkgcHJvZHVjZSBhIGJyb2tlbiBsaWJyYXJ5LgorCV9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nLWJlcm9rJworICAgICAgICAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4KKyAgICAgICAgIyBlbXB0eSBleGVjdXRhYmxlLgorICAgICAgICBfTFRfU1lTX01PRFVMRV9QQVRIX0FJWAorICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKKyAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICciXCR7d2x9JG5vX2VudHJ5X2ZsYWciJyAkY29tcGlsZXJfZmxhZ3MgYGlmIHRlc3QgIngke2FsbG93X3VuZGVmaW5lZF9mbGFnfSIgIT0gIngiOyB0aGVuICRFQ0hPICJYJHt3bH0ke2FsbG93X3VuZGVmaW5lZF9mbGFnfSIgfCAkWHNlZDsgZWxzZSA6OyBmaWAgJyJcJHt3bH0kZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMgJHNoYXJlZF9mbGFnIgorICAgICAgZWxzZQorCWlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tUiAkbGliZGlyOi91c3IvbGliOi9saWInCisJICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9Ii16IG5vZGVmcyIKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSJcJENDICRzaGFyZWRfZmxhZyInIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJyJcJHt3bH0kbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyAke3dsfSR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICciXCR7d2x9JGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzIgorCWVsc2UKKwkgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuCisJICMgZW1wdHkgZXhlY3V0YWJsZS4KKwkgX0xUX1NZU19NT0RVTEVfUEFUSF9BSVgKKwkgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisJICAjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW4gdGltZSBsb2FkaW5nIGZsYWdzLAorCSAgIyAtYmVyb2sgd2lsbCBsaW5rIHdpdGhvdXQgZXJyb3IsIGJ1dCBtYXkgcHJvZHVjZSBhIGJyb2tlbiBsaWJyYXJ5LgorCSAgX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScgJHt3bH0tYmVybm90b2snCisJICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAke3dsfS1iZXJvaycKKwkgICMgRXhwb3J0ZWQgc3ltYm9scyBjYW4gYmUgcHVsbGVkIGludG8gc2hhcmVkIG9iamVjdHMgZnJvbSBhcmNoaXZlcworCSAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPSckY29udmVuaWVuY2UnCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9eWVzCisJICAjIFRoaXMgaXMgc2ltaWxhciB0byBob3cgQUlYIHRyYWRpdGlvbmFsbHkgYnVpbGRzIGl0cyBzaGFyZWQgbGlicmFyaWVzLgorCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9IlwkQ0MgJHNoYXJlZF9mbGFnIicgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAke3dsfS1ibm9lbnRyeSAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tYkU6JGV4cG9ydF9zeW1ib2xzJHthbGxvd191bmRlZmluZWRfZmxhZ31+JEFSICRBUl9GTEFHUyAkb3V0cHV0X29iamRpci8kbGlibmFtZSRyZWxlYXNlLmEgJG91dHB1dF9vYmpkaXIvJHNvbmFtZScKKwlmaQorICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBhbWlnYW9zKikKKyAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICBwb3dlcnBjKQorICAgICAgICAgICAgIyBzZWUgY29tbWVudCBhYm91dCBBbWlnYU9TNCAuc28gc3VwcG9ydAorICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisgICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJworICAgICAgICA7OworICAgICAgbTY4aykKKyAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRSTSAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIE5BTUUgJGxpYm5hbWUiID4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBMSUJSQVJZX0lEIDEiID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgVkVSU0lPTiAkbWFqb3IiID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgUkVWSVNJT04gJHJldmlzaW9uIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRBUiAkQVJfRkxBR1MgJGxpYiAkbGlib2Jqc34kUkFOTElCICRsaWJ+KGNkICRvdXRwdXRfb2JqZGlyICYmIGEyaXhsaWJyYXJ5IC0zMiknCisgICAgICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLUwkbGliZGlyJworICAgICAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCisgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICA7OworCisgICAgYnNkaVtbNDVdXSopCisgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPS1yZHluYW1pYworICAgICAgOzsKKworICAgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgICAgICMgV2hlbiBub3QgdXNpbmcgZ2NjLCB3ZSBjdXJyZW50bHkgYXNzdW1lIHRoYXQgd2UgYXJlIHVzaW5nCisgICAgICAjIE1pY3Jvc29mdCBWaXN1YWwgQysrLgorICAgICAgIyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLCBhcyB0aGVyZSBpcworICAgICAgIyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScgJworICAgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPXVuc3VwcG9ydGVkCisgICAgICAjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmxpYiBmaWxlcywgbm90IC5hIGZpbGVzLgorICAgICAgbGliZXh0PWxpYgorICAgICAgIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCisgICAgICBzaHJleHRfY21kcz0iLmRsbCIKKyAgICAgICMgRklYTUU6IFNldHRpbmcgbGlua25hbWVzIGhlcmUgaXMgYSBiYWQgaGFjay4KKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtbyAkbGliICRsaWJvYmpzICRjb21waWxlcl9mbGFncyBgJEVDSE8gIlgkZGVwbGlicyIgfCAkWHNlZCAtZSAnXCcncy8gLWxjJC8vJ1wnJ2AgLWxpbmsgLWRsbH5saW5rbmFtZXM9JworICAgICAgIyBUaGUgbGlua2VyIHdpbGwgYXV0b21hdGljYWxseSBidWlsZCBhIC5saWIgZmlsZSBpZiB3ZSBidWlsZCBhIERMTC4KKyAgICAgIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcywgJDEpPSd0cnVlJworICAgICAgIyBGSVhNRTogU2hvdWxkIGxldCB0aGUgdXNlciBzcGVjaWZ5IHRoZSBsaWIgcHJvZ3JhbS4KKyAgICAgIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSdsaWIgLU9VVDokb2xkbGliJG9sZG9ianMkb2xkX2RlcGxpYnMnCisgICAgICBfTFRfVEFHVkFSKGZpeF9zcmNmaWxlX3BhdGgsICQxKT0nYGN5Z3BhdGggLXcgIiRzcmNmaWxlImAnCisgICAgICBfTFRfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKT15ZXMKKyAgICAgIDs7CisKKyAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQorICAgICAgX0xUX0RBUldJTl9MSU5LRVJfRkVBVFVSRVMoJDEpCisgICAgICA7OworCisgICAgZGd1eCopCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLUwkbGliZGlyJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKyAgICAgIDs7CisKKyAgICBmcmVlYnNkMSopCisgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgICAgICA7OworCisgICAgIyBGcmVlQlNEIDIuMi5bMDEyXSBhbGxvd3MgdXMgdG8gaW5jbHVkZSBjKytydDAubyB0byBnZXQgQysrIGNvbnN0cnVjdG9yCisgICAgIyBzdXBwb3J0LiAgRnV0dXJlIHZlcnNpb25zIGRvIHRoaXMgYXV0b21hdGljYWxseSwgYnV0IGFuIGV4cGxpY2l0IGMrK3J0MC5vCisgICAgIyBkb2VzIG5vdCBicmVhayBhbnl0aGluZywgYW5kIGhlbHBzIHNpZ25pZmljYW50bHkgKGF0IHRoZSBjb3N0IG9mIGEgbGl0dGxlCisgICAgIyBleHRyYSBzcGFjZSkuCisgICAgZnJlZWJzZDIuMiopCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUJzaGFyZWFibGUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC91c3IvbGliL2MrK3J0MC5vJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1SJGxpYmRpcicKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworICAgICAgOzsKKworICAgICMgVW5mb3J0dW5hdGVseSwgb2xkZXIgdmVyc2lvbnMgb2YgRnJlZUJTRCAyIGRvIG5vdCBoYXZlIHRoaXMgZmVhdHVyZS4KKyAgICBmcmVlYnNkMiopCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUJzaGFyZWFibGUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKyAgICAgIDs7CisKKyAgICAjIEZyZWVCU0QgMyBhbmQgZ3JlYXRlciB1c2VzIGdjYyAtc2hhcmVkIHRvIGRvIHNoYXJlZCBsaWJyYXJpZXMuCisgICAgZnJlZWJzZCogfCBkcmFnb25mbHkqKQorICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLVIkbGliZGlyJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICA7OworCisgICAgaHB1eDkqKQorICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworICAgICAgZWxzZQorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRMRCAtYiArYiAkaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworICAgICAgZmkKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfStiICR7d2x9JGxpYmRpcicKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisKKyAgICAgICMgaGFyZGNvZGVfbWludXNfTDogTm90IHJlYWxseSBpbiB0aGUgc2VhcmNoIFBBVEgsCisgICAgICAjIGJ1dCBhcyB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcworICAgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tRScKKyAgICAgIDs7CisKKyAgICBocHV4MTAqKQorICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXMgLWEgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICBlbHNlCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1iICtoICRzb25hbWUgK2IgJGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIGZpCisgICAgICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0rYiAke3dsfSRsaWJkaXInCisJX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkLCAkMSk9JytiICRsaWJkaXInCisJX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgorCV9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisJX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUsICQxKT15ZXMKKwlfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1FJworCSMgaGFyZGNvZGVfbWludXNfTDogTm90IHJlYWxseSBpbiB0aGUgc2VhcmNoIFBBVEgsCisJIyBidXQgYXMgdGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCisJX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCisgICAgICBmaQorICAgICAgOzsKKworICAgIGhwdXgxMSopCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllcyAtYSAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCisJY2FzZSAkaG9zdF9jcHUgaW4KKwlocHBhKjY0KikKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR7d2x9K2ggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgOzsKKwlpYTY0KikKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgOzsKKwkqKQorCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIDs7CisJZXNhYworICAgICAgZWxzZQorCWNhc2UgJGhvc3RfY3B1IGluCisJaHBwYSo2NCopCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLWIgJHt3bH0raCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICA7OworCWlhNjQqKQorCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1iICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgOzsKKwkqKQorCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1iICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICA7OworCWVzYWMKKyAgICAgIGZpCisgICAgICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0rYiAke3dsfSRsaWJkaXInCisJX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgorCisJY2FzZSAkaG9zdF9jcHUgaW4KKwlocHBhKjY0KnxpYTY0KikKKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9bm8KKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisJICA7OworCSopCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUsICQxKT15ZXMKKwkgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUUnCisKKwkgICMgaGFyZGNvZGVfbWludXNfTDogTm90IHJlYWxseSBpbiB0aGUgc2VhcmNoIFBBVEgsCisJICAjIGJ1dCBhcyB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcworCSAgOzsKKwllc2FjCisgICAgICBmaQorICAgICAgOzsKKworICAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiAkRUNITyAiWCR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyIgfCAkWHNlZGAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwkjIFRyeSB0byB1c2UgdGhlIC1leHBvcnRlZF9zeW1ib2wgbGQgb3B0aW9uLCBpZiBpdCBkb2VzIG5vdAorCSMgd29yaywgYXNzdW1lIHRoYXQgLWV4cG9ydHNfZmlsZSBkb2VzIG5vdCB3b3JrIGVpdGhlciBhbmQKKwkjIGltcGxpY2l0bHkgZXhwb3J0IGFsbCBzeW1ib2xzLgorICAgICAgICBzYXZlX0xERkxBR1M9IiRMREZMQUdTIgorICAgICAgICBMREZMQUdTPSIkTERGTEFHUyAtc2hhcmVkICR7d2x9LWV4cG9ydGVkX3N5bWJvbCAke3dsfWZvbyAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0vZGV2L251bGwiCisgICAgICAgIEFDX0xJTktfSUZFTFNFKGludCBmb28odm9pZCkge30sCisgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiAkRUNITyAiWCR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyIgfCAkWHNlZGAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgJHt3bH0tZXhwb3J0c19maWxlICR7d2x9JGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgICAgICAgICkKKyAgICAgICAgTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKKyAgICAgIGVsc2UKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiAkRUNITyAiWC1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nIiB8ICRYc2VkYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmICRFQ0hPICJYLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciIHwgJFhzZWRgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLWV4cG9ydHNfZmlsZSAkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgIGZpCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9J25vJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKKyAgICAgIF9MVF9UQUdWQVIoaW5oZXJpdF9ycGF0aCwgJDEpPXllcworICAgICAgX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCisgICAgICA7OworCisgICAgbmV0YnNkKiB8IG5ldGJzZGVsZiotZ251KQorICAgICAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fID4vZGV2L251bGw7IHRoZW4KKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUJzaGFyZWFibGUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJyAgIyBhLm91dAorICAgICAgZWxzZQorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtc2hhcmVkIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycgICAgICAjIEVMRgorICAgICAgZmkKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctUiRsaWJkaXInCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKyAgICAgIDs7CisKKyAgICBuZXdzb3M2KQorICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworICAgICAgOzsKKworICAgICpudG8qIHwgKnFueCopCisgICAgICA7OworCisgICAgb3BlbmJzZCopCisgICAgICBpZiB0ZXN0IC1mIC91c3IvbGliZXhlYy9sZC5zbzsgdGhlbgorCV9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisJX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSwgJDEpPXllcworCWlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX19gIiB8fCB0ZXN0ICIkaG9zdF9vcy0kaG9zdF9jcHUiID0gIm9wZW5ic2QyLjgtcG93ZXJwYyI7IHRoZW4KKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSwkZXhwb3J0X3N5bWJvbHMnCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGgsJGxpYmRpcicKKwkgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUUnCisJZWxzZQorCSAgY2FzZSAkaG9zdF9vcyBpbgorCSAgIG9wZW5ic2RbWzAxXV0uKiB8IG9wZW5ic2QyLltbMC03XV0gfCBvcGVuYnNkMi5bWzAtN11dLiopCisJICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUJzaGFyZWFibGUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworCSAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1SJGxpYmRpcicKKwkgICAgIDs7CisJICAgKikKKwkgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCwkbGliZGlyJworCSAgICAgOzsKKwkgIGVzYWMKKwlmaQorICAgICAgZWxzZQorCV9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICAgIGZpCisgICAgICA7OworCisgICAgb3MyKikKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKKyAgICAgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT11bnN1cHBvcnRlZAorICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJEVDSE8gIkxJQlJBUlkgJGxpYm5hbWUgSU5JVElOU1RBTkNFIiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4kRUNITyAiREVTQ1JJUFRJT04gXCIkbGlibmFtZVwiIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+JEVDSE8gREFUQSA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+JEVDSE8gIiBTSU5HTEUgTk9OU0hBUkVEIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+JEVDSE8gRVhQT1JUUyA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+ZW14ZXhwICRsaWJvYmpzID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4kQ0MgLVpkbGwgLVpjcnRkbGwgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmJworICAgICAgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzLCAkMSk9J2VteGltcCAtbyAkb3V0cHV0X29iamRpci8kbGlibmFtZS5hICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZicKKyAgICAgIDs7CisKKyAgICBvc2YzKikKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisJX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgJHt3bH0tZXhwZWN0X3VucmVzb2x2ZWQgJHt3bH1cKicKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiAkRUNITyAiWCR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyIgfCAkWHNlZGAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAgICAgIGVsc2UKKwlfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAtZXhwZWN0X3VucmVzb2x2ZWQgXConCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiAkRUNITyAiWC1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nIiB8ICRYc2VkYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisgICAgICBmaQorICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPSdubycKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CisgICAgICA7OworCisgICAgb3NmNCogfCBvc2Y1KikJIyBhcyBvc2YzKiB3aXRoIHRoZSBhZGRpdGlvbiBvZiAtbXN5bSBmbGFnCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorCV9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR7d2x9LWV4cGVjdF91bnJlc29sdmVkICR7d2x9XConCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tbXN5bSAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiAkRUNITyAiWCR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyIgfCAkWHNlZGAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICAgICAgZWxzZQorCV9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nIC1leHBlY3RfdW5yZXNvbHZlZCBcKicKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtbXN5bSAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmICRFQ0hPICJYLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciIHwgJFhzZWRgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nZm9yIGkgaW4gYGNhdCAkZXhwb3J0X3N5bWJvbHNgOyBkbyBwcmludGYgIiVzICVzXFxuIiAtZXhwb3J0ZWRfc3ltYm9sICJcJGkiID4+ICRsaWIuZXhwOyBkb25lOyBwcmludGYgIiVzXFxuIiAiLWhpZGRlbiI+PiAkbGliLmV4cH4KKwkkQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICR7d2x9LWlucHV0ICR7d2x9JGxpYi5leHAgJGNvbXBpbGVyX2ZsYWdzICRsaWJvYmpzICRkZXBsaWJzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgJEVDSE8gIlgtc2V0X3ZlcnNpb24gJHZlcnN0cmluZyIgfCAkWHNlZGAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGlifiRSTSAkbGliLmV4cCcKKworCSMgQm90aCBjIGFuZCBjeHggY29tcGlsZXIgc3VwcG9ydCAtcnBhdGggZGlyZWN0bHkKKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLXJwYXRoICRsaWJkaXInCisgICAgICBmaQorICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPSdubycKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKKyAgICAgIDs7CisKKyAgICBzb2xhcmlzKikKKyAgICAgIF9MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nIC16IGRlZnMnCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorCXdsYXJjPScke3dsfScKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAke3dsfS16ICR7d2x9dGV4dCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH5lY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgorCSAgJENDIC1zaGFyZWQgJHt3bH0teiAke3dsfXRleHQgJHt3bH0tTSAke3dsfSRsaWIuZXhwICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKyAgICAgIGVsc2UKKwljYXNlIGAkQ0MgLVYgMj4mMWAgaW4KKwkqIkNvbXBpbGVycyA1LjAiKikKKwkgIHdsYXJjPScnCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+CisJICAkTEQgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAtTSAkbGliLmV4cCAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFnc34kUk0gJGxpYi5leHAnCisJICA7OworCSopCisJICB3bGFyYz0nJHt3bH0nCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KKwkgICRDQyAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1NICRsaWIuZXhwIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworCSAgOzsKKwllc2FjCisgICAgICBmaQorICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1SJGxpYmRpcicKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICBjYXNlICRob3N0X29zIGluCisgICAgICBzb2xhcmlzMi5bWzAtNV1dIHwgc29sYXJpczIuW1swLTVdXS4qKSA7OworICAgICAgKikKKwkjIFRoZSBjb21waWxlciBkcml2ZXIgd2lsbCBjb21iaW5lIGFuZCByZW9yZGVyIGxpbmtlciBvcHRpb25zLAorCSMgYnV0IHVuZGVyc3RhbmRzIGAteiBsaW5rZXJfZmxhZycuICBHQ0MgZGlzY2FyZHMgaXQgd2l0aG91dCBgJHdsJywKKwkjIGJ1dCBpcyBjYXJlZnVsIGVub3VnaCBub3QgdG8gcmVvcmRlci4KKwkjIFN1cHBvcnRlZCBzaW5jZSBTb2xhcmlzIDIuNiAobWF5YmUgMi41LjE/KQorCWlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisJICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXogJHt3bH1hbGxleHRyYWN0JGNvbnZlbmllbmNlICR7d2x9LXogJHt3bH1kZWZhdWx0ZXh0cmFjdCcKKwllbHNlCisJICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9Jy16IGFsbGV4dHJhY3QkY29udmVuaWVuY2UgLXogZGVmYXVsdGV4dHJhY3QnCisJZmkKKwk7OworICAgICAgZXNhYworICAgICAgX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCisgICAgICA7OworCisgICAgc3Vub3M0KikKKyAgICAgIGlmIHRlc3QgIngkaG9zdF92ZW5kb3IiID0geHNlcXVlbnQ7IHRoZW4KKwkjIFVzZSAkQ0MgdG8gbGluayB1bmRlciBzZXF1ZW50LCBiZWNhdXNlIGl0IHRocm93cyBpbiBzb21lIGV4dHJhIC5vCisJIyBmaWxlcyB0aGF0IG1ha2UgLmluaXQgYW5kIC5maW5pIHNlY3Rpb25zIHdvcmsuCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1HICR7d2x9LWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgIGVsc2UKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLWFzc2VydCBwdXJlLXRleHQgLUJzdGF0aWMgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgZmkKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworICAgICAgOzsKKworICAgIHN5c3Y0KQorICAgICAgY2FzZSAkaG9zdF92ZW5kb3IgaW4KKwlzbmkpCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcyAjIGlzIHRoaXMgcmVhbGx5IHRydWU/Pz8KKwk7OworCXNpZW1lbnMpCisJICAjIyBMRCBpcyBsZCBpdCBtYWtlcyBhIFBMQU1MSUIKKwkgICMjIENDIGp1c3QgbWFrZXMgYSBHcm9zc01vZHVsZS4KKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtRyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisJICBfTFRfVEFHVkFSKHJlbG9hZF9jbWRzLCAkMSk9JyRDQyAtciAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJworCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubworICAgICAgICA7OworCW1vdG9yb2xhKQorCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubyAjTW90b3JvbGEgbWFudWFsIHNheXMgeWVzLCBidXQgbXkgdGVzdHMgc2F5IHRoZXkgbGllCisJOzsKKyAgICAgIGVzYWMKKyAgICAgIHJ1bnBhdGhfdmFyPSdMRF9SVU5fUEFUSCcKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICA7OworCisgICAgc3lzdjQuMyopCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworICAgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nLUJleHBvcnQnCisgICAgICA7OworCisgICAgc3lzdjQqTVAqKQorICAgICAgaWYgdGVzdCAtZCAvdXNyL25lYzsgdGhlbgorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKwlfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworCXJ1bnBhdGhfdmFyPUxEX1JVTl9QQVRICisJaGFyZGNvZGVfcnVucGF0aF92YXI9eWVzCisJX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT15ZXMKKyAgICAgIGZpCisgICAgICA7OworCisgICAgc3lzdjQqdXcyKiB8IHN5c3Y1T3BlblVOSVgqIHwgc3lzdjVVbml4V2FyZTcuW1swMV1dLltbMTBdXSogfCB1bml4d2FyZTcqIHwgc2NvMy4ydjUuMC5bWzAyNF1dKikKKyAgICAgIF9MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nJHt3bH0teix0ZXh0JworICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworICAgICAgcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJworCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgZWxzZQorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtRyAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICBmaQorICAgICAgOzsKKworICAgIHN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiopCisgICAgICAjIE5vdGU6IFdlIGNhbiBOT1QgdXNlIC16IGRlZnMgYXMgd2UgbWlnaHQgZGVzaXJlLCBiZWNhdXNlIHdlIGRvIG5vdAorICAgICAgIyBsaW5rIHdpdGggLWxjLCBhbmQgdGhhdCB3b3VsZCBjYXVzZSBhbnkgc3ltYm9scyB1c2VkIGZyb20gbGliYyB0bworICAgICAgIyBhbHdheXMgYmUgdW5yZXNvbHZlZCwgd2hpY2ggbWVhbnMganVzdCBhYm91dCBubyBsaWJyYXJ5IHdvdWxkCisgICAgICAjIGV2ZXIgbGluayBjb3JyZWN0bHkuICBJZiB3ZSdyZSBub3QgdXNpbmcgR05VIGxkIHdlIHVzZSAteiB0ZXh0CisgICAgICAjIHRob3VnaCwgd2hpY2ggZG9lcyBjYXRjaCBzb21lIGJhZCBzeW1ib2xzIGJ1dCBpc24ndCBhcyBoZWF2eS1oYW5kZWQKKyAgICAgICMgYXMgLXogZGVmcy4KKyAgICAgIF9MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nJHt3bH0teix0ZXh0JworICAgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScke3dsfS16LG5vZGVmcycKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1SLCRsaWJkaXInCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT0nOicKKyAgICAgIF9MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXllcworICAgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tQmV4cG9ydCcKKyAgICAgIHJ1bnBhdGhfdmFyPSdMRF9SVU5fUEFUSCcKKworICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgIGVsc2UKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLUcgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLUcgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICB1dHM0KikKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworICAgICAgOzsKKworICAgICopCisgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgICAgICA7OworICAgIGVzYWMKKworICAgIGlmIHRlc3QgeCRob3N0X3ZlbmRvciA9IHhzbmk7IHRoZW4KKyAgICAgIGNhc2UgJGhvc3QgaW4KKyAgICAgIHN5c3Y0IHwgc3lzdjQuMnV3MiogfCBzeXN2NC4zKiB8IHN5c3Y1KikKKwlfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1CbGFyZ2VkeW5zeW0nCisJOzsKKyAgICAgIGVzYWMKKyAgICBmaQorICBmaQorXSkKK0FDX01TR19SRVNVTFQoWyRfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpXSkKK3Rlc3QgIiRfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpIiA9IG5vICYmIGNhbl9idWlsZF9zaGFyZWQ9bm8KKworX0xUX1RBR1ZBUih3aXRoX2dudV9sZCwgJDEpPSR3aXRoX2dudV9sZAorCitfTFRfREVDTChbXSwgW2xpYmV4dF0sIFswXSwgW09sZCBhcmNoaXZlIHN1ZmZpeCAobm9ybWFsbHkgImEiKV0pZG5sCitfTFRfREVDTChbXSwgW3NocmV4dF9jbWRzXSwgWzFdLCBbU2hhcmVkIGxpYnJhcnkgc3VmZml4IChub3JtYWxseSAiLnNvIildKWRubAorX0xUX0RFQ0woW10sIFtleHRyYWN0X2V4cHN5bXNfY21kc10sIFsyXSwKKyAgICBbVGhlIGNvbW1hbmRzIHRvIGV4dHJhY3QgdGhlIGV4cG9ydGVkIHN5bWJvbCBsaXN0IGZyb20gYSBzaGFyZWQgYXJjaGl2ZV0pCisKKyMKKyMgRG8gd2UgbmVlZCB0byBleHBsaWNpdGx5IGxpbmsgbGliYz8KKyMKK2Nhc2UgIngkX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpIiBpbgoreHx4eWVzKQorICAjIEFzc3VtZSAtbGMgc2hvdWxkIGJlIGFkZGVkCisgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT15ZXMKKworICBpZiB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgJiYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICBjYXNlICRfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpIGluCisgICAgKid+JyopCisgICAgICAjIEZJWE1FOiB3ZSBtYXkgaGF2ZSB0byBkZWFsIHdpdGggbXVsdGktY29tbWFuZCBzZXF1ZW5jZXMuCisgICAgICA7OworICAgICckQ0MgJyopCisgICAgICAjIFRlc3Qgd2hldGhlciB0aGUgY29tcGlsZXIgaW1wbGljaXRseSBsaW5rcyB3aXRoIC1sYyBzaW5jZSBvbiBzb21lCisgICAgICAjIHN5c3RlbXMsIC1sZ2NjIGhhcyB0byBjb21lIGJlZm9yZSAtbGMuIElmIGdjYyBhbHJlYWR5IHBhc3NlcyAtbGMKKyAgICAgICMgdG8gbGQsIGRvbid0IGFkZCAtbGMgYmVmb3JlIC1sZ2NjLgorICAgICAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIC1sYyBzaG91bGQgYmUgZXhwbGljaXRseSBsaW5rZWQgaW5dKQorICAgICAgJFJNIGNvbmZ0ZXN0KgorICAgICAgZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CisKKyAgICAgIGlmIEFDX1RSWV9FVkFMKGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXJyOyB0aGVuCisgICAgICAgIHNvbmFtZT1jb25mdGVzdAorICAgICAgICBsaWI9Y29uZnRlc3QKKyAgICAgICAgbGlib2Jqcz1jb25mdGVzdC4kYWNfb2JqZXh0CisgICAgICAgIGRlcGxpYnM9CisgICAgICAgIHdsPSRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKQorCXBpY19mbGFnPSRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSkKKyAgICAgICAgY29tcGlsZXJfZmxhZ3M9LXYKKyAgICAgICAgbGlua2VyX2ZsYWdzPS12CisgICAgICAgIHZlcnN0cmluZz0KKyAgICAgICAgb3V0cHV0X29iamRpcj0uCisgICAgICAgIGxpYm5hbWU9Y29uZnRlc3QKKyAgICAgICAgbHRfc2F2ZV9hbGxvd191bmRlZmluZWRfZmxhZz0kX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpCisgICAgICAgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0KKyAgICAgICAgaWYgQUNfVFJZX0VWQUwoX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKSAyXD5cJjEgXHwgJEdSRVAgXCIgLWxjIFwiIFw+L2Rldi9udWxsIDJcPlwmMSkKKyAgICAgICAgdGhlbgorCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCisgICAgICAgIGVsc2UKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT15ZXMKKyAgICAgICAgZmkKKyAgICAgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPSRsdF9zYXZlX2FsbG93X3VuZGVmaW5lZF9mbGFnCisgICAgICBlbHNlCisgICAgICAgIGNhdCBjb25mdGVzdC5lcnIgMT4mNQorICAgICAgZmkKKyAgICAgICRSTSBjb25mdGVzdCoKKyAgICAgIEFDX01TR19SRVNVTFQoWyRfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSldKQorICAgICAgOzsKKyAgICBlc2FjCisgIGZpCisgIDs7Citlc2FjCisKK19MVF9UQUdERUNMKFtidWlsZF9saWJ0b29sX25lZWRfbGNdLCBbYXJjaGl2ZV9jbWRzX25lZWRfbGNdLCBbMF0sCisgICAgW1doZXRoZXIgb3Igbm90IHRvIGFkZCAtbGMgZm9yIGJ1aWxkaW5nIHNoYXJlZCBsaWJyYXJpZXNdKQorX0xUX1RBR0RFQ0woW2FsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lc10sCisgICAgW2VuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXNdLCBbMF0sCisgICAgW1doZXRoZXIgb3Igbm90IHRvIGRpc2FsbG93IHNoYXJlZCBsaWJzIHdoZW4gcnVudGltZSBsaWJzIGFyZSBzdGF0aWNdKQorX0xUX1RBR0RFQ0woW10sIFtleHBvcnRfZHluYW1pY19mbGFnX3NwZWNdLCBbMV0sCisgICAgW0NvbXBpbGVyIGZsYWcgdG8gYWxsb3cgcmVmbGV4aXZlIGRsb3BlbnNdKQorX0xUX1RBR0RFQ0woW10sIFt3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY10sIFsxXSwKKyAgICBbQ29tcGlsZXIgZmxhZyB0byBnZW5lcmF0ZSBzaGFyZWQgb2JqZWN0cyBkaXJlY3RseSBmcm9tIGFyY2hpdmVzXSkKK19MVF9UQUdERUNMKFtdLCBbY29tcGlsZXJfbmVlZHNfb2JqZWN0XSwgWzFdLAorICAgIFtXaGV0aGVyIHRoZSBjb21waWxlciBjb3BlcyB3aXRoIHBhc3Npbmcgbm8gb2JqZWN0cyBkaXJlY3RseV0pCitfTFRfVEFHREVDTChbXSwgW29sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHNdLCBbMl0sCisgICAgW0NyZWF0ZSBhbiBvbGQtc3R5bGUgYXJjaGl2ZSBmcm9tIGEgc2hhcmVkIGFyY2hpdmVdKQorX0xUX1RBR0RFQ0woW10sIFtvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kc10sIFsyXSwKKyAgICBbQ3JlYXRlIGEgdGVtcG9yYXJ5IG9sZC1zdHlsZSBhcmNoaXZlIHRvIGxpbmsgaW5zdGVhZCBvZiBhIHNoYXJlZCBhcmNoaXZlXSkKK19MVF9UQUdERUNMKFtdLCBbYXJjaGl2ZV9jbWRzXSwgWzJdLCBbQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhIHNoYXJlZCBhcmNoaXZlXSkKK19MVF9UQUdERUNMKFtdLCBbYXJjaGl2ZV9leHBzeW1fY21kc10sIFsyXSkKK19MVF9UQUdERUNMKFtdLCBbbW9kdWxlX2NtZHNdLCBbMl0sCisgICAgW0NvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYSBsb2FkYWJsZSBtb2R1bGUgaWYgZGlmZmVyZW50IGZyb20gYnVpbGRpbmcKKyAgICBhIHNoYXJlZCBhcmNoaXZlLl0pCitfTFRfVEFHREVDTChbXSwgW21vZHVsZV9leHBzeW1fY21kc10sIFsyXSkKK19MVF9UQUdERUNMKFtdLCBbd2l0aF9nbnVfbGRdLCBbMV0sCisgICAgW1doZXRoZXIgd2UgYXJlIGJ1aWxkaW5nIHdpdGggR05VIGxkIG9yIG5vdF0pCitfTFRfVEFHREVDTChbXSwgW2FsbG93X3VuZGVmaW5lZF9mbGFnXSwgWzFdLAorICAgIFtGbGFnIHRoYXQgYWxsb3dzIHNoYXJlZCBsaWJyYXJpZXMgd2l0aCB1bmRlZmluZWQgc3ltYm9scyB0byBiZSBidWlsdF0pCitfTFRfVEFHREVDTChbXSwgW25vX3VuZGVmaW5lZF9mbGFnXSwgWzFdLAorICAgIFtGbGFnIHRoYXQgZW5mb3JjZXMgbm8gdW5kZWZpbmVkIHN5bWJvbHNdKQorX0xUX1RBR0RFQ0woW10sIFtoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXSwgWzFdLAorICAgIFtGbGFnIHRvIGhhcmRjb2RlICRsaWJkaXIgaW50byBhIGJpbmFyeSBkdXJpbmcgbGlua2luZy4KKyAgICBUaGlzIG11c3Qgd29yayBldmVuIGlmICRsaWJkaXIgZG9lcyBub3QgZXhpc3RdKQorX0xUX1RBR0RFQ0woW10sIFtoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkXSwgWzFdLAorICAgIFtbSWYgbGQgaXMgdXNlZCB3aGVuIGxpbmtpbmcsIGZsYWcgdG8gaGFyZGNvZGUgJGxpYmRpciBpbnRvIGEgYmluYXJ5CisgICAgZHVyaW5nIGxpbmtpbmcuICBUaGlzIG11c3Qgd29yayBldmVuIGlmICRsaWJkaXIgZG9lcyBub3QgZXhpc3RdXSkKK19MVF9UQUdERUNMKFtdLCBbaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl0sIFsxXSwKKyAgICBbV2hldGhlciB3ZSBuZWVkIGEgc2luZ2xlICItcnBhdGgiIGZsYWcgd2l0aCBhIHNlcGFyYXRlZCBhcmd1bWVudF0pCitfTFRfVEFHREVDTChbXSwgW2hhcmRjb2RlX2RpcmVjdF0sIFswXSwKKyAgICBbU2V0IHRvICJ5ZXMiIGlmIHVzaW5nIERJUi9saWJOQU1FJHtzaGFyZWRfZXh0fSBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMKKyAgICBESVIgaW50byB0aGUgcmVzdWx0aW5nIGJpbmFyeV0pCitfTFRfVEFHREVDTChbXSwgW2hhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZV0sIFswXSwKKyAgICBbU2V0IHRvICJ5ZXMiIGlmIHVzaW5nIERJUi9saWJOQU1FJHtzaGFyZWRfZXh0fSBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMKKyAgICBESVIgaW50byB0aGUgcmVzdWx0aW5nIGJpbmFyeSBhbmQgdGhlIHJlc3VsdGluZyBsaWJyYXJ5IGRlcGVuZGVuY3kgaXMKKyAgICAiYWJzb2x1dGUiLCBpLmUgaW1wb3NzaWJsZSB0byBjaGFuZ2UgYnkgc2V0dGluZyAke3NobGlicGF0aF92YXJ9IGlmIHRoZQorICAgIGxpYnJhcnkgaXMgcmVsb2NhdGVkXSkKK19MVF9UQUdERUNMKFtdLCBbaGFyZGNvZGVfbWludXNfTF0sIFswXSwKKyAgICBbU2V0IHRvICJ5ZXMiIGlmIHVzaW5nIHRoZSAtTERJUiBmbGFnIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIKKyAgICBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5XSkKK19MVF9UQUdERUNMKFtdLCBbaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl0sIFswXSwKKyAgICBbU2V0IHRvICJ5ZXMiIGlmIHVzaW5nIFNITElCUEFUSF9WQVI9RElSIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIKKyAgICBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5XSkKK19MVF9UQUdERUNMKFtdLCBbaGFyZGNvZGVfYXV0b21hdGljXSwgWzBdLAorICAgIFtTZXQgdG8gInllcyIgaWYgYnVpbGRpbmcgYSBzaGFyZWQgbGlicmFyeSBhdXRvbWF0aWNhbGx5IGhhcmRjb2RlcyBESVIKKyAgICBpbnRvIHRoZSBsaWJyYXJ5IGFuZCBhbGwgc3Vic2VxdWVudCBsaWJyYXJpZXMgYW5kIGV4ZWN1dGFibGVzIGxpbmtlZAorICAgIGFnYWluc3QgaXRdKQorX0xUX1RBR0RFQ0woW10sIFtpbmhlcml0X3JwYXRoXSwgWzBdLAorICAgIFtTZXQgdG8geWVzIGlmIGxpbmtlciBhZGRzIHJ1bnRpbWUgcGF0aHMgb2YgZGVwZW5kZW50IGxpYnJhcmllcworICAgIHRvIHJ1bnRpbWUgcGF0aCBsaXN0XSkKK19MVF9UQUdERUNMKFtdLCBbbGlua19hbGxfZGVwbGlic10sIFswXSwKKyAgICBbV2hldGhlciBsaWJ0b29sIG11c3QgbGluayBhIHByb2dyYW0gYWdhaW5zdCBhbGwgaXRzIGRlcGVuZGVuY3kgbGlicmFyaWVzXSkKK19MVF9UQUdERUNMKFtdLCBbZml4X3NyY2ZpbGVfcGF0aF0sIFsxXSwKKyAgICBbRml4IHRoZSBzaGVsbCB2YXJpYWJsZSAkc3JjZmlsZSBmb3IgdGhlIGNvbXBpbGVyXSkKK19MVF9UQUdERUNMKFtdLCBbYWx3YXlzX2V4cG9ydF9zeW1ib2xzXSwgWzBdLAorICAgIFtTZXQgdG8gInllcyIgaWYgZXhwb3J0ZWQgc3ltYm9scyBhcmUgcmVxdWlyZWRdKQorX0xUX1RBR0RFQ0woW10sIFtleHBvcnRfc3ltYm9sc19jbWRzXSwgWzJdLAorICAgIFtUaGUgY29tbWFuZHMgdG8gbGlzdCBleHBvcnRlZCBzeW1ib2xzXSkKK19MVF9UQUdERUNMKFtdLCBbZXhjbHVkZV9leHBzeW1zXSwgWzFdLAorICAgIFtTeW1ib2xzIHRoYXQgc2hvdWxkIG5vdCBiZSBsaXN0ZWQgaW4gdGhlIHByZWxvYWRlZCBzeW1ib2xzXSkKK19MVF9UQUdERUNMKFtdLCBbaW5jbHVkZV9leHBzeW1zXSwgWzFdLAorICAgIFtTeW1ib2xzIHRoYXQgbXVzdCBhbHdheXMgYmUgZXhwb3J0ZWRdKQorX0xUX1RBR0RFQ0woW10sIFtwcmVsaW5rX2NtZHNdLCBbMl0sCisgICAgW0NvbW1hbmRzIG5lY2Vzc2FyeSBmb3IgbGlua2luZyBwcm9ncmFtcyAoYWdhaW5zdCBsaWJyYXJpZXMpIHdpdGggdGVtcGxhdGVzXSkKK19MVF9UQUdERUNMKFtdLCBbZmlsZV9saXN0X3NwZWNdLCBbMV0sCisgICAgW1NwZWNpZnkgZmlsZW5hbWUgY29udGFpbmluZyBpbnB1dCBmaWxlc10pCitkbmwgRklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKK2RubCBfTFRfVEFHREVDTChbXSwgW3RocmVhZF9zYWZlX2ZsYWdfc3BlY10sIFsxXSwKK2RubCAgICBbQ29tcGlsZXIgZmxhZyB0byBnZW5lcmF0ZSB0aHJlYWQgc2FmZSBvYmplY3RzXSkKK10pIyBfTFRfTElOS0VSX1NITElCUworCisKKyMgX0xUX0xBTkdfQ19DT05GSUcoW1RBR10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFbnN1cmUgdGhhdCB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgZm9yIGEgQyBjb21waWxlciBhcmUgc3VpdGFibHkKKyMgZGVmaW5lZC4gIFRoZXNlIHZhcmlhYmxlcyBhcmUgc3Vic2VxdWVudGx5IHVzZWQgYnkgX0xUX0NPTkZJRyB0byB3cml0ZQorIyB0aGUgY29tcGlsZXIgY29uZmlndXJhdGlvbiB0byBgbGlidG9vbCcuCittNF9kZWZ1bihbX0xUX0xBTkdfQ19DT05GSUddLAorW200X3JlcXVpcmUoW19MVF9ERUNMX0VHUkVQXSlkbmwKK2x0X3NhdmVfQ0M9IiRDQyIKK0FDX0xBTkdfUFVTSChDKQorCisjIFNvdXJjZSBmaWxlIGV4dGVuc2lvbiBmb3IgQyB0ZXN0IHNvdXJjZXMuCithY19leHQ9YworCisjIE9iamVjdCBmaWxlIGV4dGVuc2lvbiBmb3IgY29tcGlsZWQgQyB0ZXN0IHNvdXJjZXMuCitvYmpleHQ9bworX0xUX1RBR1ZBUihvYmpleHQsICQxKT0kb2JqZXh0CisKKyMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBjb21waWxlIHRlc3RzCitsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGU9ImludCBzb21lX3ZhcmlhYmxlID0gMDsiCisKKyMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBsaW5rIHRlc3RzCitsdF9zaW1wbGVfbGlua190ZXN0X2NvZGU9J2ludCBtYWluKCl7cmV0dXJuKDApO30nCisKK19MVF9UQUdfQ09NUElMRVIKKyMgU2F2ZSB0aGUgZGVmYXVsdCBjb21waWxlciwgc2luY2UgaXQgZ2V0cyBvdmVyd3JpdHRlbiB3aGVuIHRoZSBvdGhlcgorIyB0YWdzIGFyZSBiZWluZyB0ZXN0ZWQsIGFuZCBfTFRfVEFHVkFSKGNvbXBpbGVyLCBbXSkgaXMgYSBOT1AuCitjb21waWxlcl9ERUZBVUxUPSRDQworCisjIHNhdmUgd2FybmluZ3MvYm9pbGVycGxhdGUgb2Ygc2ltcGxlIHRlc3QgY29kZQorX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFCitfTFRfTElOS0VSX0JPSUxFUlBMQVRFCisKKyMjIENBVkVBVCBFTVBUT1I6CisjIyBUaGVyZSBpcyBubyBlbmNhcHN1bGF0aW9uIHdpdGhpbiB0aGUgZm9sbG93aW5nIG1hY3JvcywgZG8gbm90IGNoYW5nZQorIyMgdGhlIHJ1bm5pbmcgb3JkZXIgb3Igb3RoZXJ3aXNlIG1vdmUgdGhlbSBhcm91bmQgdW5sZXNzIHlvdSBrbm93IGV4YWN0bHkKKyMjIHdoYXQgeW91IGFyZSBkb2luZy4uLgoraWYgdGVzdCAtbiAiJGNvbXBpbGVyIjsgdGhlbgorICBfTFRfQ09NUElMRVJfTk9fUlRUSSgkMSkKKyAgX0xUX0NPTVBJTEVSX1BJQygkMSkKKyAgX0xUX0NPTVBJTEVSX0NfTygkMSkKKyAgX0xUX0NPTVBJTEVSX0ZJTEVfTE9DS1MoJDEpCisgIF9MVF9MSU5LRVJfU0hMSUJTKCQxKQorICBfTFRfU1lTX0RZTkFNSUNfTElOS0VSKCQxKQorICBfTFRfTElOS0VSX0hBUkRDT0RFX0xJQlBBVEgoJDEpCisgIExUX1NZU19ETE9QRU5fU0VMRgorICBfTFRfQ01EX1NUUklQTElCCisKKyAgIyBSZXBvcnQgd2hpY2ggbGlicmFyeSB0eXBlcyB3aWxsIGFjdHVhbGx5IGJlIGJ1aWx0CisgIEFDX01TR19DSEVDS0lORyhbaWYgbGlidG9vbCBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzXSkKKyAgQUNfTVNHX1JFU1VMVChbJGNhbl9idWlsZF9zaGFyZWRdKQorCisgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzXSkKKyAgdGVzdCAiJGNhbl9idWlsZF9zaGFyZWQiID0gIm5vIiAmJiBlbmFibGVfc2hhcmVkPW5vCisKKyAgIyBPbiBBSVgsIHNoYXJlZCBsaWJyYXJpZXMgYW5kIHN0YXRpYyBsaWJyYXJpZXMgdXNlIHRoZSBzYW1lIG5hbWVzcGFjZSwgYW5kCisgICMgYXJlIGFsbCBidWlsdCBmcm9tIFBJQy4KKyAgY2FzZSAkaG9zdF9vcyBpbgorICBhaXgzKikKKyAgICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgJiYgZW5hYmxlX3N0YXRpYz1ubworICAgIGlmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCisgICAgICBhcmNoaXZlX2NtZHM9IiRhcmNoaXZlX2NtZHN+XCRSQU5MSUIgXCRsaWIiCisgICAgICBwb3N0aW5zdGFsbF9jbWRzPSckUkFOTElCICRsaWInCisgICAgZmkKKyAgICA7OworCisgIGFpeFtbNC05XV0qKQorICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgIT0gaWE2NCAmJiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSBubyA7IHRoZW4KKyAgICAgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyAmJiBlbmFibGVfc3RhdGljPW5vCisgICAgZmkKKyAgICA7OworICBlc2FjCisgIEFDX01TR19SRVNVTFQoWyRlbmFibGVfc2hhcmVkXSkKKworICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gYnVpbGQgc3RhdGljIGxpYnJhcmllc10pCisgICMgTWFrZSBzdXJlIGVpdGhlciBlbmFibGVfc2hhcmVkIG9yIGVuYWJsZV9zdGF0aWMgaXMgeWVzLgorICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgfHwgZW5hYmxlX3N0YXRpYz15ZXMKKyAgQUNfTVNHX1JFU1VMVChbJGVuYWJsZV9zdGF0aWNdKQorCisgIF9MVF9DT05GSUcoJDEpCitmaQorQUNfTEFOR19QT1AKK0NDPSIkbHRfc2F2ZV9DQyIKK10pIyBfTFRfTEFOR19DX0NPTkZJRworCisKKyMgX0xUX1BST0dfQ1hYCisjIC0tLS0tLS0tLS0tLQorIyBTaW5jZSBBQ19QUk9HX0NYWCBpcyBicm9rZW4sIGluIHRoYXQgaXQgcmV0dXJucyBnKysgaWYgdGhlcmUgaXMgbm8gYysrCisjIGNvbXBpbGVyLCB3ZSBoYXZlIG91ciBvd24gdmVyc2lvbiBoZXJlLgorbTRfZGVmdW4oW19MVF9QUk9HX0NYWF0sCitbCitwdXNoZGVmKFtBQ19NU0dfRVJST1JdLCBbX2x0X2NhdWdodF9DWFhfZXJyb3I9eWVzXSkKK0FDX1BST0dfQ1hYCitpZiB0ZXN0IC1uICIkQ1hYIiAmJiAoIHRlc3QgIlgkQ1hYIiAhPSAiWG5vIiAmJgorICAgICggKHRlc3QgIlgkQ1hYIiA9ICJYZysrIiAmJiBgZysrIC12ID4vZGV2L251bGwgMj4mMWAgKSB8fAorICAgICh0ZXN0ICJYJENYWCIgIT0gIlhnKysiKSkpIDsgdGhlbgorICBBQ19QUk9HX0NYWENQUAorZWxzZQorICBfbHRfY2F1Z2h0X0NYWF9lcnJvcj15ZXMKK2ZpCitwb3BkZWYoW0FDX01TR19FUlJPUl0pCitdKSMgX0xUX1BST0dfQ1hYCisKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbX0xUX1BST0dfQ1hYXSwgW10pCisKKworIyBfTFRfTEFOR19DWFhfQ09ORklHKFtUQUddKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFbnN1cmUgdGhhdCB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgZm9yIGEgQysrIGNvbXBpbGVyIGFyZSBzdWl0YWJseQorIyBkZWZpbmVkLiAgVGhlc2UgdmFyaWFibGVzIGFyZSBzdWJzZXF1ZW50bHkgdXNlZCBieSBfTFRfQ09ORklHIHRvIHdyaXRlCisjIHRoZSBjb21waWxlciBjb25maWd1cmF0aW9uIHRvIGBsaWJ0b29sJy4KK200X2RlZnVuKFtfTFRfTEFOR19DWFhfQ09ORklHXSwKK1tBQ19SRVFVSVJFKFtfTFRfUFJPR19DWFhdKWRubAorbTRfcmVxdWlyZShbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10pZG5sCittNF9yZXF1aXJlKFtfTFRfREVDTF9FR1JFUF0pZG5sCisKK0FDX0xBTkdfUFVTSChDKyspCitfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KK19MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0KK19MVF9UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9bm8KK19MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPQorX0xUX1RBR1ZBUihjb21waWxlcl9uZWVkc19vYmplY3QsICQxKT1ubworX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0KK19MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9bm8KK19MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlLCAkMSk9bm8KK19MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPQorX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkLCAkMSk9CitfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT0KK19MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPW5vCitfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT11bnN1cHBvcnRlZAorX0xUX1RBR1ZBUihoYXJkY29kZV9hdXRvbWF0aWMsICQxKT1ubworX0xUX1RBR1ZBUihpbmhlcml0X3JwYXRoLCAkMSk9bm8KK19MVF9UQUdWQVIobW9kdWxlX2NtZHMsICQxKT0KK19MVF9UQUdWQVIobW9kdWxlX2V4cHN5bV9jbWRzLCAkMSk9CitfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT11bmtub3duCitfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0kb2xkX2FyY2hpdmVfY21kcworX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPQorX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPQorX0xUX1RBR1ZBUihlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzLCAkMSk9bm8KKworIyBTb3VyY2UgZmlsZSBleHRlbnNpb24gZm9yIEMrKyB0ZXN0IHNvdXJjZXMuCithY19leHQ9Y3BwCisKKyMgT2JqZWN0IGZpbGUgZXh0ZW5zaW9uIGZvciBjb21waWxlZCBDKysgdGVzdCBzb3VyY2VzLgorb2JqZXh0PW8KK19MVF9UQUdWQVIob2JqZXh0LCAkMSk9JG9iamV4dAorCisjIE5vIHNlbnNlIGluIHJ1bm5pbmcgYWxsIHRoZXNlIHRlc3RzIGlmIHdlIGFscmVhZHkgZGV0ZXJtaW5lZCB0aGF0CisjIHRoZSBDWFggY29tcGlsZXIgaXNuJ3Qgd29ya2luZy4gIFNvbWUgdmFyaWFibGVzIChsaWtlIGVuYWJsZV9zaGFyZWQpCisjIGFyZSBjdXJyZW50bHkgYXNzdW1lZCB0byBhcHBseSB0byBhbGwgY29tcGlsZXJzIG9uIHRoaXMgcGxhdGZvcm0sCisjIGFuZCB3aWxsIGJlIGNvcnJ1cHRlZCBieSBzZXR0aW5nIHRoZW0gYmFzZWQgb24gYSBub24td29ya2luZyBjb21waWxlci4KK2lmIHRlc3QgIiRfbHRfY2F1Z2h0X0NYWF9lcnJvciIgIT0geWVzOyB0aGVuCisgICMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBjb21waWxlIHRlc3RzCisgIGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZT0iaW50IHNvbWVfdmFyaWFibGUgPSAwOyIKKworICAjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgbGluayB0ZXN0cworICBsdF9zaW1wbGVfbGlua190ZXN0X2NvZGU9J2ludCBtYWluKGludCwgY2hhciAqW1tdXSkgeyByZXR1cm4oMCk7IH0nCisKKyAgIyBsdG1haW4gb25seSB1c2VzICRDQyBmb3IgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIHNvIG1ha2Ugc3VyZSAkQ0MgaXMgc2V0LgorICBfTFRfVEFHX0NPTVBJTEVSCisKKyAgIyBzYXZlIHdhcm5pbmdzL2JvaWxlcnBsYXRlIG9mIHNpbXBsZSB0ZXN0IGNvZGUKKyAgX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFCisgIF9MVF9MSU5LRVJfQk9JTEVSUExBVEUKKworICAjIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgorICBsdF9zYXZlX0NDPSRDQworICBsdF9zYXZlX0xEPSRMRAorICBsdF9zYXZlX0dDQz0kR0NDCisgIEdDQz0kR1hYCisgIGx0X3NhdmVfd2l0aF9nbnVfbGQ9JHdpdGhfZ251X2xkCisgIGx0X3NhdmVfcGF0aF9MRD0kbHRfY3ZfcGF0aF9MRAorICBpZiB0ZXN0IC1uICIke2x0X2N2X3Byb2dfZ251X2xkY3h4K3NldH0iOyB0aGVuCisgICAgbHRfY3ZfcHJvZ19nbnVfbGQ9JGx0X2N2X3Byb2dfZ251X2xkY3h4CisgIGVsc2UKKyAgICAkYXNfdW5zZXQgbHRfY3ZfcHJvZ19nbnVfbGQKKyAgZmkKKyAgaWYgdGVzdCAtbiAiJHtsdF9jdl9wYXRoX0xEQ1hYK3NldH0iOyB0aGVuCisgICAgbHRfY3ZfcGF0aF9MRD0kbHRfY3ZfcGF0aF9MRENYWAorICBlbHNlCisgICAgJGFzX3Vuc2V0IGx0X2N2X3BhdGhfTEQKKyAgZmkKKyAgdGVzdCAteiAiJHtMRENYWCtzZXR9IiB8fCBMRD0kTERDWFgKKyAgQ0M9JHtDWFgtImMrKyJ9CisgIGNvbXBpbGVyPSRDQworICBfTFRfVEFHVkFSKGNvbXBpbGVyLCAkMSk9JENDCisgIF9MVF9DQ19CQVNFTkFNRShbJGNvbXBpbGVyXSkKKworICBpZiB0ZXN0IC1uICIkY29tcGlsZXIiOyB0aGVuCisgICAgIyBXZSBkb24ndCB3YW50IC1mbm8tZXhjZXB0aW9uIHdoZW4gY29tcGlsaW5nIEMrKyBjb2RlLCBzbyBzZXQgdGhlCisgICAgIyBub19idWlsdGluX2ZsYWcgc2VwYXJhdGVseQorICAgIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnLCAkMSk9JyAtZm5vLWJ1aWx0aW4nCisgICAgZWxzZQorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZywgJDEpPQorICAgIGZpCisKKyAgICBpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgorICAgICAgIyBTZXQgdXAgZGVmYXVsdCBHTlUgQysrIGNvbmZpZ3VyYXRpb24KKworICAgICAgTFRfUEFUSF9MRAorCisgICAgICAjIENoZWNrIGlmIEdOVSBDKysgdXNlcyBHTlUgbGQgYXMgdGhlIHVuZGVybHlpbmcgbGlua2VyLCBzaW5jZSB0aGUKKyAgICAgICMgYXJjaGl2aW5nIGNvbW1hbmRzIGJlbG93IGFzc3VtZSB0aGF0IEdOVSBsZCBpcyBiZWluZyB1c2VkLgorICAgICAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgorICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisKKyAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tLWV4cG9ydC1keW5hbWljJworCisgICAgICAgICMgSWYgYXJjaGl2ZV9jbWRzIHJ1bnMgTEQsIG5vdCBDQywgd2xhcmMgc2hvdWxkIGJlIGVtcHR5CisgICAgICAgICMgWFhYIEkgdGhpbmsgd2xhcmMgY2FuIGJlIGVsaW1pbmF0ZWQgaW4gbHRjZi1jeHgsIGJ1dCBJIG5lZWQgdG8KKyAgICAgICAgIyAgICAgaW52ZXN0aWdhdGUgaXQgYSBsaXR0bGUgYml0IG1vcmUuIChNTSkKKyAgICAgICAgd2xhcmM9JyR7d2x9JworCisgICAgICAgICMgYW5jaWVudCBHTlUgbGQgZGlkbid0IHN1cHBvcnQgLS13aG9sZS1hcmNoaXZlIGV0LiBhbC4KKyAgICAgICAgaWYgZXZhbCAiYCRDQyAtcHJpbnQtcHJvZy1uYW1lPWxkYCAtLWhlbHAgMj4mMSIgfAorCSAgJEdSRVAgJ25vLXdob2xlLWFyY2hpdmUnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICAgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPSIkd2xhcmMiJy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAnIiR3bGFyYyInLS1uby13aG9sZS1hcmNoaXZlJworICAgICAgICBlbHNlCisgICAgICAgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPQorICAgICAgICBmaQorICAgICAgZWxzZQorICAgICAgICB3aXRoX2dudV9sZD1ubworICAgICAgICB3bGFyYz0KKworICAgICAgICAjIEEgZ2VuZXJpYyBhbmQgdmVyeSBzaW1wbGUgZGVmYXVsdCBzaGFyZWQgbGlicmFyeSBjcmVhdGlvbgorICAgICAgICAjIGNvbW1hbmQgZm9yIEdOVSBDKysgZm9yIHRoZSBjYXNlIHdoZXJlIGl0IHVzZXMgdGhlIG5hdGl2ZQorICAgICAgICAjIGxpbmtlciwgaW5zdGVhZCBvZiBHTlUgbGQuICBJZiBwb3NzaWJsZSwgdGhpcyBzZXR0aW5nIHNob3VsZAorICAgICAgICAjIG92ZXJyaWRkZW4gdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIG5hdGl2ZSBsaW5rZXIgZmVhdHVyZXMgb24KKyAgICAgICAgIyB0aGUgcGxhdGZvcm0gaXQgaXMgYmVpbmcgdXNlZCBvbi4KKyAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbyAkbGliJworICAgICAgZmkKKworICAgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworICAgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCisgICAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KKyAgICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSckQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8ICRHUkVQICJcLUwiJworCisgICAgZWxzZQorICAgICAgR1hYPW5vCisgICAgICB3aXRoX2dudV9sZD1ubworICAgICAgd2xhcmM9CisgICAgZmkKKworICAgICMgUE9SVE1FOiBmaWxsIGluIGEgZGVzY3JpcHRpb24gb2YgeW91ciBzeXN0ZW0ncyBDKysgbGluayBjaGFyYWN0ZXJpc3RpY3MKKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdGhlICRjb21waWxlciBsaW5rZXIgKCRMRCkgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllc10pCisgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT15ZXMKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgICBhaXgzKikKKyAgICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisgICAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICAgICAgOzsKKyAgICAgIGFpeFtbNC05XV0qKQorICAgICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorICAgICAgICAgICMgT24gSUE2NCwgdGhlIGxpbmtlciBkb2VzIHJ1biB0aW1lIGxpbmtpbmcgYnkgZGVmYXVsdCwgc28gd2UgZG9uJ3QKKyAgICAgICAgICAjIGhhdmUgdG8gZG8gYW55dGhpbmcgc3BlY2lhbC4KKyAgICAgICAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPW5vCisgICAgICAgICAgZXhwX3N5bV9mbGFnPSctQmV4cG9ydCcKKyAgICAgICAgICBub19lbnRyeV9mbGFnPSIiCisgICAgICAgIGVsc2UKKyAgICAgICAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPW5vCisKKyAgICAgICAgICAjIFRlc3QgaWYgd2UgYXJlIHRyeWluZyB0byB1c2UgcnVuIHRpbWUgbGlua2luZyBvciBub3JtYWwKKyAgICAgICAgICAjIEFJWCBzdHlsZSBsaW5raW5nLiBJZiAtYnJ0bCBpcyBzb21ld2hlcmUgaW4gTERGTEFHUywgd2UKKyAgICAgICAgICAjIG5lZWQgdG8gZG8gcnVudGltZSBsaW5raW5nLgorICAgICAgICAgIGNhc2UgJGhvc3Rfb3MgaW4gYWl4NC5bWzIzXV18YWl4NC5bWzIzXV0uKnxhaXhbWzUtOV1dKikKKwkgICAgZm9yIGxkX2ZsYWcgaW4gJExERkxBR1M7IGRvCisJICAgICAgY2FzZSAkbGRfZmxhZyBpbgorCSAgICAgICotYnJ0bCopCisJICAgICAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPXllcworCSAgICAgICAgYnJlYWsKKwkgICAgICAgIDs7CisJICAgICAgZXNhYworCSAgICBkb25lCisJICAgIDs7CisgICAgICAgICAgZXNhYworCisgICAgICAgICAgZXhwX3N5bV9mbGFnPSctYmV4cG9ydCcKKyAgICAgICAgICBub19lbnRyeV9mbGFnPSctYm5vZW50cnknCisgICAgICAgIGZpCisKKyAgICAgICAgIyBXaGVuIGxhcmdlIGV4ZWN1dGFibGVzIG9yIHNoYXJlZCBvYmplY3RzIGFyZSBidWlsdCwgQUlYIGxkIGNhbgorICAgICAgICAjIGhhdmUgcHJvYmxlbXMgY3JlYXRpbmcgdGhlIHRhYmxlIG9mIGNvbnRlbnRzLiAgSWYgbGlua2luZyBhIGxpYnJhcnkKKyAgICAgICAgIyBvciBwcm9ncmFtIHJlc3VsdHMgaW4gImVycm9yIFRPQyBvdmVyZmxvdyIgYWRkIC1tbWluaW1hbC10b2MgdG8KKyAgICAgICAgIyBDWFhGTEFHUy9DRkxBR1MgZm9yIGcrKy9nY2MuICBJbiB0aGUgY2FzZXMgd2hlcmUgdGhhdCBpcyBub3QKKyAgICAgICAgIyBlbm91Z2ggdG8gZml4IHRoZSBwcm9ibGVtLCBhZGQgLVdsLC1iYmlndG9jIHRvIExERkxBR1MuCisKKyAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJworICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSwgJDEpPXllcworICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT0nOicKKyAgICAgICAgX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCisgICAgICAgIF9MVF9UQUdWQVIoZmlsZV9saXN0X3NwZWMsICQxKT0nJHt3bH0tZiwnCisKKyAgICAgICAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KKyAgICAgICAgICBjYXNlICRob3N0X29zIGluIGFpeDQuW1swMTJdXXxhaXg0LltbMDEyXV0uKikKKyAgICAgICAgICAjIFdlIG9ubHkgd2FudCB0byBkbyB0aGlzIG9uIEFJWCA0LjIgYW5kIGxvd2VyLCB0aGUgY2hlY2sKKyAgICAgICAgICAjIGJlbG93IGZvciBicm9rZW4gY29sbGVjdDIgZG9lc24ndCB3b3JrIHVuZGVyIDQuMysKKwkgIGNvbGxlY3QybmFtZT1gJHtDQ30gLXByaW50LXByb2ctbmFtZT1jb2xsZWN0MmAKKwkgIGlmIHRlc3QgLWYgIiRjb2xsZWN0Mm5hbWUiICYmCisJICAgICBzdHJpbmdzICIkY29sbGVjdDJuYW1lIiB8ICRHUkVQIHJlc29sdmVfbGliX25hbWUgPi9kZXYvbnVsbAorCSAgdGhlbgorCSAgICAjIFdlIGhhdmUgcmV3b3JrZWQgY29sbGVjdDIKKwkgICAgOgorCSAgZWxzZQorCSAgICAjIFdlIGhhdmUgb2xkIGNvbGxlY3QyCisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9dW5zdXBwb3J0ZWQKKwkgICAgIyBJdCBmYWlscyB0byBmaW5kIHVuaW5zdGFsbGVkIGxpYnJhcmllcyB3aGVuIHRoZSB1bmluc3RhbGxlZAorCSAgICAjIHBhdGggaXMgbm90IGxpc3RlZCBpbiB0aGUgbGlicGF0aC4gIFNldHRpbmcgaGFyZGNvZGVfbWludXNfTAorCSAgICAjIHRvIHVuc3VwcG9ydGVkIGZvcmNlcyByZWxpbmtpbmcKKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPQorCSAgZmkKKyAgICAgICAgICBlc2FjCisgICAgICAgICAgc2hhcmVkX2ZsYWc9Jy1zaGFyZWQnCisJICBpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KKwkgICAgc2hhcmVkX2ZsYWc9IiRzaGFyZWRfZmxhZyAiJyR7d2x9LUcnCisJICBmaQorICAgICAgICBlbHNlCisgICAgICAgICAgIyBub3QgdXNpbmcgZ2NjCisgICAgICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKwkgICMgVmlzdWFsQWdlIEMrKywgVmVyc2lvbiA1LjUgZm9yIEFJWCA1TCBmb3IgSUEtNjQsIEJldGEgMyBSZWxlYXNlCisJICAjIGNob2tlcyBvbiAtV2wsLUcuIFRoZSBmb2xsb3dpbmcgbGluZSBpcyBjb3JyZWN0OgorCSAgc2hhcmVkX2ZsYWc9Jy1HJworICAgICAgICAgIGVsc2UKKwkgICAgaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCisJICAgICAgc2hhcmVkX2ZsYWc9JyR7d2x9LUcnCisJICAgIGVsc2UKKwkgICAgICBzaGFyZWRfZmxhZz0nJHt3bH0tYk06U1JFJworCSAgICBmaQorICAgICAgICAgIGZpCisgICAgICAgIGZpCisKKyAgICAgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tYmV4cGFsbCcKKyAgICAgICAgIyBJdCBzZWVtcyB0aGF0IC1iZXhwYWxsIGRvZXMgbm90IGV4cG9ydCBzeW1ib2xzIGJlZ2lubmluZyB3aXRoCisgICAgICAgICMgdW5kZXJzY29yZSAoXyksIHNvIGl0IGlzIGJldHRlciB0byBnZW5lcmF0ZSBhIGxpc3Qgb2Ygc3ltYm9scyB0bworCSMgZXhwb3J0LgorICAgICAgICBfTFRfVEFHVkFSKGFsd2F5c19leHBvcnRfc3ltYm9scywgJDEpPXllcworICAgICAgICBpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KKyAgICAgICAgICAjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW50aW1lIGxvYWRpbmcgZmxhZ3MgKC1icnRsKSwKKyAgICAgICAgICAjIC1iZXJvayB3aWxsIGxpbmsgd2l0aG91dCBlcnJvciwgYnV0IG1heSBwcm9kdWNlIGEgYnJva2VuIGxpYnJhcnkuCisgICAgICAgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPSctYmVyb2snCisgICAgICAgICAgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuIGVtcHR5CisgICAgICAgICAgIyBleGVjdXRhYmxlLgorICAgICAgICAgIF9MVF9TWVNfTU9EVUxFX1BBVEhfQUlYCisgICAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisKKyAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJyJcJHt3bH0kbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyBgaWYgdGVzdCAieCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IiAhPSAieCI7IHRoZW4gJEVDSE8gIlgke3dsfSR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IiB8ICRYc2VkOyBlbHNlIDo7IGZpYCAnIlwke3dsfSRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scyAkc2hhcmVkX2ZsYWciCisgICAgICAgIGVsc2UKKyAgICAgICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tUiAkbGliZGlyOi91c3IvbGliOi9saWInCisJICAgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0iLXogbm9kZWZzIgorCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0iXCRDQyAkc2hhcmVkX2ZsYWciJyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICciXCR7d2x9JG5vX2VudHJ5X2ZsYWciJyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0ke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAnIlwke3dsfSRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scyIKKyAgICAgICAgICBlbHNlCisJICAgICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbgorCSAgICAjIGVtcHR5IGV4ZWN1dGFibGUuCisJICAgIF9MVF9TWVNfTU9EVUxFX1BBVEhfQUlYCisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorCSAgICAjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW4gdGltZSBsb2FkaW5nIGZsYWdzLAorCSAgICAjIC1iZXJvayB3aWxsIGxpbmsgd2l0aG91dCBlcnJvciwgYnV0IG1heSBwcm9kdWNlIGEgYnJva2VuIGxpYnJhcnkuCisJICAgIF9MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR7d2x9LWJlcm5vdG9rJworCSAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAke3dsfS1iZXJvaycKKwkgICAgIyBFeHBvcnRlZCBzeW1ib2xzIGNhbiBiZSBwdWxsZWQgaW50byBzaGFyZWQgb2JqZWN0cyBmcm9tIGFyY2hpdmVzCisJICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJGNvbnZlbmllbmNlJworCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9eWVzCisJICAgICMgVGhpcyBpcyBzaW1pbGFyIHRvIGhvdyBBSVggdHJhZGl0aW9uYWxseSBidWlsZHMgaXRzIHNoYXJlZAorCSAgICAjIGxpYnJhcmllcy4KKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9IlwkQ0MgJHNoYXJlZF9mbGFnIicgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAke3dsfS1ibm9lbnRyeSAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tYkU6JGV4cG9ydF9zeW1ib2xzJHthbGxvd191bmRlZmluZWRfZmxhZ31+JEFSICRBUl9GTEFHUyAkb3V0cHV0X29iamRpci8kbGlibmFtZSRyZWxlYXNlLmEgJG91dHB1dF9vYmpkaXIvJHNvbmFtZScKKyAgICAgICAgICBmaQorICAgICAgICBmaQorICAgICAgICA7OworCisgICAgICBiZW9zKikKKwlpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisJICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKKwkgICMgSm9zZXBoIEJlY2tlbmJhY2ggPGpyYjNAYmVzdC5jb20+IHNheXMgc29tZSByZWxlYXNlcyBvZiBnY2MKKwkgICMgc3VwcG9ydCAtLXVuZGVmaW5lZC4gIFRoaXMgZGVzZXJ2ZXMgc29tZSBpbnZlc3RpZ2F0aW9uLiAgRklYTUUKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtbm9zdGFydCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwllbHNlCisJICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJZmkKKwk7OworCisgICAgICBjaG9ydXMqKQorICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgICopCisJICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwkgIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgOzsKKworICAgICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgICAgICAjIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLAorICAgICAgICAjIGFzIHRoZXJlIGlzIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgorICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLUwkbGliZGlyJworICAgICAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKKyAgICAgICAgX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT1ubworICAgICAgICBfTFRfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKT15ZXMKKworICAgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnYXV0by1pbXBvcnQnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR7d2x9LS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJworICAgICAgICAgICMgSWYgdGhlIGV4cG9ydC1zeW1ib2xzIGZpbGUgYWxyZWFkeSBpcyBhIC5kZWYgZmlsZSAoMXN0IGxpbmUKKyAgICAgICAgICAjIGlzIEVYUE9SVFMpLCB1c2UgaXQgYXMgaXM7IG90aGVyd2lzZSwgcHJlcGVuZC4uLgorICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdpZiB0ZXN0ICJ4YCRTRUQgMXEgJGV4cG9ydF9zeW1ib2xzYCIgPSB4RVhQT1JUUzsgdGhlbgorCSAgICBjcCAkZXhwb3J0X3N5bWJvbHMgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CisgICAgICAgICAgZWxzZQorCSAgICBlY2hvIEVYUE9SVFMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKKwkgICAgY2F0ICRleHBvcnRfc3ltYm9scyA+PiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKKyAgICAgICAgICBmaX4KKyAgICAgICAgICAkQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWYgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCisgICAgICAgIGVsc2UKKyAgICAgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgICAgICAgIGZpCisgICAgICAgIDs7CisgICAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQorICAgICAgICBfTFRfREFSV0lOX0xJTktFUl9GRUFUVVJFUygkMSkKKwk7OworCisgICAgICBkZ3V4KikKKyAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICBlYysrKikKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwkgICAgOzsKKyAgICAgICAgICBnaGN4KikKKwkgICAgIyBHcmVlbiBIaWxscyBDKysgQ29tcGlsZXIKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwkgICAgOzsKKyAgICAgICAgICAqKQorCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCSAgICA7OworICAgICAgICBlc2FjCisgICAgICAgIDs7CisKKyAgICAgIGZyZWVic2RbWzEyXV0qKQorICAgICAgICAjIEMrKyBzaGFyZWQgbGlicmFyaWVzIHJlcG9ydGVkIHRvIGJlIGZhaXJseSBicm9rZW4gYmVmb3JlCisJIyBzd2l0Y2ggdG8gRUxGCisgICAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICAgICAgOzsKKworICAgICAgZnJlZWJzZC1lbGYqKQorICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KKyAgICAgICAgOzsKKworICAgICAgZnJlZWJzZCogfCBkcmFnb25mbHkqKQorICAgICAgICAjIEZyZWVCU0QgMyBhbmQgbGF0ZXIgdXNlIEdOVSBDKysgYW5kIEdOVSBsZCB3aXRoIHN0YW5kYXJkIEVMRgorICAgICAgICAjIGNvbnZlbnRpb25zCisgICAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9eWVzCisgICAgICAgIDs7CisKKyAgICAgIGdudSopCisgICAgICAgIDs7CisKKyAgICAgIGhwdXg5KikKKyAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9K2IgJHt3bH0kbGliZGlyJworICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CisgICAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUUnCisgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcyAjIE5vdCBpbiB0aGUgc2VhcmNoIFBBVEgsCisJCQkJICAgICAgICAgICAgICMgYnV0IGFzIHRoZSBkZWZhdWx0CisJCQkJICAgICAgICAgICAgICMgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCisKKyAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICBDQyopCisgICAgICAgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKyAgICAgICAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICAgICAgICAgIDs7CisgICAgICAgICAgYUNDKikKKyAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtYiAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworICAgICAgICAgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworICAgICAgICAgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCisgICAgICAgICAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KKyAgICAgICAgICAgICMKKyAgICAgICAgICAgICMgVGhlcmUgZG9lc24ndCBhcHBlYXIgdG8gYmUgYSB3YXkgdG8gcHJldmVudCB0aGlzIGNvbXBpbGVyIGZyb20KKyAgICAgICAgICAgICMgZXhwbGljaXRseSBsaW5raW5nIHN5c3RlbSBvYmplY3QgZmlsZXMgc28gd2UgbmVlZCB0byBzdHJpcCB0aGVtCisgICAgICAgICAgICAjIGZyb20gdGhlIG91dHB1dCBzbyB0aGF0IHRoZXkgZG9uJ3QgZ2V0IGluY2x1ZGVkIGluIHRoZSBsaWJyYXJ5CisgICAgICAgICAgICAjIGRlcGVuZGVuY2llcy4KKyAgICAgICAgICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSd0ZW1wbGlzdD1gKCRDQyAtYiAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSkgfCAkRUdSRVAgIlwtTCJgOyBsaXN0PSIiOyBmb3IgeiBpbiAkdGVtcGxpc3Q7IGRvIGNhc2UgJHogaW4gY29uZnRlc3QuJG9iamV4dCkgbGlzdD0iJGxpc3QgJHoiOzsgKi4kb2JqZXh0KTs7ICopIGxpc3Q9IiRsaXN0ICR6Ijs7ZXNhYzsgZG9uZTsgJEVDSE8gIlgkbGlzdCIgfCAkWHNlZCcKKyAgICAgICAgICAgIDs7CisgICAgICAgICAgKikKKyAgICAgICAgICAgIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCisgICAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAtZlBJQyAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKyAgICAgICAgICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgOzsKKworICAgICAgaHB1eDEwKnxocHV4MTEqKQorICAgICAgICBpZiB0ZXN0ICR3aXRoX2dudV9sZCA9IG5vOyB0aGVuCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0rYiAke3dsfSRsaWJkaXInCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CisKKyAgICAgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgICAgICAgaHBwYSo2NCp8aWE2NCopCisgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAqKQorCSAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUUnCisgICAgICAgICAgICAgIDs7CisgICAgICAgICAgZXNhYworICAgICAgICBmaQorICAgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgICAgIGhwcGEqNjQqfGlhNjQqKQorICAgICAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubworICAgICAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKyAgICAgICAgICAgIDs7CisgICAgICAgICAgKikKKyAgICAgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisgICAgICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSwgJDEpPXllcworICAgICAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzICMgTm90IGluIHRoZSBzZWFyY2ggUEFUSCwKKwkJCQkJICAgICAgICAgIyBidXQgYXMgdGhlIGRlZmF1bHQKKwkJCQkJICAgICAgICAgIyBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KKyAgICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKKworICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgIENDKikKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwkgICAgOzsKKyAgICAgICAgICBhQ0MqKQorCSAgICBjYXNlICRob3N0X2NwdSBpbgorCSAgICAgIGhwcGEqNjQqKQorCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1iICR7d2x9K2ggJHt3bH0kc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICAgICAgOzsKKwkgICAgICBpYTY0KikKKwkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtYiAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKKwkgICAgICAgIDs7CisJICAgICAgKikKKwkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtYiAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICAgICAgOzsKKwkgICAgZXNhYworCSAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCisJICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgorCSAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KKwkgICAgIworCSAgICAjIFRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGEgd2F5IHRvIHByZXZlbnQgdGhpcyBjb21waWxlciBmcm9tCisJICAgICMgZXhwbGljaXRseSBsaW5raW5nIHN5c3RlbSBvYmplY3QgZmlsZXMgc28gd2UgbmVlZCB0byBzdHJpcCB0aGVtCisJICAgICMgZnJvbSB0aGUgb3V0cHV0IHNvIHRoYXQgdGhleSBkb24ndCBnZXQgaW5jbHVkZWQgaW4gdGhlIGxpYnJhcnkKKwkgICAgIyBkZXBlbmRlbmNpZXMuCisJICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSd0ZW1wbGlzdD1gKCRDQyAtYiAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSkgfCAkR1JFUCAiXC1MImA7IGxpc3Q9IiI7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyAkRUNITyAiWCRsaXN0IiB8ICRYc2VkJworCSAgICA7OworICAgICAgICAgICopCisJICAgIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCisJICAgICAgaWYgdGVzdCAkd2l0aF9nbnVfbGQgPSBubzsgdGhlbgorCSAgICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKwkgICAgICAgICAgaHBwYSo2NCopCisJICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICAgICAgICAgIDs7CisJICAgICAgICAgIGlhNjQqKQorCSAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKKwkgICAgICAgICAgICA7OworCSAgICAgICAgICAqKQorCSAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICAgICAgICAgIDs7CisJICAgICAgICBlc2FjCisJICAgICAgZmkKKwkgICAgZWxzZQorCSAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwkgICAgZmkKKwkgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgICA7OworCisgICAgICBpbnRlcml4W1szLTldXSopCisJX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubworCV9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisJX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoLCRsaWJkaXInCisJX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tRScKKwkjIEhhY2s6IE9uIEludGVyaXggMy54LCB3ZSBjYW5ub3QgY29tcGlsZSBQSUMgYmVjYXVzZSBvZiBhIGJyb2tlbiBnY2MuCisJIyBJbnN0ZWFkLCBzaGFyZWQgbGlicmFyaWVzIGFyZSBsb2FkZWQgYXQgYW4gaW1hZ2UgYmFzZSAoMHgxMDAwMDAwMCBieQorCSMgZGVmYXVsdCkgYW5kIHJlbG9jYXRlZCBpZiB0aGV5IGNvbmZsaWN0LCB3aGljaCBpcyBhIHNsb3cgdmVyeSBtZW1vcnkKKwkjIGNvbnN1bWluZyBhbmQgZnJhZ21lbnRpbmcgcHJvY2Vzcy4gIFRvIGF2b2lkIHRoaXMsIHdlIHBpY2sgYSByYW5kb20sCisJIyAyNTYgS2lCLWFsaWduZWQgaW1hZ2UgYmFzZSBiZXR3ZWVuIDB4NTAwMDAwMDAgYW5kIDB4NkZGQzAwMDAgYXQgbGluaworCSMgdGltZS4gIE1vdmluZyB1cCBmcm9tIDB4MTAwMDAwMDAgYWxzbyBhbGxvd3MgbW9yZSBzYnJrKDIpIHNwYWNlLgorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCwkc29uYW1lICR7d2x9LS1pbWFnZS1iYXNlLGBleHByICR7UkFORE9NLSQkfSAlIDQwOTYgLyAyIFwqIDI2MjE0NCArIDEzNDIxNzcyODBgIC1vICRsaWInCisJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J3NlZCAicyxeLF8sIiAkZXhwb3J0X3N5bWJvbHMgPiRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwc3ltfiRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCwkc29uYW1lICR7d2x9LS1yZXRhaW4tc3ltYm9scy1maWxlLCRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwc3ltICR7d2x9LS1pbWFnZS1iYXNlLGBleHByICR7UkFORE9NLSQkfSAlIDQwOTYgLyAyIFwqIDI2MjE0NCArIDEzNDIxNzcyODBgIC1vICRsaWInCisJOzsKKyAgICAgIGlyaXg1KiB8IGlyaXg2KikKKyAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICBDQyopCisJICAgICMgU0dJIEMrKworCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtYWxsIC1tdWx0aWdvdCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiAkRUNITyAiWC1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nIiB8ICRYc2VkYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisKKwkgICAgIyBBcmNoaXZlcyBjb250YWluaW5nIEMrKyBvYmplY3QgZmlsZXMgbXVzdCBiZSBjcmVhdGVkIHVzaW5nCisJICAgICMgIkNDIC1hciIsIHdoZXJlICJDQyIgaXMgdGhlIElSSVggQysrIGNvbXBpbGVyLiAgVGhpcyBpcworCSAgICAjIG5lY2Vzc2FyeSB0byBtYWtlIHN1cmUgaW5zdGFudGlhdGVkIHRlbXBsYXRlcyBhcmUgaW5jbHVkZWQKKwkgICAgIyBpbiB0aGUgYXJjaGl2ZS4KKwkgICAgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtYXIgLVdSLC11IC1vICRvbGRsaWIgJG9sZG9ianMnCisJICAgIDs7CisgICAgICAgICAgKikKKwkgICAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KKwkgICAgICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKwkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgJEVDSE8gIlgke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciIHwgJFhzZWRgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisJICAgICAgZWxzZQorCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiAkRUNITyAiWCR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyIgfCAkWHNlZGAgLW8gJGxpYicKKwkgICAgICBmaQorCSAgICBmaQorCSAgICBfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKKwkgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CisgICAgICAgIF9MVF9UQUdWQVIoaW5oZXJpdF9ycGF0aCwgJDEpPXllcworICAgICAgICA7OworCisgICAgICBsaW51eCogfCBrKmJzZCotZ251IHwga29wZW5zb2xhcmlzKi1nbnUpCisgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICAgS0NDKikKKwkgICAgIyBLdWNrIGFuZCBBc3NvY2lhdGVzLCBJbmMuIChLQUkpIEMrKyBDb21waWxlcgorCisJICAgICMgS0NDIHdpbGwgb25seSBjcmVhdGUgYSBzaGFyZWQgbGlicmFyeSBpZiB0aGUgb3V0cHV0IGZpbGUKKwkgICAgIyBlbmRzIHdpdGggIi5zbyIgKG9yICIuc2wiIGZvciBIUC1VWCksIHNvIHJlbmFtZSB0aGUgbGlicmFyeQorCSAgICAjIHRvIGl0cyBwcm9wZXIgbmFtZSAod2l0aCB2ZXJzaW9uKSBhZnRlciBsaW5raW5nLgorCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSd0ZW1wZXh0PWBlY2hvICRzaGFyZWRfZXh0IHwgJFNFRCAtZSAnXCcncy9cKFtbXigpMC05QS1aYS16e31dXVwpL1xcXFxcMS9nJ1wnJ2A7IHRlbXBsaWI9YGVjaG8gJGxpYiB8ICRTRUQgLWUgInMvXCR7dGVtcGV4dH1cLi4qLy5zby8iYDsgJENDICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtLXNvbmFtZSAkc29uYW1lIC1vIFwkdGVtcGxpYjsgbXYgXCR0ZW1wbGliICRsaWInCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSd0ZW1wZXh0PWBlY2hvICRzaGFyZWRfZXh0IHwgJFNFRCAtZSAnXCcncy9cKFtbXigpMC05QS1aYS16e31dXVwpL1xcXFxcMS9nJ1wnJ2A7IHRlbXBsaWI9YGVjaG8gJGxpYiB8ICRTRUQgLWUgInMvXCR7dGVtcGV4dH1cLi4qLy5zby8iYDsgJENDICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtLXNvbmFtZSAkc29uYW1lIC1vIFwkdGVtcGxpYiAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlLCRleHBvcnRfc3ltYm9sczsgbXYgXCR0ZW1wbGliICRsaWInCisJICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKKwkgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCisJICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorCSAgICAjCisJICAgICMgVGhlcmUgZG9lc24ndCBhcHBlYXIgdG8gYmUgYSB3YXkgdG8gcHJldmVudCB0aGlzIGNvbXBpbGVyIGZyb20KKwkgICAgIyBleHBsaWNpdGx5IGxpbmtpbmcgc3lzdGVtIG9iamVjdCBmaWxlcyBzbyB3ZSBuZWVkIHRvIHN0cmlwIHRoZW0KKwkgICAgIyBmcm9tIHRoZSBvdXRwdXQgc28gdGhhdCB0aGV5IGRvbid0IGdldCBpbmNsdWRlZCBpbiB0aGUgbGlicmFyeQorCSAgICAjIGRlcGVuZGVuY2llcy4KKwkgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J3RlbXBsaXN0PWAkQ0MgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IC1vIGxpYmNvbmZ0ZXN0JHNoYXJlZF9leHQgMj4mMSB8ICRHUkVQICJsZCJgOyBybSAtZiBsaWJjb25mdGVzdCRzaGFyZWRfZXh0OyBsaXN0PSIiOyBmb3IgeiBpbiAkdGVtcGxpc3Q7IGRvIGNhc2UgJHogaW4gY29uZnRlc3QuJG9iamV4dCkgbGlzdD0iJGxpc3QgJHoiOzsgKi4kb2JqZXh0KTs7ICopIGxpc3Q9IiRsaXN0ICR6Ijs7ZXNhYzsgZG9uZTsgJEVDSE8gIlgkbGlzdCIgfCAkWHNlZCcKKworCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGgsJGxpYmRpcicKKwkgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tLWV4cG9ydC1keW5hbWljJworCisJICAgICMgQXJjaGl2ZXMgY29udGFpbmluZyBDKysgb2JqZWN0IGZpbGVzIG11c3QgYmUgY3JlYXRlZCB1c2luZworCSAgICAjICJDQyAtQnN0YXRpYyIsIHdoZXJlICJDQyIgaXMgdGhlIEtBSSBDKysgY29tcGlsZXIuCisJICAgIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSckQ0MgLUJzdGF0aWMgLW8gJG9sZGxpYiAkb2xkb2JqcycKKwkgICAgOzsKKwkgIGljcGMqIHwgZWNwYyogKQorCSAgICAjIEludGVsIEMrKworCSAgICB3aXRoX2dudV9sZD15ZXMKKwkgICAgIyB2ZXJzaW9uIDguMCBhbmQgYWJvdmUgb2YgaWNwYyBjaG9rZSBvbiBtdWx0aXBseSBkZWZpbmVkIHN5bWJvbHMKKwkgICAgIyBpZiB3ZSBhZGQgJHByZWRlcF9vYmplY3RzIGFuZCAkcG9zdGRlcF9vYmplY3RzLCBob3dldmVyIDcuMSBhbmQKKwkgICAgIyBlYXJsaWVyIGRvIG5vdCBhZGQgdGhlIG9iamVjdHMgdGhlbXNlbHZlcy4KKwkgICAgY2FzZSBgJENDIC1WIDI+JjFgIGluCisJICAgICAgKiJWZXJzaW9uIDcuIiopCisJICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwkJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworCQk7OworCSAgICAgICopICAjIFZlcnNpb24gOC4wIG9yIG5ld2VyCisJICAgICAgICB0bXBfaWR5bj0KKwkgICAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisJCSAgaWE2NCopIHRtcF9pZHluPScgLWlfZHluYW1pYyc7OworCQllc2FjCisJICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCciJHRtcF9pZHluIicgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCciJHRtcF9pZHluIicgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisJCTs7CisJICAgIGVzYWMKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCwkbGliZGlyJworCSAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS0tZXhwb3J0LWR5bmFtaWMnCisJICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHt3bH0tLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCisJICAgIDs7CisgICAgICAgICAgcGdDQyogfCBwZ2NwcCopCisgICAgICAgICAgICAjIFBvcnRsYW5kIEdyb3VwIEMrKyBjb21waWxlcgorCSAgICBjYXNlIGAkQ0MgLVZgIGluCisJICAgICpwZ0NDXCBbWzEtNV1dKiB8ICpwZ2NwcFwgW1sxLTVdXSopCisJICAgICAgX0xUX1RBR1ZBUihwcmVsaW5rX2NtZHMsICQxKT0ndHBsZGlyPVRlbXBsYXRlLmRpcn4KKwkJcm0gLXJmICR0cGxkaXJ+CisJCSRDQyAtLXByZWxpbmtfb2JqZWN0cyAtLWluc3RhbnRpYXRpb25fZGlyICR0cGxkaXIgJG9ianMgJGxpYm9ianMgJGNvbXBpbGVfZGVwbGlic34KKwkJY29tcGlsZV9jb21tYW5kPSIkY29tcGlsZV9jb21tYW5kIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8ICROTDJTUGAiJworCSAgICAgIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSd0cGxkaXI9VGVtcGxhdGUuZGlyfgorCQlybSAtcmYgJHRwbGRpcn4KKwkJJENDIC0tcHJlbGlua19vYmplY3RzIC0taW5zdGFudGlhdGlvbl9kaXIgJHRwbGRpciAkb2xkb2JqcyRvbGRfZGVwbGlic34KKwkJJEFSICRBUl9GTEFHUyAkb2xkbGliJG9sZG9ianMkb2xkX2RlcGxpYnMgYGZpbmQgJHRwbGRpciAtbmFtZSBcKi5vIHwgJE5MMlNQYH4KKwkJJFJBTkxJQiAkb2xkbGliJworCSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9J3RwbGRpcj1UZW1wbGF0ZS5kaXJ+CisJCXJtIC1yZiAkdHBsZGlyfgorCQkkQ0MgLS1wcmVsaW5rX29iamVjdHMgLS1pbnN0YW50aWF0aW9uX2RpciAkdHBsZGlyICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkY29udmVuaWVuY2UgJHBvc3RkZXBfb2JqZWN0c34KKwkJJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyBgZmluZCAkdHBsZGlyIC1uYW1lIFwqLm8gfCAkTkwyU1BgICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgLW8gJGxpYicKKwkgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0ndHBsZGlyPVRlbXBsYXRlLmRpcn4KKwkJcm0gLXJmICR0cGxkaXJ+CisJCSRDQyAtLXByZWxpbmtfb2JqZWN0cyAtLWluc3RhbnRpYXRpb25fZGlyICR0cGxkaXIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRjb252ZW5pZW5jZSAkcG9zdGRlcF9vYmplY3RzfgorCQkkQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8ICROTDJTUGAgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR7d2x9JGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisJICAgICAgOzsKKwkgICAgKikgIyBWZXJzaW9uIDYgd2lsbCB1c2Ugd2VhayBzeW1ib2xzCisJICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIC1vICRsaWInCisJICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR7d2x9JGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisJICAgICAgOzsKKwkgICAgZXNhYworCisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS0tcnBhdGggJHt3bH0kbGliZGlyJworCSAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS0tZXhwb3J0LWR5bmFtaWMnCisJICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHt3bH0tLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgJEVDSE8gXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJworICAgICAgICAgICAgOzsKKwkgIGN4eCopCisJICAgICMgQ29tcGFxIEMrKworCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAgLW8gJGxpYiAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scycKKworCSAgICBydW5wYXRoX3Zhcj1MRF9SVU5fUEFUSAorCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLXJwYXRoICRsaWJkaXInCisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKKworCSAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCisJICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgorCSAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KKwkgICAgIworCSAgICAjIFRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGEgd2F5IHRvIHByZXZlbnQgdGhpcyBjb21waWxlciBmcm9tCisJICAgICMgZXhwbGljaXRseSBsaW5raW5nIHN5c3RlbSBvYmplY3QgZmlsZXMgc28gd2UgbmVlZCB0byBzdHJpcCB0aGVtCisJICAgICMgZnJvbSB0aGUgb3V0cHV0IHNvIHRoYXQgdGhleSBkb24ndCBnZXQgaW5jbHVkZWQgaW4gdGhlIGxpYnJhcnkKKwkgICAgIyBkZXBlbmRlbmNpZXMuCisJICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSd0ZW1wbGlzdD1gJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCAkR1JFUCAibGQiYDsgdGVtcGxpc3Q9YCRFQ0hPICJYJHRlbXBsaXN0IiB8ICRYc2VkIC1lICJzL1woXi4qbGQuKlwpXCggLipsZCAuKiRcKS9cMS8iYDsgbGlzdD0iIjsgZm9yIHogaW4gJHRlbXBsaXN0OyBkbyBjYXNlICR6IGluIGNvbmZ0ZXN0LiRvYmpleHQpIGxpc3Q9IiRsaXN0ICR6Ijs7ICouJG9iamV4dCk7OyAqKSBsaXN0PSIkbGlzdCAkeiI7O2VzYWM7IGRvbmU7ICRFQ0hPICJYJGxpc3QiIHwgJFhzZWQnCisJICAgIDs7CisJICB4bCopCisJICAgICMgSUJNIFhMIDguMCBvbiBQUEMsIHdpdGggR05VIGxkCisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisJICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS1leHBvcnQtZHluYW1pYycKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1xbWtzaHJvYmogJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJICAgIGlmIHRlc3QgIngkc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nIiA9IHh5ZXM7IHRoZW4KKwkgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nZWNobyAieyBnbG9iYWw6IiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKwkJY2F0ICRleHBvcnRfc3ltYm9scyB8IHNlZCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorCQllY2hvICJsb2NhbDogKjsgfTsiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKwkJJENDIC1xbWtzaHJvYmogJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXZlcnNpb24tc2NyaXB0ICR7d2x9JG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyIC1vICRsaWInCisJICAgIGZpCisJICAgIDs7CisJICAqKQorCSAgICBjYXNlIGAkQ0MgLVYgMj4mMSB8IHNlZCA1cWAgaW4KKwkgICAgKlN1blwgQyopCisJICAgICAgIyBTdW4gQysrIDUuOQorCSAgICAgIF9MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nIC16ZGVmcycKKwkgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAtaCRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisJICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1oJHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR7d2x9JGV4cG9ydF9zeW1ib2xzJworCSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctUiRsaWJkaXInCisJICAgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScke3dsfS0td2hvbGUtYXJjaGl2ZWBuZXdfY29udmVuaWVuY2U9OyBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0IC16IFwiJGNvbnZcIiB8fCBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7ICRFQ0hPIFwiJG5ld19jb252ZW5pZW5jZVwiYCAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKKwkgICAgICBfTFRfVEFHVkFSKGNvbXBpbGVyX25lZWRzX29iamVjdCwgJDEpPXllcworCisJICAgICAgIyBOb3Qgc3VyZSB3aGV0aGVyIHNvbWV0aGluZyBiYXNlZCBvbgorCSAgICAgICMgJENDICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAtbyBsaWJjb25mdGVzdCRzaGFyZWRfZXh0IDI+JjEKKwkgICAgICAjIHdvdWxkIGJlIGJldHRlci4KKwkgICAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nZWNobycKKworCSAgICAgICMgQXJjaGl2ZXMgY29udGFpbmluZyBDKysgb2JqZWN0IGZpbGVzIG11c3QgYmUgY3JlYXRlZCB1c2luZworCSAgICAgICMgIkNDIC14YXIiLCB3aGVyZSAiQ0MiIGlzIHRoZSBTdW4gQysrIGNvbXBpbGVyLiAgVGhpcyBpcworCSAgICAgICMgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VyZSBpbnN0YW50aWF0ZWQgdGVtcGxhdGVzIGFyZSBpbmNsdWRlZAorCSAgICAgICMgaW4gdGhlIGFyY2hpdmUuCisJICAgICAgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAteGFyIC1vICRvbGRsaWIgJG9sZG9ianMnCisJICAgICAgOzsKKwkgICAgZXNhYworCSAgICA7OworCWVzYWMKKwk7OworCisgICAgICBseW54b3MqKQorICAgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwlfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJOzsKKworICAgICAgbTg4ayopCisgICAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorICAgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJOzsKKworICAgICAgbXZzKikKKyAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICBjeHgqKQorCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCSAgICA7OworCSAgKikKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwkgICAgOzsKKwllc2FjCisJOzsKKworICAgICAgbmV0YnNkKikKKyAgICAgICAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fID4vZGV2L251bGw7IHRoZW4KKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtQnNoYXJlYWJsZSAgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkbGlua2VyX2ZsYWdzJworCSAgd2xhcmM9CisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLVIkbGliZGlyJworCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisJZmkKKwkjIFdvcmthcm91bmQgc29tZSBicm9rZW4gcHJlLTEuNSB0b29sY2hhaW5zCisJb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9JyRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgJEdSRVAgY29uZnRlc3QuJG9iamV4dCB8ICRTRUQgLWUgInM6LWxnY2MgLWxjIC1sZ2NjOjoiJworCTs7CisKKyAgICAgICpudG8qIHwgKnFueCopCisgICAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9eWVzCisJOzsKKworICAgICAgb3BlbmJzZDIqKQorICAgICAgICAjIEMrKyBzaGFyZWQgbGlicmFyaWVzIGFyZSBmYWlybHkgYnJva2VuCisJX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCTs7CisKKyAgICAgIG9wZW5ic2QqKQorCWlmIHRlc3QgLWYgL3Vzci9saWJleGVjL2xkLnNvOyB0aGVuCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlLCAkMSk9eWVzCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1vICRsaWInCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGgsJGxpYmRpcicKKwkgIGlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfX2AiIHx8IHRlc3QgIiRob3N0X29zLSRob3N0X2NwdSIgPSAib3BlbmJzZDIuOC1wb3dlcnBjIjsgdGhlbgorCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlLCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworCSAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1FJworCSAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9IiR3bGFyYyInLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlICciJHdsYXJjIictLW5vLXdob2xlLWFyY2hpdmUnCisJICBmaQorCSAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9ZWNobworCWVsc2UKKwkgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwlmaQorCTs7CisKKyAgICAgIG9zZjMqIHwgb3NmNCogfCBvc2Y1KikKKyAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICBLQ0MqKQorCSAgICAjIEt1Y2sgYW5kIEFzc29jaWF0ZXMsIEluYy4gKEtBSSkgQysrIENvbXBpbGVyCisKKwkgICAgIyBLQ0Mgd2lsbCBvbmx5IGNyZWF0ZSBhIHNoYXJlZCBsaWJyYXJ5IGlmIHRoZSBvdXRwdXQgZmlsZQorCSAgICAjIGVuZHMgd2l0aCAiLnNvIiAob3IgIi5zbCIgZm9yIEhQLVVYKSwgc28gcmVuYW1lIHRoZSBsaWJyYXJ5CisJICAgICMgdG8gaXRzIHByb3BlciBuYW1lICh3aXRoIHZlcnNpb24pIGFmdGVyIGxpbmtpbmcuCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9J3RlbXBleHQ9YGVjaG8gJHNoYXJlZF9leHQgfCAkU0VEIC1lICdcJydzL1woW1teKCkwLTlBLVphLXp7fV1dXCkvXFxcXFwxL2cnXCcnYDsgdGVtcGxpYj1gZWNobyAiJGxpYiIgfCAkU0VEIC1lICJzL1wke3RlbXBleHR9XC4uKi8uc28vImA7ICRDQyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLS1zb25hbWUgJHNvbmFtZSAtbyBcJHRlbXBsaWI7IG12IFwkdGVtcGxpYiAkbGliJworCisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCwkbGliZGlyJworCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CisKKwkgICAgIyBBcmNoaXZlcyBjb250YWluaW5nIEMrKyBvYmplY3QgZmlsZXMgbXVzdCBiZSBjcmVhdGVkIHVzaW5nCisJICAgICMgdGhlIEtBSSBDKysgY29tcGlsZXIuCisJICAgIGNhc2UgJGhvc3QgaW4KKwkgICAgICBvc2YzKikgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtQnN0YXRpYyAtbyAkb2xkbGliICRvbGRvYmpzJyA7OworCSAgICAgICopIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSckQ0MgLW8gJG9sZGxpYiAkb2xkb2JqcycgOzsKKwkgICAgZXNhYworCSAgICA7OworICAgICAgICAgIFJDQyopCisJICAgICMgUmF0aW9uYWwgQysrIDIuNC4xCisJICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJICAgIDs7CisgICAgICAgICAgY3h4KikKKwkgICAgY2FzZSAkaG9zdCBpbgorCSAgICAgIG9zZjMqKQorCSAgICAgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgJHt3bH0tZXhwZWN0X3VucmVzb2x2ZWQgJHt3bH1cKicKKwkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiAkRUNITyAiWCR7d2x9LXNldF92ZXJzaW9uICR2ZXJzdHJpbmciIHwgJFhzZWRgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwkgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisJCTs7CisJICAgICAgKikKKwkgICAgICAgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nIC1leHBlY3RfdW5yZXNvbHZlZCBcKicKKwkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1tc3ltIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgJEVDSE8gIlgtc2V0X3ZlcnNpb24gJHZlcnN0cmluZyIgfCAkWHNlZGAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2ZvciBpIGluIGBjYXQgJGV4cG9ydF9zeW1ib2xzYDsgZG8gcHJpbnRmICIlcyAlc1xcbiIgLWV4cG9ydGVkX3N5bWJvbCAiXCRpIiA+PiAkbGliLmV4cDsgZG9uZX4KKwkgICAgICAgICAgZWNobyAiLWhpZGRlbiI+PiAkbGliLmV4cH4KKwkgICAgICAgICAgJENDIC1zaGFyZWQkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1tc3ltIC1zb25hbWUgJHNvbmFtZSAke3dsfS1pbnB1dCAke3dsfSRsaWIuZXhwICBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgJEVDSE8gIlgtc2V0X3ZlcnNpb24gJHZlcnN0cmluZyIgfCAkWHNlZGAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGlifgorCSAgICAgICAgICAkUk0gJGxpYi5leHAnCisJICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLXJwYXRoICRsaWJkaXInCisJCTs7CisJICAgIGVzYWMKKworCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CisKKwkgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworCSAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KKwkgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCisJICAgICMKKwkgICAgIyBUaGVyZSBkb2Vzbid0IGFwcGVhciB0byBiZSBhIHdheSB0byBwcmV2ZW50IHRoaXMgY29tcGlsZXIgZnJvbQorCSAgICAjIGV4cGxpY2l0bHkgbGlua2luZyBzeXN0ZW0gb2JqZWN0IGZpbGVzIHNvIHdlIG5lZWQgdG8gc3RyaXAgdGhlbQorCSAgICAjIGZyb20gdGhlIG91dHB1dCBzbyB0aGF0IHRoZXkgZG9uJ3QgZ2V0IGluY2x1ZGVkIGluIHRoZSBsaWJyYXJ5CisJICAgICMgZGVwZW5kZW5jaWVzLgorCSAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0ndGVtcGxpc3Q9YCRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgJEdSRVAgImxkIiB8ICRHUkVQIC12ICJsZDoiYDsgdGVtcGxpc3Q9YCRFQ0hPICJYJHRlbXBsaXN0IiB8ICRYc2VkIC1lICJzL1woXi4qbGQuKlwpXCggLipsZC4qJFwpL1wxLyJgOyBsaXN0PSIiOyBmb3IgeiBpbiAkdGVtcGxpc3Q7IGRvIGNhc2UgJHogaW4gY29uZnRlc3QuJG9iamV4dCkgbGlzdD0iJGxpc3QgJHoiOzsgKi4kb2JqZXh0KTs7ICopIGxpc3Q9IiRsaXN0ICR6Ijs7ZXNhYzsgZG9uZTsgJEVDSE8gIlgkbGlzdCIgfCAkWHNlZCcKKwkgICAgOzsKKwkgICopCisJICAgIGlmIHRlc3QgIiRHWFgiID0geWVzICYmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgorCSAgICAgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR7d2x9LWV4cGVjdF91bnJlc29sdmVkICR7d2x9XConCisJICAgICAgY2FzZSAkaG9zdCBpbgorCSAgICAgICAgb3NmMyopCisJICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgJEVDSE8gIlgke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciIHwgJFhzZWRgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisJCSAgOzsKKwkgICAgICAgICopCisJICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tbXN5bSAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiAkRUNITyAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nIiB8ICRYc2VkYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworCQkgIDs7CisJICAgICAgZXNhYworCisJICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKwkgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CisKKwkgICAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCisJICAgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCisJICAgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCisJICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9JyRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgJEdSRVAgIlwtTCInCisKKwkgICAgZWxzZQorCSAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwkgICAgZmkKKwkgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgICA7OworCisgICAgICBwc29zKikKKyAgICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisgICAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICAgICAgOzsKKworICAgICAgc3Vub3M0KikKKyAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICBDQyopCisJICAgICMgU3VuIEMrKyA0LngKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwkgICAgOzsKKyAgICAgICAgICBsY2MqKQorCSAgICAjIEx1Y2lkCisJICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJICAgIDs7CisgICAgICAgICAgKikKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwkgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgICA7OworCisgICAgICBzb2xhcmlzKikKKyAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICBDQyopCisJICAgICMgU3VuIEMrKyA0LjIsIDUueCBhbmQgQ2VudGVybGluZSBDKysKKyAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsJDEpPXllcworCSAgICBfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAtemRlZnMnCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICAtaCRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+CisJICAgICAgJENDIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHt3bH0tTSAke3dsfSRsaWIuZXhwIC1oJHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCisKKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1SJGxpYmRpcicKKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKwkgICAgY2FzZSAkaG9zdF9vcyBpbgorCSAgICAgIHNvbGFyaXMyLltbMC01XV0gfCBzb2xhcmlzMi5bWzAtNV1dLiopIDs7CisJICAgICAgKikKKwkJIyBUaGUgY29tcGlsZXIgZHJpdmVyIHdpbGwgY29tYmluZSBhbmQgcmVvcmRlciBsaW5rZXIgb3B0aW9ucywKKwkJIyBidXQgdW5kZXJzdGFuZHMgYC16IGxpbmtlcl9mbGFnJy4KKwkgICAgICAgICMgU3VwcG9ydGVkIHNpbmNlIFNvbGFyaXMgMi42IChtYXliZSAyLjUuMT8pCisJCV9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nLXogYWxsZXh0cmFjdCRjb252ZW5pZW5jZSAteiBkZWZhdWx0ZXh0cmFjdCcKKwkgICAgICAgIDs7CisJICAgIGVzYWMKKwkgICAgX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCisKKwkgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J2VjaG8nCisKKwkgICAgIyBBcmNoaXZlcyBjb250YWluaW5nIEMrKyBvYmplY3QgZmlsZXMgbXVzdCBiZSBjcmVhdGVkIHVzaW5nCisJICAgICMgIkNDIC14YXIiLCB3aGVyZSAiQ0MiIGlzIHRoZSBTdW4gQysrIGNvbXBpbGVyLiAgVGhpcyBpcworCSAgICAjIG5lY2Vzc2FyeSB0byBtYWtlIHN1cmUgaW5zdGFudGlhdGVkIHRlbXBsYXRlcyBhcmUgaW5jbHVkZWQKKwkgICAgIyBpbiB0aGUgYXJjaGl2ZS4KKwkgICAgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAteGFyIC1vICRvbGRsaWIgJG9sZG9ianMnCisJICAgIDs7CisgICAgICAgICAgZ2N4KikKKwkgICAgIyBHcmVlbiBIaWxscyBDKysgQ29tcGlsZXIKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWggJHdsJHNvbmFtZSAtbyAkbGliJworCisJICAgICMgVGhlIEMrKyBjb21waWxlciBtdXN0IGJlIHVzZWQgdG8gY3JlYXRlIHRoZSBhcmNoaXZlLgorCSAgICBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0nJENDICRMREZMQUdTIC1hcmNoaXZlIC1vICRvbGRsaWIgJG9sZG9ianMnCisJICAgIDs7CisgICAgICAgICAgKikKKwkgICAgIyBHTlUgQysrIGNvbXBpbGVyIHdpdGggU29sYXJpcyBsaW5rZXIKKwkgICAgaWYgdGVzdCAiJEdYWCIgPSB5ZXMgJiYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCisJICAgICAgX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScgJHt3bH0teiAke3dsfWRlZnMnCisJICAgICAgaWYgJENDIC0tdmVyc2lvbiB8ICRHUkVQIC12ICdeMlwuNycgPiAvZGV2L251bGw7IHRoZW4KKwkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkTERGTEFHUyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCAkd2wkc29uYW1lIC1vICRsaWInCisJICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH5lY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgorCQkgICRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAke3dsfS1NICR3bCRsaWIuZXhwIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKworCSAgICAgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworCSAgICAgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCisJICAgICAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KKwkgICAgICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSckQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8ICRHUkVQICJcLUwiJworCSAgICAgIGVsc2UKKwkgICAgICAgICMgZysrIDIuNyBhcHBlYXJzIHRvIHJlcXVpcmUgYC1HJyBOT1QgYC1zaGFyZWQnIG9uIHRoaXMKKwkgICAgICAgICMgcGxhdGZvcm0uCisJICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLUcgLW5vc3RkbGliICRMREZMQUdTICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1oICR3bCRzb25hbWUgLW8gJGxpYicKKwkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+CisJCSAgJENDIC1HIC1ub3N0ZGxpYiAke3dsfS1NICR3bCRsaWIuZXhwIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKworCSAgICAgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworCSAgICAgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCisJICAgICAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KKwkgICAgICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSckQ0MgLUcgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCAkR1JFUCAiXC1MIicKKwkgICAgICBmaQorCisJICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LVIgJHdsJGxpYmRpcicKKwkgICAgICBjYXNlICRob3N0X29zIGluCisJCXNvbGFyaXMyLltbMC01XV0gfCBzb2xhcmlzMi5bWzAtNV1dLiopIDs7CisJCSopCisJCSAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScke3dsfS16ICR7d2x9YWxsZXh0cmFjdCRjb252ZW5pZW5jZSAke3dsfS16ICR7d2x9ZGVmYXVsdGV4dHJhY3QnCisJCSAgOzsKKwkgICAgICBlc2FjCisJICAgIGZpCisJICAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgOzsKKworICAgIHN5c3Y0KnV3MiogfCBzeXN2NU9wZW5VTklYKiB8IHN5c3Y1VW5peFdhcmU3LltbMDFdXS5bWzEwXV0qIHwgdW5peHdhcmU3KiB8IHNjbzMuMnY1LjAuW1swMjRdXSopCisgICAgICBfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyR7d2x9LXosdGV4dCcKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKyAgICAgIHJ1bnBhdGhfdmFyPSdMRF9SVU5fUEFUSCcKKworICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgQ0MqKQorCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1HICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLUcgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgOzsKKwkqKQorCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIDs7CisgICAgICBlc2FjCisgICAgICA7OworCisgICAgICBzeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqKQorCSMgTm90ZTogV2UgY2FuIE5PVCB1c2UgLXogZGVmcyBhcyB3ZSBtaWdodCBkZXNpcmUsIGJlY2F1c2Ugd2UgZG8gbm90CisJIyBsaW5rIHdpdGggLWxjLCBhbmQgdGhhdCB3b3VsZCBjYXVzZSBhbnkgc3ltYm9scyB1c2VkIGZyb20gbGliYyB0bworCSMgYWx3YXlzIGJlIHVucmVzb2x2ZWQsIHdoaWNoIG1lYW5zIGp1c3QgYWJvdXQgbm8gbGlicmFyeSB3b3VsZAorCSMgZXZlciBsaW5rIGNvcnJlY3RseS4gIElmIHdlJ3JlIG5vdCB1c2luZyBHTlUgbGQgd2UgdXNlIC16IHRleHQKKwkjIHRob3VnaCwgd2hpY2ggZG9lcyBjYXRjaCBzb21lIGJhZCBzeW1ib2xzIGJ1dCBpc24ndCBhcyBoZWF2eS1oYW5kZWQKKwkjIGFzIC16IGRlZnMuCisJX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScke3dsfS16LHRleHQnCisJX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScke3dsfS16LG5vZGVmcycKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KKwlfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworCV9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1SLCRsaWJkaXInCisJX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9JzonCisJX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCisJX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tQmV4cG9ydCcKKwlydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCisKKwljYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgIENDKikKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1HICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtRyAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICAgIDs7CisJICAqKQorCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICAgIDs7CisJZXNhYworICAgICAgOzsKKworICAgICAgdGFuZGVtKikKKyAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICBOQ0MqKQorCSAgICAjIE5vblN0b3AtVVggTkNDIDMuMjAKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwkgICAgOzsKKyAgICAgICAgICAqKQorCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCSAgICA7OworICAgICAgICBlc2FjCisgICAgICAgIDs7CisKKyAgICAgIHZ4d29ya3MqKQorICAgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKyAgICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICAgICAgICA7OworCisgICAgICAqKQorICAgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKyAgICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICAgICAgICA7OworICAgIGVzYWMKKworICAgIEFDX01TR19SRVNVTFQoWyRfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpXSkKKyAgICB0ZXN0ICIkX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKSIgPSBubyAmJiBjYW5fYnVpbGRfc2hhcmVkPW5vCisKKyAgICBfTFRfVEFHVkFSKEdDQywgJDEpPSIkR1hYIgorICAgIF9MVF9UQUdWQVIoTEQsICQxKT0iJExEIgorCisgICAgIyMgQ0FWRUFUIEVNUFRPUjoKKyAgICAjIyBUaGVyZSBpcyBubyBlbmNhcHN1bGF0aW9uIHdpdGhpbiB0aGUgZm9sbG93aW5nIG1hY3JvcywgZG8gbm90IGNoYW5nZQorICAgICMjIHRoZSBydW5uaW5nIG9yZGVyIG9yIG90aGVyd2lzZSBtb3ZlIHRoZW0gYXJvdW5kIHVubGVzcyB5b3Uga25vdyBleGFjdGx5CisgICAgIyMgd2hhdCB5b3UgYXJlIGRvaW5nLi4uCisgICAgX0xUX1NZU19ISURERU5fTElCREVQUygkMSkKKyAgICBfTFRfQ09NUElMRVJfUElDKCQxKQorICAgIF9MVF9DT01QSUxFUl9DX08oJDEpCisgICAgX0xUX0NPTVBJTEVSX0ZJTEVfTE9DS1MoJDEpCisgICAgX0xUX0xJTktFUl9TSExJQlMoJDEpCisgICAgX0xUX1NZU19EWU5BTUlDX0xJTktFUigkMSkKKyAgICBfTFRfTElOS0VSX0hBUkRDT0RFX0xJQlBBVEgoJDEpCisKKyAgICBfTFRfQ09ORklHKCQxKQorICBmaSAjIHRlc3QgLW4gIiRjb21waWxlciIKKworICBDQz0kbHRfc2F2ZV9DQworICBMRENYWD0kTEQKKyAgTEQ9JGx0X3NhdmVfTEQKKyAgR0NDPSRsdF9zYXZlX0dDQworICB3aXRoX2dudV9sZD0kbHRfc2F2ZV93aXRoX2dudV9sZAorICBsdF9jdl9wYXRoX0xEQ1hYPSRsdF9jdl9wYXRoX0xECisgIGx0X2N2X3BhdGhfTEQ9JGx0X3NhdmVfcGF0aF9MRAorICBsdF9jdl9wcm9nX2dudV9sZGN4eD0kbHRfY3ZfcHJvZ19nbnVfbGQKKyAgbHRfY3ZfcHJvZ19nbnVfbGQ9JGx0X3NhdmVfd2l0aF9nbnVfbGQKK2ZpICMgdGVzdCAiJF9sdF9jYXVnaHRfQ1hYX2Vycm9yIiAhPSB5ZXMKKworQUNfTEFOR19QT1AKK10pIyBfTFRfTEFOR19DWFhfQ09ORklHCisKKworIyBfTFRfU1lTX0hJRERFTl9MSUJERVBTKFtUQUdOQU1FXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEZpZ3VyZSBvdXQgImhpZGRlbiIgbGlicmFyeSBkZXBlbmRlbmNpZXMgZnJvbSB2ZXJib3NlCisjIGNvbXBpbGVyIG91dHB1dCB3aGVuIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KKyMgUGFyc2UgdGhlIGNvbXBpbGVyIG91dHB1dCBhbmQgZXh0cmFjdCB0aGUgbmVjZXNzYXJ5CisjIG9iamVjdHMsIGxpYnJhcmllcyBhbmQgbGlicmFyeSBmbGFncy4KK200X2RlZnVuKFtfTFRfU1lTX0hJRERFTl9MSUJERVBTXSwKK1ttNF9yZXF1aXJlKFtfTFRfRklMRVVUSUxTX0RFRkFVTFRTXSlkbmwKKyMgRGVwZW5kZW5jaWVzIHRvIHBsYWNlIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIG9iamVjdCBiZWluZyBsaW5rZWQ6CitfTFRfVEFHVkFSKHByZWRlcF9vYmplY3RzLCAkMSk9CitfTFRfVEFHVkFSKHBvc3RkZXBfb2JqZWN0cywgJDEpPQorX0xUX1RBR1ZBUihwcmVkZXBzLCAkMSk9CitfTFRfVEFHVkFSKHBvc3RkZXBzLCAkMSk9CitfTFRfVEFHVkFSKGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCwgJDEpPQorCitkbmwgd2UgY2FuJ3QgdXNlIHRoZSBsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUgaGVyZSwKK2RubCBiZWNhdXNlIGl0IGNvbnRhaW5zIGNvZGUgaW50ZW5kZWQgZm9yIGFuIGV4ZWN1dGFibGUsCitkbmwgbm90IGEgbGlicmFyeS4gIEl0J3MgcG9zc2libGUgd2Ugc2hvdWxkIGxldCBlYWNoCitkbmwgdGFnIGRlZmluZSBhIG5ldyBsdF8/Pz8/X2xpbmtfdGVzdF9jb2RlIHZhcmlhYmxlLAorZG5sIGJ1dCBpdCdzIG9ubHkgdXNlZCBoZXJlLi4uCittNF9pZihbJDFdLCBbXSwgW2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxfTFRfRU9GCitpbnQgYTsKK3ZvaWQgZm9vICh2b2lkKSB7IGEgPSAwOyB9CitfTFRfRU9GCitdLCBbJDFdLCBbQ1hYXSwgW2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxfTFRfRU9GCitjbGFzcyBGb28KK3sKK3B1YmxpYzoKKyAgRm9vICh2b2lkKSB7IGEgPSAwOyB9Citwcml2YXRlOgorICBpbnQgYTsKK307CitfTFRfRU9GCitdLCBbJDFdLCBbRjc3XSwgW2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxfTFRfRU9GCisgICAgICBzdWJyb3V0aW5lIGZvbworICAgICAgaW1wbGljaXQgbm9uZQorICAgICAgaW50ZWdlcio0IGEKKyAgICAgIGE9MAorICAgICAgcmV0dXJuCisgICAgICBlbmQKK19MVF9FT0YKK10sIFskMV0sIFtGQ10sIFtjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgorICAgICAgc3Vicm91dGluZSBmb28KKyAgICAgIGltcGxpY2l0IG5vbmUKKyAgICAgIGludGVnZXIgYQorICAgICAgYT0wCisgICAgICByZXR1cm4KKyAgICAgIGVuZAorX0xUX0VPRgorXSwgWyQxXSwgW0dDSl0sIFtjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgorcHVibGljIGNsYXNzIGZvbyB7CisgIHByaXZhdGUgaW50IGE7CisgIHB1YmxpYyB2b2lkIGJhciAodm9pZCkgeworICAgIGEgPSAwOworICB9Cit9OworX0xUX0VPRgorXSkKK2RubCBQYXJzZSB0aGUgY29tcGlsZXIgb3V0cHV0IGFuZCBleHRyYWN0IHRoZSBuZWNlc3NhcnkKK2RubCBvYmplY3RzLCBsaWJyYXJpZXMgYW5kIGxpYnJhcnkgZmxhZ3MuCitpZiBBQ19UUllfRVZBTChhY19jb21waWxlKTsgdGhlbgorICAjIFBhcnNlIHRoZSBjb21waWxlciBvdXRwdXQgYW5kIGV4dHJhY3QgdGhlIG5lY2Vzc2FyeQorICAjIG9iamVjdHMsIGxpYnJhcmllcyBhbmQgbGlicmFyeSBmbGFncy4KKworICAjIFNlbnRpbmVsIHVzZWQgdG8ga2VlcCB0cmFjayBvZiB3aGV0aGVyIG9yIG5vdCB3ZSBhcmUgYmVmb3JlCisgICMgdGhlIGNvbmZ0ZXN0IG9iamVjdCBmaWxlLgorICBwcmVfdGVzdF9vYmplY3RfZGVwc19kb25lPW5vCisKKyAgZm9yIHAgaW4gYGV2YWwgIiRvdXRwdXRfdmVyYm9zZV9saW5rX2NtZCJgOyBkbworICAgIGNhc2UgJHAgaW4KKworICAgIC1MKiB8IC1SKiB8IC1sKikKKyAgICAgICAjIFNvbWUgY29tcGlsZXJzIHBsYWNlIHNwYWNlIGJldHdlZW4gIi17TCxSfSIgYW5kIHRoZSBwYXRoLgorICAgICAgICMgUmVtb3ZlIHRoZSBzcGFjZS4KKyAgICAgICBpZiB0ZXN0ICRwID0gIi1MIiB8fAorICAgICAgICAgIHRlc3QgJHAgPSAiLVIiOyB0aGVuCisJIHByZXY9JHAKKwkgY29udGludWUKKyAgICAgICBlbHNlCisJIHByZXY9CisgICAgICAgZmkKKworICAgICAgIGlmIHRlc3QgIiRwcmVfdGVzdF9vYmplY3RfZGVwc19kb25lIiA9IG5vOyB0aGVuCisJIGNhc2UgJHAgaW4KKwkgLUwqIHwgLVIqKQorCSAgICMgSW50ZXJuYWwgY29tcGlsZXIgbGlicmFyeSBwYXRocyBzaG91bGQgY29tZSBhZnRlciB0aG9zZQorCSAgICMgcHJvdmlkZWQgdGhlIHVzZXIuICBUaGUgcG9zdGRlcHMgYWxyZWFkeSBjb21lIGFmdGVyIHRoZQorCSAgICMgdXNlciBzdXBwbGllZCBsaWJzIHNvIHRoZXJlIGlzIG5vIG5lZWQgdG8gcHJvY2VzcyB0aGVtLgorCSAgIGlmIHRlc3QgLXogIiRfTFRfVEFHVkFSKGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCwgJDEpIjsgdGhlbgorCSAgICAgX0xUX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX3BhdGgsICQxKT0iJHtwcmV2fSR7cH0iCisJICAgZWxzZQorCSAgICAgX0xUX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX3BhdGgsICQxKT0iJHtfTFRfVEFHVkFSKGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCwgJDEpfSAke3ByZXZ9JHtwfSIKKwkgICBmaQorCSAgIDs7CisJICMgVGhlICItbCIgY2FzZSB3b3VsZCBuZXZlciBjb21lIGJlZm9yZSB0aGUgb2JqZWN0IGJlaW5nCisJICMgbGlua2VkLCBzbyBkb24ndCBib3RoZXIgaGFuZGxpbmcgdGhpcyBjYXNlLgorCSBlc2FjCisgICAgICAgZWxzZQorCSBpZiB0ZXN0IC16ICIkX0xUX1RBR1ZBUihwb3N0ZGVwcywgJDEpIjsgdGhlbgorCSAgIF9MVF9UQUdWQVIocG9zdGRlcHMsICQxKT0iJHtwcmV2fSR7cH0iCisJIGVsc2UKKwkgICBfTFRfVEFHVkFSKHBvc3RkZXBzLCAkMSk9IiR7X0xUX1RBR1ZBUihwb3N0ZGVwcywgJDEpfSAke3ByZXZ9JHtwfSIKKwkgZmkKKyAgICAgICBmaQorICAgICAgIDs7CisKKyAgICAqLiRvYmpleHQpCisgICAgICAgIyBUaGlzIGFzc3VtZXMgdGhhdCB0aGUgdGVzdCBvYmplY3QgZmlsZSBvbmx5IHNob3dzIHVwCisgICAgICAgIyBvbmNlIGluIHRoZSBjb21waWxlciBvdXRwdXQuCisgICAgICAgaWYgdGVzdCAiJHAiID0gImNvbmZ0ZXN0LiRvYmpleHQiOyB0aGVuCisJIHByZV90ZXN0X29iamVjdF9kZXBzX2RvbmU9eWVzCisJIGNvbnRpbnVlCisgICAgICAgZmkKKworICAgICAgIGlmIHRlc3QgIiRwcmVfdGVzdF9vYmplY3RfZGVwc19kb25lIiA9IG5vOyB0aGVuCisJIGlmIHRlc3QgLXogIiRfTFRfVEFHVkFSKHByZWRlcF9vYmplY3RzLCAkMSkiOyB0aGVuCisJICAgX0xUX1RBR1ZBUihwcmVkZXBfb2JqZWN0cywgJDEpPSIkcCIKKwkgZWxzZQorCSAgIF9MVF9UQUdWQVIocHJlZGVwX29iamVjdHMsICQxKT0iJF9MVF9UQUdWQVIocHJlZGVwX29iamVjdHMsICQxKSAkcCIKKwkgZmkKKyAgICAgICBlbHNlCisJIGlmIHRlc3QgLXogIiRfTFRfVEFHVkFSKHBvc3RkZXBfb2JqZWN0cywgJDEpIjsgdGhlbgorCSAgIF9MVF9UQUdWQVIocG9zdGRlcF9vYmplY3RzLCAkMSk9IiRwIgorCSBlbHNlCisJICAgX0xUX1RBR1ZBUihwb3N0ZGVwX29iamVjdHMsICQxKT0iJF9MVF9UQUdWQVIocG9zdGRlcF9vYmplY3RzLCAkMSkgJHAiCisJIGZpCisgICAgICAgZmkKKyAgICAgICA7OworCisgICAgKikgOzsgIyBJZ25vcmUgdGhlIHJlc3QuCisKKyAgICBlc2FjCisgIGRvbmUKKworICAjIENsZWFuIHVwLgorICBybSAtZiBhLm91dCBhLmV4ZQorZWxzZQorICBlY2hvICJsaWJ0b29sLm00OiBlcnJvcjogcHJvYmxlbSBjb21waWxpbmcgJDEgdGVzdCBwcm9ncmFtIgorZmkKKworJFJNIC1mIGNvbmZlc3QuJG9iamV4dAorCisjIFBPUlRNRTogb3ZlcnJpZGUgYWJvdmUgdGVzdCBvbiBzeXN0ZW1zIHdoZXJlIGl0IGlzIGJyb2tlbgorbTRfaWYoWyQxXSwgW0NYWF0sCitbY2FzZSAkaG9zdF9vcyBpbgoraW50ZXJpeFtbMy05XV0qKQorICAjIEludGVyaXggMy41IGluc3RhbGxzIGNvbXBsZXRlbHkgaG9zZWQgLmxhIGZpbGVzIGZvciBDKyssIHNvIHJhdGhlciB0aGFuCisgICMgaGFjayBhbGwgYXJvdW5kIGl0LCBsZXQncyBqdXN0IHRydXN0ICJnKysiIHRvIERUUlQuCisgIF9MVF9UQUdWQVIocHJlZGVwX29iamVjdHMsJDEpPQorICBfTFRfVEFHVkFSKHBvc3RkZXBfb2JqZWN0cywkMSk9CisgIF9MVF9UQUdWQVIocG9zdGRlcHMsJDEpPQorICA7OworCitsaW51eCopCisgIGNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgorICAqU3VuXCBDKikKKyAgICAjIFN1biBDKysgNS45CisKKyAgICAjIFRoZSBtb3JlIHN0YW5kYXJkcy1jb25mb3JtaW5nIHN0bHBvcnQ0IGxpYnJhcnkgaXMKKyAgICAjIGluY29tcGF0aWJsZSB3aXRoIHRoZSBDc3RkIGxpYnJhcnkuIEF2b2lkIHNwZWNpZnlpbmcKKyAgICAjIGl0IGlmIGl0J3MgaW4gQ1hYRkxBR1MuIElnbm9yZSBsaWJDcnVuIGFzCisgICAgIyAtbGlicmFyeT1zdGxwb3J0NCBkZXBlbmRzIG9uIGl0LgorICAgIGNhc2UgIiAkQ1hYICRDWFhGTEFHUyAiIGluCisgICAgKiIgLWxpYnJhcnk9c3RscG9ydDQgIiopCisgICAgICBzb2xhcmlzX3VzZV9zdGxwb3J0ND15ZXMKKyAgICAgIDs7CisgICAgZXNhYworCisgICAgaWYgdGVzdCAiJHNvbGFyaXNfdXNlX3N0bHBvcnQ0IiAhPSB5ZXM7IHRoZW4KKyAgICAgIF9MVF9UQUdWQVIocG9zdGRlcHMsJDEpPSctbGlicmFyeT1Dc3RkIC1saWJyYXJ5PUNydW4nCisgICAgZmkKKyAgICA7OworICBlc2FjCisgIDs7CisKK3NvbGFyaXMqKQorICBjYXNlICRjY19iYXNlbmFtZSBpbgorICBDQyopCisgICAgIyBUaGUgbW9yZSBzdGFuZGFyZHMtY29uZm9ybWluZyBzdGxwb3J0NCBsaWJyYXJ5IGlzCisgICAgIyBpbmNvbXBhdGlibGUgd2l0aCB0aGUgQ3N0ZCBsaWJyYXJ5LiBBdm9pZCBzcGVjaWZ5aW5nCisgICAgIyBpdCBpZiBpdCdzIGluIENYWEZMQUdTLiBJZ25vcmUgbGliQ3J1biBhcworICAgICMgLWxpYnJhcnk9c3RscG9ydDQgZGVwZW5kcyBvbiBpdC4KKyAgICBjYXNlICIgJENYWCAkQ1hYRkxBR1MgIiBpbgorICAgICoiIC1saWJyYXJ5PXN0bHBvcnQ0ICIqKQorICAgICAgc29sYXJpc191c2Vfc3RscG9ydDQ9eWVzCisgICAgICA7OworICAgIGVzYWMKKworICAgICMgQWRkaW5nIHRoaXMgcmVxdWlyZXMgYSBrbm93bi1nb29kIHNldHVwIG9mIHNoYXJlZCBsaWJyYXJpZXMgZm9yCisgICAgIyBTdW4gY29tcGlsZXIgdmVyc2lvbnMgYmVmb3JlIDUuNiwgZWxzZSBQSUMgb2JqZWN0cyBmcm9tIGFuIG9sZAorICAgICMgYXJjaGl2ZSB3aWxsIGJlIGxpbmtlZCBpbnRvIHRoZSBvdXRwdXQsIGxlYWRpbmcgdG8gc3VidGxlIGJ1Z3MuCisgICAgaWYgdGVzdCAiJHNvbGFyaXNfdXNlX3N0bHBvcnQ0IiAhPSB5ZXM7IHRoZW4KKyAgICAgIF9MVF9UQUdWQVIocG9zdGRlcHMsJDEpPSctbGlicmFyeT1Dc3RkIC1saWJyYXJ5PUNydW4nCisgICAgZmkKKyAgICA7OworICBlc2FjCisgIDs7Citlc2FjCitdKQorCitjYXNlICIgJF9MVF9UQUdWQVIocG9zdGRlcHMsICQxKSAiIGluCisqIiAtbGMgIiopIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubyA7OworZXNhYworIF9MVF9UQUdWQVIoY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzLCAkMSk9CitpZiB0ZXN0IC1uICIke19MVF9UQUdWQVIoY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoLCAkMSl9IjsgdGhlbgorIF9MVF9UQUdWQVIoY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzLCAkMSk9YGVjaG8gIiAke19MVF9UQUdWQVIoY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoLCAkMSl9IiB8ICR7U0VEfSAtZSAncyEgLUwhICFnJyAtZSAncyFeICEhJ2AKK2ZpCitfTFRfVEFHREVDTChbXSwgW2NvbXBpbGVyX2xpYl9zZWFyY2hfZGlyc10sIFsxXSwKKyAgICBbVGhlIGRpcmVjdG9yaWVzIHNlYXJjaGVkIGJ5IHRoaXMgY29tcGlsZXIgd2hlbiBjcmVhdGluZyBhIHNoYXJlZCBsaWJyYXJ5XSkKK19MVF9UQUdERUNMKFtdLCBbcHJlZGVwX29iamVjdHNdLCBbMV0sCisgICAgW0RlcGVuZGVuY2llcyB0byBwbGFjZSBiZWZvcmUgYW5kIGFmdGVyIHRoZSBvYmplY3RzIGJlaW5nIGxpbmtlZCB0bworICAgIGNyZWF0ZSBhIHNoYXJlZCBsaWJyYXJ5XSkKK19MVF9UQUdERUNMKFtdLCBbcG9zdGRlcF9vYmplY3RzXSwgWzFdKQorX0xUX1RBR0RFQ0woW10sIFtwcmVkZXBzXSwgWzFdKQorX0xUX1RBR0RFQ0woW10sIFtwb3N0ZGVwc10sIFsxXSkKK19MVF9UQUdERUNMKFtdLCBbY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoXSwgWzFdLAorICAgIFtUaGUgbGlicmFyeSBzZWFyY2ggcGF0aCB1c2VkIGludGVybmFsbHkgYnkgdGhlIGNvbXBpbGVyIHdoZW4gbGlua2luZworICAgIGEgc2hhcmVkIGxpYnJhcnldKQorXSkjIF9MVF9TWVNfSElEREVOX0xJQkRFUFMKKworCisjIF9MVF9QUk9HX0Y3NworIyAtLS0tLS0tLS0tLS0KKyMgU2luY2UgQUNfUFJPR19GNzcgaXMgYnJva2VuLCBpbiB0aGF0IGl0IHJldHVybnMgdGhlIGVtcHR5IHN0cmluZworIyBpZiB0aGVyZSBpcyBubyBmb3J0cmFuIGNvbXBpbGVyLCB3ZSBoYXZlIG91ciBvd24gdmVyc2lvbiBoZXJlLgorbTRfZGVmdW4oW19MVF9QUk9HX0Y3N10sCitbCitwdXNoZGVmKFtBQ19NU0dfRVJST1JdLCBbX2x0X2Rpc2FibGVfRjc3PXllc10pCitBQ19QUk9HX0Y3NworaWYgdGVzdCAteiAiJEY3NyIgfHwgdGVzdCAiWCRGNzciID0gIlhubyI7IHRoZW4KKyAgX2x0X2Rpc2FibGVfRjc3PXllcworZmkKK3BvcGRlZihbQUNfTVNHX0VSUk9SXSkKK10pIyBfTFRfUFJPR19GNzcKKworZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtfTFRfUFJPR19GNzddLCBbXSkKKworCisjIF9MVF9MQU5HX0Y3N19DT05GSUcoW1RBR10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEVuc3VyZSB0aGF0IHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBmb3IgYSBGb3J0cmFuIDc3IGNvbXBpbGVyIGFyZQorIyBzdWl0YWJseSBkZWZpbmVkLiAgVGhlc2UgdmFyaWFibGVzIGFyZSBzdWJzZXF1ZW50bHkgdXNlZCBieSBfTFRfQ09ORklHCisjIHRvIHdyaXRlIHRoZSBjb21waWxlciBjb25maWd1cmF0aW9uIHRvIGBsaWJ0b29sJy4KK200X2RlZnVuKFtfTFRfTEFOR19GNzdfQ09ORklHXSwKK1tBQ19SRVFVSVJFKFtfTFRfUFJPR19GNzddKWRubAorQUNfTEFOR19QVVNIKEZvcnRyYW4gNzcpCisKK19MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubworX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPQorX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT1ubworX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9CitfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPQorX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubworX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUsICQxKT1ubworX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9CitfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQsICQxKT0KK19MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPQorX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9bm8KK19MVF9UQUdWQVIoaGFyZGNvZGVfYXV0b21hdGljLCAkMSk9bm8KK19MVF9UQUdWQVIoaW5oZXJpdF9ycGF0aCwgJDEpPW5vCitfTFRfVEFHVkFSKG1vZHVsZV9jbWRzLCAkMSk9CitfTFRfVEFHVkFSKG1vZHVsZV9leHBzeW1fY21kcywgJDEpPQorX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9dW5rbm93bgorX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JG9sZF9hcmNoaXZlX2NtZHMKK19MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0KK19MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0KK19MVF9UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpPW5vCisKKyMgU291cmNlIGZpbGUgZXh0ZW5zaW9uIGZvciBmNzcgdGVzdCBzb3VyY2VzLgorYWNfZXh0PWYKKworIyBPYmplY3QgZmlsZSBleHRlbnNpb24gZm9yIGNvbXBpbGVkIGY3NyB0ZXN0IHNvdXJjZXMuCitvYmpleHQ9bworX0xUX1RBR1ZBUihvYmpleHQsICQxKT0kb2JqZXh0CisKKyMgTm8gc2Vuc2UgaW4gcnVubmluZyBhbGwgdGhlc2UgdGVzdHMgaWYgd2UgYWxyZWFkeSBkZXRlcm1pbmVkIHRoYXQKKyMgdGhlIEY3NyBjb21waWxlciBpc24ndCB3b3JraW5nLiAgU29tZSB2YXJpYWJsZXMgKGxpa2UgZW5hYmxlX3NoYXJlZCkKKyMgYXJlIGN1cnJlbnRseSBhc3N1bWVkIHRvIGFwcGx5IHRvIGFsbCBjb21waWxlcnMgb24gdGhpcyBwbGF0Zm9ybSwKKyMgYW5kIHdpbGwgYmUgY29ycnVwdGVkIGJ5IHNldHRpbmcgdGhlbSBiYXNlZCBvbiBhIG5vbi13b3JraW5nIGNvbXBpbGVyLgoraWYgdGVzdCAiJF9sdF9kaXNhYmxlX0Y3NyIgIT0geWVzOyB0aGVuCisgICMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBjb21waWxlIHRlc3RzCisgIGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZT0iXAorICAgICAgc3Vicm91dGluZSB0CisgICAgICByZXR1cm4KKyAgICAgIGVuZAorIgorCisgICMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBsaW5rIHRlc3RzCisgIGx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZT0iXAorICAgICAgcHJvZ3JhbSB0CisgICAgICBlbmQKKyIKKworICAjIGx0bWFpbiBvbmx5IHVzZXMgJENDIGZvciB0YWdnZWQgY29uZmlndXJhdGlvbnMgc28gbWFrZSBzdXJlICRDQyBpcyBzZXQuCisgIF9MVF9UQUdfQ09NUElMRVIKKworICAjIHNhdmUgd2FybmluZ3MvYm9pbGVycGxhdGUgb2Ygc2ltcGxlIHRlc3QgY29kZQorICBfTFRfQ09NUElMRVJfQk9JTEVSUExBVEUKKyAgX0xUX0xJTktFUl9CT0lMRVJQTEFURQorCisgICMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCisgIGx0X3NhdmVfQ0M9IiRDQyIKKyAgbHRfc2F2ZV9HQ0M9JEdDQworICBDQz0ke0Y3Ny0iZjc3In0KKyAgY29tcGlsZXI9JENDCisgIF9MVF9UQUdWQVIoY29tcGlsZXIsICQxKT0kQ0MKKyAgX0xUX0NDX0JBU0VOQU1FKFskY29tcGlsZXJdKQorICBHQ0M9JEc3NworICBpZiB0ZXN0IC1uICIkY29tcGlsZXIiOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBsaWJ0b29sIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXNdKQorICAgIEFDX01TR19SRVNVTFQoWyRjYW5fYnVpbGRfc2hhcmVkXSkKKworICAgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzXSkKKyAgICB0ZXN0ICIkY2FuX2J1aWxkX3NoYXJlZCIgPSAibm8iICYmIGVuYWJsZV9zaGFyZWQ9bm8KKworICAgICMgT24gQUlYLCBzaGFyZWQgbGlicmFyaWVzIGFuZCBzdGF0aWMgbGlicmFyaWVzIHVzZSB0aGUgc2FtZSBuYW1lc3BhY2UsIGFuZAorICAgICMgYXJlIGFsbCBidWlsdCBmcm9tIFBJQy4KKyAgICBjYXNlICRob3N0X29zIGluCisgICAgICBhaXgzKikKKyAgICAgICAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzICYmIGVuYWJsZV9zdGF0aWM9bm8KKyAgICAgICAgaWYgdGVzdCAtbiAiJFJBTkxJQiI7IHRoZW4KKyAgICAgICAgICBhcmNoaXZlX2NtZHM9IiRhcmNoaXZlX2NtZHN+XCRSQU5MSUIgXCRsaWIiCisgICAgICAgICAgcG9zdGluc3RhbGxfY21kcz0nJFJBTkxJQiAkbGliJworICAgICAgICBmaQorICAgICAgICA7OworICAgICAgYWl4W1s0LTldXSopCisJaWYgdGVzdCAiJGhvc3RfY3B1IiAhPSBpYTY0ICYmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IG5vIDsgdGhlbgorCSAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzICYmIGVuYWJsZV9zdGF0aWM9bm8KKwlmaQorICAgICAgICA7OworICAgIGVzYWMKKyAgICBBQ19NU0dfUkVTVUxUKFskZW5hYmxlX3NoYXJlZF0pCisKKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gYnVpbGQgc3RhdGljIGxpYnJhcmllc10pCisgICAgIyBNYWtlIHN1cmUgZWl0aGVyIGVuYWJsZV9zaGFyZWQgb3IgZW5hYmxlX3N0YXRpYyBpcyB5ZXMuCisgICAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzIHx8IGVuYWJsZV9zdGF0aWM9eWVzCisgICAgQUNfTVNHX1JFU1VMVChbJGVuYWJsZV9zdGF0aWNdKQorCisgICAgX0xUX1RBR1ZBUihHQ0MsICQxKT0iJEc3NyIKKyAgICBfTFRfVEFHVkFSKExELCAkMSk9IiRMRCIKKworICAgICMjIENBVkVBVCBFTVBUT1I6CisgICAgIyMgVGhlcmUgaXMgbm8gZW5jYXBzdWxhdGlvbiB3aXRoaW4gdGhlIGZvbGxvd2luZyBtYWNyb3MsIGRvIG5vdCBjaGFuZ2UKKyAgICAjIyB0aGUgcnVubmluZyBvcmRlciBvciBvdGhlcndpc2UgbW92ZSB0aGVtIGFyb3VuZCB1bmxlc3MgeW91IGtub3cgZXhhY3RseQorICAgICMjIHdoYXQgeW91IGFyZSBkb2luZy4uLgorICAgIF9MVF9DT01QSUxFUl9QSUMoJDEpCisgICAgX0xUX0NPTVBJTEVSX0NfTygkMSkKKyAgICBfTFRfQ09NUElMRVJfRklMRV9MT0NLUygkMSkKKyAgICBfTFRfTElOS0VSX1NITElCUygkMSkKKyAgICBfTFRfU1lTX0RZTkFNSUNfTElOS0VSKCQxKQorICAgIF9MVF9MSU5LRVJfSEFSRENPREVfTElCUEFUSCgkMSkKKworICAgIF9MVF9DT05GSUcoJDEpCisgIGZpICMgdGVzdCAtbiAiJGNvbXBpbGVyIgorCisgIEdDQz0kbHRfc2F2ZV9HQ0MKKyAgQ0M9IiRsdF9zYXZlX0NDIgorZmkgIyB0ZXN0ICIkX2x0X2Rpc2FibGVfRjc3IiAhPSB5ZXMKKworQUNfTEFOR19QT1AKK10pIyBfTFRfTEFOR19GNzdfQ09ORklHCisKKworIyBfTFRfUFJPR19GQworIyAtLS0tLS0tLS0tLQorIyBTaW5jZSBBQ19QUk9HX0ZDIGlzIGJyb2tlbiwgaW4gdGhhdCBpdCByZXR1cm5zIHRoZSBlbXB0eSBzdHJpbmcKKyMgaWYgdGhlcmUgaXMgbm8gZm9ydHJhbiBjb21waWxlciwgd2UgaGF2ZSBvdXIgb3duIHZlcnNpb24gaGVyZS4KK200X2RlZnVuKFtfTFRfUFJPR19GQ10sCitbCitwdXNoZGVmKFtBQ19NU0dfRVJST1JdLCBbX2x0X2Rpc2FibGVfRkM9eWVzXSkKK0FDX1BST0dfRkMKK2lmIHRlc3QgLXogIiRGQyIgfHwgdGVzdCAiWCRGQyIgPSAiWG5vIjsgdGhlbgorICBfbHRfZGlzYWJsZV9GQz15ZXMKK2ZpCitwb3BkZWYoW0FDX01TR19FUlJPUl0pCitdKSMgX0xUX1BST0dfRkMKKworZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtfTFRfUFJPR19GQ10sIFtdKQorCisKKyMgX0xUX0xBTkdfRkNfQ09ORklHKFtUQUddKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEVuc3VyZSB0aGF0IHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBmb3IgYSBGb3J0cmFuIGNvbXBpbGVyIGFyZQorIyBzdWl0YWJseSBkZWZpbmVkLiAgVGhlc2UgdmFyaWFibGVzIGFyZSBzdWJzZXF1ZW50bHkgdXNlZCBieSBfTFRfQ09ORklHCisjIHRvIHdyaXRlIHRoZSBjb21waWxlciBjb25maWd1cmF0aW9uIHRvIGBsaWJ0b29sJy4KK200X2RlZnVuKFtfTFRfTEFOR19GQ19DT05GSUddLAorW0FDX1JFUVVJUkUoW19MVF9QUk9HX0ZDXSlkbmwKK0FDX0xBTkdfUFVTSChGb3J0cmFuKQorCitfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KK19MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0KK19MVF9UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9bm8KK19MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPQorX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0KK19MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9bm8KK19MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlLCAkMSk9bm8KK19MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPQorX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkLCAkMSk9CitfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT0KK19MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPW5vCitfTFRfVEFHVkFSKGhhcmRjb2RlX2F1dG9tYXRpYywgJDEpPW5vCitfTFRfVEFHVkFSKGluaGVyaXRfcnBhdGgsICQxKT1ubworX0xUX1RBR1ZBUihtb2R1bGVfY21kcywgJDEpPQorX0xUX1RBR1ZBUihtb2R1bGVfZXhwc3ltX2NtZHMsICQxKT0KK19MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXVua25vd24KK19MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSRvbGRfYXJjaGl2ZV9jbWRzCitfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9CitfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9CitfTFRfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKT1ubworCisjIFNvdXJjZSBmaWxlIGV4dGVuc2lvbiBmb3IgZmMgdGVzdCBzb3VyY2VzLgorYWNfZXh0PSR7YWNfZmNfc3JjZXh0LWZ9CisKKyMgT2JqZWN0IGZpbGUgZXh0ZW5zaW9uIGZvciBjb21waWxlZCBmYyB0ZXN0IHNvdXJjZXMuCitvYmpleHQ9bworX0xUX1RBR1ZBUihvYmpleHQsICQxKT0kb2JqZXh0CisKKyMgTm8gc2Vuc2UgaW4gcnVubmluZyBhbGwgdGhlc2UgdGVzdHMgaWYgd2UgYWxyZWFkeSBkZXRlcm1pbmVkIHRoYXQKKyMgdGhlIEZDIGNvbXBpbGVyIGlzbid0IHdvcmtpbmcuICBTb21lIHZhcmlhYmxlcyAobGlrZSBlbmFibGVfc2hhcmVkKQorIyBhcmUgY3VycmVudGx5IGFzc3VtZWQgdG8gYXBwbHkgdG8gYWxsIGNvbXBpbGVycyBvbiB0aGlzIHBsYXRmb3JtLAorIyBhbmQgd2lsbCBiZSBjb3JydXB0ZWQgYnkgc2V0dGluZyB0aGVtIGJhc2VkIG9uIGEgbm9uLXdvcmtpbmcgY29tcGlsZXIuCitpZiB0ZXN0ICIkX2x0X2Rpc2FibGVfRkMiICE9IHllczsgdGhlbgorICAjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgY29tcGlsZSB0ZXN0cworICBsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGU9IlwKKyAgICAgIHN1YnJvdXRpbmUgdAorICAgICAgcmV0dXJuCisgICAgICBlbmQKKyIKKworICAjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgbGluayB0ZXN0cworICBsdF9zaW1wbGVfbGlua190ZXN0X2NvZGU9IlwKKyAgICAgIHByb2dyYW0gdAorICAgICAgZW5kCisiCisKKyAgIyBsdG1haW4gb25seSB1c2VzICRDQyBmb3IgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIHNvIG1ha2Ugc3VyZSAkQ0MgaXMgc2V0LgorICBfTFRfVEFHX0NPTVBJTEVSCisKKyAgIyBzYXZlIHdhcm5pbmdzL2JvaWxlcnBsYXRlIG9mIHNpbXBsZSB0ZXN0IGNvZGUKKyAgX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFCisgIF9MVF9MSU5LRVJfQk9JTEVSUExBVEUKKworICAjIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgorICBsdF9zYXZlX0NDPSIkQ0MiCisgIGx0X3NhdmVfR0NDPSRHQ0MKKyAgQ0M9JHtGQy0iZjk1In0KKyAgY29tcGlsZXI9JENDCisgIEdDQz0kYWNfY3ZfZmNfY29tcGlsZXJfZ251CisKKyAgX0xUX1RBR1ZBUihjb21waWxlciwgJDEpPSRDQworICBfTFRfQ0NfQkFTRU5BTUUoWyRjb21waWxlcl0pCisKKyAgaWYgdGVzdCAtbiAiJGNvbXBpbGVyIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgbGlidG9vbCBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzXSkKKyAgICBBQ19NU0dfUkVTVUxUKFskY2FuX2J1aWxkX3NoYXJlZF0pCisKKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllc10pCisgICAgdGVzdCAiJGNhbl9idWlsZF9zaGFyZWQiID0gIm5vIiAmJiBlbmFibGVfc2hhcmVkPW5vCisKKyAgICAjIE9uIEFJWCwgc2hhcmVkIGxpYnJhcmllcyBhbmQgc3RhdGljIGxpYnJhcmllcyB1c2UgdGhlIHNhbWUgbmFtZXNwYWNlLCBhbmQKKyAgICAjIGFyZSBhbGwgYnVpbHQgZnJvbSBQSUMuCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgYWl4MyopCisgICAgICAgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyAmJiBlbmFibGVfc3RhdGljPW5vCisgICAgICAgIGlmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCisgICAgICAgICAgYXJjaGl2ZV9jbWRzPSIkYXJjaGl2ZV9jbWRzflwkUkFOTElCIFwkbGliIgorICAgICAgICAgIHBvc3RpbnN0YWxsX2NtZHM9JyRSQU5MSUIgJGxpYicKKyAgICAgICAgZmkKKyAgICAgICAgOzsKKyAgICAgIGFpeFtbNC05XV0qKQorCWlmIHRlc3QgIiRob3N0X2NwdSIgIT0gaWE2NCAmJiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSBubyA7IHRoZW4KKwkgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyAmJiBlbmFibGVfc3RhdGljPW5vCisJZmkKKyAgICAgICAgOzsKKyAgICBlc2FjCisgICAgQUNfTVNHX1JFU1VMVChbJGVuYWJsZV9zaGFyZWRdKQorCisgICAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXNdKQorICAgICMgTWFrZSBzdXJlIGVpdGhlciBlbmFibGVfc2hhcmVkIG9yIGVuYWJsZV9zdGF0aWMgaXMgeWVzLgorICAgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyB8fCBlbmFibGVfc3RhdGljPXllcworICAgIEFDX01TR19SRVNVTFQoWyRlbmFibGVfc3RhdGljXSkKKworICAgIF9MVF9UQUdWQVIoR0NDLCAkMSk9IiRhY19jdl9mY19jb21waWxlcl9nbnUiCisgICAgX0xUX1RBR1ZBUihMRCwgJDEpPSIkTEQiCisKKyAgICAjIyBDQVZFQVQgRU1QVE9SOgorICAgICMjIFRoZXJlIGlzIG5vIGVuY2Fwc3VsYXRpb24gd2l0aGluIHRoZSBmb2xsb3dpbmcgbWFjcm9zLCBkbyBub3QgY2hhbmdlCisgICAgIyMgdGhlIHJ1bm5pbmcgb3JkZXIgb3Igb3RoZXJ3aXNlIG1vdmUgdGhlbSBhcm91bmQgdW5sZXNzIHlvdSBrbm93IGV4YWN0bHkKKyAgICAjIyB3aGF0IHlvdSBhcmUgZG9pbmcuLi4KKyAgICBfTFRfU1lTX0hJRERFTl9MSUJERVBTKCQxKQorICAgIF9MVF9DT01QSUxFUl9QSUMoJDEpCisgICAgX0xUX0NPTVBJTEVSX0NfTygkMSkKKyAgICBfTFRfQ09NUElMRVJfRklMRV9MT0NLUygkMSkKKyAgICBfTFRfTElOS0VSX1NITElCUygkMSkKKyAgICBfTFRfU1lTX0RZTkFNSUNfTElOS0VSKCQxKQorICAgIF9MVF9MSU5LRVJfSEFSRENPREVfTElCUEFUSCgkMSkKKworICAgIF9MVF9DT05GSUcoJDEpCisgIGZpICMgdGVzdCAtbiAiJGNvbXBpbGVyIgorCisgIEdDQz0kbHRfc2F2ZV9HQ0MKKyAgQ0M9IiRsdF9zYXZlX0NDIgorZmkgIyB0ZXN0ICIkX2x0X2Rpc2FibGVfRkMiICE9IHllcworCitBQ19MQU5HX1BPUAorXSkjIF9MVF9MQU5HX0ZDX0NPTkZJRworCisKKyMgX0xUX0xBTkdfR0NKX0NPTkZJRyhbVEFHXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRW5zdXJlIHRoYXQgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGZvciB0aGUgR05VIEphdmEgQ29tcGlsZXIgY29tcGlsZXIKKyMgYXJlIHN1aXRhYmx5IGRlZmluZWQuICBUaGVzZSB2YXJpYWJsZXMgYXJlIHN1YnNlcXVlbnRseSB1c2VkIGJ5IF9MVF9DT05GSUcKKyMgdG8gd3JpdGUgdGhlIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gdG8gYGxpYnRvb2wnLgorbTRfZGVmdW4oW19MVF9MQU5HX0dDSl9DT05GSUddLAorW0FDX1JFUVVJUkUoW0xUX1BST0dfR0NKXSlkbmwKK0FDX0xBTkdfU0FWRQorCisjIFNvdXJjZSBmaWxlIGV4dGVuc2lvbiBmb3IgSmF2YSB0ZXN0IHNvdXJjZXMuCithY19leHQ9amF2YQorCisjIE9iamVjdCBmaWxlIGV4dGVuc2lvbiBmb3IgY29tcGlsZWQgSmF2YSB0ZXN0IHNvdXJjZXMuCitvYmpleHQ9bworX0xUX1RBR1ZBUihvYmpleHQsICQxKT0kb2JqZXh0CisKKyMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBjb21waWxlIHRlc3RzCitsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGU9ImNsYXNzIGZvbyB7fSIKKworIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGxpbmsgdGVzdHMKK2x0X3NpbXBsZV9saW5rX3Rlc3RfY29kZT0ncHVibGljIGNsYXNzIGNvbmZ0ZXN0IHsgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW1tdXSBhcmd2KSB7fTsgfScKKworIyBsdG1haW4gb25seSB1c2VzICRDQyBmb3IgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIHNvIG1ha2Ugc3VyZSAkQ0MgaXMgc2V0LgorX0xUX1RBR19DT01QSUxFUgorCisjIHNhdmUgd2FybmluZ3MvYm9pbGVycGxhdGUgb2Ygc2ltcGxlIHRlc3QgY29kZQorX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFCitfTFRfTElOS0VSX0JPSUxFUlBMQVRFCisKKyMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCitsdF9zYXZlX0NDPSIkQ0MiCitsdF9zYXZlX0dDQz0kR0NDCitHQ0M9eWVzCitDQz0ke0dDSi0iZ2NqIn0KK2NvbXBpbGVyPSRDQworX0xUX1RBR1ZBUihjb21waWxlciwgJDEpPSRDQworX0xUX1RBR1ZBUihMRCwgJDEpPSIkTEQiCitfTFRfQ0NfQkFTRU5BTUUoWyRjb21waWxlcl0pCisKKyMgR0NKIGRpZCBub3QgZXhpc3QgYXQgdGhlIHRpbWUgR0NDIGRpZG4ndCBpbXBsaWNpdGx5IGxpbmsgbGliYyBpbi4KK19MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubworCitfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0kb2xkX2FyY2hpdmVfY21kcworCisjIyBDQVZFQVQgRU1QVE9SOgorIyMgVGhlcmUgaXMgbm8gZW5jYXBzdWxhdGlvbiB3aXRoaW4gdGhlIGZvbGxvd2luZyBtYWNyb3MsIGRvIG5vdCBjaGFuZ2UKKyMjIHRoZSBydW5uaW5nIG9yZGVyIG9yIG90aGVyd2lzZSBtb3ZlIHRoZW0gYXJvdW5kIHVubGVzcyB5b3Uga25vdyBleGFjdGx5CisjIyB3aGF0IHlvdSBhcmUgZG9pbmcuLi4KK2lmIHRlc3QgLW4gIiRjb21waWxlciI7IHRoZW4KKyAgX0xUX0NPTVBJTEVSX05PX1JUVEkoJDEpCisgIF9MVF9DT01QSUxFUl9QSUMoJDEpCisgIF9MVF9DT01QSUxFUl9DX08oJDEpCisgIF9MVF9DT01QSUxFUl9GSUxFX0xPQ0tTKCQxKQorICBfTFRfTElOS0VSX1NITElCUygkMSkKKyAgX0xUX0xJTktFUl9IQVJEQ09ERV9MSUJQQVRIKCQxKQorCisgIF9MVF9DT05GSUcoJDEpCitmaQorCitBQ19MQU5HX1JFU1RPUkUKKworR0NDPSRsdF9zYXZlX0dDQworQ0M9IiRsdF9zYXZlX0NDIgorXSkjIF9MVF9MQU5HX0dDSl9DT05GSUcKKworCisjIF9MVF9MQU5HX1JDX0NPTkZJRyhbVEFHXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFbnN1cmUgdGhhdCB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgZm9yIHRoZSBXaW5kb3dzIHJlc291cmNlIGNvbXBpbGVyCisjIGFyZSBzdWl0YWJseSBkZWZpbmVkLiAgVGhlc2UgdmFyaWFibGVzIGFyZSBzdWJzZXF1ZW50bHkgdXNlZCBieSBfTFRfQ09ORklHCisjIHRvIHdyaXRlIHRoZSBjb21waWxlciBjb25maWd1cmF0aW9uIHRvIGBsaWJ0b29sJy4KK200X2RlZnVuKFtfTFRfTEFOR19SQ19DT05GSUddLAorW0FDX1JFUVVJUkUoW0xUX1BST0dfUkNdKWRubAorQUNfTEFOR19TQVZFCisKKyMgU291cmNlIGZpbGUgZXh0ZW5zaW9uIGZvciBSQyB0ZXN0IHNvdXJjZXMuCithY19leHQ9cmMKKworIyBPYmplY3QgZmlsZSBleHRlbnNpb24gZm9yIGNvbXBpbGVkIFJDIHRlc3Qgc291cmNlcy4KK29iamV4dD1vCitfTFRfVEFHVkFSKG9iamV4dCwgJDEpPSRvYmpleHQKKworIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGNvbXBpbGUgdGVzdHMKK2x0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZT0nc2FtcGxlIE1FTlUgeyBNRU5VSVRFTSAiJlNvdXAiLCAxMDAsIENIRUNLRUQgfScKKworIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGxpbmsgdGVzdHMKK2x0X3NpbXBsZV9saW5rX3Rlc3RfY29kZT0iJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIKKworIyBsdG1haW4gb25seSB1c2VzICRDQyBmb3IgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIHNvIG1ha2Ugc3VyZSAkQ0MgaXMgc2V0LgorX0xUX1RBR19DT01QSUxFUgorCisjIHNhdmUgd2FybmluZ3MvYm9pbGVycGxhdGUgb2Ygc2ltcGxlIHRlc3QgY29kZQorX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFCitfTFRfTElOS0VSX0JPSUxFUlBMQVRFCisKKyMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCitsdF9zYXZlX0NDPSIkQ0MiCitsdF9zYXZlX0dDQz0kR0NDCitHQ0M9CitDQz0ke1JDLSJ3aW5kcmVzIn0KK2NvbXBpbGVyPSRDQworX0xUX1RBR1ZBUihjb21waWxlciwgJDEpPSRDQworX0xUX0NDX0JBU0VOQU1FKFskY29tcGlsZXJdKQorX0xUX1RBR1ZBUihsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbywgJDEpPXllcworCitpZiB0ZXN0IC1uICIkY29tcGlsZXIiOyB0aGVuCisgIDoKKyAgX0xUX0NPTkZJRygkMSkKK2ZpCisKK0dDQz0kbHRfc2F2ZV9HQ0MKK0FDX0xBTkdfUkVTVE9SRQorQ0M9IiRsdF9zYXZlX0NDIgorXSkjIF9MVF9MQU5HX1JDX0NPTkZJRworCisKKyMgTFRfUFJPR19HQ0oKKyMgLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtMVF9QUk9HX0dDSl0sCitbbTRfaWZkZWYoW0FDX1BST0dfR0NKXSwgW0FDX1BST0dfR0NKXSwKKyAgW200X2lmZGVmKFtBXVtNX1BST0dfR0NKXSwgW0FdW01fUFJPR19HQ0pdLAorICAgIFtBQ19DSEVDS19UT09MKEdDSiwgZ2NqLCkKKyAgICAgIHRlc3QgIngke0dDSkZMQUdTK3NldH0iID0geHNldCB8fCBHQ0pGTEFHUz0iLWcgLU8yIgorICAgICAgQUNfU1VCU1QoR0NKRkxBR1MpXSldKVtdZG5sCitdKQorCisjIE9sZCBuYW1lOgorQVVfQUxJQVMoW0xUX0FDX1BST0dfR0NKXSwgW0xUX1BST0dfR0NKXSkKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbTFRfQUNfUFJPR19HQ0pdLCBbXSkKKworCisjIExUX1BST0dfUkMKKyMgLS0tLS0tLS0tLQorQUNfREVGVU4oW0xUX1BST0dfUkNdLAorW0FDX0NIRUNLX1RPT0woUkMsIHdpbmRyZXMsKQorXSkKKworIyBPbGQgbmFtZToKK0FVX0FMSUFTKFtMVF9BQ19QUk9HX1JDXSwgW0xUX1BST0dfUkNdKQorZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtMVF9BQ19QUk9HX1JDXSwgW10pCisKKworIyBfTFRfREVDTF9FR1JFUAorIyAtLS0tLS0tLS0tLS0tLQorIyBJZiB3ZSBkb24ndCBoYXZlIGEgbmV3IGVub3VnaCBBdXRvY29uZiB0byBjaG9vc2UgdGhlIGJlc3QgZ3JlcAorIyBhdmFpbGFibGUsIGNob29zZSB0aGUgb25lIGZpcnN0IGluIHRoZSB1c2VyJ3MgUEFUSC4KK200X2RlZnVuKFtfTFRfREVDTF9FR1JFUF0sCitbQUNfUkVRVUlSRShbQUNfUFJPR19FR1JFUF0pZG5sCitBQ19SRVFVSVJFKFtBQ19QUk9HX0ZHUkVQXSlkbmwKK3Rlc3QgLXogIiRHUkVQIiAmJiBHUkVQPWdyZXAKK19MVF9ERUNMKFtdLCBbR1JFUF0sIFsxXSwgW0EgZ3JlcCBwcm9ncmFtIHRoYXQgaGFuZGxlcyBsb25nIGxpbmVzXSkKK19MVF9ERUNMKFtdLCBbRUdSRVBdLCBbMV0sIFtBbiBFUkUgbWF0Y2hlcl0pCitfTFRfREVDTChbXSwgW0ZHUkVQXSwgWzFdLCBbQSBsaXRlcmFsIHN0cmluZyBtYXRjaGVyXSkKK2RubCBOb24tYmxlZWRpbmctZWRnZSBhdXRvY29uZiBkb2Vzbid0IHN1YnN0IEdSRVAsIHNvIGRvIGl0IGhlcmUgdG9vCitBQ19TVUJTVChbR1JFUF0pCitdKQorCisKKyMgX0xUX0RFQ0xfT0JKRFVNUAorIyAtLS0tLS0tLS0tLS0tLQorIyBJZiB3ZSBkb24ndCBoYXZlIGEgbmV3IGVub3VnaCBBdXRvY29uZiB0byBjaG9vc2UgdGhlIGJlc3Qgb2JqZHVtcAorIyBhdmFpbGFibGUsIGNob29zZSB0aGUgb25lIGZpcnN0IGluIHRoZSB1c2VyJ3MgUEFUSC4KK200X2RlZnVuKFtfTFRfREVDTF9PQkpEVU1QXSwKK1tBQ19DSEVDS19UT09MKE9CSkRVTVAsIG9iamR1bXAsIGZhbHNlKQordGVzdCAteiAiJE9CSkRVTVAiICYmIE9CSkRVTVA9b2JqZHVtcAorX0xUX0RFQ0woW10sIFtPQkpEVU1QXSwgWzFdLCBbQW4gb2JqZWN0IHN5bWJvbCBkdW1wZXJdKQorQUNfU1VCU1QoW09CSkRVTVBdKQorXSkKKworCisjIF9MVF9ERUNMX1NFRAorIyAtLS0tLS0tLS0tLS0KKyMgQ2hlY2sgZm9yIGEgZnVsbHktZnVuY3Rpb25hbCBzZWQgcHJvZ3JhbSwgdGhhdCB0cnVuY2F0ZXMKKyMgYXMgZmV3IGNoYXJhY3RlcnMgYXMgcG9zc2libGUuICBQcmVmZXIgR05VIHNlZCBpZiBmb3VuZC4KK200X2RlZnVuKFtfTFRfREVDTF9TRURdLAorW0FDX1BST0dfU0VECit0ZXN0IC16ICIkU0VEIiAmJiBTRUQ9c2VkCitYc2VkPSIkU0VEIC1lIDFzL15YLy8iCitfTFRfREVDTChbXSwgW1NFRF0sIFsxXSwgW0Egc2VkIHByb2dyYW0gdGhhdCBkb2VzIG5vdCB0cnVuY2F0ZSBvdXRwdXRdKQorX0xUX0RFQ0woW10sIFtYc2VkXSwgWyJcJFNFRCAtZSAxcy9eWC8vIl0sCisgICAgW1NlZCB0aGF0IGhlbHBzIHVzIGF2b2lkIGFjY2lkZW50YWxseSB0cmlnZ2VyaW5nIGVjaG8oMSkgb3B0aW9ucyBsaWtlIC1uXSkKK10pIyBfTFRfREVDTF9TRUQKKworbTRfaWZuZGVmKFtBQ19QUk9HX1NFRF0sIFsKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBOT1RFOiBUaGlzIG1hY3JvIGhhcyBiZWVuIHN1Ym1pdHRlZCBmb3IgaW5jbHVzaW9uIGludG8gICAjCisjICBHTlUgQXV0b2NvbmYgYXMgQUNfUFJPR19TRUQuICBXaGVuIGl0IGlzIGF2YWlsYWJsZSBpbiAgICMKKyMgIGEgcmVsZWFzZWQgdmVyc2lvbiBvZiBBdXRvY29uZiB3ZSBzaG91bGQgcmVtb3ZlIHRoaXMgICAgIworIyAgbWFjcm8gYW5kIHVzZSBpdCBpbnN0ZWFkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworbTRfZGVmdW4oW0FDX1BST0dfU0VEXSwKK1tBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBhIHNlZCB0aGF0IGRvZXMgbm90IHRydW5jYXRlIG91dHB1dF0pCitBQ19DQUNIRV9WQUwobHRfY3ZfcGF0aF9TRUQsCitbIyBMb29wIHRocm91Z2ggdGhlIHVzZXIncyBwYXRoIGFuZCB0ZXN0IGZvciBzZWQgYW5kIGdzZWQuCisjIFRoZW4gdXNlIHRoYXQgbGlzdCBvZiBzZWQncyBhcyBvbmVzIHRvIHRlc3QgZm9yIHRydW5jYXRpb24uCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgIGZvciBsdF9hY19wcm9nIGluIHNlZCBnc2VkOyBkbworICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICAgICAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kbHRfYWNfcHJvZyRhY19leGVjX2V4dCI7IHRoZW4KKyAgICAgICAgbHRfYWNfc2VkX2xpc3Q9IiRsdF9hY19zZWRfbGlzdCAkYXNfZGlyLyRsdF9hY19wcm9nJGFjX2V4ZWNfZXh0IgorICAgICAgZmkKKyAgICBkb25lCisgIGRvbmUKK2RvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKK2x0X2FjX21heD0wCitsdF9hY19jb3VudD0wCisjIEFkZCAvdXNyL3hwZzQvYmluL3NlZCBhcyBpdCBpcyB0eXBpY2FsbHkgZm91bmQgb24gU29sYXJpcworIyBhbG9uZyB3aXRoIC9iaW4vc2VkIHRoYXQgdHJ1bmNhdGVzIG91dHB1dC4KK2ZvciBsdF9hY19zZWQgaW4gJGx0X2FjX3NlZF9saXN0IC91c3IveHBnNC9iaW4vc2VkOyBkbworICB0ZXN0ICEgLWYgJGx0X2FjX3NlZCAmJiBjb250aW51ZQorICBjYXQgL2Rldi9udWxsID4gY29uZnRlc3QuaW4KKyAgbHRfYWNfY291bnQ9MAorICBlY2hvICRFQ0hPX04gIjAxMjM0NTY3ODkkRUNIT19DIiA+Y29uZnRlc3QuaW4KKyAgIyBDaGVjayBmb3IgR05VIHNlZCBhbmQgc2VsZWN0IGl0IGlmIGl0IGlzIGZvdW5kLgorICBpZiAiJGx0X2FjX3NlZCIgLS12ZXJzaW9uIDI+JjEgPCAvZGV2L251bGwgfCBncmVwICdHTlUnID4gL2Rldi9udWxsOyB0aGVuCisgICAgbHRfY3ZfcGF0aF9TRUQ9JGx0X2FjX3NlZAorICAgIGJyZWFrCisgIGZpCisgIHdoaWxlIHRydWU7IGRvCisgICAgY2F0IGNvbmZ0ZXN0LmluIGNvbmZ0ZXN0LmluID5jb25mdGVzdC50bXAKKyAgICBtdiBjb25mdGVzdC50bXAgY29uZnRlc3QuaW4KKyAgICBjcCBjb25mdGVzdC5pbiBjb25mdGVzdC5ubAorICAgIGVjaG8gPj5jb25mdGVzdC5ubAorICAgICRsdF9hY19zZWQgLWUgJ3MvYSQvLycgPCBjb25mdGVzdC5ubCA+Y29uZnRlc3Qub3V0IHx8IGJyZWFrCisgICAgY21wIC1zIGNvbmZ0ZXN0Lm91dCBjb25mdGVzdC5ubCB8fCBicmVhaworICAgICMgMTAwMDAgY2hhcnMgYXMgaW5wdXQgc2VlbXMgbW9yZSB0aGFuIGVub3VnaAorICAgIHRlc3QgJGx0X2FjX2NvdW50IC1ndCAxMCAmJiBicmVhaworICAgIGx0X2FjX2NvdW50PWBleHByICRsdF9hY19jb3VudCArIDFgCisgICAgaWYgdGVzdCAkbHRfYWNfY291bnQgLWd0ICRsdF9hY19tYXg7IHRoZW4KKyAgICAgIGx0X2FjX21heD0kbHRfYWNfY291bnQKKyAgICAgIGx0X2N2X3BhdGhfU0VEPSRsdF9hY19zZWQKKyAgICBmaQorICBkb25lCitkb25lCitdKQorU0VEPSRsdF9jdl9wYXRoX1NFRAorQUNfU1VCU1QoW1NFRF0pCitBQ19NU0dfUkVTVUxUKFskU0VEXSkKK10pI0FDX1BST0dfU0VECitdKSNtNF9pZm5kZWYKKworIyBPbGQgbmFtZToKK0FVX0FMSUFTKFtMVF9BQ19QUk9HX1NFRF0sIFtBQ19QUk9HX1NFRF0pCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0xUX0FDX1BST0dfU0VEXSwgW10pCisKKworIyBfTFRfQ0hFQ0tfU0hFTExfRkVBVFVSRVMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEZpbmQgb3V0IHdoZXRoZXIgdGhlIHNoZWxsIGlzIEJvdXJuZSBvciBYU0kgY29tcGF0aWJsZSwKKyMgb3IgaGFzIHNvbWUgb3RoZXIgdXNlZnVsIGZlYXR1cmVzLgorbTRfZGVmdW4oW19MVF9DSEVDS19TSEVMTF9GRUFUVVJFU10sCitbQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRoZSBzaGVsbCB1bmRlcnN0YW5kcyBzb21lIFhTSSBjb25zdHJ1Y3RzXSkKKyMgVHJ5IHNvbWUgWFNJIGZlYXR1cmVzCit4c2lfc2hlbGw9bm8KKyggX2x0X2R1bW15PSJhL2IvYyIKKyAgdGVzdCAiJHtfbHRfZHVtbXkjIyovfSwke19sdF9kdW1teSUvKn0sIiR7X2x0X2R1bW15JSIkX2x0X2R1bW15In0sIFwKKyAgICAgID0gYyxhL2IsLCBcCisgICAgJiYgZXZhbCAndGVzdCAkKCggMSArIDEgKSkgLWVxIDIgXAorICAgICYmIHRlc3QgIiR7I19sdF9kdW1teX0iIC1lcSA1JyApID4vZGV2L251bGwgMj4mMSBcCisgICYmIHhzaV9zaGVsbD15ZXMKK0FDX01TR19SRVNVTFQoWyR4c2lfc2hlbGxdKQorX0xUX0NPTkZJR19MSUJUT09MX0lOSVQoW3hzaV9zaGVsbD0nJHhzaV9zaGVsbCddKQorCitBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdGhlIHNoZWxsIHVuZGVyc3RhbmRzICIrPSJdKQorbHRfc2hlbGxfYXBwZW5kPW5vCisoIGZvbz1iYXI7IHNldCBmb28gYmF6OyBldmFsICIkWzFdKz1cJFsyXSIgJiYgdGVzdCAiJGZvbyIgPSBiYXJiYXogKSBcCisgICAgPi9kZXYvbnVsbCAyPiYxIFwKKyAgJiYgbHRfc2hlbGxfYXBwZW5kPXllcworQUNfTVNHX1JFU1VMVChbJGx0X3NoZWxsX2FwcGVuZF0pCitfTFRfQ09ORklHX0xJQlRPT0xfSU5JVChbbHRfc2hlbGxfYXBwZW5kPSckbHRfc2hlbGxfYXBwZW5kJ10pCisKK2lmICggKE1BSUw9NjA7IHVuc2V0IE1BSUwpIHx8IGV4aXQpID4vZGV2L251bGwgMj4mMTsgdGhlbgorICBsdF91bnNldD11bnNldAorZWxzZQorICBsdF91bnNldD1mYWxzZQorZmkKK19MVF9ERUNMKFtdLCBbbHRfdW5zZXRdLCBbMF0sIFt3aGV0aGVyIHRoZSBzaGVsbCB1bmRlcnN0YW5kcyAidW5zZXQiXSlkbmwKKworIyB0ZXN0IEVCQ0RJQyBvciBBU0NJSQorY2FzZSBgZWNobyBYfHRyIFggJ1wxMDEnYCBpbgorIEEpICMgQVNDSUkgYmFzZWQgc3lzdGVtCisgICAgIyBcbiBpcyBub3QgaW50ZXJwcmV0ZWQgY29ycmVjdGx5IGJ5IFNvbGFyaXMgOCAvdXNyL3VjYi90cgorICBsdF9TUDJOTD0ndHIgXDA0MCBcMDEyJworICBsdF9OTDJTUD0ndHIgXDAxNVwwMTIgXDA0MFwwNDAnCisgIDs7CisgKikgIyBFQkNESUMgYmFzZWQgc3lzdGVtCisgIGx0X1NQMk5MPSd0ciBcMTAwIFxuJworICBsdF9OTDJTUD0ndHIgXHJcbiBcMTAwXDEwMCcKKyAgOzsKK2VzYWMKK19MVF9ERUNMKFtTUDJOTF0sIFtsdF9TUDJOTF0sIFsxXSwgW3R1cm4gc3BhY2VzIGludG8gbmV3bGluZXNdKWRubAorX0xUX0RFQ0woW05MMlNQXSwgW2x0X05MMlNQXSwgWzFdLCBbdHVybiBuZXdsaW5lcyBpbnRvIHNwYWNlc10pZG5sCitdKSMgX0xUX0NIRUNLX1NIRUxMX0ZFQVRVUkVTCisKKworIyBfTFRfUFJPR19YU0lfU0hFTExGTlMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEJvdXJuZSBhbmQgWFNJIGNvbXBhdGlibGUgdmFyaWFudHMgb2Ygc29tZSB1c2VmdWwgc2hlbGwgZnVuY3Rpb25zLgorbTRfZGVmdW4oW19MVF9QUk9HX1hTSV9TSEVMTEZOU10sCitbY2FzZSAkeHNpX3NoZWxsIGluCisgIHllcykKKyAgICBjYXQgPDwgXF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorCisjIGZ1bmNfZGlybmFtZSBmaWxlIGFwcGVuZCBub25kaXJfcmVwbGFjZW1lbnQKKyMgQ29tcHV0ZSB0aGUgZGlybmFtZSBvZiBGSUxFLiAgSWYgbm9uZW1wdHksIGFkZCBBUFBFTkQgdG8gdGhlIHJlc3VsdCwKKyMgb3RoZXJ3aXNlIHNldCByZXN1bHQgdG8gTk9ORElSX1JFUExBQ0VNRU5ULgorZnVuY19kaXJuYW1lICgpCit7CisgIGNhc2UgJHsxfSBpbgorICAgICovKikgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHsxJS8qfSR7Mn0iIDs7CisgICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IiA7OworICBlc2FjCit9CisKKyMgZnVuY19iYXNlbmFtZSBmaWxlCitmdW5jX2Jhc2VuYW1lICgpCit7CisgIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PSIkezEjIyovfSIKK30KKworIyBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lIGZpbGUgYXBwZW5kIG5vbmRpcl9yZXBsYWNlbWVudAorIyBwZXJmb3JtIGZ1bmNfYmFzZW5hbWUgYW5kIGZ1bmNfZGlybmFtZSBpbiBhIHNpbmdsZSBmdW5jdGlvbgorIyBjYWxsOgorIyAgIGRpcm5hbWU6ICBDb21wdXRlIHRoZSBkaXJuYW1lIG9mIEZJTEUuICBJZiBub25lbXB0eSwKKyMgICAgICAgICAgICAgYWRkIEFQUEVORCB0byB0aGUgcmVzdWx0LCBvdGhlcndpc2Ugc2V0IHJlc3VsdAorIyAgICAgICAgICAgICB0byBOT05ESVJfUkVQTEFDRU1FTlQuCisjICAgICAgICAgICAgIHZhbHVlIHJldHVybmVkIGluICIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKKyMgICBiYXNlbmFtZTogQ29tcHV0ZSBmaWxlbmFtZSBvZiBGSUxFLgorIyAgICAgICAgICAgICB2YWx1ZSByZXR1bmVkIGluICIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisjIEltcGxlbWVudGF0aW9uIG11c3QgYmUga2VwdCBzeW5jaHJvbml6ZWQgd2l0aCBmdW5jX2Rpcm5hbWUKKyMgYW5kIGZ1bmNfYmFzZW5hbWUuIEZvciBlZmZpY2llbmN5LCB3ZSBkbyBub3QgZGVsZWdhdGUgdG8KKyMgdGhvc2UgZnVuY3Rpb25zIGJ1dCBpbnN0ZWFkIGR1cGxpY2F0ZSB0aGUgZnVuY3Rpb25hbGl0eSBoZXJlLgorZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAoKQoreworICBjYXNlICR7MX0gaW4KKyAgICAqLyopIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7MSUvKn0kezJ9IiA7OworICAgICogICkgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIgOzsKKyAgZXNhYworICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0iJHsxIyMqL30iCit9CisKKyMgZnVuY19zdHJpcG5hbWUgcHJlZml4IHN1ZmZpeCBuYW1lCisjIHN0cmlwIFBSRUZJWCBhbmQgU1VGRklYIG9mZiBvZiBOQU1FLgorIyBQUkVGSVggYW5kIFNVRkZJWCBtdXN0IG5vdCBjb250YWluIGdsb2JiaW5nIG9yIHJlZ2V4IHNwZWNpYWwKKyMgY2hhcmFjdGVycywgaGFzaGVzLCBwZXJjZW50IHNpZ25zLCBidXQgU1VGRklYIG1heSBjb250YWluIGEgbGVhZGluZworIyBkb3QgKGluIHdoaWNoIGNhc2UgdGhhdCBtYXRjaGVzIG9ubHkgYSBkb3QpLgorZnVuY19zdHJpcG5hbWUgKCkKK3sKKyAgIyBwZGtzaCA1LjIuMTQgZG9lcyBub3QgZG8gJHtYJSRZfSBjb3JyZWN0bHkgaWYgYm90aCBYIGFuZCBZIGFyZQorICAjIHBvc2l0aW9uYWwgcGFyYW1ldGVycywgc28gYXNzaWduIG9uZSB0byBvcmRpbmFyeSBwYXJhbWV0ZXIgZmlyc3QuCisgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0kezN9CisgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCMiJHsxfSJ9CisgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCUiJHsyfSJ9Cit9CisKKyMgZnVuY19vcHRfc3BsaXQKK2Z1bmNfb3B0X3NwbGl0ICgpCit7CisgIGZ1bmNfb3B0X3NwbGl0X29wdD0kezElJT0qfQorICBmdW5jX29wdF9zcGxpdF9hcmc9JHsxIyo9fQorfQorCisjIGZ1bmNfbG8ybyBvYmplY3QKK2Z1bmNfbG8ybyAoKQoreworICBjYXNlICR7MX0gaW4KKyAgICAqLmxvKSBmdW5jX2xvMm9fcmVzdWx0PSR7MSUubG99LiR7b2JqZXh0fSA7OworICAgICopICAgIGZ1bmNfbG8yb19yZXN1bHQ9JHsxfSA7OworICBlc2FjCit9CisKKyMgZnVuY194Zm9ybSBsaWJvYmotb3Itc291cmNlCitmdW5jX3hmb3JtICgpCit7CisgIGZ1bmNfeGZvcm1fcmVzdWx0PSR7MSUuKn0ubG8KK30KKworIyBmdW5jX2FyaXRoIGFyaXRobWV0aWMtdGVybS4uLgorZnVuY19hcml0aCAoKQoreworICBmdW5jX2FyaXRoX3Jlc3VsdD0kKCggJFsqXSApKQorfQorCisjIGZ1bmNfbGVuIHN0cmluZworIyBTVFJJTkcgbWF5IG5vdCBzdGFydCB3aXRoIGEgaHlwaGVuLgorZnVuY19sZW4gKCkKK3sKKyAgZnVuY19sZW5fcmVzdWx0PSR7IzF9Cit9CisKK19MVF9FT0YKKyAgICA7OworICAqKSAjIEJvdXJuZSBjb21wYXRpYmxlIGZ1bmN0aW9ucy4KKyAgICBjYXQgPDwgXF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorCisjIGZ1bmNfZGlybmFtZSBmaWxlIGFwcGVuZCBub25kaXJfcmVwbGFjZW1lbnQKKyMgQ29tcHV0ZSB0aGUgZGlybmFtZSBvZiBGSUxFLiAgSWYgbm9uZW1wdHksIGFkZCBBUFBFTkQgdG8gdGhlIHJlc3VsdCwKKyMgb3RoZXJ3aXNlIHNldCByZXN1bHQgdG8gTk9ORElSX1JFUExBQ0VNRU5ULgorZnVuY19kaXJuYW1lICgpCit7CisgICMgRXh0cmFjdCBzdWJkaXJlY3RvcnkgZnJvbSB0aGUgYXJndW1lbnQuCisgIGZ1bmNfZGlybmFtZV9yZXN1bHQ9YCRFQ0hPICJYJHsxfSIgfCAkWHNlZCAtZSAiJGRpcm5hbWUiYAorICBpZiB0ZXN0ICJYJGZ1bmNfZGlybmFtZV9yZXN1bHQiID0gIlgkezF9IjsgdGhlbgorICAgIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iCisgIGVsc2UKKyAgICBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkZnVuY19kaXJuYW1lX3Jlc3VsdCR7Mn0iCisgIGZpCit9CisKKyMgZnVuY19iYXNlbmFtZSBmaWxlCitmdW5jX2Jhc2VuYW1lICgpCit7CisgIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PWAkRUNITyAiWCR7MX0iIHwgJFhzZWQgLWUgIiRiYXNlbmFtZSJgCit9CisKK2RubCBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lCitkbmwgQSBwb3J0YWJsZSB2ZXJzaW9uIG9mIHRoaXMgZnVuY3Rpb24gaXMgYWxyZWFkeSBkZWZpbmVkIGluIGdlbmVyYWwubTRzaAorZG5sIHNvIHRoZXJlIGlzIG5vIG5lZWQgZm9yIGl0IGhlcmUuCisKKyMgZnVuY19zdHJpcG5hbWUgcHJlZml4IHN1ZmZpeCBuYW1lCisjIHN0cmlwIFBSRUZJWCBhbmQgU1VGRklYIG9mZiBvZiBOQU1FLgorIyBQUkVGSVggYW5kIFNVRkZJWCBtdXN0IG5vdCBjb250YWluIGdsb2JiaW5nIG9yIHJlZ2V4IHNwZWNpYWwKKyMgY2hhcmFjdGVycywgaGFzaGVzLCBwZXJjZW50IHNpZ25zLCBidXQgU1VGRklYIG1heSBjb250YWluIGEgbGVhZGluZworIyBkb3QgKGluIHdoaWNoIGNhc2UgdGhhdCBtYXRjaGVzIG9ubHkgYSBkb3QpLgorIyBmdW5jX3N0cmlwX3N1ZmZpeCBwcmVmaXggbmFtZQorZnVuY19zdHJpcG5hbWUgKCkKK3sKKyAgY2FzZSAkezJ9IGluCisgICAgLiopIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD1gJEVDSE8gIlgkezN9IiBcCisgICAgICAgICAgIHwgJFhzZWQgLWUgInMlXiR7MX0lJSIgLWUgInMlXFxcXCR7Mn1cJCUlImA7OworICAgICopICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9YCRFQ0hPICJYJHszfSIgXAorICAgICAgICAgICB8ICRYc2VkIC1lICJzJV4kezF9JSUiIC1lICJzJSR7Mn1cJCUlImA7OworICBlc2FjCit9CisKKyMgc2VkIHNjcmlwdHM6CitteV9zZWRfbG9uZ19vcHQ9JzFzL15cKC1bW149XV0qXCk9LiovXDEvO3EnCitteV9zZWRfbG9uZ19hcmc9JzFzL14tW1tePV1dKj0vLycKKworIyBmdW5jX29wdF9zcGxpdAorZnVuY19vcHRfc3BsaXQgKCkKK3sKKyAgZnVuY19vcHRfc3BsaXRfb3B0PWAkRUNITyAiWCR7MX0iIHwgJFhzZWQgLWUgIiRteV9zZWRfbG9uZ19vcHQiYAorICBmdW5jX29wdF9zcGxpdF9hcmc9YCRFQ0hPICJYJHsxfSIgfCAkWHNlZCAtZSAiJG15X3NlZF9sb25nX2FyZyJgCit9CisKKyMgZnVuY19sbzJvIG9iamVjdAorZnVuY19sbzJvICgpCit7CisgIGZ1bmNfbG8yb19yZXN1bHQ9YCRFQ0hPICJYJHsxfSIgfCAkWHNlZCAtZSAiJGxvMm8iYAorfQorCisjIGZ1bmNfeGZvcm0gbGlib2JqLW9yLXNvdXJjZQorZnVuY194Zm9ybSAoKQoreworICBmdW5jX3hmb3JtX3Jlc3VsdD1gJEVDSE8gIlgkezF9IiB8ICRYc2VkIC1lICdzL1wuW1teLl1dKiQvLmxvLydgCit9CisKKyMgZnVuY19hcml0aCBhcml0aG1ldGljLXRlcm0uLi4KK2Z1bmNfYXJpdGggKCkKK3sKKyAgZnVuY19hcml0aF9yZXN1bHQ9YGV4cHIgIiRbQF0iYAorfQorCisjIGZ1bmNfbGVuIHN0cmluZworIyBTVFJJTkcgbWF5IG5vdCBzdGFydCB3aXRoIGEgaHlwaGVuLgorZnVuY19sZW4gKCkKK3sKKyAgZnVuY19sZW5fcmVzdWx0PWBleHByICIkWzFdIiA6ICIuKiIgMj4vZGV2L251bGwgfHwgZWNobyAkbWF4X2NtZF9sZW5gCit9CisKK19MVF9FT0YKK2VzYWMKKworY2FzZSAkbHRfc2hlbGxfYXBwZW5kIGluCisgIHllcykKKyAgICBjYXQgPDwgXF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorCisjIGZ1bmNfYXBwZW5kIHZhciB2YWx1ZQorIyBBcHBlbmQgVkFMVUUgdG8gdGhlIGVuZCBvZiBzaGVsbCB2YXJpYWJsZSBWQVIuCitmdW5jX2FwcGVuZCAoKQoreworICBldmFsICIkWzFdKz1cJFsyXSIKK30KK19MVF9FT0YKKyAgICA7OworICAqKQorICAgIGNhdCA8PCBcX0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCisKKyMgZnVuY19hcHBlbmQgdmFyIHZhbHVlCisjIEFwcGVuZCBWQUxVRSB0byB0aGUgZW5kIG9mIHNoZWxsIHZhcmlhYmxlIFZBUi4KK2Z1bmNfYXBwZW5kICgpCit7CisgIGV2YWwgIiRbMV09XCQkWzFdXCRbMl0iCit9CisKK19MVF9FT0YKKyAgICA7OworICBlc2FjCitdKQpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvbTQvbHRvcHRpb25zLm00IGIvb3Byb2ZpbGUtMC45LjcvbTQvbHRvcHRpb25zLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0MTUxYTMKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9tNC9sdG9wdGlvbnMubTQKQEAgLTAsMCArMSwzNjggQEAKKyMgSGVscGVyIGZ1bmN0aW9ucyBmb3Igb3B0aW9uIGhhbmRsaW5nLiAgICAgICAgICAgICAgICAgICAgLSotIEF1dG9jb25mIC0qLQorIworIyAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNywgMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgICBXcml0dGVuIGJ5IEdhcnkgVi4gVmF1Z2hhbiwgMjAwNAorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBnaXZlcworIyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgc2VyaWFsIDYgbHRvcHRpb25zLm00CisKKyMgVGhpcyBpcyB0byBoZWxwIGFjbG9jYWwgZmluZCB0aGVzZSBtYWNyb3MsIGFzIGl0IGNhbid0IHNlZSBtNF9kZWZpbmUuCitBQ19ERUZVTihbTFRPUFRJT05TX1ZFUlNJT05dLCBbbTRfaWYoWzFdKV0pCisKKworIyBfTFRfTUFOR0xFX09QVElPTihNQUNSTy1OQU1FLCBPUFRJT04tTkFNRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW19MVF9NQU5HTEVfT1BUSU9OXSwKK1tbX0xUX09QVElPTl9dbTRfYnBhdHN1YnN0KCQxX18kMiwgW1teYS16QS1aMC05X11dLCBbX10pXSkKKworCisjIF9MVF9TRVRfT1BUSU9OKE1BQ1JPLU5BTUUsIE9QVElPTi1OQU1FKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgU2V0IG9wdGlvbiBPUFRJT04tTkFNRSBmb3IgbWFjcm8gTUFDUk8tTkFNRSwgYW5kIGlmIHRoZXJlIGlzIGEKKyMgbWF0Y2hpbmcgaGFuZGxlciBkZWZpbmVkLCBkaXNwYXRjaCB0byBpdC4gIE90aGVyIE9QVElPTi1OQU1FcyBhcmUKKyMgc2F2ZWQgYXMgYSBmbGFnLgorbTRfZGVmaW5lKFtfTFRfU0VUX09QVElPTl0sCitbbTRfZGVmaW5lKF9MVF9NQU5HTEVfT1BUSU9OKFskMV0sIFskMl0pKWRubAorbTRfaWZkZWYoX0xUX01BTkdMRV9ERUZVTihbJDFdLCBbJDJdKSwKKyAgICAgICAgX0xUX01BTkdMRV9ERUZVTihbJDFdLCBbJDJdKSwKKyAgICBbbTRfd2FybmluZyhbVW5rbm93biAkMSBvcHRpb24gYCQyJ10pXSlbXWRubAorXSkKKworCisjIF9MVF9JRl9PUFRJT04oTUFDUk8tTkFNRSwgT1BUSU9OLU5BTUUsIElGLVNFVCwgW0lGLU5PVC1TRVRdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRXhlY3V0ZSBJRi1TRVQgaWYgT1BUSU9OIGlzIHNldCwgSUYtTk9ULVNFVCBvdGhlcndpc2UuCittNF9kZWZpbmUoW19MVF9JRl9PUFRJT05dLAorW200X2lmZGVmKF9MVF9NQU5HTEVfT1BUSU9OKFskMV0sIFskMl0pLCBbJDNdLCBbJDRdKV0pCisKKworIyBfTFRfVU5MRVNTX09QVElPTlMoTUFDUk8tTkFNRSwgT1BUSU9OLUxJU1QsIElGLU5PVC1TRVQpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRXhlY3V0ZSBJRi1OT1QtU0VUIHVubGVzcyBhbGwgb3B0aW9ucyBpbiBPUFRJT04tTElTVCBmb3IgTUFDUk8tTkFNRQorIyBhcmUgc2V0LgorbTRfZGVmaW5lKFtfTFRfVU5MRVNTX09QVElPTlNdLAorW200X2ZvcmVhY2goW19MVF9PcHRpb25dLCBtNF9zcGxpdChtNF9ub3JtYWxpemUoWyQyXSkpLAorCSAgICBbbTRfaWZkZWYoX0xUX01BTkdMRV9PUFRJT04oWyQxXSwgX0xUX09wdGlvbiksCisJCSAgICAgIFttNF9kZWZpbmUoWyQwX2ZvdW5kXSldKV0pW11kbmwKK200X2lmZGVmKFskMF9mb3VuZF0sIFttNF91bmRlZmluZShbJDBfZm91bmRdKV0sIFskMworXSlbXWRubAorXSkKKworCisjIF9MVF9TRVRfT1BUSU9OUyhNQUNSTy1OQU1FLCBPUFRJT04tTElTVCkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBPUFRJT04tTElTVCBpcyBhIHNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIExpYnRvb2wgb3B0aW9ucyBhc3NvY2lhdGVkCisjIHdpdGggTUFDUk8tTkFNRS4gIElmIGFueSBPUFRJT04gaGFzIGEgbWF0Y2hpbmcgaGFuZGxlciBkZWNsYXJlZCB3aXRoCisjIExUX09QVElPTl9ERUZJTkUsIGRpc3BhdGNoIHRvIHRoYXQgbWFjcm87IG90aGVyd2lzZSBjb21wbGFpbiBhYm91dAorIyB0aGUgdW5rbm93biBvcHRpb24gYW5kIGV4aXQuCittNF9kZWZ1bihbX0xUX1NFVF9PUFRJT05TXSwKK1sjIFNldCBvcHRpb25zCittNF9mb3JlYWNoKFtfTFRfT3B0aW9uXSwgbTRfc3BsaXQobTRfbm9ybWFsaXplKFskMl0pKSwKKyAgICBbX0xUX1NFVF9PUFRJT04oWyQxXSwgX0xUX09wdGlvbildKQorCittNF9pZihbJDFdLFtMVF9JTklUXSxbCisgIGRubAorICBkbmwgU2ltcGx5IHNldCBzb21lIGRlZmF1bHQgdmFsdWVzIChpLmUgb2ZmKSBpZiBib29sZWFuIG9wdGlvbnMgd2VyZSBub3QKKyAgZG5sIHNwZWNpZmllZDoKKyAgX0xUX1VOTEVTU19PUFRJT05TKFtMVF9JTklUXSwgW2Rsb3Blbl0sIFtlbmFibGVfZGxvcGVuPW5vCisgIF0pCisgIF9MVF9VTkxFU1NfT1BUSU9OUyhbTFRfSU5JVF0sIFt3aW4zMi1kbGxdLCBbZW5hYmxlX3dpbjMyX2RsbD1ubworICBdKQorICBkbmwKKyAgZG5sIElmIG5vIHJlZmVyZW5jZSB3YXMgbWFkZSB0byB2YXJpb3VzIHBhaXJzIG9mIG9wcG9zaW5nIG9wdGlvbnMsIHRoZW4KKyAgZG5sIHdlIHJ1biB0aGUgZGVmYXVsdCBtb2RlIGhhbmRsZXIgZm9yIHRoZSBwYWlyLiAgRm9yIGV4YW1wbGUsIGlmIG5laXRoZXIKKyAgZG5sIGBzaGFyZWQnIG5vciBgZGlzYWJsZS1zaGFyZWQnIHdhcyBwYXNzZWQsIHdlIGVuYWJsZSBidWlsZGluZyBvZiBzaGFyZWQKKyAgZG5sIGFyY2hpdmVzIGJ5IGRlZmF1bHQ6CisgIF9MVF9VTkxFU1NfT1BUSU9OUyhbTFRfSU5JVF0sIFtzaGFyZWQgZGlzYWJsZS1zaGFyZWRdLCBbX0xUX0VOQUJMRV9TSEFSRURdKQorICBfTFRfVU5MRVNTX09QVElPTlMoW0xUX0lOSVRdLCBbc3RhdGljIGRpc2FibGUtc3RhdGljXSwgW19MVF9FTkFCTEVfU1RBVElDXSkKKyAgX0xUX1VOTEVTU19PUFRJT05TKFtMVF9JTklUXSwgW3BpYy1vbmx5IG5vLXBpY10sIFtfTFRfV0lUSF9QSUNdKQorICBfTFRfVU5MRVNTX09QVElPTlMoW0xUX0lOSVRdLCBbZmFzdC1pbnN0YWxsIGRpc2FibGUtZmFzdC1pbnN0YWxsXSwKKyAgCQkgICBbX0xUX0VOQUJMRV9GQVNUX0lOU1RBTExdKQorICBdKQorXSkjIF9MVF9TRVRfT1BUSU9OUworCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgTWFjcm9zIHRvIGhhbmRsZSBMVF9JTklUIG9wdGlvbnMuICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworIyBfTFRfTUFOR0xFX0RFRlVOKE1BQ1JPLU5BTUUsIE9QVElPTi1OQU1FKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtfTFRfTUFOR0xFX0RFRlVOXSwKK1tbX0xUX09QVElPTl9ERUZVTl9dbTRfYnBhdHN1YnN0KG00X3RvdXBwZXIoWyQxX18kMl0pLCBbW15BLVowLTlfXV0sIFtfXSldKQorCisKKyMgTFRfT1BUSU9OX0RFRklORShNQUNSTy1OQU1FLCBPUFRJT04tTkFNRSwgQ09ERSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbTFRfT1BUSU9OX0RFRklORV0sCitbbTRfZGVmaW5lKF9MVF9NQU5HTEVfREVGVU4oWyQxXSwgWyQyXSksIFskM10pW11kbmwKK10pIyBMVF9PUFRJT05fREVGSU5FCisKKworIyBkbG9wZW4KKyMgLS0tLS0tCitMVF9PUFRJT05fREVGSU5FKFtMVF9JTklUXSwgW2Rsb3Blbl0sIFtlbmFibGVfZGxvcGVuPXllcworXSkKKworQVVfREVGVU4oW0FDX0xJQlRPT0xfRExPUEVOXSwKK1tfTFRfU0VUX09QVElPTihbTFRfSU5JVF0sIFtkbG9wZW5dKQorQUNfRElBR05PU0UoW29ic29sZXRlXSwKK1skMDogUmVtb3ZlIHRoaXMgd2FybmluZyBhbmQgdGhlIGNhbGwgdG8gX0xUX1NFVF9PUFRJT04gd2hlbiB5b3UKK3B1dCB0aGUgYGRsb3Blbicgb3B0aW9uIGludG8gTFRfSU5JVCdzIGZpcnN0IHBhcmFtZXRlci5dKQorXSkKKworZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtBQ19MSUJUT09MX0RMT1BFTl0sIFtdKQorCisKKyMgd2luMzItZGxsCisjIC0tLS0tLS0tLQorIyBEZWNsYXJlIHBhY2thZ2Ugc3VwcG9ydCBmb3IgYnVpbGRpbmcgd2luMzIgZGxsJ3MuCitMVF9PUFRJT05fREVGSU5FKFtMVF9JTklUXSwgW3dpbjMyLWRsbF0sCitbZW5hYmxlX3dpbjMyX2RsbD15ZXMKKworY2FzZSAkaG9zdCBpbgorKi0qLWN5Z3dpbiogfCAqLSotbWluZ3cqIHwgKi0qLXB3MzIqIHwgKi1jZWdjYyopCisgIEFDX0NIRUNLX1RPT0woQVMsIGFzLCBmYWxzZSkKKyAgQUNfQ0hFQ0tfVE9PTChETExUT09MLCBkbGx0b29sLCBmYWxzZSkKKyAgQUNfQ0hFQ0tfVE9PTChPQkpEVU1QLCBvYmpkdW1wLCBmYWxzZSkKKyAgOzsKK2VzYWMKKwordGVzdCAteiAiJEFTIiAmJiBBUz1hcworX0xUX0RFQ0woW10sIFtBU10sICAgICAgWzBdLCBbQXNzZW1ibGVyIHByb2dyYW1dKWRubAorCit0ZXN0IC16ICIkRExMVE9PTCIgJiYgRExMVE9PTD1kbGx0b29sCitfTFRfREVDTChbXSwgW0RMTFRPT0xdLCBbMF0sIFtETEwgY3JlYXRpb24gcHJvZ3JhbV0pZG5sCisKK3Rlc3QgLXogIiRPQkpEVU1QIiAmJiBPQkpEVU1QPW9iamR1bXAKK19MVF9ERUNMKFtdLCBbT0JKRFVNUF0sIFswXSwgW09iamVjdCBkdW1wZXIgcHJvZ3JhbV0pZG5sCitdKSMgd2luMzItZGxsCisKK0FVX0RFRlVOKFtBQ19MSUJUT09MX1dJTjMyX0RMTF0sCitbQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKWRubAorX0xUX1NFVF9PUFRJT04oW0xUX0lOSVRdLCBbd2luMzItZGxsXSkKK0FDX0RJQUdOT1NFKFtvYnNvbGV0ZV0sCitbJDA6IFJlbW92ZSB0aGlzIHdhcm5pbmcgYW5kIHRoZSBjYWxsIHRvIF9MVF9TRVRfT1BUSU9OIHdoZW4geW91CitwdXQgdGhlIGB3aW4zMi1kbGwnIG9wdGlvbiBpbnRvIExUX0lOSVQncyBmaXJzdCBwYXJhbWV0ZXIuXSkKK10pCisKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbQUNfTElCVE9PTF9XSU4zMl9ETExdLCBbXSkKKworCisjIF9MVF9FTkFCTEVfU0hBUkVEKFtERUZBVUxUXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBpbXBsZW1lbnQgdGhlIC0tZW5hYmxlLXNoYXJlZCBmbGFnLCBhbmQgc3VwcG9ydHMgdGhlIGBzaGFyZWQnIGFuZAorIyBgZGlzYWJsZS1zaGFyZWQnIExUX0lOSVQgb3B0aW9ucy4KKyMgREVGQVVMVCBpcyBlaXRoZXIgYHllcycgb3IgYG5vJy4gIElmIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvIGB5ZXMnLgorbTRfZGVmaW5lKFtfTFRfRU5BQkxFX1NIQVJFRF0sCitbbTRfZGVmaW5lKFtfTFRfRU5BQkxFX1NIQVJFRF9ERUZBVUxUXSwgW200X2lmKCQxLCBubywgbm8sIHllcyldKWRubAorQUNfQVJHX0VOQUJMRShbc2hhcmVkXSwKKyAgICBbQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXNoYXJlZEA8OkA9UEtHU0A6PkBdLAorCVtidWlsZCBzaGFyZWQgbGlicmFyaWVzIEA8OkBkZWZhdWx0PV1fTFRfRU5BQkxFX1NIQVJFRF9ERUZBVUxUW0A6PkBdKV0sCisgICAgW3A9JHtQQUNLQUdFLWRlZmF1bHR9CisgICAgY2FzZSAkZW5hYmxldmFsIGluCisgICAgeWVzKSBlbmFibGVfc2hhcmVkPXllcyA7OworICAgIG5vKSBlbmFibGVfc2hhcmVkPW5vIDs7CisgICAgKikKKyAgICAgIGVuYWJsZV9zaGFyZWQ9bm8KKyAgICAgICMgTG9vayBhdCB0aGUgYXJndW1lbnQgd2UgZ290LiAgV2UgdXNlIGFsbCB0aGUgY29tbW9uIGxpc3Qgc2VwYXJhdG9ycy4KKyAgICAgIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSIke0lGU30kUEFUSF9TRVBBUkFUT1IsIgorICAgICAgZm9yIHBrZyBpbiAkZW5hYmxldmFsOyBkbworCUlGUz0iJGx0X3NhdmVfaWZzIgorCWlmIHRlc3QgIlgkcGtnIiA9ICJYJHAiOyB0aGVuCisJICBlbmFibGVfc2hhcmVkPXllcworCWZpCisgICAgICBkb25lCisgICAgICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgICAgIDs7CisgICAgZXNhY10sCisgICAgW2VuYWJsZV9zaGFyZWQ9XV9MVF9FTkFCTEVfU0hBUkVEX0RFRkFVTFQpCisKKyAgICBfTFRfREVDTChbYnVpbGRfbGlidG9vbF9saWJzXSwgW2VuYWJsZV9zaGFyZWRdLCBbMF0sCisJW1doZXRoZXIgb3Igbm90IHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXNdKQorXSkjIF9MVF9FTkFCTEVfU0hBUkVECisKK0xUX09QVElPTl9ERUZJTkUoW0xUX0lOSVRdLCBbc2hhcmVkXSwgW19MVF9FTkFCTEVfU0hBUkVEKFt5ZXNdKV0pCitMVF9PUFRJT05fREVGSU5FKFtMVF9JTklUXSwgW2Rpc2FibGUtc2hhcmVkXSwgW19MVF9FTkFCTEVfU0hBUkVEKFtub10pXSkKKworIyBPbGQgbmFtZXM6CitBQ19ERUZVTihbQUNfRU5BQkxFX1NIQVJFRF0sCitbX0xUX1NFVF9PUFRJT04oW0xUX0lOSVRdLCBtNF9pZihbJDFdLCBbbm9dLCBbZGlzYWJsZS1dKVtzaGFyZWRdKQorXSkKKworQUNfREVGVU4oW0FDX0RJU0FCTEVfU0hBUkVEXSwKK1tfTFRfU0VUX09QVElPTihbTFRfSU5JVF0sIFtkaXNhYmxlLXNoYXJlZF0pCitdKQorCitBVV9ERUZVTihbQU1fRU5BQkxFX1NIQVJFRF0sIFtBQ19FTkFCTEVfU0hBUkVEKCRAKV0pCitBVV9ERUZVTihbQU1fRElTQUJMRV9TSEFSRURdLCBbQUNfRElTQUJMRV9TSEFSRUQoJEApXSkKKworZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtBTV9FTkFCTEVfU0hBUkVEXSwgW10pCitkbmwgQUNfREVGVU4oW0FNX0RJU0FCTEVfU0hBUkVEXSwgW10pCisKKworCisjIF9MVF9FTkFCTEVfU1RBVElDKFtERUZBVUxUXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBpbXBsZW1lbnQgdGhlIC0tZW5hYmxlLXN0YXRpYyBmbGFnLCBhbmQgc3VwcG9ydCB0aGUgYHN0YXRpYycgYW5kCisjIGBkaXNhYmxlLXN0YXRpYycgTFRfSU5JVCBvcHRpb25zLgorIyBERUZBVUxUIGlzIGVpdGhlciBgeWVzJyBvciBgbm8nLiAgSWYgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gYHllcycuCittNF9kZWZpbmUoW19MVF9FTkFCTEVfU1RBVElDXSwKK1ttNF9kZWZpbmUoW19MVF9FTkFCTEVfU1RBVElDX0RFRkFVTFRdLCBbbTRfaWYoJDEsIG5vLCBubywgeWVzKV0pZG5sCitBQ19BUkdfRU5BQkxFKFtzdGF0aWNdLAorICAgIFtBU19IRUxQX1NUUklORyhbLS1lbmFibGUtc3RhdGljQDw6QD1QS0dTQDo+QF0sCisJW2J1aWxkIHN0YXRpYyBsaWJyYXJpZXMgQDw6QGRlZmF1bHQ9XV9MVF9FTkFCTEVfU1RBVElDX0RFRkFVTFRbQDo+QF0pXSwKKyAgICBbcD0ke1BBQ0tBR0UtZGVmYXVsdH0KKyAgICBjYXNlICRlbmFibGV2YWwgaW4KKyAgICB5ZXMpIGVuYWJsZV9zdGF0aWM9eWVzIDs7CisgICAgbm8pIGVuYWJsZV9zdGF0aWM9bm8gOzsKKyAgICAqKQorICAgICBlbmFibGVfc3RhdGljPW5vCisgICAgICAjIExvb2sgYXQgdGhlIGFyZ3VtZW50IHdlIGdvdC4gIFdlIHVzZSBhbGwgdGhlIGNvbW1vbiBsaXN0IHNlcGFyYXRvcnMuCisgICAgICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0iJHtJRlN9JFBBVEhfU0VQQVJBVE9SLCIKKyAgICAgIGZvciBwa2cgaW4gJGVuYWJsZXZhbDsgZG8KKwlJRlM9IiRsdF9zYXZlX2lmcyIKKwlpZiB0ZXN0ICJYJHBrZyIgPSAiWCRwIjsgdGhlbgorCSAgZW5hYmxlX3N0YXRpYz15ZXMKKwlmaQorICAgICAgZG9uZQorICAgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgICAgICA7OworICAgIGVzYWNdLAorICAgIFtlbmFibGVfc3RhdGljPV1fTFRfRU5BQkxFX1NUQVRJQ19ERUZBVUxUKQorCisgICAgX0xUX0RFQ0woW2J1aWxkX29sZF9saWJzXSwgW2VuYWJsZV9zdGF0aWNdLCBbMF0sCisJW1doZXRoZXIgb3Igbm90IHRvIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXNdKQorXSkjIF9MVF9FTkFCTEVfU1RBVElDCisKK0xUX09QVElPTl9ERUZJTkUoW0xUX0lOSVRdLCBbc3RhdGljXSwgW19MVF9FTkFCTEVfU1RBVElDKFt5ZXNdKV0pCitMVF9PUFRJT05fREVGSU5FKFtMVF9JTklUXSwgW2Rpc2FibGUtc3RhdGljXSwgW19MVF9FTkFCTEVfU1RBVElDKFtub10pXSkKKworIyBPbGQgbmFtZXM6CitBQ19ERUZVTihbQUNfRU5BQkxFX1NUQVRJQ10sCitbX0xUX1NFVF9PUFRJT04oW0xUX0lOSVRdLCBtNF9pZihbJDFdLCBbbm9dLCBbZGlzYWJsZS1dKVtzdGF0aWNdKQorXSkKKworQUNfREVGVU4oW0FDX0RJU0FCTEVfU1RBVElDXSwKK1tfTFRfU0VUX09QVElPTihbTFRfSU5JVF0sIFtkaXNhYmxlLXN0YXRpY10pCitdKQorCitBVV9ERUZVTihbQU1fRU5BQkxFX1NUQVRJQ10sIFtBQ19FTkFCTEVfU1RBVElDKCRAKV0pCitBVV9ERUZVTihbQU1fRElTQUJMRV9TVEFUSUNdLCBbQUNfRElTQUJMRV9TVEFUSUMoJEApXSkKKworZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtBTV9FTkFCTEVfU1RBVElDXSwgW10pCitkbmwgQUNfREVGVU4oW0FNX0RJU0FCTEVfU1RBVElDXSwgW10pCisKKworCisjIF9MVF9FTkFCTEVfRkFTVF9JTlNUQUxMKFtERUZBVUxUXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBpbXBsZW1lbnQgdGhlIC0tZW5hYmxlLWZhc3QtaW5zdGFsbCBmbGFnLCBhbmQgc3VwcG9ydCB0aGUgYGZhc3QtaW5zdGFsbCcKKyMgYW5kIGBkaXNhYmxlLWZhc3QtaW5zdGFsbCcgTFRfSU5JVCBvcHRpb25zLgorIyBERUZBVUxUIGlzIGVpdGhlciBgeWVzJyBvciBgbm8nLiAgSWYgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gYHllcycuCittNF9kZWZpbmUoW19MVF9FTkFCTEVfRkFTVF9JTlNUQUxMXSwKK1ttNF9kZWZpbmUoW19MVF9FTkFCTEVfRkFTVF9JTlNUQUxMX0RFRkFVTFRdLCBbbTRfaWYoJDEsIG5vLCBubywgeWVzKV0pZG5sCitBQ19BUkdfRU5BQkxFKFtmYXN0LWluc3RhbGxdLAorICAgIFtBU19IRUxQX1NUUklORyhbLS1lbmFibGUtZmFzdC1pbnN0YWxsQDw6QD1QS0dTQDo+QF0sCisgICAgW29wdGltaXplIGZvciBmYXN0IGluc3RhbGxhdGlvbiBAPDpAZGVmYXVsdD1dX0xUX0VOQUJMRV9GQVNUX0lOU1RBTExfREVGQVVMVFtAOj5AXSldLAorICAgIFtwPSR7UEFDS0FHRS1kZWZhdWx0fQorICAgIGNhc2UgJGVuYWJsZXZhbCBpbgorICAgIHllcykgZW5hYmxlX2Zhc3RfaW5zdGFsbD15ZXMgOzsKKyAgICBubykgZW5hYmxlX2Zhc3RfaW5zdGFsbD1ubyA7OworICAgICopCisgICAgICBlbmFibGVfZmFzdF9pbnN0YWxsPW5vCisgICAgICAjIExvb2sgYXQgdGhlIGFyZ3VtZW50IHdlIGdvdC4gIFdlIHVzZSBhbGwgdGhlIGNvbW1vbiBsaXN0IHNlcGFyYXRvcnMuCisgICAgICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0iJHtJRlN9JFBBVEhfU0VQQVJBVE9SLCIKKyAgICAgIGZvciBwa2cgaW4gJGVuYWJsZXZhbDsgZG8KKwlJRlM9IiRsdF9zYXZlX2lmcyIKKwlpZiB0ZXN0ICJYJHBrZyIgPSAiWCRwIjsgdGhlbgorCSAgZW5hYmxlX2Zhc3RfaW5zdGFsbD15ZXMKKwlmaQorICAgICAgZG9uZQorICAgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgICAgICA7OworICAgIGVzYWNdLAorICAgIFtlbmFibGVfZmFzdF9pbnN0YWxsPV1fTFRfRU5BQkxFX0ZBU1RfSU5TVEFMTF9ERUZBVUxUKQorCitfTFRfREVDTChbZmFzdF9pbnN0YWxsXSwgW2VuYWJsZV9mYXN0X2luc3RhbGxdLCBbMF0sCisJIFtXaGV0aGVyIG9yIG5vdCB0byBvcHRpbWl6ZSBmb3IgZmFzdCBpbnN0YWxsYXRpb25dKWRubAorXSkjIF9MVF9FTkFCTEVfRkFTVF9JTlNUQUxMCisKK0xUX09QVElPTl9ERUZJTkUoW0xUX0lOSVRdLCBbZmFzdC1pbnN0YWxsXSwgW19MVF9FTkFCTEVfRkFTVF9JTlNUQUxMKFt5ZXNdKV0pCitMVF9PUFRJT05fREVGSU5FKFtMVF9JTklUXSwgW2Rpc2FibGUtZmFzdC1pbnN0YWxsXSwgW19MVF9FTkFCTEVfRkFTVF9JTlNUQUxMKFtub10pXSkKKworIyBPbGQgbmFtZXM6CitBVV9ERUZVTihbQUNfRU5BQkxFX0ZBU1RfSU5TVEFMTF0sCitbX0xUX1NFVF9PUFRJT04oW0xUX0lOSVRdLCBtNF9pZihbJDFdLCBbbm9dLCBbZGlzYWJsZS1dKVtmYXN0LWluc3RhbGxdKQorQUNfRElBR05PU0UoW29ic29sZXRlXSwKK1skMDogUmVtb3ZlIHRoaXMgd2FybmluZyBhbmQgdGhlIGNhbGwgdG8gX0xUX1NFVF9PUFRJT04gd2hlbiB5b3UgcHV0Cit0aGUgYGZhc3QtaW5zdGFsbCcgb3B0aW9uIGludG8gTFRfSU5JVCdzIGZpcnN0IHBhcmFtZXRlci5dKQorXSkKKworQVVfREVGVU4oW0FDX0RJU0FCTEVfRkFTVF9JTlNUQUxMXSwKK1tfTFRfU0VUX09QVElPTihbTFRfSU5JVF0sIFtkaXNhYmxlLWZhc3QtaW5zdGFsbF0pCitBQ19ESUFHTk9TRShbb2Jzb2xldGVdLAorWyQwOiBSZW1vdmUgdGhpcyB3YXJuaW5nIGFuZCB0aGUgY2FsbCB0byBfTFRfU0VUX09QVElPTiB3aGVuIHlvdSBwdXQKK3RoZSBgZGlzYWJsZS1mYXN0LWluc3RhbGwnIG9wdGlvbiBpbnRvIExUX0lOSVQncyBmaXJzdCBwYXJhbWV0ZXIuXSkKK10pCisKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbQUNfRU5BQkxFX0ZBU1RfSU5TVEFMTF0sIFtdKQorZG5sIEFDX0RFRlVOKFtBTV9ESVNBQkxFX0ZBU1RfSU5TVEFMTF0sIFtdKQorCisKKyMgX0xUX1dJVEhfUElDKFtNT0RFXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgaW1wbGVtZW50IHRoZSAtLXdpdGgtcGljIGZsYWcsIGFuZCBzdXBwb3J0IHRoZSBgcGljLW9ubHknIGFuZCBgbm8tcGljJworIyBMVF9JTklUIG9wdGlvbnMuCisjIE1PREUgaXMgZWl0aGVyIGB5ZXMnIG9yIGBubycuICBJZiBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byBgYm90aCcuCittNF9kZWZpbmUoW19MVF9XSVRIX1BJQ10sCitbQUNfQVJHX1dJVEgoW3BpY10sCisgICAgW0FTX0hFTFBfU1RSSU5HKFstLXdpdGgtcGljXSwKKwlbdHJ5IHRvIHVzZSBvbmx5IFBJQy9ub24tUElDIG9iamVjdHMgQDw6QGRlZmF1bHQ9dXNlIGJvdGhAOj5AXSldLAorICAgIFtwaWNfbW9kZT0iJHdpdGh2YWwiXSwKKyAgICBbcGljX21vZGU9ZGVmYXVsdF0pCisKK3Rlc3QgLXogIiRwaWNfbW9kZSIgJiYgcGljX21vZGU9bTRfZGVmYXVsdChbJDFdLCBbZGVmYXVsdF0pCisKK19MVF9ERUNMKFtdLCBbcGljX21vZGVdLCBbMF0sIFtXaGF0IHR5cGUgb2Ygb2JqZWN0cyB0byBidWlsZF0pZG5sCitdKSMgX0xUX1dJVEhfUElDCisKK0xUX09QVElPTl9ERUZJTkUoW0xUX0lOSVRdLCBbcGljLW9ubHldLCBbX0xUX1dJVEhfUElDKFt5ZXNdKV0pCitMVF9PUFRJT05fREVGSU5FKFtMVF9JTklUXSwgW25vLXBpY10sIFtfTFRfV0lUSF9QSUMoW25vXSldKQorCisjIE9sZCBuYW1lOgorQVVfREVGVU4oW0FDX0xJQlRPT0xfUElDTU9ERV0sCitbX0xUX1NFVF9PUFRJT04oW0xUX0lOSVRdLCBbcGljLW9ubHldKQorQUNfRElBR05PU0UoW29ic29sZXRlXSwKK1skMDogUmVtb3ZlIHRoaXMgd2FybmluZyBhbmQgdGhlIGNhbGwgdG8gX0xUX1NFVF9PUFRJT04gd2hlbiB5b3UKK3B1dCB0aGUgYHBpYy1vbmx5JyBvcHRpb24gaW50byBMVF9JTklUJ3MgZmlyc3QgcGFyYW1ldGVyLl0pCitdKQorCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0FDX0xJQlRPT0xfUElDTU9ERV0sIFtdKQorCisjIyAtLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgTFRETF9JTklUIE9wdGlvbnMgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tICMjCisKK200X2RlZmluZShbX0xURExfTU9ERV0sIFtdKQorTFRfT1BUSU9OX0RFRklORShbTFRETF9JTklUXSwgW25vbnJlY3Vyc2l2ZV0sCisJCSBbbTRfZGVmaW5lKFtfTFRETF9NT0RFXSwgW25vbnJlY3Vyc2l2ZV0pXSkKK0xUX09QVElPTl9ERUZJTkUoW0xURExfSU5JVF0sIFtyZWN1cnNpdmVdLAorCQkgW200X2RlZmluZShbX0xURExfTU9ERV0sIFtyZWN1cnNpdmVdKV0pCitMVF9PUFRJT05fREVGSU5FKFtMVERMX0lOSVRdLCBbc3VicHJvamVjdF0sCisJCSBbbTRfZGVmaW5lKFtfTFRETF9NT0RFXSwgW3N1YnByb2plY3RdKV0pCisKK200X2RlZmluZShbX0xURExfVFlQRV0sIFtdKQorTFRfT1BUSU9OX0RFRklORShbTFRETF9JTklUXSwgW2luc3RhbGxhYmxlXSwKKwkJIFttNF9kZWZpbmUoW19MVERMX1RZUEVdLCBbaW5zdGFsbGFibGVdKV0pCitMVF9PUFRJT05fREVGSU5FKFtMVERMX0lOSVRdLCBbY29udmVuaWVuY2VdLAorCQkgW200X2RlZmluZShbX0xURExfVFlQRV0sIFtjb252ZW5pZW5jZV0pXSkKZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L200L2x0c3VnYXIubTQgYi9vcHJvZmlsZS0wLjkuNy9tNC9sdHN1Z2FyLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwMDBhMDUKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9tNC9sdHN1Z2FyLm00CkBAIC0wLDAgKzEsMTIzIEBACisjIGx0c3VnYXIubTQgLS0gbGlidG9vbCBtNCBiYXNlIGxheWVyLiAgICAgICAgICAgICAgICAgICAgICAgICAtKi1BdXRvY29uZi0qLQorIworIyBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDcsIDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIFdyaXR0ZW4gYnkgR2FyeSBWLiBWYXVnaGFuLCAyMDA0CisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGdpdmVzCisjIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBzZXJpYWwgNiBsdHN1Z2FyLm00CisKKyMgVGhpcyBpcyB0byBoZWxwIGFjbG9jYWwgZmluZCB0aGVzZSBtYWNyb3MsIGFzIGl0IGNhbid0IHNlZSBtNF9kZWZpbmUuCitBQ19ERUZVTihbTFRTVUdBUl9WRVJTSU9OXSwgW200X2lmKFswLjFdKV0pCisKKworIyBsdF9qb2luKFNFUCwgQVJHMSwgW0FSRzIuLi5dKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBQcm9kdWNlIEFSRzFTRVBBUkcyLi4uU0VQQVJHbiwgb21pdHRpbmcgW10gYXJndW1lbnRzIGFuZCB0aGVpcgorIyBhc3NvY2lhdGVkIHNlcGFyYXRvci4KKyMgTmVlZGVkIHVudGlsIHdlIGNhbiByZWx5IG9uIG00X2pvaW4gZnJvbSBBdXRvY29uZiAyLjYyLCBzaW5jZSBhbGwgZWFybGllcgorIyB2ZXJzaW9ucyBpbiBtNHN1Z2FyIGhhZCBidWdzLgorbTRfZGVmaW5lKFtsdF9qb2luXSwKK1ttNF9pZihbJCNdLCBbMV0sIFtdLAorICAgICAgIFskI10sIFsyXSwgW1skMl1dLAorICAgICAgIFttNF9pZihbJDJdLCBbXSwgW10sIFtbJDJdX10pJDAoWyQxXSwgbTRfc2hpZnQobTRfc2hpZnQoJEApKSldKV0pCittNF9kZWZpbmUoW19sdF9qb2luXSwKK1ttNF9pZihbJCMkMl0sIFsyXSwgW10sCisgICAgICAgW200X2lmKFskMl0sIFtdLCBbXSwgW1skMSQyXV0pJDAoWyQxXSwgbTRfc2hpZnQobTRfc2hpZnQoJEApKSldKV0pCisKKworIyBsdF9jYXIoTElTVCkKKyMgbHRfY2RyKExJU1QpCisjIC0tLS0tLS0tLS0tLQorIyBNYW5pcHVsYXRlIG00IGxpc3RzLgorIyBUaGVzZSBtYWNyb3MgYXJlIG5lY2Vzc2FyeSBhcyBsb25nIGFzIHdpbGwgc3RpbGwgbmVlZCB0byBzdXBwb3J0CisjIEF1dG9jb25mLTIuNTkgd2hpY2ggcXVvdGVzIGRpZmZlcmVudGx5LgorbTRfZGVmaW5lKFtsdF9jYXJdLCBbWyQxXV0pCittNF9kZWZpbmUoW2x0X2Nkcl0sCitbbTRfaWYoWyQjXSwgMCwgW200X2ZhdGFsKFskMDogY2Fubm90IGJlIGNhbGxlZCB3aXRob3V0IGFyZ3VtZW50c10pXSwKKyAgICAgICBbJCNdLCAxLCBbXSwKKyAgICAgICBbbTRfZHF1b3RlKG00X3NoaWZ0KCRAKSldKV0pCittNF9kZWZpbmUoW2x0X3VucXVvdGVdLCAkMSkKKworCisjIGx0X2FwcGVuZChNQUNSTy1OQU1FLCBTVFJJTkcsIFtTRVBBUkFUT1JdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUmVkZWZpbmUgTUFDUk8tTkFNRSB0byBob2xkIGl0cyBmb3JtZXIgY29udGVudCBwbHVzIGBTRVBBUkFUT1InYFNUUklORycuCisjIE5vdGUgdGhhdCBuZWl0aGVyIFNFUEFSQVRPUiBub3IgU1RSSU5HIGFyZSBleHBhbmRlZDsgdGhleSBhcmUgYXBwZW5kZWQKKyMgdG8gTUFDUk8tTkFNRSBhcyBpcyAobGVhdmluZyB0aGUgZXhwYW5zaW9uIGZvciB3aGVuIE1BQ1JPLU5BTUUgaXMgaW52b2tlZCkuCisjIE5vIFNFUEFSQVRPUiBpcyBvdXRwdXQgaWYgTUFDUk8tTkFNRSB3YXMgcHJldmlvdXNseSB1bmRlZmluZWQgKGRpZmZlcmVudAorIyB0aGFuIGRlZmluZWQgYW5kIGVtcHR5KS4KKyMKKyMgVGhpcyBtYWNybyBpcyBuZWVkZWQgdW50aWwgd2UgY2FuIHJlbHkgb24gQXV0b2NvbmYgMi42Miwgc2luY2UgZWFybGllcgorIyB2ZXJzaW9ucyBvZiBtNHN1Z2FyIG1pc3Rha2VubHkgZXhwYW5kZWQgU0VQQVJBVE9SIGJ1dCBub3QgU1RSSU5HLgorbTRfZGVmaW5lKFtsdF9hcHBlbmRdLAorW200X2RlZmluZShbJDFdLAorCSAgIG00X2lmZGVmKFskMV0sIFttNF9kZWZuKFskMV0pWyQzXV0pWyQyXSldKQorCisKKworIyBsdF9jb21iaW5lKFNFUCwgUFJFRklYLUxJU1QsIElORklYLCBTVUZGSVgxLCBbU1VGRklYMi4uLl0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUHJvZHVjZSBhIFNFUCBkZWxpbWl0ZWQgbGlzdCBvZiBhbGwgcGFpcmVkIGNvbWJpbmF0aW9ucyBvZiBlbGVtZW50cyBvZgorIyBQUkVGSVgtTElTVCB3aXRoIFNVRkZJWDEgdGhyb3VnaCBTVUZGSVhuLiAgRWFjaCBlbGVtZW50IG9mIHRoZSBsaXN0CisjIGhhcyB0aGUgZm9ybSBQUkVGSVhtSU5GSVhTVUZGSVhuLgorIyBOZWVkZWQgdW50aWwgd2UgY2FuIHJlbHkgb24gbTRfY29tYmluZSBhZGRlZCBpbiBBdXRvY29uZiAyLjYyLgorbTRfZGVmaW5lKFtsdF9jb21iaW5lXSwKK1ttNF9pZihtNF9ldmFsKFskIyA+IDNdKSwgWzFdLAorICAgICAgIFttNF9wdXNoZGVmKFtfTHRfc2VwXSwgW200X2RlZmluZShbX0x0X3NlcF0sIG00X2RlZm4oW2x0X2Nhcl0pKV0pXV1kbmwKK1tbbTRfZm9yZWFjaChbX0x0X3ByZWZpeF0sIFskMl0sCisJICAgICBbbTRfZm9yZWFjaChbX0x0X3N1ZmZpeF0sCisJCV1tNF9kcXVvdGUobTRfZHF1b3RlKG00X3NoaWZ0KG00X3NoaWZ0KG00X3NoaWZ0KCRAKSkpKSlbLAorCVtfTHRfc2VwKFskMV0pW11tNF9kZWZuKFtfTHRfcHJlZml4XSlbJDNdbTRfZGVmbihbX0x0X3N1ZmZpeF0pXSldKV0pXSkKKworCisjIGx0X2lmX2FwcGVuZF91bmlxKE1BQ1JPLU5BTUUsIFZBUk5BTUUsIFtTRVBBUkFUT1JdLCBbVU5JUV0sIFtOT1QtVU5JUV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIElmZiBNQUNSTy1OQU1FIGRvZXMgbm90IHlldCBjb250YWluIFZBUk5BTUUsIHRoZW4gYXBwZW5kIGl0IChkZWxpbWl0ZWQKKyMgYnkgU0VQQVJBVE9SIGlmIHN1cHBsaWVkKSBhbmQgZXhwYW5kIFVOSVEsIGVsc2UgTk9ULVVOSVEuCittNF9kZWZpbmUoW2x0X2lmX2FwcGVuZF91bmlxXSwKK1ttNF9pZmRlZihbJDFdLAorCSAgW200X2lmKG00X2luZGV4KFskM11tNF9kZWZuKFskMV0pWyQzXSwgWyQzJDIkM10pLCBbLTFdLAorCQkgW2x0X2FwcGVuZChbJDFdLCBbJDJdLCBbJDNdKSQ0XSwKKwkJIFskNV0pXSwKKwkgIFtsdF9hcHBlbmQoWyQxXSwgWyQyXSwgWyQzXSkkNF0pXSkKKworCisjIGx0X2RpY3RfYWRkKERJQ1QsIEtFWSwgVkFMVUUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW2x0X2RpY3RfYWRkXSwKK1ttNF9kZWZpbmUoWyQxKCQyKV0sIFskM10pXSkKKworCisjIGx0X2RpY3RfYWRkX3N1YmtleShESUNULCBLRVksIFNVQktFWSwgVkFMVUUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW2x0X2RpY3RfYWRkX3N1YmtleV0sCitbbTRfZGVmaW5lKFskMSgkMjokMyldLCBbJDRdKV0pCisKKworIyBsdF9kaWN0X2ZldGNoKERJQ1QsIEtFWSwgW1NVQktFWV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbbHRfZGljdF9mZXRjaF0sCitbbTRfaWZ2YWwoWyQzXSwKKwltNF9pZmRlZihbJDEoJDI6JDMpXSwgW200X2RlZm4oWyQxKCQyOiQzKV0pXSksCisgICAgbTRfaWZkZWYoWyQxKCQyKV0sIFttNF9kZWZuKFskMSgkMildKV0pKV0pCisKKworIyBsdF9pZl9kaWN0X2ZldGNoKERJQ1QsIEtFWSwgW1NVQktFWV0sIFZBTFVFLCBJRi1UUlVFLCBbSUYtRkFMU0VdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtsdF9pZl9kaWN0X2ZldGNoXSwKK1ttNF9pZihsdF9kaWN0X2ZldGNoKFskMV0sIFskMl0sIFskM10pLCBbJDRdLAorCVskNV0sCisgICAgWyQ2XSldKQorCisKKyMgbHRfZGljdF9maWx0ZXIoRElDVCwgW1NVQktFWV0sIFZBTFVFLCBbU0VQQVJBVE9SXSwgS0VZLCBbLi4uXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbbHRfZGljdF9maWx0ZXJdLAorW200X2lmKFskNV0sIFtdLCBbXSwKKyAgW2x0X2pvaW4obTRfcXVvdGUobTRfZGVmYXVsdChbJDRdLCBbWywgXV0pKSwKKyAgICAgICAgICAgbHRfdW5xdW90ZShtNF9zcGxpdChtNF9ub3JtYWxpemUobTRfZm9yZWFjaChfTHRfa2V5LCBsdF9jYXIoW200X3NoaWZ0big0LCAkQCldKSwKKwkJICAgICAgW2x0X2lmX2RpY3RfZmV0Y2goWyQxXSwgX0x0X2tleSwgWyQyXSwgWyQzXSwgW19MdF9rZXkgXSldKSkpKSldKVtdZG5sCitdKQpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvbTQvbHR2ZXJzaW9uLm00IGIvb3Byb2ZpbGUtMC45LjcvbTQvbHR2ZXJzaW9uLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzYzUzMDkKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9tNC9sdHZlcnNpb24ubTQKQEAgLTAsMCArMSwyMyBAQAorIyBsdHZlcnNpb24ubTQgLS0gdmVyc2lvbiBudW1iZXJzCQkJLSotIEF1dG9jb25mIC0qLQorIworIyAgIENvcHlyaWdodCAoQykgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgICBXcml0dGVuIGJ5IFNjb3R0IEphbWVzIFJlbW5hbnQsIDIwMDQKKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gZ2l2ZXMKKyMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIEdlbmVyYXRlZCBmcm9tIGx0dmVyc2lvbi5pbi4KKworIyBzZXJpYWwgMzAxNyBsdHZlcnNpb24ubTQKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR05VIExpYnRvb2wKKworbTRfZGVmaW5lKFtMVF9QQUNLQUdFX1ZFUlNJT05dLCBbMi4yLjZiXSkKK200X2RlZmluZShbTFRfUEFDS0FHRV9SRVZJU0lPTl0sIFsxLjMwMTddKQorCitBQ19ERUZVTihbTFRWRVJTSU9OX1ZFUlNJT05dLAorW21hY3JvX3ZlcnNpb249JzIuMi42YicKK21hY3JvX3JldmlzaW9uPScxLjMwMTcnCitfTFRfREVDTCgsIG1hY3JvX3ZlcnNpb24sIDAsIFtXaGljaCByZWxlYXNlIG9mIGxpYnRvb2wubTQgd2FzIHVzZWQ/XSkKK19MVF9ERUNMKCwgbWFjcm9fcmV2aXNpb24sIDApCitdKQpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvbTQvbHR+b2Jzb2xldGUubTQgYi9vcHJvZmlsZS0wLjkuNy9tNC9sdH5vYnNvbGV0ZS5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzdiYjIwCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvbTQvbHR+b2Jzb2xldGUubTQKQEAgLTAsMCArMSw5MiBAQAorIyBsdH5vYnNvbGV0ZS5tNCAtLSBhY2xvY2FsIHNhdGlzZnlpbmcgb2Jzb2xldGUgZGVmaW5pdGlvbnMuICAgIC0qLUF1dG9jb25mLSotCisjCisjICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyAgIFdyaXR0ZW4gYnkgU2NvdHQgSmFtZXMgUmVtbmFudCwgMjAwNC4KKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gZ2l2ZXMKKyMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIHNlcmlhbCA0IGx0fm9ic29sZXRlLm00CisKKyMgVGhlc2UgZXhpc3QgZW50aXJlbHkgdG8gZm9vbCBhY2xvY2FsIHdoZW4gYm9vdHN0cmFwcGluZyBsaWJ0b29sLgorIworIyBJbiB0aGUgcGFzdCBsaWJ0b29sLm00IGhhcyBwcm92aWRlZCBtYWNyb3MgdmlhIEFDX0RFRlVOIChvciBBVV9ERUZVTikKKyMgd2hpY2ggaGF2ZSBsYXRlciBiZWVuIGNoYW5nZWQgdG8gbTRfZGVmaW5lIGFzIHRoZXkgYXJlbid0IHBhcnQgb2YgdGhlCisjIGV4cG9ydGVkIEFQSSwgb3IgbW92ZWQgdG8gQXV0b2NvbmYgb3IgQXV0b21ha2Ugd2hlcmUgdGhleSBiZWxvbmcuCisjCisjIFRoZSB0cm91YmxlIGlzLCBhY2xvY2FsIGlzIGEgYml0IHRoaWNrLiAgSXQnbGwgc2VlIHRoZSBvbGQgQUNfREVGVU4KKyMgaW4gL3Vzci9zaGFyZS9hY2xvY2FsL2xpYnRvb2wubTQgYW5kIHJlbWVtYmVyIGl0LCB0aGVuIHdoZW4gaXQgc2VlcyB1cworIyB1c2luZyBhIG1hY3JvIHdpdGggdGhlIHNhbWUgbmFtZSBpbiBvdXIgbG9jYWwgbTQvbGlidG9vbC5tNCBpdCdsbAorIyBwdWxsIHRoZSBvbGQgbGlidG9vbC5tNCBpbiAoaXQgZG9lc24ndCBzZWUgb3VyIHNoaW55IG5ldyBtNF9kZWZpbmUKKyMgYW5kIGRvZXNuJ3Qga25vdyBhYm91dCBBdXRvY29uZiBtYWNyb3MgYXQgYWxsLikKKyMKKyMgU28gd2UgcHJvdmlkZSB0aGlzIGZpbGUsIHdoaWNoIGhhcyBhIHNpbGx5IGZpbGVuYW1lIHNvIGl0J3MgYWx3YXlzCisjIGluY2x1ZGVkIGFmdGVyIGV2ZXJ5dGhpbmcgZWxzZS4gIFRoaXMgcHJvdmlkZXMgYWNsb2NhbCB3aXRoIHRoZQorIyBBQ19ERUZVTnMgaXQgd2FudHMsIGJ1dCB3aGVuIG00IHByb2Nlc3NlcyBpdCwgaXQgZG9lc24ndCBkbyBhbnl0aGluZworIyBiZWNhdXNlIHRob3NlIG1hY3JvcyBhbHJlYWR5IGV4aXN0LCBvciB3aWxsIGJlIG92ZXJ3cml0dGVuIGxhdGVyLgorIyBXZSB1c2UgQUNfREVGVU4gb3ZlciBBVV9ERUZVTiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIGFjbG9jYWwtMS42LiAKKyMKKyMgQW55dGltZSB3ZSB3aXRoZHJhdyBhbiBBQ19ERUZVTiBvciBBVV9ERUZVTiwgcmVtZW1iZXIgdG8gYWRkIGl0IGhlcmUuCisjIFllcywgdGhhdCBtZWFucyBldmVyeSBuYW1lIG9uY2UgdGFrZW4gd2lsbCBuZWVkIHRvIHJlbWFpbiBoZXJlIHVudGlsCisjIHdlIGdpdmUgdXAgY29tcGF0aWJpbGl0eSB3aXRoIHZlcnNpb25zIGJlZm9yZSAxLjcsIGF0IHdoaWNoIHBvaW50CisjIHdlIG5lZWQgdG8ga2VlcCBvbmx5IHRob3NlIG5hbWVzIHdoaWNoIHdlIHN0aWxsIHJlZmVyIHRvLgorCisjIFRoaXMgaXMgdG8gaGVscCBhY2xvY2FsIGZpbmQgdGhlc2UgbWFjcm9zLCBhcyBpdCBjYW4ndCBzZWUgbTRfZGVmaW5lLgorQUNfREVGVU4oW0xUT0JTT0xFVEVfVkVSU0lPTl0sIFttNF9pZihbMV0pXSkKKworbTRfaWZuZGVmKFtBQ19MSUJUT09MX0xJTktFUl9PUFRJT05dLAlbQUNfREVGVU4oW0FDX0xJQlRPT0xfTElOS0VSX09QVElPTl0pXSkKK200X2lmbmRlZihbQUNfUFJPR19FR1JFUF0sCQlbQUNfREVGVU4oW0FDX1BST0dfRUdSRVBdKV0pCittNF9pZm5kZWYoW19MVF9BQ19QUk9HX0VDSE9fQkFDS1NMQVNIXSwJW0FDX0RFRlVOKFtfTFRfQUNfUFJPR19FQ0hPX0JBQ0tTTEFTSF0pXSkKK200X2lmbmRlZihbX0xUX0FDX1NIRUxMX0lOSVRdLAkJW0FDX0RFRlVOKFtfTFRfQUNfU0hFTExfSU5JVF0pXSkKK200X2lmbmRlZihbX0xUX0FDX1NZU19MSUJQQVRIX0FJWF0sCVtBQ19ERUZVTihbX0xUX0FDX1NZU19MSUJQQVRIX0FJWF0pXSkKK200X2lmbmRlZihbX0xUX1BST0dfTFRNQUlOXSwJCVtBQ19ERUZVTihbX0xUX1BST0dfTFRNQUlOXSldKQorbTRfaWZuZGVmKFtfTFRfQUNfVEFHVkFSXSwJCVtBQ19ERUZVTihbX0xUX0FDX1RBR1ZBUl0pXSkKK200X2lmbmRlZihbQUNfTFRETF9FTkFCTEVfSU5TVEFMTF0sCVtBQ19ERUZVTihbQUNfTFRETF9FTkFCTEVfSU5TVEFMTF0pXSkKK200X2lmbmRlZihbQUNfTFRETF9QUkVPUEVOXSwJCVtBQ19ERUZVTihbQUNfTFRETF9QUkVPUEVOXSldKQorbTRfaWZuZGVmKFtfTFRfQUNfU1lTX0NPTVBJTEVSXSwJW0FDX0RFRlVOKFtfTFRfQUNfU1lTX0NPTVBJTEVSXSldKQorbTRfaWZuZGVmKFtfTFRfQUNfTE9DS10sCQlbQUNfREVGVU4oW19MVF9BQ19MT0NLXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX1NZU19PTERfQVJDSElWRV0sCVtBQ19ERUZVTihbQUNfTElCVE9PTF9TWVNfT0xEX0FSQ0hJVkVdKV0pCittNF9pZm5kZWYoW19MVF9BQ19UUllfRExPUEVOX1NFTEZdLAlbQUNfREVGVU4oW19MVF9BQ19UUllfRExPUEVOX1NFTEZdKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfUFJPR19DQ19DX09dLAlbQUNfREVGVU4oW0FDX0xJQlRPT0xfUFJPR19DQ19DX09dKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfU1lTX0hBUkRfTElOS19MT0NLU10sIFtBQ19ERUZVTihbQUNfTElCVE9PTF9TWVNfSEFSRF9MSU5LX0xPQ0tTXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX09CSkRJUl0sCQlbQUNfREVGVU4oW0FDX0xJQlRPT0xfT0JKRElSXSldKQorbTRfaWZuZGVmKFtBQ19MVERMX09CSkRJUl0sCQlbQUNfREVGVU4oW0FDX0xURExfT0JKRElSXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX1BST0dfTERfSEFSRENPREVfTElCUEFUSF0sIFtBQ19ERUZVTihbQUNfTElCVE9PTF9QUk9HX0xEX0hBUkRDT0RFX0xJQlBBVEhdKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfU1lTX0xJQl9TVFJJUF0sCVtBQ19ERUZVTihbQUNfTElCVE9PTF9TWVNfTElCX1NUUklQXSldKQorbTRfaWZuZGVmKFtBQ19QQVRIX01BR0lDXSwJCVtBQ19ERUZVTihbQUNfUEFUSF9NQUdJQ10pXSkKK200X2lmbmRlZihbQUNfUFJPR19MRF9HTlVdLAkJW0FDX0RFRlVOKFtBQ19QUk9HX0xEX0dOVV0pXSkKK200X2lmbmRlZihbQUNfUFJPR19MRF9SRUxPQURfRkxBR10sCVtBQ19ERUZVTihbQUNfUFJPR19MRF9SRUxPQURfRkxBR10pXSkKK200X2lmbmRlZihbQUNfREVQTElCU19DSEVDS19NRVRIT0RdLAlbQUNfREVGVU4oW0FDX0RFUExJQlNfQ0hFQ0tfTUVUSE9EXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX1BST0dfQ09NUElMRVJfTk9fUlRUSV0sIFtBQ19ERUZVTihbQUNfTElCVE9PTF9QUk9HX0NPTVBJTEVSX05PX1JUVEldKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfU1lTX0dMT0JBTF9TWU1CT0xfUElQRV0sIFtBQ19ERUZVTihbQUNfTElCVE9PTF9TWVNfR0xPQkFMX1NZTUJPTF9QSVBFXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX1BST0dfQ09NUElMRVJfUElDXSwgW0FDX0RFRlVOKFtBQ19MSUJUT09MX1BST0dfQ09NUElMRVJfUElDXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX1BST0dfTERfU0hMSUJTXSwJW0FDX0RFRlVOKFtBQ19MSUJUT09MX1BST0dfTERfU0hMSUJTXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX1BPU1RERVBfUFJFREVQXSwJW0FDX0RFRlVOKFtBQ19MSUJUT09MX1BPU1RERVBfUFJFREVQXSldKQorbTRfaWZuZGVmKFtMVF9BQ19QUk9HX0VHUkVQXSwJCVtBQ19ERUZVTihbTFRfQUNfUFJPR19FR1JFUF0pXSkKK200X2lmbmRlZihbTFRfQUNfUFJPR19TRURdLAkJW0FDX0RFRlVOKFtMVF9BQ19QUk9HX1NFRF0pXSkKK200X2lmbmRlZihbX0xUX0NDX0JBU0VOQU1FXSwJCVtBQ19ERUZVTihbX0xUX0NDX0JBU0VOQU1FXSldKQorbTRfaWZuZGVmKFtfTFRfQ09NUElMRVJfQk9JTEVSUExBVEVdLAlbQUNfREVGVU4oW19MVF9DT01QSUxFUl9CT0lMRVJQTEFURV0pXSkKK200X2lmbmRlZihbX0xUX0xJTktFUl9CT0lMRVJQTEFURV0sCVtBQ19ERUZVTihbX0xUX0xJTktFUl9CT0lMRVJQTEFURV0pXSkKK200X2lmbmRlZihbX0FDX1BST0dfTElCVE9PTF0sCQlbQUNfREVGVU4oW19BQ19QUk9HX0xJQlRPT0xdKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfU0VUVVBdLAkJW0FDX0RFRlVOKFtBQ19MSUJUT09MX1NFVFVQXSldKQorbTRfaWZuZGVmKFtfTFRfQUNfQ0hFQ0tfRExGQ05dLAkJW0FDX0RFRlVOKFtfTFRfQUNfQ0hFQ0tfRExGQ05dKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfU1lTX0RZTkFNSUNfTElOS0VSXSwJW0FDX0RFRlVOKFtBQ19MSUJUT09MX1NZU19EWU5BTUlDX0xJTktFUl0pXSkKK200X2lmbmRlZihbX0xUX0FDX1RBR0NPTkZJR10sCQlbQUNfREVGVU4oW19MVF9BQ19UQUdDT05GSUddKV0pCittNF9pZm5kZWYoW0FDX0RJU0FCTEVfRkFTVF9JTlNUQUxMXSwJW0FDX0RFRlVOKFtBQ19ESVNBQkxFX0ZBU1RfSU5TVEFMTF0pXSkKK200X2lmbmRlZihbX0xUX0FDX0xBTkdfQ1hYXSwJCVtBQ19ERUZVTihbX0xUX0FDX0xBTkdfQ1hYXSldKQorbTRfaWZuZGVmKFtfTFRfQUNfTEFOR19GNzddLAkJW0FDX0RFRlVOKFtfTFRfQUNfTEFOR19GNzddKV0pCittNF9pZm5kZWYoW19MVF9BQ19MQU5HX0dDSl0sCQlbQUNfREVGVU4oW19MVF9BQ19MQU5HX0dDSl0pXSkKK200X2lmbmRlZihbQUNfTElCVE9PTF9SQ10sCQlbQUNfREVGVU4oW0FDX0xJQlRPT0xfUkNdKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfTEFOR19DX0NPTkZJR10sCVtBQ19ERUZVTihbQUNfTElCVE9PTF9MQU5HX0NfQ09ORklHXSldKQorbTRfaWZuZGVmKFtfTFRfQUNfTEFOR19DX0NPTkZJR10sCVtBQ19ERUZVTihbX0xUX0FDX0xBTkdfQ19DT05GSUddKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfTEFOR19DWFhfQ09ORklHXSwJW0FDX0RFRlVOKFtBQ19MSUJUT09MX0xBTkdfQ1hYX0NPTkZJR10pXSkKK200X2lmbmRlZihbX0xUX0FDX0xBTkdfQ1hYX0NPTkZJR10sCVtBQ19ERUZVTihbX0xUX0FDX0xBTkdfQ1hYX0NPTkZJR10pXSkKK200X2lmbmRlZihbQUNfTElCVE9PTF9MQU5HX0Y3N19DT05GSUddLAlbQUNfREVGVU4oW0FDX0xJQlRPT0xfTEFOR19GNzdfQ09ORklHXSldKQorbTRfaWZuZGVmKFtfTFRfQUNfTEFOR19GNzdfQ09ORklHXSwJW0FDX0RFRlVOKFtfTFRfQUNfTEFOR19GNzdfQ09ORklHXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX0xBTkdfR0NKX0NPTkZJR10sCVtBQ19ERUZVTihbQUNfTElCVE9PTF9MQU5HX0dDSl9DT05GSUddKV0pCittNF9pZm5kZWYoW19MVF9BQ19MQU5HX0dDSl9DT05GSUddLAlbQUNfREVGVU4oW19MVF9BQ19MQU5HX0dDSl9DT05GSUddKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfTEFOR19SQ19DT05GSUddLAlbQUNfREVGVU4oW0FDX0xJQlRPT0xfTEFOR19SQ19DT05GSUddKV0pCittNF9pZm5kZWYoW19MVF9BQ19MQU5HX1JDX0NPTkZJR10sCVtBQ19ERUZVTihbX0xUX0FDX0xBTkdfUkNfQ09ORklHXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX0NPTkZJR10sCQlbQUNfREVGVU4oW0FDX0xJQlRPT0xfQ09ORklHXSldKQorbTRfaWZuZGVmKFtfTFRfQUNfRklMRV9MVERMTF9DXSwJW0FDX0RFRlVOKFtfTFRfQUNfRklMRV9MVERMTF9DXSldKQpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvbTQvbWFsbG9jYXR0cmlidXRlLm00IGIvb3Byb2ZpbGUtMC45LjcvbTQvbWFsbG9jYXR0cmlidXRlLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiZmUzYTgKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9tNC9tYWxsb2NhdHRyaWJ1dGUubTQKQEAgLTAsMCArMSwxMiBAQAorZG5sIEFYX01BTExPQ19BVFRSSUJVVEUgLSBzZWUgaWYgZ2NjIHdpbGwgdGFrZSBfX2F0dHJpYnV0ZV9fKChtYWxsb2MpKQorQUNfREVGVU4oW0FYX01BTExPQ19BVFRSSUJVVEVdLAorWworQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIG1hbGxvYyBhdHRyaWJ1dGUgaXMgdW5kZXJzdG9vZF0pCitTQVZFX0NGTEFHUz0kQ0ZMQUdTCitDRkxBR1M9Ii1XZXJyb3IgJENGTEFHUyIKK0FDX1RSWV9DT01QSUxFKCxbCit2b2lkIG1vbmtleSgpIF9fYXR0cmlidXRlX18oKG1hbGxvYykpOworXSxBQ19NU0dfUkVTVUxUKFt5ZXNdKTsgQUNfREVGSU5FKE1BTExPQ19BVFRSSUJVVEVfT0ssIDEsIFt3aGV0aGVyIG1hbGxvYyBhdHRyaWJ1dGUgaXMgdW5kZXJzdG9vZF0pLCBBQ19NU0dfUkVTVUxUKFtub10pKQorQ0ZMQUdTPSRTQVZFX0NGTEFHUyAKK10KKykKZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L200L3BvcHRjb25zdC5tNCBiL29wcm9maWxlLTAuOS43L200L3BvcHRjb25zdC5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODg4ZTc4Ci0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvbTQvcG9wdGNvbnN0Lm00CkBAIC0wLDAgKzEsMTYgQEAKK2RubCBBWF9QT1BUX0NPTlNUIC0gY2hlY2sgcG9wdCBwcm90b3R5cGUKK0FDX0RFRlVOKFtBWF9QT1BUX0NPTlNUXSwKK1sKK0FDX01TR19DSEVDS0lORyhbcG9wdCBwcm90b3R5cGVdKQorU0FWRV9DWFhGTEFHUz0kQ1hYRkxBR1MKK0NYWEZMQUdTPSItV2Vycm9yICRDWFhGTEFHUyIKK0FDX1RSWV9DT01QSUxFKFsjaW5jbHVkZSA8cG9wdC5oPl0sCitbCitpbnQgYzsgY2hhciAqKnY7Citwb3B0R2V0Q29udGV4dCgwLCBjLCB2LCAwLCAwKTsKK10sCitBQ19NU0dfUkVTVUxUKFt0YWtlcyBjaGFyICoqXSk7LAorQUNfTVNHX1JFU1VMVChbdGFrZXMgY29uc3QgY2hhciAqKl0pOyBBQ19ERUZJTkUoQ09OU1RfUE9QVCwgMSwgW3doZXRoZXIgcG9wdCBwcm90b3R5cGUgdGFrZXMgYSBjb25zdCBjaGFyICoqXSkpCitDWFhGTEFHUz0iJFNBVkVfQ1hYRkxBR1MiCitdCispCmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9tNC9wcmVjb21waWxlZGhlYWRlci5tNCBiL29wcm9maWxlLTAuOS43L200L3ByZWNvbXBpbGVkaGVhZGVyLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxOWFhY2YKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9tNC9wcmVjb21waWxlZGhlYWRlci5tNApAQCAtMCwwICsxLDE1IEBACitkbmwgQVhfQ1hYRkxBR1NfT1BUSU9OUyh2YXItbmFtZSwgb3B0aW9uKQorZG5sIGFkZCBvcHRpb24gdG8gdmFyLW5hbWUgaWYgJENYWCBzdXBwb3J0IGl0LgorQUNfREVGVU4oW0FYX0NIRUNLX1BSRUNPTVBJTEVEX0hFQURFUl0sIFsKK0FDX01TR19DSEVDS0lORyhbd2hldGhlciAke0NYWH0gc3VwcG9ydCBwcmVjb21waWxlZCBoZWFkZXJdKQorQUNfTEFOR19TQVZFCitBQ19MQU5HX0NQTFVTUExVUworU0FWRV9DWFhGTEFHUz0kQ1hYRkxBR1MKK2RubCB3ZSBjb25zaWRlciB0aGFuIGlmIC1XaW52YWxpZC1wY2ggaXMgYWNjZXB0ZWQgcGNoIHdpbGwgd29ya3MgLi4uCitDWFhGTEFHUz0tV2ludmFsaWQtcGNoCitkbmwgYnV0IHdlIGRvbid0IHdhbnQgLVdpbnZhbGlkLXBjaCBlbHNlIGNvbXBpbGF0aW9uIHdpbGwgZmFpbCBkdWUgLVdlcnJvciBhbmQKK2RubCB0aGUgZmFjdCB0aGFuIHNvbWUgcGNoIHdpbGwgYmUgaW52YWxpZCBmb3IgdGhlIGdpdmVuIGNvbXBpbGF0aW9uIG9wdGlvbgorQUNfVFJZX0NPTVBJTEUoLFs7XSxBQ19NU0dfUkVTVUxUKFt5ZXNdKTsgJDE9IiR7JDF9IC1pbmNsdWRlIGJpdHMvc3RkYysrLmgiLCBBQ19NU0dfUkVTVUxUKFtub10pKQorQ1hYRkxBR1M9JFNBVkVfQ1hYRkxBR1MKK0FDX0xBTkdfUkVTVE9SRQorXSkKZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L200L3F0Lm00IGIvb3Byb2ZpbGUtMC45LjcvbTQvcXQubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDhmZDZlMgotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L200L3F0Lm00CkBAIC0wLDAgKzEsMjI1IEBACitkbmwgZmluZCBhIGJpbmFyeSBpbiB0aGUgcGF0aAorQUNfREVGVU4oW1FUX0ZJTkRfUEFUSF0sCitbCisJQUNfTVNHX0NIRUNLSU5HKFtmb3IgJDFdKQorCUFDX0NBQ0hFX1ZBTChxdF9jdl9wYXRoXyQxLAorCVsKKwkJcXRfY3ZfcGF0aF8kMT0iTk9ORSIKKwkJaWYgdGVzdCAtbiAiJCQyIjsgdGhlbgorCQkJcXRfY3ZfcGF0aF8kMT0iJCQyIjsKKwkJZWxzZQorCQkJZGlycz0iJDMiCisJCQlxdF9zYXZlX0lGUz0kSUZTCisJCQlJRlM9JzonCisJCQlmb3IgZGlyIGluICRQQVRIOyBkbworCQkJCWRpcnM9IiRkaXJzICRkaXIiCisJCQlkb25lCisJCQlJRlM9JHF0X3NhdmVfSUZTCisgCisJCQlmb3IgZGlyIGluICRkaXJzOyBkbworCQkJCWlmIHRlc3QgLXggIiRkaXIvJDEiOyB0aGVuCisJCQkJCWlmIHRlc3QgLW4gIiQ1IjsgdGhlbgorCQkJCQkJZXZhbHN0cj0iJGRpci8kMSAkNSAyPiYxICIKKwkJCQkJCWlmIGV2YWwgJGV2YWxzdHI7IHRoZW4KKwkJCQkJCQlxdF9jdl9wYXRoXyQxPSIkZGlyLyQxIgorCQkJCQkJCWJyZWFrCisJCQkJCQlmaQorCQkJCQllbHNlCisJCQkJCQlxdF9jdl9wYXRoXyQxPSIkZGlyLyQxIgorCQkJCQkJYnJlYWsKKwkJCQkJZmkKKwkJCQlmaQorCQkJZG9uZQorCQlmaQorCV0pCisgCisJaWYgdGVzdCAteiAiJHF0X2N2X3BhdGhfJDEiIHx8IHRlc3QgIiRxdF9jdl9wYXRoXyQxIiA9ICJOT05FIjsgdGhlbgorCQlBQ19NU0dfUkVTVUxUKG5vdCBmb3VuZCkKKwkJJDQKKwllbHNlCisJCUFDX01TR19SRVNVTFQoJHF0X2N2X3BhdGhfJDEpCisJCSQyPSRxdF9jdl9wYXRoXyQxCisJZmkKK10pCisKK2RubCBGaW5kIHRoZSB1aWMgY29tcGlsZXIgb24gdGhlIHBhdGggb3IgaW4gcXRfY3ZfZGlyCitBQ19ERUZVTihbUVRfRklORF9VSUNdLAorWworCVFUX0ZJTkRfUEFUSCh1aWMsIGFjX3VpYywgJHF0X2N2X2Rpci9iaW4pCisJaWYgdGVzdCAteiAiJGFjX3VpYyIgLWEgIiRGQVRBTCIgPSAxOyB0aGVuCisJCUFDX01TR19FUlJPUihbdWljIGJpbmFyeSBub3QgZm91bmQgaW4gXCRQQVRIIG9yICRxdF9jdl9kaXIvYmluICFdKQorCWZpCitdKQorIAorZG5sIEZpbmQgdGhlIHJpZ2h0IG1vYyBpbiBwYXRoL3F0X2N2X2RpcgorQUNfREVGVU4oW1FUX0ZJTkRfTU9DXSwKK1sKKwlRVF9GSU5EX1BBVEgobW9jMiwgYWNfbW9jMiwgJHF0X2N2X2Rpci9iaW4pCisJUVRfRklORF9QQVRIKG1vYywgYWNfbW9jMSwgJHF0X2N2X2Rpci9iaW4pCisKKwlpZiB0ZXN0IC1uICIkYWNfbW9jMSIgLWEgLW4gIiRhY19tb2MyIjsgdGhlbgorCQlkbmwgZm91bmQgYm90aC4gUHJlZmVyIFF0MydzIGlmIGl0IGV4aXN0cyBlbHNlIG1vYzIKKwkJJGFjX21vYzEgLXYgMj4mMSB8IGdyZXAgIlF0IDMiID4vZGV2L251bGwKKwkJaWYgdGVzdCAiJD8iID0gMDsgdGhlbgorCQkJYWNfbW9jPSRhY19tb2MxOworCQllbHNlCisJCQlhY19tb2M9JGFjX21vYzI7CisJCWZpCisJZWxzZQorCQlpZiB0ZXN0IC1uICIkYWNfbW9jMSI7IHRoZW4KKwkJCWFjX21vYz0kYWNfbW9jMTsKKwkJZWxzZQorCQkJYWNfbW9jPSRhY19tb2MyOworCQlmaQorCWZpCisKKwlpZiB0ZXN0IC16ICIkYWNfbW9jIiAgLWEgIiRGQVRBTCIgPSAxOyB0aGVuCisJCUFDX01TR19FUlJPUihbbW9jIGJpbmFyeSBub3QgZm91bmQgaW4gXCRQQVRIIG9yICRxdF9jdl9kaXIvYmluICFdKQorCWZpCitdKQorCitkbmwgY2hlY2sgYSBwYXJ0aWN1bGFyIGxpYm5hbWUKK0FDX0RFRlVOKFtRVF9UUllfTElOS10sCitbCisJU0FWRV9MSUJTPSIkTElCUyIKKwlMSUJTPSIkTElCUyAkMSIKKwlBQ19UUllfTElOSyhbCisJI2luY2x1ZGUgPHFnbG9iYWwuaD4KKwkjaW5jbHVkZSA8cXN0cmluZy5oPgorCQldLAorCVsKKwlRU3RyaW5nIHMoIm1hbmdsZV9mYWlsdXJlIik7CisJI2lmIChRVF9WRVJTSU9OIDwgMjIxKQorCWJyZWFrX21lXyhcXFwpOworCSNlbmRpZgorCV0sCisJcXRfY3ZfbGlibmFtZT0kMSwKKwkpCisJTElCUz0iJFNBVkVfTElCUyIKK10pCisgCitkbmwgY2hlY2sgd2UgY2FuIGRvIGEgY29tcGlsZQorQUNfREVGVU4oW1FUX0NIRUNLX0NPTVBJTEVdLAorWworCUFDX01TR19DSEVDS0lORyhbJDEgZm9yIFF0IGxpYnJhcnkgbmFtZV0pCisgCisJQUNfQ0FDSEVfVkFMKHF0X2N2X2xpYm5hbWUsCisJWworCQlBQ19MQU5HX0NQTFVTUExVUworCQlTQVZFX0NYWEZMQUdTPSRDWFhGTEFHUworCQlDWFhGTEFHUz0iJENYWEZMQUdTICRRVF9JTkNMVURFUyAkUVRfTERGTEFHUyIgCisKKwkJZm9yIGxpYm5hbWUgaW4gLWxxdC1tdCAtbHF0MyAtbHF0MiAtbHF0OworCQlkbworCQkJUVRfVFJZX0xJTksoJGxpYm5hbWUpCisJCQlpZiB0ZXN0IC1uICIkcXRfY3ZfbGlibmFtZSI7IHRoZW4KKwkJCQlicmVhazsKKwkJCWZpCisJCWRvbmUKKworCQlDWFhGTEFHUz0kU0FWRV9DWFhGTEFHUworCV0pCisKKwlpZiB0ZXN0IC16ICIkcXRfY3ZfbGlibmFtZSI7IHRoZW4KKwkJQUNfTVNHX1JFU1VMVChbZmFpbGVkXSkgCisJCWlmIHRlc3QgIiRGQVRBTCIgPSAxIDsgdGhlbgorCQkJQUNfTVNHX0VSUk9SKFtDYW5ub3QgY29tcGlsZSBhIHNpbXBsZSBRdCBleGVjdXRhYmxlLiBDaGVjayB5b3UgaGF2ZSB0aGUgcmlnaHQgXCRRVERJUiAhXSkKKwkJZmkKKwllbHNlCisJCUFDX01TR19SRVNVTFQoWyRxdF9jdl9saWJuYW1lXSkKKwlmaQorXSkKKworZG5sIGdldCBRdCB2ZXJzaW9uIHdlJ3JlIHVzaW5nCitBQ19ERUZVTihbUVRfR0VUX1ZFUlNJT05dLAorWworCUFDX0NBQ0hFX0NIRUNLKFtRdCB2ZXJzaW9uXSxseXhfY3ZfcXR2ZXJzaW9uLAorCVsKKwkJQUNfTEFOR19DUExVU1BMVVMKKwkJU0FWRV9DUFBGTEFHUz0kQ1BQRkxBR1MKKwkJQ1BQRkxBR1M9IiRDUFBGTEFHUyAkUVRfSU5DTFVERVMiCisKKwkJY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgX19vbGluZV9fICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyNpbmNsdWRlIDxxZ2xvYmFsLmg+CisiJSUlIlFUX1ZFUlNJT05fU1RSIiUlJSIKK0VPRgorCQlseXhfY3ZfcXR2ZXJzaW9uPWAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8IFwKKwkJCWdyZXAgJ14iJSUlIicgIDI+L2Rldi9udWxsIHwgXAorCQkJc2VkIC1lICdzLyIlJSUiLy9nJyAtZSAncy8iLy9nJ2AKKwkJcm0gLWYgY29uZnRlc3QuJGFjX2V4dAorCQlDUFBGTEFHUz0kU0FWRV9DUFBGTEFHUworCV0pCisgCisJUVRfVkVSU0lPTj0kbHl4X2N2X3F0dmVyc2lvbgorCUFDX1NVQlNUKFFUX1ZFUlNJT04pCitdKQorIAorZG5sIHN0YXJ0IGhlcmUgCitBQ19ERUZVTihbUVRfRE9fSVRfQUxMXSwKK1sKKwlkbmwgUGxlYXNlIGxlYXZlIHRoaXMgYWxvbmUuIEkgdXNlIHRoaXMgZmlsZSBpbgorCWRubCBvcHJvZmlsZS4KKwlGQVRBTD0wCisKKwlBQ19BUkdfV0lUSChxdC1kaXIsIFsgIC0td2l0aC1xdC1kaXIgICAgICAgICAgIHdoZXJlIHRoZSByb290IG9mIFF0IGlzIGluc3RhbGxlZCBdLAorCQlbIHF0X2N2X2Rpcj1gZXZhbCBlY2hvICIkd2l0aHZhbCIvYCBdKQorCSAKKwlBQ19BUkdfV0lUSChxdC1pbmNsdWRlcywgWyAgLS13aXRoLXF0LWluY2x1ZGVzICAgICAgd2hlcmUgdGhlIFF0IGluY2x1ZGVzIGFyZS4gXSwKKwkJWyBxdF9jdl9pbmNsdWRlcz1gZXZhbCBlY2hvICIkd2l0aHZhbCJgIF0pCisgCisJQUNfQVJHX1dJVEgocXQtbGlicmFyaWVzLCBbICAtLXdpdGgtcXQtbGlicmFyaWVzICAgICB3aGVyZSB0aGUgUXQgbGlicmFyeSBpcyBpbnN0YWxsZWQuXSwKKwkJWyAgcXRfY3ZfbGlicmFyaWVzPWBldmFsIGVjaG8gIiR3aXRodmFsImAgXSkKKworCWRubCBwYXkgYXR0ZW50aW9uIHRvICRRVERJUiB1bmxlc3Mgb3ZlcnJpZGRlbgorCWlmIHRlc3QgLXogIiRxdF9jdl9kaXIiOyB0aGVuCisJCXF0X2N2X2Rpcj0kUVRESVIKKwlmaQorIAorCWRubCBkZXJpdmUgaW5jL2xpYiBpZiBuZWVkZWQKKwlpZiB0ZXN0IC1uICIkcXRfY3ZfZGlyIjsgdGhlbgorCQlpZiB0ZXN0IC16ICIkcXRfY3ZfaW5jbHVkZXMiOyB0aGVuCisJCQlxdF9jdl9pbmNsdWRlcz0kcXRfY3ZfZGlyL2luY2x1ZGUKKwkJZmkKKwkJaWYgdGVzdCAteiAiJHF0X2N2X2xpYnJhcmllcyI7IHRoZW4KKwkJCXF0X2N2X2xpYnJhcmllcz0kcXRfY3ZfZGlyL2xpYgorCQlmaQorCWZpCisKKwlkbmwgZmxhZ3MgZm9yIGNvbXBpbGF0aW9uCisJUVRfSU5DTFVERVM9CisJUVRfTERGTEFHUz0KKwlpZiB0ZXN0IC1uICIkcXRfY3ZfaW5jbHVkZXMiOyB0aGVuCisJCVFUX0lOQ0xVREVTPSItaXN5c3RlbSAkcXRfY3ZfaW5jbHVkZXMiCisJZmkKKwlpZiB0ZXN0IC1uICIkcXRfY3ZfbGlicmFyaWVzIjsgdGhlbgorCQlRVF9MREZMQUdTPSItTCRxdF9jdl9saWJyYXJpZXMiCisJZmkKKwlBQ19TVUJTVChRVF9JTkNMVURFUykKKwlBQ19TVUJTVChRVF9MREZMQUdTKQorIAorCVFUX0ZJTkRfTU9DCisJTU9DPSRhY19tb2MKKwlBQ19TVUJTVChNT0MpCisJUVRfRklORF9VSUMKKwlVSUM9JGFjX3VpYworCUFDX1NVQlNUKFVJQykKKworCVFUX0NIRUNLX0NPTVBJTEUoaW4gbGliKQorCWlmIHRlc3QgLXogIiRxdF9jdl9saWJuYW1lIjsgdGhlbgorCQlpZiB0ZXN0IC1uICIkcXRfY3ZfZGlyIjsgdGhlbgorCQlkbmwgVHJ5IGFnYWluIHVzaW5nIGxpYjY0IHZzIGxpYgorCQkJcXRfY3ZfbGlicmFyaWVzPSRxdF9jdl9kaXIvbGliNjQKKwkJCVFUX0xERkxBR1M9Ii1MJHF0X2N2X2xpYnJhcmllcyIKKwkJCVFUX0NIRUNLX0NPTVBJTEUoaW4gbGliNjQpCisJCWZpCisJZmkKKworCVFUX0xJQj0kcXRfY3ZfbGlibmFtZTsKKwlBQ19TVUJTVChRVF9MSUIpCisKKwlpZiB0ZXN0IC1uICIkcXRfY3ZfbGlibmFtZSI7IHRoZW4KKwkJUVRfR0VUX1ZFUlNJT04KKwlmaQorXSkKZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L200L3Jlc3VsdHluLm00IGIvb3Byb2ZpbGUtMC45LjcvbTQvcmVzdWx0eW4ubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmFhYzFjYwotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L200L3Jlc3VsdHluLm00CkBAIC0wLDAgKzEsNiBAQAorCitkbmwgQVhfTVNHX1JFU1VMVF9ZTihhKQorZG5sIHJlc3VsdHMgInllcyIgaWZmIGE9PTEsICJubyIgZWxzZQorQUNfREVGVU4oW0FYX01TR19SRVNVTFRfWU5dLCBbeD1ubwordGVzdCAieCQxIiA9ICJ4MSIgJiYgeD15ZXMKK0FDX01TR19SRVNVTFQoJHgpXSkKZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L200L3NzdHJlYW0ubTQgYi9vcHJvZmlsZS0wLjkuNy9tNC9zc3RyZWFtLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzMzdmYjUKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9tNC9zc3RyZWFtLm00CkBAIC0wLDAgKzEsOSBAQAorZG5sIEFYX0NIRUNLX1NTVFJFQU0gLSBjaGVjayBpZiBsb2NhbCBzc3RyZWFtIGlzIG5lZWRlZCB0byBjb21waWxlIE9LCitBQ19ERUZVTihbQVhfQ0hFQ0tfU1NUUkVBTV0sCitbCitBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gdXNlIGluY2x1ZGVkIHNzdHJlYW1dKQorQUNfVFJZX0NPTVBJTEUoWyNpbmNsdWRlIDxzc3RyZWFtPl0sIFtdLCAKK0FDX01TR19SRVNVTFQoW25vXSk7LAorQUNfTVNHX1JFU1VMVChbeWVzXSk7IE9QX0NYWEZMQUdTPSIkT1BfQ1hYRkxBR1MgLUlcJHt0b3Bfc3JjZGlyfS9pbmNsdWRlIikKK10KKykKZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L200L3R5cGVkZWYubTQgYi9vcHJvZmlsZS0wLjkuNy9tNC90eXBlZGVmLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyODA3ZDQKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9tNC90eXBlZGVmLm00CkBAIC0wLDAgKzEsNDYgQEAKK2RubCBBWF9DSEVDS19UWVBFREVGKHR5cGVkZWZfbmFtZSwgdHlwZSwgYWN0aW9uLWlmLXRydWUsIGFjdGlvbi1pZi1mYWxzZSkKK2RubCBleGVjIGFjdGlvbi1pZi10cnVlIGlmIHR5cGVkZWZfbmFtZSBpcyBhIHR5cGVkZWYgdG8gdHlwZSBlbHNlIGV4ZWMgCitkbmwgYWN0aW9uLWlmLWZhbHNlCitkbmwgY3VycmVudGx5IHdvcmsgb25seSB3aXRoIHR5cGUgdHlwZWRlZidlZCBpbiBzdGRkZWYuaAorQUNfREVGVU4oW0FYX0NIRUNLX1RZUEVERUZdLCBbCitkbmwgQUNfTEFOR19QVVNIKEMpIG5vdCBpbiBhdXRvY29uZiAyLjEzCitBQ19MQU5HX1NBVkUKK0FDX0xBTkdfQworU0FWRV9DRkxBR1M9JENGTEFHUworQ0ZMQUdTPSItV2Vycm9yICRDRkxBR1MiCisKK0FDX1RSWV9DT01QSUxFKAorICBbCisgICNpbmNsdWRlIDxzdGRkZWYuaD4KKyAgXSwKKyAgWworICB0eXBlZGVmIHZvaWQgKCpmY3QxKSgkMSk7CisgIHR5cGVkZWYgdm9pZCAoKmZjdDIpKCQyKTsKKyAgZmN0MSBmMSA9IDA7CisgIGZjdDIgZjIgPSAwOworICBpZiAoZjEgPT0gZjIpIHt9CisgIF0sCitbJDNdLFskNF0pCisKK0NGTEFHUz0kU0FWRV9DRkxBR1MKK0FDX0xBTkdfUkVTVE9SRQorXSkKKworCitkbmwgQVhfVFlQRURFRkVEX05BTUUodHlwZWRlZl9uYW1lLCBjYW5kaWRhdGVfbGlzdCwgdmFyX25hbWUpCitkbmwgc2V0IHZhcl9uYW1lIHRvIHRoZSB0eXBlZGVmIG5hbWUgb2YgJDEgd2hpY2ggbXVzdCBiZSBpbiBjYW5kaXRhdGVfbGlzdAorZG5sIGVsc2UgcHJvZHVjZSBhIGZhdGFsIGVycm9yCitBQ19ERUZVTihbQVhfVFlQRURFRkVEX05BTUVdLCBbCisJQUNfTVNHX0NIRUNLSU5HKFt0eXBlIG9mICQxXSkKKwlmb3IgZiBpbiAkMjsgZG8KKwkJQVhfQ0hFQ0tfVFlQRURFRigkMSwgJGYsICQzPSIkZiIsICQzPSIiKQorCQlpZiB0ZXN0IC1uICIkeyQzfSI7IHRoZW4KKwkJCWJyZWFrCisJCWZpCisJZG9uZQorCWlmIHRlc3QgLW4gIiR7JDN9IjsgdGhlbgorCQlBQ19NU0dfUkVTVUxUKFskeyQzfV0pCisJZWxzZQorCQlBQ19NU0dfRVJST1IoW25vdCBmb3VuZF0pCisJZmkKK10pCmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9taXNzaW5nIGIvb3Byb2ZpbGUtMC45LjcvbWlzc2luZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yODA1NWQyCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvbWlzc2luZwpAQCAtMCwwICsxLDM3NiBAQAorIyEgL2Jpbi9zaAorIyBDb21tb24gc3R1YiBmb3IgYSBmZXcgbWlzc2luZyBHTlUgcHJvZ3JhbXMgd2hpbGUgaW5zdGFsbGluZy4KKworc2NyaXB0dmVyc2lvbj0yMDA5LTA0LTI4LjIxOyAjIFVUQworCisjIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OSwgMjAwMCwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwKKyMgMjAwOCwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgT3JpZ2luYWxseSBieSBGcmFuLGNvaXMgUGluYXJkIDxwaW5hcmRAaXJvLnVtb250cmVhbC5jYT4sIDE5OTYuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorIyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisjIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpZiB5b3UKKyMgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIHByb2dyYW0gdGhhdCBjb250YWlucyBhCisjIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgeW91IG1heSBpbmNsdWRlIGl0IHVuZGVyCisjIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKworaWYgdGVzdCAkIyAtZXEgMDsgdGhlbgorICBlY2hvIDE+JjIgIlRyeSBcYCQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24iCisgIGV4aXQgMQorZmkKKworcnVuPToKK3NlZF9vdXRwdXQ9J3MvLiogLS1vdXRwdXRbID1dXChbXiBdKlwpLiovXDEvcCcKK3NlZF9taW51c289J3MvLiogLW8gXChbXiBdKlwpLiovXDEvcCcKKworIyBJbiB0aGUgY2FzZXMgd2hlcmUgdGhpcyBtYXR0ZXJzLCBgbWlzc2luZycgaXMgYmVpbmcgcnVuIGluIHRoZQorIyBzcmNkaXIgYWxyZWFkeS4KK2lmIHRlc3QgLWYgY29uZmlndXJlLmFjOyB0aGVuCisgIGNvbmZpZ3VyZV9hYz1jb25maWd1cmUuYWMKK2Vsc2UKKyAgY29uZmlndXJlX2FjPWNvbmZpZ3VyZS5pbgorZmkKKworbXNnPSJtaXNzaW5nIG9uIHlvdXIgc3lzdGVtIgorCitjYXNlICQxIGluCistLXJ1bikKKyAgIyBUcnkgdG8gcnVuIHJlcXVlc3RlZCBwcm9ncmFtLCBhbmQganVzdCBleGl0IGlmIGl0IHN1Y2NlZWRzLgorICBydW49CisgIHNoaWZ0CisgICIkQCIgJiYgZXhpdCAwCisgICMgRXhpdCBjb2RlIDYzIG1lYW5zIHZlcnNpb24gbWlzbWF0Y2guICBUaGlzIG9mdGVuIGhhcHBlbnMKKyAgIyB3aGVuIHRoZSB1c2VyIHRyeSB0byB1c2UgYW4gYW5jaWVudCB2ZXJzaW9uIG9mIGEgdG9vbCBvbgorICAjIGEgZmlsZSB0aGF0IHJlcXVpcmVzIGEgbWluaW11bSB2ZXJzaW9uLiAgSW4gdGhpcyBjYXNlIHdlCisgICMgd2Ugc2hvdWxkIHByb2NlZWQgaGFzIGlmIHRoZSBwcm9ncmFtIGhhZCBiZWVuIGFic2VudCwgb3IKKyAgIyBpZiAtLXJ1biBoYWRuJ3QgYmVlbiBwYXNzZWQuCisgIGlmIHRlc3QgJD8gPSA2MzsgdGhlbgorICAgIHJ1bj06CisgICAgbXNnPSJwcm9iYWJseSB0b28gb2xkIgorICBmaQorICA7OworCisgIC1ofC0taHwtLWhlfC0taGVsfC0taGVscCkKKyAgICBlY2hvICJcCiskMCBbT1BUSU9OXS4uLiBQUk9HUkFNIFtBUkdVTUVOVF0uLi4KKworSGFuZGxlIFxgUFJPR1JBTSBbQVJHVU1FTlRdLi4uJyBmb3Igd2hlbiBQUk9HUkFNIGlzIG1pc3NpbmcsIG9yIHJldHVybiBhbgorZXJyb3Igc3RhdHVzIGlmIHRoZXJlIGlzIG5vIGtub3duIGhhbmRsaW5nIGZvciBQUk9HUkFNLgorCitPcHRpb25zOgorICAtaCwgLS1oZWxwICAgICAgZGlzcGxheSB0aGlzIGhlbHAgYW5kIGV4aXQKKyAgLXYsIC0tdmVyc2lvbiAgIG91dHB1dCB2ZXJzaW9uIGluZm9ybWF0aW9uIGFuZCBleGl0CisgIC0tcnVuICAgICAgICAgICB0cnkgdG8gcnVuIHRoZSBnaXZlbiBjb21tYW5kLCBhbmQgZW11bGF0ZSBpdCBpZiBpdCBmYWlscworCitTdXBwb3J0ZWQgUFJPR1JBTSB2YWx1ZXM6CisgIGFjbG9jYWwgICAgICB0b3VjaCBmaWxlIFxgYWNsb2NhbC5tNCcKKyAgYXV0b2NvbmYgICAgIHRvdWNoIGZpbGUgXGBjb25maWd1cmUnCisgIGF1dG9oZWFkZXIgICB0b3VjaCBmaWxlIFxgY29uZmlnLmguaW4nCisgIGF1dG9tNHRlICAgICB0b3VjaCB0aGUgb3V0cHV0IGZpbGUsIG9yIGNyZWF0ZSBhIHN0dWIgb25lCisgIGF1dG9tYWtlICAgICB0b3VjaCBhbGwgXGBNYWtlZmlsZS5pbicgZmlsZXMKKyAgYmlzb24gICAgICAgIGNyZWF0ZSBcYHkudGFiLltjaF0nLCBpZiBwb3NzaWJsZSwgZnJvbSBleGlzdGluZyAuW2NoXQorICBmbGV4ICAgICAgICAgY3JlYXRlIFxgbGV4Lnl5LmMnLCBpZiBwb3NzaWJsZSwgZnJvbSBleGlzdGluZyAuYworICBoZWxwMm1hbiAgICAgdG91Y2ggdGhlIG91dHB1dCBmaWxlCisgIGxleCAgICAgICAgICBjcmVhdGUgXGBsZXgueXkuYycsIGlmIHBvc3NpYmxlLCBmcm9tIGV4aXN0aW5nIC5jCisgIG1ha2VpbmZvICAgICB0b3VjaCB0aGUgb3V0cHV0IGZpbGUKKyAgdGFyICAgICAgICAgIHRyeSB0YXIsIGdudXRhciwgZ3RhciwgdGhlbiB0YXIgd2l0aG91dCBub24tcG9ydGFibGUgZmxhZ3MKKyAgeWFjYyAgICAgICAgIGNyZWF0ZSBcYHkudGFiLltjaF0nLCBpZiBwb3NzaWJsZSwgZnJvbSBleGlzdGluZyAuW2NoXQorCitWZXJzaW9uIHN1ZmZpeGVzIHRvIFBST0dSQU0gYXMgd2VsbCBhcyB0aGUgcHJlZml4ZXMgXGBnbnUtJywgXGBnbnUnLCBhbmQKK1xgZycgYXJlIGlnbm9yZWQgd2hlbiBjaGVja2luZyB0aGUgbmFtZS4KKworU2VuZCBidWcgcmVwb3J0cyB0byA8YnVnLWF1dG9tYWtlQGdudS5vcmc+LiIKKyAgICBleGl0ICQ/CisgICAgOzsKKworICAtdnwtLXZ8LS12ZXwtLXZlcnwtLXZlcnN8LS12ZXJzaXwtLXZlcnNpb3wtLXZlcnNpb24pCisgICAgZWNobyAibWlzc2luZyAkc2NyaXB0dmVyc2lvbiAoR05VIEF1dG9tYWtlKSIKKyAgICBleGl0ICQ/CisgICAgOzsKKworICAtKikKKyAgICBlY2hvIDE+JjIgIiQwOiBVbmtub3duIFxgJDEnIG9wdGlvbiIKKyAgICBlY2hvIDE+JjIgIlRyeSBcYCQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24iCisgICAgZXhpdCAxCisgICAgOzsKKworZXNhYworCisjIG5vcm1hbGl6ZSBwcm9ncmFtIG5hbWUgdG8gY2hlY2sgZm9yLgorcHJvZ3JhbT1gZWNobyAiJDEiIHwgc2VkICcKKyAgcy9eZ251LS8vOyB0CisgIHMvXmdudS8vOyB0CisgIHMvXmcvLzsgdCdgCisKKyMgTm93IGV4aXQgaWYgd2UgaGF2ZSBpdCwgYnV0IGl0IGZhaWxlZC4gIEFsc28gZXhpdCBub3cgaWYgd2UKKyMgZG9uJ3QgaGF2ZSBpdCBhbmQgLS12ZXJzaW9uIHdhcyBwYXNzZWQgKG1vc3QgbGlrZWx5IHRvIGRldGVjdAorIyB0aGUgcHJvZ3JhbSkuICBUaGlzIGlzIGFib3V0IG5vbi1HTlUgcHJvZ3JhbXMsIHNvIHVzZSAkMSBub3QKKyMgJHByb2dyYW0uCitjYXNlICQxIGluCisgIGxleCp8eWFjYyopCisgICAgIyBOb3QgR05VIHByb2dyYW1zLCB0aGV5IGRvbid0IGhhdmUgLS12ZXJzaW9uLgorICAgIDs7CisKKyAgdGFyKikKKyAgICBpZiB0ZXN0IC1uICIkcnVuIjsgdGhlbgorICAgICAgIGVjaG8gMT4mMiAiRVJST1I6IFxgdGFyJyByZXF1aXJlcyAtLXJ1biIKKyAgICAgICBleGl0IDEKKyAgICBlbGlmIHRlc3QgIngkMiIgPSAieC0tdmVyc2lvbiIgfHwgdGVzdCAieCQyIiA9ICJ4LS1oZWxwIjsgdGhlbgorICAgICAgIGV4aXQgMQorICAgIGZpCisgICAgOzsKKworICAqKQorICAgIGlmIHRlc3QgLXogIiRydW4iICYmICgkMSAtLXZlcnNpb24pID4gL2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgICAjIFdlIGhhdmUgaXQsIGJ1dCBpdCBmYWlsZWQuCisgICAgICAgZXhpdCAxCisgICAgZWxpZiB0ZXN0ICJ4JDIiID0gIngtLXZlcnNpb24iIHx8IHRlc3QgIngkMiIgPSAieC0taGVscCI7IHRoZW4KKyAgICAgICAjIENvdWxkIG5vdCBydW4gLS12ZXJzaW9uIG9yIC0taGVscC4gIFRoaXMgaXMgcHJvYmFibHkgc29tZW9uZQorICAgICAgICMgcnVubmluZyBgJFRPT0wgLS12ZXJzaW9uJyBvciBgJFRPT0wgLS1oZWxwJyB0byBjaGVjayB3aGV0aGVyCisgICAgICAgIyAkVE9PTCBleGlzdHMgYW5kIG5vdCBrbm93aW5nICRUT09MIHVzZXMgbWlzc2luZy4KKyAgICAgICBleGl0IDEKKyAgICBmaQorICAgIDs7Citlc2FjCisKKyMgSWYgaXQgZG9lcyBub3QgZXhpc3QsIG9yIGZhaWxzIHRvIHJ1biAocG9zc2libHkgYW4gb3V0ZGF0ZWQgdmVyc2lvbiksCisjIHRyeSB0byBlbXVsYXRlIGl0LgorY2FzZSAkcHJvZ3JhbSBpbgorICBhY2xvY2FsKikKKyAgICBlY2hvIDE+JjIgIlwKK1dBUk5JTkc6IFxgJDEnIGlzICRtc2cuICBZb3Ugc2hvdWxkIG9ubHkgbmVlZCBpdCBpZgorICAgICAgICAgeW91IG1vZGlmaWVkIFxgYWNpbmNsdWRlLm00JyBvciBcYCR7Y29uZmlndXJlX2FjfScuICBZb3UgbWlnaHQgd2FudAorICAgICAgICAgdG8gaW5zdGFsbCB0aGUgXGBBdXRvbWFrZScgYW5kIFxgUGVybCcgcGFja2FnZXMuICBHcmFiIHRoZW0gZnJvbQorICAgICAgICAgYW55IEdOVSBhcmNoaXZlIHNpdGUuIgorICAgIHRvdWNoIGFjbG9jYWwubTQKKyAgICA7OworCisgIGF1dG9jb25mKikKKyAgICBlY2hvIDE+JjIgIlwKK1dBUk5JTkc6IFxgJDEnIGlzICRtc2cuICBZb3Ugc2hvdWxkIG9ubHkgbmVlZCBpdCBpZgorICAgICAgICAgeW91IG1vZGlmaWVkIFxgJHtjb25maWd1cmVfYWN9Jy4gIFlvdSBtaWdodCB3YW50IHRvIGluc3RhbGwgdGhlCisgICAgICAgICBcYEF1dG9jb25mJyBhbmQgXGBHTlUgbTQnIHBhY2thZ2VzLiAgR3JhYiB0aGVtIGZyb20gYW55IEdOVQorICAgICAgICAgYXJjaGl2ZSBzaXRlLiIKKyAgICB0b3VjaCBjb25maWd1cmUKKyAgICA7OworCisgIGF1dG9oZWFkZXIqKQorICAgIGVjaG8gMT4mMiAiXAorV0FSTklORzogXGAkMScgaXMgJG1zZy4gIFlvdSBzaG91bGQgb25seSBuZWVkIGl0IGlmCisgICAgICAgICB5b3UgbW9kaWZpZWQgXGBhY2NvbmZpZy5oJyBvciBcYCR7Y29uZmlndXJlX2FjfScuICBZb3UgbWlnaHQgd2FudAorICAgICAgICAgdG8gaW5zdGFsbCB0aGUgXGBBdXRvY29uZicgYW5kIFxgR05VIG00JyBwYWNrYWdlcy4gIEdyYWIgdGhlbQorICAgICAgICAgZnJvbSBhbnkgR05VIGFyY2hpdmUgc2l0ZS4iCisgICAgZmlsZXM9YHNlZCAtbiAncy9eWyBdKkFbQ01dX0NPTkZJR19IRUFERVIoXChbXildKlwpKS4qL1wxL3AnICR7Y29uZmlndXJlX2FjfWAKKyAgICB0ZXN0IC16ICIkZmlsZXMiICYmIGZpbGVzPSJjb25maWcuaCIKKyAgICB0b3VjaF9maWxlcz0KKyAgICBmb3IgZiBpbiAkZmlsZXM7IGRvCisgICAgICBjYXNlICRmIGluCisgICAgICAqOiopIHRvdWNoX2ZpbGVzPSIkdG91Y2hfZmlsZXMgImBlY2hvICIkZiIgfAorCQkJCSAgICAgICBzZWQgLWUgJ3MvXlteOl0qOi8vJyAtZSAncy86LiovLydgOzsKKyAgICAgICopIHRvdWNoX2ZpbGVzPSIkdG91Y2hfZmlsZXMgJGYuaW4iOzsKKyAgICAgIGVzYWMKKyAgICBkb25lCisgICAgdG91Y2ggJHRvdWNoX2ZpbGVzCisgICAgOzsKKworICBhdXRvbWFrZSopCisgICAgZWNobyAxPiYyICJcCitXQVJOSU5HOiBcYCQxJyBpcyAkbXNnLiAgWW91IHNob3VsZCBvbmx5IG5lZWQgaXQgaWYKKyAgICAgICAgIHlvdSBtb2RpZmllZCBcYE1ha2VmaWxlLmFtJywgXGBhY2luY2x1ZGUubTQnIG9yIFxgJHtjb25maWd1cmVfYWN9Jy4KKyAgICAgICAgIFlvdSBtaWdodCB3YW50IHRvIGluc3RhbGwgdGhlIFxgQXV0b21ha2UnIGFuZCBcYFBlcmwnIHBhY2thZ2VzLgorICAgICAgICAgR3JhYiB0aGVtIGZyb20gYW55IEdOVSBhcmNoaXZlIHNpdGUuIgorICAgIGZpbmQgLiAtdHlwZSBmIC1uYW1lIE1ha2VmaWxlLmFtIC1wcmludCB8CisJICAgc2VkICdzL1wuYW0kLy5pbi8nIHwKKwkgICB3aGlsZSByZWFkIGY7IGRvIHRvdWNoICIkZiI7IGRvbmUKKyAgICA7OworCisgIGF1dG9tNHRlKikKKyAgICBlY2hvIDE+JjIgIlwKK1dBUk5JTkc6IFxgJDEnIGlzIG5lZWRlZCwgYnV0IGlzICRtc2cuCisgICAgICAgICBZb3UgbWlnaHQgaGF2ZSBtb2RpZmllZCBzb21lIGZpbGVzIHdpdGhvdXQgaGF2aW5nIHRoZQorICAgICAgICAgcHJvcGVyIHRvb2xzIGZvciBmdXJ0aGVyIGhhbmRsaW5nIHRoZW0uCisgICAgICAgICBZb3UgY2FuIGdldCBcYCQxJyBhcyBwYXJ0IG9mIFxgQXV0b2NvbmYnIGZyb20gYW55IEdOVQorICAgICAgICAgYXJjaGl2ZSBzaXRlLiIKKworICAgIGZpbGU9YGVjaG8gIiQqIiB8IHNlZCAtbiAiJHNlZF9vdXRwdXQiYAorICAgIHRlc3QgLXogIiRmaWxlIiAmJiBmaWxlPWBlY2hvICIkKiIgfCBzZWQgLW4gIiRzZWRfbWludXNvImAKKyAgICBpZiB0ZXN0IC1mICIkZmlsZSI7IHRoZW4KKwl0b3VjaCAkZmlsZQorICAgIGVsc2UKKwl0ZXN0IC16ICIkZmlsZSIgfHwgZXhlYyA+JGZpbGUKKwllY2hvICIjISAvYmluL3NoIgorCWVjaG8gIiMgQ3JlYXRlZCBieSBHTlUgQXV0b21ha2UgbWlzc2luZyBhcyBhIHJlcGxhY2VtZW50IG9mIgorCWVjaG8gIiMgICQgJEAiCisJZWNobyAiZXhpdCAwIgorCWNobW9kICt4ICRmaWxlCisJZXhpdCAxCisgICAgZmkKKyAgICA7OworCisgIGJpc29uKnx5YWNjKikKKyAgICBlY2hvIDE+JjIgIlwKK1dBUk5JTkc6IFxgJDEnICRtc2cuICBZb3Ugc2hvdWxkIG9ubHkgbmVlZCBpdCBpZgorICAgICAgICAgeW91IG1vZGlmaWVkIGEgXGAueScgZmlsZS4gIFlvdSBtYXkgbmVlZCB0aGUgXGBCaXNvbicgcGFja2FnZQorICAgICAgICAgaW4gb3JkZXIgZm9yIHRob3NlIG1vZGlmaWNhdGlvbnMgdG8gdGFrZSBlZmZlY3QuICBZb3UgY2FuIGdldAorICAgICAgICAgXGBCaXNvbicgZnJvbSBhbnkgR05VIGFyY2hpdmUgc2l0ZS4iCisgICAgcm0gLWYgeS50YWIuYyB5LnRhYi5oCisgICAgaWYgdGVzdCAkIyAtbmUgMTsgdGhlbgorICAgICAgICBldmFsIExBU1RBUkc9IlwkeyQjfSIKKwljYXNlICRMQVNUQVJHIGluCisJKi55KQorCSAgICBTUkNGSUxFPWBlY2hvICIkTEFTVEFSRyIgfCBzZWQgJ3MveSQvYy8nYAorCSAgICBpZiB0ZXN0IC1mICIkU1JDRklMRSI7IHRoZW4KKwkgICAgICAgICBjcCAiJFNSQ0ZJTEUiIHkudGFiLmMKKwkgICAgZmkKKwkgICAgU1JDRklMRT1gZWNobyAiJExBU1RBUkciIHwgc2VkICdzL3kkL2gvJ2AKKwkgICAgaWYgdGVzdCAtZiAiJFNSQ0ZJTEUiOyB0aGVuCisJICAgICAgICAgY3AgIiRTUkNGSUxFIiB5LnRhYi5oCisJICAgIGZpCisJICA7OworCWVzYWMKKyAgICBmaQorICAgIGlmIHRlc3QgISAtZiB5LnRhYi5oOyB0aGVuCisJZWNobyA+eS50YWIuaAorICAgIGZpCisgICAgaWYgdGVzdCAhIC1mIHkudGFiLmM7IHRoZW4KKwllY2hvICdtYWluKCkgeyByZXR1cm4gMDsgfScgPnkudGFiLmMKKyAgICBmaQorICAgIDs7CisKKyAgbGV4KnxmbGV4KikKKyAgICBlY2hvIDE+JjIgIlwKK1dBUk5JTkc6IFxgJDEnIGlzICRtc2cuICBZb3Ugc2hvdWxkIG9ubHkgbmVlZCBpdCBpZgorICAgICAgICAgeW91IG1vZGlmaWVkIGEgXGAubCcgZmlsZS4gIFlvdSBtYXkgbmVlZCB0aGUgXGBGbGV4JyBwYWNrYWdlCisgICAgICAgICBpbiBvcmRlciBmb3IgdGhvc2UgbW9kaWZpY2F0aW9ucyB0byB0YWtlIGVmZmVjdC4gIFlvdSBjYW4gZ2V0CisgICAgICAgICBcYEZsZXgnIGZyb20gYW55IEdOVSBhcmNoaXZlIHNpdGUuIgorICAgIHJtIC1mIGxleC55eS5jCisgICAgaWYgdGVzdCAkIyAtbmUgMTsgdGhlbgorICAgICAgICBldmFsIExBU1RBUkc9IlwkeyQjfSIKKwljYXNlICRMQVNUQVJHIGluCisJKi5sKQorCSAgICBTUkNGSUxFPWBlY2hvICIkTEFTVEFSRyIgfCBzZWQgJ3MvbCQvYy8nYAorCSAgICBpZiB0ZXN0IC1mICIkU1JDRklMRSI7IHRoZW4KKwkgICAgICAgICBjcCAiJFNSQ0ZJTEUiIGxleC55eS5jCisJICAgIGZpCisJICA7OworCWVzYWMKKyAgICBmaQorICAgIGlmIHRlc3QgISAtZiBsZXgueXkuYzsgdGhlbgorCWVjaG8gJ21haW4oKSB7IHJldHVybiAwOyB9JyA+bGV4Lnl5LmMKKyAgICBmaQorICAgIDs7CisKKyAgaGVscDJtYW4qKQorICAgIGVjaG8gMT4mMiAiXAorV0FSTklORzogXGAkMScgaXMgJG1zZy4gIFlvdSBzaG91bGQgb25seSBuZWVkIGl0IGlmCisJIHlvdSBtb2RpZmllZCBhIGRlcGVuZGVuY3kgb2YgYSBtYW51YWwgcGFnZS4gIFlvdSBtYXkgbmVlZCB0aGUKKwkgXGBIZWxwMm1hbicgcGFja2FnZSBpbiBvcmRlciBmb3IgdGhvc2UgbW9kaWZpY2F0aW9ucyB0byB0YWtlCisJIGVmZmVjdC4gIFlvdSBjYW4gZ2V0IFxgSGVscDJtYW4nIGZyb20gYW55IEdOVSBhcmNoaXZlIHNpdGUuIgorCisgICAgZmlsZT1gZWNobyAiJCoiIHwgc2VkIC1uICIkc2VkX291dHB1dCJgCisgICAgdGVzdCAteiAiJGZpbGUiICYmIGZpbGU9YGVjaG8gIiQqIiB8IHNlZCAtbiAiJHNlZF9taW51c28iYAorICAgIGlmIHRlc3QgLWYgIiRmaWxlIjsgdGhlbgorCXRvdWNoICRmaWxlCisgICAgZWxzZQorCXRlc3QgLXogIiRmaWxlIiB8fCBleGVjID4kZmlsZQorCWVjaG8gIi5hYiBoZWxwMm1hbiBpcyByZXF1aXJlZCB0byBnZW5lcmF0ZSB0aGlzIHBhZ2UiCisJZXhpdCAkPworICAgIGZpCisgICAgOzsKKworICBtYWtlaW5mbyopCisgICAgZWNobyAxPiYyICJcCitXQVJOSU5HOiBcYCQxJyBpcyAkbXNnLiAgWW91IHNob3VsZCBvbmx5IG5lZWQgaXQgaWYKKyAgICAgICAgIHlvdSBtb2RpZmllZCBhIFxgLnRleGknIG9yIFxgLnRleGluZm8nIGZpbGUsIG9yIGFueSBvdGhlciBmaWxlCisgICAgICAgICBpbmRpcmVjdGx5IGFmZmVjdGluZyB0aGUgYXNwZWN0IG9mIHRoZSBtYW51YWwuICBUaGUgc3B1cmlvdXMKKyAgICAgICAgIGNhbGwgbWlnaHQgYWxzbyBiZSB0aGUgY29uc2VxdWVuY2Ugb2YgdXNpbmcgYSBidWdneSBcYG1ha2UnIChBSVgsCisgICAgICAgICBEVSwgSVJJWCkuICBZb3UgbWlnaHQgd2FudCB0byBpbnN0YWxsIHRoZSBcYFRleGluZm8nIHBhY2thZ2Ugb3IKKyAgICAgICAgIHRoZSBcYEdOVSBtYWtlJyBwYWNrYWdlLiAgR3JhYiBlaXRoZXIgZnJvbSBhbnkgR05VIGFyY2hpdmUgc2l0ZS4iCisgICAgIyBUaGUgZmlsZSB0byB0b3VjaCBpcyB0aGF0IHNwZWNpZmllZCB3aXRoIC1vIC4uLgorICAgIGZpbGU9YGVjaG8gIiQqIiB8IHNlZCAtbiAiJHNlZF9vdXRwdXQiYAorICAgIHRlc3QgLXogIiRmaWxlIiAmJiBmaWxlPWBlY2hvICIkKiIgfCBzZWQgLW4gIiRzZWRfbWludXNvImAKKyAgICBpZiB0ZXN0IC16ICIkZmlsZSI7IHRoZW4KKyAgICAgICMgLi4uIG9yIGl0IGlzIHRoZSBvbmUgc3BlY2lmaWVkIHdpdGggQHNldGZpbGVuYW1lIC4uLgorICAgICAgaW5maWxlPWBlY2hvICIkKiIgfCBzZWQgJ3MvLiogXChbXiBdKlwpICokL1wxLydgCisgICAgICBmaWxlPWBzZWQgLW4gJworCS9eQHNldGZpbGVuYW1lL3sKKwkgIHMvLiogXChbXiBdKlwpICokL1wxLworCSAgcAorCSAgcQorCX0nICRpbmZpbGVgCisgICAgICAjIC4uLiBvciBpdCBpcyBkZXJpdmVkIGZyb20gdGhlIHNvdXJjZSBuYW1lIChkaXIvZi50ZXhpIGJlY29tZXMgZi5pbmZvKQorICAgICAgdGVzdCAteiAiJGZpbGUiICYmIGZpbGU9YGVjaG8gIiRpbmZpbGUiIHwgc2VkICdzLC4qLywsO3MsLlteLl0qJCwsJ2AuaW5mbworICAgIGZpCisgICAgIyBJZiB0aGUgZmlsZSBkb2VzIG5vdCBleGlzdCwgdGhlIHVzZXIgcmVhbGx5IG5lZWRzIG1ha2VpbmZvOworICAgICMgbGV0J3MgZmFpbCB3aXRob3V0IHRvdWNoaW5nIGFueXRoaW5nLgorICAgIHRlc3QgLWYgJGZpbGUgfHwgZXhpdCAxCisgICAgdG91Y2ggJGZpbGUKKyAgICA7OworCisgIHRhciopCisgICAgc2hpZnQKKworICAgICMgV2UgaGF2ZSBhbHJlYWR5IHRyaWVkIHRhciBpbiB0aGUgZ2VuZXJpYyBwYXJ0LgorICAgICMgTG9vayBmb3IgZ251dGFyL2d0YXIgYmVmb3JlIGludm9jYXRpb24gdG8gYXZvaWQgdWdseSBlcnJvcgorICAgICMgbWVzc2FnZXMuCisgICAgaWYgKGdudXRhciAtLXZlcnNpb24gPiAvZGV2L251bGwgMj4mMSk7IHRoZW4KKyAgICAgICBnbnV0YXIgIiRAIiAmJiBleGl0IDAKKyAgICBmaQorICAgIGlmIChndGFyIC0tdmVyc2lvbiA+IC9kZXYvbnVsbCAyPiYxKTsgdGhlbgorICAgICAgIGd0YXIgIiRAIiAmJiBleGl0IDAKKyAgICBmaQorICAgIGZpcnN0YXJnPSIkMSIKKyAgICBpZiBzaGlmdDsgdGhlbgorCWNhc2UgJGZpcnN0YXJnIGluCisJKm8qKQorCSAgICBmaXJzdGFyZz1gZWNobyAiJGZpcnN0YXJnIiB8IHNlZCBzL28vL2AKKwkgICAgdGFyICIkZmlyc3RhcmciICIkQCIgJiYgZXhpdCAwCisJICAgIDs7CisJZXNhYworCWNhc2UgJGZpcnN0YXJnIGluCisJKmgqKQorCSAgICBmaXJzdGFyZz1gZWNobyAiJGZpcnN0YXJnIiB8IHNlZCBzL2gvL2AKKwkgICAgdGFyICIkZmlyc3RhcmciICIkQCIgJiYgZXhpdCAwCisJICAgIDs7CisJZXNhYworICAgIGZpCisKKyAgICBlY2hvIDE+JjIgIlwKK1dBUk5JTkc6IEkgY2FuJ3Qgc2VlbSB0byBiZSBhYmxlIHRvIHJ1biBcYHRhcicgd2l0aCB0aGUgZ2l2ZW4gYXJndW1lbnRzLgorICAgICAgICAgWW91IG1heSB3YW50IHRvIGluc3RhbGwgR05VIHRhciBvciBGcmVlIHBheHV0aWxzLCBvciBjaGVjayB0aGUKKyAgICAgICAgIGNvbW1hbmQgbGluZSBhcmd1bWVudHMuIgorICAgIGV4aXQgMQorICAgIDs7CisKKyAgKikKKyAgICBlY2hvIDE+JjIgIlwKK1dBUk5JTkc6IFxgJDEnIGlzIG5lZWRlZCwgYW5kIGlzICRtc2cuCisgICAgICAgICBZb3UgbWlnaHQgaGF2ZSBtb2RpZmllZCBzb21lIGZpbGVzIHdpdGhvdXQgaGF2aW5nIHRoZQorICAgICAgICAgcHJvcGVyIHRvb2xzIGZvciBmdXJ0aGVyIGhhbmRsaW5nIHRoZW0uICBDaGVjayB0aGUgXGBSRUFETUUnIGZpbGUsCisgICAgICAgICBpdCBvZnRlbiB0ZWxscyB5b3UgYWJvdXQgdGhlIG5lZWRlZCBwcmVyZXF1aXNpdGVzIGZvciBpbnN0YWxsaW5nCisgICAgICAgICB0aGlzIHBhY2thZ2UuICBZb3UgbWF5IGFsc28gcGVlayBhdCBhbnkgR05VIGFyY2hpdmUgc2l0ZSwgaW4gY2FzZQorICAgICAgICAgc29tZSBvdGhlciBwYWNrYWdlIHdvdWxkIGNvbnRhaW4gdGhpcyBtaXNzaW5nIFxgJDEnIHByb2dyYW0uIgorICAgIGV4aXQgMQorICAgIDs7Citlc2FjCisKK2V4aXQgMAorCisjIExvY2FsIHZhcmlhYmxlczoKKyMgZXZhbDogKGFkZC1ob29rICd3cml0ZS1maWxlLWhvb2tzICd0aW1lLXN0YW1wKQorIyB0aW1lLXN0YW1wLXN0YXJ0OiAic2NyaXB0dmVyc2lvbj0iCisjIHRpbWUtc3RhbXAtZm9ybWF0OiAiJTp5LSUwMm0tJTAyZC4lMDJIIgorIyB0aW1lLXN0YW1wLXRpbWUtem9uZTogIlVUQyIKKyMgdGltZS1zdGFtcC1lbmQ6ICI7ICMgVVRDIgorIyBFbmQ6CmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9tb2R1bGUvTWFrZWZpbGUuaW4gYi9vcHJvZmlsZS0wLjkuNy9tb2R1bGUvTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTYzMDI1OQotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L21vZHVsZS9NYWtlZmlsZS5pbgpAQCAtMCwwICsxLDIyIEBACitPUFJPRklMRV9ESVI9QE9QUk9GSUxFX0RJUkAKK1ZFUlNJT049QFZFUlNJT05ACitLVkVSUz1AS1ZFUlNACitLU1JDPUBLU1JDQAorCitFWFRSQV9DRkxBR1M9QEVYVFJBX0NGTEFHU19NT0RVTEVAIC1EX19OT19WRVJTSU9OX18gXAorCS1JJChPUFJPRklMRV9ESVIpL21vZHVsZS9AT1BST0ZJTEVfTU9EVUxFX0FSQ0hAIC1JJChPUFJPRklMRV9ESVIpIC1JJChPUFJPRklMRV9ESVIpL2xpYnV0aWwgLUkkKE9QUk9GSUxFX0RJUikvbGlib3AKKworIyBOQjogZG8gbm90IGFkZCBhIGZpbGUgaGVyZSB3aXRob3V0IGFkZGluZyBpdCB0byBFWFRSQV9ESVNUIGluIC4uL01ha2VmaWxlLmFtCisKK09fVEFSR0VUIDo9IG9wcm9maWxlLW1vZHVsZS5vCisgCitvYmoteSA6PSBjb21wYXQubyBvcF9pbml0Lm8gb3BfdXRpbC5vIG9wX2RuYW1lLm8gb3Byb2ZpbGUubyBAT1BST0ZJTEVfTU9EVUxFX0FSQ0hAL2FyY2gubyAkKE9QUk9GSUxFX0RJUikvbGlib3AvbGlib3AuYQorb2JqLW0gOj0gJChPX1RBUkdFVCkKK09fT0JKUyA6PSAkKG9iai15KQorTV9PQkpTIDo9ICQoT19UQVJHRVQpCisKK1RPUERJUiA6PSAkKEtTUkMpCitDT05GSUdfU0hFTEwgOj0gVE9QRElSPSQoS1NSQykgL2Jpbi9iYXNoCitpbmNsdWRlICQoS1NSQykvUnVsZXMubWFrZQorCisjIEZJWE1FOiBkZXBzCmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9tb2R1bGUvY29tcGF0LmMgYi9vcHJvZmlsZS0wLjkuNy9tb2R1bGUvY29tcGF0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYThjMTdmYgotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L21vZHVsZS9jb21wYXQuYwpAQCAtMCwwICsxLDYzIEBACisvKioKKyAqIEBmaWxlIGNvbXBhdC5jCisgKiBUaGlzIGZpbGUgaXMgaW50ZW5kZWQgdG8gYmUgdXAtdG8tZGF0ZSB3aXRoIHRoZSBsYXN0IGxpbnV4IHZlcnNpb24gYW5kCisgKiBwcm92aWRlIHdvcmstYXJvdW5kcyBmb3IgbWlzc2luZyBmZWF0dXJlcyBpbiBwcmV2aW91cyBrZXJuZWwgdmVyc2lvbgorICoKKyAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDIgT1Byb2ZpbGUgYXV0aG9ycworICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKKyAqCisgKiBAYXV0aG9yIEpvaG4gTGV2b24KKyAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQorICovCisKKyNpbmNsdWRlICJvcF9kY2FjaGUuaCIKKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKworI2lmZGVmIE5FRURfMl8yX0RFTlRSSUVTCisKKy8qIG5vdGUgLSBhc3N1bWVzIHlvdSBvbmx5IHRlc3QgZm9yIE5VTEwsIGFuZCBub3QKKyAqIGFjdHVhbGx5IGNhcmUgYWJvdXQgdGhlIHJldHVybiB2YWx1ZSAqLwordm9pZCAqIGNvbXBhdF9yZXF1ZXN0X3JlZ2lvbih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIG4sIGNoYXIgY29uc3QgKiBuYW1lKQoreworCWlmIChjaGVja19yZWdpb24oc3RhcnQsIG4pICE9IDApCisJCXJldHVybiBOVUxMOworCXJlcXVlc3RfcmVnaW9uKHN0YXJ0LCBuLCBuYW1lKTsKKyAgICAgICAgcmV0dXJuICh2b2lkICopMTsKK30KKworaW50IHdpbmRfZGVudHJpZXNfMl8yKHN0cnVjdCBkZW50cnkgKiBkZW50cnkpCit7CisJc3RydWN0IGRlbnRyeSAqIHJvb3QgPSBjdXJyZW50LT5mcy0+cm9vdDsKKworCWlmIChkZW50cnktPmRfcGFyZW50ICE9IGRlbnRyeSAmJiBsaXN0X2VtcHR5KCZkZW50cnktPmRfaGFzaCkpCisJCXJldHVybiAwOworCisJZm9yICg7OykgeworCQlzdHJ1Y3QgZGVudHJ5ICogcGFyZW50OworCisJCWlmIChkZW50cnkgPT0gcm9vdCkKKwkJCWJyZWFrOworCisJCWRlbnRyeSA9IGRlbnRyeS0+ZF9jb3ZlcnM7CisJCXBhcmVudCA9IGRlbnRyeS0+ZF9wYXJlbnQ7CisKKwkJaWYgKGRlbnRyeSA9PSBwYXJlbnQpCisJCQlicmVhazsKKworCQlwdXNoX2RuYW1lKCZkZW50cnktPmRfbmFtZSk7CisKKwkJZGVudHJ5ID0gcGFyZW50OworCX0KKworCXJldHVybiAxOworfQorCisvKiBjYWxsZWQgd2l0aCBub3RlX2xvY2sgaGVsZCAqLwordWludCBkb19wYXRoX2hhc2hfMl8yKHN0cnVjdCBkZW50cnkgKiBkZW50cnkpCit7CisJLyogQktMIGlzIGFscmVhZHkgdGFrZW4gKi8KKworCXJldHVybiBkb19oYXNoKGRlbnRyeSwgMCwgMCwgMCk7Cit9CisKKyNlbmRpZiAvKiBORUVEXzJfMl9ERU5UUklFUyAqLwpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvbW9kdWxlL2NvbXBhdC5oIGIvb3Byb2ZpbGUtMC45LjcvbW9kdWxlL2NvbXBhdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwYzkyNzcKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9tb2R1bGUvY29tcGF0LmgKQEAgLTAsMCArMSw3MCBAQAorLyoqCisgKiBAZmlsZSBjb21wYXQuaAorICogVGhpcyBmaWxlIGlzIGludGVuZGVkIHRvIGJlIHVwLXRvLWRhdGUgd2l0aCB0aGUgbGFzdCBsaW51eCB2ZXJzaW9uIGFuZAorICogcHJvdmlkZSB3b3JrLWFyb3VuZHMgZm9yIG1pc3NpbmcgZmVhdHVyZXMgaW4gcHJldmlvdXMga2VybmVsIHZlcnNpb24KKyAqCisgKiBAcmVtYXJrIENvcHlyaWdodCAyMDAyIE9Qcm9maWxlIGF1dGhvcnMKKyAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCisgKgorICogQGF1dGhvciBKb2huIExldm9uCisgKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKKyAqLworCisKKyNpZm5kZWYgQ09NUEFUX0gKKyNkZWZpbmUgQ09NUEFUX0gKKworI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpZmRlZiBIQVZFX0xJTlVYX1NQSU5MT0NLX0hFQURFUgorLyogRklYTUUgZG8gd2UgbmVlZCB0aGlzIHN0aWxsID8gKi8KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2VuZGlmCisKKyNkZWZpbmUgVl9CRUZPUkUoYSwgYiwgYykgKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKGEsIGIsIGMpKQorI2RlZmluZSBWX0FUX0xFQVNUKGEsIGIsIGMpIChMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oYSwgYiwgYykpCisKKyNpZiBWX0JFRk9SRSgyLCA0LCAwKQorCSNpbmNsdWRlICJjb21wYXQyMi5oIgorI2Vsc2UKKwkjaW5jbHVkZSAiY29tcGF0MjQuaCIKKyNlbmRpZgorCisjaW5jbHVkZSAib3BfY2FjaGUuaCIKKworLyogVGhpbmdzIHRoYXQgY2Fubm90IHJlbHkgb24gYSBwYXJ0aWN1bGFyIGxpbnV4IHZlcnNpb24gb3IgYXJlIG5lZWRlZCBiZXR3ZWVuCisgKiBtYWpvciByZWxlYXNlICovCisKKyNpZm5kZWYgQlVHX09OCisjZGVmaW5lIEJVR19PTihwKSBkbyB7IGlmIChwKSBCVUcoKTsgfSB3aGlsZSAoMCkKKyNlbmRpZgorCisjaWZuZGVmIE1PRFVMRV9MSUNFTlNFCisjZGVmaW5lIE1PRFVMRV9MSUNFTlNFKHgpCisjZW5kaWYKKworLyogQ29tcGlsZXIgd29yay1hcm91bmQgKi8KKworLyogYnJhbmNoIHByZWRpY3Rpb24gKi8KKyNpZm5kZWYgbGlrZWx5CisJI2lmZGVmIEVYUEVDVF9PSworCQkjZGVmaW5lIGxpa2VseShhKSBfX2J1aWx0aW5fZXhwZWN0KChhKSwgMSkKKwkjZWxzZQorCQkjZGVmaW5lIGxpa2VseShhKSAoYSkKKwkjZW5kaWYKKyNlbmRpZgorI2lmbmRlZiB1bmxpa2VseQorCSNpZmRlZiBFWFBFQ1RfT0sKKwkJI2RlZmluZSB1bmxpa2VseShhKSBfX2J1aWx0aW5fZXhwZWN0KChhKSwgMCkKKwkjZWxzZQorCQkjZGVmaW5lIHVubGlrZWx5KGEpIChhKQorCSNlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgQ09ORklHX1g4Nl82NAorI2RlZmluZSBWTUFMTE9DXzMyKHN6KSB2bWFsbG9jXzMyKHN6KQorI2Vsc2UgLyogQ09ORklHX1g4Nl82NCAqLworI2RlZmluZSBWTUFMTE9DXzMyKHN6KSB2bWFsbG9jKHN6KQorI2VuZGlmIC8qIENPTkZJR19YODZfNjQgKi8KKworI2VuZGlmIC8qIENPTVBBVF9IICovCmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9tb2R1bGUvY29tcGF0MjIuaCBiL29wcm9maWxlLTAuOS43L21vZHVsZS9jb21wYXQyMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjMjk0ZDMKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9tb2R1bGUvY29tcGF0MjIuaApAQCAtMCwwICsxLDE1MyBAQAorLyoqCisgKiBAZmlsZSBjb21wYXQyMi5oCisgKiBDb21wYXRhYmlsaXR5IGZ1bmN0aW9ucyBmb3IgMi4yIGtlcm5lbHMKKyAqCisgKiBAcmVtYXJrIENvcHlyaWdodCAyMDAyIE9Qcm9maWxlIGF1dGhvcnMKKyAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCisgKgorICogQGF1dGhvciBKb2huIExldm9uCisgKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKKyAqLworCisjaWZuZGVmIENPTVBBVDIyX0gKKyNkZWZpbmUgQ09NUEFUMjJfSAorCisjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KKworI2RlZmluZSBsb2NhbF9pcnFfZGlzYWJsZSgpCV9fY2xpKCkKKyNkZWZpbmUgbG9jYWxfaXJxX2VuYWJsZSgpCV9fc3RpKCkKKyNkZWZpbmUgcHRlX3BhZ2VfYWRkcmVzcyhhKSBwdGVfcGFnZShhKQorCisjZGVmaW5lIEdFVF9WTV9PRkZTRVQodikgKCh2KS0+dm1fb2Zmc2V0KQorI2RlZmluZSBNT0RVTEVfTElDRU5TRShsKQorI2RlZmluZSBORUVEXzJfMl9ERU5UUklFUworI2RlZmluZSBJTkNfVVNFX0NPVU5UX01BWUJFIE1PRF9JTkNfVVNFX0NPVU5UCisjZGVmaW5lIERFQ19VU0VfQ09VTlRfTUFZQkUgTU9EX0RFQ19VU0VfQ09VTlQKKyNkZWZpbmUgbG9ja19leGVjdmUgbG9ja19rZXJuZWwKKyNkZWZpbmUgdW5sb2NrX2V4ZWN2ZSB1bmxvY2tfa2VybmVsCisKKy8qIEJLTC1wcm90ZWN0ZWQgb24gMi4yICovCisjZGVmaW5lIGxvY2tfbW1hcChtbSkgZG8ge30gd2hpbGUgKDApCisjZGVmaW5lIHVubG9ja19tbWFwKG1tKSBkbyB7fSB3aGlsZSAoMCkKKworLyogb24gMi4yIHdlIHVzZSBwaWQgYXMgdGdpZCwgdGhyZWFkIHNlcGVyYXRpb24gaXMgcG9zc2libGUgYnV0CisgKiBlYWNoIHRocmVhZCBpcyBpbiBpdHMgb3duIHRocmVhZCBncm91cCAqLworc3RhdGljIGlubGluZSBwaWRfdCBvcF9nZXRfdGdpZCh2b2lkKQoreworCXJldHVybiBjdXJyZW50LT5waWQ7Cit9CisKKy8qIHRoZSB3YWtlX3VwIHBhdGggZG9lc24ndCBkaXNhYmxlIGludGVycnVwdHMgZm9yIHdhaXQgcXVldWUKKyAqIG1hbmlwdWxhdGlvbi4gU28gbGV0J3MgZm9yY2UgaXQgdG8uCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBvcHJvZl93YWtlX3VwKHN0cnVjdCB3YWl0X3F1ZXVlICoqcSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXNhdmVfZmxhZ3MoZmxhZ3MpOworCWNsaSgpOworCXdha2VfdXAocSk7CisJcmVzdG9yZV9mbGFncyhmbGFncyk7Cit9CisKK2V4dGVybiBpbnQgd2luZF9kZW50cmllc18yXzIoc3RydWN0IGRlbnRyeSAqIGRlbnRyeSk7CitleHRlcm4gdWludCBkb19wYXRoX2hhc2hfMl8yKHN0cnVjdCBkZW50cnkgKiBkZW50cnkpOworI2RlZmluZSB3aW5kX2RlbnRyaWVzKGQsIHYsIHIsIG0pIHdpbmRfZGVudHJpZXNfMl8yKGQpCisjZGVmaW5lIGhhc2hfcGF0aChmKSBkb19wYXRoX2hhc2hfMl8yKChmKS0+Zl9kZW50cnkpCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBsb2NrX291dF9tbWFwKHZvaWQpCit7CisJbG9ja19rZXJuZWwoKTsKKwlkb3duKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdW5sb2NrX291dF9tbWFwKHZvaWQpCit7CisJdW5sb2NrX2tlcm5lbCgpOworCXVwKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOworfQorCisvKiBkaWZmZXJlbnQgcmVxdWVzdF9yZWdpb24gKi8KKyNkZWZpbmUgcmVxdWVzdF9yZWdpb25fY2hlY2sgY29tcGF0X3JlcXVlc3RfcmVnaW9uCit2b2lkICogY29tcGF0X3JlcXVlc3RfcmVnaW9uICh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIG4sIGNoYXIgY29uc3QgKiBuYW1lKTsKKworI2RlZmluZSBfX2V4aXQKKworI2RlZmluZSB2aXJ0X3RvX3BhZ2UodmEpIE1BUF9OUih2YSkKKworLyogMi4yIGhhcyBubyBjcHVfbnVtYmVyX21hcCBvbiBVUCAqLworI2lmZGVmIENPTkZJR19TTVAKKwkjZGVmaW5lIG9wX2NwdV9pZCgpIGNwdV9udW1iZXJfbWFwW3NtcF9wcm9jZXNzb3JfaWQoKV0KKyNlbHNlCisJI2RlZmluZSBvcF9jcHVfaWQoKSBzbXBfcHJvY2Vzc29yX2lkKCkKKyNlbmRpZiAvKiBDT05GSUdfU01QICovCisKKy8qIHByb3ZpZGUgYSB3b3JraW5nIHNtcF9jYWxsX2Z1bmN0aW9uICovCisjaWYgIWRlZmluZWQoQ09ORklHX1NNUCkKKworCSN1bmRlZiBzbXBfY2FsbF9mdW5jdGlvbgorCXN0YXRpYyBpbnQgaW5saW5lIHNtcF9jYWxsX2Z1bmN0aW9uICh2b2lkICgqZnVuYykgKHZvaWQgKiBpbmZvKSwgdm9pZCAqIGluZm8sCisJCQkJCSAgICAgaW50IHJldHJ5LCBpbnQgd2FpdCkKKwl7CisJCXJldHVybiAwOworCX0KKworI2VuZGlmIC8qICFDT05GSUdfU01QICovCisKKyNpZiBWX0JFRk9SRSgyLCAyLCAxOCkKKworCS8qIDIuMi4xOCBpbnRyb2R1Y2VkIG1vZHVsZV9pbml0ICovCisJLyogTm90IHN1cmUgd2hhdCB2ZXJzaW9uIGFsaWFzZXMgd2VyZSBpbnRyb2R1Y2VkIGluLCBidXQgY2VydGFpbmx5IGluIDIuOTEuNjYuICAqLworCSNpZiBfX0dOVUNfXyA+IDIgfHwgKF9fR05VQ19fID09IDIgJiYgX19HTlVDX01JTk9SX18gPj0gOTEpCisJCSNkZWZpbmUgbW9kdWxlX2luaXQoeCkJaW50IGluaXRfbW9kdWxlKHZvaWQpIF9fYXR0cmlidXRlX18oKGFsaWFzKCN4KSkpOworCQkjZGVmaW5lIG1vZHVsZV9leGl0KHgpCXZvaWQgY2xlYW51cF9tb2R1bGUodm9pZCkgX19hdHRyaWJ1dGVfXygoYWxpYXMoI3gpKSk7CisJI2Vsc2UKKwkJI2RlZmluZSBtb2R1bGVfaW5pdCh4KQlpbnQgaW5pdF9tb2R1bGUodm9pZCkgeyByZXR1cm4geCgpOyB9CisJCSNkZWZpbmUgbW9kdWxlX2V4aXQoeCkJdm9pZCBjbGVhbnVwX21vZHVsZSh2b2lkKSB7IHgoKTsgfQorCSNlbmRpZgorCisJLyogMi4yLjE4IGludHJvZHVjZWQgdm1hbGxvY18zMiAqLworCSNkZWZpbmUgdm1hbGxvY18zMiB2bWFsbG9jCisKKwkvKiAyLjIuMTggYWRkIGRvdWJsZWQgbGlua2VkIGxpc3Qgd2FpdF9xdWV1ZSBhbmQgbXV0ZXggKi8KKwkjZGVmaW5lIERFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKHEpIHN0cnVjdCB3YWl0X3F1ZXVlICogcSA9IE5VTEwKKwkjZGVmaW5lIERFQ0xBUkVfTVVURVgoZm9vKQlzdHJ1Y3Qgc2VtYXBob3JlIGZvbyA9IE1VVEVYCisKKwkvKiAyLjIuMTggYWRkIFRISVNfTU9EVUxFICovCisJI2RlZmluZSBUSElTX01PRFVMRSAoJl9fdGhpc19tb2R1bGUpCisKKwkvKiAyLjIuMTggYWRkIEJVRygpIEZJWE1FOiB0aGlzIGlzIGFyY2ggZGVwZW5kYW50IHdvdWxkIG11c3QgdXNlCisJICogKihjaGFyICopMCA9IDAgaW5zdGVhZCA/ICovCisJI2RlZmluZSBCVUcoKSBfX2FzbV9fIF9fdm9sYXRpbGVfXygidWQyXG4iKTsKKworI2VuZGlmIC8qIFZfQkVGT1JFKDIsMiwxOCkgKi8KKworLyogMi4yLjE4IGludHJvZHVjZWQgdGhlIHJ0YyBsb2NrICovCisjaWZkZWYgUlRDX0xPQ0sKKwkjZGVmaW5lIGxvY2tfcnRjKGYpIHNwaW5fbG9ja19pcnFzYXZlKCZydGNfbG9jaywgZikKKwkjZGVmaW5lIHVubG9ja19ydGMoZikgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnRjX2xvY2ssIGYpCisjZWxzZQorCSNkZWZpbmUgbG9ja19ydGMoZikgZG8geyBzYXZlX2ZsYWdzKGYpOyBjbGkoKTsgfSB3aGlsZSAoMCkKKwkjZGVmaW5lIHVubG9ja19ydGMoZikgcmVzdG9yZV9mbGFncyhmKQorI2VuZGlmIC8qIFJUQ19MT0NLICovCisKKyNpZiBWX0FUX0xFQVNUKDIsIDIsIDIwKQorCSNkZWZpbmUgUFRSQUNFX09GRih0KSAoKHQpLT5wdHJhY2UgJj0gflBUX0RUUkFDRSkKKyNlbHNlCisJI2RlZmluZSBQVFJBQ0VfT0ZGKHQpICgodCktPmZsYWdzICY9IH5QRl9EVFJBQ0UpCisjZW5kaWYKKworLyogMi4yLjIxIGludHJvZHVjZWQgY3B1aWRfZWR4ICovCisjaWYgVl9CRUZPUkUoMiwgMiwgMjEpCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBjcHVpZF9lZHgodW5zaWduZWQgaW50IG9wKQoreworCXVuc2lnbmVkIGludCBlYXgsIGVkeDsKKworCV9fYXNtX18oImNwdWlkIgorCQk6ICI9YSIgKGVheCksICI9ZCIgKGVkeCkKKwkJOiAiMCIgKG9wKQorCQk6ICJieCIsICJjeCIpOworCXJldHVybiBlZHg7Cit9CisjZW5kaWYKKworI2VuZGlmIC8qIENPTVBBVDIyX0ggKi8KZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L21vZHVsZS9jb21wYXQyNC5oIGIvb3Byb2ZpbGUtMC45LjcvbW9kdWxlL2NvbXBhdDI0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDkzN2I4YwotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L21vZHVsZS9jb21wYXQyNC5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qKgorICogQGZpbGUgY29tcGF0MjQuaAorICogQ29tcGF0YWJpbGl0eSBmdW5jdGlvbnMgZm9yIDIuNCBrZXJuZWxzCisgKgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMiBPUHJvZmlsZSBhdXRob3JzCisgKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORworICoKKyAqIEBhdXRob3IgSm9obiBMZXZvbgorICogQGF1dGhvciBQaGlsaXBwZSBFbGllCisgKi8KKworI2lmbmRlZiBDT01QQVQyNF9ICisjZGVmaW5lIENPTVBBVDI0X0gKKworI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKworc3RhdGljIGlubGluZSBwaWRfdCBvcF9nZXRfdGdpZCh2b2lkKQoreworCXJldHVybiBjdXJyZW50LT50Z2lkOworfQorCisjZGVmaW5lIHB0ZV9wYWdlX2FkZHJlc3MoYSkgcGFnZV9hZGRyZXNzKHB0ZV9wYWdlKGEpKQorI2RlZmluZSBvcHJvZl93YWtlX3VwKHcpIHdha2VfdXAodykKKyNkZWZpbmUgbG9ja19ydGMoZikgc3Bpbl9sb2NrX2lycXNhdmUoJnJ0Y19sb2NrLCBmKQorI2RlZmluZSB1bmxvY2tfcnRjKGYpIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJ0Y19sb2NrLCBmKQorI2RlZmluZSB3aW5kX2RlbnRyaWVzKGQsIHYsIHIsIG0pIHdpbmRfZGVudHJpZXNfMl80KGQsIHYsIHIsIG0pCitleHRlcm4gdWludCBkb19wYXRoX2hhc2hfMl80KHN0cnVjdCBkZW50cnkgKiBkZW50cnksIHN0cnVjdCB2ZnNtb3VudCAqIHZmc21udCk7CisjZGVmaW5lIGhhc2hfcGF0aChmKSBkb19wYXRoX2hhc2hfMl80KChmKS0+Zl9kZW50cnksIChmKS0+Zl92ZnNtbnQpCisjZGVmaW5lIHJlcXVlc3RfcmVnaW9uX2NoZWNrIHJlcXVlc3RfcmVnaW9uCisjZGVmaW5lIG9wX2NwdV9pZCgpIGNwdV9udW1iZXJfbWFwKHNtcF9wcm9jZXNzb3JfaWQoKSkKKyNkZWZpbmUgR0VUX1ZNX09GRlNFVCh2KSAoKHYpLT52bV9wZ29mZiA8PCBQQUdFX1NISUZUKQorI2RlZmluZSBQVFJBQ0VfT0ZGKHQpICgodCktPnB0cmFjZSAmPSB+UFRfRFRSQUNFKQorI2RlZmluZSBsb2NrX2V4ZWN2ZSgpIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgdW5sb2NrX2V4ZWN2ZSgpIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgbG9ja19vdXRfbW1hcCgpIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgdW5sb2NrX291dF9tbWFwKCkgZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBIQVZFX01NQVAyCisjZGVmaW5lIEhBVkVfRklMRV9PUEVSQVRJT05TX09XTkVSCisKKy8qIC0+b3duZXIgZmllbGQgaW4gMi40ICovCisjZGVmaW5lIElOQ19VU0VfQ09VTlRfTUFZQkUKKyNkZWZpbmUgREVDX1VTRV9DT1VOVF9NQVlCRQorCisvKiBubyBnbG9iYWwgd2FpdHF1ZXVlIHNwaW5sb2NrIGluIDIuNCAqLworI2RlZmluZSB3cV9pc19sb2NrYWJsZSgpICgxKQorCisvKiAyLjQuMyBpbnRyb2R1Y2VkIHJ3IG1tYXAgc2VtYXBob3JlICAqLworI2lmIFZfQVRfTEVBU1QoMiwgNCwgMykKKwkjZGVmaW5lIGxvY2tfbW1hcChtbSkgZG93bl9yZWFkKCZtbS0+bW1hcF9zZW0pCisJI2RlZmluZSB1bmxvY2tfbW1hcChtbSkgdXBfcmVhZCgmbW0tPm1tYXBfc2VtKQorI2Vsc2UKKwkjZGVmaW5lIGxvY2tfbW1hcChtbSkgZG93bigmbW0tPm1tYXBfc2VtKQorCSNkZWZpbmUgdW5sb2NrX21tYXAobW0pIHVwKCZtbS0+bW1hcF9zZW0pCisjZW5kaWYKKworLyogMi40LjI2IGV4cG9ydGVkIHRoZSBuZWVkZWQgc3R1ZmYgZm9yIEhUIHN1cHBvcnQgKi8KKyNpZiBWX0FUX0xFQVNUKDIsIDQsIDI2KSAmJiBkZWZpbmVkKENPTkZJR19TTVApCisjZGVmaW5lIEhUX1NVUFBPUlQKKyNlbmRpZgorCisjZW5kaWYgLyogQ09NUEFUMjRfSCAqLwpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvbW9kdWxlL2lhNjQvSUE2NGVudHJ5LmggYi9vcHJvZmlsZS0wLjkuNy9tb2R1bGUvaWE2NC9JQTY0ZW50cnkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43N2MyODc0Ci0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvbW9kdWxlL2lhNjQvSUE2NGVudHJ5LmgKQEAgLTAsMCArMSw3OSBAQAorLyoqCisgKiBAZmlsZSBJQTY0ZW50cnkuaAorICoKKyAqIEByZW1hcmsgQ29weSBvZiBzb3VyY2UgY29kZSBmcm9tIGxpbnV4IGtlcm5lbAorICogQHJlbWFyayBsaW51eC9hcmNoL2lhNjQva2VybmVsL2VudHJ5LmgKKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisvKgorICogUHJlc2VydmVkIHJlZ2lzdGVycyB0aGF0IGFyZSBzaGFyZWQgYmV0d2VlbiBjb2RlIGluIGl2dC5TIGFuZCBlbnRyeS5TLiAgQmUKKyAqIGNhcmVmdWwgbm90IHRvIHN0ZXAgb24gdGhlc2UhCisgKi8KKworI2RlZmluZSBwS2VybgkJcDIgLyoqPCB3aWxsIGxlYXZlX2tlcm5lbCByZXR1cm4gdG8ga2VybmVsLW1vZGU/ICovCisjZGVmaW5lIHBVc2VyCQlwMyAvKio8IHdpbGwgbGVhdmVfa2VybmVsIHJldHVybiB0byB1c2VyLW1vZGU/ICovCisjZGVmaW5lIHBTeXMJCXA0IC8qKjwgYXJlIHdlIHByb2Nlc3NpbmcgYSAoc3luY2hyb25vdXMpIHN5c3RlbSBjYWxsPyAqLworI2RlZmluZSBwTm9uU3lzCQlwNSAvKio8IGNvbXBsZW1lbnQgb2YgcFN5cyAqLworCisjZGVmaW5lIFBUKGYpCQkoSUE2NF9QVF9SRUdTXyMjZiMjX09GRlNFVCkKKyNkZWZpbmUgU1coZikJCShJQTY0X1NXSVRDSF9TVEFDS18jI2YjI19PRkZTRVQpCisKKyNkZWZpbmUgUFRfUkVHU19TQVZFUyhvZmYpCQkJXAorCS51bndhYmkgQHN2cjQsICdpJzsJCQlcCisJLmZmcmFtZSBJQTY0X1BUX1JFR1NfU0laRSsxNisob2ZmKTsJXAorCS5zcGlsbHNwIHJwLCBQVChDUl9JSVApKzE2KyhvZmYpOwlcCisJLnNwaWxsc3AgYXIucGZzLCBQVChDUl9JRlMpKzE2KyhvZmYpOwlcCisJLnNwaWxsc3AgYXIudW5hdCwgUFQoQVJfVU5BVCkrMTYrKG9mZik7CVwKKwkuc3BpbGxzcCBhci5mcHNyLCBQVChBUl9GUFNSKSsxNisob2ZmKTsJXAorCS5zcGlsbHNwIHByLCBQVChQUikrMTYrKG9mZik7CisKKyNkZWZpbmUgUFRfUkVHU19VTldJTkRfSU5GTyhvZmYpCQlcCisJLnByb2xvZ3VlOwkJCQlcCisJUFRfUkVHU19TQVZFUyhvZmYpOwkJCVwKKwkuYm9keQorCisjZGVmaW5lIFNXSVRDSF9TVEFDS19TQVZFUyhvZmYpCQkJCQkJXAorCS5zYXZlc3AgYXIudW5hdCwgU1coQ0FMTEVSX1VOQVQpKzE2KyhvZmYpOwkJCVwKKwkuc2F2ZXNwIGFyLmZwc3IsIFNXKEFSX0ZQU1IpKzE2KyhvZmYpOwkJCQlcCisJLnNwaWxsc3AgZjIsIFNXKEYyKSsxNisob2ZmKTsgLnNwaWxsc3AgZjMsIFNXKEYzKSsxNisob2ZmKTsJXAorCS5zcGlsbHNwIGY0LCBTVyhGNCkrMTYrKG9mZik7IC5zcGlsbHNwIGY1LCBTVyhGNSkrMTYrKG9mZik7CVwKKwkuc3BpbGxzcCBmMTYsIFNXKEYxNikrMTYrKG9mZik7IC5zcGlsbHNwIGYxNywgU1coRjE3KSsxNisob2ZmKTsJXAorCS5zcGlsbHNwIGYxOCwgU1coRjE4KSsxNisob2ZmKTsgLnNwaWxsc3AgZjE5LCBTVyhGMTkpKzE2KyhvZmYpOwlcCisJLnNwaWxsc3AgZjIwLCBTVyhGMjApKzE2KyhvZmYpOyAuc3BpbGxzcCBmMjEsIFNXKEYyMSkrMTYrKG9mZik7CVwKKwkuc3BpbGxzcCBmMjIsIFNXKEYyMikrMTYrKG9mZik7IC5zcGlsbHNwIGYyMywgU1coRjIzKSsxNisob2ZmKTsJXAorCS5zcGlsbHNwIGYyNCwgU1coRjI0KSsxNisob2ZmKTsgLnNwaWxsc3AgZjI1LCBTVyhGMjUpKzE2KyhvZmYpOwlcCisJLnNwaWxsc3AgZjI2LCBTVyhGMjYpKzE2KyhvZmYpOyAuc3BpbGxzcCBmMjcsIFNXKEYyNykrMTYrKG9mZik7CVwKKwkuc3BpbGxzcCBmMjgsIFNXKEYyOCkrMTYrKG9mZik7IC5zcGlsbHNwIGYyOSwgU1coRjI5KSsxNisob2ZmKTsJXAorCS5zcGlsbHNwIGYzMCwgU1coRjMwKSsxNisob2ZmKTsgLnNwaWxsc3AgZjMxLCBTVyhGMzEpKzE2KyhvZmYpOwlcCisJLnNwaWxsc3AgcjQsIFNXKFI0KSsxNisob2ZmKTsgLnNwaWxsc3AgcjUsIFNXKFI1KSsxNisob2ZmKTsJXAorCS5zcGlsbHNwIHI2LCBTVyhSNikrMTYrKG9mZik7IC5zcGlsbHNwIHI3LCBTVyhSNykrMTYrKG9mZik7CVwKKwkuc3BpbGxzcCBiMCwgU1coQjApKzE2KyhvZmYpOyAuc3BpbGxzcCBiMSwgU1coQjEpKzE2KyhvZmYpOwlcCisJLnNwaWxsc3AgYjIsIFNXKEIyKSsxNisob2ZmKTsgLnNwaWxsc3AgYjMsIFNXKEIzKSsxNisob2ZmKTsJXAorCS5zcGlsbHNwIGI0LCBTVyhCNCkrMTYrKG9mZik7IC5zcGlsbHNwIGI1LCBTVyhCNSkrMTYrKG9mZik7CVwKKwkuc3BpbGxzcCBhci5wZnMsIFNXKEFSX1BGUykrMTYrKG9mZik7IC5zcGlsbHNwIGFyLmxjLCBTVyhBUl9MQykrMTYrKG9mZik7CVwKKwkuc3BpbGxzcCBAcHJpdW5hdCwgU1coQVJfVU5BVCkrMTYrKG9mZik7CQkJCVwKKwkuc3BpbGxzcCBhci5ybmF0LCBTVyhBUl9STkFUKSsxNisob2ZmKTsJCQkJXAorCS5zcGlsbHNwIGFyLmJzcHN0b3JlLCBTVyhBUl9CU1BTVE9SRSkrMTYrKG9mZik7CQkJXAorCS5zcGlsbHNwIHByLCBTVyhQUikrMTYrKG9mZikpCisKKyNkZWZpbmUgRE9fU0FWRV9TV0lUQ0hfU1RBQ0sJCQlcCisJbW92bCByMjg9MWY7CQkJCVwKKwk7OwkJCQkJXAorCS5mZnJhbWUgSUE2NF9TV0lUQ0hfU1RBQ0tfU0laRTsJCVwKKwlhZGRzIHNwPS1JQTY0X1NXSVRDSF9TVEFDS19TSVpFLCBzcDsJXAorCW1vdi5yZXQuc3B0ayBiNz1yMjgsIDFmOwkJXAorCVNXSVRDSF9TVEFDS19TQVZFUygwKTsJCQlcCisJYnIuY29uZC5zcHRrLm1hbnkgc2F2ZV9zd2l0Y2hfc3RhY2s7CVwKKzE6CisKKyNkZWZpbmUgRE9fTE9BRF9TV0lUQ0hfU1RBQ0sJCQlcCisJbW92bCByMjg9MWY7CQkJCVwKKwk7OwkJCQkJXAorCWludmFsYTsJCQkJCVwKKwltb3YucmV0LnNwdGsgYjc9cjI4LCAxZjsJCVwKKwlici5jb25kLnNwdGsubWFueSBsb2FkX3N3aXRjaF9zdGFjazsJXAorMToJLnJlc3RvcmUgc3A7CQkJCVwKKwlhZGRzIHNwPUlBNjRfU1dJVENIX1NUQUNLX1NJWkUsIHNwCmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9tb2R1bGUvaWE2NC9JQTY0bWluc3RhdGUuaCBiL29wcm9maWxlLTAuOS43L21vZHVsZS9pYTY0L0lBNjRtaW5zdGF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyYzMyMGYKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9tb2R1bGUvaWE2NC9JQTY0bWluc3RhdGUuaApAQCAtMCwwICsxLDI4MCBAQAorLyoqCisgKiBAZmlsZSBJQTY0bWluc3RhdGUuaAorICoKKyAqIEByZW1hcmsgQ29weSBvZiBzb3VyY2UgY29kZSBmcm9tIGxpbnV4IGtlcm5lbAorICogQHJlbWFyayBsaW51eC9hcmNoL2lhNjQva2VybmVsL21pbnN0YXRlLmgKKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisjaW5jbHVkZSAiSUE2NGVudHJ5LmgiCisKKy8qCisgKiBBIGNvdXBsZSBvZiBjb252ZW5pZW5jZSBtYWNyb3MgdGhhdCBtYWtlIHdyaXRpbmcgYW5kIHJlYWRpbmcKKyAqIFNBVkVfTUlOIGFuZCBTQVZFX1JFU1QgZWFzaWVyLgorICovCisjZGVmaW5lIHJBUlBSCQlyMzEKKyNkZWZpbmUgckNSSUZTCQlyMzAKKyNkZWZpbmUgckNSSVBTUgkJcjI5CisjZGVmaW5lIHJDUklJUAkJcjI4CisjZGVmaW5lIHJBUlJTQwkJcjI3CisjZGVmaW5lIHJBUlBGUwkJcjI2CisjZGVmaW5lIHJBUlVOQVQJCXIyNQorI2RlZmluZSByQVJSTkFUCQlyMjQKKyNkZWZpbmUgckFSQlNQU1RPUkUJcjIzCisjZGVmaW5lIHJLUkJTCQlyMjIKKyNkZWZpbmUgckI2CQlyMjEKKyNkZWZpbmUgclIxCQlyMjAKKworLyoKKyAqIEhlcmUgc3RhcnQgdGhlIHNvdXJjZSBkZXBlbmRlbnQgbWFjcm9zLgorICovCisKKy8qCisgKiBGb3IgaXZ0LnMgd2Ugd2FudCB0byBhY2Nlc3MgdGhlIHN0YWNrIHZpcnR1YWxseSBzbyB3ZSBkb250IGhhdmUgCisgKiB0byBkaXNhYmxlIHRyYW5zbGF0aW9uIG9uIGludGVycnVwdHMuCisgKi8KKyNkZWZpbmUgTUlOU1RBVEVfU1RBUlRfU0FWRV9NSU5fVklSVAkJCQkJXAorCS8qIHIxID0gY3VycmVudCAodmlydHVhbCkgKi8JCQkJCVwKKwlkZXAgcjE9LTEsIHIxLCA2MSwgMzsJCQkJCQlcCisJLyogc2V0IGVuZm9yY2VkIGxhenkgbW9kZSwgcGwgMCwgbGl0dGxlLWVuZGlhbiwgbG9hZHJzPTAgKi8JXAorKHBVc2VyKQltb3YgYXIucnNjPTA7CQkJCQkJCVwKKwk7OwkJCQkJCQkJXAorCS8qIGNvbXB1dGUgYmFzZSBvZiBSQlMgKi8JCQkJCVwKKyhwVXNlcikJYWRkbCByS1JCUz1JQTY0X1JCU19PRkZTRVQsIHIxOwkJCQkJXAorKHBVc2VyKQltb3YgckFSUk5BVD1hci5ybmF0OwkJCQkJCVwKKwkvKiBnZXQgc3AgICovCQkJCQkJCVwKKyhwS2VybikgbW92IHIxPXNwOwkJCQkJCQlcCisJOzsJCQkJCQkJCVwKKwkvKiBjb21wdXRlIGJhc2Ugb2YgbWVtb3J5IHN0YWNrICovCQkJCVwKKyhwVXNlcikJYWRkbCByMT1JQTY0X1NUS19PRkZTRVQtSUE2NF9QVF9SRUdTX1NJWkUsIHIxOwkJCVwKKwkvKiBzYXZlIGFyLmJzcHN0b3JlICovCQkJCQkJXAorKHBVc2VyKQltb3YgckFSQlNQU1RPUkU9YXIuYnNwc3RvcmU7CQkJCQlcCisJOzsJCQkJCQkJCVwKKwkvKiBpZiBpbiBrZXJuZWwgbW9kZSwgdXNlIHNwIChyMTIpICovCQkJCVwKKyhwS2VybikgYWRkbCByMT0tSUE2NF9QVF9SRUdTX1NJWkUsIHIxOwkJCQkJXAorCS8qIHN3aXRjaCB0byBrZXJuZWwgUkJTICovCQkJCQlcCisocFVzZXIpCW1vdiBhci5ic3BzdG9yZT1yS1JCUzsJCQkJCQlcCisJOzsJCQkJCQkJCVwKKyhwVXNlcikJbW92IHIxOD1hci5ic3A7CQkJCQkJCVwKKwkvKiBzZXQgZWFnZXIgbW9kZSwgcGwgMCwgbGl0dGxlLWVuZGlhbiwgbG9hZHJzPTAgKi8JCVwKKyhwVXNlcikJbW92IGFyLnJzYz0weDM7CisKKyNkZWZpbmUgTUlOU1RBVEVfRU5EX1NBVkVfTUlOX1ZJUlQJCQkJCVwKKwkvKiBtYWtlIGBjdXJyZW50JyBhIGtlcm5lbCB2aXJ0dWFsIGFkZHJlc3MgKi8JCQlcCisJb3IgcjEzPXIxMywgcjE0OwkJCQkJCVwKKwkvKiBzd2l0Y2ggYmFjayB0byBiYW5rIDEgKG11c3QgYmUgbGFzdCBpbiBpbnNuIGdyb3VwKSAqLwlcCisJYnN3LjE7CQkJCQkJCQlcCisJOzsKKworLyoKKyAqIEZvciBtY2FfYXNtLlMgd2Ugd2FudCB0byBhY2Nlc3MgdGhlIHN0YWNrIHBoeXNpY2FsbHkgc2luY2UgdGhlIHN0YXRlCisgKiBpcyBzYXZlZCBiZWZvcmUgd2UgZ28gdmlydHVhbCBhbmQgZG9udCB3YW50IHRvIGRlc3Ryb3kgdGhlIGlpcCBvciBpcHNyLgorICovCisjZGVmaW5lIE1JTlNUQVRFX1NUQVJUX1NBVkVfTUlOX1BIWVMJCQkJCVwKKyhwS2VybikgbW92bCBzcD1pYTY0X2luaXRfc3RhY2srSUE2NF9TVEtfT0ZGU0VULUlBNjRfUFRfUkVHU19TSVpFOwlcCisJLyogc2V0IGVuZm9yY2VkIGxhenkgbW9kZSwgcGwgMCwgbGl0dGxlLWVuZGlhbiwgbG9hZHJzPTAgKi8JXAorKHBVc2VyKQltb3YgYXIucnNjPTA7CQkJCQkJCVwKKwkvKiBjb21wdXRlIGJhc2Ugb2YgcmVnaXN0ZXIgYmFja2luZyBzdG9yZSAqLwkJCVwKKyhwVXNlcikJYWRkbCByS1JCUz1JQTY0X1JCU19PRkZTRVQsIHIxOwkJCQkJXAorCTs7CQkJCQkJCQlcCisocFVzZXIpCW1vdiByQVJSTkFUPWFyLnJuYXQ7CQkJCQkJXAorCS8qIGNvbXB1dGUgcGh5c2ljYWwgYWRkciBvZiBzcAkqLwkJCQlcCisocEtlcm4pIGRlcCByMT0wLCBzcCwgNjEsIDM7CQkJCQkJXAorCS8qIGNvbXB1dGUgYmFzZSBvZiBtZW1vcnkgc3RhY2sgKi8JCQkJXAorKHBVc2VyKQlhZGRsIHIxPUlBNjRfU1RLX09GRlNFVC1JQTY0X1BUX1JFR1NfU0laRSwgcjE7CQkJXAorCS8qIHNhdmUgYXIuYnNwc3RvcmUgKi8JCQkJCQlcCisocFVzZXIpCW1vdiByQVJCU1BTVE9SRT1hci5ic3BzdG9yZTsJCQkJCVwKKwkvKiBjb21wdXRlIGtlcm5lbCB2aXJ0dWFsIGFkZHIgb2YgUkJTICovCQkJXAorKHBVc2VyKQlkZXAgcktSQlM9LTEsIHJLUkJTLCA2MSwgMzsJCQkJCVwKKwk7OwkJCQkJCQkJXAorCS8qIGlmIGluIGtlcm5lbCBtb2RlLCB1c2Ugc3AgKHIxMikgKi8JCQkJXAorKHBLZXJuKSBhZGRsIHIxPS1JQTY0X1BUX1JFR1NfU0laRSwgcjE7CQkJCQlcCisJLyogc3dpdGNoIHRvIGtlcm5lbCBSQlMgKi8JCQkJCVwKKyhwVXNlcikJbW92IGFyLmJzcHN0b3JlPXJLUkJTOwkJCQkJCVwKKwk7OwkJCQkJCQkJXAorKHBVc2VyKQltb3YgcjE4PWFyLmJzcDsJCQkJCQkJXAorCS8qIHNldCBlYWdlciBtb2RlLCBwbCAwLCBsaXR0bGUtZW5kaWFuLCBsb2FkcnM9MCAqLwkJXAorKHBVc2VyKQltb3YgYXIucnNjPTB4MzsKKworI2RlZmluZSBNSU5TVEFURV9FTkRfU0FWRV9NSU5fUEhZUwkJCQkJXAorCS8qIG1ha2Ugc3AgYSBrZXJuZWwgdmlydHVhbCBhZGRyZXNzICovCQkJCVwKKwlvciByMTI9cjEyLCByMTQ7CQkJCQkJXAorCS8qIG1ha2UgYGN1cnJlbnQnIGEga2VybmVsIHZpcnR1YWwgYWRkcmVzcyAqLwkJCVwKKwlvciByMTM9cjEzLCByMTQ7CQkJCQkJXAorCTs7CisKKyNpZmRlZiBNSU5TVEFURV9WSVJUCisjIGRlZmluZSBNSU5TVEFURV9TVEFSVF9TQVZFX01JTglNSU5TVEFURV9TVEFSVF9TQVZFX01JTl9WSVJUCisjIGRlZmluZSBNSU5TVEFURV9FTkRfU0FWRV9NSU4JCU1JTlNUQVRFX0VORF9TQVZFX01JTl9WSVJUCisjZW5kaWYKKworI2lmZGVmIE1JTlNUQVRFX1BIWVMKKyMgZGVmaW5lIE1JTlNUQVRFX1NUQVJUX1NBVkVfTUlOCU1JTlNUQVRFX1NUQVJUX1NBVkVfTUlOX1BIWVMKKyMgZGVmaW5lIE1JTlNUQVRFX0VORF9TQVZFX01JTgkJTUlOU1RBVEVfRU5EX1NBVkVfTUlOX1BIWVMKKyNlbmRpZgorCisvKgorICogRE9fU0FWRV9NSU4gc3dpdGNoZXMgdG8gdGhlIGtlcm5lbCBzdGFja3MgKGlmIG5lY2Vzc2FyeSkgYW5kIHNhdmVzCisgKiB0aGUgbWluaW11bSBzdGF0ZSBuZWNlc3NhcnkgdGhhdCBhbGxvd3MgdXMgdG8gdHVybiBwc3IuaWMgYmFjaworICogb24uCisgKgorICogQXNzdW1lZCBzdGF0ZSB1cG9uIGVudHJ5OgorICoJcHNyLmljOiBvZmYKKyAqCXBzci5kdDogb2ZmCisgKglyMzE6CWNvbnRhaW5zIHNhdmVkIHByZWRpY2F0ZXMgKHByKQorICoKKyAqIFVwb24gZXhpdCwgdGhlIHN0YXRlIGlzIGFzIGZvbGxvd3M6CisgKglwc3IuaWM6IG9mZgorICoJcjIgPSBwb2ludHMgdG8gJnB0X3JlZ3MucjE2CisgKglyMTIgPSBrZXJuZWwgc3AgKGtlcm5lbCB2aXJ0dWFsIGFkZHJlc3MpCisgKglyMTMgPSBwb2ludHMgdG8gY3VycmVudCB0YXNrX3N0cnVjdCAoa2VybmVsIHZpcnR1YWwgYWRkcmVzcykKKyAqCXAxNSA9IFRSVUUgaWYgcHNyLmkgaXMgc2V0IGluIGNyLmlwc3IKKyAqCXByZWRpY2F0ZSByZWdpc3RlcnMgKG90aGVyIHRoYW4gcDIsIHAzLCBhbmQgcDE1KSwgYjYsIHIzLCByOCwgcjksCisgKgkJcjEwLCByMTEsIHIxNCwgcjE1OiBwcmVzZXJ2ZWQKKyAqCisgKiBOb3RlIHRoYXQgcHNyLmljIGlzIE5PVCB0dXJuZWQgb24gYnkgdGhpcyBtYWNyby4gIFRoaXMgaXMgc28gdGhhdAorICogd2UgY2FuIHBhc3MgaW50ZXJydXB0aW9uIHN0YXRlIGFzIGFyZ3VtZW50cyB0byBhIGhhbmRsZXIuCisgKi8KKyNkZWZpbmUgRE9fU0FWRV9NSU4oQ09WRVIsIFNBVkVfSUZTLCBFWFRSQSkJCQkJXAorCW1vdiByQVJSU0M9YXIucnNjOwkJCQkJCVwKKwltb3YgckFSUEZTPWFyLnBmczsJCQkJCQlcCisJbW92IHJSMT1yMTsJCQkJCQkJXAorCW1vdiByQVJVTkFUPWFyLnVuYXQ7CQkJCQkJXAorCW1vdiByQ1JJUFNSPWNyLmlwc3I7CQkJCQkJXAorCS8qIHJCNiA9IGJyYW5jaCByZWcgNiAqLwkJCSAgCQlcCisJbW92IHJCNj1iNjsJCQkJCQkJXAorCW1vdiByQ1JJSVA9Y3IuaWlwOwkJCQkJCVwKKwkvKiByMSA9IGN1cnJlbnQgKHBoeXNpY2FsKSAqLwkJCSAgCQlcCisJbW92IHIxPUlBNjRfS1IoQ1VSUkVOVCk7CQkJCQlcCisJQ09WRVI7CQkJCQkJCQlcCisJOzsJCQkJCQkJCVwKKwlpbnZhbGE7CQkJCQkJCQlcCisJLyogZXh0cmFjdCBwc3IuY3BsICovCQkJCSAgCQlcCisJZXh0ci51IHIxNj1yQ1JJUFNSLCAzMiwgMjsJCQkJCVwKKwk7OwkJCQkJCQkJXAorCS8qIGFyZSB3ZSBpbiBrZXJuZWwgbW9kZSBhbHJlYWR5PyAocHNyLmNwbD09MCkgKi8gCQlcCisJY21wLmVxIHBLZXJuLCBwVXNlcj1yMCwgcjE2OwkJCQkJXAorCS8qIHN3aXRjaCBmcm9tIHVzZXIgdG8ga2VybmVsIFJCUzogKi8JCQkJXAorCTs7CQkJCQkJCQlcCisJU0FWRV9JRlM7CQkJCQkJCVwKKwlNSU5TVEFURV9TVEFSVF9TQVZFX01JTgkJCQkJCVwKKwk7OwkJCQkJCQkJXAorCS8qIGluaXRpYWxpemUgZmlyc3QgYmFzZSBwb2ludGVyICovCSAgCQkJXAorCW1vdiByMTY9cjE7CQkJCQkJCVwKKwkvKiBpbml0aWFsaXplIHNlY29uZCBiYXNlIHBvaW50ZXIgKi8JICAJCQlcCisJYWRkcyByMTc9OCwgcjE7CQkJCQkJCVwKKwk7OwkJCQkJCQkJXAorCXN0OCBbcjE2XT1yQ1JJUFNSLCAxNjsJLyogc2F2ZSBjci5pcHNyICovCQkJXAorCXN0OCBbcjE3XT1yQ1JJSVAsIDE2OwkvKiBzYXZlIGNyLmlpcCAqLwkJCVwKKyhwS2VybikJbW92IHIxOD1yMDsJCS8qIG1ha2Ugc3VyZSByMTggaXNuJ3QgTmFUICovCQlcCisJOzsJCQkJCQkJCVwKKwlzdDggW3IxNl09ckNSSUZTLCAxNjsJLyogc2F2ZSBjci5pZnMgKi8JCQlcCisJc3Q4IFtyMTddPXJBUlVOQVQsIDE2OwkvKiBzYXZlIGFyLnVuYXQgKi8JCQlcCisocFVzZXIpCXN1YiByMTg9cjE4LCByS1JCUzsJLyogcjE4PVJTRS5uZGlydHkqOCAqLwkJCVwKKwk7OwkJCQkJCQkJXAorCXN0OCBbcjE2XT1yQVJQRlMsIDE2OwkvKiBzYXZlIGFyLnBmcyAqLwkJCVwKKwlzdDggW3IxN109ckFSUlNDLCAxNjsJLyogc2F2ZSBhci5yc2MgKi8JCQlcCisJdGJpdC5ueiBwMTUsIHAwPXJDUklQU1IsIElBNjRfUFNSX0lfQklUCQkJCVwKKwk7OwkJCS8qIGF2b2lkIFJBVyBvbiByMTYgJiByMTcgKi8JCVwKKyhwS2VybikJYWRkcyByMTY9MTYsIHIxNjsJLyogc2tpcCBvdmVyIGFyX3JuYXQgZmllbGQgKi8JCVwKKyhwS2VybikJYWRkcyByMTc9MTYsIHIxNzsJLyogc2tpcCBvdmVyIGFyX2JzcHN0b3JlIGZpZWxkICovCVwKKyhwVXNlcikJc3Q4IFtyMTZdPXJBUlJOQVQsIDE2OwkvKiBzYXZlIGFyLnJuYXQgKi8JCQlcCisocFVzZXIpCXN0OCBbcjE3XT1yQVJCU1BTVE9SRSwgMTY7CS8qIHNhdmUgYXIuYnNwc3RvcmUgKi8JCVwKKwk7OwkJCQkJCQkJXAorCXN0OCBbcjE2XT1yQVJQUiwgMTY7CS8qIHNhdmUgcHJlZGljYXRlcyAqLwkJCVwKKwlzdDggW3IxN109ckI2LCAxNjsJLyogc2F2ZSBiNiAqLwkJCQlcCisJLyogY29tcHV0ZSBhci5yc2MgdG8gYmUgdXNlZCBmb3IgImxvYWRycyIgKi8JCQlcCisJc2hsIHIxOD1yMTgsIDE2OwkJCQkJCVwKKwk7OwkJCQkJCQkJXAorCXN0OCBbcjE2XT1yMTgsIDE2OwkvKiBzYXZlIGFyLnJzYyB2YWx1ZSBmb3IgImxvYWRycyIgKi8JXAorCXN0OC5zcGlsbCBbcjE3XT1yUjEsIDE2OwkvKiBzYXZlIG9yaWdpbmFsIHIxICovCQlcCisJOzsJCQkJCQkJCVwKKy5tZW0ub2Zmc2V0IDAsIDA7CXN0OC5zcGlsbCBbcjE2XT1yMiwgMTY7CQkJCVwKKy5tZW0ub2Zmc2V0IDgsIDA7CXN0OC5zcGlsbCBbcjE3XT1yMywgMTY7CQkJCVwKKwlhZGRzIHIyPUlBNjRfUFRfUkVHU19SMTZfT0ZGU0VULCByMTsJCQkJXAorCTs7CQkJCQkJCQlcCisubWVtLm9mZnNldCAwLCAwOwkJc3Q4LnNwaWxsIFtyMTZdPXIxMiwgMTY7CQlcCisubWVtLm9mZnNldCA4LCAwOwkJc3Q4LnNwaWxsIFtyMTddPXIxMywgMTY7CQlcCisJLyogaW5pdGlhbGl6ZSBwU3lzPTAsIHBOb25TeXM9MSAqLwkJCSAgCVwKKwljbXAuZXEgcE5vblN5cywgcFN5cz1yMCwgcjAJCQkJCVwKKwk7OwkJCQkJCQkJXAorLm1lbS5vZmZzZXQgMCwgMDsJCXN0OC5zcGlsbCBbcjE2XT1yMTQsIDE2OwkJXAorLm1lbS5vZmZzZXQgOCwgMDsJCXN0OC5zcGlsbCBbcjE3XT1yMTUsIDE2OwkJXAorCWRlcCByMTQ9LTEsIHIwLCA2MSwgMzsJCQkJCQlcCisJOzsJCQkJCQkJCVwKKy5tZW0ub2Zmc2V0IDAsIDA7CQlzdDguc3BpbGwgW3IxNl09cjgsIDE2OwkJCVwKKy5tZW0ub2Zmc2V0IDgsIDA7CQlzdDguc3BpbGwgW3IxN109cjksIDE2OwkJCVwKKwkvKiBzd2l0Y2ggdG8ga2VybmVsIG1lbW9yeSBzdGFjayAod2l0aCAxNiBieXRlcyBvZiBzY3JhdGNoKSAqLwlcCisJYWRkcyByMTI9LTE2LCByMTsJCQkJCQlcCisJOzsJCQkJCQkJCVwKKy5tZW0ub2Zmc2V0IDAsIDA7CQlzdDguc3BpbGwgW3IxNl09cjEwLCAxNjsJCVwKKy5tZW0ub2Zmc2V0IDgsIDA7CQlzdDguc3BpbGwgW3IxN109cjExLCAxNjsJCVwKKwltb3YgcjEzPUlBNjRfS1IoQ1VSUkVOVCk7CS8qIGVzdGFibGlzaCBgY3VycmVudCcgKi8JXAorCTs7CQkJCQkJCQlcCisJRVhUUkE7CQkJCQkJCQlcCisJbW92bCByMT1fX2dwOwkJLyogZXN0YWJsaXNoIGtlcm5lbCBnbG9iYWwgcG9pbnRlciAqLwlcCisJOzsJCQkJCQkJCVwKKwlNSU5TVEFURV9FTkRfU0FWRV9NSU4KKworLyoKKyAqIFNBVkVfUkVTVCBzYXZlcyB0aGUgcmVtYWluZGVyIG9mIHB0X3JlZ3MgKHdpdGggcHNyLmljIG9uKS4gIFRoaXMKKyAqIG1hY3JvIGd1YXJhbnRlZXMgdG8gcHJlc2VydmUgYWxsIHByZWRpY2F0ZSByZWdpc3RlcnMsIHI4LCByOSwgcjEwLAorICogcjExLCByMTQsIGFuZCByMTUuCisgKgorICogQXNzdW1lZCBzdGF0ZSB1cG9uIGVudHJ5OgorICoJcHNyLmljOiBvbgorICoJcHNyLmR0OiBvbgorICoJcjI6CXBvaW50cyB0byAmcHRfcmVncy5yMTYKKyAqCXIzOglwb2ludHMgdG8gJnB0X3JlZ3MucjE3CisgKi8KKyNkZWZpbmUgU0FWRV9SRVNUCQkJCVwKKy5tZW0ub2Zmc2V0IDAsIDA7CXN0OC5zcGlsbCBbcjJdPXIxNiwgMTY7CVwKKy5tZW0ub2Zmc2V0IDgsIDA7CXN0OC5zcGlsbCBbcjNdPXIxNywgMTY7CVwKKwk7OwkJCQkJXAorLm1lbS5vZmZzZXQgMCwgMDsJc3Q4LnNwaWxsIFtyMl09cjE4LCAxNjsJXAorLm1lbS5vZmZzZXQgOCwgMDsJc3Q4LnNwaWxsIFtyM109cjE5LCAxNjsJXAorCTs7CQkJCQlcCisJbW92IHIxNj1hci5jY3Y7CQkvKiBNLXVuaXQgKi8JXAorCW1vdmwgcjE4PUZQU1JfREVGQVVMVAkvKiBMLXVuaXQgKi8JXAorCTs7CQkJCQlcCisJbW92IHIxNz1hci5mcHNyOwkvKiBNLXVuaXQgKi8JXAorCW1vdiBhci5mcHNyPXIxODsJLyogTS11bml0ICovCVwKKwk7OwkJCQkJXAorLm1lbS5vZmZzZXQgMCwgMDsJc3Q4LnNwaWxsIFtyMl09cjIwLCAxNjsJXAorLm1lbS5vZmZzZXQgOCwgMDsJc3Q4LnNwaWxsIFtyM109cjIxLCAxNjsJXAorCW1vdiByMTg9YjA7CQkJCVwKKwk7OwkJCQkJXAorLm1lbS5vZmZzZXQgMCwgMDsJc3Q4LnNwaWxsIFtyMl09cjIyLCAxNjsJXAorLm1lbS5vZmZzZXQgOCwgMDsJc3Q4LnNwaWxsIFtyM109cjIzLCAxNjsJXAorCW1vdiByMTk9Yjc7CQkJCVwKKwk7OwkJCQkJXAorLm1lbS5vZmZzZXQgMCwgMDsJc3Q4LnNwaWxsIFtyMl09cjI0LCAxNjsJXAorLm1lbS5vZmZzZXQgOCwgMDsJc3Q4LnNwaWxsIFtyM109cjI1LCAxNjsJXAorCTs7CQkJCQlcCisubWVtLm9mZnNldCAwLCAwOwlzdDguc3BpbGwgW3IyXT1yMjYsIDE2OwlcCisubWVtLm9mZnNldCA4LCAwOwlzdDguc3BpbGwgW3IzXT1yMjcsIDE2OwlcCisJOzsJCQkJCVwKKy5tZW0ub2Zmc2V0IDAsIDA7CXN0OC5zcGlsbCBbcjJdPXIyOCwgMTY7CVwKKy5tZW0ub2Zmc2V0IDgsIDA7CXN0OC5zcGlsbCBbcjNdPXIyOSwgMTY7CVwKKwk7OwkJCQkJXAorLm1lbS5vZmZzZXQgMCwgMDsJc3Q4LnNwaWxsIFtyMl09cjMwLCAxNjsJXAorLm1lbS5vZmZzZXQgOCwgMDsJc3Q4LnNwaWxsIFtyM109cjMxLCAxNjsJXAorCTs7CQkJCQlcCisJc3Q4IFtyMl09cjE2LCAxNjsJLyogYXIuY2N2ICovCVwKKwlzdDggW3IzXT1yMTcsIDE2OwkvKiBhci5mcHNyICovCVwKKwk7OwkJCQkJXAorCXN0OCBbcjJdPXIxOCwgMTY7CS8qIGIwICovCVwKKwlzdDggW3IzXT1yMTksIDE2Kzg7CS8qIGI3ICovCVwKKwk7OwkJCQkJXAorCXN0Zi5zcGlsbCBbcjJdPWY2LCAzMjsJCQlcCisJc3RmLnNwaWxsIFtyM109ZjcsIDMyOwkJCVwKKwk7OwkJCQkJXAorCXN0Zi5zcGlsbCBbcjJdPWY4LCAzMjsJCQlcCisJc3RmLnNwaWxsIFtyM109ZjksIDMyCisKKyNkZWZpbmUgU0FWRV9NSU5fV0lUSF9DT1ZFUglET19TQVZFX01JTihjb3ZlciwgbW92IHJDUklGUz1jci5pZnMsKQorI2RlZmluZSBTQVZFX01JTl9XSVRIX0NPVkVSX1IxOQlcCisJRE9fU0FWRV9NSU4oY292ZXIsIG1vdiByQ1JJRlM9Y3IuaWZzLCBtb3YgcjE1PXIxOSkKKyNkZWZpbmUgU0FWRV9NSU4JCURPX1NBVkVfTUlOKCwgbW92IHJDUklGUz1yMCwpCmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9tb2R1bGUvaWE2NC9JQTY0c3lzY2FsbHN0dWIuaCBiL29wcm9maWxlLTAuOS43L21vZHVsZS9pYTY0L0lBNjRzeXNjYWxsc3R1Yi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwNWQ5YzMKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9tb2R1bGUvaWE2NC9JQTY0c3lzY2FsbHN0dWIuaApAQCAtMCwwICsxLDE5NyBAQAorLyoqCisgKiBAZmlsZSBJQTY0c3lzY2FsbHN0dWIuaAorICogQXNzZW1ibHkgbGFuZ3VhZ2UgZmlsZSBtYWNyb3MKKyAqCisgKiBAcmVtYXJrIENvcHlyaWdodCAyMDAyIE9Qcm9maWxlIGF1dGhvcnMKKyAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCisgKgorICogQGF1dGhvciBCb2IgTW9udGdvbWVyeQorICovCisKKy8qICRJZDogSUE2NHN5c2NhbGxzdHViLmgsdiAxLjMgMjAwOC8wMS8yMSAyMTozNToxNyBtb3ZlbWVudCBFeHAgJCAqLworCisjZGVmaW5lIFNZU0NBTExTVFVCX1BPU1QobmFtZSkJCVwKKwkuc2JzczsJCQkJXAorCS5hbGlnbiA4OwkJCVwKKwkudHlwZSAucG9zdF9zYXZlcnBfIyNuYW1lLCBAb2JqZWN0OwlcCisJLnNpemUgLnBvc3Rfc2F2ZXJwXyMjbmFtZSwgODsJXAorLnBvc3Rfc2F2ZXJwXyMjbmFtZToJCQlcCisJLnNraXAgODsJCQlcCisJLnRleHQ7CQkJCVwKKwkuZ2xvYmFsIHBvc3Rfc3R1Yl8jI25hbWU7CVwKKwkuYWxpZ24gMzI7CQkJXAorCS5wcm9jIHBvc3Rfc3R1Yl8jI25hbWU7CQlcCitwb3N0X3N0dWJfIyNuYW1lOgkJCVwKKy5MMV8jI25hbWU6CQkJCVwKKwltb3YgcjM9aXA7CQkJXAorCTs7CQkJCVwKKwlhZGRsIHIxNj0uTDJfIyNuYW1lIC0gLkwxXyMjbmFtZSwgcjM7CVwKKwk7OwkJCQlcCisJbW92IGI2PXIxNjsJCQlcCisJOzsJCQkJXAorCWJyLnJldC5zcHRrLm1hbnkgYjY7CQlcCisJOzsJCQkJXAorLkwyXyMjbmFtZToJCQkJXAorCW1vdiByMz1pcDsJCQlcCisJbW92IHIxNT1ncDsJLyogc2F2ZSBrZ3AgKi8JXAorCW1vdiByMTc9cnA7CQkJXAorCTs7CQkJCVwKKwlhZGRsIHIxND0ucG9zdF9mcHRyXyMjbmFtZSAtIC5MMl8jI25hbWUsIHIzOwlcCisJOzsJCQkJXAorCWxkOCByMTQ9W3IxNF07CQkJXAorCTs7CQkJCVwKKwlhZGRzIHIxND04LCByMTQ7CQlcCisJOzsJCQkJXAorCWxkOCBncD1bcjE0XTsJCQlcCisJOzsJCQkJXAorCWFkZGwgcjE0PUBsdG9mZihvbGRfc3lzXyMjbmFtZSksIGdwOyAgICBcCisJYWRkbCByMTY9QGdwcmVsKC5wb3N0X3NhdmVycF8jI25hbWUpLCBncDsJXAorCTs7CQkJCVwKKwlsZDggcjE0PVtyMTRdOwkJCVwKKwlzdDggW3IxNl09cjE3OwkvKiBzYXZlIGtycCAqLwlcCisJOzsJCQkJXAorCWxkOCByMTQ9W3IxNF07CQkJXAorCW1vdiBncD1yMTU7CS8qIHJlc3RvcmUga2dwICovCVwKKwk7OwkJCQlcCisJbGQ4IHIxND1bcjE0XTsJCQlcCisJOzsJCQkJXAorCW1vdiBiNiA9IHIxNDsJCQlcCisJOzsJCQkJXAorCWJyLmNhbGwuc3B0ay5tYW55IGIwPWI2OwlcCisJOzsJCQkJXAorLkwzXyMjbmFtZToJCQkJXAorCW1vdiByMz1pcDsJCQlcCisJbW92IHIxNT1ncDsJLyogc2F2ZSBrZ3AgKi8JXAorCTs7CQkJCVwKKwlhZGRsIHIxND0ucG9zdF9mcHRyXyMjbmFtZSAtIC5MM18jI25hbWUsIHIzOwlcCisJOzsJCQkJXAorCWxkOCByMTQ9W3IxNF07CQkJXAorCTs7CQkJCVwKKwlhZGRzIHIxND04LCByMTQ7CQlcCisJOzsJCQkJXAorCWxkOCBncD1bcjE0XTsJCQlcCisJYnIuY2FsbC5zcHRrLm1hbnkgYjA9cG9zdF9jYWxsX3N0dWJfIyNuYW1lOwlcCisJOzsJCQkJXAorCWFkZGwgcjE2PUBncHJlbCgucG9zdF9zYXZlcnBfIyNuYW1lKSwgZ3A7CVwKKwk7OwkJCQlcCisJbGQ4IHIxND1bcjE2XTsJCQlcCisJOzsJCQkJXAorCW1vdiBiMCA9IHIxNDsJCQlcCisJbW92IGdwID0gcjE1OyAvKiBwcmVzZXJ2ZWQgKi8JXAorCWJyLmNvbmQuc3B0ay5tYW55IGIwOwkJXAorCS5hbGlnbiAxNjsJCQlcCisucG9zdF9mcHRyXyMjbmFtZToJCQkJXAorCWRhdGE4IEBmcHRyKHBvc3Rfc3lzXyMjbmFtZSk7CVwKKwkuZW5kcCBwb3N0X3N0dWJfIyNuYW1lOwkJXAorCS5hbGlnbiAxNjsJCQlcCisJLmdsb2JhbCBwb3N0X2NhbGxfc3R1Yl8jI25hbWU7CVwKKwkucHJvYyBwb3N0X2NhbGxfc3R1Yl8jI25hbWU7CVwKK3Bvc3RfY2FsbF9zdHViXyMjbmFtZToJCQlcCisJYWxsb2MgbG9jMT1hci5wZnMsIDgsIDYsIDgsIDA7CVwKKwltb3YgbG9jMD1ycDsJCQlcCisJbW92IGxvYzI9cjE1OyAvKiBwcmVzZXJ2ZSBpdCAqLwlcCisJbW92IGxvYzM9cjg7CQkJXAorCW1vdiBsb2M0PXIxMDsJCQlcCisJbW92IGxvYzU9Z3A7CQkJXAorCW1vdiBvdXQwID0gcjg7CS8qIG9sZCBydiAqLwlcCisJbW92IG91dDEgPSBpbjA7CQkJXAorCW1vdiBvdXQyID0gaW4xOwkJCVwKKwltb3Ygb3V0MyA9IGluMjsJCQlcCisJbW92IG91dDQgPSBpbjM7CQkJXAorCW1vdiBvdXQ1ID0gaW40OwkJCVwKKwltb3Ygb3V0NiA9IGluNTsJCQlcCisJbW92IG91dDcgPSBpbjY7CQkJXAorCTs7CQkJCVwKKwlici5jYWxsLnNwdGsubWFueSBycCA9IHBvc3Rfc3lzXyMjbmFtZTsJXAorCTs7CQkJCVwKKwltb3YgYXIucGZzID0gbG9jMTsJCVwKKwltb3YgcnAgPSBsb2MwOwkJCVwKKwltb3YgcjE1PWxvYzI7CQkJXAorCW1vdiByOD1sb2MzOwkJCVwKKwltb3YgcjEwPWxvYzQ7CQkJXAorCW1vdiBncD1sb2M1OwkJCVwKKwlici5yZXQuc3B0ay5mZXcJcnA7CQlcCisJLmVuZHAgcG9zdF9jYWxsX3N0dWJfIyNuYW1lOworCisjZGVmaW5lIFNZU0NBTExTVFVCX1BSRShuYW1lKQkJXAorCS50ZXh0OwkJCQlcCisJLmdsb2JhbCBwcmVfc3R1Yl8jI25hbWU7CVwKKwkuYWxpZ24gMzI7CQkJXAorCS5wcm9jIHByZV9zdHViXyMjbmFtZTsJCVwKK3ByZV9zdHViXyMjbmFtZToJCQlcCisuTDRfIyNuYW1lOgkJCQlcCisJbW92IHIzPWlwOwkJCVwKKwk7OwkJCQlcCisJYWRkbCByMTc9Lkw1XyMjbmFtZSAtIC5MNF8jI25hbWUsIHIzOwlcCisJOzsJCQkJXAorCW1vdiBiNj1yMTc7CQkJXAorCTs7CQkJCVwKKwlici5yZXQuc3B0ay5tYW55IGI2OwkJXAorCTs7CQkJCVwKKy5MNV8jI25hbWU6CQkJCVwKKwltb3YgcjM9aXA7CQkJXAorCW1vdiByMTU9Z3A7CS8qIHNhdmUga2dwICovCVwKKwltb3YgcjE2PXJwOwkvKiBzYXZlIGtycCAqLwlcCisJOzsJCQkJXAorCWFkZGwgcjE0PS5wcmVfZnB0cl8jI25hbWUgLSAuTDVfIyNuYW1lLCByMzsJXAorCTs7CQkJCVwKKwlsZDggcjE0PVtyMTRdOwkJCVwKKwk7OwkJCQlcCisJYWRkcyByMTQ9OCwgcjE0OwkJXAorCTs7CQkJCVwKKwlsZDggZ3A9W3IxNF07CQkJXAorCTs7CQkJCVwKKwlici5jYWxsLnNwdGsubWFueSBiMD1wcmVfY2FsbF9zdHViXyMjbmFtZTsJXAorCTs7CQkJCVwKKwkvKiBrZXJuZWwgZ3Agc3RpbGwgaW4gcjE1ICovCVwKKwkvKiBrZXJuZWwgcnAgc3RpbGwgaW4gcjE2ICovCVwKKwkvKiBtb2R1bGUgZ3AgaW4gZ3AgKi8JCVwKKwk7OwkJCQlcCisJYWRkbCByMTQ9QGx0b2ZmKG9sZF9zeXNfIyNuYW1lKSwgZ3A7ICAgIFwKKwk7OwkJCQlcCisJbGQ4IHIxND1bcjE0XTsJCQlcCisJOzsJCQkJXAorCWxkOCByMTQ9W3IxNF07CQkJXAorCW1vdiBncD1yMTU7IC8qIHJlc3RvcmUga2dwICovCVwKKwk7OwkJCQlcCisJbGQ4IHIxND1bcjE0XTsJCQlcCisJbW92IHJwPXIxNjsgLyogcmVzdG9yZSBrcnAgKi8JXAorCTs7CQkJCVwKKwltb3YgYjYgPSByMTQ7CQkJXAorCTs7CQkJCVwKKwkvKiB1c2UgdGhlIHNhdmVkIGtycCAqLwkJXAorCWJyLmNhbGwuc3B0ay5tYW55IGI2PWI2OwlcCisJOzsJCQkJXAorCS5hbGlnbiAxNjsJCQlcCisucHJlX2ZwdHJfIyNuYW1lOgkJCQlcCisJZGF0YTggQGZwdHIocHJlX3N5c18jI25hbWUpOwlcCisJLmVuZHAgcHJlX3N0dWJfIyNuYW1lOwkJXAorCS5hbGlnbiAxNjsJCQlcCisJLmdsb2JhbCBwcmVfY2FsbF9zdHViXyMjbmFtZTsJXAorCS5wcm9jIHByZV9jYWxsX3N0dWJfIyNuYW1lOwlcCitwcmVfY2FsbF9zdHViXyMjbmFtZToJCQlcCisJYWxsb2MgbG9jMT1hci5wZnMsIDgsIDUsIDgsIDA7CVwKKwltb3YgbG9jMD1ycDsJCQlcCisJbW92IGxvYzI9cjE1OyAvKiBwcmVzZXJ2ZSBpdCAqLwlcCisJbW92IGxvYzM9cjE2OyAvKiBwcmVzZXJ2ZSBpdCAqLwlcCisJbW92IGxvYzQ9Z3A7CQkJXAorCW1vdiBvdXQwID0gaW4wOwkJCVwKKwltb3Ygb3V0MSA9IGluMTsJCQlcCisJbW92IG91dDIgPSBpbjI7CQkJXAorCW1vdiBvdXQzID0gaW4zOwkJCVwKKwltb3Ygb3V0NCA9IGluNDsJCQlcCisJbW92IG91dDUgPSBpbjU7CQkJXAorCW1vdiBvdXQ2ID0gaW42OwkJCVwKKwltb3Ygb3V0NyA9IGluNzsJCQlcCisJOzsJCQkJXAorCWJyLmNhbGwuc3B0ay5tYW55IHJwID0gcHJlX3N5c18jI25hbWU7CVwKKwk7OwkJCQlcCisJbW92IGFyLnBmcyA9IGxvYzE7CQlcCisJbW92IHJwID0gbG9jMDsJCQlcCisJbW92IHIxNT1sb2MyOwkJCVwKKwltb3YgcjE2PWxvYzM7CQkJXAorCW1vdiBncD1sb2M0OwkJCVwKKwlici5yZXQuc3B0ay5mZXcJcnA7CQlcCisJLmVuZHAgcHJlX2NhbGxfc3R1Yl8jI25hbWU7CisKKwpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvbW9kdWxlL2lhNjQvTWFrZWZpbGUuaW4gYi9vcHJvZmlsZS0wLjkuNy9tb2R1bGUvaWE2NC9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMWE5MzJjCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvbW9kdWxlL2lhNjQvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSwzMCBAQAorIworIyBtb2R1bGUvaWE2NC9NYWtlZmlsZS5pbgorIyAKKyMgV2lsbCBDb2hlbgorIyA3LzI5LzIwMDIKKworT1BST0ZJTEVfRElSPUBPUFJPRklMRV9ESVJACitWRVJTSU9OPUBWRVJTSU9OQAorS1ZFUlM9QEtWRVJTQAorS1NSQz1AS1NSQ0AKKworRVhUUkFfQ0ZMQUdTPUBFWFRSQV9DRkxBR1NfTU9EVUxFQCAtRF9fTk9fVkVSU0lPTl9fIFwKKwktSSQoT1BST0ZJTEVfRElSKS8gLUkkKE9QUk9GSUxFX0RJUikvbGlidXRpbCAtSSQoT1BST0ZJTEVfRElSKS9saWJvcCAtSSQoT1BST0ZJTEVfRElSKS9tb2R1bGUKKyAKK1VTRV9TVEFOREFSRF9BU19SVUxFPTEKKyAKKyMgTkI6IGRvIG5vdCBhZGQgYSBmaWxlIGhlcmUgd2l0aG91dCBhZGRpbmcgaXQgdG8gRVhUUkFfRElTVCBpbiAuLi9NYWtlZmlsZS5hbQorCitPX1RBUkdFVCA6PSBhcmNoLm8KKyAKK29iai15IDo9IGNwdV90eXBlLm8gb3BfcG11Lm8gb3Bfc3lzY2FsbHMubyBvcHJvZmlsZV9zdHVicy5vCitvYmotbSA6PSAkKE9fVEFSR0VUKQorT19PQkpTIDo9ICQob2JqLXkpCitNX09CSlMgOj0gJChPX1RBUkdFVCkKKyAKK1RPUERJUiA6PSAkKEtTUkMpCitDT05GSUdfU0hFTEwgOj0gVE9QRElSPSQoS1NSQykgL2Jpbi9iYXNoCitpbmNsdWRlICQoS1NSQykvUnVsZXMubWFrZQorCisjIEZJWE1FOiBkZXBlbmRlbmNpZXMgCmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9tb2R1bGUvaWE2NC9jcHVfdHlwZS5jIGIvb3Byb2ZpbGUtMC45LjcvbW9kdWxlL2lhNjQvY3B1X3R5cGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OWUxZWQ0Ci0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvbW9kdWxlL2lhNjQvY3B1X3R5cGUuYwpAQCAtMCwwICsxLDM0IEBACisvKioKKyAqIEBmaWxlIGNwdV90eXBlLmMKKyAqIENQVSBkZXRlcm1pbmF0aW9uCisgKgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMiBPUHJvZmlsZSBhdXRob3JzCisgKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORworICoKKyAqIEBhdXRob3IgSm9obiBMZXZvbgorICogQGF1dGhvciBQaGlsaXBwZSBFbGllCisgKiBAYXV0aG9yIFdpbGwgQ29oZW4KKyAqLworCisjaW5jbHVkZSAib3Byb2ZpbGUuaCIKKworRVhQT1JUX05PX1NZTUJPTFM7CisKK19faW5pdCBvcF9jcHUgZ2V0X2NwdV90eXBlKHZvaWQpCit7CisJX191OCBmYW1pbHkgPSBsb2NhbF9jcHVfZGF0YS0+ZmFtaWx5OworCisJLyogRklYTUU6IFRoZXJlIHNob3VsZCBiZSBhIGJpdCBtb3JlIGNoZWNraW5nIGhlcmUuICovCisJc3dpdGNoIChmYW1pbHkpIHsKKwkvKiBJdGFuaXVtICovCisJY2FzZSAweDA3OgorCQlyZXR1cm4gQ1BVX0lBNjRfMTsKKwkJYnJlYWs7CisJLyogSXRhbml1bSAyICovCisJY2FzZSAweDFmOgorCQlyZXR1cm4gQ1BVX0lBNjRfMjsKKwkJYnJlYWs7CisJfQorCS8qIEdvIGZvciB0aGUgYmFzaWMgZ2VuZXJpYyBJQTY0ICovCisJcmV0dXJuIENQVV9JQTY0OworfQpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvbW9kdWxlL2lhNjQvb3BfaWE2NF9tb2RlbC5oIGIvb3Byb2ZpbGUtMC45LjcvbW9kdWxlL2lhNjQvb3BfaWE2NF9tb2RlbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5ZjZjMDYKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9tb2R1bGUvaWE2NC9vcF9pYTY0X21vZGVsLmgKQEAgLTAsMCArMSwzMiBAQAorLyoqCisgKiBAZmlsZSBvcF9pYTY0X21vZGVsLmgKKyAqIGludGVyZmFjZSB0byBpYTY0IG1vZGVsLXNwZWNpZmljIE1TUiBvcGVyYXRpb25zCisgKgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMiBPUHJvZmlsZSBhdXRob3JzCisgKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORworICoKKyAqIEBhdXRob3IgR3JheWRvbiBIb2FyZQorICogQGF1dGhvciBXaWxsIENvaGVuCisgKi8KKworI2lmbmRlZiBPUF9JQTY0X01PREVMX0gKKyNkZWZpbmUgT1BfSUE2NF9NT0RFTF9ICisKKyNpbmNsdWRlICJvcHJvZmlsZS5oIgorCitzdHJ1Y3Qgb3Bfc2F2ZWRfbXNyIHsKKwl1aW50IGhpZ2g7CisJdWludCBsb3c7Cit9OworCitzdHJ1Y3Qgb3BfbXNyX2dyb3VwIHsKKwl1aW50ICogYWRkcnM7CisJc3RydWN0IG9wX3NhdmVkX21zciAqIHNhdmVkOworfTsKKworc3RydWN0IG9wX21zcnMgeworCXN0cnVjdCBvcF9tc3JfZ3JvdXAgY291bnRlcnM7CisJc3RydWN0IG9wX21zcl9ncm91cCBjb250cm9sczsKK307CisKKyNlbmRpZiAvKiBPUF9JQTY0X01PREVMX0ggKi8KZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L21vZHVsZS9pYTY0L29wX3BtdS5jIGIvb3Byb2ZpbGUtMC45LjcvbW9kdWxlL2lhNjQvb3BfcG11LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWY5NzkxZAotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L21vZHVsZS9pYTY0L29wX3BtdS5jCkBAIC0wLDAgKzEsNjYxIEBACisvKioKKyAqIEBmaWxlIG9wX3BtdS5jCisgKiBTZXR1cCBhbmQgaGFuZGxpbmcgb2YgSUE2NCBQZXJmb3JtYW5jZSBNb25pdG9yaW5nIFVuaXQgKFBNVSkKKyAqCisgKiBAcmVtYXJrIENvcHlyaWdodCAyMDAyIE9Qcm9maWxlIGF1dGhvcnMKKyAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCisgKgorICogQGF1dGhvciBCb2IgTW9udGdvbWVyeQorICogQGF1dGhvciBXaWxsIENvaGVuCisgKiBAYXV0aG9yIEpvaG4gTGV2b24KKyAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQorICovCisKKworI2luY2x1ZGUgIm9wcm9maWxlLmgiCisjaW5jbHVkZSAib3BfdXRpbC5oIgorI2luY2x1ZGUgPGFzbS9wZXJmbW9uLmg+CisjaW5jbHVkZSAib3BfaWE2NF9tb2RlbC5oIgorCisvKiBudW1iZXIgb2YgY291bnRlcnMgcGh5c2ljYWxseSBwcmVzZW50ICovCitzdGF0aWMgdWludCBvcF9ucl9jb3VudGVycyA9IDQ7CisKKy8qIHBlcmZvcm1hbmNlIGNvdW50ZXJzIGFyZSBpbiBwYWlyczogcG1jTiBhbmQgcG1kTi4gIFRoZSBwbWMgcmVnaXN0ZXIgYWN0cworICogYXMgdGhlIGV2ZW50IHNlbGVjdGlvbjsgdGhlIHBtZCByZWdpc3RlciBpcyB0aGUgY291bnRlci4gKi8KKyNkZWZpbmUgcGVyZl9yZWcoYykJKChjKSs0KQorCisjZGVmaW5lIElBNjRfMV9QTURfTUFTS19WQUwJKCgxVUwgPDwgMzIpIC0gMSkKKyNkZWZpbmUgSUE2NF8yX1BNRF9NQVNLX1ZBTAkoKDFVTCA8PCA0NykgLSAxKQorCisvKiBUaGUgYXBwcm9wcmlhdGUgdmFsdWUgaXMgc2VsZWN0ZWQgaW4gcG11X2luaXQoKSAqLwordW5zaWduZWQgbG9uZyBwbWRfbWFzayA9IElBNjRfMl9QTURfTUFTS19WQUw7CisKKyNkZWZpbmUgcG1kX292ZXJmbG93ZWQociwgYykgKChyKSAmICgxIDw8IHBlcmZfcmVnKGMpKSkKKyNkZWZpbmUgc2V0X3BtZF9uZWcodiwgYykgZG8geyBcCisJaWE2NF9zZXRfcG1kKHBlcmZfcmVnKGMpLCAtKHVsb25nKSh2KSAmIHBtZF9tYXNrKTsgXAorCWlhNjRfc3Jsel9kKCk7IH0gd2hpbGUgKDApCisjZGVmaW5lIHNldF9wbWQodiwgYykgZG8geyBcCisJaWE2NF9zZXRfcG1kKHBlcmZfcmVnKGMpLCAodikgJiBwbWRfbWFzayk7IFwKKwlpYTY0X3NybHpfZCgpOyB9IHdoaWxlICgwKQorI2RlZmluZSBzZXRfcG1jKHYsIGMpIGRvIHsgaWE2NF9zZXRfcG1jKHBlcmZfcmVnKGMpLCAodikpOyBpYTY0X3NybHpfZCgpOyB9IHdoaWxlICgwKQorI2RlZmluZSBnZXRfcG1kKGMpIGlhNjRfZ2V0X3BtZChwZXJmX3JlZyhjKSkKKyNkZWZpbmUgZ2V0X3BtYyhjKSBpYTY0X2dldF9wbWMocGVyZl9yZWcoYykpCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0gSVJRIGhhbmRsZXIgLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIFRoZSBhcmdzIG1hdGNoIHRoZSBhcmdzIGZvciBwZm1fb3ZlcmZsb3dfaGFuZGxlciBpbiBwZXJmbW9uLmMuCisgKiBUaGUgdGFza19zdHJ1Y3QgaXMgY3VycmVudGx5IGZpbGxlZCBpbiB3aXRoIHRoZSBwZXJmbW9uICJvd25lciIgb2YKKyAqIHRoZSBQTVUuICBUaGlzIG1pZ2h0IGNoYW5nZS4gIEknbSBub3Qgc3VyZSBpdCBtYWtlcyBzZW5zZSBpbiBwZXJmbW9uCisgKiBlaXRoZXIgd2l0aCBzeXN0ZW0td2lkZSBwcm9maWxpbmcuCisgKiBwbWMwIGlzIGEgYml0IG1hc2sgZm9yIG92ZXJmbG93ZWQgY291bnRlcnMgKGJpdHMgNC03KQorICogVGhpcyByb3V0aW5lIHNob3VsZCByZXR1cm4gMCB0byByZXN1bWUgaW50ZXJydXB0cy4KKyAqLworaW5saW5lIHN0YXRpYyB2b2lkCitvcF9kb19wbXVfaW50ZXJydXB0KHU2NCBwbWMwLCBzdHJ1Y3QgcHRfcmVncyAqIHJlZ3MpCit7CisJdWludCBjcHUgPSBvcF9jcHVfaWQoKTsKKwlpbnQgY3RyOworCisJZm9yIChjdHIgPSAwIDsgY3RyIDwgb3BfbnJfY291bnRlcnMgOyArK2N0cikgeworCQlpZiAocG1kX292ZXJmbG93ZWQocG1jMCwgY3RyKSkgeworCQkJb3BfZG9fcHJvZmlsZShjcHUsIHJlZ3MtPmNyX2lpcCwgMSwgY3RyKTsKKwkJCXNldF9wbWRfbmVnKG9wcm9mX2RhdGFbY3B1XS5jdHJfY291bnRbY3RyXSwgY3RyKTsKKwkJfQorCX0KKwlyZXR1cm47Cit9CisKKworc3RhdGljIHZvaWQKK29wX3Jhd19wbXVfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKiBhcmcsIHN0cnVjdCBwdF9yZWdzICogcmVncykKK3sKKwl1NjQgcG1jMDsKKworCXBtYzAgPSBpYTY0X2dldF9wbWMoMCk7CisKKwlpZiAoKHBtYzAgJiB+MHgxVUwpICE9IDBVTCkgeworCQlvcF9kb19wbXVfaW50ZXJydXB0KHBtYzAsIHJlZ3MpOworCQlpYTY0X3NldF9wbWMoMCwgMCk7CisJCWlhNjRfc3Jsel9kKCk7CisJfQorfQorCisKKyNkZWZpbmUgTVlfT1BST0ZJTEVfVkVDVE9SIChJQTY0X1BFUkZNT05fVkVDVE9SIC0gMikKKworc3RhdGljIHZvaWQKK29wX3NldF9wbXYodm9pZCAqIGR1bW15KQoreworCWlhNjRfc2V0X3BtdihNWV9PUFJPRklMRV9WRUNUT1IpOworCWlhNjRfc3Jsel9kKCk7Cit9CisKKworc3RhdGljIHZvaWQKK29wX3Jlc3RvcmVfcG12KHZvaWQqIGR1bW15KQoreworCWlhNjRfc2V0X3BtdihJQTY0X1BFUkZNT05fVkVDVE9SKTsKKwlpYTY0X3NybHpfZCgpOworfQorCisKK3N0YXRpYyBpbnQKK2luc3RhbGxfaGFuZGxlcih2b2lkKQoreworCWludCBlcnIgPSAwOworCisJLyogVHJ5IGl0IGxlZ2FsbHkgLSBjb25mdXNpb24gYWJvdXQgdmVjIHZzIGlycSAqLworCWVyciA9IHJlcXVlc3RfaXJxKE1ZX09QUk9GSUxFX1ZFQ1RPUiwgb3BfcmF3X3BtdV9pbnRlcnJ1cHQsIAorCQkJU0FfSU5URVJSVVBUIHwgU0FfUEVSQ1BVX0lSUSwgIm9wcm9maWxlIiwgTlVMTCk7CisKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0FMRVJUICJvcHJvZmlsZV9JQTY0OiByZXF1ZXN0X2lycSBmYWlscywgIgorCQkJCSJyZXR1cm5zICVkXG4iLCBlcnIpOworCQlyZXR1cm4gZXJyOworCX0KKworCWlmICgoc21wX2NhbGxfZnVuY3Rpb24ob3Bfc2V0X3BtdiwgTlVMTCwgMCwgMSkpKSB7CisJCXByaW50ayhLRVJOX0FMRVJUICJvcHJvZmlsZV9JQTY0OiB1bmV4cGVjdGVkIGZhaWx1cmUgIgorCQkJCSJvZiBzbXBfY2FsbF9mdW5jdGlvbihvcF9zZXRfcG12KVxuIik7CisJfQorCisJb3Bfc2V0X3BtdihOVUxMKTsKKworCXJldHVybiBlcnI7Cit9CisKKworc3RhdGljIGludAorcmVzdG9yZV9oYW5kbGVyKHZvaWQpCit7CisJaW50IGVyciA9IDA7CisKKwlpZiAoKHNtcF9jYWxsX2Z1bmN0aW9uKG9wX3Jlc3RvcmVfcG12LCBOVUxMLCAwLCAxKSkpIHsKKwkJcHJpbnRrKEtFUk5fQUxFUlQgIm9wcm9maWxlX0lBNjQ6IHVuZXhwZWN0ZWQgZmFpbHVyZSAiCisJCQkJIm9mIHNtcF9jYWxsX2Z1bmN0aW9uKG9wX3Jlc3RvcmVfcG12KVxuIik7CisJfQorCisJb3BfcmVzdG9yZV9wbXYoTlVMTCk7CisKKwlmcmVlX2lycShNWV9PUFJPRklMRV9WRUNUT1IsIE5VTEwpOworCXJldHVybiBlcnI7Cit9CisKKworLyogLS0tLS0tLS0tLS0tLS0tLSBQTVUgc2V0dXAgLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIFRoaXMgaXMga2luZCBvZiBhcnRpZmljaWFsLiAgVGhlIHByb2MgaW50ZXJmYWNlIG1pZ2h0IHJlYWxseSB3YW50IHRvCisgKiBhY2NlcHQgcmVnaXN0ZXIgdmFsdWVzIGRpcmVjdGx5LiAgVGhlcmUgYXJlIG90aGVyIGZlYXR1cmVzIG5vdCBleHBvc2VkIAorICogYnkgdGhpcyBsaW1pdGVkIGludGVyZmFjZS4gIE9mIGNvdXJzZSB0aGF0IG1pZ2h0IHJlcXVpcmUgYWxsIHNvcnRzIG9mCisgKiB2YWxpZGl0eSBjaGVja2luZz8/PyAqLworc3RhdGljIHZvaWQKK3BtY19maWxsX2luKHVsb25nICogdmFsLCB1OCBrZXJuZWwsIHU4IHVzZXIsIHU4IGV2ZW50LCB1OCB1bSkKK3sKKwkvKiBlbmFibGUgaW50ZXJydXB0IGdlbmVyYXRpb24gKi8KKwkqdmFsIHw9ICgxIDw8IDUpOworCisJLyogc2V0dXAgYXMgYSBwcml2aWxlZ2VkIG1vbml0b3IgKi8KKwkqdmFsIHw9ICgxIDw8IDYpOworCisJLyogTWNLaW5sZXkgcmVxdWlyZXMgcG1jNCB0byBoYXZlIGJpdCAyMyBzZXQgKGVuYWJsZSBQTVUpLgorCSAqIEl0IGlzIHN1cHBvc2VkbHkgaWdub3JlZCBpbiBvdGhlciBwbWMgcmVnaXN0ZXJzLgorCSAqIFRyeSBhc3N1bWluZyBpdCdzIGlnbm9yZWQgaW4gSXRhbml1bSwgdG9vLCBhbmQganVzdAorCSAqIHNldCBpdCBmb3IgZXZlcnlvbmUuCisJICovCisKKwkqdmFsIHw9ICgxIDw8IDIzKTsKKworCS8qIGVuYWJsZS9kaXNhYmxlIGNob3NlbiBPUyBhbmQgVVNSIGNvdW50aW5nICovCisJKHVzZXIpICAgPyAoKnZhbCB8PSAoMSA8PCAzKSkKKwkJIDogKCp2YWwgJj0gfigxIDw8IDMpKTsKKworCShrZXJuZWwpID8gKCp2YWwgfD0gKDEgPDwgMCkpCisJCSA6ICgqdmFsICY9IH4oMSA8PCAwKSk7CisKKwkvKiB3aGF0IGFyZSB3ZSBjb3VudGluZyA/ICovCisJKnZhbCAmPSB+KDB4ZmYgPDwgOCk7CisJKnZhbCB8PSAoKGV2ZW50ICYgMHhmZikgPDwgOCk7CisJKnZhbCAmPSB+KDB4ZiA8PCAxNik7CisJKnZhbCB8PSAoKHVtICYgMHhmKSA8PCAxNik7Cit9CisKKworc3RhdGljIHZvaWQKK3BtdV9zZXR1cCh2b2lkICogZHVtbXkpCit7CisJdWxvbmcgcG1jX3ZhbDsKKwlpbnQgaWk7CisKKwkvKiBzZXR1cCBlYWNoIGNvdW50ZXIgKi8KKwlmb3IgKGlpID0gMCA7IGlpIDwgb3BfbnJfY291bnRlcnMgOyArK2lpKSB7CisJCWlmIChzeXNjdGwuY3RyW2lpXS5lbmFibGVkKSB7CisJCQlwbWNfdmFsID0gMDsKKworCQkJc2V0X3BtZF9uZWcoc3lzY3RsLmN0cltpaV0uY291bnQsIGlpKTsKKwkJCXBtY19maWxsX2luKCZwbWNfdmFsLCBzeXNjdGwuY3RyW2lpXS5rZXJuZWwsIAorCQkJCXN5c2N0bC5jdHJbaWldLnVzZXIsIHN5c2N0bC5jdHJbaWldLmV2ZW50LCAKKwkJCQlzeXNjdGwuY3RyW2lpXS51bml0X21hc2spOworCisJCQlzZXRfcG1jKHBtY192YWwsIGlpKTsKKwkJfQorCX0KK30KKworCit2b2lkIAorZGlzYWJsZV9wc3Iodm9pZCAqIGR1bW15KQoreworCXN0cnVjdCBwdF9yZWdzICogcmVnczsKKwkvKiBkaXNhYmxlIHByb2ZpbGluZyBmb3IgbXkgc2F2ZWQgc3RhdGUgKi8KKwlyZWdzID0gKHN0cnVjdCBwdF9yZWdzICopKCh1bnNpZ25lZCBsb25nKSBjdXJyZW50ICsgSUE2NF9TVEtfT0ZGU0VUKTsKKwlyZWdzLS07CisJaWE2NF9wc3IocmVncyktPnBwID0gMDsKKwkvKiBzaG91bGRuJ3QgbmVlZCB0byAqLworCWlhNjRfcHNyKHJlZ3MpLT51cCA9IDA7CisKKwkvKiBkaXNhYmxlIHByb2ZpbGluZyBmb3IgbXkgY3VycmVudCBzdGF0ZSAqLworCV9fYXNtX18gX192b2xhdGlsZV9fICgicnNtIHBzci5wcDs7Ijo6OiAibWVtb3J5Iik7CisKKyNpZiBkZWZpbmVkKENPTkZJR19QRVJGTU9OKSAmJiBkZWZpbmVkKENPTkZJR19TTVApCisjaWYgVl9BVF9MRUFTVCgyLCA0LCAyMSkKKwlsb2NhbF9jcHVfZGF0YS0+cGZtX3N5c3RfaW5mbyB8PSAgUEZNX0NQVUlORk9fU1lTVF9XSURFOworCWxvY2FsX2NwdV9kYXRhLT5wZm1fc3lzdF9pbmZvICY9IH5QRk1fQ1BVSU5GT19EQ1JfUFA7CisJLyogRklYTUU6IHdoYXQgdG9kbyB3aXRoIHRoZSAzcmQgZmxhZ3MgUEZNX0NQVUlORk9fRVhDTF9JRExFIDB4NCAqLworI2Vsc2UKKwkvKiBkaXNhYmxlIHByb2ZpbGluZyBmb3IgZXZlcnlvbmUgZWxzZSAqLworCWxvY2FsX2NwdV9kYXRhLT5wZm1fc3lzdF93aWRlID0gMTsKKwlsb2NhbF9jcHVfZGF0YS0+cGZtX2Rjcl9wcCA9IDA7CisjZW5kaWYKKyNlbmRpZgorCWlhNjRfc2V0X3BtYygwLCAwKTsKKwlpYTY0X3NybHpfZCgpOworfQorCisKK3N0YXRpYyBpbnQKK3BtdV9zZXR1cF9hbGwodm9pZCkKK3sKKworCS8qIFRoaXMgd291bGQgYmUgYSBncmVhdCBwbGFjZSB0byByZXNlcnZlIGFsbCBjcHVzIHdpdGggCisJICogc29tZSBzb3J0IG9mIGNhbGwgdG8gcGVyZm1vbmN0bCAoc29tZXRoaW5nIGxpa2UgdGhlCisJICogQ1JFQVRFX0NPTlRFWFQgY29tbWFuZCkuICBUaGUgY3VycmVudCBpbnRlcmZhY2UgdG8gCisJICogcGVyZm1vbmN0bCB3YW50cyB0byBiZSBjYWxsZWQgZnJvbSBhIGRpZmZlcmVudCB0YXNrIGlkCisJICogZm9yIGVhY2ggQ1BVIHRvIGJlIHNldCB1cCAoYW5kIGRvZXNuJ3QgYWxsb3cgY2FsbHMgZnJvbQorCSAqIG1vZHVsZXMuCisJICovCisKKwkvKiBkaXNhYmxlIHByb2ZpbGluZyB3aXRoIHRoZSBwc3IucHAgYml0ICovCisJaWYgKChzbXBfY2FsbF9mdW5jdGlvbihkaXNhYmxlX3BzciwgTlVMTCwgMCwgMSkpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWRpc2FibGVfcHNyKE5VTEwpOworCisJLyogbm93IEkndmUgcmVzZXJ2ZWQgdGhlIFBNVXMgYW5kIHRoZXkgc2hvdWxkIGJlIHF1aWV0ICovCisKKwlpZiAoKHNtcF9jYWxsX2Z1bmN0aW9uKHBtdV9zZXR1cCwgTlVMTCwgMCwgMSkpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXBtdV9zZXR1cChOVUxMKTsKKwlyZXR1cm4gMDsKK30KKworCisjaWZuZGVmIENPTkZJR19TTVAKKy8qIGZyb20gbGludXgvYXJjaC9pYTY0L2tlcm5lbC9wZXJmbW9uLmMgKi8KKy8qCisgKiBPcmlnaW5hbHkgV3JpdHRlbiBieSBHYW5lc2ggVmVua2l0YWNoYWxhbSwgSUJNIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgR2FuZXNoIFZlbmtpdGFjaGFsYW0gPHZlbmtpdGFjQHVzLmlibS5jb20+CisgKgorICogTW9kaWZpY2F0aW9ucyBieSBTdGVwaGFuZSBFcmFuaWFuLCBIZXdsZXR0LVBhY2thcmQgQ28uCisgKiBNb2RpZmljYXRpb25zIGJ5IERhdmlkIE1vc2Jlcmdlci1UYW5nLCBIZXdsZXR0LVBhY2thcmQgQ28uCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk5LTIwMDIgIEhld2xldHQgUGFja2FyZCBDbworICogICAgICAgICAgICAgICBTdGVwaGFuZSBFcmFuaWFuIDxlcmFuaWFuQGhwbC5ocC5jb20+CisgKiAgICAgICAgICAgICAgIERhdmlkIE1vc2Jlcmdlci1UYW5nIDxkYXZpZG1AaHBsLmhwLmNvbT4KKyAqLworCisvKgorICogT24gVVAga2VybmVscywgd2UgZG8gbm90IG5lZWQgdG8gY29uc3RhbnRseSBzZXQgdGhlIHBzci5wcCBiaXQKKyAqIHdoZW4gYSB0YXNrIGlzIHNjaGVkdWxlZC4gVGhlIHBzci5wcCBiaXQgY2FuIG9ubHkgYmUgY2hhbmdlZCBpbgorICogdGhlIGtlcm5lbCBiZWNhdXNlIG9mIGEgdXNlciByZXF1ZXN0LiBHaXZlbiB3ZSBhcmUgb24gYSBVUCBub24gcHJlZWVtcHRpdmUgCisgKiBrZXJuZWwgd2Uga25vdyB0aGF0IG5vIG90aGVyIHRhc2sgaXMgcnVubmluZywgc28gd2UgY25hIHNpbXBseSB1cGRhdGUgdGhlaXIKKyAqIHBzci5wcCBmcm9tIHRoZWlyIHNhdmVkIHN0YXRlLiBUaGVyZSBpcyB0aGlzIG5vIGltcGFjdCBvbiB0aGUgY29udGV4dCBzd2l0Y2gKKyAqIGNvZGUgY29tcGFyZWQgdG8gdGhlIFNNUCBjYXNlLgorICovCitzdGF0aWMgdm9pZAorb3BfdGFza2xpc3RfdG9nZ2xlX3BwKHVuc2lnbmVkIGludCB2YWwpCit7CisJc3RydWN0IHRhc2tfc3RydWN0ICogcDsKKwlzdHJ1Y3QgcHRfcmVncyAqIHJlZ3M7CisKKwlyZWFkX2xvY2soJnRhc2tsaXN0X2xvY2spOworCisJZm9yX2VhY2hfdGFzayhwKSB7CisJCXJlZ3MgPSAoc3RydWN0IHB0X3JlZ3MgKikoKHVuc2lnbmVkIGxvbmcpIHAgKyBJQTY0X1NUS19PRkZTRVQpOworCisJCS8qCisJCSAqIHBvc2l0aW9uIG9uIHB0X3JlZ3Mgc2F2ZWQgb24gc3RhY2sgb24gMXN0IGVudHJ5IGludG8gdGhlIGtlcm5lbAorCQkgKi8KKwkJcmVncy0tOworCisJCS8qCisJCSAqIHVwZGF0ZSBwc3IucHAKKwkJICovCisJCWlhNjRfcHNyKHJlZ3MpLT5wcCA9IHZhbDsKKwl9CisJcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOworfQorI2VuZGlmCisKKworc3RhdGljIHZvaWQKK3BtdV9zdGFydCh2b2lkICogaW5mbykKK3sKKwlzdHJ1Y3QgcHRfcmVncyAqIHJlZ3M7CisKKwlpZiAoaW5mbyAmJiAoKigodWludCAqKWluZm8pICE9IG9wX2NwdV9pZCgpKSkKKwkJcmV0dXJuOworCisJLyogcHJpbnRrKEtFUk5fQUxFUlQgIm9wcm9maWxlX0lBNjQ6IHBtdV9zdGFydCBvbiBjcHUgJWRcbiIsIAorCSAgCW9wX2NwdV9pZCgpKTsgKi8KKwkvKiBUaGUgZGVmYXVsdCBjb250cm9sIHJlZ2lzdGVyIHBwIHZhbHVlIGlzIGNvcGllZCBpbnRvIHBzci5wcAorCSAqIG9uIGFuIGludGVycnVwdC4gIFRoaXMgYWxsb3dzIGludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmVzIHRvCisJICogYmUgbW9uaXRvcmVkLgorCSAqLworCWlhNjRfc2V0X2RjcihpYTY0X2dldF9kY3IoKSB8IElBNjRfRENSX1BQKTsKKworI2lmZGVmIENPTkZJR19QRVJGTU9OCisjaWZkZWYgQ09ORklHX1NNUAorI2lmIFZfQVRfTEVBU1QoMiwgNCwgMjEpCisJbG9jYWxfY3B1X2RhdGEtPnBmbV9zeXN0X2luZm8gfD0gUEZNX0NQVUlORk9fU1lTVF9XSURFOworCWxvY2FsX2NwdV9kYXRhLT5wZm1fc3lzdF9pbmZvIHw9IFBGTV9DUFVJTkZPX0RDUl9QUDsKKwkvKiBGSVhNRTogd2hhdCB0b2RvIHdpdGggdGhlIDNyZCBmbGFncyBQRk1fQ1BVSU5GT19FWENMX0lETEUgMHg0ICovCisjZWxzZQorCWxvY2FsX2NwdV9kYXRhLT5wZm1fc3lzdF93aWRlID0gMTsKKwlsb2NhbF9jcHVfZGF0YS0+cGZtX2Rjcl9wcCA9IDE7CisjZW5kaWYKKyNlbHNlCisJb3BfdGFza2xpc3RfdG9nZ2xlX3BwKDEpOworI2VuZGlmCisjZW5kaWYKKwkvKiBzZXQgaXQgaW4gbXkgc2F2ZWQgc3RhdGUgKi8KKwlyZWdzID0gKHN0cnVjdCBwdF9yZWdzICopKCh1bnNpZ25lZCBsb25nKSBjdXJyZW50ICsgSUE2NF9TVEtfT0ZGU0VUKTsKKwlyZWdzLS07CisJaWE2NF9wc3IocmVncyktPnBwID0gMTsKKworCS8qIHNldCBpdCBpbiBteSBjdXJyZW50IHN0YXRlICovCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJzc20gcHNyLnBwOzsiOjo6ICJtZW1vcnkiKTsKKwlpYTY0X3NybHpfZCgpOworfQorCisKK3N0YXRpYyB2b2lkCitwbXVfc3RvcCh2b2lkICogaW5mbykKK3sKKwlzdHJ1Y3QgcHRfcmVncyAqIHJlZ3M7CisKKwlpZiAoaW5mbyAmJiAoKigodWludCAqKWluZm8pICE9IG9wX2NwdV9pZCgpKSkKKwkJcmV0dXJuOworCisJLyogc3RvcCBpbiBteSBjdXJyZW50IHN0YXRlICovCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJyc20gcHNyLnBwOzsiOjo6ICJtZW1vcnkiKTsKKworCS8qIGRpc2FibGUgdGhlIGRjciBwcCAqLworCWlhNjRfc2V0X2RjcihpYTY0X2dldF9kY3IoKSAmIH5JQTY0X0RDUl9QUCk7CisKKyNpZmRlZiBDT05GSUdfUEVSRk1PTgorI2lmZGVmIENPTkZJR19TTVAKKyNpZiBWX0FUX0xFQVNUKDIsIDQsIDIxKQorCWxvY2FsX2NwdV9kYXRhLT5wZm1fc3lzdF9pbmZvICY9IH5QRk1fQ1BVSU5GT19TWVNUX1dJREU7CisJbG9jYWxfY3B1X2RhdGEtPnBmbV9zeXN0X2luZm8gJj0gflBGTV9DUFVJTkZPX0RDUl9QUDsKKwkvKiBGSVhNRTogd2hhdCB0b2RvIHdpdGggdGhlIDNyZCBmbGFncyBQRk1fQ1BVSU5GT19FWENMX0lETEUgMHg0ICovCisjZWxzZQorCWxvY2FsX2NwdV9kYXRhLT5wZm1fc3lzdF93aWRlID0gMDsKKwlsb2NhbF9jcHVfZGF0YS0+cGZtX2Rjcl9wcCA9IDA7CisjZW5kaWYKKyNlbHNlCisJcGZtX3Rhc2tsaXN0X3RvZ2dsZV9wcCgwKTsKKyNlbmRpZgorI2VuZGlmCisKKwkvKiBkaXNhYmxlIGluIG15IHNhdmVkIHN0YXRlICovCisJcmVncyA9IChzdHJ1Y3QgcHRfcmVncyAqKSgodW5zaWduZWQgbG9uZykgY3VycmVudCArIElBNjRfU1RLX09GRlNFVCk7CisJcmVncy0tOworCWlhNjRfcHNyKHJlZ3MpLT5wcCA9IDA7Cit9CisKKworc3RhdGljIHZvaWQKK3BtdV9zZWxlY3Rfc3RhcnQodWludCBjcHUpCit7CisJaWYgKGNwdSA9PSBvcF9jcHVfaWQoKSkKKwkJcG11X3N0YXJ0KE5VTEwpOworCWVsc2UKKwkJc21wX2NhbGxfZnVuY3Rpb24ocG11X3N0YXJ0LCAmY3B1LCAwLCAxKTsKK30KKworCitzdGF0aWMgdm9pZAorcG11X3NlbGVjdF9zdG9wKHVpbnQgY3B1KQoreworCWlmIChjcHUgPT0gb3BfY3B1X2lkKCkpCisJCXBtdV9zdG9wKE5VTEwpOworCWVsc2UKKwkJc21wX2NhbGxfZnVuY3Rpb24ocG11X3N0b3AsICZjcHUsIDAsIDEpOworfQorCisKK3N0YXRpYyB2b2lkCitwbXVfc3RhcnRfYWxsKHZvaWQpCit7CisJaW50IGNwdSwgaTsKKyAKKwlmb3IgKGNwdT0wOyBjcHUgPCBzbXBfbnVtX2NwdXM7IGNwdSsrKSB7CisJCXN0cnVjdCBfb3Byb2ZfZGF0YSAqIGRhdGEgPSAmb3Byb2ZfZGF0YVtjcHVdOworCisJCWZvciAoaSA9IDAgOyBpIDwgb3BfbnJfY291bnRlcnMgOyArK2kpIHsKKwkJCWlmIChzeXNjdGwuY3RyW2ldLmVuYWJsZWQpIHsKKwkJCQlkYXRhLT5jdHJfY291bnRbaV0gPSBzeXNjdGwuY3RyW2ldLmNvdW50OworCQkJfSBlbHNlIHsKKwkJCQlkYXRhLT5jdHJfY291bnRbaV0gPSAwOworCQkJfQorCQl9CisJfQorIAorCWlmICghaW5zdGFsbF9oYW5kbGVyKCkpIHsKKwkJc21wX2NhbGxfZnVuY3Rpb24ocG11X3N0YXJ0LCBOVUxMLCAwLCAxKTsKKwkJcG11X3N0YXJ0KE5VTEwpOworCX0KKwkJLyogRklYTUUgbmVlZCBzb21lIHdheSB0byBmYWlsIGhlcmUgKi87Cit9CisKKworc3RhdGljIHZvaWQKK3BtdV9zdG9wX2FsbCh2b2lkKQoreworCXNtcF9jYWxsX2Z1bmN0aW9uKHBtdV9zdG9wLCBOVUxMLCAwLCAxKTsKKwlwbXVfc3RvcChOVUxMKTsKKwlyZXN0b3JlX2hhbmRsZXIoKTsKK30KKworIAorc3RhdGljIGludAorcG11X2NoZWNrX3BhcmFtcyh2b2lkKQoreworCWludCBpOworCWludCBlbmFibGVkID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBvcF9ucl9jb3VudGVycyA7IGkrKykgeworCQlpZiAoIXN5c2N0bC5jdHJbaV0uZW5hYmxlZCkKKwkJCWNvbnRpbnVlOworCisJCWVuYWJsZWQgPSAxOworCisJCWlmICghc3lzY3RsLmN0cltpXS51c2VyICYmICFzeXNjdGwuY3RyW2ldLmtlcm5lbCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJvcHJvZmlsZTogbmVpdGhlciBrZXJuZWwgbm9yIHVzZXIgIgorCQkJICAgICAgICJzZXQgZm9yIGNvdW50ZXIgJWRcbiIsIGkpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQlpZiAoY2hlY2tfcmFuZ2Uoc3lzY3RsLmN0cltpXS5jb3VudCwgMSwgT1BfTUFYX1BFUkZfQ09VTlQsCisJCQkiY3RyIGNvdW50IHZhbHVlICVkIG5vdCBpbiByYW5nZSAoJWQgJWxkKVxuIikpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoIWVuYWJsZWQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJvcHJvZmlsZTogbm8gY291bnRlcnMgaGF2ZSBiZWVuIGVuYWJsZWQuXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIHN0cnVjdCBvcF9tc3JzIGNwdV9tc3JzW05SX0NQVVNdOworCisKK3N0YXRpYyB2b2lkIGZyZWVfbXNyX2dyb3VwKHN0cnVjdCBvcF9tc3JfZ3JvdXAgKiBncm91cCkKK3sKKwlpZiAoZ3JvdXAtPmFkZHJzKQorCQlrZnJlZShncm91cC0+YWRkcnMpOworCWlmIChncm91cC0+c2F2ZWQpCisJCWtmcmVlKGdyb3VwLT5zYXZlZCk7CisJZ3JvdXAtPmFkZHJzID0gTlVMTDsKKwlncm91cC0+c2F2ZWQgPSBOVUxMOworfQorIAorCitzdGF0aWMgdm9pZCBwbXVfc2F2ZV9yZWdpc3RlcnModm9pZCAqIGR1bW15KQoreworCXVpbnQgaTsKKwl1aW50IGNvbnN0IGNwdSA9IG9wX2NwdV9pZCgpOworCXN0cnVjdCBvcF9tc3JfZ3JvdXAgKiBjb3VudGVycyA9ICZjcHVfbXNyc1tjcHVdLmNvdW50ZXJzOworCXN0cnVjdCBvcF9tc3JfZ3JvdXAgKiBjb250cm9scyA9ICZjcHVfbXNyc1tjcHVdLmNvbnRyb2xzOworCisJY291bnRlcnMtPmFkZHJzID0gTlVMTDsgCisJY291bnRlcnMtPnNhdmVkID0gTlVMTDsKKwljb250cm9scy0+YWRkcnMgPSBOVUxMOworCWNvbnRyb2xzLT5zYXZlZCA9IE5VTEw7CisKKwljb3VudGVycy0+c2F2ZWQgPSBrbWFsbG9jKAorCQlvcF9ucl9jb3VudGVycyAqIHNpemVvZihzdHJ1Y3Qgb3Bfc2F2ZWRfbXNyKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjb3VudGVycy0+c2F2ZWQpCisJCWdvdG8gZmF1bHQ7CisgCisJY29udHJvbHMtPnNhdmVkID0ga21hbGxvYygKKwkJb3BfbnJfY291bnRlcnMgKiBzaXplb2Yoc3RydWN0IG9wX3NhdmVkX21zciksIEdGUF9LRVJORUwpOworCWlmICghY29udHJvbHMtPnNhdmVkKQorCQlnb3RvIGZhdWx0OworIAorCWZvciAoaSA9IDA7IGkgPCBvcF9ucl9jb3VudGVyczsgKytpKSB7CisJCWNvbnRyb2xzLT5zYXZlZFtpXS5sb3cgPSBnZXRfcG1jKGkpOworCQljb3VudGVycy0+c2F2ZWRbaV0ubG93ID0gZ2V0X3BtZChpKTsKKwl9CisJcmV0dXJuOworCitmYXVsdDoKKwlmcmVlX21zcl9ncm91cChjb3VudGVycyk7CisJZnJlZV9tc3JfZ3JvdXAoY29udHJvbHMpOworfQorIAorCitzdGF0aWMgdm9pZCBwbXVfcmVzdG9yZV9yZWdpc3RlcnModm9pZCAqIGR1bW15KQoreworCXVpbnQgaTsKKwl1aW50IGNvbnN0IGNwdSA9IG9wX2NwdV9pZCgpOworCXN0cnVjdCBvcF9tc3JfZ3JvdXAgKiBjb3VudGVycyA9ICZjcHVfbXNyc1tjcHVdLmNvdW50ZXJzOworCXN0cnVjdCBvcF9tc3JfZ3JvdXAgKiBjb250cm9scyA9ICZjcHVfbXNyc1tjcHVdLmNvbnRyb2xzOworCisJZm9yIChpID0gMDsgaSA8IG9wX25yX2NvdW50ZXJzOyArK2kpIHsKKwkJc2V0X3BtYyhjb250cm9scy0+c2F2ZWRbaV0ubG93LCBpKTsKKwkJc2V0X3BtZChjb3VudGVycy0+c2F2ZWRbaV0ubG93LCBpKTsKKwl9CisKKwlmcmVlX21zcl9ncm91cChjb3VudGVycyk7CisJZnJlZV9tc3JfZ3JvdXAoY29udHJvbHMpOworfQorCisKKworc3RhdGljIGludAorcG11X2luaXQodm9pZCkKK3sKKwlpbnQgZXJyID0gMDsgCisKKwkvKiBmaWd1cmUgb3V0IHByb2Nlc3NvciB0eXBlIGNvbmZpZ3VyZSBudW1iZXIgb2YgYml0cyBpbiBwbWQKKwkgICBhbmQgbnVtYmVyIG9mIGNvdW50ZXJzICovCisJc3dpdGNoIChnZXRfY3B1X3R5cGUoKSkgeworCWNhc2UgQ1BVX0lBNjRfMToKKwkJcG1kX21hc2sgPSBJQTY0XzFfUE1EX01BU0tfVkFMOyBicmVhazsKKwljYXNlIENQVV9JQTY0XzI6CisJY2FzZSBDUFVfSUE2NDoKKwkJcG1kX21hc2sgPSBJQTY0XzJfUE1EX01BU0tfVkFMOyBicmVhazsKKwlkZWZhdWx0OgorCQllcnIgPSAtRUlPOyBicmVhazsKKwl9CisKKwlvcF9ucl9jb3VudGVycyA9IDQ7CisKKwlpZiAoKGVyciA9IHNtcF9jYWxsX2Z1bmN0aW9uKHBtdV9zYXZlX3JlZ2lzdGVycywgTlVMTCwgMCwgMSkpKQorCQlnb3RvIG91dDsKKworCXBtdV9zYXZlX3JlZ2lzdGVycyhOVUxMKTsKKworb3V0OgorCXJldHVybiBlcnI7Cit9CisgCisKK3N0YXRpYyB2b2lkCitwbXVfZGVpbml0KHZvaWQpCit7CisJc21wX2NhbGxfZnVuY3Rpb24ocG11X3Jlc3RvcmVfcmVnaXN0ZXJzLCBOVUxMLCAwLCAxKTsKKwlwbXVfcmVzdG9yZV9yZWdpc3RlcnMoTlVMTCk7Cit9CisgCisKK3N0YXRpYyBjaGFyICogbmFtZXNbXSA9IHsgIjAiLCAiMSIsICIyIiwgIjMiLCB9OworCisKK3N0YXRpYyBpbnQKK3BtdV9hZGRfc3lzY3RscyhjdGxfdGFibGUgKiBuZXh0KQoreworCWN0bF90YWJsZSAqIHN0YXJ0ID0gbmV4dDsgCisJY3RsX3RhYmxlICogdGFiOyAKKwlpbnQgaSwgajsKKyAKKwlmb3IgKGk9MDsgaSA8IG9wX25yX2NvdW50ZXJzOyBpKyspIHsKKwkJbmV4dC0+Y3RsX25hbWUgPSAxOworCQluZXh0LT5wcm9jbmFtZSA9IG5hbWVzW2ldOworCQluZXh0LT5tb2RlID0gMDcwMDsKKworCQlpZiAoISh0YWIgPSBrbWFsbG9jKHNpemVvZihjdGxfdGFibGUpKjcsIEdGUF9LRVJORUwpKSkKKwkJCWdvdG8gY2xlYW51cDsKKyAKKwkJbmV4dC0+Y2hpbGQgPSB0YWI7CisKKwkJbWVtc2V0KHRhYiwgMCwgc2l6ZW9mKGN0bF90YWJsZSkqNyk7CisJCXRhYlswXSA9ICgoY3RsX3RhYmxlKSB7IDEsICJlbmFibGVkIiwgJnN5c2N0bF9wYXJtcy5jdHJbaV0uZW5hYmxlZCwgc2l6ZW9mKGludCksIDA2MDAsIE5VTEwsIGxwcm9jX2RvaW50dmVjLCBOVUxMLCB9KTsKKwkJdGFiWzFdID0gKChjdGxfdGFibGUpIHsgMSwgImV2ZW50IiwgJnN5c2N0bF9wYXJtcy5jdHJbaV0uZXZlbnQsIHNpemVvZihpbnQpLCAwNjAwLCBOVUxMLCBscHJvY19kb2ludHZlYywgTlVMTCwgIH0pOworCQl0YWJbMl0gPSAoKGN0bF90YWJsZSkgeyAxLCAiY291bnQiLCAmc3lzY3RsX3Bhcm1zLmN0cltpXS5jb3VudCwgc2l6ZW9mKGludCksIDA2MDAsIE5VTEwsIGxwcm9jX2RvaW50dmVjLCBOVUxMLCB9KTsKKwkJdGFiWzNdID0gKChjdGxfdGFibGUpIHsgMSwgInVuaXRfbWFzayIsICZzeXNjdGxfcGFybXMuY3RyW2ldLnVuaXRfbWFzaywgc2l6ZW9mKGludCksIDA2MDAsIE5VTEwsIGxwcm9jX2RvaW50dmVjLCBOVUxMLCB9KTsKKwkJdGFiWzRdID0gKChjdGxfdGFibGUpIHsgMSwgImtlcm5lbCIsICZzeXNjdGxfcGFybXMuY3RyW2ldLmtlcm5lbCwgc2l6ZW9mKGludCksIDA2MDAsIE5VTEwsIGxwcm9jX2RvaW50dmVjLCBOVUxMLCB9KTsKKwkJdGFiWzVdID0gKChjdGxfdGFibGUpIHsgMSwgInVzZXIiLCAmc3lzY3RsX3Bhcm1zLmN0cltpXS51c2VyLCBzaXplb2YoaW50KSwgMDYwMCwgTlVMTCwgbHByb2NfZG9pbnR2ZWMsIE5VTEwsIH0pOworCQluZXh0Kys7CisJfQorCisJcmV0dXJuIDA7CisKK2NsZWFudXA6CisJbmV4dCA9IHN0YXJ0OworCWZvciAoaiA9IDA7IGogPCBpOyBqKyspIHsKKwkJa2ZyZWUobmV4dC0+Y2hpbGQpOworCQluZXh0Kys7CisJfQorCXJldHVybiAtRUZBVUxUOworfQorCisKK3N0YXRpYyB2b2lkIHBtdV9yZW1vdmVfc3lzY3RscyhjdGxfdGFibGUgKiBuZXh0KQoreworCWludCBpaTsKKworCWZvciAoaWk9MDsgaWkgPCBvcF9ucl9jb3VudGVyczsgaWkrKykgeworCQlrZnJlZShuZXh0LT5jaGlsZCk7CisJCW5leHQrKzsKKwl9Cit9CisgCisKK3N0cnVjdCBvcF9pbnRfb3BlcmF0aW9ucyBvcF9ubWlfb3BzID0geworCWluaXQ6IHBtdV9pbml0LAorCWRlaW5pdDogcG11X2RlaW5pdCwKKwlhZGRfc3lzY3RsczogcG11X2FkZF9zeXNjdGxzLAorCXJlbW92ZV9zeXNjdGxzOiBwbXVfcmVtb3ZlX3N5c2N0bHMsCisJY2hlY2tfcGFyYW1zOiBwbXVfY2hlY2tfcGFyYW1zLAorCXNldHVwOiBwbXVfc2V0dXBfYWxsLAorCXN0YXJ0OiBwbXVfc3RhcnRfYWxsLAorCXN0b3A6IHBtdV9zdG9wX2FsbCwKKwlzdGFydF9jcHU6IHBtdV9zZWxlY3Rfc3RhcnQsCisJc3RvcF9jcHU6IHBtdV9zZWxlY3Rfc3RvcCwgCit9OworCisKK3N0cnVjdCBvcF9pbnRfb3BlcmF0aW9ucyBjb25zdCAqIG9wX2ludF9pbnRlcmZhY2UoKQoreworCXJldHVybiAmb3Bfbm1pX29wczsKK30KKworLyogTmVlZCB0aGlzIGR1bW15IHNvIG1vZHVsZS9vcHJvZmlsZS5jIGxpbmtzICovCitzdHJ1Y3Qgb3BfaW50X29wZXJhdGlvbnMgb3BfcnRjX29wcyA9IHsKKwlpbml0OiBOVUxMLAorCWRlaW5pdDogTlVMTCwKKwlhZGRfc3lzY3RsczogTlVMTCwKKwlyZW1vdmVfc3lzY3RsczogTlVMTCwKKwljaGVja19wYXJhbXM6IE5VTEwsCisJc2V0dXA6IE5VTEwsCisJc3RhcnQ6IE5VTEwsCisJc3RvcDogTlVMTCwKKwlzdGFydF9jcHU6IE5VTEwsCisJc3RvcF9jcHU6IE5VTEwsCit9OwpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvbW9kdWxlL2lhNjQvb3Bfc3lzY2FsbHMuYyBiL29wcm9maWxlLTAuOS43L21vZHVsZS9pYTY0L29wX3N5c2NhbGxzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDY4YzkxNgotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L21vZHVsZS9pYTY0L29wX3N5c2NhbGxzLmMKQEAgLTAsMCArMSwzODMgQEAKKy8qKgorICogQGZpbGUgb3Bfc3lzY2FsbHMuYworICogVHJhY2luZyBvZiBzeXN0ZW0gY2FsbHMKKyAqCisgKiBAcmVtYXJrIENvcHlyaWdodCAyMDAyIE9Qcm9maWxlIGF1dGhvcnMKKyAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCisgKgorICogQGF1dGhvciBCb2IgTW9udGdvbWVyeQorICogQGF1dGhvciBXaWxsIENvaGVuCisgKiBAYXV0aG9yIEpvaG4gTGV2b24KKyAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQorICovCisKKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3VuaXN0ZC5oPgorI2luY2x1ZGUgPGxpbnV4L21tYW4uaD4KKyNpbmNsdWRlIDxsaW51eC9maWxlLmg+CisKKyNpbmNsdWRlICJvcHJvZmlsZS5oIgorI2luY2x1ZGUgIm9wX2RjYWNoZS5oIgorI2luY2x1ZGUgIm9wX3V0aWwuaCIKKwordWludCBkbmFtZV90b3A7CitzdHJ1Y3QgcXN0ciAqKmRuYW1lX3N0YWNrOworY2hhciAqIHBvb2xfcG9zOworY2hhciAqIHBvb2xfc3RhcnQ7CitjaGFyICogcG9vbF9lbmQ7CisgCit2b2lkIG9wcm9mX3B1dF9ub3RlKHN0cnVjdCBvcF9ub3RlICogc2FtcCk7CisKKy8qIC0tLS0tLS0tLS0tLSBzeXN0ZW0gY2FsbHMgLS0tLS0tLS0tLS0tLS0tICovCisKK3N0cnVjdCBtbWFwX2FyZ19zdHJ1Y3QgeworCXVuc2lnbmVkIGxvbmcgYWRkcjsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBsZW47CisgICAgICAgIHVuc2lnbmVkIGxvbmcgcHJvdDsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBmZDsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQ7Cit9OworCisvKiAtLS0tLS0tLS0gSUE2NCB2ZXJzaW9ucyBvZiBzeXN0ZW0gY2FsbHMgLS0tLS0tICovCithc21saW5rYWdlIHN0YXRpYyBpbnQgKCpvbGRfc3lzX2Nsb25lKShsb25nLCBsb25nKTsKK2FzbWxpbmthZ2Ugc3RhdGljIGludCAoKm9sZF9zeXNfY2xvbmUyKShsb25nLCBsb25nLCBsb25nKTsKK2FzbWxpbmthZ2Ugc3RhdGljIGludCAoKm9sZF9zeXNfZXhlY3ZlKShjaGFyICosIGNoYXIgKiosIGNoYXIgKiopOworYXNtbGlua2FnZSBzdGF0aWMgdW5zaWduZWQgbG9uZyAoKm9sZF9zeXNfbW1hcCkodW5zaWduZWQgbG9uZywKKwkJCQl1bnNpZ25lZCBsb25nLCBpbnQsIGludCwgaW50LCBsb25nKTsKK2FzbWxpbmthZ2Ugc3RhdGljIHVuc2lnbmVkIGxvbmcgKCpvbGRfc3lzX21tYXAyKSh1bnNpZ25lZCBsb25nLAorCQkJCXVuc2lnbmVkIGxvbmcsIGludCwgaW50LCBpbnQsIGxvbmcpOworYXNtbGlua2FnZSBzdGF0aWMgbG9uZyAoKm9sZF9zeXNfaW5pdF9tb2R1bGUpKGNoYXIgY29uc3QgKiwgc3RydWN0IG1vZHVsZSAqKTsKK2FzbWxpbmthZ2Ugc3RhdGljIGxvbmcgKCpvbGRfc3lzX2V4aXQpKGludCk7CisKKy8qIC0tLS0tLS0tLSBkZWNsYXJhdGlvbnMgb2YgaW50ZXJjZXB0aW9uIHN0dWJzIGZvciBJQTY0ICAtLS0tLS0gKi8KK2FzbWxpbmthZ2UgbG9uZyBwb3N0X3N0dWJfY2xvbmUobG9uZywgbG9uZyk7Cithc21saW5rYWdlIGxvbmcgcG9zdF9zdHViX2Nsb25lMihsb25nLCBsb25nLCBsb25nKTsKK2FzbWxpbmthZ2UgbG9uZyBteV9pYTY0X2V4ZWN2ZShjaGFyICosIGNoYXIgKiosIGNoYXIgKiopOworYXNtbGlua2FnZSB1bnNpZ25lZCBsb25nIHBvc3Rfc3R1Yl9tbWFwKHVuc2lnbmVkIGxvbmcsCisJCQkJCXVuc2lnbmVkIGxvbmcsIGludCwgaW50LCBpbnQsIGxvbmcpOworYXNtbGlua2FnZSB1bnNpZ25lZCBsb25nIHBvc3Rfc3R1Yl9tbWFwMih1bnNpZ25lZCBsb25nLAorCQkJCQl1bnNpZ25lZCBsb25nLCBpbnQsIGludCwgaW50LCBsb25nKTsKK2FzbWxpbmthZ2UgbG9uZyBwb3N0X3N0dWJfaW5pdF9tb2R1bGUoY2hhciBjb25zdCAqLCBzdHJ1Y3QgbW9kdWxlICopOworYXNtbGlua2FnZSBsb25nIHByZV9zdHViX2V4aXQoaW50KTsKKworLyogSUE2NCBzeXN0ZW0gY2FsbCB0YWJsZSBkb2Vzbid0IHVzZSBmdW5jdGlvbiBwb2ludGVycywgaXQgdXNlcworICogcG9pbnRlcnMgdG8gY29kZSAobm90IHRoZSBzYW1lIHRoaW5nKS4gIEJhc2ljYWxseSBpdCBjYW4gdmlvbGF0ZSB0aGUKKyAqIHByb2NlZHVyZSBjYWxsaW5nIHJ1bGVzIGJlY2F1c2UgdGhlc2UgInByb2NlZHVyZSBjYWxscyIgYXJlIG1hZGUgYnkKKyAqIHRoZSBhc3NlbWJseSBsYW5ndWFnZSBCUkVBSyBoYW5kbGVyIGluIGl2dC5TLgorICovCisKK3N0cnVjdCBmZGVzYyB7CisJdm9pZCAqIGlwOworCXZvaWQgKiBncDsKK307CisKK3N0cnVjdCBmZGVzYyBmZGVzY19jbG9uZTsKK3N0cnVjdCBmZGVzYyBmZGVzY19jbG9uZTI7CitzdHJ1Y3QgZmRlc2MgZmRlc2NfZXhlY3ZlOworc3RydWN0IGZkZXNjIGZkZXNjX21tYXA7CitzdHJ1Y3QgZmRlc2MgZmRlc2NfbW1hcDI7CitzdHJ1Y3QgZmRlc2MgZmRlc2NfaW5pdF9tb2R1bGU7CitzdHJ1Y3QgZmRlc2MgZmRlc2NfZXhpdDsKKy8qIC0tLS0tLS0tLS0tIEVuZCBvZiBJQTY0IHdlaXJkbmVzcyBmb3Igbm93IC0tLS0tLS0tLS0tLS0tICovCisKK3NwaW5sb2NrX3QgbWFwX2xvY2sgPSBTUElOX0xPQ0tfVU5MT0NLRUQ7CisKKy8qIGNhbGxlZCB3aXRoIG1hcF9sb2NrIGhlbGQgKi8KK3N0YXRpYyB2b2lkIG9wcm9mX291dHB1dF9tYXAodWxvbmcgYWRkciwgdWxvbmcgbGVuLAorCXVsb25nIG9mZnNldCwgc3RydWN0IGZpbGUgKiBmaWxlLCBpbnQgaXNfZXhlY3ZlKQoreworCXN0cnVjdCBvcF9ub3RlIG5vdGU7CisKKwkvKiBkb24ndCBib3RoZXIgd2l0aCAvZGV2L3plcm8gbWFwcGluZ3MgZXRjLiAqLworCWlmICghbGVuKQorCQlyZXR1cm47CisKKwlub3RlLnBpZCA9IGN1cnJlbnQtPnBpZDsKKwlub3RlLnRnaWQgPSBvcF9nZXRfdGdpZCgpOworCW5vdGUuYWRkciA9IGFkZHI7CisJbm90ZS5sZW4gPSBsZW47CisJbm90ZS5vZmZzZXQgPSBvZmZzZXQ7CisJbm90ZS50eXBlID0gaXNfZXhlY3ZlID8gT1BfRVhFQyA6IE9QX01BUDsKKwlub3RlLmhhc2ggPSBoYXNoX3BhdGgoZmlsZSk7CisJaWYgKG5vdGUuaGFzaCA9PSAtMSkKKwkJcmV0dXJuOworCW9wcm9mX3B1dF9ub3RlKCZub3RlKTsKK30KKworc3RhdGljIGludCBvcHJvZl9vdXRwdXRfbWFwcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKiB0YXNrKQoreworCWludCBzaXplPTA7CisJc3RydWN0IG1tX3N0cnVjdCAqIG1tOworCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqIG1hcDsKKworCS8qIHdlIGRvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQgbW1fdXNlcnMgaGVyZSwgc2luY2UgdGhlcmUgaXMgYXQKKwkgICBsZWFzdCBvbmUgdXNlciAoY3VycmVudCksIGFuZCBpZiB0aGVyZSdzIG90aGVyIGNvZGUgdXNpbmcgdGhpcworCSAgIG1tLCB0aGVuIG1tX3VzZXJzIG11c3QgYmUgYXQgbGVhc3QgMjsgd2Ugc2hvdWxkIG5ldmVyIGhhdmUgdG8KKwkgICBtbXB1dCgpIGhlcmUuICovCisKKwlpZiAoIShtbSA9IHRhc2stPm1tKSkKKwkJZ290byBvdXQ7CisKKwlsb2NrX21tYXAobW0pOworCXNwaW5fbG9jaygmbWFwX2xvY2spOworCisJLyogV2UgbmVlZCB0d28gcGFzcywgZGFlbW9uIGFzc3VtZSB0aGFuIHRoZSBmaXJzdCBtbWFwIG5vdGlmaWNhdGlvbgorCSAqIGlzIGZvciB0aGUgZXhlY3V0YWJsZSBidXQgc29tZSBwcm9jZXNzIGRvZXNuJ3QgZm9sbG93IHRoaXMgbW9kZWwuCisJICovCisJZm9yIChtYXAgPSBtbS0+bW1hcDsgbWFwOyBtYXAgPSBtYXAtPnZtX25leHQpIHsKKwkJaWYgKCEobWFwLT52bV9mbGFncyAmIFZNX0VYRUMpIHx8ICFtYXAtPnZtX2ZpbGUpCisJCQljb250aW51ZTsKKwkJaWYgKCEobWFwLT52bV9mbGFncyAmIFZNX0VYRUNVVEFCTEUpKQorCQkJY29udGludWU7CisKKwkJb3Byb2Zfb3V0cHV0X21hcChtYXAtPnZtX3N0YXJ0LCBtYXAtPnZtX2VuZC1tYXAtPnZtX3N0YXJ0LAorCQkJR0VUX1ZNX09GRlNFVChtYXApLCBtYXAtPnZtX2ZpbGUsIDEpOworCX0KKwlmb3IgKG1hcCA9IG1tLT5tbWFwOyBtYXA7IG1hcCA9IG1hcC0+dm1fbmV4dCkgeworCQlpZiAoIShtYXAtPnZtX2ZsYWdzICYgVk1fRVhFQykgfHwgIW1hcC0+dm1fZmlsZSkKKwkJCWNvbnRpbnVlOworCQlpZiAobWFwLT52bV9mbGFncyAmIFZNX0VYRUNVVEFCTEUpCisJCQljb250aW51ZTsKKworCQlvcHJvZl9vdXRwdXRfbWFwKG1hcC0+dm1fc3RhcnQsIG1hcC0+dm1fZW5kLW1hcC0+dm1fc3RhcnQsCisJCQlHRVRfVk1fT0ZGU0VUKG1hcCksIG1hcC0+dm1fZmlsZSwgMCk7CisJfQorCXNwaW5fdW5sb2NrKCZtYXBfbG9jayk7CisJdW5sb2NrX21tYXAobW0pOworCitvdXQ6CisJcmV0dXJuIHNpemU7Cit9CisKKworLyogZXhlY3ZlIGlzIGEgc3BlY2lhbCBjYXNlIG9uIElBNjQuICBUaGUgb3RoZXJzIGdldCB0aGUgcmVzdWx0IGFuZAorICogYXJndW1lbnRzIGFmdGVyIHRoZSBzeXN0ZW0gY2FsbCBoYXMgYmVlbiBtYWRlIGZyb20gdGhlIEFTTSBzdHViLiAqLworCithc21saW5rYWdlIGxvbmcKK215X3N5c19leGVjdmUgKGNoYXIgKiBmaWxlbmFtZSwgY2hhciAqKmFyZ3YsIGNoYXIgKiplbnZwLCBzdHJ1Y3QgcHRfcmVncyAqIHJlZ3MpCit7CisJaW50IGVycm9yOworCisJTU9EX0lOQ19VU0VfQ09VTlQ7CisKKwlmaWxlbmFtZSA9IGdldG5hbWUoZmlsZW5hbWUpOworCWVycm9yID0gUFRSX0VSUihmaWxlbmFtZSk7CisJaWYgKElTX0VSUihmaWxlbmFtZSkpCisJCWdvdG8gb3V0OworCWVycm9yID0gZG9fZXhlY3ZlKGZpbGVuYW1lLCBhcmd2LCBlbnZwLCByZWdzKTsKKworCWlmICghZXJyb3IpIHsKKwkJUFRSQUNFX09GRihjdXJyZW50KTsKKwkJb3Byb2Zfb3V0cHV0X21hcHMoY3VycmVudCk7CisJfQorCXB1dG5hbWUoZmlsZW5hbWUpOworb3V0OgorCXVubG9ja19leGVjdmUoKTsKKwlNT0RfREVDX1VTRV9DT1VOVDsKKwlyZXR1cm4gZXJyb3I7Cit9CisKKworc3RhdGljIHZvaWQgb3V0X21tYXAodWxvbmcgYWRkciwgdWxvbmcgbGVuLCB1bG9uZyBwcm90LCB1bG9uZyBmbGFncywKKwl1bG9uZyBmZCwgdWxvbmcgb2Zmc2V0KQoreworCXN0cnVjdCBmaWxlICogZmlsZTsKKworCWxvY2tfb3V0X21tYXAoKTsKKyAKKwlmaWxlID0gZmdldChmZCk7CisJaWYgKCFmaWxlKQorCQlnb3RvIG91dDsKKworCXNwaW5fbG9jaygmbWFwX2xvY2spOworCW9wcm9mX291dHB1dF9tYXAoYWRkciwgbGVuLCBvZmZzZXQsIGZpbGUsIDApOworCXNwaW5fdW5sb2NrKCZtYXBfbG9jayk7CisKKwlmcHV0KGZpbGUpOworCitvdXQ6CisJdW5sb2NrX291dF9tbWFwKCk7Cit9CisKKworLyogCisgKiBJQTY0IG1tYXAgcm91dGluZXM6CisgKiBUaGUgcG9zdF9zeXNfKiByb3V0aW5lcyBhcmUgY2FsbGVkIGFmdGVyIHRoZSBzeXNjYWxsIGhhcyBiZWVuIG1hZGUuCisgKiBUaGUgZmlyc3QgYXJndW1lbnQgaXMgdGhlIHJldHVybiB2YWx1ZSBmcm9tIHRoZSBzeXN0ZW0gY2FsbC4KKyAqLworYXNtbGlua2FnZSB2b2lkIHBvc3Rfc3lzX21tYXAyKHVsb25nIHJldCwgdWxvbmcgYWRkciwgdWxvbmcgbGVuLAorCXVsb25nIHByb3QsIHVsb25nIGZsYWdzLCB1bG9uZyBmZCwgdWxvbmcgcGdvZmYpCit7CisJLyogRklYTUU6IFRoaXMgc2hvdWxkIGJlIGRvbmUgaW4gdGhlIEFTTSBzdHViLiAqLworCU1PRF9JTkNfVVNFX0NPVU5UOworCisJaWYgKChwcm90ICYgUFJPVF9FWEVDKSAmJiByZXQgPj0gMCkKKwkJb3V0X21tYXAocmV0LCBsZW4sIHByb3QsIGZsYWdzLCBmZCwgcGdvZmYgPDwgUEFHRV9TSElGVCk7CisJZ290byBvdXQ7CitvdXQ6CisJTU9EX0RFQ19VU0VfQ09VTlQ7Cit9CisKK2FzbWxpbmthZ2Ugdm9pZCBwb3N0X3N5c19tbWFwKHVsb25nIHJldCwgdWxvbmcgYWRkciwgdWxvbmcgbGVuLAorCXVsb25nIHByb3QsIHVsb25nIGZsYWdzLCB1bG9uZyBmZCwgdWxvbmcgb2ZmKQoreworCS8qIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBkb25lIGluIHRoZSBBU00gc3R1Yi4gKi8KKwlNT0RfSU5DX1VTRV9DT1VOVDsKKworCWlmICgocHJvdCAmIFBST1RfRVhFQykgJiYgcmV0ID49IDApCisJCW91dF9tbWFwKHJldCwgbGVuLCBwcm90LCBmbGFncywgZmQsIG9mZik7CisJZ290byBvdXQ7CitvdXQ6CisJTU9EX0RFQ19VU0VfQ09VTlQ7Cit9CisKKworaW5saW5lIHN0YXRpYyB2b2lkIG9wcm9mX3JlcG9ydF9mb3JrKHUzMiBvbGRfcGlkLCB1MzIgbmV3X3BpZCwgdTMyIG9sZF90Z2lkLCB1MzIgbmV3X3RnaWQpCit7CisJc3RydWN0IG9wX25vdGUgbm90ZTsKKworCW5vdGUudHlwZSA9IE9QX0ZPUks7CisJbm90ZS5waWQgPSBvbGRfcGlkOworCW5vdGUudGdpZCA9IG9sZF90Z2lkOworCW5vdGUuYWRkciA9IG5ld19waWQ7CisJbm90ZS5sZW4gPSBuZXdfdGdpZDsKKwlvcHJvZl9wdXRfbm90ZSgmbm90ZSk7Cit9CisKKworYXNtbGlua2FnZSB2b2lkIHBvc3Rfc3lzX2Nsb25lKGxvbmcgcmV0LCBsb25nIGFyZzAsIGxvbmcgYXJnMSkKK3sKKwl1MzIgcGlkID0gY3VycmVudC0+cGlkOworCXUzMiB0Z2lkID0gb3BfZ2V0X3RnaWQoKTsKKworCS8qIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBkb25lIGluIHRoZSBBU00gc3R1Yi4gKi8KKwlNT0RfSU5DX1VTRV9DT1VOVDsKKworCWlmIChyZXQpCisJCS8qIEZJWE1FOiBteSBsaWJjIHNob3cgY2xvbmUoKSBpcyBub3QgaW1wbGVtZW50ZWQgaW4gaWE2NCAKKwkJICogYnV0IHVzZWQgb25seSBieSBmb3JrKCkgd2l0aCBhIFNJR0NISUxEIGZpcnN0IHBhcmFtZXRlcgorCQkgKiBzbyB3ZSBhc3N1bWUgaXQncyBhIGZvcmsgKi8KKwkJb3Byb2ZfcmVwb3J0X2ZvcmsocGlkLCByZXQsIHBpZCwgdGdpZCk7CisJTU9EX0RFQ19VU0VfQ09VTlQ7Cit9CisKK2FzbWxpbmthZ2Ugdm9pZCBwb3N0X3N5c19jbG9uZTIobG9uZyByZXQsIGxvbmcgYXJnMCwgbG9uZyBhcmcxLCBsb25nIGFyZzIpCit7CisJdTMyIHBpZCA9IGN1cnJlbnQtPnBpZDsKKwl1MzIgdGdpZCA9IG9wX2dldF90Z2lkKCk7CisJbG9uZyBjbG9uZV9mbGFncyA9IGFyZzA7CisKKwkvKiBGSVhNRTogVGhpcyBzaG91bGQgYmUgZG9uZSBpbiB0aGUgQVNNIHN0dWIuICovCisJTU9EX0lOQ19VU0VfQ09VTlQ7CisKKwlpZiAocmV0KSB7CisJCWlmIChjbG9uZV9mbGFncyAmIENMT05FX1RIUkVBRCkKKwkJCW9wcm9mX3JlcG9ydF9mb3JrKHBpZCwgcmV0LCB0Z2lkLCB0Z2lkKTsKKwkJZWxzZQorCQkJb3Byb2ZfcmVwb3J0X2ZvcmsocGlkLCByZXQsIHRnaWQsIHJldCk7CisJfQorCU1PRF9ERUNfVVNFX0NPVU5UOworfQorCithc21saW5rYWdlIHZvaWQKK3Bvc3Rfc3lzX2luaXRfbW9kdWxlKGxvbmcgcmV0LCBjaGFyIGNvbnN0ICogbmFtZV91c2VyLAorICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG1vZHVsZSAqIG1vZF91c2VyKQoreworCS8qIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBkb25lIGluIHRoZSBBU00gc3R1Yi4gKi8KKwlNT0RfSU5DX1VTRV9DT1VOVDsKKworCWlmIChyZXQgPj0gMCkgeworCQlzdHJ1Y3Qgb3Bfbm90ZSBub3RlOworCisJCW5vdGUudHlwZSA9IE9QX0RST1BfTU9EVUxFUzsKKwkJb3Byb2ZfcHV0X25vdGUoJm5vdGUpOworCX0KKwlNT0RfREVDX1VTRV9DT1VOVDsKK30KKworLyogRXhpdCBtdXN0IHVzZSBhIHByZS1jYWxsIGludGVyY2VwdCBzdHViLiAgVGhlcmUgaXMgbm8gcG9zdCBleGl0LiAqLworYXNtbGlua2FnZSB2b2lkIHByZV9zeXNfZXhpdChpbnQgZXJyb3JfY29kZSkKK3sKKwlzdHJ1Y3Qgb3Bfbm90ZSBub3RlOworCisJTU9EX0lOQ19VU0VfQ09VTlQ7CisKKwlub3RlLmFkZHIgPSBjdXJyZW50LT50aW1lcy50bXNfdXRpbWU7CisJbm90ZS5sZW4gPSBjdXJyZW50LT50aW1lcy50bXNfc3RpbWU7CisJbm90ZS5vZmZzZXQgPSBjdXJyZW50LT5zdGFydF90aW1lOworCW5vdGUudHlwZSA9IE9QX0VYSVQ7CisJbm90ZS5waWQgPSBjdXJyZW50LT5waWQ7CisJbm90ZS50Z2lkID0gb3BfZ2V0X3RnaWQoKTsKKwlvcHJvZl9wdXRfbm90ZSgmbm90ZSk7CisKKwkvKiB0aGlzIGxvb2tzIFVQLWRhbmdlcm91cywgYXMgdGhlIGV4aXQgc2xlZXBzIGFuZCB3ZSBkb24ndAorCSAqIGhhdmUgYSB1c2UgY291bnQsIGJ1dCBpbiBmYWN0IGl0cyBvayBhcyBzeXNfZXhpdCBpcyBub3JldHVybiwKKwkgKiBzbyB3ZSBjYW4gbmV2ZXIgY29tZSBiYWNrIHRvIHRoaXMgbm9uLWV4aXN0ZW50IGV4ZWMgcGFnZQorCSAqLworCU1PRF9ERUNfVVNFX0NPVU5UOworfQorCitleHRlcm4gdm9pZCAqIHN5c19jYWxsX3RhYmxlW107CisKKy8qIEZJWE1FOiAgTm93IHRoYXQgSSdtIG5ldmVyIHRyeWluZyB0byBkbyBhIEMtbGV2ZWwgY2FsbCB0aHJvdWdoIHRoZXNlCisgKiBwb2ludGVycywgSSBzaG91bGQganVzdCBzYXZlLCBpbnRlcmNlcHQsIGFuZCByZXN0b3JlIHdpdGggdm9pZCAqCisgKiBpbnN0ZWFkIG9mIHRoZSB2b2lkICogcGFydCBvZiB0aGUgZnVuY3Rpb24gZGVzY3JpcHRvciwgSSB0aGluay4KKyAqLworCit2b2lkIG9wX3NhdmVfc3lzY2FsbHModm9pZCkKK3sKKwlmZGVzY19jbG9uZS5pcCA9IHN5c19jYWxsX3RhYmxlW19fTlJfY2xvbmUgLSBfX05SX25pX3N5c2NhbGxdOworCW9sZF9zeXNfY2xvbmUgPSAodm9pZCAqKSZmZGVzY19jbG9uZTsKKwlmZGVzY19jbG9uZTIuaXAgPSBzeXNfY2FsbF90YWJsZVtfX05SX2Nsb25lMiAtIF9fTlJfbmlfc3lzY2FsbF07CisJb2xkX3N5c19jbG9uZTIgPSAodm9pZCAqKSZmZGVzY19jbG9uZTI7CisJZmRlc2NfZXhlY3ZlLmlwID0gc3lzX2NhbGxfdGFibGVbX19OUl9leGVjdmUgLSBfX05SX25pX3N5c2NhbGxdOworCW9sZF9zeXNfZXhlY3ZlID0gKHZvaWQgKikmZmRlc2NfZXhlY3ZlOworCWZkZXNjX21tYXAuaXAgPSBzeXNfY2FsbF90YWJsZVtfX05SX21tYXAgLSBfX05SX25pX3N5c2NhbGxdOworCW9sZF9zeXNfbW1hcCA9ICh2b2lkICopJmZkZXNjX21tYXA7CisJZmRlc2NfbW1hcDIuaXAgPSBzeXNfY2FsbF90YWJsZVtfX05SX21tYXAyIC0gX19OUl9uaV9zeXNjYWxsXTsKKwlvbGRfc3lzX21tYXAyID0gKHZvaWQgKikmZmRlc2NfbW1hcDI7CisJZmRlc2NfaW5pdF9tb2R1bGUuaXAgPSBzeXNfY2FsbF90YWJsZVtfX05SX2luaXRfbW9kdWxlIC0gX19OUl9uaV9zeXNjYWxsXTsKKwlvbGRfc3lzX2luaXRfbW9kdWxlID0gKHZvaWQgKikmZmRlc2NfaW5pdF9tb2R1bGU7CisJZmRlc2NfZXhpdC5pcCA9IHN5c19jYWxsX3RhYmxlW19fTlJfZXhpdCAtIF9fTlJfbmlfc3lzY2FsbF07CisJb2xkX3N5c19leGl0ID0gKHZvaWQgKikmZmRlc2NfZXhpdDsKK30KKwordm9pZCBvcF9pbnRlcmNlcHRfc3lzY2FsbHModm9pZCkKK3sKKwkvKiBNdXN0IGV4dHJhY3QgdGhlIGZ1bmN0aW9uIGFkZHJlc3MgZnJvbSB0aGUgc3R1YiBmdW5jdGlvbgorCSAqIGRlc2NyaXB0b3JzLgorCSAqLworCXN5c19jYWxsX3RhYmxlW19fTlJfY2xvbmUgLSBfX05SX25pX3N5c2NhbGxdID0gCisJCSgoc3RydWN0IGZkZXNjICopcG9zdF9zdHViX2Nsb25lKS0+aXA7CisJc3lzX2NhbGxfdGFibGVbX19OUl9jbG9uZTIgLSBfX05SX25pX3N5c2NhbGxdID0gCisJCSgoc3RydWN0IGZkZXNjICopcG9zdF9zdHViX2Nsb25lMiktPmlwOworCXN5c19jYWxsX3RhYmxlW19fTlJfZXhlY3ZlIC0gX19OUl9uaV9zeXNjYWxsXSA9IAorCQkoKHN0cnVjdCBmZGVzYyAqKW15X2lhNjRfZXhlY3ZlKS0+aXA7CisJc3lzX2NhbGxfdGFibGVbX19OUl9tbWFwIC0gX19OUl9uaV9zeXNjYWxsXSA9IAorCQkoKHN0cnVjdCBmZGVzYyAqKXBvc3Rfc3R1Yl9tbWFwKS0+aXA7CisJc3lzX2NhbGxfdGFibGVbX19OUl9tbWFwMiAtIF9fTlJfbmlfc3lzY2FsbF0gPSAKKwkJKChzdHJ1Y3QgZmRlc2MgKilwb3N0X3N0dWJfbW1hcDIpLT5pcDsKKwlzeXNfY2FsbF90YWJsZVtfX05SX2luaXRfbW9kdWxlIC0gX19OUl9uaV9zeXNjYWxsXSA9IAorCQkoKHN0cnVjdCBmZGVzYyAqKXBvc3Rfc3R1Yl9pbml0X21vZHVsZSktPmlwOworCXN5c19jYWxsX3RhYmxlW19fTlJfZXhpdCAtIF9fTlJfbmlfc3lzY2FsbF0gPSAKKwkJKChzdHJ1Y3QgZmRlc2MgKilwcmVfc3R1Yl9leGl0KS0+aXA7Cit9CisKK3ZvaWQgb3BfcmVzdG9yZV9zeXNjYWxscyh2b2lkKQoreworCXN5c19jYWxsX3RhYmxlW19fTlJfY2xvbmUgLSBfX05SX25pX3N5c2NhbGxdID0gCisJCSgoc3RydWN0IGZkZXNjICopb2xkX3N5c19jbG9uZSktPmlwOworCXN5c19jYWxsX3RhYmxlW19fTlJfY2xvbmUyIC0gX19OUl9uaV9zeXNjYWxsXSA9IAorCQkoKHN0cnVjdCBmZGVzYyAqKW9sZF9zeXNfY2xvbmUyKS0+aXA7CisJc3lzX2NhbGxfdGFibGVbX19OUl9leGVjdmUgLSBfX05SX25pX3N5c2NhbGxdID0gCisJCSgoc3RydWN0IGZkZXNjICopb2xkX3N5c19leGVjdmUpLT5pcDsKKwlzeXNfY2FsbF90YWJsZVtfX05SX21tYXAgLSBfX05SX25pX3N5c2NhbGxdID0gCisJCSgoc3RydWN0IGZkZXNjICopb2xkX3N5c19tbWFwKS0+aXA7CisJc3lzX2NhbGxfdGFibGVbX19OUl9tbWFwMiAtIF9fTlJfbmlfc3lzY2FsbF0gPSAKKwkJKChzdHJ1Y3QgZmRlc2MgKilvbGRfc3lzX21tYXAyKS0+aXA7CisJc3lzX2NhbGxfdGFibGVbX19OUl9pbml0X21vZHVsZSAtIF9fTlJfbmlfc3lzY2FsbF0gPSAKKwkJKChzdHJ1Y3QgZmRlc2MgKilvbGRfc3lzX2luaXRfbW9kdWxlKS0+aXA7CisJc3lzX2NhbGxfdGFibGVbX19OUl9leGl0IC0gX19OUl9uaV9zeXNjYWxsXSA9IAorCQkoKHN0cnVjdCBmZGVzYyAqKW9sZF9zeXNfZXhpdCktPmlwOworfQpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvbW9kdWxlL2lhNjQvb3Byb2ZpbGVfc3R1YnMuUyBiL29wcm9maWxlLTAuOS43L21vZHVsZS9pYTY0L29wcm9maWxlX3N0dWJzLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2JjMTllYQotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L21vZHVsZS9pYTY0L29wcm9maWxlX3N0dWJzLlMKQEAgLTAsMCArMSwxNDAgQEAKKy8qKgorICogQGZpbGUgb3Byb2ZpbGVfc3R1YnMuUworICogQXNzZW1ibHkgbGFuZ3VhZ2Ugc3lzdGVtIGNhbGwgaW50ZXJjZXB0b3Igc3R1YnMgCisgKgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMS0yMDAyIEhld2xldHQtUGFja2FyZCBDb21wYW55CisgKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORworICoKKyAqIEBhdXRob3IgQm9iIE1vbnRnb21lcnkgPGJvYl9tb250Z29tZXJ5QGhwLmNvbT4KKyAqLworCisvKgorICogVGhpcyBpbnRlcmNlcHRvciBmb3IgZXhlY3ZlIHdhcyBzdG9sZW4gZnJvbSBpYTY0L2tlcm5lbC9lbnRyeS5TCisgKgorICogS2VybmVsIGVudHJ5IHBvaW50cy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTgtMjAwMSBIZXdsZXR0LVBhY2thcmQgQ28KKyAqCURhdmlkIE1vc2Jlcmdlci1UYW5nIDxkYXZpZG1AaHBsLmhwLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMTk5OSBWQSBMaW51eCBTeXN0ZW1zCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgV2FsdCBEcnVtbW9uZCA8ZHJ1bW1vbmRAdmFsaW51eC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgQXNpdCBNYWxsaWNrIDxBc2l0LksuTWFsbGlja0BpbnRlbC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgRG9uIER1Z2dlciA8RG9uLkR1Z2dlckBpbnRlbC5jb20+CisgKi8KKy8qCisgKiBpYTY0X3N3aXRjaF90byBub3cgcGxhY2VzIGNvcnJlY3QgdmlydHVhbCBtYXBwaW5nIGluIGluIFRSMiBmb3IKKyAqIGtlcm5lbCBzdGFjay4gVGhpcyBhbGxvd3MgdXMgdG8gaGFuZGxlIGludGVycnVwdHMgd2l0aG91dCBjaGFuZ2luZworICogdG8gcGh5c2ljYWwgbW9kZS4KKyAqCisgKiBKb25hdGhhbiBOaWNrbGluCTxuaWNrbGluQG1pc3Npb25jcml0aWNhbGxpbnV4LmNvbT4KKyAqIFBhdHJpY2sgTydSb3Vya2UJPG9yb3Vya2VAbWlzc2lvbmNyaXRpY2FsbGludXguY29tPgorICogMTEvMDcvMjAwMAorICovCisvKgorICogR2xvYmFsIChwcmVzZXJ2ZWQpIHByZWRpY2F0ZSB1c2FnZSBvbiBzeXNjYWxsIGVudHJ5L2V4aXQgcGF0aDoKKyAqCisgKglwS2VybjoJCVNlZSBlbnRyeS5oLgorICoJcFVzZXI6CQlTZWUgZW50cnkuaC4KKyAqCXBTeXM6CQlTZWUgZW50cnkuaC4KKyAqCXBOb25TeXM6CSFwU3lzCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisjaW5jbHVkZSA8YXNtL2NhY2hlLmg+CisjaW5jbHVkZSA8YXNtL2Vycm5vLmg+CisjaW5jbHVkZSA8YXNtL2tyZWdzLmg+CisjaW5jbHVkZSA8YXNtL29mZnNldHMuaD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgorI2luY2x1ZGUgPGFzbS9hc21tYWNyby5oPgorI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CisKKyNpbmNsdWRlICJJQTY0bWluc3RhdGUuaCIKKworCS8qCisJICogZXhlY3ZlKCkgaXMgc3BlY2lhbCBiZWNhdXNlIGluIGNhc2Ugb2Ygc3VjY2Vzcywgd2UgbmVlZCB0bworCSAqIHNldHVwIGEgbnVsbCByZWdpc3RlciB3aW5kb3cgZnJhbWUuCisJICovCitHTE9CQUxfRU5UUlkobXlfaWE2NF9leGVjdmUpCisJLnByb2xvZ3VlIEFTTV9VTldfUFJMR19SUHxBU01fVU5XX1BSTEdfUEZTLCBBU01fVU5XX1BSTEdfR1JTQVZFKDMpCisJYWxsb2MgbG9jMT1hci5wZnMsIDMsIDMsIDQsIDAKKwltb3YgbG9jMD1ycAorCW1vdiBsb2MyPWdwCisJLmJvZHkKKwltb3Ygb3V0MD1pbjAJCQkvLyBmaWxlbmFtZQorCTs7CQkJCS8vIHN0b3AgYml0IGJldHdlZW4gYWxsb2MgYW5kIGNhbGwKKwltb3Ygb3V0MT1pbjEJCQkvLyBhcmd2CisJbW92IG91dDI9aW4yCQkJLy8gZW52cAorCWFkZCBvdXQzPTE2LCBzcAkJCS8vIHJlZ3MKKwkvKiAKKwkgKiBXZSBhcmUgaGVyZSB3aXRoIHRoZSBrZXJuZWwncyBncCByZWdpc3RlciB2YWx1ZSBidXQgd2UgbmVlZAorCSAqIHRvIGZpbmQgdGhlIG1vZHVsZSdzIGdwIHZhbHVlIGJlZm9yZSB3ZSBjYW4gY2FsbCBvdXIgb3duCisJICogcm91dGluZS4gIFRoYXQncyB3aHkgd2UgY2FuJ3QganVzdCB1c2U6CisJICoJYnIuY2FsbC5zcHRrLm1hbnkgcnA9bXlfc3lzX2V4ZWN2ZQorCSAqIFVzZSBpcC1yZWxhdGl2ZSBhZGRyZXNzaW5nIHRvIGdldCB0byB0aGUgZnB0ciBzaW5jZSBJIGNhbid0CisJICogdXNlIGdwLXJlbGF0aXZlIGFueXRoaW5nIHdpdGhvdXQgdGhlIG1vZHVsZSdzIGdwLgorCSAqLworLkwxX2V4ZWN2ZToKKwltb3YgcjMgPSBpcAorCTs7CisJYWRkbCByMTQgPSAuZnB0cl9leGVjdmUgLSAuTDFfZXhlY3ZlLCByMworCTs7CisJbGQ4IHIxND1bcjE0XQorCTs7CisJbGQ4IHIxNT1bcjE0XSwgOAorCTs7CisJbGQ4IGdwPVtyMTRdCisJOzsKKwltb3YgYjY9cjE1CisJYnIuY2FsbC5zcHRrLm1hbnkgYjA9YjYKKwk7OworLnJldDA6CWNtcDQuZ2UgcDYsIHA3PXI4LCByMAorCW1vdiBhci5wZnM9bG9jMQkJCS8vIHJlc3RvcmUgYXIucGZzCisJc3h0NCByOD1yOAkJCS8vIHJldHVybiA2NC1iaXQgcmVzdWx0CisJOzsKKwlzdGYuc3BpbGwgW3NwXT1mMAorKHA2KQljbXAubmUgcEtlcm4sIHBVc2VyPXIwLCByMAkvLyBhIHN1Y2Nlc3NmdWwgZXhlY3ZlKCkgbGFuZHMgdXMgaW4gdXNlci1tb2RlLi4uCisJbW92IGdwPWxvYzIKKwltb3YgcnA9bG9jMAorKHA2KQltb3YgYXIucGZzPXIwCQkJLy8gY2xlYXIgYXIucGZzIG9uIHN1Y2Nlc3MKKyhwNykJYnIucmV0LnNwdGsubWFueSBycAorCisJLyoKKwkgKiBJbiB0aGVvcnksIHdlJ2QgaGF2ZSB0byB6YXAgdGhpcyBzdGF0ZSBvbmx5IHRvIHByZXZlbnQgbGVha2luZyBvZgorCSAqIHNlY3VyaXR5IHNlbnNpdGl2ZSBzdGF0ZSAoZS5nLiwgaWYgY3VycmVudC0+bW0tPmR1bXBhYmxlIGlzIHplcm8pLiAgSG93ZXZlciwKKwkgKiB0aGlzIGV4ZWN1dGVzIGluIGxlc3MgdGhhbiAyMCBjeWNsZXMgZXZlbiBvbiBJdGFuaXVtLCBzbyBpdCdzIG5vdCB3b3J0aAorCSAqIG9wdGltaXppbmcgZm9yLi4uKS4KKwkgKi8KKwltb3YgcjQ9MDsJCW1vdiBmMj1mMDsJCW1vdiBiMT1yMAorCW1vdiByNT0wOwkJbW92IGYzPWYwOwkJbW92IGIyPXIwCisJbW92IHI2PTA7CQltb3YgZjQ9ZjA7CQltb3YgYjM9cjAKKwltb3Ygcjc9MDsJCW1vdiBmNT1mMDsJCW1vdiBiND1yMAorCW1vdiBhci51bmF0PTA7CQltb3YgZjEwPWYwOwkJbW92IGI1PXIwCisJbGRmLmZpbGwgZjExPVtzcF07CWxkZi5maWxsIGYxMj1bc3BdOwltb3YgZjEzPWYwCisJbGRmLmZpbGwgZjE0PVtzcF07CWxkZi5maWxsIGYxNT1bc3BdOwltb3YgZjE2PWYwCisJbGRmLmZpbGwgZjE3PVtzcF07CWxkZi5maWxsIGYxOD1bc3BdOwltb3YgZjE5PWYwCisJbGRmLmZpbGwgZjIwPVtzcF07CWxkZi5maWxsIGYyMT1bc3BdOwltb3YgZjIyPWYwCisJbGRmLmZpbGwgZjIzPVtzcF07CWxkZi5maWxsIGYyND1bc3BdOwltb3YgZjI1PWYwCisJbGRmLmZpbGwgZjI2PVtzcF07CWxkZi5maWxsIGYyNz1bc3BdOwltb3YgZjI4PWYwCisJbGRmLmZpbGwgZjI5PVtzcF07CWxkZi5maWxsIGYzMD1bc3BdOwltb3YgZjMxPWYwCisJbW92IGFyLmxjPTAKKwlici5yZXQuc3B0ay5tYW55IHJwCisJLmFsaWduIDE2CisuZnB0cl9leGVjdmU6CisJZGF0YTggQGZwdHIobXlfc3lzX2V4ZWN2ZSkKK0VORChteV9pYTY0X2V4ZWN2ZSkKKworLyogVGhlc2UgaW50ZXJjZXB0b3JzIGFyZSBmcm9tIElBNjRzeXNjYWxsc3R1Yi5oIG1hY3JvcyAqLworI2luY2x1ZGUgIklBNjRzeXNjYWxsc3R1Yi5oIgorCitTWVNDQUxMU1RVQl9QT1NUKGNsb25lKQorCitTWVNDQUxMU1RVQl9QT1NUKGNsb25lMikKKworU1lTQ0FMTFNUVUJfUE9TVChtbWFwKQorCitTWVNDQUxMU1RVQl9QT1NUKG1tYXAyKQorCitTWVNDQUxMU1RVQl9QT1NUKGluaXRfbW9kdWxlKQorCitTWVNDQUxMU1RVQl9QUkUoZXhpdCkKZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L21vZHVsZS9vcF9jYWNoZS5oIGIvb3Byb2ZpbGUtMC45LjcvbW9kdWxlL29wX2NhY2hlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTBjNWY2ZgotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L21vZHVsZS9vcF9jYWNoZS5oCkBAIC0wLDAgKzEsNTcgQEAKKy8qKgorICogQGZpbGUgb3BfY2FjaGUuaAorICogQ2FjaGUgZGVmaW5pdGlvbnMgZm9yIGNvbXBhdGliaWxpdHkKKyAqCisgKiBAcmVtYXJrIENvcHlyaWdodCAyMDAyIE9Qcm9maWxlIGF1dGhvcnMKKyAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCisgKgorICogQGF1dGhvciBQaGlsaXBwZSBFbGllCisgKiBAYXV0aG9yIEpvaG4gTGV2b24KKyAqLworCisjaWZuZGVmIE9QX0NBQ0hFX0gKKyNkZWZpbmUgT1BfQ0FDSEVfSAorCisjaW5jbHVkZSA8YXNtL2NhY2hlLmg+CisKKyNpZm5kZWYgTDFfQ0FDSEVfQUxJR04KKyNkZWZpbmUgTDFfQ0FDSEVfQUxJR04oeCkgKCgoeCkrKEwxX0NBQ0hFX0JZVEVTLTEpKSZ+KEwxX0NBQ0hFX0JZVEVTLTEpKQorI2VuZGlmCisKKyNpZm5kZWYgU01QX0NBQ0hFX0JZVEVTCisjZGVmaW5lIFNNUF9DQUNIRV9CWVRFUyBMMV9DQUNIRV9CWVRFUworI2VuZGlmCisKKy8qIDIuNC4wIGludHJvZHVjZWQgX19jYWNoZWxpbmVfYWxpZ25lZCAqLworI2lmbmRlZiBfX19fY2FjaGVsaW5lX2FsaWduZWQKKyNkZWZpbmUgX19fX2NhY2hlbGluZV9hbGlnbmVkIF9fYXR0cmlidXRlX18oKF9fYWxpZ25lZF9fKFNNUF9DQUNIRV9CWVRFUykpKQorI2VuZGlmCisKKyNpZm5kZWYgX19jYWNoZWxpbmVfYWxpZ25lZAorI2lmZGVmIE1PRFVMRQorI2RlZmluZSBfX2NhY2hlbGluZV9hbGlnbmVkIF9fX19jYWNoZWxpbmVfYWxpZ25lZAorI2Vsc2UKKyNkZWZpbmUgX19jYWNoZWxpbmVfYWxpZ25lZAkJCQkJXAorCV9fYXR0cmlidXRlX18oKF9fYWxpZ25lZF9fKFNNUF9DQUNIRV9CWVRFUyksIAkJXAorCQkgX19zZWN0aW9uX18oIi5kYXRhLmNhY2hlbGluZV9hbGlnbmVkIikpKQorI2VuZGlmCisjZW5kaWYgLyogX19jYWNoZWxpbmVfYWxpZ25lZCAqLworCisvKiAyLjQuMTAgaW50cm9kdWNlZCBfX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXAgKi8KKyNpZm5kZWYgX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcAorI2lmZGVmIENPTkZJR19TTVAKKyNkZWZpbmUgX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcCBfX19fY2FjaGVsaW5lX2FsaWduZWQKKyNlbHNlCisjZGVmaW5lIF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXAKKyNlbmRpZiAvKiBDT05GSUdfU01QICovCisjZW5kaWYKKworI2lmbmRlZiBfX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcAorI2lmZGVmIENPTkZJR19TTVAKKyNkZWZpbmUgX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXAgX19jYWNoZWxpbmVfYWxpZ25lZAorI2Vsc2UKKyNkZWZpbmUgX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXAKKyNlbmRpZiAvKiBDT05GSUdfU01QICovCisjZW5kaWYKKworI2VuZGlmIC8qICFPUF9DQUNIRV9IICovCmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9tb2R1bGUvb3BfZGNhY2hlLmggYi9vcHJvZmlsZS0wLjkuNy9tb2R1bGUvb3BfZGNhY2hlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjY1NjBlMQotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L21vZHVsZS9vcF9kY2FjaGUuaApAQCAtMCwwICsxLDg3IEBACisvKioKKyAqIEBmaWxlIG9wX2RjYWNoZS5oCisgKiBDb21wYXRpYmlsaXR5IGZ1bmN0aW9ucyBmb3IgZGNhY2hlIGxvb2t1cHMKKyAqCisgKiBAcmVtYXJrIENvcHlyaWdodCAyMDAyIE9Qcm9maWxlIGF1dGhvcnMKKyAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCisgKgorICogQGF1dGhvciBQaGlsaXBwZSBFbGllCisgKiBAYXV0aG9yIEpvaG4gTGV2b24KKyAqLworCisjaWZuZGVmIE9QX0RDQUNIRV9ICisjZGVmaW5lIE9QX0RDQUNIRV9ICisKKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3VuaXN0ZC5oPgorI2luY2x1ZGUgPGxpbnV4L21tYW4uaD4KKyNpbmNsdWRlIDxsaW51eC9maWxlLmg+CisKKyNpbmNsdWRlICJvcHJvZmlsZS5oIgorCitleHRlcm4gdWludCBvcF9kbmFtZV90b3A7CitleHRlcm4gc3RydWN0IHFzdHIgKipvcF9kbmFtZV9zdGFjazsKK2V4dGVybiBjaGFyICogb3BfcG9vbF9wb3M7CitleHRlcm4gY2hhciAqIG9wX3Bvb2xfc3RhcnQ7CitleHRlcm4gY2hhciAqIG9wX3Bvb2xfZW5kOworCit1aW50IGRvX2hhc2goc3RydWN0IGRlbnRyeSAqIGRlbnRyeSwgc3RydWN0IHZmc21vdW50ICogdmZzbW50LCBzdHJ1Y3QgZGVudHJ5ICogcm9vdCwgc3RydWN0IHZmc21vdW50ICogcm9vdG1udCk7CisKK2lubGluZSBzdGF0aWMgdWludCBhbGxvY19pbl9wb29sKGNoYXIgY29uc3QgKiBzdHIsIHVpbnQgbGVuKTsKK2lubGluZSBzdGF0aWMgaW50IGFkZF9oYXNoX2VudHJ5KHN0cnVjdCBvcF9oYXNoX2luZGV4ICogZW50cnksIHVpbnQgcGFyZW50LCBjaGFyIGNvbnN0ICogbmFtZSwgdWludCBsZW4pOworaW5saW5lIHN0YXRpYyB1aW50IG5hbWVfaGFzaChjaGFyIGNvbnN0ICogbmFtZSwgdWludCBsZW4sIHVpbnQgcGFyZW50KTsKKworaW5saW5lIHN0YXRpYyB1aW50IG5hbWVfaGFzaChjaGFyIGNvbnN0ICogbmFtZSwgdWludCBsZW4sIHVpbnQgcGFyZW50KQoreworCXVpbnQgaGFzaD0wOworCisJd2hpbGUgKGxlbi0tKQorCQloYXNoID0gKGhhc2ggKyAobmFtZVtsZW5dIDw8IDQpICsgKG5hbWVbbGVuXSA+PiA0KSkgKiAxMTsKKworCXJldHVybiAoaGFzaCBeIHBhcmVudCkgJSBPUF9IQVNIX01BUF9OUjsKK30KKworLyogZW1wdHkgYXNjZW5kaW5nIGRuYW1lIHN0YWNrICovCitpbmxpbmUgc3RhdGljIHZvaWQgcHVzaF9kbmFtZShzdHJ1Y3QgcXN0ciAqIGRuYW1lKQoreworCW9wX2RuYW1lX3N0YWNrW29wX2RuYW1lX3RvcF0gPSBkbmFtZTsKKwlpZiAob3BfZG5hbWVfdG9wICE9IEROQU1FX1NUQUNLX01BWCkKKwkJb3BfZG5hbWVfdG9wKys7CisJZWxzZQorCQlwcmludGsoS0VSTl9FUlIgIm9wcm9maWxlOiBvdmVyZmxvd2VkIGRuYW1lIHN0YWNrICFcbiIpOworfQorCitpbmxpbmUgc3RhdGljIHN0cnVjdCBxc3RyICogcG9wX2RuYW1lKHZvaWQpCit7CisJaWYgKG9wX2RuYW1lX3RvcCA9PSAwKQorCQlyZXR1cm4gTlVMTDsKKworCXJldHVybiBvcF9kbmFtZV9zdGFja1stLW9wX2RuYW1lX3RvcF07Cit9CisKK2lubGluZSBzdGF0aWMgdWludCBhbGxvY19pbl9wb29sKGNoYXIgY29uc3QgKiBzdHIsIHVpbnQgbGVuKQoreworCWNoYXIgKiBwbGFjZSA9IG9wX3Bvb2xfcG9zOworCWlmIChvcF9wb29sX3BvcyArIGxlbiArIDEgPj0gb3BfcG9vbF9lbmQpCisJCXJldHVybiAwOworCisJc3RyY3B5KHBsYWNlLCBzdHIpOworCW9wX3Bvb2xfcG9zICs9IGxlbiArIDE7CisJcmV0dXJuIHBsYWNlIC0gb3BfcG9vbF9zdGFydDsKK30KKworaW5saW5lIHN0YXRpYyBjaGFyICogZ2V0X2Zyb21fcG9vbCh1aW50IGluZGV4KQoreworCXJldHVybiBvcF9wb29sX3N0YXJ0ICsgaW5kZXg7Cit9CisKK2lubGluZSBzdGF0aWMgaW50IGFkZF9oYXNoX2VudHJ5KHN0cnVjdCBvcF9oYXNoX2luZGV4ICogZW50cnksIHVpbnQgcGFyZW50LCBjaGFyIGNvbnN0ICogbmFtZSwgdWludCBsZW4pCit7CisJZW50cnktPm5hbWUgPSBhbGxvY19pbl9wb29sKG5hbWUsIGxlbik7CisJaWYgKCFlbnRyeS0+bmFtZSkKKwkJcmV0dXJuIC0xOworCWVudHJ5LT5wYXJlbnQgPSBwYXJlbnQ7CisJcmV0dXJuIDA7Cit9CisKKyNlbmRpZiAvKiBPUF9EQ0FDSEVfSCAqLwpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvbW9kdWxlL29wX2RuYW1lLmMgYi9vcHJvZmlsZS0wLjkuNy9tb2R1bGUvb3BfZG5hbWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzZiMzU4Ci0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvbW9kdWxlL29wX2RuYW1lLmMKQEAgLTAsMCArMSwyMjcgQEAKKy8qKgorICogQGZpbGUgb3BfZG5hbWUuYworICogZGVudHJ5IHN0YWNrIHdhbGtpbmcKKyAqCisgKiBAcmVtYXJrIENvcHlyaWdodCAyMDAyIE9Qcm9maWxlIGF1dGhvcnMKKyAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCisgKgorICogQGF1dGhvciBKb2huIExldm9uCisgKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKKyAqLworCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC91bmlzdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9tbWFuLmg+CisjaW5jbHVkZSA8bGludXgvZmlsZS5oPgorCisjaW5jbHVkZSAib3Byb2ZpbGUuaCIKKyNpbmNsdWRlICJvcF9kY2FjaGUuaCIKKyNpbmNsdWRlICJvcF91dGlsLmgiCisKKy8qIC0tLS0tLS0tLSBkZXZpY2Ugcm91dGluZXMgLS0tLS0tLS0tLS0tLSAqLworCit1aW50IG9wX2RuYW1lX3RvcDsKK3N0cnVjdCBxc3RyICoqIG9wX2RuYW1lX3N0YWNrOworY2hhciAqIG9wX3Bvb2xfcG9zOworY2hhciAqIG9wX3Bvb2xfc3RhcnQ7CitjaGFyICogb3BfcG9vbF9lbmQ7CisKK3N0YXRpYyB1bG9uZyBoYXNoX21hcF9vcGVuOworc3RhdGljIHN0cnVjdCBvcF9oYXNoX2luZGV4ICogaGFzaF9tYXA7CisKK3Vuc2lnbmVkIGxvbmcgaXNfbWFwX3JlYWR5KHZvaWQpCit7CisJcmV0dXJuIGhhc2hfbWFwX29wZW47Cit9CisKK2ludCBvcHJvZl9pbml0X2hhc2htYXAodm9pZCkKK3sKKwl1aW50IGk7CisKKwlvcF9kbmFtZV9zdGFjayA9IGttYWxsb2MoRE5BTUVfU1RBQ0tfTUFYICogc2l6ZW9mKHN0cnVjdCBxc3RyICopLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW9wX2RuYW1lX3N0YWNrKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlvcF9kbmFtZV90b3AgPSAwOworCW1lbXNldChvcF9kbmFtZV9zdGFjaywgMCwgRE5BTUVfU1RBQ0tfTUFYICogc2l6ZW9mKHN0cnVjdCBxc3RyICopKTsKKworCWhhc2hfbWFwID0gcnZtYWxsb2MoUEFHRV9BTElHTihPUF9IQVNIX01BUF9TSVpFKSk7CisJaWYgKCFoYXNoX21hcCkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgT1BfSEFTSF9NQVBfTlI7ICsraSkgeworCQloYXNoX21hcFtpXS5uYW1lID0gMDsKKwkJaGFzaF9tYXBbaV0ucGFyZW50ID0gLTE7CisJfQorCisJb3BfcG9vbF9zdGFydCA9IChjaGFyICopKGhhc2hfbWFwICsgT1BfSEFTSF9NQVBfTlIpOworCW9wX3Bvb2xfZW5kID0gb3BfcG9vbF9zdGFydCArIFBPT0xfU0laRTsKKwlvcF9wb29sX3BvcyA9IG9wX3Bvb2xfc3RhcnQ7CisKKwkvKiBFbnN1cmUgdGhhdCB0aGUgemVybyBoYXNoIG1hcCBlbnRyeSBpcyBuZXZlciB1c2VkLCB3ZSB1c2UgdGhpcworCSAqIHZhbHVlIGFzIGVuZCBvZiBwYXRoIHRlcm1pbmF0b3IgKi8KKwloYXNoX21hcFswXS5uYW1lID0gYWxsb2NfaW5fcG9vbCgiLyIsIDEpOworCWhhc2hfbWFwWzBdLnBhcmVudCA9IDA7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBvcHJvZl9mcmVlX2hhc2htYXAodm9pZCkKK3sKKwlrZnJlZShvcF9kbmFtZV9zdGFjayk7CisJcnZmcmVlKGhhc2hfbWFwLCBQQUdFX0FMSUdOKE9QX0hBU0hfTUFQX1NJWkUpKTsKK30KKworaW50IG9wcm9mX2hhc2hfbWFwX29wZW4odm9pZCkKK3sKKwlpZiAodGVzdF9hbmRfc2V0X2JpdCgwLCAmaGFzaF9tYXBfb3BlbikpCisJCXJldHVybiAtRUJVU1k7CisKKwlyZXR1cm4gMDsKK30KKworaW50IG9wcm9mX2hhc2hfbWFwX3JlbGVhc2Uodm9pZCkKK3sKKwlpZiAoIWhhc2hfbWFwX29wZW4pCisJCXJldHVybiAtRUZBVUxUOworCisJY2xlYXJfYml0KDAsICZoYXNoX21hcF9vcGVuKTsKKwlyZXR1cm4gMDsKK30KKworaW50IG9wcm9mX2hhc2hfbWFwX21tYXAoc3RydWN0IGZpbGUgKiBmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiB2bWEpCit7CisJdWxvbmcgc3RhcnQgPSAodWxvbmcpdm1hLT52bV9zdGFydDsKKwl1bG9uZyBwYWdlLCBwb3M7CisJdWxvbmcgc2l6ZSA9ICh1bG9uZykodm1hLT52bV9lbmQtdm1hLT52bV9zdGFydCk7CisKKwlpZiAoc2l6ZSA+IFBBR0VfQUxJR04oT1BfSEFTSF9NQVBfU0laRSkgfHwgKHZtYS0+dm1fZmxhZ3MgJiBWTV9XUklURSkgfHwgR0VUX1ZNX09GRlNFVCh2bWEpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXBvcyA9ICh1bG9uZyloYXNoX21hcDsKKwl3aGlsZSAoc2l6ZSA+IDApIHsKKwkJcGFnZSA9IGt2aXJ0X3RvX3BhKHBvcyk7CisJCWlmIChyZW1hcF9wYWdlX3JhbmdlKHN0YXJ0LCBwYWdlLCBQQUdFX1NJWkUsIFBBR0VfU0hBUkVEKSkKKwkJCXJldHVybiAtRUFHQUlOOworCQlzdGFydCArPSBQQUdFX1NJWkU7CisJCXBvcyArPSBQQUdFX1NJWkU7CisJCXNpemUgLT0gUEFHRV9TSVpFOworCX0KKwlyZXR1cm4gMDsKK30KKworCisjaWZuZGVmIE5FRURfMl8yX0RFTlRSSUVTCitpbnQgd2luZF9kZW50cmllc18yXzQoc3RydWN0IGRlbnRyeSAqIGRlbnRyeSwgc3RydWN0IHZmc21vdW50ICogdmZzbW50LCBzdHJ1Y3QgZGVudHJ5ICogcm9vdCwgc3RydWN0IHZmc21vdW50ICogcm9vdG1udCkKK3sKKwlzdHJ1Y3QgZGVudHJ5ICogZCA9IGRlbnRyeTsKKwlzdHJ1Y3QgdmZzbW91bnQgKiB2ID0gdmZzbW50OworCisJLyogd2luZCB0aGUgZGVudHJpZXMgb250byB0aGUgc3RhY2sgcGFnZXMgKi8KKwlmb3IgKDs7KSB7CisJCS8qIGRlbGV0ZWQgPyAqLworCQlpZiAoIUlTX1JPT1QoZCkgJiYgbGlzdF9lbXB0eSgmZC0+ZF9oYXNoKSkKKwkJCXJldHVybiAwOworCisJCS8qIHRoZSByb290ICovCisJCWlmIChkID09IHJvb3QgJiYgdiA9PSByb290bW50KQorCQkJYnJlYWs7CisKKwkJaWYgKGQgPT0gdi0+bW50X3Jvb3QgfHwgSVNfUk9PVChkKSkgeworCQkJaWYgKHYtPm1udF9wYXJlbnQgPT0gdikKKwkJCQlicmVhazsKKwkJCS8qIGNyb3NzIHRoZSBtb3VudCBwb2ludCAqLworCQkJZCA9IHYtPm1udF9tb3VudHBvaW50OworCQkJdiA9IHYtPm1udF9wYXJlbnQ7CisJCX0KKworCQlwdXNoX2RuYW1lKCZkLT5kX25hbWUpOworCisJCWQgPSBkLT5kX3BhcmVudDsKKwl9CisKKwlyZXR1cm4gMTsKK30KKworLyogY2FsbGVkIHdpdGggbm90ZV9sb2NrIGhlbGQgKi8KK3VpbnQgZG9fcGF0aF9oYXNoXzJfNChzdHJ1Y3QgZGVudHJ5ICogZGVudHJ5LCBzdHJ1Y3QgdmZzbW91bnQgKiB2ZnNtbnQpCit7CisJdWludCB2YWx1ZTsKKwlzdHJ1Y3QgdmZzbW91bnQgKiByb290bW50OworCXN0cnVjdCBkZW50cnkgKiByb290OworCisJcmVhZF9sb2NrKCZjdXJyZW50LT5mcy0+bG9jayk7CisJcm9vdG1udCA9IG1udGdldChjdXJyZW50LT5mcy0+cm9vdG1udCk7CisJcm9vdCA9IGRnZXQoY3VycmVudC0+ZnMtPnJvb3QpOworCXJlYWRfdW5sb2NrKCZjdXJyZW50LT5mcy0+bG9jayk7CisKKwlzcGluX2xvY2soJmRjYWNoZV9sb2NrKTsKKworCXZhbHVlID0gZG9faGFzaChkZW50cnksIHZmc21udCwgcm9vdCwgcm9vdG1udCk7CisKKwlzcGluX3VubG9jaygmZGNhY2hlX2xvY2spOworCWRwdXQocm9vdCk7CisJbW50cHV0KHJvb3RtbnQpOworCXJldHVybiB2YWx1ZTsKK30KKyNlbmRpZiAvKiBORUVEXzJfMl9ERU5UUklFUyAqLworCisvKiBjYWxsZWQgd2l0aCBub3RlX2xvY2sgaGVsZCAqLwordWludCBkb19oYXNoKHN0cnVjdCBkZW50cnkgKiBkZW50cnksIHN0cnVjdCB2ZnNtb3VudCAqIHZmc21udCwgc3RydWN0IGRlbnRyeSAqIHJvb3QsIHN0cnVjdCB2ZnNtb3VudCAqIHJvb3RtbnQpCit7CisJc3RydWN0IHFzdHIgKiBkbmFtZTsKKwl1aW50IHZhbHVlID0gLTE7CisJdWludCBmaXJzdGhhc2g7CisJdWludCBpbmNyOworCXVpbnQgcGFyZW50ID0gMDsKKwlzdHJ1Y3Qgb3BfaGFzaF9pbmRleCAqIGVudHJ5OworCisJaWYgKCF3aW5kX2RlbnRyaWVzKGRlbnRyeSwgdmZzbW50LCByb290LCByb290bW50KSkKKwkJZ290byBvdXQ7CisKKwkvKiB1bndpbmQgYW5kIGhhc2ggKi8KKworCXdoaWxlICgoZG5hbWUgPSBwb3BfZG5hbWUoKSkpIHsKKwkJLyogaWYgTiBpcyBwcmltZSwgdmFsdWUgaW4gWzAtTlsgYW5kIGluY3IgPSBtYXgoMSwgdmFsdWUpIHRoZW4KKwkJICogaXRlcmF0aW9uOiB2YWx1ZSA9ICh2YWx1ZSArIGluY3IpICUgTiBjb3ZlcnMgdGhlIHJhbmdlIFswLU5bCisJCSAqIGluIE4gaXRlcmF0aW9ucyAqLworCQlpbmNyID0gZmlyc3RoYXNoID0gdmFsdWUgPSBuYW1lX2hhc2goZG5hbWUtPm5hbWUsIGRuYW1lLT5sZW4sIHBhcmVudCk7CisJCWlmIChpbmNyID09IDApCisJCQlpbmNyID0gMTsKKworCXJldHJ5OgorCQllbnRyeSA9ICZoYXNoX21hcFt2YWx1ZV07CisJCS8qIGV4aXN0aW5nIGVudHJ5ID8gKi8KKwkJaWYgKHN0cmVxKGdldF9mcm9tX3Bvb2woZW50cnktPm5hbWUpLCBkbmFtZS0+bmFtZSkKKwkJCSYmIGVudHJ5LT5wYXJlbnQgPT0gcGFyZW50KQorCQkJZ290byBuZXh0OworCisJCS8qIG5ldyBlbnRyeSA/ICovCisJCWlmIChlbnRyeS0+cGFyZW50ID09IC0xKSB7CisJCQlpZiAoYWRkX2hhc2hfZW50cnkoZW50cnksIHBhcmVudCwgZG5hbWUtPm5hbWUsIGRuYW1lLT5sZW4pKQorCQkJCWdvdG8gZnVsbHBvb2w7CisJCQlnb3RvIG5leHQ7CisJCX0KKworCQkvKiBub3BlLCBmaW5kIGFub3RoZXIgcGxhY2UgaW4gdGhlIHRhYmxlICovCisJCXZhbHVlID0gKHZhbHVlICsgaW5jcikgJSBPUF9IQVNIX01BUF9OUjsKKworCQlpZiAodmFsdWUgPT0gZmlyc3RoYXNoKQorCQkJZ290byBmdWxsdGFibGU7CisKKwkJZ290byByZXRyeTsKKwluZXh0OgorCQlwYXJlbnQgPSB2YWx1ZTsKKwl9CisKK291dDoKKwlvcF9kbmFtZV90b3AgPSAwOworCXJldHVybiB2YWx1ZTsKK2Z1bGxwb29sOgorCXByaW50ayhLRVJOX0VSUiAib3Byb2ZpbGU6IHN0cmluZyBwb29sIGV4aGF1c3RlZC5cbiIpOworCXZhbHVlID0gLTE7CisJZ290byBvdXQ7CitmdWxsdGFibGU6CisJcHJpbnRrKEtFUk5fRVJSICJvcHJvZmlsZTogY29tcG9uZW50IGhhc2ggdGFibGUgZnVsbCA6KFxuIik7CisJdmFsdWUgPSAtMTsKKwlnb3RvIG91dDsKK30KZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L21vZHVsZS9vcF9pbml0LmMgYi9vcHJvZmlsZS0wLjkuNy9tb2R1bGUvb3BfaW5pdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxMzk0ZmMKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9tb2R1bGUvb3BfaW5pdC5jCkBAIC0wLDAgKzEsMzMgQEAKKy8qKgorICogQGZpbGUgb3BfaW5pdC5jCisgKiBJbml0aWFsaXNhdGlvbiBzdHVicworICoKKyAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDIgT1Byb2ZpbGUgYXV0aG9ycworICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKKyAqCisgKiBAYXV0aG9yIEpvaG4gTGV2b24KKyAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQorICovCisKKy8vIEZJWE1FOiBhbnkgcG9pbnQgaW4gdGhpcyBmaWxlIG5vdyB3ZSBkb24ndCBmaWRkbGUKKy8vIHdpdGggLW1hcmNoIG9wdGlvbnMgPz8KKyAKKyN1bmRlZiBfX05PX1ZFUlNJT05fXworIAorI2luY2x1ZGUgIm9wcm9maWxlLmgiCisKK0VYUE9SVF9OT19TWU1CT0xTOworCitpbnQgX19pbml0IHN0dWJfaW5pdCh2b2lkKQoreworCXN5c2N0bC5jcHVfdHlwZSA9IGdldF9jcHVfdHlwZSgpOworCXJldHVybiBvcHJvZl9pbml0KCk7Cit9CisKK3ZvaWQgX19leGl0IHN0dWJfZXhpdCh2b2lkKQoreworCW9wcm9mX2V4aXQoKTsKK30KKworbW9kdWxlX2luaXQoc3R1Yl9pbml0KTsKK21vZHVsZV9leGl0KHN0dWJfZXhpdCk7CmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9tb2R1bGUvb3BfdXRpbC5jIGIvb3Byb2ZpbGUtMC45LjcvbW9kdWxlL29wX3V0aWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzUyMjVjCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvbW9kdWxlL29wX3V0aWwuYwpAQCAtMCwwICsxLDEwMyBAQAorLyoqCisgKiBAZmlsZSBvcF91dGlsLmMKKyAqIFZhcmlvdXMgdXRpbGl0eSBmdW5jdGlvbnMKKyAqCisgKiBAcmVtYXJrIENvcHlyaWdodCAyMDAyIE9Qcm9maWxlIGF1dGhvcnMKKyAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCisgKgorICogQGF1dGhvciBKb2huIExldm9uCisgKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKKyAqLworCisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorI2luY2x1ZGUgPGxpbnV4L3dyYXBwZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CisKKyNpbmNsdWRlICJjb21wYXQuaCIKKworI2luY2x1ZGUgIm9wX3V0aWwuaCIKKyAKKy8qIEdpdmVuIFBHRCBmcm9tIHRoZSBhZGRyZXNzIHNwYWNlJ3MgcGFnZSB0YWJsZSwgcmV0dXJuIHRoZSBrZXJuZWwKKyAqIHZpcnR1YWwgbWFwcGluZyBvZiB0aGUgcGh5c2ljYWwgbWVtb3J5IG1hcHBlZCBhdCBBRFIuCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB1dmlydF90b19rdmEocGdkX3QgKiBwZ2QsIHVuc2lnbmVkIGxvbmcgYWRyKQoreworCXVuc2lnbmVkIGxvbmcgcmV0ID0gMFVMOworCXBtZF90ICogcG1kOworCXB0ZV90ICogcHRlcCwgcHRlOworCisJaWYgKCFwZ2Rfbm9uZSgqcGdkKSkgeworCQlwbWQgPSBwbWRfb2Zmc2V0KHBnZCwgYWRyKTsKKwkJaWYgKCFwbWRfbm9uZSgqcG1kKSkgeworCQkJcHRlcCA9IHB0ZV9vZmZzZXQocG1kLCBhZHIpOworCQkJcHRlID0gKnB0ZXA7CisJCQlpZiAocHRlX3ByZXNlbnQocHRlKSkgeworCQkJCXJldCA9ICh1bnNpZ25lZCBsb25nKSBwdGVfcGFnZV9hZGRyZXNzKHB0ZSk7CisJCQkJcmV0IHw9IGFkciAmIChQQUdFX1NJWkUgLSAxKTsKKwkJCX0KKwkJfQorCX0KKwlyZXR1cm4gcmV0OworfQorCisvKiBIZXJlIHdlIHdhbnQgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIG1lbW9yeS4KKyAqIFRoaXMgaXMgdXNlZCB3aGVuIGluaXRpYWxpemluZyB0aGUgY29udGVudHMgb2YgdGhlCisgKiBhcmVhIGFuZCBtYXJraW5nIHRoZSBwYWdlcyBhcyByZXNlcnZlZC4KKyAqLwordW5zaWduZWQgbG9uZyBrdmlydF90b19wYSh1bnNpZ25lZCBsb25nIGFkcikKK3sKKwl1bnNpZ25lZCBsb25nIHZhLCBrdmEsIHJldDsKKworCXZhID0gVk1BTExPQ19WTUFERFIoYWRyKTsKKwlrdmEgPSB1dmlydF90b19rdmEocGdkX29mZnNldF9rKHZhKSwgdmEpOworCXJldCA9IF9fcGEoa3ZhKTsKKwlyZXR1cm4gcmV0OworfQorCit2b2lkICogcnZtYWxsb2Moc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwl2b2lkICogbWVtOworCXVuc2lnbmVkIGxvbmcgYWRyLCBwYWdlOworCisJbWVtID0gVk1BTExPQ18zMihzaXplKTsKKwlpZiAoIW1lbSkKKwkJcmV0dXJuIE5VTEw7CisKKwltZW1zZXQobWVtLCAwLCBzaXplKTsKKworCWFkcj0odW5zaWduZWQgbG9uZykgbWVtOworCXdoaWxlIChzaXplID4gMCkgeworCQlwYWdlID0ga3ZpcnRfdG9fcGEoYWRyKTsKKwkJbWVtX21hcF9yZXNlcnZlKHZpcnRfdG9fcGFnZSgodW5zaWduZWQgbG9uZylfX3ZhKHBhZ2UpKSk7CisJCWFkciArPSBQQUdFX1NJWkU7CisJCXNpemUgLT0gUEFHRV9TSVpFOworCX0KKwlyZXR1cm4gbWVtOworfQorCit2b2lkIHJ2ZnJlZSh2b2lkICogbWVtLCBzaWduZWQgbG9uZyBzaXplKQoreworCXVuc2lnbmVkIGxvbmcgYWRyLCBwYWdlOworCisJaWYgKCFtZW0pCisJCXJldHVybjsKKworCWFkcj0odW5zaWduZWQgbG9uZykgbWVtOworCXdoaWxlIChzaXplID4gMCkgeworCQlwYWdlID0ga3ZpcnRfdG9fcGEoYWRyKTsKKwkJbWVtX21hcF91bnJlc2VydmUodmlydF90b19wYWdlKCh1bnNpZ25lZCBsb25nKV9fdmEocGFnZSkpKTsKKworCQlhZHIgKz0gUEFHRV9TSVpFOworCQlzaXplIC09IFBBR0VfU0laRTsKKwl9CisJdmZyZWUobWVtKTsKK30KKworaW50IGNoZWNrX3JhbmdlKGludCB2YWwsIGludCBsLCBpbnQgaCwgY2hhciBjb25zdCAqIG1zZykKK3sKKwlpZiAodmFsIDwgbCB8fCB2YWwgPiBoKSB7CisJCXByaW50ayhtc2csIHZhbCwgbCwgaCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4gMDsKK30gCmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9tb2R1bGUvb3BfdXRpbC5oIGIvb3Byb2ZpbGUtMC45LjcvbW9kdWxlL29wX3V0aWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYWVhNDBlCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvbW9kdWxlL29wX3V0aWwuaApAQCAtMCwwICsxLDIxIEBACisvKioKKyAqIEBmaWxlIG9wX3V0aWwuaAorICogVmFyaW91cyB1dGlsaXR5IGZ1bmN0aW9ucworICoKKyAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDIgT1Byb2ZpbGUgYXV0aG9ycworICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKKyAqCisgKiBAYXV0aG9yIEpvaG4gTGV2b24KKyAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQorICovCisKKyNpZm5kZWYgT1BfVVRJTF9ICisjZGVmaW5lIE9QX1VUSUxfSAorIAordW5zaWduZWQgbG9uZyBrdmlydF90b19wYSh1bnNpZ25lZCBsb25nIGFkcik7Cit2b2lkICogcnZtYWxsb2Moc2lnbmVkIGxvbmcgc2l6ZSk7Cit2b2lkIHJ2ZnJlZSh2b2lkICogbWVtLCBzaWduZWQgbG9uZyBzaXplKTsKKy8vIHJldHVybnMgbm9uLXplcm8gb24gZmFpbHVyZSwgaW5jbHVzaXZlCitpbnQgY2hlY2tfcmFuZ2UoaW50IHZhbCwgaW50IGwsIGludCBoLCBjaGFyIGNvbnN0ICogbXNnKTsKKworI2VuZGlmIC8qIE9QX1VUSUxfSCAqLwpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvbW9kdWxlL29wcm9maWxlLmMgYi9vcHJvZmlsZS0wLjkuNy9tb2R1bGUvb3Byb2ZpbGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OGRkZGQ5Ci0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvbW9kdWxlL29wcm9maWxlLmMKQEAgLTAsMCArMSw4ODAgQEAKKy8qKgorICogQGZpbGUgb3Byb2ZpbGUuYworICogTWFpbiBkcml2ZXIgY29kZQorICoKKyAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDIgT1Byb2ZpbGUgYXV0aG9ycworICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKKyAqCisgKiBAYXV0aG9yIEpvaG4gTGV2b24KKyAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQorICovCisKKyNpbmNsdWRlICJvcHJvZmlsZS5oIgorI2luY2x1ZGUgIm9wX3V0aWwuaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKworRVhQT1JUX05PX1NZTUJPTFM7CisgCitNT0RVTEVfQVVUSE9SKCJKb2huIExldm9uIChsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZykiKTsKK01PRFVMRV9ERVNDUklQVElPTigiQ29udGludW91cyBQcm9maWxpbmcgTW9kdWxlIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK01PRFVMRV9QQVJNKGFsbG93X3VubG9hZCwgImkiKTsKK01PRFVMRV9QQVJNX0RFU0MoYWxsb3dfdW5sb2FkLCAiQWxsb3cgbW9kdWxlIHRvIGJlIHVubG9hZGVkLiIpOworI2lmZGVmIENPTkZJR19TTVAKK3N0YXRpYyBpbnQgYWxsb3dfdW5sb2FkOworI2Vsc2UKK3N0YXRpYyBpbnQgYWxsb3dfdW5sb2FkID0gMTsKKyNlbmRpZgorCisvKiBzeXNjdGwgc2V0dGFibGVzICovCitzdHJ1Y3Qgb3Byb2Zfc3lzY3RsIHN5c2N0bF9wYXJtczsKKy8qIHNvbWUgb2YgdGhlIHN5cyBjdGwgc2V0dGFibGUgdmFyaWFibGUgbmVlZHMgdG8gYmUgY29waWVkIHRvIHByb3RlY3QKKyAqIGFnYWluc3QgdXNlciB0aGF0IHRyeSB0byBjaGFuZ2UgdGhyb3VnaCAvcHJvYy9zeXMvZGV2L29wcm9maWxlLyAqIHJ1bm5pbmcKKyAqIHBhcmFtZXRlcnMgZHVyaW5nIHByb2ZpbGluZyAqLworc3RydWN0IG9wcm9mX3N5c2N0bCBzeXNjdGw7CisKK3N0YXRpYyBlbnVtIG9wcm9mX3N0YXRlIHN0YXRlIF9fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wID0gU1RPUFBFRDsKKwkgCitzdGF0aWMgaW50IG9wX21ham9yOworCitzdGF0aWMgdm9sYXRpbGUgdWxvbmcgb3Byb2Zfb3BlbmVkIF9fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wOworc3RhdGljIHZvbGF0aWxlIHVsb25nIG9wcm9mX25vdGVfb3BlbmVkIF9fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wOworc3RhdGljIERFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKG9wcm9mX3dhaXQpOworCitzdGF0aWMgdTMyIG9wcm9mX3JlYWR5W05SX0NQVVNdIF9fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wOworc3RydWN0IF9vcHJvZl9kYXRhIG9wcm9mX2RhdGFbTlJfQ1BVU10gX19jYWNoZWxpbmVfYWxpZ25lZDsKKworc3RydWN0IG9wX25vdGUgKiBub3RlX2J1ZmZlciBfX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDsKK3UzMiBub3RlX3BvcyBfX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDsKKworLy8gdGhlIGludGVycnVwdCBoYW5kbGVyIG9wcyBzdHJ1Y3R1cmUgdG8gdXNlCitzdGF0aWMgc3RydWN0IG9wX2ludF9vcGVyYXRpb25zIGNvbnN0ICogaW50X29wczsKKworc3RhdGljIGNoYXIgY29uc3QgKiBvcF92ZXJzaW9uID0gUEFDS0FHRSAiICIgVkVSU0lPTjsKKyAKKy8qIC0tLS0tLS0tLS0tLS0tLS0gaW50ZXJydXB0IGVudHJ5IHJvdXRpbmVzIC0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitpbmxpbmUgc3RhdGljIGludCBuZWVkX3dha2V1cCh1aW50IGNwdSwgc3RydWN0IF9vcHJvZl9kYXRhICogZGF0YSkKK3sKKwlyZXR1cm4gZGF0YS0+bmV4dGJ1ZiA+PSAoZGF0YS0+YnVmX3NpemUgLSBkYXRhLT5idWZfd2F0ZXJtYXJrKSAmJiAhb3Byb2ZfcmVhZHlbY3B1XTsKK30KKworaW5saW5lIHN0YXRpYyB2b2lkIG5leHRfc2FtcGxlKHN0cnVjdCBfb3Byb2ZfZGF0YSAqIGRhdGEpCit7CisJaWYgKHVubGlrZWx5KCsrZGF0YS0+bmV4dGJ1ZiA9PSBkYXRhLT5idWZfc2l6ZSkpCisJCWRhdGEtPm5leHRidWYgPSAwOworfQorCitpbmxpbmUgc3RhdGljIHZvaWQgZXZpY3Rfb3BfZW50cnkodWludCBjcHUsIHN0cnVjdCBfb3Byb2ZfZGF0YSAqIGRhdGEsIGxvbmcgaXJxX2VuYWJsZWQpCit7CisJbmV4dF9zYW1wbGUoZGF0YSk7CisJaWYgKGxpa2VseSghbmVlZF93YWtldXAoY3B1LCBkYXRhKSkpCisJCXJldHVybjsKKworCS8qIGxvY2tpbmcgcmF0aW9uYWxlIDoKKwkgKgorCSAqIG90aGVyIENQVXMgYXJlIG5vdCBhIHJhY2UgY29uY2VybiBzaW5jZSB3ZSBzeW5jaCBvbiBvcHJvZl93YWl0LT5sb2NrLgorCSAqCisJICogZm9yIHRoZSBjdXJyZW50IENQVSwgd2UgbWlnaHQgaGF2ZSBpbnRlcnJ1cHRlZCBhbm90aGVyIHVzZXIgb2YgZS5nLgorCSAqIHJ1bnF1ZXVlX2xvY2ssIGRlYWRsb2NraW5nIG9uIFNNUCBhbmQgcmFjaW5nIG9uIFVQLiBTbyB3ZSBjaGVjayB0aGF0IElSUXMKKwkgKiB3ZXJlIG5vdCBkaXNhYmxlZCAoY29ycmVzcG9uZGluZyB0byB0aGUgaXJxc2F2ZS9yZXN0b3JlcyBpbiBfX3dha2VfdXAoKS4KKwkgKgorCSAqIE5vdGUgdGhhdCB0aGlzIHJlcXVpcmVzIGFsbCBzcGlubG9ja3MgdGFrZW4gYnkgdGhlIGZ1bGwgd2FrZV91cCBwYXRoCisJICogdG8gaGF2ZSBzYXZlZCBJUlFzIC0gb3RoZXJ3aXNlIHdlIGNhbiBpbnRlcnJ1cHQgd2hpbHN0IGhvbGRpbmcgYSBzcGlubG9jaworCSAqIHRha2VuIGZyb20gc29tZSBub24td2FrZV91cCgpIHBhdGggYW5kIGRlYWRsb2NrLiBDdXJyZW50bHkgdGhpcyBtZWFucyBvbmx5CisJICogb3Byb2Zfd2FpdC0+bG9jayBhbmQgcnVucXVldWVfbG9jazogYWxsIGluc3RhbmNlcyBkaXNhYmxlIElSUXMgYmVmb3JlCisJICogdGFraW5nIHRoZSBsb2NrLgorCSAqCisJICogVGhpcyB3aWxsIG1lYW4gdGhhdCBhcHByb2FjaGluZyB0aGUgZW5kIG9mIHRoZSBidWZmZXIsIGEgbnVtYmVyIG9mIHRoZQorCSAqIGV2aWN0aW9ucyBtYXkgZmFpbCB0byB3YWtlIHVwIHRoZSBkYWVtb24uIFdlIHNpbXBseSBob3BlIHRoaXMgZG9lc24ndAorCSAqIHRha2UgbG9uZzsgYSBwYXRob2xvZ2ljYWwgY2FzZSBjb3VsZCBjYXVzZSBidWZmZXIgb3ZlcmZsb3cuCisJICoKKwkgKiBOb3RlIHRoYXQgd2UgdXNlIG9wcm9mX3JlYWR5IGFzIG91ciBmbGFnIGZvciB3aGV0aGVyIHdlIGhhdmUgaW5pdGlhdGVkIGEKKwkgKiB3YWtlLXVwLiBPbmNlIHRoZSB3YWtlLXVwIGlzIHJlY2VpdmVkLCB0aGUgZmxhZyBpcyByZXNldCBhcyB3ZWxsIGFzCisJICogZGF0YS0+bmV4dGJ1ZiwgcHJldmVudGluZyBtdWx0aXBsZSB3YWtldXBzLgorCSAqCisJICogT24gMi4yLCBhIGdsb2JhbCB3YWl0cXVldWVfbG9jayBpcyB1c2VkLCBzbyB3ZSBtdXN0IGNoZWNrIGl0J3Mgbm90IGhlbGQKKwkgKiBieSB0aGUgY3VycmVudCBDUFUuIFdlIG1ha2Ugc3VyZSB0aGF0IGFueSB1c2VycyBvZiB0aGUgd2FpdCBxdWV1ZSAoaS5lLgorCSAqIHVzIGFuZCB0aGUgY29kZSBmb3Igd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKCkpIGRpc2FibGUgaW50ZXJydXB0cyBzbyBpdCdzCisJICogc3RpbGwgc2FmZSB0byBjaGVjayBJRl9NQVNLLgorCSAqLworCWlmIChsaWtlbHkoaXJxX2VuYWJsZWQpKSB7CisJCW9wcm9mX3JlYWR5W2NwdV0gPSAxOworCQl3YWtlX3VwKCZvcHJvZl93YWl0KTsKKwl9Cit9CisKK2lubGluZSBzdGF0aWMgdm9pZAorZmlsbF9vcF9lbnRyeShzdHJ1Y3Qgb3Bfc2FtcGxlICogb3BzLCBsb25nIGVpcCwgcGlkX3QgcGlkLCBwaWRfdCB0Z2lkLCBpbnQgY3RyKQoreworCW9wcy0+ZWlwID0gZWlwOworCW9wcy0+cGlkID0gcGlkOworCW9wcy0+dGdpZCA9IHRnaWQ7CisJb3BzLT5jb3VudGVyID0gY3RyOworfQorCit2b2lkIG9wX2RvX3Byb2ZpbGUodWludCBjcHUsIGxvbmcgZWlwLCBsb25nIGlycV9lbmFibGVkLCBpbnQgY3RyKQoreworCXN0cnVjdCBfb3Byb2ZfZGF0YSAqIGRhdGEgPSAmb3Byb2ZfZGF0YVtjcHVdOworCXBpZF90IGNvbnN0IHBpZCA9IGN1cnJlbnQtPnBpZDsKKwlwaWRfdCBjb25zdCB0Z2lkID0gb3BfZ2V0X3RnaWQoKTsKKwlzdHJ1Y3Qgb3Bfc2FtcGxlICogc2FtcGxlcyA9ICZkYXRhLT5idWZmZXJbZGF0YS0+bmV4dGJ1Zl07CisKKwlkYXRhLT5ucl9pcnErKzsKKworCWZpbGxfb3BfZW50cnkoc2FtcGxlcywgZWlwLCBwaWQsIHRnaWQsIGN0cik7CisJZXZpY3Rfb3BfZW50cnkoY3B1LCBkYXRhLCBpcnFfZW5hYmxlZCk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0gZHJpdmVyIHJvdXRpbmVzIC0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBvbmx5IHN0b3AgYW5kIHN0YXJ0IHByb2ZpbGluZyBpbnRlcnJ1cHQgd2hlbiB3ZSBhcmUKKyAqIGZ1bGx5IHJ1bm5pbmcgIQorICovCitzdGF0aWMgdm9pZCBzdG9wX2NwdV9wZXJmY3RyKGludCBjcHUpCit7CisJaWYgKHN0YXRlID09IFJVTk5JTkcpCisJCWludF9vcHMtPnN0b3BfY3B1KGNwdSk7Cit9CisKK3N0YXRpYyB2b2lkIHN0YXJ0X2NwdV9wZXJmY3RyKGludCBjcHUpCit7CisJaWYgKHN0YXRlID09IFJVTk5JTkcpCisJCWludF9vcHMtPnN0YXJ0X2NwdShjcHUpOworfQorIAorc3BpbmxvY2tfdCBub3RlX2xvY2sgX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXAgPSBTUElOX0xPQ0tfVU5MT0NLRUQ7CisvKiB3aGljaCBidWZmZXIgbnIuIGlzIHdhaXRpbmcgdG8gYmUgcmVhZCA/ICovCitpbnQgY3B1X2J1ZmZlcl93YWl0aW5nOworIAorc3RhdGljIGludCBpc19yZWFkeSh2b2lkKQoreworCXVpbnQgY3B1X25yOworCWZvciAoY3B1X25yID0gMCA7IGNwdV9uciA8IHNtcF9udW1fY3B1czsgY3B1X25yKyspIHsKKwkJaWYgKG9wcm9mX3JlYWR5W2NwdV9ucl0pIHsKKwkJCWNwdV9idWZmZXJfd2FpdGluZyA9IGNwdV9ucjsKKwkJCXJldHVybiAxOworCQl9CisJfQorCXJldHVybiAwOworfQorCitpbmxpbmUgc3RhdGljIHZvaWQgdXBfYW5kX2NoZWNrX25vdGUodm9pZCkKK3sKKwlub3RlX3BvcysrOworCWlmIChsaWtlbHkobm90ZV9wb3MgPCAoc3lzY3RsLm5vdGVfc2l6ZSAtIE9QX1BSRV9OT1RFX1dBVEVSTUFSSyhzeXNjdGwubm90ZV9zaXplKSkgJiYgIWlzX3JlYWR5KCkpKQorCQlyZXR1cm47CisKKwkvKiBpZiB3ZSByZWFjaCB0aGUgZW5kIG9mIHRoZSBidWZmZXIsIGp1c3QgcGluCisJICogdG8gdGhlIGxhc3QgZW50cnkgdW50aWwgaXQgaXMgcmVhZC4gVGhpcyBsb3NlcworCSAqIG5vdGVzLCBidXQgd2UgaGF2ZSBubyBjaG9pY2UuICovCisJaWYgKHVubGlrZWx5KG5vdGVfcG9zID09IHN5c2N0bC5ub3RlX3NpemUpKSB7CisJCXN0YXRpYyBpbnQgd2FybmVkOworCQlpZiAoIXdhcm5lZCkgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAibm90ZSBidWZmZXIgb3ZlcmZsb3c6IHJlc3RhcnQgIgorCQkJICAgICAgICJvcHJvZmlsZSB3aXRoIGEgbGFyZ2VyIG5vdGUgYnVmZmVyLlxuIik7CisJCQl3YXJuZWQgPSAxOworCQl9CisJCXN5c2N0bC5ucl9ub3RlX2J1ZmZlcl9vdmVyZmxvdysrOworCQlub3RlX3BvcyA9IHN5c2N0bC5ub3RlX3NpemUgLSAxOworCX0KKworCS8qIHdlIGp1c3QgdXNlIGNwdSAwIGFzIGEgY29udmVuaWVudCBvbmUgdG8gd2FrZSB1cCAqLworCW9wcm9mX3JlYWR5WzBdID0gMjsKKwlvcHJvZl93YWtlX3VwKCZvcHJvZl93YWl0KTsKK30KKworLyogaWYgaG9sZGluZyBub3RlX2xvY2sgKi8KK3ZvaWQgX19vcHJvZl9wdXRfbm90ZShzdHJ1Y3Qgb3Bfbm90ZSAqIG9ub3RlKQoreworCS8qIGlnbm9yZSBub3RlIGlmIHdlJ3JlIG5vdCB1cCBhbmQgcnVubmluZyBmdWxseSAqLworCWlmIChzdGF0ZSAhPSBSVU5OSU5HKQorCQlyZXR1cm47CisKKwltZW1jcHkoJm5vdGVfYnVmZmVyW25vdGVfcG9zXSwgb25vdGUsIHNpemVvZihzdHJ1Y3Qgb3Bfbm90ZSkpOworCXVwX2FuZF9jaGVja19ub3RlKCk7Cit9CisKK3ZvaWQgb3Byb2ZfcHV0X25vdGUoc3RydWN0IG9wX25vdGUgKiBvbm90ZSkKK3sKKwlzcGluX2xvY2soJm5vdGVfbG9jayk7CisJX19vcHJvZl9wdXRfbm90ZShvbm90ZSk7CisJc3Bpbl91bmxvY2soJm5vdGVfbG9jayk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IG9wcm9mX25vdGVfcmVhZChjaGFyICogYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqIHBwb3MpCit7CisJc3RydWN0IG9wX25vdGUgKiBteWJ1ZjsKKwl1aW50IG51bTsKKwlzc2l6ZV90IG1heDsKKworCW1heCA9IHNpemVvZihzdHJ1Y3Qgb3Bfbm90ZSkgKiBzeXNjdGwubm90ZV9zaXplOworCisJaWYgKCpwcG9zIHx8IGNvdW50ICE9IG1heCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlteWJ1ZiA9IHZtYWxsb2MobWF4KTsKKwlpZiAoIW15YnVmKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXNwaW5fbG9jaygmbm90ZV9sb2NrKTsKKworCW51bSA9IG5vdGVfcG9zOworCisJY291bnQgPSBub3RlX3BvcyAqIHNpemVvZihzdHJ1Y3Qgb3Bfbm90ZSk7CisKKwlpZiAoY291bnQpCisJCW1lbWNweShteWJ1Ziwgbm90ZV9idWZmZXIsIGNvdW50KTsKKworCW5vdGVfcG9zID0gMDsKKworCXNwaW5fdW5sb2NrKCZub3RlX2xvY2spOworCisJaWYgKGNvdW50ICYmIGNvcHlfdG9fdXNlcihidWYsIG15YnVmLCBjb3VudCkpCisJCWNvdW50ID0gLUVGQVVMVDsKKworCXZmcmVlKG15YnVmKTsKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBpbnQgb3Byb2Zfbm90ZV9vcGVuKHZvaWQpCit7CisJaWYgKHRlc3RfYW5kX3NldF9iaXQoMCwgJm9wcm9mX25vdGVfb3BlbmVkKSkKKwkJcmV0dXJuIC1FQlVTWTsKKwlJTkNfVVNFX0NPVU5UX01BWUJFOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9wcm9mX25vdGVfcmVsZWFzZSh2b2lkKQoreworCUJVR19PTighb3Byb2Zfbm90ZV9vcGVuZWQpOworCWNsZWFyX2JpdCgwLCAmb3Byb2Zfbm90ZV9vcGVuZWQpOworCURFQ19VU0VfQ09VTlRfTUFZQkU7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2hlY2tfYnVmZmVyX2Ftb3VudChpbnQgY3B1X25yKQoreworCXN0cnVjdCBfb3Byb2ZfZGF0YSAqIGRhdGEgPSAmb3Byb2ZfZGF0YVtjcHVfbnJdOyAKKwlpbnQgc2l6ZSA9IGRhdGEtPmJ1Zl9zaXplOworCWludCBudW0gPSBkYXRhLT5uZXh0YnVmOworCWlmIChudW0gPCBzaXplIC0gZGF0YS0+YnVmX3dhdGVybWFyayAmJiBvcHJvZl9yZWFkeVtjcHVfbnJdICE9IDIpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAib3Byb2ZpbGU6IERldGVjdGVkIG92ZXJmbG93IG9mIHNpemUgJWQuICIKKwkJICAgICAgICJZb3UgbXVzdCBpbmNyZWFzZSB0aGUgbW9kdWxlIGJ1ZmZlciBzaXplIHdpdGhcbiIKKwkJICAgICAgICJvcGNvbnRyb2wgLS1zZXR1cCAtLWJ1ZmVyLXNpemU9IG9yIHJlZHVjZSB0aGUgIgorCQkgICAgICAgImludGVycnVwdCBmcmVxdWVuY3lcbiIsIG51bSk7CisJCWRhdGEtPm5yX2J1ZmZlcl9vdmVyZmxvdyArPSBudW07CisJCW51bSA9IHNpemU7CisJfSBlbHNlCisJCWRhdGEtPm5leHRidWYgPSAwOworCXJldHVybiBudW07Cit9CisKK3N0YXRpYyBpbnQgY29weV9idWZmZXIoY2hhciAqIGJ1ZiwgaW50IGNwdV9ucikKK3sKKwlzdHJ1Y3Qgb3BfYnVmZmVyX2hlYWQgaGVhZDsKKwlpbnQgcmV0ID0gLUVGQVVMVDsKKworCXN0b3BfY3B1X3BlcmZjdHIoY3B1X25yKTsKKyAKKwloZWFkLmNwdV9uciA9IGNwdV9ucjsKKwloZWFkLmNvdW50ID0gY2hlY2tfYnVmZmVyX2Ftb3VudChjcHVfbnIpOworCWhlYWQuc3RhdGUgPSBzdGF0ZTsKKworCW9wcm9mX3JlYWR5W2NwdV9ucl0gPSAwOworCisJaWYgKGNvcHlfdG9fdXNlcihidWYsICZoZWFkLCBzaXplb2Yoc3RydWN0IG9wX2J1ZmZlcl9oZWFkKSkpCisJCWdvdG8gb3V0OworIAorCWlmIChoZWFkLmNvdW50KSB7CisJCXNpemVfdCBjb25zdCBzaXplID0gaGVhZC5jb3VudCAqIHNpemVvZihzdHJ1Y3Qgb3Bfc2FtcGxlKTsKKwkJaWYgKGNvcHlfdG9fdXNlcihidWYgKyBzaXplb2Yoc3RydWN0IG9wX2J1ZmZlcl9oZWFkKSwKKwkJCW9wcm9mX2RhdGFbY3B1X25yXS5idWZmZXIsIHNpemUpKQorCQkJZ290byBvdXQ7CisJCXJldCA9IHNpemUgKyBzaXplb2Yoc3RydWN0IG9wX2J1ZmZlcl9oZWFkKTsKKwl9IGVsc2UgeworCQlyZXQgPSBzaXplb2Yoc3RydWN0IG9wX2J1ZmZlcl9oZWFkKTsKKwl9CisgCitvdXQ6CisJc3RhcnRfY3B1X3BlcmZjdHIoY3B1X25yKTsKKwlyZXR1cm4gcmV0OworfQorIAorc3RhdGljIHNzaXplX3Qgb3Byb2ZfcmVhZChzdHJ1Y3QgZmlsZSAqIGZpbGUsIGNoYXIgKiBidWYsIHNpemVfdCBjb3VudCwgbG9mZl90ICogcHBvcykKK3sKKwlzc2l6ZV90IG1heDsKKworCWlmICghY2FwYWJsZShDQVBfU1lTX1BUUkFDRSkpCisJCXJldHVybiAtRVBFUk07CisKKwlzd2l0Y2ggKE1JTk9SKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLT5pX3JkZXYpKSB7CisJCWNhc2UgMjogcmV0dXJuIG9wcm9mX25vdGVfcmVhZChidWYsIGNvdW50LCBwcG9zKTsKKwkJY2FzZSAwOiBicmVhazsKKwkJZGVmYXVsdDogcmV0dXJuIC1FSU5WQUw7CisJfQorCisJbWF4ID0gc2l6ZW9mKHN0cnVjdCBvcF9idWZmZXJfaGVhZCkgKyBzaXplb2Yoc3RydWN0IG9wX3NhbXBsZSkgKiBzeXNjdGwuYnVmX3NpemU7CisKKwlpZiAoKnBwb3MgfHwgY291bnQgIT0gbWF4KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXN3aXRjaCAoc3RhdGUpIHsKKwkJY2FzZSBSVU5OSU5HOgorCQkJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKG9wcm9mX3dhaXQsIGlzX3JlYWR5KCkpOworCQkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQorCQkJCXJldHVybiAtRUlOVFI7CisJCQlicmVhazsKKworCQkvKiBOb24tb2J2aW91cy4gSWYgT19OT05CTE9DSyBpcyBzZXQsIHRoYXQgbWVhbnMKKwkJICogdGhlIGRhZW1vbiBrbm93cyBpdCBoYXMgdG8gcXVpdCBhbmQgaXMgYXNraW5nCisJCSAqIGZvciBmaW5hbCBidWZmZXIgZGF0YS4gSWYgaXQncyBub3Qgc2V0LCB0aGVuIHdlCisJCSAqIGhhdmUganVzdCB0cmFuc2l0aW9uZWQgdG8gU1RPUFBJTkcsIGFuZCB3ZSBtdXN0CisJCSAqIGluZm9ybSB0aGUgZGFlbW9uICh3aGljaCB3ZSBjYW4gZG8ganVzdCBieSBhIG5vcm1hbAorCQkgKiBvcGVyYXRpb24pLgorCQkgKi8KKwkJY2FzZSBTVE9QUElORzogeworCQkJaW50IGNwdTsKKworCQkJaWYgKCEoZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spKQorCQkJCWJyZWFrOworCisJCQlmb3IgKGNwdSA9IDA7IGNwdSA8IHNtcF9udW1fY3B1czsgKytjcHUpIHsKKwkJCQlpZiAob3Byb2ZfZGF0YVtjcHVdLm5leHRidWYpIHsKKwkJCQkJY3B1X2J1ZmZlcl93YWl0aW5nID0gY3B1OworCQkJCQlvcHJvZl9yZWFkeVtjcHVdID0gMjsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorIAorCQkJaWYgKGNwdSA9PSBzbXBfbnVtX2NwdXMpCisJCQkJcmV0dXJuIC1FQUdBSU47CisgCisJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgU1RPUFBFRDogQlVHKCk7CisJfQorCisJcmV0dXJuIGNvcHlfYnVmZmVyKGJ1ZiwgY3B1X2J1ZmZlcl93YWl0aW5nKTsKK30KKworCitzdGF0aWMgaW50IG9wcm9mX3N0YXJ0KHZvaWQpOworc3RhdGljIGludCBvcHJvZl9zdG9wKHZvaWQpOworCitzdGF0aWMgaW50IG9wcm9mX29wZW4oc3RydWN0IGlub2RlICogaW5vLCBzdHJ1Y3QgZmlsZSAqIGZpbGUpCit7CisJaW50IGVycjsKKworCWlmICghY2FwYWJsZShDQVBfU1lTX1BUUkFDRSkpCisJCXJldHVybiAtRVBFUk07CisKKwlzd2l0Y2ggKE1JTk9SKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLT5pX3JkZXYpKSB7CisJCWNhc2UgMTogcmV0dXJuIG9wcm9mX2hhc2hfbWFwX29wZW4oKTsKKwkJY2FzZSAyOiByZXR1cm4gb3Byb2Zfbm90ZV9vcGVuKCk7CisJCWNhc2UgMDoKKwkJCS8qIG1ha2Ugc3VyZSB0aGUgb3RoZXIgZGV2aWNlcyBhcmUgb3BlbiAqLworCQkJaWYgKGlzX21hcF9yZWFkeSgpKQorCQkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKHRlc3RfYW5kX3NldF9iaXQoMCwgJm9wcm9mX29wZW5lZCkpCisJCXJldHVybiAtRUJVU1k7CisKKwllcnIgPSBvcHJvZl9zdGFydCgpOworCWlmIChlcnIpCisJCWNsZWFyX2JpdCgwLCAmb3Byb2Zfb3BlbmVkKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IG9wcm9mX3JlbGVhc2Uoc3RydWN0IGlub2RlICogaW5vLCBzdHJ1Y3QgZmlsZSAqIGZpbGUpCit7CisJc3dpdGNoIChNSU5PUihmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV9yZGV2KSkgeworCQljYXNlIDE6IHJldHVybiBvcHJvZl9oYXNoX21hcF9yZWxlYXNlKCk7CisJCWNhc2UgMjogcmV0dXJuIG9wcm9mX25vdGVfcmVsZWFzZSgpOworCQljYXNlIDA6IGJyZWFrOworCQlkZWZhdWx0OiByZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlCVUdfT04oIW9wcm9mX29wZW5lZCk7CisKKwljbGVhcl9iaXQoMCwgJm9wcm9mX29wZW5lZCk7CisKKwkvLyBGSVhNRTogaXMgdGhpcyBzYWZlIHdoZW4gSSBraWxsIC05IHRoZSBkYWVtb24gPyAKKwlyZXR1cm4gb3Byb2Zfc3RvcCgpOworfQorCitzdGF0aWMgaW50IG9wcm9mX21tYXAoc3RydWN0IGZpbGUgKiBmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiB2bWEpCit7CisJaWYgKE1JTk9SKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLT5pX3JkZXYpID09IDEpCisJCXJldHVybiBvcHJvZl9oYXNoX21hcF9tbWFwKGZpbGUsIHZtYSk7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKKy8qIGNhbGxlZCB1bmRlciBzcGlubG9jaywgY2Fubm90IHNsZWVwICovCitzdGF0aWMgdm9pZCBvcHJvZl9mcmVlX21lbSh1aW50IG51bSkKK3sKKwl1aW50IGk7CisJZm9yIChpPTA7IGkgPCBudW07IGkrKykgeworCQlpZiAob3Byb2ZfZGF0YVtpXS5idWZmZXIpCisJCQl2ZnJlZShvcHJvZl9kYXRhW2ldLmJ1ZmZlcik7CisJCW9wcm9mX2RhdGFbaV0uYnVmZmVyID0gTlVMTDsKKwl9CisJdmZyZWUobm90ZV9idWZmZXIpOworCW5vdGVfYnVmZmVyID0gTlVMTDsKK30KKworc3RhdGljIGludCBvcHJvZl9pbml0X2RhdGEodm9pZCkKK3sKKwl1aW50IGksIG5vdGVidWZzaXplOworCXVsb25nIGJ1Zl9zaXplOworCXN0cnVjdCBfb3Byb2ZfZGF0YSAqIGRhdGE7CisKKwlzeXNjdGwubnJfbm90ZV9idWZmZXJfb3ZlcmZsb3cgPSAwOworCW5vdGVidWZzaXplID0gc2l6ZW9mKHN0cnVjdCBvcF9ub3RlKSAqIHN5c2N0bC5ub3RlX3NpemU7CisJbm90ZV9idWZmZXIgPSB2bWFsbG9jKG5vdGVidWZzaXplKTsKKyAJaWYgKCFub3RlX2J1ZmZlcikgeworCQlwcmludGsoS0VSTl9FUlIgIm9wcm9maWxlOiBmYWlsZWQgdG8gYWxsb2NhdGUgbm90ZSBidWZmZXIgb2YgJXUgYnl0ZXNcbiIsCisJCQlub3RlYnVmc2l6ZSk7CisJCXJldHVybiAtRUZBVUxUOworCX0KKwlub3RlX3BvcyA9IDA7CisKKwkvLyBzYWZlIGluaXQKKwlmb3IgKGkgPSAwOyBpIDwgc21wX251bV9jcHVzOyArK2kpIHsKKwkJZGF0YSA9ICZvcHJvZl9kYXRhW2ldOworCQlkYXRhLT5idWZfc2l6ZSA9IDA7CisJCWRhdGEtPmJ1ZmZlciA9IDA7CisJCWRhdGEtPmJ1Zl93YXRlcm1hcmsgPSAwOworCQlkYXRhLT5ucl9idWZmZXJfb3ZlcmZsb3cgPSAwOworCX0KKyAKKwlidWZfc2l6ZSA9IChzaXplb2Yoc3RydWN0IG9wX3NhbXBsZSkgKiBzeXNjdGwuYnVmX3NpemUpOworCisJZm9yIChpID0gMCA7IGkgPCBzbXBfbnVtX2NwdXMgOyArK2kpIHsKKwkJZGF0YSA9ICZvcHJvZl9kYXRhW2ldOworCisJCWRhdGEtPmJ1ZmZlciA9IHZtYWxsb2MoYnVmX3NpemUpOworCQlpZiAoIWRhdGEtPmJ1ZmZlcikgeworCQkJcHJpbnRrKEtFUk5fRVJSICJvcHJvZmlsZTogZmFpbGVkIHRvIGFsbG9jYXRlIGV2aWN0aW9uIGJ1ZmZlciBvZiAlbHUgYnl0ZXNcbiIsIGJ1Zl9zaXplKTsKKwkJCW9wcm9mX2ZyZWVfbWVtKGkpOworCQkJcmV0dXJuIC1FRkFVTFQ7CisJCX0KKworCQltZW1zZXQoZGF0YS0+YnVmZmVyLCAwLCBidWZfc2l6ZSk7CisKKwkJZGF0YS0+YnVmX3NpemUgPSBzeXNjdGwuYnVmX3NpemU7CisJCWRhdGEtPmJ1Zl93YXRlcm1hcmsgPSBPUF9QUkVfV0FURVJNQVJLKGRhdGEtPmJ1Zl9zaXplKTsKKwkJZGF0YS0+bmV4dGJ1ZiA9IDA7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGFybXNfY2hlY2sodm9pZCkKK3sKKwlpbnQgZXJyOworCisJaWYgKChlcnIgPSBjaGVja19yYW5nZShzeXNjdGwuYnVmX3NpemUsIE9QX01JTl9CVUZfU0laRSwgT1BfTUFYX0JVRl9TSVpFLAorCQkic3lzY3RsLmJ1Zl9zaXplIHZhbHVlICVkIG5vdCBpbiByYW5nZSAoJWQgJWQpXG4iKSkpCisJCXJldHVybiBlcnI7CisJaWYgKChlcnIgPSBjaGVja19yYW5nZShzeXNjdGwubm90ZV9zaXplLCBPUF9NSU5fTk9URV9UQUJMRV9TSVpFLCBPUF9NQVhfTk9URV9UQUJMRV9TSVpFLAorCQkic3lzY3RsLm5vdGVfc2l6ZSB2YWx1ZSAlZCBub3QgaW4gcmFuZ2UgKCVkICVkKVxuIikpKQorCQlyZXR1cm4gZXJyOworCisJaWYgKChlcnIgPSBpbnRfb3BzLT5jaGVja19wYXJhbXMoKSkpCisJCXJldHVybiBlcnI7CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgREVDTEFSRV9NVVRFWChzeXNjdGxzZW0pOworCisKK3N0YXRpYyBpbnQgb3Byb2Zfc3RhcnQodm9pZCkKK3sKKwlpbnQgZXJyID0gMDsKKworCWRvd24oJnN5c2N0bHNlbSk7CisKKwkvKiBzYXZlIHRoZSBzeXNjdGwgc2V0dGFibGUgdGhpbmdzIHRvIHByb3RlY3QgYWdhaW5zdCBjaGFuZ2UgdGhyb3VnaAorCSAqIHN5c3RjbCB0aGUgcHJvZmlsZXIgcGFyYW1zICovCisJc3lzY3RsX3Bhcm1zLmNwdV90eXBlID0gc3lzY3RsLmNwdV90eXBlOworCXN5c2N0bCA9IHN5c2N0bF9wYXJtczsKKworCWlmICgoZXJyID0gb3Byb2ZfaW5pdF9kYXRhKCkpKQorCQlnb3RvIG91dDsKKworCWlmICgoZXJyID0gcGFybXNfY2hlY2soKSkpIHsKKwkJb3Byb2ZfZnJlZV9tZW0oc21wX251bV9jcHVzKTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKChlcnIgPSBpbnRfb3BzLT5zZXR1cCgpKSkgeworCQlvcHJvZl9mcmVlX21lbShzbXBfbnVtX2NwdXMpOworCQlnb3RvIG91dDsKKwl9CisKKwlvcF9pbnRlcmNlcHRfc3lzY2FsbHMoKTsKKworCWludF9vcHMtPnN0YXJ0KCk7CisKKwlzdGF0ZSA9IFJVTk5JTkc7CisKK291dDoKKwl1cCgmc3lzY3Rsc2VtKTsKKwlyZXR1cm4gZXJyOworfQorCisvKgorICogc3RvcCBpbnRlcnJ1cHRzIGJlaW5nIGdlbmVyYXRlZCBhbmQgbm90ZXMgYXJyaXZpbmcuCisgKiBUaGlzIGlzIGlkZW1wb3RlbnQuCisgKi8KK3N0YXRpYyB2b2lkIG9wcm9mX3BhcnRpYWxfc3RvcCh2b2lkKQoreworCUJVR19PTihzdGF0ZSA9PSBTVE9QUEVEKTsKKworCWlmIChzdGF0ZSA9PSBSVU5OSU5HKSB7CisJCW9wX3Jlc3RvcmVfc3lzY2FsbHMoKTsKKwkJaW50X29wcy0+c3RvcCgpOworCX0KKworCXN0YXRlID0gU1RPUFBJTkc7Cit9CisKK3N0YXRpYyBpbnQgb3Byb2Zfc3RvcCh2b2lkKQoreworCXVpbnQgaTsKKwkvLyBGSVhNRTogZXJyIG5vdCBuZWVkZWQgCisJaW50IGVyciA9IC1FSU5WQUw7CisKKwlkb3duKCZzeXNjdGxzZW0pOworCisJQlVHX09OKHN0YXRlID09IFNUT1BQRUQpOworCisJLyogaGVyZSB3ZSBuZWVkIHRvIDoKKwkgKiBicmluZyBiYWNrIHRoZSBvbGQgc3lzdGVtIGNhbGxzCisJICogc3RvcCB0aGUgcGVyZiBjb3VudGVyCisJICogYnJpbmcgYmFjayB0aGUgb2xkIE5NSSBoYW5kbGVyCisJICogcmVzZXQgdGhlIG1hcCBidWZmZXIgc3R1ZmYgYW5kIHJlYWR5IHZhbHVlcworCSAqCisJICogTm90aGluZyB3aWxsIGJlIGFibGUgdG8gd3JpdGUgaW50byB0aGUgbWFwIGJ1ZmZlciBiZWNhdXNlCisJICogd2Ugc3luY2hyb25pc2UgdmlhIHRoZSBzcGlubG9ja3MKKwkgKi8KKworCW9wcm9mX3BhcnRpYWxfc3RvcCgpOworCisJc3Bpbl9sb2NrKCZub3RlX2xvY2spOworCisJZm9yIChpID0gMCA7IGkgPCBzbXBfbnVtX2NwdXM7IGkrKykgeworCQlzdHJ1Y3QgX29wcm9mX2RhdGEgKiBkYXRhID0gJm9wcm9mX2RhdGFbaV07CisJCW9wcm9mX3JlYWR5W2ldID0gMDsKKwkJZGF0YS0+bmV4dGJ1ZiA9IDA7CisJfQorCisJb3Byb2ZfZnJlZV9tZW0oc21wX251bV9jcHVzKTsKKworCXNwaW5fdW5sb2NrKCZub3RlX2xvY2spOworCWVyciA9IDA7CisKKwkvKiBGSVhNRTogY2FuIHdlIHJlYWxseSBzYXkgdGhpcyA/ICovCisJc3RhdGUgPSBTVE9QUEVEOworCXVwKCZzeXNjdGxzZW0pOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG9wcm9mX2ZvcHMgPSB7CisjaWZkZWYgSEFWRV9GSUxFX09QRVJBVElPTlNfT1dORVIKKwlvd25lcjogVEhJU19NT0RVTEUsCisjZW5kaWYKKwlvcGVuOiBvcHJvZl9vcGVuLAorCXJlbGVhc2U6IG9wcm9mX3JlbGVhc2UsCisJcmVhZDogb3Byb2ZfcmVhZCwKKwltbWFwOiBvcHJvZl9tbWFwLAorfTsKKworLyoKKyAqIC9wcm9jL3N5cy9kZXYvb3Byb2ZpbGUvCisgKiAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZnNpemUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgbm90ZXNpemUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgZHVtcAorICogICAgICAgICAgICAgICAgICAgICAgICBkdW1wX3N0b3AKKyAqICAgICAgICAgICAgICAgICAgICAgICAgbnJfaW50ZXJydXB0cworICogICAgICAgICAgICAgICAgICAgICAgICAjY3RyLworICogICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlZAorICogICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pdF9tYXNrCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAga2VybmVsCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcgorICoKKyAqICNjdHIgaXMgaW4gWzAtMV0gZm9yIFBQcm8gY29yZSwgWzAtM10gZm9yIEF0aGxvbiBjb3JlCisgKgorICovCisKKy8qIFRoZXNlIGFjY2VzcyByb3V0aW5lcyBhcmUgYmFzaWNhbGx5IG5vdCBzYWZlIG9uIFNNUCBmb3IgbW9kdWxlIHVubG9hZC4KKyAqIEFuZCB0aGVyZSBpcyBub3RoaW5nIHdlIGNhbiBkbyBhYm91dCBpdCAtIHRoZSBBUEkgaXMgYnJva2VuLiBXZSdsbCBqdXN0CisgKiBtYWtlIGEgYmVzdC1lZmZvcnRzIHRoaW5nLiBOb3RlIHRoZSBzZW0gaXMgbmVlZGVkIHRvIHByZXZlbnQgcGFybXNfY2hlY2sKKyAqIGJ5cGFzc2luZyBkdXJpbmcgb3Byb2Zfc3RhcnQoKS4KKyAqLworCitzdGF0aWMgdm9pZCBsb2NrX3N5c2N0bCh2b2lkKQoreworCU1PRF9JTkNfVVNFX0NPVU5UOworCWRvd24oJnN5c2N0bHNlbSk7Cit9CisKK3N0YXRpYyB2b2lkIHVubG9ja19zeXNjdGwodm9pZCkKK3sKKwl1cCgmc3lzY3Rsc2VtKTsKKwlNT0RfREVDX1VTRV9DT1VOVDsKK30KKworc3RhdGljIGludCBnZXRfbnJfaW50ZXJydXB0cyhjdGxfdGFibGUgKiB0YWJsZSwgaW50IHdyaXRlLCBzdHJ1Y3QgZmlsZSAqIGZpbHAsIHZvaWQgKiBidWZmZXIsIHNpemVfdCAqIGxlbnApCit7CisJdWludCBjcHU7CisJaW50IHJldCA9IC1FSU5WQUw7CisKKwlsb2NrX3N5c2N0bCgpOworCisJaWYgKHdyaXRlKQorCQlnb3RvIG91dDsKKworCXN5c2N0bC5ucl9pbnRlcnJ1cHRzID0gMDsKKworCWZvciAoY3B1ID0gMCA7IGNwdSA8IHNtcF9udW1fY3B1czsgY3B1KyspIHsKKwkJc3lzY3RsLm5yX2ludGVycnVwdHMgKz0gb3Byb2ZfZGF0YVtjcHVdLm5yX2lycTsKKwkJb3Byb2ZfZGF0YVtjcHVdLm5yX2lycSA9IDA7CisJfQorCisJcmV0ID0gIHByb2NfZG9pbnR2ZWModGFibGUsIHdyaXRlLCBmaWxwLCBidWZmZXIsIGxlbnApOworb3V0OgorCXVubG9ja19zeXNjdGwoKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGdldF9ucl9idWZmZXJfb3ZlcmZsb3coY3RsX3RhYmxlICogdGFibGUsIGludCB3cml0ZSwgc3RydWN0IGZpbGUgKiBmaWxwLCB2b2lkICogYnVmZmVyLCBzaXplX3QgKiBsZW5wKQoreworCXVpbnQgY3B1OworCWludCByZXQgPSAtRUlOVkFMOworCisJbG9ja19zeXNjdGwoKTsKKworCWlmICh3cml0ZSkKKwkJZ290byBvdXQ7CisKKwlmb3IgKGNwdSA9IDAgOyBjcHUgPCBzbXBfbnVtX2NwdXM7IGNwdSsrKSB7CisJCXN5c2N0bC5ucl9idWZmZXJfb3ZlcmZsb3cgKz0gb3Byb2ZfZGF0YVtjcHVdLm5yX2J1ZmZlcl9vdmVyZmxvdzsKKwkJb3Byb2ZfZGF0YVtjcHVdLm5yX2J1ZmZlcl9vdmVyZmxvdyA9IDA7CisJfQorCisJcmV0ID0gIHByb2NfZG9pbnR2ZWModGFibGUsIHdyaXRlLCBmaWxwLCBidWZmZXIsIGxlbnApOworb3V0OgorCXVubG9ja19zeXNjdGwoKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgbHByb2NfZG9pbnR2ZWMoY3RsX3RhYmxlICogdGFibGUsIGludCB3cml0ZSwgc3RydWN0IGZpbGUgKiBmaWxwLCB2b2lkICogYnVmZmVyLCBzaXplX3QgKiBsZW5wKQoreworCWludCBlcnI7CisKKwlsb2NrX3N5c2N0bCgpOworCWVyciA9IHByb2NfZG9pbnR2ZWModGFibGUsIHdyaXRlLCBmaWxwLCBidWZmZXIsIGxlbnApOworCXVubG9ja19zeXNjdGwoKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIGRvX2FjdHVhbF9kdW1wKHZvaWQpCit7CisJdWludCBjcHU7CisKKwlmb3IgKGNwdSA9IDAgOyBjcHUgPCBzbXBfbnVtX2NwdXM7IGNwdSsrKQorCQlvcHJvZl9yZWFkeVtjcHVdID0gMjsKKwlvcHJvZl93YWtlX3VwKCZvcHJvZl93YWl0KTsKK30KKworc3RhdGljIGludCBzeXNjdGxfZG9fZHVtcChjdGxfdGFibGUgKiB0YWJsZSwgaW50IHdyaXRlLCBzdHJ1Y3QgZmlsZSAqIGZpbHAsIHZvaWQgKiBidWZmZXIsIHNpemVfdCAqIGxlbnApCit7CisJaW50IGVyciA9IC1FSU5WQUw7CisKKwlsb2NrX3N5c2N0bCgpOworCisJaWYgKHN0YXRlICE9IFJVTk5JTkcpCisJCWdvdG8gb3V0OworIAorCWlmICghd3JpdGUpIHsKKwkJZXJyID0gcHJvY19kb2ludHZlYyh0YWJsZSwgd3JpdGUsIGZpbHAsIGJ1ZmZlciwgbGVucCk7CisJCWdvdG8gb3V0OworCX0KKworCWRvX2FjdHVhbF9kdW1wKCk7CisKKwllcnIgPSAwOworb3V0OgorCXVubG9ja19zeXNjdGwoKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHN5c2N0bF9kb19kdW1wX3N0b3AoY3RsX3RhYmxlICogdGFibGUsIGludCB3cml0ZSwgc3RydWN0IGZpbGUgKiBmaWxwLCB2b2lkICogYnVmZmVyLCBzaXplX3QgKiBsZW5wKQoreworCWludCBlcnIgPSAtRUlOVkFMOworCisJbG9ja19zeXNjdGwoKTsKKworCWlmIChzdGF0ZSAhPSBSVU5OSU5HKQorCQlnb3RvIG91dDsKKyAKKwlpZiAoIXdyaXRlKSB7CisJCWVyciA9IHByb2NfZG9pbnR2ZWModGFibGUsIHdyaXRlLCBmaWxwLCBidWZmZXIsIGxlbnApOworCQlnb3RvIG91dDsKKwl9CisKKwlvcHJvZl9wYXJ0aWFsX3N0b3AoKTsKKworCS8qIGFsc28gd2FrZXMgdXAgZGFlbW9uICovCisJZG9fYWN0dWFsX2R1bXAoKTsKKworCWVyciA9IDA7CitvdXQ6CisJdW5sb2NrX3N5c2N0bCgpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgY29uc3QgbnJfb3Byb2Zfc3RhdGljID0gODsKKworc3RhdGljIGN0bF90YWJsZSBvcHJvZl90YWJsZVtdID0geworCXsgMSwgImJ1ZnNpemUiLCAmc3lzY3RsX3Bhcm1zLmJ1Zl9zaXplLCBzaXplb2YoaW50KSwgMDY0NCwgTlVMTCwgJmxwcm9jX2RvaW50dmVjLCBOVUxMLCB9LAorCXsgMSwgImR1bXAiLCAmc3lzY3RsX3Bhcm1zLmR1bXAsIHNpemVvZihpbnQpLCAwNjY2LCBOVUxMLCAmc3lzY3RsX2RvX2R1bXAsIE5VTEwsIH0sCisJeyAxLCAiZHVtcF9zdG9wIiwgJnN5c2N0bF9wYXJtcy5kdW1wX3N0b3AsIHNpemVvZihpbnQpLCAwNjQ0LCBOVUxMLCAmc3lzY3RsX2RvX2R1bXBfc3RvcCwgTlVMTCwgfSwKKwl7IDEsICJucl9pbnRlcnJ1cHRzIiwgJnN5c2N0bC5ucl9pbnRlcnJ1cHRzLCBzaXplb2YoaW50KSwgMDQ0NCwgTlVMTCwgJmdldF9ucl9pbnRlcnJ1cHRzLCBOVUxMLCB9LAorCXsgMSwgIm5vdGVzaXplIiwgJnN5c2N0bF9wYXJtcy5ub3RlX3NpemUsIHNpemVvZihpbnQpLCAwNjQ0LCBOVUxMLCAmbHByb2NfZG9pbnR2ZWMsIE5VTEwsIH0sCisJeyAxLCAiY3B1X3R5cGUiLCAmc3lzY3RsLmNwdV90eXBlLCBzaXplb2YoaW50KSwgMDQ0NCwgTlVMTCwgJmxwcm9jX2RvaW50dmVjLCBOVUxMLCB9LAorCXsgMSwgIm5vdGVfYnVmZmVyX292ZXJmbG93IiwgJnN5c2N0bC5ucl9ub3RlX2J1ZmZlcl9vdmVyZmxvdywgc2l6ZW9mKGludCksIDA0NDQsIE5VTEwsICZscHJvY19kb2ludHZlYywgTlVMTCwgfSwKKwl7IDEsICJidWZmZXJfb3ZlcmZsb3ciLCAmc3lzY3RsLm5yX2J1ZmZlcl9vdmVyZmxvdywgc2l6ZW9mKGludCksIDA0NDQsIE5VTEwsICZnZXRfbnJfYnVmZmVyX292ZXJmbG93LCBOVUxMLCB9LAorCXsgMCwgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9LAorCXsgMCwgfSwKK307CisKK3N0YXRpYyBjdGxfdGFibGUgb3Byb2Zfcm9vdFtdID0geworCXsxLCAib3Byb2ZpbGUiLCBOVUxMLCAwLCAwNzU1LCBvcHJvZl90YWJsZX0sCisgCXswLCB9LAorfTsKKworc3RhdGljIGN0bF90YWJsZSBkZXZfcm9vdFtdID0geworCXtDVExfREVWLCAiZGV2IiwgTlVMTCwgMCwgMDU1NSwgb3Byb2Zfcm9vdH0sCisJezAsIH0sCit9OworCitzdGF0aWMgc3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKiBzeXNjdGxfaGVhZGVyOworCisvKiBOT1RFOiB3ZSBkbyAqbm90KiBzdXBwb3J0IHN5c2N0bCgpIHN5c2NhbGwgKi8KKworc3RhdGljIGludCBfX2luaXQgaW5pdF9zeXNjdGwodm9pZCkKK3sKKwlpbnQgZXJyID0gMDsKKwljdGxfdGFibGUgKiBuZXh0ID0gJm9wcm9mX3RhYmxlW25yX29wcm9mX3N0YXRpY107CisKKwkvKiB0aGVzZSBzeXNjdGwgcGFybXMgbmVlZCBzZW5zaWJsZSB2YWx1ZSAqLworCXN5c2N0bF9wYXJtcy5idWZfc2l6ZSA9IE9QX0RFRkFVTFRfQlVGX1NJWkU7CisJc3lzY3RsX3Bhcm1zLm5vdGVfc2l6ZSA9IE9QX0RFRkFVTFRfTk9URV9TSVpFOworCisJaWYgKChlcnIgPSBpbnRfb3BzLT5hZGRfc3lzY3RscyhuZXh0KSkpCisJCXJldHVybiBlcnI7CisKKwlzeXNjdGxfaGVhZGVyID0gcmVnaXN0ZXJfc3lzY3RsX3RhYmxlKGRldl9yb290LCAwKTsKKwlyZXR1cm4gZXJyOworfQorCisvKiBub3Qgc2FmZSB0byBtYXJrIGFzIF9fZXhpdCBzaW5jZSB1c2VkIGZyb20gX19pbml0IGNvZGUgKi8KK3N0YXRpYyB2b2lkIGNsZWFudXBfc3lzY3RsKHZvaWQpCit7CisJY3RsX3RhYmxlICogbmV4dCA9ICZvcHJvZl90YWJsZVtucl9vcHJvZl9zdGF0aWNdOworCXVucmVnaXN0ZXJfc3lzY3RsX3RhYmxlKHN5c2N0bF9oZWFkZXIpOworCisJaW50X29wcy0+cmVtb3ZlX3N5c2N0bHMobmV4dCk7CisKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbnQgY2FuX3VubG9hZCh2b2lkKQoreworCWludCBjYW4gPSAtRUJVU1k7CisJZG93bigmc3lzY3Rsc2VtKTsKKworCWlmIChhbGxvd191bmxvYWQgJiYgc3RhdGUgPT0gU1RPUFBFRCAmJiAhR0VUX1VTRV9DT1VOVChUSElTX01PRFVMRSkpCisJCWNhbiA9IDA7CisJdXAoJnN5c2N0bHNlbSk7CisJcmV0dXJuIGNhbjsKK30KKworaW50IF9faW5pdCBvcHJvZl9pbml0KHZvaWQpCit7CisJaW50IGVyciA9IDA7CisKKwlpZiAoc3lzY3RsLmNwdV90eXBlICE9IENQVV9SVEMpIHsKKwkJaW50X29wcyA9IG9wX2ludF9pbnRlcmZhY2UoKTsKKworCQkvLyB0cnkgdG8gaW5pdCwgZmFsbCBiYWNrIHRvIHJ0YyBpZiBub3QKKwkJaWYgKChlcnIgPSBpbnRfb3BzLT5pbml0KCkpKSB7CisJCQlpbnRfb3BzID0gJm9wX3J0Y19vcHM7CisJCQlpZiAoKGVyciA9IGludF9vcHMtPmluaXQoKSkpCisJCQkJcmV0dXJuIGVycjsKKwkJCXN5c2N0bC5jcHVfdHlwZSA9IENQVV9SVEM7CisJCX0KKwl9IGVsc2UgeworCQlpbnRfb3BzID0gJm9wX3J0Y19vcHM7CisJCWlmICgoZXJyID0gaW50X29wcy0+aW5pdCgpKSkKKwkJCXJldHVybiBlcnI7CisJfQorCisJaWYgKChlcnIgPSBpbml0X3N5c2N0bCgpKSkKKwkJZ290byBvdXRfZXJyOworCisJZXJyID0gb3BfbWFqb3IgPSByZWdpc3Rlcl9jaHJkZXYoMCwgIm9wcm9mIiwgJm9wcm9mX2ZvcHMpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIG91dF9lcnIyOworCisJZXJyID0gb3Byb2ZfaW5pdF9oYXNobWFwKCk7CisJaWYgKGVyciA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJvcHJvZmlsZTogY291bGRuJ3QgYWxsb2NhdGUgaGFzaCBtYXAgIVxuIik7CisJCXVucmVnaXN0ZXJfY2hyZGV2KG9wX21ham9yLCAib3Byb2YiKTsKKwkJZ290byBvdXRfZXJyMjsKKwl9CisKKwkvKiBtb2R1bGUgbWlnaHQgbm90IGJlIHVubG9hZGFibGUgKi8KKwlUSElTX01PRFVMRS0+Y2FuX3VubG9hZCA9IGNhbl91bmxvYWQ7CisKKwkvKiBkbyB0aGlzIG5vdyBzbyB3ZSBkb24ndCBoYXZlIHRvIHRyYWNrIHNhdmUvcmVzdG9yZXMgbGF0ZXIgKi8KKwlvcF9zYXZlX3N5c2NhbGxzKCk7CisKKwlwcmludGsoS0VSTl9JTkZPICIlcyBsb2FkZWQsIG1ham9yICV1XG4iLCBvcF92ZXJzaW9uLCBvcF9tYWpvcik7CisJcmV0dXJuIDA7CisKK291dF9lcnIyOgorCWNsZWFudXBfc3lzY3RsKCk7CitvdXRfZXJyOgorCWludF9vcHMtPmRlaW5pdCgpOworCXJldHVybiBlcnI7Cit9CisKK3ZvaWQgX19leGl0IG9wcm9mX2V4aXQodm9pZCkKK3sKKwlvcHJvZl9mcmVlX2hhc2htYXAoKTsKKworCXVucmVnaXN0ZXJfY2hyZGV2KG9wX21ham9yLCAib3Byb2YiKTsKKworCWNsZWFudXBfc3lzY3RsKCk7CisKKwlpbnRfb3BzLT5kZWluaXQoKTsKK30KKworLyoKKyAqICJUaGUgbW9zdCB2YWx1YWJsZSBjb21tb2RpdHkgSSBrbm93IG9mIGlzIGluZm9ybWF0aW9uLiIKKyAqICAgICAgLSBHb3Jkb24gR2Vra28KKyAqLwpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvbW9kdWxlL29wcm9maWxlLmggYi9vcHJvZmlsZS0wLjkuNy9tb2R1bGUvb3Byb2ZpbGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTdmZGNmCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvbW9kdWxlL29wcm9maWxlLmgKQEAgLTAsMCArMSwxNjEgQEAKKy8qKgorICogQGZpbGUgb3Byb2ZpbGUuaAorICogTWFpbiBkcml2ZXIgY29kZQorICoKKyAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDIgT1Byb2ZpbGUgYXV0aG9ycworICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKKyAqCisgKiBAYXV0aG9yIEpvaG4gTGV2b24KKyAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQorICovCisKKyNpZm5kZWYgT1BST0ZJTEVfSAorI2RlZmluZSBPUFJPRklMRV9ICisKKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2N0bC5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CisKKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorCisjaW5jbHVkZSAiY29tcGF0LmgiCisKKyNpbmNsdWRlICJvcF9jb25maWdfMjQuaCIKKyNpbmNsdWRlICJvcF9od19jb25maWcuaCIKKyNpbmNsdWRlICJvcF9pbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJvcF9jcHVfdHlwZS5oIgorCisjdW5kZWYgbWluCisjdW5kZWYgbWF4CisKKyNkZWZpbmUgc3RyZXEoYSwgYikgKCFzdHJjbXAoKGEpLCAoYikpKQorCisvKiBwZXItY3B1IGR5bmFtaWMgZGF0YSAqLworc3RydWN0IF9vcHJvZl9kYXRhIHsKKwkvKiBldmljdGlvbiBidWZmZXIgKi8KKwlzdHJ1Y3Qgb3Bfc2FtcGxlICogYnVmZmVyOworCS8qIG5yLiBpbiBidWZmZXIgKi8KKwl1aW50IGJ1Zl9zaXplOworCS8qIHdlIHRyeSB0byB3YWtldXAgd2hlbiBuZXh0YnVmID49IGJ1Zl93YXRlcm1hcmsgKi8KKwl1aW50IGJ1Zl93YXRlcm1hcms7CisJLyogbmV4dCBpbiBidWZmZXIgKGF0b21pYykgKi8KKwl1aW50IG5leHRidWY7CisJLyogbnVtYmVyIG9mIElSUXMgZm9yIHRoaXMgQ1BVICovCisJdWludCBucl9pcnE7CisJLyogYnVmZmVyIG92ZXJmbG93IGN1bXVsYXRlZCBzaXplICovCisJdWludCBucl9idWZmZXJfb3ZlcmZsb3c7CisJLyogcmVzZXQgY291bnRlciB2YWx1ZXMgKi8KKwl1aW50IGN0cl9jb3VudFtPUF9NQVhfQ09VTlRFUlNdOworfTsKKworLyogcmVmbGVjdCAvcHJvYy9zeXMvZGV2L29wcm9maWxlLyNjb3VudGVyIGZpbGVzICovCitzdHJ1Y3Qgb3Byb2ZfY291bnRlciB7CisJaW50IGNvdW50OworCWludCBlbmFibGVkOworCWludCBldmVudDsKKwlpbnQga2VybmVsOworCWludCB1c2VyOworCWludCB1bml0X21hc2s7Cit9OworCisvKiByZWZsZWN0IC9wcm9jL3N5cy9kZXYvb3Byb2ZpbGUgZmlsZXMgKi8KK3N0cnVjdCBvcHJvZl9zeXNjdGwgeworCS8qIG5yLiBpbiBldmljdGlvbiBidWZmc2VyICovCisJaW50IGJ1Zl9zaXplOworCS8qIHN5c2N0bCBkdW1wICovCisJaW50IGR1bXA7CisJLyogZHVtcCBhbmQgc3RvcCAqLworCWludCBkdW1wX3N0b3A7CisJLyogbnIuIGluIG5vdGUgYnVmZmVyICovCisJaW50IG5vdGVfc2l6ZTsKKwkvKiBuci4gaW50ZXJydXB0cyBvY2N1cmVkICovCisJaW50IG5yX2ludGVycnVwdHM7CisJLyogdGhlIGNwdSBjb3JlIHR5cGU6IENQVV9QUFJPLCBDUFVfUElJIC4uLiAqLworCWludCBjcHVfdHlwZTsKKwkvKiBuciBub3RlIGJ1ZmZlciBvdmVyZmxvdyAqLworCWludCBucl9ub3RlX2J1ZmZlcl9vdmVyZmxvdzsKKwkvKiBuciBidWZmZXIgb3ZlcmZsb3cgKi8KKwlpbnQgbnJfYnVmZmVyX292ZXJmbG93OworCS8qIGNvdW50ZXIgc2V0dXAgKi8KKwlzdHJ1Y3Qgb3Byb2ZfY291bnRlciBjdHJbT1BfTUFYX0NPVU5URVJTXTsKK307CisKKy8qKgorICogQSBpbnRlcnJ1cHQgaGFuZGxlciBtdXN0IGltcGxlbWVudCB0aGVzZSByb3V0aW5lcy4KKyAqIFdoZW4gYW4gaW50ZXJydXB0IGFycml2ZXMsIGl0IG11c3QgZXZlbnR1YWxseSBjYWxsCisgKiBvcF9kb19wcm9maWxlKCkuCisgKi8KK3N0cnVjdCBvcF9pbnRfb3BlcmF0aW9ucyB7CisJLyogaW5pdGlhbGlzZSB0aGUgaW50ZXJydXB0IGhhbmRsZXIgb24gbW9kdWxlIGxvYWQuCisJICogT24gZmFpbHVyZSBkZWluaXQgaGFuZGxlciBpcyBub3QgY2FsbGVkIHNvIGFsbCByZXNvdXJjZXMKKwkgKiBhbGxvY2F0ZWQgYnkgaW5pdCgpIG11c3QgYmUgZnJlZWQgYmVmb3JlIHJldHVybmluZyBhbiBlcnJvciBjb2RlCisJICogKG9yIDAgb24gc3VjY2VzcykKKwkgKi8KKwlpbnQgKCppbml0KSh2b2lkKTsKKwkvKiBkZWluaXRpYWxpc2Ugb24gbW9kdWxlIHVubG9hZCAqLworCXZvaWQgKCpkZWluaXQpKHZvaWQpOworCS8qIGFkZCBhbnkgaGFuZGxlci1zcGVjaWZpYyBzeXNjdGxzIGF0IHRoZSBwb3NpdGlvbiBnaXZlbiBieSBAbmV4dC4gUmV0dXJuIDAgb24gc3VjY2VzcyAqLworCWludCAoKmFkZF9zeXNjdGxzKShjdGxfdGFibGUgKiBuZXh0KTsKKwkvKiByZW1vdmUgaGFuZGxlci1zcGVjaWZpYyBzeXNjdGxzICovCisJdm9pZCAoKnJlbW92ZV9zeXNjdGxzKShjdGxfdGFibGUgKiBuZXh0KTsKKwkvKiBjaGVjayBnaXZlbiBwcm9maWxpbmcgcGFyYW1ldGVycyBhcmUgY29ycmVjdC4gUmV0dXJuIDAgb24gc3VjY2VzcyAqLworCWludCAoKmNoZWNrX3BhcmFtcykodm9pZCk7CisJLyogc2V0dXAgdGhlIGhhbmRsZXIgZnJvbSBwcm9maWxpbmcgcGFyYW1ldGVycy4gUmV0dXJuIDAgb24gc3VjY2VzcyAqLworCWludCAoKnNldHVwKSh2b2lkKTsKKwkvKiBzdGFydCBwcm9maWxpbmcgb24gYWxsIENQVXMgKi8KKwl2b2lkICgqc3RhcnQpKHZvaWQpOworCS8qIHN0b3AgcHJvZmlsaW5nIG9uIGFsbCBDUFVzICovCisJdm9pZCAoKnN0b3ApKHZvaWQpOworCS8qIHN0YXJ0IHByb2ZpbGluZyBvbiB0aGUgZ2l2ZW4gQ1BVICovCisJdm9pZCAoKnN0YXJ0X2NwdSkodWludCk7CisJLyogc3RvcCBwcm9maWxpbmcgb24gdGhlIGdpdmVuIENQVSAqLworCXZvaWQgKCpzdG9wX2NwdSkodWludCk7Cit9OworCisvKiBtYXhpbXVtIGRlcHRoIG9mIGRuYW1lIHRyZWVzIC0gdGhpcyBpcyBqdXN0IGEgcGFnZSAqLworI2RlZmluZSBETkFNRV9TVEFDS19NQVggMTAyNAorCisvKiBvcHJvZl9zdGFydCgpIGNvcHkgaGVyZSB0aGUgc3lzY3RsIHNldHRhYmxlIHBhcmFtZXRlcnMgKi8KK2V4dGVybiBzdHJ1Y3Qgb3Byb2Zfc3lzY3RsIHN5c2N0bDsKKworaW50IG9wcm9mX2luaXQodm9pZCk7Cit2b2lkIG9wcm9mX2V4aXQodm9pZCk7Cit1bnNpZ25lZCBsb25nIGlzX21hcF9yZWFkeSh2b2lkKTsKK2ludCBvcHJvZl9oYXNoX21hcF9vcGVuKHZvaWQpOworaW50IG9wcm9mX2hhc2hfbWFwX3JlbGVhc2Uodm9pZCk7CitpbnQgb3Byb2ZfaGFzaF9tYXBfbW1hcChzdHJ1Y3QgZmlsZSAqIGZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqIHZtYSk7CitpbnQgb3Byb2ZfbWFwX29wZW4odm9pZCk7CitpbnQgb3Byb2ZfbWFwX3JlbGVhc2Uodm9pZCk7CitpbnQgb3Byb2ZfaW5pdF9oYXNobWFwKHZvaWQpOwordm9pZCBvcHJvZl9mcmVlX2hhc2htYXAodm9pZCk7CisKKy8qIHVzZWQgYnkgaW50ZXJydXB0IGhhbmRsZXJzIGlmIHRoZSB1bmRlcmxpbmVkIGhhcndhcmUgZG9lc24ndCBzdXBwb3J0CisgKiBwZXJmb3JtYW5jZSBjb3VudGVyICovCitleHRlcm4gc3RydWN0IG9wX2ludF9vcGVyYXRpb25zIG9wX3J0Y19vcHM7CisKK3ZvaWQgb3BfZG9fcHJvZmlsZSh1aW50IGNwdSwgbG9uZyBlaXAsIGxvbmcgaXJxX2VuYWJsZWQsIGludCBjdHIpOworZXh0ZXJuIHN0cnVjdCBfb3Byb2ZfZGF0YSBvcHJvZl9kYXRhW05SX0NQVVNdOworZXh0ZXJuIHN0cnVjdCBvcHJvZl9zeXNjdGwgc3lzY3RsX3Bhcm1zOworZXh0ZXJuIGludCBscHJvY19kb2ludHZlYyhjdGxfdGFibGUgKiB0YWJsZSwgaW50IHdyaXRlLCBzdHJ1Y3QgZmlsZSAqIGZpbHAsIHZvaWQgKiBidWZmZXIsIHNpemVfdCAqIGxlbnApOworCisvKiBmdW5jdGlvbmFsaXR5IHByb3ZpZGVkIGJ5IHRoZSBhcmNoaXRlY3R1cmUgZGVwZW5kZW50IGZpbGUgKi8KKy8qIG11c3QgcmV0dXJuIE9QX1JUQyBpZiB0aGUgaGFyZHdhcmUgZG9lc24ndCBzdXBwb3J0IHNvbWV0aGluZyBsaWtlCisgKiBwZXJmIGNvdW50ZXIgKi8KK29wX2NwdSBnZXRfY3B1X3R5cGUodm9pZCk7CisvKiByZXR1cm4gYW4gaW50ZXJmYWNlIHBvaW50ZXIsIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIG9ubHkgaWYgZ2V0X2NwdV90eXBlCisgKiBkb2Vzbid0IHJldHVybiBPUF9SVEMgKi8KK3N0cnVjdCBvcF9pbnRfb3BlcmF0aW9ucyBjb25zdCAqIG9wX2ludF9pbnRlcmZhY2Uodm9pZCk7CisvKiBpbnRlcmNlcHQgdGhlIG5lZWRlZCBzeXNjYWxsICovCit2b2lkIG9wX2ludGVyY2VwdF9zeXNjYWxscyh2b2lkKTsKK3ZvaWQgb3BfcmVzdG9yZV9zeXNjYWxscyh2b2lkKTsKK3ZvaWQgb3Bfc2F2ZV9zeXNjYWxscyh2b2lkKTsKKworI2VuZGlmIC8qIE9QUk9GSUxFX0ggKi8KZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L21vZHVsZS94ODYvTWFrZWZpbGUuaW4gYi9vcHJvZmlsZS0wLjkuNy9tb2R1bGUveDg2L01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1ZjE4MzMKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9tb2R1bGUveDg2L01ha2VmaWxlLmluCkBAIC0wLDAgKzEsMjggQEAKK09QUk9GSUxFX0RJUj1AT1BST0ZJTEVfRElSQAorVkVSU0lPTj1AVkVSU0lPTkAKK0tWRVJTPUBLVkVSU0AKK0tTUkM9QEtTUkNACisKK0VYVFJBX0NGTEFHUz1ARVhUUkFfQ0ZMQUdTX01PRFVMRUAgLURfX05PX1ZFUlNJT05fXyBcCisJLUkkKE9QUk9GSUxFX0RJUikvIC1JJChPUFJPRklMRV9ESVIpL2xpYnV0aWwgLUkkKE9QUk9GSUxFX0RJUikvbGlib3AgLUkkKE9QUk9GSUxFX0RJUikvbW9kdWxlCisgCitVU0VfU1RBTkRBUkRfQVNfUlVMRT0xCisgCisjIE5COiBkbyBub3QgYWRkIGEgZmlsZSBoZXJlIHdpdGhvdXQgYWRkaW5nIGl0IHRvIEVYVFJBX0RJU1QgaW4gLi4vTWFrZWZpbGUuYW0KKworT19UQVJHRVQgOj0gYXJjaC5vCisKK29iai15IDo9IGNwdV90eXBlLm8gb3BfYXBpYy5vIG9wX2ZpeG1hcC5vIG9wX3J0Yy5vIG9wX25taS5vIFwKKwlvcF9tb2RlbF9wcHJvLm8gb3BfbW9kZWxfYXRobG9uLm8gb3BfbW9kZWxfcDQubyAKKworb2JqLXkgKz0gb3Byb2ZpbGVfbm1pLm8gb3Bfc3lzY2FsbHMubworCitvYmotbSA6PSAkKE9fVEFSR0VUKQorT19PQkpTIDo9ICQob2JqLXkpCitNX09CSlMgOj0gJChPX1RBUkdFVCkKKworVE9QRElSIDo9ICQoS1NSQykKK0NPTkZJR19TSEVMTCA6PSBUT1BESVI9JChLU1JDKSAvYmluL2Jhc2gKK2luY2x1ZGUgJChLU1JDKS9SdWxlcy5tYWtlCisKKyMgRklYTUU6IGRlcGVuZGVuY2llcyAKZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L21vZHVsZS94ODYvYXBpY19jb21wYXQuaCBiL29wcm9maWxlLTAuOS43L21vZHVsZS94ODYvYXBpY19jb21wYXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43M2VhNDBlCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvbW9kdWxlL3g4Ni9hcGljX2NvbXBhdC5oCkBAIC0wLDAgKzEsODAgQEAKKy8qKgorICogQGZpbGUgYXBpY19jb21wYXQuaAorICogRGVmaW5pdGlvbnMgYW5kIGZ1bmN0aW9ucyBmb3IgQVBJQyBpbnRlcmFjdGlvbgorICoKKyAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDIgT1Byb2ZpbGUgYXV0aG9ycworICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKKyAqCisgKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKKyAqIEBhdXRob3IgSm9obiBMZXZvbgorICovCisKKyNpZm5kZWYgQVBJQ19DT01QQVRfSAorI2RlZmluZSBBUElDX0NPTVBBVF9ICisKKyNpZiBWX0JFRk9SRSgyLCA0LCAwKQorLyogZXZlbiBvbiBTTVAsIHNvbWUgZGVmaW5lcyBhcmUgbWlzc2luZyBpbiAyLjIgKi8KKyNkZWZpbmUgQVBJQ19MVlIJCTB4MzAKKyNkZWZpbmUgQVBJQ19MVlRQQwkJMHgzNDAKKyNkZWZpbmUgQVBJQ19MVlRFUlIJCTB4MzcwCisjZGVmaW5lIEdFVF9BUElDX1ZFUlNJT04oeCkJKCh4KSYweEZGKQorI2RlZmluZSBHRVRfQVBJQ19NQVhMVlQoeCkJKCgoeCkgPj4gMTYpJjB4RkYpCisjZGVmaW5lIEFQSUNfSU5URUdSQVRFRCh4KQkoKHgpJjB4RjApCisjZWxzZQorI2luY2x1ZGUgPGFzbS9hcGljLmg+CisjaW5jbHVkZSA8YXNtL2FwaWNkZWYuaD4KKyNpbmNsdWRlIDxhc20vbXBzcGVjLmg+CisjZW5kaWYKKworI2lmbmRlZiBNU1JfSUEzMl9BUElDQkFTRQorI2RlZmluZSBNU1JfSUEzMl9BUElDQkFTRSAweDFCCisjZW5kaWYKKyAKKyNpZm5kZWYgQVBJQ19TUElWX0FQSUNfRU5BQkxFRAorI2RlZmluZSBBUElDX1NQSVZfQVBJQ19FTkFCTEVEICgxIDw8IDgpCisjZW5kaWYKKworI2lmbmRlZiBBUElDX0RFRkFVTFRfUEhZU19CQVNFCisjZGVmaW5lIEFQSUNfREVGQVVMVF9QSFlTX0JBU0UgMHhmZWUwMDAwMAorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChDT05GSUdfWDg2X0xPQ0FMX0FQSUMpCisKKyNkZWZpbmUgQVBJQ19ERUZBVUxUX1BIWVNfQkFTRQkJMHhmZWUwMDAwMAorI2RlZmluZSBBUElDX1NQSVYJCQkweEYwCisjZGVmaW5lIEFQSUNfRVNSCQkJMHgyODAKKyNkZWZpbmUgQVBJQ19MVlRUCQkJMHgzMjAKKyNkZWZpbmUgQVBJQ19MVlQwCQkJMHgzNTAKKyNkZWZpbmUgQVBJQ19MVlRfTUFTS0VECQkJKDEgPDwgMTYpCisjZGVmaW5lIEFQSUNfTFZUX0xFVkVMX1RSSUdHRVIJCSgxIDw8IDE1KQorI2RlZmluZSBBUElDX01PREVfTk1JCQkJMHg0CisjZGVmaW5lIEFQSUNfTU9ERV9FWElOVAkJCTB4NworI2RlZmluZSBHRVRfQVBJQ19ERUxJVkVSWV9NT0RFKHgpCSgoKHgpID4+IDgpJjB4NykKKyNkZWZpbmUgU0VUX0FQSUNfREVMSVZFUllfTU9ERSh4LCB5KQkoKCh4KSZ+MHg3MDApfCgoeSkgPDwgOCkpCisjZGVmaW5lIEFQSUNfTFZUMQkJCTB4MzYwCisjZGVmaW5lIEFQSUNfU0VORF9QRU5ESU5HCQkoMSA8PCAxMikKKyNkZWZpbmUgQVBJQ19URENSCQkJMHgzRTAKKyNkZWZpbmUgQVBJQ19URFJfRElWXzEJCQkweEIKKworLyogd2hlbiAhQ09ORklHX1g4Nl9MT0NBTF9BUElDIHdlIG5lZWQgdG8gcHJvdmlkZSBhIHZhbGlkIHZhIHRvIG1hcCB0aGUKKyAqIHRoZSBwYSBvZiBBUElDIG9udG8uIFRoaXMgdmEgbXVzdCBiZSB1bi1jYWNoYWJsZS91bi1zd2FwYWJsZSovCisvKiNkZWZpbmUgQVBJQ19CQVNFIChmaXhfdG9fdmlydChGSVhfQVBJQ19CQVNFKSkqLworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgdmlydF9hcGljX2Jhc2U7CisvKiB0aGUgb3RoZXIgZGVmaW5lIGFib3ZlIGNhbiBiZSByZWRlZmluZWQgdW50aWwgdGhlIHJlZiBpcyBpZGVudGljYWwsIHRoaXMKKyAqIGFsbG93IGEgY29tcGlsZSB0aW1lIGNoZWNraW5nIGJ1dCB0aGlzIG5lZWQgdG8gYmUgcmVkZWZpbmVkIGRpZmZlcmVudGx5ICovCisjdW5kZWYgQVBJQ19CQVNFCisjZGVmaW5lIEFQSUNfQkFTRQl2aXJ0X2FwaWNfYmFzZQorCitzdGF0aWMgX19pbmxpbmUgdm9pZCBhcGljX3dyaXRlKHVuc2lnbmVkIGxvbmcgcmVnLCB1bnNpZ25lZCBsb25nIHYpCit7CisJKigodm9sYXRpbGUgdTMyICopKEFQSUNfQkFTRStyZWcpKSA9IHY7Cit9CisKK3N0YXRpYyBfX2lubGluZSB1bnNpZ25lZCBsb25nIGFwaWNfcmVhZCh1bnNpZ25lZCBsb25nIHJlZykKK3sKKwlyZXR1cm4gKigodm9sYXRpbGUgdTMyICopKEFQSUNfQkFTRStyZWcpKTsKK30KKworI2VuZGlmIC8qICFkZWZpbmVkKENPTkZJR19YODZfTE9DQUxfQVBJQykgKi8KKworI2VuZGlmIC8qIEFQSUNfQ09NUEFUX0ggKi8KZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L21vZHVsZS94ODYvY3B1X3R5cGUuYyBiL29wcm9maWxlLTAuOS43L21vZHVsZS94ODYvY3B1X3R5cGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzQ5NDA1Ci0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvbW9kdWxlL3g4Ni9jcHVfdHlwZS5jCkBAIC0wLDAgKzEsMTkyIEBACisvKioKKyAqIEBmaWxlIGNwdV90eXBlLmMKKyAqIENQVSBkZXRlcm1pbmF0aW9uCisgKgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMiBPUHJvZmlsZSBhdXRob3JzCisgKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORworICoKKyAqIEBhdXRob3IgSm9obiBMZXZvbgorICogQGF1dGhvciBQaGlsaXBwZSBFbGllCisgKi8KKworI2luY2x1ZGUgIm9wcm9maWxlLmgiCisjaW5jbHVkZSAib3BfbXNyLmgiCisKKyNpbmNsdWRlIDxsaW51eC9zbXAuaD4KKworRVhQT1JUX05PX1NZTUJPTFM7CisKK01PRFVMRV9QQVJNKGZvcmNlX3J0YywgImkiKTsKK01PRFVMRV9QQVJNX0RFU0MoZm9yY2VfcnRjLCAiZm9yY2UgUlRDIG1vZGUuIik7CitzdGF0aWMgaW50IGZvcmNlX3J0YzsKKworI2lmbmRlZiBIVF9TVVBQT1JUCisvKioKKyAqIHA0X3RocmVhZHMgLSBkZXRlcm1pbmVzIHRoZSBudW1iZXIgb2YgbG9naWNhbCBwcm9jZXNzb3IgdGhyZWFkcyBpbiBhIGRpZQorICogCisgKiByZXR1cm5zIG51bWJlciBvZiB0aHJlYWRzIGluIHA0IGRpZSAoMSBmb3Igbm9uLUhUIHByb2Nlc3NvcnMpCisgKi8KK3N0YXRpYyBpbnQgcDRfdGhyZWFkcyh2b2lkKQoreworCWludCBwcm9jZXNzb3JfdGhyZWFkcyA9IDE7CisKKyNpZmRlZiBDT05GSUdfU01QCisJaWYgKHRlc3RfYml0KFg4Nl9GRUFUVVJFX0hULCAmY3VycmVudF9jcHVfZGF0YS54ODZfY2FwYWJpbGl0eSkpIHsKKwkJLyogVGhpcyBpdCBhIFBlbnRpdW0gNCB3aXRoIEhULCBmaW5kIG51bWJlciBvZiB0aHJlYWRzICovCisJCWludCBlYXgsIGVieCwgZWN4LCBlZHg7CisKKwkJY3B1aWQgKDEsICZlYXgsICZlYngsICZlY3gsICZlZHgpOworCQlwcm9jZXNzb3JfdGhyZWFkcyA9IChlYnggPj4gMTYpICYgMHhmZjsKKwl9CisjZW5kaWYgLyogQ09ORklHX1NNUCAqLworCisJcmV0dXJuIHByb2Nlc3Nvcl90aHJlYWRzOworfQorCisjaWZkZWYgQ09ORklHX1NNUAorLyoqCisgKiBkb19jcHVfaWQgLSBDYWxsIHRoZSBjcHVpZCBpbnN0cnVjdGlvbiBhbmQgZmlsbCBpbiBkYXRhIGF0IHBhc3NlZCBhZGRyZXNzCisgKgorICogV2UgZXhwZWN0IHRoYXQgZGF0YSBpcyBwb2ludGluZyB0byBhbiBhcnJheSBvZiB1bnNpZ25lZCBjaGFycyBhcyBiaWcgYXMgdGhlcmUKKyAqIGFyZSBjcHVzIGluIGFuIHNtcCBzeXN0ZW0uCisgKi8KK3N0YXRpYyB2b2lkIGRvX2NwdV9pZCh2b2lkICogZGF0YSkKK3sKKwlpbnQgZWF4LCBlYngsIGVjeCwgZWR4OworCXVuc2lnbmVkIGNoYXIgKiBwdHIgPSAodW5zaWduZWQgY2hhciAqKSBkYXRhOworCisJY3B1aWQoMSwgJmVheCwgJmVieCwgJmVjeCwgJmVkeCk7CisKKwkvKiBiaXRzIEVCWFszMToyNF0gZGVmaW5lIEFQSUMgSUQgKi8KKwlwdHJbc21wX3Byb2Nlc3Nvcl9pZCgpXSA9ICh1bnNpZ25lZCBjaGFyKSAoKGVieCAmIDB4ZmYwMDAwMDApID4+IDI0KTsKK30KKyNlbmRpZgorCisvKioKKyAqIHA0X2h0X2VuYWJsZWQgLSBEZXRlcm1pbmVzIGlmIEh5cGVyIFRocmVhZGluZyBpcyBlbmFibGVkIG9yIG5vdC4KKyAqCisgKiBBIFA0IGNhbiBiZSBjYXBhYmxlIG9mIEhULCBidXQgbm90IGVuYWJsZWQgdmlhIEJJT1MuICBUaGUgY2hlY2sgZm9yIAorICogdGhpcyBpcyB1bmZvcnR1bmF0ZWx5IG5vdCBzaW1wbGUgYW5kIGludm9sdmVzIHJ1bm5pbmcgY3B1aWQgb24gYWxsIAorICogbG9naWNhbCBwcm9jZXNzb3JzIGFuZCBjaGVja2luZyBmb3IgYml0cyBpbiB0aGUgQVBJQ19JRCBmaWVsZHMuIAorICogQXMgcGVyIEludGVsIGRvY3MuICBSZXR1cm5zIDEgaWYgZW5hYmxlZCwgMCBvdGhlcndpc2UuCisgKgorICovCitzdGF0aWMgaW50IHA0X2h0X2VuYWJsZWQodm9pZCkKK3sKKyNpZm5kZWYgQ09ORklHX1NNUAorCXJldHVybiAwOworI2Vsc2UKKwlpbnQgZW5hYmxlZCwgdGhyZWFkcywgaTsKKwl1bnNpZ25lZCBjaGFyIG1hc2s7CisJdW5zaWduZWQgY2hhciBhcGljX2lkW3NtcF9udW1fY3B1c107CisJdW5zaWduZWQgaW50IGNwdTsKKworCS8qIEZpcnN0IGNoZWNrIGZvciBjYXBhYmlsaXR5ICovCisJdGhyZWFkcyA9IHA0X3RocmVhZHMoKTsKKwlpZiAodGhyZWFkcyA9PSAxKSByZXR1cm4gMDsKKwkvKiBDcmVhdGUgbWFzayBmb3IgbG93IG9yZGVyIGJpdHMgKi8KKwltYXNrID0gMHhmZjsKKwlpID0gMTsKKwl3aGlsZSAoaSA8IHRocmVhZHMpIHsKKwkJaSAqPSAyOworCQltYXNrIDw8PSAxOworCX0KKwkvKiBHZXQgQVBJQ19JRCBmcm9tIGFsbCBsb2dpYWwgcHJvY3MgYW5kIHNlbGYgKi8KKwlzbXBfY2FsbF9mdW5jdGlvbihkb19jcHVfaWQsIGFwaWNfaWQsIDEsIDEpOworCWRvX2NwdV9pZChhcGljX2lkKTsKKwkvKiBJZiB0aGUgbG93IG9yZGVyIGJpdHMgYXJlIG9uLCB0aGVuIEhUIGlzIGVuYWJsZWQgKi8KKwllbmFibGVkID0gMDsKKwljcHUgPSAwOworCWRvIHsKKwkJaWYgKGFwaWNfaWRbY3B1XSAmIH5tYXNrKSB7CisJCQllbmFibGVkID0gMTsKKwkJCWJyZWFrOworCQl9CisJCWNwdSsrOworCX0gd2hpbGUgKGNwdSA8IHNtcF9udW1fY3B1cyk7CisKKwlyZXR1cm4gZW5hYmxlZDsKKyNlbmRpZiAvKiBDT05GSUdfU01QICovCit9CisjZW5kaWYgLyogIUhUX1NVUFBPUlQgKi8KKworCitvcF9jcHUgcDRfY3B1X3R5cGUodm9pZCkKK3sKKwlfX3U4IG1vZGVsID0gY3VycmVudF9jcHVfZGF0YS54ODZfbW9kZWw7CisJaWYgKG1vZGVsIDw9IDQpIHsKKyNpZmRlZiBIVF9TVVBQT1JUCisJCWlmIChzbXBfbnVtX3NpYmxpbmdzID09IDEpIHsKKwkJCXJldHVybiBDUFVfUDQ7CisJCX0gZWxzZSBpZiAoc21wX251bV9zaWJsaW5ncyA9PSAyKSB7CisJCQlyZXR1cm4gQ1BVX1A0X0hUMjsKKwkJfSBlbHNlIHsKKwkJCXByaW50ayhLRVJOX0lORk8gCisJCQkgICAgICAgIm9wcm9maWxlOiBQNCBIVCB1bnN1cHBvcnRlZCBudW1iZXIgb2Ygc2libGluZ3MiCisJCQkgICAgICAgInByb2Nlc3NvciwgcmV2ZXJ0aW5nIHRvIFJUQ1xuIik7CisJCQlyZXR1cm4gQ1BVX1JUQzsKKwkJfQorI2Vsc2UKKwkJLyogQ2Fubm90IGhhbmRsZSBlbmFibGVkIEhUIFA0IGhhcmR3YXJlICovCisJCWlmICgocDRfdGhyZWFkcygpID4gMSkgJiYgcDRfaHRfZW5hYmxlZCgpKSB7CisJCQlwcmludGsoS0VSTl9JTkZPIAorCQkJICAgICAgICJvcHJvZmlsZTogUDQgSFQgZW5hYmxlZCwgcmV2ZXJ0aW5nIHRvIFJUQ1xuIik7CisJCQlyZXR1cm4gQ1BVX1JUQzsKKwkJfQorCQllbHNlCisJCQlyZXR1cm4gQ1BVX1A0OworI2VuZGlmCisJfSBlbHNlCisJCS8qIERvIG5vdCBrbm93IHdoYXQgaXQgaXMgKi8KKwkJcmV0dXJuIENQVV9SVEM7Cit9CisKKyAKK19faW5pdCBvcF9jcHUgZ2V0X2NwdV90eXBlKHZvaWQpCit7CisJX191OCB2ZW5kb3IgPSBjdXJyZW50X2NwdV9kYXRhLng4Nl92ZW5kb3I7CisJX191OCBmYW1pbHkgPSBjdXJyZW50X2NwdV9kYXRhLng4NjsKKwlfX3U4IG1vZGVsID0gY3VycmVudF9jcHVfZGF0YS54ODZfbW9kZWw7CisJX191MTYgdmFsOworCisJaWYgKGZvcmNlX3J0YykKKwkJcmV0dXJuIENQVV9SVEM7CisKKwlzd2l0Y2ggKHZlbmRvcikgeworCQljYXNlIFg4Nl9WRU5ET1JfQU1EOgorCQkJaWYgKGZhbWlseSA9PSA2KSB7CisJCQkJLyogY2VydGFpbiBtb2RlbHMgb2YgSzcgZG9lcyBub3QgaGF2ZSBhcGljLgorCQkJCSAqIENoZWNrIGlmIGFwaWMgaXMgcmVhbGx5IHByZXNlbnQgYmVmb3JlIGVuYWJsaW5nIGl0LgorCQkJCSAqIElBMzIgVjMsIDcuNC4xICovCisJCQkJdmFsID0gY3B1aWRfZWR4KDEpOworCQkJCWlmICghKHZhbCAmICgxIDw8IDkpKSkKKwkJCQkJcmV0dXJuIENQVV9SVEM7CisJCQkJcmV0dXJuIENQVV9BVEhMT047CisJCQl9CisJCQlpZiAoZmFtaWx5ID09IDE1KQorCQkJCXJldHVybiBDUFVfSEFNTUVSOworCQkJcmV0dXJuIENQVV9SVEM7CisKKwkJY2FzZSBYODZfVkVORE9SX0lOVEVMOgorCQkJc3dpdGNoIChmYW1pbHkpIHsKKwkJCWRlZmF1bHQ6CisJCQkJcmV0dXJuIENQVV9SVEM7CisJCQljYXNlIDY6CisJCQkJLyogQSBQNi1jbGFzcyBwcm9jZXNzb3IgKi8KKwkJCQlpZiAobW9kZWwgPT0gMTQpCisJCQkJCXJldHVybiBDUFVfQ09SRTsKKwkJCQlpZiAobW9kZWwgPiAweGQpCisJCQkJCXJldHVybiBDUFVfUlRDOworCQkJCWlmIChtb2RlbCA+IDUpCisJCQkJCXJldHVybiBDUFVfUElJSTsKKwkJCQllbHNlIGlmIChtb2RlbCA+IDIpCisJCQkJCXJldHVybiBDUFVfUElJOworCQkJCXJldHVybiBDUFVfUFBSTzsKKwkJCWNhc2UgMHhmOgorCQkJCXJldHVybiBwNF9jcHVfdHlwZSgpOworCQkJfQorCQkJCisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gQ1BVX1JUQzsKKwl9Cit9CmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9tb2R1bGUveDg2L29wX2FwaWMuYyBiL29wcm9maWxlLTAuOS43L21vZHVsZS94ODYvb3BfYXBpYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiY2U0MzEKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9tb2R1bGUveDg2L29wX2FwaWMuYwpAQCAtMCwwICsxLDIzOSBAQAorLyoqCisgKiBAZmlsZSBvcF9hcGljLmMKKyAqCisgKiBBUElDIHNldHVwIGV0Yy4gcm91dGluZXMKKyAqCisgKiBAcmVtYXJrIENvcHlyaWdodCAyMDAyIE9Qcm9maWxlIGF1dGhvcnMKKyAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCisgKgorICogQGF1dGhvciBKb2huIExldm9uCisgKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKKyAqIEBhdXRob3IgRGF2ZSBKb25lcworICogQGF1dGhvciBHcmF5ZG9uIEhvYXJlCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorCisjaW5jbHVkZSAib3Byb2ZpbGUuaCIKKyNpbmNsdWRlICJvcF9tc3IuaCIKKyNpbmNsdWRlICJvcF9hcGljLmgiCisKKy8qIHVzZWQgdG8gc2F2ZS9yZXN0b3JlIG9yaWdpbmFsIGtlcm5lbCBubWkgKi8KK3N0YXRpYyBzdHJ1Y3QgZ2F0ZV9zdHJ1Y3Qga2VybmVsX25taTsKK3N0YXRpYyB1bG9uZyBsdnRwY19tYXNrZWQ7CisKKy8qIHRoaXMgbWFza2luZyBjb2RlIGlzIHVuc2FmZSBhbmQgbmFzdHkgYnV0IG1pZ2h0IGRlYWwgd2l0aCB0aGUgc21hbGwKKyAqIHJhY2Ugd2hlbiBpbnN0YWxsaW5nIHRoZSBOTUkgZW50cnkgaW50byB0aGUgSURULgorICovCitzdGF0aWMgdm9pZCBtYXNrX2x2dHBjKHZvaWQgKiBlKQoreworCXUzMiB2ID0gYXBpY19yZWFkKEFQSUNfTFZUUEMpOworCWx2dHBjX21hc2tlZCA9IHYgJiBBUElDX0xWVF9NQVNLRUQ7CisJYXBpY193cml0ZShBUElDX0xWVFBDLCB2IHwgQVBJQ19MVlRfTUFTS0VEKTsKK30KKworc3RhdGljIHZvaWQgdW5tYXNrX2x2dHBjKHZvaWQgKiBlKQoreworCWlmICghbHZ0cGNfbWFza2VkKQorCQlhcGljX3dyaXRlKEFQSUNfTFZUUEMsIGFwaWNfcmVhZChBUElDX0xWVFBDKSAmIH5BUElDX0xWVF9NQVNLRUQpOworfQorCisKK3ZvaWQgaW5zdGFsbF9ubWkodm9pZCkKK3sKKwlzdHJ1Y3QgX2Rlc2NyIGRlc2NyOworCisJLyogTk1JIGhhbmRsZXIgaXMgYXQgaWR0X3RhYmxlW0lEVF9WRUNUT1JfTlVNQkVSXSAgICAgICAgICAgICovCisJLyogc2VlIEludGVsIFZvbC4zIEZpZ3VyZSA1LTIsIGludGVycnVwdCBnYXRlICAgICAgICAgICAgICAgICovCisKKwlzbXBfY2FsbF9mdW5jdGlvbihtYXNrX2x2dHBjLCBOVUxMLCAwLCAxKTsKKwltYXNrX2x2dHBjKE5VTEwpOworCisJc3RvcmVfaWR0KGRlc2NyKTsKKwlrZXJuZWxfbm1pID0gZGVzY3IuYmFzZVtOTUlfVkVDVE9SX05VTV07CisJU0VUX05NSV9HQVRFOworCisJc21wX2NhbGxfZnVuY3Rpb24odW5tYXNrX2x2dHBjLCBOVUxMLCAwLCAxKTsKKwl1bm1hc2tfbHZ0cGMoTlVMTCk7Cit9CisKK3ZvaWQgcmVzdG9yZV9ubWkodm9pZCkKK3sKKwlzdHJ1Y3QgX2Rlc2NyIGRlc2NyOworCisJc21wX2NhbGxfZnVuY3Rpb24obWFza19sdnRwYywgTlVMTCwgMCwgMSk7CisJbWFza19sdnRwYyhOVUxMKTsKKworCXN0b3JlX2lkdChkZXNjcik7CisJZGVzY3IuYmFzZVtOTUlfVkVDVE9SX05VTV0gPSBrZXJuZWxfbm1pOworCisJc21wX2NhbGxfZnVuY3Rpb24odW5tYXNrX2x2dHBjLCBOVUxMLCAwLCAxKTsKKwl1bm1hc2tfbHZ0cGMoTlVMTCk7Cit9CisKKworLyogLS0tLS0tLS0tLS0tLS0tLSBBUElDIHNldHVwIC0tLS0tLS0tLS0tLS0tLS0tLSAqLworc3RhdGljIHVpbnQgc2F2ZWRfbHZ0cGNbTlJfQ1BVU107CisKK3ZvaWQgX19pbml0IGx2dHBjX2FwaWNfc2V0dXAodm9pZCAqIGR1bW15KQoreworCXVpbnQgdmFsOworCisJLyogc2V0IHVwIExWVFBDIGFzIHdlIG5lZWQgaXQgKi8KKwkvKiBJQTMyIFYzLCBGaWd1cmUgNy44ICovCisJdmFsID0gYXBpY19yZWFkKEFQSUNfTFZUUEMpOworCXNhdmVkX2x2dHBjW29wX2NwdV9pZCgpXSA9IHZhbDsKKwkvKiBhbGxvdyBQQyBvdmVyZmxvdyBpbnRlcnJ1cHRzICovCisJdmFsICY9IH5BUElDX0xWVF9NQVNLRUQ7CisJLyogc2V0IGRlbGl2ZXJ5IHRvIE5NSSAqLworCXZhbCA9IFNFVF9BUElDX0RFTElWRVJZX01PREUodmFsLCBBUElDX01PREVfTk1JKTsKKwlhcGljX3dyaXRlKEFQSUNfTFZUUEMsIHZhbCk7Cit9CisKKy8qIG5vdCBzYWZlIHRvIG1hcmsgYXMgX19leGl0IHNpbmNlIHVzZWQgZnJvbSBfX2luaXQgY29kZSAqLwordm9pZCBsdnRwY19hcGljX3Jlc3RvcmUodm9pZCAqIGR1bW15KQoreworCS8qIHJlc3RvcmluZyBBUElDX0xWVFBDIGNhbiB0cmlnZ2VyIGFuIGFwaWMgZXJyb3IgYmVjYXVzZSB0aGUgZGVsaXZlcnkKKwkgKiBtb2RlIGFuZCB2ZWN0b3IgbnIgY29tYmluYXRpb24gY2FuIGJlIGlsbGVnYWwuIFRoYXQncyBieSBkZXNpZ246IG9uCisJICogcG93ZXIgb24gYXBpYyBsdnQgY29udGFpbiBhIHplcm8gdmVjdG9yIG5yIHdoaWNoIGFyZSBsZWdhbCBvbmx5IGZvcgorCSAqIE5NSSBkZWxpdnJleSBtb2RlLiBTbyBpbmhpYml0IGFwaWMgZXJyIGJlZm9yZSByZXN0b3JpbmcgbHZ0cGMKKwkgKi8KKwl1aW50IHYgPSBhcGljX3JlYWQoQVBJQ19MVlRFUlIpOworCWFwaWNfd3JpdGUoQVBJQ19MVlRFUlIsIHYgfCBBUElDX0xWVF9NQVNLRUQpOworCWFwaWNfd3JpdGUoQVBJQ19MVlRQQywgc2F2ZWRfbHZ0cGNbb3BfY3B1X2lkKCldKTsKKwlhcGljX3dyaXRlKEFQSUNfTFZURVJSLCB2KTsKK30KKworc3RhdGljIGludCBfX2luaXQgZW5hYmxlX2FwaWModm9pZCkKK3sKKwl1aW50IG1zcl9sb3csIG1zcl9oaWdoOworCXVpbnQgdmFsOworCisJLyogZW5hYmxlIGxvY2FsIEFQSUMgdmlhIE1TUi4gRm9yZ2V0dGluZyB0aGlzIGlzIGEgZnVuIHdheSB0bworCSAqIGxvY2sgdGhlIGJveC4gQnV0IHdlIGhhdmUgdG8gaG9wZSB0aGlzIGlzIGFsbG93ZWQgaWYgdGhlIEFQSUMKKwkgKiBoYXMgYWxyZWFkeSBiZWVuIGVuYWJsZWQuCisJICoKKwkgKiBJQTMyIFYzLCA3LjQuMiAqLworCXJkbXNyKE1TUl9JQTMyX0FQSUNCQVNFLCBtc3JfbG93LCBtc3JfaGlnaCk7CisJaWYgKChtc3JfbG93ICYgKDEgPDwgMTEpKSA9PSAwKQorCQl3cm1zcihNU1JfSUEzMl9BUElDQkFTRSwgbXNyX2xvdyB8ICgxIDw8IDExKSwgbXNyX2hpZ2gpOworCisJLyogZXZlbiBpZiB0aGUgYXBpYyBpcyB1cCB3ZSBtdXN0IGNoZWNrIGZvciBhIGdvb2QgQVBJQyAqLworCisJLyogSUEzMiBWMywgNy40LjE1ICovCisJdmFsID0gYXBpY19yZWFkKEFQSUNfTFZSKTsKKwlpZiAoIUFQSUNfSU5URUdSQVRFRChHRVRfQVBJQ19WRVJTSU9OKHZhbCkpKQorCQlnb3RvIG5vdF9sb2NhbF9hcGljOworCisJLyogTFZUMCxMVlQxLExWVFQsTFZUUEMgKi8KKwlpZiAoR0VUX0FQSUNfTUFYTFZUKGFwaWNfcmVhZChBUElDX0xWUikpIDwgNCkKKwkJZ290byBub3RfbG9jYWxfYXBpYzsKKworCS8qIElBMzIgVjMsIDcuNC4xNC4xICovCisJdmFsID0gYXBpY19yZWFkKEFQSUNfU1BJVik7CisJaWYgKCEodmFsICYgQVBJQ19TUElWX0FQSUNfRU5BQkxFRCkpCisJCWFwaWNfd3JpdGUoQVBJQ19TUElWLCB2YWwgfCBBUElDX1NQSVZfQVBJQ19FTkFCTEVEKTsKKworCXJldHVybiAhISh2YWwgJiBBUElDX1NQSVZfQVBJQ19FTkFCTEVEKTsKKworbm90X2xvY2FsX2FwaWM6CisJLyogZGlzYWJsZSB0aGUgYXBpYyBvbmx5IGlmIGl0IHdhcyBkaXNhYmxlZCAqLworCWlmICgobXNyX2xvdyAmICgxIDw8IDExKSkgPT0gMCkKKwkJd3Jtc3IoTVNSX0lBMzJfQVBJQ0JBU0UsIG1zcl9sb3cgJiB+KDEgPDwgMTEpLCBtc3JfaGlnaCk7CisKKwlwcmludGsoS0VSTl9FUlIgIm9wcm9maWxlOiBubyBzdWl0YWJsZSBsb2NhbCBBUElDLiBGYWxsaW5nIGJhY2sgdG8gUlRDIG1vZGUuXG4iKTsKKwlyZXR1cm4gLUVOT0RFVjsKK30KKworc3RhdGljIHZvaWQgX19pbml0IGRvX2FwaWNfc2V0dXAodm9pZCkKK3sKKwl1aW50IHZhbDsKKworCWxvY2FsX2lycV9kaXNhYmxlKCk7CisKKwl2YWwgPSBBUElDX0xWVF9MRVZFTF9UUklHR0VSOworCXZhbCA9IFNFVF9BUElDX0RFTElWRVJZX01PREUodmFsLCBBUElDX01PREVfRVhJTlQpOworCWFwaWNfd3JpdGUoQVBJQ19MVlQwLCB2YWwpOworCisJLyogZWRnZSB0cmlnZ2VyZWQsIElBIDcuNC4xMSAqLworCXZhbCA9IFNFVF9BUElDX0RFTElWRVJZX01PREUoMCwgQVBJQ19NT0RFX05NSSk7CisJYXBpY193cml0ZShBUElDX0xWVDEsIHZhbCk7CisKKwkvKiBjbGVhciBlcnJvciByZWdpc3RlciAqLworCS8qIElBMzIgVjMsIDcuNC4xNyAqLworCS8qIFBIRSBtdXN0IGJlIGNsZWFyZWQgYWZ0ZXIgdW5tYXNraW5nIGJ5IGEgYmFjay10by1iYWNrIHdyaXRlLAorCSAqIGJ1dCBpdCBpcyBwcm9iYWJseSBvayBiZWNhdXNlIHdlIG1hc2sgb25seSwgdGhlIEVTUiBpcyBub3QKKwkgKiB1cGRhdGVkIGlzIHRoaXMgYSByZWFsIHByb2JsZW0gPyAqLworCWFwaWNfd3JpdGUoQVBJQ19FU1IsIDApOworCisJLyogbWFzayBlcnJvciBpbnRlcnJ1cHQgKi8KKwkvKiBJQTMyIFYzLCBGaWd1cmUgNy44ICovCisJdmFsID0gYXBpY19yZWFkKEFQSUNfTFZURVJSKTsKKwl2YWwgfD0gQVBJQ19MVlRfTUFTS0VEOworCWFwaWNfd3JpdGUoQVBJQ19MVlRFUlIsIHZhbCk7CisKKwkvKiBzZXR1cCB0aW1lciB2ZWN0b3IgKi8KKwkvKiBJQTMyIFYzLCA3LjQuOCAqLworCWFwaWNfd3JpdGUoQVBJQ19MVlRULCBBUElDX1NFTkRfUEVORElORyB8IDB4MzEpOworCisJLyogRGl2aWRlIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgKi8KKwkvKiBQSEUgdGhlIGFwaWMgY2xvY2sgaXMgYmFzZWQgb24gdGhlIEZTQi4gVGhpcyBzaG91bGQgb25seQorCSAqIGNoYW5nZWQgd2l0aCBhIGNhbGlicmF0aW9uIG1ldGhvZC4gICovCisJdmFsID0gQVBJQ19URFJfRElWXzE7CisJYXBpY193cml0ZShBUElDX1REQ1IsIHZhbCk7CisKKwlsb2NhbF9pcnFfZW5hYmxlKCk7Cit9CisKKy8qIGRvZXMgdGhlIENQVSBoYXZlIGEgbG9jYWwgQVBJQyA/ICovCitzdGF0aWMgaW50IF9faW5pdCBjaGVja19jcHVfb2sodm9pZCkKK3sKKwlpZiAoc3lzY3RsLmNwdV90eXBlICE9IENQVV9QUFJPICYmCisJCXN5c2N0bC5jcHVfdHlwZSAhPSBDUFVfUElJICYmCisJCXN5c2N0bC5jcHVfdHlwZSAhPSBDUFVfUElJSSAmJgorCQlzeXNjdGwuY3B1X3R5cGUgIT0gQ1BVX0FUSExPTiAmJgorCQlzeXNjdGwuY3B1X3R5cGUgIT0gQ1BVX0hBTU1FUiAmJgorCQlzeXNjdGwuY3B1X3R5cGUgIT0gQ1BVX1A0ICYmCisJCXN5c2N0bC5jcHVfdHlwZSAhPSBDUFVfUDRfSFQyKQorCQlyZXR1cm4gMDsKKworCXJldHVybiAxOworfQorCitpbnQgX19pbml0IGFwaWNfc2V0dXAodm9pZCkKK3sKKwl1MzIgdmFsOworCisJaWYgKCFjaGVja19jcHVfb2soKSkKKwkJZ290byBub2RldjsKKworCWZpeG1hcF9zZXR1cCgpOworCisJc3dpdGNoIChlbmFibGVfYXBpYygpKSB7CisJCWNhc2UgMDoKKwkJCWRvX2FwaWNfc2V0dXAoKTsKKwkJCXZhbCA9IGFwaWNfcmVhZChBUElDX0VTUik7CisJCQlwcmludGsoS0VSTl9JTkZPICJvcHJvZmlsZTogZW5hYmxlZCBsb2NhbCBBUElDLiBFcnIgY29kZSAlLjA4eFxuIiwgdmFsKTsKKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQlwcmludGsoS0VSTl9JTkZPICJvcHJvZmlsZTogQVBJQyB3YXMgYWxyZWFkeSBlbmFibGVkXG4iKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZ290byBub2RldjsKKwl9CisKKwlsdnRwY19hcGljX3NldHVwKE5VTEwpOworCXJldHVybiAwOworbm9kZXY6CisJcHJpbnRrKEtFUk5fV0FSTklORyAiWW91ciBDUFUgZG9lcyBub3QgaGF2ZSBhIGxvY2FsIEFQSUMsIGUuZy4gIgorCSAgICAgICAibW9iaWxlIFA2LiBGYWxsaW5nIGJhY2sgdG8gUlRDIG1vZGUuXG4iKTsKKwlyZXR1cm4gLUVOT0RFVjsKK30KKwordm9pZCBhcGljX3Jlc3RvcmUodm9pZCkKK3sKKwlmaXhtYXBfcmVzdG9yZSgpOworfQpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvbW9kdWxlL3g4Ni9vcF9hcGljLmggYi9vcHJvZmlsZS0wLjkuNy9tb2R1bGUveDg2L29wX2FwaWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZGFlMzM2Ci0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvbW9kdWxlL3g4Ni9vcF9hcGljLmgKQEAgLTAsMCArMSw3MSBAQAorLyoqCisgKiBAZmlsZSBvcF9hcGljLmgKKyAqIHg4NiBhcGljLCBubWksIHBlcmYgY291bnRlciBkZWNsYXJhdGlvbgorICoKKyAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDIgT1Byb2ZpbGUgYXV0aG9ycworICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKKyAqCisgKiBAYXV0aG9yIEpvaG4gTGV2b24KKyAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQorICogQGF1dGhvciBEYXZlIEpvbmVzCisgKiBAYXV0aG9yIEdyYXlkb24gSG9hcmUKKyAqLworCisjaWZuZGVmIE9QX0FQSUNfSAorI2RlZmluZSBPUF9BUElDX0gKKworI2luY2x1ZGUgImFwaWNfY29tcGF0LmgiCisKKyNkZWZpbmUgTk1JX0dBVEVfVFlQRSAxNAorI2RlZmluZSBOTUlfVkVDVE9SX05VTSAyCisjZGVmaW5lIE5NSV9EUExfTEVWRUwgMAorCisKKy8qIGNvcGllZCBmcm9tIGtlcm5lbCAyLjQuMTkgOiBhcmNoL2kzODYvdHJhcHMuYyAqLworCitzdHJ1Y3QgZ2F0ZV9zdHJ1Y3QgeworCXUzMiBhOworCXUzMiBiOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworI2RlZmluZSBfc2V0X2dhdGUoZ2F0ZV9hZGRyLCB0eXBlLCBkcGwsIGFkZHIpIFwKK2RvIHsgXAorCWludCBfX2QwLCBfX2QxOyBcCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJtb3Z3ICUlZHgsICUlYXhcblx0IiBcCisJIm1vdncgJTQsICUlZHhcblx0IiBcCisJIm1vdmwgJSVlYXgsICUwXG5cdCIgXAorCSJtb3ZsICUlZWR4LCAlMSIgXAorCToiPW0iICgqKChsb25nICopIChnYXRlX2FkZHIpKSksIFwKKwkgIj1tIiAoKigxKyhsb25nICopIChnYXRlX2FkZHIpKSksICI9JmEiIChfX2QwKSwgIj0mZCIgKF9fZDEpIFwKKwk6ImkiICgoc2hvcnQpICgweDgwMDArKGRwbCA8PCAxMykrKHR5cGUgPDwgOCkpKSwgXAorCSAiMyIgKChjaGFyICopIChhZGRyKSksICIyIiAoX19LRVJORUxfQ1MgPDwgMTYpKTsgXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBTRVRfTk1JX0dBVEUJXAorCV9zZXRfZ2F0ZSgmZGVzY3IuYmFzZVtOTUlfVkVDVE9SX05VTV0sIE5NSV9HQVRFX1RZUEUsIE5NSV9EUExfTEVWRUwsICZvcF9ubWkpOworCisjZGVmaW5lIHN0b3JlX2lkdChhZGRyKSBcCisJZG8geyBcCisJCV9fYXNtX18gX192b2xhdGlsZV9fICgic2lkdCAlMCIgXAorCQkJOiAiPW0iIChhZGRyKSBcCisJCQk6IDogIm1lbW9yeSIpOyBcCisJfSB3aGlsZSAoMCkKKyAKK3N0cnVjdCBfZGVzY3IgeyAKKwl1MTYgbGltaXQ7IAorCXN0cnVjdCBnYXRlX3N0cnVjdCAqIGJhc2U7IAorfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fKSk7CisKK3ZvaWQgbHZ0cGNfYXBpY19zZXR1cCh2b2lkICogZHVtbXkpOwordm9pZCBsdnRwY19hcGljX3Jlc3RvcmUodm9pZCAqIGR1bW15KTsKK2ludCBhcGljX3NldHVwKHZvaWQpOwordm9pZCBhcGljX3Jlc3RvcmUodm9pZCk7Cit2b2lkIGluc3RhbGxfbm1pKHZvaWQpOwordm9pZCByZXN0b3JlX25taSh2b2lkKTsKKwordm9pZCBmaXhtYXBfc2V0dXAodm9pZCk7Cit2b2lkIGZpeG1hcF9yZXN0b3JlKHZvaWQpOworCithc21saW5rYWdlIHZvaWQgb3Bfbm1pKHZvaWQpOworCisjZW5kaWYgLyogT1BfQVBJQ19IICovCmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9tb2R1bGUveDg2L29wX2FyY2guaCBiL29wcm9maWxlLTAuOS43L21vZHVsZS94ODYvb3BfYXJjaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliZjQxZTkKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9tb2R1bGUveDg2L29wX2FyY2guaApAQCAtMCwwICsxLDI0IEBACisvKioKKyAqIEBmaWxlIG9wX2FyY2guaAorICogZGVmaW5lcyByZWdpc3RlcnMgZm9yIHg4NgorICoKKyAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDIgT1Byb2ZpbGUgYXV0aG9ycworICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKKyAqCisgKiBAYXV0aG9yIFdpbGwgQ29oZW4KKyAqLworCisjaWZuZGVmIE9QX0FSQ0hfSAorI2RlZmluZSBPUF9BUkNIX0gKKworI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKworLyogSG93IHRvIGFjY2VzcyB0aGUgcHJvY2Vzc29yJ3MgaW5zdHJ1Y3Rpb24gcG9pbnRlciAqLworI2lmbmRlZiBpbnN0cnVjdGlvbl9wb2ludGVyCisjZGVmaW5lIGluc3RydWN0aW9uX3BvaW50ZXIocmVncykgKChyZWdzKS0+ZWlwKQorI2VuZGlmCisKKy8qIEJpdCBpbiBwcm9jZXNzb3IncyBzdGF0dXMgcmVnaXN0ZXIgZm9yIGludGVycnVwdCBtYXNraW5nICovCisjZGVmaW5lIElSUV9FTkFCTEVEKHJlZ3MpCSgocmVncyktPmVmbGFncyAmIElGX01BU0spCisKKyNlbmRpZiAvKiBPUF9BUkNIX0ggKi8KZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L21vZHVsZS94ODYvb3BfZml4bWFwLmMgYi9vcHJvZmlsZS0wLjkuNy9tb2R1bGUveDg2L29wX2ZpeG1hcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwYWRmOTQKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9tb2R1bGUveDg2L29wX2ZpeG1hcC5jCkBAIC0wLDAgKzEsMjAwIEBACisvKioKKyAqIEBmaWxlIG9wX2ZpeG1hcC5jCisgKiBIb3JyaWJsZSBoYWNrcyBmb3IgY29tcGF0aWJpbGl0eSdzIHNha2UuCisgKiBCYXNlZCBpbiBwYXJ0IG9uIGFyY2gvaTM4Ni9rZXJuZWwvbXBwYXJzZS5jCisgKgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMiBPUHJvZmlsZSBhdXRob3JzCisgKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORworICoKKyAqIEBhdXRob3IgSm9obiBMZXZvbgorICogQGF1dGhvciBQaGlsaXBwZSBFbGllCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKworI2luY2x1ZGUgIm9wcm9maWxlLmgiCisjaW5jbHVkZSAiYXBpY19jb21wYXQuaCIKKworI2lmbmRlZiBjcHVfaGFzX3BnZQorI2lmIFZfQkVGT1JFKDIsIDQsIDApCisjZGVmaW5lIGNwdV9oYXNfcGdlICh0ZXN0X2JpdChYODZfRkVBVFVSRV9QR0UsICZib290X2NwdV9kYXRhLng4Nl9jYXBhYmlsaXR5KSkgCisjZWxzZQorI2RlZmluZSBjcHVfaGFzX3BnZSAodGVzdF9iaXQoWDg2X0ZFQVRVUkVfUEdFLCBib290X2NwdV9kYXRhLng4Nl9jYXBhYmlsaXR5KSkKKyNlbmRpZgorI2VuZGlmCisKK3Vuc2lnbmVkIGxvbmcgdmlydF9hcGljX2Jhc2U7CisKKy8qIHNvbWUgc3RhdGljIGNvbW1lbnRlZCBvdXQgdG8gYXZvaWQgd2FybmluZywgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQKKyAqIGluIGV4YWN0bHkgd2hpY2ggY2lyY3Vtc3RhbmNlcyB3ZSBuZWVkIHRoaXMgZnVuY3Rpb24gaXMgdG9vIHByb25lCisgKiBlcnJvciB0byBiZSBtYWRlIHcvbyBhIGZ1bGwgcmVidWlsZCBvZiBzdXBwb3J0ZWQga2VybmVsIHZlcnNpb24gKi8KKy8qIGhvdyBhYm91dCBfX2F0dHJpYnV0ZV9fKF9fdW51c2VkX18pIHRoZW4gPyAqLworCisvKiBGSVhNRSBpcyB0aGlzIGNvbW1lbnQgcmlnaHQgPyAqLworLyogV2UgZG9uJ3QgdGFrZSBjYXJlIGFib3V0IGxvY2tpbmcgbW0tPnBhZ2VfdGFibGVfbG9jayBiZWNhdXNlIHRoaXMgaXMKKyAqIG9ubHkgbmVlZGVkIG9uIFNNUCBhbmQgb24gU01QIHdlIGhhdmUgYWxyZWFkeSBhIHNlbnNpYmxlIHNldHVwICovCisKKy8qc3RhdGljKi8gdm9pZCBzZXRfcHRlX3BoeXModWxvbmcgdmFkZHIsIHVsb25nIHBoeXMpCit7CisJcGdwcm90X3QgcHJvdDsKKwlwZ2RfdCAqIHBnZDsKKwlwbWRfdCAqIHBtZDsKKwlwdGVfdCAqIHB0ZTsKKworCXBnZCA9IHBnZF9vZmZzZXRfayh2YWRkcik7CisJcG1kID0gcG1kX29mZnNldChwZ2QsIHZhZGRyKTsKKwlwdGUgPSBwdGVfb2Zmc2V0KHBtZCwgdmFkZHIpOworCXByb3QgPSBQQUdFX0tFUk5FTDsKKwkvKiB3aGVuICFDT05GSUdfWDg2X0xPQ0FMX0FQSUMgd2UgY2FuJ3QgcmVseSBvbiBubyBjYWNoZSBmbGFnIHNldCAqLworCXBncHJvdF92YWwocHJvdCkgfD0gX1BBR0VfUENEOworCWlmIChjcHVfaGFzX3BnZSkKKwkJcGdwcm90X3ZhbChwcm90KSB8PSBfUEFHRV9HTE9CQUw7CisJc2V0X3B0ZShwdGUsIG1rX3B0ZV9waHlzKHBoeXMsIHByb3QpKTsKKwlfX2ZsdXNoX3RsYl9vbmUodmFkZHIpOworfQorCisvKnN0YXRpYyovIHZvaWQgYWxsb2NfZml4bWFwKHZvaWQpCit7CisJLyogZGlydHkgaGFjayA6LyAqLworCXZpcnRfYXBpY19iYXNlID0gKHVsb25nKXZtYWxsb2MoNDA5Nik7CisJc2V0X3B0ZV9waHlzKHZpcnRfYXBpY19iYXNlLCBBUElDX0RFRkFVTFRfUEhZU19CQVNFKTsKK30KKworLypzdGF0aWMqLyB2b2lkIGZyZWVfZml4bWFwKHZvaWQpCit7CisJdWxvbmcgdmFkZHI7CisJcGdkX3QgKiBwZ2Q7CisJcG1kX3QgKiBwbWQ7CisJcHRlX3QgKiBwdGU7CisKKwl2YWRkciA9IHZpcnRfYXBpY19iYXNlOworCWlmICghdmFkZHIpCisJCXJldHVybjsKKworCXBnZCA9IHBnZF9vZmZzZXRfayh2YWRkcik7CisJaWYgKCFwZ2QpCisJCXJldHVybjsKKworCXBtZCA9IHBtZF9vZmZzZXQocGdkLCB2YWRkcik7CisJaWYgKCFwbWQpCisJCXJldHVybjsKKworCXB0ZSA9IHB0ZV9vZmZzZXQocG1kLCB2YWRkcik7CisJaWYgKCFwdGUpCisJCXJldHVybjsKKworCS8qIEZJWE1FOiBpcyB0aGlzIHRoZSByaWdodCB3YXkgKi8KKwlwdGVfY2xlYXIocHRlKTsKKwlfX2ZsdXNoX3RsYl9vbmUodmFkZHIpOworCisJdmZyZWUoKHZvaWQqKXZpcnRfYXBpY19iYXNlKTsKK30KKworLyoKKyAqIE1ha2Ugc3VyZSB3ZSBjYW4gYWNjZXNzIHRoZSBBUElDLiBTb21lIGtlcm5lbCB2ZXJzaW9ucyBjcmVhdGUKKyAqIGEgbWVhbmluZ2xlc3MgemVyby1wYWdlIG1hcHBpbmcgZm9yIHRoZSBsb2NhbCBBUElDOiB3ZSBtdXN0CisgKiBkZXRlY3QgdGhpcyBjYXNlIGFuZCByZXNldCBpdC4KKyAqCisgKiBTb21lIGtlcm5lbCB2ZXJzaW9ucy9jb25maWdzIHdvbid0IG1hcCB0aGUgQVBJQyBhdCBhbGwsIGluCisgKiB3aGljaCBjYXNlIHdlIG5lZWQgdG8gaGFjayBpdCBvdXJzZWx2ZXMuCisgKi8KK3ZvaWQgZml4bWFwX3NldHVwKHZvaWQpCit7CisjaWYgVl9CRUZPUkUoMiwgNCwgMTApCisjaWYgZGVmaW5lZChDT05GSUdfWDg2X0xPQ0FMX0FQSUMpCisJc3RhdGljIGludCBmaW5kX2ludGVsX3NtcCh2b2lkKTsKKworCWlmICghZmluZF9pbnRlbF9zbXAoKSkgeworCQlzZXRfcHRlX3BoeXMoX19maXhfdG9fdmlydChGSVhfQVBJQ19CQVNFKSwKKwkJCUFQSUNfREVGQVVMVF9QSFlTX0JBU0UpOworCQlwcmludGsoS0VSTl9JTkZPICJvcHJvZmlsZTogcmVtYXBwaW5nIGxvY2FsIEFQSUMuXG4iKTsKKwl9CisjZWxzZQorCWFsbG9jX2ZpeG1hcCgpOworCXByaW50ayhLRVJOX0lORk8gIm9wcm9maWxlOiBtYXBwaW5nIEFQSUMuXG4iKTsKKyNlbmRpZiAvKiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMgKi8KKyNlbHNlCisjaWYgIWRlZmluZWQoQ09ORklHX1g4Nl9MT0NBTF9BUElDKQorCWFsbG9jX2ZpeG1hcCgpOworCXByaW50ayhLRVJOX0lORk8gIm9wcm9maWxlOiBtYXBwaW5nIEFQSUMuXG4iKTsKKyNlbmRpZgorI2VuZGlmCit9CisKK3ZvaWQgZml4bWFwX3Jlc3RvcmUodm9pZCkKK3sKKyNpZiBWX0JFRk9SRSgyLCA0LCAxMCkKKyNpZiBkZWZpbmVkKENPTkZJR19YODZfTE9DQUxfQVBJQykKKwkvKiBOb3RoaW5nIHRvIGRvICovCisjZWxzZQorCWZyZWVfZml4bWFwKCk7CisJcHJpbnRrKEtFUk5fSU5GTyAib3Byb2ZpbGU6IGZyZWVpbmcgQVBJQyBtYXBwaW5nLlxuIik7CisjZW5kaWYgLyogQ09ORklHX1g4Nl9MT0NBTF9BUElDICovCisjZWxzZQorI2lmICFkZWZpbmVkKENPTkZJR19YODZfTE9DQUxfQVBJQykKKwlmcmVlX2ZpeG1hcCgpOworCXByaW50ayhLRVJOX0lORk8gIm9wcm9maWxlOiBmcmVlaW5nIEFQSUMgbWFwcGluZy5cbiIpOworI2VuZGlmCisjZW5kaWYKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLSBNUCB0YWJsZSBjb2RlIC0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWYgVl9CRUZPUkUoMiwgNCwgMTApICYmIGRlZmluZWQoQ09ORklHX1g4Nl9MT0NBTF9BUElDKQorCitzdGF0aWMgaW50IF9faW5pdCBtcGZfY2hlY2tzdW0odW5zaWduZWQgY2hhciAqIG1wLCBpbnQgbGVuKQoreworCWludCBzdW0gPSAwOworCisJd2hpbGUgKGxlbi0tKQorCQlzdW0gKz0gKm1wKys7CisKKwlyZXR1cm4gc3VtICYgMHhGRjsKK30KKworc3RhdGljIGludCBfX2luaXQgbXBmX3RhYmxlX29rKHN0cnVjdCBpbnRlbF9tcF9mbG9hdGluZyAqIG1wZiwgdW5zaWduZWQgbG9uZyAqIGJwKQoreworCWlmICgqYnAgIT0gU01QX01BR0lDX0lERU5UKQorCQlyZXR1cm4gMDsKKwlpZiAobXBmLT5tcGZfbGVuZ3RoICE9IDEpCisJCXJldHVybiAwOworCWlmIChtcGZfY2hlY2tzdW0oKHVuc2lnbmVkIGNoYXIgKilicCwgMTYpKQorCQlyZXR1cm4gMDsKKworCXJldHVybiAobXBmLT5tcGZfc3BlY2lmaWNhdGlvbiA9PSAxIHx8IG1wZi0+bXBmX3NwZWNpZmljYXRpb24gPT0gNCk7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IHNtcF9zY2FuX2NvbmZpZyAodW5zaWduZWQgbG9uZyBiYXNlLCB1bnNpZ25lZCBsb25nIGxlbmd0aCkKK3sKKwl1bnNpZ25lZCBsb25nICogYnAgPSBwaHlzX3RvX3ZpcnQoYmFzZSk7CisJc3RydWN0IGludGVsX21wX2Zsb2F0aW5nICogbXBmOworCisJd2hpbGUgKGxlbmd0aCA+IDApIHsKKwkJbXBmID0gKHN0cnVjdCBpbnRlbF9tcF9mbG9hdGluZyAqKWJwOworCQlpZiAobXBmX3RhYmxlX29rKG1wZiwgYnApKQorCQkJcmV0dXJuIDE7CisJCWJwICs9IDQ7CisJCWxlbmd0aCAtPSAxNjsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGZpbmRfaW50ZWxfc21wKHZvaWQpCit7CisJdW5zaWduZWQgaW50IGFkZHJlc3M7CisKKwlpZiAoc21wX3NjYW5fY29uZmlnKDB4MCwgMHg0MDApIHx8CisJCXNtcF9zY2FuX2NvbmZpZyg2MzkqMHg0MDAsIDB4NDAwKSB8fAorCQlzbXBfc2Nhbl9jb25maWcoMHhGMDAwMCwgMHgxMDAwMCkpCisJCXJldHVybiAxOworCisJYWRkcmVzcyA9ICoodW5zaWduZWQgc2hvcnQgKilwaHlzX3RvX3ZpcnQoMHg0MEUpOworCWFkZHJlc3MgPDw9IDQ7CisJcmV0dXJuIHNtcF9zY2FuX2NvbmZpZyhhZGRyZXNzLCAweDEwMDApOworfQorCisjZW5kaWYgLyogVl9CRUZPUkUoMiw0LDEwKSAmJiBkZWZpbmVkKENPTkZJR19YODZfTE9DQUxfQVBJQykgKi8KZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L21vZHVsZS94ODYvb3BfbW9kZWxfYXRobG9uLmMgYi9vcHJvZmlsZS0wLjkuNy9tb2R1bGUveDg2L29wX21vZGVsX2F0aGxvbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1ZTM4YTcKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9tb2R1bGUveDg2L29wX21vZGVsX2F0aGxvbi5jCkBAIC0wLDAgKzEsMTM5IEBACisvKioKKyAqIEBmaWxlIG9wX21vZGVsX2F0aGxvbi5oCisgKiBhdGhsb24gLyBLNyBtb2RlbC1zcGVjaWZpYyBNU1Igb3BlcmF0aW9ucworICoKKyAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDIgT1Byb2ZpbGUgYXV0aG9ycworICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKKyAqCisgKiBAYXV0aG9yIEpvaG4gTGV2b24KKyAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQorICogQGF1dGhvciBHcmF5ZG9uIEhvYXJlCisgKi8KKworI2luY2x1ZGUgIm9wX3g4Nl9tb2RlbC5oIgorI2luY2x1ZGUgIm9wX2FyY2guaCIKKyNpbmNsdWRlICJvcF9tc3IuaCIKKworI2RlZmluZSBOVU1fQ09VTlRFUlMgNAorI2RlZmluZSBOVU1fQ09OVFJPTFMgNAorCisjZGVmaW5lIENUUl9SRUFEKGwsIGgsIG1zcnMsIGMpIGRvIHtyZG1zcihtc3JzLT5jb3VudGVycy5hZGRyc1soYyldLCAobCksIChoKSk7fSB3aGlsZSAoMCkKKyNkZWZpbmUgQ1RSX1dSSVRFKGwsIG1zcnMsIGMpIGRvIHt3cm1zcihtc3JzLT5jb3VudGVycy5hZGRyc1soYyldLCAtKHUzMikobCksIDB4ZmZmZik7fSB3aGlsZSAoMCkKKyNkZWZpbmUgQ1RSX09WRVJGTE9XRUQobikgKCEoKG4pICYgKDFVIDw8IDMxKSkpCisKKyNkZWZpbmUgQ1RSTF9SRUFEKGwsIGgsIG1zcnMsIGMpIGRvIHtyZG1zcihtc3JzLT5jb250cm9scy5hZGRyc1soYyldLCAobCksIChoKSk7fSB3aGlsZSAoMCkKKyNkZWZpbmUgQ1RSTF9XUklURShsLCBoLCBtc3JzLCBjKSBkbyB7d3Jtc3IobXNycy0+Y29udHJvbHMuYWRkcnNbKGMpXSwgKGwpLCAoaCkpO30gd2hpbGUgKDApCisjZGVmaW5lIENUUkxfU0VUX0FDVElWRShuKSAobiB8PSAoMSA8PCAyMikpCisjZGVmaW5lIENUUkxfU0VUX0lOQUNUSVZFKG4pIChuICY9IH4oMSA8PCAyMikpCisjZGVmaW5lIENUUkxfQ0xFQVIoeCkgKHggJj0gKDEgPDwgMjEpKQorI2RlZmluZSBDVFJMX1NFVF9FTkFCTEUodmFsKSAodmFsIHw9IDEgPDwgMjApCisjZGVmaW5lIENUUkxfU0VUX1VTUih2YWwsIHUpICh2YWwgfD0gKCh1ICYgMSkgPDwgMTYpKQorI2RlZmluZSBDVFJMX1NFVF9LRVJOKHZhbCwgaykgKHZhbCB8PSAoKGsgJiAxKSA8PCAxNykpCisjZGVmaW5lIENUUkxfU0VUX1VNKHZhbCwgbSkgKHZhbCB8PSAobSA8PCA4KSkKKyNkZWZpbmUgQ1RSTF9TRVRfRVZFTlQodmFsLCBlKSAodmFsIHw9IGUpCisKKyAKK3N0YXRpYyB2b2lkIGF0aGxvbl9maWxsX2luX2FkZHJlc3NlcyhzdHJ1Y3Qgb3BfbXNycyAqIGNvbnN0IG1zcnMpCit7CisJbXNycy0+Y291bnRlcnMuYWRkcnNbMF0gPSBNU1JfSzdfUEVSRkNUUjA7CisJbXNycy0+Y291bnRlcnMuYWRkcnNbMV0gPSBNU1JfSzdfUEVSRkNUUjE7CisJbXNycy0+Y291bnRlcnMuYWRkcnNbMl0gPSBNU1JfSzdfUEVSRkNUUjI7CisJbXNycy0+Y291bnRlcnMuYWRkcnNbM10gPSBNU1JfSzdfUEVSRkNUUjM7CisKKwltc3JzLT5jb250cm9scy5hZGRyc1swXSA9IE1TUl9LN19FVk5UU0VMMDsKKwltc3JzLT5jb250cm9scy5hZGRyc1sxXSA9IE1TUl9LN19FVk5UU0VMMTsKKwltc3JzLT5jb250cm9scy5hZGRyc1syXSA9IE1TUl9LN19FVk5UU0VMMjsKKwltc3JzLT5jb250cm9scy5hZGRyc1szXSA9IE1TUl9LN19FVk5UU0VMMzsKK30KKworIAorc3RhdGljIHZvaWQgYXRobG9uX3NldHVwX2N0cnMoc3RydWN0IG9wX21zcnMgY29uc3QgKiBjb25zdCBtc3JzKQoreworCXVpbnQgbG93LCBoaWdoOworCWludCBpOworCisJLyogY2xlYXIgYWxsIGNvdW50ZXJzICovCisJZm9yIChpID0gMCA7IGkgPCBOVU1fQ09OVFJPTFM7ICsraSkgeworCQlDVFJMX1JFQUQobG93LCBoaWdoLCBtc3JzLCBpKTsKKwkJQ1RSTF9DTEVBUihsb3cpOworCQlDVFJMX1dSSVRFKGxvdywgaGlnaCwgbXNycywgaSk7CisJfQorCQorCS8qIGF2b2lkIGEgZmFsc2UgZGV0ZWN0aW9uIG9mIGN0ciBvdmVyZmxvd3MgaW4gTk1JIGhhbmRsZXIgKi8KKwlmb3IgKGkgPSAwOyBpIDwgTlVNX0NPVU5URVJTOyArK2kpCisJCUNUUl9XUklURSgxLCBtc3JzLCBpKTsKKworCS8qIGVuYWJsZSBhY3RpdmUgY291bnRlcnMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgTlVNX0NPVU5URVJTOyArK2kpIHsKKwkJaWYgKHN5c2N0bC5jdHJbaV0uZW5hYmxlZCkgeworCisJCQlDVFJfV1JJVEUoc3lzY3RsLmN0cltpXS5jb3VudCwgbXNycywgaSk7CisKKwkJCUNUUkxfUkVBRChsb3csIGhpZ2gsIG1zcnMsIGkpOworCQkJQ1RSTF9DTEVBUihsb3cpOworCQkJQ1RSTF9TRVRfRU5BQkxFKGxvdyk7CisJCQlDVFJMX1NFVF9VU1IobG93LCBzeXNjdGwuY3RyW2ldLnVzZXIpOworCQkJQ1RSTF9TRVRfS0VSTihsb3csIHN5c2N0bC5jdHJbaV0ua2VybmVsKTsKKwkJCUNUUkxfU0VUX1VNKGxvdywgc3lzY3RsLmN0cltpXS51bml0X21hc2spOworCQkJQ1RSTF9TRVRfRVZFTlQobG93LCBzeXNjdGwuY3RyW2ldLmV2ZW50KTsKKwkJCUNUUkxfV1JJVEUobG93LCBoaWdoLCBtc3JzLCBpKTsKKwkJfQorCX0KK30KKworCitzdGF0aWMgdm9pZCBhdGhsb25fY2hlY2tfY3Rycyh1aW50IGNvbnN0IGNwdSwgCisJCQkgICAgICBzdHJ1Y3Qgb3BfbXNycyBjb25zdCAqIGNvbnN0IG1zcnMsIAorCQkJICAgICAgc3RydWN0IHB0X3JlZ3MgKiBjb25zdCByZWdzKQoreworCXVpbnQgbG93LCBoaWdoOworCWludCBpOworCWZvciAoaSA9IDAgOyBpIDwgTlVNX0NPVU5URVJTOyArK2kpIHsKKwkJaWYgKHN5c2N0bC5jdHJbaV0uZW5hYmxlZCkgeworCQkJQ1RSX1JFQUQobG93LCBoaWdoLCBtc3JzLCBpKTsKKwkJCWlmIChDVFJfT1ZFUkZMT1dFRChsb3cpKSB7CisJCQkJb3BfZG9fcHJvZmlsZShjcHUsIGluc3RydWN0aW9uX3BvaW50ZXIocmVncyksIElSUV9FTkFCTEVEKHJlZ3MpLCBpKTsKKwkJCQlDVFJfV1JJVEUob3Byb2ZfZGF0YVtjcHVdLmN0cl9jb3VudFtpXSwgbXNycywgaSk7CisJCQl9CisJCX0KKwl9Cit9CisKKyAKK3N0YXRpYyB2b2lkIGF0aGxvbl9zdGFydChzdHJ1Y3Qgb3BfbXNycyBjb25zdCAqIGNvbnN0IG1zcnMpCit7CisJdWludCBsb3csIGhpZ2g7CisJaW50IGk7CisJZm9yIChpID0gMCA7IGkgPCBOVU1fQ09VTlRFUlMgOyArK2kpIHsKKwkJaWYgKHN5c2N0bC5jdHJbaV0uZW5hYmxlZCkgeworCQkJQ1RSTF9SRUFEKGxvdywgaGlnaCwgbXNycywgaSk7CisJCQlDVFJMX1NFVF9BQ1RJVkUobG93KTsKKwkJCUNUUkxfV1JJVEUobG93LCBoaWdoLCBtc3JzLCBpKTsKKwkJfQorCX0KK30KKworCitzdGF0aWMgdm9pZCBhdGhsb25fc3RvcChzdHJ1Y3Qgb3BfbXNycyBjb25zdCAqIGNvbnN0IG1zcnMpCit7CisJdWludCBsb3csIGhpZ2g7CisJaW50IGk7CisJZm9yIChpID0gMCA7IGkgPCBOVU1fQ09VTlRFUlMgOyArK2kpIHsKKwkJaWYgKHN5c2N0bC5jdHJbaV0uZW5hYmxlZCkgeworCQkJQ1RSTF9SRUFEKGxvdywgaGlnaCwgbXNycywgaSk7CisJCQlDVFJMX1NFVF9JTkFDVElWRShsb3cpOworCQkJQ1RSTF9XUklURShsb3csIGhpZ2gsIG1zcnMsIGkpOworCQl9CisJfQorfQorCisKK3N0cnVjdCBvcF94ODZfbW9kZWxfc3BlYyBjb25zdCBvcF9hdGhsb25fc3BlYyA9IHsKKwkubnVtX2NvdW50ZXJzID0gTlVNX0NPVU5URVJTLAorCS5udW1fY29udHJvbHMgPSBOVU1fQ09OVFJPTFMsCisJLmZpbGxfaW5fYWRkcmVzc2VzID0gJmF0aGxvbl9maWxsX2luX2FkZHJlc3NlcywKKwkuc2V0dXBfY3RycyA9ICZhdGhsb25fc2V0dXBfY3RycywKKwkuY2hlY2tfY3RycyA9ICZhdGhsb25fY2hlY2tfY3RycywKKwkuc3RhcnQgPSAmYXRobG9uX3N0YXJ0LAorCS5zdG9wID0gJmF0aGxvbl9zdG9wCit9OwpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvbW9kdWxlL3g4Ni9vcF9tb2RlbF9wNC5jIGIvb3Byb2ZpbGUtMC45LjcvbW9kdWxlL3g4Ni9vcF9tb2RlbF9wNC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0YzhlOTYKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9tb2R1bGUveDg2L29wX21vZGVsX3A0LmMKQEAgLTAsMCArMSw3MjcgQEAKKy8qKgorICogQGZpbGUgb3BfbW9kZWxfcDQuYworICogUDQgbW9kZWwtc3BlY2lmaWMgTVNSIG9wZXJhdGlvbnMKKyAqCisgKiBAcmVtYXJrIENvcHlyaWdodCAyMDAyIE9Qcm9maWxlIGF1dGhvcnMKKyAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCisgKgorICogQGF1dGhvciBHcmF5ZG9uIEhvYXJlCisgKi8KKworI2luY2x1ZGUgIm9wX3g4Nl9tb2RlbC5oIgorI2luY2x1ZGUgIm9wX21zci5oIgorI2luY2x1ZGUgIm9wX2FwaWMuaCIKKyNpbmNsdWRlICJvcF9hcmNoLmgiCisKKyNkZWZpbmUgTlVNX0VWRU5UUyAzOQorCisjZGVmaW5lIE5VTV9DT1VOVEVSU19OT05fSFQgOAorI2RlZmluZSBOVU1fRVNDUlNfTk9OX0hUIDQ1CisjZGVmaW5lIE5VTV9DQ0NSU19OT05fSFQgMTgKKyNkZWZpbmUgTlVNX0NPTlRST0xTX05PTl9IVCAoTlVNX0VTQ1JTX05PTl9IVCArIE5VTV9DQ0NSU19OT05fSFQpCisKKyNkZWZpbmUgTlVNX0NPVU5URVJTX0hUMiA0CisjZGVmaW5lIE5VTV9FU0NSU19IVDIgMjMKKyNkZWZpbmUgTlVNX0NDQ1JTX0hUMiA5CisjZGVmaW5lIE5VTV9DT05UUk9MU19IVDIgKE5VTV9FU0NSU19IVDIgKyBOVU1fQ0NDUlNfSFQyKQorCitzdGF0aWMgdW5zaWduZWQgaW50IG51bV9jb3VudGVycyA9IE5VTV9DT1VOVEVSU19OT05fSFQ7CisKKworLyogdGhpcyBoYXMgdG8gYmUgY2hlY2tlZCBkeW5hbWljYWxseSBzaW5jZSB0aGUKKyAgIGh5cGVyLXRocmVhZGVkbmVzcyBvZiBhIGNoaXAgaXMgZGlzY292ZXJlZCBhdAorICAga2VybmVsIGJvb3QtdGltZS4gKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXR1cF9udW1fY291bnRlcnModm9pZCkKK3sKKyNpZmRlZiBIVF9TVVBQT1JUCisJaWYgKHNtcF9udW1fc2libGluZ3MgPT0gMikKKwkJbnVtX2NvdW50ZXJzID0gTlVNX0NPVU5URVJTX0hUMjsKKyNlbmRpZgorfQorCitzdGF0aWMgaW50IGlubGluZSBhZGRyX2luY3JlbWVudCh2b2lkKQoreworI2lmZGVmIEhUX1NVUFBPUlQKKwlyZXR1cm4gc21wX251bV9zaWJsaW5ncyA9PSAyID8gMiA6IDE7CisjZWxzZQorCXJldHVybiAxOworI2VuZGlmCit9CisKKworLyogdGFibGVzIHRvIHNpbXVsYXRlIHNpbXBsaWZpZWQgaGFyZHdhcmUgdmlldyBvZiBwNCByZWdpc3RlcnMgKi8KK3N0cnVjdCBwNF9jb3VudGVyX2JpbmRpbmcgeworCWludCB2aXJ0X2NvdW50ZXI7CisJaW50IGNvdW50ZXJfYWRkcmVzczsKKwlpbnQgY2Njcl9hZGRyZXNzOworfTsKKworc3RydWN0IHA0X2V2ZW50X2JpbmRpbmcgeworCS8qIHZhbHVlIHRvIHB1dCBpbiBDQ0NSICovCisJaW50IGVzY3Jfc2VsZWN0OworCS8qIHZhbHVlIHRvIHB1dCBpbiBFU0NSICovCisJaW50IGV2ZW50X3NlbGVjdDsKKwlzdHJ1Y3QgeworCQkvKiBmb3IgdGhpcyBjb3VudGVyLi4uICovCisJCWludCB2aXJ0X2NvdW50ZXI7CisJCS8qIHVzZSB0aGlzIEVTQ1IgICAgICAgKi8KKwkJaW50IGVzY3JfYWRkcmVzczsKKwl9IGJpbmRpbmdzWzJdOworfTsKKworLyogbmI6IHRoZXNlIENUUl8qIGRlZmluZXMgYXJlIGEgZHVwbGljYXRlIG9mIGRlZmluZXMgaW4KKyAgIGV2ZW50L2kzODYucDQqZXZlbnRzLiAqLworCisKKyNkZWZpbmUgQ1RSX0JQVV8wICAgICAgKDEgPDwgMCkKKyNkZWZpbmUgQ1RSX01TXzAgICAgICAgKDEgPDwgMSkKKyNkZWZpbmUgQ1RSX0ZMQU1FXzAgICAgKDEgPDwgMikKKyNkZWZpbmUgQ1RSX0lRXzQgICAgICAgKDEgPDwgMykKKyNkZWZpbmUgQ1RSX0JQVV8yICAgICAgKDEgPDwgNCkKKyNkZWZpbmUgQ1RSX01TXzIgICAgICAgKDEgPDwgNSkKKyNkZWZpbmUgQ1RSX0ZMQU1FXzIgICAgKDEgPDwgNikKKyNkZWZpbmUgQ1RSX0lRXzUgICAgICAgKDEgPDwgNykKKworc3RhdGljIHN0cnVjdCBwNF9jb3VudGVyX2JpbmRpbmcgcDRfY291bnRlcnNbTlVNX0NPVU5URVJTX05PTl9IVF0gPSB7CisJeyBDVFJfQlBVXzAsICAgTVNSX1A0X0JQVV9QRVJGQ1RSMCwgICBNU1JfUDRfQlBVX0NDQ1IwIH0sCisJeyBDVFJfTVNfMCwgICAgTVNSX1A0X01TX1BFUkZDVFIwLCAgICBNU1JfUDRfTVNfQ0NDUjAgfSwKKwl7IENUUl9GTEFNRV8wLCBNU1JfUDRfRkxBTUVfUEVSRkNUUjAsIE1TUl9QNF9GTEFNRV9DQ0NSMCB9LAorCXsgQ1RSX0lRXzQsICAgIE1TUl9QNF9JUV9QRVJGQ1RSNCwgICAgTVNSX1A0X0lRX0NDQ1I0IH0sCisJeyBDVFJfQlBVXzIsICAgTVNSX1A0X0JQVV9QRVJGQ1RSMiwgICBNU1JfUDRfQlBVX0NDQ1IyIH0sCisJeyBDVFJfTVNfMiwgICAgTVNSX1A0X01TX1BFUkZDVFIyLCAgICBNU1JfUDRfTVNfQ0NDUjIgfSwKKwl7IENUUl9GTEFNRV8yLCBNU1JfUDRfRkxBTUVfUEVSRkNUUjIsIE1TUl9QNF9GTEFNRV9DQ0NSMiB9LAorCXsgQ1RSX0lRXzUsICAgIE1TUl9QNF9JUV9QRVJGQ1RSNSwgICAgTVNSX1A0X0lRX0NDQ1I1IH0KK307CisKKyNkZWZpbmUgTlVNX1VOVVNFRF9DQ0NSUwlOVU1fQ0NDUlNfTk9OX0hUIC0gTlVNX0NPVU5URVJTX05PTl9IVAorCisvKiBBbGwgY2NjciB3ZSBkb24ndCB1c2UuICovCitzdGF0aWMgaW50IHA0X3VudXNlZF9jY2NyW05VTV9VTlVTRURfQ0NDUlNdID0geworCU1TUl9QNF9CUFVfQ0NDUjEsIAlNU1JfUDRfQlBVX0NDQ1IzLAorCU1TUl9QNF9NU19DQ0NSMSwgCU1TUl9QNF9NU19DQ0NSMywKKwlNU1JfUDRfRkxBTUVfQ0NDUjEsIAlNU1JfUDRfRkxBTUVfQ0NDUjMsCisJTVNSX1A0X0lRX0NDQ1IwLCAJTVNSX1A0X0lRX0NDQ1IxLAorCU1TUl9QNF9JUV9DQ0NSMiwgCU1TUl9QNF9JUV9DQ0NSMworfTsKKworLyogcDQgZXZlbnQgY29kZXMgaW4gbGlib3Avb3BfZXZlbnQuaCBhcmUgaW5kaWNlcyBpbnRvIHRoaXMgdGFibGUuICovCisKK3N0YXRpYyBzdHJ1Y3QgcDRfZXZlbnRfYmluZGluZyBwNF9ldmVudHNbTlVNX0VWRU5UU10gPSB7CisJCisJeyAvKiBCUkFOQ0hfUkVUSVJFRCAqLworCQkweDA1LCAweDA2LCAKKwkJeyB7Q1RSX0lRXzQsIE1TUl9QNF9DUlVfRVNDUjJ9LAorCQkgIHtDVFJfSVFfNSwgTVNSX1A0X0NSVV9FU0NSM30gfQorCX0sCisJCisJeyAvKiBNSVNQUkVEX0JSQU5DSF9SRVRJUkVEICovCisJCTB4MDQsIDB4MDMsIAorCQl7IHsgQ1RSX0lRXzQsIE1TUl9QNF9DUlVfRVNDUjB9LAorCQkgIHsgQ1RSX0lRXzUsIE1TUl9QNF9DUlVfRVNDUjF9IH0KKwl9LAorCQorCXsgLyogVENfREVMSVZFUl9NT0RFICovCisJCTB4MDEsIDB4MDEsCisJCXsgeyBDVFJfTVNfMCwgTVNSX1A0X1RDX0VTQ1IwfSwgIAorCQkgIHsgQ1RSX01TXzIsIE1TUl9QNF9UQ19FU0NSMX0gfQorCX0sCisJCisJeyAvKiBCUFVfRkVUQ0hfUkVRVUVTVCAqLworCQkweDAwLCAweDAzLCAKKwkJeyB7IENUUl9CUFVfMCwgTVNSX1A0X0JQVV9FU0NSMH0sCisJCSAgeyBDVFJfQlBVXzIsIE1TUl9QNF9CUFVfRVNDUjF9IH0KKwl9LAorCisJeyAvKiBJVExCX1JFRkVSRU5DRSAqLworCQkweDAzLCAweDE4LAorCQl7IHsgQ1RSX0JQVV8wLCBNU1JfUDRfSVRMQl9FU0NSMH0sCisJCSAgeyBDVFJfQlBVXzIsIE1TUl9QNF9JVExCX0VTQ1IxfSB9CisJfSwKKworCXsgLyogTUVNT1JZX0NBTkNFTCAqLworCQkweDA1LCAweDAyLAorCQl7IHsgQ1RSX0ZMQU1FXzAsIE1TUl9QNF9EQUNfRVNDUjB9LAorCQkgIHsgQ1RSX0ZMQU1FXzIsIE1TUl9QNF9EQUNfRVNDUjF9IH0KKwl9LAorCisJeyAvKiBNRU1PUllfQ09NUExFVEUgKi8KKwkJMHgwMiwgMHgwOCwKKwkJeyB7IENUUl9GTEFNRV8wLCBNU1JfUDRfU0FBVF9FU0NSMH0sCisJCSAgeyBDVFJfRkxBTUVfMiwgTVNSX1A0X1NBQVRfRVNDUjF9IH0KKwl9LAorCisJeyAvKiBMT0FEX1BPUlRfUkVQTEFZICovCisJCTB4MDIsIDB4MDQsIAorCQl7IHsgQ1RSX0ZMQU1FXzAsIE1TUl9QNF9TQUFUX0VTQ1IwfSwKKwkJICB7IENUUl9GTEFNRV8yLCBNU1JfUDRfU0FBVF9FU0NSMX0gfQorCX0sCisKKwl7IC8qIFNUT1JFX1BPUlRfUkVQTEFZICovCisJCTB4MDIsIDB4MDUsCisJCXsgeyBDVFJfRkxBTUVfMCwgTVNSX1A0X1NBQVRfRVNDUjB9LAorCQkgIHsgQ1RSX0ZMQU1FXzIsIE1TUl9QNF9TQUFUX0VTQ1IxfSB9CisJfSwKKworCXsgLyogTU9CX0xPQURfUkVQTEFZICovCisJCTB4MDIsIDB4MDMsCisJCXsgeyBDVFJfQlBVXzAsIE1TUl9QNF9NT0JfRVNDUjB9LAorCQkgIHsgQ1RSX0JQVV8yLCBNU1JfUDRfTU9CX0VTQ1IxfSB9CisJfSwKKworCXsgLyogUEFHRV9XQUxLX1RZUEUgKi8KKwkJMHgwNCwgMHgwMSwKKwkJeyB7IENUUl9CUFVfMCwgTVNSX1A0X1BNSF9FU0NSMH0sCisJCSAgeyBDVFJfQlBVXzIsIE1TUl9QNF9QTUhfRVNDUjF9IH0KKwl9LAorCisJeyAvKiBCU1FfQ0FDSEVfUkVGRVJFTkNFICovCisJCTB4MDcsIDB4MGMsIAorCQl7IHsgQ1RSX0JQVV8wLCBNU1JfUDRfQlNVX0VTQ1IwfSwKKwkJICB7IENUUl9CUFVfMiwgTVNSX1A0X0JTVV9FU0NSMX0gfQorCX0sCisKKwkvKiBpbnRlbCBkb2Mgdm9sIDMgdGFibGUgQS0xOiBQNCBhbmQgeGVvbiB3aXRoIGNwdWlkIHNpZ25hdHVyZSA8IDB4ZjI3CisJICogZG9lbid0IGFsbG93IE1TUl9GU0JfRVNDUjEgc28gb25seSBjb3VudGVyIDAgaXMgYXZhaWxhYmxlICovCisJeyAvKiBJT1FfQUxMT0NBVElPTiAqLworCQkweDA2LCAweDAzLCAKKwkJeyB7IENUUl9CUFVfMCwgTVNSX1A0X0ZTQl9FU0NSMH0sCisJCSAgeyAwLCAwIH0gfQorCX0sCisKKwl7IC8qIElPUV9BQ1RJVkVfRU5UUklFUyAqLworCQkweDA2LCAweDFhLCAKKwkJeyB7IENUUl9CUFVfMiwgTVNSX1A0X0ZTQl9FU0NSMX0sCisJCSAgeyAwLCAwIH0gfQorCX0sCisKKwl7IC8qIEZTQl9EQVRBX0FDVElWSVRZICovCisJCTB4MDYsIDB4MTcsIAorCQl7IHsgQ1RSX0JQVV8wLCBNU1JfUDRfRlNCX0VTQ1IwfSwKKwkJICB7IENUUl9CUFVfMiwgTVNSX1A0X0ZTQl9FU0NSMX0gfQorCX0sCisKKwl7IC8qIEJTUV9BTExPQ0FUSU9OICovCisJCTB4MDcsIDB4MDUsIAorCQl7IHsgQ1RSX0JQVV8wLCBNU1JfUDRfQlNVX0VTQ1IwfSwKKwkJICB7IDAsIDAgfSB9CisJfSwKKworCXsgLyogQlNRX0FDVElWRV9FTlRSSUVTICovCisJCTB4MDcsIDB4MDYsCisJCS8qIEZJWE1FIGludGVsIGRvYyBkb24ndCBzYXkgd2hpY2ggRVNDUjEgdG8gdXNlLCB1c2luZworCQkgICBCU1VfRVNDUjEgaXMgYSBzZW5zaWJsZSBndWVzcyBidXQgd2lsbCBuZWVkIHZhbGlkYXRpb24gKi8KKwkJeyB7IENUUl9CUFVfMiwgTVNSX1A0X0JTVV9FU0NSMSB9LCAgCisJCSAgeyAwLCAwIH0gfQorCX0sCisKKwl7IC8qIFg4N19BU1NJU1QgKi8KKwkJMHgwNSwgMHgwMywgCisJCXsgeyBDVFJfSVFfNCwgTVNSX1A0X0NSVV9FU0NSMn0sCisJCSAgeyBDVFJfSVFfNSwgTVNSX1A0X0NSVV9FU0NSM30gfQorCX0sCisKKwl7IC8qIFNTRV9JTlBVVF9BU1NJU1QgKi8KKwkJMHgwMSwgMHgzNCwKKwkJeyB7IENUUl9GTEFNRV8wLCBNU1JfUDRfRklSTV9FU0NSMH0sCisJCSAgeyBDVFJfRkxBTUVfMiwgTVNSX1A0X0ZJUk1fRVNDUjF9IH0KKwl9LAorICAKKwl7IC8qIFBBQ0tFRF9TUF9VT1AgKi8KKwkJMHgwMSwgMHgwOCwgCisJCXsgeyBDVFJfRkxBTUVfMCwgTVNSX1A0X0ZJUk1fRVNDUjB9LAorCQkgIHsgQ1RSX0ZMQU1FXzIsIE1TUl9QNF9GSVJNX0VTQ1IxfSB9CisJfSwKKyAgCisJeyAvKiBQQUNLRURfRFBfVU9QICovCisJCTB4MDEsIDB4MGMsIAorCQl7IHsgQ1RSX0ZMQU1FXzAsIE1TUl9QNF9GSVJNX0VTQ1IwfSwKKwkJICB7IENUUl9GTEFNRV8yLCBNU1JfUDRfRklSTV9FU0NSMX0gfQorCX0sCisKKwl7IC8qIFNDQUxBUl9TUF9VT1AgKi8KKwkJMHgwMSwgMHgwYSwgCisJCXsgeyBDVFJfRkxBTUVfMCwgTVNSX1A0X0ZJUk1fRVNDUjB9LAorCQkgIHsgQ1RSX0ZMQU1FXzIsIE1TUl9QNF9GSVJNX0VTQ1IxfSB9CisJfSwKKworCXsgLyogU0NBTEFSX0RQX1VPUCAqLworCQkweDAxLCAweDBlLAorCQl7IHsgQ1RSX0ZMQU1FXzAsIE1TUl9QNF9GSVJNX0VTQ1IwfSwKKwkJICB7IENUUl9GTEFNRV8yLCBNU1JfUDRfRklSTV9FU0NSMX0gfQorCX0sCisKKwl7IC8qIDY0QklUX01NWF9VT1AgKi8KKwkJMHgwMSwgMHgwMiwgCisJCXsgeyBDVFJfRkxBTUVfMCwgTVNSX1A0X0ZJUk1fRVNDUjB9LAorCQkgIHsgQ1RSX0ZMQU1FXzIsIE1TUl9QNF9GSVJNX0VTQ1IxfSB9CisJfSwKKyAgCisJeyAvKiAxMjhCSVRfTU1YX1VPUCAqLworCQkweDAxLCAweDFhLCAKKwkJeyB7IENUUl9GTEFNRV8wLCBNU1JfUDRfRklSTV9FU0NSMH0sCisJCSAgeyBDVFJfRkxBTUVfMiwgTVNSX1A0X0ZJUk1fRVNDUjF9IH0KKwl9LAorCisJeyAvKiBYODdfRlBfVU9QICovCisJCTB4MDEsIDB4MDQsIAorCQl7IHsgQ1RSX0ZMQU1FXzAsIE1TUl9QNF9GSVJNX0VTQ1IwfSwKKwkJICB7IENUUl9GTEFNRV8yLCBNU1JfUDRfRklSTV9FU0NSMX0gfQorCX0sCisgIAorCXsgLyogWDg3X1NJTURfTU9WRVNfVU9QICovCisJCTB4MDEsIDB4MmUsIAorCQl7IHsgQ1RSX0ZMQU1FXzAsIE1TUl9QNF9GSVJNX0VTQ1IwfSwKKwkJICB7IENUUl9GTEFNRV8yLCBNU1JfUDRfRklSTV9FU0NSMX0gfQorCX0sCisgIAorCXsgLyogTUFDSElORV9DTEVBUiAqLworCQkweDA1LCAweDAyLCAKKwkJeyB7IENUUl9JUV80LCBNU1JfUDRfQ1JVX0VTQ1IyfSwKKwkJICB7IENUUl9JUV81LCBNU1JfUDRfQ1JVX0VTQ1IzfSB9CisJfSwKKworCXsgLyogR0xPQkFMX1BPV0VSX0VWRU5UUyAqLworCQkweDA2LCAweDEzIC8qIG9sZGVyIG1hbnVhbCBzYXlzIDB4MDUsIG5ld2VyIDB4MTMgKi8sCisJCXsgeyBDVFJfQlBVXzAsIE1TUl9QNF9GU0JfRVNDUjB9LAorCQkgIHsgQ1RSX0JQVV8yLCBNU1JfUDRfRlNCX0VTQ1IxfSB9CisJfSwKKyAgCisJeyAvKiBUQ19NU19YRkVSICovCisJCTB4MDAsIDB4MDUsIAorCQl7IHsgQ1RSX01TXzAsIE1TUl9QNF9NU19FU0NSMH0sCisJCSAgeyBDVFJfTVNfMiwgTVNSX1A0X01TX0VTQ1IxfSB9CisJfSwKKworCXsgLyogVU9QX1FVRVVFX1dSSVRFUyAqLworCQkweDAwLCAweDA5LAorCQl7IHsgQ1RSX01TXzAsIE1TUl9QNF9NU19FU0NSMH0sCisJCSAgeyBDVFJfTVNfMiwgTVNSX1A0X01TX0VTQ1IxfSB9CisJfSwKKworCXsgLyogRlJPTlRfRU5EX0VWRU5UICovCisJCTB4MDUsIDB4MDgsCisJCXsgeyBDVFJfSVFfNCwgTVNSX1A0X0NSVV9FU0NSMn0sCisJCSAgeyBDVFJfSVFfNSwgTVNSX1A0X0NSVV9FU0NSM30gfQorCX0sCisKKwl7IC8qIEVYRUNVVElPTl9FVkVOVCAqLworCQkweDA1LCAweDBjLAorCQl7IHsgQ1RSX0lRXzQsIE1TUl9QNF9DUlVfRVNDUjJ9LAorCQkgIHsgQ1RSX0lRXzUsIE1TUl9QNF9DUlVfRVNDUjN9IH0KKwl9LAorCisJeyAvKiBSRVBMQVlfRVZFTlQgKi8KKwkJMHgwNSwgMHgwOSwKKwkJeyB7IENUUl9JUV80LCBNU1JfUDRfQ1JVX0VTQ1IyfSwKKwkJICB7IENUUl9JUV81LCBNU1JfUDRfQ1JVX0VTQ1IzfSB9CisJfSwKKworCXsgLyogSU5TVFJfUkVUSVJFRCAqLworCQkweDA0LCAweDAyLCAKKwkJeyB7IENUUl9JUV80LCBNU1JfUDRfQ1JVX0VTQ1IwfSwKKwkJICB7IENUUl9JUV81LCBNU1JfUDRfQ1JVX0VTQ1IxfSB9CisJfSwKKworCXsgLyogVU9QU19SRVRJUkVEICovCisJCTB4MDQsIDB4MDEsCisJCXsgeyBDVFJfSVFfNCwgTVNSX1A0X0NSVV9FU0NSMH0sCisJCSAgeyBDVFJfSVFfNSwgTVNSX1A0X0NSVV9FU0NSMX0gfQorCX0sCisKKwl7IC8qIFVPUF9UWVBFICovICAgIAorCQkweDAyLCAweDAyLCAKKwkJeyB7IENUUl9JUV80LCBNU1JfUDRfUkFUX0VTQ1IwfSwKKwkJICB7IENUUl9JUV81LCBNU1JfUDRfUkFUX0VTQ1IxfSB9CisJfSwKKworCXsgLyogUkVUSVJFRF9NSVNQUkVEX0JSQU5DSF9UWVBFICovCisJCTB4MDIsIDB4MDUsIAorCQl7IHsgQ1RSX01TXzAsIE1TUl9QNF9UQlBVX0VTQ1IwfSwKKwkJICB7IENUUl9NU18yLCBNU1JfUDRfVEJQVV9FU0NSMX0gfQorCX0sCisKKwl7IC8qIFJFVElSRURfQlJBTkNIX1RZUEUgKi8KKwkJMHgwMiwgMHgwNCwKKwkJeyB7IENUUl9NU18wLCBNU1JfUDRfVEJQVV9FU0NSMH0sCisJCSAgeyBDVFJfTVNfMiwgTVNSX1A0X1RCUFVfRVNDUjF9IH0KKwl9Cit9OworCisKKyNkZWZpbmUgTUlTQ19QTUNfRU5BQkxFRF9QKHgpICgoeCkgJiAxIDw8IDcpCisKKyNkZWZpbmUgRVNDUl9SRVNFUlZFRF9CSVRTIDB4ODAwMDAwMDMKKyNkZWZpbmUgRVNDUl9DTEVBUihlc2NyKSAoKGVzY3IpICY9IEVTQ1JfUkVTRVJWRURfQklUUykKKyNkZWZpbmUgRVNDUl9TRVRfVVNSXzAoZXNjciwgdXNyKSAoKGVzY3IpIHw9ICgoKHVzcikgJiAxKSA8PCAyKSkKKyNkZWZpbmUgRVNDUl9TRVRfT1NfMChlc2NyLCBvcykgKChlc2NyKSB8PSAoKChvcykgJiAxKSA8PCAzKSkKKyNkZWZpbmUgRVNDUl9TRVRfVVNSXzEoZXNjciwgdXNyKSAoKGVzY3IpIHw9ICgoKHVzcikgJiAxKSkpCisjZGVmaW5lIEVTQ1JfU0VUX09TXzEoZXNjciwgb3MpICgoZXNjcikgfD0gKCgob3MpICYgMSkgPDwgMSkpCisjZGVmaW5lIEVTQ1JfU0VUX0VWRU5UX1NFTEVDVChlc2NyLCBzZWwpICgoZXNjcikgfD0gKCgoc2VsKSAmIDB4M2YpIDw8IDI1KSkKKyNkZWZpbmUgRVNDUl9TRVRfRVZFTlRfTUFTSyhlc2NyLCBtYXNrKSAoKGVzY3IpIHw9ICgoKG1hc2spICYgMHhmZmZmKSA8PCA5KSkKKyNkZWZpbmUgRVNDUl9SRUFEKGVzY3IsIGhpZ2gsIGV2LCBpKSBkbyB7cmRtc3IoZXYtPmJpbmRpbmdzWyhpKV0uZXNjcl9hZGRyZXNzLCAoZXNjciksIChoaWdoKSk7fSB3aGlsZSAoMCkKKyNkZWZpbmUgRVNDUl9XUklURShlc2NyLCBoaWdoLCBldiwgaSkgZG8ge3dybXNyKGV2LT5iaW5kaW5nc1soaSldLmVzY3JfYWRkcmVzcywgKGVzY3IpLCAoaGlnaCkpO30gd2hpbGUgKDApCisKKyNkZWZpbmUgQ0NDUl9SRVNFUlZFRF9CSVRTIDB4MzgwMzBGRkYKKyNkZWZpbmUgQ0NDUl9DTEVBUihjY2NyKSAoKGNjY3IpICY9IENDQ1JfUkVTRVJWRURfQklUUykKKyNkZWZpbmUgQ0NDUl9TRVRfUkVRVUlSRURfQklUUyhjY2NyKSAoKGNjY3IpIHw9IDB4MDAwMzAwMDApCisjZGVmaW5lIENDQ1JfU0VUX0VTQ1JfU0VMRUNUKGNjY3IsIHNlbCkgKChjY2NyKSB8PSAoKChzZWwpICYgMHgwNykgPDwgMTMpKQorI2RlZmluZSBDQ0NSX1NFVF9QTUlfT1ZGXzAoY2NjcikgKChjY2NyKSB8PSAoMSA8PCAyNikpCisjZGVmaW5lIENDQ1JfU0VUX1BNSV9PVkZfMShjY2NyKSAoKGNjY3IpIHw9ICgxIDw8IDI3KSkKKyNkZWZpbmUgQ0NDUl9TRVRfRU5BQkxFKGNjY3IpICgoY2NjcikgfD0gKDEgPDwgMTIpKQorI2RlZmluZSBDQ0NSX1NFVF9ESVNBQkxFKGNjY3IpICgoY2NjcikgJj0gfigxIDw8IDEyKSkKKyNkZWZpbmUgQ0NDUl9SRUFEKGxvdywgaGlnaCwgaSkgZG8ge3JkbXNyKHA0X2NvdW50ZXJzWyhpKV0uY2Njcl9hZGRyZXNzLCAobG93KSwgKGhpZ2gpKTt9IHdoaWxlICgwKQorI2RlZmluZSBDQ0NSX1dSSVRFKGxvdywgaGlnaCwgaSkgZG8ge3dybXNyKHA0X2NvdW50ZXJzWyhpKV0uY2Njcl9hZGRyZXNzLCAobG93KSwgKGhpZ2gpKTt9IHdoaWxlICgwKQorI2RlZmluZSBDQ0NSX09WRl9QKGNjY3IpICgoY2NjcikgJiAoMVUgPDwgMzEpKQorI2RlZmluZSBDQ0NSX0NMRUFSX09WRihjY2NyKSAoKGNjY3IpICY9ICh+KDFVIDw8IDMxKSkpCisKKyNkZWZpbmUgQ1RSX1JFQUQobCwgaCwgaSkgZG8ge3JkbXNyKHA0X2NvdW50ZXJzWyhpKV0uY291bnRlcl9hZGRyZXNzLCAobCksIChoKSk7fSB3aGlsZSAoMCkKKyNkZWZpbmUgQ1RSX1dSSVRFKGwsIGkpIGRvIHt3cm1zcihwNF9jb3VudGVyc1soaSldLmNvdW50ZXJfYWRkcmVzcywgLSh1MzIpKGwpLCAtMSk7fSB3aGlsZSAoMCkKKyNkZWZpbmUgQ1RSX09WRVJGTE9XX1AoY3RyKSAoISgoY3RyKSAmIDB4ODAwMDAwMDApKQorCisKKy8qIHRoaXMgYXNzaWducyBhICJzdGFnZ2VyIiB0byB0aGUgY3VycmVudCBDUFUsIHdoaWNoIGlzIHVzZWQgdGhyb3VnaG91dAorICAgdGhlIGNvZGUgaW4gdGhpcyBtb2R1bGUgYXMgYW4gZXh0cmEgYXJyYXkgb2Zmc2V0LCB0byBzZWxlY3QgdGhlICJldmVuIgorICAgb3IgIm9kZCIgcGFydCBvZiBhbGwgdGhlIGRpdmlkZWQgcmVzb3VyY2VzLiAqLworc3RhdGljIHVuc2lnbmVkIGludCBnZXRfc3RhZ2dlcih2b2lkKQoreworI2lmZGVmIEhUX1NVUFBPUlQKKwlpbnQgY3B1OworCWlmIChzbXBfbnVtX3NpYmxpbmdzID4gMSkgeworCQljcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJCXJldHVybiAoY3B1X3NpYmxpbmdfbWFwW2NwdV0gPiBjcHUpID8gMCA6IDE7CisJfQorI2VuZGlmCQorCXJldHVybiAwOworfQorCisKKy8qIGZpbmFsbHksIG1lZGlhdGUgYWNjZXNzIHRvIGEgcmVhbCBoYXJkd2FyZSBjb3VudGVyCisgICBieSBwYXNzaW5nIGEgInZpcnR1YWwiIGNvdW50ZXIgbnVtZXIgdG8gdGhpcyBtYWNybywKKyAgIGFsb25nIHdpdGggeW91ciBzdGFnZ2VyIHNldHRpbmcuICovCisjZGVmaW5lIFZJUlRfQ1RSKHN0YWdnZXIsIGkpICgoaSkgKyAoKG51bV9jb3VudGVycykgKiAoc3RhZ2dlcikpKQorCisKK3N0YXRpYyB2b2lkIHA0X2ZpbGxfaW5fYWRkcmVzc2VzKHN0cnVjdCBvcF9tc3JzICogY29uc3QgbXNycykKK3sKKwl1bnNpZ25lZCBpbnQgaTsgCisJdW5zaWduZWQgaW50IGFkZHIsIHN0YWc7CisKKwlzZXR1cF9udW1fY291bnRlcnMoKTsKKwlzdGFnID0gZ2V0X3N0YWdnZXIoKTsKKworCS8qIHRoZSBjb3VudGVyIHJlZ2lzdGVycyB3ZSBwYXkgYXR0ZW50aW9uIHRvICovCisJZm9yIChpID0gMDsgaSA8IG51bV9jb3VudGVyczsgKytpKSB7CisJCW1zcnMtPmNvdW50ZXJzLmFkZHJzW2ldID0KKwkJCXA0X2NvdW50ZXJzW1ZJUlRfQ1RSKHN0YWcsIGkpXS5jb3VudGVyX2FkZHJlc3M7CisJfQorCisJLyogRklYTUU6IGJhZCBmZWVsaW5nLCB3ZSBkb24ndCBzYXZlIHRoZSAxMCBjb3VudGVycyB3ZSBkb24ndCB1c2UuICovCisKKwkvKiAxOCBDQ0NSIHJlZ2lzdGVycyAqLworCWZvciAoaSA9IDAsIGFkZHIgPSBNU1JfUDRfQlBVX0NDQ1IwICsgc3RhZzsKKwkgICAgIGFkZHIgPD0gTVNSX1A0X0lRX0NDQ1I1OyArK2ksIGFkZHIgKz0gYWRkcl9pbmNyZW1lbnQoKSkgeworCQltc3JzLT5jb250cm9scy5hZGRyc1tpXSA9IGFkZHI7CisJfQorCQorCS8qIDQzIEVTQ1IgcmVnaXN0ZXJzIGluIHRocmVlIG9yIGZvdXIgZGlzY29udGlndW91cyBncm91cCAqLworCWZvciAoYWRkciA9IE1TUl9QNF9CU1VfRVNDUjAgKyBzdGFnOworCSAgICAgYWRkciA8IE1TUl9QNF9JUV9FU0NSMDsgKytpLCBhZGRyICs9IGFkZHJfaW5jcmVtZW50KCkpIHsKKwkJbXNycy0+Y29udHJvbHMuYWRkcnNbaV0gPSBhZGRyOworCX0KKworCS8qIG5vIElRX0VTQ1IwLzEgb24gc29tZSBtb2RlbHMsIHdlIHNhdmUgYSBzZWNvbmRlIHRpbWUgQlNVX0VTQ1IwLzEKKwkgKiB0byBhdm9pZCBzcGVjaWFsIGNhc2UgaW4gbm1pX3tzYXZlfHJlc3RvcmV9X3JlZ2lzdGVycygpICovCisJaWYgKGJvb3RfY3B1X2RhdGEueDg2X21vZGVsID49IDB4MykgeworCQlmb3IgKGFkZHIgPSBNU1JfUDRfQlNVX0VTQ1IwICsgc3RhZzsKKwkJICAgICBhZGRyIDw9IE1TUl9QNF9CU1VfRVNDUjE7ICsraSwgYWRkciArPSBhZGRyX2luY3JlbWVudCgpKSB7CisJCQltc3JzLT5jb250cm9scy5hZGRyc1tpXSA9IGFkZHI7CisJCX0KKwl9IGVsc2UgeworCQlmb3IgKGFkZHIgPSBNU1JfUDRfSVFfRVNDUjAgKyBzdGFnOworCQkgICAgIGFkZHIgPD0gTVNSX1A0X0lRX0VTQ1IxOyArK2ksIGFkZHIgKz0gYWRkcl9pbmNyZW1lbnQoKSkgeworCQkJbXNycy0+Y29udHJvbHMuYWRkcnNbaV0gPSBhZGRyOworCQl9CisJfQorCisJZm9yIChhZGRyID0gTVNSX1A0X1JBVF9FU0NSMCArIHN0YWc7CisJICAgICBhZGRyIDw9IE1TUl9QNF9TU1VfRVNDUjA7ICsraSwgYWRkciArPSBhZGRyX2luY3JlbWVudCgpKSB7CisJCW1zcnMtPmNvbnRyb2xzLmFkZHJzW2ldID0gYWRkcjsKKwl9CisJCisJZm9yIChhZGRyID0gTVNSX1A0X01TX0VTQ1IwICsgc3RhZzsKKwkgICAgIGFkZHIgPD0gTVNSX1A0X1RDX0VTQ1IxOyArK2ksIGFkZHIgKz0gYWRkcl9pbmNyZW1lbnQoKSkgeyAKKwkJbXNycy0+Y29udHJvbHMuYWRkcnNbaV0gPSBhZGRyOworCX0KKwkKKwlmb3IgKGFkZHIgPSBNU1JfUDRfSVhfRVNDUjAgKyBzdGFnOworCSAgICAgYWRkciA8PSBNU1JfUDRfQ1JVX0VTQ1IzOyArK2ksIGFkZHIgKz0gYWRkcl9pbmNyZW1lbnQoKSkgeyAKKwkJbXNycy0+Y29udHJvbHMuYWRkcnNbaV0gPSBhZGRyOworCX0KKworCS8qIHRoZXJlIGFyZSAyIHJlbWFpbmluZyBub24tY29udGlndW91c2x5IGxvY2F0ZWQgRVNDUnMgKi8KKworCWlmIChudW1fY291bnRlcnMgPT0gTlVNX0NPVU5URVJTX05PTl9IVCkgewkJCisJCS8qIHN0YW5kYXJkIG5vbi1IVCBDUFVzIGhhbmRsZSBib3RoIHJlbWFpbmluZyBFU0NScyovCisJCW1zcnMtPmNvbnRyb2xzLmFkZHJzW2krK10gPSBNU1JfUDRfQ1JVX0VTQ1I1OworCQltc3JzLT5jb250cm9scy5hZGRyc1tpKytdID0gTVNSX1A0X0NSVV9FU0NSNDsKKworCX0gZWxzZSBpZiAoc3RhZyA9PSAwKSB7CisJCS8qIEhUIENQVXMgZ2l2ZSB0aGUgZmlyc3QgcmVtYWluZGVyIHRvIHRoZSBldmVuIHRocmVhZCwgYXMKKwkJICAgdGhlIDMybmQgY29udHJvbCByZWdpc3RlciAqLworCQltc3JzLT5jb250cm9scy5hZGRyc1tpKytdID0gTVNSX1A0X0NSVV9FU0NSNDsKKworCX0gZWxzZSB7CisJCS8qIGFuZCB0d28gY29waWVzIG9mIHRoZSBzZWNvbmQgdG8gdGhlIG9kZCB0aHJlYWQsCisJCSAgIGZvciB0aGUgMjJzdCBhbmQgMjNuZCBjb250cm9sIHJlZ2lzdGVycyAqLworCQltc3JzLT5jb250cm9scy5hZGRyc1tpKytdID0gTVNSX1A0X0NSVV9FU0NSNTsKKwkJbXNycy0+Y29udHJvbHMuYWRkcnNbaSsrXSA9IE1TUl9QNF9DUlVfRVNDUjU7CisJfQorfQorCisKK3N0YXRpYyB2b2lkIHBtY19zZXR1cF9vbmVfcDRfY291bnRlcih1bnNpZ25lZCBpbnQgY3RyKQoreworCWludCBpOworCWludCBjb25zdCBtYXhiaW5kID0gMjsKKwl1bnNpZ25lZCBpbnQgY2NjciA9IDA7CisJdW5zaWduZWQgaW50IGVzY3IgPSAwOworCXVuc2lnbmVkIGludCBoaWdoID0gMDsKKwl1bnNpZ25lZCBpbnQgY291bnRlcl9iaXQ7CisJc3RydWN0IHA0X2V2ZW50X2JpbmRpbmcgKiBldiA9IE5VTEw7CisJdW5zaWduZWQgaW50IHN0YWc7CisKKwlzdGFnID0gZ2V0X3N0YWdnZXIoKTsKKwkKKwkvKiBjb252ZXJ0IGZyb20gY291bnRlciAqbnVtYmVyKiB0byBjb3VudGVyICpiaXQqICovCisJY291bnRlcl9iaXQgPSAxIDw8IFZJUlRfQ1RSKHN0YWcsIGN0cik7CisJCisJLyogZmluZCBvdXIgZXZlbnQgYmluZGluZyBzdHJ1Y3R1cmUuICovCisJaWYgKHN5c2N0bC5jdHJbY3RyXS5ldmVudCA8PSAwIHx8IHN5c2N0bC5jdHJbY3RyXS5ldmVudCA+IE5VTV9FVkVOVFMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIAorCQkgICAgICAgIm9wcm9maWxlOiBQNCBldmVudCBjb2RlIDB4JXggb3V0IG9mIHJhbmdlXG4iLCAKKwkJICAgICAgIHN5c2N0bC5jdHJbY3RyXS5ldmVudCk7CisJCXJldHVybjsKKwl9CisJCisJZXYgPSAmKHA0X2V2ZW50c1tzeXNjdGwuY3RyW2N0cl0uZXZlbnQgLSAxXSk7CisJCisJZm9yIChpID0gMDsgaSA8IG1heGJpbmQ7IGkrKykgeworCQlpZiAoZXYtPmJpbmRpbmdzW2ldLnZpcnRfY291bnRlciAmIGNvdW50ZXJfYml0KSB7CisKKwkJCS8qIG1vZGlmeSBFU0NSICovCisJCQlFU0NSX1JFQUQoZXNjciwgaGlnaCwgZXYsIGkpOworCQkJRVNDUl9DTEVBUihlc2NyKTsKKwkJCWlmIChzdGFnID09IDApIHsKKwkJCQlFU0NSX1NFVF9VU1JfMChlc2NyLCBzeXNjdGwuY3RyW2N0cl0udXNlcik7CisJCQkJRVNDUl9TRVRfT1NfMChlc2NyLCBzeXNjdGwuY3RyW2N0cl0ua2VybmVsKTsKKwkJCX0gZWxzZSB7CisJCQkJRVNDUl9TRVRfVVNSXzEoZXNjciwgc3lzY3RsLmN0cltjdHJdLnVzZXIpOworCQkJCUVTQ1JfU0VUX09TXzEoZXNjciwgc3lzY3RsLmN0cltjdHJdLmtlcm5lbCk7CisJCQl9CisJCQlFU0NSX1NFVF9FVkVOVF9TRUxFQ1QoZXNjciwgZXYtPmV2ZW50X3NlbGVjdCk7CisJCQlFU0NSX1NFVF9FVkVOVF9NQVNLKGVzY3IsIHN5c2N0bC5jdHJbY3RyXS51bml0X21hc2spOwkJCQorCQkJRVNDUl9XUklURShlc2NyLCBoaWdoLCBldiwgaSk7CisJCSAgICAgICAKKwkJCS8qIG1vZGlmeSBDQ0NSICovCisJCQlDQ0NSX1JFQUQoY2NjciwgaGlnaCwgVklSVF9DVFIoc3RhZywgY3RyKSk7CisJCQlDQ0NSX0NMRUFSKGNjY3IpOworCQkJQ0NDUl9TRVRfUkVRVUlSRURfQklUUyhjY2NyKTsKKwkJCUNDQ1JfU0VUX0VTQ1JfU0VMRUNUKGNjY3IsIGV2LT5lc2NyX3NlbGVjdCk7CisJCQlpZiAoc3RhZyA9PSAwKSB7CisJCQkJQ0NDUl9TRVRfUE1JX09WRl8wKGNjY3IpOworCQkJfSBlbHNlIHsKKwkJCQlDQ0NSX1NFVF9QTUlfT1ZGXzEoY2Njcik7CisJCQl9CisJCQlDQ0NSX1dSSVRFKGNjY3IsIGhpZ2gsIFZJUlRfQ1RSKHN0YWcsIGN0cikpOworCQkJcmV0dXJuOworCQl9CisJfQorCisJcHJpbnRrKEtFUk5fRVJSIAorCSAgICAgICAib3Byb2ZpbGU6IFA0IGV2ZW50IGNvZGUgMHgleCBubyBiaW5kaW5nLCBjdHIgJWRcbiIsCisJICAgICAgIHN5c2N0bC5jdHJbY3RyXS5ldmVudCwgY3RyKTsKK30KKworCitzdGF0aWMgdm9pZCBwNF9zZXR1cF9jdHJzKHN0cnVjdCBvcF9tc3JzIGNvbnN0ICogY29uc3QgbXNycykKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwl1bnNpZ25lZCBpbnQgbG93LCBoaWdoOworCXVuc2lnbmVkIGludCBhZGRyOworCXVuc2lnbmVkIGludCBzdGFnOworCisJc3RhZyA9IGdldF9zdGFnZ2VyKCk7CisKKwlyZG1zcihNU1JfSUEzMl9NSVNDX0VOQUJMRSwgbG93LCBoaWdoKTsKKwlpZiAoIU1JU0NfUE1DX0VOQUJMRURfUChsb3cpKSB7CisJCXByaW50ayhLRVJOX0VSUiAib3Byb2ZpbGU6IFA0IFBNQyBub3QgYXZhaWxhYmxlXG4iKTsKKwkJcmV0dXJuOworCX0KKworCS8qIGNsZWFyIHRoZSBjY2NycyB3ZSB3aWxsIHVzZSAqLworCWZvciAoaSA9IDAgOyBpIDwgbnVtX2NvdW50ZXJzIDsgaSsrKSB7CisJCXJkbXNyKHA0X2NvdW50ZXJzW1ZJUlRfQ1RSKHN0YWcsIGkpXS5jY2NyX2FkZHJlc3MsIGxvdywgaGlnaCk7CisJCUNDQ1JfQ0xFQVIobG93KTsKKwkJQ0NDUl9TRVRfUkVRVUlSRURfQklUUyhsb3cpOworCQl3cm1zcihwNF9jb3VudGVyc1tWSVJUX0NUUihzdGFnLCBpKV0uY2Njcl9hZGRyZXNzLCBsb3csIGhpZ2gpOworCX0KKworCS8qIGNsZWFyIGNjY3JzIG91dHNpZGUgb3VyIGNvbmNlcm4gKi8KKwlmb3IgKGkgPSBzdGFnIDsgaSA8IE5VTV9VTlVTRURfQ0NDUlMgOyBpICs9IGFkZHJfaW5jcmVtZW50KCkpIHsKKwkJcmRtc3IocDRfdW51c2VkX2NjY3JbaV0sIGxvdywgaGlnaCk7CisJCUNDQ1JfQ0xFQVIobG93KTsKKwkJQ0NDUl9TRVRfUkVRVUlSRURfQklUUyhsb3cpOworCQl3cm1zcihwNF91bnVzZWRfY2NjcltpXSwgbG93LCBoaWdoKTsKKwl9CisKKwkvKiBjbGVhciBhbGwgZXNjcnMgKGluY2x1ZGluZyB0aG9zZSBvdXRzaWRlIG91ciBjb25jZXJuKSAqLworCWZvciAoYWRkciA9IE1TUl9QNF9CU1VfRVNDUjAgKyBzdGFnOworCSAgICAgYWRkciA8ICBNU1JfUDRfSVFfRVNDUjA7IGFkZHIgKz0gYWRkcl9pbmNyZW1lbnQoKSkgeworCQl3cm1zcihhZGRyLCAwLCAwKTsKKwl9CisKKwkvKiBPbiBvbGRlciBtb2RlbHMgY2xlYXIgYWxzbyBNU1JfUDRfSVFfRVNDUjAvMSAqLworCWlmIChib290X2NwdV9kYXRhLng4Nl9tb2RlbCA8IDB4MykgeworCQl3cm1zcihNU1JfUDRfSVFfRVNDUjAsIDAsIDApOworCQl3cm1zcihNU1JfUDRfSVFfRVNDUjEsIDAsIDApOworCX0KKworCWZvciAoYWRkciA9IE1TUl9QNF9SQVRfRVNDUjAgKyBzdGFnOworCSAgICAgYWRkciA8PSBNU1JfUDRfU1NVX0VTQ1IwOyArK2ksIGFkZHIgKz0gYWRkcl9pbmNyZW1lbnQoKSkgeworCQl3cm1zcihhZGRyLCAwLCAwKTsKKwl9CisJCisJZm9yIChhZGRyID0gTVNSX1A0X01TX0VTQ1IwICsgc3RhZzsKKwkgICAgIGFkZHIgPD0gTVNSX1A0X1RDX0VTQ1IxOyBhZGRyICs9IGFkZHJfaW5jcmVtZW50KCkpIHsgCisJCXdybXNyKGFkZHIsIDAsIDApOworCX0KKwkKKwlmb3IgKGFkZHIgPSBNU1JfUDRfSVhfRVNDUjAgKyBzdGFnOworCSAgICAgYWRkciA8PSBNU1JfUDRfQ1JVX0VTQ1IzOyBhZGRyICs9IGFkZHJfaW5jcmVtZW50KCkpIHsgCisJCXdybXNyKGFkZHIsIDAsIDApOworCX0KKworCWlmIChudW1fY291bnRlcnMgPT0gTlVNX0NPVU5URVJTX05PTl9IVCkgewkJCisJCXdybXNyKE1TUl9QNF9DUlVfRVNDUjQsIDAsIDApOworCQl3cm1zcihNU1JfUDRfQ1JVX0VTQ1I1LCAwLCAwKTsKKwl9IGVsc2UgaWYgKHN0YWcgPT0gMCkgeworCQl3cm1zcihNU1JfUDRfQ1JVX0VTQ1I0LCAwLCAwKTsKKwl9IGVsc2UgeworCQl3cm1zcihNU1JfUDRfQ1JVX0VTQ1I1LCAwLCAwKTsKKwl9CQkKKwkKKwkvKiBzZXR1cCBhbGwgY291bnRlcnMgKi8KKwlmb3IgKGkgPSAwIDsgaSA8IG51bV9jb3VudGVycyA7ICsraSkgeworCQlpZiAoc3lzY3RsLmN0cltpXS5ldmVudCkgeworCQkJcG1jX3NldHVwX29uZV9wNF9jb3VudGVyKGkpOworCQkJQ1RSX1dSSVRFKHN5c2N0bC5jdHJbaV0uY291bnQsIFZJUlRfQ1RSKHN0YWcsIGkpKTsKKwkJfQorCX0KK30KKworCitzdGF0aWMgdm9pZCBwNF9jaGVja19jdHJzKHVuc2lnbmVkIGludCBjb25zdCBjcHUsIAorCQkJICBzdHJ1Y3Qgb3BfbXNycyBjb25zdCAqIGNvbnN0IG1zcnMsCisJCQkgIHN0cnVjdCBwdF9yZWdzICogY29uc3QgcmVncykKK3sKKwl1bnNpZ25lZCBsb25nIGN0ciwgbG93LCBoaWdoLCBzdGFnLCByZWFsOworCWludCBpOworCisJc3RhZyA9IGdldF9zdGFnZ2VyKCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2NvdW50ZXJzOyArK2kpIHsKKwkJCisJCWlmICghc3lzY3RsLmN0cltpXS5lbmFibGVkKSAKKwkJCWNvbnRpbnVlOworCisJCS8qIAorCQkgKiB0aGVyZSBpcyBzb21lIGVjY2VudHJpY2l0eSBpbiB0aGUgaGFyZHdhcmUgd2hpY2gKKwkJICogcmVxdWlyZXMgdGhhdCB3ZSBwZXJmb3JtIDIgZXh0cmEgY29ycmVjdGlvbnM6CisJCSAqCisJCSAqIC0gY2hlY2sgYm90aCB0aGUgQ0NDUjpPVkYgZmxhZyBmb3Igb3ZlcmZsb3cgYW5kIHRoZQorCQkgKiAgIGNvdW50ZXIgaGlnaCBiaXQgZm9yIHVuLWZsYWdnZWQgb3ZlcmZsb3dzLgorCQkgKgorCQkgKiAtIHdyaXRlIHRoZSBjb3VudGVyIGJhY2sgdHdpY2UgdG8gZW5zdXJlIGl0IGdldHMKKwkJICogICB1cGRhdGVkIHByb3Blcmx5LgorCQkgKiAKKwkJICogdGhlIGZvcm1lciBzZWVtcyB0byBiZSByZWxhdGVkIHRvIGV4dHJhIE5NSXMgaGFwcGVuaW5nCisJCSAqIGR1cmluZyB0aGUgY3VycmVudCBOTUk7IHRoZSBsYXR0ZXIgaXMgcmVwb3J0ZWQgYXMgZXJyYXRhCisJCSAqIE4xNSBpbiBpbnRlbCBkb2MgMjQ5MTk5LTAyOSwgcGVudGl1bSA0IHNwZWNpZmljYXRpb24KKwkJICogdXBkYXRlLCB0aG91Z2ggdGhlaXIgc3VnZ2VzdGVkIHdvcmstYXJvdW5kIGRvZXMgbm90CisJCSAqIGFwcGVhciB0byBzb2x2ZSB0aGUgcHJvYmxlbS4KKwkJICovCisJCQorCQlyZWFsID0gVklSVF9DVFIoc3RhZywgaSk7CisKKwkJQ0NDUl9SRUFEKGxvdywgaGlnaCwgcmVhbCk7CisgCQlDVFJfUkVBRChjdHIsIGhpZ2gsIHJlYWwpOworCQlpZiAoQ0NDUl9PVkZfUChsb3cpIHx8IENUUl9PVkVSRkxPV19QKGN0cikpIHsKKwkJCW9wX2RvX3Byb2ZpbGUoY3B1LCBpbnN0cnVjdGlvbl9wb2ludGVyKHJlZ3MpLCBJUlFfRU5BQkxFRChyZWdzKSwgaSk7CisgCQkJQ1RSX1dSSVRFKG9wcm9mX2RhdGFbY3B1XS5jdHJfY291bnRbaV0sIHJlYWwpOworCQkJQ0NDUl9DTEVBUl9PVkYobG93KTsKKwkJCUNDQ1JfV1JJVEUobG93LCBoaWdoLCByZWFsKTsKKyAJCQlDVFJfV1JJVEUob3Byb2ZfZGF0YVtjcHVdLmN0cl9jb3VudFtpXSwgcmVhbCk7CisJCX0KKwl9CisKKwkvKiBQNCBxdWlyazogeW91IGhhdmUgdG8gcmUtdW5tYXNrIHRoZSBhcGljIHZlY3RvciAqLworCWFwaWNfd3JpdGUoQVBJQ19MVlRQQywgYXBpY19yZWFkKEFQSUNfTFZUUEMpICYgfkFQSUNfTFZUX01BU0tFRCk7Cit9CisKKworc3RhdGljIHZvaWQgcDRfc3RhcnQoc3RydWN0IG9wX21zcnMgY29uc3QgKiBjb25zdCBtc3JzKQoreworCXVuc2lnbmVkIGludCBsb3csIGhpZ2gsIHN0YWc7CisJaW50IGk7CisKKwlzdGFnID0gZ2V0X3N0YWdnZXIoKTsKKworCWZvciAoaSA9IDA7IGkgPCBudW1fY291bnRlcnM7ICsraSkgeworCQlpZiAoIXN5c2N0bC5jdHJbaV0uZW5hYmxlZCkKKwkJCWNvbnRpbnVlOworCQlDQ0NSX1JFQUQobG93LCBoaWdoLCBWSVJUX0NUUihzdGFnLCBpKSk7CisJCUNDQ1JfU0VUX0VOQUJMRShsb3cpOworCQlDQ0NSX1dSSVRFKGxvdywgaGlnaCwgVklSVF9DVFIoc3RhZywgaSkpOworCX0KK30KKworCitzdGF0aWMgdm9pZCBwNF9zdG9wKHN0cnVjdCBvcF9tc3JzIGNvbnN0ICogY29uc3QgbXNycykKK3sKKwl1bnNpZ25lZCBpbnQgbG93LCBoaWdoLCBzdGFnOworCWludCBpOworCisJc3RhZyA9IGdldF9zdGFnZ2VyKCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2NvdW50ZXJzOyArK2kpIHsKKwkJLyogRklYTUU6IDIuNiBkcml2ZXIgZG9lc24ndCBkbyB0aGF0ID8gKi8KKwkJaWYgKCFzeXNjdGwuY3RyW2ldLmVuYWJsZWQpCisJCQljb250aW51ZTsKKwkJQ0NDUl9SRUFEKGxvdywgaGlnaCwgVklSVF9DVFIoc3RhZywgaSkpOworCQlDQ0NSX1NFVF9ESVNBQkxFKGxvdyk7CisJCUNDQ1JfV1JJVEUobG93LCBoaWdoLCBWSVJUX0NUUihzdGFnLCBpKSk7CisJfQorfQorCisjaWZkZWYgSFRfU1VQUE9SVAorCitzdHJ1Y3Qgb3BfeDg2X21vZGVsX3NwZWMgY29uc3Qgb3BfcDRfaHQyX3NwZWMgPSB7CisJLm51bV9jb3VudGVycyA9IE5VTV9DT1VOVEVSU19IVDIsCisJLm51bV9jb250cm9scyA9IE5VTV9DT05UUk9MU19IVDIsCisJLmZpbGxfaW5fYWRkcmVzc2VzID0gJnA0X2ZpbGxfaW5fYWRkcmVzc2VzLAorCS5zZXR1cF9jdHJzID0gJnA0X3NldHVwX2N0cnMsCisJLmNoZWNrX2N0cnMgPSAmcDRfY2hlY2tfY3RycywKKwkuc3RhcnQgPSAmcDRfc3RhcnQsCisJLnN0b3AgPSAmcDRfc3RvcAorfTsKKyNlbmRpZgorCitzdHJ1Y3Qgb3BfeDg2X21vZGVsX3NwZWMgY29uc3Qgb3BfcDRfc3BlYyA9IHsKKwkubnVtX2NvdW50ZXJzID0gTlVNX0NPVU5URVJTX05PTl9IVCwKKwkubnVtX2NvbnRyb2xzID0gTlVNX0NPTlRST0xTX05PTl9IVCwKKwkuZmlsbF9pbl9hZGRyZXNzZXMgPSAmcDRfZmlsbF9pbl9hZGRyZXNzZXMsCisJLnNldHVwX2N0cnMgPSAmcDRfc2V0dXBfY3RycywKKwkuY2hlY2tfY3RycyA9ICZwNF9jaGVja19jdHJzLAorCS5zdGFydCA9ICZwNF9zdGFydCwKKwkuc3RvcCA9ICZwNF9zdG9wCit9OwpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvbW9kdWxlL3g4Ni9vcF9tb2RlbF9wcHJvLmMgYi9vcHJvZmlsZS0wLjkuNy9tb2R1bGUveDg2L29wX21vZGVsX3Bwcm8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZWU4NWQ1Ci0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvbW9kdWxlL3g4Ni9vcF9tb2RlbF9wcHJvLmMKQEAgLTAsMCArMSwxMjMgQEAKKy8qKgorICogQGZpbGUgb3BfbW9kZWxfcHByby5oCisgKiBwZW50aXVtIHBybyAvIFA2IG1vZGVsLXNwZWNpZmljIE1TUiBvcGVyYXRpb25zCisgKgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMiBPUHJvZmlsZSBhdXRob3JzCisgKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORworICoKKyAqIEBhdXRob3IgSm9obiBMZXZvbgorICogQGF1dGhvciBQaGlsaXBwZSBFbGllCisgKiBAYXV0aG9yIEdyYXlkb24gSG9hcmUKKyAqLworCisjaW5jbHVkZSAib3BfeDg2X21vZGVsLmgiCisjaW5jbHVkZSAib3BfYXJjaC5oIgorI2luY2x1ZGUgIm9wX21zci5oIgorCisjZGVmaW5lIE5VTV9DT1VOVEVSUyAyCisjZGVmaW5lIE5VTV9DT05UUk9MUyAyCisKKyNkZWZpbmUgQ1RSX1JFQUQobCwgaCwgbXNycywgYykgZG8ge3JkbXNyKG1zcnMtPmNvdW50ZXJzLmFkZHJzWyhjKV0sIChsKSwgKGgpKTt9IHdoaWxlICgwKQorI2RlZmluZSBDVFJfV1JJVEUobCwgbXNycywgYykgZG8ge3dybXNyKG1zcnMtPmNvdW50ZXJzLmFkZHJzWyhjKV0sIC0odTMyKShsKSwgLTEpO30gd2hpbGUgKDApCisjZGVmaW5lIENUUl9PVkVSRkxPV0VEKG4pICghKChuKSAmICgxVSA8PCAzMSkpKQorCisjZGVmaW5lIENUUkxfUkVBRChsLCBoLCBtc3JzLCBjKSBkbyB7cmRtc3IoKG1zcnMtPmNvbnRyb2xzLmFkZHJzWyhjKV0pLCAobCksIChoKSk7fSB3aGlsZSAoMCkKKyNkZWZpbmUgQ1RSTF9XUklURShsLCBoLCBtc3JzLCBjKSBkbyB7d3Jtc3IoKG1zcnMtPmNvbnRyb2xzLmFkZHJzWyhjKV0pLCAobCksIChoKSk7fSB3aGlsZSAoMCkKKyNkZWZpbmUgQ1RSTF9TRVRfQUNUSVZFKG4pIChuIHw9ICgxIDw8IDIyKSkKKyNkZWZpbmUgQ1RSTF9TRVRfSU5BQ1RJVkUobikgKG4gJj0gfigxIDw8IDIyKSkKKyNkZWZpbmUgQ1RSTF9DTEVBUih4KSAoeCAmPSAoMSA8PCAyMSkpCisjZGVmaW5lIENUUkxfU0VUX0VOQUJMRSh2YWwpICh2YWwgfD0gMSA8PCAyMCkKKyNkZWZpbmUgQ1RSTF9TRVRfVVNSKHZhbCwgdSkgKHZhbCB8PSAoKHUgJiAxKSA8PCAxNikpCisjZGVmaW5lIENUUkxfU0VUX0tFUk4odmFsLCBrKSAodmFsIHw9ICgoayAmIDEpIDw8IDE3KSkKKyNkZWZpbmUgQ1RSTF9TRVRfVU0odmFsLCBtKSAodmFsIHw9IChtIDw8IDgpKQorI2RlZmluZSBDVFJMX1NFVF9FVkVOVCh2YWwsIGUpICh2YWwgfD0gZSkKKworIAorc3RhdGljIHZvaWQgcHByb19maWxsX2luX2FkZHJlc3NlcyhzdHJ1Y3Qgb3BfbXNycyAqIGNvbnN0IG1zcnMpCit7CisJbXNycy0+Y291bnRlcnMuYWRkcnNbMF0gPSBNU1JfUDZfUEVSRkNUUjA7CisJbXNycy0+Y291bnRlcnMuYWRkcnNbMV0gPSBNU1JfUDZfUEVSRkNUUjE7CisJCisJbXNycy0+Y29udHJvbHMuYWRkcnNbMF0gPSBNU1JfUDZfRVZOVFNFTDA7CisJbXNycy0+Y29udHJvbHMuYWRkcnNbMV0gPSBNU1JfUDZfRVZOVFNFTDE7Cit9CisKKworc3RhdGljIHZvaWQgcHByb19zZXR1cF9jdHJzKHN0cnVjdCBvcF9tc3JzIGNvbnN0ICogY29uc3QgbXNycykKK3sKKwl1aW50IGxvdywgaGlnaDsKKwlpbnQgaTsKKworCS8qIGNsZWFyIGFsbCBjb3VudGVycyAqLworCWZvciAoaSA9IDAgOyBpIDwgTlVNX0NPTlRST0xTOyArK2kpIHsKKwkJQ1RSTF9SRUFEKGxvdywgaGlnaCwgbXNycywgaSk7CisJCUNUUkxfQ0xFQVIobG93KTsKKwkJQ1RSTF9XUklURShsb3csIGhpZ2gsIG1zcnMsIGkpOworCX0KKwkKKwkvKiBhdm9pZCBhIGZhbHNlIGRldGVjdGlvbiBvZiBjdHIgb3ZlcmZsb3dzIGluIE5NSSBoYW5kbGVyICovCisJZm9yIChpID0gMDsgaSA8IE5VTV9DT1VOVEVSUzsgKytpKQorCQlDVFJfV1JJVEUoMSwgbXNycywgaSk7CisKKwkvKiBlbmFibGUgYWN0aXZlIGNvdW50ZXJzICovCisJZm9yIChpID0gMDsgaSA8IE5VTV9DT1VOVEVSUzsgKytpKSB7CisJCWlmIChzeXNjdGwuY3RyW2ldLmVuYWJsZWQpIHsKKworCQkJQ1RSX1dSSVRFKHN5c2N0bC5jdHJbaV0uY291bnQsIG1zcnMsIGkpOworCisJCQlDVFJMX1JFQUQobG93LCBoaWdoLCBtc3JzLCBpKTsKKwkJCUNUUkxfQ0xFQVIobG93KTsKKwkJCUNUUkxfU0VUX0VOQUJMRShsb3cpOworCQkJQ1RSTF9TRVRfVVNSKGxvdywgc3lzY3RsLmN0cltpXS51c2VyKTsKKwkJCUNUUkxfU0VUX0tFUk4obG93LCBzeXNjdGwuY3RyW2ldLmtlcm5lbCk7CisJCQlDVFJMX1NFVF9VTShsb3csIHN5c2N0bC5jdHJbaV0udW5pdF9tYXNrKTsKKwkJCUNUUkxfU0VUX0VWRU5UKGxvdywgc3lzY3RsLmN0cltpXS5ldmVudCk7CisJCQlDVFJMX1dSSVRFKGxvdywgaGlnaCwgbXNycywgaSk7CisJCX0KKwl9Cit9CisKKyAKK3N0YXRpYyB2b2lkIHBwcm9fY2hlY2tfY3Rycyh1aW50IGNvbnN0IGNwdSwgCisJCQkgICAgc3RydWN0IG9wX21zcnMgY29uc3QgKiBjb25zdCBtc3JzLAorCQkJICAgIHN0cnVjdCBwdF9yZWdzICogY29uc3QgcmVncykKK3sKKwl1bG9uZyBsb3csIGhpZ2g7CisJaW50IGk7CisJZm9yIChpID0gMCA7IGkgPCBOVU1fQ09VTlRFUlM7ICsraSkgeworCQlDVFJfUkVBRChsb3csIGhpZ2gsIG1zcnMsIGkpOworCQlpZiAoQ1RSX09WRVJGTE9XRUQobG93KSkgeworCQkJb3BfZG9fcHJvZmlsZShjcHUsIGluc3RydWN0aW9uX3BvaW50ZXIocmVncyksIElSUV9FTkFCTEVEKHJlZ3MpLCBpKTsKKwkJCUNUUl9XUklURShvcHJvZl9kYXRhW2NwdV0uY3RyX2NvdW50W2ldLCBtc3JzLCBpKTsKKwkJfQorCX0KK30KKworIAorc3RhdGljIHZvaWQgcHByb19zdGFydChzdHJ1Y3Qgb3BfbXNycyBjb25zdCAqIGNvbnN0IG1zcnMpCit7CisJdWludCBsb3csIGhpZ2g7CisJQ1RSTF9SRUFEKGxvdywgaGlnaCwgbXNycywgMCk7CisJQ1RSTF9TRVRfQUNUSVZFKGxvdyk7CisJQ1RSTF9XUklURShsb3csIGhpZ2gsIG1zcnMsIDApOworfQorCisKK3N0YXRpYyB2b2lkIHBwcm9fc3RvcChzdHJ1Y3Qgb3BfbXNycyBjb25zdCAqIGNvbnN0IG1zcnMpCit7CisJdWludCBsb3csIGhpZ2g7CisJQ1RSTF9SRUFEKGxvdywgaGlnaCwgbXNycywgMCk7CisJQ1RSTF9TRVRfSU5BQ1RJVkUobG93KTsKKwlDVFJMX1dSSVRFKGxvdywgaGlnaCwgbXNycywgMCk7Cit9CisKKworc3RydWN0IG9wX3g4Nl9tb2RlbF9zcGVjIGNvbnN0IG9wX3Bwcm9fc3BlYyA9IHsKKwkubnVtX2NvdW50ZXJzID0gTlVNX0NPVU5URVJTLAorCS5udW1fY29udHJvbHMgPSBOVU1fQ09OVFJPTFMsCisJLmZpbGxfaW5fYWRkcmVzc2VzID0gJnBwcm9fZmlsbF9pbl9hZGRyZXNzZXMsCisJLnNldHVwX2N0cnMgPSAmcHByb19zZXR1cF9jdHJzLAorCS5jaGVja19jdHJzID0gJnBwcm9fY2hlY2tfY3RycywKKwkuc3RhcnQgPSAmcHByb19zdGFydCwKKwkuc3RvcCA9ICZwcHJvX3N0b3AKK307CmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9tb2R1bGUveDg2L29wX21zci5oIGIvb3Byb2ZpbGUtMC45LjcvbW9kdWxlL3g4Ni9vcF9tc3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNmI3MzI5Ci0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvbW9kdWxlL3g4Ni9vcF9tc3IuaApAQCAtMCwwICsxLDMzNyBAQAorLyoqCisgKiBAZmlsZSBvcF9tc3IuaAorICogeDg2LXNwZWNpZmljIE1TUiBzdHVmZgorICoKKyAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDIgT1Byb2ZpbGUgYXV0aG9ycworICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKKyAqCisgKiBAYXV0aG9yIEpvaG4gTGV2b24KKyAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQorICovCisKKyNpZm5kZWYgT1BfTVNSX0gKKyNkZWZpbmUgT1BfTVNSX0gKKyAKKy8qIHdvcmstYXJvdW5kIGNvbXBpbGVyIGJ1ZyBpbiBnY2MgMi45MS42NiwganVzdCBtYXJrIGFsbCBpbnB1dCByZWdpc3RlciBhcworICogbWFnaWNhbGx5IGNsb2JlcnJlZCBieSB3cm1zciAqLworI2lmIF9fR05VQ19fID09IDIgJiYgX19HTlVDX01JTk9SX18gPT0gOTEKKwkjdW5kZWYgd3Jtc3IKKwkjZGVmaW5lIHdybXNyKG1zciwgdmFsMSwgdmFsMikJCQkJXAorCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygid3Jtc3IiCQkJXAorCQkJLyogbm8gb3V0cHV0cyAqLwkJCVwKKwkJCToJCQkJCVwKKwkJCTogImMiIChtc3IpLCAiYSIgKHZhbDEpLCAiZCIgKHZhbDIpCVwKKwkJCTogImVjeCIsICJlYXgiLCAiZWR4IikKKyNlbmRpZgorCisjaWZuZGVmIE1TUl9JQTMyX01JU0NfRU5BQkxFIAorI2RlZmluZSBNU1JfSUEzMl9NSVNDX0VOQUJMRSAweDFhMAorI2VuZGlmCisKKy8qIE1TUnMgKi8KKyNpZm5kZWYgTVNSX1A2X1BFUkZDVFIwCisjZGVmaW5lIE1TUl9QNl9QRVJGQ1RSMCAweGMxCisjZW5kaWYKKyNpZm5kZWYgTVNSX1A2X1BFUkZDVFIxCisjZGVmaW5lIE1TUl9QNl9QRVJGQ1RSMSAweGMyCisjZW5kaWYKKyNpZm5kZWYgTVNSX1A2X0VWTlRTRUwwCisjZGVmaW5lIE1TUl9QNl9FVk5UU0VMMCAweDE4NgorI2VuZGlmCisjaWZuZGVmIE1TUl9QNl9FVk5UU0VMMQorI2RlZmluZSBNU1JfUDZfRVZOVFNFTDEgMHgxODcKKyNlbmRpZgorI2lmbmRlZiBNU1JfSzdfRVZOVFNFTDAKKyNkZWZpbmUgTVNSX0s3X0VWTlRTRUwwIDB4YzAwMTAwMDAKKyNlbmRpZgorI2lmbmRlZiBNU1JfSzdfRVZOVFNFTDEKKyNkZWZpbmUgTVNSX0s3X0VWTlRTRUwxIDB4YzAwMTAwMDEKKyNlbmRpZgorI2lmbmRlZiBNU1JfSzdfRVZOVFNFTDIKKyNkZWZpbmUgTVNSX0s3X0VWTlRTRUwyIDB4YzAwMTAwMDIKKyNlbmRpZgorI2lmbmRlZiBNU1JfSzdfRVZOVFNFTDMKKyNkZWZpbmUgTVNSX0s3X0VWTlRTRUwzIDB4YzAwMTAwMDMKKyNlbmRpZgorI2lmbmRlZiBNU1JfSzdfUEVSRkNUUjAKKyNkZWZpbmUgTVNSX0s3X1BFUkZDVFIwIDB4YzAwMTAwMDQKKyNlbmRpZgorI2lmbmRlZiBNU1JfSzdfUEVSRkNUUjEKKyNkZWZpbmUgTVNSX0s3X1BFUkZDVFIxIDB4YzAwMTAwMDUKKyNlbmRpZgorI2lmbmRlZiBNU1JfSzdfUEVSRkNUUjIKKyNkZWZpbmUgTVNSX0s3X1BFUkZDVFIyIDB4YzAwMTAwMDYKKyNlbmRpZgorI2lmbmRlZiBNU1JfSzdfUEVSRkNUUjMKKyNkZWZpbmUgTVNSX0s3X1BFUkZDVFIzIDB4YzAwMTAwMDcKKyNlbmRpZgorCisvKiBUaGVyZSBhcmUgKjgyKiBwZW50aXVtIDQgTVNSczoKKyAgIAorICAgLSAxIG1pc2MgcmVnaXN0ZXIKKworICAgLSAxOCBjb3VudGVycyAoUEVSRkNUUnMpCisgICAKKyAgIC0gMTggY291bnRlciBjb25maWd1cmF0aW9uIGNvbnRyb2wgcmVnaXN0ZXJzIChDQ0NScykKKyAgIAorICAgLSA0NSBldmVudCBzZWxlY3Rpb24gY29udHJvbCByZWdpc3RlcnMgKEVTQ1JzKS4gKi8KKworCisjaWZuZGVmIE1TUl9QNF9CUFVfUEVSRkNUUjAKKyNkZWZpbmUgTVNSX1A0X0JQVV9QRVJGQ1RSMCAweDMwMAorI2VuZGlmCisjaWZuZGVmIE1TUl9QNF9CUFVfUEVSRkNUUjEKKyNkZWZpbmUgTVNSX1A0X0JQVV9QRVJGQ1RSMSAweDMwMQorI2VuZGlmCisjaWZuZGVmIE1TUl9QNF9CUFVfUEVSRkNUUjIKKyNkZWZpbmUgTVNSX1A0X0JQVV9QRVJGQ1RSMiAweDMwMgorI2VuZGlmCisjaWZuZGVmIE1TUl9QNF9CUFVfUEVSRkNUUjMKKyNkZWZpbmUgTVNSX1A0X0JQVV9QRVJGQ1RSMyAweDMwMworI2VuZGlmCisjaWZuZGVmIE1TUl9QNF9NU19QRVJGQ1RSMAorI2RlZmluZSBNU1JfUDRfTVNfUEVSRkNUUjAgMHgzMDQKKyNlbmRpZgorI2lmbmRlZiBNU1JfUDRfTVNfUEVSRkNUUjEKKyNkZWZpbmUgTVNSX1A0X01TX1BFUkZDVFIxIDB4MzA1CisjZW5kaWYKKyNpZm5kZWYgTVNSX1A0X01TX1BFUkZDVFIyCisjZGVmaW5lIE1TUl9QNF9NU19QRVJGQ1RSMiAweDMwNgorI2VuZGlmCisjaWZuZGVmIE1TUl9QNF9NU19QRVJGQ1RSMworI2RlZmluZSBNU1JfUDRfTVNfUEVSRkNUUjMgMHgzMDcKKyNlbmRpZgorI2lmbmRlZiBNU1JfUDRfRkxBTUVfUEVSRkNUUjAKKyNkZWZpbmUgTVNSX1A0X0ZMQU1FX1BFUkZDVFIwIDB4MzA4CisjZW5kaWYKKyNpZm5kZWYgTVNSX1A0X0ZMQU1FX1BFUkZDVFIxCisjZGVmaW5lIE1TUl9QNF9GTEFNRV9QRVJGQ1RSMSAweDMwOQorI2VuZGlmCisjaWZuZGVmIE1TUl9QNF9GTEFNRV9QRVJGQ1RSMgorI2RlZmluZSBNU1JfUDRfRkxBTUVfUEVSRkNUUjIgMHgzMGEKKyNlbmRpZgorI2lmbmRlZiBNU1JfUDRfRkxBTUVfUEVSRkNUUjMKKyNkZWZpbmUgTVNSX1A0X0ZMQU1FX1BFUkZDVFIzIDB4MzBiCisjZW5kaWYKKyNpZm5kZWYgTVNSX1A0X0lRX1BFUkZDVFIwCisjZGVmaW5lIE1TUl9QNF9JUV9QRVJGQ1RSMCAweDMwYworI2VuZGlmCisjaWZuZGVmIE1TUl9QNF9JUV9QRVJGQ1RSMQorI2RlZmluZSBNU1JfUDRfSVFfUEVSRkNUUjEgMHgzMGQKKyNlbmRpZgorI2lmbmRlZiBNU1JfUDRfSVFfUEVSRkNUUjIKKyNkZWZpbmUgTVNSX1A0X0lRX1BFUkZDVFIyIDB4MzBlCisjZW5kaWYKKyNpZm5kZWYgTVNSX1A0X0lRX1BFUkZDVFIzCisjZGVmaW5lIE1TUl9QNF9JUV9QRVJGQ1RSMyAweDMwZgorI2VuZGlmCisjaWZuZGVmIE1TUl9QNF9JUV9QRVJGQ1RSNAorI2RlZmluZSBNU1JfUDRfSVFfUEVSRkNUUjQgMHgzMTAKKyNlbmRpZgorI2lmbmRlZiBNU1JfUDRfSVFfUEVSRkNUUjUKKyNkZWZpbmUgTVNSX1A0X0lRX1BFUkZDVFI1IDB4MzExCisjZW5kaWYKKworCisjaWZuZGVmIE1TUl9QNF9CUFVfQ0NDUjAKKyNkZWZpbmUgTVNSX1A0X0JQVV9DQ0NSMCAweDM2MAorI2VuZGlmCisjaWZuZGVmIE1TUl9QNF9CUFVfQ0NDUjEKKyNkZWZpbmUgTVNSX1A0X0JQVV9DQ0NSMSAweDM2MQorI2VuZGlmCisjaWZuZGVmIE1TUl9QNF9CUFVfQ0NDUjIKKyNkZWZpbmUgTVNSX1A0X0JQVV9DQ0NSMiAweDM2MgorI2VuZGlmCisjaWZuZGVmIE1TUl9QNF9CUFVfQ0NDUjMKKyNkZWZpbmUgTVNSX1A0X0JQVV9DQ0NSMyAweDM2MworI2VuZGlmCisjaWZuZGVmIE1TUl9QNF9NU19DQ0NSMAorI2RlZmluZSBNU1JfUDRfTVNfQ0NDUjAgMHgzNjQKKyNlbmRpZgorI2lmbmRlZiBNU1JfUDRfTVNfQ0NDUjEKKyNkZWZpbmUgTVNSX1A0X01TX0NDQ1IxIDB4MzY1CisjZW5kaWYKKyNpZm5kZWYgTVNSX1A0X01TX0NDQ1IyCisjZGVmaW5lIE1TUl9QNF9NU19DQ0NSMiAweDM2NgorI2VuZGlmCisjaWZuZGVmIE1TUl9QNF9NU19DQ0NSMworI2RlZmluZSBNU1JfUDRfTVNfQ0NDUjMgMHgzNjcKKyNlbmRpZgorI2lmbmRlZiBNU1JfUDRfRkxBTUVfQ0NDUjAKKyNkZWZpbmUgTVNSX1A0X0ZMQU1FX0NDQ1IwIDB4MzY4CisjZW5kaWYKKyNpZm5kZWYgTVNSX1A0X0ZMQU1FX0NDQ1IxCisjZGVmaW5lIE1TUl9QNF9GTEFNRV9DQ0NSMSAweDM2OQorI2VuZGlmCisjaWZuZGVmIE1TUl9QNF9GTEFNRV9DQ0NSMgorI2RlZmluZSBNU1JfUDRfRkxBTUVfQ0NDUjIgMHgzNmEKKyNlbmRpZgorI2lmbmRlZiBNU1JfUDRfRkxBTUVfQ0NDUjMKKyNkZWZpbmUgTVNSX1A0X0ZMQU1FX0NDQ1IzIDB4MzZiCisjZW5kaWYKKyNpZm5kZWYgTVNSX1A0X0lRX0NDQ1IwCisjZGVmaW5lIE1TUl9QNF9JUV9DQ0NSMCAweDM2YworI2VuZGlmCisjaWZuZGVmIE1TUl9QNF9JUV9DQ0NSMQorI2RlZmluZSBNU1JfUDRfSVFfQ0NDUjEgMHgzNmQKKyNlbmRpZgorI2lmbmRlZiBNU1JfUDRfSVFfQ0NDUjIKKyNkZWZpbmUgTVNSX1A0X0lRX0NDQ1IyIDB4MzZlCisjZW5kaWYKKyNpZm5kZWYgTVNSX1A0X0lRX0NDQ1IzCisjZGVmaW5lIE1TUl9QNF9JUV9DQ0NSMyAweDM2ZgorI2VuZGlmCisjaWZuZGVmIE1TUl9QNF9JUV9DQ0NSNAorI2RlZmluZSBNU1JfUDRfSVFfQ0NDUjQgMHgzNzAKKyNlbmRpZgorI2lmbmRlZiBNU1JfUDRfSVFfQ0NDUjUKKyNkZWZpbmUgTVNSX1A0X0lRX0NDQ1I1IDB4MzcxCisjZW5kaWYKKworCisjaWZuZGVmIE1TUl9QNF9BTEZfRVNDUjAKKyNkZWZpbmUgTVNSX1A0X0FMRl9FU0NSMCAweDNjYQorI2VuZGlmCisjaWZuZGVmIE1TUl9QNF9BTEZfRVNDUjEKKyNkZWZpbmUgTVNSX1A0X0FMRl9FU0NSMSAweDNjYgorI2VuZGlmCisjaWZuZGVmIE1TUl9QNF9CUFVfRVNDUjAKKyNkZWZpbmUgTVNSX1A0X0JQVV9FU0NSMCAweDNiMgorI2VuZGlmCisjaWZuZGVmIE1TUl9QNF9CUFVfRVNDUjEKKyNkZWZpbmUgTVNSX1A0X0JQVV9FU0NSMSAweDNiMworI2VuZGlmCisjaWZuZGVmIE1TUl9QNF9CU1VfRVNDUjAKKyNkZWZpbmUgTVNSX1A0X0JTVV9FU0NSMCAweDNhMAorI2VuZGlmCisjaWZuZGVmIE1TUl9QNF9CU1VfRVNDUjEKKyNkZWZpbmUgTVNSX1A0X0JTVV9FU0NSMSAweDNhMQorI2VuZGlmCisjaWZuZGVmIE1TUl9QNF9DUlVfRVNDUjAKKyNkZWZpbmUgTVNSX1A0X0NSVV9FU0NSMCAweDNiOAorI2VuZGlmCisjaWZuZGVmIE1TUl9QNF9DUlVfRVNDUjEKKyNkZWZpbmUgTVNSX1A0X0NSVV9FU0NSMSAweDNiOQorI2VuZGlmCisjaWZuZGVmIE1TUl9QNF9DUlVfRVNDUjIKKyNkZWZpbmUgTVNSX1A0X0NSVV9FU0NSMiAweDNjYworI2VuZGlmCisjaWZuZGVmIE1TUl9QNF9DUlVfRVNDUjMKKyNkZWZpbmUgTVNSX1A0X0NSVV9FU0NSMyAweDNjZAorI2VuZGlmCisjaWZuZGVmIE1TUl9QNF9DUlVfRVNDUjQKKyNkZWZpbmUgTVNSX1A0X0NSVV9FU0NSNCAweDNlMAorI2VuZGlmCisjaWZuZGVmIE1TUl9QNF9DUlVfRVNDUjUKKyNkZWZpbmUgTVNSX1A0X0NSVV9FU0NSNSAweDNlMQorI2VuZGlmCisjaWZuZGVmIE1TUl9QNF9EQUNfRVNDUjAKKyNkZWZpbmUgTVNSX1A0X0RBQ19FU0NSMCAweDNhOAorI2VuZGlmCisjaWZuZGVmIE1TUl9QNF9EQUNfRVNDUjEKKyNkZWZpbmUgTVNSX1A0X0RBQ19FU0NSMSAweDNhOQorI2VuZGlmCisjaWZuZGVmIE1TUl9QNF9GSVJNX0VTQ1IwCisjZGVmaW5lIE1TUl9QNF9GSVJNX0VTQ1IwIDB4M2E0CisjZW5kaWYKKyNpZm5kZWYgTVNSX1A0X0ZJUk1fRVNDUjEKKyNkZWZpbmUgTVNSX1A0X0ZJUk1fRVNDUjEgMHgzYTUKKyNlbmRpZgorI2lmbmRlZiBNU1JfUDRfRkxBTUVfRVNDUjAKKyNkZWZpbmUgTVNSX1A0X0ZMQU1FX0VTQ1IwIDB4M2E2CisjZW5kaWYKKyNpZm5kZWYgTVNSX1A0X0ZMQU1FX0VTQ1IxCisjZGVmaW5lIE1TUl9QNF9GTEFNRV9FU0NSMSAweDNhNworI2VuZGlmCisjaWZuZGVmIE1TUl9QNF9GU0JfRVNDUjAKKyNkZWZpbmUgTVNSX1A0X0ZTQl9FU0NSMCAweDNhMgorI2VuZGlmCisjaWZuZGVmIE1TUl9QNF9GU0JfRVNDUjEKKyNkZWZpbmUgTVNSX1A0X0ZTQl9FU0NSMSAweDNhMworI2VuZGlmCisjaWZuZGVmIE1TUl9QNF9JUV9FU0NSMAorI2RlZmluZSBNU1JfUDRfSVFfRVNDUjAgMHgzYmEKKyNlbmRpZgorI2lmbmRlZiBNU1JfUDRfSVFfRVNDUjEKKyNkZWZpbmUgTVNSX1A0X0lRX0VTQ1IxIDB4M2JiCisjZW5kaWYKKyNpZm5kZWYgTVNSX1A0X0lTX0VTQ1IwCisjZGVmaW5lIE1TUl9QNF9JU19FU0NSMCAweDNiNAorI2VuZGlmCisjaWZuZGVmIE1TUl9QNF9JU19FU0NSMQorI2RlZmluZSBNU1JfUDRfSVNfRVNDUjEgMHgzYjUKKyNlbmRpZgorI2lmbmRlZiBNU1JfUDRfSVRMQl9FU0NSMAorI2RlZmluZSBNU1JfUDRfSVRMQl9FU0NSMCAweDNiNgorI2VuZGlmCisjaWZuZGVmIE1TUl9QNF9JVExCX0VTQ1IxCisjZGVmaW5lIE1TUl9QNF9JVExCX0VTQ1IxIDB4M2I3CisjZW5kaWYKKyNpZm5kZWYgTVNSX1A0X0lYX0VTQ1IwCisjZGVmaW5lIE1TUl9QNF9JWF9FU0NSMCAweDNjOAorI2VuZGlmCisjaWZuZGVmIE1TUl9QNF9JWF9FU0NSMQorI2RlZmluZSBNU1JfUDRfSVhfRVNDUjEgMHgzYzkKKyNlbmRpZgorI2lmbmRlZiBNU1JfUDRfTU9CX0VTQ1IwCisjZGVmaW5lIE1TUl9QNF9NT0JfRVNDUjAgMHgzYWEKKyNlbmRpZgorI2lmbmRlZiBNU1JfUDRfTU9CX0VTQ1IxCisjZGVmaW5lIE1TUl9QNF9NT0JfRVNDUjEgMHgzYWIKKyNlbmRpZgorI2lmbmRlZiBNU1JfUDRfTVNfRVNDUjAKKyNkZWZpbmUgTVNSX1A0X01TX0VTQ1IwIDB4M2MwCisjZW5kaWYKKyNpZm5kZWYgTVNSX1A0X01TX0VTQ1IxCisjZGVmaW5lIE1TUl9QNF9NU19FU0NSMSAweDNjMQorI2VuZGlmCisjaWZuZGVmIE1TUl9QNF9QTUhfRVNDUjAKKyNkZWZpbmUgTVNSX1A0X1BNSF9FU0NSMCAweDNhYworI2VuZGlmCisjaWZuZGVmIE1TUl9QNF9QTUhfRVNDUjEKKyNkZWZpbmUgTVNSX1A0X1BNSF9FU0NSMSAweDNhZAorI2VuZGlmCisjaWZuZGVmIE1TUl9QNF9SQVRfRVNDUjAKKyNkZWZpbmUgTVNSX1A0X1JBVF9FU0NSMCAweDNiYworI2VuZGlmCisjaWZuZGVmIE1TUl9QNF9SQVRfRVNDUjEKKyNkZWZpbmUgTVNSX1A0X1JBVF9FU0NSMSAweDNiZAorI2VuZGlmCisjaWZuZGVmIE1TUl9QNF9TQUFUX0VTQ1IwCisjZGVmaW5lIE1TUl9QNF9TQUFUX0VTQ1IwIDB4M2FlCisjZW5kaWYKKyNpZm5kZWYgTVNSX1A0X1NBQVRfRVNDUjEKKyNkZWZpbmUgTVNSX1A0X1NBQVRfRVNDUjEgMHgzYWYKKyNlbmRpZgorI2lmbmRlZiBNU1JfUDRfU1NVX0VTQ1IwCisjZGVmaW5lIE1TUl9QNF9TU1VfRVNDUjAgMHgzYmUKKyNlbmRpZgorLyogZ3Vlc3M6IG5vdCBkZWZpbmVkIGluIG1hbnVhbCAqLworI2lmbmRlZiBNU1JfUDRfU1NVX0VTQ1IxCisjZGVmaW5lIE1TUl9QNF9TU1VfRVNDUjEgMHgzYmYKKyNlbmRpZgorI2lmbmRlZiBNU1JfUDRfVEJQVV9FU0NSMAorI2RlZmluZSBNU1JfUDRfVEJQVV9FU0NSMCAweDNjMgorI2VuZGlmCisjaWZuZGVmIE1TUl9QNF9UQlBVX0VTQ1IxCisjZGVmaW5lIE1TUl9QNF9UQlBVX0VTQ1IxIDB4M2MzCisjZW5kaWYKKyNpZm5kZWYgTVNSX1A0X1RDX0VTQ1IwCisjZGVmaW5lIE1TUl9QNF9UQ19FU0NSMCAweDNjNAorI2VuZGlmCisjaWZuZGVmIE1TUl9QNF9UQ19FU0NSMQorI2RlZmluZSBNU1JfUDRfVENfRVNDUjEgMHgzYzUKKyNlbmRpZgorI2lmbmRlZiBNU1JfUDRfVTJMX0VTQ1IwCisjZGVmaW5lIE1TUl9QNF9VMkxfRVNDUjAgMHgzYjAKKyNlbmRpZgorI2lmbmRlZiBNU1JfUDRfVTJMX0VTQ1IxCisjZGVmaW5lIE1TUl9QNF9VMkxfRVNDUjEgMHgzYjEKKyNlbmRpZgorCisvKiBIeXBlci1UaHJlYWRpbmcgKi8KKyNpZm5kZWYgWDg2X0ZFQVRVUkVfSFQKKyNkZWZpbmUgWDg2X0ZFQVRVUkVfSFQJCSgwKjMyKzI4KQorI2VuZGlmCisKKyNlbmRpZiAvKiBPUF9NU1JfSCAqLwpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvbW9kdWxlL3g4Ni9vcF9ubWkuYyBiL29wcm9maWxlLTAuOS43L21vZHVsZS94ODYvb3Bfbm1pLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDBlNjE3YwotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L21vZHVsZS94ODYvb3Bfbm1pLmMKQEAgLTAsMCArMSwzNzYgQEAKKy8qKgorICogQGZpbGUgb3Bfbm1pLmMKKyAqIFNldHVwIGFuZCBoYW5kbGluZyBvZiBOTUkgUE1DIGludGVycnVwdHMKKyAqCisgKiBAcmVtYXJrIENvcHlyaWdodCAyMDAyIE9Qcm9maWxlIGF1dGhvcnMKKyAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCisgKgorICogQGF1dGhvciBKb2huIExldm9uCisgKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKKyAqLworCisjaW5jbHVkZSAib3Byb2ZpbGUuaCIKKyNpbmNsdWRlICJvcF9tc3IuaCIKKyNpbmNsdWRlICJvcF9hcGljLmgiCisjaW5jbHVkZSAib3BfdXRpbC5oIgorI2luY2x1ZGUgIm9wX3g4Nl9tb2RlbC5oIgorCitzdGF0aWMgc3RydWN0IG9wX21zcnMgY3B1X21zcnNbTlJfQ1BVU107CitzdGF0aWMgc3RydWN0IG9wX3g4Nl9tb2RlbF9zcGVjIGNvbnN0ICogbW9kZWwgPSBOVUxMOworCitzdGF0aWMgc3RydWN0IG9wX3g4Nl9tb2RlbF9zcGVjIGNvbnN0ICogZ2V0X21vZGVsKHZvaWQpCit7CisJaWYgKCFtb2RlbCkgewkKKwkJLyogcGljayBvdXQgb3VyIHBlci1tb2RlbCBmdW5jdGlvbiB0YWJsZSAqLworCQlzd2l0Y2ggKHN5c2N0bC5jcHVfdHlwZSkgeworCQljYXNlIENQVV9BVEhMT046CisJCWNhc2UgQ1BVX0hBTU1FUjoKKwkJCW1vZGVsID0gJm9wX2F0aGxvbl9zcGVjOworCQkJYnJlYWs7CisJCWNhc2UgQ1BVX1A0OgorCQkJbW9kZWwgPSAmb3BfcDRfc3BlYzsKKwkJCWJyZWFrOworI2lmZGVmIEhUX1NVUFBPUlQKKwkJY2FzZSBDUFVfUDRfSFQyOgorCQkJbW9kZWwgPSAmb3BfcDRfaHQyX3NwZWM7CisJCQlicmVhazsKKyNlbmRpZgorCQlkZWZhdWx0OgorCQkJbW9kZWwgPSAmb3BfcHByb19zcGVjOworCQkJYnJlYWs7CisJCX0KKwl9CisJcmV0dXJuIG1vZGVsOworfQorCithc21saW5rYWdlIHZvaWQgb3BfZG9fbm1pKHN0cnVjdCBwdF9yZWdzICogcmVncykKK3sKKwl1aW50IGNvbnN0IGNwdSA9IG9wX2NwdV9pZCgpOworCXN0cnVjdCBvcF9tc3JzIGNvbnN0ICogY29uc3QgbXNycyA9ICZjcHVfbXNyc1tjcHVdOworCisJbW9kZWwtPmNoZWNrX2N0cnMoY3B1LCBtc3JzLCByZWdzKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLSBQTUMgc2V0dXAgLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyB2b2lkIHBtY19zZXR1cF9jdHIodm9pZCAqIGR1bW15KQoreworCXVpbnQgY29uc3QgY3B1ID0gb3BfY3B1X2lkKCk7CisJc3RydWN0IG9wX21zcnMgY29uc3QgKiBjb25zdCBtc3JzID0gJmNwdV9tc3JzW2NwdV07CisJZ2V0X21vZGVsKCktPnNldHVwX2N0cnMobXNycyk7Cit9CisKKworc3RhdGljIGludCBwbWNfc2V0dXBfYWxsKHZvaWQpCit7CisJaWYgKHNtcF9jYWxsX2Z1bmN0aW9uKHBtY19zZXR1cF9jdHIsIE5VTEwsIDAsIDEpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlwbWNfc2V0dXBfY3RyKE5VTEwpOworCXJldHVybiAwOworfQorCisKK3N0YXRpYyB2b2lkIHBtY19zdGFydCh2b2lkICogaW5mbykKK3sKKwl1aW50IGNvbnN0IGNwdSA9IG9wX2NwdV9pZCgpOworCXN0cnVjdCBvcF9tc3JzIGNvbnN0ICogY29uc3QgbXNycyA9ICZjcHVfbXNyc1tjcHVdOworCisJaWYgKGluZm8gJiYgKCooKHVpbnQgKilpbmZvKSAhPSBjcHUpKQorCQlyZXR1cm47CisKKwlnZXRfbW9kZWwoKS0+c3RhcnQobXNycyk7Cit9CisKKworc3RhdGljIHZvaWQgcG1jX3N0b3Aodm9pZCAqIGluZm8pCit7CisJdWludCBjb25zdCBjcHUgPSBvcF9jcHVfaWQoKTsKKwlzdHJ1Y3Qgb3BfbXNycyBjb25zdCAqIGNvbnN0IG1zcnMgPSAmY3B1X21zcnNbY3B1XTsKKworCWlmIChpbmZvICYmICgqKCh1aW50ICopaW5mbykgIT0gY3B1KSkKKwkJcmV0dXJuOworCisJZ2V0X21vZGVsKCktPnN0b3AobXNycyk7Cit9CisKKworc3RhdGljIHZvaWQgcG1jX3NlbGVjdF9zdGFydCh1aW50IGNwdSkKK3sKKwlpZiAoY3B1ID09IG9wX2NwdV9pZCgpKQorCQlwbWNfc3RhcnQoTlVMTCk7CisJZWxzZQorCQlzbXBfY2FsbF9mdW5jdGlvbihwbWNfc3RhcnQsICZjcHUsIDAsIDEpOworfQorCisKK3N0YXRpYyB2b2lkIHBtY19zZWxlY3Rfc3RvcCh1aW50IGNwdSkKK3sKKwlpZiAoY3B1ID09IG9wX2NwdV9pZCgpKQorCQlwbWNfc3RvcChOVUxMKTsKKwllbHNlCisJCXNtcF9jYWxsX2Z1bmN0aW9uKHBtY19zdG9wLCAmY3B1LCAwLCAxKTsKK30KKworCitzdGF0aWMgdm9pZCBwbWNfc3RhcnRfYWxsKHZvaWQpCit7CisJaW50IGNwdSwgaTsKKworCWZvciAoY3B1ID0gMCA7IGNwdSA8IHNtcF9udW1fY3B1czsgY3B1KyspIHsKKwkJc3RydWN0IF9vcHJvZl9kYXRhICogZGF0YSA9ICZvcHJvZl9kYXRhW2NwdV07CisKKwkJZm9yIChpID0gMCA7IGkgPCBnZXRfbW9kZWwoKS0+bnVtX2NvdW50ZXJzIDsgKytpKSB7CisJCQlpZiAoc3lzY3RsLmN0cltpXS5lbmFibGVkKQorCQkJCWRhdGEtPmN0cl9jb3VudFtpXSA9IHN5c2N0bC5jdHJbaV0uY291bnQ7CisJCQllbHNlCisJCQkJZGF0YS0+Y3RyX2NvdW50W2ldID0gMDsKKwkJfQorCX0KKworCWluc3RhbGxfbm1pKCk7CisJc21wX2NhbGxfZnVuY3Rpb24ocG1jX3N0YXJ0LCBOVUxMLCAwLCAxKTsKKwlwbWNfc3RhcnQoTlVMTCk7Cit9CisKKworc3RhdGljIHZvaWQgcG1jX3N0b3BfYWxsKHZvaWQpCit7CisJc21wX2NhbGxfZnVuY3Rpb24ocG1jX3N0b3AsIE5VTEwsIDAsIDEpOworCXBtY19zdG9wKE5VTEwpOworCXJlc3RvcmVfbm1pKCk7Cit9CisKKworc3RhdGljIGludCBwbWNfY2hlY2tfcGFyYW1zKHZvaWQpCit7CisJaW50IGk7CisJaW50IGVuYWJsZWQgPSAwOworCisJZm9yIChpID0gMDsgaSA8IGdldF9tb2RlbCgpLT5udW1fY291bnRlcnM7IGkrKykgeworCQlpZiAoIXN5c2N0bC5jdHJbaV0uZW5hYmxlZCkKKwkJCWNvbnRpbnVlOworCisJCWVuYWJsZWQgPSAxOworCisJCWlmICghc3lzY3RsLmN0cltpXS51c2VyICYmICFzeXNjdGwuY3RyW2ldLmtlcm5lbCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJvcHJvZmlsZTogbmVpdGhlciBrZXJuZWwgbm9yIHVzZXIgIgorCQkJICAgICAgICJzZXQgZm9yIGNvdW50ZXIgJWRcbiIsIGkpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQlpZiAoY2hlY2tfcmFuZ2Uoc3lzY3RsLmN0cltpXS5jb3VudCwgMSwgT1BfTUFYX1BFUkZfQ09VTlQsCisJCQkiY3RyIGNvdW50IHZhbHVlICVkIG5vdCBpbiByYW5nZSAoJWQgJWxkKVxuIikpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCX0KKworCWlmICghZW5hYmxlZCkgeworCQlwcmludGsoS0VSTl9FUlIgIm9wcm9maWxlOiBubyBjb3VudGVycyBoYXZlIGJlZW4gZW5hYmxlZC5cbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgdm9pZCBmcmVlX21zcl9ncm91cChzdHJ1Y3Qgb3BfbXNyX2dyb3VwICogZ3JvdXApCit7CisJaWYgKGdyb3VwLT5hZGRycykKKwkJa2ZyZWUoZ3JvdXAtPmFkZHJzKTsKKwlpZiAoZ3JvdXAtPnNhdmVkKQorCQlrZnJlZShncm91cC0+c2F2ZWQpOworCWdyb3VwLT5hZGRycyA9IE5VTEw7CisJZ3JvdXAtPnNhdmVkID0gTlVMTDsKK30KKyAKKworc3RhdGljIHZvaWQgcG1jX3NhdmVfcmVnaXN0ZXJzKHZvaWQgKiBkdW1teSkKK3sKKwl1aW50IGk7CisJdWludCBjb25zdCBjcHUgPSBvcF9jcHVfaWQoKTsKKwl1aW50IGNvbnN0IG5yX2N0cnMgPSBnZXRfbW9kZWwoKS0+bnVtX2NvdW50ZXJzOworCXVpbnQgY29uc3QgbnJfY3RybHMgPSBnZXRfbW9kZWwoKS0+bnVtX2NvbnRyb2xzOworCXN0cnVjdCBvcF9tc3JfZ3JvdXAgKiBjb3VudGVycyA9ICZjcHVfbXNyc1tjcHVdLmNvdW50ZXJzOworCXN0cnVjdCBvcF9tc3JfZ3JvdXAgKiBjb250cm9scyA9ICZjcHVfbXNyc1tjcHVdLmNvbnRyb2xzOworCisJY291bnRlcnMtPmFkZHJzID0gTlVMTDsgCisJY291bnRlcnMtPnNhdmVkID0gTlVMTDsKKwljb250cm9scy0+YWRkcnMgPSBOVUxMOworCWNvbnRyb2xzLT5zYXZlZCA9IE5VTEw7CisKKwljb3VudGVycy0+YWRkcnMgPSBrbWFsbG9jKG5yX2N0cnMgKiBzaXplb2YodWludCksIEdGUF9LRVJORUwpOworCWlmICghY291bnRlcnMtPmFkZHJzKQorCQlnb3RvIGZhdWx0OworCisJY291bnRlcnMtPnNhdmVkID0ga21hbGxvYygKKwkJbnJfY3RycyAqIHNpemVvZihzdHJ1Y3Qgb3Bfc2F2ZWRfbXNyKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjb3VudGVycy0+c2F2ZWQpCisJCWdvdG8gZmF1bHQ7CisgCisJY29udHJvbHMtPmFkZHJzID0ga21hbGxvYyhucl9jdHJscyAqIHNpemVvZih1aW50KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjb250cm9scy0+YWRkcnMpCisJCWdvdG8gZmF1bHQ7CisKKwljb250cm9scy0+c2F2ZWQgPSBrbWFsbG9jKAorCQlucl9jdHJscyAqIHNpemVvZihzdHJ1Y3Qgb3Bfc2F2ZWRfbXNyKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjb250cm9scy0+c2F2ZWQpCisJCWdvdG8gZmF1bHQ7CisgCisJbW9kZWwtPmZpbGxfaW5fYWRkcmVzc2VzKCZjcHVfbXNyc1tjcHVdKTsKKworCWZvciAoaSA9IDA7IGkgPCBucl9jdHJzOyArK2kpIHsKKwkJcmRtc3IoY291bnRlcnMtPmFkZHJzW2ldLAorCQkJY291bnRlcnMtPnNhdmVkW2ldLmxvdywKKwkJCWNvdW50ZXJzLT5zYXZlZFtpXS5oaWdoKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgbnJfY3RybHM7ICsraSkgeworCQlyZG1zcihjb250cm9scy0+YWRkcnNbaV0sCisJCQljb250cm9scy0+c2F2ZWRbaV0ubG93LAorCQkJY29udHJvbHMtPnNhdmVkW2ldLmhpZ2gpOworCX0KKwlyZXR1cm47CisKK2ZhdWx0OgorCWZyZWVfbXNyX2dyb3VwKGNvdW50ZXJzKTsKKwlmcmVlX21zcl9ncm91cChjb250cm9scyk7Cit9CisgCisKK3N0YXRpYyB2b2lkIHBtY19yZXN0b3JlX3JlZ2lzdGVycyh2b2lkICogZHVtbXkpCit7CisJdWludCBpOworCXVpbnQgY29uc3QgY3B1ID0gb3BfY3B1X2lkKCk7CisJdWludCBjb25zdCBucl9jdHJzID0gZ2V0X21vZGVsKCktPm51bV9jb3VudGVyczsKKwl1aW50IGNvbnN0IG5yX2N0cmxzID0gZ2V0X21vZGVsKCktPm51bV9jb250cm9sczsKKwlzdHJ1Y3Qgb3BfbXNyX2dyb3VwICogY291bnRlcnMgPSAmY3B1X21zcnNbY3B1XS5jb3VudGVyczsKKwlzdHJ1Y3Qgb3BfbXNyX2dyb3VwICogY29udHJvbHMgPSAmY3B1X21zcnNbY3B1XS5jb250cm9sczsKKworCWlmIChjb250cm9scy0+YWRkcnMpIHsKKwkJZm9yIChpID0gMDsgaSA8IG5yX2N0cmxzOyArK2kpIHsKKwkJCXdybXNyKGNvbnRyb2xzLT5hZGRyc1tpXSwKKwkJCQljb250cm9scy0+c2F2ZWRbaV0ubG93LAorCQkJCWNvbnRyb2xzLT5zYXZlZFtpXS5oaWdoKTsKKwkJfQorCX0KKworCWlmIChjb3VudGVycy0+YWRkcnMpIHsKKwkJZm9yIChpID0gMDsgaSA8IG5yX2N0cnM7ICsraSkgeworCQkJd3Jtc3IoY291bnRlcnMtPmFkZHJzW2ldLAorCQkJCWNvdW50ZXJzLT5zYXZlZFtpXS5sb3csCisJCQkJY291bnRlcnMtPnNhdmVkW2ldLmhpZ2gpOworCQl9CisJfQorCisJZnJlZV9tc3JfZ3JvdXAoY291bnRlcnMpOworCWZyZWVfbXNyX2dyb3VwKGNvbnRyb2xzKTsKK30KKyAKKworc3RhdGljIGludCBwbWNfaW5pdCh2b2lkKQoreworCWludCBlcnIgPSAwOworIAorCWlmICgoZXJyID0gc21wX2NhbGxfZnVuY3Rpb24ocG1jX3NhdmVfcmVnaXN0ZXJzLCBOVUxMLCAwLCAxKSkpCisJCWdvdG8gb3V0OworCisJcG1jX3NhdmVfcmVnaXN0ZXJzKE5VTEwpOworIAorCWlmICgoZXJyID0gYXBpY19zZXR1cCgpKSkKKwkJZ290byBvdXRfcmVzdG9yZTsKKworCWlmICgoZXJyID0gc21wX2NhbGxfZnVuY3Rpb24obHZ0cGNfYXBpY19zZXR1cCwgTlVMTCwgMCwgMSkpKSB7CisJCWx2dHBjX2FwaWNfcmVzdG9yZShOVUxMKTsKKwkJZ290byBvdXRfcmVzdG9yZTsKKwl9CisKK291dDoKKwlyZXR1cm4gZXJyOworb3V0X3Jlc3RvcmU6CisJc21wX2NhbGxfZnVuY3Rpb24ocG1jX3Jlc3RvcmVfcmVnaXN0ZXJzLCBOVUxMLCAwLCAxKTsKKwlwbWNfcmVzdG9yZV9yZWdpc3RlcnMoTlVMTCk7CisJZ290byBvdXQ7Cit9CisKKyAKK3N0YXRpYyB2b2lkIHBtY19kZWluaXQodm9pZCkKK3sKKwlzbXBfY2FsbF9mdW5jdGlvbihsdnRwY19hcGljX3Jlc3RvcmUsIE5VTEwsIDAsIDEpOworCWx2dHBjX2FwaWNfcmVzdG9yZShOVUxMKTsKKworCWFwaWNfcmVzdG9yZSgpOworCisJc21wX2NhbGxfZnVuY3Rpb24ocG1jX3Jlc3RvcmVfcmVnaXN0ZXJzLCBOVUxMLCAwLCAxKTsKKwlwbWNfcmVzdG9yZV9yZWdpc3RlcnMoTlVMTCk7Cit9CisgCisKK3N0YXRpYyBjaGFyICogbmFtZXNbXSA9IHsiMCIsICIxIiwgIjIiLCAiMyIsICI0IiwgIjUiLCAiNiIsICI3IiwgIjgifTsKKworc3RhdGljIGludCBwbWNfYWRkX3N5c2N0bHMoY3RsX3RhYmxlICogbmV4dCkKK3sKKwljdGxfdGFibGUgKiBzdGFydCA9IG5leHQ7CisJY3RsX3RhYmxlICogdGFiOworCWludCBpLCBqOworCisJLyogbm93IGluaXQgdGhlIHN5c2N0bHMgKi8KKwlmb3IgKGk9MDsgaSA8IGdldF9tb2RlbCgpLT5udW1fY291bnRlcnM7IGkrKykgeworCQluZXh0LT5jdGxfbmFtZSA9IDE7CisJCW5leHQtPnByb2NuYW1lID0gbmFtZXNbaV07CisJCW5leHQtPm1vZGUgPSAwNzU1OworCisJCWlmICghKHRhYiA9IGttYWxsb2Moc2l6ZW9mKGN0bF90YWJsZSkqNywgR0ZQX0tFUk5FTCkpKQorCQkJZ290byBjbGVhbnVwOworCisJCW5leHQtPmNoaWxkID0gdGFiOworCisJCW1lbXNldCh0YWIsIDAsIHNpemVvZihjdGxfdGFibGUpKjcpOworCQl0YWJbMF0gPSAoKGN0bF90YWJsZSkgeyAxLCAiZW5hYmxlZCIsICZzeXNjdGxfcGFybXMuY3RyW2ldLmVuYWJsZWQsIHNpemVvZihpbnQpLCAwNjQ0LCBOVUxMLCBscHJvY19kb2ludHZlYywgTlVMTCwgfSk7CisJCXRhYlsxXSA9ICgoY3RsX3RhYmxlKSB7IDEsICJldmVudCIsICZzeXNjdGxfcGFybXMuY3RyW2ldLmV2ZW50LCBzaXplb2YoaW50KSwgMDY0NCwgTlVMTCwgbHByb2NfZG9pbnR2ZWMsIE5VTEwsICB9KTsKKwkJdGFiWzJdID0gKChjdGxfdGFibGUpIHsgMSwgImNvdW50IiwgJnN5c2N0bF9wYXJtcy5jdHJbaV0uY291bnQsIHNpemVvZihpbnQpLCAwNjQ0LCBOVUxMLCBscHJvY19kb2ludHZlYywgTlVMTCwgfSk7CisJCXRhYlszXSA9ICgoY3RsX3RhYmxlKSB7IDEsICJ1bml0X21hc2siLCAmc3lzY3RsX3Bhcm1zLmN0cltpXS51bml0X21hc2ssIHNpemVvZihpbnQpLCAwNjQ0LCBOVUxMLCBscHJvY19kb2ludHZlYywgTlVMTCwgfSk7CisJCXRhYls0XSA9ICgoY3RsX3RhYmxlKSB7IDEsICJrZXJuZWwiLCAmc3lzY3RsX3Bhcm1zLmN0cltpXS5rZXJuZWwsIHNpemVvZihpbnQpLCAwNjQ0LCBOVUxMLCBscHJvY19kb2ludHZlYywgTlVMTCwgfSk7CisJCXRhYls1XSA9ICgoY3RsX3RhYmxlKSB7IDEsICJ1c2VyIiwgJnN5c2N0bF9wYXJtcy5jdHJbaV0udXNlciwgc2l6ZW9mKGludCksIDA2NDQsIE5VTEwsIGxwcm9jX2RvaW50dmVjLCBOVUxMLCB9KTsKKwkJbmV4dCsrOworCX0KKworCXJldHVybiAwOworCitjbGVhbnVwOgorCW5leHQgPSBzdGFydDsKKwlmb3IgKGogPSAwOyBqIDwgaTsgaisrKSB7CisJCWtmcmVlKG5leHQtPmNoaWxkKTsKKwkJbmV4dCsrOworCX0KKwlyZXR1cm4gLUVGQVVMVDsKK30KKworIAorc3RhdGljIHZvaWQgcG1jX3JlbW92ZV9zeXNjdGxzKGN0bF90YWJsZSAqIG5leHQpCit7CisJaW50IGk7CisJZm9yIChpPTA7IGkgPCBnZXRfbW9kZWwoKS0+bnVtX2NvdW50ZXJzOyBpKyspIHsKKwkJa2ZyZWUobmV4dC0+Y2hpbGQpOworCQluZXh0Kys7CisJfQorfQorCisgCitzdGF0aWMgc3RydWN0IG9wX2ludF9vcGVyYXRpb25zIG9wX25taV9vcHMgPSB7CisJaW5pdDogcG1jX2luaXQsCisJZGVpbml0OiBwbWNfZGVpbml0LAorCWFkZF9zeXNjdGxzOiBwbWNfYWRkX3N5c2N0bHMsCisJcmVtb3ZlX3N5c2N0bHM6IHBtY19yZW1vdmVfc3lzY3RscywKKwljaGVja19wYXJhbXM6IHBtY19jaGVja19wYXJhbXMsCisJc2V0dXA6IHBtY19zZXR1cF9hbGwsCisJc3RhcnQ6IHBtY19zdGFydF9hbGwsCisJc3RvcDogcG1jX3N0b3BfYWxsLAorCXN0YXJ0X2NwdTogcG1jX3NlbGVjdF9zdGFydCwKKwlzdG9wX2NwdTogcG1jX3NlbGVjdF9zdG9wLAorfTsKKworCitzdHJ1Y3Qgb3BfaW50X29wZXJhdGlvbnMgY29uc3QgKiBvcF9pbnRfaW50ZXJmYWNlKCkKK3sKKwlyZXR1cm4gJm9wX25taV9vcHM7Cit9CmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9tb2R1bGUveDg2L29wX3J0Yy5jIGIvb3Byb2ZpbGUtMC45LjcvbW9kdWxlL3g4Ni9vcF9ydGMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hY2M1YzZmCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvbW9kdWxlL3g4Ni9vcF9ydGMuYwpAQCAtMCwwICsxLDE5NCBAQAorLyoqCisgKiBAZmlsZSBvcF9ydGMuYworICogU2V0dXAgYW5kIGhhbmRsaW5nIG9mIFJUQyBpbnRlcnJ1cHRzCisgKgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMiBPUHJvZmlsZSBhdXRob3JzCisgKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORworICoKKyAqIEBhdXRob3IgQm9iIE1vbnRnb21lcnkKKyAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQorICogQGF1dGhvciBKb2huIExldm9uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L21jMTQ2ODE4cnRjLmg+CisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorCisjaW5jbHVkZSAib3Byb2ZpbGUuaCIKKyNpbmNsdWRlICJvcF9hcmNoLmgiCisjaW5jbHVkZSAib3BfdXRpbC5oIgorCisjZGVmaW5lIFJUQ19JT19QT1JUUyAyCisKKy8qIG5vdCBpbiAyLjIgKi8KKyNpZm5kZWYgUlRDX0lSUQorI2RlZmluZSBSVENfSVJRIDgKKyNlbmRpZgorCisvKiAtLS0tLS0tLS0tLS0tLS0tIFJUQyBoYW5kbGVyIC0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgdm9pZCBkb19ydGNfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKiBkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICogcmVncykKK3sKKwl1aW50IGNwdSA9IG9wX2NwdV9pZCgpOworCXVuc2lnbmVkIGNoYXIgaW50cl9mbGFnczsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaW50IHVzZXJtb2RlID0gdXNlcl9tb2RlKHJlZ3MpOworCWlmICgoc3lzY3RsLmN0clswXS5rZXJuZWwgJiYgdXNlcm1vZGUpCisJCXx8IChzeXNjdGwuY3RyWzBdLnVzZXIgJiYgIXVzZXJtb2RlKSkKKwkJcmV0dXJuOworCisJbG9ja19ydGMoZmxhZ3MpOworCisJLyogcmVhZCBhbmQgYWNrIHRoZSBpbnRlcnJ1cHQgKi8KKwlpbnRyX2ZsYWdzID0gQ01PU19SRUFEKFJUQ19JTlRSX0ZMQUdTKTsKKwkvKiBJcyB0aGlzIG15IHR5cGUgb2YgaW50ZXJydXB0PyAqLworCWlmIChpbnRyX2ZsYWdzICYgUlRDX1BGKSB7CisJCW9wX2RvX3Byb2ZpbGUoY3B1LCBpbnN0cnVjdGlvbl9wb2ludGVyKHJlZ3MpLCBJUlFfRU5BQkxFRChyZWdzKSwgMCk7CisJfQorCisJdW5sb2NrX3J0YyhmbGFncyk7CisKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbnQgcnRjX3NldHVwKHZvaWQpCit7CisJdW5zaWduZWQgY2hhciB0bXBfY29udHJvbDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGNoYXIgdG1wX2ZyZXFfc2VsZWN0OworCXVuc2lnbmVkIGxvbmcgdGFyZ2V0OworCXVuc2lnbmVkIGludCBleHAsIGZyZXE7CisKKwlsb2NrX3J0YyhmbGFncyk7CisKKwkvKiBkaXNhYmxlIHBlcmlvZGljIGludGVycnVwdHMgKi8KKwl0bXBfY29udHJvbCA9IENNT1NfUkVBRChSVENfQ09OVFJPTCk7CisJdG1wX2NvbnRyb2wgJj0gflJUQ19QSUU7CisJQ01PU19XUklURSh0bXBfY29udHJvbCwgUlRDX0NPTlRST0wpOworCUNNT1NfUkVBRChSVENfSU5UUl9GTEFHUyk7CisKKwkvKiBTZXQgdGhlIGZyZXF1ZW5jeSBmb3IgcGVyaW9kaWMgaW50ZXJydXB0cyBieSBmaW5kaW5nIHRoZQorCSAqIGNsb3Nlc3QgcG93ZXIgb2YgdHdvIHdpdGhpbiB0aGUgYWxsb3dlZCByYW5nZS4KKwkgKi8KKworCXRhcmdldCA9IHN5c2N0bC5jdHJbMF0uY291bnQ7CisKKwlleHAgPSAwOworCXdoaWxlICh0YXJnZXQgPiAoMSA8PCBleHApICsgKCgxIDw8IGV4cCkgPj4gMSkpCisJCWV4cCsrOworCWZyZXEgPSAxNiAtIGV4cDsKKworCXRtcF9mcmVxX3NlbGVjdCA9IENNT1NfUkVBRChSVENfRlJFUV9TRUxFQ1QpOworCXRtcF9mcmVxX3NlbGVjdCA9ICh0bXBfZnJlcV9zZWxlY3QgJiAweGYwKSB8IGZyZXE7CisJQ01PU19XUklURSh0bXBfZnJlcV9zZWxlY3QsIFJUQ19GUkVRX1NFTEVDVCk7CisKKwkvKiBVcGRhdGUgL3Byb2Mgd2l0aCB0aGUgYWN0dWFsIGZyZXF1ZW5jeS4gKi8KKwlzeXNjdGxfcGFybXMuY3RyWzBdLmNvdW50ID0gc3lzY3RsLmN0clswXS5jb3VudCA9IDEgPDwgZXhwOworCisJdW5sb2NrX3J0YyhmbGFncyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHJ0Y19zdGFydCh2b2lkKQoreworCXVuc2lnbmVkIGNoYXIgdG1wX2NvbnRyb2w7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWxvY2tfcnRjKGZsYWdzKTsKKworCS8qIEVuYWJsZSBwZXJpb2RpYyBpbnRlcnJ1cHRzICovCisJdG1wX2NvbnRyb2wgPSBDTU9TX1JFQUQoUlRDX0NPTlRST0wpOworCXRtcF9jb250cm9sIHw9IFJUQ19QSUU7CisJQ01PU19XUklURSh0bXBfY29udHJvbCwgUlRDX0NPTlRST0wpOworCisJLyogcmVhZCB0aGUgZmxhZ3MgcmVnaXN0ZXIgdG8gc3RhcnQgaW50ZXJydXB0cyAqLworCUNNT1NfUkVBRChSVENfSU5UUl9GTEFHUyk7CisKKwl1bmxvY2tfcnRjKGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgcnRjX3N0b3Aodm9pZCkKK3sKKwl1bnNpZ25lZCBjaGFyIHRtcF9jb250cm9sOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlsb2NrX3J0YyhmbGFncyk7CisKKwkvKiBkaXNhYmxlIHBlcmlvZGljIGludGVycnVwdHMgKi8KKwl0bXBfY29udHJvbCA9IENNT1NfUkVBRChSVENfQ09OVFJPTCk7CisJdG1wX2NvbnRyb2wgJj0gflJUQ19QSUU7CisJQ01PU19XUklURSh0bXBfY29udHJvbCwgUlRDX0NPTlRST0wpOworCUNNT1NfUkVBRChSVENfSU5UUl9GTEFHUyk7CisKKwl1bmxvY2tfcnRjKGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgcnRjX3N0YXJ0X2NwdSh1aW50IGNwdSkKK3sKKwlydGNfc3RhcnQoKTsKK30KKworc3RhdGljIHZvaWQgcnRjX3N0b3BfY3B1KHVpbnQgY3B1KQoreworCXJ0Y19zdG9wKCk7Cit9CisKK3N0YXRpYyBpbnQgcnRjX2NoZWNrX3BhcmFtcyh2b2lkKQoreworCWludCB0YXJnZXQgPSBzeXNjdGwuY3RyWzBdLmNvdW50OworCisJaWYgKGNoZWNrX3JhbmdlKHRhcmdldCwgT1BfTUlOX1JUQ19DT1VOVCwgT1BfTUFYX1JUQ19DT1VOVCwKKwkJIlJUQyB2YWx1ZSAlZCBpcyBvdXQgb2YgcmFuZ2UgKCVkLSVkKVxuIikpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcnRjX2luaXQodm9pZCkKK3sKKwkgLyogcmVxdWVzdF9yZWdpb24gcmV0dXJucyAwIG9uICoqZmFpbHVyZSoqICovCisJaWYgKCFyZXF1ZXN0X3JlZ2lvbl9jaGVjayhSVENfUE9SVCgwKSwgUlRDX0lPX1BPUlRTLCAib3Byb2ZpbGUiKSkgeworCQlwcmludGsoS0VSTl9FUlIgIm9wcm9maWxlOiBjYW4ndCBnZXQgUlRDIEkvTyBQb3J0c1xuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJLyogcmVxdWVzdF9pcnEgcmV0dXJucyAwIG9uICoqc3VjY2VzcyoqICovCisJaWYgKHJlcXVlc3RfaXJxKFJUQ19JUlEsIGRvX3J0Y19pbnRlcnJ1cHQsCisJCQlTQV9JTlRFUlJVUFQsICJvcHJvZmlsZSIsIE5VTEwpKSB7CisJCXByaW50ayhLRVJOX0VSUiAib3Byb2ZpbGU6IElSUSVkIGJ1c3kgXG4iLCBSVENfSVJRKTsKKwkJcmVsZWFzZV9yZWdpb24oUlRDX1BPUlQoMCksIFJUQ19JT19QT1JUUyk7CisJCXJldHVybiAtRUJVU1k7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBydGNfZGVpbml0KHZvaWQpCit7CisJZnJlZV9pcnEoUlRDX0lSUSwgTlVMTCk7CisJcmVsZWFzZV9yZWdpb24oUlRDX1BPUlQoMCksIFJUQ19JT19QT1JUUyk7Cit9CisKK3N0YXRpYyBpbnQgcnRjX2FkZF9zeXNjdGxzKGN0bF90YWJsZSAqIG5leHQpCit7CisJKm5leHQgPSAoKGN0bF90YWJsZSkgeyAxLCAicnRjX3ZhbHVlIiwgJnN5c2N0bF9wYXJtcy5jdHJbMF0uY291bnQsIHNpemVvZihpbnQpLCAwNjAwLCBOVUxMLCBscHJvY19kb2ludHZlYywgTlVMTCwgfSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHJ0Y19yZW1vdmVfc3lzY3RscyhjdGxfdGFibGUgKiBuZXh0KQoreworCS8qIG5vdGhpbmcgdG8gZG8gKi8KK30KKworc3RydWN0IG9wX2ludF9vcGVyYXRpb25zIG9wX3J0Y19vcHMgPSB7CisJaW5pdDogcnRjX2luaXQsCisJZGVpbml0OiBydGNfZGVpbml0LAorCWFkZF9zeXNjdGxzOiBydGNfYWRkX3N5c2N0bHMsCisJcmVtb3ZlX3N5c2N0bHM6IHJ0Y19yZW1vdmVfc3lzY3RscywKKwljaGVja19wYXJhbXM6IHJ0Y19jaGVja19wYXJhbXMsCisJc2V0dXA6IHJ0Y19zZXR1cCwKKwlzdGFydDogcnRjX3N0YXJ0LAorCXN0b3A6IHJ0Y19zdG9wLAorCXN0YXJ0X2NwdTogcnRjX3N0YXJ0X2NwdSwKKwlzdG9wX2NwdTogcnRjX3N0b3BfY3B1LAorfTsKZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L21vZHVsZS94ODYvb3Bfc3lzY2FsbHMuYyBiL29wcm9maWxlLTAuOS43L21vZHVsZS94ODYvb3Bfc3lzY2FsbHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZmI2MzJkCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvbW9kdWxlL3g4Ni9vcF9zeXNjYWxscy5jCkBAIC0wLDAgKzEsMzUyIEBACisvKioKKyAqIEBmaWxlIG9wX3N5c2NhbGxzLmMKKyAqIFRyYWNpbmcgb2Ygc3lzdGVtIGNhbGxzCisgKgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMiBPUHJvZmlsZSBhdXRob3JzCisgKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORworICoKKyAqIEBhdXRob3IgSm9obiBMZXZvbgorICogQGF1dGhvciBQaGlsaXBwZSBFbGllCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvdW5pc3RkLmg+CisjaW5jbHVkZSA8bGludXgvbW1hbi5oPgorI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KKworI2luY2x1ZGUgIm9wcm9maWxlLmgiCisKK3ZvaWQgb3Byb2ZfcHV0X25vdGUoc3RydWN0IG9wX25vdGUgKiBzYW1wKTsKK3ZvaWQgX19vcHJvZl9wdXRfbm90ZShzdHJ1Y3Qgb3Bfbm90ZSAqIHNhbXApOworCitleHRlcm4gc3BpbmxvY2tfdCBub3RlX2xvY2s7CisKKy8qIC0tLS0tLS0tLS0tLSBzeXN0ZW0gY2FsbHMgLS0tLS0tLS0tLS0tLS0tICovCisKK3N0cnVjdCBtbWFwX2FyZ19zdHJ1Y3QgeworCXVuc2lnbmVkIGxvbmcgYWRkcjsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBsZW47CisgICAgICAgIHVuc2lnbmVkIGxvbmcgcHJvdDsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBmZDsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQ7Cit9OworCithc21saW5rYWdlIHN0YXRpYyBpbnQgKCpvbGRfc3lzX2ZvcmspKHN0cnVjdCBwdF9yZWdzKTsKK2FzbWxpbmthZ2Ugc3RhdGljIGludCAoKm9sZF9zeXNfdmZvcmspKHN0cnVjdCBwdF9yZWdzKTsKK2FzbWxpbmthZ2Ugc3RhdGljIGludCAoKm9sZF9zeXNfY2xvbmUpKHN0cnVjdCBwdF9yZWdzKTsKK2FzbWxpbmthZ2Ugc3RhdGljIGludCAoKm9sZF9zeXNfZXhlY3ZlKShzdHJ1Y3QgcHRfcmVncyk7Cithc21saW5rYWdlIHN0YXRpYyBpbnQgKCpvbGRfb2xkX21tYXApKHN0cnVjdCBtbWFwX2FyZ19zdHJ1Y3QgKik7CisjaWZkZWYgSEFWRV9NTUFQMgorYXNtbGlua2FnZSBzdGF0aWMgbG9uZyAoKm9sZF9zeXNfbW1hcDIpKHVsb25nLCB1bG9uZywgdWxvbmcsIHVsb25nLCB1bG9uZywgdWxvbmcpOworI2VuZGlmCithc21saW5rYWdlIHN0YXRpYyBsb25nICgqb2xkX3N5c19pbml0X21vZHVsZSkoY2hhciBjb25zdCAqLCBzdHJ1Y3QgbW9kdWxlICopOworYXNtbGlua2FnZSBzdGF0aWMgbG9uZyAoKm9sZF9zeXNfZXhpdCkoaW50KTsKKworLyogY2FsbGVkIHdpdGggbm90ZV9sb2NrIGhlbGQgKi8KK3N0YXRpYyB2b2lkIG9wcm9mX291dHB1dF9tYXAodWxvbmcgYWRkciwgdWxvbmcgbGVuLCB1bG9uZyBvZmZzZXQsCisJCQkgICAgIHN0cnVjdCBmaWxlICogZmlsZSwgaW50IGlzX2V4ZWN2ZSkKK3sKKwlzdHJ1Y3Qgb3Bfbm90ZSBub3RlOworCisJLyogZG9uJ3QgYm90aGVyIHdpdGggL2Rldi96ZXJvIG1hcHBpbmdzIGV0Yy4gKi8KKwlpZiAoIWxlbikKKwkJcmV0dXJuOworCisJbm90ZS5waWQgPSBjdXJyZW50LT5waWQ7CisJbm90ZS50Z2lkID0gb3BfZ2V0X3RnaWQoKTsKKwlub3RlLmFkZHIgPSBhZGRyOworCW5vdGUubGVuID0gbGVuOworCW5vdGUub2Zmc2V0ID0gb2Zmc2V0OworCW5vdGUudHlwZSA9IGlzX2V4ZWN2ZSA/IE9QX0VYRUMgOiBPUF9NQVA7CisJbm90ZS5oYXNoID0gaGFzaF9wYXRoKGZpbGUpOworCWlmIChub3RlLmhhc2ggPT0gLTEpCisJCXJldHVybjsKKwkvKiBob2xkaW5nIG5vdGUgbG9jayAqLworCV9fb3Byb2ZfcHV0X25vdGUoJm5vdGUpOworfQorCitzdGF0aWMgaW50IG9wcm9mX291dHB1dF9tYXBzKHN0cnVjdCB0YXNrX3N0cnVjdCAqIHRhc2spCit7CisJaW50IHNpemU9MDsKKwlzdHJ1Y3QgbW1fc3RydWN0ICogbW07CisJc3RydWN0IHZtX2FyZWFfc3RydWN0ICogbWFwOworCisJLyogd2UgZG9uJ3QgbmVlZCB0byB3b3JyeSBhYm91dCBtbV91c2VycyBoZXJlLCBzaW5jZSB0aGVyZSBpcyBhdAorCSAgIGxlYXN0IG9uZSB1c2VyIChjdXJyZW50KSwgYW5kIGlmIHRoZXJlJ3Mgb3RoZXIgY29kZSB1c2luZyB0aGlzCisJICAgbW0sIHRoZW4gbW1fdXNlcnMgbXVzdCBiZSBhdCBsZWFzdCAyOyB3ZSBzaG91bGQgbmV2ZXIgaGF2ZSB0bworCSAgIG1tcHV0KCkgaGVyZS4gKi8KKworCWlmICghKG1tID0gdGFzay0+bW0pKQorCQlnb3RvIG91dDsKKworCWxvY2tfbW1hcChtbSk7CisJc3Bpbl9sb2NrKCZub3RlX2xvY2spOworCisJLyogV2UgbmVlZCB0d28gcGFzcywgZGFlbW9uIGFzc3VtZSB0aGFuIHRoZSBmaXJzdCBtbWFwIG5vdGlmaWNhdGlvbgorCSAqIGlzIGZvciB0aGUgZXhlY3V0YWJsZSBidXQgc29tZSBwcm9jZXNzIGRvZXNuJ3QgZm9sbG93IHRoaXMgbW9kZWwuCisJICovCisJZm9yIChtYXAgPSBtbS0+bW1hcDsgbWFwOyBtYXAgPSBtYXAtPnZtX25leHQpIHsKKwkJaWYgKCEobWFwLT52bV9mbGFncyAmIFZNX0VYRUMpIHx8ICFtYXAtPnZtX2ZpbGUpCisJCQljb250aW51ZTsKKwkJaWYgKCEobWFwLT52bV9mbGFncyAmIFZNX0VYRUNVVEFCTEUpKQorCQkJY29udGludWU7CisKKwkJb3Byb2Zfb3V0cHV0X21hcChtYXAtPnZtX3N0YXJ0LCBtYXAtPnZtX2VuZC1tYXAtPnZtX3N0YXJ0LAorCQkJR0VUX1ZNX09GRlNFVChtYXApLCBtYXAtPnZtX2ZpbGUsIDEpOworCX0KKwlmb3IgKG1hcCA9IG1tLT5tbWFwOyBtYXA7IG1hcCA9IG1hcC0+dm1fbmV4dCkgeworCQlpZiAoIShtYXAtPnZtX2ZsYWdzICYgVk1fRVhFQykgfHwgIW1hcC0+dm1fZmlsZSkKKwkJCWNvbnRpbnVlOworCQlpZiAobWFwLT52bV9mbGFncyAmIFZNX0VYRUNVVEFCTEUpCisJCQljb250aW51ZTsKKworCQlvcHJvZl9vdXRwdXRfbWFwKG1hcC0+dm1fc3RhcnQsIG1hcC0+dm1fZW5kLW1hcC0+dm1fc3RhcnQsCisJCQlHRVRfVk1fT0ZGU0VUKG1hcCksIG1hcC0+dm1fZmlsZSwgMCk7CisJfQorCisJc3Bpbl91bmxvY2soJm5vdGVfbG9jayk7CisJdW5sb2NrX21tYXAobW0pOworCitvdXQ6CisJcmV0dXJuIHNpemU7Cit9CisKK2FzbWxpbmthZ2Ugc3RhdGljIGludCBteV9zeXNfZXhlY3ZlKHN0cnVjdCBwdF9yZWdzIHJlZ3MpCit7CisJY2hhciAqIGZpbGVuYW1lOworCWludCByZXQ7CisKKwlNT0RfSU5DX1VTRV9DT1VOVDsKKworCWxvY2tfZXhlY3ZlKCk7CisKKwlmaWxlbmFtZSA9IGdldG5hbWUoKGNoYXIgKilyZWdzLmVieCk7CisJaWYgKElTX0VSUihmaWxlbmFtZSkpIHsKKwkJcmV0ID0gUFRSX0VSUihmaWxlbmFtZSk7CisJCWdvdG8gb3V0OworCX0KKwlyZXQgPSBkb19leGVjdmUoZmlsZW5hbWUsIChjaGFyICoqKXJlZ3MuZWN4LCAoY2hhciAqKilyZWdzLmVkeCwgJnJlZ3MpOworCisJaWYgKCFyZXQpIHsKKwkJUFRSQUNFX09GRihjdXJyZW50KTsKKwkJb3Byb2Zfb3V0cHV0X21hcHMoY3VycmVudCk7CisJfQorCisJcHV0bmFtZShmaWxlbmFtZSk7CisKK291dDoKKwl1bmxvY2tfZXhlY3ZlKCk7CisJTU9EX0RFQ19VU0VfQ09VTlQ7CisgICAgICAgIHJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIG91dF9tbWFwKHVsb25nIGFkZHIsIHVsb25nIGxlbiwgdWxvbmcgcHJvdCwgdWxvbmcgZmxhZ3MsIHVsb25nIGZkLAorCQkgICAgIHVsb25nIG9mZnNldCkKK3sKKwlzdHJ1Y3QgZmlsZSAqIGZpbGU7CisKKwlsb2NrX291dF9tbWFwKCk7CisKKwlmaWxlID0gZmdldChmZCk7CisJaWYgKCFmaWxlKQorCQlnb3RvIG91dDsKKworCXNwaW5fbG9jaygmbm90ZV9sb2NrKTsKKwlvcHJvZl9vdXRwdXRfbWFwKGFkZHIsIGxlbiwgb2Zmc2V0LCBmaWxlLCAwKTsKKwlzcGluX3VubG9jaygmbm90ZV9sb2NrKTsKKworCWZwdXQoZmlsZSk7CisKK291dDoKKwl1bmxvY2tfb3V0X21tYXAoKTsKK30KKworI2lmZGVmIEhBVkVfTU1BUDIKK2FzbWxpbmthZ2Ugc3RhdGljIGludCBteV9zeXNfbW1hcDIodWxvbmcgYWRkciwgdWxvbmcgbGVuLAorCXVsb25nIHByb3QsIHVsb25nIGZsYWdzLCB1bG9uZyBmZCwgdWxvbmcgcGdvZmYpCit7CisJaW50IHJldDsKKworCU1PRF9JTkNfVVNFX0NPVU5UOworCisJcmV0ID0gb2xkX3N5c19tbWFwMihhZGRyLCBsZW4sIHByb3QsIGZsYWdzLCBmZCwgcGdvZmYpOworCisJaWYgKChwcm90ICYgUFJPVF9FWEVDKSAmJiByZXQgPj0gMCkKKwkJb3V0X21tYXAocmV0LCBsZW4sIHByb3QsIGZsYWdzLCBmZCwgcGdvZmYgPDwgUEFHRV9TSElGVCk7CisKKwlNT0RfREVDX1VTRV9DT1VOVDsKKwlyZXR1cm4gcmV0OworfQorI2VuZGlmCisKK2FzbWxpbmthZ2Ugc3RhdGljIGludCBteV9vbGRfbW1hcChzdHJ1Y3QgbW1hcF9hcmdfc3RydWN0ICogYXJnKQoreworCWludCByZXQ7CisKKwlNT0RfSU5DX1VTRV9DT1VOVDsKKworCXJldCA9IG9sZF9vbGRfbW1hcChhcmcpOworCisJaWYgKHJldCA+PSAwKSB7CisJCXN0cnVjdCBtbWFwX2FyZ19zdHJ1Y3QgYTsKKworCQlpZiAoY29weV9mcm9tX3VzZXIoJmEsIGFyZywgc2l6ZW9mKGEpKSkgeworCQkJcmV0ID0gLUVGQVVMVDsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJaWYgKGEucHJvdCZQUk9UX0VYRUMpCisJCQlvdXRfbW1hcChyZXQsIGEubGVuLCBhLnByb3QsIGEuZmxhZ3MsIGEuZmQsIGEub2Zmc2V0KTsKKwl9CisKK291dDoKKwlNT0RfREVDX1VTRV9DT1VOVDsKKwlyZXR1cm4gcmV0OworfQorCitpbmxpbmUgc3RhdGljIHZvaWQgb3Byb2ZfcmVwb3J0X2ZvcmsodTMyIG9sZF9waWQsIHUzMiBuZXdfcGlkLCB1MzIgb2xkX3RnaWQsIHUzMiBuZXdfdGdpZCkKK3sKKwlzdHJ1Y3Qgb3Bfbm90ZSBub3RlOworCisJbm90ZS50eXBlID0gT1BfRk9SSzsKKwlub3RlLnBpZCA9IG9sZF9waWQ7CisJbm90ZS50Z2lkID0gb2xkX3RnaWQ7CisJbm90ZS5hZGRyID0gbmV3X3BpZDsKKwlub3RlLmxlbiA9IG5ld190Z2lkOworCW9wcm9mX3B1dF9ub3RlKCZub3RlKTsKK30KKworYXNtbGlua2FnZSBzdGF0aWMgaW50IG15X3N5c19mb3JrKHN0cnVjdCBwdF9yZWdzIHJlZ3MpCit7CisJdTMyIHBpZCA9IGN1cnJlbnQtPnBpZDsKKwl1MzIgdGdpZCA9IG9wX2dldF90Z2lkKCk7CisJaW50IHJldDsKKworCU1PRF9JTkNfVVNFX0NPVU5UOworCisJcmV0ID0gb2xkX3N5c19mb3JrKHJlZ3MpOworCWlmIChyZXQpCisJCW9wcm9mX3JlcG9ydF9mb3JrKHBpZCwgcmV0LCB0Z2lkLCByZXQpOworCU1PRF9ERUNfVVNFX0NPVU5UOworCXJldHVybiByZXQ7Cit9CisKK2FzbWxpbmthZ2Ugc3RhdGljIGludCBteV9zeXNfdmZvcmsoc3RydWN0IHB0X3JlZ3MgcmVncykKK3sKKwl1MzIgcGlkID0gY3VycmVudC0+cGlkOworCXUzMiB0Z2lkID0gb3BfZ2V0X3RnaWQoKTsKKwlpbnQgcmV0OworCisJTU9EX0lOQ19VU0VfQ09VTlQ7CisJcmV0ID0gb2xkX3N5c192Zm9yayhyZWdzKTsKKwlpZiAocmV0KQorCQlvcHJvZl9yZXBvcnRfZm9yayhwaWQsIHJldCwgdGdpZCwgcmV0KTsKKwlNT0RfREVDX1VTRV9DT1VOVDsKKwlyZXR1cm4gcmV0OworfQorCithc21saW5rYWdlIHN0YXRpYyBpbnQgbXlfc3lzX2Nsb25lKHN0cnVjdCBwdF9yZWdzIHJlZ3MpCit7CisJdTMyIHBpZCA9IGN1cnJlbnQtPnBpZDsKKwl1MzIgdGdpZCA9IG9wX2dldF90Z2lkKCk7CisjaWYgVl9BVF9MRUFTVCgyLCA0LCAwKQorCXUzMiBjbG9uZV9mbGFncyA9IHJlZ3MuZWJ4OworI2VuZGlmCisJaW50IHJldDsKKworCU1PRF9JTkNfVVNFX0NPVU5UOworCXJldCA9IG9sZF9zeXNfY2xvbmUocmVncyk7CisJaWYgKHJldCkgeworI2lmIFZfQVRfTEVBU1QoMiwgNCwgMCkKKwkJaWYgKGNsb25lX2ZsYWdzICYgQ0xPTkVfVEhSRUFEKQorCQkJb3Byb2ZfcmVwb3J0X2ZvcmsocGlkLCByZXQsIHRnaWQsIHRnaWQpOworCQllbHNlCisjZW5kaWYKKwkJCW9wcm9mX3JlcG9ydF9mb3JrKHBpZCwgcmV0LCB0Z2lkLCByZXQpOworCX0KKwlNT0RfREVDX1VTRV9DT1VOVDsKKwlyZXR1cm4gcmV0OworfQorCithc21saW5rYWdlIHN0YXRpYyBsb25nIG15X3N5c19pbml0X21vZHVsZShjaGFyIGNvbnN0ICogbmFtZV91c2VyLCBzdHJ1Y3QgbW9kdWxlICogbW9kX3VzZXIpCit7CisJbG9uZyByZXQ7CisKKwlNT0RfSU5DX1VTRV9DT1VOVDsKKworCXJldCA9IG9sZF9zeXNfaW5pdF9tb2R1bGUobmFtZV91c2VyLCBtb2RfdXNlcik7CisKKwlpZiAocmV0ID49IDApIHsKKwkJc3RydWN0IG9wX25vdGUgbm90ZTsKKworCQlub3RlLnR5cGUgPSBPUF9EUk9QX01PRFVMRVM7CisJCW9wcm9mX3B1dF9ub3RlKCZub3RlKTsKKwl9CisJTU9EX0RFQ19VU0VfQ09VTlQ7CisJcmV0dXJuIHJldDsKK30KKworLyogdXNlZCBmcm9tIGRvX25taSAqLworYXNtbGlua2FnZSBsb25nIG15X3N5c19leGl0KGludCBlcnJvcl9jb2RlKQoreworCXN0cnVjdCBvcF9ub3RlIG5vdGU7CisKKwlNT0RfSU5DX1VTRV9DT1VOVDsKKworCW5vdGUudHlwZSA9IE9QX0VYSVQ7CisJbm90ZS5waWQgPSBjdXJyZW50LT5waWQ7CisJbm90ZS50Z2lkID0gb3BfZ2V0X3RnaWQoKTsKKwlvcHJvZl9wdXRfbm90ZSgmbm90ZSk7CisKKwkvKiB0aGlzIGxvb2tzIFVQLWRhbmdlcm91cywgYXMgdGhlIGV4aXQgc2xlZXBzIGFuZCB3ZSBkb24ndAorCSAqIGhhdmUgYSB1c2UgY291bnQsIGJ1dCBpbiBmYWN0IGl0cyBvayBhcyBzeXNfZXhpdCBpcyBub3JldHVybiwKKwkgKiBzbyB3ZSBjYW4gbmV2ZXIgY29tZSBiYWNrIHRvIHRoaXMgbm9uLWV4aXN0ZW50IGV4ZWMgcGFnZQorCSAqLworCU1PRF9ERUNfVVNFX0NPVU5UOworCXJldHVybiBvbGRfc3lzX2V4aXQoZXJyb3JfY29kZSk7Cit9CisKK2V4dGVybiB2b2lkICogc3lzX2NhbGxfdGFibGVbXTsKKwordm9pZCBvcF9zYXZlX3N5c2NhbGxzKHZvaWQpCit7CisJb2xkX3N5c19mb3JrID0gc3lzX2NhbGxfdGFibGVbX19OUl9mb3JrXTsKKwlvbGRfc3lzX3Zmb3JrID0gc3lzX2NhbGxfdGFibGVbX19OUl92Zm9ya107CisJb2xkX3N5c19jbG9uZSA9IHN5c19jYWxsX3RhYmxlW19fTlJfY2xvbmVdOworCW9sZF9zeXNfZXhlY3ZlID0gc3lzX2NhbGxfdGFibGVbX19OUl9leGVjdmVdOworCW9sZF9vbGRfbW1hcCA9IHN5c19jYWxsX3RhYmxlW19fTlJfbW1hcF07CisjaWZkZWYgSEFWRV9NTUFQMgorCW9sZF9zeXNfbW1hcDIgPSBzeXNfY2FsbF90YWJsZVtfX05SX21tYXAyXTsKKyNlbmRpZgorCW9sZF9zeXNfaW5pdF9tb2R1bGUgPSBzeXNfY2FsbF90YWJsZVtfX05SX2luaXRfbW9kdWxlXTsKKwlvbGRfc3lzX2V4aXQgPSBzeXNfY2FsbF90YWJsZVtfX05SX2V4aXRdOworfQorCit2b2lkIG9wX2ludGVyY2VwdF9zeXNjYWxscyh2b2lkKQoreworCXN5c19jYWxsX3RhYmxlW19fTlJfZm9ya10gPSBteV9zeXNfZm9yazsKKwlzeXNfY2FsbF90YWJsZVtfX05SX3Zmb3JrXSA9IG15X3N5c192Zm9yazsKKwlzeXNfY2FsbF90YWJsZVtfX05SX2Nsb25lXSA9IG15X3N5c19jbG9uZTsKKwlzeXNfY2FsbF90YWJsZVtfX05SX2V4ZWN2ZV0gPSBteV9zeXNfZXhlY3ZlOworCXN5c19jYWxsX3RhYmxlW19fTlJfbW1hcF0gPSBteV9vbGRfbW1hcDsKKyNpZmRlZiBIQVZFX01NQVAyCisJc3lzX2NhbGxfdGFibGVbX19OUl9tbWFwMl0gPSBteV9zeXNfbW1hcDI7CisjZW5kaWYKKwlzeXNfY2FsbF90YWJsZVtfX05SX2luaXRfbW9kdWxlXSA9IG15X3N5c19pbml0X21vZHVsZTsKKwlzeXNfY2FsbF90YWJsZVtfX05SX2V4aXRdID0gbXlfc3lzX2V4aXQ7Cit9CisKK3ZvaWQgb3BfcmVzdG9yZV9zeXNjYWxscyh2b2lkKQoreworCXN5c19jYWxsX3RhYmxlW19fTlJfZm9ya10gPSBvbGRfc3lzX2Zvcms7CisJc3lzX2NhbGxfdGFibGVbX19OUl92Zm9ya10gPSBvbGRfc3lzX3Zmb3JrOworCXN5c19jYWxsX3RhYmxlW19fTlJfY2xvbmVdID0gb2xkX3N5c19jbG9uZTsKKwlzeXNfY2FsbF90YWJsZVtfX05SX2V4ZWN2ZV0gPSBvbGRfc3lzX2V4ZWN2ZTsKKwlzeXNfY2FsbF90YWJsZVtfX05SX21tYXBdID0gb2xkX29sZF9tbWFwOworI2lmZGVmIEhBVkVfTU1BUDIKKwlzeXNfY2FsbF90YWJsZVtfX05SX21tYXAyXSA9IG9sZF9zeXNfbW1hcDI7CisjZW5kaWYKKwlzeXNfY2FsbF90YWJsZVtfX05SX2luaXRfbW9kdWxlXSA9IG9sZF9zeXNfaW5pdF9tb2R1bGU7CisJc3lzX2NhbGxfdGFibGVbX19OUl9leGl0XSA9IG9sZF9zeXNfZXhpdDsKK30KZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L21vZHVsZS94ODYvb3BfeDg2X21vZGVsLmggYi9vcHJvZmlsZS0wLjkuNy9tb2R1bGUveDg2L29wX3g4Nl9tb2RlbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5YTE1NDYKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9tb2R1bGUveDg2L29wX3g4Nl9tb2RlbC5oCkBAIC0wLDAgKzEsNTIgQEAKKy8qKgorICogQGZpbGUgb3BfeDg2X21vZGVsLmgKKyAqIGludGVyZmFjZSB0byB4ODYgbW9kZWwtc3BlY2lmaWMgTVNSIG9wZXJhdGlvbnMKKyAqCisgKiBAcmVtYXJrIENvcHlyaWdodCAyMDAyIE9Qcm9maWxlIGF1dGhvcnMKKyAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCisgKgorICogQGF1dGhvciBHcmF5ZG9uIEhvYXJlCisgKi8KKworI2lmbmRlZiBPUF9YODZfTU9ERUxfSAorI2RlZmluZSBPUF9YODZfTU9ERUxfSAorCisjaW5jbHVkZSAib3Byb2ZpbGUuaCIKKworc3RydWN0IG9wX3NhdmVkX21zciB7CisJdWludCBoaWdoOworCXVpbnQgbG93OworfTsKKworc3RydWN0IG9wX21zcl9ncm91cCB7CisJdWludCAqIGFkZHJzOworCXN0cnVjdCBvcF9zYXZlZF9tc3IgKiBzYXZlZDsKK307CisKK3N0cnVjdCBvcF9tc3JzIHsKKwlzdHJ1Y3Qgb3BfbXNyX2dyb3VwIGNvdW50ZXJzOworCXN0cnVjdCBvcF9tc3JfZ3JvdXAgY29udHJvbHM7Cit9OworCitzdHJ1Y3QgcHRfcmVnczsKKworc3RydWN0IG9wX3g4Nl9tb2RlbF9zcGVjIHsKKwl1aW50IGNvbnN0IG51bV9jb3VudGVyczsKKwl1aW50IGNvbnN0IG51bV9jb250cm9sczsKKwl2b2lkICgqZmlsbF9pbl9hZGRyZXNzZXMpKHN0cnVjdCBvcF9tc3JzICogY29uc3QgbXNycyk7CisJdm9pZCAoKnNldHVwX2N0cnMpKHN0cnVjdCBvcF9tc3JzIGNvbnN0ICogY29uc3QgbXNycyk7CisJdm9pZCAoKmNoZWNrX2N0cnMpKHVpbnQgY29uc3QgY3B1LCAKKwkJc3RydWN0IG9wX21zcnMgY29uc3QgKiBjb25zdCBtc3JzLAorCQlzdHJ1Y3QgcHRfcmVncyAqIGNvbnN0IHJlZ3MpOworCXZvaWQgKCpzdGFydCkoc3RydWN0IG9wX21zcnMgY29uc3QgKiBjb25zdCBtc3JzKTsKKwl2b2lkICgqc3RvcCkoc3RydWN0IG9wX21zcnMgY29uc3QgKiBjb25zdCBtc3JzKTsKK307CisKK2V4dGVybiBzdHJ1Y3Qgb3BfeDg2X21vZGVsX3NwZWMgY29uc3Qgb3BfcHByb19zcGVjOworZXh0ZXJuIHN0cnVjdCBvcF94ODZfbW9kZWxfc3BlYyBjb25zdCBvcF9hdGhsb25fc3BlYzsKK2V4dGVybiBzdHJ1Y3Qgb3BfeDg2X21vZGVsX3NwZWMgY29uc3Qgb3BfcDRfc3BlYzsKKyNpZmRlZiBIVF9TVVBQT1JUCitleHRlcm4gc3RydWN0IG9wX3g4Nl9tb2RlbF9zcGVjIGNvbnN0IG9wX3A0X2h0Ml9zcGVjOworI2VuZGlmCisKKyNlbmRpZiAvKiBPUF9YODZfTU9ERUxfSCAqLwpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvbW9kdWxlL3g4Ni9vcHJvZmlsZV9ubWkuUyBiL29wcm9maWxlLTAuOS43L21vZHVsZS94ODYvb3Byb2ZpbGVfbm1pLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDE5NzA4NgotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L21vZHVsZS94ODYvb3Byb2ZpbGVfbm1pLlMKQEAgLTAsMCArMSw2MyBAQAorI2lmbmRlZiBfX0FTU0VNQkxZX18KKyNkZWZpbmUgX19BU1NFTUJMWV9fICAvKiBmb3Igc29tZSAyLjIga2VybmVsICovCisjZW5kaWYKKyNpbmNsdWRlIDxsaW51eC9zeXMuaD4KKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8YXNtL3NlZ21lbnQuaD4KKyNkZWZpbmUgQVNTRU1CTFkKKyNpbmNsdWRlIDxhc20vc21wLmg+CisKKyNkZWZpbmUgU0FWRV9BTEwgXAorCWNsZDsgXAorCXB1c2hsICVlczsgXAorCXB1c2hsICVkczsgXAorCXB1c2hsICVlYXg7IFwKKwlwdXNobCAlZWJwOyBcCisJcHVzaGwgJWVkaTsgXAorCXB1c2hsICVlc2k7IFwKKwlwdXNobCAlZWR4OyBcCisJcHVzaGwgJWVjeDsgXAorCXB1c2hsICVlYng7IFwKKwltb3ZsICQoX19LRVJORUxfRFMpLCAlZWR4OyBcCisJbW92bCAlZWR4LCAlZHM7IFwKKwltb3ZsICVlZHgsICVlczsKKyAKKyNkZWZpbmUgUkVTVE9SRV9BTEwJXAorCXBvcGwgJWVieDsJXAorCXBvcGwgJWVjeDsJXAorCXBvcGwgJWVkeDsJXAorCXBvcGwgJWVzaTsJXAorCXBvcGwgJWVkaTsJXAorCXBvcGwgJWVicDsJXAorCXBvcGwgJWVheDsJXAorMToJcG9wbCAlZHM7CVwKKzI6CXBvcGwgJWVzOwlcCisJYWRkbCAkNCwgJWVzcDsJXAorMzoJaXJldDsJCVwKKy5zZWN0aW9uIC5maXh1cCwiYXgiOwlcCis0Ogltb3ZsICQwLCAoJWVzcCk7CVwKKwlqbXAgMWI7CQlcCis1Ogltb3ZsICQwLCAoJWVzcCk7CVwKKwlqbXAgMmI7CQlcCis2OglwdXNobCAlc3M7CVwKKwlwb3BsICVkczsJXAorCXB1c2hsICVzczsJXAorCXBvcGwgJWVzOwlcCisJcHVzaGwgJDExOwlcCisJY2FsbCBteV9zeXNfZXhpdDtcCisucHJldmlvdXM7CQlcCisuc2VjdGlvbiBfX2V4X3RhYmxlLCJhIjtcCisJLmFsaWduIDQ7CVwKKwkubG9uZyAxYiwgNGI7CVwKKwkubG9uZyAyYiwgNWI7CVwKKwkubG9uZyAzYiwgNmI7CVwKKy5wcmV2aW91cworCitFTlRSWShvcF9ubWkpCisJcHVzaGwgJWVheAorCVNBVkVfQUxMCisJbW92bCAlZXNwLCAlZWR4CisJcHVzaGwgJWVkeAorCWNhbGwgb3BfZG9fbm1pCisJYWRkbCAkNCwgJWVzcAorCVJFU1RPUkVfQUxMCmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9vcGppdGNvbnYvTWFrZWZpbGUuYW0gYi9vcHJvZmlsZS0wLjkuNy9vcGppdGNvbnYvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjI1MzUwNwotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L29waml0Y29udi9NYWtlZmlsZS5hbQpAQCAtMCwwICsxLDIwIEBACitBTV9DUFBGTEFHUyA9IC1JICR7dG9wX3NyY2Rpcn0vbGlib3BhZ2VudCAgLUkgJHt0b3Bfc3JjZGlyfS9saWJ1dGlsIC1JICR7dG9wX3NyY2Rpcn0vZGFlbW9uCitBTV9DRkxBR1MgPSBAT1BfQ0ZMQUdTQAorCitiaW5fUFJPR1JBTVMgPSBvcGppdGNvbnYKKworTElCUyA9IEBCRkRfTElCU0AKKworbmVlZGVkX2xpYnMgPSAgXAorCS4uL2xpYnV0aWwvbGlidXRpbC5hCisKK29waml0Y29udl9MREFERCA9ICQobmVlZGVkX2xpYnMpCisKK29waml0Y29udl9TT1VSQ0VTID0gXAorCW9waml0Y29udi5jIFwKKwlvcGppdGNvbnYuaCBcCisJY29udmVyc2lvbi5jIFwKKwlwYXJzZV9kdW1wLmMgXAorCWppdHN5bWJvbC5jIFwKKwljcmVhdGVfYmZkLmMgXAorCWRlYnVnX2xpbmUuYwpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45Ljcvb3BqaXRjb252L01ha2VmaWxlLmluIGIvb3Byb2ZpbGUtMC45Ljcvb3BqaXRjb252L01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxOTU1ZDMKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9vcGppdGNvbnYvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSw1ODQgQEAKKyMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTEuMSBmcm9tIE1ha2VmaWxlLmFtLgorIyBAY29uZmlndXJlX2lucHV0QAorCisjIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwKKyMgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorIyBJbmMuCisjIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0CisjIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKKyMgUEFSVElDVUxBUiBQVVJQT1NFLgorCitAU0VUX01BS0VACisKK1ZQQVRIID0gQHNyY2RpckAKK3BrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAorcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACitwa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACitwa2dsaWJleGVjZGlyID0gJChsaWJleGVjZGlyKS9AUEFDS0FHRUAKK2FtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKK2luc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0CitpbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCitpbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKK0lOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCit0cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCitOT1JNQUxfSU5TVEFMTCA9IDoKK1BSRV9JTlNUQUxMID0gOgorUE9TVF9JTlNUQUxMID0gOgorTk9STUFMX1VOSU5TVEFMTCA9IDoKK1BSRV9VTklOU1RBTEwgPSA6CitQT1NUX1VOSU5TVEFMTCA9IDoKK2J1aWxkX3RyaXBsZXQgPSBAYnVpbGRACitob3N0X3RyaXBsZXQgPSBAaG9zdEAKK2Jpbl9QUk9HUkFNUyA9IG9waml0Y29udiQoRVhFRVhUKQorc3ViZGlyID0gb3BqaXRjb252CitESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKHNyY2RpcikvTWFrZWZpbGUuaW4KK0FDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKK2FtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL200L2JpbnV0aWxzLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2J1aWx0aW5leHBlY3QubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY2VsbHNwdWJmZHN1cHBvcnQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY29tcGlsZXJvcHRpb24ubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY29uZmlnbW9kdWxlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2NvcHlpZmNoYW5nZS5tNCAkKHRvcF9zcmNkaXIpL200L2RvY2Jvb2subTQgXAorCSQodG9wX3NyY2RpcikvbTQvZXh0cmFkaXJzLm00ICQodG9wX3NyY2RpcikvbTQvZmluZGtlcm5lbC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9rZXJuZWxvcHRpb24ubTQgXAorCSQodG9wX3NyY2RpcikvbTQva2VybmVsdmVyc2lvbi5tNCAkKHRvcF9zcmNkaXIpL200L2xpYnRvb2wubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbHRvcHRpb25zLm00ICQodG9wX3NyY2RpcikvbTQvbHRzdWdhci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9sdHZlcnNpb24ubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdH5vYnNvbGV0ZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9tYWxsb2NhdHRyaWJ1dGUubTQgXAorCSQodG9wX3NyY2RpcikvbTQvcG9wdGNvbnN0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3ByZWNvbXBpbGVkaGVhZGVyLm00ICQodG9wX3NyY2RpcikvbTQvcXQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvcmVzdWx0eW4ubTQgJCh0b3Bfc3JjZGlyKS9tNC9zc3RyZWFtLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3R5cGVkZWYubTQgJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuaW4KK2FtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCisJJChBQ0xPQ0FMX000KQorbWtpbnN0YWxsZGlycyA9ICQoaW5zdGFsbF9zaCkgLWQKK0NPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvY29uZmlnLmgKK0NPTkZJR19DTEVBTl9GSUxFUyA9CitDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMgPQorYW1fX2luc3RhbGxkaXJzID0gIiQoREVTVERJUikkKGJpbmRpcikiCitQUk9HUkFNUyA9ICQoYmluX1BST0dSQU1TKQorYW1fb3BqaXRjb252X09CSkVDVFMgPSBvcGppdGNvbnYuJChPQkpFWFQpIGNvbnZlcnNpb24uJChPQkpFWFQpIFwKKwlwYXJzZV9kdW1wLiQoT0JKRVhUKSBqaXRzeW1ib2wuJChPQkpFWFQpIGNyZWF0ZV9iZmQuJChPQkpFWFQpIFwKKwlkZWJ1Z19saW5lLiQoT0JKRVhUKQorb3BqaXRjb252X09CSkVDVFMgPSAkKGFtX29waml0Y29udl9PQkpFQ1RTKQorb3BqaXRjb252X0RFUEVOREVOQ0lFUyA9ICQobmVlZGVkX2xpYnMpCitERUZBVUxUX0lOQ0xVREVTID0gLUkuQGFtX19pc3JjQCAtSSQodG9wX2J1aWxkZGlyKQorZGVwY29tcCA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvZGVwY29tcAorYW1fX2RlcGZpbGVzX21heWJlID0gZGVwZmlsZXMKK2FtX19tdiA9IG12IC1mCitDT01QSUxFID0gJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpIFwKKwkkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpCitMVENPTVBJTEUgPSAkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgXAorCS0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSBcCisJJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQorQ0NMRCA9ICQoQ0MpCitMSU5LID0gJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIFwKKwktLW1vZGU9bGluayAkKENDTEQpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgJChBTV9MREZMQUdTKSBcCisJJChMREZMQUdTKSAtbyAkQAorU09VUkNFUyA9ICQob3BqaXRjb252X1NPVVJDRVMpCitESVNUX1NPVVJDRVMgPSAkKG9waml0Y29udl9TT1VSQ0VTKQorRVRBR1MgPSBldGFncworQ1RBR1MgPSBjdGFncworRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKK0FDTE9DQUwgPSBAQUNMT0NBTEAKK0FNVEFSID0gQEFNVEFSQAorQVIgPSBAQVJACitBVVRPQ09ORiA9IEBBVVRPQ09ORkAKK0FVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKK0FVVE9NQUtFID0gQEFVVE9NQUtFQAorQVdLID0gQEFXS0AKK0JGRF9MSUJTID0gQEJGRF9MSUJTQAorQ0FUX0VOVFJZX0VORCA9IEBDQVRfRU5UUllfRU5EQAorQ0FUX0VOVFJZX1NUQVJUID0gQENBVF9FTlRSWV9TVEFSVEAKK0NDID0gQENDQAorQ0NERVBNT0RFID0gQENDREVQTU9ERUAKK0NGTEFHUyA9IEBDRkxBR1NACitDUFAgPSBAQ1BQQAorQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACitDWFggPSBAQ1hYQAorQ1hYQ1BQID0gQENYWENQUEAKK0NYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKK0NYWEZMQUdTID0gQENYWEZMQUdTQAorQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKK0RBVEUgPSBAREFURUAKK0RFRlMgPSBAREVGU0AKK0RFUERJUiA9IEBERVBESVJACitET0NCT09LX1JPT1QgPSBARE9DQk9PS19ST09UQAorRFNZTVVUSUwgPSBARFNZTVVUSUxACitEVU1QQklOID0gQERVTVBCSU5ACitFQ0hPX0MgPSBARUNIT19DQAorRUNIT19OID0gQEVDSE9fTkAKK0VDSE9fVCA9IEBFQ0hPX1RACitFR1JFUCA9IEBFR1JFUEAKK0VYRUVYVCA9IEBFWEVFWFRACitFWFRSQV9DRkxBR1NfTU9EVUxFID0gQEVYVFJBX0NGTEFHU19NT0RVTEVACitGR1JFUCA9IEBGR1JFUEAKK0dSRVAgPSBAR1JFUEAKK0lOU1RBTEwgPSBASU5TVEFMTEAKK0lOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACitJTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAorSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACitJTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAorSkFWQV9IT01FRElSID0gQEpBVkFfSE9NRURJUkAKK0tJTkMgPSBAS0lOQ0AKK0tTUkMgPSBAS1NSQ0AKK0tWRVJTID0gQEtWRVJTQAorTEQgPSBATERACitMREZMQUdTID0gQExERkxBR1NACitMSUJFUlRZX0xJQlMgPSBATElCRVJUWV9MSUJTQAorTElCT0JKUyA9IEBMSUJPQkpTQAorTElCUyA9IEBCRkRfTElCU0AKK0xJQlRPT0wgPSBATElCVE9PTEAKK0xJUE8gPSBATElQT0AKK0xOX1MgPSBATE5fU0AKK0xUTElCT0JKUyA9IEBMVExJQk9CSlNACitNQUtFSU5GTyA9IEBNQUtFSU5GT0AKK01LRElSX1AgPSBATUtESVJfUEAKK01PQyA9IEBNT0NACitNT0RJTlNUQUxMRElSID0gQE1PRElOU1RBTExESVJACitOTSA9IEBOTUAKK05NRURJVCA9IEBOTUVESVRACitPQkpEVU1QID0gQE9CSkRVTVBACitPQkpFWFQgPSBAT0JKRVhUQAorT1BST0ZJTEVfRElSID0gQE9QUk9GSUxFX0RJUkAKK09QUk9GSUxFX01PRFVMRV9BUkNIID0gQE9QUk9GSUxFX01PRFVMRV9BUkNIQAorT1BfQ0ZMQUdTID0gQE9QX0NGTEFHU0AKK09QX0NYWEZMQUdTID0gQE9QX0NYWEZMQUdTQAorT1BfRE9DRElSID0gQE9QX0RPQ0RJUkAKK09UT09MID0gQE9UT09MQAorT1RPT0w2NCA9IEBPVE9PTDY0QAorUEFDS0FHRSA9IEBQQUNLQUdFQAorUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACitQQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAorUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACitQQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAorUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACitQQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAorUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACitQS0dfQ09ORklHID0gQFBLR19DT05GSUdACitQS0dfQ09ORklHX0xJQkRJUiA9IEBQS0dfQ09ORklHX0xJQkRJUkAKK1BLR19DT05GSUdfUEFUSCA9IEBQS0dfQ09ORklHX1BBVEhACitQT1BUX0xJQlMgPSBAUE9QVF9MSUJTQAorUFRSRElGRl9UX1RZUEUgPSBAUFRSRElGRl9UX1RZUEVACitRVF9DRkxBR1MgPSBAUVRfQ0ZMQUdTQAorUVRfSU5DTFVERVMgPSBAUVRfSU5DTFVERVNACitRVF9MREZMQUdTID0gQFFUX0xERkxBR1NACitRVF9MSUIgPSBAUVRfTElCQAorUVRfTElCUyA9IEBRVF9MSUJTQAorUVRfVkVSU0lPTiA9IEBRVF9WRVJTSU9OQAorUkFOTElCID0gQFJBTkxJQkAKK1NFRCA9IEBTRURACitTRVRfTUFLRSA9IEBTRVRfTUFLRUAKK1NIRUxMID0gQFNIRUxMQAorU0laRV9UX1RZUEUgPSBAU0laRV9UX1RZUEVACitTVFJJUCA9IEBTVFJJUEAKK1VJQyA9IEBVSUNACitVSUNoZWxwID0gQFVJQ2hlbHBACitWRVJTSU9OID0gQFZFUlNJT05ACitYTUtNRiA9IEBYTUtNRkAKK1hNTF9DQVRBTE9HID0gQFhNTF9DQVRBTE9HQAorWFNMVFBST0MgPSBAWFNMVFBST0NACitYU0xUUFJPQ19GTEFHUyA9IEBYU0xUUFJPQ19GTEFHU0AKK1hfQ0ZMQUdTID0gQFhfQ0ZMQUdTQAorWF9FWFRSQV9MSUJTID0gQFhfRVhUUkFfTElCU0AKK1hfTElCUyA9IEBYX0xJQlNACitYX1BSRV9MSUJTID0gQFhfUFJFX0xJQlNACithYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAorYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAorYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAorYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACithY19jdF9DQyA9IEBhY19jdF9DQ0AKK2FjX2N0X0NYWCA9IEBhY19jdF9DWFhACithY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACithbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKK2FtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACithbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAorYW1fX3RhciA9IEBhbV9fdGFyQAorYW1fX3VudGFyID0gQGFtX191bnRhckAKK2JpbmRpciA9IEBiaW5kaXJACitidWlsZCA9IEBidWlsZEAKK2J1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAorYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKK2J1aWxkX29zID0gQGJ1aWxkX29zQAorYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKK2J1aWxkZGlyID0gQGJ1aWxkZGlyQAorZGF0YWRpciA9IEBkYXRhZGlyQAorZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACitkb2NkaXIgPSBAZG9jZGlyQAorZHZpZGlyID0gQGR2aWRpckAKK2V4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAoraG9zdCA9IEBob3N0QAoraG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAoraG9zdF9jcHUgPSBAaG9zdF9jcHVACitob3N0X29zID0gQGhvc3Rfb3NACitob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKK2h0bWxkaXIgPSBAaHRtbGRpckAKK2luY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKK2luZm9kaXIgPSBAaW5mb2RpckAKK2luc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKK2xpYmRpciA9IEBsaWJkaXJACitsaWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACitsb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAorbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAorbHRfRUNITyA9IEBsdF9FQ0hPQAorbWFuZGlyID0gQG1hbmRpckAKK21rZGlyX3AgPSBAbWtkaXJfcEAKK29sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKK3BkZmRpciA9IEBwZGZkaXJACitwcmVmaXggPSBAcHJlZml4QAorcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAorcHNkaXIgPSBAcHNkaXJACitzYmluZGlyID0gQHNiaW5kaXJACitzaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKK3NyY2RpciA9IEBzcmNkaXJACitzeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACit0YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAordG9wX2J1aWxkX3ByZWZpeCA9IEB0b3BfYnVpbGRfcHJlZml4QAordG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKK3RvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKK3RvcGRpciA9IEB0b3BkaXJACitBTV9DUFBGTEFHUyA9IC1JICR7dG9wX3NyY2Rpcn0vbGlib3BhZ2VudCAgLUkgJHt0b3Bfc3JjZGlyfS9saWJ1dGlsIC1JICR7dG9wX3NyY2Rpcn0vZGFlbW9uCitBTV9DRkxBR1MgPSBAT1BfQ0ZMQUdTQAorbmVlZGVkX2xpYnMgPSBcCisJLi4vbGlidXRpbC9saWJ1dGlsLmEKKworb3BqaXRjb252X0xEQUREID0gJChuZWVkZWRfbGlicykKK29waml0Y29udl9TT1VSQ0VTID0gXAorCW9waml0Y29udi5jIFwKKwlvcGppdGNvbnYuaCBcCisJY29udmVyc2lvbi5jIFwKKwlwYXJzZV9kdW1wLmMgXAorCWppdHN5bWJvbC5jIFwKKwljcmVhdGVfYmZkLmMgXAorCWRlYnVnX2xpbmUuYworCithbGw6IGFsbC1hbQorCisuU1VGRklYRVM6CisuU1VGRklYRVM6IC5jIC5sbyAubyAub2JqCiskKHNyY2RpcikvTWFrZWZpbGUuaW46ICAkKHNyY2RpcikvTWFrZWZpbGUuYW0gICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCUBmb3IgZGVwIGluICQ/OyBkbyBcCisJICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKKwkgICAgKiQkZGVwKikgXAorCSAgICAgICggY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoICkgXAorCSAgICAgICAgJiYgeyBpZiB0ZXN0IC1mICRAOyB0aGVuIGV4aXQgMDsgZWxzZSBicmVhazsgZmk7IH07IFwKKwkgICAgICBleGl0IDE7OyBcCisJICBlc2FjOyBcCisJZG9uZTsgXAorCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZm9yZWlnbiBvcGppdGNvbnYvTWFrZWZpbGUnOyBcCisJJChhbV9fY2QpICQodG9wX3NyY2RpcikgJiYgXAorCSAgJChBVVRPTUFLRSkgLS1mb3JlaWduIG9waml0Y29udi9NYWtlZmlsZQorLlBSRUNJT1VTOiBNYWtlZmlsZQorTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworCUBjYXNlICckPycgaW4gXAorCSAgKmNvbmZpZy5zdGF0dXMqKSBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKKwkgICopIFwKKwkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAorCWVzYWM7CisKKyQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorCiskKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorJChBQ0xPQ0FMX000KTogICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6CitpbnN0YWxsLWJpblBST0dSQU1TOiAkKGJpbl9QUk9HUkFNUykKKwlAJChOT1JNQUxfSU5TVEFMTCkKKwl0ZXN0IC16ICIkKGJpbmRpcikiIHx8ICQoTUtESVJfUCkgIiQoREVTVERJUikkKGJpbmRpcikiCisJQGxpc3Q9JyQoYmluX1BST0dSQU1TKSc7IHRlc3QgLW4gIiQoYmluZGlyKSIgfHwgbGlzdD07IFwKKwlmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCAkJHAiOyBkb25lIHwgXAorCXNlZCAncy8kKEVYRUVYVCkkJC8vJyB8IFwKKwl3aGlsZSByZWFkIHAgcDE7IGRvIGlmIHRlc3QgLWYgJCRwIHx8IHRlc3QgLWYgJCRwMTsgXAorCSAgdGhlbiBlY2hvICIkJHAiOyBlY2hvICIkJHAiOyBlbHNlIDo7IGZpOyBcCisJZG9uZSB8IFwKKwlzZWQgLWUgJ3A7cywuKi8sLDtuO2gnIC1lICdzfC4qfC58JyBcCisJICAgIC1lICdwO3g7cywuKi8sLDtzLyQoRVhFRVhUKSQkLy87JCh0cmFuc2Zvcm0pO3MvJCQvJChFWEVFWFQpLycgfCBcCisJc2VkICdOO047TjtzLFxuLCAsZycgfCBcCisJJChBV0spICdCRUdJTiB7IGZpbGVzWyIuIl0gPSAiIjsgZGlyc1siLiJdID0gMSB9IFwKKwkgIHsgZD0kJDM7IGlmIChkaXJzW2RdICE9IDEpIHsgcHJpbnQgImQiLCBkOyBkaXJzW2RdID0gMSB9IFwKKwkgICAgaWYgKCQkMiA9PSAkJDQpIGZpbGVzW2RdID0gZmlsZXNbZF0gIiAiICQkMTsgXAorCSAgICBlbHNlIHsgcHJpbnQgImYiLCAkJDMgIi8iICQkNCwgJCQxOyB9IH0gXAorCSAgRU5EIHsgZm9yIChkIGluIGZpbGVzKSBwcmludCAiZiIsIGQsIGZpbGVzW2RdIH0nIHwgXAorCXdoaWxlIHJlYWQgdHlwZSBkaXIgZmlsZXM7IGRvIFwKKwkgICAgaWYgdGVzdCAiJCRkaXIiID0gLjsgdGhlbiBkaXI9OyBlbHNlIGRpcj0vJCRkaXI7IGZpOyBcCisJICAgIHRlc3QgLXogIiQkZmlsZXMiIHx8IHsgXAorCSAgICBlY2hvICIgJChJTlNUQUxMX1BST0dSQU1fRU5WKSAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWluc3RhbGwgJChJTlNUQUxMX1BST0dSQU0pICQkZmlsZXMgJyQoREVTVERJUikkKGJpbmRpcikkJGRpciciOyBcCisJICAgICQoSU5TVEFMTF9QUk9HUkFNX0VOVikgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1pbnN0YWxsICQoSU5TVEFMTF9QUk9HUkFNKSAkJGZpbGVzICIkKERFU1RESVIpJChiaW5kaXIpJCRkaXIiIHx8IGV4aXQgJCQ/OyBcCisJICAgIH0gXAorCTsgZG9uZQorCit1bmluc3RhbGwtYmluUFJPR1JBTVM6CisJQCQoTk9STUFMX1VOSU5TVEFMTCkKKwlAbGlzdD0nJChiaW5fUFJPR1JBTVMpJzsgdGVzdCAtbiAiJChiaW5kaXIpIiB8fCBsaXN0PTsgXAorCWZpbGVzPWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCI7IGRvbmUgfCBcCisJICBzZWQgLWUgJ2g7cyxeLiovLCw7cy8kKEVYRUVYVCkkJC8vOyQodHJhbnNmb3JtKScgXAorCSAgICAgIC1lICdzLyQkLyQoRVhFRVhUKS8nIGA7IFwKKwl0ZXN0IC1uICIkJGxpc3QiIHx8IGV4aXQgMDsgXAorCWVjaG8gIiAoIGNkICckKERFU1RESVIpJChiaW5kaXIpJyAmJiBybSAtZiIgJCRmaWxlcyAiKSI7IFwKKwljZCAiJChERVNURElSKSQoYmluZGlyKSIgJiYgcm0gLWYgJCRmaWxlcworCitjbGVhbi1iaW5QUk9HUkFNUzoKKwlAbGlzdD0nJChiaW5fUFJPR1JBTVMpJzsgdGVzdCAtbiAiJCRsaXN0IiB8fCBleGl0IDA7IFwKKwllY2hvICIgcm0gLWYiICQkbGlzdDsgXAorCXJtIC1mICQkbGlzdCB8fCBleGl0ICQkPzsgXAorCXRlc3QgLW4gIiQoRVhFRVhUKSIgfHwgZXhpdCAwOyBcCisJbGlzdD1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAiOyBkb25lIHwgc2VkICdzLyQoRVhFRVhUKSQkLy8nYDsgXAorCWVjaG8gIiBybSAtZiIgJCRsaXN0OyBcCisJcm0gLWYgJCRsaXN0CitvcGppdGNvbnYkKEVYRUVYVCk6ICQob3BqaXRjb252X09CSkVDVFMpICQob3BqaXRjb252X0RFUEVOREVOQ0lFUykgCisJQHJtIC1mIG9waml0Y29udiQoRVhFRVhUKQorCSQoTElOSykgJChvcGppdGNvbnZfT0JKRUNUUykgJChvcGppdGNvbnZfTERBREQpICQoTElCUykKKworbW9zdGx5Y2xlYW4tY29tcGlsZToKKwktcm0gLWYgKi4kKE9CSkVYVCkKKworZGlzdGNsZWFuLWNvbXBpbGU6CisJLXJtIC1mICoudGFiLmMKKworQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2NvbnZlcnNpb24uUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2NyZWF0ZV9iZmQuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2RlYnVnX2xpbmUuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2ppdHN5bWJvbC5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvb3BqaXRjb252LlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9wYXJzZV9kdW1wLlBvQGFtX19xdW90ZUAKKworLmMubzoKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgJDwKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ09NUElMRSkgLWMgJDwKKworLmMub2JqOgorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENPTVBJTEUpIC1jIGAkKENZR1BBVEhfVykgJyQ8J2AKKworLmMubG86CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExUQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgJDwKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMVENPTVBJTEUpIC1jIC1vICRAICQ8CisKK21vc3RseWNsZWFuLWxpYnRvb2w6CisJLXJtIC1mICoubG8KKworY2xlYW4tbGlidG9vbDoKKwktcm0gLXJmIC5saWJzIF9saWJzCisKK0lEOiAkKEhFQURFUlMpICQoU09VUkNFUykgJChMSVNQKSAkKFRBR1NfRklMRVMpCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCisJICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCisJbWtpZCAtZklEICQkdW5pcXVlCit0YWdzOiBUQUdTCisKK1RBR1M6ICAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKKwkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCisJc2V0IHg7IFwKKwloZXJlPWBwd2RgOyBcCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorCXNoaWZ0OyBcCisJaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkKiQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKKwkgIHRlc3QgLW4gIiQkdW5pcXVlIiB8fCB1bmlxdWU9JCRlbXB0eV9maXg7IFwKKwkgIGlmIHRlc3QgJCQjIC1ndCAwOyB0aGVuIFwKKwkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAorCSAgICAgICIkJEAiICQkdW5pcXVlOyBcCisJICBlbHNlIFwKKwkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAorCSAgICAgICQkdW5pcXVlOyBcCisJICBmaTsgXAorCWZpCitjdGFnczogQ1RBR1MKK0NUQUdTOiAgJChIRUFERVJTKSAkKFNPVVJDRVMpICAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCisJCSQoVEFHU19GSUxFUykgJChMSVNQKQorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKwkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKwl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR1bmlxdWUiIFwKKwkgIHx8ICQoQ1RBR1MpICQoQ1RBR1NGTEFHUykgJChBTV9DVEFHU0ZMQUdTKSAkKENUQUdTX0FSR1MpIFwKKwkgICAgICQkdW5pcXVlCisKK0dUQUdTOgorCWhlcmU9YCQoYW1fX2NkKSAkKHRvcF9idWlsZGRpcikgJiYgcHdkYCBcCisJICAmJiAkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSBcCisJICAmJiBndGFncyAtaSAkKEdUQUdTX0FSR1MpICIkJGhlcmUiCisKK2Rpc3RjbGVhbi10YWdzOgorCS1ybSAtZiBUQUdTIElEIEdUQUdTIEdSVEFHUyBHU1lNUyBHUEFUSCB0YWdzCisKK2Rpc3RkaXI6ICQoRElTVEZJTEVTKQorCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisJbGlzdD0nJChESVNURklMRVMpJzsgXAorCSAgZGlzdF9maWxlcz1gZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8IFwKKwkgIHNlZCAtZSAic3xeJCRzcmNkaXJzdHJpcC98fDt0IiBcCisJICAgICAgLWUgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98O3QiYDsgXAorCWNhc2UgJCRkaXN0X2ZpbGVzIGluIFwKKwkgICovKikgJChNS0RJUl9QKSBgZWNobyAiJCRkaXN0X2ZpbGVzIiB8IFwKKwkJCSAgIHNlZCAnL1wvLyFkO3N8XnwkKGRpc3RkaXIpL3w7cywvW14vXSokJCwsJyB8IFwKKwkJCSAgIHNvcnQgLXVgIDs7IFwKKwllc2FjOyBcCisJZm9yIGZpbGUgaW4gJCRkaXN0X2ZpbGVzOyBkbyBcCisJICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCisJICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAorCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAorCSAgICBpZiB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkZmlsZSI7IHRoZW4gXAorCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAorCSAgICBmaTsgXAorCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKKwkgICAgICBjcCAtZnBSICQoc3JjZGlyKS8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCisJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisJICAgIGZpOyBcCisJICAgIGNwIC1mcFIgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKKwkgIGVsc2UgXAorCSAgICB0ZXN0IC1mICIkKGRpc3RkaXIpLyQkZmlsZSIgXAorCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICIkKGRpc3RkaXIpLyQkZmlsZSIgXAorCSAgICB8fCBleGl0IDE7IFwKKwkgIGZpOyBcCisJZG9uZQorY2hlY2stYW06IGFsbC1hbQorY2hlY2s6IGNoZWNrLWFtCithbGwtYW06IE1ha2VmaWxlICQoUFJPR1JBTVMpCitpbnN0YWxsZGlyczoKKwlmb3IgZGlyIGluICIkKERFU1RESVIpJChiaW5kaXIpIjsgZG8gXAorCSAgdGVzdCAteiAiJCRkaXIiIHx8ICQoTUtESVJfUCkgIiQkZGlyIjsgXAorCWRvbmUKK2luc3RhbGw6IGluc3RhbGwtYW0KK2luc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLWFtCitpbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1hbQordW5pbnN0YWxsOiB1bmluc3RhbGwtYW0KKworaW5zdGFsbC1hbTogYWxsLWFtCisJQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KKworaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KK2luc3RhbGwtc3RyaXA6CisJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKKwkgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorCSAgYHRlc3QgLXogJyQoU1RSSVApJyB8fCBcCisJICAgIGVjaG8gIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciYCBpbnN0YWxsCittb3N0bHljbGVhbi1nZW5lcmljOgorCitjbGVhbi1nZW5lcmljOgorCitkaXN0Y2xlYW4tZ2VuZXJpYzoKKwktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKKwktdGVzdCAuID0gIiQoc3JjZGlyKSIgfHwgdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykKKworbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgorCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKKwlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCitjbGVhbjogY2xlYW4tYW0KKworY2xlYW4tYW06IGNsZWFuLWJpblBST0dSQU1TIGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBtb3N0bHljbGVhbi1hbQorCitkaXN0Y2xlYW46IGRpc3RjbGVhbi1hbQorCS1ybSAtcmYgLi8kKERFUERJUikKKwktcm0gLWYgTWFrZWZpbGUKK2Rpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAorCWRpc3RjbGVhbi10YWdzCisKK2R2aTogZHZpLWFtCisKK2R2aS1hbToKKworaHRtbDogaHRtbC1hbQorCitodG1sLWFtOgorCitpbmZvOiBpbmZvLWFtCisKK2luZm8tYW06CisKK2luc3RhbGwtZGF0YS1hbToKKworaW5zdGFsbC1kdmk6IGluc3RhbGwtZHZpLWFtCisKK2luc3RhbGwtZHZpLWFtOgorCitpbnN0YWxsLWV4ZWMtYW06IGluc3RhbGwtYmluUFJPR1JBTVMKKworaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KKworaW5zdGFsbC1odG1sLWFtOgorCitpbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQorCitpbnN0YWxsLWluZm8tYW06CisKK2luc3RhbGwtbWFuOgorCitpbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KKworaW5zdGFsbC1wZGYtYW06CisKK2luc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KKworaW5zdGFsbC1wcy1hbToKKworaW5zdGFsbGNoZWNrLWFtOgorCittYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCisJLXJtIC1yZiAuLyQoREVQRElSKQorCS1ybSAtZiBNYWtlZmlsZQorbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYworCittb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tYW0KKworbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCisJbW9zdGx5Y2xlYW4tbGlidG9vbAorCitwZGY6IHBkZi1hbQorCitwZGYtYW06CisKK3BzOiBwcy1hbQorCitwcy1hbToKKwordW5pbnN0YWxsLWFtOiB1bmluc3RhbGwtYmluUFJPR1JBTVMKKworLk1BS0U6IGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcAorCisuUEhPTlk6IENUQUdTIEdUQUdTIGFsbCBhbGwtYW0gY2hlY2sgY2hlY2stYW0gY2xlYW4gY2xlYW4tYmluUFJPR1JBTVMgXAorCWNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBjdGFncyBkaXN0Y2xlYW4gZGlzdGNsZWFuLWNvbXBpbGUgXAorCWRpc3RjbGVhbi1nZW5lcmljIGRpc3RjbGVhbi1saWJ0b29sIGRpc3RjbGVhbi10YWdzIGRpc3RkaXIgZHZpIFwKKwlkdmktYW0gaHRtbCBodG1sLWFtIGluZm8gaW5mby1hbSBpbnN0YWxsIGluc3RhbGwtYW0gXAorCWluc3RhbGwtYmluUFJPR1JBTVMgaW5zdGFsbC1kYXRhIGluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBcCisJaW5zdGFsbC1kdmktYW0gaW5zdGFsbC1leGVjIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgXAorCWluc3RhbGwtaHRtbC1hbSBpbnN0YWxsLWluZm8gaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIFwKKwlpbnN0YWxsLXBkZiBpbnN0YWxsLXBkZi1hbSBpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gXAorCWluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBcCisJbWFpbnRhaW5lci1jbGVhbiBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gXAorCW1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sIFwKKwlwZGYgcGRmLWFtIHBzIHBzLWFtIHRhZ3MgdW5pbnN0YWxsIHVuaW5zdGFsbC1hbSBcCisJdW5pbnN0YWxsLWJpblBST0dSQU1TCisKKworIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KKyMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgorLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45Ljcvb3BqaXRjb252L2NvbnZlcnNpb24uYyBiL29wcm9maWxlLTAuOS43L29waml0Y29udi9jb252ZXJzaW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTExZmU5ZAotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L29waml0Y29udi9jb252ZXJzaW9uLmMKQEAgLTAsMCArMSw5MiBAQAorLyoqCisgKiBAZmlsZSBjb252ZXJzaW9uLmMKKyAqIENvbnZlcnQgYSBqaXQgZHVtcCBmaWxlIHRvIGFuIEVMRiBmaWxlCisgKgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwOCBPUHJvZmlsZSBhdXRob3JzCisgKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORworICoKKyAqIEBhdXRob3IgRGFuaWVsIEhhbnNlbAorICoKKyAqIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwOAorICoKKyAqLworCisjaW5jbHVkZSA8c3RkbGliLmg+CisKKyNpbmNsdWRlICJvcGppdGNvbnYuaCIKKworc3RhdGljIHZvaWQgZnJlZV9qaXRfcmVjb3Jkcyh2b2lkKQoreworCXN0cnVjdCBqaXRlbnRyeSAqIGVudHJ5LCAqIG5leHQ7CisKKwlmb3IgKGVudHJ5ID0gaml0ZW50cnlfbGlzdDsgZW50cnk7IGVudHJ5ID0gbmV4dCkgeworCQlpZiAoZW50cnktPnN5bV9uYW1lX21hbGxvY2VkKQorCQkJZnJlZShlbnRyeS0+c3ltYm9sX25hbWUpOworCQluZXh0ID0gZW50cnktPm5leHQ7CisJCWZyZWUoZW50cnkpOworCX0KKwlqaXRlbnRyeV9saXN0ID0gTlVMTDsKK30KKworc3RhdGljIHZvaWQgZnJlZV9qaXRfZGVidWdfbGluZSh2b2lkKQoreworCXN0cnVjdCBqaXRlbnRyeV9kZWJ1Z19saW5lICogZW50cnksICogbmV4dDsKKworCWZvciAoZW50cnkgPSBqaXRlbnRyeV9kZWJ1Z19saW5lX2xpc3Q7IGVudHJ5OyBlbnRyeSA9IG5leHQpIHsKKwkJbmV4dCA9IGVudHJ5LT5uZXh0OworCQlmcmVlKGVudHJ5KTsKKwl9CisJaml0ZW50cnlfZGVidWdfbGluZV9saXN0ID0gTlVMTDsKK30KKworaW50IG9wX2ppdF9jb252ZXJ0KHN0cnVjdCBvcF9qaXRkdW1wX2luZm8gZmlsZV9pbmZvLCBjaGFyIGNvbnN0ICogZWxmZmlsZSwKKyAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgc3RhcnRfdGltZSwgdW5zaWduZWQgbG9uZyBsb25nIGVuZF90aW1lKQoreworCXZvaWQgY29uc3QgKiBqaXRkdW1wID0gZmlsZV9pbmZvLmRtcF9maWxlOworCWludCByYz0gT1BfSklUX0NPTlZfT0s7CisKKwllbnRyeV9jb3VudCA9IDA7CisJbWF4X2VudHJ5X2NvdW50ID0gMDsKKwlzeW1zID0gTlVMTDsKKwljdXJfYmZkID0gTlVMTDsKKwlqaXRlbnRyeV9saXN0ID0gTlVMTDsKKwlqaXRlbnRyeV9kZWJ1Z19saW5lX2xpc3QgPSBOVUxMOworCWVudHJpZXNfc3ltYm9sc19hc2NlbmRpbmcgPSBlbnRyaWVzX2FkZHJlc3NfYXNjZW5kaW5nID0gTlVMTDsKKworCWlmICgocmMgPSBwYXJzZV9hbGwoaml0ZHVtcCwgaml0ZHVtcCArIGZpbGVfaW5mby5kbXBfZmlsZV9zdGF0LnN0X3NpemUsCisJICAgICAgICAgICAgICAgICAgICBlbmRfdGltZSkpID09IE9QX0pJVF9DT05WX0ZBSUwpCisJCWdvdG8gb3V0OworCisJY3JlYXRlX2FycmF5cygpOworCWlmICgocmMgPSByZXNvbHZlX292ZXJsYXBzKHN0YXJ0X3RpbWUpKSA9PSBPUF9KSVRfQ09OVl9GQUlMKQorCQlnb3RvIG91dDsKKworCWRpc2FtYmlndWF0ZV9zeW1ib2xfbmFtZXMoKTsKKwlpZiAoIWVudHJ5X2NvdW50KQorCQlyZXR1cm4gT1BfSklUX0NPTlZfTk9fSklUX1JFQ1NfSU5fRFVNUEZJTEU7CisKKwlpZiAoKGN1cl9iZmQgPSBvcGVuX2VsZihlbGZmaWxlKSkgPT0gTlVMTCkgeworCQlyYyA9IE9QX0pJVF9DT05WX0ZBSUw7CisJCWdvdG8gb3V0OworCX0KKworCWluaXRfZGVidWdfbGluZV9pbmZvKGN1cl9iZmQpOworCisJaWYgKChyYyA9IHBhcnRpdGlvbl9zZWN0aW9ucygpKSA9PSBPUF9KSVRfQ09OVl9GQUlMKQorCQlnb3RvIG91dDsKKworCWlmICgocmMgPSBmaWxsX3NlY3Rpb25zKCkpID09IE9QX0pJVF9DT05WX0ZBSUwpCisJCWdvdG8gb3V0OworCisJZmluYWxpemVfZGVidWdfbGluZV9pbmZvKGN1cl9iZmQpOworCisJaWYgKGN1cl9iZmQpCisJCWJmZF9jbG9zZShjdXJfYmZkKTsKKwlmcmVlKHN5bXMpOworCW91dDogZnJlZV9qaXRfcmVjb3JkcygpOworCWZyZWVfaml0X2RlYnVnX2xpbmUoKTsKKwlmcmVlKGVudHJpZXNfc3ltYm9sc19hc2NlbmRpbmcpOworCWZyZWUoZW50cmllc19hZGRyZXNzX2FzY2VuZGluZyk7CisJcmV0dXJuIHJjOworfQorCmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9vcGppdGNvbnYvY3JlYXRlX2JmZC5jIGIvb3Byb2ZpbGUtMC45Ljcvb3BqaXRjb252L2NyZWF0ZV9iZmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTBlNTlmCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45Ljcvb3BqaXRjb252L2NyZWF0ZV9iZmQuYwpAQCAtMCwwICsxLDI3MiBAQAorLyoqCisgKiBAZmlsZSBjcmVhdGVfYmZkLmMKKyAqIFJvdXRpbmUgdG8gaGFuZGxlIGVsZiBmaWxlIGNyZWF0aW9uCisgKgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwNyBPUHJvZmlsZSBhdXRob3JzCisgKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORworICoKKyAqIEBhdXRob3IgSmVucyBXaWxrZQorICogQE1vZGlmaWNhdGlvbnMgTWF5bmFyZCBKb2huc29uCisgKiBATW9kaWZpY2F0aW9ucyBQaGlsaXBwZSBFbGllCisgKiBATW9kaWZpY2F0aW9ucyBEYW5pZWwgSGFuc2VsCisgKgorICogQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDA3CisgKgorICovCisKKyNpbmNsdWRlICJvcGppdGNvbnYuaCIKKyNpbmNsdWRlICJvcGRfcHJpbnRmLmgiCisjaW5jbHVkZSAib3BfbGliaWJlcnR5LmgiCisKKyNpbmNsdWRlIDxiZmQuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorCisvKiBDcmVhdGUgdGhlIHN5bWJvbHMgYW5kIGZpbGwgdGhlIHN5bXMgYXJyYXkgZm9yIGFsbCBmdW5jdGlvbnMKKyAqIGZyb20gc3RhcnRfaWR4IHRvIGVuZF9pZHggcG9pbnRpbmcgaW50byBlbnRyaWVzX2FkZHJlc3NfYXNjZW5kaW5nIGFycmF5ICovCitzdGF0aWMgaW50IGZpbGxfc3ltdGFiKHZvaWQpCit7CisJaW50IHJjID0gT1BfSklUX0NPTlZfT0s7CisJdTMyIGk7CisJaW50IHI7CisJc3RydWN0IGppdGVudHJ5IGNvbnN0ICogZTsKKwlhc3ltYm9sICogczsKKwlhc2VjdGlvbiAqIHNlY3Rpb24gPSBOVUxMOworCisJLyogQ2hlY2sgZm9yIHZhbGlkIHZhbHVlIG9mIGVudHJ5X2NvdW50IHRvIGF2b2lkIGludGVnZXIgb3ZlcmZsb3cuICovCisJaWYgKGVudHJ5X2NvdW50ID4gVUlOVDMyX01BWCAtIDEpIHsKKwkJYmZkX3BlcnJvcigiaW52YWxpZCBlbnRyeV9jb3VudCB2YWx1ZSIpOworCQlyYyA9IE9QX0pJVF9DT05WX0ZBSUw7CisJCWdvdG8gb3V0OworCX0KKwkKKwlzeW1zID0geG1hbGxvYyhzaXplb2YoYXN5bWJvbCAqKSAqIChlbnRyeV9jb3VudCsxKSk7CisJc3ltc1tlbnRyeV9jb3VudF0gPSBOVUxMOworCWZvciAoaSA9IDA7IGkgPCBlbnRyeV9jb3VudDsgaSsrKSB7CisJCWUgPSBlbnRyaWVzX2FkZHJlc3NfYXNjZW5kaW5nW2ldOworCQlpZiAoZS0+c2VjdGlvbikKKwkJCXNlY3Rpb24gPSBlLT5zZWN0aW9uOworCQlzID0gYmZkX21ha2VfZW1wdHlfc3ltYm9sKGN1cl9iZmQpOworCQlpZiAoIXMpIHsKKwkJCWJmZF9wZXJyb3IoImJmZF9tYWtlX2VtcHR5X3N5bWJvbCIpOworCQkJcmMgPSBPUF9KSVRfQ09OVl9GQUlMOworCQkJZ290byBvdXQ7CisJCX0KKwkJcy0+bmFtZSA9IGUtPnN5bWJvbF9uYW1lOworCQlzLT5zZWN0aW9uID0gc2VjdGlvbjsKKwkJcy0+ZmxhZ3MgPSBCU0ZfR0xPQkFMIHwgQlNGX0ZVTkNUSU9OOworCQlzLT52YWx1ZSA9IGUtPnZtYSAtIHNlY3Rpb24tPnZtYTsKKwkJdmVyYnByaW50ZihkZWJ1ZywiYWRkIHN5bTogbmFtZT0lcywgdmFsdWU9JWxseFxuIiwgcy0+bmFtZSwKKwkJCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpcy0+dmFsdWUpOworCQlzeW1zW2ldID0gczsKKwl9CisJciA9IGJmZF9zZXRfc3ltdGFiKGN1cl9iZmQsIHN5bXMsIGVudHJ5X2NvdW50KTsKKwlpZiAociA9PSBGQUxTRSkgeworCQliZmRfcGVycm9yKCJiZmRfc2V0X3N5bXRhYiIpOworCQlyYyA9IE9QX0pJVF9DT05WX0ZBSUw7CisJfQorb3V0OgorCXJldHVybiByYzsKK30KKworLyoKKyAqIGNyZWF0ZSBhIG5ldyBzZWN0aW9uLgorICovCithc2VjdGlvbiAqIGNyZWF0ZV9zZWN0aW9uKGJmZCAqIGFiZmQsIGNoYXIgY29uc3QgKiBzZWN0aW9uX25hbWUsCisJCQkgIHNpemVfdCBzaXplLCBiZmRfdm1hIHZtYSwgZmxhZ3dvcmQgZmxhZ3MpCit7CisJYXNlY3Rpb24gKiBzZWN0aW9uOworCisJdmVyYnByaW50ZihkZWJ1ZywgImNyZWF0ZV9zZWN0aW9uKCkgJXNcbiIsIHNlY3Rpb25fbmFtZSk7CisJc2VjdGlvbiA9IGJmZF9tYWtlX3NlY3Rpb24oYWJmZCwgc2VjdGlvbl9uYW1lKTsKKwlpZiAoc2VjdGlvbiA9PSBOVUxMKSAgeworCQliZmRfcGVycm9yKCJiZmRfbWFrZV9zZWN0aW9uIik7CisJCWdvdG8gZXJyb3I7CisJfQorCWlmIChiZmRfc2V0X3NlY3Rpb25fdm1hKGFiZmQsIHNlY3Rpb24sIHZtYSkgPT0gRkFMU0UpIHsKKwkJYmZkX3BlcnJvcigiYmZkX3NldF9zZWN0aW9uX3ZtYSIpOworCQlnb3RvIGVycm9yOworCX0KKwlpZiAoYmZkX3NldF9zZWN0aW9uX3NpemUoYWJmZCwgc2VjdGlvbiwgc2l6ZSkgPT0gRkFMU0UpIHsKKwkJYmZkX3BlcnJvcigiYmZkX3NldF9zZWN0aW9uX3NpemUiKTsKKwkJZ290byBlcnJvcjsKKwl9CisJaWYgKGJmZF9zZXRfc2VjdGlvbl9mbGFncyhhYmZkLCBzZWN0aW9uLCBmbGFncykgPT0gRkFMU0UpIHsKKwkJYmZkX3BlcnJvcigiYmZkX3NldF9zZWN0aW9uX2ZsYWdzIik7CisJCWdvdG8gZXJyb3I7CisJfQorCXJldHVybiBzZWN0aW9uOworZXJyb3I6CisJcmV0dXJuIE5VTEw7Cit9CisKKworLyogY3JlYXRlIGEgLnRleHQgc2VjdGlvbi4gZW5kX2lkeDogaW5kZXggbGFzdCBqaXRlbnRyeSAoaW5jbHVzaXZlISkgICovCitzdGF0aWMgaW50IGNyZWF0ZV90ZXh0X3NlY3Rpb24oaW50IHN0YXJ0X2lkeCwgaW50IGVuZF9pZHgpCit7CisJaW50IHJjID0gT1BfSklUX0NPTlZfT0s7CisKKwlhc2VjdGlvbiAqIHNlY3Rpb247CisJY2hhciBjb25zdCAqIHNlY3Rpb25fbmFtZTsKKwlpbnQgaWR4ID0gc3RhcnRfaWR4OworCXVuc2lnbmVkIGxvbmcgbG9uZyB2bWFfc3RhcnQgPQorCQllbnRyaWVzX2FkZHJlc3NfYXNjZW5kaW5nW3N0YXJ0X2lkeF0tPnZtYTsKKwlzdHJ1Y3Qgaml0ZW50cnkgKiBlZSA9IGVudHJpZXNfYWRkcmVzc19hc2NlbmRpbmdbZW5kX2lkeF07CisJdW5zaWduZWQgbG9uZyBsb25nIHZtYV9lbmQgPSBlZS0+dm1hICsgZWUtPmNvZGVfc2l6ZTsKKwlpbnQgc2l6ZSA9IHZtYV9lbmQgLSB2bWFfc3RhcnQ7CisKKwlzZWN0aW9uX25hbWUgPSBiZmRfZ2V0X3VuaXF1ZV9zZWN0aW9uX25hbWUoY3VyX2JmZCwgIi50ZXh0IiwgJmlkeCk7CisJdmVyYnByaW50ZihkZWJ1ZywgInNlY3Rpb24gaWR4PSVpLCBuYW1lPSVzLCB2bWFfc3RhcnQ9JWxseCwgc2l6ZT0laVxuIiwKKwkJICAgaWR4LCBzZWN0aW9uX25hbWUsIHZtYV9zdGFydCwgc2l6ZSk7CisKKwlzZWN0aW9uID0gY3JlYXRlX3NlY3Rpb24oY3VyX2JmZCwgc2VjdGlvbl9uYW1lLCBzaXplLCB2bWFfc3RhcnQsCisgICAgICAgICAgICAgICBTRUNfQUxMT0N8U0VDX0xPQUR8U0VDX1JFQURPTkxZfFNFQ19DT0RFfFNFQ19IQVNfQ09OVEVOVFMpOworCWlmIChzZWN0aW9uKQorCQllbnRyaWVzX2FkZHJlc3NfYXNjZW5kaW5nW3N0YXJ0X2lkeF0tPnNlY3Rpb24gPSBzZWN0aW9uOworCWVsc2UKKwkJcmMgPSBPUF9KSVRfQ09OVl9GQUlMOworCisJcmV0dXJuIHJjOworfQorCisvKiBmaWxsIGEgc2VjdGlvbiBjb250ZW50cyBhdCBhIGdpdmVuIG9mZnNldCBmcm9tIHRoZSBzdGFydCBvZiB0aGUgc2VjdGlvbiAqLworaW50IGZpbGxfc2VjdGlvbl9jb250ZW50KGJmZCAqIGFiZmQsIGFzZWN0aW9uICogc2VjdGlvbiwKKwkJCSB2b2lkIGNvbnN0ICogYiwgZmlsZV9wdHIgb2Zmc2V0LCBzaXplX3Qgc3opCit7CisJaWYgKGJmZF9zZXRfc2VjdGlvbl9jb250ZW50cyhhYmZkLCBzZWN0aW9uLCBiLCBvZmZzZXQsIHN6KSA9PSBGQUxTRSkgeworCQliZmRfcGVycm9yKCJiZmRfc2V0X3NlY3Rpb25fY29udGVudHMiKTsKKwkJcmV0dXJuIE9QX0pJVF9DT05WX0ZBSUw7CisJfQorCXJldHVybiBPUF9KSVRfQ09OVl9PSzsKK30KKworLyoKKyAqIENvcHkgYWxsIGNvZGUgb2YgdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSB3aXRoaW4gc3RhcnRfaWR4IGFuZCBlbmRfaWR4IHRvIAorICogdGhlIHNlY3Rpb24uCisgKi8KK3N0YXRpYyBpbnQgZmlsbF90ZXh0X3NlY3Rpb25fY29udGVudChhc2VjdGlvbiAqIHNlY3Rpb24sIGludCBzdGFydF9pZHgsCisJCQkJICAgICBpbnQgZW5kX2lkeCkKK3sKKwlpbnQgcmMgPSBPUF9KSVRfQ09OVl9PSzsKKwl1bnNpZ25lZCBsb25nIGxvbmcgdm1hX3N0YXJ0ID0KKwkJZW50cmllc19hZGRyZXNzX2FzY2VuZGluZ1tzdGFydF9pZHhdLT52bWE7CisJc3RydWN0IGppdGVudHJ5IGNvbnN0ICogZTsKKwlpbnQgaTsKKworCWZvciAoaSA9IHN0YXJ0X2lkeDsgaSA8PSBlbmRfaWR4OyBpKyspIHsKKwkJZSA9IGVudHJpZXNfYWRkcmVzc19hc2NlbmRpbmdbaV07CisJCXZlcmJwcmludGYoZGVidWcsICJzZWN0aW9uID0gJXMsIGkgPSAlaSwgY29kZSA9ICVsbHgsIgorCQkJICAgIiB2bWEgPSAlbGx4LCBvZmZzZXQgPSAlbGx4LCIKKwkJCSAgICJzaXplID0gJWksIG5hbWUgPSAlc1xuIiwKKwkJCSAgIHNlY3Rpb24tPm5hbWUsIGksCisJCQkgICAodW5zaWduZWQgbG9uZyBsb25nKSAodWludHB0cl90KSBlLT5jb2RlLAorCQkJICAgZS0+dm1hLCBlLT52bWEgLSB2bWFfc3RhcnQsCisJCQkgICBlLT5jb2RlX3NpemUsIGUtPnN5bWJvbF9uYW1lKTsKKwkJLyogdGhlIHJpZ2h0IHBhcnQgdGhhdCBpcyBjcmVhdGVkIGJ5IHNwbGl0X2VudHJ5IG1heSAKKwkJICogaGF2ZSBubyBjb2RlOyBhbHNvLCB0aGUgYWdlbnQgbWF5IGhhdmUgcGFzc2VkIE5VTEwKKwkJICogZm9yIHRoZSBjb2RlIGxvY2F0aW9uLgorCQkgKi8KKwkJaWYgKGUtPmNvZGUpIHsKKwkJCXJjID0gZmlsbF9zZWN0aW9uX2NvbnRlbnQoY3VyX2JmZCwgc2VjdGlvbiwKKwkJCQllLT5jb2RlLCAoZmlsZV9wdHIpIChlLT52bWEgLSB2bWFfc3RhcnQpLAorCQkJCShiZmRfc2l6ZV90eXBlKWUtPmNvZGVfc2l6ZSk7CisJCQlpZiAocmMgIT0gT1BfSklUX0NPTlZfT0spCisJCQkJYnJlYWs7CisJCX0KKwl9CisJcmV0dXJuIHJjOworfQorCisKKy8qIFdhbGsgb3ZlciB0aGUgc3ltYm9scyBzb3J0ZWQgYnkgYWRkcmVzcyBhbmQgY3JlYXRlIEVMRiBzZWN0aW9ucy4gV2hlbmV2ZXIgd2UKKyAqIGhhdmUgYSBnYXAgZ3JlYXRlciBvciBlcXVhbCB0byA0MDk2IG1ha2UgYSBuZXcgc2VjdGlvbi4KKyAqLworaW50IHBhcnRpdGlvbl9zZWN0aW9ucyh2b2lkKQoreworCWludCByYyA9IE9QX0pJVF9DT05WX09LOworCXUzMiBpLCBqOworCXN0cnVjdCBqaXRlbnRyeSBjb25zdCAqIHByZWQ7CisJc3RydWN0IGppdGVudHJ5IGNvbnN0ICogZW50cnk7CisJdW5zaWduZWQgbG9uZyBsb25nIGVuZF9hZGRyOworCisJLy8gaTogc3RhcnQgaW5kZXggb2YgdGhlIHNlY3Rpb24KKwlpID0gMDsKKwlmb3IgKGogPSAxOyBqIDwgZW50cnlfY291bnQ7IGorKykgeworCQllbnRyeSA9IGVudHJpZXNfYWRkcmVzc19hc2NlbmRpbmdbal07CisJCXByZWQgPSBlbnRyaWVzX2FkZHJlc3NfYXNjZW5kaW5nW2ogLSAxXTsKKwkJZW5kX2FkZHIgPSBwcmVkLT52bWEgKyBwcmVkLT5jb2RlX3NpemU7CisJCS8vIGNhbGN1bGF0ZSBnYXAgYmV0d2VlbiBjb2RlLCBpZiBpdCBpcyBtb3JlIHRoYW4gb25lIHBhZ2UKKwkJLy8gY3JlYXRlIGFuIGFkZGl0aW9uYWwgc2VjdGlvbgorCQlpZiAoKGVudHJ5LT52bWEgLSBlbmRfYWRkcikgPj0gNDA5NikgeworCQkJcmMgPSBjcmVhdGVfdGV4dF9zZWN0aW9uKGksIGogLSAxKTsKKwkJCWlmIChyYyA9PSBPUF9KSVRfQ09OVl9GQUlMKQorCQkJCWdvdG8gb3V0OworCQkJaSA9IGo7CisJCX0KKwl9CisJLy8gdGhpcyBob2xkcyBhbHdheXMgaWYgd2UgaGF2ZSBhdCBsZWFzdCBvbmUgaml0ZW50cnkKKwlpZiAoaSA8IGVudHJ5X2NvdW50KQorCQlyYyA9IGNyZWF0ZV90ZXh0X3NlY3Rpb24oaSwgZW50cnlfY291bnQgLSAxKTsKK291dDoKKwlyZXR1cm4gcmM7Cit9CisKKworLyogRmlsbCB0aGUgY29kZSBjb250ZW50IGludG8gdGhlIHNlY3Rpb25zIGNyZWF0ZWQgYnkgcGFydGl0aW9uX3NlY3Rpb25zKCkgKi8KK2ludCBmaWxsX3NlY3Rpb25zKHZvaWQpCit7CisJaW50IHJjID0gT1BfSklUX0NPTlZfT0s7CisJdTMyIGksIGo7CisJYXNlY3Rpb24gKiBzZWN0aW9uOworCisJcmMgPSBmaWxsX3N5bXRhYigpOworCWlmIChyYyA9PSBPUF9KSVRfQ09OVl9GQUlMKQorCQlnb3RvIG91dDsKKworCXZlcmJwcmludGYoZGVidWcsICJvcGppdGNvbnY6IGZpbGxfc2VjdGlvbnNcbiIpOworCWkgPSAwOworCWZvciAoaiA9IDE7IGogPCBlbnRyeV9jb3VudDsgaisrKSB7CisJCWlmIChlbnRyaWVzX2FkZHJlc3NfYXNjZW5kaW5nW2pdLT5zZWN0aW9uKSB7CisJCQlzZWN0aW9uID0gZW50cmllc19hZGRyZXNzX2FzY2VuZGluZ1tpXS0+c2VjdGlvbjsKKwkJCXJjID0gZmlsbF90ZXh0X3NlY3Rpb25fY29udGVudChzZWN0aW9uLCBpLAorCQkJCQkJICAgICAgIGogLSAxKTsKKwkJCWlmIChyYyA9PSBPUF9KSVRfQ09OVl9GQUlMKQorCQkJCWdvdG8gb3V0OworCQkJaSA9IGo7CisJCX0KKwl9CisJLy8gdGhpcyBob2xkcyBhbHdheXMgaWYgd2UgaGF2ZSBhdCBsZWFzdCBvbmUgaml0ZW50cnkKKwlpZiAoaSA8IGVudHJ5X2NvdW50KSB7CisJCXNlY3Rpb24gPSBlbnRyaWVzX2FkZHJlc3NfYXNjZW5kaW5nW2ldLT5zZWN0aW9uOworCQlyYyA9IGZpbGxfdGV4dF9zZWN0aW9uX2NvbnRlbnQoc2VjdGlvbiwKKwkJCQkJICAgICAgIGksIGVudHJ5X2NvdW50IC0gMSk7CisJfQorb3V0OgorCXJldHVybiByYzsKK30KKworCisvKiBjcmVhdGUgdGhlIGVsZiBmaWxlICovCitiZmQgKiBvcGVuX2VsZihjaGFyIGNvbnN0ICogZmlsZW5hbWUpCit7CisJYmZkICogYWJmZDsKKworCWFiZmQgPSBiZmRfb3BlbncoZmlsZW5hbWUsIGR1bXBfYmZkX3RhcmdldF9uYW1lKTsKKwlpZiAoIWFiZmQpIHsKKwkJYmZkX3BlcnJvcigiYmZkX29wZW53Iik7CisJCWdvdG8gZXJyb3IxOworCX0KKwlpZiAoYmZkX3NldF9mb3JtYXQoYWJmZCwgYmZkX29iamVjdCkgPT0gRkFMU0UpIHsKKwkJYmZkX3BlcnJvcigiYmZkX3NldF9mb3JtYXQiKTsKKwkJZ290byBlcnJvcjsKKwl9CisJaWYgKGJmZF9zZXRfYXJjaF9tYWNoKGFiZmQsIGR1bXBfYmZkX2FyY2gsIGR1bXBfYmZkX21hY2gpID09IEZBTFNFKSB7CisJCWJmZF9wZXJyb3IoImJmZF9zZXRfZm9ybWF0Iik7CisJCWdvdG8gZXJyb3I7CisJfQorCXJldHVybiBhYmZkOworZXJyb3I6CisJYmZkX2Nsb3NlKGFiZmQpOworZXJyb3IxOgorCXJldHVybiBOVUxMOworfQpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45Ljcvb3BqaXRjb252L2RlYnVnX2xpbmUuYyBiL29wcm9maWxlLTAuOS43L29waml0Y29udi9kZWJ1Z19saW5lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDdkYjhlYwotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L29waml0Y29udi9kZWJ1Z19saW5lLmMKQEAgLTAsMCArMSw1MjYgQEAKKy8qKgorICogQGZpbGUgZGVidWdfbGluZS5jCisgKiBEV0FSRiAyIGRlYnVnIGxpbmUgaW5mbyBjcmVhdGlvbiBoZWxwZXIKKyAqCisgKiBAcmVtYXJrIENvcHlyaWdodCAyMDA3IE9Qcm9maWxlIGF1dGhvcnMKKyAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCisgKgorICogQGF1dGhvciBQaGlsaXBwZSBFbGllCisgKi8KKworI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8YmZkLmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisKKyNpbmNsdWRlICJvcGppdGNvbnYuaCIKKyNpbmNsdWRlICJqaXRkdW1wLmgiCisjaW5jbHVkZSAib3BhZ2VudC5oIgorI2luY2x1ZGUgIm9wX2xpYmliZXJ0eS5oIgorI2luY2x1ZGUgIm9wX2dyb3dhYmxlX2J1ZmZlci5oIgorCisvKgorICogVGVybWlub2xvZ3kgY29tZXMgZnJvbSB0aGUgVElTIERXQVJGIERlYnVnZ2luZyBJbmZvcm1hdGlvbiBGb3JtYXQKKyAqIHZlcnNpb24gMi4wCisgKi8KKwordHlwZWRlZiB1aW50MzJfdCB1d29yZDsKK3R5cGVkZWYgdWludDE2X3QgdWhhbGY7Cit0eXBlZGVmIGludDMyX3QgIHN3b3JkOwordHlwZWRlZiBpbnQxNl90ICBzaGFsZjsKK3R5cGVkZWYgdWludDhfdCAgdWJ5dGU7Cit0eXBlZGVmIGludDhfdCAgIHNieXRlOworCisvKgorICogTWFueSBvZiB0aGUgZm9sbG93aW5nIGVudW0gYXJlIGluY29tcGxldGUgYW5kIGRlZmluZSBvbmx5IHRoZSBzdWJzZXQKKyAqIG9mIERXQVJGIHdlIHVzZS4KKyAqLworZW51bSBsbnNfb3Bjb2RlIHsKKwlEV19MTlNfY29weT0xLAorCURXX0xOU19hZHZhbmNlX3BjLAorCURXX0xOU19hZHZhbmNlX2xpbmUsCisJRFdfTE5TX3NldF9maWxlLAorCURXX0xOU19zZXRfY29sdW1uLAorCURXX0xOU19uZWdhdGVfc3RtdCwKKwlEV19MTlNfc2V0X2Jhc2ljX2Jsb2NrLAorCURXX0xOU19jb25zdF9hZGRfcGMsCisJRFdfTE5TX2ZpeGVkX2FkdmFuY2VfcGMsCisKKwkvKiBBZGRpbmcgbmV3IG9wY29kZSBuZWVkcyBhbiB1cGRhdGUgb2YgdGhlIHN0YW5kYXJkX29wY29kZV9sZW5ndGgKKwkgKiBhcnJheSAqLworCisJRFdfTE5TX21heF9vcGNvZGUsCit9OworCitlbnVtIGxuZV9vcGNvZGUgeworCURXX0xORV9lbmRfc2VxdWVuY2UgPSAxLAorCURXX0xORV9zZXRfYWRkcmVzcywKKwlEV19MTkVfZGVmaW5lX2ZpbGUKK307CisKK2VudW0gZHdfdGFnIHsKKwlEV19UQUdfY29tcGlsZV91bml0ID0gMHgxMSwKK307CisKK2VudW0gZHdfYXQgeworCURXX0FUX25hbWUgPSAweDAzLAorCURXX0FUX3N0bXRfbGlzdCA9IDB4MTAsCisJRFdfQVRfbG93X3BjLAorCURXX0FUX2hpZ2hfcGMsCisJRFdfQVRfbGFuZ3VhZ2UsCisJRFdfQVRfY29tcGRpciA9IDB4MWIsCisJRFdfQVRfcHJvZHVjZXIgPSAweDI1LAorfTsKKworZW51bSBkd19jaGlsZHJlbiB7CisJRFdfQ0hJTERSRU5fbm8sCisJRFdfQ0hJTERSRU5feWVzCit9OworCitlbnVtIGR3X2Zvcm0geworCURXX0ZPUk1fZGF0YTQgPSAweDA2LAorfTsKKworc3RydWN0IGRlYnVnX2xpbmVfaGVhZGVyIHsKKwkvLyBOb3QgY291bnRpbmcgdGhpcyBmaWVsZAorCXV3b3JkIHRvdGFsX2xlbmd0aDsKKwkvLyB2ZXJzaW9uIG51bWJlciAoMiBjdXJyZW50bHkpCisJdWhhbGYgdmVyc2lvbjsKKwkvLyByZWxhdGl2ZSBvZmZzZXQgZnJvbSBuZXh0IGZpZWxkIHRvCisJLy8gcHJvZ3JhbSBzdGF0ZW1lbnQKKwl1d29yZCBwcm9sb2dfbGVuZ3RoOworCXVieXRlIG1pbmltdW1faW5zdHJ1Y3Rpb25fbGVuZ3RoOworCXVieXRlIGRlZmF1bHRfaXNfc3RtdDsKKwkvLyBsaW5lX2Jhc2UgLSBzZWUgRFdBUkYgMiBzcGVjcworCXNieXRlIGxpbmVfYmFzZTsKKwkvLyBsaW5lX3JhbmdlIC0gc2VlIERXQVJGIDIgc3BlY3MKKwl1Ynl0ZSBsaW5lX3JhbmdlOworCS8vIG51bWJlciBvZiBvcGNvZGUgKyAxCisJdWJ5dGUgb3Bjb2RlX2Jhc2U7CisJLyogZm9sbG93IHRoZSBhcnJheSBvZiBvcGNvZGUgYXJncyBucjogdWJ5dGVzIFtucl9vcGNvZGVfYmFzZV0gKi8KKwkvKiBmb2xsb3cgdGhlIHNlYXJjaCBkaXJlY3RvcmllcyBpbmRleCwgemVybyB0ZXJtaW5hdGVkIHN0cmluZworCSAqIHRlcm1pbmF0ZWQgYnkgYW4gZW1wdHkgc3RyaW5nLgorCSAqLworCS8qIGZvbGxvdyBhbiBhcnJheSBvZiB7IGZpbGVuYW1lLCBMRUIxMjgsIExFQjEyOCwgTEVCMTI4IH0sIGZpcnN0IGlzCisJICogdGhlIGRpcmVjdG9yeSBpbmRleCBlbnRyeSwgMCBtZWFucyBjdXJyZW50IGRpcmVjdG9yeSwgdGhlbiBtdGltZQorCSAqIGFuZCBmaWxlc2l6ZSwgbGFzdCBlbnRyeSBpcyBmb2xsb3dlZCBieSBlbiBlbXB0eSBzdHJpbmcuCisJICovCisJLyogZm9sbG93IHRoZSBmaXJzdCBwcm9ncmFtIHN0YXRlbWVudCAqLworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworLyogRFdBUkYgMiBzcGVjIHRhbGsgb25seSBhYm91dCBvbmUgcG9zc2libGUgY29tcGlsYXRpb24gdW5pdCBoZWFkZXIgd2hpbGUKKyAqIGJpbnV0aWxzIGNhbiBoYW5kbGUgdHdvIGZsYXZvdXJzIG9mIGR3YXJmIDIsIDMyIGFuZCA2NCBiaXRzLCB0aGlzIGlzIG5vdAorICogcmVsYXRlZCB0byB0aGUgdXNlZCBhcmNoLCBhbiBFTEYgMzIgY2FuIGhvbGQgbW9yZSB0aGFuIDQgR28gb2YgZGVidWcKKyAqIGluZm9ybWF0aW9uLiBGb3Igbm93IHdlIGhhbmRsZSBvbmx5IERXQVJGIDIgMzIgYml0cyBjb21wIHVuaXQuIEl0J2xsIG9ubHkKKyAqIGJlY29tZSBhIHByb2JsZW0gaWYgd2UgZ2VuZXJhdGUgbW9yZSB0aGFuIDRHQiBvZiBkZWJ1ZyBpbmZvcm1hdGlvbi4KKyAqLworc3RydWN0IGNvbXBpbGF0aW9uX3VuaXRfaGVhZGVyIHsKKwl1d29yZCB0b3RhbF9sZW5ndGg7CisJdWhhbGYgdmVyc2lvbjsKKwl1d29yZCBkZWJ1Z19hYmJyZXZfb2Zmc2V0OworCXVieXRlIHBvaW50ZXJfc2l6ZTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKy8qIGZpZWxkIGZpbGxlZCBhdCBydW4gdGltZSBhcmUgbWFya2VkIHdpdGggLTEgKi8KK3N0YXRpYyBzdHJ1Y3QgZGVidWdfbGluZV9oZWFkZXIgY29uc3QgZGVmYXVsdF9kZWJ1Z19saW5lX2hlYWRlciA9IHsKKwktMSwKKwkyLAorCS0xLAorCTEsCS8qIGNvdWxkIGJlIGJldHRlciB3aGVuIG1pbiBpbnN0cnVjdGlvbiBzaXplICE9IDEgKi8KKwkxLAkvKiB3ZSBkb24ndCB0YWtlIGNhcmUgYWJvdXQgYmFzaWMgYmxvY2sgKi8KKwktNSwJLyogc2Vuc2libGUgdmFsdWUgZm9yIGxpbmUgYmFzZSAuLi4gKi8KKwkxNCwgICAgIC8qIC4uLiBhbmQgbGluZSByYW5nZSBhcmUgZ3Vlc3NlZCBzdGF0aWNhbGx5ICovCisJRFdfTE5TX21heF9vcGNvZGUKK307CisKK3N0YXRpYyB1Ynl0ZSBjb25zdCBzdGFuZGFyZF9vcGNvZGVfbGVuZ3RoW0RXX0xOU19tYXhfb3Bjb2RlIC0gMV0gPQoreworCTAsIDEsIDEsIDEsIDEsIDAsIDAsIDAsIDEKK307CisKKy8qIGZpZWxkIGZpbGxlZCBhdCBydW4gdGltZSBhcmUgbWFya2VkIHdpdGggLTEgKi8KK3N0YXRpYyBzdHJ1Y3QgY29tcGlsYXRpb25fdW5pdF9oZWFkZXIgY29uc3QgZGVmYXVsdF9jb21wX3VuaXRfaGVhZGVyID0geworCS0xLAorCTIsCisJMCwgICAgIC8qIHdlIHJldXNlIHRoZSBzYW1lIGFiYnJldiBlbnRyaWVzIGZvciBhbGwgY29tcCB1bml0ICovCisJLTEKK307CisKKworc3RhdGljIHZvaWQgZW1pdF91d29yZChzdHJ1Y3QgZ3Jvd2FibGVfYnVmZmVyICogYiwgdXdvcmQgZGF0YSkKK3sKKwlhZGRfZGF0YShiLCAmZGF0YSwgc2l6ZW9mKHV3b3JkKSk7Cit9CisKKworc3RhdGljIHZvaWQgZW1pdF9zdHJpbmcoc3RydWN0IGdyb3dhYmxlX2J1ZmZlciAqIGIsIGNoYXIgY29uc3QgKiBzKQoreworCWFkZF9kYXRhKGIsIHMsIHN0cmxlbihzKSArIDEpOworfQorCisKK3N0YXRpYyB2b2lkIGVtaXRfdW5zaWduZWRfTEVCMTI4KHN0cnVjdCBncm93YWJsZV9idWZmZXIgKiBiLAorCQkJCSB1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJZG8geworCQl1Ynl0ZSBjdXIgPSBkYXRhICYgMHg3RjsKKwkJZGF0YSA+Pj0gNzsKKwkJaWYgKGRhdGEpCisJCQljdXIgfD0gMHg4MDsKKwkJYWRkX2RhdGEoYiwgJmN1ciwgMSk7CisJfSB3aGlsZSAoZGF0YSk7Cit9CisKKworc3RhdGljIHZvaWQgZW1pdF9zaWduZWRfTEVCMTI4KHN0cnVjdCBncm93YWJsZV9idWZmZXIgKiBiLCBsb25nIGRhdGEpCit7CisJaW50IG1vcmUgPSAxOworCWludCBuZWdhdGl2ZSA9IGRhdGEgPCAwOworCWludCBzaXplID0gc2l6ZW9mKGxvbmcpICogQ0hBUl9CSVQ7CisJd2hpbGUgKG1vcmUpIHsKKwkJdWJ5dGUgY3VyID0gZGF0YSAmIDB4N0Y7CisJCWRhdGEgPj49IDc7CisJCWlmIChuZWdhdGl2ZSkKKwkJCWRhdGEgfD0gLSAoMSA8PCAoc2l6ZSAtIDcpKTsKKwkJaWYgKChkYXRhID09IDAgJiYgIShjdXIgJiAweDQwKSkgfHwKKwkJICAgIChkYXRhID09IC0xbCAmJiAoY3VyICYgMHg0MCkpKQorCQkJbW9yZSA9IDA7CisJCWVsc2UKKwkJCWN1ciB8PSAweDgwOworCQlhZGRfZGF0YShiLCAmY3VyLCAxKTsKKwl9Cit9CisKKworc3RhdGljIHZvaWQgZW1pdF9leHRlbmRlZF9vcGNvZGUoc3RydWN0IGdyb3dhYmxlX2J1ZmZlciAqIGIsIHVieXRlIG9wY29kZSwKKwkJCQkgdm9pZCAqIGRhdGEsIHNpemVfdCBkYXRhX2xlbikKK3sKKwlhZGRfZGF0YShiLCAiIiwgMSk7CisJZW1pdF91bnNpZ25lZF9MRUIxMjgoYiwgZGF0YV9sZW4gKyAxKTsKKwlhZGRfZGF0YShiLCAmb3Bjb2RlLCAxKTsKKwlhZGRfZGF0YShiLCBkYXRhLCBkYXRhX2xlbik7Cit9CisKKworc3RhdGljIHZvaWQgZW1pdF9vcGNvZGUoc3RydWN0IGdyb3dhYmxlX2J1ZmZlciAqIGIsIHVieXRlIG9wY29kZSkKK3sKKwlhZGRfZGF0YShiLCAmb3Bjb2RlLCAxKTsKK30KKworCitzdGF0aWMgdm9pZCBlbWl0X29wY29kZV9zaWduZWQoc3RydWN0IGdyb3dhYmxlX2J1ZmZlciAqIGIsCisJCQkgICAgICAgdWJ5dGUgb3Bjb2RlLCBsb25nIGRhdGEpCit7CisJYWRkX2RhdGEoYiwgJm9wY29kZSwgMSk7CisJZW1pdF9zaWduZWRfTEVCMTI4KGIsIGRhdGEpOworfQorCisKK3N0YXRpYyB2b2lkIGVtaXRfb3Bjb2RlX3Vuc2lnbmVkKHN0cnVjdCBncm93YWJsZV9idWZmZXIgKiBiLCB1Ynl0ZSBvcGNvZGUsIAorCQkJCSB1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJYWRkX2RhdGEoYiwgJm9wY29kZSwgMSk7CisJZW1pdF91bnNpZ25lZF9MRUIxMjgoYiwgZGF0YSk7Cit9CisKKworc3RhdGljIHZvaWQgZW1pdF9hZHZhbmNlX3BjKHN0cnVjdCBncm93YWJsZV9idWZmZXIgKiBiLCB1bnNpZ25lZCBsb25nIGRlbHRhX3BjKQoreworCWVtaXRfb3Bjb2RlX3Vuc2lnbmVkKGIsIERXX0xOU19hZHZhbmNlX3BjLCBkZWx0YV9wYyk7Cit9CisKKworc3RhdGljIHZvaWQgZW1pdF9hZHZhbmNlX2xpbmVubyhzdHJ1Y3QgZ3Jvd2FibGVfYnVmZmVyICogYiwgbG9uZyBkZWx0YV9saW5lbm8pCit7CisJZW1pdF9vcGNvZGVfc2lnbmVkKGIsIERXX0xOU19hZHZhbmNlX2xpbmUsIGRlbHRhX2xpbmVubyk7Cit9CisKKworc3RhdGljIHZvaWQgZW1pdF9sbmVfZW5kX29mX3NlcXVlbmNlKHN0cnVjdCBncm93YWJsZV9idWZmZXIgKiBiKQoreworCWVtaXRfZXh0ZW5kZWRfb3Bjb2RlKGIsIERXX0xORV9lbmRfc2VxdWVuY2UsIE5VTEwsIDApOworfQorCisKK3N0YXRpYyB2b2lkIGVtaXRfc2V0X2ZpbGUoc3RydWN0IGdyb3dhYmxlX2J1ZmZlciAqIGIsIHVuc2lnbmVkIGxvbmcgaW5kZXgpCit7CisJZW1pdF9vcGNvZGVfdW5zaWduZWQoYiwgRFdfTE5TX3NldF9maWxlLCBpbmRleCk7Cit9CisKKworc3RhdGljIHZvaWQgZW1pdF9sbmVfZGVmaW5lX2ZpbGVuYW1lKHN0cnVjdCBncm93YWJsZV9idWZmZXIgKiBiLAorCQkJCSAgICAgY2hhciBjb25zdCAqIGZpbGVuYW1lKQoreworCS8qIGVtaXRfZXh0ZW5kZWRfb3Bjb2RlKCkgY2FuJ3QgYmUgdXNlZCBoZXJlLCB3ZSBoYXZlIGFkZGl0aW9uYWwKKwkgKiBkYXRhIHRvIG91dHB1dCBhbmQgdGhlIGxlbiBmaWVsZCB3aWxsIGJlIG1pc2NhbGN1bGF0ZWQuICovCisJYWRkX2RhdGEoYiwgIiIsIDEpOworCS8qIHN0cmxlbihmaWxlbmFtZSkgKyB6ZXJvIHRlcm1pbmF0b3IgKyBsZW4gZmllbGQgKyAzIGJ5dGVzIGZvciB0aGUgZGlyCisJICogZW50cnksIHRpbWVzdGFtcCBhbmQgZmlsZXNpemUgKi8KKwllbWl0X3Vuc2lnbmVkX0xFQjEyOChiLCBzdHJsZW4oZmlsZW5hbWUpICsgNSk7CisJZW1pdF9vcGNvZGUoYiwgRFdfTE5FX2RlZmluZV9maWxlKTsKKwllbWl0X3N0cmluZyhiLCBmaWxlbmFtZSk7CisJYWRkX2RhdGEoYiwgIlwwXDBcMCIsIDMpOworfQorCisKK3N0YXRpYyB2b2lkIGVtaXRfbG5lX3NldF9hZGRyZXNzKHN0cnVjdCBncm93YWJsZV9idWZmZXIgKiBiLAorCQkJCSB2b2lkIGNvbnN0ICogYWRkcmVzcykKK3sKKwllbWl0X2V4dGVuZGVkX29wY29kZShiLCBEV19MTkVfc2V0X2FkZHJlc3MsICZhZGRyZXNzLCBzaXplb2YoYWRkcmVzcykpOworfQorCisKK3N0YXRpYyB1Ynl0ZSBnZXRfc3BlY2lhbF9vcGNvZGUoc3RydWN0IGRlYnVnX2xpbmVfaW5mbyBjb25zdCAqIGxpbmUsCisJdW5zaWduZWQgaW50IGxhc3RfbGluZW5vLCB1bnNpZ25lZCBsb25nIGxhc3Rfdm1hKQoreworCXVuc2lnbmVkIGludCB0ZW1wOworCXVuc2lnbmVkIGxvbmcgZGVsdGFfYWRkcjsKKworCS8qIFNlZSBUSVMgRFdBUkYgRGVidWdnaW5nIEluZm9ybWF0aW9uIEZvcm1hdCB2ZXJzaW9uIDIuMCCnIDYuMi41LjEgKi8KKworCXRlbXAgPSAobGluZS0+bGluZW5vIC0gbGFzdF9saW5lbm8pIC0KKwkJZGVmYXVsdF9kZWJ1Z19saW5lX2hlYWRlci5saW5lX2Jhc2U7CisJaWYgKHRlbXAgPj0gZGVmYXVsdF9kZWJ1Z19saW5lX2hlYWRlci5saW5lX3JhbmdlKQorCQlyZXR1cm4gMDsKKworCWRlbHRhX2FkZHIgPSAobGluZS0+dm1hIC0gbGFzdF92bWEpIC8KKwkJZGVmYXVsdF9kZWJ1Z19saW5lX2hlYWRlci5taW5pbXVtX2luc3RydWN0aW9uX2xlbmd0aDsKKwkvKiBUaGlzIGlzIG5vdCBzdWZmaWNpZW50IHRvIGVuc3VyZSBvcGNvZGUgd2lsbCBiZSBpbiBbMC0yNTZdIGJ1dAorCSAqIHN1ZmZpY2llbnQgdG8gZW5zdXJlIHdoZW4gc3VtbWluZyB3aXRoIHRoZSBkZWx0YSBsaW5lbm8gd2Ugd2lsbAorCSAqIG5vdCBvdmVyZmxvdyB0aGUgdW5zaWduZWQgbG9uZyBvcGNvZGUgKi8KKwlpZiAoZGVsdGFfYWRkciA8PSAyNTYgLyBkZWZhdWx0X2RlYnVnX2xpbmVfaGVhZGVyLmxpbmVfcmFuZ2UpIHsKKwkJdW5zaWduZWQgbG9uZyBvcGNvZGUgPSB0ZW1wICsKKwkJCShkZWx0YV9hZGRyICogZGVmYXVsdF9kZWJ1Z19saW5lX2hlYWRlci5saW5lX3JhbmdlKSArCisJCQlkZWZhdWx0X2RlYnVnX2xpbmVfaGVhZGVyLm9wY29kZV9iYXNlOworCisJCXJldHVybiBvcGNvZGUgPD0gMjU1ID8gb3Bjb2RlIDogMDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgdm9pZCBlbWl0X2xpbmVub19pbmZvKHN0cnVjdCBncm93YWJsZV9idWZmZXIgKiBiLAorCXN0cnVjdCBkZWJ1Z19saW5lX2luZm8gY29uc3QgKiBsaW5lLCBzaXplX3QgbnJfZW50cnksCisJdW5zaWduZWQgbG9uZyBjb2RlX2FkZHIpCit7CisJc2l6ZV90IGk7CisKKwkvKgorCSAqIE1hY2hpbmUgc3RhdGUgYXQgc3RhcnQgb2YgYSBzdGF0ZW1lbnQgcHJvZ3JhbQorCSAqIGFkZHJlc3MgPSAwCisJICogZmlsZSAgICA9IDEKKwkgKiBsaW5lICAgID0gMQorCSAqIGNvbHVtbiAgPSAwCisJICogaXNfc3RtdCA9IGRlZmF1bHRfaXNfc3RtdCBhcyBnaXZlbiBpbiB0aGUgZGVidWdfbGluZV9oZWFkZXIKKwkgKiBiYXNpYyBibG9jayA9IDAKKwkgKiBlbmQgc2VxdWVuY2UgPSAwCisJICovCisKKwkvKiBzdGFydCBzdGF0ZSBvZiB0aGUgc3RhdGUgbWFjaGluZSB3ZSB0YWtlIGNhcmUgb2YgKi8KKwl1bnNpZ25lZCBsb25nIGxhc3Rfdm1hID0gY29kZV9hZGRyOworCXVuc2lnbmVkIGludCBsYXN0X2xpbmVubyA9IDE7CisJY2hhciBjb25zdCAgKiBjdXJfZmlsZW5hbWUgPSBOVUxMOworCXVuc2lnbmVkIGxvbmcgY3VyX2ZpbGVfaW5kZXggPSAwOworCisJLyogRklYTUU6IHJlbG9jYXRhYmxlIGFkZHJlc3M/ICovCisJZW1pdF9sbmVfc2V0X2FkZHJlc3MoYiwgKHZvaWQgY29uc3QgKiljb2RlX2FkZHIpOworCWVtaXRfYWR2YW5jZV9saW5lbm8oYiwgbGluZVswXS5saW5lbm8gLSBsYXN0X2xpbmVubyk7CisJbGFzdF9saW5lbm8gPSBsaW5lWzBdLmxpbmVubzsKKwllbWl0X2xuZV9kZWZpbmVfZmlsZW5hbWUoYiwgbGluZVswXS5maWxlbmFtZSk7CisJY3VyX2ZpbGVuYW1lID0gbGluZVswXS5maWxlbmFtZTsKKwllbWl0X3NldF9maWxlKGIsICsrY3VyX2ZpbGVfaW5kZXgpOworCWVtaXRfb3Bjb2RlKGIsIERXX0xOU19jb3B5KTsKKwkKKworCWZvciAoaSA9IDA7IGkgPCBucl9lbnRyeTsgaSsrKSB7CisJCWludCBuZWVkX2NvcHkgPSAwOworCQl1Ynl0ZSBzcGVjaWFsX29wY29kZTsKKworCQlpZiAoIWN1cl9maWxlbmFtZSB8fCBzdHJjbXAoY3VyX2ZpbGVuYW1lLCBsaW5lW2ldLmZpbGVuYW1lKSkgeworCQkJZW1pdF9sbmVfZGVmaW5lX2ZpbGVuYW1lKGIsIGxpbmVbaV0uZmlsZW5hbWUpOworCQkJY3VyX2ZpbGVuYW1lID0gbGluZVtpXS5maWxlbmFtZTsKKwkJCWVtaXRfc2V0X2ZpbGUoYiwgKytjdXJfZmlsZV9pbmRleCk7CisJCQluZWVkX2NvcHkgPSAxOworCQl9CisJCWlmICgoc3BlY2lhbF9vcGNvZGUgPSBnZXRfc3BlY2lhbF9vcGNvZGUoJmxpbmVbaV0sCisJCQkJbGFzdF9saW5lbm8sIGxhc3Rfdm1hKSkgIT0gMCkgeworCQkJbGFzdF9saW5lbm8gPSBsaW5lW2ldLmxpbmVubzsKKwkJCWxhc3Rfdm1hID0gbGluZVtpXS52bWE7CisJCQllbWl0X29wY29kZShiLCBzcGVjaWFsX29wY29kZSk7CisJCX0gZWxzZSB7CisJCQlpZiAobGFzdF9saW5lbm8gIT0gbGluZVtpXS5saW5lbm8pIHsKKwkJCQllbWl0X2FkdmFuY2VfbGluZW5vKGIsCisJCQkJCWxpbmVbaV0ubGluZW5vIC0gbGFzdF9saW5lbm8pOworCQkJCWxhc3RfbGluZW5vID0gbGluZVtpXS5saW5lbm87CisJCQkJbmVlZF9jb3B5ID0gMTsKKwkJCX0KKwkJCWlmIChsYXN0X3ZtYSAhPSBsaW5lW2ldLnZtYSkgeworCQkJCWVtaXRfYWR2YW5jZV9wYyhiLCBsaW5lW2ldLnZtYSAtIGxhc3Rfdm1hKTsKKwkJCQlsYXN0X3ZtYSA9IGxpbmVbaV0udm1hOworCQkJCW5lZWRfY29weSA9IDE7CisJCQl9CisJCQlpZiAobmVlZF9jb3B5KQorCQkJCWVtaXRfb3Bjb2RlKGIsIERXX0xOU19jb3B5KTsKKwkJfQorCX0KK30KKworCitzdGF0aWMgdm9pZCBhZGRfZGVidWdfbGluZShzdHJ1Y3QgZ3Jvd2FibGVfYnVmZmVyICogYiwKKwlzdHJ1Y3QgZGVidWdfbGluZV9pbmZvIGNvbnN0ICogbGluZSwgc2l6ZV90IG5yX2VudHJ5LAorCXVuc2lnbmVkIGxvbmcgY29kZV9hZGRyKQoreworCXN0cnVjdCBkZWJ1Z19saW5lX2hlYWRlciAqIGRiZ19oZWFkZXI7CisJc2l6ZV90IG9sZF9zaXplOworCisJb2xkX3NpemUgPSBiLT5zaXplOworCisJYWRkX2RhdGEoYiwgJmRlZmF1bHRfZGVidWdfbGluZV9oZWFkZXIsCisJCSBzaXplb2YoZGVmYXVsdF9kZWJ1Z19saW5lX2hlYWRlcikpOworCWFkZF9kYXRhKGIsICZzdGFuZGFyZF9vcGNvZGVfbGVuZ3RoLCAgc2l6ZW9mKHN0YW5kYXJkX29wY29kZV9sZW5ndGgpKTsKKworCS8vIGVtcHR5IGRpcmVjdG9yeSBlbnRyeQorCWFkZF9kYXRhKGIsICIiLCAxKTsKKworCS8vIGVtcHR5IGZpbGVuYW1lIGRpcmVjdG9yeQorCWFkZF9kYXRhKGIsICIiLCAxKTsKKworCWRiZ19oZWFkZXIgPSBiLT5wICsgb2xkX3NpemU7CisJZGJnX2hlYWRlci0+cHJvbG9nX2xlbmd0aCA9IChiLT5zaXplIC0gb2xkX3NpemUpIC0KKwkJb2Zmc2V0b2Yoc3RydWN0IGRlYnVnX2xpbmVfaGVhZGVyLCBtaW5pbXVtX2luc3RydWN0aW9uX2xlbmd0aCk7CisKKwllbWl0X2xpbmVub19pbmZvKGIsIGxpbmUsIG5yX2VudHJ5LCBjb2RlX2FkZHIpOworCisJZW1pdF9sbmVfZW5kX29mX3NlcXVlbmNlKGIpOworCisJZGJnX2hlYWRlciA9IGItPnAgKyBvbGRfc2l6ZTsKKwlkYmdfaGVhZGVyLT50b3RhbF9sZW5ndGggPSAoYi0+c2l6ZSAtIG9sZF9zaXplKSAtCisJCW9mZnNldG9mKHN0cnVjdCBkZWJ1Z19saW5lX2hlYWRlciwgdmVyc2lvbik7Cit9CisKKworc3RhdGljIHZvaWQgYWRkX2NvbXBpbGF0aW9uX3VuaXQoc3RydWN0IGdyb3dhYmxlX2J1ZmZlciAqIGIsCisJCQkJIHNpemVfdCBvZmZzZXRfZGVidWdfbGluZSkKK3sKKwlzdHJ1Y3QgY29tcGlsYXRpb25fdW5pdF9oZWFkZXIgKiBjb21wX3VuaXRfaGVhZGVyOworCisJc2l6ZV90IG9sZF9zaXplID0gYi0+c2l6ZTsKKworCWFkZF9kYXRhKGIsICZkZWZhdWx0X2NvbXBfdW5pdF9oZWFkZXIsCisJCSBzaXplb2YoZGVmYXVsdF9jb21wX3VuaXRfaGVhZGVyKSk7CisKKwllbWl0X3Vuc2lnbmVkX0xFQjEyOChiLCAxKTsKKwllbWl0X3V3b3JkKGIsIG9mZnNldF9kZWJ1Z19saW5lKTsKKworCWNvbXBfdW5pdF9oZWFkZXIgPSBiLT5wICsgb2xkX3NpemU7CisJY29tcF91bml0X2hlYWRlci0+dG90YWxfbGVuZ3RoID0gKGItPnNpemUgLSBvbGRfc2l6ZSkgLQorCQlvZmZzZXRvZihzdHJ1Y3QgY29tcGlsYXRpb25fdW5pdF9oZWFkZXIsIHZlcnNpb24pOworCWNvbXBfdW5pdF9oZWFkZXItPnBvaW50ZXJfc2l6ZSA9IHNpemVvZih2b2lkICopOworfQorCisKK3N0YXRpYyB2b2lkIGNyZWF0ZV9kZWJ1Z19hYmJyZXYoc3RydWN0IGdyb3dhYmxlX2J1ZmZlciAqIGIpCit7CisJZW1pdF91bnNpZ25lZF9MRUIxMjgoYiwgMSk7CisJZW1pdF91bnNpZ25lZF9MRUIxMjgoYiwgRFdfVEFHX2NvbXBpbGVfdW5pdCk7CisJZW1pdF91bnNpZ25lZF9MRUIxMjgoYiwgRFdfQ0hJTERSRU5feWVzKTsKKwllbWl0X3Vuc2lnbmVkX0xFQjEyOChiLCBEV19BVF9zdG10X2xpc3QpOworCWVtaXRfdW5zaWduZWRfTEVCMTI4KGIsIERXX0ZPUk1fZGF0YTQpOworCWVtaXRfdW5zaWduZWRfTEVCMTI4KGIsIDApOworfQorCitzdGF0aWMgc3RydWN0IGdyb3dhYmxlX2J1ZmZlciBiX2xpbmU7CitzdGF0aWMgc3RydWN0IGdyb3dhYmxlX2J1ZmZlciBiX2RlYnVnX2luZm87CitzdGF0aWMgc3RydWN0IGdyb3dhYmxlX2J1ZmZlciBiX2RlYnVnX2FiYnJldjsKKworaW50IGluaXRfZGVidWdfbGluZV9pbmZvKGJmZCAqIGFiZmQpCit7CisJYXNlY3Rpb24gKiBsaW5lX3NlY3Rpb24sICogZGVidWdfaW5mbywgKiBkZWJ1Z19hYmJyZXY7CisJc3RydWN0IGppdGVudHJ5X2RlYnVnX2xpbmUgKiBkZWJ1Z19saW5lOworCisJaW5pdF9idWZmZXIoJmJfbGluZSk7CisJaW5pdF9idWZmZXIoJmJfZGVidWdfaW5mbyk7CisJaW5pdF9idWZmZXIoJmJfZGVidWdfYWJicmV2KTsKKworCWZvciAoZGVidWdfbGluZSA9IGppdGVudHJ5X2RlYnVnX2xpbmVfbGlzdDsKKwkgICAgIGRlYnVnX2xpbmU7CisJICAgICBkZWJ1Z19saW5lID0gZGVidWdfbGluZS0+bmV4dCkgeworCQlzdHJ1Y3QganJfY29kZV9kZWJ1Z19pbmZvIGNvbnN0ICogcmVjID0gZGVidWdfbGluZS0+ZGF0YTsKKwkJaWYgKHJlYy0+bnJfZW50cnkpIHsKKwkJCXNpemVfdCBpOworCQkJdm9pZCBjb25zdCAqIGRhdGEgPSByZWMgKyAxOworCQkJc3RydWN0IGRlYnVnX2xpbmVfaW5mbyAqIGRiZ19saW5lID0KKwkJCQl4bWFsbG9jKHJlYy0+bnJfZW50cnkgKgorCQkJCQlzaXplb2Yoc3RydWN0IGRlYnVnX2xpbmVfaW5mbykpOworCQkJZm9yIChpID0gMDsgaSA8IHJlYy0+bnJfZW50cnk7ICsraSkgeworCQkJCWRiZ19saW5lW2ldLnZtYSA9ICoodW5zaWduZWQgbG9uZyAqKWRhdGE7CisJCQkJZGF0YSArPSBzaXplb2YodW5zaWduZWQgbG9uZyk7CisJCQkJZGJnX2xpbmVbaV0ubGluZW5vID0gKih1bnNpZ25lZCBpbnQgKilkYXRhOworCQkJCWRhdGEgKz0gc2l6ZW9mKHVuc2lnbmVkIGludCk7CisJCQkJZGJnX2xpbmVbaV0uZmlsZW5hbWUgPSBkYXRhOworCQkJCWRhdGEgKz0gc3RybGVuKGRhdGEpICsgMTsKKwkJCX0KKworCQkJYWRkX2NvbXBpbGF0aW9uX3VuaXQoJmJfZGVidWdfaW5mbywgYl9saW5lLnNpemUpOworCQkJYWRkX2RlYnVnX2xpbmUoJmJfbGluZSwgZGJnX2xpbmUsCisJCQkJICAgICAgIHJlYy0+bnJfZW50cnksIHJlYy0+Y29kZV9hZGRyKTsKKwkJCWNyZWF0ZV9kZWJ1Z19hYmJyZXYoJmJfZGVidWdfYWJicmV2KTsKKworCQkJZnJlZShkYmdfbGluZSk7CisJCX0KKwl9CisJCisJbGluZV9zZWN0aW9uID0gY3JlYXRlX3NlY3Rpb24oYWJmZCwgIi5kZWJ1Z19saW5lIiwgYl9saW5lLnNpemUsIDAsCisJCVNFQ19IQVNfQ09OVEVOVFN8U0VDX1JFQURPTkxZfFNFQ19ERUJVR0dJTkcpOworCWlmICghbGluZV9zZWN0aW9uKQorCQlyZXR1cm4gLTE7CisKKwlkZWJ1Z19pbmZvID0gY3JlYXRlX3NlY3Rpb24oYWJmZCwgIi5kZWJ1Z19pbmZvIiwgYl9kZWJ1Z19pbmZvLnNpemUsIDAsCisJCVNFQ19IQVNfQ09OVEVOVFN8U0VDX1JFQURPTkxZfFNFQ19ERUJVR0dJTkcpOworIAlpZiAoIWRlYnVnX2luZm8pCisJCXJldHVybiAtMTsKKworCWRlYnVnX2FiYnJldiA9IGNyZWF0ZV9zZWN0aW9uKGFiZmQsICIuZGVidWdfYWJicmV2IiwKKwkJYl9kZWJ1Z19hYmJyZXYuc2l6ZSwgMCwKKwkJU0VDX0hBU19DT05URU5UU3xTRUNfUkVBRE9OTFl8U0VDX0RFQlVHR0lORyk7CisJaWYgKCFkZWJ1Z19hYmJyZXYpCisJCXJldHVybiAtMTsKKworCXJldHVybiAwOworfQorCisKK2ludCBmaW5hbGl6ZV9kZWJ1Z19saW5lX2luZm8oYmZkICogYWJmZCkKK3sKKwlhc2VjdGlvbiAqIGxpbmVfc2VjdGlvbiwgKiBkZWJ1Z19pbmZvLCAqIGRlYnVnX2FiYnJldjsKKworCWxpbmVfc2VjdGlvbiA9IGJmZF9nZXRfc2VjdGlvbl9ieV9uYW1lKGFiZmQsICIuZGVidWdfbGluZSIpOworCWlmICghbGluZV9zZWN0aW9uKQorCQlyZXR1cm4gLTE7CisKKwlkZWJ1Z19pbmZvID0gYmZkX2dldF9zZWN0aW9uX2J5X25hbWUoYWJmZCwgIi5kZWJ1Z19pbmZvIik7CisgCWlmICghZGVidWdfaW5mbykKKwkJcmV0dXJuIC0xOworCisKKwlkZWJ1Z19hYmJyZXYgPSBiZmRfZ2V0X3NlY3Rpb25fYnlfbmFtZShhYmZkLCAiLmRlYnVnX2FiYnJldiIpOworCWlmICghZGVidWdfYWJicmV2KQorCQlyZXR1cm4gLTE7CisKKwlmaWxsX3NlY3Rpb25fY29udGVudChhYmZkLCBsaW5lX3NlY3Rpb24sIGJfbGluZS5wLCAwLCBiX2xpbmUuc2l6ZSk7CisJZmlsbF9zZWN0aW9uX2NvbnRlbnQoYWJmZCwgZGVidWdfaW5mbywgYl9kZWJ1Z19pbmZvLnAsCisJCQkgICAgIDAsIGJfZGVidWdfaW5mby5zaXplKTsKKwlmaWxsX3NlY3Rpb25fY29udGVudChhYmZkLCBkZWJ1Z19hYmJyZXYsIGJfZGVidWdfYWJicmV2LnAsIDAsCisJCQkgICAgIGJfZGVidWdfYWJicmV2LnNpemUpOworCisKKwlmcmVlX2J1ZmZlcigmYl9saW5lKTsKKwlmcmVlX2J1ZmZlcigmYl9kZWJ1Z19pbmZvKTsKKwlmcmVlX2J1ZmZlcigmYl9kZWJ1Z19hYmJyZXYpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9vcGppdGNvbnYvaml0c3ltYm9sLmMgYi9vcHJvZmlsZS0wLjkuNy9vcGppdGNvbnYvaml0c3ltYm9sLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWFhNmRiMQotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L29waml0Y29udi9qaXRzeW1ib2wuYwpAQCAtMCwwICsxLDU1NSBAQAorLyoqCisgKiBAZmlsZSBqaXRzeW1ib2wuYworICogSGFuZGxlIHN5bWJvbHMgZm91bmQgaW4gaml0dGVkIGNvZGUgZHVtcAorICoKKyAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDcgT1Byb2ZpbGUgYXV0aG9ycworICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKKyAqCisgKiBAYXV0aG9yIEplbnMgV2lsa2UKKyAqIEBNb2RpZmljYXRpb25zIE1heW5hcmQgSm9obnNvbgorICogQE1vZGlmaWNhdGlvbnMgUGhpbGlwcGUgRWxpZQorICogQE1vZGlmaWNhdGlvbnMgRGFuaWVsIEhhbnNlbAorICoKKyAqIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwNworICoKKyAqLworCisjaW5jbHVkZSAib3BqaXRjb252LmgiCisjaW5jbHVkZSAib3BkX3ByaW50Zi5oIgorI2luY2x1ZGUgIm9wX2xpYmliZXJ0eS5oIgorI2luY2x1ZGUgIm9wX3R5cGVzLmgiCisKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorCit0eXBlZGVmIGludCAoKmNvbXBhcmVfc3ltYm9sKSh2b2lkIGNvbnN0ICosIHZvaWQgY29uc3QgKik7CisKKworLyogY291bnQgdGhlIGVudHJpZXMgaW4gdGhlIGppdGVudHJ5X2xpc3QgKi8KK3N0YXRpYyB1MzIgY291bnRfZW50cmllcyh2b2lkKQoreworCXN0cnVjdCBqaXRlbnRyeSBjb25zdCAqIGVudHJ5OworCXUzMiBjbnQgPSAwOworCWZvciAoZW50cnkgPSBqaXRlbnRyeV9saXN0OyBlbnRyeTsgZW50cnkgPSBlbnRyeS0+bmV4dCkKKwkJY250Kys7CisJcmV0dXJuIGNudDsKK30KKworCitzdGF0aWMgdm9pZCBmaWxsX2VudHJ5X2FycmF5KHN0cnVjdCBqaXRlbnRyeSAqIGVudHJpZXNbXSkKK3sKKwlpbnQgaSA9IDA7CisJc3RydWN0IGppdGVudHJ5ICogZW50cnk7CisJZm9yIChlbnRyeSA9IGppdGVudHJ5X2xpc3Q7IGVudHJ5OyBlbnRyeSA9IGVudHJ5LT5uZXh0KQorCQllbnRyaWVzW2krK10gPSBlbnRyeTsKK30KKworCisvKiBjcmVhdGUgYW4gYXJyYXkgcG9pbnRpbmcgdG8gdGhlIGppdGVudHJ5IHN0cnVjdHVyZXMgd2hpY2ggaXMgc29ydGVkCisgKiBhY2NvcmRpbmcgdG8gdGhlIGNvbXBhcmF0b3IgcnVsZSBnaXZlbiBieSBwYXJhbWV0ZXIgY29tcGFyCisgKi8KK3N0YXRpYyBzdHJ1Y3Qgaml0ZW50cnkgKiogY3JlYXRlX3NvcnRlZF9hcnJheShjb21wYXJlX3N5bWJvbCBjb21wYXJlKQoreworCXN0cnVjdCBqaXRlbnRyeSAqKiBhcnJheSA9CisJCXhtYWxsb2Moc2l6ZW9mKHN0cnVjdCBqaXRlbnRyeSAqKSAqIGVudHJ5X2NvdW50KTsKKwlmaWxsX2VudHJ5X2FycmF5KGFycmF5KTsKKwlxc29ydChhcnJheSwgZW50cnlfY291bnQsIHNpemVvZihzdHJ1Y3Qgaml0ZW50cnkgKiksIGNvbXBhcmUpOworCXJldHVybiBhcnJheTsKK30KKworCisvKiBjb21wYXJhdG9yIG1ldGhvZCBmb3IgcXNvcnQgd2hpY2ggc29ydHMgaml0ZW50cmllcyBieSBzeW1ib2xfbmFtZSAqLworc3RhdGljIGludCBjbXBfc3ltYm9sbmFtZSh2b2lkIGNvbnN0ICogYSwgdm9pZCBjb25zdCAqIGIpCit7CisJc3RydWN0IGppdGVudHJ5ICogYTAgPSAqKHN0cnVjdCBqaXRlbnRyeSAqKikgYTsKKwlzdHJ1Y3Qgaml0ZW50cnkgKiBiMCA9ICooc3RydWN0IGppdGVudHJ5ICoqKSBiOworCXJldHVybiBzdHJjbXAoYTAtPnN5bWJvbF9uYW1lLCBiMC0+c3ltYm9sX25hbWUpOworfQorCisKKy8qIGNvbXBhcmF0b3IgbWV0aG9kIGZvciBxc29ydCB3aGljaCBzb3J0cyBqaXRlbnRyaWVzIGJ5IGFkZHJlc3MgKi8KK3N0YXRpYyBpbnQgY21wX2FkZHJlc3Modm9pZCBjb25zdCAqIGEsIHZvaWQgY29uc3QgKiBiKQoreworCXN0cnVjdCBqaXRlbnRyeSAqIGEwID0gKihzdHJ1Y3Qgaml0ZW50cnkgKiopIGE7CisJc3RydWN0IGppdGVudHJ5ICogYjAgPSAqKHN0cnVjdCBqaXRlbnRyeSAqKikgYjsKKwlpZiAoYTAtPnZtYSA8IGIwLT52bWEpCisJCXJldHVybiAtMTsKKwlpZiAoYTAtPnZtYSA9PSBiMC0+dm1hKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gMTsKK30KKworCisvKiByZXNvcnQgYWRkcmVzc19hc2NlbmRpbmcgYXJyYXkgKi8KK3N0YXRpYyB2b2lkIHJlc29ydF9hZGRyZXNzKHZvaWQpCit7CisJdTMyIGk7CisKKwlxc29ydChlbnRyaWVzX2FkZHJlc3NfYXNjZW5kaW5nLCBlbnRyeV9jb3VudCwKKwkgICAgICBzaXplb2Yoc3RydWN0IGppdGVudHJ5ICopLCBjbXBfYWRkcmVzcyk7CisKKwkvLyBsb3dlciBlbnRyeV9jb3VudCBpZiBlbnRyaWVzIGFyZSBpbnZhbGlkYXRlZAorCWZvciAoaSA9IDA7IGkgPCBlbnRyeV9jb3VudDsgKytpKSB7CisJCWlmIChlbnRyaWVzX2FkZHJlc3NfYXNjZW5kaW5nW2ldLT52bWEpCisJCQlicmVhazsKKwl9CisKKwlpZiAoaSkgeworCQllbnRyeV9jb3VudCAtPSBpOworCQltZW1tb3ZlKCZlbnRyaWVzX2FkZHJlc3NfYXNjZW5kaW5nWzBdLAorCQkJJmVudHJpZXNfYWRkcmVzc19hc2NlbmRpbmdbaV0sCisJCQlzaXplb2Yoc3RydWN0IGppdGVudHJ5ICopICogZW50cnlfY291bnQpOworCX0KK30KKworCisvKiBDb3B5IGFkZHJlc3NfYXNjZW5kaW5nIGFycmF5IHRvIGVudHJpZXNfc3ltYm9sc19hc2NlbmRpbmcgYW5kIHJlc29ydCBpdC4gICovCitzdGF0aWMgdm9pZCByZXNvcnRfc3ltYm9sKHZvaWQpCit7CisJbWVtY3B5KGVudHJpZXNfc3ltYm9sc19hc2NlbmRpbmcsIGVudHJpZXNfYWRkcmVzc19hc2NlbmRpbmcsCisJICAgICAgIHNpemVvZihzdHJ1Y3Qgaml0ZW50cnkgKikgKiBlbnRyeV9jb3VudCk7CisJcXNvcnQoZW50cmllc19zeW1ib2xzX2FzY2VuZGluZywgZW50cnlfY291bnQsCisJICAgICAgc2l6ZW9mKHN0cnVjdCBqaXRlbnRyeSAqKSwgY21wX3N5bWJvbG5hbWUpOworfQorCisvKiBhbGxvY2F0ZSwgcG9wdWxhdGUgYW5kIHNvcnQgdGhlIGppdGVudHJ5IGFycmF5cyAqLwordm9pZCBjcmVhdGVfYXJyYXlzKHZvaWQpCit7CisJbWF4X2VudHJ5X2NvdW50ID0gZW50cnlfY291bnQgPSBjb3VudF9lbnRyaWVzKCk7CisJZW50cmllc19zeW1ib2xzX2FzY2VuZGluZyA9IGNyZWF0ZV9zb3J0ZWRfYXJyYXkoY21wX3N5bWJvbG5hbWUpOworCWVudHJpZXNfYWRkcmVzc19hc2NlbmRpbmcgPSBjcmVhdGVfc29ydGVkX2FycmF5KGNtcF9hZGRyZXNzKTsKK30KKworCisvKiBhZGQgYSBuZXcgY3JlYXRlIGppdGVudHJ5IHRvIHRoZSBhcnJheS4gbWFsbG9jcyBuZXcgYXJyYXlzIGlmIHNwYWNlIGlzCisgKiBuZWVkZWQgKi8KK3N0YXRpYyB2b2lkIGluc2VydF9lbnRyeShzdHJ1Y3Qgaml0ZW50cnkgKiBlbnRyeSkKK3sKKwlpZiAoZW50cnlfY291bnQgPT0gbWF4X2VudHJ5X2NvdW50KSB7CisJCWlmIChtYXhfZW50cnlfY291bnQgPCBVSU5UMzJfTUFYIC0gMTgpCisJCQltYXhfZW50cnlfY291bnQgKz0gMTg7CisJCWVsc2UgaWYgKG1heF9lbnRyeV9jb3VudCA8IFVJTlQzMl9NQVgpCisJCQltYXhfZW50cnlfY291bnQgKz0gMTsKKwkJZWxzZSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIkFtb3VudCBvZiBKSVQgZHVtcCBmaWxlIGVudHJpZXMgaXMgdG9vIGxhcmdlLlxuIik7CisJCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJCX0KKwkJZW50cmllc19zeW1ib2xzX2FzY2VuZGluZyA9IChzdHJ1Y3Qgaml0ZW50cnkgKiopCisJCQl4cmVhbGxvYyhlbnRyaWVzX3N5bWJvbHNfYXNjZW5kaW5nLAorCQkJCSBzaXplb2Yoc3RydWN0IGppdGVudHJ5ICopICogbWF4X2VudHJ5X2NvdW50KTsKKwkJZW50cmllc19hZGRyZXNzX2FzY2VuZGluZyA9IChzdHJ1Y3Qgaml0ZW50cnkgKiopCisJCQl4cmVhbGxvYyhlbnRyaWVzX2FkZHJlc3NfYXNjZW5kaW5nLAorCQkJCSBzaXplb2Yoc3RydWN0IGppdGVudHJ5ICopICogbWF4X2VudHJ5X2NvdW50KTsKKwl9CisJZW50cmllc19hZGRyZXNzX2FzY2VuZGluZ1tlbnRyeV9jb3VudCsrXSA9IGVudHJ5OworfQorCisKKy8qIGFkZCBhIHN1ZmZpeCB0byB0aGUgbmFtZSB0byBkaWZmZXJlbmNpYXRlIGl0ICovCitzdGF0aWMgY2hhciAqIHJlcGxhY2VtZW50X25hbWUoY2hhciAqIHMsIGludCBpKQoreworCWludCBjbnQgPSAxOworCWludCBqID0gaTsKKwljaGFyICogcmVzOworCisJd2hpbGUgKChqID0gai8xMCkpCisJCWNudCsrOworCWNudCArPSAyICsgc3RybGVuKHMpOworCXJlcyA9IHhtYWxsb2MoY250KTsKKwlzbnByaW50ZihyZXMsIGNudCwgIiVzfiVpIiwgcywgaSk7CisJcmV0dXJuIHJlczsKK30KKworCisvKgorICogTWFyayB0aGUgZW50cnkgc28gaXQgaXMgbm90IGluY2x1ZGVkIGluIHRoZSBFTEYgZmlsZS4gV2UgZG8gdGhpcyBieQorICogd3JpdGluZyBhIDAgYWRkcmVzcyBhcyBtYWdpYyB2bWEgYW5kIHNvcnRpbmcKKyAqIGl0IG91dCBsYXRlcgorICovCitzdGF0aWMgdm9pZCBpbnZhbGlkYXRlX2VudHJ5KHN0cnVjdCBqaXRlbnRyeSAqIGUpCit7CisJdmVyYnByaW50ZihkZWJ1ZywgImludmFsaWRhdGVfZW50cnk6IGFkZHI9JWxseCwgbmFtZT0lc1xuIiwKKwkJICAgZS0+dm1hLCBlLT5zeW1ib2xfbmFtZSk7CisJZS0+dm1hID0gMDsKK30KKworCisvKgorICogSW52YWxpZGF0ZSBhbGwgc3ltYm9scyB0aGF0IGFyZSBub3QgYWxpdmUgYXQgc2FtcGxpbmcgc3RhcnQgdGltZS4KKyAqLworc3RhdGljIHZvaWQgaW52YWxpZGF0ZV9lYXJseWJpcmRzKHVuc2lnbmVkIGxvbmcgbG9uZyBzdGFydF90aW1lKQoreworCXUzMiBpOworCWludCBmbGFnOworCXN0cnVjdCBqaXRlbnRyeSAqIGE7CisKKwlmbGFnID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgZW50cnlfY291bnQ7IGkrKykgeworCQlhID0gZW50cmllc19hZGRyZXNzX2FzY2VuZGluZ1tpXTsKKwkJaWYgKGEtPmxpZmVfZW5kIDwgc3RhcnRfdGltZSkgeworCQkJaW52YWxpZGF0ZV9lbnRyeShhKTsKKwkJCWZsYWcgPSAxOworCQl9CisJfQorCWlmIChmbGFnKSB7CisJCXJlc29ydF9hZGRyZXNzKCk7CisJCXJlc29ydF9zeW1ib2woKTsKKwl9Cit9CisKKworLyogc2VsZWN0IHRoZSBzeW1ib2wgd2l0aCB0aGUgbG9uZ2VzdCBsaWZlIHRpbWUgaW4gdGhlIGluZGV4IHJhbmdlICovCitzdGF0aWMgaW50IHNlbGVjdF9vbmUoaW50IHN0YXJ0X2lkeCwgaW50IGVuZF9pZHgpCit7CisJaW50IGk7CisJaW50IGNhbmRpZGF0ZSA9IE9QX0pJVF9DT05WX0ZBSUw7CisJdW5zaWduZWQgbG9uZyBsb25nIGxpZmV0aW1lID0gMDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgeDsKKwlzdHJ1Y3Qgaml0ZW50cnkgY29uc3QgKiBlOworCisJZm9yIChpID0gc3RhcnRfaWR4OyBpIDw9IGVuZF9pZHg7IGkrKykgeworCQllID0gZW50cmllc19hZGRyZXNzX2FzY2VuZGluZ1tpXTsKKwkJeCA9IGUtPmxpZmVfZW5kIC0gZS0+bGlmZV9zdGFydDsKKwkJaWYgKGNhbmRpZGF0ZSA9PSAtMSB8fCB4ID4gbGlmZXRpbWUpIHsKKwkJCWNhbmRpZGF0ZSA9IGk7CisJCQlsaWZldGltZSA9IHg7CisJCX0KKwl9CisJcmV0dXJuIGNhbmRpZGF0ZTsKK30KKworCisvKgorICogV2UgZGVjaWRlZCB0byBrZWVwIG9uZSBlbnRyeSBpbiBmYXZvciBvZiB0aGUgb3RoZXIuIEluc3RlYWQgb2YgZHJvcHBpbmcKKyAqIHRoZSBvdmVybGFwcGluZyBlbnRyeSB3ZSBzcGxpdCBvciB0cnVuY2F0ZSBpdCB0byBub3Qgb3ZlcmxhcCBhbnkgbW9yZS4KKyAqCisgKiBMb29raW5nIG9uIHRoZSBhZGRyZXNzIHJlZ2lvbnMsIHdlIG1heSBoYXZlIHRoZSBmb2xsb3dpbmcgc2l0dWF0aW9uOgorICoKKyAqICBzcGxpdDogICAgIHwtLS0tLS0tLS0tLS18CisgKiAga2VlcDogICAgICAgICAgfC0tLXwKKyAqCisgKiBUaGUgc3BsaXQgZW50cnkgbWF5IGJlIHNwbGl0dGVkIGluIGEgbGVmdCBwYXJ0IGFuZCBhIHJpZ2h0IHBhcnQuIEUuZy46CisgKgorICogIHNwbGl0MC8xOiAgfC0tfCAgICAgfC0tLXwKKyAqICBrZWVwOiAgICAgICAgICB8LS0tfAorICoKKyAqIEhvd2V2ZXIsIGJvdGggcGFydHMgbWF5IG9yIG1heSBub3QgZXhpc3QuCisgKi8KK3N0YXRpYyB2b2lkIHNwbGl0X2VudHJ5KHN0cnVjdCBqaXRlbnRyeSAqIHNwbGl0LCBzdHJ1Y3Qgaml0ZW50cnkgY29uc3QgKiBrZWVwKQoreworCXVuc2lnbmVkIGxvbmcgbG9uZyBzdGFydF9hZGRyX2tlZXAgPSBrZWVwLT52bWE7CisJdW5zaWduZWQgbG9uZyBsb25nIGVuZF9hZGRyX2tlZXAgPSBrZWVwLT52bWEgKyBrZWVwLT5jb2RlX3NpemU7CisJdW5zaWduZWQgbG9uZyBsb25nIGVuZF9hZGRyX3NwbGl0ID0gc3BsaXQtPnZtYSArIHNwbGl0LT5jb2RlX3NpemU7CisJdW5zaWduZWQgbG9uZyBsb25nIHN0YXJ0X2FkZHJfc3BsaXQgPSBzcGxpdC0+dm1hOworCisJLy8gZG8gd2UgbmVlZCBhIHJpZ2h0IHBhcnQ/CisJaWYgKGVuZF9hZGRyX3NwbGl0ID4gZW5kX2FkZHJfa2VlcCkgeworCQlzdHJ1Y3Qgaml0ZW50cnkgKiBuZXdfZW50cnkgPQorCQkJeGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IGppdGVudHJ5KSk7CisJCWNoYXIgKiBzID0gTlVMTDsKKwkJCisJCS8qIENoZWNrIGZvciBtYXguIGxlbmd0aCB0byBhdm9pZCBwb3NzaWJsZSBpbnRlZ2VyIG92ZXJmbG93LiAqLworCQlpZiAoc3RybGVuKHNwbGl0LT5zeW1ib2xfbmFtZSkgPiBTSVpFX01BWCAtIDMpIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiTGVuZ3RoIG9mIHN5bWJvbCBuYW1lIGlzIHRvbyBsYXJnZS5cbiIpOworCQkJZXhpdChFWElUX0ZBSUxVUkUpOworCQl9IGVsc2UgeworCQkJcyA9IHhtYWxsb2Moc3RybGVuKHNwbGl0LT5zeW1ib2xfbmFtZSkgKyAzKTsKKwkJCXN0cmNweShzLCBzcGxpdC0+c3ltYm9sX25hbWUpOworCQkJc3RyY2F0KHMsICIjMSIpOworCQl9CisJCQorCQluZXdfZW50cnktPnZtYSA9IGVuZF9hZGRyX2tlZXA7CisJCW5ld19lbnRyeS0+Y29kZV9zaXplID0gZW5kX2FkZHJfc3BsaXQgLSBlbmRfYWRkcl9rZWVwOworCQluZXdfZW50cnktPnN5bWJvbF9uYW1lID0gczsKKwkJbmV3X2VudHJ5LT5zeW1fbmFtZV9tYWxsb2NlZCA9IDE7CisJCW5ld19lbnRyeS0+bGlmZV9zdGFydCA9IHNwbGl0LT5saWZlX3N0YXJ0OworCQluZXdfZW50cnktPmxpZmVfZW5kID0gc3BsaXQtPmxpZmVfZW5kOworCQkvLyB0aGUgcmlnaHQgcGFydCBkb2VzIG5vdCBoYXZlIGFuIGFzc29jaWF0ZWQgY29kZSwgYmVjYXVzZSB3ZQorCQkvLyBkb24ndCBrbm93IHdoZXRoZXIgdGhlIHNwbGl0IHBhcnQgYmVnaW5zIGF0IGFuIG9wY29kZQorCQluZXdfZW50cnktPmNvZGUgPSBOVUxMOworCQl2ZXJicHJpbnRmKGRlYnVnLCAic3BsaXQgcmlnaHQgKG5ldykgbmFtZT0lcywgc3RhcnQ9JWxseCwiCisJCQkgICAiIGVuZD0lbGx4XG4iLCBuZXdfZW50cnktPnN5bWJvbF9uYW1lLAorCQkJICAgbmV3X2VudHJ5LT52bWEsCisJCQkgICBuZXdfZW50cnktPnZtYSArIG5ld19lbnRyeS0+Y29kZV9zaXplKTsKKwkJaW5zZXJ0X2VudHJ5KG5ld19lbnRyeSk7CisJfQorCS8vIGRvIHdlIG5lZWQgYSBsZWZ0IHBhcnQ/CisJaWYgKHN0YXJ0X2FkZHJfc3BsaXQgPCBzdGFydF9hZGRyX2tlZXApIHsKKwkJY2hhciAqIHMgPSBOVUxMOworCQkKKwkJLyogQ2hlY2sgZm9yIG1heC4gbGVuZ3RoIHRvIGF2b2lkIHBvc3NpYmxlIGludGVnZXIgb3ZlcmZsb3cuICovCisJCWlmIChzdHJsZW4oc3BsaXQtPnN5bWJvbF9uYW1lKSA+IFNJWkVfTUFYIC0gMykgeworCQkJZnByaW50ZihzdGRlcnIsICJMZW5ndGggb2Ygc3ltYm9sIG5hbWUgaXMgdG9vIGxhcmdlLlxuIik7CisJCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJCX0gZWxzZSB7CisJCQlzID0geG1hbGxvYyhzdHJsZW4oc3BsaXQtPnN5bWJvbF9uYW1lKSArIDMpOworCQkJc3RyY3B5KHMsIHNwbGl0LT5zeW1ib2xfbmFtZSk7CisJCQlzdHJjYXQocywgIiMwIik7CisJCX0KKwkJCisJCXNwbGl0LT5jb2RlX3NpemUgPSBzdGFydF9hZGRyX2tlZXAgLSBzdGFydF9hZGRyX3NwbGl0OworCQlpZiAoc3BsaXQtPnN5bV9uYW1lX21hbGxvY2VkKQorCQkJZnJlZShzcGxpdC0+c3ltYm9sX25hbWUpOworCQlzcGxpdC0+c3ltYm9sX25hbWUgPSBzOworCQlzcGxpdC0+c3ltX25hbWVfbWFsbG9jZWQgPSAxOworCQl2ZXJicHJpbnRmKGRlYnVnLCAic3BsaXQgbGVmdCBuYW1lPSVzLCBzdGFydD0lbGx4LCBlbmQ9JWxseFxuIiwKKwkJCSAgIHNwbGl0LT5zeW1ib2xfbmFtZSwgc3BsaXQtPnZtYSwKKwkJCSAgIHNwbGl0LT52bWEgKyBzcGxpdC0+Y29kZV9zaXplKTsKKwl9IGVsc2UgeworCQlpbnZhbGlkYXRlX2VudHJ5KHNwbGl0KTsKKwl9Cit9CisKKworLyoKKyAqIFNjYW5zIHRocm91Z2ggdGhlIGluZGV4IHJhbmdlIGFuZCBzcGxpdHMvdHJ1bmNhdGVzIGVudHJpZXMgdGhhdCBvdmVybGFwCisgKiB3aXRoIHRoZSBvbmUgaW5kZXhlZCBieSBrZWVwX2lkeC4gUmV0dXJucyB0aGUgdG90YWwgbGlmZXRpbWUgb2YgdGhlIHN5bWJvbHMKKyAqIGZvdW5kIHRvIG92ZXJsYXAuCisgKiBSZXR1cm5zIFVMT05HX01BWCBvbiBlcnJvci4KKyAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBlbGltaW5hdGVfb3ZlcmxhcHMoaW50IHN0YXJ0X2lkeCwgaW50IGVuZF9pZHgsCisJCQkJCSBpbnQga2VlcF9pZHgpCit7CisJdW5zaWduZWQgbG9uZyBsb25nIHJldHZhbDsKKwlzdHJ1Y3Qgaml0ZW50cnkgY29uc3QgKiBrZWVwID0gZW50cmllc19hZGRyZXNzX2FzY2VuZGluZ1trZWVwX2lkeF07CisJc3RydWN0IGppdGVudHJ5ICogZTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgc3RhcnRfYWRkcl9rZWVwID0ga2VlcC0+dm1hOworCXVuc2lnbmVkIGxvbmcgbG9uZyBlbmRfYWRkcl9rZWVwID0ga2VlcC0+dm1hICsga2VlcC0+Y29kZV9zaXplOworCXVuc2lnbmVkIGxvbmcgbG9uZyBzdGFydF9hZGRyX2VudHJ5LCBlbmRfYWRkcl9lbnRyeTsKKwlpbnQgaTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgbWluX3N0YXJ0ID0ga2VlcC0+bGlmZV9zdGFydDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgbWF4X2VuZCA9IGtlZXAtPmxpZmVfZW5kOworCisJZm9yIChpID0gc3RhcnRfaWR4OyBpIDw9IGVuZF9pZHg7IGkrKykgeworCQlpZiAoaSA9PSBrZWVwX2lkeCkKKwkJCWNvbnRpbnVlOworCQllID0gZW50cmllc19hZGRyZXNzX2FzY2VuZGluZ1tpXTsKKwkJc3RhcnRfYWRkcl9lbnRyeSA9IGUtPnZtYTsKKwkJZW5kX2FkZHJfZW50cnkgPSBlLT52bWEgKyBlLT5jb2RlX3NpemU7CisJCWlmIChkZWJ1ZykgeworCQkJaWYgKCEoc3RhcnRfYWRkcl9lbnRyeSA8PSBlbmRfYWRkcl9lbnRyeSkpIHsKKwkJCQl2ZXJicHJpbnRmKGRlYnVnLCAiYXNzZXJ0IGZhaWxlZDoiCisJCQkJCSAgICIgc3RhcnRfYWRkcl9lbnRyeSA8PSIKKwkJCQkJICAgIiBlbmRfYWRkcl9lbnRyeVxuIik7CisJCQkJcmV0dmFsID0gVUxPTkdfTUFYOworCQkJCWdvdG8gb3V0OworCQkJfQorCQkJaWYgKCEoc3RhcnRfYWRkcl9rZWVwIDw9IGVuZF9hZGRyX2tlZXApKSB7CisJCQkJdmVyYnByaW50ZihkZWJ1ZywgImFzc2VydCBmYWlsZWQ6ICIKKwkJCQkJICAgInN0YXJ0X2FkZHJfa2VlcCA8PSIKKwkJCQkJICAgIiBlbmRfYWRkcl9rZWVwXG4iKTsKKwkJCQlyZXR2YWwgPSBVTE9OR19NQVg7CisJCQkJZ290byBvdXQ7CisJCQl9CisJCX0KKwkJaWYgKHN0YXJ0X2FkZHJfZW50cnkgPCBlbmRfYWRkcl9rZWVwICYmCisJCSAgICBlbmRfYWRkcl9lbnRyeSA+IHN0YXJ0X2FkZHJfa2VlcCkgeworCQkJaWYgKGUtPmxpZmVfc3RhcnQgPCBtaW5fc3RhcnQpCisJCQkJbWluX3N0YXJ0ID0gZS0+bGlmZV9zdGFydDsKKwkJCWlmIChlLT5saWZlX2VuZCA+IG1heF9lbmQpCisJCQkJbWF4X2VuZCA9IGUtPmxpZmVfZW5kOworCQkJc3BsaXRfZW50cnkoZSwga2VlcCk7CisJCX0KKwl9CisJcmV0dmFsID0gbWF4X2VuZCAtIG1pbl9zdGFydDsKK291dDoKKwlyZXR1cm4gcmV0dmFsOworfQorCisKKy8qCisgKiBXaXRoaW4gdGhlIGluZGV4IHJhbmdlIChpbnRvIHRoZSBhcnJheSBlbnRyaWVzX2FkZHJlc3NfYXNjZW5kaW5nKSwgZmluZCB0aGUKKyAqIHN5bWJvbCB3aXRoIHRoZSBtYXhpbWFsIGxpZmV0aW1lIGFuZCBzcGxpdC90cnVuY2F0ZSBhbGwgc3ltYm9scyB0aGF0IG92ZXJsYXAKKyAqIHdpdGggaXQgKGkuZS4gdGhhdCB0aGVyZSB3b24ndCBiZSBhbnkgb3ZlcmxhcHMgYW55bW9yZSkuCisgKi8KK3N0YXRpYyBpbnQgaGFuZGxlX292ZXJsYXBfcmVnaW9uKGludCBzdGFydF9pZHgsIGludCBlbmRfaWR4KQoreworCWludCByYyA9IE9QX0pJVF9DT05WX09LOworCWludCBpZHg7CisJc3RydWN0IGppdGVudHJ5ICogZTsKKwlpbnQgY250OworCWNoYXIgKiBuYW1lOworCWludCBpLCBqOworCXVuc2lnbmVkIGxvbmcgbG9uZyB0b3RhbHRpbWU7CisKKwlpZiAoZGVidWcpIHsKKwkJZm9yIChpID0gc3RhcnRfaWR4OyBpIDw9IGVuZF9pZHg7IGkrKykgeworCQkJZSA9IGVudHJpZXNfYWRkcmVzc19hc2NlbmRpbmdbaV07CisJCQl2ZXJicHJpbnRmKGRlYnVnLCAib3ZlcmxhcCBpZHg9JWksIG5hbWU9JXMsICIKKwkJCQkgICAic3RhcnQ9JWxseCwgZW5kPSVsbHgsIGxpZmVfc3RhcnQ9JWxsaSwgIgorCQkJCSAgICJsaWZlX2VuZD0lbGxpLCBsaWZldGltZT0lbGxpXG4iLAorCQkJCSAgIGksIGUtPnN5bWJvbF9uYW1lLCBlLT52bWEsCisJCQkJICAgZS0+dm1hICsgZS0+Y29kZV9zaXplLCBlLT5saWZlX3N0YXJ0LAorCQkJCSAgIGUtPmxpZmVfZW5kLCBlLT5saWZlX2VuZCAtIGUtPmxpZmVfc3RhcnQpOworCQl9CisJfQorCWlkeCA9IHNlbGVjdF9vbmUoc3RhcnRfaWR4LCBlbmRfaWR4KTsKKwl0b3RhbHRpbWUgPSBlbGltaW5hdGVfb3ZlcmxhcHMoc3RhcnRfaWR4LCBlbmRfaWR4LCBpZHgpOworCWlmICh0b3RhbHRpbWUgPT0gVUxPTkdfTUFYKSB7CisJCXJjID0gT1BfSklUX0NPTlZfRkFJTDsKKwkJZ290byBvdXQ7CisJfQorCWUgPSBlbnRyaWVzX2FkZHJlc3NfYXNjZW5kaW5nW2lkeF07CisKKwljbnQgPSAxOworCWogPSAoZS0+bGlmZV9lbmQgLSBlLT5saWZlX3N0YXJ0KSAqIDEwMCAvIHRvdGFsdGltZTsKKwl3aGlsZSAoKGogPSBqLzEwKSkKKwkJY250Kys7CisKKwkvLyBNYXJrIHN5bWJvbCBuYW1lIHdpdGggYSAlJSB0byBpbmRpY2F0ZSB0aGUgb3ZlcmxhcC4KKwljbnQgKz0gc3RybGVuKGUtPnN5bWJvbF9uYW1lKSArIDIgKyAxOworCW5hbWUgPSB4bWFsbG9jKGNudCk7CisJc25wcmludGYobmFtZSwgY250LCAiJXMlJSVsbHUiLCBlLT5zeW1ib2xfbmFtZSwKKwkJIChlLT5saWZlX2VuZCAtIGUtPmxpZmVfc3RhcnQpICogMTAwIC8gdG90YWx0aW1lKTsKKwlpZiAoZS0+c3ltX25hbWVfbWFsbG9jZWQpCisJCWZyZWUoZS0+c3ltYm9sX25hbWUpOworCWUtPnN5bWJvbF9uYW1lID0gbmFtZTsKKwllLT5zeW1fbmFtZV9tYWxsb2NlZCA9IDE7CisJdmVyYnByaW50ZihkZWJ1ZywgInNlbGVjdGVkIGlkeD0laSwgbmFtZT0lc1xuIiwgaWR4LCBlLT5zeW1ib2xfbmFtZSk7CitvdXQ6CisJcmV0dXJuIHJjOworfQorCisKKy8qCisgKiBvbmUgc2NhbiB0aHJvdWdoIHRoZSBzeW1ib2xzIHRvIGZpbmQgb3ZlcmxhcHMuCisgKiByZXR1cm4gMSBpZiBhbiBvdmVybGFwIGlzIGZvdW5kLiB0aGlzIGlzIHJlcGVhdGVkIHVudGlsIG5vIG1vcmUgb3ZlcmxhcCAKKyAqIGlzIHRoZXJlLgorICogUHJvY2VzczogVGhlcmUgbWF5IGJlIG1vcmUgdGhhbiB0d28gb3ZlcmxhcHBpbmcgc3ltYm9scyB3aXRoIGVhY2ggb3RoZXIuCisgKiBUaGUgaW5kZXggcmFuZ2Ugb2Ygc3ltYm9scyBmb3VuZCB0byBvdmVybGFwIGFyZSBwYXNzZWQgdG8KKyAqIGhhbmRsZV9vdmVybGFwX3JlZ2lvbi4KKyAqLworc3RhdGljIGludCBzY2FuX292ZXJsYXBzKHZvaWQpCit7CisJaW50IGksIGo7CisJdW5zaWduZWQgbG9uZyBsb25nIGVuZF9hZGRyLCBlbmRfYWRkcjI7CisJc3RydWN0IGppdGVudHJ5IGNvbnN0ICogYTsKKwlpbnQgZmxhZyA9IDA7CisJLy8gZW50cnlfY291bnQgY2FuIGJlIGluY3JlbWVudGVkIGJ5IHNwbGl0X2VudHJ5KCkgZHVyaW5nIHRoZSBsb29wLAorCS8vIHNhdmUgdGhlIGluaXRhbCB2YWx1ZSBhcyBsb29wIGNvdW50CisJaW50IGxvb3BfY291bnQgPSBlbnRyeV9jb3VudDsKKworCXZlcmJwcmludGYoZGVidWcsImNvdW50PSVpLCBzY2FuIG92ZXJsYXBzLi4uXG4iLCBlbnRyeV9jb3VudCk7CisJaSA9IDA7CisJZW5kX2FkZHIgPSAwOworCWZvciAoaiA9IDE7IGogPCBsb29wX2NvdW50OyBqKyspIHsKKwkJLyoqCisJCSAqIFRha2UgYSBzeW1ib2wgW2ldIGFuZCBsb29rIGZvciB0aGUgbmV4dCBzeW1ib2wocykgW2pdIHRoYXQgYXJlIG92ZXJsYXBwaW5nCisJCSAqIHN5bWJvbCBbaV0uIElmIGEgc3ltYm9sIFtqXSBpcyBmb3VuZCB0aGF0IGlzIG5vdCBvdmVybGFwcGluZyBzeW1ib2wgW2ldIHRoZQorCQkgKiBzeW1ib2xzIFtpXS4uW2otMV0gYXJlIGhhbmRsZWQgdG8gYmUgbm90IG92ZXJsYXBwaW5nIGFueW1vcmUuCisJCSAqIFNlZSBkZXNjcmlwdGlvbnMgb2YgaGFuZGxlX292ZXJsYXBfcmVnaW9uKCkgYW5kIGVsaW1pbmF0ZV9vdmVybGFwcygpIGZvcgorCQkgKiBmdXJ0aGVyIGRldGFpbHMgb2YgdGhpcyBoYW5kbGluZy4KKwkJICogRS5nLiBwb3NzaWJsZSBjYXNlcyB0byBiZSBoYW5kbGVkIGNvdWxkIGJlOgorCQkgKgorCQkgKiAgIHN5bTEgfC0tLS0tLS0tLS0tfAorCQkgKiAgIHN5bTIgICAgIHwtLS18CisJCSAqCisJCSAqICAgc3ltMSB8LS0tLS0tLS18CisJCSAqICAgc3ltMiAgICAgfC0tLS0tLS0tfAorCQkgKgorCQkgKiAgIHN5bTEgfC0tLS0tLS0tfAorCQkgKiAgIHN5bTIgICAgIHwtLS0tLS0tfAorCQkgKiAgIHN5bTMgICAgICAgIHwtLS0tLS0tLS18CisJCSAqCisJCSAqIEJ1dCBpbiB0aGUgZm9sbG93aW5nIGNhc2UKKwkJICoKKwkJICogICBzeW0xIHwtLS0tLS0tLXwKKwkJICogICBzeW0yICAgICAgfC0tLS0tLS0tLS0tLS18CisJCSAqICAgc3ltMyAgICAgICAgICAgICAgfC0tLS0tLS0tLS18CisJCSAqCisJCSAqIHN5bTMgd291bGQgbm90IG92ZXJsYXAgd2l0aCBzeW0xLiBUaGVyZWZvcmUgaGFuZGxlX292ZXJsYXBfcmVnaW8oKSB3b3VsZAorCQkgKiBvbmx5IGJlIGNhbGxlZCBmb3Igc3ltMSB1cCB0byBzeW0yLgorCQkgKi8KKwkJYSA9IGVudHJpZXNfYWRkcmVzc19hc2NlbmRpbmdbaiAtIDFdOworCQllbmRfYWRkcjIgPSBhLT52bWEgKyBhLT5jb2RlX3NpemU7CisJCWlmIChlbmRfYWRkcjIgPiBlbmRfYWRkcikKKwkJCWVuZF9hZGRyID0gZW5kX2FkZHIyOworCQlhID0gZW50cmllc19hZGRyZXNzX2FzY2VuZGluZ1tqXTsKKwkJaWYgKGVuZF9hZGRyIDw9IGEtPnZtYSkgeworCQkJaWYgKGkgIT0gaiAtIDEpIHsKKwkJCQlpZiAoaGFuZGxlX292ZXJsYXBfcmVnaW9uKGksIGogLSAxKSA9PQorCQkJCSAgICBPUF9KSVRfQ09OVl9GQUlMKSB7CisJCQkJCWZsYWcgPSBPUF9KSVRfQ09OVl9GQUlMOworCQkJCQlnb3RvIG91dDsKKwkJCQl9CisJCQkJZmxhZyA9IDE7CisJCQl9CisJCQlpID0gajsKKwkJfQorCX0KKwlpZiAoaSAhPSBqIC0gMSkgeworCQlpZiAoaGFuZGxlX292ZXJsYXBfcmVnaW9uKGksIGogLSAxKSA9PSBPUF9KSVRfQ09OVl9GQUlMKQorCQkJZmxhZyA9IE9QX0pJVF9DT05WX0ZBSUw7CisJCWVsc2UKKwkJCWZsYWcgPSAxOworCX0KK291dDoKKwlyZXR1cm4gZmxhZzsKK30KKworCisvKiBzZWFyY2ggZm9yIHN5bWJvbHMgdGhhdCBoYXZlIG92ZXJsYXBwaW5nIGFkZHJlc3MgcmFuZ2VzIGFuZCBkZWNpZGUgZm9yCisgKiBvbmUgKi8KK2ludCByZXNvbHZlX292ZXJsYXBzKHVuc2lnbmVkIGxvbmcgbG9uZyBzdGFydF90aW1lKQoreworCWludCByYyA9IE9QX0pJVF9DT05WX09LOworCWludCBjbnQgPSAwOworCisJaW52YWxpZGF0ZV9lYXJseWJpcmRzKHN0YXJ0X3RpbWUpOworCXdoaWxlICgocmMgPSBzY2FuX292ZXJsYXBzKCkpICYmIHJjICE9IE9QX0pJVF9DT05WX0ZBSUwpIHsKKwkJcmVzb3J0X2FkZHJlc3MoKTsKKwkJaWYgKGNudCA9PSAwKSB7CisJCQl2ZXJicHJpbnRmKGRlYnVnLCAiV0FSTklORzogb3ZlcmxhcHMgZGV0ZWN0ZWQuICIKKwkJCQkgICAiUmVtb3Zpbmcgb3ZlcmxhcHBpbmcgSklUIG1ldGhvZHNcbiIpOworCQl9CisJCWNudCsrOworCX0KKwlpZiAoY250ID4gMCAmJiByYyAhPSBPUF9KSVRfQ09OVl9GQUlMKQorCQlyZXNvcnRfc3ltYm9sKCk7CisJcmV0dXJuIHJjOworfQorCisKKy8qCisgKiBzY2FuIHRocm91Z2ggdGhlIHNvcnRlZCBhcnJheSBhbmQgcmVwbGFjZSBpZGVudGljYWwgc3ltYm9sIG5hbWVzIGJ5IHVuaXF1ZQorICogb25lcyBieSBhZGRpbmcgYSBjb3VudGVyIHZhbHVlLgorICovCit2b2lkIGRpc2FtYmlndWF0ZV9zeW1ib2xfbmFtZXModm9pZCkKK3sKKwl1MzIgajsKKwlpbnQgY250LCByZXBfY250OworCXN0cnVjdCBqaXRlbnRyeSAqIGE7CisJc3RydWN0IGppdGVudHJ5ICogYjsKKworCXJlcF9jbnQgPSAwOworCWZvciAoaiA9IDE7IGogPCBlbnRyeV9jb3VudDsgaisrKSB7CisJCWEgPSBlbnRyaWVzX3N5bWJvbHNfYXNjZW5kaW5nW2ogLSAxXTsKKwkJY250ID0gMTsKKwkJZG8geworCQkJYiA9IGVudHJpZXNfc3ltYm9sc19hc2NlbmRpbmdbal07CisJCQlpZiAoc3RyY21wKGEtPnN5bWJvbF9uYW1lLCBiLT5zeW1ib2xfbmFtZSkgPT0gMCkgeworCQkJCWlmIChiLT5zeW1fbmFtZV9tYWxsb2NlZCkKKwkJCQkJZnJlZShiLT5zeW1ib2xfbmFtZSk7CisJCQkJYi0+c3ltYm9sX25hbWUgPQorCQkJCQlyZXBsYWNlbWVudF9uYW1lKGEtPnN5bWJvbF9uYW1lLCBjbnQpOworCQkJCWItPnN5bV9uYW1lX21hbGxvY2VkID0gMTsKKwkJCQlqKys7CisJCQkJY250Kys7CisJCQkJcmVwX2NudCsrOworCQkJfSBlbHNlIHsKKwkJCQlicmVhazsKKwkJCX0KKwkJfSB3aGlsZSAoaiA8IGVudHJ5X2NvdW50KTsKKwl9CisJLyogcmVjdXJzZSB0byBhdm9pZCB0aGF0IHRoZSBhZGRlZCBzdWZmaXggYWxzbyBjcmVhdGVzIGEgY29sbGlzaW9uICovCisJaWYgKHJlcF9jbnQpIHsKKwkJcXNvcnQoZW50cmllc19zeW1ib2xzX2FzY2VuZGluZywgZW50cnlfY291bnQsCisJCSAgICAgIHNpemVvZihzdHJ1Y3Qgaml0ZW50cnkgKiksIGNtcF9zeW1ib2xuYW1lKTsKKwkJZGlzYW1iaWd1YXRlX3N5bWJvbF9uYW1lcygpOworCX0KK30KZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L29waml0Y29udi9vcGppdGNvbnYuYyBiL29wcm9maWxlLTAuOS43L29waml0Y29udi9vcGppdGNvbnYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzk1N2FiCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45Ljcvb3BqaXRjb252L29waml0Y29udi5jCkBAIC0wLDAgKzEsNjQxIEBACisvKioKKyAqIEBmaWxlIG9waml0Y29udi5jCisgKiBDb252ZXJ0IGEgaml0IGR1bXAgZmlsZSB0byBhbiBFTEYgZmlsZQorICoKKyAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDcgT1Byb2ZpbGUgYXV0aG9ycworICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKKyAqCisgKiBAYXV0aG9yIEplbnMgV2lsa2UKKyAqIEBNb2RpZmljYXRpb25zIE1heW5hcmQgSm9obnNvbgorICogQE1vZGlmaWNhdGlvbnMgRGFuaWVsIEhhbnNlbAorICogQE1vZGlmaWNhdGlvbnMgR2lzbGUgRGFua2VsCisgKgorICogQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDA3CisgKgorICovCisKKyNpbmNsdWRlICJvcGppdGNvbnYuaCIKKyNpbmNsdWRlICJvcGRfcHJpbnRmLmgiCisjaW5jbHVkZSAib3BfZmlsZS5oIgorI2luY2x1ZGUgIm9wX2xpYmliZXJ0eS5oIgorCisjaW5jbHVkZSA8ZGlyZW50Lmg+CisjaW5jbHVkZSA8Zm5tYXRjaC5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxwd2QuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN5cy9tbWFuLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8d2FpdC5oPgorCisvKgorICogbGlzdCBoZWFkLiAgVGhlIGxpbmtlZCBsaXN0IGlzIHVzZWQgZHVyaW5nIHBhcnNpbmcgKHBhcnNlX2FsbCkgdG8KKyAqIGhvbGQgYWxsIGppdGVudHJ5IGVsZW1lbnRzLiBBZnRlciBwYXJzaW5nLCB0aGUgcHJvZ3JhbSB3b3JrcyBvbiB0aGUKKyAqIGFycmF5IHN0cnVjdHVyZXMgKGVudHJpZXNfc3ltYm9sc19hc2NlbmRpbmcsIGVudHJpZXNfYWRkcmVzc19hc2NlbmRpbmcpCisgKiBhbmQgdGhlIGxpbmtlZCBsaXN0IGlzIG5vdCB1c2VkIGFueSBtb3JlLgorICovCitzdHJ1Y3Qgaml0ZW50cnkgKiBqaXRlbnRyeV9saXN0ID0gTlVMTDsKK3N0cnVjdCBqaXRlbnRyeV9kZWJ1Z19saW5lICogaml0ZW50cnlfZGVidWdfbGluZV9saXN0ID0gTlVMTDsKKworLyogR2xvYmFsIHZhcmlhYmxlIGZvciBhc3ltYm9scyBzbyB3ZSBjYW4gZnJlZSB0aGUgc3RvcmFnZSBsYXRlci4gKi8KK2FzeW1ib2wgKiogc3ltczsKKworLyogaml0IGR1bXAgaGVhZGVyIGluZm9ybWF0aW9uICovCitlbnVtIGJmZF9hcmNoaXRlY3R1cmUgZHVtcF9iZmRfYXJjaDsKK2ludCBkdW1wX2JmZF9tYWNoOworY2hhciBjb25zdCAqIGR1bXBfYmZkX3RhcmdldF9uYW1lOworCisvKiB1c2VyIGluZm9ybWF0aW9uIGZvciBzcGVjaWFsIHVzZXIgJ29wcm9maWxlJyAqLworc3RydWN0IHBhc3N3ZCAqIHB3X29wcm9maWxlOworCitjaGFyIHN5c19jbWRfYnVmZmVyW1BBVEhfTUFYICsgMV07CisKKy8qIHRoZSBiZmQgaGFuZGxlIG9mIHRoZSBFTEYgZmlsZSB3ZSB3cml0ZSAqLworYmZkICogY3VyX2JmZDsKKworLyogY291bnQgb2Ygaml0ZW50cmllcyBpbiB0aGUgbGlzdCAqLwordTMyIGVudHJ5X2NvdW50OworLyogbWF4aW11bCBzcGFjZSBpbiB0aGUgZW50cnkgYXJyYXlzLCBuZWVkZWQgdG8gYWRkIGVudHJpZXMgKi8KK3UzMiBtYXhfZW50cnlfY291bnQ7CisvKiBhcnJheSBwb2ludGluZyB0byBhbGwgaml0IGVudHJpZXMsIHNvcnRlZCBieSBzeW1ib2wgbmFtZXMgKi8KK3N0cnVjdCBqaXRlbnRyeSAqKiBlbnRyaWVzX3N5bWJvbHNfYXNjZW5kaW5nOworLyogYXJyYXkgcG9pbnRpbmcgdG8gYWxsIGppdCBlbnRyaWVzIHNvcnRlZCBieSBhZGRyZXNzICovCitzdHJ1Y3Qgaml0ZW50cnkgKiogZW50cmllc19hZGRyZXNzX2FzY2VuZGluZzsKKworLyogZGVidWcgZmxhZywgcHJpbnQgc29tZSBpbmZvcm1hdGlvbiAqLworaW50IGRlYnVnOworCisvKgorICogIEZyb250LWVuZCBwcm9jZXNzaW5nIGZyb20gdGhpcyBwb2ludCB0byBlbmQgb2YgdGhlIHNvdXJjZS4KKyAqICAgIEZyb20gbWFpbigpLCB0aGUgZ2VuZXJhbCBmbG93IGlzIGFzIGZvbGxvd3M6CisgKiAgICAgIDEuIEZpbmQgYWxsIGFub255bW91cyBzYW1wbGVzIGRpcmVjdG9yaWVzCisgKiAgICAgIDIuIEZpbmQgYWxsIEpJVCBkdW1wIGZpbGVzCisgKiAgICAgIDMuIEZvciBlYWNoIEpJVCBkdW1wIGZpbGU6CisgKiAgICAgICAgMy4xIEZpbmQgbWF0Y2hpbmcgYW5vbiBzYW1wbGVzIGRpciAoZnJvbSBsaXN0IHJldHJpZXZlZCBpbiBzdGVwIDEpCisgKiAgICAgICAgMy4yIG1tYXAgdGhlIEpJVCBkdW1wIGZpbGUKKyAqICAgICAgICAzLjMgQ2FsbCBvcF9qaXRfY29udmVydCB0byBjcmVhdGUgRUxGIGZpbGUgaWYgbmVjZXNzYXJ5CisgKi8KKworLyogQ2FsbGJhY2sgZnVuY3Rpb24gdXNlZCBmb3IgZ2V0X21hdGNoaW5nX3BhdGhuYW1lcygpIGNhbGwgdG8gb2J0YWluCisgKiBtYXRjaGluZyBwYXRoIG5hbWVzLgorICovCitzdGF0aWMgdm9pZCBnZXRfcGF0aG5hbWUoY2hhciBjb25zdCAqIHBhdGhuYW1lLCB2b2lkICogbmFtZV9saXN0KQoreworCXN0cnVjdCBsaXN0X2hlYWQgKiBuYW1lcyA9IChzdHJ1Y3QgbGlzdF9oZWFkICopIG5hbWVfbGlzdDsKKwlzdHJ1Y3QgcGF0aG5hbWUgKiBwbiA9IHhtYWxsb2Moc2l6ZW9mKHN0cnVjdCBwYXRobmFtZSkpOworCXBuLT5uYW1lID0geHN0cmR1cChwYXRobmFtZSk7CisJbGlzdF9hZGQoJnBuLT5uZWlnaGJvciwgbmFtZXMpOworfQorCitzdGF0aWMgdm9pZCBkZWxldGVfcGF0aG5hbWUoc3RydWN0IHBhdGhuYW1lICogcG5hbWUpCit7CisJZnJlZShwbmFtZS0+bmFtZSk7CisJbGlzdF9kZWwoJnBuYW1lLT5uZWlnaGJvcik7CisJZnJlZShwbmFtZSk7Cit9CisKKworc3RhdGljIHZvaWQgZGVsZXRlX3BhdGhfbmFtZXNfbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICogbGlzdCkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICogcG9zMSwgKiBwb3MyOworCWxpc3RfZm9yX2VhY2hfc2FmZShwb3MxLCBwb3MyLCBsaXN0KSB7CisJCXN0cnVjdCBwYXRobmFtZSAqIHBuYW1lID0gbGlzdF9lbnRyeShwb3MxLCBzdHJ1Y3QgcGF0aG5hbWUsCisJCQkJCQkgICAgIG5laWdoYm9yKTsKKwkJZGVsZXRlX3BhdGhuYW1lKHBuYW1lKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgbW1hcF9qaXRkdW1wKGNoYXIgY29uc3QgKiBkdW1wZmlsZSwKKwlzdHJ1Y3Qgb3Bfaml0ZHVtcF9pbmZvICogZmlsZV9pbmZvKQoreworCWludCByYyA9IE9QX0pJVF9DT05WX09LOworCWludCBkdW1wZmQ7CisKKwlkdW1wZmQgPSBvcGVuKGR1bXBmaWxlLCBPX1JET05MWSk7CisJaWYgKGR1bXBmZCA8IDApIHsKKwkJaWYgKGVycm5vID09IEVOT0VOVCkKKwkJCXJjID0gT1BfSklUX0NPTlZfTk9fRFVNUEZJTEU7CisJCWVsc2UKKwkJCXJjID0gT1BfSklUX0NPTlZfRkFJTDsKKwkJZ290byBvdXQ7CisJfQorCXJjID0gZnN0YXQoZHVtcGZkLCAmZmlsZV9pbmZvLT5kbXBfZmlsZV9zdGF0KTsKKwlpZiAocmMgPCAwKSB7CisJCXBlcnJvcigib3BqaXRjb252OmZzdGF0IG9uIGR1bXBmaWxlIik7CisJCXJjID0gT1BfSklUX0NPTlZfRkFJTDsKKwkJZ290byBvdXQ7CisJfQorCWZpbGVfaW5mby0+ZG1wX2ZpbGUgPSBtbWFwKDAsIGZpbGVfaW5mby0+ZG1wX2ZpbGVfc3RhdC5zdF9zaXplLAorCQkJCSAgIFBST1RfUkVBRCwgTUFQX1BSSVZBVEUsIGR1bXBmZCwgMCk7CisJaWYgKGZpbGVfaW5mby0+ZG1wX2ZpbGUgPT0gTUFQX0ZBSUxFRCkgeworCQlwZXJyb3IoIm9waml0Y29udjptbWFwXG4iKTsKKwkJcmMgPSBPUF9KSVRfQ09OVl9GQUlMOworCX0KK291dDoKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBjaGFyIGNvbnN0ICogZmluZF9hbm9uX2Rpcl9tYXRjaChzdHJ1Y3QgbGlzdF9oZWFkICogYW5vbl9kaXJzLAorCQkJCQljaGFyIGNvbnN0ICogcHJvY19pZCkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICogcG9zOworCWNoYXIgbWF0Y2hfZmlsdGVyWzEwXTsKKwlzbnByaW50ZihtYXRjaF9maWx0ZXIsIDEwLCAiKi8lcy4qIiwgcHJvY19pZCk7CisJbGlzdF9mb3JfZWFjaChwb3MsIGFub25fZGlycykgeworCQlzdHJ1Y3QgcGF0aG5hbWUgKiBhbm9uX2RpciA9CisJCQlsaXN0X2VudHJ5KHBvcywgc3RydWN0IHBhdGhuYW1lLCBuZWlnaGJvcik7CisJCWlmICghZm5tYXRjaChtYXRjaF9maWx0ZXIsIGFub25fZGlyLT5uYW1lLCAwKSkKKwkJCXJldHVybiBhbm9uX2Rpci0+bmFtZTsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK2ludCBjaGFuZ2Vfb3duZXIoY2hhciAqIHBhdGgpCit7CisJaW50IHJjID0gT1BfSklUX0NPTlZfT0s7CisJaW50IGZkOworCQorCWZkID0gb3BlbihwYXRoLCAwKTsKKwlpZiAoZmQgPCAwKSB7CisJCXByaW50Zigib3BqaXRjb252OiBGaWxlIGNhbm5vdCBiZSBvcGVuZWQgZm9yIGNoYW5naW5nIG93bmVyc2hpcC5cbiIpOworCQlyYyA9IE9QX0pJVF9DT05WX0ZBSUw7CisJCWdvdG8gb3V0OworCX0KKwlpZiAoZmNob3duKGZkLCBwd19vcHJvZmlsZS0+cHdfdWlkLCBwd19vcHJvZmlsZS0+cHdfZ2lkKSAhPSAwKSB7CisJCXByaW50Zigib3BqaXRjb252OiBDaGFuZ2luZyBvd25lcnNoaXAgZmFpbGVkICglcykuXG4iLCBzdHJlcnJvcihlcnJubykpOworCQljbG9zZShmZCk7CisJCXJjID0gT1BfSklUX0NPTlZfRkFJTDsKKwkJZ290byBvdXQ7CisJfQorCWNsb3NlKGZkKTsKKworb3V0OgorCXJldHVybiByYzsKK30KKworLyogQ29waWVzIHRoZSBnaXZlbiBmaWxlIHRvIHRoZSB0ZW1wb3Jhcnkgd29ya2luZyBkaXJlY3RvcnkgYW5kIHNldHMgb3duZXJzaGlwCisgKiB0byAnb3Byb2ZpbGU6b3Byb2ZpbGUnLgorICovCitpbnQgY29weV9kdW1wZmlsZShjaGFyIGNvbnN0ICogZHVtcGZpbGUsIGNoYXIgKiB0bXBfZHVtcGZpbGUpCit7CisJaW50IHJjID0gT1BfSklUX0NPTlZfT0s7CisKKwlzcHJpbnRmKHN5c19jbWRfYnVmZmVyLCAiL2Jpbi9jcCAtcCAlcyAlcyIsIGR1bXBmaWxlLCB0bXBfZHVtcGZpbGUpOworCisJaWYgKHN5c3RlbShzeXNfY21kX2J1ZmZlcikgIT0gMCkgeworCQlwcmludGYoIm9waml0Y29udjogQ2FsbGluZyBzeXN0ZW0oKSB0byBjb3B5IGZpbGVzIGZhaWxlZC5cbiIpOworCQlyYyA9IE9QX0pJVF9DT05WX0ZBSUw7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChjaGFuZ2Vfb3duZXIodG1wX2R1bXBmaWxlKSAhPSAwKSB7CisJCXByaW50Zigib3BqaXRjb252OiBDaGFuZ2luZyBvd25lcnNoaXAgb2YgdGVtcG9yYXJ5IGR1bXAgZmlsZSBmYWlsZWQuXG4iKTsKKwkJcmMgPSBPUF9KSVRfQ09OVl9GQUlMOworCQlnb3RvIG91dDsKKwl9CisJCitvdXQ6CisJcmV0dXJuIHJjOworfQorCisvKiBDb3BpZXMgdGhlIGNyZWF0ZWQgRUxGIGZpbGUgbG9jYXRlZCBpbiB0aGUgdGVtcG9yYXJ5IHdvcmtpbmcgZGlyZWN0b3J5IHRvIHRoZQorICogZmluYWwgZGVzdGluYXRpb24gKGkuZS4gZ2l2ZW4gRUxGIGZpbGUgbmFtZSkgYW5kIHNldHMgb3duZXJzaGlwIHRvIHRoZQorICogY3VycmVudCB1c2VyLgorICovCitpbnQgY29weV9lbGZmaWxlKGNoYXIgKiBlbGZfZmlsZSwgY2hhciAqIHRtcF9lbGZmaWxlKQoreworCWludCByYyA9IE9QX0pJVF9DT05WX09LOworCWludCBmZDsKKworCXNwcmludGYoc3lzX2NtZF9idWZmZXIsICIvYmluL2NwIC1wICVzICVzIiwgdG1wX2VsZmZpbGUsIGVsZl9maWxlKTsKKwlpZiAoc3lzdGVtKHN5c19jbWRfYnVmZmVyKSAhPSAwKSB7CisJCXByaW50Zigib3BqaXRjb252OiBDYWxsaW5nIHN5c3RlbSgpIHRvIGNvcHkgZmlsZXMgZmFpbGVkLlxuIik7CisJCXJjID0gT1BfSklUX0NPTlZfRkFJTDsKKwkJZ290byBvdXQ7CisJfQorCisJZmQgPSBvcGVuKGVsZl9maWxlLCAwKTsKKwlpZiAoZmQgPCAwKSB7CisJCXByaW50Zigib3BqaXRjb252OiBGaWxlIGNhbm5vdCBiZSBvcGVuZWQgZm9yIGNoYW5naW5nIG93bmVyc2hpcC5cbiIpOworCQlyYyA9IE9QX0pJVF9DT05WX0ZBSUw7CisJCWdvdG8gb3V0OworCX0KKwlpZiAoZmNob3duKGZkLCBnZXR1aWQoKSwgZ2V0Z2lkKCkpICE9IDApIHsKKwkJcHJpbnRmKCJvcGppdGNvbnY6IENoYW5naW5nIG93bmVyc2hpcCBmYWlsZWQgKCVzKS5cbiIsIHN0cmVycm9yKGVycm5vKSk7CisJCWNsb3NlKGZkKTsKKwkJcmMgPSBPUF9KSVRfQ09OVl9GQUlMOworCQlnb3RvIG91dDsKKwl9CisJY2xvc2UoZmQpOworCQorb3V0OgorCXJldHVybiByYzsKK30KKworLyogTG9vayBmb3IgYW4gYW5vbnltb3VzIHNhbXBsZXMgZGlyZWN0b3J5IHRoYXQgbWF0Y2hlcyB0aGUgcHJvY2VzcyBJRAorICogZ2l2ZW4gYnkgdGhlIHBhc3NlZCBKSVQgZG1wX3BhdGhuYW1lLiAgSWYgbm9uZSBpcyBmb3VuZCwgaXQncyBhbiBlcnJvcgorICogc2luY2UgYnkgYWdyZWVtZW50LCBhbGwgSklUIGR1bXAgZmlsZXMgc2hvdWxkIGJlIHJlbW92ZWQgZXZlcnkgdGltZQorICogdGhlIHVzZXIgZG9lcyAtLXJlc2V0LiAgSWYgd2UgZG8gZmluZCB0aGUgbWF0Y2hpbmcgc2FtcGxlcyBkaXJlY3RvcnksCisgKiB3ZSBjcmVhdGUgYW4gRUxGIGZpbGUgKDxwcm9jX2lkPi5qbykgYW5kIHBsYWNlIGl0IGluIHRoYXQgZGlyZWN0b3J5LgorICovCitzdGF0aWMgaW50IHByb2Nlc3Nfaml0X2R1bXBmaWxlKGNoYXIgY29uc3QgKiBkbXBfcGF0aG5hbWUsCisJCQkJc3RydWN0IGxpc3RfaGVhZCAqIGFub25fc2FtcGxlX2RpcnMsCisJCQkJdW5zaWduZWQgbG9uZyBsb25nIHN0YXJ0X3RpbWUsCisJCQkJdW5zaWduZWQgbG9uZyBsb25nIGVuZF90aW1lLAorCQkJCWNoYXIgKiB0bXBfY29udl9kaXIpCit7CisJaW50IHJlc3VsdF9kaXJfbGVuZ3RoLCBwcm9jX2lkX2xlbmd0aDsKKwlpbnQgcmMgPSBPUF9KSVRfQ09OVl9PSzsKKwlpbnQgam9mZDsKKwlzdHJ1Y3Qgc3RhdCBmaWxlX3N0YXQ7CisJdGltZV90IGR1bXBmaWxlX21vZHRpbWU7CisJc3RydWN0IG9wX2ppdGR1bXBfaW5mbyBkbXBfaW5mbzsKKwljaGFyICogZWxmX2ZpbGUgPSBOVUxMOworCWNoYXIgKiBwcm9jX2lkID0gTlVMTDsKKwljaGFyIGNvbnN0ICogYW5vbl9kaXI7CisJY2hhciBjb25zdCAqIGR1bXBmaWxlbmFtZSA9IHJpbmRleChkbXBfcGF0aG5hbWUsICcvJyk7CisJLyogdGVtcG9yYXJ5IGNvcHkgb2YgZHVtcCBmaWxlIGNyZWF0ZWQgZm9yIGNvbnZlcnNpb24gc3RlcCAqLworCWNoYXIgKiB0bXBfZHVtcGZpbGU7CisJLyogdGVtcG9yYXJ5IEVMRiBmaWxlIGNyZWF0ZWQgZHVyaW5nIGNvbnZlcnNpb24gc3RlcCAqLworCWNoYXIgKiB0bXBfZWxmZmlsZTsKKwkKKwl2ZXJicHJpbnRmKGRlYnVnLCAiUHJvY2Vzc2luZyBkdW1wZmlsZSAlc1xuIiwgZG1wX3BhdGhuYW1lKTsKKwkKKwkvKiBDaGVjayBpZiB0aGUgZHVtcCBmaWxlIGlzIGEgc3ltYm9saWMgbGluay4KKwkgKiBXZSBzaG91bGQgbm90IHRydXN0IHN5bWJvbGljIGxpbmtzIGJlY2F1c2Ugd2Ugb25seSBwcm9kdWNlIG5vcm1hbCBkdW1wCisJICogZmlsZXMgKG5vIGxpbmtzKS4KKwkgKi8KKwlpZiAobHN0YXQoZG1wX3BhdGhuYW1lLCAmZmlsZV9zdGF0KSA9PSAtMSkgeworCQlwcmludGYoIm9waml0Y29udjogbHN0YXQgZm9yIGR1bXBmaWxlIGZhaWxlZCAoJXMpLlxuIiwgc3RyZXJyb3IoZXJybm8pKTsKKwkJcmMgPSBPUF9KSVRfQ09OVl9GQUlMOworCQlnb3RvIG91dDsKKwl9CisJaWYgKFNfSVNMTksoZmlsZV9zdGF0LnN0X21vZGUpKSB7CisJCXByaW50Zigib3BqaXRjb252OiBkdW1wZmlsZSBwYXRoIGlzIGNvcnJ1cHQgKHN5bWJvbGljIGxpbmtzIG5vdCBhbGxvd2VkKS5cbiIpOworCQlyYyA9IE9QX0pJVF9DT05WX0ZBSUw7CisJCWdvdG8gb3V0OworCX0KKwkKKwlpZiAoZHVtcGZpbGVuYW1lKSB7CisJCXNpemVfdCB0bXBfY29udl9kaXJfbGVuZ3RoID0gc3RybGVuKHRtcF9jb252X2Rpcik7CisJCWNoYXIgY29uc3QgKiBkb3RfZHVtcCA9IHJpbmRleCgrK2R1bXBmaWxlbmFtZSwgJy4nKTsKKwkJaWYgKCFkb3RfZHVtcCkKKwkJCWdvdG8gY2hrX3Byb2NfaWQ7CisJCXByb2NfaWRfbGVuZ3RoID0gZG90X2R1bXAgLSBkdW1wZmlsZW5hbWU7CisJCXByb2NfaWQgPSB4bWFsbG9jKHByb2NfaWRfbGVuZ3RoICsgMSk7CisJCW1lbWNweShwcm9jX2lkLCBkdW1wZmlsZW5hbWUsIHByb2NfaWRfbGVuZ3RoKTsKKwkJcHJvY19pZFtwcm9jX2lkX2xlbmd0aF0gPSAnXDAnOworCQl2ZXJicHJpbnRmKGRlYnVnLCAiRm91bmQgSklUIGR1bXBmaWxlIGZvciBwcm9jZXNzICVzXG4iLAorCQkJICAgcHJvY19pZCk7CisKKwkJdG1wX2R1bXBmaWxlID0geG1hbGxvYyh0bXBfY29udl9kaXJfbGVuZ3RoICsgMSArIHN0cmxlbihkdW1wZmlsZW5hbWUpICsgMSk7CisJCXN0cm5jcHkodG1wX2R1bXBmaWxlLCB0bXBfY29udl9kaXIsIHRtcF9jb252X2Rpcl9sZW5ndGgpOworCQl0bXBfZHVtcGZpbGVbdG1wX2NvbnZfZGlyX2xlbmd0aF0gPSAnXDAnOworCQlzdHJjYXQodG1wX2R1bXBmaWxlLCAiLyIpOworCQlzdHJjYXQodG1wX2R1bXBmaWxlLCBkdW1wZmlsZW5hbWUpOworCX0KK2Noa19wcm9jX2lkOgorCWlmICghcHJvY19pZCkgeworCQlwcmludGYoIm9waml0Y29udjogZHVtcGZpbGUgcGF0aCBpcyBjb3JydXB0LlxuIik7CisJCXJjID0gT1BfSklUX0NPTlZfRkFJTDsKKwkJZ290byBvdXQ7CisJfQorCWlmICghKGFub25fZGlyID0gZmluZF9hbm9uX2Rpcl9tYXRjaChhbm9uX3NhbXBsZV9kaXJzLCBwcm9jX2lkKSkpIHsKKwkJcHJpbnRmKCJQb3NzaWJsZSBlcnJvcjogTm8gbWF0Y2hpbmcgYW5vbiBzYW1wbGVzIGZvciAlc1xuIiwKKwkJICAgICAgIGRtcF9wYXRobmFtZSk7CisJCXJjID0gT1BfSklUX0NPTlZfTk9fTUFUQ0hJTkdfQU5PTl9TQU1QTEVTOworCQlnb3RvIGZyZWVfcmVzMTsKKwl9CisJCisJaWYgKGNvcHlfZHVtcGZpbGUoZG1wX3BhdGhuYW1lLCB0bXBfZHVtcGZpbGUpICE9IE9QX0pJVF9DT05WX09LKQorCQlnb3RvIGZyZWVfcmVzMTsKKwkKKwlpZiAoKHJjID0gbW1hcF9qaXRkdW1wKHRtcF9kdW1wZmlsZSwgJmRtcF9pbmZvKSkgPT0gT1BfSklUX0NPTlZfT0spIHsKKwkJY2hhciAqIGFub25fcGF0aF9zZWcgPSByaW5kZXgoYW5vbl9kaXIsICcvJyk7CisJCWlmICghYW5vbl9wYXRoX3NlZykgeworCQkJcHJpbnRmKCJvcGppdGNvbnY6IEJhZCBwYXRoIGZvciBhbm9uIHNhbXBsZTogJXNcbiIsCisJCQkgICAgICAgYW5vbl9kaXIpOworCQkJcmMgPSBPUF9KSVRfQ09OVl9GQUlMOworCQkJZ290byBmcmVlX3JlczI7CisJCX0KKwkJcmVzdWx0X2Rpcl9sZW5ndGggPSArK2Fub25fcGF0aF9zZWcgLSBhbm9uX2RpcjsKKwkJLyogY3JlYXRlIGZpbmFsIEVMRiBmaWxlIG5hbWUgKi8KKwkJZWxmX2ZpbGUgPSB4bWFsbG9jKHJlc3VsdF9kaXJfbGVuZ3RoICsKKwkJCQkgICBzdHJsZW4ocHJvY19pZCkgKyBzdHJsZW4oIi5qbyIpICsgMSk7CisJCXN0cm5jcHkoZWxmX2ZpbGUsIGFub25fZGlyLCByZXN1bHRfZGlyX2xlbmd0aCk7CisJCWVsZl9maWxlW3Jlc3VsdF9kaXJfbGVuZ3RoXSA9ICdcMCc7CisJCXN0cmNhdChlbGZfZmlsZSwgcHJvY19pZCk7CisJCXN0cmNhdChlbGZfZmlsZSwgIi5qbyIpOworCQkvKiBjcmVhdGUgdGVtcG9yYXJ5IEVMRiBmaWxlIG5hbWUgKi8KKwkJdG1wX2VsZmZpbGUgPSB4bWFsbG9jKHN0cmxlbih0bXBfY29udl9kaXIpICsgMSArCisJCQkJICAgc3RybGVuKHByb2NfaWQpICsgc3RybGVuKCIuam8iKSArIDEpOworCQlzdHJuY3B5KHRtcF9lbGZmaWxlLCB0bXBfY29udl9kaXIsIHN0cmxlbih0bXBfY29udl9kaXIpKTsKKwkJdG1wX2VsZmZpbGVbc3RybGVuKHRtcF9jb252X2RpcildID0gJ1wwJzsKKwkJc3RyY2F0KHRtcF9lbGZmaWxlLCAiLyIpOworCQlzdHJjYXQodG1wX2VsZmZpbGUsIHByb2NfaWQpOworCQlzdHJjYXQodG1wX2VsZmZpbGUsICIuam8iKTsKKworCQkvLyBDaGVjayBpZiBmaW5hbCBFTEYgZmlsZSBleGlzdHMgYWxyZWFkeQorCQlqb2ZkID0gb3BlbihlbGZfZmlsZSwgT19SRE9OTFkpOworCQlpZiAoam9mZCA8IDApCisJCQlnb3RvIGNyZWF0ZV9lbGY7CisJCXJjID0gZnN0YXQoam9mZCwgJmZpbGVfc3RhdCk7CisJCWlmIChyYyA8IDApIHsKKwkJCXBlcnJvcigib3BqaXRjb252OmZzdGF0IG9uIC5qbyBmaWxlIik7CisJCQlyYyA9IE9QX0pJVF9DT05WX0ZBSUw7CisJCQlnb3RvIGZyZWVfcmVzMzsKKwkJfQorCQlpZiAoZG1wX2luZm8uZG1wX2ZpbGVfc3RhdC5zdF9tdGltZSA+CisJCSAgICBkbXBfaW5mby5kbXBfZmlsZV9zdGF0LnN0X2N0aW1lKQorCQkJZHVtcGZpbGVfbW9kdGltZSA9IGRtcF9pbmZvLmRtcF9maWxlX3N0YXQuc3RfbXRpbWU7CisJCWVsc2UKKwkJCWR1bXBmaWxlX21vZHRpbWUgPSBkbXBfaW5mby5kbXBfZmlsZV9zdGF0LnN0X2N0aW1lOworCisJCS8qIEZpbmFsIEVMRiBmaWxlIGFscmVhZHkgZXhpc3RzLCBzbyBpZiBkdW1wZmlsZSBoYXMgbm90IGJlZW4KKwkJICogbW9kaWZpZWQgc2luY2UgdGhlIEVMRiBmaWxlJ3MgbW9kIHRpbWUsIHdlIGRvbid0IG5lZWQgdG8KKwkJICogZG8gRUxGIGNyZWF0aW9uIGFnYWluLgorCQkgKi8KKwkJaWYgKCEoZmlsZV9zdGF0LnN0X2N0aW1lIDwgZHVtcGZpbGVfbW9kdGltZSB8fAorCQkgICAgZmlsZV9zdGF0LnN0X210aW1lIDwgZHVtcGZpbGVfbW9kdGltZSkpIHsKKwkJCXJjID0gT1BfSklUX0NPTlZfQUxSRUFEWV9ET05FOworCQkJZ290byBmcmVlX3JlczM7IAorCQl9CisKKwljcmVhdGVfZWxmOgorCQl2ZXJicHJpbnRmKGRlYnVnLCAiQ29udmVydGluZyAlcyB0byAlc1xuIiwgZG1wX3BhdGhuYW1lLAorCQkJICAgZWxmX2ZpbGUpOworCQkvKiBTZXQgZUdJRCBvZiB0aGUgc3BlY2lhbCB1c2VyICdvcHJvZmlsZScuICovCisJCWlmIChzZXRlZ2lkKHB3X29wcm9maWxlLT5wd19naWQpICE9IDApIHsKKwkJCXBlcnJvcigib3BqaXRjb252OiBzZXRlZ2lkIHRvIHNwZWNpYWwgdXNlciBmYWlsZWQiKTsKKwkJCXJjID0gT1BfSklUX0NPTlZfRkFJTDsKKwkJCWdvdG8gZnJlZV9yZXMzOworCQl9CisJCS8qIFNldCBlVUlEIG9mIHRoZSBzcGVjaWFsIHVzZXIgJ29wcm9maWxlJy4gKi8KKwkJaWYgKHNldGV1aWQocHdfb3Byb2ZpbGUtPnB3X3VpZCkgIT0gMCkgeworCQkJcGVycm9yKCJvcGppdGNvbnY6IHNldGV1aWQgdG8gc3BlY2lhbCB1c2VyIGZhaWxlZCIpOworCQkJcmMgPSBPUF9KSVRfQ09OVl9GQUlMOworCQkJZ290byBmcmVlX3JlczM7CisJCX0KKwkJLyogQ29udmVydCB0aGUgZHVtcCBmaWxlIGFzIHRoZSBzcGVjaWFsIHVzZXIgJ29wcm9maWxlJy4gKi8KKwkJcmMgPSBvcF9qaXRfY29udmVydChkbXBfaW5mbywgdG1wX2VsZmZpbGUsIHN0YXJ0X3RpbWUsIGVuZF90aW1lKTsKKwkJLyogU2V0IGVVSUQgYmFjayB0byB0aGUgb3JpZ2luYWwgdXNlci4gKi8KKwkJaWYgKHNldGV1aWQoZ2V0dWlkKCkpICE9IDApIHsKKwkJCXBlcnJvcigib3BqaXRjb252OiBzZXRldWlkIHRvIG9yaWdpbmFsIHVzZXIgZmFpbGVkIik7CisJCQlyYyA9IE9QX0pJVF9DT05WX0ZBSUw7CisJCQlnb3RvIGZyZWVfcmVzMzsKKwkJfQorCQkvKiBTZXQgZUdJRCBiYWNrIHRvIHRoZSBvcmlnaW5hbCB1c2VyLiAqLworCQlpZiAoc2V0ZWdpZChnZXRnaWQoKSkgIT0gMCkgeworCQkJcGVycm9yKCJvcGppdGNvbnY6IHNldGVnaWQgdG8gb3JpZ2luYWwgdXNlciBmYWlsZWQiKTsKKwkJCXJjID0gT1BfSklUX0NPTlZfRkFJTDsKKwkJCWdvdG8gZnJlZV9yZXMzOworCQl9CisJCXJjID0gY29weV9lbGZmaWxlKGVsZl9maWxlLCB0bXBfZWxmZmlsZSk7CisJZnJlZV9yZXMzOgorCQlmcmVlKGVsZl9maWxlKTsKKwkJZnJlZSh0bXBfZWxmZmlsZSk7CisJZnJlZV9yZXMyOgorCQltdW5tYXAoZG1wX2luZm8uZG1wX2ZpbGUsIGRtcF9pbmZvLmRtcF9maWxlX3N0YXQuc3Rfc2l6ZSk7CisJfQorZnJlZV9yZXMxOgorCWZyZWUocHJvY19pZCk7CisJZnJlZSh0bXBfZHVtcGZpbGUpOworb3V0OgorCXJldHVybiByYzsKK30KKworLyogSWYgbm9uLU5VTEwgdmFsdWUgaXMgcmV0dXJuZWQsIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgZnJlZWluZyBtZW1vcnkuKi8KK3N0YXRpYyBjaGFyICogZ2V0X3Byb2NpZF9mcm9tX2Rpcm5hbWUoY2hhciAqIGRpcm5hbWUpCit7CisJY2hhciAqIHJldCA9IE5VTEw7CisJaWYgKGRpcm5hbWUpIHsKKwkJY2hhciAqIHByb2NfaWQ7CisJCWludCBwcm9jX2lkX2xlbmd0aDsKKwkJY2hhciAqIGZuYW1lID0gcmluZGV4KGRpcm5hbWUsICcvJyk7CisJCWNoYXIgY29uc3QgKiBkb3QgPSBpbmRleCgrK2ZuYW1lLCAnLicpOworCQlpZiAoIWRvdCkKKwkJCWdvdG8gb3V0OworCQlwcm9jX2lkX2xlbmd0aCA9IGRvdCAtIGZuYW1lOworCQlwcm9jX2lkID0geG1hbGxvYyhwcm9jX2lkX2xlbmd0aCArIDEpOworCQltZW1jcHkocHJvY19pZCwgZm5hbWUsIHByb2NfaWRfbGVuZ3RoKTsKKwkJcHJvY19pZFtwcm9jX2lkX2xlbmd0aF0gPSAnXDAnOworCQlyZXQgPSBwcm9jX2lkOworCX0KK291dDoKKwlyZXR1cm4gcmV0OworfQorc3RhdGljIHZvaWQgZmlsdGVyX2Fub25fc2FtcGxlc19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKiBhbm9uX2RpcnMpCit7CisJc3RydWN0IHByb2NpZCB7CisJCXN0cnVjdCBwcm9jaWQgKiBuZXh0OworCQljaGFyICogcGlkOworCX07CisJc3RydWN0IHByb2NpZCAqIHBpZF9saXN0ID0gTlVMTDsKKwlzdHJ1Y3QgcHJvY2lkICogaWQsICogbnh0OworCXN0cnVjdCBsaXN0X2hlYWQgKiBwb3MxLCAqIHBvczI7CisJbGlzdF9mb3JfZWFjaF9zYWZlKHBvczEsIHBvczIsIGFub25fZGlycykgeworCQlzdHJ1Y3QgcGF0aG5hbWUgKiBwbmFtZSA9IGxpc3RfZW50cnkocG9zMSwgc3RydWN0IHBhdGhuYW1lLAorCQkJCQkJICAgICBuZWlnaGJvcik7CisJCWNoYXIgKiBwcm9jX2lkID0gZ2V0X3Byb2NpZF9mcm9tX2Rpcm5hbWUocG5hbWUtPm5hbWUpOworCQlpZiAocHJvY19pZCkgeworCQkJaW50IGZvdW5kID0gMDsKKwkJCWZvciAoaWQgPSBwaWRfbGlzdDsgaWQgIT0gTlVMTDsgaWQgPSBpZC0+bmV4dCkgeworCQkJCWlmICghc3RyY21wKGlkLT5waWQsIHByb2NfaWQpKSB7CisJCQkJCS8qIEFscmVhZHkgaGF2ZSBhbiBlbnRyeSBmb3IgdGhpcyAKKwkJCQkJICogcHJvY2VzcyBJRCwgc28gZGVsZXRlIHRoaXMgZW50cnkKKwkJCQkJICogZnJvbSBhbm9uX2RpcnMuCisJCQkJCSAqLworCQkJCQlmcmVlKHBuYW1lLT5uYW1lKTsKKwkJCQkJbGlzdF9kZWwoJnBuYW1lLT5uZWlnaGJvcik7CisJCQkJCWZyZWUocG5hbWUpOworCQkJCQlmb3VuZCA9IDE7CisJCQkJfQorCQkJfQorCQkJaWYgKCFmb3VuZCkgeworCQkJCXN0cnVjdCBwcm9jaWQgKiB0aGlzX3Byb2MgPSAKKwkJCQkJeG1hbGxvYyhzaXplb2Yoc3RydWN0IHByb2NpZCkpOworCQkJCXRoaXNfcHJvYy0+cGlkID0gcHJvY19pZDsKKwkJCQl0aGlzX3Byb2MtPm5leHQgPSBwaWRfbGlzdDsKKwkJCQlwaWRfbGlzdCA9IHRoaXNfcHJvYzsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXByaW50ZigiVW5leHBlY3RlZCByZXN1bHQgaW4gcHJvY2Vzc2luZyBhbm9uIHNhbXBsZSIKKwkJCSAgICAgICAiIGRpcmVjdG9yeVxuIik7CisJCX0KKwl9CisJZm9yIChpZCA9IHBpZF9saXN0OyBpZDsgaWQgPSBueHQpIHsKKwkJZnJlZShpZC0+cGlkKTsKKwkJbnh0ID0gaWQtPm5leHQ7CisJCWZyZWUoaWQpOworCX0KK30KKworCitzdGF0aWMgaW50IG9wX3Byb2Nlc3Nfaml0X2R1bXBmaWxlcyhjaGFyIGNvbnN0ICogc2Vzc2lvbl9kaXIsCisJdW5zaWduZWQgbG9uZyBsb25nIHN0YXJ0X3RpbWUsIHVuc2lnbmVkIGxvbmcgbG9uZyBlbmRfdGltZSkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICogcG9zMSwgKiBwb3MyOworCWludCByYyA9IE9QX0pJVF9DT05WX09LOworCWNoYXIgaml0ZHVtcGZpbGVbUEFUSF9NQVggKyAxXTsKKwljaGFyIG9wcm9maWxlX3RtcF90ZW1wbGF0ZVtdID0gIi90bXAvb3Byb2ZpbGUuWFhYWFhYIjsKKwljaGFyIGNvbnN0ICogaml0ZHVtcF9kaXIgPSAiL3Zhci9saWIvb3Byb2ZpbGUvaml0ZHVtcC8iOworCUxJU1RfSEVBRChqZF9mbmFtZXMpOworCWNoYXIgY29uc3QgKiBhbm9uX2Rpcl9maWx0ZXIgPSAiKi97ZGVwfS97YW5vbjphbm9ufS9bMC05XSouKiI7CisJTElTVF9IRUFEKGFub25fZG5hbWVzKTsKKwljaGFyIGNvbnN0ICogc2FtcGxlc19zdWJkaXIgPSAiL3NhbXBsZXMvY3VycmVudCI7CisJaW50IHNhbXBsZXNfZGlyX2xlbiA9IHN0cmxlbihzZXNzaW9uX2RpcikgKyBzdHJsZW4oc2FtcGxlc19zdWJkaXIpOworCWNoYXIgKiBzYW1wbGVzX2RpcjsKKwkvKiB0ZW1wb3Jhcnkgd29ya2luZyBkaXJlY3RvcnkgZm9yIGR1bXAgZmlsZSBjb252ZXJzaW9uIHN0ZXAgKi8KKwljaGFyICogdG1wX2NvbnZfZGlyOworCisJLyogQ3JlYXRlIGEgdGVtcG9yYXJ5IHdvcmtpbmcgZGlyZWN0b3J5IHVzZWQgZm9yIHRoZSBjb252ZXJzaW9uIHN0ZXAuCisJICovCisJdG1wX2NvbnZfZGlyID0gbWtkdGVtcChvcHJvZmlsZV90bXBfdGVtcGxhdGUpOworCWlmICh0bXBfY29udl9kaXIgPT0gTlVMTCkgeworCQlwcmludGYoIm9waml0Y29udjogVGVtcG9yYXJ5IHdvcmtpbmcgZGlyZWN0b3J5IGNhbm5vdCBiZSBjcmVhdGVkLlxuIik7CisJCXJjID0gT1BfSklUX0NPTlZfRkFJTDsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKChyYyA9IGdldF9tYXRjaGluZ19wYXRobmFtZXMoJmpkX2ZuYW1lcywgZ2V0X3BhdGhuYW1lLAorCQlqaXRkdW1wX2RpciwgIiouZHVtcCIsIE5PX1JFQ1VSU0lPTikpIDwgMAorCQkJfHwgbGlzdF9lbXB0eSgmamRfZm5hbWVzKSkKKwkJZ290byBybV90bXA7CisKKwkvKiBHZXQgdXNlciBpbmZvcm1hdGlvbiAoaS5lLiBVSUQgYW5kIEdJRCkgZm9yIHNwZWNpYWwgdXNlciAnb3Byb2ZpbGUnLgorCSAqLworCXB3X29wcm9maWxlID0gZ2V0cHduYW0oIm9wcm9maWxlIik7CisJaWYgKHB3X29wcm9maWxlID09IE5VTEwpIHsKKwkJcHJpbnRmKCJvcGppdGNvbnY6IFVzZXIgaW5mb3JtYXRpb24gZm9yIHNwZWNpYWwgdXNlciBvcHJvZmlsZSBjYW5ub3QgYmUgZm91bmQuXG4iKTsKKwkJcmMgPSBPUF9KSVRfQ09OVl9GQUlMOworCQlnb3RvIHJtX3RtcDsKKwl9CisKKwkvKiBDaGFuZ2Ugb3duZXJzaGlwIG9mIHRoZSB0ZW1wb3Jhcnkgd29ya2luZyBkaXJlY3RvcnkgdG8gcHJldmVudCBvdGhlciB1c2VycworCSAqIHRvIGF0dGFjayBjb252ZXJzaW9uIHByb2Nlc3MuCisJICovCisJaWYgKGNoYW5nZV9vd25lcih0bXBfY29udl9kaXIpICE9IDApIHsKKwkJcHJpbnRmKCJvcGppdGNvbnY6IENoYW5naW5nIG93bmVyc2hpcCBvZiB0ZW1wb3JhcnkgZGlyZWN0b3J5IGZhaWxlZC5cbiIpOworCQlyYyA9IE9QX0pJVF9DT05WX0ZBSUw7CisJCWdvdG8gcm1fdG1wOworCX0KKwkKKwlzYW1wbGVzX2RpciA9IHhtYWxsb2Moc2FtcGxlc19kaXJfbGVuICsgMSk7CisJc3ByaW50ZihzYW1wbGVzX2RpciwgIiVzJXMiLCBzZXNzaW9uX2Rpciwgc2FtcGxlc19zdWJkaXIpOworCWlmIChnZXRfbWF0Y2hpbmdfcGF0aG5hbWVzKCZhbm9uX2RuYW1lcywgZ2V0X3BhdGhuYW1lLAorCQkJCSAgICBzYW1wbGVzX2RpciwgYW5vbl9kaXJfZmlsdGVyLAorCQkJCSAgICBNQVRDSF9ESVJfT05MWV9SRUNVUlNJT04pIDwgMAorCSAgICB8fCBsaXN0X2VtcHR5KCZhbm9uX2RuYW1lcykpIHsKKwkJcmMgPSBPUF9KSVRfQ09OVl9OT19BTk9OX1NBTVBMRVM7CisJCWdvdG8gcm1fdG1wOworCX0KKwkvKiBXaGVuIHVzaW5nIGdldF9tYXRjaGluZ19wYXRobmFtZXMgdG8gZmluZCBhbm9uIHNhbXBsZXMsCisJICogdGhlIGxpc3QgdGhhdCdzIHJldHVybmVkIG1heSBjb250YWluIG11bHRpcGxlIGVudHJpZXMgZm9yCisJICogb25lIG9yIG1vcmUgcHJvY2Vzc2VzOyBlLmcuLAorCSAqICAgIDY4NjguMHgxMDAwMDAuMHgxMDMwMDAKKwkgKiAgICA2ODY4LjB4ZGZlNzcwMDAuMHhkZWM0MDAwMAorCSAqICAgIDcwMTIuMHgxMDAwMDAuMHgxMDMwMDAKKwkgKiAgICA3MDEyLjB4ZGZlNzcwMDAuMHhkZWM0MDAwMAorCSAqCisJICogU28gd2UgbXVzdCBmaWx0ZXIgdGhlIGxpc3Qgc28gdGhlcmUncyBvbmx5IG9uZSBlbnRyeSBwZXIKKwkgKiBwcm9jZXNzLgorCSAqLworCWZpbHRlcl9hbm9uX3NhbXBsZXNfbGlzdCgmYW5vbl9kbmFtZXMpOworCisJLyogZ2V0X21hdGNoaW5nX3BhdGhuYW1lcyByZXR1cm5zIG9ubHkgZmlsZW5hbWUgc2VnbWVudCB3aGVuCisJICogTk9fUkVDVVJTSU9OIGlzIHBhc3NlZCwgc28gYmVsb3csIHdlIGFkZCBiYWNrIHRoZSBKSVQKKwkgKiBkdW1wIGRpcmVjdG9yeSBwYXRoIHRvIHRoZSBuYW1lLgorCSAqLworCWxpc3RfZm9yX2VhY2hfc2FmZShwb3MxLCBwb3MyLCAmamRfZm5hbWVzKSB7CisJCXN0cnVjdCBwYXRobmFtZSAqIGRtcGZpbGUgPQorCQkJbGlzdF9lbnRyeShwb3MxLCBzdHJ1Y3QgcGF0aG5hbWUsIG5laWdoYm9yKTsKKwkJc3RybmNweShqaXRkdW1wZmlsZSwgaml0ZHVtcF9kaXIsIFBBVEhfTUFYKTsKKwkJc3RybmNhdChqaXRkdW1wZmlsZSwgZG1wZmlsZS0+bmFtZSwgUEFUSF9NQVgpOworCQlyYyA9IHByb2Nlc3Nfaml0X2R1bXBmaWxlKGppdGR1bXBmaWxlLCAmYW5vbl9kbmFtZXMsCisJCQkJCSAgc3RhcnRfdGltZSwgZW5kX3RpbWUsIHRtcF9jb252X2Rpcik7CisJCWlmIChyYyA9PSBPUF9KSVRfQ09OVl9GQUlMKSB7CisJCQl2ZXJicHJpbnRmKGRlYnVnLCAiSklUIGNvbnZlcnQgZXJyb3IgJWRcbiIsIHJjKTsKKwkJCWdvdG8gcm1fdG1wOworCQl9CisJCWRlbGV0ZV9wYXRobmFtZShkbXBmaWxlKTsKKwl9CisJZGVsZXRlX3BhdGhfbmFtZXNfbGlzdCgmYW5vbl9kbmFtZXMpOworCQorcm1fdG1wOgorCS8qIERlbGV0ZSB0ZW1wb3Jhcnkgd29ya2luZyBkaXJlY3Rvcnkgd2l0aCBhbGwgaXRzIGZpbGVzCisJICogKGkuZS4gZHVtcCBhbmQgRUxGIGZpbGUpLgorCSAqLworCXNwcmludGYoc3lzX2NtZF9idWZmZXIsICIvYmluL3JtIC1yZiAlcyIsIHRtcF9jb252X2Rpcik7CisJaWYgKHN5c3RlbShzeXNfY21kX2J1ZmZlcikgIT0gMCkgeworCQlwcmludGYoIm9waml0Y29udjogUmVtb3ZpbmcgdGVtcG9yYXJ5IHdvcmtpbmcgZGlyZWN0b3J5IGZhaWxlZC5cbiIpOworCQlyYyA9IE9QX0pJVF9DT05WX1RNUERJUl9OT1RfUkVNT1ZFRDsKKwl9CisJCitvdXQ6CisJcmV0dXJuIHJjOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKiBhcmd2KQoreworCXVuc2lnbmVkIGxvbmcgbG9uZyBzdGFydF90aW1lLCBlbmRfdGltZTsKKwljaGFyIGNvbnN0ICogc2Vzc2lvbl9kaXI7CisJaW50IHJjID0gMDsKKworCWRlYnVnID0gMDsKKwlpZiAoYXJnYyA+IDEgJiYgc3RyY21wKGFyZ3ZbMV0sICItZCIpID09IDApIHsKKwkJZGVidWcgPSAxOworCQlhcmdjLS07CisJCWFyZ3YrKzsKKwl9CisKKwlpZiAoYXJnYyAhPSA0KSB7CisJCXByaW50ZigiVXNhZ2U6IG9waml0Y29udiBbLWRdIDxzZXNzaW9uX2Rpcj4gPHN0YXJ0dGltZT4iCisJCSAgICAgICAiIDxlbmR0aW1lPlxuIik7CisJCWZmbHVzaChzdGRvdXQpOworCQlyYyA9IEVYSVRfRkFJTFVSRTsKKwkJZ290byBvdXQ7CisJfQorCisJc2Vzc2lvbl9kaXIgPSBhcmd2WzFdOworCS8qCisJICogQ2hlY2sgZm9yIGEgbWF4aW11bSBvZiA0MDk2IGJ5dGVzIChMaW51eCBwYXRoIG5hbWUgbGVuZ3RoIGxpbWl0KSBkZWNyZW1lbnRlZAorCSAqIGJ5IDE2IGJ5dGVzICh3aWxsIGJlIHVzZWQgbGF0ZXIgZm9yIGFwcGVuZGluZyBzYW1wbGVzIHN1YiBkaXJlY3RvcnkpLgorCSAqIEludGVnZXIgb3ZlcmZsb3dzIGFjY29yZGluZyB0byB0aGUgc2Vzc2lvbiBkaXIgcGFyYW1ldGVyICh1c2VyIGNvbnRyb2xsZWQpCisJICogYXJlIG5vdCBwb3NzaWJsZSBhbnltb3JlLgorCSAqLworCWlmIChzdHJsZW4oc2Vzc2lvbl9kaXIpID4gUEFUSF9NQVggLSAxNikgeworCQlwcmludGYoIm9waml0Y29udjogUGF0aCBuYW1lIGxlbmd0aCBsaW1pdCBleGNlZWRlZCBmb3Igc2Vzc2lvbiBkaXJlY3Rvcnk6ICVzXG4iLCBzZXNzaW9uX2Rpcik7CisJCXJjID0gRVhJVF9GQUlMVVJFOworCQlnb3RvIG91dDsKKwl9CisKKwlzdGFydF90aW1lID0gYXRvbChhcmd2WzJdKTsKKwllbmRfdGltZSA9IGF0b2woYXJndlszXSk7CisKKwlpZiAoc3RhcnRfdGltZSA+IGVuZF90aW1lKSB7CisJCXJjID0gRVhJVF9GQUlMVVJFOworCQlnb3RvIG91dDsKKwl9CisJdmVyYnByaW50ZihkZWJ1ZywgInN0YXJ0IHRpbWUvZW5kIHRpbWUgaXMgJWxsdS8lbGx1XG4iLAorCQkgICBzdGFydF90aW1lLCBlbmRfdGltZSk7CisJcmMgPSBvcF9wcm9jZXNzX2ppdF9kdW1wZmlsZXMoc2Vzc2lvbl9kaXIsIHN0YXJ0X3RpbWUsIGVuZF90aW1lKTsKKwlpZiAocmMgPiBPUF9KSVRfQ09OVl9PSykgeworCQl2ZXJicHJpbnRmKGRlYnVnLCAib3BqaXRjb252OiBFbmRpbmcgd2l0aCByYyA9ICVkLiBUaGlzIGNvZGUiCisJCQkgICAiIGlzIHVzdWFsbHkgT0ssIGJ1dCBjYW4gYmUgdXNlZnVsIGZvciBkZWJ1Z2dpbmciCisJCQkgICAiIHB1cnBvc2VzLlxuIiwgcmMpOworCQlyYyA9IE9QX0pJVF9DT05WX09LOworCX0KKwlmZmx1c2goc3Rkb3V0KTsKKwlpZiAocmMgPT0gT1BfSklUX0NPTlZfT0spCisJCXJjID0gRVhJVF9TVUNDRVNTOworCWVsc2UKKwkJcmMgPSBFWElUX0ZBSUxVUkU7CitvdXQ6CisJX2V4aXQocmMpOworfQpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45Ljcvb3BqaXRjb252L29waml0Y29udi5oIGIvb3Byb2ZpbGUtMC45Ljcvb3BqaXRjb252L29waml0Y29udi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxYzJjOTUKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9vcGppdGNvbnYvb3BqaXRjb252LmgKQEAgLTAsMCArMSwxNDAgQEAKKy8qKgorICogQGZpbGUgb3BqaXRjb252LmgKKyAqIENvbnZlcnQgYSBqaXQgZHVtcCBmaWxlIHRvIGFuIEVMRiBmaWxlCisgKgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwNyBPUHJvZmlsZSBhdXRob3JzCisgKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORworICoKKyAqIEBhdXRob3IgSmVucyBXaWxrZQorICogQE1vZGlmaWNhdGlvbnMgTWF5bmFyZCBKb2huc29uCisgKiBATW9kaWZpY2F0aW9ucyBQaGlsaXBwZSBFbGllCisgKiBATW9kaWZpY2F0aW9ucyBEYW5pZWwgSGFuc2VsCisgKgorICogQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDA3CisgKgorICovCisKKyNpZm5kZWYgT1BKSVRDT05WX0gKKyNkZWZpbmUgT1BKSVRDT05WX0gKKworI2RlZmluZSBPUF9KSVRfQ09OVl9PSyAwCisjZGVmaW5lIE9QX0pJVF9DT05WX0ZBSUwgLTEKKyNkZWZpbmUgT1BfSklUX0NPTlZfTk9fRFVNUEZJTEUgMQorI2RlZmluZSBPUF9KSVRfQ09OVl9OT19BTk9OX1NBTVBMRVMgMgorI2RlZmluZSBPUF9KSVRfQ09OVl9OT19NQVRDSElOR19BTk9OX1NBTVBMRVMgMworI2RlZmluZSBPUF9KSVRfQ09OVl9OT19KSVRfUkVDU19JTl9EVU1QRklMRSA0CisjZGVmaW5lIE9QX0pJVF9DT05WX0FMUkVBRFlfRE9ORSA1CisjZGVmaW5lIE9QX0pJVF9DT05WX1RNUERJUl9OT1RfUkVNT1ZFRCA2CisKKyNpbmNsdWRlIDxiZmQuaD4KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorCisjaW5jbHVkZSAib3BfbGlzdC5oIgorI2luY2x1ZGUgIm9wX3R5cGVzLmgiCisKKy8qIFN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zIGFsbCBpbmZvcm1hdGlvbgorICogZm9yIG9uZSBmdW5jdGlvbiBlbnRyeSBpbiB0aGUgaml0IGR1bXAgZmlsZS4KKyAqIHRoZSBqaXQgZHVtcCBmaWxlIGdldHMgbW1hcHBlZCBhbmQgY29kZSBhbmQKKyAqIHN5bWJvbF9uYW1lIHBvaW50IGRpcmVjdGx5IGludG8gdGhlIGZpbGUgKi8KK3N0cnVjdCBqaXRlbnRyeSB7CisJLyogbGlua2VkIGxpc3QuIHNlZSBqaXRlbnRyeV9saXN0ICovCisJc3RydWN0IGppdGVudHJ5ICogbmV4dDsKKwkvKiB2bWEgKi8KKwl1bnNpZ25lZCBsb25nIGxvbmcgdm1hOworCS8qIHBvaW50IHRvIGNvZGUgaW4gdGhlIG1lbW9yeSBtYXBwZWQgZmlsZSAqLworCXZvaWQgY29uc3QgKiBjb2RlOworCS8qIHNpemUgb2YgdGhlIGppdHRlZCBjb2RlICovCisJaW50IGNvZGVfc2l6ZTsKKwkvKiBwb2ludCB0byB0aGUgbmFtZSBpbiBtZW1vcnkgbWFwcGVkIGppdGR1bXAgZmlsZSwgb3IKKwkgKiB0byBhIG1hbGxvY2VkIHN0cmluZywgaWYgd2UgaGF2ZSBhIGRpc2FtYmlndWF0aW9uIHJlcGxhY2VtZW50ICovCisJY2hhciAqIHN5bWJvbF9uYW1lOworCS8qIHN5bV9uYW1lX21hbGxvY2VkID09MSBtZWFucyB3ZSBuZWVkIHRvIGZyZWUgdGhlIG1lbW9yeSB3aGVuIGRvbmUuICovCisJaW50IHN5bV9uYW1lX21hbGxvY2VkOworCS8qIHNlY29uZHMgc2luY2UgZXBvY2ggd2hlbiB0aGUgY29kZSB3YXMgY3JlYXRlZCAqLworCXVuc2lnbmVkIGxvbmcgbG9uZyBsaWZlX3N0YXJ0OworCS8qIHNlY29uZHMgc2luY2UgZXBvY2ggd2hlbiB0aGUgY29kZSB3YXMgb3ZlcndyaXR0ZW4gKi8KKwl1bnNpZ25lZCBsb25nIGxvbmcgbGlmZV9lbmQ7CisJLyogYWZ0ZXIgb3JkZXJpbmcgYW5kIHBhcnRpdGlvbmluZyB0aGlzIGlzIHRoZSBFTEYKKwkgKiBzZWN0aW9uIHdlIHB1dCB0aGlzIGNvZGUgdG8gKi8KKwlhc2VjdGlvbiAqIHNlY3Rpb247Cit9OworCitzdHJ1Y3Qgaml0ZW50cnlfZGVidWdfbGluZSB7CisJc3RydWN0IGppdGVudHJ5X2RlYnVnX2xpbmUgKiBuZXh0OworCXN0cnVjdCBqcl9jb2RlX2RlYnVnX2luZm8gY29uc3QgKiBkYXRhOworCS8qIHNlY29uZHMgc2luY2UgZXBvY2ggd2hlbiB0aGUgY29kZSB3YXMgY3JlYXRlZCAqLworCXVuc2lnbmVkIGxvbmcgbG9uZyBsaWZlX3N0YXJ0OworCS8qIHNlY29uZHMgc2luY2UgZXBvY2ggd2hlbiB0aGUgY29kZSB3YXMgb3ZlcndyaXR0ZW4gKi8KKwl1bnNpZ25lZCBsb25nIGxvbmcgbGlmZV9lbmQ7CisJdm9pZCBjb25zdCAqIGVuZDsKK307CisKK3N0cnVjdCBvcF9qaXRkdW1wX2luZm8KK3sKKwl2b2lkICogZG1wX2ZpbGU7CisJc3RydWN0IHN0YXQgZG1wX2ZpbGVfc3RhdDsKK307CisKK3N0cnVjdCBwYXRobmFtZQoreworCWNoYXIgKiBuYW1lOworCXN0cnVjdCBsaXN0X2hlYWQgbmVpZ2hib3I7Cit9OworCisvKiBqaXRzeW1ib2wuYyAqLwordm9pZCBjcmVhdGVfYXJyYXlzKHZvaWQpOworaW50IHJlc29sdmVfb3ZlcmxhcHModW5zaWduZWQgbG9uZyBsb25nIHN0YXJ0X3RpbWUpOwordm9pZCBkaXNhbWJpZ3VhdGVfc3ltYm9sX25hbWVzKHZvaWQpOworCisvKiBwYXJzZV9kdW1wLmMgKi8KK2ludCBwYXJzZV9hbGwodm9pZCBjb25zdCAqIHN0YXJ0LCB2b2lkIGNvbnN0ICogZW5kLAorCSAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBlbmRfdGltZSk7CisKKy8qIGNvbnZlcnNpb24uYyAqLworaW50IG9wX2ppdF9jb252ZXJ0KHN0cnVjdCBvcF9qaXRkdW1wX2luZm8gZmlsZV9pbmZvLCBjaGFyIGNvbnN0ICogZWxmZmlsZSwKKyAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgc3RhcnRfdGltZSwgdW5zaWduZWQgbG9uZyBsb25nIGVuZF90aW1lKTsKKworLyogY3JlYXRlX2JmZC5jICovCitiZmQgKiBvcGVuX2VsZihjaGFyIGNvbnN0ICogZmlsZW5hbWUpOworaW50IHBhcnRpdGlvbl9zZWN0aW9ucyh2b2lkKTsKK2ludCBmaWxsX3NlY3Rpb25zKHZvaWQpOworYXNlY3Rpb24gKiBjcmVhdGVfc2VjdGlvbihiZmQgKiBhYmZkLCBjaGFyIGNvbnN0ICogc2VjdGlvbl9uYW1lLAorCQkJICBzaXplX3Qgc2l6ZSwgYmZkX3ZtYSB2bWEsIGZsYWd3b3JkIGZsYWdzKTsKK2ludCBmaWxsX3NlY3Rpb25fY29udGVudChiZmQgKiBhYmZkLCBhc2VjdGlvbiAqIHNlY3Rpb24sCisJCQkgdm9pZCBjb25zdCAqIGIsIGZpbGVfcHRyIG9mZnNldCwgc2l6ZV90IHN6KTsKKworLyogZGVidWdfbGluZS5jICovCitpbnQgaW5pdF9kZWJ1Z19saW5lX2luZm8oYmZkICogYWJmZCk7CitpbnQgZmluYWxpemVfZGVidWdfbGluZV9pbmZvKGJmZCAqIGFiZmQpOworCisvKiBqaXQgZHVtcCBoZWFkZXIgaW5mb3JtYXRpb24gKi8KK2V4dGVybiBlbnVtIGJmZF9hcmNoaXRlY3R1cmUgZHVtcF9iZmRfYXJjaDsKK2V4dGVybiBpbnQgZHVtcF9iZmRfbWFjaDsKK2V4dGVybiBjaGFyIGNvbnN0ICogZHVtcF9iZmRfdGFyZ2V0X25hbWU7CisvKgorICogbGlzdCBoZWFkLiAgVGhlIGxpbmtlZCBsaXN0IGlzIHVzZWQgZHVyaW5nIHBhcnNpbmcgKHBhcnNlX2FsbCkgdG8KKyAqIGhvbGQgYWxsIGppdGVudHJ5IGVsZW1lbnRzLiBBZnRlciBwYXJzaW5nLCB0aGUgcHJvZ3JhbSB3b3JrcyBvbiB0aGUKKyAqIGFycmF5IHN0cnVjdHVyZXMgKGVudHJpZXNfc3ltYm9sc19hc2NlbmRpbmcsIGVudHJpZXNfYWRkcmVzc19hc2NlbmRpbmcpCisgKiBhbmQgdGhlIGxpbmtlZCBsaXN0IGlzIG5vdCB1c2VkIGFueSBtb3JlLgorICovCitleHRlcm4gc3RydWN0IGppdGVudHJ5ICogaml0ZW50cnlfbGlzdDsKKy8qIGNvdW50IG9mIGppdGVudHJpZXMgaW4gdGhlIGxpc3QgKi8KK2V4dGVybiB1MzIgZW50cnlfY291bnQ7CisvKiBsaXN0IGhlYWQgZm9yIGRlYnVnIGxpbmUgaW5mb3JtYXRpb24gKi8KK2V4dGVybiBzdHJ1Y3Qgaml0ZW50cnlfZGVidWdfbGluZSAqIGppdGVudHJ5X2RlYnVnX2xpbmVfbGlzdDsKKy8qIG1heGltdW0gc3BhY2UgaW4gdGhlIGVudHJ5IGFycmF5cywgbmVlZGVkIHRvIGFkZCBlbnRyaWVzICovCitleHRlcm4gdTMyIG1heF9lbnRyeV9jb3VudDsKKy8qIGFycmF5IHBvaW50aW5nIHRvIGFsbCBqaXQgZW50cmllcywgc29ydGVkIGJ5IHN5bWJvbCBuYW1lcyAqLworZXh0ZXJuIHN0cnVjdCBqaXRlbnRyeSAqKiBlbnRyaWVzX3N5bWJvbHNfYXNjZW5kaW5nOworLyogYXJyYXkgcG9pbnRpbmcgdG8gYWxsIGppdCBlbnRyaWVzIHNvcnRlZCBieSBhZGRyZXNzICovCitleHRlcm4gc3RydWN0IGppdGVudHJ5ICoqIGVudHJpZXNfYWRkcmVzc19hc2NlbmRpbmc7CisvKiBHbG9iYWwgdmFyaWFibGUgZm9yIGFzeW1ib2xzIHNvIHdlIGNhbiBmcmVlIHRoZSBzdG9yYWdlIGxhdGVyLiAqLworZXh0ZXJuIGFzeW1ib2wgKiogc3ltczsKKy8qIHRoZSBiZmQgaGFuZGxlIG9mIHRoZSBFTEYgZmlsZSB3ZSB3cml0ZSAqLworZXh0ZXJuIGJmZCAqIGN1cl9iZmQ7CisvKiBkZWJ1ZyBmbGFnLCBwcmludCBzb21lIGluZm9ybWF0aW9uICovCitleHRlcm4gaW50IGRlYnVnOworCisKKyNlbmRpZiAvKiBPUEpJVENPTlZfSCAqLwpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45Ljcvb3BqaXRjb252L3BhcnNlX2R1bXAuYyBiL29wcm9maWxlLTAuOS43L29waml0Y29udi9wYXJzZV9kdW1wLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjYyNWM3YwotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L29waml0Y29udi9wYXJzZV9kdW1wLmMKQEAgLTAsMCArMSwyNDcgQEAKKy8qKgorICogQGZpbGUgcGFyc2VfZHVtcC5jCisgKiBwYXJzZSBhIGppdCBkdW1wIGZpbGUKKyAqCisgKiBAcmVtYXJrIENvcHlyaWdodCAyMDA3IE9Qcm9maWxlIGF1dGhvcnMKKyAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCisgKgorICogQGF1dGhvciBKZW5zIFdpbGtlCisgKiBATW9kaWZpY2F0aW9ucyBNYXluYXJkIEpvaG5zb24KKyAqIEBNb2RpZmljYXRpb25zIFBoaWxpcHBlIEVsaWUKKyAqIEBNb2RpZmljYXRpb25zIERhbmllbCBIYW5zZWwKKyAqCisgKiBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDcKKyAqCisgKi8KKworI2luY2x1ZGUgIm9waml0Y29udi5oIgorI2luY2x1ZGUgImppdGR1bXAuaCIKKyNpbmNsdWRlICJvcGRfcHJpbnRmLmgiCisjaW5jbHVkZSAib3BfbGliaWJlcnR5LmgiCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorCisvKiBwYXJzZSBhIGNvZGUgbG9hZCByZWNvcmQgYW5kIGFkZCB0aGUgZW50cnkgdG8gdGhlIGppdGVudHJ5IGxpc3QgKi8KK3N0YXRpYyBpbnQgcGFyc2VfY29kZV9sb2FkKHZvaWQgY29uc3QgKiBwdHJfYXJnLCBpbnQgc2l6ZSwKKwkJCSAgIHVuc2lnbmVkIGxvbmcgbG9uZyBlbmRfdGltZSkKK3sKKwlzdHJ1Y3Qgaml0ZW50cnkgKiBlbnRyeTsKKwlpbnQgcmMgPSBPUF9KSVRfQ09OVl9PSzsKKwljaGFyIGNvbnN0ICogcHRyID0gcHRyX2FyZzsKKwlzdHJ1Y3QganJfY29kZV9sb2FkIGNvbnN0ICogcmVjID0gcHRyX2FyZzsKKwljaGFyIGNvbnN0ICogZW5kOworCXNpemVfdCBwYWRkaW5nX2NvdW50LCByZWNfdG90YWxzaXplOworCWVuZCA9IHJlYy0+Y29kZV9hZGRyID8gcHRyICsgc2l6ZSA6IE5VTEw7CisKKwllbnRyeSA9IHhjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBqaXRlbnRyeSkpOworCisJLy8gaml0ZW50cnkgY29uc3RydWN0b3IKKwllbnRyeS0+bmV4dCA9IE5VTEw7CisJcHRyICs9IHNpemVvZigqcmVjKTsKKwkvKiBzeW1ib2xfbmFtZSBjYW4gYmUgbWFsbG9jZWQgc28gd2UgY2FzdCBhd2F5IHRoZSBjb25zdG5lc3MuICovCisJZW50cnktPnN5bWJvbF9uYW1lID0gKGNoYXIgKilwdHI7CisJZW50cnktPnN5bV9uYW1lX21hbGxvY2VkID0gMDsKKwlwdHIgKz0gc3RybGVuKHB0cikgKyAxOworCWVudHJ5LT5jb2RlID0gcmVjLT5jb2RlX2FkZHIgPyBwdHIgOiBOVUxMOworCWVudHJ5LT52bWEgPSByZWMtPnZtYTsKKwllbnRyeS0+Y29kZV9zaXplID0gcmVjLT5jb2RlX3NpemU7CisJZW50cnktPnNlY3Rpb24gPSBOVUxMOworCWVudHJ5LT5saWZlX3N0YXJ0ID0gcmVjLT50aW1lc3RhbXA7CisJLy8gaWYgbm90aGluZyBlbHNlIGlzIGtub3duIHRoZSBzeW1ib2wgbGl2ZXMgdGlsbCB0aGUgZW5kIG9mIHRoZQorCS8vIHNhbXBsaW5nIHJ1biwgdGhpcyB2YWx1ZSBtYXkgYmUgb3ZlcndyaXR0ZW4gYnkgYW4gdW5sb2FkIHJlY29yZDEKKwkvLyBsYXRlcgorCWVudHJ5LT5saWZlX2VuZCA9IGVuZF90aW1lOworCisJLy8gYnVpbGQgbGlzdAorCWVudHJ5LT5uZXh0ID0gaml0ZW50cnlfbGlzdDsKKwlqaXRlbnRyeV9saXN0ID0gZW50cnk7CisKKwkvKiBwYWRkaW5nIGJ5dGVzIGFyZSBjYWxjdWxhdGVkIG92ZXIgdGhlIGNvbXBsZXRlIHJlY29yZAorCSAqIChpLmUuIGhlYWRlciArIHN5bWJvbCBuYW1lICsgY29kZSkKKwkgKi8KKwlyZWNfdG90YWxzaXplID0gc2l6ZW9mKCpyZWMpICsgc3RybGVuKGVudHJ5LT5zeW1ib2xfbmFtZSkgKyAxICsgZW50cnktPmNvZGVfc2l6ZTsKKwlwYWRkaW5nX2NvdW50ID0gUEFERElOR184QUxJR05FRChyZWNfdG90YWxzaXplKTsKKworCXZlcmJwcmludGYoZGVidWcsICJyZWNvcmQwOiBuYW1lPSVzLCB2bWE9JWxseCwgY29kZV9zaXplPSVpLCAiCisJCSAgICJwYWRkaW5nX2NvdW50PSVsbHUsIGxpZmVfc3RhcnQ9JWxsaSwgbGlmZV9lbmQ9JWxsaVxuIiwgZW50cnktPnN5bWJvbF9uYW1lLAorCQkgICBlbnRyeS0+dm1hLCBlbnRyeS0+Y29kZV9zaXplLCAodW5zaWduZWQgbG9uZyBsb25nKXBhZGRpbmdfY291bnQsIGVudHJ5LT5saWZlX3N0YXJ0LAorCQkgICBlbnRyeS0+bGlmZV9lbmQpOworCS8qIElmIGVuZCA9PSBOVUxMLCB0aGUgZHVtcCBkb2VzIG5vdCBpbmNsdWRlIGNvZGUsIGFuZCB0aGlzIHNhbml0eQorCSAqIGNoZWNrIGlzIHNraXBwZWQuCisJICovCisJaWYgKGVuZCAmJiAocHRyICsgZW50cnktPmNvZGVfc2l6ZSArIHBhZGRpbmdfY291bnQgIT0gZW5kKSkgeworCQl2ZXJicHJpbnRmKGRlYnVnLCAicmVjb3JkIHRvdGFsIHNpemUgbWlzbWF0Y2hcbiIpOworCQlyYyA9IE9QX0pJVF9DT05WX0ZBSUw7CisJfQorCXJldHVybiByYzsKK30KKworCisvKgorICogcGFyc2UgYSBjb2RlIHVubG9hZCByZWNvcmQuIFNlYXJjaCBmb3IgZXhpc3RpbmcgcmVjb3JkIHdpdGggdGhpcyBjb2RlCisgKiBhZGRyZXNzIGFuZCBmaWxsIGxpZmVfZW5kIGZpZWxkIHdpdGggdGhlIHRpbWVzdGFtcC4gbGluZWFyIHNlYXJjaCBub3QgdmVyeQorICogZWZmaWNpZW50LiBGSVhNRTogaW5lZmZpY2llbnQKKyAqLworc3RhdGljIHZvaWQgcGFyc2VfY29kZV91bmxvYWQodm9pZCBjb25zdCAqIHB0ciwgdW5zaWduZWQgbG9uZyBsb25nIGVuZF90aW1lKQoreworCXN0cnVjdCBqcl9jb2RlX3VubG9hZCBjb25zdCAqIHJlYyA9IHB0cjsKKwlzdHJ1Y3Qgaml0ZW50cnkgKiBlbnRyeTsKKworCXZlcmJwcmludGYoZGVidWcsInJlY29yZDE6IHZtYT0lbGx4LCBsaWZlX2VuZD0lbGxpXG4iLAorCQkgICByZWMtPnZtYSwgcmVjLT50aW1lc3RhbXApOworCS8qKgorCSAqIE5vcm1hbGx5IHdlIHdvbid0IGdldCBhIGpyX2NvZGVfdW5sb2FkIHdpdGggYSB6ZXJvIHRpbWUgc3RhbXAgb3IKKwkgKiBhIHplcm8gY29kZSBhZGRyZXNzLiBUaGUgY29kZSBhZGRyZXNzIGlzIGRpcmVjdGx5IHByb3ZpZGVkIGJ5IHRoZSBKVk1USS4KKwkgKiBUaGUgZG9jdW1lbnRhdGlvbiBvZiBKVk1USSBkb2VzIG5vdCBzYXkgYW55dGhpbmcgYWJvdXQgdGhlIGFkZHJlc3MgdmFsdWUgaWYKKwkgKiBpdCBjb3VsZCBiZSB6ZXJvIG9yIG5vdC4gVGhlcmVmb3JlIGl0IGlzIG9ubHkgYSBzYW5pdHkgY2hlY2sgYXQgdGhlIG1vbWVudC4KKwkgKi8KKwlpZiAocmVjLT50aW1lc3RhbXAgPiAwICYmIHJlYy0+dm1hICE9IDApIHsKKwkJZm9yIChlbnRyeSA9IGppdGVudHJ5X2xpc3Q7IGVudHJ5OyBlbnRyeSA9IGVudHJ5LT5uZXh0KSB7CisJCQlpZiAoZW50cnktPnZtYSA9PSByZWMtPnZtYSAmJgorCQkJICAgIGVudHJ5LT5saWZlX2VuZCA9PSBlbmRfdGltZSkgeworCQkJCWVudHJ5LT5saWZlX2VuZCA9IHJlYy0+dGltZXN0YW1wOworCQkJCXZlcmJwcmludGYoZGVidWcsIm1hdGNoaW5nIHJlY29yZCBmb3VuZFxuIik7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9Cit9CisKKworLyoKKyAqIFRoZXJlIGlzIG5vIHJlYWwgcGFyc2luZyBoZXJlLCB3ZSBqdXN0IHJlY29yZCBhIHBvaW50ZXIgdG8gdGhlIGRhdGEsCisgKiB3ZSB3aWxsIGludGVycHJldCBvbiB0aGUgZmx5IHRoZSByZWNvcmQgd2hlbiBidWlsZGluZyB0aGUgYmZkIGZpbGUuCisgKi8KK3N0YXRpYyB2b2lkIHBhcnNlX2NvZGVfZGVidWdfaW5mbyh2b2lkIGNvbnN0ICogcHRyLCB2b2lkIGNvbnN0ICogZW5kLAorCQkJCSAgdW5zaWduZWQgbG9uZyBsb25nIGVuZF90aW1lKQoreworCXN0cnVjdCBqcl9jb2RlX2RlYnVnX2luZm8gY29uc3QgKiByZWMgPSBwdHI7CisJc3RydWN0IGppdGVudHJ5X2RlYnVnX2xpbmUgKiBkZWJ1Z19saW5lID0KKwkJeG1hbGxvYyhzaXplb2Yoc3RydWN0IGppdGVudHJ5X2RlYnVnX2xpbmUpKTsKKworCWRlYnVnX2xpbmUtPmRhdGEgPSByZWM7CisJZGVidWdfbGluZS0+ZW5kID0gZW5kOworCWRlYnVnX2xpbmUtPmxpZmVfc3RhcnQgPSByZWMtPnRpbWVzdGFtcDsKKwlkZWJ1Z19saW5lLT5saWZlX2VuZCA9IGVuZF90aW1lOworCisJZGVidWdfbGluZS0+bmV4dCA9IGppdGVudHJ5X2RlYnVnX2xpbmVfbGlzdDsKKwlqaXRlbnRyeV9kZWJ1Z19saW5lX2xpc3QgPSBkZWJ1Z19saW5lOworfQorCisKKy8qIHBhcnNlIGFsbCBlbnRyaWVzIGluIHRoZSBqaXQgZHVtcCBmaWxlIGFuZCBidWlsZCBqaXRlbnRyeV9saXN0LgorICogdGhlIGNvZGUgbmVlZHMgdG8gY2hlY2sgYWx3YXlzIHdoZXRoZXIgdGhlcmUgaXMgZW5vdWdoCisgKiB0byByZWFkIHJlbWFpbmluZy4gdGhpcyBpcyBiZWNhdXNlIHRoZSBmaWxlIG1heSBiZSB3cml0dGVuIHRvCisgKiBjb25jdXJyZW50bHkuICovCitzdGF0aWMgaW50IHBhcnNlX2VudHJpZXModm9pZCBjb25zdCAqIHB0ciwgdm9pZCBjb25zdCAqIGVuZCwKKwkJCSB1bnNpZ25lZCBsb25nIGxvbmcgZW5kX3RpbWUpCit7CisJaW50IHJjID0gT1BfSklUX0NPTlZfT0s7CisJc3RydWN0IGpyX3ByZWZpeCBjb25zdCAqIHJlYyA9IHB0cjsKKworCXdoaWxlICgodm9pZCAqKXJlYyArIHNpemVvZihzdHJ1Y3QganJfcHJlZml4KSA8IGVuZCkgeworCQlpZiAoKCh2b2lkICopIHJlYyArIHJlYy0+dG90YWxfc2l6ZSkgPiBlbmQpIHsKKwkJCXZlcmJwcmludGYoZGVidWcsICJyZWNvcmQgcGFzdCBlbmQgb2YgZmlsZVxuIik7CisJCQlyYyA9IE9QX0pJVF9DT05WX0ZBSUw7CisJCQlicmVhazsKKwkJfQorCisJCXN3aXRjaCAocmVjLT5pZCkgeworCQljYXNlIEpJVF9DT0RFX0xPQUQ6CisJCQlpZiAocGFyc2VfY29kZV9sb2FkKHJlYywgcmVjLT50b3RhbF9zaXplLCBlbmRfdGltZSkpIHsKKwkJCQlyYyA9IE9QX0pJVF9DT05WX0ZBSUw7CisJCQkJYnJlYWs7CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIEpJVF9DT0RFX1VOTE9BRDoKKwkJCXBhcnNlX2NvZGVfdW5sb2FkKHJlYywgZW5kX3RpbWUpOworCQkJYnJlYWs7CisKKwkJLy8gZW5kIG9mIFZNIGxpdmUgdGltZSwgbm8gYWN0aW9uCisJCWNhc2UgSklUX0NPREVfQ0xPU0U6CisJCQlicmVhazsKKworCQljYXNlIEpJVF9DT0RFX0RFQlVHX0lORk86CisJCQlpZiAocmVjLT50b3RhbF9zaXplID09IDApIHsKKwkJCQkvKiBvcF93cml0ZV9kZWJ1Z19saW5lX2luZm8oKSBlbnN1cmVzIHRvIHdyaXRlIHJlY29yZHMgd2l0aAorCQkJCSAqIHRvdGFsc2l6ZSA+IDAuCisJCQkJICovCisJCQkJcmMgPSBPUF9KSVRfQ09OVl9GQUlMOworCQkJCWJyZWFrOworCQkJfQorCisJCQlwYXJzZV9jb2RlX2RlYnVnX2luZm8ocmVjLCBlbmQsIGVuZF90aW1lKTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQl2ZXJicHJpbnRmKGRlYnVnLCAidW5rbm93biByZWNvcmQgdHlwZVxuIik7CisJCQlyYyA9IE9QX0pJVF9DT05WX0ZBSUw7CisJCQlicmVhazsKKwkJfQorCisJCS8qIGFkdmFuY2UgdG8gbmV4dCByZWNvcmQgKGluY2wuIHBvc3NpYmxlIHBhZGRpbmcgYnl0ZXMpICovCisJCXJlYyA9ICh2b2lkICopcmVjICsgcmVjLT50b3RhbF9zaXplOworCX0KKworCXJldHVybiByYzsKK30KKworCisvKiBwYXJzZSB0aGUgaml0IGR1bXAgaGVhZGVyIGluZm9ybWF0aW9uIAorICogVGhlIHB0ciBhcmcgaXMgdGhlIGFkZHJlc3Mgb2YgdGhlIHBvaW50ZXIgdG8gdGhlIG1tYXBwZWQKKyAqIGZpbGUsIHdoaWNoIHdlIG1vZGlmeSBiZWxvdy4KKyAqLworc3RhdGljIGludCBwYXJzZV9oZWFkZXIoY2hhciBjb25zdCAqKiBwdHIsIGNoYXIgY29uc3QgKiBlbmQpCit7CisJaW50IHJjID0gT1BfSklUX0NPTlZfT0s7CisJc3RydWN0IGppdGhlYWRlciBjb25zdCAqIGhlYWRlcjsKKworCWlmICgqcHRyICsgc2l6ZW9mKHN0cnVjdCBqaXRoZWFkZXIpID49IGVuZCkgeworCQl2ZXJicHJpbnRmKGRlYnVnLAorCQkJICAgIm9waml0Y29udjogRU9GIGluIGppdGR1bXAgZmlsZSwgbm8gaGVhZGVyXG4iKTsKKwkJcmMgPSBPUF9KSVRfQ09OVl9GQUlMOworCQlnb3RvIG91dDsKKwl9CisJaGVhZGVyID0gKHN0cnVjdCBqaXRoZWFkZXIgKikqcHRyOworCWlmIChoZWFkZXItPm1hZ2ljICE9IEpJVEhFQURFUl9NQUdJQykgeworCQl2ZXJicHJpbnRmKGRlYnVnLCAib3BqaXRjb252OiBXcm9uZyBqaXRkdW1wIGZpbGUgbWFnaWNcbiIpOworCQlyYyA9IE9QX0pJVF9DT05WX0ZBSUw7CisJCWdvdG8gb3V0OworCX0KKwlpZiAoaGVhZGVyLT52ZXJzaW9uICE9IEpJVEhFQURFUl9WRVJTSU9OKSB7CisJCXZlcmJwcmludGYoZGVidWcsICJvcGppdGNvbnY6IFdyb25nIGppdGR1bXAgZmlsZSB2ZXJzaW9uXG4iKTsKKwkJcmMgPSBPUF9KSVRfQ09OVl9GQUlMOworCQlnb3RvIG91dDsKKwl9CisJaWYgKCpwdHIgKyBoZWFkZXItPnRvdGFsc2l6ZSA+IGVuZCkgeworCQl2ZXJicHJpbnRmKGRlYnVnLCAib3BqaXRjb252OiBFT0YgaW4gaml0ZHVtcCBmaWxlLCBub3QgZW5vdWdoICIKKwkJCSAgICJkYXRhIGZvciBoZWFkZXJcbiIpOworCQlyYyA9IE9QX0pJVF9DT05WX0ZBSUw7CisJCWdvdG8gb3V0OworCX0KKwlkdW1wX2JmZF9hcmNoID0gaGVhZGVyLT5iZmRfYXJjaDsKKwlkdW1wX2JmZF9tYWNoID0gaGVhZGVyLT5iZmRfbWFjaDsKKwlkdW1wX2JmZF90YXJnZXRfbmFtZSA9IGhlYWRlci0+YmZkX3RhcmdldDsKKwl2ZXJicHJpbnRmKGRlYnVnLCAiaGVhZGVyOiBiZmQtYXJjaD0laSwgYmZkLW1hY2g9JWksIgorCQkgICAiIGJmZF90YXJnZXRfbmFtZT0lc1xuIiwgZHVtcF9iZmRfYXJjaCwgZHVtcF9iZmRfbWFjaCwKKwkJICAgZHVtcF9iZmRfdGFyZ2V0X25hbWUpOworCSpwdHIgPSAqcHRyICsgaGVhZGVyLT50b3RhbHNpemU7CitvdXQ6CisJcmV0dXJuIHJjOworfQorCisKKy8qIFJlYWQgaW4gdGhlIG1lbW9yeSBtYXBwZWQgaml0ZHVtcCBmaWxlLgorICogQnVpbGQgdXAgaml0ZW50cnkgc3RydWN0dXJlIGFuZCBzZXQgZ2xvYmFsIHZhcmlhYmxlcy4KKyovCitpbnQgcGFyc2VfYWxsKHZvaWQgY29uc3QgKiBzdGFydCwgdm9pZCBjb25zdCAqIGVuZCwKKwkgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgZW5kX3RpbWUpCit7CisJY2hhciBjb25zdCAqIHB0ciA9IHN0YXJ0OworCWlmICghcGFyc2VfaGVhZGVyKCZwdHIsIGVuZCkpCisJCXJldHVybiBwYXJzZV9lbnRyaWVzKHB0ciwgZW5kLCBlbmRfdGltZSk7CisJZWxzZQorCQlyZXR1cm4gT1BfSklUX0NPTlZfRkFJTDsKK30KZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L3BwL01ha2VmaWxlLmFtIGIvb3Byb2ZpbGUtMC45LjcvcHAvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQzNjQ3MwotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L3BwL01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsNDUgQEAKK0FNX0NQUEZMQUdTID0gXAorCS1JICR7dG9wX3NyY2Rpcn0vbGlib3AgXAorCS1JICR7dG9wX3NyY2Rpcn0vbGlidXRpbCBcCisJLUkgJHt0b3Bfc3JjZGlyfS9saWJkYiBcCisJLUkgJHt0b3Bfc3JjZGlyfS9saWJvcHQrKyBcCisJLUkgJHt0b3Bfc3JjZGlyfS9saWJ1dGlsKysgXAorCS1JICR7dG9wX3NyY2Rpcn0vbGlicmVnZXggXAorCS1JICR7dG9wX3NyY2Rpcn0vbGlicHAKKworQU1fQ1hYRkxBR1MgPSBAT1BfQ1hYRkxBR1NACisKK2Jpbl9QUk9HUkFNUyA9IG9wcmVwb3J0IG9wYW5ub3RhdGUgb3BncHJvZiBvcGFyY2hpdmUKKworTElCUz1AUE9QVF9MSUJTQCBAQkZEX0xJQlNACisKK3BwX2NvbW1vbiA9IGNvbW1vbl9vcHRpb24uY3BwIGNvbW1vbl9vcHRpb24uaAorCitjb21tb25fbGlicyA9ICBcCisJLi4vbGlicHAvbGlicHAuYSBcCisJLi4vbGlib3B0KysvbGlib3B0KysuYSBcCisJLi4vbGlicmVnZXgvbGlib3BfcmVnZXguYSBcCisJLi4vbGlidXRpbCsrL2xpYnV0aWwrKy5hIFwKKwkuLi9saWJvcC9saWJvcC5hIFwKKwkuLi9saWJ1dGlsL2xpYnV0aWwuYSBcCisJLi4vbGliZGIvbGlib2RiLmEKKworb3ByZXBvcnRfU09VUkNFUyA9IG9wcmVwb3J0LmNwcCBcCisJb3ByZXBvcnRfb3B0aW9ucy5oIG9wcmVwb3J0X29wdGlvbnMuY3BwIFwKKwkkKHBwX2NvbW1vbikKK29wcmVwb3J0X0xEQUREID0gJChjb21tb25fbGlicykKKworb3Bhbm5vdGF0ZV9TT1VSQ0VTID0gb3Bhbm5vdGF0ZS5jcHAgXAorCW9wYW5ub3RhdGVfb3B0aW9ucy5oIG9wYW5ub3RhdGVfb3B0aW9ucy5jcHAgXAorCSQocHBfY29tbW9uKQorb3Bhbm5vdGF0ZV9MREFERCA9ICQoY29tbW9uX2xpYnMpCisKK29wZ3Byb2ZfU09VUkNFUyA9IG9wZ3Byb2YuY3BwIFwKKwlvcGdwcm9mX29wdGlvbnMuaCBvcGdwcm9mX29wdGlvbnMuY3BwIFwKKwkkKHBwX2NvbW1vbikKK29wZ3Byb2ZfTERBREQgPSAkKGNvbW1vbl9saWJzKQorCitvcGFyY2hpdmVfU09VUkNFUyA9IG9wYXJjaGl2ZS5jcHAgXAorCW9wYXJjaGl2ZV9vcHRpb25zLmggb3BhcmNoaXZlX29wdGlvbnMuY3BwIFwKKwkkKHBwX2NvbW1vbikKK29wYXJjaGl2ZV9MREFERCA9ICQoY29tbW9uX2xpYnMpCmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9wcC9NYWtlZmlsZS5pbiBiL29wcm9maWxlLTAuOS43L3BwL01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkNGNlMTMKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9wcC9NYWtlZmlsZS5pbgpAQCAtMCwwICsxLDY0NSBAQAorIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS4xMS4xIGZyb20gTWFrZWZpbGUuYW0uCisjIEBjb25maWd1cmVfaW5wdXRACisKKyMgQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLAorIyAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisjIEluYy4KKyMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKKyMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQorIyBQQVJUSUNVTEFSIFBVUlBPU0UuCisKK0BTRVRfTUFLRUAKKworVlBBVEggPSBAc3JjZGlyQAorcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACitwa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAorYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAoraW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKK2luc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKK2luc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYworSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKK3RyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKK05PUk1BTF9JTlNUQUxMID0gOgorUFJFX0lOU1RBTEwgPSA6CitQT1NUX0lOU1RBTEwgPSA6CitOT1JNQUxfVU5JTlNUQUxMID0gOgorUFJFX1VOSU5TVEFMTCA9IDoKK1BPU1RfVU5JTlNUQUxMID0gOgorYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKK2hvc3RfdHJpcGxldCA9IEBob3N0QAorYmluX1BST0dSQU1TID0gb3ByZXBvcnQkKEVYRUVYVCkgb3Bhbm5vdGF0ZSQoRVhFRVhUKSBvcGdwcm9mJChFWEVFWFQpIFwKKwlvcGFyY2hpdmUkKEVYRUVYVCkKK3N1YmRpciA9IHBwCitESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKHNyY2RpcikvTWFrZWZpbGUuaW4KK0FDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKK2FtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL200L2JpbnV0aWxzLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2J1aWx0aW5leHBlY3QubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY2VsbHNwdWJmZHN1cHBvcnQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY29tcGlsZXJvcHRpb24ubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY29uZmlnbW9kdWxlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2NvcHlpZmNoYW5nZS5tNCAkKHRvcF9zcmNkaXIpL200L2RvY2Jvb2subTQgXAorCSQodG9wX3NyY2RpcikvbTQvZXh0cmFkaXJzLm00ICQodG9wX3NyY2RpcikvbTQvZmluZGtlcm5lbC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9rZXJuZWxvcHRpb24ubTQgXAorCSQodG9wX3NyY2RpcikvbTQva2VybmVsdmVyc2lvbi5tNCAkKHRvcF9zcmNkaXIpL200L2xpYnRvb2wubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbHRvcHRpb25zLm00ICQodG9wX3NyY2RpcikvbTQvbHRzdWdhci5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9sdHZlcnNpb24ubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdH5vYnNvbGV0ZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9tYWxsb2NhdHRyaWJ1dGUubTQgXAorCSQodG9wX3NyY2RpcikvbTQvcG9wdGNvbnN0Lm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3ByZWNvbXBpbGVkaGVhZGVyLm00ICQodG9wX3NyY2RpcikvbTQvcXQubTQgXAorCSQodG9wX3NyY2RpcikvbTQvcmVzdWx0eW4ubTQgJCh0b3Bfc3JjZGlyKS9tNC9zc3RyZWFtLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L3R5cGVkZWYubTQgJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuaW4KK2FtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCisJJChBQ0xPQ0FMX000KQorbWtpbnN0YWxsZGlycyA9ICQoaW5zdGFsbF9zaCkgLWQKK0NPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvY29uZmlnLmgKK0NPTkZJR19DTEVBTl9GSUxFUyA9CitDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMgPQorYW1fX2luc3RhbGxkaXJzID0gIiQoREVTVERJUikkKGJpbmRpcikiCitQUk9HUkFNUyA9ICQoYmluX1BST0dSQU1TKQorYW1fX29iamVjdHNfMSA9IGNvbW1vbl9vcHRpb24uJChPQkpFWFQpCithbV9vcGFubm90YXRlX09CSkVDVFMgPSBvcGFubm90YXRlLiQoT0JKRVhUKSBcCisJb3Bhbm5vdGF0ZV9vcHRpb25zLiQoT0JKRVhUKSAkKGFtX19vYmplY3RzXzEpCitvcGFubm90YXRlX09CSkVDVFMgPSAkKGFtX29wYW5ub3RhdGVfT0JKRUNUUykKK29wYW5ub3RhdGVfREVQRU5ERU5DSUVTID0gJChjb21tb25fbGlicykKK2FtX29wYXJjaGl2ZV9PQkpFQ1RTID0gb3BhcmNoaXZlLiQoT0JKRVhUKSBvcGFyY2hpdmVfb3B0aW9ucy4kKE9CSkVYVCkgXAorCSQoYW1fX29iamVjdHNfMSkKK29wYXJjaGl2ZV9PQkpFQ1RTID0gJChhbV9vcGFyY2hpdmVfT0JKRUNUUykKK29wYXJjaGl2ZV9ERVBFTkRFTkNJRVMgPSAkKGNvbW1vbl9saWJzKQorYW1fb3BncHJvZl9PQkpFQ1RTID0gb3BncHJvZi4kKE9CSkVYVCkgb3BncHJvZl9vcHRpb25zLiQoT0JKRVhUKSBcCisJJChhbV9fb2JqZWN0c18xKQorb3BncHJvZl9PQkpFQ1RTID0gJChhbV9vcGdwcm9mX09CSkVDVFMpCitvcGdwcm9mX0RFUEVOREVOQ0lFUyA9ICQoY29tbW9uX2xpYnMpCithbV9vcHJlcG9ydF9PQkpFQ1RTID0gb3ByZXBvcnQuJChPQkpFWFQpIG9wcmVwb3J0X29wdGlvbnMuJChPQkpFWFQpIFwKKwkkKGFtX19vYmplY3RzXzEpCitvcHJlcG9ydF9PQkpFQ1RTID0gJChhbV9vcHJlcG9ydF9PQkpFQ1RTKQorb3ByZXBvcnRfREVQRU5ERU5DSUVTID0gJChjb21tb25fbGlicykKK0RFRkFVTFRfSU5DTFVERVMgPSAtSS5AYW1fX2lzcmNAIC1JJCh0b3BfYnVpbGRkaXIpCitkZXBjb21wID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9kZXBjb21wCithbV9fZGVwZmlsZXNfbWF5YmUgPSBkZXBmaWxlcworYW1fX212ID0gbXYgLWYKK0NYWENPTVBJTEUgPSAkKENYWCkgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpIFwKKwkkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NYWEZMQUdTKSAkKENYWEZMQUdTKQorTFRDWFhDT01QSUxFID0gJChMSUJUT09MKSAtLXRhZz1DWFggJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSBcCisJLS1tb2RlPWNvbXBpbGUgJChDWFgpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSBcCisJJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DWFhGTEFHUykgJChDWFhGTEFHUykKK0NYWExEID0gJChDWFgpCitDWFhMSU5LID0gJChMSUJUT09MKSAtLXRhZz1DWFggJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSBcCisJLS1tb2RlPWxpbmsgJChDWFhMRCkgJChBTV9DWFhGTEFHUykgJChDWFhGTEFHUykgJChBTV9MREZMQUdTKSBcCisJJChMREZMQUdTKSAtbyAkQAorQ09NUElMRSA9ICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSBcCisJJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQorTFRDT01QSUxFID0gJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIFwKKwktLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgXAorCSQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKK0NDTEQgPSAkKENDKQorTElOSyA9ICQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSBcCisJLS1tb2RlPWxpbmsgJChDQ0xEKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpICQoQU1fTERGTEFHUykgXAorCSQoTERGTEFHUykgLW8gJEAKK1NPVVJDRVMgPSAkKG9wYW5ub3RhdGVfU09VUkNFUykgJChvcGFyY2hpdmVfU09VUkNFUykgXAorCSQob3BncHJvZl9TT1VSQ0VTKSAkKG9wcmVwb3J0X1NPVVJDRVMpCitESVNUX1NPVVJDRVMgPSAkKG9wYW5ub3RhdGVfU09VUkNFUykgJChvcGFyY2hpdmVfU09VUkNFUykgXAorCSQob3BncHJvZl9TT1VSQ0VTKSAkKG9wcmVwb3J0X1NPVVJDRVMpCitFVEFHUyA9IGV0YWdzCitDVEFHUyA9IGN0YWdzCitESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQorQUNMT0NBTCA9IEBBQ0xPQ0FMQAorQU1UQVIgPSBAQU1UQVJACitBUiA9IEBBUkAKK0FVVE9DT05GID0gQEFVVE9DT05GQAorQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAorQVVUT01BS0UgPSBAQVVUT01BS0VACitBV0sgPSBAQVdLQAorQkZEX0xJQlMgPSBAQkZEX0xJQlNACitDQVRfRU5UUllfRU5EID0gQENBVF9FTlRSWV9FTkRACitDQVRfRU5UUllfU1RBUlQgPSBAQ0FUX0VOVFJZX1NUQVJUQAorQ0MgPSBAQ0NACitDQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAorQ0ZMQUdTID0gQENGTEFHU0AKK0NQUCA9IEBDUFBACitDUFBGTEFHUyA9IEBDUFBGTEFHU0AKK0NYWCA9IEBDWFhACitDWFhDUFAgPSBAQ1hYQ1BQQAorQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAorQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACitDWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAorREFURSA9IEBEQVRFQAorREVGUyA9IEBERUZTQAorREVQRElSID0gQERFUERJUkAKK0RPQ0JPT0tfUk9PVCA9IEBET0NCT09LX1JPT1RACitEU1lNVVRJTCA9IEBEU1lNVVRJTEAKK0RVTVBCSU4gPSBARFVNUEJJTkAKK0VDSE9fQyA9IEBFQ0hPX0NACitFQ0hPX04gPSBARUNIT19OQAorRUNIT19UID0gQEVDSE9fVEAKK0VHUkVQID0gQEVHUkVQQAorRVhFRVhUID0gQEVYRUVYVEAKK0VYVFJBX0NGTEFHU19NT0RVTEUgPSBARVhUUkFfQ0ZMQUdTX01PRFVMRUAKK0ZHUkVQID0gQEZHUkVQQAorR1JFUCA9IEBHUkVQQAorSU5TVEFMTCA9IEBJTlNUQUxMQAorSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKK0lOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACitJTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKK0lOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACitKQVZBX0hPTUVESVIgPSBASkFWQV9IT01FRElSQAorS0lOQyA9IEBLSU5DQAorS1NSQyA9IEBLU1JDQAorS1ZFUlMgPSBAS1ZFUlNACitMRCA9IEBMREAKK0xERkxBR1MgPSBATERGTEFHU0AKK0xJQkVSVFlfTElCUyA9IEBMSUJFUlRZX0xJQlNACitMSUJPQkpTID0gQExJQk9CSlNACitMSUJTID0gQFBPUFRfTElCU0AgQEJGRF9MSUJTQAorTElCVE9PTCA9IEBMSUJUT09MQAorTElQTyA9IEBMSVBPQAorTE5fUyA9IEBMTl9TQAorTFRMSUJPQkpTID0gQExUTElCT0JKU0AKK01BS0VJTkZPID0gQE1BS0VJTkZPQAorTUtESVJfUCA9IEBNS0RJUl9QQAorTU9DID0gQE1PQ0AKK01PRElOU1RBTExESVIgPSBATU9ESU5TVEFMTERJUkAKK05NID0gQE5NQAorTk1FRElUID0gQE5NRURJVEAKK09CSkRVTVAgPSBAT0JKRFVNUEAKK09CSkVYVCA9IEBPQkpFWFRACitPUFJPRklMRV9ESVIgPSBAT1BST0ZJTEVfRElSQAorT1BST0ZJTEVfTU9EVUxFX0FSQ0ggPSBAT1BST0ZJTEVfTU9EVUxFX0FSQ0hACitPUF9DRkxBR1MgPSBAT1BfQ0ZMQUdTQAorT1BfQ1hYRkxBR1MgPSBAT1BfQ1hYRkxBR1NACitPUF9ET0NESVIgPSBAT1BfRE9DRElSQAorT1RPT0wgPSBAT1RPT0xACitPVE9PTDY0ID0gQE9UT09MNjRACitQQUNLQUdFID0gQFBBQ0tBR0VACitQQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKK1BBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACitQQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKK1BBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACitQQUNLQUdFX1VSTCA9IEBQQUNLQUdFX1VSTEAKK1BBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACitQQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKK1BLR19DT05GSUcgPSBAUEtHX0NPTkZJR0AKK1BLR19DT05GSUdfTElCRElSID0gQFBLR19DT05GSUdfTElCRElSQAorUEtHX0NPTkZJR19QQVRIID0gQFBLR19DT05GSUdfUEFUSEAKK1BPUFRfTElCUyA9IEBQT1BUX0xJQlNACitQVFJESUZGX1RfVFlQRSA9IEBQVFJESUZGX1RfVFlQRUAKK1FUX0NGTEFHUyA9IEBRVF9DRkxBR1NACitRVF9JTkNMVURFUyA9IEBRVF9JTkNMVURFU0AKK1FUX0xERkxBR1MgPSBAUVRfTERGTEFHU0AKK1FUX0xJQiA9IEBRVF9MSUJACitRVF9MSUJTID0gQFFUX0xJQlNACitRVF9WRVJTSU9OID0gQFFUX1ZFUlNJT05ACitSQU5MSUIgPSBAUkFOTElCQAorU0VEID0gQFNFREAKK1NFVF9NQUtFID0gQFNFVF9NQUtFQAorU0hFTEwgPSBAU0hFTExACitTSVpFX1RfVFlQRSA9IEBTSVpFX1RfVFlQRUAKK1NUUklQID0gQFNUUklQQAorVUlDID0gQFVJQ0AKK1VJQ2hlbHAgPSBAVUlDaGVscEAKK1ZFUlNJT04gPSBAVkVSU0lPTkAKK1hNS01GID0gQFhNS01GQAorWE1MX0NBVEFMT0cgPSBAWE1MX0NBVEFMT0dACitYU0xUUFJPQyA9IEBYU0xUUFJPQ0AKK1hTTFRQUk9DX0ZMQUdTID0gQFhTTFRQUk9DX0ZMQUdTQAorWF9DRkxBR1MgPSBAWF9DRkxBR1NACitYX0VYVFJBX0xJQlMgPSBAWF9FWFRSQV9MSUJTQAorWF9MSUJTID0gQFhfTElCU0AKK1hfUFJFX0xJQlMgPSBAWF9QUkVfTElCU0AKK2Fic19idWlsZGRpciA9IEBhYnNfYnVpbGRkaXJACithYnNfc3JjZGlyID0gQGFic19zcmNkaXJACithYnNfdG9wX2J1aWxkZGlyID0gQGFic190b3BfYnVpbGRkaXJACithYnNfdG9wX3NyY2RpciA9IEBhYnNfdG9wX3NyY2RpckAKK2FjX2N0X0NDID0gQGFjX2N0X0NDQAorYWNfY3RfQ1hYID0gQGFjX2N0X0NYWEAKK2FjX2N0X0RVTVBCSU4gPSBAYWNfY3RfRFVNUEJJTkAKK2FtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAorYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKK2FtX19xdW90ZSA9IEBhbV9fcXVvdGVACithbV9fdGFyID0gQGFtX190YXJACithbV9fdW50YXIgPSBAYW1fX3VudGFyQAorYmluZGlyID0gQGJpbmRpckAKK2J1aWxkID0gQGJ1aWxkQAorYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACitidWlsZF9jcHUgPSBAYnVpbGRfY3B1QAorYnVpbGRfb3MgPSBAYnVpbGRfb3NACitidWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAorYnVpbGRkaXIgPSBAYnVpbGRkaXJACitkYXRhZGlyID0gQGRhdGFkaXJACitkYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKK2RvY2RpciA9IEBkb2NkaXJACitkdmlkaXIgPSBAZHZpZGlyQAorZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACitob3N0ID0gQGhvc3RACitob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACitob3N0X2NwdSA9IEBob3N0X2NwdUAKK2hvc3Rfb3MgPSBAaG9zdF9vc0AKK2hvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAoraHRtbGRpciA9IEBodG1sZGlyQAoraW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAoraW5mb2RpciA9IEBpbmZvZGlyQAoraW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAorbGliZGlyID0gQGxpYmRpckAKK2xpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKK2xvY2FsZWRpciA9IEBsb2NhbGVkaXJACitsb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACitsdF9FQ0hPID0gQGx0X0VDSE9ACittYW5kaXIgPSBAbWFuZGlyQAorbWtkaXJfcCA9IEBta2Rpcl9wQAorb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAorcGRmZGlyID0gQHBkZmRpckAKK3ByZWZpeCA9IEBwcmVmaXhACitwcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACitwc2RpciA9IEBwc2RpckAKK3NiaW5kaXIgPSBAc2JpbmRpckAKK3NoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAorc3JjZGlyID0gQHNyY2RpckAKK3N5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKK3RhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACit0b3BfYnVpbGRfcHJlZml4ID0gQHRvcF9idWlsZF9wcmVmaXhACit0b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAordG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAordG9wZGlyID0gQHRvcGRpckAKK0FNX0NQUEZMQUdTID0gXAorCS1JICR7dG9wX3NyY2Rpcn0vbGlib3AgXAorCS1JICR7dG9wX3NyY2Rpcn0vbGlidXRpbCBcCisJLUkgJHt0b3Bfc3JjZGlyfS9saWJkYiBcCisJLUkgJHt0b3Bfc3JjZGlyfS9saWJvcHQrKyBcCisJLUkgJHt0b3Bfc3JjZGlyfS9saWJ1dGlsKysgXAorCS1JICR7dG9wX3NyY2Rpcn0vbGlicmVnZXggXAorCS1JICR7dG9wX3NyY2Rpcn0vbGlicHAKKworQU1fQ1hYRkxBR1MgPSBAT1BfQ1hYRkxBR1NACitwcF9jb21tb24gPSBjb21tb25fb3B0aW9uLmNwcCBjb21tb25fb3B0aW9uLmgKK2NvbW1vbl9saWJzID0gXAorCS4uL2xpYnBwL2xpYnBwLmEgXAorCS4uL2xpYm9wdCsrL2xpYm9wdCsrLmEgXAorCS4uL2xpYnJlZ2V4L2xpYm9wX3JlZ2V4LmEgXAorCS4uL2xpYnV0aWwrKy9saWJ1dGlsKysuYSBcCisJLi4vbGlib3AvbGlib3AuYSBcCisJLi4vbGlidXRpbC9saWJ1dGlsLmEgXAorCS4uL2xpYmRiL2xpYm9kYi5hCisKK29wcmVwb3J0X1NPVVJDRVMgPSBvcHJlcG9ydC5jcHAgXAorCW9wcmVwb3J0X29wdGlvbnMuaCBvcHJlcG9ydF9vcHRpb25zLmNwcCBcCisJJChwcF9jb21tb24pCisKK29wcmVwb3J0X0xEQUREID0gJChjb21tb25fbGlicykKK29wYW5ub3RhdGVfU09VUkNFUyA9IG9wYW5ub3RhdGUuY3BwIFwKKwlvcGFubm90YXRlX29wdGlvbnMuaCBvcGFubm90YXRlX29wdGlvbnMuY3BwIFwKKwkkKHBwX2NvbW1vbikKKworb3Bhbm5vdGF0ZV9MREFERCA9ICQoY29tbW9uX2xpYnMpCitvcGdwcm9mX1NPVVJDRVMgPSBvcGdwcm9mLmNwcCBcCisJb3BncHJvZl9vcHRpb25zLmggb3BncHJvZl9vcHRpb25zLmNwcCBcCisJJChwcF9jb21tb24pCisKK29wZ3Byb2ZfTERBREQgPSAkKGNvbW1vbl9saWJzKQorb3BhcmNoaXZlX1NPVVJDRVMgPSBvcGFyY2hpdmUuY3BwIFwKKwlvcGFyY2hpdmVfb3B0aW9ucy5oIG9wYXJjaGl2ZV9vcHRpb25zLmNwcCBcCisJJChwcF9jb21tb24pCisKK29wYXJjaGl2ZV9MREFERCA9ICQoY29tbW9uX2xpYnMpCithbGw6IGFsbC1hbQorCisuU1VGRklYRVM6CisuU1VGRklYRVM6IC5jcHAgLmxvIC5vIC5vYmoKKyQoc3JjZGlyKS9NYWtlZmlsZS5pbjogICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJQGZvciBkZXAgaW4gJD87IGRvIFwKKwkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAorCSAgICAqJCRkZXAqKSBcCisJICAgICAgKCBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggKSBcCisJICAgICAgICAmJiB7IGlmIHRlc3QgLWYgJEA7IHRoZW4gZXhpdCAwOyBlbHNlIGJyZWFrOyBmaTsgfTsgXAorCSAgICAgIGV4aXQgMTs7IFwKKwkgIGVzYWM7IFwKKwlkb25lOyBcCisJZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1mb3JlaWduIHBwL01ha2VmaWxlJzsgXAorCSQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmIFwKKwkgICQoQVVUT01BS0UpIC0tZm9yZWlnbiBwcC9NYWtlZmlsZQorLlBSRUNJT1VTOiBNYWtlZmlsZQorTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworCUBjYXNlICckPycgaW4gXAorCSAgKmNvbmZpZy5zdGF0dXMqKSBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKKwkgICopIFwKKwkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAorCWVzYWM7CisKKyQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorCiskKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorJChBQ0xPQ0FMX000KTogICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6CitpbnN0YWxsLWJpblBST0dSQU1TOiAkKGJpbl9QUk9HUkFNUykKKwlAJChOT1JNQUxfSU5TVEFMTCkKKwl0ZXN0IC16ICIkKGJpbmRpcikiIHx8ICQoTUtESVJfUCkgIiQoREVTVERJUikkKGJpbmRpcikiCisJQGxpc3Q9JyQoYmluX1BST0dSQU1TKSc7IHRlc3QgLW4gIiQoYmluZGlyKSIgfHwgbGlzdD07IFwKKwlmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCAkJHAiOyBkb25lIHwgXAorCXNlZCAncy8kKEVYRUVYVCkkJC8vJyB8IFwKKwl3aGlsZSByZWFkIHAgcDE7IGRvIGlmIHRlc3QgLWYgJCRwIHx8IHRlc3QgLWYgJCRwMTsgXAorCSAgdGhlbiBlY2hvICIkJHAiOyBlY2hvICIkJHAiOyBlbHNlIDo7IGZpOyBcCisJZG9uZSB8IFwKKwlzZWQgLWUgJ3A7cywuKi8sLDtuO2gnIC1lICdzfC4qfC58JyBcCisJICAgIC1lICdwO3g7cywuKi8sLDtzLyQoRVhFRVhUKSQkLy87JCh0cmFuc2Zvcm0pO3MvJCQvJChFWEVFWFQpLycgfCBcCisJc2VkICdOO047TjtzLFxuLCAsZycgfCBcCisJJChBV0spICdCRUdJTiB7IGZpbGVzWyIuIl0gPSAiIjsgZGlyc1siLiJdID0gMSB9IFwKKwkgIHsgZD0kJDM7IGlmIChkaXJzW2RdICE9IDEpIHsgcHJpbnQgImQiLCBkOyBkaXJzW2RdID0gMSB9IFwKKwkgICAgaWYgKCQkMiA9PSAkJDQpIGZpbGVzW2RdID0gZmlsZXNbZF0gIiAiICQkMTsgXAorCSAgICBlbHNlIHsgcHJpbnQgImYiLCAkJDMgIi8iICQkNCwgJCQxOyB9IH0gXAorCSAgRU5EIHsgZm9yIChkIGluIGZpbGVzKSBwcmludCAiZiIsIGQsIGZpbGVzW2RdIH0nIHwgXAorCXdoaWxlIHJlYWQgdHlwZSBkaXIgZmlsZXM7IGRvIFwKKwkgICAgaWYgdGVzdCAiJCRkaXIiID0gLjsgdGhlbiBkaXI9OyBlbHNlIGRpcj0vJCRkaXI7IGZpOyBcCisJICAgIHRlc3QgLXogIiQkZmlsZXMiIHx8IHsgXAorCSAgICBlY2hvICIgJChJTlNUQUxMX1BST0dSQU1fRU5WKSAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWluc3RhbGwgJChJTlNUQUxMX1BST0dSQU0pICQkZmlsZXMgJyQoREVTVERJUikkKGJpbmRpcikkJGRpciciOyBcCisJICAgICQoSU5TVEFMTF9QUk9HUkFNX0VOVikgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1pbnN0YWxsICQoSU5TVEFMTF9QUk9HUkFNKSAkJGZpbGVzICIkKERFU1RESVIpJChiaW5kaXIpJCRkaXIiIHx8IGV4aXQgJCQ/OyBcCisJICAgIH0gXAorCTsgZG9uZQorCit1bmluc3RhbGwtYmluUFJPR1JBTVM6CisJQCQoTk9STUFMX1VOSU5TVEFMTCkKKwlAbGlzdD0nJChiaW5fUFJPR1JBTVMpJzsgdGVzdCAtbiAiJChiaW5kaXIpIiB8fCBsaXN0PTsgXAorCWZpbGVzPWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCI7IGRvbmUgfCBcCisJICBzZWQgLWUgJ2g7cyxeLiovLCw7cy8kKEVYRUVYVCkkJC8vOyQodHJhbnNmb3JtKScgXAorCSAgICAgIC1lICdzLyQkLyQoRVhFRVhUKS8nIGA7IFwKKwl0ZXN0IC1uICIkJGxpc3QiIHx8IGV4aXQgMDsgXAorCWVjaG8gIiAoIGNkICckKERFU1RESVIpJChiaW5kaXIpJyAmJiBybSAtZiIgJCRmaWxlcyAiKSI7IFwKKwljZCAiJChERVNURElSKSQoYmluZGlyKSIgJiYgcm0gLWYgJCRmaWxlcworCitjbGVhbi1iaW5QUk9HUkFNUzoKKwlAbGlzdD0nJChiaW5fUFJPR1JBTVMpJzsgdGVzdCAtbiAiJCRsaXN0IiB8fCBleGl0IDA7IFwKKwllY2hvICIgcm0gLWYiICQkbGlzdDsgXAorCXJtIC1mICQkbGlzdCB8fCBleGl0ICQkPzsgXAorCXRlc3QgLW4gIiQoRVhFRVhUKSIgfHwgZXhpdCAwOyBcCisJbGlzdD1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAiOyBkb25lIHwgc2VkICdzLyQoRVhFRVhUKSQkLy8nYDsgXAorCWVjaG8gIiBybSAtZiIgJCRsaXN0OyBcCisJcm0gLWYgJCRsaXN0CitvcGFubm90YXRlJChFWEVFWFQpOiAkKG9wYW5ub3RhdGVfT0JKRUNUUykgJChvcGFubm90YXRlX0RFUEVOREVOQ0lFUykgCisJQHJtIC1mIG9wYW5ub3RhdGUkKEVYRUVYVCkKKwkkKENYWExJTkspICQob3Bhbm5vdGF0ZV9PQkpFQ1RTKSAkKG9wYW5ub3RhdGVfTERBREQpICQoTElCUykKK29wYXJjaGl2ZSQoRVhFRVhUKTogJChvcGFyY2hpdmVfT0JKRUNUUykgJChvcGFyY2hpdmVfREVQRU5ERU5DSUVTKSAKKwlAcm0gLWYgb3BhcmNoaXZlJChFWEVFWFQpCisJJChDWFhMSU5LKSAkKG9wYXJjaGl2ZV9PQkpFQ1RTKSAkKG9wYXJjaGl2ZV9MREFERCkgJChMSUJTKQorb3BncHJvZiQoRVhFRVhUKTogJChvcGdwcm9mX09CSkVDVFMpICQob3BncHJvZl9ERVBFTkRFTkNJRVMpIAorCUBybSAtZiBvcGdwcm9mJChFWEVFWFQpCisJJChDWFhMSU5LKSAkKG9wZ3Byb2ZfT0JKRUNUUykgJChvcGdwcm9mX0xEQUREKSAkKExJQlMpCitvcHJlcG9ydCQoRVhFRVhUKTogJChvcHJlcG9ydF9PQkpFQ1RTKSAkKG9wcmVwb3J0X0RFUEVOREVOQ0lFUykgCisJQHJtIC1mIG9wcmVwb3J0JChFWEVFWFQpCisJJChDWFhMSU5LKSAkKG9wcmVwb3J0X09CSkVDVFMpICQob3ByZXBvcnRfTERBREQpICQoTElCUykKKworbW9zdGx5Y2xlYW4tY29tcGlsZToKKwktcm0gLWYgKi4kKE9CSkVYVCkKKworZGlzdGNsZWFuLWNvbXBpbGU6CisJLXJtIC1mICoudGFiLmMKKworQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2NvbW1vbl9vcHRpb24uUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL29wYW5ub3RhdGUuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL29wYW5ub3RhdGVfb3B0aW9ucy5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvb3BhcmNoaXZlLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9vcGFyY2hpdmVfb3B0aW9ucy5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvb3BncHJvZi5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvb3BncHJvZl9vcHRpb25zLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9vcHJlcG9ydC5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvb3ByZXBvcnRfb3B0aW9ucy5Qb0BhbV9fcXVvdGVACisKKy5jcHAubzoKK0BhbV9fZmFzdGRlcENYWF9UUlVFQAkkKENYWENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJCouVHBvIC1jIC1vICRAICQ8CitAYW1fX2Zhc3RkZXBDWFhfVFJVRUAJJChhbV9fbXYpICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ1hYREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACSQoQ1hYQ09NUElMRSkgLWMgLW8gJEAgJDwKKworLmNwcC5vYmo6CitAYW1fX2Zhc3RkZXBDWFhfVFJVRUAJJChDWFhDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgCitAYW1fX2Zhc3RkZXBDWFhfVFJVRUAJJChhbV9fbXYpICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ1hYREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACSQoQ1hYQ09NUElMRSkgLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYAorCisuY3BwLmxvOgorQGFtX19mYXN0ZGVwQ1hYX1RSVUVACSQoTFRDWFhDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCAkPAorQGFtX19mYXN0ZGVwQ1hYX1RSVUVACSQoYW1fX212KSAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENYWF9GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ1hYREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACSQoTFRDWFhDT01QSUxFKSAtYyAtbyAkQCAkPAorCittb3N0bHljbGVhbi1saWJ0b29sOgorCS1ybSAtZiAqLmxvCisKK2NsZWFuLWxpYnRvb2w6CisJLXJtIC1yZiAubGlicyBfbGlicworCitJRDogJChIRUFERVJTKSAkKFNPVVJDRVMpICQoTElTUCkgJChUQUdTX0ZJTEVTKQorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorCW1raWQgLWZJRCAkJHVuaXF1ZQordGFnczogVEFHUworCitUQUdTOiAgJChIRUFERVJTKSAkKFNPVVJDRVMpICAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCisJCSQoVEFHU19GSUxFUykgJChMSVNQKQorCXNldCB4OyBcCisJaGVyZT1gcHdkYDsgXAorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKwkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKwlzaGlmdDsgXAorCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJCokJHVuaXF1ZSI7IHRoZW4gOjsgZWxzZSBcCisJICB0ZXN0IC1uICIkJHVuaXF1ZSIgfHwgdW5pcXVlPSQkZW1wdHlfZml4OyBcCisJICBpZiB0ZXN0ICQkIyAtZ3QgMDsgdGhlbiBcCisJICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKwkgICAgICAiJCRAIiAkJHVuaXF1ZTsgXAorCSAgZWxzZSBcCisJICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKwkgICAgICAkJHVuaXF1ZTsgXAorCSAgZmk7IFwKKwlmaQorY3RhZ3M6IENUQUdTCitDVEFHUzogICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAorCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCisJICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCisJdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdW5pcXVlIiBcCisJICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCisJICAgICAkJHVuaXF1ZQorCitHVEFHUzoKKwloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAorCSAgJiYgJChhbV9fY2QpICQodG9wX3NyY2RpcikgXAorCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAiJCRoZXJlIgorCitkaXN0Y2xlYW4tdGFnczoKKwktcm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncworCitkaXN0ZGlyOiAkKERJU1RGSUxFUykKKwlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisJdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCWxpc3Q9JyQoRElTVEZJTEVTKSc7IFwKKwkgIGRpc3RfZmlsZXM9YGZvciBmaWxlIGluICQkbGlzdDsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBcCisJICBzZWQgLWUgInN8XiQkc3JjZGlyc3RyaXAvfHw7dCIgXAorCSAgICAgIC1lICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfDt0ImA7IFwKKwljYXNlICQkZGlzdF9maWxlcyBpbiBcCisJICAqLyopICQoTUtESVJfUCkgYGVjaG8gIiQkZGlzdF9maWxlcyIgfCBcCisJCQkgICBzZWQgJy9cLy8hZDtzfF58JChkaXN0ZGlyKS98O3MsL1teL10qJCQsLCcgfCBcCisJCQkgICBzb3J0IC11YCA7OyBcCisJZXNhYzsgXAorCWZvciBmaWxlIGluICQkZGlzdF9maWxlczsgZG8gXAorCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAorCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKKwkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKKwkgICAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJGZpbGUiOyB0aGVuIFwKKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKwkgICAgZmk7IFwKKwkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCisJICAgICAgY3AgLWZwUiAkKHNyY2RpcikvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAorCSAgICBmaTsgXAorCSAgICBjcCAtZnBSICQkZC8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCisJICBlbHNlIFwKKwkgICAgdGVzdCAtZiAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKKwkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKKwkgICAgfHwgZXhpdCAxOyBcCisJICBmaTsgXAorCWRvbmUKK2NoZWNrLWFtOiBhbGwtYW0KK2NoZWNrOiBjaGVjay1hbQorYWxsLWFtOiBNYWtlZmlsZSAkKFBST0dSQU1TKQoraW5zdGFsbGRpcnM6CisJZm9yIGRpciBpbiAiJChERVNURElSKSQoYmluZGlyKSI7IGRvIFwKKwkgIHRlc3QgLXogIiQkZGlyIiB8fCAkKE1LRElSX1ApICIkJGRpciI7IFwKKwlkb25lCitpbnN0YWxsOiBpbnN0YWxsLWFtCitpbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1hbQoraW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtYW0KK3VuaW5zdGFsbDogdW5pbnN0YWxsLWFtCisKK2luc3RhbGwtYW06IGFsbC1hbQorCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCisKK2luc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLWFtCitpbnN0YWxsLXN0cmlwOgorCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisJICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKKwkgIGB0ZXN0IC16ICckKFNUUklQKScgfHwgXAorCSAgICBlY2hvICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknImAgaW5zdGFsbAorbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKKworY2xlYW4tZ2VuZXJpYzoKKworZGlzdGNsZWFuLWdlbmVyaWM6CisJLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCisJLXRlc3QgLiA9ICIkKHNyY2RpcikiIHx8IHRlc3QgLXogIiQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpCisKK21haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKKwlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCisJQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgorY2xlYW46IGNsZWFuLWFtCisKK2NsZWFuLWFtOiBjbGVhbi1iaW5QUk9HUkFNUyBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgbW9zdGx5Y2xlYW4tYW0KKworZGlzdGNsZWFuOiBkaXN0Y2xlYW4tYW0KKwktcm0gLXJmIC4vJChERVBESVIpCisJLXJtIC1mIE1ha2VmaWxlCitkaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKKwlkaXN0Y2xlYW4tdGFncworCitkdmk6IGR2aS1hbQorCitkdmktYW06CisKK2h0bWw6IGh0bWwtYW0KKworaHRtbC1hbToKKworaW5mbzogaW5mby1hbQorCitpbmZvLWFtOgorCitpbnN0YWxsLWRhdGEtYW06CisKK2luc3RhbGwtZHZpOiBpbnN0YWxsLWR2aS1hbQorCitpbnN0YWxsLWR2aS1hbToKKworaW5zdGFsbC1leGVjLWFtOiBpbnN0YWxsLWJpblBST0dSQU1TCisKK2luc3RhbGwtaHRtbDogaW5zdGFsbC1odG1sLWFtCisKK2luc3RhbGwtaHRtbC1hbToKKworaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KKworaW5zdGFsbC1pbmZvLWFtOgorCitpbnN0YWxsLW1hbjoKKworaW5zdGFsbC1wZGY6IGluc3RhbGwtcGRmLWFtCisKK2luc3RhbGwtcGRmLWFtOgorCitpbnN0YWxsLXBzOiBpbnN0YWxsLXBzLWFtCisKK2luc3RhbGwtcHMtYW06CisKK2luc3RhbGxjaGVjay1hbToKKworbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1hbQorCS1ybSAtcmYgLi8kKERFUERJUikKKwktcm0gLWYgTWFrZWZpbGUKK21haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKKworbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLWFtCisKK21vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgXAorCW1vc3RseWNsZWFuLWxpYnRvb2wKKworcGRmOiBwZGYtYW0KKworcGRmLWFtOgorCitwczogcHMtYW0KKworcHMtYW06CisKK3VuaW5zdGFsbC1hbTogdW5pbnN0YWxsLWJpblBST0dSQU1TCisKKy5NQUtFOiBpbnN0YWxsLWFtIGluc3RhbGwtc3RyaXAKKworLlBIT05ZOiBDVEFHUyBHVEFHUyBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWJpblBST0dSQU1TIFwKKwljbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgY3RhZ3MgZGlzdGNsZWFuIGRpc3RjbGVhbi1jb21waWxlIFwKKwlkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4tbGlidG9vbCBkaXN0Y2xlYW4tdGFncyBkaXN0ZGlyIGR2aSBcCisJZHZpLWFtIGh0bWwgaHRtbC1hbSBpbmZvIGluZm8tYW0gaW5zdGFsbCBpbnN0YWxsLWFtIFwKKwlpbnN0YWxsLWJpblBST0dSQU1TIGluc3RhbGwtZGF0YSBpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgXAorCWluc3RhbGwtZHZpLWFtIGluc3RhbGwtZXhlYyBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1odG1sIFwKKwlpbnN0YWxsLWh0bWwtYW0gaW5zdGFsbC1pbmZvIGluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBcCisJaW5zdGFsbC1wZGYgaW5zdGFsbC1wZGYtYW0gaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIFwKKwlpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgXAorCW1haW50YWluZXItY2xlYW4gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIFwKKwltb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBcCisJcGRmIHBkZi1hbSBwcyBwcy1hbSB0YWdzIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0gXAorCXVuaW5zdGFsbC1iaW5QUk9HUkFNUworCisKKyMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCisjIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KKy5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L3BwL2NvbW1vbl9vcHRpb24uY3BwIGIvb3Byb2ZpbGUtMC45LjcvcHAvY29tbW9uX29wdGlvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTllMGU5NgotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L3BwL2NvbW1vbl9vcHRpb24uY3BwCkBAIC0wLDAgKzEsMjkyIEBACisvKioKKyAqIEBmaWxlIGNvbW1vbl9vcHRpb24uY3BwCisgKiBDb250YWlucyBjb21tb24gb3B0aW9ucyBhbmQgaW1wbGVtZW50YXRpb24gb2YgZW50cnkgcG9pbnQgb2YgcHAgdG9vbHMKKyAqIGFuZCBzb21lIG1pc2NlbGxlYW5lb3VzIGZ1bmN0aW9ucworICoKKyAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDMgT1Byb2ZpbGUgYXV0aG9ycworICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKKyAqCisgKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKKyAqLworCisjaW5jbHVkZSA8Y3N0ZGxpYj4KKworI2luY2x1ZGUgPGlvc3RyZWFtPgorI2luY2x1ZGUgPHNzdHJlYW0+CisjaW5jbHVkZSA8aXRlcmF0b3I+CisjaW5jbHVkZSA8Y3N0ZGxpYj4KKworI2luY2x1ZGUgIm9wX2NvbmZpZy5oIgorI2luY2x1ZGUgImxvY2F0ZV9pbWFnZXMuaCIKKyNpbmNsdWRlICJvcF9leGNlcHRpb24uaCIKKyNpbmNsdWRlICJwb3B0X29wdGlvbnMuaCIKKyNpbmNsdWRlICJjdmVyYi5oIgorI2luY2x1ZGUgImNvbW1vbl9vcHRpb24uaCIKKyNpbmNsdWRlICJmaWxlX21hbmlwLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisKK25hbWVzcGFjZSBvcHRpb25zIHsKKwlkb3VibGUgdGhyZXNob2xkID0gMC4wOworCXN0cmluZyB0aHJlc2hvbGRfb3B0OworCXN0cmluZyBzZXNzaW9uX2RpciA9IE9QX1NFU1NJT05fRElSX0RFRkFVTFQ7CisJc3RyaW5nIGNvbW1hbmRfb3B0aW9uczsKKwl2ZWN0b3I8c3RyaW5nPiBpbWFnZV9wYXRoOworCXN0cmluZyByb290X3BhdGg7Cit9CisKK25hbWVzcGFjZSB7CisKK3ZlY3RvcjxzdHJpbmc+IHZlcmJvc2Vfc3RyaW5nczsKKworcG9wdDo6b3B0aW9uIGNvbW1vbl9vcHRpb25zX2FycmF5W10gPSB7CisJcG9wdDo6b3B0aW9uKHZlcmJvc2Vfc3RyaW5ncywgInZlcmJvc2UiLCAnVicsCisJCSAgICAgLy8gRklYTUUgaGVscCBzdHJpbmcgZm9yIHZlcmJvc2UgbGV2ZWwKKwkJICAgICAidmVyYm9zZSBvdXRwdXQiLCAiYWxsLGRlYnVnLGJmZCxsZXZlbDEsc2ZpbGUsc3RhdHMseG1sIiksCisJcG9wdDo6b3B0aW9uKG9wdGlvbnM6OnNlc3Npb25fZGlyLCAic2Vzc2lvbi1kaXIiLCAnXDAnLAorCQkgICAgICJzcGVjaWZ5IHNlc3Npb24gcGF0aCB0byBob2xkIHNhbXBsZXMgZGF0YWJhc2UgYW5kIHNlc3Npb24gZGF0YSAoIiBPUF9TRVNTSU9OX0RJUl9ERUZBVUxUICIpIiwgInBhdGgiKSwKKwlwb3B0OjpvcHRpb24ob3B0aW9uczo6aW1hZ2VfcGF0aCwgImltYWdlLXBhdGgiLCAncCcsCisJCSAgICAgImNvbW1hLXNlcGFyYXRlZCBwYXRoIHRvIHNlYXJjaCBtaXNzaW5nIGJpbmFyaWVzIiwgInBhdGgiKSwKKwlwb3B0OjpvcHRpb24ob3B0aW9uczo6cm9vdF9wYXRoLCAicm9vdCIsICdSJywKKwkJICAgICAicGF0aCB0byBmaWxlc3lzdGVtIHRvIHNlYXJjaCBmb3IgbWlzc2luZyBiaW5hcmllcyIsICJwYXRoIiksCit9OworCisKK2RvdWJsZSBoYW5kbGVfdGhyZXNob2xkKHN0cmluZyB0aHJlc2hvbGQpCit7CisJZG91YmxlIHZhbHVlID0gMC4wOworCisJaWYgKHRocmVzaG9sZC5sZW5ndGgoKSkgeworCQlpc3RyaW5nc3RyZWFtIHNzKHRocmVzaG9sZCk7CisJCWlmICghKHNzID4+IHZhbHVlKSkgeworCQkJY2VyciA8PCAiaWxsZWdhbCB0aHJlc2hvbGQgdmFsdWU6ICIgPDwgdGhyZXNob2xkCisJCQkgICAgIDw8ICIgYWxsb3dlZCByYW5nZTogWzAtMTAwXSIgPDwgZW5kbDsKKwkJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwkJfQorCisJCWlmICh2YWx1ZSA8IDAuMCB8fCB2YWx1ZSA+IDEwMC4wKSB7CisJCQljZXJyIDw8ICJpbGxlZ2FsIHRocmVzaG9sZCB2YWx1ZTogIiA8PCB0aHJlc2hvbGQKKwkJCSAgICAgPDwgIiBhbGxvd2VkIHJhbmdlOiBbMC0xMDBdIiA8PCBlbmRsOworCQkJZXhpdChFWElUX0ZBSUxVUkUpOworCQl9CisJfQorCisJY3ZlcmIgPDwgdmRlYnVnIDw8ICJ0aHJlc2hvbGQ6ICIgPDwgdmFsdWUgPDwgZW5kbDs7CisKKwlyZXR1cm4gdmFsdWU7Cit9CisKKwordmVjdG9yPHN0cmluZz4gcHJlX3BhcnNlX3NwZWModmVjdG9yPHN0cmluZz4gY29uc3QgJiBub25fb3B0aW9ucykKK3sKKwl2ZWN0b3I8c3RyaW5nPiByZXN1bHQ7CisKKwlmb3IgKHNpemVfdCBpID0gMDsgaSA8IG5vbl9vcHRpb25zLnNpemUoKTsgKytpKSB7CisJCWlmIChub25fb3B0aW9uc1tpXSA9PSAie30iKSB7CisJCQlyZXN1bHQucHVzaF9iYWNrKCJ7Iik7CisJCQlyZXN1bHQucHVzaF9iYWNrKCJ9Iik7CisJCX0gZWxzZSB7CisJCQlyZXN1bHQucHVzaF9iYWNrKG5vbl9vcHRpb25zW2ldKTsKKwkJfQorCX0KKworCXJldHVybiByZXN1bHQ7Cit9CisKKworb3B0aW9uczo6c3BlYyBjb25zdCBwYXJzZV9zcGVjKHZlY3RvcjxzdHJpbmc+IG5vbl9vcHRpb25zKQoreworCWJvb2wgaW5fZmlyc3QgPSBmYWxzZTsKKwlib29sIGluX3NlY29uZCA9IGZhbHNlOworCWJvb2wgZmlyc3QgPSBmYWxzZTsKKwlib29sIHNlY29uZCA9IGZhbHNlOworCW9wdGlvbnM6OnNwZWMgcHNwZWM7CisKKwlub25fb3B0aW9ucyA9IHByZV9wYXJzZV9zcGVjKG5vbl9vcHRpb25zKTsKKworCXZlY3RvcjxzdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG5vbl9vcHRpb25zLmJlZ2luKCk7CisJdmVjdG9yPHN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG5vbl9vcHRpb25zLmVuZCgpOworCisJZm9yICg7IGl0ICE9IGVuZDsgKytpdCkgeworCQlpZiAoKml0ID09ICJ7IikgeworCQkJaWYgKGluX2ZpcnN0IHx8IGluX3NlY29uZCB8fCBzZWNvbmQpCisJCQkJZ290byBmYWlsOworCQkJaWYgKGZpcnN0KSB7CisJCQkJaW5fc2Vjb25kID0gdHJ1ZTsKKwkJCQlzZWNvbmQgPSB0cnVlOworCQkJfSBlbHNlIHsKKwkJCQlpbl9maXJzdCA9IHRydWU7CisJCQkJZmlyc3QgPSB0cnVlOworCQkJfQorCQkJY29udGludWU7CisJCX0gCisKKwkJaWYgKCppdCA9PSAifSIpIHsKKwkJCWlmIChpbl9maXJzdCkgeworCQkJCWluX2ZpcnN0ID0gZmFsc2U7CisJCQl9IGVsc2UgaWYgKGluX3NlY29uZCkgeworCQkJCWluX3NlY29uZCA9IGZhbHNlOworCQkJfSBlbHNlIHsKKwkJCQlnb3RvIGZhaWw7CisJCQl9CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChpbl9maXJzdCkgeworCQkJcHNwZWMuZmlyc3QucHVzaF9iYWNrKCppdCk7CisJCX0gZWxzZSBpZiAoaW5fc2Vjb25kKSB7CisJCQlwc3BlYy5zZWNvbmQucHVzaF9iYWNrKCppdCk7CisJCX0gZWxzZSB7CisJCQlwc3BlYy5jb21tb24ucHVzaF9iYWNrKCppdCk7CisJCX0KKwl9CisKKwlpZiAoaW5fZmlyc3QgfHwgaW5fc2Vjb25kIHx8IChmaXJzdCAmJiAhc2Vjb25kKSkKKwkJZ290byBmYWlsOworCisJaWYgKHBzcGVjLmZpcnN0LmVtcHR5KCkgJiYgcHNwZWMuc2Vjb25kLnNpemUoKSkKKwkJZ290byBmYWlsOworCisJaWYgKGZpcnN0ICYmIHNlY29uZCkgeworCQlwc3BlYy5maXJzdC5pbnNlcnQocHNwZWMuZmlyc3QuYmVnaW4oKSwgcHNwZWMuY29tbW9uLmJlZ2luKCksCisJCSAgICAgICAgICAgICAgICAgICBwc3BlYy5jb21tb24uZW5kKCkpOworCQlwc3BlYy5zZWNvbmQuaW5zZXJ0KHBzcGVjLnNlY29uZC5iZWdpbigpLCBwc3BlYy5jb21tb24uYmVnaW4oKSwKKwkJICAgICAgICAgICAgICAgICAgIHBzcGVjLmNvbW1vbi5lbmQoKSk7CisJfQorCisJcmV0dXJuIHBzcGVjOworZmFpbDoKKwljZXJyIDw8ICJpbnZhbGlkIHByb2ZpbGUgc3BlY2lmaWNhdGlvbiAiOworCWNvcHkobm9uX29wdGlvbnMuYmVnaW4oKSwgbm9uX29wdGlvbnMuZW5kKCksCisJICAgICBvc3RyZWFtX2l0ZXJhdG9yPHN0cmluZz4oY2VyciwgIiAiKSk7CisJY2VyciA8PCBlbmRsOworCWV4aXQoRVhJVF9GQUlMVVJFKTsKK30KKworCitvcHRpb25zOjpzcGVjIGdldF9vcHRpb25zKGludCBhcmdjLCBjaGFyIGNvbnN0ICogYXJndltdKQoreworCXZlY3RvcjxzdHJpbmc+IG5vbl9vcHRpb25zOworCXBvcHQ6OnBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgbm9uX29wdGlvbnMpOworCisJLy8gaW5pdGlhbGl6ZSBwYXRocyBpbiBvcF9jb25maWcuaAorCWluaXRfb3BfY29uZmlnX2RpcnMob3B0aW9uczo6c2Vzc2lvbl9kaXIuY19zdHIoKSk7CisKKwlpZiAoIW9wdGlvbnM6OnRocmVzaG9sZF9vcHQuZW1wdHkoKSkKKwkJb3B0aW9uczo6dGhyZXNob2xkID0gaGFuZGxlX3RocmVzaG9sZChvcHRpb25zOjp0aHJlc2hvbGRfb3B0KTsKKworCWlmICghdmVyYm9zZTo6c2V0dXAodmVyYm9zZV9zdHJpbmdzKSkgeworCQljZXJyIDw8ICJ1bmtub3duIC0tdmVyYm9zZT0gb3B0aW9uc1xuIjsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKworCS8vIFhNTCBnZW5lcmF0b3IgbmVlZHMgY29tbWFuZCBsaW5lIG9wdGlvbnMgZm9yIGl0cyBoZWFkZXIKKwlvc3RyaW5nc3RyZWFtIHN0cjsKKwlmb3IgKGludCBpID0gMTsgaSA8IGFyZ2M7ICsraSkKKwkJc3RyIDw8IGFyZ3ZbaV0gPDwgIiAiOworCW9wdGlvbnM6OmNvbW1hbmRfb3B0aW9ucyA9IHN0ci5zdHIoKTsKKworCXJldHVybiBwYXJzZV9zcGVjKG5vbl9vcHRpb25zKTsKK30KKworfSAgLy8gYW5vbiBuYW1lc3BhY2UKKworCitpbnQgcnVuX3BwX3Rvb2woaW50IGFyZ2MsIGNoYXIgY29uc3QgKiBhcmd2W10sIHBwX2ZjdF9ydW5fdCBmY3QpCit7CisJdHJ5IHsKKwkJcmV0dXJuIGZjdChnZXRfb3B0aW9ucyhhcmdjLCBhcmd2KSk7CisJfQorCWNhdGNoIChvcF9ydW50aW1lX2Vycm9yIGNvbnN0ICYgZSkgeworCQljZXJyIDw8IGFyZ3ZbMF0gPDwgIiBlcnJvcjogIiA8PCBlLndoYXQoKSA8PCBlbmRsOworCX0KKwljYXRjaCAob3BfZmF0YWxfZXJyb3IgY29uc3QgJiBlKSB7CisJCWNlcnIgPDwgYXJndlswXSA8PCAiIGVycm9yOiAiIDw8IGUud2hhdCgpIDw8IGVuZGw7CisJfQorCWNhdGNoIChvcF9leGNlcHRpb24gY29uc3QgJiBlKSB7CisJCWNlcnIgPDwgYXJndlswXSA8PCAiIGVycm9yOiAiIDw8IGUud2hhdCgpIDw8IGVuZGw7CisJfQorCWNhdGNoIChpbnZhbGlkX2FyZ3VtZW50IGNvbnN0ICYgZSkgeworCQljZXJyIDw8IGFyZ3ZbMF0gPDwgIiBlcnJvcjogIiA8PCBlLndoYXQoKSA8PCBlbmRsOworCX0KKwljYXRjaCAoZXhjZXB0aW9uIGNvbnN0ICYgZSkgeworCQljZXJyIDw8IGFyZ3ZbMF0gPDwgIiBlcnJvcjogIiA8PCBlLndoYXQoKSA8PCBlbmRsOworCX0KKwljYXRjaCAoLi4uKSB7CisJCWNlcnIgPDwgYXJndlswXSA8PCAiIHVua25vd24gZXhjZXB0aW9uIiA8PCBlbmRsOworCX0KKworCXJldHVybiBFWElUX0ZBSUxVUkU7Cit9CisKKworZGVtYW5nbGVfdHlwZSBoYW5kbGVfZGVtYW5nbGVfb3B0aW9uKHN0cmluZyBjb25zdCAmIG9wdGlvbikKK3sKKwlpZiAob3B0aW9uID09ICJub25lIikKKwkJcmV0dXJuIGRtdF9ub25lOworCWlmIChvcHRpb24gPT0gInNtYXJ0IikKKwkJcmV0dXJuIGRtdF9zbWFydDsKKwlpZiAob3B0aW9uID09ICJub3JtYWwiKQorCQlyZXR1cm4gZG10X25vcm1hbDsKKworCXRocm93IG9wX3J1bnRpbWVfZXJyb3IoImludmFsaWQgb3B0aW9uIC0tZGVtYW5nbGU9IiArIG9wdGlvbik7Cit9CisKKworbWVyZ2Vfb3B0aW9uIGhhbmRsZV9tZXJnZV9vcHRpb24odmVjdG9yPHN0cmluZz4gY29uc3QgJiBtZXJnZXNwZWMsCisgICAgYm9vbCBhbGxvd19saWIsIGJvb2wgZXhjbHVkZV9kZXBlbmRlbnQpCit7CisJdXNpbmcgbmFtZXNwYWNlIG9wdGlvbnM7CisJbWVyZ2Vfb3B0aW9uIG1lcmdlX2J5OworCisJbWVyZ2VfYnkuY3B1ID0gZmFsc2U7CisJbWVyZ2VfYnkubGliID0gZmFsc2U7CisJbWVyZ2VfYnkudGlkID0gZmFsc2U7CisJbWVyZ2VfYnkudGdpZCA9IGZhbHNlOworCW1lcmdlX2J5LnVuaXRtYXNrID0gZmFsc2U7CisKKwlpZiAoIWFsbG93X2xpYikKKwkJbWVyZ2VfYnkubGliID0gdHJ1ZTsKKworCWJvb2wgaXNfYWxsID0gZmFsc2U7CisKKwl2ZWN0b3I8c3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgY2l0ID0gbWVyZ2VzcGVjLmJlZ2luKCk7CisJdmVjdG9yPHN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1lcmdlc3BlYy5lbmQoKTsKKworCWZvciAoOyBjaXQgIT0gZW5kOyArK2NpdCkgeworCQlpZiAoKmNpdCA9PSAiY3B1IikgeworCQkJbWVyZ2VfYnkuY3B1ID0gdHJ1ZTsKKwkJfSBlbHNlIGlmICgqY2l0ID09ICJ0aWQiKSB7CisJCQltZXJnZV9ieS50aWQgPSB0cnVlOworCQl9IGVsc2UgaWYgKCpjaXQgPT0gInRnaWQiKSB7CisJCQkvLyBQUDo1LjIxIHRnaWQgbWVyZ2UgaW1wbHkgdGlkIG1lcmdpbmcuCisJCQltZXJnZV9ieS50Z2lkID0gdHJ1ZTsKKwkJCW1lcmdlX2J5LnRpZCA9IHRydWU7CisJCX0gZWxzZSBpZiAoKCpjaXQgPT0gImxpYiIgfHwgKmNpdCA9PSAibGlicmFyeSIpICYmIGFsbG93X2xpYikgeworCQkJbWVyZ2VfYnkubGliID0gdHJ1ZTsKKwkJfSBlbHNlIGlmICgqY2l0ID09ICJ1bml0bWFzayIpIHsKKwkJCW1lcmdlX2J5LnVuaXRtYXNrID0gdHJ1ZTsKKwkJfSBlbHNlIGlmICgqY2l0ID09ICJhbGwiKSB7CisJCQltZXJnZV9ieS5jcHUgPSB0cnVlOworCQkJbWVyZ2VfYnkubGliID0gdHJ1ZTsKKwkJCW1lcmdlX2J5LnRpZCA9IHRydWU7CisJCQltZXJnZV9ieS50Z2lkID0gdHJ1ZTsKKwkJCW1lcmdlX2J5LnVuaXRtYXNrID0gdHJ1ZTsKKwkJCWlzX2FsbCA9IHRydWU7CisJCX0gZWxzZSB7CisJCQljZXJyIDw8ICJ1bmtub3duIG1lcmdlIG9wdGlvbjogIiA8PCAqY2l0IDw8IGVuZGw7CisJCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJCX0KKwl9CisKKwkvLyBpZiAtLW1lcmdlIGFsbCwgZG9uJ3Qgd2FybiBhYm91dCBsaWIgbWVyZ2luZywKKwkvLyBpdCdzIG5vdCB1c2VyIGZyaWVuZGx5LiBCZWhhdmlvdXIgc2hvdWxkIHN0aWxsCisJLy8gYmUgY29ycmVjdC4KKwlpZiAoZXhjbHVkZV9kZXBlbmRlbnQgJiYgbWVyZ2VfYnkubGliICYmIGFsbG93X2xpYiAmJiAhaXNfYWxsKSB7CisJCWNlcnIgPDwgIi0tbWVyZ2U9bGliIGlzIG1lYW5pbmdsZXNzICIKKwkJICAgICA8PCAid2l0aCAtLWV4Y2x1ZGUtZGVwZW5kZW50IiA8PCBlbmRsOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorCisJcmV0dXJuIG1lcmdlX2J5OworfQpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvcHAvY29tbW9uX29wdGlvbi5oIGIvb3Byb2ZpbGUtMC45LjcvcHAvY29tbW9uX29wdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1NGVmN2MKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9wcC9jb21tb25fb3B0aW9uLmgKQEAgLTAsMCArMSw3MiBAQAorLyoqCisgKiBAZmlsZSBjb21tb25fb3B0aW9uLmgKKyAqIERlY2xhcmF0aW9uIG9mIGVudHJ5IHBvaW50IG9mIHBwIHRvb2xzLCBpbXBsZW1lbnRhdGlvbiBmaWxlIGFkZCBjb21tb24KKyAqIG9wdGlvbnMgb2YgcHAgdG9vbHMgYW5kIHNvbWUgbWlzY2VsbGVhbmVvdXMgZnVuY3Rpb25zCisgKgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMyBPUHJvZmlsZSBhdXRob3JzCisgKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORworICoKKyAqIEBhdXRob3IgSm9obiBMZXZvbgorICogQGF1dGhvciBQaGlsaXBwZSBFbGllCisgKi8KKworI2lmbmRlZiBDT01NT05fT1BUSU9OX0gKKyNkZWZpbmUgQ09NTU9OX09QVElPTl9ICisKKyNpbmNsdWRlIDx2ZWN0b3I+CisjaW5jbHVkZSA8bGlzdD4KKworI2luY2x1ZGUgImFycmFuZ2VfcHJvZmlsZXMuaCIKKyNpbmNsdWRlICJkZW1hbmdsZV9zeW1ib2wuaCIKKworbmFtZXNwYWNlIG9wdGlvbnMgeworCWV4dGVybiBib29sIHZlcmJvc2U7CisJZXh0ZXJuIGRvdWJsZSB0aHJlc2hvbGQ7CisJZXh0ZXJuIHN0ZDo6c3RyaW5nIHRocmVzaG9sZF9vcHQ7CisJZXh0ZXJuIHN0ZDo6c3RyaW5nIGNvbW1hbmRfb3B0aW9uczsKKwlleHRlcm4gc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGltYWdlX3BhdGg7CisJZXh0ZXJuIHN0ZDo6c3RyaW5nIHJvb3RfcGF0aDsKKworCXN0cnVjdCBzcGVjIHsKKwkJc3RkOjpsaXN0PHN0ZDo6c3RyaW5nPiBjb21tb247CisJCXN0ZDo6bGlzdDxzdGQ6OnN0cmluZz4gZmlyc3Q7CisJCXN0ZDo6bGlzdDxzdGQ6OnN0cmluZz4gc2Vjb25kOworCX07Cit9CisKKy8qKgorICogcHJvdG90eXBlIG9mIGEgcHAgdG9vbCBlbnRyeSBwb2ludC4gVGhpcyBlbnRyeSBwb2ludCBpcyBjYWxsZWQKKyAqIGJ5IHJ1bl9wcF90b29sCisgKi8KK3R5cGVkZWYgaW50ICgqcHBfZmN0X3J1bl90KShvcHRpb25zOjpzcGVjIGNvbnN0ICYgc3BlYyk7CisKKy8qKgorICogQHBhcmFtIGFyZ2MgIGNvbW1hbmQgbGluZSBudW1iZXIgb2YgYXJndW1lbnQKKyAqIEBwYXJhbSBhcmd2ICBjb21tYW5kIGxpbmUgYXJndW1lbnQgcG9pbnRlciBhcnJheQorICogQHBhcmFtIGZjdCAgZnVuY3Rpb24gdG8gcnVuIHRvIHN0YXJ0IHRoaXMgcHAgdG9vbAorICoKKyAqIFByb3ZpZGUgYSBjb21tb24gZW50cnkgdG8gYWxsIHBwIHRvb2xzLCBwYXJzaW5nIGFsbCBvcHRpb25zLCBoYW5kbGluZworICogY29tbW9uIG9wdGlvbnMgYW5kIHByb3ZpZGluZyB0aGUgbmVjZXNzYXJ5IHRyeSBjYXRjaCBjbGF1c2UKKyAqLworaW50IHJ1bl9wcF90b29sKGludCBhcmdjLCBjaGFyIGNvbnN0ICogYXJndltdLCBwcF9mY3RfcnVuX3QgZmN0KTsKKworLyoqCisgKiBAcGFyYW0gb3B0aW9uIG9uZSBvZiBbc21hcnQsbm9uZSxub3JtYWxdCisgKgorICogcmV0dXJuIHRoZSBkZW1hbmdsZV90eXBlIG9mIG9wdGlvbiBvciB0aHJvdyBhbiBleGNlcHRpb24gaWYgb3B0aW9uCisgKiBpcyBub3QgdmFsaWQuCisgKi8KK2RlbWFuZ2xlX3R5cGUgaGFuZGxlX2RlbWFuZ2xlX29wdGlvbihzdGQ6OnN0cmluZyBjb25zdCAmIG9wdGlvbik7CisKKy8qKgorICogQHBhcmFtIG1lcmdlc3BlYyAgbWVyZ2Ugb3B0aW9uCisgKiBAcGFyYW0gYWxsb3dfbGliICBpcyBtZXJnZSlsaWIgYWxsb3dlZCBpbiBtZXJnZXNwZWMKKyAqIEBwYXJhbSBleGNsdWRlX2RlcGVuZGVudCB1c2VyIHNwZWNpZmllZCAtLWV4Y2x1ZGUtZGVwZW5kZW50CisgKgorICogcGFyc2UgbWVyZ2Ugb3B0aW9uIGFuZCByZXR1cm4gYSBtZXJnZV9vcHRpb24gZmlsbGVkIGZyb20gaXQuCisgKiAKKyAqLworbWVyZ2Vfb3B0aW9uIGhhbmRsZV9tZXJnZV9vcHRpb24oc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0ICYgbWVyZ2VzcGVjLAorICAgICAgIGJvb2wgYWxsb3dfbGliLCBib29sIGV4Y2x1ZGVfZGVwZW5kZW50KTsKKworI2VuZGlmIC8qICFDT01NT05fT1BUSU9OX0ggKi8KZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L3BwL29wYW5ub3RhdGUuY3BwIGIvb3Byb2ZpbGUtMC45LjcvcHAvb3Bhbm5vdGF0ZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWMyMjRhYQotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L3BwL29wYW5ub3RhdGUuY3BwCkBAIC0wLDAgKzEsODU4IEBACisvKioKKyAqIEBmaWxlIG9wYW5ub3RhdGUuY3BwCisgKiBJbXBsZW1lbnQgb3Bhbm5vdGF0ZSB1dGlsaXR5CisgKgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMyBPUHJvZmlsZSBhdXRob3JzCisgKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORworICoKKyAqIEBhdXRob3IgSm9obiBMZXZvbgorICogQGF1dGhvciBQaGlsaXBwZSBFbGllCisgKi8KKworI2luY2x1ZGUgPGlvc3RyZWFtPgorI2luY2x1ZGUgPHNzdHJlYW0+CisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPGlvbWFuaXA+CisjaW5jbHVkZSA8ZnN0cmVhbT4KKyNpbmNsdWRlIDx1dGlsaXR5PgorCisjaW5jbHVkZSAib3BfZXhjZXB0aW9uLmgiCisjaW5jbHVkZSAib3BfaGVhZGVyLmgiCisjaW5jbHVkZSAicHJvZmlsZS5oIgorI2luY2x1ZGUgInBvcHVsYXRlLmgiCisjaW5jbHVkZSAib3Bfc2FtcGxlX2ZpbGUuaCIKKyNpbmNsdWRlICJjdmVyYi5oIgorI2luY2x1ZGUgInN0cmluZ19tYW5pcC5oIgorI2luY2x1ZGUgImRlbWFuZ2xlX3N5bWJvbC5oIgorI2luY2x1ZGUgImNoaWxkX3JlYWRlci5oIgorI2luY2x1ZGUgIm9wX2ZpbGUuaCIKKyNpbmNsdWRlICJmaWxlX21hbmlwLmgiCisjaW5jbHVkZSAiYXJyYW5nZV9wcm9maWxlcy5oIgorI2luY2x1ZGUgIm9wYW5ub3RhdGVfb3B0aW9ucy5oIgorI2luY2x1ZGUgInByb2ZpbGVfY29udGFpbmVyLmgiCisjaW5jbHVkZSAic3ltYm9sX3NvcnQuaCIKKyNpbmNsdWRlICJpbWFnZV9lcnJvcnMuaCIKKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKK3VzaW5nIG5hbWVzcGFjZSBvcHRpb25zOworCituYW1lc3BhY2UgeworCitzaXplX3QgbnJfZXZlbnRzOworCitzY29wZWRfcHRyPHByb2ZpbGVfY29udGFpbmVyPiBzYW1wbGVzOworCisvLy8gaG93IG9wYW5ub3RhdGUgd2FzIGludm9rZWQKK3N0cmluZyBjbWRsaW5lOworCisvLy8gZW1wdHkgYW5ub3RhdGlvbiBmaWxsIHN0cmluZworc3RyaW5nIGFubm90YXRpb25fZmlsbDsKKworLy8vIHN0cmluZyB1c2VkIGFzIHN0YXJ0IC8gZW5kIGNvbW1lbnQgdG8gYW5ub3RhdGUgc291cmNlCitzdHJpbmcgY29uc3QgYmVnaW5fY29tbWVudCgiLyogIik7CitzdHJpbmcgY29uc3QgaW5fY29tbWVudCgiICogIik7CitzdHJpbmcgY29uc3QgZW5kX2NvbW1lbnQoIiAqLyIpOworCisvLy8gZmllbGQgd2lkdGggZm9yIHRoZSBzYW1wbGUgY291bnQKK3Vuc2lnbmVkIGludCBjb25zdCBjb3VudF93aWR0aCA9IDY7CisKK3N0cmluZyBnZXRfYW5ub3RhdGlvbl9maWxsKCkKK3sKKwlzdHJpbmcgc3RyOworCisJZm9yIChzaXplX3QgaSA9IDA7IGkgPCBucl9ldmVudHM7ICsraSkgeworCQlzdHIgKz0gc3RyaW5nKGNvdW50X3dpZHRoLCAnICcpICsgJyAnOworCQlzdHIgKz0gc3RyaW5nKHBlcmNlbnRfd2lkdGgsICcgJyk7CisJfQorCisJZm9yIChzaXplX3QgaSA9IDE7IGkgPCBucl9ldmVudHM7ICsraSkKKwkJc3RyICs9ICIgICI7CisKKwlzdHIgKz0gIiA6IjsKKwlyZXR1cm4gc3RyOworfQorCisKK3N5bWJvbF9lbnRyeSBjb25zdCAqIGZpbmRfc3ltYm9sKHN0cmluZyBjb25zdCAmIGltYWdlX25hbWUsCisJCQkJIHN0cmluZyBjb25zdCAmIHN0cl92bWEpCit7CisJLy8gZG8gbm90IHVzZSB0aGUgYmZkIGVxdWl2YWxlbnQ6CisJLy8gIC0gaXQgZG9lcyBub3Qgc2tpcCBzcGFjZSBhdCBiZWdpbgorCS8vICAtIHdlIGRvZXMgbm90IG5lZWQgY3Jvc3MgYXJjaGl0ZWN0dXJlIGNvbXBpbGUgc28gdGhlIG5hdGl2ZQorCS8vIHN0cnRvdWxsIG11c3Qgd29yaywgYXNzdW1pbmcgdW5zaWduZWQgbG9uZyBsb25nIGNhbiBjb250YWluIGEgdm1hCisJLy8gYW5kIG9uIDMyLzY0IGJpdHMgYm94IGJmZF92bWEgaXMgNjQgYml0cworCWJmZF92bWEgdm1hID0gc3RydG91bGwoc3RyX3ZtYS5jX3N0cigpLCBOVUxMLCAxNik7CisKKwlyZXR1cm4gc2FtcGxlcy0+ZmluZF9zeW1ib2woaW1hZ2VfbmFtZSwgdm1hKTsKK30KKworCit2b2lkIG91dHB1dF9pbmZvKG9zdHJlYW0gJiBvdXQpCit7CisJb3V0IDw8IGJlZ2luX2NvbW1lbnQgPDwgJ1xuJzsKKworCW91dCA8PCBpbl9jb21tZW50IDw8ICJDb21tYW5kIGxpbmU6ICIgPDwgY21kbGluZSA8PCAnXG4nCisJICAgIDw8IGluX2NvbW1lbnQgPDwgJ1xuJzsKKworCW91dCA8PCBpbl9jb21tZW50IDw8ICJJbnRlcnByZXRhdGlvbiBvZiBjb21tYW5kIGxpbmU6IiA8PCAnXG4nOworCisJaWYgKCFhc3NlbWJseSkgeworCQlvdXQgPDwgaW5fY29tbWVudAorCQkgICAgPDwgIk91dHB1dCBhbm5vdGF0ZWQgc291cmNlIGZpbGUgd2l0aCBzYW1wbGVzIiA8PCAnXG4nOworCisJCWlmIChvcHRpb25zOjp0aHJlc2hvbGQgIT0gMCkgeworCQkJb3V0IDw8IGluX2NvbW1lbnQKKwkJCSAgICA8PCAiT3V0cHV0IGZpbGVzIHdoZXJlIHNhbXBsZXMgY291bnQgcmVhY2ggIgorCQkJICAgIDw8IG9wdGlvbnM6OnRocmVzaG9sZCA8PCAiJSBvZiB0aGUgc2FtcGxlc1xuIjsKKwkJfSBlbHNlIHsKKwkJCW91dCA8PCBpbl9jb21tZW50IDw8ICJPdXRwdXQgYWxsIGZpbGVzIiA8PCAnXG4nOworCQl9CisJfSBlbHNlIHsKKwkJb3V0IDw8IGluX2NvbW1lbnQKKwkJICAgIDw8ICJPdXRwdXQgYW5ub3RhdGVkIGFzc2VtYmx5IGxpc3Rpbmcgd2l0aCBzYW1wbGVzIgorCQkgICAgPDwgJ1xuJzsKKworCQlpZiAoIW9iamR1bXBfcGFyYW1zLmVtcHR5KCkpIHsKKwkJCW91dCA8PCBpbl9jb21tZW50IDw8ICJQYXNzaW5nIHRoZSBmb2xsb3dpbmcgIgorCQkJCSJhZGRpdGlvbmFsIGFyZ3VtZW50cyB0byBvYmpkdW1wIDsgXCIiOworCQkJZm9yIChzaXplX3QgaSA9IDAgOyBpIDwgb2JqZHVtcF9wYXJhbXMuc2l6ZSgpIDsgKytpKQorCQkJCW91dCA8PCBvYmpkdW1wX3BhcmFtc1tpXSA8PCAiICI7CisJCQlvdXQgPDwgIlwiIiA8PCAnXG4nOworCQl9CisJfQorCisJb3V0IDw8IGluX2NvbW1lbnQgPDwgJ1xuJzsKKworCW91dCA8PCBpbl9jb21tZW50IDw8IGNsYXNzZXMuY3B1aW5mbyA8PCBlbmRsOworCWlmICghY2xhc3Nlcy5ldmVudC5lbXB0eSgpKQorCQlvdXQgPDwgaW5fY29tbWVudCA8PCBjbGFzc2VzLmV2ZW50IDw8IGVuZGw7CisKKwlmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNsYXNzZXMudi5zaXplKCk7ICsraSkKKwkJb3V0IDw8IGluX2NvbW1lbnQgPDwgY2xhc3Nlcy52W2ldLmxvbmduYW1lIDw8IGVuZGw7CisKKwlvdXQgPDwgZW5kX2NvbW1lbnQgPDwgJ1xuJzsKK30KKworCitzdHJpbmcgY291bnRfc3RyKGNvdW50X2FycmF5X3QgY29uc3QgJiBjb3VudCwKKwkJICAgY291bnRfYXJyYXlfdCBjb25zdCAmIHRvdGFsKQoreworCW9zdHJpbmdzdHJlYW0gb3M7CisJZm9yIChzaXplX3QgaSA9IDA7IGkgPCBucl9ldmVudHM7ICsraSkgeworCQlvcyA8PCBzZXR3KGNvdW50X3dpZHRoKSA8PCBjb3VudFtpXSA8PCAnICc7CisKKwkJb3MgPDwgZm9ybWF0X3BlcmNlbnQob3BfcmF0aW8oY291bnRbaV0sIHRvdGFsW2ldKSAqIDEwMC4wLAorCQkJCSAgICBwZXJjZW50X2ludF93aWR0aCwgcGVyY2VudF9mcmFjdF93aWR0aCk7CisJfQorCXJldHVybiBvcy5zdHIoKTsKK30KKworCisvLy8gTk9URTogVGhpcyBmdW5jdGlvbiBhbm5vdGF0ZXMgYSBsaXN0PHN0cmluZz4gY29udGFpbmluZyBvdXRwdXQgZnJvbSBvYmpkdW1wLgorLy8vIEl0IHVzZXMgYSBsaXN0IGl0ZXJhdG9yLCBhbmQgYSBzYW1wbGVfY29udGFpbmVyIGl0ZXJhdG9yIHdoaWNoIGl0ZXJhdGVzCisvLy8gZnJvbSB0aGUgYmVnaW5uaW5nIHRvIHRoZSBlbmQsIGFuZCBjb21wYXJlIHNhbXBsZSBhZGRyZXNzCisvLy8gYWdhaW5zdCB0aGUgaW5zdHJ1Y3Rpb24gYWRkcmVzcyBvbiB0aGUgYXNtIGxpbmUuCisvLy8KKy8vLyBUaGVyZSBhcmUgMiBjYXNlcyBvZiBhbm5vdGF0aW9uOgorLy8vIDEuIElmIHNhbXBsZSBhZGRyZXNzIG1hdGNoZXMgY3VycmVudCBsaW5lIGFkZHJlc3MsIGFubm90YXRlIHRoZSBjdXJyZW50IGxpbmUuCisvLy8gMi4gSWYgKHByZXZpb3VzIGxpbmUgYWRkcmVzcyA8IHNhbXBsZSBhZGRyZXNzIDwgY3VycmVudCBsaW5lIGFkZHJlc3MpLAorLy8vICAgIHRoZW4gd2UgYW5ub3RhdGUgcHJldmlvdXMgbGluZS4gIFRoaXMgY2FzZSBoYXBwZW5zIHdoZW4gc2FtcGxlIGFkZHJlc3MKKy8vLyAgICBpcyBub3QgYWxpZ25lZCB3aXRoIHRoZSBpbnN0cnVjdGlvbiBhZGRyZXNzLCB3aGljaCBpcyBzZWVuIHdoZW4gcHJvZmlsZQorLy8vICAgIHVzaW5nIHRoZSBpbnN0cnVjdGlvbiBmZXRjaCBtb2RlIG9mIEFNRCBJbnN0cnVjdGlvbi1CYXNlZCBTYW1wbGluZyAoSUJTKS4KKy8vLworaW50IGFzbV9saXN0X2Fubm90YXRpb24oc3ltYm9sX2VudHJ5IGNvbnN0ICogbGFzdF9zeW1ib2wsCisJCQliZmRfdm1hIGxhc3Rfc3ltYm9sX3ZtYSwKKwkJCWxpc3Q8c3RyaW5nPjo6aXRlcmF0b3Igc2l0LAorCQkJc2FtcGxlX2NvbnRhaW5lcjo6c2FtcGxlc19pdGVyYXRvciAmIHNhbXBfaXQsCisJCQlsaXN0PHN0cmluZz4gJiBhc21fbGluZXMpCit7CisJaW50IHJldCA9IDA7CisKKwlzYW1wbGVfZW50cnkgY29uc3QgKiBzYW1wbGUgPSBOVUxMOworCisJaWYgKHNhbXBfaXQgIT0gc2FtcGxlcy0+ZW5kKCkpCisJCXNhbXBsZSA9ICZzYW1wX2l0LT5zZWNvbmQ7CisKKwkvLyBkbyBub3QgdXNlIHRoZSBiZmQgZXF1aXZhbGVudDoKKwkvLyAgLSBpdCBkb2VzIG5vdCBza2lwIHNwYWNlIGF0IGJlZ2luCisJLy8gIC0gd2UgZG9lcyBub3QgbmVlZCBjcm9zcyBhcmNoaXRlY3R1cmUgY29tcGlsZSBzbyB0aGUgbmF0aXZlCisJLy8gc3RydG91bGwgbXVzdCB3b3JrLCBhc3N1bWluZyB1bnNpZ25lZCBsb25nIGxvbmcgY2FuIGNvbnRhaW4gYSB2bWEKKwkvLyBhbmQgb24gMzIvNjQgYml0cyBib3ggYmZkX3ZtYSBpcyA2NCBiaXRzCisJLy8gZ2NjIDIuOTEuNjYgd29ya2Fyb3VuZAorCWJmZF92bWEgdm1hID0gc3RydG91bGwoKCpzaXQpLmNfc3RyKCksIE5VTEwsIDE2KTsKKworCWlmIChzYW1wbGUgCisJICAgICYmICgoc2FtcGxlLT52bWEgPCBsYXN0X3N5bWJvbF92bWEpIHx8IChzYW1wbGUtPnZtYSA+IHZtYSkpKSB7CisJCSpzaXQgPSBhbm5vdGF0aW9uX2ZpbGwgKyAqc2l0OworCX0gZWxzZSBpZiAoc2FtcGxlICYmIHNhbXBsZS0+dm1hID09IHZtYSkgeworCQkvLyBDYXNlIDEgOiBTYW1wbGUgYWRkcmVzcyBtYXRjaCBjdXJyZW50IGxpbmUgYWRkcmVzcy4KKwkJc3RyaW5nIHN0ciA9IGNvdW50X3N0cihzYW1wbGUtPmNvdW50cywgc2FtcGxlcy0+c2FtcGxlc19jb3VudCgpKTsKKworCQkvLyBGb3IgZWFjaCBldmVudHMKKwkJZm9yIChzaXplX3QgaSA9IDE7IGkgPCBucl9ldmVudHM7ICsraSkKKwkJCXN0ciArPSAiICAiOworCisJCSpzaXQgPSBzdHIgKyAiIDoiICsgKnNpdDsKKwkJaWYgKHNhbXBfaXQgIT0gc2FtcGxlcy0+ZW5kKCkpCisJCQkrK3NhbXBfaXQ7CisKKwl9IGVsc2UJaWYgKHNhbXBsZSAmJiBzYW1wbGUtPnZtYSA8IHZtYSkgeworCQkvLyBDYXNlIDIgOiB2bWEgb2YgdGhlIGN1cnJlbnQgbGluZSBpcyBncmVhdGVyIHRoYW4gdm1hIG9mIHRoZSBzYW1wbGUKKworCQkvLyBHZXQgdGhlIHN0cmluZyBvZiBwcmV2aW91cyBhc3NlbWJseSBsaW5lCisJCWxpc3Q8c3RyaW5nPjo6aXRlcmF0b3Igc2l0X3ByZXYgPSBzaXQ7CisJCXN0cmluZyBwcmV2X2xpbmUsIHByZXZfdm1hX3N0cjsKKwkJc3RyaW5nOjpzaXplX3R5cGUgbG9jMSA9IHN0cmluZzo6bnBvcywgbG9jMiA9IHN0cmluZzo6bnBvczsKKwkJd2hpbGUgKHNpdF9wcmV2ICE9IGFzbV9saW5lcy5iZWdpbigpKSB7CisJCQktLXNpdF9wcmV2OworCQkJcHJldl9saW5lID0gKnNpdF9wcmV2OworCisJCQlsb2MxID0gcHJldl9saW5lLmZpbmQoIjoiLCAwKTsKKwkJCWlmIChsb2MxICE9IHN0cmluZzo6bnBvcykgeworCQkJCWxvYzIgPSBwcmV2X2xpbmUuZmluZCgiOiIsIGxvYzErMSk7CisJCQkJaWYgKGxvYzIgIT0gc3RyaW5nOjpucG9zKSB7CisJCQkJCXByZXZfdm1hX3N0ciA9IHByZXZfbGluZS5zdWJzdHIobG9jMSsxLCBsb2MyKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQl9CisKKwkJYmZkX3ZtYSBwcmV2X3ZtYSA9IHN0cnRvdWxsKHByZXZfdm1hX3N0ci5jX3N0cigpLCBOVUxMLCAxNik7CisKKwkJLy8gTmVlZCB0byBjaGVjayBpZiBwcmV2X3ZtYSA8IHNhbXBsZS0+dm1hCisJCWlmIChwcmV2X3ZtYSAhPSAwICYmIHByZXZfdm1hIDwgc2FtcGxlLT52bWEpIHsKKwkJCXN0cmluZyBzdHI7CisKKwkJCS8vIEdldCBzYW1wbGUgZm9yIHByZXZpb3VzIGxpbmUuCisJCQlzYW1wbGVfZW50cnkgKiBwcmV2X3NhbXBsZSA9IChzYW1wbGVfZW50cnkgKilzYW1wbGVzLT4KKwkJCQkJCQlmaW5kX3NhbXBsZShsYXN0X3N5bWJvbCwgcHJldl92bWEpOworCQkJaWYgKHByZXZfc2FtcGxlKSB7CisJCQkJLy8gQWdncmVnYXRlIHNhbXBsZSB3aXRoIHByZXZpb3VzIGxpbmUgaWYgaXQgYWxyZWFkeSBoYXMgc2FtcGxlcworCQkJCXByZXZfc2FtcGxlLT5jb3VudHMgKz0gc2FtcGxlLT5jb3VudHM7CisJCQkJc3RyID0gY291bnRfc3RyKHByZXZfc2FtcGxlLT5jb3VudHMsIHNhbXBsZXMtPnNhbXBsZXNfY291bnQoKSk7CisJCQl9IGVsc2UgeworCQkJCXN0ciA9IGNvdW50X3N0cihzYW1wbGUtPmNvdW50cywgc2FtcGxlcy0+c2FtcGxlc19jb3VudCgpKTsKKwkJCX0KKworCQkJLy8gRm9yIGVhY2ggZXZlbnRzCisJCQlmb3IgKHNpemVfdCBpID0gMTsgaSA8IG5yX2V2ZW50czsgKytpKQorCQkJCXN0ciArPSAiICAiOworCisJCQkqc2l0X3ByZXYgPSBzdHIgKyAiIDoiICsgcHJldl9saW5lLnN1YnN0cihsb2MxKzEpOworCQkJaWYgKHNhbXBfaXQgIT0gc2FtcGxlcy0+ZW5kKCkpCisJCQkJKytzYW1wX2l0OworCQkJcmV0ID0gLTE7CisJCX0gZWxzZSB7CisJCQkvLyBGYWlsZWQgdG8gYW5ub3RhdGUgdGhlIHByZXZpb3VzIGxpbmUuIFNraXAgc2FtcGxlLgorCQkJKnNpdCA9IGFubm90YXRpb25fZmlsbCArICpzaXQ7CisJCQlpZiAoc2FtcF9pdCAhPSBzYW1wbGVzLT5lbmQoKSkKKwkJCQkrK3NhbXBfaXQ7CisJCX0KKwl9IGVsc2UgeworCQkvLyBJbiBjYXNlIHNhbXBsZSBpcyBOVUxMCisJCSpzaXQgPSBhbm5vdGF0aW9uX2ZpbGwgKyAqc2l0OworCX0KKworCXJldHVybiByZXQ7Cit9CisKKworc3RyaW5nIHN5bWJvbF9hbm5vdGF0aW9uKHN5bWJvbF9lbnRyeSBjb25zdCAqIHN5bWJvbCkKK3sKKwlpZiAoIXN5bWJvbCkKKwkJcmV0dXJuIHN0cmluZygpOworCisJc3RyaW5nIGFubm90ID0gY291bnRfc3RyKHN5bWJvbC0+c2FtcGxlLmNvdW50cywKKwkgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlcy0+c2FtcGxlc19jb3VudCgpKTsKKworCXN0cmluZyBjb25zdCAmIHN5bW5hbWUgPSBzeW1ib2xfbmFtZXMuZGVtYW5nbGUoc3ltYm9sLT5uYW1lKTsKKworCXN0cmluZyBzdHIgPSAiICI7CisJc3RyICs9IGJlZ2luX2NvbW1lbnQgKyBzeW1uYW1lICsgIiB0b3RhbDogIjsKKwlzdHIgKz0gY291bnRfc3RyKHN5bWJvbC0+c2FtcGxlLmNvdW50cywgc2FtcGxlcy0+c2FtcGxlc19jb3VudCgpKTsKKwlzdHIgKz0gZW5kX2NvbW1lbnQ7CisJcmV0dXJuIHN0cjsKK30KKworCisvLy8gcmV0dXJuIHRydWUgaWYgIHRoaXMgbGluZSBjb250YWlucyBhIHN5bWJvbCBuYW1lIGluIG9iamR1bXAgZm9ybWF0dGluZworLy8vIHN5bWJvbCBhcmUgb24gdGhlIGZvcm0gMDgwMzA0MzQgPHN5bWJvbF9uYW1lPjogIHdlIG5lZWQgdG8gYmUgc3RyaWN0CisvLy8gaGVyZSB0byBhdm9pZCBhbnkgaW50ZXJwcmV0YXRpb24gb2YgYSBzb3VyY2UgbGluZSBhcyBhIHN5bWJvbCBsaW5lCitib29sIGlzX3N5bWJvbF9saW5lKHN0cmluZyBjb25zdCAmIHN0ciwgc3RyaW5nOjpzaXplX3R5cGUgcG9zKQoreworCWlmIChzdHJbcG9zXSAhPSAnICcgfHwgc3RyW3BvcyArIDFdICE9ICc8JykKKwkJcmV0dXJuIGZhbHNlOworCisJcmV0dXJuIHN0cltzdHIubGVuZ3RoKCkgLSAxXSA9PSAnOic7Cit9CisKKwordm9pZCBhbm5vdGF0ZV9vYmpkdW1wX3N0cl9saXN0KHN0cmluZyBjb25zdCAmIGFwcF9uYW1lLAorCQkJICAgICAgIHN5bWJvbF9jb2xsZWN0aW9uIGNvbnN0ICYgc3ltYm9scywKKwkJCSAgICAgICBsaXN0PHN0cmluZz4gJiBhc21fbGluZXMpCit7CisJc3ltYm9sX2VudHJ5IGNvbnN0ICogbGFzdF9zeW1ib2wgPSAwOworCWJmZF92bWEgbGFzdF9zeW1ib2xfdm1hID0gMDsKKwlpbnQgcmV0ID0gMDsKKworCS8vIHRvIGZpbHRlciBvdXRwdXQgb2Ygc3ltYm9scyAoZmlsdGVyIGJhc2VkIG9uIGNvbW1hbmQgbGluZSBvcHRpb25zKQorCWJvb2wgZG9fb3V0cHV0ID0gdHJ1ZTsKKworCS8vIFdlIHNpbXVsdGFuZW91c2x5IHdhbGsgdGhlIHR3byBzdHJ1Y3R1cmVzIChsaXN0IGFuZCBzYW1wbGVfY29udGFpbmVyKQorCS8vIHdoaWNoIGFyZSBzb3J0ZWQgYnkgYWRkcmVzcy4gYW5kIGRvIGFkZHJlc3MgY29tcGFyaXNpb24uCisJbGlzdDxzdHJpbmc+OjppdGVyYXRvciBzaXQgID0gYXNtX2xpbmVzLmJlZ2luKCk7CisJbGlzdDxzdHJpbmc+OjppdGVyYXRvciBzZW5kID0gYXNtX2xpbmVzLmVuZCgpOworCXNhbXBsZV9jb250YWluZXI6OnNhbXBsZXNfaXRlcmF0b3Igc2FtcF9pdCA9IHNhbXBsZXMtPmJlZ2luKCk7CisKKwlmb3IgKDsgc2l0ICE9IHNlbmQ7ICghcmV0PyBzaXQrKzogc2l0KSkgeworCQkvLyBvdXRwdXQgb2Ygb2JqZHVtcCBpcyBhIGh1bWFuIHJlYWRhYmxlIGZvcm0gYW5kIGNhbiBjb250YWluIHNvbWUKKwkJLy8gYW1iaWd1aXR5IHNvIHRoaXMgY29kZSBpcyBkaXJ0eS4gSXQgaXMgYWxzbyBvcHRpbWl6ZWQgYSBsaXR0bGUgYml0CisJCS8vIHNvIGl0IGlzIGRpZmZpY3VsdCB0byBzaW1wbGlmeSBpdCB3aXRob3V0IGJyZWFraW5nIHNvbWV0aGluZyAuLi4KKworCQkvLyBsaW5lIG9mIGludGVyZXN0IGFyZTogIls6c3BhY2U6XSpbOnhkaWdpdDpdP1sgOl0iLCB0aGUgbGFzdCBjaGFyIG9mCisJCS8vIHRoaXMgcmVnZXhwIGRpcy1hbWJpZ3VhdGUgYmV0d2VlbiBhIHN5bWJvbCBsaW5lIGFuZCBhbiBhc20gbGluZS4gSWYKKwkJLy8gc291cmNlIGNvbnRhaW4gbGluZSBvZiB0aGlzIGZvcm0gYW4gYW1iaWd1aXR5IG9jY3VyIGFuZCB3ZSByZWx5IG9uCisJCS8vIHRoZSByb2J1c3RuZXNzIG9mIHRoaXMgY29kZS4KKwkJc3RyaW5nIHN0ciA9ICpzaXQ7CisJCXNpemVfdCBwb3MgPSAwOworCQl3aGlsZSAocG9zIDwgc3RyLmxlbmd0aCgpICYmIGlzc3BhY2Uoc3RyW3Bvc10pKQorCQkJKytwb3M7CisKKwkJaWYgKHBvcyA9PSBzdHIubGVuZ3RoKCkgfHwgIWlzeGRpZ2l0KHN0cltwb3NdKSkgeworCQkJaWYgKGRvX291dHB1dCkgeworCQkJCSpzaXQgPSBhbm5vdGF0aW9uX2ZpbGwgKyBzdHI7CisJCQkJY29udGludWU7CisJCQl9CisJCX0KKworCQl3aGlsZSAocG9zIDwgc3RyLmxlbmd0aCgpICYmIGlzeGRpZ2l0KHN0cltwb3NdKSkKKwkJCSsrcG9zOworCisJCWlmIChwb3MgPT0gc3RyLmxlbmd0aCgpIHx8ICghaXNzcGFjZShzdHJbcG9zXSkgJiYgc3RyW3Bvc10gIT0gJzonKSkgeworCQkJaWYgKGRvX291dHB1dCkgeworCQkJCSpzaXQgPSBhbm5vdGF0aW9uX2ZpbGwgKyBzdHI7CisJCQkJY29udGludWU7CisJCQl9CisJCX0KKworCQlpZiAoaXNfc3ltYm9sX2xpbmUoc3RyLCBwb3MpKSB7CisKKwkJCWxhc3Rfc3ltYm9sID0gZmluZF9zeW1ib2woYXBwX25hbWUsIHN0cik7CisJCQlsYXN0X3N5bWJvbF92bWEgPSBzdHJ0b3VsbChzdHIuY19zdHIoKSwgTlVMTCwgMTYpOworCisJCQkvLyAhIGNvbXBsZXhpdHk6IGxpbmVhciBpbiBudW1iZXIgb2Ygc3ltYm9sIG11c3QgdXNlIHNvcnRlZAorCQkJLy8gYnkgYWRkcmVzcyB2ZWN0b3IgYW5kIGxvd2VyX2JvdW5kID8KKwkJCS8vIE5vdGUgdGhpcyB1c2UgYSBwb2ludGVyIGNvbXBhcmlzb24uIEl0IHdvcmsgYmVjYXVzZSBzeW1ib2xzCisJCQkvLyBwb2ludGVyIGFyZSB1bmlxdWUKKwkJCWlmIChmaW5kKHN5bWJvbHMuYmVnaW4oKSwgc3ltYm9scy5lbmQoKSwgbGFzdF9zeW1ib2wpCisJCQkgICAgIT0gc3ltYm9scy5lbmQoKSkKKwkJCQlkb19vdXRwdXQgPSB0cnVlOworCQkJZWxzZQorCQkJCWRvX291dHB1dCA9IGZhbHNlOworCisJCQlpZiAoZG9fb3V0cHV0KSB7CisJCQkJKnNpdCArPSBzeW1ib2xfYW5ub3RhdGlvbihsYXN0X3N5bWJvbCk7CisKKwkJCQkvLyBSZWFsaWduIHRoZSBzYW1wbGUgaXRlcmF0b3IgdG8KKwkJCQkvLyB0aGUgYmVnaW5uaW5nIG9mIHRoaXMgc3ltYm9scworCQkJCXNhbXBfaXQgPSBzYW1wbGVzLT5iZWdpbihsYXN0X3N5bWJvbCk7CisJCQl9CisJCX0gZWxzZSB7CisJCQkvLyBub3QgYSBzeW1ib2wsIHByb2JhYmx5IGFuIGFzbSBsaW5lLgorCQkJaWYgKGRvX291dHB1dCkKKwkJCQlyZXQgPSBhc21fbGlzdF9hbm5vdGF0aW9uKGxhc3Rfc3ltYm9sLAorCQkJCQkJCSAgbGFzdF9zeW1ib2xfdm1hLAorCQkJCQkJCSAgc2l0LCBzYW1wX2l0LAorCQkJCQkJCSAgYXNtX2xpbmVzKTsKKwkJfQorCisJCWlmICghZG9fb3V0cHV0KQorCQkJKnNpdCA9ICIiOworCX0KK30KKworCit2b2lkIG91dHB1dF9vYmpkdW1wX3N0cl9saXN0KHN5bWJvbF9jb2xsZWN0aW9uIGNvbnN0ICYgc3ltYm9scywKKwkJCXN0cmluZyBjb25zdCAmIGFwcF9uYW1lLAorCQkJbGlzdDxzdHJpbmc+ICYgYXNtX2xpbmVzKQoreworCisJYW5ub3RhdGVfb2JqZHVtcF9zdHJfbGlzdChhcHBfbmFtZSwgc3ltYm9scywgYXNtX2xpbmVzKTsKKworCS8vIFByaW50aW5nIG9iamR1bXAgb3V0cHV0IHRvIHN0ZG91dAorCWxpc3Q8c3RyaW5nPjo6aXRlcmF0b3Igc2l0ICA9IGFzbV9saW5lcy5iZWdpbigpOworCWxpc3Q8c3RyaW5nPjo6aXRlcmF0b3Igc2VuZCA9IGFzbV9saW5lcy5lbmQoKTsKKwlzaXQgPSBhc21fbGluZXMuYmVnaW4oKTsKKwlmb3IgKDsgc2l0ICE9IHNlbmQ7ICsrc2l0KSB7CisJCXN0cmluZyBzdHIgPSAqc2l0OworCQlpZiAoc3RyLmxlbmd0aCgpICE9IDApCisJCQljb3V0IDw8IHN0ciA8PCAnXG4nOworCX0KK30KKworCit2b2lkIGRvX29uZV9vdXRwdXRfb2JqZHVtcChzeW1ib2xfY29sbGVjdGlvbiBjb25zdCAmIHN5bWJvbHMsCisJCQkgICBzdHJpbmcgY29uc3QgJiBpbWFnZV9uYW1lLCBzdHJpbmcgY29uc3QgJiBhcHBfbmFtZSwKKwkJCSAgIGJmZF92bWEgc3RhcnQsIGJmZF92bWEgZW5kKQoreworCXZlY3RvcjxzdHJpbmc+IGFyZ3M7CisJbGlzdDxzdHJpbmc+IGFzbV9saW5lczsKKworCWFyZ3MucHVzaF9iYWNrKCItZCIpOworCWFyZ3MucHVzaF9iYWNrKCItLW5vLXNob3ctcmF3LWluc24iKTsKKwlpZiAoc291cmNlKQorCQlhcmdzLnB1c2hfYmFjaygiLVMiKTsKKworCWlmIChzdGFydCB8fCBlbmQgIT0gfihiZmRfdm1hKTApIHsKKwkJb3N0cmluZ3N0cmVhbSBhcmcxLCBhcmcyOworCQlhcmcxIDw8ICItLXN0YXJ0LWFkZHJlc3M9IiA8PCBzdGFydDsKKwkJYXJnMiA8PCAiLS1zdG9wLWFkZHJlc3M9IiA8PCBlbmQ7CisJCWFyZ3MucHVzaF9iYWNrKGFyZzEuc3RyKCkpOworCQlhcmdzLnB1c2hfYmFjayhhcmcyLnN0cigpKTsKKwl9CisKKwlpZiAoIW9iamR1bXBfcGFyYW1zLmVtcHR5KCkpIHsKKwkJZm9yIChzaXplX3QgaSA9IDAgOyBpIDwgb2JqZHVtcF9wYXJhbXMuc2l6ZSgpIDsgKytpKQorCQkJYXJncy5wdXNoX2JhY2sob2JqZHVtcF9wYXJhbXNbaV0pOworCX0KKworCWFyZ3MucHVzaF9iYWNrKGltYWdlX25hbWUpOworCWNoaWxkX3JlYWRlciByZWFkZXIoIm9iamR1bXAiLCBhcmdzKTsKKwlpZiAocmVhZGVyLmVycm9yKCkpIHsKKwkJY2VyciA8PCAiQW4gZXJyb3Igb2NjdXIgZHVyaW5nIHRoZSBleGVjdXRpb24gb2Ygb2JqZHVtcDpcblxuIjsKKwkJY2VyciA8PCByZWFkZXIuZXJyb3Jfc3RyKCkgPDwgZW5kbDsKKwkJcmV0dXJuOworCX0KKworCS8vIFJlYWQgZWFjaCBvdXRwdXQgbGluZSBmcm9tIG9iamR1bXAgYW5kIHN0b3JlIGluIGEgbGlzdC4KKwlzdHJpbmcgc3RyOworCXdoaWxlIChyZWFkZXIuZ2V0bGluZShzdHIpKQorCQlhc21fbGluZXMucHVzaF9iYWNrKHN0cik7CisKKwlvdXRwdXRfb2JqZHVtcF9zdHJfbGlzdChzeW1ib2xzLCBhcHBfbmFtZSwgYXNtX2xpbmVzKTsKKworCS8vIG9iamR1bXAgYWx3YXlzIHJldHVybnMgU1VDQ0VTUyBzbyB3ZSBtdXN0IHJlbHkgb24gdGhlIHN0ZGVyciBzdGF0ZQorCS8vIG9mIG9iamR1bXAuIElmIG9iamR1bXAgZXJyb3IgbWVzc2FnZSBpcyBjcnlwdGljIG91ciBvd24gZXJyb3IKKwkvLyBtZXNzYWdlIHdpbGwgYmUgcHJvYmFibHkgYWxzbyBjcnlwdGljCisJb3N0cmluZ3N0cmVhbSBzdGRfZXJyOworCW9zdHJpbmdzdHJlYW0gc3RkX291dDsKKwlyZWFkZXIuZ2V0X2RhdGEoc3RkX291dCwgc3RkX2Vycik7CisJaWYgKHN0ZF9lcnIuc3RyKCkubGVuZ3RoKCkpIHsKKwkJY2VyciA8PCAiQW4gZXJyb3Igb2NjdXIgZHVyaW5nIHRoZSBleGVjdXRpb24gb2Ygb2JqZHVtcDpcblxuIjsKKwkJY2VyciA8PCBzdGRfZXJyLnN0cigpIDw8IGVuZGw7CisJCXJldHVybiA7CisJfQorCisJLy8gZm9yY2UgZXJyb3IgY29kZSB0byBiZSBhY3F1aXJlZAorCXJlYWRlci50ZXJtaW5hdGVfcHJvY2VzcygpOworCisJLy8gcmVxdWlyZWQgYmVjYXVzZSBpZiBvYmpkdW1wIHN0b3AgYnkgc2lnbmFsIGFsbCBhYm92ZSB0aGluZ3Mgc3VjZWVlZAorCS8vIChzaWduYWwgZXJyb3IgbWVzc2FnZSBhcmUgbm90IG91dHB1dCB0aHJvdWdoIHN0ZG91dC9zdGRlcnIpCisJaWYgKHJlYWRlci5lcnJvcigpKSB7CisJCWNlcnIgPDwgIkFuIGVycm9yIG9jY3VyIGR1cmluZyB0aGUgZXhlY3V0aW9uIG9mIG9iamR1bXA6XG5cbiI7CisJCWNlcnIgPDwgcmVhZGVyLmVycm9yX3N0cigpIDw8IGVuZGw7CisJCXJldHVybjsKKwl9Cit9CisKKwordm9pZCBvdXRwdXRfb2JqZHVtcF9hc20oc3ltYm9sX2NvbGxlY3Rpb24gY29uc3QgJiBzeW1ib2xzLAorCQkJc3RyaW5nIGNvbnN0ICYgYXBwX25hbWUpCit7CisJaW1hZ2VfZXJyb3IgZXJyb3I7CisJc3RyaW5nIGltYWdlID0KKwkJY2xhc3Nlcy5leHRyYV9mb3VuZF9pbWFnZXMuZmluZF9pbWFnZV9wYXRoKGFwcF9uYW1lLCBlcnJvciwKKwkJCQkJCQkgICB0cnVlKTsKKworCS8vIHRoaXMgaXMgb25seSBhbiBvcHRpbWlzYXRpb24sIHdlIGNhbiBlaXRoZXIgZmlsdGVyIG91dHB1dCBieQorCS8vIGRpcmVjdGx5IGNhbGxpbmcgb2JqZHVtcCBhbmQgcmVseSBvbiB0aGUgc3ltYm9sIGZpbHRlcmluZyBvcgorCS8vIHdlIGNhbiBjYWxsIG9iamR1bXAgd2l0aCB0aGUgcmlnaHQgcGFyYW1ldGVyIHRvIGp1c3QgZGlzYXNzZW1ibGUKKwkvLyB0aGUgbmVlZGVkIHBhcnQuIFRoaXMgaXMgYSByZWFsIHdpbiBvbmx5IHdoZW4gY2FsbGluZyBvYmpkdW1wCisJLy8gYSBtZWRpdW0gbnVtYmVyIG9mIHRpbWVzLCBJIGR1bm5vIGlmIHRoZSB1c2VkIHRocmVzaG9sZCBpcyBvcHRpbWFsCisJLy8gYnV0IGl0IGlzIGEgY29uc2VydmF0aXZlIHZhbHVlLgorCXNpemVfdCBjb25zdCBtYXhfb2JqZHVtcF9leGVjID0gNTA7CisJaWYgKHN5bWJvbHMuc2l6ZSgpIDw9IG1heF9vYmpkdW1wX2V4ZWMgfHwgZXJyb3IgIT0gaW1hZ2Vfb2spIHsKKwkJc3ltYm9sX2NvbGxlY3Rpb246OmNvbnN0X2l0ZXJhdG9yIGNpdCA9IHN5bWJvbHMuYmVnaW4oKTsKKwkJc3ltYm9sX2NvbGxlY3Rpb246OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHN5bWJvbHMuZW5kKCk7CisJCWZvciAoOyBjaXQgIT0gZW5kOyArK2NpdCkgeworCQkJYmZkX3ZtYSBzdGFydCA9ICgqY2l0KS0+c2FtcGxlLnZtYTsKKwkJCWJmZF92bWEgZW5kICA9IHN0YXJ0ICsgKCpjaXQpLT5zaXplOworCQkJZG9fb25lX291dHB1dF9vYmpkdW1wKHN5bWJvbHMsIGltYWdlLCBhcHBfbmFtZSwKKwkJCQkJICAgICAgc3RhcnQsIGVuZCk7CisJCX0KKwl9IGVsc2UgeworCQlkb19vbmVfb3V0cHV0X29iamR1bXAoc3ltYm9scywgaW1hZ2UsCisJCQkJICAgICAgYXBwX25hbWUsIDAsIH5iZmRfdm1hKDApKTsKKwl9Cit9CisKKworYm9vbCBvdXRwdXRfYXNtKHN0cmluZyBjb25zdCAmIGFwcF9uYW1lKQoreworCXByb2ZpbGVfY29udGFpbmVyOjpzeW1ib2xfY2hvaWNlIGNob2ljZTsKKwljaG9pY2UudGhyZXNob2xkID0gb3B0aW9uczo6dGhyZXNob2xkOworCWNob2ljZS5pbWFnZV9uYW1lID0gYXBwX25hbWU7CisJY2hvaWNlLm1hdGNoX2ltYWdlID0gdHJ1ZTsKKwlzeW1ib2xfY29sbGVjdGlvbiBzeW1ib2xzID0gc2FtcGxlcy0+c2VsZWN0X3N5bWJvbHMoY2hvaWNlKTsKKworCWlmICghc3ltYm9scy5lbXB0eSgpKSB7CisJCXNvcnRfb3B0aW9ucyBvcHRpb25zOworCQlvcHRpb25zLmFkZF9zb3J0X29wdGlvbihzb3J0X29wdGlvbnM6OnNhbXBsZSk7CisJCW9wdGlvbnMuc29ydChzeW1ib2xzLCBmYWxzZSwgZmFsc2UpOworCisJCW91dHB1dF9pbmZvKGNvdXQpOworCisJCW91dHB1dF9vYmpkdW1wX2FzbShzeW1ib2xzLCBhcHBfbmFtZSk7CisKKwkJcmV0dXJuIHRydWU7CisJfQorCisJcmV0dXJuIGZhbHNlOworfQorCisKK3N0cmluZyBjb25zdCBzb3VyY2VfbGluZV9hbm5vdGF0aW9uKGRlYnVnX25hbWVfaWQgZmlsZW5hbWUsIHNpemVfdCBsaW5lbnIpCit7CisJc3RyaW5nIHN0cjsKKworCWNvdW50X2FycmF5X3QgY291bnRzID0gc2FtcGxlcy0+c2FtcGxlc19jb3VudChmaWxlbmFtZSwgbGluZW5yKTsKKwlpZiAoIWNvdW50cy56ZXJvKCkpIHsKKwkJc3RyICs9IGNvdW50X3N0cihjb3VudHMsIHNhbXBsZXMtPnNhbXBsZXNfY291bnQoKSk7CisJCWZvciAoc2l6ZV90IGkgPSAxOyBpIDwgbnJfZXZlbnRzOyArK2kpCisJCQlzdHIgKz0gIiAgIjsKKwkJc3RyICs9ICIgOiI7CisJfSBlbHNlIHsKKwkJc3RyID0gYW5ub3RhdGlvbl9maWxsOworCX0KKworCXJldHVybiBzdHI7Cit9CisKKworc3RyaW5nIHNvdXJjZV9zeW1ib2xfYW5ub3RhdGlvbihkZWJ1Z19uYW1lX2lkIGZpbGVuYW1lLCBzaXplX3QgbGluZW5yKQoreworCXN5bWJvbF9jb2xsZWN0aW9uIGNvbnN0IHN5bWJvbHMgPSBzYW1wbGVzLT5maW5kX3N5bWJvbChmaWxlbmFtZSwgbGluZW5yKTsKKworCWlmIChzeW1ib2xzLmVtcHR5KCkpCisJCXJldHVybiBzdHJpbmcoKTsKKworCXN0cmluZyBzdHIgPSAiICIgKyBiZWdpbl9jb21tZW50OworCisJY291bnRfYXJyYXlfdCBjb3VudHM7CisJZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzeW1ib2xzLnNpemUoKTsgKytpKSB7CisJCXN0ciArPSBzeW1ib2xfbmFtZXMuZGVtYW5nbGUoc3ltYm9sc1tpXS0+bmFtZSk7CisJCWlmIChzeW1ib2xzLnNpemUoKSA9PSAxKQorCQkJc3RyICs9ICIgdG90YWw6ICI7CisJCWVsc2UKKwkJCXN0ciArPSAiICI7CisJCXN0ciArPSBjb3VudF9zdHIoc3ltYm9sc1tpXS0+c2FtcGxlLmNvdW50cywKKwkJICAgICAgICAgIHNhbXBsZXMtPnNhbXBsZXNfY291bnQoKSk7CisJCWlmIChzeW1ib2xzLnNpemUoKSAhPSAxKQorCQkJc3RyICs9ICIsICI7CisKKwkJY291bnRzICs9IHN5bWJvbHNbaV0tPnNhbXBsZS5jb3VudHM7CisJfQorCisJaWYgKHN5bWJvbHMuc2l6ZSgpID4gMSkKKwkJc3RyICs9ICJ0b3RhbDogIiArIGNvdW50X3N0cihjb3VudHMsIHNhbXBsZXMtPnNhbXBsZXNfY291bnQoKSk7CisJc3RyICs9IGVuZF9jb21tZW50OworCisJcmV0dXJuIHN0cjsKK30KKworCit2b2lkIG91dHB1dF9wZXJfZmlsZV9pbmZvKG9zdHJlYW0gJiBvdXQsIGRlYnVnX25hbWVfaWQgZmlsZW5hbWUsCisJCQkgIGNvdW50X2FycmF5X3QgY29uc3QgJiB0b3RhbF9maWxlX2NvdW50KQoreworCW91dCA8PCBiZWdpbl9jb21tZW50IDw8ICdcbicKKwkgICAgIDw8IGluX2NvbW1lbnQgPDwgIlRvdGFsIHNhbXBsZXMgZm9yIGZpbGUgOiAiCisJICAgICA8PCAnIicgPDwgZGVidWdfbmFtZXMubmFtZShmaWxlbmFtZSkgPDwgJyInCisJICAgICA8PCAnXG4nOworCW91dCA8PCBpbl9jb21tZW50IDw8ICdcbicgPDwgaW5fY29tbWVudAorCSAgICA8PCBjb3VudF9zdHIodG90YWxfZmlsZV9jb3VudCwgc2FtcGxlcy0+c2FtcGxlc19jb3VudCgpKQorCSAgICA8PCAnXG4nOworCW91dCA8PCBlbmRfY29tbWVudCA8PCAnXG4nIDw8ICdcbic7Cit9CisKKworc3RyaW5nIGNvbnN0IGxpbmUwX2luZm8oZGVidWdfbmFtZV9pZCBmaWxlbmFtZSkKK3sKKwlzdHJpbmcgYW5ub3RhdGlvbiA9IHNvdXJjZV9saW5lX2Fubm90YXRpb24oZmlsZW5hbWUsIDApOworCWlmICh0cmltKGFubm90YXRpb24sICIgXHQ6IikuZW1wdHkoKSkKKwkJcmV0dXJuIHN0cmluZygpOworCisJc3RyaW5nIHN0ciA9ICI8Y3JlZGl0ZWQgdG8gbGluZSB6ZXJvPiAiOworCXN0ciArPSBhbm5vdGF0aW9uOworCXJldHVybiBzdHI7Cit9CisKKwordm9pZCBkb19vdXRwdXRfb25lX2ZpbGUob3N0cmVhbSAmIG91dCwgaXN0cmVhbSAmIGluLCBkZWJ1Z19uYW1lX2lkIGZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBoZWFkZXIpCit7CisJY291bnRfYXJyYXlfdCBjb3VudCA9IHNhbXBsZXMtPnNhbXBsZXNfY291bnQoZmlsZW5hbWUpOworCisJaWYgKGhlYWRlcikgeworCQlvdXRwdXRfcGVyX2ZpbGVfaW5mbyhvdXQsIGZpbGVuYW1lLCBjb3VudCk7CisJCW91dCA8PCBsaW5lMF9pbmZvKGZpbGVuYW1lKSA8PCAnXG4nOworCX0KKworCisJaWYgKGluKSB7CisJCXN0cmluZyBzdHI7CisKKwkJZm9yIChzaXplX3QgbGluZW5yID0gMSA7IGdldGxpbmUoaW4sIHN0cikgOyArK2xpbmVucikgeworCQkJb3V0IDw8IHNvdXJjZV9saW5lX2Fubm90YXRpb24oZmlsZW5hbWUsIGxpbmVucikgPDwgc3RyCisJCQkgICAgPDwgc291cmNlX3N5bWJvbF9hbm5vdGF0aW9uKGZpbGVuYW1lLCBsaW5lbnIpCisJCQkgICAgPDwgJ1xuJzsKKwkJfQorCisJfSBlbHNlIHsKKwkJLy8gc291cmNlIGlzIG5vdCBhdmFpbGFibGUgYnV0IHdlIGNhbiBhdCBsZWFzdCBvdXRwdXQgYWxsIHRoZQorCQkvLyBzeW1ib2xzIGJlbG9uZ2luZyB0byB0aGlzIGZpbGUuIFRoaXMgbWFrZSBtb3JlIHZpc2libGUgdGhlCisJCS8vIHByb2JsZW0gb2YgaGF2aW5nIGxlc3Mgc2FtcGxlcyBmb3IgYSBnaXZlbiBmaWxlIHRoYW4gdGhlCisJCS8vIHN1bSBvZiBhbGwgc3ltYm9scyBzYW1wbGVzIGZvciB0aGlzIGZpbGUgZHVlIHRvIGlubGluaW5nCisJCXN5bWJvbF9jb2xsZWN0aW9uIGNvbnN0IHN5bWJvbHMgPSBzYW1wbGVzLT5zZWxlY3Rfc3ltYm9scyhmaWxlbmFtZSk7CisJCWZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3ltYm9scy5zaXplKCk7ICsraSkKKwkJCW91dCA8PCBzeW1ib2xfYW5ub3RhdGlvbihzeW1ib2xzW2ldKSA8PCBlbmRsOworCX0KKworCWlmICghaGVhZGVyKSB7CisJCW91dHB1dF9wZXJfZmlsZV9pbmZvKG91dCwgZmlsZW5hbWUsIGNvdW50KTsKKwkJb3V0IDw8IGxpbmUwX2luZm8oZmlsZW5hbWUpIDw8ICdcbic7CisJfQorfQorCisKK3ZvaWQgb3V0cHV0X29uZV9maWxlKGlzdHJlYW0gJiBpbiwgZGVidWdfbmFtZV9pZCBmaWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgIHN0cmluZyBjb25zdCAmIHNvdXJjZSkKK3sKKwlpZiAob3V0cHV0X2Rpci5lbXB0eSgpKSB7CisJCWRvX291dHB1dF9vbmVfZmlsZShjb3V0LCBpbiwgZmlsZW5hbWUsIHRydWUpOworCQlyZXR1cm47CisJfQorCisJc3RyaW5nIGNvbnN0IG91dF9maWxlID0gb3BfcmVhbHBhdGgob3V0cHV0X2RpciArIHNvdXJjZSk7CisKKwkvKiBKdXN0IGJlY2F1c2UgeW91J3JlIHBhcmFub2lkIGRvZXNuJ3QgbWVhbiB0aGV5J3JlIG5vdCBvdXQgdG8KKwkgKiBnZXQgeW91IC4uLgorCSAqCisJICogVGhpcyBpcyBqdXN0IGEgbGFtZSBmaW5hbCBzYWZldHkgY2hlY2suIElmIHdlIGZvdW5kIHRoZQorCSAqIHNvdXJjZSwgdGhlbiAic291cmNlIiBzaG91bGQgYmUgY2Fub25pY2FsIGFscmVhZHksIGFuZAorCSAqIGNhbid0IGVzY2FwZSBmcm9tIHRoZSBvdXRwdXQgZGlyLiBXZSBjYW4ndCB1c2Ugb3BfcmVhbHBhdGgoKQorCSAqIGFsb25lIGFzIHRoYXQgbmVlZHMgdGhlIGZpbGUgdG8gZXhpc3QgYWxyZWFkeS4KKwkgKgorCSAqIExldCdzIG5vdCBjb21wbGFpbiBhZ2FpbiBpZiB3ZSBjb3VsZG4ndCBmaW5kIHRoZSBmaWxlIGFueXdheS4KKwkgKi8KKwlpZiAob3V0X2ZpbGUuZmluZCgiLy4uLyIpICE9IHN0cmluZzo6bnBvcykgeworCQlpZiAoaW4pIHsKKwkJCWNlcnIgPDwgInJlZnVzaW5nIHRvIGNyZWF0ZSBub24tY2Fub25pY2FsIGZpbGVuYW1lICIKKwkJCSAgICAgPDwgb3V0X2ZpbGUgIDw8IGVuZGw7CisJCX0KKwkJcmV0dXJuOworCX0gZWxzZSBpZiAoIWlzX3ByZWZpeChvdXRfZmlsZSwgb3V0cHV0X2RpcikpIHsKKwkJaWYgKGluKSB7CisJCQljZXJyIDw8ICJyZWZ1c2luZyB0byBjcmVhdGUgZmlsZSAiIDw8IG91dF9maWxlCisJCQkgICAgIDw8ICIgb3V0c2lkZSBvZiBvdXRwdXQgZGlyZWN0b3J5ICIgPDwgb3V0cHV0X2RpcgorCQkJICAgICA8PCBlbmRsOworCQl9CisJCXJldHVybjsKKwl9CisKKwlpZiAoaXNfZmlsZXNfaWRlbnRpY2FsKG91dF9maWxlLCBzb3VyY2UpKSB7CisJCWNlcnIgPDwgImlucHV0IGFuZCBvdXRwdXQgZmlsZXMgYXJlIGlkZW50aWNhbDogIgorCQkgICAgIDw8IG91dF9maWxlIDw8IGVuZGw7CisJCXJldHVybjsKKwl9CisKKwlpZiAoY3JlYXRlX3BhdGgob3V0X2ZpbGUuY19zdHIoKSkpIHsKKwkJY2VyciA8PCAidW5hYmxlIHRvIGNyZWF0ZSBmaWxlOiAiCisJCSAgICAgPDwgJyInIDw8IG9wX2Rpcm5hbWUob3V0X2ZpbGUpIDw8ICciJyA8PCBlbmRsOworCQlyZXR1cm47CisJfQorCisJb2ZzdHJlYW0gb3V0KG91dF9maWxlLmNfc3RyKCkpOworCWlmICghb3V0KSB7CisJCWNlcnIgPDwgInVuYWJsZSB0byBvcGVuIG91dHB1dCBmaWxlICIKKwkJICAgICA8PCAnIicgPDwgb3V0X2ZpbGUgPDwgJyInIDw8IGVuZGw7CisJfSBlbHNlIHsKKwkJZG9fb3V0cHV0X29uZV9maWxlKG91dCwgaW4sIGZpbGVuYW1lLCBmYWxzZSk7CisJCW91dHB1dF9pbmZvKG91dCk7CisJfQorfQorCisKKy8qIExvY2F0ZSBhIHNvdXJjZSBmaWxlIGZyb20gZGVidWcgaW5mbywgd2hpY2ggbWF5IGJlIHJlbGF0aXZlICovCitzdHJpbmcgY29uc3QgbG9jYXRlX3NvdXJjZV9maWxlKGRlYnVnX25hbWVfaWQgZmlsZW5hbWVfaWQpCit7CisJc3RyaW5nIGNvbnN0IG9yaWdmaWxlID0gZGVidWdfbmFtZXMubmFtZShmaWxlbmFtZV9pZCk7CisJc3RyaW5nIGZpbGUgPSBvcmlnZmlsZTsKKworCWlmIChmaWxlLmVtcHR5KCkpCisJCXJldHVybiBmaWxlOworCisJLyogQWxsb3cgYWJzb2x1dGUgcGF0aHMgdG8gYmUgcmVsb2NhdGVkIHRvIGEgZGlmZmVyZW50IGRpcmVjdG9yeSAqLworCWlmIChmaWxlWzBdID09ICcvJykgeworCQl2ZWN0b3I8c3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgY2l0ID0gYmFzZV9kaXJzLmJlZ2luKCk7CisJCXZlY3RvcjxzdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBiYXNlX2RpcnMuZW5kKCk7CisJCWZvciAoOyBjaXQgIT0gZW5kOyArK2NpdCkgeworCQkJc3RyaW5nIHBhdGggPSBvcF9yZWFscGF0aCgqY2l0KTsKKworCQkJaWYgKGlzX3ByZWZpeChmaWxlLCBwYXRoKSkgeworCQkJCWZpbGUgPSBmaWxlLnN1YnN0cihwYXRoLmxlbmd0aCgpKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKworCXZlY3RvcjxzdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBjaXQgPSBzZWFyY2hfZGlycy5iZWdpbigpOworCXZlY3RvcjxzdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBzZWFyY2hfZGlycy5lbmQoKTsKKworCWZvciAoOyBjaXQgIT0gZW5kOyArK2NpdCkgeworCQlzdHJpbmcgY29uc3QgYWJzZmlsZSA9IG9wX3JlYWxwYXRoKCpjaXQgKyAiLyIgKyBmaWxlKTsKKworCQlpZiAob3BfZmlsZV9yZWFkYWJsZShhYnNmaWxlKSkKKwkJCXJldHVybiBhYnNmaWxlOworCX0KKworCS8qIFdlIGRpZG4ndCBmaW5kIGEgcmVsb2NhdGVkIGFic29sdXRlIGZpbGUsIG9yIGEgcmVsYXRpdmUgZmlsZSwKKwkgKiBhc3N1bWUgdGhlIG9yaWdpbmFsIGlzIGNvcnJlY3QsIGFjY291bnRpbmcgZm9yIHRoZQorCSAqIHBvc3NpYmlsaXR5IGl0J3MgcmVsYXRpdmUgdGhlIGN3ZAorCSAqLworCXJldHVybiBvcF9yZWFscGF0aChvcmlnZmlsZSk7Cit9CisKKwordm9pZCBvdXRwdXRfc291cmNlKHBhdGhfZmlsdGVyIGNvbnN0ICYgZmlsdGVyKQoreworCWJvb2wgY29uc3Qgc2VwYXJhdGVfZmlsZSA9ICFvdXRwdXRfZGlyLmVtcHR5KCk7CisKKwlpZiAoIXNlcGFyYXRlX2ZpbGUpCisJCW91dHB1dF9pbmZvKGNvdXQpOworCisJdmVjdG9yPGRlYnVnX25hbWVfaWQ+IGZpbGVuYW1lcyA9CisJCXNhbXBsZXMtPnNlbGVjdF9maWxlbmFtZShvcHRpb25zOjp0aHJlc2hvbGQpOworCisJZm9yIChzaXplX3QgaSA9IDAgOyBpIDwgZmlsZW5hbWVzLnNpemUoKSA7ICsraSkgeworCQlzdHJpbmcgY29uc3QgJiBzb3VyY2UgPSBsb2NhdGVfc291cmNlX2ZpbGUoZmlsZW5hbWVzW2ldKTsKKworCQlpZiAoIWZpbHRlci5tYXRjaChzb3VyY2UpKQorCQkJY29udGludWU7CisKKwkJaWZzdHJlYW0gaW4oc291cmNlLmNfc3RyKCkpOworCisJCS8vIGl0IGlzIGNvbW1vbiB0byBoYXZlIGVtcHR5IGZpbGVuYW1lIGR1ZSB0byB0aGUgbGFjaworCQkvLyBvZiBkZWJ1ZyBpbmZvIChlZyBfaW5pdCBmdW5jdGlvbikgc28gd2FybiBvbmx5CisJCS8vIGlmIHRoZSBmaWxlbmFtZSBpcyBub24gZW1wdHkuIFRoZSBjYXNlOiBubyBkZWJ1ZworCQkvLyBpbmZvIGF0IGFsbCBoYXMgYWxyZWFkeSBiZWVuIGNoZWNrZWQuCisJCWlmICghaW4gJiYgc291cmNlLmxlbmd0aCgpKSB7CisJCQljZXJyIDw8ICJvcGFubm90YXRlICh3YXJuaW5nKTogdW5hYmxlIHRvIG9wZW4gZm9yICIKKwkJCSAgICAgInJlYWRpbmc6ICIgPDwgc291cmNlIDw8IGVuZGw7CisJCX0KKworCQlpZiAoc291cmNlLmxlbmd0aCgpKQorCQkJb3V0cHV0X29uZV9maWxlKGluLCBmaWxlbmFtZXNbaV0sIHNvdXJjZSk7CisJfQorfQorCisKK2Jvb2wgYW5ub3RhdGVfc291cmNlKGxpc3Q8c3RyaW5nPiBjb25zdCAmIGltYWdlcykKK3sKKwlhbm5vdGF0aW9uX2ZpbGwgPSBnZXRfYW5ub3RhdGlvbl9maWxsKCk7CisKKwlpZiAoIW91dHB1dF9kaXIuZW1wdHkoKSkgeworCisJCWlmIChjcmVhdGVfcGF0aChvdXRwdXRfZGlyLmNfc3RyKCkpKSB7CisJCQljZXJyIDw8ICJ1bmFibGUgdG8gY3JlYXRlICIgPDwgb3V0cHV0X2RpcgorCQkJICAgICA8PCAiIGRpcmVjdG9yeTogIiA8PCBlbmRsOworCQkJcmV0dXJuIGZhbHNlOworCQl9CisKKwkJLy8gTWFrZSBzdXJlIHdlIGhhdmUgYW4gYWJzb2x1dGUgcGF0aC4KKwkJb3V0cHV0X2RpciA9IG9wX3JlYWxwYXRoKG91dHB1dF9kaXIpOworCQlpZiAob3V0cHV0X2Rpci5sZW5ndGgoKSAmJgorCQkgICAgb3V0cHV0X2RpcltvdXRwdXRfZGlyLmxlbmd0aCgpIC0gMV0gIT0gJy8nKQorCQkJb3V0cHV0X2RpciArPSAnLyc7CisKKwkJLyogRG9uJ3QgbGV0IHRoZSB1c2VyIHN0b21wIG9uIHRoZWlyIHNvdXJjZXMgKi8KKwkJaWYgKG91dHB1dF9kaXIgPT0gIi8iKSB7CisJCQljZXJyIDw8ICJPdXRwdXQgcGF0aCBvZiAvIHdvdWxkIG92ZXItd3JpdGUgdGhlICIKKwkJCQkic291cmNlIGZpbGVzIiA8PCBlbmRsOworCQkJcmV0dXJuIGZhbHNlOworCQl9CisJfQorCisJaWYgKGFzc2VtYmx5KSB7CisJCWJvb2wgc29tZV9vdXRwdXQgPSBmYWxzZTsKKworCQlsaXN0PHN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaW1hZ2VzLmJlZ2luKCk7CisJCWxpc3Q8c3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgY29uc3QgZW5kID0gaW1hZ2VzLmVuZCgpOworCisJCWZvciAoOyBpdCAhPSBlbmQ7ICsraXQpIHsKKwkJCWlmIChvdXRwdXRfYXNtKCppdCkpCisJCQkJc29tZV9vdXRwdXQgPSB0cnVlOworCQl9CisKKwkJaWYgKCFzb21lX291dHB1dCkgeworCQkJLy8gSXQncyB0aGUgb25seSBjYXNlIHdlIG11c3QgY2FyZSBzaW5jZSB3ZSBrbm93IHRoZQorCQkJLy8gc2VsZWN0ZWQgaW1hZ2Ugc2V0IGlzIG5vdCBlbXB0eQorCQkJY2VyciA8PCAic2VsZWN0ZWQgaW1hZ2Ugc2V0IGRvZXNuJ3QgY29udGFpbiBhbnkgb2YgIgorCQkJICAgICA8PCAidGhlIHNlbGVjdGVkIHN5bWJvbFxuIjsKKwkJfQorCX0gZWxzZSB7CisJCW91dHB1dF9zb3VyY2UoZmlsZV9maWx0ZXIpOworCX0KKworCXJldHVybiB0cnVlOworfQorCisKK2ludCBvcGFubm90YXRlKG9wdGlvbnM6OnNwZWMgY29uc3QgJiBzcGVjKQoreworCWhhbmRsZV9vcHRpb25zKHNwZWMpOworCisJbnJfZXZlbnRzID0gY2xhc3Nlcy52LnNpemUoKTsKKworCXNhbXBsZXMucmVzZXQobmV3IHByb2ZpbGVfY29udGFpbmVyKHRydWUsIHRydWUsCisJCQkJCSAgICBjbGFzc2VzLmV4dHJhX2ZvdW5kX2ltYWdlcykpOworCisJbGlzdDxzdHJpbmc+IGltYWdlczsKKworCWxpc3Q8aW52ZXJ0ZWRfcHJvZmlsZT4gaXByb2ZpbGVzID0gaW52ZXJ0X3Byb2ZpbGVzKGNsYXNzZXMpOworCisJcmVwb3J0X2ltYWdlX2Vycm9ycyhpcHJvZmlsZXMsIGNsYXNzZXMuZXh0cmFfZm91bmRfaW1hZ2VzKTsKKworCWxpc3Q8aW52ZXJ0ZWRfcHJvZmlsZT46Oml0ZXJhdG9yIGl0ID0gaXByb2ZpbGVzLmJlZ2luKCk7CisJbGlzdDxpbnZlcnRlZF9wcm9maWxlPjo6aXRlcmF0b3IgY29uc3QgZW5kID0gaXByb2ZpbGVzLmVuZCgpOworCisJYm9vbCBkZWJ1Z19pbmZvID0gZmFsc2U7CisJZm9yICg7IGl0ICE9IGVuZDsgKytpdCkgeworCQlib29sIHRtcCA9IGZhbHNlOworCQlwb3B1bGF0ZV9mb3JfaW1hZ2UoKnNhbXBsZXMsICppdCwKKwkJCQkgICBvcHRpb25zOjpzeW1ib2xfZmlsdGVyLCAmdG1wKTsKKwkJaW1hZ2VzLnB1c2hfYmFjayhpdC0+aW1hZ2UpOworCQlpZiAodG1wKQorCQkJZGVidWdfaW5mbyA9IHRydWU7CisJfQorCisJaWYgKCFkZWJ1Z19pbmZvICYmICFvcHRpb25zOjphc3NlbWJseSkgeworCQljZXJyIDw8ICJvcGFubm90YXRlICh3YXJuaW5nKTogbm8gZGVidWcgaW5mb3JtYXRpb24gYXZhaWxhYmxlIGZvciBiaW5hcnkgIgorCQkgICAgIDw8IGl0LT5pbWFnZSA8PCAiLCBhbmQgLS1hc3NlbWJseSBub3QgcmVxdWVzdGVkXG4iOworCX0KKworCWFubm90YXRlX3NvdXJjZShpbWFnZXMpOworCisJcmV0dXJuIDA7Cit9CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyIGNvbnN0ICogYXJndltdKQoreworCS8vIHNldCB0aGUgaW52b2NhdGlvbiwgZm9yIHRoZSBmaWxlIGhlYWRlcnMgbGF0ZXIKKwlmb3IgKGludCBpID0gMCA7IGkgPCBhcmdjIDsgKytpKQorCQljbWRsaW5lICs9IHN0cmluZyhhcmd2W2ldKSArICIgIjsKKworCXJldHVybiBydW5fcHBfdG9vbChhcmdjLCBhcmd2LCBvcGFubm90YXRlKTsKK30KZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L3BwL29wYW5ub3RhdGVfb3B0aW9ucy5jcHAgYi9vcHJvZmlsZS0wLjkuNy9wcC9vcGFubm90YXRlX29wdGlvbnMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3YTU5MjQKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9wcC9vcGFubm90YXRlX29wdGlvbnMuY3BwCkBAIC0wLDAgKzEsMTUzIEBACisvKioKKyAqIEBmaWxlIG9wYW5ub3RhdGVfb3B0aW9ucy5jcHAKKyAqIE9wdGlvbnMgZm9yIG9wYW5ub3RhdGUgdG9vbAorICoKKyAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDMgT1Byb2ZpbGUgYXV0aG9ycworICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKKyAqCisgKiBAYXV0aG9yIEpvaG4gTGV2b24KKyAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQorICovCisKKyNpbmNsdWRlIDxjc3RkbGliPgorCisjaW5jbHVkZSA8dmVjdG9yPgorI2luY2x1ZGUgPGxpc3Q+CisjaW5jbHVkZSA8aXRlcmF0b3I+CisjaW5jbHVkZSA8aW9zdHJlYW0+CisjaW5jbHVkZSA8Y3N0ZGxpYj4KKworI2luY2x1ZGUgInByb2ZpbGVfc3BlYy5oIgorI2luY2x1ZGUgImFycmFuZ2VfcHJvZmlsZXMuaCIKKyNpbmNsdWRlICJvcF9leGNlcHRpb24uaCIKKyNpbmNsdWRlICJvcGFubm90YXRlX29wdGlvbnMuaCIKKyNpbmNsdWRlICJwb3B0X29wdGlvbnMuaCIKKyNpbmNsdWRlICJjdmVyYi5oIgorCit1c2luZyBuYW1lc3BhY2Ugc3RkOworCitwcm9maWxlX2NsYXNzZXMgY2xhc3NlczsKKworbmFtZXNwYWNlIG9wdGlvbnMgeworCWRlbWFuZ2xlX3R5cGUgZGVtYW5nbGUgPSBkbXRfbm9ybWFsOworCXN0cmluZyBvdXRwdXRfZGlyOworCXZlY3RvcjxzdHJpbmc+IHNlYXJjaF9kaXJzOworCXZlY3RvcjxzdHJpbmc+IGJhc2VfZGlyczsKKwltZXJnZV9vcHRpb24gbWVyZ2VfYnk7CisJcGF0aF9maWx0ZXIgZmlsZV9maWx0ZXI7CisJc3RyaW5nX2ZpbHRlciBzeW1ib2xfZmlsdGVyOworCWJvb2wgc291cmNlOworCWJvb2wgYXNzZW1ibHk7CisJdmVjdG9yPHN0cmluZz4gb2JqZHVtcF9wYXJhbXM7CisJYm9vbCBleGNsdWRlX2RlcGVuZGVudDsKK30KKworCituYW1lc3BhY2UgeworCitzdHJpbmcgaW5jbHVkZV9zeW1ib2xzOworc3RyaW5nIGV4Y2x1ZGVfc3ltYm9sczsKK3N0cmluZyBpbmNsdWRlX2ZpbGU7CitzdHJpbmcgZXhjbHVkZV9maWxlOworc3RyaW5nIGRlbWFuZ2xlX29wdGlvbiA9ICJub3JtYWwiOwordmVjdG9yPHN0cmluZz4gbWVyZ2VzcGVjOworCitwb3B0OjpvcHRpb24gb3B0aW9uc19hcnJheVtdID0geworCXBvcHQ6Om9wdGlvbihkZW1hbmdsZV9vcHRpb24sICJkZW1hbmdsZSIsICdEJywKKwkJICAgICAiZGVtYW5nbGUgR05VIEMrKyBzeW1ib2wgbmFtZXMgKGRlZmF1bHQgbm9ybWFsKSIsCisJICAgICAgICAgICAgICJub25lfG5vcm1hbHxzbWFydCIpLAorCXBvcHQ6Om9wdGlvbihvcHRpb25zOjpvdXRwdXRfZGlyLCAib3V0cHV0LWRpciIsICdvJywKKwkJICAgICAib3V0cHV0IGRpcmVjdG9yeSIsICJkaXJlY3RvcnkgbmFtZSIpLAorCXBvcHQ6Om9wdGlvbihvcHRpb25zOjpzZWFyY2hfZGlycywgInNlYXJjaC1kaXJzIiwgJ2QnLAorCSAgICAgICAgICAgICAiZGlyZWN0b3JpZXMgdG8gbG9vayBmb3Igc291cmNlIGZpbGVzIiwgImNvbW1hLXNlcGFyYXRlZCBwYXRocyIpLAorCXBvcHQ6Om9wdGlvbihvcHRpb25zOjpiYXNlX2RpcnMsICJiYXNlLWRpcnMiLCAnYicsCisJICAgICAgICAgICAgICJzb3VyY2UgZmlsZSBwcmVmaXhlcyB0byBzdHJpcCIsICJjb21tYS1zZXBhcmF0ZWQgcGF0aHMiKSwKKwlwb3B0OjpvcHRpb24oaW5jbHVkZV9maWxlLCAiaW5jbHVkZS1maWxlIiwgJ1wwJywKKwkJICAgICAiaW5jbHVkZSB0aGVzZSBjb21tYSBzZXBhcmF0ZWQgZmlsZW5hbWUiLCAiZmlsZW5hbWVzIiksCisJcG9wdDo6b3B0aW9uKGV4Y2x1ZGVfZmlsZSwgImV4Y2x1ZGUtZmlsZSIsICdcMCcsCisJCSAgICAgImV4Y2x1ZGUgdGhlc2UgY29tbWEgc2VwYXJhdGVkIGZpbGVuYW1lIiwgImZpbGVuYW1lcyIpLAorCXBvcHQ6Om9wdGlvbihpbmNsdWRlX3N5bWJvbHMsICJpbmNsdWRlLXN5bWJvbHMiLCAnaScsCisJCSAgICAgImluY2x1ZGUgdGhlc2UgY29tbWEgc2VwYXJhdGVkIHN5bWJvbHMiLCAic3ltYm9scyIpLAorCXBvcHQ6Om9wdGlvbihleGNsdWRlX3N5bWJvbHMsICJleGNsdWRlLXN5bWJvbHMiLCAnZScsCisJCSAgICAgImV4Y2x1ZGUgdGhlc2UgY29tbWEgc2VwYXJhdGVkIHN5bWJvbHMiLCAic3ltYm9scyIpLAorCXBvcHQ6Om9wdGlvbihvcHRpb25zOjpvYmpkdW1wX3BhcmFtcywgIm9iamR1bXAtcGFyYW1zIiwgJ1wwJywKKwkJICAgICAiYWRkaXRpb25hbCBwYXJhbXMgdG8gcGFzcyB0byBvYmpkdW1wIiwgInBhcmFtZXRlcnMiKSwKKwlwb3B0OjpvcHRpb24ob3B0aW9uczo6ZXhjbHVkZV9kZXBlbmRlbnQsICJleGNsdWRlLWRlcGVuZGVudCIsICd4JywKKwkJICAgICAiZXhjbHVkZSBsaWJzLCBrZXJuZWwsIGFuZCBtb2R1bGUgc2FtcGxlcyBmb3IgYXBwbGljYXRpb25zIiksCisJcG9wdDo6b3B0aW9uKG1lcmdlc3BlYywgIm1lcmdlIiwgJ20nLAorCQkgICAgICJjb21tYSBzZXBhcmF0ZWQgbGlzdCIsICJjcHUsdGlkLHRnaWQsdW5pdG1hc2ssYWxsIiksCisJcG9wdDo6b3B0aW9uKG9wdGlvbnM6OnNvdXJjZSwgInNvdXJjZSIsICdzJywgIm91dHB1dCBzb3VyY2UiKSwKKwlwb3B0OjpvcHRpb24ob3B0aW9uczo6YXNzZW1ibHksICJhc3NlbWJseSIsICdhJywgIm91dHB1dCBhc3NlbWJseSIpLAorCXBvcHQ6Om9wdGlvbihvcHRpb25zOjp0aHJlc2hvbGRfb3B0LCAidGhyZXNob2xkIiwgJ3QnLAorCQkgICAgICJtaW5pbXVtIHBlcmNlbnRhZ2UgbmVlZGVkIHRvIHByb2R1Y2Ugb3V0cHV0IiwKKwkJICAgICAicGVyY2VudCIpLAorfTsKKworfSAgLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCisKK3ZvaWQgaGFuZGxlX29wdGlvbnMob3B0aW9uczo6c3BlYyBjb25zdCAmIHNwZWMpCit7CisJdXNpbmcgbmFtZXNwYWNlIG9wdGlvbnM7CisKKwlpZiAoc3BlYy5maXJzdC5zaXplKCkpIHsKKwkJY2VyciA8PCAiZGlmZmVyZW50aWFsIHByb2ZpbGVzIG5vdCBhbGxvd2VkIiA8PCBlbmRsOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorCisJaWYgKCFhc3NlbWJseSAmJiAhc291cmNlKSB7CisJCWNlcnIgPDwJInlvdSBtdXN0IHNwZWNpZnkgYXQgbGVhc3QgLS1zb3VyY2Ugb3IgLS1hc3NlbWJseVxuIjsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKworCWlmICghb2JqZHVtcF9wYXJhbXMuZW1wdHkoKSAmJiAhYXNzZW1ibHkpIHsKKwkJY2VyciA8PCAiLS1vYmpkdW1wLXBhcmFtcyBpcyBtZWFuaW5nbGVzcyB3aXRob3V0IC0tYXNzZW1ibHlcbiI7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisKKwlpZiAoc2VhcmNoX2RpcnMuZW1wdHkoKSAmJiAhYmFzZV9kaXJzLmVtcHR5KCkpIHsKKwkJY2VyciA8PCAiLS1iYXNlLWRpcnMgaXMgdXNlbGVzcyB1bmxlc3MgeW91IHNwZWNpZnkgYW4gIgorCQkJImFsdGVybmF0aXZlIHNvdXJjZSBsb2NhdGlvbiB3aXRoIC0tc2VhcmNoLWRpcnMiCisJCSAgICAgPDwgZW5kbDsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKworCWlmIChhc3NlbWJseSAmJiAhb3V0cHV0X2Rpci5lbXB0eSgpKSB7CisJCWNlcnIgPDwgIi0tb3V0cHV0LWRpciBpcyBtZWFuaW5nbGVzcyB3aXRoIC0tYXNzZW1ibHkiIDw8IGVuZGw7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisKKwlvcHRpb25zOjpzeW1ib2xfZmlsdGVyID0gc3RyaW5nX2ZpbHRlcihpbmNsdWRlX3N5bWJvbHMsIGV4Y2x1ZGVfc3ltYm9scyk7CisKKwlvcHRpb25zOjpmaWxlX2ZpbHRlciA9IHBhdGhfZmlsdGVyKGluY2x1ZGVfZmlsZSwgZXhjbHVkZV9maWxlKTsKKworCXByb2ZpbGVfc3BlYyBjb25zdCBwc3BlYyA9CisJCXByb2ZpbGVfc3BlYzo6Y3JlYXRlKHNwZWMuY29tbW9uLCBvcHRpb25zOjppbWFnZV9wYXRoLAorCQkJCSAgICAgb3B0aW9uczo6cm9vdF9wYXRoKTsKKworCWxpc3Q8c3RyaW5nPiBzYW1wbGVfZmlsZXMgPSBwc3BlYy5nZW5lcmF0ZV9maWxlX2xpc3QoZXhjbHVkZV9kZXBlbmRlbnQsIHRydWUpOworCisJY3ZlcmIgPDwgdnNmaWxlIDw8ICJBcmNoaXZlOiAiIDw8IHBzcGVjLmdldF9hcmNoaXZlX3BhdGgoKSA8PCBlbmRsOworCisJY3ZlcmIgPDwgdnNmaWxlIDw8ICJNYXRjaGVkIHNhbXBsZSBmaWxlczogIiA8PCBzYW1wbGVfZmlsZXMuc2l6ZSgpCisJICAgICAgPDwgZW5kbDsKKwljb3B5KHNhbXBsZV9maWxlcy5iZWdpbigpLCBzYW1wbGVfZmlsZXMuZW5kKCksCisJICAgICBvc3RyZWFtX2l0ZXJhdG9yPHN0cmluZz4oY3ZlcmIgPDwgdnNmaWxlLCAiXG4iKSk7CisKKwlkZW1hbmdsZSA9IGhhbmRsZV9kZW1hbmdsZV9vcHRpb24oZGVtYW5nbGVfb3B0aW9uKTsKKworCS8vIHdlIGFsd2F5cyBtZXJnZSBidXQgdGhpcyBoYXZlIG5vIGVmZmVjdCBvbiBvdXRwdXQgc2luY2UgYXQgc291cmNlCisJLy8gb3IgYXNzZW1ibHkgcG9pbnQgb2YgdmlldyB0aGUgcmVzdWx0IHdpbGwgYmUgbWVyZ2VkIGFueXdheQorCW1lcmdlX2J5ID0gaGFuZGxlX21lcmdlX29wdGlvbihtZXJnZXNwZWMsIGZhbHNlLCBleGNsdWRlX2RlcGVuZGVudCk7CisKKwljbGFzc2VzID0gYXJyYW5nZV9wcm9maWxlcyhzYW1wbGVfZmlsZXMsIG1lcmdlX2J5LAorCQkJCSAgIHBzcGVjLmV4dHJhX2ZvdW5kX2ltYWdlcyk7CisKKwljdmVyYiA8PCB2c2ZpbGUgPDwgInByb2ZpbGVfY2xhc3NlczpcbiIgPDwgY2xhc3NlcyA8PCBlbmRsOworCisJaWYgKGNsYXNzZXMudi5lbXB0eSgpKSB7CisJCWNlcnIgPDwgImVycm9yOiBubyBzYW1wbGUgZmlsZXMgZm91bmQ6IHByb2ZpbGUgc3BlY2lmaWNhdGlvbiAiCisJCSAgICAgInRvbyBzdHJpY3QgPyIgPDwgZW5kbDsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KK30KZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L3BwL29wYW5ub3RhdGVfb3B0aW9ucy5oIGIvb3Byb2ZpbGUtMC45LjcvcHAvb3Bhbm5vdGF0ZV9vcHRpb25zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjMyYTdiYgotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L3BwL29wYW5ub3RhdGVfb3B0aW9ucy5oCkBAIC0wLDAgKzEsNDcgQEAKKy8qKgorICogQGZpbGUgb3Bhbm5vdGF0ZV9vcHRpb25zLmgKKyAqIE9wdGlvbnMgZm9yIG9wYW5ub3RhdGUgdG9vbAorICoKKyAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDMgT1Byb2ZpbGUgYXV0aG9ycworICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKKyAqCisgKiBAYXV0aG9yIEpvaG4gTGV2b24KKyAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQorICovCisKKyNpZm5kZWYgT1BBTk5PVEFURV9PUFRJT05TX0gKKyNkZWZpbmUgT1BBTk5PVEFURV9PUFRJT05TX0gKKworI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDx2ZWN0b3I+CisKKyNpbmNsdWRlICJjb21tb25fb3B0aW9uLmgiCisjaW5jbHVkZSAicGF0aF9maWx0ZXIuaCIKKworY2xhc3MgcHJvZmlsZV9jbGFzc2VzOworCituYW1lc3BhY2Ugb3B0aW9ucyB7CisJZXh0ZXJuIGRlbWFuZ2xlX3R5cGUgZGVtYW5nbGU7CisJZXh0ZXJuIGJvb2wgc291cmNlOworCWV4dGVybiBib29sIGFzc2VtYmx5OworCWV4dGVybiBzdHJpbmdfZmlsdGVyIHN5bWJvbF9maWx0ZXI7CisJZXh0ZXJuIHBhdGhfZmlsdGVyIGZpbGVfZmlsdGVyOworCWV4dGVybiBzdGQ6OnN0cmluZyBvdXRwdXRfZGlyOworCWV4dGVybiBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gc2VhcmNoX2RpcnM7CisJZXh0ZXJuIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBiYXNlX2RpcnM7CisJZXh0ZXJuIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBvYmpkdW1wX3BhcmFtczsKKwlleHRlcm4gZG91YmxlIHRocmVzaG9sZDsKK30KKworLy8vIGNsYXNzZXMgb2Ygc2FtcGxlIGZpbGVuYW1lcyB0byBoYW5kbGUKK2V4dGVybiBwcm9maWxlX2NsYXNzZXMgY2xhc3NlczsKKworLyoqCisgKiBoYW5kbGVfb3B0aW9ucyAtIHByb2Nlc3MgY29tbWFuZCBsaW5lCisgKiBAcGFyYW0gc3BlYyAgcHJvZmlsZSBzcGVjaWZpY2F0aW9uCisgKgorICogUHJvY2VzcyB0aGUgc3BlYywgZmF0YWxseSBjb21wbGFpbmluZyBvbiBlcnJvci4KKyAqLwordm9pZCBoYW5kbGVfb3B0aW9ucyhvcHRpb25zOjpzcGVjIGNvbnN0ICYgc3BlYyk7CisKKyNlbmRpZiAvLyBPUEFOTk9UQVRFX09QVElPTlNfSApkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvcHAvb3BhcmNoaXZlLmNwcCBiL29wcm9maWxlLTAuOS43L3BwL29wYXJjaGl2ZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQ4NzY2YQotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L3BwL29wYXJjaGl2ZS5jcHAKQEAgLTAsMCArMSwyMzYgQEAKKy8qKgorICogQGZpbGUgb3BhcmNoaXZlLmNwcAorICogSW1wbGVtZW50IG9wYXJjaGl2ZSB1dGlsaXR5CisgKgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMywgMjAwNCBPUHJvZmlsZSBhdXRob3JzCisgKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORworICoKKyAqIEBhdXRob3IgV2lsbCBDb2hlbgorICogQGF1dGhvciBKb2huIExldm9uCisgKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKKyAqLworCisjaW5jbHVkZSA8Y3N0ZGxpYj4KKworI2luY2x1ZGUgPGlvc3RyZWFtPgorI2luY2x1ZGUgPGZzdHJlYW0+CisjaW5jbHVkZSA8Y3N0ZGxpYj4KKworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZGlyZW50Lmg+CisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgIm9wX2ZpbGUuaCIKKyNpbmNsdWRlICJvcF9iZmQuaCIKKyNpbmNsdWRlICJvcF9jb25maWcuaCIKKyNpbmNsdWRlICJvcGFyY2hpdmVfb3B0aW9ucy5oIgorI2luY2x1ZGUgImZpbGVfbWFuaXAuaCIKKyNpbmNsdWRlICJjdmVyYi5oIgorI2luY2x1ZGUgImltYWdlX2Vycm9ycy5oIgorI2luY2x1ZGUgInN0cmluZ19tYW5pcC5oIgorI2luY2x1ZGUgImxvY2F0ZV9pbWFnZXMuaCIKKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKworbmFtZXNwYWNlIHsKKworCit2b2lkIGNvcHlfb25lX2ZpbGUoaW1hZ2VfZXJyb3IgZXJyLCBzdHJpbmcgY29uc3QgJiBzb3VyY2UsIHN0cmluZyBjb25zdCAmIGRlc3QpCit7CisJaWYgKCFvcF9maWxlX3JlYWRhYmxlKHNvdXJjZSkpCisJCXJldHVybjsKKworCWlmIChvcHRpb25zOjpsaXN0X2ZpbGVzKSB7CisJCWNvdXQgPDwgc291cmNlIDw8IGVuZGw7CisJCXJldHVybjsKKwl9CisKKwlpZiAoIWNvcHlfZmlsZShzb3VyY2UsIGRlc3QpICYmIGVyciA9PSBpbWFnZV9vaykgeworCQljZXJyIDw8ICJjYW4ndCBjb3B5IGZyb20gIiA8PCBzb3VyY2UgPDwgIiB0byAiIDw8IGRlc3QKKwkJICAgICA8PCAiIGNhdXNlOiAiIDw8IHN0cmVycm9yKGVycm5vKSA8PCBlbmRsOworCX0KK30KKwordm9pZCBjb3B5X3N0YXRzKHN0cmluZyBjb25zdCAmIHNlc3Npb25fc2FtcGxlc19kaXIsCisJCXN0cmluZyBjb25zdCAmIGFyY2hpdmVfcGF0aCkKK3sKKwlESVIgKiBkaXI7CisJc3RydWN0IGRpcmVudCAqIGRpcmVudDsKKwlzdHJpbmcgc3RhdHNfcGF0aDsKKwkKKwlzdGF0c19wYXRoID0gc2Vzc2lvbl9zYW1wbGVzX2RpciArICJzdGF0cy8iOworCisJaWYgKCEoZGlyID0gb3BlbmRpcihzdGF0c19wYXRoLmNfc3RyKCkpKSkgeworCQlyZXR1cm47CisJfQorCisJc3RyaW5nIHNhbXBsZV9iYXNlX2RpciA9IHNlc3Npb25fc2FtcGxlc19kaXIuc3Vic3RyKGFyY2hpdmVfcGF0aC5zaXplKCkpOworCXN0cmluZyBhcmNoaXZlX3N0YXRzID0gb3B0aW9uczo6b3V0ZGlyZWN0b3J5ICsgc2FtcGxlX2Jhc2VfZGlyICsgInN0YXRzLyI7CisJc3RyaW5nIGFyY2hpdmVfc3RhdHNfcGF0aCA9IGFyY2hpdmVfc3RhdHMgKyAiZXZlbnRfbG9zdF9vdmVyZmxvdyI7CisJaWYgKCFvcHRpb25zOjpsaXN0X2ZpbGVzICYmCisJICAgIGNyZWF0ZV9wYXRoKGFyY2hpdmVfc3RhdHNfcGF0aC5jX3N0cigpKSkgeworCQljZXJyIDw8ICJVbmFibGUgdG8gY3JlYXRlIGRpcmVjdG9yeSBmb3IgIgorCQkgICAgIDw8CWFyY2hpdmVfc3RhdHMgPDwgIi4iIDw8IGVuZGw7CisJCWV4aXQgKEVYSVRfRkFJTFVSRSk7CisJfQorCisJY29weV9vbmVfZmlsZShpbWFnZV9vaywgc3RhdHNfcGF0aCArICIvZXZlbnRfbG9zdF9vdmVyZmxvdyIsIGFyY2hpdmVfc3RhdHNfcGF0aCk7CisKKwl3aGlsZSAoKGRpcmVudCA9IHJlYWRkaXIoZGlyKSkpIHsKKwkJaW50IGNwdV9ucjsKKwkJc3RyaW5nIHBhdGg7CisJCWlmIChzc2NhbmYoZGlyZW50LT5kX25hbWUsICJjcHUlZCIsICZjcHVfbnIpICE9IDEpCisJCQljb250aW51ZTsKKwkJcGF0aCA9IHN0cmluZyhkaXJlbnQtPmRfbmFtZSkgKyAiLyIgKyAic2FtcGxlX2xvc3Rfb3ZlcmZsb3ciOworCQlhcmNoaXZlX3N0YXRzX3BhdGggPSBhcmNoaXZlX3N0YXRzICsgcGF0aDsKKwkJaWYgKCFvcHRpb25zOjpsaXN0X2ZpbGVzICYmCisJCSAgICBjcmVhdGVfcGF0aChhcmNoaXZlX3N0YXRzX3BhdGguY19zdHIoKSkpIHsKKwkJCWNlcnIgPDwgIlVuYWJsZSB0byBjcmVhdGUgZGlyZWN0b3J5IGZvciAiCisJCQkgICAgIDw8CWFyY2hpdmVfc3RhdHNfcGF0aCA8PCAiLiIgPDwgZW5kbDsKKwkJCWV4aXQgKEVYSVRfRkFJTFVSRSk7CisJCX0KKwkJY29weV9vbmVfZmlsZShpbWFnZV9vaywgc3RhdHNfcGF0aCArIHBhdGgsIGFyY2hpdmVfc3RhdHNfcGF0aCk7CisKKwl9CisJY2xvc2VkaXIoZGlyKTsKKworfQorCitpbnQgb3BhcmNoaXZlKG9wdGlvbnM6OnNwZWMgY29uc3QgJiBzcGVjKQoreworCWhhbmRsZV9vcHRpb25zKHNwZWMpOworCisJc3RyaW5nIGFyY2hpdmVfcGF0aCA9IGNsYXNzZXMuZXh0cmFfZm91bmRfaW1hZ2VzLmdldF9hcmNoaXZlX3BhdGgoKTsKKworCS8qIENoZWNrIHRvIHNlZSBpZiBkaXJlY3RvcnkgY2FuIGJlIGNyZWF0ZWQgKi8KKwlpZiAoIW9wdGlvbnM6Omxpc3RfZmlsZXMgJiYgY3JlYXRlX3BhdGgob3B0aW9uczo6b3V0ZGlyZWN0b3J5LmNfc3RyKCkpKSB7CisJCWNlcnIgPDwgIlVuYWJsZSB0byBjcmVhdGUgZGlyZWN0b3J5IGZvciAiIAorCQkgICAgIDw8CW9wdGlvbnM6Om91dGRpcmVjdG9yeSA8PCAiLiIgPDwgZW5kbDsKKwkJZXhpdCAoRVhJVF9GQUlMVVJFKTsKKwl9CisKKwkvKiBjb3B5IG92ZXIgZWFjaCBvZiB0aGUgZXhlY3V0YWJsZXMgYW5kIHRoZSBkZWJ1Z2luZm8gZmlsZXMgKi8KKwlsaXN0PGludmVydGVkX3Byb2ZpbGU+IGlwcm9maWxlcyA9IGludmVydF9wcm9maWxlcyhjbGFzc2VzKTsKKworCXJlcG9ydF9pbWFnZV9lcnJvcnMoaXByb2ZpbGVzLCBjbGFzc2VzLmV4dHJhX2ZvdW5kX2ltYWdlcyk7CisKKwlsaXN0PGludmVydGVkX3Byb2ZpbGU+OjppdGVyYXRvciBpdCA9IGlwcm9maWxlcy5iZWdpbigpOworCWxpc3Q8aW52ZXJ0ZWRfcHJvZmlsZT46Oml0ZXJhdG9yIGNvbnN0IGVuZCA9IGlwcm9maWxlcy5lbmQoKTsKKworCWN2ZXJiIDw8IHZkZWJ1ZyA8PCAiKGV4ZV9uYW1lcykiIDw8IGVuZGwgPDwgZW5kbDsKKwlmb3IgKDsgaXQgIT0gZW5kOyArK2l0KSB7CisKKwkJc3RyaW5nIGV4ZV9uYW1lID0gaXQtPmltYWdlOworCQlpbWFnZV9lcnJvciBlcnJvcjsKKwkJc3RyaW5nIHJlYWxfZXhlX25hbWUgPQorCQkJY2xhc3Nlcy5leHRyYV9mb3VuZF9pbWFnZXMuZmluZF9pbWFnZV9wYXRoKGl0LT5pbWFnZSwKKwkJCQkJCSAgZXJyb3IsIHRydWUpOworCisJCWlmIChlcnJvciA9PSBpbWFnZV9vaykKKwkJCWV4ZV9uYW1lID0gY2xhc3Nlcy5leHRyYV9mb3VuZF9pbWFnZXMuc3RyaXBfcGF0aF9wcmVmaXgocmVhbF9leGVfbmFtZSk7CisKKwkJLy8gb3V0cHV0IG5hbWUgbXVzdCBiZSBpZGVudGljYWwgdG8gdGhlIG9yaWdpbmFsIG5hbWUsIHdoZW4KKwkJLy8gdXNpbmcgdGhpcyBhcmNoaXZlIHRoZSB1c2VkIGZpeHVwIHdpbGwgYmUgaWRlbnRpY2FsIGUuZy46CisJCS8vIG9wYXJjaGl2ZSAtcCAvbGliL21vZHVsZXMvMi42LjQyL2tlcm5lbCAtbyB0bXA7CisJCS8vIG9wcmVwb3J0ICAtcCAvbGliL21vZHVsZXMvMi42LjQyL2tlcm5lbCB7IGFyY2hpdmU6dG1wIH0KKwkJc3RyaW5nIGV4ZV9hcmNoaXZlX2ZpbGUgPSBvcHRpb25zOjpvdXRkaXJlY3RvcnkgKyBleGVfbmFtZTsKKworCQkvLyBGSVhNRTogaGFja3kKKwkJaWYgKGl0LT5lcnJvciA9PSBpbWFnZV9ub3RfZm91bmQgJiYgaXNfcHJlZml4KGV4ZV9uYW1lLCAiYW5vbiAiKSkKKwkJCWNvbnRpbnVlOworCisJCWN2ZXJiIDw8IHZkZWJ1ZyA8PCByZWFsX2V4ZV9uYW1lIDw8IGVuZGw7CisJCS8qIENyZWF0ZSBkaXJlY3RvcnkgZm9yIGV4ZWN1dGFibGUgZmlsZS4gKi8KKwkJaWYgKCFvcHRpb25zOjpsaXN0X2ZpbGVzICYmCisJCQljcmVhdGVfcGF0aChleGVfYXJjaGl2ZV9maWxlLmNfc3RyKCkpKSB7CisJCQljZXJyIDw8ICJVbmFibGUgdG8gY3JlYXRlIGRpcmVjdG9yeSBmb3IgIgorCQkJICAgICA8PCBleGVfYXJjaGl2ZV9maWxlIDw8ICIuIiA8PCBlbmRsOworCQkJZXhpdCAoRVhJVF9GQUlMVVJFKTsKKwkJfQorCisJCS8qIENvcHkgYWN0dWFsIGV4ZWN1dGFibGUgZmlsZXMgKi8KKwkJY29weV9vbmVfZmlsZShpdC0+ZXJyb3IsIHJlYWxfZXhlX25hbWUsIGV4ZV9hcmNoaXZlX2ZpbGUpOworCisJCS8qIElmIHRoZXJlIGFyZSBhbnkgZGVidWdpbmZvIGZpbGVzLCBjb3B5IHRoZW0gb3Zlci4KKwkJICogTmVlZCB0byBjb3B5IHRoZSBkZWJ1ZyBpbmZvIGZpbGUgdG8gc29tZXdoZXJlIHdlJ2xsCisJCSAqIGZpbmQgaXQgLSBleGVjdXRhYmxlIGxvY2F0aW9uICsgIi8uZGVidWciCisJCSAqIHRvIGF2b2lkIG92ZXJ3cml0aW5nIGZpbGVzIHdpdGggdGhlIHNhbWUgbmFtZS4gVGhlCisJCSAqIC91c3IvbGliL2RlYnVnIHNlYXJjaCBwYXRoIGlzIG5vdCBnb2luZyB0byB3b3JrLgorCQkgKi8KKwkJYmZkICogaWJmZCA9IG9wZW5fYmZkKHJlYWxfZXhlX25hbWUpOworCQlpZiAoaWJmZCkgeworCQkJc3RyaW5nIGRpcm5hbWUgPSBvcF9kaXJuYW1lKHJlYWxfZXhlX25hbWUpOworCQkJc3RyaW5nIGRlYnVnX2ZpbGVuYW1lOworCQkJaWYgKGZpbmRfc2VwYXJhdGVfZGVidWdfZmlsZShpYmZkLCByZWFsX2V4ZV9uYW1lLAorCQkJCWRlYnVnX2ZpbGVuYW1lLCBjbGFzc2VzLmV4dHJhX2ZvdW5kX2ltYWdlcykpIHsKKwkJCQkvKiBmb3VuZCBzb21ldGhpbmcgY29weSBpdCBvdmVyICovCisJCQkJc3RyaW5nIGRlc3RfZGVidWdfZGlyID0gb3B0aW9uczo6b3V0ZGlyZWN0b3J5ICsKKwkJCQkJZGlybmFtZSArICIvLmRlYnVnLyI7CisJCQkJaWYgKCFvcHRpb25zOjpsaXN0X2ZpbGVzICYmCisJCQkJICAgIGNyZWF0ZV9kaXIoZGVzdF9kZWJ1Z19kaXIuY19zdHIoKSkpIHsKKwkJCQkJY2VyciA8PCAiVW5hYmxlIHRvIGNyZWF0ZSBkaXJlY3Rvcnk6ICIKKwkJCQkJPDwgZGVzdF9kZWJ1Z19kaXIgPDwgIi4iIDw8IGVuZGw7CisJCQkJCWV4aXQgKEVYSVRfRkFJTFVSRSk7CisJCQkJfQorCisJCQkJc3RyaW5nIGRlc3RfZGVidWcgPSBkZXN0X2RlYnVnX2RpciArCisJCQkJCW9wX2Jhc2VuYW1lKGRlYnVnX2ZpbGVuYW1lKTsKKwkJCQljb3B5X29uZV9maWxlKGltYWdlX29rLCBkZWJ1Z19maWxlbmFtZSwgZGVzdF9kZWJ1Zyk7CisJCQl9CisJCQliZmRfY2xvc2UoaWJmZCk7CisJCX0KKwl9CisKKwkvKiBjb3B5IG92ZXIgZWFjaCBvZiB0aGUgc2FtcGxlIGZpbGVzICovCisJbGlzdDxzdHJpbmc+OjppdGVyYXRvciBzaXQgPSBzYW1wbGVfZmlsZXMuYmVnaW4oKTsKKwlsaXN0PHN0cmluZz46Oml0ZXJhdG9yIGNvbnN0IHNlbmQgPSBzYW1wbGVfZmlsZXMuZW5kKCk7CisKKwlzdHJpbmcgYV9zYW1wbGVfZmlsZSA9ICpzaXQ7CisJaW50IG9mZnNldCA9IGFfc2FtcGxlX2ZpbGUuZmluZCgneycpOworCXN0cmluZyBiYXNlX3NhbXBsZXNfZGlyID0gYV9zYW1wbGVfZmlsZS5zdWJzdHIoMCwgb2Zmc2V0KTsKKwljb3B5X3N0YXRzKGJhc2Vfc2FtcGxlc19kaXIsIGFyY2hpdmVfcGF0aCk7CisKKwljdmVyYiA8PCB2ZGVidWcgPDwgIihzYW1wbGVfbmFtZXMpIiA8PCBlbmRsIDw8IGVuZGw7CisKKwlmb3IgKDsgc2l0ICE9IHNlbmQ7ICsrc2l0KSB7CisJCXN0cmluZyBzYW1wbGVfbmFtZSA9ICpzaXQ7CisJCS8qIEdldCByaWQgb2YgdGhlIHRoZSBhcmNoaXZlX3BhdGggZnJvbSB0aGUgbmFtZSAqLworCQlzdHJpbmcgc2FtcGxlX2Jhc2UgPSBzYW1wbGVfbmFtZS5zdWJzdHIoYXJjaGl2ZV9wYXRoLnNpemUoKSk7CisJCXN0cmluZyBzYW1wbGVfYXJjaGl2ZV9maWxlID0gb3B0aW9uczo6b3V0ZGlyZWN0b3J5ICsgc2FtcGxlX2Jhc2U7CisJCQorCQljdmVyYiA8PCB2ZGVidWcgPDwgc2FtcGxlX25hbWUgPDwgZW5kbDsKKwkJY3ZlcmIgPDwgdmRlYnVnIDw8ICIgZGVzdHAgIiA8PCBzYW1wbGVfYXJjaGl2ZV9maWxlIDw8IGVuZGw7CisJCWlmICghb3B0aW9uczo6bGlzdF9maWxlcyAmJgorCQkJY3JlYXRlX3BhdGgoc2FtcGxlX2FyY2hpdmVfZmlsZS5jX3N0cigpKSkgeworCQkJY2VyciA8PCAiVW5hYmxlIHRvIGNyZWF0ZSBkaXJlY3RvcnkgZm9yICIKKwkJCSAgICAgPDwJc2FtcGxlX2FyY2hpdmVfZmlsZSA8PCAiLiIgPDwgZW5kbDsKKwkJCWV4aXQgKEVYSVRfRkFJTFVSRSk7CisJCX0KKworCQkvKiBDb3B5IG92ZXIgYWN0dWFsIHNhbXBsZSBmaWxlLiAqLworCQljb3B5X29uZV9maWxlKGltYWdlX29rLCBzYW1wbGVfbmFtZSwgc2FtcGxlX2FyY2hpdmVfZmlsZSk7CisJfQorCisJLyogY29weSBvdmVyIHRoZSA8c2Vzc2lvbi1kaXI+L2FiaSBmaWxlIGlmIGl0IGV4aXN0cyAqLworCXN0cmluZyBhYmlfbmFtZSA9IHN0cmluZyhvcF9zZXNzaW9uX2RpcikgKyAiL2FiaSI7CisJY29weV9vbmVfZmlsZShpbWFnZV9vaywgYXJjaGl2ZV9wYXRoICsgYWJpX25hbWUsCisJICAgICAgICAgICAgICBvcHRpb25zOjpvdXRkaXJlY3RvcnkgKyBhYmlfbmFtZSk7CisKKwkvKiBjb3B5IG92ZXIgdGhlIDxzZXNzaW9uLWRpcj4vc2FtcGxlcy9vcHJvZmlsZWQubG9nIGZpbGUgKi8KKwlzdHJpbmcgbG9nX25hbWUgPSBzdHJpbmcob3Bfc2FtcGxlc19kaXIpICsgIi9vcHJvZmlsZWQubG9nIjsKKwljb3B5X29uZV9maWxlKGltYWdlX29rLCBhcmNoaXZlX3BhdGggKyBsb2dfbmFtZSwKKwkgICAgICAgICAgICAgIG9wdGlvbnM6Om91dGRpcmVjdG9yeSArIGxvZ19uYW1lKTsKKworCXJldHVybiAwOworfQorCit9ICAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgY29uc3QgKiBhcmd2W10pCit7CisJcmV0dXJuIHJ1bl9wcF90b29sKGFyZ2MsIGFyZ3YsIG9wYXJjaGl2ZSk7Cit9CmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9wcC9vcGFyY2hpdmVfb3B0aW9ucy5jcHAgYi9vcHJvZmlsZS0wLjkuNy9wcC9vcGFyY2hpdmVfb3B0aW9ucy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGIzM2FlYwotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L3BwL29wYXJjaGl2ZV9vcHRpb25zLmNwcApAQCAtMCwwICsxLDExOSBAQAorLyoqCisgKiBAZmlsZSBvcGFyY2hpdmVfb3B0aW9ucy5jcHAKKyAqIE9wdGlvbnMgZm9yIG9wYXJjaGl2ZSB0b29sCisgKgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMiwgMjAwMywgMjAwNCBPUHJvZmlsZSBhdXRob3JzCisgKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORworICoKKyAqIEBhdXRob3IgV2lsbGlhbSBDb2hlbgorICogQGF1dGhvciBQaGlsaXBwZSBFbGllCisgKi8KKworI2luY2x1ZGUgPHZlY3Rvcj4KKyNpbmNsdWRlIDxsaXN0PgorI2luY2x1ZGUgPGlvc3RyZWFtPgorI2luY2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRlIDxpdGVyYXRvcj4KKyNpbmNsdWRlIDxmc3RyZWFtPgorCisjaW5jbHVkZSAicHJvZmlsZV9zcGVjLmgiCisjaW5jbHVkZSAiYXJyYW5nZV9wcm9maWxlcy5oIgorI2luY2x1ZGUgIm9wYXJjaGl2ZV9vcHRpb25zLmgiCisjaW5jbHVkZSAicG9wdF9vcHRpb25zLmgiCisjaW5jbHVkZSAic3RyaW5nX2ZpbHRlci5oIgorI2luY2x1ZGUgImZpbGVfbWFuaXAuaCIKKyNpbmNsdWRlICJjdmVyYi5oIgorCisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisKK3Byb2ZpbGVfY2xhc3NlcyBjbGFzc2VzOworbGlzdDxzdHJpbmc+IHNhbXBsZV9maWxlczsKKworbmFtZXNwYWNlIG9wdGlvbnMgeworCWRlbWFuZ2xlX3R5cGUgZGVtYW5nbGUgPSBkbXRfbm9ybWFsOworCWJvb2wgZXhjbHVkZV9kZXBlbmRlbnQ7CisJbWVyZ2Vfb3B0aW9uIG1lcmdlX2J5OworCXN0cmluZyBvdXRkaXJlY3Rvcnk7CisJYm9vbCBsaXN0X2ZpbGVzOworfQorCisKK25hbWVzcGFjZSB7CisKK3ZlY3RvcjxzdHJpbmc+IG1lcmdlc3BlYzsKKworcG9wdDo6b3B0aW9uIG9wdGlvbnNfYXJyYXlbXSA9IHsKKwlwb3B0OjpvcHRpb24ob3B0aW9uczo6b3V0ZGlyZWN0b3J5LCAib3V0cHV0LWRpcmVjdG9yeSIsICdvJywKKwkgICAgICAgICAgICAgIm91dHB1dCB0byB0aGUgZ2l2ZW4gZGlyZWN0b3J5IiwgImRpcmVjdG9yeSIpLAorCXBvcHQ6Om9wdGlvbihvcHRpb25zOjpleGNsdWRlX2RlcGVuZGVudCwgImV4Y2x1ZGUtZGVwZW5kZW50IiwgJ3gnLAorCQkgICAgICJleGNsdWRlIGxpYnMsIGtlcm5lbCwgYW5kIG1vZHVsZSBzYW1wbGVzIGZvciBhcHBsaWNhdGlvbnMiKSwKKwlwb3B0OjpvcHRpb24ob3B0aW9uczo6bGlzdF9maWxlcywgImxpc3QtZmlsZXMiLCAnbCcsCisJCSAgICAgImp1c3QgbGlzdCB0aGUgZmlsZXMgbmVjZXNzYXJ5LCBkb24ndCBwcm9kdWNlIHRoZSBhcmNoaXZlIikKK307CisKKworLyoqCisgKiBjaGVjayBpbmNvbXBhdGlibGUgb3IgbWVhbmluZ2xlc3Mgb3B0aW9ucworICoKKyAqLwordm9pZCBjaGVja19vcHRpb25zKCkKK3sKKwl1c2luZyBuYW1lc3BhY2Ugb3B0aW9uczsKKworCS8qIG91dHB1dCBkaXJlY3RvcnkgaXMgcmVxdWlyZWQgKi8KKwlpZiAoIWxpc3RfZmlsZXMpIHsKKwkJaWYgKG91dGRpcmVjdG9yeS5zaXplKCkgPT0gMCkgeworCQkJY2VyciA8PCAiUmVxdWlyZXMgLS1vdXRwdXQtZGlyZWN0b3J5IG9wdGlvbi4iIDw8IGVuZGw7CisJCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJCX0KKwkJc3RyaW5nIHJlYWxwYXRoID0gb3BfcmVhbHBhdGgob3V0ZGlyZWN0b3J5KTsKKwkJaWYgKHJlYWxwYXRoID09ICIvIikgeworCQkJY2VyciA8PCAiSW52YWxpZCAtLW91dHB1dC1kaXJlY3Rvcnk6IC8iIDw8IGVuZGw7CisJCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJCX0KKwl9Cit9CisKK30gIC8vIGFub255bW91cyBuYW1lc3BhY2UKKworCit2b2lkIGhhbmRsZV9vcHRpb25zKG9wdGlvbnM6OnNwZWMgY29uc3QgJiBzcGVjKQoreworCXVzaW5nIG5hbWVzcGFjZSBvcHRpb25zOworCisJaWYgKHNwZWMuZmlyc3Quc2l6ZSgpKSB7CisJCWNlcnIgPDwgImRpZmZlcmVudGlhbCBwcm9maWxlcyBub3QgYWxsb3dlZCIgPDwgZW5kbDsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKworCS8vIG1lcmdpbmcgZG9lc24ndCBvY2N1ciBpbiBvcGFyY2hpdmUgYnV0IHdlIG11c3QgYWxsb3cgaXQgdG8gYXZvaWQKKwkvLyB0cmlnZ2VyaW5nIHNhbml0eSBjaGVja2luZyBpbiBhcnJhbmdlX3Byb2ZpbGVzKCkKKwltZXJnZV9ieS5jcHUgPSB0cnVlOworCW1lcmdlX2J5LmxpYiA9IHRydWU7CisJbWVyZ2VfYnkudGlkID0gdHJ1ZTsKKwltZXJnZV9ieS50Z2lkID0gdHJ1ZTsKKwltZXJnZV9ieS51bml0bWFzayA9IHRydWU7CisJY2hlY2tfb3B0aW9ucygpOworCisJcHJvZmlsZV9zcGVjIGNvbnN0IHBzcGVjID0KKwkJcHJvZmlsZV9zcGVjOjpjcmVhdGUoc3BlYy5jb21tb24sIGltYWdlX3BhdGgsIHJvb3RfcGF0aCk7CisKKwlzYW1wbGVfZmlsZXMgPSBwc3BlYy5nZW5lcmF0ZV9maWxlX2xpc3QoZXhjbHVkZV9kZXBlbmRlbnQsIGZhbHNlKTsKKworCWN2ZXJiIDw8IHZzZmlsZSA8PCAiTWF0Y2hlZCBzYW1wbGUgZmlsZXM6ICIgPDwgc2FtcGxlX2ZpbGVzLnNpemUoKQorCSAgICAgIDw8IGVuZGw7CisJY29weShzYW1wbGVfZmlsZXMuYmVnaW4oKSwgc2FtcGxlX2ZpbGVzLmVuZCgpLAorCSAgICAgb3N0cmVhbV9pdGVyYXRvcjxzdHJpbmc+KGN2ZXJiIDw8IHZzZmlsZSwgIlxuIikpOworCisJY2xhc3NlcyA9IGFycmFuZ2VfcHJvZmlsZXMoc2FtcGxlX2ZpbGVzLCBtZXJnZV9ieSwKKwkJCQkgICBwc3BlYy5leHRyYV9mb3VuZF9pbWFnZXMpOworCisJY3ZlcmIgPDwgdnNmaWxlIDw8ICJwcm9maWxlX2NsYXNzZXM6XG4iIDw8IGNsYXNzZXMgPDwgZW5kbDsKKworCWlmIChjbGFzc2VzLnYuZW1wdHkoKSkgeworCQljZXJyIDw8ICJlcnJvcjogbm8gc2FtcGxlIGZpbGVzIGZvdW5kOiBwcm9maWxlIHNwZWNpZmljYXRpb24gIgorCQkgICAgICJ0b28gc3RyaWN0ID8iIDw8IGVuZGw7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9wcC9vcGFyY2hpdmVfb3B0aW9ucy5oIGIvb3Byb2ZpbGUtMC45LjcvcHAvb3BhcmNoaXZlX29wdGlvbnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OWMwYzIxCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvcHAvb3BhcmNoaXZlX29wdGlvbnMuaApAQCAtMCwwICsxLDM5IEBACisvKioKKyAqIEBmaWxlIG9wYXJjaGl2ZV9vcHRpb25zLmgKKyAqIE9wdGlvbnMgZm9yIG9wYXJjaGl2ZSB0b29sCisgKgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMyBPUHJvZmlsZSBhdXRob3JzCisgKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORworICoKKyAqIEBhdXRob3IgV2lsbCBDb2hlbgorICogQGF1dGhvciBQaGlsaXBwZSBFbGllCisgKi8KKworI2lmbmRlZiBPUEFSQ0hJVkVfT1BUSU9OU19ICisjZGVmaW5lIE9QQVJDSElWRV9PUFRJT05TX0gKKworI2luY2x1ZGUgImNvbW1vbl9vcHRpb24uaCIKKworY2xhc3MgcHJvZmlsZV9jbGFzc2VzOworY2xhc3MgbWVyZ2Vfb3B0aW9uOworCituYW1lc3BhY2Ugb3B0aW9ucyB7CisJZXh0ZXJuIGJvb2wgZXhjbHVkZV9kZXBlbmRlbnQ7CisJZXh0ZXJuIG1lcmdlX29wdGlvbiBtZXJnZV9ieTsKKwlleHRlcm4gc3RkOjpzdHJpbmcgb3V0ZGlyZWN0b3J5OworCWV4dGVybiBib29sIGxpc3RfZmlsZXM7Cit9CisKKy8vLyBBbGwgdGhlIGNob3NlbiBzYW1wbGUgZmlsZXMuCitleHRlcm4gcHJvZmlsZV9jbGFzc2VzIGNsYXNzZXM7CitleHRlcm4gc3RkOjpsaXN0PHN0ZDo6c3RyaW5nPiBzYW1wbGVfZmlsZXM7CisKKy8qKgorICogaGFuZGxlX29wdGlvbnMgLSBwcm9jZXNzIGNvbW1hbmQgbGluZQorICogQHBhcmFtIHNwZWMgIHByb2ZpbGUgc3BlY2lmaWNhdGlvbgorICoKKyAqIFByb2Nlc3MgdGhlIHNwZWMsIGZhdGFsbHkgY29tcGxhaW5pbmcgb24gZXJyb3IuCisgKi8KK3ZvaWQgaGFuZGxlX29wdGlvbnMob3B0aW9uczo6c3BlYyBjb25zdCAmIHNwZWMpOworCisjZW5kaWYgLy8gT1BBUkNISVZFX09QVElPTlNfSApkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvcHAvb3BncHJvZi5jcHAgYi9vcHJvZmlsZS0wLjkuNy9wcC9vcGdwcm9mLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTUwZjIxCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvcHAvb3BncHJvZi5jcHAKQEAgLTAsMCArMSwzMjIgQEAKKy8qKgorICogQGZpbGUgb3BncHJvZi5jcHAKKyAqIEltcGxlbWVudCBvcGdwcm9mIHV0aWxpdHkKKyAqCisgKiBAcmVtYXJrIENvcHlyaWdodCAyMDAzIE9Qcm9maWxlIGF1dGhvcnMKKyAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCisgKgorICogQGF1dGhvciBKb2huIExldm9uCisgKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKKyAqLworCisjaW5jbHVkZSA8aW9zdHJlYW0+CisjaW5jbHVkZSA8Y3N0ZGlvPgorCisjaW5jbHVkZSAib3BfaGVhZGVyLmgiCisjaW5jbHVkZSAicHJvZmlsZS5oIgorI2luY2x1ZGUgIm9wX2xpYmliZXJ0eS5oIgorI2luY2x1ZGUgIm9wX2ZpbGVpby5oIgorI2luY2x1ZGUgInN0cmluZ19maWx0ZXIuaCIKKyNpbmNsdWRlICJwcm9maWxlX2NvbnRhaW5lci5oIgorI2luY2x1ZGUgImFycmFuZ2VfcHJvZmlsZXMuaCIKKyNpbmNsdWRlICJpbWFnZV9lcnJvcnMuaCIKKyNpbmNsdWRlICJvcGdwcm9mX29wdGlvbnMuaCIKKyNpbmNsdWRlICJjdmVyYi5oIgorI2luY2x1ZGUgIm9wX2ZpbGUuaCIKKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKworZXh0ZXJuIHByb2ZpbGVfY2xhc3NlcyBjbGFzc2VzOworCituYW1lc3BhY2UgeworCisjZGVmaW5lIEdNT05fVkVSU0lPTiAxCisjZGVmaW5lIEdNT05fVEFHX1RJTUVfSElTVCAwCisjZGVmaW5lIEdNT05fVEFHX0NHX0FSQyAxCisKK3N0cnVjdCBnbW9uX2hkciB7CisJY2hhciBjb29raWVbNF07CisJdTMyIHZlcnNpb247CisJdTMyIHNwYXJlWzNdOworfTsKKworCit2b2lkIG9wX3dyaXRlX3ZtYShGSUxFICogZnAsIG9wX2JmZCBjb25zdCAmIGFiZmQsIGJmZF92bWEgdm1hKQoreworCS8vIGJmZCB2bWEgd3JpdGUgc2l6ZSBpcyBhIHBlciBiaW5hcnkgcHJvcGVydHkgbm90IGEgYmZkCisJLy8gY29uZmlndXJhdGlvbiBwcm9wZXJ0eQorCXN3aXRjaCAoYWJmZC5iZmRfYXJjaF9iaXRzX3Blcl9hZGRyZXNzKCkpIHsKKwkJY2FzZSAzMjoKKwkJCW9wX3dyaXRlX3UzMihmcCwgdm1hKTsKKwkJCWJyZWFrOworCQljYXNlIDY0OgorCQkJb3Bfd3JpdGVfdTY0KGZwLCB2bWEpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQljZXJyIDw8ICJvcHJvZmlsZTogdW5rbm93biB2bWEgc2l6ZSBmb3IgdGhpcyBiaW5hcnlcbiI7CisJCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorfQorCisKK3ZvaWQgZ2V0X3ZtYV9yYW5nZShiZmRfdm1hICYgbWluLCBiZmRfdm1hICYgbWF4LAorICAgICAgICAgICAgICAgICAgIHByb2ZpbGVfY29udGFpbmVyIGNvbnN0ICYgc2FtcGxlcykKK3sKKwltaW4gPSBiZmRfdm1hKC0xKTsKKwltYXggPSAwOworCisJc2FtcGxlX2NvbnRhaW5lcjo6c2FtcGxlc19pdGVyYXRvciBpdCAgPSBzYW1wbGVzLmJlZ2luKCk7CisJc2FtcGxlX2NvbnRhaW5lcjo6c2FtcGxlc19pdGVyYXRvciBlbmQgPSBzYW1wbGVzLmVuZCgpOworCWZvciAoOyBpdCAhPSBlbmQgOyArK2l0KSB7CisJCWlmIChpdC0+c2Vjb25kLnZtYSA8IG1pbikKKwkJCW1pbiA9IGl0LT5zZWNvbmQudm1hOworCQlpZiAoaXQtPnNlY29uZC52bWEgPiBtYXgpCisJCQltYXggPSBpdC0+c2Vjb25kLnZtYTsKKwl9CisKKwlpZiAobWluID09IGJmZF92bWEoLTEpKQorCQltaW4gPSAwOworCS8vIHdlIG11c3QgcmV0dXJuIGEgcmFuZ2UgW21pbiwgbWF4KSBub3QgYSByYW5nZSBbbWluLCBtYXhdCisJaWYgKG1heCAhPSAwKQorCQltYXggKz0gMTsKK30KKworCisvKioKKyAqIEBwYXJhbSBhYmZkICBiZmQgb2JqZWN0CisgKiBAcGFyYW0gc2FtcGxlc19maWxlcyAgcHJvZmlsZSBjb250YWluZXIgdG8gYWN0IG9uCisgKiBAcGFyYW0gZ2FwICBhIHBvd2VyIG9mIDIKKyAqCisgKiByZXR1cm4gdHJ1ZSBpZiBhbGwgc2FtcGxlIGluIHNhbXBsZXNfZmlsZXMgYXJlIGF0IGxlYXN0IGFsaWduZWQgb24gZ2FwLiBUaGlzCisgKiBmdW5jdGlvbiBpcyB1c2VkIHRvIGdldCBhdCBydW50aW1lIHRoZSByaWdodCBzaXplIG9mIGdwcm9mIGJpbiBzaXplCisgKiByZWR1Y2luZyBnbW9uLm91dCBvbiBhcmNoIHdpdGggZml4ZWQgc2l6ZSBpbnN0cnVjdGlvbiBsZW5ndGgKKyAqCisgKi8KK2Jvb2wgYWxpZ25lZF9zYW1wbGVzKHByb2ZpbGVfY29udGFpbmVyIGNvbnN0ICYgc2FtcGxlcywgaW50IGdhcCkKK3sKKwlzYW1wbGVfY29udGFpbmVyOjpzYW1wbGVzX2l0ZXJhdG9yIGl0ICA9IHNhbXBsZXMuYmVnaW4oKTsKKwlzYW1wbGVfY29udGFpbmVyOjpzYW1wbGVzX2l0ZXJhdG9yIGVuZCA9IHNhbXBsZXMuZW5kKCk7CisJZm9yICg7IGl0ICE9IGVuZCA7ICsraXQpIHsKKwkJaWYgKGl0LT5zZWNvbmQudm1hICUgZ2FwKQorCQkJcmV0dXJuIGZhbHNlOworCX0KKworCXJldHVybiB0cnVlOworfQorCisKK3ZvaWQgb3V0cHV0X2NnKEZJTEUgKiBmcCwgb3BfYmZkIGNvbnN0ICYgYWJmZCwgcHJvZmlsZV90IGNvbnN0ICYgY2dfZGIpCit7CisJb3BkX2hlYWRlciBjb25zdCAmIGhlYWRlciA9IGNnX2RiLmdldF9oZWFkZXIoKTsKKwliZmRfdm1hIG9mZnNldCA9IDA7CisJaWYgKGhlYWRlci5pc19rZXJuZWwpCisJCW9mZnNldCA9IGFiZmQuZ2V0X3N0YXJ0X29mZnNldCgwKTsKKwllbHNlCisJCW9mZnNldCA9IGhlYWRlci5hbm9uX3N0YXJ0OworIAorCXByb2ZpbGVfdDo6aXRlcmF0b3JfcGFpciBwX2l0ID0gY2dfZGIuc2FtcGxlc19yYW5nZSgpOworCWZvciAoOyBwX2l0LmZpcnN0ICE9IHBfaXQuc2Vjb25kOyArK3BfaXQuZmlyc3QpIHsKKwkJYmZkX3ZtYSBmcm9tID0gcF9pdC5maXJzdC52bWEoKSA+PiAzMjsKKwkJYmZkX3ZtYSB0byA9IHBfaXQuZmlyc3Qudm1hKCkgJiAweGZmZmZmZmZmOworCisJCW9wX3dyaXRlX3U4KGZwLCBHTU9OX1RBR19DR19BUkMpOworCQlvcF93cml0ZV92bWEoZnAsIGFiZmQsIGFiZmQub2Zmc2V0X3RvX3BjKGZyb20gKyBvZmZzZXQpKTsKKwkJb3Bfd3JpdGVfdm1hKGZwLCBhYmZkLCBhYmZkLm9mZnNldF90b19wYyh0byArIG9mZnNldCkpOworCQl1MzIgY291bnQgPSBwX2l0LmZpcnN0LmNvdW50KCk7CisJCWlmIChjb3VudCAhPSBwX2l0LmZpcnN0LmNvdW50KCkpIHsKKwkJCWNvdW50ID0gKHUzMiktMTsKKwkJCWNlcnIgPDwgIldhcm5pbmc6IGNhcHBpbmcgc2FtcGxlIGNvdW50IGJ5ICIKKwkJCSAgICAgPDwgcF9pdC5maXJzdC5jb3VudCgpIC0gY291bnQgPDwgZW5kbDsKKwkJfQorCQlvcF93cml0ZV91MzIoZnAsIHBfaXQuZmlyc3QuY291bnQoKSk7CisJfQorfQorCisKK3ZvaWQgb3V0cHV0X2dwcm9mKG9wX2JmZCBjb25zdCAmIGFiZmQsIHByb2ZpbGVfY29udGFpbmVyIGNvbnN0ICYgc2FtcGxlcywKKyAgICAgICAgICAgICAgICAgIHByb2ZpbGVfdCBjb25zdCAmIGNnX2RiLCBzdHJpbmcgY29uc3QgJiBnbW9uX2ZpbGVuYW1lKQoreworCXN0YXRpYyBnbW9uX2hkciBoZHIgPSB7IHsgJ2cnLCAnbScsICdvJywgJ24nIH0sIEdNT05fVkVSU0lPTiwgezAsIDAsIDAgfSB9OworCisJYmZkX3ZtYSBsb3dfcGM7CisJYmZkX3ZtYSBoaWdoX3BjOworCisJLyogRklYTUUgd29ydGggdG8gdHJ5IG1vcmUgbXVsdGlwbGllciA/CSovCisJaW50IG11bHRpcGxpZXIgPSAyOworCWlmIChhbGlnbmVkX3NhbXBsZXMoc2FtcGxlcywgNCkpCisJCW11bHRpcGxpZXIgPSA4OworCisJY3ZlcmIgPDwgdmRlYnVnIDw8ICJvcGdyb2YgbXVsdGlwbGllcjogIiA8PCBtdWx0aXBsaWVyIDw8IGVuZGw7CisKKwlnZXRfdm1hX3JhbmdlKGxvd19wYywgaGlnaF9wYywgc2FtcGxlcyk7CisKKwljdmVyYiA8PCB2ZGVidWcgPDwgImxvd19wYzogIiA8PCBoZXggPDwgbG93X3BjIDw8ICIgIiA8PCAiaGlnaF9wYzogIgorCSAgICAgIDw8IGhpZ2hfcGMgPDwgZGVjIDw8IGVuZGw7CisKKwkvLyByb3VuZC1kb3duIGxvd19wYyB0byBlbnN1cmUgYmluIG51bWJlciBpcyBjb3JyZWN0IGluIHRoZSBpbm5lciBsb29wCisJbG93X3BjID0gKGxvd19wYyAvIG11bHRpcGxpZXIpICogbXVsdGlwbGllcjsKKwkvLyByb3VuZC11cCBoaWdoX3BjIHRvIGVuc3VyZSBhIGNvcnJlY3QgaGlzdHNpemUgY2FsY3VsdXMKKwloaWdoX3BjID0gKChoaWdoX3BjICsgbXVsdGlwbGllciAtIDEpIC8gbXVsdGlwbGllcikgKiBtdWx0aXBsaWVyOworCisJY3ZlcmIgPDwgdmRlYnVnIDw8ICJsb3dfcGM6ICIgPDwgaGV4IDw8IGxvd19wYyA8PCAiICIgPDwgImhpZ2hfcGM6ICIKKwkgICAgICA8PCBoaWdoX3BjIDw8IGRlYyA8PCBlbmRsOworCisJc2l6ZV90IGhpc3RzaXplID0gKGhpZ2hfcGMgLSBsb3dfcGMpIC8gbXVsdGlwbGllcjsKKworCS8vIEZJWE1FOiBtdXN0IHdlIHNraXAgdGhlIGZsYXQgcHJvZmlsZSB3cml0ZSBpZiBoaXN0c2l6ZSA9PSAwID8KKwkvLyAodGhpcyBjYW4gb2NjdXIgd2l0aCBjYWxsZ3JhcGggdy9vIHNhbXBsZXMgdG8gdGhlIGJpbmFyeSkgYnV0IGluCisJLy8gdGhpcyBjYXNlIHVzZXIgbXVzdCBncHJvZiAtLW5vLWZsYXQtcHJvZmlsZSB3aGljaCBpcyBhIGJpdCBib3JpbmcKKwkvLyBhbmQgcmVzdWx0ICpzZWVtcyogd2VpcmRzLgorCisJRklMRSAqIGZwID0gb3Bfb3Blbl9maWxlKGdtb25fZmlsZW5hbWUuY19zdHIoKSwgInciKTsKKworCW9wX3dyaXRlX2ZpbGUoZnAsICZoZHIsIHNpemVvZihnbW9uX2hkcikpOworCW9wX3dyaXRlX3U4KGZwLCBHTU9OX1RBR19USU1FX0hJU1QpOworCisJb3Bfd3JpdGVfdm1hKGZwLCBhYmZkLCBsb3dfcGMpOworCW9wX3dyaXRlX3ZtYShmcCwgYWJmZCwgaGlnaF9wYyk7CisJLyogc2l6ZSBvZiBoaXN0b2dyYW0gKi8KKwlvcF93cml0ZV91MzIoZnAsIGhpc3RzaXplKTsKKwkvKiBwcm9maWxpbmcgcmF0ZSAqLworCW9wX3dyaXRlX3UzMihmcCwgMSk7CisJb3Bfd3JpdGVfZmlsZShmcCwgInNhbXBsZXNcMFwwXDBcMFwwXDBcMFwwIiwgMTUpOworCS8qIGFiYnJldmlhdGlvbiAqLworCW9wX3dyaXRlX3U4KGZwLCAnMScpOworCisJdTE2ICogaGlzdCA9ICh1MTYqKXhjYWxsb2MoaGlzdHNpemUsIHNpemVvZih1MTYpKTsKKworCXByb2ZpbGVfY29udGFpbmVyOjpzeW1ib2xfY2hvaWNlIGNob2ljZTsKKwljaG9pY2UudGhyZXNob2xkID0gb3B0aW9uczo6dGhyZXNob2xkOworCXN5bWJvbF9jb2xsZWN0aW9uIHN5bWJvbHMgPSBzYW1wbGVzLnNlbGVjdF9zeW1ib2xzKGNob2ljZSk7CisKKwlzeW1ib2xfY29sbGVjdGlvbjo6Y29uc3RfaXRlcmF0b3Igc2l0ID0gc3ltYm9scy5iZWdpbigpOworCXN5bWJvbF9jb2xsZWN0aW9uOjpjb25zdF9pdGVyYXRvciBzZW5kID0gc3ltYm9scy5lbmQoKTsKKworCWZvciAoOyBzaXQgIT0gc2VuZDsgKytzaXQpIHsKKwkJc2FtcGxlX2NvbnRhaW5lcjo6c2FtcGxlc19pdGVyYXRvciBpdCAgPSBzYW1wbGVzLmJlZ2luKCpzaXQpOworCQlzYW1wbGVfY29udGFpbmVyOjpzYW1wbGVzX2l0ZXJhdG9yIGVuZCA9IHNhbXBsZXMuZW5kKCpzaXQpOworCQlmb3IgKDsgaXQgIT0gZW5kIDsgKytpdCkgeworCQkJdTMyIHBvcyA9IChpdC0+c2Vjb25kLnZtYSAtIGxvd19wYykgLyBtdWx0aXBsaWVyOworCQkJY291bnRfdHlwZSBjb3VudCA9IGl0LT5zZWNvbmQuY291bnRzWzBdOworCisJCQlpZiAocG9zID49IGhpc3RzaXplKSB7CisJCQkJY2VyciA8PCAiQm9ndXMgaGlzdG9ncmFtIGJpbiAiIDw8IHBvcworCQkJCSAgICAgPDwgIiwgbGFyZ2VyIHRoYW4gIiA8PCBwb3MgPDwgIiAhXG4iOworCQkJCWNvbnRpbnVlOworCQkJfQorCQorCQkJaWYgKGhpc3RbcG9zXSArIGNvdW50ID4gKHUxNiktMSkgeworCQkJCWhpc3RbcG9zXSA9ICh1MTYpLTE7CisJCQkJY2VyciA8PAkiV2FybmluZzogY2FwcGluZyBzYW1wbGUgY291bnQgYnkgIgorCQkJCSAgICAgPDwgaGlzdFtwb3NdICsgY291bnQgLSAoKHUxNiktMSkgPDwgZW5kbDsKKwkJCX0gZWxzZSB7CisJCQkJaGlzdFtwb3NdICs9ICh1MTYpY291bnQ7CisJCQl9CisJCX0KKwl9CisKKwlvcF93cml0ZV9maWxlKGZwLCBoaXN0LCBoaXN0c2l6ZSAqIHNpemVvZih1MTYpKTsKKworCWlmICghY2dfZGIuZW1wdHkoKSkKKwkJb3V0cHV0X2NnKGZwLCBhYmZkLCBjZ19kYik7CisKKwlvcF9jbG9zZV9maWxlKGZwKTsKKworCWZyZWUoaGlzdCk7Cit9CisKKwordm9pZAorbG9hZF9zYW1wbGVzKG9wX2JmZCBjb25zdCAmIGFiZmQsIGxpc3Q8cHJvZmlsZV9zYW1wbGVfZmlsZXM+IGNvbnN0ICYgZmlsZXMsCisgICAgICAgICAgICAgICAgICBzdHJpbmcgY29uc3QgJiBpbWFnZSwgcHJvZmlsZV9jb250YWluZXIgJiBzYW1wbGVzKQoreworCWxpc3Q8cHJvZmlsZV9zYW1wbGVfZmlsZXM+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGZpbGVzLmJlZ2luKCk7CisJbGlzdDxwcm9maWxlX3NhbXBsZV9maWxlcz46OmNvbnN0X2l0ZXJhdG9yIGNvbnN0IGVuZCA9IGZpbGVzLmVuZCgpOworCisJZm9yICg7IGl0ICE9IGVuZDsgKytpdCkgeworCQkvLyB3ZSBjYW4gZ2V0IGNhbGwgZ3JhcGggdy9vIGFueSBzYW1wbGVzIHRvIHRoZSBiaW5hcnkKKwkJaWYgKGl0LT5zYW1wbGVfZmlsZW5hbWUuZW1wdHkoKSkKKwkJCWNvbnRpbnVlOworCQkJCisJCWN2ZXJiIDw8IHZzZmlsZSA8PCAibG9hZGluZyBmbGF0IHNhbXBsZXMgZmlsZXMgOiAiCisJCSAgICAgIDw8IGl0LT5zYW1wbGVfZmlsZW5hbWUgPDwgZW5kbDsKKworCQlwcm9maWxlX3QgcHJvZmlsZTsKKworCQlwcm9maWxlLmFkZF9zYW1wbGVfZmlsZShpdC0+c2FtcGxlX2ZpbGVuYW1lKTsKKwkJcHJvZmlsZS5zZXRfb2Zmc2V0KGFiZmQpOworCisJCWNoZWNrX210aW1lKGFiZmQuZ2V0X2ZpbGVuYW1lKCksIHByb2ZpbGUuZ2V0X2hlYWRlcigpKTsKKworCQlzYW1wbGVzLmFkZChwcm9maWxlLCBhYmZkLCBpbWFnZSwgMCk7CisJfQorfQorCisKK3ZvaWQgbG9hZF9jZyhwcm9maWxlX3QgJiBjZ19kYiwgbGlzdDxwcm9maWxlX3NhbXBsZV9maWxlcz4gY29uc3QgJiBmaWxlcykKK3sKKwlsaXN0PHByb2ZpbGVfc2FtcGxlX2ZpbGVzPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBmaWxlcy5iZWdpbigpOworCWxpc3Q8cHJvZmlsZV9zYW1wbGVfZmlsZXM+Ojpjb25zdF9pdGVyYXRvciBjb25zdCBlbmQgPSBmaWxlcy5lbmQoKTsKKworCS8qIHRoZSBsaXN0IG9mIG5vbiBjZyBmaWxlcyBpcyBhIHN1cGVyIHNldCBvZiB0aGUgbGlzdCBvZiBjZyBmaWxlCisJICogKG1vZHVsZSBhbHdheXMgbG9nIGEgc2FtcGxlcyB0byBub24tY2cgZmlsZXMgYmVmb3JlIGxvZ2dpbmcKKwkgKiBjYWxsIHN0YWNrKSBzbyBieSB1c2luZyB0aGUgbGlzdCBvZiBub24tY2cgZmlsZSB3ZSBhcmUgc3VyZSB0byBnZXQKKwkgKiBhbGwgZXhpc3RpbmcgY2cgZmlsZXMuCisJICovCisJZm9yICg7IGl0ICE9IGVuZDsgKytpdCkgeworCQlsaXN0PHN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGNpdDsKKwkJbGlzdDxzdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBjb25zdCBjZW5kID0gaXQtPmNnX2ZpbGVzLmVuZCgpOworCQlmb3IgKGNpdCA9IGl0LT5jZ19maWxlcy5iZWdpbigpOyBjaXQgIT0gY2VuZDsgKytjaXQpIHsKKwkJCS8vIEZJWE1FOiBkbyB3ZSBuZWVkIGZpbHRlcmluZyA/CisJCQkvKiBXZSBjYW4ndCBoYW5kbGUgc3RhcnRfb2Zmc2V0IG5vdyBidXQgYWZ0ZXIgc3BsaXR0aW5nCisJCQkgKiBkYXRhIGluIGZyb20vdG8gZWlwLiAqLworCQkJY3ZlcmIgPDwgdnNmaWxlIDw8ICJsb2FkaW5nIGNnIHNhbXBsZXMgZmlsZSA6ICIgCisJCQkgICAgICA8PCAqY2l0IDw8IGVuZGw7CisJCQljZ19kYi5hZGRfc2FtcGxlX2ZpbGUoKmNpdCk7CisJCX0KKwl9Cit9CisKKworaW50IG9wZ3Byb2Yob3B0aW9uczo6c3BlYyBjb25zdCAmIHNwZWMpCit7CisJaGFuZGxlX29wdGlvbnMoc3BlYyk7CisKKwlwcm9maWxlX2NvbnRhaW5lciBzYW1wbGVzKGZhbHNlLCB0cnVlLCBjbGFzc2VzLmV4dHJhX2ZvdW5kX2ltYWdlcyk7CisKKwlib29sIG9rID0gaW1hZ2VfcHJvZmlsZS5lcnJvciA9PSBpbWFnZV9vazsKKwkvLyBGSVhNRTogc3ltYm9sX2ZpbHRlciB3b3VsZCBiZSBhbGxvd2VkIHRocm91Z2ggb3B0aW9uCisJb3BfYmZkIGFiZmQoaW1hZ2VfcHJvZmlsZS5pbWFnZSwgc3RyaW5nX2ZpbHRlcigpLAorCQkgICAgY2xhc3Nlcy5leHRyYV9mb3VuZF9pbWFnZXMsIG9rKTsKKwlpZiAoIW9rICYmIGltYWdlX3Byb2ZpbGUuZXJyb3IgPT0gaW1hZ2Vfb2spCisJCWltYWdlX3Byb2ZpbGUuZXJyb3IgPSBpbWFnZV9mb3JtYXRfZmFpbHVyZTsKKworCWlmIChpbWFnZV9wcm9maWxlLmVycm9yICE9IGltYWdlX29rKSB7CisJCXJlcG9ydF9pbWFnZV9lcnJvcihpbWFnZV9wcm9maWxlLCB0cnVlLAorCQkJCSAgIGNsYXNzZXMuZXh0cmFfZm91bmRfaW1hZ2VzKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKworCXByb2ZpbGVfdCBjZ19kYjsKKwkKKwlpbWFnZV9ncm91cF9zZXQgY29uc3QgJiBncm91cHMgPSBpbWFnZV9wcm9maWxlLmdyb3Vwc1swXTsKKwlpbWFnZV9ncm91cF9zZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0OworCWZvciAoaXQgPSBncm91cHMuYmVnaW4oKTsgaXQgIT0gZ3JvdXBzLmVuZCgpOyArK2l0KSB7CisJCWxvYWRfc2FtcGxlcyhhYmZkLCBpdC0+ZmlsZXMsIGltYWdlX3Byb2ZpbGUuaW1hZ2UsIHNhbXBsZXMpOworCisJCWxvYWRfY2coY2dfZGIsIGl0LT5maWxlcyk7CisJfQorCisJb3V0cHV0X2dwcm9mKGFiZmQsIHNhbXBsZXMsIGNnX2RiLCBvcHRpb25zOjpnbW9uX2ZpbGVuYW1lKTsKKworCXJldHVybiAwOworfQorCisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyIGNvbnN0ICogYXJndltdKQoreworCXJldHVybiBydW5fcHBfdG9vbChhcmdjLCBhcmd2LCBvcGdwcm9mKTsKK30KZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L3BwL29wZ3Byb2Zfb3B0aW9ucy5jcHAgYi9vcHJvZmlsZS0wLjkuNy9wcC9vcGdwcm9mX29wdGlvbnMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiZWFlYWMKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9wcC9vcGdwcm9mX29wdGlvbnMuY3BwCkBAIC0wLDAgKzEsMTI0IEBACisvKioKKyAqIEBmaWxlIG9wZ3Byb2Zfb3B0aW9ucy5jcHAKKyAqIE9wdGlvbnMgZm9yIG9wZ3Byb2YgdG9vbAorICoKKyAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDMgT1Byb2ZpbGUgYXV0aG9ycworICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKKyAqCisgKiBAYXV0aG9yIEpvaG4gTGV2b24KKyAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQorICovCisKKyNpbmNsdWRlIDxjc3RkbGliPgorCisjaW5jbHVkZSA8dmVjdG9yPgorI2luY2x1ZGUgPGxpc3Q+CisjaW5jbHVkZSA8aXRlcmF0b3I+CisjaW5jbHVkZSA8aW9zdHJlYW0+CisjaW5jbHVkZSA8Y3N0ZGxpYj4KKworI2luY2x1ZGUgIm9wZ3Byb2Zfb3B0aW9ucy5oIgorI2luY2x1ZGUgInBvcHRfb3B0aW9ucy5oIgorI2luY2x1ZGUgImN2ZXJiLmgiCisjaW5jbHVkZSAicHJvZmlsZV9zcGVjLmgiCisjaW5jbHVkZSAiYXJyYW5nZV9wcm9maWxlcy5oIgorCit1c2luZyBuYW1lc3BhY2Ugc3RkOworCitwcm9maWxlX2NsYXNzZXMgY2xhc3NlczsKK2ludmVydGVkX3Byb2ZpbGUgaW1hZ2VfcHJvZmlsZTsKKworbmFtZXNwYWNlIG9wdGlvbnMgeworCXN0cmluZyBnbW9uX2ZpbGVuYW1lID0gImdtb24ub3V0IjsKKworCS8vIFVnbHksIGZvciBidWlsZCBvbmx5CisJZGVtYW5nbGVfdHlwZSBkZW1hbmdsZTsKK30KKworCituYW1lc3BhY2UgeworCitwb3B0OjpvcHRpb24gb3B0aW9uc19hcnJheVtdID0geworCXBvcHQ6Om9wdGlvbihvcHRpb25zOjpnbW9uX2ZpbGVuYW1lLCAib3V0cHV0LWZpbGVuYW1lIiwgJ28nLAorCSAgICAgICAgICAgICAib3V0cHV0IGZpbGVuYW1lLCBkZWZhdWx0cyB0byBnbW9uLm91dCBpZiBub3Qgc3BlY2lmaWVkIiwKKwkgICAgICAgICAgICAgImZpbGVuYW1lIiksCisJcG9wdDo6b3B0aW9uKG9wdGlvbnM6OnRocmVzaG9sZF9vcHQsICJ0aHJlc2hvbGQiLCAndCcsCisJCSAgICAgIm1pbmltdW0gcGVyY2VudGFnZSBuZWVkZWQgdG8gcHJvZHVjZSBvdXRwdXQiLAorCQkgICAgICJwZXJjZW50IiksCit9OworCisKK2Jvb2wgdHJ5X21lcmdlX3Byb2ZpbGVzKHByb2ZpbGVfc3BlYyBjb25zdCAmIHNwZWMsIGJvb2wgZXhjbHVkZV9kZXBlbmRlbnQpCit7CisJbGlzdDxzdHJpbmc+IHNhbXBsZV9maWxlcyA9IHNwZWMuZ2VuZXJhdGVfZmlsZV9saXN0KGV4Y2x1ZGVfZGVwZW5kZW50LCBmYWxzZSk7CisKKwljdmVyYiA8PCB2c2ZpbGUKKwkgICAgICA8PCAiTWF0Y2hlZCBzYW1wbGUgZmlsZXM6ICIgPDwgc2FtcGxlX2ZpbGVzLnNpemUoKSA8PCBlbmRsOworCWNvcHkoc2FtcGxlX2ZpbGVzLmJlZ2luKCksIHNhbXBsZV9maWxlcy5lbmQoKSwKKwkgICAgIG9zdHJlYW1faXRlcmF0b3I8c3RyaW5nPihjdmVyYiA8PCB2c2ZpbGUsICJcbiIpKTsKKworCS8vIG9wZ3Byb2YgbWVyZ2UgYWxsIGJ5IGRlZmF1bHQKKwltZXJnZV9vcHRpb24gbWVyZ2VfYnk7CisJbWVyZ2VfYnkuY3B1ID0gdHJ1ZTsKKwltZXJnZV9ieS5saWIgPSB0cnVlOworCW1lcmdlX2J5LnRpZCA9IHRydWU7CisJbWVyZ2VfYnkudGdpZCA9IHRydWU7CisJbWVyZ2VfYnkudW5pdG1hc2sgPSB0cnVlOworCisJY2xhc3Nlcwk9IGFycmFuZ2VfcHJvZmlsZXMoc2FtcGxlX2ZpbGVzLCBtZXJnZV9ieSwKKwkJCQkgICBzcGVjLmV4dHJhX2ZvdW5kX2ltYWdlcyk7CisKKwljdmVyYiA8PCB2c2ZpbGUgPDwgInByb2ZpbGVfY2xhc3NlczpcbiIgPDwgY2xhc3NlcyA8PCBlbmRsOworCisJc2l6ZV90IG5yX2NsYXNzZXMgPSBjbGFzc2VzLnYuc2l6ZSgpOworCisJbGlzdDxpbnZlcnRlZF9wcm9maWxlPiBpcHJvZmlsZXMgPSBpbnZlcnRfcHJvZmlsZXMoY2xhc3Nlcyk7CisKKwlpZiAobnJfY2xhc3NlcyA9PSAxICYmIGlwcm9maWxlcy5zaXplKCkgPT0gMSkgeworCQlpbWFnZV9wcm9maWxlID0gKihpcHJvZmlsZXMuYmVnaW4oKSk7CisJCXJldHVybiB0cnVlOworCX0KKworCS8vIGNvbWUgcm91bmQgZm9yIGFub3RoZXIgdHJ5CisJaWYgKGV4Y2x1ZGVfZGVwZW5kZW50KQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZiAoaXByb2ZpbGVzLmVtcHR5KCkpIHsKKwkJY2VyciA8PCAiZXJyb3I6IG5vIHNhbXBsZSBmaWxlcyBmb3VuZDogcHJvZmlsZSBzcGVjaWZpY2F0aW9uICIKKwkJICAgICAidG9vIHN0cmljdCA/IiA8PCBlbmRsOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorCisJaWYgKG5yX2NsYXNzZXMgPiAxIHx8IGlwcm9maWxlcy5zaXplKCkgPiAxKSB7CisJCWNlcnIgPDwgImVycm9yOiBzcGVjaWZ5IGV4YWN0bHkgb25lIGJpbmFyeSB0byBwcm9jZXNzICIKKwkJICAgICAiYW5kIGdpdmUgYW4gZXZlbnQ6IG9yIGNvdW50OiBzcGVjaWZpY2F0aW9uIGlmIG5lY2Vzc2FyeSIKKwkJICAgICA8PCBlbmRsOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorCisJcmV0dXJuIGZhbHNlOworfQorCit9ICAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKKwordm9pZCBoYW5kbGVfb3B0aW9ucyhvcHRpb25zOjpzcGVjIGNvbnN0ICYgc3BlYykKK3sKKwlpZiAoc3BlYy5maXJzdC5zaXplKCkpIHsKKwkJY2VyciA8PCAiZGlmZmVyZW50aWFsIHByb2ZpbGVzIG5vdCBhbGxvd2VkIiA8PCBlbmRsOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorCisJcHJvZmlsZV9zcGVjIGNvbnN0IHBzcGVjID0KKwkJcHJvZmlsZV9zcGVjOjpjcmVhdGUoc3BlYy5jb21tb24sIG9wdGlvbnM6OmltYWdlX3BhdGgsCisJCQkJICAgICBvcHRpb25zOjpyb290X3BhdGgpOworCisJY3ZlcmIgPDwgdnNmaWxlIDw8ICJvdXRwdXQgZmlsZW5hbWU6ICIgPDwgb3B0aW9uczo6Z21vbl9maWxlbmFtZQorCSAgICAgIDw8IGVuZGw7CisKKwkvLyB3ZSBkbyBhIGZpcnN0IHRyeSB3aXRoIGV4Y2x1ZGUtZGVwZW5kZW50IGlmIGl0IGZhaWxzIHdlIGluY2x1ZGUKKwkvLyBkZXBlbmRlbnQuIEZpcnN0IHRyeSBzaG91bGQgY2F0Y2ggIm9wZ3JvZiAvdXNyL2Jpbi9tYWtlIiB3aGlsc3QKKwkvLyB0aGUgc2Vjb25kIGNhdGNoICJvcGdwcm9mIC9saWIvbGliYy0yLjIuNS5zbyIKKwlpZiAoIXRyeV9tZXJnZV9wcm9maWxlcyhwc3BlYywgdHJ1ZSkpCisJCXRyeV9tZXJnZV9wcm9maWxlcyhwc3BlYywgZmFsc2UpOworfQpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvcHAvb3BncHJvZl9vcHRpb25zLmggYi9vcHJvZmlsZS0wLjkuNy9wcC9vcGdwcm9mX29wdGlvbnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOWVkY2M4Ci0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvcHAvb3BncHJvZl9vcHRpb25zLmgKQEAgLTAsMCArMSwzNiBAQAorLyoqCisgKiBAZmlsZSBvcGdwcm9mX29wdGlvbnMuaAorICogT3B0aW9ucyBmb3Igb3BncHJvZiB0b29sCisgKgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMyBPUHJvZmlsZSBhdXRob3JzCisgKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORworICoKKyAqIEBhdXRob3IgSm9obiBMZXZvbgorICogQGF1dGhvciBQaGlsaXBwZSBFbGllCisgKi8KKworI2lmbmRlZiBPUEdQUk9GX09QVElPTlNfSAorI2RlZmluZSBPUEdQUk9GX09QVElPTlNfSAorCisjaW5jbHVkZSA8c3RyaW5nPgorCisjaW5jbHVkZSAiY29tbW9uX29wdGlvbi5oIgorCituYW1lc3BhY2Ugb3B0aW9ucyB7CisJZXh0ZXJuIHN0ZDo6c3RyaW5nIGdtb25fZmlsZW5hbWU7Cit9CisKK2NsYXNzIGludmVydGVkX3Byb2ZpbGU7CisKKy8vLyBhIHNldCBvZiBzYW1wbGUgZmlsZW5hbWVzIHRvIGhhbmRsZS4KK2V4dGVybiBpbnZlcnRlZF9wcm9maWxlIGltYWdlX3Byb2ZpbGU7CisKKy8qKgorICogaGFuZGxlX29wdGlvbnMgLSBwcm9jZXNzIGNvbW1hbmQgbGluZQorICogQHBhcmFtIHNwZWMgIHByb2ZpbGUgc3BlY2lmaWNhdGlvbgorICoKKyAqIFByb2Nlc3MgdGhlIHNwZWMsIGZhdGFsbHkgY29tcGxhaW5pbmcgb24gZXJyb3IuCisgKi8KK3ZvaWQgaGFuZGxlX29wdGlvbnMob3B0aW9uczo6c3BlYyBjb25zdCAmIHNwZWMpOworCisjZW5kaWYgLy8gT1BHUFJPRl9PUFRJT05TX0gKZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L3BwL29wcmVwb3J0LmNwcCBiL29wcm9maWxlLTAuOS43L3BwL29wcmVwb3J0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjcwNDNjCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvcHAvb3ByZXBvcnQuY3BwCkBAIC0wLDAgKzEsNTkxIEBACisvKioKKyAqIEBmaWxlIG9wcmVwb3J0LmNwcAorICogSW1wbGVtZW50IG9wcmVwb3J0IHV0aWxpdHkKKyAqCisgKiBAcmVtYXJrIENvcHlyaWdodCAyMDAzIE9Qcm9maWxlIGF1dGhvcnMKKyAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCisgKgorICogQGF1dGhvciBKb2huIExldm9uCisgKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKKyAqLworCisjaW5jbHVkZSA8aW9zdHJlYW0+CisjaW5jbHVkZSA8aW9tYW5pcD4KKyNpbmNsdWRlIDx2ZWN0b3I+CisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPHNzdHJlYW0+CisjaW5jbHVkZSA8bnVtZXJpYz4KKworI2luY2x1ZGUgIm9wX2V4Y2VwdGlvbi5oIgorI2luY2x1ZGUgInN0cmVhbV91dGlsLmgiCisjaW5jbHVkZSAic3RyaW5nX21hbmlwLmgiCisjaW5jbHVkZSAiZmlsZV9tYW5pcC5oIgorI2luY2x1ZGUgIm9wcmVwb3J0X29wdGlvbnMuaCIKKyNpbmNsdWRlICJvcF9oZWFkZXIuaCIKKyNpbmNsdWRlICJwcm9maWxlLmgiCisjaW5jbHVkZSAicG9wdWxhdGUuaCIKKyNpbmNsdWRlICJhcnJhbmdlX3Byb2ZpbGVzLmgiCisjaW5jbHVkZSAicHJvZmlsZV9jb250YWluZXIuaCIKKyNpbmNsdWRlICJjYWxsZ3JhcGhfY29udGFpbmVyLmgiCisjaW5jbHVkZSAiZGlmZl9jb250YWluZXIuaCIKKyNpbmNsdWRlICJzeW1ib2xfc29ydC5oIgorI2luY2x1ZGUgImZvcm1hdF9vdXRwdXQuaCIKKyNpbmNsdWRlICJ4bWxfdXRpbHMuaCIKKyNpbmNsdWRlICJpbWFnZV9lcnJvcnMuaCIKKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKworbmFtZXNwYWNlIHsKKworc3RhdGljIHNpemVfdCBucl9jbGFzc2VzOworCisvLy8gc3RvcmFnZSBmb3IgYSBtZXJnZWQgZmlsZSBzdW1tYXJ5CitzdHJ1Y3Qgc3VtbWFyeSB7CisJY291bnRfYXJyYXlfdCBjb3VudHM7CisJc3RyaW5nIGxpYl9pbWFnZTsKKworCWJvb2wgb3BlcmF0b3I8KHN1bW1hcnkgY29uc3QgJiByaHMpIGNvbnN0IHsKKwkJcmV0dXJuIG9wdGlvbnM6OnJldmVyc2Vfc29ydAorCQkgICAgPyBjb3VudHNbMF0gPCByaHMuY291bnRzWzBdIDogcmhzLmNvdW50c1swXSA8IGNvdW50c1swXTsKKwl9CisKKwkvLy8gYWRkIGEgc2V0IG9mIGZpbGVzIHRvIGEgc3VtbWFyeQorCWNvdW50X3R5cGUgYWRkX2ZpbGVzKGxpc3Q8cHJvZmlsZV9zYW1wbGVfZmlsZXM+IGNvbnN0ICYgZmlsZXMsCisJICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHBjbGFzcyk7Cit9OworCisKK2NvdW50X3R5cGUgc3VtbWFyeTo6CithZGRfZmlsZXMobGlzdDxwcm9maWxlX3NhbXBsZV9maWxlcz4gY29uc3QgJiBmaWxlcywgc2l6ZV90IHBjbGFzcykKK3sKKwljb3VudF90eXBlIHN1YnRvdGFsID0gMDsKKworCWxpc3Q8cHJvZmlsZV9zYW1wbGVfZmlsZXM+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGZpbGVzLmJlZ2luKCk7CisJbGlzdDxwcm9maWxlX3NhbXBsZV9maWxlcz46OmNvbnN0X2l0ZXJhdG9yIGNvbnN0IGVuZCA9IGZpbGVzLmVuZCgpOworCisJZm9yICg7IGl0ICE9IGVuZDsgKytpdCkgeworCQljb3VudF90eXBlIGNvdW50ID0gcHJvZmlsZV90OjpzYW1wbGVfY291bnQoaXQtPnNhbXBsZV9maWxlbmFtZSk7CisJCWNvdW50c1twY2xhc3NdICs9IGNvdW50OworCQlzdWJ0b3RhbCArPSBjb3VudDsKKworCQlpZiAoIWl0LT5jZ19maWxlcy5lbXB0eSgpKSB7CisJCQl0aHJvdyBvcF9ydW50aW1lX2Vycm9yKCJvcHJlcG9ydC5jcHA6OmFkZF9maWxlcygpOiAiCisJCQkgICAgICAgInVueHBlY3RlZCBub24gZW1wdHkgY2cgZmlsZSBzZXQiKTsKKwkJfQorCX0KKworCXJldHVybiBzdWJ0b3RhbDsKK30KKworCisvKioKKyAqIFN1bW1hcnkgb2YgYW4gYXBwbGljYXRpb246IGEgc2V0IG9mIGltYWdlIHN1bW1hcmllcworICogZm9yIG9uZSBhcHBsaWNhdGlvbiwgaS5lLiBhbiBhcHBsaWNhdGlvbiBpbWFnZSBhbmQgYWxsCisgKiBkZXBlbmRlbnQgaW1hZ2VzIHN1Y2ggYXMgbGlicmFyaWVzLgorICovCitzdHJ1Y3QgYXBwX3N1bW1hcnkgeworCS8vLyB0b3RhbCBjb3VudCBvZiB1cyBhbmQgYWxsIGRlcGVuZGVudHMKKwljb3VudF9hcnJheV90IGNvdW50czsKKwkvLy8gdGhlIG1haW4gaW1hZ2UKKwlzdHJpbmcgaW1hZ2U7CisJLy8vIG91ciBkZXBlbmRlbnQgaW1hZ2VzCisJdmVjdG9yPHN1bW1hcnk+IGRlcHM7CisKKwkvLy8gY29uc3RydWN0IGFuZCBmaWxsIGluIHRoZSBkYXRhCisJY291bnRfdHlwZSBhZGRfcHJvZmlsZShwcm9maWxlX3NldCBjb25zdCAmIHByb2ZpbGUsIHNpemVfdCBwY2xhc3MpOworCisJYm9vbCBvcGVyYXRvcjwoYXBwX3N1bW1hcnkgY29uc3QgJiByaHMpIGNvbnN0IHsKKwkJcmV0dXJuIG9wdGlvbnM6OnJldmVyc2Vfc29ydCAKKwkJICAgID8gY291bnRzWzBdIDwgcmhzLmNvdW50c1swXSA6IHJocy5jb3VudHNbMF0gPCBjb3VudHNbMF07CisJfQorCitwcml2YXRlOgorCS8vLyBmaW5kIGEgbWF0Y2hpbmcgc3VtbWFyeSAoaW5jbHVkaW5nIG1haW4gYXBwIHN1bW1hcnkpCisJc3VtbWFyeSAmIGZpbmRfc3VtbWFyeShzdHJpbmcgY29uc3QgJiBpbWFnZSk7Cit9OworCisKK3N1bW1hcnkgJiBhcHBfc3VtbWFyeTo6ZmluZF9zdW1tYXJ5KHN0cmluZyBjb25zdCAmIGltYWdlKQoreworCXZlY3RvcjxzdW1tYXJ5Pjo6aXRlcmF0b3Igc2l0ID0gZGVwcy5iZWdpbigpOworCXZlY3RvcjxzdW1tYXJ5Pjo6aXRlcmF0b3IgY29uc3Qgc2VuZCA9IGRlcHMuZW5kKCk7CisJZm9yICg7IHNpdCAhPSBzZW5kOyArK3NpdCkgeworCQlpZiAoc2l0LT5saWJfaW1hZ2UgPT0gaW1hZ2UpCisJCQlyZXR1cm4gKnNpdDsKKwl9CisKKwlzdW1tYXJ5IHN1bW07CisJc3VtbS5saWJfaW1hZ2UgPSBpbWFnZTsKKwlkZXBzLnB1c2hfYmFjayhzdW1tKTsKKwlyZXR1cm4gZGVwcy5iYWNrKCk7Cit9CisKKworY291bnRfdHlwZSBhcHBfc3VtbWFyeTo6YWRkX3Byb2ZpbGUocHJvZmlsZV9zZXQgY29uc3QgJiBwcm9maWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgcGNsYXNzKQoreworCWNvdW50X3R5cGUgZ3JvdXBfdG90YWwgPSAwOworCisJLy8gZmlyc3QgdGhlIG1haW4gaW1hZ2UKKwlzdW1tYXJ5ICYgc3VtbSA9IGZpbmRfc3VtbWFyeShwcm9maWxlLmltYWdlKTsKKwljb3VudF90eXBlIGFwcF9jb3VudCA9IHN1bW0uYWRkX2ZpbGVzKHByb2ZpbGUuZmlsZXMsIHBjbGFzcyk7CisJY291bnRzW3BjbGFzc10gKz0gYXBwX2NvdW50OworCWdyb3VwX3RvdGFsICs9IGFwcF9jb3VudDsKKworCS8vIG5vdyBhbGwgZGVwZW5kZW50IGltYWdlcyBpZiBhbnkKKwlsaXN0PHByb2ZpbGVfZGVwX3NldD46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcHJvZmlsZS5kZXBzLmJlZ2luKCk7CisJbGlzdDxwcm9maWxlX2RlcF9zZXQ+Ojpjb25zdF9pdGVyYXRvciBjb25zdCBlbmQgPSBwcm9maWxlLmRlcHMuZW5kKCk7CisKKwlmb3IgKDsgaXQgIT0gZW5kOyArK2l0KSB7CisJCXN1bW1hcnkgJiBzdW1tID0gZmluZF9zdW1tYXJ5KGl0LT5saWJfaW1hZ2UpOworCQljb3VudF90eXBlIGxpYl9jb3VudCA9IHN1bW0uYWRkX2ZpbGVzKGl0LT5maWxlcywgcGNsYXNzKTsKKwkJY291bnRzW3BjbGFzc10gKz0gbGliX2NvdW50OworCQlncm91cF90b3RhbCArPSBsaWJfY291bnQ7CisJfQorCisJcmV0dXJuIGdyb3VwX3RvdGFsOworfQorCisKKy8vLyBhbGwgdGhlIHN1bW1hcmllcworc3RydWN0IHN1bW1hcnlfY29udGFpbmVyIHsKKwlzdW1tYXJ5X2NvbnRhaW5lcih2ZWN0b3I8cHJvZmlsZV9jbGFzcz4gY29uc3QgJiBwY2xhc3Nlcyk7CisKKwkvLy8gYWxsIG1hcCBzdW1tYXJpZXMKKwl2ZWN0b3I8YXBwX3N1bW1hcnk+IGFwcHM7CisJLy8vIHRvdGFsIGNvdW50IG9mIHNhbXBsZXMgZm9yIGFsbCBzdW1tYXJpZXMKKwljb3VudF9hcnJheV90IHRvdGFsX2NvdW50czsKK307CisKKworc3VtbWFyeV9jb250YWluZXI6Ogorc3VtbWFyeV9jb250YWluZXIodmVjdG9yPHByb2ZpbGVfY2xhc3M+IGNvbnN0ICYgcGNsYXNzZXMpCit7CisJdHlwZWRlZiBtYXA8c3RyaW5nLCBhcHBfc3VtbWFyeT4gYXBwX21hcF90OworCWFwcF9tYXBfdCBhcHBfbWFwOworCisJZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwY2xhc3Nlcy5zaXplKCk7ICsraSkgeworCQlsaXN0PHByb2ZpbGVfc2V0Pjo6Y29uc3RfaXRlcmF0b3IgaXQKKwkJCT0gcGNsYXNzZXNbaV0ucHJvZmlsZXMuYmVnaW4oKTsKKwkJbGlzdDxwcm9maWxlX3NldD46OmNvbnN0X2l0ZXJhdG9yIGNvbnN0IGVuZAorCQkJPSBwY2xhc3Nlc1tpXS5wcm9maWxlcy5lbmQoKTsKKworCQlmb3IgKDsgaXQgIT0gZW5kOyArK2l0KSB7CisJCQlhcHBfbWFwX3Q6Oml0ZXJhdG9yIGFpdCA9IGFwcF9tYXAuZmluZChpdC0+aW1hZ2UpOworCQkJaWYgKGFpdCA9PSBhcHBfbWFwLmVuZCgpKSB7CisJCQkJYXBwX3N1bW1hcnkgYXBwOworCQkJCWFwcC5pbWFnZSA9IGl0LT5pbWFnZTsKKwkJCQl0b3RhbF9jb3VudHNbaV0gKz0gYXBwLmFkZF9wcm9maWxlKCppdCwgaSk7CisJCQkJYXBwX21hcFthcHAuaW1hZ2VdID0gYXBwOworCQkJfSBlbHNlIHsKKwkJCQl0b3RhbF9jb3VudHNbaV0KKwkJCQkJKz0gYWl0LT5zZWNvbmQuYWRkX3Byb2ZpbGUoKml0LCBpKTsKKwkJCX0KKwkJfQorCX0KKworCWFwcF9tYXBfdDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBhcHBfbWFwLmJlZ2luKCk7CisJYXBwX21hcF90Ojpjb25zdF9pdGVyYXRvciBjb25zdCBlbmQgPSBhcHBfbWFwLmVuZCgpOworCisJZm9yICg7IGl0ICE9IGVuZDsgKytpdCkKKwkJYXBwcy5wdXNoX2JhY2soaXQtPnNlY29uZCk7CisKKwkvLyBzb3J0IGJ5IGNvdW50CisJc3RhYmxlX3NvcnQoYXBwcy5iZWdpbigpLCBhcHBzLmVuZCgpKTsKKwl2ZWN0b3I8YXBwX3N1bW1hcnk+OjppdGVyYXRvciBhaXQgPSBhcHBzLmJlZ2luKCk7CisJdmVjdG9yPGFwcF9zdW1tYXJ5Pjo6aXRlcmF0b3IgY29uc3QgYWVuZCA9IGFwcHMuZW5kKCk7CisJZm9yICg7IGFpdCAhPSBhZW5kOyArK2FpdCkKKwkJc3RhYmxlX3NvcnQoYWl0LT5kZXBzLmJlZ2luKCksIGFpdC0+ZGVwcy5lbmQoKSk7Cit9CisKKwordm9pZCBvdXRwdXRfaGVhZGVyKCkKK3sKKwlpZiAoIW9wdGlvbnM6OnNob3dfaGVhZGVyKQorCQlyZXR1cm47CisKKwljb3V0IDw8IGNsYXNzZXMuY3B1aW5mbyA8PCBlbmRsOworCWlmICghY2xhc3Nlcy5ldmVudC5lbXB0eSgpKQorCQljb3V0IDw8IGNsYXNzZXMuZXZlbnQgPDwgZW5kbDsKKworCWZvciAodmVjdG9yPHByb2ZpbGVfY2xhc3M+OjpzaXplX3R5cGUgaSA9IDA7CisJICAgICBpIDwgY2xhc3Nlcy52LnNpemUoKTsgKytpKSB7CisJCWNvdXQgPDwgY2xhc3Nlcy52W2ldLmxvbmduYW1lIDw8IGVuZGw7CisJfQorfQorCisKK3N0cmluZyBnZXRfZmlsZW5hbWUoc3RyaW5nIGNvbnN0ICYgZmlsZW5hbWUpCit7CisJcmV0dXJuIG9wdGlvbnM6OmxvbmdfZmlsZW5hbWVzID8gZmlsZW5hbWUgOiBvcF9iYXNlbmFtZShmaWxlbmFtZSk7Cit9CisKKworLy8vIE91dHB1dCBhIGNvdW50IGFuZCBhIHBlcmNlbnRhZ2UKK3ZvaWQgb3V0cHV0X2NvdW50KGNvdW50X3R5cGUgdG90YWxfY291bnQsIGNvdW50X3R5cGUgY291bnQpCit7CisJY291dCA8PCBzZXR3KDkpIDw8IGNvdW50IDw8ICcgJzsKKwlkb3VibGUgcmF0aW8gPSBvcF9yYXRpbyhjb3VudCwgdG90YWxfY291bnQpOworCWNvdXQgPDwgZm9ybWF0X3BlcmNlbnQocmF0aW8gKiAxMDAsIHBlcmNlbnRfaW50X3dpZHRoLAorCQkJICAgICAgcGVyY2VudF9mcmFjdF93aWR0aCkgPDwgJyAnOworfQorCisKK3ZvaWQgb3V0cHV0X2NvbF9oZWFkZXJzKGJvb2wgaW5kZW50KQoreworCWlmICghb3B0aW9uczo6c2hvd19oZWFkZXIpCisJCXJldHVybjsKKworCWlmIChpbmRlbnQpCisJCWNvdXQgPDwgJ1x0JzsKKworCXNpemVfdCBjb2x3aWR0aCA9IDkgKyAxICsgcGVyY2VudF93aWR0aDsKKworCWZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2xhc3Nlcy52LnNpemUoKTsgKytpKSB7CisJCXN0cmluZyBuYW1lID0gY2xhc3Nlcy52W2ldLm5hbWU7CisJCWlmIChuYW1lLmxlbmd0aCgpID4gY29sd2lkdGgpCisJCQluYW1lID0gbmFtZS5zdWJzdHIoMCwgY29sd2lkdGggLSAzKQorCQkJCSsgIi4uLiI7CisJCWlvX3N0YXRlIHN0YXRlKGNvdXQpOworCQkvLyBnY2MgMi45NSBkb2Vzbid0IGtub3cgcmlnaHQgaW8gbWFuaXB1bGF0b3IKKwkJY291dC5zZXRmKGlvczo6cmlnaHQsIGlvczo6YWRqdXN0ZmllbGQpOworCQkvLyBnY2MgMi45NSBkb2Vzbid0IGhvbm9yIHNldHcoKSBmb3Igc3RkOjpzdHJpbmcKKwkJY291dCA8PCBzZXR3KGNvbHdpZHRoKSA8PCBuYW1lLmNfc3RyKCk7CisJCWNvdXQgPDwgJ3wnOworCX0KKwljb3V0IDw8ICdcbic7CisKKwlpZiAoaW5kZW50KQorCQljb3V0IDw8ICdcdCc7CisKKwlmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNsYXNzZXMudi5zaXplKCk7ICsraSkgeworCQljb3V0IDw8ICIgIHNhbXBsZXN8ICI7CisJCWlvX3N0YXRlIHN0YXRlKGNvdXQpOworCQkvLyBnY2MgMi45NSBkb2Vzbid0IGtub3cgcmlnaHQgaW8gbWFuaXB1bGF0b3IKKwkJY291dC5zZXRmKGlvczo6cmlnaHQsIGlvczo6YWRqdXN0ZmllbGQpOworCQljb3V0IDw8IHNldHcocGVyY2VudF93aWR0aCkgPDwgIiV8IjsKKwl9CisKKwljb3V0IDw8ICdcbic7CisKKwlpZiAoaW5kZW50KQorCQljb3V0IDw8ICdcdCc7CisKKwlmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNsYXNzZXMudi5zaXplKCk7ICsraSkgeworCQljb3V0IDw8ICItLS0tLS0tLS0tLSI7CisJCXN0cmluZyBzdHIocGVyY2VudF93aWR0aCwgJy0nKTsKKwkJY291dCA8PCBzdHI7CisJfQorCisJY291dCA8PCAnXG4nOworfQorCisKK3ZvaWQKK291dHB1dF9kZXBzKHN1bW1hcnlfY29udGFpbmVyIGNvbnN0ICYgc3VtbWFyaWVzLAorCSAgICBhcHBfc3VtbWFyeSBjb25zdCAmIGFwcCkKK3sKKwkvLyB0aGUgYXBwIHN1bW1hcnkgaXRzZWxmIGlzICphbHdheXMqIHByZXNlbnQKKwkvLyAocGVyaGFwcyB3aXRoIHplcm8gY291bnRzKSBzbyB0aGlzIHRlc3QKKwkvLyBpcyBjb3JyZWN0CisJaWYgKGFwcC5kZXBzLnNpemUoKSA9PSAxKQorCQlyZXR1cm47CisKKwlvdXRwdXRfY29sX2hlYWRlcnModHJ1ZSk7CisKKwlmb3IgKHNpemVfdCBqID0gMCA7IGogPCBhcHAuZGVwcy5zaXplKCk7ICsraikgeworCQlzdW1tYXJ5IGNvbnN0ICYgc3VtbSA9IGFwcC5kZXBzW2pdOworCisJCWlmIChzdW1tLmNvdW50cy56ZXJvKCkpCisJCQljb250aW51ZTsKKworCQljb3V0IDw8ICdcdCc7CisKKwkJZm9yIChzaXplX3QgaSA9IDA7IGkgPCBucl9jbGFzc2VzOyArK2kpIHsKKwkJCWNvdW50X3R5cGUgdG90X2NvdW50ID0gb3B0aW9uczo6Z2xvYmFsX3BlcmNlbnQKKwkJCQk/IHN1bW1hcmllcy50b3RhbF9jb3VudHNbaV0gOiBhcHAuY291bnRzW2ldOworCisJCQlvdXRwdXRfY291bnQodG90X2NvdW50LCBzdW1tLmNvdW50c1tpXSk7CisJCX0KKworCQljb3V0IDw8IGdldF9maWxlbmFtZShzdW1tLmxpYl9pbWFnZSk7CisJCWNvdXQgPDwgJ1xuJzsKKwl9Cit9CisKKworLyoqCisgKiBEaXNwbGF5IGFsbCB0aGUgZ2l2ZW4gc3VtbWFyeSBpbmZvcm1hdGlvbgorICovCit2b2lkIG91dHB1dF9zdW1tYXJpZXMoc3VtbWFyeV9jb250YWluZXIgY29uc3QgJiBzdW1tYXJpZXMpCit7CisJb3V0cHV0X2NvbF9oZWFkZXJzKGZhbHNlKTsKKworCWZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3VtbWFyaWVzLmFwcHMuc2l6ZSgpOyArK2kpIHsKKwkJYXBwX3N1bW1hcnkgY29uc3QgJiBhcHAgPSBzdW1tYXJpZXMuYXBwc1tpXTsKKworCQlpZiAoKGFwcC5jb3VudHNbMF0gKiAxMDAuMCkgLyBzdW1tYXJpZXMudG90YWxfY291bnRzWzBdCisJCSAgICA8IG9wdGlvbnM6OnRocmVzaG9sZCkgeworCQkJY29udGludWU7CisJCX0KKworCQlmb3IgKHNpemVfdCBqID0gMDsgaiA8IG5yX2NsYXNzZXM7ICsraikKKwkJCW91dHB1dF9jb3VudChzdW1tYXJpZXMudG90YWxfY291bnRzW2pdLCBhcHAuY291bnRzW2pdKTsKKworCQljb3V0IDw8IGdldF9maWxlbmFtZShhcHAuaW1hZ2UpIDw8ICdcbic7CisKKwkJb3V0cHV0X2RlcHMoc3VtbWFyaWVzLCBhcHApOworCX0KK30KKworCitmb3JtYXRfZmxhZ3MgZ2V0X2Zvcm1hdF9mbGFncyhjb2x1bW5fZmxhZ3MgY29uc3QgJiBjZikKK3sKKwlmb3JtYXRfZmxhZ3MgZmxhZ3MoZmZfbm9uZSk7CisJZmxhZ3MgPSBmb3JtYXRfZmxhZ3MoZmxhZ3MgfCBmZl9ucl9zYW1wbGVzKTsKKwlmbGFncyA9IGZvcm1hdF9mbGFncyhmbGFncyB8IGZmX3BlcmNlbnQgfCBmZl9zeW1iX25hbWUpOworCisJaWYgKG9wdGlvbnM6OnNob3dfYWRkcmVzcykKKwkJZmxhZ3MgPSBmb3JtYXRfZmxhZ3MoZmxhZ3MgfCBmZl92bWEpOworCisJaWYgKG9wdGlvbnM6OmRlYnVnX2luZm8pCisJCWZsYWdzID0gZm9ybWF0X2ZsYWdzKGZsYWdzIHwgZmZfbGluZW5yX2luZm8pOworCisJaWYgKG9wdGlvbnM6OmFjY3VtdWxhdGVkKSB7CisJCWZsYWdzID0gZm9ybWF0X2ZsYWdzKGZsYWdzIHwgZmZfbnJfc2FtcGxlc19jdW11bGF0ZWQpOworCQlmbGFncyA9IGZvcm1hdF9mbGFncyhmbGFncyB8IGZmX3BlcmNlbnRfY3VtdWxhdGVkKTsKKwl9CisKKwlpZiAoY2xhc3NlczIudi5zaXplKCkpCisJCWZsYWdzID0gZm9ybWF0X2ZsYWdzKGZsYWdzIHwgZmZfZGlmZik7CisKKwlpZiAoY2YgJiBjZl9pbWFnZV9uYW1lKQorCQlmbGFncyA9IGZvcm1hdF9mbGFncyhmbGFncyB8IGZmX2ltYWdlX25hbWUpOworCisJcmV0dXJuIGZsYWdzOworfQorCisKK3ZvaWQgb3V0cHV0X3N5bWJvbHMocHJvZmlsZV9jb250YWluZXIgY29uc3QgJiBwYywgYm9vbCBtdWx0aXBsZV9hcHBzKQoreworCXByb2ZpbGVfY29udGFpbmVyOjpzeW1ib2xfY2hvaWNlIGNob2ljZTsKKwljaG9pY2UudGhyZXNob2xkID0gb3B0aW9uczo6dGhyZXNob2xkOworCXN5bWJvbF9jb2xsZWN0aW9uIHN5bWJvbHMgPSBwYy5zZWxlY3Rfc3ltYm9scyhjaG9pY2UpOworCW9wdGlvbnM6OnNvcnRfYnkuc29ydChzeW1ib2xzLCBvcHRpb25zOjpyZXZlcnNlX3NvcnQsCisJICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6OmxvbmdfZmlsZW5hbWVzKTsKKwlmb3JtYXRfb3V0cHV0Ojpmb3JtYXR0ZXIgKiBvdXQ7CisJZm9ybWF0X291dHB1dDo6eG1sX2Zvcm1hdHRlciAqIHhtbF9vdXQgPSAwOworCWZvcm1hdF9vdXRwdXQ6Om9wcmVwb3J0X2Zvcm1hdHRlciAqIHRleHRfb3V0ID0gMDsKKworCWlmIChvcHRpb25zOjp4bWwpIHsKKwkJeG1sX291dCA9IG5ldyBmb3JtYXRfb3V0cHV0Ojp4bWxfZm9ybWF0dGVyKCZwYywgc3ltYm9scywKKwkJCXBjLmV4dHJhX2ZvdW5kX2ltYWdlcywgb3B0aW9uczo6c3ltYm9sX2ZpbHRlcik7CisJCXhtbF9vdXQtPnNob3dfZGV0YWlscyhvcHRpb25zOjpkZXRhaWxzKTsKKwkJb3V0ID0geG1sX291dDsKKwkJLy8gZm9yIFhNTCBhbHdheXMgb3V0cHV0IGxvbmcgZmlsZW5hbWVzCisJCW91dC0+c2hvd19sb25nX2ZpbGVuYW1lcyh0cnVlKTsKKwl9IGVsc2UgeworCQl0ZXh0X291dCA9IG5ldyBmb3JtYXRfb3V0cHV0OjpvcHJlcG9ydF9mb3JtYXR0ZXIocGMpOworCQl0ZXh0X291dC0+c2hvd19kZXRhaWxzKG9wdGlvbnM6OmRldGFpbHMpOworCQlvdXQgPSB0ZXh0X291dDsKKwkJb3V0LT5zaG93X2xvbmdfZmlsZW5hbWVzKG9wdGlvbnM6OmxvbmdfZmlsZW5hbWVzKTsKKwl9CisKKwlvdXQtPnNldF9ucl9jbGFzc2VzKG5yX2NsYXNzZXMpOworCW91dC0+c2hvd19oZWFkZXIob3B0aW9uczo6c2hvd19oZWFkZXIpOworCW91dC0+dm1hX2Zvcm1hdF82NGJpdChjaG9pY2UuaGludHMgJiBjZl82NGJpdF92bWEpOworCW91dC0+c2hvd19nbG9iYWxfcGVyY2VudChvcHRpb25zOjpnbG9iYWxfcGVyY2VudCk7CisKKwlmb3JtYXRfZmxhZ3MgZmxhZ3MgPSBnZXRfZm9ybWF0X2ZsYWdzKGNob2ljZS5oaW50cyk7CisJaWYgKG11bHRpcGxlX2FwcHMpCisJCWZsYWdzID0gZm9ybWF0X2ZsYWdzKGZsYWdzIHwgZmZfYXBwX25hbWUpOworCisJb3V0LT5hZGRfZm9ybWF0KGZsYWdzKTsKKworCWlmIChvcHRpb25zOjp4bWwpIHsKKwkJeG1sX3N1cHBvcnQgPSBuZXcgeG1sX3V0aWxzKHhtbF9vdXQsIHN5bWJvbHMsIG5yX2NsYXNzZXMsCisJCQlwYy5leHRyYV9mb3VuZF9pbWFnZXMpOworCQl4bWxfb3V0LT5vdXRwdXQoY291dCk7CisJfSBlbHNlIHsKKwkJdGV4dF9vdXQtPm91dHB1dChjb3V0LCBzeW1ib2xzKTsKKwl9Cit9CisKKwordm9pZCBvdXRwdXRfZGlmZl9zeW1ib2xzKHByb2ZpbGVfY29udGFpbmVyIGNvbnN0ICYgcGMxLAorICAgICAgICAgICAgICAgICAgICAgICAgIHByb2ZpbGVfY29udGFpbmVyIGNvbnN0ICYgcGMyLCBib29sIG11bHRpcGxlX2FwcHMpCit7CisJZGlmZl9jb250YWluZXIgZGMocGMxLCBwYzIpOworCisJcHJvZmlsZV9jb250YWluZXI6OnN5bWJvbF9jaG9pY2UgY2hvaWNlOworCWNob2ljZS50aHJlc2hvbGQgPSBvcHRpb25zOjp0aHJlc2hvbGQ7CisKKwlkaWZmX2NvbGxlY3Rpb24gc3ltYm9scyA9IGRjLmdldF9zeW1ib2xzKGNob2ljZSk7CisKKwlmb3JtYXRfZmxhZ3MgZmxhZ3MgPSBnZXRfZm9ybWF0X2ZsYWdzKGNob2ljZS5oaW50cyk7CisJaWYgKG11bHRpcGxlX2FwcHMpCisJCWZsYWdzID0gZm9ybWF0X2ZsYWdzKGZsYWdzIHwgZmZfYXBwX25hbWUpOworCisJLy8gV2l0aCBkaWZmIHByb2ZpbGUgd2Ugb3V0cHV0IG9ubHkgZmlsZW5hbWUgY29taW5nIGZyb20gdGhlIGZpcnN0CisJLy8gcHJvZmlsZSBzZXNzaW9uLCBpbnRlcm5hbGx5IHdlIHVzZSBvbmx5IG5hbWUgZGVyaXZlZCBmcm9tIHRoZSBzYW1wbGUKKwkvLyBmaWxlbmFtZSBzbyBpbWFnZSBuYW1lIGNhbiBtYXRjaC4KKwlmb3JtYXRfb3V0cHV0OjpkaWZmX2Zvcm1hdHRlciBvdXQoZGMsIHBjMS5leHRyYV9mb3VuZF9pbWFnZXMpOworCisJb3V0LnNldF9ucl9jbGFzc2VzKG5yX2NsYXNzZXMpOworCW91dC5zaG93X2xvbmdfZmlsZW5hbWVzKG9wdGlvbnM6OmxvbmdfZmlsZW5hbWVzKTsKKwlvdXQuc2hvd19oZWFkZXIob3B0aW9uczo6c2hvd19oZWFkZXIpOworCW91dC5zaG93X2dsb2JhbF9wZXJjZW50KG9wdGlvbnM6Omdsb2JhbF9wZXJjZW50KTsKKwlvdXQudm1hX2Zvcm1hdF82NGJpdChjaG9pY2UuaGludHMgJiBjZl82NGJpdF92bWEpOworCW91dC5hZGRfZm9ybWF0KGZsYWdzKTsKKworCW9wdGlvbnM6OnNvcnRfYnkuc29ydChzeW1ib2xzLCBvcHRpb25zOjpyZXZlcnNlX3NvcnQsCisJICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6OmxvbmdfZmlsZW5hbWVzKTsKKworCW91dC5vdXRwdXQoY291dCwgc3ltYm9scyk7Cit9CisKKwordm9pZCBvdXRwdXRfY2dfc3ltYm9scyhjYWxsZ3JhcGhfY29udGFpbmVyIGNvbnN0ICYgY2csIGJvb2wgbXVsdGlwbGVfYXBwcykKK3sKKwljb2x1bW5fZmxhZ3Mgb3V0cHV0X2hpbnRzID0gY2cub3V0cHV0X2hpbnQoKTsKKworCXN5bWJvbF9jb2xsZWN0aW9uIHN5bWJvbHMgPSBjZy5nZXRfc3ltYm9scygpOworCisJb3B0aW9uczo6c29ydF9ieS5zb3J0KHN5bWJvbHMsIG9wdGlvbnM6OnJldmVyc2Vfc29ydCwKKwkgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uczo6bG9uZ19maWxlbmFtZXMpOworCisJZm9ybWF0X291dHB1dDo6Zm9ybWF0dGVyICogb3V0OworCWZvcm1hdF9vdXRwdXQ6OnhtbF9jZ19mb3JtYXR0ZXIgKiB4bWxfb3V0ID0gMDsKKwlmb3JtYXRfb3V0cHV0OjpjZ19mb3JtYXR0ZXIgKiB0ZXh0X291dCA9IDA7CisKKwlpZiAob3B0aW9uczo6eG1sKSB7CisJCXhtbF9vdXQgPSBuZXcgZm9ybWF0X291dHB1dDo6eG1sX2NnX2Zvcm1hdHRlcihjZywgc3ltYm9scywKKwkJCW9wdGlvbnM6OnN5bWJvbF9maWx0ZXIpOworCQl4bWxfb3V0LT5zaG93X2RldGFpbHMob3B0aW9uczo6ZGV0YWlscyk7CisJCW91dCA9IHhtbF9vdXQ7CisJCS8vIGZvciBYTUwgYWx3YXlzIG91dHB1dCBsb25nIGZpbGVuYW1lcworCQlvdXQtPnNob3dfbG9uZ19maWxlbmFtZXModHJ1ZSk7CisJfSBlbHNlIHsKKwkJdGV4dF9vdXQgPSBuZXcgZm9ybWF0X291dHB1dDo6Y2dfZm9ybWF0dGVyKGNnKTsKKwkJb3V0ID0gdGV4dF9vdXQ7CisJCW91dC0+c2hvd19sb25nX2ZpbGVuYW1lcyhvcHRpb25zOjpsb25nX2ZpbGVuYW1lcyk7CisJfQorCisJb3V0LT5zZXRfbnJfY2xhc3Nlcyhucl9jbGFzc2VzKTsKKwlvdXQtPnNob3dfaGVhZGVyKG9wdGlvbnM6OnNob3dfaGVhZGVyKTsKKwlvdXQtPnZtYV9mb3JtYXRfNjRiaXQob3V0cHV0X2hpbnRzICYgY2ZfNjRiaXRfdm1hKTsKKwlvdXQtPnNob3dfZ2xvYmFsX3BlcmNlbnQob3B0aW9uczo6Z2xvYmFsX3BlcmNlbnQpOworCisJZm9ybWF0X2ZsYWdzIGZsYWdzID0gZ2V0X2Zvcm1hdF9mbGFncyhvdXRwdXRfaGludHMpOworCWlmIChtdWx0aXBsZV9hcHBzKQorCQlmbGFncyA9IGZvcm1hdF9mbGFncyhmbGFncyB8IGZmX2FwcF9uYW1lKTsKKworCW91dC0+YWRkX2Zvcm1hdChmbGFncyk7CisKKwlpZiAob3B0aW9uczo6eG1sKSB7CisJCXhtbF9zdXBwb3J0ID0gbmV3IHhtbF91dGlscyh4bWxfb3V0LCBzeW1ib2xzLCBucl9jbGFzc2VzLAorCQkJY2cuZXh0cmFfZm91bmRfaW1hZ2VzKTsKKwkJeG1sX291dC0+b3V0cHV0KGNvdXQpOworCX0gZWxzZSB7CisJCXRleHRfb3V0LT5vdXRwdXQoY291dCwgc3ltYm9scyk7CisJfQorCit9CisKKworaW50IG9wcmVwb3J0KG9wdGlvbnM6OnNwZWMgY29uc3QgJiBzcGVjKQoreworCXdhbnRfeG1sID0gb3B0aW9uczo6eG1sOworCisJaGFuZGxlX29wdGlvbnMoc3BlYyk7CisKKwlucl9jbGFzc2VzID0gY2xhc3Nlcy52LnNpemUoKTsKKworCWlmICghb3B0aW9uczo6c3ltYm9scyAmJiAhb3B0aW9uczo6eG1sKSB7CisJCXN1bW1hcnlfY29udGFpbmVyIHN1bW1hcmllcyhjbGFzc2VzLnYpOworCQlvdXRwdXRfaGVhZGVyKCk7CisJCW91dHB1dF9zdW1tYXJpZXMoc3VtbWFyaWVzKTsKKwkJcmV0dXJuIDA7CisJfQorCisJYm9vbCBtdWx0aXBsZV9hcHBzID0gZmFsc2U7CisKKwlmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNsYXNzZXMudi5zaXplKCk7ICsraSkgeworCQlpZiAoY2xhc3Nlcy52W2ldLnByb2ZpbGVzLnNpemUoKSA+IDEpCisJCQltdWx0aXBsZV9hcHBzID0gdHJ1ZTsKKwl9CisKKwlsaXN0PGludmVydGVkX3Byb2ZpbGU+IGlwcm9maWxlcyA9IGludmVydF9wcm9maWxlcyhjbGFzc2VzKTsKKworCXJlcG9ydF9pbWFnZV9lcnJvcnMoaXByb2ZpbGVzLCBjbGFzc2VzLmV4dHJhX2ZvdW5kX2ltYWdlcyk7CisKKwlpZiAob3B0aW9uczo6eG1sKSB7CisJCXhtbF91dGlsczo6b3V0cHV0X3htbF9oZWFkZXIob3B0aW9uczo6Y29tbWFuZF9vcHRpb25zLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzZXMuY3B1aW5mbywgY2xhc3Nlcy5ldmVudCk7CisJfSBlbHNlIHsKKwkJb3V0cHV0X2hlYWRlcigpOworCX0KKworCWlmIChjbGFzc2VzMi52LnNpemUoKSkgeworCQlmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNsYXNzZXMyLnYuc2l6ZSgpOyArK2kpIHsKKwkJCWlmIChjbGFzc2VzMi52W2ldLnByb2ZpbGVzLnNpemUoKSA+IDEpCisJCQkJbXVsdGlwbGVfYXBwcyB8PSB0cnVlOworCQl9CisKKwkJcHJvZmlsZV9jb250YWluZXIgcGMxKG9wdGlvbnM6OmRlYnVnX2luZm8sIG9wdGlvbnM6OmRldGFpbHMsCisJCQkJICAgICAgY2xhc3Nlcy5leHRyYV9mb3VuZF9pbWFnZXMpOworCisJCWxpc3Q8aW52ZXJ0ZWRfcHJvZmlsZT46Oml0ZXJhdG9yIGl0ID0gaXByb2ZpbGVzLmJlZ2luKCk7CisJCWxpc3Q8aW52ZXJ0ZWRfcHJvZmlsZT46Oml0ZXJhdG9yIGNvbnN0IGVuZCA9IGlwcm9maWxlcy5lbmQoKTsKKworCQlmb3IgKDsgaXQgIT0gZW5kOyArK2l0KQorCQkJcG9wdWxhdGVfZm9yX2ltYWdlKHBjMSwgKml0LAorCQkJCQkgICBvcHRpb25zOjpzeW1ib2xfZmlsdGVyLCAwKTsKKworCQlsaXN0PGludmVydGVkX3Byb2ZpbGU+IGlwcm9maWxlczIgPSBpbnZlcnRfcHJvZmlsZXMoY2xhc3NlczIpOworCisJCXJlcG9ydF9pbWFnZV9lcnJvcnMoaXByb2ZpbGVzMiwgY2xhc3NlczIuZXh0cmFfZm91bmRfaW1hZ2VzKTsKKworCQlwcm9maWxlX2NvbnRhaW5lciBwYzIob3B0aW9uczo6ZGVidWdfaW5mbywgb3B0aW9uczo6ZGV0YWlscywKKwkJCQkgICAgICBjbGFzc2VzMi5leHRyYV9mb3VuZF9pbWFnZXMpOworCisJCWxpc3Q8aW52ZXJ0ZWRfcHJvZmlsZT46Oml0ZXJhdG9yIGl0MiA9IGlwcm9maWxlczIuYmVnaW4oKTsKKwkJbGlzdDxpbnZlcnRlZF9wcm9maWxlPjo6aXRlcmF0b3IgY29uc3QgZW5kMiA9IGlwcm9maWxlczIuZW5kKCk7CisKKwkJZm9yICg7IGl0MiAhPSBlbmQyOyArK2l0MikKKwkJCXBvcHVsYXRlX2Zvcl9pbWFnZShwYzIsICppdDIsCisJCQkJCSAgIG9wdGlvbnM6OnN5bWJvbF9maWx0ZXIsIDApOworCisJCW91dHB1dF9kaWZmX3N5bWJvbHMocGMxLCBwYzIsIG11bHRpcGxlX2FwcHMpOworCX0gZWxzZSBpZiAob3B0aW9uczo6Y2FsbGdyYXBoKSB7CisJCWNhbGxncmFwaF9jb250YWluZXIgY2dfY29udGFpbmVyOworCQljZ19jb250YWluZXIucG9wdWxhdGUoaXByb2ZpbGVzLCBjbGFzc2VzLmV4dHJhX2ZvdW5kX2ltYWdlcywKKwkJCW9wdGlvbnM6OmRlYnVnX2luZm8sIG9wdGlvbnM6OnRocmVzaG9sZCwKKwkJCW9wdGlvbnM6Om1lcmdlX2J5LmxpYiwgb3B0aW9uczo6c3ltYm9sX2ZpbHRlcik7CisKKwkJb3V0cHV0X2NnX3N5bWJvbHMoY2dfY29udGFpbmVyLCBtdWx0aXBsZV9hcHBzKTsKKwl9IGVsc2UgeworCQlwcm9maWxlX2NvbnRhaW5lciBzYW1wbGVzKG9wdGlvbnM6OmRlYnVnX2luZm8sCisJCQlvcHRpb25zOjpkZXRhaWxzLCBjbGFzc2VzLmV4dHJhX2ZvdW5kX2ltYWdlcyk7CisKKwkJbGlzdDxpbnZlcnRlZF9wcm9maWxlPjo6aXRlcmF0b3IgaXQgPSBpcHJvZmlsZXMuYmVnaW4oKTsKKwkJbGlzdDxpbnZlcnRlZF9wcm9maWxlPjo6aXRlcmF0b3IgY29uc3QgZW5kID0gaXByb2ZpbGVzLmVuZCgpOworCisJCWZvciAoOyBpdCAhPSBlbmQ7ICsraXQpCisJCQlwb3B1bGF0ZV9mb3JfaW1hZ2Uoc2FtcGxlcywgKml0LAorCQkJCQkgICBvcHRpb25zOjpzeW1ib2xfZmlsdGVyLCAwKTsKKworCQlvdXRwdXRfc3ltYm9scyhzYW1wbGVzLCBtdWx0aXBsZV9hcHBzKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworfSAgLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyIGNvbnN0ICogYXJndltdKQoreworCWNvdXQudGllKDApOworCXJldHVybiBydW5fcHBfdG9vbChhcmdjLCBhcmd2LCBvcHJlcG9ydCk7Cit9CmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy9wcC9vcHJlcG9ydF9vcHRpb25zLmNwcCBiL29wcm9maWxlLTAuOS43L3BwL29wcmVwb3J0X29wdGlvbnMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1ZDIxOWMKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9wcC9vcHJlcG9ydF9vcHRpb25zLmNwcApAQCAtMCwwICsxLDMzNSBAQAorLyoqCisgKiBAZmlsZSBvcHJlcG9ydF9vcHRpb25zLmNwcAorICogT3B0aW9ucyBmb3Igb3ByZXBvcnQgdG9vbAorICoKKyAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDMgT1Byb2ZpbGUgYXV0aG9ycworICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKKyAqCisgKiBAYXV0aG9yIEpvaG4gTGV2b24KKyAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQorICovCisKKyNpbmNsdWRlIDx2ZWN0b3I+CisjaW5jbHVkZSA8bGlzdD4KKyNpbmNsdWRlIDxpb3N0cmVhbT4KKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8aXRlcmF0b3I+CisjaW5jbHVkZSA8ZnN0cmVhbT4KKworI2luY2x1ZGUgInByb2ZpbGVfc3BlYy5oIgorI2luY2x1ZGUgImFycmFuZ2VfcHJvZmlsZXMuaCIKKyNpbmNsdWRlICJvcHJlcG9ydF9vcHRpb25zLmgiCisjaW5jbHVkZSAicG9wdF9vcHRpb25zLmgiCisjaW5jbHVkZSAic3RyaW5nX2ZpbHRlci5oIgorI2luY2x1ZGUgImZpbGVfbWFuaXAuaCIKKyNpbmNsdWRlICJ4bWxfb3V0cHV0LmgiCisjaW5jbHVkZSAieG1sX3V0aWxzLmgiCisjaW5jbHVkZSAiY3ZlcmIuaCIKKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKworcHJvZmlsZV9jbGFzc2VzIGNsYXNzZXM7Citwcm9maWxlX2NsYXNzZXMgY2xhc3NlczI7CisKK25hbWVzcGFjZSBvcHRpb25zIHsKKwlkZW1hbmdsZV90eXBlIGRlbWFuZ2xlID0gZG10X25vcm1hbDsKKwlib29sIHN5bWJvbHM7CisJYm9vbCBjYWxsZ3JhcGg7CisJYm9vbCBkZWJ1Z19pbmZvOworCWJvb2wgZGV0YWlsczsKKwlib29sIGV4Y2x1ZGVfZGVwZW5kZW50OworCXN0cmluZ19maWx0ZXIgc3ltYm9sX2ZpbHRlcjsKKwlzb3J0X29wdGlvbnMgc29ydF9ieTsKKwltZXJnZV9vcHRpb24gbWVyZ2VfYnk7CisJYm9vbCBzaG93X2hlYWRlciA9IHRydWU7CisJYm9vbCBsb25nX2ZpbGVuYW1lczsKKwlib29sIHNob3dfYWRkcmVzczsKKwlib29sIGFjY3VtdWxhdGVkOworCWJvb2wgcmV2ZXJzZV9zb3J0OworCWJvb2wgZ2xvYmFsX3BlcmNlbnQ7CisJYm9vbCB4bWw7CisJc3RyaW5nIHhtbF9vcHRpb25zOworfQorCisKK25hbWVzcGFjZSB7CisKK3N0cmluZyBvdXRmaWxlOwordmVjdG9yPHN0cmluZz4gbWVyZ2VzcGVjOwordmVjdG9yPHN0cmluZz4gc29ydDsKK3ZlY3RvcjxzdHJpbmc+IGV4Y2x1ZGVfc3ltYm9sczsKK3ZlY3RvcjxzdHJpbmc+IGluY2x1ZGVfc3ltYm9sczsKK3N0cmluZyBkZW1hbmdsZV9vcHRpb24gPSAibm9ybWFsIjsKKworcG9wdDo6b3B0aW9uIG9wdGlvbnNfYXJyYXlbXSA9IHsKKwlwb3B0OjpvcHRpb24ob3B0aW9uczo6Y2FsbGdyYXBoLCAiY2FsbGdyYXBoIiwgJ2MnLAorCSAgICAgICAgICAgICAic2hvdyBjYWxsIGdyYXBoIiksCisJcG9wdDo6b3B0aW9uKG9wdGlvbnM6OmRldGFpbHMsICJkZXRhaWxzIiwgJ2QnLAorCQkgICAgICJvdXRwdXQgZGV0YWlsZWQgc2FtcGxlcyBmb3IgZWFjaCBzeW1ib2wiKSwKKwlwb3B0OjpvcHRpb24ob3B0aW9uczo6c3ltYm9scywgInN5bWJvbHMiLCAnbCcsCisJCSAgICAgImxpc3QgYWxsIHN5bWJvbHMiKSwKKworCXBvcHQ6Om9wdGlvbihvdXRmaWxlLCAib3V0cHV0LWZpbGUiLCAnbycsCisJICAgICAgICAgICAgICJvdXRwdXQgdG8gdGhlIGdpdmVuIGZpbGVuYW1lIiwgImZpbGUiKSwKKworCXBvcHQ6Om9wdGlvbihzb3J0LCAic29ydCIsICdzJywKKwkJICAgICAic29ydCBieSIsICJzYW1wbGUsaW1hZ2UsYXBwLW5hbWUsc3ltYm9sLGRlYnVnLHZtYSIpLAorCXBvcHQ6Om9wdGlvbihvcHRpb25zOjpyZXZlcnNlX3NvcnQsICJyZXZlcnNlLXNvcnQiLCAncicsCisJCSAgICAgInVzZSByZXZlcnNlIHNvcnQiKSwKKwlwb3B0OjpvcHRpb24obWVyZ2VzcGVjLCAibWVyZ2UiLCAnbScsCisJCSAgICAgImNvbW1hIHNlcGFyYXRlZCBsaXN0IiwgImNwdSxsaWIsdGlkLHRnaWQsdW5pdG1hc2ssYWxsIiksCisJcG9wdDo6b3B0aW9uKG9wdGlvbnM6OmV4Y2x1ZGVfZGVwZW5kZW50LCAiZXhjbHVkZS1kZXBlbmRlbnQiLCAneCcsCisJCSAgICAgImV4Y2x1ZGUgbGlicywga2VybmVsLCBhbmQgbW9kdWxlIHNhbXBsZXMgZm9yIGFwcGxpY2F0aW9ucyIpLAorCXBvcHQ6Om9wdGlvbihleGNsdWRlX3N5bWJvbHMsICJleGNsdWRlLXN5bWJvbHMiLCAnZScsCisJCSAgICAgImV4Y2x1ZGUgdGhlc2UgY29tbWEgc2VwYXJhdGVkIHN5bWJvbHMiLCAic3ltYm9scyIpLAorCXBvcHQ6Om9wdGlvbihpbmNsdWRlX3N5bWJvbHMsICJpbmNsdWRlLXN5bWJvbHMiLCAnaScsCisJCSAgICAgImluY2x1ZGUgdGhlc2UgY29tbWEgc2VwYXJhdGVkIHN5bWJvbHMiLCAic3ltYm9scyIpLAorCXBvcHQ6Om9wdGlvbihvcHRpb25zOjp0aHJlc2hvbGRfb3B0LCAidGhyZXNob2xkIiwgJ3QnLAorCQkgICAgICJtaW5pbXVtIHBlcmNlbnRhZ2UgbmVlZGVkIHRvIHByb2R1Y2Ugb3V0cHV0IiwKKwkJICAgICAicGVyY2VudCIpLAorCisJcG9wdDo6b3B0aW9uKGRlbWFuZ2xlX29wdGlvbiwgImRlbWFuZ2xlIiwgJ0QnLAorCQkgICAgICJkZW1hbmdsZSBHTlUgQysrIHN5bWJvbCBuYW1lcyAoZGVmYXVsdCBub3JtYWwpIiwKKwkgICAgICAgICAgICAgIm5vbmV8bm9ybWFsfHNtYXJ0IiksCisJLy8gUFA6NQorCXBvcHQ6Om9wdGlvbihvcHRpb25zOjpkZWJ1Z19pbmZvLCAiZGVidWctaW5mbyIsICdnJywKKwkJICAgICAiYWRkIHNvdXJjZSBmaWxlIGFuZCBsaW5lIG51bWJlciB0byBvdXRwdXQiKSwKKwlwb3B0OjpvcHRpb24ob3B0aW9uczo6c2hvd19oZWFkZXIsICJuby1oZWFkZXIiLCAnbicsCisJCSAgICAgInJlbW92ZSBhbGwgaGVhZGVycyBmcm9tIG91dHB1dCIpLAorCXBvcHQ6Om9wdGlvbihvcHRpb25zOjpzaG93X2FkZHJlc3MsICJzaG93LWFkZHJlc3MiLCAndycsCisJICAgICAgICAgICAgICJzaG93IFZNQSBhZGRyZXNzIG9mIGVhY2ggc3ltYm9sIiksCisJcG9wdDo6b3B0aW9uKG9wdGlvbnM6OmxvbmdfZmlsZW5hbWVzLCAibG9uZy1maWxlbmFtZXMiLCAnZicsCisJCSAgICAgInNob3cgdGhlIGZ1bGwgcGF0aCBvZiBmaWxlbmFtZXMiKSwKKwlwb3B0OjpvcHRpb24ob3B0aW9uczo6YWNjdW11bGF0ZWQsICJhY2N1bXVsYXRlZCIsICdhJywKKwkJICAgICAicGVyY2VudGFnZSBmaWVsZCBzaG93IGFjY3VtdWxhdGVkIGNvdW50IiksCisJcG9wdDo6b3B0aW9uKG9wdGlvbnM6Omdsb2JhbF9wZXJjZW50LCAiZ2xvYmFsLXBlcmNlbnQiLCAnJScsCisJCSAgICAgInBlcmNlbnRhZ2UgYXJlIG5vdCByZWxhdGl2ZSB0byBzeW1ib2wgY291bnQgb3IgaW1hZ2UgIgorCQkgICAgICJjb3VudCBidXQgdG90YWwgc2FtcGxlIGNvdW50IiksCisKKwlwb3B0OjpvcHRpb24ob3B0aW9uczo6eG1sLCAieG1sIiwgJ1gnLAorCQkgICAgICJYTUwgb3V0cHV0IiksCisKK307CisKKwordm9pZCBoYW5kbGVfc29ydF9vcHRpb24oKQoreworCWlmIChvcHRpb25zOjp4bWwgJiYgIXNvcnQuZW1wdHkoKSkgeworCQljZXJyIDw8ICJ3YXJuaW5nOiBzb3J0IG9wdGlvbnMgaWdub3JlZCBiZWNhdXNlIHRoZXkgIgorCQkgICAgIDw8ICJhcmUgaW5jb21wYXRpYmxlIHdpdGggLS14bWwiIDw8IGVuZGw7CisJCS8vIGRvbid0IGFsbG93IGFueSBvdGhlciBzb3J0aW5nLCBleGNlcHQgdGhlIGRlZmF1bHQgYmVsb3csCisJCS8vIHRvIG1lc3MgdXAgc3ltYm9sIHRyYXZlcnNhbCBmb3IgWE1MCisJCXNvcnQuY2xlYXIoKTsKKwl9CisKKwlpZiAoc29ydC5lbXB0eSgpIHx8IG9wdGlvbnM6OnhtbCkgeworCQkvLyBQUDo1LjE0IHNvcnQgZGVmYXVsdCB0byBzYW1wbGUKKwkJaWYgKG9wdGlvbnM6OnhtbCkgeworCQkJLy8gaW1wbGljaXRseSBzb3J0IGJ5IGFwcC1uYW1lLGltYWdlIHNvIHRoYXQgaW4gdGhlCisJCQkvLyBzeW1ib2wgdHJhdmVyc2FsIGFsbCBsaWJyYXJ5IG1vZHVsZSBzeW1ib2xzIGFyZQorCQkJLy8gZ3JvdXBlZCB0b2dldGhlciB3aXRoIHRoZWlyIGFwcGxpY2F0aW9uCisJCQlzb3J0LnB1c2hfYmFjaygiYXBwLW5hbWUiKTsKKwkJCXNvcnQucHVzaF9iYWNrKCJpbWFnZSIpOworCQl9IGVsc2UKKwkJCXNvcnQucHVzaF9iYWNrKCJzYW1wbGUiKTsKKwl9CisKKwl2ZWN0b3I8c3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgY2l0ID0gc29ydC5iZWdpbigpOworCXZlY3RvcjxzdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBzb3J0LmVuZCgpOworCisJZm9yICg7IGNpdCAhPSBlbmQ7ICsrY2l0KQorCQlvcHRpb25zOjpzb3J0X2J5LmFkZF9zb3J0X29wdGlvbigqY2l0KTsKK30KKworCit2b2lkIGhhbmRsZV9vdXRwdXRfZmlsZSgpCit7CisJaWYgKG91dGZpbGUuZW1wdHkoKSkKKwkJcmV0dXJuOworCisJc3RhdGljIG9mc3RyZWFtIG9zKG91dGZpbGUuY19zdHIoKSk7CisJaWYgKCFvcykgeworCQljZXJyIDw8ICJDb3VsZG4ndCBvcGVuIFwiIiA8PCBvdXRmaWxlCisJCSAgICAgPDwgIlwiIGZvciB3cml0aW5nLiIgPDwgZW5kbDsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKworCWNvdXQucmRidWYob3MucmRidWYoKSk7Cit9CisKKworLy8vICBDaGVjayBpbmNvbXBhdGlibGUgb3IgbWVhbmluZ2xlc3Mgb3B0aW9ucy4KK3ZvaWQgY2hlY2tfb3B0aW9ucyhib29sIGRpZmYpCit7CisJdXNpbmcgbmFtZXNwYWNlIG9wdGlvbnM7CisKKwlib29sIGRvX2V4aXQgPSBmYWxzZTsKKworCWlmIChjYWxsZ3JhcGgpIHsKKwkJc3ltYm9scyA9IHRydWU7CisJCWlmIChkZXRhaWxzKSB7CisJCQljZXJyIDw8ICItLWNhbGxncmFwaCBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLWRldGFpbHMiIDw8IGVuZGw7CisJCQlkb19leGl0ID0gdHJ1ZTsKKwkJfQorCisJCWlmIChkaWZmKSB7CisJCQljZXJyIDw8ICJkaWZmZXJlbnRpYWwgcHJvZmlsZXMgYXJlIGluY29tcGF0aWJsZSB3aXRoIC0tY2FsbGdyYXBoIiA8PCBlbmRsOworCQkJZG9fZXhpdCA9IHRydWU7CisJCX0KKwl9CisKKwlpZiAoeG1sKSB7CisJCWlmIChhY2N1bXVsYXRlZCkgeworCQkJY2VyciA8PCAiLS1hY2N1bXVsYXRlZCBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLXhtbCIgPDwgZW5kbDsKKwkJCWRvX2V4aXQgPSB0cnVlOworCQl9CisKKwkJaWYgKGdsb2JhbF9wZXJjZW50KSB7CisJCQljZXJyIDw8ICItLWdsb2JhbF9wZXJjZW50IGlzIGluY29tcGF0aWJsZSB3aXRoIC0teG1sIiA8PCBlbmRsOworCQkJZG9fZXhpdCA9IHRydWU7CisJCX0KKwl9CisKKworCWlmIChkZXRhaWxzICYmIGRpZmYpIHsKKwkJY2VyciA8PCAiZGlmZmVyZW50aWFsIHByb2ZpbGVzIGFyZSBpbmNvbXBhdGlibGUgd2l0aCAtLWRldGFpbHMiIDw8IGVuZGw7CisJCWRvX2V4aXQgPSB0cnVlOworCX0KKworCWlmICghc3ltYm9scykgeworCQlpZiAoZGlmZikgeworCQkJY2VyciA8PCAiZGlmZmVyZW50IHByb2ZpbGVzIGFyZSBtZWFuaW5nbGVzcyAiCisJCQkJIndpdGhvdXQgLS1zeW1ib2xzIiA8PCBlbmRsOworCQkJZG9fZXhpdCA9IHRydWU7CisJCX0KKworCQlpZiAoc2hvd19hZGRyZXNzKSB7CisJCQljZXJyIDw8ICItLXNob3ctYWRkcmVzcyBpcyBtZWFuaW5nbGVzcyAiCisJCQkJIndpdGhvdXQgLS1zeW1ib2xzIiA8PCBlbmRsOworCQkJZG9fZXhpdCA9IHRydWU7CisJCX0KKworCQlpZiAoZGVidWdfaW5mbyB8fCBhY2N1bXVsYXRlZCkgeworCQkJY2VyciA8PCAiLS1kZWJ1Zy1pbmZvIGFuZCAtLWFjY3VtdWxhdGVkIGFyZSAiCisJCQkgICAgIDw8ICJtZWFuaW5nbGVzcyB3aXRob3V0IC0tc3ltYm9scyIgPDwgZW5kbDsKKwkJCWRvX2V4aXQgPSB0cnVlOworCQl9CisKKwkJaWYgKCFleGNsdWRlX3N5bWJvbHMuZW1wdHkoKSB8fCAhaW5jbHVkZV9zeW1ib2xzLmVtcHR5KCkpIHsKKwkJCWNlcnIgPDwgIi0tZXhjbHVkZS1zeW1ib2xzIGFuZCAtLWluY2x1ZGUtc3ltYm9scyBhcmUgIgorCQkJICAgICA8PCAibWVhbmluZ2xlc3Mgd2l0aG91dCAtLXN5bWJvbHMiIDw8IGVuZGw7CisJCQlkb19leGl0ID0gdHJ1ZTsKKwkJfQorCisJCWlmIChmaW5kKHNvcnRfYnkub3B0aW9ucy5iZWdpbigpLCBzb3J0X2J5Lm9wdGlvbnMuZW5kKCksIAorCQkJIHNvcnRfb3B0aW9uczo6dm1hKSAhPSBzb3J0X2J5Lm9wdGlvbnMuZW5kKCkpIHsKKwkJCWNlcnIgPDwgIi0tc29ydD12bWEgaXMgIgorCQkJICAgICA8PCAibWVhbmluZ2xlc3Mgd2l0aG91dCAtLXN5bWJvbHMiIDw8IGVuZGw7CisJCQlkb19leGl0ID0gdHJ1ZTsKKwkJfQorCX0KKworCWlmIChnbG9iYWxfcGVyY2VudCAmJiBzeW1ib2xzICYmICEoZGV0YWlscyB8fCBjYWxsZ3JhcGgpKSB7CisJCWNlcnIgPDwgIi0tZ2xvYmFsLXBlcmNlbnQgaXMgbWVhbmluZ2xlc3Mgd2l0aCAtLXN5bWJvbHMgIgorCQkgICAgICAgICJhbmQgd2l0aG91dCAtLWRldGFpbHMgb3IgLS1jYWxsZ3JhcGgiIDw8IGVuZGw7CisJCWRvX2V4aXQgPSB0cnVlOworCX0KKworCWlmIChkb19leGl0KQorCQlleGl0KEVYSVRfRkFJTFVSRSk7Cit9CisKKworLy8vIHByb2Nlc3MgYSBzcGVjIGludG8gY2xhc3Nlcwordm9pZCBwcm9jZXNzX3NwZWMocHJvZmlsZV9jbGFzc2VzICYgY2xhc3NlcywgbGlzdDxzdHJpbmc+IGNvbnN0ICYgc3BlYykKK3sKKwl1c2luZyBuYW1lc3BhY2Ugb3B0aW9uczsKKworCWNvcHkoc3BlYy5iZWdpbigpLCBzcGVjLmVuZCgpLAorCSAgICAgb3N0cmVhbV9pdGVyYXRvcjxzdHJpbmc+KGN2ZXJiIDw8IHZzZmlsZSwgIiAiKSk7CisJY3ZlcmIgPDwgdnNmaWxlIDw8ICJcblxuIjsKKworCXByb2ZpbGVfc3BlYyBjb25zdCBwc3BlYyA9CisJCXByb2ZpbGVfc3BlYzo6Y3JlYXRlKHNwZWMsIG9wdGlvbnM6OmltYWdlX3BhdGgsCisJCQkJICAgICBvcHRpb25zOjpyb290X3BhdGgpOworCisJbGlzdDxzdHJpbmc+IHNhbXBsZV9maWxlcyA9IHBzcGVjLmdlbmVyYXRlX2ZpbGVfbGlzdChleGNsdWRlX2RlcGVuZGVudCwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFvcHRpb25zOjpjYWxsZ3JhcGgpOworCisJY3ZlcmIgPDwgdnNmaWxlIDw8ICJBcmNoaXZlOiAiIDw8IHBzcGVjLmdldF9hcmNoaXZlX3BhdGgoKSA8PCBlbmRsOworCisJY3ZlcmIgPDwgdnNmaWxlIDw8ICJNYXRjaGVkIHNhbXBsZSBmaWxlczogIiA8PCBzYW1wbGVfZmlsZXMuc2l6ZSgpCisJICAgICAgPDwgZW5kbDsKKwljb3B5KHNhbXBsZV9maWxlcy5iZWdpbigpLCBzYW1wbGVfZmlsZXMuZW5kKCksCisJICAgICBvc3RyZWFtX2l0ZXJhdG9yPHN0cmluZz4oY3ZlcmIgPDwgdnNmaWxlLCAiXG4iKSk7CisKKwljbGFzc2VzID0gYXJyYW5nZV9wcm9maWxlcyhzYW1wbGVfZmlsZXMsIG1lcmdlX2J5LAorCQkJCSAgIHBzcGVjLmV4dHJhX2ZvdW5kX2ltYWdlcyk7CisKKwljdmVyYiA8PCB2c2ZpbGUgPDwgInByb2ZpbGVfY2xhc3NlczpcbiIgPDwgY2xhc3NlcyA8PCBlbmRsOworCisJaWYgKGNsYXNzZXMudi5lbXB0eSgpKSB7CisJCWNlcnIgPDwgImVycm9yOiBubyBzYW1wbGUgZmlsZXMgZm91bmQ6IHByb2ZpbGUgc3BlY2lmaWNhdGlvbiAiCisJCSAgICAgInRvbyBzdHJpY3QgPyIgPDwgZW5kbDsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KK30KKworCit9IC8vIG5hbWVzcGFjZSBhbm9uCisKKwordm9pZCBoYW5kbGVfb3B0aW9ucyhvcHRpb25zOjpzcGVjIGNvbnN0ICYgc3BlYykKK3sKKwl1c2luZyBuYW1lc3BhY2Ugb3B0aW9uczsKKworCWlmIChkZXRhaWxzKSB7CisJCXN5bWJvbHMgPSB0cnVlOworCQlzaG93X2FkZHJlc3MgPSB0cnVlOworCX0KKworCWlmIChvcHRpb25zOjp4bWwpIHsKKwkJaWYgKHNwZWMuY29tbW9uLnNpemUoKSAhPSAwKQorCQkJeG1sX3V0aWxzOjphZGRfb3B0aW9uKFNFU1NJT04sIHNwZWMuY29tbW9uKTsKKwkJaWYgKGRlYnVnX2luZm8pCisJCQl4bWxfdXRpbHM6OmFkZF9vcHRpb24oREVCVUdfSU5GTywgdHJ1ZSk7CisJCWlmIChkZXRhaWxzKQorCQkJeG1sX3V0aWxzOjphZGRfb3B0aW9uKERFVEFJTFMsIHRydWUpOworCQlpZiAoIWltYWdlX3BhdGguZW1wdHkoKSkKKwkJCXhtbF91dGlsczo6YWRkX29wdGlvbihJTUFHRV9QQVRILCBpbWFnZV9wYXRoKTsKKwkJaWYgKCFtZXJnZXNwZWMuZW1wdHkoKSkKKwkJCXhtbF91dGlsczo6YWRkX29wdGlvbihNRVJHRSwgbWVyZ2VzcGVjKTsKKwkJaWYgKGV4Y2x1ZGVfZGVwZW5kZW50KQorCQkJeG1sX3V0aWxzOjphZGRfb3B0aW9uKEVYQ0xVREVfREVQRU5ERU5ULCB0cnVlKTsKKwkJaWYgKCFleGNsdWRlX3N5bWJvbHMuZW1wdHkoKSkKKwkJCXhtbF91dGlsczo6YWRkX29wdGlvbihFWENMVURFX1NZTUJPTFMsIGV4Y2x1ZGVfc3ltYm9scyk7CisJCWlmICghaW5jbHVkZV9zeW1ib2xzLmVtcHR5KCkpCisJCQl4bWxfdXRpbHM6OmFkZF9vcHRpb24oSU5DTFVERV9TWU1CT0xTLCBpbmNsdWRlX3N5bWJvbHMpOworCX0KKworCWhhbmRsZV9zb3J0X29wdGlvbigpOworCW1lcmdlX2J5ID0gaGFuZGxlX21lcmdlX29wdGlvbihtZXJnZXNwZWMsIHRydWUsIGV4Y2x1ZGVfZGVwZW5kZW50KTsKKwloYW5kbGVfb3V0cHV0X2ZpbGUoKTsKKwlkZW1hbmdsZSA9IGhhbmRsZV9kZW1hbmdsZV9vcHRpb24oZGVtYW5nbGVfb3B0aW9uKTsKKwljaGVja19vcHRpb25zKHNwZWMuZmlyc3Quc2l6ZSgpKTsKKworCXN5bWJvbF9maWx0ZXIgPSBzdHJpbmdfZmlsdGVyKGluY2x1ZGVfc3ltYm9scywgZXhjbHVkZV9zeW1ib2xzKTsKKworCWlmICghc3BlYy5maXJzdC5zaXplKCkpIHsKKwkJcHJvY2Vzc19zcGVjKGNsYXNzZXMsIHNwZWMuY29tbW9uKTsKKwl9IGVsc2UgeworCQlpZiAob3B0aW9uczo6eG1sKSB7CisJCQljZXJyIDw8ICJkaWZmZXJlbnRpYWwgcHJvZmlsZXMgYXJlIGluY29tcGF0aWJsZSB3aXRoIC0teG1sIiA8PCBlbmRsOworCQkJZXhpdChFWElUX0ZBSUxVUkUpOworCQl9CisJCWN2ZXJiIDw8IHZzZmlsZSA8PCAicHJvZmlsZSBzcGVjIDE6IiA8PCBlbmRsOworCQlwcm9jZXNzX3NwZWMoY2xhc3Nlcywgc3BlYy5maXJzdCk7CisJCWN2ZXJiIDw8IHZzZmlsZSA8PCAicHJvZmlsZSBzcGVjIDI6IiA8PCBlbmRsOworCQlwcm9jZXNzX3NwZWMoY2xhc3NlczIsIHNwZWMuc2Vjb25kKTsKKworCQlpZiAoIWNsYXNzZXMubWF0Y2hlcyhjbGFzc2VzMikpIHsKKwkJCWNlcnIgPDwgInByb2ZpbGUgY2xhc3NlcyBhcmUgaW5jb21wYXRpYmxlIiA8PCBlbmRsOworCQkJZXhpdChFWElUX0ZBSUxVUkUpOworCQl9CisJfQorfQpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvcHAvb3ByZXBvcnRfb3B0aW9ucy5oIGIvb3Byb2ZpbGUtMC45LjcvcHAvb3ByZXBvcnRfb3B0aW9ucy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxYWI3YTYKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy9wcC9vcHJlcG9ydF9vcHRpb25zLmgKQEAgLTAsMCArMSw1OCBAQAorLyoqCisgKiBAZmlsZSBvcHJlcG9ydF9vcHRpb25zLmgKKyAqIE9wdGlvbnMgZm9yIG9wcmVwb3J0IHRvb2wKKyAqCisgKiBAcmVtYXJrIENvcHlyaWdodCAyMDAzIE9Qcm9maWxlIGF1dGhvcnMKKyAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCisgKgorICogQGF1dGhvciBKb2huIExldm9uCisgKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKKyAqLworCisjaWZuZGVmIE9QUkVQT1JUX09QVElPTlNfSAorI2RlZmluZSBPUFJFUE9SVF9PUFRJT05TX0gKKworI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDx2ZWN0b3I+CisjaW5jbHVkZSA8aW9zZndkPgorCisjaW5jbHVkZSAiY29tbW9uX29wdGlvbi5oIgorI2luY2x1ZGUgInN0cmluZ19maWx0ZXIuaCIKKyNpbmNsdWRlICJzeW1ib2xfc29ydC5oIgorCitjbGFzcyBwcm9maWxlX2NsYXNzZXM7CitjbGFzcyBtZXJnZV9vcHRpb247CisKK25hbWVzcGFjZSBvcHRpb25zIHsKKwlleHRlcm4gZGVtYW5nbGVfdHlwZSBkZW1hbmdsZTsKKwlleHRlcm4gYm9vbCBzeW1ib2xzOworCWV4dGVybiBib29sIGNhbGxncmFwaDsKKwlleHRlcm4gYm9vbCBkZWJ1Z19pbmZvOworCWV4dGVybiBib29sIGRldGFpbHM7CisJZXh0ZXJuIGJvb2wgcmV2ZXJzZV9zb3J0OworCWV4dGVybiBib29sIGV4Y2x1ZGVfZGVwZW5kZW50OworCWV4dGVybiBzb3J0X29wdGlvbnMgc29ydF9ieTsKKwlleHRlcm4gbWVyZ2Vfb3B0aW9uIG1lcmdlX2J5OworCWV4dGVybiBib29sIGdsb2JhbF9wZXJjZW50OworCWV4dGVybiBib29sIGxvbmdfZmlsZW5hbWVzOworCWV4dGVybiBib29sIHNob3dfYWRkcmVzczsKKwlleHRlcm4gc3RyaW5nX2ZpbHRlciBzeW1ib2xfZmlsdGVyOworCWV4dGVybiBib29sIHNob3dfaGVhZGVyOworCWV4dGVybiBib29sIGFjY3VtdWxhdGVkOworCWV4dGVybiBib29sIHhtbDsKKwlleHRlcm4gc3RkOjpzdHJpbmcgeG1sX29wdGlvbnM7Cit9CisKKy8vLyBBbGwgdGhlIGNob3NlbiBzYW1wbGUgZmlsZXMuCitleHRlcm4gcHJvZmlsZV9jbGFzc2VzIGNsYXNzZXM7CitleHRlcm4gcHJvZmlsZV9jbGFzc2VzIGNsYXNzZXMyOworCisvKioKKyAqIGhhbmRsZV9vcHRpb25zIC0gcHJvY2VzcyBjb21tYW5kIGxpbmUKKyAqIEBwYXJhbSBzcGVjICBwcm9maWxlIHNwZWNpZmljYXRpb24KKyAqCisgKiBQcm9jZXNzIHRoZSBzcGVjLCBmYXRhbGx5IGNvbXBsYWluaW5nIG9uIGVycm9yLgorICovCit2b2lkIGhhbmRsZV9vcHRpb25zKG9wdGlvbnM6OnNwZWMgY29uc3QgJiBzcGVjKTsKKworI2VuZGlmIC8vIE9QUkVQT1JUX09QVElPTlNfSApkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUtMC45LjcvdXRpbHMvTWFrZWZpbGUuYW0gYi9vcHJvZmlsZS0wLjkuNy91dGlscy9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTEzNmUwCi0tLSAvZGV2L251bGwKKysrIGIvb3Byb2ZpbGUtMC45LjcvdXRpbHMvTWFrZWZpbGUuYW0KQEAgLTAsMCArMSwxMCBAQAorQU1fQ1BQRkxBR1M9LUkgJHt0b3Bfc3JjZGlyfS9saWJvcCAtSSAke3RvcF9zcmNkaXJ9L2xpYnV0aWwKK0FNX0NGTEFHUyA9IEBPUF9DRkxBR1NACisKK0xJQlM9QFBPUFRfTElCU0AgQExJQkVSVFlfTElCU0AKKworYmluX1BST0dSQU1TID0gb3BoZWxwCitkaXN0X2Jpbl9TQ1JJUFRTID0gb3Bjb250cm9sCisKK29waGVscF9TT1VSQ0VTID0gb3BoZWxwLmMKK29waGVscF9MREFERCA9IC4uL2xpYm9wL2xpYm9wLmEgLi4vbGlidXRpbC9saWJ1dGlsLmEKZGlmZiAtLWdpdCBhL29wcm9maWxlLTAuOS43L3V0aWxzL01ha2VmaWxlLmluIGIvb3Byb2ZpbGUtMC45LjcvdXRpbHMvTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOThiMTI5ZQotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L3V0aWxzL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsNjI2IEBACisjIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjExLjEgZnJvbSBNYWtlZmlsZS5hbS4KKyMgQGNvbmZpZ3VyZV9pbnB1dEAKKworIyBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsCisjIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyMgSW5jLgorIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAorIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCisjIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworQFNFVF9NQUtFQAorCisKK1ZQQVRIID0gQHNyY2RpckAKK3BrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAorcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACitwa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACitwa2dsaWJleGVjZGlyID0gJChsaWJleGVjZGlyKS9AUEFDS0FHRUAKK2FtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKK2luc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0CitpbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCitpbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKK0lOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCit0cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCitOT1JNQUxfSU5TVEFMTCA9IDoKK1BSRV9JTlNUQUxMID0gOgorUE9TVF9JTlNUQUxMID0gOgorTk9STUFMX1VOSU5TVEFMTCA9IDoKK1BSRV9VTklOU1RBTEwgPSA6CitQT1NUX1VOSU5TVEFMTCA9IDoKK2J1aWxkX3RyaXBsZXQgPSBAYnVpbGRACitob3N0X3RyaXBsZXQgPSBAaG9zdEAKK2Jpbl9QUk9HUkFNUyA9IG9waGVscCQoRVhFRVhUKQorc3ViZGlyID0gdXRpbHMKK0RJU1RfQ09NTU9OID0gJChkaXN0X2Jpbl9TQ1JJUFRTKSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gXAorCSQoc3JjZGlyKS9NYWtlZmlsZS5pbgorQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAorYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvbTQvYmludXRpbHMubTQgXAorCSQodG9wX3NyY2RpcikvbTQvYnVpbHRpbmV4cGVjdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jZWxsc3B1YmZkc3VwcG9ydC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jb21waWxlcm9wdGlvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9jb25maWdtb2R1bGUubTQgXAorCSQodG9wX3NyY2RpcikvbTQvY29weWlmY2hhbmdlLm00ICQodG9wX3NyY2RpcikvbTQvZG9jYm9vay5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9leHRyYWRpcnMubTQgJCh0b3Bfc3JjZGlyKS9tNC9maW5ka2VybmVsLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2tlcm5lbG9wdGlvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9rZXJuZWx2ZXJzaW9uLm00ICQodG9wX3NyY2RpcikvbTQvbGlidG9vbC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9sdG9wdGlvbnMubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdHN1Z2FyLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2x0dmVyc2lvbi5tNCAkKHRvcF9zcmNkaXIpL200L2x0fm9ic29sZXRlLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L21hbGxvY2F0dHJpYnV0ZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9wb3B0Y29uc3QubTQgXAorCSQodG9wX3NyY2RpcikvbTQvcHJlY29tcGlsZWRoZWFkZXIubTQgJCh0b3Bfc3JjZGlyKS9tNC9xdC5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9yZXN1bHR5bi5tNCAkKHRvcF9zcmNkaXIpL200L3NzdHJlYW0ubTQgXAorCSQodG9wX3NyY2RpcikvbTQvdHlwZWRlZi5tNCAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5pbgorYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKKwkkKEFDTE9DQUxfTTQpCitta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAorQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAorQ09ORklHX0NMRUFOX0ZJTEVTID0KK0NPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9CithbV9faW5zdGFsbGRpcnMgPSAiJChERVNURElSKSQoYmluZGlyKSIgIiQoREVTVERJUikkKGJpbmRpcikiCitQUk9HUkFNUyA9ICQoYmluX1BST0dSQU1TKQorYW1fb3BoZWxwX09CSkVDVFMgPSBvcGhlbHAuJChPQkpFWFQpCitvcGhlbHBfT0JKRUNUUyA9ICQoYW1fb3BoZWxwX09CSkVDVFMpCitvcGhlbHBfREVQRU5ERU5DSUVTID0gLi4vbGlib3AvbGlib3AuYSAuLi9saWJ1dGlsL2xpYnV0aWwuYQorYW1fX3ZwYXRoX2Fkal9zZXR1cCA9IHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7CithbV9fdnBhdGhfYWRqID0gY2FzZSAkJHAgaW4gXAorICAgICQoc3JjZGlyKS8qKSBmPWBlY2hvICIkJHAiIHwgc2VkICJzfF4kJHNyY2RpcnN0cmlwL3x8ImA7OyBcCisgICAgKikgZj0kJHA7OyBcCisgIGVzYWM7CithbV9fc3RyaXBfZGlyID0gZj1gZWNobyAkJHAgfCBzZWQgLWUgJ3N8Xi4qL3x8J2A7CithbV9faW5zdGFsbF9tYXggPSA0MAorYW1fX25vYmFzZV9zdHJpcF9zZXR1cCA9IFwKKyAgc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKnxdL1xcXFwmL2cnYAorYW1fX25vYmFzZV9zdHJpcCA9IFwKKyAgZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAiOyBkb25lIHwgc2VkIC1lICJzfCQkc3JjZGlyc3RyaXAvfHwiCithbV9fbm9iYXNlX2xpc3QgPSAkKGFtX19ub2Jhc2Vfc3RyaXBfc2V0dXApOyBcCisgIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwICQkcCI7IGRvbmUgfCBcCisgIHNlZCAic3wgJCRzcmNkaXJzdHJpcC98IHw7IicgLyAuKlwvLyFzLyAuKi8gLi87IHMsXCggLipcKS9bXi9dKiQkLFwxLCcgfCBcCisgICQoQVdLKSAnQkVHSU4geyBmaWxlc1siLiJdID0gIiIgfSB7IGZpbGVzWyQkMl0gPSBmaWxlc1skJDJdICIgIiAkJDE7IFwKKyAgICBpZiAoKytuWyQkMl0gPT0gJChhbV9faW5zdGFsbF9tYXgpKSBcCisgICAgICB7IHByaW50ICQkMiwgZmlsZXNbJCQyXTsgblskJDJdID0gMDsgZmlsZXNbJCQyXSA9ICIiIH0gfSBcCisgICAgRU5EIHsgZm9yIChkaXIgaW4gZmlsZXMpIHByaW50IGRpciwgZmlsZXNbZGlyXSB9JworYW1fX2Jhc2VfbGlzdCA9IFwKKyAgc2VkICckJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjskJCFOO3MvXG4vIC9nJyB8IFwKKyAgc2VkICckJCFOOyQkIU47JCQhTjskJCFOO3MvXG4vIC9nJworU0NSSVBUUyA9ICQoZGlzdF9iaW5fU0NSSVBUUykKK0RFRkFVTFRfSU5DTFVERVMgPSAtSS5AYW1fX2lzcmNAIC1JJCh0b3BfYnVpbGRkaXIpCitkZXBjb21wID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9kZXBjb21wCithbV9fZGVwZmlsZXNfbWF5YmUgPSBkZXBmaWxlcworYW1fX212ID0gbXYgLWYKK0NPTVBJTEUgPSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgXAorCSQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKK0xUQ09NUElMRSA9ICQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSBcCisJLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpIFwKKwkkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpCitDQ0xEID0gJChDQykKK0xJTksgPSAkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgXAorCS0tbW9kZT1saW5rICQoQ0NMRCkgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAkKEFNX0xERkxBR1MpIFwKKwkkKExERkxBR1MpIC1vICRACitTT1VSQ0VTID0gJChvcGhlbHBfU09VUkNFUykKK0RJU1RfU09VUkNFUyA9ICQob3BoZWxwX1NPVVJDRVMpCitFVEFHUyA9IGV0YWdzCitDVEFHUyA9IGN0YWdzCitESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQorQUNMT0NBTCA9IEBBQ0xPQ0FMQAorQU1UQVIgPSBAQU1UQVJACitBUiA9IEBBUkAKK0FVVE9DT05GID0gQEFVVE9DT05GQAorQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAorQVVUT01BS0UgPSBAQVVUT01BS0VACitBV0sgPSBAQVdLQAorQkZEX0xJQlMgPSBAQkZEX0xJQlNACitDQVRfRU5UUllfRU5EID0gQENBVF9FTlRSWV9FTkRACitDQVRfRU5UUllfU1RBUlQgPSBAQ0FUX0VOVFJZX1NUQVJUQAorQ0MgPSBAQ0NACitDQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAorQ0ZMQUdTID0gQENGTEFHU0AKK0NQUCA9IEBDUFBACitDUFBGTEFHUyA9IEBDUFBGTEFHU0AKK0NYWCA9IEBDWFhACitDWFhDUFAgPSBAQ1hYQ1BQQAorQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAorQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACitDWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAorREFURSA9IEBEQVRFQAorREVGUyA9IEBERUZTQAorREVQRElSID0gQERFUERJUkAKK0RPQ0JPT0tfUk9PVCA9IEBET0NCT09LX1JPT1RACitEU1lNVVRJTCA9IEBEU1lNVVRJTEAKK0RVTVBCSU4gPSBARFVNUEJJTkAKK0VDSE9fQyA9IEBFQ0hPX0NACitFQ0hPX04gPSBARUNIT19OQAorRUNIT19UID0gQEVDSE9fVEAKK0VHUkVQID0gQEVHUkVQQAorRVhFRVhUID0gQEVYRUVYVEAKK0VYVFJBX0NGTEFHU19NT0RVTEUgPSBARVhUUkFfQ0ZMQUdTX01PRFVMRUAKK0ZHUkVQID0gQEZHUkVQQAorR1JFUCA9IEBHUkVQQAorSU5TVEFMTCA9IEBJTlNUQUxMQAorSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKK0lOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACitJTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKK0lOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACitKQVZBX0hPTUVESVIgPSBASkFWQV9IT01FRElSQAorS0lOQyA9IEBLSU5DQAorS1NSQyA9IEBLU1JDQAorS1ZFUlMgPSBAS1ZFUlNACitMRCA9IEBMREAKK0xERkxBR1MgPSBATERGTEFHU0AKK0xJQkVSVFlfTElCUyA9IEBMSUJFUlRZX0xJQlNACitMSUJPQkpTID0gQExJQk9CSlNACitMSUJTID0gQFBPUFRfTElCU0AgQExJQkVSVFlfTElCU0AKK0xJQlRPT0wgPSBATElCVE9PTEAKK0xJUE8gPSBATElQT0AKK0xOX1MgPSBATE5fU0AKK0xUTElCT0JKUyA9IEBMVExJQk9CSlNACitNQUtFSU5GTyA9IEBNQUtFSU5GT0AKK01LRElSX1AgPSBATUtESVJfUEAKK01PQyA9IEBNT0NACitNT0RJTlNUQUxMRElSID0gQE1PRElOU1RBTExESVJACitOTSA9IEBOTUAKK05NRURJVCA9IEBOTUVESVRACitPQkpEVU1QID0gQE9CSkRVTVBACitPQkpFWFQgPSBAT0JKRVhUQAorT1BST0ZJTEVfRElSID0gQE9QUk9GSUxFX0RJUkAKK09QUk9GSUxFX01PRFVMRV9BUkNIID0gQE9QUk9GSUxFX01PRFVMRV9BUkNIQAorT1BfQ0ZMQUdTID0gQE9QX0NGTEFHU0AKK09QX0NYWEZMQUdTID0gQE9QX0NYWEZMQUdTQAorT1BfRE9DRElSID0gQE9QX0RPQ0RJUkAKK09UT09MID0gQE9UT09MQAorT1RPT0w2NCA9IEBPVE9PTDY0QAorUEFDS0FHRSA9IEBQQUNLQUdFQAorUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACitQQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAorUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACitQQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAorUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACitQQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAorUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACitQS0dfQ09ORklHID0gQFBLR19DT05GSUdACitQS0dfQ09ORklHX0xJQkRJUiA9IEBQS0dfQ09ORklHX0xJQkRJUkAKK1BLR19DT05GSUdfUEFUSCA9IEBQS0dfQ09ORklHX1BBVEhACitQT1BUX0xJQlMgPSBAUE9QVF9MSUJTQAorUFRSRElGRl9UX1RZUEUgPSBAUFRSRElGRl9UX1RZUEVACitRVF9DRkxBR1MgPSBAUVRfQ0ZMQUdTQAorUVRfSU5DTFVERVMgPSBAUVRfSU5DTFVERVNACitRVF9MREZMQUdTID0gQFFUX0xERkxBR1NACitRVF9MSUIgPSBAUVRfTElCQAorUVRfTElCUyA9IEBRVF9MSUJTQAorUVRfVkVSU0lPTiA9IEBRVF9WRVJTSU9OQAorUkFOTElCID0gQFJBTkxJQkAKK1NFRCA9IEBTRURACitTRVRfTUFLRSA9IEBTRVRfTUFLRUAKK1NIRUxMID0gQFNIRUxMQAorU0laRV9UX1RZUEUgPSBAU0laRV9UX1RZUEVACitTVFJJUCA9IEBTVFJJUEAKK1VJQyA9IEBVSUNACitVSUNoZWxwID0gQFVJQ2hlbHBACitWRVJTSU9OID0gQFZFUlNJT05ACitYTUtNRiA9IEBYTUtNRkAKK1hNTF9DQVRBTE9HID0gQFhNTF9DQVRBTE9HQAorWFNMVFBST0MgPSBAWFNMVFBST0NACitYU0xUUFJPQ19GTEFHUyA9IEBYU0xUUFJPQ19GTEFHU0AKK1hfQ0ZMQUdTID0gQFhfQ0ZMQUdTQAorWF9FWFRSQV9MSUJTID0gQFhfRVhUUkFfTElCU0AKK1hfTElCUyA9IEBYX0xJQlNACitYX1BSRV9MSUJTID0gQFhfUFJFX0xJQlNACithYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAorYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAorYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAorYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACithY19jdF9DQyA9IEBhY19jdF9DQ0AKK2FjX2N0X0NYWCA9IEBhY19jdF9DWFhACithY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACithbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKK2FtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACithbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAorYW1fX3RhciA9IEBhbV9fdGFyQAorYW1fX3VudGFyID0gQGFtX191bnRhckAKK2JpbmRpciA9IEBiaW5kaXJACitidWlsZCA9IEBidWlsZEAKK2J1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAorYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKK2J1aWxkX29zID0gQGJ1aWxkX29zQAorYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKK2J1aWxkZGlyID0gQGJ1aWxkZGlyQAorZGF0YWRpciA9IEBkYXRhZGlyQAorZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACitkb2NkaXIgPSBAZG9jZGlyQAorZHZpZGlyID0gQGR2aWRpckAKK2V4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAoraG9zdCA9IEBob3N0QAoraG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAoraG9zdF9jcHUgPSBAaG9zdF9jcHVACitob3N0X29zID0gQGhvc3Rfb3NACitob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKK2h0bWxkaXIgPSBAaHRtbGRpckAKK2luY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKK2luZm9kaXIgPSBAaW5mb2RpckAKK2luc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKK2xpYmRpciA9IEBsaWJkaXJACitsaWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACitsb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAorbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAorbHRfRUNITyA9IEBsdF9FQ0hPQAorbWFuZGlyID0gQG1hbmRpckAKK21rZGlyX3AgPSBAbWtkaXJfcEAKK29sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKK3BkZmRpciA9IEBwZGZkaXJACitwcmVmaXggPSBAcHJlZml4QAorcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAorcHNkaXIgPSBAcHNkaXJACitzYmluZGlyID0gQHNiaW5kaXJACitzaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKK3NyY2RpciA9IEBzcmNkaXJACitzeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACit0YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAordG9wX2J1aWxkX3ByZWZpeCA9IEB0b3BfYnVpbGRfcHJlZml4QAordG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKK3RvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKK3RvcGRpciA9IEB0b3BkaXJACitBTV9DUFBGTEFHUyA9IC1JICR7dG9wX3NyY2Rpcn0vbGlib3AgLUkgJHt0b3Bfc3JjZGlyfS9saWJ1dGlsCitBTV9DRkxBR1MgPSBAT1BfQ0ZMQUdTQAorZGlzdF9iaW5fU0NSSVBUUyA9IG9wY29udHJvbAorb3BoZWxwX1NPVVJDRVMgPSBvcGhlbHAuYworb3BoZWxwX0xEQUREID0gLi4vbGlib3AvbGlib3AuYSAuLi9saWJ1dGlsL2xpYnV0aWwuYQorYWxsOiBhbGwtYW0KKworLlNVRkZJWEVTOgorLlNVRkZJWEVTOiAuYyAubG8gLm8gLm9iagorJChzcmNkaXIpL01ha2VmaWxlLmluOiAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKKwlAZm9yIGRlcCBpbiAkPzsgZG8gXAorCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCisJICAgICokJGRlcCopIFwKKwkgICAgICAoIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCApIFwKKwkgICAgICAgICYmIHsgaWYgdGVzdCAtZiAkQDsgdGhlbiBleGl0IDA7IGVsc2UgYnJlYWs7IGZpOyB9OyBcCisJICAgICAgZXhpdCAxOzsgXAorCSAgZXNhYzsgXAorCWRvbmU7IFwKKwllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gdXRpbHMvTWFrZWZpbGUnOyBcCisJJChhbV9fY2QpICQodG9wX3NyY2RpcikgJiYgXAorCSAgJChBVVRPTUFLRSkgLS1mb3JlaWduIHV0aWxzL01ha2VmaWxlCisuUFJFQ0lPVVM6IE1ha2VmaWxlCitNYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCisJQGNhc2UgJyQ/JyBpbiBcCisJICAqY29uZmlnLnN0YXR1cyopIFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoOzsgXAorCSAgKikgXAorCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCisJZXNhYzsKKworJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2RpcikvY29uZmlndXJlICQoQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCisKKyQodG9wX3NyY2RpcikvY29uZmlndXJlOiAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCiskKEFDTE9DQUxfTTQpOiAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorJChhbV9fYWNsb2NhbF9tNF9kZXBzKToKK2luc3RhbGwtYmluUFJPR1JBTVM6ICQoYmluX1BST0dSQU1TKQorCUAkKE5PUk1BTF9JTlNUQUxMKQorCXRlc3QgLXogIiQoYmluZGlyKSIgfHwgJChNS0RJUl9QKSAiJChERVNURElSKSQoYmluZGlyKSIKKwlAbGlzdD0nJChiaW5fUFJPR1JBTVMpJzsgdGVzdCAtbiAiJChiaW5kaXIpIiB8fCBsaXN0PTsgXAorCWZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwICQkcCI7IGRvbmUgfCBcCisJc2VkICdzLyQoRVhFRVhUKSQkLy8nIHwgXAorCXdoaWxlIHJlYWQgcCBwMTsgZG8gaWYgdGVzdCAtZiAkJHAgfHwgdGVzdCAtZiAkJHAxOyBcCisJICB0aGVuIGVjaG8gIiQkcCI7IGVjaG8gIiQkcCI7IGVsc2UgOjsgZmk7IFwKKwlkb25lIHwgXAorCXNlZCAtZSAncDtzLC4qLywsO247aCcgLWUgJ3N8Lip8LnwnIFwKKwkgICAgLWUgJ3A7eDtzLC4qLywsO3MvJChFWEVFWFQpJCQvLzskKHRyYW5zZm9ybSk7cy8kJC8kKEVYRUVYVCkvJyB8IFwKKwlzZWQgJ047TjtOO3MsXG4sICxnJyB8IFwKKwkkKEFXSykgJ0JFR0lOIHsgZmlsZXNbIi4iXSA9ICIiOyBkaXJzWyIuIl0gPSAxIH0gXAorCSAgeyBkPSQkMzsgaWYgKGRpcnNbZF0gIT0gMSkgeyBwcmludCAiZCIsIGQ7IGRpcnNbZF0gPSAxIH0gXAorCSAgICBpZiAoJCQyID09ICQkNCkgZmlsZXNbZF0gPSBmaWxlc1tkXSAiICIgJCQxOyBcCisJICAgIGVsc2UgeyBwcmludCAiZiIsICQkMyAiLyIgJCQ0LCAkJDE7IH0gfSBcCisJICBFTkQgeyBmb3IgKGQgaW4gZmlsZXMpIHByaW50ICJmIiwgZCwgZmlsZXNbZF0gfScgfCBcCisJd2hpbGUgcmVhZCB0eXBlIGRpciBmaWxlczsgZG8gXAorCSAgICBpZiB0ZXN0ICIkJGRpciIgPSAuOyB0aGVuIGRpcj07IGVsc2UgZGlyPS8kJGRpcjsgZmk7IFwKKwkgICAgdGVzdCAteiAiJCRmaWxlcyIgfHwgeyBcCisJICAgIGVjaG8gIiAkKElOU1RBTExfUFJPR1JBTV9FTlYpICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9aW5zdGFsbCAkKElOU1RBTExfUFJPR1JBTSkgJCRmaWxlcyAnJChERVNURElSKSQoYmluZGlyKSQkZGlyJyI7IFwKKwkgICAgJChJTlNUQUxMX1BST0dSQU1fRU5WKSAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWluc3RhbGwgJChJTlNUQUxMX1BST0dSQU0pICQkZmlsZXMgIiQoREVTVERJUikkKGJpbmRpcikkJGRpciIgfHwgZXhpdCAkJD87IFwKKwkgICAgfSBcCisJOyBkb25lCisKK3VuaW5zdGFsbC1iaW5QUk9HUkFNUzoKKwlAJChOT1JNQUxfVU5JTlNUQUxMKQorCUBsaXN0PSckKGJpbl9QUk9HUkFNUyknOyB0ZXN0IC1uICIkKGJpbmRpcikiIHx8IGxpc3Q9OyBcCisJZmlsZXM9YGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwIjsgZG9uZSB8IFwKKwkgIHNlZCAtZSAnaDtzLF4uKi8sLDtzLyQoRVhFRVhUKSQkLy87JCh0cmFuc2Zvcm0pJyBcCisJICAgICAgLWUgJ3MvJCQvJChFWEVFWFQpLycgYDsgXAorCXRlc3QgLW4gIiQkbGlzdCIgfHwgZXhpdCAwOyBcCisJZWNobyAiICggY2QgJyQoREVTVERJUikkKGJpbmRpciknICYmIHJtIC1mIiAkJGZpbGVzICIpIjsgXAorCWNkICIkKERFU1RESVIpJChiaW5kaXIpIiAmJiBybSAtZiAkJGZpbGVzCisKK2NsZWFuLWJpblBST0dSQU1TOgorCUBsaXN0PSckKGJpbl9QUk9HUkFNUyknOyB0ZXN0IC1uICIkJGxpc3QiIHx8IGV4aXQgMDsgXAorCWVjaG8gIiBybSAtZiIgJCRsaXN0OyBcCisJcm0gLWYgJCRsaXN0IHx8IGV4aXQgJCQ/OyBcCisJdGVzdCAtbiAiJChFWEVFWFQpIiB8fCBleGl0IDA7IFwKKwlsaXN0PWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCI7IGRvbmUgfCBzZWQgJ3MvJChFWEVFWFQpJCQvLydgOyBcCisJZWNobyAiIHJtIC1mIiAkJGxpc3Q7IFwKKwlybSAtZiAkJGxpc3QKK29waGVscCQoRVhFRVhUKTogJChvcGhlbHBfT0JKRUNUUykgJChvcGhlbHBfREVQRU5ERU5DSUVTKSAKKwlAcm0gLWYgb3BoZWxwJChFWEVFWFQpCisJJChMSU5LKSAkKG9waGVscF9PQkpFQ1RTKSAkKG9waGVscF9MREFERCkgJChMSUJTKQoraW5zdGFsbC1kaXN0X2JpblNDUklQVFM6ICQoZGlzdF9iaW5fU0NSSVBUUykKKwlAJChOT1JNQUxfSU5TVEFMTCkKKwl0ZXN0IC16ICIkKGJpbmRpcikiIHx8ICQoTUtESVJfUCkgIiQoREVTVERJUikkKGJpbmRpcikiCisJQGxpc3Q9JyQoZGlzdF9iaW5fU0NSSVBUUyknOyB0ZXN0IC1uICIkKGJpbmRpcikiIHx8IGxpc3Q9OyBcCisJZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0IC1mICIkJHAiOyB0aGVuIGQ9OyBlbHNlIGQ9IiQoc3JjZGlyKS8iOyBmaTsgXAorCSAgaWYgdGVzdCAtZiAiJCRkJCRwIjsgdGhlbiBlY2hvICIkJGQkJHAiOyBlY2hvICIkJHAiOyBlbHNlIDo7IGZpOyBcCisJZG9uZSB8IFwKKwlzZWQgLWUgJ3A7cywuKi8sLDtuJyBcCisJICAgIC1lICdoO3N8Lip8LnwnIFwKKwkgICAgLWUgJ3A7eDtzLC4qLywsOyQodHJhbnNmb3JtKScgfCBzZWQgJ047TjtOO3MsXG4sICxnJyB8IFwKKwkkKEFXSykgJ0JFR0lOIHsgZmlsZXNbIi4iXSA9ICIiOyBkaXJzWyIuIl0gPSAxOyB9IFwKKwkgIHsgZD0kJDM7IGlmIChkaXJzW2RdICE9IDEpIHsgcHJpbnQgImQiLCBkOyBkaXJzW2RdID0gMSB9IFwKKwkgICAgaWYgKCQkMiA9PSAkJDQpIHsgZmlsZXNbZF0gPSBmaWxlc1tkXSAiICIgJCQxOyBcCisJICAgICAgaWYgKCsrbltkXSA9PSAkKGFtX19pbnN0YWxsX21heCkpIHsgXAorCQlwcmludCAiZiIsIGQsIGZpbGVzW2RdOyBuW2RdID0gMDsgZmlsZXNbZF0gPSAiIiB9IH0gXAorCSAgICBlbHNlIHsgcHJpbnQgImYiLCBkICIvIiAkJDQsICQkMSB9IH0gXAorCSAgRU5EIHsgZm9yIChkIGluIGZpbGVzKSBwcmludCAiZiIsIGQsIGZpbGVzW2RdIH0nIHwgXAorCXdoaWxlIHJlYWQgdHlwZSBkaXIgZmlsZXM7IGRvIFwKKwkgICAgIGlmIHRlc3QgIiQkZGlyIiA9IC47IHRoZW4gZGlyPTsgZWxzZSBkaXI9LyQkZGlyOyBmaTsgXAorCSAgICAgdGVzdCAteiAiJCRmaWxlcyIgfHwgeyBcCisJICAgICAgIGVjaG8gIiAkKElOU1RBTExfU0NSSVBUKSAkJGZpbGVzICckKERFU1RESVIpJChiaW5kaXIpJCRkaXInIjsgXAorCSAgICAgICAkKElOU1RBTExfU0NSSVBUKSAkJGZpbGVzICIkKERFU1RESVIpJChiaW5kaXIpJCRkaXIiIHx8IGV4aXQgJCQ/OyBcCisJICAgICB9IFwKKwk7IGRvbmUKKwordW5pbnN0YWxsLWRpc3RfYmluU0NSSVBUUzoKKwlAJChOT1JNQUxfVU5JTlNUQUxMKQorCUBsaXN0PSckKGRpc3RfYmluX1NDUklQVFMpJzsgdGVzdCAtbiAiJChiaW5kaXIpIiB8fCBleGl0IDA7IFwKKwlmaWxlcz1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAiOyBkb25lIHwgXAorCSAgICAgICBzZWQgLWUgJ3MsLiovLCw7JCh0cmFuc2Zvcm0pJ2A7IFwKKwl0ZXN0IC1uICIkJGxpc3QiIHx8IGV4aXQgMDsgXAorCWVjaG8gIiAoIGNkICckKERFU1RESVIpJChiaW5kaXIpJyAmJiBybSAtZiIgJCRmaWxlcyAiKSI7IFwKKwljZCAiJChERVNURElSKSQoYmluZGlyKSIgJiYgcm0gLWYgJCRmaWxlcworCittb3N0bHljbGVhbi1jb21waWxlOgorCS1ybSAtZiAqLiQoT0JKRVhUKQorCitkaXN0Y2xlYW4tY29tcGlsZToKKwktcm0gLWYgKi50YWIuYworCitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvb3BoZWxwLlBvQGFtX19xdW90ZUAKKworLmMubzoKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgJDwKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ09NUElMRSkgLWMgJDwKKworLmMub2JqOgorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENPTVBJTEUpIC1jIGAkKENZR1BBVEhfVykgJyQ8J2AKKworLmMubG86CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExUQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgJDwKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkKERFUERJUikvJCouVHBvICQoREVQRElSKS8kKi5QbG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMVENPTVBJTEUpIC1jIC1vICRAICQ8CisKK21vc3RseWNsZWFuLWxpYnRvb2w6CisJLXJtIC1mICoubG8KKworY2xlYW4tbGlidG9vbDoKKwktcm0gLXJmIC5saWJzIF9saWJzCisKK0lEOiAkKEhFQURFUlMpICQoU09VUkNFUykgJChMSVNQKSAkKFRBR1NfRklMRVMpCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCisJICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCisJbWtpZCAtZklEICQkdW5pcXVlCit0YWdzOiBUQUdTCisKK1RBR1M6ICAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKKwkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCisJc2V0IHg7IFwKKwloZXJlPWBwd2RgOyBcCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorCXNoaWZ0OyBcCisJaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkKiQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKKwkgIHRlc3QgLW4gIiQkdW5pcXVlIiB8fCB1bmlxdWU9JCRlbXB0eV9maXg7IFwKKwkgIGlmIHRlc3QgJCQjIC1ndCAwOyB0aGVuIFwKKwkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAorCSAgICAgICIkJEAiICQkdW5pcXVlOyBcCisJICBlbHNlIFwKKwkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAorCSAgICAgICQkdW5pcXVlOyBcCisJICBmaTsgXAorCWZpCitjdGFnczogQ1RBR1MKK0NUQUdTOiAgJChIRUFERVJTKSAkKFNPVVJDRVMpICAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCisJCSQoVEFHU19GSUxFUykgJChMSVNQKQorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKwkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKwl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR1bmlxdWUiIFwKKwkgIHx8ICQoQ1RBR1MpICQoQ1RBR1NGTEFHUykgJChBTV9DVEFHU0ZMQUdTKSAkKENUQUdTX0FSR1MpIFwKKwkgICAgICQkdW5pcXVlCisKK0dUQUdTOgorCWhlcmU9YCQoYW1fX2NkKSAkKHRvcF9idWlsZGRpcikgJiYgcHdkYCBcCisJICAmJiAkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSBcCisJICAmJiBndGFncyAtaSAkKEdUQUdTX0FSR1MpICIkJGhlcmUiCisKK2Rpc3RjbGVhbi10YWdzOgorCS1ybSAtZiBUQUdTIElEIEdUQUdTIEdSVEFHUyBHU1lNUyBHUEFUSCB0YWdzCisKK2Rpc3RkaXI6ICQoRElTVEZJTEVTKQorCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisJbGlzdD0nJChESVNURklMRVMpJzsgXAorCSAgZGlzdF9maWxlcz1gZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8IFwKKwkgIHNlZCAtZSAic3xeJCRzcmNkaXJzdHJpcC98fDt0IiBcCisJICAgICAgLWUgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98O3QiYDsgXAorCWNhc2UgJCRkaXN0X2ZpbGVzIGluIFwKKwkgICovKikgJChNS0RJUl9QKSBgZWNobyAiJCRkaXN0X2ZpbGVzIiB8IFwKKwkJCSAgIHNlZCAnL1wvLyFkO3N8XnwkKGRpc3RkaXIpL3w7cywvW14vXSokJCwsJyB8IFwKKwkJCSAgIHNvcnQgLXVgIDs7IFwKKwllc2FjOyBcCisJZm9yIGZpbGUgaW4gJCRkaXN0X2ZpbGVzOyBkbyBcCisJICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCisJICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAorCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAorCSAgICBpZiB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkZmlsZSI7IHRoZW4gXAorCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAorCSAgICBmaTsgXAorCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKKwkgICAgICBjcCAtZnBSICQoc3JjZGlyKS8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCisJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisJICAgIGZpOyBcCisJICAgIGNwIC1mcFIgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKKwkgIGVsc2UgXAorCSAgICB0ZXN0IC1mICIkKGRpc3RkaXIpLyQkZmlsZSIgXAorCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICIkKGRpc3RkaXIpLyQkZmlsZSIgXAorCSAgICB8fCBleGl0IDE7IFwKKwkgIGZpOyBcCisJZG9uZQorY2hlY2stYW06IGFsbC1hbQorY2hlY2s6IGNoZWNrLWFtCithbGwtYW06IE1ha2VmaWxlICQoUFJPR1JBTVMpICQoU0NSSVBUUykKK2luc3RhbGxkaXJzOgorCWZvciBkaXIgaW4gIiQoREVTVERJUikkKGJpbmRpcikiICIkKERFU1RESVIpJChiaW5kaXIpIjsgZG8gXAorCSAgdGVzdCAteiAiJCRkaXIiIHx8ICQoTUtESVJfUCkgIiQkZGlyIjsgXAorCWRvbmUKK2luc3RhbGw6IGluc3RhbGwtYW0KK2luc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLWFtCitpbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1hbQordW5pbnN0YWxsOiB1bmluc3RhbGwtYW0KKworaW5zdGFsbC1hbTogYWxsLWFtCisJQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KKworaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KK2luc3RhbGwtc3RyaXA6CisJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKKwkgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorCSAgYHRlc3QgLXogJyQoU1RSSVApJyB8fCBcCisJICAgIGVjaG8gIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciYCBpbnN0YWxsCittb3N0bHljbGVhbi1nZW5lcmljOgorCitjbGVhbi1nZW5lcmljOgorCitkaXN0Y2xlYW4tZ2VuZXJpYzoKKwktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKKwktdGVzdCAuID0gIiQoc3JjZGlyKSIgfHwgdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykKKworbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgorCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKKwlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCitjbGVhbjogY2xlYW4tYW0KKworY2xlYW4tYW06IGNsZWFuLWJpblBST0dSQU1TIGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBtb3N0bHljbGVhbi1hbQorCitkaXN0Y2xlYW46IGRpc3RjbGVhbi1hbQorCS1ybSAtcmYgLi8kKERFUERJUikKKwktcm0gLWYgTWFrZWZpbGUKK2Rpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAorCWRpc3RjbGVhbi10YWdzCisKK2R2aTogZHZpLWFtCisKK2R2aS1hbToKKworaHRtbDogaHRtbC1hbQorCitodG1sLWFtOgorCitpbmZvOiBpbmZvLWFtCisKK2luZm8tYW06CisKK2luc3RhbGwtZGF0YS1hbToKKworaW5zdGFsbC1kdmk6IGluc3RhbGwtZHZpLWFtCisKK2luc3RhbGwtZHZpLWFtOgorCitpbnN0YWxsLWV4ZWMtYW06IGluc3RhbGwtYmluUFJPR1JBTVMgaW5zdGFsbC1kaXN0X2JpblNDUklQVFMKKworaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KKworaW5zdGFsbC1odG1sLWFtOgorCitpbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQorCitpbnN0YWxsLWluZm8tYW06CisKK2luc3RhbGwtbWFuOgorCitpbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KKworaW5zdGFsbC1wZGYtYW06CisKK2luc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KKworaW5zdGFsbC1wcy1hbToKKworaW5zdGFsbGNoZWNrLWFtOgorCittYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCisJLXJtIC1yZiAuLyQoREVQRElSKQorCS1ybSAtZiBNYWtlZmlsZQorbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYworCittb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tYW0KKworbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCisJbW9zdGx5Y2xlYW4tbGlidG9vbAorCitwZGY6IHBkZi1hbQorCitwZGYtYW06CisKK3BzOiBwcy1hbQorCitwcy1hbToKKwordW5pbnN0YWxsLWFtOiB1bmluc3RhbGwtYmluUFJPR1JBTVMgdW5pbnN0YWxsLWRpc3RfYmluU0NSSVBUUworCisuTUFLRTogaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwCisKKy5QSE9OWTogQ1RBR1MgR1RBR1MgYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBjbGVhbi1iaW5QUk9HUkFNUyBcCisJY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIGN0YWdzIGRpc3RjbGVhbiBkaXN0Y2xlYW4tY29tcGlsZSBcCisJZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLWxpYnRvb2wgZGlzdGNsZWFuLXRhZ3MgZGlzdGRpciBkdmkgXAorCWR2aS1hbSBodG1sIGh0bWwtYW0gaW5mbyBpbmZvLWFtIGluc3RhbGwgaW5zdGFsbC1hbSBcCisJaW5zdGFsbC1iaW5QUk9HUkFNUyBpbnN0YWxsLWRhdGEgaW5zdGFsbC1kYXRhLWFtIFwKKwlpbnN0YWxsLWRpc3RfYmluU0NSSVBUUyBpbnN0YWxsLWR2aSBpbnN0YWxsLWR2aS1hbSBcCisJaW5zdGFsbC1leGVjIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgaW5zdGFsbC1odG1sLWFtIFwKKwlpbnN0YWxsLWluZm8gaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIGluc3RhbGwtcGRmIFwKKwlpbnN0YWxsLXBkZi1hbSBpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gaW5zdGFsbC1zdHJpcCBcCisJaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBtYWludGFpbmVyLWNsZWFuIFwKKwltYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gbW9zdGx5Y2xlYW4tY29tcGlsZSBcCisJbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sIHBkZiBwZGYtYW0gcHMgcHMtYW0gXAorCXRhZ3MgdW5pbnN0YWxsIHVuaW5zdGFsbC1hbSB1bmluc3RhbGwtYmluUFJPR1JBTVMgXAorCXVuaW5zdGFsbC1kaXN0X2JpblNDUklQVFMKKworCisjIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgorIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCisuTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy91dGlscy9vcGNvbnRyb2wgYi9vcHJvZmlsZS0wLjkuNy91dGlscy9vcGNvbnRyb2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDk1MTU3NAotLS0gL2Rldi9udWxsCisrKyBiL29wcm9maWxlLTAuOS43L3V0aWxzL29wY29udHJvbApAQCAtMCwwICsxLDIyMDggQEAKKyMhL2Jpbi9zaAorIworIyBvcGNvbnRyb2wgaXMgYSBzY3JpcHQgdG8gY29udHJvbCBPUHJvZmlsZQorIyBvcGNvbnRyb2wgLS1oZWxwIGFuZCBvcGNvbnRyb2wgLS1saXN0LWV2ZW50cyBoYXZlIGluZm8KKyMKKyMgQ29weXJpZ2h0IDIwMDIKKyMgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCisjCisjIEF1dGhvcnM6IEpvaG4gTGV2b24sIFBoaWxpcHBlIEVsaWUsIFdpbGwgQ29oZW4sIEplbnMgV2lsa2UsIERhbmllbCBIYW5zZWwKKyMKKyMgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDA3CisjCisjIE5PVEU6IFRoaXMgc2NyaXB0IHNob3VsZCBiZSBhcyBzaGVsbCBpbmRlcGVuZGVudCBhcyBwb3NzaWJsZQorCitTWVNDVEw9ZG9fc3lzY3RsCisKKyMgQSByZXBsYWNlbWVudCBmdW5jdGlvbiBmb3IgdGhlIHN5c2N0bCAocHJvY3BzIHBhY2thZ2UpIHV0aWxpdHkgd2hpY2ggaXMKKyMgbWlzc2luZyBvbiBzb21lIGRpc3RyaWJ1dGlvbiAoZS5nLiBzbGFjayA3LjApLgorIyBIYW5kbGVzIG9ubHkgdGhlIC13IG9wdGlvbiBvZiBzeXNjdGwuCitkb19zeXNjdGwoKQoreworCWlmIHRlc3QgIiQxIiAhPSAiLXciOyB0aGVuCisJCWVjaG8gIiQwIHVua25vd24gc3lzY3RsIG9wdGlvbiIgPiYyCisJCWV4aXQgMQorCWZpCisKKwlzaGlmdAorCisJYXJnPWBlY2hvICQxIHwgYXdrIC1GPSAne3ByaW50ICQxfSdgCisJdmFsPWBlY2hvICQxIHwgYXdrIC1GPSAne3ByaW50ICQyfSdgCisKKwlkZXZfbmFtZT1gZWNobyAkYXJnIHwgdHIgLiAvYAorCisJaWYgdGVzdCAhIC1mIC9wcm9jL3N5cy8kZGV2X25hbWU7IHRoZW4KKwkJZWNobyAiL3Byb2Mvc3lzLyRkZXZfbmFtZSBkb2VzIG5vdCBleGlzdCBvciBpcyBub3QgYSByZWd1bGFyIGZpbGUiID4mMgorCQlleGl0IDEKKwlmaQorCWVjaG8gJHZhbCA+IC9wcm9jL3N5cy8kZGV2X25hbWUKK30KKworIyBIZWxwZXIgZnVuY3Rpb24gdG8gY2hlY2sgaWYgb3Byb2ZpbGUgZGFlbW9uIGlzIGFjdGl2ZS4KKyMgVGFrZXMgb25lIGFyZ3VtZW50OiB0aGUgImxvY2sgZmlsZSIgZm9yIHRoZSBvcHJvZmlsZSBkYWVtb24uCisjIFRoZSBsb2NrIGZpbGUgbWF5IGV4aXN0IGV2ZW4gaWYgdGhlIGRhZW1vbiB3YXMga2lsbGVkIG9yIGRpZWQgaW4KKyMgc29tZSB3YXkuICBTbyB3ZSBkbyBhIGtpbGwgU0lHX0RGTCB0byB0ZXN0IHdoZXRoZXIgdGhlIGRhZW1vbiBpcworIyB0cnVseSBhbGl2ZS4gSWYgdGhlIGxvY2sgZmlsZSBpcyBzdGFsZSAoZGFlbW9uIGRlYWQpLCB0aGUga2lsbCB3aWxsCisjIG5vdCByZXR1cm4gJzAnLgoraXNfb3Byb2ZpbGVkX2FjdGl2ZSgpCit7CisgICAgICAgIFsgLWYgIiQxIiBdICYmIGtpbGwgLTAgYGNhdCAiJDEiYCAyPi9kZXYvbnVsbAorfQorCisjIGNoZWNrIHZhbHVlIGlzIHNldAorZXJyb3JfaWZfZW1wdHkoKQoreworCWlmIHRlc3QgLXogIiQyIjsgdGhlbgorCQllY2hvICJObyB2YWx1ZSBnaXZlbiBmb3Igb3B0aW9uICQxIiA+JjIKKwkJZG9faGVscAorCQlleGl0IDEKKwlmaQorfQorCisjIGd1ZXNzX251bWJlcl9iYXNlKCkgY2hlY2tzIGlmIHN0cmluZyBpcyBhIHZhbGlkIG9jdGFsKDgpLCBoZXhpZGVjaW1hbCgxNiksCisjIG9yIGRlY2ltYWwgbnVtYmVyKDEwKS4gVGhlIHZhbHVlIGlzIHJldHVybmVkIGluICQ/LiBSZXR1cm5zIDAsIGlmIHN0cmluZworIyBpc24ndCBhIG9jdGFsLCBoZXhpZGVjaW1hbCwgb3IgZGVjaW1hbCBudW1iZXIuCitndWVzc19udW1iZXJfYmFzZSgpCit7CisJY2FzZSAiJDEiIGluCisJCTBbWHhdKlshMC05YS1mQS1GXSopCXJldHVybiAwICA7OyAjIEJhZCBoZXggc3RyaW5nCisJCTBbWHhdWzAtOWEtZkEtRl0qKQlyZXR1cm4gMTYgOzsgIyBIZXgKKwkJKlshMC05XSopCQlyZXR1cm4gMCAgOzsgIyBTb21lIG5vbi1kaWdpdCBjaGFyCisJCVsxLTldKikJCQlyZXR1cm4gMTAgOzsgIyBCYXNlIDEwCisJCTAqWzg5XSopCQlyZXR1cm4gMCAgOzsgIyBCYWQgb2N0YWwgc3RyaW5nCisJCTAqKQkJCXJldHVybiA4ICA7OyAjIE9jdGFsCisJZXNhYworCXJldHVybiAwCit9CisKKyMgY2hlY2sgdmFsdWUgaXMgYSB2YWxpZCBudW1iZXIKK2Vycm9yX2lmX25vdF9udW1iZXIoKQoreworCWVycm9yX2lmX2VtcHR5ICIkMSIgIiQyIgorCWd1ZXNzX251bWJlcl9iYXNlICIkMiIKKwlpZiB0ZXN0ICIkPyIgLWVxIDAgOyB0aGVuCisJCWVjaG8gIkFyZ3VtZW50IGZvciAkMSwgJDIsIGlzIG5vdCBhIHZhbGlkIG51bWJlci4iID4mMgorCQlleGl0IDEKKwlmaQorfQorCisjIGNoZWNrIHZhbHVlIGlzIGEgYmFzZSBmaWxlbmFtZQorZXJyb3JfaWZfbm90X3ZhbGlkX3NhdmVuYW1lKCkKK3sKKwllcnJvcl9pZl9lbXB0eSAiJDEiICIkMiIKKwlibmFtZT1gYmFzZW5hbWUgIiQyImAKKwlpZiB0ZXN0ICIkMiIgIT0gICIkYm5hbWUiOyB0aGVuCisJCWVjaG8gIkFyZ3VtZW50IGZvciAkMSwgJDIsIGNhbm5vdCBjaGFuZ2UgZGlyZWN0b3J5LiIgPiYyCisJCWV4aXQgMQorCWZpCisJY2FzZSAiJDIiIGluCisJCSMgVGhlIGZvbGxvd2luZyBjYXRjaGVzIGFueXRoaW5nIHRoYXQgaXMgbm90CisJCSMgMC05LCBhLXosIEEtWiwgYW4gJy0nLCAnOicsICcsJywgJy4nLCBvciAnLycKKwkJKlshLVs6YWxudW06XV86LC4vXSopIAorCQkJZWNobyAiQXJndW1lbnQgZm9yICQxLCAkMiwgbm90IGFsbG93IHRvIGhhdmUgc3BlY2lhbCBjaGFyYWN0ZXJzIiA+JjIKKwkJCWV4aXQgMTs7CisJZXNhYworfQorCitlcnJvcl9pZl9pbnZhbGlkX2FyZygpCit7CisJZXJyb3JfaWZfZW1wdHkgIiQxIiAiJDIiCisJY2FzZSAiJDIiIGluCisJCSMgVGhlIGZvbGxvd2luZyBjYXRjaGVzIGFueXRoaW5nIHRoYXQgaXMgbm90CisJCSMgMC05LCBhLXosIEEtWiwgYW4gJy0nLCAnOicsICcsJywgJy4nLCBvciAnLycKKwkJKlshLVs6YWxudW06XV86LC4vXSopIAorCQkJZWNobyAiQXJndW1lbnQgZm9yICQxLCAkMiwgaXMgbm90IHZhbGlkIGFyZ3VtZW50LiIgPiYyCisJCQlleGl0IDE7OworCWVzYWMKK30KKworIyBybV9kZXZpY2UgYXJndW1lbnRzICQxPWZpbGVfbmFtZQorcm1fZGV2aWNlKCkKK3sKKwlpZiB0ZXN0IC1jICIkMSI7IHRoZW4KKwkJdmVjaG8gIlJlbW92aW5nICQxIgorCQlybSAiJDEiCisJZmkKK30KKworCisjIGNyZWF0ZV9kZXZpY2UgYXJndW1lbnRzICQxPWZpbGVfbmFtZSAkMj1NQUpPUl9OUiAkMz1NSU5PUl9OUgorY3JlYXRlX2RldmljZSgpCit7CisJdmVjaG8gIkRvaW5nIG1rbm9kICQxIgorCW1rbm9kICIkMSIgYyAkMiAkMworCWlmIHRlc3QgIiQ/IiAhPSAiMCI7IHRoZW4KKwkJZWNobyAiQ291bGRuJ3QgbWtub2QgJDEiID4mMgorCQlleGl0IDEKKwlmaQorCWNobW9kIDcwMCAiJDEiCit9CisKKworbW92ZV9hbmRfcmVtb3ZlKCkKK3sKKwlpZiB0ZXN0IC1lICQxOyB0aGVuCisJCW12ICQxICRTQU1QTEVTX0RJUi8udG1wX3Jlc2V0LiQkCisJCXJtIC1yZiAkU0FNUExFU19ESVIvLnRtcF9yZXNldC4kJAorCWZpCit9CisKKworIyB2ZXJib3NlIGVjaG8KK3ZlY2hvKCkKK3sKKwlpZiB0ZXN0IC1uICIkVkVSQk9TRSI7IHRoZW4KKwkJZWNobyAkQAorCWZpCit9CisKKworaXNfdG9vbF9hdmFpbGFibGUoKQoreworCWlmIHdoaWNoICQxID4gL2Rldi9udWxsIDI+JjE7IHRoZW4KKwkJaWYgdGVzdCAteCBgd2hpY2ggJDFgOyB0aGVuCisJCQlyZXR1cm4gMQorCQlmaQorCWZpCisKKwlyZXR1cm4gMAorfQorCisKKyMgcHJpbnQgaGVscCBtZXNzYWdlCitkb19oZWxwKCkKK3sKKyAgICBjYXQgPiYyIDw8RU9GCitvcGNvbnRyb2w6IHVzYWdlOgorICAgLWwvLS1saXN0LWV2ZW50cyBsaXN0IGV2ZW50IHR5cGVzIGFuZCB1bml0IG1hc2tzCisgICAtPy8tLWhlbHAgICAgICAgIHRoaXMgbWVzc2FnZQorICAgLXYvLS12ZXJzaW9uICAgICBzaG93IHZlcnNpb24KKyAgIC0taW5pdCAgICAgICAgICAgbG9hZHMgdGhlIG9wcm9maWxlIG1vZHVsZSBhbmQgb3Byb2ZpbGVmcworICAgLS1zZXR1cCAgICAgICAgICBnaXZlIHNldHVwIGFyZ3VtZW50cyAobWF5IGJlIG9taXR0ZWQpCisgICAtLXN0YXR1cyAgICAgICAgIHNob3cgY29uZmlndXJhdGlvbgorICAgLS1zdGFydC1kYWVtb24gICBzdGFydCBkYWVtb24gd2l0aG91dCBzdGFydGluZyBwcm9maWxpbmcKKyAgIC1zLy0tc3RhcnQgICAgICAgc3RhcnQgZGF0YSBjb2xsZWN0aW9uCisgICAtZC8tLWR1bXAgICAgICAgIGZsdXNoIHRoZSBjb2xsZWN0ZWQgcHJvZmlsaW5nIGRhdGEKKyAgIC10Ly0tc3RvcCAgICAgICAgc3RvcCBkYXRhIGNvbGxlY3Rpb24KKyAgIC1oLy0tc2h1dGRvd24gICAgc3RvcCBkYXRhIGNvbGxlY3Rpb24gYW5kIGtpbGwgZGFlbW9uCisgICAtVi8tLXZlcmJvc2VbPWFsbCxzZmlsZSxhcmNzLHNhbXBsZXMsbW9kdWxlLG1pc2MsZXh0XQorICAgICAgICAgICAgICAgICAgICBiZSB2ZXJib3NlIGluIHRoZSBkYWVtb24gbG9nCisgICAtLXJlc2V0ICAgICAgICAgIGNsZWFycyBvdXQgZGF0YSBmcm9tIGN1cnJlbnQgc2Vzc2lvbgorICAgLS1zYXZlPW5hbWUgICAgICBzYXZlIGRhdGEgZnJvbSBjdXJyZW50IHNlc3Npb24gdG8gc2Vzc2lvbl9uYW1lCisgICAtLWRlaW5pdCAgICAgICAgIHVubG9hZCB0aGUgb3Byb2ZpbGUgbW9kdWxlIGFuZCBvcHJvZmlsZWZzCisKKyAgIC1lLy0tZXZlbnQ9ZXZlbnRzcGVjCisKKyAgICAgIENob29zZSBhbiBldmVudC4gTWF5IGJlIHNwZWNpZmllZCBtdWx0aXBsZSB0aW1lcy4gT2YgdGhlIGZvcm0KKyAgICAgICJkZWZhdWx0IiBvciAibmFtZTpjb3VudDp1bml0bWFzazprZXJuZWw6dXNlciIsIHdoZXJlIDoKKworICAgICAgbmFtZTogICAgIGV2ZW50IG5hbWUsIGUuZy4gQ1BVX0NMS19VTkhBTFRFRCBvciBSVENfSU5URVJSVVBUUworICAgICAgY291bnQ6ICAgIHJlc2V0IGNvdW50ZXIgdmFsdWUgZS5nLiAxMDAwMDAKKyAgICAgIHVuaXRtYXNrOiBoYXJkd2FyZSB1bml0IG1hc2sgZS5nLiAweDBmCisgICAgICBrZXJuZWw6ICAgd2hldGhlciB0byBwcm9maWxlIGtlcm5lbDogMCBvciAxCisgICAgICB1c2VyOiAgICAgd2hldGhlciB0byBwcm9maWxlIHVzZXJzcGFjZTogMCBvciAxCisKKyAgIC1wLy0tc2VwYXJhdGU9dHlwZSxbdHlwZXNdCisKKyAgICAgICBTZXBhcmF0ZSBwcm9maWxlcyBhcyBmb2xsb3dzIDoKKworICAgICAgIG5vbmU6ICAgICBubyBwcm9maWxlIHNlcGFyYXRpb24KKyAgICAgICBsaWJyYXJ5OiAgc2VwYXJhdGUgc2hhcmVkIGxpYnJhcnkgcHJvZmlsZXMgcGVyLWFwcGxpY2F0aW9uCisgICAgICAga2VybmVsOiAgIHNhbWUgYXMgbGlicmFyeSwgcGx1cyBrZXJuZWwgcHJvZmlsZXMKKyAgICAgICB0aHJlYWQ6ICAgcGVyLXRocmVhZC9wcm9jZXNzIHByb2ZpbGVzCisgICAgICAgY3B1OiAgICAgIHBlciBDUFUgcHJvZmlsZXMKKyAgICAgICBhbGw6ICAgICAgYWxsIG9mIHRoZSBhYm92ZQorCisgICAtYy8tLWNhbGxncmFwaD0jZGVwdGggICAgICAgICBlbmFibGUgY2FsbGdyYXBoIHNhbXBsZSBjb2xsZWN0aW9uIHdpdGggYQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4aW11bSBkZXB0aC4gVXNlICcwJyB0byBkaXNhYmxlIGNhbGxncmFwaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZmlsaW5nLgorICAgLS1zZXNzaW9uLWRpcj1kaXIgICAgICAgICAgICAgcGxhY2Ugc2FtcGxlIGRhdGFiYXNlIGluIGRpciBpbnN0ZWFkIG9mCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0IGxvY2F0aW9uICgvdmFyL2xpYi9vcHJvZmlsZSkKKyAgIC1pLy0taW1hZ2U9bmFtZVssbmFtZXNdICAgICAgIGxpc3Qgb2YgYmluYXJpZXMgdG8gcHJvZmlsZSAoZGVmYXVsdCBpcyAiYWxsIikKKyAgIC0tdm1saW51eD1maWxlICAgICAgICAgICAgICAgIHZtbGludXgga2VybmVsIGltYWdlCisgICAtLW5vLXZtbGludXggICAgICAgICAgICAgICAgICBubyBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIGF2YWlsYWJsZQorICAgLS1rZXJuZWwtcmFuZ2U9c3RhcnQsZW5kICAgICAga2VybmVsIHJhbmdlIHZtYSBhZGRyZXNzIGluIGhleGFkZWNpbWFsCisgICAtLWJ1ZmZlci1zaXplPW51bSAgICAgICAgICAgICBrZXJuZWwgYnVmZmVyIHNpemUgaW4gc2FtcGxlIHVuaXRzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUnVsZXM6IEEgbm9uLXplcm8gdmFsdWUgZ29lcyBpbnRvIGVmZmVjdCBhZnRlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSAnLS1zaHV0ZG93bi9zdGFydCcgc2VxdWVuY2UuICBBIHZhbHVlIG9mCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6ZXJvIHNldHMgdGhpcyBwYXJhbWV0ZXIgYmFjayB0byBkZWZhdWx0IHZhbHVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXQgZG9lcyBub3QgZ28gaW50byBlZmZlY3QgdW50aWwgYWZ0ZXIgYQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy0tZGVpbml0L2luaXQnIHNlcXVlbmNlLgorICAgLS1idWZmZXItd2F0ZXJzaGVkICAgICAgICAgICAga2VybmVsIGJ1ZmZlciB3YXRlcnNoZWQgaW4gc2FtcGxlIHVuaXRzICgyLjYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtlcm5lbCkuIFNhbWUgcnVsZXMgYXMgZGVmaW5lZCBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlci1zaXplLgorICAgLS1jcHUtYnVmZmVyLXNpemU9bnVtICAgICAgICAgcGVyLWNwdSBidWZmZXIgc2l6ZSBpbiB1bml0cyAoMi42IGtlcm5lbCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNhbWUgcnVsZXMgYXMgZGVmaW5lZCBmb3IgYnVmZmVyLXNpemUuCisgICAtLW5vdGUtdGFibGUtc2l6ZSAgICAgICAgICAgICBrZXJuZWwgbm90ZXMgYnVmZmVyIHNpemUgaW4gbm90ZXMgdW5pdHMgKDIuNAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2VybmVsKQorCisgICAtLXhlbiAgICAgICAgICAgICAgICAgICAgICAgICBYZW4gaW1hZ2UgKGZvciBYZW4gb25seSkKKyAgIC0tYWN0aXZlLWRvbWFpbnM9PGxpc3Q+ICAgICAgIExpc3Qgb2YgZG9tYWlucyBpbiBwcm9maWxpbmcgc2Vzc2lvbiAoZm9yIFhlbikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaXN0IGNvbnRhaW5zIGRvbWFpbiBpZHMgc2VwYXJhdGVkIGJ5IGNvbW1hcykKK0VPRgorfQorCisKKyMgbG9hZCB0aGUgbW9kdWxlIGFuZCBtb3VudCBvcHJvZmlsZWZzCitsb2FkX21vZHVsZV8yNigpCit7CisJZ3JlcCBvcHJvZmlsZWZzIC9wcm9jL2ZpbGVzeXN0ZW1zID4vZGV2L251bGwKKwlpZiB0ZXN0ICIkPyIgLW5lIDA7IHRoZW4KKwkJbW9kcHJvYmUgb3Byb2ZpbGUKKwkJaWYgdGVzdCAiJD8iICE9ICIwIjsgdGhlbgorCQkJIyBjb3VsZG4ndCBsb2FkIHRoZSBtb2R1bGUKKwkJCXJldHVybgorCQlmaQorCQlncmVwIG9wcm9maWxlIC9wcm9jL21vZHVsZXMgPi9kZXYvbnVsbAorCQlpZiB0ZXN0ICIkPyIgIT0gIjAiOyB0aGVuCisJCQkjIGRpZG4ndCBmaW5kIG1vZHVsZQorCQkJcmV0dXJuCisJCWZpCisJCWdyZXAgb3Byb2ZpbGVmcyAvcHJvYy9maWxlc3lzdGVtcyA+L2Rldi9udWxsCisJCWlmIHRlc3QgIiQ/IiAtbmUgMDsgdGhlbgorCQkJIyBmaWxlc3lzdGVtIHN0aWxsIG5vdCBhcm91bmQKKwkJCXJldHVybgorCQlmaQorCWZpCisJbWtkaXIgL2Rldi9vcHJvZmlsZSA+L2Rldi9udWxsIDI+JjEKKwlncmVwIG9wcm9maWxlZnMgL2V0Yy9tdGFiID4vZGV2L251bGwKKwlpZiB0ZXN0ICIkPyIgLW5lIDA7IHRoZW4KKwkJbW91bnQgLXQgb3Byb2ZpbGVmcyBub2RldiAvZGV2L29wcm9maWxlID4vZGV2L251bGwKKwlmaQorCUtFUk5FTF9TVVBQT1JUPXllcworCU9QUk9GSUxFX0FWQUlMQUJMRT15ZXMKK30KKworCitsb2FkX21vZHVsZV8yNCgpCit7CisJZ3JlcCBvcHJvZiAvcHJvYy9kZXZpY2VzID4vZGV2L251bGwKKwlpZiB0ZXN0ICIkPyIgLW5lIDA7IHRoZW4KKwkJbW9kcHJvYmUgb3Byb2ZpbGUKKwkJaWYgdGVzdCAiJD8iICE9ICIwIjsgdGhlbgorCQkJIyBjb3VsZG4ndCBsb2FkIGEgbW9kdWxlCisJCQlyZXR1cm4KKwkJZmkKKwkJZ3JlcCBvcHJvZmlsZSAvcHJvYy9tb2R1bGVzID4vZGV2L251bGwKKwkJaWYgdGVzdCAiJD8iICE9ICIwIjsgdGhlbgorCQkJIyBkaWRuJ3QgZmluZCBtb2R1bGUKKwkJCXJldHVybgorCQlmaQorCWZpCisJS0VSTkVMX1NVUFBPUlQ9bm8KKwlPUFJPRklMRV9BVkFJTEFCTEU9eWVzCit9CisKKworbG9hZF9tb2R1bGUoKQoreworCU9QUk9GSUxFX0FWQUlMQUJMRT1ubworCWxvYWRfbW9kdWxlXzI2CisJaWYgdGVzdCAiJE9QUk9GSUxFX0FWQUlMQUJMRSIgIT0gInllcyI7IHRoZW4KKwkJbG9hZF9tb2R1bGVfMjQKKwlmaQorCWlmIHRlc3QgIiRPUFJPRklMRV9BVkFJTEFCTEUiICE9ICJ5ZXMiOyB0aGVuCisJCWVjaG8gIktlcm5lbCBkb2Vzbid0IHN1cHBvcnQgb3Byb2ZpbGUiID4mMgorCQlleGl0IDEKKwlmaQorfQorCisjIHNldHVwIHZhcmlhYmxlcyByZWxhdGVkIHRvIHBhdGggb3IgZGFlbW9uLiBTZXQgdmFycyBhY2NvcmRpbmcgdG8gZm9sbG93aW5nCisjIHJlbGF0aW9uc2hpcDogY29tbWFuZC1saW5lLW9wdGlvbiA+IGNvbmZpZy1maWxlLXNldHRpbmdzID4gZGVmYXVsdHMuCisjIE5vdGUgdGhhdCB1cG9uIGVudHJ5IFNFU1NJT05fRElSIG1heSBiZSBzZXQgYnkgY29tbWFuZC1saW5lIG9wdGlvbi4KK2RvX2luaXRfZGFlbW9uX3ZhcnMoKQoreworCSMgbG9hZCBzZXR0aW5ncyBmcm9tIGNvbmZpZyBmaWxlLCBrZWVwaW5nIGNvbW1hbmQtbGluZSB2YWx1ZQorCSMgb2YgU0VTU0lPTl9ESVIgaWYgbmVjZXNzYXJ5LgorCWlmIHRlc3QgLW4gIiRTRVNTSU9OX0RJUiI7IHRoZW4KKwkJU0FWRUQ9JFNFU1NJT05fRElSCisJZmkKKwlkb19sb2FkX3NldHVwCisJaWYgdGVzdCAtbiAiJFNBVkVEIjsgdGhlbgorCQlTRVNTSU9OX0RJUj0kU0FWRUQKKwlmaQorCisJIyBkYWVtb24gcGFyYW1ldGVycyAoYXMgaW4gb3BfY29uZmlnLmgpLiAgTm90ZSB0aGF0IHdlIHByZXNlcnZlCisJIyBhbnkgcHJldmlvdXMgdmFsdWUgb2YgU0VTU0lPTl9ESVIKKwlpZiB0ZXN0IC16ICIkU0VTU0lPTl9ESVIiOyB0aGVuCisJCVNFU1NJT05fRElSPSIvdmFyL2xpYi9vcHJvZmlsZSIKKwlmaQorCUxPQ0tfRklMRT0iJFNFU1NJT05fRElSL2xvY2siCisJU0FNUExFU19ESVI9IiRTRVNTSU9OX0RJUi9zYW1wbGVzIgorCUxPR19GSUxFPSIkU0FNUExFU19ESVIvb3Byb2ZpbGVkLmxvZyIKKwlDVVJSRU5UX1NBTVBMRVNfRElSPSIkU0FNUExFU19ESVIvY3VycmVudCIKK30KKworCisjIHBpY2sgdGhlIGFwcHJvcHJpYXRlIGRldmljZSBtb3VudCBiYXNlZCBvbiBrZXJuZWwKK2RlY2lkZV9vcHJvZmlsZV9kZXZpY2VfbW91bnQoKQoreworCWlmIHRlc3QgIiRLRVJORUxfU1VQUE9SVCIgPSAieWVzIjsgdGhlbgorCQlNT1VOVD0iL2Rldi9vcHJvZmlsZSIKKwllbHNlCisJCU1PVU5UPSIvcHJvYy9zeXMvZGV2L29wcm9maWxlIgorCWZpCit9CisKKworIyBwaWNrIHRoZSBhcHByb3ByaWF0ZSBsb2NhdGlvbnMgZGV2aWNlIGZvciBvcHJvZmlsZSBiYXNlZCBvbiBrZXJuZWwKK2RlY2lkZV9vcHJvZmlsZV9kZXZpY2UoKQoreworCWlmIHRlc3QgIiRLRVJORUxfU1VQUE9SVCIgPSAieWVzIjsgdGhlbgorCQlERVZJQ0VfRklMRT0iJE1PVU5UL2J1ZmZlciIKKwllbHNlCisJCURFVklDRV9GSUxFPSIkU0VTU0lPTl9ESVIvb3BkZXYiCisJCU5PVEVfREVWSUNFX0ZJTEU9IiRTRVNTSU9OX0RJUi9vcG5vdGVkZXYiCisJCUhBU0hfTUFQX0RFVklDRV9GSUxFPSIkU0VTU0lPTl9ESVIvb3BoYXNobWFwZGV2IgorCWZpCit9CisKKyMgaW5pdGlhbGlzZSBwYXJhbWV0ZXJzCitkb19pbml0KCkKK3sKKwkjIGZvciB0aGVzZSB0aHJlZSBidWZmZXIgc2l6ZSA9PSAwIG1lYW5zIHVzZSB0aGUgZGVmYXVsdCB2YWx1ZQorCSMgaGFyZC1jb2RlZCBpbiBvcF91c2VyLmgKKwlCVUZfU0laRT0wCisJQlVGX1dBVEVSU0hFRD0wCisJQ1BVX0JVRl9TSVpFPTAKKwlOT1RFX1NJWkU9MAorCVZNTElOVVg9CisJWEVOSU1BR0U9Im5vbmUiCisJVkVSQk9TRT0iIgorCVNFUEFSQVRFX0xJQj0wCisJU0VQQVJBVEVfS0VSTkVMPTAKKwlTRVBBUkFURV9USFJFQUQ9MAorCVNFUEFSQVRFX0NQVT0wCisJQ0FMTEdSQVBIPTAKKwlJQlNfRkVUQ0hfRVZFTlRTPSIiCisJSUJTX0ZFVENIX0NPVU5UPTAKKwlJQlNfRkVUQ0hfVU5JVE1BU0s9MAorCUlCU19PUF9FVkVOVFM9IiIKKwlJQlNfT1BfQ09VTlQ9MAorCUlCU19PUF9VTklUTUFTSz0wCisKKwlPUFJPRklMRUQ9IiRPUERJUi9vcHJvZmlsZWQiCisKKwkjIGxvY2F0aW9uIGZvciBkYWVtb24gc2V0dXAgaW5mb3JtYXRpb24KKwlTRVRVUF9ESVI9Ii9yb290Ly5vcHJvZmlsZSIKKwlTRVRVUF9GSUxFPSIkU0VUVVBfRElSL2RhZW1vbnJjIgorCVNFQ19TRVRVUF9GSUxFPSIkU0VUVVBfRElSL2RhZW1vbnJjX25ldyIKKworCSMgaW5pdGlhbGl6ZSBkYWVtb24gdmFycworCWRlY2lkZV9vcHJvZmlsZV9kZXZpY2VfbW91bnQKKwlDUFVUWVBFPWBjYXQgJE1PVU5UL2NwdV90eXBlYAorCU9QX0NPVU5URVJTPWBscyAkTU9VTlQvIHwgZ3JlcCAiXlswLTldXCtcJCIgfCB0ciAiXG4iICIgImAKKwlOUl9DSE9TRU49MAorCisJZG9faW5pdF9kYWVtb25fdmFycworCWRlY2lkZV9vcHJvZmlsZV9kZXZpY2UKKworCURFRkFVTFRfRVZFTlQ9YCRPUEhFTFAgLS1nZXQtZGVmYXVsdC1ldmVudGAKKworCUlTX1RJTUVSPTAKKwlJU19QRVJGTU9OPTAKKwlpZiB0ZXN0ICIkQ1BVVFlQRSIgPSAidGltZXIiOyB0aGVuCisJCUlTX1RJTUVSPTEKKwllbHNlCisJCWNhc2UgIiRDUFVUWVBFIiBpbgorCQkJaWE2NC8qKQorCQkJCUlTX1BFUkZNT049JEtFUk5FTF9TVVBQT1JUCisJCQkJOzsKKwkJZXNhYworCWZpCit9CisKKworY3JlYXRlX2RpcigpCit7CisJaWYgdGVzdCAhIC1kICIkMSI7IHRoZW4KKwkJbWtkaXIgLXAgIiQxIgorCQlpZiB0ZXN0ICIkPyIgIT0gIjAiOyB0aGVuCisJCQllY2hvICJDb3VsZG4ndCBta2RpciAtcCAkMSIgPiYyCisJCQlleGl0IDEKKwkJZmkKKwkJY2htb2QgNzU1ICIkMSIKKwlmaQorfQorCitnZXRfZXZlbnQoKQoreworCUdPVEVWRU5UPWBldmFsICJlY2hvIFxcJENIT1NFTl9FVkVOVFNfJDEiYAorfQorCitzZXRfZXZlbnQoKQoreworCWV2YWwgIkNIT1NFTl9FVkVOVFNfJDE9JDIiCit9CisKKworIyBzYXZlIGFsbCB0aGUgc2V0dXAgcmVsYXRlZCBpbmZvcm1hdGlvbgorZG9fc2F2ZV9zZXR1cCgpCit7CisJY3JlYXRlX2RpciAiJFNFVFVQX0RJUiIKKwlTQVZFX1NFVFVQX0ZJTEU9IiRTRVRVUF9GSUxFIgorCisjIElmIHRoZSBkYWVtb24gaXMgY3VycmVudGx5IHJ1bm5pbmcsIHdlIHdhbnQgY2hhbmdlcyB0byB0aGUgZGFlbW9uIGNvbmZpZworIyBzdG9yZWQgaW4gdGhlIHNlY29uZGFyeSBjYWNoZSBmaWxlIHNvIHRoYXQgJ29wY29udHJvbCAtLXN0YXR1cycgd2lsbAorIyBzaG93IGFjdHVhbCBjb25maWcgZGF0YSBmb3IgdGhlIHJ1bm5pbmcgZGFlbW9uLiAgVGhlIG5leHQgdGltZSB0aGUKKyMgZGFlbW9uIGlzIHJlc3RhcnRlZCwgd2UnbGwgcmVsb2FkIHRoZSBjb25maWcgZGF0YSBmcm9tIHRoaXMgc2Vjb25kYXJ5CisjIGNhY2hlIGZpbGUuCisKKwlpZiBpc19vcHJvZmlsZWRfYWN0aXZlICIkTE9DS19GSUxFIjsgdGhlbgorCQlTRVRVUF9GSUxFPSIkU0VDX1NFVFVQX0ZJTEUiCisJCWVjaG8gIlRoZSBwcm9maWxpbmcgZGFlbW9uIGlzIGN1cnJlbnRseSBhY3RpdmUsIHNvIGNoYW5nZXMgdG8gdGhlIGNvbmZpZ3VyYXRpb24iCisJCWVjaG8gIndpbGwgYmUgdXNlZCB0aGUgbmV4dCB0aW1lIHlvdSByZXN0YXJ0IG9wcm9maWxlIGFmdGVyIGEgLS1zaHV0ZG93biBvciAtLWRlaW5pdC4iCisJZmkKKworCXRvdWNoICRTRVRVUF9GSUxFCisJY2htb2QgNjQ0ICRTRVRVUF9GSUxFCisJPiRTRVRVUF9GSUxFCisKKwllY2hvICJTRVNTSU9OX0RJUj0kU0VTU0lPTl9ESVIiID4+JFNFVFVQX0ZJTEUKKworCWlmIHRlc3QgIiROUl9DSE9TRU4iICE9ICIwIjsgdGhlbgorCQlmb3IgZiBpbiBgc2VxIDAgJCgoTlJfQ0hPU0VOIC0gMSkpYDsgZG8KKwkJCWdldF9ldmVudCAkZgorCQkJZWNobyAiQ0hPU0VOX0VWRU5UU18ke2Z9PSRHT1RFVkVOVCIgPj4kU0VUVVBfRklMRQorCQlkb25lCisJZmkKKworCWVjaG8gIk5SX0NIT1NFTj0kTlJfQ0hPU0VOIiA+PiRTRVRVUF9GSUxFCisKKwllY2hvICJTRVBBUkFURV9MSUI9JFNFUEFSQVRFX0xJQiIgPj4gJFNFVFVQX0ZJTEUKKwllY2hvICJTRVBBUkFURV9LRVJORUw9JFNFUEFSQVRFX0tFUk5FTCIgPj4gJFNFVFVQX0ZJTEUKKwllY2hvICJTRVBBUkFURV9USFJFQUQ9JFNFUEFSQVRFX1RIUkVBRCIgPj4gJFNFVFVQX0ZJTEUKKwllY2hvICJTRVBBUkFURV9DUFU9JFNFUEFSQVRFX0NQVSIgPj4gJFNFVFVQX0ZJTEUKKwllY2hvICJWTUxJTlVYPSRWTUxJTlVYIiA+PiAkU0VUVVBfRklMRQorCWVjaG8gIklNQUdFX0ZJTFRFUj0kSU1BR0VfRklMVEVSIiA+PiAkU0VUVVBfRklMRQorCSMgd3JpdGUgdGhlIGFjdHVhbCBpbmZvcm1hdGlvbiB0byBmaWxlCisJaWYgdGVzdCAiJEJVRl9TSVpFIiAhPSAiMCI7IHRoZW4KKwkJZWNobyAiQlVGX1NJWkU9JEJVRl9TSVpFIiA+PiAkU0VUVVBfRklMRQorCWZpCisJaWYgdGVzdCAiJEJVRl9XQVRFUlNIRUQiICE9ICIwIjsgdGhlbgorCQllY2hvICJCVUZfV0FURVJTSEVEPSRCVUZfV0FURVJTSEVEIiA+PiAkU0VUVVBfRklMRQorCWZpCisJaWYgdGVzdCAiJEtFUk5FTF9TVVBQT1JUIiA9ICJ5ZXMiOyB0aGVuCisJCWVjaG8gIkNQVV9CVUZfU0laRT0kQ1BVX0JVRl9TSVpFIiA+PiAkU0VUVVBfRklMRQorCWZpCisJaWYgdGVzdCAiJEtFUk5FTF9TVVBQT1JUIiAhPSAieWVzIjsgdGhlbgorCQllY2hvICJOT1RFX1NJWkU9JE5PVEVfU0laRSIgPj4gJFNFVFVQX0ZJTEUKKwlmaQorCWVjaG8gIkNBTExHUkFQSD0kQ0FMTEdSQVBIIiA+PiAkU0VUVVBfRklMRQorCWlmIHRlc3QgIiRLRVJORUxfUkFOR0UiOyB0aGVuCisJCWVjaG8gIktFUk5FTF9SQU5HRT0kS0VSTkVMX1JBTkdFIiA+PiAkU0VUVVBfRklMRQorCWZpCisJZWNobyAiWEVOSU1BR0U9JFhFTklNQUdFIiA+PiAkU0VUVVBfRklMRQorCWlmIHRlc3QgIiRYRU5fUkFOR0UiOyB0aGVuCisJCWVjaG8gIlhFTl9SQU5HRT0kWEVOX1JBTkdFIiA+PiAkU0VUVVBfRklMRQorCWZpCisJU0VUVVBfRklMRT0iJFNBVkVfU0VUVVBfRklMRSIKK30KKworCisjIHJlbG9hZCBhbGwgdGhlIHNldHVwLXJlbGF0ZWQgaW5mb3JtYXRpb24KK2RvX2xvYWRfc2V0dXAoKQoreworIyBJZiBhIHNlY29uZGFyeSBzZXR1cCBmaWxlIGV4aXN0cyBhbmQgdGhlIGRhZW1vbiBpcyBub3QgcnVubmluZywKKyMgdGhlbiB3ZSdsbCBtb3ZlIHRoZSBkYXRhIGZyb20gdGhlIHNlY29uZGFyeSBmaWxlIHRvIHRoZSBhY3R1YWwKKyMgc2V0dXAgZmlsZSB0byBwcmVwYXJlIGZvciBkYWVtb24gc3RhcnR1cC4KKwlpZiB0ZXN0IC16ICIkU0VTU0lPTl9ESVIiOyB0aGVuCisJCV9fVE1QX1NFU1NJT05fRElSPSIvdmFyL2xpYi9vcHJvZmlsZSIKKwllbHNlCisJCV9fVE1QX1NFU1NJT05fRElSPSIkU0VTU0lPTl9ESVIiCisJZmkKKworCWlmIHRlc3QgLWYgIiRTRUNfU0VUVVBfRklMRSI7IHRoZW4KKwkJaXNfb3Byb2ZpbGVkX2FjdGl2ZSAiJF9fVE1QX1NFU1NJT05fRElSL2xvY2siIFwKKwkJICAgICB8fCBtdiAiJFNFQ19TRVRVUF9GSUxFIiAiJFNFVFVQX0ZJTEUiCisJZmkKKworCWlmIHRlc3QgISAtZiAiJFNFVFVQX0ZJTEUiOyB0aGVuIHJldHVybjsgZmkKKworCXdoaWxlIElGUz09IHJlYWQgLXIgYXJnIHZhbDsgZG8KKwkJY2FzZSAiJGFyZyIgaW4KKwkJCSMgVGhlIGZvbGxvd2luZyBjYXRjaGVzIGFueXRoaW5nIHRoYXQgaXMgbm90CisJCQkjIDAtOSwgYS16LCBBLVosIG9yIGFuICdfJworCQkJKlshWzphbG51bTpdX10qKQorCQkJCWVjaG8gIkludmFsaWQgdmFyaWFibGUgXCIkYXJnXCIgaW4gJFNFVFVQX0ZJTEUuIgorCQkJCWV4aXQgMTs7CisJCWVzYWMKKwkJY2FzZSAiJHZhbCIgaW4KKwkJCSMgVGhlIGZvbGxvd2luZyBjYXRjaGVzIGFueXRoaW5nIHRoYXQgaXMgbm90CisJCQkjIDAtOSwgYS16LCBBLVosIGFuICctJywgJzonLCAnLCcsICcuJywgb3IgJy8nCisJCQkqWyEtWzphbG51bTpdXzosLi9dKikgCisJCQkJZWNobyAiSW52YWxpZCB2YWx1ZSBcIiR2YWxcIiBmb3IgJGFyZyBpbiAkU0VUVVBfRklMRS4iCisJCQkJZXhpdCAxOzsKKwkJZXNhYworCQlldmFsICIke2FyZ309JHt2YWx9IgorCWRvbmUgPCAkU0VUVVBfRklMRQorfQorCisKK2NoZWNrX3ZhbGlkX2FyZ3MoKQoreworCWlmIHRlc3QgLXogIiRWTUxJTlVYIjsgdGhlbgorCQllY2hvICJObyB2bWxpbnV4IGZpbGUgc3BlY2lmaWVkLiBZb3UgbXVzdCBzcGVjaWZ5IHRoZSBjb3JyZWN0IHZtbGludXggZmlsZSwgZS5nLiIgPiYyCisJCWVjaG8gIm9wY29udHJvbCAtLXZtbGludXg9L3BhdGgvdG8vdm1saW51eCIgPiYyCisJCWVjaG8gIklmIHlvdSBkbyBub3QgaGF2ZSBhIHZtbGludXggZmlsZSwgdXNlICIgPiYyCisJCWVjaG8gIm9wY29udHJvbCAtLW5vLXZtbGludXgiID4mMgorCQllY2hvICJFbnRlciBvcGNvbnRyb2wgLS1oZWxwIGZvciBmdWxsIG9wdGlvbnMiID4mMgorCQlleGl0IDEKKwlmaQorCisJaWYgdGVzdCAtZiAiJFZNTElOVVgiOyB0aGVuCisJCXJldHVybgorCWZpCisKKwlpZiB0ZXN0ICIkVk1MSU5VWCIgPSAibm9uZSI7IHRoZW4KKwkJcmV0dXJuCisJZmkKKworCWVjaG8gIlRoZSBzcGVjaWZpZWQgdm1saW51eCBmaWxlIFwiJFZNTElOVVhcIiBkb2Vzbid0IGV4aXN0LiIgPiYyCisJZXhpdCAxCisKKyMgc2ltaWxhciBjaGVjayBmb3IgWGVuIGltYWdlCisJaWYgdGVzdCAtZiAiJFhFTklNQUdFIjsgdGhlbgorCQlyZXR1cm4KKwlmaQorCisJaWYgdGVzdCAiJFhFTklNQUdFIiA9ICJub25lIjsgdGhlbgorCQlyZXR1cm4KKwlmaQorCisJZWNobyAiVGhlIHNwZWNpZmllZCBYZW5JbWFnZSBmaWxlIFwiJFhFTklNQUdFXCIgZG9lcyBub3QgZXhpc3QuIiA+JjIKKwlleGl0IDEKK30KKworCisjIGdldCBzdGFydCBhbmQgZW5kIHBvaW50cyBvZiBhIGZpbGUgaW1hZ2UgKGxpbnV4IGtlcm5lbCBvciB4ZW4pCisjIGdldF9pbWFnZV9yYW5nZSBwYXJhbWV0ZXI6ICQxPXR5cGVfb2ZfaW1hZ2UgKGxpbnV4IG9yIHhlbikKK2dldF9pbWFnZV9yYW5nZSgpCit7CisJaWYgdGVzdCAiJDEiID0gInhlbiI7IHRoZW4KKwkJaWYgdGVzdCAhIC16ICIkWEVOX1JBTkdFIjsgdGhlbgorCQkJcmV0dXJuOworCQlmaQorCQlGSUxFX0lNQUdFPSIkWEVOSU1BR0UiCisJZWxzZQorCQlpZiB0ZXN0ICEgLXogIiRLRVJORUxfUkFOR0UiOyB0aGVuCisJCQlyZXR1cm47CisJCWZpCisJCUZJTEVfSU1BR0U9IiRWTUxJTlVYIgorCWZpCisKKwlpZiB0ZXN0ICIkRklMRV9JTUFHRSIgPSAibm9uZSI7IHRoZW4KKwkJcmV0dXJuOworCWZpCisKKwlpZiBpc190b29sX2F2YWlsYWJsZSBvYmpkdW1wOyB0aGVuCisJCWVjaG8gIm9iamR1bXAgaXMgbm90IGluc3RhbGxlZCBvbiB0aGlzIHN5c3RlbSwgdXNlIG9wY29udHJvbCAtLWtlcm5lbC1yYW5nZT1zdGFydCxlbmQgb3Igb3Bjb250cm9sIC0teGVuLXJhbmdlPSBvciBpbnN0YWxsIG9iamR1bXAiCisJCWV4aXQgMQorCWZpCisKKwkjIHN0YXJ0IGF0IHRoZSBzdGFydCBvZiAudGV4dCwgYW5kIGVuZCBhdCBfZXRleHQKKwlyYW5nZV9pbmZvPWBvYmpkdW1wIC1oICRGSUxFX0lNQUdFIDI+L2Rldi9udWxsIHwgZ3JlcCAiIC50ZXh0ICJgCisJdG1wMT1gZWNobyAkcmFuZ2VfaW5mbyB8IGF3ayAne3ByaW50ICQ0fSdgCisJdG1wMj1gb2JqZHVtcCAtdCAkRklMRV9JTUFHRSAyPi9kZXYvbnVsbCB8IGdyZXAgIl9ldGV4dCQiIHwgYXdrICd7IHByaW50ICQxIH0nYAorCisJaWYgdGVzdCAteiAiJHRtcDEiIC1vIC16ICIkdG1wMiI7IHRoZW4KKwkJZWNobyAiVGhlIHNwZWNpZmllZCBmaWxlICRGSUxFX0lNQUdFIGRvZXMgbm90IHNlZW0gdG8gYmUgdmFsaWQiID4mMgorCQllY2hvICJNYWtlIHN1cmUgeW91IGFyZSB1c2luZyB0aGUgbm9uLWNvbXByZXNzZWQgaW1hZ2UgZmlsZSAoZS5nLiB2bWxpbnV4IG5vdCB2bWxpbnV6KSIgPiYyCisJCXZlY2hvICJmb3VuZCBzdGFydCBhcyBcIiR0bXAxXCIsIGVuZCBhcyBcIiR0bXAyXCIiID4mMgorCQlleGl0IDEKKwlmaQorCisJaWYgdGVzdCAiJDEiID0gInhlbiI7IHRoZW4KKwkJWEVOX1JBTkdFPSJgZWNobyAkdG1wMWAsYGVjaG8gJHRtcDJgIgorCQl2ZWNobyAiWEVOX1JBTkdFICRYRU5fUkFOR0UiCisJZWxzZQorCQlLRVJORUxfUkFOR0U9ImBlY2hvICR0bXAxYCxgZWNobyAkdG1wMmAiCisJCXZlY2hvICJLRVJORUxfUkFOR0UgJEtFUk5FTF9SQU5HRSIKKwlmaQorfQorCisKKyMgdmFsaWRhdGUgLS1zZXBhcmF0ZT0gcGFyYW1ldGVycy4gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBJRlM9LAorIyBzbyBvbiBlYWNoIGFyZ3VtZW50IGlzIHNwbGl0dGVkCit2YWxpZGF0ZV9zZXBhcmF0ZV9hcmdzKCkKK3sKKwllcnJvcl9pZl9lbXB0eSAkMSAkMgkjIHdlIG5lZWQgYXQgbGVhc3Qgb25lIGFyZ3VtZW50CisJbG9jYWwgaT0xCisJU0VQQVJBVEVfTElCPTAKKwlTRVBBUkFURV9LRVJORUw9MAorCVNFUEFSQVRFX1RIUkVBRD0wCisJU0VQQVJBVEVfQ1BVPTAKKwl3aGlsZSBbICIkaSIgLWx0ICIkIyIgXTsgZG8KKwkJc2hpZnQKKwkJY2FzZSAiJDEiIGluCisJCQlsaWJ8bGlicmFyeSkKKwkJCQlTRVBBUkFURV9MSUI9MQorCQkJCTs7CisJCQlrZXJuZWwpCisJCQkJIyBmaXJzdCBpbXBsaWVkIGJ5IHNlY29uZAorCQkJCVNFUEFSQVRFX0xJQj0xCisJCQkJU0VQQVJBVEVfS0VSTkVMPTEKKwkJCQk7OworCQkJdGhyZWFkKQorCQkJCVNFUEFSQVRFX1RIUkVBRD0xCisJCQkJOzsKKwkJCWNwdSkKKwkJCQlTRVBBUkFURV9DUFU9MQorCQkJCTs7CisJCQlhbGwpCisJCQkJU0VQQVJBVEVfTElCPTEKKwkJCQlTRVBBUkFURV9LRVJORUw9MQorCQkJCVNFUEFSQVRFX1RIUkVBRD0xCisJCQkJU0VQQVJBVEVfQ1BVPTEKKwkJCQk7OworCQkJbm9uZSkKKwkJCQlTRVBBUkFURV9MSUI9MAorCQkJCVNFUEFSQVRFX0tFUk5FTD0wCisJCQkJU0VQQVJBVEVfVEhSRUFEPTAKKwkJCQlTRVBBUkFURV9DUFU9MAorCQkJCTs7CisJCQkqKQorCQkJCWVjaG8gImludmFsaWQgLS1zZXBhcmF0ZT0gYXJndW1lbnQ6ICQxIgorCQkJCWV4aXQgMQorCQllc2FjCisJZG9uZQorfQorCisKKyMgY2hlY2sgdGhlIGNvdW50ZXJzIG1ha2Ugc2Vuc2UsIGFuZCByZXNvbHZlIHRoZSBoYXJkd2FyZSBhbGxvY2F0aW9uCit2ZXJpZnlfY291bnRlcnMoKQoreworCWlmIHRlc3QgIiRJU19USU1FUiIgPSAxOyB0aGVuCisJCWlmIHRlc3QgIiROUl9DSE9TRU4iICE9IDA7IHRoZW4KKwkJCWVjaG8gIllvdSBjYW5ub3Qgc3BlY2lmeSBhbnkgcGVyZm9ybWFuY2UgY291bnRlciBldmVudHMiID4mMgorCQkJZWNobyAiYmVjYXVzZSBPUHJvZmlsZSBpcyBpbiB0aW1lciBtb2RlLiIgPiYyCisJCQlleGl0IDEKKwkJZmkKKwkJcmV0dXJuCisJZmkKKworCU9QSEVMUF9BUkdTPQorCisJaWYgdGVzdCAiJE5SX0NIT1NFTiIgIT0gMDsgdGhlbgorCQlmb3IgZiBpbiBgc2VxIDAgJCgoTlJfQ0hPU0VOIC0gMSkpYDsgZG8KKwkJCWdldF9ldmVudCAkZgorCQkJaWYgdGVzdCAiJEdPVEVWRU5UIiAhPSAiIjsgdGhlbgorCQkJCXZlcmlmeV9pYnMgJEdPVEVWRU5UCisJCQkJT1BIRUxQX0FSR1M9IiRPUEhFTFBfQVJHUyAkR09URVZFTlQiCisJCQlmaQorCQlkb25lCisKKwkJaWYgdGVzdCAhIC16ICIkT1BIRUxQX0FSR1MiIDsgdGhlbgorCQkJSFdfQ1RSUz1gJE9QSEVMUCAtLWNoZWNrLWV2ZW50cyAkT1BIRUxQX0FSR1MgLS1jYWxsZ3JhcGg9JENBTExHUkFQSGAKKwkJCWlmIHRlc3QgIiQ/IiAhPSAwOyB0aGVuCisJCQkJZXhpdCAxCisJCQlmaQorCQlmaQorCWZpCit9CisKKworIyBzZXR1cCBhbnkgbmVlZGVkIGRlZmF1bHQgdmFsdWUgaW4gY2hvc2VuIGV2ZW50cworbm9ybWFsaXNlX2V2ZW50cygpCit7CisJaWYgdGVzdCAiJE5SX0NIT1NFTiIgLWxlIDAgfHwgdGVzdCAiJElTX1RJTUVSIiA9IDE7IHRoZW4KKwkJcmV0dXJuCisJZmkKKworCWZvciBmIGluIGBzZXEgMCAkKChOUl9DSE9TRU4gLSAxKSlgOyBkbworCQlnZXRfZXZlbnQgJGYKKwkJaWYgdGVzdCAiJEdPVEVWRU5UIiAhPSAiIjsgdGhlbgorCQkJRVZFTlQ9YGVjaG8gJEdPVEVWRU5UIHwgYXdrIC1GOiAne3ByaW50ICQxfSdgCisJCQlFVkVOVF9WQUw9YCRPUEhFTFAgJEVWRU5UYAorCQkJaWYgdGVzdCAiJD8iICE9IDA7IHRoZW4KKwkJCQlleGl0IDEKKwkJCWZpCisJCQlDT1VOVD1gZWNobyAkR09URVZFTlQgfCBhd2sgLUY6ICd7cHJpbnQgJDJ9J2AKKwkJCVVOSVRfTUFTSz1gZWNobyAkR09URVZFTlQgfCBhd2sgLUY6ICd7cHJpbnQgJDN9J2AKKwkJCUtFUk5FTD1gZWNobyAkR09URVZFTlQgfCBhd2sgLUY6ICd7cHJpbnQgJDR9J2AKKwkJCVVTRVI9YGVjaG8gJEdPVEVWRU5UIHwgYXdrIC1GOiAne3ByaW50ICQ1fSdgCisJCQlUTVBFVkVOVD0iJEVWRU5UOiRDT1VOVDokVU5JVF9NQVNLIgorCQkJVU5JVF9NQVNLX05BTUVEPSIkVU5JVF9NQVNLIgorCQkJVU5JVF9NQVNLPWAkT1BIRUxQIC0tdW5pdC1tYXNrICRUTVBFVkVOVGAKKwkJCWlmIHRlc3QgIiQ/IiAhPSAwOyB0aGVuCisJCQkJZXhpdCAxCisJCQlmaQorCQkJaWYgdGVzdCAteiAiJEtFUk5FTCI7IHRoZW4KKwkJCQlLRVJORUw9MQorCQkJZmkKKwkJCWlmIHRlc3QgLXogIiRVU0VSIjsgdGhlbgorCQkJCVVTRVI9MQorCQkJZmkKKworCQkJc2V0X2V2ZW50ICRmICIkRVZFTlQ6JENPVU5UOiRVTklUX01BU0s6JEtFUk5FTDokVVNFUiIKKwkJZmkKKwlkb25lCit9CisKKworIyBnZXQgYW5kIGNoZWNrIHNwZWNpZmllZCBvcHRpb25zCitkb19vcHRpb25zKCkKK3sKKwlFWENMVVNJVkVfQVJHQz0wCisJU0VUVVA9bm8KKwlORUVEX1NFVFVQPW5vCisJU0VFTl9FVkVOVD0wCisKKwkjIG5vdGU6IGRlZmF1bHQgc2V0dGluZ3MgaGF2ZSBhbHJlYWR5IGJlZW4gbG9hZGVkCisKKwl3aGlsZSBbICIkIyIgLW5lIDAgXQorCWRvCisJCWFyZz1gcHJpbnRmICVzICQxIHwgYXdrIC1GPSAne3ByaW50ICQxfSdgCisJCXZhbD1gcHJpbnRmICVzICQxIHwgYXdrIC1GPSAne3ByaW50ICQyfSdgCisJCXNoaWZ0CisJCWlmIHRlc3QgLXogIiR2YWwiOyB0aGVuCisJCQlsb2NhbCBwb3NzaWJsZXZhbD0kMQorCQkJcHJpbnRmICVzICQxICIkcG9zc2libGV2YWwiIHwgZ3JlcCBeLSA+L2Rldi9udWxsIDI+JjEKKwkJCWlmIHRlc3QgIiQ/IiAhPSAiMCI7IHRoZW4KKwkJCQl2YWw9JHBvc3NpYmxldmFsCisJCQkJaWYgWyAiJCMiIC1nZSAxIF07IHRoZW4KKwkJCQkJc2hpZnQKKwkJCQlmaQorCQkJZmkKKwkJZmkKKworCQljYXNlICIkYXJnIiBpbgorCisJCQktLWluaXQpCisJCQkJIyB0aGlzIGlzIGFscmVhZHkgZG9uZSBpbiBsb2FkX21vZHVsZQorCQkJCSMgYmVjYXVzZSBuZWVkIHRvIGtub3cgdGhlIHByb2Nlc3NvciB0eXBlCisJCQkJIyBhbmQgbnVtYmVyIG9mIHJlZ2lzdGVycworCQkJCUlOSVQ9eWVzOworCQkJCUVYQ0xVU0lWRV9BUkdDPWBleHByICRFWENMVVNJVkVfQVJHQyArIDFgCisJCQkJRVhDTFVTSVZFX0FSR1Y9IiRhcmciCisJCQkJOzsKKworCQkJLS1zZXR1cCkKKwkJCQlTRVRVUD15ZXMKKwkJCQk7OworCisJCQktLXN0YXJ0LWRhZW1vbikKKwkJCQlpZiB0ZXN0ICIkS0VSTkVMX1NVUFBPUlQiICE9ICJ5ZXMiOyB0aGVuCisJCQkJCWVjaG8gIiRhcmcgdW5zdXBwb3J0ZWQuIHVzZSBcIi0tc3RhcnRcIiIgPiYyCisJCQkJCWV4aXQgMQorCQkJCWZpCisJCQkJU1RBUlRfREFFTU9OPXllcworCQkJCUVYQ0xVU0lWRV9BUkdDPWBleHByICRFWENMVVNJVkVfQVJHQyArIDFgCisJCQkJRVhDTFVTSVZFX0FSR1Y9IiRhcmciCisJCQkJOzsKKworCQkJLXN8LS1zdGFydCkKKwkJCQlTVEFSVD15ZXMKKwkJCQlFWENMVVNJVkVfQVJHQz1gZXhwciAkRVhDTFVTSVZFX0FSR0MgKyAxYAorCQkJCUVYQ0xVU0lWRV9BUkdWPSIkYXJnIgorCQkJCTs7CisKKwkJCS1kfC0tZHVtcCkKKwkJCQlEVU1QPXllcworCQkJCU9OTFlfRFVNUD15ZXMKKwkJCQlFWENMVVNJVkVfQVJHQz1gZXhwciAkRVhDTFVTSVZFX0FSR0MgKyAxYAorCQkJCUVYQ0xVU0lWRV9BUkdWPSIkYXJnIgorCQkJCTs7CisKKwkJCS10fC0tc3RvcCkKKwkJCQlpZiB0ZXN0ICIkS0VSTkVMX1NVUFBPUlQiICE9ICJ5ZXMiOyB0aGVuCisJCQkJCWVjaG8gIiRhcmcgdW5zdXBwb3J0ZWQuIHVzZSBcIi0tc2h1dGRvd25cIiIgPiYyCisJCQkJCWV4aXQgMQorCQkJCWZpCisJCQkJRFVNUD15ZXMKKwkJCQlTVE9QPXllcworCQkJCUVYQ0xVU0lWRV9BUkdDPWBleHByICRFWENMVVNJVkVfQVJHQyArIDFgCisJCQkJRVhDTFVTSVZFX0FSR1Y9IiRhcmciCisJCQkJOzsKKworCQkJLWh8LS1zaHV0ZG93bikKKwkJCQlEVU1QPXllcworCQkJCVNUT1A9eWVzCisJCQkJS0lMTF9EQUVNT049eWVzCisJCQkJRVhDTFVTSVZFX0FSR0M9YGV4cHIgJEVYQ0xVU0lWRV9BUkdDICsgMWAKKwkJCQlFWENMVVNJVkVfQVJHVj0iJGFyZyIKKwkJCQk7OworCisJCQktLXN0YXR1cykKKwkJCQlTVEFUVVM9eWVzCisJCQkJOzsKKworCQkJLS1yZXNldCkKKwkJCQlEVU1QPXllcworCQkJCVJFU0VUPXllcworCQkJCUVYQ0xVU0lWRV9BUkdDPWBleHByICRFWENMVVNJVkVfQVJHQyArIDFgCisJCQkJRVhDTFVTSVZFX0FSR1Y9IiRhcmciCisJCQkJOzsKKworCQkJLS1zYXZlKQorCQkJCWVycm9yX2lmX25vdF92YWxpZF9zYXZlbmFtZSAiJGFyZyIgIiR2YWwiCisJCQkJRFVNUD15ZXMKKwkJCQlTQVZFX1NFU1NJT049eWVzCisJCQkJU0FWRV9OQU1FPSR2YWwKKwkJCQlFWENMVVNJVkVfQVJHQz1gZXhwciAkRVhDTFVTSVZFX0FSR0MgKyAxYAorCQkJCUVYQ0xVU0lWRV9BUkdWPSIkYXJnIgorCQkJCTs7CisKKwkJCS0tZGVpbml0KQorCQkJCURVTVA9eWVzCisJCQkJdGVzdCAhIC1mICIkTE9DS19GSUxFIiB8fCB7CisJCQkJCVNUT1A9eWVzCisJCQkJCUtJTExfREFFTU9OPXllcworCQkJCX0KKwkJCQlERUlOSVQ9eWVzCisJCQkJRVhDTFVTSVZFX0FSR0M9YGV4cHIgJEVYQ0xVU0lWRV9BUkdDICsgMWAKKwkJCQlFWENMVVNJVkVfQVJHVj0iJGFyZyIKKwkJCQk7OworCisJCQkjIC0tc2V0dXAgb3B0aW9ucworCisJCQktLXNlc3Npb24tZGlyKQorCQkJCSMgYWxyZWFkeSBwcm9jZXNzZWQKKwkJCQk7OworCQkJLS1idWZmZXItc2l6ZSkKKwkJCQllcnJvcl9pZl9ub3RfbnVtYmVyICIkYXJnIiAiJHZhbCIKKwkJCQlCVUZfU0laRT0kdmFsCisJCQkJRE9fU0VUVVA9eWVzCisJCQkJOzsKKwkJCS0tYnVmZmVyLXdhdGVyc2hlZCkKKwkJCQlpZiB0ZXN0ICIkS0VSTkVMX1NVUFBPUlQiICE9ICJ5ZXMiOyB0aGVuCisJCQkJCWVjaG8gIiRhcmcgdW5zdXBwb3J0ZWQgZm9yIHRoaXMga2VybmVsIHZlcnNpb24iCisJCQkJCWV4aXQgMQorCQkJCWZpCisJCQkJZXJyb3JfaWZfbm90X251bWJlciAiJGFyZyIgIiR2YWwiCisJCQkJQlVGX1dBVEVSU0hFRD0kdmFsCisJCQkJRE9fU0VUVVA9eWVzCisJCQkJOzsKKwkJCS0tY3B1LWJ1ZmZlci1zaXplKQorCQkJCWlmIHRlc3QgIiRLRVJORUxfU1VQUE9SVCIgIT0gInllcyI7IHRoZW4KKwkJCQkJZWNobyAiJGFyZyB1bnN1cHBvcnRlZCBmb3IgdGhpcyBrZXJuZWwgdmVyc2lvbiIKKwkJCQkJZXhpdCAxCisJCQkJZmkKKwkJCQllcnJvcl9pZl9ub3RfbnVtYmVyICIkYXJnIiAiJHZhbCIKKwkJCQlDUFVfQlVGX1NJWkU9JHZhbAorCQkJCURPX1NFVFVQPXllcworCQkJCTs7CisJCQktZXwtLWV2ZW50KQorCQkJCWVycm9yX2lmX2ludmFsaWRfYXJnICIkYXJnIiAiJHZhbCIKKwkJCQkjIHJlc2V0IGFueSByZWFkLWluIGRlZmF1bHRzIGZyb20gZGFlbW9ucmMKKwkJCQlpZiB0ZXN0ICIkU0VFTl9FVkVOVCIgPSAiMCI7IHRoZW4KKwkJCQkJTlJfQ0hPU0VOPTAKKwkJCQkJU0VFTl9FVkVOVD0xCisJCQkJZmkKKwkJCQlpZiB0ZXN0ICIkdmFsIiA9ICJkZWZhdWx0IjsgdGhlbgorCQkJCQl2YWw9JERFRkFVTFRfRVZFTlQKKwkJCQlmaQorCQkJCXNldF9ldmVudCAkTlJfQ0hPU0VOICIkdmFsIgorCQkJCU5SX0NIT1NFTj1gZXhwciAkTlJfQ0hPU0VOICsgMWAKKwkJCQlET19TRVRVUD15ZXMKKwkJCQk7OworCQkJLXB8LS1zZXBhcmF0ZSkKKwkJCQlPTERfSUZTPSRJRlMKKwkJCQlJRlM9LAorCQkJCXZhbGlkYXRlX3NlcGFyYXRlX2FyZ3MgJGFyZyAkdmFsCisJCQkJSUZTPSRPTERfSUZTCisJCQkJRE9fU0VUVVA9eWVzCisJCQkJOzsKKwkJCS1jfC0tY2FsbGdyYXBoKQorCQkJCWlmIHRlc3QgISAtZiAkTU9VTlQvYmFja3RyYWNlX2RlcHRoOyB0aGVuCisJCQkJCWVjaG8gIkNhbGwtZ3JhcGggcHJvZmlsaW5nIHVuc3VwcG9ydGVkIG9uIHRoaXMga2VybmVsL2hhcmR3YXJlIiA+JjIKKwkJCQkJZXhpdCAxCisJCQkJZmkKKwkJCQllcnJvcl9pZl9ub3RfbnVtYmVyICIkYXJnIiAiJHZhbCIKKwkJCQlDQUxMR1JBUEg9JHZhbAorCQkJCURPX1NFVFVQPXllcworCQkJCTs7CisJCQktLXZtbGludXgpCisJCQkJZXJyb3JfaWZfaW52YWxpZF9hcmcgIiRhcmciICIkdmFsIgorCQkJCVZNTElOVVg9JHZhbAorCQkJCURPX1NFVFVQPXllcworCQkJCTs7CisJCQktLW5vLXZtbGludXgpCisJCQkJVk1MSU5VWD1ub25lCisJCQkJRE9fU0VUVVA9eWVzCisJCQkJOzsKKwkJCS0ta2VybmVsLXJhbmdlKQorCQkJCWVycm9yX2lmX2ludmFsaWRfYXJnICIkYXJnIiAiJHZhbCIKKwkJCQlLRVJORUxfUkFOR0U9JHZhbAorCQkJCURPX1NFVFVQPXllcworCQkJCTs7CisJCQktLXhlbikKKwkJCQllcnJvcl9pZl9pbnZhbGlkX2FyZyAiJGFyZyIgIiR2YWwiCisJCQkJWEVOSU1BR0U9JHZhbAorCQkJCURPX1NFVFVQPXllcworCQkJCTs7CisJCQktLWFjdGl2ZS1kb21haW5zKQorCQkJCWVycm9yX2lmX2ludmFsaWRfYXJnICRhcmcgJHZhbAorCQkJCUFDVElWRV9ET01BSU5TPSR2YWwKKwkJCQlET19TRVRVUD15ZXMKKwkJCQk7OworCQkJLS1ub3RlLXRhYmxlLXNpemUpCisJCQkJaWYgdGVzdCAiJEtFUk5FTF9TVVBQT1JUIiA9ICJ5ZXMiOyB0aGVuCisJCQkJCWVjaG8gIlwiJGFyZ1wiIG1lYW5pbmdsZXNzIG9uIHRoaXMga2VybmVsIiA+JjIKKwkJCQkJZXhpdCAxCisJCQkJZWxzZQorCQkJCQllcnJvcl9pZl9ub3RfbnVtYmVyICIkYXJnIiAiJHZhbCIKKwkJCQkJTk9URV9TSVpFPSR2YWwKKwkJCQlmaQorCQkJCURPX1NFVFVQPXllcworCQkJCTs7CisJCQktaXwtLWltYWdlKQorCQkJCWVycm9yX2lmX2ludmFsaWRfYXJnICIkYXJnIiAiJHZhbCIKKwkJCQlpZiB0ZXN0ICIkdmFsIiA9ICJhbGwiOyB0aGVuCisJCQkJCUlNQUdFX0ZJTFRFUj0KKwkJCQllbHNlCisJCQkJCUlNQUdFX0ZJTFRFUj0kdmFsCisJCQkJZmkKKwkJCQlET19TRVRVUD15ZXMKKwkJCQk7OworCisJCQktVnwtLXZlcmJvc2UpCisJCQkJaWYgdGVzdCAteiAiJHZhbCI7IHRoZW4KKwkJCQkJVkVSQk9TRT0iYWxsIgorCQkJCWVsc2UKKwkJCQkJZXJyb3JfaWZfaW52YWxpZF9hcmcgIiRhcmciICIkdmFsIgorCQkJCQlWRVJCT1NFPSR2YWwKKwkJCQlmaQorCQkJCTs7CisKKwkJCS1sfC0tbGlzdC1ldmVudHMpCisJCQkJRVhDTFVTSVZFX0FSR0M9YGV4cHIgJEVYQ0xVU0lWRV9BUkdDICsgMWAKKwkJCQlFWENMVVNJVkVfQVJHVj0iJGFyZyIKKwkJCQlleGVjICRPUEhFTFAKKwkJCQk7OworCisJCQkqKQorCQkJCWVjaG8gIlVua25vd24gb3B0aW9uIFwiJGFyZ1wiLiBTZWUgb3Bjb250cm9sIC0taGVscCIgPiYyCisJCQkJZXhpdCAxCisJCQkJOzsKKwkJZXNhYworCWRvbmUKKworCW5vcm1hbGlzZV9ldmVudHMKKwl2ZXJpZnlfY291bnRlcnMKKworCSMgZXJyb3IgY2hlY2tpbmcgdG8gbWFrZSBzdXJlIG9wdGlvbnMgbWFrZSBzZW5zZQorCWlmIHRlc3QgIiRFWENMVVNJVkVfQVJHQyIgLWd0IDE7IHRoZW4KKwkJZWNobyAiT3B0aW9uIFwiJEVYQ0xVU0lWRV9BUkdWXCIgbm90IHZhbGlkIHdpdGggb3RoZXIgb3B0aW9ucy4iID4mMgorCQlleGl0IDEKKwlmaQorCisJaWYgdGVzdCAiJFNFVFVQIiA9ICJ5ZXMiIC1hICIkRE9fU0VUVVAiICE9ICJ5ZXMiOyB0aGVuCisJCWVjaG8gIk5vIG9wdGlvbnMgc3BlY2lmaWVkIGZvciAtLXNldHVwLiIgPiYyCisJCWV4aXQgMQorCWZpCisKKwlpZiB0ZXN0IC1uICIkVkVSQk9TRSI7IHRoZW4KKwkJaWYgdGVzdCAiJFNUQVJUIiAhPSAieWVzIiAtYSAiJFNUQVJUX0RBRU1PTiIgIT0gInllcyI7IHRoZW4KKwkJCWVjaG8gIk9wdGlvbiAtLXZlcmJvc2UgbWF5IG9ubHkgYmUgdXNlZCB3aXRoIC0tc3RhcnQgb3IgLS1zdGFydC1kYWVtb24iID4mMgorCQkJZXhpdCAxCisJCWZpCisJZmkKKworCWlmIHRlc3QgIiRET19TRVRVUCIgPSAieWVzIjsgdGhlbgorCQlTRVRVUD0iJERPX1NFVFVQIgorCWZpCisKKwlpZiB0ZXN0ICIkRVhDTFVTSVZFX0FSR0MiIC1lcSAxIC1hICIkU0VUVVAiID0gInllcyI7IHRoZW4KKwkJaWYgdGVzdCAiJEVYQ0xVU0lWRV9BUkdWIiAhPSAiLS1zdGFydC1kYWVtb24iIC1hICIkRVhDTFVTSVZFX0FSR1YiICE9ICItLXN0YXJ0IjsgdGhlbgorCQkJZWNobyAiT3B0aW9uIFwiLS1zZXR1cFwiIG5vdCB2YWxpZCB3aXRoIFwiJEVYQ0xVU0lWRV9BUkdWXCIuIiA+JjIKKwkJCWV4aXQgMQorCQlmaQorCWZpCisKKwl2ZWNobyAiUGFyYW1ldGVycyB1c2VkOiIKKwl2ZWNobyAiU0VTU0lPTl9ESVIgJFNFU1NJT05fRElSIgorCXZlY2hvICJMT0NLX0ZJTEUgICAkTE9DS19GSUxFIgorCXZlY2hvICJTQU1QTEVTX0RJUiAkU0FNUExFU19ESVIiCisJdmVjaG8gIkNVUlJFTlRfU0FNUExFU19ESVIgJENVUlJFTlRfU0FNUExFU19ESVIiCisJdmVjaG8gIkNQVVRZUEUgJENQVVRZUEUiCisJaWYgdGVzdCAiJEJVRl9TSVpFIiAhPSAiMCI7IHRoZW4KKwkJdmVjaG8gIkJVRl9TSVpFICRCVUZfU0laRSIKKwllbHNlCisJCXZlY2hvICJCVUZfU0laRSBkZWZhdWx0IHZhbHVlIgorCWZpCisJaWYgdGVzdCAiJEJVRl9XQVRFUlNIRUQiICE9ICIwIjsgdGhlbgorCQl2ZWNobyAiQlVGX1dBVEVSU0hFRCAkQlVGX1dBVEVSU0hFRCIKKwllbHNlCisJCXZlY2hvICJCVUZfV0FURVJTSEVEIGRlZmF1bHQgdmFsdWUiCisJZmkKKwlpZiB0ZXN0ICIkS0VSTkVMX1NVUFBPUlQiID0gInllcyI7IHRoZW4KKwkJaWYgdGVzdCAiJENQVV9CVUZfU0laRSIgIT0gIjAiOyB0aGVuCisJCQl2ZWNobyAiQ1BVX0JVRl9TSVpFICRDUFVfQlVGX1NJWkUiCisJCWVsc2UKKwkJCXZlY2hvICJDUFVfQlVGX1NJWkUgZGVmYXVsdCB2YWx1ZSIKKwkJZmkKKwlmaQorCisJdmVjaG8gIlNFUEFSQVRFX0xJQiAkU0VQQVJBVEVfTElCIgorCXZlY2hvICJTRVBBUkFURV9LRVJORUwgJFNFUEFSQVRFX0tFUk5FTCIKKwl2ZWNobyAiU0VQQVJBVEVfVEhSRUFEICRTRVBBUkFURV9USFJFQUQiCisJdmVjaG8gIlNFUEFSQVRFX0NQVSAkU0VQQVJBVEVfQ1BVIgorCXZlY2hvICJDQUxMR1JBUEggJENBTExHUkFQSCIKKwl2ZWNobyAiVk1MSU5VWCAkVk1MSU5VWCIKKwl2ZWNobyAiS0VSTkVMX1JBTkdFICRLRVJORUxfUkFOR0UiCisJdmVjaG8gIlhFTklNQUdFICRYRU5JTUFHRSIKKwl2ZWNobyAiWEVOX1JBTkdFICRYRU5fUkFOR0UiCit9CisKKworIyBzdG9wIGFueSBleGlzdGluZyBkYWVtb24KK2RvX3N0b3AoKQoreworCWlmIHRlc3QgISAtZiAiJExPQ0tfRklMRSI7IHRoZW4KKwkJZWNobyAiRGFlbW9uIG5vdCBydW5uaW5nIiA+JjIKKwkJcmV0dXJuCisJZmkKKworCWtpbGwgLTAgYGNhdCAkTE9DS19GSUxFYCAyPi9kZXYvbnVsbAorCWlmIHRlc3QgIiQ/IiAtbmUgMDsgdGhlbgorCQllY2hvICJEZXRlY3RlZCBzdGFsZSBsb2NrIGZpbGUuIFJlbW92aW5nLiIgPiYyCisJCXJtIC1mICIkTE9DS19GSUxFIgorCQlyZXR1cm4KKwlmaQorCisJaWYgdGVzdCAkS0VSTkVMX1NVUFBPUlQgPSAieWVzIiBcCisJICAgICYmIHRlc3QgMCAhPSAkKGNhdCAvZGV2L29wcm9maWxlL2VuYWJsZSk7IHRoZW4KKwkJZWNobyAiU3RvcHBpbmcgcHJvZmlsaW5nLiIKKwkJZWNobyAwID4vZGV2L29wcm9maWxlL2VuYWJsZQorCWZpCisJa2lsbCAtVVNSMiBgY2F0ICRMT0NLX0ZJTEVgIDI+L2Rldi9udWxsCit9CisKKworIyBraWxsIHRoZSBkYWVtb24gcHJvY2VzcyhlcykKK2RvX2tpbGxfZGFlbW9uKCkKK3sKKwlpZiB0ZXN0ICEgLWYgIiRMT0NLX0ZJTEUiOyB0aGVuCisJCSMgbm8gZXJyb3IgbWVzc2FnZSwgZG9fa2lsbF9kYWVtb24gaW1wbHkgc3RvcCBhbmQgc3RvcCBhbHJlYWR5CisJCSMgb3V0cHV0ICJEYWVtb24gbm90IHJ1bm5pbmciCisJCXJldHVybgorCWZpCisKKwlraWxsIC0wIGBjYXQgJExPQ0tfRklMRWAgMj4vZGV2L251bGwKKwlpZiB0ZXN0ICIkPyIgLW5lIDA7IHRoZW4KKwkJZWNobyAiRGV0ZWN0ZWQgc3RhbGUgbG9jayBmaWxlLiBSZW1vdmluZy4iID4mMgorCQlybSAtZiAiJExPQ0tfRklMRSIKKwkJcmV0dXJuCisJZmkKKworCWVjaG8gIktpbGxpbmcgZGFlbW9uLiIKKworCWlmIHRlc3QgJEtFUk5FTF9TVVBQT1JUID0gInllcyI7IHRoZW4KKwkJa2lsbCAtVEVSTSBgY2F0ICRMT0NLX0ZJTEVgCisJZWxzZQorCQllY2hvIDEgPi9wcm9jL3N5cy9kZXYvb3Byb2ZpbGUvZHVtcF9zdG9wCisJZmkKKworCUNPVU5UPTAKKwl3aGlsZSB0ZXN0IC1uICJgcGlkb2Ygb3Byb2ZpbGVkYCIKKwlkbworCQlzbGVlcCAxCisKKwkJIyBiZWNhdXNlIG9wcm9maWxlZCBvbmx5IHNldHMgYSB2YXJpYWJsZSBpbnNpZGUgdGhlCisJCSMgc2lnbmFsIGhhbmRsZXIgaXRzZWxmLCBpdCdzIHBvc3NpYmxlIHRvIG1pc3MgYQorCQkjIHNpZ25hbCBqdXN0IGJlZm9yZSBpdCBnb2VzIHRvIHNsZWVwIHdhaXRpbmcgZm9yCisJCSMgZGF0YSBmcm9tIHRoZSBrZXJuZWwgdGhhdCBuZXZlciBhcnJpdmVzLiBTbyB3ZQorCQkjIHJlbWluZCBpdCBpdCBuZWVkcyB0byBkaWUgLSB0aGlzIHdvcmtzIGJlY2F1c2UKKwkJIyB0aGUgc2lnbmFsIHdpbGwgYnJpbmcgb3Byb2ZpbGVkIG91dCBvZiB0aGUga2VybmVsCisJCSMgYmFjayBpbnRvIHVzZXJzcGFjZQorCQlpZiB0ZXN0ICRLRVJORUxfU1VQUE9SVCA9ICJ5ZXMiOyB0aGVuCisJCQlwaWQ9YGNhdCAkTE9DS19GSUxFIDI+L2Rldi9udWxsYAorCQkJa2lsbCAtVEVSTSAiJHBpZCIgMj4vZGV2L251bGwKKwkJZmkKKworCQlDT1VOVD1gZXhwciAkQ09VTlQgKyAxYAorCisJCSMgSUJTIGNhbiBnZW5lcmF0ZSBhIGxhcmdlIG51bWJlciBvZiBzYW1wbGVzL2V2ZW50cy4KKwkJIyBUaGVyZWZvcmUsIGV4dGVuZCB0aGUgZGVsYXkgYmVmb3JlIGtpbGxpbmcKKwkJaWYgdGVzdCAiJElCU19GRVRDSF9DT1VOVCIgIT0gIjAiIFwKKwkJICAgICAtbyAiJElCU19PUF9DT1VOVCIgIT0gIjAiIDsgdGhlbgorCQkJREVMQVlfS0lMTD02MAorCQllbHNlCisJCQlERUxBWV9LSUxMPTE1CisJCWZpCisJCWlmIHRlc3QgIiRDT1VOVCIgLWVxICIkREVMQVlfS0lMTCI7IHRoZW4KKwkJCWVjaG8gIkRhZW1vbiBzdHVjayBzaHV0dGluZyBkb3duOyBraWxsaW5nICEiCisJCQlraWxsIC05IGBjYXQgJExPQ0tfRklMRWAKKwkJZmkKKwlkb25lCisJc2xlZXAgMQorCSMgYWxyZWFkeSByZW1vdmVkIHVubGVzcyB3ZSBmb3JjZWQgdGhlIGtpbGwKKwlybSAtZiAiJFNFU1NJT05fRElSL2xvY2siCit9CisKKworcm1fZGV2aWNlc18yNCgpCit7CisJcm1fZGV2aWNlICIkREVWSUNFX0ZJTEUiCisJcm1fZGV2aWNlICIkTk9URV9ERVZJQ0VfRklMRSIKKwlybV9kZXZpY2UgIiRIQVNIX01BUF9ERVZJQ0VfRklMRSIKK30KKworCitjcmVhdGVfZGV2aWNlc18yNCgpCit7CisJTUFKT1JfTlI9YGdyZXAgb3Byb2YgL3Byb2MvZGV2aWNlcyB8IGF3ayAne3ByaW50ICQxfSdgCisKKwljcmVhdGVfZGV2aWNlICRERVZJQ0VfRklMRSAkTUFKT1JfTlIgMAorCWNyZWF0ZV9kZXZpY2UgJE5PVEVfREVWSUNFX0ZJTEUgJE1BSk9SX05SIDIKKwljcmVhdGVfZGV2aWNlICRIQVNIX01BUF9ERVZJQ0VfRklMRSAkTUFKT1JfTlIgMQorfQorCisjIGNyZWF0ZSBqaXRkdW1wIGRpcmVjdG9yeSBhbmQgcmVtb3ZlIGFueSBvbGQgZmlsZXMgZnJvbQorIyBhIHByZXZpb3VzIHJ1bgorcHJlcF9qaXRkdW1wKCkgeworCWxvY2FsIGR1bXBkaXI9JFNFU1NJT05fRElSL2ppdGR1bXAKKwl0ZXN0IC1kICRkdW1wZGlyIHx8IHsKKwkJbWtkaXIgLXAgJGR1bXBkaXI7CisJCWNobW9kIDc3NyAkZHVtcGRpcjsKKwkJcmV0dXJuOworCX0KKwkjIFZNcyBtYXkgYWxyZWFkeSBiZSBydW5uaW5nIHdoZW4gcHJvZmlsaW5nIGlzIHN0YXJ0ZWQsIHNvCisJIyByZW1vdmUgb25seSBkdW1wIGZpbGVzIHRoYXQgYXJlIG5vdCBpbiB1c2UKKwlmb3IgSSBpbiAkZHVtcGRpci8qOyBkbworCQl0ZXN0IC1mICRJIHx8IGNvbnRpbnVlOworCQlsb2NhbCBwaWQ9YGJhc2VuYW1lICRJIC5kdW1wYDsKKwkJaWYgdGVzdCAtZCAvcHJvYy8kcGlkOyB0aGVuCisJCQlsb2NhbCBmaWxlcz1gZmluZCAvcHJvYy8kcGlkL2ZkIC1sbmFtZSAkSWA7CisJCQl0ZXN0IC1uICIkZmlsZXMiICYmIGNvbnRpbnVlOworCQlmaQorCQlybSAtZiAkSTsKKwlkb25lCit9CisKKyMgc2V0dXAgYW5kIHN0YXJ0IG1vZHVsZQorZG9fc2V0dXAoKQoreworCWNyZWF0ZV9kaXIgIiRTRVNTSU9OX0RJUiIKKworCWlmIHRlc3QgIiRLRVJORUxfU1VQUE9SVCIgIT0gInllcyI7IHRoZW4KKwkJcm1fZGV2aWNlc18yNAorCQljcmVhdGVfZGV2aWNlc18yNAorCWZpCisKKwljcmVhdGVfZGlyICIkQ1VSUkVOVF9TQU1QTEVTX0RJUiIKKworCXByZXBfaml0ZHVtcDsKK30KKworCisjIHNldCBhIHN5c2N0bC9vcHJvZmlsZWZzIHBhcmFtZXRlcgorc2V0X3BhcmFtKCkKK3sKKwlpZiB0ZXN0ICIkS0VSTkVMX1NVUFBPUlQiID0gInllcyI7IHRoZW4KKwkJZWNobyAkMiA+JE1PVU5ULyQxCisJZWxzZQorCQkkU1lTQ1RMIC13IGRldi5vcHJvZmlsZS4kMT0kMgorCWZpCit9CisKKworIyBzZXQgYSBzeXNjdGwvb3Byb2ZpbGVmcyBjb3VudGVyIHBhcmFtZXRlcgorc2V0X2N0cl9wYXJhbSgpCit7CisJIyBubyBzdWNoIHRoaW5nIGZvciBwZXJmbW9uCisJaWYgdGVzdCAiJElTX1BFUkZNT04iID0gInllcyI7IHRoZW4KKwkJcmV0dXJuCisJZmkKKworCWlmIHRlc3QgIiRLRVJORUxfU1VQUE9SVCIgPSAieWVzIjsgdGhlbgorCQlpZiB0ZXN0IC1lICRNT1VOVC8kMTsgdGhlbgorCQkJZWNobyAkMyA+JE1PVU5ULyQxLyQyCisJCWVsc2UKKwkJCWVjaG8gLW4gIkVycm9yOiBjb3VudGVyICQxIG5vdCBhdmFpbGFibGUiCisJCQlpZiB0ZXN0IC1lIC9wcm9jL3N5cy9rZXJuZWwvbm1pX3dhdGNoZG9nOyB0aGVuCisJCQkJZWNobyAiIG5taV93YXRjaGRvZyB1c2luZyB0aGlzIHJlc291cmNlID8gVHJ5OiIKKwkJCQllY2hvICJvcGNvbnRyb2wgLS1kZWluaXQiCisJCQkJZWNobyAiZWNobyAwID4gL3Byb2Mvc3lzL2tlcm5lbC9ubWlfd2F0Y2hkb2ciCisJCQlmaQorCQkJZXhpdCAxCisJCWZpCisJZWxzZQorCQkkU1lTQ1RMIC13IGRldi5vcHJvZmlsZS4kMS4kMj0kMworCWZpCit9CisKKworIyByZXR1cm5zIDEgaWYgJENQVVRZUEUgaXMgYSBQUEM2NCB2YXJpYW50Citpc19ub25fY2VsbF9wcGM2NF92YXJpYW50KCkKK3sKKwljYXNlICIkMSIgaW4KKwkgICAgcHBjNjQvKmNlbGwqKQorCQlyZXR1cm4gMAorCQk7OworCSAgICBwcGM2NC8qKQorCQlyZXR1cm4gMQorCQk7OworCSAgICAqKQorCQlyZXR1cm4gMAorCQk7OworCWVzYWMKK30KKworCisjIFRoZSBjaGVja19ldmVudF9tYXBwaW5nX2RhdGEgcHJvY2VkdXJlIGdpdmVzIHRoZQorIyBvcHBvcnR1bml0eSB0byB2YWxpZGF0ZSBldmVudHMgYW5kIGVuZm9yY2UgYW55CisjIGFyY2gtc3BlY2lmaWMgcmVzdHJpdGlvbnMsIGV0Yy4KK2NoZWNrX2V2ZW50X21hcHBpbmdfZGF0YSgpCit7CisKKwlpc19ub25fY2VsbF9wcGM2NF92YXJpYW50ICRDUFVUWVBFCisJaWYgdGVzdCAkPyAtbmUgMCA7IHRoZW4KKwkJIyBGb3IgUFBDNjQgYXJjaGl0ZWN0dXJlcywgdGhlIHZhbHVlcyByZXF1aXJlZCB0byBwcm9ncmFtCisJCSMgTU1DUnMgZm9yIHRoZSBnaXZlbiBldmVudCBhcmUgcmV0dXJuZWQgYWxvbmcgd2l0aCB0aGUgZXZlbnQuCisJCSMgSGVyZSB3ZSB1c2UgdGhvc2UgdmFsdWVzIHRvIGVuc3VyZSB0aGF0IGFsbCBjaG9zZW4gZXZlbnRzCisJCSMgYXJlIGZyb20gdGhlIHNhbWUgZ3JvdXAuCisJCU1NQ1IwPWBlY2hvICRFVkVOVF9TVFIgfCBhd2sgJ3twcmludCAkMn0nYAorCQlNTUNSMT1gZWNobyAkRVZFTlRfU1RSIHwgYXdrICd7cHJpbnQgJDN9J2AKKwkJTU1DUkE9YGVjaG8gJEVWRU5UX1NUUiB8IGF3ayAne3ByaW50ICQ0fSdgCisJCU1NQ1IwX1ZBTD1gZWNobyAkTU1DUjAgfCBhd2sgLUY6ICd7cHJpbnQgJDJ9J2AKKwkJTU1DUjFfVkFMPWBlY2hvICRNTUNSMSB8IGF3ayAtRjogJ3twcmludCAkMn0nYAorCQlNTUNSQV9WQUw9YGVjaG8gJE1NQ1JBIHwgYXdrIC1GOiAne3ByaW50ICQyfSdgCisKKwkJIyMgbW1jcjAsIG1tY3IxLCBtbWNyYSBhcmUgZm9yIGFsbCBwcGM2NCBjb3VudGVycworCQkjIFNhdmUgZmlyc3QgZXZlbnQgbW1jciBzZXR0aW5ncyB0byBjb21wYXJlIHdpdGggYWRkaXRpb25hbAorCQkjIGV2ZW50cy4gIEFsbCBldmVudHMgbXVzdCBoYXZlIHRoZSBzYW1lIG1tY3J4IHZhbHVlcyBpLmUuIGJlIGluCisJCSMgdGhlIHNhbWUgZ3JvdXAuICBPbmx5IG9uZSBldmVudCBpcyBhc3NpZ25lZCBwZXIgY291bnRlciwKKwkJIyBoZW5jZSB0aGVyZSB3aWxsIG5vdCBiZSBhIGNvbmZsaWN0IG9uIHRoZSBjb3VudGVycworCQlpZiBbICIkTU1DUjBfQ0tfVkFMIiA9ICIiIF0gOyB0aGVuCisJCQlNTUNSMF9DS19WQUw9JE1NQ1IwX1ZBTAorCQkJTU1DUjFfQ0tfVkFMPSRNTUNSMV9WQUwKKwkJCU1NQ1JBX0NLX1ZBTD0kTU1DUkFfVkFMCisJCWVsc2UKKwkJCSMgbWFrZSBzdXJlIGFsbCBldmVudHMgYXJlIGZyb20gdGhlIHNhbWUgZ3JvdXAKKwkJCWlmIHRlc3QgJE1NQ1IwX0NLX1ZBTCAhPSAkTU1DUjBfVkFMIFwKKwkJCQktbyAkTU1DUjFfQ0tfVkFMICE9ICRNTUNSMV9WQUwgXAorCQkJCS1vICRNTUNSQV9DS19WQUwgIT0gJE1NQ1JBX1ZBTCA7IHRoZW4KKwkJCQllY2hvICJFUlJPUjogVGhlIHNwZWNpZmllZCBldmVudHMgYXJlIG5vdCBmcm9tIHRoZSBzYW1lIGdyb3VwLiIKKwkJCQllY2hvICIgICAgICAgVXNlICdvcGNvbnRyb2wgLS1saXN0LWV2ZW50cycgdG8gc2VlIGV2ZW50IGdyb3VwaW5ncy4iCisJCQkJZXhpdCAxCisJCQlmaQorCQlmaQorCisJCSMgQ2hlY2sgaWYgYWxsIHVzZXIva2VybmVsIGZsYWdzIHBlci1jb3VudGVyIGFyZSBtYXRjaGluZy4KKwkJaWYgWyAiJFVTRVJfQ0siID0gIiIgXSA7IHRoZW4KKwkJCVVTRVJfQ0s9JFVTRVIKKwkJCUtFUk5FTF9DSz0kS0VSTkVMCisJCWVsc2UKKwkJCWlmIHRlc3QgJFVTRVJfQ0sgIT0gJFVTRVIgXAorCQkJCS1vICRLRVJORUxfQ0sgIT0gJEtFUk5FTCA7IHRoZW4KKwkJCQllY2hvICJFUlJPUjogQWxsIGtlcm5lbC91c2VyIGV2ZW50IGZsYWdzIG11c3QgbWF0Y2guIgorCQkJCWV4aXQgMQorCQkJZmkKKwkJZmkKKwlmaQorCWlmIFsgIiRDUFVUWVBFIiA9ICJwcGM2NC9jZWxsLWJlIiBdOyB0aGVuCisJCWV2ZW50X251bT1gZWNobyAkRVZFTlRfU1RSIHwgYXdrICd7cHJpbnQgJDF9J2AKKwkJIyBQUFUgZXZlbnQgYW5kIGN5Y2xlIGV2ZW50cyBjYW4gYmUgbWVhc3VyZWQgYXQKKwkJIyB0aGUgc2FtZSB0aW1lLiAgU1BVIGV2ZW50IGNhbiBub3QgYmUgbWVhc3VyZWQKKwkJIyBhdCB0aGUgc2FtZSB0aW1lIGFzIGFueSBvdGhlciBldmVudC4gIFNpbWlsYXJseSBmb3IKKwkJIyBTUFUgQ3ljbGVzCisKKwkJIyBXZSB1c2UgRVZOVF9NU0sgdG8gdHJhY2sgd2hhdCBldmVudHMgaGF2ZSBhbHJlYWR5CisJCSMgYmVlbiBzZWVuLiAgVmFsaWQgdmFsdWVzIGFyZToKKwkJIyAgICBOVUxMIHN0cmluZyAtICBubyBldmVudHMgc2VlbiB5ZXQKKwkJIyAgICAxIC0gUFBVIENZQ0xFUyBvciBQUFUgRXZlbnQgc2VlbgorCQkjICAgIDIgLSBTUFUgQ1lDTEVTIHNlZW4KKwkJIyAgICAzIC0gU1BVIEVWRU5UIHNlZW4KKworCQkjIGNoZWNrIGlmIGV2ZW50IGlzIFBQVV9DWUNMRVMKKwkJaWYgWyAiJGV2ZW50X251bSIgPSAiMSIgXTsgdGhlbgorCQkJaWYgWyAiJEVWTlRfTVNLIiA9ICIxIiBdIHx8IFsgIiRFVk5UX01TSyIgPSAiIiBdOyB0aGVuCisJCQkJRVZOVF9NU0s9MQorCQkJZWxzZQorCQkJCWVjaG8gIlBQVSBDWUNMRVMgbm90IGNvbXBhdGlibGUgd2l0aCBwcmV2aW91c2x5IHNwZWNpZmllZCBldmVudCIKKwkJCQlleGl0IDEKKwkJZmkKKworCQkjIGNoZWNrIGlmIGV2ZW50IGlzIFNQVV9DWUNMRVMKKwkJZWxpZiBbICIkZXZlbnRfbnVtIiA9ICIyIiBdOyB0aGVuCisJCQlpZiBbICIkRVZOVF9NU0siID0gIiIgXTsgdGhlbgorCQkJCUVWTlRfTVNLPTIKKwkJCWVsc2UKKwkJCQllY2hvICJTUFUgQ1lDTEVTIG5vdCBjb21wYXRpYmxlIHdpdGggYW55IG90aGVyIGV2ZW50IgorCQkJCWV4aXQgMQorCQkJZmkKKworCQkjIGNoZWNrIGlmIGV2ZW50IGlzIFNQVSBFdmVudCBwcm9maWxpbmcKKwkJZWxpZiBbICIkZXZlbnRfbnVtIiAtZ2UgIjQxMDAiIF0gJiYgWyAiJGV2ZW50X251bSIgLWxlICI0MTYzIiBdIDsgdGhlbgorCQkJaWYgWyAiJEVWTlRfTVNLIiA9ICIiIF07IHRoZW4KKwkJCQlFVk5UX01TSz0zCisJCQllbHNlCisJCQkJZWNobyAiU1BVIGV2ZW50IHByb2ZpbGluZyBub3QgY29tcGF0aWJsZSB3aXRoIGFueSBvdGhlciBldmVudCIKKwkJCQlleGl0IDEKKwkJCWZpCisKKwkJCSMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhlIGtlcm5lbCBzdXBwb3J0cyBTUFUgZXZlbnQKKwkJCSMgcHJvZmlsaW5nLiAgTm90ZSwgaWYgdGhlIGZpbGUgZXhpdHMgaXQgc2hvdWxkIGhhdmUKKwkJCSMgdGhlIExTQiBiaXQgc2V0IHRvIDEgaW5kaWNhdGluZyBTUFUgZXZlbnQgcHJvZmlsaW5nCisJCQkjIHN1cHBvcnQuIEZvciBub3csIGl0IGlzIHN1ZmZpY2llbnQgdG8gdGVzdCB0aGF0IHRoZQorCQkJIyBmaWxlIGV4aXN0cy4KKwkJCWlmIHRlc3QgISAtZiAvZGV2L29wcm9maWxlL2NlbGxfc3VwcG9ydDsgdGhlbgorCQkJCWVjaG8gIktlcm5lbCBkb2VzIG5vdCBzdXBwb3J0IFNQVSBldmVudCBwcm9maWxpbmciCisJCQkJZXhpdCAxCisJCQlmaQorCisJCQkjIGNoZWNrIGlmIGV2ZW50IGlzIFBQVSBFdmVudCBwcm9maWxpbmcgKGFsbCBvdGhlcgorCQkJIyBldmVudHMgYXJlIFBQVSBldmVudHMpCisJCWVsc2UKKwkJCWlmIFsgIiRFVk5UX01TSyIgPSAiMSIgXSB8fCBbICIkRVZOVF9NU0siID0gIiIgXTsgdGhlbgorCQkJCUVWTlRfTVNLPTEKKwkJCWVsc2UKKwkJCQllY2hvICJQUFUgcHJvZmlsaW5nIG5vdCBjb21wYXRpYmxlIHdpdGggcHJldmlvdXNseSBzcGVjaWZpZWQgZXZlbnQiCisJCQkJZXhpdCAxCisJCQlmaQorCQlmaQorCWZpCisJbGVuPWBlY2hvIC1uICRldmVudF9udW0gfCB3YyAtY2AKKwludW1fY2hhcnNfaW5fZ3JwaWQ9YGV4cHIgJGxlbiAtIDJgCisJR1JQX05VTV9WQUw9YGVjaG8gfCBhd2sgJ3twcmludCBzdWJzdHIoIiciJHtldmVudF9udW19IiciLDEsIiciJHtudW1fY2hhcnNfaW5fZ3JwaWR9IiciKX0nYAorCWlmIFsgIiRHUlBfTlVNX0NLX1ZBTCIgPSAiIiBdIDsgdGhlbgorCQlHUlBfTlVNX0NLX1ZBTD0kR1JQX05VTV9WQUwKKwllbHNlCisJCWlmIHRlc3QgJEdSUF9OVU1fQ0tfVkFMICE9ICRHUlBfTlVNX1ZBTCA7IHRoZW4KKwkJCWVjaG8gIkVSUk9SOiBUaGUgc3BlY2lmaWVkIGV2ZW50cyBhcmUgbm90IGZyb20gdGhlIHNhbWUgZ3JvdXAuIiA+JjIKKwkJCWVjaG8gIiAgICAgICBVc2UgJ29wY29udHJvbCAtLWxpc3QtZXZlbnRzJyB0byBzZWUgZXZlbnQgZ3JvdXBpbmdzLiIgPiYyCisJCQlleGl0IDEKKwkJZmkKKwlmaQorfQorCisKK2RvX3BhcmFtX3NldHVwKCkKK3sKKwkjIGRpZmZlcmVudCBuYW1lcworCWlmIHRlc3QgJEJVRl9TSVpFICE9IDA7IHRoZW4KKwkJaWYgdGVzdCAiJEtFUk5FTF9TVVBQT1JUIiA9ICJ5ZXMiOyB0aGVuCisJCQllY2hvICRCVUZfU0laRSA+JE1PVU5UL2J1ZmZlcl9zaXplCisJCWVsc2UKKwkJCSRTWVNDVEwgLXcgZGV2Lm9wcm9maWxlLmJ1ZnNpemU9JEJVRl9TSVpFCisJCWZpCisJZmkKKworCWlmIHRlc3QgJEJVRl9XQVRFUlNIRUQgIT0gMDsgdGhlbgorCQlpZiB0ZXN0ICIkS0VSTkVMX1NVUFBPUlQiID0gInllcyI7IHRoZW4KKwkJCWVjaG8gJEJVRl9XQVRFUlNIRUQgPiRNT1VOVC9idWZmZXJfd2F0ZXJzaGVkCisJCWVsc2UKKwkJCWVjaG8gImJ1ZmZlci13YXRlcnNoZWQgbm90IHN1cHBvcnRlZCAtIGlnbm9yZWQiID4mMgorCQlmaQorCWZpCisKKwlpZiB0ZXN0ICRDUFVfQlVGX1NJWkUgIT0gMDsgdGhlbgorCQlpZiB0ZXN0ICIkS0VSTkVMX1NVUFBPUlQiID0gInllcyI7IHRoZW4KKwkJCWVjaG8gJENQVV9CVUZfU0laRSA+JE1PVU5UL2NwdV9idWZmZXJfc2l6ZQorCQllbHNlCisJCQllY2hvICJjcHUtYnVmZmVyLXNpemUgbm90IHN1cHBvcnRlZCAtIGlnbm9yZWQiID4mMgorCQlmaQorCWZpCisKKwlpZiB0ZXN0IC1uICIkQUNUSVZFX0RPTUFJTlMiOyB0aGVuCisJCWlmIHRlc3QgIiRLRVJORUxfU1VQUE9SVCIgPSAieWVzIjsgdGhlbgorCQkJZWNobyAkQUNUSVZFX0RPTUFJTlMgPiRNT1VOVC9hY3RpdmVfZG9tYWlucworCQllbHNlCisJCQllY2hvICJhY3RpdmUtZG9tYWlucyBub3Qgc3VwcG9ydGVkIC0gaWdub3JlZCIgPiYyCisJCWZpCisJZmkKKworCWlmIHRlc3QgJE5PVEVfU0laRSAhPSAwOyB0aGVuCisJCXNldF9wYXJhbSBub3Rlc2l6ZSAkTk9URV9TSVpFCisJZmkKKworCWlmIHRlc3QgIiRLRVJORUxfU1VQUE9SVCIgPSAieWVzIiAtYSAtZiAkTU9VTlQvYmFja3RyYWNlX2RlcHRoOyB0aGVuCisJCXNldF9wYXJhbSBiYWNrdHJhY2VfZGVwdGggJENBTExHUkFQSAorCWVsaWYgdGVzdCAiJENBTExHUkFQSCIgIT0gIjAiOyB0aGVuCisJCWVjaG8gIkNhbGwtZ3JhcGggcHJvZmlsaW5nIG5vdCBzdXBwb3J0ZWQgLSBpZ25vcmVkIiA+JjIKKwlmaQorCisJaWYgdGVzdCAiJElTX1RJTUVSIiA9IDE7IHRoZW4KKwkJcmV0dXJuCisJZmkKKworCSMgdXNlIHRoZSBkZWZhdWx0IHNldHVwIGlmIG5vbmUgc2V0CisJaWYgdGVzdCAiJE5SX0NIT1NFTiIgPSAwOyB0aGVuCisJCXNldF9ldmVudCAwICRERUZBVUxUX0VWRU5UCisJCU5SX0NIT1NFTj0xCisJCUhXX0NUUlM9YCRPUEhFTFAgLS1jaGVjay1ldmVudHMgJERFRkFVTFRfRVZFTlQgLS1jYWxsZ3JhcGg9JENBTExHUkFQSGAKKwkJZWNobyAiVXNpbmcgZGVmYXVsdCBldmVudDogJERFRkFVTFRfRVZFTlQiCisJZmkKKworCSMgTmVjZXNzYXJ5IGluIHRoaXMgY2FzZSA6CisJIyBvcGNvbnRyb2wgY3RyMC1vbiBjdHIxLW9uIHRoZW4gb3Bjb250cm9sIGN0cjAtb24KKwlmb3IgZiBpbiAkT1BfQ09VTlRFUlMgOyBkbworCQlzZXRfY3RyX3BhcmFtICRmIGVuYWJsZWQgMAorCQlzZXRfY3RyX3BhcmFtICRmIGV2ZW50IDAKKwkJc2V0X2N0cl9wYXJhbSAkZiBjb3VudCAwCisKKwkJaWYgdGVzdCAtZiAkTU9VTlQvJGYvZXh0cmEgOyB0aGVuCisJCSAgICBzZXRfY3RyX3BhcmFtICRmIGV4dHJhIDAKKwkJZmkKKwlkb25lCisKKwkjIENoZWNrIGlmIGRyaXZlciBoYXMgSUJTIHN1cHBvcnQKKwlpZiB0ZXN0IC1kICRNT1VOVC9pYnNfZmV0Y2g7IHRoZW4KKwkJIyBSZXNldCBkcml2ZXIncyBJQlMgZmV0Y2ggc2V0dGluZworCQlzZXRfcGFyYW0gaWJzX2ZldGNoL2VuYWJsZSAwCisJZmkKKwkKKwlpZiB0ZXN0IC1kICRNT1VOVC9pYnNfb3AgOyB0aGVuCisJCSMgUmVzZXQgZHJpdmVyJ3MgSUJTIG9wIHNldHRpbmcKKwkJc2V0X3BhcmFtIGlic19vcC9lbmFibGUgMAorCWZpCQorCisJdmVyaWZ5X2NvdW50ZXJzCisKKwlPUFJPRklMRURfRVZFTlRTPQorCWZvciBmIGluIGBzZXEgMCAkKChOUl9DSE9TRU4gLSAxKSlgOyBkbworCQlnZXRfZXZlbnQgJGYKKwkJaWYgdGVzdCAiJEdPVEVWRU5UIiAhPSAiIjsgdGhlbgorCQkJRVZFTlQ9YGVjaG8gJEdPVEVWRU5UIHwgYXdrIC1GOiAne3ByaW50ICQxfSdgCisJCQlFVkVOVF9TVFI9YCRPUEhFTFAgJEVWRU5UYAorCQkJRVZFTlRfVkFMPWBlY2hvICRFVkVOVF9TVFIgfCBhd2sgJ3twcmludCAkMX0nYAorCQkJQ09VTlQ9YGVjaG8gJEdPVEVWRU5UIHwgYXdrIC1GOiAne3ByaW50ICQyfSdgCisJCQlVTklUX01BU0s9YGVjaG8gJEdPVEVWRU5UIHwgYXdrIC1GOiAne3ByaW50ICQzfSdgCisJCQlLRVJORUw9YGVjaG8gJEdPVEVWRU5UIHwgYXdrIC1GOiAne3ByaW50ICQ0fSdgCisJCQlVU0VSPWBlY2hvICRHT1RFVkVOVCB8IGF3ayAtRjogJ3twcmludCAkNX0nYAorCQkJQ1RSPWBlY2hvICRIV19DVFJTIHwgYXdrICJ7cHJpbnQgXFwkJCgoZiArIDEpKX0iYAorCQkJY2hlY2tfZXZlbnRfbWFwcGluZ19kYXRhCisKKwkJCWlmIHRlc3QgIiRFVkVOVCIgPSAiU1BVX0NZQ0xFUyI7IHRoZW4KKwkJCQlpZiB0ZXN0ICIkU0VQQVJBVEVfS0VSTkVMIiA9ICIxIjsgdGhlbgorCQkJCQlTRVBBUkFURV9LRVJORUw9MAorCQkJCQllY2hvICJJZ25vcmluZyAtLXNlcGFyYXRlPWtlcm5lbCBvcHRpb24gd2l0aCBTUFVfQ1lDTEVTIgorCQkJCWZpCisJCQkJaWYgdGVzdCAiJFNFUEFSQVRFX0xJQiIgPSAiMCI7IHRoZW4KKwkJCQkJU0VQQVJBVEVfTElCPTEKKwkJCQkJZWNobyAiRm9yY2luZyByZXF1aXJlZCBvcHRpb24gLS1zZXBhcmF0ZT1saWIgd2l0aCBTUFVfQ1lDTEVTIgorCQkJCWZpCisKKwkJCQkjIEl0IGlzIHBvc3NpYmxlIGZvciBhIHNpbmdsZSBhcHBsaWNhdGlvbiB0byBiZQorCQkJCSMgcnVubmluZyBvbiBhbGwgU1BVcyBzaW11bHRhbmVvdXNseS4gIFdpdGhvdXQKKwkJCQkjIFNFUEFSQVRFX0NQVSwgdGhlIHJlc3VsdGluZyBzYW1wbGUgZGF0YSB3b3VsZAorCQkJCSMgY29uc2lzdCBvZiBhIHNpbmdsZSBzYW1wbGUgZmlsZS4gIElmIGFsbCBTUFVzCisJCQkJIyB3ZXJlIHRydWx5IHJ1bm5pbmcgdGhlIHNhbWUgY29kZSwgdGhlIG1lcmdpbmcKKwkJCQkjIG9mIHNhbXBsZSBkYXRhIHdvdWxkIGJlIGZpbmUuICBIb3dldmVyLCBhbgorCQkJCSMgYXBwbGljYXRpb24gZmlsZSBtYXkgaGF2ZSBtdWx0aXBsZSBTUFUgaW1hZ2VzCisJCQkJIyBlbWJlZGRlZCB3aXRoaW4gaXQsIHJlc3VsdGluZyBpbiBkaWZmZXJlbnQKKwkJCQkjIGNvZGUgcnVubmluZyBvbiBkaWZmZXJlbnQgU1BVcy4gIFRoZXJlZm9yZSwKKwkJCQkjIHdlIGZvcmNlIFNFUEFSQVRFX0NQVSBpbiBvcmRlciB0byBwcm9wZXJseQorCQkJCSMgaGFuZGxlIHRoaXMgY2FzZS4KKwkJCQlpZiB0ZXN0ICIkU0VQQVJBVEVfQ1BVIiA9ICIwIjsgdGhlbgorCQkJCQlTRVBBUkFURV9DUFU9MQorCQkJCQllY2hvICJGb3JjaW5nIHJlcXVpcmVkIG9wdGlvbiAtLXNlcGFyYXRlPWNwdSB3aXRoIFNQVV9DWUNMRVMiCisKKwkJCQlmaQorCQkJZmkKKworCQkJaWYgWyAiJENUUiIgPSAiaWJzX2ZldGNoIiAtbyAiJENUUiIgPSAiaWJzX29wIiBdIDsgdGhlbgorCQkJCSMgSGFuZGxlIElCUyBldmVudHMgc2V0dXAKKwkJCQlkb19wYXJhbV9zZXR1cF9pYnMKKwkJCQljb250aW51ZQorCQkJZmkKKworCQkJaWYgdGVzdCAiJEVWRU5UIiA9ICJSVENfSU5URVJSVVBUUyI7IHRoZW4KKwkJCQlzZXRfcGFyYW0gcnRjX3ZhbHVlICRDT1VOVAorCQkJCSRTWVNDVEwgLXcgZGV2Lm9wcm9maWxlLnJ0Y192YWx1ZT0kQ09VTlQKKwkJCWVsc2UKKwkJCQlzZXRfY3RyX3BhcmFtICRDVFIgZW5hYmxlZCAxCisJCQkJc2V0X2N0cl9wYXJhbSAkQ1RSIGV2ZW50ICRFVkVOVF9WQUwKKwkJCQlsb29wX2NvdW50PTEKKwkJCQlmb3IgaSBpbiAke0VWRU5UX1NUUn07IGRvCisJCQkJCSNTa2lwIGZpcnN0IGFyZ3VtZW50IG9mIEVWRU5UX1NUUiAoZXZlbnQgdmFsKSBzaW5jZSB3ZSd2ZSBhbHJlYWR5CisJCQkJCSNwcm9jZXNzZWQgdGhhdCB2YWx1ZS4KKwkJCQkJaWYgdGVzdCAiJGxvb3BfY291bnQiIC1ndCAxOyB0aGVuCisJCQkJCQlLRVk9YGVjaG8gJGkgfCBhd2sgLUY6ICd7cHJpbnQgJDF9J2AKKwkJCQkJCVZBTD1gZWNobyAkaSB8IGF3ayAtRjogJ3twcmludCAkMn0nYAorCQkJCQkJc2V0X2N0cl9wYXJhbSAiIiAkS0VZICRWQUwKKwkJCQkJZmkKKwkJCQkJbG9vcF9jb3VudD0kKChsb29wX2NvdW50KzEpKQorCQkJCWRvbmUKKwkJCQlzZXRfY3RyX3BhcmFtICRDVFIgY291bnQgJENPVU5UCisJCQkJc2V0X2N0cl9wYXJhbSAkQ1RSIGtlcm5lbCAkS0VSTkVMCisJCQkJc2V0X2N0cl9wYXJhbSAkQ1RSIHVzZXIgJFVTRVIKKwkJCQlzZXRfY3RyX3BhcmFtICRDVFIgdW5pdF9tYXNrICRVTklUX01BU0sKKworCQkJCUVYVFJBPWAkT1BIRUxQIC0tZXh0cmEtbWFzayAkRVZFTlQ6JENPVU5UOiRVTklUX01BU0tfTkFNRURgCisJCQkJaWYgdGVzdCAiJEVYVFJBIiAtbmUgMCA7IHRoZW4KKwkJCQkJaWYgISB0ZXN0IC1mICRNT1VOVC8kQ1RSL2V4dHJhIDsgdGhlbgorCQkJCQkJZWNobyA+JjIgIldhcm5pbmc6ICRHT1RFVkVOVCBoYXMgZXh0cmEgbWFzaywgYnV0IGtlcm5lbCBkb2VzIG5vdCBzdXBwb3J0IGV4dHJhIGZpZWxkIgorCQkJCQkJZWNobyA+JjIgIlBsZWFzZSB1cGRhdGUgeW91ciBrZXJuZWwgb3IgdXNlIGEgZGlmZmVyZW50IGV2ZW50LiBXaWxsIG1pc2NvdW50LiIKKwkJCQkJZWxzZQorCQkJCQkJc2V0X2N0cl9wYXJhbSAkQ1RSIGV4dHJhICRFWFRSQQorCQkJCQlmaQorCQkJCWZpCisJCQlmaQorCQkJT1BST0ZJTEVEX0VWRU5UUz0ke09QUk9GSUxFRF9FVkVOVFN9JEVWRU5UOiRFVkVOVF9WQUw6CisJCQlPUFJPRklMRURfRVZFTlRTPSR7T1BST0ZJTEVEX0VWRU5UU30kQ1RSOiRDT1VOVDokVU5JVF9NQVNLOgorCQkJT1BST0ZJTEVEX0VWRU5UUz0ke09QUk9GSUxFRF9FVkVOVFN9JEtFUk5FTDokVVNFUiwKKwkJZmkKKwlkb25lCisKKwkjIEZvciBQUEM2NCBhcmNoaXRlY3R1cmVzIHdlIG5lZWQgdG8gc2V0IHRoZSBlbmFibGVfa2VybmVsIGFuZAorCSMgZW5hYmxlX3VzZXIgZmxhZ3MgZm9yIGVuYWJsaW5nL2Rpc2FibGluZyB1c2VyL2tlcm5lbCBkb21haW4KKwkjIHByb2ZpbGluZy4gQWxsIHBlci1jb3VudGVyIHVzZXIva2VybmVsIGZsYWdzIG11c3QgbWF0Y2guCisJIyBUaGlzIGNvbmRpdGlvbiBpcyBjaGVja2VkIHByZXZpb3VzbHkgYnkgY2hlY2tfZXZlbnRfbWFwcGluZ19kYXRhLgorCSMgVGhpcyBzdGF0ZW1lbnQgdXNlcyB0aGUgbGFzdCBldmVudCdzIHVzZXIva2VybmVsIGZsYWdzIHRvIHNldAorCSMgL2Rldi9vcHJvZmlsZS9lbmFibGVfa2VybmVsIGFuZCAvZGV2L29wcm9maWxlL2VuYWJsZV91c2VyLgorCWlzX25vbl9jZWxsX3BwYzY0X3ZhcmlhbnQgJENQVVRZUEUKKwlpZiB0ZXN0ICQ/IC1uZSAwIDsgdGhlbgorCQlzZXRfcGFyYW0gImVuYWJsZV9rZXJuZWwiICRLRVJORUwKKwkJc2V0X3BhcmFtICJlbmFibGVfdXNlciIgJFVTRVIKKwlmaQorCit9CisKKworZG9fc3RhcnRfZGFlbW9uKCkKK3sKKworCWlmIHRlc3QgLWYgIiRMT0NLX0ZJTEUiOyB0aGVuCisJCWtpbGwgLTAgYGNhdCAkTE9DS19GSUxFYCAyPi9kZXYvbnVsbAorCQlpZiB0ZXN0ICIkPyIgLWVxIDA7IHRoZW4KKwkJCXJldHVybjsKKwkJZWxzZQorCQkJZWNobyAiRGV0ZWN0ZWQgc3RhbGUgbG9jayBmaWxlLiBSZW1vdmluZy4iID4mMgorCQkJcm0gLWYgIiRMT0NLX0ZJTEUiCisJCWZpCisJZmkKKworCWRvX3NldHVwCisJY2hlY2tfdmFsaWRfYXJncworCWdldF9pbWFnZV9yYW5nZSAibGludXgiCisJZ2V0X2ltYWdlX3JhbmdlICJ4ZW4iCisJZG9fcGFyYW1fc2V0dXAKKworCU9QRF9BUkdTPSIgXAorCQktLXNlc3Npb24tZGlyPSRTRVNTSU9OX0RJUiBcCisJCS0tc2VwYXJhdGUtbGliPSRTRVBBUkFURV9MSUIgXAorCQktLXNlcGFyYXRlLWtlcm5lbD0kU0VQQVJBVEVfS0VSTkVMIFwKKwkJLS1zZXBhcmF0ZS10aHJlYWQ9JFNFUEFSQVRFX1RIUkVBRCBcCisJCS0tc2VwYXJhdGUtY3B1PSRTRVBBUkFURV9DUFUiCisKKwlpZiB0ZXN0ICIkSVNfVElNRVIiID0gMTsgdGhlbgorCQlPUERfQVJHUz0iJE9QRF9BUkdTIC0tZXZlbnRzPSIKKwllbHNlCisJCWlmICEgdGVzdCAteiAiJE9QUk9GSUxFRF9FVkVOVFMiOyB0aGVuCisJCQlPUERfQVJHUz0iJE9QRF9BUkdTIC0tZXZlbnRzPSRPUFJPRklMRURfRVZFTlRTIgorCQlmaQorCWZpCisKKwlpZiB0ZXN0ICIkVk1MSU5VWCIgPSAibm9uZSI7IHRoZW4KKwkJT1BEX0FSR1M9IiRPUERfQVJHUyAtLW5vLXZtbGludXgiCisJZWxzZQorCQlPUERfQVJHUz0iJE9QRF9BUkdTIC0tdm1saW51eD0kVk1MSU5VWCAtLWtlcm5lbC1yYW5nZT0kS0VSTkVMX1JBTkdFIgorCWZpCisKKwlpZiAhIHRlc3QgIiRYRU5JTUFHRSIgPSAibm9uZSI7IHRoZW4KKwkJT1BEX0FSR1M9IiRPUERfQVJHUyAtLXhlbi1pbWFnZT0kWEVOSU1BR0UgLS14ZW4tcmFuZ2U9JFhFTl9SQU5HRSIKKwlmaQorCisJaWYgISB0ZXN0IC16ICIkSU1BR0VfRklMVEVSIjsgdGhlbgorCQlPUERfQVJHUz0iJE9QRF9BUkdTIC0taW1hZ2U9JElNQUdFX0ZJTFRFUiIKKwlmaQorCisJaWYgdGVzdCAtbiAiJFZFUkJPU0UiOyB0aGVuCisJCU9QRF9BUkdTPSIkT1BEX0FSR1MgLS12ZXJib3NlPSRWRVJCT1NFIgorCWZpCisKKwloZWxwX3N0YXJ0X2RhZW1vbl93aXRoX2licworCisJdmVjaG8gImV4ZWN1dGluZyBvcHJvZmlsZWQgJE9QRF9BUkdTIgorCisJJE9QUk9GSUxFRCAkT1BEX0FSR1MKKworCUNPVU5UPTAKKwl3aGlsZSAhIHRlc3QgLWYgIiRTRVNTSU9OX0RJUi9sb2NrIgorCWRvCisJCXNsZWVwIDEKKwkJQ09VTlQ9YGV4cHIgJENPVU5UICsgMWAKKwkJaWYgdGVzdCAiJENPVU5UIiAtZXEgMTA7IHRoZW4KKwkJCWVjaG8gIkNvdWxkbid0IHN0YXJ0IG9wcm9maWxlZC4iID4mMgorCQkJZWNobyAiQ2hlY2sgdGhlIGxvZyBmaWxlIFwiJExPR19GSUxFXCIgYW5kIGtlcm5lbCBzeXNsb2ciID4mMgorCQkJZXhpdCAxCisJCWZpCisJZG9uZQorCisJZWNobyAiRGFlbW9uIHN0YXJ0ZWQuIgorfQorCitkb19zdGFydCgpCit7CisJcHJlcF9qaXRkdW1wOworCWlmIHRlc3QgIiRLRVJORUxfU1VQUE9SVCIgPSAieWVzIjsgdGhlbgorCQllY2hvIDEgPiRNT1VOVC9lbmFibGUKKwlmaQorCWtpbGwgLVVTUjEgYGNhdCAkTE9DS19GSUxFYCAyPi9kZXYvbnVsbAorCWVjaG8gIlByb2ZpbGVyIHJ1bm5pbmcuIgorfQorCisKKyMgcHJpbnQgc3RhdHVzCitkb19zdGF0dXMoKQoreworCU9QUk9GSUxFRF9QSUQ9YGNhdCAkU0VTU0lPTl9ESVIvbG9jayAyPi9kZXYvbnVsbGAKKwlpZiB0ZXN0IC1uICIkT1BST0ZJTEVEX1BJRCIgLWEgLWQgIi9wcm9jLyRPUFJPRklMRURfUElEIjsgdGhlbgorCQlpZiB0ZXN0ICIkS0VSTkVMX1NVUFBPUlQiID0geWVzIFwKKwkJICAgICYmIHRlc3QgMCAhPSAkKGNhdCAvZGV2L29wcm9maWxlL2VuYWJsZSk7IHRoZW4KKwkJCWVjaG8gIkRhZW1vbiBydW5uaW5nOiBwaWQgJE9QUk9GSUxFRF9QSUQiCisJCWVsc2UKKwkJCWVjaG8gIkRhZW1vbiBwYXVzZWQ6IHBpZCAkT1BST0ZJTEVEX1BJRCIKKwkJZmkKKwllbHNlCisJCWVjaG8gIkRhZW1vbiBub3QgcnVubmluZyIKKwlmaQorCisJaWYgdGVzdCAiJE5SX0NIT1NFTiIgIT0gIjAiOyB0aGVuCisJCWZvciBmIGluIGBzZXEgMCAkKChOUl9DSE9TRU4gLSAxKSlgOyBkbworCQkJZ2V0X2V2ZW50ICRmCisJCQllY2hvICJFdmVudCAkZjogJEdPVEVWRU5UIgorCQlkb25lCisJZmkKKworCVNFUEFSQVRFPSIiCisJaWYgdGVzdCAiJFNFUEFSQVRFX0xJQiIgPSAiMSI7IHRoZW4KKwkJU0VQQVJBVEU9ImxpYnJhcnkiOworCWZpCisJaWYgdGVzdCAiJFNFUEFSQVRFX0tFUk5FTCIgPSAiMSI7IHRoZW4KKwkJU0VQQVJBVEU9IiRTRVBBUkFURSBrZXJuZWwiOworCWZpCisJaWYgdGVzdCAiJFNFUEFSQVRFX1RIUkVBRCIgPSAiMSI7IHRoZW4KKwkJU0VQQVJBVEU9IiRTRVBBUkFURSB0aHJlYWQiOworCWZpCisJaWYgdGVzdCAiJFNFUEFSQVRFX0NQVSIgPSAiMSI7IHRoZW4KKwkJU0VQQVJBVEU9IiRTRVBBUkFURSBjcHUiOworCWZpCisKKwlpZiB0ZXN0IC16ICIkU0VQQVJBVEUiOyB0aGVuCisJCVNFUEFSQVRFPW5vbmUKKwlmaQorCisJZWNobyAiU2VwYXJhdGUgb3B0aW9uczogJFNFUEFSQVRFIgorCWVjaG8gInZtbGludXggZmlsZTogJFZNTElOVVgiCisKKwlpZiB0ZXN0IC16ICIkSU1BR0VfRklMVEVSIjsgdGhlbgorCQllY2hvICJJbWFnZSBmaWx0ZXI6IG5vbmUiCisJZWxzZQorCQllY2hvICJJbWFnZSBmaWx0ZXI6ICRJTUFHRV9GSUxURVIiCisJZmkKKworCWVjaG8gIkNhbGwtZ3JhcGggZGVwdGg6ICRDQUxMR1JBUEgiCisJaWYgdGVzdCAiJEJVRl9TSVpFIiAhPSAiMCI7IHRoZW4KKwkJZWNobyAiQnVmZmVyIHNpemU6ICRCVUZfU0laRSIKKwlmaQorCWlmIHRlc3QgIiRLRVJORUxfU1VQUE9SVCIgIT0gInllcyI7IHRoZW4KKwkJaWYgdGVzdCAiJE5PVEVfU0laRSIgIT0gIjAiOyB0aGVuCisJCQllY2hvICJOb3RlIGJ1ZmZlciBzaXplOiAkTk9URV9TSVpFIgorCQlmaQorCWVsc2UKKwkJaWYgdGVzdCAiJEJVRl9XQVRFUlNIRUQiICE9ICIwIjsgdGhlbgorCQkJZWNobyAiQ1BVIGJ1ZmZlciB3YXRlcnNoZWQ6ICRCVUZfV0FURVJTSEVEIgorCQlmaQorCQlpZiB0ZXN0ICIkQ1BVX0JVRl9TSVpFIiAhPSAiMCI7IHRoZW4KKwkJCWVjaG8gIkNQVSBidWZmZXIgc2l6ZTogJENQVV9CVUZfU0laRSIKKwkJZmkKKwlmaQorCisJZXhpdCAwCit9CisKKworIyBkb19kdW1wX2RhdGEKKyMgcmV0dXJucyAwIGlmIHN1Y2Nlc3NmdWwKKyMgcmV0dXJucyAxIGlmIHRoZSBkYWVtb24gaXMgdW5hYmxlIHRvIGR1bXAgZGF0YQorIyBleGl0IDEgaWYgd2UgbmVlZCB0byBiZSByb290IHRvIGR1bXAKK2RvX2R1bXBfZGF0YSgpCit7CisJIyBtYWtlIHN1cmUgdGhhdCB0aGUgZGFlbW9uIGlzIG5vdCBkZWFkIGFuZCBnb25lCisJaWYgdGVzdCAtZSAiJFNFU1NJT05fRElSL2xvY2siOyB0aGVuCisJCU9QUk9GSUxFRF9QSUQ9YGNhdCAkU0VTU0lPTl9ESVIvbG9ja2AKKwkJaWYgdGVzdCAhIC1kICIvcHJvYy8kT1BST0ZJTEVEX1BJRCI7IHRoZW4KKwkJCWVjaG8gImR1bXAgZmFpbDogZGFlbW9uIGRpZWQgZHVyaW5nIGxhc3QgcnVuID8iID4mMgorCQkJcmV0dXJuIDE7CisJCWZpCisJZWxzZQorCQlyZXR1cm4gMTsKKwlmaQorCisJaWYgdGVzdCAiJEtFUk5FTF9TVVBQT1JUIiA9ICJ5ZXMiOyB0aGVuCisJCWlmICEgdGVzdCAtdyAkTU9VTlQvZHVtcDsgdGhlbgorCQkJaWYgdGVzdCBgaWQgLXVgICE9ICIwIjsgdGhlbgorCQkJCWVjaG8gIllvdSBtdXN0IGJlIHJvb3QgdG8gZHVtcCB3aXRoIHRoaXMga2VybmVsIHZlcnNpb24iCisJCQkJZXhpdCAxCisJCQlmaQorCQlmaQorCQkjIHRyaWdnZXIgb3Byb2ZpbGVkIHRvIGV4ZWN1dGUgb3BqaXRjb252CisJCWlmIHRlc3QgLXAgIiRTRVNTSU9OX0RJUi9vcGRfcGlwZSI7IHRoZW4KKwkJCWVjaG8gZG9faml0Y29udiA+PiAkU0VTU0lPTl9ESVIvb3BkX3BpcGUKKwkJZmkKKwkJcm0gLWYgIiRTRVNTSU9OX0RJUi9jb21wbGV0ZV9kdW1wIgorCQllY2hvIDEgPiAkTU9VTlQvZHVtcAorCQkjIGxvb3AgdW50aWwgdGhlIGNvbXBsZXRlX2R1bXAgZmlsZSBpcyBjcmVhdGVkIHRvCisJCSMgc2lnbmFsIHRoYXQgdGhlIGR1bXAgaGFzIGJlZW4gY29tcGxldGVkCisJCXdoaWxlIFsgXCggISAtZSAiJFNFU1NJT05fRElSL2NvbXBsZXRlX2R1bXAiIFwpIF0KKwkJZG8KKwkJCWlmIHRlc3QgISAtZCAiL3Byb2MvJE9QUk9GSUxFRF9QSUQiOyB0aGVuCisJCQkJZWNobyAiZHVtcCBmYWlsOiBlaXRoZXIgZGFlbW9uIGRpZWQgZHVyaW5nIGxhc3QgcnVuIG9yIGRpZXMgZHVyaW5nIGR1bXAiID4mMgorCQkJCXJldHVybiAxCisJCQlmaQorCQkJc2xlZXAgMTsKKwkJZG9uZQorCWVsc2UKKwkJZWNobyAxID4gJE1PVU5UL2R1bXAKKwkJIyBIQUNLICEKKwkJc2xlZXAgMgorCWZpCisJY3AgLXIgL2Rldi9vcHJvZmlsZS9zdGF0cyAiJFNBTVBMRVNfRElSL2N1cnJlbnQiCisKKwlyZXR1cm4gMDsKK30KKworCisjIGRvX2R1bXAKKyMgcmV0dXJucyAwIGlmIHN1Y2Nlc3NmdWwKKyMgZXhpdHMgaWYgdW5zdWNjZXNzZnVsCitkb19kdW1wKCkKK3sKKwlkb19kdW1wX2RhdGEKKwlpZiB0ZXN0ICQ/IC1uZSAwIC1hICIkT05MWV9EVU1QIiA9ICJ5ZXMiOyB0aGVuCisJCWVjaG8gIlVuYWJsZSB0byBjb21wbGV0ZSBkdW1wIG9mIG9wcm9maWxlIGRhdGE6IGlzIHRoZSBvcHJvZmlsZSBkYWVtb24gcnVubmluZz8iID4mIDIKKwkJZXhpdCAxOworCWZpCisJcmV0dXJuIDA7Cit9CisKKyMgdGVsbCBkYWVtb24gdG8gcmUtb3BlbiB0aGUgc2FtcGxlIGZpbGVzCitodXBfZGFlbW9uKCkKK3sKKwlpZiB0ZXN0IC1mICIkTE9DS19GSUxFIjsgdGhlbgorCQllY2hvIC1uICJTaWduYWxsaW5nIGRhZW1vbi4uLiAiCisJCWtpbGwgLUhVUCBgY2F0ICRMT0NLX0ZJTEVgCisJCWVjaG8gImRvbmUiCisJZmkKK30KKworCisjIG1vdmUgYWxsIHRoZSBzYW1wbGUgZmlsZXMgdG8gYSBzYW1wbGUgZGlyZWN0b3J5Citkb19zYXZlX3Nlc3Npb24oKQoreworCVNBVkVfRElSPSIke1NBTVBMRVNfRElSfS8ke1NBVkVfTkFNRX0iCisKKwlpZiB0ZXN0IC1lICIkU0FWRV9ESVIiOyB0aGVuCisJCWVjaG8gInNlc3Npb24gJFNBVkVfRElSIGFscmVhZHkgZXhpc3RzIiA+JjIKKwkJZXhpdCAxCisJZmkKKworCWlmICEgdGVzdCAtZSAkQ1VSUkVOVF9TQU1QTEVTX0RJUjsgdGhlbgorCQllY2hvICIkQ1VSUkVOVF9TQU1QTEVTX0RJUiBkb2Vzbid0IGV4aXN0OiBub3RoaW5nIHRvIHNhdmUiID4mMgorCQlleGl0IDAKKwlmaQorCisJIyBGSVhNRTogSSBkb24ndCB0aGluayBpdCdzIHdvcnRoIGNoZWNraW5nIGZvciBlbXB0eSBjdXJyZW50IGRpcmVjdG9yeQorCisJbXYgJENVUlJFTlRfU0FNUExFU19ESVIgJFNBVkVfRElSCisJaWYgdGVzdCAiJD8iICE9ICIwIjsgdGhlbgorCQllY2hvICJDb3VsZG4ndCBtb3ZlICRDVVJSRU5UX1NBTVBMRVNfRElSIHRvICRTQVZFX0RJUiIgPiYyCisJCWV4aXQgMQorCWZpCisKKwlodXBfZGFlbW9uCit9CisKKworIyByZW1vdmUgYWxsIHRoZSBzYW1wbGUgZmlsZXMKK2RvX3Jlc2V0KCkKK3sKKwlpZiB0ZXN0IC16ICIkU0FNUExFU19ESVIiOyB0aGVuCisJCWVjaG8gIm9wY29udHJvbDpkb19yZXNldCgpIFNBTVBMRVNfRElSIGlzIGVtcHR5ISIKKwkJZXhpdCAxOworCWZpCisKKwkjIGRhZW1vbiB1c2Uge2tlcm59IGFuZCB7cm9vdH0gc3ViZGlyLCBpdCdzIG5vdCBhIHR5cG8gdG8gbm90IHVzZSAke30KKwltb3ZlX2FuZF9yZW1vdmUgJFNBTVBMRVNfRElSL2N1cnJlbnQve2tlcm59CisJbW92ZV9hbmRfcmVtb3ZlICRTQU1QTEVTX0RJUi9jdXJyZW50L3tyb290fQorCW1vdmVfYW5kX3JlbW92ZSAkU0FNUExFU19ESVIvY3VycmVudC9zdGF0cworCisJIyBjbGVhciB0ZW1wIGRpcmVjdG9yeSBmb3Igaml0dGVkIGNvZGUKKwlwcmVwX2ppdGR1bXA7CisKKwlodXBfZGFlbW9uCit9CisKKworZG9fZGVpbml0KCkKK3sKKwkjIHVubW91bnQgL2Rldi9vcHJvZmlsZSBpZiBpdCBpcyBtb3VudGVkCisJT1BST0ZfRlM9YGdyZXAgL2Rldi9vcHJvZmlsZSAvZXRjL210YWJgCisJaWYgdGVzdCAtbiAiJE9QUk9GX0ZTIjsgdGhlbgorCQl1bW91bnQgL2Rldi9vcHJvZmlsZQorCWZpCisJIyB1bmxvYWQgdGhlIG9wcm9maWxlIG1vZHVsZSBpZiBpdCBpcyBhcm91bmQKKwlPUFJPRl9NT0Q9YGxzbW9kIHwgZ3JlcCBvcHJvZmlsZWAKKwlpZiB0ZXN0IC1uICIkT1BST0ZfTU9EIjsgdGhlbgorCQllY2hvICJVbmxvYWRpbmcgb3Byb2ZpbGUgbW9kdWxlIiA+JiAyCisJCXJtbW9kIG9wcm9maWxlCisJZmkKK30KKworCisjIFRoZSBmdW5jdGlvbiB0aGF0IGNhbGxzIHRoZSBhcHByb3ByaWF0ZSBvcGVyYXRpb25zCitkb19vcGVyYXRpb25zKCkKK3sKKwkjIElOSVQgYWx3YXlzIGRvbmUgYnkgbG9hZF9tb2R1bGUgdG8gZ2V0IGFjY2VzcyB0byBjcHV0eXBlCisJIyB0aHVzIElOSVQgaXMgYSBub29wCisKKwlpZiB0ZXN0ICIkU1RBVFVTIiA9ICJ5ZXMiOyB0aGVuCisJCWRvX3N0YXR1cworCWZpCisKKwlpZiB0ZXN0ICIkU0VUVVAiID0gInllcyI7IHRoZW4KKwkJY2hlY2tfdmFsaWRfYXJncworCQlkb19zYXZlX3NldHVwCisJZmkKKworCWlmIHRlc3QgIiRTVEFSVF9EQUVNT04iID0gInllcyI7IHRoZW4KKwkJZG9fc3RhcnRfZGFlbW9uCisJZmkKKworCWlmIHRlc3QgIiRTVEFSVCIgPSAieWVzIjsgdGhlbgorCQlkb19zdGFydF9kYWVtb24KKwkJZG9fc3RhcnQKKwlmaQorCisJaWYgdGVzdCAiJERVTVAiID0gInllcyI7IHRoZW4KKwkJZG9fZHVtcAorCWZpCisKKwlpZiB0ZXN0ICIkU0FWRV9TRVNTSU9OIiA9ICJ5ZXMiOyB0aGVuCisJCWRvX3NhdmVfc2Vzc2lvbgorCWZpCisKKwlpZiB0ZXN0ICIkU1RPUCIgPSAieWVzIjsgdGhlbgorCQlkb19zdG9wCisJZmkKKworCWlmIHRlc3QgIiRLSUxMX0RBRU1PTiIgPSAieWVzIjsgdGhlbgorCQlkb19raWxsX2RhZW1vbgorCWZpCisKKwlpZiB0ZXN0ICIkUkVTRVQiID0gInllcyI7IHRoZW4KKwkJZG9fcmVzZXQKKwlmaQorCisJaWYgdGVzdCAiJERFSU5JVCIgPSAieWVzIjsgdGhlbgorCQlkb19kZWluaXQKKwlmaQorfQorCisjIGVhcmx5IGNoZWNrIGZvciAtLXZlcnNpb24sIC0taGVscCBhbmQgLS1zZXNzaW9uLWRpcgorY2hlY2tfb3B0aW9uc19lYXJseSgpCit7CisKKwlPUEhFTFA9IiRPUERJUi9vcGhlbHAiCisKKwlmb3IgaSBpbiAkQDsgZG8KKwkJIyBhZGRlZCB0byBoYW5kbGUgYXJnPXZhbCBwYXJhbWV0ZXJzCisJCWFyZz1gcHJpbnRmICVzICRpIHwgYXdrIC1GPSAne3ByaW50ICQxfSdgCisJCXZhbD1gcHJpbnRmICVzICRpIHwgYXdrIC1GPSAne3ByaW50ICQyfSdgCisJCWNhc2UgIiRhcmciIGluCisJCQktXD98LS1oZWxwKQorCQkJCWRvX2hlbHAKKwkJCQlleGl0IDAKKwkJCQk7OworCisJCQktdnwtLXZlcnNpb24pCisJCQkJZWNobyAtbiAiYGJhc2VuYW1lICQwYDogIgorCQkJCSRPUEhFTFAgLS12ZXJzaW9uIHwgY3V0IC1kJyAnIC1mMi0KKwkJCQlleGl0IDAKKwkJCQk7OworCQkJLS1zZXNzaW9uLWRpcikKKwkJCQllcnJvcl9pZl9pbnZhbGlkX2FyZyAiJGFyZyIgIiR2YWwiCisJCQkJU0VTU0lPTl9ESVI9IiR2YWwiCisJCQkJRE9fU0VUVVA9eWVzCisJCQkJIyBkbyBub3QgZXhpdCBlYXJseQorCQkJCTs7CisKKwkJZXNhYworCWRvbmUKK30KKworCisjIGRldGVybWluZSB3aGljaCBtb2R1bGUgaXMgbG9hZGVkCitjaGVja192ZXJzaW9uKCkKK3sKKwlPUFJPRklMRV9BVkFJTEFCTEU9bm8KKwlncmVwIG9wcm9maWxlZnMgL2V0Yy9tdGFiID4vZGV2L251bGwKKwlpZiB0ZXN0ICIkPyIgLWVxIDA7IHRoZW4KKwkJIyBuZWVkIHRvIGhhdmUgb3Byb2ZpbGVmcyBtb3VudGVkIGZvciB0aGlzIHRvIHdvcmsgb24gMi42CisJCUtFUk5FTF9TVVBQT1JUPXllcworCQlPUFJPRklMRV9BVkFJTEFCTEU9eWVzCisJCXJldHVybgorCWZpCisJIyBuZWVkIHRvIGhhdmUgL3Byb2Mvb3Byb2YgYXZhaWxhYmxlIGZvciB0aGlzIHRvIHdvcmsgb24gMi40CisJZ3JlcCBvcHJvZiAvcHJvYy9kZXZpY2VzID4vZGV2L251bGwKKwlpZiB0ZXN0ICIkPyIgLWVxIDA7IHRoZW4KKwkJS0VSTkVMX1NVUFBPUlQ9bm8KKwkJT1BST0ZJTEVfQVZBSUxBQkxFPXllcworCQlyZXR1cm4KKwlmaQorfQorCisjIGVycm9yIG91dCBpZiB0aGUgbW9kdWxlIGlzIG5vdCBsb2FkZWQKK2NoZWNrX29wcm9maWxlX2F2YWlsYWJsZSgpCit7CisJaWYgdGVzdCAiJE9QUk9GSUxFX0FWQUlMQUJMRSIgIT0gInllcyI7IHRoZW4KKwkJZWNobyAiS2VybmVsIHN1cHBvcnQgbm90IGF2YWlsYWJsZSwgbWlzc2luZyBvcGNvbnRyb2wgLS1pbml0IGFzIHJvb3QgPyIKKwkJZXhpdCAxCisJZmkKK30KKworCit0cnlfcmVzZXRfc2FtcGxlX2ZpbGUoKQoreworCSMgc3BlY2lhbCBjYXNlIHRvIGF2b2lkIGxvYWRpbmcgdGhlIG1vZHVsZSwgaXQgd29ya3Mgb25seSBpZiB0aGUKKwkjIGRhZW1vbiBpcyBub3QgcnVubmluZyBiZWNhdXNlIC0tcmVzZXQgaW1wbHkgLS1kdW1wLiBSYXRoZXIgdG8gY2hlY2sKKwkjIGlmIHRoZSBkYWVtb24gaXMgcnVubmluZyB3ZSBjaGVjayBpZiB0aGUgbW9kdWxlIGlzIGxvYWRlZCBiZWNhdXNlCisJIyB3ZSBhcmUgb25seSB0cnlpbmcgdG8gYXZvaWQgaXRzIGxvYWQsIGlmIHRoZSBjaGVjayBmYWlscyB3ZSBmYWxsYmFjaworCSMgdG8gdGhlIG5vcm1hbCBkdW1wIC8gcmVzZXQgc2VxdWVuY2UuCisJaWYgdGVzdCAteiAiJDIiIC1hICIkMSIgPSAiLS1yZXNldCI7IHRoZW4KKwkJY2hlY2tfdmVyc2lvbgorCQlpZiB0ZXN0ICIkT1BST0ZJTEVfQVZBSUxBQkxFIiAhPSAieWVzIjsgdGhlbgorCQkJZG9faW5pdF9kYWVtb25fdmFycworCQkJZG9fcmVzZXQKKwkJCWV4aXQgMAorCQlmaQorCWZpCit9CisKKyMKKyMgQmVnaW4gSUJTIFNwZWNpZmljIEZ1bmN0aW9ucworIwordmVyaWZ5X2licygpCit7CisJSUJTX0VWRU5UPWBlY2hvICQxfCBhd2sgLUY6ICd7cHJpbnQgJDF9J2AKKwlJQlNfQ09VTlQ9YGVjaG8gJDEgfCBhd2sgLUY6ICd7cHJpbnQgJDJ9J2AKKwlJQlNfTUFTSz1gZWNobyAkMSB8IGF3ayAtRjogJ3twcmludCAkM30nYAorCQorCUlCU19UWVBFPWAkT1BIRUxQIC0tY2hlY2stZXZlbnRzICQxYAorCWlmIHRlc3QgIiQ/IiAhPSAiMCIgOyB0aGVuCisJCWV4aXQgMQorCWZpCisJCQkKKwlpZiBbICIkSUJTX1RZUEUiID0gImlic19mZXRjaCAiIF0gOyB0aGVuCisJCSMgQ2hlY2sgSUJTX0NPVU5UIGNvbnNpc3RlbmN5CisJCWlmIHRlc3QgIiRJQlNfRkVUQ0hfQ09VTlQiID0gIjAiIDsgdGhlbiAKKwkJCUlCU19GRVRDSF9DT1VOVD0kSUJTX0NPVU5UCisJCQlJQlNfRkVUQ0hfTUFTSz0kSUJTX01BU0sKKwkJZWxpZiB0ZXN0ICIkSUJTX0ZFVENIX0NPVU5UIiAhPSAiJElCU19DT1VOVCIgOyB0aGVuCisJCQllY2hvICJFUlJPUjogQWxsIElCUyBGZXRjaCBtdXN0IGhhdmUgdGhlIHNhbWUgY291bnQuIgorCQkJZXhpdCAxCisJCWZpCisKKwkJIyBDaGVjayBJQlNfTUFTSyBjb25zaXN0ZW5jeQorCQlpZiB0ZXN0ICIkSUJTX0ZFVENIX01BU0siICE9ICIkSUJTX01BU0siIDsgdGhlbgorCQkJZWNobyAiRVJST1I6IEFsbCBJQlMgRmV0Y2ggbXVzdCBoYXZlIHRoZSBzYW1lIHVuaXRtYXNrLiIKKwkJCWV4aXQgMQorCQlmaQorCisJCSMgQ2hlY2sgSUJTX0ZFVENIX0NPVU5UIHdpdGhpbiByYW5nZQorCQlpZiB0ZXN0ICIkSUJTX0ZFVENIX0NPVU5UIiAtZ3QgMTA0ODU3NSA7IHRoZW4gCisJCQllY2hvICJFUlJPUjogSUJTIEZldGNoIGNvdW50IGlzIHRvbyBsYXJnZS4iCisJCQllY2hvICIgICAgICAgVGhlIG1heGltdW0gSUJTLWZldGNoIGNvdW50IGlzIDEwNDg1NzUuIgorCQkJZXhpdCAxCisJCWZpCisKKwllbGlmIFsgIiRJQlNfVFlQRSIgPSAiaWJzX29wICIgXSA7IHRoZW4KKwkJIyBDaGVjayBJQlNfQ09VTlQgY29uc2lzdGVuY3kKKwkJaWYgdGVzdCAiJElCU19PUF9DT1VOVCIgPSAiMCIgOyB0aGVuIAorCQkJSUJTX09QX0NPVU5UPSRJQlNfQ09VTlQKKwkJCUlCU19PUF9NQVNLPSRJQlNfTUFTSworCQllbGlmIHRlc3QgIiRJQlNfT1BfQ09VTlQiICE9ICIkSUJTX0NPVU5UIiA7IHRoZW4KKwkJCWVjaG8gIkFsbCBJQlMgT3AgbXVzdCBoYXZlIHRoZSBzYW1lIGNvdW50LiIKKwkJCWV4aXQgMQorCQlmaQorCisJCSMgQ2hlY2sgSUJTX01BU0sgY29uc2lzdGVuY3kKKwkJaWYgdGVzdCAiJElCU19PUF9NQVNLIiAhPSAiJElCU19NQVNLIiA7IHRoZW4KKwkJCWVjaG8gIkFsbCBJQlMgT3AgbXVzdCBoYXZlIHRoZSBzYW1lIHVuaXRtYXNrLiIKKwkJCWV4aXQgMQorCQlmaQorCQkKKwkJIyBDaGVjayBJQlNfT1BfQ09VTlQgd2l0aGluIHJhbmdlCisJCWNhc2UgIiRDUFVUWVBFIiBpbgorCQkJeDg2LTY0L2ZhbWlseTEwKQorCQkJCWlmIHRlc3QgIiRJQlNfT1BfQ09VTlQiIC1ndCAxMDQ4NTc1IDsgdGhlbiAKKwkJCQkJZWNobyAiRVJST1I6IElCUyBPcCBjb3VudCBpcyB0b28gbGFyZ2UuIgorCQkJCQllY2hvICIgICAgICAgVGhlIG1heGltdW0gSUJTLWZldGNoIGNvdW50IGlzIDEwNDg1NzUuIgorCQkJCQlleGl0IDEKKwkJCQlmaQorCQkJCTs7CisKKwkJCXg4Ni02NC9mYW1pbHkxMmh8XAorCQkJeDg2LTY0L2ZhbWlseTE0aHxcCisJCQl4ODYtNjQvZmFtaWx5MTVoKQorCQkJCWlmIHRlc3QgIiRJQlNfT1BfQ09VTlQiIC1ndCAxMzQyMTc3MjcgOyB0aGVuIAorCQkJCQllY2hvICJFUlJPUjogSUJTIE9wIGNvdW50IGlzIHRvbyBsYXJnZS4iCisJCQkJCWVjaG8gIiAgICAgICBUaGUgbWF4aW11bSBJQlMtT3AgY291bnQgaXMgMTM0MjE3NzI3LiIKKwkJCQkJZXhpdCAxCisJCQkJZmkKKwkJCQk7OworCQkJKikKKwkJZXNhYworCWZpCisKKwlyZXR1cm4KK30KKworCitkb19wYXJhbV9zZXR1cF9pYnMoKQoreworCWlmIHRlc3QgIiRLRVJORUxfU1VQUE9SVCIgIT0gInllcyIgOyB0aGVuCisJCWVjaG8gIkVSUk9SOiBObyBrZXJuZWwgc3VwcG9ydCBmb3IgSUJTIHByb2ZpbGluZy4iCisJCWV4aXQgMQkKKwlmaQorCisJIyBDaGVjayBpZiBkcml2ZXIgaGFzIElCUyBzdXBwb3J0CisJaWYgdGVzdCAhIC1kICRNT1VOVC9pYnNfZmV0Y2ggLW8gISAtZCAkTU9VTlQvaWJzX29wIDsgdGhlbgorCQllY2hvICJFUlJPUjogTm8ga2VybmVsIHN1cHBvcnQgZm9yIElCUyBwcm9maWxpbmcuIgorCQlleGl0IDEJCisJZmkJCisKKwlpZiB0ZXN0IGBlY2hvICRFVkVOVCB8ICBcCisJYXdrICd7IHByaW50IHN1YnN0cigkMCwgMSwgMTApfSdgID0gIklCU19GRVRDSF8iIDsgdGhlbgorCQlpZiB0ZXN0ICIkQ09VTlQiICE9ICIwIjsgdGhlbgorCQkJaWYgWyAiJElCU19GRVRDSF9FVkVOVFMiID0gIiIgXSA7IHRoZW4KKwkJCQlJQlNfRkVUQ0hfRVZFTlRTPSIkRVZFTlQiCisJCQllbHNlCisJCQkJSUJTX0ZFVENIX0VWRU5UUz0iJElCU19GRVRDSF9FVkVOVFMsJEVWRU5UIgorCQkJZmkKKwkJCUlCU19GRVRDSF9DT1VOVD0kQ09VTlQKKwkJCXNldF9wYXJhbSBpYnNfZmV0Y2gvbWF4X2NvdW50ICRDT1VOVAorCQkJc2V0X3BhcmFtIGlic19mZXRjaC9yYW5kX2VuYWJsZSAxCisJCQlzZXRfcGFyYW0gaWJzX2ZldGNoL2VuYWJsZSAxCisJCWVsc2UKKwkJCXNldF9wYXJhbSBpYnNfZmV0Y2gvZW5hYmxlIDAKKwkJZmkKKworCWVsaWYgdGVzdCBgZWNobyAkRVZFTlQgfCAgXAorCWF3ayAneyBwcmludCBzdWJzdHIoJDAsIDEsIDcpfSdgID0gIklCU19PUF8iIDsgdGhlbgorCQlpZiB0ZXN0ICIkQ09VTlQiICE9ICIwIjsgdGhlbgorCQkJaWYgWyAiJElCU19PUF9FVkVOVFMiID0gIiIgXSA7IHRoZW4KKwkJCQlJQlNfT1BfRVZFTlRTPSIkRVZFTlQiCisJCQllbHNlCisJCQkJSUJTX09QX0VWRU5UUz0iJElCU19PUF9FVkVOVFMsJEVWRU5UIgorCQkJZmkKKwkJCUlCU19PUF9DT1VOVD0kQ09VTlQKKwkJCUlCU19PUF9VTklUTUFTSz0kVU5JVF9NQVNLCisKKwkJCXNldF9wYXJhbSBpYnNfb3AvbWF4X2NvdW50ICRDT1VOVAorCQkJc2V0X3BhcmFtIGlic19vcC9lbmFibGUgMQorCisJCQkjIE5PVEU6IFdlIGRlZmF1bHQgdG8gdXNlIGRpc3BhdGNoZWRfb3AgaWYgYXZhaWxhYmxlLiAKKwkJCSMgICAgICAgU29tZSBvZiB0aGUgb2xkZXIgZmFtaWx5MTAgc3lzdGVtIGRvZXMgbm90IGhhdmUKKwkJCSMgICAgICAgZGlzcGF0Y2hlZF9vcHMgZmVhdHVyZS4KKwkJCSMgICAgICAgRGlzcGF0Y2hlZCBvcCBpcyBlbmFibGVkIGJ5IGJpdCAwIG9mIHRoZSB1bml0bWFzaworCQkJSUJTX09QX0RJU1BBVENIRURfT1A9JCgoIElCU19PUF9VTklUTUFTSyAmIDB4MSApKQorCQkJaWYgdGVzdCAtZiAkTU9VTlQvaWJzX29wL2Rpc3BhdGNoZWRfb3BzIDsgdGhlbgorCQkJCXNldF9wYXJhbSBpYnNfb3AvZGlzcGF0Y2hlZF9vcHMgJElCU19PUF9ESVNQQVRDSEVEX09QCisJCQllbHNlCisJCQkJaWYgdGVzdCAkSUJTX09QX0RJU1BBVENIRURfT1AgLWVxIDEgOyB0aGVuCisJCQkJCWVjaG8gIkVSUk9SOiBJQlMgT3AgZGlzcGF0Y2hlZCBvcHMgaXMgbm90IHN1cHBvcnRlZC4iCisJCQkJCWV4aXQgMQorCQkJCWZpCisJCQlmaQorCQkKKwkJCSMgTk9URTogQlRBIGlzIGVuYWJsZWQgYnkgYml0IDIgb2YgdGhlIHVuaXRtYXNrCisJCQlJQlNfT1BfQlRBPSQoKCBJQlNfT1BfVU5JVE1BU0sgJiAweDQgKSkKKwkJCWlmIHRlc3QgLWYgJE1PVU5UL2lic19vcC9icmFuY2hfdGFyZ2V0OyB0aGVuCisJCQkJaWYgWyAiJElCU19PUF9CVEEiID0gIjQiIF0gOyB0aGVuCisJCQkJCXNldF9wYXJhbSBpYnNfb3AvYnJhbmNoX3RhcmdldCAxCisJCQkJZWxzZQorCQkJCQlzZXRfcGFyYW0gaWJzX29wL2JyYW5jaF90YXJnZXQgMAorCQkJCWZpCisKKwkJCQkjIFRPRE86IENoZWNrIGlmIHdyaXRlIHN1Y2Nlc3NmdWwKKwkJCWVsc2UKKwkJCQlpZiB0ZXN0ICRJQlNfT1BfQlRBIC1lcSAxIDsgdGhlbgorCQkJCQllY2hvICJFUlJPUjogSUJTIE9wIEJyYW5jaCBUYXJnZXQgQWRkcmVzcyBpcyBub3Qgc3VwcG9ydGVkLiIKKwkJCQkJZXhpdCAxCisJCQkJZmkKKwkJCWZpCisJCWVsc2UKKwkJCXNldF9wYXJhbSBpYnNfb3AvZW5hYmxlIDAKKwkJZmkKKwlmaQorfQorCisKK2hlbHBfc3RhcnRfZGFlbW9uX3dpdGhfaWJzKCkKK3sKKwlpZiB0ZXN0ICIkSUJTX0ZFVENIX0NPVU5UIiAhPSAiMCIgLW8gIiRJQlNfT1BfQ09VTlQiICE9ICIwIiA7IHRoZW4KKwkJT1BEX0FSR1M9IiR7T1BEX0FSR1N9IC0tZXh0LWZlYXR1cmU9aWJzOiIKKwkJaWYgdGVzdCAiJElCU19GRVRDSF9DT1VOVCIgIT0gIjAiOyB0aGVuCisJCQlPUERfQVJHUz0iJHtPUERfQVJHU31mZXRjaDokSUJTX0ZFVENIX0VWRU5UUzokSUJTX0ZFVENIX0NPVU5UOiRJQlNfRkVUQ0hfVU5JVE1BU0t8IgorCQlmaQorCisJCWlmIHRlc3QgIiRJQlNfT1BfQ09VTlQiICE9ICIwIjsgdGhlbgorCQkJT1BEX0FSR1M9IiR7T1BEX0FSR1N9b3A6JElCU19PUF9FVkVOVFM6JElCU19PUF9DT1VOVDokSUJTX09QX1VOSVRNQVNLIgorCQlmaQorCWZpCit9CisKKyMKKyMgRW5kIElCUyBTcGVjaWZpYyBGdW5jdGlvbnMKKyMKKworIyBtYWluCisKKyMgZGV0ZXJtaW5lIHRoZSBsb2NhdGlvbiBvZiBvcGNvbnRyb2wgYW5kIHJlbGF0ZWQgcHJvZ3JhbXMKK2lmIHRlc3QgLXogIiRPUERJUiI7IHRoZW4KKwlCSU5ESVI9Ii91c3IvYmluIgorCU9QQ09OVFJPTD1gJEJJTkRJUi93aGljaCAkMGAKKwlPUERJUj1gJEJJTkRJUi9kaXJuYW1lICRPUENPTlRST0xgCitmaQorCitQQVRIPSRPUERJUjovdXNyL2xvY2FsL2JpbjovdXNyL2xvY2FsL3NiaW46L2Jpbjovc2JpbjovdXNyL2JpbjovdXNyL3NiaW4KKworY2hlY2tfb3B0aW9uc19lYXJseSAkQAorCitpZiB0ZXN0IC16ICIkMSI7IHRoZW4KKwlkb19oZWxwCisJZXhpdCAwCitmaQorCitpZiB0ZXN0IGBpZCAtdWAgPSAiMCI7IHRoZW4KKwl0cnlfcmVzZXRfc2FtcGxlX2ZpbGUgJEAKKworCWxvYWRfbW9kdWxlCitmaQorY2hlY2tfdmVyc2lvbgorCisjIEV4Y2VwdCAtLXJlc2V0LCBldmVuIHRoZSBmZXcgb3BlcmF0aW9ucyBhbGxvd2VkIGFzIG5vbiByb290IG5lZWRzIHRoZQorIyBrZXJuZWwgc3VwcG9ydCwgaWYgd2UgZG9uJ3QgZXJyb3Igb3V0IG5vdyB0aGUgZXJyb3IgbWVzc2FnZSB3aWxsIGJlIG9ic2N1cmUKK2NoZWNrX29wcm9maWxlX2F2YWlsYWJsZQorCitkb19pbml0CitpZiB0ZXN0IGBpZCAtdWAgIT0gIjAiOyB0aGVuCisgICAgaWYgdGVzdCAteiAiJDIiOyB0aGVuCisJY2FzZSAiJDEiIGluCisJICAgIC0tZHVtcHwtZCkKKwkJT05MWV9EVU1QPXllcworCQlkb19kdW1wCisJCWV4aXQgMDsKKwkJOzsKKwkgICAgLS1saXN0LWV2ZW50c3wtbCkKKwkJZXhlYyAkT1BIRUxQCisJCWV4aXQgMDsKKwkJOzsKKwkgICAgKikKKwkJZWNobyAiTm9ybWFsIHVzZXJzIGFyZSBsaW1pdGVkIHRvIGVpdGhlciAnLS1kdW1wJyBvciAnLS1saXN0LWV2ZW50cycuIiA+JjIKKwkJZXhpdCAxCisJCTs7CisJZXNhYworICAgIGVsc2UKKwllY2hvICJOb3JtYWwgdXNlcnMgYXJlIGxpbWl0ZWQgdG8gZWl0aGVyICctLWR1bXAnIG9yICctLWxpc3QtZXZlbnRzJy4iID4mMgorCWV4aXQgMQorICAgIGZpCitmaQorCitkb19vcHRpb25zICRACitkb19vcGVyYXRpb25zCmRpZmYgLS1naXQgYS9vcHJvZmlsZS0wLjkuNy91dGlscy9vcGhlbHAuYyBiL29wcm9maWxlLTAuOS43L3V0aWxzL29waGVscC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkY2IyMTcKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS0wLjkuNy91dGlscy9vcGhlbHAuYwpAQCAtMCwwICsxLDc2NyBAQAorLyoqCisgKiBAZmlsZSBvcGhlbHAuYworICogUHJpbnQgb3V0IFBNQyBldmVudCBpbmZvcm1hdGlvbgorICoKKyAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDIgT1Byb2ZpbGUgYXV0aG9ycworICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKKyAqCisgKiBAYXV0aG9yIEpvaG4gTGV2b24KKyAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQorICovCisKKyNkZWZpbmUgX0dOVV9TT1VSQ0UKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorCisjaW5jbHVkZSAib3BfdmVyc2lvbi5oIgorI2luY2x1ZGUgIm9wX2V2ZW50cy5oIgorI2luY2x1ZGUgIm9wX3BvcHQuaCIKKyNpbmNsdWRlICJvcF9jcHVmcmVxLmgiCisjaW5jbHVkZSAib3BfaHdfY29uZmlnLmgiCisjaW5jbHVkZSAib3Bfc3RyaW5nLmgiCisjaW5jbHVkZSAib3BfYWxsb2NfY291bnRlci5oIgorI2luY2x1ZGUgIm9wX3BhcnNlX2V2ZW50LmgiCisjaW5jbHVkZSAib3BfbGliaWJlcnR5LmgiCisjaW5jbHVkZSAib3BfeG1sX2V2ZW50cy5oIgorCitzdGF0aWMgY2hhciBjb25zdCAqKiBjaG9zZW5fZXZlbnRzOworc3RhdGljIGludCBudW1fY2hvc2VuX2V2ZW50czsKK3N0cnVjdCBwYXJzZWRfZXZlbnQgKiBwYXJzZWRfZXZlbnRzOworc3RhdGljIG9wX2NwdSBjcHVfdHlwZSA9IENQVV9OT19HT09EOworc3RhdGljIGNoYXIgKiBjcHVfc3RyaW5nOworc3RhdGljIGludCBjYWxsZ3JhcGhfZGVwdGg7CitzdGF0aWMgaW50IHdhbnRfeG1sOworCitzdGF0aWMgcG9wdENvbnRleHQgb3B0Y29uOworCisKKy8vLyByZXR1cm4gdGhlIEhhbW1pbmcgd2VpZ2h0IChudW1iZXIgb2Ygc2V0IGJpdHMpCitzdGF0aWMgc2l6ZV90IGh3ZWlnaHQoc2l6ZV90IG1hc2spCit7CisJc2l6ZV90IGNvdW50ID0gMDsKKworCXdoaWxlIChtYXNrKSB7CisJCW1hc2sgJj0gbWFzayAtIDE7CisJCWNvdW50Kys7CisJfQorCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgdm9pZCBkb19hcmNoX3NwZWNpZmljX2V2ZW50X2hlbHAoc3RydWN0IG9wX2V2ZW50ICogZXZlbnQpCit7CisJc3dpdGNoIChjcHVfdHlwZSkgeworCWNhc2UgQ1BVX1BQQzY0X0NFTEw6CisJCXByaW50ZigiR3JvdXAgJXUgOiIsIGV2ZW50LT52YWwgLyAxMDApOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9Cit9CisKKyNkZWZpbmUgTElORV9MRU4gOTkKKworc3RhdGljIHZvaWQgd29yZF93cmFwKGludCBpbmRlbnQsIGludCAqY29sdW1uLCBjaGFyICptc2cpCit7CisJd2hpbGUgKCptc2cpIHsKKwkJaW50IHdsZW4gPSBzdHJjc3BuKG1zZywgIiAiKTsKKwkJaWYgKCpjb2x1bW4gKyB3bGVuID4gTElORV9MRU4pIHsKKwkJCXByaW50ZigiXG4lKnMiLCBpbmRlbnQsICIiKTsKKwkJCSpjb2x1bW4gPSBpbmRlbnQ7CisJCX0KKwkJcHJpbnRmKCIlLipzIiwgd2xlbiwgbXNnKTsKKwkJKmNvbHVtbiArPSB3bGVuICsgMTsKKwkJbXNnICs9IHdsZW47CisJCW1zZyArPSBzdHJzcG4obXNnLCAiICIpOworCQlpZiAoKm1zZykKKwkJCXB1dGNoYXIoJyAnKTsKKwl9Cit9CisKKy8qKgorICogaGVscF9mb3JfZXZlbnQgLSBvdXRwdXQgZXZlbnQgbmFtZSBhbmQgZGVzY3JpcHRpb24KKyAqIEBwYXJhbSBpICBldmVudCBudW1iZXIKKyAqCisgKiBvdXRwdXQgYW4gaGVscCBzdHJpbmcgZm9yIHRoZSBldmVudCBAaQorICovCitzdGF0aWMgdm9pZCBoZWxwX2Zvcl9ldmVudChzdHJ1Y3Qgb3BfZXZlbnQgKiBldmVudCkKK3sKKwlpbnQgY29sdW1uOworCXVpbnQgaSwgajsKKwl1aW50IG1hc2s7CisJc2l6ZV90IG5yX2NvdW50ZXJzOworCWNoYXIgYnVmWzMyXTsKKworCWRvX2FyY2hfc3BlY2lmaWNfZXZlbnRfaGVscChldmVudCk7CisJbnJfY291bnRlcnMgPSBvcF9nZXRfbnJfY291bnRlcnMoY3B1X3R5cGUpOworCisJLyogU2FuaXR5IGNoZWNrICovCisJaWYgKCFldmVudCkKKwkJcmV0dXJuOworCisJcHJpbnRmKCIlcyIsIGV2ZW50LT5uYW1lKTsKKworCWlmKGV2ZW50LT5jb3VudGVyX21hc2sgIT0gMCkgeworCQlwcmludGYoIjogKGNvdW50ZXI6ICIpOworCisJCW1hc2sgPSBldmVudC0+Y291bnRlcl9tYXNrOworCQlpZiAoaHdlaWdodChtYXNrKSA9PSBucl9jb3VudGVycykgeworCQkJcHJpbnRmKCJhbGwiKTsKKwkJfSBlbHNlIHsKKwkJCWZvciAoaSA9IDA7IGkgPCBDSEFSX0JJVCAqIHNpemVvZihldmVudC0+Y291bnRlcl9tYXNrKTsgKytpKSB7CisJCQkJaWYgKG1hc2sgJiAoMSA8PCBpKSkgeworCQkJCQlwcmludGYoIiVkIiwgaSk7CisJCQkJCW1hc2sgJj0gfigxIDw8IGkpOworCQkJCQlpZiAobWFzaykKKwkJCQkJCXByaW50ZigiLCAiKTsKKwkJCQl9CisJCQl9CisJCX0KKwl9IGVsc2UJaWYgKGV2ZW50LT5leHQgIT0gTlVMTCkgeworCQkvKiBIYW5kbGluZyBleHRlbmRlZCBmZWF0dXJlIGludGVyZmFjZSAqLworCQlwcmludGYoIjogKGV4dDogJXMiLCBldmVudC0+ZXh0KTsKKwl9IGVsc2UgeworCQkvKiBIYW5kbGluZyBhcmNoX3BlcmZtb24gY2FzZSAqLworCQlwcmludGYoIjogKGNvdW50ZXI6IGFsbCIpOworCX0gICAKKworCXByaW50ZigiKVxuXHQiKTsKKwljb2x1bW4gPSA4OworCXdvcmRfd3JhcCg4LCAmY29sdW1uLCBldmVudC0+ZGVzYyk7CisJc25wcmludGYoYnVmLCBzaXplb2YgYnVmLCAiIChtaW4gY291bnQ6ICVkKSIsIGV2ZW50LT5taW5fY291bnQpOworCXdvcmRfd3JhcCg4LCAmY29sdW1uLCBidWYpOworCXB1dGNoYXIoJ1xuJyk7CisKKwlpZiAoc3RyY21wKGV2ZW50LT51bml0LT5uYW1lLCAiemVybyIpKSB7CisKKwkJcHJpbnRmKCJcdFVuaXQgbWFza3MgKGRlZmF1bHQgMHgleClcbiIsCisJCSAgICAgICBldmVudC0+dW5pdC0+ZGVmYXVsdF9tYXNrKTsKKwkJcHJpbnRmKCJcdC0tLS0tLS0tLS1cbiIpOworCisJCWZvciAoaiA9IDA7IGogPCBldmVudC0+dW5pdC0+bnVtOyBqKyspIHsKKwkJCXByaW50ZigiXHQweCUuMng6ICIsCisJCQkgICAgICAgZXZlbnQtPnVuaXQtPnVtW2pdLnZhbHVlKTsKKwkJCWNvbHVtbiA9IDE0OworCQkJd29yZF93cmFwKDE0LCAmY29sdW1uLCBldmVudC0+dW5pdC0+dW1bal0uZGVzYyk7CisJCQlpZiAoZXZlbnQtPnVuaXQtPnVtW2pdLmV4dHJhKSB7CisJCQkJdTMyIGV4dHJhID0gZXZlbnQtPnVuaXQtPnVtW2pdLmV4dHJhOworCisJCQkJd29yZF93cmFwKDE0LCAmY29sdW1uLCAiIChleHRyYToiKTsKKwkJCQlpZiAoZXh0cmEgJiBFWFRSQV9FREdFKQorCQkJCQl3b3JkX3dyYXAoMTQsICZjb2x1bW4sICIgZWRnZSIpOworCQkJCWlmIChleHRyYSAmIEVYVFJBX0lOVikKKwkJCQkJd29yZF93cmFwKDE0LCAmY29sdW1uLCAiIGludiIpOworCQkJCWlmICgoZXh0cmEgPj4gRVhUUkFfQ01BU0tfU0hJRlQpICYgRVhUUkFfQ01BU0tfTUFTSykgeworCQkJCQlzbnByaW50ZihidWYsIHNpemVvZiBidWYsICIgY21hc2s9JXgiLAorCQkJCQkJIChleHRyYSA+PiBFWFRSQV9DTUFTS19TSElGVCkgJiBFWFRSQV9DTUFTS19NQVNLKTsKKwkJCQkJd29yZF93cmFwKDE0LCAmY29sdW1uLCBidWYpOworCQkJCX0KKwkJCQl3b3JkX3dyYXAoMTQsICZjb2x1bW4sICIpIik7CisJCQl9CisJCQlwdXRjaGFyKCdcbicpOworCQl9CisJfQorfQorCisKK3N0YXRpYyB2b2lkIGNoZWNrX2V2ZW50KHN0cnVjdCBwYXJzZWRfZXZlbnQgKiBwZXYsCisJCQlzdHJ1Y3Qgb3BfZXZlbnQgY29uc3QgKiBldmVudCkKK3sKKwlpbnQgcmV0OworCWludCBtaW5fY291bnQ7CisJaW50IGNvbnN0IGNhbGxncmFwaF9taW5fY291bnRfc2NhbGUgPSAxNTsKKworCWlmICghZXZlbnQpIHsKKwkJZXZlbnQgPSBmaW5kX2V2ZW50X2J5X25hbWUocGV2LT5uYW1lLCAwLCAwKTsKKwkJaWYgKGV2ZW50KQorCQkJZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIHVuaXQgbWFzayAleCBmb3IgZXZlbnQgJXNcbiIsCisJCQkJcGV2LT51bml0X21hc2ssIHBldi0+bmFtZSk7CisJCWVsc2UKKwkJCWZwcmludGYoc3RkZXJyLCAiTm8gZXZlbnQgbmFtZWQgJXMgaXMgYXZhaWxhYmxlLlxuIiwKKwkJCQlwZXYtPm5hbWUpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorCisJb3BfcmVzb2x2ZV91bml0X21hc2socGV2LCBOVUxMKTsKKworCXJldCA9IG9wX2NoZWNrX2V2ZW50cygwLCBldmVudC0+dmFsLCBwZXYtPnVuaXRfbWFzaywgY3B1X3R5cGUpOworCisJaWYgKHJldCAmIE9QX0lOVkFMSURfVU0pIHsKKwkJZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIHVuaXQgbWFzayAweCV4IGZvciBldmVudCAlc1xuIiwKKwkJICAgICAgICBwZXYtPnVuaXRfbWFzaywgcGV2LT5uYW1lKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKworCW1pbl9jb3VudCA9IGV2ZW50LT5taW5fY291bnQ7CisJaWYgKGNhbGxncmFwaF9kZXB0aCkKKwkJbWluX2NvdW50ICo9IGNhbGxncmFwaF9taW5fY291bnRfc2NhbGU7CisJaWYgKHBldi0+Y291bnQgPCBtaW5fY291bnQpIHsKKwkJZnByaW50ZihzdGRlcnIsICJDb3VudCAlZCBmb3IgZXZlbnQgJXMgaXMgYmVsb3cgdGhlICIKKwkJICAgICAgICAibWluaW11bSAlZFxuIiwgcGV2LT5jb3VudCwgcGV2LT5uYW1lLCBtaW5fY291bnQpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorfQorCisKK3N0YXRpYyB2b2lkIHJlc29sdmVfZXZlbnRzKHZvaWQpCit7CisJc2l6ZV90IGNvdW50LCBjb3VudF9ldmVudHM7CisJc2l6ZV90IGksIGo7CisJc2l6ZV90ICogY291bnRlcl9tYXA7CisJc2l6ZV90IG5yX2NvdW50ZXJzID0gb3BfZ2V0X25yX2NvdW50ZXJzKGNwdV90eXBlKTsKKwlzdHJ1Y3Qgb3BfZXZlbnQgY29uc3QgKiBzZWxlY3RlZF9ldmVudHNbbnVtX2Nob3Nlbl9ldmVudHNdOworCisJY291bnQgPSBwYXJzZV9ldmVudHMocGFyc2VkX2V2ZW50cywgbnVtX2Nob3Nlbl9ldmVudHMsIGNob3Nlbl9ldmVudHMpOworCisJZm9yIChpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKwkgICAgICAgIG9wX3Jlc29sdmVfdW5pdF9tYXNrKCZwYXJzZWRfZXZlbnRzW2ldLCBOVUxMKTsKKwkJZm9yIChqID0gaSArIDE7IGogPCBjb3VudDsgKytqKSB7CisJCQlzdHJ1Y3QgcGFyc2VkX2V2ZW50ICogcGV2MSA9ICZwYXJzZWRfZXZlbnRzW2ldOworCQkJc3RydWN0IHBhcnNlZF9ldmVudCAqIHBldjIgPSAmcGFyc2VkX2V2ZW50c1tqXTsKKworCQkJaWYgKCFzdHJjbXAocGV2MS0+bmFtZSwgcGV2Mi0+bmFtZSkgJiYKKwkJCSAgICBwZXYxLT5jb3VudCA9PSBwZXYyLT5jb3VudCAmJgorCQkJICAgIHBldjEtPnVuaXRfbWFzayA9PSBwZXYyLT51bml0X21hc2sgJiYKKwkJCSAgICBwZXYxLT5rZXJuZWwgPT0gcGV2Mi0+a2VybmVsICYmCisJCQkgICAgcGV2MS0+dXNlciA9PSBwZXYyLT51c2VyKSB7CisJCQkJZnByaW50ZihzdGRlcnIsICJBbGwgZXZlbnRzIG11c3QgYmUgZGlzdGluY3QuXG4iKTsKKwkJCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJCQl9CisJCX0KKwl9CisKKwlmb3IgKGkgPSAwLCBjb3VudF9ldmVudHMgPSAwOyBpIDwgY291bnQ7ICsraSkgeworCQlzdHJ1Y3QgcGFyc2VkX2V2ZW50ICogcGV2ID0gJnBhcnNlZF9ldmVudHNbaV07CisKKwkJLyogRm9yIDAgdW5pdCBtYXNrIGFsd2F5cyBkbyB3aWxkIGNhcmQgbWF0Y2ggKi8KKwkJc2VsZWN0ZWRfZXZlbnRzW2ldID0gZmluZF9ldmVudF9ieV9uYW1lKHBldi0+bmFtZSwgcGV2LT51bml0X21hc2ssCisJCQkJCXBldi0+dW5pdF9tYXNrID8gcGV2LT51bml0X21hc2tfdmFsaWQgOiAwKTsKKwkJY2hlY2tfZXZlbnQocGV2LCBzZWxlY3RlZF9ldmVudHNbaV0pOworCisJCWlmIChzZWxlY3RlZF9ldmVudHNbaV0tPmV4dCA9PSBOVUxMKSB7CisJCQljb3VudF9ldmVudHMrKzsKKwkJfQorCX0KKwlpZiAoY291bnRfZXZlbnRzID4gbnJfY291bnRlcnMpIHsKKwkJZnByaW50ZihzdGRlcnIsICJOb3QgZW5vdWdoIGhhcmR3YXJlIGNvdW50ZXJzLiAiCisJCQkJIk5lZWQgJWx1IGNvdW50ZXJzIGJ1dCBvbmx5IGhhcyAlbHUuXG4iLAorCQkJCSh1bnNpZ25lZCBsb25nKSBjb3VudF9ldmVudHMsCisJCQkJKHVuc2lnbmVkIGxvbmcpIG5yX2NvdW50ZXJzKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKworCWNvdW50ZXJfbWFwID0gbWFwX2V2ZW50X3RvX2NvdW50ZXIoc2VsZWN0ZWRfZXZlbnRzLCBjb3VudCwgY3B1X3R5cGUpOworCisJaWYgKCFjb3VudGVyX21hcCkgeworCQlmcHJpbnRmKHN0ZGVyciwgIkNvdWxkbid0IGFsbG9jYXRlIGhhcmR3YXJlIGNvdW50ZXJzIGZvciB0aGUgc2VsZWN0ZWQgZXZlbnRzLlxuIik7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7ICsraSkKKwkJaWYoY291bnRlcl9tYXBbaV0gPT0gKHNpemVfdCktMSkKKwkJCWlmIChzZWxlY3RlZF9ldmVudHNbaV0tPmV4dCAhPSBOVUxMKQorCQkJCXByaW50ZigiJXMgIiwgKGNoYXIqKSBzZWxlY3RlZF9ldmVudHNbaV0tPmV4dCk7CisJCQllbHNlCisJCQkJcHJpbnRmKCJOL0EgIik7CisJCWVsc2UKKwkJCXByaW50ZigiJWQgIiwgKHVuc2lnbmVkIGludCkgY291bnRlcl9tYXBbaV0pOworCXByaW50ZigiXG4iKTsKKworCWZyZWUoY291bnRlcl9tYXApOworfQorCisKK3N0YXRpYyB2b2lkIHNob3dfdW5pdF9tYXNrKHZvaWQpCit7CisJc2l6ZV90IGNvdW50OworCisJY291bnQgPSBwYXJzZV9ldmVudHMocGFyc2VkX2V2ZW50cywgbnVtX2Nob3Nlbl9ldmVudHMsIGNob3Nlbl9ldmVudHMpOworCWlmIChjb3VudCA+IDEpIHsKKwkJZnByaW50ZihzdGRlcnIsICJNb3JlIHRoYW4gb25lIGV2ZW50IHNwZWNpZmllZC5cbiIpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorCisJb3BfcmVzb2x2ZV91bml0X21hc2socGFyc2VkX2V2ZW50cywgTlVMTCk7CisJaWYgKHBhcnNlZF9ldmVudHNbMF0udW5pdF9tYXNrX25hbWUpCisJCXByaW50ZigiJXNcbiIsIHBhcnNlZF9ldmVudHNbMF0udW5pdF9tYXNrX25hbWUpOworCWVsc2UKKwkJcHJpbnRmKCIlZFxuIiwgcGFyc2VkX2V2ZW50c1swXS51bml0X21hc2spOworfQorCitzdGF0aWMgdm9pZCBzaG93X2V4dHJhX21hc2sodm9pZCkKK3sKKwlzaXplX3QgY291bnQ7CisJdW5zaWduZWQgZXh0cmEgPSAwOworCisJY291bnQgPSBwYXJzZV9ldmVudHMocGFyc2VkX2V2ZW50cywgbnVtX2Nob3Nlbl9ldmVudHMsIGNob3Nlbl9ldmVudHMpOworCWlmIChjb3VudCA+IDEpIHsKKwkJZnByaW50ZihzdGRlcnIsICJNb3JlIHRoYW4gb25lIGV2ZW50IHNwZWNpZmllZC5cbiIpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorCisJb3BfcmVzb2x2ZV91bml0X21hc2socGFyc2VkX2V2ZW50cywgJmV4dHJhKTsKKwlwcmludGYgKCIlZFxuIiwgZXh0cmEpOworfQorCitzdGF0aWMgdm9pZCBzaG93X2RlZmF1bHRfZXZlbnQodm9pZCkKK3sKKwlzdHJ1Y3Qgb3BfZGVmYXVsdF9ldmVudF9kZXNjciBkZXNjcjsKKworCW9wX2RlZmF1bHRfZXZlbnQoY3B1X3R5cGUsICZkZXNjcik7CisKKwlpZiAoZGVzY3IubmFtZVswXSA9PSAnXDAnKQorCQlyZXR1cm47CisKKwlwcmludGYoIiVzOiVsdTolbHU6MToxXG4iLCBkZXNjci5uYW1lLCBkZXNjci5jb3VudCwgZGVzY3IudW0pOworfQorCisKK3N0YXRpYyBpbnQgc2hvd192ZXJzOworc3RhdGljIGludCBnZXRfY3B1X3R5cGU7CitzdGF0aWMgaW50IGNoZWNrX2V2ZW50czsKK3N0YXRpYyBpbnQgdW5pdF9tYXNrOworc3RhdGljIGludCBnZXRfZGVmYXVsdF9ldmVudDsKK3N0YXRpYyBpbnQgZXh0cmFfbWFzazsKKworc3RhdGljIHN0cnVjdCBwb3B0T3B0aW9uIG9wdGlvbnNbXSA9IHsKKwl7ICJjcHUtdHlwZSIsICdjJywgUE9QVF9BUkdfU1RSSU5HLCAmY3B1X3N0cmluZywgMCwKKwkgICJ1c2UgdGhlIGdpdmVuIENQVSB0eXBlIiwgImNwdSB0eXBlIiwgfSwKKwl7ICJjaGVjay1ldmVudHMiLCAnZScsIFBPUFRfQVJHX05PTkUsICZjaGVja19ldmVudHMsIDAsCisJICAiY2hlY2sgdGhlIGdpdmVuIGV2ZW50IGRlc2NyaXB0aW9ucyBmb3IgdmFsaWRpdHkiLCBOVUxMLCB9LAorCXsgInVuaXQtbWFzayIsICd1JywgUE9QVF9BUkdfTk9ORSwgJnVuaXRfbWFzaywgMCwKKwkgICJkZWZhdWx0IHVuaXQgbWFzayBmb3IgdGhlIGdpdmVuIGV2ZW50IiwgTlVMTCwgfSwKKwl7ICJnZXQtY3B1LXR5cGUiLCAncicsIFBPUFRfQVJHX05PTkUsICZnZXRfY3B1X3R5cGUsIDAsCisJICAic2hvdyB0aGUgYXV0by1kZXRlY3RlZCBDUFUgdHlwZSIsIE5VTEwsIH0sCisJeyAiZ2V0LWRlZmF1bHQtZXZlbnQiLCAnZCcsIFBPUFRfQVJHX05PTkUsICZnZXRfZGVmYXVsdF9ldmVudCwgMCwKKwkgICJnZXQgdGhlIGRlZmF1bHQgZXZlbnQiLCBOVUxMLCB9LAorCXsgImNhbGxncmFwaCIsICdcMCcsIFBPUFRfQVJHX0lOVCwgJmNhbGxncmFwaF9kZXB0aCwgMCwKKwkgICJ1c2UgdGhpcyBjYWxsZ3JhcGggZGVwdGgiLCAiY2FsbGdyYXBoIGRlcHRoIiwgfSwKKwl7ICJ2ZXJzaW9uIiwgJ3YnLCBQT1BUX0FSR19OT05FLCAmc2hvd192ZXJzLCAwLAorCSAgICJzaG93IHZlcnNpb24iLCBOVUxMLCB9LAorCXsgInhtbCIsICdYJywgUE9QVF9BUkdfTk9ORSwgJndhbnRfeG1sLCAwLAorCSAgICJsaXN0IGV2ZW50cyBhcyBYTUwiLCBOVUxMLCB9LAorCXsgImV4dHJhLW1hc2siLCAnRScsIFBPUFRfQVJHX05PTkUsICZleHRyYV9tYXNrLCAwLAorCSAgInByaW50IGV4dHJhIG1hc2sgZm9yIGV2ZW50IiwgTlVMTCwgfSwKKwlQT1BUX0FVVE9IRUxQCisJeyBOVUxMLCAwLCAwLCBOVUxMLCAwLCBOVUxMLCBOVUxMLCB9LAorfTsKKworLyoqCisgKiBnZXRfb3B0aW9ucyAtIHByb2Nlc3MgY29tbWFuZCBsaW5lCisgKiBAcGFyYW0gYXJnYyAgcHJvZ3JhbSBhcmcgY291bnQKKyAqIEBwYXJhbSBhcmd2ICBwcm9ncmFtIGFyZyBhcnJheQorICoKKyAqIFByb2Nlc3MgdGhlIGFyZ3VtZW50cywgZmF0YWxseSBjb21wbGFpbmluZyBvbiBlcnJvci4KKyAqLworc3RhdGljIHZvaWQgZ2V0X29wdGlvbnMoaW50IGFyZ2MsIGNoYXIgY29uc3QgKiBhcmd2W10pCit7CisJb3B0Y29uID0gb3BfcG9wdEdldENvbnRleHQoTlVMTCwgYXJnYywgYXJndiwgb3B0aW9ucywgMCk7CisKKwlpZiAoc2hvd192ZXJzKQorCQlzaG93X3ZlcnNpb24oYXJndlswXSk7CisKKwkvKiBub24tb3B0aW9uLCBtdXN0IGJlIGEgdmFsaWQgZXZlbnQgbmFtZSBvciBldmVudCBzcGVjcyAqLworCWNob3Nlbl9ldmVudHMgPSBwb3B0R2V0QXJncyhvcHRjb24pOworCisJaWYoY2hvc2VuX2V2ZW50cykgeworCQludW1fY2hvc2VuX2V2ZW50cyA9IDA7CisJCXdoaWxlIChjaG9zZW5fZXZlbnRzW251bV9jaG9zZW5fZXZlbnRzXSAhPSBOVUxMKQorCQkJbnVtX2Nob3Nlbl9ldmVudHMrKzsKKwl9CisKKwkvKiBkb24ndCBmcmVlIHRoZSBjb250ZXh0IG5vdywgd2UgbmVlZCBjaG9zZW5fZXZlbnRzICovCit9CisKKworLyoqIG1ha2UgdmFsZ3JpbmQgaGFwcHkgKi8KK3N0YXRpYyB2b2lkIGNsZWFudXAodm9pZCkKK3sKKwlpbnQgaTsKKwlpZiAocGFyc2VkX2V2ZW50cykgeworCQlmb3IgKGkgPSAwOyBpIDwgbnVtX2Nob3Nlbl9ldmVudHM7ICsraSkgeworCQkJaWYgKHBhcnNlZF9ldmVudHNbaV0ubmFtZSkKKwkJCQlmcmVlKHBhcnNlZF9ldmVudHNbaV0ubmFtZSk7CisJCX0KKwl9CisJb3BfZnJlZV9ldmVudHMoKTsKKwlpZiAob3B0Y29uKQorCQlwb3B0RnJlZUNvbnRleHQob3B0Y29uKTsKKwlpZiAocGFyc2VkX2V2ZW50cykKKwkJZnJlZShwYXJzZWRfZXZlbnRzKTsKK30KKworCisjZGVmaW5lIE1BWF9MSU5FIDI1NgoraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgY29uc3QgKiBhcmd2W10pCit7CisJc3RydWN0IGxpc3RfaGVhZCAqIGV2ZW50czsKKwlzdHJ1Y3QgbGlzdF9oZWFkICogcG9zOworCWNoYXIgY29uc3QgKiBwcmV0dHk7CisJY2hhciB0aXRsZVsxMCAqIE1BWF9MSU5FXTsKKwljaGFyIGNvbnN0ICogZXZlbnRfZG9jID0gIiI7CisKKwlhdGV4aXQoY2xlYW51cCk7CisKKwlnZXRfb3B0aW9ucyhhcmdjLCBhcmd2KTsKKworCS8qIHVzZWZ1bGwgZm9yIHRlc3RpbmcgcHVycG9zZSB0byBhbGxvdyB0byBmb3JjZSB0aGUgY3B1IHR5cGUKKwkgKiB3aXRoIC0tY3B1LXR5cGUgKi8KKwlpZiAoY3B1X3N0cmluZykgeworCQljcHVfdHlwZSA9IG9wX2dldF9jcHVfbnVtYmVyKGNwdV9zdHJpbmcpOworCX0gZWxzZSB7CisJCWNwdV90eXBlID0gb3BfZ2V0X2NwdV90eXBlKCk7CisJfQorCisJaWYgKGNwdV90eXBlID09IENQVV9OT19HT09EKSB7CisJCWZwcmludGYoc3RkZXJyLCAiY3B1X3R5cGUgJyVzJyBpcyBub3QgdmFsaWRcbiIsCisJCSAgICAgICAgY3B1X3N0cmluZyA/IGNwdV9zdHJpbmcgOiAidW5zZXQiKTsKKwkJZnByaW50ZihzdGRlcnIsICJ5b3Ugc2hvdWxkIHVwZ3JhZGUgb3Byb2ZpbGUgb3IgZm9yY2UgdGhlICIKKwkJCSJ1c2Ugb2YgdGltZXIgbW9kZVxuIik7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisKKwlwYXJzZWRfZXZlbnRzID0gKHN0cnVjdCBwYXJzZWRfZXZlbnQgKil4Y2FsbG9jKG51bV9jaG9zZW5fZXZlbnRzLAorCQlzaXplb2Yoc3RydWN0IHBhcnNlZF9ldmVudCkpOworCisJcHJldHR5ID0gb3BfZ2V0X2NwdV90eXBlX3N0cihjcHVfdHlwZSk7CisKKwlpZiAoZ2V0X2NwdV90eXBlKSB7CisJCXByaW50ZigiJXNcbiIsIHByZXR0eSk7CisJCWV4aXQoRVhJVF9TVUNDRVNTKTsKKwl9CisKKwlpZiAoZ2V0X2RlZmF1bHRfZXZlbnQpIHsKKwkJc2hvd19kZWZhdWx0X2V2ZW50KCk7CisJCWV4aXQoRVhJVF9TVUNDRVNTKTsKKwl9CisKKwlpZiAoY3B1X3R5cGUgPT0gQ1BVX1RJTUVSX0lOVCkgeworCQlpZiAoIWNoZWNrX2V2ZW50cykKKwkJCXByaW50ZigiVXNpbmcgdGltZXIgaW50ZXJydXB0LlxuIik7CisJCWV4aXQoRVhJVF9TVUNDRVNTKTsKKwl9CisKKwlldmVudHMgPSBvcF9ldmVudHMoY3B1X3R5cGUpOworCisJaWYgKCFjaG9zZW5fZXZlbnRzICYmICh1bml0X21hc2sgfHwgY2hlY2tfZXZlbnRzIHx8IGV4dHJhX21hc2spKSB7CisJCWZwcmludGYoc3RkZXJyLCAiTm8gZXZlbnRzIGdpdmVuLlxuIik7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisKKwlpZiAodW5pdF9tYXNrKSB7CisJCXNob3dfdW5pdF9tYXNrKCk7CisJCWV4aXQoRVhJVF9TVUNDRVNTKTsKKwl9CisKKwlpZiAoZXh0cmFfbWFzaykgeworCQlzaG93X2V4dHJhX21hc2soKTsKKwkJZXhpdChFWElUX1NVQ0NFU1MpOworCX0KKworCWlmIChjaGVja19ldmVudHMpIHsKKwkJcmVzb2x2ZV9ldmVudHMoKTsKKwkJZXhpdChFWElUX1NVQ0NFU1MpOworCX0KKworCS8qIHdpdGhvdXQgLS1jaGVjay1ldmVudHMsIHRoZSBvbmx5IGFyZ3VtZW50IG11c3QgYmUgYW4gZXZlbnQgbmFtZSAqLworCWlmIChjaG9zZW5fZXZlbnRzICYmIGNob3Nlbl9ldmVudHNbMF0pIHsKKwkJaWYgKGNob3Nlbl9ldmVudHNbMV0pIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiVG9vIG1hbnkgYXJndW1lbnRzLlxuIik7CisJCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJCX0KKworCQlsaXN0X2Zvcl9lYWNoKHBvcywgZXZlbnRzKSB7CisJCQlzdHJ1Y3Qgb3BfZXZlbnQgKiBldmVudCA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3Qgb3BfZXZlbnQsIGV2ZW50X25leHQpOworCisJCQlpZiAoc3RyY21wKGV2ZW50LT5uYW1lLCBjaG9zZW5fZXZlbnRzWzBdKSA9PSAwKSB7CisJCQkJY2hhciBjb25zdCAqIG1hcCA9IGZpbmRfbWFwcGluZ19mb3JfZXZlbnQoZXZlbnQtPnZhbCwgY3B1X3R5cGUpOworCQkJCWlmIChtYXApIHsKKwkJCQkJcHJpbnRmKCIlZCAlc1xuIiwgZXZlbnQtPnZhbCwgbWFwKTsKKwkJCQl9IGVsc2UgeworCQkJCQlwcmludGYoIiVkXG4iLCBldmVudC0+dmFsKTsKKwkJCQl9CisJCQkJZXhpdChFWElUX1NVQ0NFU1MpOworCQkJfQorCQl9CisJCWZwcmludGYoc3RkZXJyLCAiTm8gc3VjaCBldmVudCBcIiVzXCJcbiIsIGNob3Nlbl9ldmVudHNbMF0pOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorCisJLyogZGVmYXVsdDogbGlzdCBhbGwgZXZlbnRzICovCisKKwlzd2l0Y2ggKGNwdV90eXBlKSB7CisJY2FzZSBDUFVfSEFNTUVSOgorCQlldmVudF9kb2MgPQorCQkJIlNlZSBCSU9TIGFuZCBLZXJuZWwgRGV2ZWxvcGVyJ3MgR3VpZGUgZm9yIEFNRCBBdGhsb24gYW5kIEFNRCBPcHRlcm9uIFByb2Nlc3NvcnNcbiIKKwkJCSIoMjYwOTQucGRmKSwgU2VjdGlvbiAxMC4yXG5cbiI7CisJCWJyZWFrOworCWNhc2UgQ1BVX0ZBTUlMWTEwOgorCQlldmVudF9kb2MgPQorCQkJIlNlZSBCSU9TIGFuZCBLZXJuZWwgRGV2ZWxvcGVyJ3MgR3VpZGUgZm9yIEFNRCBGYW1pbHkgMTBoIFByb2Nlc3NvcnNcbiIKKwkJCSIoMzExMTYucGRmKSwgU2VjdGlvbiAzLjE0XG5cbiI7CisJCWJyZWFrOworCWNhc2UgQ1BVX0ZBTUlMWTExSDoKKwkJZXZlbnRfZG9jID0KKwkJCSJTZWUgQklPUyBhbmQgS2VybmVsIERldmVsb3BlcidzIEd1aWRlIGZvciBBTUQgRmFtaWx5IDExaCBQcm9jZXNzb3JzXG4iCisJCQkiKDQxMjU2LnBkZiksIFNlY3Rpb24gMy4xNFxuXG4iOworCQlicmVhazsKKwljYXNlIENQVV9GQU1JTFkxMkg6CisJCWV2ZW50X2RvYyA9CisJCQkiU2VlIEJJT1MgYW5kIEtlcm5lbCBEZXZlbG9wZXIncyBHdWlkZSBmb3IgQU1EIEZhbWlseSAxMmggUHJvY2Vzc29yc1xuIjsKKwkJYnJlYWs7CisJY2FzZSBDUFVfRkFNSUxZMTRIOgorCQlldmVudF9kb2MgPQorCQkJIlNlZSBCSU9TIGFuZCBLZXJuZWwgRGV2ZWxvcGVyJ3MgR3VpZGUgZm9yIEFNRCBGYW1pbHkgMTRoIFByb2Nlc3NvcnNcbiI7CisJCWJyZWFrOworCWNhc2UgQ1BVX0ZBTUlMWTE1SDoKKwkJZXZlbnRfZG9jID0KKwkJCSJTZWUgQklPUyBhbmQgS2VybmVsIERldmVsb3BlcidzIEd1aWRlIGZvciBBTUQgRmFtaWx5IDE1aCBQcm9jZXNzb3JzXG4iOworCQlicmVhazsKKwljYXNlIENQVV9BVEhMT046CisJCWV2ZW50X2RvYyA9CisJCQkiU2VlIEFNRCBBdGhsb24gUHJvY2Vzc29yIHg4NiBDb2RlIE9wdGltaXphdGlvbiBHdWlkZVxuIgorCQkJIigyMjAwNy5wZGYpLCBBcHBlbmRpeCBEXG5cbiI7CisJCWJyZWFrOworCWNhc2UgQ1BVX1BQUk86CisJY2FzZSBDUFVfUElJOgorCWNhc2UgQ1BVX1BJSUk6CisJY2FzZSBDUFVfUDZfTU9CSUxFOgorCWNhc2UgQ1BVX1A0OgorCWNhc2UgQ1BVX1A0X0hUMjoKKwljYXNlIENQVV9DT1JFOgorCWNhc2UgQ1BVX0NPUkVfMjoKKwljYXNlIENQVV9DT1JFX0k3OgorCWNhc2UgQ1BVX05FSEFMRU06CisJY2FzZSBDUFVfV0VTVE1FUkU6CisJY2FzZSBDUFVfU0FORFlCUklER0U6CisJY2FzZSBDUFVfQVRPTToKKwkJZXZlbnRfZG9jID0KKwkJCSJTZWUgSW50ZWwgQXJjaGl0ZWN0dXJlIERldmVsb3BlcidzIE1hbnVhbCBWb2x1bWUgM0IsIEFwcGVuZGl4IEEgYW5kXG4iCisJCQkiSW50ZWwgQXJjaGl0ZWN0dXJlIE9wdGltaXphdGlvbiBSZWZlcmVuY2UgTWFudWFsICg3MzA3OTUtMDAxKVxuXG4iOworCQlicmVhazsKKworCWNhc2UgQ1BVX0FSQ0hfUEVSRk1PTjoKKwkJZXZlbnRfZG9jID0KKwkJCSJTZWUgSW50ZWwgNjQgYW5kIElBLTMyIEFyY2hpdGVjdHVyZXMgU29mdHdhcmUgRGV2ZWxvcGVyJ3MgTWFudWFsXG4iCisJCQkiVm9sdW1lIDNCIChEb2N1bWVudCAyNTM2NjkpIENoYXB0ZXIgMTggZm9yIGFyY2hpdGVjdHVyYWwgcGVyZm1vbiBldmVudHNcbiIKKwkJCSJUaGlzIGlzIGEgbGltaXRlZCBzZXQgb2YgZmFsbGJhY2sgZXZlbnRzIGJlY2F1c2Ugb3Byb2ZpbGUgZG9lc24ndCBrbm93IHlvdXIgQ1BVXG4iOworCQlicmVhazsKKwkKKwljYXNlIENQVV9JQTY0OgorCWNhc2UgQ1BVX0lBNjRfMToKKwljYXNlIENQVV9JQTY0XzI6CisJCWV2ZW50X2RvYyA9CisJCQkiU2VlIEludGVsIEl0YW5pdW0gUHJvY2Vzc29yIFJlZmVyZW5jZSBNYW51YWxcbiIKKwkJCSJmb3IgU29mdHdhcmUgRGV2ZWxvcG1lbnQgKERvY3VtZW50IDI0NTMyMC0wMDMpLFxuIgorCQkJIkludGVsIEl0YW5pdW0gUHJvY2Vzc29yIFJlZmVyZW5jZSBNYW51YWxcbiIKKwkJCSJmb3IgU29mdHdhcmUgT3B0aW1pemF0aW9uIChEb2N1bWVudCAyNDU0NzMtMDAzKSxcbiIKKwkJCSJJbnRlbCBJdGFuaXVtIDIgUHJvY2Vzc29yIFJlZmVyZW5jZSBNYW51YWxcbiIKKwkJCSJmb3IgU29mdHdhcmUgRGV2ZWxvcG1lbnQgYW5kIE9wdGltaXphdGlvbiAoRG9jdW1lbnQgMjUxMTEwLTAwMSlcblxuIjsKKwkJYnJlYWs7CisJY2FzZSBDUFVfQVhQX0VWNDoKKwljYXNlIENQVV9BWFBfRVY1OgorCWNhc2UgQ1BVX0FYUF9QQ0E1NjoKKwljYXNlIENQVV9BWFBfRVY2OgorCWNhc2UgQ1BVX0FYUF9FVjY3OgorCQlldmVudF9kb2MgPQorCQkJIlNlZSBBbHBoYSBBcmNoaXRlY3R1cmUgUmVmZXJlbmNlIE1hbnVhbFxuIgorCQkJImh0dHA6Ly9kb3dubG9hZC5tYWppeC5vcmcvZGVjL2FscGhhX2FyY2hfcmVmLnBkZlxuIjsKKwkJYnJlYWs7CisJY2FzZSBDUFVfQVJNX1hTQ0FMRTE6CisJY2FzZSBDUFVfQVJNX1hTQ0FMRTI6CisJCWV2ZW50X2RvYyA9CisJCQkiU2VlIEludGVsIFhTY2FsZSBDb3JlIERldmVsb3BlcidzIE1hbnVhbFxuIgorCQkJIkNoYXB0ZXIgOCBQZXJmb3JtYW5jZSBNb25pdG9yaW5nXG4iOworCQlicmVhazsKKwljYXNlIENQVV9BUk1fTVBDT1JFOgorCQlldmVudF9kb2MgPQorCQkJIlNlZSBBUk0xMSBNUENvcmUgUHJvY2Vzc29yIFRlY2huaWNhbCBSZWZlcmVuY2UgTWFudWFsIHIxcDBcbiIKKwkJCSJQYWdlIDMtNzAsIHBlcmZvcm1hbmNlIGNvdW50ZXJzXG4iOworCQlicmVhazsKKworCWNhc2UgQ1BVX0FSTV9WNjoKKwkJZXZlbnRfZG9jID0gIlNlZSBBUk0xMSBUZWNobmljYWwgUmVmZXJlbmNlIE1hbnVhbFxuIjsKKyAgCQlicmVhazsKKworCWNhc2UgQ1BVX0FSTV9WNzoKKwkJZXZlbnRfZG9jID0KKwkJCSJTZWUgQ29ydGV4LUE4IFRlY2huaWNhbCBSZWZlcmVuY2UgTWFudWFsXG4iCisJCQkiQ29ydGV4IEE4IERESSAoQVJNIERESSAwMzQ0QiwgcmV2aXNpb24gcjFwMSlcbiI7CisJCWJyZWFrOworCisJY2FzZSBDUFVfQVJNX1NDT1JQSU9OOgorCQlldmVudF9kb2MgPQorCQkJIlNlZSBBUk0gQXJjaGl0ZWN0dXJlIFJlZmVyZW5jZSBNYW51YWwgQVJNdjctQSBhbmQgQVJNdjctUiBFZGl0aW9uXG4iCisJCQkiU2NvcnBpb24gUHJvY2Vzc29yIEZhbWlseSBQcm9ncmFtbWVyJ3MgUmVmZXJlbmNlIE1hbnVhbCAoUFJNKVxuIjsKKwkJYnJlYWs7CisKKwljYXNlIENQVV9BUk1fU0NPUlBJT05NUDoKKwkJZXZlbnRfZG9jID0KKwkJCSJTZWUgQVJNIEFyY2hpdGVjdHVyZSBSZWZlcmVuY2UgTWFudWFsIEFSTXY3LUEgYW5kIEFSTXY3LVIgRWRpdGlvblxuIgorCQkJIlNjb3JwaW9uIFByb2Nlc3NvciBGYW1pbHkgUHJvZ3JhbW1lcidzIFJlZmVyZW5jZSBNYW51YWwgKFBSTSlcbiI7CisJCWJyZWFrOworCisJY2FzZSBDUFVfQVJNX1Y3X0NBOToKKwkJZXZlbnRfZG9jID0KKwkJCSJTZWUgQ29ydGV4LUE5IFRlY2huaWNhbCBSZWZlcmVuY2UgTWFudWFsXG4iCisJCQkiQ29ydGV4IEE5IERESSAoQVJNIERESSAwMzg4RSwgcmV2aXNpb24gcjJwMClcbiI7CisJCWJyZWFrOworCisJY2FzZSBDUFVfUFBDNjRfUEE2VDoKKwkJZXZlbnRfZG9jID0KKwkJCSJTZWUgUEE2VCBQb3dlciBJbXBsZW1lbnRhdGlvbiBGZWF0dXJlcyBCb29rIElWXG4iCisJCQkiQ2hhcHRlciA3IFBlcmZvcm1hbmNlIENvdW50ZXJzXG4iOworCQlicmVhazsKKworCWNhc2UgQ1BVX1BQQzY0X1BPV0VSNDoKKwljYXNlIENQVV9QUEM2NF9QT1dFUjU6CisJY2FzZSBDUFVfUFBDNjRfUE9XRVI2OgorCWNhc2UgQ1BVX1BQQzY0X1BPV0VSNXA6CisJY2FzZSBDUFVfUFBDNjRfUE9XRVI1cHA6CisJY2FzZSBDUFVfUFBDNjRfOTcwOgorCWNhc2UgQ1BVX1BQQzY0Xzk3ME1QOgorCWNhc2UgQ1BVX1BQQzY0X1BPV0VSNzoKKwljYXNlIENQVV9QUEM2NF9JQk1fQ09NUEFUX1YxOgorCQlldmVudF9kb2MgPQorCQkJIk9idGFpbiBQb3dlclBDNjQgcHJvY2Vzc29yIGRvY3VtZW50YXRpb24gYXQ6XG4iCisJCQkiaHR0cDovL3d3dy0zMDYuaWJtLmNvbS9jaGlwcy90ZWNobGliL3RlY2hsaWIubnNmL3Byb2R1Y3RmYW1pbGllcy9Qb3dlclBDXG4iOworCQlicmVhazsKKworCWNhc2UgQ1BVX1BQQzY0X0NFTEw6CisJCWV2ZW50X2RvYyA9CisJCQkiT2J0YWluIENlbGwgQnJvYWRiYW5kIEVuZ2luZSBkb2N1bWVudGF0aW9uIGF0OlxuIgorCQkJImh0dHA6Ly93d3ctMzA2LmlibS5jb20vY2hpcHMvdGVjaGxpYi90ZWNobGliLm5zZi9wcm9kdWN0cy9DZWxsX0Jyb2FkYmFuZF9FbmdpbmVcbiI7CisJCWJyZWFrOworCisJY2FzZSBDUFVfTUlQU18yMEs6CisJCWV2ZW50X2RvYyA9CisJCQkiU2VlIFByb2dyYW1taW5nIHRoZSBNSVBTNjQgMjBLYyBQcm9jZXNzb3IgQ29yZSBVc2VyJ3MgIgorCQkibWFudWFsIGF2YWlsYWJsZSBmcm9tIHd3dy5taXBzLmNvbVxuIjsKKwkJYnJlYWs7CisJY2FzZSBDUFVfTUlQU18yNEs6CisJCWV2ZW50X2RvYyA9CisJCQkiU2VlIFByb2dyYW1taW5nIHRoZSBNSVBTMzIgMjRLIENvcmUgIgorCQkJImF2YWlsYWJsZSBmcm9tIHd3dy5taXBzLmNvbVxuIjsKKwkJYnJlYWs7CisJY2FzZSBDUFVfTUlQU18yNUs6CisJCWV2ZW50X2RvYyA9CisJCQkiU2VlIFByb2dyYW1taW5nIHRoZSBNSVBTNjQgMjVLZiBQcm9jZXNzb3IgQ29yZSBVc2VyJ3MgIgorCQkJIm1hbnVhbCBhdmFpbGFibGUgZnJvbSB3d3cubWlwcy5jb21cbiI7CisJCWJyZWFrOworCWNhc2UgQ1BVX01JUFNfMzRLOgorCQlldmVudF9kb2MgPQorCQkJIlNlZSBQcm9ncmFtbWluZyB0aGUgTUlQUzMyIDM0SyBDb3JlIEZhbWlseSAiCisJCQkiYXZhaWxhYmxlIGZyb20gd3d3Lm1pcHMuY29tXG4iOworCQlicmVhazsKKwljYXNlIENQVV9NSVBTXzc0SzoKKwkJZXZlbnRfZG9jID0KKwkJCSJTZWUgUHJvZ3JhbW1pbmcgdGhlIE1JUFMzMiA3NEsgQ29yZSBGYW1pbHkgIgorCQkJImF2YWlsYWJsZSBmcm9tIHd3dy5taXBzLmNvbVxuIjsKKwkJYnJlYWs7CisJY2FzZSBDUFVfTUlQU18xMDA0SzoKKwkJZXZlbnRfZG9jID0KKwkJCSJTZWUgUHJvZ3JhbW1pbmcgdGhlIE1JUFMzMiAxMDA0SyBDb3JlIEZhbWlseSAiCisJCQkiYXZhaWxhYmxlIGZyb20gd3d3Lm1pcHMuY29tXG4iOworCQlicmVhazsKKwljYXNlIENQVV9NSVBTXzVLOgorCQlldmVudF9kb2MgPQorCQkJIlNlZSBQcm9ncmFtbWluZyB0aGUgTUlQUzY0IDVLIFByb2Nlc3NvciBDb3JlIEZhbWlseSAiCisJCQkiU29mdHdhcmUgVXNlcidzIG1hbnVhbCBhdmFpbGFibGUgZnJvbSB3d3cubWlwcy5jb21cbiI7CisJCWJyZWFrOworCWNhc2UgQ1BVX01JUFNfUjEwMDAwOgorCWNhc2UgQ1BVX01JUFNfUjEyMDAwOgorCQlldmVudF9kb2MgPQorCQkJIlNlZSBORUMgUjEwMDAwIC8gUjEyMDAwIFVzZXIncyBNYW51YWxcbiIKKwkJCSJodHRwOi8vd3d3Lm5lY2VsYW0uY29tL2RvY3MvZmlsZXMvVTEwMjc4RUozVjBVTTAwLnBkZlxuIjsKKwkJYnJlYWs7CisJY2FzZSBDUFVfTUlQU19STTcwMDA6CisJCWV2ZW50X2RvYyA9CisJCQkiU2VlIFJNNzAwMCBGYW1pbHkgVXNlciBNYW51YWwgIgorCQkJImF2YWlsYWJsZSBmcm9tIHd3dy5wbWMtc2llcnJhLmNvbVxuIjsKKwkJYnJlYWs7CisJY2FzZSBDUFVfTUlQU19STTkwMDA6CisJCWV2ZW50X2RvYyA9CisJCQkiU2VlIFJNOTAwMHgyIEZhbWlseSBVc2VyIE1hbnVhbCAiCisJCQkiYXZhaWxhYmxlIGZyb20gd3d3LnBtYy1zaWVycmEuY29tXG4iOworCQlicmVhazsKKwljYXNlIENQVV9NSVBTX1NCMToKKwljYXNlIENQVV9NSVBTX1ZSNTQzMjoKKwkJZXZlbnRfZG9jID0KKwkJCSJTZWUgTkVDIFZSNTQ0MyBVc2VyJ3MgTWFudWFsLCBWb2x1bWUgMVxuIgorCQkJImh0dHA6Ly93d3cubmVjZWxhbS5jb20vZG9jcy9maWxlcy8xMzc1X1YxLnBkZlxuIjsKKwkJYnJlYWs7CisJY2FzZSBDUFVfTUlQU19WUjU1MDA6CisJCWV2ZW50X2RvYyA9CisJCQkiU2VlIE5FQyBSMTAwMDAgLyBSMTIwMDAgVXNlcidzIE1hbnVhbFxuIgorCQkJImh0dHA6Ly93d3cubmVjZWwuY29tL25lc2Rpcy9pbWFnZS9VMTY2NzdFSjNWMFVNMDAucGRmXG4iOworCQlicmVhazsKKworCWNhc2UgQ1BVX01JUFNfTE9PTkdTT04yOgorCQlldmVudF9kb2MgPSAKKwkJCSJTZWUgbG9vbmdzb24yIFJJU0MgTWljcm9wcm9jZXNzb3IgRmFtaWx5IFJlZmVyZW5jZSBNYW51YWxcbiI7CisJCWJyZWFrOworCisJY2FzZSBDUFVfUFBDX0U1MDA6CisJY2FzZSBDUFVfUFBDX0U1MDBfMjoKKwkJZXZlbnRfZG9jID0KKwkJCSJTZWUgUG93ZXJQQyBlNTAwIENvcmUgQ29tcGxleCBSZWZlcmVuY2UgTWFudWFsXG4iCisJCQkiQ2hhcHRlciA3OiBQZXJmb3JtYW5jZSBNb25pdG9yXG4iCisJCQkiRG93bmxvYWRhYmxlIGZyb20gaHR0cDovL3d3dy5mcmVlc2NhbGUuY29tXG4iOworCQlicmVhazsKKworCWNhc2UgQ1BVX1BQQ19FMzAwOgorCQlldmVudF9kb2MgPQorCQkJIlNlZSBQb3dlclBDIGUzMDAgQ29yZSBSZWZlcmVuY2UgTWFudWFsXG4iCisJCQkiRG93bmxvYWRhYmxlIGZyb20gaHR0cDovL3d3dy5mcmVlc2NhbGUuY29tXG4iOworCQlicmVhazsKKworCWNhc2UgQ1BVX1BQQ183NDUwOgorCQlldmVudF9kb2MgPQorCQkJIlNlZSBNUEM3NDUwIFJJU0MgTWljcm9wcm9jZXNzb3IgRmFtaWx5IFJlZmVyZW5jZSAiCisJCQkiTWFudWFsXG4iCisJCQkiQ2hhcHRlciAxMTogUGVyZm9ybWFuY2UgTW9uaXRvclxuIgorCQkJIkRvd25sb2FkYWJsZSBmcm9tIGh0dHA6Ly93d3cuZnJlZXNjYWxlLmNvbVxuIjsKKwkJYnJlYWs7CisKKwljYXNlIENQVV9BVlIzMjoKKwkJZXZlbnRfZG9jID0KKwkJCSJTZWUgQVZSMzIgQXJjaGl0ZWN0dXJlIE1hbnVhbFxuIgorCQkJIkNoYXB0ZXIgNjogUGVyZm9ybWFuY2UgQ291bnRlcnNcbiIKKwkJCSJodHRwOi8vd3d3LmF0bWVsLmNvbS9keW4vcmVzb3VyY2VzL3Byb2RfZG9jdW1lbnRzL2RvYzMyMDAwLnBkZlxuIjsKKworCQljYXNlIENQVV9SVEM6CisJCQlicmVhazsKKworCQkvLyBkb24ndCB1c2UgZGVmYXVsdCwgaWYgc29tZW9uZSBhZGQgYSBjcHUgaGUgd2FudHMgYSBjb21waWxlciB3YXJuaW5nCisJCS8vIGlmIGhlIGZvcmdldHMgdG8gaGFuZGxlIGl0IGhlcmUuCisJCWNhc2UgQ1BVX1RJTUVSX0lOVDoKKwkJY2FzZSBDUFVfTk9fR09PRDoKKwkJY2FzZSBNQVhfQ1BVX1RZUEU6CisJCQlwcmludGYoIiVkIGlzIG5vdCBhIHZhbGlkIHByb2Nlc3NvciB0eXBlLlxuIiwgY3B1X3R5cGUpOworCQkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKworCXNwcmludGYodGl0bGUsICJvcHJvZmlsZTogYXZhaWxhYmxlIGV2ZW50cyBmb3IgQ1BVIHR5cGUgXCIlc1wiXG5cbiIsIHByZXR0eSk7CisJaWYgKHdhbnRfeG1sKQorCQlvcGVuX3htbF9ldmVudHModGl0bGUsIGV2ZW50X2RvYywgY3B1X3R5cGUpOworCWVsc2UgeworCQlwcmludGYoIiVzJXMiLCB0aXRsZSwgZXZlbnRfZG9jKTsKKwkJcHJpbnRmKCJGb3IgYXJjaGl0ZWN0dXJlcyB1c2luZyB1bml0IG1hc2tzLCB5b3UgbWF5IGJlIGFibGUgdG8gc3BlY2lmeVxuIgorCQkgICAgICAgInVuaXQgbWFza3MgYnkgbmFtZS4gIFNlZSAnb3Bjb250cm9sJyBtYW4gcGFnZSBmb3IgbW9yZSBkZXRhaWxzLlxuXG4iKTsKKwl9CisKKwlsaXN0X2Zvcl9lYWNoKHBvcywgZXZlbnRzKSB7CisJCXN0cnVjdCBvcF9ldmVudCAqIGV2ZW50ID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCBvcF9ldmVudCwgZXZlbnRfbmV4dCk7CisJCWlmICh3YW50X3htbCkgCisJCQl4bWxfaGVscF9mb3JfZXZlbnQoZXZlbnQpOworCQllbHNlCisJCQloZWxwX2Zvcl9ldmVudChldmVudCk7CisJfQorCisJaWYgKHdhbnRfeG1sKQorCQljbG9zZV94bWxfZXZlbnRzKCk7CisKKwlyZXR1cm4gRVhJVF9TVUNDRVNTOworfQpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUudGFyLmd6IGIvb3Byb2ZpbGUudGFyLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExZGM3NGEKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS50YXIuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvb3Byb2ZpbGUudXJsIGIvb3Byb2ZpbGUudXJsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3ZTdjZGIKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS51cmwKQEAgLTAsMCArMSBAQAoraHR0cDovL2Rvd25sb2FkLnNvdXJjZWZvcmdlLm5ldC9vcHJvZmlsZS9vcHJvZmlsZS0wLjkuNy50YXIuZ3oKZGlmZiAtLWdpdCBhL29wcm9maWxlLnZlcnNpb24gYi9vcHJvZmlsZS52ZXJzaW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4MWFhNDQKLS0tIC9kZXYvbnVsbAorKysgYi9vcHJvZmlsZS52ZXJzaW9uCkBAIC0wLDAgKzEgQEAKKzAuOS43Cg==